FC2カウンター FPGAの部屋 2010年05月22日
FC2ブログ

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

FPGAの部屋

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

MTM05に行ってきました

今日は、Make Tokyo Meetiong 05に行ってきました。
MTM05_1_100522.jpg

開場の11時より前に着いてしまったので体育館の前で待っていました。開場と同時くらいに体育館に入りました。
MTM05_2_100522.jpg

まだ人は少なかったです。最初にfenrirさんのねこカメラを見てきました。AlteraのMAX2とSDRAM、microSDコネクタ、CMOSカメラが実装されていました。基板小さい。。。
MTM05_3_100522.jpg

ねこにつけて、どのような行動をしているか調査するそうです。
MTM05_4_100522.jpg

面白そうです。基板を販売するんでしたら欲しいです。パソコンでOpenCVを使用してのねこ顔認識も見せて頂きました。
ニコ技のマッチ棒ロケットを見てきました。本も100円で買いました。中庭で飛ばしてみましたが、結構飛びます。70cm位の高さの台から、1.5mくらい飛びました。これ自由研究にどうかな?と思います。
MTM05_5_100522.jpg

FPGAカフェのブースでは、いろいろ売っていました。特に木のトランクが気に入りました。素材は杉でブラスト加工してあるそうです。年輪が浮き出ていました。黒いのは人工漆塗装だそうです。高い塗料ですね。一番大きいトランクは5万円でした。自分で作りたいです。次の目標にします。
MTM05_6_100522.jpg

あすぴよパパさんのCDドライブも良かったです。任意にトレイが出てきます。
MTM05_7_100522.jpg

他に色々ありました。面白かったです。
娘のお土産にビスマスの結晶を買ってきました。
  1. 2010年05月22日 20:55 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:2

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

いろいろカテゴリーが分散してしまうが、”LogiCORE? IP Spartan-6 FPGA Integrated Endpoint Block v1.1 for PCI ExpressR User Guide ”を参考に、Programmed Input Output(PIO) Example Designのシミュレーションについて勉強して行きたいと思う。
SP605でPCIe Coreを生成してみる3(PCIeユーザーズガイドを調べる)”のsample_smoke_test1で、ISimのInstance and Process NameペインからRP(Root Port)を選択して、Object Nameに表示された信号名を波形ウインドウにドラック アンド ドロップし、シミュレーションしてみた。
その際に、波形にトランザクションパケットが見えたので、下に表示する。下のトランザクションパケットはRoot PortからEnd Pointへの送信のトランザクションパケットのようだ。(Root Portはシミュレーション用の記述のみです。End PointがFPGAに実装するハードIPを指します)
pcie_rp_tran_1_100522.png

Root Portの信号の説明は、”Spartan-6 FPGA PCI Express 用インテグレイテッド エンドポイント ブロック ユーザー ガイド (英語版)”の177ページからに書いてある信号名と一致する。
trn_td[63:0]はトランザクション層の送信データ。
trn_trem_nは、trn_td[63:0]のどこにデータが載っているかを示す。( 0 = packet data on all of trn_td[63:0]、 1 = packet data only on trn_td[63:32])
trn_sof_nは送信フレームの始まりを表し、trn_eof_nは送信フレームの終わりを表す。
最初の送信フレームの値は、0400000101a0000fで、次の送信フレームの値が、01a0000000000000だ。最初の送信フレームでは、trn_sof_n=0 となっていて、送信フレームの始まりを表している。
次の送信フレームでは、trn_eof_n=0 となっていて、送信フレームの終了を表している。この送信フレームでは、trn_trem_nも1になっていて、td[63:32]にのみデータが載っていることが分かる。

さて、このトランザクション層の送信フレームの値を解析してみることにする。
PCI Express 入門語講座によると、トランザクション層パケット(TLP)のヘッダには、3DW(DWは32ビット)と4DWの物があるそうだ。このTLPは、2番目の送信フレームで終了していて、データ長が32ビット長なので、3DWのTLPヘッダだけということが言える。
最初のバイト、バイト0は0x04となっている。このバイトの6,5番目のビットがTLPのフォーマット(Fmt)を表す。00なので、3DWデータ無しを表す。ビット4~0がTLPの種類(Type)を表す。Fmtが00、Typeが00100なので、コンフィギュレーション・リード・リクエスト(タイプ0)という事になる。
バイト1は、ビット6~4がトラフィック・クラス(TC)を表す。TCは000。後はリザーブ。
バイト2のビット7がECRCの有無、0なので無し。ビット6がエラー・フォワーディングかな?0なので無し?ビット5~4は属性。値は00。これについてはPCIeの規格書を見ろとのことだったが、コンフィギュレーション・リクエストの場合の属性は00だそうだ。64ページの図3.11参照。
バイト2のビット1~0とバイト3の全部がデータのペイロード長。0000000001なので、データは1DW。
次のバイト4とバイト5はリクエスタID。0x01a0
バイト6がタグ。これは0x00
バイト7のビット7~4が最後のDWのバイトイネーブル。これは0000に決まり。ビット3~0が最初のDWのバイトイネーブル。本には記載がなかったがアクティブハイだろうか?1111。最初と最後のバイトイネーブルをパケットに含めることで、バイト単位(のアドレス)でバースト転送をすることができる。でもPCIバスの様に個別に、常時バイトイネーブルが付くわけではないので、1バイト置きに書くということは出来ない。

次のフレームの0x01a00000を解析してみる。
最初のバイト(バイト8)は、バス番号、0x01
バイト9のビット7~3はデバイス番号、10100。ビット2~0は機能番号000
バイト10のビット3~0は拡張レジスタ番号、0000
バイト11のビット7~2はレジスタ番号、000000。つまり0番レジスタ。

まとめると、このTLPはバス番号01、デバイス番号10100、機能番号000(これがPCIeのエンド・ポイントのコンフィギュレーション時のアドレスのハズ)の0番レジスタへのコンフィギュレーション・リード・リクエスト(タイプ0)。Root PortのリクエスタIDは0x01a0。

結構、解析が面倒だった。次は、コンフィギュレーション・リード・リクエスト(タイプ0)にエンド・ポイント(Spartan-6のPCIeエンド・ポイントのハードIP)が応答して、返した値を調べてみる。
  1. 2010年05月22日 06:10 |
  2. PCI Express
  3. | トラックバック:0
  4. | コメント:3