-
Die
Anmeldung betrifft eine Steuerungsanordnung für einen programmierbaren Taktsynchronisierer
sowie ein Computersystem mit einer solchen Anordnung.
-
Digitale
elektronische Systeme, z. B. Computersysteme, müssen häufig unter Verwendung unterschiedlicher
Schnittstellen kommunizieren, die jeweils bei einer optimierten
Geschwindigkeit für
verbessertes Verhalten betrieben werden. Üblicherweise werden Mehrfachtastsignale
mit unterschiedlichen Frequenzen zum Liefern einer geeigneten Zeitgebung
für die
Schnittstellen verwendet. Ferner beziehen sich die Frequenzen solcher
Taktsignale allgemein auf eine vorbestimmte Weise aufeinander. Zum Beispiel
kann ein Kern- oder
System-Takt, der bei einer bestimmten Frequenz (Fc) läuft, als
Haupttakt in einem typischen Computersystem verwendet werden, zum
Bereitstellen einer Zeitbasis im Hinblick auf einen spezifischen
Abschnitt seiner digitalen Schaltungsanordnung. Andere Abschnitte
der digitalen Schaltungsanordnung des Computersystems (wie z. B.
ein Bussegment und die logische Schaltungsanordnung, die auf demselben
angeordnet ist), können unter
Verwendung von Zeitgebungssignalen getaktet werden, die aus dem
Haupttakt hergeleitet werden, wobei die hergeleiteten Frequenzen
(FD) folgender Beziehung folgen: Fc/FD ≥ 1.
-
Aufgrund
der asynchronen – aber
verwandten – Eigenschaft
der zugehörigen
digitalen Schaltungsabschnitte, wird die Synchronisiererschaltungsanordnung
häufig
in Computersystemen verwendet, um Datenübertragungsoperationen über eine
Taktbereichsgrenze zu synchronisieren, um zeitgebungsbezogene Datenfehler
zu vermeiden. Es ist üblicherweise
erforderlich, daß eine
solche Synchronisiererschaltungsanordnung eine niedrige Latenzzeit
besitzt (was eine präzise
Steuerung der asynchronen Takte erfordert, die jeweils die Schaltungsabschnitte in
zwei unterschiedlichen Taktbereichen takten). Ferner, da Phasenregelschleifen
(PLLs; PLL = Phase-Locked Loop), die bei herkömmlichen Anordnungen verwendet
werden, um Takte unterschiedlicher aber verwandter Frequenzen zu
erzeugen, einen großen
Betrag an Eingangs-/Ausgangs-(I/O-)Jitter aufweisen können, ist
es wesentlich, daß die
Synchronisiererschaltungsanordnung in der Lage ist, beträchtliche
Beträge
einer Niederfrequenzphasendifferenz (oder eines Versatzes) zwischen
den dadurch erzeugten Takten zu tolerieren.
-
Aus
der
US 2002/0199124
A1 ist bereits ein System zum Synchronisieren der Datenübertragung über eine
Grenze zwischen zwei Taktsystemen bekannt, welches mit einer Taktsynchronisationssteuerung
arbeitet, welche zusammen mit einer phasengerasteten Regelschleife
zusammenwirkt.
-
Aus
der
US 2002/0196886
A1 ist eine Taktsynchronisationssteuerung mit einer Synchronisationspulskompensation
bekannt.
-
Der
Erfindung liegt die Aufgabe zugrunde, eine Steuerungsanordnung sowie
ein Computersystem zu schaffen, welche in der Lage sind, erhebliche Phasendifferenzen
zwischen einem Kerntaktbereich und einem Bustaktbereich zu tolerieren.
-
Diese
Aufgabe wird durch eine Steuerungsanordnung gemäß Anspruch 1 sowie durch ein
Computersystem gemäß Anspruch
10 gelöst.
-
Eine
Synchronisierersteuerungsanordnung wird geschaffen, zum Bewirken
einer Datenübertragung über eine
Taktgrenze zwischen einem Kerntaktbereich und einem Bustaktbereich,
wobei der Kerntaktbereich mit einem Kerntaktsignal wirksam ist und der
Bustaktbereich mit einem Bustaktsignal wirksam ist. Ein Bustakt-Synchronisierer-Steuerungsabschnitt ist
wirksam, um einen Satz von Taktbeziehungs-Steuersignalen zu erzeugen,
wobei zumindest ein Abschnitt der Signale beim Erzeugen eines Satzes
von Busbereich-Synchronisierer-Steuersignalen verwendet
wird, hin zu Bus-zu-Kern- und Kern-zu-Bus-Synchronisierern. Ein
Kerntakt-Synchronisierer-Steuerungsabschnitt
wird geschaffen, zum Erzeugen eines Satzes von Kernbereich-Synchronisierer-Steuersignalen
hin zu den Synchronisierern. Der Kerntaktsynchronisierer-Steuerungsabschnitt
ist wirksam, ansprechend auf die Taktbeziehungs-Steuersignale, sowie
auf Konfigurations-Informationssignale,
die unterschiedliche Versatztoleranzen und Latenzzeitwerte anzeigen,
die den Taktsignalen zugeordnet sind.
-
Bevorzugte
Ausführungsbeispiele
der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf
die beiliegenden Zeichnungen näher
erläutert.
Es zeigen:
-
1 ein
Blockdiagramm eines Ausführungsbeispiels
eines programmierbaren Synchronisierersystems zum Bewirken einer
Datenübertragung über eine
Taktgrenze;
-
2 ein
Zeitgebungsdiagramm von zwei Taktbereichen mit einem 5:4-Frequenzverhältnis, wobei
das programmierbare Synchronisierersystem aus 1 zum
Bewirken einer Datenübertragung über die
Taktgrenze verwendet werden kann;
-
3 ein
Zeitgebungsdiagramm der verschiedenen Steuersignale, die dem programmierbaren
Synchronisie rersystem zum Übertragen
von Daten zwischen zwei Taktbereichen mit einem 5:4-Frequenzverhältnis zugeordnet
sind;
-
4A ein
Blockdiagramm eines Ausführungsbeispiels
einer Synchronisiererschaltung zum Übertragen von Daten von einem
ersten Taktbereich (d. h. „schneller
Taktbereich" oder „Kerntaktbereich") zu einem zweiten
Taktbereich (d. h. „langsamer
Taktbereich" oder „Bustaktbereich"), wobei die Taktbereiche
ein 5:4-Frequenzverhältnis
aufweisen;
-
4B ein
Zeitgebungsdiagramm, das der Synchronisierer-Schaltung zugeordnet ist, die in 4A gezeigt
ist;
-
5A ein
Blockdiagramm eines Ausführungsbeispiels
einer Synchronisierer-Schaltung zum Übertragen von Daten von dem
zweiten Taktbereich (d. h. „langsamer
Taktbereich" oder „Bustaktbereich") zu dem ersten Taktbereich
(d. h. „schneller
Taktbereich" oder „Kerntaktbereich"), wobei die Taktbereiche
ein 5:4-Frequenzverhältnis
aufweisen;
-
5B ein
Zeitgebungsdiagramm, das der Synchronisierer-Schaltung zugeordnet ist, die in 4B gezeigt
ist;
-
6 ein
Blockdiagramm eines Ausführungsbeispiels
einer Bustaktsynchronisierersteuerung zum Steuern einer Bus-zu-Kern-Synchronisiererschaltung,
die in 5A gezeigt ist;
-
7 ein
Blockdiagramm eines Ausführungsbeispiels
einer Kerntaktsynchronisierersteuerung zum Steuern einer Kern-zu-Bus-Synchronisiererschaltung,
die in 4A gezeigt ist;
-
8A ein
Blockdiagramm eines Ausführungsbeispiels
eines SYNC-Abtastlogikblocks;
-
8B ein
Blockdiagramm eines Ausführungsbeispiels
eines Synchronisierungsverhältnis-Abtastblocks,
bereitgestellt als Teil der Kerntaktsynchronisierersteuerung, die
in 7 gezeigt ist;
-
8C ein
Blockdiagramm eines Ausführungsbeispiels
eines Sequenzabtastblocks, der als Teil der Kerntaktsynchronisierersteuerung
vorgesehen ist, die in 7 gezeigt ist;
-
8D ein
Blockdiagramm eines Ausführungsbeispiels
eines syncb0-Abtastblocks, bereitgestellt als Teil der Kerntaktsynchronisierersteuerung, die
in 7 gezeigt ist;
-
8E ein
Blockdiagramm eines Ausführungsbeispiels
eines Synchronisierungspulserfassungsblocks, bereitgestellt als
Teil der Kerntakt-Synchronisierer-Steuerung, die in 7 gezeigt
ist;
-
9 ein
Flußdiagramm
der verschiedenen Operationen eines Ausführungsbeispiels eines Synchronisierersteuerungsverfahrens
der vorliegenden Erfindung.
-
In
den Zeichnungen werden gleiche oder ähnliche Elemente mit identischen
Bezugszeichen in den verschiedenen Ansichten derselben bezeichnet, und
die verschiedenen gezeigten Elemente sind nicht notwendiger Weise
maßstabsgetreu
gezeichnet. Bezug nehmend nun auf 1 ist dort
ein Ausführungsbeispiel
eines programmierbaren Synchronisierersystems 100 zum Bewirken einer
Datenübertragung über eine
Taktgrenze zwischen einem ersten Taktbereich (d. h. „schneller
Taktbereich"), der
N Taktsignale aufweist, und einen zweiten Taktbereich (d. h. „langsamer
Taktbereich"), der
M Taktzyklen aufweist, derart gezeigt, daß N/M > 1. Üblicherweise
gilt M = (N – 1),
und mittels einer exemplarischen Implementierung kann das Synchronisierersystem 100 als Teil
eines Computersystems vorgesehen sein, zum Übertragen von Daten zwischen
einem schnelleren Kerntaktbereich (der z. B. mit einem Kerntaktsignal von
250 MHz arbeitet) und einem langsameren Bustaktbereich (der z. B.
mit einem Bustaktsignal von 200 MHz arbeitet), mit einem 5:4-Frequenzverhältnis. Dementsprechend,
zu Zwecken dieser vorliegenden Patentanmeldung, werden die Ausdrücke „erster Takt" und „Kerntakt" als Synonyme im
Hinblick auf einen schnellen Taktbereich verwendet; auf ähnliche Weise
werden die Ausdrücke „zweiter
Takt" und „Bustakt" im Hinblick auf
einen langsamen Taktbereich verwendet.
-
Eine
Phasenregelschleifenschaltung (PLL-Schaltung) 104 ist wirksam,
um einen SYNC-Puls 110 und ein Bustakt-(d. h. zweites Takt-)Signal 108 (bezeichnet
als bus_clock) basierend auf einem Kerntakt-(d. h. erstes Takt-)Signal 106 (bezeichnet
als core_clock) zu erzeugen, das zu derselben geliefert wird. Wie
nachfolgend ersichtlich ist, stellt der SYNC-Puls 110 einen
Referenzpunkt zum Koordinieren von Datenübertragungsoperationen bereit
und wird HOCH-getrieben,
wenn die Signale bus_clock und core_clock zusammenfallende ansteigende
Flanken aufweisen. Die zwei Taktsignale 106, 108 und
der SYNC-Puls 110 werden zu einem Synchronisierer-/Steuerungs-Block 102 geliefert,
der die Taktgrenze zwischen einem ersten Taktbereich (d. h. Kerntaktbereich)
und einem zweiten Taktbereich (d. h. Bustaktbereich) zum Bewirken
einer Datenübertragung über die
Grenze spreizt. Bezugszeichen 103A und 103B beziehen
sich auf eine Schaltungsanordnung, die in dem ersten bzw. zweiten Taktbereich
angeordnet ist, z. B. Kerntaktbereichlogik und Bustaktbereichlogik,
die Daten zwischen denselben senden und empfangen, wie es über die Synchronisierer 105A und 105B ermöglicht wird,
die nachfolgend hierin detaillierter beschrieben werden.
-
Jedes
der Signale core_clock und bus_clock 106 und 108 wird
zuerst zu einem jeweiligen Taktverteilungsbaumblock geliefert, zum
Erzeugen eines verteilten Taktsignals, das zu verschiedenen Teilen des
Synchronisierer-/Steuerungs-Blocks 102 geliefert wird.
Das Bezugszeichen 112 bezieht sich auf den Taktverteilungsbaum,
der mit dem core_clock-Signal 106 wirksam ist, um das verteilte
core_clock-Signal zu erzeugen, das als „c" etikettiert ist und mit dem Bezugszeichen 106' in 1 gezeigt
ist. Auf ähnliche
Weise bezieht sich das Bezugszeichen 114 auf den Taktverteilungsbaum 114,
der mit dem bus_clock-Signal 108 wirksam ist, um das verteilte bus_clock-Signal
zu erzeugen, das als „b" etikettiert ist
und mit dem Bezugszeichen 108' in 1 gezeigt ist.
Wie ein Fachmann auf dem Gebiet ohne weiteres erkennen sollte, sind
die verteilten Taktsignale im wesentlichen die gleichen wie die
Eingangstaktsignale. Dementsprechend werden das core_clock-Signal 106 und
sein verteiltes Gegenstück
c 106' hierin nachfolgend
gleich behandelt. Ferner werden das bus_clock-Signal 108 und
sein verteiltes Gegenstück b 108' auf ähnliche
Weise als äquivalent
behandelt.
-
Ein
SYNC-Abtastlogikblock 116 ist wirksam ansprechend auf die
verteilten Taktsignale 106', 108' und das SYNC-Pulssignal 110,
um ein Paar von abgetasteten SYNC-Pulsen zu erzeugen, die zu einer geeigneten
Synchronisierersteuerungsschaltungsanordnung weitergeleitet werden.
Wie in weiteren Einzelheiten Bezug nehmend auf 8A gezeigt
ist, werden die abgetasteten SYNC-Pulse bei einem Ausführungsbeispiel
wie folgt hergestellt. Der SYNC-Puls 110 wird zweimal durch
zwei Flip-Flop-(FF-)Elemente abgetastet, die an der ansteigenden
Flanke des verteilten core_clock, c 106', getaktet werden. Wie offensichtlich
ist, ist das Abtasten durch zwei FF-Elemente beim Beseitigen von Metastabilität wirksam,
die dem SYNC-Puls 110 zugeordnet ist (die möglicherweise
aufgrund des Versatzes zwischen dem Eingangssignal, core_clock 106,
und dem Ausgangssignal, SYNC 110, entsteht). Der zweifach
abgetastete SYNC-Puls wird als „sync"-Signal 118 in 1 bezeichnet,
das zu einer ersten Synchronisierer-Steuerung (oder einer Kerntaktsynchronisierer-Steuerung) 124 geliefert
wird, die in dem ersten Taktbereich arbeitet.
-
Bezug
nehmend auf den zweiten Taktbereich (d. h. Bustaktbereich) wird
der SYNC-Puls 110 in dem SYNC-Abtastlogikblock 116 durch
ein einzelnes FF-Element abgetastet (gezeigt in 8A),
das an der ansteigenden Flanke des verteilten bus_clock, b 108', getaktet wird.
Um anzudeuten, daß die
Abtastung unter Verwendung von bus_clock durchgeführt wird,
wird der abgetastete SYNC-Puls als „sync_B"-Signal 120 bezeichnet, das
zu einer zweiten Synchronisierersteuerung 122 geliefert
wird, die in dem zweiten Taktbereich arbeitet, ebenfalls bezeichnet
als die Bustaktsynchronisierer-Steuerung
in 1.
-
Die
Bustaktsynchronisierer-Steuerung 122 ist ansprechend auf
das verteilte bus_clock, b 108', und den abgetasteten sync_B-Puls 120 wirksam,
um eine Mehrzahl von Synchronisierersteuersignalen zu erzeugen,
wobei ein Abschnitt der Signale zu einer ersten Synchronisiererschaltungseinrichtung 105A geleitet
wird, die arbeitet, um eine Datenübertragung von der ersten Schaltungsanordnung 103A (d.
h. der Kerntaktbereichslogik) zu der zweiten Schaltungsanordnung 103B (d.
h. der Bustaktbereichslogik) zu steuern. Das Bezugszeichen 132 bezieht
sich auf den Signalweg dieses Abschnitts des Steuersignals, ausgehend
von der Bustaktsynchronisierersteuerung 122. Ein anderer
Abschnitt des Synchronisierersteuersignals, erzeugt durch die Bustaktsynchronisierersteuerung 122,
wird (über
den Signalweg 134) zu einer zweiten Synchronisiererschaltungseinrichtung 105B geleitet,
die wirkt, um eine Datenübertragung von
einer zweiten Schaltungsanordnung 103B zu einer ersten
Schaltungsanordnung 103A zu steuern. Gemäß der Nomenklatur,
die bei der vorliegenden Patentanmeldung verwendet wird, können die
erste und die zweite Synchronisiererschaltung ebenfalls als Kern-zu-Bus-Synchronisierer-
bzw. Bus-zu-Kern-Synchronisierer-Schaltungen bezeichnet werden.
Zusätzlich
dazu erzeugt die Bustakt-Synchronisierer-Steuerung 122 ferner
einen Satz von Zwischensteuerungs-Steuersignalen, die zu der ersten
Synchronisierersteuerung 124 (d. h. der Kerntaktsynchronisierersteuerung)
derart geliefert werden, daß beide
Steuerungen zusammenarbeiten können.
Das Bezugszeichen 128 bezieht sich auf den Signalweg des
einen oder der mehreren Zwischensteuerungs-Taktbeziehungs-Steuersignale,
die zu der Kerntakt-Synchronisierer-Steuerung 124 geliefert
werden. Wie nachfolgend zusätzlich
detaillierter ersichtlich ist, ist ein Teil der Funktionalität der Zwischensteuerungs-Steuersignale,
Taktbeziehungsinformationen zu der Kerntakt-Synchronisierer-Steuerung 124 zu
liefern, so daß dieselbe
ihre Synchronisierer-Steuersignale zu einer geeigneten Zeit im Hinblick
auf die Bus- und Kern-Taktsignale
erzeugen kann.
-
Ähnlich zu
der Operation der Bustakt-Synchronisierer-Steuerung 122 ist
die Kerntakt-Synchronisierer-Steuerung 124 ansprechend
auf die verteilten core_clock, c 106', Zwischensteuerungs-Steuersignale
und den abgetasteten sync-Puls 118 wirksam,
um eine Mehrzahl von Synchronisierer-Steuersignalen zu erzeugen, wobei ein
Abschnitt der Signale zu der ersten Synchronisierer-Schaltungseinrichtung 105A geleitet
wird, und wobei ein anderer Abschnitt der Signale zu der zweiten
Synchronisiererschaltungseinrichtung 105B geleitet wird.
Die Bezugszeichen 138 und 140 beziehen sich auf
die jeweiligen Signalwege, die sich auf diese Steuersignale beziehen.
Die Kerntakt-Synchronisierer-Steuerung 124 erzeugt ferner
Daten-Sende-/Empfangs-Steuersignale, die zu der Kerntaktbereichslogik 103A über einen
Signalweg 136 geliefert werden, so daß die Kerntaktbereichslogik 103A weiß, wann
dieselbe Daten zu der Bustaktbereichslogik 103b (d. h.
pilzige TX-Operationen) senden kann, und wann sie Daten von der
Bustaktbereichslogik 103b empfangen kann (d. h. gültige RX-Operationen).
-
Alle
Steuersignale von der Bustakt-Synchronisierer-Steuerung 122 zu
dem ersten und zweiten Synchronisierer 105A, 105B werden
durch eines oder mehrere FF-Elemente stufenweise verarbeitet, die
mit dem verteilten bus_clock b 108' getaktet werden. Auf ähnliche
Weise werden die Steuersignale von der Kerntakt-Synchronisierer-Steuerung 124 durch
eine Anzahl von FF-Elementen stufenweise verarbeitet, die mit dem
Abtast-core_clock, c 106', getaktet
werden, bevor sie zu den verschiedenen Teilen des Synchronisierersystems 100 geliefert
werden. Entsprechend, wie nachfolgend detaillierter gezeigt wird,
können
die verschiedenen Steuersignale, die dem Synchronisierersystem 100 zugeordnet
sind, durch ein Signaletikett bezeichnet werden, das mit einem „_ff" oder „_ff_B"-Suffix verkettet
ist, um den Registrierungsprozeß durch
das verteilte core_clock oder das verteilte bus_clock anzuzeigen.
-
Ein
Phasendetektor 130 erfaßt Phasendifferenzen (d. h.
Versatz) zwischen den zwei Taktsignalen, durch Arbeiten ansprechend
auf die abgetasteten Signale bus_clock und core_clock. Diese Informationen
werden zu der Kerntakt-Synchronisierer-Steuerung 124 geliefert,
die den Versatz kompensieren kann oder geeignete Zeiten zum koordinieren mit
der Bustakt-Synchronisierer-Steuerung 122 bestimmen kann.
-
Wenn
das Bustaktsignal stabil im Hinblick auf den SYNC-Puls ist, werden
die Zwischensteuerungs-Taktbeziehungs-Steuersignale durch die Bustakt-Synchronisierer-Steuerung 122 erzeugt,
die Informationen über
das Frequenzverhältnis
des ersten und zweiten Taktsignals, Taktsequenzinformationen und
SYNC-Verzögerung
liefern, die zu der Kerntakt-Synchronisierer-Steuerung 124 gesendet
werden, zum Synchronisieren ihres Kerntaktsignals gemäß denselben,
wie nachfolgend detaillierter ersichtlich wird. Andererseits, wenn
das Kerntaktsignal stabil im Hinblick auf den SYNC-Puls ist, können die Zwischensteuerungs-Taktbeziehungs-Steuersignale durch
die Kerntakt-Synchronisierer-Steuerung 124 erzeugt werden,
zum Senden zu der Bustakt-Synchronisierer-Steuerung 122,
so daß beide
Synchronisierersteuerungen geeignet synchronisiert werden können. Ferner
wird eine Konfigurationsschnittstelle 126, etikettiert
als SYNC_Config in 1, als Teil des programmierbaren
Synchronisierersystems 100 bereitgestellt, zum Konfigurieren
der Kerntakt-Synchronisierer-Steuerung 124, so daß sie für unterschiedliche
Versatztoleranzen, Latenzzeiten und Operationsmodi programmiert
werden kann. Bei einem Ausführungsbeispiel
kann die Konfigurationsschnittstelle 126 als ein Register
implementiert sein, das eine Mehrzahl von Bits aufweist. Bei einem
anderen Ausführungsbeispiel
kann eine Speicher-basierte Einstellung, z. B. EPROM-gespeicherte
Einstellungen, als eine SYNC-Konfigurationsschnittstelle vorgesehen
sein.
-
Wie
vorangehend ausgeführt
wurde, kann das Synchronisierersystem 100 für unterschiedliche Versatztoleranzen
und Latenzzeiten programmiert sein, so daß eine Datenübertragung
bei hohen Geschwindigkeiten ordnungsgemäß ablaufen kann, sogar wenn
ein großer
Versatz oder eine Anforderung nach niedriger Latenzzeit vorliegt.
Ferner kann das Synchronisierersystem 100 mit beliebigen
zwei Taktbereichen arbeiten, die ein Verhältnis von N ersten Taktzyklen
zu M zweiten Taktzyklen aufweisen, wobei N/M ≥ 1. Zu Zwecken der Darstellung
ist die Operation eines Ausführungsbeispiels
des programmierbaren Synchronisierersystems 100 und seiner
Steuerungsanordnung (d. h. der Bustakt-Synchronisierer-Steuerungsabschnitt 122 und
der Kerntakt-Synchronisierer-Steuerungsabschnitt 124)
nachfolgend für
Taktbereiche mit einem 5:4-Frequenzverhältnis detailliert ausgeführt.
-
Bezug
nehmend nun auf 2 ist hier ein Zeitgebungsdiagramm 200 gezeigt,
das zwei Taktbereichen zugeordnet ist, die ein 5:4-Frequenzverhältnis aufweisen.
Beispielsweise ist das core_clock-Signal 106 als der schnelle
Takt vorgesehen und das bus_clock-Signal 108 ist als der
langsame Takt vorgesehen. Entsprechend sind für jeweils fünf Ticks des core_clock, vier
Ticks des bus_clock vorhanden. Wie vorangehend angemerkt wurde,
wird der SYNC-Puls 110 erzeugt, wenn eine ansteigende Flanke
des core_clock-Signals 106 mit einer ansteigenden Flanke
des bus_clock-Signals 108 zusammenfällt, was ein Zeitgebungssequenzfenster 204 für die Übertragung
von Daten einleitet, das k Bit breite Daten (k ≥ 1) aufweisen kann, von einem
Taktbereich zu dem anderen Taktbereich. Eine Zykluszählung 202 bezieht
sich auf die Numerierung der core_clock-Zyklen in einer bestimmten
Zeitgebungssequenz 204.
-
Wie
oben herausgestellt wurde, wird der SYNC-Puls 110 bei zusammenfallenden
ansteigenden Flanken der Taktsignale HOCH-getrieben und die Datenübertragungsoperationen über die
Taktgrenze zwischen den zwei Taktbereichen werden zeitlich Bezug
nehmend auf den SYNC-Puls abgestimmt. In einem normalen Zustand,
in dem kein Versatz (oder Jitter, wie er manchmal bezeichnet wird) zwischen
den Taktsignalen vorliegt, treten die zusammenfallenden Flanken
an den ansteigenden Flanken des ersten Zyklus auf (Zyklus 0), wie
in 2 gezeigt ist. Da fünf core_clock-Zyklen und nur vier
bus_clock-Zyklen vorliegen, kann die erste Taktbereichsschaltungsanordnung
während
eines Zyklus keine Daten versenden, was zu einem Ereignis führt, das
als „toter
Tick" bezeichnet
wird, da die zweite Taktbereichsschaltungsanordnung keinen entsprechenden
Zeitschlitz zum Empfangen desselben aufweist. Üblicherweise ist der Zyklus,
der am wenigsten versatztolerant ist, der, bei dem keine Daten gesendet
werden. Auf ähnliche
Weise, aufgrund eines zusätzlichen
Zyklus (wo die Daten unbestimmt und/oder ungültig sind), kann die erste
Taktbereichschaltungsanordnung während
eines Zyklus keine Daten empfangen. Dies ist wiederum der Zyklus
mit der geringsten Versatztoleranz, während dem keine Daten durch
die erste Taktbereichsschaltungsanordnung empfangen werden.
-
Ein
Versatz zwischen den Taktsignalen kann z. B. eine Abweichung bei
der Positionierung des SYNC-Pulses verursachen, was die Datenübertragungsoperationen
zwischen den zwei Bereichen beeinträchtigt. Bei dem exemplarischen
5:4-Frequenzverhältnisszenario,
das oben ausgeführt
ist, wenn das bus_clock 108 dem core_clock 106 z.
B. um einen Viertel Zyklus vorauseilt, dann fallen die Flanken bei
dem Start von Zyklus 1 zusammen, anstatt bei dem Start von Zyklus
0 zusammenzufallen. Auf ähnliche
Weise, wenn das bus_clock-Signal
dem core_clock-Signal um einen Viertel Zyklus nacheilt, fallen die
Flanken bei dem Start des letzten Zyklus zusammen (d. h. Zyklus
4). Unabhängig
von dem Versatz zwischen den Taktzyklen liegt jedoch ein Zyklus
vor, bei dem keine Daten gesendet werden können, und ein Zyklus, bei dem
keine Daten empfangen werden können,
aus der Perspektive der Kerntaktbereichs-Schaltungsanordnung.
-
3 zeigt
ein Zeitgebungsdiagramm 300 der verschiedenen Steuersignale,
die einem Ausführungsbeispiel
des programmierbaren Synchronisierersystems 100 zum Übertragen
von Daten zwischen zwei Taktbereichen zugeordnet sind, die ein 5:4-Frequenzverhältnis aufweisen.
Die Taktzyklen 106, 108 und der SYNC-Puls 110 sind
wiederum gezeigt, zum Zeigen der zeitlichen Beziehung zwischen den
Steuersignalen. Das Bezugszeichen 302 bezieht sich auf ein
b2c_valid_ff-Signal (aktiv HOCH), das durch die Kerntakt-Synchronisierer-Steuerung 124 erzeugt wird,
zum Spezifizieren von einem der fünf Zyklen während dem die Kerntaktbereichs-Schaltungsanordnung 103A keine
Daten empfangen kann, die durch die Bustaktbereichs-Schaltungsanordnung 103B geliefert
werden. Wie dargestellt ist, können Daten
von der Bustaktbereich-Schaltungsanordnung 103B in den
Zyklen 1–4
empfangen werden, aber nicht in Zyklus 0. Auf ähnliche Weise, da ein toter
Tick zwischen den Kern- und Bus-Takten vorliegt, liefert die Kerntakt-Synchronisierer-Steuerung 124 ferner ein
c2b_valid_ff-Signal 304, um anzuzeigen, wann die Kerntaktbereichs-Schaltungsanordnung 103A Daten
gültig
zu der Bustaktbereichs-Schaltungsanordnung 103B übermitteln
kann. Ferner ist eine Reihe von „Vorwarn"-Signalen (wobei jedes aktiv HOCH ist)
c2b_valid_m_ff[4:1] 306A–306D bereitgestellt, zum
Anzeigen einer Anzahl von vorauseilenden Zyklen, bezüglich einer
Zeit, wenn der tote Zyklus zwischen dem ersten und dem zweiten Taktsignal
auftritt, während
dem die Kerntaktbereichs-Schaltungsanordnung 103A keine
Daten übermitteln
kann. Zum Beispiel wird c2b_valid_ff 304 in Zyklus 4 LOW (NIEDRIG)
aktiviert, was anzeigt, daß die
Kerntaktbereichs-Schaltungsanordnung 103A keine Daten in diesem
bestimmten Zyklus senden kann. Kerntaktbereichsdaten während dieses
Zyklus müssen
möglicherweise
entsprechend gepuffert werden, bevor sie in einem nachfolgenden
Zyklus übertragen
werden. Eine Vorauswarnung über
das Auftreten eines toten Zyklus kann um einen Zyklus, (d. h. bei
Zyklus 3, wie durch c2b_valid_m_ff[1] 306A angezeigt ist,
das in Zyklus 3 LOW (NIEDRIG) aktiviert ist), um zwei Zyklen (d.
h. in Zyklus 2, wie angezeigt ist durch c2b_valid_m_ff[2] 306B,
das in Zyklus 2 LOW aktiviert ist), um drei Zyklen (d. h. in Zyklus
1, wie durch c2b_valid_m_ff[3] 306C angezeigt ist, das
in Zyklus 1 LOW aktiviert ist), und um vier Zyklen (d. h. in Zyklus 0,
wie durch c2b_valid_m_ff[4] 306D angezeigt ist, das in
Zyklus 0 LOW aktiviert ist) im Voraus gegeben werden.
-
Da
das b2C_valid- und das c2b_valid-Steuersignal wirksam sind, um anzuzeigen,
wann eine gültige
Datenübertragung
auftreten kann, können diese
Signale kollektiv als „Übertragungssteuer"-Signale bezeichnet
werden, die durch die Kerntakt-Synchronisierersteuerung 124 geliefert
werden. Ferner, wie nachfolgend in weiteren Einzelheiten ersichtlich ist,
erzeugt die Kerntakt-Synchronisierer-Steuerung 124 ferner
einen anderen Satz von Steuersignalen, d. h. die Synchronisierer-Steuersignale,
stufenweise verarbeitet durch Flip-Flops (c0_sel_ff 308,
c1_sel_ff 310 und core_sel_ff 312), die die Datenlade-
und Datenerfassungsschaltungsanordnung der Synchronisierer 105A, 1055 steuern.
Auf ähnliche
Weise erzeugt die Bustakt-Synchronisierer-Steuerung 122 einen anderen
Satz von Synchronisierer-Steuersignalen
(dargestellt als b0_sel_ff 314, b1_sel_ff 316 und bus_sel_ff 318 nach
der Registrierung), die ferner die Datenlade- und Datenerfassungsschaltungsanordnung
der Synchronisierer 105A, 105B steuern, die nachfolgend
beschrieben werden.
-
4A zeigt
ein Blockdiagramm eines Ausführungsbeispiels
einer Synchronisiererschaltung 400 zum Übertragen von Daten von einem
ersten Taktbereich zu einem zweiten Taktbereich, wobei die Taktbereiche
ein 5:4-Frequenzverhältnis
aufweisen. Es sollte offensichtlich sein, daß die Synchronisiererschaltung 400 ein
bestimmtes Ausführungsbeispiel des
ersten Synchronisierers (d. h. des Kern-zu-Bus-Synchronisierers) 105A ist,
der in 1 gezeigt ist, der angepaßt ist, um mit den verschiedenen
Steuersignalen zu arbeiten, die hierin vorangehend beschrieben sind.
Daten 402 von dem ersten Taktbereich (d. h. Kerndaten von
der Kerntaktbereichslogik) werden auf einem k Bit breiten Datenweg zu
der Eingangsseite der Synchronisiererschaltung 400 geliefert,
die im wesentlichen einen ersten TRANSMIT-Multiplexer-Register-(MUXREG-)Block 408A und
einen zweiten TRANSMIT-MUXREG-Block 408B aufweist. Jeder
der TRANS-MIT-MUXREG-Blöcke umfaßt einen 2:1-MUX,
der mit einem Register gekoppelt ist, das durch das erste Taktsignal
getaktet wird (d. h. das verteilte core_clock, c 106'), wobei die
k Bit breiten Daten zu dem Eingang des 2:1-MUX geliefert werden,
der ausgewählt
wird, wenn ein MUX-Steuersignal
HOCH-(HIGH-)getrieben wird. Der andere Eingang des 2:1-MUX ist über einen
Rückkopplungsweg mit
dem Ausgang des Registers gekoppelt, das demselben zugeordnet ist.
Bei dem Ausführungsbeispiel, das
in 4A gezeigt ist, bilden das Register 412A und
der zugeordnete 2:1-MUX 410A den ersten TRANSMIT-MUXREG-Block 408A,
wobei der 2:1-MUX 410A durch
c0_sel_ff 308 (erzeugt durch die Kerntakt-Synchronisierer-Steuerung 124)
gesteuert wird, das durch das FF 404 stufenweise verarbeitet
wird. Auf ähnliche
Weise bilden das Register 412B und der zugeordnete 2:1-MUX 110B den
zweiten TRANSMIT-MUXREG-Block 408B, wobei der 2:1-MUX 410B durch
c1_sel_ff 310 (ebenfalls erzeugt durch die Kerntakt-Synchronisierer-Steuerung 124)
gesteuert wird, stufenweise verarbeitet durch das FF 406.
Jedes der FF-Elemente 404 und 406 wird
durch den verteilten core_clock, c 106', getaktet.
-
Jeder
der Ausgänge
der zwei TRANSMIT-MUXREG-Blöcke 408A, 408B,
d. h. c0_ff 414A und c1_ff 414B, wird zu einem
RECEIVE-MUXREG-Block 416 (receive = empfangen) an der Ausgangsseite
der Synchronisiererschaltung 400 geliefert, die einen 2:1-MUX 420 und
ein Register 418 umfaßt,
das durch das zweite Taktsignal getaktet wird (d. h. das verteilte
bus_clock, b 108').
Die MUX-Steuerung wird durch bus_ sel_B geliefert, das durch die Bustakt-Synchronisierer-Steuerung 122 erzeugt
wird und durch FF 424 als bus_sel_ff 318 stufenweise
verarbeitet wird. Das Ausgangssignal des RECEIVE-MUXREG-Blocks 416 (d. h. bus_ff)
sind die k Bit breiten Daten, die in der Bustaktbereichslogik als Busdaten 422 empfangen
werden.
-
Es
sollte offensichtlich sein, daß obwohl
einzelne Instanzen der verschiedenen MUXREG-Blöcke in 4A gezeigt
sind, tatsächlich
k solcher Blöcke in
dem Datenweg durch den Kern-zu-Bus-Synchronisierer 400 vorliegen,
um die Übertragung
aller k Datensignale (der k Bit breiten Daten, k ≥ 1) von der Kerntaktbereichslogik
zu der Bustaktbereichslogik zu synchronisieren. 4B zeigt
ein Zeitgebungsdiagramm, das dem Kern-zu-Bus-Synchronisierer-Ausführungsbeispiel 400 zugeordnet
ist, das die zeitliche Beziehung der verschiedenen Steuersignale
darstellt, die demselben zugeordnet sind, und die Wirkung unterschiedlicher
Versatztoleranzen und Latenzzeiten. Zwei Sequenzen von Kerndaten 402 [A, B,
C, D, E] und [A2, B2, C2, D2, E2] werden exemplarisch dargestellt,
wobei jeder Datenblock k Bit breit ist und für einen bestimmten Taktzyklus,
0 bis 4, verfügbar
ist. Unterschiedliche Versatztoleranzen und Latenzzeitfaktoren können programmiert
werden, durch Steuern, was der RECEIVE-MUXREG-Block 416 aus
c0_ff 414A oder c1_ff 414B lädt. In dem Feld A 450A ist
eine Datenübertragung
von der Kernbereichschaltungsanordnung zu der Busbereichschaltungsanordnung
gezeigt, wo ein Zustand, der eine Versatztoleranz von 0,25 (von
einer Kerntaktperiode) und eine hinzugefügte Latenzzeit von 0,75 (von
einer Kerntakt periode) umfaßt,
programmiert ist. Unter diesen Bedingungen erzeugt die Kerntakt-Synchronisierer-Steuerung 124 das
Signal c2b_valid_ff 304 derart, daß keine gültige TX-Operation an dem Zyklus 4 (d. h. dem
fünften
Zyklus) vorliegt. Entsprechend laden die TRANSMIT-MUXREG-Blöcke 408A bzw. 408B die
Datenabschnitte [B, D] und [A, C] in jeder Sequenz, wie durch c0_sel_ff 308 und
c1_sel_ff 310 gesteuert wird. Der Datenabschnitt im Zyklus
4, [E], wird nicht gesendet, derselbe kann gepuffert und/oder nachfolgend
auf einem separaten Datenweg übermittelt
werden. Der RECEIVE-MUXREG-Block 416 lädt alternativ
aus c0_ff 414A (für den
Abschnitt [B, D]) und c1_ff 414B (für den Abschnitt [A, C]) unter
der Steuerung von bus_sel_ff 318 aus der Bustakt-Synchronisierer-Steuerung 122. Die
Daten aus den RECEIVE-MUXREG-Block 416 werden
unter Verwendung des verteilten bus_clock, b 108', ausgetaktet,
als bus_ff 422 (d. h. Busdaten), wobei die Sequenzen [A,
B, C, D] und [A2, B2, C2, D2] sind.
-
Auf ähnliche
Weise sind in den Feldern 450B und 450C Datenübertragungen
gezeigt, die jeweils eine Versatztoleranz von 0,5 und eine hinzugefügte Latenzzeit
von 1,0 bzw. eine Versatztoleranz von 0,75 und eine hinzugefügte Latenzzeit
von 1,25 umfassen. Unter diesen Bedingungen bestimmt die Kerntakt-Synchronisierer-Steuerung 124,
daß Datenübertragungsoperationen
in Zyklus 0 bzw. Zyklus 1 ungültig
sind. Dementsprechend werden Signale c2b_valid_ff 304,
die in Zyklus 0 und in Zyklus 1 LOW aktiviert sind, durch die Kerntakt-Synchronisierer-Steuerung
geliefert, um anzuzeigen, daß ein
Datenabschnitt [A] und ein Datenabschnitt [B] nicht übertragen
werden können.
Folglich sind die übertragenen
Busdatensequenzen [B, C, D, E]/[B2, C2, D2, E2] bzw. [A, C, D, E]/[A2,
C2, D2, E2], gemäß den zwei
dargestellten Sätzen
von Versatz-/Latenz-Kombinationen ausgeführt.
-
Bezug
nehmend nun auf 5A ist hierin ein Blockdiagramm
eines Ausführungsbeispiels
einer Synchronisiererschaltung 500 zum Übertragen von Daten von einem
Bustaktbereich zu einem Kerntaktbereich gezeigt, wobei der Kern-
und Bus-Taktbereich
ein 5:4-Frequenzverhältnis
aufweisen. Fachleute auf dem Gebiet werden wiederum erkennen, daß die Synchronisiererschaltung 500 ein
bestimmtes Ausführungsbeispiel
des zweiten Synchronisierers (d. h. Bus-zu-Kern-Synchronisierer) 105B ist,
der in 1 gezeigt ist, der angepaßt ist, um mit verschiedenen
Steuersignalen zu arbeiten, die hierin vorangehend unter besonderer
Bezugnahme auf 3 beschrieben wurden. Ferner
sollte offensichtlich sein, daß die
physische Schaltungsanordnung des Bus-zu-Kern-Synchronisierers 500 im
wesentlichen ähnlich
zu der des Kern-zu-Bus-Synchronisierers 400 ist,
der oben detailliert ausgeführt
ist, außer
daß dieselbe
mit unterschiedlichen Steuersignalen verdrahtet ist, die geeignet
durch die Synchronisierersteuerungen erzeugt werden.
-
Daten 502 aus
dem zweiten Taktbereich (d. h. Busdaten aus der Bustaktbereichslogik)
werden auf einem k Bit breiten Datenweg zu der Eingangsseite der
Synchronisiererschaltung 500 geliefert, die ein Paar von
TRANSMIT-MUXREG-Blöcken 508A, 508B aufweist,
die in dem Bustaktbereich angeordnet sind. Jeder der TRANSMIT-MUXREG-Blöcke umfaßt einen
2:1-MUX, der mit
einem Register gekoppelt ist, das durch das zweite Taktsignal getaktet wird
(d. h. das verteilte bus_clock, b 108') wobei die k Bit breiten Busdaten 502 zu
dem Eingang des 2:1-MUX geliefert werden, der ausgewählt wird, wenn
ein MUX-Steuersignal HOCH (HIGH) getrieben wird. Der andere Eingang
des 2:1-MUX ist über
einen Rückkopplungsweg
mit dem Ausgang des Registers gekoppelt, das demselben zugeordnet
ist. Bei dem Ausführungsbeispiel,
das in 5A gezeigt ist, bilden das Register 512A und
der zugeordnete 2:1-MUX 510A den ersten TRANSMIT-MUXREG-Block 508A,
der in dem zweiten Taktbereich angeordnet ist, wobei der 2:1-MUX 510A durch
das b0_sel_B gesteuert wird (erzeugt durch die Bustakt-Synchronisierer-Steuerung 122,
wie nachfolgend detaillierter beschrieben wird), das durch FF 504 als
b0_sel_ff 314 stufenweise verarbeitet wird. Auf ähnliche
Weise bilden das Register 512B und der zugeordnete 2:1- MUX 510B den
zweiten TRANSMIT-MUXREG-Block 508B, der in dem zweiten
Taktbereich angeordnet ist, wobei der 2:1-MUX 510B durch
das b1_sel_B gesteuert wird (ebenfalls erzeugt durch die Bustakt-Synchronisierer-Steuerung 122), das
durch das FF 506 als b1_sel_ff 316 stufenweise verarbeitet
wird. Jedes FF 504, 506 ist getaktet durch das
verteilte bus_clock, b 108'.
-
Die
Ausgangssignale der zwei TRANSMIT-MUXREG-Blöcke 508A, 508B,
d. h. b0_ff 514A bzw. b1_ff 514B, werden zu einem
RECEIVE-MUXREG-Block 516 an der Ausgangsseite der Synchronisiererschaltung 500 geliefert
(d. h. angeordnet in dem ersten Taktbereich), die einen 2:1-MUX 520 und
ein Register 518 umfaßt,
das durch das erste Taktsignal (d. h. das verteilte core_clock,
c 106')
getaktet wird. Die MUX-Steuerung
wird durch den core_sel_ff 312 geliefert, der durch die
Kerntakt-Synchronisierer-Steuerung 124 als core_sel erzeugt
und durch FF 524 stufenweise verarbeitet wird. Die Ausgangssignale
des RECEIVE-MUXREG-Blocks 516 (d. h. core_ff) sind die
k Bit breiten Daten, die in der Kerntaktbereichslogik als Kerndaten 522 empfangen
werden.
-
Es
wird wiederum darauf hingewiesen, daß bei einer tatsächlichen
Implementierung das Synchronisierer-Ausführungsbeispiel 500,
das in 5A gezeigt ist, mehrere Instanzen
der verschiedenen MUXREG-Blöcke
umfassen kann, um die Übertragung
aller k-Datensignale (der k Bit breiten Busdaten, k ≥ 1) von der
Bustaktbereichslogik zu der Kerntaktbereichslogik zu übertragen. 5B zeigt
ein Zeitgebungsdiagramm, das dem Bus-zu-Kern-Synchronisierer-Ausführungsbeispiel 500 zugeordnet
ist, das die zeitliche Beziehung der verschiedenen Steuersignale
zeigt, die demselben zugeordnet sind, und die Wirkung von unterschiedlichen
Versatztoleranzen und Latenzzeiten. Zwei Sequenzen von Busdaten 502,
[A, B, C, D] und [A2, B2, C2, D2] werden exemplarisch gezeigt, wobei
jeder Block k Bit breit ist und für einen bestimmten Taktzyklus
verfügbar
ist, 0 bis 3. Unterschiedliche Versatztoleranzen und Latenzzeitfaktoren
können programmiert
werden, durch Steuern, wann der RECEIVE-MUXREG-Block 516 von b0_ff 514A oder
b1_ff 514B lädt.
Im 5:4-Modus lädt der
RECEIVE-MUXREG-Block 516 z. B. fünf Mal, aber da nur vier Datenübertragungen
von dem Busbereich kommen können,
werden nur vier verwendet (der zusätzliche Zyklus, der einen unbenutzten
Datenabschnitt aufweist, ist markiert mit einem X in den Feldern 550A–550C).
Wie in 5B gezeigt ist, sind die Busdaten 502 in
den TRANSMIT-MUXREG-Blöcken gespeichert,
wo jeder abwechselnd lädt,
unter der Steuerung von b0_sel_ff 314 und b1_sel_ff 316, bei
jedem zweiten bus_clock. Ferner hält jeder TRANSMIT-MUXREG-Block die
Daten für
zwei Bustakte. Entsprechend ist der erste Datenblock [A] in TRANSMIT-MUXREG 512B gespeichert,
der zweite Datenblock [B] in TRANSMIT-MUXREG 512A, der dritte
Datenblock [C] in TRANSMIT-MUXREG 512B und schließlich der
vierte Datenblock [D] in TRANSMIT-MUXREG 512A. Das Ausgangssignal
der zwei TRANSMIT-MUXREG-Blöcke 512A und 512B weist daher
Datenabschnitte [B, D] als b0_ff 514A und [A, C] als b1_ff 514B auf.
-
In
Feld A 550A ist die Datenübertragung von der Busbereich-Schaltungsanordnung
zu der Kernbereich-Schaltungsanordnung gezeigt, wo eine Bedingung,
die eine Versatztoleranz von 0,25 und eine hinzugefügte Latenzzeit
von 0,625 umfaßt,
programmiert ist. Eine Versatztoleranz, die in diesem Fall in Kerntaktzyklen
gemessen wird, ist als die minimale Distanz zwischen einem Datenabtastwert
(d. h. core_ff) und einem sich ändernden
Dateneingangssignal (d. h. b0_ff oder b1_ff) definiert. Eine zusätzliche Latenzzeit
wird ebenfalls in Kerntaktzyklen gemessen, erhalten durch Mittelwertbildung
der Werte, die den vier Datenblöcken
zugeordnet sind (vom Start des Dateneingangssignals, d. h. b0_ff
oder b1_ff zu core_ff). Die tatsächliche
Latenzzeit wird bestimmt als ein bus_clock-Zyklus plus die hinzugefügte Latenzzeit,
die im 5:4-Modus in 1,25 core_clock-Zyklen plus der hinzugefügte Latenzzeit übersetzt
wird.
-
Wie
in Feld A 550A gezeigt ist, das die beste Latenzzeitbedingung
exemplarisch zeigt, jedoch mit der schlechtesten Versatztoleranz,
erzeugt die Kerntakt-Synchronisierer-Steuerung 124 das
Signal b2c_valid_ff 302 derart, daß keine gültige RX-Operation bei dem
Zyklus 0 des core_clock (d. h. des ersten Zyklus) vorliegt. Das
Ausgangssignal des RECEIVE-MUXREG 516, d. h. core_ff 522,
lädt zuerst
den Datenblock [A] aus b1_ff 514B, dann den Datenblock [B]
aus b0_ff 514A, dann den Datenblock [C] aus b1_ff 514B und
dann den Datenblock [C] wieder (bei Zyklus 0 der zweiten Sequenz
von core_clock, was der unbenutzte zusätzliche Zyklus ist, wodurch
der ungültige
C- oder XC-Datenblock hervorgerufen wird), und schließlich Datenblock
[D] aus b0_ff 514A. Da der gültige [C] Block aus b1_ff 514B in
core_ff 522 geladen wurde, 0,25 core_clock-Zyklen nachdem b1_ff 514B denselben
geladen hat, beträgt
die Versatztoleranz 0,25 core_clock-Zyklen.
-
Das
Feld B 550B aus 5B zeigt
exemplarisch den Programmierungsmodus mit der zweitbesten Latenzzeitbedingung
(hinzugefügte
Latenzzeit = 0,875), der die zweitbeste Versatztoleranz (= 0,5 core_clock-Zyklen)
aufweist. Unter diesen Bedingungen erzeugt die Kerntakt-Synchronisierer-Steuerung 124 b2c_valid_ff 302 derart,
daß es
LOW-(NIEDRIG-)getrieben wird, in dem fünften core_clock-Zyklus (d.
h. Zyklus 4). Das Ausgangssignal des RECEIVE-MUXREG 516,
d. h. core_ff 522, lädt
zuerst den Datenblock [A] aus b1_ff 514B, dann den Datenblock
[B] aus b0_ff 514A und wiederum den Datenblock [B], der
nicht verwendet wird (bei Zyklus 4 der ersten Sequenz von core_clock,
der der nicht verwendete zusätzliche
Zyklus ist, was somit den ungültigen
B- oder XB-Datenblock verursacht), dann den Datenblock [C] aus b1_ff 514B und
schließlich
den Datenblock [D] aus b0_ff 514A. Da der gültige [B] Block
in core_ff 522 aus b0_ff 514A geladen wurde, 0,5
core_clock-Zyklen nachdem er an b0_ff 514A aufgetreten
ist, beträgt
die Versatztoleranz 0,5 core_clock-Zyklen.
-
Der
Programmierungsmodus mit der schlechtesten Latenzzeit (= 1,125)
und der besten Versatztoleranz (= 0,75 der core_clock-Zyklen) ist
in Feld C 550C aus 5B gezeigt.
Die Kerntakt-Synchronisierer-Steuerung 124 erzeugt b2c_valid_ff 302 derart,
daß es
in dem vierten core_clock-Zyklus
(d. h. Zyklus 3) LOW-getrieben wird. Das Ausgangssignal des RECEIVE-MUXREG 516,
d. h. core_ff 522, lädt zuerst
den Datenblock [A] aus b1_ff 514B (in Zyklus 2 der ersten
Sequenz von core_clock), und wieder Datenblock [A], der nicht verwendet
wird (in Zyklus 3 der ersten Sequenz von core_clock, was der zusätzliche
nichtverwendete Zyklus ist, was somit den ungültigen A- oder XA-Datenblock
verursacht), und dann Datenblock [B] aus b0_ff 514A, und
dann Datenblock [C] aus b1_ff 514B, und schließlich Datenblock
[D] aus b0_ff 514A. Da der gültige [A] Block in core_ff 522 aus
b1_ff 514A geladen wurde, 0,75 core_clock-Zyklen, nachdem
er an b1_ff 514A aufgetreten ist, ist die Versatztoleranz
0,75 core_clock-Zyklen. Wie vorangehend herausgestellt wurde, ist
die hinzugefügte
Latenzzeit der Durchschnitt der Zeit (in core_clock-Zyklen) von
b0_ff oder b1_ff zu core_ff für alle
verwendeten Daten. Dementsprechend ist kein Latenzzeitwert in einem
Datenabschnitt mit einem X gezeigt.
-
Wie
aus der obigen Erörterung
ersichtlich ist, wird die Programmierbarkeit des Synchronisierersystems
beeinträchtigt
durch das Erzeugen verschiedener Synchronisierersteuersignale und Übertragungssteuersignale,
die durch die Kerntakt-Synchronisierer-Steuerung für unterschiedliche
Versatztoleranzen und Latenzzeitwerte konfigurierbar sind, wobei
die Kerntakt-Synchronisierer-Steuerung ihrerseits von Taktbeziehungs-Steuersignalen
abhängt,
die durch den Bustakt-Synchronisierer-Steuerungsabschnitt unter
anderen Signalen geliefert werden. Die kooperative Funktionalität beider
Synchronisierer-Steuerungsabschnitte wird nun direkt nachfolgend
detaillierter ausgeführt.
-
6 zeigt
ein Blockdiagramm eines Ausführungsbeispiels
eines Bustakt-Synchronisierer-Steuerungsabschnitts 600,
der als Synchronisierer-Steuerung 122 wirksam ist. Wie
dargestellt ist, werden verschiedene Funktionsblöcke, die unter Verwendung einer
Kombination einer Logikschaltungsanordnung implementiert sein können, als
Teil des Bustakt-Synchronisierer-Steuerungsabschnitts 600 bereitgestellt,
zum Erzeugen einer Anzahl von Taktbeziehungs-Steuersignalen, wobei
ein Teil derselben intern verwendet wird, um einen Satz von Busbereich-Synchronisierer-Steuersignalen
zu erzeugen, hin zu den Bus-zu-Kern- und Kern-zu-Bus-Synchronisierern.
Ein Sync-Zählerblock 602 ist
ansprechend auf das abgetastete SYNC wirksam, d. h. sync_B 120,
sowie das verteilte bus_clock, B 108' (in dieser Figur nicht gezeigt),
zum Erzeugen eines M-Bit breiten Signals, das eine Zählung von
SYNC-Pulsen anzeigt. Im allgemeinen gilt, M = log2 (N
+ 1), wobei N die Anzahl von Zyklen in dem langsamen Taktbereich ist.
Zum Beispiel, wenn ein Taktverhältnis
von [8:7] verwendet wird, gilt, M = log2 (7
+ 1) = 3, d. h. ein 3-Bit breites Signal wird erzeugt. Ein Verhältnisdetektorblock 604 wirkt
ansprechend auf das M-Bit breite Signal sowie das sync_B-Signal 120 und
b 108',
um das Verhältnis
der Takte zu bestimmen, die in dem Synchronisierersystem 100 verwendet
werden, und ein Taktbeziehungs-Steuersignal
zu erzeugen, bezeichnet als sync_ratio_B 614. Wie nachfolgend
gezeigt ist, werden dieses und andere Taktbeziehungs-Steuersignale
zu dem Kerntakt-Synchronisierer-Steuerungsabschnitt geliefert, zum
Bewirken der gesamten programmierbaren Steuerungsfunktionalität im Hinblick
auf das Synchronisierersystem 100.
-
Ein
Zykluserzeugerblock 606 ist wirksam, ansprechend auf das
sync_ratio_B-Signal 614, sowie das sync_B-Signal 120 und
b 108',
zum Erzeugen eines Zyklusinformationssignals 607, das einen
aktuellen Bustaktzyklus anzeigt. Ein Sequenzerzeugerblock 608 ist
bereitgestellt, zum Erzeugen eines anderen Zwischensteuerungs-Taktbeziehungs-Steuersignals,
sequence_B 616, ansprechend auf das sync_ratio_B-Signal 614 sowie
das sync_B-Signal 120 und b 108'. Fachleute auf dem Gebiet sollten
erkennen, daß die
Zyklusinforma tionen und sequence_B-Signale wirksam sind, um unterschiedliche
Bustakte in dem Synchronisierersystem 100 eindeutig zu
identifizieren. Ein Synchronisierungs-Verzögerungsblock 612 ist
verantwortlich für
das Erzeugen eines anderen Taktbeziehungs-Steuersignals, syncb0_B 618,
hin zu dem Kerntakt-Synchronisierer-Steuerungsabschnitt der Steuerungsanordnung.
-
Ein
Busbereich-Synchronisierer-Steuersignal-Erzeugerblock 610 ist
wirksam, ansprechend auf das Zyklusinformationssignal (das jeden
Bustaktzyklus numeriert), das sequence_B-Signal (das eine Sequenz von Bustakten
numeriert) und das Signal sync_ratio_B 614 zum Erzeugen
eines Satzes von Busbereich-Synchronisierer-Steuersignalen, nämlich der
Signale b0_sel_B und b1_sel_B hin zu dem Bus-zu-Kern-Synchronisierer 105B und
des Signals bus_sel_B hin zu dem Kern-zu-Bus-Synchronisierer 105A, die
funktionieren, wie in der vorangehenden Beschreibung beschrieben
ist. Der Busbereich-Synchronisierer-Steuersignal-Erzeugerblock 610 wirkt
im wesentlichen, um eine feste Struktur an diesen Steuersignalen
für jeden
unterschiedlichen Bustakt zu erzeugen (basierend auf dem Zyklus-,
dem Sequenz- und dem Taktverhältnis-Eingangssignal).
-
Wie
hierin vorangehend angemerkt wurde, können die Busbereich-Synchronisierer-Steuersignale,
b0_sel_B, b1_sel_B und bus_sel_B eines oder mehrere Male registriert
werden, aus Gründen
der Zeitgebung, bevor sie durch die jeweiligen Synchronisierer verwendet
werden als b0_sel_ff 314, b1_sel_ff 316 bzw. bus_sel_ff 318.
Dementsprechend können
die Originalsignale und ihre registrierten Gegenstücke als
Entsprechungen behandelt werden, zu Zwecken der allgemeinen Operation
der Steuerungsanordnung. Wenn die Steuersignale schließlich verwendet
werden, ist b0_sel_ff 314 „0" bei Zyklus 0, Sequenz 0 und alterniert
zu „1", dann zu „0" usw. Die Signale
b1_sel_ff 316 und bus_sel_ff 318 sind die Umkehrungen
von b0_sel_ff (d. h. „1" bei Zyklus 0, Sequenz
0, usw.), wie in 3 gezeigt ist. Diese Synchronisierer- Steuersignale ändern sich nicht
für unterschiedliche
Taktverhältnisse
oder Modi.
-
Bezug
nehmend nun auf 7 ist hier ein Blockdiagramm
eines Ausführungsbeispiels
eines Kerntakt-Synchronisierer-Steuerungsabschnitts 700 gezeigt,
wirksam als eine Synchronisierersteuerung 124 des programmierbaren
Synchronisierersystems 100, das oben ausgeführt ist.
Verschiedene Funktionsblöcke
sind dargestellt zum prägnanten
Erfassen der Gesamtfunktionalität
des Kerntakt-Synchronisierer-Steuerungsabschnitts 700,
der im wesentlichen wirksam ist, um einen Satz von Kernbereich-Synchronisierer-Steuersignalen
hin zu den jeweiligen Synchronisierern 105A, 105B zu
erzeugen, ansprechend auf den abgetasteten Sync-Puls 118,
die Zwischensteuerungs-Taktbeziehungs-Steuersignale 614, 616, 618 und
Konfigurationsinformationen, die über die SYNC-Konfigurationsschnittstelle 126 geliefert
werden. Wie in 7 dargestellt ist, sind die
Konfigurationsinformationen als ein sync_config-Signal veranschaulicht,
das zu verschiedenen Funktionsblöcken
des Kerntakt-Synchronisierer-Steuerungsabschnitt 700 geliefert
wird, die zusätzliche
interne Signale zum Bewirken der Synchronisierer-Steuerungsfunktionalität liefern.
Wiederum, wie bei den Funktionsblöcken der Bustakt-Synchronisierer-Steuerung, können die
verschiedenen Funktionsblöcke
des Kerntakt-Synchronisierer-Steuerungsabschnitts 700 ferner
unter Verwendung einer Kombination einer Logikschaltungsanordnung
implementiert sein.
-
Ein
Sync-Verhältnis-Abtastblock 702 empfängt das
M-Bit breite sync_ratio_B 614 von dem Bustakt-Synchronisierer-Steuerungsabschnitt 600, um
ein sync_ratio-Signal zu erzeugen, das in dem Kerntaktbereich abgetastet
wird, unter Verwendung des verteilten Kerntakts c 106'. 8B zeigt
ein exemplarisches Ausführungsbeispiel
des Sync-Verhältnis-Abtastblocks (Sync
Ratio Sampling Block) 702. Auf ähnliche Weise werden die anderen
zwei Taktbeziehungs-Steuersignale, die durch den Bustakt-Synchronisierer-Steuerungsabschnitt bereitgestellt
werden, abgetastet, bevor sie intern verwendet werden. Ein Sequenzabtastblock 704 wirkt
ansprechend auf sequence_B 616, um die Signale sequence_cr
(Abtasten an der ansteigenden Flanke des c-Takts) und sequence_cf
(Abtasten an der abfallenden Flanke des c-Takts) zu erzeugen, die
durch einen Präzisionssequenz-Detektorblock 706 verwendet
werden. Ein syncb0_B-Abtastblock 708 arbeitet ansprechend auf
syncb0_B 618, um die Signale syncb0_dr und syncb0_cf zu
erzeugen. 8C bzw. 8D zeigen die
Ausführungsbeispiele
des Sequenzabtastblocks 704 und des syncb0_B-Abtastblocks 708.
-
Der
Sync-Puls (bzw. Synchronisierungspuls) 118, der durch die
SYNC-Abtastlogik 116 bereitgestellt wird, wird durch einen
Sync-Puls-Erfassungsblock 710 erfaßt, um ein internes Sync-Signal
zu erzeugen, sync_redge. 8E zeigt
ein Ausführungsbeispiel
des Sync-Puls-Erfassungsblocks 710 zum Erfassen einer „010"-Sequenz an dem Sync-Puls,
die einen zuverlässigen
Sync-Puls anzeigt (ansonsten könnte
zuviel Taktversatz vorliegen).
-
Ein
Stabilzustand-Detektorblock 712 ist wirksam, um ein mehrere
Bit breites internes Signal zu erzeugen, stable_state, um anzuzeigen,
wenn die Versatzzustandsbeziehung zwischen den zwei Taktsignalen
stabilisiert wurde. Ferner wird ein externes Signal erzeugt, synchronizer_stable-Signal, um den Synchronisierern
anzuzeigen, daß ein
stabiler Zustand zwischen denselben existiert. Ein Zyklus- und Sequenz-Erzeugerblock 714 ist
wirksam, ansprechend auf verschiedene interne Steuersignale, zum Erzeugen
geeigneter Zyklus- und Sequenz-Signale, die für den Kerntaktbereich gültig sind,
die unterschiedliche Kerntaktzyklen eindeutig identifizieren. Ein
Versatzzustandsdetektor 716 wird bereitgestellt, zum Erzeugen
eines Versatzzustands-Steuersignals, eines Phasenerfassungssignals
(pd_z), und eines sync_locked-Signals, die zu verschiedenen Funktionsblöcken geliefert
werden, die oben zum Erzeugen anderer interner Steuersignale beschrieben
wurden.
-
Ein
Kernbereich-Synchronisierer-Steuersignalerzeuger 718 ist
wirksam, ansprechend auf das skew_state-Steuersignal (anzeigend
für eine
aktuelle Versatzbeziehung zwischen dem Bustakt- und Kerntakt-Signal),
auf Konfigurationsinformationen (über das Signal sync_config),
und die internen Steuersignale, d. h. Takt- und Sequenz-Signale
und das abgetastete Signal sync_ratio (anzeigend für das Taktverhältnis, z.
B. 5:4 oder 4:3 oder 1:1 etc.), zum Erzeugen eines Satzes von Kernbereich-Synchronisierer-Steuersignalen
hin zu den jeweiligen Synchronisierern 105A, 105B.
Wie hierin vorangehend im Hinblick auf die 5:4-Verhältnisimplementierung
erklärt wurde,
weisen diese Signale c0_sel, c1_sel (beide geliefert zu dem Kern-zu-Bus-Synchronisierer)
und core_sel (geliefert zu dem Bus-zu-Kern-Synchronisierer) auf. Ferner wird
ebenfalls ein Satz von Übertragungssteuersignalen,
Signale b2c_valid, c2b_valid, und Vorauswarnsignalen, d. h. c2b_valid_m-Signale, durch den
Kernbereich-Synchronisierer-Steuersignal-Erzeugerblock 718 zu
der Kerntaktbereich-Logikschaltungsanordnung 103A geliefert.
Wie bei den Steuersignalen, die durch den Bustakt-Synchronisierer-Steuerungsabschnitt
erzeugt werden, können
diese verschiedenen Signale ebenfalls für Zeitgebungszwecke registriert
werden. Dementsprechend können
die Steuersignale aus dem Kerntakt-Synchronisierer-Steuerungsabschnitt als
ihre registrierten Entsprechungen bezeichnet werden, die die Bezeichnung „_ff" aufweisen.
-
Wie
vorangehend herausgestellt wurde, zeigt das Signal sync_config,
das zu dem Kernbereich-Synchronisierer-Steuersignal-Erzeugerblock 718 geliefert
wird, demselben an, welche Versatztoleranz und Latenzzeitwert verwendet
werden sollen. Basierend darauf können die verschiedenen Kernbereich-Synchronisierer-Steuersignale
und die Übertragungs-Steuersignale
für unterschiedliche
Latenzzeiten und Versatztoleranzen programmiert werden. Die Wirkung
des Programmierens unterschiedlicher Werte wird nachfolgend beschrieben,
in Verbindung mit den Zeitgebungsdiagrammen (gezeigt in 3, 4B und 5B),
die oben beschrieben wurden.
-
Unter
besonderer Bezugnahme auf 5B ist
in derselben gezeigt, wie die Signale core_sel_ff 312 und
b2c_valid_ff 302 für
unterschiedliche Latenzzeiten und Versatztoleranzen programmiert
werden können.
Wie vorangehend beschrieben wurde, können b0_sel_B und b1_sel_B
(erzeugt durch den Bustakt-Synchronisierer-Steuerungsabschnitt 600 und
die eines oder mehrere Male registriert sein können) eine feste und bekannte
Struktur aufweisen. Dementsprechend werden die Signale core_sel_ff 312 und
b2c_valid_ff 302 für
unterschiedliche Bedingungen verändert
(wobei berücksichtigt wird,
daß b2c_valid_ff
dasselbe ist wie b2c_valid, registriert für Zeitgebungszwecke).
-
In
dem Feld 550A, das den Zustand der niedrigsten Versatztoleranz
(0,25 Kerntaktzykluen) und der niedrigsten Latenzzeit (0,625 hinzugefügte Kerntaktzyklen)
veranschaulicht, ist core_sel_ff 312 programmiert, um b1_ff 514B derart
abzutasten, daß ein Datenabschnitt
A in core_ff 522 bei Zyklus 2 registriert wird, b0_ff 514A wird
als nächstes
abgetastet und der Datenabschnitt B wird in core_ff 522 bei
Zyklus 3 registriert, der Datenabschnitt C bei Zyklus 4, der Datenabschnitt
C wiederum bei Zyklus 0 (aber nicht verwendet, aufgrund der XC-Anmerkung),
und der Datenabschnitt D bei Zyklus 1 (nächste Sequenz). Das Übertragungs-Steuersignal b2c_valid_ff 302 ist
derart programmiert, daß die
Kerntaktbereichslogik den zusätzlichen
Datenabschnitt C (d. h. XC-Block) bei Zyklus 0 nicht verwendet.
-
Die
mittlere Versatztoleranz (0,5 Kerntaktzyklen) und Latenzzeit (0,875
hinzugefügte
Kerntaktzyklen), gezeigt in Feld 550B, wird erreicht durch
Programmieren von core_sel_ff 312, um einen Datenabschnitt
A bei Zyklus 2 zu erfassen, einen Datenabschnitt B bei Zyklus 3,
zusätzliche
Daten B wiederum bei Zyklus 4, einen Datenabschnitt C bei Zyklus
0 (Beginn der nachfolgenden Sequenz), und einen Datenabschnitt D
bei Zyklus 1. Das Übertragungs-Steuersignal
b2c_valid_ff 302 ist derart programmiert, daß die Kerntaktbereichslogik
den zusätzlichen
Datenabschnitt B (d. h. XB-Block) in Zyklus 4 nicht verwendet.
-
Die
höchste
Versatztoleranz (0,75 Kerntaktzyklen) und Latenzzeit (1,125 hinzugefügte Kerntaktzyklen),
die in Feld 550C aus 5B gezeigt
sind, wird erreicht durch Programmieren von core_sel_ff 312,
um einen Datenabschnitt A bei Zyklus 2, zusätzliche Daten A wiederum bei
Zyklus 3, Daten B bei Zyklus 4, einen Datenabschnitt C bei Zyklus
0 (Beginn der nachfolgenden Sequenz) und einen Datenabschnitt D
bei Zyklus 1 zu erfassen. Das Übertragungs-Steuersignal b2c_valid_ff 302 ist
derart programmiert, daß die
Kerntaktbereichslogik den zusätzlichen
Datenabschnitt A (d. h. XA-Block)
bei Zyklus 3 nicht verwendet.
-
Jede
der obigen drei unterschiedlichen Versatztoleranzen und Latenzzeiteinstellungen
werden erreicht durch Verwenden von drei unterschiedlichen Werten
des Signals sync_config, das über
die SYNC-Konfigurationsschnittstelle 126 (gezeigt in 1)
geliefert wird. Eine unterschiedliche Struktur kann für andere
Taktverhältnisse
erzeugt werden (wie durch das Signal sync_ratio angezeigt), wie
ein Fachmann auf dem Gebiet erkennen sollte.
-
Bezug
nehmend nun auf 4B ist hierin gezeigt, wie die
Signale c0_sel_ff 308, c1_sel_ff 310 und c2b_valid_ff 304 für unterschiedliche
Latenzzeiten und Versatztoleranzen programmiert werden können. Wie
vorangehend beschrieben wurde, zeigt c2b_valid_ff 304 der
Kerntaktbereich-Logikschaltungsanordnung
an, keine Daten zu übertragen.
Es sollte wiederum berücksichtigt
werden, daß c2b_valid_ff
dasselbe ist wie c2b_valid, das zu Zeitgebungszwecken registriert
ist. Die Vorwarnsignale, c2b_valid_m_ff[1:4] 306A–306B (gezeigt
in 3) stellen das Signal c2b_valid dar, das vorteilhaft
einen, zwei, drei oder mehr Zyklen zu früh gesendet wird, für eine Verhaltensoptimierung
bei der Kerntaktbereich-Logikschaltungsanordnung.
-
Da
alle Kernbereich-Synchronisierer-Steuersignale und die Übertragungs-Steuersignale
aus Zyklus- und Sequenz-Signalen decodiert werden (durch den Synchronisierer-Steuererzeuger-Block 718,
der in 7 gezeigt ist), um Signale verfrüht zu erzeugen,
wird einfach aus einem früheren
Zyklus und/oder einer Sequenz decodiert. Es sollte ferner darauf
hingewiesen werden, daß niedrige,
mittlere und hohe Versatztoleranzen für alle [N + 1:N]-Verhältnisse
programmiert werden können.
Wenn ein Taktverhältnis
von 1:1 anwendbar ist, können
eine normale Latenzzeit (1 Takt hinzugefügte Latenzzeit) und eine niedrige
Latenzzeit (0,5 Takte hinzugefügt, wenn
die Bus- und Kern-Takte umgekehrt sind) programmiert werden.
-
9 zeigt
ein Flußdiagramm
der verschiedenen Operationen eines Ausführungsbeispiels eines Synchronisierer-Steuerungsverfahrens
der vorliegenden Erfindung. Wie in Block 902 ausgeführt ist, bestimmt
der Bustakt-Synchronisierer-Steuerungsabschnitt
zuerst anwendbare Synchronisierungsverhältnis-, Zyklus- und Sequenz-Informationen
für ein gegebenes
Taktverhältnis,
basierend auf dem abgetasteten Synchronisierungspuls. Diese Informationen werden
verwendet, um Busbereich-Synchronisierer-Steuersignale zu erzeugen.
Ferner werden die Synchronisierungsverhältnis-, Zyklus-/Sequenz-Informationen
und Synchronisierungsverzögerungsinformation
als Zwischensteuerungs-Taktbeziehungs-Steuersignale zu dem Kerntakt-Synchronisierer-Steuerungsabschnitt
geliefert (Block 904). Ansprechend darauf und auf den Synchronisierungspuls
werden Zyklus- und Sequenz-Informationen des Kerntaktbereichs durch
die Kerntakt-Synchronisierer-Steuerung erzeugt (Block 906).
Basierend auf einer Versatzzustandsbestimmung werden Zyklus- und Sequenz-Informationen,
Synchronisierungsverhältnis-Informationen
und Synchronisierungs-Konfigurations-Informationen, Synchronisierer-Steuersignale sowie Übertragungs-Steuersignale
erzeugt, zum Steuern der Datenübertragungsoperationen über Bus-zu-Kern-
und Kern-zu-Bus-Synchronisiererabschnitte (Block 908).
-
Basierend
auf der vorangehenden detaillierten Beschreibung sollte darauf hingewiesen
werden, daß das
Steuerungsanordndungs-Ausführungsbeispiel,
das hierin ausgeführt
wurde, für
unterschiedliche Latenzzeiten und Versatztoleranzen programmiert
sein kann, zum Übertragen
von Daten über
eine Taktgrenze zwischen beliebigen zwei Taktbereichen, die ein
bekanntes N:M-Verhältnis
aufweisen (z. B., M = N – 1).
Entsprechend, wenn die PLL- oder Takt-Verteilung, die bei einem
Synchronisierersystem verwendet wird, mehr Versatz aufweist als
vorhergesehen, kann die Versatztoleranz erhöht werden (mit dem Kompromiß einer
größeren Latenzzeit),
ohne eine unterschiedliche Steuerung entwerfen zu müssen.