Menu
Coddy logo textTech

What Are Delays

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

No Verilog, delays controlam quando uma instrução é executada ou quando um sinal muda. Eles são usados para modelar o comportamento do tempo do hardware real.

Por que os atrasos são necessários

O hardware real leva tempo para que os sinais percorram fios e portas lógicas. Os atrasos permitem simular esse comportamento temporal.

  • Na simulação, sem atrasos, tudo acontece no tempo 0
  • Os atrasos permitem espaçar os eventos ao longo do tempo
  • Eles ajudam a testar projetos sensíveis ao tempo, como clock e máquinas de estados

Tipos de atraso

Tipo de atrasoFinalidade
Atrasos de portasAtraso através de portas lógicas
Atrasos de atribuiçãoAtraso ao atribuir valores
Diretiva TimescaleDefine as unidades de tempo para a simulação

Sintaxe básica

Um delay é escrito com um # seguido por um número:

#10 clk = ~clk;   // Aguarde 10 unidades de tempo, então alterne o clock
#5 a = b;         // Aguarde 5 unidades de tempo, então atribua a = b

O número depois de # é o número de unidades de tempo a esperar.

Exemplo simples

initial begin
  a = 0;
  #10 a = 1;   // Após 10 unidades de tempo, a se torna 1
  #5 a = 0;    // Após outras 5 unidades de tempo, a se torna 0
end

Temporização:

  • Time 0: a = 0
  • Time 10: a = 1
  • Time 15: a = 0

Atrasos em Blocos always

always #5 clk = ~clk;   // Alterna o clock a cada 5 unidades de tempo

Isso cria um sinal de clock contínuo (supondo que clk tenha sido first inicializado como 0 em um bloco initial. Caso contrário, ~x permanece x).

Regras importantes

RegraExplicação
Símbolo #Marca um atraso
Número após #Quantas unidades de tempo aguardar
Os atrasos são cumulativos#10 depois #20 aguarda um total de 30
Não sintetizávelOs atrasos servem apenas para simulação
challenge icon

Desafio

O que fazer:

Adicione os atrasos que faltam para fazer este código imprimir mensagens nos tempos 0, 10, 25 e 40.

Experimente você mesmo

module delay_challenge;
  
  initial begin
    $display("Time %0t: Start", $time);
    // TODO: Adicione atraso para alcançar o tempo 10
    $display("Time %0t: After first delay", $time);
    // TODO: Adicione atraso para alcançar o tempo 25
    $display("Time %0t: After second delay", $time);
    // TODO: Adicione atraso para alcançar o tempo 40
    $display("Time %0t: End", $time);
    $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