Menu
Coddy logo textTech

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 generalGate delay
Sintaxis#10 a = b;and #5 (out, a, b);
Posición# antes de una sentencia# dentro de la primitiva de la puerta
PropósitoEsperar antes de ejecutarModelar 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 tiempo

Reglas Importantes

ReglaExplicación
El retardo va después del nombre de la puertaand #5 (out, a, b)
Valor del retardo en unidades de tiempoBasado en la directiva timescale
Todas las entradas afectan a la salidaCualquier cambio en las entradas activa el retardo
No sintetizableLos retardos de puertas son solo para simulación
challenge icon

Desafío

Agrega los retardos de compuerta que faltan a este módulo. Usa diferentes retardos para cada compuerta.

Qué hacer:

  1. Compuerta AND: retardo de 5 unidades de tiempo
  2. Compuerta OR: retardo de 3 unidades de tiempo
  3. 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
endmodule
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos