Объединение событий не запускает оба события

Я пытаюсь запустить некоторый код с веб-сайта chipverify в Modelsim, и мой вывод отличается от веб-сайта. Пример с сайта о слиянии событий.

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 simulator). Почему event_b не запускается, когда event_a и event_b объединяются?

1 ответ

Решение

У LRM есть небольшая двусмысленность здесь. Если вы попробовали еще один инструмент на EDAPlayground, вы получите другие результаты.

Не ясно, что запись в дескриптор события должна вызвать переоценку сработавшего метода.

Смотрите эту ссылку для описания проблемы.

Другие вопросы по тегам