Объединение событий не запускает оба события - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь запустить некоторый код с веб-сайта 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 Ответ

0 голосов
/ 05 июня 2019

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

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

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

...