Ajouter de la mémoire dans un circuit logique
Avec la porte Nand, on a créé des circuits pour faire des calculs sur des nombres, mais tous ces circuits font (presque) instantanément le calcul du résultat sur leurs fils de sortie en fonction du courant électrique sur leurs fils d'entrée.
Si on change les valeurs en entrée, les valeurs en sortie changent automatiquement. En conséquence, ces circuits ne pourront jamais avoir de mémoire.
Le data flip-flop
On a besoin d'une nouvelle porte de base, le data flip flop (appelé aussi bascule D) qui fait quelque chose de très simple : envoyer en sortie ce qu'il y avait en entrée au tour d'horloge précédent.
Cette porte décale donc juste son entrée de 1 unité dans le temps.
Testez-là ci-dessous en changeant les valeurs de l'entrée :
Créer un registre 1-bit avec un data flip flop
Un registre 1-bit permet de stocker un bit en mémoire.
Ce circuit a deux fils en entrée :
- si "load" vaut 1, alors la valeur "entrée" sera stockée en mémoire;
- si "load" vaut 0, la valeur précédente est conservée;
En sortie est affichée la valeur en mémoire.
Pour la fabriquer, il vous suffit de connecter la sortie du flipflop à son entrée, mais pas directement ! Il faut mettre une porte Mux qui va sélectionner entre:
- la sortie du flipflop (si load vaut 0)
- la nouvelle valeur en entrée à stocker (si load vaut 1)
Fabriquez et tester votre circuit ci-dessous (pour changer le nombre d'entrée et de sorties du mux, faites un clic droit dessus):
Qu'est-ce que de la "RAM" ?
RAM veut dire Random Access Memory, c'est à dire de la mémoire à laquelle on peut accéder de manière "aléatoire", c'est à dire aux positions qu'on veut et pas seulement dans l'ordre.
Cela signifie que les circuits de RAM auront toujours : * une entrée adresse qui va donner en binaire l'adresse du mot mémoire qu'on veut lire ou modifier * une entrée load pour savoir si on veut écrire ou seulement lire dans la mémoire * une entrée donnée avec la valeur qui sera écrite si load vaut 1 * et enfin une sortie qui donne la valeur lue en mémoire
Voici pour exemple une RAM avec seulement deux registres à 1-bit, qui contient :
- le circuit de registre 1-bit dupliqué deux fois
- un démultiplexeur qui permet d'envoyer la valeur de load uniquement sur le registre qui correspond à l'adresse
- un multiplexeur en sortie qui permet de renvoyer la valeur lue du registre qui correspond à l'adresse
Remarques :
- On a vu que dans les circuits de processeurs, les valeurs étaient stockées sur des blocs de plusieurs fils (4,8,16,32 ou 64 par exemple). On aura donc des registres qui stockent par exemple 4 bits, avec une entrée de donnée et une sortie aussi sur 4 bits. Cela permet de lire 4 bits de la mémoire d'un coup.
- S'il y a plus de 2 registres dans la RAM (et on espère !), l'adresse sera aussi sur plusieurs bits. Par exemple avec 3 fils pour l'adresse on peut avoir 8 adresses différentes qui vont de 000 à 111.
Un exemple de RAM
Voici un exemple de RAM 16 registres de 4 bits, donc 16x4 bits représentés au milieu en noir pour 0 et jaune pour 1.
Essayez de reproduire le dessin suivant en manipulant le circuit :
Quelle est la liste en base 10 des 16 nombres ainsi stockés en mémoire ?