Circuits logiques

Auteur et date de la dernière mise à jour de la page. EC @ VI.2008
Lecture(s) conseillée(s) avant d'attaquer le présent chapitre. L'information binaireUniquement si le bit est, pour vous, un sujet un peu tabou.. Algèbre de Boole...ça peut aider, oui..
Liste des mots et notions définis tout au long de cette page.

Alors voilà...

Mais comment fait-elle ?

Comment ces quelques cm² de silicium, même dopé, comment cette créature minérale et inerte, comment cette puce même pas foutue de sauter s'y prend-elle pour ainsi si bien simuler l'intelligence, cette incroyable et patiente invention de la chimie organique ?

La technologie humaine serait-elle à ce point avancée ou aurions-nous, au contraire, un peu trop complaisamment sanctifié le génie de la vie ?

BHL en vadrouille à New-York, nous allons tenter, pour une fois, de nous forger par nous-mêmes un avis propre et métaphysique en disséquant sous microscope les entrailles de la bête.

Arcana Percipio vous propose donc aujourd'hui un petit atelier philo-picon bière autour de ce thème plutôt sympa:

"Intelligence et petits bits: Dieu se manifeste-t-il dans nos pécés ?"

Avertissement quand même aux âmes les plus exaltées: attention ! si vous parvenez jusqu'au bout de cette page, votre grande boîte blanche risque de perdre un chouia de son aura fascinante...

De la théorie à la pratique

Petit avertissement bienveillant à l'attention des grands débutants en science de la non-vie: difficile d'entrer dans le cerveau d'une puce sans quelques rudiments d'algèbre de Boole, algèbre surprenanteC'est vrai, 1 + 1 = 1, au début, ça surprend... mais néanmoins parfaitement cohérente au sujet de laquelle existe quelque part sur ce site une page faussement flippante. La poignée d'intrépides qui ont survécu à sa lecture ont appris à apprivoiser ses axiomes, assimiler ses théorèmes et ont fugitivement aperçu son formidable potentiel. Si, si.
Pour ceux là, la récompense est proche, tout comme le bout du tunnel...

Boole et Bit

Nous avons vu ensemble que l'algèbre de Boole mettait en jeu des variables booléennes, également appelées variables logiques. Dans le cas très particulier où l'algèbre booléenne se fait binaire, ces variables ne peuvent alors prendre que deux valeurs différentes et complémentaires, notées "vrai" / "faux" ou encore "1" / "0".
Au sein d'un ordinateur, une telle variable est appelée bit et se matérialise par une simple tension électrique, comme le montre la luxieuse quoique naïve animation ci-dessous:
 

Les états "1" et "0" du bit ne sont pas matérialisés par une présence ou absence strictes de courant, mais plutôt par deux niveaux différents de tension, ou, pour être plus précis encore, deux plages distinctes de tension électrique.

Notons en passant que la plage de tension matérialisant un bit "1" n'est pas obligatoirement supérieure à celle matérialisant un bit "0". Ceci ne constitue qu'une simple choix technologique.

Numérisée mais pas numérique

Rappelons encore une fois que "0" et "1" ne sont que des conventions d'écriture et que ces valeurs n'ont rien de commun avec les chiffres 0 et 1 de notre arithmétique humaine.

Le bit est l'unité fondamentale d'information de l'ordinateur. Afin d'être compréhensible par la machine, toute information, quelle que soit sa nature, doit auparavant être codée sous forme d'une séquence plus ou moins longue de bits.
Ce n'est que sous cette forme "numérisée", c'est-à-dire réduite à une suite humainement rébarbative de "1" et de "0", que l'information peut alors être manipulée par l'ordinateur.
 

1001111110011011011011000011001011110010001110111100101010010101111011110000000000000000

0000001100011111111101111111111111111111111110001111111111111111110011111111111111111000

0011111111111111111110111111111111111111111111111000011111111111111111100110001100011110

0000000000000000000000000000000000000000000000000000000010101010101010110001101011101110

"La chevauchée des Walkyries" (extrait)
...version musique électronique.

En coulisse, des portes automatiques...

Les portes des cas binaires

Comme vous vous en doutiez, l'algèbre booléenne n'a que faire des opérateurs classiques de notre arithmétique humaineL'addition, la multiplication, tout ça tout ça... mais définit ses propres opérateurs, qualifiés sans surprise d'opérateurs booléensNOT, OR, AND, XOR, NAND, NOR - pour citer les principaux., qui permettent de combiner entre elles des variables logiques.

Le fait est que grâce à divers composants miniaturisés, et notamment le transistor, il est possible de fabriquer des circuits électroniques capables de "matérialiser" ces opérateurs booléens.
Ces circuits fondamentaux, appelés portes logiques (logical gates), constituent les briques élémentaires de l'intelligence artificielle dont fait - parfois - preuve votre pécé, comme nous le verrons tantôt.

En électronique, ces portes logiques sont schématisées par des symboles graphiques particuliers:
 

Symboles graphiques des portes logiques en électronique.

Cliquez sur les bits A et B afin de voir le résultat des opérateurs logiques correspondants.
Ainsi, par exemple, la porte logique OR...un OR circuit, en quelque sorte... correspond à un circuit électronique réalisé de telle manière que le bit de sortie est égal à "1" dans le cas où au moins un des bits d'entrée est égal à "1", conformément à la définition booléenne de l'opérateur OR (somme logique).

A noter que tous ces symboles coexistent sous deux formats différents: une version "traditionnelle" et une version "moderne", plus carrée, officiellement standardisée par la Commission Electrotechnique Internationale sous le nom de norme 60617-12.

Petite remarque avant de poursuivre: les circuits que nous présenterons dans la suite de cette page sont des circuits quelque peu "idéalisés" dans le sens où nous considèrerons que tout changement de valeur des variables en entrée entraîne immédiatement le changement de valeur des variables en sortie. Dans le monde réel, il faut en réalité compter sur un temps de propagation du signal électrique le long du circuit qui entraîne l'apparition d'une latence entre les deux événements.
Cette latence, également appelée délai de portes (gate delay), bien que de l'ordre de quelques nanosecondes, ne doit toutefois pas être négligée en toutes circonstances...du moins si votre passe-temps est de concevoir des circuits combinatoires....
 

