今設計している新しいFPGAボード「Cosmo-K」は、拡張コネクタとして2.54mmピッチのピンヘッダを使う予定です。
ピンヘッダは万能基板で簡単に拡張できたり、フラットケーブルをつないだりするのにとても便利です。メザニンでは、拡張するためにわざわざ基板を起こさなければならないので、とても面倒です。
ですが、2.54mmピッチのピンヘッダはどこまで信号品質が保てるのでしょうか?
はたして1GHzの信号は通るのでしょうか?
そういったことを実験してみました。
まず、ピンヘッダが出ているボードとして特電Artix-7ボードを使います。この基板のピンヘッダの多くは、差動ペアが隣り合うように配置されています。
今、下の写真のようなHDMI入出力拡張ボードを作っているので、このボードを使って実験しました。
このボードと、測定のスキームは次の図のようになります。
Artix-7のMMCMで500MHzと1GHzと100MHzのクロックを作り、それらのクロックをODDRとOBUFDSで差動信号として出力します。計6本の信号は平行して基板上を走ってピンヘッダから出します。
それらを2.5GHz帯域の差動プローブで受けて、40Gサンプル/秒のオシロで測った結果を示します。
まず、IOSTANDARDをLVDS_25にしたときの波形です。左から順に250MHz,500MHz,1GHzです。VCCIOは2.5Vにしています。なお、UCFファイルでLVDS_25を指定して、実際のVCCIOを3.3VにするとArtix-7では信号は出ない。1.8Vなら出る。裏ワザなので製品では使わないようにしよう。
(クリックで拡大)
シングルエンドの信号であったり、差動信号でも終端しなければバリバリにクロストークしますが、差動信号にして終端すればクロストークは観測できないほどに激減します。250MHz(一番左)の信号を見ると、平行して走っている1GHzの成分は漏れてきていません。また、反射もほとんど見られません。反射してヒゲが出たとしても、その成分が周波数が高すぎてオシロで見られないだけかもしれませんが。
次に、TMDS_33というIOSTANDARDを使った場合です。
(クリックで拡大) 終端抵抗が間違っているので信用しないこと
250MHzのときの波形がちょっと乱れています。隣を走る1GHzや500MHzからクロストークして漏れてきているのかもしれません。後からわかったのですが、終端抵抗の値を間違えていました。実際に使うときにはもっときれいな波形のはずです。
次は、シングルエンドのLVCMOS33を使って、疑似的な差動信号を作った場合。
(クリックで拡大)
これは酷い波形ですね。終端抵抗の有無に関わらず、汚いです。
250MHzの時は振幅がオーバー気味で、500MHzだと凸凹していて、1GHzは何も見えません。これではきっと通信はできません。でも、ピンヘッダが悪いのではなく、FPGAからLVCMOS33で出すことができないだけです。
最後はDIFF_SSTL18の場合です。
(クリックで拡大) 終端抵抗が間違っているので信用しないこと
LVCMOS33よりはマシですが、1GHzも厳しいかもしれません。周波数が高くなると振幅が小さくなるのも嫌な感じです。あとから分かったのですが、これも終端抵抗の値を間違えていました。
次の図は、LVDS_25規格にして、乱数パターンを出してみたときの図です。ビットレートは1Gbpsです。
(クリックで拡大)
左から順に、波形の全体、拡大、そのさらに拡大となっています。
見た感じでは、波形が全体的に上下に揺らいでいます。ただし、1つ1つのビットは綺麗なので、十分にデコードできそうです。また、拡大してみるとアイはちゃんと開いていそうなのですが、綺麗とも言い難い波形です。
その原因は、本当の乱数を送っているため、0が多かったり1が多かったりする箇所で、信号のベースラインが上に下に移動してしまうためだと思われます。
また、ただのI/Oを使っているので、プリエンファシスが効かないという理由もあります。
というわけで、ピンヘッダでも1GHzが通ることがわかりました。ピンヘッダだから信号が減衰して通らなくなるとか、反射がひどくて通信できないということはなさそうです。
まぁ、ピンヘッダの部分でインピーダンスは不整合しているのでしょうけれども、反射っていうのは反射している距離が問題なのですから、こんなもんでしょう。
まとめると、
- FPGAのIO STANDARDをLVDS25やTMDSなど差動規格にすること
- シングルエンドだとクロストークが激しいから、ダメ。
- 差動信号で終端すれば1GHzでもいける。
- LVCMOS33は、振幅の抑制が効かず、高速信号には向かない
- Artix-7のHRポートからLVDSを出すにはVCCIO=2.5Vでないといけない
- TMDS_33やDIFF_SSTL18は終端抵抗の値が間違えているためか、今回の実験ではあまり綺麗ではない
- 乱数パターンの送信で波形が乱れがちなのは、おそらくFPGAの出力バッファの問題。8b/10b変換してディスパリティに気を付ければ改善するはず。
- 汎用のI/Oを使っているので、プリエンファシスが効かない。1~2GHzあたりが限界なのではないだろうか。
私はピンヘッダ万歳派で反メザニン主義なのですが、気になる人はメザニンを使ってください。
Cosmo-Kの拡張ピンには汎用のピンヘッダを使いますが、さすがにCosmo-Zの拡張基板にはメザニンを使います。
最近のコメント