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
- Un processus avec une liste de sensibilité est équivalent à un processus avec
wait on
à la fin - Tous les signaux lus dans un processus doivent figurer sur la liste de sensibilité
- Utilisez
wait
déclarations dans le code de simulation et listes de sensibilité dans le code RTL
Aller au tutoriel suivant »
VHDL
- Comment créer une liste de chaînes en VHDL
- Comment créer un banc d'essai piloté par Tcl pour un module de verrouillage de code VHDL
- Comment créer un contrôleur PWM en VHDL
- Comment créer un tampon circulaire FIFO en VHDL
- Comment créer un banc d'essai d'auto-vérification
- Comment créer une liste chaînée en VHDL
- Comment utiliser une procédure dans un processus en VHDL
- Comment utiliser une fonction impure en VHDL
- Comment utiliser une fonction en VHDL