Diviseurs rapides

Division "SRT" sans propagation de retenue

Le diviseur ci dessous a trois inconvénient :

  • le bit poids fort du diviseur D doit toujours valoir '1' pour que le diviseur fonctionne
  • le quotient Q et le reste R doivent être convertis en binaire
  • le reste R n'a pas toujours le signe du dividende A (comme dans la division sans restauration)

et deux avantages :

  • il est plus rapide que les précédents car sans propagation de retenue
  • il ne déborde jamais si le bit poids fort du dividende A reste toujours '0'

On dit que le diviseur D est "normalisé" si la position de son premier bit à '1' est fixée.
En virgule flottante les mantisses sont normalisées car elles ont un seul bit d0 avant la virgule, ce bit valant toujours '1'.
La flèche marquée "vue" à côté du bouton montre les chiffres ou bien les bits ou bien déplace la virgule juste après le premier chiffre de D comme pour les mantisses ou bien après le dernier chiffre de D comme pour les entiers. L'applet permet d'essayer le diviseur avec des entiers pour lesquels D est normalisé entre 2n-1 et 2n1 ou avec des mantisses pour lesquels D est dans l'intervalle [1, 2 [ .

Additionneur/ Soustracteur conditionnel sans propagation

Un "additionneur/soustracteur conditionnel" donne l'un des résultats S suivant:

  • si q = '1'  alors S = R D ;
  • si q = '0'  alors S = R ;
  • si q = '-1' alors S = R + D ;

Chaque cellule "tail", union des cellules "SC" et "AS", réalise l'addition/soustraction hybride de 1 chiffre. La retenue n'est pas propagée vers la cellule de gauche de la même ligne mais envoyée vers la cellule de la ligne suivante. Le délai est donc indépendant du nombre de bits traités en parallèle. Ce circuit ne déborde pas.

 

Les trois opérations de l' "additionneur/soustracteur conditionnel" se retrouvent dans le "diagramme de Robertson" de la division.
Pour converger, la division impose en outre que -2*D £ R £ -2*D. Il peut y avoir débordement si R < -2*D ou si R > -2*D. Si -D £ R £ D alors S a deux valeurs possibles.

Cellule "tail"du diviseur SRT

Vérifiez que vous maîtrisez les fonctions logiques de la cellule "tail" .

  • si q = '1' alors 2*s1 s0 = 1 d0 + r0 ; // soustraction
  • si q = '0' alors 2*s1 s0 = r0 ; // identité
  • si q = '-1' alors 2*s1 s0 = d0 + r0 ; // addition
cellule tail

Cellule "head" du diviseur SRT

Soient = r2* 4 + r1* 2 + r0 et = s2* 4 + s1* 2 + s0 les valeurs des entrées et des sorties de la cellule "head".

  • si > 0  alors { = 2 ; q = '1' ; }
  • si = 0  alors { = ; q = '0' ; }
  • si < 0  alors { = + 1 ; q = '-1' ; }

Lors d'une division correcte (sans débordement), la sortie s2 de "head" est toujours à 0. La détection du débordement s2 est utilisée par les "double diviseurs"

Cellules "head" et "tail"

Une cellule "head" suivie de cellules "tail" exécutent ensemble l'algorithme :

  • si > 0  alors S = R D ; // soustraction
  • si = 0  alors S = R ;
  • si < 0  alors S = R + D ; // addition

Nécessité du '0' dans l'écriture de Q

Si R > 0 il ne faut pas faire d'addition et si R < 0 il ne faut pas faire de soustraction sous peine de débordement. Quand = 0, le signe de R n'est pas connu, donc on ne fait ni addition ni soustraction et q = '0' .

Nécessité de la normalisation du diviseur D

Pour la cellule "head", un reste est petit si = 0 , c'est à dire si -1 < R < 1 indépendamment de D. Dans ce cas R conserve sa valeur et sort du "diagramme de Robertson" si 1 > D. En conséquence 1 £ D. La borne supérieure de D est destinée à faciliter la réalisation: moins il y a de chiffres de D avant la virgule et moins il y a de chiffres de R a examiner par "head" et plus le circuit est rapide, donc 1 £ D < 2 , D est "normalisé" .



Division "SRT" avec réduction du diviseur

La division "SRT" précédente est simple car le premier bit du diviseur D est toujours '1'. Elle se simplifie davantage si les deux premiers bits d-1 et d0 du diviseur D sont réduits à "1 0" par l'opération :

si d0 alors { D' = D*3/4 ; A' = A*3/4 } sinon { D' = D ; A' = A } .
Cette multiplication de A et D par la même constante ne modifie pas le quotient Q, par contre le reste R est aussi multiplié par la constante.
Pour un diviseur sur n bits, 2n-1£ D < 2n-1 + 2n-2 .

Cellule de tête du diviseur "SRT" avec réduction

Soient = r0 + r1* 0.5 la valeur de l'entrée de la cellule "head".

  • si > 0.5  alors { s1 = 1.5 ; q = '+1' ; }
  • si = 0.5  alors { s1 = 0 ; q = '- 0' ; }
  • si = 0  alors { s1 = 0 ; q = '+ 0'; } ou bien { s0 = - 0.5 ; q = '- 0' ; }
  • si = - 0.5  alors { s1 = -0.5 ; q = '+ 0' ; }
  • si < - 0.5  alors { s1 = +1 ; q = '-1' ; }

La différence entre les deux écritures de 0 pour q : '+ 0' et '- 0' importe.



Convertisseur de quotient

Le quotient Q du diviseur "SRT" est en notation redondante "BS". Sa conversion en notation conventionnelle passe par une soustraction. Pour la retenue de la soustraction, '0' donne 'P', '1' donne 'G' et '-1' donne 'K'. Comme les chiffres qj du quotient sont calculés séquentiellement (poids forts d'abord), la conversion peut être menée en même temps que le calcul des chiffres qj .
  Soit "Ratio" le rapport entre le délai de la cellule "head" du diviseur SRT et le délai de la cellule "BK" du soustracteur. Le coût du convertisseur diminue lorsque "Ratio" augmente. Cependant plus "Ratio" est grand plus le gain relatif de délai apporté par la parallèlisation de la conversion est petit.

Correction du quotient

Pour soustraire il faut ajouter le complément (ce qui est fait ci-dessus) puis ajouter 1. Cependant si le dividende A et le diviseur D sont positifs (c'est le cas en virgule flottante) et le reste final R est négatif, alors le quotient Q est trop grand et pour le corriger il suffit de ne pas ajouter 1. Il convient donc d'ajouter le complément du signe de R (à détecter).
Rappelons qu'ajouter 1 complémente le bit poids faible et change les 'P' en '1' alors qu'ajouter 0 change les 'P' en '0'.


Conception d'un diviseur SRT

Dans cet applet on se limite aux chiffres du quotient Q redondants et symétriques. Ils sont définis par la base de numération de Q et la valeur maximale du chiffre. Le but de cet applet est choisir les chiffres du quotient en fonction du minimum de chiffres du reste partiel P et de bits du diviseur D.

Le bouton à gauche passe à l'étape suivante ou revient à l'étape précédente.