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.