Warum haben die meisten nichtflüchtigen Speicher standardmäßig eine logische 1?

14

Ich habe in eingebetteten Anwendungen nichtflüchtigen Speicher wie EEPROM- und FLASH-Speicher verwendet und festgestellt, dass die Bitpositionen für nicht verwendeten Speicher (EEPROM / FLASH) 1standardmäßig festgelegt sind. Warum wird dies anstelle von verwendet 0?

Zum Beispiel einer Adresse, sagt die 0. Adresse (erstes Byte des Speichers), wenn nicht durch den Benutzer geschrieben, immer speichert 0xffund nicht 0x00. Warum haben es die Leute, die die Speicherchips gebaut haben, so gehalten? Ich bin sicher, den Standardspeicherort beizubehalten, da 0xffdies einen Vorteil oder etwas Wichtiges für den Hersteller darstellen würde.

Was ist der Grund für diese Struktur in Speicherchips?

Rookie91
quelle

Antworten:

20

Ich werde auf die Programmierung von Flash-Speichern eingehen, aber eine Menge Material wird EEPROMs (Electrically Erasable Programmable ROM) ähneln, da Flash-Speicher Mitte der 1980er Jahre aus EEPROMs abgeleitet wurden. Wie im Folgenden beschrieben, ist der Standardzustand vom physikalischen Standpunkt aus 1. Aber noch wichtiger ist , ich werde erklären , warum es ist ein Zustand , Standard - man kann nicht einfach willkürlich Programm auf, was bereits vom letzten Mal programmiert wird.

NOR-Flash wird fast immer für Programm-Flash gewählt, da die Schnittstelle am besten zum Platzieren der Daten in der Speicherkarte des Mikrocontrollers geeignet ist - vollständige Adressen- und Datenbusse ahmen den RAM nach und ermöglichen den wahlfreien Zugriff auf jeden Ort. Daten können wortweise gelesen werden, wobei ein Wort als Datenbreite des Mikrocontrollers definiert ist, typischerweise 8, 16 oder 32 Bit. NAND-Flash hingegen wurde entwickelt, um Festplatten zu ersetzen und funktioniert sequentiell.

Die Programmierung wird jedoch etwas komplizierter. Wie bereits erwähnt, ist der Standardzustand für NOR-Flash und andere nichtflüchtige Speicher wie NAND-Flash, EEPROMs und sogar EPROMs eine logische 1. Sie können in diesen Geräten keine Einsen programmieren, Sie können nur Nullen programmieren. Wenn Sie beispielsweise ein Byte haben, das 0x0123 enthält, und es in 0x3210 ändern möchten, können Sie dies nicht direkt über ein Byte im RAM schreiben.

Stattdessen müssen Bits im Speicher gelöscht werden, wodurch sie in den bereits erwähnten Standardzustand 1 versetzt werden. Dies kann nur in Blöcken erfolgen, nicht in Worten. Auf dem Microchip PIC32, mit dem ich zuletzt gearbeitet habe, beträgt die minimale Blockgröße, die gelöscht werden kann, 4096 Bytes. Wenn Sie also nur ein Wort (32 Bit) ändern möchten, müssen Sie die 4 KByte des Speichers lesen, den Block löschen und dann die 4 KByte des Speichers auf Flash zurückschreiben, wobei Sie den neuen 32-Bit-Wert nach Bedarf einschließen. Dieses Löschen kann einige Zeit in Anspruch nehmen - einen guten Teil einer Sekunde.

Das Folgende ist ein Bild einer Flash-Speicherzelle. Flash speichert die Daten durch Entfernen oder Anbringen von Elektronen am Floating Gate. Wenn Elektronen auf dem Floating Gate vorhanden sind, fließt kein Strom durch den Transistor, was eine 0 anzeigt. Wenn Elektronen vom Floating Gate entfernt werden, beginnt der Transistor zu leiten und zeigt eine 1 an andersherum wären aber Wechselrichter auf allen Datenleitungen erforderlich.)

Bildbeschreibung hier eingeben

Vorgang löschen. Der Standardzustand von Flash-Speicherzellen (eine einstufige NOR-Flash-Zelle) ist 1, da Floating-Gates keine negativen Ladungen übertragen. Das Löschen einer Flash-Speicherzelle (Zurücksetzen auf 1) wird durch Anlegen einer Spannung an die Source und das Steuergate (Wortleitung) erreicht. Die Spannung kann im Bereich von -9 V bis -12 V liegen. Und legen Sie auch ungefähr 6V an die Quelle an. Die Elektronen im Floating Gate werden abgezogen und durch Quantentunneling zur Source übertragen . Mit anderen Worten, Elektronen tunneln vom Floating Gate zur Source und zum Substrat.

Da beim Löschen hohe Spannungen verwendet werden, erfordert das Löschen in Blöcken weniger Chipfläche. Daher können nur ganze Reihen von Transistoren gleichzeitig mit Spannung versorgt werden.

Zum Schreiben kann eine NOR-Flash-Zelle wie folgt programmiert oder auf 0 gesetzt werden. Während des Schreibens wird eine hohe Spannung von ungefähr 12 V an das Steuergate (Wortleitung) angelegt. Wenn eine Hochspannung von ungefähr 7 V an die Bitleitung (Drain-Anschluss) angelegt wird, wird eine 0 in der Zelle gespeichert. Der Kanal ist jetzt eingeschaltet, damit Elektronen von der Source zum Drain fließen können. Der Source-Drain-Strom ist hoch genug, um zu bewirken, dass einige energiereiche Elektronen durch die Isolierschicht auf das Floating-Gate springen, was als Injektion heißer Elektronen bezeichnet wird.

Zum Lesen wird eine Spannung von ungefähr 5 V an das Steuergate und ungefähr 1 V an den Drain angelegt. Der Zustand der Speicherzelle wird durch den zwischen Drain und Source fließenden Strom unterschieden.

Die Nutzungsdauer des nichtflüchtigen Speichers wird in Form von Löschzyklen gemessen. Der Nachteil von NOR ist, dass die Anzahl der Löschzyklen etwa 1/10 der Anzahl der NAND-Speicher beträgt. Bei vielen Versionen des PIC32 kann der Flash-Speicher nur 1000-mal aktualisiert werden, weit weniger als die typischen 100.000 Löschzyklen für EEPROMs.

Es ist also nicht so wichtig, ob die Designer den Standardstatus auf 1 oder 0 gesetzt haben (sie haben den Wert gewählt, der die einfachste Implementierung ermöglicht). Wichtig ist, dass man zuerst einen Flash-Block löscht (was Zeit kostet) und dann den gesamten Block neu programmiert (auch wenn ein einzelnes Wort geändert wird (was eine erhebliche Menge an RAM erfordert).

Diese Blocklöschung des Gerätes geht auf die ersten EPROMs (Erasable Programmable ROM) zurück, die EEPROMs durchliefen. Der Code wurde in Chips (wie die 16KB 27128) programmiert und in Sockel gesteckt. Diese Chips hatten oben ein kleines Fenster, durch das Licht auf den Würfel fiel. Wenn das Programm geändert werden musste, wurden die Chips etwa 20 Minuten lang in einen UV-Radierer gelegt, wodurch der gesamte Chip gelöscht wurde. Dann würde der Chip mit dem neuen Programm programmiert.

Einige EEPROMs erfordern das Löschen von Speicherblöcken vor dem Programmieren. andere erlauben das gleichzeitige Schreiben eines Bytes (der EEPROM-Controller löscht tatsächlich zuerst das Byte und die Programme, die es enthält).

Tcrosley
quelle
2
Dies ist eine großartige Übersicht darüber, wie auf nichtflüchtige Speicher zugegriffen wird, wobei jedoch nicht berücksichtigt wird, warum der gelöschte Status "1" und nicht "0" ist.
Akohlsmith
1
@akohlsmith Ich habe diese Informationen hinzugefügt, um vollständiger zu sein. Aber das eigentliche Problem ist nicht, ob die Standardzelle eine 1 oder eine 0 ist; Dies könnte durch einfaches Anbringen von Wechselrichtern auf jeder Datenleitung umgekehrt werden. Das eigentliche Problem ist, warum es überhaupt einen Standardzustand gibt. dh Sie können eine 0 durch keine 1 schreiben - letzteres erfordert das Löschen in Blöcken.
Tcrosley
1
Ich stimme nicht zu, die Frage schien ziemlich spezifisch zu sein, warum der gelöschte Zustand "gesetzt" und nicht "klar" ist - trotzdem liebe ich Ihre Antwort und +1 von mir (nicht, dass ich jemand bin, nur ein zufälliger Internet-Fremder, der mag Ihre Antwort)
Akohlsmith
1
@akohlsmith Ich stimme Ihnen zu, dass festgelegte Zustände normalerweise 1 sind und dass die einzelnen Zellen tatsächlich so funktionieren. Es würde einige zusätzliche Hardware (nicht viel) erfordern, um es rückgängig zu machen, und es bestand keine Notwendigkeit, dies zu tun: 1, da die Standardeinstellung in Ordnung war.
Tcrosley
Das ist eine großartige Antwort. Aber ich denke, es wird einfacher zu verstehen sein, wenn Sie sagen: Sie können keine Einsen in diese Geräte programmieren, Sie können nur Nullen programmieren. Wenn Sie Einsen programmieren möchten, müssen Sie die Geräte löschen und den gesamten Block auf den Standardzustand 1 zurücksetzen. Anschließend müssen Sie die Nullen nach Bedarf programmieren. . Um beispielsweise zu programmieren 0101, 1010müssen Sie folgende Schritte ausführen: 0101-> (Löschen) -> 1111-> (Programm 0) -> 1010. Oder im Wesentlichen bedeutet dies, dass das Schreiben von 1 und das Schreiben von 0 mit unterschiedlicher Granularität ausgeführt werden .
Smwikipedia
4

In modernen Flash-Speichern gibt es keinen Grund, Einsen vor Nullen als Standard zu wählen. Die Lesevorgänge erfolgen über Differenzstrom-Leseverstärker, sodass Sie den Ausgang grundsätzlich von beiden Seiten nehmen können. (Die ersten EEPROMs hatten möglicherweise einfachere Leseschaltungen - da bin ich mir nicht sicher.)

Es gibt einen guten Grund, keine zusätzlichen Inverter hinzuzufügen - dies würde die Ausbreitungsverzögerung vom Speicher zur CPU erhöhen. In Mikrocontrollern hat der Flash-zu-CPU-Datenpfad einen enormen Einfluss auf die Gesamtsystemleistung, da er bestimmt, wie lange es dauert, neue Anweisungen abzurufen.

Entwickler digitaler Schaltungen erwarten oft, dass Null das Löschen / Zurücksetzen / Löschen bedeutet. Flash-Transistoren und Leseschaltungen sind jedoch analog. Unter diesem Gesichtspunkt ist es sinnvoller, den leitenden Zustand des Flash-Transistors als logisch zu bezeichnen. Und es passiert einfach so, dass der Übergang von einer Eins zu einer Null sehr viel schneller ist als der Übergang von einer Null zu einer Eins, so dass man in den "gelöschten" Zustand übergeht, während Null in den "programmierten" Zustand übergeht.

Kurzfassung: Halbleiterphysiker und Analogschaltungsdesigner kümmern sich nicht um Ihre digitalen Intuitionen. :-)

