12. TP Mémoire

Les circuits que nous avons vus jusqu’à maintenant s’appellent circuits combinatoires. Leur sortie est le seul résultat de leurs entrées. Une même entrée produit toujours la même sortie. Le circuit n’a pas de mémoire.

La famille de circuits que nous allons découvrir s’appelle circuit séquentiel. Ces circuits permettent de mémoriser un état.

12.1. Cellule de mémoire

Une cellule de mémoire élémentaire peut être créée avec une porte OU, ou la sortie est connectée avec une de ses entrées.

Circuit 1

  • Connectez la sortie de la porte OU via la porte OUI avec une de ses entrées

  • Montrez que vous avez une cellule de mémoire qui peut mémoriser une seule fois (fusible)

Circuit 2

  • Connectez la sortie de la porte OU via la porte ET avec une de ses entrées

  • Montrez que vous avez une cellule de mémoire qui peut mémoriser S (set) et qui peut être remis avec R (reset)

Circuit 3

  • Connectez la sortie de la porte OU via la porte ET avec une de ses entrées

  • Contrôlez la porte ET via une porte NON

  • Mettez l’entrée R en poussoir

Attention : Pour éviter des effets d’oscillation, vous devez appuyer sur le bouton pressoir plus longtemps que 200 ms ou diminuer fortement le temps de propagation dans la boucle.

12.2. Verrou SR

Un verrou SR (set-reset) permet de “verrouiller” (mémoriser) une information.

  • Jouez avec le verrou SR pour comprendre son fonctionnement

  • Recréez le verrou SR avec les composants NOT et OR

12.3. Bascule D

La bascule D (data) recopie la donnée sur l’entrée D vers sa sortie Q à chaque front montant de l’horloge clock.

  • ajoutez les 6 entrées/sorties à la bascule D,

  • lisez et comprenez les étiquettes,

  • observez et comprenez son comportement.

12.4. Registre 4 bits

Le registre est un circuit qui peut mémoriser multiples bits sur un coup d’horloge. À partir de 4 bascules D, nous pouvons construire un registre pour mémoriser 4 bits.

Ajoutez les connexions qui manquent :

  • Connectez chacun des 4 bits d’entrée vers une entrée D de la bascule.

  • Connectez chacun des 4 bits de sortie Q vers son bit de sortie correspondante.

  • Ajoutez une sortie 4 bits et un affichage 4 bits

  • Connectez les 4 entrées preset, clock et clear

12.5. Décodeur de touche

Quand on appuie sur une touche d’une calculatrice électronique, telle que la TI-30, la valeur de la touche est transformée en binaire 4 bits, enregistré dans un registre 4 bits, et affiché avec un affichage à 7 segments. Les étapes sont :

  • une touche 0 - 9 est appuyé

  • une conversion en binaire est faite

  • une entrée clock est produite

  • la valeur est mémorisée dans un registre

  • la valeur est décodée vers les signaux a-g

  • la valeur numérique est montrée sur l’affichage à 7 segments

Complétez le circuit pour traiter les touches 0 à 3

12.6. Décodeur pour 8 touches

Complétez le circuit pour traiter les touches 0 à 7

12.7. Compteur 4 bits

Une bascule D avec une rétroaction de la sortie inversée \(\bar{Q}\) vers son entrée \(D\) divise la fréquence de l’horloge par 2. Nous avons effectivement un compteur 1 bit.

  • Complétez le circuit pour construire un compteur 4 bits.

  • Le circuit final doit compter de 0000 vers 1111.

  • Ajoutez un affichage 4 bits

  • Connectez aussi les 4 signaux clear pour la remise du compteur

12.8. Compteur 8 bits

Le compteur 4 bits utilise un signal d’horloge et incrémenté à chaque coup d’horloge. Un décodeur à 7 segments transforme les 4 signaux qui représentent un nombre binaire de 0 à 16 vers les sorties correspondant pour activer les bonnes lampes de l’affichage à 7 segments.

  • Utilisez le signal de sortie V (overflow) pour faire fonctionner un deuxième compteur

  • Ceci donnera un compteur 8 bit, permettant de compter de 00 à FF (255)

  • Diminuez la période de l’horloge à 250 ms

