3ème année SE Berthier Florent Crenn Romain Fabre Rémi Lardoux Jessica Rapport Projet avancé : DEVELOPPEMENT CONJOINT HW/SW SUR CARTE XILINX ML507 SOUS LINUX EMBARQUE Janvier 2013 SOMMAIRE CHAPITRE 1. Introduction ................................................................................................. 2 CHAPITRE 2. ENVIRONEMENT DE TRAVAIL ........................................................................ 3 2.1 La carte Xilinx Virtex-5 ML507 ................................................................................................. 3 2.2 Communications...................................................................................................................... 4 2.3 Présentation du Timer 64 bits ................................................................................................. 5 CHAPITRE 3. Développement du Projet............................................................................. 7 3.1 TP 1: Mise en place de l’environnement de travail ................................................................. 7 3.2 TP 2 : Modification de l’architecture matérielle ..................................................................... 8 3.3 TP 3 : Test logiciel du timer. .................................................................................................. 15 CHAPITRE 4. Conclusion.................................................................................................. 17 CHAPITRE 5. Publications........................................................ Error! Bookmark not defined. CHAPITRE 6. ANNEXES .................................................................................................... 18 Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 1 / 18 CHAPITRE 1. Introduction Dans le cadre d’un « grand TP » qui ferait la synthèse de tous les enseignements de l’option SE, il convient de mettre en œuvre un environnement de développement conjoint HW/SW sur carte Xilinx Virtex-5 ML507 avec les outils Xilinx ISE sous Linux embarqué. Il convient d’intégrer dans un premier temps un bloc IP fourni (timer 64 bits) dans un design de référence SoPC puis régénérer le fichier de programmation du circuit FPGA Virtex-5 de la carte ML507. On testera le périphérique ainsi intégré. On intégrera ensuite ce nouveau design dans le portage Linux embarqué pour la carte ML507 (fichier DTS Device Tree). On développera ensuite le driver Linux d’accès au timer 64 bits puis on créera une application Linux de test du timer utilisant le driver. Le rapport du projet sera écrit dans l’esprit d’en faire le support du « grand TP ». Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 2 / 18 CHAPITRE 2. ENVIRONEMENT DE TRAVAIL 2.1 La carte Xilinx Virtex-5 ML507 Au court de ce projet nous avons travaillé sur la carte d’évaluation ML507 de chez Xilinx dont voici les caractéristiques. La carte ML507 Evaluation Platform contient: - FPGA Virtex 5 -Tri-Speed Ethernet -Port de configuration JTAG -Port série RS-232 -16 Character x 2-Line LCD Le FPGA Virtex 5: -11200 slices -820 KB RAM -1 microprocesseur Power PC 440 -son horloge est cadencée à 100MHz Caractéristiques du Power PC 440: -Processeur superscalaire 32 bit à architecture RISC -Micro-architecture pipeliné à 7 étages -32 KB de cache instruction -32 KB de cache data -Plusieurs bus de communication embarqué (PLB: Processor Local Bus) -Interface de debug JTAG Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 3 / 18 Communications Ethernet FPGA JTAG port Platform Cable USB PLB Bus PowerPC Virtex 5 RS-232 Serial Port ML507 Evaluation Platform PC 2.2 Figure 1 : Schéma Hardware du projet Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 4 / 18 2.3 Présentation du Timer 64 bits L’objectif de ce projet est d’intégrer un IP, ici un un timer 64 bits, qui pourra communiquer avec le microprocesseur. Les valeurs du compteur seront transmises par le port série RS232. clk reset Bus2IP_Data Bus2IP_BE Bus2IP_Rd CE Bus2IP_Wr CE 1 IP2Bus_Data 32 1 IP2Bus_RdAck 1 32 4 TIMER 64 bits 2 1 IP2Bus_WrAck IP2Bus_Error 1 2 Figure 2 : Timer 64 bits Ce timer possède 2 registres softwares : Un registre de capture sur 64 bits Un registre de control (en écriture seulement) - Bit 0 à 1 : on enregistre la valeur du timer et on la transfert au registre de sortie - Bit 1 à 1 : on réinitialise le timer Il fonctionne avec 3 processus : Un processus compteur qui compte sur 64 bits, celui-ci tourne toujours Un processus pour obtenir la valeur du registre de contrôle qui correspond au 2 bits de poids forts de l’entrée bus2IP_data Un processus pour enregistrer la valeur du compteur dans le registre de capture On remarque que l’entrée et la sortie sont sur 32 bits. La valeur pourra être obtenue par deux lectures successives de 32 bits du contenu du registre de capture. La sortie est multiplexée et dépende de la valeur de Bus2IP_RdCE Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 5 / 18 Bus2IP_RdCE = ‘’10’’ IP2Bus_Data reçoit les 32 bits de poids faibles du registre de capture. Bus2IP_RdCE = ‘’01’’ IP2Bus_Data reçoit les 32 bits de poids forts du registre de capture. clk 1 reset 1 Bus2IP_Da ta Bus2IP_B 32 E Bus2IP_R dCE Bus2IP_W 4 2“10” capture_register(0 to 31) 32 TIMER 64 bits IP2Bus_Data capture_register(32 to 1 63 ) IP2Bus_RdAck “01” 2 1 1 IP2Bus_WrAck IP2Bus_Error rCE Figure 3 : Multiplexage de la sortie Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 6 / 18 CHAPITRE 3. Développement du Projet 3.1 TP 1: Mise en place de l’environnement de travail Le but de ce premier TP est d’intégrer une version de linux au processeur Power PC. 1. Démarrer le pc sous linux login: guest mdp: guest 2. Détarer l'archive dans votre dossier personnel >tar –xvf nom_archive 3. Lancer le promt xilinx EDK dans un autre terminal: Se placer dans le répertoire : >cd projet_SE/bin/ Puis taper la commande : >mbsdk 4. Rester dans ce terminal et se placer ensuite dans le dossier général : cd projet_SE/ml507-ppc-linux/linux-2.6.35 exécuter la commande : >cat go Comprendre quelles sont les actions effectuées par cette commande Puis pour cross-compiler : Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 7 / 18 >./go Il existe d’autres options telles que: ./godefconfig ./goclean Comprendre aussi ce que ces commandes effectues. 5. Charger le linux ainsi cross compilé, pour cela il faut remonter d’un niveau : >xmd –opt ml507.opt ou >./goml507 6. Afin de communiquer avec la carte cible il faut se connecter à la carte Xilinx Virtex-5 ML507 (cible) en utilisant l’outil minicom (l’équivalent de l’hyperterminal sous windows). Pour cela ouvrir un autre terminal et utiliser la commande : >minicom Le prompt du linux embarqué sur Power PC s’affiche alors à l’écran. Pour sortir de minicom, il suffit de taper la combinaison de touches : CTRL A, Z pour accéder au menu et taper q pour quitter. 3.2 TP 2 : Modification de l’architecture matérielle Remarque : Lors du chargement du design sur la carte (load design) une erreur “cable is LOCKED” peut apparaitre. Pour résoudre ce problème il faut lancer IMPACT en mode batch, pour supprimer le blocage. Taper dans un terminal les commandes suivantes : impact -batch >> setmode -bs >> cleancablelock >> setcable -p auto >> quit 1. Dans un prompt Xilinx démarrer Xilinx xps, qui sert au développement du hardware. taper la commande xps dans le terminal : [Xilinx EDK]$ xps Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 8 / 18 1. Ouvrir le projet system.xmp se trouvant dans le répertoire /ml507-ppc-linux/design/design-ml507-ppc_v2 2. Création d’un nouveau périphérique Aller dans Hardware > Create or import peripheral et suivre les différentes étapes : Figure 4: Choix du Bus d'interface Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 9 / 18 Figure 5: Configuration en esclave Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 10 / 18 Figure 6 : Choix du nombre de registre Pour ce projet, il est nécessaire d’avoir deux registres de 32 bits : le premier pour l’envoie de commande et la réception des 32 bits de poids forts du timer et le timer pour obtenir les 32 bits de poids faibles. Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 11 / 18 Figure 7 : Signaux d'interconnexions Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 12 / 18 Figure 8 : Implémentation du Périphérique Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 13 / 18 3. Ajout de l’IP au projet Dans l’onglet IP catalog, rajouter l’ip créée avec la commande « add ip ». On constate que l’ip s'ajoute dans « bus interfaces » 4. Modification du user_logic.vhd Par manque de temps dans le cadre de ce projet, le fichier user_logic vous est fourni. Copier user_logic.vhd fourni dans le répertoire suivant : ml507-ppc-linux/design/design-ml507-ppc_v2/pcores/timer64_v1_00_a/hdl/vhdl Le comparer au user_logic généré par l’outil et comprendre le fonctionnement et la manière dont a été relié le périphérique au processeur. 5. Modification la connexion du timer64 : Dans l’onglet bus interfaces, modifier la connexion du timer et sélectionner le plb_v46_0. 6. Définition de la taille de l’espace mémoire : Dans l'onglet adresse, assigner le timer au bus plb. Définir la taille de l'espace mémoire au minimum (256). Changer l'adresse de début par 0x84000000 pour éviter tout conflit d’adresse avec les autres périphériques. 7. Génération du bitstream et chargement sur la carte Dans le Menu Hardware, choisir Generate Bitstream. Copier le fichier system.bit obtenu dans le répertoire : /ml507-ppc-linux/ Dans un prompt Xilinx EDK, en se plaçant dans le répertoire précèdent taper la commande : Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 14 / 18 [Xilinx EDK]$ ./load_design ml507 3.3 TP 3 : Test logiciel du timer Il faut maintenant tester votre périphérique. Pour cela, il suffit d’écrire (ou de lire) à la bonne adresse pour communiquer avec le bus PLB relié au timer. Mais, la MMU vous empêche d’écrire n’importe où, il faut donc utiliser mmap pour créer une projection mémoire dans l’espace user. Récupérez le fichier test_timer_a_completer.c Lisez le manuel man de mmap. Vous pouvez également consulter ces sites : o mmap par /dev/mem : https://forum.openwrt.org/viewtopic.php?id=10761 http://fixunix.com/embedded/322556-mmap-i-o-access.html o mmap avec driver sur la doc altera: http://www.alterawiki.com/wiki/Accessing_hardware_registers_from_user_s pace_programs Complétez test_timer_a_completer.c de façon à ce que l’on voit une incrémentation périodique du timer. Remarque : N’oubliez pas de remplacer la valeur de XPAR_TIMER64_0_BASEADDR par l’adresse que vous avez choisi lors de la génération du timer (vous en aurez évidemment besoin dans votre mmap). Modifiez votre fichier pour que l’on voit l’incrémentation du timer toutes les millisecondes. Est-ce que le résultat obtenu est cohérant avec la fréquence d’horloge? Comment expliquer cet écart? (La réponse est : le temps de l’appel système de la fonction usleep dont nous estimons le temps moyen d’appel à 650us) Régénérer le noyau avec le ramdisk qui contient le programme de test avec la commande : cp tsttimer64 /tftpboot (ou utilisez la commande ./goinstall) Sur la carte modifier la configuration réseau avec la commande ifconfig: Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 15 / 18 ifconfig eth0 ip_de_la_carte Puis charger l’exécutable présent dans le répertoire /tftpboot du pc hôte: tftp -g -r tsttimer64 ip_pc_hote Modifier les droits pour pouvoir exécuter le programme sur la carte: chmod u+x ./tsttimer Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 16 / 18 CHAPITRE 4. Conclusion Très bon projet de fin de formation, nous regrettons cependant que le volume horaire attribué à ce projet ne soit pas plus important, ce qui nous aurait permis de tout réaliser par nous-mêmes. Ce projet a nécessité la mise en pratique d’une importante palette de connaissances qui définissent l’option systèmes embarqués. Ainsi, il a fallu des connaissances en hardware à travers le VHDL et la maitrise des différentes étapes menant au bitstream, des connaissances en soft afin de développer le programme de test, des connaissances génériques sur les systèmes d’exploitation et leur gestion de la mémoire, et de la persévérance pour battre les lois de Murphy. Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 17 / 18 CHAPITRE 5. ANNEXES Les fichiers test_timer64_a_completer.c et test_timer64_a_fonctionnel.c dont envoyés en pièce jointe avec ce rapport. Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué 18 / 18