Menu
Coddy logo textTech

¿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 retardoPropósito
Retardos de compuertaRetardo a través de compuertas lógicas
Retardos de asignaciónRetardo al asignar valores
Directiva de escala de tiempoEstablece 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 = b

El 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
end

Tiempos:

  • 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 tiempo

Esto crea una señal de reloj continua.

Reglas importantes

ReglaExplicació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 sintetizableLos retrasos son solo para simulación
challenge icon

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 asigna

Los 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
end

Uso en bloques always para generar relojes:

always #5 clk = ~clk;  // Alterna cada 5 unidades

Nota: 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

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