12.9. Compteur avec remise

Pour créer une montre, un minuteur ou une alarme, nous devons compter à 60, 12 ou 24. L’entrée Reset peut être utilisée pour remettre le compteur. Une porte ET détecte le nombre 6 et remet le compter

  • Ajoutez un deuxième compteur

  • Configurez-le pour qu’il compte de 0 à 9

  • Ajoutez le décodeur et un affichage à 7 segments

  • Utilisez les deux compteurs pour faire un compteur qui affiche les nombres 00 à 59

  • Diminuez la période à 1 seconde

12.10. Rouler un dé

Un dé électronique utilise 7 LEDs pour afficher les points. Une horloge rapide, liée par une porte ET vers l’entrée d’un compteur compte rapidement de 0 à 5. À 6 le compteur est remis à 0 à l’aide d’une autre porte ET.

Voici la table de vérité pour les 7 LEDS.

dice

bin

a,g

b,f

c,e

d

1

000

0

0

0

1

2

001

1

0

0

0

3

010

1

0

0

1

4

011

1

0

1

0

5

100

1

0

1

1

6

101

1

1

1

0

Ajoutez les portes logiques appropriées pour implémenter ce dé électronique.
Par exemple, le signal pour lampe a,g correspond à

b0 or b1 or b2

Trouvez les autres circuits et construsez ce dé électronique.

12.11. Registre à décalage

Un registre de décalage propage une information d’un registre vers l’autre.

  • Placez tous les entrées P (preset) et C (clear)

  • Connectez la sortie Q avec l’entrée D suivante

  • Connectez tous les entrées clock

  • Testez le circuit à décalage

Si ça fonctionne, connectez la sortie du registre à décalage avec son entrée et connectez une entrée horloge à 1 second à l’entrée clock. Vous avez un registre à décalage circulaire.

12.12. RAM (mémoire vive)

La RAM (Random Access Memory) de 16 x 4 bits permet de stocker 16 mots de 4 bits. Les quatre bits de l’adresse Addr déterminent l’endroit où seront écrites les données D.

  • Addr détermine l’endroit des données

  • D signifie les données à écrire

  • Q représente les 4 bits des données lus

  • WE (Write Enable) permet d’écrire si 1

  • clock transmet les données sur D en mémoire

  • Clr (clear) remet toute la mémoire à zéro

À l’adresse 0001 (1) se trouvent déjà les données 1001. Ceci ressemble à des yeux. Ajoutez d’autres valeurs pour en faire un smiley.

12.13. RAM avec bits aléatoires

Le circuit suivant utilise un compteur pour créer les 16 adresses et écrire un bit aléatoire dans la RAM.

Complétez le circuit pour écrié 16 x 4 bits aléatoires dans la mémoire.

12.14. RAM avec binaire

Utilisez un compteur 4-bit pour remplir automatiquement la RAM avec les valeurs de 0 à 15. Voici le contenu à écrire dans la RAM.

0000
0001
0010
...
1111

Utilisez la sortie overflow (V) du compteur pour faire une mise à zéro de la RAM, à chaque fois quand elle est pleine. Dans l’image ci-dessous, la RAM est déjà remplie jusqu’à 1010 (10).

12.15. RAM avec image

La mémoire peut contenir des images. Chaque bit représente un pixel. Un des premiers jeux vidéo, Space Invaders, utilise des images monocolores pour présenter des envahisseurs extraterrestres.

invader

Remplissez la mémoire avec l’image d’un space invader 8x8 bits. L’image sera alors visible dans la partie visualisation du bloc RAM 16x8 bits.

12.16. RAM avec ASCII

La mémoire peut contenir du code ASCII. Voici les codes ASCII des 6 lettres du mot ON AIR, exprimées en binaire et en hexadécimal.

O = 0b01001111 0x4f
N = 0b01001110 0x4e
  = 0b00100000 0x20
A = 0b01000001 0x41
I = 0b01001001 0x49
R = 0b01010010 0x52

Le circuit ci-dessous contient le mot HELLO en mémoire RAM. Un compteur avec une horloge 1 Hz affiche le contenu de la mémoire en boucle vers un affichage à 16 segments.

Remplacez le contenu de la mémoire pour afficher le mot ON AIR.