Menu
Coddy logo textTech

Lista de Sensibilidade

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 lista de sensibilidade é um conjunto de sinais ou eventos que acionam o bloco always. Quando qualquer sinal da lista muda, o bloco é executado.

Sintaxe:

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

Tipos de lista de sensibilidade

TipoSintaxeQuando o bloco é executado
Todos os sinais (combinacional)always @(*)Quando qualquer sinal interno muda
Sinais específicosalways @(a or b)Quando a ou b muda
Disparo por borda (sequencial)always @(posedge clk)Na borda de subida do clock
Múltiplas bordasalways @(posedge clk or posedge reset)Na borda do clock ou na borda do 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, a saída não será atualizada na simulação quando esse sinal mudar, portanto 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

É executado na borda do clock ou na borda de reset.

Erros comuns

ErroPor que está errado
always @(a or b or c) mas usa dd ausente → a saída fica desatualizada na simulação (incompatibilidade entre simulação e síntese)
always @(posedge clk or reset)Falta posedge para o reset
always @(clk)Deveria 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