Chronogramme de la porte logique OR.

Pour mettre tout le monde à l'aise, un chronogramme n'est qu'une simple représentation graphique de la tension électrique en fonction du temps.
Le bit se manifestant par une tension électrique, il est somme toute logique que le chronogramme d'une ligne électrique oscille entre deux valeurs selon la valeur du bit qu'elle véhicule.

Sur le schéma ci-contre, nous avons superposés le chronogramme d'une ligne A et le chronogramme de la ligne située après la porte OR, le bit B étant toujours désactivé. Comme nous le voyons, le changement de valeur du bit A n'est pas immédiatement répercuté sur la ligne de sortie, de par l'existence du délai de propagation au travers de la porte...peut-être légèrement exagéré sur ce schéma, mais pour la bonne cause..

NOR et NAND: les sublimes portes

Le bon dilettante en algèbre booléenne serait peut-être enclin à considérer les fonctions AND, OR et NOT commes les véritables opérateurs fondamentaux de l'algèbre binaire, reléguant les fonctions XOR, NAND ou NOR au rang de curiosités parfaitement abstraites.
Grossière erreur.

Le fait est que grâce aux divers théorèmes de l'algèbre binaire, il est facile de démontrer qu'il s'avère possible d'exprimer les opérateurs AND, OR et NOT par la seule mise en jeu d'opérateurs NAND ou d'opérateurs NOR habilement combinés.
Pour souligner cette propriété remarquable, ceux-ci sont qualifiés d'opérateurs complets.

La preuve en images...
 

Réalisation des portes logiques NOT, AND et OR à l'aide des portes NAND ou NOR.

Cliquez sur les bits A et B afin de constater que les différents montages de portes NAND ou NOR recréent parfaitement le comportement des autres opérateurs booléens de base.

L'"universalité" des opérateurs complets représente surtout un intérêt économique et technique. En tant qu'électroniciens du dimanche, nous continuerons, nous, d'utiliser les portes logiques NOT, AND et OR dans la suite de cette page, juste histoire de ne pas rendre plus illisibles encore les quelques schémas à venir...

Portes ouvertes sur les circuits

Des circuits en fonctions (et vice versa)

Bien évidemment, rien ne nous empêche de relier et interconnecter entre elles plusieurs de ces portes logiques. L'ensemble forme alors ce qu'on appelle un circuit logique (digital circuit) - également appelé circuit combinatoire - qui comporte:

Pourquoi "combinatoire" ? Parce que dans un tel circuit, la valeur de la (des) variable(s) logique(s) en sortie ne dépend que de la combinaison des variables logiques en entrée, à la différence des circuits séquentiels que nous verrons (peut-être) un jour.

  • Une ou plusieurs variables d'entrée (E1, E2, ..., EN)
  • Une ou plusieurs variables de sortie (S1, S2, ..., SM)

Comme vous vous en doutez, pour un circuit logique donné, à tout ensemble de valeurs introduit en entrée correspondra un ensemble de valeurs résultat en sortie.
Et là, normalement, vous vous exclamez: "Bon sang mais c'est bien sûr ! Qu'est ce qu'un circuit logique sinon la matérialisation électronique d'une ou plusieurs fonction(s) booléenne(s) !"

Vous êtes génial(e)...
 

Notion en algèbre binaire Notion en électronique
Variable logique Bit
Constante 0
Constante 1
Tension électrique T0
Tension électrique T1
Opérateurs booléens Portes logiques
Fonction(s) logique(s) Circuit logique
Correspondances entre l'algèbre binaire et l'électronique.

Toutes ces théories n'étaient donc pas vaines...

Passé le choc de cette révélation, des perspectives insensées se bousculent dans notre cervelle comme la possibilité désormais de pouvoir matérialiser une table de vérité par un circuit logique, voire, inversement, de transcrire un circuit logique en une table de vérité.

Essai libre sur circuit

Prenons, pour se persuader de la justesse de nos présomptions, une fonction booléenne quelconque à trois variables logiques. Par exemple:

     F(A, B, C) = A .B .C + A .B .C + A .B.C

Puis, dans la foulée, établissons sa table de vérité:
 

A B C F(A, B, C)
0000
0010
0101
0111
1000
1010
1101
1110
Table de vérité de la fonction F(A, B, C) = A.B.C + A.B.C + A.B.C

Le but d'une table de vérité est de "décortiquer" une fonction logique en listant toutes les combinaisons possibles de ses variables et, pour chacune de celles-ci, calculer la valeur prise alors par la fonction.
Ainsi, par exemple, la première ligne de cette table entérine le fait que si A=0, B=0 et C=0, alors la fonction prend la valeur 0.

Les amateurs de Boole auront immédiatement remarqué que cette fonction se trouve déjà dans sa première forme canonique.
Les autres nous croiront sur parole.

Nous pouvons alors "concrétiser" cette fonction booléenne en interconnectant de manière adéquate quelques portes logiques entre elles afin de former un circuit logique.
Représenté schématiquement à l'aide des symboles vus plus haut, ce circuit prend le nom de logigramme (circuit diagram).
 

Logigramme de la fonction F.

Cliquez sur les différents bits matérialisant les variables d'entrées A, B et C pour voir le résultat de la fonction F dont elles sont les termes.
Vérifiez aussi que le circuit donne, pour chaque combinaison des variables A, B et C, la même valeur de F que celle indiquée dans la table de vérité.

Ce circuit est un exemple - a priori tout à fait inutile - de circuit combinatoire à trois entrées et une seule sortie.

Une petite remarque, toutefois, avant d'entrer de plain pied dans la cervelle de nos puces.
A la vue de notre fonction, un tout petit réflexe algébrique aurait dû attirer notre attention sur le fait que, puisque le produit logique est distributif:

     A.B.C + A.B.C = A.B.(C + C)

Or, l'axiome de la complémentation nous assure que C + C = 1, et 1 étant élément neutre pour le produit logique, notre fonction logique peut donc tout à fait s'écrire:

     F(A, B, C) = A.B + A.B.C

