03.07.2013 Views

Architecture pour le traitemement du signal et des images

Architecture pour le traitemement du signal et des images

Architecture pour le traitemement du signal et des images

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

INSA de Lyon<br />

Département Génie E<strong>le</strong>ctrique<br />

5GE Travaux Pratiques<br />

<strong>Architecture</strong> <strong>pour</strong><br />

<strong>le</strong> <strong>traitemement</strong> <strong>du</strong> <strong>signal</strong> <strong>et</strong> <strong>des</strong> <strong>images</strong><br />

Version Fina<strong>le</strong><br />

Lyon, <strong>le</strong> 20 décembre 2012<br />

Thomas Grenier<br />

Olivier Bernard<br />

Dominique Tournier<br />

Philippe Delachartre


2 / 17


TABLE DES FIGURES TABLE DES MATIÈRES<br />

Tab<strong>le</strong> <strong>des</strong> matières<br />

Tab<strong>le</strong> <strong>des</strong> figures<br />

3 / 17


1 Intro<strong>du</strong>ction<br />

1.1 Que vais je faire ?<br />

1 INTRODUCTION<br />

Le but de c<strong>et</strong>te séance de TP est d’appréhender <strong>le</strong>s spécificités <strong>des</strong> architectures modernes de<br />

traitement <strong>du</strong> <strong>signal</strong> <strong>et</strong> <strong>des</strong> <strong>images</strong>.<br />

Dans un premier temps, vous al<strong>le</strong>r prendre en main la plateforme (système informatique, logiciels<br />

<strong>et</strong> la carte Mistral OMAP35x EVM).<br />

Dans un second temps il s’agira d’observer <strong>le</strong>s différences entre <strong>le</strong>s architectures classiques <strong>et</strong><br />

cel<strong>le</strong>s optimisées <strong>pour</strong> <strong>le</strong> traitement <strong>du</strong> <strong>signal</strong>. Les observations iront de l’infrastructure é<strong>le</strong>ctronique<br />

à la programmation.<br />

Enfin, on s’attardera sur l’architecture logiciel<strong>le</strong> perm<strong>et</strong>tant de tirer profit de l’architecture<br />

adaptée.<br />

1.2 Pré-requis<br />

La programmation en langage C serra utilisée tout au long de ce TP (IF1). Il est nécessaire<br />

d’avoir une connaissance minima<strong>le</strong> <strong>du</strong> fonctionnement de linux <strong>et</strong> <strong>des</strong> comman<strong>des</strong> élémentaires<br />

(ls, cd, exécution d’un programme) lancées dans un terminal (IF4 <strong>et</strong> autres). Il est nécessaire de<br />

connaitre l’architecture <strong>des</strong> processeurs (IF2 <strong>et</strong> IF3) <strong>et</strong> <strong>le</strong> traitement <strong>du</strong> <strong>signal</strong> (TS). Enfin, un<br />

minimum de connaissances en réseau (adresse IP, protoco<strong>le</strong>s FTP, NFS, teln<strong>et</strong>) vous fera gagner<br />

<strong>du</strong> temps. Sinon référez vous aux cours, au n<strong>et</strong> <strong>et</strong> à l’enseignant.<br />

1.3 Vocabulaire<br />

Le PC est équipé d’un système d’exploitation (Windows) dans <strong>le</strong>quel on créera une machine<br />

virtuel<strong>le</strong>. L’environnement de la machine virutel<strong>le</strong> est optimisé <strong>pour</strong> <strong>le</strong>s développements informatiques<br />

de la carte (compilateur, librairies, échange de fichiers).<br />

Le système d’exploitation virtualisé est Linux Ubuntu 10.04 LTS. On par<strong>le</strong>ra de système virtuel<br />

ou de machine virtuel<strong>le</strong> Linux.<br />

Lors <strong>des</strong> développements, la carte "OMAP35x EVM " sera dite la cib<strong>le</strong> (ou targ<strong>et</strong>) <strong>et</strong> par<br />

opposition, la machine virtuel<strong>le</strong> Linux sera dite l’hôte (host en anglais) 1 .<br />

1.4 Conventions<br />

Voici quelques conventions de présentation <strong>pour</strong> la suite <strong>du</strong> document.<br />

➥ Ceci correspond à une remarque importante<br />

☞ Ceci correspond à une manipulation à réaliser<br />

✍ Ceci correspond à une question dont il faut noter la réponse<br />

1. En virtualisation, <strong>le</strong> terme hôte est donné au système d’exploitation hébergeant <strong>le</strong>s machines virtuel<strong>le</strong>s. Ici on ne<br />

s’intéresse pas à la virtualisation mais à la compilation croisée d’une cib<strong>le</strong> (la carte evm) par un système hôte (machine<br />

linux).<br />

