DE102019134293A1 - Speichervorrichtung mit verbesserter fehlerkorrektur - Google Patents

Speichervorrichtung mit verbesserter fehlerkorrektur Download PDF

Info

Publication number
DE102019134293A1
DE102019134293A1 DE102019134293.7A DE102019134293A DE102019134293A1 DE 102019134293 A1 DE102019134293 A1 DE 102019134293A1 DE 102019134293 A DE102019134293 A DE 102019134293A DE 102019134293 A1 DE102019134293 A1 DE 102019134293A1
Authority
DE
Germany
Prior art keywords
data block
data
source
correlation
source statistics
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.)
Pending
Application number
DE102019134293.7A
Other languages
English (en)
Inventor
Stella Achtenberg
Omer FAINZILBER
Dudy David Avraham
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.)
Western Digital Technologies Inc
Original Assignee
Western Digital Technologies 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 Western Digital Technologies Inc filed Critical Western Digital Technologies Inc
Publication of DE102019134293A1 publication Critical patent/DE102019134293A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3723Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 using means or methods for the initialisation of the decoder
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/56External testing equipment for static stores, e.g. automatic test equipment [ATE]; Interfaces therefor
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3707Adaptive decoding and hybrid decoding, e.g. decoding methods or techniques providing more than one decoding algorithm for one code
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3707Adaptive decoding and hybrid decoding, e.g. decoding methods or techniques providing more than one decoding algorithm for one code
    • H03M13/3715Adaptation to the number of estimated errors or to the channel state

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Error Detection And Correction (AREA)

Abstract

Hierin offenbart sind Speichervorrichtungen, Systeme und Verfahren zur inhaltsbewussten Decodierung von codierten Daten. In einem Aspekt wird ein codierter Datenblock empfangen und eine oder mehrere Charakteristiken, wie Quellenstatistiken, werden bestimmt. Ein ähnlicher Datenblock (der z. B. Daten eines ähnlichen Typs enthalten kann) mit vergleichbaren Statistiken kann gesucht werden. Der ähnliche Datenblock kann z. B. Quellenstatistiken aufweisen, die positiv mit der Quellenstatistik des zu decodierenden codierten Datenblocks korreliert sind. Decoderparameter für die codierten Daten können so eingestellt werden, dass sie mit Decoderparametern übereinstimmen, die für den ähnlichen Datenblock geeignet sind. Der codierte Datenblock wird unter Verwendung der neuen Decoderparameter decodiert. Die Decodierung codierter Daten basierend auf Inhalten kann die Leistung verbessern und die Decodierlatenz und/oder den Leistungsverbrauch reduzieren.