...soit, plus simplement encore: F(A, B, C) = B.(A + A.C

Nous voyons bien ici que simplifier une fonction logique n'a pas un seul but esthétique puisque vous vous doutez qu'écrite sous cette forme, la table de vérité de la fonction devient bien plus simple à établir, sans vous parler de la mise au point de son circuit logique associé.

Et encore s'agissait-il ici d'une fonction simplette...puisque la formule simplifiée ne nous économiserait ici qu'une porte AND et quelques millimètres de ligne électrique..., mais les fonctions logiques peuvent être beaucoup plus compliquées et, par conséquent, leur simplification beaucoup plus impressionnante encore et, par là même, d'autant plus pertinente d'un point de vue matériel, et, donc, économique.
Hé, hé... Votre parfaite maîtrise des différentes techniques de simplification booléenne (et au premier rang desquelles, la méthode de Karnaugh) risque finalement de bien plaire aux actionnaires...
 

Première lueur d'intelligence en somme...

Bon ! Nous venons (enfin) de relier les abstraites théories de Boole à la technologie des composants électroniques. Mais enfin... Quels rapports entre ces composants aux comportements plutôt basiques et l'intelligence hautement supérieure d'une puce domestique ?
Très bien, vous l'aurez voulu ! Nous allons donc déboulonner d'un coup le mythe de l'ordinateur en tant que fabuleuse machine à produire de l'intelligence...

L'intelligence artificielle: de "1 + 1 = 1" à "1 + 1 = 10"

S'il y a un bien un domaine où l'ordinateur excelle, c'est bien celui du calculA vrai dire, il ne sait même faire que ça.... Convenons donc que toute machine un tant soit peu perfectionnée se doit de savoir procéder à une bête addition.

Sur deux chiffres A et B exprimés en base 2, celle-ci se résume à une table assez simple:
 

A B A + B
000
011
101
1110
Résultats de l'addition de deux nombres binaires A et B.

Attention, attention ! Nous parlons ici de A+B comme la somme arithmétique de deux chiffres exprimés en base 2, et non plus du tout comme la somme logique de deux variables booléennes.

Le tableau ci-contre n'est donc pas une table de vérité, comme le "10" dans la dernière case nous le confirme très clairement.
 

...Ce que nous pourrions écrire de manière légèrement différente de la sorte:
 

A B Somme (S) Retenue (R)
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
Somme et retenue résultant de l'addition de deux nombres binaires A et B.

Voilà qui ressemble déjà beaucoup plus à une table de vérité en bonne et dûe forme.
 

Et là, nous constatons ébahi(e)s que:

  • La colonne somme (S) est équivalente à ce que nous obtiendrions avec l'opération booléenne A XOR B
  • La colonne retenue (R) est équivalente à ce que nous obtendrions avec l'opération booléenne A AND B

Ni une, ni deux, nous mettons au point un circuit logique matérialisant notre prodigieuse découverte.
Ce circuit, très spectaculaire, est appelé demi-additionneur (half-adder).
 

Logigramme d'un demi-additionneur.

Cliquez sur les bits A et B afin de visualiser le résultat des variables de sortie S (somme) et R (retenue).

Ce demi-additionneur est un exemple - déjà beaucoup moins futile - de circuit logique à deux entrées (A et B) et deux sorties (S et R).

Et hop ! une cascade

Bon ! Reconnaissons que notre demi-additionneur ne constitue pas un fantastique progrès par rapport au calcul mental, mais il nous a néanmoins permis de constater que les lois de l'électronique pouvait être habilement utilisées afin de réaliser une opération arithmétique de base.

Ceci compris, il devient relativement facile d'améliorer notre dispositif et lui permettre d'additionner de plus grands nombres. Il suffit pour cela de lui donner la possibilité de tenir compte d'une retenue antérieure (Rn) et d'en propager une suivante (Rn+1).

Ce nouveau circuit, beaucoup plus utile, est appelé additionneur complet (full adder).
 

Logigramme d'un additionneur complet.

Cliquez sur les bits A et B afin de visualiser le résultat des variables de sortie S (somme) et R (retenue).

C'est vrai que nous sommes encore loin des chutes du Niagara puisque ce ne sont ici que deux malheureux demi-additionneurs qui ont été mis en cascade. Mais comprenez bien qu'en superposant un plus grand nombre de ces circuits, il devient dès lors possible de calculer la somme de deux nombres quelconques exprimés en base 2.

Notez également que dans le cas où de nombreux demi-additionneurs sont placés en cascade, la propagation de la retenue peut sensiblement ralentir le calcul. Dans le but d'améliorer ce circuit, différentes méthodes ont donc été mises au point tel l'additionneur à retenue anticipée ou l'additionneur synchrone.

FAQ

Heu... pas trop pigé tout ça moi...

C'est pourtant... heu... en fait non, on vous comprend...
Comprenez qu'un ordinateur est fait de circuits électroniques uniquement capables de différencier deux états différents, que l'habitude conduit à symboliser "1" et "0". Ces circuits, conçus à base de transistors, obéissent à une algèbre dite "booléenne", totalement différente de notre algèbre "classique".

Nous autres, créatures himalayennes de l'évolution, comptons en base 10, c'est-à-dire à l'aide de dix symboles numériques appelés chiffres. Néanmoins, il est tout à fait possible de compter en base 2 et de manipuler ces nombres de manière parfaitement arithmétique, c'est-à-dire leur faire subir additions, multiplications et toutes ces opérations qui nous sont familières. Seule ne change la manière dont seront transcrits ces nombres, qui présenteront la particularité de n'être composés que des chiffres 0 et 1.

Tout l'art (ou plutôt la technique) de l'ingénieur informatique est de réaliser des circuits logiques tels que les "0" et "1" de l'algèbre booléenne puissent également symboliser les 0 et les 1 de l'arithmétique "classique" dans un contexte donné, tout comme nous l'avons vu avec le demi-additionneur.

Yep... Pas sûr que tout cela soit plus clair maintenant... Mais c'est ici l'occasion rêvée de faire la promo d'une autre page de ce site consacrée à l'information binaire.

Si j'ai bien compris, l'ordinateur n'est donc capable que de réaliser des opérations sur des nombres exprimés en base 2 ?

Parfaitement !
Mais rassurez-vous, tous ces calculs se déroulent dans les tripes les plus reculées de la machine. Entre ces circuits (le matériel ou hardware) et votre cerveau d'utilisateur se superpose une épaisse couche de logiciel (software) dont le seul but est de masquer toutes ces complications et de vous permettre de tranquillement continuer de communiquer en base 10 avec la machine.
Merci qui ? Merci BillBizarre quand même, quand on s'appelle Monsieur Portes, de préférer le logiciel que le matériel pour faire fortune...
Allez prendre au sérieux un Lacanien après ça...
.

Ce circuit logique, quoique excessivement simple, nous démontre néanmoins que même si l'ordinateur évolue dans un univers complètement booléen, et donc à mille lieues de notre arithmétique en base 10, il est toujours possible de "transcrire" une problématique "humaine" (ici, une bête addition) en terme de portes logiques judicieusement interconnectées.

Quelques circuits mythiques...

Avec le demi-additionneur, nous avons vu qu'un circuit combinatoire, habilement conçu, pouvait astucieusement "mimer" une opération arithmétique et, ainsi, servir de "dispositif à calculer"...oui, appeler ça "machine à calculer" serait quand même un peu hâtif... somme toute assez utile. Il existe néanmoins beaucoup d'autres usages aux circuits combinatoires, usages pas toujours aussi évidents à notre entendement humain, mais tous très largement utilisés en informatique.

Absolument rien sur Monza ni sur le Nürburgring, donc, dans la suite de cette page.
Juste un petit tour de circuits...

Circuits codeurs

Le langage de la puce commune est d'une désespérante pauvreté: "1", "0" et... et c'est tout. Autant dire que pour communiquer avec une créature hautement intelligente comme l'humain, même moyen, il faut déployer des trésors d'astuces qui, en informatique, impliquent généralement un boulot en deux temps: codage et décodage.

Décodeur

Allons bon... Voilà-ti pas qu'on va nous causer décodeur avant même de nous dire à quoi peut bien ressembler un codeur...
Vraiment n'importe quoi cette page web...

...version "blouse bleue"

Pour l'électronicien en blouse bleue de l'atelier de montage, un décodeur (decoder) est un simple circuit logique à n entrées et 2n sorties mutuellement exclusives. En d'autres termes, un circuit qui, pour une même combinaison des n variables d'entrée activera une et une seule sortie, bien évidemment toujours identique.

Logigrammement parlant, un truc qui ressemble donc à ça:
 

Logigramme d'un décodeur de type "3 vers 8".

Cliquez sur les variables d'entrée E0, E1 et E2 afin de constater la conséquence sur le fonctionnement du décodeur.

Comme vous le voyez, chaque combinaison des variables d'entrées active une et une seule ligne de sortie. Plus précisément, le numéro de la sortie active correspond au nombre formé par la juxtaposition des variables d'entrée considérées comme des chiffres exprimés en base 2.

Ainsi, par exemple, dans le cas de notre décodeur ci-contre, la combinaison des variables d'entrée E0 = 0, E1 = 0 et E2 = 1 provoque effectivement l'activation de la sortie n°4...correspondant au nombre binaire 1002. de ce dernier.

Pour un spécialiste comme vous, la table de vérité d'un tel décodeur est d'une désespérante simplicité:

E2 E1 E0 S7 S6 S5 S4 S3 S2 S1 S0
00000000001
00100000010
01000000100
01100001000
10000010000
10100100000
11001000000
11110000000

Bon, c'est vrai qu'il faut une bonne dose d'imagination pour considérer ce bidule comme un décodeur tel que nous entendons généralement ce terme. Et pourtant ! Le décodeur remplit une tâche essentielle pour un ordinateur, à savoir faire correspondre à un mot binaireOui, l'expression peut surprendre qui n'a pas suivi les conseils en tête de cette page... (formé par les n variables d'entrée) une ligne donnée en sortie, qui se trouve dès lors activée.
Bref, l'air de rien, un truc dément.

