合并事件不会同时触发这两个事件

Merging events doesn't trigger both events

我正在尝试 运行 在 Modelsim 中从 chipverify 网站获取一些代码,但我的输出与网站上的不同。来自网站的示例是关于事件合并的。

module tb;
 // Create event variables
  event event_a, event_b;

  initial begin
    fork
      // Thread1: waits for event_a to be triggered
      begin
        wait(event_a.triggered);
        $display ("[%0t] Thread1: Wait for event_a is over", $time);
      end
      // Thread2: waits for event_b to be triggered    
      begin
        wait(event_b.triggered);
        $display ("[%0t] Thread2: Wait for event_b is over", $time);
      end

      // Thread3: triggers event_a at 20ns
      #20 ->event_a;

      // Thread4: triggers event_b at 30ns
      #30 ->event_b;

      // Thread5: Assigns event_b to event_a at 10ns
      begin
        #10 event_b = event_a;
      end
    join
  end
endmodule

我希望网站上的输出是这样的:

[20] Thread1: Wait for event_a is over
[20] Thread2: Wait for event_b is over

但是我得到的是这样的:

[20] Thread1: Wait for event_a is over

同样的结果是当我尝试在 edaplayground(aldec riviera pro 或 icarus verilog 模拟器)上 运行 这段代码时。为什么event_a和event_b合并时没有触发event_b?

LRM 在这里有点含糊不清。如果您在 EDAPlayground 上多尝试一种工具,您会得到不同的结果。

尚不清楚写入事件句柄是否会导致触发方法 re-evaluation。

有关问题的描述,请参阅 this link