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
endTipos de Lista de Sensibilidade
| Tipo | Sintaxe | Quando o Bloco Executa |
|---|---|---|
| Todos os sinais (combinacional) | always @(*) | Quando qualquer sinal interno muda |
| Sinais específicos | always @(a or b) | Quando a ou b muda |
| Disparo por borda (sequencial) | always @(posedge clk) | Na borda de subida do clock |
| Múltiplas bordas | always @(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
endO * 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
endSe 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
endUse 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;
endExecuta na borda do clock ou na borda do reset.
Erros Comuns
| Erro | Por que está errado |
|---|---|
always @(a or b or c) mas usa d | Faltando d → latch |
always @(posedge clk or reset) | Faltando posedge para reset |
always @(clk) | Deve usar posedge clk para flip-flops |
Desafio
O que fazer:
- 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| Tipo | Sintaxe | Dispara quando |
|---|---|---|
| Todos os sinais | always @(*) | Qualquer sinal lido muda |
| Sinais específicos | always @(a or b) | a ou b mudam |
| Borda de subida | always @(posedge clk) | Borda de subida de clk |
| Múltiplas bordas | always @(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;
endErros 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
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo9Blocos Procedurais
Bloco AlwaysBloco InitialLista de SensibilidadeAtribuição BloqueanteAtribuição Não BloqueanteRecapitulação - Always vs Initial