大型連休を利用して、VirtexII ProのRocketIOをカスタムモード(GT_CUSTOM)で動かしてみました。
RocketIOというのは、XILINXのVirtexII ProやVirtex4などのFPGAに内蔵されている高速シリアル通信インタフェースで、これを使うと1チャネルあたり最大3.125Gbpsの通信が行えます。
XILNIXのアプリケーションノートには8b/10bをバイパスした設計例はいくつかありましたが、内蔵8b/10bを活用した設計例は見つけられませんでした。
そこで、試行錯誤の末、RocketIOの使い方をマスターできました。
私がRocketIOを動かす上で、ポイントだと思った箇所を書きます。

★マニュアルの熟読
ユーザーガイド(UG024)にはすべて目を通すこと。読み飛ばしていい個所は、Visetteディスパリティ、チャネルボンディング、CRCそして第4章、付録AとC。これ以外の箇所は細部まで重要。
特に、デジタル部の設計ではこのマニュアルと東京エレクトロンデバイス殿のWebサイトにある資料「wb_Rocket_IO_Manual_rev20」を熟読すること。
アナログ部の設計(基板設計と電源フィルタ、部品の選定など)は、wb_Rocket_IO_Manual_rev20とUG024、そしてアプリケーションノートを熟読。
★デバッグの順序(送信側)
1 ありえないK符号を送信し、TXKERRが立つことを確認。
2 適当なK符号やD符号を送信し、TXRUNDISPが正しく変化することを確認。
3 カンマやIDLEにどのようなK符号を使うかを決める。
これは、ユーザが勝手に決めていいのだが、GigabitEtherやFiberchannelを参考にして合わせても良い。カンマでもIDLEでもないダミーのK符号(自分専用)も決めておくと便利。
なお、ユーザガイドにはK28.7をプロトコルに使用するなと書かれている。ビット配列が0011111000と単純なためだろうか。
4 以下のようなフレームを連続して繰り返し送信する機能を作る。これで受信側のテストに備える。
COMMA、適当なデータ(乱数など)・・・、IDLE・・・
順番は適当でよい。
★デバッグの順序(受信側)
1 送信側と異なる水晶モジュールを使って実験し、RXRECCLKが復元できることを確認。
2 RXCOMMADETが見えるか
(*COMMA_DETECTや*COMMA_10B_VALUEアトリビュートなどの設定が必要)
3 RXCHARISKが見えるか
(長いK符号の列を送ると、弾性バッファの影響で多少不思議な挙動をするかも)
4 受信ステートマシンを作って、データの中身をチェック
→LFSRで作った乱数を送受信するなどして、データを検証
次に、ユーザガイドや、wb_Rocket_IO_Manual_rev20を読んでもなかなか掴めなかったポイントを以下に書きます。
★GT_CUSTOMでは、以下のアトリビュートの設定は必須
・CLK_COR_SEQ_*_*
→これは、IDLEの符号を指定する。これを入れないと送受信間のクロックの差を吸収することができず、エラーが頻発する。
これは11ビットのベクトルである。最上位ビットは8b/10bをバイパスする(1)か、否(0)かの指定。8b/10bを使用する場合、9ビット目はK符号かD符号かを表す(マニュアルに詳しく記載されていない?)。
・CLK_COR_SEQ_LEN 16ビットモード時には、当然、「2」でしょう。
・M/PCOMMA_10B_VALUEと関連するアトリビュート一式。いわゆるカンマの符号を設定する。
★その他のポイント
・RXCHARISCOMMAとRXCOMMADETの違い。RXCHARISCOMMAは8b/10bと弾性バッファの後ろなので、クロック補正などの影響を受ける。
・RXCOMMADET *COMMA_DETECTに影響を受ける
・RXCHARISCOMMA DEC_*COMMA_DETECTに影響を受ける。K符号すべてに反応!?(MCOMMA_10B_VALUEとかで設定した値が反映されない!?)
・再アラインメントは行ってくれないと思ったほうがいい。
・16ビットモードならば、クロックコレクションのシーケンス長を2にすること。1だと補正の時にバイトの上位下位がひっくり返ってしまう。
・8b/10bを使用する場合、送信ディスパリティの計算は自動で行ってくれるようだ。ユーザがTXCHARDISPMODEとTXCHARDISPVALを触る必要はない。
・1.2Gbpsくらいでは内蔵シリアルループバックは正常に動作したが、2.5Gbpsでは内蔵のシリアルループバックがうまくいかない。なぜ?何か設定を間違えたか?
・送信電圧を増やすと消費電流が増加。かなり熱くなる。きちんとした基板と伝送線路なら最小電力でも十分。
・カンマの値は、マスクを利用して複数の値を設定するのではなく、1つの値に特定させたほうがデバッグが楽。
・作動ペアの片側をはずしても2.5Gbpsでそれなりに通信できる。ただし、多少エラーは発生する。頻度は未測定。しっかりしたエラー訂正を行えば1本線での通信ができないだろうか。(邪道か?)
最近のコメント