製品情報>Kintex-7 PCIe Express光ボード「Cosmo-K」>開発日記>2016年9月

2016年9月

ピンヘッダに1GHzを通す(続き)

2016.09.29

昨日のブログでは、SSTLとTMDSの使い方を間違っていたので、測りなおしました。

Pinheader


まず、TMDS_33は50Ωで3.3Vにプルアップするのが正しい使い方のようなのですが、昨日は間違って100Ωでプルアップしていました。そのため、↓の図のような波形になっていました。

左から順に、250MHz、500MHz、1GHzのクロック(矩形波)です。

Tmds33_250Tmds33_500Tmds33_1000

(TMDS_33 プルアップ抵抗値間違え クリックで拡大) 

 

50Ωでプルアップしたところ、

Tmds33_25050ohmTmds33_50050ohmTmds33_100050ohm

(TMDS_33 プルアップ抵抗値正しい クリックで拡大) 

となって、低速度(250MHz)のときの波形の凸凹がなくなりました。

sun

次にSSTLですが、SSTLは50ΩでVTT(終端電圧。普通はVCCの1/2)につながなければいけないのですが、昨日はおもいっきり間違えていました。

Diffsstl18_0250Difftl_500mhzDiffsstl_ghz

(DIFF_SSTL_18  終端抵抗間違い クリックで拡大)

DIFF_SSTL_15で、50ΩでVTTに終端した、正しい波形は以下のとおりです。

Diff_sstl15_250Diff_sstl15_500Diff_sstl15_1000_1

振幅は徐々に小さくなっていきますが、1GHzのクロックもちゃんと出ています。

sun

では、実際にデータっぽいものを流してみましょう。まずは、8b/10bでエンコードしたLVDS_25の波形をご覧ください。K28.5 D10.2 D10.2 D27.3という、SATAのALIGNプリミティブのつもりです。

Lvds25_random5Lvds25_random4

綺麗でしょ。アイがはっきりと開いています。

 

DIFF_SSTL_15の場合は、LVDS_25よりは汚いですが、信号自体には問題なさそうです。LVDSのほうがサグが発生しにくいです。

Diff_sstl15_random1Diff_sstl15_random2
(DIFF_SSTL_15 クリックで拡大)

 

TMDS_33の場合は、さらに汚いですが、信号自体には問題なさそうです。

Tmds33_random2_2Tmds33_random1_2

(TMSS_33 クリックで拡大)

LVDSもTMDSもSSTLも、信号が同じ値が2回続いたときに電圧が高くなる現象がネックになっています。MGTではプリエンファシス(デエンファシス)でこれを回避できるのですが、汎用I/Oではどうしても回避できません。

 

結論を言うと、

  • 波形の綺麗さは、LVDS_25 > DIFF_SSTL15 > TMDS_33 >> LVCMOS33
  • ピンヘッダでも、1GHzは通る
  • ピンヘッダだからどうこうというよりも、むしろ、汎用I/Oだからプリエンファシスが効かなくて、速度の制限が出る可能性の方が高い。

 

2.54mmピッチのピンヘッダに1GHzの信号は通るか?

2016.09.28

今設計している新しいFPGAボード「Cosmo-K」は、拡張コネクタとして2.54mmピッチのピンヘッダを使う予定です。

ピンヘッダは万能基板で簡単に拡張できたり、フラットケーブルをつないだりするのにとても便利です。メザニンでは、拡張するためにわざわざ基板を起こさなければならないので、とても面倒です。

ですが、2.54mmピッチのピンヘッダはどこまで信号品質が保てるのでしょうか?
はたして1GHzの信号は通るのでしょうか?

そういったことを実験してみました。

まず、ピンヘッダが出ているボードとして特電Artix-7ボードを使います。この基板のピンヘッダの多くは、差動ペアが隣り合うように配置されています。

今、下の写真のようなHDMI入出力拡張ボードを作っているので、このボードを使って実験しました。

A7_hdmi_2A7_hdmi2

このボードと、測定のスキームは次の図のようになります。

Board_config

 

Artix-7のMMCMで500MHzと1GHzと100MHzのクロックを作り、それらのクロックをODDRとOBUFDSで差動信号として出力します。計6本の信号は平行して基板上を走ってピンヘッダから出します。

それらを2.5GHz帯域の差動プローブで受けて、40Gサンプル/秒のオシロで測った結果を示します。

sun

まず、IOSTANDARDをLVDS_25にしたときの波形です。左から順に250MHz,500MHz,1GHzです。VCCIOは2.5Vにしています。なお、UCFファイルでLVDS_25を指定して、実際のVCCIOを3.3VにするとArtix-7では信号は出ない。1.8Vなら出る。裏ワザなので製品では使わないようにしよう。

