16
1 Université du Québec à Montréal MIC4220 Département d’Informatique Traitement numérique du signal Laboratoire 1 : Utilisation de CCS4 et DSK’C6713 OBJECTIFS Apprendre à utiliser Code Composer Studio (CCS4) et la carte DSK de Texas Instrument; se familiariser avec le développement d’un système DSP et l’analyse d’un programme et des résultats produits en temps réel. INTRODUCTION Code Composer Studio (CCS) fournit plusieurs outils pour faciliter la construction et la mise au point des programmes de DSP. Il comprend un éditeur de code source, un compilateur de langage C/C++, un assembleur de code relocalisable, un éditeur de liens, et un environnement d’exécution qui permet de télécharger un programme exécutable sur une carte cible, de l’exécuter et de le déboguer au besoin. CCS comprend aussi des outils qui permettent l’analyse en temps réel d’un programme en cours d’exécution et des résultats produits. Finalement, il fournit un environnement de gestion de fichiers qui facilite la construction et la mise au point des programmes. EXEMPLE D’UTILISATION L’exemple qui suit montre comment un algorithme multifilaire simple peut être compilé, assemblé et lié en utilisant CCS. D'abord, plusieurs valeurs de données sont écrites en mémoire. Ensuite un pointeur est assigné au début des données de sorte qu'elles puissent être traitées comme elles sont présentées. Finalement des fonctions simples sont ajoutées en C et en assembleur pour illustrer la façon dont celles-ci sont exécutées. I. Créer un répertoire de travail Le répertoire de travail est l’endroit où vos projets seront sauvegardés. Lors de la première utilisation de CCS4, il devra se créer un répertoire de travail sur votre espace personnel sur le disque Z . Le changement du répertoire de travail peut s’effectuer à partir la commande du menu «FileSwitch Workspace» puis il faut entrer le nom de l’espace de travail dans la fenêtre.

Université du Québec à Montréal MIC4220 Département d ...boukadoum_m/MIC4220/TP/Lab1... · dans la fenêtre «Connection», cocher le DSK6713 dans la fenêtre «Device» et terminer

Embed Size (px)

Citation preview

1

Université du Québec à Montréal MIC4220 Département d’Informatique Traitement numérique du signal

Laboratoire 1 : Utilisation de CCS4 et DSK’C6713

OBJECTIFS

Apprendre à utiliser Code Composer Studio (CCS4) et la carte DSK de Texas Instrument; se familiariser avec le développement d’un système DSP et l’analyse d’un programme et des résultats produits en temps réel.

INTRODUCTION

Code Composer Studio (CCS) fournit plusieurs outils pour faciliter la construction et

la mise au point des programmes de DSP. Il comprend un éditeur de code source, un compilateur de langage C/C++, un assembleur de code relocalisable, un éditeur de liens, et un environnement d’exécution qui permet de télécharger un programme exécutable sur une carte cible, de l’exécuter et de le déboguer au besoin. CCS comprend aussi des outils qui permettent l’analyse en temps réel d’un programme en cours d’exécution et des résultats produits. Finalement, il fournit un environnement de gestion de fichiers qui facilite la construction et la mise au point des programmes.

EXEMPLE D’UTILISATION

L’exemple qui suit montre comment un algorithme multifilaire simple peut être

compilé, assemblé et lié en utilisant CCS. D'abord, plusieurs valeurs de données sont écrites en mémoire. Ensuite un pointeur est assigné au début des données de sorte qu'elles puissent être traitées comme elles sont présentées. Finalement des fonctions simples sont ajoutées en C et en assembleur pour illustrer la façon dont celles-ci sont exécutées.

I. Créer un répertoire de travail

Le répertoire de travail est l’endroit où vos projets seront sauvegardés. Lors de la

première utilisation de CCS4, il devra se créer un répertoire de travail sur votre espace personnel sur le disque Z . Le changement du répertoire de travail peut s’effectuer à partir la commande du menu «File→ Switch Workspace» puis il faut entrer le nom de l’espace de travail dans la fenêtre.

2

L’écran «Welcome to Code Composer Studio v4» introduit à un tutoriel de départ, des

exemples et des informations sur les composants. Cliquer sur le cube à droite pour commencer l’emploi de CCS4.

