-
Die vorliegende Erfindung bezieht sich allgemein auf
Digitalcomputer und insbesondere auf ein System zum
Auflösen von Datenabhängigkeiten während der
Vorverarbeitung von mehreren Befehlen vor der Ausführung dieser
Befehle in einem Digitalcomputer. Diese Erfindung findet
insbesondere Anwendung bei der Vorverarbeitung mehrerer
Befehle in einem Pipeline-Digitalcomputersystem, das eine
Architektur mit einem komplexen Befehlssatz (CIS) von
variabler Länge verwendet.
-
Die Vorverarbeitung von Befehlen ist ein übliches
Hilfsmittel, das in Digitalcomputern verwendet wird, um die
Ausführung einer großen Anzahl von Befehlen zu
beschleunigen. Die Vorverarbeitungsoperationen werden
typischerweise von einer Befehlseinheit ausgeführt, die zwischen
dem Speicher, der die Befehle speichert, und der
Ausführungseinheit, die die Befehle ausführt, angeordnet ist.
Die Vorverarbeitungsoperationen umfassen z. B. das
Vorausholen von Operanden, die von den
Operandenspezifizierem identifiziert werden, in aufeinanderfolgenden
Befehlen, so daß die Operanden bereits verfügbar sind, wenn
die entsprechenden Befehle in die Ausführungseinheit
geladen werden. Die Befehlseinheit führt die
Vorverarbeitungsoperationen für aufeinanderfolgende Befehle aus,
während ein aktueller Befehl von der Ausführungseinheit
ausgeführt wird, wodurch die Gesamtverarbeitungszeit für
eine beliebige gegebene Folge von Befehlen reduziert
wird.
-
Eine Referenz des Standes der Technik mit dem Titel
"Varieties of decoupled access/execute computer
architectures", von J. E. Smith und T. J. Kaminski, erschienen
in Proceedings 20th Annual Allerton Conference on
Communications, Control and Computing, 6.-8. Oktober 1982,
Monitcello, Illinois, USA, S. 557-586, lehrt getrennte
Befehlsströme für den Datenzugriff und die Ausführung in
entkoppelten Zugriff/Ausführung-Computerarchitekturen, um
eine hohe Leistung zu erreichen. Mehrere Erweiterungen
und Verfeinerungen der entkoppelten Architekturen sind in
dieser Referenz des Standes der Technik offenbart.
-
Das US-Patent 4.241.397 von Strecker u. a. lehrt ein
Digitaldatenverarbeitungssystem mit einem
Zentralprozessor, der auf Befehle antwortet, die eine variable Länge
aufweisen und von einem Befehlspuffer gehandhabt werden.
Jeder Befehl enthält einen Operationscode. Der
Zentralprozessor enthält eine Schaltung zum Decodieren des
Operationscodes. Der Zentralprozessor antwortet auf einen
Befehl zum Addieren zweier Summanden, die in ersten und
zweiten Speicherstellen angeordnet sind, und speichert
die Summe in einer dritten Speicherstelle.
-
Andere Aufgaben und Vorteile der Erfindung werden
deutlich beim Lesen der folgenden genauen Beschreibung unter
Bezugnahme auf die Zeichnungen, in welchen:
-
Fig. 1 ein Blockschaltbild eines Digitalcomputersystems
mit einer Pipeline-Zentraleinheit ist, die die
vorliegende Erfindung verwendet;
-
Fig. 2 ein Schaubild ist, das verschiedene Schritte
zeigt, die durchgeführt werden, um einen Befehl zu
verarbeiten, und die von einem Pipeline-Befehlsprozessor gemäß
Fig. 1 für unterschiedliche Befehle parallel ausgeführt
werden können;
-
Fig. 3 ein Blockschaltbild des Befehlsprozessors der
Fig. 1 ist, das die zwischen der Befehlseinheit und der
Ausführungseinheit eingesetzten Warteschlangen genauer
zeigt;
-
Fig. 4 ein Blockschaltbild des Befehlsdecodierers der
Fig. 1 ist, das die Datenpfade genauer zeigt, die der
Quellenliste und den anderen Registern zugeordnet sind
und die zum Austausch von Daten zwischen der
Befehlseinheit, der Speicherzugriffseinheit und der
Ausführungseinheit verwendet werden;
-
Fig. 5 ein Blockschaltbild ist, das den Datenpfad durch
die Befehlseinheit zu den Warteschlangen zeigt;
-
Fig. 6 ein Schaubild ist, das das Format der
Operandenspezifiziererdaten zeigt, die über einen GP-Bus von einem
Befehlsdecodierer zu einer Universaleinheit in einer
Operandenverarbeitungseinheit in der Befehlseinheit
übertragen werden;
-
Fig. 7 ein Schaubild ist, das das Format der
Kurzliteralspezifiziererdaten zeigt, die über einen SL-Bus vom
Befehlsdecodierer zu einer Erweiterungseinheit in der
Operandenverarbeitungseinheit übertragen werden;
-
Fig. 8 ein Schaubild ist, das das Format der Quellen- und
Zielspezifiziererdaten zeigt, die über einen TR-Bus vom
Befehlsdecodierer zu einer Transfereinheit in der
Operandenverarbeitungseinheit übertragen werden;
-
Fig. 9 ein schematisches Schaubild der Transfereinheit
ist;
-
Fig. 10 ein schematisches Schaubild der
Erweiterungseinheit ist;
-
Fig. 11 ein schematisches Schaubild der Universaleinheit
in der Operandenverarbeitungseinheit ist;
-
Fig. 12 ein Blockschaltbild der Ausführungseinheit ist,
das den Steuerungsablauf für die Ausführung von Befehlen
und für das Entnehmen von Ergebnissen zeigt;
-
Fig. 13 ein Blockschaltbild der Ausführungseinheit ist,
das die Datenpfade zeigt, die während der Ausführung von
Befehlen und der Entnahme von Ergebnissen zur Verfügung
stehen;
-
Fig. 14 ein Zeitablaufdiagramm ist, das die Zustände der
entsprechenden funktionellen Einheiten zeigt, wenn deren
entsprechende arithmetische oder logische Operationen
bezüglich der Quellenoperanden unterschiedlicher
Datentypen durchgeführt werden;
-
Fig. 15 ein Flußdiagramm der Steuerprozedur ist, die von
einer Befehlsausgabeeinheit in der Befehlseinheit
verfolgt wird, um Quellenoperanden an spezifizierte
funktionelle Einheiten auszugeben und das Ausgeben und das Ziel
für das entsprechende Ergebnis in einer
Ergebniswarteschlange in der Ausführungseinheit aufzuzeichnen;
-
Fig. 16 ein Flußdiagramm der Steuerprozedur ist, die von
der Entnahmeeinheit verfolgt wird, um die Ergebnisse der
funktionellen Einheit, die durch den Eintrag an der
Spitze der Entnahmewarteschlange spezifiziert wird, zu
erhalten und diese Ergebnisse an einem durch diesen
Eintrag spezifizierten Ziel zu entnehmen und diesen
Eintrag von der Spitze der Entnahmewarteschlange zu
entfernen; und
-
Fig. 17 ein Schaubild ist, das die Informationen zeigt,
die vorzugsweise in einem Eintrag der
Entnahmewarteschlange gespeichert werden.
-
Obwohl die Erfindung verschiedenen Modifizierungen und
alternativen Ausführungsformen unterworfen werden kann,
sind in den Zeichnungen beispielhaft spezielle
Ausführungsformen derselben gezeigt, die im folgenden genauer
beschrieben werden. Es ist jedoch zu beachten, daß nicht
beabsichtigt ist, die Erfindung auf die offenbarten
bestimmten Ausführungsformen zu beschränken, sondern daß
im Gegenteil die Erfindung alle Modifizierungen,
Entsprechungen und Alternativen abdecken soll, die in den Geist
und den Umfang der Erfindung fallen, wie sie durch die
beigefügten Ansprüche definiert ist.
-
In den Zeichnungen und insbesondere in Fig. 1 ist ein
Teil eines Digitalcomputersystems gezeigt, das einen
Hauptspeicher 10, eine Speicher-CPU-Schnittstelleneinheit
11 und wenigstens eine CPU enthält, die eine
Befehlseinheit 12 und eine Ausführungseinheit 13 umfaßt. Es ist zu
beachten, daß in einem solchen System durch gemeinsame
Nutzung des Hauptspeichers 10 zusätzliche CPUs verwendet
werden können. Es ist z. B. möglich, daß bis zu vier CPUs
gleichzeitig arbeiten und über den gemeinsam genutzten
Hauptspeicher 10 effizient kommunizieren. Sowohl Daten
als auch Befehle zur Verarbeitung der Daten sind in
adressierbaren Speicherstellen innerhalb des Hauptspei
chers 10 gespeichert. Ein Befehl enthält einen
Operationscode (Opcode), der in codierter Form eine von
der CPU auszuführende Operation spezifiziert, sowie
Operandenspezifizierer, die Informationen zum Auffinden
der Operanden zur Verfügung stellen. Die Ausführung eines
einzelnen Befehls wird in mehrere kleinere Aufgaben
unterteilt. Diese Aufgaben werden von speziellen,
separaten
und unabhängigen Funktionseinheiten ausgeführt, die
für diesen Zweck optimiert sind.
-
Obwohl jeder Befehl letztendlich eine andere Operation
ausführt, sind viele der kleineren Aufgaben, in die jeder
Befehl unterteilt wird, allen Befehlen gemeinsam. Im
allgemeinen werden während der Ausführung eines Befehls
die folgenden Schritte ausgeführt: Befehl holen, Befehl
decodieren, Operand holen, Ausführung und Ergebnis
speichern. Durch die Verwendung der speziellen Hardware-
Stufen können somit die Schritte in einer
Pipeline-Operation überlappen, wodurch der Gesamtbefehlsdurchsatz
erhöht wird.
-
Der Datenpfad durch die Pipeline enthält einen
entsprechenden Satz von Registern zum Übertragen der Ergebnisse
jeder Pipeline-Stufe zur nächsten Pipeline-Stufe. Diese
Übertragungsregister werden in Abhängigkeit von einem
gemeinsamen Systemtakt getaktet. Zum Beispiel wird
während eines ersten Taktzyklus der erste Befehl von der
Hardware geholt, die für das Befehlholen zuständig ist.
Während des zweiten Taktzyklus wird der geholte Befehl
übertragen und von der Befehlsdecodierungs-Hardware
decodiert, wobei jedoch gleichzeitig von der Befehl-
Holen-Hardware der nächste Befehl geholt wird. Während
des dritten Taktzyklus werden die jeweiligen Befehle zur
nächsten Stufe der Pipeline geschoben und es wird ein
neuer Befehl geholt. Nachdem die Pipeline gefüllt worden
ist, wird somit am Ende jedes Taktzyklus ein Befehl
vollständig ausgeführt sein.
-
Diese Prozeß entspricht einer Montagestraße in einer
Fabrik. Jedem Arbeiter ist die Durchführung einer
einzelnen Aufgabe bezüglich jedes Produktes zugewiesen, das
durch seine Arbeitsstufe läuft. Mit jeder ausgeführten
Aufgabe kommt das Produkt seiner Fertigstellung näher. In
der letzten Stufe rollt jedesmal dann, wenn der Arbeiter
seine zugewiesene Aufgabe ausgeführt hat, ein fertiges
Produkt von der Montagestraße.
-
In dem in Fig. 1 dargestellten besonderen System enthält
die Schnittstelleneinheit 11 einen Haupt-Cache 14, der
auf einer Mittelungsgrundlage den Befehls- und
Ausführungseinheiten 12 und 13 ermöglicht, Daten mit einer
schnelleren Rate zu verarbeiten als es die Zugriffszeit
des Hauptspeichers 10 zuläßt. Dieser Cache 14 enthält
eine Einrichtung zum Speichern ausgewählter
vordefinierter Blöcke von Datenelementen, eine Einrichtung zum
Empfangen von Anfragen von der Befehlseinheit 12 über
einen Übersetzungspuffer 15 für einen Zugriff auf ein
spezifiziertes Datenelement, eine Einrichtung zum Prüfen,
ob das Datenelement sich in einem im Cache gespeicherten
Block befindet, sowie eine Einrichtung, die aktiv wird,
wenn die Daten für den Block, der das spezifizierte
Datenelement enthält, nicht auf diese Weise gespeichert
ist, um den spezifizierten Block von Daten aus dem
Hauptspeicher 10 zu lesen und diesen Block von Daten im Cache
14 zu speichern. Mit anderen Worten, der Cache schafft
ein "Fenster" im Hauptspeicher und enthält Daten die von
den Befehls- und Ausführungseinheiten wahrscheinlich
benötigt werden.
-
Wenn ein von den Befehls- und Ausführungseinheiten 12 und
13 benötigtes Datenelement nicht im Cache 14 gefunden
wird, wird das Datenelement anschließend aus dem
Hauptspeicher 10 erhalten, wobei jedoch im Prozeß ein ganzer
Block, der zusätzliche Daten enthält, vom Hauptspeicher
10 erhalten und in den Cache 14 geschrieben wird.
Aufgrund des Prinzips der Lokalität bezüglich der Zeit und
des Speicherraums ergibt sich beim nächsten mal, wenn die
Befehls- und Ausführungseinheiten ein Datenelement
anfordem, eine hohe Wahrscheinlichkeit, daß dieses
Datenelement
in dem Block gefunden wird, der das vorher
adressierte Datenelement enthält. Folglich ergibt sich eine
hohe Wahrscheinlichkeit, daß der Cache 14 bereits das
Datenelement enthält, das von den Befehls- und
Ausführungseinheiten 12 und 13 angefordert wird. Da im
allgemeinen auf den Cache 14 mit einer sehr viel höheren Rate
zugegriffen wird als auf den Hauptspeicher 10, kann der
Hauptspeicher eine proportional langsamere Zugriffszeit
besitzen als der Cache, ohne daß die durchschnittliche
Leistung des Datenverarbeitungssystems wesentlich
beeinträchtigt wird. Der Hauptspeicher 10 kann daher
langsamere und kostengünstigere Speicherelemente enthalten.
-
Der Übersetzungspuffer 15 ist ein Hochgeschwindigkeits-
Assoziativspeicher, der die zuletzt benutzten Virtuell-
Physikalisch-Adressenübersetzungen speichert. In einem
virtuellen Speichersystem kann eine Referenz auf eine
einzelne virtuelle Adresse mehrere Speicherzugriffe
verursachen, bevor die gewünschten Informationen
verfügbar sind. Wenn jedoch der Übersetzungspuffer 15 verwendet
wird, wird die Übersetzung auf ein einfaches finden eines
"Treffers" im Übersetzungspuffer 15 reduziert.
-
Ein E/A-Bus 16 ist mit dem Hauptspeicher 10 und dem
Haupt-Cache 14 verbunden, um Anweisungen und
Eingangsdaten zum System zu übertragen und Ausgangsdaten vom System
zu empfangen.
-
Die Befehlseinheit 12 enthält einen Programmzähler 17
sowie einen Befehls-Cache 18 zum Holen von Befehlen aus
dem Haupt-Cache 14. Der Programmzähler 17 adressiert
vorzugsweise die virtuellen Speicherstellen statt der
physikalischen Speicherstellen des Hauptspeichers 10 und
des Cache 14. Daher muß die virtuelle Adresse des
Programmzählers 17 in die physikalische Adresse des
Hauptspeichers 10 übersetzt werden, bevor die Befehle
wiedergewonnen
werden können. Dementsprechend werden die
Inhalte des Programmzählers 17 zur Schnittstelleneinheit 11
übertragen, wo der Übersetzungspuffer 15 die
Adressenumsetzung durchführt. Der Befehl wird aus seiner
physikalischen Speicherstelle im Cache 14 unter Verwendung der
umgesetzten Adresse wiedergewonnen. Der Cache 14 liefert
den Befehl über Datenrückkehrleitungen zum Befehls-Cache
18. Die Organisation und die Operation des Cache 14 und
des Übersetzungspuffers 15 sind genauer beschrieben in
Kapitel 11, Levy & Eckhouse, Jr., Computer Programming
and Architecture, The VAX-11, Digital Equipment
Corporation, S. 351-368 (1980).
-
Die meiste Zeit hat der Befehls-Cache im voraus Befehle
an den Adressen gespeichert, die vom Programmzähler 17
spezifiziert werden, wobei die adressierten Befehle
sofort für eine Übertragung in einen Befehlspuffer 19
verfügbar sind. Die adressierten Befehle werden aus den
Puffern 19 einem Befehlsdecodierer 20 zugeführt, der
sowohl die Opcodes als auch die Spezifizierer decodiert.
Eine Operandenverarbeitungseinheit (OPU) 21 holt die
spezifizierten Operanden und führt diese der
Ausführungseinheit 13 zu.
-
Die OPU 21 erzeugt ferner virtuelle Adressen. Genauer
erzeugt die OPU 21 virtuelle Adressen für
Speicherquellen-(Lese-) und Ziel-(Schreib)-Operanden. Wenigstens für
die Speicherleseoperanden muß die OPU 21 diese virtuellen
Adressen an die Schnittstelleneinheit 11 liefern, wo sie
in physikalische Adressen übersetzt werden. Anschließend
wird auf die physikalischen Speicherstellen des Cache 14
zugegriffen, um die Operanden für die
Speicherquellenoperanden zu holen.
-
In jedem Befehl enthält das erste Byte den Opcode,
während die folgenden Bytes die zu decodierenden
Operandenspezifizerer
sind. Das erste Byte jedes Spezifizierers
zeigt den Adressierungsmodus für diesen Spezifizierer an.
Dieses Byte wird üblicherweise in Hälften unterteilt,
wobei eine Hälfte den Adressierungsmodus spezifiziert und
die andere Hälfte ein für die Adressierung zu
verwendendes Register spezifiziert. Die Befehle besitzen
vorzugsweise eine variable Länge, wobei verschiedene Typen von
Spezifizierern mit demselben Opcode verwendet werden
können, wie in Strecker u. a., US-Patent 4.241.397,
erteilt am 23. Dezember 1980, offenbart ist.
-
Der erste Schritt bei der Verarbeitung der Befehle ist,
den "Opcode"-Abschnitt des Befehls zu decodieren. Der
erste Abschnitt jedes Befehls besteht aus dessen Opcode,
der die im Befehl durchzuführende Operation sowie die
Anzahl und den Typ der zu verwendenden Spezifizierer
spezifiziert.
-
Die Decodierung wird unter Verwendung einer
Tabellennachschlagetechnik im Befehlsdecodierer 20 bewerkstelligt.
Der Befehlsdecodierer findet eine Mikrocodestartadresse
zum Ausführen des Befehls in einer Nachschlagtabelle und
gibt die Startadresse an die Ausführungseinheit 13
weiter. Später führt die Ausführungseinheit die
spezifizierte Operation durch, indem sie den im voraus
gespeicherten Mikrocode beginnend mit der angegebenen
Startadresse ausführt. Der Decodierer ermittelt ferner, wo im
Befehl Quellenoperanden- und Zieloperandenspezifizierer
auftreten, und leitet diese Spezifizierer an die OPU 21
zur Vorverarbeitung vor der Ausführung des Befehls
weiter.
-
Die Nachschlagtabelle ist als Matrix von mehreren Blöcken
organisiert, die jeweils mehrere Einträge aufweisen.
Jeder Eintrag kann durch seinen Block und den
Eintragsindex adressiert werden. Das Opcode-Byte adressiert den
Block, während ein Zeiger von einem
Ausführungszeigerzähler (der die Position des aktuellen Spezifizierers im
Befehl angibt) einen bestimmten Eintrag im Block
auswählt. Der Ausgang der Nachschlagtabelle spezifiziert den
Datenkontext (Byte, Wort usw.), den Datentyp (Adresse,
ganze Zahl, usw.) und den Zugriffsmodus (Lesen,
Schreiben, Modifizieren, usw.) für jeden Spezifizierer und
liefert ferner eine Mikrocode-Abfertigungsadresse an die
Ausführungseinheit.
-
Nachdem ein Befehl decodiert worden ist, prüft die OPU 21
die Operandenspezifizerer und berechnet deren effektive
Adressen; dieser Prozeß verwendet das Lesen der GPRs
(General Purpose Register = Universalregister) und das
mögliche Modifizieren der GPR-Inhalte mittels
automatischer Inkrementierung oder automatischer Dekrementierung.
Anschließend werden aus diesen effektiven Adressen die
Operanden geholt und zur Ausführungseinheit 13
weitergeleitet, die den Befehl ausführt und das Ergebnis in das
durch den Zielzeiger für diesen Befehl identifizierte
Ziel schreibt.
-
Jedesmal dann, wenn ein Befehl an die Ausführungseinheit
weitergeleitet wird, sendet die Ausführungseinheit eine
Mikrocode-Abfertigungsadresse und einen Satz von Zeigern
für (1) die Stellen im Ausführungseinheitsregistersatz,
in denen die Quellenoperanden gefunden werden können, und
(2) die Stelle an der die Ergebnisse zu speichern sind.
Innerhalb der Ausführungseinheit enthält ein Satz von
Warteschlangen 23 eine Gabel-Warteschlange zum Speichern
der Mikrocode-Abfertigungsadresse, eine
Quellenzeigerwarteschlange zum Speichern der Quellenoperandenstellen
sowie eine Zielzeigerwarteschlange zum Speichern des
Zielortes. Jede diese Warteschlangen ist ein FIFO-Puffer,
der die Daten für mehrere Befehle halten kann.
-
Die Ausführungseinheit 13 enthält ferner eine
Quellenliste 24, die eine Registergruppe mit mehrfachen
Anschlüssen ist und eine Kopie der Universalregister und
eine Liste der Quellenoperanden enthält. Diese Einträge
in der Quellenzeigerwarteschlange zeigen entweder auf die
GPR-Stellen für die Registeroperanden oder auf die
Quellenliste für die Speicher- und Literaloperanden. Sowohl
die Schnittstelleneinheit 11 als auch die Befehlseinheit
12 schreiben Einträge in die Quellenliste 24, wobei die
Ausführungseinheit 13 nach Bedarf Operanden aus der
Quellenliste liest, um die Befehle auszuführen. Zum
Ausführen von Befehlen enthält die Ausführungseinheit 13
eine Befehlsausgabeeinheit 25, eine
Mikrocodeausführungseinheit 26, eine arithmetisch-logische Einheit (ALU) 22
sowie eine Entnahmeeinheit 27.
-
Die vorliegende Erfindung ist für Pipeline-Prozessoren
besonders nützlich. Wie oben erläutert worden ist, kann
in einem Pipeline-Prozessor die Befehl-Holen-Hardware des
Prozessors einen Befehl holen, während eine andere
Hardware den Operationscode eines zweiten Befehls decodiert,
die Operanden eines dritten Befehls holt, einen vierten
Befehl ausführt und die verarbeiteten Daten eines fünften
Befehls speichert. Fig. 2 zeigt eine Pipeline für einen
typischen Befehl, wie z. B.:
-
ADDL3 R0, B^12(R1),R2.
-
Dies ist eine Langwort-Addition, die den
Verschiebungsmodus der Adressierung verwendet.
-
In der ersten Stufe der Pipeline-Ausführung dieses
Befehls wird der Programmzähler (PC) des Befehls erzeugt;
dies wird üblicherweise entweder durch Inkrementieren des
Programmzählers ausgehend vom vorangehenden Befehl oder
durch Verwenden der Zieladresse eines Verzweigungsbefehls
bewerkstelligt. Der PC wird anschließend verwendet, um in
der zweiten Stufe der Pipeline auf den Befehlscache 18
zuzugreifen.
-
In der dritten Stufe der Pipeline sind die Daten aus dem
Cache 18 für die Verwendung durch den Befehlsdecodierer
20 oder zum Laden in den Befehlspuffer 19 verfügbar. Der
Befehlsdecodierer 20 decodiert den Opcode und die drei
Spezifizierer in einem einzigen Zyklus, wie im folgenden
genauer beschrieben wird. Die Nummer R1 gemeinsam mit der
Byteverschiebung wird am Ende des Decodierungszyklus zur
OPU 21 gesendet.
-
In der Stufe 4 werden die Zeiger R0 und R2 an die
Warteschlangeneinheit 23 weitergeleitet. Ferner liest die
Operandeneinheit 21 die Inhalte ihrer
Universalregistergruppe an der Stelle Rl, addiert diesen Wert zur
spezifizierten Verschiebung (12) und sendet die resultierende
Adresse zum Übersetzungspuffer 15 in der
Schnittstelleneinheit 11 gemeinsam mit einer OP-Lese-Anfrage am Ende
der Adreßerzeugungsstufe. Ein Zeiger auf eine reservierte
Stelle in der Quellenliste für die Aufnahme des zweiten
Operanden wird an die Warteschlangeneinheit 23
weitergeleitet. Wenn die OP-Lese-Anfrage bearbeitet wird, wird
der aus dem Speicher gelesene zweite Operand an die
reservierte Stelle in der Quellenliste übertragen.
-
In Stufe 5 wählt die Schnittstelleneinheit 11 die in
Stufe 4 erzeugte Adresse zur Ausführung aus. Unter
Verwendung des Übersetzungspuffers 15 übersetzt die
Schnittstelleneinheit 11 die virtuelle Adresse während der
Adressenübersetzungsstufe in eine physikalische Adresse.
Die physikalische Adresse wird anschließend verwendet, um
den Cache 14 zu adressieren, der in Stufe 6 der Pipeline
gelesen wird.
-
In Stufe 7 der Pipeline wird der Befehl an die ALU 22
ausgegeben, die die zwei Operanden addiert und das
Ergebnis an die Entnahmeeinheit 27 sendet. Während der Stufe 4
wurden die Registernummern für R1 und R2 und ein Zeiger
auf den Quellenlistenort für die Speicherdaten zur
Ausführungseinheit gesendet und in den Zeigerwarteschlangen
gespeichert. Während der Cache-Lesestufe beginnt die
Ausführungseinheit anschließend, nach den zwei
Quellenoperanden in der Quellenliste zu suchen. In diesem
speziellen Beispiel findet sie nur die Registerdaten in R0,
wobei jedoch am Ende dieser Stufe die Speicherdaten
ankommen und anstelle der ungültigen ausgelesenen Daten
des Registersatzes eingesetzt werden. Somit sind in der
Befehlsausführungsstufe beide Operanden verfügbar.
-
In der Entnahmestufe 8 der Pipeline werden die
Ergebnisdaten mit dem nächsten Eintrag in der
Entnahmewarteschlange gepaart. Ferner stehen zu diesem Zeitpunkt die
Bedingungscodes zur Verfügung, die den
Verzweigungsentscheidungen zugrunde liegen. Obwohl mehrere
Funktionsausführungseinheiten gleichzeitig beschäftigt sein können,
kann in einem einzigen Zyklus nur ein Befehl entnommen
werden.
-
In der letzen Stufe 9 der erläuterten Pipeline werden die
Daten in den GPR-Abschnitt des Registersatzes sowohl in
der Ausführungseinheit 13 als auch in der Befehlseinheit
12 geschrieben.
-
Es ist erwünscht, einen Pipeline-Prozessor mit einem
Mechanismus zur Vorhersage des Ausgangs von bedingten
Verzweigungsentscheidungen zu schaffen, um den Einfluß
von Halten oder "Lücken" in der Pipeline zu minimieren.
Dies ist insbesondere wichtig für den Pipeline-Prozessor
der Fig. 1, da die Warteschlangen 23 die
Zwischenergebnisse mehrerer Befehle speichern können. Wenn Halte oder
Lücken auftreten, verlieren die Warteschlangen ihre
Effektivität bei der Erhöhung des Durchsatzes des
Prozessors. Die Tiefe der Pipeline jedoch bewirkt, daß das
"Zurückspulen" einer Befehlssequenz im Fall einer
unkorrekten Vorhersage hinsichtlich der Hardware oder der
Ausführungszeit aufwendiger ist. Das Zurückspulen bewirkt
das Befreien der Informationspipeline von Befehlen im
falschen Pfad, die einer Verzweigung folgen, die
unkorrekt vorhergesagt wurde, und das Umleiten der Ausführung
auf den korrekten Pfad.
-
Wie in Fig. 1 gezeigt, ist die Befehlseinheit 12 des
Pipelineprozessors mit einer
Verzweigungsvorhersageeinheit 28 versehen. Die genaue Funktion der
Verzweigungsvorhersageeinheit 28 besteht darin, einen Wert
(VORHERSAGE-PC) zu ermitteln oder auszuwählen, den der
Programmzähler 17 annimmt, nachdem ein Verzweigungsbefehl
adressiert worden ist. Dieser Wert oder diese Auswahl wird
über einen Bus 29 von der Verzweigungsvorhersageeinheit
28 zur Programmzählereinheit 17 übertragen.
-
Die Verzweigungsvorhersageeinheit 28 spricht auf vier
Haupteingangssignale an. Wenn der Befehlsdecodierer 20
einer Verzweigungs-Opcode vom Befehlspuffer 19 empfängt,
werden Verzweigungs-Opcode-Informationen und ein
Verzweigungs-Opcode-Impulssignal (BSHOP) über einen Eingangsbus
30 zur Verzweigungsvorhersageeinheit übertragen.
Gleichzeitig wird die Adresse des Verzweigungsbefehls (DECODE
PC) auf einem Eingangsbus 31 von der
Programmzählereinheit 17 empfangen. Die Zieladresse des
Verzweigungsbefehls (TARGET PC) und ein Zieladressenimpulssignal
(TARGET VALID) werden auf einem Eingangsbus 32 von der
Operandeneinheit 21 empfangen. Die Operandeneinheit 21
addiert z. B. den Wert eines Verschiebungsspezifizierers
im Verzweigungsbefehl zur Adresse des Befehls, der dem
Verzweigungsbefehl folgt, um die Zieladresse zu
berechnen.
Bei bedingten Verzweigungen wird die
Verzweigungsentscheidung gefällt und die Vorhersage mittels eines
Gültigkeitssignals (BRANCH VALID) für gültig erklärt, das
mit einem Datensignal (BRANCH DECISION) auf einem Bus 33
von der Ausführungseinheit 13 empfangen wird.
-
Während der Ausführung der meisten Befehlssequenzen
empfängt die Verzweigungsvorhersageeinheit 28 zuerst
einen Verzweigungs-Opcode und dessen zugehörige Adresse,
empfängt anschließend die entsprechende Zieladresse und
empfängt schließlich ein Gültigkeitssignal. Die
Verzweigungsvorhersageeinheit 28 antwortet auf diese typische
Sequenz, indem sie eine Verzweigungsvorhersage macht,
sobald der Verzweigungs-Opcode und seine entsprechende
Adresse empfangen worden sind.
-
Wenn ein bedingter Verzweigungsbefehl für gültig erklärt
wird, wird die Ausführung normal fortgesetzt. Ansonsten,
wenn die Verzweigungsentscheidung nicht mit der
Vorhersage übereinstimmt, wird eine "Rückspul"-Operation
durchgeführt. Dies nutzt die Aufzeichnung der Entscheidung im
Verzweigungs-Historie-Cache und leitet anschließend den
Befehlsstrom um. Der Befehlsstrom wird umgeleitet, indem
der Zustand der Zentraleinheit auf den Zustand
zurückgesetzt wird, der zu dem Zeitpunkt, zu dem die Vorhersage
gefällt wurde, bestand, woraufhin die Ausführung zu
Beginn des alternativen Ausführungspfades ausgehend vom
Verzweigungsbefehl neu gestartet wird. Die Ausführung
wird z. B. an der vorher gesicherten "Rückspul"-Adresse
(UNWIND PC) neu gestartet. Die Konstruktion und die
Operation der bevorzugten Verzweigungsvorhersageeinheit
ist genauer beschrieben in der obigen Referenz, D. Fite
u. a., US-Patent Nr. 5.142.634, eingereicht am 3. Februar
1989, mit dem Titel "Branch Prediction".
-
Der Befehlsdecodierer 20 in der Befehlseinheit 12 und die
Warteschlange 23 in der Ausführungseinheit 13 sind in
Fig. 3 genauer gezeigt. Es wird deutlich, daß der
Decodierer 20 einen Decodierer 20a für den Programmzähler,
einen Gabeltabellen-RAM 20b, zwei
Quellenoperandenspezifizierer-Decodierer 20c und 20d, einen
Zieloperandenspezifizierer-Decodierer 20e und einen
Registeroperationsdecodierer 20c enthält, die im folgenden genauer
beschrieben werden. In einer bevorzugten Ausführungsform sind die
Decodierer 20c-20f eng verknüpft und in eine große
komplexe Decodierungseinheit integriert, wie in der
obenerwähnten Referenz, D. Fite u. a., US-Patent Nr. 5.148.528,
eingereicht am 3. Februar 1989, mit dem Titel "Decoding
Multiple Specifiers in a Variable Length Instruction
Architecture", genauer beschrieben ist. Der Decodierer
20b ist vorzugsweise in der Ausführungseinheit nahe der
Gabelwarteschlange 23b statt in der Befehlseinheit
angeordnet, da die Gabeladressen mehr Bits enthalten als die
Opcodes, so daß in diesem Fall weniger Datenleitungen
zwischen der Befehlseinheit und der Ausführungseinheit
erforderlich sind.
-
Der Ausgang des Programmzählerdecodierers 20a wird in
einer Programmzählerwarteschlange 23a in der
Ausführungseinheit 13 gespeichert. Der RAM 20b empfängt nur das
Opcode-Byte jedes Befehls und verwendet diese Daten, um
eine "Gabel"-(Mikrocode)-Abfertigungsadresse aus einer
Tabelle auszuwählen. Diese Abfertigungsadresse
identifiziert den Beginn des Mikrocodes, der für die Ausführung
des Befehls geeignet ist, und wird in einer
Gabelwarteschlange 23b in der Ausführungseinheit 13 gespeichert.
-
Jeder der vier Decodierer 20c-20f empfängt sowohl das
Opcode-Byte als auch die Operandenspezifiziererdaten vom
Befehlspuffer 19. Die Decodierer 20c und 20d decodieren
zwei Quellenoperandenspezifizierer, um Quellenoperanden
zeiger zu erzeugen, die von der Ausführungseinheit
verwendet werden können, um die zwei Quellenoperanden zu
lokalisieren. Diese zwei Zeiger werden in einer
Quellenzeigerwarteschlange 23c in der Ausführungseinheit
gespeichert. Der Zieloperandenspezifizierer wird vom Decodierer
20e decodiert, um einen Zieloperandenzeiger zu erzeugen,
der in einer Zielzeigerwarteschlange 23e in der
Ausführungseinheit gespeichert wird.
-
Um auf die obenbeschriebenen Registerkonflikte zu prüfen,
werden jedes mal, wenn ein neuer Befehl decodiert wird,
zwei Masken erzeugt, um alle Universalregister zu
identifizieren, die die Ausführungseinheit während der
Ausführung dieses Befehls liest oder schreibt. Diese Masken
werden im Registeroperationsdecodierer 20c (im folgenden
in Verbindung mit Fig. 4 beschrieben) erzeugt und in
einer Maskenwarteschlange 23f in der Befehlseinheit
gespeichert. Jede Maske umfaßt eine Anzahl von
Bitpositionen, die der Anzahl der Universalregister entspricht.
In der Lesemaske wird für jedes während der Ausführung
des neuen Befehls zu lesende Universalregister ein Bit
gesetzt, während für jedes während der Ausführung dieses
Befehls zu schreibende Universalregister ein Bit in der
Schreibmaske gesetzt wird.
-
Sowohl die Lese- als auch die Schreibmasken für einen
gegebenen Befehl werden als einzelner Eintrag in der
Maskenwarteschlange 23f gespeichert. Wenn es 15
Universalregister gibt, besteht jeder Eintrag in der
Maskenwarteschlange aus 30 Bits (15 Bits in jeder Lesemaske zum
Identifizieren der zu lesenden Universalregister und
15 Bits in jeder Schreibmaske zum Identifizieren der zu
schreibenden Universalregister). Die Gesamtheit aller
gültigen Masken in der Maskenwarteschlange 23f wird
verwendet, um jedes zu verwendende Register zu prüfen, um
während der Vorverarbeitung von Befehlen in der
Befehlseinheit
12 eine Speicheradresse zu erzeugen, um zu
ermitteln, ob die Vorverarbeitung dieses Befehls angehalten
werden soll. Die bevorzugte Konstruktion und die
Operation der Maskenwarteschlange 23f wird genauer beschrieben
im obenerwähnten US-Patent Nr. 5.142.631 von Murray
u. a., eingereicht am 3. Februar 1989 mit dem Titel
"Multiple Instruction Processing System With Data
Dependency Resolution".
-
Diese Referenz zeigt ferner die Grundkonstruktion einer
Warteschlange genauer, die deren Einfügungszeiger, deren
Entnahmezeiger, die Logik zum Erfassen, wann die
Warteschlange voll ist, sowie die Logik zum Löschen der
Warteschlange enthält.
-
In Fig. 4 ist ein genaueres Blockschaltbild der
Quellenliste 24 und der zugehörigen Registergruppen, gemeinsam
mit 40 bezeichnet, gezeigt, die zusammen in zwei zeitlich
selbst gesteuerten integrierten
Registergruppenschaltungen integriert sind. Diese zeitlich selbst gesteuerte
Registergruppe 40 schafft die Datenschnittstelle zwischen
der Speicherzugriffseinheit 11, der Befehlseinheit 12 und
der Ausführungseinheit 13.
-
Die Registergruppe 40 enthält vorzugsweise vier Sätze mit
jeweils 16 Registern, wobei jedes Register 36 Bits lang
ist. In diesem Fall werden zwei integrierte Schaltungen
des gleichen Typs in Kombination verwendet, um die vier
Sätze der 16 32-Bit-Register zu schaffen. Jedes Register
ist so konfiguriert, daß es vier Bytes plus einem
Pantätsbit für jedes Byte enthält. Die vier Sätze
entsprechen jeweils den Universalregistern 41, der Quellenliste
24, den temporären Speicherregistern 42 und den
temporären Ausführungsregistern 43. Diese Register besitzen
Doppelanschluß-Ausgänge und enthalten zwei Multiplexer
45, 46, deren Eingänge mit jedem der 16 Register in jedem
der vier Sätze von Registern verbunden sind. Die Ausgänge
der 36-Bit-Multiplexer sind direkt mit der
Ausführungseinheit 13 verbunden. Zwischen der Ausführungseinheit 13
und den Auswahleingängen der Multiplexer 45, 46 sind
Auswahlleitungen angeschlossen. Diese Auswahlleitungen
erzeugen ein 6-Bit-Signal, um die Adressierung jedes der
64 individuellen Register zu ermöglichen. Die Eingänge in
jedes der Register 41, 24, 42, 43 weisen ebenfalls die
Doppelanschluß-Verschiedenheit auf und akzeptieren sowohl
A- als auch B-Dateneingänge. Es ist jedoch zu beachten,
daß dann, wenn die vier Sätze von Registern jeweils die
Doppelanschluß-Verschiedenheit aufweisen, die
Registergruppe 40 Eingänge von drei unterschiedlichen Quellen
empfängt und diese Eingänge so weiterleitet, daß nicht
mehr als zwei Eingänge an irgendeinen der vier Sätze von
Registern geliefert werden.
-
Wie oben angegeben, ist die Quellenliste 24 eine
Registergruppe, die Quellenoperanden enthält. Somit zeigen
die Einträge in der Quellenzeigerwarteschlange der
Ausführungseinheit 13 auf die Quellenliste für Speicher- und
Unmittelbar- oder Literaloperanden. Sowohl die
Speicherzugriffseinheit 11 als auch die Befehlseinheit 12
schreiben Einträge in die Quellenliste 24, wobei die
Ausführungseinheit 13 nach Bedarf Operanden aus der
Quellenliste liest, um die Befehle auszuführen.
-
Die Universalregister 41 enthalten 16 Universalregister,
wie von der VAX-Architektur definiert wird. Diese
Register bieten Speicher für die Quellenoperanden und die
Ergebnisse der ausgeführten Befehle. Ferner schreibt die
Ausführungseinheit 13 Ergebnisse in die Universalregister
41, während die Befehlseinheit 13 die Universalregister
41 bei Selbstinkrement- und Selbstdekrement-Befehlen
aktualisiert.
-
Die temporären Speicherregister 42 enthalten 16
Hochgeschwindigkeitsregister, auf die durch die
Ausführungseinheit 13 und die Speicherzugriffseinheit 11 zugegriffen
werden kann. Die Speicherzugriffseinheit 11 schreibt die
von der Ausführungseinheit 13 angeforderten Daten. Ferner
kann die Mikrocode-Ausführungseinheit 26 ebenfalls
Schreibvorgänge in die temporären Speicherregister
einleiten, falls während der Mikrocode-Ausführung
erforderlich.
-
Die temporären Ausführungsregister 43 enthalten 16
Hochgeschwindigkeitsregister, auf die allein von der
Ausführungseinheit 13 zugegriffen werden kann. Genauer
verwendet die Mikrocode-Ausführungseinheit 13 die temporären
Ausführungsregister 43 für eine Zwischenspeicherung.
-
Die Ausführungseinheit 13 ist mit den Universalregistern
46, den temporären Speicherregistern 42 und den
temporären Ausführungsregistern 43 über einen 36-Bit-Datenbus
verbunden. Die Übertragungsgatter 47, 48 und 49 steuern
jeweils die Daten, die vom Ausführungseinheitsdatenbus an
die Universalregister 41, die temporären Speicherregister
42 und die temporären Ausführungsregister 43 geliefert
werden, über einen 6-Bit-Auswahlbus, der mit den
Auswahleingängen der Übertragungsgatter 47, 48 und 49 verbunden
ist. In ähnlicher Weise ist die Befehlseinheit 12 mit den
B-Eingängen der Universalregister 41 und der Quellenliste
24 über die Übertragungsgatter 50, 51 verbunden. In
diesem Fall sind jedoch die Auswahlleitungen der
Übertragungsgatter 50, 51 voneinander getrennt und werden
unabhängig gesteuert. Der Zweck der unabhängigen
Adressierbarkeit besteht darin, die Anzahl von Taktzyklen zu
reduzieren, die erforderlich sind, um
Selbstinkrementund Selbstdekrement-Bewege-Adressenoperationen aus
zuführen, die der Vorverarbeitung der Spezifizierer mit
Selbstinkrement- oder Selbstdekrement-Modi zugeordnet
sind. Genauer wird für ein Selbstdekrement in einem
einzigen Zyklus der Anfangswert eines spezifizierten
Universalregisters dekrementiert und der dekrementierte
Wert zurück in das Universalregister geladen und ferner
in einen ausgewählten Eintrag in der Quellenliste 24
geladen. Für ein Selbstinkrement jedoch wird in einem
einzigen Zyklus der Anfangswert eines spezifizierten
Universalregisters inkrementiert und in das
Universalregister zurückgeladen, wobei jedoch in den ausgewählten
Eintrag in der Quellenliste der Anfangswert geladen wird.
Somit erlaubt die unabhängige Adressierbarkeit, daß
sowohl die Selbstinkrement- als auch die
Selbstdekrementoperation in einem einzigen Zyklus durchgeführt werden.
-
Die Speicherzugriffseinheit 11 besitzt einen 72-Bit-
Datenbus und schreibt somit vorzugsweise in zwei 36-Bit-
Register. Daher ist der Bus in einen niedrigerwertigen
36-Bit-Abschnitt und einen höherwertigen 36-Bit-Abschnitt
unterteilt, um zu ermöglichen, daß die Daten in
aufeinanderfolgenden Registeradressen gespeichert werden. Die
niedrigerwertigen 36 Bits werden entweder über das
Übertragungsgatter 52 zur Quellenliste 24 oder über das
Übertragungsgatter 53 zum temporären Speicherregister 42
geliefert. In der obenerwähnten bevorzugten
Implementierung, die zwei gleiche integrierte Schaltungen verwendet,
werden die höherwertigen 18 Bits jedes 32-Bit-Abschnitts
in einer der integrierten Schaltungen gespeichert,
während die entsprechenden niedrigerwertigen 18 Bits des 32-
Bit-Abschnitts in der anderen integrierten Schaltung
gespeichert werden.
-
Die Speicherzugriffseinheit 11 liefert ferner einen 7-
Bit-Auswahlbus an die Übertragungsgatter 68, 70. Das
zusätzliche Bit wird verwendet, um der
Speicherzugriffseinheit 12 zu ermöglichen, die höherwertigen
36 Bits zu schreiben, die an das nächste sequentielle
Register entweder über das Übertragungsgatter 68 zur
Quellenliste 48 oder über das Übertragungsgatter 70 zum
temporären Speicherregister 50 geliefert werden. Somit
werden die höherwertigen 36 Bits entweder in der
Quellenliste 48 oder im temporären Speicherregister 50 an einer
Stelle gespeichert, die um 1 größer ist als die im
gleichen Register gespeicherten niedrigerwertigen 36 Bits.
Wenn somit die Ausführungseinheit 16 die in der
Quellenliste und den temporären Speicherregistern 48, 50
gespeicherten Daten wiedergewinnt, gewinnt sie zuerst die in
den niedrigerwertigen 36 Bits gespeicherten Daten,
inkrementiert ihren internen Zeiger und gewinnt anschließend
die höherwertigen 36 Bits, ohne erneut eine zweite
Adresse zu berechnen.
-
In Fig. 5 ist der Datenpfad durch die Befehlseinheit
genauer gezeigt. Der Befehlsdecodierer 20 besitzt die
Fähigkeit, gleichzeitig zwei Quellenspezifizierer und
einen Zielspezifizierer zu decodieren. Während eines
Taktzyklus kann einer der Quellenspezifizierer ein
Kurzliteralspezifizierer sein. In diesem Fall wird das
decodierte Kurzliteral über einen EX-Bus zu einer
Erweiterungseinheit übertragen, die das Kurzliteral auf eines
oder mehrere 32-Bit-Langwörter erweitert, die ausreichen,
um dieses Kurzliteral darzustellen oder in den für diesen
Spezifizierer für den derzeit decodierten Befehl
spezifizierten Datentyp umzusetzen.
-
Der Befehlsdecodierer besitzt die Fähigkeit, während
jedes Taktzyklus einen "komplexen" Quellen- oder
Zielspezifizierer zu decodieren. Mit komplex ist gemeint, daß
der Spezifizierer weder ein Registerspezifizierer noch
ein Kurzliteralspezifizierer ist. Ein komplexer
Spezifizierer kann z. B. eine Basisregisternummer, eine
Indexregisternummer und eine Verschiebung enthalten und kann
verschiedene Modi wie z. B. unmittelbar, absolut,
abgeleitet
und die Selbstinkrement- und Selbstdekrement-Modi
aufweisen. Die Auswertung komplexer Spezifizierer für
einige dieser Modi erfordert eine Adreßberechnung und
Speicherleseoperationen, die von einer GP-Einheit oder
einer Adreßberechnungseinheit 62 ausgeführt werden.
-
Für die Berechnung einer Verzweigungsverschiebung oder
unmittelbarer Daten (d. h. ein im Befehlsstrom gefundenes
Langliteral) ist es nicht erforderlich, daß die
GP-Einheit eine Speicherleseoperation einleitet. Im Fall einer
Verzweigungsverschiebung sendet die GP-Einheit die
Verschiebung direkt zur Verzweigungsvorhersageeinheit (28 in
Fig. 1). Für unmittelbare Daten sendet die GP-Einheit die
Daten zur Quellenliste 24. Da die Quellenliste einen
einzigen Anschluß besitzt, der für die
Operandenverarbeitungseinheit 21 verfügbar ist, ist in der
Operandenverarbeitungseinheit ein Multiplexer 63 enthalten, um 32-Bit-
Wörter an Daten entweder aus der GP-Einheit 62 oder der
EXP-Einheit 61 auszuwählen. Einer gültigen Erweiterung
eines Kurzliterals wird Vorrang gegeben.
-
Normalerweise werden Registerspezifizierer nicht von der
Befehlseinheit bewertet, statt dessen werden
Registerzeiger (d. h. Universalregisternummern) an die
Ausführungseinheit weitergeleitet. Dies vermeidet Halte in den
Fällen, in denen ein im voraus decodierter, jedoch noch
nicht ausgeführter Befehl, den Wert des Registers
verändem kann. In einem ungewöhnlichen Fall von
"Intrabefehls-Registerlesekonflikt" erhält jedoch die GP-
Einheit die Inhalte eines durch einen Registeroperanden
spezifizierten Registers und plaziert die Inhalte in der
Quellenliste. Dies tritt dann auf, wenn der
Befehlsdecodierer 20 den Konflikt detektiert und ein Antwortsignal
zu einem Mikrosequenzer 63 sendet, der im voraus so
programmiert ist, daß er die normale Operation der GP-
Einheit übersteuert, um den Konflikt zu behandeln. Der
Mikrosequenzer ist ferner so programmiert, daß er die
Befehlseinheitskopie der Universalregister mit den
Universalregistern in der Ausführungseinheit in
Übereinstimmung hält. Diese Aspekte der
Operandenverarbeitungseinheit sind in der obenerwähnten US-Patentanmeldung mit dem
Titel "Decoding Multiple Specifiers in a Variable Length
Instruction Architecture" beschrieben.
-
In Fig. 6 ist das Format für den GP-Bus genauer gezeigt.
Der GP-Bus sendet ein einzelnes Bit "Daten-Gültig-Merker"
(VDF), um der Universaleinheit 62 anzuzeigen, ob während
des vorangehenden Zyklus des Systemtaktes ein komplexer
Spezifizierer decodiert worden ist. Ein Einzelbit
"Indexregistermerker" (IRF) wird ebenfalls übertragen, um
anzuzeigen, ob der komplexe Spezifizierer auf ein
Indexregister Bezug nimmt. Ein beliebiges in Bezug genommenes
Indexregister wird durch eine 4-Bit-Indexregisternummer
bezeichnet, die über den GP-Bus übertragen wird. Der GP-
Bus befördert ferner 4-Bits, die den Spezifizierermodus
des komplexen Spezifizierers anzeigen, 4-Bits, die die
Basisregisternummer anzeigen, sowie 32-Bits, die eine
beliebige Verschiebung enthalten, die vom komplexen
Spezifizierer spezifiziert wird.
-
Der GP-Bus überträgt ferner eine
3-Bit-Spezifizierernummer, die die Position des komplexen Spezifizierers in der
Sequenz der Spezifizierer für den aktuellen Befehl
angibt. Die Spezifizierernummer ermöglicht der
Universaleinheit 62, den Zugriffs- und Datentyp für den
spezifizierten Operanden aus einer Decodierung des Opcode-
Bytes auszuwählen. Die Universaleinheit 62 kann daher in
gewisser Weise unabhängig von der Erweiterungseinheit 61
und der Übertragungseinheit 64 der Fig. 5 operieren.
Genauer schafft die Universaleinheit 62 ein unabhängiges
Haltesignal (OPU_STALL), das anzeigt, ob die
Universaleinheit
62 mehr als einen Zyklus benötigt, um den
Operanden zu ermitteln.
-
In Fig. 7 ist das Format für den Erweiterungsbus (EX)
gezeigt. Der Erweiterungsbus befördert einen Einzelbit-
Gültigkeitsdatenmerker, die 6 Bit der Kurzliteraldaten
sowie eine 3-Bit-Spezifizierernummer. Die
Spezifizierernummer zeigt die Position des Kurzliteralspezifizierers
in der Sequenz der Spezifizierer an, die dem momentanen
Befehl folgen, und wird von der Erweiterungseinheit 31
verwendet, um den relevanten Datentyp aus einer
Decodierung des Opcode-Bytes auszuwählen. Daher kann die
Erweiterungseinheit 61 ebenfalls eher unabhängig operieren und
erzeugt ein entsprechendes Haltsignal (SL_STALL), das
anzeigt, ob die Erweiterungseinheit mehr als einen Zyklus
benötigt, um einen Kurzliteralspezifizierer zu
verarbeiten.
-
In Fig. 8 ist das Format für den Übertragungsbus (TR)
gezeigt. Der TR-Bus enthält einen ersten Quellenbus 65,
einen zweiten Quellenbus 66, sowie einen Zielbus 67, die
jeweils einen entsprechenden Gültigkeitsdatenmerker
(VDF), einen Registermerker (RGF) sowie eine
Registernummer befördern. Der Registermerker wird gesetzt, wenn ein
entsprechender Registerspezifizierer decodiert worden
ist. Ferner wird immer dann, wenn ein komplexer
Spezifizierer oder ein Kurzliteralspezifizierer decodiert
werden, das entsprechende der Gültigkeitsdatenmerker auf dem
ersten Quellenbus, dem zweiten Quellenbus oder dem
Zielbus gesetzt, wobei der zugehörige Registermerker gelöscht
wird, um auf dem Datenpfad zur
Quellenlistenzeigerschlange oder zur Zielwarteschlange für den Quellen- oder
Zieloperanden Platz zu reservieren.
-
Ein Eintrag in der Quellenzeigerwarteschlange besitzt
vorzugsweise ein Format, das der Kombination des
Quelle-1-Busses 65 und des Quelle-2-Busses 66 entspricht
oder dieser ähnlich ist. Immer wenn ein gültiger
Quelle-1-Spezifizierer kein Registerspezifizierer ist und
angenommen wird, daß die Warteschlangen 23 oder die
Quellenliste 24 nicht überläuft, wird der nächste freie
Quellenlistenzeiger anstelle der ungültigen Quelle-1-
Registernummer in die Quellenzeigerwarteschlange
eingesetzt. In ähnlicher Weise wird immer dann, wenn ein
gültiger Quelle-2-Spezifizierer kein
Registerspezifizierer ist, der nächste folgende freie Quellenlistenzeiger
(d. h. den Quellenlisteneinträgen folgend, die für einen
Quelle-1-Nicht-Registerspezifizierer reserviert sind, für
den Fall, daß die Quelle 1 kein Registerspezifizierer
ist) in die Quellenzeigerwarteschlange anstatt der
ungültigen Quelle-2-Registernummer eingesetzt, für den Fall,
daß die Warteschlangen 23 oder die Quellenliste nicht
überläuft. Genauer, wenn zwei
Nicht-Register-Spezifizierer vorliegen, wird ein Quellenlistenzeiger auf den
ersten Spezifizierer nicht in der
Quellenzeigerwarteschlange 23c plaziert, solange nicht ein
Quellenlistenzeiger auf den zweiten Spezifizierer ebenfalls
gleichzeitig im selben Eintrag der Quellenzeigerwarteschlange
plaziert werden kann, ohne einen Überlauf der
Quellenliste zu verursachen. Dies vereinfacht die
Warteschlangenkonstruktion insofern, als nur ein einzelner
Schreibfreigabeimpuls für das Einfügen eines Eintrages in die
Schreibwarteschlange erforderlich ist, wobei es noch
wichtiger ist, daß eine 1-zu-l-Entsprechung zwischen
jedem Eintrag der Quellenzeigerwarteschlange und einem
Zyklus des Befehlsdecodierers, in dem wenigstens ein
gültiger Spezifizierer decodiert wird, vorliegt, so daß
die Reihenfolge der Decodierung der Spezifizierer und
deren Reihenfolge innerhalb des decodierten Befehls
später leicht von der Befehlseinheit ermittelt werden
können; genauer kann die Ausführungseinheit immer
annehmen, daß ein gültiger und vorangehender
Quelle-1-Spezifizierer
vorliegt, für den Fall, daß ein gültiger Quelle-2-
Spezifizierer vorhanden ist, was durch den Quelle-2-
Daten-Gültig-Merker (VDF) in der Warteschlange angezeigt
wird. Zum Erzeugen der nächsten freien
Quellenlistenzeiger entsprechend diesen Betrachtungen ist eine
Freizeigerlogik 68 in der Operandenverarbeitungseinheit 21
(siehe Fig. 5) zusammen mit einem Satz von Multiplexern
69 vorgesehen, die die Freizeiger in die entsprechenden
ungültigen Registernummern einsetzen, was durch das
Vorhandensein der gültigen Nicht-Register-Spezifizierer
und bei Abwesenheit von Überlaufbedingungen erforderlich
ist.
-
Der einzige Zielzeiger, der für
Nicht-Register-Zielspezifizierer (d. h. komplexe Spezifizierer, da ein
Literalspezifizierer nicht als gültiges Ziel decodiert wird)
verwendet wird, ist vorzugsweise der Daten-Gültig-Merker.
Mit anderen Worten, zum Zeigen auf die Zieladressen der
Speicherschreibspezifizierer wird ein anderer Mechanismus
verwendet. Der bevorzugte Mechanismus ist eine
"Schreibwarteschlange" 70 (siehe Fig. 1) in der
Speicherzugriffseinheit, um die physikalischen Adressen der
Speicherschreibspezifizierer in eine Warteschlange zu stellen.
Wenn somit die GP-Einheit die Adresse eines Zielortes
berechnet, sendet die GP-Einheit diese zur
Speicherzugriffseinheit zusammen mit einem Code, der diese als
Zieladresse identifiziert, die in der
Schreibwarteschlange zu speichern ist, bis das entsprechende Ergebnis
von der Entnahmeeinheit 27 der Ausführungseinheit 13
entnommen und zum Speicher übertragen wird. Da die
Entnahmeeinheit Ergebnisse in derselben Reihenfolge
entnimmt, in der sie decodiert werden, wird die
entsprechende Adresse für jedes Ergebnis von der Spitze der
Schreibwarteschlange entfernt, wenn das Ergebnis
entnommen und zur Speicherzugriffseinheit weitergeleitet worden
ist. Weitere Aspekte der Schreibwarteschlange 70 sind
offenbart im obenerwähnten US-Patent Nr. 5.125.083,
eingereicht am 3. Februar 1989, mit dem Titel "Method and
Apparatus For Resolving A Variable Number Of Potential
Memory Access Conflicts In A Pipelined Computer System".