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 delay | Propósito |
|---|---|
| Delays de porta | delay através de portas lógicas |
| Delays de atribuição | delay ao atribuir valores |
| Diretiva timescale | Define 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 = bO 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
endTempo:
- 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 tempoIsso 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
| Regra | Explicaçã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ável | Atrasos são apenas para simulação |
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
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
1Introdução
O que é VerilogHardware vs SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU13Temporização e Atrasos
O que são AtrasosAtrasos de PortaAtrasos de AtribuiçãoDiretiva TimescaleGeração de ClockRecapitulação - Controle de Temporização2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo