PROJET AVANCE

publicité
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
Téléchargement