Description

  • HINTERGRUND
  • Die folgende Beschreibung wird bereitgestellt, um das Verständnis des Lesers zu unterstützen. Keine der bereitgestellten Informationen oder zitierten Referenzen gelten als Stand der Technik.
  • Elektronische Daten, die in Computerspeichervorrichtungen gespeichert sind, können in unterschiedlichem Maße unter Datenkorruption leiden, die unbeabsichtigte Fehler in die Daten beim Schreiben, Lesen, Speichern, Übertragen oder Verarbeiten verursacht. Datenkorruption kann zu einem Verlust von wertvollen Daten und Systemabstürzen führen. Eine einer Speichervorrichtung zugeordnete Steuerung kann Fehlerkorrekturcode-Decoder (ECC-Decoder) einsetzen, um Datenfehler zu verwalten. ECC-Decoder, wie ein Decoder für eine Paritätsprüfung mit niedriger Besetzung (LDPC-Decoder), können die Fehlerkorrektur auf der Wahrscheinlichkeit basieren, dass jedes Bit gekippt wurde (z. B. dass ein Bit eine Null sein sollte oder umgekehrt). Ein ECC-Decoder, der Standardparameter verwendet (die dem Fall einer gleichmäßigen Verteilung der Daten entsprechen können), ist nicht so effizient wie ein Decoder, der Decodierparameter verwendet, die besser geeignet sind, uneinheitliche Daten zu decodieren. Aber das Schätzen der Wahrscheinlichkeiten von Bit-Flips, die auf Merkmalen der verrauschten Daten basieren (d. h. die aus dem Speicher gelesenen codierten Daten und mit potenziellen Bit-Flips), kann zu einer falschen Schätzung führen, da die verrauschten Daten eine hohe Anzahl von Bit-Flips aufweisen können. Das Anpassen der Decoderparameter an falsch geschätzte Statistiken kann die Decodierlatenz und den Leistungsverbrauch erhöhen und zu einem Decodierfehler führen.
  • KURZDARSTELLUNG
  • Die hier offenbarten Ausführungsformen beziehen sich auf Vorrichtungen, Systeme und Verfahren zum Decodieren von Daten, die auf Quellenstatistiken basieren. In einem Aspekt variiert die Wahrscheinlichkeit, dass bestimmte Bits gekippt wurden, für verschiedene Typen von Daten, und die Leistung von Decodern wird verbessert, indem man die zugrunde liegenden Quellenstatistiken der codierten Daten kennt. In einem weiteren Aspekt passt ein Decoder seine Schätzung für jedes Bit basierend auf Informationen über den Typ der Daten an, wobei die Korrekturfähigkeit verbessert und die Decodierlatenz und der Leistungsverbrauch reduziert werden.
  • Verschiedene hier offenbarte Ausführungsformen beziehen sich auf eine Vorrichtung. Die Speichervorrichtung kann eine Steuerung einschließen. Die Steuerung kann eingerichtet sein, eine erste Quellenstatistik für einen ersten Datenblock zu berechnen. Der erste Datenblock kann ein erster Fehlerkorrekturcode-codierter (ECC-codierter) Datenblock sein. Die Steuerung kann auch eingerichtet sein, die erste Quellenstatistik mit einer zweiten Quellenstatistik für einen zweiten Datenblock zu vergleichen. Der zweite Datenblock kann ein zweiter ECC-codierter Datenblock sein. Die Steuerung kann außerdem eingerichtet sein, Decoderparameter für den ersten Datenblock basierend auf mindestens einer der ersten und der zweiten Quellenstatistik zu bestimmen. Die Decoderparameter können ECC-Decoderparameter sein. Die Steuerung kann eingerichtet sein, Decoderparameter als Antwort auf das Bestimmen einer positiven Korrelation zwischen der ersten Quellenstatistik und der zweiten Quellenstatistik zu bestimmen. Die Speichervorrichtung kann auch einen Decoder aufweisen. Der Decoder kann ein ECC-Decoder sein. Der Decoder kann eingerichtet sein, den ersten Datenblock unter Verwendung der von der Steuerung bestimmten Decoderparameter zu decodieren.
  • In einer oder mehreren Ausführungsformen schließen der erste Datenblock und der zweite Datenblock jeweils Daten eines ersten Typs ein. Der erste Typ kann einer Anwendung entsprechen, welche die Daten generiert hat.
  • In einer oder mehreren Ausführungsformen kann die Steuerung eingerichtet sein, die erste Quellenstatistik zu berechnen, ohne den ersten Datenblock zu decodieren.
  • In einer oder mehreren Ausführungsformen kann die Speichervorrichtung ferner einen Codierer aufweisen. Der Codierer kann ein ECC-Codierer sein. Der Codierer kann eingerichtet sein, Daten zu codieren, um den zweiten Datenblock zu generieren. Die Steuerung kann eingerichtet sein, die zweite Quellenstatistik während der Codierung des zweiten Datenblocks von dem Codierer zu berechnen.
  • In einer oder mehreren Ausführungsformen kann die Steuerung eingerichtet sein, die Decoderparameter für den ersten Datenblock zu bestimmen, indem sie zumindest teilweise Decoderparameter identifiziert, die für den zweiten Datenblock geeignet sind. Die Steuerung kann eingerichtet sein, die Decoderparameter als Antwort auf eine Bestimmung zu bestimmen, dass die erste Quellenstatistik positiv mit der zweiten Quellenstatistik korreliert ist.
  • In einer oder mehreren Ausführungsformen kann die Steuerung zum Vergleichen der ersten Quellenstatistik mit der zweiten Quellenstatistik eingerichtet sein, zumindest teilweise einen Korrelationskoeffizienten zwischen der ersten Quellenstatistik und der zweiten Quellenstatistik zu berechnen. Die Steuerung kann auch eingerichtet sein, den Korrelationskoeffizienten mit einer Korrelationsschwelle zu vergleichen. Die Steuerung kann zusätzlich eingerichtet sein, zu bestimmen, dass die erste Quellenstatistik positiv mit der zweiten Quellenstatistik korreliert ist. Die Steuerung kann eingerichtet sein, zu bestimmen, dass die erste Quellenstatistik positiv mit der zweiten Quellenstatistik korreliert ist, als Antwort auf den Korrelationskoeffizienten, der die Korrelationsschwelle erfüllt.
  • In einer oder mehreren Ausführungsformen kann der Decoder eingerichtet sein, den zweiten Datenblock vor dem Empfangen und Decodieren des ersten Datenblocks zu empfangen und zu decodieren.
  • In einer oder mehreren Ausführungsformen kann die Steuerung eingerichtet sein, den zweiten Datenblock unabhängig von einem physischen Ort des zweiten Datenblocks in der Speichervorrichtung auszuwählen.
  • In einer oder mehreren Ausführungsformen kann die Steuerung eingerichtet sein, den zweiten Datenblock auszuwählen, unabhängig davon, wann der zweite Datenblock in Bezug auf den ersten Datenblock codiert wurde.
  • In einer oder mehreren Ausführungsformen kann die erste Quellenstatistik aus einer Gruppe ausgewählt sein, bestehend aus einem Byte-Histogramm, einem Bit-Histogramm und einer Wiederholung von Sequenzen variabler Länge.
  • Verschiedene hier offenbarte Ausführungsformen beziehen sich auf ein System. Das System kann eine Vielzahl von Speicherzellen aufweisen, die codierte Datenblöcke speichern, die Daten enthalten, die von einer Vielzahl von Anwendungstypen generiert werden. Das System kann auch eine Speicherschnittstellenschaltung aufweisen, die mit der Vielzahl von Speicherzellen gekoppelt ist. Die Speicherschnittstellenschaltung kann eingerichtet sein, einen ersten codierten Datenblock zu empfangen, der in der Vielzahl von Speicherzellen gespeichert ist. Der erste codierte Datenblock kann ein erster ECC-codierter Datenblock sein. Der erste codierte Datenblock kann Daten enthalten, die von einem ersten Anwendungstyp generiert werden. Die Speicherschnittstellenschaltung kann auch eingerichtet sein, eine erste Quellenstatistik für den ersten codierten Datenblock mit einer Vielzahl von Klassen von Quellenstatistiken zu vergleichen, die den Daten entsprechen, die von einer Vielzahl von entsprechenden Anwendungstypen generiert werden. Die Speicherschnittstellenschaltung kann außerdem eingerichtet sein, eine erste Klasse von Quellenstatistiken zu identifizieren, die positiv mit der ersten Quellenstatistik korreliert ist, die zumindest teilweise auf dem Anwendungstyp basiert. Die Speicherschnittstellenschaltung kann ferner eingerichtet sein, Decoderparameter basierend auf der ersten Klasse von Quellenstatistiken zu ändern. Die Decoderparameter können ECC-Decoderparameter sein. Das System kann auch einen Decodierer einschließen, der mit der Speicherschnittstellenschaltung gekoppelt ist. Der Decoder kann ein ECC-Decoder sein. Der Decoder kann eingerichtet sein, den ersten codierten Datenblock unter Verwendung der durch die Speicherschnittstellenschaltung modifizierten Decoderparameter zu decodieren.
  • In einer oder mehreren Ausführungsformen kann die Speicherschnittstellenschaltung eingerichtet sein, zumindest teilweise eine Korrelation der ersten Quellenstatistik mit einer zweiten Quellenstatistik für einen zweiten codierten Datenblock zu berechnen, um die Decoderparameter zu identifizieren.
  • In einer oder mehreren Ausführungsformen kann das System ferner einen Codierer aufweisen. Der Codierer kann eingerichtet sein, Daten zu codieren, die in die Speicherzellen geschrieben werden. Die Speicherschnittstellenschaltung kann ferner eingerichtet sein, die erste Quellenstatistik während der Codierung von Daten zu bestimmen, um den ersten codierten Datenblock zu generieren.
  • In einer oder mehreren Ausführungsformen kann die Speicherschnittstellenschaltung eingerichtet sein, die erste Klasse von Quellenstatistiken als positiv mit der ersten Quellenstatistik korreliert zu identifizieren. Die Speicherschnittstellenschaltung kann eingerichtet sein, die erste Klasse von Quellenstatistiken als positiv mit der ersten Quellenstatistik korreliert zu identifizieren, als Antwort auf eine Korrelation zwischen der ersten Klasse von Quellenstatistiken und der ersten Quellenstatistik, die eine Korrelationsschwelle erfüllt.
  • In einer oder mehreren Ausführungsformen kann der Decoder eingerichtet sein, die Decoderparameter, die zum erfolgreichen Decodieren eines zweiten codierten Datenblocks verwendet werden, auf den ersten codierten Datenblock anzuwenden. Der Decoder kann eingerichtet sein, die Decoderparameter, die zum erfolgreichen Decodieren eines zweiten codierten Datenblocks verwendet werden, auf den ersten codierten Datenblock anzuwenden, als Antwort auf das Bestimmen, dass die Korrelation die Korrelationsschwelle überschreitet.
  • In einer oder mehreren Ausführungsformen generiert der erste Anwendungstyp Daten, die einen oder mehrere Arten von Daten enthalten, die aus einer Gruppe ausgewählt sind, bestehend aus Text, Bildern, Videos und Audio.
  • Verschiedene hier offenbarte Ausführungsformen beziehen sich auf ein Verfahren zum Decodieren codierter Daten. Die codierten Daten können ECC-codierte Daten sein. Das Verfahren kann das Bestimmen einer Quellenstatistik für einen codierten Datenblock aufweisen. Der codierte Datenblock kann ein ECC-codierter Datenblock sein. Das Verfahren kann auch das Berechnen einer ersten Korrelation der Quellenstatistik mit einer ersten Referenzquellenstatistik, die einem ersten referenzcodierten Datenblock entspricht, aufweisen. Der erste referenzcodierte Datenblock kann ein erster Referenz-ECC-codierter Datenblock sein. Das Verfahren kann zusätzlich das Vergleichen der ersten Korrelation mit einer Korrelationsschwelle aufweisen. Das Verfahren kann ferner das Decodieren des codierten Datenblocks unter Verwendung von Decodierparametern aufweisen, die zuvor zum Decodieren des ersten referenzcodierten Datenblocks verwendet wurden. Die Decodierparameter können ECC-Decodierparameter sein. Das Decodieren des codierten Datenblocks unter Verwendung von Decodierparametern, die zuvor zum Decodieren des ersten referenzcodierten Datenblocks verwendet wurden, kann als Antwort auf das Bestimmen, dass die erste Korrelation die Korrelationsschwelle erfüllt, erfolgen.
  • In einer oder mehreren Ausführungsformen kann das Verfahren ferner das Berechnen einer zweiten Korrelation der Quellenstatistik mit einer zweiten Referenzquellenstatistik aufweisen, die einem zweiten referenzcodierten Datenblock entspricht. Der zweite referenzcodierte Datenblock kann ein zweiter Referenz-ECC-codierter Datenblock sein. Die codierten Daten können unter Verwendung von Decodierparametern decodiert werden, die zuvor zum Decodieren des ersten referenzcodierten Datenblocks verwendet wurden, wenn sowohl (i) die erste Korrelation die Korrelationsschwelle erfüllt als auch (ii) die erste Korrelation größer als die zweite Korrelation ist.
  • In einer oder mehreren Ausführungsformen kann das Verfahren ferner das Bestimmen der Quellenstatistik für den codierten Datenblock während der Codierung von Daten in dem codierten Datenblock zum Generieren des codierten Datenblocks aufweisen. Das Codieren von Daten kann ECC-Codieren sein.
  • In einer oder mehreren Ausführungsformen kann das Verfahren ferner das Bestimmen aufweisen, dass der erste referenzcodierte Datenblock erfolgreich unter Verwendung der Decodierparameter als Voraussetzung für das Decodieren des codierten Datenblocks unter Verwendung der Decodierparameter decodiert wurde.
  • In einer oder mehreren Ausführungsformen kann das Verfahren ferner das Bestimmen aufweisen, dass der codierte Datenblock unter Verwendung der Decodierparameter, die zuvor zum Decodieren des ersten referenzcodierten Datenblocks verwendet wurden, nicht erfolgreich decodiert wird. Das Verfahren kann ferner das Decodieren des codierten Datenblocks unter Verwendung eines zweiten Satzes von Decodierparametern aufweisen. Der zweite Satz von Decodierparametern kann ein zweiter Satz von ECC-Decodierparametern sein.
  • In einer oder mehreren Ausführungsformen kann der zweite Satz von Decodierparametern zuvor verwendet worden sein, um den zweiten referenzcodierten Datenblock zu decodieren.
  • In einer oder mehreren Ausführungsformen kann der zweite Satz von Decodierparametern voreingestellte Decodierparameter sein, die verwendet werden, um codierte Datenblöcke zu decodieren, wenn keine Korrelation gefunden wird, welche die Korrelationsschwelle überschreitet.
  • In einer oder mehreren Ausführungsformen kann das Verfahren ferner das Bestimmen aufweisen, dass die erste Korrelation die Korrelationsschwelle erfüllt. Das Bestimmen, dass die erste Korrelation die Korrelationsschwelle erfüllt, kann als Antwort auf eine Bestimmung erfolgen, dass Daten in dem codierten Datenblock von einem gleichen Anwendungstyp wie Daten im ersten referenzcodierten Datenblock generiert wurden.
  • Verschiedene hier offenbarte Ausführungsformen beziehen sich auf eine Speichervorrichtung. Die Speichervorrichtung kann Mittel zum Bestimmen einer Quellenstatistik für einen codierten Datenblock aufweisen. Der codierte Datenblock kann ein ECC-codierter Datenblock sein. Die Speichervorrichtung kann auch Mittel zum Berechnen einer ersten Korrelation der Quellenstatistik mit einer ersten Referenzquellenstatistik aufweisen, die einem ersten referenzcodierten Datenblock entspricht. Der erste referenzcodierte Datenblock kann ein erster Referenz-ECC-codierter Datenblock sein. Die Speichervorrichtung kann zusätzlich Mittel zum Berechnen einer zweiten Korrelation der Quellenstatistik mit einer zweiten Referenzquellenstatistik aufweisen, die einem zweiten referenzcodierten Datenblock entspricht. Der zweite referenzcodierte Datenblock kann ein zweiter Referenz-ECC-codierter Datenblock sein. Die Speichervorrichtung kann ferner Mittel zum Vergleichen der ersten Korrelation mit einer Korrelationsschwelle aufweisen. Die Speichervorrichtung kann ferner Mittel zum Decodieren des codierten Datenblocks unter Verwendung von Decodierparametern aufweisen, die zuvor zum Decodieren des ersten referenzcodierten Datenblocks verwendet wurden. Die Decodierparameter können ECC-Decodierparameter sein. Das Decodieren des codierten Datenblocks unter Verwendung von Decodierparametern, die zuvor zum Decodieren des ersten referenzcodierten Datenblocks verwendet wurden, kann als Antwort auf das Bestimmen, dass die erste Korrelation die Korrelationsschwelle erfüllt, erfolgen.
  • Verschiedene hier offenbarte Ausführungsformen beziehen sich auf eine Steuerung. Die Steuerung kann eingerichtet sein, eine erste Quellenstatistik für einen ersten Datenblock zu bestimmen. Der erste Datenblock kann ein ECC-codierter Datenblock sein. Die Steuerung kann auch eingerichtet sein, die erste Quellenstatistik mit einer zweiten Quellenstatistik zu vergleichen. Die zweite Quellenstatistik kann für einen zweiten Datenblock sein. Der zweite Datenblock kann ein ECC-codierter Datenblock sein. Die Steuerung kann außerdem eingerichtet sein, Decoderparameter für den ersten Datenblock basierend auf mindestens einer der ersten und zweiten Quellenstatistiken zu bestimmen. Die Decoderparameter können ECC-Decoderparameter sein. Die Steuerung kann eingerichtet sein, die Decoderparameter als Antwort auf das Bestimmen einer positiven Korrelation zwischen der ersten Quellenstatistik und der zweiten Quellenstatistik zu bestimmen. Die Steuerung kann zusätzlich eingerichtet sein, den ersten Datenblock unter Verwendung der bestimmten Decoderparameter zu decodieren.
  • In einer oder mehreren Ausführungsformen können der erste Datenblock und der zweite Datenblock beide Daten eines ersten Typs einschließen. Der erste Typ kann einer Anwendung entsprechen, welche die Daten generiert hat.
  • In einer oder mehreren Ausführungsformen kann der erste Datenblock einer ersten Korrelation entsprechen. Der zweite Datenblock kann einer zweiten Anwendung entsprechen. Die zweite Anwendung kann sich von der ersten Anwendung unterscheiden. Der erste und der zweite Datenblock können beide von einem ersten Typ sein. Der erste Typ kann einem Benutzer entsprechen, der die Daten generiert hat. Alternativ oder zusätzlich kann der erste Typ einem Dateityp entsprechen.
  • In einer oder mehreren Ausführungsformen kann die Steuerung eingerichtet sein, die erste Quellenstatistik zu bestimmen, ohne den ersten Datenblock zu decodieren.
  • In einer oder mehreren Ausführungsformen kann die Steuerung eingerichtet sein, Daten zu codieren, um den zweiten Datenblock zu generieren. Die Steuerung kann eingerichtet sein, den zweiten Datenblock zu ECC-codieren. Die Steuerung kann auch eingerichtet sein, die zweite Quellenstatistik während des Codierens des zweiten Datenblocks zu bestimmen.
  • In einer oder mehreren Ausführungsformen kann die Steuerung eingerichtet sein, die Decoderparameter für den ersten Datenblock zu bestimmen, indem sie zumindest teilweise Decoderparameter identifiziert, die für den zweiten Datenblock geeignet sind. Die Decoderparameter können identifiziert werden als Antwort auf eine Bestimmung, dass die erste Quellenstatistik positiv mit der zweiten Quellenstatistik korreliert ist.
  • In einer oder mehreren Ausführungsformen kann die Steuerung zum Vergleichen der ersten Quellenstatistik mit der zweiten Quellenstatistik eingerichtet sein, zumindest teilweise einen Korrelationskoeffizienten zwischen der ersten Quellenstatistik und der zweiten Quellenstatistik zu berechnen. Die Steuerung kann auch eingerichtet sein, den Korrelationskoeffizienten mit einer Korrelationsschwelle zu vergleichen. Die Steuerung darüber hinaus eingerichtet sein, zu bestimmen, dass die erste Quellenstatistik positiv mit der zweiten Quellenstatistik korreliert ist. Die Steuerung kann eingerichtet sein, zu bestimmen, dass die erste Quellenstatistik positiv mit der zweiten Quellenstatistik korreliert ist, als Antwort auf den Korrelationskoeffizienten, der die Korrelationsschwelle erfüllt.
  • In einer oder mehreren Ausführungsformen kann die Steuerung eingerichtet sein, den zweiten Datenblock vor dem Empfangen und Decodieren des ersten Datenblocks zu empfangen und zu decodieren.
  • In einer oder mehreren Ausführungsformen kann die Steuerung eingerichtet sein, den zweiten Datenblock unabhängig von einem physischen Ort des zweiten Datenblocks in einer Speichervorrichtung auszuwählen.
  • In einer oder mehreren Ausführungsformen kann die Steuerung eingerichtet sein, den zweiten Datenblock auszuwählen, unabhängig davon, wann der zweite Datenblock in Bezug auf den ersten Datenblock codiert wurde.
  • In einer oder mehreren Ausführungsformen kann die erste Quellenstatistik auf einer zeitlichen Korrelation beruhen. Die zeitliche Korrelation kann zwischen der Codierung des ersten und zweiten Datenblocks liegen. Die Decoderparameter können basierend auf der ersten Quellenstatistik bestimmt werden.
  • In einer oder mehreren Ausführungsformen kann die Steuerung kann eingerichtet sein, die Decoderparameter basierend auf einer zeitlichen Korrelation zu ändern. Die zeitliche Korrelation kann eine zeitliche Korrelation zwischen der Codierung des ersten und zweiten Datenblocks sein.
  • In einer oder mehreren Ausführungsformen kann das Vergleichen der ersten Quellenstatistik mit der zweiten Quellenstatistik das Vergleichen von Frequenzen von mindestens einem von Bits, Bytes und Sequenzen variabler Länge in dem ersten und zweiten Datenblock aufweisen.
  • In einer oder mehreren Ausführungsformen kann die erste Quellenstatistik ein Byte-Histogramm sein. Das Byte-Histogramm kann Frequenzen von Bytes entsprechen. Die erste Quellenstatistik kann alternativ oder zusätzlich ein Bit-Histogramm sein. Das Bit-Histogramm kann Frequenzen von Bits entsprechen. Die erste Quellenstatistik kann alternativ oder zusätzlich auch eine Wiederholung von Sequenzen variabler Länge sein.
  • Verschiedene hier offenbarte Ausführungsformen beziehen sich auf ein Verfahren. Das Verfahren kann das Empfangen eines ersten codierten Datenblocks aufweisen. Der erste codierte Datenblock kann ein ECC-codierter Datenblock sein. Der erste codierte Datenblock kann in einer Vielzahl von Speicherzellen gespeichert werden, die codierte Datenblocks speichern, die Daten enthalten, die von einer Vielzahl von Anwendungstypen generiert wurden. Der erste codierte Datenblock kann Daten enthalten, die von einem ersten Anwendungstyp generiert werden. Das Verfahren kann auch das Vergleichen einer ersten Quellenstatistik für den ersten codierten Datenblock mit einer Vielzahl von Klassen von Quellenstatistiken aufweisen, die Daten entsprechen, die von einer Vielzahl von entsprechenden Anwendungstypen generiert werden. Das Verfahren kann darüber hinaus das Identifizieren einer ersten Klasse von Quellenstatistiken aufweisen, die positiv mit der ersten Quellenstatistik korreliert sind. Die erste Klasse von Quellenstatistiken kann zumindest teilweise auf dem Anwendungstyp basierend identifiziert werden. Das Verfahren kann zusätzlich das Modifizieren von Decoderparametern aufweisen. Die Decoderparameter können ECC-Decoderparameter sein. Die Decoderparameter können basierend auf der ersten Klasse von Quellenstatistiken modifiziert werden. Das Verfahren kann ferner das Decodieren des ersten codierten Datenblocks unter Verwendung der modifizierten Decoderparameter aufweisen.
  • In einer oder mehreren Ausführungsformen kann das Identifizieren der Decoderparameter das Berechnen einer Korrelation der ersten Quellenstatistik mit einer zweiten Quellenstatistik für einen zweiten codierten Datenblock aufweisen. Der zweite codierte Datenblock kann ein zweiter ECC-codierter Datenblock sein.
  • In einer oder mehreren Ausführungsformen kann das Verfahren das Codieren von in die Speicherzellen geschriebenen Daten aufweisen. Das Codieren kann ECC-Codieren sein. Das Verfahren kann auch das Bestimmen der ersten Quellenstatistik während des Codierens von Daten aufweisen, um den ersten codierten Datenblock zu generieren.
  • In einer oder mehreren Ausführungsformen kann die erste Klasse von Quellenstatistiken als positiv mit der ersten Quellenstatistik korreliert identifiziert werden, als Antwort auf eine Korrelation zwischen der ersten Klasse von Quellenstatistiken und der ersten Quellenstatistik, die eine Korrelationsschwelle erfüllt.
  • In einer oder mehreren Ausführungsformen können die Decoderparameter, die zum erfolgreichen Decodieren eines zweiten codierten Datenblocks verwendet werden, auf den ersten codierten Datenblock angewendet werden, als Antwort auf das Bestimmen, dass die Korrelation die Korrelationsschwelle überschreitet.
  • In einer oder mehreren Ausführungsformen kann der erste Anwendungstyp Daten generieren, die einen oder mehrere Typen von Daten enthalten, die aus einer Gruppe ausgewählt sind, bestehend aus Text, Bildern, Videos und Audio.
  • Figurenliste
    • 1 ist ein Blockdiagramm eines Computersystems gemäß einer oder mehreren beispielhaften Ausführungsformen.
    • 2 ist eine Speicherschnittstellenschaltung, die eine Decodier-Steuerung gemäß einer oder mehreren beispielhaften Ausführungsformen einschließt.
    • 3 ist ein Flussdiagramm, das einen Prozess zum Decodieren codierter Daten gemäß einer oder mehreren beispielhaften Ausführungsformen veranschaulicht.
    • 4 ist ein Flussdiagramm, das einen Prozess zur verbesserten Decodierung gemäß einer oder mehreren beispielhaften Ausführungsformen veranschaulicht.
    • 5 ist ein Flussdiagramm, das einen Prozess zur verbesserten Decodierung gemäß einer oder mehreren beispielhaften Ausführungsformen veranschaulicht.
    • 6 ist ein Flussdiagramm, das einen Prozess zur verbesserten Decodierung gemäß einer oder mehreren beispielhaften Ausführungsformen veranschaulicht.
    • 7 ist ein Flussdiagramm, das einen Prozess zur verbesserten Decodierung gemäß einer oder mehreren beispielhaften Ausführungsformen veranschaulicht.
    • 8 ist ein Flussdiagramm, das einen Prozess zur verbesserten Decodierung gemäß einer oder mehreren beispielhaften Ausführungsformen veranschaulicht.
    • 9A stellt gemäß einer oder mehreren beispielhaften Ausführungsformen eine sequentielle Schreibung dar, die in einer Rechenvorrichtung aufgezeichnet wurde.
    • 9B stellt gemäß einer oder mehreren beispielhaften Ausführungsformen eine sequentielle Schreibung dar, die in einer Rechenvorrichtung aufgezeichnet wurde.
    • 9C stellt gemäß einer oder mehreren beispielhaften Ausführungsformen eine sequentielle Schreibung dar, die in einer Rechenvorrichtung aufgezeichnet wurde.
    • 9D stellt gemäß einer oder mehreren beispielhaften Ausführungsformen eine sequentielle Schreibung dar, die in einer Rechenvorrichtung aufgezeichnet wurde.
    • 10A stellt gemäß einer oder mehreren beispielhaften Ausführungsformen die Korrelation zwischen einem repräsentativen Datenblock und den Datenblöcken aus der sequentiellen Schreibung der 9A-D dar.
    • 10B stellt gemäß einer oder mehreren beispielhaften Ausführungsformen die Korrelation zwischen einem repräsentativen Datenblock und den Datenblöcken aus der sequentiellen Schreibung der 9A-D dar.
    • 10C stellt gemäß einer oder mehreren beispielhaften Ausführungsformen die Korrelation zwischen einem repräsentativen Datenblock und den Datenblöcken aus der sequentiellen Schreibung der 9A-D dar.
    • 10D stellt gemäß einer oder mehreren beispielhaften Ausführungsformen die Korrelation zwischen einem repräsentativen Datenblock und den Datenblöcken aus der sequentiellen Schreibung der 9A-D dar.
    • 11A zeigt gemäß einer oder mehreren beispielhaften Ausführungsformen Daten, die einer Textdatei in ASCII entsprechen, die in einem codierten Datenblock eingeschlossen sein kann.
    • 11B zeigt gemäß einer oder mehreren beispielhaften Ausführungsformen verschiedene Typen von Daten, die von einem typischen Benutzer in den Speicher geschrieben werden können.
    • 12 stellt gemäß einer oder mehreren beispielhaften Ausführungsformen Simulationsergebnisse bereit, die eine verbesserte Decodierung veranschaulichen.
    • 13 stellt gemäß einer oder mehreren beispielhaften Ausführungsformen Simulationsergebnisse bereit, die eine verbesserte Decodierung veranschaulichen.
  • Die vorstehenden und andere Merkmale der vorliegenden Offenbarung werden aus der folgenden Beschreibung und den beigefügten Ansprüchen in Verbindung mit den beigefügten Zeichnungen ersichtlich. Angesichts dessen, dass diese Zeichnungen nur einige Ausführungsformen gemäß der Offenbarung darstellen und deshalb nicht als ihren Umfang einschränkend betrachtet werden sollen, wird die Offenbarung mit zusätzlicher Spezifität und Detail durch die Verwendung der beigefügten Zeichnungen beschrieben.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden detaillierten Beschreibung wird auf die beigefügten Zeichnungen Bezug genommen, die einen Teil davon bilden. In den Zeichnungen kennzeichnen ähnliche Symbole üblicherweise ähnliche Komponenten, sofern der Kontext nichts anderes vorschreibt. Die in der detaillierten Beschreibung, den Zeichnungen und den Ansprüchen beschriebenen veranschaulichenden Ausführungsformen sind nicht als Einschränkung gedacht. Andere Ausführungsformen können verwendet werden und andere Änderungen können vorgenommen werden, ohne vom Geist oder Umfang des hier präsentierten Gegenstandes abzuweichen. Es wird leicht zu verstehen sein, dass die Aspekte der vorliegenden Offenbarung, wie hier allgemein beschrieben und in den Figuren veranschaulicht, in einer großen Vielfalt von verschiedenen Konfigurationen angeordnet, ersetzt, kombiniert und gestaltet werden können, die alle explizit in Betracht gezogen werden und Teil dieser Offenbarung sind.
  • Hierin offenbart sind Verfahren, Vorrichtungen und Systeme zum Erhalten von Quellenstatistiken mit hoher Genauigkeit unter Beibehaltung eines hohen Durchsatzes durch Ausnutzung der Korrelation zwischen Datenblöcken. Dadurch kann eine verbesserte Korrekturfähigkeit erreicht werden, und die Decodierzeit und der Leistungsverbrauch können reduziert werden. Decodierung bezieht sich hier auf die Umwandlung von Daten in codierter Form in eine decodierte Form. Beispiele für Decodierung schließen ECC-Decodierung (Fehlerkorrekturcode-Decodierung) ein. Beispiele für die Codierung schließen ECC-Codierung ein.
  • In einem Aspekt kann eine Quellenstatistik für einen Datenblock aus beliebigen Daten bestehen, die den Inhalt (d. h. die darin enthaltenen Daten) des Datenblocks kennzeichnen. Die Quellenstatistik kann zumindest teilweise auf Mustern in den Daten basieren oder kann mit der Wahrscheinlichkeit korrelieren, dass bestimmte Werte in bestimmten Positionen in dem Datenblock gefunden werden. Quellenstatistiken können die Art und den Umfang kennzeichnen, in dem Daten in einem Datenblock nicht gleichmäßig verteilt sind. Beispielattribute, die nachverfolgt werden können, um Quellenstatistiken zu lernen, schließen Histogramme und Frequenz von Sequenzen mit variabler Länge ein. Zum Beispiel kann ein Byte-Histogramm eine Frequenz für jedes der 256 möglichen Bytes anzeigen (binär, von 00000000 bis 11111111), was darauf hindeutet, dass höherfrequente Bytes wahrscheinlicher sind als niederfrequente Bytes, und dass folglich bei einer Bitkorrektur, die ein höherfrequentes Byte erzielt, die Wahrscheinlichkeit höher ist, genau zu sein. Ein Bit-Histogramm kann die Wahrscheinlichkeit von Einsen und Nullen messen, und die Frequenz von Sequenzen kann sich wiederholende Sequenzen identifizieren, so dass bei einer Sequenz von Bits die Wahrscheinlichkeit einer genauen Korrektur höher ist, wenn die Korrektur eine sich wiederholende Sequenz erzielen würde, die häufiger im Vergleich zu einer sich wiederholenden Sequenz, die weniger häufig beobachtet wird, beobachtet wird.
  • In einem weiteren Aspekt werden die Quellenstatistiken eines aktuellen Datenblocks für die Decodierung geschätzt, mit höherer Genauigkeit und mit geringeren (oder keinen) Verzögerungen. Quellenstatistiken können aus einem anderen Datenblock gelernt werden, der decodiert wurde und der Statistiken aufweist, die in hohem Maße mit den Statistiken des aktuellen Datenblocks korreliert sind. Der unterschiedliche Datenblock kann erfolgreich decodiert worden sein, muss aber nicht erfolgreich decodiert worden sein. Vorteilhafterweise können Quellenstatistiken aus Datenblöcken ohne Decodierung gelernt werden. In verschiedenen Implementierungen können Quellenstatistiken, die aus erfolgreich decodierten Datenblöcken gelernt wurden, informativer oder genauer sein. Datenblöcke mit hoher Korrelation der entsprechenden Statistiken können in verschiedenen Datenblöcken gefunden werden, die aus derselben Quelle oder Anwendung generiert wurden. Diese Statistiken können verwendet werden, um die Decoderparameter anzupassen und die Decoderkorrekturfähigkeit zu verbessern sowie die Decodierlatenz und den Leistungsverbrauch zu reduzieren.
  • Die Kenntnis der zugrunde liegenden Statistiken codierter Daten trägt dazu bei, die Leistung und Korrekturfähigkeiten von Decodern zu verbessern. Als Beispiel für Benutzerinformationen wird eine Textdatei in ASCII in 11A gezeigt. Jedes Zeichen in ASCII ist ein Byte, und die häufigsten Zeichen belegen in der Regel nur die sieben niedrigstwertigen Bits (LSBs) des Bytes, wobei das höchstwertigste Bit (MSB) einen Wert von Null hat (entsprechend den ersten Spalten, die in 11A eingekreist sind). Wenn ein ECC-Decoder weiß, dass die Daten wie in zum Beispiel 11A geformt sind, so dass die ersten Bits alle Null sind (oder anderweitig wahrscheinlicher Null sind), könnte der Decoder Decodierparameter ändern, um diese Form abzubilden. Zum Beispiel könnte der Decoder die Wahrscheinlichkeit der 1/0-Verteilung im MSB jedes Bytes ändern (so dass die Wahrscheinlichkeit, dass das erste Bit mit einem Wert von 1 null ist oder anderweitig verringert wird), was die Leistung und Korrekturfähigkeit verbessert.
  • Ohne Verlust der Allgemeingültigkeit wird nun die Möglichkeit erläutert, ein Byte-Histogramm als Quellenstatistiken zu verwenden, um den in Ausführungsformen der Erfindung erreichbaren Gewinn zu demonstrieren. Unter Bezugnahme auf 9A-D wird beispielhaft ein in einer Rechenvorrichtung aufgezeichneter sequentieller Schreibbefehl veranschaulicht. Die hier veranschaulichte sequentielle Schreibung besteht aus 128 Datenblöcken die jeweils 4 Kilobyte (KB) sind. Die Byte-Histogramme in den 9A-D zeigen, dass Bytes in dem Histogramm nicht gleichmäßig dargestellt sind und somit wertvolle Informationen zur Korrektur anderer Datenblöcke enthalten, die mit ihnen korrelieren. Solange die Quellenstatistiken aussagekräftig sind (z. B. ungleiche Verteilung für den Fall des Byte-Histogramms), können die Quellenstatistiken bei der Korrektur anderer Datenblöcke nützlich sein. 9A und 9B entsprechen zwei Datenblöcken (8 und 48) aus Textdateien. Der Datenblock in 9C besteht vollständig (oder fast vollständig) aus Einsen, wie durch die Spitze bei Byte 255 (d. h. 11111111) dargestellt, und der Datenblock in 9D besteht hauptsächlich aus Nullen, wie durch die Spitze bei Byte 0 (d. h. 00000000) dargestellt. Es sei angemerkt, dass Datenblöcke ähnlich und kontextuell korreliert sein können, obwohl sie nicht nebeneinander geschrieben wurden, wie die ähnlichen Muster der Datenblöcke 8 (9A) und 48 (9B) zeigen, die 40 Blöcke voneinander entfernt sind. Das heißt, dass Daten nicht sequentiell oder zeitlich korreliert sein müssen, um ähnlich zu sein und somit in der Lage sind, Decodierparameter zu informieren und zu verbessern.
  • Die 10A-D zeigen die Korrelation zwischen vier repräsentativen Datenblöcken (8, 48, 88 und 128) und die gesamten 128 Datenblöcke aus dem sequentiellen Schreibungsbeispiel der 9A-D. Das heißt, dass die 10A, 10B, 10C und 10D die Korrelation (y-Achse) der Datenblöcke 8, 48, 88 bzw. 128 mit jedem der Datenblöcke 1-128 (x-Achse) bereitstellen. In 10A ist zu erkennen, dass der Datenblock 8 eine Korrelation von 1 mit dem Datenblock 8 hat und mit den Datenblöcken um den Datenblock 8 (z. B. Datenblöcke im Bereich von etwa 5 bis etwa 15) hoch korreliert ist und auch mit den Datenblöcken im Bereich von etwa 50 bis etwa 75 hoch korreliert ist. Ähnlich ist in 10B zu erkennen, dass der Datenblock 48 eine Korrelation von 1 mit dem Datenblock 48 hat, und mit Datenblocks nahe 48 hoch korreliert ist (z. B. Datenblocks im Bereich von etwa 48 bis etwa 75), und auch mit Datenblocks im Bereich von etwa 1 bis etwa 15 hoch korreliert ist. In 10C ist zu erkennen, dass der Datenblock 88 eine Korrelation von 1 mit dem Datenblock 88 hat und mit Datenblöcken nahe 88 (z. B. Datenblöcke im Bereich von etwa 85 bis etwa 95) hoch korreliert ist, und in 10D ist zu erkennen, dass der Datenblock 128 eine Korrelation von 1 mit dem Datenblock 128 hat und mit Datenblöcken nahe 128 (z. B. Datenblöcke im Bereich von etwa 95 bis etwa 128) hoch korreliert ist. Diese veranschaulichen, dass Datenblöcke aus sequentiellen Schreibungen hoch korreliert sein können. Die beobachteten zeitlichen Korrelationen (d. h. ein Byte-Histogramm des vorhergehenden decodierten Datenblocks ist dem Byte-Histogramm des aktuellen Datenblocks sehr ähnlich) können verwendet werden, um die Korrekturfähigkeit zu erhöhen und die Decodierlatenz und den Leistungsverbrauch zu reduzieren.
  • Zusätzlich zur zeitlichen Korrelation kann sich die Korrelation zwischen verschiedenen Datenblöcken auf den Typ der Daten stützen. Es gibt verschiedene Typen von Daten, die in den Speicher geschrieben werden, wie das repräsentative Kreisdiagramm in 11B veranschaulicht. Unterschiedliche Typen von Daten haben unterschiedliche Eigenschaften. Verschiedene Blöcke von Daten desselben Typs haben jedoch ähnliche Eigenschaften. In 11B sind die identifizierten Datentypen Journaling, Kamera, Videoanwendungen, E-Mail, Browser, Wetter, Social-Networking-Anwendung 1, Social-Networking-Anwendung 2, Galerie, Video-Streaming und andere. Zum Beispiel wird erwartet, dass ein Datenblock mit Journaling-Daten eines typischen Benutzers eine ähnliche Struktur / Statistik / Eigenschaften hat wie ein anderer Datenblock, der auch Journaling-Daten einschließt, sich aber signifikant von Datenblöcken mit Bilddaten unterscheiden kann. Daher kann vor dem Decodieren eines bestimmten Datenblocks die Quellenstatistik von anderen Datenblocks desselben Typs / derselben Anwendung / desselben Benutzers gelernt werden, und diese Informationen können verwendet werden, um die Korrekturmöglichkeiten des aktuellen Decodierungsversuchs zu verbessern. Da hohe Korrelationen zwischen zwei Datenblöcken beobachtet werden können, die zeitlich nicht aufeinanderfolgend sind, aber Datenblöcke aus derselben Quelle oder derselben Anwendung sind, können Datenblöcke auch dann hoch korreliert sein, wenn Daten zufällig gelesen werden.
  • 1 ist ein Blockdiagramm eines Computersystems 100 gemäß einer beispielhaften Ausführungsform. Das Computersystem 100 schließt ein Speichersystem 114 ein, das gemäß Befehlen von einem Hostsystem 112 arbeitet. Das Computersystem 100 kann jede elektronische Vorrichtung sein, wie ein Personalcomputer, ein Servercomputer, ein Laptop, ein Smartphone, ein Tablet-Computer, eine Smart Watch usw. Das Speichersystem 114 kommuniziert mit dem Hostsystem 112 (z. B. in einigen Implementierungen ein Betriebssystem oder eine Anwendung) über eine Host-Schnittstelle 116. Das Speichersystem 114 kann in Form eines austauschbaren Speichers wie einer Speicherkarte oder eines Laufwerks, oder in Form eines eingebetteten Speichersystems vorliegen.
  • Das Speichersystem 114 schließt eine Speichervorrichtung 102 und eine Speichersteuerung 106 ein. Die Speichersteuerung 106 ist eine Schaltung, die Vorgänge der Speichervorrichtung 102 gemäß Befehlen aus dem Hostsystem 112 steuert. Die Speichervorrichtung 102 kann ein oder mehrere Arrays von Speicherzellen aufweisen, die über einen oder mehrere integrierte Schaltungschips verteilt sind.
  • Die Speichervorrichtung 102 ist eine Hardwarekomponente, die elektronische Daten speichert. In einem Aspekt ist die Speichervorrichtung 102 verkörpert als eine Halbleiterspeichervorrichtung mit einer oder mehreren flüchtigen Speichervorrichtungen, wie „DRAM“-Speichervorrichtungen (Dynamic Random Access Memory) oder „SRAM“-Speichervorrichtungen (Static Random Access Memory), nichtflüchtige Speichervorrichtungen wie „ReRAM“-Speicher (Resistive Random Access Memory), „EEPROM“-Speicher (Electrically Erasable Programmable Read Only Memory), Flash-Speicher (der auch als Untergruppe eines EEPROM angesehen werden kann), „FRAM“-Speicher (Ferroelectric Random Access Memory) und „MRAM“-Speicher (Magnetoresistive Random Access Memory), andere Halbleiterelemente, die Informationen speichern können, oder eine Kombination davon.
  • Die Speichervorrichtung 102 kann aus passiven und/oder aktiven Elementen in beliebigen Kombinationen gebildet sein und kann eine Vielzahl von Speicherzellen einschließen. In einem nicht einschränkenden Beispiel schließen passive Halbleiter-Speicherelemente ReRAM-Vorrichtungselemente ein, die in einigen Ausführungsformen ein Speicherelement mit Widerstandsumschaltung wie ein Anti-Fuse-, Phasenwechsel-Material usw. und optional ein Lenkelement wie eine Diode usw. einschließen. Weiterhin schließen in einem anderen nicht einschränkenden Beispiel aktive Halbleiter-Speicherelemente EEPROM- und Flash-Speichervorrichtungselemente ein, die in einigen Ausführungsformen Elemente mit einem Ladungsspeicherbereich wie ein Floating-Gate, leitende Nanopartikel oder ein Ladung speicherndes dielektrisches Material einschließen.
  • Mehrere Speicherelemente können so eingerichtet sein, dass sie in Reihe geschaltet sind oder dass jedes Element einzeln zugänglich ist. In einem nicht einschränkenden Beispiel können Flash-Speichervorrichtungen in NAND-Konfiguration (NAND-Speicher) Speicherelemente, die in Reihe geschaltet sind, enthalten. Das NAND-Speicherarray kann so eingerichtet sein, dass das Array eine oder mehrere Speicherketten einschließt, in denen eine Kette mehrere Speicherelemente einschließt, die sich eine einzelne Bit-Leitung teilen. Alternativ können Speicherelemente so eingerichtet sein, dass jedes Element einzeln zugänglich ist, z. B. ein NOR-Speicherarray. NAND- und NOR-Speicherkonfigurationen sind beispielhaft, und Speicherelemente können anderweitig eingerichtet sein.
  • Die Halbleiterspeicherelemente, die innerhalb und/oder über einem Substrat angeordnet sind, können in zwei oder drei Dimensionen angeordnet sein, wie einer zweidimensionalen Speicherstruktur oder einer dreidimensionalen Speicherstruktur.
  • In einer zweidimensionalen Speicherstruktur sind die Halbleiterspeicherelemente in einer einzelnen Ebene oder einer einzelnen Speichervorrichtungsebene angeordnet. Üblicherweise sind in einer zweidimensionalen Speicherstruktur Speicherelemente in einer Ebene (z. B. in einer x-z-Richtung-Ebene) angeordnet, die sich im Wesentlichen parallel zu einer Hauptfläche eines Substrats erstreckt, das die Speicherelemente trägt. Das Substrat kann ein Wafer sein, über dem die Speicherelemente ausgebildet sind, oder eine Schicht, in der die Speicherelemente ausgebildet sind. Das Substrat kann auch ein Trägersubstrat sein, das nach deren Ausbilden an den Speicherelementen befestigt ist. Als ein nicht einschränkendes Beispiel, kann das Substrat einen Halbleiter wie Silizium einschließen.
  • Die Speicherelemente können auf der einzelnen Speichervorrichtungsebene in einem geordneten Array angeordnet sein, wie in einer Vielzahl von Zeilen und/oder Spalten. Jedoch können die Speicherelemente in nicht regelmäßigen oder nicht orthogonalen Konfigurationen angeordnet sein. Die Speicherelemente können jeweils zwei oder mehr Elektroden oder Kontaktleitungen, wie Bitleitungen und Wortleitungen, aufweisen.
  • Ein dreidimensionales Speicherarray ist so angeordnet, dass Speicherelemente mehrere Ebenen oder mehrere Speichervorrichtungsebenen belegen, wodurch eine Struktur in drei Dimensionen gebildet wird (d. h. in der x-, y- und z-Richtung, wo die y-Richtung im Wesentlichen senkrecht ist und die x- und z-Richtungen im Wesentlichen parallel zur Hauptoberfläche des Substrats verlaufen).
  • Als ein nicht einschränkendes Beispiel kann eine dreidimensionale Speicherstruktur vertikal als ein Stapel von mehreren zweidimensionalen Speichervorrichtungsebenen angeordnet sein. Als weiteres nicht einschränkendes Beispiel kann ein dreidimensionales Speicherarray als mehrere vertikale Spalten (z. B. Spalten, die sich im Wesentlichen senkrecht zur Hauptfläche des Substrats erstrecken, d. h. in y-Richtung) angeordnet sein, wobei jede Spalte mehrere Speicherelemente in jeder Spalte aufweist. Die Spalten können in einer zweidimensionalen Konfiguration angeordnet sein, z. B. in einer x-z-Ebene, was in einer dreidimensionalen Anordnung von Speicherelementen mit Elementen auf mehreren vertikal gestapelten Speicherebenen resultiert. Andere Konfigurationen von Speicherelementen in drei Dimensionen können auch ein dreidimensionales Speicherarray bilden.
  • In einem dreidimensionalen NAND-Speicherarray können die Speicherelemente miteinander gekoppelt sein, um eine NAND-Kette innerhalb einer einzelnen horizontalen (z. B. x-z) Speichervorrichtungsebene zu bilden. Alternativ können die Speicherelemente miteinander gekoppelt sein, um eine vertikale NAND-Kette zu bilden, die über mehrere horizontale Speichervorrichtungsebenen verläuft. Andere dreidimensionale Konfigurationen können in Betracht gezogen werden, wobei einige NAND-Ketten Speicherelemente in einer einzelnen Speicherebene enthalten, während andere Ketten Speicherelemente enthalten, die sich über mehrere Speicherebenen erstrecken. Dreidimensionale Speicherarrays können auch als eine NOR-Konfiguration und als eine ReRAM-Konfiguration ausgelegt sein.
  • In einem monolithischen dreidimensionalen Speicherarray sind ein oder mehrere Speichervorrichtungsebenen über einem einzigen Substrat gebildet. Gegebenenfalls kann das monolithische dreidimensionale Speicherarray auch eine oder mehrere Speicherschichten zumindest teilweise innerhalb des einzelnen Substrats aufweisen. Als ein nicht einschränkendes Beispiel, kann das Substrat einen Halbleiter wie Silizium einschließen. In einem monolithischen dreidimensionalen Array werden die Schichten, die jede Speichervorrichtungsebene des Arrays bilden, üblicherweise auf den Schichten der darunter liegenden Speichervorrichtungsebenen des Arrays gebildet. Jedoch können Schichten von benachbarten Speichervorrichtungsebenen eines monolithischen dreidimensionalen Speicherarrays gemeinsam genutzt werden oder Zwischenschichten zwischen Speichervorrichtungsebenen aufweisen.
  • Zweidimensionale Arrays können getrennt gebildet und dann zusammengepackt werden, um eine nicht monolithische Speichervorrichtung mit mehreren Speicherschichten zu bilden. Beispielsweise können nicht monolithische gestapelte Speicher konstruiert werden, indem Speicherebenen auf separaten Substraten gebildet werden und dann übereinander gestapelt werden. Die Substrate können vor dem Stapeln gedünnt oder von den Speichervorrichtungsebenen entfernt werden, aber da die Speichervorrichtungsebenen anfänglich über separaten Substraten gebildet werden, sind die resultierenden Speicherarrays keine monolithischen dreidimensionalen Speicherarrays. Weiterhin können mehrere zweidimensionale Speicherarrays oder dreidimensionale Speicherarrays (monolithisch oder nicht monolithisch) auf separaten Chips gebildet und dann zusammengepackt werden, um eine gestapelte Chip-Speichervorrichtung zu bilden.
  • Zugehörige Schaltungen können für den Betrieb der Speicherelemente und für die Kommunikation mit den Speicherelementen implementiert werden. Als nicht einschränkende Beispiele können Speichervorrichtungen Schaltungen aufweisen, die zum Steuern und Treiben von Speicherelementen verwendet werden, um Funktionen wie Programmieren und Lesen auszuführen. Diese zugehörige Schaltung kann sich auf demselben Substrat wie die Speicherelemente und/oder auf einem separaten Substrat befinden. Zum Beispiel kann eine Steuerung für Schreib-/Lesevorgänge des Speichers auf einem separaten Steuerungschip und/oder auf demselben Substrat wie die Speicherelemente angeordnet sein.
  • Es versteht sich, dass das Folgende nicht auf die beschriebenen zweidimensionalen und dreidimensionalen beispielhaften Strukturen beschränkt ist, sondern alle relevanten Speicherstrukturen innerhalb des Geistes und Umfangs, wie hierin beschrieben, abdeckt.
  • Die Speichersteuerung 106 steuert die Vorgänge der Speichervorrichtung 102. In einer Ausführungsform schließt die Steuerung 106 eine Speicherschnittstellenschaltung 110, einen Prozessor 120, einen Nur-Lese-Speicher (ROM) 122 und einen Direktzugriffsspeicher (RAM) 130 ein. In einem Aspekt stellen ROM 122 und/oder RAM 130 ein nicht-flüchtiges, computerlesbares Medium dar, das Anweisungen speichert, die, wenn sie vom Prozessor 120 ausgeführt werden, den Prozessor 120 veranlassen, verschiedene hierin offenbarte Funktionen auszuführen. Diese Komponenten können als anwendungsspezifische integrierte Schaltung, feldprogrammierbare Gatteranordnung, andere Steuerungsausführungsformen, die dem Durchschnittsfachmann bekannt sind, oder als eine Kombination aus einer oder mehreren dieser Implementierungen verkörpert sein.
  • Die Speicherschnittstellenschaltung 110 ist eine Schaltung, die eine Schnittstelle zwischen dem Hostsystem 112 und der Speichervorrichtung 102 bildet. In einer Konfiguration ist die Speicherschnittstellenschaltung 110 zwischen dem Hostsystem 112 und der Speichervorrichtung 102 gekoppelt. In dieser Konfiguration speichert die Speicherschnittstellenschaltung 110 Daten auf der Speichervorrichtung 102 oder liest Daten von der Speichervorrichtung 102, entsprechend einer Anforderung von dem Hostsystem 112.
  • Zum Speichern von Daten speichert die Speicherschnittstellenschaltung 110 als Antwort auf eine Anforderung von dem Hostsystem 112, Daten zu speichern, die Daten auf der Speichervorrichtung 102. Die Speicherschnittstellenschaltung 110 kann die Daten codieren und die codierten Daten auf der Speichervorrichtung 102 speichern. Zum Lesen von Daten ruft die Speicherschnittstelle 110 als Antwort auf eine Anforderung von dem Hostsystem 112, Daten zu lesen, die gespeicherten Daten von der Speichervorrichtung 102 ab und stellt die abgerufenen Daten dem Hostsystem 112 bereit. Die Speicherschnittstellenschaltung 110 kann die codierten Daten unter Verwendung eines Satzes von Decodierparameter decodieren und die decodierten Daten dem Hostsystem 112 bereitstellen.
  • 2 ist eine Speicherschnittstellenschaltung 110 gemäß einer beispielhaften Ausführungsform. Die Speicherschnittstellenschaltung 110 schließt eine Empfängerschaltung 210, eine Decodiersteuerung 220, eine Codiersteuerung 230 und eine Senderschaltung 240 ein. Diese Komponenten arbeiten zusammen, um Daten in der Speichervorrichtung 102 zu speichern oder Daten aus dieser zu lesen. Diese Komponenten können als anwendungsspezifische integrierte Schaltung (ASIC), als feldprogrammierbare Gatteranordnung (FPGA) oder als Kombination davon verkörpert sein. In anderen Ausführungsformen schließt die Speicherschnittstellenschaltung 110 mehr, weniger oder andere Komponenten als in 2 gezeigt ein.
  • Die Empfängerschaltung 210 kann eine beliebige Schaltung sein, die eingerichtet ist, Daten und/oder Anweisungen von dem Host 112 zu empfangen und/oder Daten zu empfangen, die in der Speichervorrichtung 102 gespeichert sind. In einer Konfiguration ist die Empfängerschaltung 210 mit einer Vielzahl von Speicherzellen der Speichervorrichtung 102 gekoppelt. In anderen Ausführungsformen kann anstelle der Empfängerschaltung 210 ein Empfänger verwendet werden. Wie hierin verwendet, kann ein Empfänger jede Komponente, Logik, Schaltung oder dergleichen aufweisen, die eingerichtet ist, Daten zu empfangen, die von einer oder mehreren Zellen gespeichert werden. In einer Ausführungsform schließt der Empfänger die Empfängerschaltung 210 ein. In einer anderen Ausführungsform können zwei oder mehr Komponenten zusammenarbeiten, um als Empfänger zu dienen.
  • Die Empfängerschaltung 210 kann eine Anforderung von dem Host 112 empfangen, um Daten zu lesen, die in der Speichervorrichtung 102 gespeichert sind. Wenn Daten gelesen werden sollen, kann vom Host 112 eine Adresse bereitgestellt werden, die einen Ort in der Speichervorrichtung 102 identifiziert, von dem aus Daten gelesen werden sollen. In anderen Ausführungsformen werden die zu lesenden Daten ohne Bereitstellen einer Adresse identifiziert, und der Ort in der Speichervorrichtung 102 wird durch die Speicherschnittstellenschaltung 110 bestimmt, indem zum Beispiel auf eine Tabelle, die Adressen für bestimmte Daten bereitstellt, verwiesen wird. Die Empfängerschaltung 210 kann dann die Daten 202, die in codierter Form gespeichert werden können und die Bit-Flips aufweisen können, von einer oder mehreren Speicherzellen der Speichervorrichtung 102 abrufen. Die Empfängerschaltung 210 kann die codierten Daten 202 der Decodiersteuerung 220 bereitstellen, bevor die Daten dem Host 112 bereitgestellt werden.
  • Die Empfängerschaltung 210 kann auch eine Anforderung von dem Host 112 empfangen, Daten in die Speichervorrichtung 102 zu schreiben. Die zu schreibenden Daten 204 können von dem Host 112 in uncodierter Form bereitgestellt werden. In einigen Implementierungen kann der Ort in der Speichervorrichtung 102, an dem die uncodierten Daten gespeichert werden sollen, von der Speicherschnittstellenschaltung 110 bestimmt werden oder, in anderen Implementierungen, kann eine Adresse, die einen Ort in der Speichervorrichtung 102 identifiziert, von dem Host 112 bereitgestellt werden. Die Empfängerschaltung 210 kann die uncodierten Daten 204 an die Codiersteuerung 230 zur Codierung bereitstellen, bevor sie der Speichervorrichtung 102 bereitstellt wird.
  • Die Decodiersteuerung 220 ist eine beliebige Schaltung, die eingerichtet ist, die codierten Daten 202 zu empfangen. In einer Konfiguration ist die Decodiersteuerung 220 mit der Empfängerschaltung 210 gekoppelt und empfängt die codierten Daten 202 (die verrauschte Daten sein können) von der Empfängerschaltung 210. In einem Aspekt bestimmt die Decodiersteuerung 220, welche Decodierparameter für das Decodieren der codierten Daten 202 zu verwenden sind, bevor sie mit dem Decodieren der codierten Daten 202 beginnt. In einem Ansatz bestimmt die Decodiersteuerung 220 basierend zumindest teilweise auf den Charakteristiken der Daten unter Verwendung des Decoder-Datenanalysators 222, welche Decodierparameter verwendet werden sollen. Die Charakteristiken der codierten Daten 202 können zum Beispiel auf der Quelle der Daten basieren (z. B. die Anwendung, welche die Daten generiert hat, oder die Vorrichtung oder der Benutzer, der die Daten bereitgestellt hat, die zum Generieren der codierten Daten 202 codiert wurden). In einigen Implementierungen kann die Quellenstatistik als Metrik für die Charakterisierung von Daten verwendet werden (wie Muster in den Daten, die entstehen, wenn Daten von derselben Anwendung generiert werden oder anderweitig aus derselben Quelle stammen). Die Quellenstatistiken für Datenblöcke können miteinander verglichen werden, um geeignete Decoderparameter zu identifizieren, die codierte Daten effizienter und/oder genauer decodieren können. Der Decoder-Datenanalysator 222 ist in verschiedenen Ausführungsformen eingerichtet, Quellenstatistiken zu bestimmen und die Quellenstatistiken von Datenblöcken zu vergleichen, um Korrelationen zwischen Datenblöcken zu bestimmen.
  • Basierend auf der Korrelation zwischen Datenblöcke können Decoderparameter, die verwendet werden, um codierte Daten zu decodieren, von dem Parameteranpasser 224 angepasst werden. Wenn in einigen Ausführungsformen eine positive Korrelation zwischen einem aktuellen Block von zu decodierenden Daten und einem anderen Block von Daten gefunden wird, können die Decoderparameter angepasst werden, um die Decoderparameter auszurichten oder anderweitig mit den Decoderparametern zu entsprechen, die für den anderen Block von Daten geeignet sind. Die Decodiersteuerung 220 kann die codierten Daten 202 an einen ECC-Decoder 226 zum Decodieren unter Verwendung der vom Parameteranpasser 224 eingestellten angepassten Parameter bereitstellen.
  • Der ECC-Decoder 226 ist eine beliebige Schaltung, die eingerichtet ist, ein Decodieren gemäß den Decodierparametern (und/oder anderen Decodierkonfigurationsdaten) von der Decodiersteuerung 220 durchzuführen. In einer Konfiguration ist der ECC-Decoder 226 mit dem Parameteranpasser 224 und/oder dem Decoder-Datenanalysator 222 gekoppelt. Wie hierin verwendet, kann ein Decodiererjede Komponente, Logik, Schaltung oder dergleichen aufweisen, die eingerichtet ist, ein Decodieren gemäß Decodierkonfigurationsdaten durchzuführen. In einer anderen Ausführungsform können zwei oder mehrere Komponenten zusammenarbeiten, um als Decoder zu dienen. Der ECC-Decoder 226 empfängt die codierten Daten 202 und die decodierenden Konfigurationsdaten von dem Parameteranpasser 224 und decodiert die codierten Daten 202 entsprechend den decodierenden Konfigurationsdaten. In einigen Ausführungsformen ist der ECC-Decoder 226 ein Mittel zum Decodieren von Daten gemäß der Statistik der codierten Daten. In einem Aspekt zeigen die Decodierkonfigurationsdaten eine Statistik der codierten Daten an, wobei die Statistiken mit dem Inhalt (z. B. dem, was darin enthalten ist) oder einem Typ (oder anderen Charakteristiken) von codierten Daten korreliert sind. Daher kann der ECC-Decoder 226 eine inhaltsbewusste Decodierung durchführen, indem er die codierten Daten 202 gemäß den Decodierkonfigurationsdaten decodiert, die auf den Charakteristiken der Daten basieren.
  • Die Codiersteuerung 230 ist eine beliebige Schaltung, die eingerichtet ist, die uncodierten Daten 204 zu empfangen. In einer Konfiguration ist die Codiersteuerung 230 mit der Empfängerschaltung 210 gekoppelt und empfängt die uncodierten Daten 204 von der Empfängerschaltung 210. In einem Aspekt identifiziert die Codiersteuerung 230 Charakteristiken von Daten. Die Charakteristiken können von einem Codierer-Datenanalysator 232 bestimmt werden. Die Charakteristiken können Quellenstatistiken sein, die als Metriken zur Charakterisierung von Daten dienen (z. B. Muster in den Daten, die entstehen, wenn Daten von derselben Anwendung generiert werden oder anderweitig aus derselben Quelle stammen).
  • Ein ECC-Codierer 236 ist eine beliebige Schaltung, die eingerichtet ist, Daten gemäß ECC-Codierparametern oder anderen Codiererkonfigurationsdaten zu codieren. In einer Konfiguration ist der ECC-Codierer 236 mit dem Codierer-Datenanalysator 232 gekoppelt. Wie hierin verwendet, kann ein Codierer jede Komponente, Logik, Schaltung oder dergleichen aufweisen, die eingerichtet ist, ein Codieren gemäß Codierkonfigurationsdaten durchzuführen (die z. B. von der Codiersteuerung 230 bereitgestellt werden können). In einer anderen Ausführungsform können zwei oder mehrere Komponenten zusammenarbeiten, um als Codierer zu dienen. Der ECC-Codierer 236 empfängt die uncodierten Daten 204 und codiert die uncodierten Daten 204 gemäß den Codierparametern. In verschiedenen Ansätzen identifiziert der Codierer-Datenanalysator 232 Charakteristiken von uncodierten Daten 204, bevor, während oder nachdem die uncodierten Daten 204 von dem ECC-Codierer 236 codiert werden.
  • Die Senderschaltung 240 ist eine beliebige Schaltung, die eingerichtet ist, Daten an den Host 112 oder an die Speichervorrichtung 102 zu senden. In einer Konfiguration ist die Senderschaltung 240 mit der Decodiersteuerung 220 und der Codiersteuerung 230 gekoppelt. In anderen Ausführungsformen kann anstelle der Senderschaltung 240 ein Sender verwendet werden. Wie hierin verwendet, kann der Sender jede Komponente, Logik, Schaltung oder dergleichen aufweisen, die eingerichtet ist, Daten an den Host 112 (z. B. als Teil eines Lesevorgangs) oder an die Speichervorrichtung 102 (z. B. als Teil eines Schreibvorgangs) zu senden. In einer Ausführungsform schließt der Sender die Senderschaltung 240 ein. In einer anderen Ausführungsform können zwei oder mehrere Komponenten zusammenarbeiten, um als Sender zu dienen. Die Senderschaltung 240 kann decodierte Daten von der Decodiersteuerung 220 empfangen und die decodierten Daten 206 an den Host 112 senden, und kann codierte Daten von der Codiersteuerung 230 empfangen und die codierten Daten 208 an die Speichervorrichtung 102 senden.
  • 3 stellt ein Flussdiagramm bereit, das einen Prozess 300 zum Decodieren codierter Daten gemäß einer beispielhaften Ausführungsform veranschaulicht. In verschiedenen Implementierungen kann der Prozess 300 von der Speicherschnittstellenschaltung 110 von 2 durchgeführt werden. In anderen Ausführungsformen kann der Prozess 300 von anderen Komponenten durchgeführt werden. In verschiedenen Implementierungen schließt der Prozess 300 mehr, weniger oder andere Vorgänge ein als in 3 gezeigt. In Vorgang 310 werden codierte Daten empfangen. In einigen Implementierungen werden codierte Daten in Blöcken empfangen. Die codierten Daten können von der Empfängerschaltung 210 empfangen werden.
  • In Vorgang 320 werden Charakteristiken des Inhalts der Daten in dem codierten Datenblock identifiziert. In verschiedenen Ausführungsformen können die Charakteristiken der Daten zumindest teilweise von dem Decoder-Datenanalysator 222 identifiziert werden, nachdem die Decodiersteuerung 220 codierte Daten 202 von der Empfängerschaltung 210 empfängt. In anderen Ausführungsformen können Charakteristiken der Daten alternativ oder zusätzlich von dem Codierer-Datenanalysator 232 identifiziert werden, nachdem die Codiersteuerung 230 uncodierte Daten 204 zum Codieren von der Empfängerschaltung 210 empfängt, um die codierten Daten zu generieren, die anschließend von der Decodiersteuerung 220 (potentiell als verrauschte Daten) zum Decodieren empfangen werden können. In bestimmten Ausführungsformen können Charakteristiken durch Bestimmen oder Kategorisieren eines Datentyps oder einer Anwendung, Quelle oder eines Benutzers, der die Daten im codierten Datenblock generiert hat, identifiziert werden. In verschiedenen Versionen können die Daten besser verstanden werden, indem Quellenstatistiken bestimmt werden, die Muster in den Daten für den Datenblock charakterisieren. In einigen Implementierungen, in denen Quellenstatistiken während der Codierung gesammelt werden sollen, können die uncodierten Daten in T verschiedene Datentypen / Datenklassen unterteilt werden. Für jede Klasse können die Quellenstatistiken aus verschiedenen Datenblöcken derselben Klasse gemittelt und in der Speichervorrichtung 102 oder im RAM 130 zur späteren Verwendung gespeichert werden (z. B. wenn ein Datenblock aus diesem Typ / dieser Klasse decodiert werden soll). In bestimmten Implementierungen, in denen Quellenstatistiken aus den verrauschten gelesenen Daten(ohne Decodierung) gesammelt werden sollen, können die Quellenstatistiken von Datenblöcken desselben Datentyps gemittelt werden, um den Rauschpegel signifikant zu reduzieren. In beispielhaften Implementierungen können Quellenstatistiken aus Datenblöcken (des gleichen Typs wie der aktuelle Datenblock) gelernt werden, die zuvor erfolgreich decodiert wurden.
  • In Vorgang 330 werden Decoderparameter bestimmt, die für einen Datenblock mit den in Vorgang 320 identifizierten Charakteristiken geeignet sind. In verschiedenen Ausführungsformen können die Decoderparameter von dem Decoder-Datenanalysator 222 bestimmt werden, nachdem die Quellenstatistiken bestimmt sind. In verschiedenen Ausführungsformen können die Decoderparameter zumindest teilweise bestimmt werden, indem eine oder mehrere Korrelationen der Quellenstatistiken für den aktuellen Datenblock mit Quellenstatistiken für einen oder mehrere andere Datenblöcke berechnet werden. In einigen Implementierungen wird der am höchsten (positiv) korrelierte Datenblock identifiziert. In bestimmten Implementierungen wird die höchste Korrelation mit einer Schwellenkorrelation verglichen, um zu bestimmen, ob der am höchsten korrelierte Datenblock ausreichend korreliert ist. Wenn in verschiedenen Versionen eine ausreichend hohe Korrelation gefunden wird, können die Decoderparameter für den ausreichend korrelierten Datenblock als Decoderparameter für den aktuell zu decodierenden codierten Datenblock angesehen werden.
  • In verschiedenen Implementierungen wird der Korrelationskoeffizient zwischen den Quellenstatistiken verschiedener Datenblöcke durch die folgende Formel definiert (Gl. 1), wobei x eine Quellenstatistik für den Datenblock X ist und y eine Quellenstatistik für den Datenblock Y ist: c x y = R x y R x x R y y
    Figure DE102019134293A1_0001
  • In bestimmten Implementierungen, in denen Byte-Histogramme als Quellenstatistik verwendet werden, können Ai und Bi als die Byte-Histogramme für zwei verschiedene Datenblöcke definiert werden, wobei i = 0, ... 255. Der Korrelationskoeffizient cxy kann dann berechnet werden als (Gl. 2): c x y = i = 0 255 A i B i i = 0 255 A i 2 i = 0 255 B i 2
    Figure DE102019134293A1_0002
  • In Gl. 2 kann cxy als ein Maß verwendet werden, das die Korrelation der Quellenstatistiken zwischen zwei oder mehreren Datenblöcken quantifiziert.
  • In Vorgang 340 wird der codierte Datenblock unter Verwendung der in Vorgang 330 bestimmten Decoderparametern decodiert. In verschiedenen Ausführungsformen werden die codierten Daten unter Verwendung des Parameteranpassers 224 und des ECC-Decoders 226 der Decodiersteuerung 220 decodiert. Zum Beispiel kann der Parameteranpasser 224 die Decoderparameter modifizieren oder einstellen, um die Decoderparameter zu sein, die basierend auf den Charakteristiken der Daten in dem zu decodierenden codierten Datenblock bestimmt werden. Die vom Parameteranpasser 224 modifizierten oder eingestellten Decoderparameter können dann vom ECC-Decoder 226 zum Decodieren des codierten Datenblocks verwendet werden. In Vorgang 350 können die decodierten Daten gesendet werden. In verschiedenen Ausführungsformen werden die decodierten Daten von der Senderschaltung 240 gesendet. Zum Beispiel kann der decodierte Datenblock als decodierte Daten 206 an Host 112 gesendet werden.
  • 4 ist ein Flussdiagramm, das einen Prozess 400 zur verbesserten Decodierung gemäß beispielhaften Ausführungsformen veranschaulicht. Wie erwähnt, können viele verschiedene Datenblöcke Quellenstatistiken aufweisen, die miteinander hoch korreliert sind. In verschiedenen Implementierungen kann die Quellenstatistik eines vorherigen Datenblocks verwendet werden, um die Decoderparameter für den nächsten Datenblock zu ändern, wie in 4 veranschaulicht. Der Prozess 400 kann von der Speicherschnittstellenschaltung 110 von 2 durchgeführt werden. In anderen Ausführungsformen kann der Prozess 400 von anderen Einheiten durchgeführt werden. In verschiedenen Ausführungsformen schließt der Prozess 400 mehr, weniger oder andere Vorgänge ein als in 4 gezeigt.
  • In Vorgang 410 wird ein Lesebefehl für N Datenblöcke eingeleitet. In verschiedenen Ausführungsformen können die Lesungen sequentiell sein. In anderen Ausführungsformen können die Lesungen zufällig oder anderweitig nicht sequentiell sein. Die Statistik des Datenblocks i kann für das Decodieren des Datenblocks i + 1 für sequentielle und nicht sequentielle Lesungen nützlich sein. In bestimmten Ausführungsformen kann der Vorgang 410 von der Empfängerschaltung 210 als Antwort auf einen Befehl durchgeführt werden, der zum Beispiel vom Host 112 an die Speicherschnittstellenschaltung 110 gesendet wird. Der Host 112 kann zum Beispiel Anweisungen an die Empfängerschaltung 210 senden, um bestimmte Daten in der Speichervorrichtung 102 zu lesen. Die Anweisungen aus dem Host 112 können eine Adresse oder andere Informationen einschließen, die es der Speicherschnittstellenschaltung 110 ermöglichen, die zu lesenden Daten (und/oder ihren Ort in der Speichervorrichtung 102) zu identifizieren. In einigen Implementierungen kann die Empfängerschaltung 210 oder eine andere Komponente der Speicherschnittstellenschaltung 110, sobald die Anweisungen aus dem Host 112 empfangen werden, bestimmen, wie die Daten aus der Speichervorrichtung 102 gelesen werden sollen, eine solche Größe und Anzahl (d. h. N) von zu lesenden Datenblöcken. In einigen Implementierungen haben die Datenblöcke eine voreingestellte Größe (z. B. 4KB), während in anderen Implementierungen die Größe dynamisch basierend auf dem Typ und der Menge der Daten bestimmt wird, die von der Speichervorrichtung 102 gelesen werden sollen. Die Empfängerschaltung 210 (oder eine andere Komponente der Speicherschnittstellenschaltung 110) kann dann einen Wert für i auf 1 einstellen und die Datenblöcke von 1 bis N sequentiell lesen.
  • In Vorgang 420 wird der Datenblock i decodiert. In einigen Implementierungen stellt die Empfängerschaltung 210 der Decodiersteuerung 220 Datenblock i zum Decodieren durch ECC-Decoder 226 bereit. In verschiedenen Ausführungsformen können für den ersten Datenblock (d. h. i=1) Quellenstatistiken des Datenblocks i (vor dem Decodieren) unter Verwendung des Decoder-Datenanalysators 222 bestimmt werden. Die Quellenstatistiken können dann mit Quellenstatistiken von einer oder mehreren Referenzquellenstatistiken verglichen werden, die repräsentativ sind für Datenblöcke, die bekannte Datentypen enthalten. Wenn Quellenstatistiken für Datenblock i mit Quellenstatistiken eines Referenzdatenblocks korreliert sind, kann der Parameteranpasser 224 die Decoderparameter auf die Parameter ändern, die dem am meisten korrelierten Referenzdatenblock entsprechen. In bestimmten Implementierungen können für den ersten Datenblock (d. h. i=1) voreingestellte Decoderparameter verwendet werden. In verschiedenen Implementierungen können die voreingestellten Decoderparameter zum Beispiel Decoderparameter sein, die kürzlich zum Decodieren von Daten aus einer gleichen oder benachbarten Speicherzelle der Speichervorrichtung 102 verwendet wurden. In bestimmten Implementierungen können Decoderparameter bestimmt werden, basierend darauf, welche Anwendung Daten anfordert, die gelesen werden sollen. Wenn zum Beispiel Daten über einen Wortprozessor, der auf Host 112 läuft, angefordert werden, können Decoderparameter verwendet werden, die für Textdateien geeignet sind.
  • In Vorgang 430, nachdem Datenblock i decodiert wurde, können die Quellenstatistiken für Datenblock i nach der Decodierung bestimmt und gespeichert werden. In einigen Implementierungen können die Quellenstatistiken von dem Decoder-Datenanalysator 222 bestimmt werden und zum Beispiel auf dem RAM 130 oder der Speichervorrichtung 102 gespeichert werden.
  • Wenn i kleiner als N ist, können in Vorgang 440 die Decoderparameter gemäß den Quellenstatistiken des Datenblocks i geändert werden. In einigen Implementierungen ändert der Parameteranpasser 224 die Decoderparameter auf Parameter, die für die Quellenstatistiken von Datenblock i zur Verwendung bei dem Decodieren nachfolgender Datenblöcke geeignet sind. Dann wird eins zu i hinzugefügt, zum Beispiel von der Speicherschnittstellenschaltung 110 (z. B. von der Decodiersteuerung 220).
  • In Vorgang 420 wird, wobei i einen Wert größer als eins aufweist (d. h. nachdem der erste Datenblock decodiert wurde), der Datenblock i unter Verwendung der Decoderparameter decodiert, die vom Parameteranpasser 224 geändert wurden. In verschiedenen Implementierungen wird jeder Datenblock i unter Verwendung von Decoderparametern decodiert, die den Quellenstatistiken des vorherigen Datenblocks entsprechen (d. h. Datenblock i minus 1). In Vorgang 430 werden die Quellenstatistiken des decodierten Datenblocks i (mit Werten von 2 und höher) für die nachfolgende Verwendung gespeichert. Die Vorgänge 420, 430 und 440 erfolgen für Werte von i von 1 bis N. Sobald i gleich N ist, endet der Prozess 400 bei 450.
  • Vorteilhafterweise kann mit Ausführungsformen, die den Prozess 400 von 4 verwenden, das Erlernen der Quellenstatistiken eines bestimmten Datenblocks und das Ändern der Decoderparameter entsprechend für den nächsten Datenblock während der Decodierung bei laufendem Betrieb implementiert werden. Da das Ändern der Decoderparameter während der Decodierung bei laufendem Betrieb durchgeführt werden kann, entstehen keine Verzögerungen. Zusätzlich wird die Decodierlatenz reduziert, da die Änderung der Decoderparameter eine bessere Leistung erzielt.
  • In verschiedenen alternativen Ausführungsformen kann ein Satz (mit T bezeichnet) verschiedener Klassen von Quellenstatistiken gespeichert und verwendet werden. Für jede Klasse kann es eine repräsentative Quellenstatistik (z. B. Byte-Histogramm) geben. Diese repräsentative Quellenstatistik kann z. B. ein Mittelwert aller Quellenstatistiken sein, die beobachtet wurden und sich auf die spezifische Klasse beziehen. Diese Mittelung kann während der Codierungsphase oder der Decodierungsphase durchgeführt werden. In verschiedenen Implementierungen kann das Mittelwertbeispiel weiter ausgedehnt werden auf Fälle, in denen gleitende Mittelwerte verwendet werden, und die repräsentativen Quellenstatistiken werden nur auf die aktuellsten Quellenstatistiken basieren. Gleitende Mittelwertbeispiele werden nachfolgend weiter erläutert.
  • Während des Decodierens eines bestimmten Datenblocks können Versuche unternommen werden, den Datenblock gemäß den Quellenstatistiken einer bestimmten Klasse aus T zu decodieren. Im Falle eines Decodierfehlers kann eine andere Klasse aus T versucht werden, bis der Datenblock erfolgreich decodiert wurde. In bestimmten Implementierungen können Korrelationskoeffizienten zwischen den Quellenstatistiken des aktuellen Datenblocks (vor dem Decodieren und mit Rauschen) und jeder einzelnen der Quellenstatistiken aus den T-Klassen der Quellenstatistik bestimmt werden. Dies kann zum Beispiel einen ersten Korrelationskoeffizienten für die Korrelation zwischen dem aktuellen Datenblock und einer ersten Klasse von Quellenstatistiken aus T, einen zweiten Korrelationskoeffizienten für die Korrelation zwischen dem aktuellen Datenblock und einer zweiten Klasse von Quellenstatistiken aus T und so weiter erzielen. In verschiedenen Implementierungen können Decoderparameter entsprechend der Klasse aus T mit der höchsten Korrelation verwendet werden. In einigen Implementierungen, wenn alle Korrelationen zu niedrig sind (d. h. wenn keine der Korrelationen eine Korrelationsschwelle überschreitet), können voreingestellte Decoderparameter verwendet werden, um den aktuellen Datenblock zu decodieren.
  • 5 ist ein Flussdiagramm, das einen Prozess 500 für verbessertes Decodieren gemäß beispielhaften Ausführungsformen unter Verwendung eines Satzes T veranschaulicht, der verschiedenen Klassen von Quellenstatistiken entspricht. Der Prozess 500 kann von der Speicherschnittstellenschaltung 110 von 2 durchgeführt werden. In anderen Ausführungsformen kann der Prozess 500 von anderen Einheiten durchgeführt werden. In verschiedenen Ausführungsformen schließt der Prozess 500 mehr, weniger oder andere Vorgänge ein, als in 5 gezeigt.
  • In Vorgang 505 wird ein Wert für i auf 1 eingestellt. In einigen Implementierungen kann dies von der Empfängerschaltung 210 oder einer anderen Komponente der Speicherschnittstellenschaltung 110 durchgeführt werden. In Vorgang 510 wird der Datenblock i (abgekürzt mit „DCi“ in 5) der N Datenblöcke gelesen. Der Datenblock i kann zum Beispiel durch die Empfängerschaltung 210 gelesen werden. In Vorgang 515 können die Quellenstatistiken (abgekürzt mit „SS“ in 5) für den Datenblock i (abgekürzt mit „SSi“ in 5) bestimmt werden. In verschiedenen Implementierungen werden die Quellenstatistiken für die verrauschten (d. h. codierten Daten, von denen erwartet wird, dass sie Fehler aufweisen) Datenblock i bestimmt. In verschiedenen Implementierungen kann Vorgang 515 von dem Decoder-Datenanalysator 222 der Decodiersteuerung 220 durchgeführt werden.
  • In Vorgang 520 können Korrelationen der Quellenstatistik des Datenblocks i mit anderen Quellenstatistiken (die z. B. als Referenzquellenstatistik dienen können) berechnet werden. In verschiedenen Implementierungen wird ein Satz C von Korrelationen berechnet, mit einer Korrelation in Satz C für jede Klasse von Quellenstatistiken in Satz T. In verschiedenen Implementierungen werden die Korrelationen von dem Decoder-Datenanalysator 222 der Decodiersteuerung 220 berechnet.
  • In Vorgang 525 wird die am meisten korrelierte Klasse von Quellenstatistiken identifiziert. In verschiedenen Implementierungen hat die am meisten korrelierte Klasse von Quellenstatistiken in Satz T den höchsten entsprechenden Korrelationswert in Satz C. In verschiedenen Implementierungen wird Vorgang 525 von dem Decoder-Datenanalysator 222 durchgeführt.
  • In Vorgang 530 kann bestimmt werden, ob die am meisten korrelierte Klasse ausreichend korreliert ist. In verschiedenen Implementierungen beinhaltet Vorgang 530 das Bestimmen, ob die Klasse mit der höchsten Korrelation eine Korrelation aufweist, die eine Korrelationsschwelle überschreitet. In bestimmten Implementierungen wird Vorgang 530 von dem Decoder-Datenanalysator 222 durchgeführt. In verschiedenen Ausführungsformen sind, wenn die am meisten korrelierte Klasse relativ wenig Korrelation aufweist, die Quellenstatistiken nicht ausreichend ähnlich. Beispielwerte für Korrelationsschwellen können in verschiedenen Ausführungsformen zum Beispiel 0,7, 0,8 usw. sein. In einigen Implementierungen kann die Korrelationsschwelle auf den decodierten Daten und/oder auf vorherigen Korrelationen basieren. Zum Beispiel kann in einigen Implementierungen bestimmt werden, dass eine bestimmte Korrelationsschwelle (z. B. 0,9) zu hoch ist, weil zu wenig Quellenstatistiken als ausreichend korreliert befunden werden, und die Korrelationsschwelle kann reduziert werden (auf z. B. 0,85), um zu versuchen, nachfolgende Datenblöcke zu decodieren.
  • In Vorgang 535, wenn die am meisten korrelierte Klasse ausreichend korreliert ist, können Decoderparameter für die am meisten korrelierte Klasse zur Verwendung bei der Decodierung von Datenblock i ausgewählt werden. Vorgang 535 kann von dem Parameteranpasser 224 (der die Decoderparameter des ECC-Decoders 226 entsprechend modifizieren kann) und dem ECC-Decoder 226 (der den Datenblock i unter Verwendung der Decoderparameter, wie sie von dem Parameteranpasser 224 modifiziert wurden, decodieren kann) durchgeführt werden. Decoderparameter können einen oder mehrere Parameterwerte einschließen, wie (unter anderem) Timeout-Parameterwerte, Log-Likelihood-Verhältniswerte (LRR-Werte), Decodiermodusparameterwerte oder eine Kombination davon.
  • In Vorgang 540 kann, nachdem der Datenblock i in Vorgang 535 decodiert wurde, bestimmt werden, ob i N erreicht hat (d. h. ob noch Datenblöcke decodiert werden müssen). In verschiedenen Implementierungen kann Vorgang 540 von dem Decoder-Datenanalysator 222 durchgeführt werden. Wenn i N erreicht hat, dann kann der Prozess 500 in Vorgang 545 beendet werden. Wenn i N nicht erreicht hat, dann wird 1 zu i hinzugefügt und der Prozess 500 kehrt zu Vorgang 510 zurück.
  • In Vorgang 550, wenn die am meisten korrelierte Klasse die Korrelationsschwelle in Vorgang 530 nicht erfüllt, kann der Datenblock i unter Verwendung von voreingestellten Decoderparametern decodiert werden. In verschiedenen Implementierungen kann dies von dem ECC-Decoder 226 durchgeführt werden. Die voreingestellten Decoderparameter können Parameter sein, die im Allgemeinen zum Decodieren von Datenblöcken, die beliebige (oder eine Vielfalt von) Datentypen enthalten, geeignet sind.
  • In Vorgang 555 kann die Quellenstatistik für Datenblock i bestimmt werden. In verschiedenen Ausführungsformen werden die Quellenstatistiken bestimmt, nachdem der Datenblock i unter Verwendung von voreingestellten Parametern in Vorgang 550 decodiert wurde. In verschiedenen Implementierungen kann Vorgang 555 von dem Datenanalysator 222 durchgeführt werden.
  • In Vorgang 560 wird bestimmt, ob die in Vorgang 555 ermittelte Quellenstatistik nicht einer der Klassen der Quellenstatistiken in Satz T ähnlich ist. In verschiedenen Ausführungsformen werden die decodierten Daten des Datenblocks analysiert, um zu bestimmen, ob die Quellenstatistiken des Datenblocks anzeigen, dass die im Datenblock enthaltenen Daten vom Typ her unterschiedlich oder anderweitig in ihren Charakteristiken/Mustern eindeutig sind. In bestimmten Implementierungen kann Vorgang 560 von dem Decoder-Datenanalysator 222 durchgeführt werden. In verschiedenen Ausführungsformen kann die Eindeutigkeit bestimmt werden, indem ein anderer Satz von Korrelationen zwischen den Quellenstatistiken für Datenblock i und den Klassen der Quellenstatistiken in T berechnet wird, und wenn alle Korrelationen unter einer Mindestkorrelationsschwelle liegen, kann davon ausgegangen werden, dass Datenblock i ausreichend unähnliche Quellenstatistiken aufweist.
  • In Vorgang 565, wenn in Vorgang 560 bestimmt wird, dass die Quellenstatistiken des Datenblocks i ausreichend eindeutig sind, kann eine neue Klasse von Quellenstatistiken generiert und in T gespeichert werden. In verschiedenen Implementierungen würde der Satz T mit der neuen Klasse zur Decodierung nachfolgender Datenblöcke i verwendet werden. In bestimmten Ausführungsformen kann Vorgang 565 von dem Decoderanalysator 222 durchgeführt werden. In einigen Implementierungen kann Satz T eine vorbestimmte maximale Anzahl von Werten enthalten. Zum Beispiel kann Satz T nur eine begrenzte Anzahl von Slots für verschiedene Klassen von Quellenstatistiken zulassen. Es besteht ein Kompromiss zwischen dem zuzuweisenden Speicher, um die relevanten Daten für die T-Klassen zu speichern (z. B. im RAM oder im Speicher selbst) und der Fähigkeit, viele verschiedene Klassen zu unterstützen.
  • Wenn die Quellenstatistiken für Datenblock i in 560 nicht als ausreichend eindeutig bestimmt werden, oder nachdem eine neue Klasse in Satz T in Vorgang 565 gespeichert wird, kann bestimmt werden, ob i in Vorgang 540 N erreicht hat (d. h. ob noch irgendwelche Datenblöcke decodiert werden müssen). Wenn i N erreicht hat, dann kann der Prozess 500 in Vorgang 545 beendet werden, oder wenn iN nicht erreicht hat, dann wird 1 zu i hinzugefügt und der Prozess 500 kehrt zu Vorgang 510 zurück.
  • In alternativen Ausführungsformen können die gespeicherten Quellenstatistiken (z. B. in Vorgang 430 in Prozess 400 oder Vorgang 565 in Prozess 500) unter Verwendung eines gleitenden Mittelwerts geändert werden, sobald ein neuer decodierter Datenblock mit den gleichen Statistiken gefunden wurde. In verschiedenen Implementierungen kann die Änderung der gespeicherten Quellenstatistiken den Prozess anpassungsfähiger an Änderungen machen und die Abhängigkeit von einem bestimmten Datenblock lockern. Ferner können in verschiedenen Ausführungsformen die T-Klassen während des Codierens bestimmt werden, wobei die Quellenstatistiken für jeden Datenblock bekannt sind. Diese T-Klassen können in der Speichervorrichtung 102 und/oder in 130 gespeichert werden, um das Decodieren dieser Datenblöcke zu verbessern, unabhängig davon, ob die Datenblöcke sequentiell (wie zum Beispiel in Prozess 400) oder zufällig gelesen werden.
  • 6 ist ein Flussdiagramm, das einen Prozess 600 zur verbesserten Decodierung gemäß beispielhaften Ausführungsformen veranschaulicht. Der Prozess 600 kann zum Beispiel von dem Speichersystem 114 von 2 durchgeführt werden. In anderen Ausführungsformen kann der Prozess 600 von anderen Einheiten durchgeführt werden. In verschiedenen Ausführungsformen schließt der Prozess 600 mehr, weniger oder andere Vorgänge ein als in 6 gezeigt.
  • In Vorgang 610 wird eine erste Quellenstatistik für einen ersten Datenblock berechnet. In verschiedenen Implementierungen kann der Vorgang 610 von der Speichersteuerung 106 oder einer Komponente davon durchgeführt werden (z. B. Decoder-Datenanalysator 222 der Decodiersteuerung 220). In verschiedenen Implementierungen kann der erste Datenblock codiert sein (z. B. kann codierte Daten 202 enthalten) und kann (zum Beispiel durch Empfängerschaltung 210) sequentiell, zufällig oder anderweitig gelesen worden sein. In Vorgang 620 wird die erste Quellenstatistik, die in Vorgang 610 berechnet wird, mit einer zweiten Quellenstatistik für einen zweiten Datenblock verglichen. In verschiedenen Implementierungen kann Vorgang 610 von der Decodiersteuerung 220 oder einer Komponente davon (z. B. dem Decoder-Datenanalysator 222) durchgeführt werden. In verschiedenen Implementierungen können die zweiten Quellenstatistiken Quellenstatistiken sein, die Daten eines bestimmten Typs repräsentieren (z. B. Daten, die durch eine Klasse von Anwendungen generiert werden). In einigen Implementierungen ist der zweite Datenblock ein zuvor gelesener und/oder zuvor decodierter Datenblock. In anderen Implementierungen ist der zweite Datenblock ein Referenzdatenblock, der als Repräsentativprobe verwendet wird, mit der zu decodierende Datenblöcke verglichen werden.
  • In Vorgang 630, wenn die erste und zweite Quellenstatistiken ausreichend (oder „positiv“) korreliert sind, werden Decoderparameter für den ersten Datenblock bestimmt. In verschiedenen Implementierungen kann der Vorgang 610 von der Speichersteuerung 106 oder einer Komponente davon durchgeführt werden (z. B. Decoder-Datenanalysator 222 der Decodiersteuerung 220). In verschiedenen Implementierungen zeigt eine positive Korrelation zwischen Datenblöcken an, dass die Datenblöcke signifikante Ähnlichkeiten aufweisen. Ähnlichkeiten können signifikant sein, wenn beispielsweise vergleichbare Muster und Charakteristiken (die z. B. daraus resultieren, dass sie eine gemeinsame Quelle aufweisen) den Decodierprozess informieren und verbessern könnten. In bestimmten Ausführungsformen kann eine positive Korrelation bestimmt werden, indem eine Korrelation c (z. B. unter Verwendung von Gl. 1) zwischen den Datenblöcken berechnet wird und Bestimmen, ob die Korrelation eine Korrelationsschwelle überschreitet.
  • In verschiedenen Ausführungsformen können Decoderparameter für den ersten Datenblock (d. h. den aktuellen zu decodierenden Datenblock) basierend auf einer Charakteristik des ersten oder zweiten Datenblocks bestimmt werden. In bestimmten Implementierungen ist die Charakteristik ein gemeinsamer Datentyp / eine gemeinsam genutzte Datenquelle (z. B. gemeinsam genutzte Anwendung oder Anwendungstyp, Benutzer oder Vorrichtung, welche die Daten generiert hat, die zur Generierung des codierten Datenblocks codiert wurden), die Ähnlichkeiten zwischen den Datenblöcken erteilen. In verschiedenen Implementierungen kann die Charakteristik, die zum Bestimmen von Decoderparametern verwendet wird, die Quellenstatistiken (z. B. ein Byte-Histogramm oder andere Metriken) für einen oder beide des ersten und zweiten Datenblocks sein. Da die Charakteristiken des ersten und zweiten Datenblocks ähnlich sind (z. B. sind ihre Quellenstatistiken ausreichend korreliert), können die Decoderparameter in bestimmten Implementierungen entweder auf der Charakteristik des ersten Datenblocks oder des zweiten Datenblocks basieren.
  • In Vorgang 640 wird der erste Datenblock unter Verwendung der Decoderparameter decodiert, die für den ersten Datenblock in Vorgang 630 bestimmt werden. In verschiedenen Implementierungen kann Vorgang 640 von der Decodiersteuerung 220 oder einer Komponente davon (z. B. ECC-Decoder 226) durchgeführt werden. In verschiedenen Implementierungen können die Decoderparameter, die in der Lage sind, den zweiten Datenblock erfolgreich zu decodieren, verwendet werden, um den ersten (signifikant ähnlichen) Datenblock zu decodieren. In einigen Implementierungen können die Decoderparameter, die zum Decodieren eines Datenblocks geeignet sind, auch als eine Charakteristik des Datenblocks dienen. Wenn die Quellenstatistiken des ersten und zweiten Datenblocks nicht ausreichend korreliert sind, können voreingestellte Decoderparameter die Decoderparameter sein, die als die Parameter bestimmt sind, die verwendet werden, um den ersten Datenblock zu decodieren.
  • 7 ist ein Flussdiagramm, das einen Prozess 700 zur verbesserten Decodierung gemäß beispielhaften Ausführungsformen veranschaulicht. Der Prozess 700 kann zum Beispiel von dem Speichersystem 114 von 2 durchgeführt werden. In anderen Ausführungsformen kann der Prozess 700 von anderen Einheiten durchgeführt werden. In verschiedenen Ausführungsformen schließt der Prozess 700 mehr, weniger oder andere Vorgänge ein als in 7 gezeigt.
  • In Vorgang 710 wird ein erster codierter Datenblock empfangen, der Daten enthält, die von einem ersten Anwendungstyp generiert werden. In verschiedenen Implementierungen kann Vorgang 710 von der Speicherschnittstellenschaltung 110 oder einer Komponente davon (z. B. Empfängerschaltung 210) durchgeführt werden. In verschiedenen Implementierungen wird der erste codierte Datenblock in einer oder mehreren Speicherzellen der Speichervorrichtung 102 gespeichert, und der erste codierte Datenblock wird in den Daten 202 codiert.
  • In Vorgang 720 wird eine erste Quellenstatistik für den ersten codierten Datenblock mit einer Vielzahl von Klassen von Quellenstatistiken verglichen, die den Daten entsprechen, die durch eine Vielzahl von entsprechenden Quellentypen generiert werden. Es sei angemerkt, dass in bestimmten Ausführungsformen eine spezifische Anwendung mehrere verschiedene Quellen generieren kann. In verschiedenen Implementierungen kann Vorgang 720 von der Speicherschnittstellenschaltung 110 oder einer Komponente davon (z. B. Decoder-Datenanalysator 222 der Decodiersteuerung 220) durchgeführt werden. In bestimmten Implementierungen können die Klassen der Quellenstatistiken Teil eines Satzes T der Quellenstatistikenklassen sein.
  • In Vorgang 730 wird eine erste Klasse von Quellenstatistiken identifiziert, die positiv mit der ersten Quellenstatistik korreliert ist, die zumindest teilweise auf dem Anwendungstyp basiert. In verschiedenen Implementierungen kann Vorgang 730 von der Speicherschnittstellenschaltung 110 oder einer Komponente davon (z. B. Decoder-Datenanalysator 222 der Decodiersteuerung 220) durchgeführt werden. In bestimmten Implementierungen werden eine oder mehrere Korrelationen berechnet, und ausreichend hohe Korrelationen deuten zumindest teilweise darauf hin, dass die in den Datenblöcken enthaltenen Daten durch Anwendungen des gleichen Typs generiert wurden.
  • In Vorgang 740 werden die Decoderparameter basierend auf der ersten Klasse von Quellenstatistiken modifiziert. In verschiedenen Implementierungen kann Vorgang 740 von der Speicherschnittstellenschaltung 110 oder einer Komponente davon (z. B. Parameteranpasser 224 der Decodiersteuerung 220) durchgeführt werden. In verschiedenen Implementierungen werden Decoderparameter so modifiziert, dass sie mit Decoderparametern übereinstimmen, die für Datenblöcke mit Quellenstatistiken in der ersten Klasse von Quellenstatistiken geeignet sind. In Vorgang 750 wird der erste codierte Datenblock decodiert. In verschiedenen Implementierungen kann Vorgang 750 von der Speicherschnittstellenschaltung 110 oder eine Komponente davon (z. B. ECC-Decoder 226 der Decodiersteuerung 220) durchgeführt werden. Der erste codierte Datenblock kann unter Verwendung der modifizierten Decoderparameter aus Vorgang 740 decodiert werden.
  • 8 ist ein Flussdiagramm, das einen Prozess 800 zur verbesserten Decodierung gemäß beispielhaften Ausführungsformen veranschaulicht. Der Prozess 800 kann zum Beispiel von dem Speichersystem 114 von 2 durchgeführt werden. In anderen Ausführungsformen kann der Prozess 800 von anderen Einheiten durchgeführt werden. In verschiedenen Ausführungsformen schließt der Prozess 800 mehr, weniger oder andere Vorgänge ein als in 8 gezeigt.
  • In Vorgang 810 wird eine Quellenstatistik für einen codierten Datenblock bestimmt. In verschiedenen Ausführungsformen kann Vorgang 810 von der Speicherschnittstellenschaltung 110 oder einer Komponente davon (z. B. Decoder-Datenanalysator 222 der Decodiersteuerung 220) durchgeführt werden. In bestimmten Implementierungen ist die Speicherschnittstellenschaltung 110 oder eine Komponente davon ein Mittel zum Bestimmen einer Quellenstatistik für einen codierten Datenblock. In einigen Implementierungen ist der Decoder-Datenanalysator 222 der Decodiersteuerung 220 ein Mittel zum Bestimmen einer Quellenstatistik für einen codierten Datenblock. In Vorgang 820 wird eine erste Korrelation der Quellenstatistik mit einer ersten Referenzquellenstatistik, die einem ersten referenzcodierten Datenblock entspricht, berechnet. In verschiedenen Ausführungsformen kann Vorgang 820 von der Speicherschnittstellenschaltung 110 oder einer Komponente davon (z. B. Decoder-Datenanalysator 222 der Decodiersteuerung 220) durchgeführt werden. In bestimmten Implementierungen ist die Speicherschnittstellenschaltung 110 ein Mittel zum Berechnen einer ersten Korrelation der Quellenstatistik mit einer ersten Referenzquellenstatistik, die einem ersten referenzcodierten Datenblock entspricht. In einigen Implementierungen ist der Decoder-Datenanalysator 222 der Decodiersteuerung 220 ein Mittel zum Berechnen einer ersten Korrelation der Quellenstatistik mit einer ersten Referenzquellenstatistik, die einem ersten referenzcodierten Datenblock entspricht. In Vorgang 830 wird die erste Korrelation mit einer Korrelationsschwelle verglichen. In verschiedenen Ausführungsformen kann Vorgang 830 von der Speicherschnittstellenschaltung 110 oder einer Komponente davon (z. B. Decoder-Datenanalysator 222 der Decodiersteuerung 220) durchgeführt werden. In bestimmten Implementierungen ist die Speicherschnittstellenschaltung 110 ein Mittel zum Vergleichen der ersten Korrelation mit einer Korrelationsschwelle. In einigen Implementierungen ist der Decoder-Datenanalysator 222 der Decodiersteuerung 220 ein Mittel zum Vergleichen der ersten Korrelation mit einer Korrelationsschwelle. Wenn in Vorgang 840 bestimmt wird, dass die erste Korrelation die Korrelationsschwelle erfüllt (z. B. die erste Korrelation weist einen Wert auf, der eine Korrelationsschwelle überschreitet), kann der codierte Datenblock unter Verwendung von Decodierparametern decodiert werden, die zuvor zum Decodieren des ersten referenzcodierten Datenblocks verwendet wurden. In verschiedenen Ausführungsformen kann Vorgang 840 von der Speicherschnittstellenschaltung 110 oder Komponenten davon (z. B. Decoder-Datenanalysator 222, den Parameteranpasser 224 und ECC-Decoder 226 der Decodiersteuerung 220) durchgeführt werden. In bestimmten Implementierungen ist die Speicherschnittstellenschaltung 110 ein Mittel, um als Antwort auf das Bestimmen, dass die erste Korrelation die Korrelationsschwelle erfüllt, den codierten Datenblock unter Verwendung von Decodierparametern zu decodieren, die zuvor zum Decodieren des ersten referenzcodierten Datenblocks verwendet wurden. In einigen Implementierungen sind der Decoder-Datenanalysator 222, Parameteranpasser 224 und ECC-Decoder 226 der Decodiersteuerung 220 ein Mittel, um als Antwort auf das Bestimmen, dass die erste Korrelation die Korrelationsschwelle erfüllt, den codierten Datenblock unter Verwendung von Decodierungsparametern zu decodieren, die zuvor zum Decodieren des ersten referenzcodierten Datenblocks verwendet wurden. In verschiedenen Implementierungen macht die vorherige erfolgreiche Decodierung des Referenzdatenblocks es wahrscheinlicher, dass der aktuelle Datenblock, wenn er Daten des gleichen Typs hat oder anderweitig ausreichend ähnlich ist, auch unter Verwendung von gleichen Decoderparametern erfolgreich decodiert werden kann. In bestimmten Implementierungen wäre der Decodierprozess, auch wenn er ansonsten erfolgreich wäre, effizienter, wenn die Decoderparameter für ähnliche Datenblöcke geeignet wären.
  • 12 und 13 entsprechen veranschaulichenden Darstellungen repräsentativer Verbesserungen, die unter Verwendung von verschiedenen Ausführungsformen der hierin erläuterten verbesserten Decoder erreicht werden können. 12 zeigt eine relative Verbesserung der Korrekturfähigkeit. Die veranschaulichende x-Achse von Diagramm 1200 entspricht der relativen Anzahl von Bit-Flips in einem Datenblock, und die veranschaulichende y-Achse entspricht der relativen Decodierungserfolgsrate. Die Kurve 1210 entspricht dem repräsentativen voreingestellten Decoder, ohne Kenntnis der Quellenstatistiken. Die Kurve 1220 entspricht dem repräsentativen Fall, in dem der Decoder geniegestützt ist und die Quellenstatistiken für jeden Datenblock genau kennt. Die Kurve 1230 entspricht einem repräsentativen verbesserten Decoder, worin der Decoder die Statistiken der korrelierten Datenblöcke gemäß den verschiedenen vorstehend erläuterten Ausführungsformen empfängt. Wie in 12 zu sehen ist, stimmt die Kurve 1230, welche die Leistung der Ausführungsformen des hier erläuterten verbesserten Decoders darstellt, im Wesentlichen mit der Leistung des geniegestützten Algorithmus überein oder ist anderweitig mit dieser vergleichbar. In Diagramm 1200, dem Punkt, an dem der voreingestellte Decoder (Kurve 1210) nicht mehr erfolgreich decodieren kann (wo die Kurve 1210 beginnt, die x-Achse zu überlappen), behält der verbesserte Decoder (Kurve 1230) eine relative Decodierungserfolgsrate bei, die mit der geniegestützten Rate (Kurve 1220) vergleichbar ist, wie durch die gestrichelten Linien dargestellt.
  • In 13 ist die relative Verbesserung der Decodierlatenz zu beobachten. Die veranschaulichende x-Achse von Diagramm 1300 entspricht der relativen Anzahl von Bit-Flops in einem Datenblock, und die veranschaulichende y-Achse entspricht der relativen durchschnittlichen Decodierlatenz. Die Kurve 1310 entspricht dem veranschaulichenden voreingestellten Decoder, ohne Kenntnis der Quellenstatistiken, und die Kurve 1320 entspricht dem veranschaulichenden Fall, in dem der Decoder Statistiken über korrelierte Datenblöcke empfängt. Wie aus 13 ersichtlich ist, konvergiert der verbesserte Decoder auch in Region 1330, in der sowohl der repräsentative, voreingestellte Decoder (1310) und der repräsentative, verbesserte Decoder (1320) mit einer hohen Erfolgsrate decodieren, mit einer relativ niedrigeren Latenzzeit (wie durch den vertikalen Abstand 1340 zwischen Kurve 1310 und Kurve 1320 dargestellt).
  • Verschiedene hier erläuterte Ausführungsformen stellen ein Speichersystem mit verbesserter Lebensdauer und reduziertem Firmware-Overhead in Bezug auf die Fehlerbehandlung bereit. Verbesserungen der Decodierfähigkeiten werden immer wichtiger, da die Daten dichter werden und die Anforderungen an die Speichervorrichtungen steigen.
  • Die vorstehende Beschreibung richtet sich auf bestimmte Implementierungen zum Zwecke der Beschreibung der innovativen Aspekte dieser Offenbarung. Ein Durchschnittsfachmann wird jedoch leicht erkennen, dass die hierin enthaltene Lehre auf vielfältige Weise angewendet werden können. Die beschriebenen Implementierungen können in einer Vielfalt von elektronischen Vorrichtungen enthalten sein oder mit diesen verbunden sein, aber nicht beschränkt auf: Mobiltelefone, multimediale internetfähige Mobiltelefone, mobile Fernsehempfänger, drahtlose Vorrichtungen, Smartphones, Bluetooth®-Vorrichtungen, persönliche Datenassistenten (PDAs), drahtlose E-Mail-Empfänger, handgehaltene oder tragbare Computer, Netbooks, Notebooks, Smartbooks, Tablets, Drucker, Kopierer, Scanner, Faxgeräte, GPS-Empfänger/-Navigatoren, Kameras, digitale Medienplayer (wie z. B. MP3-Player), Camcorder, Spielkonsolen, Armbanduhren, am Körper tragbare Vorrichtungen, Uhren, Taschenrechner, Fernsehbildschirme, Flachbildschirme, elektronische Lesegeräte (wie E-Reader), Computermonitore, Autoanzeigen (wie Kilometer- und Geschwindigkeitsmesser-Anzeigen), Cockpitsteuerungen und -anzeigen, Kameraansichtanzeigen (wie die Anzeige einer Rückfahrkamera in einem Fahrzeug), elektronische Fotografien, elektronische Werbetafeln oder Schilder, Projektoren, architektonische Strukturen, Mikrowellen, Kühlschränke, Stereoanlagen, Kassettenrekorder oder -player, DVD-Player, CD-Player, VCRs, Radios, tragbare Speicherchips, Waschmaschinen, Trockner, Waschmaschine/Trockner, Parkuhren, Verpackungen (wie z. B. in Anwendungen für elektromechanische Systeme (EMS), einschließlich Anwendungen für mikroelektromechanische Systeme (MEMS), zusätzlich zu Nicht-EMS-Anwendungen), ästhetische Strukturen (wie Darstellung von Bildern auf einem Schmuckstück oder Kleidung) und eine Vielfalt von EMS-Vorrichtungen.
  • Wie hierin verwendet, bezieht sich ein Ausdruck, der sich auf „mindestens eine/-r/- s von“ einer Liste von Elementen bezieht, auf eine beliebige Kombination dieser Elemente, einschließlich einzelner Elemente. Zum Beispiel soll „mindestens eines von: a, b oder c“ a, b, c, a-b, a-c, b-c und a-b-c abdecken.
  • Die verschiedenen veranschaulichenden Logiken, logischen Blöcke, Module, Schaltungen und Algorithmusprozesse, die in Verbindung mit den hier offenbarten Implementierungen beschrieben sind, können als elektronische Hardware, Computersoftware oder Kombinationen von beiden implementiert sein. Die Austauschbarkeit von Hardware und Software wurde allgemein in Bezug auf Funktionalität beschrieben und in den verschiedenen veranschaulichenden Komponenten, Blöcken, Modulen, Schaltungen und Prozessen, die vorstehend beschrieben sind, veranschaulicht. Ob eine derartige Funktionalität als Hardware oder Software implementiert ist, hängt von der spezifischen Anwendung und Designeinschränkungen ab, denen das Gesamtsystem unterliegt. Während bestimmte Ausführungsformen in einer Steuerung implementiert sein können, können andere Ausführungsformen in einem Hostsystem implementiert sein.
  • Die Hardware und Datenverarbeitungsvorrichtung, die zur Implementierung der verschiedenen veranschaulichenden Logiken, logischen Blöcke, Module und Schaltungen verwendet wird, die in Verbindung mit den hierin offenbarten Aspekten beschrieben werden, kann mit einem universellen Ein- oder Mehrchipprozessor, einem digitalen Signalprozessor (DSP), einer anwendungsspezifischen integrierten Schaltung (ASIC), einer feldprogrammierbaren Gatteranordnung (FPGA) oder einer anderen programmierbaren Logikvorrichtung, einer diskreten Gatter- oder Transistorlogik, diskreten Hardwarekomponenten oder einer beliebigen Kombination davon, die zur Ausführung der hierin beschriebenen Funktionen ausgelegt sind, implementiert oder durchgeführt werden. Ein Universalprozessor kann ein Mikroprozessor oder ein beliebiger herkömmlicher Prozessor, eine Steuerung, ein Mikrocontroller oder eine Zustandsmaschine sein. Ein Prozessor kann auch als eine Kombination von Rechenvorrichtungen implementiert sein, wie eine Kombination aus einem DSP und einem Mikroprozessor, einer Vielzahl von Mikroprozessoren, einem oder mehreren Mikroprozessoren in Verbindung mit einem DSP-Kern oder einer beliebigen anderen solchen Konfiguration. In einigen Implementierungen können bestimmte Prozesse und Verfahren von Schaltungen durchgeführt werden, die für eine gegebene Funktion spezifisch sind.
  • In einem oder mehreren Aspekten können die beschriebenen Funktionen in Hardware, digitale elektronische Schaltungen, Computersoftware, Firmware, einschließlich der in dieser Patentschrift offenbarten Strukturen und ihrer strukturellen Äquivalente, oder in einer beliebigen Kombination davon implementiert sein. Implementierungen des in dieser Patentschrift beschriebenen Gegenstandes können auch als ein oder mehrere Computerprogramme implementiert sein, d. h. ein oder mehrere Module von Computerprogrammanweisungen, die auf einem Computerspeichermedium zur Ausführung durch oder zur Steuerung des Betriebs von Datenverarbeitungsvorrichtungen codiert sind.
  • Verschiedene Modifikationen an den in dieser Offenbarung beschriebenen Implementierungen können für den Fachmann leicht ersichtlich sein, und die hierin definierten allgemeinen Prinzipien können auf andere Implementierungen angewendet werden, ohne vom Geist oder Umfang dieser Offenbarung abzuweichen. Daher sollen die Ansprüche nicht auf die hier gezeigten Implementierungen beschränkt sein, sondern sollen dem weitesten Umfang entsprechen, der mit dieser Offenbarung, den Prinzipien und den neuartigen hierin offenbarten Merkmalen im Einklang steht.
  • Außerdem wird ein Durchschnittsfachmann leicht erkennen, dass Richtungsbegriffe manchmal zur Vereinfachung der Beschreibung der Figuren verwendet werden und relative Positionen angeben, die der Ausrichtung der Figur auf einer richtig ausgerichteten Seite entsprechen, und dass sie die richtige Ausrichtung einer beliebigen Vorrichtung, wie implementiert, nicht widerspiegeln können.
  • Bestimmte Merkmale, die in dieser Patentschrift im Zusammenhang mit getrennten Implementierungen beschrieben sind, können auch in Kombination in einer einzigen Implementierung implementiert sein. Umgekehrt können verschiedene Merkmale, die im Kontext einer einzigen Implementierung beschrieben sind, auch in mehreren Implementierungen getrennt oder in einer beliebigen geeigneten Unterkombination implementiert sein. Außerdem können, obwohl Merkmale vorstehend als in bestimmten Kombinationen wirksam beschrieben und sogar anfänglich als solche beansprucht werden können, ein oder mehrere Merkmale aus einer beanspruchten Kombination in einigen Fällen aus der Kombination herausgeschnitten werden, und die beanspruchte Kombination kann auf eine Unterkombination oder Variation einer Unterkombination gerichtet sein.
  • Ebenso sollte, obwohl die Vorgänge in den Zeichnungen in einer bestimmten Reihenfolge dargestellt sind, dies nicht so verstanden werden, dass diese Vorgänge in der bestimmten Reihenfolge oder in sequentieller Reihenfolge ausgeführt werden müssen oder dass alle veranschaulichten Vorgänge ausgeführt werden müssen, um wünschenswerte Ergebnisse zu erzielen. Ferner können die Zeichnungen einen oder mehrere beispielhafte Prozesse in Form eines Flussdiagramms schematisch darstellen. Jedoch können andere Vorgänge, die nicht dargestellt sind, in die beispielhaften Prozesse einbezogen werden, die schematisch veranschaulicht sind. Zum Beispiel können eine oder mehrere zusätzliche Vorgänge vor, nach, gleichzeitig oder zwischen einer beliebigen der veranschaulichten Vorgänge ausgeführt werden. Unter bestimmten Umständen können Multitasking und Parallelverarbeitung vorteilhaft sein. Darüber hinaus sollte die Trennung verschiedener Systemkomponenten in den vorstehend beschriebenen Implementierungen nicht so verstanden werden, dass eine solche Trennung in allen Implementierungen erforderlich ist, und es sollte verstanden werden, dass die beschriebenen Programmkomponenten und Systeme im Allgemeinen zusammen in ein einziges Softwareprodukt integriert oder in mehrere Softwareprodukte verpackt werden können. Zusätzlich liegen weitere Implementierungen innerhalb des Schutzumfangs der folgenden Ansprüche. In einigen Fällen können die in den Ansprüchen wiedergegebenen Aktionen in einer anderen Reihenfolge ausgeführt werden und dennoch wünschenswerte Ergebnisse erzielen.