II. Créer un projet

Le processus de développement de code de CCS commence par la création d'un projet qui facilite l’intégration des fichiers requis pour produire un fichier exécutable. Le répertoire projet contient des références aux fichiers source (*.c, *.asm) aux fichiers d’en-tête (*.h), au fichier de commande pour l’éditeur de liens (*.cmd), et aux fichiers de bibliothèque (*.lib). Le projet permet aussi de spécifier les paramètres du compilateur, de l'assembleur et de l'éditeur de liens afin de produire le fichier exécutable.

1. Après l’ouverture du logiciel, ouvrir la perspective du projet « Window

→Open Perspective→ C/C++ » de la barre menu de CCS.

2. Pour créer un projet, vous choisissez l'élément de menu « File →New→CCS Project » de la barre menu. Dans celle-ci, vous introduisez un nom de projet dans le champ « Project name » (lab1, par exemple).

3. Poursuivre avec le type du projet en sélectionnant : « Project Type : C6000»

pour le TMS320C6713.

3

4. Poursuivre et sélectionner dans «Device Variant: Generic C67xx Device» pour le TMS320C6713 et «Runtime Support Library : RTS6700.lib».

5. Poursuivre et sélectionner dans la fenêtre «Project Templates» l’item «Empty Projects / Empty Project Device» .

4

III. Créer un fichier source

CCS fournit un éditeur intégré qui permet la création des fichiers sources. Une fenêtre d'éditeur apparaît en choisissant l'élément de menu « File → New File ». Le nom du fichier sera : initmem.asm pour notre exemple puis écrivons le code suivant dans cette fenêtre d'éditeur :

.sect ".mydata" .short 0 .short 7 .short 10 .short 7 .short 0 .short -7 .short -10 .short -7 .short 0 .short 7

Ce code déclare 10 valeurs numériques en utilisant la directive « .short ». La directive

« .sect » spécifie que les 10 valeurs doivent résider dans une section de la mémoire du DSP appelée « .mydata »; les adresses physiques qui correspondent à cette section seront définies plus tard dans un fichier d'édition de liens « .cmd ». Vous sauvegardez le fichier source créé en choisissant l'élément de menu « File→Save ».

5

IV. Créer un fichier de commande pour l’éditeur de liens

En plus des fichiers sources, un fichier de commande d'éditeur de liens «Linker» doit être créé pour générer un fichier exécutable et pour se conformer aux spécifications de mémoire du DSP et de la cible sur laquelle le fichier exécutable va être compilé. Un fichier de commande d'éditeur de liens «Linker» peut être créé en utilisant la même procédure que pour le fichier précédant (en choisissant « File→New File »). Pour l’exemple en cours, nous allons considérer le fichier de commande suivant créé sous le nom de : lab1.cmd

MEMORY

{ IVECS: org = 0h, len = 0x220 /*vector section*/ IRAM: org = 0x00000220, len = 0x00002FDE0 /*internal memory*/ SDRAM: org = 0x80000000, len = 0x00010000 /*external memory*/ MYDATA: org = 0x80010000, len = 0x00100000 /*external memory*/ FLASH: org = 0x90000000, len = 0x00020000 /*flash memory*/

}

SECTIONS

{ .vectors :> IVECS .text :> IRAM .bss :> IRAM .cinit :> IRAM .stack :> IRAM .sysmem :> SDRAM .const :> IRAM .switch :> IRAM .far :> SDRAM .cio :> SDRAM .mydata :> MYDATA

}

Puisque notre objectif est de placer les valeurs définies dans le fichier initmem.asm dans la mémoire, un espace qui ne sera pas recouvert par le compilateur devrait être choisi. Les espaces de données externes SDRAM ou MYDATA peuvent être utilisés à cette fin. Commençons par assembler les données à l'adresse de mémoire 0x80010000 (0x dénote l'hexadécimal), située en mémoire externe. Pour faire ceci, assignez la section nommée « .mydata » à MYDATA en ajoutant « .mydata :> MYDATA » dans la partie SECTIONS du fichier de commande, comme déjà indiqué dans le programme ci-dessus. La fenêtre d'édition sera sauvegardée dans le fichier de commande d'éditeur de liens «Linker» en choisissant « File→Save ».

