Coursdsp tdi

44
Processeurs de traitement des signaux (DSP) Université Paul Sabatier [email protected] février 2007

Transcript of Coursdsp tdi

Page 1: Coursdsp tdi

Processeurs de traitement des

signaux (DSP)

Université Paul Sabatier

[email protected] février 2007

Page 2: Coursdsp tdi

2

DSP

* Un DSP (Digital Signal Processor) est un type particulier de

microprocesseur, destiné au traitement numérique du signal.

Page 3: Coursdsp tdi

3

Avantages par rapport à un système analogique

• Stabilité: les composants analogiques varient en fonction des

variables d’environnement (température, vieillissement, …).

• Reproductibilité: les valeurs des composants analogiques sont

définies avec une marge de précision ==> aucun montage

analogique n’est strictement reproductible à l’identique.

• Souplesse de la programmation: après le montage, il est difficile

de changer les caractéristiques d’un système analogique.

• Possibilités propres au système numérique: certaines fonctions

de traitement du signal sont difficiles à implanter en analogique,

voire irréalisables.

Page 4: Coursdsp tdi

4

Un exemple: filtre RIF

∑−

=

−=1

0

)()(

N

i

iaikxky

- Pour réaliser le filtrage en temps réel, la durée du traitement doit

être inférieure à la période d’échantillonnage.

* Chaque étape nécessite une multiplication puis une addition, et enfin

l’écriture en mémoire du résultat. Ce type d’opération est nommé MAC

(Multiply and Accumulate) => la nécessité de l’exécution rapide de

l’opération MAC.

* L’exécution d’une opération MAC nécessite 3 lectures ( instruction,

échantillon de donnée, et coefficient du filtre) et une écriture (résultat)

dans la mémoire => la nécessité de l’accès parallèle à la mémoire.

Page 5: Coursdsp tdi

5

Principales distinctions entre un DSP

et un microprocesseur classique

1) Contrairement aux µp classiques, un DSP réalise le MAC en un

cycle d’horloge grâce à un circuit multiplieur.

2) Un DSP réalise plusieurs accès mémoire en un seul cycle, grâce à

l’architecture Harvard (à comparer avec l’architecture VonNeuman

des µp classiques).

Page 6: Coursdsp tdi

6

Principales distinctions entre un DSP

et un microprocesseur classique

3) Contrairement aux µp classiques, la plupart des DSP n’ont pas

besoin de consommer des cycles d’horloge pour tester la valeur du

compteur de boucle. Ceci est effectué par un circuit on-chip.

4) Les DSP bénéficient des modes d’adressage adaptés aux

algorithmes de traitement du signal (circulaire, inversion de bits, …).

5) Dans les µp classiques, l’utilisation de la mémoire Cache et la

prédiction des branchements sont effectuées par des circuits logiques,

et peuvent changer d’un programme à l’autre. Ceci rend impossible

la prédiction du temps d’exécution d’un programme, ce qui est

primordial pour une application en temps réel.

6) La plupart des DSP sont équipés des interfaces entrée/sortie

numériques.

Page 7: Coursdsp tdi

7

Critères de sélection des DSP

* Type: virgule fixe ou virgule flottante (voir pages suivantes)

* Vitesse: MIPS, MFLOPS, …. (voir pages suivantes)

* Quantité de mémoire interne (DRAM, ROM, CACHE, ...)

* Entrées/ Sorties et leurs vitesses respectives.

* Architecture interne, avec la présence ou non de canaux DMA.

* Consommation d’énergie, en fonction de l’application.

* Coût, Rapport performance/prix en fonction du volume de production.

* Possibilité d’utiliser un langage de haut-niveau (C en général)

* Qualité de documentation, Présence de librairies.

* Qualité du système de développement utilisé.

Page 8: Coursdsp tdi

8

Virgule fixe, Virgule flottante

* DSP à virgule fixe: Les données sont représentées comme étant des

nombres fractionnaires à virgule fixe (exemple -1.0 à 1.0), ou comme

