說道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 控制代碼 指向物件的指標。要...