Lista de Sensibilidade
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 48 de 90.
A sensitivity list diz ao bloco always when executar. Ela é escrita dentro de parênteses após o símbolo @.
A sensitivity list é um conjunto de signals ou eventos que acionam o bloco always. Quando qualquer signal na list changes, o bloco executes.
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 |
| Gatilho de 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 de reset |
Opção 1: Todos os Sinais (*)
A mais segura e comum para lógica combinacional.
always @(*) begin
out = a & b; // Executa quando a ou b mudam
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 mudam
endSe você esquecer um sinal, o output não atualiza na simulação when esse sinal changes — então a simulação não corresponde mais ao hardware sintetizado.
Opção 3: Edge Trigger (posedge)
always @(posedge clk) begin
q <= d; // Executa na borda de subida do clock
endUse posedge para rising edge, negedge para falling edge.
Opção 4: Múltiplas Edges
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 | Falta d → 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) | Deve usar posedge clk para flip-flops |
Desafio
O que fazer:
- Adicione a sensitivity list correta para fazer este flip-flop funcionar. O bloco deve ser executado na rising edge do
clk.
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