PCI Expressの波形が見えた!
昨日の続きの実験をしています。
昨日の日記では『シンボルを解読すると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』と書きましたが、解読方法が間違っていました。
正しくは、下の図のように、8bitの2進数のデータを上位3bitと下位5bitに分けて、入れ替えて読みます。

私が昨日K23.4と書いたのは、1BChというデータを1 10111 100と読んだのですが、正しくは1 101 11100と区切ってK28.5と読むのが正解でした。K28.5はCOMシンボルと言って、ある種のシーケンスの開始を表す符号です。
さて、PhillipsのPX1011Aは250MHzの速度でデータを出してくるので、それをSpartan3 FPGAでそのまま処理するのはちょっと難しいです。Virtex4ならば余裕でしょうが、Spartan3ではちょっと厳しいでしょう。
そこで、次の図のようにDDRみたいなことをやって、入力した信号を125MHzで2倍のビット幅の信号に変換してやります。つまり、8bit250MHzで受信したデータは、FPGAの中で16bit125MHzに変換されて処理されるわけです。

125MHzの信号ならば、Spartan3でも処理できる速度です。
こうして、速度を変換した信号をBLOGANAで観てみると、次の図のようになりました。

白い線(トリガポイント)の後で、繰り返し同じ波形が見えています。
これを解読すると、次の図のようになりました。

パソコンのチップセットが送ってくる「トレーニングシーケンス」のパターンが、しっかりと読めるようになりました。
このシーケンスに呼応するような信号を返してやれば、きっとリンクが確立するのでしょう。
その楽しみは明日にとっておくことにします。
今日のハマリどころは、PCI Expressは普通、PHYチップが出力するRXCLKで動作するのですが、PX1011Aはリセットをかけてから物理層のリンクが確立するまでの間はRXCLKが100MHzが出力されるところでした。リンクが確立すると、このRXCLKは250MHzに変わります。FPGAの中でDCMを使っている場合は適当なところでDCMにリセットをかけてやらなければなりません。
それにしてもPCI Expressは、JTAGを使ってデバッグしないと、とても開発をやってられません。
| 固定リンク


コメント