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 veamos 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 vuelve a ejecutarse.

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 inicial 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.

Inicial frente a siempre

 initialalways
Se ejecutaUna vezContinuamente (para siempre)
Se usa paraBancos de pruebas, 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 únicamente en bancos de pruebas
  • Si el banco de pruebas contiene un reloj de ejecución continua (por ejemplo, always #5 clk = ~clk;), la simulación se ejecuta para siempre a menos que llames a $finish; con solo un bloque initial, el simulador se detiene por sí mismo cuando no quedan eventos, pero añadir $finish sigue siendo una buena práctica
challenge icon

Desafío

Añade 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. Añade initial begin y end
  2. Establece a = 0
  3. Espera #10
  4. Establece a = 1
  5. Añade $finish para finalizar 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

Practica por tu cuenta: Compilador de Verilog online