4 / 17


2 MATÉRIEL<br />

2 Matériel<br />

2.1 La carte<br />

La plateforme est constituée d’un PC <strong>et</strong> d’une carte OMAP35x EVM 2 . C<strong>et</strong>te carte est à base<br />

d’un processeur OMAP3 de Texas Instrument <strong>et</strong> est composée de nombreux périphériques (voir la<br />

figure ?? <strong>et</strong> ??).<br />

Le processeur n’est pas faci<strong>le</strong>ment visib<strong>le</strong> sur c<strong>et</strong>te carte car masqué par <strong>le</strong> système de protection.La<br />

figure ?? est une photo de la carte processeur de l’OMAP35x EVM. Le processeur est<br />

plus p<strong>et</strong>it qu’une pièce de 1 euro (merci de ne pas vérifier <strong>et</strong> de prêter attention au symbo<strong>le</strong> dans<br />

<strong>le</strong> triang<strong>le</strong> en bas à gauche de la figure ??).<br />

FIGURE 1 – La carte processeur <strong>et</strong> <strong>le</strong> processeur OMAP3530 au centre.<br />

La figure ?? présente un diagramme <strong>des</strong> périphériques de la carte. Des périphériques de la<br />

carte, peu vont être utilisés dans ce TP : l’écran tacti<strong>le</strong>, <strong>le</strong> port Ethern<strong>et</strong>, <strong>le</strong> port UART 1/2 ,<br />

l’audio <strong>et</strong> la vidéo.<br />

☞<br />

➥<br />

Vérifier <strong>le</strong> cablage de la carte :<br />

➀ un cab<strong>le</strong> Ethern<strong>et</strong> (b<strong>le</strong>u) entre la carte <strong>et</strong> <strong>le</strong> PC,<br />

➁ un cab<strong>le</strong> série (RS-232, gris) entre la carte UART 1/2 <strong>et</strong> <strong>le</strong> PC,<br />

➂ m<strong>et</strong>tre l’interrupteur SW2 sur la position centra<strong>le</strong> (figure ??),<br />

➃ brancher l’alimentation.<br />

Une <strong>et</strong> une seu<strong>le</strong> <strong>le</strong>d doit être allumée. Si plusieurs <strong>le</strong>d s’allument,<br />

vérifier la position de SW2.<br />

Si aucune <strong>le</strong>d ne s’allume (à coté de l’interrupteur SW2), vérifier l’alimentation<br />

<strong>du</strong> réseau puis appe<strong>le</strong>r un enseignant.<br />

C<strong>et</strong>te carte dispose de nombreuse séquences de démarrage (bootsequence) différentes (par<br />

exemp<strong>le</strong> par mémoire flash, ou carte SD, ou réseau, <strong>et</strong>c). Le choix de la séquence est fixé par la<br />

va<strong>le</strong>ur <strong>des</strong> interrupteurs "SW4 DIP". La figure ?? donne <strong>le</strong>s positions de la séquence de démarrage<br />

2. evm signifie Evaluation Mo<strong>du</strong><strong>le</strong><br />

5 / 17


2.1 La carte 2 MATÉRIEL<br />

FIGURE 2 – Vue de face de la carte OMAP35x EVM.<br />

FIGURE 3 – Vue de derrière de la carte OMAP35x EVM.<br />

6 / 17


2 MATÉRIEL 2.1 La carte<br />

FIGURE 4 – Diagramme fonctionnel de la carte.<br />

7 / 17


2.2 Ordinateur 2 MATÉRIEL<br />

utilisée dans ce TP.<br />

➥ Ne pas piloter <strong>le</strong>s interrupteurs SW4 DIP...<br />

☞ ... Mais vérifier que SW4 est dans la position décrite à la figure ??<br />

FIGURE 5 – Position <strong>des</strong> interrupteurs SW4.<br />

Le document OMAP35x EVM Hardware User Guide.pdf, disponib<strong>le</strong> sur M :/TP_DSP/Doc<br />

sous windows ou /media/sf_Doc sur la machine virtuel<strong>le</strong>, détail<strong>le</strong> <strong>le</strong>s rô<strong>le</strong>s <strong>et</strong> caractéristiques é<strong>le</strong>ctriques<br />

de chaque<br />

✍<br />

A quel type de boot correspond la configuration utilisée dans ce TP <strong>et</strong><br />

illustrée par la figure ?? ?<br />

Nous analyserons plus tard la séquence de démarrage <strong>et</strong> l’architecture <strong>du</strong> processeur.<br />

2.2 Ordinateur<br />

Le PC perm<strong>et</strong> de programmer la carte, compi<strong>le</strong>r <strong>le</strong>s programmes <strong>et</strong> de déboguer. On verra<br />

aussi qu’il partage <strong>des</strong> fichiers avec la carte dont <strong>le</strong>s fichiers de démarrage.<br />

☞ Démarrer <strong>le</strong> PC <strong>et</strong> ouvrez la session useradmin.<br />

La figure ?? présente l’organisation <strong>du</strong> système informatique. Le système windows :<br />

– héberge une machine virtuel<strong>le</strong> Linux<br />

– perm<strong>et</strong> l’utilisation de la sonde XDS-560 (non utilisée, peut être non présente...)<br />

– perm<strong>et</strong> de naviguer par mis <strong>le</strong>s documents <strong>et</strong> sur intern<strong>et</strong><br />

La carte OMAP35x EVM est reliée au PC par une liaison RS-232 <strong>et</strong> par une connexion Ethern<strong>et</strong>.<br />

La connexion série RS-232 perm<strong>et</strong> de communiquer avec la carte <strong>et</strong> d’interrompre la séquence<br />

de démarrage. La communication (protoco<strong>le</strong> IP) par <strong>le</strong> câb<strong>le</strong> Ethern<strong>et</strong> est initiée dès <strong>le</strong> démarrage<br />

de la carte (u-boot). La carte obtient une adresse IP (dhcp), charge <strong>le</strong> noyau uImage (tftp), exécute<br />

ce noyau, puis monte son système de fichier linux (nfs). Les services (dhcp, tftp <strong>et</strong> nfs) ainsi que<br />

<strong>le</strong>s fichiers systèmes sont fournis par la machine virtuel<strong>le</strong>.<br />

Tout <strong>le</strong> monde peut modifier la machine virtuel<strong>le</strong>. Mais <strong>pour</strong> être sûr de partir d’un état<br />

8 / 17


2 MATÉRIEL 2.3 Machine virtuel<strong>le</strong> Linux<br />

FIGURE 6 – Organisation <strong>et</strong> interactions <strong>du</strong> PC avec la carte.<br />

(a) (b)<br />

FIGURE 7 – (a) Icône de VirtualBox, (b) Instantané sous VirtualBox, la flèche rouge indique <strong>le</strong><br />

bouton perm<strong>et</strong>tant de restaurer l’instantané.<br />

"stab<strong>le</strong>", un instantané a été créé. C<strong>et</strong> instantané fige l’état de la machine.<br />

☞<br />

Démarrer la machine virtuel<strong>le</strong> : doub<strong>le</strong> cliquer sur l’icône de VirtualBox<br />

(OMAP) (figure ??a). L’instantané ”TPv5-2off” est restauré.<br />

La machine virtuel<strong>le</strong> Linux démarre.<br />

☞<br />

Voici <strong>le</strong> compte à utiliser <strong>pour</strong> s’identifier dans la machine Linux :<br />

– identifiant ou utilisateur : user<br />

– mot de passe : insage<br />

2.3 Machine virtuel<strong>le</strong> Linux<br />

Les services nécessaires au démarrage de la carte OMAP35x EVM sont tous opérationnels au<br />

démarrage de la machine virtuel<strong>le</strong> Linux.<br />

Pour surveil<strong>le</strong>r <strong>et</strong> interagir au démarrage de la carte, il faut lire <strong>et</strong> écrire sur <strong>le</strong> port série COM1<br />

9 / 17


2.4 Système de fichiers 2 MATÉRIEL<br />

ou /dev/ttyS0. Le logiciel CuteCom sous linux perm<strong>et</strong> d’effectuer ceci.<br />

☞<br />

➀ Lancer <strong>le</strong> logiciel Cutecom (icône sur <strong>le</strong> bureau)<br />

➁ Vérifier <strong>le</strong>s va<strong>le</strong>urs <strong>des</strong> paramètres de communication suivants<br />

– vitesse : 115200 bauds<br />

– port : /dev/ttyS0<br />

– nombre de bits de données : 8<br />

– bit de stop : 1<br />

– pas de bit de parité<br />

– ouvrir en <strong>le</strong>cture <strong>et</strong> écriture<br />

➂ Ouvrir <strong>le</strong> périphérique (cliquer sur ”Open Device”)<br />

Le logiciel écoute maintenant <strong>le</strong> port série. Il faut démarrer la carte.<br />

☞<br />

Pour démarrer la carte, placer l’interrupteur SW2 sur la position droite :<br />

”DC IN”.<br />

La carte OMAP35x EVM démarre. Il est possib<strong>le</strong> de la redémarrer grâce aux trois boutons<br />

res<strong>et</strong> présents en bas à droite sur la carte.<br />

Dans la fenêtre <strong>du</strong> logiciel Cutecom, <strong>le</strong>s informations de démarrage de la carte s’affichent.<br />

✍ Noter l’adresse IP de la carte OMAP35x EVM (la cib<strong>le</strong>)<br />

