Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> VHDL

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

Ir al siguiente tutorial »


VHDL

  1. ¿Cómo utilizamos el molibdeno?
  2. Cómo crear una lista de cadenas en VHDL
  3. Cómo detener la simulación en un banco de pruebas VHDL
  4. Cómo crear un controlador PWM en VHDL
  5. Cómo generar números aleatorios en VHDL
  6. Cómo usar un procedimiento en un proceso en VHDL
  7. Cómo usar una función impura en VHDL
  8. Cómo usar una función en VHDL
  9. Cómo crear una máquina de estados finitos en VHDL
  10. Cómo usar un procedimiento en VHDL
  11. Cómo usar una amoladora cortadora