event是SystemVerilog語言中的一個強大特性,可以支持多個并發(fā)進程之間的同步。
我們可以在一個進程trigger這個event,同時在另外一個進程等待這個event(邊沿敏感的@和電平敏感的wait)。
event的觸發(fā)語法非常簡單,那就是“->”運算符。
下面是Systemverilog event的示例
module et; event etrig; initial begin #10; -> etrig; //trigger named event 'etrig' #10; -> etrig; //trigger named event 'etrig' end always @(etrig) //execute when event etrig is triggered //edge sensitive $display("@ etrig occurred at time %0t",$time); initial begin wait (etrig.triggered) ; //level sensitive 'wait' on the //event 'etrig' $display("'wait' etrig occurred at time %0t",$time); end endmodule
仿真log:
@ etrig occurred at time 10 'wait' etrig occurred at time 10 @ etrig occurred at time 20 V C S S i m u l a t i o n R e p o r t
在module“et”中,我們聲明了一個名為“etrig”的event。
在時間10觸發(fā)它,然后在時間20觸發(fā)它。
“always”語句塊等待“etrig”上的觸發(fā)器,這是邊沿敏感的。像仿真log顯示的那樣,打印了2次邊沿觸發(fā)。
該module還展示了如何使用電平敏感的被觸發(fā)方式(wait)
wait (eventName.triggered);
wait(eventName.triggered)相比@的一個特點是不關心wait和"->"之間的執(zhí)行順序。
下面是另一個例子,展示多個event事件并行觸發(fā)控制:
module et; event e1, e2, e3; initial begin #10; fork -> e1; -> e2; -> e3; join end always @(e1) $display("event e1 triggered at time %0t",$time); always @(e2) $display("event e2 triggered at time %0t",$time); always @(e3) $display("event e3 triggered at time %0t",$time); endmodule
仿真log:
event e1 triggered at time 10 event e2 triggered at time 10 event e3 triggered at time 10 V C S S i m u l a t i o n R e p o r t
在上面的例子中,會并行地觸發(fā)3個event(e1、e2、e3),分別控制3個獨立的進程)。從仿真log可以看出,3個event被同時觸發(fā)。
event序列:wait_order ()
在SystemVerilog中我們還可以使用語法wait_order等待事件以特定的順序觸發(fā)。
例如,wait_order (eveA, eveB, eveC)等待事件按照順序eveA -> eveB ->eveC觸發(fā)。
module et; event etrig1, etrig2; initial begin #10; -> etrig1; //trigger named event 'etrig1' #10; -> etrig2; //trigger named event 'etrig2' #10; -> etrig1; //trigger named event 'etrig1' #100; end initial begin wait_order (etrig1 , etrig2); //OK $display("'wait' etrig1, etrig2 occurred at time %0t",$time); wait_order (etrig2 , etrig1); //OK $display("'wait' etrig2, etrig1 occurred at time %0t",$time); end endmodule
Simulation log:
'wait' etrig1, etrig2 occurred at time 20 'wait' etrig2, etrig1 occurred at time 30 V C S S i m u l a t i o n R e p o r t
在上面的例子中,在時間10時觸發(fā)etrig1,然后在時間20時觸發(fā)etrig2,然后在時間30再次etrig1。所以,事件的順序是
etrig1 - > etrig2- > etrig1。
審核編輯:湯梓紅
-
Verilog
+關注
關注
28文章
1351瀏覽量
110193 -
System
+關注
關注
0文章
165瀏覽量
37005 -
數(shù)據(jù)類型
+關注
關注
0文章
236瀏覽量
13638
原文標題:SystemVerilog中的event數(shù)據(jù)類型
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論