Fonctionnement d'un ordinateur/Les mémoires DRAM synchrones

Les mémoires actuelles sont un plus complexes que les mémoires vues dans les chapitres précédents. Ce chapitre va vous expliquer dans les grandes lignes en quoi nos mémoires actuelles se démarquent des autres. On verra que les mémoires modernes ne sont que des améliorations des mémoires vues précédemment.

Les mémoires SDRAM modifier

Les mémoires asynchrones ont laissé la place aux mémoires SDRAM, qui sont synchronisées avec le bus par une horloge. L'utilisation d'une horloge a comme avantage des temps d'accès fixes : le processeur sait qu'un accès mémoire prendra un nombre déterminé de cycles d'horloge et peut faire ce qu'il veut dans son coin durant ce temps. Avec les mémoires asynchrones, le processeur ne pouvait pas prévoir quand la donnée serait disponible et ne faisait rien tant que la mémoire n'avait pas répondu : il exécutait ce qu'on appelle des wait states en attendant que la mémoire ait fini.

Le mode rafale modifier

Qui plus est, les SDRAM gèrent à la fois l'accès entrelacé et l'accès linéaire. Nous avions vu ces deux types d'accès dans le chapitre sur les mémoires évoluées, mais faisons un bref rappel. Le mode linéaire est le mode rafale normal : un compteur est incrémenté à chaque cycle et son contenu est additionné à l'adresse de départ. Le mode entrelacé utilise un ordre différent. Avec ce mode de rafale, le contrôleur mémoire effectue un XOR bit à bit entre un compteur (incrémenté à chaque accès) et l'adresse de départ pour calculer la prochaine adresse de la rafale.

Sur les SDRAM, les paramètres qui ont trait au mode rafale sont modifiables, programmables. Déjà, on peut configurer la mémoire pour effectuer au choix des accès sans rafale ou des accès en rafale. Ensuite, on peut décider s'il faut faire un accès en mode linéaire ou entrelacé. Il y a aussi la possibilité de configurer le nombre d'octets consécutifs à lire ou écrire en mode rafale. On peut ainsi accéder à 1, 2, 4, ou 8 octets en une seule fois, alors que les EDO ne permettaient que des accès à 4 octets consécutifs.

Les commandes SDRAM modifier

Le bus de commandes d'une SDRAM contient évidemment un signal d'horloge, pour cadencer la mémoire, mais pas que. En tout, 18 fils permettent d'envoyer des commandes à la mémoire, commandes qui vont effectuer une lecture, une écriture, ou autre chose dans le genre. Les commandes en question sont des demandes de lecture, d'écriture, de préchargement et autres. Elles sont codées par une valeur bien précise qui est envoyée sur les 18 fils du bus de commande. Ces commandes sont nommées READ, READA, WRITE, WRITEA, PRECHARGE, ACT, ...

Bit CS Bit RAS Bit CAS Bit WE Bits de sélection de banque (2 bits) Bit du bas d'adresse A10 Reste du bus d'adresse Nom de la commande : Description
1 X Absence de commandes.
0 1 1 1 X No Operation : Pas d'opération
0 1 1 0 X Burst Terminante : Arrêt d'un accès en rafale en cours.
0 1 0 1 Adresse de la banque 0 Adresse de la colonne READ : lire une donnée depuis la ligne active.
0 1 0 1 Adresse de la banque 1 Adresse de la colonne READA : lire une donnée depuis la ligne active, avec rafraichissement automatique de la ligne.
0 1 0 0 Adresse de la banque 0 Adresse de la colonne WRITE : écrire une donnée depuis la ligne active.
0 1 0 0 Adresse de la banque 1 Adresse de la colonne WRITEA : écrire une donnée depuis la ligne active, avec rafraichissement automatique de la ligne.
0 0 1 1 Adresse de la banque Adresse de la ligne ACT : charge une ligne dans le tampon de ligne.
0 0 1 0 Adresse de la banque 0 X PRECHARGE : précharge le tampon de ligne dans la banque voulue.
0 0 1 0 Adresse de la X 1 X PRECHARGE ALL : précharge le tampon de ligne dans toutes les banques.
0 0 0 1 X Auto refresh : Demande de rafraichissement, gérée par la SDRAM.
0 0 0 0 00 Nouveau contenu du registre de mode LOAD MODE REGISTER : configure le registre de mode.

Les commandes READ et WRITE ne peuvent se faire qu'une fois que la banque a été activée par une commande ACT. Une fois la banque activée par une commande ACT, il est possible d'envoyer plusieurs commandes READ ou WRITE successives. Ces lectures ou écritures accèderont à la même ligne, mais à des colonnes différentes. Le commandes ACT se font à partir de l'état de repos, l'état où toutes les banques sont préchargées. Par contre, les commandes MODE REGISTER SET et AUTO REFRESH ne peuvent se faire que si toutes les banques sont désactivées.

Le fonctionnement simplifié d'une SDRAM peut se résumer dans ce diagramme :

 
Fonctionnement simplifié d'une SDRAM.

