sv使用default clocking指定全局默認時鐘

在sv的assertion中,會用到時鐘打拍操作。一般會在assertion代碼塊中,顯示的寫上使用的時鐘,

property counter_2;
        @(posedge clk)
        counter == 2 |-> ##1 counter_r == 2;
endproperty

assert_counter_2:  assert property(counter_2);

如果說,不寫使用的時鐘,即如下代碼:

property counter_2;

        counter == 2 |-> ##1 counter_r == 2;

endproperty



assert_counter_2:  assert property(counter_2);

編譯就會有如下錯誤:

Error-[NCIFA] No clock inferred for assertion

tb.sv, 50

tb, "cover_counter_2"

  The concurrent assertion statement has no clock as a whole or in part.

  Assertions cannot be unclocked in SystemVerilog.

因爲沒有指定時鐘,所以##1操作,就不知道使用什麼時鐘可以實現延遲一個時鐘的操作。

如果說,我們編寫的assertion,都使用一個時鐘,那麼我們可以把這個時鐘,定義爲全局的時鐘。這樣,編寫的assertion中,就不在需要顯示指定時鐘,就可以直接使用##這樣的操作。

定義全局時鐘,使用 default clocking進行定義。

default clocking cb @(posedge clk);

endclocking: cb

然後編寫assertion。


property counter_2;

   counter == 2 |-> ##1 counter_r == 2;

endproperty

assert_counter_2:  assert property(counter_2);

此時編譯仿真正常

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章