Cómo usar un ciclo while en VHDL
En el tutorial anterior, aprendimos cómo usar un For-Loop para iterar sobre un rango de enteros. Pero, ¿qué pasa si queremos un control más detallado del ciclo que solo un rango de enteros fijo? Podemos usar un ciclo while para esto.
El ciclo while continuará iterando sobre el código adjunto siempre que la expresión que prueba se evalúe como true
. Por lo tanto, el ciclo while es adecuado para situaciones en las que no se sabe exactamente cuántas iteraciones se necesitarán por adelantado.
Esta publicación de blog es parte de la serie Tutoriales básicos de VHDL.
La sintaxis del ciclo while es:
while <condition> loop
end loop;
El <condition>
es un true
booleano o false
. También puede ser una expresión que evalúe a true
o false
. La condición se evalúa antes de cada iteración del ciclo, y el ciclo continuará solo si la condición es true
.
Expresión de ejemplo que es true
si i
es menor que 10:
i < 10
Expresión de ejemplo que es true
si i
no es 10:
i /= 10
Expresión de ejemplo que es true
si i
es mayor o igual a 0 y menor a 2
8
=256:
i >= 0 and i < 2**8;
Operadores relacionales:
= | igual |
/= | no igual |
< | menor que |
<= | menor que o igual |
mayor que | |
>= | mayor que o igual |
Operadores lógicos:
no un | verdadero si a es falso |
a y b | verdadero si a y b son ciertas |
a o b | verdadero si a o b son ciertas |
a y b | verdadero si a o b es falso |
a ni b | verdadero si a y b son falsos |
a xor b | verdadero si exactamente uno de a o b son ciertas |
a xnor b | verdadero si a y b son iguales |
Ejercicio
En este video tutorial, aprendemos a usar una variable para controlar un ciclo while:
El código final que creamos en este 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;
La salida a la consola del simulador cuando presionamos el botón ejecutar en 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álisis
Creamos una variable entera i
y le dimos un valor inicial de 0. Usamos una expresión en el ciclo while que es verdadera siempre que i
es menor que 10. Porque estábamos incrementando i
por 2 en cada iteración, el último número que se imprimió fue 8.
En la siguiente iteración, el i < 10
evaluado a false
porque 10 no es menor que 10. Después de que terminó el ciclo, el programa presionó el wait;
donde se detuvo infinitamente.
Para llevar
- El ciclo while continuará mientras la condición sea
true
- La condición se evalúa antes de cada iteración del ciclo while
- Las variables se pueden declarar y utilizar dentro de un proceso
Realice el cuestionario básico de VHDL, parte 1 »
o
Pase al siguiente tutorial »
VHDL
- ¿Cómo utilizamos el molibdeno?
- Cómo crear una lista de cadenas en VHDL
- Cómo detener la simulación en un banco de pruebas VHDL
- Cómo crear un controlador PWM en VHDL
- Cómo generar números aleatorios en VHDL
- Cómo usar un procedimiento en un proceso en VHDL
- Cómo usar una función impura en VHDL
- Cómo usar una función en VHDL
- Cómo crear una máquina de estados finitos en VHDL
- Cómo usar un procedimiento en VHDL
- Cómo usar una amoladora cortadora