What Are Delays
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 espaçar os eventos ao longo do tempo
- Eles ajudam a testar projetos sensíveis ao tempo, como clock 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 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 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:
- Time 0:
a = 0 - Time 10:
a = 1 - Time 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 first inicializado 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 projeto4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design13Timing And Delays
What Are DelaysGate DelaysAssignment DelaysTimescale DirectiveClock GenerationRecap - Timing Control5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPratique por conta própria: Compilador de Verilog online