Laço Infinito
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, para sempre. 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 Loops
| Loop | Para? | Quando usar |
|---|---|---|
for | Sim (após um número fixo de iterações) | Número conhecido de repetições |
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 repetições |
forever | Não (nunca) | Sinais contínuos (relógio) |
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:
Adicione o loop forever ausente para gerar um relógio que alterna a cada 10 unidades de tempo.
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 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óduloPratique por conta própria: Compilador de Verilog online