Verilog テストベンチで、次の動作をコーディングしようとしています。
イベント (立ち上がり/立ち下がりエッジ) が最大時間発生するまで待機します。つまり、VHDL 命令と同等です。
wait until <event> for <duration>;
次の動作があります(注意):
- イベントが発生します。
- または期間が満了します。
私が間違っていない限り、Verilog でこの関数に直接相当するものは見つかりませんでした...そこで、次のコードを試しました。
reg watchdog;
// ...
// Set a signal 'watchdog' in background which will be triggered in 10 us.
fork
watchdog <= #10_000 1'b1;
join
// Wait until SIGNAL is set to '1' *OR* watchdog event occurs.
@(posedge SIGNAL or posedge watchdog);
// Reset the watchdog
watchdog <= 1'b0;
このコードは機能しますが、最後の命令は命令を取り消したり置き換えたりしませんfork
。したがって、このコードへの 2 回目の呼び出し (たとえばwatchdog <= #50_000 1'b1;
) では、最初の呼び出しwatchdog
がトリガーされる可能性があります (残念ながら早すぎます)。
もっと良いアイデアはありますか?(最初の計画をキャンセルする同等または方法のいずれかfork
?)
PS:SystemVerilogでそれを行うことはオプションではありません... ;-)