【SV】SystemVerilog事件机制深度解析:为什么`@e`和`wait(e.triggered())`会导致完全不同的结果?

🔥 SystemVerilog事件机制深度解析:为什么@ewait(e.triggered())会导致完全不同的结果?

核心结论@e(边沿敏感等待)不响应已触发的事件,而wait(e.triggered())(电平敏感等待)会立即检测历史触发。这是导致两个代码片段执行结果差异的本质原因。


🌟 问题背景:两个关键代码片段

❌ 代码片段1(未打印21

event e1, e2;
initial begin
  $display("10");
  ->e1;    // 触发e1
  @e2;     // 等待e2触发(边沿敏感)
  $display("11");
end
initial begin
  $display("20");
  ->e2;    // 触发e2
  @e1;     // 等待e1触发(边沿敏感)
  $display("21"); // 未执行!
end

✅ 代码片段2(全部打印)

event e1, e2;
initial begin
  $display("10");
  ->e1;
  wait(e2.triggered()); // 等待e2是否已触发(电平敏感)
  $display("11");
end
initial begin
  $display("20");
  ->e2;
  wait(e1.triggered()); // 等待e1是否已触发(电平敏感)
  $display("21");       // 正常打印
end

🔍 问题一:为什么代码片段1死锁(21未打印)?

⚠️ 执行流程关键点(仿真时间0)

进程 语句 事件状态 等待行为
进程1 ->e1; e1 已触发<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值