Initial Block
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 47 de 90.
Verilog tem dois blocos procedurais: initial (é executado uma vez) e always (é executado 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 (time 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 Initial Block para Sinais de Test
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) |
| 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
Add o initial block ausente que define a como 0 e, depois de 10 unidades de time, define a como 1.
O que fazer:
- Add
initial begineend - Defina
a = 0 - Wait
#10 - Defina
a = 1 - Add $finish para encerrar a simulation
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 projeto4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPratique por conta própria: Compilador de Verilog online