rapport projet avancé - kadionik.vvv.enseirb-matmeca.fr · développement conjoint hw/sw sur carte...

19
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

Upload: vucong

Post on 15-Sep-2018

224 views

Category:

Documents


4 download

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.

Développement conjoint HW/SW sur carte Xilinx ML507 sous Linux embarqué

18 / 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.