Menu
Coddy logo textTech

Atrasos de Porta

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 esperam antes de executar uma instrução.

Nesta lição, abordamos os atrasos de porta, 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 a alteração de suas entradas.

No hardware real, as portas não respondem instantaneamente — há um pequeno atraso. 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 Atraso Geral e Atraso de Porta

 Atraso GeralAtraso de Porta
Sintaxe#10 a = b;and #5 (out, a, b);
Posição# antes de uma instrução# dentro da primitiva de porta
PropósitoAguardar antes de executarModelar 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 após a ou b mudarem.

Atraso de Porta com Múltiplas Entradas

nand #8 (out, a, b, c, d);   // NAND de 4 entradas com atraso de 8 unidades de tempo

Regras Importantes

RegraExplicação
O atraso vem após o nome da portaand #5 (out, a, b)
Valor do atraso em unidades de tempoBaseado na diretiva timescale
Todas as entradas afetam a saídaQualquer mudança na entrada aciona o atraso
Não sintetizávelAtrasos de porta são apenas para simulação
challenge icon

Desafio

Adicione os atrasos de porta que faltam a este módulo. Use atrasos diferentes para cada porta.

O que fazer:

  1. Porta AND: atraso de 5 unidades de tempo
  2. Porta OR: atraso de 3 unidades de tempo
  3. Porta NOT: atraso de 2 unidades de tempo

Folha de consulta

Os atrasos de porta (gate delays) modelam o tempo de propagação em primitivas de porta integradas.

Sintaxe:

gate_type #(delay) (output, input1, input2, ...);

Exemplos:

and  #5 (out, a, b);         // AND gate, 5 time unit delay
or   #3 (out, a, b);         // OR gate, 3 time unit delay
not  #2 (out, a);            // NOT gate, 2 time unit delay
nand #8 (out, a, b, c, d);   // 4-input NAND, 8 time unit delay

Pontos-chave:

  • O # vem após o nome da porta, antes da lista de portas
  • Qualquer mudança na entrada aciona o atraso antes da atualização da saída
  • Os atrasos de porta são apenas para simulação — não são sintetizáveis

Experimente você mesmo

module gate_delay_challenge;
  reg a, b;
  wire and_out, or_out, not_out;
  
  // TODO: Adicione uma porta AND com atraso de 5 unidades de tempo (entradas a, b)
  
  // TODO: Adicione uma porta OR com atraso de 3 unidades de tempo (entradas a, b)
  
  // TODO: Adicione uma 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
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