Como usar um For-Loop em VHDL
No tutorial anterior aprendemos a criar um loop infinito usando o
loop
declaração. Também aprendemos como sair de um loop usando o exit
declaração. Mas e se quisermos que o loop seja repetido um certo número de vezes? O For-Loop é a maneira mais fácil de fazer isso. O For-Loop permite iterar em um intervalo fixo de inteiros ou itens enumerados. O item pertencente à iteração atual estará disponível dentro do loop por meio de uma constante declarada implicitamente.
Esta postagem do blog faz parte da série de tutoriais básicos de VHDL.
A sintaxe do For-Loop é:
for <c> in <r> loop
end loop;
O
<c>
é um nome arbitrário para uma constante que estará disponível dentro do loop. O <r>
é um intervalo de inteiros ou valores enumerados sobre os quais o loop irá iterar. Um intervalo de inteiros pode ser incrementado ou decrementado. O código VHDL para um intervalo de incremento incluindo todos os 10 números de 0 a 9:
0 to 9
O código VHDL para um intervalo decrescente incluindo todos os 10 números de 9 a 0:
9 downto 0
O código VHDL para um intervalo incluindo apenas o número 0:
0 to 0
O código VHDL para um intervalo vazio que não possui nenhum número:
0 to -1
Exercício
O código final que criamos neste tutorial:
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;
A saída para o console do simulador quando pressionamos o botão de execução no 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
Não totalmente inesperadamente, nosso For-Loop iterou dez vezes antes de terminar. O valor de
i
é impresso no console do simulador dez vezes no tempo de simulação 0. Não há instrução de espera dentro do loop e, portanto, o loop leva zero tempo para ser concluído. Finalmente, o programa entra em uma pausa infinita no wait;
. Aprendemos como converter um inteiro em uma string usando
integer'image()
, e usamos o &
caractere para unir as duas strings. Retirada
- O For-Loop pode iterar em um intervalo de números inteiros incrementado ou decrementado
- Um intervalo de incremento é indicado por
to
, e um intervalo decrescente pordownto
- Um número inteiro pode ser convertido em uma string usando
integer'image()
- Duas strings podem ser unidas usando o caractere de concatenação de strings
&
Ir para o próximo tutorial »
VHDL
- Como usamos o molibdênio?
- Como criar uma lista de strings em VHDL
- Como parar a simulação em um testbench VHDL
- Como criar um controlador PWM em VHDL
- Como gerar números aleatórios em VHDL
- Como usar um procedimento em um processo em VHDL
- Como usar uma função impura em VHDL
- Como usar uma função em VHDL
- Como criar uma máquina de estado finito em VHDL
- Como usar um moedor de corte