-
GEBIET DER ERFINDUNG
-
Die
Erfindung betrifft Speicher. Spezieller gesagt, betrifft die Erfindung
die Zeitsteuerung von Daten und den entsprechenden Datenstrobe aus
dem Speicher.
-
STAND DER TECHNIK
-
Prozessoren
in Computersystemen steigen ständig
in der Ausführungsgeschwindigkeit.
Diese Geschwindigkeitserhöhung
hat eine Reihe von Folgen, von denen eine die ähnliche erforderliche Erhöhung der Geschwindigkeit
des Systemspeichers ist, den der Prozessor nutzt. Um Schritt mit
den Prozessoranforderungen zu halten, haben Speichertechnologien
verschiedene Arten von Geschwindigkeitserhöhungen implementiert. Eine
dieser Technologien ist der Doppeldatenraten-(DDR)-Speicher, der sowohl die ansteigende
wie auch die abfallende Kante des Speichertakts zur Ausführung von
Speicheroperationen nutzt.
-
Eine
zunehmend häufig
verwendete Implementierung der letzten DDR-Speicher (e. g. DDR2
oder DDR3) besteht darin, einen quellsynchronen Datenstrobe mit
den Daten zu verwenden. Das Datenstrobesignal ist das Signal, das
die Speichertaktinformationen transportiert (d. h. die ansteigende
und abfallende Kante des Datenstrobes entsprechen der ansteigenden
und abfallenden Kante des Speichertaktes). Daher stammt der Datenstrobe,
der die gültige
Zwischenspeicherung der Daten der Prozessor-Speicher-Zwischenverbindung
steuert, aus dem Speicher selbst zusammen mit den entsprechenden
Daten. Wenn die Frequenzen von DDR2- und DDR3-Speichern sich erhöhen, verringert sich die Länge der
Zeit, während
der ein Datenelement gültig
ist, in der Zwischenverbindung. Diese begrenzte Zeit für gültige Daten
erfordert einen viel genaueren Entwurf der Zwischenverbindungen.
Es gibt nur eine sehr kleine Toleranz für eine Nichtübereinstimmung
der Daten- und Datenstrobezeitsteuerung.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
Die
vorliegende Erfindung wird durch Beispiele erläutert und wird nicht durch
die Figuren der begleitenden Zeichnungen eingeschränkt, wobei
gleiche Bezugszahlen sich auf ähnliche
Elemente beziehen; dabei gilt:
-
1 ist
ein Blockdiagramm eines Computersystems, das mit Ausführungsformen
der vorliegenden Erfindung verwendet werden kann.
-
2 illustriert
einen Überblick über eine
Ausführungsform
der Komponenten innerhalb der Datenstrobe-Toleranzlogikeinheit.
-
3 illustriert
eine Ausführungsform
der ausführlichen
Schaltungen innerhalb des Datenfenstervergößerungs- und Datenstrobeteilers.
-
4 illustriert
eine Ausführungsform
der nominalen Zeitsteuerung der 1:2-Teiler-Strobes 0–3 in Bezug zur originalen
Datenstrobeeingabe in den Datenfenstervergrößerungs- und Datenstrobeteiler.
-
5 illustriert
eine Ausführungsform
der ausführlichen
Schaltungen innerhalb des Datenstrobe-Randkompensationstreibers
und des Datenstrobe-Randkompensationsempfängers.
-
6 illustriert
ein Zeitsteuerungsdiagramm einer Ausführungsform der kompensierten
1:2-Teiler-Strobes, der Daten und der Latchfreigaben in einem nominalen
Strobezeitsteuerungsmodus.
-
7 illustriert
ein Zeitsteuerungsdiagramm einer Ausführungsform der kompensierten
1:2-Teiler-Strobes, der Daten und der Latchfreigaben in einem verzögerten Strobezeitsteuerungsmodus.
-
8 illustriert
ein Zeitsteuerungsdiagramm einer Ausführungsform der kompensierten
1:2-Teiler-Strobes, der Daten und der Latchfreigaben in einem frühen Strobezeitsteuerungsmodus.
-
9 ist
ein Flußdiagramm
einer Ausführungsform
eines Prozesses zum Kompensieren der Zeitfehlsteuerung zwischen
Daten und einem quellsynchronen Datenstrobe.
-
AUSFÜHRLICHE BESCHREIBUNG DER ERFINDUNG
-
Ausführungsformen
eines Verfahrens, Vorrichtung und Systems zum Kompensieren einer
Zeitfehlsteuerung zwischen Daten und einem quellsynchronen Datenstrobe
werden beschrieben. In der folgenden Beschreibung werden zahlreiche
spezielle Details angeführt.
Es versteht sich jedoch, daß Ausführungsformen ohne
diese speziellen Details ausgeführt
werden können.
In anderen Fällen
sind bekannte Elemente, Spezifikationen und Protokolle nicht im
Detail beschrieben worden, um das Verständnis für die vorliegende Erfindung nicht
zu erschweren.
-
1 ist
ein Blockdiagramm eines Computersystems, das mit Ausführungsformen
der vorliegenden Erfindung verwendet werden kann. Das Computersystem
umfaßt
eine Prozessor-Speicher-Zwischenverbindung 100 für die Kommunikation
zwischen verschiedenen Agenten, die an die Zwischenverbindung 100 angeschlossen
sind, wie zum Beispiel Prozessoren, Brücken, Speichervorrichtungen
usw. Die Prozessor-Speicher-Zwischenverbindung 100 umfaßt spezielle
Zwischenverbindungsleitungen, die Zuweisungsentscheidungs-, Adreß-, Daten-
und Steuerinformationen (nicht dargestellt) senden. In einer Ausführungsform
ist der Zentralprozessor 102 mit der Prozessor-Speicher-Zwischenverbindung 100 verbunden.
In einer weiteren Ausführungsform
gibt es mehrere Zentralprozessoren, die mit der Prozessor-Speicher-Zwischenverbindung
verbunden sind (mehrere Prozessoren werden in dieser Figur nicht
gezeigt).
-
Die
Prozessor-Speicher-Zwischenverbindung 100 stellt den Zugang
des Zentralprozessors 102 und anderer Vorrichtungen zum
Systemspeicher 104 bereit. Ein Systemspeichercontroller 106 steuert
den Zugang zum Systemspeicher 104. In einer Ausführungsform
befindet sich der Systemspeichercontroller innerhalb der Northbridge
(Speichercontrollerhub) 108 eines Chipsatzes 110,
der mit der Prozessor-Speicher-Zwischenverbindung 100 verbunden
ist. In einer weiteren Ausführungsform
befindet sich ein Systemspeichercontroller auf demselben Chip wie
der Zentralprozessor 102 (nicht dargestellt). Informationen,
Anweisungen und andere Daten können
im Systemspeicher 104 zur Verwendung durch den Zentralprozessor 102 sowie
viele andere potentielle Vorrichtungen gespeichert werden. E/A-Vorrichtungen,
wie zum Beispiel die E/A-Vorrichtungen 114 und 118,
sind mit der Southbridge 112 des Chipsatzes 106 durch
eine oder mehrere Zwischenverbindungen 116 und 120 verbunden.
-
In
einer Ausführungsform
ist der Systemspeicher 104 quellsynchron. In dieser Ausführungsform
gibt der Systemspeicher zusätzlich
zu den Daten einen Datenstrobe an den Speichercontroller 106 über die
Prozessor-Speicher-Zwischenverbindung 100 aus. Der quellsynchrone
Datenstrobe und die Daten erfordern eine enge Übereinstimmung der Zeitsteuerung,
um gültige
Daten beizubehalten. In verschiedenen Ausführungsformen kann der Systemspeicher 104 Doppeldatenraten-2-(DDR2)-Speicher
oder DDR3-Speicher umfassen. Bei DDR2- und DDR3-Speicher erfordert
die Übereinstimmung
in der Zeitsteuerung zwischen einem quellsynchronen Datenstrobe
und den entsprechenden Daten eine sogar noch höhere Übereinstimmungsgenauigkeit. DDR2-,
DDR3- und andere Hochgeschwindigkeits-DDR-Speicher senden Daten über die
Prozessor-Speicher-Zwischenverbindung nach jedem Halbtakt (d. h.
bei jeder Anstiegs- und Abfallkante des Datenstrobes). Daher beträgt aktuell
die Breite des Fensters, das zur Anpassung der Daten in der Zwischenverbindung
an die entsprechende ansteigende oder abfallende Kante des Datenstrobes
zulässig
ist, 0,5 Taktzyklen.
-
In
einer Ausführungsform
hat das Computersystem in 1 eine Datenstrobe-Toleranzlogikeinheit 122,
die sich im Speichercontroller 106 befindet. Die Datenstrobe-Toleranzlogikeinheit 122 hat
Schaltungen, mit denen ein fortlaufender Hochgeschwindigkeitsdatendurchsatz über die
Prozessor-Speicher-Zwischenverbindung 100 ermöglicht wird,
während
das Daten- und Datenstrobeanpassungsfenster auf 2 Taktzyklen vergrößert wird.
-
2 illustriert
einen Überblick über eine
Ausführungsform
der Komponenten innerhalb der Datenstrobe-Toleranzlogikeinheit 200.
In dieser Ausführungsform
werden der Datenstrobe und die Daten in die Datenstrobe-Toleranzlogikeinheit 200 eingegeben.
In einer Ausführungsform
laufen die Daten über
einen 64-Bit-Datenbus ein, der aus 8 Byte-Verbindungsleitungen ("Lanes") besteht. Außerdem ist
in einer Ausführungsform
der Datenstrobe ein 8-Bit-Wert, wo jedes Strobebit einer der acht
Byte-Lanes in der Daten-Zwischenverbindung entspricht.
-
Der
Datenstrobe und die Daten werden in einen Datenfenstervergößerungs-
und Datenstrobeteiler 202 eingegeben. Der Datenfenstervergößerungs-
und Datenstrobeteiler 202 befindet sich in der Datenstrobe-Toleranz-
und -Logikeinheit 200. In einer Ausführungsform nimmt der Datenfenstervergrößerungs-
und Datenstrobeteiler 202 den 8-Bit-Datenstrobe und teilt
ihn in vier getrennte gestaffelte Versionen auf. In dieser Ausführungsform
wird jeder der gestaffelten Datenstrobes derart gestreckt, daß jeder
volle Taktzyklus eines gestreckten Datenstrobes ein 1:2-Teilerzyklus des
ursprünglichen
Datenstrobes ist. Ferner werden die vier Strobes vierfach gestaffelt,
so daß die
Anstiegskante des ersten Strobes eine Hälfte des eingegeben originalen
Datenstrobetaktzyklus vor der ansteigenden Kante des zweiten Strobes
ist, die Anstiegskante des zweiten Strobes eine Hälfte des
ursprünglichen
Datenstrobetaktzyklus vor der ansteigenden Kante des dritten Strobes
ist usw. Die 1:2-Teiler-Datenstrobes haben also Taktzyklen, die
doppelt so lang wie der ursprüngliche
Datenstrobetaktzyklus sind, und sind vierfach gestaffelt, wobei
jeder eine Hälfte
eines originalen Datenstrobetaktzyklus, getrennt von benachbarten
Strobe, ist. Dies ermöglicht,
daß die
Toleranz einer Nichtübereinstimmung
von Daten und Datenstrobe auf das Vierfache des ursprünglichen
Toleranzniveaus erhöht
wird (d. h. von 0,5 Speichertaktzyklustoleranz auf 2 Speichertaktzyklustoleranz).
-
3 illustriert
eine Ausführungsform
der ausführlichen
Schaltungen innerhalb des Datenfenstervergrößerungs- und Datenstrobeteilers.
Der Datenfenstervergrößerungs-
und Datenstrobeteiler hat acht Byte-Lane-Anpassungsfenstervergrößerungsblöcke. Jeder
Vergrößerungsblock
(z. B. ist Block 300 für
die Byte-Lane 0) hat einen 1:2-Teiler-Strobeerzeugungsblock 302.
Der 1:2-Teiler-Strobeerzeugungsblock 302 streckt den Datenstrobe
für seine
entsprechende Byte-Lane
durch Verwendung des eingegeben Datenstrobes zum Takten von zwei
getrennten Komplementflops, einem Positivkanten- und einem Negativkanten-Komplementflop.
In einer Ausführungsform
ist der eingegebene Datenstrobe von Strobe-Dreifachzuständen befreit
worden. Der 1:2-Teiler-Strobeerzeugungsblock 302 gibt die
vier 1:2-Teiler-Datenstrobes aus. Die 1:2-Teiler-Datenstrobes werden zusätzlich in
einen Datenstreckblock 304 eingegeben. Der Datenstreckblock 304 nimmt
die eingegeben Daten, verwendet 1:2-Teiler-Strobes 0–3 als Maske
zum Strecken der 0,5 speichertaktbreiten Daten zu 2 speichertaktweiten
vierfach gestaffelten Daten. Das Strecken wird über das Abtasten der einlaufenden
0,5 speichertaktbreiten Daten an jeder ansteigenden oder fallenden
Kante des Datenstrobes erreicht, wobei der 1:2-Teiler-Datenstrobe
als Datenmaske verwendet wird. 4 illustriert
eine Ausführungsform
der nominalen Zeitsteuerung der 1:2-Teiler-Strobes 0–3 in Bezug
zur originalen Datenstrobeeingabe in den Datenfenstervergrößerungs-
und Datenstrobeteiler. Daher werden die gestreckten Daten auf vier
getrennte interne Daten-Zwischenverbindungen 0–3 aufgespaltet.
-
Kehrt
man zu 2 zurück,
so spaltet in dieser Ausführungsform
der Datenfenstervergrößerungs-
und Datenstrobeteiler 202 die Daten auf vier getrennte
64-Bit-breite Ausgabe-Zwischenverbindungen
innerhalb der Datenstrobe-Toleranzlogikeinheit 200 auf:
Interne Daten-Zwischenverbindung
0, Interne Daten-Zwischenverbindung 1, Interne Daten-Zwischenverbindung
2 und Interne Daten-Zwischenverbindung 3. Wenn ein Speicherauslesen
auftritt, führt
dies dazu, daß eine
Cache-Leitung vom Systemspeicher erhalten wird. In einer Ausführungsform
ist die Cache-Leitung 64 Byte breit. Eine Speicherauslesung würde also
zu acht aufeinanderfolgenden Viererworten führen, die von der Prozessor-Speicher-Zwischenverbindung
erhalten werden. Die vier Daten-Zwischenverbindungen können als "intern" betrachtet werden,
da sie in einer Ausführungsform
intern für
die Datenstrobe-Toleranzlogikeinheit 200 sind.
Wenn in anderen Ausführungsformen
der Daten-FIFO extern zur Datenstrobe-Toleranzlogikeinheit implementiert
wird, dann können
die vier Zwischenverbindungen nicht intern sein oder sie können nur
teilweise intern für
die Datenstrobe-Toleranzlogikeinheit
sein.
-
In
der Ausführungsform,
die in 2 illustriert wird, sendet der Datenfenstervergrößerungs- und Datenstrobeteiler 202 jedes
vierte Viererwort, das aus einer Cache-Leitungsauslesung empfangen
wurde, auf jede der vier Internen Daten-Zwischenverbindungen. Zum
Beispiel wird das Viererwort (QW) 0 auf die Interne Daten-Zwischenverbindung
0 gesendet, QW1 wird auf die Interne Daten-Zwischenverbindung 1
gesendet, QW2 wird auf die Interne Daten-Zwischenverbindung 2 gesendet, und QW3
wird auf die Interne Daten-Zwischenverbindung 3 gesendet. Dann wird
QW4 auf die Interne Daten-Zwischenverbindung 0 gesendet, QW5 wird
auf die Interne Daten-Zwischenverbindung 1 gesendet, QW6 wird auf
die Interne Daten-Zwischenverbindung
2 gesendet, und QW7 wird auf die Interne Daten-Zwischenverbindung
3 gesendet. Daher wird jedes QW auf seiner entsprechenden Internen
Daten-Zwischenverbindung für
drei weitere empfangene QWs gültig
gehalten. Dies ermöglicht
jedem QW, auf dem Bus mindestens vier Mal so lange für gültig gehalten
zu werden, wie die nicht aufgespaltete oder gestaffelte originale
Datenstrobe-Zeitsteuerung. Da jede Auslesung eine Cache-Leitung
repräsentiert,
gibt es 8 QWs, die für
jede Auslesung eingegeben werden, wenn die Cache-Leitung 64 Byte
breit ist. In dieser Ausführungsform
haben also die Internen Daten-Zwischenverbindungen 0–3 jeweils zwei
aufeinanderfolgende QWs für
jede Speicherauslesung. In einer Ausführungsform ist die erste der
zwei QWs auf jeder Internen Daten-Zwischenverbindung (z. B. QW0
auf der Internen Daten-Zwischenverbindung 0) über zwei vollständige Datenstrobezyklen
gültig.
Andererseits kann die zweite der zwei QWs auf jeder Internen Daten-Zwischenverbindung
(e. g. QW4 auf der Internen Daten-Zwischenverbindung 0) auf der
relevanten Internen Daten-Zwischenverbindung
gültig
sein, bis eine anschließende
Speicherauslesung in Gang gesetzt wird. An diesem Punkt wird das
zweite QW von Daten, die die erste Speicherauslesung betreffen,
auf der gegebenen Internen Daten-Zwischenverbindung vom ersten QW
von Daten, die die zweite Speicherauslesung betreffen, auf dieser
Internen Daten-Zwischenverbindung ersetzt.
-
Die
vier 1:2-Teiler-Strobeausgaben aus dem Datenfenstervergrößerungs-
und Datenstrobeteiler
202 werden dann in den Datenstrobe-Randkompensationstreiber
204 eingegeben.
In einer Ausführungsform
empfängt
der Datenstrobe-Randkompensationstreiber
204 die vier 1:2-Teiler-Strobeausgaben aus
dem Datenfenstervergrößerungs-
und Datenstrobeteiler
202 als Eingaben. Ferner empfängt in dieser
Ausführungsform
der Datenstrobe-Randkompensationstreiber
204 auch einen
2-Bit-Randkompensationsauswahlwert und einen 1-Bit-Randkompensationstestmodusfreigabewert
als zusätzliche
Eingaben. Wenn das Randkompensationstestmodusfreigabebit gesetzt
ist, wird ein Takt anstelle der Strobes eingesetzt, um zu ermöglichen,
daß die
Zwischenspeicher (Latches) und Flops im Testmodus genau und zuverlässig gescannt
werden. Der Testmodustakt kann in einer beliebigen Zahl von Arten
in verschiedenen Ausführungsformen
(nicht dargestellt) implementiert werden. Außerdem bestimmt der Randkompensationsauswahlwert,
ob die 1:2-Teiler-Strobes bei der nominalen Zeitsteuerung (d. h.
der einlaufende Datenstrobe und die einlaufenden Daten sind bereits
angepaßt), verzögerten Zeitsteuerung
(d. h. die einlaufenden Daten werden gegenüber ihrem entsprechenden Datenstrobe
verzögert,
wenn sie den Daten-FIFO erreichen) oder frühen Zeitsteuerung (d. h. die
einlaufenden Daten sind früh
gegenüber
ihrem entsprechenden Datenstrobe, wenn sie den Daten-FIFO erreichen)
arbeiten. Tabelle 1 illustriert die verfügbaren Randkompensationsauswahlwerte
und die entsprechende Datenstrobezeitsteuerung. Tabelle
1: Randkompensationsauswahlzeitsteuerwerte
Randkompensationsauswahlwert | Modifizierte
Datenstrobe-Zeitsteuerung |
00b | Nominal |
01b | Verzögert |
10b | Früh |
11b | Testmodus |
-
Wenn
also der Datenstrobe und die Daten aus dem Speicher an der Datenstrobe-Toleranzlogikeinheit ankommen
und angepaßt
sind, dann ist der Randkompensationsauswahlwert 00b. Wenn die einlaufenden
Daten gegenüber
ihrem entsprechenden Datenstrobe verzögert sind, wenn sie am Daten-FIFO
ankommen, dann ist der Randkompensationsauswahlwert 01b, der die
verzögerten
1:2-Teiler-Strobeeinstellungen zum Kompensieren der verzögerten Daten
nutzt. Und schließlich,
wenn die einlaufenden Daten früh
sind und vor ihrem entsprechenden Datenstrobe ankommen, dann ist
der Randkompensationsauswahlwert 10b, der die frühen 1:2-Teiler-Strobeeinstellungen zum Kompensieren
der frühen
Daten nutzt.
-
Die
vierfach gestaffelten 1:2-Teiler-Strobes, die in den Datenstrobe-Randkompensationstreiber 204 eintreten,
werden dann multiplexiert und aus dem Datenstrobe-Randkompensationstreiber 204 als
kompensierte 1:2-Teiler-Strobes 0–3 ausgesendet. Der Datenstrobe-Randkompensationsempfänger 206 empfängt die kompensierten
1:2-Teiler-Strobes 0–3
sowie den Randkompensationsauswahlwert. Die spezielle Version der kompensierten
1:2-Teiler-Strobes
0–3 wird
durch Verwendung der Eingabe des kompensierten 1:2-Teiler-Strobewertes
in den Datenstrobe-Randkompensationsempfänger 206 ausgewählt, entweder
als nominale, frühe oder
verzögerte
Version der vierfach gestaffelten 1:2-Teiler-Strobes.
-
Die
Internen Daten-Zwischenverbindung verbinden den Datenfenstervergrößerungs-
und Datenstrobeteiler 202 mit einem Daten-FIFO-(First-in-first-out)-Puffer 208.
Der Puffer 208 wird zur zeitweiligen Speicherung der Auslesedaten
verwendet, die vom Datenfenstervergrößerungs- und Datenstrobeteiler 202 auf
die Internen Daten-Zwischenverbindungen 0–3 gesendet wurden. Der Datenstrobe-Randkompensationsempfänger 206 nutzt
die ausgewählte
Version der kompensierten 1:2-Teiler-Strobes (nominal, früh oder verzögert) zum Erzeugen
von Latchfreigaben, die die Daten aus den Internen Daten-Zwischenverbindungen
0–3 zwischenspeichern.
Der Puffer 208 nutzt die erzeugten Latchfreigaben zum Zwischenspeichern
der Daten aus den Internen Daten-Zwischenverbindungen
0–3 an
einem speziellen Ort im Puffer. In einer Ausführungsform sind die FIFO-Puffer
für jede
der vier QWs acht Speicherorte tief. Die Daten aus der Prozessor-Speicher-Zwischenverbindung
können
also wegen eines größeren Anpassungsfensters
und eines kompensierten Datenstrobes, der gegenüber seinen entsprechenden Daten
früh oder
spät sein
kann, zuverlässiger
abgetastet werden. In unterschiedlichen Ausführungsformen können die
Daten im Puffer 208 von dem Speicherauslesungsanforderungsagenten
zur Verwendung genutzt werden, sobald die Daten zuverlässig zwischengespeichert
wurden.
-
5 illustriert
eine Ausführungsform
der ausführlichen
Schaltungen innerhalb des Datenstrobe-Randkompensationstreibers
und des Datenstrobe-Randkompensationsempfängers. In einer Ausführungsform
empfängt
der Datenstrobe-Randkompensationstreiber 500 die vier 1:2-Teiler-Strobeausgaben aus
dem Datenfenstervergrößerungs-
und Datenstrobeteiler als Eingaben. Ferner empfängt in dieser Ausführungsform der
Datenstrobe-Randkompensationstreiber 500 auch einen 2-Bit-Randkompensationsauswahlwert
und einen 1-Bit-Randkompensationstestmodusfreigabewert
als zusätzliche
Eingaben.
-
Wie
oben in Bezug auf 2 angeführt, bestimmt in einer Ausführungsform
der 1-Bit-Randkompensationstestmodusfreigabewert,
ob die Randkompensationslogik aktiviert ist und ihr erlaubt wird,
Daten mit den 1:2-Teiler-Strobes 0–3 zwischenzuspeichern. Der
Randkompensationsauswahlwert bestimmt, ob jeder der 1:2-Teiler-Strobes
bei der nominalen Zeitsteuerung (d. h. der einlaufende Datenstrobe
und die einlaufenden Daten sind bereits angepaßt), verzögerten Zeitsteuerung (d. h.
der einlaufende Datenstrobe ist früh gegenüber seinen entsprechenden einlaufenden
Daten, daher führt
eine Verzögerung
des Strobes zur Anpassung der Daten und des Strobes) oder frühen Zeitsteuerung
(d. h. der einlaufende Datenstrobe ist gegenüber seinen entsprechenden Daten
verzögert,
also führt
eine Modifizierung des Strobes, so daß er früher kommt, zu einer Anpassung
der Daten und des Strobes) arbeitet. Tabelle 1 illustriert die verfügbaren Randkompensationsauswahlwerte
und die entsprechende Datenstrobezeitsteuerung.
-
Der
Datenstrobe-Randkompensationstreiber 500 erzeugt und sendet
kompensierte modifizierte Datenstrobes 0–3 aus, die jedem QW der Daten
entsprechen, welche sich auf den vier Internen Daten-Zwischenverbindungen
befinden. Jeder kompensierte modifizierte Datenstrobe ist eine multiplexierte
Version des modifizierten 1:2-Teiler-Strobes, der vom Datenfenstervergrößerungs-
und Datenstrobeteiler erzeugt wurde. Der Randkompensationsauswahlwert
wird bei jedem der vier Multiplexer innerhalb des Datenstrobe-Randkompensationstreibers 500 verwendet,
um entweder einen nominalen, frühen
oder verzögerten
1:2-Teiler-Strobe für die
entsprechenden QW-Daten in dieser Byte-Lane auszuwählen.
-
Die
vier kompensierten 1:2-Teiler-Strobes, die erzeugt wurden, werden
an den Datenstrobe-Randkompensationsempfänger 502 gesendet.
Der Datenstrobe-Randkompensationsempfänger 502 hat einen
Empfangsblock zum Empfangen der kompensierten 1:2-Teiler-Strobes,
die jedem der vier Daten-QWs entsprechen, welche sich auf den vier
Internen Daten-Zwischenverbindungen
befinden. Der Empfangsblock für
den QW0-Strobe wird im Detail in 5 dargestellt
(Punkt 504). Der Datenstrobe-Randkompensationsempfänger 502 nutzt
die kompensierten 1:2-Teiler-Strobes als Eingaben, um Latchfreigaben
zum Zwischenspeichern der entsprechenden QW-Daten in jedem QW-FIFO-Puffer
zu erzeugen. In einer Ausführungsform
sind die Latchfreigaben 8-Bit-Werte, die den acht Orten in jedem
QW-FIFO-Puffer entsprechen. Um zum Beispiel Daten an Ort 1 eines
QW-FIFO-Puffers zwischenzuspeichern, wäre der Latchfreigabewert 00000001b.
Um zum Beispiel Daten an Ort 8 eines QW-FIFO-Puffers zwischenzuspeichern,
wäre der
Latchfreigabewert 10000000b. Jedes Bit des Wertes entspricht also
einem der acht QW-FIFO-Pufferspeicherorte, und das einzelne Bit,
das eine "1" ist, bezieht sich
darauf, an welchem Speicherort die Daten zwischenzuspeichern sind.
Jeder Empfangsblock hat einen Flop, der den kompensierten 1:2-Teiler-Strobe
als Takteingabe empfängt.
Die Ausgabe des Flops ist der Latchfreigabewert. Das Flop ändert also
den Latchfreigabewert einmal pro kompensiertem 1:2-Teiler-Strobezyklus.
-
Außerdem hat
jeder Block des Datenstrobe-Randkompensationsempfängers 502 (d.
h. die Blöcke
0–3 für die QWs
0–3) einen
Decoder, einen Inkrementierer und einen Codierer. Die Flopausgabe
wird nicht nur an den QW-FIFO-Puffer 506 als Latchfreigabewert
gesendet, sondern wird auch an den Decoder zum Decodieren des Wertes
in einen Standardbinärwert
gesendet. Der decodierte Wert wird dann auf den nächsten darauffolgenden
Latchfreigabewert erhöht
(z. B. würde
sich 00000010b auf 00000100b erhöhen),
und der neue Wert wird dann zurück
in das 8-Bit-Latchfreigabewertformat
zur Verwendung durch das Flop als nächste Ausgabe codiert, was
beim nächsten
kompensierten 1:2-Teiler-Strobezyklus passiert.
-
Jeder
Empfangsblock im Datenstrobe-Randkompensationsempfänger 502 empfängt auch
als Eingabe einen Latchfreigaberesetwert für jeden QW-Empfangsblock. Der
Resetwert entspricht dem anfänglichen Latchfreigabewert,
der für
jeden QW-Block genutzt wird. Auf Grund der Zeitsteuerungsanforderungen,
die mit den gestreckten Daten in Kraft treten, tritt unter bestimmten
Umständen
die erste ansteigende Kante des kompensierten 1:2-Teiler-Strobes
vor dem Zeitpunkt auf, an dem gültige
Daten am Ort auf dem entsprechenden IDI sind. Wenn normalerweise
die Daten gültig
sind, werden die Daten am Speicherort 1 des achtorttiefen FIFOs
zwischengespeichert (00000001b). In diesem Fall kann aber der Resetwert
bewirken, daß der
erste ungültige
QW von Daten am Speicherort 8 (10000000b) zwischengespeichert wird.
Sobald Daten gültig
werden, ist die Eingabe in das Flop durch eine Decodierer-Inkrementierer-Codierer-Folge gelaufen, wie
oben beschrieben, und das erste gültige QW von Daten für diesen
speziellen IDI speichert in den QW-FIFO-Pufferspeicherort 1 ein
(d. h. das Erhöhen
von Speicherort 8 führt
den Latchfreigabewert zu Ort 1 zurück).
-
Auf
Grund der Zeitsteuerungsbeschränkungen
sind in der aktuellen Ausführungsform
die Resetwerte der kompensierten 1:2-Teiler-Strobes immer für die Strobes
bekannt, die den Daten entsprechen, welche sich in der Internen
Daten-Zwischenverbindung 0 und der Internen Daten-Zwischenverbindung
3 befinden. Ungeachtet, ob nominale, frühe oder späte Zeitsteuerung verwendet
wird, sind speziell die Daten auf der Internen Daten-Zwischenverbindung
0 immer während
des anfänglichen
Strobezyklus gültig.
Die Internen Daten-Zwischenverbindung 0 nutzt daher immer den Latchfreigaberesetwert
für den
Speicherort 1 während
des anfänglichen
Strobezyklus. Im Gegensatz zur Internen Daten-Zwischenverbindung
0 sind die Daten auf der Internen Daten-Zwischenverbindung 3 immer
während
des anfänglichen
Strobezyklus ungültig.
Die Interne Daten-Zwischenverbindung 3 nutzt daher immer den Latchfreigaberesetwert
für den
Speicherort 8 während
des anfänglichen
Strobezyklus.
-
Die
Gültigkeit
der Daten während
des anfänglichen
Strobezyklus auf der Internen Daten-Zwischenverbindung 1 und der Internen
Daten-Zwischenverbindung 2 hängt
davon ab, ob die nominalen, frühen
oder verzögerten
kompensierten Strobeeinstellungen verwendet werden. Ein Multiplexer
wird daher verwendet, um den richtigen anfänglichen Latchfreigabewert
einzugeben (entweder 00000001b oder 10000000b). Der bestimmende
Faktor dafür,
welcher für
die Latchfreigaben verwendet wird, die den Daten der Internen Daten-Zwischenverbindung
1 und der Internen Daten-Zwischenverbindung 2 entsprechen, ist die
1:2-Teiler-Strobeeingabe in den Datenstrobe-Randkompensationsempfänger.
-
Der
Datenstrobe-Randkompensationsempfänger gibt also die Latchfreigabewerte
aus den Blöcken 0–3 in die
entsprechenden vier QW-FIFO-Puffer aus. Die Puffer nutzen dann die
Latchfreigaben zum Zwischenspeichern der Daten, die sich auf jedem
der vier Internen Daten-Zwischenverbindungen
befinden, an den festgelegten Speicherorten (die durch die Latchfreigabewerte
festgelegt werden) innerhalb jedes QW-FIFO-Puffers. Sobald die Daten
sich an Ort und Stelle innerhalb des QW-FIFO-Puffers befinden, können die
Daten an den anfänglichen
Datenanforderer gesendet werden. Dies kann mit derselben Rate geschehen, mit
der die Daten von der Prozessor-Speicher-Zwischenverbindung einlaufen.
-
6 illustriert
ein Zeitsteuerungsdiagramm einer Ausführungsform der kompensierten
1:2-Teiler-Strobes,
der Daten und der Latchfreigaben in einem nominalen Strobezeitsteuerungsmodus.
Im nominalen Strobezeitsteuerungsmodus sind die Daten und der Strobe
bereits angepaßt,
daher ist keine Strobekompensation notwendig. Außerdem sind im nominalen Strobezeitsteuerungsmodus
die Anfangsdaten auf der Internen Daten-Zwischenverbindung 2 nicht
gültig,
daher beträgt
der Latchfreigaberesetwert für
QW2, der in den QW2-Empfangsblock eingespeist wird, 10000000b, die
ersten gültigen
Daten auf der Internen Daten-Zwischenverbindung 2 werden bei der
zweiten ansteigenden Kante des 1:2-Teiler-Strobes für QW2 zwischengespeichert.
-
7 illustriert
ein Zeitsteuerungsdiagramm einer Ausführungsform der kompensierten
1:2-Teiler-Strobes,
der Daten und der Latchfreigaben in einem verzögerten Strobezeitsteuerungsmodus.
In diesem Zeitsteuerungsdiagramm sind die Daten gegenüber dem
Strobe verzögert.
Die kompensierten 1:2-Teiler-Strobes werden daher verzögert, um
ihn wieder zu den Daten auszurichten. Im verzögerten Zeitsteuerungsmodus sind
die Anfangsdaten auf der Internen Daten-Zwischenverbindung 1 nicht gültig, daher
beträgt
der Latchfreigaberesetwert für
QW1, der in den QW1-Empfangsblock eingespeist wird, 10000000b, die
ersten gültigen
Daten auf der Internen Daten-Zwischenverbindung 1 werden bei der
zweiten ansteigenden Kante des 1:2-Teiler-Strobes für QW1 zwischengespeichert.
-
8 illustriert
ein Zeitsteuerungsdiagramm einer Ausführungsform der kompensierten
1:2-Teiler-Strobes,
der Daten und der Latchfreigaben in einem frühen Strobezeitsteuerungsmodus.
In diesem Zeitsteuerungsdiagramm sind die Daten früh gegenüber dem
Strobe. Die kompensierten 1:2-Teiler-Strobes werden daher früh eingegeben,
um sie wieder zu den Daten auszurichten. Im frühen Zeitsteuerungsmodus sind die
Anfangsdaten auf allen vier Internen Daten-Zwischenverbindungen gültig, daher
werden alle vier QWs bei der ersten Anstiegskante ihres entsprechenden
1:2-Teiler-Strobes zwischengespeichert.
-
9 ist
ein Flußdiagramm
einer Ausführungsform
eines Prozesses zum Kompensieren der Zeitfehlsteuerung zwischen
Daten und einem quellsynchronen Datenstrobe. Der Prozeß wird von
der Verarbeitungslogik ausgeführt,
die Hardware (z. B. Schaltungen, reservierte Logik, programmierbare
Logik, Mikrocode usw.), Software (wie zum Beispiel die auf einem
Universalcomputersystem oder einer reservierten Anlage ausgeführte) oder
eine Kombination beider umfassen kann. Mit Bezug auf 9,
beginnt der Prozeß damit,
daß die
Verarbeitungslogik Daten von einem Speicher auf einer ersten Zwischenverbindung
empfängt.
In einer Ausfüh rungsform
ist die erste Zwischenverbindung eine Prozessor-Speicher-Zwischenverbindung
des Computersystems, und die Daten werden auf die Zwischenverbindung
vom Systemspeicher gesendet, der mit der Zwischenverbindung verbunden
ist (Verarbeitungsblock 900).
-
Der
Prozeß sich
damit fort, daß der
Verarbeitungslogik einen quellsynchronen Datenstrobe vom Speicher
erhält
(Verarbeitungsblock 902). Dann erzeugt die Verarbeitungslogik
mindestens einen nominalen, einen frühen und einen verzögerten kompensierten
Datenstrobe aus dem empfangenen Datenstrobe (Verarbeitungsblock 904).
In einer Ausführungsform
sind die nominalen, frühen
und verzögerten
Datenstrobes 1:2-Teiler-Strobes. Die 1:2-Teiler-Strobes werden durch
Abtasten jeder zweiten ansteigenden oder abfallenden Kante des empfangenen
Datenstrobes erzeugt.
-
Die
Verarbeitungslogik speichert dann die empfangenen Daten mit dem
nominalen, frühen
oder verzögerten
kompensierten Datenstrobe zwischen (Verarbeitungsblock 906).
In einer Ausführungsform
werden die Daten mit dem nominalen kompensierten Strobe zwischengespeichert,
wenn die empfangenen Daten der empfangene Datenstrobe eine übereinstimmende
Zeitsteuerung haben; die Daten werden mit dem verzögerten kompensierten
Strobe zwischengespeichert, wenn die empfangenen Daten später empfangen
werden als der entsprechende empfangene Strobe, und die Daten werden
mit dem frühen
kompensierten Strobe zwischengespeichert, wenn die empfangenen Daten
vor dem entsprechenden empfangenen Strobe empfangen werden. Und
schließlich
werden die zwischengespeicherten Daten auf die erste Zwischenverbindung
oder eine zweite Zwischenverbindung ausgegeben (Verarbeitungsblock 908),
und der Prozeß wird
beendet. In anderen Ausführungsformen
können
die Daten auf der Prozessor-Speicher-Zwischenverbindung bleiben,
wenn die Speicherauslesung vom Prozessor angefordert wurde, oder
die Daten können
auf eine zweite Zwischenverbindung übertragen werden, wenn die
Speicherauslesung von einer Bushauptsteuerungsvorrichtung auf einer
E/A-Zwischenverbindung angefordert wurde. Es gibt viele verschiedene
Hauptsteuerungsvorrichtungen, die eine Leseanforderung an den Speicher
senden können.
-
Es
werden daher Ausführungsformen
eines Verfahrens, Vorrichtung und Systems zum Kompensieren einer
Zeitfehlsteuerung zwischen Daten und einem quellsynchronen Datenstrobe
beschrieben. Diese Ausführungsformen
sind mit Bezug auf spezielle als Beispiel dienende Ausführungsformen
derselben beschrieben worden. Es ist für Personen, die den Vorteil
dieser Offenbarung haben, ersichtlich, daß verschiedene Modifizierungen
und Änderungen
an diesen Ausführungsformen
vorgenommen werden können,
ohne vom Geist und Geltungsbereich der Ausführungsformen, die hierin beschrieben
werden, abzuweichen. Die Patentbeschreibung und die Zeichnungen
müssen
dementsprechend in einem erläuternden
Sinn statt in einem einschränkenden
Sinn betrachtet werden.