Lvds25_250Lvds25_500Lvds25_1000

(クリックで拡大)

シングルエンドの信号であったり、差動信号でも終端しなければバリバリにクロストークしますが、差動信号にして終端すればクロストークは観測できないほどに激減します。250MHz(一番左)の信号を見ると、平行して走っている1GHzの成分は漏れてきていません。また、反射もほとんど見られません。反射してヒゲが出たとしても、その成分が周波数が高すぎてオシロで見られないだけかもしれませんが。

sun

次に、TMDS_33というIOSTANDARDを使った場合です。

Tmds33_250Tmds33_500Tmds33_1000

(クリックで拡大) 終端抵抗が間違っているので信用しないこと

250MHzのときの波形がちょっと乱れています。隣を走る1GHzや500MHzからクロストークして漏れてきているのかもしれません。後からわかったのですが、終端抵抗の値を間違えていました。実際に使うときにはもっときれいな波形のはずです。

sun

次は、シングルエンドのLVCMOS33を使って、疑似的な差動信号を作った場合。

Lvcmos33_250Lvcmos33_500Lvcmos33_1000

(クリックで拡大)

これは酷い波形ですね。終端抵抗の有無に関わらず、汚いです。

250MHzの時は振幅がオーバー気味で、500MHzだと凸凹していて、1GHzは何も見えません。これではきっと通信はできません。でも、ピンヘッダが悪いのではなく、FPGAからLVCMOS33で出すことができないだけです。

sun

最後はDIFF_SSTL18の場合です。

Diffsstl18_0250Difftl_500mhzDiffsstl_ghz

(クリックで拡大) 終端抵抗が間違っているので信用しないこと

LVCMOS33よりはマシですが、1GHzも厳しいかもしれません。周波数が高くなると振幅が小さくなるのも嫌な感じです。あとから分かったのですが、これも終端抵抗の値を間違えていました。

sun

次の図は、LVDS_25規格にして、乱数パターンを出してみたときの図です。ビットレートは1Gbpsです。

Lvds25_randomLvds25_random3Lvds25_random2

(クリックで拡大)

左から順に、波形の全体、拡大、そのさらに拡大となっています。

見た感じでは、波形が全体的に上下に揺らいでいます。ただし、1つ1つのビットは綺麗なので、十分にデコードできそうです。また、拡大してみるとアイはちゃんと開いていそうなのですが、綺麗とも言い難い波形です。

その原因は、本当の乱数を送っているため、0が多かったり1が多かったりする箇所で、信号のベースラインが上に下に移動してしまうためだと思われます。

また、ただのI/Oを使っているので、プリエンファシスが効かないという理由もあります。

sun

というわけで、ピンヘッダでも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の拡張基板にはメザニンを使います。

 

Cosmo-KのPCI Expressの配線を引いた

2016.09.26

PCI Expressまわりの配線を行いました。

Pcie_gen2x4

FPGAとPCI Expressを接続するうえでの問題点は以下のとおりです。

  • 長距離を走って劣化した高速シリアル信号をFPGAで受信するのは難しい
  • FPGAの動作停止やバウンダリスキャンによって、PCI Expressの各信号の電位が変わり、本体PCの動作に影響を与えることがある(特にリセットまわり)

そこで、FPGAとカードスロットの間に、PCI Express用のリドライバというICを入れることにしました。そのため、配線が複雑になっています。

なお、PCI Expressのカードスロットは、左側がレーン0なのに、FPGAのMGTの番号は右側がレーン0となっています。そのため配線がねじれてしまいます。

PCI Expressにはレーン・リバーサルといって、どのレーンにどんな順番でつないでもいいはずなのですが、「必須」の仕様ではないため、マザーボードやカードが対応していないこともあります。

レーン・リバーサルはトラブルの元です。この基板では、レーン・リバーサルは使わずに、1対1でつないでいます。

 

Cosmo-KのDDR3まわりの配線が引けた

2016.09.25

開発中のCosmo-Kですが、DDR3まわりの配線を引いています。

Cosmokddr3

だいたいできた、といいたいところですが、DDRとFPGAとの間をもう少し縮めたいと思います。

Cosmokddr3_2

こうなりました。

最高密度で引いてこそ、基板は美しさを最高に引き出せると思います。

 

新ADCボード「Cosmo-K」について

2016.09.24

特電では、Kintexを使った、高速ADCデータ計測用ボードとして、新ブランド「Cosmo-K」(コスモ・ケイ)を企画しています。

Cosmo-Kでは、ボード上にADCを乗せるのではなく、ADCとキャプチャボードは分離し、その間を光ファイバでつなぐことにします。

