bitGateLab Digital · Apprendre
Français
Ouvrir le simulateur

Apprendre › Chapitre 7

Additionneurs binaires : demi-additionneur, complet et à propagation de retenue

8 min de lecture · Équipe bitGateLab

L'addition est l'opération la plus importante d'un ordinateur : elle sert à soustraire, à multiplier, à calculer des adresses mémoire et à compter des événements. Vous allez construire ici un additionneur en partant de zéro : d'abord le demi-additionneur à un bit, puis l'additionneur complet qui accepte une retenue, ensuite l'additionneur de plusieurs bits en cascade et, pour finir, la façon dont ce même circuit soustrait grâce au complément à 2.

Additionner en binaire à la main

Les règles d'addition de deux bits sont au nombre de quatre : 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1 et 1 + 1 = 102, c'est-à-dire 0 avec une retenue de 1 vers la colonne suivante. Si une retenue arrive en plus, 1 + 1 + 1 = 112 : résultat 1 et retenue 1. Comme en décimal, on additionne colonne par colonne, de droite à gauche, en reportant la retenue vers la gauche.

Demi-additionneur

Le demi-additionneur additionne deux bits, A et B, et fournit deux sorties : la somme S et la retenue C.

ABCS
0000
0101
1001
1110

La colonne S est la table d'une XOR et la colonne C est celle d'une AND. Par conséquent :

S = A ⊕ B    C = AB

AB SC
Demi-additionneur : la XOR fournit la somme S et la AND fournit la retenue C. Les points indiquent l'endroit où chaque entrée se divise vers les deux portes.

On l'appelle « demi » parce qu'il n'a pas d'entrée pour la retenue venant d'une colonne précédente ; il ne convient donc que pour le bit de poids faible.

Additionneur complet

L'additionneur complet additionne trois bits : A, B et la retenue d'entrée Cin. Il fournit la somme S et la retenue de sortie Cout. Remarquez que la paire (Cout, S) est, en binaire, le nombre de uns présents sur les entrées.

ABCinCoutS
00000
00101
01001
01110
10001
10110
11010
11111

S vaut 1 lorsque le nombre de uns est impair : S = Σm(1, 2, 4, 7) = A ⊕ B ⊕ Cin. Cout vaut 1 lorsqu'il y a deux uns ou plus : Cout = Σm(3, 5, 6, 7), ce qui, une fois simplifié, donne la fonction majorité :

Cout = AB + ACin + BCin

Si vous essayez de regrouper dans le tableau de Karnaugh de S, vous verrez qu'aucun 1 n'a de voisin à 1 : c'est le motif en damier typique de la XOR, qui ne se simplifie pas en somme de produits.

Additionneur complet avec deux demi-additionneurs

Une façon pratique de le réaliser consiste à enchaîner deux demi-additionneurs et une OR :

  1. Premier demi-additionneur : P = A ⊕ B et G = AB.
  2. Second demi-additionneur, avec P et Cin : S = P ⊕ Cin et une retenue partielle P·Cin.
  3. Cout = G + P·Cin = AB + (A ⊕ B)Cin.

Cette expression est équivalente à celle de la majorité : si A et B valent 1, AB donne déjà la retenue ; si exactement l'une des deux vaut 1, la retenue dépend de Cin. G est appelé signal de génération et P signal de propagation.

Additionneur à propagation de retenue

Pour additionner des nombres de n bits, on relie n additionneurs complets à la file : le Cout de chaque étage devient le Cin du suivant. Le Cin du premier étage est mis à 0, et le Cout du dernier est la retenue finale. Cette structure s'appelle additionneur à propagation de retenue, ou ripple carry, parce que la retenue « se propage » d'étage en étage comme une onde. Dans la famille 74HC, il existe une puce qui contient quatre additionneurs complets déjà reliés de cette façon (le 74HC283).

Exemple 1 : 1011 + 0110 avec un additionneur 4 bits. En décimal, c'est 11 + 6.

ÉtageAiBiCinSiCout
010010
111001
201101
310101

Somme : S3S2S1S0 = 0001 avec une retenue finale de 1, soit 100012 = 17. Correct : 11 + 6 = 17, qui ne tient pas sur 4 bits, d'où la retenue finale.

