Menu
CoddyTech

Atrasos de Portas

Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 68 de 90.

Na lição anterior, vimos atrasos gerais usados como #10 a = b;. Eles aguardam antes de executar uma instrução.

Nesta lição, abordamos os atrasos de porta, que são específicos de 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 mudança de suas entradas.

Em hardware real, as portas lógicas não respondem instantaneamente. Há um pequeno atraso. Quando você usa primitivas de portas lógicas integradas, 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 da execuçãoModelar o tempo de propagação da porta

Sintaxe:

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

#(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)
Valor do atraso em unidades de tempoCom base na diretiva timescale
Todas as entradas afetam a saídaUma alteração em qualquer entrada pode alterar a saída, mas somente após o atraso
Não sintetizávelOs atrasos das portas são usados apenas em simulações
challenge icon

Desafio

Adicione os atrasos de porta que estão faltando neste 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 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

Pratique por conta própria: Compilador de Verilog online