• Aucun résultat trouvé

2.3 Opérations virgule fixe

2.3.2 Addition virgule fixe

2.3.2.1 Choix du format

Dans l’optique d’aligner les opérandes sur un format commun, la première étape est de déterminer ce format commun (excepté si celui-ci est fixé). Cette étape est décrite ci-dessous dans les trois cas cités en introduction.

Largeur du résultat non fixée (cas matériel) : En matériel, on peut décrire l’additionneur de façon à ce qu’il effectue le calcul sur la largeur opti-male, notéewopt, c’est à dire la largeur minimale qui effectue l’addition exacte des deux opérandes (figure 2.15a).

Pour ce faire, il suffit de calculer, en utilisant l’arithmétique d’intervalle, la somme des intervalles des variables sans considérer les formats :

[z; z] [x; x] + [y; y]. (2.28) On rappelle qu’en arithmétique d’intervalle, la somme de deux intervalles réels [a; a] et [b; b] est définie par :

[a; a] + [b; b] [a + b; a + b]. (2.29) Ensuite, mz est déterminé par le plus grand msb entre celui de z et celui

de z, eux-mêmes déterminés par l’algorithme 1, c.-à-d. on a :

mz max(mz, mz). (2.30)

Pour finir, puisqu’on veut effectuer une somme sans perte d’information (sans suppression de bit),z est le plus petitlsb des deux opérandes, on a alors :

z min(x, y), (2.31)

et on en déduit

2. Arithmétique virgule fixe

Largeur du résultat fixée mais format non fixé : En logiciel, la largeur d’un additionneur est fixée, et est la même pour le résultat et pour les opé-randes (on peut noter ce principe par le schémaw + w→ w, la somme de deux

éléments de même largeurw donne un élément de largeur w). Le bit de retenue

existe mais est stocké à part, généralement dans un registre de configuration. De plus, en matériel, on peut également adopter ce même schéma ou bien dé-cider de conserver le bit de retenue (schéma w + w → w + 1). On considère

dans le cas présent (illustré par la figure 2.15b) une largeur fixée wf ix plus petite que la largeur optimale déterminée précédemment (le cas wf ix  wopt ne changeant rien à la méthode d’évaluation ci-dessus). L’exemple suivant vise à montrer pourquoi la méthode précédente ne fonctionne pas dans le caswf ix

fixée avecwz< wopt.

Exemple 2.5. Soientx∈ [−64; 100](7,0), y ∈ [−32; 28](5,0), et la largeur fixée

wf ix = 5. En utilisant la méthode précédente, la somme des intervalles donne :

[z; z] [−96; 128], (2.33)

D’après (2.30), mz = mz= 8, et donc puisque wz est fixée on a, d’après (2.8),

z = mz − wf ix+ 1 = 4. Anticipons maintenant un peu sur l’étape suivante d’une somme, à savoir la mise au format commun, ici (8, 4). Sur ce format, l’intervalle de x devient [−64; 96](8,4) et celui de y devient [−32; 16](8,4) (on précise que le mode d’arrondi considéré est l’arrondi par troncature). Et donc on obtient l’intervalle FxP dez par :

[z; z](8,4)  [−64; 96](8,4)+ [−32; 16](8,4)= [−96; 112](8,4). (2.34) On s’aperçoit que les deux bornes dez sont représentables sur le format (7, 3).

On pouvait faire plus fin en considérant une autre méthode. En effet, po-sons dans un premier temps mz  max(mx, my) = 7 en tant que première estimation de mz. On peut alors déterminer z à partir de mz et wf ix par 

z =mz−wf ix+1 = 3 et on a un format commun (mz, z) = (7, 3). On obtient alors, une fois les intervalles formatés,x∈ [−64; 96](7,3), et y∈ [−32; 24](7,3), et finalement :

[z; z](7,3)  [−64; 96](7,3)+ [−32; 24](7,3)= [−96; 120](7,3). (2.35) L’intervalle est alors plus grand et surtout le pas de quantification est divisé par deux.

Une fois le formatage effectué sur le format déterminé a priori, il est pos-sible d’avoir une retenue (si on avait prit la largeur optimale on aurait eu

z = 128 qui n’est pas représentable sur le format (7, 3)) et donc il faut dans ce

cas là passer au format(8, 4) et recalculer la somme des intervalles.

