GTXから信号が出力されない!?
アルバイトの学生さんが昔作ってくれたGTXの古いデザインではHyperFADCと通信ができたのですが、その学生さんが作ったデザインをベースに私がVivado 2020.2で新たに作りなおしたデザインではなぜか通信ができないので、オシロでGTXの信号を直接見てみることにしました。
使っているボードはCosmo-K+。SFP+のCH1だけをみています。このシステムではHyperFADC→Kintexへの通信は10Gbps×4なのですが、Kintex→HyperFADCの通信は2.5Gbps x1と非対称なのです。なぜならば高速通信を受ける側をArtix-7のXC7A25Tにしたため5Gbpsまでしかいかないし、そもそもFPGAからADCへ送る情報ってほとんどないからです。XILINXのGTXは送信側を2.5G、受信側を10Gという非対称な設定にもできるのです。
オシロで見たところ、ビットレートは2.5Gbit/sで、1011011000 1011011000 1011011000・・・の繰り返しです。
こういった波形の始まりの場所を探すにはカンマを探します。カンマとは1または0が5bit連続する符号を含んだコードで、通常はK28.5です。
ありました↓
5bit連続コードから後ろを解読すると111110100110001011011000101・・と読めます。
これを解読するわけですが、ここで8b10bの変換表の一部を載せます。
1が5bit連続するコードはK28.1、K28.5、K28.7の3種類しかありません。この中でも特に性質が良いとされるK28.5が普通はカンマとして使われます。この5bit連続の部分に着目して解読すると、
11111010] [0110001011] [011000101]・・・
となって、K28.5 D0.0 D0.0 D0.0 D0.0 D0.0・・・という符号の列だったことがわかります。
では、私が作ったデザインではどんな符号が出てくるのでしょうか。
なんと!信号が出ていない!
これでは通信ができるはずがないですね。
さて、いったいどこで間違いが起きたのか。
アルバイトさんが作ったちゃんと動くデザインからいろんなものを少しずつ削除して挙動を調べたところ、PCI Expressの部分を削除すると動かなくなることがわかってきました。PCI ExpressのコアもGTXを使っているけど、なぜもう一つのGTXチャネルであるSFP+まで動かなくなるのか・・。クロックとかが絡んでいるのかな。
そして、GTXのコアや出来上がったファイルを比較してみることにしました。その結果、なんと!出来上がったFPGAのピン配置に違いがありました。
PCI Expressのコアを削除したほうは、光ファイバに出すGTXの信号が元PCI Expressの端子に行ってしまっていたのです。
これが原因で通信ができなかったようです。
どうしてこんなことが起きたかというと、XDCファイルに問題がありました。
光ファイバ(QSFP+)へのGTX出力(GT_gtx_p)の記述が2回あって、片方がPCI Expressの配置と被っていたのです。しかも、Vivado(2020.2と2019.2で確認)は、このような状況でもWarningを出さないようです。
普通のI/Oが被ったらすぐにWarningやErrorを出すはずのVivadoもGTXの端子の重複に対しては寛容なようです。
もちろんXDCファイルを修正したら動くようになりました。
また一つ、Vivadoのバグを発見したかもしれません!!!
| 固定リンク
コメント