SystemVerilog中的Events事件


前言

本文首先介绍SystemVerilog中的Events;其次记录了@操作符和wait()操作的区别;最后介绍了wait_order的用法。


一、事件(Events)

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

事件发挥作用的过程分为两个阶段,即:
一个进程触发(trigger )事件,另一个进程等待事件被触发(triggered)。可以使用->操作符触发事件,使用@操作符或者wait() 等待事件被触发。

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

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

仿真结果:

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

二、@操作符和wait()操作的区别

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

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

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

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

仿真输出

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

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

三、wait_order

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


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

总结

本文主要围绕systemverilog中,Events事件相关的用法进行了总结。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SystemVerilog文手册是一本详尽介绍SystemVerilog编程语言的指南。这本手册提供了关于SystemVerilog语法、数据类型、控制流、函数、模块等方方面面的详细解释和示例。无论是初学者还是有一定经验的开发人员,都能从这本手册获得丰富的知识和指导。 SystemVerilog是一种硬件描述语言,被广泛应用于数字电路设计、验证和仿真领域。它在Verilog HDL的基础上扩展了许多新的特性,使得开发人员能够更轻松地实现复杂的数字电路功能。 这本文手册首先介绍了SystemVerilog的基本语法,包括模块定义、端口声明、信号赋值等。然后详细讲解了SystemVerilog的数据类型,如整型、浮点型、数组、结构体等,以及如何进行类型转换和运算。接着介绍了控制流语句,包括条件语句、循环语句和分支语句,以及如何使用宏定义和函数。 此外,手册还介绍了SystemVerilog常见的面向对象编程概念,如类、对象、继承和多态性。这些概念可以帮助开发人员更清晰地组织和管理复杂的设计。 手册还提供了大量的示例代码,让读者能够更好地理解和运用SystemVerilog语言。通过这些示例,读者可以学习如何编写和调试SystemVerilog代码,并能够快速上手实际项目。 综上所述,SystemVerilog文手册是学习和使用SystemVerilog的一本重要参考资料。它适用于各种层次的开发人员,提供了全面而详尽的SystemVerilog语言知识,帮助读者成为一名熟练的SystemVerilog开发人员。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值