Cours- TD VHDL Séance 1 Nous allons pour commencer apprendre à utiliser le logiciel qui va permettre de créer des composants décrits en HDL (Hardware Description Language). Ce logiciel permet en fait de faire plein de choses que nous découvrirons au fur et à mesure. Le logiciel s appelle ISE Design Suite. C est ce qu on appelle communément dans le domaine, un outil CAO (de Conception Assistée par Ordinateur, ou CAD tool en anglais, pour Computer- Aided Design). Ce logiciel est mis à jour régulièrement par son fabricant, qui s appelle Xilinx. Xilinx, rappelez- vous le cours de la dernière fois, c est une entreprise américaine qui conçoit des FPGA (c est même l entreprise qui a «inventé» le FPGA). Donc Xilinx conçoit des FPGA et fournit des outils logiciels qui permettent de «programmer» ces FPGA. Si j écris «programmer» entre guillemets, c est parceq- qu il s agit d un abus de langage. En effet, lorsqu il s agit de «programmer» des FPGA, on fait quelque chose de fondamentalement différent par rapport à un microcontrôleur. On vient en fait écrire dans des Look- Up Tables (LUT) des fonctions logiques séquentielles et combinatoires. Cela vous paraît assez abstrait pour l instant, et c est normal. Rassurez- vous, on va y aller progressivement, et vous verrez que grâce aux outils que l on va utiliser, on va pouvoir voir exactement ce que l on fait et à quoi correspondent ces LUT, et le lien avec le VHDL Après cette courte digression, revenons au logiciel : il se nomme ISE, et il est dans vote environnement à sa version 14.4. Il est accessible directement sur le bureau si vous êtes déjà connectés sur un PC. Raccourci vers le logiciel ISE 14.4 NB : ISE est disponible dans les environnements Windows et Linux (pas de version Mac OS). Vous pouvez l installer gratuitement en le téléchargeant sur le web (pour y accéder, faire directement sous Google «ISE webpack download», et suivre les liens jusqu à la version 14.4). Il faudra simplement créer un compte de type étudiant sur le site de Xilinx. Utilisation à distance Ce logiciel est également accessible à distance sur un serveur de Polytech (ce qui peut être une alternative intéressante par rapport à une installation sur sa machine). Pour y accéder, vous connaissez certainement déjà la méthode, il suffit d utiliser l application de «connexion bureau à distance». Dans le menu «démarrer» de Windows, sélectionner l application dans «Accessoires»
Connexion Bureau à distance, accès à l application Une fois l application lancée, il suffit d entrer le nom de l ordinateur auquel on souhaite se connecter. Ici il s agit du serveur rdsens3, auquel on accède par l adresse : rdsens3.polytech.univ- montp2.fr Connexion Bureau à distance, nom de l ordinateur Avant d appuyer sur le bouton connexion, vérifier dans les options que votre nom d utilisateur est correctement entré. Pour l utilisateur zlatan, Il est de la forme ISIM_NTX\zlatan.
Connexion Bureau à distance, entrer le nom de l utilisateur dans les options Après avoir cliqué sur «Connexion», l application vous demande votre mot de passe, entrez le. Vous êtes enfin connectés sur le serveur rdsens3! Si ce n est pas le cas, vérifiez votre nom d utilisateur et votre mot de passe, ou encore l adresse du serveur. Si vous n y arrivez toujours pas, appelez- moi ISE, on y va Si ce n est pas déjà fait, lancez ISE en double cliquant sur l icône présente sur le bureau. Vous voyez apparaître une fenêtre, en fait un «environnement» qui comprend un certain nombre d éléments classiques aux environnements de développement (Visual, Eclipse, etc.).
Environnement de développement intégré ISE v14.4 On retrouve donc : - - - - En haut, une barre de menus, avec en dessous des raccourcis sous forme d icônes Au milieu à gauche, des raccourcis pour créer, ouvrir, explorer des projets En bas, une «console» dans laquelle apparaîtront des messages (nous verrons lesquels plus tard) Et au milieu, dans la plus grande fenêtre, pour l instant, le «Tip of the Day». Ce «Tip», on a l habitude de le voir dans pas mal d applications logicielles. C est un moyen intéressant d apprendre des astuces pour utiliser le logiciel. Si ce n est pas votre approche de l apprentissage des astuces et que vous préférez naviguer dans l aide lorsque c est nécessaire, n hésitez pas à décocher la case «Show Tips at Startup», vous gagnerez du temps au lancement de l application Nous allons entrer dans le vif du sujet en créant un projet. Pour cela on clique directement sur «New Project». Une fenêtre s ouvre pour entrer les informations nécessaires à la création de votre projet.
Création d un nouveau projet Avant d entrer le nom, on va cliquer sur un des boutons avec les 3 petits points afin de sélectionner la localisation du projet. Il est déconseillé de travailler en local, je ne rentrerai pas le détail des raisons, mais en gros si vous n avez pas envie de perdre votre travail suivez mes conseils! On va donc aller dans le répertoire de
votre compte perso sur le réseau interne de Polytech. Sous «ordinateur» vous devez voir votre nom de compte sur \\buis.isim.intra. Entrez dans cet espace disque sur le réseau, vous êtes chez vous. Créez ensuite un répertoire dédié au VHDL, puis faîtes OK. On va garder le même répertoire pour Location et Working Directory. Entrez maintenant le nom du projet. Ici, c est «gates2». Puis cliquez sur Next
Là on voit apparaître une foule de paramètres, incompréhensibles pour les non- initiés. Si on prend un peu le temps de lire et de déchiffrer, on comprend qu il y a sur les premières lignes les caractéristiques d un composant FPGA, à choisir parmi des catégories, des familles, des devices, etc. Et sur les lignes suivantes, il s agit plutôt des outils que l on va utiliser. Avant de cliquer sur Next, nous avons juste besoin de modifier la ligne Preferred Language, et choisir VHDL. Le reste nous aurons bien le temps de le comprendre plus tard (vous pouvez sélectionner les mêmes options que moi, mais ce n est pas pour l instant vraiment nécessaire) NB : est- ce que vous vous rappelez? Il existe plusieurs langages HDL, le Verilog et le VHDL en sont 2. Dans le cadre de ce cours, nous nous focaliserons sur l utilisation du VHDL. On clique sur Next, et on voit apparaître un résumé des informations que nous venons d entrer :
On vérifie une dernière fois que tout est ok, et on peut cliquer sur Finish. L environnement est modifié. Désormais sur la gauche, nous avons 2 nouvelles fenêtres : - - Une fenêtre Hierarchy Une fenêtre avec plusieurs onglets, «Start», «Design», «Files», «Libraries» A noter également juste au- dessus de la fenêtre Hierarchy : - View : Implementation et Simulation En fait ces vues correspondent à 2 façons différentes d utiliser l outil ISE. Nous allons pour l instant faire de la simulation, donc : Sélectionner View Simulation Après avoir fait ça, dans la fenêtre Hierarchy, vous allez faire un clic droit :
Dans le menu contextuel qui s affiche, sélectionner New Source. Un nouveau menu de configuration apparaît. Il est possible de créer plusieurs types de «sources». ici, nous allons choisir VHDL Module. Ne changez pas «Location», et entrez simplement le nom du fichier :
Cliquez sur Next. Dans l interface, nous allons définir les entrées et sorties de notre composant gates2, telles que définies ci- dessous : On clique sur Next, on vérifie le résumé, et on clique sur Finish. Vous avez un code qui ressemble à ça qui apparaît dans une fenêtre d édition :
Vous voyez apparaître des commentaires en vert, précédés de 2 tirets - -, et également du texte en bleu (mots clés VHDL), en rose (mots clés issus des bibliothèques) et en noir (paramètres choisis par le concepteur). C est très bien tout ça, mais cherchons un peu à comprendre le contenu de ce fichier Déjà, sachez que tous les codes VHDL commenceront par : library IEEE; use IEEE.STD_LOGIC_1164.ALL; A quoi ça sert? Et bien à définir des types, des fonctions, etc. (c est un peu comme le #include <stdio.h> en C ). VHDL: <Library>.<package>.<component> ISE: aller dans le répertoire \ISE\vhdl\src\ieee et observer le contenu du package std_logic_1164 PACKAGE std_logic_1164 IS ------------------------------------------------------------------- -- logic state system (unresolved) ------------------------------------------------------------------- TYPE std_ulogic IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care ); 9 valeurs possibles pour le type std_ulogic, c est un type «non résolu», cela veut dire que si 2 sorties sont connectées, la valeur ne pourra être définie. Le type résolu est : ------------------------------------------------------------------- -- *** industry standard logic type *** ------------------------------------------------------------------- SUBTYPE std_logic IS resolved std_ulogic; -------------------------------------------------------------------
-- unconstrained array of std_logic for use in declaring signal arrays ------------------------------------------------------------------- TYPE std_logic_vector IS ARRAY ( NATURAL RANGE <>) OF std_logic; A noter le type vecteur, qui correspond à un tableau (un bus en électronique). La table de résolution suivante est utilisée pour définir la valeur de sortie : CONSTANT resolution_table : stdlogic_table := ( -- --------------------------------------------------------- -- U X 0 1 Z W L H - -- --------------------------------------------------------- ( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- U ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- X ( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ), -- 0 ( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- 1 ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- Z ( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- W ( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- L ( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- H ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ) -- - ); Il faut savoir à ce niveau, que cette table de résolution sera utilisée par l outil de simulation pour «résoudre» des fonctions. Nous allons compléter le code initialement créé par le listing suivant : library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity gates2 is port( end gates2; a: in std_logic; b: in std_logic; z: out std_logic_vector(5 downto 0) ); architecture Behavioral of gates2 is begin
z(5)<= a and b; z(4)<= a nand b; z(3)<= a or b; z(2)<= a nor b; z(1)<= a xor b; z(0)<= a xnor b; end Behavioral; Minatenant que nous avons créé ce composant, nous allons créer son testbench. Attention, ne sélectionnez pas VHDL test bench, mais VHDL Module! N entrez pas de configuration particulière pour ce composant.
Cliquez sur Next, puis Finish. Ensuite, compléter le code du testbench à partir du listing suivant : LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY tb_gates2 IS END tb_gates2; ARCHITECTURE behavior OF tb_gates2 IS -- Component Declaration for the Unit Under Test (UUT) COMPONENT gates2 PORT( a : IN std_logic; b : IN std_logic; z : OUT std_logic_vector(5 downto 0) ); END COMPONENT;
--Inputs signal a : std_logic := '0'; signal b : std_logic := '0'; --Outputs signal z : std_logic_vector(5 downto 0); BEGIN -- Instantiate the Unit Under Test (UUT) uut: gates2 PORT MAP ( a => a, b => b, z => z ); -- Stimulus process stim_proc: process begin -- insert stimulus here a<='0'; b<='0'; wait for 20ns; a<='0'; b<='1'; wait for 20ns; a<='1'; b<='0'; wait for 20ns; a<='1'; b<='1'; wait for 20ns;
END; end process; Après avoir enregistré, vous pouvez constater que la hiérarchie du design est modifiée à gauche. Sélectionner le test bench dans Hierarchy, dérouler dans la fenêtre en dessous isim simulator, et double cliquer sur Simulate behavioral model Regardez la fenêtre qui vient de s ouvrir, c est un chronogramme. Regardez les différents signaux, si vous avez des questions, appelez- moi Puis passez à la suite!