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.

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, et que le drain et la source sont connectés à une bitline.

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 Flash[modifier | modifier le wikicode]

Si les cellules de mémoire Flash sont fabriquées avec des transistors à grille flottante, elles se distinguent des autres EEPROM par la manière de les relier aux bitlines. Dans les faits, il existe deux types de cellules de FLASH : les cellules NOR et les cellules FLASH. Toutes deux sont conçues avec des transistors à grille flottante, mais la manière dont ces cellules sont reliées est différente. Pour rappel, la lecture d'une cellule connecte celle-ci sur un fil, la bitline, sur lequel on récupère le bit stocké dans la cellule. L'ouverture du transistor à grille flottante est commandée par sa grille. En conséquence, sélectionner la cellule demande d'envoyer une tension précise sur la grille. Pour cela, la cellule possède une entrée Word Line pour activer le bit en question. Voici comment sont connectées les cellules de FLASH aux bitlines et au signal Word Line, le tout est illustré dans le schéma qui suit :

NAND Flash memory circuit
FLASH NOR. FLASH NAND.