Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Additionneur binaire : demi et complet

Après cette leçon: Je peux construire un additionneur complet à partir de deux demi-additionneurs.

Leçon de 55 min6 commandesLab Conception numérique : Verilog, VHDL et yosys dans une VM Ubuntu privée

Un processeur additionne avec des portes

Un additionneur est un circuit qui additionne deux nombres écrits en binaire. Un processeur en contient plusieurs, et chacun répète le même petit bloc, colonne après colonne.

Quand vous calculez 5 + 9 à la main, vous posez une retenue. Le circuit fait exactement la même chose, avec des bits.

À la fin de cette leçon

Remarque

Je peux construire un additionneur complet à partir de deux demi-additionneurs.

Mots-clés

MotCe que ça veut direExemple
Sommele bit qui reste dans la colonne1 + 1 donne 0
Retenuele bit qui passe à la colonne de gauche1 + 1 donne 1
Demi-additionneuradditionne deux bits et rend une somme et une retenue
Additionneur completadditionne trois bits : deux bits et une retenue entrante
Retenue entrantela retenue venue de la colonne de droite

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un demi-additionneur additionne deux bits

Additionner deux bits donne 0, 1 ou 2. Le nombre 2 s’écrit 10 en binaire : un bit ne suffit pas, il en faut deux.

La somme est le bit de droite. C’est un OU exclusif. La retenue est le bit de gauche. C’est un ET. Le circuit s’appelle « demi » parce qu’il ne sait pas recevoir une retenue de la colonne voisine.

Exemple travaillé : le demi-additionneur

abRetenue (a ET b)Somme (a OU exclusif b)Valeur
00000 + 0 = 0
01010 + 1 = 1
10011 + 0 = 1
11101 + 1 = 2, soit 10

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Aller dans le dossier de travail

Commande
cd ~/hdl

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lire les calculs du fichier donné

Commande
grep -n assign half_adder.v

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un additionneur complet ajoute aussi la retenue entrante

Dans une colonne au milieu d’un nombre, on additionne trois bits : a, b et la retenue venue de la droite. Le total va de 0 à 3, soit 11 en binaire. Il reste deux bits à rendre, la somme et la retenue sortante.

On l’obtient avec deux demi-additionneurs et une porte OU. Le schéma ci-dessous montre les branchements.

La retenue voyage de droite à gauche

Pour additionner des nombres de plusieurs bits, on chaîne des additionneurs complets, un par colonne. La retenue sortante de chaque colonne devient la retenue entrante de la suivante.

Le tableau suit le calcul de 5 + 3, soit 0101 + 0011, de la droite vers la gauche.

Exemple travaillé : 0101 + 0011

ColonneabRetenue entranteSommeRetenue sortante
Bit 011001
Bit 101101
Bit 210101
Bit 300110

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Verilog sait additionner d’un seul signe

Dans un vrai projet, on n’écrit pas chaque colonne. Le signe + décrit un additionneur, et l’outil construit les portes.

Le module somme4 additionne deux nombres de 4 bits. Son résultat a 5 bits : quatre pour la somme et un pour la retenue sortante.

Un additionneur de 4 bits avec +

Code: c
module somme4(input [3:0] a, input [3:0] b,
              output [3:0] s, output cout);
  // L addition de deux nombres de 4 bits donne 5 bits :
  // les 4 bits de la somme et une retenue de sortie.
  assign {cout, s} = a + b;
endmodule

Écrire somme4.v

Commande
printf 'module somme4(input [3:0] a, input [3:0] b, output [3:0] s, output cout);\n  assign {cout, s} = a + b;\nendmodule\n' > somme4.v

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire son banc de test

Commande
printf 'module somme4_tb;\n  reg [3:0] a, b;\n  wire [3:0] s;\n  wire cout;\n  somme4 dut(.a(a), .b(b), .s(s), .cout(cout));\n  initial begin\n    a = 5; b = 9; #1 $display("%%0d + %%0d = %%0d, retenue %%b", a, b, s, cout);\n    a = 9; b = 9; #1 $display("%%0d + %%0d = %%0d, retenue %%b", a, b, s, cout);\n    a = 15; b = 1; #1 $display("%%0d + %%0d = %%0d, retenue %%b", a, b, s, cout);\n  end\nendmodule\n' > somme4_tb.v

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Compiler les deux fichiers

Commande
iverilog -o /tmp/somme4 somme4.v somme4_tb.v

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lancer la simulation

Commande
vvp /tmp/somme4

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Erreur fréquente

Attention

Beaucoup de gens pensent que 9 + 9 sur quatre bits donne 18. Quatre bits ne vont que de 0 à 15. Le résultat est 2 avec une retenue sortante de 1 : le 1 de la retenue est le bit qui manque. Ne jetez jamais la retenue du dernier rang.

Pour aller plus loin

Dans le labo, full_adder.v vous attend avec un banc de test, full_adder_tb.v. Vous pouvez maintenant l’écrire avec deux demi-additionneurs et un OU.

Avant de simuler, remplissez sur papier la table des huit lignes. Comparez ensuite avec ce que votre module affiche.

À propos de ce labo et de sa source: Lab Conception numérique : Verilog, VHDL et yosys dans une VM Ubuntu privée

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.