V. Ajout de fichiers de support au projet

En plus des fichiers existants « initmem.asm » et « lab1.cmd », des fichiers supports pour le TMS320C6713et la cible DSK6713 devront être inclus au projet sous forme de librairie et répertoire « Include» . Ces fichiers seront implantés au projet dans les prochains laboratoires.

6

VI. La mise au point du projet

Pour la mise au point, nous utilisons un programme interpréteur de commandes interactif vide. Créez un fichier source en C qu’on appellera « main.c », écrivez les lignes suivantes.

#include <stdio.h>

void main() {

printf(“BEGIN\n”); printf(“END\n”);

}

Après avoir ajouté tous les fichiers sources, fichier de commande et fichier de bibliothèque au projet, vous pouvez construire le projet et créer un fichier exécutable pour le DSP-cible. Pour cela, choisissez l'élément de menu «Project→Build Active Project». Cette fonction permet au CCS de compiler, assembler, et joindre tous les fichiers dans le projet.

Si le processus de construction est complété sans erreur, le fichier exécutable

«lab1.out» est produit. Il est également possible de compléter cette opération par incréments; c'est-à-dire en recompilant ou en assemblant seulement des fichiers changés depuis la dernière construction, en choisissant l'élément de menu « Project→Rebuild Active Project ».

Bien que CCS fournisse des options par défaut, ces options peuvent être changées en choisissant « Project→Properties ». Par exemple, pour changer le nom du fichier exécutable en « test.out », choisissez « Project→Properties», et cliquez sur « C/C++ Build → C6000 Linker Basic Options » et parmi les options de construction; taper alors « test.out » dans la zone «Specify output file name ».

7

VII. Le suivi de l’exécution (mode Debug)

Une fois que le processus de construction est complété sans aucune erreur, le programme peut être chargé et exécuté sur la ca r te DSP cible ou un simulateur.

Pour l’installation sur la carte cible DSK TMS320C6713 :

1. Cliquer sur « Target→New Target Configuration… ». 2. Entrer le nom de la cible dans le champs «File name » par exemple DSK6713.ccmxl

et cocher «Use shared location» suivi de «Finish». 3. Sélectionner la cible Spectrum Digital DSK-EVM eZdsp onboard USB emulator

dans la fenêtre «Connection», cocher le DSK6713 dans la fenêtre «Device» et terminer en sauvegardant la configuration avec «Save». La carte DSP cible «DSK6713.ccmxl» sera sélectionnée automatiquement par défaut pour tous les nouveaux projets.

8

9

Pour télécharger et émuler le programme sur la carte DSP cible, faire les étapes suivantes :

1. Choisissez « Target→Lauch TI Debugger ». Code composer ouvrira une page avec la perspective du mode «Debug».

2. Choisissez « Target→Connect Target » pour le branchement de la carte cible DSK 6713.

3. Choisissez « Target→Load Program… » pour transférer le programme compilé (Ex : Lab1.out) vers la cible.

Pour revenir en perspective d’édition C/C++, terminer la session «Debug» en choisissant « Target→Terminate All » ou encore en cliquant sur le carré rouge du menu.

Pour exécuter le programme, choisissez l'élément « Target→Run » pour un mode

continu et les éléments« Target→Step… » pour le mode étape par étape. Ces commandes sont aussi disponibles sous forme d’icônes sur la ligne de menu rapide. Lors de l’exécution «Run», vous devriez voir apparaître « BEGIN » et « END » dans la fenêtre console « Stdout » (en bas de l’écran).

10

Maintenant, allons vérifier si l’ensemble des valeurs est assemblé dans l'emplacement de mémoire indiqué. CCS permet de visualiser le contenu de la mémoire à un emplacement spécifique. Pour visualiser le contenu de la mémoire à l’adresse 0x80010000, choisissez « View→Memory » à partir du menu. La fenêtre de dialogue «Memory » permet de spécifier divers attributs d’affichage de la fenêtre. Allez à la zone « Adress Text », écrivez 0x80010000 et sélectionnez « 16bit Signed Integer » dans le champ du format. D’autres options sont disponibles à partir de la barre menu pour sauvegarder ou charger des données d’une plage mémoire à partir d’un fichier du PC et remplir une plage mémoire avec une valeur prédéterminée (voir Help).

