TP1 - Systèmes embarqués / FPGA Un système embarqué est une carte électronique programmable dédiée à une tâche bien précise. C’est un ensemble matériel et logiciel qui applique souvent les techniques du temps réel. En fonction de l’application, le système embarqué doit répondre à certaines contraintes dictées par le cahier des charges : 1. 2. 3. 4. 5. 6. 7. Coût de revient faible Taille réduite Peu gourmand en énergie Puissance de calcul satisfaisante Fiabilité de fonctionnement Sécurité des données Ouvert (interfaces) Les composants FPGA intègrent toutes les cellules nécessaires pour embarquer des systèmes autonomes : logique, microprocesseurs, mémoires, entrées/sorties rapides, propriétés intellectuelles couvrant tous les domaines, … Ce premier TP, écrit sous forme de tutoriel, montre pas à pas comment embarquer dans une plateforme FPGA le système représenté par la figure suivante : Première partie Extension MicroBlaze : microprocesseur soft BRAM : bloc mémoire de type RAM LMB cntrl : contrôleur de bus mémoire (Local Memory Bus) PLB Bus : bus synchrone dédié aux périphériques externes (Peripheral Bus) MDM : module « debugger » UART : interface de communication série GPIO : interface d’entrées sorties à usage général (poussoirs, LED, …) 1 Démarrer >> Programmes >> Xilinx ISE Design >> EDK >> Xilinx Platform Studio Créer un nouveau projet en utilisant l’outil « wizard » Définir un répertoire de travail qui accueillera le projet portant obligatoirement le nom « system.xmp ». Choisir le bus PLB pour la connexion des périphériques et donner le chemin de la bibliothèque du kit « Diligent_Genesys ». Créer un nouveau « design » Choisir le kit de développement sur lequel on travaille 2 Choisir de travailler avec un seul cœur du processeur Sélectionner le type de microprocesseur à implémenter et le paramétrer comme ceci : Ne garder à droite que l’Uart0, choisir son type (xps_uart1665), ainsi que les 2 contrôleurs (lmb_cntrl) Un résumé de la configuration choisie est affiché à la fin avec les adresses affectées aux périphériques 3 Plusieurs fenêtres vont s’ouvrir dont 2 essentielles : à gauche la fenêtre projet avec un volet « Platform » et un volet « IP » et à droite la fenêtre d’édition avec 3 volets. Le volet « Bus Interfaces » est une représentation graphique du système avec la liste des IP et leur connectique. Le volet « Ports » liste toutes les entrées-sorties ainsi que les connexions internes Le volet « Adresses » représente la répartition de l’espace mémoire 4 Project >> Generate Block Diagram : pour générer un schéma bloc de l’application 1. 2. ouvrir le fichier « system.mhs » et relever : la liste des entrées sorties les modules qui reçoivent l’horloge les interfaces reliées au bus PLB l’espace mémoire occupé par chaque élément Ouvrir le fichier de contraintes « system.ucf » et relever les numéros des broches des entrées-sorties. Hardware >> Generate Netlist : pour générer le fichier de description du système appelé « Netlist » Hardware >> Generate Bitsteam : pour générer le fichier de configuration « system.bit » Première partie logicielle : Maintenant que la plateforme matérielle est prête, il est temps de la faire vivre avec un peu de soft. Il faut exporter l’application vers une plateforme de développement software de type « Eclipse Platform » qui est un outil libre. Project >> Export Hardware Design to SDK Inclure les fichiers (.bit) et (.bmm) puis sélectionner le répertoire de travail suivant C:\sat\tp1\SDK\SDK_Export\hw\Workspace File >> New >> Xilinx C Project : pour créer un nouveau projet Soft Choisir un nouveau projet vide nommé « tp1_application_0 » Lui associer une bibliothèque (Board Support Package) nommée « tp1_application_bsp_0 » 5 Copier le fichier « ex10.c » dans le répertoire « tp1_application_0\src » et l’inclure au projet sous SDK en faisant : clic droit sur « src » et sélectionner « Refresh », le fichier est intégré automatiquement On arrive à la configuration suivante où trois modules participent à la construction du projet final Soft Lib Hard Xilinx Tools >> Program FPGA : pour programmer le composant et mettre en place la plateforme matérielle Sélectionner l’application « tp1_application_0 » et faire Run >> Run as >> Lunch on Hardware pour exécuter le programme Il n’y a plus qu’à se connecter au port série pour observer les messages envoyés par le programme. Sélectionner le voler Terminal_1 et se connecter au port com sur lequel est branché le câble RS232. Regarder dans le driver xuartns550_l.h pour comprendre la syntaxe et le rôle des fonctions utilisées dans le programme pour configurer l’UART : XUartNs550_SetBaud et XUartNs550_SetLineControlReg 6 Deuxième partie logicielle : Dans cette seconde partie, il faudra ajouter 2 nouvelles « IP » qui permettront d’accéder aux « Switchs » et aux « LED » qui sont sur la platine. Il faut, dans l’ordre : 1. 2. 3. 4. 5. 6. Ajouter 2 « IP » de type GPIO, les configurer et les renommer : « led » et « sw » Les connecter au bus PLB Ajouter les entrées sorties externes : « led_pin » et « sw_pin » Créer les connexions internes Affecter un espace mémoire de 64 kb à chacun des 2 périphériques Compiler la plateforme matérielle Choix du nombre de bits (led et sw) : Connexions aux bus : Entrées-sorties : Connexions : Espace mémoire : 7 Compléter le fichier de contraintes system.ucf pour imposer les numéros de broches de LED et SW. Compiler et transférer la plateforme vers SDK. Travailler sur le même projet soft que la première partie. Remplacer le fichier source ex11.c par le fichier ex12.c à compléter. Essayer le fonctionnement du projet sur la platine. Essayer le mode « debugger » et ses différentes possibilités. Programme à compléter : À compléter À compléter À compléter À compléter 8