☞<br />

Sur la machine hôte, lancer dans un terminal linux (ou conso<strong>le</strong>), la commande<br />

:<br />

$ teln<strong>et</strong> IP-de-la-cib<strong>le</strong><br />

Si l’adresse IP est correcte, on obtient dans <strong>le</strong> terminal la même invite d’identification que sous<br />

Cutecom. Vous communiquez ainsi avec la cib<strong>le</strong> à partir de l’hôte comme s’il s’agissait d’un autre<br />

ordinateur.<br />

☞<br />

Via teln<strong>et</strong> lancé sur l’hôte, s’identifier sur la cib<strong>le</strong> en tant qu’utilisateur<br />

root (il n’y a pas de mot de passe).<br />

2.4 Système de fichiers<br />

La carte <strong>et</strong> la machine virtuel<strong>le</strong> fonctionnent. La machine virtuel<strong>le</strong> partage avec la carte <strong>des</strong><br />

fichiers, notamment <strong>le</strong> système de fichiers de la carte, ceci grâce au protoco<strong>le</strong> NFS.<br />

✍ Qu’est ce que <strong>le</strong> protoco<strong>le</strong> NFS ?<br />

Le système de fichier correspond à l’ensemb<strong>le</strong> <strong>des</strong> fichiers nécessaires au fonctionnement<br />

<strong>du</strong> système d’exploitation (fichier de configuration, répertoires standard, drivers, ...). L’intérêt de<br />

partager <strong>des</strong> fichiers entre la cib<strong>le</strong> <strong>et</strong> l’hôte est de pouvoir faci<strong>le</strong>ment échanger <strong>des</strong> programmes ou<br />

10 / 17


2 MATÉRIEL 2.4 Système de fichiers<br />

<strong>des</strong> données entre la machine virtuel<strong>le</strong> <strong>et</strong> la carte.<br />

☞<br />

✍<br />

✍<br />

Dans la fenêtre de sortie de Cutecom, r<strong>et</strong>rouver <strong>et</strong> analyser la ligne<br />

KernelCommandLine.<br />

A quoi correspond la commande :<br />

n f sroot = 192.168.1.100 : /opt/evm f i<strong>le</strong>system ?<br />

Sur la cib<strong>le</strong>, lister (commande ls) <strong>le</strong> contenu <strong>du</strong> répertoire ”/opt”. Sur la<br />

machine hôte, où se trouve ce répertoire ”/opt” de la cib<strong>le</strong> ?<br />

De manière général, où se trouve sur l’hôte <strong>le</strong> système de fichiers utilisé<br />

par la cib<strong>le</strong> ?<br />

☞ Vérifier que l’ajout d’un fichier sur l’hôte est vu par la cib<strong>le</strong>.<br />

Sous linux, la commande df perm<strong>et</strong> d’afficher la tail<strong>le</strong> <strong>et</strong> l’occupation <strong>des</strong> disques. Vérifions<br />

que vous avez tout compris...<br />

✍<br />

✍<br />

Exécuter la commande df sur l’hôte. A quoi correspondent <strong>le</strong>s lignes<br />

/media/sf Doc, /media/sf SDK <strong>et</strong> /media/sf tmp. Pourquoi ont el<strong>le</strong>s la<br />

même tail<strong>le</strong> ? Vérifier c<strong>et</strong>te va<strong>le</strong>ure ?<br />

Exécuter la commande df sur la cib<strong>le</strong>. A quoi correspond la ligne / ?<br />

Pourquoi <strong>le</strong>s va<strong>le</strong>urs sont <strong>le</strong>s mêmes que <strong>pour</strong> /opt de l’hôte ?<br />

Il ne faut pas si méprendre : <strong>le</strong>s programmes exécutés sur la cib<strong>le</strong> <strong>et</strong> sur l’hôte ne sont pas <strong>le</strong>s<br />

même <strong>et</strong> ceci à cause <strong>des</strong> architectures différentes <strong>des</strong> processeurs (prochaine partie). Pour vous<br />

en convaincre, exécutons un programme personnel.<br />

✍<br />

✍<br />

Sur la cib<strong>le</strong> exécuter <strong>le</strong> fichier /opt/TP/??/toto grace à la commande :<br />

# /opt/TP/??/toto<br />

Que fait ce programme ?<br />

Exécuter ce programme sur l’hôte. Pourquoi <strong>le</strong> programme ne fonctionne<br />

pas ?<br />

A ce stade, la plateforme fonctionne <strong>et</strong> vous avez toutes <strong>le</strong>s informations <strong>pour</strong> passer à l’étude<br />

de l’architecture <strong>et</strong> exécuter vos programmes sur la cib<strong>le</strong>.<br />

11 / 17


3 Etude de l’architecture<br />

