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 lógica condicional en VHDL: If-Then-Elsif-Else explicado

En el tutorial previo usamos una expresión condicional con la sentencia Wait Until para disparar un proceso solo cuando dos señales de contador coincidían. ¿Qué pasa si necesitamos que el programa tome acciones diferentes basadas en entradas variables?

El constructo If-Then-Elsif-Else nos permite ramificar nuestra lógica. Dependiendo del valor de una variable o resultado de una expresión, el programa puede seguir caminos distintos.

Este artículo es parte de la serie Tutoriales Básicos VHDL.

Sintaxis básica

La forma canónica es:

if <condition> then elsif <condition> then else end if;

Las cláusulas elsif y else son opcionales, y elsif puede aparecer múltiples veces. Un <condition> puede ser un literal booleano o una expresión que evalúe a true o false.

Ejemplo: MyCounter < 10 es true cuando MyCounter es menor que diez.

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

Abajo hay un ejemplo VHDL completo que demuestra el constructo If-Then-Elsif-Else en acción.

Código final:

entity T08_IfTb is end entity; architecture sim of T08_IfTb is signal CountUp : integer := 0; signal CountDown : integer := 10; begin process is begin CountUp <= CountUp + 1; CountDown <= CountDown - 1; wait for 10 ns; end process; process is begin if CountUp > CountDown then report "CountUp is larger"; elsif CountUp < CountDown then report "CountDown is larger"; else report "They are equal"; end if; wait on CountUp, CountDown; end process; end architecture; 

Salida de consola del simulador al ejecutar el modelo en ModelSim:

VSIM 2> run # ** Note: CountDown is larger # Time: 0 ns Iteration: 0 Instance: /t08_iftb # ** Note: CountDown is larger # Time: 0 ns Iteration: 1 Instance: /t08_iftb # ** Note: CountDown is larger # Time: 10 ns Iteration: 1 Instance: /t08_iftb # ** Note: CountDown is larger # Time: 20 ns Iteration: 1 Instance: /t08_iftb # ** Note: CountDown is larger # Time: 30 ns Iteration: 1 Instance: /t08_iftb # ** Note: They are equal # Time: 40 ns Iteration: 1 Instance: /t08_iftb # ** Note: Countup is larger # Time: 50 ns Iteration: 1 Instance: /t08_iftb # ** Note: Countup is larger # Time: 60 ns Iteration: 1 Instance: /t08_iftb ...

Análisis

Inicializamos CountDown a 10 y CountUp a 0. Ambos contadores se actualizan simultáneamente cada 10 ns en el primer proceso. El segundo proceso espera en estas señales, así que dispara cada vez que cambian. El bloque If-Then-Elsif-Else entonces selecciona una de tres ramas: CountUp > CountDown, CountUp < CountDown o CountUp = CountDown. Aunque un else explícito no es obligatorio, incluirlo es una best practice, asegurando que todos los casos edge se manejen.

El trace de consola confirma que el segundo proceso evalúa la condición tras cada actualización, imprimiendo el mensaje apropiado.

Dominando lógica condicional en VHDL: If-Then-Elsif-Else explicado

Conclusión

Continuar 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