Как покрыть свойство fifo rd / wt? - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь написать пятую точку записи для записи.

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.

Не уверен, что мне не хватает.

Я нашел нечто подобное здесь

Код присутствует в код

1 Ответ

0 голосов
/ 22 октября 2018

Я думаю, что ваша проблема с подтекстом.Я использовал ваш пример и заменил на сильный ((| A === 1) ## [1: $] (| B === 1));все работало нормально.

Обложка с подтекстом может иметь непредвиденное поведение (в вашем случае она закрывала антецедент), всегда безопаснее использовать покрытие с последовательностями

...