¿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 (delays) controlan cuándo se ejecuta una sentencia o cuándo cambia una señal. Se utilizan para modelar el comportamiento temporal del hardware real.
Por qué son necesarios los retardos
El hardware real requiere tiempo para que las señales viajen a través de los cables y las puertas lógicas. Los retardos te permiten simular este comportamiento temporal.
- En la simulación, sin retardos, todo ocurre en el tiempo 0
- Los retardos le 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; // Espera 10 unidades de tiempo, luego conmuta 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 a esperar.
Ejemplo simple
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
endTiempo:
- Tiempo 0:
a = 0 - Tiempo 10:
a = 1 - Tiempo 15:
a = 0
Delays en bloques Always
always #5 clk = ~clk; // Alterna el reloj cada 5 unidades de tiempoEsto crea una señal de clock continua (asumiendo que clk fue first inicializado en 0 en un bloque initial; de lo contrario, ~x permanece como x).
Reglas importantes
| Regla | Explicación |
|---|---|
Símbolo # | Marca un retardo |
Número después de # | Cuántas unidades de tiempo esperar |
| Los retardos son acumulativos | #10 después #20 espera un total de 30 |
| No sintetizable | Los retardos 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.
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 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