« LT Spiceを使ってみた | トップページ | MITOUJTAGでLattice MachXO2の書き込み »

2013.04.21

ZED BoardでOSERDES、ISERDESを試してみる

XILINXのFPGAには、OSERDES、ISERDESというのがあります。

Iserdesoserdes

これは、普通のI/Oピンの中にSERDESが組み込まれているもので、ほとんどすべてのI/Oで使えます。つまり、普通のI/Oが1Gbpsくらいの信号が入出力できる、高速トランシーバになるというものなのです。しかも、ISERDESにはIDELAYといって微小な可変ディレイを入れることもできます。

このSERDESはSpartan-6やVirtex-4から使えるようになったので、当然ながら7シリーズのZYNQでも使えます。というわけで、今日はこれを試してみました。

まず、ISERDES/OSERDESは、自分でプリミティブからできなくもありませんが、CoreGenを使ったほうが楽です。無理をせずにCoregenを使いましょう。

Coregen


そして、OSERDES10個と、ISERDES9個をZYNQの中にインスタンシエートしてみました。

さて、ZED Boardでは、ZYNQのPL部分(FPGAのロジック部分のこと)は、BANK13、BANK33、BANK34、BANK35の4つのI/Oバンクが使えます。このうち、BANK13と33は3.3Vの固定I/O電圧です。BANK34とBANK35は、VADJという名前で2.5Vまたは1.8Vに設定できます(自分でジャンパJ18の未実装の部分をつなげば3.3Vにもできる)。このBANK34と35はFMCコネクタに出ている信号に主に使われます。

つまり、高速な差動信号を使いたいなら、BANK34とBANK35を使って、FMCからやりとりしなければなりません。

ですが、FMCは表面実装で実装が大変だったので、とりあえず、ピンヘッダの部分から高速差動信号を出すようにしました。

JC1_P/Nからクロックを出力したクロックをJA4とJA10から入力し、JC2_P/Nから出した信号をJC4_P/Nから入力し、JD1_P/Nから出した信号をJD3_P/Nから入力するようにして、自分自身で出した高速差動信号を自分自身で受けるようにしてみました。

Zynq_loopback1


これなら、ピンヘッダ部分にジャンパをはめ込むだけで、ループバックの試験ができるはずです。クロックは専用ピンから入力しないといけないので、ちょっと配線しなければだめでしたが。

Zynq_loopback2


こんな感じでループバックしてみたのですが、データレートが100MHzくらいなら問題なく動きました。でも、目的の960MHzにすると、データ化けが多発します。

下の図は、ゆっくり変化するバイナリカウンタを、960MHzの速度で送って、それを受けて、LEDに表示してみたものです。要するに、高速差動信号でLEDチカチカを送ってみたわけです。

Zynq_led


みてのとおり、信号が変化するところでバタバタとしています。

しかたがないので、ISERDESの前にIDELAY2を入れて、遅延を調整して、もっともベストなポイントでデータをサンプリングできるようにしてみたのですが、それでもダメ。普通は遅延をいれてベストなポイントに合わせさえすれば問題なくできるはずなのですが、そうもいかないようです。おそらくシンボル間干渉が起きているのでしょう。

やはり、このジャンパを通じて960Mbpsをやりとりするのは無理があるのかもしれません。FMCの嵌合するコネクタを入手したので、今度はこれで試してみることにします。

Zedboard_fmc

ZED Boardで使われているコネクタはASP-134603-01というもので、それに対応するコネクタはASP-134604-01ですが、Digikeyでは手に入りません。

うまく嵌合するコネクタで入手可能なものは10列のやつです。400ピンのコネクタですがZEDボードに挿すときにはそのうちの160個を使います。型番や入手先は上の写真をご覧ください。

今日得られた知見は次のとおりです。

  • OSERDES、ISERDESのビット幅はSDRのときには2~8bit。DDRのときには4,6,8,10,14bit。12bitには設定できないので要注意。
  • ZYNQのLVDS_25は、VCCIOが本当に2.5Vでなければだめ。3.3Vにすると信号が出なくなる。1.8Vでは出てくるが、サポート外。
  • I/O規格をDIFF_SSTL18_IIとかにすると、確かに信号は出てきたけど、正しく読み取れなかった。おそらく、同じ値が何ビットもつづくと電圧がどっちかに大きく振れてしまうからだと思われる。
  • IDELAYのためのリファレンスクロックは200MHzでなければならない。そうしないと、タイミング解析でエラーが出るほか、遅延時間が正しくならないのかもしれない。
  • CoreGenが作るISERDESのラッパは、IDELAYのクロックにdiv_clkを使う。そういうものなのかもしれない。つまり、IDELAYのクロック入力「C」は、本来、リカバリして出てきたクロックを与えるものなのかもしれない。
  • ISERDESで使うことができるクロック端子とデータ入力端子組み合わせには、制約がある。

|

« LT Spiceを使ってみた | トップページ | MITOUJTAGでLattice MachXO2の書き込み »

コメント

コメントを書く



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




« LT Spiceを使ってみた | トップページ | MITOUJTAGでLattice MachXO2の書き込み »