« 古いデザインの解析 | トップページ | I2Cレベル変換器の動作 »

2021.11.04

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という非対称な設定にもできるのです。

1478579823_cosmok

オシロで見たところ、ビットレートは2.5Gbit/sで、1011011000 1011011000 1011011000・・・の繰り返しです。

Cskporg1

こういった波形の始まりの場所を探すにはカンマを探します。カンマとは1または0が5bit連続する符号を含んだコードで、通常はK28.5です。

ありました↓

Cskporg2 

5bit連続コードから後ろを解読すると111110100110001011011000101・・と読めます。

これを解読するわけですが、ここで8b10bの変換表の一部を載せます。

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・・・という符号の列だったことがわかります。

では、私が作ったデザインではどんな符号が出てくるのでしょうか。

Cskporg4

なんと!信号が出ていない!

これでは通信ができるはずがないですね。

さて、いったいどこで間違いが起きたのか。

アルバイトさんが作ったちゃんと動くデザインからいろんなものを少しずつ削除して挙動を調べたところ、PCI Expressの部分を削除すると動かなくなることがわかってきました。PCI ExpressのコアもGTXを使っているけど、なぜもう一つのGTXチャネルであるSFP+まで動かなくなるのか・・。クロックとかが絡んでいるのかな。

そして、GTXのコアや出来上がったファイルを比較してみることにしました。その結果、なんと!出来上がったFPGAのピン配置に違いがありました。

Diff_20211105120701

PCI Expressのコアを削除したほうは、光ファイバに出すGTXの信号が元PCI Expressの端子に行ってしまっていたのです。

これが原因で通信ができなかったようです。

どうしてこんなことが起きたかというと、XDCファイルに問題がありました。

Samepin  

光ファイバ(QSFP+)へのGTX出力(GT_gtx_p)の記述が2回あって、片方がPCI Expressの配置と被っていたのです。しかも、Vivado(2020.2と2019.2で確認)は、このような状況でもWarningを出さないようです。

普通のI/Oが被ったらすぐにWarningやErrorを出すはずのVivadoもGTXの端子の重複に対しては寛容なようです。

もちろんXDCファイルを修正したら動くようになりました。

また一つ、Vivadoのバグを発見したかもしれません!!!

|

« 古いデザインの解析 | トップページ | I2Cレベル変換器の動作 »

コメント

コメントを書く



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




« 古いデザインの解析 | トップページ | I2Cレベル変換器の動作 »