成语,用于检测systemverilog中上升/下降沿的顺序

时间:2020-10-07 06:32:05

标签: system-verilog verification

我正在用系统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;

此解决方案非常冗长。还有更惯用的方法吗?

1 个答案:

答案 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.