Cet exemple montre bien qu’il est nécessaire d’adopter une nouvelle ap-proche. Décrivons alors formellement la seconde méthode utilisée dans cet 58

2.3. Opérations virgule fixe

exemple. Lors d’une addition, on sait que le msb du résultat sera égal au msb

du plus grand opérande, plus un s’il y a une retenue. Cette retenue ne peut être déterminée qu’en ajoutant les bornes formatées des opérandes deux-à-deux (puisqu’on a vu qu’une fois formatées, l’addition des bornes peut donner un msb différent). Or pour formater les variables, il faut connaître le format

commun et donc connaître mz qui dépend de la présence d’une retenue ou non. Pour contourner ce cercle vicieux, nous proposons l’algorithme2. Cet al-gorithme consiste dans un premier temps à déterminer un format commun a priori où le msb commun est le plus grand msb des deux opérandes. Ensuite,

les bornes des intervalles des opérandes sont arrondies sur ce format commun et on en déduit une première estimation des bornes de l’intervalle somme. Pour finir, une évaluation a posteriori du format idéal de la somme est effectuée.

Algorithme 2: Choix du format commun pour l’addition z = x + y

# Calcul a priori du format commun  mz ← max(mx, my) ;  z← min(x, y) ;  wz← mz− z+ 1 ; Siwz> wf ix Alors  z← mz− wf ix+ 1 ;  wz← mz− z+ 1 ; Fin

# Arrondi (au plus proche ou par troncature) sur le z-ième bit des bornes de x et de y, en utilisant l’opérateurz(·) (voir2.4.1 pour les arrondis virgule fixe)

x ← z(x) ;

x ← z(x) ;

y ← z(y) ;

y ← z(y) ;

# Calcul a priori des bornes de z z← x+ y;

z← x+ y;

# Calcul du format commun a posteriori. M SB(x) est l’opération

consistant à déterminer lemsb de x. mz ← max (MSB(z), MSB(z)) ; Simz− z+ 1 wf ix Alors z← z; Sinon z← mz− wf ix+ 1 ; Fin

2. Arithmétique virgule fixe

À la fin de l’algorithme on constate qu’il y a une condition pour le calcul a posteriori de z. En effet, si on calcule z par z = mz − wf ix + 1 dans tous les cas, et si le format calculé est plus petit que la largeur fixée (par exemple si la somme exacte peut se faire sur 12 bits alors que l’opérateur a une largeur fixée à 16), on calculera la somme uniquement sur les bits de poids fort (le calcul de la somme sera "collé" à gauche) et les bits de poids faible seront inutilisés (et auront pour valeur 0). Si dans ce cas de figure on calcule

z parz= min(x, y), alors l’opérateur utilisera uniquement les bits de poids faible (le calcul de la somme sera "collé" à droite) et la potentielle retenue sera représentable sur le reste des bits disponibles.

L’estimation de mz à l’étape 1 nous donne la borne minimale de mz, en fait on amz∈ { mz,mz+ 1} selon s’il y a une retenue ou non.

Dans le cas d’un schéma d’addition à largeur fixéew +w→ w (cas logiciel),

simz =mz alors le format final est(mz, z), et si mz =mz+ 1 alors le format commun des opérandes est (mz, z) mais le format du résultat dépend de sa largeurwz= mz− z+ 1 :

– si wz < wf ix : la retenue est représentable surwf ix et le résultat a pour format (mz+ 1, z),

– siwz = wf ix: la retenue n’est pas représentable sur wf ix et le résultat a pour format(mz, z). La potentielle retenue significative est alors envoyée dans un registre à part et peut être utilisée si l’architecture le permet. En matériel, dans le cas d’un schéma w + w → w + 1, si mz = mz + 1 alors le résultat prend en compte la retenue sans arrondir le bit en positionz, c.-à-d. l’additionneur retournewz+ 1 bits.

Largeur et format du résultat fixés : Nous avons vu dans le chapitre

1 qu’il est possible de connaître l’intervalle de sortie d’un filtre, et donc le format virgule fixe de cette sortie. Nous verrons comment cette information va imposer non pas une largeur mais un format sur le résultat de nos additions (figure 2.15c). Dans ce cas là, il n’y a rien à faire à cette étape, la question sera de savoir si le résultat de la somme est représentable ou non sur le format fixé.