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 executa apenas uma vez no início da simulação (tempo 0). Quando termina, não é executado 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 inicial 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.
Inicial vs. Sempre
initial | always | |
|---|---|---|
| Executa | Uma vez | Continuamente (para sempre) |
| Usado para | Testbenches, inicialização | Hardware (flip-flops, contadores) |
| Sintetizável? | Não (apenas simulação) | Sim (com lista de sensibilidade) |
Notas importantes
initialblocks are not synthesizable. Eles não podem ser transformados em hardware- Use
initialapenas em testbenches - Se o testbench 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 blocoinitial, o simulador para por si só 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 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. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
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ões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um Módulo9Blocos Procedurais
Bloco AlwaysBloco InitialLista de SensibilidadeAtribuição BloqueanteAtribuição Não BloqueanteRevisão - Always vs InitialPratique por conta própria: Compilador de Verilog online