-
QUERVERWEIS AUF VERWANDTE ANMELDUNGEN
-
Die vorliegende Anmeldung beansprucht die Priorität der vorläufigen US-Patentanmeldung Nr.
63/249,556 , eingereicht am 28. September 2021, deren Inhalt in ihrer Gesamtheit durch Bezugnahme hierin aufgenommen wird.
-
HINTERGRUND DER ERFINDUNG
-
Fehlerkorrekturlösungen unterliegen Error-Floors („Fehlerböden“), bei denen weitere Reduzierungen der Eingangsfehlerrate nicht mehr zu einer signifikanten Erhöhung der Fehlerkorrekturleistung führen. Die Frame-Fehlerrate (Frame Error Rate, FER), bei der die tatsächliche Leistung für den bestimmten Dekodierprozess beginnt, von der theoretischen Leistung für den bestimmten Dekodierprozess signifikant abzuweichen, definiert die Error-Floor-Leistung. Die erwartete Leistung für den bestimmten Dekodierprozess wird manchmal als „Wasserfall“ für den Dekodierprozess bezeichnet und erstreckt sich unter dem Error-Floor.
-
Floor-Breaker-Verfahren, die in früheren Vorrichtungen verwendet werden, ändern in der Regel den Low-Density-Parity-Check-Dekodieralgorithmus (LDPC-Dekodieralgorithmus) selbst. Diese Verfahren beruhen jedoch auf der Wiederverwertung anspruchsvoller Blöcke durch einen Standard-LDPC-Dekodierer, der selbst keine Kapazität für den Umgang mit den Error-Floor-Bedingungen aufweist. Darüber hinaus sind FER und Error-Floor umgekehrt proportional, sodass eine Verbesserung eines dieser Faktoren zu einer Verschlechterung des anderen Faktors führt.
-
Die Natur der Error-Floors besteht darin, dass wenig Bitfehler in einem Vorwärts-Fehlerkorrektur-Block (forward error correction, FEC-Block) verbleiben, wenn sich die Leistungskurve (z. B. eine Kurve von Frame-Fehler vs. Bitfehlerrate (bit error rate, BER)) dem Error-Floor nähert, aber die Fehler derart lokalisiert sind, dass sie die Standard-LDPC-Algorithmen bei der Korrektur der fehlerhaften Bits unwirksam machen. Die Bedingungen, die diese Dekodierfehler in der Nähe der Leistungskurve, die sich dem Error-Floor annähert, erzeugen, werden allgemein als „Trapping-Einstellungen“ bezeichnet. Die Trapping-Einstellungen, die sich ergeben, wenn sich die Leistungskurve dem Error-Floor nähert, ruft Dekodierfehler hervor, selbst wenn die Anzahl der fehlschlagenden Prüfknoten in dem Block, der zu dekodieren scheiterte, sehr niedrig ist. Das Syndrom für einen Block, der scheitert zu dekodieren, gibt die Anzahl der fehlschlagenden Prüfknoten für diesen bestimmten Dekodiervorgang an. Somit erzeugen diese Trapping-Einstellungen Dekodierfehler, selbst wenn das Syndrom für den Block sehr niedrig ist (z. B. weniger als 20 fehlschlagende Prüfknoten).
-
Dementsprechend besteht ein Bedarf an einem Verfahren und einer Einrichtung, welche die Anzahl von Fehlern reduzieren, die sich aus den Trapping-Einstellungen ergeben, um die Leistungskurve unter dem Error-Floor für einen bestimmten LDPC-Dekodierprozess zu verlängern.
-
KURZDARSTELLUNG DER ERFINDUNG
-
Eine Dekodierschaltung für eine Speichersteuerung schließt einen Eingang, um Rohbitwerte eines FEC-Blocks zu empfangen; und einen LDPC-Dekodierer, der mit dem Eingang gekoppelt ist, ein. Der LDPC-Dekodierer führt einen fehlgeschlagenen Dekodiervorgang an den Rohbitwerten des FEC-Blocks durch und gibt ein Syndrom des fehlgeschlagenen Dekodiervorgangs und einen Fehlgeschlagenen-Dekodier-Ausgangsblock aus.
-
Die Dekodierschaltung schließt einen Trap-Erfassungs-Komparator, der mit dem LDPC-Dekodierer gekoppelt ist, und eine Trap-Steuerung ein, die mit dem Eingang des LDPC-Dekodierers und dem Trap-Erfassungs-Komparator gekoppelt ist. Der Trap-Erfassungs-Komparator bestimmt, ob der FEC-Block ein Trapped-Block ist, indem die Anzahl der fehlschlagenden Prüfknoten, die durch das Syndrom angezeigt werden, mit einem Fehlerschwellenwert verglichen wird. Der FEC-Block wird als ein Trapped-Block bestimmt, wenn die Anzahl der fehlschlagenden Prüfknoten, die durch das Syndrom angegeben werden, kleiner als der Fehlerschwellenwert ist. Wenn bestimmt wird, dass der FEC-Block ein Trapped-Block ist, führt die Trap-Steuerung Trapped-Block-Dekodieriterationen unter Verwendung des LDPC-Dekodierers durch, bis der Dekodiervorgang erfolgreich ist oder bis eine vorbestimmte Anzahl von Trapped-Block-Dekodieriterationen durchgeführt wurde. Bei jeder Trapped-Block-Dekodieriteration erzeugt die Trap-Steuerung eine aktualisierte Log-Wahrscheinlichkeitsverhältnis-Karte (log likelihood ratio, LLR-Karte); und stellt dem LDPC-Dekodierer die aktualisierte LLR-Karte und entweder die Rohbitwerte des FEC-Blocks oder eines Fehlgeschlagenen-Dekodier-Ausgangsblocks aus einem vorherigen fehlgeschlagenen Dekodiervorgang bereit; und sendet eine Angabe an den LDPC-Dekodierer, um einen Dekodiervorgang durchzuführen. Als Reaktion auf die Angabe verwendet der LDPC-Dekodierer die aktualisierte LLR-Karte, um einen Dekodiervorgang an den jeweiligen Bits der Rohbitwerte des FEC-Blocks oder des Fehlgeschlagenen-Dekodier-Ausgangsblocks aus dem vorherigen fehlgeschlagenen Dekodiervorgang durchzuführen. Wenn nicht bestimmt wird, dass der FEC-Block ein Trapped-Block ist, gibt die Dekodierschaltung eine Fehlerangabe an einem Ausgang der Dekodierschaltung aus. Wenn der Dekodiervorgang erfolgreich ist, um ein Codewort zu erzeugen, gibt die Dekodierschaltung das Codewort aus.
-
Es wird eine Speichersteuerung offenbart, die eine Dekodierschaltung aufweist, die einen Eingang, um Rohbitwerte eines FEC-Blocks zu empfangen; einen Blockpufferspeicher, der mit dem Eingang gekoppelt ist, um die empfangenen Rohbitwerte des FEC-Blocks zu speichern; einen LDPC-Dekodierer, der mit dem Blockpufferspeicher gekoppelt ist, einschließt. Der LDPC-Dekodierer besteht darin, einen fehlgeschlagenen Dekodiervorgang an den Rohbitwerten des FEC-Blocks durchzuführen und ein Syndrom des fehlgeschlagenen Dekodiervorgangs und einen Fehlgeschlagenen-Dekodier-Ausgangsblock auszugeben. Die Dekodierschaltung schließt einen Trap-Erfassungs-Komparator, der mit dem LDPC-Dekodierer gekoppelt ist, und eine Trap-Steuerung ein, die mit dem Blockpufferspeicher gekoppelt ist. Der Trap-Erfassungs-Komparator bestimmt, ob der FEC-Block ein Trapped-Block ist, indem die Anzahl der fehlschlagenden Prüfknoten, die durch das Syndrom angezeigt werden, mit einem Fehlerschwellenwert verglichen wird, wobei der FEC-Block als ein Trapped-Block bestimmt wird, wenn die Anzahl der fehlschlagenden Prüfknoten, die durch das Syndrom angegeben werden, kleiner als der Fehlerschwellenwert ist. Wenn bestimmt wird, dass der FEC-Block ein Trapped-Block ist, führt die Trap-Steuerung Trapped-Block-Dekodieriterationen unter Verwendung des LDPC-Dekodierers durch, bis der Dekodiervorgang erfolgreich ist oder bis eine vorbestimmte Anzahl von Trapped-Block-Dekodieriterationen durchgeführt wurde. Bei jeder Trapped-Block-Dekodieriteration erzeugt die Trap-Steuerung eine aktualisierte LLR-Karte; und stellt dem LDPC-Dekodierer die aktualisierte LLR-Karte und entweder die Rohbitwerte des FEC-Blocks oder einen Fehlgeschlagenen-Dekodier-Ausgangsblock aus einem vorherigen fehlgeschlagenen Dekodiervorgang bereit; und sendet eine Angabe an den LDPC-Dekodierer, um einen Dekodiervorgang durchzuführen. Als Reaktion auf die Angabe verwendet der LDPC-Dekodierer die aktualisierte LLR-Karte, um einen Dekodiervorgang an den jeweiligen Bits der Rohbitwerte des FEC-Blocks oder des Fehlgeschlagenen-Dekodier-Ausgangsblocks aus dem vorherigen fehlgeschlagenen Dekodiervorgang durchzuführen. Wenn nicht bestimmt wird, dass der FEC-Block ein Trapped-Block ist, gibt die Speichersteuerung eine Fehlermeldung aus. Wenn der Dekodiervorgang erfolgreich ist, um ein Codewort zu erzeugen, gibt die Speichersteuerung das Codewort aus.
-
Offenbart wird ein Festkörperlaufwerk (Solid State Drive, SSD), das eine Vielzahl von Flash-Speichervorrichtungen und eine Speichersteuerung, die mit der Vielzahl von Flash-Speichervorrichtungen gekoppelt ist, einschließt. Die Speichersteuerung weist eine Dekodierschaltung auf, die einen Eingang, um Rohbitwerte eines FEC-Blocks zu empfangen; einen Blockpufferspeicher, der mit dem Eingang gekoppelt ist, um die empfangenen Rohbitwerte des FEC-Blocks zu speichern; und einen LDPC-Dekodierer, der mit dem Blockpufferspeicher gekoppelt ist, einschließt. Der LDPC-Dekodierer führt einen fehlgeschlagenen Dekodiervorgang an den Rohbitwerten des FEC-Blocks durch und gibt ein Syndrom des fehlgeschlagenen Dekodiervorgangs und einen Fehlgeschlagenen-Dekodier-Ausgangsblock aus. Die Dekodierschaltung schließt einen Trap-Erfassungs-Komparator, der mit dem LDPC-Dekodierer gekoppelt ist, und eine Trap-Steuerung ein, die mit dem Blockpufferspeicher gekoppelt ist. Der Trap-Erfassungs-Komparator bestimmt, ob der FEC-Block ein Trapped-Block ist, indem die Anzahl der fehlschlagenden Prüfknoten, die durch das Syndrom angezeigt werden, mit einem Fehlerschwellenwert verglichen wird. Der FEC-Block wird als ein Trapped-Block bestimmt, wenn die Anzahl der fehlschlagenden Prüfknoten, die durch das Syndrom angegeben werden, kleiner als der Fehlerschwellenwert ist. Wenn bestimmt wird, dass der FEC-Block ein Trapped-Block ist, führt die Trap-Steuerung Trapped-Block-Dekodieriterationen unter Verwendung des LDPC-Dekodierers durch, bis der Dekodiervorgang erfolgreich ist oder bis eine vorbestimmte Anzahl von Trapped-Block-Dekodieriterationen durchgeführt wurde. Bei jeder Trapped-Block-Dekodieriteration erzeugt die Trap-Steuerung eine aktualisierte LLR-Karte; und stellt dem LDPC-Dekodierer die aktualisierte LLR-Karte und entweder die Rohbitwerte des FEC-Blocks oder einen Fehlgeschlagenen-Dekodier-Ausgangsblock aus einem vorherigen fehlgeschlagenen Dekodiervorgang bereit; und sendet eine Angabe an den LDPC-Dekodierer, um einen Dekodiervorgang durchzuführen. Als Reaktion auf die Angabe verwendet der LDPC-Dekodierer die aktualisierte LLR-Karte, um einen Dekodiervorgang an den jeweiligen Bits der Rohbitwerte des FEC-Blocks oder dem Fehlgeschlagenen-Dekodier-Ausgangsblock aus dem vorherigen fehlgeschlagenen Dekodiervorgang durchzuführen. Wenn nicht bestimmt wird, dass der FEC-Block ein Trapped-Block ist, gibt die Speichersteuerung eine Fehlermeldung aus. Wenn der Dekodiervorgang erfolgreich ist, um ein Codewort zu erzeugen, gibt die Speichersteuerung das Codewort aus.
-
Es wird ein Verfahren zum Dekodieren offenbart, das Folgendes einschließt: Durchführen eines ersten fehlgeschlagenen Dekodiervorgangs an Rohbitwerten eines FEC-Blocks durch einen LDPC-Dekodierer, der ein Syndrom des fehlgeschlagenen Dekodiervorgangs und einen Fehlgeschlagenen-Dekodier-Ausgangsblock ausgibt. Das Verfahren schließt das Bestimmen ein, ob der FEC-Block ein Trapped-Block ist, indem die Anzahl der fehlschlagenden Prüfknoten, die durch das Syndrom angegeben werden, mit einem Fehlerschwellenwert verglichen wird, wobei der FEC-Block als ein Trapped-Block bestimmt wird, wenn die Anzahl der fehlschlagenden Prüfknoten, die durch das Syndrom angegeben werden, kleiner als der Fehlerschwellenwert ist. Wenn nicht bestimmt wird, dass der FEC-Block ein Trapped-Block ist, wird eine Fehlerangabe ausgegeben. Wenn bestimmt wird, dass der FEC-Block ein Trapped-Block ist, schließt das Verfahren Folgendes ein: Erzeugen einer aktualisierten LLR-Karte; Bereitstellen, an den LDPC-Dekodierer, der aktualisierten LLR-Karte und entweder der Rohbitwerte des FEC-Blocks oder einen Fehlgeschlagenen-Dekodier-Ausgangsblock aus einem vorherigen fehlgeschlagenen Dekodiervorgang an dem Trapped-Block; Durchführen eines Dekodiervorgangs des LDPC-Dekodierers unter Verwendung der aktualisierten LLR-Karte auf den Bitwerten des FEC-Blocks oder dem Fehlgeschlagenen-Dekodier-Ausgangsblock aus dem vorherigen fehlgeschlagenen Dekodiervorgang an dem Trapped-Block; und Wiederholen des Erzeugens, des Bereitstellens und des Durchführens, bis der Dekodiervorgang erfolgreich ist oder bis eine vorbestimmte Anzahl von Trapped-Block-Dekodieriterationen durchgeführt wurde. Wenn der Dekodiervorgang erfolgreich beim Dekodieren des FEC-Blocks ist, wird das Codewort ausgegeben. Wenn der Dekodiervorgang beim Dekodieren des FEC-Blocks nicht erfolgreich ist und die vorbestimmte Anzahl von Trapped-Block-Dekodieriterationen durchgeführt wurde, wird eine Fehlerangabe ausgegeben.
-
Das Verfahren und die Einrichtung der vorliegenden Erfindung reduzieren die Anzahl von Fehlern, die sich aus den Trapping-Einstellungen ergeben, um die Leistungskurve unter dem herkömmlichen Error-Floor für den bestimmten LDPC-Dekodierprozess zu verlängern.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
Die beigefügten Zeichnungen sind eingeschlossen, um ein weiteres Verständnis der Erfindung bereitzustellen, und sind in diese Spezifikation einbezogen und Bestandteil davon. Die Zeichnungen veranschaulichen verschiedene Beispiele. Die in dieser kurzen Beschreibung genannten Zeichnungen sind nicht maßstabsgetreu gezeichnet.
- 1 ist ein Diagramm, das ein Beispiel einer Dekodierschaltung veranschaulicht, die einen Blockpufferspeicher einschließt.
- 2 ist ein Diagramm, das ein Beispiel einer Speichersteuerung zeigt, welche die in 1 gezeigte Dekodierschaltung einschließt.
- 3 ist ein Diagramm, das ein Beispiel einer SSD zeigt, welche die in 1 gezeigte Dekodierschaltung einschließt.
- 4 ist ein Diagramm, das ein Beispiel eines ersten fehlgeschlagenen Dekodierens veranschaulicht.
- 5 ist ein Diagramm, das ein Beispiel einer Trapped-Block-Dekodieriteration zeigt, bei der ein Dekodiervorgang an einem Fehlgeschlagenen-Dekodier-Ausgangsblock aus einer vorherigen Iteration durchgeführt wird.
- 6 ist ein Diagramm, das ein Beispiel einer Trapped-Block-Dekodieriteration zeigt, bei der ein Dekodiervorgang an Rohbitwerten eines FEC-Blocks durchgeführt wird.
- 7 ist ein Diagramm, das ein Beispiel einer ersten fehlgeschlagenen Dekodierung und N Trapped-Block-Dekodieriterationen veranschaulicht.
- 8A ist ein Diagramm, das ein Beispiel veranschaulicht, in dem schwache Bitwerte und stochastische Wahrscheinlichkeitswerte verwendet werden, um eine aktualisierte LLR-Karte zu erzeugen.
- 8B ist ein Diagramm, das ein Beispiel veranschaulicht, in dem schwache Bitwerte und stochastische Wahrscheinlichkeitswerte verwendet werden, um eine aktualisierte LLR-Karte zu erzeugen, und in dem eine prozentuale Variation verwendet wird, um die stochastischen Wahrscheinlichkeitswerte zu erzeugen.
- 8C ist ein Diagramm, das ein Beispiel veranschaulicht, in dem schwache Bitwerte und stochastische Wahrscheinlichkeitswerte verwendet werden, um eine aktualisierte LLR-Karte zu erzeugen, und in dem eine prozentuale Variation verwendet wird, um die stochastischen Wahrscheinlichkeitswerte zu erzeugen.
- 8D ist ein Diagramm, das eine Tabelle veranschaulicht, die ein Beispiel für das Erzeugen eines aktualisierten LLR angibt.
- 8E ist ein Diagramm, das ein Beispiel veranschaulicht, in dem aktualisierte LLR-Werte unter Verwendung von Eingabe erzeugt werden, die an der Dekodierschaltung und/oder der Speichersteuerung empfangen werden.
- 9A veranschaulicht ein Beispiel einer Dekodierschaltung, die keinen Blockpufferspeicher 5 einschließt.
- 9B ist ein Diagramm, das ein Beispiel einer Speichersteuerung zeigt, welche die in 9A gezeigte Dekodierschaltung einschließt.
- 9C ist ein Diagramm, das ein Beispiel einer SSD zeigt, welche die in 9A gezeigte Dekodierschaltung einschließt.
- 10 ist ein Diagramm, das ein Verfahren zum Dekodieren veranschaulicht, in dem Trapped-Blöcke identifiziert werden und Aktionen durchgeführt werden, um zu versuchen, die Trapped-Blöcke zu dekodieren.
- 11 ist ein Diagramm, das ein Beispiel einer ersten Trapped-Block-Dekodieriteration in dem Verfahren von 10 veranschaulicht, bei dem das Dekodieren an Rohbitwerten des FEC-Blocks durchgeführt wird.
- 12 ist ein Diagramm, das ein Beispiel einer Trapped-Block-Dekodieriteration in dem Verfahren von 10 veranschaulicht, bei dem das Dekodieren an einem Fehlgeschlagenen-Dekodier-Ausgangsblock aus dem vorherigen fehlgeschlagenen Dekodiervorgang an dem Trapped-Block durchgeführt wird.
- 13 ist ein Diagramm, das Blöcke veranschaulicht, die zusätzlich zu den in dem Verfahren von 10 gezeigten durchgeführt werden können.
- 14 ist ein Diagramm, das einen Frame-Fehler auf der vertikalen Achse und Bitfehlerrate auf der horizontalen Achse veranschaulicht, das eine Leistungskurve und einen Wasserfall für einen herkömmlichen LDPC-Dekodierer zeigt.
- 15 ist ein Diagramm, das einen Frame-Fehler auf der vertikalen Achse und Bitfehlerrate auf der horizontalen Achse veranschaulicht, das eine Leistungskurve für ein Beispiel des Verfahrens und der Einrichtung zeigt, die in 1-13 gezeigt sind.
-
AUSFÜHRLICHE BESCHREIBUNG
-
1 zeigt eine Dekodierschaltung 1, die einen Blockpufferspeicher 5, einen LDPC-Dekodierer 3, der mit dem Blockpufferspeicher 5 gekoppelt ist, einen Trap-Erfassungs-Komparator 4, der mit dem LDPC-Dekodierer 3 gekoppelt ist, und eine Trap-Steuerung 2 einschließt. Die Trap-Steuerung 2 ist gekoppelt, um den Pufferspeicher 5, den LDPC-Dekodierer 3 und den Trap-Erfassungs-Komparator 4 zu blockieren. Die Dekodierschaltung 1 schließt einen Eingang 14 ein, der im Folgenden als „Dekodierschaltungseingang“ 14 bezeichnet werden kann, der mit dem Blockpufferspeicher 5 und der Trap-Steuerung 2 gekoppelt. Der LDPC-Dekodierer 3 schließt einen Eingang 10 zum Empfangen eines FEC-Blocks aus dem Blockpufferspeicher 5, der im Folgenden als „FEC-Blockeingang“ 10 bezeichnet werden kann, einen Eingang 11, um eine LLR-Karte von der Trap-Steuerung 2 zu empfangen, die im Folgenden als „LLR-Karteneingang“ 11 bezeichnet werden kann, und einen Eingang 16, der als „Steuereingang“ 16 bezeichnet werden kann, der mit einem Ausgang der Trap-Steuerung 2 gekoppelt ist, ein. Der Begriff „LLR-Karte“, wie er in der vorliegenden Anmeldung verwendet wird, ist eine Tabelle oder eine andere Liste, die LLR-Werte angibt, die in einem bestimmten LDPC-Dekodiervorgang verwendet werden sollen. In diesem Beispiel schließt der LDPC-Dekodierer 3 einen Ausgang 12 zum Ausgeben eines dekodierten Blocks an die Trap-Steuerung 2, der im Folgenden als „dekodierter Blockausgang“ 12 bezeichnet werden kann, und einen Ausgang 13 für die Ausgabe eines Syndroms an den Trap-Erfassungs-Komparator 4, der im Folgenden als „Syndromausgang“ 13 bezeichnet werden kann, ein. Das Syndrom für einen FEC-Block, der scheitert, im LDPC-Dekodierer 3 zu dekodieren, gibt die Anzahl der fehlschlagenden Prüfknoten für den bestimmten Dekodiervorgang an. Obwohl zwei Eingänge 11, 16 gezeigt sind, um den LDPC-Dekodierer 3 mit der Trap-Steuerung 2 zu koppeln, versteht es sich, dass alternativ ein einzelner Eingang verwendet werden könnte, um den LDPC-Dekodierer 3 mit der Trap-Steuerung 2 zu koppeln. Die Trap-Steuerung 2 weist einen Ausgang 15 auf, der einen Ausgang der Dekodierschaltung bildet, der als „Dekodierschaltungsausgang“ 15 bezeichnet werden kann.
-
In einem Beispiel ist die Dekodierschaltung 1 als eine integrierte Schaltungsvorrichtung (integrated circuit, IC-Vorrichtung) implementiert, die auf einem oder mehreren Halbleiter-Dies ausgebildet ist, die eine anwendungsspezifische integrierte Schaltung (Application Specific Integrated Circuit, ASIC) oder eine programmierbare Logikvorrichtung (Programmable Logic Device, PLD) sein können, wie ein feldprogrammierbares Gate-Array (Field Programmable Gate Array, FPGA), ohne darauf beschränkt zu sein. In dem in 1 gezeigten Beispiel ist die Dekodierschaltung 1 zur Veranschaulichung als einen einzelnen Eingang 14 und einen einzelnen Ausgang 15 aufweisend gezeigt. In anderen Beispielen schließt die Dekodierschaltung 1 jedoch eine Vielzahl von Eingängen 14 und eine Vielzahl von Ausgängen 15 ein, die mit der Trap-Steuerung 2 gekoppelt oder mit anderen Komponenten der Dekodierschaltung 1 gekoppelt sein können.
-
In einem Beispiel, das in 2 veranschaulicht ist, ist die Dekodierschaltung 1 in einer Speichersteuerung 6 implementiert. In einem Beispiel ist die Speichersteuerung 6 als eine IC-Vorrichtung implementiert, die auf einem einzelnen Halbleiter-Die ausgebildet ist, der ein ASIC oder ein PLD wie ein FPGA sein kann, ohne darauf beschränkt zu sein. Die Speichersteuerung 6 schließt den lokalen Speicher 8 ein. In einem Beispiel ist der lokale Speicher 8 Register oder statische Direktzugriffsspeicherblöcke (Static Random-Access Memory, SRAM-Blöcke), auf die einzeln durch eine oder mehrere der Trap-Steuerung 2, LDPC-Dekodierer 3, Trap-Erfassungs-Komparator 4 oder andere Schaltungen der Speichersteuerung 6 oder Dekodierschaltung 1 zugegriffen werden können. Obwohl der lokale Speicher 8 als in der Speichersteuerung 6 befindlich veranschaulicht ist, können Abschnitte des lokalen Speichers 8 innerhalb eines oder mehrerer der Trap-Steuerung 2, des LDPC-Dekodierers 3, des Trap-Erfassungs-Komparators 4 und der Dekodierschaltung 1 angeordnet sein und können Register oder SRAM-Blöcke einschließen, die für jeweilige der Trap-Steuerung 2, LDPC-Dekodierer 3, Trap-Erfassungs-Komparator 4 und Dekodierschaltung 1 zugänglich sind. In dem in 2 gezeigten Beispiel ist die Speichersteuerung 6 als eine oder mehrere Eingänge 18 (Speichersteuereingang) und einen oder mehrere Ausgänge 19 (Speichersteuerausgang) aufweisend gezeigt. Der eine oder die mehreren Eingänge 18 und Ausgänge 19 sind durch die Schaltlogik der Speichersteuerung 6 mit dem jeweiligen Eingang (den jeweiligen Eingängen) 14 und dem jeweiligen Ausgang (den jeweiligen Ausgängen 15) der Dekodierschaltung 1 gekoppelt.
-
3 zeigt ein Beispiel, in dem die Dekodierschaltung 1 im Festkörperlaufwerk (Solid-State Drive, SSD) 9 implementiert ist. Die SSD 9 schließt Speichersteuerung 6 ein, die mit einer Vielzahl von Speichervorrichtungen 7 gekoppelt ist. Jede Speichervorrichtung 7 ist ein gepackter Halbleiter-Die oder „Chip“, der mit der Speichersteuerung 6 über Leiterbahnen 18a gekoppelt ist, die Anweisungen, Daten und andere Informationen zwischen jeder Flash-Speichervorrichtung 7 und Speichersteuerung 6 koppeln. In einem Beispiel sind die Speicherungsvorrichtungen 7 Flash-NOT-AND-Speichervorrichtungen (Flash-NAND-Speichervorrichtungen), die als einzelne gepackte IC-Vorrichtungen oder IC-Vorrichtungen implementiert sind, die in Multi-Chip-Modulen gepackt sind. In einem Beispiel schließt jede Flash-Speichervorrichtung 7 NAND-Speicherzellen ein, die in Blöcke und Seiten organisiert sind, wobei jeder Block aus NAND-Zeichenfolgen besteht, die die gleiche Gruppe von Wortleitungen gemeinsam nutzen. Die Speichervorrichtungen 7 können ohne Einschränkung Single-Level-Cell-Vorrichtungen (SLC-Vorrichtungen), Multi-Level-Cell-Vorrichtungen (MLC-Vorrichtungen), Triple-Level-Cell-Vorrichtungen (TLC-Vorrichtungen), Quad-Level-Cell-Vorrichtungen (QLC-Vorrichtungen) oder Penta-Level-Cell-Vorrichtungen (SPS-Vorrichtungen) sein. Die Speichervorrichtungen 7 können jede Art von Speicherungsvorrichtung sein.
-
In der folgenden Erörterung werden der Vorgang und die verschiedenen Komponenten der Dekodierschaltung 1 im Zusammenhang mit der Speichersteuerung 6 der SSD 9 von 3 erörtert. Es versteht sich jedoch, dass die Dekodierschaltung 1 als eine eigenständige Vorrichtung implementiert werden kann, wie in 1 veranschaulicht, oder in einer Speichersteuerung 6, die eine eigenständige Vorrichtung ist, wie in 2 veranschaulicht.
-
Die Speichersteuerung 6 empfängt Lese- und Schreibanweisungen von einem Host-Computer und führt Programmiervorgänge, Löschvorgänge und Lesevorgänge auf Speicherzellen der Speichervorrichtungen 7 durch, um die Anweisungen von dem Host-Computer auszuführen. Zum Beispiel erzeugt die Speichersteuerung 6 nach dem Empfangen einer Schreibanweisung von einem Host-Computer, der zu speichernde Daten einschließt, ein Codewort, das die empfangenen Daten einschließt, und kodiert das Codewort in einen FEC-Block, der zusammen mit einer entsprechenden Programmieranweisung an ein oder mehrere der Speichervorrichtungen 7 gesendet wird. Die Speichervorrichtungen 7 führen die angeforderte Programmieranweisung aus und speichern den FEC-Block durch Programmieren von Speicherzellen der jeweiligen Speichervorrichtung 7 (z. B. als logische Seite). Die Speichersteuerung 6 kann auch Zellen der Speichervorrichtungen 7 löschen. Nach dem Empfangen einer Leseanweisung von dem Host-Computer sendet die Speichersteuerung 6 eine Leseanweisung an eine oder mehrere der Speichervorrichtungen 7 und als Reaktion darauf, führen die eine oder die mehreren Speichervorrichtungen 7 das Lesen durch und koppeln das Ergebnis des Lesens in Form von Rohbitwerten eines FEC-Blocks mit der Speichersteuerung 6. Als Reaktion auf das Empfangen der Rohbitwerte des FEC-Blocks koppelt die Speichersteuerung 6 die Rohbitwerte des FEC-Blocks zum Dekodieren mit der Dekodierschaltung 1.
-
In einem Beispiel schließen einige oder alle der Trap-Steuerung 2, des LDPC-Dekodierers 3, des Trap-Erfassungs-Komparators 4, des Blockpufferspeichers 5 und der Steuerung 6 Schaltungen ein, die dedizierte Schaltungen zum Durchführen von Vorgängen sind. In einem anderen Beispiel schließen einige oder alle der Trap-Steuerung 2, des LDPC-Dekodierers 3, des Trap-Erfassungs-Komparators 4, des Blockpufferspeichers 5 und der Steuerung 6 eine Firmware ein, die Anweisungen einschließt, die an einem oder mehreren Prozessor durchgeführt werden, wobei die Anweisungen in Registern eines oder mehrerer der Speichersteuerung 6, der Trap-Steuerung 2, des LDPC-Dekodierers 3, des Trap-Erfassungs-Komparators 4 und/oder im lokalen Speicher 8 gespeichert sind. In einem Beispiel schließen einige der Speichersteuerung 6, der Trap-Steuerung 2, des LDPC-Dekodierers 3 und des Trap-Erfassungs-Komparators 4 einen Prozessor (nicht gezeigt) zum Durchführen von Anweisungen ein, und ein oder mehrere Firmware-Bilder werden vor dem Betrieb der Speichersteuerung 6 in die Speichersteuerung 6 geladen, wobei das Firmware-Bild Anweisungen einschließt, die von einem oder mehreren der Speichersteuerung 6, der Trap-Steuerung 2, des LDPC-Dekodierers 3 und des Trap-Erfassungs-Komparators 4 durchgeführt werden.
-
Obwohl Beispiele der vorliegenden Erfindung als „Firmware“ beschrieben sind, versteht es sich, dass Ausführungsformen der vorliegenden Erfindung Firmware einschließen können oder nicht. In einem Beispiel werden ein oder mehrere Softwareprogramme zum Durchführen einiger oder aller in der vorliegenden Anmeldung beschriebenen Verfahrensblöcke und Funktionen verwendet. In einem spezifischen Beispiel wird ein oder mehrere Softwarestapel in der Dekodierschaltung 1 und/oder Speichersteuerung 6 gespeichert, die auf einem oder mehreren Prozessor betreibbar ist, um einige oder alle der verschiedenen Funktionen und Verfahrensblöcke durchzuführen, die in der vorliegenden Anmeldung beschrieben sind.
-
In einem Beispiel wird ein Lesevorgang durchgeführt, bei dem die Steuerung 6 eine oder mehrere Speichervorrichtungen 7 liest und als Reaktion Rohbitwerte eines FEC-Blocks empfängt, die mit dem Dekodierschaltungseingang 14 gekoppelt sind. Die Rohbitwerte eines FEC-Blocks, die am Dekodierschaltungseingang 14 empfangen werden, werden mit dem Blockpufferspeicher 5 gekoppelt. Der Blockpufferspeicher 5 speichert die empfangenen Rohbitwerte eines FEC-Blocks. Der Blockpufferspeicher 5 kann Register oder SRAM-Blöcke sein, auf die einzeln durch LDPC-Dekodierer 3 zugegriffen werden kann, ohne darauf beschränkt zu sein.
-
Die Rohbitwerte des FEC-Blocks werden an dem FEC-Blockeingang 10 mit dem LDPC-Dekodierer 3 gekoppelt. Der LDPC-Dekodierer 3 führt einen Dekodiervorgang an den Rohbitwerten des FEC-Blocks durch und gibt ein Syndrom bei dem Syndromausgang 13 aus und erzeugt eine Ausgabe an dem dekodierten Blockausgang 12. Wenn die Dekodierung erfolgreich ist, ist die Ausgabe beim dekodierten Blockausgang 12 das gespeicherte Codewort. Wenn die Dekodierung nicht erfolgreich ist (d. h. ein fehlgeschlagener Dekodiervorgang), ist die Ausgabe bei dem dekodierten Blockausgang 12 ein Fehlgeschlagener-Dekodier-Ausgangsblock . Der Begriff „Fehlgeschlagener-Dekodier-Ausgangsblock", wie er hierin verwendet wird, ist eine Ausgabe von einem LDPC-Dekodierer aus einem fehlgeschlagenen Dekodiervorgang. Der Begriff „fehlgeschlagene Dekodierung“, wie er in der vorliegenden Anmeldung verwendet wird, ist ein Dekodiervorgang an einem FEC-Block, der beim Identifizieren des gespeicherten Codeworts, das dem FEC-Block entspricht (z. B. ein Dekodiervorgang, der nicht zu einem Syndrom von 0 führt), nicht erfolgreich ist.
-
Wenn der LDPC-Dekodierer 3 einen fehlgeschlagenen Dekodiervorgang an den Rohbitwerten des FEC-Blocks durchführt, gibt der LDPC-Dekodierer 3 ein Syndrom des fehlgeschlagenen Dekodiervorgangs bei dem Syndromausgang 13 und einen Fehlgeschlagenen-Dekodier-Ausgangsblock bei dem dekodierten Blockausgang 12 aus.
-
Wenn nicht bestimmt wird, dass der FEC-Block ein Trapped-Block ist, wird eine Fehlerangabe am Dekodierschaltungsausgang 15 von 1-3 ausgegeben, die zum Beispiel ein Fehlerflag sein kann. Als Reaktion auf die Fehlerangabe gibt Speichersteuerung 6 eine Fehlermeldung an dem Speichersteuerungsausgang 19 aus. In einem Beispiel ist der Dekodierschaltungsausgang 15 mit dem Speichersteuerungsausgang 19 gekoppelt und der Fehlerangabeausgang am Dekodierschaltungsausgang 15 ist mit dem Speichersteuerungsausgang 19 gekoppelt und wird dort ausgegeben. Als Reaktion auf die Fehlermeldung kann der Host-Computer dann einen RAID-Prozess durchführen, um das Codewort wiederherzustellen, oder ein Wiederherstellungsvorgang kann durch die Speichersteuerung 6 durchgeführt werden, in der zusätzliche Lesevorgänge und Soft-Dekodierungen durchgeführt werden.
-
4 veranschaulicht einen fehlgeschlagenen Dekodiervorgang, der im Folgenden als „erster fehlgeschlagener Dekodiervorgang“ bezeichnet werden kann. Der Begriff „erster fehlgeschlagener Dekodiervorgang“, wie er in der vorliegenden Anmeldung verwendet wird, bezieht sich auf das erste Mal, dass ein bestimmter FEC-Block scheitert erfolgreich zu dekodieren, wenn bestimmt wird, dass der bestimmte FEC-Block ein Trapped-Block ist (z. B. ein bestimmter FEC-Block, an dem ein Dekodiervorgang durchgeführt wurde, wobei der Ausgang des Dekodiervorgangs angab, dass der bestimmte Block ein Trapped-Block war). In dem in 4 gezeigten Beispiel werden Rohbitwerte eines FEC-Blocks 21 vom Blockpufferspeicher 5 am FEC-Blockeingang 10 empfangen, eine LLR-Karte 22 (die als „anfängliche LLR-Karte“ bezeichnet werden kann) wird durch die Trap-Steuerung 2 erzeugt und über den LLR-Karteneingang 11 mit dem LDPC-Dekodierer 3 gekoppelt. Der Begriff „LLR-Karte“, wie er in der vorliegenden Anmeldung verwendet wird, ist eine Angabe einer Vielzahl von LLR-Werten und kann in Form eines oder mehrerer Wörter oder einer Sequenz von Einsen und Nullen vorliegen, die jeweilige der Vielzahl von LLR-Werten angeben. In diesem Beispiel scheitert der LDPC-Dekodierer 3, den FEC-Block zu dekodieren, der Rohbitwerten des FEC-Blocks 21 entspricht, woraufhin der LDPC-Dekodierer 3 den Fehlgeschlagenen-Dekodier-Ausgangsblock 24 bei dem dekodierten Blockausgang 12 und ein Syndrom 45 bei dem Syndromausgang 13 erzeugt. In einem Beispiel ist der erste fehlgeschlagene Dekodiervorgang ein Soft-Dekodiervorgang, bei dem die anfängliche LLR-Karte 22 verwendet wird (z. B. ein 3-Bit-Soft-Dekodiervorgang, bei dem der Eingang für jede Bitposition eine 1 oder eine 0 und einen LLR-Wert einschließt). Alternativ kann der erste fehlgeschlagene Dekodiervorgang ein Hard-Dekodiervorgang sein. Wenn die erste fehlgeschlagene Dekodierung eine Hard-Dekodierung ist, wird keine anfängliche LLR-Karte erzeugt oder dem LDPC-Dekodierer 3 bereitgestellt.
-
Der Trap-Erfassungs-Komparator 4 bestimmt, ob der FEC-Block ein Trapped-Block ist, indem die Anzahl der fehlschlagenden Prüfknoten, die durch das Syndrom angezeigt werden, mit einen Fehlerschwellenwert verglichen wird. Der FEC-Block wird als ein Trapped-Block bestimmt, wenn die Anzahl der fehlschlagenden Prüfknoten, die durch das Syndrom angegeben werden, kleiner als der Fehlerschwellenwert ist. In einem Beispiel ist der Fehlerschwellenwert von der Trap-Steuerung 2 mit dem Trap-Erkennungs-Komparator 4 gekoppelt. Alternativ wird der Fehlerschwellenwert im lokalen Speicher 8 gespeichert, der für den Trap-Erkennungs-Komparator 4 zugänglich ist, oder in einem Abschnitt des lokalen Speichers 8 innerhalb des Trap-Erfassungs-Komparators 4 gespeichert. In einem Beispiel wird der Fehlerschwellenwert am Eingang 14, 18 empfangen, was es einem Benutzer der Speichersteuerung 6 ermöglicht, den Fehlerschwellenwert auf einen gewünschten Wert einzustellen. Alternativ wird ein Standardfehlerschwellenwert durch die Trap-Steuerung 2 eingestellt.
-
In dem in 4 gezeigten Beispiel hat das Syndrom 45 einen Wert von kleiner als der Fehlerschwellenwert und daher ist der FEC-Block 21 ein Trapped-Block. Wenn bestimmt wird, dass der FEC-Block eine Trapped-Block ist, führt die Dekodiererschaltung 1 Iterationen unter Verwendung des LDPC-Dekodierers 3 durch, bis der Dekodiervorgang erfolgreich ist oder bis eine vorbestimmte Anzahl von Dekodieriterationen durchgeführt wurde. Diese Iterationen werden im Folgenden als „Trapped-Block“-Dekodieriterationen bezeichnet. Der Begriff „Trapped-Block-Dekodieriteration“, wie in der vorliegenden Anmeldung verwendet, ist eine Iteration, die durchgeführt wird, um einen FEC-Block zu dekodieren, der als Trapped-Block bestimmt wurde. Bei jeder Trapped-Block-Dekodieriteration erzeugt die Trap-Steuerung 2 eine aktualisierte LLR-Karte; stellt dem LDPC-Dekodierer die aktualisierte LLR-Karte und entweder die Rohbitwerte des FEC-Blocks oder einen Fehlgeschlagenen-Dekodier-Ausgangsblock aus einem vorherigen fehlgeschlagenen Dekodiervorgang bereit und sendet eine Angabe an den LDPC-Dekodierer 3, um einen Dekodiervorgang durchzuführen. Als Reaktion auf die Angabe verwendet der LDPC-Dekodierer 3 die aktualisierte LLR-Karte, um einen Dekodiervorgang an den jeweiligen Bits der Rohbitwerte des FEC-Blocks oder dem Fehlgeschlagenen-Dekodier-Ausgangsblock aus dem vorherigen fehlgeschlagenen Dekodiervorgang durchzuführen. Wenn die maximale Anzahl von Trapped-Block-Dekodieriterationen erreicht ist und der LDPC-Dekodierer 3 scheiterte, den FEC-Block erfolgreich zu dekodieren, wird eine Fehlerangabe am Dekodierschaltungsausgang 15 von 1-3 ausgegeben, die zum Beispiel ein Fehlerflag sein kann. Als Reaktion auf die Fehlerangabe gibt Speichersteuerung 6 eine Fehlermeldung an dem Speichersteuerungsausgang 19 aus. Als Reaktion auf die Fehlermeldung kann der Host-Computer dann einen RAID-Prozess durchführen, um das Codewort wiederherzustellen.
-
Wenn der Dekodiervorgang erfolgreich ist, um ein Codewort zu erzeugen, gibt die Dekodierschaltung 1 das Codewort an dem Dekodierschaltungsausgang 15 aus. Als Reaktion auf die Ausgabe des Codeworts am Dekodierschaltungsausgang 15 gibt die Speichersteuerung 6 das Codewort an dem Speichersteuerungsausgang 19 aus.
-
5 veranschaulicht ein Beispiel einer Trapped-Block-Dekodieriteration. Der Begriff „Trapped-Block-Dekodieriteration“, wie hierin verwendet, bezieht sich auf eine Dekodieriteration an einem Block, der als ein Trapped-Block bestimmt wurde. Bei jeder Trapped-Block-Dekodieriteration erzeugt die Trap-Steuerung 2 eine aktualisierte LLR-Karte. In dem in 5 gezeigten Beispiel sind Rohbitwerte des FEC-Links 21 mit der Trap-Steuerung 2 über Verbindung 17 gekoppelt, welche die Trap-Steuerung 2 mit dem Blockpufferspeicher 5 koppelt, und die Trap-Steuerung 2 verwendet die empfangenen Rohbitwerte des FEC-Links 21, um eine aktualisierte LLR-Karte 30 zu erzeugen (die auch als die „erste aktualisierte LLR-Karte“ bezeichnet werden kann). Die Trap-Steuerung 2 stellt dem LDPC-Dekodierer 3 die aktualisierte LLR-Karte 30 und den Fehlgeschlagenen-Dekodier-Ausgangsblock aus einem vorherigen fehlgeschlagenen Dekodiervorgang 25 bereit; und sendet eine Angabe an die LDPC-Steuerung 3, um einen Dekodiervorgang über den Steuereingang 16 durchzuführen. In dem vorliegenden Beispiel koppelt die Trap-Steuerung 2 den Fehlgeschlagenen-Dekodier-Block aus einem vorherigen fehlgeschlagenen Dekodiervorgang 25 mit der LDPC-Steuerung 5 durch Speichern des Fehlgeschlagenen-Dekodier-Ausgangsblocks aus einem vorherigen fehlgeschlagenen Dekodiervorgang 25 im Blockpufferspeicher 5 (z. B. Überschreiben der zuvor gespeicherten Rohbitwerte des FEC-Links 21). Als Reaktion auf jede Angabe verwendet der LDPC-Dekodierer 3 die aktualisierte LLR-Karte 30, um einen Dekodiervorgang an dem Fehlgeschlagenen-Dekodier-Ausgangsblock aus einem vorherigen fehlgeschlagenen Dekodiervorgang 25 durchzuführen. In der ersten Trapped-Block-Dekodieriteration ist der Fehlgeschlagene-Dekodier-Ausgangsblock aus dem vorherigen fehlgeschlagenen Dekodiervorgang 25 der Fehlgeschlagene-Dekodier-Ausgangsblock 24 von 4. In dem Fall, dass die Dekodierung erfolgreich ist, wird das resultierende Codewort bei 12 ausgegeben und die Trap-Steuerung 2 gibt das Codewort am Dekodierschaltungsausgang 15 aus. Wenn die LDPC-Dekodierung nicht erfolgreich ist, fährt der iterative Prozess fort, bis der Dekodiervorgang erfolgreich ist oder bis eine vorbestimmte Anzahl von Trapped-Block-Dekodieriterationen durchgeführt wurde.
-
In einem Beispiel werden alle Trapped-Block-Dekodieriterationen unter Verwendung des Fehlgeschlagenen-Dekodier-Ausgangsblocks aus einem vorherigen fehlgeschlagenen Dekodiervorgang 25 durchgeführt. Alternativ können jedoch eine oder mehrere Trapped-Block-Dekodieriteration an den Rohbitwerten des FEC-Blocks 21 durchgeführt werden.
-
6 zeigt ein Beispiel einer Trapped-Block-Dekodieriteration, bei der der Dekodiervorgang an den Rohbitwerten des FEC-Blocks 21 durchgeführt wird. In diesem Beispiel werden die Rohbitwerte des FEC-Blocks 21, die im Blockpufferspeicher 5 im Beispiel von 4 gespeichert wurden, nicht geändert und werden erneut verwendet, um einen Dekodiervorgang durchzuführen. In diesem Beispiel werden die aktualisierte LLR-Karte 30 und die Rohbitwerte des FEC-Blocks 21, die im Blockpufferspeicher 5 gespeichert wurden, mit dem LDPC-Dekodierer 3 gekoppelt. Die Trap-Steuerung 2 sendet eine Angabe an die LDPC-Steuerung 3 (z. B. über den Steuereingang 16), um einen Dekodiervorgang durchzuführen. Als Reaktion auf die Angabe verwendet der LDPC-Dekodierer 3 die erste aktualisierte LLR-Karte 30, um den Dekodiervorgang an den Rohbitwerten des FEC-Blocks 21 durchzuführen. In dem Fall, dass die Dekodierung von 6 erfolgreich ist, wird das resultierende Codewort bei 12 ausgegeben und die Trap-Steuerung 2 gibt das Codewort am Dekodierschaltungsausgang 15 aus. In einem Beispiel werden alle Trapped-Block-Dekodieriterationen unter Verwendung der Rohbitwerte des FEC-Blocks 21 durchgeführt. In einem anderen Beispiel werden ein oder mehrere Trapped-Block-Dekodieriterationen unter Verwendung der Rohbitwerte des FEC-Blocks 21 durchgeführt, und dann werden ein oder mehrere Trapped-Block-Dekodieriterationen unter Verwendung des Fehlgeschlagenen-Dekodier-Ausgangsblocks aus einem vorherigen fehlgeschlagenen Dekodiervorgang 25 durchgeführt.
-
7 veranschaulicht ein Beispiel, bei dem N Trapped-Block-Dekodieriterationen vorhanden sind. In diesem Beispiel werden in der ersten fehlgeschlagenen Dekodierung 20a die Rohbitwerte des FEC-Blocks 21 und die anfängliche LLR-Karte 22 in die LDPC-Steuerung 3 eingegeben; und die LDPC-Steuerung 3 führt einen Dekodiervorgang an Rohbitwerten des FEC-Blocks 21 unter Verwendung der anfänglichen LLR-Karte 22 durch, um den Fehlgeschlagenen-Dekodier-Ausgangsblock 24 an dem dekodierten Blockausgang 12 auszugeben. In einer ersten Trapped-Block-Dekodieriteration 40a erzeugt die Trap-Steuerung 2 eine erste aktualisierte LLR-Karte 30 und koppelt die erste aktualisierte LLR-Karte 30 und entweder den Fehlgeschlagenen-Dekodier-Ausgangsblock 24 oder die Rohbitwerte des FEC-Blocks 21 mit der LDPC-Steuerung 3. Die LDPC-Steuerung 3 führt dann unter Verwendung der ersten aktualisierten LLR-Karte 30 einen Dekodiervorgang an dem Fehlgeschlagenen-Dekodier-Ausgangsblock 24 oder Rohbitwerten des FEC-Blocks 21 durch. In diesem Beispiel ist der Dekodierprozess nicht erfolgreich, so dass ein Fehlgeschlagener-Dekodier-Ausgangsblock 34 bei dem dekodierten Blockausgang 12 erzeugt wird. In einer zweiten Trapped-Block-Dekodieriteration 40b erzeugt die Trap-Steuerung 2 eine zweite aktualisierte LLR-Karte 31 und koppelt die zweite aktualisierte LLR-Karte 31 und entweder den Fehlgeschlagenen-Dekodier-Ausgangsblock 34 oder die Rohbitwerte des FEC-Blocks 21 mit der LDPC-Steuerung 3. Die LDPC-Steuerung 3 führt dann unter Verwendung der zweiten aktualisierten LLR-Karte 31 einen Dekodiervorgang an dem Fehlgeschlagenen-Dekodier-Ausgangsblock 34 oder Rohbitwerten des FEC-Blocks 21 durch. In diesem Beispiel ist der Dekodiervorgang nicht erfolgreich, so dass ein Fehlgeschlagener-Dekodier-Ausgangsblock 35 bei dem dekodierten Blockausgang 12 erzeugt wird. In einer dritten Trapped-Block-Dekodieriteration 40c erzeugt die Trap-Steuerung 2 eine dritte aktualisierte LLR-Karte 32 und koppelt die dritte aktualisierte LLR-Karte 32 und entweder den Fehlgeschlagenen-Dekodier-Ausgangsblock 35 oder die Rohbitwerte des FEC-Blocks 21 mit der LDPC-Steuerung 3. Die LDPC-Steuerung 3 führt dann unter Verwendung der dritten aktualisierten LLR-Karte 32 einen Dekodiervorgang an dem Fehlgeschlagenen-Dekodier-Ausgangsblock 35 oder Rohbitwerten des FEC-Blocks 21 durch. In diesem Beispiel ist der Dekodierprozess nicht erfolgreich, so dass ein Fehlgeschlagener-Dekodier-Ausgangsblock 36 bei dem dekodierten Blockausgang 12 ausgegeben wird.
-
Der Prozess wird fortgesetzt, bis ein Dekodiervorgang erfolgreich ist oder bis eine vorbestimmte Anzahl (z. B. „N“) Trapped-Block-Dekodieriterationen durchgeführt wurde. Im vorliegenden Beispiel werden „N“-Iterationen durchgeführt und in der N-ten Iteration wird die N-te aktualisierte LLR-Karte 33 und entweder die Rohbitwerte des FEC-Blocks 21 oder der Fehlgeschlagene-Dekodier-Ausgangsblock 37 aus der vorherigen fehlgeschlagenen Dekodieriteration im Dekodiervorgang verwendet. Wenn der LDPC-Dekodiervorgang erfolgreich ist, wird ein Codewort 38 bei dem dekodierten Blockausgang 12 ausgegeben. Wenn der N-te Dekodiervorgang nicht erfolgreich ist, wird der Fehlgeschlagene-Dekodier-Ausgangsblock 39 bei dem dekodierten Blockausgang 12 ausgegeben, und eine Fehlermeldung wird von der Dekodierschaltung 1 ausgegeben.
-
In einem Beispiel schließt die Trap-Steuerung 2 einen Zähler ein, der die Anzahl der Trapped-Block-Dekodieriterationen zählt, in denen die LDPC-Steuerung 3 scheitert, den FEC-Block zu dekodieren, der als ein Trapped-Block bestimmt wurde. Die Trap-Steuerung 2 vergleicht den Wert im Zähler mit der maximalen Anzahl von Iterationen und bestimmt, dass die maximale Anzahl von Iterationen erreicht wurde, wenn der Zähler gleich der maximalen Anzahl von Iterationen ist. In einem Beispiel wird der Zähler in der Trap-Steuerung 2 gelöscht, wenn ein Dekodiervorgang des LDPC-Dekodierers 3 erfolgreich ist. In einem Beispiel wird der Zähler gelöscht, wenn durch den Trap-Erfassungs-Komparator 4 bestimmt wird, dass der FEC-Block ein Trapped-Block ist.
-
In einem Beispiel ist N gleich einer Anzahl unterschiedlicher LLR-Karten, die durch die Trap-Steuerung 2 erzeugt werden, und die Trap-Steuerung 2 führt die Durchführung von Iterationen fort, bis das Codewort identifiziert wurde oder alle LLR-Karten versucht wurden.
-
Die LLR-Werte in aktualisierten LLR-Karten 30-32 können in einer beliebigen Anzahl verschiedener Arten erzeugt werden, und können abhängig von entsprechenden Rohbitwerten in Rohbitwerten von FEC-Block 21 sein. 8A-8D zeigen Beispiele zum Erzeugen von aktualisierten LLR-Karten 30-33. In dem in 8A veranschaulichten Beispiel verwendet die Trap-Steuerung 2 schwache Bitwerte, die jedem Bit im FEC-Block (41) entsprechen, und stochastische Wahrscheinlichkeitswerte, die jedem Bit im FEC-Block (42) entsprechen, um die aktualisierte LLR-Karte (43) zu erzeugen. In einem Beispiel wird eine H-Matrix in der durch den LDPC-Dekodierer 3 durchgeführten Dekodierung analysiert, um entsprechende Bits zu identifizieren, die als schwache Bits betrachtet werden. Bits, die nicht als schwache Bits identifiziert werden, werden im Folgenden als „robuste“ Bits bezeichnet. Schwache Bits sind Bits, die eine schlechte Dekodierleistung aufweisen und durch Durchführen von Tests (z. B. in einem Testlabor) identifiziert werden können, um Bitpositionen in der H-Matrix zu identifizieren, die wahrscheinlicher fehlerhaft in LDPC-Dekodiervorgängen sind, welche die bestimmte H-Matrix verwenden. In einem Beispiel schließt das Testen das Codieren von Codewörtern unter Verwendung der bestimmten H-Matrix, Speichern der Codewörter auf Speichervorrichtungen und Dekodieren der gespeicherten Codewörter unter Verwendung der H-Matrix und Identifizieren von Bitpositionen mit der höchsten Anzahl von Bitfehlern ein.
-
In einem in 8B gezeigten Beispiel wendet die Trap-Steuerung (52) eine prozentuale Variation an einzelne der Rohbitwerte der FEC-Bits an, um (53) die stochastischen Wahrscheinlichkeitswerte zu erzeugen. In diesem Beispiel werden schwache Bitwerte (51) und erzeugte stochastische Wahrscheinlichkeitswerte (53) verwendet, um die aktualisierte LLR-Karte (54) zu erzeugen. Unter erneuter Bezugnahme auf 5 liest in einem Beispiel die Trap-Steuerung 2 die Rohbitwerte des FEC-Blocks 21 aus dem Blockpufferspeicher 5 und erzeugt stochastische Wahrscheinlichkeitswerte durch Ändern eines oder mehrerer der Bitwerte von Rohbitwerten des FEC-Blocks 21 auf einen anderen Bitwert, um den stochastischen Wahrscheinlichkeitswert zu erzeugen. In einem Beispiel werden einige oder alle Rohbitwerte des FEC-Blocks 21 auf eine Weise geändert, die der prozentualen Variation 52 entspricht, sodass die stochastischen Wahrscheinlichkeitswerte die prozentuale Variation 52 aufweisen. In einem Beispiel wird der stochastische Wahrscheinlichkeitswert durch Ändern des Vorzeichens eines jeweiligen LLR (z. B. positiv zu negativ oder negativ zu positiv) erzeugt, was zu einem zufälligen Umschalten einer Null zu einer Eins oder einer Eins zu einer Null führt.
-
In einem in 8C gezeigten Beispiel werden stochastische Wahrscheinlichkeitswerte unter Verwendung von prozentualer Variation (65) erzeugt (66), und die schwachen Bitwerte schließen einen schwachen LLR-Wert (W) bei 62 und einen schwachen LLR-Delta-Wert (Wd) bei 64 ein. In diesem Beispiel verwendet die Trap-Steuerung einen robusten LLR-Wert (S) bei 61, W bei 62, einen robusten LLR-Delta-Wert (Sd) bei 63, Wd bei 64 und erzeugte stochastische Wahrscheinlichkeitswerte (66), um die aktualisierte LLR-Karte 68 zu erzeugen. Der Begriff „robust“ wird in der vorliegenden Anmeldung verwendet, um einfach einen LLR-Wert anzugeben, der sich auf eine Bitposition bezieht, die nicht einem schwachen Bit entspricht (d. h. entsprechend einem robusten Bit), und der Begriff soll keine anderen Bedeutungen aufweisen. In einem Beispiel werden schwache Bitwerte durch Identifizieren schwacher Spalten in der H-Matrix bestimmt. In diesem Beispiel weist jeder LLR-Wert in der aktualisierten LLR-Karte, der einer schwachen Spalte der H-Matrix entspricht, einen LLR-Wert auf, der gleich W ist, und jeder LLR-Wert in der aktualisierten LLR-Karte, der einer Spalte der H-Matrix entspricht, die keine schwache Spalte ist, weist einen LLR-Wert auf, der gleich S ist.
-
In einem Beispiel sind S herkömmliche LLR-Werte, die normalerweise verwendet werden würden, um eine bestimmte Bitposition zu dekodieren, und W sind Werte, die zum Dekodieren einer bestimmten Bitposition dienen, wenn bestimmt wird, dass diese Bitposition einem schwachen Bit in der H-Matrix entspricht. In einem Beispiel sind die herkömmlichen Eingangswerte jeweils die Hälfte des maximalen Eingangs-LLR-Werts (LLRMAX), z. B. LLRMAX/2. Sd sind Werte, die sich von den entsprechenden herkömmlichen LLR-Werten unterscheiden, die normalerweise verwendet werden würden, um eine bestimmte Bitposition zu dekodieren, und können abhängig von dem entsprechenden S für eine bestimmte Bitposition sein (z. B. Sd = ½*S). Wd sind Werte, die sich von dem entsprechenden W-Wert unterscheiden und können abhängig von dem entsprechenden W für eine bestimmte Bitposition (z. B. Wd = ½*W) sein. In einem Beispiel wird jedes S auf einen ersten vorbestimmten Wert eingestellt und jedes W wird auf einen zweiten vorbestimmten Wert eingestellt, der sich von dem ersten vorbestimmten Wert unterscheidet. Alternativ können jedes S und W in den Rohbitwerten des FEC-Blocks 21 auf einen unterschiedlichen Wert eingestellt werden. In einem anderen Beispiel ist S für eine bestimmte Bitposition gleich dem LLR-Wert der bestimmten Bitposition in der anfänglichen LLR-Karte 22, W ist für jede Bitposition abhängig von dem LLR-Wert der bestimmten Bitposition in der anfänglichen LLR-Karte 22, Sd ist für jede Bitposition abhängig von dem entsprechenden S für diese bestimmte Bitposition und Wd ist für jede Bitposition abhängig von dem entsprechenden W für diese bestimmte Bitposition.
-
8D veranschaulicht eine Funktion, die verwendet werden kann, um eine LLR-Karte zu erzeugen, bei der die Rohbitwerte in einer ersten Spalte 71 angegeben werden, stochastische Bitwerte in einer zweiten Spalte 72 angegeben werden, schwache Bitwerte 73 in der dritten Spalte 73 angegeben werden und die Funktion, die zum Bestimmen von LLR für diese bestimmte Bitposition verwendet wird, wird in Spalte 74 angegeben. In diesem Beispiel erhalten die schwachen Bits einen schwachen Bitwert von 1 und Bits, die keine schwachen Bits sind, erhalten einen schwachen Bitwert von 0. Wie durch Zeile 70a angegeben, wenn eine bestimmte Bitposition einen Rohbitwert von „0“ aufweist, einen stochastischen Bitwert von „0“ und kein schwaches Bit ist (einen schwachen Bitwert von „0“ aufweist), ist der Eingang LLR für diese Bitposition positiv S. Wie durch Zeile 70b angegeben, wenn eine bestimmte Bitposition einen Rohbitwert von „0“ aufweist, einen stochastischen Bitwert von „0“ und ein schwaches Bit ist (einen schwachen Bitwert von „1“ aufweist), ist der Eingang LLR für diese Bitposition positiv W. Wie durch Zeile 70c angegeben, wenn eine bestimmte Bitposition einen Rohbitwert von „0“ aufweist, einen stochastischen Bitwert von „1“ und kein schwaches Bit ist (einen schwachen Bitwert von „0“ aufweist), ist der Eingang LLR für diese Bitposition positiv (S+Sd). Wie durch Zeile 70d angegeben, wenn eine bestimmte Bitposition einen Rohbitwert von „0“ aufweist, einen stochastischen Bitwert von „1“ und ein schwaches Bit ist (einen schwachen Bitwert von „1“ aufweist), ist der Eingang LLR für diese Bitposition positiv (W+Wd). Wie durch Zeile 70e angegeben, wenn eine bestimmte Bitposition einen Rohbitwert von „1“ aufweist, einen stochastischen Bitwert von „0“ und kein schwaches Bit ist (einen schwachen Bitwert von „0“ aufweist), ist der Eingang LLR für diese Bitposition negativ S. Wie durch Zeile 70f angegeben, wenn eine bestimmte Bitposition einen Rohbitwert von „1“ aufweist, einen stochastischen Bitwert von „0“ und ein schwaches Bit ist (einen schwachen Bitwert von „1“ aufweist), ist der Eingang LLR für diese Bitposition negativ W. Wie durch Zeile 70g angegeben, wenn eine bestimmte Bitposition einen Rohbitwert von „1“ aufweist, einen stochastischen Bitwert von „1“ und kein schwaches Bit ist (einen schwachen Bitwert von „0“ aufweist), ist der Eingang LLR für diese Bitposition negativ (S Sd). Wie durch Zeile 70 h angegeben, wenn eine bestimmte Bitposition einen Rohbitwert von „1“ aufweist, einen stochastischen Bitwert von „1“ und ein schwaches Bit ist (einen schwachen Bitwert von „1“ aufweist), ist der Eingang LLR für diese Bitposition negativ (W+Wd). In einem Beispiel ist S-8, W=4, SD=2 und Wd=1, so dass die starken Eingänge das Zweifache der schwachen Eingänge sind. In einem anderen Beispiel ist S=8, W=2, Sd=0, Wd=2. In noch einem anderen Beispiel sind die S-Werte 8 und schwache Werte sind zufällig entweder 4 oder 0. In einem in 8E veranschaulichten Beispiel wird eine Benutzereingabe empfangen, die schwache Bitwerte bei 81 (z. B. empfangen am Eingang 14 und/oder 18) angibt, und in diesem Beispiel schließt die Benutzereingabe S bei 61, W bei 62, Sd bei 63 und WD bei 64 ein. Die Benutzereingabe, die eine prozentuale Variation angibt, wird bei 82 empfangen (z. B. am Eingang 14 und/oder 18 empfangen) und die Trap-Steuerung 2 wendet die prozentuale Variation an einzelne der Rohbitwerte der FEC-Bits an, um bei 66 einen stochastischen Wahrscheinlichkeitswert zu erzeugen, der jedem Bit im FEC-Block entspricht.
-
Die Trap-Steuerung 2 verwendet die erzeugten stochastischen Wahrscheinlichkeitswerte, S, W, Sd und Wd, um die aktualisierte LLR-Karte bei 83 zu erzeugen. In einem Beispiel wird die Benutzereingabe durch einen Hersteller von SSD bereitgestellt, indem die Benutzereingabe am Eingang 18 hochgeladen wird, bevor SSD 9 an einen Kunden gesendet wird. Zusätzlich zum Empfangen der Eingabe, die schwache Bitwerte angibt, und der Eingabe, die die prozentuale Variation angibt, wie in 8E gezeigt, kann die Eingabe empfangen werden (z. B. am Eingang 14 und/oder 18), die den Fehlerschwellenwert angibt, um dem Hersteller der SSD 9 zu ermöglichen, schwache Bitwerte, die prozentuale Variation und den Fehlerschwellenwert zu variieren, um die Bedürfnisse eines bestimmten Kunden oder einer Gruppe von Kunden zu erfüllen.
-
In einem Beispiel stellen alle positiven Werte der LLR-Karte 0 dar und alle negativen Werte der LLR-Karte stellen 1 dar. Die Größen stellen die Konfidenz dar. In einem Beispiel gibt eine Größe von 0 an, dass ein geringer Konfidenzbetrag (d. h. keine Konfidenz, ob das bestimmte Bit eine 1 oder eine 0 ist) und der Konfidenzbetrag steigt, wenn sich die Größe 15 annähert. In diesem Beispiel ist ein LLR von 2 eine sehr schwache 0, ein LLR von 4 ist eine schwache 0 und ein LLR von 15 ist eine starke 0. In ähnlicher Weise ist ein LLR von 12 eine sehr schwache 1, ein LLR von -4 ist eine schwache 1, und ein LLR von -15 ist eine starke 1.
-
Nachfolgende aktualisierte LLR-Karten 31-33 können auf die gleiche Weise erzeugt werden wie die erste aktualisierte LLR-Karte 30. Alternativ kann einer von mehreren der folgenden Faktoren beim Erzeugen nachfolgender aktualisierter LLR-Karten 31-33 im Vergleich zu der ersten aktualisierten LLR-Karte 30 variiert werden: S, Sd, W, Wd und die prozentuale Variation 52.
-
In einem Beispiel unterscheiden sich nachfolgende aktualisierte LLR-Karten 31-33 voneinander als Ergebnis der Änderung einer oder mehrerer der stochastischen Wahrscheinlichkeitswerte S, W, Sd und Wd. In einem Beispiel werden aktualisierte LLR-Karten 31-33 auf die gleiche Weise wie die aktualisierte LLR-Karte 30 erzeugt, außer dass einer oder mehrere von S, W, Sd und Wd geändert werden oder eine Funktion auf einem oder mehreren von S, W, Sd und Wd durchgeführt wird, um das Ergebnis zu variieren.
-
In einem anderen Beispiel ist jede aktualisierte LLR-Karte abhängig von den Bitwerten in dem Fehlgeschlagenen-Dekodier-Ausgangsblock aus einer vorherigen Iteration 25. In einem Beispiel wird jede Trapped-Block-Dekodieriteration auf die gleiche Weise durchgeführt wie in 8D veranschaulicht, unter Verwendung des Fehlgeschlagenen-Dekodier-Ausgangsblocks aus einer vorherigen Iteration 25 bei FEC-Blockeingang 10 und unter Verwendung einer aktualisierten LLR-Karte, die auf die gleiche Weise wie die nachfolgende aktualisierte LLR-Karte 30 erzeugt wird, außer dass anstelle der Verwendung von Rohbitwerten des FEC-Blocks 21 in Spalte 71 von 8D die Bitwerte von dem Fehlgeschlagenen-Dekodier-Ausgangsblock aus einer vorherigen Iteration 25 in der Berechnung verwendet werden. In diesem Beispiel wird in der in 7 veranschaulichten ersten Trapped-Block-Dekodieriteration die in 8D veranschaulichte Funktion auf die jeweiligen Bitwerte in dem Fehlgeschlagenen-Dekodier-Ausgangsblock 24 angewendet, um die LLR-Werte in der ersten aktualisierten LLR-Karte 30 zu erzeugen. In der zweiten Trapped-Block-Dekodieriteration 40b wird die in 8D veranschaulichte Funktion auf die jeweiligen Bitwerte in dem Fehlgeschlagenen-Dekodier-Ausgangsblock 34 angewendet, um die LLR-Werte in der zweiten aktualisierten LLR-Karte 31 zu erzeugen. In der dritten Trapped-Block-Dekodieriteration 40c wird die in 8D veranschaulichte Funktion auf die jeweiligen Bitwerte in dem Fehlgeschlagenen-Dekodier-Ausgangsblock 35 angewendet, um die LLR-Werte in der dritten aktualisierten LLR-Karte 32 zu erzeugen.
-
In einem Beispiel sind sowohl der erste fehlgeschlagene Dekodiervorgang als auch die Trapped-Block-Dekodieriterationen eine Soft-Dekodierung mit drei verschiedenen Informationsbits (roh, stark/schwach und stochastisch), die in jeden LLR-Wert in der LLR-Karte integriert sind, wobei 8 Werte jedem Eingangsbit entsprechen. In einem Beispiel schließen sowohl die anfängliche LLR-Karte 22 als auch die aktualisierten LLR-Karten 30-33 LLR-Werte ein, die beliebige von acht verschiedenen Werten sein können, 4 verschiedene 1 (die jeweils eins von 4 verschiedenen Konfidenzniveaus aufweisen) und 4 verschiedenen 0 (die jeweils eins von 4 verschiedenen Konfidenzniveaus aufweisen). In einem Beispiel wird eine 3-Bit-Soft-Dekodierung verwendet, bei der jede einzelne LLR-Karte 22 und 30-33 einen einzelnen LLR-Wert angibt, der jeder Rohbitposition entspricht, die ein einzelner vorzeichenbehafteter Wert ist, welcher der bestimmten Rohbitposition entspricht.
-
In einem Beispiel ist die Anzahl der Trapped-Block-Dekodieriterationen gleich der Anzahl der aktualisierten LLR-Karten, die durch die Trap-Steuerung 2 erzeugt werden, wobei jede Trapped-Block-Dekodieriteration eine andere LLR-Karte verwendet, bis alle LLR-Karten versucht wurden. In einem Beispiel werden 8 verschiedene LLR-Karten durch die Trap-Steuerung 2 erzeugt und jede Trapped-Block-Dekodieriteration verwendet eine andere der acht LLR-Karten, wobei Trapped-Block-Dekodieriterationen fortgesetzt werden, bis der Dekodiervorgang erfolgreich das Codewort identifiziert oder alle acht verschiedenen LLR-Karten versucht wurden.
-
In dem in 4 gezeigten Beispiel wurde die erste fehlgeschlagene Dekodierung als ein Hard-Dekodiervorgang oder ein Soft-Dekodiervorgang (z. B. eine 3-Bit-Soft-Dekodierung) beschrieben. Alternativ erzeugt der erste fehlgeschlagene Dekodiervorgang jedoch die anfängliche LLR-Karte auf eine Weise, die in einer oder mehreren von 8A-8E veranschaulicht ist. In einem solchen Beispiel ist die erste fehlgeschlagene Dekodierung eine Soft-Dekodierung mit drei verschiedenen Informationsbits, die roh, stark/schwach und stochastisch sind, mit 8 verschiedenen möglichen Werten, die jedem Eingangsbit entsprechen (4 verschiedene 1 mit 4 verschiedenen Konfidenzniveaus und 4 verschiedene 0 mit 4 verschiedenen Konfidenzniveaus).
-
9A veranschaulicht ein Beispiel einer Dekodierschaltung 1a, die keinen Blockpufferspeicher 5 einschließt. In diesem Beispiel ist der Dekodierschaltungseingang 14 direkt mit dem FEC-Blockeingang 10 und der Trap-Steuerung 2 gekoppelt. Die Dekodierschaltung 1a arbeitet auf die gleiche Weise wie die in 1-8 erörterte Dekodierschaltung 1, außer wie nachstehend angegeben. 9B veranschaulicht ein Beispiel einer Speichersteuerung 6a, die eine Dekodierschaltung 1a aufweist, die keinen Blockpufferspeicher 5 einschließt. Die Speichersteuerung 6a arbeitet auf die gleiche Weise wie die in 1-8 erörterte Speichersteuerung 6, außer wie nachstehend angegeben. 9C veranschaulicht ein Beispiel einer SSD 9a, die eine Speichersteuerung 6a und eine Dekodierschaltung 1a aufweist, die keinen Blockpufferspeicher 5 einschließt. Die SSD 9a arbeitet auf die gleiche Weise wie die in 1-8 erörterte SSD 9, außer wie nachstehend angegeben. In den Beispielen von 9A-9C werden die FEC-Blöcke, die am Dekodierschaltungseingang 14 empfangen werden, direkt vom Dekodierschaltungseingang 14 mit dem FEC-Blockeingang 10 des LDPC-Dekodierers 3 gekoppelt. In einem Beispiel ist die Trap-Steuerung 2 betriebsfähig, um Rohbitwerte des FEC-Blocks 21 und Fehlgeschlagene-Dekodier-Ausgangsblöcke nach Bedarf zu speichern, um aktualisierte LLR-Karten zu erzeugen und entweder Rohbitwerte des FEC-Blocks 21 oder Fehlgeschlagene-Dekodier-Ausgangsblöcke mit dem LDPC-Dekodierer 3 zu koppeln.
-
10 veranschaulicht ein Verfahren (100) zum Dekodieren, welches das Durchführen (101) eines ersten fehlgeschlagenen Dekodiervorgangs an Rohbitwerten eines Vorwärts-Fehlerkorrektur-Blocks (forward error correction, FEC-Block) durch einen Low-Density-Parity-Check-Dekodierer (low-density parity check, LDPC-Dekodierer) einschließt, der ein Syndrom des fehlgeschlagenen Dekodiervorgangs und einen Fehlgeschlagenen-Dekodier-Ausgangsblock ausgibt. Das Verfahren schließt das Bestimmen (102) ein, ob der FEC-Block ein Trapped-Block ist, indem die Anzahl der fehlschlagenden Prüfknoten, die durch das Syndrom angezeigt werden, mit einem Fehlerschwellenwert verglichen wird. Der FEC-Block wird als ein Trapped-Block bestimmt, wenn die Anzahl der fehlschlagenden Prüfknoten, die durch das Syndrom angegeben werden, kleiner als der Fehlerschwellenwert ist. Wenn das Dekodieren fehlschlägt (101) und der FEC-Block nicht als ein Trapped-Block (103) bestimmt wird, wird eine Fehlerangabe ausgegeben (111). Wenn bestimmt wird, dass der FEC-Block ein Trapped-Block ist, schließt das Verfahren das Durchführen von Trapped-Block-Dekodieriterationen (104-109, 116) ein. Jedes der Trapped-Block-Dekodieriterationen schließt Folgendes ein: Erzeugen (104) einer aktualisierten LLR-Karte, Bereitstellen (105), an den LDPC-Dekodierer, der aktualisierten LLR-Karte und entweder der Rohbitwerte des FEC-Blocks oder einen Fehlgeschlagenen-Dekodier-Ausgangsblock aus einem vorherigen fehlgeschlagenen Dekodiervorgang an dem Trapped-Block, Durchführen (106) eines Dekodiervorgangs des LDPC-Dekodierers unter Verwendung der aktualisierten LLR-Karte an den Bitwerten des FEC-Blocks oder dem Fehlgeschlagenen-Dekodier-Ausgangsblock aus dem vorherigen fehlgeschlagenen Dekodiervorgang an dem Trapped-Block. Die Trapped-Block-Dekodieriterationen der Blöcke 104-106 werden durchgeführt, bis der Dekodiervorgang erfolgreich ist (107, 110) oder bis eine vorbestimmte Anzahl von Trapped-Block-Dekodieriterationen durchgeführt wurde (107-108, 117). Nach jeder Trapped-Block-Dekodieriteration wird ein Zähler der Trap-Steuerung 2 hochgezählt (I=I+1) (109) und der Zähler wird zum Bestimmen in Block 108 verwendet, ob die maximale Anzahl von Iterationen erreicht wurde. Wenn der Dekodiervorgang erfolgreich (107) beim Dekodieren des FEC-Blocks ist, wird das Codewort ausgegeben (110). Wenn der Dekodiervorgang beim Dekodieren des FEC-Blocks nicht erfolgreich ist und die vorbestimmte Anzahl von Trapped-Block-Dekodieriterationen durchgeführt wurde (107-108, 117), wird eine Fehlerangabe über den Pfad 117 ausgegeben (111).
-
In einem Beispiel wird die Fehlerangabe (111) am Dekodierschaltungsausgang 15 von 1-3 ausgegeben und als Reaktion auf die Fehlerangabe gibt die Speichersteuerung 6, 6a eine Fehlermeldung aus. Der Host-Computer kann dann einen RAID-Prozess durchführen, um das Codewort wiederherzustellen.
-
Die Dekodieriteration der Schritte 104-106 kann unter Verwendung von Rohbitwerten des FEC-Blocks oder unter Verwendung eines Fehlgeschlagenen-Dekodier-Ausgangsblocks aus dem vorherigen fehlgeschlagenen Dekodiervorgang an dem Trapped-Block durchgeführt werden. 11 veranschaulicht ein Beispiel, bei dem das Dekodieren an Rohbitwerten des FEC-Blocks durchgeführt wird. In diesem Beispiel schließt die Trapped-Block-Dekodieriteration Folgendes ein: Erzeugen (201) einer aktualisierten LLR-Karte, Bereitstellen, an den LDPC-Dekodierer (202), der aktualisierten LLR-Karte und der Rohbitwerte des FEC-Blocks, und Durchführen (203) eines Dekodiervorgangs an den Rohbitwerten des FEC-Blocks unter Verwendung der aktualisierten LLR-Karte.
-
12 zeigt ein Beispiel, bei dem die Dekodieriteration der Schritte 104-106 unter Verwendung eines Fehlgeschlagenen-Dekodier-Ausgangsblocks aus dem vorherigen fehlgeschlagenen Dekodiervorgang an dem Trapped-Block durchgeführt wird. In diesem Beispiel schließt die Trapped-Block-Dekodieriteration Folgendes ein: Erzeugen (301) einer aktualisierten LLR-Karte; Bereitstellen (302), an den LDPC-Dekodierer, des Fehlgeschlagenen-Dekodier-Ausgangsblocks aus einem vorherigen fehlgeschlagenen Dekodiervorgang an dem Trapped-Block und der aktualisierten LLR-Karte, und Durchführen (303) eines Dekodiervorgangs an dem Fehlgeschlagenen-Dekodier-Ausgangsblock aus dem vorherigen fehlgeschlagenen Dekodiervorgang an dem Trapped-Block unter Verwendung der aktualisierten LLR-Karte.
-
13 zeigt Beispiele von zusätzlichen Blöcken, die in dem Verfahren 100 eingeschlossen sein könnten. Wie durch Block 401 gezeigt, schließt das Verfahren 100 das Empfangen einer Eingabe ein, die eine prozentuale Variation angibt, und die stochastischen Wahrscheinlichkeitswerte werden durch Anwenden der prozentualen Variation auf einzelne der Rohbitwerte des FEC-Blocks erzeugt.
-
Wie durch Block 402 gezeigt, schließt das Verfahren 100 das Speichern der Rohbitwerte des FEC-Blocks oder das Speichern des Fehlgeschlagenen-Dekodier-Ausgangsblocks aus einem vorherigen fehlgeschlagenen Dekodiervorgang an dem Trapped-Block ein. Wie durch Block 403 gezeigt, schließt das Verfahren 100 das Erzeugen der aktualisierten LLR-Karte unter Verwendung der gespeicherten Rohbitwerte des FEC-Blocks, der stochastischen Wahrscheinlichkeitswerte, die jedem Bit in dem FEC-Block entsprechen, und der schwachen Bitwerte, die jedem Bit in dem FEC-Block entsprechen, ein.
-
Wie durch Block 404 gezeigt, schließt das Verfahren 100 ein Empfangen der Eingabe ein, die S, W, Sd und Wd angibt, wobei jeder LLR-Wert in der aktualisierten LLR-Karte, der einer schwachen Spalte der H-Matrix entspricht, einen LLR-Wert aufweist, der gleich W ist, und wobei jeder LLR-Wert in der aktualisierten LLR-Karte, der einer Spalte der H-Matrix entspricht, die keine schwache Spalte ist, einen LLR-Wert aufweist, der gleich S ist.
-
14 zeigt ein Diagramm, das einen Frame-Fehler auf der vertikalen Achse und eine Bitfehlerrate (bit error rate, BER) auf der horizontalen Achse veranschaulicht. Das Diagramm veranschaulicht Wasserfall 93 und eine Leistungskurve 91 für einen herkömmlichen LDPC-Dekodierprozess. Es ist zu erkennen, dass die Leistungskurve 91 beim Annähern an den Error-Floor 94 seitlich abweicht. Die Oberseite des Wasserfalls 93 ist nicht sichtbar, da sie sich entlang der Leistungskurve 91 erstreckt, wobei nur der Abschnitt des Wasserfalls 93 sichtbar ist, der sich unter dem erstreckt, wo die Leistungskurve 91 vom Wasserfall 92 abweicht.
-
15 zeigt ein Diagramm, das einen Frame-Fehler auf der vertikalen Achse und eine Bitfehlerrate (bit error rate, BER) auf der horizontalen Achse veranschaulicht. Das Diagramm veranschaulicht eine Leistungskurve 92 gemäß einem Beispiel des in 1-13 gezeigten Verfahrens und der Einrichtung. Es ist zu erkennen, dass sich die Leistungskurve 92 unter dem Error-Floor 94 für den herkömmlichen LDPC-Dekodierprozess erstreckt, der in 14 veranschaulicht ist.
-
Es versteht sich, dass 1-13 Beispiele sind und dass viele andere Beispiele möglich sind, einschließlich der Verwendung bekannter Verfahren zum Dekodieren von Trapped-Einstellungen in Verbindung mit den in der vorliegenden Anmeldung offenbarten Verfahren und Einrichtungen. In einem Beispiel werden ein oder mehrere bekannte herkömmliche Verfahren zum Dekodieren von Trapped-Einstellungen auch bei der Dekodierung eines Trapped-Blocks verwendet. Zum Beispiel kann eine herkömmliche Dekodieriteration nach der ersten fehlgeschlagenen Dekodierung 20a, die in 8 gezeigt ist, und vor der ersten Trapped-Block-Dekodieriteration 20b hinzugefügt werden, bei der eine LLR-Karte für die Dekodierung verwendet wird, die einen vorbestimmten Satz von LLR-Werten einschließt, von denen jeder auf einen vorbestimmten niedrigen LLR-Wert eingestellt wird. Zum Beispiel kann ein herkömmlicher Dekodiervorgang hinzugefügt werden, bei dem der LLR-Wert auf einen vorbestimmten niedrigen Wert eingestellt wird.
-
In der Beschreibung sind zu Erläuterungszwecken zahlreiche spezifische Details dargelegt, um ein umfassendes Verständnis der vorliegenden Erfindung bereitzustellen. Es ist jedoch für den Durchschnittsfachmann offensichtlich, dass die vorliegende Erfindung ohne diese spezifischen Details umgesetzt werden kann. In einigen Fällen sind hinlänglich bekannte Strukturen und Vorrichtungen in Form eines Blockdiagramms und nicht im Detail gezeigt, um die vorliegende Erfindung nicht zu verunklaren. Diese Ausführungsformen sind hinreichend detailliert beschrieben, um es dem Durchschnittsfachmann zu ermöglichen, die Erfindung umzusetzen, und es versteht sich, dass andere Ausführungsformen genutzt werden können und dass logische, mechanische, elektrische und andere Änderungen vorgenommen werden können, ohne vom Schutzumfang der vorliegenden Erfindung abzuweichen.
-
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
-