Aller au contenu

Fonctionnement d'un ordinateur/L'interface d'une mémoire électronique

Un livre de Wikilivres.

Une mémoire communique avec d'autres composants : le processeur, les entrées-sorties, et peut-être d'autres. Pour cela, la mémoire est reliée à un ou plusieurs bus, des ensembles de fils qui permettent de la connecter aux autres composants. Suivant la mémoire et sa place dans la hiérarchie mémoire, le bus sera plus ou moins spécialisé. Par exemple, la mémoire principale est reliée au processeur et aux entrées-sorties via le bus système. Pour les autres mémoires, la logique est la même, si ce n'est que la mémoire est reliée à d'autres composants électroniques : une unité de calcul pour les registres, par exemple.

Dans tous les cas, le bus connecté à la mémoire est composé de deux ensembles de fils : le bus de données et le bus de commande. Le bus de données permet les transferts de données avec la mémoire, alors que le bus de commande prend en charge tout le reste. Nous allons commencer par voir le bus de données avant le bus de commandes, vu que son abord est plus simple. Le bus de commande est un ensemble d'entrées, là où ce n'est pas forcément le cas pour le bus de données. Le bus de données est soit une sortie (sur les mémoires ROM), soit une entrée-sortie (sur les mémoires RAM), les exceptions étant rares.

Le bus de commande

[modifier | modifier le wikicode]
Bus d'une mémoire RAM.

Le bus de commande transmet des commandes mémoire, des ordres auxquels la mémoire va devoir réagir pour faire ce qu'on lui demande. Dans les grandes lignes, chaque commande contient des bits qui ont une fonction fixée lors de la conception de la mémoire. Et les bits utilisés sont rarement les mêmes d'une mémoire à l'autre. Dans ce qui suit, nous verrons quelques bits qui reviennent régulièrement dans les bus de commande les plus communs, mais sachez qu'ils sont en réalité facultatifs. Le bus de commande dépend énormément du bus utilisé ou de la mémoire. Certains bus de commande se contentent d'un seul bit, d'autres en ont une dizaine, et d'autres en ont une petite centaine.

Comme on le verra plus bas, les mémoires adressables ont généralement des broches dédiées aux adresses, qui sont connectées au bus d'adresse. Mais les autres mémoires s'en passent et il arrive que certaines mémoires adressables arrivent à s'en passer. Pour résumer, le bus d'adresse est facultatif, seules certaines mémoires en ayant réellement un. On peut d'ailleurs voir le bus d'adresse comme une sous-partie du bus de commandes.

Les bits Chip Select et Output Enable

[modifier | modifier le wikicode]

La majorité des mémoires possède deux broches/bits qui servent à l'activer ou la désactiver : le bit CS (Chip Select). Lorsque ce bit est à 1, toutes les autres broches sont désactivées, qu'elles appartiennent au bus de données ou de commande. On verra dans quelques chapitres l'utilité de ce bit. Pour le moment, on peut dire qu'il permet d'éteindre une mémoire (temporairement) inutilisée. L'économie d'énergie qui en découle est souvent intéressante.

Tout aussi fréquent, le bit OE (Output Enable) désactive les broches du bus de données, laissant cependant le bus de commande fonctionner. Ce bit déconnecte la mémoire du bus de données, stoppant les transferts. Il a une utilité similaire au bit CE, avec cependant quelques différences. Ce bit ne va pas éteindre la mémoire, mais juste stopper les transmissions. L'économie d'énergie est donc plus faible. Cependant, déconnecter la mémoire est beaucoup plus rapide que de l'éteindre. On verra dans quelques chapitres l'utilité de ce bit. Grossièrement, il permet de déconnecter une mémoire quand un composant prioritaire souhaite communiquer sur le bus, en même temps que la mémoire.

L'entrée d'horloge ou de synchronisation

[modifier | modifier le wikicode]

Certaines mémoires assez anciennes n'étaient pas synchronisées par un signal d'horloge, mais par d'autres procédés : on les appelle des mémoires asynchrones. Les bus de commande de ces mémoires devaient transmettre les informations de synchronisation, sous la forme de bits de synchronisation.

