Menu
Coddy logo textTech

O Que São Atrasos

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 distribuir os eventos ao longo do tempo
  • Eles ajudam a testar projetos sensíveis ao tempo, como relógios 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 atraso é 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:

  • Tempo 0: a = 0
  • Tempo 10: a = 1
  • Tempo 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 inicializado primeiro 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