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

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

Operadores relacionales

=igual
/=no igual
<menor que
<=menor o igual que
>mayor que
>=mayor o igual que

Operadores lógicos

not atrue si a es false
a and btrue si a y b son true
a or btrue si a o b son true
a nand btrue si a o b es false
a nor btrue si a y b son false
a xor btrue si exactamente uno de a o b son true
a xnor btrue 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.

Dominando bucles While en VHDL: Control dinámico de iteración

Conclusiones clave

Realiza el Basic VHDL Quiz – part 1 o continúa al siguiente tutorial.

VHDL

  1. Dominando las Técnicas de Afiladora de Herramientas: Guía Práctica
  2. Cómo el molibdeno moldea la industria moderna: usos, beneficios y dinámica de suministro
  3. Creación de listas de cadenas en VHDL: Buenas prácticas y ejemplo
  4. Finalizar elegantemente una simulación de testbench VHDL
  5. Implementación de un controlador PWM en VHDL: Diseño, simulación y demo en FPGA
  6. Generación de números aleatorios en VHDL: De uniforme a OSVVM
  7. Aprovechando procedimientos en-proceso para diseños FSM más limpios en VHDL
  8. Uso de funciones impuras en VHDL: Mejorando legibilidad y mantenibilidad de FSM
  9. Dominando funciones VHDL: Guía práctica para diseño eficiente
  10. Diseño de máquina de estados finitos en VHDL: Ejemplo práctico de semáforo
  11. Uso de procedimientos en VHDL: Simplifique su diseño con código reutilizable