Menu
Coddy logo textTech

Bucle Forever

Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 61 de 90.

El bucle forever repite un bloque de código de forma continua, para siempre. Nunca se detiene por sí solo.

Un bucle forever se ejecuta repetidamente sin fin. Es útil para generar relojes y otras señales continuas en testbenches.

Sintaxis:

forever begin
  // Código que se repite para siempre
end

Ejemplo simple

forever begin
  $display("This prints forever");
end

Esto se imprimirá indefinidamente y bloqueará tu simulación. Añade siempre un retardo o una condición de parada.

Generación de un reloj (Uso común)

El uso más común de forever es generar una señal de reloj (clock):

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;   // Alternar cada 5 unidades de tiempo
  end
end

Esto crea un reloj que se ejecuta durante toda la simulación.

Forever con Disable

Puedes detener un bucle forever usando una sentencia disable:

initial begin : clock_gen   // Nombre añadido aquí
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end
initial begin
  #100;
  disable clock_gen;   // Ahora esto funciona
end

Forever frente a otros bucles

Bucle¿Se detiene?Cuándo usar
forSí (después de iteraciones fijas)Número conocido de repeticiones
whileSí (cuando la condición es falsa)Condición de parada desconocida
repeatSí (después de iteraciones fijas)Número conocido de repeticiones
foreverNo (nunca)Señales continuas (reloj)

Reglas importantes

ReglaExplicación
Debe incluir un retardo#10 o @(posedge clk)
Sin retardo, la simulación se bloqueaBucle infinito sin avance de tiempo
Usar con disable para detenerO la simulación nunca termina
Se usa mejor en testbenchesNo sintetizable
challenge icon

Desafío

Qué hacer:

Agrega el bucle forever que falta para generar un reloj que conmuta cada 10 unidades de tiempo.

Pruébalo tú mismo

module forever_challenge;
  reg clk;
  
  initial begin
    clk = 0;
    // TODO: Añade un bucle forever para alternar clk cada 10 unidades de tiempo
  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