What Are Delays
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 67 de 90.
En Verilog, los retardos controlan cuándo se ejecuta una instrucción o cuándo cambia una señal. Se utilizan para modelar el comportamiento temporal del hardware real.
Por qué se necesitan retardos
El hardware real necesita tiempo para que las señales viajen a través de cables y puertas lógicas. Los retardos te permiten simular este comportamiento temporal.
- En la simulación, sin retrasos, todo ocurre en el tiempo 0
- Los retrasos permiten espaciar los eventos a lo largo del tiempo
- Ayudan a probar diseños sensibles a la temporización, como clock y máquinas de estados
Tipos de retardos
| Tipo de retardo | Propósito |
|---|---|
| Retardos de compuerta | Retardo a través de compuertas lógicas |
| Retardos de asignación | Retardo al asignar valores |
| Directiva de escala de tiempo | Establece las unidades de tiempo para la simulación |
Sintaxis básica
Un retardo se escribe con un # seguido de un número:
#10 clk = ~clk; // Espera 10 unidades de tiempo, luego alterna el reloj
#5 a = b; // Espera 5 unidades de tiempo, luego asigna a = bEl número después de # es el número de unidades de tiempo que se debe esperar.
Ejemplo sencillo
initial begin
a = 0;
#10 a = 1; // Después de 10 unidades de tiempo, a se convierte en 1
#5 a = 0; // Después de otras 5 unidades de tiempo, a se convierte en 0
endTemporización:
- Time 0:
a = 0 - Time 10:
a = 1 - Time 15:
a = 0
Retardos en bloques always
always #5 clk = ~clk; // Alternar el reloj cada 5 unidades de tiempoEsto crea una señal de reloj continua (suponiendo que clk se haya inicializado primero en 0 en un bloque initial. De lo contrario, ~x permanece en x).
Reglas importantes
| Regla | Explicación |
|---|---|
Símbolo # | Marca un delay |
Número después de # | Cuántas unidades de time esperar |
| Los delay son acumulativos | #10 después #20 espera un total de 30 |
| No sintetizable | Los delay son solo para simulación |
Desafío
Qué hacer:
Add the missing delays to make this code print messages at times 0, 10, 25, and 40.
Pruébalo tú mismo
module delay_challenge;
initial begin
$display("Time %0t: Start", $time);
// TODO: Añade un retardo para alcanzar el tiempo 10
$display("Time %0t: After first delay", $time);
// TODO: Añade un retardo para alcanzar el tiempo 25
$display("Time %0t: After second delay", $time);
// TODO: Añade un retardo para alcanzar el tiempo 40
$display("Time %0t: End", $time);
$finish;
end
endmodule
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1Introducción
Qué es VerilogHardware frente a softwareTu primer móduloComentariosNiveles de abstracción del diseño4Operators 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 LogicPractica por tu cuenta: Compilador de Verilog online