Menu
Coddy logo textTech

Initial Block

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

Verilog tiene dos bloques procedimentales: initial (runs una vez) y always (runs continuamente). Ahora veamos el bloque initial.

¿Qué es un bloque Initial?

El bloque initial runs solo una vez al principio de la simulation (time 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 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 frente a siempre

 initialalways
RunsOnceContinuamente (para siempre)
Usar 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

Add the missing initial block that sets a to 0, después de 10 unidades de tiempo establece a en 1.

Qué hacer:

  1. Add initial begin y end
  2. Establece a = 0
  3. Wait #10
  4. Establece a = 1
  5. Añade $finish para finalizar la simulation

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