PCI Expressの実験開始
PCI Expressのコアを自分で作ることにします。
PCI Expressは、PCIとは違い、物理層からアプリケーション層まですべて完成していないと、マザーボードは全く認識してくれません。認識してくれなければ、パソコン上のプログラムからいくらI/Oポートや物理メモリを叩いても、その指令がブリッジを超えることができないのです。
したがって、PCIの時によくやったように、I/Oポート叩きやメモリライトなどを行ってロジアナで信号観察・・というわけにはいきません。
PCI Expressの仕様は複雑なので、一気に全部を作ることはできません。したがって、一番下の層から、確実に動作する層を順々に作っていくことにします。
ボードは、XILINXのPCI Express評価キットを使います。
このボードは、PhilippsのPX1101AというPCI Express用のPHYチップと、Spartan3のXC3S1000がのっています。
ほかには、DDR SDRAMやビデオ出力なども乗っていて、豪華なボードです。
このボードを、PCI Expressに対応したマザーボードに挿入します。

上の写真のように、PCI Expressのボードも、マザーボード剥き出しの状態です。
この実験に使った剥き出しのパソコン(マザーボードや、ハードディスク、電源、メモリなど)は、3万円台で作ることができました。
さて、PHYチップのPX1101AはFPGAと接続しますが、インタフェースの速度は250MHzです。FPGAとPHYチップの間を8bit/250MHzでつなぐのですが、常識的に考えても周波数が高すぎます。LVTTLやLVCMOSの信号ではまずうまくいかないでしょう。そこで、この評価ボードではSSTL_2という信号形式を使うようになっています。
SSTL_2というのは、終端抵抗を使ってなんとか高速信号をやりとりするやり方です。
周波数が高いと大変ですね。
FPGAには、ほとんど何もしない回路を書いておきます。
今回作った回路は、タイマーで周期的にリセットをかけてPHYチップを初期化してやるだけの単純なものです。
これをマザーボードに挿せば、マザーボード上のチップセットがきっとPCI Expressのボードを探しに来てくれるでしょう。
MITOUJTAGのロジックアナライザで波形を見ると、何かを受信しているのが見えました。

ボードとチップセットの間でリンクが確立すると、PX1011AはRXVALIDという信号をHにします。このRXVALIDがLの場合は、RXDATAとRXDATAKは無効な値です。
見ると、RXVALIDが数十ミリ秒で周期的にアクティブになって、何かを送ってきています。ですが、こちらのFPGAは、たとえリンク確立のパケットを受け取っても、無視して何も返しません。
チップセットはリンク確立をしようと延々と頑張っているのでしょうか。
MITOUJTAGの通常モードのロジアナは1クロックごとに信号を捉えることができないので、BLOGANA機能を使います。BLOGANAならば1クロックごとの信号が見えます。
何か見えていますね。
あるタイミングで受信したシンボルを解読してみると、K23.4 K30.7 K30.7 D26.5 D00.2 D00.0 D22.5 D22.5 D22.5 D22.5 D22.5 D22.5 D22.5 D22.5 D22.5 D22.5 というデータが16ワード周期で来ています。
16周期ということは、おそらく、「Link Initialization & Training」というシーケンスを実行したいのだとは思いますが、このK23.4というのは有効な開始コマンドではありません。
おそらく、今の回路では、データが正しく受信できていません。
正しいデータが受信できるように、これからタイミングを調整していきましょう。
今日、何となくわかったことは、PCI Expressのマザーボードは最初に「Training Sequense」を送ってくるっぽいということです。
| 固定リンク



コメント