Claims (20)

  1. Steuerung, die eingerichtet ist zum: Bestimmen einer ersten Quellenstatistik für einen ersten Datenblock; Vergleichen der ersten Quellenstatistik mit einer zweiten Quellenstatistik für einen zweiten Datenblock; als Antwort auf das Bestimmen einer positiven Korrelation zwischen der ersten Quellenstatistik und der zweiten Quellenstatistik, Bestimmen von Decoderparametern für den ersten Datenblock basierend auf mindestens einer der ersten und der zweiten Quellenstatistik; und Decodieren des ersten Datenblocks unter Verwendung der bestimmten Decoderparameter.
  2. Steuerung nach Anspruch 1, wobei der erste Datenblock und der zweite Datenblock beide Daten eines ersten Typs einschließen, und wobei der erste Typ einer Anwendung entspricht, welche die Daten generiert hat.
  3. Steuerung nach Anspruch 1, wobei der erste Datenblock einer ersten Anwendung entspricht und von einem ersten Typ ist, wobei der zweite Datenblock einer zweiten verschiedenen Anwendung entspricht und von dem ersten Typ ist, und wobei der erste Typ einem Benutzer, der die Daten generiert hat, oder einem Dateityp entspricht.
  4. Steuerung nach Anspruch 1, wobei die Steuerung eingerichtet ist, die erste Quellenstatistik zu bestimmen, ohne den ersten Datenblock zu decodieren.
  5. Steuerung nach Anspruch 1, wobei die Steuerung ferner eingerichtet ist, Daten zu codieren, um den zweiten Datenblock zu generieren und die zweite Quellenstatistik während der Codierung des zweiten Datenblocks zu bestimmen.
  6. Steuerung nach Anspruch 1, wobei die Steuerung eingerichtet ist, die Decoderparameter für den ersten Datenblock zu bestimmen, indem sie zumindest teilweise Decoderparameter identifiziert, die für den zweiten Datenblock geeignet sind, als Antwort auf eine Bestimmung, dass die erste Quellenstatistik positiv mit der zweiten Quellenstatistik korreliert ist.
  7. Steuerung nach Anspruch 6, wobei die Steuerung eingerichtet ist, die erste Quellenstatistik mit der zweiten Quellenstatistik zu vergleichen, zumindest teilweise zum: Berechnen eines Korrelationskoeffizienten zwischen der ersten Quellenstatistik und der zweiten Quellenstatistik; Vergleichen des Korrelationskoeffizienten mit einer Korrelationsschwelle; und Bestimmen, dass die erste Quellenstatistik positiv mit der zweiten Quellenstatistik korreliert ist, als Antwort auf den Korrelationskoeffizienten, der die Korrelationsschwelle erfüllt.
  8. Steuerung nach Anspruch 1, wobei die Steuerung eingerichtet ist, den zweiten Datenblock vor dem Empfang und der Decodierung des ersten Datenblocks zu empfangen und zu decodieren.
  9. Steuerung nach Anspruch 1, wobei die Steuerung eingerichtet ist, den zweiten Datenblock unabhängig von einem physischen Ort des zweiten Datenblocks in einer Speichervorrichtung auszuwählen.
  10. Steuerung nach Anspruch 1, wobei die Steuerung eingerichtet ist, den zweiten Datenblock auszuwählen, unabhängig davon, wann der zweite Datenblock in Bezug auf den ersten Datenblock codiert wurde.
  11. Steuerung nach Anspruch 1, wobei die Steuerung eingerichtet ist, die erste Quellenstatistik basierend auf einer zeitlichen Korrelation zwischen der Codierung des ersten Datenblocks und des zweiten Datenblocks zu bestimmen, und wobei die Steuerung ferner eingerichtet ist, die Decoderparameter basierend auf der zeitlichen Korrelation zu modifizieren.
  12. Steuerung nach Anspruch 1, wobei die Steuerung eingerichtet ist, die erste Quellenstatistik mit der zweiten Quellenstatistik zu vergleichen, um zumindest teilweise Frequenzen von mindestens einem von Bits, Bytes und Sequenzen variabler Länge in dem ersten und zweiten Datenblock zu vergleichen.
  13. Steuerung nach Anspruch 1, wobei die erste Quellenstatistik ausgewählt ist aus einer Gruppe bestehend aus einem Byte-Histogramm, das den Frequenzen von Bytes entspricht, einem Bit-Histogramm, das den Frequenzen von Bits entspricht, und einer Wiederholung von Sequenzen variabler Länge.
  14. Verfahren, aufweisend: Empfangen eines ersten ECC-codierten Datenblocks, der in einer Vielzahl von Speicherzellen gespeichert ist, die codierte Datenblöcke speichern, die Daten enthalten, die von einer Vielzahl von Anwendungstypen generiert werden, wobei der erste codierte Datenblock Daten enthält, die von einem ersten Anwendungstyp generiert werden; Vergleichen einer ersten Quellenstatistik für den ersten ECC-codierten Datenblock mit einer Vielzahl von Klassen von Quellenstatistiken, die Daten entsprechen, die von einer Vielzahl von entsprechenden Anwendungstypen generiert werden; Identifizieren einer ersten Klasse von Quellenstatistiken, die positiv mit der ersten Quellenstatistik basierend zumindest teilweise auf dem Anwendungstyp korreliert ist; Modifizieren von ECC-Decoderparametern basierend auf der ersten Klasse von Quellenstatistiken; und Decodieren des ersten ECC-codierten Datenblocks unter Verwendung der modifizierten E CC- Decoderparameter.
  15. Verfahren nach Anspruch 14, wobei das Identifizieren der ECC-Decoderparameter das Berechnen einer Korrelation der ersten Quellenstatistik mit einer zweiten Quellenstatistik für einen zweiten ECC-codierten Datenblock aufweist.
  16. Verfahren nach Anspruch 15, ferner aufweisend ECC-Codierung von in die Speicherzellen geschriebenen Daten und Bestimmen der ersten Quellenstatistik während der Codierung von Daten, um den ersten ECC-codierten Datenblock zu generieren.
  17. Verfahren nach Anspruch 14, wobei die erste Klasse von Quellenstatistiken als positiv korreliert mit der ersten Quellenstatistik als Antwort auf eine Korrelation zwischen der ersten Klasse von Quellenstatistiken und der ersten Quellenstatistik identifiziert wird, die eine Korrelationsschwelle erfüllt.
  18. Verfahren nach Anspruch 17, wobei die Decoderparameter, die zum erfolgreichen Decodieren eines zweiten ECC-codierten Datenblocks verwendet werden, als Antwort auf das Bestimmen, dass die Korrelation die Korrelationsschwelle überschreitet, auf den ersten ECC-codierten Datenblock angewendet werden.
  19. Verfahren zum Decodieren ECC-codierter Daten, wobei das Verfahren aufweist: Bestimmen einer Quellenstatistik für einen codierten Datenblock; Berechnen einer ersten Korrelation der Quellenstatistik mit einer ersten Referenzquellenstatistik, die einem ersten referenzcodierten Datenblock entspricht; Vergleichen der ersten Korrelation mit einer Korrelationsschwelle; und als Antwort auf das Bestimmen, dass die erste Korrelation die Korrelationsschwelle erfüllt, Decodieren des codierten Datenblocks unter Verwendung von Decodierparametern, die zuvor zum Decodieren des ersten referenzcodierten Datenblocks verwendet wurden.
  20. Verfahren nach Anspruch 19, ferner aufweisend das Berechnen einer zweiten Korrelation der Quellenstatistik mit einer zweiten Referenzquellenstatistik, die einem zweiten referenzcodierten Datenblock entspricht, wobei die codierten Daten unter Verwendung von Decodierparametern decodiert werden, die zuvor zum Decodieren des ersten referenzcodierten Datenblocks verwendet wurden, wenn sowohl (i) die erste Korrelation die Korrelationsschwelle erfüllt, als auch (ii) die erste Korrelation größer als die zweite Korrelation ist.
