DE112011103295T5 - Decodieren in Solid-State-Speichereinheiten - Google Patents

Decodieren in Solid-State-Speichereinheiten Download PDF

Info

Publication number
DE112011103295T5
DE112011103295T5 DE112011103295T DE112011103295T DE112011103295T5 DE 112011103295 T5 DE112011103295 T5 DE 112011103295T5 DE 112011103295 T DE112011103295 T DE 112011103295T DE 112011103295 T DE112011103295 T DE 112011103295T DE 112011103295 T5 DE112011103295 T5 DE 112011103295T5
Authority
DE
Germany
Prior art keywords
iterations
unit
average number
decoding
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE112011103295T
Other languages
English (en)
Other versions
DE112011103295B4 (de
Inventor
Ilias Iliadis
Giovanni Cherubini
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112011103295T5 publication Critical patent/DE112011103295T5/de
Application granted granted Critical
Publication of DE112011103295B4 publication Critical patent/DE112011103295B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • 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/1048Adding 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 arrangements adapted for a specific error detection or correction feature

Abstract

In einer Solid-State-Speichereinheit werden Codewörter, die in einer Einheit der Speichereinheit (1) gespeichert sind, mittels eines iterativen Fehlerkorrektur-Decodierungsprozesses decodiert. Es wird eine durchschnittliche Anzahl von Iterationen (n_k) ermittelt, die zum erfolgreichen Decodieren von Codewörtern der Einheit erforderlich sind, und die durchschnittliche Anzahl von Iterationen (n_k) wird überwacht, insbesondere weil die durchschnittliche Anzahl von Iterationen (n_k) als Maß der Abnutzung der betreffenden Einheit verwendet werden kann.

Description

  • Gebiet der Erfindung
  • Die vorliegende Erfindung betrifft im Allgemeinen Speichersysteme, die Solid-State-Speichereinheiten wie beispielsweise Flash-Speichereinheiten aufweisen, sowie Verfahren zum Steuern solcher Solid-State-Speichereinheiten, insbesondere mit einem Hauptaugenmerk auf Decodierungsmechanismen für solche Solid-State-Speichereinheiten.
  • Hintergrund
  • Solid-State-Speichereinheiten weisen wiederbeschreibbare nichtflüchtige Speichereinheiten auf, die einen elektronischen Schaltkreis zum Speichern von Daten verwenden. Gegenwärtig ersetzen Solid-State-Speichereinheiten in einigen Bereichen beispielsweise in Massenspeicheranwendungen für Laptops oder Desktops allmählich herkömmliche Speichereinheiten wie zum Beispiel Festplattenlaufwerke und Laufwerke mit optischen Platten. Darüber hinaus wird untersucht, ob Solid-State-Speichereinheiten herkömmliche Speichereinheiten in weiteren Bereichen wie zum Beispiel in Unternehmensspeichersystemen ersetzen können. Der Grund dafür liegt darin, dass Solid-State-Speichereinheiten außergewöhnliche Bandbreite ebenso wie eine ausgezeichnete Random-I/O-Performance kombiniert mit einer wertvollen Robustheit aufgrund des Fehlens beweglicher Teile bieten.
  • Solid-State-Laufwerke (SSD, Solid State Drives) aus dem Stand der Technik – der Begriff wird gleichbedeutend mit dem Begriff Solid-State-Speichereinheit verwendet – können mit SLC-Speicherzellen (single level cells), für die eine binäre Quantisierung durchgeführt wird, um ein Bit an Daten zu erhalten, oder mit MLC-Speicherzellen (multi level cells) ausgebildet sein, für die Quantisierung an einer von mehreren Ebenen, für gewöhnlich vier oder acht, durchgeführt wird, um mehr als ein Bit an Daten zu erhalten.
  • Auf Solid-State-Laufwerke können Fehlerkorrekturcodes (ECC, error correction codes) angewendet werden, um die erforderliche Zuverlässigkeit des Datenabrufprozesses zu erreichen. Typischerweise werden zu diesem Zweck Reed-Solomon-(RS) oder Bose-Chaudhuri-Hocquenghem-(BCH)Codes zusammen mit harten Decodierungsalgorithmen verwendet. Das Hauptproblem bei harten Decodierungsalgorithmen besteht darin, dass ein nicht wieder gutzumachender Verlust von Daten immer dann auftritt, wenn eine Quantisierung an dem physikalischen Wert durchgeführt wird, der von einer Speicherzelle wiedergegeben wird. Um den durch harte Decodierungsverfahren verursachten Verlust von Daten zu umgehen, wurde in jüngster Zeit weiches Decodieren von Fehlerkorrekturcodes (ECC) für Solid-State-Laufwerke (SSDs) vorgeschlagen. Weiche Decodierungsverfahren sind durch ein Decodieren eines Codewortes innerhalb mehrerer Iterationen gekennzeichnet. Es ist bekannt, dass weiches Decodieren verglichen mit RS-Codes große Codegewinne hervorbringt. Dennoch geht iteratives Decodieren mit einer auf den Decodierungsprozess zurückzuführenden Latenz einher, die die Antwortzeit von SSD-Anwendungen nachteilig beeinflussen kann.
  • In WO 2007/084751 A2 wird ein iteratives Decodierungsverfahren auf eine Solid-State-Speichereinheit angewendet, bei der die Einheit unter anderem aufweist einen Encoder, eine nichtflüchtige Solid-State-Speicheranordnung mit mehreren Ebenen, die so eingerichtet ist, dass sie von dem Encoder kodierte Daten speichert, und einen Decoder, der so eingerichtet ist, dass er die aus der Speicheranordnung abgerufenen Daten decodiert. Die Speicheranordnung kann eine Flash-EEPROM-Anordnung sein. Die Speichereinheit weist optional einen Modulator und einen Demodulator auf. Die von dem Modulator modulierten Daten werden in der Speicheranordnung gespeichert. Der Demodulator demoduliert die von der Speicheranordnung abgerufenen modulierten Daten.
  • Ein weiterer iterativer Decoder wird in US 2009/0024905 A1 veranschaulicht, in dem das entsprechende Verfahren zum Betreiben einer Speichereinheit Kodieren von Daten unter Verwendung eines Fehlerkorrekturcodes (EEC) und Speichern der kodierten Daten als erste analoge Werte in jeweiligen analogen Speicherzellen der Speichereinheit aufweist. Nach dem Speichern der kodierten Daten werden zweite analoge Werte aus den jeweiligen Speicherzellen der Speichereinheit gelesen, in denen die kodierten Daten gespeichert wurden. Es unterscheiden sich wenigstens einige der zweiten analogen Werte von den jeweiligen ersten analogen Werten. Es wird eine Verzerrung, die in den zweiten analogen Werten vorhanden ist, geschätzt. Als Antwort auf die geschätzte Verzerrung werden Fehlerkorrekturmesswerte in Bezug auf die zweiten analogen Werte berechnet. Die zweiten analogen Werte werden unter Verwendung der Fehlerkorrekturmesswerte in einem ECC-Decodierungsprozess verarbeitet, um die Daten wiederherzustellen.
  • Kurzdarstellung der Erfindung
  • Gemäß einer Ausführungsform eines ersten Aspektes der Erfindung wird ein Verfahren zum Steuern einer Solid-State-Speichereinheit bereitgestellt, aufweisend die Schritte des Decodierens von in einer Einheit der Speichereinheit gespeicherten Codewörtern mittels eines iterativen Fehlerkorrektur-Decodierungsprozesses, des Bestimmens einer durchschnittlichen Anzahl von Iterationen, die zum erfolgreichen Decodieren von Codewörtern der Einheit erforderlich sind und des Überwachens der durchschnittlichen Anzahl von Iterationen.
  • In Ausführungsformen kann das Verfahren ein oder mehrere der folgenden Leistungsmerkmale aufweisen:
    • – Gemäß der durchschnittlichen Anzahl von Iterationen wird wenigstens eine der folgenden Aktivitäten ausgelöst:
    • – Modifizieren eines Modus, in dem die Einheit betrieben wird;
    • – Anwenden einer Wear-Levelling-Routine;
    • – kein weiteres Betreiben der Einheit;
    • – Anwenden von Maßnahmen zum Verhindern von Datenverlust in Bezug auf die Einheit;
    • – Modifizieren eines oder mehrerer in dem Decodierungsprozess verwendeter Parameter und Fortsetzen des Decodierungsprozesses mit den modifizierten Parametern.
    • – Der Schritt des Überwachens der durchschnittlichen Anzahl von Iterationen weist Vergleichen der durchschnittlichen Anzahl von Iterationen mit einem Schwellenwert und Auslösen wenigstens einer Aktivität auf, wenn die durchschnittliche Anzahl von Iterationen den Schwellenwert übersteigt;
    • – Die Einheit wird markiert, wenn die durchschnittliche Anzahl von Iterationen den Schwellenwert übersteigt;
    • – In dem Decodierungsprozess wird eine maximale Latenz oder eine maximale Anzahl von Iterationen definiert, wonach spätestens der Decodierungsprozess zum Decodieren eines Codewortes beendet wird, und es wird jeweils die maximale Latenz oder die maximale Anzahl an Iterationen erhöht, wenn die durchschnittliche Anzahl von Iterationen den Schwellenwert übersteigt;
    • – Es wird eine maximale Benutzer-Bitfehlerrate definiert, wobei die Benutzer-Bitfehlerrate eine Fehlerrate von Codewörtern ist, nachdem der iterative Fehlerkorrektur-Decodierungsprozess angewendet worden ist, und es wird die maximale Benutzer-Bitfehlerrate erhöht, wenn die durchschnittliche Anzahl von Iterationen den Schwellenwert übersteigt;
    • – In dem Decodierungsprozess wird eine Anzahl von Quantisierungsebenen in Iterationen zum Ermitteln einer A-posteriori-Wahrscheinlichkeit eines Codesymbols angewendet, das von einem in einer Zelle der Speichereinheit gespeicherten physikalischen Wert dargestellt wird, dessen Anzahl an Quantisierungsebenen die Anzahl an pro Zelle verfügbaren Codesymbolen übersteigt;
    • – Die durchschnittliche Anzahl von Iterationen einer Einheit wird ermittelt, indem die Anzahl von Iterationen, die zum erfolgreichen Decodieren von Codewörtern einer Einheit für eine vorgegebene Anzahl von Lesevorgängen aus dem Block erforderlich sind, akkumuliert wird und die akkumulierte Anzahl von Iterationen durch die vorgegebene Anzahl von Lesevorgängen dividiert wird;
    • – Die für die vorgegebene Anzahl von Lesevorgängen benötigte Zeit wird überwacht;
    • – Die Speichereinheit weist mehrere Einheiten auf; für jede der Einheiten wird die durchschnittliche Anzahl von Iterationen ermittelt; und eine durchschnittliche Anzahl von Iterationen für die Einheit wird ermittelt, indem die durchschnittliche Anzahl von Iterationen einer jeden der Einheiten akkumuliert und die akkumulierte durchschnittliche Anzahl durch die Anzahl an Einheiten dividiert wird;
    • – Die Speichereinheit weist eine einzelne Einheit (unit) auf.
  • Gemäß einer Ausführungsform eines weiteren Aspektes der vorliegenden Erfindung wird ein Computerprogrammprodukt bereitgestellt, aufweisend ein computerlesbares Medium mit einem darin enthaltenen computerlesbaren Programmcode, wobei der computerlesbare Programmcode einen computerlesbaren Programmcode aufweist, der so konfiguriert ist, dass er ein Verfahren nach einer beliebigen der vorstehenden Ausführungsformen durchführt.
  • Gemäß einer Ausführungsform eines weiteren Aspektes der vorliegenden Erfindung wird ein Speicher-Controller zum Steuern einer Solid-State-Speichereinheit bereitgestellt, aufweisend einen weichen Decoder zum Decodieren von in einer Einheit der Speichereinheit gespeicherten Codewörtern mittels eines iterativen Fehlerkorrektur-Decodierungsprozesses, eine Datenverarbeitungseinheit zum Ermitteln einer durchschnittlichen Anzahl von Iterationen, die zum erfolgreichen Decodieren von Codewörtern der Einheit erforderlich sind, und eine Überwachungseinheit zum Überwachen der durchschnittlichen Anzahl von Iterationen.
  • In Ausführungsformen kann der Speicher-Controller ein oder mehrere der folgenden Leistungsmerkmale aufweisen:
    • – Der weiche Decoder weist mehrere Decodiereinheiten zum parallelen Decodieren mehrerer in der Einheit der Speichereinheit gespeicherter Codewörter mittels eines iterativen Fehlerkorrektur-Decodierungsprozesses auf;
    • – Der weiche Decoder weist eine einzelne Decodiereinheit zum Decodieren eines in der Einheit der Speichereinheit gespeicherten Codewortes mittels eines iterativen Fehlerkorrektur-Decodierungsprozesses und eine Warteschlange zum Speichern aufeinanderfolgender zu decodierender Codewörter auf.
  • Gemäß einer Ausführungsform eines weiteren Aspektes der Erfindung wird eine Speichereinheit bereitgestellt, aufweisend einen Solid-State-Speicher und einen Speicher-Controller zum Steuern des Solid-State-Speichers gemäß den Speicher-Controller-Aspekten der Erfindung.
  • Es versteht sich, dass Verfahrensschritte in einer anderen als der in einem Verfahrensanspruch aufgeführten Reihenfolge ausgeführt werden können. Solch eine andere Reihenfolge soll ebenso in dem Umfang eines solchen Anspruches enthalten sein wie die Reihenfolge der Schritte in ihrer vorliegend aufgeführten Form.
  • Ausführungsformen, die in Bezug auf den Aspekt des Verfahrens beschrieben sind, gelten ebenfalls als Ausführungsformen, die im Zusammenhang mit einer beliebigen der anderen Kategorien wie beispielsweise der Einheit, dem Computerprogrammprodukt usw. offenbart werden und umgekehrt.
  • Kurzbeschreibung der Zeichnungen
  • In Bezug auf die folgende ausführliche Beschreibung der gegenwärtig bevorzugten jedoch veranschaulichenden Ausführungsformen gemäß der vorliegenden Erfindung werden die Erfindung und ihre Ausführungsformen in ihrer Gesamtheit besser verstanden, wenn diese zusammen mit den begleitenden Zeichnungen gelesen wird.
  • Die Figuren veranschaulichen:
  • 1 einen Ablaufplan eines Verfahrens zum Steuern einer Solid-State-Speichereinheit gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 2 einen Ablaufplan eines Verfahrens zum Steuern einer Solid-State-Speichereinheit gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3 zwei Tabellen, die einen beispielhaften Status verschiedener Zähler veranschaulichen, die in dem Verfahren in 2 verwendet werden;
  • 4 ein Schaubild, das die Beziehung zwischen einer unverarbeiteten Bitfehlerrate, einer Benutzer-Bitfehlerrate und Latenz/Iterationen in dem Decodierungsprozess veranschaulicht;
  • 5 ein Blockschaltbild einer Speichereinheit gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 6 ein Blockschaltbild eines Speicher-Controllers gemäß einer Ausführungsform der vorliegenden Erfindung; und
  • 7 eine schematische Veranschaulichung eines Abschnittes des Speicherplatzes einer Flash-Speichereinheit.
  • Ausführliche Beschreibung der Ausführungsformen
  • Als Einleitung zu der folgenden Beschreibung wird zunächst auf einen allgemeinen Aspekt der Erfindung in Bezug auf die Art und Weise hingewiesen, mit der eine Solid-State-Speichereinheit gesteuert wird, typischerweise mittels eines Speicher-Controllers. In einer Einheit der Speichereinheit gespeicherte Codewörter werden mittels eines iterativen Fehlerkorrektur-Decodierungsprozesses decodiert. Es wird eine durchschnittliche Anzahl an Iterationen ermittelt, die zum erfolgreichen Decodieren von Codewörtern der Einheit erforderlich sind. Solch eine durchschnittliche Anzahl an Iterationen wird überwacht.
  • Das Konzept basiert auf der Erkenntnis, dass, wenn ein weicher Decodierungsprozess mittels eines geeigneten Fehlerkorrekturcodes auf in der Speichereinheit gespeicherte Codewörter angewendet wird, der ein iteratives Decodieren ermöglicht, bedeutsame Daten von den Decodierungsoperationen für einen ganz anderen Solid-State-Speichereinheiten betreffenden Bereich, nämlich Abnutzung, abgeleitet werden können.
  • Flash- und andere Solid-State-Speichereinheiten wie beispielsweise Phasenwechsel-Speichereinheiten weisen aufgrund der physikalischen Eigenschaft der Abnutzung der Einheit das Problem einer begrenzten Lebensdauer auf. Genauer gesagt, besitzen Flash-Speichereinheiten eine endliche Anzahl an Schreib-Lösch-Zyklen, bevor sich die Speicherintegrität allmählich verschlechtert und Daten weder sicher gespeichert noch geschrieben werden können. Solch eine maximale Anzahl an Schreib-Lösch-Zyklen, die an jedem Block durchgeführt werden können, bevor er abgenutzt ist, wird Lebensdauer genannt. Nachdem ein Block ein bestimmtes Maß an Abnutzung aufweist, das von Block zu Block sehr verschieden sein kann, verschlechtert sich die Leistung schnell. Die Lebensdauer kann, ausgehend von einer Datenspeicherung von zehn Jahren, typischerweise in der Größenordnung von 100000 für SLC und 10000 für MLC liegen, wobei sich Datenspeicherung auf den maximalen Zeitraum bezieht, für den Daten aus der Einheit gelesen werden können, möglicherweise mit korrigierbaren Fehlern.
  • Darüber hinaus wird in Solid-State-Speichereinheiten Abnutzung teilweise aufgrund der Art und Weise beschleunigt, wie diese Einheiten betrieben werden. Beispielsweise ist ein NAND-Flash-Speicher in Einheiten von Blöcken und Untereinheiten von Seiten aufgebaut. Mehrere Seiten bilden einen Block. Während Lese- und Schreiboperationen auf Seiten als kleinste Einheit einer solchen Operation angewendet werden können, können Löschoperationen lediglich auf ganze Blöcke angewendet werden. Und während bei anderen Speichertechnologien überholte Daten einfach mit neuen Daten überschrieben werden können, erfordert die Flash-Technologie erst eine Löschoperation, bevor neue Daten auf einen gelöschten Block geschrieben werden können. Weil bei der Flash-Technologie Löschoperationen viel länger als Lese- oder Schreiboperationen dauern, wird ein Schreibverfahren angewendet, das „write out of place” (Schreiben an einen anderen Ort) genannt wird, bei dem neue oder aktualisierte Daten auf einige freie Seiten geschrieben werden, die von einer Zuteilungseinheit für freie Seiten angeboten werden, anstatt diese auf dieselbe Seite zu schreiben, auf der sich die veralteten Daten befinden. Die Seite, die die veralteten Daten enthält, ist eine ungültige Seite. Zu einem gewissen Zeitpunkt bereinigt ein Prozess, der „Garbage Collection” (Automatische Speicherbereinigung) genannt wird, Blöcke für neue Schreibvorgänge, indem der Inhalt sämtlicher gültigen Seiten eines Blocks auf freie Seiten an anderen Blöcken bewegt wird. Als Ergebnis weist der betreffende Block schließlich nur ungültige Seiten auf und kann gelöscht werden. Es ist offensichtlich, dass diese „write out of place”-Vorgehensweise einige zusätzliche interne Schreiboperationen erfordert, deren Effekt Write Amplification („Schreibfaktor”) genannt wird, wodurch wiederum die Abnutzung der Einheit verstärkt wird. Das Überwachen von Abnutzung in einer Solid-State-Speichereinheit ist wichtig, um zu verhindern, dass Daten aufgrund von abgenutzten Blöcken verloren gehen.
  • Es wurde herausgefunden, dass die durchschnittliche Anzahl von Iterationen, die für das Decodieren von Codewörtern erforderlich sind, wenn eine iterativer Fehlerkorrektur-Decodierungsprozess angewendet wird, repräsentativ für das Maß an Abnutzung ist, das die jeweilige Einheit aufweist. Mit anderen Worten bedeutet dies, dass die durchschnittliche Anzahl von Iterationen, die zum erfolgreichen Decodieren von Codewörtern erforderlich sind, ein Maß für die Abnutzung der Einheit ist. Mithilfe des Überwachens der durchschnittlichen Anzahl von Iterationen kann die Abnutzung einer Einheit überwacht werden, und gemäß der durchschnittlichen Anzahl von Iterationen können bestimmte Schritte unternommen werden.
  • Bei niedrigen Abnutzungsgraden bei normaler Benutzung zeigt sich eine gute Block-/Einheitsleistung anhand sehr weniger Iterationen, die zum Erklären eines erfolgreichen Decodierens erforderlich sind, und demzufolge wird auch eine sehr geringe Decodierungslatenz beobachtet. Mit zunehmender Abnutzung oder Verlängerung des Zeitraums seit der letzten Schreiboperation eines Blockes verschlechtert sich die Leistung, und es werden mehr Iterationen für ein erfolgreiches Decodieren benötigt. Die durchschnittliche Anzahl an Iterationen für erfolgreiches Decodieren von in einem Block gespeicherten Codewörtern wird dann als Maßstab für die Abnutzung übernommen.
  • Bei Decodierungsalgorithmen für Fehlerkorrekturcodes (ECC), bei denen hartes Decodieren in Form von harten Entscheidungen anstelle weichen Decodierens verwendet wird, wird eine Quantisierung an dem in einer Zelle der Speichereinheit gespeicherten physikalischen Wert durchgeführt, der ein Codesymbol darstellt und in ein solches übersetzt werden soll. In Anbetracht der Tatsache, dass beispielsweise der physikalische Wert eine in der Zelle gespeicherte Spannung ist, kann eine Quantisierungsebene eine bestimmte Spannung sein, die einen der möglichen von den Codesymbolen angenommen binären Werte darstellt, die in der Zelle kodiert sind. Dementsprechend entspricht die Anzahl von Quantisierungsebenen für das harte Decodieren typischerweise der Anzahl an möglichen binären Werten, die von den Codesymbolen angenommen werden. So sind beispielsweise in einer Zelle mit vier Ebenen einer Flash-Speichereinheit typischerweise zwei binäre Codesymbole kodiert, und es wird eine Quantisierungseinheit mit vier Ebenen zur harten Erfassung verwendet. Die durch Quantisierung erhaltene wieder gewonnene Sequenz an Codesymbolen stellt die ursprüngliche Sequenz an Datenbits dar. Beispielsweise werden Reed-Solomon-(RS) oder Bose-Chaudhuri-Hocquenghem-(BCH)Codes allgemein üblich zusammen mit harten Decodierungsalgorithmen in Flash-Speichern verwendet.
  • Das Hauptproblem beim harten Decodieren besteht darin, dass ein unwiederbringlicher Verlust von Daten immer dann auftritt, wenn eine harte Quantisierung an einem physikalischen Wert durchgeführt wird, der ein oder mehrere Codesymbole darstellen kann. Zur Überwindung dieses Problems kann weiches Fehlerkorrekturcode-(ECC)Decodieren angewendet werden. Bei weichen Decodierungsalgorithmen wird ein physikalischer Wert, der ein oder mehrere Codesymbole darstellen kann, ohne vorherige Quantisierung im Sinne des harten Kodierens, bei dem eine abschließende Entscheidung in Bezug auf die wenigen gegebenen Quantisierungsebenen getroffen wird, idealerweise in einen Decoder eingegeben. In der Praxis des weichen Decodierens wird eine Quantisierung mit einer Anzahl von Quantisierungsebenen angewendet, die signifikant größer, beispielsweise acht Mal größer als die Anzahl von möglichen binären Werten ist, die von den Codesymbolen angenommen werden, welche durch den physikalischen Wert dargestellt sind. Dementsprechend ist weiches Decodieren durch ein iteratives Annähern an eine Entscheidung gekennzeichnet, welcher binärer Wert eines Codesymbols durch einen physikalischen Wert dargestellt wird, und zwar unter Verwendung einer Anzahl von Quantisierungsebenen, die die Anzahl von Codesymbolen bei Weitem überwiegt. Für eine bestimmte Klasse an Codes werden die erreichbaren Kodierungsgewinne im Wesentlichen erhöht, wenn iterative weiche Decodierungsalgorithmen angewendet werden. Iterative weiche Decodierungsschemata wenden für gewöhnlich eine Mitteilungs-Weitergabe-Vorgehensweise zwischen zwei weichen Decodierungskomponenten/Logiken an, so dass jede Komponente die weichen Daten von der jeweils anderen Komponente zum Erzeugen von zuverlässigeren Entscheidungen verwendet. Durch Anwenden eines weichen Decodierungsprozesses kann der unwiederbringliche Verlust von Daten verglichen mit dem harten Decodieren verhindert werden.
  • Demzufolge bezieht sich im Kontext der vorliegenden Erfindung weiches Decodieren auf einen Decodierungsprozess, der Gebrauch von einer Anzahl von Quantisierungsebenen in verschiedenen Iterationen zum Ermitteln eines binären Wertes eines Codesymbols macht, der durch einen in einer Zelle der Speichereinheit gespeicherten physikalischen Wert dargestellt wird. In solch einem Prozess übersteigt die Anzahl von Quantisierungsebenen die Anzahl möglicher binärer Werte, die von den pro Zelle verfügbaren Codesymbolen angenommen werden. Vorzugsweise übersteigt die Anzahl an Quantisierungsebenen die Anzahl möglicher binärer Werte, die von den pro Zelle verfügbaren Codesymbolen angenommen werden, mindestens um acht. In einer bevorzugten Ausführungsform werden weiche Decoder zum Decodieren von Turbocodes oder Low-Density Parity Check-(LDPC)Codes angewendet. Vorzugsweise werden, wenn Daten auf die Einheit geschrieben werden, Daten durch den entsprechenden Fehlerkorrekturcode, vorzugsweise ein Turbocode oder ein Low-Density Parity Check-(LDPC)Code kodiert, die durch den weichen Decoder decodiert werden können.
  • Um das Abnutzungsproblem in Solid-State-Speichereinheiten zu mindern, wurde ein unterschiedlicher Fehlerschutz für Blöcke mit unterschiedlichen Abnutzungsgraden vorgeschlagen. Dies wird nun deshalb nicht weiter benötigt, weil mit Hilfe des weichen Decodierens alle Blöcke mit denselben Fehlerkorrekturcodes behandelt werden können, bei denen es sich um die vorgeschlagenen iterativen Codes handelt, da der Grad an Abnutzung frühzeitig abgeleitet oder anhand der durchschnittlichen Anzahl von Iterationen impliziert werden kann.
  • Gemäß der durchschnittlichen Anzahl von Iterationen kann ein interner Verwaltungsprozess, der von Flash-Controllern durchgeführt und Wear-Levelling genannt wird, durchgeführt werden. Dieser Prozess richtet sich an die Abnutzungseigenschaften der Speichereinheit. Wear-Levelling beinhaltet verschiedene Datenplatzierungs- und Datenbewegungsfunktionen, die darauf abzielen, Schreib-Lösch-Zyklen gleichmäßig auf alle verfügbaren Einheiten zu verteilen, um eine uneinheitliche Abnutzung zu verhindern und somit die Lebensdauer insgesamt zu verlängern. Insbesondere steuert die Wear-Levelling-Funktion das Auswählen von Blöcken, auf die neue Daten geschrieben werden sollen, sowie das Bewegen gespeicherter Daten innerhalb des Flash-Speichers, um Blöcke mit niedrigen Zykluszählwerten freizugeben und Abnutzung auszugleichen. Solch ein Wear-Levelling-Prozess kann durch eine spezifische Anzahl von oder einen Bereich von durchschnittlichen Iterationen identifiziert werden. Es besteht kein Bedarf mehr am separaten Einrichten von Mitteln zum Bestimmen der Abnutzung wie beispielsweise dem Zählen von Schreib-Lösch-Zyklen pro Einheit. Das Maß der Abnutzung, das in der durchschnittlichen Anzahl von Iterationen impliziert ist, kann als Auslöser und/oder als Eingangsgröße zur Schätzung der Abnutzung für einen Wear-Levelling-Prozess verwendet werden.
  • Zusammenfassend ausgedrückt, wird die Anzahl von Iterationen überwacht, die zum weichen Decodieren von in einer Einheit gespeicherten Codewörtern unter Verwendung iterativer Codes wie beispielsweise Turbocodes oder LDPC-Codes erforderlich sind. Bei niedrigen Abnutzungsgraden bei normaler Benutzung zeigt sich eine gute Leistung der Einheit anhand sehr weniger Iterationen, die erforderlich sind, um das Decodieren als erfolgreich zu erklären, und demzufolge wird auch eine geringe Decodierungslatenz festgestellt. Wenn sich die Abnutzung oder der Zeitraum seit der letzten Schreiboperation eines Blockes vergrößert, verschlechtert sich die Leistung, und für ein erfolgreiches Decodieren werden mehr Iterationen erforderlich. Die durchschnittliche Anzahl von Iterationen für ein erfolgreiches weiches Decodieren von in einem Block gespeicherten Codewörtern wird anschließend als eine Messgröße des Abnutzungsgrades angenommen.
  • 1 zeigt einen Ablaufplan eines Verfahrens zum Steuern einer Solid-State-Speichereinheit gemäß einer Ausführungsform der Erfindung. In Schritt 10 werden Codewörter, die in einer Einheit, beispielsweise einem Block einer Flash-Speichereinheit gespeichert sind, mittels eines iterativen Fehlerkorrektur-Decodierungsprozesses decodiert. In Schritt 11 wird eine durchschnittliche Anzahl von Iterationen, die für ein erfolgreiches Decodieren von Codewörtern in der Einheit erforderlich sind, basierend auf dem Decodieren mehrerer Codewörter in Schritt 10 ermittelt, was mehreren Leseprozessen entspricht. In Schritt 12 wird die durchschnittliche Anzahl von Iterationen überwacht, indem sie mit einem Schwellenwert verglichen wird. Liegt die durchschnittliche Anzahl von Iterationen unterhalb des Schwellenwertes (N), startet der Prozess von Neuem in Schritt 10, bis eine ausreichende Anzahl von Lesevorgängen durchgeführt wurde, mit denen das Zustandekommen einer durchschnittlichen Anzahl von Iterationen gemäß den Anforderungen in Schritt 11 ermöglicht wird.
  • Liegt die durchschnittliche Anzahl von Iterationen in Schritt 12 oberhalb des Schwellenwertes (J), können in Schritt 13 eine oder mehrere Aktivitäten durchgeführt werden: Zu solchen Aktivitäten können eine oder mehrere aus:
    • – Modifizieren eines Modus, in dem die Einheit betrieben wird;
    • – Anwenden einer Wear-Levelling-Routine;
    • – Veranlassen, dass die Einheit nicht weiter betrieben wird;
    • – Einleiten von Maßnahmen zum Verhindern des Datenverlustes in der Einheit;
    • – Modifizieren eines oder mehrerer in dem Decodierungsprozess verwendeter Parameter und Fortsetzen des Decodierungsprozesses mit den neuen Parametern
    gehören.
  • Die vorstehende Liste ist weder vollständig, noch müssen alle der verschiedenen Aktivitäten zur gleichen Zeit in der Einheit angeboten werden.
  • Spezielle Beispiele von Aktivitäten, die gemäß der durchschnittlichen Anzahl von Iterationen eingeleitet werden, vorzugsweise wenn die durchschnittliche Anzahl einen Schwellenwert übersteigt, können die folgenden sein:
    In Bezug auf einen Wear-Levelling-Schwellenwert, der von der durchschnittlichen Anzahl überschritten wird, können die Wear-Levelling-Prozesse zum Ausgleichen der Abnutzungsverteilung über mehrere Blöcke einschließlich des betreffenden Blockes gestartet werden. Zeigen beispielsweise die durchschnittliche Anzahl von Iterationen und der entsprechende Wear-Levelling-Schwellenwert einen relativ hohen Grad an Abnutzung in dem vorliegenden Block an, kann veranlasst werden, dass jegliche neuen Daten, die ankommen, auf andere Blöcke geschrieben werden, die ein geringeres Maß an Abnutzung aufweisen. Dies kann auch als ein Modus im Betrieb verstanden werden, wenn, beispielsweise ausgelöst durch Übersteigen des Schwellenwertes, zukünftig nur noch Leseoperationen auf dem vorliegenden Block jedoch keine Schreib- oder Löschoperationen zugelassen sind.
  • Das Ändern des Betriebsmodus als Ergebnis des Überwachens der durchschnittlichen Anzahl von Iterationen kann z. B. das Lesen von Daten, das Schreiben von Daten, Löschoperationen, Kodierungs- und/oder Decodierungsoperationen, Garbage Collection (Automatische Speicherbereinigung), weitere administrative Aufgaben usw. beeinflussen. Zusammenfassend ausgedrückt sollte jeder beliebige aktuelle betriebsrelevante Prozess, der angesichts der identifizierten Abnutzung verlassen und/oder der geändert wird, als Änderung des Betriebsmodus gelten.
  • Übersteigt beispielsweise die durchschnittliche Anzahl von Iterationen einen Stopp-Schwellenwert, der einen sehr hohen Abnutzungsgrad anzeigt, können alle Operationen an dem vorliegenden Block angehalten werden, z. B. nachdem eine Sicherungsroutine zum Verhindern des Verlustes gültiger Daten von dem vorliegenden Block angewendet wird, und der Block wird nicht weiter verwendet.
  • In einer bevorzugten Ausführungsform können einige der vorstehend beschriebenen Aktivitäten nacheinander oder gleichzeitig ausgelöst werden; Schwellenwerte für unterschiedliche Aktivitäten können hinsichtlich ihres Wertes variieren.
  • Gemäß dem bevorzugten Verfahren in 1 wird der Block, für den die durchschnittliche Anzahl von Iterationen den Schwellenwert übersteigt, als nicht länger brauchbar und/oder als unzuverlässig markiert. In solch einem Fall oder in Schritt 14 kann jegliche Operation an dem vorliegenden Block angehalten werden.
  • Wenn andere Aktivitäten als das Anhalten von Operationen die bevorzugte Wahl sind, wie z. B. Modifizieren von Decodierungsparametern, kann der Decodierungsprozess in Schritt 10 fortgesetzt werden, siehe die gepunktete Linie, und ein neuer Zyklus aus Leseoperationen einschließlich dem dazugehörigen Decodieren wird abgehalten, um in Schritt 11 eine neue durchschnittliche Anzahl von Iterationen zu ermitteln, nun jedoch mit modifizierten angewendeten Decodierungsparametern.
  • Der Ablaufplan von 1 veranschaulicht, dass sich mit zunehmender Abnutzung eines Blocks die Zellenleistung verschlechtert und dann mehr Iterationen für ein erfolgreiches Decodieren erforderlich sind. Übersteigt die durchschnittliche Anzahl von Iterationen, die für ein erfolgreiches Decodieren erforderlich sind, einen Schwellenwert, der relativ zur normalen Operation in einer Anfangsphase eingestellt werden kann, in der die Zellen nicht abgenutzt sind, kann der Block als unzuverlässig erklärt werden und wird nicht weiter verwendet.
  • 2 veranschaulicht einen Ablaufplan gemäß einer weiteren Ausführungsform der vorliegenden Erfindung, bei der erneut die Anzahl von Iterationen überwacht wird, die von einem weichen Decodierungsalgorithmus benötigt werden, um seine Ausgabe auf eine Leseanforderung hin zu erzeugen.
  • Auf der Blockebene – ein Block kann die Einheit einer Flash-Speichereinheit sein, auf die das vorliegende Verfahren angewendet wird – wird die Operation in Schritt 20 gestartet, und es werden verschiedene Zähler <k>, <r> und <i> auf null gesetzt, siehe Schritt 21 für alle. Es wird ein vorgegebenes Fenster der Größe „w” eingeführt, das „w” als aufeinanderfolgende Lesevorgänge in dem Block erachtet. Dies kann über den Zähler <r> in einem Pro-Block-Register implementiert werden, das bei jeder Leseoperation in dem Block erhöht und in Schritt 21 zurückgesetzt wird, wenn „r” in Schritt 24 „w” erreicht. Bei dem Zurücksetzen wird der Zähler <k>, der den Index des Fensters „w” darstellt, in dem Pro-Block-Register erhöht. Der weitere Zähler <i> ist in dem Pro-Block-Register implementiert, das in Schritt 23 gemäß der Anzahl an Iterationen „m” erhöht wird, die erforderlich sind, um die Ausgabe nach einer Leseoperation in dem Block in Schritt 22 zu erzeugen. In diesem Sinne akkumuliert der Zähler <i> die Anzahl von Iterationen, die in dem Decodierungsprozess erforderlich sind, um die verschiedenen Leseoperationen zu unterstützen. Dieser Zähler <i> wird zurückgesetzt, wenn „r” „w” erreicht, siehe Schritt 21. Vor dem Zurücksetzen kann der Wert des Zählers <i> an einem weiteren Zählerort <i_previous> in dem Pro-Block-Register gespeichert werden, was in dem Ablaufplan von 2 nicht dargestellt ist. Auf diese Weise liest das erste „w” von dem ersten Fenster, bezeichnet als w_1, das anschließende „w” liest von dem zweiten Fenster, bezeichnet als w_2, und so weiter. Demzufolge enthält das Fenster w_k die Sequenz (k – 1)·w + 1, (k – 1)·w + 2, ..., k·w von w aufeinanderfolgenden Lesevorgängen. Nachdem „r” „w” erreicht hat, wird in Schritt 25 die durchschnittliche Anzahl von erforderlichen Iterationen n_k basierend auf dem Vorstehenden auf die folgende Weise berechnet:
    Durchschnittliche Anzahl von Iterationen n_k in Fenster w_k: n_k = i/w.
  • Nun wird solch eine durchschnittliche Anzahl von Iterationen n_k durch Vergleichen mit einem Schwellenwert „thres” in Schritt 26 überwacht. Sollte die durchschnittliche Anzahl n_k über dem Schwellenwert „thres” liegen (Ja), wird der Prozess in Schritt 27 angehalten, und der Block wird in der vorliegenden Ausführungsform als unbrauchbar markiert. Wenn dies angemessen erscheint, können auch andere Aktivitäten in Kombination mit Schritt 27 eingeleitet werden.
  • Sollte die durchschnittliche Anzahl n_k in Schritt 26 unter dem Schwellenwert „thres” liegen, startet der Prozess erneut in Schritt 21 für ein neues Fenster k + 1 an „w” Lesevorgängen, für die die durchschnittliche Anzahl von Iterationen in Schritt 25 ermittelt und in Schritt 26 überwacht wird.
  • Optional dazu kann, in Kombination mit dem Ermitteln der durchschnittlichen Anzahl von Iterationen n_k, eine Veränderungshäufigkeit bei der durchschnittlichen Anzahl von Iterationen auf die folgende Weise berechnet werden:
    Durchschnittliche Anzahl von Iterationen in Fenster w_(k – 1): n_(k – 1) = i_previous/w.
    Änderung der durchschnittlichen Anzahl von Iterationen d_k in Fenster w_k: d_k = n_k – n_(k – 1).
  • Die Sequenz d_k kann zum Schätzen der Änderungshäufigkeit bei der Abnutzung in der Einheit verwendet werden. Darüber hinaus können, wenn d_k einen vorgegebenen Schwellenwert übersteigt, geeignete Maßnahmen getroffen werden.
  • Das Problem der Datenspeicherung kann auch gemäß einer weiteren Ausführungsform in Angriff genommen werden. Datenspeicherung bezieht sich auf den maximalen Zeitraum, während dem Daten ausgelesen werden können, möglicherweise mit korrigierbaren Fehlern. Es sei daran erinnert, dass ein Leseproblem aufgrund von Datenkorruption und nicht aufgrund von Abnutzung auftreten kann, jedoch aufgrund des langen Zeitraums, in dem die Daten gespeichert worden sind, ohne aktualisiert zu werden. Insbesondere enthält in Bezug auf das vorstehend beschriebene Verfahren ein typisches Fenster w Leseoperationen mit Informationen über die Anzahl von Iterationen, die für das Decodieren durchgeführt worden sind, jedoch ohne Zeitangabe. Um das Datenretention von Abnutzung zu unterscheiden, kann ein zusätzlicher Zähler zum Anzeigen des Alters des entsprechenden Fensters, d. h. für wie lange das Fenster aktiv ist, bereitgestellt werden. Sollte das Alter des Fensters einen Speicherungsschwellenwert übersteigen und die durchschnittliche Anzahl von Iterationen diesen zugewiesenen Schwellenwert übersteigen, kann davon ausgegangen werden, dass ein möglicher Verlust von Daten in solch einem Block möglicherweise nicht von Abnutzung sondern von Datenretention herrührt. Als Ergebnis des Überwachens, für wie lange das Fenster aktiv ist, können weitere oder zusätzliche Maßnahmen durchgeführt werden, beispielsweise Verlagern der gültigen Daten des Blockes in dem Fall, in dem das Alter des Fensters einen Speicherungsschwellenwert übersteigt.
  • Der Ansatz in seiner in 2 veranschaulichten Form kann auch für das Erfassen, wenn eine ganze Speichereinheit abgenutzt ist, ausgeweitet werden. Eine mögliche Implementierung wird nachstehend beschrieben und bildet einen ähnlichen Fall zum Ermitteln der durchschnittlichen Anzahl von Iterationen auf der Blockebene, jedoch nun übertragen auf die Einheitenebene, wo die Zähler zum Zählen der Iterationen eines jeden Leseprozesses in der Einheit implementiert sind. Dementsprechend werden die Anzahlen der Iterationen auf der Einheitenebene mittels Zählern pro Einheit gezählt. Insbesondere wird ein Fenster der Größe W eingeführt, für das W aufeinanderfolgende Lesevorgänge in der Einheit sind. Dies kann durch einen Zähler <R> in dem Pro-Einheit-Register implementiert werden, das bei jeder Leseoperation in der Einheit erhöht und dann zurückgesetzt wird, wenn „R” „W” erreicht. Beim Zurücksetzen wird ein weiterer Zähler <K>, der den Index des Fensters darstellt, in dem Pro-Einheit-Register erhöht. Es wird ein weiterer Zähler <I> in dem Pro-Einheit-Register implementiert, der gemäß der Anzahl von Iterationen erhöht wird, die zum Erzeugen der Ausgabe bei einer Leseoperation in einem beliebigen Block erforderlich sind. Dieser Zähler <I> wird zurückgesetzt, wenn „R” „W” erreicht. Bevor dieser zurückgesetzt wird, kann der Wert des Zählers <I> an einem anderen Zählerort <I_previous> in dem Pro-Einheit-Register gespeichert werden. Auf diese Weise werden die ersten W Lesevorgänge von dem ersten Fenster als W_1, bezeichnet, die anschließenden W Lesevorgänge von dem zweiten Fenster werden als W_2 bezeichnet und so weiter. Demzufolge enthält Fenster W_K die Sequenz (K – 1)·W + 1, (K – 1)·W + 2, ..., K·W von W aufeinanderfolgenden Lesevorgängen. Die durchschnittliche Anzahl von Iterationen, die erforderlich sind, und ihre Änderungshäufigkeit werden basierend auf dem Vorstehenden wie folgt berechnet:
    Durchschnittliche Anzahl von Iterationen N_K in W_K: N_K = I/W.
    Durchschnittliche Anzahl von Iterationen in W_(K – 1): N_(K – 1) = I_previous/W.
    Änderung der Durchschnittlichen Anzahl von Iterationen D_K in W_K: D_K = N_K – N_(K – 1).
  • Das Ermitteln der durchschnittlichen Anzahl von Iterationen auf der Einheitenebene kann zusätzlich zu einem Ermitteln auf der Blockebene oder anstatt dessen durchgeführt werden. Beim Beobachten der Abnutzung auf der Einheitenebene können jegliche Aktivitäten, die eingeleitet werden, weil die durchschnittliche Anzahl von Iterationen auf der Einheitenebene einen Schwellenwert übersteigt, einheitenspezifisch sein, z. B. Markieren der Einheit als abgenutzt und/oder Verhindern, dass irgendwelche weiteren Schreib- und/oder Löschoperationen auf die Einheit angewendet werden.
  • In einer weiteren Ausführungsform kann das Ermitteln der durchschnittlichen Anzahl von Iterationen an jedem Block der Einheit durchgeführt werden. Darüber hinaus kann zum Ermitteln der durchschnittlichen Anzahl von Iterationen auf der Einheitenebene die durchschnittliche Anzahl von Iterationen, die für alle Blöcke ermittelt wurde, akkumuliert werden. In einer Ausführungsform können Operationen an jedem einzelnen Block angehalten oder abgewandelt werden, wenn die durchschnittliche Anzahl von Iterationen für den speziellen Block den Schwellenwert übersteigt, und Operationen an der gesamten Einheit können angehalten oder abgewandelt werden, wenn die akkumulierte Anzahl von Iterationen einen Schwellenwert übersteigt, wobei der Schwellenwert auf denselben Wert wie der Schwellenwert der Blockebene oder auf einen anderen Wert, insbesondere auf einen niedrigeren Wert gesetzt werden kann. Operationen an der Einheit als Ganzes können auch dann angehalten werden, wenn die Anzahl von Blöcken, die als unbrauchbar erklärt werden, einen Schwellenwert übersteigt.
  • Eine typische Momentaufnahme des Inhaltes eines Pro-Block-Registers und eines Pro-Einheit-Registers ist in der Tabelle von 3 für eine beispielhafte Block-ID und eine beispielhafte Einheiten-ID dargestellt. Die beispielhaften Zählerwerte werden für die Zähler k, r, i, K, R, I angezeigt, die den Zählern entsprechen, die in Bezug auf 2 vorgestellt wurden.
  • 4 veranschaulicht einen weiter gefassten Kontext des vorliegenden Verfahrens mittels eines 3D-Schaubildes, bei dem eine unbearbeitete Bitfehlerrate auf der x-Achse, Latenz/Iterationen auf der y-Achse und eine Benutzer-Bitfehlerrate auf der z-Achse dargestellt sind. Die unbearbeitete Bitfehlerrate charakterisiert die Bitfehlerrate in den in dem Speicher gespeicherten Daten, d. h. die Bitfehlerrate, die gespeicherte Codewörter aufweisen würden, wenn keine Fehlerkorrektur angewendet werden würde. Weil ein Fehlerkorrekturcode angewendet wird, kann die Bitfehlerrate mittels des Fehlerkorrekturcodes verbessert werden, und die Benutzer-Bitfehlerrate bezeichnet die Bitfehlerrate, die immer noch nach dem Decodieren der mittels Fehlerkorrektur kodierten Daten übrig ist. Weil ein Code verwendet wird, der von einem iterativen Decodierungsansatz Gebrauch macht, kann/können die Latenz/Iterationen entweder die Dauer, die für ein erfolgreiches Decodieren eines Codewortes benötigt wird, oder die Anzahl von Iterationen bezeichnen, die für ein erfolgreiches Decodieren eines Codewortes erforderlich sind. Hierbei ist zu beachten, dass in dem vorliegenden Schaubild die Anzahl von Iterationen die Anzahl bezeichnet, die zum Decodieren eines einzelnen Codewortes erforderlich ist und nicht die durchschnittliche Anzahl, die über mehrere Decodierungsvorgänge ermittelt wird.
  • In Anbetracht der Tatsache, dass in dem vorliegenden Beispiel die Solid-State-Speichereinheit eine Flash-Speichereinheit ist, macht eine Ausführungsform des vorgeschlagenen Verfahrens Gebrauch von Abtastwerten eines aus einer Zelle in der Flash-Speichereinheit ausgelesenen analogen Signals V(T), d. h. der Spannung im Verlauf der Zeit. Mit zunehmender Abnutzung im jeweiligen Block steigt auch die unbearbeitete Bitfehlerrate, d. h. die Fehlerrate an, die vor der Fehlerkorrektur auf einzelne Symbolentscheidungen anzuwenden ist, was zu einer Erhöhung der Anzahl von Iterationen führt, die für das Decodieren erforderlich sind. Um eine begrenzte Latenz aufrechtzuerhalten, so dass die Einheit selbst dann weiter betrieben werden kann, wenn ein Codesymbol nicht erfolgreich decodiert werden kann, wird vorzugsweise die Anzahl an Iterationen beschränkt, die für das Decodieren eines Codewortes durchgeführt werden. Dementsprechend steigt für eine gegebene Latenz oder die maximal zulässige Anzahl an Iterationen für eine erhöhte Abnutzung die Benutzer-Bitfehlerrate, weil die unbearbeitete Bitfehlerrate zunimmt. Hierbei ist zu beachten, dass, wenn die unbearbeitete Bitfehlerrate zunimmt, eine spezielle Benutzer-Bitfehlerrate zu Lasten einer erhöhten Anzahl von Iterationen und demzufolge einer Decodierungslatenz aufrechterhalten werden kann. Gegen Ende der Lebensdauer der Einheit liegt die Anzahl an Iterationen zum erfolgreichen Decodieren eines Codewortes nahe der maximal zulässigen Anzahl an Iterationen. Zu diesem Zeitpunkt, d. h. beispielsweise wenn die durchschnittliche Anzahl von Iterationen einen ersten Schwellenwert übersteigt, wobei der erste Schwellenwert niedriger ist als die maximal zulässige Anzahl von Iterationen, kann die maximal zulässige Anzahl von Iterationen auf einen höheren Wert eingestellt werden und auf diese Weise ausnahmsweise zum Aufrechterhalten der Zuverlässigkeit, d. h. zum Aufrechterhalten einer speziellen Benutzer-Bitfehlerrate erhöht werden. In einem zweiten Schritt kann, wenn die durchschnittliche Anzahl von Iterationen einen zweiten Schwellenwert übersteigt, der vorzugsweise den ersten Schwellenwert übersteigt, der Block oder die Einheit markiert werden und dadurch als unzuverlässig und nicht weiter brauchbar erklärt werden. Wird der zweite Schwellenwert auf einen Wert eingestellt, der der anfänglichen maximal zulässigen Anzahl von Iterationen entspricht, kann ein Block als unzuverlässig erklärt werden, wenn eine Ziel-Benutzer-Bitfehlerrate innerhalb der maximal zulässigen Anzahl von Decoderiterationen im Durchschnitt nicht erreicht werden kann.
  • In dem Schaubild von 4 erhöht sich im Verlauf der Lebensdauer der Einheit die Abnutzung des betreffenden Blockes, was beispielsweise zu einem Anstieg der unbearbeiteten Bitfehlerrate von RB1 auf RB2 führt. Sollte eine Anzahl von Iterationen, die zum erfolgreichen Decodieren eines Codewortes mit der unbearbeiteten Bitfehlerrate von RB1 erforderlich ist, auf IT1 begrenzt sein, wird anhand des Schaubildes offensichtlich, dass sich die Benutzer-Bitfehlerrate UB1, die zu RB1 und IT1 gehört, bei der es sich um ein Maß für die Bitfehler handelt, die trotz des Fehlerkorrekturcodes nicht korrigierbar sind, auf UB2 erhöht. Weist jedoch die maximal zulässige Anzahl von Iterationen ITM einen höheren Wert als IT1 auf, besteht die Chance, dass die Benutzer-Bitfehlerrate UB1 beibehalten werden kann, die möglicherweise eine Ziel-Benutzer-Bitfehlerrate ist, welche für den Betrieb der Einheit durch Ausführen einer Anzahl von Iterationen spezifiziert wird, die IT1 übersteigt, jedoch kleiner als ITM bleibt. Sollte die durchschnittliche Anzahl von Iterationen einen Schwellenwert übersteigen, darf die maximale Anzahl von Iterationen ausnahmsweise auf IT2 eingestellt werden, die ITM übersteigt, um zu gestatten, dass die Ziel-Benutzer-Bitfehlerrate bei UB1 verbleibt, wenigstens für unbearbeitete Fehlerraten kleiner als RB3. Mit anderen Worten bedeutet dies, dass es möglich ist, verschiedene Kompromisse zwischen Block-Lebensdauer und Decodierungslatenz zu finden, wie dies qualitativ in 4 dargestellt ist.
  • 5 zeigt ein Blockschaubild einer Speichereinheit gemäß einer Ausführungsform der vorliegenden Erfindung. Die Speichereinheit 1 weist einen Solid-State-Speicher 2 eines Flash-Typs mit einer Block-/Seitenspeicherplatzstruktur auf. Einige der Blöcke werden als 21 angezeigt. Ein Speicher-Controller 3 steuert die Aktivitäten des Flash-Speichers 2 – als solcher kann der Speicher als computerisierter Speicher beschrieben werden. Der Speicher-Controller 3 kann auch als Datenspeicher-Controller (storage controller) bezeichnet werden. Der Speicher-Controller 3 ist insbesondere zum Schreiben von Daten auf und Lesen von Daten von dem Speicher 2 einschließlich Kodieren und Decodieren eingerichtet, sowie zum Ausführen aller administrativen Aufgaben im Zusammenhang mit dem Lesen und Schreiben von Daten. Der Speicher-Controller 3 ist darüber hinaus mit einem Host 4 verbunden, der zum Speichern von Daten von der Speichereinheit 1 Gebrauch macht. Dementsprechend gibt der Host 4 Lese- und/oder Schreibbefehle an die Speichereinheit 1 aus.
  • Um das Verfahren gemäß irgendeiner der Ausführungsformen in ihrer vorstehend beschriebenen Form zu implementieren, stellt der Speicher-Controller 3 vorzugsweise einen Computerprogrammcode bereit, der vorzugsweise in einem nichtflüchtigen, nicht wiederbeschreibbaren Speichermedium wie beispielsweise einem Nur-Lese-Speicher (ROM) 31, siehe 6, gespeichert ist. Der Speicher-Controller stellt des Weiteren einen Arbeitsspeicher (RAM) 32 zum Laden des Programmcodes in den RAM, und eine Verarbeitungseinheit 33 zum Ausführen des Programmcodes in dem RAM 32 bereit. Die Verarbeitungseinheit 33 weist Funktionseinheiten wie einen weichen Decoder 331 für weiches Decodieren gemäß dem beschriebenen Verfahren, eine Datenverarbeitungseinheit 332 zum Ermitteln einer durchschnittlichen Anzahl von Iterationen, die in dem Decodierungsprozess mehrerer Lesebefehle benötigt werden, und eine Überwachungseinheit 333 auf, in der beispielsweise die durchschnittliche Anzahl von Iterationen mit einem Schwellenwert verglichen wird. Die vorliegende Verarbeitungseinheit 33 weist einen einzelnen weichen Decoder auf, der mit zu decodierenden Codewörtern von einer Warteschlange 334 gespeist wird. Darüber hinaus sind interne Kommunikationssysteme 34 für eine Kommunikation zwischen den Komponenten des Speicher-Controllers 3 und eine Schnittstelle 35 zur Kommunikation mit dem Flash-Speicher bereitgestellt, während eine weitere Schnittstelle 36 für eine beliebige Kommunikation mit dem Host bereitgestellt werden kann.
  • In einer bevorzugten Ausführungsform werden LDPC-Codes als Fehlerkorrekturcodes implementiert, und zum Datenabruf wird iteratives weiches Decodieren in dem weichen Decoder 331 durchgeführt. Ein kritischer Parameter ist die Latenz, die mit dem Decodierungsprozess assoziiert wird. Es wird die durchschnittliche Anzahl von Iterationen für das Decodieren von in einem Block gespeicherten Codewörtern überwacht. Für akzeptable Abnutzungsgrade wird erwartet, dass die Antwort innerhalb von 20 Iterationen für Codewortlängen von bis zu 5000 Bits bereitgestellt wird. Unter der Annahme, dass jede Iteration in 1 μs durchgeführt wird, würde die Antwortzeit höchstens bei 20 μs liegen, was für einen angemessenen SSD-Betrieb innerhalb der akzeptablen Grenzen liegt. Alternativ zu dem vorstehenden Hardware-Aufbau des weichen Decoders 331 mit nur einer Logik für iteratives Decodieren plus einer Warteschlange zum Speichern aufeinanderfolgender Leseanfragen, bei welchem Aufbau die Implementierungskomplexität zu Lasten einer größeren Latenz reduziert ist, kann es einen Aufbau geben, bei dem das iterative Decodieren durch Replizieren der Logik implementiert wird, die zum Decodieren von n Codewörtern auf ein Mal benötigt wird, so dass Leseanfragen parallel verarbeitet werden können, was zu einer niedrigen Latenz führt.
  • Schließlich veranschaulicht 7 einen Teil eines Flash-Speichers, der in Blöcken 21 organisiert ist, von denen einige Blöcke 131 bis 138 explizit dargestellt sind. Seiten werden als horizontale Streifen in einer Spalte, wie in dem Block veranschaulicht, dargestellt. All die Blöcke 131 bis 138 sind Datenblöcke, die zum Halten von Benutzerdaten eingerichtet sind. In dem vorliegenden Beispiel wird angenommen, dass von Block 133 ermittelt wird, dass er Abnutzung oberhalb eines akzeptablen Schwellenwertes aufweist. Als Ergebnis, und wie dies durch einen Pfeil 60 in 7 dargestellt ist, werden die gültigen Seiten des Blockes auf einen weiteren Block, d. h. Block 135 in dem vorliegenden Beispiel kopiert, wobei der Block aktuell das Schreiben von neuen oder aktualisierten Daten unterstützt. Nach dem Speichern solcher Daten wird der Block 133 als nicht weiter in Verwendung markiert.
  • Wie den Fachleuten ersichtlich ist, können Aspekte der vorliegenden Erfindung als System, Verfahren oder Computerprogrammprodukt ausgebildet sein. Dementsprechend können Aspekte der vorliegenden Erfindung, insbesondere in Form des Controllers, als eine vollständige Hardware-Ausführungsform, eine vollständige Software-Ausführungsform (einschließlich Firmware, residenter Software, Mikrocode usw.) ausgebildet sein oder als eine Ausführungsform, die Software- und Hardwareaspekte kombiniert, die allesamt im Allgemeinen hierin als „Schaltung”, „Modul” oder „System” bezeichnet werden können. Des Weiteren können Aspekte der vorliegenden Erfindung, so wie die Lese- und Schreibverfahren, als ein Computerprogrammprodukt ausgebildet sein, das in einem oder mehreren computerlesbaren Medium oder Medien mit darin enthaltenem computerlesbarem Programmcode ausgebildet ist.
  • Es kann jede beliebige Kombination aus einem oder mehreren computerlesbaren Medium oder Medien verwendet werden. Das computerlesbare Medium kann ein computerlesbares Signalmedium oder ein computerlesbares Speichermedium sein. Ein computerlesbares Speichermedium kann zum Beispiel, ohne jedoch darauf beschränkt zu sein, ein elektronisches, magnetisches, optisches, elektromagnetisches, Infrarot- oder Halbleitersystem, solche Vorrichtung oder Einheit oder jede beliebige geeignete Kombination der vorstehend Genannten sein. Konkretere Beispiele (eine ergänzbare Liste) des computerlesbaren Speichermediums würden die Folgenden umfassen: eine elektrische Verbindung mit einer oder mehr Leitungen, eine tragbare Computerdiskette, eine Festplatte, einen Arbeitsspeicher (RAM), einen Nur-Lese-Speicher (ROM), einen elektronisch löschbaren programmierbaren Nur-Lese-Speicher (EPROM oder Flash-Memory), einen Lichtwellenleiter, einen tragbaren CD-Nur-Lesespeicher (CD-ROM), eine optische Speichereinheit, eine magnetische Speichereinheit oder jede beliebige Kombination der vorstehend Genannten. Im Kontext dieses Dokumentes kann ein computerlesbares Speichermedium jegliches materielle Medium sein, das ein Programm zur Verwendung durch ein oder im Zusammenhang mit einem Befehlsausführungssystem, einer solchen Vorrichtung oder Einheit enthalten oder speichern kann.
  • Ein computerlesbares Signalmedium kann ein weitergegebenes Datensignal mit einem darin enthaltenen, computerlesbaren Programmcode, beispielsweise in einem Basisband oder als Teil einer Trägerwelle sein. Solch ein weitergegebenes Signal kann jede beliebige einer Reihe verschiedener Formen, einschließlich jedoch nicht beschränkt auf elektromagnetische, optische oder jede beliebige geeignete Kombination daraus umfassen. Ein computerlesbares Signalmedium kann jegliches computerlesbare Medium sein, das kein computerlesbares Speichermedium ist und das ein Programm zur Verwendung durch oder im Zusammenhang mit einem Befehlsausführungssystem, solcher Vorrichtung oder Einheit übertragen, weitergeben oder senden kann.
  • Ein in einem computerlesbaren Medium enthaltener Programmcode kann unter Verwendung eines jeden beliebigen geeigneten Mediums, einschließlich jedoch nicht beschränkt auf drahtlos, drahtgebunden, Lichtwellenleiter, HF usw. oder einer jeden beliebigen geeigneten Kombination der vorstehend Genannten gesendet werden.
  • Der Computerprogrammcode zum Ausführen von Operationen für Aspekte der vorliegenden Erfindung kann in jeder beliebigen Kombination aus einer oder mehreren Programmiersprachen, unter anderem einer objektorientierten Programmiersprache wie beispielsweise Java, Smalltalk, C++ oder Ähnlichen und herkömmlichen prozeduralen Programmiersprachen wie beispielsweise die ”C”-Programmiersprache oder ähnlichen Programmiersprachen, geschrieben werden. Der Programmcode kann gänzlich auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als ein eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem fernen Computer oder gänzlich auf dem fernen Computer oder Server ausgeführt werden. In dem letzten Szenario kann der ferne Computer über jede beliebige Art von Netzwerk, unter anderem ein lokales Netz (LAN) oder ein Weitverkehrsnetz (WAN), mit dem Computer des Benutzers verbunden sein, oder die Verbindung kann zu einem externen Computer (beispielsweise über das Internet unter Verwendung eines Internet-Service-Providers) hergestellt werden.
  • Aspekte der vorliegenden Erfindung sind im Folgenden in Bezug auf die Ablaufplan-Veranschaulichungen und/oder Blockschaltbilder der Verfahren, Vorrichtung (Systeme) und Computerprogrammprodukte gemäß Ausführungsformen der Erfindung beschrieben. Es ist offensichtlich, dass jeder Block der Ablaufplan-Veranschaulichungen und/oder Blockschaltbilder sowie Kombinationen aus Blöcken in den Ablaufplan-Veranschaulichungen und/oder Blockschaltbildern von Computerprogrammanweisungen implementiert werden können. Diese Computerprogrammanweisungen können einem Prozessor eines Universal-Computers, Spezial-Computers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung zur Herstellung einer Maschine bereitgestellt werden, und zwar so, dass mit den Anweisungen, die über den Prozessor des Computers oder andere Datenverarbeitungsvorrichtungen ausgeführt werden, Mittel zur Implementierung der in dem Ablaufplan und/oder dem Block oder den Blöcken der Blockschaltbilder spezifizierten Funktionen/Schritte geschaffen werden.
  • Diese Computerprogrammanweisungen können auch in einem computerlesbaren Medium gespeichert werden und leiten einen Computer, andere programmierbare Datenverarbeitungsvorrichtungen oder andere Einheiten an, auf eine bestimmte Weise zu funktionieren, so dass die in dem computerlesbaren Medium gespeicherten Anweisungen einen Herstellungsartikel produzieren, der Anweisungen enthält, mit denen die/der in dem Ablaufplan und/oder dem Block oder den Blöcken der Blockschaltbilder spezifizierte Funktion/Schritt implementiert wird.
  • Die Computerprogrammanweisungen können auch auf einen Computer, andere programmierbare Datenverarbeitungsvorrichtungen oder andere Einheiten geladen werden, um eine Reihe von Arbeitsschritten zu veranlassen, die auf dem Computer, anderen programmierbaren Datenverarbeitungsvorrichtungen oder Einheiten auszuführen sind, um ein computerimplementiertes Verfahren so zu schaffen, dass die Anweisungen, die auf dem Computer oder anderen programmierbaren Vorrichtungen ausgeführt werden, Prozesse zum Implementieren der in dem Ablaufplan und/oder dem Block oder den Blöcken des Blockschaltbildes spezifizierten Funktionen/Schritte bereitstellen.
  • Die Ablaufpläne und Blockschaltbilder in den Figuren veranschaulichen die Architektur, Funktionalität und Betriebsweise möglicher Implementierungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedener Ausführungsformen der vorliegenden Erfindung. In dieser Hinsicht kann jeder Block in den Ablaufplänen oder Blockschaltbildern ein Modul, Segment oder Codeabschnitt darstellen, das oder der eine oder mehrere Anweisungen zum Implementieren der spezifizierten logischen Funktion(en) aufweist. Es sollte darüber hinaus beachtet werden, dass in einigen alternativen Implementierungen die in dem Block vermerkten Funktionen in einer anderen als in der in den Figuren dargestellten Reihenfolge auftreten können. So können beispielsweise zwei Blöcke, die nacheinander dargestellt sind, im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal auch in umgekehrter Reihenfolge je nach der beteiligten Funktion ausgeführt werden. Es ist darüber hinaus ersichtlich, dass jeder Block und Kombinationen von Blöcken in den Veranschaulichungen der Blockschaltbilder und/oder Ablaufpläne durch spezielle auf Hardware beruhende Systeme implementiert werden können, die die spezifizierten Funktionen oder Schritte oder Kombinationen von speziellen Hardware- und Computeranweisungen ausführen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • WO 2007/084751 A2 [0005]
    • US 2009/0024905 A1 [0006]

Claims (16)

  1. Verfahren zum Steuern einer Solid-State-Speichereinheit, aufweisend die Schritte des – Decodierens von in einer Einheit der Speichereinheit (1) gespeicherten Codewörtern mittels eines iterativen Fehlerkorrektur-Decodierungsprozesses, – Ermittelns einer durchschnittlichen Anzahl von Iterationen (n_k), die für ein erfolgreiches Decodieren von Codewörtern der Einheit erforderlich sind, und – Überwachens der durchschnittlichen Anzahl von Iterationen (n_k).
  2. Verfahren nach Anspruch 1, wobei gemäß der durchschnittlichen Anzahl von Iterationen (n_k) wenigstens eine der folgenden Aktivitäten ausgelöst wird: – Modifizieren eines Modus, in dem die Einheit betrieben wird; – Anwenden einer Wear-Levelling-Routine; – kein weiteres Betreiben der Einheit; – Verhindern von Datenverlust in Bezug auf die Einheit; – Modifizieren eines oder mehrerer in dem Decodierungsprozess verwendeter Parameter und Fortsetzen des Decodierungsprozesses mit den modifizierten Parametern.
  3. Verfahren nach Anspruch 1 oder 2, – wobei der Schritt des Überwachens der durchschnittlichen Anzahl von Iterationen (n_k) ein Vergleichen der durchschnittlichen Anzahl von Iterationen mit einem Schwellenwert aufweist, und – wobei wenigstens eine Aktivität ausgelöst wird, wenn die durchschnittliche Anzahl von Iterationen (n_k) den Schwellenwert übersteigt.
  4. Verfahren nach Anspruch 3, wobei die Einheit markiert wird, wenn die durchschnittliche Anzahl von Iterationen (n_k) den Schwellenwert übersteigt.
  5. Verfahren nach Anspruch 3, – wobei eine maximale Latenz oder eine maximale Anzahl von Iterationen (ITM) definiert wird, wonach spätestens der Decodierungsprozess zum Decodieren eines Codewortes beendet wird, und – wobei jeweils die maximale Latenz oder die maximale Anzahl von Iterationen (ITM) erhöht wird, wenn die durchschnittliche Anzahl von Iterationen (n_k) den Schwellenwert übersteigt.
  6. Verfahren nach einem beliebigen der vorstehenden Ansprüche, – wobei eine maximale Benutzer-Bitfehlerrate definiert wird, wobei die Benutzer-Bitfehlerrate die Fehlerbitrate von Codewörtern ist, nachdem der iterative Fehlerkorrektur-Decodierungsprozess angewendet worden ist, – und wobei die maximale Benutzer-Bitfehlerrate erhöht wird, wenn die durchschnittliche Anzahl von Iterationen erhöht wird.
  7. Verfahren nach einem beliebigen der vorstehenden Ansprüche, wobei in dem Decodierungsprozess eine Anzahl von Quantisierungsebenen in Iterationen zum Ermitteln einer A-posteriori-Wahrscheinlichkeit eines binären Wertes eines Codesymbols angewendet wird, der durch einen in einer Zelle der Speichereinheit gespeicherten physikalischen Wert dargestellt wird, dessen Anzahl von Quantisierungsebenen die Anzahl von pro Zelle verfügbaren Codesymbolen übersteigt.
  8. Verfahren nach einem beliebigen der vorstehenden Ansprüche, wobei die durchschnittliche Anzahl von Iterationen (n_k) einer Einheit ermittelt wird, indem die Anzahl von Iterationen, die zum erfolgreichen Decodieren von Codewörtern einer Einheit für eine vorgegebene Anzahl von Lesevorgängen (w) von der Einheit erforderlich sind, akkumuliert werden und die akkumulierte Anzahl von Iterationen durch die vorgegebene Anzahl von Lesevorgängen (w) dividiert wird.
  9. Verfahren nach Anspruch 8, wobei die Zeit überwacht wird, die für die vorgegebene Anzahl von Lesevorgängen (w) benötigt wird.
  10. Verfahren nach einem beliebigen der vorstehenden Ansprüche, – wobei die Speichereinheit mehrere Einheiten aufweist, – wobei die durchschnittliche Anzahl von Iterationen (n_k) für jede Einheit bestimmt wird, und – wobei eine durchschnittliche Anzahl von Iterationen (n_k) für die Einheit ermittelt wird, indem die durchschnittliche Anzahl von Iterationen (n_k) einer jeden der Einheiten akkumuliert und die akkumulierte durchschnittliche Anzahl durch die Anzahl der Einheiten dividiert wird.
  11. Verfahren nach einem beliebigen der vorstehenden Ansprüche, wobei die Einheit eine einzelne Einheit (single unit) aufweist.
  12. Computerprogrammprodukt, aufweisend ein computerlesbares Medium mit einem darin enthaltenen computerlesbaren Programmcode, wobei der computerlesbare Programmcode einen computerlesbaren Programmcode aufweist, der so konfiguriert ist, dass er ein Verfahren nach einem beliebigen der vorstehenden Ansprüche 1 bis 11 durchführt.
  13. Speicher-Controller zum Steuern einer Solid-State-Speichereinheit, aufweisend – einen Decoder (331) zum Decodieren von in einer Einheit der Speichereinheit (1) gespeicherten Codewörtern mittels eines iterativen Fehlerkorrektur-Decodierungsprozesses, – eine Datenverarbeitungseinheit (332) zum Ermitteln einer durchschnittlichen Anzahl von Iterationen (n_k), die zum erfolgreichen Decodieren von Codewörtern der Einheit erforderlich sind, und – eine Überwachungseinheit (333) zum Überwachen der durchschnittlichen Anzahl von Iterationen (n_k).
  14. Speicher-Controller nach Anspruch 13, wobei der Decoder (331) mehrere Decodiereinheit zum parallelen Decodieren mehrerer in der Einheit der Speichereinheit (1) gespeicherter Codewörter aufweist, jeweils mittels eines iterativen Fehlerkorrektur-Decodierungsprozesses.
  15. Speicher-Controller nach Anspruch 13, – wobei der Decoder (331) eine einzelne Decodiereinheit zum Decodieren eines in der Einheit der Speichereinheit (1) gespeicherten Codewortes mittels eines iterativen Fehlerkorrektur-Decodierungsprozesses aufweist, und – wobei eine Warteschlange (334) zum Speichern von aufeinanderfolgenden Codewörtern, die von dem Decoder (331) decodiert werden sollen, bereitgestellt wird.
  16. Speichereinheit, aufweisend einen Solid-State-Speicher und einen Speicher-Controller nach einem beliebigen der Ansprüche 13 bis 15 zum Steuern des Solid-State-Speichers.
DE112011103295.1T 2010-09-29 2011-09-22 Decodieren in Solid-State-Speichereinheiten Active DE112011103295B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP10181705 2010-09-29
EP10181705.4 2010-09-29
PCT/IB2011/054164 WO2012042444A1 (en) 2010-09-29 2011-09-22 Decoding in solid state memory devices

Publications (2)

Publication Number Publication Date
DE112011103295T5 true DE112011103295T5 (de) 2013-07-18
DE112011103295B4 DE112011103295B4 (de) 2023-12-07

Family

ID=44789562

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112011103295.1T Active DE112011103295B4 (de) 2010-09-29 2011-09-22 Decodieren in Solid-State-Speichereinheiten

Country Status (6)

Country Link
US (1) US9176814B2 (de)
JP (1) JP5846589B2 (de)
CN (1) CN103119563B (de)
DE (1) DE112011103295B4 (de)
GB (1) GB2498298B (de)
WO (1) WO2012042444A1 (de)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8832506B2 (en) * 2012-01-20 2014-09-09 International Business Machines Corporation Bit error rate based wear leveling for solid state drive memory
US8947941B2 (en) * 2012-02-09 2015-02-03 Densbits Technologies Ltd. State responsive operations relating to flash memory cells
US20130262942A1 (en) * 2012-03-27 2013-10-03 Yung-Chiang Chu Flash memory lifetime evaluation method
US9021333B1 (en) 2012-05-22 2015-04-28 Pmc-Sierra, Inc. Systems and methods for recovering data from failed portions of a flash drive
US9183085B1 (en) * 2012-05-22 2015-11-10 Pmc-Sierra, Inc. Systems and methods for adaptively selecting from among a plurality of error correction coding schemes in a flash drive for robustness and low latency
US9021336B1 (en) 2012-05-22 2015-04-28 Pmc-Sierra, Inc. Systems and methods for redundantly storing error correction codes in a flash drive with secondary parity information spread out across each page of a group of pages
US8996957B1 (en) 2012-05-22 2015-03-31 Pmc-Sierra, Inc. Systems and methods for initializing regions of a flash drive having diverse error correction coding (ECC) schemes
US8972824B1 (en) 2012-05-22 2015-03-03 Pmc-Sierra, Inc. Systems and methods for transparently varying error correction code strength in a flash drive
US9176812B1 (en) 2012-05-22 2015-11-03 Pmc-Sierra, Inc. Systems and methods for storing data in page stripes of a flash drive
US8793556B1 (en) 2012-05-22 2014-07-29 Pmc-Sierra, Inc. Systems and methods for reclaiming flash blocks of a flash drive
US9047214B1 (en) 2012-05-22 2015-06-02 Pmc-Sierra, Inc. System and method for tolerating a failed page in a flash device
US8788910B1 (en) 2012-05-22 2014-07-22 Pmc-Sierra, Inc. Systems and methods for low latency, high reliability error correction in a flash drive
US9021337B1 (en) 2012-05-22 2015-04-28 Pmc-Sierra, Inc. Systems and methods for adaptively selecting among different error correction coding schemes in a flash drive
US9041428B2 (en) 2013-01-15 2015-05-26 International Business Machines Corporation Placement of storage cells on an integrated circuit
US20140201599A1 (en) * 2013-01-15 2014-07-17 International Business Machines Corporation Error protection for integrated circuits in an insensitive direction
US9021328B2 (en) 2013-01-15 2015-04-28 International Business Machines Corporation Shared error protection for register banks
US9201727B2 (en) 2013-01-15 2015-12-01 International Business Machines Corporation Error protection for a data bus
US9043683B2 (en) 2013-01-23 2015-05-26 International Business Machines Corporation Error protection for integrated circuits
US9081701B1 (en) 2013-03-15 2015-07-14 Pmc-Sierra, Inc. Systems and methods for decoding data for solid-state memory
US9009565B1 (en) 2013-03-15 2015-04-14 Pmc-Sierra, Inc. Systems and methods for mapping for solid-state memory
US9053012B1 (en) 2013-03-15 2015-06-09 Pmc-Sierra, Inc. Systems and methods for storing data for solid-state memory
US9026867B1 (en) 2013-03-15 2015-05-05 Pmc-Sierra, Inc. Systems and methods for adapting to changing characteristics of multi-level cells in solid-state memory
US9208018B1 (en) 2013-03-15 2015-12-08 Pmc-Sierra, Inc. Systems and methods for reclaiming memory for solid-state memory
US9424179B2 (en) 2013-10-17 2016-08-23 Seagate Technology Llc Systems and methods for latency based data recycling in a solid state memory system
JP6430740B2 (ja) * 2013-11-05 2018-11-28 エルエスアイ コーポレーション ソリッドステートメモリシステムにおけるレイテンシーベースのデータ再利用のシステム及び方法
KR102110767B1 (ko) 2013-12-24 2020-06-09 삼성전자 주식회사 메모리 컨트롤러 구동방법 및 메모리 컨트롤러
US20150244397A1 (en) * 2014-02-26 2015-08-27 Metanoia Communications Inc. Method Of Efficient FEC Decoder Scheduling And Receiver Pipeline Flow Control And Apparatus Using The Same
TWI550628B (zh) * 2014-07-16 2016-09-21 群聯電子股份有限公司 解碼方法、記憶體儲存裝置及記憶體控制電路單元
US10230401B2 (en) 2015-03-10 2019-03-12 Toshiba Memory Corporation Memory controller for a non-volatile memory, memory system and method
US9727416B2 (en) * 2015-07-01 2017-08-08 Xilinx, Inc. Variable code rate solid-state drive
US10075191B2 (en) * 2016-03-21 2018-09-11 Nandext Srl Method for decoding bits-by varying LLR values in a solid-state drive, and solid-state drive implementing the method
KR101893064B1 (ko) * 2017-02-02 2018-08-30 한밭대학교 산학협력단 Ldpc 복호 반복 횟수 기록 및 모니터링을 통한 웨어-레벨링 신뢰도 향상 시스템 및 방법
KR101871682B1 (ko) * 2017-02-02 2018-06-28 한밭대학교 산학협력단 페이지 단위의 ldpc 복호 반복 횟수 기록 및 마모도 모니터링을 통한 신뢰도 높은 웨어-레벨링 수행방법
JP2018147231A (ja) 2017-03-06 2018-09-20 東芝メモリ株式会社 メモリコントローラ、メモリシステムおよびメモリシステムの制御方法
US10289330B2 (en) * 2017-03-30 2019-05-14 Western Digital Technologies, Inc. Allocating shared memory among multiple tasks in a multiprocessor environment
JP6454397B1 (ja) 2017-12-20 2019-01-16 Nttエレクトロニクス株式会社 誤り訂正装置、誤り訂正方法及び光通信システム
CN111049619A (zh) * 2018-10-12 2020-04-21 瑞昱半导体股份有限公司 解码装置及解码方法
US11082071B2 (en) 2019-06-24 2021-08-03 SK Hynix Inc. Quality of service (QoS) aware data storage decoder
CN111611101B (zh) * 2020-04-22 2023-09-29 珠海妙存科技有限公司 调整闪存读取数据吞吐率的方法及装置
US11929761B1 (en) 2022-10-07 2024-03-12 Seagate Technology Llc Low latency decoder

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007084751A2 (en) 2006-01-20 2007-07-26 Marvell World Trade Ltd. Flash memory with coding and signal processing
US20090024905A1 (en) 2006-05-12 2009-01-22 Anobit Technologies Ltd. Combined distortion estimation and error correction coding for memory devices

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10107649A (ja) * 1996-09-30 1998-04-24 Sanyo Electric Co Ltd 符号誤り訂正/検出デコーダ
US20010052104A1 (en) * 2000-04-20 2001-12-13 Motorola, Inc. Iteration terminating using quality index criteria of turbo codes
US20030101406A1 (en) * 2001-10-12 2003-05-29 Leilei Song Low complexity and low power FEC supporting high speed parallel decoding of syndrome-based FEC codes
US7210077B2 (en) * 2004-01-29 2007-04-24 Hewlett-Packard Development Company, L.P. System and method for configuring a solid-state storage device with error correction coding
US7392458B2 (en) * 2004-11-19 2008-06-24 International Business Machines Corporation Method and system for enhanced error identification with disk array parity checking
US7533328B2 (en) * 2006-07-04 2009-05-12 Sandisk Il, Ltd. Method of error correction in a multi-bit-per-cell flash memory
US7877564B2 (en) * 2006-08-05 2011-01-25 Benhov Gmbh, Llc Memory configuration and method for calibrating read/write data based on performance characteristics of the memory configuration
US7805663B2 (en) * 2006-09-28 2010-09-28 Sandisk Corporation Methods of adapting operation of nonvolatile memory
TWI360126B (en) * 2006-09-28 2012-03-11 Sandisk Corp Nonvolatile memory with adaptive operations and me
JP5177991B2 (ja) * 2006-10-25 2013-04-10 株式会社東芝 不揮発性半導体記憶装置
JP4925301B2 (ja) * 2007-02-07 2012-04-25 株式会社メガチップス 半導体メモリシステム
EP2223431A4 (de) * 2008-08-15 2010-09-01 Lsi Corp Dekodierung von nahe codewörter in einem ram speicher
US8234556B2 (en) * 2008-12-30 2012-07-31 Intel Corporation Broadcast receiver and method for optimizing a scale factor for a log-likelihood mapper
US20100174845A1 (en) * 2009-01-05 2010-07-08 Sergey Anatolievich Gorobets Wear Leveling for Non-Volatile Memories: Maintenance of Experience Count and Passive Techniques
US8301987B2 (en) * 2009-10-29 2012-10-30 Sandisk Il Ltd. System and method of decoding data with reduced power consumption
US8335949B2 (en) * 2009-11-06 2012-12-18 Trellisware Technologies, Inc. Tunable early-stopping for decoders

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007084751A2 (en) 2006-01-20 2007-07-26 Marvell World Trade Ltd. Flash memory with coding and signal processing
US20090024905A1 (en) 2006-05-12 2009-01-22 Anobit Technologies Ltd. Combined distortion estimation and error correction coding for memory devices

Also Published As

Publication number Publication date
GB201306562D0 (en) 2013-05-22
JP2013546039A (ja) 2013-12-26
CN103119563A (zh) 2013-05-22
GB2498298A (en) 2013-07-10
JP5846589B2 (ja) 2016-01-20
WO2012042444A1 (en) 2012-04-05
DE112011103295B4 (de) 2023-12-07
US20130179754A1 (en) 2013-07-11
US9176814B2 (en) 2015-11-03
CN103119563B (zh) 2016-03-23
GB2498298B (en) 2017-03-22

Similar Documents

Publication Publication Date Title
DE112011103295B4 (de) Decodieren in Solid-State-Speichereinheiten
DE112014004761B4 (de) Beeinflussung des Wear-Leveling in Speichersystemen
DE112011100371B4 (de) Verfahren, Vorrichtung und Computerprogrammprodukt zum Decodieren eines Codeworts
DE102017001433B4 (de) Systeme und Verfahren für adaptive Lesepegelanpassung
DE112014004778B4 (de) Vorrichtung und Verfahren zum Verwalten von Chipgruppen
DE112010004656B4 (de) Blockinterner Ausgleich für nachlassende Funktionsfähigkeit von Speichern
DE112012006153B4 (de) Rekonstruktion von Codewörtern unter Verwendung eines Seitenkanals
DE102016003366B4 (de) Lesepegelgruppierung für erhöhte flash-leistung
DE102008003113B4 (de) ECC-Steuereinheit, Speichersystem und Verfahren zur Korrektur eines Fehlers
DE60303895T2 (de) Hybridimplementierung von Fehlerkorrekturkoden eines nichtflüchtigen Speichersystems
DE112014002870B4 (de) Kombinations-Fehler- und Löschdecodierung für Produktcodes
DE112010004863T5 (de) Datenverwaltung in Festkörperspeichersystemen
DE112012000385T5 (de) Korrigieren von Auslöschungen in Speicher-Arrays
DE112014001305B4 (de) Auswahl einer redundanten Datenspeicherkonfiguration auf der Grundlage verfügbaren Speicherplatzes
DE112011102160T5 (de) Wear-levelling bei Zellen/Seiten/Teilseiten/Blöcken eines Speichers
DE112020006139T5 (de) Vor-lese-und lese-schwellenspannungsoptimierung
DE112015000378T5 (de) Selektives Rückkopieren für einen auf einem Chipplättchen gepufferten nichtflüchtigen Speicher
DE102007016460A1 (de) Nichtflüchtiges Speicherbauelement, nichtflüchtiges Speichersystem und Leseverfahren für ein nichtflüchtiges Speicherbauelement
DE112014005570T5 (de) Deaktivieren von Seiten in einem Nand-Flash-Speicher-System
DE102017001420A1 (de) Redundanz von fehlerkorrekturcodierten daten in einem speichersystem
DE112010003645T5 (de) Festkörper-Speichersystem mit Parallelem Zugriff aus Mehreren Flash/PCM-Einrichtungen
DE102010037290A1 (de) Speichersysteme und Verfahren zur Erfassung einer Verteilung von instabilen Speicherzellen
DE112019000167T5 (de) Anpassbare Lesewiederholungsreihenfolge basierend auf einem Decodierungserfolgstrend
DE112020005502T5 (de) Dynamische überprovisionierungszuweisung für zweckbestimmte blöcke
DE112018000485T5 (de) Komprimierer/Dekomprimierer für nicht binäre Kontextmischung

Legal Events

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

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

Representative=s name: LIFETECH IP SPIES & BEHRNDT PATENTANWAELTE PAR, DE

Representative=s name: LIFETECH IP SPIES DANNER & PARTNER PATENTANWAE, DE

Representative=s name: SPIES DANNER & PARTNER PATENTANWAELTE PARTNERS, DE

R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

Representative=s name: LIFETECH IP SPIES & BEHRNDT PATENTANWAELTE PAR, DE

Representative=s name: LIFETECH IP SPIES DANNER & PARTNER PATENTANWAE, DE

R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

Representative=s name: LIFETECH IP SPIES & BEHRNDT PATENTANWAELTE PAR, DE

R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

R016 Response to examination communication
R018 Grant decision by examination section/examining division
R084 Declaration of willingness to licence