des entiers classiques.

* DSP à virgule flottante: Les données sont représentées en utilisant

une mantisse et un exposant: n=mantisse*2exposant.

- Sur les DSP à virgule fixe, le programmeur doit rester vigilant à chaque

étape d’un calcul . Ces DSP sont plus difficiles à programmer.

- Les DSP à virgule flottante fournissent une très grande dynamique.

- Les DSP à virgule flottante sont plus chers et consomment plus d’énergie.

♠Les virgules flottantes sont utilisées quand les coefficients varient dans le

temps (filtre adaptatif) ou quand le signal a besoin d’une grande dynamique.

Page 9: Coursdsp tdi

9

Critères de performance

1) MIPS (Million Instructions Per Second). Problème: une

instruction ne signifie pas la même chose d’une famille à l’autre.

2) MFLOPS (Million Floating-Point Operations Per Second):

Uniquement pour les DSP à virgule flottante.

3) MACPS (MAC Par Second): nombre d’opérations MAC par

seconde.

4) Benchmark (mesure du temps d’exécution d’un ou plusieurs

programmes): Outre le temps d’exécution d’une instruction, il y a

d’autres facteurs déterminant la vitesse d’un processeur: le temps

d’accès à la mémoire, les modes d’adressage utilisés, etc. Il est

donc préférable de mesurer le temps d’exécution des programmes

standard de traitement du signal.

Page 10: Coursdsp tdi

10

Principales applications

Téléphonie filaire: modems, codeurs de parole, annuleurs d’écho,…

Radiotéléphonie: codeurs de parole GSM, modems radio, …

Interfaces vocales: messagerie électronique, répondeurs

numériques, reconnaissance de parole, synthèse vocale,

identification du locuteur pour le contrôle d’accès, …

Militaire: guidage de missiles, navigation, communications cryptées,

traitement radar et sonar, …

Multimédias: compression de signaux audio, image et vidéo, cartes

multimédias pour PC, synthèse musicale, jeux, ...

Page 11: Coursdsp tdi

11

Principales applications

Médical: compression d’images médicales pour l’archivage,

traitement de signaux ECG et EEG, …

Electronique automobile: équipements de contrôle moteur, aide

à la navigation, commandes vocales, …

Automatisation: surveillance et commande de machines, contrôle

des moteurs, robots, servomécanismes, …

Instrumentation: analyseurs de spectre, analyseurs de transitoires,

générateurs de fonctions, interprétation des signaux sismiques, …

Page 12: Coursdsp tdi

12

Panorama des DSP actuels

• DSP traditionnels: bon marché, basse-performance, faible

consommation. un MAC par cycle d’horloge.

cadence 20-60 MHz. Exemples: Analog Devices ADSP-21xx, Texas Instruments

TMS320C3x, Motorola DSP560xx (répondeurs numériques, …).

cadence 70-150 MHz. Exemples: Texas TMS320C54x, Motorola DSP563xx

(télécommunication sans-fil, modems haut-débit).

. DSP améliorés: un second multiplieur et UAL. 2 MAC par cycle

d’horloge. Exemple: Lucent DSP16210 (télécommunication).

. DSP multi-issus: Plusieurs unités de calcul. Exécution de

plusieurs instructions en un cycle d’horloge. Exemple: TMS320C6455,

8 milliards MACPS! (traitement d’image). Consommation d’énergie élevée.

Page 13: Coursdsp tdi

13

Le DSP ADSP-21065L SHARC

• DSP 32 bits de chez « Analog Devices »

• virgule flottante/fixe

• Horloge interne 60 MHz - une instruction par cycle

• 180 MFLOPS

• 544 kbits de SRAM intégrés

• 2 ports série haut débit, 10 canaux DMA, 2 Timer.

• 3.3 v

• $10 - pour 100,000 pièces!

• Boîtier 208 broches

Page 14: Coursdsp tdi

14

Les unités de calcul

* 3 unités: UAL, multiplieur, registre de décalage (shifter).

