Virtex-5: PCI express endpoint block plus

東京エレクトロンデバイスの Xilinx Virtex-5 + PCI express 評価ボードを持っているわけだが、このたび自前で ISE のプロジェクトを起こして、Virtex-5 に載っている PCI express endpoint block を使ってみた。意外と簡単。
– Core generator でパラメータを適当に設定して core を作る
– そのままだと BAR0 に 2kB の Block RAM が割り当てられる。とりあえずそのままで問題ないし、容量を変えたりしてもよい
– example_design というディレクトリにあるソース (.v でも .vhd でも) を片っ端からISE のプロジェクトに放り込む
– ピン配置は概ねそのままでよい。4 レーンのインタフェイスで使うことにしたのだが、変更したのは PCI express のコネクタからとるクロックの入力ピンだけ
これで、ふつうに Linux や FreeBSD で scanpci すると見えるようになる。すばらし。
ちなみに、以前 iMPACT を Linux で使おうとしていろいろ苦戦したのだが、結局のところ最近のカーネルを使っている人は libusb を使えばいいらしい。Xilinx の answer #29310 の通りにやって、楽勝だった (libusb は普通に入っていたので、インストールのところはすっ飛ばしたけど)。ただし、Xilinx の説明だと libusb だけ入れればいいように見えますが、fxload というのを入れないと firmware をロードするところがうまくいかないので、要注意 (新しく SuSE 11.0 を入れて、ここではまった…)。
とりあえず PIO でいいなら、BlockRAM のところを何かに置き換えればいいね。
今日は Linux の /dev/mem 経由でアクセスして遊んでみた。明日から何日かかけて勉強して、簡単なドライバを書く予定。