Atrasos de Porta
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 68 de 90.
Na lição anterior, cobrimos os delays gerais usados como #10 a = b; — eles aguardam antes de executar uma instrução.
Nesta lição, abordaremos os atrasos de porta (gate delays), que são específicos para primitivas de porta integradas como and, or e not. Um atraso de porta modela quanto tempo uma porta de hardware leva para produzir uma saída após suas entradas mudarem.
Em hardware real, portas não respondem instantaneamente — existe um pequeno atraso (delay). Quando você usa primitivas de porta integradas, pode adicionar um atraso para simular o tempo de propagação da porta. A saída muda apenas após o atraso especificado.
Diferença entre General Delay e Gate Delay
| General Delay | Gate Delay | |
|---|---|---|
| Sintaxe | #10 a = b; | and #5 (out, a, b); |
| Posição | # antes de uma instrução | # dentro da primitiva de porta |
| Propósito | Aguardar antes de executar | Modelar o tempo de propagação da porta |
Sintaxe:
gate_type #(delay) (output, input1, input2, ...);O #(delay) especifica quantas unidades de tempo o gate leva para responder.
Exemplo Simples
and #5 (out, a, b);Esta AND gate leva 5 time units para mudar sua output depois que a ou b muda.
Gate Delay com Múltiplas Entradas
nand #8 (out, a, b, c, d); // NAND de 4 entradas com atraso de 8 unidades de tempoRegras Importantes
| Regra | Explicação |
|---|---|
| Delay vem depois do nome da gate | and #5 (out, a, b) |
| Valor do delay em unidades de time | Baseado na diretiva timescale |
| Todos os inputs afetam a output | Qualquer alteração no input dispara o delay |
| Não sintetizável | Delays de gate são apenas para simulação |
Desafio
Adicione os atrasos de porta que faltam a este módulo. Use atrasos diferentes para cada porta.
O que fazer:
- Porta AND: atraso de 5 unidades de tempo
- Porta OR: atraso de 3 unidades de tempo
- Porta NOT: atraso de 2 unidades de tempo
Experimente você mesmo
module gate_delay_challenge;
reg a, b;
wire and_out, or_out, not_out;
// TODO: Adicione porta AND com atraso de 5 unidades de tempo (entradas a, b)
// TODO: Adicione porta OR com atraso de 3 unidades de tempo (entradas a, b)
// TODO: Adicione porta NOT com atraso de 2 unidades de tempo (entrada a)
initial begin
$monitor("Time %0t: a=%b, b=%b | and=%b, or=%b, not=%b",
$time, a, b, and_out, or_out, not_out);
a = 1; b = 1;
#10 $finish;
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 ALU13Temporização e Atrasos
O que são AtrasosAtrasos de PortaAtrasos de AtribuiçãoDiretiva TimescaleGeração de ClockRecapitulação - Controle de Temporização2Tipos 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ódulo