我正在用系统verilog编写验证码。出于本问题范围之外的原因,我需要检查在下一个时钟周期的高周期内(即在下一个上升沿和下降沿之间),信号是否恰好向上和向下脉冲一次。
虽然这可以通过状态机很容易地完成,因为这不需要是可综合的,我希望利用SV构造来使代码的意图更加突出。
我考虑过使用基于事件的解决方案:
event re_clk, fe_clk, re_sig, fe_sig;
fork
forever begin @(pos_edge clk)
-> re_clk; end
forever begin @(neg_edge clk)
-> fe_clk; end
forever begin @(pos_edge sig)
-> re_sigl end
forever begin @(neg_edge sig)
-> fe_sig; end
begin
wait_order(re_clk, re_sig, fe_sig, fe_clk);
//Set some signals.
else
//Set other signals.
end
join_any
disable fork;这个解决方案非常冗长。有没有更惯用的方法?
发布于 2020-10-07 15:41:44
您可以执行以下操作,这在我看来更简洁:
bit good_pulse = 0;
fork
@(posedge clk) @(negedge clk);
begin
@(posedge sig) @(negedge sig) good_pulse = 1;
@(posedge sig) good_pulse = 0;
end
join_any
disable fork;
if (good_pulse)
//Set some signals.
else
//Set other signals.https://stackoverflow.com/questions/64238426
复制相似问题