Dominando Loops For em VHDL: Um Guia Prático
No tutorial anterior, exploramos como criar um loop infinito usando a instrução loop e sair dele com exit. E se precisarmos que o loop execute um número específico de vezes? O Loop For é a solução mais direta.
Um Loop For itera sobre um intervalo fixo de inteiros ou itens enumerados. O valor da iteração atual fica automaticamente disponível dentro do loop através de uma constante declarada implicitamente.
Este artigo faz parte da série Tutoriais Básicos de VHDL.
Sintaxe
for <constante> in <intervalo> loop -- corpo do loop end loop;
Aqui, <constante> é um nome definido pelo usuário para o contador do loop, e <intervalo> pode ser um intervalo de inteiros (crescente ou decrescente) ou um conjunto de valores enumerados.
Intervalos de Inteiros
- Intervalo crescente:
0 to 9– itera 0,1,2,…,9. - Intervalo decrescente:
9 downto 0– itera 9,8,7,…,0. - Valor único:
0 to 0– itera apenas 0. - Intervalo vazio:
0 to -1– corpo do loop nunca executa.
Código de Exemplo
entity T04_ForLoopTb is end entity; architecture sim of T04_ForLoopTb is begin process is begin for i in 1 to 10 loop report "i=" & integer'image(i); end loop; wait; end process; end architecture;
Saída da Simulação (ModelSim)
VSIM 2> run # ** Note: i=1 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=2 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=3 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=4 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=5 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=6 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=7 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=8 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=9 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=10 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
Análise
O Loop For executou exatamente dez iterações, imprimindo o valor do contador no tempo de simulação 0. Como não há wait dentro do loop, o loop inteiro completa instantaneamente. O wait; final coloca o processo em pausa infinita, o que é comum em testbenches.
Também demonstramos duas operações essenciais de string:
integer'image(i)– converte um inteiro para string.&– concatena duas strings.
Principais Conclusões
- Loops For podem iterar sobre intervalos crescentes (
to) e decrescentes (downto). - Valores inteiros são convertidos para strings com
integer'image(). - Concatenação de strings usa o operador
&.
Prossiga para o próximo tutorial para conceitos mais profundos de VHDL.
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