Si, si... dément.

Bon... Difficile de justifier cette dernière phrase sans quelques solides rudiments en architecture matérielle. Nous allons donc devoir recourir à deux ou trois métaphores bien niaïses que nous demandons d'ores-et-déjà à nos lecteurs (lectrices) les moins néophytes, dans leur grande mansuétude, de nous pardonner .

Comme nous l'avons entrevu avec le demi-additionneur (et comme finira de nous en persuader l'étude de l'Unité Arithmétique et Logique...prévue pour 2017, si l'auteur de ces pages continue de produire à ce rythme endiablé...), l'ordinateur est une machine capable d'opérations...pas seulement mathématiques, mais également logiques comme un simple AND entre deux variables booléennes par exemple., certes plutôt frustres, mais néanmoins assez variées. Nous avons vu également que toutes ces opérations étaient réalisées par différents circuits, plus ou moins complexes, faits de portes logiques interconnectées.

Ainsi, supposons que nous ayions devant nous une puce capable de quatre opérations élémentaires (appelons-les, pour faire simple, opérations A, B, C et D). En attribuant un "code opérationnel" binaire à chacune de ces opérations, comme ceci:
   - code de l'opération A: 00
   - code de l'opération B: 01
   - code de l'opération C: 10
   - code de l'opération D: 11

... on se rend compte qu'un décodeur judicieusement placé peut servir à activer le circuit correspondant à l'opération demandée, comme tente de l'illustrer le schéma ci-contre.

Dès lors, ces deux lignes d'entrée agissent comme des "lignes de commande" et le décodeur mérite vraiment son nom puisqu'il se comporte ici comme un véritable décodeur d'instruction.

Le même schéma, à peine modifié, pourrait également illustrer l'intérêt du décodeur dans la gestion de la mémoire de l'ordinateur.
En effet, seulement doté de ses pouvoirs opérationnels, l'ordinateur ne serait guère qu'une machine à calculer somme toute améliorée. De fait, l'autre grande force de votre pécé est sa capacité à savoir gérer une énorme quantité de mémoire.