DE102019134293.7A 2019-01-22 2019-12-13 Speichervorrichtung mit verbesserter fehlerkorrektur Pending DE102019134293A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/254,575 2019-01-22
US16/254,575 US10911069B2 (en) 2019-01-22 2019-01-22 Memory device with enhanced error correction

Publications (1)

Publication Number Publication Date
DE102019134293A1 true DE102019134293A1 (de) 2020-07-23

Family

ID=71403218

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102019134293.7A Pending DE102019134293A1 (de) 2019-01-22 2019-12-13 Speichervorrichtung mit verbesserter fehlerkorrektur

Country Status (4)

Country Link
US (1) US10911069B2 (de)
KR (1) KR102225483B1 (de)
CN (1) CN111459705B (de)
DE (1) DE102019134293A1 (de)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11635910B2 (en) * 2019-12-30 2023-04-25 Micron Technology, Inc. Memory device interface and method
US11989141B2 (en) 2019-12-27 2024-05-21 Micron Technology, Inc. Neuromorphic memory device and method

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8612802B1 (en) 2011-01-31 2013-12-17 Open Invention Network, Llc System and method for statistical application-agnostic fault detection
US9948324B1 (en) * 2011-01-31 2018-04-17 Open Invention Network, Llc System and method for informational reduction
US10191796B1 (en) 2011-01-31 2019-01-29 Open Invention Network, Llc System and method for statistical application-agnostic fault detection in environments with data trend
US11528038B2 (en) * 2020-11-06 2022-12-13 Western Digital Technologies, Inc. Content aware decoding using shared data statistics
US11853607B2 (en) 2021-12-22 2023-12-26 Western Digital Technologies, Inc. Optimizing flash memory utilization for NVMe KV pair storage
US11817883B2 (en) 2021-12-27 2023-11-14 Western Digital Technologies, Inc. Variable length ECC code according to value length in NVMe key value pair devices
US11733876B2 (en) 2022-01-05 2023-08-22 Western Digital Technologies, Inc. Content aware decoding in KV devices
EP4216443A1 (de) * 2022-01-25 2023-07-26 Nokia Solutions and Networks Oy Leistungsreduzierte ldpc decodierung

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5651096A (en) * 1979-10-03 1981-05-08 Hitachi Ltd Error detection system
JPH05304519A (ja) * 1992-04-02 1993-11-16 Nec Corp フレーム同期回路
EP0606016B1 (de) * 1993-01-07 2002-10-09 Kabushiki Kaisha Toshiba Datenübertragungssystem mit adaptivem Hybrid-ARQ-Verfahren
GB2364843A (en) * 2000-07-14 2002-02-06 Sony Uk Ltd Data encoding based on data quantity and data quality
JP4071097B2 (ja) * 2002-12-09 2008-04-02 三菱電機株式会社 復号装置及び符号識別方法
US8301963B2 (en) * 2007-10-23 2012-10-30 Spansion Llc Low-density parity-check code based error correction for memory device
KR20100104623A (ko) * 2009-03-18 2010-09-29 삼성전자주식회사 데이터 처리 시스템 및 그것의 부호율 제어 스킴
US9419655B2 (en) * 2014-04-04 2016-08-16 Seagate Technology Llc Error correction code (ECC) selection using probability density functions of error correction capability in storage controllers with multiple error correction codes
ES2750999T3 (es) * 2014-07-22 2020-03-30 Huawei Tech Co Ltd Método y aparato para determinar límites de trama de corrección de errores hacia adelante, y sistema de descodificación
US9811418B2 (en) * 2015-10-26 2017-11-07 Sandisk Technologies Llc Syndrome-based codeword decoding
US10630430B2 (en) * 2016-03-18 2020-04-21 Kyocera Corporation System and method for dual-coding for dual-hops channels
TWI612527B (zh) * 2016-04-08 2018-01-21 群聯電子股份有限公司 解碼方法、記憶體儲存裝置及記憶體控制電路單元
US10326479B2 (en) * 2016-07-11 2019-06-18 Micron Technology, Inc. Apparatuses and methods for layer-by-layer error correction
US10158380B2 (en) * 2016-12-06 2018-12-18 Sandisk Technologies Llc ECC and read adjustment based on dynamic memory error model estimation
US10250281B2 (en) * 2016-12-30 2019-04-02 Sandisk Technologies Llc ECC decoder having adjustable parameters
US10459786B2 (en) * 2017-06-27 2019-10-29 Western Digital Technologies, Inc. Scaling large drives using enhanced DRAM ECC

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11989141B2 (en) 2019-12-27 2024-05-21 Micron Technology, Inc. Neuromorphic memory device and method
US11635910B2 (en) * 2019-12-30 2023-04-25 Micron Technology, Inc. Memory device interface and method

