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

Comprendre la différence entre signaux et variables en VHDL

Dans notre tutoriel précédent, nous avons exploré comment déclarer une variable au sein d'un processus. Les variables sont idéales pour un travail algorithmique local, mais elles ne peuvent pas être vues en dehors de ce processus. Lorsque vous avez besoin qu'une valeur soit partagée avec d'autres parties du design, vous utilisez un signal.

Les signaux sont déclarés dans la région déclarative d'une architecture — c'est-à-dire entre la ligne architecture <architecture_name> of <entity_name> is et le mot-clé begin.

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

La syntaxe pour déclarer un signal est :
signal <name> : <type>;

Un signal peut être déclaré avec une valeur initiale optionnelle :
signal <name> : <type> := <initial_value>;

Exercice

Dans ce tutoriel vidéo, nous apprenons à déclarer un signal et découvrons la différence fondamentale entre une variable et un signal.

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

entity T06_SignalTb is end entity; architecture sim of T06_SignalTb is signal MySignal : integer := 0; begin process is variable MyVariable : integer := 0; begin report "*** Process begin ***"; MyVariable := MyVariable + 1; MySignal <= MySignal + 1; report "MyVariable=" & integer'image(MyVariable) & ", MySignal=" & integer'image(MySignal); MyVariable := MyVariable + 1; MySignal <= MySignal + 1; report "MyVariable=" & integer'image(MyVariable) & ", MySignal=" & integer'image(MySignal); wait for 10 ns; report "MyVariable=" & integer'image(MyVariable) & ", MySignal=" & integer'image(MySignal); end process; end architecture;

La sortie sur la console du simulateur lorsque nous avons appuyé sur le bouton run dans ModelSim :

VSIM 2> run # ** Note: *** Process begin *** # Time: 0 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=1, MySignal=0 # Time: 0 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=2, MySignal=0 # Time: 0 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=2, MySignal=1 # Time: 10 ns Iteration: 0 Instance: /t06_signaltb # ** Note: *** Process begin *** # Time: 10 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=3, MySignal=1 # Time: 10 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=4, MySignal=1 # Time: 10 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=4, MySignal=2 # Time: 20 ns Iteration: 0 Instance: /t06_signaltb ...

Analyse

Nous avons créé un signal et une variable avec la même valeur initiale de 0. Bien que nous les ayons traités de manière identique dans le processus, la sortie console révèle des comportements distincts. Les différences clés sont :

Dans notre exemple, les deux premiers incréments de MySignal ont été perdus car ils ont été écrasés avant l'instruction wait for 10 ns; qui a causé la suspension du processus et la mise à jour du signal. L'incrément subséquent apparaît après la suspension, correspondant au comportement attendu.

À retenir

Allez au tutoriel suivant »


VHDL

  1. Maîtriser les types Signé vs Non-signé en VHDL : insights pratiques
  2. Variables VHDL expliquées : exemples pratiques et règles pour un design fiable
  3. Cloud Computing vs Informatique Traditionnelle : Comparaison Pratique
  4. Créer des listes de chaînes en VHDL : Bonnes pratiques et exemple
  5. Terminer proprement une simulation de banc de test VHDL
  6. Implémenter un contrôleur PWM en VHDL : Conception, simulation et démo FPGA
  7. Générer des nombres aléatoires en VHDL : De l'uniforme à OSVVM
  8. Exploiter les procédures in-process pour un design FSM VHDL plus propre
  9. Système de navigation par satellite BeiDou expliqué : comment il se démarque du GPS