Le prix à payer, c'est le temps. L'étage 3 ne peut pas fournir son résultat définitif tant qu'il n'a pas reçu la retenue de l'étage 2, qui attend lui-même celle de l'étage 1. Si chaque étage met deux niveaux de portes à produire sa retenue, un additionneur de n bits met de l'ordre de 2n temps de propagation de porte dans le pire des cas. Pour 64 bits, c'est trop lent ; c'est pourquoi les processeurs utilisent des additionneurs à retenue anticipée, qui calculent les retenues en parallèle à partir des signaux G et P. Dans le chronogramme du simulateur, vous pouvez voir les sorties changer par paliers avant de se stabiliser.

Soustraire avec le même additionneur

Comme expliqué dans systèmes de numération, en complément à 2 l'opposé de B est B + 1. On a donc :

A − B = A + B + 1

Pour l'obtenir, il suffit de placer une XOR sur chaque bit de B, avec l'autre entrée reliée à une ligne de commande M, et de relier aussi M au Cin du premier étage. Avec M = 0, les XOR laissent passer B et Cin = 0 : le circuit additionne. Avec M = 1, les XOR inversent B et Cin = 1 apporte le « +1 » : le circuit soustrait.

Exemple 2 : soustractions sur 4 bits.

  1. 9 − 5 : A = 1001, B = 0101, B = 1010. 1001 + 1010 + 1 = 1 0100. On ignore la retenue finale : 0100 = 4.
  2. 5 − 9 : A = 0101, B = 1001, B = 0110. 0101 + 0110 + 1 = 0 1100. Pas de retenue finale. 1100 en complément à 2 vaut −8 + 4 = −4.

Lorsque vous soustrayez des nombres non signés, la retenue finale indique s'il y a eu un emprunt : 1 signifie que A ≥ B et 0 signifie que A < B.

Pour les nombres signés, le dépassement de capacité se détecte avec une seule XOR : V = C3 ⊕ C4, où C3 est la retenue qui entre dans le dernier étage et C4 celle qui en sort. Si elles sont différentes, le résultat ne tient pas sur 4 bits signés.

Erreurs fréquentes

Essayez dans le simulateur

Réaliser un additionneur dans l'éditeur est la meilleure passerelle entre les portes et l'arithmétique. Commencez par un bit, puis montez jusqu'à quatre.

  1. Placez deux entrées, une XOR et une AND, et reliez-les comme sur le schéma du demi-additionneur. Générez sa table de vérité.
  2. Réalisez un additionneur complet avec deux demi-additionneurs et une OR, puis vérifiez ses 8 lignes avec la table de cet article.
  3. Copiez l'additionneur complet quatre fois et chaînez les retenues. Mettez le premier Cin à 0.
  4. Réglez les entrées sur 1011 et 0110 et vérifiez que la sortie vaut 0001 avec une retenue finale de 1.
  5. Ouvrez le chronogramme, changez une entrée qui oblige la retenue à traverser les quatre étages (par exemple 1111 + 0001) et observez comment les sorties se stabilisent.

Exercices

  1. Calculez S et Cout pour un additionneur complet avec A = 1, B = 0, Cin = 1.
    Réponse

    Il y a deux uns : S = 0 et Cout = 1 (1 + 0 + 1 = 102).

  2. Additionnez 0111 + 0101 avec un additionneur 4 bits et indiquez les retenues de chaque étage.
    Réponse

    Étage 0 : 1 + 1 = 0, retenue 1. Étage 1 : 1 + 0 + 1 = 0, retenue 1. Étage 2 : 1 + 1 + 1 = 1, retenue 1. Étage 3 : 0 + 0 + 1 = 1, retenue 0. Résultat 1100 = 12 (7 + 5).

  3. Avec un additionneur-soustracteur 4 bits, calculez 6 − 3 et indiquez la valeur de M.
    Réponse

    M = 1. 0110 + 1100 + 1 = 1 0011. On ignore la retenue : 0011 = 3.

  4. En interprétant les valeurs comme des nombres signés sur 4 bits, y a-t-il dépassement de capacité dans 0111 + 0101 ?
    Réponse

    Oui. 7 + 5 = 12 ne tient pas dans la plage −8 à +7. Le résultat 1100 se lirait −4. Les retenues sont C3 = 1 et C4 = 0, et V = 1 ⊕ 0 = 1.