Cómo usar un For-Loop en VHDL
En el tutorial anterior aprendimos a crear un bucle infinito usando el loop
declaración. También aprendimos cómo salir de un bucle usando el exit
declaración. Pero, ¿y si queremos que el ciclo itere un cierto número de veces? For-Loop es la forma más fácil de lograr esto.
For-Loop le permite iterar sobre un rango fijo de enteros o elementos enumerados. El elemento perteneciente a la iteración actual estará disponible dentro del ciclo a través de una constante declarada implícitamente.
Esta publicación de blog es parte de la serie Tutoriales básicos de VHDL.
La sintaxis de For-Loop es:
for <c> in <r> loop
end loop;
El <c>
es un nombre arbitrario para una constante que estará disponible dentro del ciclo. El <r>
es un rango de números enteros o valores enumerados sobre los cuales iterará el bucle. Un rango de enteros puede ser creciente o decreciente.
El código VHDL para un rango incremental que incluye los 10 números del 0 al 9:
0 to 9
El código VHDL para un rango decreciente que incluye los 10 números del 9 al 0:
9 downto 0
El código VHDL para un rango que incluye solo el número 0:
0 to 0
El código VHDL para un rango vacío que no tiene ningún número:
0 to -1
Ejercicio
El código final que creamos en este tutorial:
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;
La salida a la consola del simulador cuando presionamos el botón ejecutar en 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
No del todo inesperado, nuestro For-Loop iteró diez veces antes de terminar. El valor de i
se imprime en la consola del simulador diez veces en el tiempo de simulación 0. No hay una declaración de espera dentro del ciclo y, por lo tanto, el ciclo tarda cero en completarse. Finalmente, el programa entra en una pausa infinita en el wait;
.
Aprendimos cómo convertir un número entero en una cadena usando integer'image()
, y usamos el &
carácter para unir las dos cadenas.
Para llevar
- For-Loop puede iterar sobre un rango de enteros crecientes o decrecientes
- Un rango incremental se denota por
to
, y un rango decreciente pordownto
- Un entero se puede convertir en una cadena usando
integer'image()
- Se pueden unir dos cadenas usando el carácter de concatenación de cadenas
&
Ir 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