* Chaque unité effectue une opération par cycle.

Page 15: Coursdsp tdi

15

Le bloc de registres (register file)

* Le bloc de registres est composé de 16 registres indépendants

de 40 bits (registres universels). Ces registres jouent l’interface

entre les bus de données et les unités de calcul et servent à

transférer les données et le résultat de calcul.

* Si on travaille sur 32 bits, les bits b0-b7 sont ignorés.

* Ces registres peuvent être utilisés en virgule fixe ou flottante.

En assembleur, ils sont notés par Fx (x=0,1,…,15) pour une

opération en flottante, et par Rx pour une opération en fixe.

Exemple: F15=12.245; F4=F2*F15;

R7=13; R0=R7+R1;

Page 16: Coursdsp tdi

16

Unité arithmétique et logique (UAL)

* Opération sur des nombres à virgule fixe et flottante.

* Addition/soustraction/moyennage, opérations logiques,

conversion, fonctions diverses.

- Exemple d’instructions portants sur des flottants:

F2=F3+F4; F2=F3-F4; F2=ABS F3;

COMP(F1,F3); F3=(F1+F2)/2; F2=MAX(F1,F3);

F2=MIN(F1,F3); F2=FLOAT R3; R3=FIX F2;

* Chaque instruction modifie des drapeaux dans les registres

d’état (ASTAT et STKY). Ces drapeaux peuvent ensuite être

utilisés pour tester les branchements conditionnels.

Page 17: Coursdsp tdi

17

Le multiplieur

* En virgule fixe: capable d’effectuer des MAC. Utilise

deux registres d’accumulation sur 80 bits (MRF et MRB).

Exemple: MRF=MRF+R5*R0;

MRB=MRB-R2*R1;

R2=R3*R1;

* En virgule flottante: seulement la multiplication.

Exemple: F3=F4*F2;

* Selon le résultat, certains drapeaux des registres d’état sont

mis à zéro ou un, et peuvent être ensuite utilisés pour tester

les branchements conditionnels.

Page 18: Coursdsp tdi

18

Unité de décalage (Shifter)

* Travaille sur 32 bits sur des nombres à virgule fixe

* Décalages et rotations

* Mise à 1 ou 0 des bits, tests, ….

- Exemple d’instructions:

R3=LSHIFT R2 BY R1; /* R3= décalage de R2 par la valeur de R1*/

R2=ROT R1 BY R3; /* R2=rotation de R1 par la valeur de R3 */

R2=BCLR R1 BY R3; /* R2= (R1 après mise à zéro du bit indiqué par R3) /*

R3=BSET R2 BY R1; /* R3= (R2 après mise à 1 du bit indiqué par R1) /*

* Selon le résultat, certains drapeaux du registre ASTAT changent.

Page 19: Coursdsp tdi

19

Séquenceur de programme et cycle d’instruction

* Le séquenceur contrôle le déroulement du programme: linéaire,

structure de boucle, sous-programme, sauts, interruptions.

* Il faut 3 cycles d’horloge pour gérer une instruction: lecture,

décodage, exécution.

* Structure « pseudo-parallèle » ou Pipeline:

Page 20: Coursdsp tdi

20

Sauts

1) Branchement:

JUMP addr24;

PC <= addr24 (étiquette)

2) Saut à un sous-programme

CALL addr24;

PC+1 => PC Pile

PC <= addr24

Appel:

Retour: RTS;

PC <= PC Pile

Page 21: Coursdsp tdi

21

Branchements et sauts conditionnels

* JUMP et CALL peuvent être conditionnels:

IF condition JUMP addr24;

IF condition CALL addr24;

* Liste des conditions:

Attention: tout ne

s’applique pas à IF!

Page 22: Coursdsp tdi

22

Structure de boucles

* Boucle avec condition de fin:

DO addr24 UNTIL condition;

* Boucle avec compteur

(registre LCNTR):

LCNTR=data16,

DO addr24 UNTIL LCE;

Page 23: Coursdsp tdi

23

Adressage de mémoire

* La mémoire données (DM) est séparée de la mémoire programme (PM).

1) Adressage direct

Ex: R1=PM(0x009400); /* R1 est chargé par le contenu de la

mémoire programme à l’adresse 0x009400 */

