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