Dans c<strong>et</strong>te partie, <strong>le</strong> but est d’étudier l’architecture de l’OMAP3530.<br />

3.1 Optimisations <strong>pour</strong> <strong>le</strong> traitement <strong>du</strong> <strong>signal</strong><br />

3 ETUDE DE L’ARCHITECTURE<br />

Une grande partie <strong>du</strong> traitement numérique <strong>du</strong> <strong>signal</strong> <strong>et</strong> <strong>des</strong> <strong>images</strong> repose sur la notion de<br />

pro<strong>du</strong>it scalaire. En eff<strong>et</strong>, une Discr<strong>et</strong>e Fourier Transform ou Discr<strong>et</strong> Cosine Transform, un pro<strong>du</strong>it<br />

de convolution, un filtrage IIR, un réseau de neurones, ... peuvent se m<strong>et</strong>tre sous la forme :<br />

N−1<br />

s[k] =<br />

∑<br />

n=0<br />

w[n].e[ f (n,k)] (1)<br />

où w est une fonction de pondération 3 , e est un <strong>signal</strong>, <strong>et</strong> f est une fonction dépendant de k <strong>et</strong><br />

ou de n réalisant souvent une soustraction ou une addition entre <strong>le</strong>s deux indices. Par exemp<strong>le</strong> un<br />

filtrage FIR d’un <strong>signal</strong> e par <strong>le</strong>s coefficients <strong>du</strong> filtre w s’écrit :<br />

N−1<br />

s[k] =<br />

∑<br />

n=0<br />

<strong>et</strong> une FFT ( j est l’unité imaginaire j 2 = −1) :<br />

N−1<br />

S[k] =<br />

∑<br />

n=0<br />

w[n].e[n − k] (2)<br />

e[n].exp(−2. j.π.k.n/N) (3)<br />

D’un point de vu informatique, l’opération élémentaire (i.e. qui sera répétée en bouc<strong>le</strong>) <strong>du</strong><br />

pro<strong>du</strong>it scalaire est s = w[i].e[ j] + s. Si on cherche à améliorer <strong>le</strong>s performances 4 d’un calculateur<br />

dédié au traitement <strong>du</strong> <strong>signal</strong>, ceci con<strong>du</strong>it aux conclusions suivantes :<br />

– un calculateur doit disposer d’opérations de multiplications <strong>et</strong> d’addition très rapi<strong>des</strong>. Il faut<br />

aussi que <strong>le</strong>s opéran<strong>des</strong> manipulées soient de tail<strong>le</strong>s adaptées (nombre de bits) <strong>pour</strong> éviter<br />

<strong>le</strong>s dépassements de capacité <strong>et</strong> <strong>le</strong>s problèmes de précision.<br />

– <strong>le</strong>s opérations de multiplication <strong>et</strong> d’addition sont d’un enjeu majeur, il serait même bien de<br />

créer une opération réalisant successivement une multiplication puis une addition.<br />

– <strong>le</strong>s accès à la mémoire sont nombreux : il s’agit d’accéder à 2 tab<strong>le</strong>aux simultanément, il<br />

faudra tirer profit <strong>des</strong> différents bus de données <strong>et</strong> d’adresses présents.<br />

– incrémentation <strong>des</strong> indices : l’utilisation de pointeurs semb<strong>le</strong> tout indiqué <strong>pour</strong> gérer <strong>le</strong>s<br />

accès aux tab<strong>le</strong>aux. Le passage à l’élément suivant se faisant par incrémentation (ou décrémentation)<br />

d’un pointeur. C<strong>et</strong>te opération d’addition (simp<strong>le</strong>) <strong>pour</strong>rait se faire automatiquement<br />

à chaque itération.<br />

– gestion <strong>du</strong> nombre de répétitions : lors d’un filtrage on connait <strong>le</strong> nombre d’itération il<br />

faudrait prévoir une instruction perm<strong>et</strong>tant de répéter un nombre donner de fois une ou un<br />

groupe d’instructions.<br />

3.2 OMAP3530<br />

Quid de l’OMAP ?<br />

3. w peut dépendre de k <strong>et</strong> de n<br />

4. Vitesse, capacité de calcul, précisions, consommation en énergie, encombrement... sont <strong>le</strong>s enjeux de l’optimisation<br />

de l’architecture<br />

12 / 17


3 ETUDE DE L’ARCHITECTURE 3.2 OMAP3530<br />

OMAP signifie Open Multimedia Applications Plateform <strong>et</strong> a été développé par Texas Instrument.<br />

Il s’agit d’un SoC (System on Chips) propriétaire <strong>des</strong>tiné aux systèmes embarqués multimédia<br />

portab<strong>le</strong>s <strong>et</strong> mobi<strong>le</strong>s comme <strong>le</strong>s tab<strong>le</strong>ttes, <strong>le</strong>s mini PC portab<strong>le</strong>s, <strong>le</strong>s smartphones, <strong>le</strong>s <strong>le</strong>cteurs<br />

multimédia ou <strong>le</strong>s conso<strong>le</strong>s de jeux portab<strong>le</strong>s 5 .<br />

Les OMAP intégrent généra<strong>le</strong>ment un processeur à usage général (general purpose processor)<br />

basé sur une architecture ARM <strong>et</strong> un ou plusieurs co-processeurs spécialisés tel qu’un DSP. Les<br />

DSP sont <strong>des</strong> processeurs spécialisés dans <strong>le</strong> traitement <strong>du</strong> <strong>signal</strong>. Leur architecture est optimisée<br />

<strong>pour</strong> satisfaire la quasi totalité <strong>des</strong> conclusions <strong>du</strong> paragraphe précédent.<br />

L’OMAP utilsé dans ce TP est l’OMAP 3530. Il s’agit d’un processeur de la famil<strong>le</strong> OMAP3<br />

(la famil<strong>le</strong> OMAP5 est atten<strong>du</strong>e <strong>pour</strong> fin 2012). Le diagramme par blocs de l’OMAP3530 est<br />

donné sur la figure ??. El<strong>le</strong> détail<strong>le</strong> l’ensemb<strong>le</strong> <strong>des</strong> co-processeurs intégrés, <strong>le</strong>s différentes mémoires<br />

<strong>et</strong> <strong>le</strong>s largeures <strong>des</strong> bus de données.<br />

5. http ://en.wikipedia.org/wiki/OMAP<br />

(a)<br />

FIGURE 8 – Diagramme en blocs de l’OMAP3530.<br />

13 / 17


3.3 Compilation 3 ETUDE DE L’ARCHITECTURE<br />

✍ Quel<strong>le</strong> est la référence <strong>du</strong> GPP présent dans l’OMAP ?<br />

✍ Quel<strong>le</strong> est la référence <strong>du</strong> DSP présent dans l’OMAP ?<br />

✍ S’agit t’il d’un DSP à virgu<strong>le</strong> fixe ou flottante ?<br />

3.3 Compilation<br />

3.3.1 Compilation C <strong>pour</strong> l’OMAP<br />

Commençons par un rappel sur la compilation en langage C. Voici un programme simp<strong>le</strong><br />

"monprog.c" :<br />

1 <br />

2<br />

3 <br />

4 <br />

5 <br />

6 <br />

7 <br />

8 <br />

9 <br />

10<br />

11 <br />

12 <br />

13<br />

14 <br />

15<br />

16 <br />

17 <br />

☞<br />

➀ Sur l’hôte, ouvrir <strong>le</strong> fichier ”/home/user/TP/??/monprog.c”<br />

➁ Ouvrir un terminal <strong>et</strong> se déplacer dans <strong>le</strong> répertoire<br />

”/home/user/TP/??” (commande ”cd”...).<br />

➂ Compi<strong>le</strong>r monprog.c en tapant dans <strong>le</strong> terminal :<br />

$ gcc monprog.c -o monprog LINUX<br />

➃ Exécuter <strong>le</strong> programme en tapant dans <strong>le</strong> terminal la commande :<br />

$ ./monprog LINUX<br />

Le fichier exécutab<strong>le</strong> est compilé <strong>pour</strong> <strong>le</strong> système de l’hôte. Nous allons maintenant compi<strong>le</strong>r<br />

<strong>le</strong> même fichier c mais c<strong>et</strong>te fois-ci <strong>pour</strong> qu’il puisse être exécuté sur l’OMAP35x EVM. Il ne s’agit<br />

plus d’utiliser <strong>le</strong> compilateur gcc mais un compilateur adapté à l’architecture de la cib<strong>le</strong>. On par<strong>le</strong><br />

de cross compi<strong>le</strong>r ou de compilateur croisé. CodeSourcery fourni un tel compilateur <strong>pour</strong> <strong>le</strong> GPP<br />

14 / 17


3 ETUDE DE L’ARCHITECTURE 3.3 Compilation<br />

(ARM) de l’OMAP.<br />

☞<br />

➀ Dans <strong>le</strong> même terminal que précédemment, compi<strong>le</strong>r <strong>le</strong> programme<br />

<strong>pour</strong> la cib<strong>le</strong> avec la commande :<br />

$ arm-none-linux-gnueabi-gcc monprog.c -o monprog GPP<br />

➁ Copier monprog GPP dans <strong>le</strong> répertoire :<br />

/opt/evm fi<strong>le</strong>system/opt/TP/??,<br />

➂ Exécuter <strong>le</strong> programme sur la cib<strong>le</strong>.<br />

