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