Menu
CoddyTech

Bloco Initial

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

Verilog tem 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 é executado apenas uma vez no início da simulação (tempo 0). Quando termina, não é executado novamente.

É usado principalmente em bancos de teste para:

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

S sintaxe

initial begin
  // As instruções são executadas 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 instantes: 0, 10 e 20.

Inicial vs. sempre

 initialalways
ExecutaUma vezContinuamente (para sempre)
Usado paraBancadas de teste, inicializaçãoHardware (flip-flops, contadores)
Sintetizável?Apenas para valores iniciais (FPGA)Sim (com lista de sensibilidade)

Observações importantes

  • Os blocos initial são principalmente para simulação. As ferramentas de síntese não conseguem transformar atrasos como #10 ou tarefas como $display em hardware
  • Use initial principalmente em bancadas de teste. Em um módulo de projeto, somente as ferramentas de síntese para FPGA o utilizam, e apenas para definir o valor inicial de um registrador ou de uma memória
  • Se a bancada de teste contiver um clock de execução contínua (por exemplo, always #5 clk = ~clk;), a simulação será executada para sempre, a menos que você chame $finish; com apenas um bloco initial, o simulador para sozinho quando não restam eventos, mas ainda é uma boa prática adicionar $finish
challenge icon

Desafio

Adicione o bloco initial que está faltando, que define a como 0 e, depois de 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

Experimente você mesmo

module test;
  reg a;
  
  // TODO: Adicione o bloco initial aqui
  // Defina a = 0
  // Aguarde #10
  // Defina a = 1
  // Adicione $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

Pratique por conta própria: Compilador de Verilog online