rapport projet avancé - kadionik.vvv.enseirb-matmeca.fr · développement conjoint hw/sw sur carte...
TRANSCRIPT
Berthier Florent 3ème année SE
Crenn Romain
Fabre Rémi
Lardoux Jessica
Rapport
Projet avancé :
DEVELOPPEMENT CONJOINT HW/SW SUR
CARTE XILINX ML507 SOUS LINUX EMBARQUE
Janvier 2013
Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué
1 / 18
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é
2 / 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é
3 / 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é
4 / 18
2.2 Communications
Figure 1 : Schéma Hardware du projet
FPG
A
Pow
erP
C
PLB
Bu
s
Vir
tex
5
JTA
G p
ort
Eth
ern
et
P
C
Pla
tfo
rm C
able
U
SBM
L50
7 E
valu
atio
n P
latf
orm
RS-232 Serial Port
Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué
5 / 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.
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
2 Bus2IP_WrCE
IP2Bus_Data
IP2Bus_RdAck
IP2Bus_WrAck
IP2Bus_Error
1
1
1
Bus2IP_Data
Bus2IP_BE
Bus2IP_RdCE
32
clk
reset
TIMER 64 bits
1
1
4
2
32
Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué
6 / 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.
Figure 3 : Multiplexage de la sortie
2 Bus2IP_WrCE
IP2Bus_Data
IP2Bus_RdAck
IP2Bus_WrAck
IP2Bus_Error
1
1
1
Bus2IP_Data Bus2IP_B
EBus2IP_RdCE
32
clk
reset
TIMER 64 bits
1
1
4
2
32
“10”
capture_register(0 to 31)
capture_register(32 to 63 )
“01”
Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué
7 / 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é
8 / 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é
9 / 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é
10 / 18
Figure 5: Configuration en esclave
Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué
11 / 18
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.
Figure 6 : Choix du nombre de registre
Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué
12 / 18
Figure 7 : Signaux d'interconnexions
Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué
13 / 18
Figure 8 : Implémentation du Périphérique
Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué
14 / 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é
15 / 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_space_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 milli-secondes. 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é
16 / 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é
17 / 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.