高速ADコンバータからのデータをZYNQで受信
ZYNQ搭載のADCボード「Cosmo-Z」では、アナログデバイセス社のAD9633というADコンバータを搭載しています。
このAD9633は最高125MHz,12bitでサンプリングすることができます。125MHz,12bitなのでデータレートは1.5Gbpsにもなります。このデータは2本のLVDSになって、(つまり4本の線で)750Mbpsで送られてきます。これをZYNQのI/Oピンで受け取ろうというわけです。
XILINXのFPGAは、Spartan-6以降ではすべてのI/OピンがISERDESというデシリアライザを搭載しています。だから、FPGAの普通のI/Oピンで1Gbpsクラスの信号を受信することができるのです。
しかも、ISERDESの前にはIDELAYという可変遅延回路があって、78psくらいの精度で32段階で遅延時間を自由に設定できます。
さて、ISERDESを使って750MHzのデータを受け取ろうとするわけですが、今回の回路では、ADコンバータから送ってくるビット同期用クロックもフレーム同期用クロックも使わずに、FPGAの中で作り出したクロックでサンプリングしようと思います。
それをするためには、ADコンバータが送ってきた信号をちょうどよいポイントでサンプリングしなければなりません。その概念を次の図に示します。
上の図はADコンバータから送られてくる波形を、どのポイントでサンプリングするかを示したものです。▲の点がサンプリングするポイントです。
一番上の青い例は、OKな例です。次のオレンジ色のはNGな例です。信号が変化するタイミングでサンプリングしては正しくサンプリングできません。
最もベストなのは、一番下の黄色の例です。ちょうど信号の安定している真ん中の点でサンプリングします。
実際にIDELAYのタップを32個分変えて実験してみました。
このようになりました。
遅延を増やしていくと、不安定になる点が5タップ分くらいあります。約17タップ動かすと再び安定する領域になるので、17タップで1bitの時間ずれるということでしょう。
今回の波形は750MHzのLVDSなので、1bitが約1.333nsですから、これが17タップに相当します。これゆえ1タップは約78psであると推測できます。
まぁ、この波形から推測するとZYNQ 7030のI/Oピン(HighPerformance Port)は2Gbpsくらいまではいけるのではないかと思います。
実際の回路では、まず、ADCにキャリブレーション用のテストパターンとして「100000 100000」という波形を出させて、タップを順番に変えていって、変化が止まった点から7タップ後に止めるようにします。こうすると、ほぼ真ん中のスイートな点でサンプリングできることになります。
そうしたら、bitslipを1つずつ動かして、MSBが1になるように回転させます。こうすると、ビット同期とフレーム同期がぴたっと取れます。
こうなると、どこまでいっても同じタイミングでサンプリングできるので、ADCのデータがちゃんとデコードできるようになります。
ADCにテストパターンではなく、実際のサンプリングデータを出力させてみました。
こんな感じでAD変換結果を確認することができました。
余談ですが、最初は当社のスタッフに実験してもらっていたのですが、ChipScopeを使って非常に苦労していました。
特電スタッフのPCがLinuxマシンだからMITOUJTAGが使えないため仕方なくChipScopeを勧めたのですが、FPGAの書き込みや、ChipScopeの起動、VIOの操作、ChipScopeの信号への名前付け、トリガの設定などでとても苦労していたようです。
横から見ていて、MITOUJTAGのほうがはるかに使い勝手がいいです。世界中でChipScopeで苦労している人たちのためにも、MITOUJTAGのロジアナ機能をもっと伸ばしていこうと決意した次第です。
| 固定リンク
コメント
回路図が公開されてないようなので質問させていただきます。
このボードのADとZingQは同一のクロックを使用しているのでですか???
記事の方法で位相は合わせられると思いますが、ADとZingQのクロックが同一もしくはDLLなどで合わせるなどしないとFズレでそのうちサンプリング点がずれてきますよね???
投稿: tekforest | 2014.09.01 18:32
ZYMQ(のI/O部分)とADコンバータは同一クロック源を使用しています。
もちろん同一でないとずれてきます。
投稿: なひたふ | 2014.09.02 04:13