« PCI Expressのプロトコルアナライザ | トップページ | 汎用PCI Expressデバイスドライバを作りたい »

2009.03.07

特電PCI Expressコアを更新(V0.4)

IPコアを更新しました。

主な更新点は
・SKPパケットを送るようにしたこと
・BAR0~BAR2の設定とIDについて、コンフィグ空間のカスタマイズを可能にしたこと
・BE[3:0]信号を出力するようにしたこと
です。

SKPパケットというのは、PCI Expressのシステムボードとアドインカード間でのクロック速度の違いを吸収するためのパケットです。定期的に意味のないパケットを送信しあうことで、双方のクロック速度に多少の差があっても調整することができるようにというものです。

『普通、アドインカードはパソコンのマザーボードに挿して使うので同じクロック源を使うから、速度は一致するはず。だからSKPパケットなんて送らなくてもいいだろう。むしろ、SKPに占有される時間を本来の通信に割り当てればスループットが向上する』、なんて考えていました。
しかし、SKPパケットを送らないようにしてしまうと、通信がない場合には論理アイドル(D0.0)しか送られません。パソコンとアドインカード間で通信するだけなら問題ないのですが、PCIeアナライザをつないだ場合に問題がありました。通信をしないとCOMシンボルがずっと送られないので、同期が取れないらしく、うまく解析できないのです。このため、SKPパケットはやはり必要だろうという結論になりました。

次に、BAR0~BAR2のサイズをカスタマイズできるようにしました。

main.vhdの中に以下のような長い(160ビット)の定数が定義されています。この定数の各ビットがコアの中まで伝わっていって、コンフィグ空間のしかるべきビットにセットされるというしくみです。
今後、より細かい設定ができるようになった場合にも、コアのポートを増やすことなく、このような定数のビット数を増やすだけで対応できます。


constant customize_c : std_logic_vector(159 downto 0) :=
x"FF000000" -- [159:128] bar2 addr space (16MBytes)
& x"FFF00000" -- [127:96] bar1 addr space (1MBytes)
& x"FFFFC000" -- [95:64] bar0 addr space (16kBytes)
& x"110000" -- [63:40] class code
& x"01" -- [39:32] revision id
& x"xxxx" -- [31:16] device id
& x"xxxx" ; -- [15:0] vendor id

BAR0に8192バイト、BAR1に1Mバイト、BAR2に16Mバイトの空間を割り当てたところ、ちゃんと、要求したサイズのメモリ空間が確保されました。
Resource

最後の変更点は、BE[3:0]を出力するようにしたことです。やはり、charやshortサイズでアクセスしたいものです。これで、FPGAの中に構成したメモリを1バイト単位で操作できるようになりました。
すこしずつですが、まともなコアになりつつあります。

修正版のコアと、アプリケーション、マニュアルは本日更新しました。
下記のページからダウンロードできます。
http://www.tokudenkairo.co.jp/pcie/

次はオリジナル・デバイスドライバの開発と、バースト転送の実装、アプリの強化などを行おうと思います。
皆様、どうぞご支援のほどよろしくお願いします。

|

« PCI Expressのプロトコルアナライザ | トップページ | 汎用PCI Expressデバイスドライバを作りたい »

コメント

コメントを書く



(ウェブ上には掲載しません)




« PCI Expressのプロトコルアナライザ | トップページ | 汎用PCI Expressデバイスドライバを作りたい »