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
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 | |
|---|---|---|
| Execução | Uma vez | Continuamente (para sempre) |
| Uso para | Testbenches, inicialização | Hardware (flip-flops, contadores) |
| Sintetizável? | Não (apenas simulação) | Sim (com lista de sensibilidade) |
Notas Importantes
- blocos
initialnão são sintetizáveis — eles não podem ser transformados em hardware - Use
initialapenas em testbenches - Sem
$finish, a simulação rodará para sempre (não há clock para pará-la)
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:
- Adicione
initial begineend - Defina
a = 0 - Aguarde
#10 - Defina
a = 1 - 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
endSem o $finish, a simulação executa para sempre.
initial | always | |
|---|---|---|
| Executa | Uma vez | Continuamente |
| Uso para | Testbenches | Hardware |
| Sintetizável? | Não | Sim |
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
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