Dominando Loops While em VHDL: Controle Dinâmico de Iteração
Com base em nossa exploração anterior de loops for, este tutorial mergulha no loop while — um construto poderoso que permite controlar iteração baseada em condições dinâmicas em vez de um intervalo predeterminado.
O loop while executa seu corpo repetidamente enquanto a condição especificada permanecer true. Isso o torna ideal para cenários onde o número de iterações depende de dados de tempo de execução ou lógica complexa.
Este post faz parte da série Tutoriais Básicos de VHDL.
Sintaxe
while <condição> loop -- corpo do loop end loop;
A <condição> deve avaliar para um valor booleano. Pode ser uma comparação simples ou uma expressão mais elaborada. A condição é verificada antes de cada passagem, garantindo que o loop só continue enquanto permanecer true.
Exemplos de Condições
i < 10– verdadeiro enquantoifor menor que 10.i /= 10– verdadeiro enquantoinão for igual a 10.i >= 0 and i < 2**8– verdadeiro para valores de 0 até 255.
Operadores Relacionais
| = | igual |
| /= | diferente |
| < | menor que |
| <= | menor ou igual |
| > | maior que |
| >= | maior ou igual |
Operadores Lógicos
| not a | verdadeiro se a for falso |
| a and b | verdadeiro se a e b forem verdadeiros |
| a or b | verdadeiro se a ou b forem verdadeiros |
| a nand b | verdadeiro se a ou b for falso |
| a nor b | verdadeiro se a e b forem falsos |
| a xor b | verdadeiro se exatamente um de a ou b for verdadeiro |
| a xnor b | verdadeiro se a e b forem iguais |
Exercício
Assista ao tutorial em vídeo abaixo para ver como uma variável pode controlar um loop while na prática:
Código de Exemplo
entity T05_WhileLoopTb is end entity; architecture sim of T05_WhileLoopTb is begin process is variable i : integer := 0; begin while i < 10 loop report "i=" & integer'image(i); i := i + 2; end loop; wait; end process; end architecture;
Saída do Simulador
VSIM 2> run # ** Note: i=0 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=2 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=4 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=6 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=8 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb
Análise
Inicializamos i com 0 e usamos i < 10 como guarda do loop. Como o loop incrementa i em 2 a cada ciclo, o último valor impresso é 8. Na próxima passagem, a condição avalia como falsa (10 não é menor que 10), e o loop sai. O subsequente wait; suspende o processo indefinidamente, um padrão comum para testbenches.

Principais Conclusões
- O loop
whileexecuta enquanto sua condição permanecertrue. - A condição é avaliada antes de cada iteração.
- Variáveis podem ser declaradas dentro de um processo e atualizadas dentro do loop.
Faça o Quiz Básico de VHDL – parte 1 ou continue para o próximo tutorial.
VHDL
- Como o Molibdênio Molda a Indústria Moderna: Usos, Benefícios e Dinâmica de Fornecimento
- Criando Listas de Strings em VHDL: Boas Práticas e Exemplo
- Finalizando Graciosamente uma Simulação de Testbench VHDL
- Implementando um Controlador PWM em VHDL: Projeto, Simulação e Demo em FPGA
- Gerando Números Aleatórios em VHDL: De Uniforme a OSVVM
- Aproveitando Procedimentos In-Process para Design de FSM em VHDL Mais Limpo
- Usando Funções Impuras em VHDL: Melhorando Legibilidade e Manutenibilidade de FSM
- Dominando Funções VHDL: Guia Prático para Design Eficiente
- Projetando uma Máquina de Estados Finitos em VHDL: Exemplo Prático de Semáforo
- Dominando Técnicas de Retificadora de Ferramentas e Cortadores: Guia Prático