O que são Atrasos
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 67 de 90.
Em Verilog, atrasos controlam quando uma instrução é executada ou quando um sinal muda. Eles são usados para modelar o comportamento de temporização de hardware real.
Por que os atrasos são necessários
O hardware real leva tempo para que os sinais viajem através de fios e portas. Os atrasos permitem simular esse comportamento de temporização.
- Na simulação, sem atrasos, tudo acontece no tempo 0
- Os atrasos permitem que você espace os eventos ao longo do tempo
- Eles ajudam a testar designs sensíveis ao tempo, como relógios e máquinas de estado
Tipos de Atrasos
| Tipo de Atraso | Propósito |
|---|---|
| Atrasos de Porta | Atraso através de portas lógicas |
| Atrasos de Atribuição | Atraso ao atribuir valores |
| Diretiva Timescale | Define unidades de tempo para simulação |
Sintaxe Básica
Um atraso (delay) é escrito com um # seguido por um número:
#10 clk = ~clk; // Aguarde 10 unidades de tempo, então inverta 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 para esperar.
Exemplo Simples
initial begin
a = 0;
#10 a = 1; // Após 10 unidades de tempo, a torna-se 1
#5 a = 0; // Após outras 5 unidades de tempo, a torna-se 0
endTempo:
- 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 tempoIsso cria um sinal de clock contínuo.
Regras Importantes
| Regra | Explicação |
|---|---|
Símbolo # | Marca um atraso |
Número após # | Quantas unidades de tempo esperar |
| Atrasos são cumulativos | #10 depois #20 espera um total de 30 |
| Não sintetizável | Atrasos são apenas para simulação |
Desafio
O que fazer:
Adicione os atrasos que faltam para fazer este código imprimir mensagens nos tempos 0, 10, 25 e 40.
Folha de consulta
Em Verilog, os atrasos (delays) usam # seguido por unidades de tempo para controlar quando as instruções são executadas:
#10 a = 1; // Aguarda 10 unidades de tempo, então atribuiOs atrasos são cumulativos — cada atraso é adicionado ao tempo atual:
initial begin
a = 0; // Tempo 0
#10 a = 1; // Tempo 10
#5 a = 0; // Tempo 15
endUse em blocos always para gerar clocks:
always #5 clk = ~clk; // Alterna a cada 5 unidadesNota: Atrasos são apenas para simulação — não são sintetizáveis.
Experimente você mesmo
module delay_challenge;
initial begin
$display("Time %0t: Start", $time);
// TODO: Adicionar atraso para chegar ao tempo 10
$display("Time %0t: After first delay", $time);
// TODO: Adicionar atraso para chegar ao tempo 25
$display("Time %0t: After second delay", $time);
// TODO: Adicionar atraso para chegar ao 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