Introduction Calcul DSP Comparaison C

publicité
Cours de MICROINFORMATIQUE
Section de microtechnique
Année 2005 - 2006
Travaux pratiques
TP: DSPCalcul
Titre:
Optimisation de code de calcul par combinaison de C et d’assembleur
But:
Compenser les limitations du code généré par le compilateur C par des
fonctions codée en assembleur. Utilisation de l’instruction dsp MAC. Application au filtrage numérique
Durée:
3 heures
Support:
-
Matériel:
-
Introduction
Le traitement de signal demande souvent du calcul performant. Une des instructions clé des processeurs pour le traitement du signal (DSP) est l’instruction MAC. Les opérations exécutées par
cette instruction s’appliquent parfaitement au calcul de filtres numérique. Le but de ce TP est de
comprendre le fonctionnement et la puissance de cette instruction.
Calcul DSP
Créez un projet avec le code C exampleTP4.c et product.s qui se trouvent sur le site WEB du
TP. Testez ce code en simulation (n’oubliez pas d’activer la simulation de UART sous Debugger Settings ... et de donner une taille au heap sous Project - Build options ...).
Comprenez le code utilisé. En particulier:
• Comment sont déclarés array1 et array2? Pour quelle raison?
• Pourquoi array3 est-il déclaré comme long?
• Pourquoi est-ce que W8 et W10 sont-il sauvés sur la pile?
• Pourquoi le code assembleur utilise-t-il W8 et W10 comme pointeurs, et non pas des registres
comme W0 et W1?
• Comment se fait le balayage de la mémoire des array? Combien de temps prend cette
opération?
• Simulez l’exécution en pas à pas et vérifiez les opération réalisées par les deux lignes de code
suivantes, en observant en particulier les registres W4, W7, W8, W10 et A:
CLR
A, [W8]+=2, W4, [W10]+=2, W7
MPY
W4*W7, A, [W8]+=2, W4, [W10]+=2, W7
Comparaison C - assembleur DSP
Re-écrivez la fonction product en C et remplacez la fonction écrite en assembleur. Essayez de
copiler avec et sans optimisation (O3). Comparez le codage et les temps d’éxécution des trois
implémentations.
Instruction MAC
Remplacez l’instruction MPY par l’instruction MAC et vérifiez à nouveau l’exécution en observant que
l’addition a bien lieu.
Moyenne
Changez la définition de ARRAYSIZE afin de la faire valoir 100 et déclarez une variable locale à
main qui s’appélle start. Modifiez le code (C et/ou assembleur) afin de réaliser une moyenne
sur 8 valeurs à partir de l’élément start du vecteur array1. Utilisez array2 pour stocker les
coefficients de moyennage. Stockez la moyenne obtenue dans l’élément numéro start du vecteur
array3. Vérifiez le fonctionnement de votre code.
Remarque: pour une boucle d’une seule instruction il faut utiliser l’instruction REPEAT au lieu de
l’instruction DO.
Adressage modulo
Le dsPIC dispose, pour permettre une meilleure efficacité lors de l’utilisation de l’instruction MAC,
d’un adressage de type modulo. En quoi consiste ce type d’adressage? Cherchez sa définition dans
la documentation et comprenez sa mise en ouvre (registes impliqués, leur initialisation). Appliquez
ce type d’adressage au cas d’une moyenne appliquée à quatre signaux simultanément.
Téléchargement