DE112014005810T5 - Management der Datenspeicherung in analogen Speicherzellen unter Verwendung einer nicht ganzzahligen Anzahl von Bits pro Zelle - Google Patents

Management der Datenspeicherung in analogen Speicherzellen unter Verwendung einer nicht ganzzahligen Anzahl von Bits pro Zelle Download PDF

Info

Publication number
DE112014005810T5
DE112014005810T5 DE112014005810.6T DE112014005810T DE112014005810T5 DE 112014005810 T5 DE112014005810 T5 DE 112014005810T5 DE 112014005810 T DE112014005810 T DE 112014005810T DE 112014005810 T5 DE112014005810 T5 DE 112014005810T5
Authority
DE
Germany
Prior art keywords
data
read
decoding
memory
cells
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE112014005810.6T
Other languages
English (en)
Other versions
DE112014005810B8 (de
DE112014005810B4 (de
Inventor
Micha Anholt
Naftali Sommer
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Apple Inc
Original Assignee
Apple Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Apple Inc filed Critical Apple Inc
Publication of DE112014005810T5 publication Critical patent/DE112014005810T5/de
Application granted granted Critical
Publication of DE112014005810B4 publication Critical patent/DE112014005810B4/de
Publication of DE112014005810B8 publication Critical patent/DE112014005810B8/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5628Programming or writing circuits; Data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1006Data managing, e.g. manipulating data before writing or reading out, data bus switches or control circuits therefor
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5642Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5671Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge trapping in an insulator
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/08Address circuits; Decoders; Word-line control circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/26Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/3418Disturbance prevention or evaluation; Refreshing of disturbed memory data
    • G11C16/3427Circuits or methods to prevent or reduce disturbance of the state of a memory cell when neighbouring cells are read or written
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • G11C16/107Programming all cells in an array, sector or block to the same state prior to flash erasing

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Read Only Memory (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Detection And Correction Of Errors (AREA)
  • Error Detection And Correction (AREA)

Abstract

Ein Verfahren zum Speichern von Daten in einer Gruppe von Speicherzellen mittels Codieren der Daten unter Verwendung von mindestens einem äußeren Code und einem inneren Code, sowie wahlfreiem Invertieren der codierten Daten vor dem Speichern der codierten Daten in den Speicherzellen. Die codierten Daten werden aus den Speicherzellen ausgelesen, und Decodierung des inneren Codes wird auf die ausgelesenen, codierten Daten angewandt, um ein Decodierergebnis zu erzeugen. Zumindest ein Teil der ausgelesenen Daten wird in Abhängigkeit vom Decodierergebnis des inneren Codes bedingt invertiert.

Description

  • GEBIET DER ERFINDUNG
  • Die vorliegende Erfindung betrifft allgemein Datenspeicherung und insbesondere Verfahren und Systeme zum Speichern von Daten in analogen Speicherzellen.
  • HINTERGRUND DER ERFINDUNG
  • Mehrere Arten von Speichereinrichtungen wie z. B. Flash-Speicher verwenden Arrays aus analogen Speicherzellen zum Speichern von Daten. In jeder analogen Speicherzelle ist eine Menge eines Analogwerts gespeichert, die auch als ein Speicherwert bezeichnet wird, wie z. B. eine elektrische Ladung oder Spannung. Dieser analoge Wert stellt die in der Zelle gespeicherten Informationen dar. Bei Flash-Speichern nimmt beispielsweise jede analoge Speicherzelle eine bestimmte Menge elektrischer Ladung auf. Der Bereich möglicher analoger Werte ist üblicherweise in Regionen unterteilt, wobei jedes Intervall einem oder mehreren Datenbitwerten entspricht. Daten werden in analoge Speicherzellen geschrieben, indem ein analoger Nennwert geschrieben wird, der dem gewünschten Bit oder den gewünschten Bits entspricht.
  • Einige Speichereinrichtungen, die gemeinhin als SLC-Einrichtungen (Single-Level Cell) bezeichnet werden, speichern in jeder Speicherzelle ein einzelnes Informationsbit, d. h., dass jede Speicherzelle programmiert werden kann, um zwei mögliche Programmierungsebenen aufzunehmen. Einrichtungen höherer Dichte, häufig bezeichnet als MLC-Einrichtungen (Multi-Level Cell) speichern zwei oder mehr Bits pro Speicherzelle, d. h., dass sie programmiert werden können, um mehr als zwei mögliche Programmierungsebenen aufzunehmen. Beispielsweise speichert eine TLC-Einrichtung (Triple-Level Cell) drei Bits pro Zelle unter Verwendung von acht Programmierungsebenen.
  • Flash-Speichereinrichtungen sind beispielsweise beschrieben von Bez et al. in „Introduction to Flash Memory”, Proceedings of the IEEE, Band 91, Nr. 4, April 2003, S. 489–502, welches durch Verweis hierin übernommen wird. Multi-Level-Flash-Zellen und -Einrichtungen sind beispielsweise beschrieben von Eitan et al. in „Multilevel Flash Cells and their Trade-Offs”, Proceedings of the 1996 IEEE International Electron Devices Meeting (IEDM), New York, New York, S. 169–172, welches durch Verweis hierin übernommen wird. Die Arbeit vergleicht mehrere Arten von mehrstufigen Flash-Zellen wie z. B. Zellen mit gemeinsamer Grundlage, DINOR-, AND-, NOR- und NAND-Zellen.
  • Eitan et al. beschreiben einen anderen Typ einer als NROM (Nitride Read Only Memory) bezeichneten analogen Speicherzelle in „Can NROM, a 2-bit, Trapping Storage NVM Cell, Give a Real Challenge to Floating Gate Cells?”, Proceedings of the 1999 International Conference an Solid State Devices and Materials (SSDM), Tokio, Japan, 21.–24. September 1999, S. 522–524, welches durch Verweis hierin übernommen wird. NROM-Zellen werden auch beschrieben von Maayan et al. in „A 512 Mb NROM Flash Data Storage Memory with 8 MB/s Data Rate”, Proceedings of the 2002 IEEE International Solid-State Circuits Conference (ISSCC 2002), San Francisco, US-Bundesstaat Kalifornien, 3.–7. Februar 2002, S. 100–101, welches durch Verweis hierin übernommen wird. Weitere beispielhafte Typen von analogen Speicherzellen sind Floating-Gate-(FG)-Zellen, ferroelektrische RAM-(FRAM)-Zellen, magnetische RAM-(MRAM)-Zellen, Charge-Trapping-Flash-(CTF)-Speicher und Phasenwechsel-RAM-Zellen (PRAM, auch bezeichnet als Phase-Change-Memory-(PCM)-Zellen). FRAM-, MRAM- und PRAM-Zellen werden beispielsweise beschrieben von Kim und Koh in „Future Memory Technology including Emerging New Memories”, Proceedings of the 24th International Conference an Microelectronics (MIEL), Nis, Serbien und Montenegro, 16.–19. Mai 2004, Band 1, S. 377–384, welches durch Verweis hierin übernommen wird.
  • Einige Speicherschemata speichern Daten bei einer Dichte mit einer nicht ganzzahligen Anzahl von Bits pro Speicherzelle. Beispielsweise beschreibt US 7071849 , dessen Offenbarung durch Verweis hierin übernommen wird, Bitsysteme mit Nachkommastellen, die Inkremente der Anzahl der Zustände pro Zelle zwischen Produktgenerationen um nur eins ermöglichen. Da die Anzahl von Zuständen pro Zelle nicht ein ganzzaliliger Exponent von zwei ist, nimmt die Anzahl von Bits pro Zelle einen Wert mit Nachkommastellen an. Zellen sind normalerweise in Worteinheiten decodiert, und die Systemeffizienz kann über die Anpassung der Wortbreite optimiert werden.
  • Als weiteres Beispiel beschreibt US 6,646,913 , dessen Offenbarung durch Verweis hierin übernommen wird, ein Verfahren zum Speichern und Lesen von Daten in einem mehrstufigen, nichtflüchtigen Speicher mit einem durch eine Vielzahl von Speicherzellen gebildeten Speicher-Array. Jede der Speicherzellen speichert eine Anzahl von Bits, die nicht ein ganzzahliger Exponent von zwei ist. Auf diese Weise wird ein Datenbyte in einer nicht ganzzahligen Anzahl von Speicherzellen gespeichert. Das Management-Verfahren schließt das Speichern eines Datenworts im gleichen Taktzyklus ein, das aus einer Vielzahl von Bytes gebildet ist, indem eine vorgegebene Zahl benachbarter Speicherzellen programmiert wird. Das Lesen erfolgt, indem das gespeicherte Datenwort im gleichen Taktzyklus ausgelesen wird.
  • Das im US-Patent 7,167,109 beschriebene Verfahren, dessen Offenbarung durch Verweis hierin übernommen wird, ermöglicht Inkremente der Anzahl der Zustände pro Zelle N um nur 1 zwischen Produktgenerationen. Da N nicht mehr ein ganzzahliger Exponent von zwei ist, nimmt b einen Wert mit Nachkommastellen an, woraus sich ein System mit Nachkommastellen ergibt. Bei einem System mit Nachkommastellen werden Zellen in Worteinheiten decodiert. Durch Anpassen der Wortbreite kann die Systemeffizienz optimiert werden. Ein hybrides N-äres System kann verwendet werden, um die Herstellungsausbeute und das Ausdauervermögen zu verbessern.
  • Das US-Patent 7,742,335 , dessen Offenbarung durch Verweis hierin übernommen wird, beschreibt Verfahren, Einrichtungen, Module und Systeme für den Betrieb nichtflüchtiger, mehrstufiger Speicherzellen. Eine Ausführungsform eines Verfahrens schließt die Zuweisung einer ersten Anzahl von Programmzuständen, für die die erste Zelle programmiert werden kann, zu einer mit einer Zeilenauswahlleitung gekoppelten ersten Zelle ein. Das Verfahren schließt weiter die Zuweisung einer zweiten Anzahl von Programmzuständen, für die die zweite Zelle programmiert werden kann, zu einer mit einer Zeilenauswahlleitung gekoppelten zweiten Zelle ein, wobei die zweite Anzahl von Programmzuständen größer ist als die erste Anzahl von Programmzuständen. Das Verfahren schließt vor dem Programmieren der zweiten Zelle mit einem Zustand der zweiten Anzahl von Programmzuständen die Programmierung der ersten Zelle mit einem Zustand der ersten Anzahl von Programmzuständen ein.
  • Das US Patent 7,848,142 , dessen Offenbarung durch Verweis hierin übernommen wird, beschreibt Verfahren, Einrichtungen, Module und Systeme zum Programmieren von Speicherzellen, wobei das Speichern von Zuständen eingeschlossen sein kann, die einem Datenzustand entsprechen, der eine ganzzahlige Anzahl von Bits in einer Gruppe von Speicherzellen wiedergibt. Das Programmieren von Speicherzellen kann das Speichern einer Ladung in einer Zelle der Gruppe einschließen, wobei die Ladung einem programmierten Zustand entspricht, wobei der programmierte Zustand eine Bruchzahl von Bits darstellt und wobei der programmierte Zustand eine als Zahl zur Basis N ausgedrückte Stelle des Datenzustands bezeichnet, wobei N gleich 2B ist, gerundet auf eine Ganzzahl, und wobei B gleich der Bruchzahl von Bits ist, die durch den programmierten Zustand wiedergegeben ist.
  • Das US-Patent 7,420,841 , dessen Offenbarung durch Verweis hierin übernommen wird, beschreibt eine Speichereinrichtung und ein Verfahren für den Betrieb einer Speichereinrichtung. Bei einer Ausführungsform der Erfindung schließt die Speichereinrichtung eine Vielzahl von mehrstufigen Speicherzellen ein, wobei jede Speicherzelle eine Anzahl m von Stufen hat, die nicht 2n entsprechen, wobei n eine Ganzzahl ungleich Null ist, sowie eine Schaltung oder Einrichtung zum Kombinieren der Stufen von mindestens zwei der Speicherzellen für Schreib- und Lesevorgänge in eine Gruppe kombinierter Zustände und zum Umsetzen von mindestens einer Untergruppe von 2n Kombinationen der Gruppe kombinierter Zustände in n zweistufige Datenbits.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Eine hierin beschriebene Ausführungsform der vorliegenden Erfindung stellt ein Verfahren zur Datenspeicherung bereit, einschließlich des Speicherns von Daten in einer Gruppe von Speicherzellen mittels Codieren der Daten unter Verwendung von mindestens einem äußeren Code und einem inneren Code, sowie wahlfrei des Invertierens der codierten Daten vor dem Speichern der codierten Daten in den Speicherzellen. Die codierten Daten werden aus den Speicherzellen ausgelesen. Das Decodieren des inneren Codes wird bei den ausgelesenen codierten Daten angewandt, um ein Decodierergebnis zu erzeugen. Zumindest ein Teil der ausgelesenen Daten wird in Abhängigkeit vom Decodierergebnis des inneren Codes bedingt invertiert.
  • Bei einigen Ausführungsformen schließt der innere Code einen Code ein, wobei das Invertieren eines gültigen Codeworts nicht immer ein anderes gültiges Codewort ergibt, und das Anwenden des Decodierens des inneren Codes schließt das Decodieren von mindestens den ausgelesenen codierten Daten und/oder von einer invertierten Version der ausgelesenen codierten Daten ein. Bei anderen Ausführungsformen schließt das Anwenden der Decodierung des inneren Codes das Decodieren sowohl der ausgelesenen codierten Daten als auch der invertierten Version der ausgelesenen codierten Daten ein, und das bedingte Invertieren zumindest des Teils der ausgelesenen Daten schließt das Invertieren zumindest des Teils der ausgelesenen Daten nur dann ein, wenn das Decodierergebnis der invertierten Version fehlerfrei ist und das Decodierergebnis der ausgelesenen codierten Daten nicht fehlerfrei ist.
  • Bei noch weiteren Ausführungsformen schließt das Speichern der Daten bezüglich der Daten das Speichern einer Invertierungsangabe ein, ob die gespeicherten Daten invertiert worden sind; das Lesen der codierten Daten schließt das Auslesen und Decodieren der Invertierungsangabe ein; und das Anwenden der Decodierung des inneren Codes schließt in Abhängigkeit von der Invertierungsangabe das Decodieren nur der ausgelesenen codierten Daten oder nur der invertierten Version der ausgelesenen codierten Daten ein.
  • Bei einer Ausführungsform schließt das bedingte Invertieren von mindestens dem Teil der ausgelesenen Daten die Angabe der Unmöglichkeit ein, zu entscheiden, ob die ausgelesenen Daten invertiert werden sollen, wenn das Decodierergebnis der ausgelesenen, codierten Daten der Invertierungsangabe widerspricht. Bei einer anderen Ausführungsform schließt der innere Code einen Fehlererkennungscode ein, und das bedingte Invertieren zumindest des Teils der ausgelesenen Daten schließt das Invertieren zumindest des Teils der ausgelesenen Daten ein, wenn das Decodierergebnis der invertierten Version gleich einem Ergebnis der Anwendung der Decodierung des inneren Codes auf ein Eins-Wort ist, sowie das Nicht-Invertieren von mindestens dem Teil der ausgelesenen Daten, wenn das Decodierergebnis fehlerfrei ist.
  • Bei noch einer weiteren Ausführungsform schließt das bedingte Invertieren von mindestens dem Teil der ausgelesenen Daten die Angabe der Unmöglichkeit ein, zu entscheiden, ob die ausgelesenen Daten invertiert werden sollen oder nicht, wenn das Decodierergebnis der ausgelesenen, codierten Daten dem Decodierergebnis der invertierten Version der ausgelesenen, codierten Daten widerspricht.
  • Gemäß einer Ausführungsform dieser Erfindung ist zusätzlich eine Vorrichtung bereitgestellt, die einen Speicher einschließt, der ein Array aus Speicherzellen einschließt, sowie Speicherschaltung. Die Speicherschaltung ist konfiguriert, um Daten in einer Gruppe der Speicherzellen zu speichern, indem die Daten unter Verwendung von mindestens einem äußeren Code und einem inneren Code codiert und die codierten Daten wahlfrei vor dem Speichern der codierten Daten in den Speicherzellen invertiert werden, um die codierten Daten aus den Speicherzellen auszulesen, um die Decodierung des inneren Codes zum Erzeugen eines Decodierergebnisses auf die ausgelesenen, codierten Daten anzuwenden, und um mindestens den Teil der ausgelesenen Daten in Abhängigkeit vom Decodierergebnis des inneren Codes bedingt zu invertieren.
  • Gemäß einer Ausführungsform dieser Erfindung ist zusätzlich ein Verfahren zur Datenspeicherung bereitgestellt einschließlich, in einer ersten Programmierphase, des Speicherns erster Daten in einer Gruppe von Speicherzellen über die Programmierung der Speicherzellen in der Gruppe mit einer Anordnung anfänglicher Programmierstufen. In einer auf die erste Programmierphase folgenden zweiten Programmierphase werden zweite Daten in der Gruppe gespeichert, indem die Speicherzellen in der Gruppe, die in der ersten Programmierphase programmiert worden waren auf entsprechenden Stufen in einer vordefinierten teilweisen Untergruppe der anfänglichen Programmierstufen identifiziert werden. Nur die identifizierten Speicherzellen werden mit den zweiten Daten programmiert, um zumindest einige der identifizierten Speicherzellen auf eine oder mehrere zusätzliche Programmierstufen zu setzen, die sich von den anfänglichen Programmierstufen unterscheiden. Die Speicherzellen, in denen die zweiten Daten programmiert wurden, werden erkannt, indem nur eine teilweise Untergruppe der ersten Daten ausgelesen wird. Die zweiten Daten werden aus den erkannten Speicherzellen ausgelesen.
  • Bei einigen Ausführungsformen schließt das Speichern der ersten Daten das Speichern mehrere Datenseiten ein, und das Erkennen der Speicherzellen schließt das Auslesen von nur einer teilweisen Untergruppe der mehreren Seiten ein. Bei anderen Ausführungsformen schließt das Speichern der ersten Daten das Speichern einer LSB-Seite (Least Significant Bit) und einer CSB-Seite (Central Significant Bit) ein, und das Speichern der zweiten Daten schließt das Speichern einer MSB-Seite (Most Significant Bit) ein, und das Erkennen der Speicherzellen schließt das Auslesen von nur der LSB-Seite oder der CSB-Seite ein. Bei noch weiteren Ausführungsformen schließt das Auslesen der LSB-Seite oder der CSB-Seite das Auslesen der LSB-Seite oder der CSB-Seite unter Verwendung eines einzelnen Lesebefehls ein. Bei wiederum weiteren Ausführungsformen schließt das Auslesen der zweiten Daten das Auslesen der MSB-Seite aus den erkannten Speicherzellen unter Verwendung von zwei Auslese-Schwellenwerten ein.
  • Gemäß einer Ausführungsform der vorliegenden Erfindung wird zusätzlich eine Einrichtung zur Datenspeicherung bereitgestellt, die einen Speicher einschließt, der ein Array aus Speicherzellen einschließt, sowie eine Speicherschaltung. Die Speicherschaltung ist konfiguriert, um erste Daten in einer Gruppe der Speicherzellen in einer ersten Programmierphase zu speichern, indem die Speicherzellen in der Gruppe in eine Anordnung anfänglicher Programmierstufen programmiert werden, und um in einer auf die erste Programmierphase folgenden zweiten Programmierphase zweite Daten in der Gruppe zu speichern, indem die Speicherzellen in der Gruppe, die in der ersten Programmierphase programmiert worden waren, mit entsprechenden Stufen in einer vordefinierten teilweisen Untergruppe der anfänglichen Programmierstufen identifiziert werden, und indem nur die identifizierten Speicherzellen mit den zweiten Daten programmiert werden, um mindestens einige der identifizierten Speicherzellen auf eine oder mehrere Programmierstufen zu setzen, die sich von den ursprünglichen Programmierstufen unterscheiden, um die Speicherzellen zu erkennen, in denen die zweiten Daten programmiert wurden, indem nur eine teilweise Untergruppe der ersten Daten ausgelesen wird, und um die zweiten Daten aus den erkannten Speicherzellen auszulesen.
  • Gemäß einer Ausführungsform der vorliegenden Erfindung ist zusätzlich ein Verfahren zur Datenspeicherung bereitgestellt, einschließlich des Identifizierens, in einer Gruppe aus Speicherzellen, einer erwarteten Anzahl der Speicherzellen in der Gruppe, die in einen gegebenen Programmierzustand programmiert werden sollen. Eine Trennung zwischen dem gegebenen Programmzustand und einem benachbarten Programmzustand wird in Abhängigkeit von der erwarteten Anzahl der Speicherzellen vorgegeben, die in den gegebenen Programmierzustand programmiert werden sollen. Die Speicherzellen in der Gruppe werden unter Verwendung der vorgegebenen Trennung programmiert.
  • Bei einigen Ausführungsformen wird der benachbarte Programmierzustand eingerichtet, indem der gegebene Programmierzustand entsprechend einem vorgegebenen Teilungsverhältnis geteilt wird und das Identifizieren der erwarteten Anzahl der Speicherzellen die Bewertung der Speicherzellen einschließt, die unter Verwendung des Teilungsverhältnisses in der gegebenen Programmierungsebene programmiert worden sind. Bei anderen Ausführungsformen schließt das Programmieren der Speicherzellen das Einstellen der Speicherzellen auf mehrere Speicherzustände ein, sodass entsprechende Trennungen zwischen benachbarten Speicherzuständen nicht gleichförmig sind.
  • Gemäß einer Ausführungsform der vorliegenden Erfindung wird zusätzlich eine Einrichtung zur Datenspeicherung bereitgestellt, die einen Speicher einschließt, der ein Array aus Speicherzellen einschließt, sowie eine Speicherschaltung. Die Speicherschaltung ist konfiguriert, um in einer Gruppe der Speicherzellen eine erwartete Anzahl der Speicherzellen in der Gruppe zu identifizieren, die in einen gegebenen Programmierzustand programmiert werden sollen, um in Abhängigkeit von der erwarteten Anzahl der Speicherzellen, die in den gegebenen Programmierzustand programmiert werden sollen, eine Trennung zwischen dem gegebenen Programmierzustand und einem benachbarten Programmierzustand vorzugeben und die Speicherzellen in der Gruppe unter Verwendung der vorgegebenen Trennung zu programmieren.
  • Gemäß einer Ausführungsform der vorliegenden Erfindung ist zusätzlich ein Verfahren zur Datenspeicherung bereitgestellt, einschließlich, in einer ersten Programmierphase, des Speicherns erster Daten in mehreren Gruppen von Speicherzellen über das Programmieren der Speicherzellen in jeder Gruppe in eine entsprechende Anordnung anfänglicher Programmierstufen. In einer auf die erste Programmierphase folgenden zweiten Programmierphase werden zweite Daten in den mehreren Gruppen gespeichert, indem die verfügbaren Speicherzellen in jeder Gruppe identifiziert werden, die in der ersten Programmierphase in entsprechenden Stufen einer vorgegebenen teilweisen Untergruppe der anfänglichen Programmierstufen programmiert worden waren. Nur die identifizierten, verfügbaren Speicherzellen werden mit den zweiten Daten programmiert, sodass die zweiten Daten einer gegebenen Gruppe beginnend ab einer festen Position in den Gruppen der Speicherzellen programmiert werden, und zwar unabhängig von Änderungen der tatsächlichen Anzahl der verfügbaren Speicherzellen, um mindestens einige der verfügbaren Speicherzellen in einer oder mehreren zusätzlichen Programmierungsebenen vorzugeben, die von den anfänglichen Programmierungsebenen unterschiedlich sind.
  • Bei einigen Ausführungsformen schließt das Verfahren das Lesen der zweiten Daten der gegebenen Gruppe über den Zugriff auf die Speicherzellen an der festen Position ein. Bei anderen Ausführungsformen schließen die zweiten Daten mehrere Datenwörter ein, und die Größe jedes Datenworts ist größer als die tatsächliche Anzahl der verfügbaren Zellen in jeder der mehreren Gruppen der Speicherzellen. Bei noch weiteren Ausführungsformen schließt das Lesen der zweiten Daten das Auslesen eines gegebenen Datenworts der mehreren Datenwörter ein, wobei die ersten Daten nur von einer oder mehreren Gruppen der Speicherzellen ausgelesen werden, in denen das gegebene Datenwort programmiert worden war.
  • Bei einer Ausführungsform schließt das Verfahren das Programmieren der nicht programmierten Speicherzellen mit dritten Daten ein, wenn die identifizierten, verfügbaren Zellen mit den zweiten Daten eine oder mehrere der identifizierten, verfügbaren Zellen nicht programmiert lässt. Bei einer anderen Ausführungsform schließen die zweiten Daten mehrere Datenwörter ein, deren Datenwortgröße die Anzahl der verfügbaren Speicherzellen in jeder der mehreren Gruppen von Speicherzellen nicht übersteigt.
  • Gemäß einer Ausführungsform der vorliegenden Erfindung wird zusätzlich eine Einrichtung zur Datenspeicherung bereitgestellt, die einen Speicher einschließt, der ein Array aus Speicherzellen einschließt, sowie eine Speicherschaltung. Die Speicherschaltung ist konfiguriert, um erste Daten in mehreren Gruppen der Speicherzellen in einer ersten Programmierphase zu speichern, indem die Speicherzellen in jeder Gruppe in eine entsprechende Anordnung anfänglicher Programmierstufen programmiert werden, sowie in einer zweiten, auf die erste Programmierphase folgenden Programmierphase, um zweite Daten in den mehreren Gruppen zu speichern, indem verfügbare Speicherzellen in jeder Gruppe identifiziert werden, die in der ersten Programmierphase in entsprechende Stufen in einer vorbestimmten teilweisen Untergruppe der anfänglichen Programmierungsebenen programmiert worden waren, und nur die identifizierten verfügbaren Speicherzellen mit den zweiten Daten programmiert werden, sodass die zweiten Daten einer gegebenen Gruppe beginnend mit einer festen Position in den Gruppen der Speicherzellen programmiert werden, und zwar unabhängig von Änderungen der tatsächlichen Anzahl der verfügbaren Speicherzellen, um mindestens einige der verfügbaren Speicherzellen in eine oder mehrere, zusätzliche Programmierstufen zu programmieren, die sich von den anfänglichen Programmierstufen unterscheiden.
  • Die vorliegende Erfindung wird aus der folgenden ausführlichen Beschreibung ihrer Ausführungsformen in Zusammenhang mit den Zeichnungen besser verständlich, in denen Folgendes gezeigt wird:
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • 1 zeigt ein Blockdiagramm, das schematisch ein Speichersystem gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht.
  • 2 ist ein Diagramm, das schematisch ein Datencodewort gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht.
  • 3A und 3B sind Schaubilder mit der Darstellung der Verteilung von Programmierungsebenen, die gemäß Ausführungsformen dieser Erfindung zum Speichern von Daten mit nicht ganzzahliger Anzahl von Bits pro Zelle verwendet werden.
  • 4A und 4B sind Diagramme, die gemäß Ausführungsformen dieser Erfindung schematisch zwei Verfahren zum Speichern von Daten mit bekanntem Versatz unter den verfügbaren Speicherzellen speichern.
  • 5 ist ein Ablaufdiagramm zeigt, das schematisch ein Verfahren zum Schreiben von Daten mit bekanntem Versatz unter verfügbaren Speicherzellen gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht.
  • 6 ist ein Ablaufdiagramm, das schematisch ein Verfahren zum Auslesen von Daten veranschaulicht, die mit bekanntem Versatz unter verfügbaren Speicherzellen gemäß einer Ausführungsform der vorliegenden Erfindung geschrieben worden sind.
  • DETAILLIERTE BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
  • Überblick
  • Das Speichern von Daten unter Verwendung einer nicht ganzzahligen Anzahl von Bits pro Zelle kann gegenüber der Verwendung einer Ganzzahl vorteilhaft sein, da es die Verbesserung der Speicherdichte oder Zuverlässigkeit ermöglicht, wobei eine erhöhte bzw. verminderte Anzahl von Programmierstufen verwendet wird, ohne die Gesamtzahl von Stufen auf eine ganzzahlige Potenz von zwei einzuschränken.
  • Ausführungsformen dieser Erfindung stellen verbesserte Verfahren und Systeme zum Management der Datenspeicherung unter Verwendung einer nicht ganzzahligen Anzahl von Bits pro Speicherzelle bereit. Die offenbarten Ausführungsformen setzen mehrere Varianten eines Zwei-Phasen-Programmierschemas ein. Verschiedene Beispiele derartiger Zwei-Phasen-Programmierschemata sind beispielsweise beschrieben in der US-Patentanmeldung 13/192,501, eingereicht am 28. Juli 2011, die für den Anmelder der vorliegenden Patentanmeldung erteilt wurde und deren Offenbarung durch Verweis hierin übernommen wird. Bei derartigen Schemata werden die Speicherzellen in der ersten Programmierphase unter Verwendung einer Anzahl von Programmierungsebenen programmiert, die eine ganzzahlige Potenz von zwei ist. In der zweiten Programmierphase wird ein zusätzliches Bit nur in den Zellen gespeichert, die jeweils in der ersten Phase in eine Ebene in einer Gruppe von zwei oder mehreren ausgewählten Ebenen programmiert worden waren. Diese Zellen eignen sich für die Programmierung in der zweiten Phase und werden hierin auch als „verfügbare Zellen” bezeichnet.
  • Die genaue Zahl verfügbarer Zellen ist datenabhängig und daher variabel. Daher sind bei einigen Ausführungsformen Datenseiten, die in der ersten Phase geschrieben werden, wahlfrei „Bit-gedreht” (d. h., mit invertierter Polarität der Bits), um eine ausreichende Anzahl verfügbarer Zellen zum Speichern der Daten der zweiten Phase sicherzustellen. Die Bit-Drehung kann jedoch problematisch sein, wenn die Daten einer Fehlerkorrektur und/oder Fehlererfassungscodes unterzogen werden, wobei ein invertiertes, gültiges Codewort nicht unbedingt auch ein gültiges Codewort ist. Beispiele von Codes, die keine Abbildung jedes invertierten Codeworts auf ein anderes gültiges Codewort garantieren, schließen zyklische Redundanzprüfung (CRC) und BCH (Bose-Chaudhuri-Hocquenghem) ein. Bei einer Ausführungsform verwendet ein Codierschema innere und äußere Codes. Der innere Code (z. B. CRC oder BCH) kann in Verbindung mit dem äußeren Code (z. B. Low-Density-Parity-Check-Codes – LDPC) eingesetzt werden, um beispielsweise Bedingungen für die frühzeitige Beendigung des iterativen LDPC-Decoders zu erkennen, oder zur Auflösung von Überfüllungsszenarien. Bei einigen Ausführungsformen ist die Polarität des gespeicherten Codeworts durch ein entsprechendes Invertierungs-Bit angegeben, das normalerweise (jedoch nicht notwendigerweise) im Codewort eingebettet ist.
  • Bei einer Ausführungsform umfasst der innere Code einen Fehlererkennungscode wie z. B. CRC-Code (oder im Fehlererkennungsmodus BCH-Code). Daten werden aus den Speicherzellen ausgelesen, der äußere Code wird decodiert, und CRC-Decodierung wird sowohl bei den gelesenen Daten als auch bei den gleichen, invertierten Daten angewandt (möglichst parallel zum äußeren Decoder). Die Polarität wird basierend darauf bestimmt, ob eine CRC-Decodierung angibt, dass keine Fehler gefunden wurden (sowie möglicherweise beim Invertierungs-Bit). Bei einer anderen Ausführungsform wird die CRC-Decodierung entsprechend der Polarität des Invertierungs-Bits in den gelesenen Daten nur einmal angewandt. Bei noch einer weiteren Ausführungsform wird die Ausgabe des CRC-Decoders verglichen sowohl mit einem Nullwort (das „keine Invertierung” angibt) als auch mit einem Wort, das gleich der auf ein Eins-Wort (das erfolgte Invertierung angibt) angewandten CRC ist. Bei noch einer weiteren anderen Ausführungsform umfasst der innere Code einen Fehlerkorrekturcode wie z. B. einen BCH-Code (konfiguriert für die Betriebsart Fehlerkorrektur), und das Decodieren wird sowohl bei den gelesenen Daten als auch bei den gleichen, invertierten Daten angewandt. Die Polarität des Codeworts wird entsprechend der Feststellung bestimmt, ob die Ausgabe der beiden BCH-Decoder decodierbar, d. h. fehlerfrei, ist.
  • Bei einigen Ausführungsformen wird jede Speicherzelle in der ersten Phase (des vorstehend erwähnten Zwei-Phasen-Programmierschemas) programmiert, um eine von vier Anfangsstufen anzunehmen, von denen zwei für die zweite Phase ausgewählt werden. In der zweiten Phase wird ein zusätzliches Bit nur in die Zellen geschrieben, die in einer der zwei ausgewählten Ebenen programmiert worden waren. Die Zellbelegungen der ausgewählten Stufen werden somit in der zweiten Phase in etwa die Hälfte geteilt, wodurch sich eine Gesamtzahl von sechs Stufen ergibt, von denen vier etwa halb belegt sind. Da entsprechend diesem Schema die Hälfte der Zellen 3 Bits pro Zelle speichert und die andere Hälfte 2 Bits pro Zelle speichert, ist die durchschnittliche Anzahl, die von der Einrichtung gespeichert wird, 2,5 Bits pro Zelle.
  • Bei den offenbarten Ausführungsformen, die ein sechsstufiges Programmierschema entsprechend der Beschreibung weiter oben verwenden, sind zum Mapping von Drei-Bit-Kombinationen auf Programmierstufen dedizierte Schemata vorgesehen, um die Identifizierung von in der zweiten Phase programmierten Zellen zu aktivieren, ohne die gesamten, in der ersten Phase programmierten Daten auslesen zu müssen. Bei einer Ausführungsform erfolgt die Identifizierung der Zellen durch Auslesen nur der CSB-Seite (Central Significance Bit) unter Verwendung von zwei Lese-Schwellenwerten. Bei einer anderen Ausführungsform bezieht die Identifizierung der Zellen das Auslesen nur der LSB-Seite (Least Significant Bit) unter Verwendung eines einzelnen Lese-Schwellenwerts ein. Die offenbarten Verfahren verzichten daher auf unnötige Lese- und Decodiervorgänge.
  • Bei einigen Ausführungsformen wird statt eines gleichmäßigen Abstands zwischen Stufen der Schwellenwert-Spannungsabstand zwischen den Programmierstufen auf der Basis der Zellbelegung der Stufen bestimmt. Bei derartigen Ausführungsformen ist der Abstand oder die Trennung zwischen benachbarten Stufen, die weniger stark belegt sind, enger vorgegeben als der Abstand zwischen benachbarten Stufen, die stark belegt sind. Eine derartige ungleichmäßige Beabstandung kann beispielsweise verwendet werden, um eine gleichförmige Wahrscheinlichkeit für Lesefehler über alle Ebenen zu erzielen.
  • Bei einigen Ausführungsformen werden Wörter mit der Länge N Bit (z. B. N-Bit-Codewörter codierter Daten) in Gruppen von N Zellen geschrieben, die auch als Zellgruppen bezeichnet werden. Bei derartigen Ausführungsformen wird vor dem Speichern in der ersten Phase wahlfrei eine Bit-Invertierung angewandt, um entsprechend der Beschreibung weiter oben eine ausreichende Stufenbelegung (d. h. eine ausreichende Anzahl verfügbarer Zellen) in der zweiten Phase sicherzustellen. Falls zusätzlich drei Ebenen (von den vier in der ersten Phase verwendeten Stufen) in der zweiten Phase geteilt werden, sind nur etwa 3/4 der Zellen in jeder Zellgruppe für das Speichern eines zusätzlichen Bits verfügbar. Bei einigen Ausführungsformen werden drei N-Bit-Codewörter unter den verfügbaren Zellen von vier Zellgruppen gespeichert. Jedes Codewort ist in zwei Segmente unterteilt, die in zwei separate Zellgruppen mit einem bestimmten festen Versatz unter den verfügbaren Zellen geschrieben werden.
  • Bei einer beispielhaften Ausführungsform werden die Segmente der Codewörter unter Verwendung aller verfügbaren Zellen in Folge geschrieben. Bei dieser Ausführungsform ist der Versatz (Offset) unter den verfügbaren Zellen, in die jedes Segment geschrieben wird, datenabhängig. Zum Auslesen eines Datenworts werden die Offset-Werte der jeweiligen Segmente durch Auslesen von Daten mindestens aus Zellgruppen bestimmt, in die keine der entsprechenden Segmente geschrieben werden.
  • Bei anderen Ausführungsformen werden die Segmente der Codewörter mit bekanntem, festen Versatz unter den verfügbaren Zellen in jeder Zellgruppe geschrieben. Durch die Verwendung fester Offset-Werte erfordert das Auslesen eines gegebenen Codeworts das Lesen von Daten nur aus den Zellgruppen, in die die Segmente des betreffenden Codeworts geschrieben werden. Die ausgelesenen Segmente werden anschließend kombiniert, um das ursprüngliche Codewort wiederherzustellen. Die Verwendung bekannter Offset-Werte ermöglicht daher den Verzicht auf unnötige Lese- und Decodiervorgänge.
  • Bei anderen Ausführungsformen wird die Länge der Daten in der zweiten Phase anhand der Eignung für die Mindestanzahl verfügbarer Zellen in den Zellgruppen gewählt, und dies vereinfacht daher die Lese- und Schreibvorgänge von Daten. Bei derartigen Ausführungsformen können jedoch separate unterschiedliche Codierschemata für die erste und die zweite Programmierphase erforderlich sein, sodass das gesamte Codierschema komplexer wird.
  • Systembeschreibung
  • 1 zeigt ein Blockdiagramm, das schematisch ein Speichersystem 20 gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht. Das System 20 kann in vielfältigen Host-Systemen und Vorrichtungen verwendet werden, wie beispielsweise bei Rechenvorrichtungen, Mobiltelefonen oder anderen Kommunikationsterminals, Wechselspeichermodulen (z. B. als „USB-” oder „Flash-Laufwerke” bezeichnet), Solid-State-Drives (SSD), Digitalkameras, Musik- und anderen Medienwiedergabevorrichtungen und/oder jedem anderen System oder jeder anderen Vorrichtung, in dem oder der Daten gespeichert und abgerufen werden.
  • Das System 20 umfasst eine Speichereinrichtung 24, die Daten in einem Speicherzellen-Array 28 speichert. Das Speicher-Array umfasst mehrere analoge Speicherzellen 32. Im Zusammenhang der vorliegenden Patentanmeldung sowie in den Patentansprüchen wird der Begriff „analoge Speicherzelle” verwendet, um eine Speicherzelle zu beschreiben, die einen kontinuierlichen, analogen Wert eines physikalischen Parameters aufnimmt, wie z. B. eine elektrische Spannung oder Ladung. Das Array 32 kann analoge Solid-State-Speicherzellen beliebiger Art umfassen, wie z. B. NAND-, NOR- und Charge-Trapping-Flash-(CTF)-Speicherzellen, Phasenwechsel-RAM-Zellen (PRAM, auch bezeichnet als Phase-Change-Memory-(PCM)), Nitrid-Nur-Lese-Speicher (NROM), ferroelektrische RAM-(FRAM)-Zellen, magnetische RAM-(MRAM)-Zellen und/oder dynamische RAM-(DRAM)-Zellen. Obwohl sich die hier beschriebenen Ausführungsformen hauptsächlich auf analogen Speicher beziehen, können die offenbarten Verfahren auch mit verschiedenen anderen Speichertypen verwendet werden.
  • Die in den Zellen gespeicherten Ladungspegel und/oder die analogen Spannungen oder Ströme, die in die Zellen geschrieben oder daraus ausgelesen werden, werden hierin gemeinsam bezeichnet als analoge Werte, Speicherwerte oder analoge Speicherwerte. Obwohl die hierin beschriebenen Ausführungsformen hauptsächlich Schwellenwertspannungen behandeln, können die hierin beschriebenen Verfahren und Systeme auch mit beliebigen anderen, geeigneten Arten von Speicherwerten verwendet werden.
  • Das System 20 speichert Daten in den analogen Speicherzellen, indem die Zellen programmiert werden, um entsprechende Speicherzustände anzunehmen, die auch als Programmierstufen bezeichnet werden. Die Programmierstufen werden aus einer endlichen Menge möglicher Stufen ausgewählt, und jede Stufe entspricht einem bestimmten Speicher-Nennwert. Beispielsweise kann eine 2-Bit/Zelle-MLC-Zelle programmiert werden, um eine von vier möglichen Programmierstufen anzunehmen, indem ein bis vier mögliche Speicher-Nennwerte in die Zelle geschrieben werden. Die hierin beschriebenen Verfahren behandeln hauptsächlich Speicherdichten einer nicht ganzzahligen Anzahl von Bits pro Speicherzelle, d. h. eine Anzahl von Programmierstufen, die nicht eine ganzzahlige Potenz von zwei ist.
  • Die Speichereinrichtung 24 umfasst eine Lese/Schreib-(R/W)-Einheit 36, die Daten zur Speicherung in der Speichereinrichtung in analoge Speicherwerte umwandelt und sie in Speicherzellen 32 schreibt. Bei alternativen Ausführungsformen führt die R/W-Einheit die Umwandlung nicht durch, sondern sie ist mit Spannungs-Samples ausgestattet, d. h. mit den Spannungswerten zur Speicherung in den Zellen. Beim Auslesen von Daten aus dem Array 28 wandelt die R/W-Einheit 36 die Speicherwerte der Speicherzellen 32 in digitale Samples mit einer ganzzahligen Auflösung von einem oder mehreren Bits um. Daten werden normalerweise in Gruppen, die als Seiten bezeichnet werden, in die Speicherzellen geschrieben und daraus ausgelesen. Bei einigen Ausführungsformen kann die R/W-Einheit eine Gruppe von Zellen 32 löschen, indem die Zellen mit einem oder mehreren negativen Löschimpulsen beaufschlagt werden.
  • Die Speicherung und Abfrage von Daten in die und aus der Speichereinrichtung 24 wird durch eine Speichersteuerung 40 ausgeführt. Die Speichersteuerung 40 umfasst eine Schnittstelle 44 zur Kommunikation mit der Speichereinrichtung 24, einen Prozessor 48 und eine ECC-Einheit 50 (Error Correcting Code). Die offenbarten Verfahren können durch die Speichersteuerung 40, durch die R/W-Einheit 36 oder durch beide ausgeführt werden. Die Speichersteuerung 40 und die R/W-Einheit 36 werden daher in diesem Kontext gemeinsam als Speicherschaltung bezeichnet, die die offenbarten Verfahren durchführt.
  • Die Speichersteuerung 40 kommuniziert mit einem Host 52, um Daten zur Speicherung in der Speichereinrichtung anzunehmen und um aus der Speichereinrichtung abgerufene Daten auszugeben. Die ECC-Einheit 50 codiert die Daten zur Speicherung unter Verwendung eines geeigneten ECC-Codes, und sie decodiert den ECC-Code der aus dem Speicher abgerufenen Daten. Jeder geeignete ECC-Typ kann verwendet werden, wie z. B. Low Density Parity Check (LDPC), Reed-Solomon (RS) oder Bose-Chaudhuri-Hocquenghem (BCH). Bei einigen Ausführungsformen umfasst die ECC-Einheit 50 zusätzlich zu einem Fehlerkorrekturcode ferner einen weiteren (üblicherweise kleineren) Fehlerkorrektur- oder Fehlererkennungscode. Beispielcodes, die für derartigen Code verwendet werden können, schließen BCH zur Fehlerkorrektur und zyklische Redundanzprüfung (CRC) zur Fehlererkennung ein. Die Ausgabe der ECC-Einheit 50 in der Codierrichtung wird auch als „Codewort” bezeichnet.
  • Die Speichersteuerung 40 kann in Hardware implementiert sein, z. B. unter Verwendung von einem oder mehreren anwendungsspezifischen integrierten Schaltungen (ASIC) oder vor Ort programmierbare Gatter-Arrays (FPGA). Alternativ dazu kann die Steuereinheit einen Mikroprozessor umfassen, der geeignete Software ausführt, oder eine Kombination aus Hardware- und Software-Elementen.
  • Die Konfiguration von 1 stellt eine beispielhafte Systemkonfiguration dar, die lediglich zu Zwecken der konzeptionellen Klarheit gezeigt wird. Jede andere geeignete Speichersystemkonfiguration kann ebenso verwendet werden. Obwohl das Beispiel aus 1 dabei eine einzelne Speichereinrichtung zeigt, kann die Speichersteuerung 40 bei alternativen Ausführungsformen mehrere Speichereinrichtungen 24 steuern. Elemente, die für das Verständnis der Grundgedanken der vorliegenden Erfindung nicht notwendig sind, wie beispielsweise verschiedene Schnittstellen, Ansprechschaltungen, Zeittaktungs- und Sequenzierschaltungen und Debugging-Schaltungen, wurden zur Klarheit in den Figuren weggelassen.
  • In der in 1 gezeigten beispielhaften Systemkonfiguration sind die Speichereinrichtung 24 und die Speichersteuerung 40 als zwei separate integrierte Schaltungen (ICs) implementiert. In alternativen Ausführungsformen können die Speichereinrichtung und die Speichersteuerung jedoch auf separaten Halbleiterchips in einer einzigen Mehrfachchippackung (Multi-Chip Package (MCP)) oder einem einzigen System auf einem Chip (System an Chip (SoC)) integriert und durch einen internen Bus miteinander verbunden sein. Weiter alternativ dazu kann der Funktionsumfang der Speichersteuerung 40 ganz oder teilweise in Software implementiert sein und durch einen Prozessor oder ein anderes Element des Host-Systems ausgeführt werden. In manchen Ausführungsformen können der Host 44 und die Speichersteuerung 40 auf demselben Chip oder auf separaten Chips im selben Einrichtungspaket hergestellt werden.
  • In manchen Ausführungsformen umfasst die Speichersteuerung 40 einen universellen Prozessor, der in Software programmiert ist, um die hierin beschriebenen Funktionen auszuführen. Die Software kann in elektronischer Form, zum Beispiel über ein Netzwerk, auf den Prozessor heruntergeladen werden, oder sie kann alternativ oder zusätzlich dazu auf nichtflüchtigen gegenständlichen Medien bereitgestellt werden, wie beispielsweise einem magnetischen, optischen oder elektronischen Speicher.
  • Bei einer beispielhaften Konfiguration des Arrays 28 sind die Speicherzellen 32 in mehreren Zeilen und Spalten angeordnet, und jede Speicherzelle umfasst einen Floating-Gate-Transistor. Die Gates des Transistors in jeder Zeile sind durch Wortleitungen verbunden, und die Source-Anschlüsse der Transistoren in jeder Spalte sind durch Bitleitungen verbunden. Im vorliegenden Kontext wird der Begriff „Zeile” im konventionellen Sinn verwendet, um eine Gruppe von Speicherzellen zu bezeichnen, die durch eine gemeinsame Wortleitung gespeist werden, und der Begriff „Spalte” bezeichnet eine Gruppe von Speicherzellen, die durch eine gemeinsame Bitleitung gespeist werden. Die Begriffe „Zeile” und „Spalte” geben keine bestimmte physikalische Ausrichtung der Speicherzellen relativ zur Speichereinrichtung an. Die Speicheranordnung ist normalerweise auf mehrere Speicherseiten unterteilt, d. h. in Gruppen aus Speicherzellen, die gleichzeitig programmiert und ausgelesen werden.
  • Bei einigen Ausführungsformen sind Speicherseiten in Abschnitte unterteilt. Seiten können auf verschiedene Weisen auf Wortleitungen abgebildet werden. Jede Wortleitung kann eine oder mehrere Seiten speichern. Eine gegebene Seite kann in allen Speicherzellen einer Wortleitung gespeichert werden oder in einer Untermenge der Speicherzellen (z. B. den gerade oder ungerade nummerierten Speicherzellen).
  • Das Löschen von Zellen erfolgt normalerweise in Blöcken, die mehrere Seiten enthalten. Typische Speichereinrichtungen können tausende von Löschblöcken umfassen. In einer typischen Zwei-Bit-pro-Zelle-MLC-Einrichtung ist jeder Löschblock in der Größenordnung von 32 Wortleitungen, die jeweils zehntausende von Zellen umfassen. Jede Wortleitung einer derartigen Einrichtung ist oft in vier Seiten partitioniert (gerade/ungerade nummerierte Zellen, niedrigst-/höchstwertiges Bit der Zellen). Einrichtungen mit drei Bits pro Zelle und 32 Wortleitungen pro Löschblock haben dann 192 Seiten pro Löschblock, und Einrichtungen mit vier Bits pro Zelle haben 256 Seiten pro Löschblock. Alternativ dazu können auch andere Blockgrößen und Konfigurationen verwendet werden. Einige Speichereinrichtungen umfassen zwei oder mehr Speicherzellenanordnungen, die oft als Ebenen bezeichnet werden. Da jede Ebene eine bestimmte „belegte” Periode zwischen aufeinanderfolgenden Schreibvorgängen hat, können Daten alternativ dazu in die unterschiedlichen Ebenen geschrieben werden, um die Programmiergeschwindigkeit zu erhöhen.
  • Speichern von Daten unter Verwendung einer nicht ganzzahligen Anzahl von Bits pro Zelle
  • Das Speichern von Daten unter Verwendung einer nicht ganzzahligen Anzahl von Bits pro Zelle entspricht dem Programmieren der Speicherzellen zur Übernahme von Programmierstufen oder Zuständen, deren Anzahl nicht eine ganzzahlige Potenz von zwei ist. Bei einigen Ausführungsformen verwendet das System 20 ein zweistufiges Programmierschema zum Speichern der Daten unter Verwendung einer nicht ganzzahligen Anzahl von Bits pro Zelle.
  • In der ersten Phase werden die Speicherzellen unter Verwendung einer Anzahl von Programmierungsebenen programmiert, die eine ganzzahlige Potenz von zwei ist. Beispielsweise werden die Zellen bei einer TLC-Einrichtung zunächst unter Verwendung von nur vier Stufen (aus den acht möglichen Stufen) programmiert. In der zweiten Phase können nur Zellen, die in der ersten Phase in bestimmte Stufen unter den Stufen der ersten Phase programmiert worden waren, mit einem zusätzlichen Bit programmiert. Bei dem achtstufigen TLC-Beispiel umfassen die Stufen der ersten Phase, die zur Programmierung in der zweiten Phase ausgewählt werden, eine Gruppe aus einer, zwei oder drei Stufen, sodass sich eine Gesamtzahl von fünf, sechs bzw. sieben Stufen ergibt.
  • In der zweiten Phase bestimmt der Wert („0” oder „1”) des zusätzlichen Bits, ob die entsprechende Zelle die Programmierstufe beibehält, auf die die Zelle in der ersten Phase programmiert worden war, oder ob sie auf eine andere, typischerweise höhere Programmierstufe programmiert wird, die sich von allen Stufen der ersten Phase unterscheidet. Somit wird eine Programmierstufe, die in der ersten Phase mit einer gegebenen Anzahl von Zellen gefüllt worden war, in der zweiten Phase ungefähr in zwei Hälften geteilt, wobei ähnliche „0”- und „1”-Verteilungen übernommen werden. Verschiedene Beispiele derartiger Zweiphasen-Programmierschemata sind beispielsweise in der weiter oben zitierten US-Patentanmeldung 13/192,501 beschrieben.
  • Bei einigen Ausführungsformen umfassen die zu programmierenden Daten separate Datenseiten, z. B. Seiten geordneter Bitwertigkeit. Die Speicherschaltung speichert in der ersten Phase die Seiten mit niedrigerer Bitwertigkeit als das höchstwertige Bit, und nur die höchstwertige Datenseite in der zweiten Phase. Beispielsweise speichert die Speicherschaltung bei einer TLC-Einrichtung die Seiten der niedrigstwertigen Bits (LSB) und der mittelwertigen Bits (CSB) in der ersten Phase. Anschließend speichert die Speicherschaltung auf der Basis der in der ersten Phase gespeicherten Daten während der zweiten Phase eine Seite höchstwertiger Bits (MSB). Beispiele von Programmierstufen der ersten und zweiten Phase, Stufen-Splitting und Mapping-Schemata von Bit-Kombinationen und Programmierstufen sind im Folgenden mit Bezug auf 3A und 3B dargestellten Programmierstufen.
  • Verfahren zum Decodieren invertierter Codewörter
  • Beim Programmieren von Daten in der zweiten Phase (z. B. MSB-Daten) ist die Gesamtzahl der Zellen, die die zu teilenden Programmierstufen füllen, datenabhängig, und sie kann sich als unzureichend erweisen. Bei einigen Ausführungsformen ist die Bit-Polarität der in der ersten Phase geschriebenen Datenseiten wahlfrei invertiert, um eine ausreichende Zellpopulation der in der zweiten Phase zu teilenden Stufen sicherzustellen. Wenn die Daten zusätzlich einer Fehlerkorrekturcodierung unterzogen werden, kann die konventionelle Decodierung der invertierten Daten möglicherweise nicht praktikabel sein, da die invertierten Daten möglicherweise kein gültiges Codewort umfassen.
  • Zur Erhöhung der Speicherzuverlässigkeit schützt die Speicherschaltung die zu programmierenden Daten bei einigen Ausführungsformen unter Verwendung eines geeigneten Codierschemas, das üblicherweise durch die ECC-Einheit 50 implementiert wird.
  • 2 ist ein Diagramm, das schematisch ein Codewort 70 gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht. Bei dem Beispiel aus 2 umfasst das Codewort 70 Datenbits 74 (z. B. LSB- oder CSB-Daten in der ersten Phase), ein Inversions-Bit 78, Paritätsbits 82 des inneren Codes und Paritätsbits 86 des äußeren Codes. Im vorliegenden Beispiel umfassen die Paritätsbits 86 einen LDPC-Code, den die ECC-Einheit 50 zusammen mit Datenbits 74, dem Inversions-Bit 78 und den Paritätsbits 82 des inneren Codes anwendet. Somit umfasst die Gesamtanordnung aus Datenbits 74, Inversion-Bit 78, Paritätsbits 82 des inneren Codes und Paritätsbits 86 des äußeren Codes ein LDPC-Codewort. Weiter umfassen im Beispiel aus 2 die Paritätsbits 82 einen CRC- oder BCH-Code, den die ECC-Einheit 50 auf Datenbits 74 und das Inversion-Bit 78 anwendet. In der beschriebenen Konfiguration kann der äußere LDPC-Code Fehler in den Paritätsbits 82 des inneren Codes korrigieren, wodurch die Verwendung des inneren Codes zur frühzeitigen Beendigung der LDPC-Decodier-Iterationen oder zur Löschung von verbleibenden Fehlern nach dem äußeren Decodieren entsprechend der folgenden Erläuterung ermöglicht wird.
  • Die Konfiguration von 2 stellt eine beispielhafte Konfiguration dar, die lediglich zu Zwecken der konzeptionellen Klarheit gezeigt wird, und andere geeignete Konfigurationen können ebenfalls eingesetzt werden. Beispielsweise können auch andere geeignete Codes, Codierschemata sowie Umfänge und Ordnungen der unterschiedlichen Elemente des Codeworts 70 verwendet werden.
  • Bei einigen Ausführungsformen kann der innere Code 82 (z. B. einschließlich eines CRC- oder BCH-Codes) beispielsweise in Verbindung mit dem LDPC-Code 86 eingesetzt werden, um Bedingungen für die frühzeitige Beendigung zu erkennen, während das LDPC-Codewort iterativ decodiert wird, oder um Überfüllungsszenarien im LDPC-Decoder zu erkennen und abzumildern. Als weiteres Beispiel kann, wenn der innere Code einen Fehlerkorrekturcode (z. B. BCH) umfasst, der Code 82 zum Abschwächen verbliebener Fehler („Restfehler”) verwendet werden, die in der Ausgabe des LDPC-Decoders verbleiben. Die US-Patentanmeldung 12/913,815, eingereicht am 28. Oktober 2010, die für den Anmelder der vorliegenden Patentanmeldung erteilt wurde und deren Offenbarung durch Verweis hierin übernommen wird, beschreibt mehrere Verfahren zur Durchführung der frühzeitigen Beendigung während des iterativen Decodierens.
  • Bei einigen Ausführungsformen setzt die Speicherschaltung das Inversion-Bit 78 anfänglich auf „0” und invertiert wahlfrei das Codewort 70 oder verdreht seine Bits, um eine ausreichende Stufenpopulation von Zellen in den entsprechend der Beschreibung weiter oben zu teilenden Stufen sicherzustellen. Beim Lesen der Daten ruft die Speicherschaltung das Codewort aus dem Array 28 ab und wendet mittels der ECC-Einheit 50 das Decodieren an. Falls die decodierte Bit-Inversion 78 gleich „1” ist, vertauscht die Speicherschaltung die Datenbits des Codeworts vor der Übergabe der Bits 74 an den Most zurück. Zum korrekten Funktionieren der Decodierung umfasst jeder invertierte Code jedoch auch ein gültiges Codewort. Das bedeutet, dass jedes gültige Codewort des Codierschemas per Invertierung auf ein anderes gültiges Codewort abgebildet werden muss. Durch den Einschluss der Anforderung, dass jede Zeile der Paritätsprüf-Matrix des Codes gerade gewichtet ist (d. h., dass die Zeile eine gerade Anzahl von Elementen ungleich Null umfasst), können LDPC-Codes zur Unterstützung der Eigenschaft konzipiert werden, dass eine Bitverdrehung für jedes gültige Codewort ein anderes gültiges Codewort ergibt. Diese Eigenschaft lässt sich bei CRC- und BCH-Codes jedoch nur schwer oder gar nicht erreichen. In der folgenden Beschreibung nehmen wir an, dass der äußere Code (z. B. LDPC) die erwähnte Eigenschaft der Gültigkeit invertierter gültiger Codewörter unterstützt.
  • Wir beschreiben nun mehrere Verfahren zum Decodieren des Codeworts 70 und zur Bestimmung, ob es vor dem Speichern invertiert war und daher rückinvertiert werden soll. Bei den offenbarten Ausführungsformen umfasst der innere Code 82 einen Code, der die Gültigkeit der entsprechenden Bit-verdrehten Codewörter nicht gewährleistet. In der folgenden Beschreibung bezeichnet X ein CRC- oder BCH-Codewort. Beispielsweise kann X Datenbits 74, ein Inversions-Bit 78 und Paritätsbits 82 umfassen. Zusätzlich soll ~X die Bit-verdrehte Version von X bezeichnen, und CRC(X) oder BCH(X) bezeichnen den Decodiervorgang. Weiter bezeichnen NULLEN und EINSEN „0”- bzw. „1”-Sequenzen. Im Kontext der vorliegenden Patentanmeldung und in den Patentansprüchen bezieht sich die Decodierung des inneren Codes sowohl auf Fehlererkennung wie auch auch Fehlerkorrekturcodes.
  • Wir beschreiben zunächst mehrere Ausführungsformen, bei denen der innere Code 82 einen Fehlererkennungscode umfasst. Obwohl sich die Beschreibung hauptsächlich auf Ausführungsformen bezieht, die CRC-Codierung einsetzen, können auch andere geeignete Fehlererkennungscodes verwendet werden, wie z. B. ein BCH-Code, der für den Betrieb im Fehlererkennungsmodus konfiguriert ist. Gemäß einer Eigenschaft von Fehlererkennungscodes gilt, falls X fehlerfrei ist, CRC(X) = NULLEN, und andererseits ist die Wahrscheinlichkeit sehr gering, dass die Anwendung von CRC-Decodierung auf einen fehlerhaften Code zu NULLEN führen muss.
  • Bei einer Ausführungsform wendet die ECC-Einheit 50 zwei CRC-Decodiervorgänge an, und zwar CRC(X) und CRC(~X) (nach Möglichkeit parallel). Falls CRC(X) = NULLEN, betrachtet die Speicherschaltung das Codewort 70 als nicht-invertiert gespeichert. Falls andererseits CRC(~X) = NULLEN gilt, wird das Codewort 70 als invertiert angenommen.
  • Andererseits (d. h. wenn keiner der beiden CRC-Decoder das NULLEN-Resultat ergibt) ist das Kriterium für frühzeitige Beendigung des iterativen LDPC-Decoders nicht erfüllt.
  • Bei einer anderen Ausführungsform führt die ECC-Einheit 50 basierend auf dem Wert des Inversion-Bits 78 nur eine CRC-Decodierung aus. Falls das Inversions-Bit keine Inversion angibt („0”), decodiert die ECC-Einheit 50 CRC(X). Anderenfalls gibt das Bit an, dass das Codewort invertiert worden ist, und die ECC-Einheit 50 decodiert CRC(~X). Die ECC-Einheit 50 kann eine frühzeitige Beendigung der LDPC-Decodier-Iterationen durchführen, wenn die entsprechende CRC-Decodierung ein Resultat gleich NULLEN (ZEROS) ergibt.
  • Bei noch einer weiteren Ausführungsform beruht das Decodierschema darauf, dass der innere Code ein linearer Code ist. Entsprechend der Linearitätseigenschaft gilt CRC(~X + ONES) = CRC(~X) + CRC(ONES), wobei „+” Bit-weises XOR bezeichnet. Da jedoch gilt X = ~X + ONES, folgern wir, dass ZEROS = CRC(X) = CRC(~X) + CRC(ONES). Bei der beispielhaften Ausführungsform führt die ECC-ECC-Einheit 50 die CRC-Decodierung aus und prüft, ob das Resultat gleich CRC(ONES) oder ZEROS ist, um zu bestimmen, ob das Codewort invertiert war bzw. nicht. Man beachte, dass für jeden unterschiedlichen inneren Code der Wert CRC(ONES) vorberechnet und nur einmal gespeichert werden muss.
  • Bei den vorstehenden Ausführungsformen kann die ECC-Einheit 50 (in seltenen Fällen) auf einen Konflikt zwischen dem Resultat der CRC(·)-Decodierung und dem decodierten Wert der Bit-Inversion 78 treffen. Zusätzlich führt das Ergebnis der Anwendung von CRC(X) und CRC(~X) möglicherweise nicht immer zu einer abschließenden Entscheidung, ob die ausgelesenen Daten invertiert werden oder nicht. In solchen Fällen verfügt die ECC-Einheit über eine geeignete Angabe. Die ECC-Einheit 50 kann ein beliebiges geeignetes Decodierverfahren verwenden, wenn ein derartiger Konflikt oder eine unschlüssige Folgerung auftreten. Beispielsweise kann die ECC-Einheit 50 entscheiden, den iterativen LDPC-Decoder nicht zu beenden.
  • Einige der weiter oben in Zusammenhang mit Fehlererkennungscodes beschriebenen Ausführungsformen sind auch auf Fehlerkorrekturcodes anwendbar.
  • Wir beschreiben jetzt eine Ausführungsform, bei der der innere Code 82 einen Fehlerkorrekturcode wie z. B. BCH umfasst (konfiguriert für die Betriebsart Fehlerkorrektur). Die ECC-Einheit 50 wendet zwei Decodiervorgänge an, nämlich BCH(~X) und BCH(X). Wenn nur einer der Werte ~X oder X decodierbar ist, d. h. ein fehlerfreies Ergebnis decodiert, betrachtet die Speicherschaltung das Codewort 70 als Bit-verdreht bzw. nicht. Falls sowohl ~X als auch X decodierbar sind oder beide kein fehlerfreies Resultat erzeugen, kann ein anderes Kriterium angewandt werden, um den Inversionsstatus zu bestimmen, beispielsweise basierend auf dem Wert mit der (nach dem Decodieren) geringsten Anzahl von Fehlern. Andere Kriterien schließen beispielsweise Konsistenz mit dem Inversions-Bit nach dem Decodieren ein oder die Gewichtung des Fehlermusters. Bei alternativen Ausführungsformen gibt die ECC-Einheit 50 ein unschlüssiges oder mehrfach decodierendes Ergebnis an. Bei Ausführungsformen, bei denen der innere Fehlerkorrekturcode für „Restfehler”-Szenarien verwendet wird, muss der Decoder für den inneren Code nur selten angewandt werden, und daher beansprucht eine zweimalige BCH-Decodierung (pro Codewort) nur einen geringen Anstieg der benötigten Rechenleistung.
  • Bei den vorstehend beschriebenen Ausführungsformen wird allgemein angenommen, dass im äußeren Code invertierte gültige Codewörter auf andere gültige Codewörter abgebildet werden. Bei anderen Ausführungsformen, bei denen diese Eigenschaft nicht gewährleistet ist, können Decodierschemata, die den vorstehend für den inneren Code beschriebenen ähnlich sind, auch für den äußeren Code angewandt werden.
  • Auslesen von in der zweiten Programmierphase gespeicherten Daten
  • 3A und 3B sind Schaubilder mit der Darstellung der Verteilung von Programmierungsebenen, die gemäß Ausführungsformen dieser Erfindung zum Speichern von Daten mit nicht ganzzahliger Anzahl von Bits pro Zelle verwendet werden. Jede der 3A und 3B ist in obere und untere Teile unterteilt, die die Programmierstufen und die entsprechenden Zellbelegungen nach der ersten bzw. der zweiten Programmierphase zeigen.
  • Bei den offenbarten Ausführungsformen nehmen wir gemäß 3A und 3B eine zugrunde liegende TLC-Einrichtung an, deren Speicherzellen 32 in der ersten Phase unter Verwendung von vier Stufen programmiert werden, von denen zwei Stufen in der zweiten Phase weiter aufgeteilt werden. Da jede Zelle nach der ersten Phase zwei Informations-Bits speichert und die Hälfte der Zellen programmiert ist, um in der zweiten Phase ein zusätzliches Bit zu speichern, speichert die Einrichtung letztlich durchschnittlich 2,5 Bits pro Zelle (unter Verwendung von sechs der acht TLC-Stufen).
  • In 3A geben L0, L1, L3 und L5 die vier Stufen an, in die Speicherzellen 32 in der ersten Phase programmiert werden können. Jede der Stufen L0, L1, L3 und L5 wird auf eine entsprechende Bit-Paar-Kombination abgebildet, d. h. „11 ”, „10”, „00” bzw. „01”. In jeder derartigen Bit-Paar-Kombination entsprechen individuelle Bits separaten Datenströmen oder Seiten. In der folgenden Beschreibung entspricht das linke Bit einem LSB-Seiten-Bit, und das rechte Bit entspricht einem CSB-Seiten-Bit (d. h. „10” bedeutet LSB = „1” und CSB = „0”).
  • In der zweiten Programmierphase werden nur Zellen, die in der ersten Phase in Stufen L1 oder L3 programmiert worden waren, weiter mit einem zusätzlichen Bit (MSB) programmiert. Man beachte, dass, da gemäß dem gewählten Mapping von Bits auf Stufen das CSB-Bit bei den Stufen L0 und L5 gleich „1” und bei den Stufen L1 und L3 gleich „0” ist, die Zellen bei den Stufen L1 und L3 durch Prüfung nur des CSB-Bits identifiziert werden können. Diese Eigenschaft vereinfacht auch das Auslesen von MSB-Daten entsprechend der Erläuterung weiter unten.
  • Entsprechend der Darstellung in 3A teilt die Programmierung des zusätzlichen Bits die Population von Zellen bei L1, sodass etwa die Hälfte der Zellen bei L1 verbleibt und die restliche Hälfte der Zellen in L2 programmiert wird. Auf ähnliche Weise wird ungefähr die Hälfte der Zellen bei L3 in L4 programmiert, während die Zellen der anderen Hälfte unverändert bei L3 verbleiben. Somit speichern Zellen, die in der zweiten Phase in eine der Stufen L1, L2, L3 und L4 programmiert wurden, Drei-Bit-Informationen gemäß der jeweiligen Bit-Zuordnung „100”, „101”, „001” oder „000”. In jedem derartigen Bit-Triplet entsprechen das linke, mittlere und rechte Bit einem dazugehörigen separaten Datenstrom, z. B. einer LSB-, CSB- oder MSB-Datenseite. Da die Stufen L0 und L5 nicht in der zweiten Phase programmiert werden, sind die diesen Stufen zugeordneten entsprechenden Bit-Triplets angegeben als „11x” oder „01x”, wobei „11” und „01” die vorangegangene Bit-Paar-Kombination (aus der ersten Phase) sind und das am weitesten rechte „x” das nicht programmierte zusätzliche Bit angibt.
  • Wir beschreiben nun mehrere Verfahren zum Auslesen von in einer TLC-Einrichtung gespeicherten Daten unter Verwendung der Konfigurationen der in 3A und 3B dargestellten Programmierstufen. Entsprechend der folgenden Beschreibung und anders als bei herkömmlichen Verfahren, bei denen sowohl die LSB- als auch die CSB-Daten ausgelesen werden müssen, um die Zellen zu identifizieren, die mit einem zusätzlichen Bit programmiert worden waren, ermöglichen einige der offenbarten Verfahren das Identifizieren der mit MSB-Daten programmierten Daten über das anfängliche Auslesen nur der CSB- oder LSB-Daten.
  • Bei einer Ausführungsform mit Bezug auf 3A identifiziert die Speicherschaltung zum Lesen der MSB-Seite zunächst die Speicherzellen, die in der zweiten Phase mit einem zusätzlichen Bit programmiert, d. h. in die Stufen L1...L4 programmiert, worden waren. Die Speicherschaltung liest zunächst aus und wendet ECC-Decodierung an auf jede der LSB- und CSB-Seiten und identifiziert Speicherzellen, die die Bitwerte „10” oder „00” in dem am weitesten links gelegenen Bitpaar der Bit-Triplets speichern. Bei einer anderen Ausführungsform liest die Speicherschaltung aus, und die ECC-Einheit decodiert nur die CSB-Daten unter Verwendung der Lese-Schwellenwerte TH_CSB_LO und TH_CSB_HI (in 3A) in einem einzelnen Befehl. Die Konfiguration von Programmierstufen und Mapping von Bits auf Stufen entsprechend der Darstellung in 3A ermöglicht es der Speicherschaltung, auf unnötige Lese- und Decodiervorgänge zu verzichten, die sich beim Auslesen sowohl der LSB-Daten als auch der CSB-Daten ergeben würden.
  • Die Speicherschaltung identifiziert anschließend die Zellen, deren CSB gleich „0” ist. Zum Auslesen der in die identifizierten Zellen geschriebenen Daten (z. B. MSB-Daten) verwendet die Speicherschaltung beispielsweise zwei Lese-Schwellenwerte (nicht dargestellt), sodass ein Schwellenwert zwischen L1 und L2 und der andere Schwellenwert zwischen L3 und L4 positioniert ist.
  • In 3B werden die Stufen L0, L1, L2 und L4 in der ersten Phase auf entsprechende Bit-Paare „11”, „10”, „00” und „01” abgebildet. In der zweiten Phase programmiert die Speicherschaltung ein zusätzliches Bit nur in Speicherzellen, die in der ersten Phase in L2 oder L4 programmiert worden waren. Somit wird etwa die Hälfte der Zellen in L2 nach L3 verschoben, und die Stufe der Hälfte der Zellen bei L4 wird nach L5 verschoben. Die Stufen L2, L3, L4 und L5 werden auf entsprechende Bit-Triplets „001”, „000”, „010” und „011” abgebildet. Die Stufen L0 und L1 werden nicht in der zweiten Phase programmiert, und sie werden auf die entsprechenden Bit-Triplets „11x” und „10x” abgebildet.
  • Bei einigen Ausführungsformen und entsprechend der Beschreibung zu 3A weiter oben entsprechend die linken, mittleren und rechten Bits dazugehörigen LSB-, CSB- und MSB-Datenseiten. Bei einer Ausführungsform identifiziert die Speicherschaltung zum Auslesen der MSB-Daten die mit einem zusätzlichen Bit programmierten Zellen, indem zunächst nur die LSB-Seite ausgelesen und decodiert wird (statt sowohl die LSB- als auch die CSB-Seite auszulesen und zu decodieren), wobei ein in 3B als TH_LSB bezeichneter, einzelner Lese-Schwellenwert verwendet wird. Diese Ausführungsform ist gegenüber der in 3A weiter oben dargestellten (wobei das Auslesen zwei Lese-Schwellenwerte erfordert) vorteilhaft, da eine größere Anzahl von Lese-Schwellenwerten normalerweise die Lesezeit der Seite erhöht. Zudem sind ähnlich wie bei dem Verfahren aus 3A nur zwei Lese-Schwellenwerte zum Lesen der MSB-Daten erforderlich. Die Speicherschaltung liest anschließend die MSB-Daten aus den identifizierten Zellen unter Verwendung von zwei Lese-Schwellenwerten, von denen einer zwischen L2 und L3 und der andere zwischen L4 und L5 positioniert ist. Durch die Verwendung der Konfiguration von Programmierstufen und Mapping von Bits auf Stufen entsprechend der Darstellung in 3B kann die Speicherschaltung die MSB-Seite effizient auslesen und auf unnötige Lese- und Decodiervorgänge verzichten, die sich beim Auslesen sowohl der LSB-Daten als auch der CSB-Daten ergeben würden.
  • Wie aus der vorstehenden Beschreibung und den Figuren ersichtlich ist, erzeugt das Programmieren des zusätzlichen Bits in der zweiten Phase normalerweise eine nicht gleichmäßige Zellbelegung unter den unterschiedlichen Stufen. Beispielsweise ist die Anzahl in jeder der Stufen L2...L5 aus 3B programmierten Zellen etwa die Hälfte der Zahl der in L0 oder L1 programmierten Zellen. Entsprechend der Darstellung in 3B beeinflussen der Abstand oder die Trennung der Schwellenwertspannung (VTH) unter den Stufen und die Zellbelegung in jeder Stufe (neben anderen Faktoren) den Umfang der Überlappung zwischen den Verteilungen benachbarter Stufen. Da diese Überlappung in enger Beziehung zum Auslesen von Fehlerwahrscheinlichkeiten steht, kann eine gleichmäßige Beabstandung unter den Stufen mit unterschiedlicher Zellbelegung zu nicht gleichmäßigen (und nicht optimalen) Lesefehlerwahrscheinlichkeiten unter den Stufen führen.
  • Bei einigen Ausführungsformen sind die den unterschiedlichen Programmierstufen zugeordneten Schwellenwertspannungen eingestellt, um basierend auf den Zellbelegungen der Stufen gleichmäßige Lesefehlerwahrscheinlichkeiten über alle Stufen zu erreichen. Um unterschiedliche Zellbelegungen auszugleichen, muss die Distanz (d. h. die Differenz der Schwellenwertspannung) zwischen benachbarten, stark belegten Stufen größer vorgegeben werden als die Distanz zwischen benachbarten, weniger stark belegten Stufen.
  • Bei der beispielhaften Konfiguration aus 3B, bezeichnet ΔL01 die Spannungsdifferenz zwischen L0 und L1, und ΔL23, ΔL34 und ΔL45 bezeichnen die Spannungsdifferenzen zwischen L2 – L3, L3 – L4 bzw. L4 – L5. Bei einer Ausführungsform erzielt die Speicherschaltung gleichmäßige Lesefehlerwahrscheinlichkeiten über den Programmierstufen, indem der Abstand basierend auf der Stufenbelegung angepasst wird, sodass ΔL01 größer ist als jede der Differenzen ΔL23, ΔL34 und ΔL45 (die im vorliegenden Beispiel als ähnlich angenommen werden). Zusätzlich muss der Abstand zwischen L1 und L2 so konfiguriert werden, dass er größer ist als ΔL23, ΔL34 und ΔL45, aber kleiner als ΔL01.
  • Bei einigen Ausführungsformen kann die Speicherschaltung zusätzlich den Spannungsabstand zwischen den Programmierstufen basierend auf anderen Faktoren als den Stufenbelegungen bestimmen. Beispielsweise beschreibt das US-Patent 7,925,936 , eingereicht am 11. Juli 2008, dessen Offenbarung durch Verweis hierin übernommen wird, mehrere Verfahren zum Erzielen gleichmäßiger Lesefehlerwahrscheinlichkeiten über die Programmierstufen, indem der Abstand zwischen den Stufen angepasst wird, um eine unterschiedliche Anzahl von Lesevorgängen auszugleichen, die beim Auslesen von Seiten unterschiedlicher Bitwertigkeit ausgeführt werden.
  • Die Konfigurationen aus 3A und 3B sind beispielhafte Konfigurationen, die lediglich zu Zwecken der konzeptionellen Klarheit gezeigt sind, und andere geeignete Konfigurationen können ebenfalls eingesetzt werden. Beispielsweise können bei alternativen Ausführungsformen andere Programmierstufen, Stufenzahlen, Stufenteilungs-Schemata, Bit-Stufen-Mappings, Leseschwellenwerte und/oder Abstände zwischen den Stufen ebenfalls verwendet werden.
  • Speichern von Daten in der zweiten Phase mit bekannten Offset-Werten
  • Man betrachte beispielsweise das Speichern von Daten in einer TLC-Einrichtung unter Verwendung von sieben Programmierstufen. Bei einigen Ausführungsformen speichert die Speicherschaltung die Daten unter Verwendung geeigneter Varianten des weiter oben beschriebenen Zweiphasen-Programmierverfahrens. Bei einer beispielhaften Ausführungsform speichert die Speicherschaltung in der ersten Phase LSB- und CSB-Daten unter Verwendung von vier Stufen, beispielsweise entsprechend der Darstellung im oberen Teil von 3A. Somit sollen im vorliegenden Beispiel drei Stufen, z. B. L0, L1 und L3 im oberen Teil von 3A in der zweiten Phase geteilt werden.
  • Bei einigen Ausführungsformen codiert die Speicherschaltung als LSB, CSB und MSB bezeichnete Datenströme separat in Codewörter, wie z. B. das Codewort 70. Bei einer Ausführungsform programmiert die Speicherschaltung Speicherzellen 32 in Gruppen aus N Zellen, und sie codiert auch Daten zur Speicherung in N-Bit-Codewörtern, wie hierin beschrieben. In der folgenden Beschreibung bezieht sich der Begriff „Zellgruppe” oder einfach „Gruppe” auf eine Gruppe aus N Zellen, die gleichzeitig programmiert werden. Man beachte, dass, obwohl wir annehmen, dass die gespeicherten Daten einer ECC-Codierung in entsprechende Codewörter unterliegen, die offenbarten Verfahren auch auf das Speichern von nicht codierten Rohdaten anwendbar sind.
  • Unter Verwendung von vier Programmierstufen schreibt die Speicherschaltung (in der ersten Phase) die LSB- und CSB-N-Bit-Codewörter. Wie im Folgenden näher erläutert, ist die Anzahl verfügbarer Zellen in jeder Zellgruppe kleiner als N, doch in der ersten Phase gewährleistet die Speicherschaltung, dass diese Zahl 0,75 N überschreitet (üblicherweise um einen geringen Betrag). Obwohl ein vollständiges MSB-Codewort nicht in einer einzelnen Zellgruppe gespeichert werden kann, können daher drei N-Bit-Codewörter über vier Zellgruppen gespeichert werden.
  • In der folgenden Tabelle 1 zeigen wir ein Verfahren zum Teilen von drei N-Bit-Codewörtern unter vier Zellgruppen. In Tabelle 1 bezeichnen MSB0...MSB2 die MSB-Codewörter, und CW0...CW3 bezeichnen die Zellgruppen. Die Einträge in Tabelle 1 stellen die Anzahl von Bits dar, die aus jedem Codewort entnommen und in die verfügbaren Zellen in einer entsprechenden Zellgruppe geschrieben werden. Beispielsweise werden 0,25 N Bits aus MSB0 und 0,5 N Bits aus MSB1 in CW1 programmiert. Als weiteres Beispiel werden die MSB1-Bits zwischen CW1 und CW2 halbiert.
    MSB0 MSB1 MSB2
    CW0 0,75 N 0 0
    CW1 0,25 N 0,5 N 0
    CW2 0 0,5 N 0,25 N
    CW3 0 0 0,75 N
    Tabelle 1: Aufteilen von Codewort-Bits unter Zellgruppen
  • Bei einigen Ausführungsformen führt die Speicherschaltung, falls erforderlich, in der ersten Phase eine Vorverarbeitung der Daten durch, indem die LSB-, CSB- oder beide Codewörter invertiert werden, um sicherzustellen, dass mindestens 0,75 N Zellen zum Speichern der MSB-Daten in der entsprechenden Zellgruppe verfügbar sind. Die Gruppe verfügbarer Zellen kann in zwei komplementäre Untergruppen partitioniert werden, sodass eine Untergruppe 0,75 N Zellen umfasst und die andere Untergruppe die verbleibenden Zellen umfasst, die als „Extrazellen” bezeichnet werden. Da die Zellbelegungen in jeder der vier Stufen in der ersten Phase von den tatsächlich gespeicherten Daten abhängen, ist die Anzahl von Extrazellen ebenfalls datenabhängig.
  • Verschiedene Konfigurationen können zum Teilen der Bits von drei MSB-Codewörtern über vier Zellgruppen eingesetzt werden. Die Tabelle 1 weiter oben zeigt ein Beispiel hierzu, während weitere Beispiele im Folgenden beschrieben werden. Bei einer Ausführungsform ist jedes Codewort in zwei Segmente unterteilt, die in zwei unterschiedlichen Zellgruppen mit bestimmten Versatzwerten (Offset) unter den verfügbaren Zellen gespeichert werden. Die Speicherschaltung speichert die Segmente der Codewörter MSB0...MSB2 kontinuierlich unter CW0...CW3, wobei alle verfügbaren Zellen in jeder Zellgruppe aufgebraucht werden. Man nehme an, dass Ni die Anzahl verfügbarer Zellen in der Zellgruppe CWi bezeichnet, und dass Ei die Anzahl der entsprechenden Extrazellen angibt.
  • Bei dieser Ausführungsform werden die Segmente der Codewörter mit variablen Offset-Werten über den verfügbaren Zellen gespeichert. Man beachte, dass in diesem Kontext Offsets nur unter den verfügbaren Zellen in jeder Zellgruppe gemessen werden. Somit bezieht sich beispielsweise Null Offset auf die erste verfügbare Zelle in einer Zellgruppe. Zum Auslesen eines gegebenen MSB-Codeworts muss die Speicherschaltung die entsprechenden Offset-Werte bewerten, mit denen die Segmente gespeichert wurden, indem die niedrigwertigen Daten aus Zellgruppen gelesen werden, in denen Segmente anderer Codewörter gespeichert sind.
  • Beispielsweise speichert die Speicherschaltung bei der vorliegenden Ausführungsform N0 = 0,75 N + E0 der MSB0-Bits in CW0 bei Null Offset (d. h. erstes Segment) und den Rest der MSB0-Bits (d. h. zweites Segment) in CW1 bei Null Offset. Die Speicherschaltung speichert anschließend das erste MSB1-Segment in CW1 unmittelbar nach dem zweiten MSB0-Segment, d. h. beginnend mit einem Offset N – N0 = 0,25 N – E0.
  • Beim Auslesen des ersten MSB1-Segments muss die Speicherschaltung daher zunächst die in CW0 gespeicherten LSB- und CSB-Daten lesen und decodieren, die Zahl der verfügbaren Zellen N0 identifizieren und zählen, E0 – N0 – 0,75 N berechnen und E0 verwenden, um den tatsächlichen Versatz des ersten MSB1-Segments zu bewerten (oder N – N0 gleichwertig berechnen). Ähnliche Argumente gelten mit Bezug auf das Auslesen der Segmente des MSB2-Codeworts. Somit bezieht in diesem Beispiel das Auslesen der MSB1-Segmente, die in CW1 und CW2 gespeichert sind, auch das Auslesen von in einer anderen Zellgruppe (d. h. CW0) gespeicherten Daten ein.
  • Bei alternativen Ausführungsformen, die im Folgenden beschrieben sind, speichert die Speicherschaltung die MSB-Segmente mit bekannten Offset-Werten unter den verfügbaren Zellen. Dies ermöglicht ein effizientes Auslesen der MSB-Daten, da das Auslesen eines gegebenen MSB-Codeworts bei bekannten Offset-Werten nur das Auslesen der Daten erfordert, die in den Zellgruppen gespeichert sind, in denen die Segmente des betreffenden Codeworts gespeichert sind.
  • 4A und 4B sind Diagramme, die schematisch zwei Verfahren zum Speichern von Daten mit bekanntem Versatz unter verfügbaren Speicherzellen darstellen. Man betrachte das Schreiben von drei N-Bit-MSB-Codewörtern mit der Bezeichnung MSB0, MSB1 und MSB2 in vier als CW0...CW3 bezeichnete Zellgruppen. Entsprechend der Beschreibung weiter oben umfasst bei dem siebenstufigen TLC-Beispiel jede der vier Zellgruppen eine entsprechende Anzahl von Ni = 0,75 N + Ei verfügbaren Zellen, wobei Ei die Extrazellen umfasst.
  • In 4A ist jedes Codewort MSBi (i = 0...3) in zwei als MSBi_A und MSBi_B bezeichnete Segmente unterteilt, die jeweils eine bekannte vorbestimmte Größe haben. Das MSB0_A-Segment umfasst 0,75 N Bits und ist bei Null Offset in CW0 gespeichert. Das MSB0_B-Segment, das 0,25 N Bits umfasst, ist bei ebenfalls Null Offset in CW1 gespeichert. Das MSB1-Segment ist in die MSB1_A- und MSB1_B-Segmente mit jeweils 0,5 N Bits unterteilt. Das MSB1_A-Segment ist nach den MSB0_B-Bits in CW1 gespeichert, d. h. mit einem bekannten Offset von 0,25 N Zellen. Das MSB1_B-Segment ist bei Null Offset in CW2 gespeichert, wodurch ein bekannter Offset von 0,5 N Zellen zum Speichern des MSB2_A-Segments erzeugt wird, das 0,25 N Bits umfasst. Das MSB2_B-Segment umfasst 0,75 N Bits und ist bei Null Offset in CW3 gespeichert.
  • Tabelle 2 fasst die Aufteilung der MSB-Segmente unter den Zellgruppen CW0...CW3 entsprechend der Darstellung in 4A zusammen.
    SEGMENT SEGMENTGRÖSSE GESPEICHERT IN ZELLGRUPPE OFFSET
    MSB0_A 0,75 N CW0 0
    MSB0_B 0,25 N CW1 0
    MSB1_A 0,5 N CW1 0,25 N
    MSB1_B 0,5 N CW2 0
    MSB2_A 0,25 N CW2 0,5 N
    MSB2_B 0,75 N CW3 0
    Tabelle 2: Aufteilung von Codewörtern bei bekannten Offset-Werten entsprechend Fig. 4A
  • In 4B wird das erste Segment jedes MSB-Codeworts mit einem bekannten Offset und unter Verwendung aller verfügbaren Zellen geschrieben. Verbleibende Bits des Codeworts (d. h. das zweite Segment) werden mit Null Offset in eine andere Zellgruppe geschrieben. Obwohl jedes MSBi-Codewort in MSBi_A- und MSBi_B-Segmente unterteilt ist, deren Größe von Ei abhängig ist, sind die Segmente dennoch mit bekannten, festen Offset-Werten positioniert. Tabelle 3 fasst die Aufteilung der MSB-Codewortsegmente unter die entsprechenden Zellgruppen entsprechend 4B zusammen.
    SEGMENT SEGMENTGRÖSSE GESPEICHERT IN ZELLGRUPPE OFFSET
    MSB0_A MSB0_B 0,75 N + E0 0,25 N – E0 CW0 CW1 0 0
    MSB1_A MSB1_B 0,5 N + E1 0,5 N – E1 CW1 CW2 0,25 N 0
    MSB2_A MSB2_B 0,25 N + E2 0,75 N – E2 CW2 CW3 0,5N 0
    Tabelle 3: Aufteilung von Codewörtern unter Zellgruppen entsprechend Fig. 4B
  • Bei den vorstehend beschriebenen Ausführungsformen weisen alle Codewörter einschließlich der MSB-Codewörter eine gemeinsame Größe von N Bits auf. Einerseits vereinfacht dies die Vorgänge des Codierens/Decodierens und Lesens/Schreibens und die diesbezügliche Schaltung. Andererseits muss jedoch jedes N-Bit-MSB-Codewort entsprechend der Beschreibung weiter oben in mehr als einer einzelnen Zellgruppe gespeichert werden. Bei einer alternativen Ausführungsform umfassen die MSB-Codewörter nur 0,75 N Bits (bezeichnet als kurze MSB-Codewörter). Da jede N Zellgruppe Ni ≥ 0,75 N verfügbare Zellen umfasst, passen kurze MSB-Codewörter stets in eine Zellgruppe. Das Codierschema der kurzen MSB-Codewörter unterscheidet sich jedoch vom Codierschema der N-Bit-Codewörter und muss eine andere Partitionierung der Daten und Paritätsbits verwenden. Infolgedessen kann die ECC-Einheit 50 separate, dedizierte Encoder/Decoder für die kurzen MSB-Codewörter umfassen.
  • 5 ist ein Ablaufdiagramm, das schematisch ein Verfahren zum Schreiben von MSB-Daten mit bekanntem Versatz unter verfügbaren Speicherzellen gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht. Das Verfahren in 5 harmonisiert mit der Aufteilung der MSB-Daten unter den Zellgruppen entsprechend der Darstellung in 4B. Zu Beginn des Verfahrens wird angenommen, dass die Speicherschaltung die erste Programmierphase bereits ausgeführt hat, in der die LSB- und CSB-Daten in CW0...CW3 geschrieben werden, und dass die drei Codewörter MB0...MB2 zum Programmieren bereit sind. Das Verfahren beginnt damit, dass die Speicherschaltung in einem Zellen-Identifizierungsschritt 200 in jeder Zellgruppe CWi die Zellen identifiziert, die für das Programmieren von MSB-Daten verfügbar sind. Man nehme an, dass Ni die Anzahl verfügbarer Zellen in der Zellgruppe CWi bezeichnet, und dass Ei = N – Ni die Anzahl der entsprechenden Extrazellen angibt. Das Verfahren geht dann zu einem MSB0-Programmierschritt 204 über. Bei Schritt 204 programmiert die Speicherschaltung die ersten 0,75 N + E0 Bits von MSB0 in CW0 mit Null Offset, um alle verfügbaren CW0-Zellen aufzubrauchen. Die Speicherschaltung programmiert anschließend die verbleibenden 0,25 N – E0 Bits von MB0 in CW1 bei Null Offset. Anschließend programmiert die Speicherschaltung die MSB1- und MSB2-Codewörter in Schritt 208 bzw. 212. Die Speicherschaltung schreibt MSB1 mit Offset 0,25 N in CW1 und fährt in CW2 fort. Auf ähnliche Weise schreibt die Speicherschaltung MSB2 mit Offset 0,5 N in CW2 und die verbleibenden MSB2-Bits mit Null Offset in CW3.
  • 6 ist ein Ablaufdiagramm, das schematisch ein Verfahren zum Auslesen von MSB-Daten veranschaulicht, die mit bekanntem Versatz unter verfügbaren Speicherzellen gemäß einer Ausführungsform der vorliegenden Erfindung geschrieben worden sind. Das Verfahren beginnt damit, dass die Speicherschaltung in einem Schritt 250 zur Identifizierung programmierter Zellen die Zellen identifiziert, die mit MSB-Daten programmiert sind. Wie beispielsweise aus Tabelle 3 hervorgeht, ist es zum unabhängigen Auslesen nur der MSB0-, MSB1- oder MSB2-Codewörter ausreichend, die Zellen zu identifizieren, die mit einem zusätzlichen Bit nur in {CW0 und CW1}, {CW1 und CW2} bzw. {CW2 und CW3} programmiert sind. Zum Auslesen von MSB0, MSB1 oder MSB2 geht die Speicherschaltung zum entsprechenden Leseschritt 254, 258 bzw. 262 über. Bei Schritt 254 liest die Speicherschaltung alle verfügbaren Zellen in CW0 (d. h. N0 = 0,75 N + E0 Bits) in ein als MSB0_A bezeichnetes temporäres Segment. Die Speicherschaltung zählt anschließend die Zahl ausgelesener Bits N0, berechnet E0 = N0 – 0,75 N und liest die ersten 0,25 N – E0 Bits aus den verfügbaren Zellen von CW1 in ein als MSB0_B bezeichnetes temporäres Segment. Die Speicherschaltung verkettet anschließend die beiden temporären Segmente, um das vollständige MSB0-Codewort zu erzeugen. In den Leseschritten 258 und 262 liest die Speicherschaltung auf ähnliche Weise die MSB1- oder MSB2-Codewörter mit geeigneten Segmentgrößen und Offset-Werten entsprechend 4B und Tabelle 3.
  • Die Konfiguration in 4A, 4B, 5 und 6 ist eine beispielhafte Konfiguration, die lediglich zu Zwecken der konzeptionellen Klarheit gezeigt wird, und andere geeignete Konfigurationen können ebenfalls eingesetzt werden. Beispielsweise können andere geeignete Anzahlen von Codewörtern und Zellgruppen verwendet werden. Als weiteres Beispiel können andere Ordnungsschemata der Codewortsegmente unter den Zellgruppen gewählt werden, wie z. B. ein Wechseln zwischen MSB2_A und MSB0_B oder MSB1_B.
  • Bei den in 4A, 4B, 5 und 6 dargestellten Ausführungsformen werden die Extrazellen während der zweiten Phase normalerweise übersprungen. Bei alternativen Ausführungsformen kann die Speicherschaltung jedoch die Extrazellen verwenden, um Benutzerdaten, Speicherverwaltungsdaten und/oder beliebige andere Arten von Daten zu speichern.
  • Es ist daher ersichtlich, dass die vorstehend beschriebenen Ausführungsformen als Beispiele angeführt werden, und dass die vorliegende Erfindung nicht auf das beschränkt ist, was hierin vorstehend im Einzelnen gezeigt und beschrieben worden ist. Vielmehr schließt der Umfang der vorliegenden Erfindung sowohl Kombinationen und Teilkombinationen der verschiedenen hierein vorstehend beschriebenen Merkmale als auch Variationen und Modifikationen davon ein, die für den Fachmann nach Lektüre der vorhergehenden Beschreibung naheliegen und die im Stand der Technik nicht offenbart sind. Dokumente, die durch Bezugnahme in die vorliegende Patentanmeldung aufgenommen werden, sind als ein integraler Teil der Anmeldung anzusehen, außer dass in dem Ausmaß, in dem jegliche Begriffe in diesen aufgenommenen Dokumenten in einer Weise definiert sind, die mit den explizit oder implizit erfolgten Definitionen in Konflikt steht, nur die Definitionen in der vorliegenden Patentschrift berücksichtigt werden sollen.

Claims (14)

  1. Verfahren zur Datenspeicherung, Folgendes umfassend: Speichern von Daten in einer Gruppe von Speicherzellen mittels Codieren der Daten unter Verwendung von mindestens einem äußeren Code und einem inneren Code, sowie wahlfreiem Invertieren der codierten Daten in den Speicherzellen; und Auslesen der codierten Daten aus den Speicherzellen; Anwenden des Decodierens des inneren Codes bei den ausgelesenen codierten Daten, um ein Decodierergebnis zu erzeugen; und bedingtes Invertieren zumindest eines Teils der ausgelesenen Daten in Abhängigkeit vom Decodierergebnis des inneren Codes.
  2. Verfahren nach Anspruch 1, wobei der innere Code einen Code einschließt, wobei das Invertieren eines gültigen Codeworts nicht immer ein anderes gültiges Codewort ergibt, und wobei das Anwenden des Decodierens des inneren Codes das Decodieren von mindestens den ausgelesenen codierten Daten und/oder von einer invertierten Version der ausgelesenen codierten Daten einschließt.
  3. Verfahren nach Anspruch 2, wobei das Anwenden der Decodierung des inneren Codes das Decodieren sowohl der ausgelesenen, codierten Daten als auch der invertierten Version der ausgelesenen, codierten Daten einschließt, und wobei das bedingte Invertieren zumindest eines Teils der ausgelesenen Daten das Invertieren zumindest des Teils der ausgelesenen Daten nur dann einschließt, wenn das Decodierergebnis der invertierten Version fehlerfrei ist und das Decodierergebnis der ausgelesenen, codierten Daten nicht fehlerfrei ist.
  4. Verfahren nach Anspruch 2, wobei das Speichern der Daten bezüglich der Daten das Speichern einer Invertierungsangabe einschließt, ob die gespeicherten Daten invertiert worden sind; wobei das Lesen der codierten Daten das Auslesen und Decodieren der Invertierungsangabe einschließt; und wobei das Anwenden der Decodierung des inneren Codes in Abhängigkeit von der Invertierungsangabe das Decodieren nur der ausgelesenen, codierten Daten oder nur der invertierten Version der ausgelesenen, codierten Daten einschließt.
  5. Verfahren nach Anspruch 4, wobei das bedingte Invertieren von mindestens einem Teil der ausgelesenen Daten die Angabe der Unmöglichkeit einschließt, zu entscheiden, ob die ausgelesenen Daten invertiert werden sollen, wenn das Decodierergebnis der ausgelesenen, codierten Daten der Invertierungsangabe widerspricht.
  6. Verfahren nach Anspruch 2, wobei der innere Code einen Fehlererkennungscode einschließt, und wobei das bedingte Invertieren zumindest eines Teils der ausgelesenen Daten das Invertieren zumindest des Teils der ausgelesenen Daten einschließt, wenn das Decodierergebnis gleich einem Ergebnis der Anwendung der Decodierung des inneren Codes auf ein Eins-Wort ist, sowie das Nicht-Invertieren von mindestens dem Teil der ausgelesenen Daten, wenn das Decodierergebnis fehlerfrei ist.
  7. Verfahren nach Anspruch 2, wobei das bedingte Invertieren von mindestens einem Teil der ausgelesenen Daten die Angabe der Unmöglichkeit einschließt, zu entscheiden, ob die ausgelesenen Daten invertiert werden sollen oder nicht, wenn das Decodierergebnis der ausgelesenen, codierten Daten dem Decodierergebnis der invertierten Version der ausgelesenen, codierten Daten widerspricht.
  8. Einrichtung zur Datenspeicherung, Folgendes umfassend: einen Speicher, der einen Array aus Speicherzellen umfasst; und Speicherschaltung, die konfiguriert ist, um Daten in einer Gruppe der Speicherzellen zu speichern, indem die Daten unter Verwendung von mindestens einem äußeren Code und einem inneren Code codiert und die codierten Daten wahlfrei vor dem Speichern der codierten Daten in den Speicherzellen invertiert werden, um die codierten Daten aus den Speicherzellen auszulesen, um die Decodierung des inneren Codes zum Erzeugen eines Decodierergebnisses auf die ausgelesenen, codierten Daten anzuwenden, und um mindestens den Teil der ausgelesenen Daten in Abhängigkeit vom Decodierergebnis des inneren Codes bedingt zu invertieren.
  9. Einrichtung nach Anspruch 8, wobei der innere Code einen Code umfasst, wobei das Invertieren eines gültigen Codeworts nicht immer ein anderes gültiges Codewort ergibt, und wobei die Speicherschaltung konfiguriert ist, um mindestens die ausgelesenen, codierten Daten und/oder eine invertierte Version der ausgelesenen, codierten Daten zu decodieren.
  10. Einrichtung nach Anspruch 9, wobei die Speicherschaltung konfiguriert ist, um sowohl die ausgelesenen, codierten Daten als auch die invertierte Version der ausgelesenen, codierten Daten zu decodieren, und um mindestens den Teil der ausgelesenen Daten nur dann zu invertieren, wenn das Decodierergebnis der invertierten Version fehlerfrei ist und das Decodierergebnis der ausgelesenen, codierten Daten nicht fehlerfrei ist.
  11. Einrichtung nach Anspruch 9, wobei die Speicherschaltung konfiguriert ist, um mit Bezug auf die Daten eine Invertierungsangabe zu speichern, ob die gespeicherten Daten invertiert worden sind, sowie um die Invertierungsangabe zu lesen und zu decodieren, und um in Abhängigkeit von der Invertierungsangabe nur die ausgelesenen codierten Daten oder nur die invertierte Version der ausgelesenen, codierten Daten zu decodieren.
  12. Einrichtung nach Anspruch 11, wobei die Speicherschaltung konfiguriert ist, um die Unmöglichkeit anzugeben, zu entscheiden, ob die ausgelesenen Daten invertiert werden sollen, wenn das Decodierergebnis der ausgelesenen, codierten Daten der Invertierungsangabe widerspricht.
  13. Einrichtung nach Anspruch 9, wobei der innere Code einen Fehlererkennungscode einschließt, und wobei die Speicherschaltung konfiguriert ist, um zumindest den Teil der ausgelesenen, codierten Daten zu invertieren, wenn das Decodierergebnis gleich einem Ergebnis der Anwendung der Decodierung des inneren Codes auf ein Eins-Wort ist, sowie um zumindest den Teil der ausgelesenen Daten nicht zu invertieren, wenn das Decodierergebnis fehlerfrei ist.
  14. Einrichtung nach Anspruch 9, wobei die Speicherschaltung konfiguriert ist, um die Unmöglichkeit anzugeben, zu entscheiden, ob die ausgelesenen Daten invertiert werden sollen oder nicht, wenn das Decodierergebnis der ausgelesenen, codierten Daten dem Decodierergebnis der invertierten Version der ausgelesenen, codierten Daten widerspricht.
DE112014005810.6T 2013-12-20 2014-09-30 Management der Datenspeicherung in analogen Speicherzellen unter Verwendung einer nicht ganzzahligen Anzahl von Bits pro Zelle Active DE112014005810B8 (de)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US14/135,823 2013-12-20
US14/135,881 US9230655B2 (en) 2013-12-20 2013-12-20 Data storage management in analog memory cells using a non-integer number of bits per cell
US14/135,823 US9171624B2 (en) 2013-12-20 2013-12-20 Management of data storage in analog memory cells using a non-integer number of bits per cell
US14/135,881 2013-12-20
PCT/US2014/058162 WO2015094452A1 (en) 2013-12-20 2014-09-30 Management of data storage in analog memory cells using a non-integer number of bits per cell

Publications (3)

Publication Number Publication Date
DE112014005810T5 true DE112014005810T5 (de) 2016-10-06
DE112014005810B4 DE112014005810B4 (de) 2022-05-25
DE112014005810B8 DE112014005810B8 (de) 2022-08-04

Family

ID=53400746

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112014005810.6T Active DE112014005810B8 (de) 2013-12-20 2014-09-30 Management der Datenspeicherung in analogen Speicherzellen unter Verwendung einer nicht ganzzahligen Anzahl von Bits pro Zelle

Country Status (7)

Country Link
US (4) US9171624B2 (de)
JP (1) JP6145220B2 (de)
KR (1) KR101885976B1 (de)
CN (1) CN105793927B (de)
DE (1) DE112014005810B8 (de)
TW (1) TWI516035B (de)
WO (1) WO2015094452A1 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015167509A1 (en) * 2014-04-30 2015-11-05 Empire Technology Development Llc Differential writing for life extension of portions of a memory device
US9979416B2 (en) * 2014-12-10 2018-05-22 Rambus Inc. Memory controller and method of data bus inversion using an error detection correction code
US9965356B2 (en) * 2016-09-02 2018-05-08 Alibaba Group Holding Limited Method and system of high-availability PCIE SSD with software-hardware jointly assisted implementation to enhance immunity on multi-cell upset
US10484008B2 (en) * 2017-09-28 2019-11-19 SK Hynix Inc. Memory system with on-the-fly error detection and termination and operating method thereof
JP6910739B2 (ja) * 2018-03-05 2021-07-28 東芝情報システム株式会社 評価解析対象メモリ装置及びメモリ評価解析システム
TWI671750B (zh) * 2018-11-28 2019-09-11 華邦電子股份有限公司 記憶體的控制方法及非暫態電腦可讀媒體
US11811424B2 (en) * 2021-04-05 2023-11-07 Micron Technology, Inc. Fixed weight codewords for ternary memory cells

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE60045073D1 (de) 2000-10-13 2010-11-18 St Microelectronics Srl Verfahren zum Speichern und Lesen von Daten eines nichtflüchtigen Multibitspeichers mit einer nichtbinären Anzahl von Bits pro Zelle
US6661355B2 (en) * 2000-12-27 2003-12-09 Apple Computer, Inc. Methods and apparatus for constant-weight encoding & decoding
DE60127125D1 (de) * 2001-09-28 2007-04-19 St Microelectronics Srl Verfahren zum Speichern und Lesen von Daten in einem nichtflüchtigen Mehrpegelspeicher mit einer nichtbinären Anzahl von Pegeln und dazugehörige Schaltungsarchitektur
US6834017B2 (en) 2002-10-03 2004-12-21 Hewlett-Packard Development Company, L.P. Error detection system for an information storage device
US7069494B2 (en) 2003-04-17 2006-06-27 International Business Machines Corporation Application of special ECC matrix for solving stuck bit faults in an ECC protected mechanism
JP2005100527A (ja) * 2003-09-25 2005-04-14 Matsushita Electric Ind Co Ltd 半導体不揮発性記憶装置
US7071849B2 (en) 2004-04-04 2006-07-04 Guobiao Zhang Fractional-Bit Systems
US7167109B2 (en) 2005-03-31 2007-01-23 Chenming Hu Hybrid fractional-bit systems
JP2007066375A (ja) 2005-08-30 2007-03-15 Sony Corp ホログラム記録装置、ホログラム記録方法
CN101405811B (zh) * 2006-01-20 2012-01-04 马维尔国际贸易有限公司 具有编码和信号处理的闪存
US7844879B2 (en) 2006-01-20 2010-11-30 Marvell World Trade Ltd. Method and system for error correction in flash memory
US8055979B2 (en) * 2006-01-20 2011-11-08 Marvell World Trade Ltd. Flash memory with coding and signal processing
US7420841B2 (en) 2006-08-30 2008-09-02 Qimonda Ag Memory device and method for transforming between non-power-of-2 levels of multilevel memory cells and 2-level data bits
KR100766042B1 (ko) 2006-12-06 2007-10-12 삼성전자주식회사 연접 부호화를 이용한 멀티 레벨 셀 메모리 장치
US20080192544A1 (en) * 2007-02-13 2008-08-14 Amit Berman Error correction coding techniques for non-volatile memory
US8065583B2 (en) 2007-07-06 2011-11-22 Micron Technology, Inc. Data storage with an outer block code and a stream-based inner code
US7925936B1 (en) 2007-07-13 2011-04-12 Anobit Technologies Ltd. Memory device with non-uniform programming levels
US7848142B2 (en) 2007-10-31 2010-12-07 Micron Technology, Inc. Fractional bits in memory cells
US7742335B2 (en) 2007-10-31 2010-06-22 Micron Technology, Inc. Non-volatile multilevel memory cells
KR100857252B1 (ko) 2007-12-27 2008-09-05 (주)인디링스 마모도를 비트 수준에서 평준화하는 플래시 메모리 장치 및플래시 메모리 프로그래밍 방법
US8255758B2 (en) * 2008-01-21 2012-08-28 Apple Inc. Decoding of error correction code using partial bit inversion
US7729166B2 (en) * 2008-07-02 2010-06-01 Mosaid Technologies Incorporated Multiple-bit per cell (MBC) non-volatile memory apparatus and system having polarity control and method of programming same
US8261159B1 (en) 2008-10-30 2012-09-04 Apple, Inc. Data scrambling schemes for memory devices
KR101518033B1 (ko) * 2008-11-18 2015-05-06 삼성전자주식회사 멀티-레벨 비휘발성 메모리 장치, 상기 장치를 포함하는 메모리 시스템 및 그 동작 방법
KR101618313B1 (ko) * 2009-06-15 2016-05-09 삼성전자주식회사 불휘발성 메모리 장치의 프로그램 방법
US8910002B2 (en) * 2009-08-24 2014-12-09 OCZ Storage Solutions Inc. NAND flash-based storage device with built-in test-ahead for failure anticipation
JP2011065599A (ja) * 2009-09-18 2011-03-31 Toshiba Corp メモリシステムおよびメモリシステムの制御方法
US20150348633A1 (en) * 2010-02-11 2015-12-03 Samsung Electronics Co., Ltd. Nonvolatile memory devices and methods of programming nonvolatile memory devices
US8645794B1 (en) 2010-07-31 2014-02-04 Apple Inc. Data storage in analog memory cells using a non-integer number of bits per cell

Also Published As

Publication number Publication date
US20150179265A1 (en) 2015-06-25
US20160012883A1 (en) 2016-01-14
US9230655B2 (en) 2016-01-05
JP2017504925A (ja) 2017-02-09
KR101885976B1 (ko) 2018-08-06
TW201528692A (zh) 2015-07-16
US9171624B2 (en) 2015-10-27
CN105793927A (zh) 2016-07-20
JP6145220B2 (ja) 2017-06-07
US20170162258A1 (en) 2017-06-08
US9613686B2 (en) 2017-04-04
DE112014005810B8 (de) 2022-08-04
US20150179263A1 (en) 2015-06-25
WO2015094452A1 (en) 2015-06-25
KR20160079055A (ko) 2016-07-05
DE112014005810B4 (de) 2022-05-25
TWI516035B (zh) 2016-01-01
CN105793927B (zh) 2018-06-08
US9799397B2 (en) 2017-10-24

Similar Documents

Publication Publication Date Title
DE112014005810B4 (de) anagement der Datenspeicherung in analogen Speicherzellen unter Verwendung einer nicht ganzzahligen Anzahl von Bits pro Zelle
DE102019124438B4 (de) Multi-state-programmierung für speichervorrichtungen
DE102016003366B4 (de) Lesepegelgruppierung für erhöhte flash-leistung
DE102008003113B4 (de) ECC-Steuereinheit, Speichersystem und Verfahren zur Korrektur eines Fehlers
DE60217591T2 (de) Speicher-Steuerung für Mehrpegel-Speicherzelle
DE69932962T2 (de) Kodierungsverfahren und Speicheranordnung
DE112011101116B4 (de) Two-Level BCH-Codes für Solid-State-Speichereinheiten
DE60035810T2 (de) Flash-Speicher
US8645794B1 (en) Data storage in analog memory cells using a non-integer number of bits per cell
DE3689128T2 (de) Halbleiterspeichergerät mit einer Korrekturfunktion.
DE102019133129A1 (de) Mehrphasenprogrammierung mit symmetrischer gray-codierung
DE102018105434B4 (de) Verfahren und System zum Abtasten von gelöschten Flashspeicherseiten mit Querverweis auf verwandte Anwendungen
DE102013007692A1 (de) Verfahren und Vorrichtung zur Korrektur ternär gespeicherter binärer Daten
DE3128729A1 (de) Halbleiter-speichersystem
DE102018105277A1 (de) Auf Hamming-Abstand basierende Binärdarstellungen von Zahlen
DE102012103577A1 (de) Datenspeichervorrichtung, Kodierungseinheit, Systeme selbige umfassend und Verfahren zum Auslesen von Daten
DE102007051192B4 (de) Speichervorrichtung, die Drei-Pegel-Zellen einsetzt, und zugehöriges Verfahren zum Verwalten
DE112017006698T5 (de) Erreichen einheitlicher lesezeiten in nicht flüchtigen mehrebenenspeichern
DE102019119753A1 (de) Generalisiertes verkettetes Fehlerkorrektur-Codierschema mit Lokalität
DE102022123673A1 (de) On-the-fly-multiplexschema für komprimierte softbitdaten in nichtflüchtigen speichern
DE102010037579B4 (de) Nichtflüchtige Speichervorrichtung und -system sowie Verfahren zum Programmieren einer nichtflüchtigen Speichervorrichtung
DE102016115272A1 (de) Speicher mit unterschiedlichen zuverlässigkeiten
DE3936704C2 (de)
DE102017107431A1 (de) Verfahren und Vorrichtungen zur Fehlerkorrekturcodierung beruhend auf hochratigen verallgemeinerten verketteten Codes
DE102023207896A1 (de) Nicht-flüchtiger speicher und speichersystem

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R409 Internal rectification of the legal status completed
R409 Internal rectification of the legal status completed
R409 Internal rectification of the legal status completed
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final