Menu
Coddy logo textTech

What Are Delays

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 instrucción o cuándo cambia una señal. Se utilizan para modelar el comportamiento temporal del hardware real.

Por qué se necesitan retardos

El hardware real necesita tiempo para que las señales viajen a través de cables y puertas lógicas. Los retardos te permiten simular este comportamiento temporal.

  • En la simulación, sin retrasos, todo ocurre en el tiempo 0
  • Los retrasos permiten espaciar los eventos a lo largo del tiempo
  • Ayudan a probar diseños sensibles a la temporización, como clock y máquinas de estados

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 alterna 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 que se debe esperar.

Ejemplo sencillo

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

Temporización:

  • Time 0: a = 0
  • Time 10: a = 1
  • Time 15: a = 0

Retardos en bloques always

always #5 clk = ~clk;   // Alternar el reloj cada 5 unidades de tiempo

Esto crea una señal de reloj continua (suponiendo que clk se haya inicializado primero en 0 en un bloque initial. De lo contrario, ~x permanece en x).

Reglas importantes

ReglaExplicación
Símbolo #Marca un delay
Número después de #Cuántas unidades de time esperar
Los delay son acumulativos#10 después #20 espera un total de 30
No sintetizableLos delay son solo para simulación
challenge icon

Desafío

Qué hacer:

Add the missing delays to make this code print messages at times 0, 10, 25, and 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

Practica por tu cuenta: Compilador de Verilog online