Menu
Coddy logo textTech

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 geralAtraso de porta
Sintaxe#10 a = b;and #5 (out, a, b);
Posição# antes de uma instrução# dentro da primitiva de porta
FinalidadeAguardar 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 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 tempo

Regras importantes

RegraExplicação
O atraso vem depois do nome da portaand #5 (out, a, b)
O valor do atraso está em unidades de tempoBaseado na diretiva timescale
Todas as entradas afetam a saídaQualquer alteração na entrada aciona o atraso
Não sintetizávelOs atrasos das portas são usados apenas na simulação
challenge icon

Desafio

Adicione os atrasos de propagação ausentes 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

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
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

Pratique por conta própria: Compilador de Verilog online