Блочный параллельный оператор fork-join

Параллельный блок может выполнять инструкции одновременно, и управление задержкой может использоваться для обеспечения временного упорядочения выражений. Порядок инструкций внутри блока fork-join не имеет значения, т.к. все действия выполняются параллельно. Упорядочивание инструкций внутри оператора может обеспечиваться указанием временных задержек. Блок fork-join завершается, когда все инструкции были завершены.

Существуют варианты fork-join, которые позволяют основному потоку продолжать выполнение остальных инструкций в зависимости от того, когда дочерние потоки заканчиваются.

Синтаксис

fork
  // Thread 1
  // ...
join

Пример 1

module fork_join_tb1;
  reg [31:0] data;

  initial begin
    $display("Time [%0t]: data=0x%0h\t1", $time, data);
    #10   data = 8'hfe;
    $display("Time [%0t]: data=0x%0h\t2", $time, data);

    fork
      $display("Time [%0t]: data=0x%0h\t3", $time, data);
      #20 data = 8'h11;
      #19 $display("Time [%0t]: data=0x%0h\t4", $time, data);
      #20 $display("Time [%0t]: data=0x%0h\t5", $time, data);

      #10 data = 8'h00;
      #10 $display("Time [%0t]: data=0x%0h\t6", $time, data);
    join
  end
endmodule

Результат исполнения

Пример 2

Результат исполнения

Last updated