Menu
Coddy logo textTech

Bloco Initial

Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 47 de 90.

O Verilog possui dois blocos procedurais: initial (executa uma vez) e always (executa continuamente). Agora vamos abordar o bloco initial.

O que é um Bloco Initial?

O bloco initial executa apenas uma vez no início da simulação (tempo 0). Quando ele termina, não executa novamente.

É usado principalmente em testbenches para:

  • Definir valores iniciais
  • Gerar sinais de teste
  • Exibir mensagens
  • Iniciar a simulação

Sintaxe

initial begin
  // Instruções executam uma vez, em sequência
end

Exemplo Básico

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

Saída:

Simulation started
This runs once

Usando o Bloco Initial para Sinais de Teste

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

Isso altera a nos tempos: 0, 10 e 20.

Initial vs Always

 initialalways
ExecuçãoUma vezContinuamente (para sempre)
Uso paraTestbenches, inicializaçãoHardware (flip-flops, contadores)
Sintetizável?Não (apenas simulação)Sim (com lista de sensibilidade)

Notas Importantes

  • blocos initial não são sintetizáveis — eles não podem ser transformados em hardware
  • Use initial apenas em testbenches
  • Sem $finish, a simulação rodará para sempre (não há clock para pará-la)
challenge icon

Desafio

Adicione o bloco initial ausente que define a como 0, então após 10 unidades de tempo define a como 1.

O que fazer:

  1. Adicione initial begin e end
  2. Defina a = 0
  3. Aguarde #10
  4. Defina a = 1
  5. Adicione $finish para encerrar a simulação

Folha de consulta

O bloco initial executa uma única vez no tempo de simulação 0. Usado apenas em testbenches (não sintetizável).

initial begin
  a = 0;       // definido no tempo 0
  #10 a = 1;   // definido no tempo 10
  #10 a = 0;   // definido no tempo 20
  $finish;     // encerra a simulação
end

Sem o $finish, a simulação executa para sempre.

initialalways
ExecutaUma vezContinuamente
Uso paraTestbenchesHardware
Sintetizável?NãoSim

Experimente você mesmo

module test;
  reg a;
  
  // TODO: Adicione o bloco initial aqui
  // Definir a = 0
  // Aguardar #10
  // Definir a = 1
  // Adicionar $finish; para encerrar a simulação
  
endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos