# Festwertspeicher

Ein Festwertspeicher oder Nur-Lese-Speicher (englisch read-only memory, ROM) ist ein Datenspeicher, auf dem im normalen Betrieb nur lesend zugegriffen werden kann, nicht schreibend, und der nicht flüchtig ist. Das heißt: Er hält seine Daten auch im stromlosen Zustand. Er wird verwendet bei eingebetteten Systemen mit unveränderbarer Software, mittlerweile wird jedoch meist stattdessen Flash-Speicher eingebaut, dessen Inhalt nachträglich korrigierbar/änderbar ist. Auf PCs fand sich beispielsweise ursprünglich das „fest verdrahtete“ BIOS in einem ROM, das nur durch Austausch beziehungsweise externe Umprogrammierung geändert werden konnte.
Vor der Entwicklung der Halbleiterspeicher wurden Festwertspeicher beispielsweise mittels Core Rope Memory realisiert, bei dem der Inhalt durch die Art der Verdrahtung festgelegt wird. Dieses verwendet Ringkerne.

## Übersicht

Ursprünglich wurden auch Halbleiter-ROMs bei der Fertigung „fest verdrahtet“. Da diese Verdrahtung mit einer „Maske“ (einer Art Filmnegativ) auf den Chip direkt aufbelichtet wird, spricht man hierbei von einem maskenprogrammierten ROM oder kurz Masken-ROM. Da dieses Verfahren nur in Großfertigung wirtschaftlich ist, wurde eine – ständig wachsende – Familie weiterer Speicherbausteine entwickelt, die auch nach der Fertigung mit Informationen befüllt werden können, die sogenannten PROMs (Programmable ROM).
Das Einschreiben von Daten in ein ROM wird als Programmierung des Bausteins bezeichnet und ist nicht mit den Schreibzugriffen in einem Schreib-Lese-Speicher (Random Access Memory, Festplatte) vergleichbar. Zu unterscheiden ist zwischen Bausteinen mit reversibler und irreversibler Programmierung. ROM ermöglicht allerdings wie RAM einen wahlfreien Zugriff auf die Daten.

## Funktionsweise

Ein ROM-Chip hat eine Anzahl n Adresspins, an denen die abfragende Logik (z. B. ein Prozessor) die Adresse anlegt, von der im ROM-Chip er lesen möchte. Zusätzlich besitzt der ROM-Chip m Datenausgangs-Pins, an denen er dann den Wert ausgibt, der in ihm an der angeforderten Adresse eingebrannt ist. Viele ROM-Chips besitzen zusätzlich noch einen einzelnen Pin namens „Chip-Select“, der angibt, ob der ROM-Chip gemeint ist, oder die anliegende Adresse für einen anderen (ROM-)Chip gemeint ist, der an denselben Adressleitungen angeschlossen ist.
Beispiel: Ein 64-kB-ROM kann an 2$^{16}$ = 65536 Adressen, also Adresse 0..65535, jeweils 1 Byte = 8 Bit speichern. Es besitzt also 16 Adress-Eingangsleitungen und 8 Daten-Ausgangsleitungen.

## Rechen-ROM

Anstatt eines Programms kann ein ROM-Chip auch nur Daten enthalten. In einer speziellen Form davon kann ein ROM-Chip auch direkt eine Hardware-Funktion „berechnen“: Werden seine Adresspins nicht als Adresse, sondern als „Eingabewert“ betrachtet, so kann zu jedem Eingabewert ein Ausgabewert eingebrannt werden, den der ROM-Chip später bei dieser Eingabe zurückliefert. Somit kann ein ROM-Chip jegliche Boolesche Funktion („Logikfunktion“) abbilden, die maximal n Eingangsbits und m Ausgangsbits hat.

## Varianten

Inzwischen gibt es eine recht große Anzahl verschiedener Arten von ROM:
* Masken-ROM – nur zum Fertigungszeitpunkt programmierbar, die preisgünstigste Version bei Massenfertigung
* Programmable Read-Only Memory (PROM), einmalig programmierbar
* Erasable Programmable Read-Only Memory (EPROM), löschbar mit UV-Licht
* Electrically Erasable Programmable Read-Only Memory (EEPROM), elektrisch löschbar
Als Ersatz für das ROM wird heute oft Flash-Speicher verwendet – als FLASH-EEPROM auch mit wahlfreier Adressierung erhältlich.