Dominando bucles While en VHDL: Control dinámico de iteración
Basándonos en nuestra exploración previa de bucles for, este tutorial profundiza en el bucle while —un constructo potente que permite controlar iteración basada en condiciones dinámicas en lugar de un rango predeterminado.
El bucle while ejecuta su cuerpo repetidamente mientras la condición especificada permanezca true. Esto lo hace ideal para escenarios donde el número de iteraciones depende de datos en runtime o lógica compleja.
Este post es parte de la serie Tutoriales Básicos VHDL.
Sintaxis
while <condition> loop -- loop body end loop;
El <condition> debe evaluar a valor booleano. Puede ser una comparación simple o una expresión más elaborada. La condición se verifica antes de cada pasada, asegurando que el bucle solo continúe mientras permanezca true.
Ejemplos de condiciones
i < 10– true mientrasies menor que 10.i /= 10– true mientrasino es igual a 10.i >= 0 and i < 2**8– true para valores de 0 hasta 255.
Operadores relacionales
| = | igual |
| /= | no igual |
| < | menor que |
| <= | menor o igual que |
| > | mayor que |
| >= | mayor o igual que |
Operadores lógicos
| not a | true si a es false |
| a and b | true si a y b son true |
| a or b | true si a o b son true |
| a nand b | true si a o b es false |
| a nor b | true si a y b son false |
| a xor b | true si exactamente uno de a o b son true |
| a xnor b | true si a y b son iguales |
Ejercicio
Mira el tutorial de video abajo para ver cómo una variable puede impulsar un bucle while en la práctica:
Código de ejemplo
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;
Salida del simulador
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
Inicializamos i a 0 y usamos i < 10 como guarda del bucle. Como el bucle incrementa i en 2 cada ciclo, el último valor impreso es 8. En la siguiente pasada, la condición evalúa a false (10 no es menor que 10) y el bucle sale. El subsecuente wait; suspende el proceso indefinidamente, patrón común en testbenches.

Conclusiones clave
- El bucle
whilecorre mientras su condición permanecetrue. - La condición se evalúa antes de cada iteración.
- Variables pueden declararse dentro de un proceso y actualizarse dentro del bucle.
Realiza el Basic VHDL Quiz – part 1 o continúa al siguiente tutorial.
VHDL
- Dominando las Técnicas de Afiladora de Herramientas: Guía Práctica
- Cómo el molibdeno moldea la industria moderna: usos, beneficios y dinámica de suministro
- Creación de listas de cadenas en VHDL: Buenas prácticas y ejemplo
- Finalizar elegantemente una simulación de testbench VHDL
- Implementación de un controlador PWM en VHDL: Diseño, simulación y demo en FPGA
- Generación de números aleatorios en VHDL: De uniforme a OSVVM
- Aprovechando procedimientos en-proceso para diseños FSM más limpios en VHDL
- Uso de funciones impuras en VHDL: Mejorando legibilidad y mantenibilidad de FSM
- Dominando funciones VHDL: Guía práctica para diseño eficiente
- Diseño de máquina de estados finitos en VHDL: Ejemplo práctico de semáforo
- Uso de procedimientos en VHDL: Simplifique su diseño con código reutilizable