Поведенческий процедурный оператор initial

Процедурный оператор initial позволяет инициализировать внутренние переменные модуля. С него начинается исполнение модуля при запуске симулятора. Внутри initial можно поставить одно выражение или блок begin-end. Содержимое initial выполняется один раз, последовательно, начиная с момента времени 0.

Операторов инициализации initial может быть несколько. Разные initial выполняются в неопределённом порядке, независимо друг от друга.

Синтаксис

initial begin
  <код>
end

Пример

/* Несколько операторов initial */
module multi_initial_tb();
  initial begin
    $display("Hello world0");
  end
  initial begin
    $display("Hello world1");
  end
endmodule

/* Несколько операторов initial, действия будут выполнены в разных тактах */
module multi_initial_tb();
  initial begin
    #1 $display("Hello world0");
  end
  initial begin
    $display("Hello world1");
  end
endmodule

Пояснение к примеру

В силу «одновременного» исполнения всех блоков initial с начала симуляции, в первом примере может отработать сначала как первый display, так и второй. Во втором примере гарантируется, что сначала будет выведено "Hello world1", а после "Hello world0" за счёт установленной временной задержки в первом блоке.

Last updated