コラム124 メインクロック1サイクル以上の遅延が許される例
DE1-SoCには50MHzのクロックが搭載されています。それをPLLで100MHzに逓倍したものを本システムのメイン・クロックとして使っています。
●多数の信号を一度に加算しているけど大丈夫?
下図は畳み込み6層目のVHDLの一部です。このように64個もの信号を加算してmac_all_00という信号を生成しています。メインクロックの周期は10nsしかありません。こんなに盛大に加算して間に合うでしょうか? |
上図のようなVHDLを論理合成すると下図のような、64チームのトーナメント表のような加算になると思います。夏の甲子園と同じように、3試合勝ってベスト8、優勝するには6試合必要です。加算器1個の遅延を例えば3nsとすると(*1)、3x6
= 18nsとなり、1サイクルでは間に合いません。
(*1)遅延時間はビット数やデバイス特性に依存する。 |
下図はが処理のようすをシミュレーションしたものです。mac00_00〜mac63_00を加算したものがmac_all_00になります。
それの下位ビットを削除したものがtruncate_00、バイアス加算したものがplusBias_00、ReLU処理したものがRelu_00となります。
Relu_00はWRDATAとなり、RAMに書き込まれます。書き込みタイミングはWR_Nの立ち上がりになります。シミュレーションでは60nsもの余裕があることが分かります。
したがってmac_all_00の時点で18ns遅延していたとしても全く問題がないことが分かります。 |
●コンストレインしていないクロックがあるけど大丈夫?
ここで入力クロックをConstrainしましたが、下図を見るとUnconstrainクロックがいくつかあります。コンストレインしなくて大丈夫でしょうか? |
これらの信号は周期が長く、下図のシミュレーションでは18usと、メインクロックの1000倍以上あります。これらをクロックとして使用した場合、Unconstrainedだと10ns以上遅延する可能性がありますが、それでも全く問題ないことをシミュレーションで確認しているので大丈夫です。 |
メインクロックの周期が10nsだからといって、何もかもその期間に処理を終えなければならない、ということはありません。やみくもにDF/Fでラッチしてリソースを無駄にしないように気をつけましょう。 |
目次へ戻る |