Menu
Coddy logo textTech

Bloque Initial

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

Verilog tiene dos bloques procedimentales: initial (se ejecuta una vez) y always (se ejecuta continuamente). Ahora cubramos el bloque initial.

¿Qué es un bloque Initial?

El bloque initial se ejecuta solo una vez al comienzo de la simulación (tiempo 0). Cuando termina, no se vuelve a ejecutar.

Se utiliza principalmente en bancos de pruebas para:

  • Establecer valores iniciales
  • Generar señales de prueba
  • Mostrar mensajes
  • Iniciar la simulación

Sintaxis

initial begin
  // Las sentencias se ejecutan una vez, en secuencia
end

Ejemplo básico

initial begin
  $display("Simulation started");
  $display("This runs once");
  $finish;
end

Salida:

Simulation started
This runs once

Uso del bloque initial para señales de prueba

initial begin
  a = 0;
  #10 a = 1;
  #10 a = 0;
  #10 $finish;
end

Esto cambia a en los tiempos: 0, 10 y 20.

initial vs always

 initialalways
Se ejecutaUna vezContinuamente (siempre)
Uso paraBancos de pruebas (testbenches), inicializaciónHardware (flip-flops, contadores)
¿Sintetizable?No (solo simulación)Sí (con lista de sensibilidad)

Notas importantes

  • Los bloques initial no son sintetizables — no se pueden convertir en hardware
  • Usa initial solo en testbenches
  • Sin $finish, la simulación se ejecutará indefinidamente (no hay un reloj para detenerla)
challenge icon

Desafío

Agrega el bloque initial que falta que establece a en 0, luego después de 10 unidades de tiempo establece a en 1.

Qué hacer:

  1. Agrega initial begin y end
  2. Establece a = 0
  3. Espera #10
  4. Establece a = 1
  5. Agrega $finish para terminar la simulación

Hoja de referencia

El bloque initial se ejecuta una vez en el tiempo de simulación 0. Se usa solo en bancos de pruebas (no sintetizable).

initial begin
  a = 0;       // establecido en el tiempo 0
  #10 a = 1;   // establecido en el tiempo 10
  #10 a = 0;   // establecido en el tiempo 20
  $finish;     // finalizar simulación
end

Sin $finish, la simulación se ejecuta indefinidamente.

initialalways
EjecuciónUna vezContinuamente
Uso paraBancos de pruebasHardware
¿Sintetizable?No

Pruébalo tú mismo

module test;
  reg a;
  
  // TODO: Agregar bloque initial aquí
  // Establecer a = 0
  // Esperar #10
  // Establecer a = 1
  // Agregar $finish; para terminar la simulación
  
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