DSP - Chez

publicité
Processeurs de traitement des
signaux (DSP)
Université Paul Sabatier
[email protected]
février 2007
DSP
* Un DSP (Digital Signal Processor) est un type particulier de
microprocesseur, destiné au traitement numérique du signal.
2
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.
3
Un exemple: filtre RIF
N −1
y (k ) =
∑ x(k − i )a
i
i =0
- 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.
4
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).
5
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.
6
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é.
7
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.
8
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.
9
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, ...
10
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, …
11
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.
12
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
13
Les unités de calcul
* 3 unités: UAL, multiplieur, registre de décalage (shifter).
* Chaque unité effectue une opération par cycle.
14
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;
15
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;
COMP(F1,F3);
F2=MIN(F1,F3);
F2=F3-F4;
F3=(F1+F2)/2;
F2=FLOAT R3;
F2=ABS F3;
F2=MAX(F1,F3);
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.
16
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.
17
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.
18
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:
19
Sauts
1) Branchement:
JUMP addr24;
PC <= addr24 (étiquette)
2) Saut à un sous-programme
Appel:
CALL addr24;
PC+1 => PC Pile
PC <= addr24
Retour:
RTS;
PC <= PC Pile
20
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!
21
Structure de boucles
* Boucle avec condition de fin:
DO addr24 UNTIL condition;
* Boucle avec compteur
(registre LCNTR):
LCNTR=data16,
DO addr24 UNTIL LCE;
22
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.
23
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)
24
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 */
25
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.
26
Buffer circulaire
• Table de valeurs avec historique fini
• Adressage post-modifié + utilisation des registres B et L.
27
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
28
retourner dans le buffer.
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.
29
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.
30
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.
31
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;
32
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), ….
33
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;
34
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
35
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
36
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;
37
Schéma bloc général du DSP
38
Kit de développement EZ-LAB
• Carte EZ-LAB
- DSP ADSP21065L
- Codec AD1819A
- Interface RS232
(vers PC)
- EPROM 1M*8bits
- SDRAM 1M*32bits
39
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
40
Environnement de développement
Hôte:
station PC
Saisie des programmes
Compilation
Transfert vers la cible
Mise au point
Cible:
Kit EZ-LAB Exécution Code DSP
41
Gestion du projet
• Edition des
programmes source
en assembleur
• Compilation
• Edition de liens
(logiciel Visual
DSP)
42
Debugger
• Permet la mise au
point du programme
• Simulation ou
contrôle de la platine
EZ-Lab
43
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.
44
Téléchargement