-
GEBIET DER ERFINDUNG
-
Die vorliegende Erfindung betrifft das Gebiet der Fehlerkorrekturdecodierung (engl. Error Correction Coding, ECC), insbesondere für Anwendungen für nichtflüchtige Speicher wie beispielsweise Flashspeicher. Genauer betrifft die Erfindungsverfahren und einen entsprechenden Decoder zur Softinput-Decodierung von verallgemeinerten verketteten Codes (engl. Generalized Concatenated Codes, GCC, GC-Codes), insbesondere von GCC-codierten und in einer Speichervorrichtung gespeicherten Daten, ein Speichersystem mit einem solchen Decoder und ein korrespondierendes Computerprogramm, das konfiguriert ist, dieses Verfahren auf dem Decoder auszuführen.
-
HINTERGRUND
-
Eine auf GC-Codes beruhende Fehlerkorrekturcodierung (ECC) weist ein hohes Potenzial für verschiedenste Anwendungen im Bereich der Datenkommunikation und Datenspeichersysteme auf, beispielsweise für digitale magnetische Speichersysteme, wie in [1] beschrieben (siehe unten angegebene Liste von Literaturquellen [...]), für nichtflüchtige Flashspeicher [2], sowie für zweidimensionale Strichcodes [3]. GCC-Codes werden typischerweise aus inneren verschachtelten binären Bose-Chaudhuri-Hocquenghem (BCH) – Codes und äußeren Reed-Solomon(RS)-Codes konstruiert [4], [5], und [6]. Bei algebraischer Decodierung weisen GC-Codes im Vergleich zu langen BCH-Codes eine geringe Decodierungskomplexität auf. Derartige Codes sind gut für schnelle hardwarebasierte Decoderarchitekturen geeignet [7]. In der Theorie der Codierungen, bilden die BCH-Codes eine Klasse von linearen, zyklischen Fehlerkorrekturcodes, die unter Verwendung von finiten Feldern (Galois-Feldern, GF) konstruiert werden, während die RS-Codes zur Klasse der nicht binären, zyklischen Fehlerkorrekturcodes gehören und auf univarianten Polynomen über finiten Feldern (d. h. GF) beruhen.
-
Ein Codewort eines GC-Codes kann als eine Matrix aufgefasst werden. Zur Codierung wird die Information in der Matrix gespeichert. In dem ersten Codierungsschritt werden die Zeilen der Matrix durch Blockcodes (die äußeren Codes) über dem Galois-Feld GF(2m) geschützt, wobei m > 0 eine positive ganze Zahl ist. Danach wird jede Spalte durch binäre Codes, die inneren Codes, geschützt. Typischerweise werden binäre BCH-Codes als innere Codes und RS-Codes als äußere Codes verwendet [8].
-
Flashspeicher, insbesondere NAND-Flashspeicher, stellen wichtige Komponenten von eingebetteten Systemen sowie in der Consumer-Elektronik dar. Flashspeicher benötigen ECC, um Datenintegrität und Zuverlässigkeit für die Nutzdaten sicherzustellen (vgl. [8]). Bei vielen Flash Technologien, kann man als statistisches Fehlermodell einen Binären Symmetrischen Kanal (engl. Binary Symmetric Channel, BSC) annehmen. Daher werden typischerweise BCH-Codes zur Fehlerkorrektur verwendet. Flashspeicher reservieren typischerweise einen Extra-Speicherbereich, der dazu verwendet wird, die für die ECC benötigten Redundanzen zu speichern. Dieser Extra-Speicherbereich bestimmt die Coderate für den Fehlerkorrekturcode. GC-Codes haben gegenüber langen BCH-Codes eine geringe Decodierungskomplexität.
-
Ein Decoder verarbeitet die potenziell fehlerhaften Daten in mehreren Decodierungsschritten. In [7] wird algebraische Decodierung in jedem Decodierungsschritt verwendet. Dies ist angemessen, wenn der Kanal keine Softinformation über die übertragenen oder gespeicherten Bits liefert. Wenn der Kanal jedoch Zuverlässigkeitsinformationen liefert, wenn also beispielsweise bekannt ist, dass er sich, zumindest im Wesentlichen, wie ein Kanal mit additivem weißen Gaußschem Rauschen (engl. Additive White Gaussian Noise, AWGN) verhält, kann diese bekannte Softinformationen durch den Decodierer ausgenutzt werden. Im Falle von GC-Codes, ist es ausreichend, die Softinformationen dazu zu nutzen, die inneren Codes zu decodieren. In [7] wurde eine Pipeline-Decoderarchitektur für GC-Codes vorgeschlagen, die auf einer algebraischen Hardinput-Decodierung der Komponentencodes beruht. Es existieren zahlreiche Softinput-Decodierungsalgorithmen für binäre Blockcodes (vgl. [5] für eine Übersicht). Beispielsweise zuverlässigkeitsbasierte Decodierungsalgorithmen wie die Chase Decodierung [9], [10], die geordnete statistische Decodierung [11], und der Dorsch-Algorithmus [12], [13], [14], um nur einige zu nennen. Derartige Algorithmen können eine Performanz anbieten, die ähnlich der von Maximum-Likelihood(ML)-Decodierung ist, aber normalerweise garantieren sie nicht, dass das ML-Codewort erfolgreich gefunden wird. Viele dieser Verfahren sind jedoch nicht für eine schnelle Hardwareimplementierung geeignet. Des Weiteren liefern viele Kanäle mit einem quantisierten Ausgang nur eine geringe Anzahl von Entscheidungsschwellen und somit nur 2 oder 3 Bits an Softinformation pro Codebit, was für viele zuverlässigkeitsbasierte Decodierungsalgorithmen nicht ausreichend ist.
-
In [15] wurde ein sequenzieller Stapeldecodierungsansatz vorgeschlagen. Sequenzielles decodieren weist eine geringe Rechenkomplexität auf, wenn der Rauschpegel niedrig ist. Dies ist für viele Anwendungen von GC-Codes erfüllt, beispielsweise für Fehlerkorrekturcodierungen in Speichersystemen. Sequenzielle Decodierung wurde ursprünglich für Baumcodes eingeführt. Um binäre Blockcodes zu decodieren, kann der Syndrom-Trellis als Repräsentation des Codes verwendet werden [16]. Für Blockcodes steigt die Anzahl von Trellis-Zuständen jedoch exponentiell mit der Anzahl von Redundanzbits an. Daher ist das Trellis-basierte sequenzielle Decodieren, wie es in [15] vorgeschlagen wird, nur für Codes mit geringen Fehlerkorrekturfähigkeiten praktikabel.
-
Traditionell wird ein binärer symmetrischer Kanal (BSC) als Kanalmodell für Flashspeicher verwendet, und BCH-Codes werden zur Fehlerkorrektur eingesetzt [20], [21], [22], [23]. Vor kurzem wurden für NAND-Flashspeicher verkettete Codes vorgeschlagen, die aus langen BCH-Codes konstruiert sind [24], [25]. Diese Codes können geringe Restfehlerraten liefern, doch verlangen sie sehr lange Codes und somit eine hohe Decodierungslatenz, was möglicherweise nicht in allen Anwendungen von Flashspeichern akzeptabel ist.
-
Die Performanz von Fehlerkorrekturcodierung kann verbessert werden, wenn Zuverlässigkeitsinformation über den Zustand der Zelle verfügbar ist [26]. In diesem Fall kann der Kanal als Kanal mit binärem Eingang und additivem weißen Gaußschen Rauschen (AWGN) betrachtet werden, wobei der Kanalausgang unter Verwendung einer geringen Anzahl von Bits quantisiert ist [24]. Um die Zuverlässigkeitsinformation auszunutzen, sind Softinput-Decodierungsalgorithmen erforderlich. Beispielsweise können Low-Density-Parity-Check(LDPC)-Codes eine höhere Fehlerkorrekturperformanz bei NAND-Flashspeicher liefern [27], [28], [29], [30]. LDPC-Codes haben jedoch hohe Restfehlerraten (die Fehler-Untergrenze) und sind nicht für Anwendungen geeignet, die sehr geringe Wahrscheinlichkeiten für Decodierungsfehler erfordern [2]. Beispielsweise empfiehlt der JEDEC Standard für Festspeicherlaufwerke (engl. Solid State Drives, SSD) eine nicht mehr korrigierbare Bitfehlerrate von weniger als 10–15 für Client-Anwendungen und von weniger als 10–16 für Unternehmenslösungen [31]. Für einige Anwendungen sind Blockfehlerraten von weniger als 10–16 vorgeschrieben [32].
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Es ist eine Aufgabe der vorliegenden Erfindung, die Effizienz bei der Decodierung von GCC-codierten Daten zu verbessern. Speziell ist es eine Aufgabe der Erfindung, ein Verfahren sowie einen Decoder zur Ermöglichung einer effizienten, insbesondere platzeffizienten, Implementierung eines Decodierers zur Decodierung von GCC-codierten Daten bereitzustellen, wobei der Decodierer vorzugsweise für Anwendungen geeignet ist, die sehr geringe Restfehlerraten, beispielsweise Bitfehlerraten von weniger als 10–15 oder sogar weniger als 10–16 erfordern.
-
Eine Lösung für dieses Problem wird durch die Lehre der unabhängigen Ansprüche bereitgestellt. Verschiedene bevorzugte Ausführungsformen der vorliegenden Erfindung sind Gegenstand der abhängigen Ansprüche.
-
Ein erster Aspekt der Erfindung betrifft ein Softinput-Decodierungsverfahren für einen verallgemeinerten verketteten Code, GCC, wobei der GCC aus L inneren verschachtelten linearen binären Blockcodes B(...), vorzugsweise binären erweiterten Bose-Chaudhuri-Hocquenghem, BCH, -Codes und L äußeren Codes – vorzugsweise Blockcodes wie etwa Reed-Solomon, RS, -Codes – konstruiert ist, wobei L ≧ 2 die Anzahl der Ebenen des GCC angibt und der innere Code einer höheren Ebene ein Subcode des inneren Codes der vorausgehenden niedrigeren Ebenen, soweit vorhanden, ist. Das Verfahren verwendet eine oder mehrere Decodierungsvorrichtungen, d. h. Decoder, um iterativ Ebene für Ebene von einem Datenkanal, beispielsweise von einer nichtflüchtigen Speichervorrichtung wie etwa einem Flashspeicher, empfangene Originaldaten zu decodieren. Für jede Ebene weist das Verfahren die folgenden Schritte auf:
- (i) einen ersten Decodierungsschritt zum Decodieren von Eingangsdaten der aktuellen Ebene beruhend auf den inneren Blockcodes der aktuellen Ebene und zur Bereitstellung von entsprechenden decodierten Ausgangsdaten, wobei die Eingangsdaten der niedrigsten Ebene die Originaldaten aufweisen und die Eingangsdaten jeder nachfolgenden Ebene auf dem Decodierungsergebnis der vorausgehenden Ebene beruhen; und
- (ii) einen nachfolgenden zweiten Decodierungsschritt zum Decodieren des äußeren Codes der aktuellen Ebene l beruhend auf den Ausgangsdaten des ersten Decodierungsschritts, um ein Decodierungsergebnis der aktuellen Ebene l zu schätzen, wobei das Decodierungsergebnis der höchsten Ebene als die decodierten Daten ausgegeben wird.
-
Hierbei weist der erste Decodierungsschritt wenigstens einer von der niedrigsten Ebene verschiedenen aktuellen Ebene l ein Trellis-basiertes sequenzielles Stapeldecodieren der Eingangsdaten der aktuellen Ebene auf, wobei als Softinput Informationen verwendet werden, welche die Zuverlässigkeit des Datenkanals charakterisieren. Das sequenzielle Stapeldecodieren beruht auf einem ersten Trellis, der einen ersten Supercode B
1 (l) des inneren Blockcodes B
(l) der aktuellen Ebene l repräsentiert, und auf einem zweiten Trellis, der einen zweiten Supercode B
2 (l) von B
(l) repräsentiert, mit B
(l) = B
1 (l) ⋂ B
2 (l), wobei ein Supercode von B
(l) ein Code ist, der sämtliche Codewörter von B
(l) aufweist, und die jeweilige Redundanz des ersten Supercodes B
1 (l) und des zweiten Supercodes B
2 (l) geringer ist als die von B
(l). Der korrespondierende innere Code
der unmittelbar vorausgehenden Ebene l – 1 wird als einer der Supercodes B
1 (l) und B
2 (l) wiederverwendet. Das sequentielle Stapeldecodieren ist konfiguriert, nur solche in den Ausgangsdaten des ersten Decodierungsschritts enthaltene Codewörter zu liefern, die sowohl durch den ersten Trellis als auch durch den zweiten Trellis repräsentiert werden.
-
Der Begriff „erweiterter BCH-Code”, wie hier verwendet, bezieht sich auf einen Code, dessen Codeworte im Allgemeinen sowohl ein BCH-Codewort als auch ein zusätzliches Einfachparitätsprüfungs-(SPC)-Symbol (d. h. ein Paritätsbit, falls das SPC-Symbol nur ein einziges Bit ist) aufweisen. Allerdings, ist bereits ein bloßer SPC-Code (ohne weitere BCH-Paritätssymbole) ein erweiterter BCH-Code und stellt sogar seine einfachste Form dar. Während ein BCH-Code (der nicht bloß ein SPC-Code ist) die Korrektur einer bestimmten Anzahl von Fehlern in einem Codeword beim Decodieren ermöglicht, erlaubt ein SPC-Code nur das Erkennen bestimmter Fehler, speziell dann, wenn in dem Codewort eine ungerade Anzahl von Fehlern vorliegt.
-
Der Begriff „Subcode” eines bestimmten (Mutter-)Codes, wie hier verwendet, bezieht sich auf einen Code, der aus einer echten Untermenge der Codeworte des (Mutter-)Codes besteht. So ist ein Code eine Untermenge eines anderen Codes B(m), falls die Menge der Code Worte von B(n) eine echte Untermenge der Menge von Codeworten von B(m) ist. Speziell kann der Subcode der Code einer bestimmten Verschachtelungsebene der verschachtelten Struktur der inneren verschachtelten Blockcodes sein, wobei dieser Subcode eine Untermenge eines Blockcodes einer unteren Ebene der verschachtelten Struktur ist. Demgemäß ist in der verschachtelten Struktur B(L-1) ⊆ B(L-2) ⊆ ... ⊆ B(0) der Blockcode B(L-q) mit L > q > 0 und der Ganzzahl q ein Subcode zumindest des Blockcodes B(0) der niedrigsten Verschachtelungsebene 0 und, falls q < L – 1, auch von jedem höheren verschachtelten Blockcode, der zwischen B(0) und B(L-q) in der verschachtelten Struktur definiert ist.
-
Unter dem Begriff „Softinput-Decodierung” ist im Sinne der Erfindung eine Art der Decodierung von aus einem Kanal erhaltenen Originaldaten zu verstehen, bei der Informationen, welche die Zuverlässigkeit des Kanals charakterisieren, durch einen Algorithmus, der zur Durchführung der Decodierung verwendet wird, als Eingangsvariable(en) für den Algorithmus berücksichtigt werden.
-
Der Begriff „Trellis” bezieht sich auf eine Darstellung eines Codes, wobei ein Trellis T = (S, W) ein beschrifteter gerichteter Graph ist, wobei W = {w} die Menge aller Äste in dem Graphen bezeichnet und S = {σ} die Menge aller Knoten ist. Die Menge S ist in n +1 disjunkte Untermengen S = S0 ⋃ S1 ⋃ ... ⋃ Sn zerlegbar, die als „Ebenen” des Trellis bezeichnet werden. Auf ähnliche Weise existiert eine Partitionierung der Menge W = W1 ⋃ W2 ⋃ ... ⋃ Wn. Ein Knoten σ ∊ St der Ebene t kann mit einem Knoten σ ~ ∊ St+1 der Ebene t + 1 durch einen oder mehrere Äste verbunden sein. Jeder Ast wt ist von einem Knoten σ der Ebene t – 1 zu einem Knoten σ ~ der nächsten Ebene t gerichtet. Hierbei wird angenommen, dass die Endebenen jeweils nur einen Knoten aufweisen, nämlich S0 = {σ0} und Sn = {σn}. Ein Trellis stellt eine kompakte Methode zur Darstellung aller Codewörter eines Codes dar. Jeder Ast wt des Trellis ist mit einem Codesymbol νt(wt) bezeichnet. Jedes Codewort korrespondiert zu einem eindeutigen Pfad in dem Trellis, d. h. es liegt eine Eins-zu-Eins-Korrespondenz zwischen jedem Codeword v des Codes und einem Pfad w in dem Trellis vor: v(w) = ν1(w1), ..., νn(wn).
-
Hierbei werden Codesequenz-Segmente und Pfadsegmente durch v[i,j] = νi, ..., νj bzw. w[i,j] = wi, ..., wj bezeichnet. Bezeichnend der sogenannte „Syndrom-Trellis” kann unter Verwendung seiner Paritätsprüfungsmatrix erhalten werden [16]. Der Syndrom-Trellis ist in dem Sinne minimal, als dieser Trellis die minimal mögliche Anzahl |S| von Knoten unter allen möglichen Trellis-Darstellungen desselben Codes aufweist.
-
Der Begriff „Trellis-basiertes sequenzielles Stapeldecodieren” bezieht sich auf einen Stapelalgorithmus, d. h. ein iteratives Decodierungsverfahren, wie das in [15] vorgestellte, wobei ein Stapel erforderlich ist, um Zwischenergebnisse zu speichern. Der Stapel enthält Codesequenzen verschiedener Längen. Sei vt eine Codesequenz der Länge t, d. h. vt = ν1, ..., νt. Jede Codesequenz ist mit einer Metrik und einem Knoten σt assoziiert. Der Knoten σt ist derjenige Knoten in dem Trellis, der erreicht wird, wenn man dem Pfad folgt, der zu der Codesequenz durch den Trellis korrespondiert. In jeder Iteration bewertet die Metrik jede Codesequenz und der Stapel wird gemäß diesen metrischen Werten geordnet, wobei die Codesequenz an der Spitze des Stapels diejenige mit dem größten metrischen Wert ist. Die Codesequenz, die nach der abschließenden Iteration zu dem obersten Pfad im Stapel korrespondiert, stellt das geschätzte Codewort dar. Eine genauere Erläuterung der Trellis-basierten sequenziellen Stapeldecodierung wird nachfolgend unter Bezugnahme auf die 3 bis 8 beruhend auf speziellen einfachen Beispielcodes gegeben. Hierbei wird die Trellis-basierte sequenzielle Stapeldecodierung verwendet, um die inneren Blockcodes des übergeordneten GCC für eine gegebene aktuelle Ebene des GCC zu decodieren, wobei die Decodierung Ebene für Ebene erfolgt.
-
Im Allgemeinen hängt die Menge an Speicherplatz, die ein Trellis-basierter Decodierer zum Speichern eines Trellis benötigt, von der Anzahl der Knoten in dem Trellis ab. Beispielsweise könnte jeder Knoten zumindest Speicherplatz zum Speichern von zwei Adressen benötigen, die zu zwei verschiedenen Zeigern auf Knoten in der nachfolgenden Ebene des Trellis korrespondieren. Des Weiteren ist die maximale Anzahl von Knoten bei einer gegebenen Tiefe des Trellis gleich der Anzahl von Redundanzbits, d. h. Paritätsbits, des Codes. Dementsprechend benötigt ein Code der Länge n und der Dimension k und somit (n – k) Redundanzbits eine maximale Anzahl von n·2(n-k) Knoten und ausreichenden Speicherplatz um den entsprechenden Trellis zu speichern. Bei dem oben genannten Beispiel mit zwei Zeigern pro Knoten ergeben sich somit insgesamt 2n·2(n-k) Zeiger.
-
Da bei dem hier diskutierten GCC die Anzahl der Redundanzbits von Ebene zu Ebene ansteigt, wächst der erforderliche Speicherplatz mit jeder zusätzlichen (höheren) Ebene drastisch an und somit sinkt die Platzeffizienz eines entsprechenden Decodierers entsprechend, je mehr Ebenen und Redundanzbits in dem Code verwendet werden.
-
Die Lösung gemäß dem ersten Aspekt der vorliegenden Erfindung tritt dieser wachsenden Platzineffizienz durch Verwendung des Konzepts der Supercodes entgegen, wobei ein innerer Code B(l) einer aktuellen Ebene durch eine Schnittmenge B(l) = B1 (l) ⋂ B2 (l) von zwei Supercodes B1 (l) und B2 (l) repräsentiert wird. Jeder der Supercodes weist eine geringere Anzahl von Redundanzbits als der innere Code B(l) der aktuellen Ebene und somit weniger zu speichernde Trellis-Knoten auf. Das Konzept der Supercode-Decodierung ist sehr gut zur Decodierung von GC-Codes geeignet, weil aufgrund der Konstruktion der GC-Codes, bei denen ein innerer Code einer niedrigeren Ebene stets ein Supercode jedes nachfolgenden höheren inneren Codes ist, das Konzept der Wiederverwendung bereits gespeicherter Subcodes der vorausgehenden niedrigeren Ebenen als Supercodes zur Decodierung nachfolgender höherer Ebenen eine signifikante Einsparung von Speicherplatz und somit eine erhöhte Platzeffizienz liefert. Ein numerisches Beispiel zur Demonstration dieses Speichereinspareffekts wird nachfolgend im Abschnitt ”Detaillierte Beschreibung” der Erfindung gegeben.
-
Ein zweiter Aspekt der vorliegenden Erfindung betrifft ebenso ein Softinput-Decodierungsverfahren für verallgemeinerte verkettete Codes, GCC, wobei der GCC aus L inneren verschachtelten linearen binären Blockcodes B(...), vorzugsweise binären erweiterten Bose-Chaudhuri-Hocquenghem, BCH, -Codes und L äußeren Codes – vorzugsweise Blockcodes wie etwa Reed-Solomon, RS, -Codes – konstruiert ist, wobei L ≧ 2 die Anzahl der Ebenen des GCC angibt und der innere Code einer höheren Ebene ein Subcode des inneren Codes der vorausgehenden niedrigeren Ebenen, soweit vorhanden, ist. Das Verfahren verwendet eine oder mehrere Decodierungsvorrichtungen, d. h. Decoder, um iterativ Ebene für Ebene von einem Datenkanal, beispielsweise von einer nichtflüchtigen Speichervorrichtung wie etwa einem Flashspeicher, empfangene Originaldaten zu decodieren.
-
Für jede Ebene weist das Verfahren die folgenden Schritte auf:
- (i) einen ersten Decodierungsschritt zum Decodieren von Eingangsdaten der aktuellen Ebene l beruhend auf den inneren Blockcodes der aktuellen Ebene l und zur Bereitstellung von entsprechenden decodierten Ausgangsdaten, wobei die Eingangsdaten der niedrigsten Ebene die Originaldaten aufweisen und die Eingangsdaten jeder nachfolgenden Ebene auf dem Decodierungsergebnis der vorausgehenden Ebene beruhen; und
- (ii) einen nachfolgenden zweiten Decodierungsschritt zum Decodieren des äußeren Codes der aktuellen Ebene l beruhend auf den Ausgangsdaten des ersten Decodierungsschritts, um ein Decodierungsergebnis der aktuellen Ebene l zu schätzen, wobei das Decodierungsergebnis der höchsten Ebene als die decodierten Daten ausgegeben wird.
-
Hierbei weist der erste Decodierungsschritt wenigstens einer der Ebenen auf: (a) sequenzielles Stapeldecodieren der Eingangsdaten der aktuellen Ebene l, beruhend auf einem Trellis des inneren Blockcodes der aktuellen Ebene l, wobei als Softinput Informationen verwendet werden, welche die Zuverlässigkeit des Datenkanals charakterisieren, wobei das sequenzielle Stapeldecodieren konfiguriert ist, nur solche in den Ausgangsdaten des ersten Decodierungsschritts enthaltene Codewörter zu liefern, die durch den Trellis repräsentiert werden; und (b) Auswählen, als Ausgangsdaten des ersten Decodierungsschritts der aktuellen Ebene l: (1) eine erste Schätzung der Ausgangsdaten, die aus der sequenziellen Stapeldecodierung der Eingangsdaten der aktuellen Ebene resultiert, falls ihr gemäß einer vorbestimmten Metrik bewerteter metrischer Wert eine vorbestimmte Schwelle überschreitet oder gemäß der Metrik besser ist als der entsprechende metrische Wert einer zweiten Schätzung der Ausgangsdaten, die aus einem zweiten Durchlauf des sequenziellen Stapeldecodierens resultiert, bei dem die erste Schätzung der Ausgangsdaten ausgeschlossen ist, und (2) andernfalls die zweite Schätzung der Ausgangsdaten.
-
Das Verfahren gemäß dem zweiten Aspekt der vorliegenden Erfindung betrifft die sogenannte „Listen-Decodierung” (engl. list decoding), insbesondere die ”Liste-aus-Zwei”(engl. list-of-two)-Decodierung, wobei es sich um eine Alternative gegenüber der eindeutigen (engl. unique) Decodierung von Fehlerkorrekturcodes für hohe Fehlerraten handelt. Während die eindeutige Decodierung nur ein einziges Ergebnis, beispielsweise ein einziges Codewort, als Decodierungsergebnis liefert, besteht die Hauptidee bei der Listen-Decodierung darin, dass der Decodierungsalgorithmus anstelle eines einzigen möglichen Ergebnisses (beispielsweise Codewords) eine Liste möglicher Ergebnisse ausgibt, von denen eines korrekt oder aber zumindest eine bevorzugte Schätzung ist. Dies ermöglicht es, eine größere Anzahl von Fehlern zu behandeln als sie bei eindeutiger Decodierung erlaubt wären. Im Falle der Liste-aus-Zwei-Decodierung ist die Liste möglicher Ergebnisse auf zwei Ergebnisse begrenzt. Die spezifische Form der Liste-aus-Zwei-Decodierung, wie sie gemäß dem zweiten Aspekt der vorliegenden Erfindung verwendet wird, kann als „sequenzielle Liste-aus-Zwei-(Stapel)-Decodierung” bezeichnet werden.
-
Um einen Ausgleich zwischen Performanz und Komplexität zu ermöglichen, führt das Verfahren eine Schwelle ρ für die Metrik des geschätzten Codeworts ein, die im Vergleich zu ähnlichen eindeutigen Codierungsalgorithmen mit vergleichbarer Komplexität eine Reduktion der Restwortfehlerrate ermöglicht, und somit auch die Verwendung von höheren Coderaten bei vergleichbarer Fehlerrate erlaubt. Die Verwendung einer Kombination aus sequenzieller Stapeldecodierung von GCCs mit einer Liste-aus-Zwei-Decodierung ist durch die Tatsache motiviert, dass das Verfahren gemäß dem ersten Aspekt der Erfindung kein Maximum-Likelihood-Decodierungsverfahren ist. Folglich ist eine Suche nach weiteren Codeworten zum Auffinden von sogar noch besseren Codewordkandidaten gerechtfertigt, insbesondere bei Anwendungen, wo sehr geringe Restfehlerraten oder sehr hohe Coderaten erreicht werden müssen. Dies kann insbesondere auf die Decodierung von Daten zutreffen, die aus einem Kanal mit einem nicht flüchtigen Speicher, wie etwa einem Flashspeicher, gelesen werden, insbesondere falls ein solcher Speicher in Verbindung mit Applikationen verwendet wird, die sich auf Sicherheit im Sinne von Sicherung oder von Gefahrlosigkeit oder auf kritische Infrastruktur beziehen.
-
Gemäß einer bevorzugten Ausführungsform des Verfahrens gemäß dem zweiten Aspekt weist der erste Decodierungsschritt wenigstens einer von der niedrigsten Ebene verschiedenen aktuellen Ebene l ein Trellis-basiertes sequenzielles Stapeldecodieren der Eingangsdaten der aktuellen Ebene auf, wobei als Softinput Informationen verwendet werden, welche die Zuverlässigkeit des Datenkanals charakterisieren. Das sequenzielle Stapeldecodieren beruht auf einem ersten Trellis, der einen ersten Supercode B
1 (l) des inneren Blockcodes B
(l) der aktuellen Ebene l repräsentiert, und auf einem zweiten Trellis, der einen zweiten Supercode B
2 (l) von B
(l) repräsentiert, mit B
(l) = B
1 (l) ⋂ B
2 (l), wobei ein Supercode von B
(l) ein Code ist, der sämtliche Codewörter von B
(l) aufweist und die jeweilige Redundanz des ersten Supercodes B
1 (l) und des zweiten Supercodes B
2 (l) geringer ist als die von B
(l). Der korrespondierende innere Code
der unmittelbar vorausgehenden Ebene l – 1 wird als einer der Supercodes B
1 (l) und B
2 (l) wiederverwendet. Des Weiteren ist das sequentielle Stapeldecodieren konfiguriert, nur solche in den Ausgangsdaten des ersten Decodierungsschritts enthaltene Codewörter zu liefern, die sowohl durch den ersten Trellis als auch durch den zweiten Trellis repräsentiert werden.
-
Auf diese Weise können die Verwendung von Supercodes zur Erhöhung der Platzeffizienz und die Verwendung von Liste-aus-Zwei-Decodierung zur Erhöhung der verfügbaren Coderate und/oder zur Reduktion der Restfehlerraten kombiniert und beide realisiert werden.
-
Nachfolgend werden bevorzugte Ausführungsformen der Verfahren gemäß dem ersten und gemäß dem zweiten Aspekt der vorliegenden Erfindung beschrieben, die beliebig miteinander oder mit weiteren Aspekten der vorliegenden Erfindung kombiniert werden können, soweit eine solche Kombination nicht explizit ausgeschlossen oder technisch unmöglich ist.
-
Gemäß einer bevorzugten Ausführung weist das Verfahren des Weiteren ein Anwenden einer Hard-Decodierung zur Decodierung der inneren Blockcodes im ersten Decodierungsschritt einer ersten Ebene des GCC auf, wobei die erste Ebene vorzugsweise die niedrigste Ebene ist, bevor sequenzielles Stapeldecodieren bezüglich einer höheren Ebene, beruhend auf einem Trellis des inneren Blockcodes der höheren Ebene und unter Verwendung von die Zuverlässigkeit des Datenkanals charakterisierenden Softinputinformationen angewandt wird. Dies erlaubt eine Reduktion der Komplexität für das Decodieren der inneren Codes der genannten ersten Ebene im Vergleich zur Softinput-Decodierung und somit kürzere Verarbeitungszeiten.
-
In einer bevorzugten Variante davon, weist der erste Decodierungsschritt für zumindest ein in den Eingangsdaten der aktuellen Ebene enthaltenes Datenwort ein Feststellen dahingehend auf, ob das aus einer Hard-Entscheidungsdecodierung des Datenworts resultierende Codeword zu einem gültigen Codeword des inneren Blockcodes B der aktuellen Ebene korrespondiert. Auf diese Weise kann Softinput-Decodierung und ihre zugehörige Verarbeitungszeit und auf Wände in solchen Fällen vermieden werden, wo die Hard-Entscheidung-Decodierung eines empfangenden Worts in den Eingangsdaten der ersten Ebene (insbesondere in den Originaldaten, falls die erste Ebene die niedrigste Ebene ist) zu einem gültigen Codeword des entsprechenden inneren Codes der genannten Ebene korrespondiert. Falls des Weiteren, wie im nachfolgenden Abschnitt „detaillierte Beschreibung” gezeigt werden wird, ein Wort in den Eingangsdaten zu einem gültigen Codewort korrespondiert, repräsentiert dieses Codewort tatsächlich die Maximum-Likelihood-Schätzung und somit ein optimales Decodierungsergebnis für den genannten inneren Blockcode.
-
Gemäß einer weiteren bevorzugten Ausführungsform ist die Metrik, die während des sequenziellen Stapeldecodierens angewandt wird, um während des Decodierens auftretende Codesequenzen zu bewerten und den Stapel anhand der aus dieser Bewertung resultierenden metrischen Werte zu sortieren, entweder die Fanometrik oder die quadratische Euklidische Entfernungsmetrik, oder eine Kombination daraus. Des Weiteren dient der Softinput, der die Zuverlässigkeit des Datenkanals charakterisiert, als eine Eingangsvariable der Metrik.
-
Die Fanometrik ist definiert, wie nachfolgend beschrieben. Sei ν
i das i-te Codebit und r
i das i-te empfangene Symbol zur Übertragung über einen diskreten speicherlosen Kanal. Die Fanometrik für ein Codebit ν
i ist definiert durch:
wobei p(r
i|ν
i) die Kanalübergangswahrscheinlichkeit und p(r
i) die Wahrscheinlichkeit dafür, am Kanalausgang r
i zu beobachten, sind. Der Term
ist ein Eichterm, der typischerweise so gewählt wird, dass er gleich der Coderate R ist [34]. Die Fanometrik einer Codesequenz v
t ist
wobei r
t die Sequenz der ersten t empfangenen Symbole ist. Es ist zu beachten, dass die Fanometrik gemäß den vorausgehenden Gleichungen nur für diskrete speicherlose Kanäle (engl. discrete memoryless channel, DMC) definiert ist. Wir betrachten den quantisierten AWGN-Kanal, wobei es sich um einen DMC handelt. Binäre Blockcodes weisen typischerweise keine Baumstruktur auf. Folglich ist die Fanometrik nicht notwendigerweise die beste Metrik für sämtliche binären Blockcodes. Beispielsweise wurde in [35] eine Metrik mit einem variablen Eichterm für lineare Blockcode vorgeschlagen. Jedenfalls insbesondere dann, wenn speziell binäre BCH-Codes als innere Blockcodes ausgewählt werden, liefert
= R gute Ergebnisse für alle betrachteten Kanalbedingungen.
-
Die quadratische Euklidische Entfernungsmetrik ist definiert als:
wobei der übertragene Symbolvektor x durch einen Rauschvektor n gestört wird, sodass die empfangene Sequenz, d. h. die aus dem Kanal empfangenen Originaldaten, r = x + n ist. Eine Auswahl der quadratischen Euklidischen Entfernungsmetrik als die in Verbindung mit dem hier beschriebenen Decodierungsverfahren verwendete Metrik ist insbesondere dann nützlich, wenn der Kanal als ein AWGN Kanal betrachtet werden kann.
-
Gemäß einer weiteren bevorzugten Ausführungsform ist der Blockcode der niedrigsten Ebene der inneren verschachtelten Blockcodes ein Einfachfehlerkorrekturcode, d. h. ein Code, dessen Fehlerkorrekturfähigkeit auf die Korrektur eines einzigen Fehlers in dem empfangenen zu decodierenden Datenwort begrenzt ist. Dies ermöglicht eine besonders zeit- und platzeffiziente Implementierung, weil die Gesamtanzahl von Redundanzbits, die in dem GCC für die inneren Blöcke verwendet wird, auf diese Weise minimiert werden kann, was sowohl die Verarbeitungszeit für den Decodierungsalgorithmus als auch den benötigten Speicherplatz, insbesondere für die Speicherung der involvierten Trellise, beeinflusst.
-
Gemäß einer weiteren bevorzugten Ausführungsform sind die inneren Codes verschachtelte binäre erweiterte Bose-Chaudhuri-Hocquenghem, BCH, -Codes und der erweiterte BCH-Code in der niedrigsten Ebene der inneren verschachtelten BCH-Codes ist ein bloßer Einfachparitätsprüfungs-, SPC, -Code. Des Weiteren weist der erweiterte BCH-Code wenigstens einer höheren Ebene der inneren verschachtelten BCH-Codes eine Fehlerkorrekturfähigkeit auf und ist ein Subcode des BCH-Codes der niedrigsten Verschachtelungsebene. BCH-Codes sind lineare binäre Blockcodes, die eine besonders geeignete Auswahl für die inneren Codes des genannten GCC darstellen. Während Codekonstruktionen, bei denen auch die inneren Blockcodes der niedrigsten Ebene eine Fehlerkorrekturfähigkeit aufweisen, typischerweise auf Codes mit einer Gesamtcoderate von weniger oder gleich 0,9 beschränkt sind, was für Flashspeicher, die nur einen kleinen Extraspeicherbereich zum Speichern der für die ECC benötigten Redundanz aufweisen, nicht geeignet ist, ermöglicht das Codierungsverfahren gemäß dieser Ausführungsform hochratige GC-Codes mit Coderaten oberhalb von 0,9. Dementsprechend können solche GC-Codes verwendet werden, um Daten zu codieren, die in Speichern, beispielsweise Flashspeichern, welche nur einen kleinen Extraspeicherbereich bereitstellen, zu speichern sind. Trotz der Verwendung eines bloßen SPC anstelle von höheren BCH-Codes in der niedrigsten Verschachtelungsebene können vergleichbare ECC-Fehlerkorrekturniveaus erreicht werden und somit die Effizienz (Coderate) des Codes erhöht werden. In anderen Worten, aufgrund der erhöhten Coderate kann die Effizienz solcher Speicher bezüglich ihrer Speicherkapazität für Nutzdaten verbessert werden. Weitere Varianten und Verbesserungen zu dieser Ausführungsform sind in
DE 10 2017 107 431.7 der gleichen Anmelderin beschrieben, deren Offenbarung hiermit vollumfänglich per Verweis aufgenommen wird.
-
Gemäß einer weiteren bevorzugten Ausführungsform sind die aus einem Datenkanal empfangenen Originaldaten in einer zweidimensionalen Originaldaten Matrix angeordnet, die eine erste Dimension na gleich der Länge der äußeren Codes sowie eine zweite Dimension nb gleich der Länge der inneren Blockcodes aufweist, wobei eine Linie der ersten Dimension einer Matrix eine Zeile der Matrix und eine Linie ihrer zweiten Dimension eine Spalte der Matrix ist, oder andersherum. Die äußeren Codes sind über ein Galois-Feld GF(2m) definiert, sodass m Elemente jeder Linie der zweiten Dimension ein Symbol des Galois-Felds GF(2m) repräsentieren. Des Weiteren:
- (a) eine erste Iteration, die zu der niedrigsten Ebene der inneren Blockcodes der Originaldaten Matrix korrespondiert, wobei der erste Decodierungsschritt aufweist:
– Anwenden eines Decodierungsschemas des inneren Blockcodes der niedrigsten Ebene auf die Linien der zweiten Dimension der Originaldatenmatrix bezüglich der niedrigsten Ebene der inneren verschachtelten Blockcodes, in denen die Linien einer zweiten Dimension der Originaldatenmatrix codiert sind, um eine vorläufige Decodierdatenmatrix der ersten Iteration zu erhalten und Löschinformationen zu bestimmen, welche die Linien der zweiten Dimension der Originaldatenmatrix charakterisieren, in denen beruhend auf der Decodierung der inneren Blockcodes eine Löschung detektiert wurde;
– Entnehmen der Informationsbits, die in den Linien der zweiten Dimension der vorläufigen Decodierdatenmatrix der ersten Iteration enthalten sind, um Codesymbole (ai,j) der äußeren Codes wiederzugewinnen, in denen die Linien einer ersten Dimension der Originaldatenmatrix codiert sind; und
der zweite Decodierungsschritt aufweist:
– Anwenden einer äußeren Decodierung, die zu den entsprechenden äußeren Codes korrespondiert, auf die wiedergewonnenen Codesymbole in den Linien der ersten Dimension der vorläufigen Decodierdatenmatrix der ersten Iteration, um eine Teildecodierungsergebnismatrix der ersten Iteration zu erhalten, wobei die Löschinformationen während der äußeren Decodierung verwendet werden, um fehlerhafte Symbole des äußeren Codes in der vorläufigen Decodierdatenmatrix der ersten Iteration zu identifizieren;
– Zurückcodieren der Teildecodierungsergebnismatrix der ersten Iteration durch Anwendung eines Codierungsschemas des inneren Blockcodes der niedrigsten Ebene auf die zweite Dimension dieser Matrix, um eine zurückcodierte Matrix der ersten Iteration zu erhalten;
– Subtrahieren der zurückcodierten Matrix der ersten Iteration von der Originaldatenmatrix, um eine Startmatrix für eine nachfolgende weitere Iteration zu erhalten; und
- (b) für jede der weiteren Ebenen der inneren Blockcodes, eine entsprechende weitere Iteration, wobei der erste Decodierungsschritt jeder entsprechenden Ebene aufweist:
– Anwenden eines Decodierungsschemas des inneren Blockcodes der aktuellen Ebene auf die Linien der zweiten Dimension der Startmatrix der aktuellen Iteration bezüglich der aktuellen Ebene der inneren Blockcodes, in denen die Linien einer zweiten Dimension der Startmatrix der aktuellen Iteration codiert sind, um eine vorläufige Decodierdatenmatrix der aktuellen Iteration zu erhalten;
– Entnehmen der Informationsbits, die in den Linien der zweiten Dimension der vorläufigen Decodierdatenmatrix der aktuellen Iteration enthalten sind, um Codesymbole der äußeren Codes wiederzugewinnen, in denen die Linien einer ersten Dimension der Originaldatenmatrix codiert sind;
– Anwenden einer äußeren Decodierung, die zu den entsprechenden äußeren Codes korrespondiert, welche zur Erzeugung der ursprünglichen Originaldatenmatrix während des Codierens verwendet wurden, auf die wiedergewonnenen Codesymbole in den Linien der ersten Dimension der vorläufigen Decodierdatenmatrix der aktuellen Iteration, um eine Teildecodierungsergebnismatrix der aktuellen Iteration zu erhalten;
– falls die aktuelle Iteration zu der höchsten Verschachtelungsebene der inneren Blockcodes in der Originaldatenmatrix korrespondiert, Ausgeben der Teildecodierungsergebnismatrix der aktuellen Iteration als die decodierten Daten, und
– andernfalls, Zurückcodierung der Teildecodierungsergebnismatrix der aktuellen Iteration durch Anwendung eines Codierungsschemas des inneren Blockcodes der aktuellen Ebene auf die zweite Dimension dieser Matrix, um eine zurückcodierte Matrix der aktuellen Iteration zu erhalten, und Subtrahieren der zurückcodierten Matrix der aktuellen Iteration von der Startmatrix der aktuellen Iteration, um eine Startmatrix für eine nachfolgende weitere Iteration zu erhalten.
-
Auf diese Weise kann eine besonders zeiteffiziente Implementierung der Decodierungsverfahren gemäß dem ersten und dem zweiten Aspekt erreicht werden, wobei die Matrix Darstellung verwendet wird, um eine geeignete Struktur bereitzustellen, auf der beruhend die einzelnen Verfahrensschritte des Verfahrens ausgeführt werden.
-
Gemäß einer weiteren bevorzugten Ausführungsform wird in zumindest einem, bevorzugt jedem, ersten Decodierungsschritt, der ein sequenzielles Stapeldecodieren einsetzt, das decodieren eines Datenworts aus den Eingangsdaten des inneren Codes der aktuellen Ebene beendet, wenn (i) die maximale mögliche Pfadlänge erreicht ist, wobei der Trellis Pfad mit dem besten metrischen Wert unter allen bislang im Stapel angesammelten Pfaden als das decodierte Codewort, das zu dem Datenwort korrespondiert, ausgewählt wird; oder (ii) eine vorbestimmte maximal Anzahl von Iterationen durchlaufen wurden. Während der Fall (i) zu einer regulären Vollendung des Decodierungsalgorithmus korrespondiert, kann der Fall (ii) verwendet werden, um einen fehlgeschlagenen Decodierungslauf zu beenden und somit einen Zeitverlust aufgrund eines Decodierungsfehlers vermeiden, der andernfalls die Ausführung weiterer dann zweckloser Decodierungszyklen verursachen würde.
-
Speziell werden in einer bevorzugten Variante, falls die Beendigung deshalb erfolgt, weil eine vorbestimmte maximale Anzahl von Iterationen durchlaufen wurde, die Ausgangsdaten des aktuellen ersten Decodierungsschritts als Löschsymbol für den korrespondierenden, im zweiten Decodierungsschritt der aktuellen Ebene verwendeten äußeren Code markiert. Dies ermöglicht den Einsatz sowohl von Fehler- als auch Lösch-Decodierung der äußeren Codes, wobei die Decodierfehler der inneren Codes als gelöschte Symbole des äußeren Codes, beispielsweise eines äußeren RS-Codes, betrachtet werden.
-
Ein dritter Aspekt der vorliegenden Erfindung betrifft eine Decodierungsvorrichtung, die eingerichtet ist, das Decodierungsverfahren gemäß dem ersten und/oder dem zweiten Aspekt der vorliegenden Erfindung, insbesondere einschließlich einer oder mehrerer von deren hierin beschriebenen bevorzugten Ausführungsformen, auszuführen.
-
Gemäß einer bevorzugten Ausführungsform weist die Vorrichtung eine Mehrzahl von einzelnen Speichern oder Speicherbereichen auf, vorzugsweise vom Nur-Lesen-(ROM)-Typ, auf die gleichzeitig zugegriffen werden kann, und von denen jeder konfiguriert ist, eine Datenrepräsentation eines in dem Decodierungsverfahren verwendeten Trellis zu speichern. Auf diese Weise ist ein paralleler Zugriff auf die verschiedenen Speicher bzw. Speicherbereiche ermöglicht, insbesondere zum Lesen von Daten, welche verschiedene bei der Decodierung verwendete Trellise darstellen, was eine sogar noch schnellere Verarbeitung fördert und somit verwendet werden kann, und zumindest teilweise den im Vergleich zur einfachen Hard-Decodierung und/oder zur eindeutigen Decodierung zusätzlichen Zeitaufwand für die Softinput-Decodierung und/oder die Liste-aus-Zwei-Decodierung zu kompensieren. Die Verwendung eines ROM-Speichers zum Speichern von Datenrepräsentation des Trellis ist aufgrund von dessen typischerweise sehr hoher Speicherdichte besonders vorteilhaft. Dies kann verwendet werden, um die Platzeffizienz der Decodierungsvorrichtung bzw. eines Speichersystems, das eine solche Decodierungsvorrichtung sowie damit in Beziehung stehende Speichervorrichtungen aufweist, weiter zu erhöhen.
-
Ein vierter Aspekt der vorliegenden Erfindung betrifft ein nichtflüchtiges Speichersystem, aufweisend (i) ein Speicherfeld mit einer Mehrzahl von Zellen, die konfiguriert sind, eine Mehrzahl von Datenbits und eine Mehrzahl von Paritätsbits, die aus der Mehrzahl von Datenbits gemäß einem Codierungsschema beruhend auf verallgemeinerten verketteten Codes, GCC, berechnet sind, zu speichern, wobei der GCC aus inneren verschachtelten linearen binären Blockcodes, vorzugsweise aus binären erweiterten Bose-Chaudhuri-Hocquenghem, BCH, Codes, und äußeren Codes, vorzugsweise Reed-Solomon-, RS, -Codes, konstruiert ist; und (ii) eine die Codierungsvorrichtung gemäß dem dritten Aspekt der vorliegenden Erfindung oder einer oder mehreren von deren hierin beschriebenen bevorzugten Ausführungsformen, wobei die Codierungsvorrichtung konfiguriert ist, die GCC-codierten Originaldaten von dem Speicherfeld zu empfangen und zu decodieren.
-
Schließlich betrifft ein fünfter Aspekt der vorliegenden Erfindung ein Computerprogramm oder ein Computerprogrammprodukt, welches Instruktionen enthält, die bei ihrer Ausführung auf einem oder mehreren Prozessoren einer Decodierungsvorrichtung, beispielsweise gemäß dem dritten Aspekt der Erfindung, die Decodierungsvorrichtung veranlassen, das Verfahren gemäß dem ersten und/oder dem zweiten Aspekt der vorliegenden Erfindung auszuführen, insbesondere gemäß einer oder mehrerer seiner hierin beschriebenen bevorzugten Ausführungsformen.
-
Das Computerprogrammprodukt kann insbesondere in der Form eines Datenträgers implementiert sein, auf denen ein oder mehrere Programme zur Ausführung des Verfahrens gespeichert sind. Vorzugsweise handelt es sich dabei um einen Datenträger wie etwa eine CD, eine DVD oder ein Flashspeichermodul. Dies kann vorteilhaft sein, wenn das Computerprogrammprodukt dazu vorgesehen ist, als individuelles Produkt unabhängig von der Prozessorplattform, auf der das eine bzw. die mehreren Programme auszuführen sind, vermarktet zu werden. In einer anderen Implementierung wird das Computerprogrammprodukt als eine Datei auf einer Datenverwaltungseinheit, die insbesondere ein Server sein kann, bereitgestellt und sie kann über eine Datenverbindung, beispielsweise über das Internet oder eine dedizierte Datenverbindung wie etwa ein proprietäres oder lokales Netzwerk, heruntergeladen werden.
-
Die hier im Zusammenhang mit den Verfahren gemäß dem ersten bzw. dem zweiten Aspekt der vorliegenden Erfindung beschriebenen Vorteile und Nutzen gelten mutatis mutandis auch für ihre weiteren Aspekte.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
Weitere Vorteile Merkmale und Anwendungen der vorliegenden Erfindung sind in der nachfolgenden detaillierten Beschreibung und den angehängten Figuren enthalten, wobei:
-
1 gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung schematisch eine Konstruktion eines GC-Codes illustriert, beginnend mit in einer Datenmatrix angeordneten Originaldaten, die in eine korrespondierende Codewortmatrix zu codieren ist;
-
2 schematisch eine vereinfachte Version des Codierungsschemas aus 1 in größerem Detail illustriert;
-
3 Trellise eines Beispielcodes sowie von zwei seiner Supercodes illustriert. Trellis a) ist eine Darstellung des kompletten Codes, während die Trellise b) und c) die Darstellungen der Supercodes sind;
-
4 einen Vergleich von Algorithmus 1 und Algorithmus 3 bezüglich der Restwortfehlerrate (WER) zeigt;
-
5 einen Vergleich von Algorithmus 1 und Algorithmus 3 bezüglich der Anzahl von Iterationen zeigt;
-
6 gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung schematisch ein Decodierungsschema für eine Codewortmatrix illustriert, die gemäß dem Codierungsschema aus 2 erhältlich ist;
-
7 ein Diagramm zeigt, das bei einer beispielhaften Ausführungsform für eine Wahrscheinlichkeit Pe = 10–10 für das Auftreten des Ereignisses, dass zumindest eine Ebene fehlerhaft ist, die Coderate gegenüber dem Rausch-zu Signal-Verhältnis aufträgt;
-
8 ein Diagramm zeigt, das bei einer beispielhaften Ausführungsform für eine Wahrscheinlichkeit Pe = 10–16 für das Auftreten des Ereignisses, dass zumindest eine Ebene fehlerhaft ist, die Coderate gegenüber dem Rausch-zu Signal-Verhältnis aufträgt;
-
9 schematisch gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung ein Speichersystem mit einer Codierungsvorrichtung, insbesondere einer Decodierungsvorrichtung, welche in einem Speichercontroller enthalten ist, illustriert;
-
10 ein Blockdiagramm einer Decodierungsvorrichtung für sequenzielles Decodieren gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung zeigt;
-
11 ein Blockdiagramm eines Prioritäts-Queueelements der Decodierungsvorrichtung aus 10 zeigt; und
-
12 ein Diagramm, das die durchschnittliche Anzahl von Iterationen für die auf Algorithmus 2 beruhende Decodierung der ersten und der zweiten Ebene, gemäß einer bevorzugten Ausführung der vorliegenden Erfindung, als Funktion des Signal-zu-Rausch-Verhältnisses zeigt.
-
DETAILLIERTE BESCHREIBUNG
-
I. GC-KONSTRUKTION
-
Die hier illustrierten Codierungsverfahren beruhen auf der Verwendung von GC-Codes zur Fehlerkorrektur in Speichern, wie etwa Flashspeichern, die hochratige Codes erfordern. Die GC-Codes sind aus inneren verschachtelten binären Bose-Chaudhuri-Hocquenghem(BCH)-Codes und äußeren Reed-Solomon (RS) Codes konstruiert. Für die inneren Codes werden erweiterte BCH-Codes verwendet, wobei Einfachparitätsprüfungscodes in der ersten Ebene des GCC-Codes angewandt werden (vgl. 1 und 2). Diese Konstruktion ermöglicht hochratige GC-Codes. Eine detaillierte allgemeine Diskussion von GC-Codes findet sich in [5].
-
Nun wird auf 1 Bezug genommen, die eine Konstruktion eines GC-Codes beginnend mit Originaldaten, die in einer Datenmatrix angeordnet sind, welche in eine korrespondierende Codewortmatrix zu codieren ist, illustriert, d. h. einen Codierungsprozess der zu einem GC-Code führt, der geeignet ist durch die Decodierungsverfahren und -vorrichtungen gemäß der vorliegenden Erfindung decodiert zu werden. Die Originaldaten sind in einer nb×na Matrix angeordnet, wobei na und nb die Längen des äußeren bzw. des inneren Codes sind. Die Codierung beginnt mit den äußeren Codes. Die Zeilen sind durch L äußere Codes, beispielsweise Reed-Solomon Codes, der Länge na geschützt, d. h. L bezeichnet die Anzahl der Ebenen. m Elemente jeder Spalte repräsentieren ein Symbol des Galois-Felds GF(2m). Dementsprechend bilden m benachbarte Zeilen ein Codewort eines äußeren Codes A(i), i = 0, ..., L – 1. Es ist zu vermerken, dass die Coderate der äußeren Codes von Ebene zu Ebene ansteigt. Die äußeren Codes schützen Lm Zeilen der Matrix. Die verbleibenden nb – Lm Zeilen werden für die Redundanz der inneren Codes verwendet.
-
Die schraffierte Fläche in 1 illustriert die Redundanzen der Codekomponenten, die durch die äußere und innere Codierung befüllt werden. Nach der äußeren Codierung werden die Spalten der Codewortmatrix mit den binären inneren Codes der Länge nb codiert. Jede Spalte der Codewortmatrix ist die Summe von L Codeworten der verschachtelten linearen BCH-Codes. B(L-1) ⊆ B(L-2) ⊆ ... ⊆ B(0) (1)
-
Somit ist ein Code einer höheren Ebene ein Subcode seines Vorgängers, wobei die höheren Ebenen höhere Fehlerkorrekturfähigkeiten aufweisen, d. h. tb,L-1 ≥ tb,L-2 ≥ ... ≥ tb,0, wobei tb,i die Fehlerkorrekturfähigkeit der Ebene i ist. Die Codedimensionen sind k(0) = Lm, k(1) = (L – 1)m, ..., k(L-1) = m. Das Codewort bj der j-ten Spalte ist die Summe von L Codeworten.
-
-
Diese Codeworte bj (i) werden durch Codierung der Symbole aj,i mit dem korrespondierenden Subcode B(i) gebildet, wobei aj,i das j-te Symbol (m Bits) des äußeren Codes A(i) ist. Für diese Codierung werden dem Symbol aj,i (L – i – 1)m Null-Bits vorangestellt. Es ist zu vermerken, dass die j-te Spalte bj wegen der Linearität der verschachtelten Codes ein Codewort von B(0) ist.
-
2 illustriert dieses Codierungsschema in größerem Detail, beruhend auf einem einfachen beispielhaften Fall (Beispiel 0), bei dem L = 2, m = 3 und na = nb = 7 gewählt ist. Demnach gibt es in diesem Beispiel nur L = 2 Ebenen und mit m1 = m = 3 Bits pro Symbol sind die äußeren Codes, die für dieses Beispiel als RS-Codes gewählt sind, über dem Galois-Feld GF(23) konstruiert, während zum Zwecke der Vereinfachung die inneren Blockcodes, die für diese Beispiel als erweiterten BCH-Codes ausgewählt sind, über GF(23) definiert sind, d. h. m2 = 3. In einem ersten Schritt S1 wird eine Datenstruktur, welche eine nb×na Matrix (hier 7×7 Matrix) D repräsentiert, mit zu codierenden Daten befällt, welche aus 24 Informationsbits i0 bis i23 bestehen. Das Befüllungsschema korrespondiert zu demjenigen der Datenmatrix D in 2. Dementsprechend ist in der ersten Ebene (i = 0) die Anzahl der Informationsbits geringer als in der zweiten Ebene (i = 1) und die verbleibenden vorangestellten Bits beider Ebenen werden für die Redundanz reserviert, die in einem nachfolgenden Schritt S2 mittels der äußeren Codierung hinzugefügt wird.
-
Jedes Symbol weist drei benachbarte Bits derselben Spalte auf, sodass beispielsweise in der fünften Spalte von D die Bits i0, i3 und i6 ein erstes Symbol der Spalte bilden und die Bits i11, i16 i21 ein anderes Symbol bilden. Zusätzlich wird die letzte Zeile der Matrix D für Redundanz reserviert, die mittels der inneren Codierung in einem weiteren Schritt S3 hinzugefügt wird.
-
In dem Schritt S2 zur äußeren Codierung wird die Information in jeder der beiden Ebenen i = 0 und i = 1 mittels eines entsprechenden RS-Codes codiert, wobei die Codedimension des äußeren RS-Codes für die Ebene 0 nur ka (0) = 3 beträgt, während die Code Dimension der Ebene 1 auf ka (1) = 5 erhöht ist. Die Ausführung der äußeren Codierung im Schritt S2 resultiert in einer Zwischenmatrix A, welche die Codesymbole ai,j aufweist, wobei jedes dieser Symbole ai,j m1 = 3 Bits aufweist und die Zeilen der Matrix A Codewörter des äußeren Codes darstellen.
-
Bei dem Schritt S3 zur inneren Codierung wird jedes der Symbole ai,j der Zwischenmatrix A individuell mittels eines korrespondierenden inneren Codes in Form eines erweiterten BCH-Codes codiert. In der ersten Ebene i = 0 kann der entsprechende erweiterte BCH-Code B(0) insbesondere, wie in diesem Beispiel, auch ein bloßer Einfachparitätsprüfungs-(SPC)Code sein. Dementsprechend wird, wie in 2 für das Symbol a4,0 beispielhaft illustriert, jedes Symbol a0,j der Ebene 0 (j = 0, ..., 6) durch Voranstellen von (L – i – 1)·m1, d. h. (2 – 0 – 1)·3 = 3 Null-Bits (d. h. „0” Symbole) vor das Symbol und Anwenden eines SPC-Codes auf die zwei Symbole codiert, der in der letzten Zeile der Spalte hinzu addiert wird, die ein resultierendes Codewort bj (0) für die Spalte j und die Ebene 0 repräsentiert.
-
In der zweiten Ebene i = 1 wird der entsprechende erweiterte BCH-Code B(1), der anders als der SPC-Code eine Fehlerkorrekturfähigkeit von 1 Bit aufweist, in jeder Spalte der Matrix A auf das entsprechende Symbol aj,1 angewandt. Da dies in diesem einfachen Beispiel bereits die letzte Ebene ist, ist ein Voranstellen von „0”-Symbolen nicht erforderlich. Wiederum wird ein SPC-Code auf das resultierende BCH-Codeword angewendet und in der letzten Zeile der entsprechenden Spalte j hinzugefügt.
-
Um die abschließende GC-Codewortmatrix C zu erhalten, werden Spalte für Spalte sämtliche der individuellen Codeworte bj (i) aller Ebenen die der Spalte j gemäß der vorstehenden Formel (2) addiert, um das korrespondierende Codewort bj zu erhalten, das dann die Spalte j der sich ergebenden GC-Codewortmatrix C darstellt, wie nochmals beispielhaft in 2 für die Spalte j = 4 illustriert.
-
In einem weiteren Beispiel (Beispiel 1), das zu
1 korrespondiert, betrachten wir einen GC-Code, der zur Fehlerkorrektur bei Flashspeichern geeignet ist. Der GC-Code ist für 2 KB-Informationsblöcke entworfen, d. h. es ist ein Code, der verwendet werden kann, um 2 KB an Daten und zusätzlich Metainformationen zu speichern. Für diesen GC-Code nutzen wir L = 6 Ebenen mit inneren verschachtelten BCH-Codes über GF(2
6), d. h. m
2 = 6, sowie äußere RS-Codes über GF(2
9) (d. h. m
1 = 9). In der ersten Ebene i = 0 kann der innere Code einen einzigen Fehler korrigieren und daher sind sechs Redundanzbits erforderlich. Somit ist die Anzahl der Zeilen n
b = 6·9 + 6 = 60. Alle inneren Codes sind binäre BCH-Codes der Länge n
b = 60, wobei der Code B
(0) eine Dimension k
b,0 = 54 und eine Minimaldistanz d
b,0 = 3 aufweist. Die äußeren RS-Codes sind über dem Galois-Feld GF(2
9) konstruiert. Somit wird die Codedimension der inneren Codes von Ebene zu Ebene um m
1 = 9 Bits reduziert. Der GC-Code wird aus L = 6 äußeren RS-Codes der Länge n
a = 343 konstruiert. Die Parameter des Codes sind in Tabelle I zusammengefasst. Der Code hat insgesamt die Codedimension
und die Länge n = n
a·n
b = 20580. Der Code weist eine Coderate R = 0,806 auf. Das Design dieses Codes wird weiter unten erläutert.
j | kb,j | db,j | ka,j | da,j |
0 | 54 | 3 | 187 | 157 |
1 | 45 | 5 | 321 | 23 |
2 | 36 | 9 | 333 | 11 |
3 | 27 | 11 | 331 | 13 |
4 | 18 | 15 | 335 | 9 |
5 | 9 | 17 | 337 | 7 |
TABELLE I
-
Parameter des Codes aus Beispiel 1. kb,j und db,j sind die Codedimension bzw. die minimale Hammingdistanz des binären Codes der Ebene j. ka,j und da,j sind die Codedimension bzw. die minimale Hammingdistanz der äußeren RS-Codes.
-
Dieser Code ist auch in der Lage, Burstfehler zu korrigieren. Die minimale Distanz aller äußeren RS-Codes ist größer oder gleich fünf. Folglich kann jeder der äußeren Codes wenigstens zwei fehlerhafte Symbole korrigieren, und somit können zwei Spalten der Codewortmatrix durch eine beliebige Anzahl von Fehlern korrumpiert sein.
-
II. SEQUENZIELLE STAPELDECODIERUNG
-
Der GC-Decodierer verarbeitet Ebene für Ebene, wobei zuerst die inneren Codes und nachfolgend die äußeren Codes decodiert werden. Um ein Softinput-Decodierung des gesamten GC-Codes zu ermöglichen, ist ein Softinput-Decodierungsalgorithmus für die inneren Codes erforderlich. Dieser Abschnitt beschreibt Prozeduren zum sequenziellen Decodieren unter Verwendung des Stapelalgorithmus für Blockcodes. Diese Decodierungsverfahren werden verwendet, um die binären inneren Codes zu decodieren.
-
A. Sequenzielles Stapeldecodieren unter Verwendung eines einzigen Trellis
-
Zuerst wird ein sequenzielles Stapeldecodierungsverfahren unter Verwendung eines einzigen Trellis, wie in [15] dargestellt, in größerem Detail und unter Bezugnahme auf den nachfolgend dargestellten Algorithmus 1 erläutert, um einen Startpunkt für die vorläufige liegende Erfindung besser zu illustrieren. Sämtliche Decodierungsverfahren gemäß der vorliegenden Erfindung beruhen auf diesem Decodierungsverfahren, welches einen Trellis, wie vorausgehend definiert, verwendet, um den Code zu repräsentieren. Gemäß der vorliegenden Erfindung bereitgestellte Verbesserungen dieses Decodierungsalgorithmus werden in den nachfolgenden Abschnitten diskutiert.
-
Das in [15] dargestellte sequenzielle Decodierungsverfahren ist ein Stapelalgorithmus, d. h. zum Speichern von Zwischenergebnissen ist ein Stapel erforderlich. Der Stapel enthält Codesequenzen verschiedener Längen. Sei vt eine Codesequenz der Länge t, d. h. vt = ..., νt. Jede Codesequenz ist mit einer Metrik und einem Knoten σt assoziiert. Der Knoten σt ist derjenige Knoten in dem Trellis, der erreicht wird, wenn man dem Pfad folgt, der zu der Codesequenz durch den Trellis korrespondiert. Die Metrik bewertet jede Codesequenz und der Stapel wird gemäß diesen metrischen Werten geordnet, wobei die Codesequenz an der Spitze des Stapels diejenige mit dem größten metrischen Wert ist.
-
Die Fanometrik ist definiert, wie nachfolgend beschrieben. Sei ν
i das i-te Codebit und r
i das i-te empfangene Symbol zur Übertragung über einen diskreten speicherlosen Kanal. Die Fanometrik für ein Codebit ν
i ist definiert durch:
wobei p(r
i|ν
i) die Kanalübergangswahrscheinlichkeit und p(r
i) die Wahrscheinlichkeit dafür, am Kanalausgang r
i zu beobachten, sind. Der Term
ist ein Eichterm, der typischerweise so gewählt wird, dass er gleich der Coderate R ist [34]. Die Fanometrik einer Codeseuenz v
t ist
wobei r
t die Sequenz der ersten t empfangenen Symbole ist. Es ist zu beachten, dass die Fanometrik gemäß den vorausgehenden Gleichungen nur für diskrete speicherlose Kanäle (DMC) definiert ist. Wir betrachten den quantisierten AWGN-Kanal, wobei es sich um einen DMC handelt. Binäre Blockcodes weisen typischerweise keine Baumstruktur auf. Folglich ist die Fanometrik nicht notwendigerweise die beste Metrik für sämtliche linearen Blockcodes. Jedenfalls insbesondere dann, wenn speziell binäre BCH-Codes als innere Blockcodes ausgewählt werden, liefert
= R gute Ergebnisse für alle betrachteten Kanalbedingungen.
-
Algorithmus 1 wird in dem nachfolgenden Beispiel (Beispiel 2) demonstriert, wobei zum Zwecke der Vereinfachung eine Übertragung über einen binären symmetrischen Kanal (BSC) angenommen wird:
Man betrachte beispielsweise den Code B = {(0000), (1110), (1011), (0101)} mit der Paritätsrüfmatrix
-
Der korrespondierende Trellis ist in
3A graphisch dargestellt. Es wird eine Übertragung über einen binären symmetrischen Kanal mit einer Fehlerwahrscheinlichkeit von 0,1 angenommen. Somit sind die Ergebnisse für die Fanometrik wie folgt:
-
Algorithmus 1 kann in Pseudocode-Form wie folgt beschrieben werden: Algorithm 1: Sequentielles Stapeldecodieren unter Verwendung eines einzigen Trellis
-
Die nachfolgende Tabelle repräsentiert den Stapel für die empfangenen Sequenz r = (0010) für die vier Iterationen, die zur Berechnung des geschätzten Codeworts v ^ benötigt werden:
1 Iteration | 2. Iteration | 3. Iteration | 4. Iteration |
vt | M(rt|vt) | vt | M(rt|vt) | vt | M(rt|vt) | vt | M(rt|vt) |
0 | 0.3 | 00 | 0.6 | 000 | –2.2 | 0000 | –1.9 |
1 | –2.8 | 01 | –2.5 | 01 | –2.5 | 01 | –2.5 |
| | 1 | –2.8 | 1 | –2.8 | 1 | –2.8 |
-
Dementsprechend wird nach der vierten und letzten Iteration das oberste Wort als das geschätzte Codewort v ^ = 0000 ausgegeben. Ein negativer Wert zeigt an, dass das empfangene Wort fehlerhaft war. Ein positiver Wert zeigt an, dass das empfangene Wort fehlerfrei ist. Mehr Fehler in dem empfangenen Wort führen zu einem größeren negativen Wert, der eine geringe Zuverlässigkeit des geschätzten Codeworts anzeigt. Diese Anzeige kann dann im Rahmen der nachfolgenden Decodierung der äußeren Codes genutzt werden, um den bzw. die verbleibenden Fehler zu korrigieren.
-
B. Supercode-Decodierung für verschachtelte BCH-Codes
-
Dieser Abschnitt beginnt mit einer Beschreibung des Supercode-Decodierungsverfahrens gemäß bevorzugter Ausführungsformen, gefolgt von einer Diskussion der vorgeschlagenen Anwendung von Supercode-Decodierung für die in dem GC-Code verwendeten verschachtelten BCH-Codes.
-
Ein Supercode ist eine Obermenge B1 des ursprünglichen Codes B ⊂ B1. Um den ursprünglichen Code B zu decodieren, müssen zwei Supercodes B1 und B2 so konstruiert werden, dass B1 ⋂ B2 = B. Die Supercodes haben weniger Redundanzbits und somit weniger Trellis-Zustände. Die Supercodes können so konstruiert werden, dass jeder Code die Hälfte der ursprünglichen Redundanzbits aufweist. Dies reduziert die Anzahl der Zustände von O(2p) auf O(2p/2) gemäß der Standardnotation für Ordnung, wobei p die Anzahl der Paritätsbits ist. Das Konzept der Supercode-Decodierung ist gut zur Decodierung von GC-Codes geeignet, weil die höheren Ebene der verschachtelten BCH-Codes Supercodes der niedrigeren Ebenen sind (vgl. Gleichung (1)).
-
Ein Supercode Bi des Blockcodes B ist ein Code, der sämtliche Codewörter von B enthält. Für einen linearen Code B mit einer Paritätsprüfmatrix H kann man zwei Supercodes B1 und B2 so konstruieren, dass B = B1 ⋂ B2 gilt.
-
Sei
die Paritätsprüfmatrix des Codes B. Das bedeutet, dass H
1 und H
2 zwei Untermatrizen H sind. Die Untermatrizen H
1 und H
2 definieren dann die Supercodes B
1 bzw. B
2.
-
Beispiel 3: Man betrachte beispielsweise den Code B aus Beispiel 2.
-
Man erhält
H1 = (1 1 0 1) ⇒ B1 = {(0000), (1100), (1110), (0010), (1011), (1001), (1011), (0101)} und
H2 = (0 1 1 1) ⇒ B2 = {(0000), (1000), (0110), (1110), (1011), (1101), (0011), (0101)},
wobei die unterstrichenen Vektoren die Codeworte des Codes B sind. Die korrespondierenden Supercode-Trellise sind in 3(b) bzw. 3(c) grafisch dargestellt.
-
Als nächstes wird der vorgeschlagene sequenzielle Decodierungsalgorithmus erläutert. Jeder in dem Stapel gespeicherte Pfad ist mit einem metrischen Wert sowie mit zwei Zuständen (σ
t,1 und σ
t,2, welche die Zustände in dem Trellis für den Supercode B
1 bzw. B
2 sind, assoziiert. In dem nachfolgenden Beispiel wird der Algorithmus 2 zum Decodieren erläutert, wobei die gleiche Situation wie in Beispiel 2 betrachtet wird. Algorithmus 2 kann in Pseudocode-Form wie folgt beschrieben werden: Algorithmus 2: Sequentielles Stapeldecodieren unter Verwendung von Supercode Trellisen
-
Beispiel 4: Die nachfolgende Tabelle repräsentiert den Stapel für die empfangene Sequenz r = (0010) für Algorithmus 2 für die fünf Iterationen, die zur Berechnung des geschätzten Codeworts v ^ benötigt werden:
1. Iteration | 2. Iteration | 3. Iteration | 4. Iteration | 5. Iteration |
vt | M(rt|vt) | vt | M(rt|vt) | vt | M(rt|vt) | vt | M(rt|vt) | vt | M(rt|vt) |
0 | 0.3 | 00 | 0.6 | 001 | 0.9 | 000 | –2.2 | 0000 | –1.9 |
1 | –2.8 | 01 | –2.5 | 000 | –2.2 | 01 | –2.5 | 01 | –2.5 |
| | 1 | –2.8 | 01 | –2.5 | 1 | –2.8 | 1 | –2.8 |
| | | | 1 | –2.8 | | | | |
-
Dementsprechend wird das nach der fünften und letzten Iteration oberste Wort als das geschätzte Codewort v ^ = 0000 ausgegeben. Ein negativer Wert zeigt an, dass das empfangene Wort fehlerhaft war. Ein positiver Wert zeigt an, dass das empfangene Wort fehlerfrei ist. Mehr Fehler in dem empfangenen Wort führen zu einem betragsmäßig größeren negativen Wert, der eine geringe Zuverlässigkeit des geschätzten Codeworts anzeigt. Diese Anzeige kann dann im Rahmen der nachfolgenden Decodierung der äußeren Codes genutzt werden, um den bzw. die verbleibenden Fehler zu korrigieren. Es ist anzumerken, dass der Stapel in der dritten Iteration von Beispiel 2 abweicht, weil die Codesequenz 001 in beiden Supercode-Trellisen aber nicht in dem tatsächlichen Code existiert. Diese Codesequenz wird in der nächsten Iteration gelöscht, da sie nicht in beiden Supercode-Trellisen fortgeführt werden kann.
-
Wie das vorausgehende Beispiel demonstriert, kann die Zeitkomplexität des vorgeschlagenen Algorithmus größer sein als bei Algorithmus 1. Dies ergibt sich aufgrund von Codesequenzen, die in den Supercodes existieren, aber nicht in dem tatsächlichen Code gültig sind. Nichtsdestotrotz resultieren beide Algorithmen in demselben Codewort:
Theorem 1: Algorithmus 1 und Algorithmus 2 resultieren in demselben geschätzten Codewort.
-
Beweis: beide Algorithmen unterscheiden sich nur bezüglich der Repräsentation des Codes. Um die These zu prüfen, reicht es aus zu zeigen, dass beide Repräsentationen äquivalent sind. Zunächst wird durch Induktion gezeigt, dass das geschätzte Codewort in beiden Supercode-Trellisen zu einem gültigen Pfad korrespondiert, d. h., dass es ein Codewort beider Supercodes ist. Der Ausgangsfall ist der initiale Schritt, bei dem die Codebits 0 und 1 in den Stapel eingefügt werden. Es ist anzumerken, dass ein linearer Code keine Codebit-Positionen mit konstanten Werten aufweist. Daher existieren die Übergänge ν1 = 0 und ν1 = 1 in beiden Supercode-Trellisen. Für den Induktionsschritt nimmt man an, dass ein Pfad für die Codesequenz vt in beiden Supercode-Trellisen existiert. Es folgt aus Algorithmus 2, dass dieser Pfad nur erweitert wird, wenn der erweiterte Pfad in beiden Supercode-Trellisen existiert. Dies beweist die Behauptung, dass das geschätzte Codewort zu einem gültigen Pfad in beiden Supercode-Trellisen korrespondiert. Es ist nun anzumerken, dass B = B1 ⋂ B2, d. h. ein Pfad ist dann und nur dann in beiden Supercode-Trellisen gültig, wenn er ein gültiges Codewort des Codes B ist. Algorithmus 2 reduziert die Platzkomplexität, die zur Repräsentation des Codes erforderlich ist. Dies wird im folgenden Beispiel demonstriert.
-
Beispiel 5: Man betrachte drei BCH-Codes aus Tabelle I. Alle Codes haben eine Länge n = 60. In der ersten Ebene verwenden wir einen Code, der nur einfache Fehler korrigiert. Dieser Code hat 3.262 Knoten in dem Trellis. Dieser Code ist ein Supercode des BCH-Codes der zweiten Ebene. Der Trellis der zweiten Ebene hat 159.742 Knoten. Wenn man allerdings den Trellis des Codes der ersten Ebene verwendet, benötigt man nur einen einzigen zusätzlichen Supercode Trellis mit 2.884 Knoten, um den Code auf der zweiten Ebene zu repräsentieren. Schließlich hat der Code auf der dritten Ebene einen Trellis mit 7.079.886 Knoten. Unter Verwendung von Supercode-Decodierung, werden die Trellise der ersten und der zweiten Ebene verwendet und nur ein zusätzlicher Supercode-Trellis mit 2.410 Knoten ist erforderlich, um den dritten Code zu repräsentieren. Beim sequenziellen Decodieren hängt die Anzahl der besuchten Knoten in dem Trellis (die Anzahl der Iterationen) von der Anzahl von Übertragungsfehlern ab. Es ist anzumerken, dass mit den vorgestellten Codes die Zeitkomplexität für Algorithmus 2 höchstens 1,75-mal größer ist, als für Algorithmus 1.
-
C. Selektives Softinput-Decodieren und Liste-aus-Zwei-Decodierung
-
Als nächstes werden zwei Techniken zur Verbesserung der Performanz und der Komplexität von Algorithmus 1 beschrieben, beginnend mit einer Erläuterung dafür, dass das Softinput-Decodieren in solchen Fällen ausgelassen werden kann, wo die harte Entscheidung (engl. hard decoding) bezüglich des empfangenen Vektors zu einem gültigen Codewort korrespondiert (selektive Softinput-Decodierung, siehe entsprechenden Unterabschnitt). Danach wird der vorgeschlagene sequenziellen Liste-von-Zwei-Decodierungsalgorithmus beschrieben. Liste-aus-Zwei-Decodierung ist durch die Tatsache motiviert, dass Algorithmus 1 kein Maximum-Likelihood-Decodierungsverfahren darstellt. Daher kann man nach weiteren Codewörtern suchen, um bessere Kandidaten als das Ergebnis von Algorithmus 1 zu finden.
- (a) Selektive Softinput-Decodierung: im Folgenden wird ein Kanal mit additivem weißen Gaußschem Rauschen bei binärer Phasenmodulation betrachtet. Man nehme an, dass ein binäres Codesymbol νt ∊ auf das Übertragungssymbol xt ∊ {+1, –1) durch xt = 1 – 2νt abgebildet wird. Der übertragene Symbolvektor x wird durch einen Rauschvektor n gestört, sodass die empfangene Sequenz r = x + n ist. Der Rauschvektor n ist ein Vektor aus unabhängigen, identisch verteilten Gaußschen Zufallsvariablen mit einem Mittelwert von Null. Somit gilt: wobei σ2 für die Varianz der Gaußschen Verteilung steht. Für diesen Kanal ist es allgemein üblich, die quadratische euklidische Distanz als Metrik zuverwenden weil
-
Allerdings gilt
-
-
Sei
r ~t = sgn(rt) die Bezeichnung für das Vorzeichen, d. h. die harte Entscheidung (engl. hard decision) bezüglich r
t. Unter Verwendung von
erhält man
-
-
Es ist anzumerken, dass
der einzige Term in (9) ist, der von x abhängt. Folglich kann man anstelle der quadratischen euklidischen Distanz auch
minimieren. Dazu sei bemerkt, dass
falls der Vektor
r ~ = (r ~1, ...,r ~n) zu einem gültigen Codewort korrespondiert. Folglich gibt in diesem Fall r ~ die Maximum-Likelihood-Schätzung an.
- (b) Nun betrachten wir die Liste-aus-Zwei-Decodierung. Um einen Ausgleich zwischen Performanz und Komplexität zu ermöglichen, führen wir eine Schwelle ρ für die Metrik des geschätzten Codeworts ein, wie beispielhaft im nachfolgenden Algorithmus 3 beschrieben. Algorithmus 3: Sequentielle Liste-aus-Zwei-Decodierung.
-
In Algorithmus 3, wird Algorithmus 1 angewandt, um die inneren Codes auf der ersten Ebene zu decodieren, d. h. die Codewörter des Codes B(0), während Algorithmus 2 für die niedrigeren Ebenen verwendet wird. 4 stellt die Performanz von Algorithmus 1 und Algorithmus 3 bezüglich der Restwortfehlerrate (engl. Word Error Rate, WER) für eine Übertragung über den AWGN-Kanal dar. Der Code ist ein einzelfehlerkorrigierender binärer BCH-Code der Länge n = 60. Dieser Code wird später in der ersten Ebene des GC-Codes als innerer Code verwendet. Die Decodierungsperformanz und die Anzahl der Decodierungsiterationen hängen von der Schwelle ρ ab.
-
5 stellt einen Vergleich bezüglich der Anzahl von Iterationen dar, wobei zwei verschiedene, als ρ1 bzw. ρ2 bezeichnete Schwellenwerte verwendet wurden. Die Werte von ρ2 wurden mittels einer Computersuche erhalten, um die Wortfehlerrate für ein gegebenes Signal-zu-Rausch-Verhältnis zu minimieren. Die Werte von ρ1 wurden im Hinblick darauf gewählt, zu demonstrieren, dass Algorithmus 3 die Wortfehlerrate im Vergleich zu Algorithmus 1 bei vergleichbarer Komplexität reduzieren kann.
-
III. GC-DECODIERUNG UND DECODIERFEHLERWAHRSCHEINLICHKEIT
-
Der Decodierer verarbeitet Ebene für Ebene, beginnend mit i = 0, wozu er von einem Kanal, wie etwa einer Flashspeichervorrichtung, empfangene Originaldaten als Input nimmt, wobei die Originaldaten in einer Datenmatrix angeordnet sind, die wie in 1 illustriert strukturiert ist.
-
6 stellt die Decodierungsschritte bildlich dar. Sei i der Index der aktuellen Ebene. Zunächst werden die Spalten der Matrix bezüglich B(i) decodiert und die Informationsbits müssen entnommen (rückabgebildet) werden, um die Codesymbole ai,j von A(i) zu entnehmen, wobei j der Spaltenindex ist. Wenn alle Symbole des Codes A(i) entnommen sind, kann der äußere Code (z. B. RS-Code) decodiert werden. An diesem Punkt ist ein Teildecodierungsergebnis a ^i verfügbar. Schließlich muss dieses Ergebnis unter Verwendung von B(i) zurückcodiert werden. Die geschätzten Codeworte des inneren Codes B(i) werden von der Matrix subtrahiert, bevor die nächste Ebene decodiert werden kann.
-
Der detaillierte Codierungs- und Hardinput-Decodierungsprozess ist in [36] beschrieben. In der ersten Ebene i = 0 wird die Softinput-Decodierung gemäß Algorithmus 1 verwendet. Beginnend mit der zweiten Ebene, können die Struktur der verschachtelten BCH-Codes ausgenutzt und Algorithmus 2 verwendet werden, wobei der Code in der Ebene i – 1 als Supercode des Codes der Ebene i verwendet werden kann. Zur Implementierung kann die Anzahl der Decodierungsiterationen für jeden inneren Code limitiert werden. Falls die Anzahl der Iterationen eine Schwelle überschreitet, wird ein Decodierungsfehler erklärt. Für die äußeren (z. B. RS) Codes wird Fehler- und Löschdecodierung angewandt [37], wobei die Decodierungsfehler der inneren Codes als gelöschte Symbole des äußeren (z. B. RS) Codes betrachtet werden.
-
A. Wahrscheinlichkeit eines Decodierungsfehlers
-
Im Folgenden wird eine Analyse der Wahrscheinlichkeit eines Decodierungsfehlers bei dem GC-Decodierer vorgestellt, gefolgt von einem Beispiel, das die Performanz des vorgeschlagenen Decodierungsverfahrens illustriert.
-
Die Performanz der Softinput-Decodierung der inneren Codes kann unter Verwendung einer Monte Carlo-Simulation bestimmt werden. Sei Pb,j die Fehlerwahrscheinlichkeit für die Decodierung des inneren Codes B(j). Des Weiteren sei Pe,j die korrespondierende Wahrscheinlichkeit für ein Versagen des Decoders. Die Wahrscheinlichkeit eines Decodierungsfehlers hängt mit dem Mehrfachstufen-Decodierungsalgorithmus zusammen.
-
Sei T
j = n
a – k
a,j die Anzahl der Redundanzsymbole für den äußeren RS-Code A
(j) in der j-ten Ebene. Die Wahrscheinlichkeit P
a,j für das Auftreten eines Decodierungsfehlers beim Fehler- und Löschdecodieren in der j-ten Ebene kann wie folgt berechnet werden [37]:
wobei P
q die Wahrscheinlichkeit für q Löschungen ist.
-
-
Unter Verwendung der Vereinigungsgrenze, kann die Blockfehlerrate P
GC für den GC-code, d. h. die Wahrscheinlichkeit für das Ereignis, dass zumindest eine Ebene fehlerhaft ist, geschätzt werden
-
Beispiel 6: Betrachtet wird der Code aus Beispiel 1. Dieser Code hat eine Coderate R = 0,806 und wurde entworfen, um Pe ≤ 10–16 für EB/N0 ≥ 4,7 dB gemäß (12) zu garantieren, wobei Softinput-Decodierung in den ersten drei Ebenen und Hardinput-Decodierung in den verbleibenden Ebenen verwendet wird.
-
B. Vergleich der Fehlerkorrektur-Performanz
-
Es wird die Fehlerkorrekturperformanz des GC-Codes in verschiedenen Decodierungsmodi mit der Performanz von langen BCH-Codes mit Hardinput-Decodierung verglichen. Als Performanzmaß wird diejenige Coderate verwendet, die erforderlich ist, um für ein vorgegebenes Signal-zu-Rausch-Verhältnis eine Gesamtwortfehlerrate von weniger als 10–10 bzw. 10–16 zu garantieren. Sämtliche Codes sind ähnlich dem in Beispiel 1 präsentierten Code konstruiert. Insbesondere sind die inneren Codes gemäß Tabelle I gewählt, während die Fehlerkorrekturfähigkeit der äußeren Codes angepasst ist, um die höchstmögliche Coderate für eingegebene Signal-zu-Rausch-Verhältnis zu erhalten. Es ist anzumerken, dass in diesem Beispiel die gesamte Coderate des GC-Codes aufgrund der Wahl der inneren Codes höchstens R = 0,9 beträgt.
-
7 stellt die Coderate gegenüber dem Signalrauschverhältnis für Pe = 10–10 dar, während die Ergebnisse für Pe = 10–16 in 8 dargestellt sind. Der GC-Code mit Softinput-Decodierung ist dem GC-Code mit Hardinput-Decodierung für sämtliche Fehlerwahrscheinlichkeiten und dem BCH-Code für Coderaten unterhalb von 0,88 überlegen. Die Softinput-Decodierung wurde mit einer 3-Bit-Quantisierung simuliert. Die drei Kurven mit Softinput-Decodierung verwenden verschiedene Decodierungsstrategien, wobei die Softinput-Decodierung nur auf der ersten Ebene bzw. auf der ersten und der zweiten Ebene bzw. auf den Ebenen 0 bis 2 eingesetzt wird. Die Softinput-Decodierung verbessert die Performanz um bis zu 1,3 dB. Beispielsweise erreicht der GC-Code mit einer Coderate R = 0,8 eine Blockfehlerrate von weniger als 10–16 bei einem Signal-zu-Rausch-Verhältnis von Eb/N0 ≥ 4,6 dB, was nur ein dB von der Kanalkapazität des quantisierten AWGN-Kanals entfernt liegt. Für Pe = 10–10 ist die Coderate R = 0,8 für ein Signal-zu-Rausch-Verhältnis (SNR) von Eb/N0 ≥ 4,6 dB ausreichend. Es ist anzumerken, dass die Softinput-Decodierung der ersten und zweiten Ebene für sämtliche SNR-Werte oberhalb von Eb/N0 = 5,5 dB ausreichend ist.
-
IV. SPEICHERSYSTEM UND ARCHITEKTUR DER DECODIERUNGSVORRICHTUNG
-
Dieser Abschnitt beschreibt ein beispielhaftes Speichersystem, das eine Decodierungsvorrichtung aufweist, die eingerichtet ist, wenigstens eines der vorausgehend in den Abschnitten II.B und II.C beschriebenen Decodierungsverfahren auszuführen, sowie eine diesbezügliche Decoderarchitektur für einen GC-Softinput-Decodierer wie er in dem genannten Speichersystem verwendet wird.
-
9 zeigt ein beispielhaftes Speichersystem 1, aufweisend einen Speichercontroller 2 und eine Speichervorrichtung 3, die insbesondere eine Flashspeichervorrichtung sein kann, beispielsweise vom NAND-Typ. Das Speichersystem 1 ist über einen Satz von Adressleitungen A1, einen Satz von Datenleitungen D1 und einen Satz von Steuerleitungen C1 mit einem Host 4 verbunden, der etwa ein Computer sein kann, zu dem das Speichersystem 1 gehört. Der Speichercontroller 2 weist eine Prozessoreinheit 2a und einen internen Speicher 2b, typischerweise vom eingebetteten (Embedded)-Typ auf, und ist über einen Adressbus A2, einen Datenbus D2 und einen Steuerbus C2 mit dem Speicher 3 verbunden. Dementsprechend hat der Host 4 über seine Verbindungen A1, D1 und C1 zu dem Speichercontroller 2 indirekten Lese- und/oder Schreib-Zugriff auf den Speicher 3, der wiederum über die Busse A2, D2 und C2 direkt auf den Speicher 3 zugreifen kann. Jeder der Sätze aus Leitungen bzw. Bussen A1, D1, C1, A2, D2 und C2 kann mittels einer oder mehrere einzelner Kommunikationsleitungen implementiert sein. Der Bus A2 kann auch entfallen.
-
Der Speichercontroller 2 ist auch als eine Codierungsvorrichtung konfiguriert und eingerichtet, die die Decodierungserfahren der vorliegenden Erfindung auszuführen, insbesondere auch wie vorausgehend unter Bezugnahme auf die 1 bis 8 beschrieben. Auf diese Weise ist der Speichercontroller 2 in der Lage, aus der Speichervorrichtung 3 gelesene Daten zu decodieren. Typischerweise wird der Speichercontroller 2 außerdem eingerichtet sein, eine entsprechende Codierung zur Erzeugung von in die Speichervorrichtung 3 zu schreibenden codierten Daten auszuführen. Zu diesem Zweck kann der Speichercontroller 2 ein Computerprogramm aufweisen, das in seinem internen Speicher 2b abgelegt und konfiguriert ist, bei seiner Ausführung auf der Prozessoreinheit 2a des Speichercontrollers 2 ein oder mehrere dieser Decodierungs-(und Codierungs-)Verfahren durchzuführen. Alternativ kann das Programm beispielsweise ganz oder teilweise in der Speichervorrichtung 3 oder einem zusätzlichen Programmspeicher (nicht gezeigt) abgelegt sein oder es kann sogar ganz oder teilweise mittels einer hartverdrahteten Schaltung implementiert sein.
-
Als nächstes wird eine bevorzugte Integration des Stapelalgorithmus als innerer Decodierer in die Implementierung des in [36] vorgestellten GC-Decodierers erläutert. Danach wird die Implementierung des Stapelalgorithmus zur Supercode-Decodierung einschließlich ihrer Subsysteme vorgestellt und erläutert. Die ursprüngliche Implementierung eines Hardinput-GC-Decodierers aus [36] verwendet algebraische Syndromdecodierung. Bei dieser Implementierung können die ersten Ebenen von B tb,0 = 1 und tb,1 = 2 Fehler decodieren. Folglich sind höhere Fehlerkorrekturfähigkeiten der äußeren Codes A(0) und A(1) erforderlich. Dies führt zu niedrigeren Coderaten und einer höheren Decodierungskomplexität für diese äußeren Codes. Andererseits nimmt die Softinput-Decodierungskomplexität für die Spaltencodes mit jeder Codeebene signifikant zu. Folglich ist die Soft-Decodierung für die niedrigeren Ebenen von Interesse. Dem nachfolgend bleibt die algebraische Decodierung Logik für die Spaltencodes in der Implementierung erhalten. Daher ist es möglich, zu prüfen, ob das Syndrom gleich Null ist. Ist dies der Fall, kann das Codewort als korrekt angenommen werden, d. h. weder eine algebraische Decodierung noch ein sequenzielles Decodieren resultieren dann in einem anderen Codewort.
-
A. Decodierungslogik
-
In 10 ist ein kurzer Überblick über ein beispielhaftes Decodierungssystem gemäß einer bevorzugten Ausführungsform dargestellt, das insbesondere in Form einer einzigen Decodierungsvorrichtung implementiert sein kann. Das System besteht aus einem Wortfeld 5 der Größe nb und einer gewünschten Breite, welches das q-näre Wort speichert. Des Weiteren ist ein die Multiplexer 6 vorgesehen, der die gegenwärtig verarbeitete Bitposition in Abhängigkeit von dem obersten Pfad in dem Stapel auswählt und diesen Wert an einen Metrikberechner 7 liefert. Beruhend auf dem empfangenen Codewortsymbol ri und der vorausgegangenen Metrik M(rt-1|νt-1) gibt das Metrikmodul 7 M(rt|νt) an einen Prioritätsqueue-Block 8 aus, der verwendet wird, um einen Stapel für das sequenzielle Stapeldecodieren zu implementieren. Um die Supercode-Trellise zu repräsentieren, wird asynchrones ROM verwendet, wobei vorzugsweise jeweils ein separates ROM 9a, 9b für jeden Trellis verwendet wird. Für jeden Supercode repräsentiert jedes Wort aus dem entsprechenden ROM 9a, 9b einen Trellis Knoten σt,i des entsprechenden Trellis. Die Daten bestehen aus zwei Zeigern für die Nachfolgeknoten νt+1 = 0 und νt+1 = 1. In Abhängigkeit von dem obersten Eintrag in der Prioritätsqueue 8 wird das gewünschte Codewortsymbol ausgewählt und die nächsten Äste für die aktuellen Knoten σt,1 und σt,2 werden aus dem entsprechenden Trellis-Raum 9a bzw. 9b geladen. Innerhalb eines einzigen Taktzyklus entlädt die Prioritätsqueue 8 den obersten Eintrag und lädt die neuen Pfade.
-
Jeder Eintrag in der Prioritätsqueue 8 enthält mehrere Elemente. Das erste Element ist der metrische Wert. Der Pfad innerhalb des Trellis, die Länge des Pfads und ein Zeiger auf den aktuellen Knoten sind gespeichert. Sämtliche Einträge müssen anhand der metrischen Werte geordnet werden, sodass der oberste Eintrag den höchsten Wert aufweist. Der Prozess für die Prioritätsqueue 8 beginnt mit ihrer Initialisierung. Der Startknoten, sein initialer metrischer Wert und die Pfadlänge werden gesetzt. Jeder Aktualisierungszyklus beginnt mit der Ladephase, in der der nächste Knotenzeiger aus dem Trellis-ROM 9a, 9b geladen wird. Gleichzeitig wird beruhend auf dem Pfadlängenindex das nächste Codewortsymbol geladen. Der nächste metrische Wert kann basierend auf dem Codesymbol und den verfügbaren Ästen bestimmt werden. Für binäre Codes existieren zumindest ein möglicher Ast und höchstens zwei Äste. Die resultierenden Äste werden unter Verwendung von kombinatorische Logik vorsortiert. Im Folgenden werden diese beiden Einträge als Haupt- bzw. Nebeneintrag bezeichnet, wobei der Haupteintrag den besseren metrischen Wert aufweist.
-
Sämtliche Elemente der Prioritätsqueue werden sukzessiv in einer Kette geordnet. 11 zeigt eine mögliche Implementierung eines Prioritätsqueue-Elements. Jedes Element kann seine Daten mit seinem vorausgehenden oder nachfolgenden Nachbar austauschen. Des Weiteren kann jedes Element entscheiden, ob es seine eigenen Daten behält, die Daten seines Nachbars übernimmt oder die neuen Hauptdaten oder die neuen Nebendaten lädt. In jedem Element wird der metrische Wert mit dem neuen Wert verglichen. Das Ergebnis dieses Vergleichs wird an seine Vorgänger- und Nachfolgerelemente signalisiert. Falls das Signal eines Vorgängers ”unwahr” ist und der Komparator für den metrischen Hauptwert ein positives Signal ausgibt, wird der neue Hauptwert gespeichert. Auf ähnliche Weise werden, falls ein Element ein „unwahr”-Signal von seinem Vorgänger erhält und der Komparator für den metrischen Nebenwert einen neuen metrischen Wert signalisiert, der geringer ist als der aktuelle Wert, die neuen Nebendaten gespeichert. In dem Fall, dass ein Element ein Signal von seinen Nachbarn erhält, muss für die neuen Daten Platz geschaffen werden, indem sämtliche Einträge zum nächsten Element verschoben werden. Hier existieren zwei Spezialfälle, die berücksichtigt werden müssen. Der erste Spezialfall tritt auf, wenn ein Knoten nur einen einzigen ausgehenden Ast aufweist. In diesem Fall muss das Verschieben von Elementen mittels einer Signalisierung verhindert werden. Der zweite Spezialfall tritt auf, wenn die neuen Haupt- und Nebenelemente dazu vorgesehen sind, in denselben Registereintrag eingefügt zu werden. Dieser Fall kannte detektiert und verhindert werden, indem dieser Wert an das nächste Element weitergegeben wird.
-
Der Algorithmus endet, wenn die maximal mögliche Pfadlänge erreicht ist. Der gespeicherte Pfad in dem obersten Element ist das decodierte Codewort. In einer praktischen Implementierung kann ein Iterationszähler verwendet werden, der nach einer vorbestimmten Maximalanzahl von Iterationen das Ende einleitet. Dieser Abbruch kann verwendet werden, um diese decodierte-GCC-Spalte als ein Löschsymbol für die äußeren (RS)-Codes zu markieren. Um die Supercodes zu decodieren (vgl. Algorithmus 2 oder Algorithmus 3 beruhend auf Algorithmus 2) müssen die folgenden Erweiterungen implementiert werden. Die metrische Berechnung muss sämtliche Trellis-Äste jedes der Supercodes berücksichtigen. Des Weiteren müssen sämtliche Knotenzeiger in den Prioritätsqueueelementen gespeichert werden. Vorzugsweise wird für jeden Supercode ein separates ROM, insbesondere eine andere ROM-Vorrichtung, verwendet, das bzw. die seinen Trellis repräsentiert.
-
B. Flächenvergleich
-
Dieser Abschnitt beschreibt eine beispielhafte FPGA-Implementierung des vorgeschlagenen Softinput-Decodierers gemäß einer bevorzugten Ausführungsform und vergleicht diese mit dem in [36] vorgestellten Hardinput-Decodierer. Der Hardinput-Decodierer verwendet algebraisches Decodieren. Er besteht aus der Syndromberechnung, dem Berlekamp-Massey Algorithmus (BMA), und dem Chien-Suchmodul. Der Softinput-Decodierer wird wie in Abschnitt II-B oben vorgeschlagen implementiert. Er weist zwei Limitierungen auf. Erstens ist die Länge der Prioritätsqueue auf 64 Elemente limitiert. Darüber hinaus ist die Genauigkeit der Metrikberechnung auf 16 Bits limitiert und eine 3-Bit-Quantisierung wird für die Eingangssymbole verwendet.
-
Der Stapelalgorithmus weist eine in Abhängigkeit von dem Fehlermuster variable Ausführungszeit auf. Dieser Algorithmus benötigt zumindest 61 Zyklen, um den gesamten Trellis zu durchlaufen, wenn kein Fehler aufgetreten ist. Dieser Fall kann vermieden werden, indem geprüft wird, ob das Syndrom eines Spaltenworts gleich null ist. Falls kein Fehler detektiert wurde, kann die Soft-Decodierung vermieden werden, sodass dann nur ein einziger Zyklus erforderlich ist. 12 vergleicht die für den Stapelalgorithmus benötigten durchschnittlichen Zyklenanzahlen. Es zeigt die Abhängigkeit zwischen der Kanal-Bitfehlerrate und der Berechnungskomplexität, d. h. weniger Fehler führen zu weniger Decodierungszyklen. Es ist zu bemerken, dass der algebraische Hardinput-Decodierer vier Zyklen für die erste Ebene und sechs Zyklen für die zweite Ebene benötigt.
-
Als nächstes wird ein FPGA-Syntheseergebnis für den Stapelalgorithmus vorgestellt. Die Synthese wurde mit einem Xilinx Vivado- und einem Virtex-7-Zielbaustein ausgeführt. Tabelle II zeigt die Anzahl von Logikelementen (engl. slices) und Look-up-Tabellen (LUT) jeweils des Hardinput- und des Softinput-Decodierers mit 3-Bit-Quantisierung. Aus diesen Ergebnissen entnimmt man, dass die Anzahl der für den Stapelalgorithmus benötigten Logikelemente etwa 80% der Anzahl der Logikgatter beträgt, die für den GC-Hardinput-Decodierer benötigt werden.
Modul | LUT | Logikelemente |
RS-Modul (t = 78) | | |
Syndrom | 1701 | 1395 |
BMA | 21701 | 6662 |
Forney alg. | 1046 | 729 |
Chien-Suche | 854 | 712 |
BCH Modul (n = 60, t = 8) | | |
Syndrom | 184 | 46 |
BMA | 2006 | 732 |
Chien-Suche | 1557 | 240 |
Rückabbildung | 148 | 336 |
GESAMT | 29197 | 10852 |
Stapelalgorithmus | 23896 | 9885 |
Tabelle II – Ergebnisse der FPGA-Analyse
-
Während vorausgehend wenigstens eine beispielhafte Ausführungsform der vorliegenden Erfindung beschrieben wurde, ist zu bemerken, dass eine große Anzahl von Variationen dazu existiert. Es ist dabei auch zu beachten, dass die beschriebenen beispielhaften Ausführungsformen nur nichtlimitierende Beispiele dafür darstellen, wie die vorliegenden Erfindung implementiert werden kann, und es nicht beabsichtigt ist, dadurch den Umfang, die Anwendbarkeit oder die Konfiguration der hier beschriebenen Vorrichtungen und Verfahren zu beschränken. Vielmehr wird die vorausgehende Beschreibung dem Fachmann eine Anleitung zu Implementierung mindestens einer beispielhaften Ausführungsform liefern, wobei sich versteht, dass verschiedene Änderungen in der Funktionsweise und der Anordnung der in einer beispielhaften Ausführungsform beschriebenen Elemente vorgenommen werden können, ohne dass dabei von dem in den angehängten Ansprüchen jeweils festgelegten Gegenstand sowie seinen rechtlichen Äquivalenten abgewichen wird.
-
LITERATURANGABEN
-
- [1] A. Fahrner, H. Griesser, R. Klarer, und V. Zyablov, Low-complexity GEL codes for digital magnetic storage systems, in IEEE Transactions on Magnetics, Bd. 40, Nr. 4, S. 3093–3095, Juli 2004.
- [2] J. Freudenberger, U. Kaiser, und J. Spinner, Concatenated code constructions for error correction in non-volatile memories, in Int. Symposium on Signals, Systems, und Electronics (ISSSE), Potsdam, Okt. 2012, S. 1–6.
- [3] J. Freudenberger, J. Spinner, und S. Shavgulidze, Generalized concatenated codes for correcting two-dimensional clusters of errors und independent errors, in Int. Conference on Communication und Signal Processing (CSP), Castelldefels-Barcelona, Feb. 2014, S. 1–5.
- [4] I. Dumer, Concatenated codes und their multilevel generalizations, in Handbook of Coding Theory, Bd. II, Elsevier, Amsterdam, 1998.
- [5] M. Bossert, Channel coding for telecommunications. Wiley, 1999.
- [6] V. Zyablov, S. Shavgulidze, und M. Bossert, An introduction to generalized concatenated codes, in European Transactions on Telecommunications, Bd. 10, Nr. 6, S. 609–622, 1999.
- [7] J. Spinner und J. Freudenberger, Decoder architecture for generalized concatenated codes, in IET Circuits, Devices & Systems, Bd. 9, Nr. 5, S. 328–335, 2015.
- [8] A. Neubauer, J. Freudenberger, und V. Kühn, Coding Theory: Algorithms, Architectures and Applications, John Wiley & Sons, 2007.
- [9] D. Chase, Class of algorithms for decoding block codes with channel measurement information, in IEEE Transactions on Information Theory, S. 170–182, 1972.
- [10] C. Argon, S. McLaughlin, und T. Souvignier, Iterative application of the Chase algorithm on Reed-Solomon product codes, in Proceedings IEEE ICC 2001, S. 320–324, 2001.
- [11] M. Fossorier und S. Lin, Soft-decision decoding of linear block codes based on ordered statistics, in IEEE Trans. Inform. Theory, Bd. IT-41, S. 1379–1396, Sep. 1995.
- [12] B. Dorsch, A decoding algorithm for binary block codes und J-ary output channels in Information Theory, in IEEE Transactions on, Bd. 20, Nr. 3, S. 391–394, Mai 1974.
- [13] M. Tomlinson, C. Tjhai, und M. Ambroze, Extending the Dorsch decoder towards achieving maximum-likelihood decoding for linear codes, in IET Communications, Bd. 1, Nr. 3, S. 479–488, June 2007.
- [14] A. Gortan, R. Jasinski, W. Godoy, und V. Pedroni, Achieving near-MLD performance with soff information-set decoders implemented in FPGAs, in 2010 IEEE Asia Pacific Conference on Circuits und Systems (APCCAS), Dez. 2010, S. 312–315.
- [15] L. Aguado und P. Farrell, On hybrid stack decoding algorithms for block codes in Information Theory, in IEEE Transactions on, Bd. 44, Nr. 1, S. 398–409, Jan. 1998.
- [16] J. Wolf, Efficient maximum likelihood decoding of linear block codes using a trellis, in IEEE Transactions on Information Theory, Bd. 24, Nr. 1, S. 76–80, Jan. 1978.
- [17] J. Freudenberger, T. Wegmann, und J. Spinner, An efficient hardware implementation of sequential stack decoding of binary block codes, in IEEE 5th International Conference on Consumer Electronics – Berlin (ICCE-Berlin), Sept 2015, S. 135–138.
- [18] J. Freudenberger und M. Bossert, Maximum-likelihood decoding based on supercodes, in Proc. 4th. International ITG Conference Source und Channel Coding, Erlangen, Germany, Jan. 2004, S. 185–190.
- [19] J. Freudenberger, Bounded Distance Decoding und Decision Feedback, Düsseldorf, Germany, VDI Verlag, 2004.
- [20] R. Micheloni, A. Marelli, und R. Ravasio, Error Correction Codes for Non-Volatile Memories, Springer, 2008.
- [21] X. Zhang und K. K. Parhi, High-speed architectures for parallel long BCH encoders, in IEEE Transactions on Very Large Scale Integration (VLSI) Systems, Bd. 13, Nr. 7, S. 872–877, 2005.
- [22] F. Sun, S. Devarajan, K. Rose, und T. Zhang, Design of on-chip error correction systems for multilevel NOR und NAND flash memories, in IET Circuits, Devices Systems, Bd. 1, Nr. 3, S. 241–249, Juni 2007.
- [23] J. Freudenberger und J. Spinner, A configurable Bose-Chaudhuri-Hocquenghem codec architecture for flash controller applications, in Journal of Circuits, Systems, und Computers, Bd. 23, Nr. 2, S. 1–15, Feb. 2014.
- [24] S. Cho, D. Kim, J. Choi, und J. Ha, Block-wise concatenated BCH codes for NAND flash memories, in IEEE Transactions on Communications, Bd. 62, Nr. 4, S. 1164–1177, April 2014.
- [25] D. Kim und J. Ha, Quasi-primitive block-wise concatenated BCH codes for NAND flash memories, in IEEE Information Theory Workshop (ITW), Nov 2014, S. 611–615.
- [26] G. Dong, N. Xie, und T. Zhang, On the use of soff-decision error-correction codes in NAND Flash memory, in IEEE Transactions on Circuits und Systems I: Regular Papers, Bd. 58, Nr. 2, S. 429–439, Feb. 2011.
- [27] K. Zhao, W. Zhao, H. Sun, X. Zhang, N. Zheng, und T. Zhang, LDPC-in-SSD: Making advanced error correction codes work effectively in solid state drives, in Presented as part of the 11th USENIX Conference on File und Storage Technologies (FAST 13). San Jose, CA: USENIX, 2013, S. 243–256. [Online]. Verfügbar unter: https://www.usenix.org/conference/fast13/technical-sessions/presentation/zhao
- [28] J. Wang, K. Vakilinia, T.-Y. Chen, T. Courtade, G. Dong, T. Zhang, H. Shankar, und R. Wesel, Enhanced precision through multiple reads for ldpc decoding in flash memories, in IEEE Journal on Selected Areas in Communications, Bd. 32, Nr. 5, S. 880–891, Mai 2014.
- [29] W. Lin, S.-W. Yen, Y.-C. Hsu, Y.-H. Lin, L.-C. Liang, T.-C. Wang, P.-Y. Shih, K.-H. Lai, K.-Y. Cheng, und C.-Y. Chang, A low power und ultrahigh reliability LDPC error correction engine with digital signal processing for embedded NAND flash controller in 40 nm coms, in Symposium on VLSI Circuits Digest of Technical Papers, Juni 2014, S. 1–2.
- [30] K. Haymaker und C. A. Kelley, Structured bit-interleaved LDPC codes for MLC flash memory, in IEEE Journal on Selected Areas in Communications, Bd. 32, Nr. 5, S. 870–879, Mai 2014.
- [31] Solid-State Drive (SSD) Requirements und Endurance Test Method (JESD218), JEDEC SOLID STATE TECHNOLOGY ASSOCIATION, 2010.
- [32] S. Li und T. Zhang, Improving multi-level NAND flash memory storage reliability using concatenated BCH-TCM coding, in IEEE Transactions on Very Large Scale Integration (VLSI) Systems, Bd. 18, Nr. 10, S. 1412–1420, Okt. 2010.
- [33] S. Qi, D. Feng, und J. Liu, Optimal voltage signal sensing of NAND flash memory for LDPC code," in Signal Processing Systems (SiPS), 2014 IEEE Workshop on, Okt. 2014, S. 1–6.
- [34] J. Massey, Variable-length codes und the Fano metric, in IEEE Transactions on Information Theory, Bd. 18, Nr. 1, S. 196–198, 1972.
- [35] V. Sorokine und F. Kschischang, A sequential decoder for linear block codes with a variable bias-term metric, in IEEE Transactions on Information Theory, Bd. 44, Nr. 1, S. 410–416, 1998.
- [36] J. Spinner und J. Freudenberger, Design and implementation of a pipelined decoder for generalized concatenated codes, in Proceedings of 27th Symposium on Integrated Circuits und Systems Design (SBCCI), Aracaju, Brazil, Sept. 2014, S. 1–16.
- [37] L. Weiburn und J. Cavers, Improved performance of Reed-Solomon decoding with the use of pilot signals for erasure generation, in Vehicular Technology Conference, 1998, VTC 98. 48th IEEE, Bd. 3, Mai 1998, S. 1930–1934, Bd. 3.
- [38] C. Yang, Y. Emre, und C. Chakrabarti, Product code schemes for error correction in MLC NAND flash memories, in IEEE Transactions on Very Large Scale Integration (VLSI) Systems, Bd. 20, Nr. 12, S. 2302–2314, Dez. 2012.
- [39] J. Oh, J. Ha, J. Moon, und G. Ungerboeck, RS-enhanced TCM for multilevel flash memories, in IEEE Transactions on Communications, Bd. 61, Nr. 5, S. 1674–1683, Mai 2013.
- [40] E. Yaakobi, J. Ma, L. Grupp, P. Siegel, S. Swanson, und J. Wolf, Error characterization und coding schemes for flash memories, in IEEE GLOBECOM Workshops, Dez. 2010, S. 1856–1860.
- [41] E. Yaakobi, L. Grupp, P. Siegel, S. Swanson, und J. Wolf, Characterization und error-correcting codes for TLC flash memories, in Computing, Networking and Communications (ICNC), 2012 International Conference on, Jan. 2012, S. 486–491.
- [42] R. Gabrys, E. Yaakobi, und L. Dolecek, Graded bit-error-correcting codes with applications to flash memory, in IEEE Transactions on Information Theory, Bd. 59, Nr. 4, S. 2315–2327, April 2013.
- [43] R. Gabrys, F. Sala, und L. Dolecek, Coding for unreliable flash memory cells, in IEEE Communications Letters, Bd. 18, Nr. 9, S. 1491–1494, Sept. 2014.
-
Bezugszeichenliste
-
- 1
- Speichersystem
- 2
- Speichercontroller, einschließlich Codierungsvorrichtung
- 2a
- Prozessoreinheit
- 2b
- eingebetteter Speicher des Speichercontrollers
- 3
- nicht-flüchtiger Speicher (NVM), insbesondere Flashspeicher
- 4
- Host
- 5
- Wortfeld
- 6
- Demultiplexer
- 7
- Metrikberechner
- 8
- Prioritätsqueue-Block, implementiert den Stapel
- 9a, b
- Nur-Lese-Speicher, ROM
- A
- Adressleitungen der ROMs
- D
- Datenleitungen der ROMs
- A1
- Adressleitung(en) zum/vom Host
- D1
- Datenleitung(en) zum/vom Host
- C1
- Steuerleitung(en) zum/vom Host
- A2
- Adressbus des NVM, z. B. Flashspeichers
- D2
- Datenbus des NVM, z. B. Flashspeichers
- C2
- Steuerbus des NVM, z. B. Flashspeichers
-
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
-