Atrasos de Portas
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 68 de 90.
Na lição anterior, abordamos atrasos gerais usados como #10 a = b;. Eles aguardam antes de executar uma instrução.
Nesta lição, abordaremos atrasos de portas, que são específicos de primitivas de portas 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 um hardware real, as portas não respondem instantaneamente. Há um pequeno atraso. Ao usar primitivas de portas integradas, você pode adicionar um atraso para simular o tempo de propagação da porta. A saída muda somente após o atraso especificado.
Diferença entre atraso geral e atraso de porta
| Atraso geral | Atraso de porta | |
|---|---|---|
| Sintaxe | #10 a = b; | and #5 (out, a, b); |
| Posição | # antes de uma instrução | # dentro da primitiva de porta |
| Finalidade | 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 a porta leva para responder.
Exemplo simples
and #5 (out, a, b);Esta porta AND leva 5 unidades de tempo para alterar sua saída depois que a ou b muda.
Atraso da Porta 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 |
|---|---|
| O atraso vem depois do nome da porta | and #5 (out, a, b) |
| O valor do atraso está em unidades de tempo | Baseado na diretiva timescale |
| Todas as entradas afetam a saída | Qualquer alteração na entrada aciona o atraso |
| Não sintetizável | Os atrasos das portas são usados apenas na simulação |
Desafio
Adicione os atrasos de propagação ausentes 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. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
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ões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU13Temporização e Atrasos
O Que São AtrasosAtrasos de PortasAtrasos de AtribuiçãoDiretiva de Escala de TempoGeração de ClockRevisão - Controle de Temporização2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um MóduloPratique por conta própria: Compilador de Verilog online