DM(0x0000C002)=R4; /* R4 est copié dans un emplacement

de la mémoire données à l’adresse 0x0000C002 */

2) Adressage indirect

L’adresse est générée par une série de registres, appelés registres DAG

(Data Address Generator):

DAG1 (I0-I7, M0-M7, B0-B7, L0-L7) : adressage de mémoire données.

DAG2 ( I8-I15, M8-M15, B8-B15, L8-L15): adressage de mémoire prog.

Page 24: Coursdsp tdi

24

Adressage de mémoire (suite)

* Détail des registres:

I: registre d’Index M: registre d’incrément (Modifieur)

B: registre d’adresse de Base L: registre de Longueur

- Les registres B et L sont utilisés pour gérer les buffers circulaires.

- Les registres I et M sont utilisés pour l’adressage indirect. Les

registres I fonctionnent comme des pointeurs aux mémoires, et les

registres M contiennent la valeur d’incrément des pointeurs.

* Opérations de DAGs:

- Adressage avec pré-modification ou post-modification

- Adressage circulaire

- Adressage par inversion de bits (utilisé dans le calcul de TFR)

Page 25: Coursdsp tdi

25

Adressage avec pré-modification

DM(Mx, Iy) 0 ≤ x,y ≤ 7

PM(Mx, Iy) 8 ≤ x,y ≤ 15

Ex: R2=DM(M0, I1)

R2 est chargé par le contenu de la mémoire données à

l’adresse indiquée par M0+I1. Registre I1 n’est pas modifié.

- Syntaxe: le registre M précède le registre I.

- Le registre M peut être remplacé par une valeur immédiate:

Ex: R2=PM(4, I9); /* adresse= I9+4 */

Page 26: Coursdsp tdi

26

Adressage avec post-modification

DM(Ix, My) 0 ≤ x,y ≤ 7

PM(Ix, My) 8 ≤ x,y ≤ 15

Ex: R2=DM(I1, M0)

R2 est chargé par le contenu de la mémoire données à l’adresse

indiquée par I1. Ensuite, I1 est modifié à I1+M0.

- Syntaxe: le registre I précède le registre M.

- Le registre M peut être remplacé par une valeur immédiate.

- Le registre L correspondant au registre I utilisé (L1 dans

l’exemple ci-dessus) doit avoir une valeur nulle.

Page 27: Coursdsp tdi

27

Buffer circulaire

• Table de valeurs avec historique fini

• Adressage post-modifié + utilisation des registres B et L.

Page 28: Coursdsp tdi

28

Buffer circulaire (suite)Pour écrire un buffer circulaire en assembleur:

1) Charger le registre L avec la longueur du buffer.

2) Charger le registre B correspondant avec l’adresse du début du

buffer.

3) Charger un registre M (dans le même DAG) avec le pas

d’incrément.

- Le registre I correspondant au registre L et B est automatiquement

initialisé avec le contenu du registre B.

4) Utiliser le mode d’adressage avec post-modification.

-Le registre I détermine l’adresse effective. Après la modification, si

l’adresse est en dehors du buffer, Le DAG corrige la valeur de I pour

retourner dans le buffer.

Page 29: Coursdsp tdi

29

Buffer circulaire (suite)

* Si M est positif:

Inew=Iold+M si Iold+M < B+L

Inew=Iold+M-L si Iold+M ≥ B+L

* Si M est négatif:

Inew=Iold+M si Iold+M ≥ B

Inew=Iold+M+L si Iold+M < B

- Si on utilise le registre I7 de DAG1 ou I15 de DAG2, une

Interruption est générée en cas de dépassement du buffer circulaire.

Page 30: Coursdsp tdi

