-
HINTERGRUND DER ERFINDUNG
-
Gebiet der Erfindung
-
Diese
Erfindung bezieht sich auf Fehlerkorrektur in elektronischen Systemen,
insbesondere auf Systeme, die Fehlerkorrekturcodes zur leichteren Korrektur
von Bitfehlern, zum Beispiel aufgrund von Bauteilfehlern, einsetzen.
-
Beschreibung der verwandten
Technik
-
Fehlercodes
werden allgemein in elektronischen Systemen zum Erkennen und Korrigieren
von Datenfehlern verwendet, wie Übertragungsfehler oder
Speicherfehler. Zum Beispiel können
Fehlercodes zum Erkennen und Korrigieren von Fehlern in Daten verwendet
werden, die über
Telefonleitungen, einen Radiosender oder einen CD-Laser übertragen werden.
Fehlercodes können
zusätzlich
verwendet werden, Fehler zu erkennen und zu korrigieren, die mit
Daten verbunden sind, die im Speicher von Computersystemen gespeichert
werden. Eine übliche Verwendung
von Fehlercodes ist das Erkennen und Korrigieren von Fehlern bei
Daten, die auf dem Datenbus eines Computersystems übertragen
werden. In einem solchen System können Fehlerkorrekturbits oder
Prüfbits
für die
Daten vor ihrer Übertragung
oder Speicherung erzeugt werden. Wenn die Daten empfangen oder abgerufen
werden, können
die Prüfbits verwendet
werden, Fehler in den Daten zu erkennen und zu korrigieren.
-
Fehler
von Bauteilen bzw. Komponenten sind eine weit verbreitete Fehlerquelle
in elektrischen Systemen. Fehlerhafte Komponenten können fehlerhafte
Speicherchips oder fehlerhafte Datenpfade umfassen, die zwischen
Einrichtungen in einem System zur Verfügung stehen. Fehlerhafte Datenpfade
können
zum Beispiel von fehlerhaften Anschlüssen, fehlerhaften Datenpfaden
oder fehlerhaften Drähten stammen.
-
Hamming-Codes
sind ein weit verbreiteter Typ von Fehlercode. Die Prüfbits in
einem Hamming-Code sind Paritätsbits
für Teile
von Datenbits. Jedes Prüfbit
stellt Parität
für eine
einzige bzw. eindeutige Untermenge von Datenbits zur Verfügung. Wenn
ein Fehler auftritt, (d.h. ein oder mehr Datenbits den Zustand wechseln),
werden ein oder mehr der Prüfbits
bei dem erneuten Erzeugen auch den Zustand wechseln (unter der Annahme,
der Fehler ist innerhalb der Klasse von Fehlern, die durch den Code
abgedeckt wird). Durch Feststellen der spezifischen Bits der erneut
erzeugten Prüfbits,
die den Zustand wechselten, kann die Lage bzw. Position des Fehlers
innerhalb der Daten bestimmt werden. Wenn zum Beispiel ein Datenbit
den Zustand wechselt, bewirkt dieses Datenbit, daß ein oder
mehrere der erneut erzeugten Prüfbits
den Zustand wechseln. Da jedes Datenbit zu einer einzigen Gruppe
von Prüfbits beiträgt, identifizieren
die modifizierten Prüfbits
das Datenbit, das den Zustand wechselte. Der Fehler kann durch Invertieren
des als fehlerhaft identifizierten Bits korrigiert werden.
-
Eine
weit verbreitete Verwendung von Hamming-Codes ist das Korrigieren
einzelner Bitfehler innerhalb einer Gruppe von Daten. Allgemein
gesprochen muß die
Anzahl von Prüfbits
groß genug
sein, so daß 2k – 1
größer oder
gleich n + k ist, wobei k die Anzahl der Prüfbits und n die Anzahl von
Datenbits ist. Dementsprechend werden typischerweise sieben Prüfbits zum
Implementieren eines Einzelfehler korrigierenden Hamming-Code für 64 Datenbits
benötigt. Ein
Einzelfehler korrigierender Hamming-Code ist in der Lage einen einzelnen
Fehler zu erkennen und zu korrigieren.
-
Die 1–3 illustrieren
ein Beispiel eines Systems, das einen Hamming-Code zur Einzelfehlerkorrektur
(single-error correction, SEC) verwendet. In diesem Beispiel werden
vier Datenbits (D4, D3, D2 und D1) durch die Verwendung dreier Prüfbits (P1,
P2 und P3) geschützt.
Der Paritätsgenerator 10 (1)
wird verwendet, um den Datenblock zu kodieren, der die Datenbits
und die Prüfbits
enthält.
Der Kodiervorgang wird vor dem Speichern oder Kommunizieren der
Daten ausgeführt. 2 zeigt eine
Zuweisung von Datenbits zur Berechnung der Prüfbits. In diesem Beispiel wird
das Prüfbit
P1 durch ein XOR (exklusives ODER) der binären Werte in D4, D3 und D1
erzeugt. Auf ähnliche
Weise wird das Prüfbit
P2 durch ein XOR der binären
Werte in D4, D2 und D1 erzeugt, und das Prüfbit P3 wird durch ein XOR
der binären
Werte in D3, D2 und D1 erzeugt. 3 zeigt
die Bitpositionen und den entsprechenden Inhalt dieser Positionen
innerhalb des kodierten Datenblocks. Der Datenblock, der die Datenbits
und die erzeugten Prüfbits
enthält,
kann dann in einem Speicherchip gespeichert oder über einen
Datenkommunikationspfad kommuniziert werden.
-
Am
Empfangspunkt wird der Datenblock abgerufen und dekodiert. Der Dekodierungsvorgang umfaßt das Durchführen einer
Gültigkeitsprüfung auf dem
empfangenen Wort und das Ausführen
einer Fehlerkorrekturtechnik, wenn ein Fehler erkannt wurde. Zum Überprüfen, ob
ein Fehler beim Speichern (oder Übertragen)
des Datenblocks auftrat, werden die Prüfbits P1, P2 und P3 effektiv
unter Verwendung der empfangenen Daten erneut erzeugt und jedes
erneut erzeugte Prüfbit
wird zum Erzeugen eines entsprechenden Syndrombits mit dem entsprechenden empfangenen
Prüfbit
mit XOR verknüpft. 4 ist eine
Tabelle zur Darstellung einer Art und Weise, auf die die Syndrombits
erzeugt werden können.
Insbesondere können
die Syndrombits S1 durch XOR-Verknüpfung der
empfangenen Binärwerte
in P1, D4, D3 und D1 erzeugt werden. Wenn keines der empfangenen
Datenbits (D4, D3, D1) fehlerhaft ist, wird der Wert des empfangenen
Prüfbits
P1 auf wirksame Weise mit sich selbst XOR-verknüpft, und das Syndrombit S1
wird 0 sein (unter der Annahme, daß das ursprüngliche Prüfbit P1 nicht fehlerhaft ist).
Wenn eines der Datenbits (D4, D3, D1) oder das Prüfbit P1 fehlerhaft
ist, wird das Syndrombit S1 gleich 1 gesetzt sein, was einen Fehler
anzeigt. Die Syndrombits S2 und S3 können auf ähnliche Art und Weise erzeugt werden.
Zusammengenommen können
die Syndrombits S1, S2 und S3 zum Identifizieren der Lage eines
fehlerhaften Bits verwendet werden. Zum Beispiel zeigt wie in 3 dargestellt
der binäre
Wert des Syndrombits in der Zeilenfolge [S3, S2, S1] die Position
des fehlerhaften Bits innerhalb der 7-Bit-Datenblöcke an. Wenn das Syndrombit
aus lauter Nullen besteht (d.h. „000"), haben die Daten keinen Einzelbitfehler.
Auf das Identifizieren der fehlerhaften Bitposition hin wird der
Fehler durch Invertieren des Binärwertes
in dieser Position, d.h. von 0 zu 1 oder von 1 zu 0, korrigiert.
-
Es
ist übliche
Praxis die Daten in mehreren Komponenten zu speichern oder sie durch
mehrere Komponenten zu kommunizieren. Zum Beispiel kann ein Datenblock
in einer Vielzahl von Speicherchips gespeichert werden oder er kann
durch eine Vielzahl von Drähten
kommuniziert werden. Ein Fehler kann eingeführt werden, wenn eine der Komponenten
fehlerhaft ist. Ein Hamming-Code wie der oben beschriebene kann
in solchen Systemen verwendet werden, um eine Fehlerkorrektur anzugehen.
-
Zum
Beispiel betrachte man den Fall, daß D Bits von Daten, die durch
C Prüfbits
geschützt
werden, mittels M Speicherchips gespeichert werden. Der Datenblock
enthält
daher D + C-Bits. Wenn der Datenblock gleichmäßig zwischen den M Speicherchips
verteilt werden soll, wird jeder Speicherchip X der Daten- und/oder
Prüfbits
des Datenblocks speichern, wobei X = (D + C)/M. Der Standardansatz
zum Bereitstellen von Fehlerkorrektur für Chipfehler ist, die D + C
Daten und Prüfbits
in X logische Gruppen aufzuteilen, von denen jede M Bits enthält, und
jeder Gruppe 1 Bit von jedem Chip zuzuweisen. Die Prüfbits in
jeder Gruppe bilden einen SEC-(single-error correcting, Einzelfehlerkorrektur)Code
wie z.B. einen Hamming-Code. Wenn irgendein Chip einen Fehler hat,
führt er
höchstens
einen Fehler in jede Gruppe ein, und diese Fehler werden durch Gebrauch
des SEC-Codes unabhängig
von einander korrigiert. Wenn in jeder Gruppe ein Hamming-Code verwendet wird,
ist eine Gesamtzahl von C = X·L
Prüfbits
nötig, wobei
L die kleinste ganze Zahl ist, so daß 2^L > M. Diese Standardansatz ist ineffizient,
da jede Gruppe in der Lage ist, unabhängig zu identifizieren, welches Bit
(wenn überhaupt
eines) in der Gruppe einen Fehler hat. Wenn jedoch die einzigen
betrachteten Fehler Fehler des Speicherchips sind, haben die Fehler
in verschiedenen Gruppen eine hohe Korrelation.
-
Eine
NTIS Technical Note, eine vom US Department of Commerce, dem Amerikanischen
Handelsministerium im Oktober 1990 (10/1990) herausgegebene fachspezifische
Miteilung mit dem Titel: „32-Bit-Wide
Memory Tolerates Failures" beschreibt auf
Seite 818 vier 8-Bit Datenwörter,
die über
acht 4-Bit DRAMs verteilt sind, wobei Hamming-Codierung bedeutet,
daß ein
fehlerhaftes DRAM nur korrigierbare Einzelbitfehler verursacht.
-
Es
wäre wünschenswert,
ein System und ein Verfahren zur Verfügung zu stellen, welche das
zuverlässige
Speichern oder Übertragen
von Daten in Umgebungen, in denen Komponentenfehler möglich sind,
erlauben. Insbesondere wäre
es wünschenswert,
ein System und ein Verfahren zur Verfügung zu stellen, welche ein
Erkennen und Korrigieren von Fehlern in Daten erlauben, während die
Anzahl der zu übertragenden
oder zu speichernden Prüfbits
reduziert wird.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Aspekte
der Erfindung werden in den beiliegenden Ansprüchen definiert.
-
Die
oben aufgezeigten Probleme mögen
in weiten Teilen durch ein System und ein Verfahren zum Erkennen
und Korrigieren von Fehlern in einem Datenblock gemäß der vorliegenden
Erfindung gelöst
werden. Nach einer Ausführungsform
empfängt und
kodiert eine Prüfbit-Erzeugungseinheit
zu schützende
Daten. Die Prüfbit-Erzeugungseinheit
teilt die Daten effektiv in eine Mehrzahl logischer Gruppen auf.
Die Prüfbit-Erzeugungseinheit
erzeugt ein Paritätsbit
für jede
der logischen Gruppen und erzeugt zusätzlich eine globale Fehlerkorrektur.
-
Der
Code zur globalen Fehlerkorrektur zeigt eine vorher bestimmte Kombination
eines Satzes von Fehlerkorrekturcodes an, von denen jeder individuell mit
einer entsprechenden logischen Gruppe verbunden ist. In verschiedenen
Ausführungsformen
entspricht der Code zur globalen Fehlerkorrektur dem Ergebnis des
Erzeugens individueller Fehlerkorrekturcodes für jede logische Gruppe und
ihrer Kombination in einer vorherbestimmten Art und Weise.
-
In
einer besonderen Ausführungsform
werden die Daten in eine Menge von X logischen Gruppen aufgeteilt.
Der Code zur globalen Fehlerkorrektur kann zu dem Ergebnis (oder
kann abgeleitet werden von) des Verschiebens (entweder linear oder
zyklisch) des Fehlerkorrekturcodes für eine gegebene i-te Gruppe
um i Bitpositionen, wobei i = 0 bis X – 1, und der XOR-Bildung entsprechender
Spalten der resultierenden verschobenen Fehlerkorrekturcodes zusammen
genommen äquivalent
sein. Der Code zur globalen Fehlerkorrektur, der in diesem Fall
als einer bezeichnet wird, der Bits mit „twisted check" bzw. verdrillter
Prüfung
hat, (vermittels des selektiven Verschiebens des individuellen Fehlerkorrekturcodes) und
umfaßt
somit ein separates Bit, das die Parität anzeigt, die für jede ausgerichtete
Spalte durch das Sammeln der resultierenden verschobenen Fehlerkorrekturcodes
gebildet wird. Die Daten werden zusammen mit dem Paritätsbit für jede logische
Gruppe und dem Code zur globalen Fehlerkorrektur dann durch einen
Kommunikationskanal übermittelt
oder in einen Speicher gespeichert.
-
Vorteilhafterweise
ist die Gesamtzahl benötigter
Prüfbits
(die Paritätsbits
für die
logischen Gruppen und die den Code zur globalen Fehlerkorrektur bildenden
Bits) kleiner als die Gesamtzahl der für die Sammlung von mit ihren
logischen Gruppen individuell zugewiesenen Fehlerkorrekturcodes
benötigten Bits.
In einer Ausführungsform
werden Daten auf entsprechende Bitpositionen innerhalb der logischen Gruppen
durch eine gemeinsame Komponente übertragen, wie z.B. durch denselben
Draht, oder in derselben Komponente gespeichert, wie z.B. in demselben
Speicherchip. Zusätzlich
werden Datenbits an unterschiedlichen Bitpositionen innerhalb einer
gegebenen logischen Gruppe nicht durch eine gemeinsame Komponente übertragen
oder nicht in einer solchen gespeichert.
-
Eine
Fehlerkorrektureinheit ist angeschlossen, um die Mehrzahl von Datenbits
und der Prüfbits nach
Speicherung oder Übertragung
zu empfangen. Die Fehlerkorrektureinheit ist zum Erzeugen eines Paritätsfehlerbits
für jede
der logischen Gruppen von Daten basierend auf den empfangenen Datenbits eingerichtet.
Die Fehlerkorrektureinheit kann zudem dafür eingerichtet sein, einen
erneut erzeugten Code zur globalen Fehlerkorrektur in der selben
Weise zu erzeugen, in der der ursprüngliche Code zur globalen Fehlerkorrektur
abgeleitet wird. Daher ist nach einer Ausführungsform der erneut erzeugte
Code zur globalen Fehlerkorrektur äquivalent zu dem Ergebnis von
(oder kann abgeleitet werden durch) dem Verschieben des erneut erzeugten
Fehlerkorrekturcodes für
eine gegebene i-te Gruppe um i Bitpositionen, wobei i = 0 bis X – 1 ist,
und der Xor-Bildung entsprechender zusammengenommener Spalten der
sich ergebenden verschobenen Fehlerkorrekturcodes.
-
Ein
globaler Syndromcode kann durch XOR-Bildung in dem ursprünglichen
Code zur globalen Fehlerkorrektur mit den erneut erzeugten Code zur
globalen Fehlerkorrektur erzeugt werden. Dieser globale Syndromcode
zeigt einen Unterschied zwischen dem ursprünglichen Code zur globalen
Fehlerkorrektur und dem erneut erzeugten Code zur globalen Fehlerkorrektur
an.
-
Im
allgemeinen wird der globale Syndromcode so erzeugt, daß mit Kenntnis
der spezifischen logischen Gruppen mit einem Einzelbitfehler ein
Wert aus dem globalen Syndromcode abgeleitet werden kann, der die
Lage des Fehlers in einer solchen Gruppe angibt. Die Gesamtzahl
von Bits, die den globalen Syndromcode und die Paritätsbits für jede logische
Gruppe bilden, ist kleiner als die Gesamtzahl von Bits, die für die den
logischen Gruppen individuell zugeordneten Fehlerkorrekturcodes
benötigt
wird.
-
In
Ausführungsformen,
in denen die Fehlerkorrekturcodes für verschiedene logische Gruppen verschoben
oder mit Xor verarbeitet werden, enthält der globale Syndromcode
ein Bit, das jeder ausgerichteten Spalte des erneut erzeugten, verschobenen Fehlerkorrekturcodes
entspricht, das anzeigt, ob ein Paritätsfehler für diese Spalte vorliegt. Das
Vorhandensein eines Einzelbitfehlers in irgendeiner logischen Gruppe
kann mittels des ursprünglichen
Paritätsbits
und der für
diese Gruppe empfangenen Daten bestimmt werden. Zusätzlich wird,
da die von dem System betrachtete Klasse korrigierbarer Fehler auf
Einzelbitfehler beschränkt
ist, die innerhalb der verschiedenen logischen Gruppen an derselben
Position auftreten, (solche Fehler können aufgrund von Einzelkomponentenfehlern
auftreten) der Fehlerkorrekturcode für jede logische Gruppe, die
einen Fehler hat, einen Wechsel an genau derselben Bitposition wiedergeben.
Daher kann durch Verschieben der verschiedenen Fehlerkorrekturcodes
auf „verdrehte Art
und Weise" bzw. „twisted
manner" (d.h. einige werden
mehr verschoben als andere) und XOR-Bildung der resultierenden vertikal
ausgerichteten Spalten, die Korrelation ausgenutzt werden, die mit
Bezug auf die spezifischen Bits existiert, die sich in jedem Fehlerkorrekturcode
für jede
logische Gruppe mit einem Fehler ändern (d.h. der Fehlerkorrekturcode
für jede
logische Gruppe mit einem Fehler bewirkt einen Wechsel an genau
derselben Bitposition), um damit Information herauszuziehen, die
die spezifische Bitposition des Fehlers angibt.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
Andere
Aufgaben und Vorteile der Erfindung werden beim Lesen der folgenden
detaillierten Beschreibung und durch Bezug auf die begleitenden Zeichnungen
ersichtlich, von denen:
-
1 (Stand
der Technik) ein Blockdiagramm ist, das einen Paritätsgenerator
zum Kodieren von Datenbits mittels eines Einzelfehler korrigierenden
Hamming-Codes darstellt;
-
2 (Stand
der Technik) eine Zuordnungstabelle zum Berechnen eines Satzes von
Prüfbits ist;
-
3 (Stand
der Technik) eine Darstellung von Bitpositionen und ihrem Inhalt
für einen
durch den Paritätsgenerator
in 1 kodierten Datenblock ist;
-
4 (Stand
der Technik) eine Zuordnungstabelle zum Erzeugen eines Syndromcodes
ist;
-
5 ein
Blockdiagramm eines Systems ist, das eine Fehlersteuerungseinheit
gemäß einer
Ausführungsform
der vorliegenden Erfindung beinhaltet;
-
6A einen
Kodierprozeß darstellt,
der das Erzeugen von Zeilenparitätsbits
und Zeilenfehler korrigierenden Codes umfaßt;
-
6B eine
Art und Weise darstellt, auf die ein Code zur globalen Fehlerkorrektur
erzeugt werden kann;
-
7A eine
Art und Weise darstellt, auf die ein Satz von Zeilenparitätsfehlerbits
und erneut erzeugter Fehlerkorrekturcodes erzeugt werden kann;
-
7B eine
Art und Weise darstellt, auf die ein erneut erzeugter Code zur globalen
Fehlerkorrektur erzeugt werden kann;
-
8A eine
Art und Weise darstellt, auf die ein globaler Syndromcode erzeugt
werden kann;
-
8B eine
Art und Weise darstellt, auf die ein Satz von Zeilensyndromcodes
erzeugt werden kann;
-
9 ein
Blockdiagramm eines Systems ist, das eine linear Verschiebeeinheit
zum Dekodieren eines Datenblockes beinhaltet;
-
10 ein
funktionales Blockdiagramm einer linearen Verschiebeeinheit ist;
-
11–17 ein
beispielhaftes Erzeugen eines Zeilensyndromcodes darstellt;
-
18 und 19 ein
Flußdiagramm
darstellen, das eine Ausführungsform
eines linearen Dekodierungsprozesses darstellt;
-
20–27 Zuordnungstabellen
zur Darstellung der Funktion eines Satzes von Prüfbits gemäß einer anderen Ausführungsform
der Erfindung darstellen;
-
28–35 Zuordnungstabellen
zur Darstellung des Erzeugens eines Satzes von Zeilenparitätsfehlerbits
und erneut erzeugten verdrehten Prüfbits für die Ausführung der 20–27 sind;
-
36 einen
linearen Dekodierungsprozeß darstellt;
und
-
37 eine
Blockdiagramm eines Systems gemäß einer
anderen Ausführungsform
der vorliegenden Erfindung ist.
-
Während die
beanspruchte Erfindung für verschiedene Änderungen
und alternative Formen empfänglich
ist, werden anhand von Beispielen spezifische Ausführungsformen
hiervon in den Zeichnungen gezeigt und hier weiter im Detail beschrieben.
-
DETAILLIERTE BESCHREIBUNG
DER ZEICHNUNGEN
-
In 5 wird
ein Blockdiagramm eines Systems mit einer Fehlersteuerungseinheit 105 gemäß einer
Ausführungsform
der vorliegenden Erfindung gezeigt. In dieser besonderen Ausführungsform
ist die Fehlersteuerungseinheit 105 zum Übertragen und
Empfangen von Daten aus dem Speicher 110 angeschlossen.
Der Speicher 110 ist zum Speichern eines Datenblocks (Datenbits
und Prüfbits)
eingerichtet, der an die/von der Fehlersteuerungseinheit kommuniziert
wird. Der Speicher 110 beinhaltet eine Mehrzahl von Speicherchips 110A–110M.
Jeder dieser Speicherchips 110A–110M ist zum Speichern
eines Teils des Datenblocks eingerichtet. Die Speicherchips 110A–110M können jede
Art von Speichereinrichtung zum Speichern von Daten sein.
-
Wie
weiter unten genauer beschrieben, ist die Fehlersteuerungseinheit 105 zum
Kodieren von Daten eingerichtet, die im Speicher 110 gespeichert werden
sollen, und zum Dekodieren emp fangener kodierter Daten nach dem
Speichern, um gewisse Kategorien von Bitfehlern (wenn sie auftreten)
mittels einer im Vergleich zu herkömmlichen Ansätzen wie typischen
Einzelfehler korrigierenden Hamming-Codes relativ kleinen Zahl von
Prüfbits
zu korrigieren.
-
Die
Fehlersteuerungseinheit 105 beinhaltet eine Prüfbit-Erzeugungseinheit 120 zur
Durchführung
des Kodierprozesses und eine Fehlerkorrektureinheit 130 zur
Durchführung
des Dekodierprozesses und zur Durchführung der Fehlerkorrektur.
Datenbits werden über
den Datenpfad 151 empfangen und durch die Prüfbit-Erzeugungseinheit 120 vor dem
Speichern eines Datenblocks (Datenbits und Prüfbits) in den Speicher 110 über den
Datenpfad 152 kodiert. Danach kann der gespeicherte Datenblock
durch die Fehlerkorrektureinheit 130 über den Datenpfad 152 abgerufen
werden. Die Fehlerkorrektureinheit 130 dekodiert den Datenblock
zum Erkennen und Korrigieren von Fehlern in den Daten. Wenn ein
oder mehr Fehler erkannt werden, werden die Fehler korrigiert. Die
Datenbits (korrigiert, wenn nötig)
werden dann über
den Datenpfad 155 ausgegeben.
-
Man
beachte, daß die
Prüfbit-Erzeugungseinheit 120 und
die Fehlerkorrektureinheit 130 in Hardware, in Software
oder durch eine Kombination davon implementiert sein kann. Verschiedene
spezifische Implementierungen davon sind möglich.
-
Der
Betrieb der Fehlersteuerungseinheit 105 wird als nächstes unter
Bezugnahme auf die 5–8 erklärt. Die 6A–8B stellen
ein Beispiel dar, bei dem insgesamt 20 Datenbits, die in dem Speicher 110 gespeichert
werden sollen, geschützt
werden.
-
Die 6A und 6B stellen
einen durch die Prüfbit-Erzeugungseinheit 120 durchgeführten Kodierprozeß vor dem
Speichern der Datenbits dar. Die Prüfbit-Erzeugungseinheit 120 empfängt 20 Datenbits
(über Datenpfad 151)
und verarbeitet in diesem Beispiel die Daten gemäß den fünf logischen Gruppen, jede
Gruppe bildet eine entsprechende Reihe R0–R4 wie in 6A gezeigt.
Ein mit D4, D3, D2 und D1 bezeichneter Satz von Spalten wird durch entsprechende
Bitpositionen jeder Zeile gebildet. Wie weiter unten genauer beschrieben,
werden die jede Spalte bildenden Daten im selben Speicherchip gespeichert
und verschiedene Bits jeder Zeile werden in verschiedenen Speicherchips
gespeichert.
-
Die
Prüfbit-Erzeugungseinheit 120 ist
zum Erzeugen eines Paritätsbits
pro Zeile (parity bit per row, PPR) und eines globalen Fehlerkorrekturcodes (global
error correction code, GECC) eingerichtet. Der globale Fehlerkorrekturcode
ist gleich einer oder kann von einer vorherbestimmten logischen
Kombination von globalen Fehlerkorrekturcodes abgeleitet werden,
von denen jeder individuell mit einer entsprechenden Zeile verbunden
ist. Die PPR- und GECC-Bits sind Prüfbits zum Schutz der Datenbits
vor höchstens
einem Fehler pro Zeile, vorausgesetzt, daß alle Fehler in derselben
Spalte auftreten.
-
Die
Menge von Paritätsbits
kann entweder mit gerader oder ungerader Parität berechnet werden. Da ein
Paritätsbit
pro Zeile oder logischer Gruppe berechnet wird, ist die Zahl der
PPR-Bits gleich der Anzahl der Zeilen. Bei dem Beispiel in 6A ist gerade
Parität
verwendet worden. Daher ist für
die beispielhaften Daten wie dargestellt jedes der Paritätsbits (PPRs)
für die
Zeilen R0–R3
gleich 1. Das Paritätsbit
für Zeile
R4 ist 0.
-
6A stellt
einen mit jeder Zeile verbundenen Fehlerkorrekturcode (ECC) dar.
Im Beispiel von 6A wird der Fehlerkorrekturcode
für jede
Zeile gemäß der zugeordneten
in 2 gezeigten Tabelle berechnet. Zum Beispiel ist
der für
die Daten in Zeile R0 berechnete Fehlerkorrekturcode [111], und
der für Zeile
R1 berechnete Fehlerkorrekturcode ist [011], und so weiter. Man
beachte jedoch, daß andere
spezifische Fehlerkorrektur-Kodierungstechniken eingesetzt werden
können,
und daß andere
Fehlerkorrektur-Kodierungstechniken mit anderen Zeilen verbunden
sein können.
-
6B stellt
eine Art und Weise dar, auf die der globale Fehlerkorrekturcode
erzeugt werden kann. Insbesondere kann in dieser Ausführungsform der
globale Fehlerkorrekturcode durch selektives Verschieben bestimmter
Zeilen-ECCs mit Bezug aufeinander und XOR-Bildung der resultierenden
vertikal ausgerichteten Bits erzeugt werden. Da einige der Zeilen-ECCs
mehr verschoben werden als andere, werden die den globalen Fehlerkorrekturcode
bildenden Bits als „twisted" bzw. „verdrehte" Bits bezeichnet.
In der Ausführungsform
von 6B wird der globale Fehlerkorrekturcode durch
lineares Verschieben des Fehlerkorrekturcodes für eine gegebene i-te Gruppe
von i Bitpositionen abgeleitet, wobei i = 0 bis X – 1 und
wobei X die Gesamtanzahl von Zeilen oder logischen Gruppen ist.
Die Bits in jeder resultierenden vertikal ausgerichteten Spalte
werden dann gemeinsam mit XOR verknüpft, um somit den globalen Fehlerkorrekturcode
zu erzeugen (führende
oder nachfolgende Nullen können
je nach Notwendigkeit vor dieser XOR-Operation zu den Einträgen auf
jeder Reihe der „verdrehten" ECCs hinzugefügt werden.
-
Man
beachte, daß in
der obigen auf die 6A und 6B bezogenen
Diskussion der globale Fehlerkorrekturcode durch das erste Erzeugen des
individuellen Fehlerkorrekturcodes für jede Zeile und ihre logische
Kombination auf vorbestimmte Weise berechnet wird. In anderen Ausführungsformen kann
der globale Fehlerkorrekturcode direkt aus den Datenbits erzeugt
werden, so daß er
gleich dem Ergebnis des Erzeugens individueller Fehlerkorrekturcodes
für jede
Zeile und ihrer Kombination in einer vorher bestimmten Weise ist.
Zum Beispiel könnte der
in 6B dargestellte globale Fehlerkorrekturcode direkt
aus den Datenbits mittels einer vorherbestimmten Funktion erzeugt
werden, ohne individuelle Fehlerkorrekturcodes für jede Zeile zu erzeugen.
-
Nach
der Berechnung des globalen Fehlerkorrekturcodes werden der 20 Datenbits
enthaltende Datenblock, die Paritätsbits (PPRs) und der globale Fehlerkorrekturcode
(GECC) in den Speicher 110 übermittelt. Man beachte, daß die jede
Spalte (D4, D3 und D1) bildenden Datenbits in dem Datenblock in
einem gemeinsamen Speicherchip gespeichert werden und daß keine
zwei Datenbits in verschiedenen Bitpositionen einer bestimmten Zeile
in demselben Speicherchip gespeichert werden. Man beachte weiterhin,
daß das
Paritätsbit
und der globale Fehlerkorrekturcode (GECC) in zusätzliche
Speicherchips gespeichert werden können. Ein weiteres Beispiel der
Art und Weise, wie die Paritätsbits
und die den globalen Fehlerkorrekturcode (GECC) bildenden Bits zur
Speicherung innerhalb verschiedener Speicherchips verteilt werden
können,
wird weiter unten in Verbindung mit den 20–35 vorgestellt.
-
Man
beachte weiter, daß im
Beispiel der 6A und 6B eine
Gesamtzahl von 12 Prüfbits (die
Paritätsbits
(PPRs), und die Bits der globalen EEC) zum Speichern zusammen mit
den 20 Datenbits erzeugt werden. Diese gesamte Anzahl von Prüfbits ist
vorteilhafterweise geringer als die Zahl mittels herkömmlicher
Verfahren benötigter
Prüfbits
(wobei, zum Beispiel, entsprechend den Zeilen-Fehlerkorrekturcodes
eine Gesamtzahl von 15 Prüfbits
notwendig ist). Allgemein gesprochen wird in Ausführungsformen
mit linear verschobenem globalem Fehlerkorrekturcode, der gemäß dem Beispiel
von 6B erzeugt wurde, eine Gesamtzahl von nur (2X
+ L – 1) Prüfbits benötigt, wobei
angenommen wird, daß D Datenbits
mit C Prüfbits
unter Verwendung von M Speicherchips geschützt werden (wobei M ein Teiler von
(D + C) ist) und wobei X = (D + C)/M und C = X·L, wobei L die kleinste ganze
Zahl ist, so daß 2^L ≥ M ist.
-
Als
nächstes
wird zu den 7A–8B der
Dekodiervorgang des Datenblocks im Anschluß an die Speicherung erläutert. Wie
in 7A dargestellt verarbeitet die Fehlerkorrektureinheit 130 die Daten
gemäß derselben
logischen Gruppen wie sie von der Prüfbiterzeugungseinheit 120 gebildet
werden. Die Fehlerkorrektureinheit 130 kann zum Erzeugen
eines erneut erzeugten Paritätsbits
pro Zeile (parity bit per row, PPR') mittels der empfangenen Daten eingerichtet
werden. Derselbe Paritätstyp
(gerade oder ungerade) wird sowohl während des Kodierens als auch
während
des Dekodierens verwendet. Im Beispiel von 7A werden
zwei Fehler in den Satz empfangener Daten eingeführt, die beide in Spalte D2
auftreten, wie durch Unterstreichen gezeigt. Insbesondere änderten
sich die Bits in Zeile R1 und R3 der Spalte D2, um Fehler beispielhaft
darzustellen. Solche Fehler könnten
das Ergebnis zum Beispiel eines fehlerhaften Speicherchips sein,
der die Bits von Spalte D2 im Datensatz speichert. Daher verändern in
diesem Beispiel die erneut erzeugten Paritätsbits für die Zeilen R1 und R3 den
Zustand. Ein Bit, das für jede
Zeile anzeigt, daß ein
Paritätsfehler
vorliegt, kann durch XOR-Bildung der ursprünglichen Paritätsbits mit
den erneut erzeugten Paritätsbits
erzeugt werden. Man beachte, daß das
Erzeugen dieser Zeilenparitätsfehlerbits
(row parity error bits, RPEs) stattdessen direkt durch XOR-Bildung
der entsprechenden Bits der empfangenen Datenbits mit den ursprünglichen
Paritätsbits
(PPRs) erzeugt werden kann (ohne separates Erzeugen der erneut erzeugten
Paritätsbits
(PPRs)).
-
Wenn
irgendeine der Zeilen, wie durch die Zeilenparitätsfehlerbits (RPEs) angezeigt,
einen Einzelbitfehler hat, erzeugt die Fehlerkorrektureinheit 130 einen
erneut erzeugten globalen Fehlerkorrekturcode auf dieselbe Weise,
in der der ursprüngliche globale
Fehlerkorrekturcode mittels des erneut erzeugten Fehlerkorrekturcodes
erzeugt wurde. Daher kann in einer Ausführungsform der erneut erzeugte globale
Fehlerkorrekturcode durch Verschieben des Fehlerkorrekturcodes für eine gegebene
i-te Gruppe um i Bitpositionen, wobei i = 0 – X – 1 ist und durch XOR-Bildung
der Bits in den resultierenden vertikal ausgerichteten Spalten,
wie in 7B abgebildet, abgeleitet werden. Ähnlich der
vorangegangenen Diskussion kann in anderen Ausführungsformen der erneut erzeugte
globale Fehlerkorrekturcode direkt aus einer vorherbestimmten Funktion
der empfangenen Datenbits abgeleitet werden, ohne einen individuellen
Fehlerkorrekturcode für
jede Zeile zu erzeugen. In solchen Ausführungsformen jedoch, entspricht
der globale Fehlerkorrekturcode einer vorherbestimmten Kombination
eines Satzes von Fehlerkorrekturcodes, von denen jeder individuell
mit einer entsprechenden Zeile verbunden ist.
-
In 8A kann
ein globaler Syndromcode beim Erzeugen des erneut erzeugten globalen
Fehlerkorrekturcodes durch XOR-Bildung des ursprünglichen globalen Fehlerkorrekturcode
mit dem erneut erzeugten globalen Fehlerkorrekturcode erzeugt werden.
Dieser globale Syndromcode zeigt einen Unterschied zwischen dem
ursprünglichen
globalen Fehlerkorrekturcode und dem erneut erzeugten globalen Fehlerkorrekturcode
an. In Ausführungsformen,
in denen Fehlerkorrekturcodes für
verschiedene logische Gruppen auf verdrehte Weise verschoben werden
und durch XOR verknüpft
werden, beinhaltet der globale Syndromcode ein Bit, das jeder ausgerichteten
Spalte des erneut erzeugten verschobenen Fehlerkorrekturcodes entspricht,
was anzeigt, ob ein Paritätsfehler
für diese
Spalte vorliegt. Zum Beispiel werden in dem Beispiel von 8 die Bits in dem globalen Syndromcode
für die
Positionen 2, 3, 4 und 5 gesetzt. Das ist das Ergebnis der Tatsache, daß die Parität in jeder
der Spalten 2, 3, 4 und 5 der verschobenen erneut erzeugten Fehlerkorrekturcodes
von 7B verschieden von der Parität jeder der entsprechenden
Spalten des ursprünglichen,
verschobenen Fehlerkorrekturcodes ist, wie in 6B dargestellt.
Dementsprechend beinhaltet der globale Syndromcode in dieser Ausführungsform
ein Bit, das jeder ausgerichteten Zeile des erneut erzeugten verschobenen
Fehlerkorrekturcodes entspricht, was anzeigt, ob ein Paritätsfehler
für diese
Spalte vorliegt. Da die erneut erzeugten Fehlerkorrekturcodes für die logischen
Gruppen mit Fehlern durch Verschieben der verschiedenen Fehlerkorrekturcodes
und XOR-Bildung der resultierenden Bit-ausgerichteten Spalten auf
eine verdrehte Weise Veränderungen
auf genau denselben Bitpositionen bewirken, kann die Korrelation,
die hinsichtlich Veränderungen
in den Fehlerkorrekturcodes für
logische Gruppen mit Fehlern vorhanden ist, ausgenutzt werden, um
dadurch Informationen herauszuziehen, die die spezifische Position
des Fehlers angeben.
-
8B stellt
zum Beispiel eine Weise dar, auf die ein Satz von Zeilensyndromcodes,
von denen jeder die Lage eines Fehlers in einer gegebenen Zeile
angibt, mittels des globalen Syndromcodes und der Zeilenparitätsfehlerinformation
erzeugt werden kann. Wie in 8B dargestellt,
werden Einträge
(ursprünglich
unausgefüllt)
für jeden
Zeilensyndromcode durch Verschieben der Einträge auf dieselbe Weise, auf
die die Fehlerkorrekturcodes verschoben wurden, um den globalen
Fehlerkorrekturcode zu erzeugen, zur Verfügung gestellt. Zuerst können die Zeilensyndromcodes
für jede
Zeile ohne Fehler mit lauter „Nullen" ausgefüllt werden
(da Zeilen ohne Fehler nicht zu einem Paritätsfehler in einer gegebenen
Spalte beitragen können,
wie durch den globalen Syndromcode identifiziert). Daher können die
Zeilensyndromcodeeinträge
für die
Zeilen R0, R2 und R4 mit lauter „0en" gefüllt
werden. Wie in 8B abgebildet, ist die erste
Zeile mit einem Fehler die Zeile R1. Da das erste Bit des Zeilensyndromcodes
für Zeile
R1 in der Spaltenposition 1 ist, und da der globale Syndromwert
für die
Bitposition 0 ist und der einzige andere beitragende Wert für diese
Bitposition des globalen Syndromcodes aus dem Zeilensyndromcode
für Zeile
R0 (der bekanntermaßen
bereits „0" ist) abgeleitet
ist, kann der Wert des ersten Bits des Zeilensyndromcodes für Zeile
R1 als „0" eingetragen werden.
Zusätzlich
kann, da der Zeilensyndromcode für
jede Zeile mit einem Fehler bekanntermaßen identisch (derselbe) ist,
das erste Bit des Zeilensyndromcodes für Zeile R3 auch als eine „0" ausgefüllt werden.
Anschließend
kann das zweite Bit des Syndromcodes für Zeile R1 auf ähnliche
Weise durch Betrachten des Wertes in Bitposition 2 des globalen Syndroms
und der Werte der Bits in Position 2 der Zeilen 0 und 2 (d.h. das
letzte Bit des Zeilensyndromcodes für Zeile R0 und das erste Bit
des Zeilensyndromcodes für
Zeile R2) ermittelt werden. In dieser Situation kann der Wert des
zweiten Bits des Zeilensyndromcodes für Zeile R1 als „1" eingetragen werden.
Dies spiegelt sich wiederum in dem zweiten Bit des Zeilensyndromcodes
für Zeile
R3 wieder. Das letzte Bit des Zeilensyndromcode kann ähnlich bestimmt
werden.
-
Der
binäre
Wert des Zeilensyndromcodes (mit Bezug auf die dargestellten Werte
in 8B in umgekehrter Reihenfolge) gibt somit die
Position des Fehlers für
logische Gruppen mit Fehlern an. Daher entspricht in diesem Beispiel
der Wert „110", der binär 6 ist,
der Bitposition D2 wie in 3 gezeigt.
Diese Position entspricht der Position der Fehler, die in dem in 7A dargestellten
Beispiel eingeführt
werden.
-
Nach
dem Feststellen bzw. Bestimmen der fehlerhaften Bits in dem empfangenen
Datensatz wird die Fehlerkorrektureinheit 230 darauf eingerichtet,
die Daten wie benötigt
zu korrigieren. So werden in dem Beispiel der 6–8 die Bits in Spalte D2 der Zeilen R1 und
R3 als fehlerhaft identifiziert. Dementsprechend invertiert die
Fehlerkorrektureinheit 230 diese Bits und gibt die Daten über den
Datenausgang 155 als korrigiert aus.
-
Bei
den 9–17 wird
als nächstes
eine Art und Weise betrachtet, auf die die Zeilenparitätsinformation
und die globale Syndrominformation dekodiert werden können, um
den Zeilensyndromcode zu erzeugen. Insbesondere kann wie in 8 dargestellt die Fehlerkorrektureinheit 130 eine
RPE/globale Syndromcodeerzeugungseinheit 131 und eine lineare
Verschiebeeinheit 132 zum Dekodieren eines empfangenen
Datenblocks einsetzen, der mittels der linearen Verschiebemethodologie,
wie oben beschrieben, kodiert ist. Ein funktionales Blockdiagramm,
das funktionale Aspekte der linearen Verschiebeeinheit 132 darstellt,
ist in 10 wiedergegeben. Wie gezeigt
beinhaltet die lineare Verschiebeeinheit 132 eine Steuereinheit 135,
verbunden mit einem Paar von Schieberegister 133 und 134.
Die in den 9 und 10 dargestellten
verschiedenen Funktionalitäten
können
in Hardware, in Software oder mittels einer Kombination davon implementiert werden.
-
Die
RPE/globale Syndromcodeerzeugungseinheit 131 erzeugt die
Zeilenparitätsfehlerbits (RPEs)
und den globalen Syndromcode gemäß der vorangehenden
Beschreibung mittels des empfangenen Datenblocks. Die Zeilenparitätsfehlerbits
(RPEs) und der globale Syndromcode werden dann an die lineare Verschiebeeinheit 132 geliefert.
-
Der
Betrieb der linearen Verschiebeeinheit 132 wird mit Bezug
auf die 11–17 erklärt, zusammen
mit den Flußdiagrammen
der 18–19.
Wie in 11 dargestellt, beinhaltet das
Schieberegister 133 eine Mehrzahl von Zellen RPE[0:4] zum
Speichern der Zeilenparitätsfehlerbits (RPEs)
für die
jeweiligen Zeilen 0–4.
In ähnlicher Weise
beinhaltet das Schieberegister 134 eine Mehrzahl von Zellen
GSC[0:6] zum Speichern des globalen Syndromcodes. Gemäß den 11 und 18 werden
die Zeilenparitätsfehlerbits
RPEs anfangs in das Schieberegister 133 geladen und die
Steuerungseinheit 135 stellt fest, ob das Schieberegister lauter „Nullen" enthält (Schritte 310 und 330).
Wenn das Schieberegister 133 lauter Nullen enthält, womit angezeigt
wird, daß keine
Einzelbitzeilenfehler vorhanden sind, werden keine Datenfehler berichtet
und die Daten werden von der Fehlersteuerungseinheit (Schritt 340)
ausgegeben. Andererseits wird, wenn ein oder mehr Zeilenparitätsfehlerbits
gesetzt werden, der globale Syndromcode in das Schieberegister 134 geladen
(Schritt 350). 12 stellt
den Inhalt der Schieberegister 133 und 134 an
diesem Punkt des Ver fahrens für
die exemplarischen RPEs und den für das zu 8B gehörige Beispiel
erzeugten globalen Syndromcode dar.
-
Der
Inhalt der am weitesten rechts stehenden Zelle des Schieberegisters 133 Zelle
RPE[0]) wird dann während
des Schrittes 360 ermittelt. Wenn der Wert in der am weitesten
rechts stehenden Zelle RPE[0] des Schieberegisters 133 „0" ist, werden der Inhalt
sowohl des Schieberegisters 133 als auch des Schieberegisters 134 um
eine Bitposition nach rechts verschoben (Schritt 370).
Die am weitesten links außen
stehende Parität
in jedem dieser Register wird mit einer „0" aufgefüllt und die Werte, die aus
den am weitesten rechts außen
stehenden Positionen herausgeschoben werden, werden verworfen. Dieser Vorgang
wiederholt sich, bis der Wert in der am weitesten rechts stehenden
Zelle RPE[0] des Schieberegisters 133 „1" ist. 13 stellt
die sich nach dieser Operation in den Schieberegistern 133 und 134 ergebenden
Werte für
die beispielhaften Codes dar.
-
An
diesem Punkt wird der Bitwert in der am weitesten rechts stehenden
Zelle des Schieberegisters 134 als Zeilensyndromcodebit
RSC[0], wie auch in 13 gezeigt (Schritt 380)
aufgezeichnet. Wenn alle Zeilensyndromcodebits noch nicht bestimmt
wurden (Schritt 390), wird eine Bestimmung vorgenommen,
ob das letzte aufgezeichnete Zeilensyndromcodebit eine 1 war. Wenn
nicht, werden die Inhalte von Schieberegister 134 wieder
um eine Position nach rechts verschoben (Schritt 44), und
der Vorgang wiederholt sich. Wenn andererseits das letzte aufgezeichnete
Zeilensyndromcodebit eine 1 war, werden ausgerichtete Bitpositionen
des ersten und zweiten Schieberegisters mit XOR verbunden, und das
Ergebnis wird in dem zweiten Schieberegister 134 (Schritte 420 und 430)
gespeichert. In dem dargestellten Beispiel war das zuletzt aufgezeichnete
Zeilensyndromcodebit eine „0", und somit wird
der Inhalt des zweiten Schieberegisters 134 um eine Bitposition
nach rechts verschoben (Schritt 440) und der Vorgang wiederholt
sich durch Aufzeichnen des Wertes in der am weitesten rechts stehenden
Position des Schieberegisters 134 als das nächste RSC-Bit, wie in 14 dargestellt.
-
Während der
nächsten
Iteration wird, da das letzte aufgezeichnete RSC-Bit „1" war, der Wert in dem
Schieberegister 133 mit XOR mit dem Wert im Schieberegister 134 (Schritt 429)
verbunden, und das Ergebnis wird in Schieberegister 134 gespeichert,
wie in 15 dargestellt. Der Inhalt von
Register 134 wird wieder um eine Bitposition nach rechts verschoben,
wie in 16 dargestellt (Schritt 440), und
das resultierende Bit in der am weitesten rechts gelegenen Position
des Schieberegisters 134 wird als das nächste RSC-Bit verzeichnet,
wie in 17 (Schritt 380) dargestellt.
Wenn alle Bits des Zeilensyndromcodes bestimmt wurden, endet der
Vorgang (Schritt 400).
-
Der
Zeilensyndromcode zeigt die Position des Fehlers für jede Zeile
mit einem Einzelbitfehler an. In dem dargestellten Beispiel ist
der binäre
Wert des Zeilensyndromcodes 6. In 3 entspricht
Bitposition 6 Spalte D2, was die Position des in dem Beispiel von 7A eingeführten Fehlers
ist.
-
Man
beachte, daß alternative
Ausführungsformen
des linearen Verschiebekodierverfahrens, die in Verbindung mit den 9–19 beschrieben wurden,
möglich
sind. Zum Beispiel können
die Werte auf ähnliche
Weise nach links verschoben werden, um den Zeilensyndromcode herzuleiten,
anstatt die Werte in den Schieberegistern 133 und 134 nach rechts
zu verschieben.
-
Man
beachte auch, daß die
empfangenen Prüfbits
mittels anderer Mechanismen dekodiert werden können. Zum Beispiel könnten Mechanismen, die
die Gauß'sche Elimination
verwenden, zum Dekodieren der Zeilenparitätsfehlerbits und des globalen
Syndromcodes zur Herleitung eines Zeilensyndromcodes verwendet werden.
-
Die 20–35 sind
Tabellen, die andere Ausführungsformen
eines Systems darstellen, das lineare Verschiebetechnik zur Erzeugung
globaler Syndromcodes wie oben beschrieben einsetzt. In der in den 20–35 abgebildeten
Ausführungsform
werden 267 Datenbits durch 21 Prüfbits
geschützt.
Der Code wird mittels 288-Bitblöcken
definiert. Die Datenbits in einem Block werden mit D[266:0] bezeichnet.
Die 21 Prüfbits
innerhalb eines Blocks bestehen aus 8 Paritätsbits P[7:0] und einem globalen
Syndromcode, der aus 13 verdrehten Prüfbits T[12:0] besteht.
-
Der
288-Bit-Block ist in acht Gruppen aufgeteilt, die mit G[0] bis G[7]
bezeichnet werden, von denen jede 36 Bits enthält. Dieser Code kann einen Fehler
pro Gruppe von G[0] bis G[7] korrigieren, vorausgesetzt, daß alle Fehler
an derselben Stelle innerhalb einer Gruppe auftreten.
-
Die
Paritätsbits
P[7:0] und verdrehten Prüfbits
T[12:0] werden entsprechend der Tabellen der 20–27 berechnet.
Jede Tabelle listet die 36 Bitpositionen innerhalb der Gruppe und
die Inhalte jeder Bitposition auf. Zum Beispiel enthält G[0][0]P[0], G[0][29]
enthält
D[23] und G[1][32] enthält
T[6], und so weiter. Die verbleibenden Zeilen in jeder Tabelle geben
die Regeln zum Berechnen der Prüfbits
vor. Jedes Prüfbit
ist das exklusive Oder gewisser Werte. Insbesondere werden die Werte,
die zu einem bestimmten Prüfbit
beitragen, mittels einer „1" an der passenden
Position in der Tabelle angegeben. Zum Beispiel ist das Paritätsbit P[0]
das exklusive Oder von G[0][35:1]. Da die Paritätsbits P[7:0] von gewissen
der verdrehten Prüfbits
T[12:0] abhängen,
können
die verdrehten Prüfbits
T[12:0] zuerst berechnet werden, und danach die Paritätsbit P[7:0].
-
Man
beachte, daß es
in diesem Beispiel insgesamt 36 Einträge in jeder Gruppe gibt. Dementsprechend
kann das System so eingerichtet werden, daß eine Gesamtzahl von 36 Speicherchips
verwendet wird, von denen jeder ein Bit von einer entsprechenden
Lage in jeder Gruppe speichert.
-
Wenn
die Daten empfangen werden, werden gemäß den Zuordnungstabellen der 28–35 die
Paritätsfehlerbits
Q[7:0] und die erneut erzeugten, verdrehten Prüfbits V[12:0] (die erneut erzeugten globalen
ECC) durch das exklusive Oder der empfangenen Daten berechnet. Zusätzlich kann
ein globales Paritätsfehlerbit
Q durch das exklusive Oder von Q[7:0] berechnet werden.
-
In
bestimmten Fällen
ist es notwendig, ein unverdrehtes Syndrom U[5:0] zu erzeugen (d.h.
den Zeilen- oder Gruppensyndromcode). Dieses unverdrehte Syndrom
ist eine Funktion von V[12:0] und Q[6:0]. Wie in 36 und
wie im vorangehenden Beispiel dargestellt, kann das unverdrehte
Syndrom U[5:0] mittels paralleler Schieberegister, 333 und 334,
berechnet werden, die ähnlich
den in 10 dargestellten Registern 133 und 134 sind.
-
Das
Schieberegister 333 enthält 7 Zellen, A[6:0] und Schieberegister 334 enthält 13 Zellen, B[12:0].
Jede Zelle enthält
ein einzelnes Bit. Die Schieberegister 333 und 334 werden
separat gesteuert. Wenn ein Schieberegister zum Verschieben veranlaßt wird, überträgt es die
Inhalte jeder Zelle um eine Position nach rechts, gibt den Wert,
der in der am weitesten rechts stehenden Zelle war, aus und lädt eine „0" in die am weitesten
links stehende Zelle. Ähnlich
der vorigen Beschreibung ist es ebenso möglich, das XOR von Schieberegister 333 und
Schieberegister 334 zu berechnen und die Inhalte in das Schieberegister 334 zu
speichern (Schieberegister 333 ist logisch mit Nullen in
den Positionen 12:7. aufgefüllt,
wenn das XOR berechnet wird).
-
Das
unverdrehte Syndrom U[5:0] wird wie folgt berechnet:
- 1. Q[i] in Zelle A[i], 0 ≤ i ≤ 6, laden
und V[i] in Zelle B[i], 0 ≤ i ≤ 12, laden.
- 2. Während
A[0] 0 enthält:
- a. Sowohl Schieberegister 333 als auch Schieberegister 334 um
eine Position nach rechts verschieben, wobei die hinausgeschobenen
Werte verworfen werden.
- 2. Für
i = 0 bis 5:
- a. U[i] = B[0] setzen.
- b. Wenn B[0] = 1, dann das XOR von Schieberegister 333 und
Schieberegister 334 berechnen und das Ergebnis in Schieberegister 334 plazieren
(das heißt
B[j] = A[j] XOR B[j], 0 ≤ j ≤ 6.
- c. Schieberegister 334 um eine Position nach rechts
verschieben, wobei der hinausgeschobene Wert verworfen wird.
-
Bei
gegebenem Q, Q[7:0] und U[5:0] werden Fehler wie folgt korrigiert.
Die Beschreibung, welcher Typ von Fehler aufgetreten ist, geht von
der Annahme aus, daß die
Fehler innerhalb des betrachteten Typs liegen (nämlich 0 bis 8 Fehler, alle
in derselben Position innerhalb ihrer Gruppe).
- 1.
Wenn Q = 0:
- a. Wenn Q[7:0] = 00000000, dann ist kein Fehler aufgetreten.
- b. Wenn Q[7:0] ≠ 00000000,
ist ein korrigierbarer Fehler aufgetreten. Die Bits in allen Positionen
der Form G[i][j] komplementieren, 0 ≤ i ≤ 7, 0 ≤ j ≤ 35, wobei Q[j] = 1 und j = U[5:0]
(als binäre
Zahl betrachtet). (Wenn U[5:0] > 35,
ist ein nicht korrigierbarer Fehler in der Klasse der nicht betrachteten Fehler
aufgetreten).
- 2. Wenn Q = 1: Ein korrigierbarer Fehler ist aufgetreten. Bilde
das Komplement zu den Bits in allen Positionen der Form G[i][j],
0 ≤ i ≤ 7, 0 ≤ j ≤ 35, wobei
Q[i] = 1 und j = U[5:0] (als binäre
Zahl betrachtet). (Wenn U[5:0] > 35,
ist ein nicht korrigierbarer Fehler aufgetreten, der nicht in der
Klasse der betrachteten Fehler liegt).
-
Man
beachte, daß kein
Fehler aufgetreten ist, wenn Q[7:0] = 00000000. Man beachte auch,
daß U[5:0]
nur in den Fällen
1.b und 2 berechnet zu werden braucht (was anzeigt, daß ein korrigierbarer
Fehler aufgetreten ist).
-
In
den in den 20–35 dargestellten Ausführungsformen
werden die durch verdrehte Prüfbits
T[12:0] gebildeten globalen Fehlerkorrekturcodes direkt durch eine
vorbestimmte Kombination von Datenbits erzeugt. Jedes verdrehte
Prüfbit T[12:0]
wird in einer solchen Position innerhalb einer Gruppe gespeichert,
daß es
das einzige Prüfbit
ist, das diese Position abdeckt. Zum Beispiel wird, wie in 28 dargestellt,
das verdrehte Prüfbit
T0 an der Position G[0][01] gespeichert und ist das einzige Prüfbit, das
zu dem erneut erzeugten verdrehten Prüfbit V[0] beiträgt, und
so weiter. Darüber
hinaus beachte man, daß die
Paritätsbits
P[7:0] für
jede Datengruppe gewisse verdrehte Prüfbits enthalten, die in dieser
Gruppe gespeichert sind. Da die Paritätsbits innerhalb der Positionen
[00] der verschiedenen Gruppen gespeichert werden, kann weitergehende Effizienz
erreicht werden.
-
Alternative
Ausführungsformen
sind auch möglich.
In anderen betrachteten Ausführungsformen
werden zum Beispiel die für
die lokalen Gruppen erzeugten Fehlerkorrekturcodes „zyklisch" verschoben (anstatt
linear verschoben) und gemeinsam mit XOR verknüpft, um sowohl den globalen
Fehlerkorrekturcode als auch den erneut erzeugten Fehlerkorrekturcode
abzuleiten. Ausführungsformen,
die P globale Fehlerkorrekturbits erzeugen, sind möglich, wobei
P die kleinste Primzahl ist, so daß P > X und 2^(P – 1) >= M. In solchen Ausführungsformen
ist eine Gesamtzahl von C = X + P Prüfbits erforderlich. Solche
Techniken können
weniger Gesamt-Prüfbits verwenden
als Ausführungsformen,
die linear verschobene Techniken wie zuvor beschrieben verwenden.
-
Weiterhin
sind vielleicht zusätzliche
Ausführungsformen
möglich,
in denen ein globaler Syndromcode mittels anderer Methoden erzeugt
wird. In solchen Ausführungsformen
ist der gespeicherte oder übertragene
globale Fehlerkorrekturcode abhängig
von oder äquivalent
zu einer logischen Kombination eines Satzes von Fehlerkorrekturcodes,
die mit den logischen Gruppen der Ursprungsdaten verbunden sind,
während
der erneut erzeugte globale Fehlerkorrekturcode abhängig von
oder äquivalent zu
einer logischen Kombination eines Satzes von Fehlerkorrekturcodes
ist, die mit den logischen Gruppen der empfangenen oder abgerufenen
Daten verbunden sind. Der globale Fehlerkorrekturcode wird so erzeugt,
daß bei
Kenntnis der spezifischen logischen Gruppen mit einem Einzelbitfehler
ein Wert von dem Syndromcode abgeleitet werden kann, der die Lage
des Fehlers in solchen Gruppen anzeigt. Die Gesamtzahl von Bits,
die den globalen Syndromcode und die Paritätsbits für jede logische Gruppe bilden,
ist kleiner als die Gesamtzahl von Bits, die für die den logischen Gruppen
individuell zugeordneten Fehlerkorrekturcodes benötigt wird.
-
Schlußendlich
zeigt 37 eine Ausführungsform, bei der ein gemäß der vorhergehenden Technik
geschützter
Datenblock über
eine Mehrzahl von Kommunikationskanälen 410A ... 410M übertragen
wird. Jeder Kommunikationskanal 410A–410M steht zum Beispiel
zur Veranschaulichung für
einen Draht oder ein anderes Übertragungsmedium. Ähnlich zu
den vorausgegangenen Ausführungsformen werden
verschiedene Bits in jeder logische Gruppe über verschiedene Kommunikationskanäle übertragen.
-
Während die
vorliegende Erfindung mit Bezugnahme auf spezifische Ausführungsformen
beschrieben wurde, versteht es sich, daß die Ausführungsformen der Veranschaulichung
dienen und daß der
Schutzumfang der Erfindung nicht darauf beschränkt ist.