我正在用系统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;
此解决方案非常冗长。还有更惯用的方法吗?
答案 0 :(得分:1)
您可以执行以下操作,对我来说,这看起来更简洁:
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.