Lors d’une formation, j’ai du concevoir un additionneur 4 bits :
Remarques :
Retenue se dit carry out en anglais.
Si une retenue sort du mot, on parlera de débordement, ou overflow.
Illustration 1: « A + B = résultat » avec une éventuelle retenue
But : gérer les retenues.
On peut envisager C (ou toute autre entrée, comme A dans A33 et A44) comme étant une retenue d'un calcul précédent.
Illustration 2: « A + B + C = résultat » avec une éventuelle retenue
L’addition de mots de 3 bits servira pour les relatifs codés sur 4 bits.
Illustration 3: « A + B = résultat » avec une éventuelle retenue
Le codage en « valeur absolue » nous pousse à faire des soustractions pour pouvoir additionner des nombres de signes différent.
Illustration 4: « A - B = résultat » avec une éventuelle retenue
But : gérer les retenues.
On note la similarité avec A111. On peut encore envisager C (ou toute autre entrée, comme A dans S33) comme étant une retenue d'un calcul précédent.
Illustration 5: « A - B - C = résultat » avec une éventuelle retenue
C'est le même schéma que pour A33, en remplaçant respectivement les A11 et A111 par des S11 et S111. La généralisation à des mots plus longs tient toujours.
Même généralisation qu’à la fin des additionneurs de nombres positifs.
Illustration 6: Comparateur strict à 1 bit
On retrouve très visuellement :
$(A \geq B) \Leftrightarrow (A \vee \overline B) \Leftrightarrow
(\overline B \vee A) \Leftrightarrow (B \Rightarrow A)$,
soit $(A \geq B) \Leftrightarrow (B \Rightarrow A)$.
Illustration 7: Comparateur large à 1 bit
Par récurrence :
Initialisation
On sait comparer des mots de 1 bit avec CL11.
Hérédite
En supposant que CL(n-1)(n-1) existe, on a CLnn grâce au schéma suivant :
Illustration 8: Comparateur large à n bits
A + B est négatif dans un des trois cas (incompatibles, mais on utilise deux portes OU pour la disjonction) suivants :
Illustration 9: Gestionnaire du signe d'une addition
Cette opération, réalisée avec un additionneur d'entiers non signés, semble déborder uniquement quand A et B sont de même signe et que le résultat code un nombre de signe opposé. Nous avons donc les deux cas incompatibles (la porte OU) suivants :
Il me semble que la première phrase aurait permis d'optimiser un peu le circuit…
Illustration 10: Gestionnaire du débordement en complément à deux
Par manque de temps, les schémas de cette partie n'ont pu etre réalisés, mais ils sont quasi triviaux.
Dirige un bit d'entrée vers une des deux sorties, selon l'egalite de deux autres bits d'entrée. C'est une sorte d'aiguillage, qui nous sert pour l'addition en codage « valeur absolue » afin d'orienter vers une addition ou une soustraction des valeurs absolues.
Généralisation de XORMUX1 par récurrence (voir CL33 en III 3). Sur trois bits uniquement car les mots de 4 bits ont leur valeur absolue codée sur 3 bits.
Sorte de porte OU géante ou 2 mots de 3 bits entrent, mais un seul sort.
Échange deux mots de trois bits suivant la valeur d'un bit. C'est une sorte d'aiguillage, qui nous sert pour l'addition en codage « valeur absolue » afin de soustraire les valeurs absolues dans le bon sens.
Synthèse des éléments vus précédemment.
Illustration 11: Additionneur 4 bits avec codage « valeur absolue »
Illustration 12: Additionneur 4 bits avec codage « biais »
On comprend ici l’intérêt de cette façon de coder les négatifs.
Illustration 13: Additionneur 4 bits avec codage « complément à deux »
Ces implémentations possibles rendent compte de la taille de l’ongle du petit doigt de la partie émergée de la complexité d’un processeur. Quelques liens pour approfondir :