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 cobrir o bloco initial.
O que é um Bloco Initial?
O bloco initial é executado 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
// As instruções executam uma vez, em sequência
endExemplo Básico
initial begin
$display("Simulation started");
$display("This runs once");
$finish;
endSaída:
Simulation started
This runs onceUsando o Bloco Initial para Sinais de Teste
initial begin
a = 0;
#10 a = 1;
#10 a = 0;
#10 $finish;
endIsso altera a nos tempos: 0, 10 e 20.
Initial vs Always
initial | always | |
|---|---|---|
| Runs | Once | Continuamente (para sempre) |
| Usado para | Testbenches, inicialização | Hardware (flip-flops, contadores) |
| Sintetizável? | Não (apenas simulation) | Sim (com lista de sensibilidade) |
Observações Importantes
- Blocos
initialnão são sintetizáveis — eles não podem ser convertidos em hardware - Use
initialapenas em testbenches - Se o testbench contiver um clock de execução livre (ex:
always #5 clk = ~clk;), a simulação será executada indefinidamente, a menos que você chame$finish; com apenas um blocoinitial, o simulador para sozinho quando não restam eventos, mas adicionar$finishainda é uma boa prática
Desafio
Adicione o bloco initial ausente que define a como 0, e depois de 10 unidades de tempo define a como 1.
O que fazer:
- Adicione
initial begineend - Defina
a = 0 - Aguarde
#10 - Defina
a = 1 - 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 terminar a simulação
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo9Blocos Procedurais
Bloco AlwaysBloco InitialLista de SensibilidadeAtribuição BloqueanteAtribuição Não BloqueanteRecapitulação - Always vs Initial