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 (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 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;   // Espera 10 unidades de tiempo, luego conmuta el reloj
#5 a = b;         // Espera 5 unidades de tiempo, luego asigna a = b

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

Tiempo:

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

Esto 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

ReglaExplicació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 sintetizableLos retardos 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.

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

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