Les délais mémoires modifier

Il faut un certain temps pour sélectionner une ligne ou une colonne, sans compter qu'une SDRAM doit gérer d'autres temps d'attente plus ou moins bien connus : ces temps d'attente sont appelés des délais mémoires. La façon de mesurer ces délais varie : sur les mémoires FPM et EDO, on les mesure en unités de temps (secondes, millisecondes, micro-secondes, etc.), tandis qu'on les mesure en cycles d'horloge sur les mémoires SDRAM.

Timing Description
tRAS Temps mis pour sélectionner une ligne.
tCAS Temps mis pour sélectionner une colonne.
tRP Temps mis pour réinitialiser le tampon de ligne et décharger la ligne.
tRCD Temps entre la fin de la sélection d'une ligne, et le moment où l'on peut commencer à sélectionner la colonne.
tWTR Temps entre une lecture et une écriture consécutives.
tCAS-to-CAS Temps minimum entre deux sélections de deux colonnes différentes.

Les délais/timings mémoire ne sont pas les mêmes suivant la barrette de mémoire que vous achetez. Certaines mémoires sont ainsi conçues pour avoir des timings assez bas et sont donc plus rapides, et surtout : beaucoup plus chères que les autres. Le gain en performances dépend beaucoup du processeur utilisé et est assez minime comparé au prix de ces barrettes. Les circuits de notre ordinateur chargés de communiquer avec la mémoire (ceux placés soit sur la carte mère, soit dans le processeur), doivent connaitre ces timings et ne pas se tromper : sans ça, l’ordinateur ne fonctionne pas.

Le registre de mode modifier

Les mémoires SDRAM permettent de configurer divers paramètres de la mémoire, comme la longueur du mode rafale. Le contrôleur mémoire interne de la SDRAM mémorise ces informations dans un registre de 10 bits, le registre de mode. Il contient un bit qui permet de préciser s'il faut effectuer des accès normaux ou des accès en rafale. Il mémorise aussi le nombre d'octets consécutifs à lire ou écrire. Voici à quoi correspondent les 10 bits de ce registre :

Signification des bits du registre de mode des SDRAM
Bit n°9 Type d'accès : en rafale ou normal
Bit n°8 et 7 Doivent valoir 00, sont réservés pour une utilisation ultérieur dans de futurs standards.
Bit n°6, 5, et 4 Latence CAS
Bit n°3 Type de rafale : linéaire ou entrelacée
Bit n°2, 3, et 0 Longueur de la rafale : indique le nombre d'octets à lire/écrire lors d'une rafale.

Les SDRAM standards modifier

Les mémoires SDRAM sont standardisées par un organisme international, le JEDEC, et ont été déclinées en versions de performances différentes. Les voici :

Nom standard Fréquence Bande passante
PC66 66 mhz 528 Mio/s
PC66 100 mhz 800 Mio/s
PC66 133 mhz 1064 Mio/s
PC66 150 mhz 1200 Mio/s

Les mémoires DDR modifier

Les mémoires SDRAM récentes sont des mémoires de type dual data rate, voire quad data rate (voir le chapitre précédent pour ceux qui ont oublié) : elles portent ainsi le nom de mémoires DDR. Plus précisément, le plan mémoire des DDR est deux fois plus large que le bus mémoire, même si les deux sont commandés par un même signal d'horloge : là où les transferts avec le plan mémoire ont lieu sur front montant, les transferts de données sur le bus ont lieu sur les fronts montants et descendants de l'horloge. Il y a donc deux transferts de données sur le bus pour chaque cycle d'horloge, ce qui permet de doubler le débit sans toucher à la fréquence. D'autres différences mineures existent entre les SDRAM et les mémoires DDR. Par exemple, la tension d'alimentation des mémoires DDR est plus faible que pour les SDRAM.

Les commandes des mémoires DDR modifier

Les commandes des mémoires DDR sont globalement les mêmes que celles des mémoires SDRAM, vues plus haut. Les modifications entre SDRAM, DDR1, DDR2, DDR3, DDR4, et DDR5 sont assez mineures. Les seules différences sont l'addition de bits pour la transmission des adresses, des bits en plus pour la sélection des banques, un registre de mode un peu plus grand (13 bits sur la DDR 2, au lieu de 10 sur les SDRAM). En clair, une simple augmentation quantitative.

Avant la DDR4, les modifications des commandes sont mineures. La DDR2 supprime la commande Burst Terminate, la DDR3 et la DDR4 utilisent le bit A12 pour préciser s'il faut faire une rafale complète, ou une rafale de moitié moins de données. Mais avec la DDR4, les choses changent, notamment au niveau de la commande ACT. Avec l'augmentation de la capacité des barrettes mémoires, la taille des adresses est devenue trop importante. Il a donc fallu rajouter des bits d'adresses. Mais pour éviter d'avoir à rajouter des broches sur des barrettes déjà bien fournies, les concepteurs du standard DDR4 ont décidé de ruser. Lors d'une commande ACT, les bits RAS, CAS et WE sont utilisés comme bits d'adresse, alors qu'ils ont leur signification normale pour les autres commandes. Pour éviter toute confusion, un nouveau bit ACT est ajouté pour indiquer la présence d'une commande ACT : il est à 1 pour une commande ACT, 0 pour les autres commandes.

