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 atraso | Finalidade |
|---|---|
| Atrasos de portas | Atraso através de portas lógicas |
| Atrasos de atribuição | Atraso ao atribuir valores |
| Diretiva Timescale | Define 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 = bO 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
endTemporizaçã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 tempoIsso 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
| Regra | Explicaçã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ável | Os atrasos servem 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.
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. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
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ões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU13Temporização e Atrasos
O Que São AtrasosAtrasos de PortasAtrasos de AtribuiçãoDiretiva de Escala de TempoGeração de ClockRevisão - Controle de Temporização2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um MóduloPratique por conta própria: Compilador de Verilog online