在 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
指令。因此,在对该代码的第二次调用(例如watchdog <= #50_000 1'b1;
)中,第一次调用watchdog
可能会被触发(不幸的是太快了)。
有更好的主意吗?(等效或取消第一个计划的方法fork
?)
PS:在 SystemVerilog 中执行此操作不是一种选择... ;-)