Les unités spécifiques des DSP Processeurs de traitement du signal (DSP) Les unités spécifiques des DSP
Les unités spécifiques des DSP Architecture générale et objectifs Unité de commande Unité de traitement Unité de mémorisation Performance / Consommation
Architecture générale et objectifs Processeur CPU Unité de commande Unités de traitement Bus internes Mémoire interne Unité de Communication Périphériques et mémoire externes
Architecture générale et objectifs Unité de commande Rôle : Permet de séquencer le déroulement des instructions Objectifs pour être performant Pilotage de chaque module du DSP indépendamment autres Gestion efficace des boucles Encodage des instructions : Minimiser la taille des instructions Encoder le maximum de parallélisme les uns des
Architecture générale et objectifs Unité de traitement Rôle : Assure les traitements nécessaires à l’exécution des instructions Objectifs pour être performant Réaliser efficacement les traitements typiques 1 MAC par cycle 1 décalage de N bits (droite ou gauche) en 1 cycle
Architecture générale et objectifs Unité de mémorisation et objectifs Rôle : Mémoire Objectifs de programme de donnée pour être performant Alimenter efficacement en données l’unité de traitement afin de ne Gérer pas la ralentir efficacement les pointeurs d’adresse
Architecture générale et objectifs Unité de communication Rôle : Contrôle les accès aux données, aux instructions externes ou à d'autres processeurs Objectifs pour être performant Limiter l’utilisation des ressources processeur lors de ces accès.
Unité de commande œuvre : gestion des boucles matérielles C’est le chef d’orchestre du CPU. Il séquence et décode les instructions une à une. Pour être efficace, le CPU met en Un pipeline œuvre : Une gestion des boucles matérielles
Les phases du Pipeline P (Prefecth) - Generate program address = Incrémentation du compteur ordinal F (Fetch) - Get Opcode = Lecture du code de l’instruction en mémoire D (Decode) - Decode instruction = Décodage de l’instruction A (Access) - Generate read address = Calcul des adresses des opérandes = Calcul de l’adresse du résultat R (Read) - Read operands = Lecture des opérandes en mémoire X ( Execute) = Exécution de l’instruction = Ecriture du résultat l’adresse calculée P F D A R X Full Pipeline : Toutes les unités matérielles du DSP sont en activités P F D A R X
Unité de commande Séquentiel vs pipeline F1 - D1 R1 - X1 CPU - - F5 F4 MemP Instruction Instruction 1 Instruction 2 - Fetch F1 F2 Decode D1 D2 CPU Read R1 R2 - MemD Execute X1 X2 - MemD F5 D4 R3 X2 F4 MemP Fetch F1 F2 F3 F4 F5 … … … D3 Decode D1 D2 D3 D4 D5 … … Read R1 R2 R3 R4 R5 … CPU R2 MemD Execute X1 X2 X3 X4 X5 X1 MemD
Unité de commande Exemple de rupture de séquence Code à exécuter : 1: 2: 3: 4: 5: 6: Instr1 Si B==1 Alors GOTO 10: Instr3 Instr4 Instr5 Instr6 … 10: 11: 12: Instr10 Instr11 Instr12 Etat du pipeline avec prédiction que B≠1: Si prédiction incorrecte (B=1) Si prédiction correcte (B≠1) F F1 F2 F3 F4 F5 F10 F11 F12 F F1 F2 F3 F4 F5 F6 … … D D1 D2 D3 D4 ! D10 D11 D D1 D2 D3 D4 D5 D6 … R R1 R2 R3 ! ! R10 R R1 R2 R3 R4 R5 R6 X X1 X2 ! ! ! X X1 X2 X3 X4 X5 Evaluation du prédicat (B==1) => rupture de séquence Vidange du pipeline: Perte de 3 cycles Evaluation du prédicat (B==1) => pas de rupture
Unité de commande Exemple de conflit d'accès mémoire Programmes et Données dans la même mémoire à 1 accès par cycle Fetch F1 F2 conflit conflit F3 F4 ! ! Decode D1 D2 ! ! D3 D4 ! Read R1 R2 ! ! R3 R4 Execute X1 X2 ! ! X3 Conflit pour l’accès mémoire entre Fetch et Read Les lectures de données R1/R2 empêchent les chargements d'instruction Réductions des performances d'au moins 50% F3/F4 Problème réglé si Mémoire multi-accès Programmes et Données dans des mémoires différentes (ou multi-bloc)
Unité de commande Effets du pipeline lors du débogage Watch Window A 1 Code à exécuter : 1: 2: 3: A=1 B=1 C=1 La flèche indique la position du PC Plusieurs cycles sont nécessaires avant que la variable soit modifiée : Cela n’intervient qu’à l’étape X (exécution) … NOP … Watch Window A 1 ??? B 1 C 1 10: 11: 12: 13: 14: … A=2 B=2 C=2 D=2 E=2 Watch Window A 2 !!! B 1 C 1 F F10 F11 F12 F13 F14 … … … D D10 D11 D12 D13 D14 … … R R10 R11 R12 R13 R14 … X A=2 B=2 C=2 D=2 E=2 Watch Window A 2 B 2 C 1
Unité de commande Utilisation des ressources par le pipeline Etage Description Partie hardware utilisée P Generate program address PC F Get Opcode Program memory D Decode instruction Decoder A Generate read address ARs, ARAU R Read Operand Data memory Generate write address ARs, ARAU X Execute instruction MAC, ALU Write result Data Memory PC = Program Counter ARAU = Auxiliary Register Arithmetic Unit AR = MAC= ALU = Adresse Register Multiply ACcumulate Arithmetic Logic Unit
Unité Retards de commande dans le pipeline Le pipeline atteint son plein rendement une fois qu’il est “rempli” Un retard peut se produire S’il existe un conflit de ressources (retard ponctuel) accès à la mémoire utilisation des bus En cas de rupture de séquence branchement non prévu appel de sous-programme interruption (vidange du pipeline)
boucles de petite taille Unité de commande Gestion des boucles L’objectif est d’optimiser le traitement des boucles de petite taille Initialisation des paramètres de la boucle en 1 instruction Pas d'instructions supplémentaires pour de la boucle la gestion de la fin Exemple boucle mono-instruction MOVE MAC DEC JNE #16,B (R0)+,(R4)+,A B LOOP RPT MAC #16 (R0)+,(R4)+,A LOOP Boucle logicielle Boucle matérielle
yn b(i) xn i yn b(i) xn i Unité de commande Y Exemple : Calcul d’un filtre RIF N 1 yn b(i) xn i i 0 N 1 i 0 yn b(i) xn i Gestion matérielle des boucles : Unité de génération d’adresses programme Unité MAC + Chargement simul de l’instruction et opérandes Unité MAC matérielle tané de l’instruction et des Y B[i] X[i] A=0; for (i=0; i<N; ++i) { SSBX FRCT STM #B, AR2 STM #X, AR3 STM #Y, AR4 RPTZ A, #N-1 (x1) MAC *AR2+,*AR3+, A (xN) STH A, *AR4 (x1) A = A + B[i] * X[i]; } Y = A >> 15; d’adresses données Unité de génération Code C Equivalent ASM
Unité de commande Optimisation du compilateur C Code C 813D toto Pas d’optimisation 813D PSHM 11h Sauvegarde AR1 (save-on-entry) 813E FRAME -1 813F SSBX SXM Manipulation de nombres signés 8140 LD #100h,0,A A <= 256 (100h) 8142 ST #0h,0h Met la valeur initiale 0 de i dans pile[0h] 8144 SUB 0h,A A <= A - pile[0h] 8145 BC 8154h,ALEQ Si A<=0, alors aller à fin: debut : 8147 MVDK 0h,11h Copie pile[0h] dans AR1 8149 LD *AR1(817),A Charge in[AR1] dans A 814B STL A,*AR1(1073) Stocke A dans out[AR1] 814D LD #100h,0,A A <= 256 (100h) 814F ADDM 1h,0h pile[0h] <= pile[0h] + 1 8151 SUB 0h,A A <= A - pile[0h] 8152 BC 8147h,AGT Si A>0 alors reboucler sur debut: fin: 8154 FRAME 1 8155 POPM 11h Restaure de AR1 8156 FRET Retour de la fonction #define N 256 short out[N]; void toto() int i; for (i=0; i<N; i++) out[i]=in[i] ; } short in[N]; { { } Adresses des tableaux _inputData = 331h = 817 _outputData = 431h = 1073 8033 toto Optimisation au niveau fonction (-o2) 8033 STM 431h,13h AR3 <= @out 8035 STM 331h,12h AR2 <= @in 8037 RPT #0ffh Répéter 256=255+1 fois 8038 MVDD *AR2+,*AR3+ *AR3 <= *AR2 8039 NOP 803A NOP 803B FRET Université de Savoie Prise en compte des capacités matérielles du DSP
Unité de commande Unité de contrôle du C50 • pile de 8 * 16 bits • PC sur 16 bits • pile de 8 * 16 bits • PFC,IR: pour le pipeline • Registres de status ST0,ST1,PMST • Gestion des boucles • RPTC: repeat instruction • BRCR: repeat bloc • Interruptions : • IMR: masque interruptions • IFR: flags interruptions • BMAR: bloc move • GREG: mémoire globale
exposant. Unité de traitement Il existe deux types de DSP : virgule fixe / virgule flottante Il existe deux types de DSP : Les DSPs à virgule fixe traitent des nombres entiers seulement Les DSPs à virgule flottante traitent des nombres réels exposant. codés sous la forme mantisse
Unité de traitement Xmax] des recadrages DSP virgule fixe (1) Arithmétique : Dynamique limitée : [-Xmax et Xmax] : Possibilité de débordement nécessité de recadrer les données Développement : Temps de développement plus long : Étude de la dynamique des données, détermination du codage des recadrages et
Efficacité énergétique Unité de traitement DSP virgule fixe (2) Architecture : Opérateurs plus simples Largeur des données Efficacité énergétique moins importante b : 16 bits plus importante :consommation Processeur moins cher (surface du circuit moins importante) rapide (seulement pour les calculs à virgule fixe) Marché : applications grand public Xx % des ventes en xx TMS320C62x : TMS320C64x : TMS320C62x : TMS320C64x :
Unité de traitement DSP virgule flottante (1) : 1500 dB pour 32 bits Arithmétique : Dynamique importante : 1500 dB pour 32 bits Développement Temps de développement plus court Recadrage des données assuré par le processeur Compilateur de langage de haut niveau plus efficace grande portabilité : plus
Unité de traitement DSP virgule flottante (2) : Architecture : Largeur des données : 32 bits Opérateurs plus complexes (gestion de la mantisse et l’exposant) Processeur plus cher et consommant plus de Marché Applications nécessitant une grande dynamique audionumérique : Applications avec des faibles volumes
Unité de traitement yn-1 complexe Fonctions typiques Quelques fonctions à réaliser en 1 cycle d’horloge : Filtrage, convolution y = y + x.h : MAC (multiplication-accumulation) Adaptation yn = yn-1 + x.h : MAD (multiplication-addition) FFT, multiplication xr = xr.wr - xi.wi xi = xr.wi + xi.wr complexe
h(i).x(n i) Filtre numérique FIR sur N points Unité de traitement Exemple Filtre numérique FIR sur N points N 1 h(i).x(n i) i0 y(n) x(n) h(n) D x + Cellule D D D x(n) x x x x h(0) h(1) h(2) h(3) h(4) y(n) + + + Objectif : traitement d’une cellule par cycle
Unité de traitement registre (P register) bmultiplication = Eléments de l’unité de traitement (1) Opérateurs Multiplieur câblé Multiplication en 1 cycle ou pipelinée (1 résultat de multiplication par cycle) Le résultat est fourni directement à l’UAL ou il est stocké registre (P register) dans un Largeur des opérandes source : b résultat : bmultiplication = 2.b Unités Unité de saturation ou d’arrondi spécifiques de manipulation de bit, Viterbi, ...
Additionneur indépendant de Unité de traitement Eléments de l’unité de traitement (2) U.A.L. Opérations arithmétiques : addition, incrémentation, négation Opérations logiques : and, or, not soustraction, Additionneur indépendant de l’UAL Registres à décalage (recadrage des données) spécialisé : réalisation de quelques décalages prédéfinis en // en barillet : réalisation d ’un décalage quelconque en 1 cycle
Unités de stockage de l’unité de traitement Éléments de l’unité de traitement (3) Unités de stockage de l’unité de traitement Registres Stockage opérandes des opérandes sources ou des résultats intermédiaires d’accumulation du résultat de l ’additionneur Nombre de registres d’accumulation limité (1 à 4) Données stockées en double précision Possibilité de bits de garde pour stocker les bits supplémentaires issus d ’accumulations successives badd = bmultiplication + bgarde Bits de garde ACCH ACCL bgarde 2.b
Unité de traitement bmult badd Structure de l’unité de traitement MAC P bmult MAC + badd Accumulateur Sat /Arr
Unité de traitement Exemple : TMS320C54x bits barillet de Viterbi DB PB DB CB DB CB EB CB DB Université de Savoie 1 multiplieur 16*16 bits Op source 1 : registre T Op source 2 : mémoire Op destination : 1 additionneur 40 bits 1 ALU (40 bits) 2 registres d ’accumulation 40 bits 1 registre à décalage en barillet 1 unité dédiée à l ’algorithme de Viterbi
Unité de mémorisation xn-k xn-k-1 xn-k Les différents accès à la mémoire Exemple Filtre FIR Recherche de l’instruction Lecture de la donnée xn-k Lecture du coefficient hk Vieillissement des données xn-k-1 = xn-k D x h(2) + TAP D D D x(n) x x x x h(0) h(1) h(3) h(4) y(n) + + +
Unité de mémorisation Rappels : Bus Le CPU est le maître du bus Il est le seul à écrire sur les bus adresse et contrôle périphérique obtempère sur le bus données Lecture : il fournit la donnée demandée Ecriture : il récupère la donnée fournie par le CPU Haute impédance : il se déconnecte du bus Périphérique CPU BUS Adresses : sélection du périphérique et localisation d’une donnée Données : valeur de la donnée à échanger Contrôle : lire / écrire / haute impédance adresses données contrôle CPU Périphérique
Unité de mémorisation CPU Mémoire Accès mémoire pour un calcul 1 2 Mémoire 4 3 Charger une instruction (1) (2) (3) (4) depuis la mémoire Charger les opérandes depuis la mémoire Effectuer les calculs Stocker le résultat en mémoire
Unité de mémorisation 68000) Architecture Von Neuman à la mémoire Programme + Données CPU BUS Un seul chemin d'accès à la mémoire Architecture des processeurs d’usage général 68000) (Pentium, Goulot d'étranglement pour l'accès à la mémoire
Unité de mémorisation Architecture Harvard programme et données Mémoire Programme CPU Mémoire Données Séparation des mémoires programme et données Meilleure utilisation du CPU Chargement du programme et des données en parallèle
Unité de mémorisation de lecture des données (C et D) Accès mémoire multi-port Mémoire Programme + Données CPU Mémoire Données Plusieurs bus de données Accès simultané à plusieurs Combiné avec données mémoire multi-accès (plusieurs accès à la même cycle) mémoire en un mémoire multi-blocs (accès simultané à deux blocs de mémoire distincts) Exemple du TMS320C54xx : 1 2 bus bus bus programme (P) de lecture des données (C et D) d’écriture des données (E)
Unité de mémorisation Exemple du TMS320C5416 Internal Memory External Program A/D Bus (P) Data Read A/D Bus (D) Ext’l Mem I/F A Data Read A/D Bus (C) D Data Write A/D Bus (E) Internal: Up to 4 accesses / cycle External: 1 access / cycle up to 8M words program Exemple du TMS320C54xx : programme (P) de lecture des données 1 2 bus bus bus (C et D) d’écriture des données (E)
Unité de mémorisation Exemple du TMS320C5416 Université de Savoie
Unité de mémorisation Exemple du TMS320C5416 Ext’l Mem I/F Program ROM Data ROM SARAM DARAM P Bus A Ext’l Mem I/F D Bus D C Bus E Bus
Unité de mémorisation Utile en cas de boucle Cache d'instructions DSP cache d’instructions CPU Mémoire Programme + Données Mémoire Données Cache = mémoire associative rapide Contient les dernières instructions exécutées Utile en cas de boucle Accès aux instructions sans accès en mémoire Libère le bus pour des données Pas appliqué aux données Problème de validation du temps réel programme
Unité de mémorisation Bus externes Boitier du DSP Transfert entre Mémoire Programme + Données CPU Mémoire Données MUX Transfert entre les bus Limitation du nombre de broches internes et externe par multiplexage temporel Réduction des coûts Diminution des performances lors des accès au bus externe
Unité de mémorisation Accès Direct à la Mémoire : DMA CPU Mémoire Programme + Données Mémoire Données interruptions DMA configuration Accès DMA : entrées-sorties vers la mémoire bus internes interne indépendant du CPU et des Système d'interruptions "données reçues"/"données transmises"
Unité de mémorisation 1 3 2 DMA et buffer ping-pong DSP CAN McBSP2 DRR DSP McBSP2 DXR CNA DMA4 DMA5 PING IN 1 PING IN PING IN 3 PING OUT PING 1 OUT Traitement PONG IN PONG IN 2 PONG OUT PONG 2 OUT Buffers en mémoire Buffers en mémoire
Unité de mémorisation Mémoire interne sur les C54x Capacité en mémoire interne de différents modèles C54x Découpage en blocs Plusieurs types de RAM incluse sur le chip Single access (SARAM) : un accès par cycle Dual access (DARAM) : deux accès par cycle Two-way shared : deux accès par cycle même depuis l'extérieur DARAM découpée en blocs Accès simultané à deux blocs de mémoire différents 2x2=4 accès par cycle en théorie (en réalité limité par le reste de l'architecture) sources : "TMS320C54x DSP Functional Overview", SPRU307A, Texas Instrument "TMS320VC5416 DSK Reference Technical", Spectrum Digital
Unité de mémorisation Adressage indirect : *ARx (1) L’instruction contient un numéro de registre auxiliaire ARx qui contient l’adresse en mémoire ou se trouve la donnée Analogue aux pointeurs en C Possibilité de modifier la valeur du registre MPY *AR4, *AR3, A ; Multiplication de la donnée à l’adresse contenue dans AR4 ; par celle pointée par AR3 et stockage du résultat en A ; On remarque l’accès simultané à deux données ; A ← dm(AR4) × dm(AR3)
Unité de mémorisation Adressage indirect : exemple (3) Option Syntax Université de Savoie 92 Option Syntax Action Affected by: No Modification *ARn Increment / *ARn+ Decrement *ARn- no modification to ARn post increment by 1 post decrement by 1 Indexed *ARn+0 *ARn-0 post increment by AR0 post decrement by AR0 AR0 Circular *ARn+% *ARn-% *ARn+0% *ARn-0% post increment by 1 - circular post decrement by 1 - circular post increment by AR0 - circular post decrement by AR0 - circular BK BK, AR0 Bit-Reversed *ARn+0B *ARn-0B post inc. ARn by AR0 with reverse carry post dec. ARn by AR0 with reverse carry AR0 (=FFT size/2) Pre-modify *ARn (lk) *+ARn (lk) *+ARn (lk)% *+ARn *(ARn+LK), ARn unchanged *(ARn+LK), ARn changed *(ARn+LK), ARn changed - circular pre-increment by 1, during write only BK Absolute *(lk) 16-bit lk is used as an absolute address See Absolute Addressing
(Unité d’adressage indirect) Unité de mémorisation ARAU (Unité d’adressage indirect) Unités de calcul spécialisées Registres d'adressage Ecriture sur les bus d'adresse des bus C, D et E
Unité de mémorisation Buffer linéaire Time n Time n+1 Time n+2 Time Chaque nouvel échantillon donne lieu au déplacement de l’ensemble des données du buffer, l’adresse du nouvel échantillon est toujours la même. Time n Time n+1 Time n+2 Time n+3 x(n) x(n+1) x(n+2) x(n+3) x(n-1) x(n) x(n+1) x(n+2) x(n-2) x(n-1) x(n) x(n+1) x(n-3) x(n-2) x(n-1) x(n)
Unité de mémorisation filtre FIR. d’adresse. Adressage circulaire Exemple : filtre FIR. stockage des échantillons d’entrée dans un Time n Time n+1 Time n+2 Time n+3 x(n-1) x(n-1) x(n-1) x(n+3) x(n) x(n) x(n) x(n) x(n-3) x(n+1) x(n+1) x(n+1) x(n-2) x(n-2) x(n+2) x(n+2) Chaque nouvel échantillon donne lieu à l’écriture d’une donnée. Cette adresse est d’adresse. calculée par le générateur
Unité de mémorisation MMR : Memory Mapped Registers Addressing MMRs are in page 0 of data memory. They can be accessed by some specific MMR instructions allowing simple access to page 0. In these cases DP, SP and CPL are ignored Example : STM (STore to Memory-mapped register): Stores an immediate value to the specified MMR or Scratch memory address. 0000h MMRs Tip: use the .mmregs directive to allow MMR names to be interpreted as addresses 0060h 007Fh Scratch
Unité de mémorisation Memory Mapped Registers 0019 Name Addr. (Hex) Description Name Addr. (Hex) Description IMR IFR ----- 0000 0001 2 - 5 Interrupt Mask Register Interrupt Flag Register Reserved AR0 AR1 AR2 AR3 AR4 AR5 AR6 AR7 0010 0011 0012 0013 0014 0015 0016 0017 Address Register 0 Address Register 1 Address Register 2 Address Register 3 Address Register 4 Address Register 5 Address Register 6 Address Register 7 ST0 ST1 0006 0007 Status 0 Register Status 1 Register AL AH AG BL BH BG 0008 0009 000A 000B 000C 000D A accumulator low (A[15:00]) A accumulator high (A[31:16]) A accumulator guard (A[39:32]) B accumulator low (B[15:00]) B accumulator high (B[31:16]) B accumulator guard (B[39:32]) SP BK 0018 0019 Stack Pointer Register Circular Size Register BRC RSA REA 001A 001B 001C Block Repeat Counter Block Repeat Start Address Block Repeat End Address T TRN 000E 000F Temporary Register Transition Register PMST ------- 001D 01E-01F PMST Register Reserved Note: XPC and Peripheral MMR locations are device dependent
Performance / Consommation Consommation énergétique Filtrage numérique C549 FIR: 100MHz, C6201 200MHz, DSP16210 ZSP16401 2.5V 1.8V 3.3V 2.5V ADSP-21160 100MHz, 2.5V C6701 167MHz, 1.8V
Performance / Consommation Mesures des performances Mesure le nombre d’opérations MFLOPS Million Floating–Point arithmétiques à virgule flottante que le en une seconde Operation Per Second DSP à virgule flottante peut réaliser Mesure le nombre total d’opérations Per Second le DSP peut réaliser en une seconde Million Operation MOPS (calcul, accès DMA, transferts, etc.) que Mesure le nombre de codes machine Per Second en une seconde Million Instructions MIPS (instructions) que le DSP peut réaliser Mesure le nombre d’opérations MAC per Second réaliser en une seconde Million of MAC MMACS (Multiply+Accumulate) que le DSP peut MBPS Mega-Bytes Mesure la bande passante d’un bus Per Second particulier ou d’un dispositif d’E/S
Performance / Consommation Panorama des DSP (2)