测试平台中的事件合并不起作用
我正在尝试合并事件。在这里,我应该同时看到线程1显示和线程2显示的输出。可是,我现在只看到线程1的输出。
我也尝试通过event_a = event_b来实现反向操作,在那种情况下我得到的是线程2的显示。
我也尝试使用Aldec和 VCS来检查工具的兼容性,但结果仍然一样。
module tb;
//event variables
event event_a, event_b;
initial begin
fork
begin
wait(event_a.triggered);
$display ("[%0t] Thread1: Wait for event_a is over", $time);
end
begin
wait(event_b.triggered);
$display ("[%0t] Thread2: Wait for event_b is over", $time);
end
#20 ->event_a;
#20 ->event_b;
begin
#10 event_b = event_a;
end
join
end
endmodule
以下是结果:
# KERNEL: [20] Thread1: Wait for event_a is over
# KERNEL: Simulation has finished. There are no more test vectors to simulate.
# VSIM: Simulation has finished.
原因是什么?
解决方案
与类句柄不同,一旦事件句柄被用于表达式就不会重新求值。只有在事件表达式最初被求值时,才会看到当前的句柄。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。