Fonctionnement d'un ordinateur/Les mémoires ROM

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche
Illustration de la micro-architecture globale d'une mémoire ROM dite à diode (voir plus bas).

Dans les chapitres précédents, nous avons vu ce qu'il y a à l'intérieur des diverses mémoires. Nous avons abordé des généralités qui valent aussi bien pour des mémoires ROM, RAM, de masse, ou autres. Et il va de soi qu'après avoir vu les généralités, nous allons passer sur les spécificités de chaque type de mémoire. Nous allons donc voir les mémoires ROM, puis les mémoires RAM, avant de passer aux mémoires séquentielles/associatives, puis les mémoires de masse. Ce périple débute par les mémoires ROM, et ce pour une raison simple : l'intérieur de ces mémoires est assez simple, facile à comprendre. Il faut dire qu'il s'agit de mémoires de faible capacité, dont les besoins en termes de performance sont souvent assez frustres, les ROM à haute performance n'étant pas si courantes (exception faite des mémoires Flash). En conséquence, elles intègrent peu d'optimisations qui complexifient leur micro-architecture. Ces mémoires ont un contrôleur mémoire limité à son plus simple appareil : un simple décodeur pour gérer les adresses. Les circuits d'interface avec la mémoire sont aussi très simples et se limitent le plus souvent à une porte OUI, rarement un petit circuit combinatoire. Même le plan mémoire est classique et ce chapitre ne l'abordera pas, pour ne pas répéter ce qui a été vu dans les chapitres précédents. Seul les cellules mémoires se démarquent un petit peu, celles-ci étant assez spécifiques sur les mémoires ROM.

Rappelons qu'il existe plusieurs types de mémoires ROM :

  • les mémoires ROM sont fournies déjà programmées et ne peuvent pas être reprogrammées ;
  • les mémoires PROM sont fournies intégralement vierges, et on peut les programmer une seule fois ;
  • les mémoires RPROM sont reprogrammables, ce qui signifie qu'on peut les effacer pour les programmer plusieurs fois ;
    • les mémoires EPROM s'effacent avec des rayons UV et peuvent être reprogrammées plusieurs fois de suite ;
    • certaines EPROM peuvent être effacées par des moyens électriques : ce sont les mémoires EEPROM et les mémoires Flash.

Ces différents types de mémoire ont une architecture interne similaire, avec un décodeur et un plan mémoire usuel, mais se démarquent par leurs cellules mémoires. Celles-ci varient grandement selon le type de mémoire, ce qui explique les différences entre types de ROM.

Les mémoires ROM[modifier | modifier le wikicode]

Les mémoires ROM les plus simples sont de loin les Mask ROM, qui sont fournies avec leur contenu directement intégré dans la ROM lors de sa fabrication. Ces mémoires ROM sont accessibles uniquement en lecture, mais pas en écriture, sans compter qu'elles ne sont pas reprogrammables. Il est possible de les fabriquer avec plusieurs méthodes différentes, que nous n'allons pas toutes présenter. La plus simple est de loin de prendre une mémoire FROM et de la programmer avec les données voulues. Et c'est d'ailleurs ainsi que procèdent certains fabricants. Mais cette méthode n'est pas très intéressante : le constructeur ne produit alors pas vraiment une "vraie" Mask ROM. A la place, nous allons vous parler de deux autres méthodes, plus intéressantes à étudier et aussi plus économes en circuits.

Les ROM combinatoires[modifier | modifier le wikicode]

