ADC→FPGA(ZYNQ)→DACの遅延時間を測ってみた
Cosmo-Zに関して、「アナログ入力から入った信号をアナログ出力した際の遅延はどのくらいか?」というお問合せがありました。
使用しているADCはLVDSでシリアル化して出すものなので遅延が何クロック分もありそうだし、FPGAの中でデシリアライズする時間、DACの中で処理される時間を全部総合するとどのくらいになるのだろう・・と疑問に思ったので実際に実験してみました。
検証に使ったのは、こちらのCosmo-Z Mini。
Cosmo-Z MiniのADC入力にファンクションジェネレータから信号を入れ、それをZYNQの中で何もせずにDACに出力するというものです。
手始めに、矩形パルスで実験してみます。
見事に同じ波形が出ていました。
拡大してみると、FGのトリガ出力(緑)に対してCosmo-Zのほうが少し鈍っているように見えます。というのも、ファンクションジェネレータ(GW Instek SFG-2104)の信号として「トリガ出力」を使っているのですが、2nsで2.5Vまで立ち上がるというかなりスルーレートの高い信号であったため、DAC出力のほうが鈍っているように見えています。
遅延時間は約290nsでした。
次に別のファンクションジェネレータ(Agilent E4432B)で疑似乱数を
完璧に同じ動きをしています。
おまけとして、E4432Bでバーストパルスを作って、それをADC→FPGA→DACに通してみます。
正弦波の山谷は勿論、細かい凸凹まで忠実に再現されています。
ADCから入れた信号をDACから出せば同じ波形になるのはあたりまえなのですが、一度ディジタル化されて処理されているのかと思うと面白いものです。フィルタとか入れるとさらに面白いことができるのでしょうね。
さて、データシートを見てこの結果が正しいのかを検討してみます。
使用しているADCのレイテンシは16クロックと書かれていますが、シリアライズで2クロックかかるようなので、LVDSの出力に出てくるのは18個前のデータなのでADCで18クロック遅れると思われます。
FPGAはADCからの信号を受け取るためISERDESを使っていますが、シリアル化された14bitのデータをデコードするためのは、原理から考えれば2クロック分の遅延時間がかかります。ISERDESから出てきたデータを整列させるために1段のD-FFを入れているので3クロックかかります。
FPGAからDACに与える信号を作るためにODDRを使いますが、その前に1段のD-FFを入れています。
DACは中にD-FFが数珠つなぎになっていてRetimerという仕組みが入っているようで、おそらく6クロックはかかります。
トータルの遅延を図にすると下のようになります。
18+3+2+6=29 なので、ぴったりでした。まぁ、どこか1個か2個くらいは間違っているかもしれませんが。
結論を言うと、ADC→FPGA→DACのレイテンシは29~30クロックでした。意外とADCが大きい!?
29clkなのか30clkなのかはっきりしないのはアナログ回路の遅延もあるからだと思われます。
| 固定リンク









コメント