Como usar um while-loop em VHDL
No tutorial anterior, aprendemos como usar um For-Loop para iterar em um intervalo de inteiros. Mas e se quisermos um controle mais detalhado do loop do que apenas um intervalo de inteiros fixo? Podemos usar um While-Loop para isso.
O While-Loop continuará a iterar sobre o código incluído, desde que a expressão que ele testa seja avaliada como
true
. Portanto, o While-Loop é adequado para situações em que você não sabe exatamente quantas iterações serão necessárias antecipadamente. Esta postagem do blog faz parte da série de tutoriais básicos de VHDL.
A sintaxe do While-Loop é:
while <condition> loop
end loop;
O
<condition>
é um booleano true
ou false
. Também pode ser uma expressão avaliada como true
ou false
. A condição é avaliada antes de cada iteração do loop, e o loop continuará somente se a condição for true
. Expressão de exemplo que é
true
se i
é menor que 10:i < 10
Expressão de exemplo que é
true
se i
não é 10:i /= 10
Expressão de exemplo que é
true
se i
é maior ou igual a 0 e menor que 2
8
=256:i >= 0 and i < 2**8;
Operadores relacionais:
= | igual |
/= | diferente |
menor que | |
<= | menor ou igual |
> | maior que |
>= | maior ou igual |
Operadores lógicos:
não um | true se um é falso |
a e b | true se um e b são verdadeiras |
a ou b | true se um ou b são verdadeiras |
a ne b | true se um ou b é falso |
a nem b | true se um e b são falsos |
a xor b | true se exatamente um de a ou b são verdadeiras |
a xnor b | true se um e b são iguais |
Exercício
Neste tutorial em vídeo, aprendemos a usar uma variável para controlar um While-Loop:
O código final que criamos neste tutorial:
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;
A saída para o console do simulador quando pressionamos o botão de execução no ModelSim:
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
Criamos uma variável inteira
i
e demos um valor inicial de 0. Usamos uma expressão no While-Loop que é verdadeira enquanto i
é menor que 10. Porque estávamos incrementando i
por 2 em cada iteração, o último número que foi impresso foi 8. Na próxima iteração, o
i < 10
avaliado para false
porque 10 não é menor que 10. Depois que o loop terminou, o programa atingiu o wait;
onde parou infinitamente. Retirada
- O loop while continuará enquanto a condição for
true
- A condição é avaliada antes de cada iteração do While-Loop
- Variáveis podem ser declaradas e usadas dentro de um processo
Faça o Basic VHDL Quiz – parte 1 »
ou
Vá 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