FC2カウンター FPGAの部屋 Spartan-6のPCIe Endpoint Block IPの勉強7(pio_writeReadBack_test1その5)
FC2ブログ

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

FPGAの部屋

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

Spartan-6のPCIe Endpoint Block IPの勉強7(pio_writeReadBack_test1その5)

Spartan-6のPCIe Endpoint Block IPの勉強6(pio_writeReadBack_test1その4)”の続き。

9. 送信TLP。コンフィギュレーション・ライト・リクエスト。5番レジスタへのWrite。5番目のレジスタはベースアドレス1なので、オール1を書いて、どのくらいの領域を要求しているかを見ている部分だろう?
pio_writeReadBack_test1_23_100610.pngpio_writeReadBack_test1_24_100610.png

10. 送信TLP。5番レジスタに対するコンフィギュレーション・リード・リクエスト。これは、どのくらいの領域を要求しているかをリードする。5番目のレジスタはベースアドレス・レジスタ1だ。
pio_writeReadBack_test1_25_100611.pngpio_writeReadBack_test1_26_100611.png

11. 受信TLP。タグ番号0x02なので、9. のコンフィギュレーション・ライト・リクエスト対するコンプリーションだ。コンフィギュレーション・ライト・リクエストが成功しているというお知らせ。
pio_writeReadBack_test1_27_100611.pngpio_writeReadBack_test1_28_100611.png

12. 受信TLP。10.のコンフィギュレーション・リード・リクエストに対するコンプリーション。値は0x00000000。すべてが0なので、ベースアドレスレジスタ1はディスエーブルとなる。
pio_writeReadBack_test1_29_100611.pngpio_writeReadBack_test1_30_100611.png

13. その後、レジスタ番号6~9(ベースアドレス・レジスタ2~5)に0xffffffffをWriteして、Readしたら0x00000000が帰ってきて、ディスエーブルされていることがわかった。その後、レジスタ番号0x0C(拡張ROMベースアドレス)を同様に調査して、0x00000000が帰ってきてディスエーブルされていることがわかった。これでベースアドレス関連のレジスタはすべて調べたことになる。これはPCIのコンフィギュレーションのやり方と同じだ。

14. 送信TLP。コンフィギュレーション・ライト・リクエスト。4番レジスタへのWrite。ベースアドレス0のみ有効なので、そこにアドレスを書いていると思われる。オール0を書いているので、0番地から1Mバイトマップされる。
pio_writeReadBack_test1_31_100612.pngpio_writeReadBack_test1_32_100612.png

15. 送信TLP。5番レジスタ(ベースアドレス1)へオール0を書いている。ディスエーブルとわかっていてもオール0を書くんだ?その後、残りのベースアドレス全部と拡張ROMベース・アドレスにオール0を書き込んでいる(多分、途中は確かめてないけど)。その間にもコンフィギュレーション・ライト・リクエストのコンプリーションは帰ってきている。

16. 送信TLP。コンフィギュレーション・ライト・リクエスト。レジスタ番号1番への書き込み。レジスタ番号1番はステータス・レジスタとコマンド・レジスタだ。コマンド・レジスタへ0x0003を書き込んでいる。これは、メモリ空間とI/O空間に対するアクセスを有効化するビットを1にしている。
pio_writeReadBack_test1_33_100612.pngpio_writeReadBack_test1_34_100612.png

17. 送信TLP。コンフィギュレーション・ライト・リクエスト。レジスタ番号0x18番への書き込み。つまりコンフィギュレーション・レジスタ0x60番地への書き込み。最下位のバイトに0x5Fを書き込んでいる。これはなんだろう?要調査。
pio_writeReadBack_test1_35_100612.pngpio_writeReadBack_test1_36_100612.png

18. その後は、コンフィギュレーション・ライト・リクエストへのコンプリーションが次々着ている。

19. 送信TLP。65.25 usecあたりに0x00000000番地へのメモリ・ライト・リクエストが、データは1バイトずつのリトルエンディアンで0x04030201。これは、”Spartan-6のPCIe Endpoint Block IPの勉強4(pio_writeReadBack_test1その2)”でEndPoint側で観測されたパケットでもある。Root Portでメモリ・ライト・リクエストを送ってから、EndPointで受信されるまでに約1usec経過している。
pio_writeReadBack_test1_37_100612.pngpio_writeReadBack_test1_38_100612.png

20. 送信TLP。0x00000000番地へのメモリ・リード・リクエスト。
pio_writeReadBack_test1_39_100612.pngpio_writeReadBack_test1_40_100612.png

21. 受信TLP。20.の0x00000000番地へのメモリ・リード・リクエストのコンプリーション。受信したデータは、データは1バイトずつのリトルエンディアンで0x04030201で、19.で送ったデータと同一。EndPoint側の記事は、”Spartan-6のPCIe Endpoint Block IPの勉強5(pio_writeReadBack_test1その3)”。
pio_writeReadBack_test1_41_100612.pngpio_writeReadBack_test1_42_100612.png

これで、pio_writeReadBack_test1は終了。一般的なPCIe EndPointの初期化手順を見てきた気がする。
  1. 2010年06月11日 05:26 |
  2. PCI Express
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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