Exemple de procédure VHDL : incrémenter un std_logic_vector
Qu'est-ce qu'une procédure VHDL ?
Les procédures appartiennent à la famille des sous-programmes en VHDL. Elles encapsulent une logique réutilisable, réduisant la duplication de code et améliorant la maintenabilité. En définissant une procédure une fois, vous pouvez l'invoquer depuis plusieurs processus ou architectures, assurant un comportement cohérent.
Exemple : incrémenter un std_logic_vector
L'exemple suivant démontre une procédure qui prend un std_logic_vector 8 bits, y ajoute 1, et retourne le résultat. La procédure inclut aussi un wait de 1 ns pour illustrer le contrôle de timing dans un testbench.
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity example_procedure_simple is end example_procedure_simple; architecture behave of ex_procedure_simple is signal r_TEST : std_logic_vector(7 downto 0) := X"42"; -- But : Incrémente un std_logic_vector de 1 procedure p_INCREMENT_SLV ( signal r_IN : in std_logic_vector(7 downto 0); signal r_OUT : out std_logic_vector(7 downto 0) ) is begin r_OUT <= std_logic_vector(unsigned(r_IN) + 1); wait for 1 ns; -- Wait est OK ici. end p_INCREMENT_SLV; begin process is begin wait for 10 ns; p_INCREMENT_SLV(r_TEST, r_TEST); wait for 10 ns; p_INCREMENT_SLV(r_TEST, r_TEST); wait for 10 ns; p_INCREMENT_SLV(r_TEST, r_TEST); wait; end process; end behave;
Pourquoi inclure un wait statement ?
Les instructions wait sont légales dans une procédure à condition que le processus appelant n'ait pas de liste de sensibilité. Cette fonctionnalité est particulièrement utile dans les testbenchs, où vous pouvez avoir besoin d'introduire des délais déterministes sans encombrer le processus principal.
Points clés à retenir
- Les procédures peuvent avoir des signaux IN et OUT.
- Elles sont idéales pour des opérations communes comme l'arithmétique sur std_logic_vector.
- Utiliser wait dans une procédure garde la logique de testbench propre.
VHDL
- Introduction à VHDL : construire votre première porte ET
- Guide complet des conversions de types VHDL avec Numeric_Std et Std_Logic_Arith
- Exploiter les records VHDL pour des interfaces FIFO propres et réutilisables
- Maîtriser l'instruction Switch C# : Syntaxe, exemples et bonnes pratiques
- Instruction Break C# : Comment et quand l'utiliser
- Maîtriser l'instruction Continue C# : Comment ignorer efficacement les itérations de boucle
- Créer des listes de chaînes en VHDL : Bonnes pratiques et exemple
- Maîtriser le switch-case en C++ : Syntaxe, utilisation et exemples pratiques
- Rédaction de procédures numériques : Simple, Efficace et Fiable