Circuits logiques
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 |
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:
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....
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 (complete operators).
La preuve en images...
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 (combinatory circuit) - 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 (input):
E1 E2 ... EN - Une ou plusieurs variables de sortie (output):
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 |
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) |
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 0 |
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).
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 |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 10 |
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 |
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).
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).
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
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.
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:
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 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
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.
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:
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...
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 |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
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.
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 (code converter).
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...
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:
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é
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 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 0 | 0 | 1 | 1 | 0 |
| 0 | 0 | 0 | 1 | 0 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 | 1 | 0 |
| 0 | 0 | 0 | 1 | 1 | 0 | 0 |
| 0 | 0 | 0 | 1 | 1 | 1 | 0 |
| 0 | 0 | 1 | 0 | 0 | 0 | 1 |
| 0 | 0 | 1 | 0 | 0 | 1 | 1 |
| 0 | 0 | 1 | 0 | 1 | 0 | 1 |
| 0 | 0 | 1 | 0 | 1 | 1 | 1 |
| 0 | 0 | 1 | 1 | 0 | 0 | 1 |
| 0 | 0 | 1 | 1 | 0 | 1 | 1 |
| 0 | 0 | 1 | 1 | 1 | 0 | 1 |
| 0 | 0 | 1 | 1 | 1 | 1 | 1 |
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 |
| 0 | 0 | D0 |
| 1 | 0 | D1 |
| 0 | 1 | D2 |
| 1 | 1 | D3 |
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:
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) |
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 0 |
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.
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
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:
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.
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 (comparator) 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...
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 ?
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 les plus |
Allez ! On y retourne... Circuits séquentiels (C'est pas prêt !) |





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.