D'autres mémoires sont cadencées par un signal d'horloge : elles portent le nom de mémoires synchrones. Ces mémoires ont un bus de commande beaucoup plus simple, qui n'a qu'une seule broche de synchronisation. Celle-ci reçoit le signal d'horloge, d'où le nom d'entrée d'horloge qui lui est donné.

Les bits de lecture/écriture

[modifier | modifier le wikicode]

Le bus de commande doit préciser à la mémoire s'il faut effectuer une lecture ou une écriture. Pour cela, le bus envoie sur le bus de commande un bit appelé bit R/W, qui indique s'il faut faire une lecture ou une écriture. Il est souvent admis par convention que R/W à 1 correspond à une lecture, tandis que R/W vaut 0 pour les écritures. Ce bit de commande est évidemment inutile sur les mémoires ROM, vu qu'elles ne peuvent effectuer que des lectures. Notons que les mémoires qui ont un bit R/W ont souvent un bit OE, bien que ce ne soit pas systématique. En effet, une mémoire n'a pas toujours une lecture ou écriture à effectuer et il faut préciser à la mémoire qu'elle n'a rien à faire, ce que le bit OE peut faire.

Bit OE Bit R/W Opération demandée à la mémoire
0 0 NOP (pas d'opération)
0 1 NOP (pas d'opération)
1 0 Écriture
1 1 Lecture

Une autre solution est d'utiliser un bit pour indiquer qu'on veut faire une lecture, et un autre bit pour indiquer qu'on veut démarrer une écriture. On pourrait croire que c'est un gâchis, mais c'est en réalité assez pertinent. L'avantage est que la combinaison des deux bits permet de coder quatre valeurs : 00, 01, 10 et 11. En tout, on a donc une valeur pour la lecture, une pour l'écriture, et deux autres valeurs. La logique veut qu'une de ces valeur, le plus souvent 00, indique l'absence de lecture et d'écriture. Cela permet de fusionner le bit R/W avec le bit OE. Au lieu de mettre un bit OE à 0 quand la mémoire n'est pas utilisée, on a juste à mettre le bit de lecture et le bit d'écriture à 0 pour indiquer à la mémoire qu'elle n'a rien à faire. La valeur restante peut être utilisée pour autre chose, ce qui est utile sur les mémoires qui gèrent d'autres opérations que la lecture et l'écriture. Par exemple, les mémoires EPROM et EEPROM gèrent aussi l'effacement et il faut pouvoir le préciser.

Bit de lecture Bit d'écriture Opération demandée à la mémoire
0 0 NOP (pas d'opération)
0 1 Ecriture
1 0 Lecture
1 1 Interdit, ou alors code pour une autre opération (reprogrammation, effacement, NOP sur certaines mémoires)

Le bus d'adresse (facultatif)

[modifier | modifier le wikicode]

Toutes les mémoires adressables sont naturellement connectées au bus. La transmission de l'adresse à la mémoire peut se faire de plusieurs manières. La plus simple utilise un bus dédié pour envoyer les adresses à la mémoire, séparé du bus de données et du bus de commande. Le bus en question est appelé le bus d'adresse.

Entrées et sorties d'un bus normal.

Mais d'autres mémoires font autrement et fusionnent le bus d'adresse et de données. Le bus de commande existe toujours, il est secondé par un autre bus qui sert à transmettre données et adresses, mais pas en même temps. De tels bus sont appelés soit des bus multiplexés, soit des bus à transmission par paquet. Les deux méthodes sont légèrement différentes, comme on le verra dans ce qui suit.

Les bus d'adresse multiplexés

[modifier | modifier le wikicode]

Avec un bus d'adresse dédié, il existe quelques astuces pour économiser des fils. La première astuce est d'envoyer l'adresse en plusieurs fois. Sur beaucoup de mémoires, l'adresse est envoyée en deux fois. Les bits de poids fort sont envoyés avant les bits de poids faible. On peut ainsi envoyer une adresse de 32 bits sur un bus d'adresse de 16 bits, par exemple. Le bus d'adresse contient alors environ moitié moins de fils que la normale. Cette technique est appelée un bus d'adresse multiplexé.

Elle est surtout utilisée sur les mémoires de grande capacité, pour lesquelles les adresses sont très grandes. Songez qu'il faut 32 fils d'adresse pour une mémoire de 4 gibioctet, ce qui est déjà assez peu pour la mémoire principale d'un ordinateur personnel. Et câbler 32 fils est déjà un sacré défi en soi, là où 16 bits d'adresse est déjà largement plus supportable. Aussi, la mémoire RAM d'un ordinateur utilise systématiquement un envoi de l'adresse en deux fois. Les SRAM étant de petite capacité, elles n'utilisent que rarement un bus d'adresse multiplexé. Inversement, les DRAM utilisent souvent un bus d'adresse multiplexé du fait de leur grande capacité.

Relation entre le type de mémoire et l'envoi des adresses en une ou deux fois
Type de la mémoire Bus d'adresse normal ou multiplexé
ROM/PROM/EPROM/EEPROM Bus d'adresse normal (envoi de l'adresse en une seule fois)
SRAM Bus d'adresse normal
DRAM Bus d'adresse multiplexé (envoi de l'adresse en deux fois)

Les bus multiplexés

[modifier | modifier le wikicode]

Une autre astuce est celle des bus multiplexés, à ne pas confondre avec les bus précédents où seule l'adresse est multiplexée. Un bus multiplexé sert alternativement de bus de donnée ou d'adresse. Ces bus rajoutent un bit sur le bus de commande, qui précise si le contenu du bus est une adresse ou une donnée. Ce bit Adresse Line Enable, aussi appelé bit ALE, vaut 1 quand une adresse transite sur le bus, et 0 si le bus contient une donnée (ou l'inverse !).

Bus multiplexé avec bit ALE.

Un bus multiplexé est plus lent pour les écritures : l'adresse et la donnée à écrire ne peuvent pas être envoyées en même temps. Par contre, les lectures ne posent pas de problèmes, vu que l'envoi de l'adresse et la lecture proprement dite ne sont pas simultanées. Heureusement, les lectures en mémoire sont bien plus courantes que les écritures, ce qui fait que la perte de performance due à l'utilisation d'un bus multiplexé est souvent supportable.

Un autre problème des bus multiplexé est qu'ils ont a peu-près autant de bits pour coder l'adresse que pour transporter les données. Par exemple, un bus multiplexé de 8 bits transmettra des adresses de 8 bits, mais aussi des données de 8 bits. Cela entraine un couplage entre la taille des données et la taille de la capacité de la mémoire. Cela peut être compensé avec un bus d'adresse multiplexé, les deux techniques pouvant être combinées sans problèmes. Dans ce cas, les transferts avec la mémoire se font en plusieurs fois : l'adresse est transmise en plusieurs fois, la donnée récupérée/écrite ensuite.

Les bus à commutation de paquet

[modifier | modifier le wikicode]

Des mémoires DRAM assez rares ont exploré un bus mémoire particulier : avoir un bus peu large mais de haute fréquence, sur lequel on envoie les commandes/données en plusieurs fois. Elles sont regroupées sous le nom de mémoires à commutation par paquets. Elles utilisent des bus spéciaux, où les commandes/adresses/données sont transmises par paquets, par trames, en plusieurs fois. Le processeur envoie des paquets de commandes, les mémoires répondent avec des paquets de données ou des accusés de réception. Toutes les barrettes de mémoire doivent vérifier toutes les transmissions et déterminer si elles sont concernées en analysant l'adresse transmise dans la trame. En théorie, ce qu'on a dit sur le codage des trames dans le chapitre sur le bus devrait s'appliquer à de telles mémoires. En pratique, les protocoles de transmission sur le bus mémoire sont simplifiés, pour gérer le fonctionnement à haute fréquence.

Les mémoires à commutation par paquets sont peu nombreuses. Les plus connues sont les mémoires conçues par la société Rambus, à savoir la RDRAM (Rambus DRAM) et ses deux successeurs XDR RAM et XDR RAM 2. La Synchronous-link DRAM (SLDRAM) est un format concurrent conçu par un consortium de plusieurs concepteurs de mémoire.

Un premier exemple est celui des mémoires RDRAM, où le bus permettait de transmettre soit des commandes (adresse inclue), soit des données, avec un multiplexage total. Le processeur envoie un paquet contenant commandes et adresse à la mémoire, qui répond avec un paquet d'acquittement. Lors d'une lecture, le paquet d'acquittement contient la donnée lue. Lors d'une écriture, le paquet d'acquittement est réduit au strict minimum. Le bus de commandes est réduit au strict minimum, à savoir l'horloge et quelques bits absolument essentiels, les bits RW est transmis dans un paquet et n'ont pas de ligne dédiée, pareil pour le bit OE.

Pour donner un autre exemple, parlons rapidement des mémoires SLDRAM. Elles utilisaient un bus de commande de 11 bits, qui était utilisé pour transmettre des commandes de 40 bits, transmises en quatre cycles d'horloge consécutifs. Le bus de données était de 18 bits, mais les transferts de donnée se faisaient par paquets de 4 à 8 octets (32-65 bits). Pour résumer, données et commandes sont chacunes transmises en plusieurs cycles consécutifs, sur un bus de commande/données plus court que les données/commandes elle-mêmes.

Le bus de données et les mémoires multiports

[modifier | modifier le wikicode]

Le bus de données transmet un nombre fixe de bits. Dans la plupart des cas, le bus de données peut transmettre plusieurs bits à chaque transmission (à chaque cycle d'horloge). Un bus qui permet cela est appelé un bus parallèle. Les bus mémoire modernes sont assez larges : 16, 32 ou 64 bits, parfois plus ! Les PC modernes ont des bus mémoire de 128 ou 256 bits avec les technologies dual/quad channel !

Un bus mémoire parallèle transmet un mot mémoire, à savoir un paquet de bits transmis en même temps sur le bus de données. Un mot mémoire est généralement composé de plusieurs octets consécutifs dans la RAM. Il correspond souvent à une case mémoire, mais ce n'est pas toujours le cas. Il arrive qu'une case mémoire soit transmise en plusieurs fois sur le bus mémoire. Par exemple, il est possible d'avoir un mot mémoire de 64 bits, pour une case mémoire de 128 bits : la case mémoire est envoyée en deux cycles d'horloge sur le bus mémoire. C'est ce principe qui est utilisé sur les mémoires DDR, qu'on abordera dans quelques chapitres. Pour le moment, nous allons considérer qu'un mot mémoire a la même taille qu'une case mémoire.

Quelques mémoires sont cependant connectées à un bus qui ne peut transmettre qu'un seul bit à la fois. Un tel bus est appelé un bus série. Les mémoires avec un bus série ne sont pas forcément adressables bit par bit. Elles permettent de lire ou écrire par octets complets, mais ceux-ci sont transmis bits par bits sur le bus de données. La conversion entre octet et flux de bits sur le bus est réalisée par un simple registre à décalage. On pourrait croire que de telles mémoires séries sont rares, mais ce n'est pas le cas : les mémoires Flash, très utilisées dans les clés USB ou les disques durs SSD sont des mémoires séries.

Mémoire série et parallèle

Le sens de transmission sur le bus

[modifier | modifier le wikicode]

Le bus de données est un bus bidirectionnel, sauf pour les mask ROM qui ne gèrent que la lecture, qui peuvent se contenter d'un bus unidirectionnel. Sur la plupart des mémoires, le bus de données est bidirectionnel et sert aussi bien pour les lectures que pour les écritures. Les mémoires de ce type sont appelées des mémoire simple port.

Mémoire simple-port

Sur la majorité des mémoires SRAM, on trouve deux bus de données : un dédié aux lectures et un autre pour les écritures. Le bus de commande est alors assez compliqué, dans le sens où il y a deux bus d'adresses : un qui commande l'entrée d'écriture et un pour la sortie de lecture. Le bus d'adresse est donc dupliqué et d'autres bits du bus de commande le sont aussi, mais les signaux d'horloge et le bit CS ne sont pas dupliqués. En théorie, il n'y a pas besoin de bit R/W, qui est remplacé par deux bits : un qui indique qu'on veut faire une écriture sur le bus dédié, un autre pour indiquer qu'on veut faire une lecture sur l'autre bus. Les mémoires de ce type sont appelées des mémoire double port lecture-écriture.

L’avantage d'utiliser un bus de lecture séparé du bus d'écriture est que cela permet d'effectuer une lecture en même temps qu'une écriture. Cependant, cet avantage signifie que la conception interne de la mémoire est naturellement plus compliquée. Par exemple, la mémoire doit gérer le cas où la donnée lue est identique à celle écrite en même temps. L'augmentation du nombre de broches est aussi un désavantage.

Mémoire double port (lecture et écriture séparées)

En général, les mémoires ROM et DRAM sont de des mémoires simple port, alors que les mémoires SRAM sont double port, les exceptions étant rares. C'est assez intuitif pour les mémoires ROM : elles sont utilisées en lecture uniquement, avec des reprogrammations éventuelles assez rares. Pas besoin d'ajouter un second bus pour des reprogrammation rares, ce qui aurait un cout en termes de broches, de packaging, etc. Pour les DRAM, la raison est tout autre, et tient au fait que le plan mémoire des DRAM est naturellement siomple port, mais cela deviendra plus clair dans le chapitre sur les cellules mémoire. Les SRAM sont généralement double port pour les mêmes raisons : le plan mémoire est naturellement double port.

Les mémoires multiport

[modifier | modifier le wikicode]

Le cas précédent, avec deux bus séparés, est un cas particulier de mémoire multiport. Celles-ci sont reliées non pas à un, mais à plusieurs bus de données. Évidemment, le bus de commande d'une telle mémoire est adapté à la présence de plusieurs bus de données. La plupart des bits du bus de commande sont dupliqués, avec un bit par bus de données. c'est le cas pour les bits R/W, les bits d'adresse, le bit OE, etc. Par contre, d'autres entrées du bus de commande ne sont pas dupliquées : c'est le cas du bit CS, de l'entrée d'horloge, etc. Les entrées de commandes associés à chaque bus de données, ainsi que les broches du bus de données, sont regroupées dans ce qu'on appelle un port.

Mémoire multiport, où chaque port est bidirectionnel.

Dans l'exemple de la section précédente, on a un port pour les lectures et un autre pour les écritures. Chaque port est donc spécialisé soit dans les lectures, soit dans les écritures. D'autres mémoires suivent ce principe et ont deux/trois ports de lecture et un d'écriture, d'autres trois ports de lecture et deux d'écriture, bref : les combinaisons possibles sont légion. Mais d'autres mémoires ont des ports bidirectionnels, capables d'effectuer soit une lecture, soit une écriture. On peut imaginer une mémoire avec 5 ports, chacun faisant lecture et écriture.

Les mémoires multiport permettent de transférer plusieurs données à la fois, une par port. Le débit est sont donc supérieur à celui des mémoires mono-port. De plus, chaque port peut être relié à des composants différents, ce qui permet de partager une mémoire entre plusieurs composants.

Les circuits de l'interface mémoire

[modifier | modifier le wikicode]

Une mémoire RAM a donc une interface assez précise, notamment pour le bus de commande. L'interface la plus simple regroupe un bus de données, un bus d'adresse, un bit R/W, deux bits Chip Select et Output Enable, une entrée d'horloge. A l'intérieur de la mémoire, il existe un cœur qui contient les cases mémoire et un décodeur d'adresse connecté au bus d'adresse. Entre ce cœur et le bus mémoire, se trouve un circuit d’interfaçage mémoire, qui est commandé par une logique de contrôle, elle-même commandée par les bits RW, Chip Select et Output Enable. Et nous allons voir ce circuit d’interfaçage dans ce qui suit.

Il faut préciser que ce circuit d’interfaçage est situé dans la mémoire RAM/ROM, pas en-dehors. Il faut en effet distinguer l'interface mémoire, interne aux puces de RAM/ROM, de la glue logic qui connecte la mémoire RAM/ROM au bus mémoire proprement dit. La glue logic du bus mémoire est située en-dehors des puces de RAM/ROM, elle est composée de circuits distincts, qu'on verra au chapitre suivant, qui porte justement sur le bus mémoire. Ici, nous allons voir tout ce qui est relié directement aux broches de la puce mémoire, pas autre chose.

Organisation interne d'une mémoire adressable.

L’interfaçage avec le bus de données : rappels

[modifier | modifier le wikicode]
Tampons 3 états.

Expliquer Le circuit d’interfaçage n'est pas compliqué, si on se rappelle ce qu'on a vu dans le chapitre sur les bus électroniques. Pour interfacer un composant avec un bus, la solution la plus utilisée est d'utiliser des tampons trois états. Pour rappel, un tampon trois-états peut être vu comme une porte OUI modifiée, qui peut déconnecter sa sortie de son entrée. Suivant ce qui est mis sur l'entrée de commande, la sortie est soit déconnectée de l'entrée, soit égale à l'entrée.

Commande Entrée Sortie
0 0 Haute impédance/Déconnexion
0 1 Haute impédance/Déconnexion
1 0 0
1 1 1
Tampon trois-états.

L'intérêt d'utiliser des tampons trois-états est que cela permet de déconnecter la mémoire du bus mémoire si besoin, ce qui gère nativement le bit Output Enable. Prenons par exemple une mémoire mask ROM, pour laquelle seule la lecture est possible, pas l'écriture ni la re-programmation. Sur une ROM, le bus de commande se résume à une entrée d'horloge et le bit Output Enable, il n'y a pas de bit R/W. Une mémoire ROM utilise donc un tampon trois-état par bit du bus de données , qui est commandé par le bit Output Enable. Si Output Enable est à 0, le tampon trois-état est ouvert et la ROM est déconnectée du bus mémoire, sa sortie est désactivée. Si Output Enable est à 1, le tampon trois-état se ferme et la mémoire ROM est connectée sur le bus mémoire, sa sortie est activée.

Bus en écriture seule.

L'interface d'une mémoire SRAM ou DRAM utilise quant à elle deux tampons trois-état : un pour les lectures, un autre pour les écritures. La raison est que les tampons-trois état sont des composants unidirectionnels. Ce ne sont pas des interrupteurs qu'on ouvre et ferme, qui laissent passer le courant dans les deux sens. Les tampons trois états sont commandés par le bit Output Enable, mais aussi par le bit R/W (Read/Write) qui décide du sens de transfert. Pour faire la traduction entre ces deux bits et les bits à placer sur l'entrée de commande des circuits trois états, on utilise un petit circuit combinatoire assez simple. Je laisse la conception de ce petit circuit en exercice au lecteur, le circuti est vraiment très simple.

Bus en lecture et écriture.

Les interfaces Dual et Quad data rate

[modifier | modifier le wikicode]

L'interface avec le bus mémoire est une source d'optimisations assez importantes. En effet, le bus mémoire doit idéalement être très rapide, ce qui demande de jouer sur deux caractéristiques : sa fréquence et sa largeur. Pour rappel, la performance d'un bus peut se résumer à son débit binaire, à savoir la quantité d'octets qu'il peut transmettre par seconde. Et celle-ci est le produit entre sa fréquence et la largeur du bus (le nombre de bits transmis en une fois sur le bus de données). Il se trouve que la largeur du bus est relativement contrainte, le nombre de fils qu'on peut câbler sur la carte mère est limité, de même que le nombre de broches sur les puces mémoire. A l'inverse, un bus mémoire peut fonctionner à faute fréquence sans trop de problèmes.

Par contre, les puces mémoires ont le compromis inverse. Les mémoires modernes ont un temps d'accès assez élevé, qui stagne depuis des décennies. En conséquence, la fréquence réelle des mémoires stagne relativement dans le temps, ou tout du moins elle augmente très lentement au cours des décennies. A l'opposé, Les mémoires modernes sont capables d'avoir un débit binaire important : il suffit d'utiliser des cases mémoire très larges, ce qui permet de lire/écrire plein d'octets à la fois. Rein de compliqué à implémenter.

Toujours est-il que le bus mémoire et les mémoires RAM ont des caractéristiques opposées en termes de performances. Pour profiter du débit binaire élevé des RAM, il faudrait augmenter la largeur du bus, mais cela a trop de désavantages : il faudrait câbler beaucoup trop de fils. De même, impossible d'augmenter la fréquence du bus, car la fréquence de la mémoire ne suivrait pas. Mais il existe une solution alternative, qui est une sorte de mélange des deux techniques. Cette technique s'appelle le préchargement, prefetching en anglais.

Les mémoires sans préchargement sont appelées des mémoires SDR (Single Data Rate). Avec elles, le plan mémoire et le bus vont à la même fréquence et ils ont la même largeur (le nombre de bits transmit en une fois). Par exemple, si le bus mémoire a une largeur de 64 bits et une fréquence de 100 MHz, alors le plan mémoire fait de même. Toute augmentation de la fréquence et/ou de la largeur du bus se répercute sur la mémoire et réciproquement. La conséquence est que la fréquence et la largeur du bus mémoire sont réglés sur le plus petit dénominateur commun avec la RAM : fréquence basse pour rester compatible avec la RAM, largeur restreinte pour respecter les contraintes du bus.

Mémoire SDR.

Le préchargement augmente la largeur du plan mémoire sans en augmenter la fréquence, mais on fait l'inverse pour le bus. En faisant cela, le plan mémoire a une fréquence inférieure à celle du bus, mais a une largeur plus importante qui compense exactement la différence de fréquence. Si le plan mémoire a une largeur de N fois celle du bus, le bus a une fréquence N plus élevée pour compenser.

Sur les mémoires DDR (Double Data Rate), le plan mémoire est deux fois plus large que le bus, mais a une fréquence deux fois plus faible. Les données lues ou écrites dans le plan mémoire sont envoyées en deux fois sur le bus, ce qui est compensé par le fait qu'il soit deux fois plus rapide. Ceci dit, il faut découper un mot mémoire de 128 bits en deux blocs de 64, à envoyer sur le bus dans le bon ordre. Cela se fait dans l'interface avec le bus, grâce à un registre qui accumule les 128 bits lus ou à écrire, couplé à des multiplexeurs pour envoyer les 64 bits adéquats sur le bus.

Mémoire DDR.

Il existe aussi des mémoires quad data rate, pour lesquelles la fréquence du bus est quatre fois celle du plan mémoire. Évidemment, la mémoire peut alors lire ou écrire 4 fois plus de données par cycle que ce que le bus peut supporter.

Mémoire QDR.

Le préchargement augmente donc le débit théorique maximal, en optimisant l'interface mémoire. L'interface mémoire fonctionne à double ou quadruple fréquence, voire plus, pour se synchroniser avec le bus mémoire. Elle doit interfacer un cœur mémoire très large avec un bus mémoire moins large, et doit aussi envoyer une donnée très large en plusieurs morceaux sur le bus. L'implémentation demande un registre et des multiplexeurs. A noter que sur les mémoires DDR dans les ordinateurs personnels, seul un signal d'horloge est utilisé, que ce soit pour le bus, le plan mémoire, ou le contrôleur. Seulement, le bus et les contrôleurs mémoire réagissent à la fois sur les fronts montants et sur les fronts descendants de l'horloge. Le plan mémoire, lui, ne réagit qu'aux fronts montants.

Sur les mémoires sans préchargement, le débit théorique maximal se calcule en multipliant la largeur du bus de données par sa fréquence. Par exemple, une mémoire SDRAM fonctionnant à 133 Mhz et qui utilise un bus de 8 octets, aura un débit de 8 * 133 * 1024 * 1024 octets par seconde, ce qui fait environ du 1 giga-octets par secondes. Pour les mémoires DDR, il faut multiplier la largeur du bus mémoire par la fréquence, et multiplier le tout par deux pour obtenir le débit maximal théorique. En reprenant notre exemple d'une mémoire DDR fonctionnant à 200 Mhz et utilisée en simple canal utilisera un bus de 8 octets, ce qui donnera un débit de 8 * 200 * 1024 * 1024 octets par seconde, ce qui fait environ du 2.1 gigaoctets par secondes.