30

Assembleur de ADSP-21065L

- Le langage d’assemblage ou l’assembleur est un langage bas-niveau, pouvant

être traduit par un traducteur (appelé aussi assembleur) en codes binaires,

reconnus par le processeur. Un programme assembleur est composé de:

1) Instructions: traduites en codes binaires par le programme. Les instructions se

terminent avec un (;). Elles peuvent être précédées par une étiquette (suite de

caractères terminée par :). Deux instructions exécutées en parallèle sont séparées

par une (,).

2) Directives d’assemblage: des ordres donnés au programme. Les directives

sont précédées par un point (.) et se terminent avec un point-virgule (;).

3) Préprocesseurs: commandes exécutées avant la traduction. Précédées par (#).

4) Commentaires: ignorés par le traducteur. Précédés par /* et terminés par */.

- L’assembleur ne fait pas la distinction entre minuscule et majuscule.

Page 31: Coursdsp tdi

31

Instructions

1) Calcul et transfert: une opération de calcul, éventuellement

en parallèle avec une ou deux opérations de transfert.

- La plupart des instructions de ce groupe peuvent être précédées

par IF cond où cond est l’un des mnémoniques du tableau de la

page 21.

Exemple: IF eq F1=F5*F12, F11=PM(I10, 40);

- Dans les opérations de calcul, les opérandes sont des registres

(ou les valeurs immédiates pour certaines opérations de

décalage), mais jamais le contenu de la mémoire.

- Pour effectuer une opération de calcul sur le contenu de la

mémoire, il faut d’abord le transférer dans un registre.

Page 32: Coursdsp tdi

32

Instructions (suite)

2) Instructions de contrôle: servent à contrôler l’exécution du

programme : JUMP, CALL, RTS, RTI, DO UNTIL.

- La plupart des instructions de ce groupe peuvent être

précédées par IF cond. La structure IF cond, ELSE peut être

aussi utilsée pour certaines instructions.

Ex: IF lt JUMP suite;

IF eq RTS, ELSE R0=LSHIFT R1 BY R15

- Certaines instructions de ce groupe peuvent être exécutées en

parallèle avec les instructions de calcul.

Ex: JUMP(M8,I12), R6=R6-1;

Page 33: Coursdsp tdi

33

Instructions (suite)

3) Transfert des valeurs immédiates: ces instructions sont

utilisées pour effectuer un transfert entre un registre et la

mémoire, ou pour copier une valeur immédiate dans un registre

ou dans la mémoire.

Ex: ASTAT=DM(0x489060);

DM(I4, M0)=19304;

4) Divers: manipulations des bits dans un registre de système,

manipulation de pile (PUSH, POP), NOP (instruction qui ne fait

rien), ….

Page 34: Coursdsp tdi

34

Directives d’assembleur- Contrairement aux instructions, les directives ne génèrent pas de code binaire.

1) Directives .segment et .endseg : sont utilisées pour marquer le début et la fin

d’un segment, c-à-d une section des emplacements contigus dans la mémoire

programme ou la mémoire données. La syntaxe générale est:

.SEGMENT/type nom_de_segment;

[contenu du segment]

.ENDSEG;

où type est PM pour la mémoire programme et DM pour la mémoire données.

Le nom de segment doit contenir au plus 8 caractères.

2) Directive .var : Déclaration d’une variable ou un tableau. On peut aussi

initialiser la variable déclarée.

.VAR nom1=init1, nom2, nom3=init3;

.VAR nom_de_tableau1[longueur]=init1, init2, …, initn;

Page 35: Coursdsp tdi

35

Directives d’assembleur (suite)

3) Directive .global : utilisée pour exporter un symbole. Le symbole exporté sera

reconnu par les autres programmes au moment de l’édition de liens. La syntaxe

générale est

.GLOBAL symbole;

Ex: .VAR coeffs[10];

.GLOBAL coeffs;

4) Directive .extern : utilisée pour importer un symbole, défini comme un

