Retardos de compuerta
Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 68 de 90.
En la lección anterior, cubrimos los retardos generales utilizados como #10 a = b; — esperan antes de ejecutar una sentencia.
En esta lección, cubrimos los retardos de puerta (gate delays), que son específicos de las primitivas de puerta integradas como and, or y not. Un retardo de puerta modela cuánto tiempo tarda una puerta de hardware en producir una salida (output) después de que sus entradas (inputs) cambian.
En el hardware real, los gates no responden al instante — hay un pequeño delay. Cuando usas primitivas de gate integradas, puedes añadir un delay para simular el time de propagación del gate. La output cambia solo después del delay especificado.
Diferencia entre delay general y gate delay
| Delay general | Gate delay | |
|---|---|---|
| Sintaxis | #10 a = b; | and #5 (out, a, b); |
| Posición | # antes de una sentencia | # dentro de la primitiva de la puerta |
| Propósito | Esperar antes de ejecutar | Modelar el tiempo de propagación de la puerta |
Sintaxis:
gate_type #(delay) (output, input1, input2, ...);El #(delay) especifica cuántas unidades de time tarda la gate en responder.
Ejemplo sencillo
and #5 (out, a, b);Esta puerta AND tarda 5 unidades de tiempo en cambiar su salida después de que a o b cambie.
Gate Delay con Múltiples Inputs
nand #8 (out, a, b, c, d); // NAND de 4 entradas con retardo de 8 unidades de tiempoReglas Importantes
| Regla | Explicación |
|---|---|
| El retardo va después del nombre de la puerta | and #5 (out, a, b) |
| Valor del retardo en unidades de tiempo | Basado en la directiva timescale |
| Todas las entradas afectan a la salida | Cualquier cambio en las entradas activa el retardo |
| No sintetizable | Los retardos de puertas son solo para simulación |
Desafío
Agrega los retardos de compuerta que faltan a este módulo. Usa diferentes retardos para cada compuerta.
Qué hacer:
- Compuerta AND: retardo de 5 unidades de tiempo
- Compuerta OR: retardo de 3 unidades de tiempo
- Compuerta NOT: retardo de 2 unidades de tiempo
Pruébalo tú mismo
module gate_delay_challenge;
reg a, b;
wire and_out, or_out, not_out;
// TODO: Añade puerta AND con retardo de 5 unidades de tiempo (entradas a, b)
// TODO: Añade puerta OR con retardo de 3 unidades de tiempo (entradas a, b)
// TODO: Añade puerta NOT con retardo de 2 unidades de tiempo (entrada a)
initial begin
$monitor("Time %0t: a=%b, b=%b | and=%b, or=%b, not=%b",
$time, a, b, and_out, or_out, not_out);
a = 1; b = 1;
#10 $finish;
end
endmoduleEsta 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