关于SystemVerilog中的Events

事件(Events)是进程之间同步的静态对象。

事件发挥作用的过程分为两个阶段,即:

 

一个进程触发(trigger )事件,另一个进程等待事件被触发(triggered)。可以使用->操作符触发事件,使用@操作符或者wait() 等待事件被触发 

 

注意:其中@操作符会阻塞住所调用的进程直到触发给定的事件,所以等待进程必须先执行@语句,然后触发进程才能执行触发器操作符->。如果触发进程先执行,则等待进程会一直被阻塞。

 

而wait()操作覆盖则是监测触发事件是否曾被触发过,即使等待进程晚于触发进程也能接触阻塞。

 

wait_order是指等待所有指定的事件按照特定的顺序触发(从左到右)。例如wait_order(a,b,c)会一直等待事件a,b,c按顺序触发  

bit success;
wait_order( a, b, c ) success = 1; else success = 0;

下面的示例显示了事件触发以及等待事件触发的两个过程

module events_ex;
  event ev_1; //declaring event ev_1
  initial begin
    fork
      //process-1, triggers the event
      begin
        #40;
        $display($time,"\tTriggering The Event");
        ->ev_1;
      end
     
      //process-2, wait for the event to trigger
      begin
        $display($time,"\tWaiting for the Event to trigger");
        @(ev_1.triggered);
        $display($time,"\tEvent triggered");
      end
    join
  end
endmodule

Simulator Output

0 Waiting for the Event to trigger
40 Triggering The Event
40 Event triggered

如果是先触发事件,然后再等待事件触发,那么等待触发之后的语句将不会被执行。

module events_ex;  
  event ev_1; //declaring event ev_1
  initial begin
    fork
      //process-1, triggers the event
      begin
        #40;
        $display($time,"\tTriggering The Event");
        ->ev_1;
      end  
      //process-2, wait for the event to trigger
      begin
        $display($time,"\tWaiting for the Event to trigger");
        #60;
        @(ev_1.triggered);
        $display($time,"\tEvent triggered");
      end
    join
  end
  initial begin
    #100;
    $display($time,"\tEnding the Simulation");
    $finish;
  end
endmodule

Simulator Output

0  Waiting for the Event to triggerSimulator Output
40  Triggering The Event
100 Ending the Simulation

这里如果不加上最后一个initial begin end进程,那么仿真就会一直hang。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值