Vous êtes sur la page 1sur 12

TP1 SOC/FPGA

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.

Le développement de la plateforme matérielle (Hardware) se fera sous « vivado » et le


développement du logiciel du microprocesseur se fera sur la plateforme bien connue « Eclipse »

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 Conception de la plateforme matérielle


2.1 Démarrer >> programme>> Xilinx >> vivado 2016.3 : pour lancer l’environnement IDE
« vivado »
2.2 Nommer le projet « tp10 » et le placer dans le dossier « xtp » sur le bureau

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

2.11 Double clic sur ZYNQ7 : pour ouvrir la fenêtre de configuration

2.12 Ne garder que l’UART1 dans les périphériques

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.16 « Validate design » (F6)

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)

2.22 « Run implementation » : pour compiler le projet


2.23 Ouvrir les résultats de la compilation et relever les timings

2.24 « Generate bitsteam » : pour générer le fichier binaire de configuration du « hardware »

3 Développement du logiciel « soft »

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.5 Compléter le fichier

// Initialiser le GPIO push (voir xgpio.h)

Lire l’état de push (xgpio.h)

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.7 « program fpga » : pour télécharger la partie matérielle

3.8 Clic droit sur tp10_app et choisir : run as >> launch on hardware (GDB)

3.9 Ouvrir « TeraTerm » pour valider le fonctionnement global

4 Utilisation des commandes TCL (Tool Command Langage)

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.1 Ouvrir le fichier « tp10.tcl » et changer le nom du projet à créer

4.2 Démarrer >> Programmes >> … >> vivado 2015 Tcl Shell : pour ouvrir la fenêtre de
commandes

4.3 Changer de répertoire pour se mettre dans le dossier de travail « xtp »

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.8 Exporter ver XPS (Eclipse)

4.9 Créer une application qui lit l’état des switches et l’affiche sur TeraTerm

4.10 Modifier le programme pour un affichage explicite de la forme :

BTNC = 1

BTND = 0

BTNU = 1

SW0 = 1

SW1 = 0

SW7 = 0

12

Vous aimerez peut-être aussi