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 procedural blocks: initial (runs once) y always (runs continuamente). Ahora veamos el initial block.

¿Qué es un Initial block?

El initial block runs únicamente once al comienzo de la simulation (time 0). Cuando finish, no runs de nuevo.

Se utiliza principalmente en testbenches 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 block initial para señales de Test

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
EjecucionesUna sola vezContinuamente (para 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
  • Si el testbench contiene un reloj libre (por ejemplo, always #5 clk = ~clk;), la simulación se ejecuta indefinidamente a menos que llames a $finish; con solo un bloque initial, el simulador se detiene por sí mismo cuando no quedan más eventos, pero agregar $finish sigue siendo una buena práctica
challenge icon

Desafío

Agrega el bloque initial que falta que establece a en 0, y 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

Pruébalo tú mismo

module test;
  reg a;
  
  // TODO: Añade el bloque initial aquí
  // Establece a = 0
  // Espera #10
  // Establece a = 1
  // Añade $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