Utilisation des listes de sensibilité dans les processus VHDL pour une conception RTL fiable
En VHDL de niveau production, les processus sont généralement pilotés par une liste de sensibilité plutôt que par des instructions Bien que Lorsque j'écris du code pour un simulateur, je m'appuie toujours sur des instructions La syntaxe d'un processus avec une liste de sensibilité est : Notez que chaque signal lu à l'intérieur du processus doit apparaître dans la liste. Le compilateur VHDL ne signale pas un signal manquant, mais l'omettre changera le comportement après synthèse. VHDL‑2008 a introduit le mot-clé Dans la vidéo tutorielle accompagnante, nous parcourons la construction d'un processus qui utilise une liste de sensibilité. L'extrait VHDL final produit dans cette leçon est : L'exécution de ce testbench dans ModelSim donne : La sortie console démontre que le processus En pratique, les listes de sensibilité sont le standard de facto pour le RTL synthétisable. Elles offrent une intention claire, permettent aux outils de synthèse de générer du matériel correct, et évitent les ambiguïtés que les instructions Passez au tutoriel suivant ici.wait. Une liste de sensibilité énumère chaque signal qui doit réveiller le processus lorsqu'il change.wait on et wait until soient pratiques pour la simulation, ils sont rarement utilisés dans du RTL synthétisable. En synthèse, une instruction wait est souvent ignorée, ce qui mène à un matériel imprévisible. À l'inverse, une liste de sensibilité correspond directement à un bloc combinatoire ou synchrone sur front d'horloge que les outils de synthèse peuvent implémenter de manière fiable.Tutoriels VHDL de base – Sensibilité des processus
wait pour contrôler le timing. Pour tout design qui sera synthétisé en silicium, j'évite totalement wait et j'utilise des listes de sensibilité. process( signal1, signal2, ... ) is begin -- logique principale ici end process;
all pour inclure automatiquement tous les signaux lus, par exemple process(all). Cependant, la plupart des synthétiseurs commerciaux ne supportent pas encore cette fonctionnalité.Exercice
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; -- Processus déclenché avec Wait On process is begin if CountUp = CountDown then report "Process A: Jackpot!"; end if; wait on CountUp, CountDown; end process; -- Processus équivalent utilisant une liste de sensibilité process(CountUp, CountDown) is begin if CountUp = CountDown then report "Process B: Jackpot!"; end if; end process; end architecture;
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
wait on et le processus à liste de sensibilité se déclenchent sous des conditions identiques. Cette équivalence tient parce qu'une liste de sensibilité se comporte implicitement comme un wait on placé à la fin du processus.wait peuvent introduire.
Points clés à retenir
wait on.wait pour du code simulation uniquement ; utilisez des listes de sensibilité pour du RTL synthétisable.
VHDL
- Créer des listes de chaînes en VHDL : Bonnes pratiques et exemple
- Créer un banc de test piloté par Tcl pour un module verrou code VHDL
- Implémenter un contrôleur PWM en VHDL : Conception, simulation et démo FPGA
- Conception d'un tampon circulaire VHDL robuste en mémoire bloc
- Comment construire un testbench auto-vérifiant en VHDL - Guide pratique
- Implémentation d'une liste chainée dynamique en VHDL avec types protégés et pointeurs d'accès
- Exploiter les procédures in-process pour un design FSM VHDL plus propre
- Utilisation des fonctions impures en VHDL : Améliorer la lisibilité et la maintenabilité des FSM
- Maîtriser les fonctions VHDL : Guide pratique pour un design efficace