测试平台中的事件合并不起作用

编程语言 2026-07-11

我正在尝试合并事件。在这里,我应该同时看到线程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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章