Nous venons de compi<strong>le</strong>r un programme très simp<strong>le</strong>. Quand <strong>le</strong>s taches de compilation se<br />

compliquent (nombreux fichiers, librairies, instructions particulières, cross compilation, ... ) il est<br />

avantageux d’utiliser <strong>le</strong> moteur de pro<strong>du</strong>ction make. Lorsqu’il est appelé, ce logiciel va lire <strong>le</strong><br />

fichier de configuration Makefi<strong>le</strong> présent dans <strong>le</strong> répertoire courant. Ce fichier contient l’ensemb<strong>le</strong><br />

<strong>des</strong> taches à réaliser ainsi que la liste <strong>des</strong> fichiers, <strong>des</strong> librairies <strong>et</strong> <strong>des</strong> options à utiliser.<br />

Un fichier Makefi<strong>le</strong> est présent dans <strong>le</strong> répertoire "/home/user/TP/??". Il perm<strong>et</strong> de compi<strong>le</strong>r<br />

<strong>le</strong> fichier .c <strong>pour</strong> linux, <strong>le</strong> GPP <strong>et</strong> <strong>le</strong> DSP <strong>et</strong> d’instal<strong>le</strong>r <strong>le</strong>s fichiers <strong>pour</strong> l’omap dans <strong>le</strong> répertoire<br />

/opt/evm_fi<strong>le</strong>system/opt/TP/??.<br />

☞<br />

Sur l’hôte dans <strong>le</strong> répertoire ”/home/user/TP/??”<br />

➀ Ouvrir <strong>le</strong> fichier Makefi<strong>le</strong>.<br />

➁ Construire l’exécutab<strong>le</strong> <strong>pour</strong> <strong>le</strong> GPP avec la commande :<br />

$ make gpp<br />

➂ Grâce à la commande suivante, copier c<strong>et</strong> exécutab<strong>le</strong> dans <strong>le</strong><br />

répertoire /opt/evm fi<strong>le</strong>system/opt/TP/?? :<br />

$ make gpp install<br />

➃ Vérifier que l’exécutab<strong>le</strong> pro<strong>du</strong>it fonctionne.<br />

➄ En analysant <strong>le</strong> fichier Makefi<strong>le</strong>, faire de même <strong>pour</strong> la compilation<br />

la cib<strong>le</strong> linux.<br />

✍ Un fichier est inclus au Makefi<strong>le</strong>, à quoi sert il ?<br />

3.3.2 Proj<strong>et</strong> GPP + DSP<br />

Comment exécuter <strong>du</strong> code sur <strong>le</strong> DSP ? Il faut passer par <strong>le</strong> GPP <strong>et</strong> une zone partagée en<br />

mémoire. On part <strong>du</strong> programme précédent (monprog.c) mais on <strong>le</strong> compi<strong>le</strong> c<strong>et</strong>te fois <strong>pour</strong> <strong>le</strong><br />

15 / 17


3.3 Compilation 3 ETUDE DE L’ARCHITECTURE<br />

DSP.<br />

☞<br />

➥<br />

Sur l’hôte dans <strong>le</strong> répertoire ”/home/user/TP/??”<br />

➀ Construire l’exécutab<strong>le</strong> <strong>pour</strong> <strong>le</strong> DSP avec la commande :<br />

$ make dsp<br />

➁ Instal<strong>le</strong>r c<strong>et</strong> exécutab<strong>le</strong> dans <strong>le</strong> répertoire<br />

/opt/evm fi<strong>le</strong>system/opt/TP/?? :<br />

$ make dsp install<br />

➂ Vérifier que l’exécutab<strong>le</strong> pro<strong>du</strong>it fonctionne.<br />

Pour l’exécution de monprog dsp, l’affichage ne se fera qu’à la fin : après<br />

<strong>le</strong> premier message ”Hello...”, entrer <strong>le</strong>s 2 va<strong>le</strong>urs.<br />

✍ Comparer <strong>le</strong>s tail<strong>le</strong>s <strong>des</strong> trois exécutab<strong>le</strong>s pro<strong>du</strong>its. Conclusion ?<br />

Pour <strong>le</strong> traitement <strong>du</strong> son : premier exemp<strong>le</strong> : "loop-thru" on copie l’entrée audio sur la sortie.<br />

☞<br />

➥<br />

➀ A l’aide de gedit, ouvrir <strong>le</strong> script<br />

”/opt/TP/A/audio loopthru pipe.sh”.<br />

➁ Sur la cib<strong>le</strong> exécuter ce script :<br />

# sh /opt/TP/A/audio loopthru pipe.sh<br />

➂ Avec <strong>le</strong> gbf <strong>et</strong> l’oscilloscope, préparer un <strong>signal</strong> sinus d’amplitude<br />

50mV.<br />