VII. L’outil d’affichage graphique

Un affichage graphique des données fournit souvent un meilleur aperçu du comportement d'un programme. CCS fournit une interface d'analyse de signal pour surveiller un signal ou ses données. Commençons par afficher le choix de valeurs à l’adresse 0x80010000 comme un signal ou un graphique de temps. Pour ce faire, choisissez « Tool→Graph→Single Time » pour visualiser la fenêtre de propriété du graphique. Allez au «Start Address Field », cliquez dessus, puis tapez 0x80010000. Ensuite, allez à «Acquisition Buffer Size » et «Display Data Size », cliquez dessus et écrivez " 10".

Finalement, cliquez sur «DSP Data Type», choisissez «16-bit Signed Integer» à partir de la liste déroulante, et cliquez sur OK. Alors, une fenêtre du graphique apparaîtra avec les propriétés choisies comme illustré ci-dessous.

11

Vous pouvez modifier n'importe lequel de ces paramètres à partir de la fenêtre graphique en cliquant sur le bouton à droite de la souris, ensuite choisissez «Properties», et ajustez comme voulu. Notez que les propriétés peuvent être mises à jour à tout moment pendant le procédé de mise au point.

VIII. L’usage d’un pointeur pour accéder aux données

Pour assigner un pointeur au début de l'espace mémoire assemblé, l'adresse de la mémoire doit être saisie directement par ce pointeur. Le code suivant peut être employé pour assigner un pointeur au début des valeurs et parcourir celles-ci pour imprimer chacune d’elles sur la console « Stdout »:

#include <stdio.h>

void main() {

int i; short *point; point = (short *) 0x80010000; printf ("BEGIN\n"); for (i = 0; i < 10; i++)

printf ("[%d]%d\n",i,point[i]); printf ("END\n");

}

Au lieu de créer un nouveau fichier source, nous pouvons modifier le fichier «main.c» existant en double cliquant sur le fichier «main.c» dans le panneau de configuration du projet. Cette action apportera vers le haut de l’écran le fichier source « main.c », et alors vous pouvez le modifier à partir de cette fenêtre et reconstruisez-le après. Avant d'exécuter le fichier exécutable, assurez-vous d’avoir rechargé le fichier lab1.out. En exécutant ce fichier, vous devriez pouvoir voir les valeurs dans la fenêtre console «Stdout ».

12

IX. Les points d’arrêt

Durant le développement ou le test des programmes, on doit souvent contrôler la valeur d'une variable pendant l'exécution du programme. Ceci peut être réalisé en utilisant des points d'arrêt (BREAKPOINT) et des « Watch Windows ».

Pour visualiser les valeurs du pointeur dans « main.c » avant et après l'assignation de celui-ci, il faut redémarrer le programme «Target→Restart » dans le mode «Debug» et ouvrir « main.c ». Ensuite, mettre votre curseur au début la ligne qui indique « point = (short *) 0x80010000 » et double cliquez pour placer un point d'arrêt. Ensuite, choisissez « View→Watch » à partir de la barre de menu pour ouvrir un « Watch Window ».

Pour ajouter une nouvelle expression dans cette fenêtre, cliquez par-dessus cette fenêtre «Name» et tapez « point » (ou toute expression que vous voulez examiner). Ensuite, choisissez « Target→Run ». Le programme s'arrête au point d'arrêt et la valeur du pointeur apparaît sur la fenêtre « Watch ». Ceci est la valeur avant que le pointeur ne soit placé à 0x80010000. En appuyant sur F6 «Step Over», vous faites un pas au-dessus de la ligne, vous devriez pouvoir voir la valeur 0x80010000 dans la fenêtre «Watch ».

X. Les fonctions

Pour ajouter une simple fonction en C qui fait la somme des valeurs, nous pouvons simplement passer le pointeur par l'alignement de valeur et avoir un retour de nombre entier. Pour l'instant, considérant que nous n'utilisons pas l'assembleur, ce qui nous concerne n'est pas comment les variables sont additionnées, mais plutôt combien de temps i l f a u t pour exécuter l'opération.

La fonction simple suivante peut être employée pour additionner les valeurs et pour renvoyer le résultat: #include <stdio.h>