Adam Haun
quelle
1

Ich bin mir nicht sicher, woraus Sie zitieren, aber wenn Sie die Wikipedia-Seite für Flash-Speicher verlassen, scheint dies ein Ergebnis der Hardware zu sein, die sich hinter Flash-Speicher verbirgt:

Eine einstufige NOR-Flash-Zelle in ihrem Standardzustand entspricht logischerweise einem binären "1" -Wert, da unter Anlegen einer geeigneten Spannung an das Steuergate Strom durch den Kanal fließt, so dass die Bitleitungsspannung nach unten gezogen wird.

Wenn Sie einen anderen Flash-Typ verwenden, z. B. NAND, ist der Standardzustand 1, da der Ausgang von NAND 1 ist, wenn einer der Transistorausgänge unter der hohen / niedrigen Schwellenspannung liegt.

Entschuldigung, wenn ich das Boot auf das, was Sie fragten, völlig verpasst habe, bin ich auch ziemlich neu in all dem.

llee94
quelle
1
Aber da es eine Schaltung zwischen den Zellen und den Pins gibt, die wie die meisten Logikkonstruktionen wahrscheinlich von Natur aus eine Reihe impliziter Inversionen ausführt, warum wird der gelöschte Zustand notwendigerweise als "0" und nicht als "1" verwendet?
Chris Stratton
Ich verstehe Ihre Frage nicht ganz - wird der ERASE-Status nicht als "1" verwendet? Ich frage diesbezüglich (unter "EEPROM-SPEICHERZELLENBETRIEB UND EIGENSCHAFTEN").
Llee94
Welcher elektrische Zustand der Zelle selbst welchem ​​logischen Zustand der externen Schnittstelle entspricht, erscheint nahezu willkürlich, da sich zwischen beiden mehrere, wahrscheinlich implizit invertierende Schaltungselemente befinden.
Chris Stratton
1
@ ChrisStratton Ich glaube, Ilee94 sagte, dass der gelöschte Zustand tatsächlich eine 1 ist. Aber es ist tatsächlich willkürlich - wenn Sie Wechselrichter auf die Datenleitungen stecken, wäre es so, wie Sie es beschrieben haben. 1 als Standardstatus erfordert einfach etwas weniger Hardware.
Tcrosley
Oder etwas mehr Hardware - es kommt wirklich darauf an, ob es eine gerade oder eine ungerade Anzahl implizit invertierender Schaltungselemente zwischen der Zelle und dem Ausgang gibt.
Chris Stratton
1

Die ROMs und PROMs von damals mussten manipuliert werden, indem während der Herstellung Metall in die Maskenschicht eingebracht oder beim Programmieren weggebrannt wurde, und beide Prozesse hatten bei der Herstellung einen standardmäßig hohen Zustand. Die Standardeinstellung LOW hätte mehr Transistoren gekostet, den Programmierkomfort oder die Betriebsgeschwindigkeit in gewisser Weise verringert.

Inzwischen ist es üblich geworden, dass heutzutage ein Wechselrichter an einem bestimmten Punkt im Datenpfad hinzugefügt werden kann.

Die Konvention könnte in den Tagen von Diodenlogik-Speicheranordnungen begonnen haben, die Dioden hatten, um Datenleitungen herunterzuziehen, wenn sie adressiert wurden, und unbenutzte Speicherwörter hätten keine Dioden anstelle aller Dioden. Die meisten frühen digitalen Logikstandards wurden aktiv auf LOW gezogen und schwebten hoch, wenn nicht.

KalleMP
quelle