Commandes d'une mémoire DDR4, seule la commande colorée change par rapport aux SDRAM
Bit CS Bit ACT Bit RAS Bit CAS Bit WE Bits de sélection de banque (2 bits) Bit du bas d'adresse A10 Reste du bus d'adresse Nom de la commande : Description
1 X Absence de commandes.
0 0 1 1 1 X No Operation : Pas d'opération
0 0 1 1 0 X Burst Terminante : Arrêt d'un accès en rafale en cours.
0 0 1 0 1 Adresse de la banque 0 Adresse de la colonne READ : lire une donnée depuis la ligne active.
0 0 1 0 1 Adresse de la banque 1 Adresse de la colonne READA : lire une donnée depuis la ligne active, avec rafraichissement automatique de la ligne.
0 0 1 0 0 Adresse de la banque 0 Adresse de la colonne WRITE : écrire une donnée depuis la ligne active.
0 0 1 0 0 Adresse de la banque 1 Adresse de la colonne WRITEA : écrire une donnée depuis la ligne active, avec rafraichissement automatique de la ligne.
0 1 Adresse de la ligne (bits de poids forts) Adresse de la banque Adresse de la ligne (bits de poids faible) ACT : charge une ligne dans le tampon de ligne.
0 0 0 1 0 Adresse de la banque 0 X PRECHARGE : précharge le tampon de ligne dans la banque voulue.
0 0 0 1 0 Adresse de la X 1 X PRECHARGE ALL : précharge le tampon de ligne' dans toutes les banques.
0 0 0 0 1 X Auto refresh : Demande de rafraichissement, gérée par la SDRAM.
0 0 0 0 0 00 Nouveau contenu du registre de mode LOAD MODE REGISTER : configure le registre de mode.

Les types de mémoires DDR modifier

Les mémoires DDR sont standardisées par un organisme international, le JEDEC, et ont été déclinées en versions DDR1, DDR2, DDR3, et DDR4. Il existe enfin d'autres types de mémoires DDR, non-standardisées par le JEDEC : les mémoires GDDR, pour graphics double data rate, utilisées presque exclusivement sur les cartes graphiques. Il en existe plusieurs types pendant que j'écris ce tutoriel : GDDR, GDDR2, GDDR3, GDDR4, et GDDR5. Mais attention, il y a des différences avec les DDR normales : les GDDR sont des mémoires multiports et elles ont une fréquence plus élevée que les DDR normales, avec des temps d'accès plus élevés (sauf pour le tCAS).

Il existe quatre types de mémoires DDR1 officialisés par le JEDEC.

Nom standard Nom des modules Fréquence du bus Débit Tension d'alimentation
DDR 200 PC-1600 100 Mhz 1,6 gibioctets seconde 2,5 Volts
DDR 266 PC-2100 133 Mhz 2,1 gibioctets seconde 2,5 Volts
DDR 333 PC-2700 166 Mhz 2,7 gibioctets seconde 2,5 Volts
DDR 400 PC-3200 200 Mhz 3,2 gibioctets seconde 2,6 Volts

Avec les mémoires DDR2, 5 types de mémoires sont officialisées par le JEDEC. Diverses améliorations ont été apportées sur les mémoires DDR2 : la tension d'alimentation est notamment passée de 2,5/2,6 Volts à 1,8 Volts.

Nom standard Nom des modules Fréquence du bus Débit
DDR2 400 PC2-3200 100 Mhz 3,2 gibioctets par seconde
DDR2 533 PC2-4200 133 Mhz 4,2 gibioctets par seconde
DDR2 667 PC2-5300 166 Mhz 5,3 gibioctets par seconde
DDR2 800 PC2-6400 200 Mhz 6,4 gibioctets par seconde
DDR2 1066 PC2-8500 266 Mhz 8,5 gibioctets par seconde

Avec les mémoires DDR3, 6 types de mémoires sont officialisées par le JEDEC. Diverses améliorations ont été apportées sur les mémoires DDR3 : la tension d'alimentation est notamment passée à 1,5 Volts.

Nom standard Nom des modules Fréquence du bus Débit
DDR3 800 PC3-6400 100 Mhz 6,4 gibioctets par seconde
DDR3 1066 PC3-8500 133 Mhz 8,5 gibioctets par seconde
DDR3 1333 PC3-10600 166 Mhz 10,6 gibioctets par seconde
DDR3 1600 PC3-12800 200 Mhz 12,8 gibioctets par seconde
DDR3 1866 PC3-14900 233 Mhz 14,9 gibioctets par seconde
DDR3 2133 PC3-17000 266 Mhz 17 gibioctets par seconde