L'unité arithmétique et logique (ALU)#

Nous avons maintenant tous les morceaux qui savent calculer : l'additionneur, le soustracteur, et les portes logiques ET, OU, XOR, NON. Un processeur ne les garde pas éparpillés : il les rassemble dans un seul composant capable de réaliser, à la demande, l'une ou l'autre de ces opérations. Ce composant est l'unité arithmétique et logique, ou ALU (de l'anglais Arithmetic Logic Unit).

Qu'est-ce qu'une ALU ?#

L'ALU est la calculatrice du processeur. Elle reçoit deux valeurs à traiter, A et B (les opérandes), ainsi qu'un code opération qui indique quelle opération effectuer, et elle produit un résultat. C'est exactement le principe d'une calculatrice de poche : on tape deux nombres et on choisit une touche (+, −, etc.) ; ici, le code opération joue le rôle de la touche.

Symbole de l'ALU en forme de trapèze : entrées A et B par le haut, code opération sur la gauche, résultat en bas, drapeaux sur la droite

Le symbole habituel d'une ALU. Les opérandes A et B entrent par le haut, le code opération choisit l'opération, et le résultat sort par le bas.#

Une même ALU réunit donc plusieurs opérations. Par exemple, avec un code opération sur 2 bits, on peut choisir parmi quatre opérations :

code

opération

00

A + B

01

A - B

10

A ET B

11

A OU B

Toutes les opérations à la fois, puis un choix#

Comment une ALU peut-elle "choisir" une opération ? On pourrait croire qu'elle décide d'abord, puis calcule. En réalité, c'est l'inverse : un circuit est toujours actif, il calcule en permanence. L'additionneur produit sans arrêt A + B, la porte ET produit sans arrêt A ET B, et ainsi de suite pour toutes les opérations, en même temps.

Le code opération ne sert donc pas à lancer un calcul, mais à choisir lequel de ces résultats on garde. C'est précisément le travail du multiplexeur : ses entrées sont les résultats de toutes les opérations, sa commande est le code opération, et sa sortie est le résultat retenu.

Structure interne d'une ALU : A et B alimentent quatre blocs (A+B, A-B, A ET B, A OU B) qui calculent en parallèle ; leurs sorties entrent dans un multiplexeur commandé par le code opération, dont la sortie est le résultat

À l'intérieur d'une ALU : toutes les opérations calculent en parallèle, et le multiplexeur ne laisse passer que celle qu'indique le code opération.#

On reconnaît ici tout ce qu'on a construit dans ce chapitre : le bloc A + B est l'additionneur, le bloc A - B est le soustracteur (qui réutilise lui-même l'additionneur et le complément à deux), et les blocs ET et OU sont de simples portes logiques appliquées bit à bit. L'ALU n'est donc pas un composant nouveau : c'est un assemblage de circuits déjà connus, coiffés d'un multiplexeur.

Dans la démonstration ci-dessous (une petite ALU sur 1 bit), réglez A et B, puis changez le code opération op (2 bits) et observez le résultat basculer d'une opération à l'autre.

Exercices#

Exercice 32#

On utilise l'ALU dont le code opération sur 2 bits est celui du tableau ci-dessus (00 = A + B, 01 = A - B, 10 = A ET B, 11 = A OU B). Les valeurs sont sur 4 bits. Pour chaque ligne, donnez le résultat (en décimal).

A

B

code

résultat

6

3

00

6

3

01

6

3

10

6

3

11

12

10

10

Exercice 33#

Construisez une petite ALU sur 1 bit à deux opérations. Si op = 0, le résultat doit être A XOR B (le bit de somme d'une addition) ; si op = 1, le résultat doit être A ET B. Utilisez une porte XOR, une porte ET et un multiplexeur commandé par op. Le bouton de contrôle vérifie votre circuit.

TP : construire l'ALU dans Logix#

Ouvrez Logix dans un nouvel onglet et construisez l'ALU de ce chapitre, celle qui servira au processeur.

  1. Placez deux entrées A et B (largeur 8 bits) et une entrée op sur 2 bits : 00 = addition, 01 = soustraction, 10 = ET, 11 = OU.

  2. Calculez les quatre résultats en parallèle : l'addition et la soustraction avec l'additionneur (et l'astuce du complément à deux pour A - B), le ET et le OU avec des portes appliquées bit à bit. Comme A et B sont des faisceaux de 8 bits alors qu'une porte logique travaille sur des fils de 1 bit, servez-vous d'un séparateur pour éclater chaque faisceau en 8 fils individuels, appliquez la porte sur chaque paire de bits, puis d'un fusionneur pour rassembler les 8 sorties en un faisceau de 8 bits.

  3. Réunissez les quatre résultats dans un multiplexeur commandé par op : sa sortie est le résultat de l'ALU.

  4. Testez chaque opération sur des valeurs qui vérifient vraiment le câblage, et pas seulement un bit :

    • A + B : essayez 0000 1111 + 0000 0001 = 0001 0000, où la retenue se propage sur les quatre bits de poids faible et contrôle ainsi toute la chaîne de l'additionneur.

    • A - B : essayez 0001 0000 - 0000 0001 = 0000 1111, où l'emprunt se propage de la même façon.

    • A ET B et A OU B : prenez A = 1100 1100 et B = 1010 1010. Ce couple fait apparaître les quatre combinaisons de bits possibles, donc un seul essai teste chaque fil : A ET B = 1000 1000 et A OU B = 1110 1110.

  5. Encapsulez votre circuit en un seul composant réutilisable nommé ALU (fonction de création de composant / sous-circuit de Logix). Vous le réutiliserez tel quel, comme une boîte noire, à la fin du chapitre.

  6. Enregistrez votre circuit, et veillez à bien conserver le fichier JSON exporté : il vous permettra de rouvrir votre ALU plus tard.