Also Published As

Publication number Publication date
CN111459705B (zh) 2023-04-07
US20200235757A1 (en) 2020-07-23
KR102225483B1 (ko) 2021-03-09
US10911069B2 (en) 2021-02-02
CN111459705A (zh) 2020-07-28
KR20200091798A (ko) 2020-07-31

Similar Documents

Publication Publication Date Title
DE102019134293A1 (de) Speichervorrichtung mit verbesserter fehlerkorrektur
DE112014004778B4 (de) Vorrichtung und Verfahren zum Verwalten von Chipgruppen
DE112018004251T5 (de) Adaptive vorrichtungsdienstqualität durch host-speicherpufferbereich
DE102018105529B4 (de) Managementschema zur Vermeidung einer Lösch- und Programmierstörung von Subblöcken im nichtflüchtigen Datenspeicher
DE102017120960B4 (de) Mehrkanal-Speicheroperationen auf der Grundlage von Bitfehlerraten
DE102017120961A1 (de) ECC- und Leseeinstellung basierend auf der dynamischen Schätzung eines Speicherfehlermodells
DE102011055714B4 (de) Verfahren zum Programmieren einer nicht-flüchtigen Speichervorrichtung
DE102010053097B4 (de) Memory-Controller-Funktionalitäten zur Unterstützung von Daten-Swizzling
DE112007002437B4 (de) Leistungs-oder stromverbrauchsoptimierte Code-Datenspeicherung für nichtflüchtige Speicher
DE102013103391A1 (de) Betriebsverfahren eines Controllers, der eine nichtflüchtige Speichervorrichtung steuert, und Mappingmuster-Auswahlverfahren zum Auswählen eines Mappingmusters, das ein polar codiertes Codewort Multibitdaten einer nichtflüchtigen Speichervorrichtung zuordnet
DE102017104257A1 (de) Auf Zellenstrom basierende Bitleitungsspannung
DE102015108143A1 (de) Nand-Vorab-Lese-Fehlerkorrektur
DE112012006014T5 (de) Verteilte Codewortteile
DE102018204576A1 (de) Historiebewusste selektive pixelverschiebung
DE102013100596B4 (de) Nichtflüchtiges Speichersystem mit Programmier- und Löschverfahren und Blockverwaltungsverfahren
DE112014004761T5 (de) Beeinflussung des Wear-Leveling in Speichersystemen
DE112016002631T5 (de) Speicherfunktionszustandsüberwachung
DE102004063571A1 (de) System und Verfahren zum Konfigurieren einer Festkörperspeicherungsvorrichtung mit Fehlerkorrekturcodierung
DE102011075023A1 (de) Indexierter Registerzugriff für einen Speicherbaustein
DE10392271T5 (de) Partielle Seitenprogrammierung eines Mehrfachpegel-Flash-Halbleiterspeichers
DE112019000161T5 (de) Speicher-cache-verwaltung
DE112016000696B4 (de) Ablaufplanungsschema(ta) für eine Mehrchip-Speichervorrichtung
DE112015003569B4 (de) Verfahren und System zum Verwenden von NAND-Seitenpuffern, um die Übertragungspuffernutzung eines Festkörperlaufwerks zu verbessern
DE102018123494A1 (de) Speichervorrichtung, die zum aktualisieren einesfeldprogrammierbaren gate-arrays ausgestaltetist, und betriebsverfahren dafür
DE102019133156A1 (de) Ldpc-code-längeneinstellung

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: DEHNSGERMANY PARTNERSCHAFT VON PATENTANWAELTEN, DE

Representative=s name: DEHNS GERMANY PARTNERSCHAFT MBB, DE