GLOBAL dans un autre programme. La syntaxe général est

.EXTERN symbole;

Ex: .EXTERN coeffs;

5) Divers: .precision, .round, .port, .newpage

Page 36: Coursdsp tdi

36

Préprocesseurs

Les services rendus par le préprocesseur sont: l’inclusion de

fichier source, le traitement de macros et l’assemblage

conditionnel. On ne présente ici que les deux les plus importants:

1) Inclusion du contenu d’un fichier:

#include ''nom_de_fichier''

2) Définition d’un macro sans paramètres

#define nom reste_de_la ligne

Dans toute la suite du programme, toute nouvelle occurrence de

nom est remplacée par reste_de_la ligne.

Ex: #define ORDRE 5

Page 37: Coursdsp tdi

37

Exemple de source assembleur/* commentaire */#include "def21065l.h"#define N 10.SEGMENT/DM zonetab;/* table de donnees a traiter */.VAR table[N] = 3,7,2,14,1,16,18,12,28,22;.ENDSEG;.SEGMENT/PM mon_code;debut: M1=0x01; /* increment */Do fin until sz ;r0 = bclr r0 by 0x01; /* r0 flag = 0*/I1 = table; /* initialise a case 1 */LCNTR=N-1, Do suite until LCE;r1=DM(I1,M1);r2=DM(0x00,I1);COMP(R2,R1); /* compare la case I et I+1 */If GE jump suite; /* si <= on saute le swap */DM(0xFFFFFFFF,I1)=r2;DM(0x00,I1)=r1; /* on permutte */r0 = bset r0 by 0x01; /* flag = 1 */suite: nop;fin: Btst r0 by 0x01; /* test de flag */nop;.ENDSEG;

Page 38: Coursdsp tdi

38

Schéma bloc général du DSP

Page 39: Coursdsp tdi

39

Kit de développement EZ-LAB

• Carte EZ-LAB

- DSP ADSP21065L

- Codec AD1819A

- Interface RS232

(vers PC)

- EPROM 1M*8bits

- SDRAM 1M*32bits

Page 40: Coursdsp tdi

40

Conversion analogique-numérique

* Utilise le CODEC AD1819A

- Conversion sur 16bits stéréo

- Plusieurs entrées et sorties analogiques (multiplexage)

- Fréquence d’échantillonnage de 7kHz à 48kHz

- Bande passante en sortie de 20Hz à 20kHz

- Amplificateurs et atténuateurs internes programmables

* Communication série haut débit avec le DSP (SPORT1)

- Initialisation du DMA et SPORT

- Initialisation du CODEC

- Gestion des échantillons: routine d’interruption

Page 41: Coursdsp tdi

41

Environnement de développement

Saisie des programmes

Compilation

Transfert vers la cible

Mise au point

Exécution Code DSP

Hôte:

station PC

Cible:

Kit EZ-LAB

Page 42: Coursdsp tdi

42

Gestion du projet

• Edition des

programmes source

en assembleur

• Compilation

• Edition de liens

(logiciel Visual

DSP)

Page 43: Coursdsp tdi

43

Debugger

• Permet la mise au

point du programme

• Simulation ou

contrôle de la platine

EZ-Lab

Page 44: Coursdsp tdi

44

Références

1) The evolution of DSP processors, J. Eyre & J. Bier, IEEE Signal Processing

Magazine, vol. 17, no. 2, March 2000, pp. 43-51.

2) DSP Processors hit the mainstream, J. Eyre & J. Bier, IEEE Computer, August

1998.

3) How to estimate DSP processor performance, P. Lapsley & G. Blalock, IEEE

Spectrum, July 1996.

4) ADSP-21065L Technical Reference,

http://www.analog.com/processors/sharc/technicalLibrary/manuals/index.html

5) ADSP-21065L User’s Manual, même adresse.

6) VisualDSP++ 3.5 User's Guide for 32 bits processors, même adresse.

7) ADSP-21065L EZ-LAB Development System Manual, Analog Devices.