➃ Connecter à Audio In ce <strong>signal</strong> <strong>et</strong> observer en voie 2 Audio Out.<br />

Attention à ne pas envoyer un fort <strong>signal</strong>. Toujours vérifier qu’il n’y ai pas<br />

de saturation en sortie !<br />

✍ Conclusions ? (niveau, bande passante, ...)<br />

Pour quitter <strong>le</strong> programme sur la cib<strong>le</strong> appuyer sur "ctrl + c". Ce script est un enchainement<br />

d’instruction linux utilisant la bibliothèque de gestion <strong>du</strong> son ALSA. Après avoir configurer <strong>le</strong>s<br />

entrées <strong>et</strong> <strong>le</strong>s sorties, on copie ce qui rentre sur la sortie via un "pipe" logiciel. Un programme<br />

en C utilisant la même bibliothèque mais implémentant <strong>le</strong>s transferts mémoires (memcpy) a été<br />

16 / 17


3 ETUDE DE L’ARCHITECTURE 3.3 Compilation<br />

implémenté : app.<br />

☞<br />

➥<br />

Sur l’hôte <strong>et</strong> dans un terminal, al<strong>le</strong>r dans <strong>le</strong> répertoire :<br />

/home/user/workshop TG/dvsdk-ex/FromWS.<br />

Entrer la commande make c<strong>le</strong>an, puis make debug puis make install.<br />

Exécuter <strong>le</strong> programme app ainsi compilé <strong>et</strong> installé sur <strong>le</strong> système de<br />

fichier de la cib<strong>le</strong>.<br />

Si <strong>le</strong> programme app plante (segfault), il y a une incompatibilité de<br />

mémoire entre <strong>le</strong> programme <strong>et</strong> la configuration actuel<strong>le</strong>. Pour reconfigurer<br />

<strong>le</strong>s mo<strong>du</strong><strong>le</strong>s de gestion mémoire, lancer sur la cib<strong>le</strong> <strong>le</strong>s deux<br />

comman<strong>des</strong> suivantes :<br />

➀ # /<strong>et</strong>c/init.d/loadmo<strong>du</strong><strong>le</strong>-rc stop<br />

➁ # /<strong>et</strong>c/init.d/loadmo<strong>du</strong><strong>le</strong>-rc startpool<br />

✍ Observez vous <strong>des</strong> différences par rapport au script ?<br />

☞<br />

Executer sur la cib<strong>le</strong> <strong>le</strong>s programmes cfft dsp <strong>et</strong> cfft arm. ils se trouvent<br />

dans <strong>le</strong> répertoire :<br />

”/usr/share/ti/c6run-apps/examp<strong>le</strong>s/c6runapp/emqbit”.<br />

✍ Conclusion ?<br />

3.3.3 Désassemblage <strong>et</strong> débogage : GPPSide<br />

La mise au point d’un programme ne peut se faire sans un outils de débogage. Il y a dans<br />

l’OMAP deux coeurs (<strong>le</strong> GPP <strong>et</strong> <strong>le</strong> DSP). Nous allons d’abord déboguer <strong>le</strong> GPP (l’arm) avec <strong>le</strong><br />

logiciel Eclipse.<br />

17 / 17


4 Applications<br />

4.1 Lecture <strong>et</strong> affichage d’une vidéo<br />

Un décodeur de vidéo est disponib<strong>le</strong> sur la cib<strong>le</strong>. Il s’agit <strong>du</strong> programme decode.<br />

☞<br />

4 APPLICATIONS<br />

Commencer par reconfigurer <strong>le</strong>s mo<strong>du</strong><strong>le</strong>s de gestion mémoire : sur la<br />

cib<strong>le</strong> exécuter <strong>le</strong>s deux comman<strong>des</strong> suivantes :<br />

➀ # /<strong>et</strong>c/init.d/loadmo<strong>du</strong><strong>le</strong>-rc stop<br />

➁ # /<strong>et</strong>c/init.d/loadmo<strong>du</strong><strong>le</strong>-rc start87<br />

Le programme decode se trouve dans /usr/share/ti/dvsdk-demo <strong>et</strong> <strong>le</strong>s videos dans /usr/share/ti/data/video.<br />

Il faut executer <strong>le</strong> programme decode à partir <strong>du</strong> répertoire /usr/share/ti/dvsdk-demo<br />

afin que <strong>le</strong>s liens sur <strong>le</strong>s codecs GPP <strong>et</strong> DSP se fassent.<br />

☞ Lire une video ”.m4v”.<br />

✍ Donner <strong>le</strong>s lignes utilisées <strong>pour</strong> lire une vidéo m4v<br />

✍ Occupation <strong>du</strong> GPP <strong>et</strong> <strong>du</strong> DSP pendant la <strong>le</strong>cture ?<br />

18 / 17

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!