« 電子回路設計における見積失敗の研究(後編) | トップページ | 倉庫の片づけ »

2021.11.11

Cosmo-Zの外部クロック同期

Cosmo-Zを外部クロックで動作するように改造しています。

ADコンバータのサンプリングクロックに同期していない矩形波を入れると、下の図のように毎回すこしずつ違う波形が得られます。

Async

これは、サンプリングポイントが毎回少しずつ変わるからです。

図にするとこんな感じです。

Async_sampling

観測している信号とサンプリングクロックが同期していないので、毎回少しずつ違う場所を見てしまうのです。

それならば、観測している信号に同期したサンプリングクロックでサンプリングできるようにしてみましょう。

 

7シリーズにはBUFGMUXというプリミティブがあって2つのクロックを切り替えることができます。

Extclk_sel

実はBUFGMUXはBUFGと同じで、BUFGには元々クロック選択機能が備わっています。BUFGMUXから切り替え機能を無効にしたものがBUFGです。そのためBUFGから出たクロックをBUFGMUXに入れると「BUFG-BUFG接続」というWarningが出るのですが、無視して無理やり論理合成させることで、ADコンバータのクロックだけを外部クロックに同期させることができました。

 

ついでに、Vivadoでパッケージ化する際にgenericのパラメータに応じて出現させたりさせなかったりする方法を身に付けました。

やり方としては、VivadoでEdit Portする際に、Port Presenceに$の後ろにパラメータの名前を書けばいいようです。

Condition_port

 

Port_presence

これで、オプション的なポートをユーザのカスタマイズに応じて出したり出さなかったりできるようになります。

Dialog

 

さて、実験用の回路は以下のようになっています。この基板はZYNQのメインクロックの100MHzとは別に、150MHzのGTX用の水晶が乗っています。GTX用水晶の150MHzをIBUFDS_GTE2で一般信号にひっぱってきて、それをPLLに入れて50MHzを作ります。その50MHzをピンヘッダ(ext_bp)から出して、別のピンヘッダのピン(extclk_ip)から入力し、PLLで100MHzに上げてAD変換モジュールに入れています。

Extclk

言葉で書くと簡単なのですが、いざVivadoでやってみると、ImplementのRoutingで止まってしまって論理合成が進みません。どうやらクロックが多数あるような回路では、クロックをMRCCのピンから入れるだけではなく明示的にBUFGを追加しないといけないのかもしれません。BUFGMUXを使うとクロックの解析がとても大変になるのでしょう。

こうしてAD変換器に行くクロックだけを外部クロックに同期させてみたところ、下の図のように、何度サンプリングしても形が変わらないようになりました。

Extclk_20211112095701

ちなみに、サンプリングするポイントを少しずつ動かしていくと等価サンプリングができますが、それは別の機会に。

 

|

« 電子回路設計における見積失敗の研究(後編) | トップページ | 倉庫の片づけ »

コメント

コメントを書く



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




« 電子回路設計における見積失敗の研究(後編) | トップページ | 倉庫の片づけ »