PCIe

このところずーと取り組んでいる XilinxSpartan-6/Virtex-5 上の PCI Express 。まず PCIe の end point と PLB の橋渡しは出来るようになった。これはユラの貢献によるところが大きい。
ATX ボードに SP605 をのせて Windows が立ち上がり、そんでもって PCItree(有償です)からみると VendorIDと ProductID を見ることが出来る。これはうまくいった。いまはメモリに分類されている。
x86 からみると BAR0 と BAR1 が見えるはずだ。これは bios がやってくれるのか?OS がやってくれるのか知らないけど x86 の空間にマップされる。x86 の空間と PCI 空間は同じだ(ほぼ同じ?)。
さて BAR0 に配置されたメモリ領域をアクセスしようとすると、その要求は FPGA の pcie の end point にたどりつく。end point には今回開発した core がブリッジとなって PLB に要求を出す。つまりこいつは PLB のマスターにもなっている。ブリッジの設定で BAR0 をどこにはりつけるかを設定可能なので、今はメモリに貼り付けている。
PLB には MPMC 経由でDDR3が接続されている。その他に MicroBlaze や UART などなど。
やりたいことはこの上にまずは logiLENS (魚眼レンズの補正用 IPコア) を配置し、Windows 上から自由にみること。入力は aptina の CMOS カメラ経由からで logiBAYER が受けて logiLENS へ流す。その他にもlogiCVC-ML や logiWIN もつけてみたい。
logiLENS は基本的に logiMEM(XMB バス)に繋がるように設計されている。その他 NPI にも接続可能。ただ、DDR3 への接続は非常に大変なのでここはブリッジに直接つないでいる。
ブリッジは XMB のポートも持つ。といっても DDR3 には繋がっていない。XMB の要求があればその要求を pcie へ流す。したがって、XMB に繋がっているということは PCIe に繋がっているということだ。なんか非常に複雑になってしまった。
さて、さっき PCItree でみていたらとりあえずコンフィグレーションも終わり無事マップ(物理的な配置が決まる)はされたようなのだが BAR0 をアクセスした瞬間に Windows がフリーズした。ありゃー。