Systemverilog event的示例

event是systemverilog语言中的一个强大特性,可以支持多个并发进程之间的同步。
我们可以在一个进程trigger这个event,同时在另外一个进程等待这个event(边沿敏感的@和电平敏感的wait)。
event的触发语法非常简单,那就是“->”运算符。
下面是systemverilog event的示例
module et;event etrig;initial begin#10;-> etrig; //trigger named event 'etrig'#10;-> etrig; //trigger named event 'etrig'endalways @(etrig) //execute when event etrig is triggered//edge sensitive$display(@ etrig occurred at time %0t,$time);initial beginwait (etrig.triggered) ; //level sensitive 'wait' on the //event 'etrig'$display('wait' etrig occurred at time %0t,$time);endendmodule  
仿真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触发它,然后在时间20触发它。
“always”语句块等待“etrig”上的触发器,这是边沿敏感的。像仿真log显示的那样,打印了2次边沿触发。
该module还展示了如何使用电平敏感的被触发方式(wait)
wait (eventname.triggered);  
wait(eventname.triggered)相比@的一个特点是不关心wait和->之间的执行顺序。
下面是另一个例子,展示多个event事件并行触发控制:
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 10event e2 triggered at time 10event e3 triggered at time 10 v c s s i m u l a t i o n r e p o r t  
在上面的例子中,会并行地触发3个event(e1、e2、e3),分别控制3个独立的进程)。从仿真log可以看出,3个event被同时触发。
event序列:wait_order ()
在systemverilog中我们还可以使用语法wait_order等待事件以特定的顺序触发。
例如,wait_order (evea, eveb, evec)等待事件按照顺序evea -> eveb ->evec触发。
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时触发etrig1,然后在时间20时触发etrig2,然后在时间30再次etrig1。所以,事件的顺序是
etrig1 - > etrig2- > etrig1。  


钳型表和万用表哪个好用
氢蓝时代单堆系统通过国家强检
萤石智能可视门铃用处大,这几种场景下一定要用!
加密货币网络经济中的宏观经济指标介绍
三星新型OLED显示屏可降低16%能耗
Systemverilog event的示例
泰克示波器和电流探头评估高速DCDC转换器电感
dsp音频处理器的作用
RS232转profinet网关扫码枪自由口与1500程序对比
影响软包锂电池热封工艺的因素有哪些?
高通又来了:效法联发科 价格战助推者
余承东:就算没有美国市场 华为也会成为顶级手机制造商
小视频app开发需要用到哪些编解码知识
南方电网将助力粤港澳大湾区全面构建世界一流智能电网
全球芯片短缺最坏时期可能已过去
做硬件设计八年了,下一步该如何选择?
vivo Xplay6:安静的守城君让这里的黎明不再寂静
谷歌免费应用程序——“Just a line”让你在AR模式下绘画涂鸦
颠覆传统技术——带着空调去旅行
小牛智能超充通过OpenHarmony兼容性测评,红旗智能携手中软国际打造智慧出行新体验