... | ... | @@ -4,6 +4,15 @@ |
|
|
* [CoreMarkのMakefileの`CLOCKS_PER_SEC`を書き換える必要があります](../evaluation#fpga-%E3%81%B8%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF)
|
|
|
* [Verilatorでシミュレーションする場合、`test_bench.cpp`の`clock_Hz`を書き換える必要があります](../verilator#verilator%E3%82%92%E7%94%A8%E3%81%84%E3%81%A6coremark_for_synthesis%E3%81%AE%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E8%A1%8C%E3%81%86)
|
|
|
|
|
|
クロック周波数の決め方
|
|
|
============
|
|
|
|
|
|
Vivadoで論理合成・配置配線をした際に、クロック周波数が高すぎると、(1サイクルの時間)<(最も遅延の大きい経路の遅延)という関係になってしまい、回路がうまく動作しません。こうした場合には、クロック周波数を下げることで、(1サイクルの時間)>(最も遅延の大きい経路の遅延)という関係が成り立つようにする必要があります。言い換えると、1サイクルの時間から最も遅延の大きい経路の遅延を引いた値が正となるようにする(タイミング制約を満たすようにする)必要があります。
|
|
|
|
|
|
タイミング制約を満たしているかどうかを確認する方法を説明します。Vivadoの左カラムのIMPLEMENTATION→Open Impremented DesignとするとTimngというのが出てくるのでその中のDesign Timing SummaryをクリックしSetupのところにあるWorst Negative Slack (WNS)を見てください。ここが赤文字(負の値)の場合は、タイミング制約を満たしていませんので、クロック周波数を下げる必要があります [^1] 。一方で青文字(正の値)の場合はタイミング制約を満たしています。
|
|
|
|
|
|
WNSの値を見ることで、クロック周波数をどこまで下げればいいか(あるいはどこまで上げられるか)を定量的に見積もることができます。例えばクロック周波数を100MHzとして論理合成・配置配線をした回路のWNSが-30nsだった場合を考えてみましょう。100MHzのクロックの1サイクルの時間は10nsです。WNSが-30nsということは、1サイクルの時間があと30ns長ければ大丈夫ということですから、1サイクルの時間が40ns以上になるようにクロック周波数を決めればよいことになります。したがってこの場合はクロック周波数を25MHzまで落とせば良さそうだと見積もることができます。WNSが正の場合も同様に考えることができます。例えばクロック周波数を25MHzとして論理合成・配置配線をした回路のWNSが20nsだった場合、クロック周波数は少なくとも50MHzまで上げられると見積もることができます[^2]。
|
|
|
|
|
|
クロック周波数を変更する方法
|
|
|
============
|
|
|
|
... | ... | @@ -54,3 +63,7 @@ Clocking wizard とトップモジュールとを組み合わせ終わったら |
|
|
HDLラッパーを作成した後は、ソースファイルを変更しても自動的には反映されなくなります。
|
|
|
design_1_wrapper.bd(名前は適宜読み替えてください)をダブルクリックで開き、
|
|
|
画面の上部に出現する「Refresh Changed Modules」「Refresh IP Catalog」を押しましょう。
|
|
|
|
|
|
----
|
|
|
[^1]:実際には、WNSが負であっても、その絶対値がそれほど大きくない場合には、そのままFPGAボードに焼いても動作することがあります(いわゆるオーバクロック)。
|
|
|
[^2]:実際には、クロック周波数を50MHzよりも多少高くして論理合成・配置配線をしても、タイミング制約が満たされる場合があります。クロック周波数を高くして論理合成・配置配線をし直すと、クロック周波数が低いときとは異なる回路が合成されることがあるからです。 |
|
|
\ No newline at end of file |