0

我正在尝试从 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?

4

1 回答 1

0

LRM 在这里有点模棱两可。如果您在 EDAPlayground 上尝试了另一种工具,您会得到不同的结果。

目前尚不清楚写入事件句柄是否会导致重新评估触发的方法。

有关问题的描述,请参阅此链接

于 2019-06-04T21:03:11.837 回答