5. Mémoire¶
Les transistors, les portes logiques et leur représentation en tables de vérités, permettent de manipuler des 0 et des 1 au niveau physique… Tant qu’un courant électrique se déplace dans les circuits, on est capable de le transformer, de le laisser passer ou de l’arrêter, dans le but d’exprimer des portes « ouvertes » ou des portes « fermées » et donc des nombres binaires. L’ALU, explorée au chapitre précédent, va une étape plus loin et permet de choisir une opération à effectuer en fonction de bits de contrôle supplémentaire, et livre le résultat de l’opération arithmétique ou logique choisie.
Mais comment faire pour stocker cette information ? Comment faire pour que l’on se rappelle le résultat d’une addition effectuée par une ALU afin de pouvoir réutiliser cette valeur plus tard ? C’est là que nous avons besoin de mémoire.
Dans les ordinateurs, il y a en fait plusieurs types de mémoires, qu’on peut classer en deux grandes catégories. La mémoire volatile, et la mémoire non volatile. La mémoire volatile s’efface quand la machine et éteinte. C’est le cas de la RAM (random-access memory), par exemple. La mémoire non volatile, elle, persiste. C’est le cas d’un disque dur ou d’un SSD (solid-state drive). Si un smartphone s’éteint inopinément alors qu’on est en train de retoucher une photo sans avoir validé les modifications, ces retouches disparaissent. Elles étaient stockées sur la mémoire volatile. Par contre, au moment où ces retouches sont sauvegardées, elles s’inscrivent dans la mémoire non volatile.
On peut se demander pourquoi on n’utiliserait pas que de la mémoire non volatile, vu les « risques » posés par la mémoire volatile. La réponse est que la mémoire non volatile va probablement être entre 100 et 100 000 fois moins rapide que la mémoire volatile. On privilégie donc la mémoire volatile comme mémoire de travail rapide d’un ordinateur.
Dans les sections qui suivent, on propose de s’intéresser au cas le plus simple: la construction d’une cellule de mémoire volatile qui sera à même de stocker un bit. Par la suite, nous discuterons de la manière dont ce genre de mémoire est utilisée au cœur des microprocesseurs.
5.1. Le verrou SR¶
L’idée principale derrière la conception d’un circuit logique qui est capable de stocker un signal est que l’on va utiliser la ou les sorties du circuit en les reconnectant à certaines de ses entrées. Essayons par exemple ce circuit simple avec une seule porte OU :
Au début, les deux entrées de la porte valent 0, comme sa sortie. Si l’on essaie de faire passer l’entrée
Assurément, ce circuit n’est pas très intéressant : il se bloque dans un état sans retour possible. Il faudrait pouvoir faire repasser la valeur de sortie à 0. Pour ce faire, une idée est d’ajouter une porte ET avant de faire repasser la sortie de la porte OU dans sa propre entrée. Cela nous permet d’annuler le signal de retour si la seconde entrée du ET (appelons-la
Essayez ce circuit : quand
Le circuit est plus facile à utiliser lorsqu’on inverse l’entrée
Dans ce circuit-ci, on peut considérer que :
Tant que
est inactif (donc vaut 0), le passage de de 0 à 1 fait passer la sortie à 1. Ceci fait donc en sorte que la sortie « verrouille » sur la valeur 1, car elle garde sa valeur même si repasse à 0.Tant que
est inactif, le passage de de 0 à 1 fait passer la sortie à 0, et la sortie se « verrouille » ainsi à 0 même si repasse à 0.
On appelle effectivement ce genre de circuits des verrous. Nous avons ici construit un des plus simples. D’habitude, son entrée
Voici une représentation équivalente du même circuit1, donc du même verrou SR :
Ce circuit stocke ainsi un bit de donnée — un 0 ou un 1 — qu’on va pouvoir lire via la sortie
Testez le circuit ci-dessus et observez l’effet de
On essaie en général d’éviter d’avoir un 1 sur
Ces verrous sont communs, et pour le reste du chapitre, on simplifiera la notation pour les représenter ainsi, sans changement de fonctionnalité, mais en faisant abstraction des détails internes :
Pour aller plus loin
Voici une vidéo qui illustre ce principe de verrou SR.
5.2. La bascule D¶
Un souci avec le verrou SR est qu’on a rarement un signal d’entrée qui soit facilement exploitable pour être « converti » en cette logique set/reset. La plupart du temps, on a simplement un signal donné, disons
On va utiliser pour cela un circuit similaire, mais qui fonctionne un peu différemment, qui s’appelle une bascule D2 :
Cette bascule va stocker son entrée
Testez cette bascule. Réglez l’entrée de données
Pour aller plus loin
Pour aller plus loin, une vidéo de résumé qui parle aussi des bascules et des registres :
Exercice 1 – Stocker deux bits
Créez un circuit qui calcule, d’une part, le OU de deux entrées
Corrigé
Exercice 2 – Signal alternatif
À l’aide d’une bascule, créez un circuit avec une sortie
Corrigé
Exercice 3 – Jeu de fréquences
Observez le circuit ci-dessous. L’horloge principale
Vous pouvez mettre l’animation en pause et exécuter chaque transition pas à pas pour mieux comprendre ce qui se passe.
Corrigé
Le signal
TODO ajouter explication
Si ce petit circuit fonctionne à 1 Hz, les appareils que nous utilisons aujourd’hui ont des horloges qui fonctionnent à plusieurs gigahertz (GHz), c’est-à-dire plusieurs milliards de fois plus vite. On attend ainsi moins d’une nanoseconde entre deux coups d’horloge.
5.3. Addition en plusieurs étapes¶
Dans cet exemple final, nous allons construire un circuit capable d’effectuer l’addition de plusieurs nombres ; par exemple, d’évaluer la somme
Si ce calcul a l’air simple, il s’y cache une subtilité : nous n’avons aucun circuit auquel nous pourrions donner quatre nombres et qui en ferait la somme. Nous ne savons additionner que deux nombres à la fois. Mais nous pouvons additionner progressivement les nombres un à un à une sorte d’« accumulateur » qui stockerait les résultats intermédiaires. Au début, avant d’avoir additionné quoi que ce soit, cet accumulateur représenterait un 0. Ensuite, on y additionnerait, l’un après l’autre, chacun des nombres du calcul ainsi :
Chacune de ces lignes a la forme « accumulateur + nombre à additionner = nouvel accumulateur ».
L’avantage de procéder ainsi, en décomposant à l’extrême, est que chaque étape est une addition de précisément deux nombres — et nous savons faire de telles additions avec une ALU.
Commençons à créer un circuit capable de faire ceci. Notre ALU opérant sur des nombres de 4 bits, prenons le parti de représenter notre accumulateur via également 4 bits — 4 cellules mémoire, et donc 4 bascules. Pour remettre l’accumulateur à zéro, nous allons connecter un signal unique au reset de chacune de ces bascules. Nous allons aussi, comme chaque fois, connecter un signal d’horloge aux bascules, pour leur indiquer leur moment où elles doivent stocker les valeurs qui sont sur leurs entrées respectives. Ajoutons aussi une ALU pour effectuer l’addition et un afficheur décimal pour les 4 bits stockés dans les bascules.
Cela nous donne ce début de circuit, qui pour l’instant n’est pas fonctionnel :
Connectons maintenant les entrées de l’ALU. On se rappelle qu’à chaque étape, l’ALU calculera une addition de la forme « accumulateur + nombre à additionner = nouvel accumulateur ». L’entrée
L’entrée
Il reste à connecter la sortie
Voici le circuit final :
Ce circuit fonctionne ainsi : au début du calcul, on réinitialise les bascules à zéro avec le signal
On réalise ici l’importance du coup d’horloge : si les bascules stockaient immédiatement la valeur livrée par l’ALU sans attendre le coup d’horloge, on retrouverait presque sans délai cette valeur sur la sortie des bascules et donc… à l’entrée
Exercice 4 – Additions avec bascules
Suivez la procédure décrite ci-dessus pour effectuer l’addition
5.4. Récapitulatif¶
Au cours des quatre chapitres précédents, nous avons vu comment les portes logiques sont utilisées comme composants de base des ordinateurs. Nous avons d’abord exploré des portes simples comme OU et ET, puis montré comment ces portes peuvent être combinées en systèmes logiques plus complexes.
Avec des portes, nous avons construit un additionneur de deux bits. Nous avons ensuite été à même, en enchaînant plusieurs additionneurs, de créer un système qui peut additionner non pas simplement deux bits, mais deux nombres entiers codés sur 4 bits chacun.
Nous avons ensuite découvert l’unité arithmétique et logique, capable de réaliser plusieurs opérations différentes avec ses entrées en fonction de bits supplémentaires qui permettent de sélectionner l’opération à effectuer.
Notre dernière étape d’exploration des systèmes logiques nous a menés aux verrous et aux bascules, des composants pensés pour stocker des bits de données et ainsi constituer des cellules de mémoire pour l’ordinateur. Nous avons enfin été capables, avec une ALU et une série de bascules, d’additionner à la chaîne plusieurs nombres, en nous rappelant les résultats des additions intermédiaires.
Il existe bien d’autres éléments qui composent les ordinateurs et nous n’avons pas l’occasion de tous les explorer en détail. Dans la section qui suit, faisons un saut conceptuel et parlons de l’architecture générale des ordinateurs et de la manière dont les grands composants sont interconnectés pour permettre à un ordinateur de remplir les fonctions que nous lui connaissons.
Jeu pour aller plus loin
Dans le jeu en ligne « Nandgame » (https://nandgame.com), on construit petit à petit un ordinateur complet juste avec, à la base, des portes NON-ET. Elles ont la particularité (avec les portes NON-OU, d’ailleurs) de pouvoir simuler toutes les autres portes — y compris un inverseur.
- 1
On peut montrer l’équivalence de ce circuit et du précédent à l’aide des lois de De Morgan, qui ne sont volontairement pas abordées dans ce chapitre.
- 2
Il y a une différence conceptuelle fondamentale entre les verrous et les bascules : les verrous sont des composants dits asynchrones, dont l’état peut changer dès qu’une des entrées change, alors que les bascules sont des composants dits synchrones, qui ont une entrée appelée Horloge, et dont l’état ne changera qu’au moment où le signal d’horloge effectuera une transition (dans notre cas, passera de 0 à 1). Une discussion plus poussée de ces différences dépasse le cadre de ce cours.