1 Objectif 2 Introduction au logiciel Xilinx Vivado - Enseirb
Transcription
1 Objectif 2 Introduction au logiciel Xilinx Vivado - Enseirb
Année 2015-2016 Tutorial Xilinx - Vivado Camille LEROUX Filière : TELECOM 1 Année : 2015-2016 Semestre : 6 Objectif L’objectif de ce tutorial est de donner les principales clefs pour utiliser la suite d’outils Vivado de la société Xilinx. Nous allons réaliser un simple additionneur complet (full adder) en utilisant un language de description matérielle: le VHDL. Nous allons ensuite tester le full adder sur la carte Basys 3 de la société Digilent. A la fin de ce tutorial, vous devez être capable de : • Lancer l’outil, • Créer un nouveau projet, • Décrire un circuit combinatoire simple en VHDL, • Créer un fichier de contraintes .xdc, • Faire la synthèse, le placement, le routage et la génération du bit stream, • Reconfigurer le circuit FPGA de la carte. 2 Introduction au logiciel Xilinx Vivado Ce document a pour but de vous familiariser avec l’outil Vivado, il ne présente que quelques aspects de ce panel d’outils très riche et dont la parfaite maı̂trise demande de nombreuses heures de manipulation. Cependant il est possible d’acquérir rapidement une maı̂trise partielle avec quelques manipulations de bases. 2.1 Lancement de l’outil Ouvrez un terminal et tapez la commande suivante : launch vivado La fenêtre Vivado s’ouvre alors : Si cette fenêtre n’est pas vide, faites : File>Close Project Généralement, l’outil s’ouvre avec le dernier projet ouvert. 1 2.2 Création d’un nouveau projet Créez un projet : File>New Project La fenêtre New Project apparaı̂t: • Cliquez sur Next • Project Name : nom de votre projet : TP EN101 (attention pas d’espace) • Project Location : chemin de sauvegarde du projet et des fichiers associés • Cliquez sur Next • Sélectionnez RTL Project • Cliquez sur Next • A l’aide des filtres, sélectionnez le circuit FPGA que nous allons utiliser : xc7a35tcpg2361 • Cliquez sur Next • Cliquez sur Finish NB : A tout moment il est possible de changer ces informations en cliquant sur Project Settings dans la fenetre Flow Navigator sur la gauche. Le projet vide est maintenant crée. Nous allons à présent créer un fichier source qui contriendra la description du full adder, et l’ajouter au projet. 2.3 Ajouter des fichiers sources Pour ajouter une nouvelle source faites : • File > Add Sources. • Sélectionnez Add or Create Design Sources. • Cliquez sur Create File • File Type: VHDL • File name: full adder • File location: Local to Project • Cliquez sur Create File • Cliquez sur Finish • Definissez les port d’entrée / sortie : – A : in 1 bit – B : in 1 bit 2 – CIN : in 1 bit – S : out 1 bit – COUT : out 1 bit • Cliquez sur OK Une fois le fichier VHDL crée, celui-ci apparait dans l’arboresence de la fenetre Sources. Double cliquez sur le fichier full adder.vhd. Le fichier VHDL apparait alors. On peut modifier la spécification des ports d’entrée/sortie dans la partie entity du fichier: Par exemple pour un port d’entrée TOTO sur 1 bit: TOTO : in STD LOGIC; Pour un port de sortie TATA sur 3 bits: TATA : out STD LOGIC VECTOR(2 downto 0); 2.4 Description de l’architecture Une fois les ports d’entrée/sortie définis, il nous faut décrire l’architecture de notre full adder. Le circuit combinatoire implémentant un full adder est donnée sur la Figure 1. Figure 1: Schéma de l’additionneur complet Pour décrire ce circuit en VHDL, nous avons besoin de portes logiques de base. En VHDL, tous les opérateurs logiques de base sont disponibles: not, and, or, nand, nor, xor, xnor. Par exemple pour générer AXORB = A ⊕ B, il suffit de taper après le mot clef begin: AXORB <= A xor B; Nous avons également besoin de déclarer le fil AXORB. Pour cela, il suffit de le déclarer avant le mot clef begin: signal AXORB : std logic; Modifiez le fichier VHDL pour obtenir la description du full adder suivante: library IEEE; 3 use IEEE.STD_LOGIC_1164.ALL; entity full_adder is Port ( A : in STD_LOGIC; B : in STD_LOGIC; CIN : in STD_LOGIC; S : out STD_LOGIC; COUT : out STD_LOGIC); end full_adder; architecture Behavioral of full_adder is signal AXORB : std_logic; begin AXORB <= A xor B; S <= AXORB xor CIN; COUT <= (A and B) or (CIN and AXORB); end Behavioral; 3 Implantation du Full Adder sur le FPGA 3.1 Ajout du fichier etape 0.vhd Maintenant que l’architecture du Full Adder est décrite en VHDL, nous allons l’implanter sur le circuit FPGA. Pour tester le fonctionnement du full adder, nous allons connecter 3 interrupteurs de la carte Basys 3 aux entrées (A, B en CIN) et 2 LEDs aux sorties (S et COUT). L’architecture de etape 0.vhd est décrite sur la Figure 2. La description VHDL etape 0.vhd a déjà été écrite. Téléchargez là (cleroux.vvv.enseirb-matmeca.fr/EN101/ puis ajoutez là au projet: • File > Add Sources • Sélectionnez Add or Create Design Sources • Cliquez sur Next • Cliquez sur Add Files • Allez chercher le fichier etape 0.vhd à l’endroit ou vous l’avez téléchargé • Cliquez sur Finish Une fois que le fichier etape 0.vhd a été ajouté, il doit apparaitre dans la fenêtre Sources et le fichier full adder.vhd doit se trouver sous le fichier etape 0.vhd, ce qui montre que l’architecture du bloc etape 0 contient/instancie un module de type full adder. 4 3.2 Ajout du fichier de contraintes Le FPGA sur lequel nous allons implanter le circuit comporte un grand nombre de pattes d’entrée/sortie. Il faut donc maintenant connecter les entrées sw(0), sw(1) et sw(2) et sorties led(0) et led(1) du bloc etape 0 aux pattes du FPGA qui sont physiquement connectées aux LEDs et aux interrupteurs sur la carte (Cf Figure 2). Ceci est spécifié dans un fichier .xdc (Xilinx Design Constraints). Ajouter le fichier Basys3.xdc fournit à votre projet: • File > Add Sources • Sélectionnez Add or Create Constraints • Cliquez sur Add Files • Allez chercher le fichier de contraintes Basys3.xdc là ou vous l’avez téléchargé • Cliquez sur Finish Après l’ajout, votre fichier de contrainte apparait dans l’arborescence de la fenêtre Sources, dans le répertoire Constaints. En l’ouvrant, vous devez retrouver les directives suivantes qui permettent de connecter les entrées/sorties du module etape 0 aux pattes du FPGA. set_property set_property set_property set_property set_property set_property 3.3 PACKAGE_PIN V17 [get_ports {sw[0]}] IOSTANDARD LVCMOS33 [get_ports {sw[0]}] PACKAGE_PIN V16 [get_ports {sw[1]}] IOSTANDARD LVCMOS33 [get_ports {sw[1]}] PACKAGE_PIN W16 [get_ports {sw[2]}] IOSTANDARD LVCMOS33 [get_ports {sw[2]}] Synthèse logique Une fois ceci fait, sélectionnez le module etape 0 dans la fenêtre Sources, puis clique droit et Set as Top. Ceci permet de dire à l’outil que c’est ce module ci et ses éventuels sous-modules qu’il va falloir implémenter sur le FPGA. Le module etape 0 doit alors apparaitre en gras dans l’arborescence. Ceci fait, nous allons voir ce que produit l’étape de synthèse logique à partir de la description VHDL: • Sélectionner le module etape 0 (simple clique dessus) • Dans la fenêtre Project Manager, dans la rubrique Synthesis, cliquez sur Schematic. Le processus de synthèse se lance et vous voyez apparaitre un schéma logique composé de LUT et de buffer. Vous pouvez vérifiez le contenu de chaque LUT : • Clique droit sur une LUT • Cell properties 5 Carte Basys LED0 FPGA switch switch switch switch switch switch switch switch 0 1 2 3 4 5 6 7 U16 E19 Etape 0 V17 V16 W16 sw(0) sw(1) sw(2) LED1 LED2 Full Adder A B CIN S COUT led(0) led(1) LED3 LED4 LED5 LED6 LED7 Figure 2: Connexion des I/O du module Full Adder aux I/O du FPGA 3.4 Placement et routage Une fois la synthèse logique effectuée, l’outil va affecter les 2 LUTs synthètisées sur les LUTs disponibles sur le FPGA (ce FPGA en contient un peu plus de 20000). Il va ensuite configurer les interconnexions pour relier les entrées du circuit FPGA aux LUTs et les sorties des LUTs aux sorties du circuit. Pour lancer la phase de placement/routage: • Sélectionner le module etape 0 (simple clique dessus) • Dans la rubrique Implementation, cliquez sur Run Implementation • Après quelques secondes, une fenêtre de Warning apparait, cliquez sur OK • Après quelques secondes supplémentaires, un fenêtre apparait, sélectionnez Open Implemented Design, puis OK Une fenêtre device apparait. En zoomant sur le circuit essayez de retrouver les LUTs, les entrées sw(2:0) et les sorties led(1:0). 3.5 Génération du bitstream et configuration du FPGA La dernière étape du processus d’implantation consiste à générer un bit stream, c’est à dire un fichier binaire qui va être téléchargé sur le FPGA et qui va permettre de configurer le contenu de 6 chaque LUT et de chaque interconnexion du FPGA pour que celui-ci implémente l’architecture que vous avez visualisée après la phase de placement routage. Pour générer ce bit stream: • Branchez la carte à votre PC, et allumez votre carte (interrupteur à coté du cable mini USB) • Dans la rubrique Program and Debug, cliquez sur Generate Bitstream • Après quelques secondes, une fenêtre apparait, sélectionnez Open Hardware Manager, puis OK • Clique droit sur la cible (xc7a35t), puis Program Device Le bitstream est transféré sur le circuit FPGA via le cable USB. Une fois le circuit configuré, vous pouvez changer la valeur des interupteurs et vérifier que votre full adder fonctionne. NB: Il est possible de réaliser toutes les étapes de l’implémentation jusqu’à la génération du bitstream en cliquant directement sur Generate Bitstream. 7