FC2カウンター FPGAの部屋 Spartan-6のPCIe Endpoint Block IPの勉強2(シミュレーションでRoot Portの動作を確認2)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Spartan-6のPCIe Endpoint Block IPの勉強2(シミュレーションでRoot Portの動作を確認2)

Spartan-6のPCIe Endpoint Block IPの勉強1(シミュレーションでRoot Portの動作を確認)”の続き。
前回、Root Port(RP)からEnd Point(EP, Spartan-6のPCIeハードIP) に0番レジスタにコンフィギュレーション・リード・リクエスト(タイプ0)を送った。今回はその応答パケット(コンプリーション)を見てみることにする。

下の図に、コンフィギュレーション・リード・リクエスト(タイプ0)に対するコンプリーションのパケットを示す。(たぶん)
pcie_rp_tran_2_100523.png

今回も、前回同様に、たぶんtrn_rsof_nが受信パケットスタートで、trn_reof_nが受信パケットエンド。
trn_rsof_n、trn_reof_nが0にアサートされているどちらのクロックサイクルも、trn_rrem_nがアサートされている(0)ので、4DW長(4*32bit)だ。その時のtrn_rd[63:0]は、4a0000010000000401a00000ee100700だった。

この、2つの受信したTLPを解析してみよう。
最初のバイト、バイト0は0x4aだ。このバイトの6,5番目のビットがTLPのフォーマット(Fmt)を表す。値は10なので、3DWでデータありを表す。ビット4~0がTLPの種類(Type)を表す。Fmtが10でTypeが01010なので、コンプリーション(データあり)を示す。これは、前回のコンフィギュレーション・リード・リクエスト(タイプ0)に対するコンプリーションのパケットとなる。
バイト1は、ビット6~4がトラフィック・クラス(TC)を表す。TCは000。後はリザーブ。
バイト2のビット7がECRCの有無、0なので無し。ビット6がエラー・フォワーディングかな?0なので無し?ビット5~4は属性。値は00。これについてはPCIeの規格書を見ろとのことだった。.コンプリーションの場合の属性の値は書いていなかった(要調査)。66ページの図3.13参照。(2010/05/24:追加)PCI Express System Architecture によると、ビット5はRelaxed Ordering Bitで、ビット4は、No Snoop Bitだそうだ。
バイト2のビット1~0とバイト3の全部がデータのペイロード長。0000000001なので、データは1DW。
次のバイト4とバイト5はコンプリータID。0x0000。これは、End Point(EP, Spartan-6のPCIeハードIP)のID。
バイト6のビット7~5は、コンプリーション・ステータス、000なので、成功。ビット4はバイト・カウント・モデファイ。これはリクエストで要求したデータ長を変更してあると1になり、そのままだと0になると思う。値までは本に書いてなかった。値は0なので、データ長はリクエストで要求したまま。
バイト6のビット3~0とバイト7はバイト・カウント。値は004。DW=4バイトなので、あっている。

次のフレームの01a00000ee100700を解析してみよう。
最初のバイト(バイト8)とバイト9は、リクエスタID。値は0x01a0。これは、コンフィギュレーション・リード・リクエスト(タイプ0)のリクエスタIDと同一。
バイト10はタグ。値は0x00。これもコンフィギュレーション・リード・リクエスト(タイプ0)タグと同一。
バイト11のビット6~0は下位アドレス。値は0x00。
次のバイト12~15がペイロードでリード・データ。値は0xee100700。本によるとデータのペイロードのバイト列は0バイトから始まると書いてある。つまり逆順になっているので、今まで通りに書くと、0x000710EEとなる。

PCIコンフィギュレーション空間の0番地から32ビットだと、デバイスIDが16ビット、ベンダIDが16ビットとなっている。RPのコンフィギュレーション・リード・リクエスト(タイプ0)に対するEPのコンプリーションのペイロードのリード・データから、デバイスIDが0x0007、ベンダIDが0x10EEであることがわかった。Xilinx社のベンダIDは0x10EEだ。
  1. 2010年05月24日 05:23 |
  2. PCI Express
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/1473-3a4898af
この記事にトラックバックする(FC2ブログユーザー)