-
TECHNISCHES GEBIET DER ERFINDUNG
-
Das
technische Gebiet dieser Erfindung sind die Funktionsblöcke digitaler
Vorrichtungen, die im Allgemeinen auf dem Gebiet der Mikroprozessor-Konstruktion
und genauer auf dem Gebiet digitaler Signalprozessorvorrichtungen
verwendet werden.
-
HINTERGRUND DER ERFINDUNG
-
Ein Übertragungs-Controller
mit Hub und Ports ist eine signifikante grundlegende Verbesserung
der Datenübertragungstechniken
in komplexen digitalen Systemen. Dieser Übertragungs-Controller erlaubt
die einheitliche Implementierung der Port-Schnittstellen an der
Peripherie derartiger Systeme. Einige dieser Ports können langsam
sein, wobei sie einen relativ niedrigen Datendurchsatz besitzen.
Andere können
relativ schnell sein, wobei sie den Durchsatz und die Geschwindigkeit
der Zentraleinheit besitzen. Diese zwei Abschnitte der Vorrichtung
werden oft durch zwei separate Taktsignale angesteuert. Das erste
Taktsignal besitzt eine höhere Frequenz
und wird als der Kern- oder Hauptprozessortakt bezeichnet. Das zweite
Taktsignal wird als der Peripherievorrichtungstakt bezeichnet.
-
Die
Synchronisation in der Schnittstelle zu den externen Ports ist erforderlich,
um eine Hochgeschwindigkeits-Kernvorrichtung an eine relativ langsame
Peripherievorrichtung anzuschließen. Der typische bekannte
Stand der Technik für
das Synchronisieren von Anforderungen, Daten oder irgendeiner Mehrbitgröße besteht
darin, die Informationen in ein Register zu schreiben und dann ein
einzelnes Signal in der anderen Domäne zu synchronisieren, um anzugeben,
dass die Daten gültig
und stabil sind. Dann können
die Daten in der anderen Taktdomäne
gelesen werden. Es ist nicht erwünscht,
alle Bits der Daten einzeln zu synchronisieren. Dies kann dazu führen, dass
die Daten verfälscht
werden. Falls die Daten an dem Punkt, an dem die Synchronisierer
die Daten abtasten, in die Synchronisierer eingespeist werden, können einige
der Daten in diesem Zyklus abgetastet werden, während einige Daten einen Zyklus
später
abgetastet werden können.
Wenn irgendeine verallgemeinerte Taktfrequenzbeziehung erlaubt ist,
ist es außerdem
notwendig, in beiden Richtungen zu synchronisieren.
-
US-Patent Nr. 4.525.849 beschreibt
eine Anordnung, die verwendet werden kann, um eindeutige logische
Schaltzustände
in einem Daten- und Steuerweg bei der Übertragung vom Taktsystem eines
ausgebenden Datenverarbeitungssystems in ein unabhängiges asynchrones
Taktsystem eines annehmenden Datenverarbeitungssystems zu vermeiden,
worin ein kontinuierlicher Datenfluss am Ausgang eines Pufferspeichers
zu garantieren ist. Ein Steuersignal, das das Vorhandensein eines
zwischengespeicherten Datenwortes angibt, wird über eine Synchronisationsschaltung
zum Weiterleiten von Datenwörtern aus
dem Pufferspeicher in ein Weiterleitungs-Taktungsmuster des annehmenden
Systems synchronisiert. Ein Weiterleitungs-Synchronisationssteuersignal
wird durch die Synchronisationsschaltung erzeugt. Zum Steuern des
Zuflusses in den Pufferspeicher wird ein Steuersignal, das vom Weiterleitungs-Taktungsmuster
des annehmenden Systems abhängig
ist, über
eine weitere Synchronisationsschaltung in das Taktungsmuster des
ausgebenden Systems synchronisiert.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Die
vorliegenden Lehren offenbaren eine Datensynchronvorrichtung für die Synchronisation
zwischen einer ersten Taktdomäne
und einer zweiten Taktdomäne,
die zur ersten Taktdomäne
asynchron ist. Die hierin offenbarten Lehren sind im Allgemeinen auf
jede digitale Vorrichtung anwendbar, die in separaten Abschnitten
der Vorrichtung zwei Takte verwendet. Sie sind besonders nützlich für die Datenübertragungen
zwischen einer relativ hohen Geschwindigkeit und einer relativ niedrigen
Geschwindigkeit. Normalerweise ist der Hochgeschwindigkeitsabschnitt der
Prozessorkern, während
der Abschnitt mit der relativ niedrigen Geschwindigkeit die Eingabe-/Ausgabevorrichtungen
(E/A-Vorrichtungen) sind.
-
Es
wird eine Datenübertragungsvorrichtung geschaffen,
wie sie in den Ansprüchen
dargelegt ist.
-
KURZBESCHREIBUNG DER ZEICHNUNG
-
Diese
und andere Aspekte dieser Erfindung sind in der Zeichnung veranschaulicht,
worin:
-
1 einen
Blockschaltplan der grundlegenden Hauptmerkmale eines Übertragungs-Controllers mit
einer Hub- und Ports-Architektur veranschaulicht, für den diese
Erfindung nützlich
ist;
-
2 die
Grundverbindungen der Hub-Schnittstellen-Einheit mit dem Synchronisierer und
der Anwendungseinheit an einem der Ports veranschaulicht;
-
3 die
Verbindung der funktionalen Systembausteine einer Stufe des bidirektionalen
Synchronisierers dieser Erfindung veranschaulicht;
-
4 das
logische Schaltbild auf Gatter-Ebene des Synchronisierer-Logikblocks
nach 3 veranschaulicht;
-
5 das
logische Schaltbild auf Gatter-Ebene des asynchronen Flankendetektorblocks nach 3 veranschaulicht;
-
6 den
funktionalen Blockschaltplan des mehrstufigen Pipeline-Synchronisierers
dieser Erfindung veranschaulicht, wobei sie die bidirektionalen Synchronisiererstufen,
die FIFO-Datenwegregister, die Zeiger-/Decodierlogik und den Fluss
der Takt- und Steuersignale in dem mehrstufigen Pipeline-Synchronisierer
zeigt;
-
7 den
Ablaufplan des Prinzips des mehrstufigen Pipeline-Synchronisierers
dieser Erfindung veranschaulicht, wobei die Betonung zuerst auf
dem Schreibzyklus liegt, der für
ein synchronisiertes Lesen nach einer abgeschlossenen Schreiboperation sorgt;
und
-
8 einen
Ablaufplan des mehrstufigen Pipeline-Synchronisierers dieser Erfindung
veranschaulicht, wobei die Betonung zuerst auf dem Lesezyklus liegt,
der für
ein synchronisiertes Schreiben nach einer abgeschlossenen Leseoperation
sorgt.
-
AUSFÜHRLICHE BESCHREIBUNG DER BEVORZUGTEN
AUSFÜHRUNGSFORMEN
-
Diese
Erfindung präsentiert
Techniken, die erlauben, dass die folgenden Signale zwischen einem Übertragungs-Controller-Hub
und seinen externen Ports weitergeleitet werden: Anforderungen/Schreibdaten,
die vom Hub zu den Ports gesendet werden; und Lesedaten, die von
den Ports zum Hub gesendet werden. In jedem Fall ist eine Lösung, die
eine völlig
beliebige Frequenzbeziehung zwischen dem Hub-Takt und dem Port-Takt
erlaubt, unerlässlich.
Im normalen Betrieb gibt es normalerweise wenigstens eine irgendwie
eingeschränkte
Frequenzbeziehung zwischen diesen zwei Takten. Die Erfindung sorgt
jedoch für
die Mög lichkeit,
dass einige Anwendungen wünschen,
einen Port potentiell um irgendeinen Betrag zu verlangsamen. Außerdem wird
eine Emulation in der Schaltung, während der der Hub bei einer
sehr niedrigen Frequenz arbeiten kann, während er mit den Ports verbunden
ist, die bei der normalen Geschwindigkeit arbeiten, vorweggenommen.
-
Unter
Anwendung der Konstruktionsphilosophie, die für die Entwicklung des Übertragungs-Controllers
mit der Hub- und Ports-Architektur üblich ist, ist es die Absicht
dieser Erfindung, sicherzustellen, dass die Hub-Bandbreite niemals
verschwendet wird. Infolgedessen ist es wichtig, zu erlauben, dass
die Anforderungswarteschlange in einem Port mit der maximal möglichen
Hub-Rate gefüllt
wird, selbst wenn sie durch den Port nur viel langsamer geleert werden
könnte.
In dieser Weise wird ein anfänglicher Burst
von Anforderungen, der am Anfang des Prozesses erzeugt wird, erwartet,
anschließend
gefolgt von der Anforderungserzeugung mit der Rate, mit der der
Port normalerweise die Anforderungen verarbeitet. Dies stellt sicher,
dass die Hub-Bandbreite für
andere Anforderungen mit niedriger Priorität so früh wie möglich in einer Betriebsperiode
verfügbar
gemacht wird. Das wichtige Ergebnis ist, dass der Hub die Anforderungen
mit der Rate von einer pro Zyklus erzeugt, wobei er Synchronisierer
besitzt, die sie in die Ports übertragen,
die den Bedarf an der Rundfunksendung dieser Lese-/Schreibbefehle
mit einer annehmbaren Rate angemessen decken können.
-
1 veranschaulicht
einen Blockschaltplan der Hauptmerkmale des Übertragungs-Controllers mit
Hub und Ports. Die Übertragungs-Controller
mit Hub und Ports ist im Wesentlichen ein Datenübertragungs-Controller, der
an seinem Font-End-Abschnitt einen
Anforderungswarteschlangen-Manager 100 besitzt, der die
Daten in der Form von Übertragungsanforderungspaketen
empfängt,
priorisiert und abfertigt. Der Anforderungswarteschlangen-Manager 100 ist
in der Hub-Einheit 110 mit
den Kanalregistern 120 verbunden, die die Datenübertragungs-Anforderungspakete
empfangen, und verarbeitet sie, indem er sie zuerst priorisiert
und sie einem der N Kanäle zuordnet,
von denen jeder ein Prioritätsniveau
darstellt. Diese Kanalregister sind an die Quellsteuerpipeline 130 und
die Zielsteuerpipeline 140 angeschlossen, die effektiv
die Adressenberechnungseinheiten für die Quell-(Lese-) und Zieloperationen (Schreiboperationen)
sind.
-
Die
Ausgaben aus diesen Pipelines werden zu den M Ports gesendet. In 1 sind
sechs derartige Ports 150 bis 155 veranschaulicht.
Diese werden entweder mit der Hauptprozessor-Taktfrequenz oder mit
einer niedrigeren Taktfrequenz der externen Vorrichtungen getaktet.
Die Lesedaten von einem Port, z. B. dem Port 150, die eine
Zielschreibadresse des Ports 153 besitzen, werden über die
Weiterleitungseinheit 160 zur Hub-Zielsteuerpipeline 140 zurückgeschickt.
-
Jeder
Port kann in zwei Abschnitte unterteilt sein. Die anwendungsspezifische
Konstruktion wird als die Anwendungseinheit oder AU bezeichnet.
Dies kann eine Host-Port-Schnittstelle (HPI) oder eine Schnittstelle
zum externen Speicher (EMIF) sein. Zwischen der Anwendungseinheit
und dem Hub befindet sich das Modul, das als eine Hub-Schnittstellen-Einheit
oder HIU bekannt ist.
-
Die
Hub-Schnittstellen-Einheit dient mehreren Funktionen. Die Hub-Schnittstellen-Einheit
richtet einen Betrag der Pufferung für die Lese- und Schreibdaten
ein, um die Schreibansteuerungsverarbeitung zu unterstützen. Die
Hub-Schnittstellen-Einheit priorisiert die Lese- und Schreibbefehle
von der Quellsteuerpipeline 130 und der Zielsteuerpipeline 140 des Übertragungs-Controllers
so, dass der Port eine einzige Schnittstelle sieht, wobei beide
Zugriffstypen vereinigt sind. Eine letzte Funktion der Hub-Schnittstellen-Einheit
besteht darin, die Taktdomäne
der externen Port-Schnittstelle von der Kernprozessor-Taktdomäne zu entkoppeln.
-
2 veranschaulicht
einen Blockschaltplan auf hoher Ebene einer Hub-Schnittstellen-Einheit mit den Synchronisierern 200,
die die Zeiger 625 und 635 und die FIFO-Registerstufen 601 bis 605 enthalten,
und ihre Schnittstelle zu einer Anwendungseinheit 208.
Die Kern-Funktionsblöcke
der Hub-Schnittstellen-Einheit
enthalten die Steuerlogik 207 der Hub-Schnittstellen-Einheit,
die Lesewarteschlange 205 der Hub-Schnittstellen-Einheit,
Schreibanforderungswarteschlange 206 der Hub-Schnittstellen-Einheit
und die Leseantwortwarteschlange 203 der Hub-Schnittstellen-Einheit.
Die Eingaben 649 der Quellsteuerpipeline und die Eingaben 659 der
Zielsteuerpipeline werden von der Hub-Einheit 110 zur Lesewarteschlange 205 bzw.
zur Schreibanforderungswarteschlange 206 der Hub-Schnittstellen-Einheit
gesendet. Die Steuerlogik 207 der Hub-Schnittstellen-Einheit verarbeitet
diese Wörter,
die Befehle, Adressen und Schreibdaten enthalten. Die Hub-Schnittstellen-Einheit
erzeugt die Befehlsignale, wie z. B. das Schreibanforderungssignal 321,
die an die Synchronisierer 202 gesendet werden. Die Hub-Schnittstellen-Einheit
erzeugt außerdem
die Zustandsignale, wie z. B. ein Nicht-leer-Signal 332,
die zusammen mit den Schreibdaten 660 zur Anwendungseinheit
gesendet werden. Für
die Leseoperationen leitet die Anwendungseinheit ihre Lesedaten 690 zur
Hub-Schnittstellen-Einheit weiter.
-
Diese
Kern-Funktionsblöcke
der Hub-Schnittstellen-Einheit leiten die Schreibdaten 650,
die von der Zielsteuerpipeline 140 kommen, durch die FIFO-Registerstufen 601 bis 605 der Hub-Schnittstellen-Einheit
zu den Schreibdaten 660 und von dort zur Anwendungseinheit 208. Ähnlich werden
die von der Anwendungseinheit 208 zurückkehrenden Lesedaten 680 durch
die FIFO-Registerstufen 601 bis 605 der Hub-Schnittstellen-Einheit
als die Lesedaten 690 zur Leseantwortwarteschlange 203 der
Hub-Schnittstellen-Einheit geleitet. Sie werden dann als die Lesedaten
zur Weiterleitungseinheit 679 geleitet. Es wird angegeben,
dass zwei Instantiierungen der in 6 veranschaulichten
Logik (die im Folgenden beschrieben ist) in den FIFO-Registerstufen 601 bis 605 nach 2 enthalten
sind. Die Erste überträgt die Daten
von der Hub-Schnittstellen-Einheit als die Schreibdaten 650 und
die Schreibdaten 660 zur Anwendungseinheit. Die Zweite überträgt die Daten
von der Anwendungseinheit als die Lesedaten 690 und die
Lesedaten 680 zurück
zur Hub-Schnittstellen-Einheit.
-
In
der bevorzugten Ausführungsform
dieser Erfindung arbeitet die Hub-Schnittstellen-Einheit in einer Taktdomäne A, dem
Hauptprozessortakt. Die Anwendungseinheit arbeitet in einer Taktdomäne B, dem
Anwendungseinheitstakt. Der Takt A besitzt normalerweise eine höhere Frequenz
als der Takt B, dies ist aber nicht notwendigerweise der Fall. In
jedem Fall erfordert der richtige Betrieb dieser zwei Funktionseinheiten
in zwei separaten Taktdomänen die
Synchronisierer/Zeiger-FIFO-Register 202. Diese Synchronisation
ist der Gegenstand dieser Erfindung.
-
Hinsichtlich
der Synchronisationsverzögerung
wird das Folgende betrachtet. Es wird angegeben, dass ein Signal
in der Taktdomäne
A in der Taktdomäne
B synchronisiert werden kann, indem es durch zwei Flipflops in der
Domäne
B geleitet wird. Dies wird später
unter Bezugnahme auf 4 weiter erklärt. In Abhängigkeit
von der Phasenbeziehung zwischen den zwei Domänen dauert es zwischen einem
Bruchteil, der größer als
ein B-Taktzyklus ist, und einem Bruch teil, der kleiner als zwei
B-Taktzyklen ist, bis das Signal der Domäne A in der Domäne B erkannt
wird. Außerdem
muss das Signal der Domäne
A die Ausgabe eines Flipflops der Domäne A sein. Wenn es statt dessen
die Ausgabe der Kombinationslogik wäre, könnten die Übergangszustände des
Signals, wie es ausgewertet worden ist, in die Domäne B abgetastet
und als der gültige
Zustand des Signals interpretiert werden. Das Signal der Domäne A muss
lang genug gültig
sein, um sicherzustellen, dass es durch eine Taktflanke der Domäne B eingefangen
wird. Folglich sind typischerweise drei Flipflops und im schlimmsten
Fall ein A-Taktzyklus plus zwei B-Taktzyklen erforderlich, um das
Signal zwischen den Domänen
weiterzuleiten. Es wird angenommen, dass diese erforderliche Zeit
als T bezeichnet wird. Wenn das Intervall zwischen den Ereignissen
in der Domäne
A, die synchronisiert werden, ein wenig größer als T ist, dann könnte ein
generischer FIFO mit einfachen Eingang-bereit- und Ausgang-bereit-Steuerungen
verwendet werden.
-
Eine
allgemeinere Lösung
ohne Einschränkungen
an T ist durch diese Erfindung durch die Verwendung eines zirkulären FIFO
verwirklicht. Die elementaren Operationen der Synchronisiereraufgabe können zuerst
wie folgt dargelegt werden. Die Domäne A gibt der Domäne B an,
dass sie Daten besitzt, die bereit für die Übertragung sind. Die Domäne B antwortet
der Domäne
A, wenn sie die Daten empfangen hat, so dass die Domäne A zusätzliche
Daten senden kann.
-
3 zeigt
diese Anordnung für
eine Stufe eines derartigen bidirektionalen Synchronisierers, der
dazu dient, der begleitenden FIFO-Stufe einen synchronisierten Takt
und eine synchronisierte Steuerung bereitzustellen. Jede Stufe des
bidirektionalen Synchronisierers wird durch eine FIFO-Stufe begleitet,
wie später
gezeigt wird. In 3 enthält der untere Abschnitt der
Figur die Domäne
A. Der Schreibtakt 320 der Domäne A arbeitet, um die Daten
in den Eingang der begleitenden FIFO-Stufe zu schreiben. Der obere
Abschnitt der 3 enthält die Domäne B. Der Lesetakt 330 der
Domäne
B arbeitet, um die Daten vom Ausgang der begleitenden FIFO-Stufe
zu lesen.
-
Das
Schreibfreigabesignal 624 wird aktiv, um ein Schreiben
in die FIFO-Registerstufen 601 bis 605 des Synchronisierer-Datenwegs
anzufordern. Falls das Schreibvollbitsignal 626 aktiv wird,
wird diese Schreibanforderung abgelehnt. Der FIFO ist voll, was eine
sofortige Schreiboperation verhindert.
-
Ähnlich wird
das Lesefreigabesignal 634 aktiv, um ein Lesen aus den
FIFO-Registerstufen 601 bis 605 des
Synchronisierer-Datenwegs anzufordern. Falls das Lesevollbitsignal 636 aktiv
wird, wird diese Leseanforderung angenommen. Das Lesevollbitsignal 636 gibt
an, dass es zusätzliche
gültige
Lesedaten im FIFO gibt.
-
4 veranschaulicht
die Synchronisationslogikblöcke 302 und 312 nach 3 ausführlich.
Im Synchronisationslogikblock 302 wird der Lesetakt 330 der
Domäne
B zu zwei Flipflops 401 und 402 geliefert. Es
wird angenommen, dass sich im Ergebnis eines vorhergehenden Eintrags
von Daten in diese FIFO-Stufe diese Flipflops 401 und 402 in
einem hohen Zustand befinden. Dann werden die Flipflops 401 und 402 beim
nächsten
Lesetakt 330 der Domäne
B synchron gelöscht.
Es wird angegeben, dass 4 die Anwendung des (in 3 veranschaulichten) Synchronisationsblock-Löschsignals 352 über die
invertierenden Eingänge
der UND-Gatter auf seinen eigenen Löscheingang veranschaulicht.
-
In 3 wird,
nachdem der asynchrone Flankendetektor 301 ein neues Schreibfreigabesignal
erfasst hat, sein Ausgang hoch. Folglich wird der Eingang 351 in
den Synchronisationslogikblock 302 abermals hoch. Dies
führt dazu,
dass die Flipflops 401 und 402 das Hoch nach weiteren
zwei Lesetaktsignalen 330 der Domäne B einfangen. Das Ergebnis ist,
dass der Synchronisationslogikblock 302, der auf ein in
der Domäne
A eingeleitetes Schreibfreigabesignal einwirkt, es mit den Leseoperationen
der Domäne
B synchronisiert.
-
4 veranschaulicht
außerdem
den Synchronisationslogikblock 312 der Domäne A ausführlich.
Im Synchronisationslogikblock 312 wird der Schreibtakt 320 an
die zwei Flipflops 411 und 412 geliefert. Es wird
angenommen, dass sich im Ergebnis eines vorhergehenden Lesens der
Daten in dieser FIFO-Stufe die Flipflops 411 und 412 in
einem hohen Zustand befinden. Dann werden die Flipflops 411 und 412 beim
nächsten
Taktsignal 320 der Domäne
A synchron gelöscht.
-
In 3 wird,
nachdem der asynchrone Flankendetektor 311 ein neues Lesefreigabesignal erfasst,
sein Ausgang hoch. Folglich wird der Eingang des Synchronisationslogikblocks 312 abermals hoch.
Dies führt
dazu, dass die Flipflops 411 und 412 das Hoch
nach zwei weiteren Schreibtaktsignalen 320 der Domäne A einfangen.
Das Ergebnis ist, dass der Synchronisationslogikblock 312,
der auf ein in der Domäne
B eingeleitetes Schreibfreigabesignal einwirkt, es mit den Schreiboperationen
in der Domäne A
synchronisiert.
-
5 veranschaulicht
die Einzelheiten der Konstruktion der in 3 veranschaulichten
asynchronen Flankendetektoren 301 und 311. In 5 wird
im asynchronen Flankendetektor 301 der Domäne B der
Lesetakt 330 der Domäne
B an die zwei Flipflops 501 und 502 geliefert.
Das Synchronisationsblock-Löschsignal 352 für diese
Flipflops ist synchron und aktiv hoch. Folglich werden, wenn das
Eingangssignal 371 hoch ist und mit dem Inverter 542 zwischen
dem Synchronisationsblock-Löschsignal 352 und
den D-Eingängen 544 und 545 der
entsprechenden Flipflops 501 und 502, die Q-Ausgänge beider Flipflops 501 und 502 bei
der Anstiegsflanke des Lesetakts 330 der Domäne B tief.
Die aktiv tiefen Setzeingänge 546 und 548 der
entsprechenden Flipflops 501 und 502 sind asynchron.
Wenn diese Setzeingänge 546 und 548 tief
werden, werden die entsprechenden Q-Ausgänge 550 und 351 der
Flipflops 501 und 502 hoch.
-
Der
asynchrone Flankendetektor 301 führt die folgende Folge aus.
Das synchrone Blocklöschsignal 352 vom
synchronen Logikblock 302 wird hoch und steuert die Eingänge 544 und 545 über den
Inverter 542 tief. Nach einer positiven Flanke des Lesetaktsignals 330 der
Domäne
B werden die Q-Ausgänge
beider Flipflops 501 und 502 tief gesteuert. Dann setzt
das Eingangssignal 371, das während eines kurzen Zeitintervalls
von vielleicht einigen Nanosekunden tief wird, das Flipflop 501 sofort
asynchron hoch. Wenn das Eingangssignal 371 in den hohen Zustand
zurückkehrt,
wird das Flipflop 502 asynchron hoch gesetzt. Das Flipflop 502,
das hoch wird, gibt an, dass das Eingangssignal 371 nun
hoch ist und tief war. Der asynchrone Flankendetektor 301 hat
auf diese Weise eine Anstiegsflanke erfasst.
-
Ähnlich wird
im asynchronen Flankendetektor 311 der Domäne A der
Schreibtakt 320 der Domäne
an die zwei Flipflops 511 und 512 geliefert. Das Synchronisationsblock-Löschsignal 362 für diese Flipflops
ist synchron und aktiv hoch. Folglich werden, wenn das Eingangssignal 381 hoch
ist und mit dem Inverter 542 zwischen dem Synchronisationsblock-Löschsignal 362 und
den D-Eingängen 544 und 545 der
entsprechenden Flipflops 511 und 512, die Q-Ausgänge beider
Flipflops 511 und 512 bei der Anstiegsflanke des
Schreibtakts 320 der Domäne A tief. Die aktiv tiefen
Setzeingänge 546 und 548 der entsprechen den
Flipflops 511 und 512 sind asynchron. Wenn diese
Setzeingänge 546 und 548 tief werden,
werden die entsprechenden Q-Ausgänge 550 und 361 der
Flipflops 511 und 512 hoch.
-
Der
asynchrone Flankendetektor 311 führt die folgende Folge aus.
Das synchrone Blocklöschsignal 362 vom
synchronen Logikblock 312 wird hoch und steuert die Eingänge 544 und 545 über den
Inverter 542 tief. Nach einer positiven Flanke des Schreibtaktsignals 320 der
Domäne
A werden die Q-Ausgänge
beider Flipflops 511 und 512 tief gesteuert. Dann
setzt das Eingangssignal 381, das während eines kurzen Zeitintervalls
von vielleicht einigen Nanosekunden tief wird, das Flipflop 511 sofort
asynchron hoch. Wenn das Eingangssignal 381 in den hohen
Zustand zurückkehrt,
wird das Flipflop 512 asynchron hoch gesetzt. Das Flipflop 512,
das hoch wird, gibt an, dass das Eingangssignal 381 nun
hoch ist und tief war. Der asynchrone Flankendetektor 311 hat auf
diese Weise eine Anstiegsflanke erfasst.
-
6 veranschaulicht
die FIFO-Registerstufen 601 bis 605, die mehrstufigen
bidirektionalen Synchronisierer 611 bis 615, den
Schreibzeiger/Decodierer 625 und den Lesezeiger/Decodierer 635 der Synchronisierer/Zeiger-FIFO-Register 202 nach 2.
Die FIFO-Registerstufen sind als 601, 602, 603, 604 und 605 bezeichnet.
Die bidirektionale Synchronisiererblöcke 611, 612, 613, 614 und 615 enthalten
die ganze Logik, die in den 3, 4 und 5 beschrieben
ist. Das Leseanforderungssignal 331, das Nicht-leer-Signal 332,
das Schreibanforderungssignal 321 und das Vollsignal 322 leiten
die Steuerinformationen, die das Schreiben der Daten in eine einzelne
FIFO-Stufe oder das Lesen der Daten aus dem FIFO in Abhängigkeit
von dem Zustand dieser Signale und den Schreib- und Lesezeigern
steuern, in beiden Richtungen weiter.
-
Die
Schreibvorgänge
gehen von der Stufe 601 bis zur Stufe 605 in aufsteigender
Reihenfolge weiter, wobei sie dann bei 601 fortgesetzt
werden. Folglich steuert der FIFO-Schreibzeiger/Decodierer 625 die
Funktion des zirkulären
FIFO. Ähnlich
gehen die Lesevorgänge
von der Stufe 601 bis zur Stufe 605 in aufsteigender
Reihenfolge weiter, wobei sie dann bei der Stufe 601 fortgesetzt
werden. Folglich steuert der FIFO-Lesezeiger/Decodierer 635 außerdem die
Funktion des zirkulären
FIFO.
-
Die
Funktion des Synchronisierers stellt sicher, dass die Schreibvorgänge nur
bei der Registerstufe auftreten können, die eine Eingabe eines
aktiven Schreibfreigabesignals 624 in diese Stufe empfängt. Die
aktive Stufe muss außerdem
leer sein, entweder auf Grund keines vorhergehenden Eintrags oder
weil der letzte Eintrag in diese Stufe gelesen worden ist, wie durch
das entsprechende Schreibvollbitsignal 626 angegeben wird.
Die Schreibdaten 650 werden parallel zu allen Registerstufen
geliefert, wobei jedoch nur eine Registerstufe durch die Schreibfreigabesignale 624 für das Schreiben
ausgewählt
wird. Ähnlich
stellt die Funktion des Synchronisierers sicher, dass die Lesevorgänge nur
von einer Registerstufe auftreten, die eine Eingabe eines aktiven
Lesefreigabesignals 634 in diese Stufe empfängt. Die
aktive Registerstufe hat vorher einen Eintrag empfangen. Die Schreibdaten 660 werden
durch den Multiplexer 685 entsprechend dem Multiplexerauswahlsignal 637,
das dem Lesezeiger entspricht, für
die Ausgabe ausgewählt.
-
Es
wird angegeben, dass zwei Instantiierungen der in 6 veranschaulichten
Logik in der FIFO-Registerstufe 601 bis 605 nach 2 enthalten
sind. Wird eine Ansicht auf hoher Ebene des Prozesses gewählt, wie
in 2 gezeigt ist, überträgt die Erste die Schreibdaten
von der Hub-Schnittstellen-Einheit über die Schreibdaten 650 und
die Schreibdaten 660 zur Anwendungseinheit. Die Zweite überträgt die Lesedaten
von der Anwendungseinheit über
die Lesedaten 690 und die Lesedaten 680 zurück zur Hub-Schnittstellen-Einheit.
-
7 veranschaulicht
das Prinzip der Funktion des Synchronisierers in der Form eines
Ablaufplans. Eine Schreiboperation von einer Hub-Schnittstelle zu
einer Anwendungseinheit ist wie folgt. Das Schreibanforderungssignal 321 wird
bei einer aktiven Flanke des Schreibtaktsignals 320 der
Domäne
A (Block 701) aktiv (Block 702). Die Daten werden
unter Verwendung das Schreibtakts der Domäne A und des Schreibfreigabesignals 624,
das während
eines Zyklus gültig
ist, in einen FIFO-Registerzustand 601 bis 605 geschrieben
(Block 703). Der Schreibzeiger 625 wird inkrementiert
(Block 704). Dies setzt über das Schreibvollbitsignal 626 einen
Setz-Rücksetz-Zwischenspeicher 313,
was angibt, dass das Register voll ist, (Block 705). Die
Anstiegsflanke des Schreibvollbitsignals 626 wird durch
den asynchronen Flankendetektor 301 eingefangen (Block 706). Die
Ausgabe des asynchronen Flankendetektors 301 wird zum Synchronisationslogikblock 302 geleitet (Block 707).
Die Ausgabe des Synchronisationslogik blocks 302 setzt über das
Lesevollbitsignal 636 den Setz-Rücksetz-Zwischenspeicher 303 in
der Domäne
B, was angibt, dass das Register voll ist, (Block 708).
Die Ausgabe des Synchronisationslogikblocks 302 setzt den
asynchronen Flankendetektor 301 und den Synchronisationslogikblock 302 zurück (Block 709).
Dies stellt sicher, dass der Synchronisiererausgang nur während eines
Zyklus hoch ist.
-
8 veranschaulicht
einen exakt äquivalenten
Prozess in der entgegengesetzten Richtung. 8 veranschaulicht
eine Leseoperation von der Anwendungseinheit zur Hub-Schnittstellen-Einheit. Das
Leseanforderungssignal 331 wird bei einer aktiven Flanke
des Lesetaktsignals 330 der Domäne B (Block 801) aktiv
(Block 802). Die Daten werden unter Verwendung das Lesetakts 330 der
Domäne
B und des Lesefreigabesignals 634, das während eines Zyklus
gültig
ist, aus einem FIFO-Registerzustand 601 bis 605 gelesen
(Block 803). Der Lesezeiger 635 wird inkrementiert
(Block 804). Dies setzt über das Lesevollbitsignal 636 einen
Setz-Rücksetz-Zwischenspeicher 303 zurück, was
angibt, dass das Register voll ist, (Block 805). Die Abfallflanke
des durch den Inverter 334 gelieferten Nicht-leer-Signals 332 wird
durch den asynchronen Flankendetektor 311 eingefangen (Block 806).
Die Ausgabe des asynchronen Flankendetektors 311 wird zum
Synchronisationslogikblock 312 geleitet (Block 807).
Die Ausgabe des Synchronisationslogikblocks 312 löscht über das
Schreibvollbitsignal 626 den Setz-Rücksetz-Zwischenspeicher 313 in
der Domäne
A, was angibt, dass das Register nicht voll ist, (Block 808). Die
Ausgabe des Synchronisationslogikblocks 312 setzt den asynchronen
Flankendetektor 311 und den Synchronisationslogikblock 312 zurück (Block 809). Dies
stellt sicher, dass der Synchronisiererausgang nur während eines
Zyklus hoch ist.
-
Die
gezeigten Setz-Rücksetz-Zwischenspeicher 303 und 313 könnten in
einer weiteren Ausführungsform
durch ausgelöste
Flipflops ersetzt sein, wobei die Setz- und Löschbegriffe in der Logik, die den
D-Eingang steuert, berücksichtigt
sind.
-
Die
Neuheit der Erfindung kommt aus dem mehrmaligen Kopieren der Inhalte
nach 6 in jeder Stufe, die einen bidirektionale Synchronisierer und
eine zugeordnete FIFO-Registerstufe besitzt. Dies schafft die Pipelineverarbeitung
der Synchronisationsprozesse, was erlaubt, dass sich mehrere Signale
in verschie denen Stufen der Synchronisation befinden. Folglich können in
jedem Zyklus neue Daten synchronisiert werden, selbst wenn die Synchronisationsverzögerung viel
größer als
dieser ist. Der Schreibzeiger 625 und der Lesezeiger 635 werden verwendet,
um zu bestimmen, welche Register-/Synchronisiererkombination in
jedem gegebenen Zyklus zu verwenden ist. Diese sind als einfachere
Inkrementierer implementiert, die zurück auf null springen, nachdem
auf die Register-/Synchronisiererkombination
mit der höchsten
Nummer zugegriffen worden ist. Der Schreibzeiger 625 wird
in der Domäne
A jedesmal inkrementiert, wenn ein Eintrag geschrieben wird. Folglich
bestimmt beim folgenden Zyklus der Wert des vollen Zwischenspeichers
für den
nächsten Eintrag,
ob der nächsten
Eintrag geschrieben werden kann. Ähnlich wird der Lesezeiger 635 in
der Domäne B
jedesmal inkrementiert, wenn ein Eintrag entfernt wird. Dies kann
insgesamt als ein zirkulärer
FIFO betrachtet werden.
-
Die
Anzahl der benötigten
Einträge
im FIFO hängt
von einer Anzahl von Faktoren ab. Wenn es ernsthaft keine Einschränkungen
an die Taktbeziehungen gibt, dann ist die Bedingung, die die Anzahl der
erforderlichen Einträge
bestimmt, jene, die sich ergibt, wenn die Slave-Domäne (die
Domäne
B in diesem Fall) bei der gleichen Frequenz wie die Master-Domäne (die
Domäne
A in diesem Beispiel) arbeitet. Wenn die Domäne A in jedem Zyklus einen
neuen Eintrag schreiben kann und die Domäne B in jedem Zyklus einen
neuen Eintrag lesen kann, dann ist die Anzahl der Einträge durch
die maximale Zeit bestimmt, die zwischen dem Setzen des Setz-Rücksetz-Zwischenspeichers 313 in
der Domäne
A und seinem anschließenden
Löschen
erforderlich ist. Wenn dies N Zyklen der Domäne A sind, dann muss es wenigstens
N Einträge
im FIFO geben, damit die Domäne
A unbegrenzt in jedem Zyklus einen neuen Eintrag schreiben kann.
Kleiner als N bedeutet, dass, wenn der Schreibzeiger zu einem Eintrag
umläuft, dieser
Eintrag nach dem vorhergehenden Schreiben in ihn noch nicht als
leer markiert worden ist, wobei deshalb die Domäne A anhalten muss. Im Allgemeinen
umfasst die Umlaufzeit eine Mischung der Zyklen der Domäne A und
der Domäne
B, wobei sie auf die nächste
ganze Zahl von Zyklen der Domäne
A aufgerundet werden muss.
-
In
Abhängigkeit
von den Anforderungen der Anwendung könnte die Anzahl der erforderlichen Einträge kleiner
als die oben beschriebene Anzahl sein. Wenn z. B. die Domäne B immer
langsamer als die Domäne
A ist oder wenn die Do mäne
B nicht in jedem Zyklus einen Eintrag lesen kann, dann können weniger
Einträge
verwendet werden, ohne die Systemleistung zu beeinflussen. Die Domäne A würde trotzdem
anhalten müssen,
selbst wenn die Synchronisierertiefe größer wäre.
-
Eine
alternative Anwendung ist eine Ersetzung für einen abwärts dribbelnden Puffer (Dribble-Down-Puffer)
in einer Netzvorrichtung. In diesem Fall kommen die Daten in jedem
Zyklus während
irgendeiner maximalen Zeitdauer, gefolgt von einer Pause an. Ein
Beispiel ist ein Ethernet-Rahmen gefolgt von einer Zwischenrahmenlücke. In
diesem Fall besitzen die Domänen
A und B typischerweise die gleiche Nennfrequenz, aber mit einer
zulässigen
kleinen Toleranz, wie z. B. einer ±1-%-Abweichung. Wenn die
Domäne
B langsamer als die Domäne
A ist, dann wird während
der Dauer eines Rahmens der FIFO voller. In diesem Fall muss die
Anzahl der Einträge
ausreichend sein, um sicherzustellen, dass der FIFO bis zum Ende
eines Rahmens mit maximaler Größe mit einer
Toleranz für
den schlimmsten Fall nicht vollständig gefüllt ist. Die Lücke zwischen
den Rahmen wird dann verwendet, um das Gleichgewicht wiederherzustellen.
Effektiv würde
die Lücke
in der Domäne
B ein wenig kleiner als in der Domäne A sein.