Diviseurs

Pesée du pain
avec restauration sans restauration, pesée RST

On veut calculer Q = A ÷ D. Par un coup de chance extraordinaire on dispose d'une balance, d'un pain de mie dont le poids est justement A et enfin d'une série de poids de valeur D, 2D, 4D, 8D, ... 2i*D marqués respectivement avec 1, 2, 4, 8, ... 2i.
En fait D est un nombre en binaire, et 2i*D s'obtient simplement en décalant D. La balance compare le poids des objets sur chacun de ses deux plateaux ( £ ou > ) .

Divisions récurrentes

La division est peu fréquente, cependant comme son délai d'exécution est bien plus grand que celui de l'addition ou de la multiplication, son incidence sur le temps de calcul est substantielle. Il convient donc de soigner la réalisation des diviseurs.
On veut calculer Q = A ÷ D. Ceci est équivalent à D × Q = A R où R est le reste. Donc si D et Q s'écrivent chacun n bits, A s'écrit avec 2n  bits.
On va construire une suite Qn, Qn-1, ... Q2, Q1, Q0 et une suite Rn, Rn-1, ... R2, R1, R0 telles que l'invariant A = Qj × D + Rj soit respecté pour tout j.
La récurrence est :

  • Qj-1 = Qj + qj-1 × 2j-1                ( simple concaténation )
  • Rj-1 = Rj qj-1 × D × 2j-1           ( soustraction conditionnelle )

avec comme valeurs initiales :

  • Qn = 0
  • Rn = A.

Quand la récurrence se termine, on a Q = Q0 = Sj qj × 2j . R = R0 est le reste de la division.

Soustracteur conditionnel

Un "soustracteur conditionnel" donne le résultat S suivant:
si R < D alors S = R sinon S = R D ; // S = R modulo D ;
Chaque cellule "SC" calcule le résultat et la retenue de la soustraction R D. Si la retenue cn (tout à gauche) vaut '1' alors S reçoit le résultat de la soustraction, sinon S reçoit R. Cette dernière opération qui rétablit l'ancienne valeur de R est parfois appelée "restauration", d'où le nom du diviseur.
 

La fonction du "soustracteur conditionnel": si R < D alors S = R sinon S = R D, se résume par sa fonction de transfert appelée "diagramme de Robertson". Pour converger, la division impose en outre que 0 £ R £ 2 * D . Le "diagramme de Robertson" permet donc de visualiser les cas de débordement . La logique de détection du débordement dans la division n'est pas incluse dans les diviseurs qui suivent.

Cellule du soustracteur conditionnel "SC"

Vérifiez que vous maîtrisez les fonctions logiques de la cellule "SC" :
si q = '0' alors { co = majorité ( r, d, ci ) ; s = r } // identité
si q = '1' alors { co = majorité ( r, d, ci ) ; s = r Å d Å ci } // soustraction

Diviseur avec restauration

Un diviseur "avec restauration" consiste en une suite de décalages de D et de tentatives de soustractions de D aux restes partiels Rj successifs. Le diviseur est formé d'une structure régulière de cellules de soustraction conditionnelle "SC" (identité ou soustraction selon q j ).

Inverse de la division

Si on retourne le diviseur "avec restauration" tête en bas et replace les soustracteurs conditionnels "SC" par des additionneurs conditionnels "AC" ( identité ou addition selon qj ) on obtient l'opérateur de l'inverse de la division c'est à dire la multiplication avec "reste" : A = D × Q + R .

Cellule de l'additionneur conditionnel "AC"

Vérifiez que vous maîtrisez les fonctions logiques de la cellule d'addition conditionnelle "AC" :
2 * co + s = q*d + r + ci , autrement dit :

co = majorité ((q*d), r, ci ) ; // majorité
s = (q*d) Å r Å ci ; // somme modulo 2

Diviseur "sans restauration"

Un diviseur "sans restauration" consiste en une suite de décalages et d'additions ou de soustractions. Il est formé d'une structure régulière de cellules d'addition/soustraction "AS" (addition ou soustraction selon qj ).

  • si Rj < 0 et D < 0 alors {Rj+1 = Rj D ; qj = '1'}
  • si Rj < 0 et D ³ 0 alors {Rj+1 = Rj + D ; qj = '-1'}
  • si Rj ³ 0 et D < 0 alors {Rj+1 = Rj + D ; qj = '-1'}
  • si Rj ³ 0 et D ³ 0 alors {Rj+1 = Rj D ; qj = '1'}
 

Le fonctionnement de l'addition/soustraction "AS" est donnée par le "diagramme de Robertson" si R < 0 alors S = R + D sinon S = R D.

Cellule de l'additionneur/
soustracteur "AS"

Vérifiez que vous maîtrisez les fonctions logiques de la cellule d'addition/soustraction "AS" :

si q = '-1' alors 2*co + s = r + d + ci // addition
si q = '1' alors 2*co + s = r + 1 d + ci // soustraction

Avantage et inconvénient du diviseur sans restauration

Le diviseur sans restauration a l'avantage de la compatibilité avec le complément à 2. Cependant le quotient Q est écrit avec les chiffres '-1' et '1' , il faut donc le convertir en complément à 2, ce qui est très simple.

En mettant à zéro le bit poids faible de Q (impair), ce convertisseur donne Q 1 (pair) .
Pour la division, on convient que si le reste R n'est pas nul alors il doit avoir le même signe que le dividende A. Une porte "XOR" détecte la différence des signes de A et R.

  • si A ³ 0 et R < 0 et D ³ 0 alors { Q = Q 1 ; R = R + D }
  • si A ³ 0 et R < 0 et D < 0 alors { Q = Q + 1 ; R = R D }
  • si A < 0 et R > 0 et D ³ 0 alors { Q = Q + 1 ; R = R D }
  • si A < 0 et R > 0 et D < 0 alors { Q = Q 1 ; R = R + D }

Il reste un cas pathologique R = - | D | à détecter et corriger pour obtenir R = 0 .

Diviseurs rapides

Trois approches se combinent pour réaliser des diviseurs rapides:

  • Utiliser des additions/soustraction sans propagation de retenue.
  • Préconditionner le diviseur et le dividende pour simplifier la division.
  • Utiliser des grandes bases pour diminuer le nombre d'étapes.

Cheminement dans un diagramme de Robertson

Pour avoir un diagramme de Robertson carré, on normalise les restes successifs: ( Rj × b-j) où b est la base de numération.
Les pentes noires représentent la fonction de transfert Rj Þ Rj-1, le trait rouge est la fonction multiplication par b qui passe de l'étape j à la suivante j-1. Cliquer dans le carré blanc désigne le point de départ, cliquer hors de ce carré arrête puis recommence, sortir le pointeur de la figure suspend ou reprend.

La base 10 nous est familière, elle ne sert ici que comme illustration car elle serait très inefficace codée en binaire.