Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> VHDL

Comment utiliser les instructions conditionnelles en VHDL :If-Then-Elsif-Else

Dans le didacticiel précédent, nous avons utilisé une expression conditionnelle avec l'instruction Wait Until. L'expression garantissait que le processus n'était déclenché que lorsque les deux signaux de compteur étaient égaux. Mais que se passerait-il si nous voulions que le programme d'un processus entreprenne différentes actions en fonction de différentes entrées ?

Les instructions If-Then-Elsif-Else peuvent être utilisées pour créer des branches dans notre programme. Selon la valeur d'une variable ou le résultat d'une expression, le programme peut emprunter des chemins différents.

Cet article de blog fait partie de la série de didacticiels VHDL de base.

La syntaxe de base est :

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

Le elsif et else sont facultatifs, et elsif peut être utilisé plusieurs fois. Le <condition> peut être un booléen true ou false , ou il peut s'agir d'une expression évaluée à true ou false .

Exemple d'expression qui est true si MyCounter est inférieur à 10 :

MyCounter < 10

Opérateurs relationnels :

= égal
/= pas égal
< moins de
<= inférieur ou égal
> supérieur à
>= supérieur ou égal

Opérateurs logiques :

pas un vrai si un est faux
un et b vrai si un et b sont vrais
un ou b vrai si un ou b sont vrais
un et b vrai si un ou b est faux
un ni b vrai si un et b sont faux
un xor b true si exactement l'un des a ou b sont vrais
un xnor b vrai si un et b sont égaux

Exercice

Dans ce didacticiel vidéo, nous allons apprendre à utiliser les instructions If-Then-Elsif-Else en VHDL :

Le code final que nous avons créé dans ce tutoriel :

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 sortie vers la console du simulateur lorsque nous avons appuyé sur le bouton d'exécution dans 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
...

Analyse

Nous avons donné CountDown une valeur initiale de 10, et CountUp une valeur de 0. Le premier processus modifie les deux valeurs de compteur exactement au même moment, toutes les 10 ns. Lorsque cela se produit, le deuxième processus est déclenché car le programme attendra toujours au wait on CountUp, CountDown; ligne. Le programme attendra toujours là car les instructions If-Then-Elsif-Else et le rapport ne consomment aucun temps de simulation.

L'instruction If-Then-Elsif-Else forcera le programme à prendre l'une des trois branches que nous avons créées. Les deux premières branches couvrent les cas où les deux compteurs ont des valeurs différentes. Nous aurions pu supprimer le seul else , et utilisé elsif CountUp = CountDown then qui aurait eu le même résultat. Mais c'est une bonne pratique de conception de couvrir toutes les branches, et le else clause couvre tous les cas intentionnels et imprévus.

Comme nous pouvons le voir sur l'impression, le deuxième processus prend l'une des trois branches à chaque fois que les compteurs changent.

À emporter

Aller au tutoriel suivant »


VHDL

  1. Comment utilisons-nous le molybdène?
  2. Comment créer une liste de chaînes en VHDL
  3. Comment arrêter la simulation dans un testbench VHDL
  4. Comment créer un contrôleur PWM en VHDL
  5. Comment générer des nombres aléatoires en VHDL
  6. Comment utiliser une procédure dans un processus en VHDL
  7. Comment utiliser une fonction impure en VHDL
  8. Comment utiliser une fonction en VHDL
  9. Comment utiliser une meuleuse de coupe