systemverilog中關於事件的那些事

2021-06-28 20:50:21 字數 1046 閱讀 3876

說道systemverilog中的執行緒間通訊,不得不說一下事件(event),事件也就兩種:邊沿阻塞(@ e)和電平阻塞(wait(e.triggered ()))。

1.事件通過-> 操作符來觸發事件,通過@或者wait等待事件的觸發。

2.@相當於verilog中的邊沿觸發,@一定要先於->,@只在觸發的那一瞬間有效 ,@而triggered是verilog中的電平觸發,只要事件觸發後,triggered一直有效,triggered相當於事件的乙個函式,使用方法:wait(e.triggered());

eg:`timescale 1ns/1ns

event e;

initial

begin

fork

#10 -> e ;

# 20 @ e;

join

$dispaly("done");

end該程式會阻塞在20ns時刻,不回輸出「done」,因為觸發訊號只在10ns處有效。

initial

begin

fork

#10 @ e ;

# 20 -> e;

join

$dispaly("done");

end 該程式會在20ns處結束fork程序,並列印「done」。

initial

begin

fork

#10 -> e ;

# 20 wait (e.triggered());

join

$dispaly("done");

end 會列印「done」。

3.在迴圈中使用事件

在迴圈中使用wait一定小心,容易導致零延時死迴圈。如:

forever begin

wait(e.triggered())   //零延時迴圈    因為triggered是電平觸發,一旦事件觸發,會一直有效

end但是用邊沿觸發就沒事了,如:

forever begin 

@e ;

end申明:有些詞是用我自己思維寫出來的,不是官方的,如果表達不準確,請糾正也請原諒

SystemVerilog中的Virtual總結

virtual inte ce 隔離抽象模型 class 和實際訊號 port wire reg 可在 過程中動態控制連線訊號。在class內使用,這樣class的不同例項可連外部不同的inte ce例項。inte ce sbus a bus inte ce logic req,grant logi...

Systemverilog中物件的複製

class transaciton static count 0 int id statics status function new status new id count endfunction endclass transaction src,dst initial begin src new...

SystemVerilog中的型別向下轉換

寫在前面 1 一直以來對這塊理解都不是那麼清楚,只知道個大概,比如只知道 cast做型別向下轉換。今天好好看了下相關的內容,發現自己之前的理解確實有很大的偏差,今天就好好總結下了。2 難得的六一兒童節,祝各位大齡兒童節日快樂。start 1 物件 物件是類的乙個例項。2 控制代碼 指向物件的指標。要...