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 sentencias condicionales en VHDL:If-Then-Elsif-Else

En el tutorial anterior, usamos una expresión condicional con la instrucción Esperar hasta. La expresión aseguró que el proceso solo se desencadenara cuando las dos señales de contador fueran iguales. Pero, ¿y si quisiéramos que el programa en un proceso tomara diferentes acciones en función de diferentes entradas?

Las declaraciones If-Then-Elsif-Else se pueden usar para crear ramas en nuestro programa. Según el valor de una variable o el resultado de una expresión, el programa puede tomar diferentes caminos.

Esta publicación de blog es parte de la serie Tutoriales básicos de VHDL.

La sintaxis básica es:

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

El elsif y else son opcionales, y elsif se puede usar varias veces. Los <condition> puede ser un true booleano o false , o puede ser una expresión que evalúe a true o false .

Expresión de ejemplo que es true si MyCounter es menor que 10:

MyCounter < 10

Operadores relacionales:

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

Operadores lógicos:

no un verdadero si a es falso
a y b verdadero si a y b son ciertas
a o b verdadero si a o b son ciertas
a y b verdadero si a o b es falso
a ni b verdadero si a y b son falsos
a xor b verdadero si exactamente uno de a o b son ciertas
a xnor b verdadero si a y b son iguales

Ejercicio

En este video tutorial aprenderemos a usar sentencias If-Then-Elsif-Else en VHDL:

El código final que creamos en este tutorial:

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;

La salida a la consola del simulador cuando presionamos el botón ejecutar 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

Dimos CountDown un valor inicial de 10 y CountUp un valor de 0. El primer proceso cambia ambos valores de contador al mismo tiempo, cada 10 ns. Cuando esto sucede, se activa el segundo proceso porque el programa siempre estará esperando en el wait on CountUp, CountDown; línea. El programa siempre estará esperando allí porque If-Then-Elsif-Else y las declaraciones de informe consumen cero tiempo de simulación.

La declaración If-Then-Elsif-Else hará que el programa tome una de las tres ramas que creamos. Las dos primeras ramas cubren los casos en los que los dos contadores tienen valores diferentes. Podríamos haber dejado caer el sencillo else y usó elsif CountUp = CountDown then que habría tenido el mismo resultado. Pero es una buena práctica de diseño cubrir todas las ramas, y el else cláusula cubre todos los casos intencionales e imprevistos.

Como podemos ver en la impresión, el segundo proceso toma una de las tres ramas cada vez que cambian los contadores.

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