如何覆盖fifo rd / wt属性?

时间:2018-10-19 14:49:58

标签: system-verilog system-verilog-assertions

我正在尝试写第一个写掩护点。

module M;

  bit stop;  bit clk; initial while (!stop) #5 clk = ~clk;

  bit A, B, rst;

  initial rst = 0;

  initial begin
    A = 0;
    #20 A = 1;
    #10 A = 0;
    // #10 B = 1;
    #10 B = 0;
    #50 stop = 1;
  end


  // sequence fifo_rd_wt_s(reg sig);
  //  ((|A === 1) |-> s_eventually (|B === 1));
  // endsequence: fifo_rd_wt_s

  property fifo_rd_wt_p(reg sig_clk, reg sig_rst);
    @(posedge sig_clk) disable iff(sig_rst)
    ((|A === 1) |-> s_eventually (|B === 1));
  endproperty: fifo_rd_wt_p


  cover_fifo_read_write: cover property(fifo_rd_wt_p(clk, rst)) $error($sformatf("%0t hit fifo read write", $time)); 
      // else $error($sformatf("%0t did not hit", $time));



   final
     $display("Finished!");

endmodule: M

在运行日志中,我看到它在每个周期都被触发,但这不是我想要的。我希望它每次看到A后跟B时触发。

不确定我缺少什么。

我发现了类似的here

该代码位于code

1 个答案:

答案 0 :(得分:1)

我认为您的问题与含义有关。我使用了您的示例,并替换为strong((| A === 1)## [1:$](| B === 1));一切正常。

含暗示的封面可能会有一些意外的行为(在您的情况下,它涵盖了前一个),使用带序列的封面总是更安全的