Une première possibilité est celle des ROM combinatoires. Le nom trahit certainement le principe même de cette méthode, qui consiste à créer un circuit combinatoire qui se comporte comme la ROM voulue. En effet, pour chaque circuit combinatoire, il existe une mémoire ROM équivalente, et réciproquement. Par exemple, On peut créer un circuit combinatoire quelconque en utilisant une ROM, ce qui est très utilisé dans certains circuits programmables (les FPGA et autres, notamment). Prenons un circuit qui, pour chaque entrée , renvoie le résultat  : celui-ci est équivalent à une ROM dont le byte d'adresse contient la donnée . Et réciproquement : une telle ROM est équivalente au circuit précédent. Pour résumer, une ROM pure (sans écriture ni reprogrammation) se comporte exactement comme un circuit combinatoire : sa sortie (la donnée lue) ne dépend que de l'entrée (l'adresse).

Dans ces conditions, autant créer un circuit combinatoire équivalent à la mémoire ROM voulue. Cette méthode permet d'obtenir des ROM qui utilisent très peu de place, en fait moins de place que les autres méthodes. La raison est que cette méthode est économe en transistors et en circuits. Bien qu'ingénieuse, cette méthode n'est cependant pas très utilisée. Il faut dire que la ROM obtenue n'est pas vraiment une mémoire ROM. On n'y retrouve pas la structure interne vue dans les chapitres précédents : ce genre de ROM ne contient pas de plan mémoire, le décodeur est absent, de même que les circuits d'interface avec le bus, il n'y a pas de bitlines, et j'en passe. A vrai dire, je n'aborde cette méthode que pour souligner le lien entre mémoire ROM et circuit combinatoire, plus par souci de développer une certaine culture informatique qu'autre chose.

Les ROM à diodes[modifier | modifier le wikicode]

ROM à diodes.

Les ROM à diodes sont des mémoires ROM fabriquées en combinant un décodeur avec quelques diodes et des bitlines. Rappelons que le plan mémoire est composé des bitlines, mais aussi des row line provenant du décodeur. Les cellules mémoires se trouvent à l'intersection des bitlines et des row line et celles des ROM à diodes ne font pas exception. Ici, les cellules mémoires sont composées soit de diodes, soit de rien : les cellules qui mémorisent un 1 sont composées d'une diode, alors que les autres sont simplement vides.

Pour les cellules à 1, la diode connecte la bitline avec le signal row line : cela permet mettre la bitline à 1 quand elle est sélectionnée et de ne pas y toucher sinon. Pour les cellules à zéro, la bitline n'est pas connectée avec le signal row line et est naturellement à 0. Cela permet de mettre la bitline à 1 ou 0 selon le bit mémorisé, mais uniquement quand la ligne est sélectionnée. Si la ligne n'est pas sélectionnée, les diodes (ou leur absence) localisées sur la ligne n'ont aucun effet : aucun courant ne les traverse. Mais quand la ligne est sélectionnée, le signal row line est à 1, ce qui met la bitline, et donc le bit de sortie, à 1. Les cellules à zéro restent à zéro, vu que la diode ne connecte pas le signal aux bitlines.

Les ROM à transistors MOS[modifier | modifier le wikicode]

Les ROM de type MOS fonctionnent comme les ROM à diodes, si ce n'est que les diodes sont remplacées par des transistors MOS. De plus, là où on mettait une diode pour les cellules à mettre à 1, c'est l'inverse sur les ROM MOS. Ici, les cellules mémoires qui mémorisent un zéro contiennent un transistor MOS qui connecte la bitline et le signal row line, alors que les autres ne connectent pas la bitline avec ce signal. Pour être précis, c'est un transistor NMOS qui est utilisé, à savoir qu'il se ferme quand on met un 0 sur sa base, et s'ouvre si on lui envoie un 1. Le transistor MOS est utilisé comme interrupteur commandé par le signal row line : le transistor fonctionne comme un interrupteur ouvert si ce signal vaut zéro, et comme un interrupteur fermé s'il vaut 1.

Maintenant, regardons ce qui se passe quand le décodeur sélectionne une cellule mémoire dont le contenu est 1, puis une autre qui stocke un 0. Dans tous les cas, les cellules mémoire non-sélectionnées se comporteront comme un simple fil : soit il s'agit de cellules vides, soit ce sont des transistors MOS fermés (row line à 0). Selon la valeur de la cellule sélectionnée, la bitline sera directement connectée à la tension d'alimentation, ce qui donne un 1 en sortie, ou en sera déconnectée donnant un 0. Si la cellule mémoire sélectionnée est vide, le signal row line et la bitline ne sont pas connectée : la bitline est connectée à la tension d'alimentation. Si la cellule mémoire contient un transistor MOS, celui-ci s'ouvrira : la bitline ne sera pas connectée à la tension d'alimentation et sera donc mise à 0. Les deux cas sont illustrés dans les schémas ci-dessous.

ROM MOS - sélection d'une cellule contenant un 1. ROM MOS - sélection d'une cellule contenant un 0.

Les mémoires PROM[modifier | modifier le wikicode]

L'intérieur d'une mémoire FROM est similaire à celui d'une mémoire ROM simple, sauf que les diodes (ou leur absence) sont remplacées par un autre dispositif. Précisément, chaque cellule mémoire est composé d'une sorte d'interrupteur qu'on ne peut configurer qu'une seule fois. Celui est un petit circuit, localisé à l'intersection d'une bitline et d'un signal row line, et qui connecte ces deux fils. Lors de la programmation, ce connecteur est soit grillé (ce qui déconnecte les deux fils), soit laissé intact. Pour faire un parallèle avec une ROM à diode, ce connecteur fonctionne comme une diode quand il est laissé intact, mais comme l'absence de diode quand il est grillé.

Mémoire PROM fabriquée avec des transistors bipolaires.

Suivant la mémoire, ce fusible peut être un transistor, ou une diode. Dans le premier cas, chaque transistor fonctionne soit comme un interrupteur ouvert, soit comme un interrupteur fermé. Un 1 correspond à un transistor laissé intact, qui fonctionne comme un interrupteur ouvert. Par contre, un 0 correspond à un transistor grillé, qui se comporte comme un interrupteur fermé. Dans le cas avec les fusibles, chaque bit est stocké en utilisant un fusible : un 1 est codé par un fusible intact, et le zéro par un fusible grillé. Une fois le fusible claqué, on ne peut pas revenir en arrière : la mémoire est programmée définitivement.

Programmer une PROM consiste à faire claquer certains fusibles/transistors en les soumettant à une tension très élevée. Pour cela, le contrôleur mémoire balaye chaque ligne une par une, ce qui permet de programmer la ROM ligne par ligne, byte par byte. Lorsqu'une ligne est sélectionnée, on place une tension très importante sur les bitlines voulues. Le fusible de la ligne connectés à ces bitlines sont alors grillés, ce qui les met à 0. Les autres bitlines sont soumises à une tension normale, ce qui est insuffisant pour griller les fusibles. En choisissant bien les bitlines en surtension pour chaque ligne, on arrive à programmer la mémoire FROM comme souhaité.

Les mémoires EPROM et EEPROM[modifier | modifier le wikicode]

Les mémoires EPROM et EEPROM, y compris la mémoire Flash, sont fabriquées avec des transistors à grille flottante, que nous avons déjà abordés il y a quelques chapitres. Je vous renvoie au chapitre sur les cellules mémoire pour plus d'informations à ce sujet. La grille de ces transistors est connectée à la row line, ce qui permet de commander leur ouverture, le drain et la source sont connectés à une bitline.

Les mémoires EPROM[modifier | modifier le wikicode]

EPROM de ST Microelectronics M27C160, capacité de 16 Mbits.

Avant de pouvoir (re-)programmer une mémoire EPROM ou EEPROM, il faut effacer son contenu. Sur les EPROM, l'effacement se fait en exposant les transistors à grille flottante à des ultraviolets. Divers phénomènes physiques vont alors décharger les transistors, mettant l'ensemble de la mémoire à 0. Pour pouvoir exposer le plan mémoire aux UV, toutes les mémoires EPROM ont une petite fenêtre transparente, qui expose le plan mémoire. Il suffit d'éclairer cette fenêtre aux UV pour effacer la mémoire. D'ordinaire, cette fenêtre est recouverte par un film plastique qui ne laisse pas passer les UV : cela évite un effacement accidentel de la mémoire.

Les mémoires EEPROM et Flash[modifier | modifier le wikicode]

Les cellules de mémoire EEPROM et de mémoire Flash sont fabriquées avec des transistors à grille flottante. La différence entre EEPROM et mémoire Flash est assez compliquée à expliquer, mais on peut dire que ces dernières se distinguent des autres EEPROM par quelques particularités. Pour simplifier, on peut dire que les EEPROM effectuent les effacements/écritures byte par byte, alors que les Flash les font par paquets de plusieurs bytes. Là où on peut effacer/programmer un byte individuel sur une EEPROM, ce n'est pas possible sur une mémoire Flash. Sur une mémoire Flash, on est obligé d'effacer/programmer un bloc entier de la mémoire, le bloc faisant plus de 512 bytes. C’est une simplification, qui cache le fait que la distinction entre EEPROM et Flash n'est pas très claire. Dans les faits, on considère que le terme EEPROM est à réserver aux mémoires dont les unités d'effacement/programmation sont petites (elles ne font que quelques bytes, pas plus), alors que les Flash ont des unités beaucoup plus larges.

Dans ce cours, nous ferons la distinction entre EEPROM et Flash sur le critère suivant : l'effacement peut se faire byte par byte sur une EEPROM, alors qu'il se fait par blocs entiers sur une Flash. Quant à la reprogrammation, tout dépend du type de mémoire. Sur les EEPROM, elle a forcément lieu byte par byte, comme l'effacement. Mais sur les mémoires Flash, elle peut se faire soit byte par byte, soit par paquets de plusieurs centaines de bytes. Cela permet de distinguer deux sous-types de mémoires Flash : les mémoires Flash de type NOR et les Flash de type NAND. Nous verrons ci-dessous d'où proviennent ces termes, mais laissons cela de coté pour le moment. Sur les Flash de type NOR, on doit effacer la mémoire par blocs, mais on peut reprogrammer les bytes uns par uns, indépendamment les uns des autres. Par contre, sur les Flash de type NAND, effacement et reprogrammation se font par paquets de plusieurs centaines de bytes. Pire : les blocs pour l'effacement n'ont pas la même taille que pour la reprogrammation : environ 512 à 8192 octets pour la reprogrammation, plus de 64 kibioctets pour l'effacement. Par exemple, il est possible de lire un octet individuel, d'écrire par paquets de 512 octets et d'effacer des paquets de 4096 octets. Sur les Flash NAND, l'unité d'effacement s'appelle un bloc (comme pour les Flash NOR), alors que l'unité de reprogrammation s'appelle une page mémoire.

Différences entre EEPROM, Flash NAND et Flash NOR
Reprogrammation Byte par byte Reprogrammation par blocs entiers
Effacement Byte par byte EEPROM N'existe pas
Effacement par blocs entiers Flash de type NOR Flash de type NAND

L'organisation des cellules mémoires des Flash NOR et NAND[modifier | modifier le wikicode]

NAND Flash memory circuit

Une autre différence entre Flash NOR et NAND, totalement orthogonale à la précédente, est liée à la manière dont les cellules mémoires sont reliées aux bitlines (les fils sur lesquels on connecte les cellules mémoires pour lire et écrire dedans) et aux signaux Word Line (qui sélectionnent la cellule à manipuler). Le tout est illustré dans le schéma qui suit, dans lequel on voit que chaque cellule d'une Flash NOR est connectée à la bitline directement, alors que les Flash NAND placent les cellules en série. De ce fait, les Flash NAND ont beaucoup moins de fils et de connexions, ce qui dégage de la place. Pas étonnant que ces dernières aient une densité mémoire plus importante que pour les Flash NOR (on peut mettre plus de cellules mémoire par unité de surface). Cette différence n'a strictement rien à voir avec ce qui a été dit plus haut. Peu importe que chaque cellule soit connectée à la bitline ou que les transistors soient en série, on peut toujours lire et reprogrammer chaque cellule indépendamment des autres.

FLASH NOR.
FLASH NAND.

Les avantages et inconvénients de chaque type d'EEPROM[modifier | modifier le wikicode]

En terme d'avantages et d'inconvénients, les différents types de Flash sont assez distinctes. Les Flash NOR ont un temps de lecture meilleur que pour les Flash NAND, alors que c'est l'inverse pour la reprogrammation et l'effacement. Pour faire simple, l'écriture est assez lente sur les Flash NOR. En termes de capacité mémoire, les Flash NAND ont l'avantage. Leur conception réduit de loin le nombre d'interconnexions internes, ce qui augmente fortement la densité de ces mémoires. Elles ont donc une meilleure capacité mémoire, ce qui les rend mieux adaptées pour du stockage de masse.

Les différents types de Flash/EEPROM sont utilisées dans des scénarios très différents. Les Flash NAND sont idéales pour des accès séquentiels, comme on en trouve dans des accès à des fichiers. Par contre, les EEPROM et les Flash de type NOR sont idéales pour des accès aléatoires. En conséquence, les Flash NAND sont idéales comme mémoire de masse, alors que les Flash NOR/EEPROM sont idéales pour stocker des programmes de petite taille, comme des Firmware ou des BIOS. C'est la raison pour laquelle les Flash NAND sont utilisées dans les disques de type SSD, alors que les autres sont utilisées comme de petites mémoires mortes.