-
BEREICH DER ERFINDUNG
-
Die
vorliegende Erfindung betrifft Halbleiterspeichersysteme wie z.B.
SRAM-(Static Random
Access Memory)-Systeme oder DRAM-(Dynamic Random Access Memory)-Systeme.
Spezieller, die vorliegende Erfindung betrifft ein Speichersystem
mit einem Fehlererkennungs- und -korrektursystem.
-
ERÖRTERUNG DER VERWANDTEN TECHNIK
-
Halbleiterspeicher
wie DRAM- und SRAM-Geräte
sind für
Soft- und Hardfehler anfällig. Softfehler
entstehen dann, wenn subatomare energetische Partikel auf das Speichergerät treffen
und eine Ladung erzeugen, die hoch genug ist, um den Zustand von
einer oder mehreren Speicherzellen zu stören. Hardfehler werden durch
Defekte in dem Halbleiterbauelement während des Herstellungsprozesses
erzeugt. Der Einbau eines Fehlererkennungs- und -korrekturschaltkomplexes
in Speichergeräte
wurde in vielen Ansätzen
des Standes der Technik beschrieben.
-
So
beschreibt z.B. das US-Patent Nr. 5,638,385 mit dem Titel „Fast Check
Bit Write For A Semiconductor Memory" von John A. Fifield et al. die Verwendung
von Fehlerkorrekturcodes (ECC) wie Fehlerkorrektur-Prüfbits in
einem Speicher mit zwei verschiedenen Speicherzellentypen. Zum Speichern von
Datenbits werden kleinere und langsamere Speicherzellen benutzt,
während
zum Speichern von Fehlerkorrektur-Prüfbits
größere und
schnellere Speicherzellen verwendet werden. Die schnelleren Zellen
bieten einen schnelleren Speicherzugriff auf die Fehlerkorrektur-Prüfbits, so
dass die mit der Erzeugung der Fehlerkorrektur-Prüfbits assoziierte
Verzögerung
kompensiert und der Einfluss der ECC-Erzeugung auf die Speicherschreiblatenz
insgesamt minimal gehalten wird. Dies geht jedoch auf Kosten einer
größeren Fläche.
-
Das
US-Patent Nr. 6,065,146 mit dem Titel „Error Correcting Memory" von Patrick Bosshart
beschreibt einen Fehlerkorrekturspeicher, bei dem keine Einbußen im Hinblick
auf die Speicherzugriffslatenz oder die Betriebsfrequenz entstehen.
Dieser Fehlerkorrekturspeicher führt
Fehlerkorrektur nur während
einer Auffrischungsoperation des Speichers, während einer zweiten oder nachfolgenden Leseoperation
einer Burst-Lesesequenz
oder während
einer Write-back-Operation aus. Infolgedessen erhöht der Fehlerkorrekturansatz
die Leselatenz des Speichers nicht. Ebenso werden Fehlerkorrektur-Prüfbits nur
bei Auffrischungsoperationen des Speichers erzeugt. Infolgedessen
erhöht
die Erzeugung von Fehlerkorrektur-Prüfbits die Schreiblatenz des Speichers
nicht. Dieser Fehlerkorrekturansatz kann jedoch keine Datenfehler
korrigieren, die in der ersten Leseoperation einer Burst-Lesesequenz
auftreten, oder in Daten, die vor dem Erzeugen der Fehlerkorrektur-Prüfbits auf
den Speicher geschrieben wurden.
-
Das
US-Patent Nr. 5,003,542 mit dem Titel „Semiconductor Memory Device
Having Error Correcting Circuit and Method for Correcting Error" von Koichiro Mashiko
et al. beschreibt einen Speicher mit einem ECC-Schaltkomplex, der
in den Leseverstärkerbereich
des Speichers eingebaut ist. Spezieller, ein zweiter Satz von Leseverstärkern und
ECC-Korrekturlogik ist mit den Bitleitungen der Speicherarray gekoppelt,
um dadurch den Fehlerkorrekturprozess durch Eliminieren von Verzögerungen
durch den Ein-/Ausgangs-(E/A)-Schaltkomplex zu beschleunigen. Dieser
Ansatz erfordert jedoch den Einbau eines zweiten Satzes von Leseverstärkern und
ECC-Korrekturlogik
in jede Speicherarray. im Allgemeinen gibt es viele Speicherarrays
in einem Speichergerät.
Infolgedessen vergrößert diese
Anordnung die Arrayfläche
und somit die Siliciumfläche
des Speichers. Außerdem
verlängern,
obwohl Verzögerungen
durch die E/A-Schaltung wegfallen, die Verzögerungen durch die ECC-Korrekturschaltung
weiterhin die Speicherzykluszeit. Für einen Hochfrequenzspeicher ist
diese Verlängerung
signifikant.
-
Die
britische Patentanmeldung 2,289.779A beschreibt ein Verfahren und
eine Vorrichtung für
ein automatisches Scrubbing von ECC-Fehlern in einem Speicher nach
der Erkennung eines korrigierbaren Fehlers in aus dem Speicher gelesenen
Daten. Eine Datenschreiboperation wird jedoch wie folgt durchgeführt. Schreibdaten
müssen
zunächst
von einem Systembus auf eine Busmaschine (BEC) einer Speichersteuerung
(MC) übertragen
werden. Die BEC beinhaltet eine In-Order-Queue für Systembusanforderungen und
die Statusmaschinen, die zum Steuern des Busses und zum Koordinieren
von Datentransfers nötig
sind. Schreibdaten werden nachfolgend von der BEC zu Schreibdatenpuffern
in einer Warteschlangenmanagementeinheit (QMUC) der Speichersteuerung übertragen.
Die Schreibdaten werden dann von den Schreibdatenpuffern auf eine
Datenpfadeinheit (DPU) übertragen,
wobei die Schreibdaten durch einen Multiplexer (OUT MUX) zu einer ECC-Codewort-Erzeugungseinheit
geleitet werden.. Der Multiplexer kann dann so gesteuert werden,
dass er Daten entweder von den Schreibdatenpuffern oder einem Satz
von Lesedatenpuffern leitet. Die ECC-Codewort-Erzeugungseinheit
erzeugt 8 Paritätsbits,
die an den Schreibdatenwert angehängt werden, um ein 72-Bit-Codewort
zu bilden, das danach über
Speicher-Ein-/Ausgabe-(MIO)-Puffer auf den Speicher geschrieben
wird. Der beschriebene Speicherzyklus ist daher unerwünscht lang,
mit großen
Schreiblatenzen.
-
Es
wäre daher
wünschenswert,
einen verbesserten Fehlererkennungs- und -korrekturansatz zu haben,
der die oben beschriebenen Mängel
des Standes der Technik abstellt.
-
ZUSAMMENFASSUNG
-
Demgemäß stellt
die in den Ansprüchen
definierte vorliegende Erfindung ein Speichergerät oder einen eingebetteten
Speicherblock bereit, der eine Array von Speicherzellen mit eingebautem ECC-Schutz
beinhaltet.
-
Speziell
wird gemäß einem
Aspekt der Erfindung ein Halbleiterspeichergerät bereitgestellt, dass Folgendes
umfasst: eine Speicherarray, die so konfiguriert ist, dass sie Datenwerte
und entsprechende Fehlerkorrekturcodewerte speichert; ein erstes
Register, das so konfiguriert ist, dass es einen ersten Schreibdatenwert
und einen entsprechenden ersten Schreibadresswert bei einem ersten
Schreibzugriff auf die Speicherarray speichert; einen Fehlerkorrekturcode-(ECC)-Generator,
der so konfiguriert ist, dass er den ersten Schreibdatenwert vom
ersten Register empfängt
und als Reaktion darauf einen ersten ECC-Wert beim ersten Schreibzugriff
auf die Speicherarray erzeugt, wobei der ECC-Generator so konfiguriert ist, dass
er den ersten ECC-Wert erzeugt, solange der erste Schreibdatenwert
im ersten Register gespeichert ist; Mittel zum Ausgeben des ersten Schreibdatenwertes
und des ersten ECC-Wertes bei einem Lesezugriff, wenn ein mit dem
Lesezugriff assoziierter Leseadresswert mit dem in der ersten Speicherschaltung
gespeicherten ersten Schreibadresswert übereinstimmt; und Mittel zum
Schreiben des ersten Schreibdatenwertes und des ersten ECC-Wertes
auf eine Stelle in der Speicherarray, die mit dem ersten Schreibadresswert
assoziiert ist, bei einem zweiten Schreibzugriff.
-
Gemäß einem
zweiten Aspekt der Erfindung wird ein Verfahren zum Betreiben eines
Halbleiterspeichers bereitgestellt, das die folgenden Schritte umfasst:
Speichern eines ersten Schreibdatenwertes und einer entsprechenden
ersten Schreibadresse in einer ersten Stufe eines Schreibpuffers
bei einem ersten Schreibzugriff; Erzeugen eines ersten Fehlerkorrekturcode-(ECC)-Wertes
als Reaktion auf den in der ersten Stufe des Schreibpuffers gespeicherten ersten
Schreibdatenwertes bei dem ersten Schreibzugriff und Erzeugen des
ersten ECC-Wertes, solange der erste Schreibdatenwert im ersten
Register gespeichert ist; Übertragen
des ersten Schreibdatenwertes, des ersten ECC-Wertes und der ersten Schreibadresse
auf eine Speicherarray bei einem zweiten Schreibzugriff; Schreiben
des ersten Schreibdatenwertes und des ersten ECC-Wertes auf eine
Stelle in der Speicherarray, die durch die erste Schreibadresse
beim zweiten Schreibzugriff identifiziert wird; Speichern eines
zweiten Schreibdatenwertes und einer entsprechenden zweiten Schreibadresse
in der ersten Stufe des Schreibpuffers bei dem zweiten Schreibzugriff;
und Erzeugen eines zweiten Fehlerkorrekturcode-(ECC)-Wertes als
Reaktion auf den in der ersten Stufe des Schreibpuffers gespeicherten
zweiten Schreibdatenwert beim zweiten Schreibzugriff und Erzeugen
des zweiten ECC-Wertes, solange der zweite Schreibdatenwert im ersten Register
gespeichert ist.
-
Die
Speicherzellen sind DRAM-Zellen oder SRAM-Zellen. Die Fehlerkorrekturcode-Funktion
ist so ausgelegt, dass die Fehlerkorrekturcode-Erzeugung die Schreibzugriffszeit
des Speichergerätes nicht
verlängert.
Der Ansatz sieht auch ein Zurückschreiben
(Write-back) von korrigierten Daten vor, ohne die Betriebsfrequenz
des Speichergerätes
zu verringern.
-
Zum
Eliminieren des Effekts der ECC-Erzeugung auf die Schreibzugriffszeit
wird ein Schreibpuffer verwendet, um ein gepostetes Schreibschema
zu erleichtern. Bei einem ersten Schreibzugriff werden ein erster
Schreibdatenwert und die entsprechende erste Schreibadresse an einer
ersten Einsprungadresse des Schreibpuffers gespeichert. Zu diesem Zeitpunkt
erzeugt eine Fehlerkorrekturschaltung einen ersten Fehlerkorrekturcode
als Reaktion auf den ersten Schreibdatenwert. Bei einem zweiten
Schreibzugriff werden der erste Schreibdatenwert und der erste Fehlerkorrekturcode
auf eine zweite Einsprungadresse des Schreibpuffers übertragen
und auf der Speicherarray abgelegt. Gleichzeitig werden ein zweiter
Schreibdatenwert und eine entsprechende zweite Schreibadresse an
der ersten Einsprungadresse des Schreibpuffers gespeichert. Nach
dem Speichern des zweiten Schreibdatenwertes an der ersten Einsprungadresse
des Schreibpuffers erzeugt die Fehlerkorrekturschaltung einen zweiten
Fehlerkorrekturcode als Reaktion auf den zweiten Schreibdatenwert.
Der zweite Schreibdatenwert, die zweite Schreibadresse und der zweite
Fehlerkorrekturcode werden bis zur nächsten Schreiboperation im Schreibpuffer
gespeichert. Da der Fehlerkorrekturcode parallel zum Ablegen eines
vorherigen Schreibdatenwertes erzeugt wird und da die Fehlerkorrekturschaltung
und der Schreibpuffer schneller arbeiten als die Speicherarray, geht
die Fehlerkorrekturcode-Erzeugung nicht auf Kosten von Speicherzykluszeit
oder Schreibzugriffszeit.
-
Fehlererkennung
und -korrektur erfolgen auch an vom Speichergerät gelesenen Datenwerten. Bei
einem Lesezugriff werden ein Lesedatenwert und das entsprechende
ECC-Wort von der Speicherarray gelesen und zu einer Fehlererkennungs-/-korrekturschaltung
gesendet. Die Fehlererkennungs-/-korrekturschaltung erzeugt einen
korrigierten Lesedatenwert, der an den Ausgang des Speichergerätes angelegt
wird. Die Fehlererkennungs-/-korrekturschaltung erzeugt auch ein
korrigiertes ECC-Wort und ein Fehleranzeigesignal, das anzeigt,
ob der Lesedatenwert oder das entsprechende ECC-Wort einen Fehler beinhaltet. In einer
Ausgestaltung zeigt das Fehleranzeigesignal an, ob der Lesedatenwert
oder das entsprechende ECC-Wort ein einzelnes Fehlerbit enthielt.
Wenn das Fehleranzeigesignal aktiviert ist, werden der korrigierte
Lesedatenwert und das korrigierte ECC-Wort zur gleichen Zeit in
den Write-back-Puffer geschrieben, zu der der korrigierte Lesedatenwert
an den Ausgang des Speichergerätes
angelegt wird. Der/das korrigierte Lesedatenwert und ECC-Wort im Write-back-Puffer
werden während
eines Ruhezyklus der Speicherarray, in dem kein externer Zugriff
erfolgt, auf dieser abgelegt. Durch Ablegen des korrigierten Lesedatenwertes
und ECC-Wortes während eines
Ruhezyklus hat das Write-back-Schema keinen negativen Einfluss auf
die Speicherzykluszeit.
-
Die
Zahl der Einsprungadressen im Write-back-Puffer ist begrenzt. Daher
können
die Einsprungadressen des Write-back-Puffer in einer Periode mit
vielen aufeinander folgenden Lesezugriffen mit korrigierbaren Fehlern
erschöpft
werden. In diesem Fall kann eine Zuordnungs-Policy ausgeführt werden,
um entweder die früheste
Einsprungadresse im Write-back-Puffer (FIFO-Policy) fallen zu lassen oder
das Akzeptieren von Einsprungadressen im Write-back-Puffer (LIFO-Policy)
zu stoppen. Die Wahrscheinlichkeit, die Zuordnungs-Policy aufrufen
zu müssen,
ist gering, weil die Zahl der Fehler enthaltenden Wörter in
dem Speicher zu einem gegebenen Zeitpunkt klein ist. Die Wahrscheinlichkeit,
dass alle diese Fehlerwörter
ohne eine ausreichende Zahl von Ruhezyklen dazwischen gelesen werden,
ist noch geringer. Außerdem
hält die
Zuordnungs-Policy das Speichergerät nicht davon ab, korrekt zu
arbeiten, weil auf einen) Lesedatenwert/ECC-Wort, der/das einen
Fehler enthält,
aber nicht im Write-back-Puffer gepostet
werden kann, trotzdem von der Speicherarray zugegriffen werden kann,
korrigiert mit der Fehlererkennungs-/-korrekturschaltung. Dann kann
er/es an den Speicherausgang angelegt werden, solange der/das Datenwert/ECC-Wort
nicht mehr Fehlerbits akkumuliert, als die Fehlerkorrekturschaltung
korrigieren kann. Die Write-back-Pufferung
koppelt die Speicherarray-Operation von der Fehlerkorrekturoperation
ab, weil die Speicherarray nicht auf die korrigierten Daten zu warten
braucht, bevor der Zugriffszyklus vollendet wird. Daher wird die
Speicherzykluszeit nicht durch die Write-back-Operation beeinträchtigt.
Die Leselatenz nimmt jedoch zu, weil die Daten durch die Fehlererkennungs-/-korrekturschaltung propagieren
müssen,
bevor sie an den Ausgang des Speichers angelegt werden.
-
Die
vorliegende Erfindung wird angesichts der nachfolgenden Beschreibung
und der Zeichnungen besser verständlich.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
1 ist
ein Blockdiagramm eines Speichergerätes gemäß einer Ausgestaltung der vorliegenden Erfindung.
-
2 ist
ein Blockdiagramm eines Schreibpuffer-Fehlerkorrekturcode-(ECC)-Generators gemäß einer
Ausgestaltung der vorliegenden Erfindung.
-
3 ist
ein Schaltschema eines Write-back Puffers gemäß einer Ausgestaltung der vorliegenden Erfindung.
-
4 ist
ein Wellenformschema, das den Zeitablauf eines Schreibzugriffs illustriert,
gemäß einer
Ausgestaltung der vorliegenden Erfindung.
-
5 ist
ein Wellenformschema, das den Zeitablauf einer Lesetransaktion,
gefolgt von einer Write-back-Operation illustriert, gemäß einer
Ausgestaltung der vorliegenden Erfindung.
-
6 ist
ein Wellenformschema, das den Zeitablauf von zwei aufeinander folgenden
Lesezugriffszyklen, gefolgt von zwei aufeinander folgenden Write-back-Zyklen illustriert,
gemäß einer
Ausgestaltung der vorliegenden Erfindung.
-
AUSFÜHRLICHE BESCHREIBUNG
-
1 ist
ein Blockdiagramm eines Speichergerätes 100 gemäß einer
Ausgestaltung der vorliegenden Erfindung. Das Speichergerät 100 beinhaltet die
Speicherarray 101, den Speicherarray-Sequencer 102,
das Adressregister 103, den Multiplexer 104, den
Schreibpuffer/ECC-Generator 105, die Fehlererkennungs-/- korrekturschaltung 106,
den Write-back-Puffer 107, den Ausgangstreiber 108 und das
NOR-Gate 109. Die externe Schnittstelle des Speichergerätes 100 beinhaltet
einen 64-Bit-Eingangsdatenbus
Di[63:0], einen 64-Bit-Ausgangsdatenbus Do[63:0], eine Lese-Enable-Leitung REN, eine
Schreib-Enable-Leitung WEN, eine Taktleitung CLK und einen 15-Bit-Adressbus
A[14:0]. In den beschriebenen Ausgestaltungen sind jeder) Bus/Leitung
und das entsprechende Signal mit demselben Bezugselement bezeichnet.
So wird z.B. Di[63:0] zum Bezeichnen des Eingangsdatenbusses und
des auf dem Eingangsdatenbus gesendeten Eingangsdatenwertes benutzt.
-
In
dem beschriebenen Beispiel ist die Speicherarray 101 eine
herkömmliche
32 kB × 72
Bit Speicherarray, aber dies ist nicht unbedingt notwendig. In der
beschriebenen Ausgestaltung beinhaltet die Speicherarray 101 eine
Mehrzahl von Subarrays. Jede Subarray beinhaltet Wortleitungstreiber
zum Aktivieren einer gewählten
Wortleitung sowie Leseverstärker
zum Verstärken
von Signalen von den gewählten
Speicherzellen. Die Speicherarray 101 enthält auch
Adressdecoder zum Zugreifen auf die Speicherzellen, die von der
vom Multiplexer 104 gelieferten Speicheradresse MA[14:0]
gewählt
wurden. Die Speicherarray 101 beinhaltet einen Schaltkomplex, der
der durchschnittlichen Fachperson im Bereich Speicherdesign hinlänglich bekannt
ist.
-
Die
Speicherarray 101 verwendet in der beschriebenen Ausgestaltung
DRAM-Zellen, obwohl
in einer anderen Ausgestaltung auch SRAM-Zellen verwendet werden
können.
Die Auffrischung der DRAM-Zellen wird von einem Schaltkomplex außerhalb
des Speichergerätes 100 durch
periodische Lesezugriffe auf alle Wortleitungen der Speicherarray 101 gesteuert.
Es lässt
sich auch leicht zusätzliche Logik
integrieren, um den Auffrischungsansatz zu adaptieren, der in dem
in Gemeinschaftsbesitz befindlichen US-Patent Nr. 6,028,804 „Method
and Apparatus For 1-T SRAM Compatible Memory" beschrieben ist. Der Betrieb der Speicherarray 101 wird
vom Speicherarray-Sequencer 102 gesteuert, der ein Reihenzugriffsauswahlsignal
RAS#, ein Leseverstärker-Enable-Signal SEN#, ein
Spaltenadressauswahlsignal CAS# und ein Vorladungssignal PRC# erzeugt.
Die Funktionen dieser Steuersignale und der Betrieb des Speicherarray-Sequencers 102 sind
ausführlicher
in dem in Gemeinschaftsbesitz befindlichen US-Patent Nr. 6,147,535 mit dem Titel „Clock
Phase Generator For Controlling Operation of a DRAM Array" beschrieben. In
der beschriebenen Ausgestaltung drückt der Speicherarray-Sequencer 102 der
Reihe nach die Signale RAS#, SEN#, CAS# und PRC# auf eine vorbestimmte
Weise auf, damit ein Speicherzugriff während eines einzelnen Taktzyklus
vollendet werden kann.
-
Der
Adressmultiplexer 104 leitet eine Eingangsadresse MA[14:0]
von einer von drei unterschiedlichen Quellen zur Speicherarray 101.
Eine Quelle ist ein gerastetes Adresssignal LA[14:0], das am Ausgang
des Adressregisters 103 anliegt. Eine andere Quelle ist
die Schreibpuffer-Tag-Adresse WBTag[14:0], die vom Adressfeld des
Schreibpuffers/ECC-Generators 105 erzeugt wird. Die dritte Quelle
ist die Write-back-Puffer-Tag-Adresse
WBBTag[14:0], die vom Adressfeld des Write-back-Puffers 107 erzeugt
wird. Der Adressmultiplexer 104 wird vom Lese-Enable-Signal
REN und vom Schreib-Enable-Signal WEN gesteuert. Wie nachfolgend
ausführlicher
beschrieben wird, lässt
der Multiplexer 104 das gerastete Adresssignal LA[14:0]
bei einer Leseoperation durch, wenn das Lese-Enable-Signal REN aufgedrückt und
das Schreib-Enable-Signal WEN weggenommen wird. Der Multiplexer 104 lässt die Schreibpuffer-Tag-Adresse
WBTag[14:0] bei einer Schreiboperation durch, wenn das Schreib-Enable-Signal
WEN aufgedrückt
und das Lese-Enable-Signal REN weggenommen wird. Schließlich lässt der Multiplexer 104 die
Write-back-Puffer-Tag-Adresse WBBTag[14:0] bei einer Write-back-Operation durch, wenn
sowohl das Schreib-Enable-Signal WEN als auch das Lese-Enable-Signal REN
weggenommen werden.
-
Die
Dateneingabe in die Speicherarray 101 und die Datenausgabe
von der Speicherarray 101 werden als ein 72-Bit-Speicherdatenwort
MD[71:0] auf einem 72-Bit-Datenbus
gesendet. Das 72-Bit-Speicherdatenwort MD[71:0] enthält zwei
Felder: ein 64-Bit-Datenfeld
und ein 8-Bit-Fehlerkorrekturcode-(ECC)-Feld. Am Anfang eines Speicherzyklus
(wie die abfallende Flanke des Signals RAS# andeutet) wird das 72-Bit-Speicherdatenwort
MD[71:0] in ein Datenregister (nicht dargestellt) in der Speicherarray 101 gerastet.
-
2 ist
ein Blockdiagramm des Schreibpuffers/ECC-Generators 105 gemäß einer
Ausgestaltung der vorliegenden Erfindung. In der beschriebenen Ausgestaltung
beinhaltet der Schreibpuffer/ECC-Generator 105 das Eingangsregister 200, das
Ausgangsregister 201, den Fehlerkorrekturcode-(ECC)-Generator 202,
die AND-Gates 203-204, den Komparator 205,
die OR-Gates 206-207, den D-Flipflop 208 und
die Tristate-Ausgangspuffer 210-211. Der Schreibpuffer/ECC-Generator 105 enthält die Register 200 und 201.
Die Register 200-201 sind in einer FIFO-(First
In First Out)-Konfiguration
angeordnet. Das Eingangsregister 200 enthält 79 Bit
zum Speichern eines Adresseintrags (15 Bit) und eines Dateneintrags
(64 Bit). Das Ausgangsregister 201 enthält 87 Bit zum Speichern eines
Adresseintrags (15 Bit), eines Dateneintrags (64 Bit) und des vom
ECC-Generator 202 erzeugten assoziierten Fehlerkorrekturcodes
(8 Bit).
-
Der
Schreibpuffer/ECC-Generator 105 funktioniert wie folgt.
Zu Beginn eines ersten Speicherschreibzugriffs werden ein erster
Schreibdatenwert Di1[63:0] und eine entsprechende
erste Schreibadresse Ai1[14:0] an das Eingangsregister 200 angelegt
und das Schreib-Enalbe-Signal WEN wird im H-Zustand aufgedrückt. Das
Taktsignal CLK geht dann in einen logisch hohen Zustand über und
veranlasst dadurch das AND-Gate 203, ein logisch hohes Signal
zum Enablen des Eingangsregisters 200 anzulegen. Als Reaktion
darauf rastet das Eingangsregister 200 den ersten Schreibdatenwert
Di1[63:0] und die entsprechende erste Schreibadresse
Ai1[14:0]. Der erste Schreibdatenwert Di1[63:0] wird an den ECC-Generator 202 angelegt.
Als Reaktion darauf erzeugt der ECC-Generator 202 ein erstes
Fehlerkorrektur-Prüfbit-Signal
CBi1[7:0].
-
Zu
Beginn eines zweiten (folgenden) Speicherschreibzugriffs werden
ein zweiter Schreibdatenwert Di2[63:0] und
eine entsprechende zweite Schreibadresse Ai2[14:0]
an das Eingangsregister 200 angelegt, und das Schreib-Enable-Signal
WEN wird mit einem hohen Logikwert aufgedrückt. Das Taktsignal CLK geht
danach auf einen hohen Logikwert über, so dass das AND-Gate 203 veranlasst wird,
ein logisch hohes Signal an das Enable-Register 200 anzulegen,
und das OR-Gate 206 veranlasst wird, ein logisch hohes
Signal an das Enable-Register 201 anzulegen. Als Reaktion
darauf werden der erste Schreibdatenwert Di1[63:0],
die erste Schreibadresse Ai1[14:0] und das
erste Prüfbit
CBi1[7:0] in das Ausgangsregister 201 gerastet.
Außerdem
werden der zweite Schreibdatenwert Di2[63:0]
und die zweite Schreibadresse Ai2[14:0]
in das Eingangsregister 200 gerastet.
-
Das
logisch hohe Schreib-Enable-Signal WEN veranlasst auch das OR-Gate 207,
ein logisch hohes Signal im Flipflop 208 zu rasten. Dieses
logisch hohe Signal wird als Reaktion auf die ansteigende Flanke
des CLK-Signals im Flipflop 208 gerastet.
-
Infolgedessen
legt der Flipflop 208 ein logisch hohes Signal an die Enable-Anschlüsse der
Tristate-Ausgangspuffer 210 und 211 an und enabled dadurch
diese Puffer. Als Reaktion darauf setzen die Ausgangspuffer 210 und 211 den
ersten Schreibdatenwert Di1[63:0] und das
erste Prüfbit
CBi1[7:0] vom Ausgangsregister 201 auf
den Speicherdatenbus MD[7l:0]. Der erste Schreibadresswert Ai1[14:0] wird vom Ausgangsregister 201 als
Schreibpuffer-Tag-Adresse WBTag[14:0] geleitet. Die Schreibpuffer-Tag-Adresse
WBTag[14:0] wird als Reaktion auf das logisch hohe WEN-Signal und das logisch
tiefe REN-Signal durch den Multiplexer 104 zur Speicherarray 101 geleitet
(1). Der erste Schreibdatenwert Di1[63:0]
und das erste Prüfhit
CBi1[7:0] (d.h. das Speicherdatenwort MD[71:0])
werden auf die Speicherarray 101 an die Stelle geschrieben,
die durch die Schreibpuffer-Tag-Adresse WBTag[14:0] identifiziert
wird.
-
In
der obigen Weise arbeitet der Schreibpuffer/ECC-Generator 105 als
geposteter Schreibpuffer. Das heißt, bei einem Schreibzugriffszyklus
werden Daten- und Adresswerte, die zuvor zum Schreibpuffer/ECC-Generator 105 gepostet
wurden, zum Durchführen
eines Schreibzugriffs auf die Speicherarray 101 verwendet.
Neue Daten- und
Adresswerte werden zum Register 200 gepostet und entsprechende
Prüfbits
werden während
desselben Schreibzugriffszyklus erzeugt. Die Register 200-201 und
der ECC-Generator 202 sind
erheblich schneller als die Speicherarray 101. Infolgedessen
verzögern
die im Schreibpuffer/ECC-Generator 105 durchgeführten Operationen Schreibzugriffe
auf die Speicherarray 101 nicht.
-
Man
beachte, dass die Datenkohärenz
gewahrt bleiben muss, wenn ein Lesezugriff auf den Inhalt des Schreibpuffers/ECC-Generators 105 trifft. Zum
Wahren der Datenkohärenz
wird der Komparator 205 so geschaltet, dass er sowohl die
aktuelle Zugriffsadresse A[14:0] als auch die zuvor zum Eingangsregister 200 gepostete
Schreibadresse empfängt.
Der Komparator 205 drückt
ein logisch hohes MATCH-Ausgangssignal
auf, wenn die aktuelle Zugriffsadresse mit der im Eingangsregister 200 gespeicherten
Schreibadresse übereinstimmt.
Das MATCH-Signal und das Lese-Enable-Signal REN werden beide an das AND-Gate 204 angelegt.
Wenn der Komparator 205 eine Übereinstimmung erfasst und
der aktuelle Zugriff ein Lesezugriff ist (REN = „1"), dann drückt das AND-Gate 204 ein
logisch hohes Schreibpuffer-Hit-Signal WBHit auf und zeigt dadurch
an, dass der aktuelle Lesezugriff auf den Inhalt des Schreibpuffers/ECC-Generators 105 getroffen ist.
-
Das
WBHit-Signal wird an einen Eingangsanschluss des Speicherzugriff-Sequencers 102 angelegt.
Wenn das WBHit-Signal mit einem logisch hohen Wert aufgedrückt wird,
dann wird verhindert, dass der Speicherzugriff-Sequencer 102 die
Zugriffssteuersignale RAS#, SEN#, CAS# und PRC# erzeugt, so dass
ein Zugriff auf die Speicherarray 101 unterbunden wird.
Stattdessen werden die Lesedaten vom Schreibpuffer/ECC-Generator 105 in
der nachfolgend beschriebenen Weise angelegt.
-
Innerhalb
des Schreibpuffers/ECC-Generators 105 wird das WBHit-Signal
an Eingangsanschlüsse
von OR-Gates 206 und 207 angelegt. Wenn also das
WBHit-Signal im H-Zustand aufgedrückt wird, dann legt das OR-Gate 206 ein
logisch hohes Signal an den Takteingangsanschluss von Register 201 an.
Demzufolge werden zu diesem Zeitpunkt die Schreibdaten, die Schreibadresse
und die assoziierten Prüfbits,
die im Eingangsregister 200 gespeichert sind, in das Ausgangsregister 201 gerastet.
Das OR-Gate 207 legt
ein logisch hohes Signal an den Flipflop 208 an. Dieses
logisch hohe Signal wird als Reaktion auf die ansteigende Flanke
des CLK-Signals in den Flipflop 208 gerastet. Die Tristate-Ausgangspuffer 210 und 211 werden
als Reaktion auf das in den Flipflop 208 gerastete logisch
hohe Signal enabled. Infolgedessen werden der Datenwert und der
im Ausgangsregister 201 gespeicherte entsprechende ECC-Wert
auf den Datenbus MD[71:0] gesetzt. Die Daten und ECC-Werte auf dem
Datenbus MD[71:0] werden zur Fehlererkennungs-/-korrektureinheit 106 geleitet.
Als Reaktion darauf erzeugt die Fehlererkennungs-/-korrektureinheit 106 einen
korrigierten Datenwert, der durch den Ausgangstreiber 108 zum
Datenausgangsbus Do[63:0] geleitet wird, um dadurch den Lesezugriff
zu vollenden.
-
In
dem vorliegenden Beispiel wird zwar das Ausgangsregister 201 verwendet,
aber dieses Element des Schreibpuffers 105 ist nicht in
allen Ausgestaltungen nötig.
So kann die im Eingangsregister 200 gespeicherte Adresse
direkt als die Schreibpuffer-Tag-Adresse
WBTag[14:0] angelegt werden, der im Eingangsregister 200 gespeicherte
Datenwert kann direkt an den Ausgangstreiber 210 angelegt werden,
und die entsprechenden Prüfbits
CB[7:0] können
direkt an den Ausgangstreiber 211 angelegt werden. Während einer
nachfolgenden Schreiboperation werden die im Register 200 gespeicherten
Daten und Adresswerte und die vom ECC-Generator 202 kommenden
Prüfbits
direkt in Register in der Speicherarray 101 gerastet, so
dass sich das Ausgangsregister 201 erübrigt.
-
Fehlererkennung/-korrektur
-
Es
wird jetzt die Fehlererkennungs-/-korrekturschaltung 106 beschrieben.
Es können
in der vorliegenden Erfindung viele verschiedene Fehlererkennungs-/-korrekturcodes verwendet
werden. So kann zum Beispiel in einer Ausgestaltung der Hammingcode
mit ungerader Gewichtung (odd-weight) verwendet werden, der im US-Patent Nr. 5,638,385
mit dem Titel „Fast
Check Bit Write For a Semiconductor Memory" von John A. Fifield et al und in „Cost Analysis
of On Chip Error Control Ciding for Fault Tolerant Dynamice RAMs" von N. Jarwala et
al, Proceedings of the Seventeenth International Symposium on Fault-Tolerant
Computing, Pittsburgh, Pa., 6.-8.
Juli 1987, S. 278-283, beschrieben wird. In der beschriebenen Ausgestaltung
wird der Hammingcode mit ungerader Gewichtung verwendet, der in „16-bit
CMOS Error Detection and Correction Unit", Integrated Device Technology, Inc.
Data Book, April 1990, Section 5.10, S. 1-19, beschrieben ist. Der
modifizierte 72-Bit-Hammingcode bietet Einzelbit-Fehlerkorrektur und
Doppelbit-Fehlerkorrektur. Der 72-Bit-Code beinhaltet 64 Datenbits
und 8 Prüfbits.
-
Die
Implementation von Fehlererkennung/-korrektur unter Verwendung von
Hammingcode mit ungerader Gewichtung wurde in der Literatur beschrieben,
z.B. im US-Patent Nr. 5,638,385 mit dem Titel „Fast Check Bit Write For
A Semiconductor Memory" von
John A. Fifield et als, und in „A Class Of Optimal Minimum
Odd-Weight-Column
SEC-DED Codes" von
M.Y. Hsiao, IBM Journal of Research and Dev., Bd. 14, Juli 1970,
S. 395-401. In einer bevorzugten Ausgestaltung arbeitet die Fehlererkennungs-/-korrektureinheit
106 hauptsächlich
mit Kombinationslogik. Für
die Syndromerzeugung können
3 Level von 4-Eingangs- und 3-Eingangs-XOR-Gates verwendet werden.
Für die
Syndromdecodierung können
5-Eingangs-AND-Gates verwendet werden. Diese Art der Implementation
mit Kombinationslogik ist im Bereich Logikdesign gut bekannt und
wird daher nicht näher
beschrieben.
-
Die
Fehlererkennungs-/-korrektureinheit 106 beinhaltet den Prüfbitgenerator 111,
den Syndromgenerator und -decoder 112 und die Fehlerkorrektureinheit 113.
Bei einem Lesezugriff wird der Hammingcode mit ungerader Gewichtung
aus der Speicherarray 101 gelesen und auf den Speicherdatenbus MD[71:0]
gesetzt. In der Fehlererkennungs-/-korrektureinheit wird der Speicherbus
in zwei Felder unterteilt: das Lesedatenwort-Feld RD[63:0] und das
Leseprüfbit-Feld
RCB[7:0]. Das Lesedatenwort RD[63:0] wird in den Prüfbitgenerator 111 eingegeben.
Der Prüfbitgenerator 111 erzeugt, ähnlich wie der
ECC-Generator 202 (2), einen 8-Bit-ECC-Prüfbitwert
als Reaktion auf das Lesedatenwort RD[63:0]. Dieser ECC-Prüfbitwert
wird an den Syndromgenerator und -decoder 112 angelegt. Der
Syndromgenerator und -decoder 112 vergleicht bitweise (XORs)
die Leseprüfbits
RCB[7:0] mit dem ECC-Prüfbitwert
vom Prüfbitgenerator 111.
Das resultierende 8-Bit-Syndromwort wird decodiert, um zu ermitteln,
ob der aus der Speicherarray gelesene 72-Bit-Code fehlerfrei ist,
einen Einzelbitfehler oder Mehrbitfehler enthält. Im Falle eines Einzelbitfehlers erzeugt
der Syndromgenerator und -decoder 112 ein 8-Bit-Signal,
das den Ort des Fehlerbits anhand des Syndroms identifiziert, und
aktiviert ein Einzelfehlerkennsignal (1-ERR) in einen logisch hohen
Zustand. Das den Ort des Fehlerbits identifizierende 8-Bit-Syndromsignal
wird zur Fehlerkorrektureinheit 113 gesendet. Als Reaktion
darauf korrigiert die Fehlerkorrektureinheit 113 das Fehlerbit,
das im Lesedatenwort RD[63:0] oder im ECC-Prüfbitwert
RCB[7:0] vorliegt. Wenn kein Fehler erkannt wird, dann werden das
Lesedatenwort RD[63:0] und der ECC-Prüfbitwert RCB[7:0] nicht modifiziert.
Im Falle eines Mehrbitfehlers wird weder das Lesedatenwort RD[63:0] noch
der ECC-Prüfbitwert
RCB[7:0] modifiziert.
-
Der
von der Fehlerkorrektureinheit 113 erzeugte Lesedatenwert
wird als korrigierter Datenwert CD[63:0] etikettiert (obwohl zu
verstehen ist, dass die Fehlerkorrektureinheit 113 möglicherweise
keine Korrekturen am Lesedatenwert vornimmt). Ebenso wird der von
der Fehlerkorrektureinheit erzeugte ECC-Prüfbitwert als korrigierter ECC-Prüfbitwert CCB[7:0]
designiert. Der korrigierte Datenwert CD[63:0] wird durch den Ausgangstreiber 108 auf den
Ausgangsdatenbus Do[63:0] gesetzt. Sowohl der korrigierte Datenwert
CD[63:0] als auch der korrigierte ECC-Prüfbitwert
CCB[7:0] werden auch auf den Write-back-Puffer 107 gesetzt.
Wenn das Einzelfehler-Anzeigesignal 1-ERR im H-Zustand aufgedrückt wird,
dann werden der korrigierte Datenwert CD[63:0], der korrigierte
ECC-Prüfbitwert
CCB[7:0] und die entsprechende mit dem Lesezugriff assoziierte gerastete
Adresse LA[14:0] alle auf den Write-back-Puffer 107 geschrieben.
Wie nachfolgend ausführlicher
beschrieben wird, werden der korrigierte Datenwert CD[63:0] und
der korrigierte ECC-Prüfbitwert
CCB[7:0] in eine Warteschlange im Write-back-Puffer 107 gesetzt,
in Erwartung einer Write-back-Operation auf die Speicherarray 101.
-
Write-back-Puffer
-
3 ist
ein Schaltschema, das den Write-back-Puffer 107 gemäß einer
Ausgestaltung der vorliegenden Erfindung illustriert. In dieser
Ausgestaltung beinhaltet der Write-back-Puffer 107 Register 300-301,
D-Flipflops 310-311, Toggle-Flipflops 312-313,
AND-Gates 321-326, NAND-Gate 327, OR-Gates 330-332,
NOR-Gate 333, Ausgangsmultiplexer 341-343 und
Tristate-Ausgangstreiber 351-352. Die Register 300-301 bieten Speicherkapazität für 2 Einträge, wobei
jeder Eintrag ein Adressfeld (ADDR), ein Datenfeld (DATA), ein Korrekturprüfbitfeld
(CCB) und ein Gültig-Bit-Feld
(VALID) beinhaltet. Das Gültigbit-Feld
zeigt an, wenn es auf logisch '1' gesetzt ist, dass der
Inhalt des entsprechenden Registers gültig ist und zurück auf die
Speicherarray 101 geschrieben werden soll. Die Register 300 und 301 sind
in der beschriebenen Ausgestaltung in einer FIFO-Konfiguration angeordnet.
-
Die
Adressfelder der Register 300 und 301 sind so
geschaltet, dass sie das gerastete Adresssignal LA[14:0] empfangen,
die Datenfelder der Register 300 und 301 sind
so geschaltet, dass sie den korrigierten Datenwert CD[63:0] empfangen,
und die Korrekturprüfbitfelder
der Register 300 und 301 sind so geschaltet, dass
sie die korrigierten Prüfbits CCB[7:0]
empfangen. Die Adress-, Daten-, Korrekturbit- und Gültig-Felder
von Register 300 sind jeweils mit LA0,
CD0, CCB0 bzw. VA0 beschriftet. Die Adress-, Daten-, Korrekturprüfbit- und
Gültig-Felder von
Register 301 sind jeweils mit LA1,
CD1, CCB1 bzw. VA1 beschriftet. Die in den Registern 300 und 301 gespeicherten
korrigierten Prüfbitwerte
CCB0 und CCB1 werden
zum Multiplexer 341 gesendet. Die in den Registern 300 und 301 gespeicherten
korrigierten Datenwerte CD0 und CD0 werden zum Multiplexer 342 gesendet.
Die in den Registern 300 und 301 gespeicherten
gerasteten Adresswerte LA0 und LA1 werden zum Multiplexer 343 gesendet.
-
Die
Multiplexer 341-343 werden vom Q-Ausgang des Toggle-Flipflop 313 gesteuert,
der als Lesezeigerwert RP dient. Wenn der vom Flipflop 313 erzeugte
Lesezeigerwert RP einen Logikwert von „0" hat, dann leiten die Multiplexer 341, 342 und 343 jeweils
die Werte CCB0, CD0 bzw.
LA0. Umgekehrt, wenn der Lesezeigerwert
RP einen Logikwert von „1" hat, dann leiten
die Multiplexer 341, 342 und 343 jeweils
die Werte CCB1, CD1 bzw.
LA1.
-
Die
Ausgänge
der Multiplexer 341 und 342 werden jeweils zu
Tristate-Ausgangstreibern 351 und 352 geleitet.
Die Tristate-Treiber 351 und 352 werden durch
das am Q-Ausgangsanschluss des Flipflop 311 anliegende
Ausgangs-Enable-Signal OE gesteuert. Wenn aktiviert (enabled), legen
die Tristate-Puffer 351 und 352 die Signale von
den Multiplexern 341 und 342 jeweils als Speicherdatenausgangssignale MD[7l:64]
und MD[63:0] an. Der Ausgang des Multiplexers 343 wird
direkt als Write-back-Puffer-Tag-Adresse
WBBTag[14:0] bereitgestellt.
-
Der
Write-back-Puffer 107 funktioniert im Allgemeinen wie folgt.
Wenn die Fehlererkennungs-/-korrektureinheit 106 bei einer Leseoperation einen
Einzelfehler erkennt, dann werden der korrigierte Datenwert, der
korrigierte Prüfbitwert
und der assoziierte Adresswert auf eines der Register 300-301 im
Write-back-Puffer 107 geschrieben. Während eines nachfolgenden Ruhezyklus
werden der korrigierte Datenwert und der korrigierte Prüfbitwert
zurück
auf die Speicherarray 101 auf die durch den assoziierten
Adresswert vorgegebene Stelle geschrieben.
-
Der
Betrieb des Write-back-Puffers 107 wird jetzt ausführlicher
beschrieben. Zum Initialisieren des Write-back-Puffers 107 wird
das RESET-Signal zunächst
im H-Zustand aufgedrückt. Als
Reaktion darauf legen die OR-Gates 330 und 331 jeweils
logisch hohe Reset-Werte R0 und R1 an die Register 300 und 301 an.
Diese logisch hohen Reset-Werte R0 und R1 setzen die VALID-Bit-Felder
der Register 300 und 301 asynchron auf logische „0"-Werte (d.h. VA0 = VA1 = „0"). Die VALID-Bits
VA0 und VA1 auf
logisch „0" bewirken, dass das
OR-Gate 332 ein Ausgangssignal von logisch „0" an das AND-Gate 326 anlegen,
so dass der Write-back-Puffer das Signal WBBRet mit logisch „0" ablegen muss. Das
WBBRet-Signal auf logisch „0" wird in den Flipflop 311 gerastet,
so dass das Ausgang-Enable-Signal OE zunächst einen logischen „0"-Wert hat, wodurch
die Tristate-Ausgangstreiber 351-352 gesperrt werden. Wenn
das WBBRet-Signal einen Logikwert von „0" hat, dann werden keine korrigieren
Datenwerte zurück
auf die Speicherarray 101 geschrieben. Das WBBRet-Signal von
logisch „0" wird auch an die
AND-Gates 324 und 325 angelegt. Infolgedessen
bewirkt das WBBRet-Signal, dass die von den OR-Gates 330 und 331 erzeugten
Reset-Werte R0 und R1 zunächst
auf logisch „0" bleiben, nachdem
das RESET-Signal auf logisch „0" übergegangen ist.
-
Das
logisch hohe RESET-Signal setzt auch den Lesezeigerwert RP vom Toggle-Flipflop 313 auf logisch „1", so dass die Multiplexer 341-343 zunächst so
eingestellt werden, dass sie jeweils die Werte CCB1,
CD1 bzw. LA1 vom
Register 301 durchlassen.
-
Das
logisch hohe RESET-Signal setzt auch den Q-Ausgang des Toggle-Flipflop 312 auf
logisch „0". Der Q-Ausgang des
Toggle-Flipflop 312 dient als Schreibzeigerwert WP. Wenn
der Schreibzeigerwert WP tief ist, dann hat das Register 300 die
Aufgabe, den korrigierten Prüfbitwert
CCB[7:0], den korrigierten Datenwert CD[63:0] und den gerasteten
Adresswert LA[14:0] zu empfangen. Umgekehrt, wenn der Schreibzeigerwert
WP hoch ist, dann hat das Register 301 die Aufgabe, diese
Werte CCB[7:0], CD[63:0] und LA[14:0] zu empfangen. Spezieller,
wenn der Schreibzeigerwert WP tief ist, dann wird das AND-Gate 322 enabled,
das Schreibpuffer-Enable-Signal
WBEN zum Enable-Eingangsanschluss des Registers 300 als
das Ladesignal LD0 durchzulassen. Wenn der Schreibpufferwert WP
hoch ist, dann wird das AND-Gate 323 enabled, das Schreibpuffer-Enable-Signal
WBEN zum Enable-Eingangsanschluss
des Registers 301 als das Ladesignal LD1 durchzulassen.
-
Das
Schreibpuffer-Enable-Signal WBEN wird vom AND-Gate 321 bereitgestellt.
Das AND-Gate 321 ist so geschaltet, dass es das 1-ERR Signal
von der Fehlererkennungs-/-korrekturschaltung 106 empfängt. Das
AND-Gate 321 ist auch so geschaltet, dass es ein gerastetes
Lesen-Enable-Signal LREN empfängt,
das am Q-Ausgang
des Flipflop 310 anliegt. (Das Lesen-Enable-Signal REN
wird als Reaktion auf das CLK-Signal in den Flipflop 310 gerastet,
um das gerastete Lesen-Enable-Signal LREN bereitzustellen). Das
AND-Gate 321 ist auch so geschaltet, dass es den Ausgang
des NAND-Gate 327 empfängt,
dessen Eingangsanschlüsse
so geschaltet sind, dass sie Gültigbits
VA0 und VA1 empfangen.
Somit wird das Schreibpuffer-Enable-Signal WBEN hoch aufgedrückt, wenn
ein Einzelfehler in einem Lesedatenwert (1-ERR = „0") bei einer Leseoperation
(LREN = „1") erkannt wird und
sich in einem der Register 300 und 301 eine verfügbare Einsprungadresse
befindet (VA0 und VA1 nicht
gleich „11").
-
Beim
ersten Erkennen eines Einzelfehlers bei einer Leseoperation wird
das Schreibpuffer-Enable-Signal WBEN hoch aufgedrückt. Als
Reaktion auf das hohe WBEN-Signal und den tiefen Schreibzeigerwert
WP drückt
das AND-Gate 322 ein logisch hohes Ladesignal LD0 auf,
das das Register 300 enablet. Als Reaktion darauf werden
die Werte CCB[7:0], CD[63:0] und LA[14:0] bei der Leseoperation
in das Register 300 gerastet. Außerdem wird das logisch hohe
LD0-Signal in das VALID-Feld des Registers 300 gerastet,
um dadurch das Gültigbit
VA0 in einen logisch hohen Zustand zu setzen.
-
Das
logisch hohe Gültigbit
VA0 bewirkt, dass das OR-Gate 332 ein
logisch hohes Signal an das AND-Gate 326 anlegt. Während eines
nachfolgenden Ruhezyklus empfängt,
wenn keine Lese- oder Schreibzugriffe anhängig sind (d.h. REN = WEN = „0"), das AND-Gate 326 ein
logisch hohes Signal vom NOR-Gate 333. Unter diesen Bedingungen
wird das Write-back-Puffer-Ablegesignal WBBRet hoch aufgedrückt, wodurch
angezeigt wird, dass der Inhalt des Registers 300 in der
Speicherarray 101 abgelegt werden kann, ohne eine Lese-
oder Schreiboperation zu stören.
An der nächsten
ansteigenden Flanke des CLK-Signals schaltet das logisch hohe WBBRet-Signal
den vom Flipflop 313 erzeugten Lesezeigerwert RP auf logisch „0" um und bewirkt,
dass das Ausgang-Enable-Signal OE des Flipflop 311 auf
logisch „1" übergeht. Zu diesem Zeitpunkt
leiten die Multiplexer 341-343 die Signale CCB0, CD0 und LA0 vom Register 300. Die Tristate-Puffer 351 und 352 werden enabled,
die Werte CCB0, und CD0 vom
Register 300 als die Werte MD[71:64] und MD[63:0] als Reaktion auf
das logisch hohe Ausgang-Enable-Signal OE anzulegen. Der gerastete
Adresswert LA0 vom Register 300 wird
als die Write-back-Puffer-Tag-Adresse WBBTag[14:0] zur Speicherarray 101 gesendet.
Man beachte, dass das Signal WBBTag[14:0] als Reaktion auf die logisch
tiefen REN- und WEN-Signale durch den Adressmultiplexer 104 geleitet
wird.
-
Das
logisch hohe WBBRet-Signal wird auch an den Speicherarray-Sequencer 102 angelegt,
wodurch die Erzeugung der Speichersteuersignale (RAS#, SEN#, CAS#,
PRC#) eingeleitet wird, die zum Schreiben der korrigierten Daten
zurück
auf die Speicherarray 101 nötig sind. Zu diesem Zeitpunkt werden
der korrigierte Datenwert CD0 und der korrigierte Prüfbitwert
CCB0 zurück
auf die Speicherarray 101 an die durch den Adresswert LA0 identifizierte Stelle geschrieben.
-
Das
CLK-Signal geht nachfolgend auf einen logisch tiefen Pegel über. Zu
diesem Zeitpunkt bewirken das logisch tiefe CLK-Signal, das logisch
hohe WBBRet-Signal und der logisch tiefe Lesezeigerwert RP, dass
das AND-Gate 324 ein logisch hohes Ausgangssignal anlegt.
Als Reaktion darauf drückt
das OR-Gate 330 ein logisch hohes Reset-Signal R0 auf, das
das Gültigbit
VA0 im Register 300 auf logisch „0" zurücksetzt.
Das logisch tiefe VA0-Bit bewirkt, dass das
WBBRet-Signal auf einen logisch tiefen Wert übergeht.
-
Wie
oben beschrieben, wird der im Register 300 gespeicherte
Eintrag während
eines Ruhezyklus abgelegt (d.h. WEN = REN = „0"). Solange jedoch aufeinander folgende
Lese- oder Schreiboperationen laufen, gibt es keinen Ruhezyklus,
während
dem der Eintrag im Register 300 abgelegt werden kann. In diesem
Fall bleibt der Eintrag im Register 300.
-
Wenn
eine andere Leseoperation (REN = „1") mit einem Einzelfehler (1-ERR = „1") vor dem nächsten Ruhezyklus
auftritt, dann drückt
das AND-Gate 321 das Schreibpuffer-Enable-Signal WBEN wieder
mit einem Wert von logisch „1" auf. Die logische „1" des WBEN-Signals
bewirkt, dass der Flipflop 312 umschaltet, so dass der
Schreibzeigerwert WP auf logisch „1" wechselt. Dieses logisch hohe WP-Signal
bewirkt, dass das AND-Gate 323 ein logisch hohes Ladesignal
LD1 aufdrückt.
Als Reaktion darauf werden mit der aktuellen Leseoperation assoziierte
Signale CCB[7:0], CD[63:0] und LA[14:0] jeweils als Werte CCB1, CD1 und LA1 in das Register 301 geladen. Das
logisch hohe Ladesignal LD1 wird auch in das VALID-Feld von Register 301 geladen,
so dass das Gültigbit
VA1 einen logisch hohen Wert hat.
-
Zu
diesem Zeitpunkt haben beide Gültigbits VA0 und VA1 logische „1"-Werte. Infolgedessen
legt das NAND-Gate 327 eine logische „0" an das AND-Gate an. Demzufolge kann
das Schreibpuffer-Enable-Signal WBEN erst dann aufgedrückt werden,
wenn wenigstens eines der Gültigbits
VA0 und VA1 auf
logisch „0" übergeht.
-
Das
heißt,
es können
erst dann wieder zusätzliche
Einträge
auf den Write-back-Puffer 107 geschrieben werden, wenn
der im Register 300 gespeicherte Eintrag in der Speicherarray 101 abgelegt wurde.
Man beachte, dass, wenn bei einer nachfolgenden Leseoperation (bevor
der Eintrag im Register 300 abgelegt werden kann) ein Einzelfehlerzustand vorliegt,
die entsprechenden korrigierten Datenwerte/Prüfbits nicht zurück auf die
Speicherarray 101 geschrieben werden. Der korrigierte Datenwert
wird jedoch aus dem Speichergerät 100 gelesen.
Somit führt
ein Nichtzurückschreiben
des korrigierten Wertes nicht zu einem Ausfall des Speichergerätes 100. Es
ist wahrscheinlich, dass beim nächsten
Lesen dieses Datenwertes/Prüfbits
aus der Speicherarray 101 Raum im Write-back-Puffer 107 zur
Verfügung
steht, so dass das/der korrigierte Datenwert/Prüfbit ordnungsgemäß zurück auf die
Speicherarray 101 geschrieben werden kann.
-
Es
werden nun spezielle Beispiele für Schreib-,
Lese- und Write-back-Operationen
beschrieben.
-
Zeitablauf des Schreibzugriffs
-
4 ist
ein Wellenformschema, das den Zeitablauf von zwei Schreibzugriffen
gemäß einer Ausgestaltung
der vorliegenden Erfindung illustriert. Vor der ansteigenden Flanke
von Taktzyklus T1 wird das Schreib-Enable-Signal WEN hoch aufgedrückt, ein
erster Schreibdatenwert D0 wird an den Eingangsdatenbus Di[63:0]
und ein erster Schreibadresswert A0 an den Adressbus A[14:0] angelegt.
An der ansteigenden Flanke von Taktzyklus T1 werden der erste Schreibdatenwert
D0 und die erste Schreibadresse A0 in das Register 200 gerastet.
In 4 werden der im Register 200 gespeicherte
Schreibdatenwert als DATA200 und der im
Register 200 gespeicherte Adresswert als ADDR200 bezeichnet.
Während des
Zyklus T1 erzeugt der ECC-Generator 202 einen ECC-Prüfbitwert
CB0 als Reaktion auf den im Register 200 gespeicherten
ersten Schreibdatenwert D0. Man beachte, dass der Speicherarray-Sequencer 102 die
Speichersteuersignale RAS#, SEN#, CAS# und PRC# während des
ersten Taktzyklus T1 als Reaktion auf das logisch hohe Schreib-Enable-Signal WEN
aufdrückt.
Dieser Schreibzugriff wird der Deutlichkeit halber in dem vorliegenden
Beispiel ignoriert. [0054] Während
des Taktzyklus T2 (d.h. wenn das WEN-Signal tief ist) erfolgt kein
Schreibzugriff. Infolgedessen bleiben der erste Schreibdatenwert
D0 und die erste Schreibadresse A0 während des Zyklus T2 im Register 200 gerastet.
-
Vor
der ansteigenden Flanke von Taktzyklus T3 wird das Schreib-Enable-Signal
WEN hoch aufgedrückt,
ein zweiter Schreibdatenwert D1 wird an den Eingangsdatenbus Di[63:0]
and ein zweiter Schreibadresswert A1 an den Adressbus A[14:0] angelegt. An
der ansteigenden Flanke von Taktzyklus T3 werden der erste Schreibdatenwert
D0, die erste Schreibadresse A0 und der erste ECC-Prüfbitwert CB0
in das Register 201 gerastet. In 4 sind der im
Register 201 gespeicherte Schreibdatenwert als DATA201, der im Register 201 gespeicherte
Adresswert als ADDR201 und der im Register 201 gespeicherte
ECC-Prüfbitwert
als CB201 bezeichnet. Ebenso werden an der
ansteigenden Flanke von Taktzyklus T3 der zweite Schreibdatenwert
D1 und der zweite Schreibadresswert A1 in das Register 200 gerastet. Während Zyklus
T3 erzeugt der ECC-Generator 202 einen ECC-Prüfbitwert
CB1 als Reaktion auf den im Register 200 gespeicherten
zweiten Schreibdatenwert D1.
-
Das
logisch hohe Schreib-Enable-Signal WEN enabled die Ausgangspuffer 210 und 211,
so dass diese Ausgangspuffer den ersten Datenwert D0 und den ersten
ECC-Prüfbitwert
CB0 vom Register 210 auf den Speicherdatenbus MD[71:0]
setzen. Die erste Schreibadresse A0 wird vom Register 201 als das
Schreibpuffer-Tag-Signal WBTag[14:0] bereitgestellt. Dieses Schreibpuffer-Tag-Signal
WBTag[14:0] wird als Reaktion auf das logisch hohe Schreib-Enable-Signal
durch den Multiplexer 104 zur Speicherarray 101 geleitet.
Der Speicherarray-Sequencer drückt
das Speicherschreibsignal MWrite und die Speichersteuersignale RAS#,
SEN#, CAS# und PRC# als Reaktion auf das logisch hohe Schreib-Enable-Signal
WEN während
des Zyklus T3 auf und ermöglicht
es so, dass der erste Schreibdatenwert D0 und der erste ECC-Prüfbitwert
CB0 auf die Speicherarray 101 an die durch die erste Schreibadresse
A0 vorgegebene Stelle geschrieben werden. Man beachte, dass der
zweite Schreibdatenwert D1 und die zweite Schreibadresse A1 bis
zum nächsten
Schreibzugriff (oder dem nächsten
Lesezugriff, der auf den Schreibpuffer 105 trifft) im Register 200 bleiben.
Man beachte auch, dass der ECC-Prüfbitwert CB1 am Ausgang des
ECC-Generators bis
zum Anfang des nächsten
Schreibzugriffs wartet. Somit hat die Erzeugung von ECC-Prüfbitwerden
keinen Einfluss auf die Schreibzugriffslatenz des Speichergerätes 100.
-
Zeitablauf von einzelnem
Lesezugriff und Write-back
-
5 ist
ein Wellenformschema, das den Zeitablauf einer Lesetransaktion,
gefolgt von einer Write-back-Operation gemäß einer Ausgestaltung der vorliegenden
Erfindung illustriert. Vor der ansteigenden Flanke von Taktzyklus
T1 wird das Lese-Enable-Signal
REN hoch aufgedrückt
und eine Leseadresse Ax[14:0] wird an den Adressbus A[14:0] angelegt,
um einen Lesezugriff einzuleiten. An der ansteigenden Flanke von
Zyklus T1 wird die Leseadresse Ax[14:0] als die gerastete Leseadresse
LAx[14:0] in das Adressregister 103 gerastet. Diese gerastete
Leseadresse LAx[14:0] wird durch den Multiplexer 104 auf
den Speicheradressbus MA[14:0] gesetzt. Der Multiplexer 104 leitet
die gerastete Lesezugriffsadresse LAx[14:0] als Reaktion auf den
H-Zustand des Lese-Enable-Signals REN und den L-Zustand des Schreib-Enable-Signals
WEN.
-
Das
logisch hohe Lese-Enable-Signal REN wird als Reaktion auf die ansteigende
Flanke des Zyklus T1 auch in den Speicherarray-Sequencer 102 gerastet.
Als Reaktion darauf aktiviert der Speicherarray-Sequencer 102 sequenziell
die Speicherarray-Steuersignale
RAS#, SEN#, CAS# und PRC# und liest dadurch das mit der gerasteten
Leseadresse LAx[14:0] assoziierte Hammingcode-Wort (d.h. MDx[71:0]).
Man beachte, dass das einzige in 5 gezeigte
Speicherarray-Steuersignal das CAS#-Signal ist. Der H-Zustand des
gerasteten Lese-Enable-Signals REN im Speicherarray-Sequencer 102 bewirkt,
dass das Speicherschreibsignal MWrite einen logisch tiefen Wert
hat, wodurch angezeigt wird, dass die vorliegende Speicheroperation
ein Lesezugriff ist. Demzufolge wird das Wort MDx[71:0], auf das
zugegriffen wird, aus der Speicherarray auf den Datenbus MD[71:0]
gelesen.
-
Das
72-Bit-Wort MDx[71:0], auf das zugegriffen wird, wird an die Fehlererkennungs-/-korrektureinheit 106 angelegt,
wobei der Datenteil des Wortes (d.h. MDx[63:0]) und der Prüfbitteil
des Wortes (d.h. MDx[71:64]) für
Syndromerzeugung, Fehlererkennung und -korrektur getrennt werden.
Wenn ein Einzelbitfehler erkannt wird, dann aktiviert der Syndromgenerator 112 das
Einzelfehlersignal (1-ERR) noch und die Fehlerkorrektureinheit 113 korrigiert
den Einzelbitfehler entweder im Datenwort oder in den Prüfbits. Das
korrigierte Datenwort CDx[63:0] wird vom Ausgangstreiber 108 als
der Ausgangsdatenwert Do[63:0] angelegt.
-
Innerhalb
des Write-back-Puffers 107 rastet der Flipflop 310 das
logisch hohe Lese-Enable-Signal REN an der ansteigenden Flanke von
Zyklus T1 und erzeugt dadurch ein logisch hohes gerastetes Lese-Enable-Signal
LREN. Wenn das Einzelfehlersignal 1-ERR vom Syndromgenerator 112 hoch
aktiviert wird, dann aktiviert das AND-Gate 321 das Schreibpuffer-Enable-Signal
WBEN in einem logisch hohen Zustand. Das AND-Gate 322 aktiviert
das Ladedatensignal LD0 als Reaktion auf das logisch hohe WBEN-Signal
und den logischen tiefen Schreibzeigerwert WP auf einen logisch
hohen Wert. Zu Beginn von Taktzyklus T2 geht das CLK-Signal in einen
logisch hohen Zustand über
und aktiviert dadurch das Register 300, so dass das logisch
hohe LD0-Signal, die korrigierten Prüfbits CCBx[7:0], das korrigierte Datenwort
CDx[63:0] und die assoziierte gerastete Adresse LAx[14:0] in das
Register 300 des Write-back-Puffers l07 geschrieben werden.
Zu diesem Zeitpunkt geht das Gültigbit
VA0, in einen logisch hohen Zustand über und
das korrigierte ECC-Codewort, das aus korrigierten Prüfbits CCBx[7:0]
und dem korrigierten Datenwort CDx[63:0] besteht, liegt am Ausgang
des Registers 300 an.
-
Zu
Beginn von Zyklus T2 sind sowohl das Lese-Enable-Signal REN als
auch das Schreib-Enable-Signal WEN im L-Zustand, was die Abwesenheit eines
externen Zugriffs anzeigt. Das Gültigsignal
VA0 geht jedoch nach der ansteigenden Flanke
von Taktzyklus T2 in den H-Zustand. Infolgedessen hat das WBBRet-Signal
einen L-Zustand an der ansteigenden Flanke von Zyklus T2. Somit
erfolgt in Zyklus T2 kein Write-back, obwohl in Zyklus T2 kein externer Zugriff
angefordert wird.
-
Zu
Beginn von Zyklus T3 schaltet der H-Zustand des WBBRet-Signals den
Ausgang des Toggle-Flipflop 313 (d.h. den Lesezeigerwert
RP) von hoch auf tief. Der L-Zustand
des Lesezeigersignals RP bewirkt, dass die Multiplexer 341-343 den
entsprechenden Inhalt von Register 300 leitet. Infolgedessen
wird der im Register 300 gespeicherte gerastete Adresswert
LAx[14:0] als die Write-back-Puffer-Tag-Adresse WBBTagx[14:0] angelegt.
Das WBBTagx[14:0] Signal wird an den Multiplexer 104 angelegt.
Der Multiplexer 104 leitet das Signal WBBTagx[14:0] als
Reaktion auf die logischen L-Zustände der REN- und WEN-Signale
als das Speicheradresssignal MA[14:0]. Die Multiplexer 341 und 342 leiten den
korrigierten Prüfbitwert
CCBx[7:0] und das korrigierte Datenwort CDx[63:0] jeweils zu den
Tristate-Puffern 351 und 352. Das Ausgang-Enable-Signal OE
wird hoch aufgedrückt,
wenn der H-Zustand des WBBRet-Signals an der ansteigenden Flanke
von Zyklus T3 in den Flipflop 311 gerastet.
-
Das
hohe OE-Signal enables die Tristate-Puffer 341 und 342,
den korrigierten Prüfbitwert CCBx[7:0]
und das korrigierte Datenwort CDx[63:0] auf den Speicherdatenbus
MD[71:0] zu setzen.
-
Der
Speicherarray-Sequencer 102 rastet das logisch hohe WBBRet-Signal
an der ansteigenden Flanke von Zyklus T3, was zu einer sequenziellen Aktivierung
der Speichersteuersignale RAS#, SEN#, CAS# und PRC# führt. Der
Speicherarray-Sequencer 102 drückt auch
das MWrite-Signal als Reaktion auf das logisch hohe WBBRet-Signal
auf. Infolgedessen wird das Wort auf dem Datenbus MD[71:0] auf die
durch die Adresse ABBTag[14:0] vorgegebene Speicherstelle geschrieben.
An der abfallenden Flanke des CLK-Signals in Zyklus T3 legt das
AND-Gate 324 ein logisch hohes Ausgangssignal an, wodurch das
Reset-Signal R0 in einen logisch hohen Zustand gesetzt wird. Das
logisch hohe Reset-Signal R0 setzt das Gültigbit VA0 auf
einen logisch tiefen Wert zurück. Die
logisch tiefen Gültigbits
VA0 und VA1 bewirken, dass
das OR-Gate 333 ein
logisches „0"-Ausgangssignal anlegen,
was wiederum bewirkt, dass das WBBRet-Signal in einen logischen „0"-Zustand übergeht. Am
Ende von CLK-Zyklus T3 werden die Steuersignale RAS#, SEN#, CAS#
und PRC# im H-Zustand weggenommen, womit der Speicherschreiboperations-
und Write-back-Zyklus vollendet wird.
-
Man
beachte, dass, wenn kein Einzelbitfehler im Lesezugriff von Zyklus
T1 auftritt, weder die Daten- noch die Prüfbits, die von der Speicherarray 101 gelesen
wurden, korrigiert und im Write-back-Puffer 107 gespeichert
werden. Die unkorrigierten Daten werden jedoch weiterhin vom Ausgangstreiber 108 auf
den Ausgangsdatenbus Do[63:0] gesetzt.
-
Aufeinander
folgende Lesezyklen und Write-back-Zyklen
-
6 ist
ein Wellenformschema, das den Zeitablauf von zwei aufeinander folgenden
Lesezugriffszyklen, gefolgt von zwei aufeinander folgenden Write-back-Zyklen gemäß einer
Ausgestaltung der vorliegenden Erfindung illustriert. Vor der ansteigenden
Flanke von Taktzyklus T1 wird das Lese-Enable-Signal REN hoch aufgedrückt und
eine Leseadresse A1[14:0] wird an den Adressbus A[14:0] angelegt, um
einen Lesezugriff einzuleiten. Die Lesezyklusoperationen und die
Steuertiming-Wellenformen
sind den in 5 gezeigten ähnlich. In diesem ersten Lesezugriff
wird ein Einzelbitfehler erkannt, der dazu führt, dass das korrigierte Hammingcode-Wort (CD1/CCB1)
und die Adresse A1[14:0] im Register 300 des Write-back-Puffers 107 gespeichert
werden. An der ansteigenden Flanke von Zyklus T2 veranlasst der
H-Zustand der Signale
1-ERR und LREN den Toggle-Flipflop 312, den Schreibzeigerwert
WP von einem logischen „0"-Wert in einen logischen „1"-Wert zu ändern, so
dass das Register 301 des Write-back-Puffers 107 zum
Empfangen des/der nächsten
korrigierten Hammingcode-Wortes und Adresse konfiguriert wird.
-
Vor
der ansteigenden Flanke von Taktzyklus T2 wird ein weiteres Lese-Enable-Signal REN hoch aufgedrückt und
eine zweite Leseadresse A2[14:0] wird an den Adressbus A[14:0] angelegt,
um einen zweiten Lesezugriff einzuleiten. Auch hier sind die Lesezyklusoperationen
und die Steuertiming-Wellenformen wieder den in 5 gezeigten ähnlich.
Bei diesem zweiten Lesezugriff wird ein Einzelbitfehler erkannt.
Als Reaktion darauf drückt
die Fehlererkennungs-/-korrekturschaltung 106 das 1-ERR
Signal auf und legt ein korrigiertes Hammingcode-Wort an, das korrigierte
Daten CD[63:0] und das korrigierte Prüfbit CCB2[7:0] beinhaltet.
Als Reaktion auf das logisch hohe 1-ERR Signal und das logisch hohe LREN-Signal
und den logisch hohen Ausgang von NAND-Gate 327, legt das AND-Gate 321 ein
logisch hohes Schreibpuffer-Enable-Signal WBEN an. Als Reaktion
auf das logisch hohe WBEN-Signal und den Schreibzeigerwert von logisch „1" drückt das AND-Gate 323 das
Ladesignal LD1 mit einem logisch hohen Wert auf, wodurch das Register 301 enabled wird.
An der ansteigenden Flanke von Zyklus T3 werden das korrigierte
Hammingcode-Wort (CD2/CCB2), die Adresse A2[14:0] und der H-Zustand
von LD1 in das Register 301 von Write-back-Puffer 107 gerastet.
Demzufolge wird das Gültigbit
VA1 auf einen logisch hohen Wert gesetzt.
-
Am
Ende von Zyklus T2 zeigen die L-Zustände der REN- und WEN-Signale
die Abwesenheit eines externen Speicherzugriffs an. Die L-Zustände der
REN- und WEN-Signale
bewirken zusammen mit dem H-Zustand des VA0-Signals,
dass das AND-Gate 326 ein logisch hohes WBBRet-Signal anlegt.
Im Write-back-Puffer 107 wird dieses hohe WBBRet-Signal
an der ansteigenden Flanke von Zyklus T3 in den Flipflop 311 gerastet,
so dass bewirkt wird, dass das Ausgang-Enable-Signal OE in den H-Zustand
geht. Der H-Zustand des WBBRet-Signals an der ansteigenden Taktflanke
bewirkt auch, dass der Toggle-Flipflop 313 den Lesezeigerwert
RP in einen logischen „0"-Zustand setzt. Demzufolge
wird die im Register 300 gespeicherte erste Adresse A1[14:0] als
das Ausgangssignal WBBTag[14:0] angelegt, während die im Register 300 gespeicherten
korrigierten Daten- und Prüfbits
CD1[63:0] und CCB1[7:0] als Ausgangssignal MD[71:0] angelegt werden.
Der Write-back-Puffer-Tag WBBTag[14:0] wird als Reaktion auf die
logisch tiefen REN- und WEN-Signale durch den Multiplexer 104 an
die Speicherarray 101 angelegt. Im Speicherarray-Sequencer 102 wird
der H-Zustand des WBBRet-Signals am Anfang von Zyklus T3 gerastet.
Demzufolge wird das MWrite-Signal
in den H-Zustand gesetzt und die Speicherarray-Steuersignale RAS#,
SEN#, CAS# und PRC# werden der Reihe nach aktiviert, so dass die
Speicherarray 101 einen Speicherschreibzyklus durchläuft, wobei
das korrigierte Codewort MD[71:0] auf die durch WBBTag[14:0] vorgegebene
Stelle geschrieben wird. Das Reset-Signal R0 geht als Reaktion auf
die abfallende Flanke von Zyklus T3 in den H-Zustand und setzt dadurch
das Gültigbit
VA0 im Register 300 zurück. Durch
das Zurücksetzen
des Gültigbits
VA0 wird der Inhalt von Register 300 invalidiert.
Am Ende von Zyklus T3 werden alle Speicherarray-Steuersignale hoch
deaktiviert und die Speicherarray 101 ist für einen
weiteren Zugriff bereit.
-
Am
Ende von Zyklus T3 zeigen die L-Zustände der REN- und WEN-Signale
wieder die Abwesenheit eines externen Speicherzugriffs an. Die L-Zustände der
REN- und WEN-Signale
bewirken zusammen mit dem H-Zustand von Gültigbit VA1,
dass das WBBRet-Signal in einem logischen H-Zustand bleibt. Am Anfang
von Zyklus T4 bewirkt der H-Zustand des WBBRet-Signals, dass der
Lesezeigerwert RP vom Toggle-Flipflop 313 in
einen logischen H-Zustand übergeht.
Infolgedessen werden die Multiplexer 341-343 so
gesteuert, dass sie das korrigierte Prüfbit CCB2[7:0] und den korrigierten
Datenwert CD2[63:0] als den MD[71:0] Wert und den Adresswert A2[14:0] als
den Write-back-Puffer-Tag-Wert WBBTag[14:0] leiten. Man beachte,
dass das Ausgang-Enable-Signal OE als Reaktion auf das logisch hohe
WBBRet-Signal in einem logischen H-Zustand bleibt. Im Speicherarray-Sequencer 102 wird
der H-Zustand des WBBRet-Signals an der ansteigenden Flanke von
Zyklus T4 gerastet. Der H-Zustand des WBBRet-Signals bewirkt, dass
das MWrite-Signal hoch bleibt, wodurch ein weiterer Schreibzyklus
in der Speicherarray 101 gestartet wird. Der Schreibzyklus erfolgt
mit der aufeinanderfolgenden Aktivierung der Signale RAS#, SEN#,
CAS# und PRC#. Dies hat zur Folge, dass das modifizierte Hammingcode-Wort MD[71:0]
von Register zurück
auf die Speicherarray 101 an die Stelle (A2) geschrieben
wird, die durch die vom Register 301 gelesene Adresse WBBTag[14:0] vorgegeben
wird. Das Reset-Signal R1 geht als Reaktion auf die abfallende Flanke
von Zyklus T4 in den H-Zustand und setzt so das Gültigbit
VA1 im Register 30l zurück. Durch
das Zurücksetzen
des Gültigbits VA1 wird der Inhalt von Register 301 invalidiert.
Am Ende von Zyklus T4 werden alle Speicherarray-Steuersignale hoch
deaktiviert und die Speicherarray 101 ist für einen
weiteren Zugriff bereit. Wenn das Gültigbit VA1 in
einen logisch tiefen Zustand übergeht,
dann haben beide Gültigbits
VA0 und VA1 logisch
tiefe Werte. Infolgedessen legt das OR-Gate 332 ein logisch tiefes
Ausgangssignal an, so dass das WBBRet-Signal in einen logisch tiefen
Zustand übergeht.
Die logisch tiefen Gültigbits
VA0 und VA1 zeigen an, dass beide Einträge von Write-back-Puffer 107 auf
der Speicherarray 101 abgelegt wurden.
-
Man
beachte, dass, wenn in Zyklus T3 ein weiterer Lesezugriff mit einem
Einzelbitfehler auf dem Codewort erfolgt, auf das zugegriffen wurde, dann
wird das korrigiere Codewort nicht in den Write-back-Puffer geschrieben,
weil beide Gültigbits
VA0 und VA1 hoch
sind. Die hohen Gültigbits
VA0 und VA1 bewirken,
dass der Ausgang von NAND-Gate 327 in den L-Zustand gehen
und dass der Ausgang des AND-Gates
(d.h. das Write-back-Enable-Signal WBEN) in den L-Zustand geht.
Der L-Zustand des WBEN-Signals verhindert, dass die Ladesignale
LD0 und LD1 aufgedrückt
werden, und verhindert dadurch das Schreiben neuer Einträge auf die
Register 300 und 301. Stattdessen werden die Einsprungadressen
in den Registern 300 und 301 für nachfolgende Write-back-Operationen
konserviert. Der korrigierte Code, der von diesem dritten Lesezugriff
resultierte, wird nicht zurück
auf die Speicherarray 101 geschrieben. Dies führt jedoch
nicht zu einem Speicherausfall, solange das Speicherwort kein anderes Fehlerbit
akkumuliert, weil dieses Codewort bei einem nachfolgenden Lesezugriff
weiterhin gelesen und korrigiert werden kann.
-
Die
Erfindung wurde zwar in Verbindung mit mehreren Ausgestaltungen
beschrieben, aber es ist zu verstehen, dass die vorliegende Erfindung
nicht auf die offenbarten Ausgestaltungen begrenzt ist, sondern
dass verschiedene für
die Fachperson offensichtliche Modifikationen möglich sind. So lag der Schwerpunkt
in den beschriebenen Ausgestaltungen zum Beispiel auf einer Speicherarray
mit DRAM-Zellen, aber es ist zu verstehen, dass in anderen Ausgestaltungen
auch eine Speicherarray mit SRAM-Zellen oder nichtflüchtigen
Speicherzellen mit einer Modifikation am Speicherarray-Sequencer
implementiert werden kann. Eine solche Modifikation könnte von
einer durchschnittlichen Fachperson im Bereich Speicherdesign leicht
durchgeführt
werden. So ist die Erfindung nur durch die nachfolgenden Ansprüche begrenzt.