920 likes | 1.28k Views
Additionneurs. Rappel sur l'écriture des entiers en base 2. Entiers positifs Entiers relatifs (complément à 2). Additionneur "Full Adder" (FA). A i B i. C i+1. S i = A i Å B i Å C i. C i+1 = A i B i + A i C i + B i C i = majorité(A i ,B i ,C i ). C i.
E N D
Rappel sur l'écriture des entiers en base 2 • Entiers positifs • Entiers relatifs (complément à 2)
Additionneur "Full Adder" (FA) Ai Bi Ci+1 Si = AiÅ BiÅ Ci Ci+1 = AiBi + AiCi + BiCi= majorité(Ai,Bi,Ci) Ci Ci+1 = AiBi + Ci ( AiÅ Bi) Si AiBiCi Ci+1 Si 000 0 0 001 0 1 010 0 1 011 1 0 100 0 1 101 1 0 110 1 0 111 1 1 La somme pondérée de ce qui entre est égale à la somme pondérée de ce qui sort : Ai+ Bi+ Ci = Si + 2 * Ci+1
A=A3 A2 A1A0 B=B3 B2 B1 B0 S = A + B A3B3 A2B2 A1B1 A0B0 S=R S3 S2 S1S0 C4 C3 C2 C1 C0 S3 S2 S1 S0 I- Additionneur à propagation de retenue Ci+1 = 1 si retenue Co=0 • La retenue se propage à travers tous les étages • Délai = O(n) Si = Ai Å Bi Å Ci Ci+1 = AiBi + AiCi + BiCi Ci+1 = AiBi + Ci ( Ai Å Bi)
II- Additionneur à sélection de retenue(carry select adder CSA) • Idée : on sélectionne la retenue sortante • à l'aide de la retenue entrante • La retenue entrante ne se propage pas à travers les FA • on dispose de temps pour la calculer • à mettre en poids fort (là où la retenue est en retard)
Cellule de CSA Si = Ai Å Bi Å Ci Ci+1 = AiBi + Ci ( Ai Å Bi)
t5 t4 t3 t2 t1 t4 t3 t2 t1 t3 t2 t1 t2 t1 t2 t1 t6 t5 t4 t3 Carry select adder CSA : Délai n1/2 0 1 0
Première cellule d'un bloc CSA 0 1 • x Ci+1 = AiBi + Ci ( Ai Å Bi) Retenue1 = AiBi + 0 ( Ai Å Bi) = AiBi Retenue2 = AiBi + 1 ( Ai Å Bi) = Ai+Bi
III Additionneur à retenue bondissante • Idée : Si Ai=Bi=0, Ci+1=0 : pas de retenue quelque soit Ci Si Ai=Bi=1, Ci+1=1 : il y a forcément une retenue, quelque soit Ci Si Ai≠Bi, , la retenue sortante de l’étage i est égale à la retenue entrante • Par blocs de p bits : • De même, la retenue sortante de l’étage i est égale à la retenue entrante si et seulement si les Apbits sont les inverses des Bpbits 01101 + 10010 + Cin ------------- Cin Somme • Dans les autres cas, la retenue sortante peut être calculée indépendamment de la retenue entrante
Carry Skip ADDER • Un bloc est constitué d’un additionneur à propagation de retenue • et d’un « circuit » détectant si pour chaque bit i du bloc on a Ai≠Bi, Ai,Bi, i=15,…,8 Ai,Bi, i=7,…,0 Ai,Bi, i=23,…,16 & & & + + + Cn C0 P7 P23 P15 calcule : (A0 B0).(A1 B1)…. (A7 B7) & Temps de calcul : plus long temps de propagation d’une retenue : une retenue se propage depuis le rang i où elle est générée (et pour lequel Gi=1) jusqu’au rang où la retenue suivante est générée
Carry Skip ADDER Remarques • les signaux ne servent pas pour calculer la retenue (que la somme) • Les signaux peuvent être calculés en parallèle • Les signaux peuvent être calculés en parallèle & & & + + + Cn C0 P7 P23 P15
& & + + Carry Skip ADDER • Temps de calcul • pire cas : le retenue est générée au premier bloc, « saute » les blocs suivants et est générée au dernier bloc & & & + + + Groupe 3 Groupe 2 Groupe 1
Carry Skip ADDER : taille des blocs • Taille optimale des blocs (hyp : taille constante = k) ? m blocs de taille k : n = m * k ; m ? ; k ? temps de traversée d’un bloc de k additionneurs : t1*k temps de propagation : t2 Temps total (pire cas) : 2*t1*k + (m-2)*t2 = 2* t1 * n/m + (m-2) * t2 soit f(x) : 2*t1*n/x + (x-2) * t2 minimum pour x0 = (2*n*t1/t2)1/2 f convexe sur R+ => m optimal : 2 valeurs entières qui encadrent x0 Temps total = O(n1/2) exemple : additionneur de 60 bits, t1=t2 => x0=1201/2=10,95 • m = 10 ou m =12 • 10 blocs de 6 bits ou 12 blocs de 5 bits
Carry Skip ADDER : taille des blocs • Hypothèse: Groupes de même taille k ,m=n/k groupes , k et n/k entiers • k sélectionné pour minimiser le temps de la plus longue chaîne de propagation • Notations: • tr - temps de propagation de la retenue sur un seul bit • ts(k) – Temps pour sauter un groupe taille k (la plupart du temps - indépendant de k) • tb – délai du "OU" entre 2 groupes • Ttotal – temps total de propagation de la retenue – lorsque la retenue est générée à l'étage 0 et se propage jusqu'à l'étage n-1 • La retenue se propage dans les étages 1,2, … ,k-1 du groupe 1, saute les groupes 2,3, … , (n/k-1), et se propage dans le groupe n/k
Carry Skip ADDER : taille des blocs • Ttotal=(k-1)tr+tb+(n/k-2)(ts+tb)+(k-1)tr • Exemple - implémentation 2 niveaux • tr = ts+tb=2G • Ttotal=(4k+2n/k-7) G • En dérivant Ttotal par rapport à k et en égalisant à 0 - • kopt = n/2 • Taille des groupes et temps de propagation de la retenue proportionnel à n - idem carry-select adder • Exemple : n=32, 8 groupes de taille kopt =4 est la meilleure solution • Topt=25Gau lieu 62G pour un additionneur à propagation de retenue
Accélération • Taille du premier et dernier groupe plus petite que la taille fixée k – le temps de propagation de la retenue dans ces groupes réduit • Taille des groupes centraux augmentée – puisque le temps de "saut" est généralement indépendant de la taille du groupe • Autre approche : ajouter un second niveau pour permettre le saut de deux ou plusieurs groupes en une étape (plus de 2 niveaux possible) • Algorithmes existant pour déterminer les taille de groupes optimales pour différentes technologies et implantations (càd différentes valeurs du ratio (ts+tb)/tr)
Groupes de taille variable • A l'inverse du cas des groupes constants – on ne peut se restreindre à l'analyse du pire cas de la propagation de la retenue • Peut mener à la conclusion triviale : le premier et le dernier groupe composé d'un seul étage (1 bit) – les n-2 étages restants constituant un seul groupe central • La retenue générée au début du groupe central peut se propager à travers les autre n-3 étages – et par là devenant le pire cas • On doit donc considérer toutes les chaînes de retenue démarrant à n'importe quelle position arbitraire de bit a (avec xa=ya) et s'arrêtant à b (xb=yb), position à laquelle une nouvelle chaîne de retenue (indépendante de la précédente) commence. (X et Y opérandes)
Optimiser les taille de groupe • k1, k2, … , kL – tailles des L groupes – avec • Cas général: Chaîne commençant dans le groupe u, finissant dans le groupe v, sautant les groupes u+1, u+2, … ,v-1 • Pire cas - retenue générée à la première position dans u et finissant dans la dernière position dans v • Le temps de propagation de la retenue est : • Nombre de groupes L et tailles k1, k2, …, kL sélectionnées de telle façon • que la plus longue chaîne de propagation de la retenue soit minimale • Solutions algorithmiques développées - programmation dynamique
Optimisation - Exemple • additionneur 32-bit avec un seul niveau de saut • ts+tb=tr • Organisationoptimale - L=10 groupes de taille k1,k2,…,k10 = 1,2,3,4,5,6,5,3,2,1 • Résultat Tcarry 9 tr • Si tr=2 G - Tcarry 18 G au lieu 25 G pour des groupes de taille égale • Exercice: Montrer que toute paire de position de bits dans deux groupes quelconques u et v ( 1 u v 10 ) satisfait Tcarry(u,v) 9 tr
IV- Additionneur à retenue anticipée (Carry Look-Ahead : CLA) • L'inconvénient des structures précédentes est le temps nécessaire à la réalisation de l'addition. Ce temps est en effet conditionné par la propagation de la retenue à travers tous les additionneurs élémentaires. • Dans un additionneur à retenue anticipée on évalue en même temps la retenue de chaque étage. Pour cela on détermine pour chaque étage les quantités Pi et Gi suivantes: • pi = ai Å bi (propagation d'une retenue) • gi = ai.bi (génération d'une retenue)
Additionneur à retenue anticipée : CLA pi= aiÅbi(propagation d'une retenue)gi= ai.bi(génération d'une retenue) La retenue entrante à l'ordre i vaut 1 si :- soit l'étage i-1 a généré la retenue (gi-1 = 1)- soit l'étage i-1 a propagé la retenue générée à l'étage i-2 (pi-1=1 et gi-2=1)- soit les étages i-1 et i-2 ont propagé la retenue générée à l'étage i-3 (pi-1=pi-2=1 et gi-3=1)..........- soit tous les étages inférieurs ont propagé la retenue entrante dans l'additionneur (pi-1=pi-2=...=p0=c0=1). ci = gi-1 + pi-1.gi-2 + pi-1.pi-2.gi-3 +................+ pi-1.pi-2.pi-3....p0.c0 c1 = g0 + p0.c0c2 = g1 + p1.g0 + p1.p0.c0c3 = g2 + p2.g1 + p2.p1.g0 + p2.p1.p0.c0c4 = g3 + p3.g2 + p3.p2.g1 + p3.p2.p1.g0 + p3.p2.p1.p0.c0
Additionneur à retenue anticipée pi= aiÅbi (propagation d'une retenue) gi= ai.bi (génération d'une retenue) Si = aiÅbiÅci= piÅci ci = gi-1 + pi-1.gi-2 + pi-1.pi-2.gi-3 +................+ pi-1.pi-2.pi-3....p0.c0
Additionneur à retenue anticipée b3 a3 b2 a2 b1 a1 b0 a0 g.p. g.p. g.p. g.p. p3 g3 p2 g2 p1 g1 p0 g0 c0 C.L.U. c4 c3 p3 p2 p1 p0 c2 c1 s3 s2 s1 s0 Si = piÅci CLU : Carry Look-ahead Unit
g.p. Bloc g.p. pi= aiÅbi (propagation d'une retenue) gi= ai.bi (génération d'une retenue) ai bi pi gi
Bloc CLU ci = gi-1 + pi-1.gi-2 + pi-1.pi-2.gi-3 +................+ pi-1.pi-2.pi-3....p0.c0 p3 g3 p2 g2 p1 g1 p0 g0 c0 c4 c3 c2 c1 Délai : 2 portes
b11 b7 b3 a11 a7 a3 b2 b10 b6 a2 a6 a10 b9 b5 b1 a9 a5 a1 b8 b4 b0 a8 a0 a4 C.L. Adder (n>4) En pratique : n = 4 Pour n >4 : Arbre de C.L.A multi-niveau (au détriment de la vitesse) c0 c8 c4 c12
V- Génération et propagation de groupe Soient gi , pi , Pi,j ,Gi,j définis de la façon suivante : Gi,i = gi= ai . bi : génération au rang i Pi,i = pi= aiÅbi : propagation au rang i Gi,k = Gi,j + Pi,j .Gj-1,k : génération du rang k au rang i (n>i≥j≥k≥0) Pi,k = Pi,j .Pj-1,k : propagation du rang k au rang i ci+1 = Gi,0 + Pi,0 . c0 : retenue au rang i+1 que l'on cherche à obtenir Si = aiÅbiÅci= piÅci = piÅ (Gi-1,0 + Pi-1,0 . c0); S0 =p0Åc0 Si = aiÅbiÅci= piÅci = piÅGi-1,0 ; S0 =p0 si c0=0
Pi,j Gi,j Pi,j Pj-1,k Gi,j Pi,j Gj-1,k Pj-1,k Gj-1,k Pi,k Gi,k Pi,k Gi,k Cellule de Brent et Krung n>i>j>k>1 Gi,k = Gi,j + Pi,j .Gj-1,k Pi,k = Pi,j .Pj-1,k Propriétés : • La cellule est associative => nombreux assemblages possibles • Règle d’assemblage : toute sortie de rang i dépend des entrées des rangs 0 à i • La cellule est non commutative Gi,i = gi Pi,i = pi
15,14 13,12 11,10 9,8 7,6 5,4 3,2 15,12 11,8 7,4 15,8 Calcul arborescent 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Le calcul des autres retenues peut-être fait : - 1 à coût minimum, - 2 rapide à fanout variable, - 3 rapide à fanout fixe Si = piÅGi-1,0
Additionneur Brent & Kung en temps log2(n)+2 calcul pi et gi Gi C16 si = pi Gi-1,0
Règles de construction Il y a une seule règle de construction des arbres imbriqués de cellules "BK" : Toute retenue ci de rang i est reliée à toutes les entrées de rang j < i par un arbre binaire planaire de cellules "BK". Cela permet d'entrelacer les arbres des n sorties de très nombreuses façons en fonction du nombre de bits et du délai de l'additionneur. Ce délai va de (n-1) à log2(n), bornes comprises.
Additionneur de Brent & Kung modifié G14,0 = G14,14 + P14,14 .G13,0 Modification de Fishburn (1990) : une cellule de plus mais réduction de 6 à 5 G14,0= G14,12+ P14,12 .G11,0 G14,12= G14,0+ P14,0 .G13,12
Additionneur de Sklansky en temps log2(n) Délai : log2(n) contre log2(n)+2 Nombre de celules : 32 contre 27
Additionneur de Ling (1981) ki= le retenue a été tuée au rang i = ai' . bi' Remarque : gi = k'i gi Calcul de la 6ième retenue S6 = p6ÅG5,0 G5,0 = G5,3 + P5,3 G2,0 G5,3 = g5 + k'5 g4 + k'5k'4 g3 G2,0 = g2 + k'2 g1 + k'2k'1 g0 P5,3 =k'5k'4 k'3 Le délai de S6 est déterminé par G5,0 dont tous les termes contiennent k'5 sauf le premier . Or g5 = k'5 g5. On metk'5 en facteur : S6 = p6Å k'5 H5,0 (Hi,0 pseudo-retenue au rang i) H5,0 = H5,3 + Q5,3 H2,0 H5,3 = g5 + g4 + k'4 g3 H2,0 = g2 + g1 + k'1 g0 Q5,3 =k'4 k'3 k'2
Additionneur de Ling Pour S6 on précalcule p6et p6 Åk'5 G5,3 = g5 + k'5 g4 + k'5k'4 g3 = a5b5 +(a5+b5)a4b4 +(a5+b5)(a4+b4)a3b3 H5,3 = g5 + g4 + k'4 g3 = a5b5 +a4b4 +(a4+b4)a3b3 H5,3 est plus rapide à calculer que G5,3
Additionneurs Parallèles • But : éviter la propagation de la retenue • Astuce : coder les chiffres sur 2 bits • Le résultat est la somme de l'addition et de la retenue de l'étage précédent • codage : 0 : 00, 1 : 01 ou 10, 2 : 11
a b c d e CS h g f Cellule CS (Carry-Save) • Cellule CS : somme pondérée des sorties = somme pondérée des entrées a + b + c + d + e = 2*h + 2*g + f • La sortie "h" ne dépend pas de l'entrée "e". • h : retenue pour le bit suivant • g : partie du résultat pour le bit suivant • Chaque chiffre est maintenant représenté sur 2 bits • la valeur du chiffre est la somme de ces deux bits. Les valeurs possibles des chiffres "CS" sont donc '0', '1' et '2' .
Additionneur parallèle CS a2 b2 a1 b1 a0 b0 0 CS CS CS g f g f g f s0 s2 s1
Table de vérité a + b + c + d + e = 2*h + 2*g + f h = majorité (a,b,c) g = majorité (somme(a,b,c),d,e) f = (somme (a,b,c,d,) e ) = somme (a,b,c,d,e)
a b c d FA e h FA g g f g Implantation : additionneur parallèle CS h = majorité (a,b,c) g = majorité (somme(a,b,c),d,e) f = somme (a,b,c,d,e)
Additionneur parallèle ai {0,1,2} Codage : ai:{ai1,ai2} / ai1+a12 = ai 0 : 00 1 : 01 ou 10 2 : 11 CS
Nombre réels • Codage des réels : virgule flottante • flottant stocké sous la forme M * BE • M : Mantisse ; B : Base ; E : Exposant • exemple : 123 . 103 = 123 000 • Représentation IEEE 754, base 2 (signe 1 bit, exposant et mantisse sur 32 ou 64 bits pour simple et double précision) • SM : signe de la mantisse : 1 bit • Eb : exposant biaisé : 8 ou 11 bits • M : Mantisse : 23 ou 52 bits SM Eb M