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.

Em Verilog, delays (atrasos) controlam quando uma instrução é executada ou quando um sinal muda. Eles são usados para modelar o comportamento temporal do hardware real.

Por que Delays são Necessários

O hardware real leva tempo para os sinais percorrerem fios e portas lógicas. Delays permitem que você simule esse comportamento temporal.

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

Tipos de delay

Tipo de delayPropósito
Delays de portadelay através de portas lógicas
Delays de atribuiçãodelay ao atribuir valores
Diretiva timescaleDefine time units para 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 após # é 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 mais 5 unidades de tempo, a se torna 0
end

Tempo:

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

Delays em Bloco Always

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

Isso cria um sinal de clock contínuo (assumindo que clk foi primeiro inicializado para 0 em um bloco initial — caso contrário, ~x permanece x).

Regras Importantes

RegraExplicação
Símbolo #Marca um atraso (delay)
Número após #Quantas unidades de tempo aguardar
Atrasos são acumulativos#10 depois #20 aguarda um total de 30
Não sintetizávelAtrasos são apenas para simulação
challenge icon

Desafio

O que fazer:

Adicione os atrasos ausentes 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