Laço While
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 59 de 90.
O laço while repete um bloco de código enquanto uma condição for verdadeira. Ao contrário do laço for, ele não possui um contador embutido — você mesmo deve atualizar a variável do laço.
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.
While vs For Loop
| Loop For | Loop While | |
|---|---|---|
| Contador | Integrado | Você gerencia |
| Quando usar | Número conhecido de iterações | Desconhecido quando o loop vai parar |
| Sintaxe | for (i=0; i<5; i=i+1) | while (i < 5) |
While Loop 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, ocorre um `loop` infinito |
| Atualize a variável do `loop` dentro | Ou o `loop` nunca termina |
A variável do `loop` deve ser integer ou reg | Não pode ser wire |
Use begin/end para múltiplas instruções | Necessário para mais de uma linha |
Desafio
O que fazer:
Adicione o loop while ausente para imprimir números de 0 a 2.
Experimente você mesmo
module while_challenge;
integer i;
initial begin
i = 0;
$display("Printing 0 to 2:");
// TODO: Adicione o loop while
// Loop enquanto i < 3
// Dentro, imprima i
// Incremente 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