transparents
Transcription
transparents
Implantation d’algorithmes de traitement du signal sur les architectures virgule fixe Plan 1. Arithmétique virgule fixe 2. Détermination du domaine de définition 3. Codage des données Daniel Ménard, Olivier Sentieys IRISA/ENSSAT Lannion Université de Rennes I [email protected] http://www.irisa.fr/R2D2 ARCHI’05 - 2 Codage en virgule fixe complément à 2 Définition : 2m-1 pMSB m −1 x = −2 m S + ∑ bi 2i 2-n S bm-1 bm-2 21 20 2-1 b1 b0 b-1 b-2 pLSB Domaine de définition du codage : [− 2 m ,2 m − 2 − n ] b-n+2 b-n+1 b-n n m i =− n Codage en virgule fixe complément à 2 Partie entière Partie fractionnaire m : distance (en nombre de bits) entre la position du bit le plus Pas de quantification significatif pMSB et la position de la virgule pV q = 2−n n : distance entre la position de la virgule pV et la position du bit le moins significatif pLSB 20 2-1 2-2 x x x b = m+ n+ 1 bits format: (b,m,n) ARCHI’05 - 3 m pv 2m-1 2-3 2-4 2-n 2-5 S bm-1 2-6 2-7 b-6 b-7 pMSB n b 2-8 2-9 2-10 Exemple de codage b=8 m = -3 n=10 b-n+1 b-n pLSB ex: ex: 0.09472 0.09472 (8,-3,10) (8,-3,10) 01100001 01100001 -10 0.0625+0.03125+2 0.0625+0.03125+2-10 • (6,3,2), Q26 ARCHI’05 - 5 0111.11 0111.11 7.75 7.75 0111.10 0111.10 7.5 7.5 0000.11 0000.11 0000.10 0000.10 0000.01 0000.01 0000.00 0000.00 1111.11 1111.11 1111.10 1111.10 1111.01 1111.01 0.75 0.75 0.5 0.5 0.25 0.25 00 -0.25 -0.25 -0.5 -0.5 -0.75 -0.75 1000.01 1000.01 -7.75 -7.75 1000.00 1000.00 -8 -8 -0.5 = -8+7. 5 -7.75 = -8+0.25 Règles de l’arithmétique virgule fixe Exemple de calcul Addition: r=a+b Addition: r=a+b • Règle : le format des opérandes a et b doit être identique • Étapes mc = max (m A ,mB ) o Choix d’un format commun (bc,mc,nc) o Alignement de la virgule o Extension des bits des opérandes a et b mA SAA SA bmA mA b11 + SB SR bmR SB SB b00 b-1-1 b-2-2 Extension du nc = max (n A ,nB ) bit de signe 11 1 bc = mC + nC + 1 bmB SbB0 bbmB -1 bb-20 b1 b0 b-1 b-2 ⎧m + 1 si a + b ∉ DC mR = ⎨ C si a + b ∈ DC ⎩ mC nR = nC bb-nA nA mB nB mR ARCHI’05 - 8 o Débordement présent si sign(r) ≠ sab nA mB SB • Débordement possible si sign(a) = sign(b) = sab nB bbb-nB -1 nB b0-2 b0nB bR = mR + nR + 1 bnA nR 00011 (3) 00111 (7) 0001 (1) 1010 (-6) 01010 (10) ARCHI’05 - 9 Multiplication: r = a × b Multiplication: r = a × b • Règle : la représentation de a et b doit être identique • Étapes o Extension du signe des opérandes o Extension des bits de signe des opérandes a et b o Doublement du bit de signe du résultat • Le bit redondant peut être intégré à la partie entière du résultat mA SB SB SA SB SA SB SA × SB SA bmA b1 SB SB b0 b-1 b-2 bmB bnA nB ARCHI’05 - 10 SR bmR b1 b0 mR = m A + mB ( + 1 ) b-1 1111100. 111100. . b0 b-1 bnB nR = n A + nB b-2 nR = nA + nB 1 1 1 111110 (-2) 111100 (-4) 1110 . . 110 . . . 10 . . . . 1 mR = m A + mB + 1 bR = bA + bB SR 1100 (-4) 0110 ( 6) nA mB SB Nécessité d’un bit supplémentaire pour coder le résultat S’il n’y a pas de débordement la dernière retenue peut être ignorée Exemple de calcul SA 1 11 0011 (3) 0111 (7) Règles de l’arithmétique virgule fixe SA 1 11 0110 (6) 1011 (-5) 11101000 -128+64+32+8 = -24 bnR ARCHI’05 - 11 001000 (8) Résumé des règles Codage en virgule fixe : objectifs Addition Objectifs pour le codage en virgule fixe • Choix du format commun a o Connaissance du domaine de définition des données si bout = bin alors m c = max (m A ,m B ,m R ) bin + b • Garantir l’absence de débordements • Maximiser la précision si bout > bin alors m c = max (m A ,m B ) r bout Partie entière : m bits S Multiplication nR = n A + nB × bm-1 bm-1 b1 b0 b-1 b-2 b-n+2 b-n+1 b-n Précision Dynamique a Doublement du bit de signe mR = m A + mB + 1 r Garantire l’absence de débordement bR = bA + bB b ARCHI’05 - 12 Respecter les règles de l’arithmétique virgule fixe Maximiser la précision des calculs ARCHI’05 - 15 Eléments de l’unité de calcul Exemple : TMS320C54x DB Opérateurs Nbits Entrées Nbits Sortie Multiplieur b nat 2 b nat 2 b nat 2 b nat 2 b nat +b g 2 b nat +b g 2 b nat b nat 2 b nat +b g b nat Additionneur/ UAL Saturation/Arrondi AA Registre Opérande source Accumulateur PBCB DB bnat bnat × 1 additionneur 40 bits 1 ALU (40 bits) P Nbits MAC b nat 2 b nat 2 b nat +b g Interconnexions Interconnexions registres registres -- opérateurs opérateurs spécialisées spécialisées Ö Ö Structure Structure hétérogène hétérogène Ö Ö Bonnes Bonnes performances performances en en terme terme de de consommation consommation et et de de surface surface 2 registres accumulation 40 bits + badd CB DB CBDB EB 1 multiplieur 16*16 bits Op source 1 : registre T Op source 2 : mémoire Op destination : BB bmult ARCHI’05 - 18 RSBQ (Rapport Signal à Bruit de Quantification) Partie fractionnaire : n bits bin 1 registre à décalage en barillet Accumulateur Accumulateur 1 unité dédiée Viterbi Sat /Arr ARCHI’05 - 19 Codage en virgule fixe : étapes Fil rouge : filtre FIR N −1 y ( n ) = ∑ ai × x ( n − i ) 1. Détermination de la dynamique des données : D(xi) Méthodes statistiques ou analytiques i =0 2. Détermination de la position de la virgule : mxi x (n) 3. Détermination de la largeur des données : bxi z-1 × a0 Opérateurs SIMD, précision multiple z-1 × a1 4. Evaluation de la précision des calculs × aN-2 + Méthodes par simulation ou analytiques Calcul du Rapport Signal à Bruit de Quantification ARCHI’05 - 21 z-1 × aN-1 + + y (n) ARCHI’05 - 22 Fil rouge : filtre FIR Fil rouge 2 : filtre récursif (IIR) float x[N] = {0.123, -0.569,...} /* Signal d’entrée du filtre */ float h[N] = {-0.0295, 0.0364,.., -0.0295 }; /* Coefficients du filtre */ int main() { float x[N], y[M], acc; int i,j; Cascade de cellules d’ordre 2 for(i=0; i<N; i++){x[i] = 0;} wn + /* Initialisation variables internes */ × × × a1 a2 ARCHI’05 - 24 z-1 wn +yn × + b0 × a1 z-1 b1 × × b2 × z-1 b1 × × } + b0 z-1 for(j=0; j<M; j++) { /* Filtrage du vecteur d'entrée input */ x[0] = Input[j]; acc = x[0]*h[0] ; for(i=N-1; i>0; i--) { acc = acc + x[i]*h[i]; /* Calcul d'une cellule du filtre */ x[i] = x[i-1]; /* Vieillissement des variables internes */ } y[j] = acc; } ARCHI’05 - 23 ADD 1 ADD 0 xn a2 b2 … yn Plan Détermination du domaine de définition 1. Arithmétique virgule fixe 2. Détermination du domaine de définition 3. Codage des données Format des données: (b,m,n) 2m-1 21 20 2-1 S bm-1 bm-1 b1 b0 2-n b-1 b-2 Partie entière b-n+2 b-n+1 b-n Partie fractionnaire b = m+ n+ 1 bits format: (b,m,n) But: déterminer le nombre de bits minimal pour représenter la partie entière (mxi) mxi = ⎡log 2 (max( xi ARCHI’05 - 25 ))⎤ ARCHI’05 - 26 Méthodes pour déterminer D(xi) Méthodes analytiques Méthodes statistiques Normes dans le cas des systèmes linéaires • Simulation de l’algorithme en virgule flottante • Détermination de la dynamique à partir des paramètres statistiques du signal Ö Estimation précise mais dépendante du signal d’entrée • Détermination de l’expression de la dynamique • Utilisation de normes (L1, …) ou de l’arithmétique d’intervalle ∞ ymax1 = max n ( x(n) ). ∑ h(m) m = −∞ ÖEstimation conservatrice mais absence de débordement garantie ARCHI’05 - 27 ymax 2 = max n ( x(n) ) max ω ( H (ω ) ) • Norme L2 ymax 3 = max n ( x(n) ). ARCHI’05 - 28 ∞ ∑ h( m) H(z) Y(z) ¾ Méthode garantissant l’absence de débordement • Norme L1 • Norme Chebychev Méthodes analytiques X(z) 2 ¾ Méthode garantissant l’absence de débordement pour un signal d’entrée à bande étroite ( x(n)=cos(wt) ) ¾ Méthode limitant la probabilité de débordement m = −∞ ymax 3 ≤ ymax 2 ≤ ymax1 Filtre FIR Dynamique des données (IIR) Propagation de la dynamique (intervalles) des entrées au sein du GFS représentant l’application Sources de débordements : additionneurs [-1,1] x (n) z-1 × a0 [- |a0|, |a0| ] a1 z-1 × z-1 × aN-2 xn × aN-1 N −1 ⎡ N −1 ⎤ ⎢− ∑ ai , ∑ ai ⎥ i =0 ⎣ i =0 ⎦ [- |a1|, |a1| ] + Norme L1 • IIR : 2 sources ADD0 et ADD1 + + ∞ N −1 m = −∞ m =0 y (n) ARCHI’05 - 30 × × ∞ × wmax1 = xmax . ∑ hD (m) a1 z-1 ∞ ymax1 = xmax . ∑ h(m) b1 m = −∞ × × 1 H D ( z) = 1 + a1 z −1 + a2 z − 2 yn + b0 z-1 m = −∞ max n ( y (n) ) = max n ( x(n) ). ∑ h(m) = ∑ ai = 1.65 ADD 1 wn ADD 0 + a2 H ( z) = b2 ARCHI’05 - 31 Dynamique des données (IIR) Dynamique des données (IIR) Exemple Comparaison des différentes méthodes F iltre1 N um (z )/D en(z ) 2 x ∈ [−1,1] 1.5 0.5 − 0.2428 z −1 + 0.5 H ( z) = 1 − 0.85 z −1 + 0.8417 z − 2 xmax xmax ∑ h(m) = 2.5645 ⎯⎯→ m m = −∞ ∞ D y =2 0 0 0.5 1 1.5 2 2.5 3 3.5 F iltre 1/D en(z ) ARCHI’05 - 32 N2 Norme L1 2,56 2 9 4 Norme Chebychev 1.687 1 7,13 3 Méthodes statistiques 6 HD(jw) 4 2 = -27951 = 27581 = 16384 = 16384 = -7956 G2.max 0.5 ( m) = 9 ⎯ ⎯→ mw = 4 → k1 = 4 Codage des coefficients N1 Méthodes analytiques 8 ∑h a1 a2 b2 b0 b1 G1.max Méthodes H(jw) 1 ∞ m = −∞ b0 + b1 z −1 + b2 z − 2 1 + a1 z −1 + a2 z − 2 0 0 0.5 1 1.5 2 2.5 3 Chirp 1,66 1 7.12 3 Bruit blanc gaussien 0.74 0 2.34 2 Bruit blanc uniforme 1.4 1 4.87 3 3.5 Fonction de transfert des filtres H(z) et HD(z) ARCHI’05 - 33 G1max = ymax xmax N1 = ⎡log 2 (G1max )⎤ G2 max = wmax xmax N 2 = ⎡log 2 (G2 max )⎤ Dynamique des données (IIR) Plan Cellules d’ordre 2 cascadées 1. Arithmétique virgule fixe 2. Détermination du domaine de définition 3. Position de la virgule et codage des données Bruits de quantification H1 ( z ).H 2 ( z ).H 3 ( z ) H 1 ( z ). H 2 ( z ) H1 ( z ) x(n) H1(z) H 1D ( z ) y1(n) H2(z) w1(n) H 1 ( z ). H 2 D ( z ) y2(n) y3(n) H3(z) w2(n) w3(n) H1 ( z ).H 2 ( z ).H 3 D ( z ) H iD ( z ) = 1 1 + a1i z −1 + a 2 i z − 2 H i ( z) = b0i + b1i z −1 + b2i z −2 1 + a1i z −1 + a2i z − 2 ARCHI’05 - 34 ARCHI’05 - 35 Contraintes du codage en virgule fixe Introduction des bits supplémentaires Respect des règles de l’arithmétique virgule fixe Utilisation des bits de garde de l’accumulateur (bg bits) • Alignement de la virgule des opérandes sources d’une addition ou d’une soustraction o Format commun pour les opérandes sources • badd = bmult + bg • Pas de débordement si le nombre de bits supplémentaires k respecte k ≤ bg mb Coefficient Prévenir les débordements • Débordement possible lors d’une addition ou d’une soustraction o Nécessité d ’introduire des bits supplémentaires (bnat, mb, nb) b0 S s0 mb+ ms+1 Signal (bnat, ms, ns) S × nb+ ns bmult S badd (bmult, mb+ ms+1, nb+ ns) + k-1 (badd, mb+ ms+k, nb+ ns) ARCHI’05 - 37 ns bnat bnat • Recadrage des données : adapter le format des données à la dynamique des données ARCHI’05 - 36 ms nb + mb+ ms+1 S S S S badd bg bmult nb+ ns Filtre FIR Introduction des bits supplémentaires Recadrage de la sortie du multiplieur (badd = bmult) b0 Coefficient Signal (bnat , ms , ns ) × (bmult , mb+ ms+k, nb+ ns -k+1) • Recadrage interne s0 bnat (bnat , mb , nb ) Dx = 0.99 >> k-1 mx = 0 bmult + b0 • Recadrage de l’entrée • Recadrage des coefficients s0 (bnat , mb , nb ) (bmult , mb+ ms+k, nb+ ns-k+1) o réalisé lors du codage de ces coefficients Recadrage de l’entrée ARCHI’05 - 38 Signal >> k-1 bnat × DACC = 1,65 bmult + (badd , mb+ ms+k, nb+ ns-k+1) x (n) b0 z-1 >> >> × >> b1 × bN-2 Filtre FIR 1 m'MULT ' = 1 ACC + ARCHI’05 - 39 Graphe flot de données d’une cellule du FIR Sources de bruit dans un FIR z-1 >> >> × >> bN-1 + + e Recadrage interne Bruit lié au renvoi en mémoire du résultat bx x (n) >> Renvoi en mémoire du résultat × b0 >> + + ∆b0 K= ∑b m k = ⎡log 2 ( K )⎤ × b1 z-1 + ∆b1 × z-1 bN-2 + × ∆b N-2 bgm0 + bgm1 + + + [− K .xm , K .xm ] ∞ z-1 + >> m = −∞ ARCHI’05 - 40 mMULT = 0 m ADD = max(mMULT , m ACC , m ACC ) = 1 y (n) + mMULT = mb + mx + 1 = 0 Bruit de quantification associé à l’entrée Bruit lié au recadrage externe c z-1 >> × ACC m ACC = 1 badd + x[i-1] >> (bnat , ms+k-1, ns-k+1) d Recadrage des coefficients [− xm , xm ] ma = −1 ai Recadrage des données dans un FIR c Recadrage externe Da = 0,4 (badd , mb+ ms+k, nb+ ns-k+1) Coefficient z-1 x[i] badd + Recadrage avant la multiplication (badd = bmult) Détermination de la position de la virgule pour les données et les opérations Insertion des opérations de recadrage pour aligner la position de la virgule bN-1 + × ∆b N-1 bgm N-2 + bgm N-1 + + + bg mem + Filtre FIR Biais lié au codage des coefficients d ARCHI’05 - 41 Bruit lié au recadrage interne e y (n) Filtre FIR Filtre FIR : code C virgule fixe Architecture du processeur cible x[i] • Données en mémoire sur 16 bits • Multiplication 16 bits × 16 bits Ö 32 bits • Addition 32 bits + 32 bits Ö 32 bits (16,0,15) (16,0,15) x (n) a0 z-1 × (16,-1,16) (16,-1,16) × a1 >> × bmult + ADD × aN-2 >> 1 aN-1 ARCHI’05 - 42 >> 1 (32,1,30) (32,1,30) + y (n) Filtre IIR d’ordre 2 (cellule i) a2,i + × a1,i wi(n-2) b1,i × /* Filtrage du vecteur d'entree input */ + Recadrage Recadrage de de la la sortie sortie de de la la multiplication multiplication :: changement changement de de format format :: (32,0,31) (32,0,31) Ö Ö (32,1,30) (32,1,30) for(i=N-1; i>0; i--) { acc = acc + ((long)(x[i]*h[i])>>1); x[i] = x[i-1]; } y[j] = (int)(acc>>16); } /* Calcul d'une cellule du filtre */ /* Vieillissement des variables internes */ Réduction Réduction de de la la largeur largeur de de la la variable variable 32 32 bits bits Ö Ö 16 16 bits bits Récupération Récupération des des 16 16 bits bits les les plus plus significatifs significatifs de de la la donnée donnée (l(l ’opération ’opération de de } cast cast sur sur acc acc permet permet de de récupérer récupérer les les bits bits de de poids poids faible faible uniquement) uniquement) ARCHI’05 - 43 Dynamique des données (IIR) F iltre1 N um (z )/D en(z ) 2 x ∈ [−1,1] × wi(n-1) b2,i Le Le signal signal d’entrée d’entrée et et les les coefficients coefficients sont sont spécifiés spécifiés au au niveau niveau du du code code C C en en entiers entiers sur sur 16 16 bits bits (absence (absence de de type type virgule virgule fixe fixe en en C) C) :: 15 •• l’entier l’entier représentant représentant xx (16,0,15) (16,0,15) est est obtenu obtenu en en multipliant multipliant xx par par 2215 16 •• l’entier l’entier représentant représentanthh (16,-1,16) (16,-1,16) est est obtenu obtenu en en multipliant multipliant hh par par 2216 Exemple ADD0 + */ for(j=0; j<M; j++) { x[0] = Input[j]; acc = (long)(x[0]*h[0])>>1; 1 Renvoi de la donnée en mémoire (entrée) x(n) /* Coefficients (16,-1,16) /* Initialisation des variables internes du filtre */ (16,1,14) (16,1,14) + /* Signal x, codage (16,0,15)*/ for(i=0; i<N; i++){x[i] = 0;} × 1 (32,1,30) (32,1,30) wi(n) b0,i × 1.5 0.5 − 0.2428 z −1 + 0.5 H ( z) = 1 − 0.85 z −1 + 0.8417 z − 2 xmax × xmax m = −∞ y =2 0 0 0.5 1 1.5 2 2.5 3 3.5 F iltre 1/D en(z ) 8 ∞ ∑h m = −∞ H(jw) 1 0.5 ∞ ∑ h(m) = 2.5645 ⎯⎯→ m D ( m) = 9 ⎯ ⎯→ mw = 4 → k1 = 4 ADD1 6 HD(jw) 4 2 Codage des coefficients + y (n) (sortie) yi(n) (entrée cellule suivante) ARCHI’05 - 44 int main() { int x[N]; y[M]; long acc; int i,j; z-1 + yi-1(n) sortie cellule précédente int x[M] = {-809, -6180, -1570, ...} int h[N] = {-1933, 2386, 3631,}; ACC z-1 (32,0,31) (32,0,31) >> MULT h[i] a1 a2 b2 b0 b1 ARCHI’05 - 45 = -27951 = 27581 = 16384 = 16384 = -7956 0 0 0.5 1 1.5 2 2.5 3 Fonction de transfert des filtres H(z) et HD(z) 3.5 Position de la virgule (IIR) Codage des données (IIR) mx = ⎡log 2 (max n ( x(n) ))⎤ = 0 (16,0,15) mwi = ⎡log 2 (max n ( wi (n) ))⎤ = 4 ( x(n) ))⎤ = 0 ( ))⎤ = 0 mbij = ⎡log 2 max j bij m ADD 0 = MAX (mx , mai + mwi + 1, mwi ) = 5 + × × bmult wi(n) (16,4,11) × b2,i + + (16,mw,nw) wi(n-1) × b1,i (32,5,16) × a1,i wi(n-2) MULT (32, madd0 , nadd0) + a2,i m yi = ⎡log 2 (max n ( yi (n) ))⎤ = 2 maij = ⎡log 2 (max j ( ai ADD0 (16,mx,,nx) b0,i ADD1 × ADD + ACC m ADD1 = MAX (mbi + mwi + 1, m yi ) = 5 (16,my,ny) (32, madd1, nadd1) (16,2,13) (32,5,16) y (n) ARCHI’05 - 46 Conclusion ARCHI’05 - 47 Conversion flottant-fixe (IRISA) Différentes étapes du flot de codage C source code • Détermination des fonctions de transfert intermédiaires • Calcul de leur réponse impulsionnelle • Détermination du domaine de définition des données • Analyse du graphe flot de données du programme • Détermination du système d’équations régissant le format des données • Résolution du système d’équations • Obtention des recadrages et du format des coefficients ARCHI’05 - 48 #define pi 3.1416 #define pi 3.1416 main() { float x,h,z for(i=1;i<n;i++) { *z= *y++ + *h++ } for(i=1;i<n;i++) { *z= *y++ + *h++ } Correlator.C #define pi 3.1416 #define pi 3.1416 main() { float x,h,z for(i=1;i<n;i++) { *z= *y++ + *h++ } for(i=1;i<n;i++) { *z= *y++ + *h++ } #define pi 3.1416 #define pi 3.1416 main() { float x,h,z for(i=1;i<n;i++) { *z= *y++ + *h++ } for(i=1;i<n;i++) { *z= *y++ + *h++ } Floating-point specification Correlator.C Correlator.C Fixed-point conversion Binary-point position determination High level synthesis tool BSS Selection Scheduling Allocation Fixed-point specification optimization Accuracy evaluation Precision constraint ARCHI’05 - 49 [Ménard02, Ménard04] Fixed-point specification optimization Code generation tool CALIFE Selection Scheduling Allocation