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 SDRAMModifier
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 rafaleModifier
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 SDRAMModifier
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 :
Les délais mémoiresModifier
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 modeModifier
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 :
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 standardsModifier
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 DDRModifier
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 DDRModifier
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.
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 DDRModifier
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 |