Menu
Coddy logo textTech

Sensitivity List

Часть раздела Основы путешествия по 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