¿Qué son los retardos?
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 sentencia o cuándo cambia una señal. Se utilizan para modelar el comportamiento de temporización del hardware real.
Por qué son necesarios los retardos
El hardware real tarda tiempo en que las señales viajen a través de cables y compuertas. Los retardos le permiten simular este comportamiento de temporización.
- En la simulación, sin retardos, todo sucede en el tiempo 0
- Los retardos permiten espaciar los eventos a lo largo del tiempo
- Ayudan a probar diseños sensibles al tiempo, como relojes y máquinas de estado
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; // Esperar 10 unidades de tiempo, luego alternar el reloj
#5 a = b; // Esperar 5 unidades de tiempo, luego asignar a = bEl número después de # es el número de unidades de tiempo a esperar.
Ejemplo sencillo
initial begin
a = 0;
#10 a = 1; // Después de 10 unidades de tiempo, a pasa a ser 1
#5 a = 0; // Después de otras 5 unidades de tiempo, a pasa a ser 0
endTiempos:
- Tiempo 0:
a = 0 - Tiempo 10:
a = 1 - Tiempo 15:
a = 0
Retrasos en bloques Always
always #5 clk = ~clk; // Alternar el reloj cada 5 unidades de tiempoEsto crea una señal de reloj continua.
Reglas importantes
| Regla | Explicación |
|---|---|
Símbolo # | Marca un retraso |
Número después de # | Cuántas unidades de tiempo esperar |
| Los retrasos son acumulativos | #10 luego #20 espera un total de 30 |
| No sintetizable | Los retrasos son solo para simulación |
Desafío
Qué hacer:
Añade los retardos que faltan para que este código imprima mensajes en los tiempos 0, 10, 25 y 40.
Hoja de referencia
En Verilog, los retardos usan # seguido de unidades de tiempo para controlar cuándo se ejecutan las sentencias:
#10 a = 1; // Espera 10 unidades de tiempo, luego asignaLos retardos son acumulativos — cada retardo se suma al tiempo actual:
initial begin
a = 0; // Tiempo 0
#10 a = 1; // Tiempo 10
#5 a = 0; // Tiempo 15
endUso en bloques always para generar relojes:
always #5 clk = ~clk; // Alterna cada 5 unidadesNota: Los retardos son solo para simulación — no son sintetizables.
Pruébalo tú mismo
module delay_challenge;
initial begin
$display("Time %0t: Start", $time);
// TODO: Agregar retraso para llegar al tiempo 10
$display("Time %0t: After first delay", $time);
// TODO: Agregar retraso para llegar al tiempo 25
$display("Time %0t: After second delay", $time);
// TODO: Agregar retraso para llegar al 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 Verilog?Hardware vs SoftwareNiveles de abstracción de diseñoTu primer móduloComentarios4Operadores Parte 1
Operadores aritméticosOperador de móduloOperadores de comparaciónRepaso - Matemáticas simplesOperadores bit a bit7Asignación y Compuertas
Asignación ContinuaAsignación con OperadoresPrimitivas de Compuertas IntegradasCompuertas AND OR NOTCompuertas XOR XNORResumen - Circuito de Compuertas Lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU13Temporización y retardos
¿Qué son los retardos?Retardos de compuertaRetardos de asignaciónDirectiva TimescaleGeneración de relojResumen - Control de temporización5Operadores Parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalResumen - Desafío de operadores3Sistema de numeración
Representación binariaNúmeros con tamaño definidoNúmeros sin tamaño definidoNúmeros negativosValores especiales X y ZResumen - Formatos de números6Módulos
Estructura del móduloPuertos de entrada y salidaPuertos InoutInstanciación de módulosMapeo de puertos por nombreMapeo de puertos por ordenResumen: Construye un módulo