TEL:086-227-0113
info@gopher-tec.jp
TOP page 製品情報 FPGAサンプルコードリポジトリ DFF1 w SyncWarn
DFF1 w SyncWarn

非同期信号を同期化する際のガイド役としてSIM警告機能を付加した、1ビットDフリップフロップ
のVerilogサンプルコードです。

入力信号のパルス幅が設定値未満になると、SIM専用に設けたSYNCWARN信号をアサートし警告を
発します。同信号はVerilogのSpecifyブロックを用いて生成しているため、論理合成時には回路化
されません。回路規模を増やすことなく、SIM時のみのガイド役として機能します。

言うまでもありませんが、複数のクロックが混在する回路ブロックで、互いに異なるクロック系の間で
正しく信号をやりとりしようとすると、入力信号のトグル周波数とサンプリング周波数との関係で
一定のルールを守ることが必要となります。初期設計時には正しい回路、正しいコーディングが
なされていても、後々、動作周波数を変更することになったり、同期化の回路そのものを変更
したりといった場合に、当初のルールを外れ、正しく同期化できない回路になってしまうことも
あり得ます。これを簡単に防ぐ目的で、受け側のDフリップフロップにSIM警告機能を設けたものが
本サンプルコードです。

SIMはファンクションSIMで構いませんが、Specifyブロックはタイミングをチェックしています。
異なるクロック系は、それぞれ正規の周波数で動作するよう、SIM環境を構築しておきましょう。

なお、単一のクロックで動作する同期回路としてコーディングする場合は、このようなガイド付きの
コードを使う必要は全くありません。むしろSIM を重くするだけなので、使用すべきではないでしょう。
また、付加されているのはあくまでSIM 上の警告信号ですので、そもそもSIM しない向きには全く
意味がないこともお忘れなく。

Port I/O  Description 
CLK in 同期クロックです。本モジュールの全ての信号は、本クロックに同期している想定です。
DIN in フリップフロップのD入力です。
DOUT out フリップフロップのQ出力です。
Internal -  Description 
tcyc
-
CLKのトグル周期を設定しています。
tglt
-
DINに許容可能なグリッチ幅を設定しています。
ファンクションSIMとは言え、モデルや接続状況によっては微小なグリッチは起こり
得ますし、エラーではないケースも多々あります。それらを警告せずに、無視するよう
設定します。
TIM_NTF_SETUP
-
セットアップタイムをチェックする$setupのnotifierです。
ファンクションSIMであれば本来セットアップマージンは十分あるはずという前提に
基づき、tcyc設定値-2nsを下回った場合に状態変化するよう記述しています。
*notifierの変化の順序は、使用するSIMによって異なる場合があります。ご注意ください。
TIM_NTF_WIDTH
-
パルス幅をチェックする$width のnotifierです。
tglt < DINパルス幅 < tcycとなった場合に状態変化するよう記述しています。
*notifierの変化の順序は、使用するSIMによって異なる場合があります。ご注意ください。
SYNCWARN
-
上記セットアップタイムととパルス幅のどちらかのチェックが警告を発した場合、1に
なります。SYNCWARNはDINとCLKの入力に応じて変化し、警告状態を保持するものでは
ありません。
※特に注記のない限り、信号は全て正論理です。
本ソースコードはVerilog版のみとなっております。
詳細は下記の資料ダウンロードをクリックください。

DFF1 w SyncWarn
資料ダウンロード