« 今日の日記 | Main | FPGAで作るMath Function »

2008.03.22

FPGAで非同期のクロックを扱う方法

Advanced FPGA Design: Architecture, Implementation, and Optimizationに載っている3つの方法を紹介します。

FPGAで非同期のCLKを扱うのは面倒なのですが、定番と呼ばれる方法があります。

(1)Phase Control
内部のDLL/PLLで必要なCLKを作ってしまう方法。例えば外部から25MHzの入力があり、内部で50MHzのCLKが必要な時を考える。このときは、25MHzからDLL/PLLを使用して50MHzを作ってしまえばよい。25MHz の信号は50MHzでたたき直して内部で使用すれば、setup/holdのバイオレーションはでなくなる。実質的に、非同期な2系統のCLKではなく、同期のとれた2系統のCLKになる。

本に書いてあるとおり、この方法が使える機会は限られていて実践的ではない。

(2)Double Flooping
synchoronization bits、dual rank flip-flop、dual rank synchronizersとも呼ぶ。クロックドメインの境界で、必ずFFで2回叩く方法。メタステートを避けて確実に0、1を伝送する。

本に書いていないけど、実際に使うときは、いわいる3線式ハンドシェークとの組み合わせが有効。パフォーマンスに影響しないレジスタの読み書き等は、このやり方がベスト。3線式ハンドシェークは、ちかくにいるおっさんベテランエンジニアに聞こう。


(3)FIFO structure
FPGAで非同期部分の転送をするには、FIFOを使うでファイナルアンサー。APEXの頃は怪しい動きをしたけど、今は全然大丈夫。

この6章は、Clockジェネレータとか、ゲーテッドクロックについて少々書いてある程度。良い本なので、おすすめ。

|

« 今日の日記 | Main | FPGAで作るMath Function »

Comments

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference FPGAで非同期のクロックを扱う方法:

« 今日の日記 | Main | FPGAで作るMath Function »