Forever Loop
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 61 de 90.
O loop forever repete um bloco de código continuamente, forever. Ele nunca para por conta própria.
Um loop forever é executado repetidamente sem end. Ele é útil para gerar clocks e outros sinais contínuos em ambientes de teste.
Sintaxe:
forever begin
// Código que se repete para sempre
endExemplo simples
forever begin
$display("This prints forever");
endIsso imprimirá infinitamente e fará sua simulação travar. Sempre adicione um atraso ou uma condição de parada.
Gerando um Relógio (Uso Comum)
O uso mais comum de forever é gerar um relógio:
initial begin
clk = 0;
forever begin
#5 clk = ~clk; // Alterna a cada 5 unidades de tempo
end
endIsso cria um relógio que funciona durante toda a simulação.
Forever com Disable
Você pode interromper um loop forever usando uma instrução disable:
initial begin : clock_gen // Nome adicionado aqui
clk = 0;
forever begin
#5 clk = ~clk;
end
endinitial begin
#100;
disable clock_gen; // Agora isso funciona
endforever vs Outros loop
| loop | Para? | Quando usar |
|---|---|---|
for | Sim (após um número fixo de iterações) | Número conhecido de repeats |
while | Sim (quando a condição for falsa) | Condição de parada desconhecida |
repeat | Sim (após um número fixo de iterações) | Número conhecido de repeats |
forever | Não (nunca) | Sinais contínuos (clock) |
Regras importantes
| Regra | Explicação |
|---|---|
| Deve incluir um atraso | #10 ou @(posedge clk) |
| Sem atraso, a simulação trava | Loop infinito sem avanço de tempo |
Use com disable para interromper | Ou a simulação nunca termina |
| Melhor usado em testbenches | Não sintetizável |
Desafio
O que fazer:
Add o loop forever ausente para gerar um relógio que alterna a cada 10 time units.
Experimente você mesmo
module forever_challenge;
reg clk;
initial begin
clk = 0;
// TODO: Adicione um loop forever para alternar clk a cada 10 unidades de tempo
end
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