Cosmo-Zのサンプリング周波数を動的に変更
Cosmo-ZのADコンバータのサンプリング周波数を動的に変更できるようにしました。
Cosmo-ZのADコンバータはのサンプリング周波数は、80MHz、100MHz、125MHzと3種類の選択肢があります。
このADコンバータのクロックはPLL(MMCM)で作っているので、いままでは、FPGAのソースコードを変更して再ビルドしなければなりませんでした。そこで、この周波数を動的に変更しようと考えました。
基本的なやり方は、過去の記事「XILINX 7 シリーズにおけるMMCM周波数の動的変更」で書いたのですが、MMCMのDRP(ダイナミック・リコンフィギュレーション・ポート)を使います。
基本的にはDRPを通じてレジスタに設定値を送り込めばMMCMは新しい周波数で動作を開始するのですが、望みの周波数で発振させるためにはどんな設定値を書けばよいのか、わからないと思います。
そこで、まず、80MHz、100MHZ、125MHzで動作するMMCMをCoreGenで作って、DRPを通じて現在の値を読み出します。その値をVHDLでハードコーディングして、必要なときに送り込むようにすればよいというわけです。
このようにしてDRPポートに送り込んでいるときの波形は次のとおりです。
こうして作ったクロックによって、Cosmo-ZのADCは80MHz/100MHz/125MHzを動的に切り替えられます。
クロックが変わったら、ADCから送られてくるシリアルデータをデコードする回路をリセットして、やらねばなりません。
次の図は、ISERDESのIDELAY_CEと、BitSlipのパルスです。
80MHzのとき。
100MHzのとき。
125MHzのとき。
このように、動的に周波数を変更し、再同期を行うことができるようにしました。
| 固定リンク
コメント