Menu
Coddy logo textTech

Sensitivity List

Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 48 de 90.

A lista de sensibilidade informa ao bloco always quando executar. Ela é escrita dentro de parênteses após o símbolo @.

A list de sensibilidade é um conjunto de signals ou eventos que aciona o bloco always. when qualquer signal na list changes, o bloco executes.

Sintaxe:

always @(sensitivity_list) begin
  // O código é executado quando os sinais na lista mudam
end

Tipos de lista de sensibilidade

TipoSintaxewhen o bloco executes
Todos os signals (combinacional)always @(*)when qualquer signal interno changes
signals específicosalways @(a or b)when a ou b changes
Disparo por edge (Sequential)always @(posedge clk)Na rising edge de clock
Vários edgealways @(posedge clk or posedge reset)Na edge de clock ou na edge de reset

Opção 1: Todos os sinais (*)

A opção mais segura e comum para lógica combinacional.

always @(*) begin
  out = a & b;   // Executa quando a ou b mudam
end

O * inclui automaticamente todos os sinais lidos no bloco.

Opção 2: Sinais específicos

always @(a or b) begin
  out = a & b;   // Executa quando a ou b mudam
end

Se você esquecer um sinal, o output não será atualizado na simulação quando esse sinal mudar, então a simulação não corresponderá mais ao hardware sintetizado.

Opção 3: Disparo por borda (posedge)

always @(posedge clk) begin
  q <= d;        // Executa na borda de subida do clock
end

Use posedge para a borda de subida e negedge para a borda de descida.

Opção 4: Múltiplas Bordas

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

Runs na edge de clock ou edge de reset.

Erros comuns

ErroPor que está errado
always @(a or b or c), mas usa dd ausente → output fica desatualizado na simulação (incompatibilidade entre sim/synth)
always @(posedge clk or reset)posedge ausente para reset
always @(clk)Deve usar posedge clk para flip-flops
challenge icon

Desafio

O que fazer:

  1. Adicione a lista de sensibilidade correta para fazer este flip-flop funcionar. O bloco deve ser executado na borda de subida de clk.

Experimente você mesmo

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

endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos

Pratique por conta própria: Compilador de Verilog online