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 créer un processus avec une liste de sensibilité en VHDL

Vous devez toujours utiliser une liste de sensibilité pour déclencher des processus dans les modules de production. Les listes de sensibilité sont des paramètres d'un processus qui répertorient tous les signaux auxquels le processus est sensible. Si l'un des signaux change, le processus se réveillera et le code qu'il contient sera exécuté.

Nous avons déjà appris à utiliser le wait on et wait until instructions pour réveiller un processus lorsqu'un signal change. Cependant, pour être honnête, ce n'est pas ainsi que j'écris la plupart de mes processus.

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

Lors de l'écriture de code VHDL, le style d'écriture dépend du fait que le code est destiné ou non à être exécuté uniquement dans un simulateur. Si j'écris du code de simulation, comme nous l'avons fait dans cette série de tutoriels, je toujours utilisez wait déclarations pour contrôler les processus. Si j'écris du code dont j'ai l'intention de créer une implémentation physique, je jamais utilisez wait déclarations.

La syntaxe d'un processus avec une liste de sensibilité est :
process(<signal1>, <signal2>, ..) is
begin
    <main logic here>
end process;

Une bizarrerie importante avec la liste de sensibilité est que tous les signaux lus dans le processus doivent figurer sur la liste de sensibilité. Cependant, le simulateur ne vous informera pas si vous ne parvenez pas à ajouter un signal à la liste de sensibilité, car c'est légal dans le langage VHDL. Le problème est que si vous ne le faites pas, le code se comportera différemment lorsqu'il sera synthétisé et utilisé dans une implémentation physique.

En VHDL-2008, le mot-clé all est autorisé à utiliser au lieu de lister tous les signaux. Malheureusement, la plupart des logiciels de synthèse ne prennent pas en charge cette nouvelle révision du langage VHDL.

Exercice

Dans ce didacticiel vidéo, nous allons apprendre à créer un processus à l'aide d'une liste de sensibilité en VHDL :

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

entity T09_SensitivityListTb is
end entity;

architecture sim of T09_SensitivityListTb 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 triggered using Wait On
    process is
    begin

        if CountUp = CountDown then
            report "Process A: Jackpot!";
        end if;

        wait on CountUp, CountDown;

    end process;

    -- Equivalent process using a sensitivity list
    process(CountUp, CountDown) is
    begin

        if CountUp = CountDown then
            report "Process B: Jackpot!";
        end if;

    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: Process A: Jackpot
#    Time: 40 ns  Iteration: 1  Instance: /t09_sensitivitylisttb
# ** Note: Process B: Jackpot
#    Time: 40 ns  Iteration: 1  Instance: /t09_sensitivitylisttb

Analyse

Nous pouvons voir sur les impressions que les deux processus se comportent de la même manière. En effet, un processus avec une liste de sensibilité est par définition équivalent à un processus avec wait on à la fin du processus.

Les processus avec des listes de sensibilité sont normalement utilisés dans du code destiné à être synthétisé. Un tel code est communément appelé code de niveau de transfert de registre (RTL). C'est une convention, mais il y a de bonnes raisons à cela. Bien que certains wait on et wait until déclarations peuvent être synthétisées, il est difficile de savoir quel type de matériel cela va créer.

À emporter

Aller au tutoriel suivant »


VHDL

  1. Comment créer une liste de chaînes en VHDL
  2. Comment créer un banc d'essai piloté par Tcl pour un module de verrouillage de code VHDL
  3. Comment créer un contrôleur PWM en VHDL
  4. Comment créer un tampon circulaire FIFO en VHDL
  5. Comment créer un banc d'essai d'auto-vérification
  6. Comment créer une liste chaînée en VHDL
  7. Comment utiliser une procédure dans un processus en VHDL
  8. Comment utiliser une fonction impure en VHDL
  9. Comment utiliser une fonction en VHDL