Поведенческий процедурный оператор 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