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 diz 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 na 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 Executa
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 borda do reset

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

O mais seguro e comum para lógica combinacional.

always @(*) begin
  out = a & b;   // Executa quando a ou b muda
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 muda
end

Se você esquecer um sinal, você terá um latch (memória não intencional).

Opção 3: Gatilho de Borda (posedge)

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

Use posedge para borda de subida, negedge para borda de descida.

Opção 4: Múltiplas Bordas

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

Executa na borda do clock ou na borda do reset.

Erros Comuns

ErroPor que está errado
always @(a or b or c) mas usa dFaltando d → latch
always @(posedge clk or reset)Faltando posedge 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.

Folha de consulta

A lista de sensibilidade segue o @ e define quando um bloco always é executado:

always @(sensitivity_list) begin
  // executa quando os sinais listados mudam
end
TipoSintaxeDispara quando
Todos os sinaisalways @(*)Qualquer sinal lido muda
Sinais específicosalways @(a or b)a ou b mudam
Borda de subidaalways @(posedge clk)Borda de subida de clk
Múltiplas bordasalways @(posedge clk or posedge reset)Qualquer uma das bordas dispara

Use @(*) para lógica combinacional; use posedge/negedge para lógica sequencial:

// Combinacional
always @(*) begin
  out = a & b;
end

// Sequencial (flip-flop com reset assíncrono)
always @(posedge clk or posedge reset) begin
  if (reset) q <= 0;
  else       q <= d;
end

Erros comuns: omitir um sinal em uma lista específica causa um latch; escrever always @(clk) em vez de always @(posedge clk) para flip-flops; omitir posedge antes de reset em uma lista de múltiplas bordas.

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