0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Systemverilog event的示例

芯片验证工程师 来源: 芯片验证工程师 作者:芯片验证工程师 2022-10-17 10:21 次阅读

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'
end
always @(etrig) //execute when event etrig is triggered
//edge sensitive
$display("@ etrig occurred at time %0t",$time);
initial begin
wait (etrig.triggered) ; //level sensitive 'wait' on the 
//event 'etrig'
$display("'wait' etrig occurred at time %0t",$time);
end
endmodule

仿真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 10
event e2 triggered at time 10
event 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。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1340

    浏览量

    109904
  • System
    +关注

    关注

    0

    文章

    165

    浏览量

    36819
  • 数据类型
    +关注

    关注

    0

    文章

    236

    浏览量

    13589

原文标题:SystemVerilog中的event数据类型

文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [启芯公开课] SystemVerilog for Verification

    学快速发展,这些趋势你了解吗?SystemVerilog + VM是目前的主流,在未来也将被大量采用,这些语言和方法学,你熟练掌握了吗?对SoC芯片设计验证感兴趣的朋友,可以关注启芯工作室推出的SoC芯片
    发表于 06-10 09:25

    systemverilog学习教程

    systemverilog的一些基本语法以及和verilog语言之间的区别。
    发表于 04-01 14:24

    做FPGA工程师需要掌握SystemVerilog吗?

    在某大型科技公司的招聘网站上看到招聘逻辑硬件工程师需要掌握SystemVerilog语言,感觉SystemVerilog语言是用于ASIC验证的,那么做FPGA工程师有没有必要掌握SystemVerilog语言呢?
    发表于 08-02 20:30

    SystemVerilog有哪些标准?

    SystemVerilog有哪些标准?
    发表于 06-21 08:09

    wifi配置管理器示例使用esp_event_handler_register注册事件处理程序失败是何原因?

    最新版本中的 WIfi 配置管理器示例使用esp_event_handler_register来注册事件处理程序。但是事件循环 api 参考文档提到这个函数现在已经过时了,应该用esp_event_handler_instanc
    发表于 03-01 06:52

    SystemVerilog Assertion Handbo

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    发表于 07-22 14:08 188次下载

    SystemVerilog的断言手册

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    发表于 07-22 14:12 20次下载

    基于事件结构的SystemVerilog指称语义

    本文利用形式化的方法对SystemVerilog的指称语义进行研究,采用EBES(extendedbundle event structure)作为抽象模型,以便更好的描述SystemVerilog真并发的特点。我们的主要工作是
    发表于 12-22 14:01 12次下载

    SystemVerilog的正式验证和混合验证

    手册的这一部分探讨了使用SystemVerilog进行验证,然后查看了使用SystemVerilog的优点和缺点。
    发表于 03-29 10:32 24次下载

    ThreadX(八)------事件集Event

    事件集Event
    发表于 12-28 19:26 9次下载
    ThreadX(八)------事件集<b class='flag-5'>Event</b>

    华为游戏服务示例代码教程案例

    : 存档特性的示例代码。 event: 事件特性的示例代码。 gamesummary: 游戏基本信息的示例代码。 playerstats: 玩家信息统计的
    发表于 04-11 11:09 4次下载

    SystemVerilog中枚举类型的使用建议

    SystemVerilog中枚举类型虽然属于一种“强类型”,但是枚举类型还是提供了一些“不正经”的用法可以实现一些很常见的功能,本文将示例一些在枚举类型使用过程中的一些“不正经”用法,并给出一些使用建议。
    的头像 发表于 09-01 14:20 1594次阅读

    一些有趣的数组相关的SystemVerilog约束

    我们在工作中常常会针对数组施加各式的约束,下面列举一下有趣的Systemverilog数组约束示例
    的头像 发表于 03-08 13:12 882次阅读

    一些有趣的数组相关的SystemVerilog约束

    我们在工作中常常会针对数组施加各式的约束,下面列举一下有趣的**Systemverilog数组约束**示例
    的头像 发表于 05-30 11:13 701次阅读

    SystemVerilog中的$timeformat是做什么的?

    SystemVerilog中,输出信息显示时间时,经常会在输出信息格式中指定“%t”格式符,一般情况下“%t”输出的格式都是固定的,但是这样固定的输出显示的时间可能有时会让用户看起来感觉比较诧异,例如下面的示例
    的头像 发表于 08-16 09:41 1778次阅读
    <b class='flag-5'>SystemVerilog</b>中的$timeformat是做什么的?