イメージとしてはこんな感じです。

 

Adcprobe_2

高速ADCから出てくるデータはJESD204Bという規格です。JESD204Bというのは8b/10bを使った近代的なプロトコルです。Cosmo-Kでは、このJESD204B形式の信号を光ファイバでキャプチャボードへ伝送します。

実験の種類によって計測に必要なADCのスペックは様々です。例えば、1Gサンプリング 2ch 16bitが必要という人もいれば、250MHzで16chという人もいるし、10MHzでいいけど64chが欲しいという人もいます。

そのため、ADCプローブボードを実験に合わせて作り変えられるよう、分離することにしました。

1GHz,2ch,16bitならば40Gbpsになるので、QSFPのファイバが丸々1本必要な計算になります。

Cosmok

 

また、JESD204Bに対応していない汎用のADCを並べておいて、それらのADCから受け取ったデータをJESD204Bに変換して(エンコードして)送るようなボードも考えられます。

Adcprobe2

このことは、ノイズに敏感なADCのフロントエンドの部分と、データ処理を行うメインボードを分離し、ADCの部分をより小型にすることができるという効果もあります。

 

なお、Cosmo-KのKはKintexのKです。Cosmo-Kのキャプチャボードには、Cosmo-K0とCosmo-K-とCosmo-K+3種類のバリエーションを考えています。

one Cosmo-K0(コスモ・ケイ・ゼロ)

 

Cosmok0_2

Cosmo-K0は、SFPを2chと、ECL/NIM/オープンドレインの汎用入出力ポートを4ch搭載したボードです。

two Cosmo-K-(コスモ・ケイ・マイナス)

Cosmo-K-は、SFPを2ch搭載したロープロファイル型のボードです。ロープロファイルなので、小型のPCにも搭載できます。

2.54mmのピンヘッダも搭載しているので、拡張が容易です。EXPARTAN-6Tの後継機種としての位置づけです。

Cosmok

three Cosmo-K+(コスモ・ケイ・プラス

Cosmo-K+は、40GbpsのQSFPと、低速のSFPを1ch搭載しています。SFPはMGT(GTX)ではなく、汎用のI/Oポートにつながっているので、クロック・データ・リカバリなどの高度なことはできません。8b/10b変換も自前で行う必要があります。

Cosmok_2

QSFPは、JESD204B規格でADCからのデータを受信するためのポートとして使い、SFPはADCボードへコマンドを送ったりするために使います。

  • Cosmo-K0…SFP 10G×2ch。トリガ等の汎用入出力あり
  • Cosmo-K-…SFP 10G×2ch。
  • Cosmo-K+…QSFP 40G + 低速SFP 1G

 

もちろん、40Gbpsで受け取ったデータのすべてをパソコンに取り込むことはできないので、波形をFPGAの中でフィルタして、有意なイベントだけを取り込むという使い方になると思います。

開発ソフトウェアについては、Cosmo-Zのライブラリを改良したものが使われますが、APIを用意してユーザが自由にプログラムを作れるようにします。

sun

このCosmo-Kは、今年の展示会ET2016に出展しようと思います。

ご意見やご要望などがあれば、当ブログのコメント欄や、メール、会場で直接、どうぞお寄せください。

Kintex-7のPCI Expressボードを作ります

2016.09.23

特電では、Kintex-7のPCI Expressボードを作ることにしました。

Kintex-7のは昨年の7月ごろ設計していたのですが、その後、モチベーションが続かずに開発を中断してしました。

  • Kintex-7 XC7K160T-2FBG656C
  • DDR3メモリ 1GB
  • SFP+(光ファイバ)2本
  • SATA
  • PCI Express
  • 2.54mmピッチのピンヘッダ
  • USB3.0

という仕様でした。

昨年の最後の段階が↓の図です。

Kintexboard

特電では、お客様からの要望で12~16bit、2ch、1Gサンプル/秒のデータ取得装置を作ろうとしていますが、このクラスになるとADCからのデータがJESD204Bという高速シリアル通信で送られてくるのですが、10Gbpsを4レーンで受けられるボードが必要になります。

このボードをのSFPを4chに増やしてパソコンで受け取れるようにしたほうが良いかなと思い、開発を再開することにしました。

目的がはっきりしてきたので、俄然やる気が出てきました。

MGTとSDRAMの部分の配線ができました。MGTのコンデンサと、配線の引き出しが終わっています。

Mgtsdram_2

 

SDRAMの配線は、Cosmo-Zの配線をだいたいそのまま持ってきた感じになっています。

Sdram

ボード全体はこんな感じ。

Np1078


© 2017 TokushuDenshiKairo Inc. All rights reserved