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

Изменения значений переменных или проводов могут использоваться в качестве события синхронизации для запуска выполнения других процедурных инструкций.

Операторы always выполняются непрерывно во время моделирования каждый раз, когда хотя бы один из его аргументов в списке чувствительности меняет значение. Имена входных сигналов разделяются ключевым словом or или символом , .

Токен @* добавляет в список чувствительности все провода и переменные, которые считываются операторами внутри always.

Синтаксис

/* Пример 1: always, реагирующий на все переменные в модуле */
always @* begin
  <выражения>
end

/* Пример 2: always выполняется, когда a || b == true */
always @(a, b) begin
  <выражения>
end

/* Пример 3: always выполняется, когда a || b || c == true */
always @(a or b or c) begin
  <выражения>
end

/* Пример 4: always, срабатывающий каждый такт */
always #1 begin
  <выражения>
end

Пример

module always_tb;
  reg [3:0] counter;

  initial begin
    counter = 0;
  end

  always #2 begin
    counter = counter + 1;
  end

  always #1 @(counter) begin
      $display("Hello world %d at %0t", counter, $time);
  end  
  
  always #10 begin
    $finish;
  end
endmodule

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

Hello world  1 at 2
Hello world  2 at 4
Hello world  3 at 6
Hello world  4 at 8
Hello world  5 at 10

Last updated