Académique Documents
Professionnel Documents
Culture Documents
Ce premier TP, rédigé sous la forme d’un tutoriel, sert d’initiation à la prise en main de l’outil IDE
« vivado » de la société « Xilinx » qui a inventé et mis sur le marché le premier composant FPGA au
début des années 80.
L’application consiste à mettre en œuvre un microprocesseur basé sur ARM Cortex-A9, associé à de
la logique programmable qui est une ressource abondante dans le composant FPGA.
1 Synoptique du design
Il s’agit de construire une plateforme matérielle constituée d’un processeur (PS : Processing System)
interfacé à de la logique programmable (PL : Programmable Logic)
Mem
PL
DDR3
Controller ARM
A9
RS232
UART AXI4 BTN
AXI4 AXI
GPIO
Interconnect
Block SW
PS GPIO
Le microprocesseur est interfacé directement avec une mémoire DDR3, en plus de sa mémoire
interne, c’est le scripte du linker qui choisira où seront stockés les programmes, les variables, …
L’ARM a accès au port série RS232 grâce à une UART interne. Si l’UART est choisie comme
entrée/sortie standard, les données envoyées par la fonction « printf » du langage C vont être
dirigées vers le port série et affichées sur un utilitaire tel que Teraterm ou l’hyperterminal de
windows.
La partie matérielle va embarquer 2 GPIO (General Purpose Input Output) qui serviront à lire l’état
des poussoirs et des switchs qui sont sur la maquette.
Un protocole de communication « point to point » AXI (Advanced eXtensible Interface) connecte les
GPIO au microprocesseur.
1
AXI est un protocole de communication pour les microcontrôleurs ARM AMBA. C’est un standard qui
définit les spécifications d’interconnexion « on chip ». Il permet la connexion et la gestion de
plusieurs contrôleurs et périphériques.
2.3 Choir le type RTL (Register Transfert Level), pour pouvoir créer un nouveau projet de A à Z à
partir d’une feuille blanche.
2.4 Ne pas ajouter de source pour le moment, ni de propriété intellectuelle IP, ni de fichier de
contraintes (3 fois NEXT)
2
2.5 Choisir la maquette sur laquelle se fait le développement, un fichier de description de la
maquette est fourni par son concepteur pour faciliter le développement
2.6 Un résumé est affiché pour confirmer les choix effectués auparavant
3
2.7 Une page d’accueil multi fenêtres apparait enfin, ici commence la conception de la plateforme
matérielle. Dans la fenêtre de gauche sont listées toutes les étapes à franchir avant d’arriver à
la programmation du composant
2.8 IP integrator >> Create Block Design : pour ouvrir une page blanche
2.9 Le premier composant à installer est le microprocesseur, il est disponible sous forme d’IP
(module configurable tout pré fait). Un clic le bouton « add IP » et choisir le system à
microprocesseur ZYNQ7
4
2.10 Run Block Automation : pour arriver à ceci
5
2.13 Add IP >> AXI GPIO : pour ajouter une logique de gestion des poussoirs. Changer son nom en
« BTN »
2.14 Double clic sur « BTN » : pour changer ses propriétés (pas d’interruption pour le moment)
6
2.15 « Run connection automation » et changer le nom des poussoirs en « BTN »
2.17 « File >> Open Journal File » : pour ouvrir le journal de toutes les commandes exécutées
jusqu’ici. Copier le contenu dans un fichier « tp10.tcl » placé dans le dossier XTP
2.18 Vérifier les adresses affectées aux poussoirs
2.19 Clic droit « system.bd » dans le volet « source view » et choisir « create HDL wrapper ». Ceci
créera un fichier HDL de niveau 1 pour toute la plateforme
2.20 L’heure de la synthèse logique a sonné : faire « Run synthesis » (choisir save)
7
2.21 Ouvrir les résultats de la synthèse et relever les numéros des broches affectées aux poussoirs
dans le volet « IO Ports ». Comparer avec le fichier de contraintes (contraintes.xdc)
3.1 File >> Export >> Export Hardware : choisir « include bitstream »
3.2 File >> Run SDK : pour lancer l’environnement « Eclipse » afin de développer le soft
8
3.3 File >> New >> Application Project : pour ajouter une partie software
9
Deux nouvelles unités viennent s’ajouter à la plateforme matérielle (hw_platform) : tp10_app est la
partie software, tp_10_app_bsp est la partie drivers
3.4 Créer un nouveau fichier source nommé « ex1.c » sous la rubrique « src »
3.6 Ouvrir les fichiers « xparameters.h » et « xgpio.h » ainsi que la documentation du gpio pour
comprendre la construction du programme et son fonctionnement
3.8 Clic droit sur tp10_app et choisir : run as >> launch on hardware (GDB)
TCL est un langage de script avec ses règles et sa syntaxe. Sous Vivado, à chaque fois qu’on exécute
une commande avec le GUI, la commande équivalente en TCL apparait dans la console. Vivado garde
10
toutes les commandes exécutées dans un fichier journal : c’est celui qui a été sauvegardé
précédemment dans le fichier « tp10.tcl »
4.2 Démarrer >> Programmes >> … >> vivado 2015 Tcl Shell : pour ouvrir la fenêtre de
commandes
4.4 Taper « source tp10.tcl » pour exécuter le scripte de commandes : une plateforme matérielle
identique à celle du tp10 va se créer sous vos yeux
4.5 Ajouter un autre bloc GPIO pour les poussoirs, le configurer manuellement (custum) :
4.6 Créer une nouvelle source de type fichier de contraintes, nommé « contraintes.xdc ». Ce
fichier va imposer la position des signaux sur le brochage et l’alimentation
11
4.7 Exécuter la suite des étapes jusqu’à la génération du « bitstream »
4.9 Créer une application qui lit l’état des switches et l’affiche sur TeraTerm
BTNC = 1
BTND = 0
BTNU = 1
SW0 = 1
SW1 = 0
SW7 = 0
12