-
Gebiet der Erfindung
-
Die
vorliegende Erfindung bezieht sich auf eine Technik zum Erzielen
einer Synchronisierung zwischen Pipelines in einer Datenverarbeitungsvorrichtung.
-
Beschreibung des Standes der
Technik
-
Es
ist bekannt, eine Datenverarbeitungsvorrichtung mit einem Hauptprozessor
zu versehen, der die Form eines Pipelineprozessors annimmt, welcher
eine Mehrzahl von Pipelinestufen hat. Dies ermöglicht es, daß zu irgendeinem
Zeitpunkt mehrere Befehle in der Ausführung durch den Hauptprozessor
sein können. Während der
Ausführung
irgend eines besonderen Befehles durchläuft dieser Befehl die verschiedenen
Pipelinestufen des Hauptprozessors, wobei die Ausführung dieses
Befehls typischerweise abgeschlossen wird, wenn der Befehl durch
die letzte Pipelinestufe des Hauptprozessors verarbeitet worden
ist, wobei zu diesem Zeitpunkt der Zustand der Datenverarbeitungsvorrichtung
aktualisiert wird, um das Ergebnis der Ausführung dieses Befehls wiederzugeben.
Als ein Beispiel können
die Inhalte von einem oder mehreren Registern einer Registerbank,
welche für
den Hauptprozessor zugänglich
sind, abhängig
von dem Ergebnis des Ausführungsbefehls
aktualisiert werden.
-
Es
ist auch bekannt, eine Datenverarbeitungsvorrichtung mit einem oder
mehreren Coprozessoren für die
Ausführung
bestimmter Coprozessorbefehle vorzusehen, welche in einer Folge
von Befehlen erscheinen, die durch die Datenverarbeitungsvorrichtung
ausgeführt
werden sollen. In Situationen, in welchen der Hauptprozessor eine
Pipelinearchitektur hat, ist es üblich,
daß der
Coprozessor auch eine Pipelinearchitektur hat und damit auch eine
Mehrzahl von Pipelinestufen hat, durch welche ein Coprozessorbefehl
verarbeitet wird, um den Coprozessorbefehl auszuführen. Typischerweise
ist jeder Coprozessorbefehl dafür
ausgelegt, daß er
sowohl durch die Pipeline des Hauptprozessors als auch durch die
Pipeline des Coprozessors geleitet wird. Der Coprozessor soll mehr
oder weniger im Gleichschritt mit dem Hauptprozessor arbeiten und
dementsprechend müssen
Schritte unternommen werden, um die Coprozessorpipeline mit der
Hauptprozessorpipeline synchronisiert zu halten.
-
Das
Erfordernis der Synchronisation ergibt sich aus der Tatsache, daß eine Interaktion
zwischen den verschiedenen Pipelinestufen des Hauptprozessors und
den verschiedenen Pipelinestufen des Coprozessors während der
Ausführung
eines Coprozessorbefehls erforderlich ist. Beispielsweise können Coprozessorbefehle
durch den Hauptprozessor gelöscht
werden, wenn ein Zustandscode bzw. ein Bedingungscode, der durch den
Coprozessorbefehl angegeben wird, nicht erfüllt ist, oder die gesamte Coprozessorpipeline
muß gespült bzw.
geleert werden für
den Fall einer falsch vorhergesagten Verzweigung, die dazu geführt hat,
daß der
Coprozessorbefehl ausgeführt
wird. Weiterhin müssen
möglicherweise
Daten zwischen dem Hauptprozessor und dem Coprozessor für den Fall
ausgetauscht werden, daß die
Coprozessorbefehle Lade- oder Speicheroperationen definieren.
-
Bisher
sind Coprozessorpipelines mit der Hauptprozessorpipeline synchronisiert
gehalten worden, indem Signale mit einem festen Zeittakt von einer
Pipeline an die andere weitergeleitet wurden, wie es in der
US-A-5,860,000 offenbart
wird. Diese Signale verursachen hauptsächlich Stops in einer Pipeline,
wenn die andere Pipeline anhält,
um eine Synchronisierung aufrechtzuerhalten. Es gibt jedoch andere
verkomplizierende Faktoren, wenn beispielsweise die Hauptpipeline
den Coprozessorbefehl löschen
muß oder
wenn die Pipelines gespült
werden müssen,
was die Wechselwirkungen zwischen dem Hauptprozessor und dem Coprozessor
beträchtlich
komplizierter macht, wenn sie über
Stops miteinander wechselwirken. Da die Länge der Pipelineprozessoren
angewachsen ist, ist es immer schwieriger geworden, eine Synchronisierung
zwischen Pipelines unter Verwendung dieses Schemas einer engen Ankopplung,
welches das Weiterleiten von Signalen mit einem festen Zeittakt
zwischen den Pipelines beinhaltet, zu erzielen.
-
Eine
Haupteinschränkung,
die der Coprozessorschnittstelle auferlegt ist, besteht darin, daß sie während einer
Verzögerung über zwei
Zyklen arbeiten muß,
d. h. irgendein Signal, welches von dem Hauptprozessor an den Coprozessor
oder umgekehrt weitergeleitet wird, muß einen vollständigen Taktzyklus
erhalten, um von dem einen zu dem anderen überzugehen und kann damit nicht
vor dem folgenden Taktzyklus in Aktion treten. Dies bedeutet, daß ein Signal,
welches die Schnittstelle überschreitet,
aus einem Register auf einer Seite der Schnittstelle ausgetaktet
werden muß und
direkt in ein anderes Register auf der anderen Seite eingetaktet
werden muß und
daß kein
kombinatorischer Prozeß dazwischen
kommen darf. Diese Einschränkung
ergibt sich aus der Tatsache, daß der Hauptprozessor (der hier
auch als der Prozessorkern bezeichnet wird) und der Coprozessor
um einen beträchtlichen
Abstand voneinander entfernt angeordnet sein können und daß großzügige Zeittoleranzen zum Auffangen
der Signallaufzeiten zugelassen werden müssen. Dies gilt insbesondere
in Situationen, in welchen der Coprozessor getrennt von dem Entwurf
bzw. Modell des Hauptprozessors entwickelt wurde, beispielsweise
von einem Dritten. Diese Verzögerung
in der Signallaufzeit macht es schwierig, unter Verwendung der vorstehend
beschriebenen Synchronisierungstechnik einer engen Kopplung die
Pipelinesynchronisierung aufrecht zu erhalten.
-
Dementsprechend
wäre es
wünschenswert,
eine verbesserte Technik für
das Erhalten einer Synchronisation zwischen Pipelines in einer Datenverarbeitungsvorrichtung
bereitzustellen.
-
Zusammenfassung der Erfindung
-
Gemäß einem
ersten Aspekt stellt die vorliegende Erfindung eine Datenverarbeitungsvorrichtung
bereit, welche aufweist: einen Hauptprozessor, der in der Weise
betreibbar ist, daß er
eine Folge von Befehlen ausführt,
wobei der Hauptprozessor eine erste Pipeline aufweist, die eine
erste Mehrzahl von Pipelinestufen hat, einen Coprozessor, der in
der Weise betreibbar ist, daß er
Coprozessorbefehle in der Folge von Befehlen ausführt, wobei
der Coprozessor eine zweite Pipeline aufweist, die eine zweite Mehrzahl
von Pipelinestufen hat, und wobei jeder Coprozessorbefehl in der
Weise ausgestaltet ist, daß er
sowohl durch die erste Pipeline als auch durch die zweite Pipeline
hindurch geleitet wird, und zumindest eine Synchronisierungsschlange,
welche eine vorbestimmte Pipelinestufe in einer der Pipelines mit
einer Partnerpipelinestufe in der anderen der Pipelines verbindet,
wobei die vorbestimmte Pipelinestufe in der Weise betreibbar ist,
daß sie
bewirkt, daß ein Token
in der Synchronisierungsschlange angeordnet wird, wenn ein Coprozessorbefehl
ausgeführt
wird, und wobei die Partnerpipelinestufe in der Weise betreibbar
ist, daß sie
diesen Coprozessorbefehl nach Empfang des Token von der Synchronisierungsschlange
verarbeitet, wodurch die erste und die zweite Pipeline zwischen der
vorbestimmten Pipelinestufe und der Partnerpipelinestufe synchronisiert
werden.
-
Gemäß der vorliegenden
Erfindung wird eine Datenverarbeitungsvorrichtung bereitgestellt
mit zumindest einer Synchronisierungsschlange, die eine vorbestimmte
Pipelinestufe in einer der Pipelines mit einer Partnerpipelinestufe
in der anderen der Pipelines verbindet bzw. ankoppelt. Die vorbestimmte
Pipelinestufe ist dafür
ausgelegt, daß sie
bewirkt, daß ein
Token in der Synchronisierungsschlange angeordnet wird, wenn ein Coprozessorbefehl
ausgeführt
wird, und die Partnerpipelinestufe ist dann in der Weise betreibbar,
daß sie
diesen Coprozessorbefehl nach Empfang des Token von der Synchronisierungsschlange
verarbeitet, wodurch die erste und die zweite Pipelinestufe an diesem
Punkt synchronisiert werden.
-
Die
Erfindung stellt damit eine auf Token beruhende Pipelinesynchronisationstechnik
bereit, die einen gewissen Schlupf zwischen den beiden Pipelines
zuläßt, indem
eine strenge Synchronisierung auf allen Stufen nicht erforderlich
ist, wobei jedoch sichergestellt wird, daß die Pipelines für kritische
Informationsübertragungen
korrekt synchronisiert sind. Die Technik der Erfindung kann als
ein datengetriebenes, lose gekoppeltes Synchronisierungsschema betrachtet
werden, im Gegensatz zu dem durch eine Steuerung getriebenen, eng gekoppelten
Schema nach dem Stand der Technik, welches das Weiterleiten von
Signalen mit festen Zeittakten zwischen den Pipelines beinhaltet.
-
Während es
möglich
ist, daß in
gewissen Ausführungsformen
möglicherweise
nur eine einzelne Synchronisierungsschlange vorhanden ist, weisen
bevorzugte Ausführungsformen
der Datenverarbeitungsvorrichtung darüber hinaus eine Mehrzahl derartiger
Synchronisierungsschlangen auf, wobei jede Synchronisierungsschlange
eine vorbestimmte Pi pelinestufe in einer der Pipelines mit einer
Partnerpipelinestufe in der anderen der Pipelines verbindet.
-
In
bevorzugten Ausführungsformen
ist eine der Synchronisierungsschlangen, von denen es zumindest eine
gibt, eine Befehlsschlange, wobei die vorbestimmte Pipelinestufe
sich in der ersten Pipeline befindet und dafür ausgelegt ist zu bewirken,
daß ein
Token, das einen Coprozessorbefehl kennzeichnet, in der Befehlsschlange
angeordnet wird, während
die Partnerpipelinestufe sich in der zweiten Pipeline befindet und
in der Weise betreibbar ist, daß sie
nach Empfang des Token mit der Verarbeitung des Coprozessorbefehles
beginnt, der durch das Token identifiziert bzw. gekennzeichnet ist.
-
Bezüglich der
Befehlsschlange sind sowohl die vorbestimmte Pipelinestufe als auch
die Partnerpipelinestufe vorzugsweise eine der ersten Pipelinestufen
in ihren jeweiligen Pipelines. Genauer gesagt ist in bevorzugten
Ausführungsformen
die vorbestimmte Pipelinestufe eine Stufe in der ersten Pipeline
für das
Heranholen bzw. Vorabheranholen und die Partnerpipelinestufe ist
eine Decodierstufe in der zweiten Pipeline, wobei diese Decodierstufe
in der Weise betreibbar ist, daß sie
nach Empfang des Token den Coprozessorbefehl decodiert.
-
In
derartigen bevorzugten Ausführungsformen
ist die Heranholstufe in der ersten Pipeline vorzugsweise in der
Weise betreibbar, daß sie
bewirkt, daß ein
Token in der Befehlsschlange für
jeden Befehl in der Folge von Befehlen angeordnet wird und die Decodierstufe
in der zweiten Pipelinestufe ist dafür ausgelegt, jeden Befehl nach
Empfang des zugehörigen
Token zu decodieren, um festzustellen, ob dieser Befehl ein Coprozessorbefehl
ist, der eine weitere Verarbeitung durch den Coprozessor erfordert.
-
Es
versteht sich, daß es
als eine Alternative zu dem obigen Ansatz möglich wäre, statt dessen zuzulassen,
daß jeder
der Befehle erst durch die Decodierstufe der ersten Pipeline decodiert
wird und dann über die
Befehlsschlange nur diejenigen Befehle weiterzuleiten, die tatsächlich Coprozessorbefehle
sind, die durch den Coprozessor zu behandeln bzw. zu bearbeiten
sind. In diesem Fall liegt es auf der Hand, daß die vorbestimmte Pipelinestufe
entweder die Decodierstufe oder eine auf die Decodierstufe folgende
Stufe der ersten Pipeline sein müßte.
-
In
bevorzugten Ausführungsformen
ist eine der Synchronisierungsschlangen, von denen es zumindest eine
gibt, eine Löschschlange,
wobei die vorbestimmte Pipelinestufe sich in der ersten Pipeline
befindet und dafür
ausgelegt ist, daß sie
bewirkt, daß in
der Löschschlange
ein Token angeordnet wird, welches angibt bzw. kennzeichnet, ob
ein Coprozessorbefehl an einer vorbestimmten Pipelinestufe gelöscht werden
soll, und die Partnerpipelinestufe befindet sich in der zweiten
Pipeline und ist in der Weise betreibbar, daß sie nach Empfang des Token
aus der Löschschlange,
und falls das Token den Hinweis gibt, daß der Coprozessorbefehl gelöscht werden
soll, bewirkt, daß der
Coprozessorbefehl gelöscht
wird.
-
Der
Hauptprozessor möchte
also möglicherweise
einen Befehl löschen,
den er bereits an den Coprozessor weitergeleitet hat. Dies kann
beispielsweise geschehen, wenn der Befehl irgendeinen seiner Zustandscodes
nicht erfüllt,
was erfordert, daß die
Ausführung
des Befehls sowohl im Hauptprozessor als auch im Coprozessor gelöscht wird.
Die Löschschlange
trägt diese
Information von dem Hauptprozessor herüber zu dem Coprozessor.
-
In
der bevorzugten Ausführungsform
ist bezüglich
der Löschschlange
die vorbestimmte Pipelinestufe eine Ausgabestufe in der ersten Pipeline
und die Partnerpipelinestufe ist eine Stufe, welche auf eine Ausgabestufe
in der zweiten Pipeline folgt. Genauer gesagt ist in bevorzugten
Ausführungsformen
die Partnerpipelinestufe eine erste Ausführungsstufe der Coprozessorpipeline.
-
In
bevorzugten Ausführungsformen
ist die Partnerpipeline nach Empfang des Token von der Löschschlange
und falls das Token angibt, daß der
Coprozessorbefehl gelöscht
werden soll, in der Weise betreibbar, daß sie den Coprozessorbefehl
aus der zweiten Pipeline entfernt. Es versteht sich, daß es eine
Anzahl von Arten gibt, auf welche der Befehl aus der zweiten Pipeline
gelöscht
oder ausgespült
werden kann. Beispielsweise könnte
es möglich
sein, den Befehl tatsächlich
mit unmittelbarer Wirkung aus der Pipeline zu entfernen. In bevorzugten
Ausführungsformen
jedoch läßt man statt
dessen den Befehl durch einige der verbleibenden Stufen der Pipeline
weiterlaufen, jedoch mit einem gesetzten Flag (Anzeigeelement),
welches anzeigt, daß der Befehl
nicht ausgeführt
werden soll, so daß der
Befehl nach wie vor Token von den Schlangen aufnehmen kann.
-
In
bevorzugten Ausführungsformen
ist zumindest eine der Synchronisierungsschlangen, von denen es zumindest
eine gibt, eine Abschlußschlange,
wobei die vorbestimmte Pipelinestufe sich in der ersten Pipeline befindet
und dafür
ausgelegt ist zu bewirken, daß in
der Abschlußschlange
ein Token angeordnet wird, welches die Erlaubnis für einen
Coprozessorbefehl der vorbestimmten Pipelinestufe kennzeichnet,
daß er
in einen Ruhezustand versetzt werden soll, um zu bewirken, daß der Coprozessorbefehl
in den Ruhezustand versetzt wird.
-
Die
Abschlußschlange
hält damit
die Synchronisierung am Ende der Pipeline aufrecht, indem sie für jeden
Befehl in der Coprozessorpipeline die Erlaubnis erteilt, in den
Ruhezustand einzutreten. In bevorzugten Ausführungsformen wird die Länge der
Coprozessorpipeline bestimmt durch das Erfordernis, den Ruhezustand
eines Coprozessorbefehls lange genug zu verzögern, um die Aufnahme der entsprechenden
Token zu ermöglichen,
die aus dem Ende der Abschlußschlange
austreten.
-
Bezüglich der
Abschlußschlange
ist die vorbestimmte Pipelinestufe vorzugsweise eine Rückschreibestufe
in der ersten Pipeline und die Partnerpipelinestufe ist vorzugsweise
eine Rückschreibstufe
in der zweiten Pipeline.
-
In
bevorzugten Ausführungsformen
ist eine der zumindest einen Synchronisierungsschlangen eine Längenschlange,
wobei die vorbestimmte Pipelinestufe sich in der zweiten Pipeline
befindet und dafür
ausgelegt ist, daß sie
für einen
vektorisierten Coprozessorbefehl bewirkt, daß in der Längenschlange ein Token angeordnet
wird, welches die Längeninformation
für den
vektorisierten Coprozessorbefehl kennzeichnet, und die Partnerpipelinestufe
befindet sich in der ersten Pipeline und ist in der Weise betreibbar,
daß sie
bei Empfang des Token aus der Längenschlange
die Längeninformation
als Faktor in die weitere Verarbeitung des vektorisierten Coprozessorbefehls
innerhalb der ersten Pipeline einbringt.
-
Einige
Coprozessorbefehle können
vektorisiert werden, indem sie ermöglichen, daß mehrere Wiederholungen des
Befehls innerhalb eines einzelnen Befehls spezifiziert werden. Typische
Beispiele wären
Lade- oder Speicherbefehle, wobei ein vektorisierter Lade- oder
ein vektorisierter Speicherbefehl ermöglicht, daß mehrere Datenwerte in einem
einzelnen Befehl übertragen
werden. Dies beinhaltet typischerweise die Übertragung mehrerer Worte von
Daten zwischen einem Satz von Registern in dem Coprozessor und einem
zusammenhängenden
Satz von Speicherstellen in dem Speicher oder umgekehrt. Wenn der
Coprozessor einen Coprozessorbefehl decodiert hat, so weiß er, wie
lang ein vektorisierter Lade- oder Speichervorgang sein wird und
diese Information wird an den Hauptprozessor als ein Synchronisierungstoken über die
Längenschlange zurückgesendet.
-
Bezüglich der
Längenschlange
ist in bevorzugten Ausführungsformen
die vorbestimmte Pipelinestufe eine Decodierstufe in der zweiten
Pipeline und die Partnerpipelinestufe ist eine erste Ausführungsstufe
in der ersten Pipeline.
-
In
bevorzugten Ausführungsformen
der vorliegenden Erfindung ist die eine oder zumindest eine der mehreren
Synchronisierungsschlangen eine Annahmeschlange, wobei die vorbestimmte
Pipelinestufe sich in der zweiten Pipeline befindet und dafür ausgelegt
ist zu bewirken, daß in
der Annahmeschlange ein Token angeordnet wird, welches angibt, ob
ein Coprozessorbefehl in der vorbestimmten Pipelinestufe für die Ausführung durch
den Coprozessor angenommen werden soll, und die Partnerpipelinestufe
befindet sich in der ersten Pipeline und ist in der Weise betreibbar,
daß sie
bei Empfang des Token von der Annahmeschlange und wenn das Token
angibt, daß der
Coprozessorbefehl nicht angenommen werden soll, bewirkt, daß der Coprozessorbefehl
durch den Hauptprozessor zurückgewiesen
wird.
-
Der
Coprozessor kann an der vorbestimmten Pipelinestufe entscheiden,
daß er
einen ansonsten gültigen
Coprozessorbefehl nicht annehmen kann und er leitet diese Information
als ein Synchronisierungstoken über
die Annahmeschlange an den Hauptprozessor weiter. Wenn ein Befehl
durch den Coprozessor nicht angenommen werden kann, spricht man
dazu, daß er "abgeprallt" ist. In bevorzugten
Ausführungsformen
entfernt der Coprozessor, wenn er einen Befehl abprallen läßt, diesen
nicht aus seiner Pipeline, sondern wandelt ihn in einen "Phantom"-Befehl um, der sicherstellt,
daß die
Ausführung
dieses Befehls nicht abgeschlossen wird.
-
Bezüglich der
Annahmeschlange ist in bevorzugten Ausführungsformen die vorbestimmte
Pipelinestufe eine Ausgabestufe in der zweiten Pipeline und die
Partnerpipelinestufe ist eine zweite Ausführungsstufe in der ersten Pipeline.
-
Weiterhin
ist die Partnerpipelinestufe vorzugsweise in der Weise betreibbar,
daß sie
bei Empfang des Token von der Annahmeschlange und wenn das Token
angibt, daß der
Coprozessorbefehl nicht angenommen werden kann, den Coprozessorbefehl
aus der ersten Pipeline entfernt. Wie zuvor bezüglich der Löschschlange erwähnt, gibt
es eine Anzahl von Arten, auf welche ein Befehl aus einer Pipeline
entfernt oder ausgespült
werden kann. In bevorzugten Ausführungsformen
ist die Partnerpipelinestufe in der ersten Pipeline in der Weise ausgelegt,
daß sie
bei Empfang eines Token aus der Annahmeschlange, der anzeigt, daß der entsprechende Coprozessorbefehl
nicht angenommen werden soll, erlaubt, daß der Befehl durch einige der
verbleibenden Stufen der ersten Pipeline weitergeleitet wird, jedoch
mit einem gesetzten Flag, um anzuzeigen, daß der Befehl nicht ausgeführt werden
soll.
-
Ebenso
wie bei den oben beschriebenen verschiedenen Steuerschlangen, die
in bevorzugten Ausführungsformen
der Erfindung verwendet werden können,
können
auch eine oder mehrere Synchronisierungsschlangen vorgesehen werden,
um als Datenschlangen zwischen dem Hauptprozessor und dem Coprozessor zu
wirken. Genauer gesagt ist in bevorzugten Ausführungsformen die mindestens
eine oder eine der mehreren Synchronisierungsschlangen eine Speicherschlange,
die verwendet wird, wenn der Coprozessorbefehl ein Speicherbefehl
ist, der in der Weise betreibbar ist, daß er bewirkt, daß Datenobjekte
von dem Coprozessor an den für
den Hauptprozessor zugänglichen
Speicher übertragen
werden, wobei die vorbestimmte Pipelinestufe sich in der zweiten
Pipeline befindet und dafür
ausgelegt ist, daß sie,
wenn sie einen der Speicherbefehle verarbeitet, bewirkt, daß ein Token
in der Speicherschlange angeordnet wird, welches jedes zu übertragende
Datenobjekt kennzeichnet, und die Pipelinestufe befindet sich in
der ersten Pipeline und ist in der Weise betreibbar, daß sie bei
Empfang jedes Token aus der Speicherschlange bewirkt, daß das entsprechende
Datenobjekt in den Speicher übertragen
wird.
-
In
bevorzugten Ausführungsformen
ist bezüglich
der Speicherschlange die vorbestimmte Pipelinestufe eine Ausgabestufe
in der zweiten Pipeline und die Partnerpipelinestufe ist eine Adreßerzeugungsstufe
in der ersten Pipeline.
-
Einige Übertragungen
bzw. Transfers können
einen einzelnen Wert oder einen Vektor betreffen. Im letzteren Fall
wandelt der Coprozessor einen Mehrfachtransfer effektiv in eine
Serie von Einzeltransfers über, indem
er den Befehl in der Ausgabeschlange der zweiten Pipeline wiederholt.
Dies erzeugt eine Instanz des Speicherbefehls für jeden zu übertragenden Gegenstand. Der
Befehl bleibt in der Coprozessorausgabestufe, während er wiederholt ausgeführt wird,
und erzeugt Kopien von sich selbst, die sich entlang der Pipeline
bewegen. Der erste der wiederholten Befehle wird als der "Kopf" bezeichnet und die
anderen werden jeweils als "Schwanz" bezeichnet.
-
In
bevorzugten Ausführungsformen
ist die eine oder eine der mehreren Synchronisierungsschlangen eine
Ladeschlange, die verwendet wird, wenn der Coprozessorbefehl ein
Ladebefehl ist, der in der Weise betreibbar ist, daß er bewirkt,
daß Datenobjekte
aus dem für
den Hauptprozessor zugänglichen
Speicher in den Coprozessor übertragen
werden, wobei die Pipelinestufe sich in der ersten Pipeline befindet
und dafür
ausgelegt ist, daß sie,
wenn sie einen der Ladebefehle verarbeitet, bewirkt, daß in der
Ladeschlange ein Token angeordnet wird, welches jedes zu übertragende
Datenobjekt identifiziert, und die Partnerpipelinestufe befindet sich
in der zweiten Pipeline und ist in der Weise betreibbar, daß sie bei
Empfang jedes Token aus der Ladeschlange bewirkt, daß das entsprechende
Datenobjekt an den Coprozessor übertragen
wird.
-
In
bevorzugten Ausführungsformen
ist hinsichtlich der Ladeschlange die vorbestimmte Speicherstufe eine
Rückschreibestufe
in der ersten Pipeline und die Partnerpipelinestufe ist eine Rückschreibestufe
in der zweiten Pipeline.
-
Ebenso
wie bei Speicherbefehlen können
Ladebefehle Übertragungen
eines einzelnen Datenwertes oder, über einen Vektorladebefehl,
mehrerer Datenwerte angeben. Demnach werden in bevorzugten Ausführungsformen
Ladedaten über
die Schnittstelle durch die Rückschreibestufe
des Hauptprozessors gesendet und von der Rückschreibestufe der Coprozessorpipeline
empfangen. In bevorzugten Ausführungsformen
erreicht, da die Coprozessorpipeline über die Ausgabestufe hinaus
nicht anhalten kann, mit Ausnahme des Wartens auf ein Abschlußtoken,
welches erlaubt, daß die
Befehle in der Rückschreibestufe
in den Ruhezustand versetzt werden, immer der Ladebefehl immer die
Rückschreibestufe
der Coprozessorpipeline synchron zu der Ankunft der Daten bei dem
Coprozessor. Demnach wird in bevorzugten Ausführungsformen die Ladeschlange einfach
durch einen Doppelpuffer gebildet, der verwendet wird, um die Daten
mit der Ankunft des Ladebefehls in der Rückschreibestufe neu auszurichten.
-
In
bevorzugten Ausführungsformen
können,
wie bereits erwähnt,
der Ladebefehl und der Speicherbefehl vektorisierte Coprozessorbefehle
sein, welche mehrere Datenobjekte definieren, die übertragen
werden sollen, und die Vorrichtung weist weiterhin eine Strom- bzw. Flußsteuerlogik
auf, die zumindest entweder der Ladeschlange oder der Speicherschlange
zugeordnet ist und in der Weise betreibbar ist, daß sie ein
Steuersignal an die vorbestimmte Pipelinestufe sendet, um die Ausgabe
von Token durch die vorbestimmte Pipelinestufe zu stoppen, während festgestellt
wird, daß die
zugehörige
Lade- oder Speicherschlange möglicherweise voll
wird.
-
Die
Stromsteuerlogik ermöglicht
es, daß der
Datenstrom angehalten wird, wenn die empfangende Pipeline nicht
in der Lage ist, die Daten zu verarbeiten. In bevorzugten Ausführungsformen
wird die Stromsteuerlogik für
die Speicherschlange bereitgestellt, wobei die Stromsteuerlogik
in der Weise betreibbar ist, daß sie das
Steuersignal nach Empfang einer Anzeige von dem Hauptprozessor ausgibt,
daß die
Partnerpipelinestufe ein Datenobjekt nicht annehmen kann. In Anbetracht
der bereits erwähnten
Tatsache, daß in
bevorzugten Ausführungsformen
der Ladebefehl immer die Rückschreibestufe
der Coprozessorpipeline synchron mit der Ankunft der Daten an dem
Coprozessor über
die Ladeschlange erreicht, besteht in bevorzugten Ausführungsformen
kein Bedarf an einer der Ladeschlange zugeordneten Stromsteuerlogik.
Es versteht sich jedoch, daß in Implementierungen,
in welchen eine solche Synchronisierung nicht garantiert werden
kann, die Stromsteuerlogik dann ebenfalls auch für die Ladeschlange bereitgestellt
werden könnte,
falls erforderlich.
-
In
bevorzugten Ausführungsformen
erfordert das Speichern von Daten eine Stromsteuerung, um zu ermöglichen,
daß die
Ladespeichereinheit des Hauptprozessors den Datenstrom von dem Coprozessor
anhält.
Dies geschieht durch Senden eines Stopsignals an den Coprozessor.
Wenn in bevorzugten Ausführungsformen
dieses Signal zwei Taktzyklen benötigt, um den Coprozessor zu
erreichen, so wird es vorzugsweise erzeugt, sobald ein Risiko besteht,
daß die
Speicherschlange voll werden könnte.
Bei einer relativ kurzen Schlange wird dieses Risiko real, sobald
die Ladespeichereinheit des Hauptprozessors ein Datenobjekt nicht annehmen
kann und demnach wird in bevorzugten Ausführungsformen das Stopsignal
an den Coprozessor gesendet, sobald die Ladespeichereinheit des
Hauptprozessors Daten nicht annehmen kann.
-
Manchmal
ist es erforderlich, daß der
Hauptprozessor in der Lage ist, Befehle in der Coprozessorpipeline
zu identifizieren bzw. zu kennzeichnen. Dies ist beispielsweise
für das
Spülen
erforderlich, so daß der Hauptprozessor
dem Coprozessor anzeigen kann, welche Befehle ausgespült werden
sollen. Der Hauptprozessor gibt daher jedem an den Coprozessor gesendeten
Befehl ein Tag (einen Anhänger),
das in bevorzugten Ausführungsformen
aus einem Vorrat von Werten entnommen wird, welcher groß genug
ist, so daß alle
Tags in der Pipeline jederzeit eindeutig sind.
-
In
bevorzugten Ausführungsformen
enthält
jedes Token ein Tag, welches den Coprozessorbefehl identifiziert,
auf welchen das Token sich bezieht.
-
Dementsprechend
ist in bevorzugten Ausführungsformen
der Hauptprozessor in der Weise betreibbar, daß, wenn es erforderlich ist,
Coprozessorbefehle sowohl aus der ersten als auch aus der zweiten
Pipeline auszuspülen,
er ein Spülsignal
an den Coprozessor rundsendet, welches das Tag kennzeichnet, das
sich auf den ältesten
Befehl bezieht, der ausgespült
werden soll, wobei der Coprozessor in der Lage ist, diesen ältesten Befehl
anhand des Tags zu identifizieren und aus der zweiten Pipeline diesen ältesten
Befehl und alle späteren Befehle
innerhalb des Coprozessors auszuspülen.
-
Weiterhin
werden in bevorzugten Ausführungsformen
die mindestens eine oder eine oder mehrere der Synchronisierungsschlangen
in Reaktion auf das Spülsignal
ausgespült,
wobei das Tag verwendet wird, um zu kennzeichnen, welche Token innerhalb
der Schlange ausgespült
werden sollen.
-
In
bevorzugten Ausführungsformen
wird der Spülmechanismus
vereinfacht, wenn aufeinanderfolgende Coprozessorbefehle zusammenhängende bzw.
kontinuierlich aufeinanderfolgende Tags haben. Dies wird in bevorzugten
Ausführungsformen
erreicht, indem die Tagnummer lediglich dann schrittweise erhöht wird, wenn
der Befehl, der an den Coprozessor weitergeleitet wird, ein Coprozessorbefehl
ist. Dies geschieht nach dem Senden des Befehls und demnach ändert sich
das Tag, nachdem ein Coprozessor gesendet worden ist und nicht vorher.
In bevorzugten Ausführungsformen
ist es nicht möglich,
das Tag um eine Stufe bzw. einen Schritt heraufzusetzen, bevor der
Befehl gesendet wird, da der Hauptprozessor noch keine Zeit gehabt
hat, den Befehl zu decodieren, um festzustellen, um welche Art von
Befehl es sich handelt. Wenn die Coprozessordecodierungsstufe die
Befehle, die keine Coprozessorbefehle sind, entfernt, so verbleibt
darin ein Befehlsstrom, der zusammenhängende bzw. aufeinanderfolgende
Tags hat.
-
Es
versteht sich, daß die
Synchronisierungsschlangen eine Vielfalt von Formen annehmen können. In bevorzugten
Ausführungsformen
weist jedoch jede Synchronisierungsschlange einen First-In-First-Out(FIFO)-Puffer
auf, der eine vorbestimmte Anzahl von Einträgen zum Speichern von Token
hat. In bevorzugten Ausführungsformen
hat jede der Schlangen außer
der Ladeschlange drei Einträge
oder "Slots" für das Speichern
von Token. Wie zuvor bereits erwähnt,
wird die Ladeschlange bevorzugte Ausführungsformen vorzugsweise mit
einem Doppelpuffer versehen.
-
In
gewissen Ausführungsformen
kann eine Mehrzahl von Coprozessoren bereitgestellt werden, wobei jede
Synchronisierungsschlange eine Pipelinestufe in dem Hauptprozessor
mit einer Pipelinestufe in einem der Coprozessoren verbindet. Aus
Gründen
der Ökonomie
wird in bevorzugten Ausführungsformen
sichergestellt, daß so
wenig wie möglich
von der Coprozessorschnittstelle dupliziert wird. Insbesondere sollten
die Coprozessoren in bevorzugten Ausführungsformen die Längen-, Annahme-
und Speicherdatenschlangen, die durch den Hauptprozessor aufrecht
erhalten werden, gemeinsam verwenden. Wenn diese Schlangen gemeinsam
verwendet werden, kann zu einem gegebenen Zeitpunkt jeweils nur
ein Coprozessor die Schlangen verwenden, was am einfachsten dadurch
sichergestellt wird, daß man
nur einem Coprozessor erlaubt, zu irgendeinem gegebenen Zeitpunkt
aktiv zu sein. Dieses ist jedoch im allgemeinen keine wesentliche
Einschränkung,
da allgemein gesprochen zu einem gegebenen Zeitpunkt nur ein Coprozessor
in Gebrauch ist. Genauer gesagt wird ein Prozessor typischerweise über eine
Treibersoftware getrieben bzw. angesteuert, die nur einen Coprozessor
ansteuert. Aufruf an die Treibersoftware und Antworten von dieser
stellen generell sicher, daß es mehrere
Kernbefehle zwischen der Verwendung eines Coprozessors und der Verwendung
eines anderen Coprozessors gibt.
-
Es
versteht sich, daß die
auf Token basierende Pipelinesynchronisierungstechnik der vorliegenden
Erfindung sowohl auf asynchrone als auch auf synchrone Modelle von
Datenverarbeitungsvorrichtungen anwendbar ist. In bevorzugten Ausführungsformen
ist jedoch die Datenverarbeitungsvorrichtung ein synchrones Modell,
so daß die
Anordnung der Token in der Schlange durch die vorbestimmte Pipelinestufe
und der Empfang aus der Schlange durch die Partnerpipelinestufe
auf die wechselnden Flanken eines Taktzyklus hin bewirkt werden.
-
Unter
einem zweiten Aspekt gesehen, stellt die vorliegende Erfindung ein
Verfahren zur Synchronisierung zwischen Pipelines in einer Datenverarbeitungsvorrichtung
bereit, wobei die Datenverarbeitungsvorrichtung einen Hauptprozessor
aufweist, der in der Weise betreibbar ist, daß er eine Folge von Befehlen
ausführt, und
einen Coprozessor aufweist, der in der Weise betreibbar ist, daß er Coprozessorbefehle
in der Folge von Befehlen ausführt,
wobei der Hauptprozessor eine erste Pipeline aufweist, die eine
erste Mehrzahl von Pipelinestufen hat, und der Coprozessor eine
zweite Pipeline aufweist, die eine zweite Mehrzahl von Pipelinestufen hat,
und wobei jeder Coprozessorbefehl in der Weise ausgelegt ist, daß er sowohl
durch die erste Pipeline als auch durch die zweite Pipeline geleitet
wird, wobei das Verfahren die Schritte aufweist: (a) Verbinden einer
vorbestimmten Pipelinestufe in einer der Pipelines mit einer Partnerpipelinestufe
in der anderen der Pipelines über eine
Synchronisierungsschlange, (b) Anordnen eines Token in der Synchronisierungsschlange,
wenn die vorbestimmte Pipelinestufe einen Coprozessorbefehl verarbeitet,
(c) nach Empfang des Token von der Synchronisierungsschlange durch
die Partnerpipelinestufe Verarbeiten des Coprozessorbefehls innerhalb
der Partnerpipelinestufe, wodurch die Synchronisierung der ersten
und zweiten Pipelines zwischen der vorbestimmten Pipelinestufe und
der Partnerpipelinestufe erhalten wird.
-
Kurzbeschreibung der Figuren
-
Die
vorliegende Erfindung wird lediglich beispielhaft unter Bezug auf
eine bevorzugte Ausführungsform
derselben beschrieben, wie sie in den beigefügten Figuren veranschaulicht
wird, wobei:
-
1 ein
Blockdiagramm eines Systems ist, in welchem die Synchronisierungstechniken
von bevorzugten Ausführungsformen
der vorliegenden Erfindung implementiert sein können,
-
2A ein
Diagramm ist, welches schematisch einen Pipelineprozessor gemäß bevorzugten
Ausführungsformen
der vorliegenden Erfindung zeigt,
-
2B ein
Diagramm ist, welches schematisch einen Pipelinecoprozessor gemäß bevorzugten
Ausführungsformen
der vorliegenden Erfindung zeigt,
-
3 ein
Diagramm ist, welches schematisch die Pipelinestufen des Prozessorkerns,
die Pipelinestufen des Coprozessors und die Synchronisierungssteuerschlangen
veranschaulicht, welche eine Kommunikation zwischen diesen gemäß bevorzugten
Ausführungsformen
der vorliegenden Erfindung bereitstellen,
-
4 ein
detaillierteres Blockdiagramm ist, welches die verschiedenen Pipelines
und die sie verbindenden Schlangen darstellt,
-
5 ein
Diagramm ist, welches schematisch die Kommunikation zwischen der
Ladespeichereinheit des Hauptprozessors und der Coprozessorpipeline
für Lade-
und Speichervorgänge
zeigt,
-
6 ein
Diagramm ist, welches den Aufbau der Schlangen gemäß bevorzugten
Ausführungsformen der
vorliegenden Erfindung zeigt,
-
7 ein
Zeitablaufdiagramm ist, welches das Lesen und Schreiben einer Schlange
zeigt,
-
8 ein
Diagramm ist, welches das Konzept der Stromsteuerung veranschaulicht,
wie es in bevorzugten Ausführungsformen
der vorliegenden Erfindung verwendet wird,
-
9 ein
Diagramm ist, welches veranschaulicht, wie die Befehlsschlange in
einer bevorzugten Ausführungsform
der vorliegenden Erfindung implementiert wird,
-
10 ein
Diagramm ist, welches schematisch den Normalbetrieb der Wechselwirkungen
zwischen den Kern- und Coprozessorpipelines zeigt,
-
11 ein
Diagramm ist, welche darstellt, wie Kern- und Coprozessorpipelines
sich verhalten, wenn der Coprozessor in seiner Ausgabestufe gemäß einer
Ausführungsform
der vorliegenden Erfindung anhält,
-
12 ein
Diagramm ist, welches veranschaulicht, wie die Kern- und Coprozessorpipelines
sich verhalten, wenn ein Coprozessorbefehl gemäß einer Ausführungsform
der vorliegenden Erfindung durch den Kern in seiner Ausgabestufe
gelöscht
wird,
-
13 ein
Diagramm ist, welches darstellt, wie die Kern- und Coprozessorpipelines
sich verhalten, wenn ein Coprozessorbefehl gemäß einer Ausführungsform
der vorliegenden Erfindung von dem Coprozessor abprallt,
-
14 ein
Diagramm ist, welches die Art und Weise zeigt, in welcher die Pipeline
mit einem Befehl umgehen, der durch den Kern gelöscht wird und den außerdem der
Coprozessor gemäß einer
Ausführungsform
der vorliegenden Erfindung abprallen läßt,
-
15 ein
Diagramm ist, welches zeigt, wie die Kern- und Coprozessorpipelines
sich verhalten, wenn der Kern gemäß einer Ausführungsform
der vorliegenden Erfindung ein Spülsignal an den Coprozessor
sendet,
-
16 ein
Diagramm ist, welches schematisch den in einer Ausführungsform
der vorliegenden Erfindung verwendeten Schlangenspülansatz
darstellt,
-
17 ein
Diagramm ist, welches eine Befehlswiederholung für einen vektorisierten Ladebefehl "C" gemäß einer
Ausführungsform
der vorliegenden Erfindung zeigt,
-
18 ein
Diagramm ist, welches schematisch das Puffern von Ladedaten gemäß einer
Ausführungsform
der vorliegenden Erfindung zeigt, und
-
19 ein
Diagramm ist, welches darstellt, wie ein Ladebefehl in dem Kern
in die Ladespeichereinheit des Kernes eintritt und die Erzeugung
eines Objektes von Ladedaten auslöst, welches dann gemäß einer
Ausführungsform
der Erfindung an den Coprozessor weitergeleitet wird.
-
BESCHREIBUNG BEVORZUGTER AUSFÜHRUNGSFORMEN
-
1 ist
ein Blockdiagramm, welches ein Datenverarbeitungssystem veranschaulicht,
in welchem die Synchronisierungstechniken bevorzugter Ausführungsformen
der vorliegenden Erfindung verwendet werden können. Wie in 1 dargestellt,
ist ein Prozessorkern 40 mit einem Befehlscache oder einer
anderen Speichereinrichtung 10 verbunden, wobei der Prozessorkern 40 auf
erforderliche Befehle daraus Zugriff hat. Innerhalb des Prozessorkerns 40 ist
eine Heranholeinheit 20 vorgesehen, um über einen Pfad 50 Anforderungen nach
Befehlen auszugeben, die durch die Heranholeinheit als diejenigen
bestimmt werden, die für
den mit Pipeline versehenen Prozessor 30 erforderlich sind.
Der Befehlsspeicher 10, aus welchem die Befehle geholt werden,
liefert dann die Befehle über
den Pfad 60 an die Heranholeinheit 20, wobei sie
von dort über
Pfad 70 in den Pipelineprozessor 30 geleitet werden.
Wenn Befehle ausgeführt
werden, bildet der Pipelineprozessor 30 eine Schnittstelle
zu Registern der Registerbank 35, die Datenwerte enthält, die
durch die Befehle manipuliert werden sollen. Ladebefehle können verwendet
werden, um Datenwerte aus dem Datenspeicher 87 in die Registerbank
zu laden, und Speicherbefehle können
verwendet werden, um Datenwerte aus der Registerbank 35 in
dem Datenspeicher 87 zu speichern. Datenverarbeitungsbefehle
können
dann mit den Datenwerten ausgeführt
werden, die in bestimmten Registern der Registerbank 35 gespeichert
sind.
-
Einige
Befehle in der Folge von Befehlen, die durch die Heranholeinheit
herangeholt wurden, können Verzweigungsbefehle
sein, die dafür
ausgelegt sind, eine Veränderung
in dem Befehlsstrom zu bewirken. Einige Verzweigungsbefehle spezifizieren
die Zieladresse für
die Verzweigung innerhalb des Opcodes (Operationscodes) des Befehles
selbst und demnach kann eine gewisse Vorhersage dieser Verzweigungsbefehle
erfolgen, um die Heran holeinheit 20 dabei zu unterstützen zu
entscheiden, welcher Befehl im Anschluß an einen solchen Verzweigungsbefehl
herangeholt werden soll. Solche Verzweigungsvorhersage wird durch
die Verzweigungsvorhersagelogik 25 ausgeführt. Wenn
die Verzweigungsvorhersagelogik 25 vorhersagt, daß ein solcher
Verzweigungsbefehl ausgeführt
wird und daß demnach
die Abzweigung genommen wird, wird die Heranholeinheit 20 so
ausgelegt, daß sie
als den nächsten
Befehl den durch die Zieladresse angegebenen Befehl holt. Wenn umgekehrt
die Verzweigungsvorhersagelogik 25 vorhersagt, daß der Verzweigungsbefehl
nicht ausgeführt
werden wird, und daß dementsprechend
die Abzweigung nicht genommen wird, holt die Heranholeinheit 20 als
nächsten
Befehl den Befehl bei der nächstfolgenden
Adresse in dem Befehlsspeicher 10.
-
Offensichtlich
ist es wichtig, daß dann,
wenn innerhalb des Pipelineprozessors 30 letztlich entschieden wird,
ob irgendwelche derartige Verzweigungsbefehle ausgeführt werden,
die relevante Information an die Heranholeinheit 20 zurückgeleitet
wird, wenn die Heranholeinheit 20 irgendeine Aktion unternehmen
soll. Beispielsweise ist es für
vorhersehbare Verzweigungsbefehle notwendig, die Heranholeinheit 20 zu
informieren, wenn die getroffene Vorhersage falsch war. Wenn beispielsweise
die Verzweigungsvorhersagelogik 25 vorhergesagt hat, daß die Abzweigung
genommen wird und damit den Befehl von der Zieladresse geholt hat,
wenn dann jedoch der Befehl anschließend durch den Pipelineprozessor 30 ausgeführt wird,
so wird festgestellt, daß die
Verzweigungsanweisung tatsächlich
nicht ausgeführt
werden soll, so muß eine
Wiederherstellungsadresse als ein Zwangs-PC-Signal über den
Pfad 80 ausgegeben werden, und in diesem Fall ist die Wiederherstellungsadresse
die nächstfolgende
Adresse, die auf den Verzweigungsbefehl folgt. In ähnlicher
Weise muß, wenn
die Verzweigungsvorhersagelogik 25 vorhergesagt hat, daß der Verzweigungsbefehl
nicht ausgeführt wird,
tatsächlich
jedoch der Pipelineprozessor 30 anschließend bestimmt,
daß er
ausgeführt
werden soll, wiederum eine Wiederherstellungsadresse über den
Pfad 80 an die Heranholeinheit 20 ausgegeben werden,
wobei in diesem Fall die Wiederherstellungsadresse die Zieladresse
für die
Verzweigung ist. Anderenfalls ist, für den Fall, daß die Verzweigungsvorhersage
korrekt war, keine weitere Aktion erforderlich und kein Zwangs-PC-Signal muß über den
Pfad 80 an die Heranholeinheit 20 ausgegeben werden.
-
Ein
Grund dafür,
daß Verzweigungsbefehle
tatsächlich
nicht ausgeführt
werden, liegt darin, daß Verzweigungsbefehle
oftmals als bedingte Befehle bzw. Anweisungen spezifiziert sind,
die nur dann ausgeführt werden,
wenn zum Zeitpunkt der Ausführung
eine bestimmte Bedingung bzw. ein bestimmter Zustand vorliegt. Diese
unterschiedlichen Zustände
werden unter Bezug auf einen Satz von Zustandscodes spezifiziert
und geben damit an, daß eine
oder mehrere der Zustandscodes einen bestimmten Wert haben müssen, wenn
der Befehl ausgeführt
werden soll. Wenn es möglich
ist, gewisse Vorhersagen über
den Status der Zustands- bzw. Bedingungscodes zu machen und dementsprechend
eine Vorhersage zu tref fen, ob ein Verzweigungsbefehl ausgeführt werden
wird, kann letztlich nur dann, wenn der Verzweigungsbefehl einen
vorbestimmten Punkt innerhalb des Pipelineprozessors 30 erreicht
hat, die vollständige
Auswertung der Zustands- bzw. Bedingungscodes vorgenommen werden,
da die Zustandscodes durch einzelne Befehle für den Zustandscode in der Befehlssequenz
aktualisierbar sind und damit der Status der Zustandscodes sich
im Verlaufe der Zeit verändert.
-
Gewisse
Befehle innerhalb der Befehlssequenz können auch Coprozessorbefehle
sein, die innerhalb des Pipelineprozessors 130 des Coprozessors 110 ausgeführt werden
sollen. Derartige Coprozessorbefehle werden über den Pfad 95 an
den Pipelineprozessor 130 des Coprozessors 110 ausgegeben.
Der Pipelineprozessor 130 führt dann den Coprozessorbefehl
aus, ruft die Coprozessorregister 120 auf, soweit dies
erforderlich ist, und, wenn die Ergebnisse des Coprozessorbefehles
an den Kern 40 zurückgegeben
werden müssen, so
werden sie über
den Pfad 100 zurückgegeben.
-
Auch
wenn der Coprozessorbefehl über
den Pfad 95 an den Coprozessor weitergeleitet wird, so
wird er auch über
die verschiedenen Pipelinestufen des Pipelineprozessors 30 des
Kerns 40 weitergeleitet, um beispielsweise eine Feststellung
zu treffen, ob dieser Coprozessorbefehl tatsächlich ausgeführt werden
sollte, wenn dieser Coprozessorbefehl ein bedingter Coprozessorbefehl
ist, der von dem Status der Zustandscodes zum Zeitpunkt der Ausführung abhängig ist.
Steuersignale werden zwischen dem Pipelineprozessor 30 und dem
Pipelineprozessor 130 über
vorbestimmte Schlangen weitergeleitet, um sicherzustellen, daß das Fortschreiten
eines Coprozessorbefehls durch beide Pipelines an den erforderlichen
Punkten synchron bleibt. Dieser Vorgang wird später noch genauer erläutert.
-
2A ist
ein Blockdiagramm, welches gemäß bevorzugten
Ausführungsformen
der vorliegenden Erfindung die verschiedenen Pipelinestufen der
innerhalb des Pipelineprozessors 30 nach 1 vorgesehenen Pipeline
bereitstellt. Bei der Stufe 190 wird ein Befehl 20 herangeholt,
woraufhin er in der Decodierstufe 200 decodiert wird und
anschließend
an eine Ausgabestufe 210 weitergeleitet wird, wo die für den Befehl
erforderlichen Daten von geeigneten Registern der Registerbank 35 erhalten
werden.
-
An
diesem Punkt verzweigt der Prozessor in zwei untergeordnete Pipelines,
wobei die erste untergeordnete Pipeline die Pipelinestufen 220, 230, 240 und 250 enthält und die
zweite untergeordnete Pipeline die Pipelinestufen 260, 270, 280 und 290 enthält. Die
erste Teilpipeline ist eine Lade-/Speicherpipeline 222,
die hier auch als eine Lade-/Speichereinheit (LSU) bezeichnet wird.
Die Lade-/Speicherpipeline wird verwendet, um Lade- oder Speicheranweisungen
zu verarbeiten und dementsprechend wird ein Lade- oder Speicherbefehl
von der Pipelinestufe 210 in die Pipelinestufe 220 geleitet.
Der bei der Pipelinestufe 220 durchgeführte Prozeß besteht darin, die für den Speicherzugriff
erforderliche Adresse zu erzeugen, die verwendet wird, um den Lade-
oder Speichervorgang zu bewirken. Dieser Prozeß umfaßt typischerweise das Addieren
der Werte von zwei Registern oder das Addieren des Wertes eines
Registers mit einem spontanen bzw. unmittelbar vorliegenden Wert,
der innerhalb des Befehls angegeben wird, etc. Stufen 230 und 240 sind
zwei Speicherpipelinestufen, während
welcher der aufgrund des Lade- oder Speicherbefehls erforderliche
Speicherzugriff stattfindet. In bevorzugten Ausführungsformen der Erfindung,
wie sie in 2A dargestellt sind, gibt es
zwei Speicherstufen 230, 240, da Lade- und Speichervorgänge in derartigen
Ausführungsformen
typischerweise zumindest zwei Taktzyklen benötigen.
-
Wenn
der Speicherzugriff abgeschlossen ist, so bewegt sich der Befehl
von der Pipelinestufe 240 des Speichers 2 in die Rückschreibestufe 250,
die auch als eine Ruhestandsstufe bezeichnet wird. In der Rückschreibestufe
wird die Registerbank 35 für das Aktualisieren vorbereitet,
um das Ergebnis des Lade- oder Speichervorganges zu reflektieren,
wobei diese Aktualisierung am Ende der Rückschreibestufe stattfindet.
-
Irgendwelche
arithmetischen Logikbefehle, wie z. B. Additions- oder Subtraktionsbefehle,
werden von der Pipelinestufe 210 in die Pipelinestufe 260 der
zweiten untergeordneten Pipeline 262 geleitet (die hier
auch als die ALU-Pipeline bezeichnet wird), wobei diese Stufe eine
Verschiebungslogik bereitstellt, um irgendeine erforderliche Verschiebung
der Operanden zu ermöglichen,
die ausgeführt
werden soll. Der Befehl wird dann in die Pipelinestufe 270 geleitet,
welche eine arithmetische Logikeinheit für die Ausführung dieses arithmetischen
Logikbefehls beinhaltet. Nach dieser Ausführungsstufe wird der Befehl
an die Sättigungsstufe 280 der Pipeline
weitergeleitet, wo irgendeine erforderliche Sättigung des Ergebnisses durchgeführt wird.
Beispielsweise erfordern einige arithmetische Logikbefehle, daß das Ergebnis
bis auf eine vorbestimmte Anzahl von Bits gesättigt bzw. aufgefüllt wird
und damit beispielsweise erfordert, daß ein 16 Bit-Ergebnis auf ein
9 Bit-Ergebnis gesättigt
wird. Ein solcher Prozeß wird
innerhalb der Pipelinestufe 280 ausgeführt. Nach irgendeiner erforderlichen
Sättigung
wird der Befehl dann an die Rückschreibestufe 290 weitergeleitet,
die hier auch als eine Ruhestandsstufe bezeichnet wird. Wie zuvor
bereits unter Bezug auf die Rückschreibestufe 250 beschrieben,
besteht der Zweck der Rückschreibestufe
darin, den Zustand der Datenverarbeitungsvorrichtung zu aktualisieren und
insbesondere die Registerbank 35 zu aktualisieren, was
das Ergebnis der Ausführung
des Befehls in der Rückschreibestufe
betrifft.
-
2B veranschaulicht
die verschiedenen Pipelinestufen der innerhalb des Pipelineprozessors 130 des
Coprozessors 110 nach 1 gemäß bevorzugten
Ausführungsformen
der vorliegenden Erfindung vorgesehenen Pipeline. Die ersten beiden
Stufen sind eine Decodierstufe 205 und eine Ausgabestufe 215.
Der Befehl durchläuft
dann fünf
Ausführungsstufen 225, 235, 245, 255 und 265,
woraufhin der Befehl in eine Rückschreibestufe 275 eintritt,
wo die Coprozessorregister 120 mit Blick auf das Ergebnis
der Ausführung
des Coprozessorbefehls in der Rückschreibestufe
aktualisiert werden.
-
Wie
noch genauer unter Bezug auf die verbleibende Diagramme diskutiert
wird, werden verschiedene Schlangen zwischen bestimmten Pipelinestufen
des Prozessorkerns und des Coprozessors bereitgestellt, um zu ermöglichen,
daß eine
Synchronisierung zwischen den Pipelinestufen stattfindet, die jeweils
durch eine Schlange verbunden sind, welche das Token-basierte Schema
nutzen. Genauer gesagt können
eine oder mehrere Steuerschlangen 285 zwischen der ALU-Pipeline 262 und
der Coprozessorpipeline bereitgestellt werden und zusätzlich können eine
oder mehrere Datenschlangen 295 zwischen der LSU-Pipeline 222 und
dem Kern sowie der Coprozessorpipeline vorgesehen werden.
-
Eine
Beschreibung der auf Token beruhenden Pipelinesynchronisierungstechnik,
die in bevorzugten Ausführungsformen
der vorliegenden Erfindung verwendet wird, um sicherzustellen, daß die Pipelines
für kritische
Informationsübertragungen
korrekt synchronisiert sind, wird nunmehr unter Bezug auf die 3 bis 19 bereitgestellt.
In der folgenden Beschreibung wird der Hauptprozessor als der Kern
bezeichnet und der Coprozessor wird auch als "GCP" oder
als ursprünglicher
Coprozessor bezeichnet. Die Beschreibung der 3 bis 19 wird
unter Bezug auf die folgenden numerierten Paragraphen bereitgestellt.
-
1 EINLEITUNG
-
Der
Kern muß möglicherweise
Befehle an eine Anzahl von Coprozessoren weiterleiten und Daten
mit diesen austauschen. Diese Coprozessoren sollen mehr oder weniger
im Gleichschritt mit dem Kern laufen und weisen in ähnlicher
Weise wie der Kern eine Pipelineanordnung auf. Befehle werden aus
der Heranholstufe der Kernpipeline geleitet, um durch den Coprozessor
decodiert zu werden, welcher dann den decodierten Befehl auf seine
Pipeline schickt. Coprozessorbefehle können durch den Kern gelöscht werden,
wenn ein Zustandscode fehlerhaft ist oder die gesamte Coprozessorpipeline
im Falle einer falsch vorhergesagten Verzweigung gespült wird.
Das Laden und Speichern von Daten muß auch zwischen der Kern-LSU
und der Coprozessorpipeline weitergeleitet werden.
-
Eine
Haupteinschränkung,
welcher die Coprozessorschnittstelle unterliegt, besteht darin,
daß sie über eine
Verzögerung
von zwei Zyklen arbeiten muß,
d. h. irgendein Signal, welches von dem Kern an den Coprozessor
oder umgekehrt geleitet wird, muß einen vollständigen Taktzyklus
erhalten, um von dem einen zu dem anderen weiterzuschreiten. Dies
bedeutet, daß ein
Signal, welches die Schnittstelle durchläuft, aus einem Register auf
einer Seite der Schnittstelle ausgetaktet und direkt in ein anderes
Register auf der anderen Seite eingetaktet werden muß, wobei
kein kombinatorischer Prozeß dazwischen
kommen darf. Diese Einschränkung
entsteht aufgrund der Tatsache, daß der Kern und der Coprozessor
einen beträchtlichen
Abstand voneinander haben können
und daß großzügige Zeittoleranzen
gewährt
werden müssen,
um Signallaufzeiten zu berücksichtigen.
Diese Verzögerung
in dem Signallauf macht es schwierig, eine Pipelinesynchronisierung
aufrecht zu erhalten, was ein eng gekoppeltes Synchronisationsverfahren
ausscheiden läßt.
-
Die
folgende Beschreibung erläutert
ein Token-basiertes Pipelinesynchronisationsverfahren, das einen
gewissen Schlupf zwischen den beiden Pipelines erlaubt, während es
doch sicherstellt, daß die
Pipelines für
kritische Transfers von Informationen korrekt ausgerichtet bzw.
synchronisiert sind.
-
2 BESCHREIBUNG
-
Die
GCP-Schnittstelle bewirkt eine lose Synchronisierung zwischen den
beiden Pipelines durch Austauschen von Token von einer Pipeline
zu der anderen. Diese Token durchlaufen Schlangen zwischen den Pipelines
und können
zusätzliche
Information tragen. In vielen Fällen
besteht der primäre
Zweck einer Schlange darin, Information über den Befehl, der verarbeitet
wird, zu tragen, oder um eine Pipeline über Ereignisse zu informieren,
die in der anderen auftreten. Token werden erzeugt, wann immer ein
Coprozessorbefehl aus einer relevanten Pipelinestufe in die nächste Stufe
geleitet wird. Diese Token werden durch die Partnerstufe in der
anderen Pipeline aufgenommen und werden verwendet, um zu ermöglichen,
daß der
entsprechende Befehl in dieser Stufe sich weiterbewegt. Die Bewegung
von Coprozessorbefehlen durch jede Pipeline wird durch die Bewegung
von Token entlang der verschiedenen Schlangen, welche die Pipelines
verbinden, exakt angepaßt.
Die generische Coprozessorschnittstelle ist demnach datengesteuert,
anstatt durch eine Steuerung gesteuert zu werden.
-
2.1 Coprozessorbefehle
-
Die
GCP muß möglicherweise
eine Anzahl von Befehlen ausführen,
die aus einem Satz von Befehlen genommen werden, welche für Coprozessoren
spezifisch sind. Ein gegebener Coprozessor darf möglicherweise
nicht alle möglichen
Coprozessorbefehle ausführen
und kann bzw. muß diejenigen
Befehle zurückweisen, die
er nicht handhaben kann. Tabelle 1 unten listet alle Coprozessorbefehle
auf, die durch einen bestimmten Prozessorkern unterstützt werden,
nämlich
einen der ARM-Prozessorkerne, welche von ARM Limited in Cambridge,
Vereinigtes Königreich,
entwickelt wurden, und sie liefert eine kurze Beschreibung jedes
Befehls.
Befehl | Datentransfer | vektorisiert | Beschreibung |
CDP | keiner | nein | verarbeitet
Information, die sich bereits im Coprozessor befindet |
MRC | speichern | nein | überträgt Information von
dem Coprozessor an die Kernregister |
MCR | laden | nein | überträgt Information aus
den Kernregistern zu dem Coprozessor |
MRRC | speichern | nein | überträgt Information von
dem Coprozessor an ein Paar von Registern in dem Kern |
MCRR | laden | nein | überträgt Information von
einem Paar von Registern im Kern zu dem Coprozessor |
STC | speichern | ja | überträgt Information von
dem Coprozessor in den Speicher – kann wiederholt werden, um einen
Vektor zu übertragen |
LDC | laden | ja | überträgt Information von
dem Speicher in den Coprozessor – kann wiederholt werden, um
einen Vektor zu übertragen |
Tabelle
1 – Coprozessorbefehle
-
Die
Coprozessorbefehle fallen in drei Hauptgruppen, nämlich Ladevorgänge, Speichervorgänge und Verarbeiten
von Befehlen. Die Lade- und Speicherbefehle ermöglichen, daß Information zwischen dem
Kern und dem Coprozessor weitergeleitet bzw. ausgetauscht wird.
Einige können
vektorisiert sein, d. h. sie ermöglichen,
daß mehrere
Werte in einem einzelnen Befehl übertragen
werden. Dies umfaßt
typischerweise die Übertragung
mehrerer Worte von Daten zwischen einem Satz von Registern in dem
Coprozessor und einem zusammenhängenden
Satz von Speicherstellen in dem Speicher. Andere Befehle, z. B.
MCR und MRC ermöglichen
die Übertragung
von Daten zwischen dem Kern und den Coprozessorregistern. Der CDP-Befehl
steuert die Ausführung
einer spezifizierten Operation mit Daten, die bereits innerhalb
des Coprozessors vorhanden sind, Schreiben des Ergebnisses zurück in ein
Coprozessorregister oder Verändern
des Zustandes des Coprozessors auf irgendeine andere Art und Weise.
Welche Operation ausgeführt
werden soll, kann durch Opcodefelder (Operationscodefelder) innerhalb
des Befehls angegeben werden.
-
Die
Kernpipeline handhabt alle Befehle, und zwar sowohl Kern- als auch
Coprozessorbefehle. Der Coprozessor andererseits behandelt nur Coprozessorbefehle,
so daß die
Coprozessorpipeline wahrscheinlich für einen beträchtlichen
Teil der Zeit leer ist.
-
2.2 Coprozessorpipeline
-
Die
GCP-Pipeline ist der Kernpipeline sehr ähnlich, jedoch fehlen ihr die
Heranholstufen. Befehle werden statt dessen von dem Kern in die
Decodierstufe der GCP-Pipeline weitergeleitet. Die Decodierstufe
decodiert dann den Befehl, und weist Befehle, die keine Co prozessorbefehle
sind und irgendwelche Coprozessorbefehle, die nicht die passende
Coprozessornummer enthalten, zurück.
Die Länge
irgendeiner vektorisierten Datenübertragung
wird ebenfalls an diesem Punkt festgestellt und an den Kern zurückgesendet.
Der decodierte Befehl läuft
dann in die Ausgabestufe. Diese Stufe entscheidet, ob diese bestimmte
Instanz des Befehls angenommen werden kann. Falls nicht, möglicherweise
weil sie ein nicht existierendes Register anspricht, läßt sie den
Befehl abprallen und teilt dem Kern mit, daß er nicht angenommen werden
kann. Wenn der Befehl sowohl gültig
ist als auch ausführbar
ist, so durchläuft
er die Ausführungspipeline
EX1 bis EX6. Am Grund der Pipeline, in EX6 (die hier auch als die
Rückschreibe(WB)-Stufe
bezeichnet wird) wartet der Befehl darauf, in den Ruhezustand versetzt
zu werden, was er tun kann, wenn er ein passendes Token von einer
anderen Schlange empfängt,
die durch den Kern versorgt wird.
-
2.3 Token-basierte Pipelinesynchronisierung
-
3 zeigt
die Kern- und GCP-Pipelines und die Synchronisierungsschlangen,
die eine Kommunikation zwischen diesen bilden. Jede Schlange ist
als ein sehr kurzer First-In-First-Out(FIFO)-Puffer
implementiert. Es ist keine ausdrückliche Stromsteuerung für die Schlangen
erforderlich, da die Pipelinelängen
zwischen den Schlangen die Anzahl von Objekten begrenzen, die irgendeine
Schlange zu irgendeinem gegebenen Zeitpunkt halten kann. Die dargestellte
Geometrie erfordert, daß nicht
mehr als drei Stufen bzw. Positionen oder Slots in jeder Schlange
verfügbar
sind. Die einzige Statusinformation, die erforderlich ist, ist ein
Flag, welches anzeigt, wenn die Schlange leer ist. Dies muß nur durch
das Empfangsende der Schlange überwacht
werden und es wird hierdurch festgelegt, ob die zugehörige Pipelinestufe
sich weiter bewegen kann. Irgendwelche Information, welche von der
Schlange getragen wird, kann gleichzeitig gelesen und bearbeitet
werden.
-
Die
Operation der Pipelinesynchronisierung wird durch Beschreiben des
Zweckes jeder der Schlangen beschrieben.
-
2.3.1 Befehlsschlange
-
Der
Kern leitet jeden Befehl, der seine Heranholstufe 190 verläßt, in die
Befehlsschlange 300. Im Idealfall sollte er nur die Coprozessorbefehle
weiterleiten, hat jedoch in dieser Stufe noch nicht die Zeit gehabt, den
Befehl zu decodieren. Es bleibt den GCP überlassen, den Befehl bei Ankunft
in seiner eigenen Decodierstufe 205 zu decodieren und die
Befehle, die keine Coprozessorbefehle sind, zurückzuweisen. Dies kann er ohne
Meldung ("schweigend") tun, da der Kern
keine Bestätigung
der Entfernung dieser Befehle benötigt, weil er in seiner Decodierstufe 200 den
Typ jedes Befehls bestimmt. Die Befehlsschlange 300 hat
eine Länge
von drei Positionen bzw. Slots.
-
2.3.2 Löschschlange
-
Möglicherweise
möchte
der Kern einen Befehl löschen,
den er bereits an den Coprozessor weitergeleitet hat. Dies kann
geschehen, falls der Befehl seine Zustandscodes nicht erfüllt, was
es erfordert, daß der Befehl
aus dem Befehlsstrom sowohl in dem Kern als auch in dem Coprozessor
entfernt wird. Die Löschschlange 310 trägt diese
Information herüber
zu dem Coprozessor; sie hat eine Länge von drei Slots.
-
2.3.3 Abschlußschlange
-
Die
Abschlußschlange 320,
die eine Länge
von drei Slots hat, hält
die Synchronisierung am Ende der Pipeline aufrecht, indem sie für jeden
Befehl in der Coprozessorpipeline die Erlaubnis bereitstellt, in
den Ruhezustand zu treten. Die Länge
der Coprozessorpipeline wird durch das Erfordernis bestimmt, den
Ruhezustand eines Coprozessorbefehls lange genug zu verzögern, um
Token, die am Ende der Abschlußschlange 320 erscheinen,
aufzunehmen bzw. zu erfüllen.
Lade- und Speicherbefehle benutzen die Abschlußschlangen nicht, so daß nur CDP-Befehle
diese Schlange benötigen.
Wie Lade- und Speicherbefehle in den Ruhezustand treten, wird in
einem späteren
Abschnitt erläutert.
-
2.3.4 Längenschlange
-
Wenn
ein Coprozessor einen Befehl decodiert hat, so weiß er, wie
lang ein vektorisierter Lade- oder Speichervorgang sein wird. Diese
Information wird mit dem Synchronisierungstoken über die Längenschlange 330 übermittelt.
Im allgemeinen dauert es länger,
einen Befehl zu empfangen, ihn zu decodieren und die Länge zu liefern,
als den Befehl außen
durch die Kernpipeline aus der Heranholstufe 190 in die
EX1-Stufe 260 (die hier auch als die Verschiebestufe bezeichnet
wird) weiterzuleiten, wo die Information benötigt wird. Die Verzögerung in
der Ankunft des Token an der EX1-Stufe des Kernes bewirkt, daß diese
Stufe für
einen Zyklus anhält. Dies
fügt einen
zusätzlichen
Zyklus zu der Ausführung
eines Coprozessorbefehls hinzu. Glücklicherweise tritt dieser
Nachteil nicht für
jeden Coprozessorbefehl auf und die Gründe hierfür werden in einem späteren Abschnitt
erläutert.
Die Längenschlange
hat eine Länge
von drei Slots.
-
2.3.5 Annahmeschlange
-
Der
Coprozessor kann in der Ausgabestufe entscheiden, daß er einen
Befehl nicht annehmen kann und leitet diese Information mit dem
Synchronisierungstoken die Annahmeschlange 340 entlang.
Wenn die EX2-Stufe 270 des Kernes (die hier auch als die
ALU-Stufe bezeichnet wird) ein Token empfängt, welches ihm mitteilt,
den entsprechenden Befehl zurückzuweisen,
so entfernt er den Befehl aus der Pipeline durch Löschen der
EX2-Stufe. Die Annahmeschlange hat eine Länge von drei Slots.
-
2.3.6 Rundsenden des Spülens
-
Wenn
eine Verzweigung falsch vorhergesagt wurde, so kann es nötig sein,
daß der
Kern beide Pipelines spülen
muß. Da
diese Aktion potentiell die gesamte Pipeline beeinflußt, wird
sie nicht in einer Schlange weitergeleitet, sondern wird von dem
Kern an den Coprozessor rundgesendet, wobei sie denselben Zeitablaufbeschränkungen
wie die Schlangen ausgesetzt ist. Wenn das Spülsignal von dem Coprozessor
empfangen wurde, so bewirkt es, daß die Pipeline und die Befehlsschlange 300 bis
hin zu dem Befehl, welcher das Spülen ausgelöst hat, gelöscht wird.
-
4 zeigt
eine detailliertere Ansicht des Kernes und der Pipelinestufen und
der Schlangen, welche die beiden miteinander verbinden. Die Lade-/Speichereinheit
(LSU) 222 ist ebenfalls dargestellt. Die LSU nimmt Datenspeicherungen
aus dem Coprozessor über
eine Speicherschlange 400 an und erzeugt Ladedaten, die über eine
Ladeschlange 410 an den Coprozessor zu senden sind.
-
Die
Befehlsschlange 300 und die Coprozessordecodierstufe 205 sind
getrennt dargestellt, tatsächlich bilden
sie jedoch in bevorzugten Ausführungsformen
einen einzigen Block. Der Grund hierfür wird in Abschnitt 2.5.4 erläutert.
-
2.4 Datenübertragung
-
Die
meisten Coprozessorbefehle führen
zu einer Übertragung
von Daten über
die Schnittstelle, entweder in Form von Einzelwerten oder als Vektoren.
Pfade sind daher für
die Datenweiterleitung erforderlich. Diese Pfade ermöglichen
es, daß die
Kern-LSU 222 mit der Coprozessorpipeline kommuniziert.
Der Coprozessor hat im allgemeinen keine getrennte LSU und dementsprechend
wird die Erzeugung von Daten für
Speichervorgänge
und der Empfang von Ladedaten direkt durch die Pipeline ausgeführt.
-
5 zeigt
eine Skizzierung der Kommunikation zwischen der Kern-LSU 222 und
der Coprozessorpipeline.
-
Lade-
und Speichervorgänge
werden in den folgenden Abschnitten getrennt beschrieben.
-
2.4.1 Ladevorgänge
-
Zu
ladende Daten werden über
die Schnittstelle durch die WB-Stufe 250 der Kern-LSU 222 gesendet und
von der EX6-Stufe 275 (d. h. der WB-Stufe) der Coprozessorpipeline
empfangen, wie es in 5 dargestellt ist. Da die Coprozessorpipeline über die
Ausgabestufe hinaus nicht anhalten kann, mit Ausnahme des Wartens
auf ein Abschlußtoken,
welches es dem Befehl in EX6 ermöglicht,
in den Ruhezustand zu treten, erreicht der Ladebefehl EX6 immer
synchron mit dem Eintreffen der Daten den Coprozessor. Die Ladeschlange kann
demnach durch einen Doppelpuffer 410 implementiert werden,
der dazu dient, die Daten mit der Ankunft des Ladebefehls im EX6
neu auszurichten. Dieser Doppelpuffer 410 ist in 4 dargestellt.
-
2.4.2 Speichervorgänge
-
Da
die Kern-LSU möglicherweise
nicht in der Lage ist, eine Annahme von Daten, so wie sie eintreffen, zu
garantieren, ist eine Speicherschlange 400 erforderlich.
Diese Schlange verbindet die DC1-Stufe 230 (die hier auch
als die Speicher 1-Stufe bezeichnet wird) der LSU 222 mit
der Ausgabestufe 215 des Coprozessors. Da unterschiedliche
Datenmengen übertragen
werden können,
ist eine Stromsteuerung auf der Speicherschlange 400 erforderlich,
um der LSU 222 zu ermöglichen,
zeitweise die Übertragung
von Daten zu stoppen. Dies wird später noch genauer erläutert.
-
2.5 VERWALTUNG DER TOKENSCHLANGE
-
Die
Tokenschlangen (d. h. alle Schlangen außer der Ladeschlange 410),
die allesamt eine Länge
von drei Slots haben und in identischer Weise funktionieren, sind
als kurze FIFOs implementiert. Die meisten Schlangen erfordern keine
Stromsteuerung aufgrund der selbstbeschränkenden Art der synchronisierten
Pipelines, jedoch muß die
Speicherdatenschlange 400 in der Lage sein, den Strom von
Information von dem Coprozessor in diese Schlange zu steuern. Die
Form der Schlangen und die Hinzufügung einer Stromsteuerung werden
in den folgenden Abschnitten erläutert.
-
2.5.1 Implementierung der Schlangen
-
Die
Schlangen-FIFOs können
in Form von drei Registern 600, 610, 620 implementiert
sein, wobei der aktuelle Ausgang durch Verwenden von Multiplexern 660, 670 ausgewählt wird. 6 veranschaulicht
diese Anordnung. Die Schlange besteht aus drei Registern 600, 610, 620,
welchen jeweils ein Flag 630, 640 bzw. 650 zugeordnet
ist, das anzeigt, ob das Register gültige Daten enthält. Neue
Daten werden in die Schlange verschoben, indem sie in den Puffer
A geschrieben werden, d. h. in das Register 600, und sie
bewegen sich weiter entlang der Schlange, solange das nächste Register
leer ist oder gerade leer wird. Wenn die Schlange voll ist, besetzen
die ältesten
Daten, die damit die ersten sind, die aus der Schlange gelesen werden,
den Puffer C und die neuesten besetzen den Puffer A.
-
Die
Multiplexer 660, 670 wählen auch das aktuelle Flag
aus, welches dann anzeigt, ob der ausgewählte Ausgang gültig ist.
-
2.5.2 Modifizierung der Schlangen
-
Mit
jedem Zyklus wird in die Schlange geschrieben, wobei der Puffer
A
600 die Daten annimmt, welche über die Schnittstelle ankommen
und das Flag
630 des Puffers A das Gültigkeitsbit annimmt, welches
zu den Daten gehört.
Solange die Schlange noch nicht voll ist, führt dieses zu keinerlei Verlust
an Daten, da der Inhalt des Puffers A während desselben Zyklus in den
Puffer B
610 verschoben wird. Wenn die Schlange voll ist,
so wird ein Laden des Puffers A
600 verhindert, um einen
Verlust von Daten zu vermeiden. Auf jeden Fall erfordert, wie bereits
erwähnt,
die Geometrie der in den
3 und
4 dargestellten
Pipelines, daß nicht
mehr als drei Slots in jeder Schlange verfügbar sind und auf diese Weise
sollten durch die Schnittstelle keine gültigen Daten geliefert werden,
wenn die Schlange voll ist, damit kein Datenverlust auftreten kann.
Der Zustand der drei Pufferflags
630,
640,
650 wird
verwendet, um zu entscheiden, welcher Puffer während jedes Zyklus den Ausgangswert
der Schlange bereitstellt. Der Ausgangswert wird immer durch den
Puffer bereit gestellt, welcher die ältesten Daten enthält. Dies
ist der Puffer C, wenn er gefüllt
ist, oder Puffer B, oder, wenn dieser leer ist, Puffer A. Ein einfacher
Prioritätsencoder,
welcher die drei Flags betrachtet, kann die korrekten Auswahlsignale
für die
Multiplexer zuführen.
Der Zustand der drei Flags kann außerdem festlegen, wie Daten
von einem Puffer in einen anderen in der Schlange verschoben werden.
Tabelle 2 zeigt, wie die drei Flags decodiert werden können ("X" zeigt einen Zustand, der irrelevant
ist).
Flag
C | Flag
B | Flag
A | S1 | S0 | Bemerkungen |
0 | 0 | 0 | x | x | Schlange
ist leer |
0 | 0 | 1 | 0 | 0 | B ← A |
0 | 1 | 0 | 0 | 1 | C ← B |
0 | 1 | 1 | 0 | 1 | C ← B, B ← A |
1 | 0 | 0 | 1 | x | |
1 | 0 | 1 | 1 | x | B ← A |
1 | 1 | 0 | 1 | x | |
1 | 1 | 1 | 1 | x | Schlange
ist voll – Eingabe
verhindert |
Tabelle
2 – Adressierung
der Schlangenpuffer
-
Es
versteht sich, daß neue
Daten in den Puffer A verschoben werden können, vorausgesetzt, die Schlange
ist nicht voll, selbst wenn sein Flag gesetzt ist, da der aktuelle
Inhalt des Puffers A in den Puffer B verschoben wird.
-
Wenn
die Schlange gelesen wird, muß das
Flag, welches zu dem Puffer gehört,
der die Information bereitstellt, gelöscht werden. Dieser Vorgang
kann mit einer Eingangsoperation kombiniert werden, so daß der Puffer
am Ende des Zyklus überschrieben
wird, während dessen
er den Ausgangswert der Schlange bereitstellt. Dies kann implementiert
werden durch Verwenden eines Lesefreischaltsignals, um das Flag
der ausgewählten
Stufe zu maskieren, was sie für
den Eingangswert verfügbar
macht. 7 liefert eine Veranschaulichung des Lesens und
Schreibens einer Schlange.
-
Vier
gültige
Eingangsgrößen ("Eins", "Zwei", "Drei" und "Vier") werden in die Schlange
geschrieben und in den Puffer A 600 getaktet, wenn sie
ankommen. Die 4 zeigt, wie diese Eingangswerte
von Puffer zu Puffer weitergetaktet werden, bis der erste Eingangswert
den Puffer C 620 erreicht hat. An diesem Punkt ist ein
Lesen aus der Schlange erforderlich. Da der Puffer C voll ist, wird
er ausgewählt,
um die Daten zuzuführen.
Während
er gelesen wird, ist er frei, einen weiteren Eingangswert aufzunehmen
und empfängt
auf diese Weise den Wert "Zwei" von dem Puffer B,
welcher den Wert "Drei" von dem Puffer A
empfängt.
Da der Puffer A durch Schreiben in dem Puffer B freigemacht wird,
kann er den Wert "Vier" von dem Eingang
annehmen.
-
2.5.3 Stromsteuerung
-
Wie
zuvor bereits angezeigt, erfordert das Speichern von Daten eine
Stromsteuerung, um zu ermöglichen,
daß der
Kern-LSU 222 den Strom von Daten aus dem Coprozessor anhält. Dies
geschieht durch Senden eines Stopsignals an den Coprozessor. Da
dieses Signal zwei Taktzyklen benötigt, um den Coprozessor zu
erreichen, muß es
erzeugt werden, sobald ein Risiko besteht, daß die Speicherschlange 400 voll
wird. Mit einer Schlangenlänge
von drei wird dieses Risiko real, sobald die Kern-LSU ein Datenobjekt
nicht annehmen kann. Das Stopsignal wird demnach immer dann an den
Coprozessor gesendet, wenn die LSU Daten nicht annehmen kann. Wegen
der Verzögerung
sendet der Coprozessor weiterhin Daten für zwei weitere Zyklen, nachdem
das Stopsignal erzeugt wurde. Wenn außerdem ein Objekt "in Bewegung" ist, wenn das Stopsignal gesendet
wird, muß die
Schlange drei Objekte annehmen, nachdem dieses gesendet wurde. 8 veranschaulicht
diese Situation.
-
Die
LSU nimmt die ersten beiden Übertragungen
A und B an. Sie ist jedoch nicht in der Lage, das dritte Objekt
C anzunehmen und erzeugt bei Punkt 800 das Stop-Signal.
Zu dem Zeitpunkt, zu welchem dieses Signal den Coprozessor am Punkt 810 erreicht,
hat er drei weitere Objekte C, D und E gesendet und hat bereits ein
sechstes Objekt, F, auf der Schnittstelle plaziert. Nachdem der
Coprozessor nunmehr das Stop-Signal empfangen hat, läßt er das
Objekt F auf der Schnittstelle. Da die LSU 222 dieses neue
Objekt sieht und nicht in der Lage ist, es anzunehmen, setzt sie
an Punkt 820 ein Flag "anhängig", um seine Gegenwart
aufzuzeigen. Wenn die LSU in der Lage ist, weitere Daten anzunehmen,
so beginnt sie damit, die Schlange zu entleeren und hebt das Stop-Signal
an Punkt 830 wieder auf. Zu dem Zeitpunkt, zu welchem die
Aufhebung an Punkt 840 den Coprozessor erreicht, entleert
sich die Schlange und der normale Dienst kann wieder aufgenommen werden.
-
2.5.4 Befehlsdecodierung
-
Der
Kern leitet jeden aus dem Speicher herangeholten Befehl über die
GCP-Schnittstelle
weiter, wo er in die Befehlsschlange 300 eintritt. Im Idealfall
sollte er nur die Coprozessorbefehle weiterleiten, hat jedoch in dieser
Stufe noch keine Zeit gehabt, den Befehl zu decodieren. Es bleibt
dem GCP überlassen,
den Befehl nach Ankunft in seiner eigenen Decodierstufe 205 zu
decodieren und die Befehle zurückzuweisen,
die keine Coprozessorbefehle sind. Er kann dies still (ohne Meldung)
tun, da der Kern keine Bestätigung
für das
Entfernen dieser Befehle benötigt,
weil er bis dahin in seiner eigenen Decodierstufe 200 den
Typ jedes Befehls bereits festgestellt hat. Dies bedeutet, daß der von
dem Kern empfangene Befehl decodiert werden muß, sobald er in die Befehlsschlange
eingetreten ist. Die Befehlsschlange 300 ist demnach eine
modifizierte Version der Standardschlange, welche einen Befehlsdecoder 205 beinhaltet. 9 zeigt,
wie die Befehlsschlange implementiert sein kann.
-
Der
Decoder 205 decodiert den in den Puffer A 900 geschriebenen
Befehl, sobald er eingetroffen ist, und die nachfolgenden Puffer
B 910 und C 920 empfangen eine decodierte Version
des Befehls in dem Puffer A. Das A-Flag 930 zeigt nunmehr
an, daß die
Daten in A gültig
sind und auch einen Coprozessorbefehl repräsentieren. Demnach werden Befehle,
die keine Coprozessorbefehle sind oder die nicht erkannt werden,
sofort aus der Befehlsschlange entfernt und niemals weitergeleitet.
Der Coprozessor vergleicht auch das Coprozessornummernfeld in einem
Coprozessorbefehl und vergleicht das Feld bzw. diese Nummer mit
seiner eigenen. Wenn die Nummern nicht zusammenpassen, ist der Befehl
ungültig.
-
2.6 Markierung von Befehlen
-
Manchmal
ist es notwendig, daß der
Kern in der Lage ist, Befehle in der Coprozessorpipeline zu identifizieren.
Dies ist erforderlich für
das Spülen
(welches im Einzelnen später
noch beschrieben wird), so daß der Kern
dem Coprozessor anzeigen kann, welche Befehle gespült werden
müssen.
Der Kern gibt daher jedem Befehl, der an den Coprozessor gesendet
wird, ein Tag (einen Anhänger),
welches aus einem Vorrat von Werten entnommen wird, der groß genug
ist, so daß zu
irgendeinem Zeitpunkt alle Tags in der Pipeline eindeutig sind.
Sechzehn Tags sind ausreichend viel, um dies in bevorzugten Ausführungsformen
zu erreichen, was ein Tagfeld von vier Bits erfordert. Jedesmal,
wenn einem Befehl ein Tag zugewiesen wird, wird die Tagnummer Modulo
16 erhöht,
um das nächste
Tag zu erzeugen.
-
Der
Spülmechanismus
wird vereinfacht, wenn aufeinanderfolgende Coprozessorbefehle unmittelbar aufeinanderfolgende
Tags haben. Dies wird erreicht, indem die Tagnummer nur dann heraufgesetzt
wird, wenn der Befehl, der an den Coprozessor weitergeleitet wird,
ein Coprozessorbefehl ist. Dies geschieht nach dem Senden des Befehls,
so daß das
Tag sich verändert,
nachdem ein Coprozessorbefehl gesendet worden ist, und nicht vorher.
Es ist nicht möglich,
das Tag um einen Schritt heraufzusetzen, bevor der Befehl gesendet wird,
da der Kern noch nicht die Zeit gehabt hat, den Befehl zu decodieren,
um festzustellen, um welche Art von Befehl es sich handelt. Wenn
die Coprozessordecodierstufe 205 die Befehle, die keine
Coprozessorbefehle sind, entfernt hat, so verbleibt in ihr ein Befehlsstrom,
der aufeinanderfolgende Tags trägt.
Die Tags können
auch verwendet werden, um zu verifizieren, daß die Folge von Token, die
sich entlang der Schlangen bewegen, mit der Folge von Befehlen zusammenpaßt, die
sich entlang der Kern- und Coprozessorpipelines bewegen.
-
3 BETRIEBSWEISE
-
Die
Art und Weise, in welcher die GCP-Schnittstelle funktioniert, wird
nun durch Veranschaulichung der verschiedenen Operationen erläutert, die
ausgeführt
werden können,
sowie der Ereignisse, die stattfinden können. Die Figuren, die zu den
Erläuterungen
gehören,
zeigen das Weiterleiten von Token entlang der verschiedenen Schlangen über die
Schnittstelle zwischen den beiden Pipelines. Die Identität jeder
Schlange kann abgeleitet werden durch Beobachten des Start- und
Endpunkts und gemäß 3.
-
3.1 Normalbetrieb
-
10 zeigt
den Normalbetrieb der Kern- und Coprozessorpipelines.
-
Im
Normalbetrieb leitet der Kern sämtliche
Befehle herüber
zu dem Coprozessor über
die Befehlsschlange 300 und setzt dann das Tag um einen
Schritt herauf, wenn der Befehl ein Coprozessorbefehl war. Der Coprozessor
decodiert den Befehl, verwirft ihn, wenn es sich nicht um einen
Coprozessorbefehl handelt oder wenn er die falsche Coprozessornummer
enthält.
Jeder Coprozessorbefehl durchläuft
dann die Pipeline und sendet ein Token über die Längenschlange 330,
während
er sich in die Ausgabestufe bewegt. Der Befehl bleibt dann in der
Ausgabestufe, bis er ein Token von der Löschschlange 310 empfangen
hat. Wenn das Löschtoken
nicht anfordert, daß der
Befehl gelöscht
wird, so bewegt er sich weiter zu der EX1-Stufe und ordnet ein Token
auf der Annahmeschlange 340 an. Der Befehl bewegt sich
dann entlang der Pipeline, bis er die EX6-Stufe erreicht hat. An
diesem Punkt wartet er darauf, ein Token von der Abschlußschlange 320 zu
empfangen, was ihm erlaubt, in den Ruhezustand überzutreten.
-
10 zeigt,
wie die Zeit, die erforderlich ist, damit der Coprozessor mit einem
Token entlang der Längenschlange 310 reagiert,
bewirkt, daß die
Kernpipeline in ihrer EX1-Stufe
wegen des Befehls A anhält,
während
sie auf das Token wartet. Diese Verzögerung bewirkt ihrerseits,
daß der
Befehl B in der Coprozessorpipeline Stufe EX1 auf das durch den
Kern gesendete Token wartet, wenn B seine Ausgangsstufe verläßt. Der
Befehl B kommt demnach bei EX6 verspätet an und befindet, daß das Token
in der Abschlußschlange
dort schon während
eines Zyklus gewartet hat. Zu dem Zeitpunkt, zu welchem der Befehl
C am Grund bzw. Ende der Pipeline ankommt, sind die beiden Pipelines
wieder synchronisiert.
-
Es
ist klar anhand der 10, daß die Ausführung einer Coprozessorpipeline
einen Zeitverlust von einem Zyklus verursacht, während ein Befehl in der Ausgabestufe
des Kernes anhält
bzw. wartet. Die nächsten zwei
Befehle ziehen jedoch aus diesem Warten einen Vorteil, so daß der Nachteil
abgemildert wird bzw. sich verteilt. Wenn alle Befehle, welche die
Pipeline durchlaufen, Coprozessorbefehle wären, gäbe es ein Anhalten bzw. eine
Unterbrechung bei jedem dritten Befehl, so daß im Ergebnis dieser Nachteil
ein Drittel eines Zyklus pro Coprozessorbefehl ausmacht. Wenn Coprozessorbefehle
in der Pipeline selten sind, tritt andererseits der Nachteil bzw.
die Verzögerung
bei einem einzelnen Zyklus bei jedem Coprozessorbefehl auf. Die
durchschnittliche Zeitverzögerung
nimmt daher ab, wenn der Anteil von Coprozessorbefehlen ansteigt.
-
3.2 Unterbrechungen
-
11 zeigt,
wie die Kern- und Coprozessorpipelines sich verhalten, wenn der
Coprozessor in seiner Ausgabestufe anhält bzw. unterbricht.
-
Das
Weiterleiten des Coprozessorbefehls A durch die Pipelines beginnt
auf normale Weise mit einem Austauschen von Token, während der
Befehl aus der Ausgabestufe des Kernes und der Decodierstufe des
Coprozessors austritt. Der Befehl hält dann in der Ausgabestufe
des Coprozessors an, verzögert
das Weiterleiten des Token an die EX2-Stufe des Kernes über die
Annahmeschlange 340, welche deshalb anhält bzw. unterbricht, während sie
darauf wartet. Wenn der Befehl sich schließlich in die EX1-Stufe des
Coprozessors weiter bewegt, nimmt er das Token, welches zuvor über die
Löschschlange 310 durch
den Befehl plaziert wurde, während
er die Ausgabestufe des Kerns verlassen hat, auf.
-
11 zeigt
auch, wie die Pipelines selbst die Anzahl von Objekten beschränken, die
zu irgendeinem gegebenen Zeitpunkt in einer Schlange warten können. Während der
Befehl A in EX2 angehalten wird und auf ein Token wartet, das auf
der Annahmeschlange 340 erscheinen soll, verhindert er,
daß sich
der Befehl C weiter bewegt und ein Token auf die Löschschlange 310 setzt,
obwohl der Befehl B dies bereits getan hat. Die Anzahl von Objekten,
die in der Löschschlange
wartet, ist demnach auf zwei beschränkt. Ähnliche Mechanismen arbeiten
in den anderen Schlangen, welche Token zwischen den Pipelines weiterleiten.
-
3.3 Löschen
-
12 zeigt,
wie die Kern- und Coprozessorpipelines sich verhalten, wenn ein
Coprozessorbefehl durch den Kern in seiner Ausgabestufe gelöscht wird.
-
Der
Befehl C durchläuft
normalerweise die Kernpipeline und sendet ein Token über die
Befehlsschlange 300, bis er die Ausgabestufe erreicht.
An diesem Punkt sendet er ein Token über die Löschschlange 310, welches
anzeigt, daß der
Befehl gelöscht
werden sollte. Nachdem dies geschehen ist, wandelt er sich in ein Phantom
innerhalb der Kernpipeline um (wie es durch die Schattierung angezeigt
wird) und durchläuft
die Pipeline wie normal, bis zur EX2-Stufe. Er tut dies derart,
daß er
die durch sein Gegenstück
in der Coprozessorpipeline über
die Längenschlange 330 und
die Annahmeschlange 340 gesendeten Token aufnehmen kann. Diese
sind bereits gesendet worden, bevor der Befehl in der Coprozessorschlange
des Token aus der Löschschlange 310 liest.
Dies hält
die Weiterleitung von Token über
die Löschschlange
korrekt, indem sicher gestellt wird, daß jeder sendende Befehl einen
entsprechenden empfangenden Befehl in der anderen Pipeline hat.
Der Befehl C kann schließlich
erlöschen,
wenn er die EX2-Stufe des Kernes verläßt, da er nicht mehr für die Aufnahme
von Token benötigt
wird. Der Befehl in der Coprozessorpipeline erlischt unmittelbar
nach dem Aufnehmen des Löschtoken
aus der Löschschlange 310 in
der EX1-Stufe.
-
3.4 Abprallen (Bounces)
-
13 zeigt,
wie sich die Kern- und Coprozessorpipelines verhalten, wenn der
Coprozessor einen Coprozessorbefehl abprallen läßt (nicht annimmt).
-
Der
Befehl C durchläuft
die Coprozessorpipeline in einer normalen Weise, indem er ein Token
an die Längenschlange 330 weiterleitet,
bis er die Ausgabestufe erreicht hat. An diesem Punkt sendet er
ein Token über
die Annahmeschlange 340, welches anzeigt, daß der Befehl
durch den Coprozessor nicht angenommen wird. Wenn dies geschehen
ist, so wandelt er sich in ein Phantom um und geht weiter die Pipeline
entlang wie normal, bis er die Stufe EX1 verläßt, wenn er erlischt. Er tut
dies so, daß er
das Token, welches durch sein Gegenstück in der Kernpipeline durch
die Löschschlange 310 gesendet
wurde, aufnehmen kann. Der Befehl in der Kernpipeline erlischt unmittelbar
nach dem Aufnehmen des Annahmetoken aus der Annahmeschlange 340 in
der EX2-Stufe.
-
Das
Verhalten von Befehlen, die in der Coprozessorpipeline abprallen,
ist nahezu dasselbe wie bei denjenigen, die in der Kernpipeline
gelöscht
werden und eine gute Veranschaulichung dieses Mechanismus wird durch
die Art und Weise geliefert, in welcher die Pipelines mit einem
Befehl umgehen, der durch den Kern gelöscht wird und den der Coprozessor
abprallen läßt. 14 zeigt
diese Situation.
-
In
dieser Situation haben beide Pipelines ein Phantom erzeugt, dessen
einziger Zweck darin besteht, Token von der anderen Pipeline aufzunehmen
oder, im Fall des Coprozessors, ein Tag für eine Übereinstimmung während eines
Spülens
bereitzustellen. Jeder empfängt
ein Token, das ihm mitteilt, daß er
erlöschen soll,
jedoch ist diese Information redundant, weil er als Phantom bereits
verfallen ist.
-
3.5 Spülen
-
15 zeigt,
wie die Kern- und Coprozessorpipelines sich verhalten, wenn der
Kern ein Spülsignal
an den Coprozessor sendet.
-
Ein
Spülen
kann ausgelöst
werden durch den Kern in jeder Stufe von der Ausgabe bis einschließlich EX4.
Diese Information könnte
durch eine Serie von Schlangen an die Coprozessorpipeline weitergeleitet
werden, jedoch würde
dieses Schema zu einer unnötigen
Vermehrung bzw. Aufweitung von Schlangen führen. Statt dessen wird ein
Markieren (mit Tag versehen) verwendet, so daß ein einzelnes Rundsendesignal
an den Coprozessor gesendet werden kann, welches den zu spülenden Befehl
kennzeichnet, indem das entsprechende Tag gesendet wird. Der Coprozessor
muß dann
alle Befehle finden, die dasselbe Tag haben oder später liegen
als das zu spülende
Tag und sie entfernen. Im Gegensatz zu Token, die eine Schlange
durchlaufen, hat ein Spülsignal
eine feste Verzögerung,
so daß die
Zeitablaufbeziehung zwischen einem Spülen in dem Kern und einem Spülen in dem
Coprozessor exakt bekannt ist.
-
In 15 löst der Befehl
C ein Spülen
aus, wenn er die EX1-Stufe in dem Kern erreicht hat. Er erlischt daher
bei dem nächsten
Zyklus und nimmt alle Befehle mit sich, die in der Pipeline auf
ihn folgen. Während
er erlischt, sendet er ein Rundesendesignal 450 (welches
durch den gestrichelten Pfeil in der Figur angedeutet wird) an die
Coprozessorpipeline. Wenn der Coprozessor dieses Signal empfängt, so
durchsucht er die Pipeline nach passenden Tags und entfernt alle
Befehle von diesem Punkt an aufwärts,
welche im Falle der 15 die Befehle C, D und F sind
(ein Kernbefehl in der Decodierstufe, der in diesem Fall schon dabei
war zu erlöschen).
Die Befehle A und B durchlaufen die Pipeline weiter, da sie vor
dem Spülpunkt
liegen.
-
Die
meisten der Tokenschlangen müssen
ebenfalls gespült
werden und dies kann ebenfalls unter Verwendung der an jedem Befehl
angehängten
Tags geschehen. Wenn eine Übereinstimmung
festgestellt wurde, bevor die Stufe am Empfangsende einer Tokenschlange
durchlaufen wurde, so wird die Tokenschlange einfach gelöscht. Ansonsten
muß sie
ordnungsgemäß gespült werden,
indem die Tags in der Schlange zur Übereinstimmung gebracht werden.
Dieser Vorgang muß mit
allen Schlangen mit Ausnahme der Abschlußschlange 320 durchgeführt werden,
einschließlich
der Speicherschlange 400. Der Coprozessor muß deshalb
die Befehlsschlange 300 und die Löschschlange 310 spülen und
der Kern muß die
Längenschlange 330,
die Annahmeschlange 340 und die Speicherschlange 400 spülen.
-
Der
Spülvorgang
kann durch den Coprozessor ausgeführt werden, sobald das Spülsignal
empfangen wurde und er wird vereinfacht, da die Schlangen keine
andere Operation ausführen.
Dies bedeutet, daß das Spülen nicht
mit Aktualisierungen von Schlangen kombi niert werden muß. Eine
Betrachtung der 15 zeigt, daß es einen einzigen Zyklus
im Anschluß an
ein Spülen
gibt, in welchem nichts geschieht, was die gelöschten Schlangen beeinflußt, was
eine gute Gelegenheit ist, den Vorgang des Schlangenspulens auszuführen. Dies gilt
jedoch nicht für
die Lade- oder Speicherschlangen, was später noch diskutiert wird.
-
Zu
einem Spülbefehl
gehört
ein Tagwert, welcher anzeigt, wo das Spülen beginnen sollte. Dieser
paßt zu
einem Tag, das durch jeden Befehl getragen wird. Wenn die Schlange
gespült
werden soll, wird jeder Puffer mit demselben oder einem neueren
Tag gelöscht. 16 bietet
eine Darstellung des Schlangespülens.
-
Jeder
Puffer 600, 610, 620 in der Schlange
hat einen Tagvergleicher 604, 614, 624,
der zu ihm gehört. Das
Spültag 632 wird
zu (von) jedem Vergleicher geliefert, damit es mit dem Tag 602, 612, 622 verglichen
wird, das zu jedem gültigen
Befehl gehört,
der in der Schlange gehalten wird. Wenn das Tag eines Puffers größer ist
als oder gleich ist wie das Spültag,
so muß das
gesamte Flag des Puffers in der Schlange gelöscht werden, um anzuzeigen,
daß er
nunmehr leer ist.
-
3.6 Ruhezustand
-
Wenn
ein Befehl den Grund bzw. das Ende der Coprozessorpipeline erreicht
hat, so möchte
er in den Ruhezustand eintreten. Wie er in den Ruhrzustand eintritt,
hängt von
der Art des Befehles ab und davon, ob er wiederholt wird oder nicht.
Ein CDP-Befehl kehrt in den Ruhezustand, wenn er ein Token in der
Abschlußschlange 320 findet,
das zu ihm paßt.
-
Die
Bedingungen, unter welchen Lade- und Speicherbefehle in den Ruhezustand
eintreten, werden in späteren
Abschnitten diskutiert.
-
4 DATENÜBERTRAGUNGEN
-
4.1 Allgemeines
-
Datenübertragungen
bzw. Datentransfers werden durch die LSU 222 auf der Kernseite
und durch die Pipeline selbst auf der Coprozessorseite verwaltet. Übertragungen
können
für einen
einzelnen Wert oder einen Vektor erfolgen. In letzterem Fall wandelt
der Coprozessor einen Mehrfachtransfer effektiv in eine Serie einzelner
Transfers um, indem der Befehl in der Ausgabestufe wiederholt wird.
Dies erzeugt eine Instanz des Lade- oder Speicherbefehls für jedes
zu übertragende
Objekt. Der Befehl bleibt in der Ausgabestufe des Coprozessors,
während
er wiederholt wird und erzeugt Kopien von sich selbst. Für Ladevorgänge durchlaufen
diese die Pipeline, so daß sie
jedes Datenobjekt aus der Ladeschlange 410 aufnehmen können, wenn
es in der EX6-Stufe ankommt. Für
Speichervorgänge
laufen die wiederholten Befehle nicht aus der Ausgabestufe heraus,
sondern verschwinden ebenso wie sie erzeugt werden, wodurch sie
Speicherdaten bei jeder Wiederholung für die Anordnung in der Speicherschlange 400 erzeugen. 17 zeigt
ein Beispiel eines Ladebefehls C. Der erste der wiederholten Befehle
(in dem oberen Feld dargestellt) ist der Kopf und die anderen (in
dem unteren Feld dargestellt) bilden den Schwanz. In dem dargestellten
Beispiel beträgt
die Vektorlänge
4, so daß es
einen Kopf und drei Schwänze
gibt.
-
Nur
der Kopfbefehl ist in den Tokenaustausch mit der Kernpipeline involviert,
welcher Befehle nicht auf diese Weise wiederholt, wobei die Schwanzbefehle
die Coprozessorpipeline still durchlaufen. Wenn ein wiederholter
Ladebefehl gelöscht
wird oder gespült
wird, müssen
alle Schwanzbefehle (welche dasselbe Tag tragen) aus der Pipeline
entfernt werden. Nur der Kopfbefehl wird zu einem Phantom, wenn
er gelöscht
wird, die Schwänze
werden vollständig
entfernt.
-
4.2 Ladevorgänge
-
Ladedaten
kommen aus der WB-Stufe 250 der Kern-LSU 222 und
werden von der EX6-Stufe 275 des Coprozessors aus der Ladeschlange 410 empfangen
bzw. aufgenommen. Jedes Objekt in einem vektorisierten Ladevorgang
wird durch eine Instanz des wiederholten Ladebefehls aufgenommen.
Der Zeitablauf in der Pipeline ist derart, daß ein Ladebefehl immer bereit
ist oder in EX6 soeben angekommen ist, um jedes Datenobjekt aufzunehmen.
Wenn ein Ladebefehl in EX6 angekommen ist, jedoch die Ladeinformation
noch nicht erschienen ist, muß der
Ladebefehl in EX6 anhalten und auch den Rest der Coprozessorpipeline
anhalten bzw. unterbrechen. Ein Ladebefehl kehrt demnach in den
Ruhezustand ein, wenn er auf Ladedaten trifft.
-
4.2.1 Laden von Puffern
-
Um
eine korrekte Ausrichtung der Ladedaten mit dem Ladebefehl in der
EX6-Stufe des Coprozessors zu erreichen, müssen die Daten doppelt gepuffert
werden, wenn sie bei dem Coprozessor ankommen. 18 bietet
eine entsprechende Darstellung.
-
Die
Puffer der Ladedaten funktionieren als Pipelineregister und erfordern
demnach keine Stromsteuerung und müssen auch keinerlei Tags tragen.
Das einzige Erfordernis sind die Daten und ein gültiges Bit. Jedes Objekt an
Ladedaten, welches aus der WB-Stufe 250 der Kern-LSU 222 herauskommt,
wird in einem Kernpuffer 1000 angeordnet, wobei sein entsprechendes
Gültigkeitsbit
in dem Puffer 1030 gespeichert wird. Das Datenobjekt und
das zugehörige
Gültigkeitsbit
werden dann über
die Schnittstelle an den GCP weitergeleitet, wo sie ihrerseits die
Puffer 1010, 1040 und 1020, 1050 durchlaufen. 19 zeigt,
wie ein Ladebefehl in dem Kern in die Kern-LSU eintritt und die
Erzeugung eines Objektes von Ladedaten auslöst, welches dann über den
Kernschnittstellenpuffer 1010 und die Doppelpuffer 1020, 1030 des
GCP an den Coprozessor weiterläuft und
den Coprozessorladebefehl bei EX6 trifft.
-
Damit
diese Form des Datenpuffers für
Ladetransfers arbeitet, ist es erforderlich, daß die beiden Pipelines in der
Weise synchronisiert werden, daß Befehle
in dem Coprozessor EX6 immer gemeinsam mit oder vor der Ankunft
des entsprechenden Befehles in der EX4-Stufe des Kerns ankommen. Es ist außerdem erforderlich,
daß die
Token, die sich durch die Abschlußschlange 320 von
dem Kern bewegen, zur gleichen Zeit ankommen, wie die entsprechenden
Ladedatenobjekte an dem Ende der Pipelinepuffer der Ladedaten ankommen.
Diese Bedingungen sind erfüllt,
vorausgesetzt, daß die
Coprozessorpipeline nur nach der Ausgabestufe in Reaktion auf das
Fehlen eines Token in der Abschlußschlange 320 anhält bzw.
unterbricht und vorausgesetzt, daß die LSU 222 das
Token aus der Annahmeschlange 340 sieht, bevor sie zuläßt, daß sich ein
Ladebefehl von seiner ADD-Stufe 220 aus weiterbewegt. Zusätzlich müssen WB-Unterbrechungen
das Senden von Ladedaten von der LSU verzögern.
-
4.2.2 Spülvorgänge
-
Kein
Spülen,
welches die EX4-Stufe 290 des Kernes nicht betrifft, kann
die Ladedatenpuffer beeinflussen und der Ladetransfer kann normal
abgeschlossen werden. Wenn durch einen Befehl in der EX4-Stufe des Kernes
ein Löschen
ausgelöst
wird, so ist dies kein Ladebefehl, da Ladebefehle kein Löschen auslösen können. Irgendwelche
Coprozessorladebefehle hinter dem Spülpunkt werden feststellen,
daß sie
angehalten bzw. unterbrochen sind, wenn sie bis zu der EX6-Stufe 275 der
Coprozessorpipeline gelangen, und zwar wegen Fehlens eines Abschlußtoken,
so daß keine
Datentransfers stattgefunden haben. Irgendwelche Daten in den Ladedatenpuffern 410 löschen natürlicherweise
während
der Totperiode des Spulens, während
die Pipeline erneut geladen wird.
-
4.2.3 Löschvorgänge
-
Wenn
ein Ladebefehl gelöscht
wird, müssen
sowohl der Kopf als auch jegliche Schwänze entfernt werden, wobei
nur der Kopf durch ein Phantom ersetzt wird. Da das Löschen in
der EX1-Stufe 225 des Coprozessors geschieht, haben keine
Datenübertragungen
stattgefunden und müssen
keine besonderen Maßnahmen getroffen
werden, um mit dem Laden von Daten umzugehen.
-
4.2.4 Ruhezustand
-
Wenn
ein Ladebefehl den Grund bzw. das Ende der Coprozessorpipeline erreicht
hat, so muß er
am Ende des Ladedatenpuffers 410 ein Datenobjekt finden.
Wenn der Befehl ein Kopfbefehl ist, so muß er auch ein Token in der
Abschlußschlange 320 finden.
Schwanzbefehle erfordern nur, daß Ladedaten vorhanden sind, erfordern
jedoch kein Token aus der Abschlußschlange.
-
4.3 Speichervorgänge
-
Speicherdaten
kommen aus der Ausgabestufe 215 des Coprozessors und werden
durch die DC1-Stufe 230 der Kern-LSU empfangen. Jedes Objekt
eines vektorisierten Speichervorgangs wird erzeugt, während der
Speicherbefehl in der Ausgabestufe des Coprozessors wiederholt abläuft. Die
wiederholten Speicherbefehle finden keine weitere Verwendung und
werden nicht durch die Coprozessorpipeline weitergeleitet. Nur der Kopfbefehl
durchläuft
die Pipeline. Dies bedeutet, daß eine
Speicherwiederholung, wenn sie einmal begonnen wurde, nicht stoppt,
bis sie ausdrücklich
durch den Kern gestoppt wird. Insbesondere wird, wenn der Speicherkopfbefehl
in der EX1-Stufe der Coprozessorpipeline angehalten wird, die Iteration
fortgesetzt und bleibt sie durch das Anhalten bzw. durch die Unterbrechung
unbeeinflußt.
-
4.3.1 Speicherdatenschlange
-
Wenn
die Speicherdatenübertragung
zu jedem beliebigen Zeitpunkt durch die LSU 222 gestoppt
werden kann, so ist eine Speicherdatenschlange 400 erforderlich.
Weiterhin ist, da Speicherdatenvektoren eine beliebige Länge haben
können,
eine Stromsteuerung erforderlich und dies ist bereits in Abschnitt
2.5.3 erläutert
worden. Eine Schlangenlänge
von drei Slots ist soeben ausreichend, um die Verwendung einer Stromsteuerung
ohne Datenverlust zu ermöglichen.
-
4.3.2 Spülvorgänge
-
Wenn
ein Speicherbefehl in einen Spülvorgang
einbezogen ist, muß die
Speicherdatenschlange 400 durch den Kern gelöscht werden.
Da die Schlange sich weiterhin mit ihren zwei Zyklen füllt, nachdem
der Kern dem Coprozessor das Spülen
angezeigt hat (wegen der Verzögerung
der Signalausbreitung), muß der
Kern eine Verzögerung
um zwei Zyklen warten, bevor er die Speicherdatenschlange 400 spült. Die
Totzeit nach dem Spülen
ist bei weitem ausreichend, damit dies geschehen kann.
-
4.3.3 Löschvorgänge
-
Wenn
der Kern einen Speicherbefehl löscht,
so weiß er,
daß der
Befehl gelöscht
wird, bevor er damit beginnt, Speicherdaten aufzunehmen. Zu dem
Zeitpunkt, zu welchem der Coprozessor das Löschsignal empfängt und
darauf reagiert, hat er bereits ein Datenobjekt in die Speicherdatenschlange 400 gesendet.
Der Kern muß deshalb
dieses einzelne Objekt nach dem Löschen entfernen und abfertigen.
Dies kann geschehen durch Senden eines einzelnen Speicherbefehlphantoms
durch die LSU 222, um die toten Daten aufzunehmen. Al ternativ
kann die Ausgabestufe in der Löschschlange
vorausschauen, um festzulegen, daß der Speicherbefehl nicht
gelöscht
wird, bevor er begonnen hat, Daten zu senden.
-
4.3.4 Ruhezustand
-
Speicherbefehle
verwenden nicht die Abschlußtokenschlange 320 und
gehen daher in den Ruhezustand, sobald sie den Grund bzw. das Ende
der Coprozessorpipeline erreicht haben.
-
5 MEHRERE COPROZESSOREN
-
Es
können
mehr als ein Coprozessor an dem Kern angeordnet sein und deshalb
sind möglicherweise einige
Einrichtungen erforderlich, um mit mehreren Prozessoren umzugehen.
Aus ökonomischen
Gründen
ist es wichtig sicherzustellen, daß so wenig wie möglich von
der Coprozessorschnittstelle dupliziert wird. Insbesondere sollten
die Coprozessoren die Längenschlange 330,
die Annahmeschlange 340 und die Speicherdatenschlange 400 gemeinsam
verwenden, welche durch den Kern verwaltet werden. Wenn diese Schlangen gemeinsam
verwendet werden, kann zu einem gegebenen Zeitpunkt jeweils nur
ein Coprozessor die Schlangen verwenden. Dies wird am einfachsten
dadurch sichergestellt, daß man
zu jedem Zeitpunkt jeweils nur einen Coprozessor aktiv sein läßt. Dies
ist keine ernsthafte Einschränkung,
da, allgemein gesprochen, zu irgend einem gegebenen Zeitpunkt jeweils
nur ein Coprozessor in Gebrauch sein sollte. Typischerweise wird
ein Prozessor durch eine Treibersoftware angesteuert, die nur einen
Coprozessor treibt bzw. ansteuert. Aufrufe an die Treibersoftware
und Antworten von derselben stellen sicher, daß es mehrere Kernbefehle zwischen
der Verwendung eines Coprozessors und der Verwendung eines anderen
Coprozessors gibt.
-
5.1 Gesichtspunkte der wechselseitigen
Verbindung
-
Wenn
zu einem gegebenen Zeitpunkt jeweils nur ein Coprozessor mit dem
Kern kommunizieren darf, können
alle Coprozessoren die GCP-Schnittstellensignale von dem Kern gemeinsam
verwenden. Signale von den Coprozessoren an den Kern können einfach über eine
ODER-Schaltung verbunden sein, vorausgesetzt, daß jeder Coprozessor seine Ausgänge auf
Null hält,
wenn er nicht aktiv ist.
-
5.2 Coprozessorauswahl
-
Coprozessoren
werden durch ein Signal von dem Kern freigeschaltet. In bevorzugten
Ausführungsformen
gibt es sechzehn dieser Signale, eines für jeden Coprozessor, und nur
eines kann zu irgendeinem gegebenen Zeitpunkt aktiv sein. Zusätzlich umfassen
Befehle an die Coprozessoren die Coprozessornummer, was es dem Coprozessor
ermöglicht,
Befehle zurückzuweisen,
die nicht mit seiner eigenen Nummer zusammenpassen, ebenso wie Kernbefehle
zurückzuweisen.
-
5.3 Umschalten zwischen Coprozessoren
-
Wenn
der Kern einen Coprozessorbefehl decodiert, der gegenüber dem
zuletzt angesprochenen für einen
anderen Coprozessor bestimmt ist, so hält er diesen Befehl an, bis
der vorhergehende Coprozessorbefehl in den Ruhezustand getreten
ist. Dies stellt sicher, daß sämtliche
Aktivität
in dem aktuell ausgewählten Coprozessor
beendet ist. Die Coprozessorauswahl wird dann umgeschaltet, wodurch
der letzte aktive Coprozessor abgeschaltet und der neue Coprozessor
aktiviert wird. Der Coprozessor, der möglicherweise den neuen Coprozessorbefehl
empfangen hat, hat ihn ignoriert und ist abgeschaltet. Der Befehl
muß deshalb
durch den Kern erneut versendet werden und wird nunmehr durch den
neu aktivierten Coprozessor angenommen.
-
Auch
wenn eine besondere Ausführungsform
der Erfindung hier beschrieben wurde, so ist es offensichtlich,
daß die
Erfindung nicht darauf beschränkt
ist und daß viele
Modifikationen und Ergänzungen
innerhalb des Schutzumfanges der Erfindung vorgenommen werden können. Beispielsweise
könnten
verschiedene Kombinationen der Merkmale der folgenden abhängigen Ansprüche mit
Merkmalen der unabhängigen
Ansprüche
vorgenommen werden, ohne vom Schutzumfang der vorliegenden Erfindung
abzuweichen.