« M5スタックで「電車でルーレット」を作ってみた | トップページ | MPPCアレイをひさしぶりに動かしてみた »

2024.07.17

DAC8ボードの動作確認

Cosmo-Zに増設する8ch DACボードの実装が上がってきたので、さっそく動作テストしました。

Dac8_20240725144401

このボードはAD9717という2ch 14bitのDAコンバータを4個並べて125MHz 8ch 14bitの出力を実現しています。

最も性能の良いチャネルでは、瞬間的ではありますがTHDは-87dBcという驚異的な成績が出ていました。

Dac8thd

FPGAの先にこのDAC(AD9717)をつないで動かすのは意外と大変です。AD9717は125MHz 14bit 2chでデータを出すため、250MHz 14bitでDDRにしてデータを送らなければなりません。FPGAからDACまでの距離はそれなりに長いので、反射によって容易にデータが化けてしまいます。

その結果、データの受信にエラーがあると、このようにビットが化けて変なデータが出てしまいます。

Scope_12

そのため、FPGAとDACを直接接続することはせず、DAC基板上でDACの直前に74AUC125のバスバッファを入れて、FPGAからの信号をいったん受けてやります。74AUC125からDACまでの間にもダンピング抵抗を入れ、とにかく、DACに与えられるデータバスがマイルドになるようにします。

FPGAを設計するときにはXDCファイルで電流制限を書いたりFASTやSLOWを調整したりします。

set_property DRIVE 8 [get_ports {dac_clkin_op[*]}]
set_property DRIVE 8 [get_ports {dac_clkio_op[*]}]
set_property DRIVE 8 [get_ports {dac1_data_op[*]}]
set_property DRIVE 8 [get_ports {dac2_data_op[*]}]
set_property DRIVE 8 [get_ports {dac3_data_op[*]}]
set_property DRIVE 8 [get_ports {dac4_data_op[*]}]
set_property SLEW FAST [get_ports {dac_clkin_op[*]}]
set_property SLEW FAST [get_ports {dac_clkio_op[*]}]
set_property SLEW FAST [get_ports {dac1_data_op[*]}]
set_property SLEW FAST [get_ports {dac2_data_op[*]}]
set_property SLEW FAST [get_ports {dac3_data_op[*]}]
set_property SLEW FAST [get_ports {dac4_data_op[*]}]

FPGAなのにアナログ的な調整が必要なのです。

 

さて、FPGAとDACのクロックが125MHzならば、1MHzや2MHzといった低い周波数の信号は結構な分解能で出せるのは直感的にわかると思います。それなら、125MHzサンプリングでなら40MHzと41MHzを区別して出せるでしょうか?

出せます。

次の正弦波は62.5MHzでサンプリングして出力している40MHzの正弦波です。

Scope_51

綺麗な波形に見えますが、フィルタを通す前の波形は非常に汚い波形です。

具体的に言うと、40MHzと85MHzおよびその高調波が混ざったスペクトラムになるのですが、LCで構成したLPFによって40MHzだけが取り出されるので綺麗にすることができるわけです。そのため、最高サンプリング周波数である125MHz/2の62.5MHzで急峻な減衰特性を持つ5次チェビシェフフィルタを用いています。

DAC+LCフィルタを使うことで、サンプリング周波数よりもわずかに低い周波数の正弦波を作ることができます。

 

|

« M5スタックで「電車でルーレット」を作ってみた | トップページ | MPPCアレイをひさしぶりに動かしてみた »

コメント

コメントを書く



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




« M5スタックで「電車でルーレット」を作ってみた | トップページ | MPPCアレイをひさしぶりに動かしてみた »