Menu
Coddy logo textTech

Gate Delays

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 gate

 Atraso geralAtraso de gate
Sintaxe#10 a = b;and #5 (out, a, b);
Posição# antes de uma instrução# dentro da primitiva de gate
FinalidadeEsperar antes de executarModelar o tempo de propagação do gate

Sintaxe:

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

#(delay) especifica quantas unidades de time o gate 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 de gate 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 delay vem depois do nome do gateand #5 (out, a, b)
O valor do delay está em unidades de timeBaseado na diretiva timescale
Todas as inputs afetam o outputQualquer alteração na input aciona o delay
Não sintetizávelOs delays dos gates servem apenas para simulação
challenge icon

Desafio

Add os delay de gate ausentes neste module. Use delay diferentes para cada gate.

O que fazer:

  1. AND gate: delay de 5 time unit
  2. OR gate: delay de 3 time unit
  3. NOT gate: delay de 2 time unit

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