Transistors et portes logiques

L'odinateur code et manipule l'information à l'aide du binaire et d'expressions booléennes. Comment ces manipulations se font-elles au niveau du matériel électronique ?

I. Le transistor :

Le transistor est un composant électronique essentiel du monde informatique actuel.

Il a été inventé en 1947 par les Américains John Bardeen, William Shockley et Walter Brattain des Laboratoires Bellnote. Ils ont reçu le prix Nobel de physique en 1956.

Le transistor remplace les tubes à vide qui existaient auparavant. Ainsi, l'ENIAC (Electronic Numerical Integrator And Computer) construit en 1945 était le premier ordinateur entièrement électronique. Il utilisait 17 468 tubes à vide et pesait 30 tonnes !

tubeVide.JPG

Initialement, les transistors étaient utilisés à l'unité.

transistors.png

Avec les progrès de la miniaturisation, les transistors sont désormais installés sur des circuits intégrés. Les processeurs au coeur de nos ordinateurs sont construits ainsi : le Qualcomm Snapdragon 8cx / SCX8180 sorti en 2018 contient 8,5 milliards de transistors !

Cette augmentation du nombre de transistors dans les circuits intégrés est appelée loi de Moore. Cette observation affirme que le nombre de transistors dans les circuits intégrés double tous les deux ans.

997px-Moore's_Law_Transistor_Count_1971-2018.png

Le transistor permet de conditionner le passage d'un courant électrique entrant à l'existence d'un autre influx électrique :

Modèle de base

transistor-00.png

Seul l'entrée (collecteur) reçoit du courant : pas de courant en sortie

transistor-01.png

Le collecteur et la base (qui sert de contrôle) reçoivent du courant : la sortie est alimentée

transistor-11.png

II. Les portes logiques :

Tout seul, un transistor permet de faire passer ou non du courant. On peut néanmoins en agencer plusieurs afin de créer des portes logiques (logic gates en anglais).

Celles-ci correspondent aux opérateurs booléens vu dans le cours sur les Valeurs booléennes.

Etudions la porte $AND$

transistor-AND-Gate.png

Le collecteur (le courant d'entrée) arrive par Vcc. $A$ et $B$ sont deux entrées, chacune reliée à un transistor. Ceux-ci sont en série.

Pour que la sortie Out soit alimentée, il faut donc que $A$ et $B$ fassent passer du courant. Dans ce cas, les deux transistors transmettent le courant d'entrée et la sortie est alimentée.

Pour la porte $OR$ :

transistor-OR-Gate.png

Cette fois-ci, les transistors sont placés en parallèle. Si $A$ laisse passer le courant, celui-ci alimente immédiatement la sortie, peu importe la valeur de $B$.

Si $A$ n'est pas alimenté mais $B$ l'est, le courant passe vers le sortie.

Si, ni $A$ ni $B$ ne sont alimentés, le courant n'est pas transmis : la sortie reste à $0$.

Voici pour information les montages des portes $NOT$ et $NAND$ :

transistor-NOT-Gate.png

transistor-NAND-Gate.png

Le diagramme ci-dessous présente différentes portes logiques ainsi que leurs représentations schématiques :

gatessymbols.png

Ces schémas permettent de symboliser de nouvelles portes logiques :

$(non\:A)\:ou\:(B\:et\:C) = \overline{A} + (B\:.\:C)$

diagram-1.png

$A$ $B$ $C$ $Résultat$
$0$ $0$ $0$ $1$
$0$ $0$ $1$ $1$
$0$ $1$ $0$ $1$
$0$ $1$ $1$ $1$
$1$ $0$ $0$ $0$
$1$ $0$ $1$ $0$
$1$ $1$ $0$ $0$
$1$ $1$ $1$ $1$

III. Application : l'addition de nombres en binaire

On peut, à l'aide de ces portes logiques, additionner des nombres en binaire.

On se souvient qu'en binaire :

  • $0+0=0$
  • $0+1=1$
  • $1+0=1$
  • $1+1=10$

Si l'on ne tient compte que du chiffre des unités de la dernière ligne, on reconnaît la table de vérité du $XOR$ :

XOR.jpg

On peut donc construire un circuit faisant l'addition de deux bits à l'aide de cette porte. Il faut juste teni compte de la dizaine. Celle-ci n'apparaît que pour $1+1=10$ : on reconnaît la table du $AND$.

Ainsi, le circuit half-adder faisant l'addition de deux bits en renvoyant le résultat (sum) et la retenue (carry) est le suivant :

Half-Adder.png

half-adder-truth-table.png

Une fois que l'on a additionné les deux premiers bits, on doit additionner les deux suivants (A et B) en tenant compte de la retenue de la somme précédente (celle du half-adder, noté _Cin sur le schéma). C'est le circuit full-adder qui renvoie le résultat de la somme (sum) et la retenue (_Cout):

Full-Adder.png

full-adder-truth-table.png

Donc si l'on souhaite additionner deux nombres entiers de $8$ bits, on doit combiner :

  • un half-adder pour les deux premiers bits (A1 et B1)
  • celui-ci renvoie la retenue à un full-adder qui somme les bits de rang 2 (A2 et B2)
  • celui-ci renvoie la retenue à un full-adder qui somme les bits de rang 3 (A3 et B3)
  • ...
  • celui-ci renvoie la retenue à un full-adder qui somme les bits de rang 8 (A8 et B8)

La dernière retenue permet d'indiquer un dépassement de capacité (overflow).

Binary-addition-using-binary-adder-circuits.png

IV. Circuits combinatoires et séquentiels :

Tous les exemples de circuits précédents sont dits combinatoires : la sortie ne dépend que des entrées.

Il existe aussi des circuits dits séquentiels dans lesquels la sortie dépend de l'entrée et de l'état actuel du circuit.

Ce type de circuit permet de sauvegarder des données : imaginons un circuit qui se "souvienne" de sa sortie précédente. Si c'était un "$0$" et qu'on lui propose désormais un "$0$" en entrée, il ne change rien. Par contre, si on lui propose un "$1$", il change d'état.

Ce type de circuit est une bascule. C'est ce type de circuit (et ses versions évoluées) qui permet de stocker l'information dans la mémoire vive de l'ordinateur.

Les bascules RS (pour Reset et Set) peuvent être construites à l'aide de portes $NOR$ ou $NAND$. Observons le cas $NAND$

bascule1

Il y a deux entrées :

  • S pour Set permet de mettre (ou maintenir) la bascule à 1
  • R pour Reset permet de mettre (ou maintenir) la bascule à 0

Il y a deux sorties qui contiennent des valeurs opposées (0/1 ou 1/0) afin d'assurer le fonctionnement du circuit. C'est la sortie Q qui fait office de mémoire.

Dans le détail on a :

bascule2

On voit que les sorties se reconnectées aux entrées : cela permet d'assurer la mémoire du circuit.

bascule3