Celle-ci, également composée de circuits électroniques, est organisée comme une gigantesque matrice de petites cases numérotées, chaque case étant capable d'abriter un nombre binaire de taille fixe. Or, de par son mode de fonctionnement particulier, un décodeur est le circuit idéal afin d'accéder à cette mémoire puisque il suffira de transmettre l'adresse de la case mémoire réclamée aux lignes d'entrée du décodeur pour que celui-ci active la cellule mémoire correspondante.

Dément, on vous le disait...

Qui peut le plus...

Notez que toutes les sorties du décodeur ne sont pas obligatoirement exploitées. Ainsi, un décodeur de type "3 à 8" peut très bien n'utiliser, par exemple, que cinq des huit sorties existantes, si cela suffit à la tâche qui lui incombe.

Les décodeurs existent dans différents formats, mais les versions "2 à 4" et "3 à 8" sont les plus généralement exploitées. Afin de réaliser de plus grands décodeurs, il est très fréquent d'assembler ces décodeurs élémentaires, comme le montre le schéma suivant:
 

Réalisation d'un décodeur de type "3 vers 8" à l'aide de deux décodeurs de type "2 à 4".

Cliquez sur les variables d'entrée E0, E1 et E2 afin de vérifier que l'assemblage des deux décodeurs "2 vers 4" forme un parfait décodeur de type "3 vers 8".

A ce stade, l'auteur de cette page serait vraiment peiné qu'aucune remarque du style "Bon sang ! Mais qu'est-ce que c'est que cette foutue ligne de donnée E2 ?" ne fuse dans les chaumières.
En effet, les deux décodeurs présentés ci-contre disposent d'une ligne surnuméraire par rapport au décodeur type que nous venons de décrire.
Mais vous, bien sûr, vous l'aviez remarqué.

De fait, il s'avère que les décodeurs disposent effectivement d'une ligne supplémentaire qui vient se connecter à chaque porte AND interne au circuit. En usage normal, cette ligne permet simplement de piloter le décodeur grâce au signal qu'elle véhicule: activée, cette ligne autorise le décodeur à fonctionner. Inactivée, toutes les sorties du circuit restent muettes. On qualifie donc cette entrée de ligne de validation.

Néanmoins, cette ligne de validation peut être habilement détournée de son usage originel pour servir de ligne de donnée supplémentaire, comme dans le cas de notre assemblage de décodeurs. Nous verrons bientôt...pff... que, dans ce cas, notre décodeur n'en est déjà plus tout à fait un...

...et version "blouse blanche"

De retour de l'atelier de montage avec votre rutilante définition du décodeur sous le bras, voilà qu'une créature enblousée de blanc et lunettée...de ces êtres fantômatiques hantant habituellement le royaume terrifiant de la R&D vous hèle d'une voix chevrotante: "Tiens donc ! Ainsi vous vous intéressez au décodeur, jeune béotien...ou béotienne. La créature est souvent affreusement myope.. ? Savez-vous qu'il s'agit d'un circuit combinatoire permettant de réaliser les 2n mintermes de n variables ?
Bon sang, c'est pourtant vrai ! Nos décodeurs seraient donc plus puissants encore que nous le pensions...

En effet, Nous savonsOn vous l'avait pourtant conseillé, le petit tour par la page consacrée à l'algèbre de Boole. que toute fonction logique à n variables, quelle qu'elle soit, peut toujours être exprimée sous la forme d'une somme des mintermes...c'est la fameuse première forme canonique. correspondant aux lignes de sa table de vérité pour lesquelles la fonction est vraie.
Or, justement, notre décodeur réalise tous les mintermes de ses variables d'entrée par le biais de ses portes AND, chacune de celles-ci se trouvant reliée à chacune des lignes d'entrée, sous leur forme vraie ou inversée.

Par conséquent, il est pertinent de dire qu'un décodeur est capable de réaliser n'importe quelle fonction logique...du moins dès lors que l'on connaît la table de vérité de cette dernière, puisqu'il suffira de relier par une porte OR toutes les sorties du décodeur correspondant aux mintermes de la première forme canonique.

La preuve en couleurs...
 

Réalisation d'un additionneur trois bits à l'aide d'un décodeur de type "3 à 8".

Cliquez sur les variables d'entrée A, B et C afin de vérifier la valeur prise par les sorties S (somme) et R (retenue).

Comme ce que nous avons fait plus haut pour l'additionneur, établissons la table de vérité d'un circuit réalisant la somme arithmétique de trois bits A, B et C - en précisant les valeurs prises par la somme (S) et la retenue (R):

A B C S R
00000
00110
01010
01101
10010
10101
11001
11111

Une fois la table dressée, il est alors facile d'exprimer S et R sous leur première forme canonique, à savoir:

   - S = A.B.C + A.B.C + A.B.C + A.B.C

   - R = A.B.C + A.B.C + A.B.C + A.B.C

...puis, pour réaliser l'engin, interconnecter les sorties correspondant à ces mintermes sur deux portes logiques OR.
Alors ? Pas formidable notre décodeur ? Même plus la peine de se coltiner Karnaugh...

Encodeur

Une fois assimilés le principe et le fonctionnement du décodeur, l'encodeur (encoder) ne devrait pas nous causer trop de tourment puisqu'il s'agit simplement d'un circuit combinatoire réalisant l'opération inverse du décodeur, à savoir un circuit à 2n entrées mutuellement exclusives et n sorties réalisant l'encodage binaire de la ligne activée.
 

Logigramme d'un encodeur de type "4 à 2 ".

Cliquez sur une des lignes d'entrée pour constater le code conséquent en sortie.

Priorité aux grands

Il peut arriver, dans certaines circonstances, que le signal d'entrée ne s'avère pas aussi univoque que ne le prévoit la théorie. Bref, que deux lignes d'entrée se trouvent activées simultanément. Dans ce cas, l'encodeur doit être doté d'une logique supplémentaire afin d'accorder la priorité à l'un de ces signaux, en général celui correspondant au code le plus grand.


Le clavier de votre machine est un exemple très concret de dispositif mettant en jeu un encodeur. En effet, chaque touche du clavier se trouve reliée à une ligne électronique qui, une fois activée, délivre un signal à un encodeur chargé de convertir cette entrée en un code clavier pouvant ensuite être exploité par l'unité centrale.

Comme vous l'avez constaté, un codeur ne matérialise aucunement les mintermes de ses variables d'entrée. Impossible, donc, de l'utiliser comme générateur universel de fonctions logiques, contrairement à notre fidèle décodeur.

Transcodeur

Comme on pouvait légèrement si attendre, un transcodeur (transcoder) est un circuit combinatoire à n entrées et m sorties dont le rôle est de convertir un code en un autre, d'où son autre nom, plus explicite encore, de convertisseur de code.

Bien évidemment, n'espérez pas qu'un transcodeur ne vous rende quoi que ce soit d'intelligible puisque le code d'entrée, comme le code de sortie seront bien évidemment des codes binaires.

Quoique...

Exemple d'un transcodeur binaire à afficheur digital.

Cliquez sur les lignes d'entrées afin de constater comment le transcodeur convertit le code d'entrée (ici, un code en binaire pur) en signaux d'activation des segments d'un afficheur digital.

Bon. Précisons tout de suite que ce schéma purement fonctionnel prend de sacrées libertés avec les contingences d'un montage électronique, mais il illustre plutôt bien le principe de fonctionnement d'un transcodeur.
Alors on va le garder encore un peu...

Vous noterez aussi que nous n'avons pas fait figurer ici la tripaille électronique de ce transcodeur fantaisiste. Cela ne s'imposait vraiment pas.

Circuits aiguilleurs

Multiplexeur

Très combinatoirement parlant, un multiplexeur (multiplexer) - MUX pour les intimes - est un simple circuit logique à 2n + n entrées et une seule sortie.

Mais à quoi peut bien servir un circuit doté de tant d'entrées et d'une sortie unique ?
Et bien le rôle d'un multiplexeur est de transmettre en sortie la valeur de l'une des 2n entrées selon la valeur prise par n variables appelées variables de commande (ou, également, variables de sélection), le tout donnant quelque chose ressemblant à ça:
 

Schéma fonctionnel d'un multiplexeur de type "4 vers 1".

Cliquez sur les variables de commande C0 et/ou C1 afin de constater la conséquence sur le fonctionnement du multiplexeur.

Comme vous le voyez, un multiplexeur permet simplement d'aiguiller sur la ligne de sortie l'un des signaux d'entrée...qui peuvent provenir d'un circuit logique, d'un bus, d'un autre multiplexeur... bref, de tout circuit électronique en état de marche. selon la valeur des lignes de commande.

Comprenez bien que le schéma ci-dessus est un schéma purement fonctionnel: en réalité, un multiplexeur n'a rien a voir avec un dispositif mécanique où une sorte d'aiguillage relierait une des entrées à la sortie. De fait, nous trouvant au beau milieu d'une page consacrée aux circuits combinatoires, vous ne serez pas surpris(e) d'apprendre qu'un multiplexeur est en fait constitué d'un judicieux assemblage de portes logiques.
 

Le jeu de la vérité

Dans le cas de notre multiplexeur 4 vers 1, combien de lignes devrait normalement constituer notre table de vérité ?
4
Apparemment, vous avez considéré que notre multiplexeur était en fait un circuit à deux entrées, correspondant aux deux seules lignes de commande. Deux solutions: ou (version pessimiste) vous n'avez rien pigé de tout ce que nous venons de voir ou (version optimiste) vous êtes un peu en avance sur le plan de cours...
16
Apparemment, donc, pour vous, les quatre signaux de données constituent les seules variables d'entrée de notre multiplexeur. Mais quid des signaux de commande ? Leur valeur influe pourtant directement sur la valeur de sortie du dispositif...
64
Exact. Dans le cas de notre mulitplexeur, nous avons 4 (lignes de données) + 2 (lignes de commande), soit 6 variables d'entrée. Or, nous savons depuis belle lurette que n variables d'entrée donne naissance à une table de vérité de 2n lignes, soit 64 dans le cas présent.

Bigre, 64 lignes ! Conformément à la loi universelle et fondamentale de l'énergie minimale, commençons déjà par établir les seize premières d'entre elles.

C0 C1 D0 D1 D2 D3 S
0000000
0000010
0000100
0000110
0001000
0001010
0001100
0001110
0010001
0010011
0010101
0010111
0011001
0011011
0011101
0011111

Bon, ayé. En prenant un peu de recul, nous constatons, sans véritable surprise, que pour une même valeur du couple C0-C1 (ici: 0-0), la valeur de sortie est exactement la même qu'une des lignes de données (ici D0). Sans surprise, effectivement, puisque tel est justement le but recherché par un multiplexeur.

En d'autres termes, pour les seize premières lignes de notre table de vérité, les variables d'entrée D1, D2 et D3 ne sont là que pour faire joli et, accessoirement, considérablement alourdir notre table de vérité. Dès lors, nous pourrions astucieusement remplacer notre lourde table en chêne massif par une table basse en kit suédois:

C0 C1 S
00D0
10D1
01D2
11D3

 
Certes, la dernière colonne ne rend pas cette table de vérité très académique, mais reconnaissons tout de même qu'elle gagne là grandement en concision et en clarté.

Ceci fait, ne nous reste plus qu'à concevoir notre multiplexeur à l'aide des portes logiques adéquates:
 

Logigramme d'un multiplexeur de type "4 vers 1".

Cliquez sur les variables de commande C0 et/ou C1 afin de constater la conséquence sur le fonctionnement du multiplexeur.

Voila qui est déjà beaucoup plus conforme à une page consacrée aux circuits combinatoires...

Les boolistes aguerrisLes autres n'auront qu'à faire comme s'ils n'avaient rien vu... acquiesceront lorsque nous dirons que notre multiplexeur ci-dessus est une matérialisation électronique de la fonction logique F ainsi définie:

     F(C0, C1, D0, D1, D2, D3) = D0.C0.C1 + D1.C0.C1 + D2.C0.C1 + D3.C0.C1

Une fois les choses présentées de cette manière, il plus facile de comprendre que le multiplexeur soit également appelé système logique universel.

En effet, nous avons rappelé il y a peu que toute fonction logique F à n variables pouvait être exprimée sous la forme de la somme logique de tous ses minterms pour lesquels la fonction est vraie. Notre multiplexeur réalisant tous ces mintermes et liant chacun d'eux à une ligne d'entrée, il suffit d'activer les lignes d'entrée correspondant aux mintermes de la première forme canonique de F pour que le multiplexeur se comporte comme la parfaite matérialisation de cette fonction.

Spéciale dédicace aux suscipicieux(ses) et autres je-ne-comprends-jamais-rien-sans-un-bon-vieil-exemple:
 

A B C F(A, B, C)
0000
0010
0101
0111
1000
1010
1101
1110

Reprenons, pour nous en convaincre, notre fonction logique croisée un peu plus haut, à savoir:

     F(A, B, C) = A.B.C + A.B.C + A.B.C

...l'avantage évident étant qu'un habile copier-coller nous amènera sa table de vérité comme sur un plateau:

Puis constituons un multiplexeur obéissant à la méthode ci-dessus décrite, à savoir reliant les huit mintermes constitués par les trois variables de commande à leur valeur correspondante dans la table de vérité.

Et enfin, vérifions.


 

Logigramme de la fonction F réalisée à l'aide d'un multiplexeur de type "8 vers 1" .

Cliquez sur les variables de commande A, B et/ou C afin de constater que la variable de sortie est égale à la fonction F des variables A, B et C.

Le contraire de ce qu'on lui demande...

Pour des raisons purement technologiques, il s'avère que les multiplexeurs tels qu'on les trouve dans le commerce...et oui, ils le vendent ça... ont un inverseur à leur sortie.
Vous prendrez donc les dispositions qui s'imposent...

Comme vous le voyez, la définition du multiplexeur est aussi un peu question de couleur de blouse...

Multiplexons ensemble

Combien de multiplexeur(s) nous faudrait-il pour matérialiser un additionneur trois bits tel que nous l'avons réalisé avec un décodeur ?
1
Et non. Nous venons de voir qu'un multiplexeur pouvait certes servir de générateur universel de fonction, mais notre additionneur trois bits est un circuit combinatoire mettant en jeu non pas une mais deux fonctions logiques: une fonction calculant la somme et l'autre la retenue. Il nous faudra donc deux multiplexeurs pour réaliser l'engin.
2
Parfaitement exact. Un multiplexeur chargé du calcul de la somme (que nous avions symbolisée S) et un autre chargé du calcul de la retenue (R).
Circuit impossible à concevoir
Votre souris a des problèmes de molette ou quoi ?

Démultiplexeur

Une fois compris le rôle et le fonctionnement d'un multiplexeur, un demultiplexeur (demultiplexer...vraiment pas sorcier l'anglais technique...) - DEMUX pour qui sait ce qu'est un MUX - perd tout effet de surprise puisque, comme son nom l'indique, il s'agit d'un circuit destiné à transmettre un signal d'entrée unique sur l'une des 2n lignes de sortie selon la valeur des n lignes de commande.
Bref, un dé-multiplexeur.

De manière très visuelle, l'engin ressemble donc à ça:
 

Logigramme d'un démultiplexeur de type "1 vers 4".

Cliquez sur les variables de commande C0 et/ou C1 afin de constater la conséquence sur le fonctionnement du démultiplexeur.

A ce stade, les plus vives et vifs de nos lecteurs-lectrices auront remarqué combien le démultiplexeur ressemble fichtrement à un décodeur doté d'une ligne de validation.
Et bien oui ! Comme nous vous le laissions entendre, un décodeur n'est rien d'autre qu'un démultiplexeur dont la ligne de validation serait activée en permanence.

Toutes les belles analyses concernant notre décodeur s'appliquent donc également à notre démultiplexeur, y compris son prodigieux pouvoir de générateur de fonctions.

Comprend tout de travers...

Pour les mêmes raisons que vues pour le multiplexeur, les démultiplexeurs commerciaux sont en réalité pourvus d'un inverseur sur chacune de leurs entrées...rien que pour vous embêter, sûrement....

L'air de rien, le couple multiplexeur-démultiplexeur (MUX-DEMUX pour les intimes) s'avère être un circuit ô combien précieux en informatique domestique.

Vous nous croirez bien volontiers en vous disant que votre ordinateur est une machine plutôt complexe, composée d'un grand nombre d'unités fonctionnelles interconnectées et s'échangeant en permanence des flots de données binaires. Or, qui dit réseau de transport dit nécessairement aiguillages.

La première fonction du couple MUX-DEMUX, comme on pouvait raisonablement s'en douter, sera donc de permettre le routage des différents signaux à l'intérieur de la machine.
En d'autres termes, à toute unité fonctionnelle potentiellement appelée à recevoir des données de plusieurs autres unités émettrices, un multiplexeur s'insérera généralement à l'arrivée des signaux d'entrée afin d'organiser le trafic, aux ordres des lignes de commande.

L'exemple le plus parlant d'utilisation du couple multiplexeur-démultiplexeur se retrouve au niveau des bus de communication.
Pour faire très simple...ou, sinon, pour faire moins simple, vous pouvez suivre ce lien..., un bus informatique est un faisceau de lignes électriques chargées de convoyer des données d'un point à un autre. Or, la plupart des bus sont dits "partagés", dans le sens où plusieurs unités différentes partagent le même bus afin de simplifier l'architecture de la machine, et, point non négligeable, alléger sensiblement les coûts de fabrication.
L'insertion d'un multiplexeur au départ du bus, associé à un démultiplexeur à son autre extrémité, permet dès lors de partager l'accès au bus entre ces différentes unités, les lignes de commande du MUX et du DEMUX indiquant laquelle de ces dernières étant autorisée, à un moment donné, à transmettre sur le bus commun.
 

Principe de fonctionnement du couple MUX-DEMUX.

Cliquez sur les variables de commande du multiplexeur et/ou du démultiplexeur afin de constater comment ces lignes peuvent piloter l'accès au bus.
 

De manière très surprenante, cette technique de transmission de données est appelée multiplexage.

Circuit comparateur

Avec assez peu de surprise, un comparateur est un circuit combinatoire chargé de comparer deux valeurs binaires. Le nombre d'entrées du circuit varie selon la taille des nombres pouvant être comparés, et le nombre de sorties osciller entre un et trois.

Dans sa version la plus simple, le comparateur n'indique en sortie que si les deux nombres entrés sont égaux ou différents. Dans sa version plus évoluée, trois sorties sont prévues, pour indiquer si les deux nombres sont égaux ou, dans le cas contraire, lequel est le plus grand.

De par le standing général de ce site, c'est ce dernier qui a été choisi pour illustrer le ci-suivant schéma.
Dans sa version 1 bit...

Logigramme d'un comparateur 1 bit.

Cliquez sur les variables d'entrée A et/ou B pour constater les conséquences sur la valeur des variables de sortie.

Bien évidemment, un comparateur 1 bit s'avère un peu léger-léger pour prétendre à de grands desseins algorithmiques, mais, comme pour l'additionneur, plusieurs comparateurs peuvent parfaitement être mis en cascade afin de pouvoir procéder à des comparaisons plus conséquentes.

Evidemment, tout cela peut vous paraître bien compliqué pour comparer deux malheureux bits.
Mais êtes-vous bien certain(e) que la même tâche vous réclame moins de neurones ?

Enfin bref...

Nous vous avions prévenus !
La pseudo-intelligence dont font si bien preuve nos ordinateurs n'a décidément rien de magique puisqu'elle n'est le fait que d'un courant électrique passant au travers de portes logiquesTiens...Un peu comme dans votre cerveau en fait....

Notre étude s'est certes limitée à quelques circuits types, mais ces exemples illustrent parfaitement le fait que toute tâche mathématique ou logique qu'un processeur s'avère capable de réaliser se trouve en réalité "matérialisée" sous forme d'un circuit électronique, labyrinthe de portes logiques ingénieusement disposées selon les lois de l'algèbre binaire.

Alors ? Aurions-nous définitivement percé les arcanes de l'intelligence de nos ordinateurs ?
Euh... en fait non... La bête garde encore quelques jaloux secrets...

Ainsi, par exemple, la seule interconnexion de portes logiques ne suffirait pas à constituer un processeur digne de ce nom. Il nous faudrait pour cela d'autres circuits plus élaborés appelés circuits séquentiels.

Pour aller plus loin...

Feed-back: exprimez-vous !

Arcana est un site gratuitSa version payante ayant conduit trois comptables à la dépression.... De fait, vos messages chaleureux et enthousiastes constituent la principale motivation de son auteur à tenter de le faire vivre.
Néanmoins, toutes les vérités sont bonnes à dire et ce formulaire est donc également destiné à recevoir vos doléances et vos remarques, ainsi que vos questions, vos rapports de bugs, et, par dessus tout, vos précieux conseils et correctifs.

Merci.

Notes techniques

Ce site a été testé sous environnement Windows avec les deux navigateurs les plus populaires du moment, à savoir Internet Explorer 7 et Firefox 2.
Tout avait l'air de fonctionner à peu près.

Il est vrai qu'aucun effort supplémentaire de compatibilité avec d'autres navigateurs n'a été entrepris, le nirvana du cross-browsing réclamant tout à la fois une patience d'ange, une méticulosité d'horloger et, paramètre non négligeable, un certain bol de cocu, toutes qualités dont ne dispose pas l'auteur de ce site.

Afin que Arcana puisse à peu près correctement fonctionner sur votre machine, votre navigateur doit autoriser l'exécution des scripts JavaScript et également disposer du plugin Adobe FlashPlayer.

En effet, la plupart des somptueuses animations disséminées sur ce site ont été réalisées avec le logiciel Adobe Flash©. Télécharger FlashPlayer Si votre ordinateur ne dispose pas du petit programme permettant de lire ce format, vous ne pourrez visualiser ces animations.
Heureusement, il vous suffit pour remédier à cette terrible injustice de cliquer sur ce logo ci-contre afin de télécharger le "plugin" qui vous permettra de découvrir enfin ces petits chefs-d'oeuvre d'art naïf (ainsi que, par la suite, toute page Internet recourant à cette technologie).
La procédure est indolore, rapide et gratuite, alors pourquoi s'en priver, je vous le demande ?

Arcana recherche...

Quoique l'auteur de ce site dispose d'une petite expérience et d'un nanodiplôme en sciences informatiques, il n'est malheureusement titulaire d'aucun permis d'enseigner validé par l'Académie. Dès lors, et bien que tout ait été mis en oeuvre afin de ne pas propager de trop grossières erreurs sur ces pages, il manque à Arcana ce qui lui donnerait tout à la fois poids et respectabilité, à savoir une autorité scientifique, auréolée d'un cursus en règle et du crédit de l'Université.
Si une ou plusieurs sommités venant à croiser ce site acceptaient d'endosser cette écrasante responsabilité de caution intellectuelle pour une ou plusieurs leçons, elles seraient grandement remerciées et leur nom bien évidemment gravé en lettres d'or en tête de page, leur assurant par là même gloire et renommée quasi planétaires.

Un sens du dépouillement et d'humilité artistique qui confine au déprimant...Par ailleurs, les spécialistes l'auront remarqué, Arcana se pare d'un graphisme rococo et luxuriant directement inspiré par l'école est-allemande des années 70.
De fait, quiconque n'a jamais eu à concevoir ex nihilo un simple bouton d'interface ne peut comprendre à quel point l'infographie est un métier à part entière. L'auteur de ce site ayant, suite à un très long face-à-face avec Photoshop, découvert son absence totale de don dans ce domaine très artistique, toute aide serait la bienvenue pour offrir à Arcana une charte graphique digne de ce nom.

De la même manière, quelques laborieux petits dessins pseudo-humoristiques viennent ça et là agrémenter le contenu parfois franchement hostile de certaines leçons. Si, vous aussi, vous tenez à participer à cette courageuse entreprise de dépénibilisation de l'écrit pédagogique, vos bulles originales seront les bienvenues et, légitimement signées, contribueront au fantastique rayonnement humaniste et artistique d'Arcana.

D'avance, merci.

Plan de la leçon