int ret_sum (const short* array, int N) {

int count, sum; sum = 0; for (count = 0; count < N; count++ )

sum += array [count]; return (sum);

}

void main() {

int i, ret; short *point; point = (short *) 0x80010000; printf ("BEGIN\n"); for (i = 0; i < 10; i++)

printf ("[%d] %d\n", i , point[i]); ret = ret_sum (point , 10); printf ("Sum = %d\n", ret ); printf ("END\n");

}

13

XI. La mesure de performance (évaluation du temps d’exécution)

En tant qu'élément du procédé de mise au point, il est normalement nécessaire de chronométrer l'application du programme. Dans cet exemple, nous allons déterminer combien de temps prend la fonction « ret_sum » pour s’exécuter.

La mesure de performance est plus précise lorsque le simulateur du C6713 est utilisé

comme cible. Le simulateur cible est configuré en créant un fichier de configuration dans le projet en mode édition C/C++ comme le «DSK6713.ccxml».

1. Créer le fichier de la cible «Simul6713.ccxml» dans votre projet «

Target→New Target Configuration…» 2. Sélectionner Texas Instrument Simulator dans la fenêtre «Connection», cocher

le «C6713 Device Cycle Accurate Simulator, Little Endian» dans la fenêtre «Device» et terminer en sauvegardant la configuration avec «Save».

3. Dans l’arborescence des fichiers à gauche de l’écran, assurez-vous que l’expression « [Active] » apparaisse à droite du fichier cible du simulateur.

4. Télécharger le programme dans le simulateur «Target→Debug Active Project».

5. Pour chronométrer la fonction « ret_sum » facilement, il s’agit d’activer l’horloge «Target→Clock→Enable» et régler les paramètres «Count: cycle.CPU» et «Reset Option: Auto» .

Une Horloge avec un compte s’affiche au bas de l’écran.

6. Insérer un point d’arrêt«BreakPoint» en double-cliquant sur la ligne du programme « ret = ret_sum (point, 10); » et un autre point d’arrêt à la ligne suivante «printf("Sum=%d\n",ret);».

14

7. Exécuter le programme avec «Run», le programme s’arrêtera au premier point d’arrêt.

8. Continuer le programme avec «Run», jusqu’au second point d’arrêt. 9. Prendre en note le compte de l’horloge (ex: 307)

L’outil «Profile» est aussi disponible pour mesurer la performance du programme.

1. Désactiver les points d’arrêt en double cliquant sur le point. Recharger le programme « Target→Debug Active Project ».

2. Choisissez « Tools→Profile→Setup Profile Data Collection ». La fenêtre «Profile Setup» s’ouvrira, cliquer sur «Activate» si le profile n’est pas déjà actif.

3. Cocher «Profile all Functions for Total Cycles», ouvrir «Properties» pour cocher cycle→CPU→true et sauvegarder «Configuration 1» en cliquant sur «Save».

15

4. Exécuter le programme avec «Run». Enfin aller à « Tools→Profile→View Function Profile Results » pour visualiser le rapport du profil. La fenêtre cycles du menu doit être sélectionnée à cycle.CPU pour avoir une lecture équivalente à l’autre méthode.

16

TRAVAIL DEMANDÉ

1. Utiliser CCS pour écrire un programme qui calcule le produit scalaire de deux vecteurs, chacun contenant trois nombres entiers, et affiche le résultat sur la sortie « Stdout ». Les vecteurs doivent être définis dans un fichier d’entête avec les valeurs [3,6,9] et [2,4,6].

2. Modifier votre programme de manière à ce que la fonction main et la fonction de multiplication résident dans des fichiers séparés.

3. Écrire un programme qui génère deux périodes d’un sinus à raison de 256 points par cycle et qui les emmagasine en mémoire.

a. Utiliser l’utilitaire d’affichage graphique pour vérifier que le signal emmagasiné est bon.

b. Reprendre l’affichage graphique en utilisant l’option Transformée de Fourier. c. Faire varier la taille du tampon (de 256 à 512) et expliquer la courbe obtenue

dans chaque cas.

Note : Vous devez fournir un rapport qui explique votre démarche, incluant tous les codes et les graphiques générés et qui répond à toutes les questions. Votre rapport doit aussi contenir une introduction et une conclusion.