Menu
CoddyTech

Список чувствительности

Часть раздела Основы путешествия по Verilog на Coddy. Урок 48 из 90.

Список чувствительности сообщает блоку always, when to execute. Он записывается внутри скобок после символа @.

Список чувствительности — это набор сигналов или событий, которые запускают блок always. Когда любой сигнал в списке changes, блок executes.

Синтаксис:

always @(sensitivity_list) begin
  // Код выполняется, когда сигналы в списке изменяются
end

Типы списка чувствительности

ТипСинтаксисКогда выполняется блок
Все signals (Combinational)always @(*)when любой сигнал внутри changes
Конкретные signalsalways @(a or b)when a или b changes
Триггер по фронту (Sequential)always @(posedge clk)При rising edge сигнала clock
Несколько фронтовalways @(posedge clk or posedge reset)При edge сигнала clock или edge сигнала reset

Вариант 1: Все сигналы (*)

Самый безопасный и наиболее распространённый вариант для комбинационной логики.

always @(*) begin
  out = a & b;   // Выполняется, когда a или b изменяются
end

* автоматически включает все signals, прочитанные в блоке.

Вариант 2: Specific signals

always @(a or b) begin
  out = a & b;   // Выполняется, когда a или b изменяются
end

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

Вариант 3: Триггер по фронту (posedge)

always @(posedge clk) begin
  q <= d;        // Выполняется по переднему фронту тактового сигнала
end

Используйте posedge для rising edge, negedge для falling edge.

Вариант 4: несколько фронтов

always @(posedge clk or posedge reset) begin
  if (reset)
    q <= 0;
  else
    q <= d;
end

Выполняется по фронту clock или по фронту reset.

Распространённые ошибки

ОшибкаПочему это неправильно
always @(a or b or c), но используется dОтсутствует d → в симуляции output устаревает (несоответствие симуляции и синтеза)
always @(posedge clk or reset)Для reset отсутствует posedge
always @(clk)Для flip-flop следует использовать posedge clk
challenge icon

Задание

Что нужно сделать:

  1. Добавь правильный список чувствительности, чтобы этот flip-flop работал. Блок должен выполняться по rising edge сигнала clk.

Попробуйте сами

module flipflop (
  input clk,
  input d,
  output reg q
);
  
  always @(______) begin
    q <= d;
  end

endmodule
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog