Laço While
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 59 de 90.
O loop while repete um bloco de código enquanto uma condição for verdadeira. Ao contrário do loop for, ele não possui um contador integrado — você deve atualizar a variável do loop por conta própria.
Um laço while verifica uma condição antes de cada iteração. Se a condição for verdadeira, o laço é executado. Se for falsa, o laço para.
Sintaxe:
while (condition) begin
// Código para repetir
endExemplo Simples
integer i = 0;
while (i < 5) begin
$display("i = %d", i);
i = i + 1;
endSaída:
i = 0
i = 1
i = 2
i = 3
i = 4O loop é executado enquanto i < 5.
Loop While vs For
| Loop For | Loop While | |
|---|---|---|
| Contador | Integrado | Você o gerencia |
| Quando usar | Número conhecido de iterações | Desconhecido quando o loop irá parar |
| Sintaxe | for (i=0; i<5; i=i+1) | while (i < 5) |
Loop While em Testbenches
Loops while são úteis quando você não sabe exatamente de quantas iterações precisa:
integer i = 0;
while (i < 16) begin
$display("Testing value %d", i);
i = i + 1;
endEncontrando um Valor Específico
integer i = 0;
reg [7:0] data;
while (data[i] != 1) begin
i = i + 1;
end
$display("First 1 found at position %d", i);Regras Importantes
| Regra | Explicação |
|---|---|
| A condição deve se tornar falsa | Caso contrário, haverá um loop infinito |
| Atualize a variável do loop internamente | Ou o loop nunca termina |
A variável do loop deve ser integer | Não pode ser reg |
Use begin/end para múltiplas instruções | Necessário para mais de uma linha |
Desafio
O que fazer:
Adicione o loop while que falta para imprimir os números de 0 a 2.
Folha de consulta
O loop while repete um bloco de código enquanto uma condição for verdadeira. Você deve atualizar a variável do loop manualmente.
integer i = 0;
while (i < 5) begin
$display("i = %d", i);
i = i + 1;
endRegras principais:
- A variável do loop deve ser
integer(nãoreg) - Sempre atualize a variável do loop dentro do loop para evitar loops infinitos
- Use
begin/endpara múltiplas instruções
While vs For: Use for quando o número de iterações for conhecido; use while quando a condição de parada for dinâmica (ex: procurar por um valor).
// Encontrando o primeiro bit definido
while (data[i] != 1) begin
i = i + 1;
endExperimente você mesmo
module while_challenge;
integer i;
initial begin
i = 0;
$display("Printing 0 to 2:");
// TODO: Adicionar loop while
// Loop enquanto i < 3
// Dentro, imprima i
// Incrementar i em 1
$finish;
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 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ódulo