Dominando bucles For en VHDL: Guía práctica
En el tutorial previo exploramos cómo crear un bucle infinito usando la sentencia loop y salir de él con exit. ¿Qué pasa si necesitamos que el bucle corra un número específico de veces? El For-Loop es la solución más directa.
Un For-Loop itera sobre un rango fijo de enteros o items enumerados. El valor de iteración actual está automáticamente disponible dentro del bucle a través de una constante declarada implícitamente.
Este artículo es parte de la serie Tutoriales Básicos VHDL.
Sintaxis
for <constant> in <range> loop -- loop body end loop;
Aquí, <constant> es un nombre definido por usuario para el contador del bucle, y <range> puede ser un rango de enteros (ascendente o descendente) o un conjunto de valores enumerados.
Rangos de enteros
- Rango ascendente:
0 to 9– itera 0,1,2,…,9. - Rango descendente:
9 downto 0– itera 9,8,7,…,0. - Valor único:
0 to 0– itera solo 0. - Rango vacío:
0 to -1– cuerpo del bucle nunca se ejecuta.
Código de ejemplo
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;
Salida de simulación (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álisis
El For-Loop ejecutó exactamente diez iteraciones, imprimiendo el valor del contador en tiempo de simulación 0. Como no hay wait dentro del bucle, el bucle completo completa instantáneamente. El wait; final coloca el proceso en pausa infinita, común en testbenches.
También demostramos dos operaciones de string esenciales:
integer'image(i)– convierte un entero a string.&– concatena dos strings.
Conclusiones clave
- Los For-Loops pueden iterar sobre rangos tanto ascendentes (
to) como descendentes (downto). - Valores enteros se convierten a strings con
integer'image(). - Concatenación de strings usa operador
&.
Proceda al siguiente tutorial para conceptos VHDL más profundos.
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