Polycope TP dsp

of 24/24
Polycopié de Travaux Pratiques DSP Filière Génie Electrique S. E. NAIMI Ecole Nationale des Sciences Appliquées Oujda Option Microélectronique
  • date post

    22-Oct-2015
  • Category

    Documents

  • view

    607
  • download

    84

Embed Size (px)

description

tp dsp ensa oujda

Transcript of Polycope TP dsp

  • Polycopi de Travaux Pratiques DSP Filire Gnie Electrique S. E. NAIMI

    Ecole Nationale des Sciences Appliques Oujda

    Option Microlectronique

  • Page 2 sur 24

    Gnralits

    Lensemble C6713 DSK (Development System Kit) est un outil de dveloppement qui permet des utilisateurs de mettre au point et de tester des applications utilisant le processeur de traitement de signal Texas Instruments (TI) TMS320C6713. Autour de ce DSP sont connects une grande varit de priphriques permettant une large gamme dapplications en traitement numrique du signal. Ainsi, la configuration ralise est une rfrence qui, dans beaucoup de cas standards, peut viter le temps de dveloppement du hardware .

    La carte

    TMS320C6713 : DSP de la gamme TI travaillant 225 MHz. Il est connect ses priphriques par un bus de 32 bits.

    Un codec stro AIC23 ddi linterfaage pour les applications audio . Il comprend les convertisseurs CAN pour la capture de signaux (LINE IN, MIC IN) et les convertisseurs CNA pour lexportation de signaux (LINE OUT, HP OUT).

    Le dialogue entre le processeur et le codec est ralis par un multiplexeur McBSP (Multi-channel Buffered Serial Port), c'est--dire un multiplexeur port srie. En ralit, intgrs avec le processeur, il y a deux multiplexeurs : McBSP0 qui est prvu pour le

  • Page 3 sur 24

    contrle du codec (programmation de fonctions et des tches) et McBSP1 qui est charg de lchange des donnes collectes ou transmettre.

    Une CPLD : composant de logique programmable qui contient entre autre la logique de connexion des divers composants entre eux. Elle contient aussi des registres accessibles lutilisateur permettant de configurer la carte ou daccder la configuration en place.

    Une SDRAM synchrone de 8 Mga-octets.

    Une mmoire Flash de 512 Kilo-octets.

    4 LEDs et 4 interrupteurs (DIP) accessibles par les registres de la CPLD et permettant un dialogue simple entre la carte et lutilisateur.

    Des options dinitialisation configurables (SW3).

    Une possibilit dextension standard vers une autre carte (Peripheral Expand).

    Une mulation JTAG autorisant le dialogue avec un hte extrieur via une connexion USB.

    Une seule alimentation est requise en +5V.

    Le logiciel : Code composer studio (CCs)

    Fourni avec le kit de dveloppement, le CCS contient tous les outils logiciels ncessaires pour la ralisation dapplications avec la carte prcdente. Le cur de ce systme est un IDE (Integrated Development Environment) qui permet de travailler sur lordinateur hte partir dune seule fentre dapplication. Les utilitaires sont ainsi accessibles par menus droulants et botes de dialogue. Cela comprend :

    La configuration de CCS.

    Ldition de programmes dapplication en C ou C++.

    La gnration de code (compilation, dition des liens, assembleur).

    La visualisation et (ou) modification du code assembleur. Ceci permet une optimisation du code.

    Chargement de lapplication dans la mmoire de la carte cible.

    Une aide au dveloppement autour dun noyau temps rel qui permet : une planification des tches, une capture et analyse (liste, graphes) en temps rel des donnes manipules.

    CCS est un environnement IDE qui incorpore les outils logiciel ncessaires au dveloppement. Il inclut les outils pour la gnration du code tel quun compilateur C, un assembleur et un linker. Il support le debugging temps rel. Le processus (simplifi) permettant daboutir un fichier excutable partir dun programme crit en langage C, est le suivant :

  • Page 4 sur 24

    Compilateur C

    programme source crit en C extension : .c

    fichier source assembl extension : .asm

    fichier objet, fichier en langage machine extension : .obj

    Assembleur

    combinaison des fichiers objets et les librairies

    produit un excutable extension : .out Ce fichier excutable est sous le format

    COFF (common object file format)

    Linker

    Le fichier .out est alors charg, excut sur le processeur C6713

  • Page 5 sur 24

    Types de fichiers et Extensions

    Vous travaillerez avec plusieurs fichiers avec des extensions diffrentes.

    1. Fichier.pjt : pour crer et construire un projet nomms Fichier 2. Fichier.c : programme source en langage C 3. Fichier.asm : programme source assembl cr par l'utilisateur, par le compilateur C ou

    par l'optimiseur linaire (linear optimizer) 4. Fichier.sa : programme source de lassembleur linaire. L'optimiseur linaire peut

    produire partir de ce fichier un programme assembl Fichier.asm 5. Fichier.h : fichier de support (d'entte) 6. Fichier.lib : fichier bibliothque 7. Fichier.cmd : fichier de commande du Linker (mappage des sections vers la mmoire) 8. Fichier.obj : fichier objet cr par lassembleur 9. Fichier.out : fichier excutable cr par le linker devant tre charg et excut par le

    processeur C6713 10. Fichier.cdb : fichier de configuration quand le DSP/BIOS est utilis

    Instalation de Code Composer Studio

    1. Vrifiez que vous avez les privilges dun administrateur sur votre PC, que les anti-virus sont dsactivs et que la carte nest pas connecte au PC

    2. Mettez le CD (CCS) dans le lecteur de CD, attendez lapparition du menu 3. Slectionnez Install Product 4. Installez les trois produits : C6000 Code Composer Studio, FlashBurn, et DSK6713

    Drivers & Target Content (Dans le dossier C:\C6713) 5. Des icones apparaissent dans le bureau de votre PC : C6713 DSK CCStudio v3.1 et 6713

    DSK Diagnostics Utility v3.1 6. Laissez le CD dans le lecteur pour une prochaine tape (linstallation des Drivers)

    Connexion de la carte DSK

    1. Connectez le cble USB votre PC (une extrmit du cble seulement) 2. Branchez, sil y a lieu, les connexions audio (microphone, haut parleur,). La tension

    lentre audio ne doit en aucune manire dpasser 2 Volts crte crte (2Vpp) 3. Connectez ladaptateur la prise murale 4. Connectez ladaptateur la carte DSK, et attendez le cycle des diodes 10-15 secondes.

    En fin de cycle deux diodes restent allumes 5. Connectez lextrmit restante du cble USB la carte DSK 6. Laissez Windows trouver les drivers USB (automatique dans XP)

    Test de la connexion

    1. Double cliquez sur licne 6713 Diagnostic 2. Appuyez sur Start et attendez les feus verts

    a. Si une erreur se produit ltape Codec diagnostics , dconnectez toutes les entes sorties de AIC23 (MIC IN, LINE IN, )

    3. Appuyez sur Stop et quittez (fermez la fentre)

  • Page 6 sur 24

    Test dun programme exemple

    1. Dcompressez le fichier zipp test.zip dans le dossier : C:\CCStudio_v3.1\MyProjects 2. Lancez CCS (double cliquez sur licne du bureau, 6713 DSK CCStudio 3.1)

    3. Appuyez sur Alt-C pour connecter le logiciel la carte DSK ou Debug Connect

    4. File Load Program : a. Charger le programme : C:\CCStudio_v3.1\MyProjects\Sine8_LED\Debug\

    Sine8_LED.out

    5. Debug Run 6. Appuyez maintenant sur le bouton Switch #0 de la carte DSK, la diode #0 doit sallumer,

    un signal de 1kHz est prsent la sortie audio de la carte (ceci gnre un son audible si des hauts parleurs sont connects la carte), visualisez le signal de sortie loscilloscope

    7. Debug Halt

    TP1 Programmation dexemples de test pour la DSK

    Trois programmes sont introduits pour illustrer quelques-uns des traits de loutil CCS et de la carte DSK. Lobjectif est de vous familiariser avec lenvironnement logiciel et matriel.

    Manipulation N1

    Cet exemple produit une sinusode partir dune table de donnes, il illustre quelques traits de CCS : dition, construction dun projet, accs aux outils de gnration de code, et excution dun programme sur le processeur C6713. Le code source en C, programme sine8_LED.c, ci-dessous sera tudi et implment.

    Le programme

    Le programme est disponible dans le dossier TP1 sous le nom Sine8_LED.c

    //Sine8_LED.c gnration dune fonction Sinus en appuyant sur un switch de

    //contrle DIP

    #include "dsk6713_aic23.h" //fichier entte pour le codec,DSK

    Uint32 fs = DSK6713_AIC23_FREQ_8KHZ; //fixe la frquence dchantillonnage

    short loop = 0; //indice de la table

  • Page 7 sur 24

    short gain = 10; //facteur de gain

    //valeurs de la sinusode

    short sine_table[8]={0,707,1000,707,0,-707,-1000,-707};

    void main()

    {

    comm_poll(); //initialisation de la DSK, du codec, et du McBSP

    DSK6713_LED_init(); //initialisation des LED partir de BSL

    DSK6713_DIP_init(); //initialisation des switch DIP partir de BSL

    //BSL : Board Support Library (fonctions

    //incluses dans CCS sous forme de librairies

    //dsk6713bsl.lib

    while(1) //boucle infinie

    {

    if(DSK6713_DIP_get(0)==0) //=0 si le switch #0 est enfonc

    {

    DSK6713_LED_on(0); //la LED #0 et ltat ON (allume)

    output_sample(sine_table[loop]*gain); //output chaque Ts (SW0 on)

    if (++loop > 7) loop = 0; //vrification de fin de table

    }

    else DSK6713_LED_off(0); //LED #0 off

    } //fin de la boucle while(1)

    } //end of main

    Analyse du programme

    Une table sine_table est cr et rempli avec huit points qui reprsentent 1000 x sin(t), o t = 0, 45, 90, 135, 180, 225, 270 et 315 degrs.

    Dans la fonction principale main, une autre fonction, comm_poll, est appele. Cette fonction est localise dans le fichier support la communication et l'initialisation, c6713dskinit.c . Elle initialise la DSK, le codec AIC23 interne de la DSK, ainsi que les deux McBSPs sur le processeur C6713. La fonction fille DSK6713_init du fichier c6713dskinit.c

    initialise le fichier BSL Board Support Library (dsk6713bsl.lib) qui doit tre appel avant les deux subsquentes fonctions BSL, DSK6713_LED_init et DSK6713_DIP_init. Ces deux dernires fonctions sont invoques pour initialiser les quatre LED et les quatre Switch.

    La dclaration while(1) dans la fonction principale cre une boucle infinie. Quand le switch #0 est press, la LED #0 est mise ltat ON et une sinusode est produite. Autrement, DSK6713_DIP_get (0) sera faux (vrai si le switch est press) et la LED #0 est ltat OFF.

    La fonction output_sample, situ dans le fichier de support la communication, C6713dskinit.c , est appel pour mettre en sortie une donne de la table sine_table[loop](avec le gain). L'indice de la boucle est incrment jusqu' la fin de la table puis rinitialis.

    Chaque priode de l'chantillonnage Ts = 1/fs = 1/8000 = 0.125ms, le switch #0 est test, et la donne subsquente de table sinus est envoye (avec une mise chelle, gain=10) la sortie.

  • Page 8 sur 24

    Dans une priode, huit valeurs des donnes (spares de 0.125ms) sont produits pour gnrer la sinusode. La priode du signal produit est T = 8 x 0.125ms = 1ms, elle correspond une frquence de f = 1/T = 1kHz.

    Cration du projet

    Dans cette section nous illustrons comment crer un projet, en ajoutant les fichiers ncessaires pour construire le projet sine8_LED. Le dossier TP1\Sin8_LED fournie par lenseignant, contient trois fichiers : sin8_LED.c, gain.gel et sin8_LED.out.

    Crer dans un premier temps le dossier C:\c6713\MyProjects\GE5\sine8_LED\ (ou C:\CCStudio_v3.1\MyProjects\GE5\sine8_LED\)

    Copier les fichiers sin8_LED.c et gain.gel et le dossier Support dans le dossier C:\...\GE5\sine8_LED

    1. Pour crer le projet sine8_LED.pjt :

    Allez Project New Entrez le nom du projet : sine8_LED Enregistrez le fichier dans le dossier : C:\c6713\MyProjects\GE5\sine8_LED\ Slectionnez pour Target : TMS320C67XX

    Le fichier .pjt contient les informations sur la construction du projet, les noms des fichiers sources et les liens

    2. Pour ajouter des fichiers au projet :

    Slectionnez : Projet Add Files to Project Regardez dans le dossier TP1\support, choisissez le filtre de fichier : fichiers

    source de type C Cliquez deux fois sur le fichier source (en C) c6713dskinit.c pour l'ajouter

    au projet. Cliquez sur le symbole "+" du dossier Source dans la fentre Project File de CCS,

    et vrifiez que le fichier source en C est a t ajout au projet De mme que prcdemment ajouter le fichier sin8_LED.c au projet

    3. Rptez ltape 2, pour ajouter les fichiers vectors_poll.asm et C6713dsk.cmd 4. Pour ajouter les fichiers librairies au projet, rptez ltape antrieure :

    Ajoutez le fichier run time : C:\c6713\c6000\cgtools\lib\rts6700.lib au projet

    Ajoutez le fichier BSL : C:\c6713\c6000\dsk6713\lib\dsk6713bsl.lib

    Ajoutez le fichier CSL : chip support library : C:\c6713\c6000\bios\lib\csl6713.lib ou

    C:\c6713\c6000\csl\lib\csl6713.lib

    5. Vrifiez dans lexplorateur de fichier de CCS (CCS Project Windows) que : Le fichier projet (.pjt) Le fichier linker (.cmd) Les trois fichiers bibliothque (.lib)

  • Page 9 sur 24

    Les deux fichiers source C (.c) Et le fichier assembl (.asm) ; ont t ajouts au projet. Le fichier GEL dsk6713.gel est ajout automatiquement quand vous crez le

    projet. Ce fichier initialise la C6713 DSK en invoquant le BSL pour utiliser la boucle verrouillage de phase (PLL) et fixer la frquence de lhorloge du CPU (central processing unit) 225MHz (autrement, la C6713 fonctionne 50 MHz par dfaut).

    6. Notez qu'il ny a encore, aucun fichier dentte inclus include

    Slectionnez : Project Scan All File Dependencies, ceci ajoute/inclus les fichiers entte : c6713dskinit.h, dsk6713.h, dsk6713_aic23.h

    La fentre de fichier CCS devrait apparaitre comme dans la figure ci-dessous. Tous les fichiers (except les fichiers bibliothque) de la fentre peuvent tre affichs en cliquant dessus. Vous ne devez pas ajouter de fichiers en-tte ou include , ils sont ajouts automatiquement au projet quand vous slectionnez : Scan All File Dependencies (ils sont aussi ajouts quand vous construisez (build) le projet)

    Il est aussi possible d'ajouter simplement les fichiers un projet en slectionnant ceux-ci et en les dposants dans la fentre projet de CCS.

    Gnration du code, les options

    Plusieurs options sont associes aux outils de gnration de code (le compilateur C et le linker) pour construire un projet.

    Les options du compilateur

  • Page 10 sur 24

    1. Slectionnez : Project Build Options Onglet Compiler 2. Slectionnez Basic sous Category puis les options suivantes :

    c671x {- mv6710} pour Target Version Full Symbolic Debug (-g) pour Generate Debug Info Speed Most Critical pour Opt Speed vs Size None pour Opt Level None pour Program Level Opt

    3. Slectionnez Preprocessor sous Category puis : Entrez CHIP_6713 pour Pre-Define Symbols (-d) : Entrez le chemin C:\...\C6000\dsk6713\include

    4. Slectionnez Feedback sous Category puis : Slectionnez None pour Interlisting

    5. Slectionnez Advanced sous Category puis : Slectionnez Far (-mem_model:data=far) pour Memory Models

    Les options du compilateur sont finalement : -g -s

    Loption -g est utilise pour avoir accs aux informations symbolique durant le dbogage, ceci est trs utile pendant le processus de dbogage. Cette option est utilise conjointement avec l'option -s pour interlister le fichier source en C avec le fichier assembl Sine8_LED.asm gnr (une option supplmentaire, -k, peut tre utilis pour retenir le fichier source assembl). Loption -g dsactive loptimisation du code pour faciliter le processus du dbogage.

    6. Appuyez sur OK.

    La slection de C621x ou C64xx pour Target Version invoque la mise en uvre de loption de calcul en virgule fixe. La DSK base du C6713 peut faire le traitement en virgule fixe ou flottante. La slection de C671x comme Version de la Cible invoque une mise en uvre du calcul en virgule flottante.

    Si No Debug est slectionn pour Generate Debug Info et -o3 : File est slectionn pour Opt Level , l'option du compilateur est automatiquement change en : -s -o3.

    Loption -o3 invoque le plus haut niveau d'optimisation des performances ou de la vitesse dexcution. Pour le moment, la vitesse n'est pas critique. Utilisez les options -g -s du compilateur (que vous pouvez taper directement dans la fentre commande en ligne du compilateur). Dans un premier temps le concepteur n'optimiserait pas la vitesse dexcution mais la facilit de dbogage. Plusieurs options du compilateur sont dcrites dans la documentation TMS320C6000 Optimizing C Compiler Users Guide .

    Les options du Linker

    1. Slectionnez : Project Build Options Onglet Linker

  • Page 11 sur 24

    2. Slectionnez Basic sous Category puis les options suivantes : .\Debug\Sine8_LED.out pour Output Filename (-o) .\Debug\Sine8_LED.map pour Map Filename (-m) Run-Time Autoinitialization (-c) pour Autoinit Model Dcauchez () loption Suppress Banner (-q) Cauchez () loption Exhaustively Read Libraries (-x)

    3. Slectionnez Advanced sous Category et vrifiez quaucune case nest coche ou remplie.

    Le fichier Sine8_LED.map peut fournir des informations utiles pour dboguer le programme (emplacements des fonctions dans la mmoire, etc.). Loption -c est utilise pour initialiser les variables, et loption -o est utilise pour nommer le fichier de sortie excutable sine8_LED.out.

    Notez que vous pouvez/devez choisir dentreposer le fichier excutable dans le sous dossier \Debug au lieu du dossier \sine8_LED, surtout pendant l'tape du dbogage dun projet.

    Construction et excution du projet (Building and Runnig)

    Le projet sine8_LED peut maintenant tre construit et excut.

    1. Construisez le projet sine8_LED :

    Slectionnez : Project Rebuild All ou appuyez sur licne i. Ceci compile et assemble tous les fichiers C en utilisant cl6x

    ii. Assemble le fichier assembl vectors_poll.asm en utilisant asm6x iii. Le fichier objet rsultant est li avec les fichiers bibliothque en utilisant

    lnk6x iv. Cela cre un fichier excutable sine8_LED.out qui peut tre charg dans le

    processeur C6713 et excut. v. Un fichier log (cc_build_Debug.log) est cre, il montre les dtailles

    des tapes de compilation et dassemblage

    2. Slectionnez : File Load Program

    Chargez lexcutable : C:\...\sin8_LED\Debug\sine_LED.out

    3. Slectionnez : Debug Run ou appuyez sur licne 4. Connectez un haut parleur ou des couteurs ou dfaut loscilloscope la sortie LINE

    OUT de la DSK 5. Appuyez sur le switch #0

    La diode #0 doit sallumer Vous devez entendre au mme temps un son (si vous dispos du matriel

    ncessaire) Vous devez voir loscilloscope un signal sinusodal (Relevez la frquence et

    lamplitude de ce signal)

    Comme la frquence d'chantillonnage Fs du codec est fixe 8kHz. La frquence du signal produit est f = Fs / (nombre de points) = 8 kHz/8 = 1kHz. Lamplitude approximative est de 0.8 V p-p (peak to peak).

  • Page 12 sur 24

    Correction des Erreurs

    1. Effacez le point-virgule ; de la ligne short gain = 10 du programme sin8_LED.c

    2. Slectionnez : Project Build ou appuyez sur licne (incremental build) a. On choisi la construction incrmentale car seul le fichier sin8_LED.c est

    compil 3. Un message derreur dclarant qu'un " ;" est attendu, devrez apparatre dans la

    fentre en bas gauche de la fentre principale de CCS. 4. Cliquez deux fois sur la ligne du message d'erreur (en rouge). Cela devrait mettre le

    curseur la section de code o l'erreur a lieu 5. Faite la correction approprie, Construisez encore, chargez et excutez le

    programme pour vrifier vos rsultats antrieurs.

    Monitoring de la fentre Watch

    Vrifiez que le programme est en court dexcution dans le processeur, notez lindicateur

    DSP RUNNING en bas gauche de la fentre de CCS (faite un test du switch #0). La fentre Watch permet de changer la valeur d'un paramtre ou le monitorat dune

    variable :

    1. Slectionnez : View Watch Window, une fentre doit apparatre en bas de CCS

    2. Slectionnez : View Quick Watch Tapez gain et cliquez sur Add to Watch, la valeur du gain gale 10 doit

    apparatre dans la fentre Watch 3. Changez le gain de 10 30 dans la fentre Watch. Appuyez sur Enter

    Vrifiez que lamplitude de la sinusode a augmente (avec le processeur toujours en excution et le switch #0 enfonc)

    Lamplitude du signal doit augmenter de 0.8V p-p 2.5V p-p 4. Changez le gain 33 (comme dans ltape 3). 5. Vrifiez que la frquence du signal augmente. Ceci implique que la frquence de

    la sinusode a change juste en changeant son amplitude ! Ce n'est pas le cas.

    Vous avez dpass la gamme du codec AIC23. Puisque les valeurs dans la table sont multiplies par 33, la gamme de ces valeurs est maintenant entre 33,000. La gamme de valeurs de la sortie est limite entre -32 768 +32 767 (ou de -215 (215 - 1)).

    Puisque l'AIC23 est un codec stro, nous pouvons envoyer les donnes aux deux canaux 16 bit chaque priode de l'chantillonnage (voir TP d'exprimentation des effets stro).

    Application du fichier Slider Gel

  • Page 13 sur 24

    Le langage GEL (General Extension Language) est un langage interprt semblable (un

    sous-ensemble de) C. Il vous permet de changer une variable telle que gain pendant que le processeur fonctionne. Toutes les variables doivent tre au pralable tre dfinies dans le programme source.

    1. Slectionnez : File Load GEL

    Ouvrez le fichier \sine8_LED\gain.gel 2. Double-cliquez sur le fichier gain.gel pour le visualiser dans la fentre de CCS (le

    fichier est ci-dessous)

    /*gain.gel Cre un bouton glisseur (slider) pour faire varier

    lamplitude (gain) de la sinusode*/

    menuitem "Sine Gain"

    slider Gain(10,35,5,1,gain_parameter) /*incr par 5,jusqu 35*/

    {

    gain = gain_parameter; /*varier le gain de la sinusode*/

    }

    Le gain commence avec une valeur initiale de 10 (premire valeur de Slider Gain) jusqu'

    une valeur de 35 (seconde valeur), incrment par 5 (troisimement valeur).

    3. Slectionnez : GEL Sine Gain Gain Cela devrait faire apparatre la fentre du glisseur (ci-dessus)

    4. Faite dplacer le curseur augmenter la valeur du gain de 10 15 Vrifiez que lamplitude de la sinusode produite a augment

    5. Augmentez le gain jusqu 30, 31 puis 33 Vrifiez que lamplitude de la sinusode produite est de lordre de 2.5V p-p et

    que la frquence est de 1kHz 6. Augmentez le gain 33, vrifiez la frquence nest plus gale 1kHz

    Changement de la frquence de la sinusode gnre

    1. Changez la frquence dchantillonnage de 8 16kHz

  • Page 14 sur 24

    Affectez fs la commande DSK6713_AIC23_FREQ_16KHZ (dans le fichier source en C)

    2. Recompilez le projet (utilisez la construction incrmentale ; Project Build ou

    ) 3. Chargez et excutez le nouveau fichier excutable et vrifiez que la frquence de la

    sinusode gnre est de 2kHz. Pour rappel, les frquences dchantillonnage supportes par le codec AIC23 sont 8, 16, 24, 32, 44.1, 48 et 96 kHz

    4. Changez le nombre de points dans la table (sine_table) quatre points au lieu de huit points, par exemple {0, 1000, 0, -1000}.

    La dimension de la table sine_table et de l'indice de la boucle doivent aussi tre chang

    Vrifiez que la frquence de la sinusode gnre est f = Fs/(nombre de points).

    5. Si un changement de switch est dsir (switch #3 au lieu #0), les fonctions BSL DSK6713_DIP_get(3), DSK6713_LED_on(3), et DSK6713_LED_off(3)

    peuvent tre substitues dans le programme source sine8_LED.c.

    Travail personnel demand

    Deux glisseurs peuvent tre utiliss aisment, un pour changer le gain et l'autre pour le changement de la frquence. Une frquence diffrente du signal peut tre produite en changeant lindice de la boucle dans le programme C (par exemple en effectuant un saut par deux valeurs dans la table). Ralisez les modifications ncessaires au projet pour mettre en pratique lide des deux glisseurs (un pour la modification du gain et lautre pour la modification de la frquence du signal)

  • Page 15 sur 24

    Manipulation N2

    Cet exemple produit une sinusode avec huit points, comme dans la manipulation N1. Il

    illustre les capacits de CCS pour tracer des courbes dans les domaines temporel et frquentiel. Le programme sine8_buf.c (ci-dessous) implmente ce projet. Ce programme cre une

    mmoire tampon pour entreposer les donnes produites.

    1. Crez ce projet sine8_buf.pjt

    Ajoutez les fichiers ncessaires au projet, comme dans la manipulation N1 (utilisez le programme source en C sine8_buf.c au lieu de sine8_LED.c ).

    //sine8_buf gnration dune sinus. Sortie buffrise trace avec CCS

    #include "dsk6713_aic23.h" //fichier support codec-DSK

    Uint32 fs=DSK6713_AIC23_FREQ_8KHZ; //fixe la frq. dchantill.

    int loop = 0; //indice de la table

    short gain = 10; //facteur de gain

    //valeurs de la sinusode

    short sine_table[8]={0,707,1000,707,0,-707,-1000,-707};

    short out_buffer[256]; //sortie buffer

    const short BUFFERLENGTH = 256; //taille de la sortie du buffer

    int i = 0; //pour le comptage du buffer

    interrupt void c_int11() //interrupt service routine

    {

    //valeurs de la sinus vers la sortie

    output_sample(sine_table[loop]*gain);

    //valeurs de la sortie vers le buffer

    out_buffer[i] = sine_table[loop]*gain;

    i++; //incrmentation du compteur buffer

    //si compteur en fin buffer, rinitialise le compteur

    if(i==BUFFERLENGTH) i=0;

    if (++loop > 7) loop = 0; //vrification si fin de table

    return; //retour de interrupt

    }

    void main()

    {

    comm_intr(); //initialise DSK, codec, McBSP

  • Page 16 sur 24

    while(1); //boucle infinie

    }

    Les fichiers support pour ce projet, c6713dskinit.c , vectors_intr.asm et C6713dsk.cmd ,

    sont dans le dossier \TP1\support, et les trois fichiers librairie peuvent tre ajouts comme suit :

    1. Slectionnez : Projet Build Options 2. Slectionnez Linker, puis dans loption Include Libraries tapez les noms

    des trois fichiers librairies spars par une virgule.

    Notez que puisque ce programme gre des interruptions, le fichier vectors_intr.asm est ajout au projet au lieu de vectors_poll.asm .

    Dans la fonction principale main, la fonction Comm_intr est appele (au lieu de comm_poll

    dans la manip N1). Cette fonction rside dans le fichier c6713dskinit.c pour supporter les programmes avec interruptions.

    La dclaration while(1) dans la fonction principale main cre une boucle infinie dans lattendre dune interruption. Sur interruption, l'excution continue sur la routine c_int11 (Interrupt Service Routine (ISR)). Cette adresse ISR est spcifie dans le fichier vectors_intr.asm avec une instruction de branchement cette adresse, utilisant l'interruption INT11 (Les interruptions seront tudies plus en dtail dans les prochains TP).

    Dans l'ISR, la fonction output_sample, situ dans le fichier de communication & initialisation, c6713dskinit.c, est appel pour mettre la sortie les premires donnes de

    la table sine_table. L'indice de la boucle est incrment jusqu' ce que la fin de la table soit atteinte; aprs cela, il est rinitialis zro. Une sortie tampon est cre pour capturer un total de 256 (spcifi par BUFFERLENGTH) valeurs des donnes de la sinusode. L'excution revient de l'ISR la boucle infinie while(1) pour attendre chaque interruption subsquente.

    1. Construisez ce projet sous le nom sine8_buf 2. Chargez et excutez le fichier excutable sine8_buf.out et vrifie qu'une

    sinusode de 1kHz est gnre ( loscilloscope)

    Le traage avec CCS

    La sortie tampon est mise jour chaque 256 points de faon continue (vous pouvez aisment changer la dimension du buffer). Utilisez CCS pour tracer les donnes la sortie en cours de production entrepos dans le buffer out_buffer.

    1. Slectionnez : View Graph Time/Frequency 2. Changez les informations de la fentre Graph Property Dialog comme suit pour

    Time-Domaine :

  • Page 17 sur 24

    Graph Property Dialog

    Display Type Single Time

    Graph Title Graphical Display

    Start Address out_buffer

    Acquisition Buffer Size 256

    Index Increment 1

    Display Data Size 64

    DSP Data Type 16-bit signed integer

    Q-value 0

    Sampling Rate (Hz) 8000

    Plot Data From Left to Right

    Left-shifted Data Display Yes

    Autoscale On

    DC Value 0

    Axes Display On

    Time Display Unit S

    Status bar Display On

    .. Laissez les valeurs par dfaut pour le reste

    Ladresse de dpart du buffer de sortie est out_buffer, le reste des paramtres peuvent tre pris par dfaut

    3. Changez les informations de la fentre Graph Property Dialog comme suit pour Frequency-Domaine :

    Graph Property Dialog

    Display Type FFT Magnitude

    Graph Title Graphical Display

    Signal Type Real

    Start Address out_buffer

    Acquisition Buffer Size 256

    Index Increment 1

    FFT Framesize 256

    FFT Order 8

    FFT Windowing Function Rectangle

    Display Peak and Hold Off

    DSP Data Type 16-bit signed integer

    Q-value 0

    Sampling Rate (Hz) 8000

    Plot Data From Left to Right

    Left-shifted Data Display Yes

    Autoscale On

    .. Laissez les valeurs par dfaut pour le reste

  • Page 18 sur 24

    Choisissez pour FFT Order un ordre tel que la valeur donne FFT Framesize soit 2ordre

    Appuyez sur OK Vrifiez que la FFT prsente un pic 1000Hz (frquence de la sinusode

    gnre)

    Visualisation et sauvegarde des donnes de la mmoire vers un fichier

    Pour visualiser le contenu de la mmoire tampon (buffer), procdez comme suit :

    1. Slectionnez : View Memory Spcifiez out_buffer pour address Slectionnez 16-bit signed integer pour format

    Pour sauvegardez le contenu de la mmoire tampon (buffer) dans un fichier, procdez comme suit :

    1. Slectionnez : File Data Save

    Sauvegardez le fichier comme sine8_buf.dat (type hex, par exemple) dans le dossier sine8_buf

    Dans la fentre de sauvegarde de la mmoire (Storing Memory window), utilisez out_buffer comme addresse du buffer avec une taille de 256

    (Vous pouvez tracer ces donnes (avec matlab) et vrifier que vous avez une sinusode de 1kHz (pour un chantillonnage de 8kHz))

    Manipulation N3

    Les oprations telles qu'addition/soustraction et multiplication sont les oprations cls dans un DSP. Une opration trs importante est la multiplication/accumulation, laquelle est utile un grand nombre d'applications qui exigent un filtrage numrique, la corrlation et lanalyse spectrale. Puisque l'opration de multiplication est essentielle pour la plupart des algorithmes DSP, lexcution doit ce faire en un seul cycle. Avec le C6713 nous pouvons excuter rellement deux oprations de multiplication/accumulation dans un seul cycle.

    Cet exemple illustre des utilits supplmentaires de CCS, tel que le dbogage tape par

    tape, la configuration des points darrt (setting breakpoints) . Lobjectif est se familiariser avec les outils de CCS. Nous invoquerons l'optimisation de compilateur C pour voir comment les performances ou la vitesse d'excution peuvent tre augmentes considrablement.

    //Dotp4.c Multiplication de deux vecteurs de 4 nombres chacun

    int dotp(short *a,short *b,int ncount); //fonction prototype

    #include //pour printf

    #include "dotp4.h" //fichier entte avec les donnes

    #define taille 4 //# donne dans chaque vecteur

  • Page 19 sur 24

    short x[taille] = {x_elements}; //dclaration du 1ier vecteur

    short y[taille] = {y_elements}; //dclaration du 2me Vecteur

    main()

    {

    int resultat = 0; //rsultat la somme des produits

    resultat = dotp(x, y, taille); //appel de la fonction dotp

    printf("resultat = %d (decimal) \n", resultat); //affichage du resultat

    }

    int dotp(short *a,short *b,int ntaille) //la fonction produit

    {

    int somme = 0; //initialisation de la somme

    int i;

    for (i = 0; i < ntaille; i++)

    somme += a[i] * b[i]; //somme des produits

    return(somme); //retourne somme comme rsultat

    }

    //dotp4.h fichier entte avec deux vecteurs de nombre

    #define x_elements 1,2,3,4

    #define y_elements 0,2,4,6

    Le fichier source dotp4.c ci-dessus calcul la somme de produit de deux vecteur,

    chacun des vecteurs comporte quatre nombres, le contenu des deux vecteurs est dans le fichier d'en-tte dotp4.h . Le premier vecteur contient les quatre nombres 1, 2, 3 et 4, et le deuxime vecteur contient les quatre nombres 0, 2, 4 et 6. La somme des produits est (1 x 0) + (2 x 2) + (3 x 4) + (4 x 6) = 40.

    Le programme peut tre modifi aisment pour manier un plus grand nombre de donnes. Aucune implmentation temps-rel nest mise en uvre dans cet exemple, et aucun fichier de support dentr-sortie (I/O) en temps-rel n'est ncessaire. Les fonctions de support pour les interruptions ne sont pas exiges ici.

    Crez ce projet comme dotp4 et ajoutez les fichiers suivants au projet (voyez la manipe N1):

    1. Crez le projet comme dotp4 2. Ajoutez les fichiers suivants au projet :

    dotp4.c (fichier source en C) vectors_poll.asm (fichier vecteur qui dfinit l'adresse de l'entre

    c_int00 C6713dsk.cmd (fichier de commande du linker gnrique) rts6700.lib (fichier librairie) Najoutez aucun fichier include en utilisant Add Files to

    Project puisquils sont ajouts en slectionnant Projet Scan All File Dependencies.

    Le fichier den-tte stdio.h est ncessaire vue la dclaration printf dans le programme

    dotp4.c (pour imprimer le rsultat).

  • Page 20 sur 24

    Implmentation de Variable Watch

    1. Slectionnez comme option du projet -gs comme option du compilateur Les options par dfaut pour le Linker (aucune optimisation) Crez le projet comme dotp4

    2. Appuyez sur (ou slectionnez Project Rebuild All)

    Chargez le fichier excutable dotp4.out (\dotp4\Debug) 3. Slectionnez : View Quik Watch

    Entrez somme et cliquez sur Add to Watch Le message identifier not found associ avec la variable somme est

    affich car cette variable locale nexiste pas encore 4. Mettez un point d'arrt (Breakpoint) la ligne : somme + = a[i] * b[i]; du code

    Placez le curseur de la souris sur cette ligne et cliquer Appuyez sur le bouton droit de la sourie et slectionnez linterrupteur Toggle Software Breakpoint Ou bien, de prfrence, avec le curseur lextrme gauche de la ligne du code, double-cliquez, un cercle rouge gauche de cette ligne doit apparatre (Note : si vous placez le curseur sur la ligne du code avec un Breakpoint et si vous double-cliquez le breakpoint doit disparatre)

    5. Slectionnez : Debug Run (ou ) Le programme sexcute jusqu' ( l'exclusion de) la ligne de code avec le

    Breakpoint Une flche jaune pointera aussi cette ligne du code

    6. Appuyez sur F8, pour une excution pas--pas

    7. Rptez ou continuez lexcution pas--pas (appuyez sur ) et observez (Watch) le changement de valeur, de la variable somme dans de la fentre Watch, de 0, 4, 16, 40.

    8. Slectionnez : Debug Run Vrifie que la valeur de somme est imprime comme : somme = 40

    (dcimal)(slectionnez longlet Stdout en bas gauche

    de CCS) Notez la dclaration printf dans le programme C dotp4.c qui sert

    imprimer le rsultat. Cette dclaration (bien quexcellente pour le dbogage) devrait tre vite

    aprs le dbogage, puisquelle prend 6000 cycles pour sexcuter.

    Animation

    1. Slectionnez : File Reload Program, pour rechargez le fichier excutable dotp4.out.

    Ou, de prfrence, choisissez : Debug Restart.

  • Page 21 sur 24

    Notez quaprs le chargement du fichier excutable, ladresse dentr pour lexcution est c_int00, comme il est possible de vrifier avec le fichier d-assemble

    2. Le mme breakpoint devrait dj tre mis comme indiqu auparavant la mme ligne de code

    Slectionnez : Debug Animate (ou ) Observez le changement de la variable somme La vitesse d'animation peut tre commande en slectionnant Option

    Customize Debug Properties Animate Speed (la vitesse maximale est mise par dfaut 0 seconde).

    Pour revoir lanimation il faut slectionner Debug Restart, pour rechargez le fichier excutable dotp4.out

    Benchmarking (profiling) sans Optimisation

    Dans cette section nous illustrons comment faire un Benchmarking (reprage) dune section de code (dans ce cas, la fonction dotp).

    Vrifiez que les options pour le compilateur (- g) et le Linker (- c - o dotp4.out) sont

    actifs Pour profiler (dcouper) le code, vous devez utiliser l'option du compilateur - g pour

    avoir les informations symbolique de dbogage Enlevez tout les breakpoint

    En cliquant deux fois sur la ligne de code avec le breakpoint Ou bien en cliquant sur le bouton droit de la sourie et en slectionnant

    l'interrupteur du breakpoint).

    1. Slectionnez : Debug Restart 2. Slectionnez : Profile Setup (une fentre plus ou moins semblable la fentre

    ci-dessous doit sincruster dans CCStudio)

  • Page 22 sur 24

    3. Cliquer sur les trois icones encercles en rouge si-elles ne sont pas actives 4. Cliquez sur longlet Custom en bas de la fentre et cochez la case Cycles 5. Dans un premier temps la fonction printf ne doit pas apparatre dans votre fentre

    (sous longlet Ranges ). Pour lajouter, procdez comme suit : Cliquez sur le bouton de droit de la sourie puis sur Create Profile Item

    La fentre Add Profile Item apparat, elle permet de profiler :

  • Page 23 sur 24

    i. Les diffrentes fonctions dun programme (Type = Function) ii. Les boucles (Type = Outer Loops ou bien All Loops)

    iii. Une suite dinstructions (Type = Range) Pour chaque cas il faut spcifier :

    i. Le nom de la fonction (avec Symbol Name active) ii. Les adresses de dbut et de fin (avec DSP Address active)

    iii. Les linges de dbut et de fin (avec Source Lines active

    Pour linstant nous voulons visualiser les informations relatives la fonction

    printf (nombre de cycle), indiquez les informations prsents dans la fentre prcdente et cliquez sur OK

    6. Slectionnez : Profile Viewer (une fentre plus ou moins semblable la fentre ci-dessous doit sincruster dans CCStudio)

    Si la fentre est vide Allez Debug Restart puis excutez le programme

    nouveau (Debug Run) Si une ligne manque cliquez sur licne encercle Show all Profile Items

    7. Slectionnez : Profile Clock Enable

    8. Slectionnez : Profile Clock View

    9. Slectionnez : Debug Restart, puis Debug Run (ou bien appuyez sur )

  • Page 24 sur 24

    Vous devez cet instant retrouver une fentre avec des donnes identiques celles de la fentre prcdente

    Ainsi la fonction main() sexcute en 6099 cycles, ceci est essentiellement d la fonction printf qui demande 5798 cycles pour son excution. La fonction dotp() quant elle ncessite 209 cycles (sans aucune optimisation).

    Benchmarking (profiling) avec Optimisation

    Dans cette section nous illustrons comment optimiser le programme en utilisant une option doptimisation, -o3 (voir page 10). La vitesse dexcution du programme peut tre augmente en optimisant le compilateur C.

    1. Changez l'option du compilateur (Projet Build Options) en : -g o2 Utilisez les mmes options du Linker que prcdemment (vous pouvez taper

    ces options directement

    2. Rebuild All (ou )

    3. Chargez le fichier excutable dotp4.out (ou slectionnez File Reload Program) 4. Recrez le Profiler comme dans la figure prcdente

    5. Slectionnez Debug Run 6. Vrifiez que le nombre de cycle pour excuter la fonction dotp, est pass de 209

    118 (cest une amlioration considrable de 43,5%) 7. Dautres techniques doptimisation peuvent tre utilises, comme loptimisation du

    code (ces techniques seront tudies ultrieurement)

    Les options o2 et -o3 invoquent les plus haut niveaux d'optimisation du compilateur.

    Profilling Printf

    1. Slectionnez encore une foi : Debug Restart 2. Cliquez sur l'icne Ranges 3. Slectionnez printf du programme source C, tranez-la (printf) la fentre

    Profile Area et relchez le curseur de la sourie 4. Vrifiez que la taille du code de printf est 32 et qu'elle prend 6316 cycles pour

    excuter, comme montre la figure

    5. Notez qu'au lieu d'utiliser la figure XX pour analyser la fonction dotp, vous pouvez la slectionner la traner jusqu la rgion Profile Area