DE4244924C2 - Parallelverarbeitungseinheit und Verfahren dafür - Google Patents
Parallelverarbeitungseinheit und Verfahren dafürInfo
- Publication number
- DE4244924C2 DE4244924C2 DE4244924A DE4244924A DE4244924C2 DE 4244924 C2 DE4244924 C2 DE 4244924C2 DE 4244924 A DE4244924 A DE 4244924A DE 4244924 A DE4244924 A DE 4244924A DE 4244924 C2 DE4244924 C2 DE 4244924C2
- Authority
- DE
- Germany
- Prior art keywords
- branch
- instruction
- flag
- command
- prediction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000012545 processing Methods 0.000 claims description 40
- 238000000034 method Methods 0.000 claims description 29
- 230000001419 dependent effect Effects 0.000 claims description 9
- 230000004044 response Effects 0.000 claims description 9
- 230000006870 function Effects 0.000 claims description 8
- 238000001514 detection method Methods 0.000 claims description 7
- 238000012790 confirmation Methods 0.000 claims 5
- 238000012795 verification Methods 0.000 claims 3
- 238000010586 diagram Methods 0.000 description 13
- 230000003111 delayed effect Effects 0.000 description 9
- 230000014509 gene expression Effects 0.000 description 9
- 230000002265 prevention Effects 0.000 description 7
- 230000015556 catabolic process Effects 0.000 description 6
- 238000006731 degradation reaction Methods 0.000 description 6
- 230000006866 deterioration Effects 0.000 description 5
- 238000012360 testing method Methods 0.000 description 5
- 230000000873 masking effect Effects 0.000 description 4
- 230000004913 activation Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 238000007796 conventional method Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012502 risk assessment Methods 0.000 description 2
- 241000270295 Serpentes Species 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000002542 deteriorative effect Effects 0.000 description 1
- 230000007274 generation of a signal involved in cell-cell signaling Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Description
Die Erfindung betrifft eine Parallelverarbeitungseinheit und ein Verfah
ren zum Ausführen von Befehlen in einer Parallelverarbeitungseinheit.
In einem Pipeline-Computer werden die Befehle, die sich bereits in
der Pipeline befinden, ungültig gemacht, wenn eine Verzweigung
auftritt. Diese Ungültigkeitserklärung von in der Pipeline
befindlichen Befehlen verschlechtert die Leistung des Pipeline-
Computers. Zum besseren Verständnis für diese Situation wird im
folgenden ein Prozessor mit einer fünfstufigen Pipeline betrachtet.
IF: Einlesen eines Befehls (Instruction Fetch).
ID: Befehlsdekodierung, Lesen aus einem Registersatz und Verzweigungsbefehl ausführen (Instruction Decode).
EXC: ein Befehl wird unter Verwendung einer ALU (arithmetische und logische Einheit) ausgeführt.
MEM: auf einen Speicher (Datenspeicher) wird zugegriffen.
WB: Schreiben von Daten in den Registersatz wird ausgeführt.
IF: Einlesen eines Befehls (Instruction Fetch).
ID: Befehlsdekodierung, Lesen aus einem Registersatz und Verzweigungsbefehl ausführen (Instruction Decode).
EXC: ein Befehl wird unter Verwendung einer ALU (arithmetische und logische Einheit) ausgeführt.
MEM: auf einen Speicher (Datenspeicher) wird zugegriffen.
WB: Schreiben von Daten in den Registersatz wird ausgeführt.
In Fig. 1 ist der Betrieb einer Pipeline dargestellt, wenn eine
Verzweigung ausgeführt wird. Wenn keine Verzweigung existiert, führt
die Pipeline die vorbestimmten Befehle nacheinander aus. Daher
laufen die Befehle in die Pipeline in der Reihenfolge der Befehle i,
i+1, i+2, i+3, . . . ein. Es wird angenommen, daß der Befehl i+1 einen
Verzweigungsbefehl darstellt. Ob vom Befehl i+1 eine Verzweigung
vorgenommen wird oder nicht ist bis zum Ende der ID-Stufe unbekannt.
Wenn der Befehl i+1 zum Zeitpunkt (Takt) T+2 in die ID-Stufe
eintritt, läuft der nächste Befehl i+2 daher natürlicherweise in die
IF-Stufe ein.
Wenn am Ende von T+2 bekannt ist, daß entsprechend dem
Verzweigungsbefehl i+1 eine Verzweigung vorgenommen wird, ist der
als nächstes auszuführende Befehl nicht der Befehl i+2, sondern der
Befehl eines Verzweigungsziels. Daher wird zu diesem Zeitpunkt (am
Ende von T+2) der Befehl i+2 storniert. Unter der Annahme, daß der
Verzweigungszielbefehl ein Befehl j ist, läuft zum Zeitpunkt T+3 der
Befehl j in die IF-Stufe ein. Genauer gesagt wird für die Pipeline
eine Zeitspanne von der Dauer eines Takts erzeugt, in der kein
Befehl verarbeitet wird, wenn eine Verzweigung vorgenommen wird.
Diese Leerzeit von einem Takt in der Pipeline verschlechtert die
Verarbeitungsgeschwindigkeit des Prozessors und stört die
Leistungsergebnisse.
In einem RISC (Reduced Instruction Set Computer; Computer mit
vermindertem Befehlssatz) wird eine solche Verschlechterung der
Leistungsfähigkeit durch einen Verzweigungsbefehl verhindert, indem
man ein Verfahren mit verzögerter Verzweigung benutzt. Bei der
verzögerten Verzweigung werden die bereits in der Pipeline
befindlichen Befehle nicht ungültig gemacht, wenn eine Verzweigung
vorgenommen wird. Für den Fall einer verzögerten Verzweigung, bei
der die Leerzeitspanne in der Pipeline, die aufgrund einer
Verzweigung erzeugt wird, gleich "1" ist, werden die Befehle in der
folgenden Reihenfolge ausgeführt:
VERZWEIGUNGSBEFEHL
<BEFEHL<, und
VERZWEIGUNGSZIELBEFEHL.
VERZWEIGUNGSBEFEHL
<BEFEHL<, und
VERZWEIGUNGSZIELBEFEHL.
Der Anteil <Befehl< wird als Verzweigungsverzögerungs-Slot
bezeichnet. Der Befehl des Verzweigungsverzögerungs-Slot wird
unabhängig vom Vorhandensein oder Nicht-Vorhandensein einer
Verzweigung ausgeführt. Daher sollte ein Compiler einen
Verzweigungs-Slot schaffen, indem ein Befehl so verschoben wird, daß
das Ausführungsergebnis korrekt ist.
Ein Befehl, der in einen Verzweigungsverzögerungs-Slot verschoben
werden kann, ist in Fig. 2 gezeigt. In Fig. 2 ist jeder
Verzweigungsbefehl durch ein "IF . . . THEN" bezeichnet und sein
Verzweigungsziel durch einen Pfeil gekennzeichnet.
Wie in Fig. 2(A) dargestellt ist, wird ein Befehl "R1 ← R2 + R3" in
einen Verzweigungsverzögerungs-Slot verschoben. Der Befehl "R1 ←
R2 + R3" wird unabhängig vom Vorhandensein oder Nicht-Vorhandensein
einer Verzweigung ausgeführt und kann daher bedingungslos in den
Verzweigungsverzögerungs-Slot verschoben werden.
Für den Fall von Fig. 2(B), wenn das Verzweigungsziel eines
Verzweigungsbefehls ein Befehl "R4 ← R5 - R6" darstellt, wird dieser
Befehl "R4 ← R5 - R6" in einen Verzweigungsverzögerungs-Slot
verschoben. Der Befehl "R4 ← R5 - R6" im Verzweigungsverzögerungs-Slot
wird selbst dann ausgeführt, wenn keine Verzweigung vorgenommen
wird, und daher muß garantiert sein, daß ein korrektes Ergebnis
auftritt, auch wenn keine Verzweigung vorgenommen wird.
In Fig. 2(C) wird der dem Verzweigungsverzögerungs-Slot nächst
liegende Befehl "R4 ← R5 - R6" in den Verzweigungsverzögerungs-Slot
verschoben. In diesem Fall stellt der Befehl "R4 ← R5 - R6"
ursprünglich einen Befehl dar, der nicht ausgeführt wird, wenn eine
Verzweigung auftritt, und daher muß sichergestellt sein, daß auch
dann ein korrektes Ergebnis auftritt, wenn eine Verzweigung erfolgt.
Nun wird ein Superskalarprozessor beschrieben. Der Superskalarprozessor stellt einen
Prozessor dar, der die folgenden charakteristischen Besonderheiten
aufweist:
- (1) Einlesen einer Mehrzahl von Befehlen;
- (2) Aufweisen einer Mehrzahl von Funktionseinheiten und gleichzeitiges Ausführen einer Mehrzahl von Befehlen; und
- (3) Erfassen von gleichzeitig ausführbaren Befehlen aus der
eingelesenen Mehrzahl von Befehlen und Verteilen dieser gleichzeitig
ausführbaren Befehle an zugehörige Funktionseinheiten.
Im Folgenden wird für Superskalarprozessor auch kurz Superskalar geschrieben.
Die allgemeine Struktur eines Superskalars ist in Fig. 3 gezeigt.
Wie in Fig. 3 dargestellt ist, weist der Superskalar einen
Befehlsspeicher 1 zum Speichern von Befehlen, eine
Befehlseinlesestufe (IF-Stufe) 2 zum Übertragen der Adressen der
einzulesenden Befehle an den Befehlsspeicher 1, eine
Befehlsdekodierstufe (ID-Stufe) 3 zum Ausführen der Dekodierung der
eingelesenen Mehrzahl von Befehlen, Lesen aus einem (nicht
dargestellten) Registersatz und Verzweigungsbefehlen,
Funktionseinheiten 4a, 4b, 6 und 7 jeweils zum Ausführen einer
vorbestimmten Operation und einen Datenspeicher 8 zum Speichern von
Daten auf.
Die Befehlsdekodierstufe 3 erfaßt auch gleichzeitig ausführbare
Befehle in der dekodierten Mehrzahl von Befehlen und verteilt diese
gleichzeitig ausführbaren Befehle an die Funktionseinheiten 4a, 4b,
6 und 7.
Die Funktionseinheiten 4a und 4b führen eine Ganzzahladdition etc.
aus. Die Funktionseinheit 6 führt ein Laden oder Speichern von Daten
vom/in den Datenspeicher 8 aus. Die Funktionseinheit 7 führt eine
Gleitkommaaddition etc. aus.
Die Funktionseinheiten 4a, 4b, 6 und 7 weisen jeweils eine Mehrzahl
von Pipeline-Stufen auf. Die Funktionseinheiten 4a und 4b weisen
eine Ausführungsstufe EXC zum Ausführen eines gegebenen Befehls und
eine Registersatz-Schreibstufe WB zum Schreiben des
Ausführungsergebnisses in einen (nicht dargestellten) Registersatz
auf. Die Funktionseinheit 6 weist eine Adreßberechnungsstufe ADR zum
Berechnen einer Adresse, um den Datenspeicher 8 vom gegebenen Befehl
anzusprechen, eine Speicherzugriffsstufe MEM zum Zugreifen auf den
Datenspeicher entsprechend der berechneten Adresse, und eine
Registersatz-Schreibstufe WB zum Schreiben von Daten, die vom
Datenspeicher 8 geladen werden, in den Registersatz, auf.
Die Funktionseinheit 7 weist drei Ausführungsstufen EXC1, EXC2 und
EXC3 sowie eine Registersatz-Schreibstufe WB zum Schreiben des
Ausführungsergebnisses in den Registersatz auf. Im Superskalar, wie
er in Fig. 3 dargestellt ist, wird eine Mehrzahl von Befehlen
gleichzeitig aus dem Befehlsspeicher 1 eingelesen, und eine Mehrzahl
von Befehlen wird parallel in den Funktionseinheiten 4a, 4b, 6 und 7
ausgeführt. Daher wird eine verbesserte Verarbeitungsgeschwindigkeit
im Vergleich zu einem herkömmlichen Prozessor mit nur einer Pipeline
erzielt.
In Fig. 4 ist der Betrieb einer Pipeline dargestellt, wenn in einem
Superskalar eine Verzweigung auftritt. In Fig. 4 ist der Betrieb der
Pipeline im Superskalar gezeigt, wenn zwei Befehle gleichzeitig
eingelesen werden und maximal zwei Ganzzahlbefehle gleichzeitig
ausgeführt werden können. Unter der Annahme, daß der Befehl i+3
einen Verzweigungsbefehl darstellt, ist daß es bekannt ist, daß eine
Verzweigung auftritt, wenn der Befehl i+3 die ID-Stufe
(Befehlsdekodierstufe) erreicht hat. Zu diesem Zeitpunkt befinden
sich die Befehle i+4 und i+5 bereits in der IF-Stufe
(Befehlseinlesestufe). Diese Befehle i+4 und i+5 werden storniert,
wenn die Erzeugung der Verzweigung bekannt ist.
Ab dem Zeitpunkt (Takt) T+3 wird ein Verzweigungszielbefehl, der
Befehl j, gestartet. Wie in Fig. 4 gezeigt ist, wird im Superskalar
eine Mehrzahl von Befehlen gleichzeitig ausgeführt, es existiert
eine Mehrzahl von zu stornierenden Befehlen, und die
Leistungsfähigkeit wird stärker beeinflußt wie bei einem Prozessor
mit nur einer Pipeline.
Wenn ein Verfahren mit verzögerter Verzweigung benutzt wird, bei dem
der Verzweigungsverzögerungs-Slot nach diesem Verzweigungsbefehl
erledigt wird, sollte eine Mehrzahl von Befehlen als
Verzweigungsverzögerungs-Slot vorhanden sein.
Entsprechend dem Vortrag "Computer Architecture: A Quantitative
Approach" von J. Hennessy, D.A. Patterson, S. 276, Fig. 6.22 ist die
Wahrscheinlichkeit, daß ein Verzweigungsverzögerungs-Slot von einem
Befehl aufgefüllt wird, der von einem Compiler verschoben worden
ist, etwa gleich 50%. Üblicherweise werden NOP-Befehle etc. in die
Verzweigungsverzögerungs-Slots eingesetzt, die nicht mit einem
signifikanten Befehl gefüllt werden können. Daher ist in einem
Superskalar, in dem eine Mehrzahl von Verzweigungsverzögerungs-Slots
existiert, die Wahrscheinlichkeit sehr gering, daß alle
Verzweigungsverzögerungs-Slots mit verschobenen Befehlen gefüllt
werden.
Auch können im Superskalar Befehle, die in Verzweigungsverzögerungs-
Slots verschoben werden können, zur Ausführung zusammen mit anderen
Befehlen als gleichzeitig ausführbare Befehle verschoben werden,
bevor sie zum Auffüllen der Verzweigungsverzögerungs-Slots benutzt
werden. Entsprechend ist es beim Superskalar schwierig, die
Leistungsfähigkeit entsprechend einem herkömmlichen Verfahren mit
verzögerter Verzweigung zu verbessern.
Aus SOHI G. S.: Instruction Issue Logic for High-Performance,
Interruptible, Multiple Functional Unit, Pipelined Computers;
In: IEEE Transactions on Computers, Bd. 39, Nr. 3, 1990, S.
349-359 ist eine Parallelverarbeitungseinheit mit einer
Mehrzahl von parallel betreibbaren Funktionseinheiten zum
Ausführen von Befehlen, einem Befehlsspeicher zum Speichern
von Befehlen und einer Speichereinrichtung zum Speichern von
Befehlen, die aus dem Befehlsspeicher geholt sind, bekannt.
Eine Verzweigungsvorhersage wird durchgeführt unter Benützung
einer Registeraktualisierungseinheit (RUU). Die RUU überwacht,
ob die vorhergesagte Richtung nach der Verzweigungsvorhersage
richtig ist.
Es ist daher Aufgabe der vorliegenden Erfindung, eine
Parallelverarbeitungseinheit und ein Verfahren zum Ausführen
von Befehlen in einer Parallelverarbeitungseinheit vorzusehen,
die eine effektive Verarbeitung von Befehlen einschließlich
von Verzweigungsbefehlen möglich machen.
Diese Aufgabe wird gelöst durch eine Parallelverarbeitungsein
heit mit den Merkmalen des Anspruchs 1 und ein Verfahren zum
Ausführen von Befehlen in einer Parallelverarbeitungseinheit
mit den Merkmalen des Anspruchs 9.
Bevorzugte Ausgestaltungen der Erfindung sind in den jeweils
zugehörigen Unteransprüchen angegeben.
Es folgt die Beschreibung von Ausführungsbeispielen anhand der Figuren. Von
den Figuren zeigen:
Fig. 1 eine Tabelle zur Darstellung einer herkömmlichen
Verzweigungsverzögerungsoperation;
Fig. 2(A), 2(B), 2(C) eine Darstellung, wie ein
Verzweigungsverzögerungs-Slot mit einem Befehl aufgefüllt
wird;
Fig. 3 die allgemeine Struktur eines Superskalars;
Fig. 4 eine Tabelle zur Darstellung einer
Verzweigungsverzögerungsoperation in einem Superskalar;
Fig. 5 ein Blockdiagramm der Struktur einer Befehlsdekodierstufe
nach einer Ausführungsform der Erfindung;
Fig. 6 eine Darstellung des grundlegenden Betriebs der in Fig. 5
gezeigten Befehlswarteschlange;
Fig. 7 eine Darstellung zur Erläuterung der Definition eines
Verzweigungsverzögerungs-Slot;
Fig. 8 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl eine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
noch nicht eingelesen worden ist;
Fig. 9 den Zustand eines Zyklus, der der in Fig. 8 gezeigten
Befehlswarteschlange am nächsten ist;
Fig. 10 den Zustand eines Zyklus, der dem in Fig. 9 gezeigten
Zyklus am nächsten ist;
Fig. 11 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl eine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
bereits eingelesen worden ist;
Fig. 12 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl eine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
bereits eingelesen worden ist;
Fig. 13 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl eine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
bereits eingelesen worden ist;
Fig. 14 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl keine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
bereits eingelesen worden ist;
Fig. 15 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl keine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
noch nicht eingelesen worden ist;
Fig. 16 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl keine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
noch nicht eingelesen worden ist;
Fig. 17 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl keine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
bereits eingelesen worden ist;
Fig. 18 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl keine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
bereits eingelesen worden ist;
Fig. 19 eine Tabelle, die die Logik im Zeigersteuerbereich von
Fig. 1 darstellt;
Fig. 20(A), 20(B) ein Logikdiagramm der Struktur des
Zeigersteuerbereichs von Fig. 1;
Fig. 21 ein Blockdiagramm der Struktur eines Befehlsausgabe-
Analyseabschnitts nach einer ersten Ausführungsform der
Erfindung;
Fig. 22 ein Logikdiagramm der Struktur des Ausgabeverhinderungs
abschnitts von Fig. 21;
Fig. 23 ein Blockdiagramm der Struktur einer Befehlsdekodier
einrichtung, die in einer zweiten Ausführungsform benutzt
wird;
Fig. 24(A), 24(B), 24(C) eine Darstellung des Betriebs eines
Befehlsregisters, wenn in der Struktur der
Befehlsdekodierstufe von Fig. 23 von einem
Verzweigungsbefehl eine Verzweigung ausgeführt wird;
Fig. 25 eine Darstellung des Betriebs des Befehlsregisters von
Fig. 23, wenn vom Verzweigungsbefehl keine Verzweigung
ausgeführt wird;
Fig. 26 ein Blockdiagramm der Struktur des Befehlsausgabe-
Analysebereichs von Fig. 23;
Fig. 27 ein Blockdiagramm der Strukturen einer Befehlseinlesestufe
und einer Befehlsdekodierstufe, die entsprechend dem
zweiten Aspekt der Erfindung benutzt werden;
Fig. 28 eine Darstellung der Struktur zur Steuerung auf der Basis
eines Befehlsgültigkeits-Flag und eines
Verzweigungsvorhersage-Flag in einer Ausführungsstufe
EXC und dem Vorhandensein oder Nicht-Vorhandensein einer
Verzweigung;
Fig. 29 eine schematische Darstellung der Struktur von Fig. 28;
Fig. 30 eine Wahrheitstafel für die Steuersignale eines Scoreboard
zur Überwachung des Inhalts eines Registersatzes;
Fig. 31 ein Diagramm der Struktur der Logikschaltung zur
Implementierung der in Fig. 30 gezeigten Wahrheitstafel;
und
Fig. 32 ein Diagramm der Struktur des Befehlsdekoders von Fig. 27.
Die Struktur des wesentlichen Teils einer Befehlsdekodierstufe in
einer Parallelverarbeitungseinheit nach einer Ausführungsform der
Erfindung ist in Fig. 5 dargestellt. Wie in Fig. 5 gezeigt ist,
weist die Befehlsdekodierstufe eine Befehlswarteschlange 9, einen
Befehlsausgabe-Analyseabschnitt 10, einen Zeigersteuerbereich 12 und
einen Verzweigungsverarbeitungsbereich 11 auf.
Die Befehlswarteschlange 9 liest eine Mehrzahl von Befehlen (Befehle
1-4) aus einem Befehlsspeicher 1 (siehe Fig. 3) vorein und speichert
die voreingelesenen Befehle. Die Warteschlange 9 weist einen
Speicherabschnitt (Warteschlange) 13 zum Speichern der Befehle,
einen Lesezeiger 14 zum Halten einer Leseadresse scope und einen
Schreibzeiger 15 zum Halten einer Schreibadresse queue_top auf.
Der Befehlsausgabe-Analyseabschnitt 10 analysiert, welcher Befehl
unter den von der Befehlswarteschlange 9 gelesenen Befehle ausgebbar
ist. Das Analyseergebnis vom Befehlsausgabe-Analyseabschnitt 10 wird
zur Ausgabe jedem Befehl in Form eines Signals inst_avail beigefügt.
Wenn das Signal inst_avail aktiv ist, ist der entsprechende Befehl
ein ausgebbarer Befehl und soll ausgeführt werden. Bei der in Fig. 5
gezeigten Struktur werden vier Befehle beginnend von der Leseadresse
scope aus der Befehlswarteschlange 9 auf einmal ausgelesen, und die
Ausgabeanalyse wird im Befehlsausgabe-Analyseabschnitt 10
ausgeführt. Für das Signal inst_avail zu 4 Bit wird ein
entsprechendes Signal inst_avail aktiviert, wenn ein Befehl
ausgebbar ist. Der Befehlsausgabe-Analyseabschnitt 10 erzeugt auf
der Basis des Signals inst_avail ein Signal issue_count, das die
Anzahl der ausgebbaren Befehle angibt, und übermittelt das erzeugte
Signal an den Zeigersteuerbereich 12.
Wenn in einem vorgegebenen Befehl ein Verzweigungsbefehl enthalten
ist, übermittelt der Befehlsausgabe-Analyseabschnitt 10 auch einen
Wert br_block, der die niederwertigen 2 Bit der Adresse der
Befehlswarteschlange 9, die den Verzweigungsbefehl speichert,
ignoriert oder abschneidet.
Wenn die aus der Befehlswarteschlange 9 ausgelesenen Befehle
Verzweigungsbedingungen aufweisen (im Fall eines bedingten
Sprungbefehls), prüft der Verzweigungsverarbeitungsbereich 11 die
Verzweigungsbedingung und entscheidet, ob eine Verzweigung
vorgenommen werden soll oder nicht. Wenn eine Verzweigung erfolgen
soll, aktiviert der Verzweigungsverarbeitungsbereich 11 ein Signal
Taken, und wenn keine Verzweigung vorgenommen werden soll, ein
Signal Not Taken.
Der Zeigersteuerbereich 12 steuert die Werte des Lesezeigers scope
und des Schreibzeigers queue_top der Zeiger 14 und 15 der
Befehlswarteschlange 9. Der Zeigersteuerbereich 12 erzeugt ein
Signal issue_stop, das die Ausgabe der Befehle von der
Befehlsdekodierstufe ID an Pipelines insgesamt verhindert, und legt
das erzeugte Signal an den Befehlsausgabe-Analyseabschnitt 10 an.
Bei der Struktur eines solchen Superskalars, bei der vier Befehle
auf einmal aus dem Befehlsspeicher gelesen und die vier Befehle auf
einmal dekodiert werden, werden die vom Befehlsspeicher 1
zugeführten Befehle (Befehle 1-4) in vier Adressen der Warteschlange
13 gespeichert, und zwar beginnend mit der Schreibadresse queue_top.
Im nächsten Zyklus wird vier zum Schreibzeiger queue_top addiert.
Die vier Befehle, die in den vier Adressen der Warteschlange 13
beginnend mit dem Lesezeiger scope gespeichert sind, werden aus der
Warteschlange 13 ausgelesen, und dem Befehlsausgabe-Analyseabschnitt
10 und einem (nicht dargestellten) Dekodierschaltkreis zugeführt, um
analysiert und dekodiert zu werden. Als Ergebnis dieser Analyse wird
dem Wert des Lesezeigers scope im nächsten Zyklus n hinzuaddiert,
wenn n Befehle ausgegeben sind.
Fig. 6 zeigt den Betrieb der Befehlswarteschlange 9. Wie in Fig. 6
dargestellt ist, ist die Größe (Anzahl der Einträge) der
Warteschlange 13 auf 16 eingestellt.
Im Zyklus T stellt die Schreibadresse queue_top 8 dar. Die vier aus
dem Befehlsspeicher ausgelesenen Befehle werden in die Adressen 8,
9, 10 und 11 geschrieben.
Der Lesezeiger scope gibt 3 an, und es werden Befehle in den
Adressen 3, 4, 5 und 6 der Warteschlange 13 ausgelesen. Es wird
angenommen, daß in diesem Zyklus T zwei Befehle an
Funktionseinheiten verteilt werden. Mit anderen Worten ist die
Anzahl der ausgegebenen Befehle (issue_count) gleich 2. In diesem
Fall wird im nächsten Zyklus T+1 der Wert des Lesezeigers scope um 2
auf 5 erhöht. Der Schreibzeiger queue_top wird um 4 auf 12 erhöht.
Die Warteschlange 13 kann 4 Befehle auf einmal schreiben und 4
Befehle auf einmal lesen. Diese Schreib- und Leseoperationen können
asynchron ausgeführt werden.
Um einen Verzweigungsverzögerungs-Slot zu entscheiden wird ein
Befehlsblock definiert. Die folgenden vier Befehle werden als
Befehlsblock bezeichnet:
Befehle, deren Adressen in einer Befehlswarteschlange 4n, 4n+1, 4n+2 und 4n+3 (n: ganze Zahl) lauten.
Befehle, deren Adressen in einer Befehlswarteschlange 4n, 4n+1, 4n+2 und 4n+3 (n: ganze Zahl) lauten.
Ein Verzweigungsverzögerungs-Slot ist so definiert, daß er im
Bereich von einem Slot unmittelbar nach einem Verzweigungsbefehl bis
zum letzten Slot eines Befehlsblocks unmittelbar nach einem
Befehlsblock mit einem Verzweigungsbefehl liegt. Fig. 7 zeigt einen
Befehlsblock und einen Verzweigungsverzögerungs-Slot. Wie in Fig. 7
dargestellt ist, ist der Bereich von einem Slot unmittelbar nach dem
Verzweigungsbefehl bis zum letzten Slot des nächsten Blocks B2, der
diesem Block B1 benachbart ist, als Verzweigungsverzögerungs-Slot
(in Fig. 7 durch schräge Linien bezeichnet) definiert, wenn ein
Verzweigungsbefehl in einem Block B1 enthalten ist. Für den Fall der
Fig. 7 ist die Anzahl der im Verzweigungsverzögerungs-Slot
enthaltenen Befehle (die Anzahl der Slots) gleich 5.
Der Verzweigungsverzögerungs-Slot wird mit Befehlen auf der Seite
der Verzweigung gefüllt (Befehle, die nach einer Verzweigung
ausgeführt werden sollen). Befehle, um den Verzweigungsverzögerungs-
Slot zu füllen, müssen nur Befehle auf der Seite der Verzweigung und
andere Befehle als ein Verzweigungsbefehl sein. Genauer gesagt kann
jeder Befehl im Bereich von der Adresse eines
Verzweigungszielbefehls bis zu einer Adresse, die einem als nächstes
auszuführenden Verzweigungsbefehl um eine Adresse vorangeht, benutzt
werden. Bei einem herkömmlichen Verzweigungsverzögerungsverfahren
wird ein Befehl ausgewählt, durch den ein korrektes Ergebnis
unabhängig von der Richtung, in die eine Verzweigung führt
(Vorhandensein/Nicht-Vorhandensein einer Verzweigung), erzeugt wird,
um einen Verzweigungsverzögerungs-Slot aufzufüllen.
Entsprechend der vorliegenden Erfindung wird der
Verzweigungsverzögerungs-Slot nur mit Befehlen auf der Seite der
Verzweigung aufgefüllt. Wenn das Ergebnis der Ausführung eines
Verzweigungsbefehls angibt, daß keine Verzweigung vorgenommen werden
soll und das Signal Not Taken aktiviert wird, führt die Hardware
eine Steuerung so aus, daß die Befehle, die den
Verzweigungsverzögerungs-Slot füllen, nicht ausgeführt werden. Nun
folgt eine Beschreibung des Betriebs einer Befehlswarteschlange,
wenn ein Verzweigungsbefehl ausgeführt wird.
Es wird angenommen, daß der Wert einer Adresse in der Warteschlange
13, an der ein Verzweigungsbefehl gespeichert ist und deren 2
niederwertige Bit weggelassen sind, gleich br_block ist, und daß der
Wert der Schreibadresse queue_top, deren 2 niederwertige Bit
weggelassen sind, gleichzeitig gleich qt_block ist. Ein Block, in
dem ein Verzweigungsbefehl gespeichert ist (ein Block in der
Warteschlange 13), und ein Block, in dem ein Befehl zu diesem
Zeitpunkt geschrieben wird, werden beide jeweils durch Weglassen der
zwei niederwertigen Bit dargestellt.
Wenn die Blockadressen br_block und qt_block gleich sind, so zeigt
das an, daß noch kein Verzweigungsverzögerungs-Slot in die
Befehlswarteschlange 9 eingelesen worden ist. In diesem Fall sollte
der Verzweigungsverzögerungs-Slot im nächsten Zyklus eingelesen
werden. Ein vorbestimmter Befehl wird gerade in den nächsten Block
in der Warteschlange 13 geschrieben. Daher wird 4 zum Schreibzeiger
queue_top addiert. Das wird durch die folgenden Ausdrücke
dargestellt.
br_block = (Adresse einer Warteschlange, an der ein Verzweigungsbefehl gespeichert ist) (3. . .2)
qt_block = queue_top (3. . .2)
If br_block == qt_block
then queue_top = queue_top + 4
wobei qt_block = queue_block (3. . .2) die Ersetzung des zweiten und dritten Bit in qt_block durch die Bit des Schreibzeigers queue_top angibt (äquivalent dem Weglassen der 2 niederwertigen Bit 0 und 1). Die Warteschlange 13 weist 16 Einträge auf, und der Schreibzeiger und Lesezeiger der Warteschlange wird durch 4 Bit dargestellt. Daher wird ein Block in der Warteschlange durch Überwachen der 2 höherwertigen Bit 2 und 3 identifiziert. Im oben angeführten Ausdruck gibt "==" an, daß der Wert der rechten und linken Seite übereinstimmt.
br_block = (Adresse einer Warteschlange, an der ein Verzweigungsbefehl gespeichert ist) (3. . .2)
qt_block = queue_top (3. . .2)
If br_block == qt_block
then queue_top = queue_top + 4
wobei qt_block = queue_block (3. . .2) die Ersetzung des zweiten und dritten Bit in qt_block durch die Bit des Schreibzeigers queue_top angibt (äquivalent dem Weglassen der 2 niederwertigen Bit 0 und 1). Die Warteschlange 13 weist 16 Einträge auf, und der Schreibzeiger und Lesezeiger der Warteschlange wird durch 4 Bit dargestellt. Daher wird ein Block in der Warteschlange durch Überwachen der 2 höherwertigen Bit 2 und 3 identifiziert. Im oben angeführten Ausdruck gibt "==" an, daß der Wert der rechten und linken Seite übereinstimmt.
Wenn br_block und qt_block nicht gleich sind, so zeigt das an, daß
der Verzweigungsverzögerungs-Slot bereits eingelesen und in der
Befehlswarteschlange 9 gespeichert worden ist. In diesem Fall wird
eine Adresse in der Warteschlange 13 zum Speichern eines
Verzweigungszielbefehls, mit anderen Worten also eine Adresse nach
einer Warteschlangenadresse, an der wiederum der
Verzweigungsverzögerungs-Slot gespeichert ist, im Schreibzeiger
queue_top eingestellt. Genauer gesagt gilt
If br_block != qt_block
then queue_top = br_block ## O2 + 8.
If br_block != qt_block
then queue_top = br_block ## O2 + 8.
In diesem Ausdruck gibt "!=" an, daß die Werte der rechten und
linken Seite nicht gleich sind. "##" zeigt an, daß der rechte und
linke Term kombiniert werden. Xn gibt an, daß die Operation X n-mal
wiederholt wird. Daher gibt der oben angeführte Ausdruck ##O2 an,
daß der Wert br_block gleich den 2 höherwertigen Bit gesetzt und den
2 niederwertigen Bit 0 hinzuaddiert wird. Durch diese Operation wird
der Kopf oder die Startadresse eines Blocks erzeugt, in dem ein
Verzweigungsbefehl enthalten ist. Die Addition von 8 zu dieser
Kopfadresse erzeugt die Kopfadresse des Blocks, der auf den nächsten
Block folgt.
Darüber hinaus wird in diesem Fall im nächsten Zyklus, nachdem der
Verzweigungsbefehl ausgeführt worden ist, kein
Verzweigungszielbefehl aus dem Befehlsspeicher (siehe Fig. 4)
übertragen. Daher wird im nächsten Zyklus, nachdem der
Verzweigungsbefehl ausgeführt worden ist, der Schreibzeiger
queue_top gleich dem Wert gesetzt, als der Verzweigungsbefehl
ausgeführt wurde.
Der Lesezeiger scope wird in derselben Weise aktualisiert wie in den
anderen Fällen außer dem Fall, wenn ein Verzweigungsbefehl
ausgeführt wird, und zwar unabhängig davon, ob ein
Verzweigungsverzögerungs-Slot bereits eingelesen worden ist oder
nicht.
Unter Bezugnahme auf die Zeichnungen folgt nun eine detaillierte
Beschreibung der oben angeführten Operation. In den Fig. 8 bis 10
ist der Betrieb einer Warteschlange dargestellt, wenn in einem
Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird, der
Verzweigungsverzögerungs-Slot noch nicht eingelesen worden ist.
Fig. 8 zeigt ein Beispiel für den Zustand der Befehlswarteschlange 9
im Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird. Der
Lesezeiger scope und der Schreibzeiger queue_top werden beide auf
dem Wert 0 gehalten. Es wird angenommen, daß in der Adresse 2 der
Warteschlange 13 ein Verzweigungsbefehl existiert, und daß dieser
Verzweigungsbefehl im nächsten Zyklus ausgeführt wird.
Beim in Fig. 9 dargestellten nächsten Zyklus wird aufgrund des
Ausdrucks br_block == qt_block der Schreibzeiger queue_top um 4
erhöht und nimmt den Wert 4 an. In die Adressen 4, 5, 6 und 7 der
Warteschlange 13 werden die Befehle des Verzögerungs-Slot
geschrieben. Gleichzeitig wird entsprechend einer
Verzweigungszieladresse auf den Befehlsspeicher zugegriffen.
Im nächsten Zyklus wird der Schreibzeiger queue_top um 4 auf 8
erhöht, wie in Fig. 10 dargestellt ist. Der Befehl des
Verzweigungsziels wird vom Befehlsspeicher übertragen. Die Adressen
8, 9, 10 und 11 der Warteschlange 13 werden mit dem Befehl des
Verzweigungsziels beschrieben. Die Befehle im Verzögerungs-Slot, die
durch den Lesezeiger scope bezeichnet werden, der eine Änderung
entsprechend einem ausgegebenen Befehl erfuhr, sind Befehle auf der
Seite der Verzweigung. Nach der Ausgabe eines Befehls im
Verzweigungsverzögerungs-Slot werden die eingelesenen
Verzweigungszielbefehle zu einer Dekodierstufe übertragen. Wenn ein
Verzweigungsverzögerungs-Slot im Zyklus, in dem ein
Verzweigungsbefehl ausgeführt wird, noch nicht eingelesen worden
ist, wird daher keine Leistungsverschlechterung (Leerstellen in
einer Pipeline) aufgrund der ausgeführten Verzweigung erzeugt.
Die Fig. 11 bis 13 stellen die Zustände der Befehlswarteschlange 9
dar, wenn im Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird,
ein Verzweigungsverzögerungs-Slot bereits eingelesen worden ist.
Fig. 11 zeigt ein Beispiel für den Zustand der Warteschlange 13 im
Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird. Der
Lesezeiger scope gibt 0 an, und der Schreibzeiger queue_top zeigt 12
an. Nun wird ein Fall betrachtet, in dem an der Adresse 2 der
Warteschlange 13 ein Verzweigungsbefehl existiert und der
Verzweigungsbefehl in diesem Zyklus ausgeführt wird.
Beim nächsten in Fig. 12 dargestellten Zyklus wird der Schreibzeiger
queue_top gleich 8, um die nächste Adresse des
Verzweigungsverzögerungs-Slot zu speichern. In diesem Zyklus ist ein
Befehl, der aus dem Befehlsspeicher kommt, ein unnötiger Befehl. Mit
anderen Worten stellt er einen Befehl auf einer anderen
Verzweigungszielseite als dem Verzögerungs-Slot dar (ein Befehl, der
ausgeführt wird, wenn keine Verzweigung vorgenommen wird). Daher
wird im nächsten Zyklus, der in Fig. 13 dargestellt ist, der Wert
des Schreibzeigers queue_stop nicht aktualisiert. Dieser unnötige
Befehl kann in die Warteschlange 13 geschrieben werden. Dieser
Befehl soll im nächsten Zyklus nur durch einen
Verzweigungszielbefehl ersetzt werden.
Beim in Fig. 12 gezeigten Zyklus wird entsprechend einer
Verzweigungszieladresse auf den Befehlsspeicher zugegriffen.
Beim in Fig. 13 dargestellten Zyklus wird vom Befehlsspeicher ein
Verzweigungszielbefehl übertragen. Der Schreibzeiger queue_top hält
den nächsten Wert des Verzweigungsverzögerungs-Slot. Daher werden
die Warteschlangenadressen 8, 9, 10 und 11 mit
Verzweigungszielbefehlen beschrieben. Wie aus dem Betrieb, der in
den Fig. 11 bis 13 dargestellt ist, klar ersichtlich ist, wird durch
die Ausführung einer Verzweigung keine Leistungsverschlechterung
verursacht, wenn im Zyklus, in dem ein Verzweigungsbefehl ausgeführt
wird, ein Verzweigungsverzögerungs-Slot bereits eingelesen worden
ist.
Unter den aus der Befehlswarteschlange 9 ausgelesenen und
dekodierten Befehlen wird der Befehl nach dem Verzweigungsbefehl
ungültig gemacht. Der Grund dafür ist, daß die Befehle nach dem
Verzweigungsbefehl einem Verzweigungsverzögerungs-Slot entsprechen
und der Verzweigungsverzögerungs-Slot nur Befehle auf der Seite der
Verzweigung enthält. Wie oben beschrieben worden ist, stellt ein
Befehl auf der Seite der Verzweigung, der sich in einem
Verzweigungsverzögerungs-Slot befindet, einen Befehl der
Verzweigungszielseite dar, der ausgeführt werden soll, wenn durch
diesen Verzweigungsbefehl eine Verzweigung ausgeführt werden soll.
Genauer gesagt reichen die Befehle auf der Seite der Verzweigung von
einem Befehl einer Verzweigungszieladresse, der ausgeführt wird,
wenn durch einen zu diesem Verzweigungsverzögerungs-Slot gehörenden
Verzweigungsbefehl eine Verzweigung ausgeführt wird, bis zu einem
Befehl in einem Adreßbefehl, der dem als nächstes auszuführenden
Verzweigungsbefehl um einen Befehl vorangeht. Wenn eine Verzweigung
ausgeführt wird, ist daher der Befehl, der in einen
Verzweigungsziel-Befehlsblock eingeführt wird, ein Befehl, der nach
den Befehlen ausgeführt werden soll, die den Verzögerungs-Slot
bilden.
Wenn keine Verzweigung ausgeführt wird und das Signal Not Taken
aktiv ist, darf der Befehl im Verzweigungsverzögerungs-Slot im
nächsten Zyklus nicht ausgeführt werden. Der Befehl im
Verzweigungsverzögerungs-Slot wird übergangen und der nächste Befehl
sollte ausgeführt werden. Daher wird der Lesezeiger scope durch den
folgenden Ausdruck dargestellt:
scope = br_block ## O2 + 8.
scope = br_block ## O2 + 8.
Wenn ein Befehlsblock nach dem Verzweigungsverzögerungs-Slot bereits
eingelesen worden ist, ist der auszuführende Befehl bereits im
Zyklus nach dem Zyklus, in dem der Verzweigungsbefehl ausgeführt
wird, eingelesen worden. Daher wird durch die Ausführung des
Verzweigungsbefehls keine Leistungsverschlechterung verursacht.
Wenn der Verzweigungsverzögerungs-Slot noch nicht eingelesen worden
ist, wenn mit anderen Worten die Zeiger br_block und qt_block gleich
sind, ist der auszuführende Befehl im Zyklus nach dem Zyklus, in dem
der Verzweigungsbefehl ausgeführt wird, noch nicht eingelesen
worden. Um auf das Einlesen des auszuführenden Befehls zu warten
sollte die Pipeline für einen Zyklus angehalten werden. Wenn die
Zeiger br_block und qt_block gleich sind, wird im nächsten Zyklus
genauer gesagt die Ausgabe eines Befehls verhindert.
Unabhängig davon, ob der Verzweigungsverzögerungs-Slot bereits
eingelesen worden ist oder nicht, wird der Schreibzeiger queue_top
in derselben Weise aktualisiert wie für den Fall, daß ein
Verzweigungsbefehl ausgeführt worden ist.
Die Fig. 14 bis 16 zeigen den Betrieb der Befehlswarteschlange, wenn
das Signal Not Taken aktiv und der Verzweigungsverzögerungs-Slot
noch nicht eingelesen worden ist. Unter Bezugnahme auf die Fig. 14
bis 16 folgt nun eine Beschreibung des Betriebs der
Befehlswarteschlange, wenn durch einen Verzweigungsbefehl eine
Verzweigung vorgenommen wird und der Verzweigungsverzögerungs-Slot
noch nicht eingelesen worden ist.
Fig. 14 zeigt ein Beispiel für den Zustand der Warteschlange 13 im
Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird. Der
Lesezeiger scope und der Schreibzeiger queue_top geben beide 0 an.
Es wird angenommen, daß in der Adresse 2 der Warteschlange 13 ein
Verzweigungsbefehl existiert und der Verzweigungsbefehl in diesem
Zyklus ausgeführt wird.
Im Zyklus nach der Ausführung des Verzweigungsbefehls, der in Fig.
15 dargestellt ist, wird dem Schreibzeiger queue_top 4 hinzuaddiert,
so daß er den Wert 4 annimmt. Die Adressen 4, 5, 6 und 7 der
Warteschlange 13 werden mit den Befehlen eines Verzögerungs-Slot
beschrieben. Die auszuführenden Befehle werden nicht unter den
Adressen 8, 9, 10 und 11 der Warteschlange 13 gespeichert. Die
Ausgabe eines Befehls in diesem Zyklus wird verhindert. Genauer
gesagt wird ein Ausgabeverhinderungssignal issue_stop an den in Fig.
15 gezeigten Befehlsausgabe-Analysebereich 10 übertragen und die
Ausgabe von Befehlen verhindert.
Im nächsten Zyklus (Fig. 16) wird dem Schreibzeiger queue_top 4
hinzuaddiert, so daß er den Wert 8 annimmt. Zu diesem Zeitpunkt wird
der vom Befehlsspeicher übertragene Befehlsblock gleichzeitig
ausgelesen und dem Befehlsdekoder übergeben, weil der Lesezeiger
scope 8 angibt.
Die Stufen des Superskalars arbeiten mit nicht-überlappenden
2-Phasen-Taktsignalen (T-Taktsignal und L-Taktsignal), die
Eingangsstufe einer jeden Stufe weist einen Latch-Schaltkreis auf,
der vom T-Taktsignal abhängig ist, zum Verriegeln eines zugeführten
Signals, und der Ausgangsabschnitt weist ein L-Latch auf, das vom
L-Taktsignal abhängig ist, zum Verriegeln eines angelegten Signals. Zu
diesem Zeitpunkt wird das Schreiben von Daten in die Warteschlange
13 in Abhängigkeit vom T-Taktsignal ausgeführt, während das Lesen
der Daten in Abhängigkeit vom L-Taktsignal ausgeführt wird. Daher
wird das Schreiben eines Befehls, der vom Befehlsspeicher 13
zugeführt wird, in die Warteschlange 13 und deren Übertragung in den
Befehlsdekoder gleichzeitig implementiert. Dieses Schreiben und
Lesen von Daten kann in Abhängigkeit vom T-Taktsignal ausgeführt
werden, wobei die Datenlesetaktung bezüglich der Datenschreibtaktung
verzögert ist, und die Daten der Warteschlange 13 können ausgelesen
werden, wenn das notwendig ist.
Für den Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird, wird
unter Bezugnahme auf die Fig. 17 und 18 der Betrieb der
Warteschlange beschrieben, wenn der Verzweigungsverzögerungs-Slot
bereits eingelesen worden ist.
Fig. 17 zeigt ein Beispiel für den Zustand der Befehlswarteschlange
9 im Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird.
Der Lesezeiger scope gibt 0 an, der Schreibzeiger queue_top 8. Es
wird angenommen, daß in der Adresse 2 der Warteschlange 13 ein
Verzweigungsbefehl existiert, und der Verzweigungsbefehl im Zyklus
der Fig. 17 ausgeführt wird.
Beim in Fig. 18 dargestellten Zyklus wird der Lesezeiger scope
gleich 8, um die Adresse nach dem Verzögerungs-Slot anzugeben. Der
Schreibzeiger queue_top wird um 4 erhöht und wird gleich 12 wie im
üblichen Fall.
Wenn ein Verzweigungsverzögerungs-Slot bereits in dem Zyklus
eingelesen worden ist, in dem ein Verzweigungsbefehl ausgeführt
wird, erfolgt wie oben beschrieben keine Verschlechterung der
Leistung aufgrund der Ausführung des Verzweigungsbefehls. Wenn kein
Verzweigungsverzögerungs-Slot eingelesen ist, wird eine
Einleseverzögerung um einen Zyklus verursacht, wenn keine
Verzweigung erfolgt. Wenn die Bandbreite des Befehlseinlesens (die
Anzahl der in einem Zyklus eingelesenen Befehle) größer als die
mittlere Geschwindigkeit der Befehlsausgabe (die mittlere Anzahl von
Befehlen, die in einem Zyklus ausgegeben werden) eingestellt wird,
ist die Wahrscheinlichkeit hoch, daß ein Verzögerungs-Slot in dem
Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird, bereits
eingelesen worden ist. Daher hält diese Struktur die
Wahrscheinlichkeit sehr gering, daß die Leistung der
Verarbeitungseinheit durch die Ausführung eines Verzweigungsbefehls
verschlechtert wird.
Fig. 19 zeigt eine Liste von Logiken (oben beschrieben), die vom
Zeigersteuerbereich 12 erzielt werden. In Fig. 19 gibt "X" einen
beliebigen Wert an. "-" zeigt an, daß der Wert nicht angegeben ist.
Die Struktur des Zeigersteuerbereichs ist in den Fig. 20A und 20B
gezeigt. In den Fig. 20A und 20B gibt 16a einen Addierer zum
Addieren der Ausgabe eines Registers 15 und der Zahl 4, 16b einen
Addierer zum Addieren der Ausgabe des Zeigers scope eines Registers
14 und der ausgegebenen Befehlsinformation issue_count, 16c einen
Addierer zum Addieren der Kopfadresse br_block##O2 eines Blocks mit
einem Verzweigungsbefehl (einem Block in einer Warteschlange) und
der Zahl 8, 17a einen Selektor zum Auswählen der Ausgabe queue_top
des Registers 15, der Ausgabe des Addierers 16a oder der Ausgabe des
Addierers 16c und zum Schreiben des Auswahlergebnisses in das
Register 15, 17b einen Selektor zum Auswählen der Ausgabe des
Addierers 16b oder der Ausgabe des Addierers 16c und zum Schreiben
des Auswahlergebnisses in das Register 14, 18 einen Komparator zum
Vergleichen des Zeigers br_block und des Zeigers qt_block, 21 einen
Inverter zum Invertieren der Ausgabe des Komparators 18, 22 einen
UND-Schaltkreis zum Erzeugen des logischen Produkts der Ausgabe des
Komparators 18 und des Signals Not Taken, 23 einen Inverter zum
Invertieren des Signals Not Taken, 24 einen UND-Schaltkreis zum
Erzeugen des logischen Produkts der Ausgabe des Inverters 21 und des
Signals Taken, 19 ein Register zum Halten (Verzögern) der Ausgabe
des UND-Schaltkreises 24 für einen Takt, und 25 einen NOR-
Schaltkreis zum Erzeugen der negativen logischen Summe der Ausgabe
des UND-Schaltkreises 24 und der im Register 19 gehaltenen Daten an.
Das Ausgabeverhinderungssignal issue_stop wird vom UND-Schaltkreis
22 erzeugt. Die Signale sel_c, sel_a und sel_b sind Signale zum
Auswählen entsprechender Eingaben des Selektors 17a.
Die Signale sel_d sel_e sind Signale zum Auswählen entsprechender
Eingaben des Selektors 17b.
Fig. 21 zeigt die Struktur des in Fig. 5 gezeigten Befehlsausgabe-
Analyseabschnitts 10. Wie in Fig. 21 dargestellt ist, weist der
Befehlsausgabe-Analyseabschnitt 10 einen Gefahranalyseabschnitt 30,
einen Ausgabeverhinderungsabschnitt 31, einen Ausgabeanzahl-
Berechnungsabschnitt 32 und ein Gatter 33 zum Steuern eines
Verfügbarkeitssignals inst_avail entsprechend dem
Ausgabeverhinderungssignal issue_inhibit auf.
Der Gefahranalyseabschnitt 30 analysiert eine Gefährdung zwischen
Befehlen. Vier Befehle, nämlich die Befehle 1-4, werden in den
Gefahranalyseabschnitt 30 eingegeben. Wenn unter den eingegebenen
Befehlen der i-te Befehl von jeder Gefährdung frei ist, wird das
i-te Signal ia (Verfügbarkeitssignal) aktiviert. "Gefährdung" gibt den
Zustand an, in dem der Wert eines von einem Befehl zu benutzenden
Registers (in einem Registersatz) nicht bestimmt ist. Diese
Gefährdungsanalyse wird entsprechend dem Scoreboard des
Registersatzes (das später beschrieben wird) ausgeführt.
Der Ausgabeverhinderungsabschnitt 31 empfängt die Befehle 1-4 und
erzeugt ein Signal, das die niederwertigen 2 Bit der Adresse scope
der Warteschlange ignoriert, in der ein Verzweigungsbefehl
gespeichert ist. Der Ausgabeverhinderungsabschnitt 31 erzeugt mit
anderen Worten eine Blockadresse br_block für die
Befehlswarteschlange, zu der der Verzweigungsbefehl gehört. Der
Ausgabeverhinderungsabschnitt 31 aktiviert auch ein entsprechendes
Ausgabeverhinderungssignal issue_inhibit, um die Ausgabe eines
Befehls zu verhindern, der außer bei einer Gefährdung unter allen
Umständen verhindert werden sollte. Das Ausgabeverhinderungssignal
issue_inhibit wird vom Ausgabestopsignal issue_stop aktiviert, das
vom Zeigersteuerbereich 12 übertragen wird, oder es wird für die
Befehle aktiviert, die einem Verzweigungsbefehl folgen, wenn das
Signal Not Taken aktiv ist.
Das Gatter 33 weist einen Inverter zum Invertieren des
Ausgabeverhinderungssignals issue_inhibit vom
Ausgabeverhinderungsabschnitt 31 und einen UND-Schaltkreis zum
Empfangen dieses Inverterausgangssignals und des Signals ia vom
Gefährdungsanalyseabschnitt 30 auf. Der Inverter und der UND-
Schaltkreis sind entsprechend Befehlen gebildet. Die
Verfügbarkeitssignale inst_avail werden vom Gatter 33 entsprechend
den Befehlen erzeugt. Genauer gesagt ist das Signal inst_avail das
logische Produkt des Signals ia und des Signals /issue_inhibit
(logisches nicht_issue_inhibit).
Der Ausgabeanzahl-Berechnungsabschnitt 32 empfängt die Signale
inst_avail vom Gatter 33, berechnet die Anzahl der ausgegebenen
Befehle und erzeugt ein Signal issue_count, das die Anzahl der
ausgegebenen Befehle angibt.
Fig. 22 zeigt ein Logikdiagramm des Ausgabeverhinderungsabschnitts
von Fig. 21. Wie in Fig. 22 gezeigt ist, ist ein
Verzweigungserfassungsschaltkreis 43 entsprechend jedem der Befehle
1-4 gebildet. Der Verzweigungserfassungsschaltkreis 43 erfaßt, ob
ein zugeführter Befehl einen Verzweigungsbefehl darstellt oder nicht
und aktiviert das Ausgangssignal, wenn der zugeführte Befehl ein
Verzweigungsbefehl ist.
Das Ausgangssignal des Verzweigungserfassungsschaltkreises 43 wird
an einen Prioritätscodierer 44 angelegt. Der Prioritätscodierer 44
erfaßt die Position des Verzweigungsbefehls mit kleinster Adresse.
Ein Signal (2-Bit-Wert), das die Position des
Prioritätsverzweigungsbefehls anzeigt, wird vom Prioritätscodierer
44 abgegeben. Das Ausgangssignal des Prioritätscodierers 44 wird an
den Addierer 45 angelegt. Der Addierer 45 addiert die Ausgabe des
Prioritätscodierers und den Lesezeiger scope. Das Ausgangssignal des
Addierers 45 gibt die Adresse der Verzweigungsbefehls in der
Warteschlange an. Das Ausgangssignal des Addierers 45 wird einem
Maskierungsschaltkreis 46 zur Maskierung niederwertiger Bit
zugeführt. Der Maskierungsschaltkreis 46 schneidet die 2
niederwertigen Bit der Ausgabe ab (setzt sie auf "0") und gibt damit
einen Zeiger br_block aus.
Die ODER-Gatter OR1-OR5 und die UND-Gatter AN1-AN3 sind gebildet, um
die Verhinderung der Ausgabe von Befehlen zu steuern. Wenn ein
Befehl 1 einen Verzweigungsbefehl darstellt, wird ein Eingang eines
jeden UND-Gatters AN1-AN3 auf "H" gezogen. Wenn das Signal Not Taken
gleichzeitig den Pegel "H" erreicht, wird keine Verzweigung
ausgeführt und die Ausgabe der Befehle 2-4 wird verhindert. Das
führt zu einem aktiven Zustand des Signals issue_inhibit. Wenn das
Signal Not Taken inaktiv ist, ist auch das
Ausgabeverhinderungssignal issue_inhibit für jeden der Befehle 2-4
inaktiv und daher werden die Befehle ausgegeben. Wenn einer der
Befehle 2-4 einen Verzweigungsbefehl darstellt, wird die Position
des Ausgabeverhinderungssignals issue_inhibit im jeweiligen
Ausgabeabschnitt gerade um 1 verschoben. Wenn das Signal issue_stop
aktiviert wird, wird die Ausgabe der Befehle 1-4 verhindert.
Bei der oben beschriebenen Ausführungsform 1 wird der Befehl in die
Befehlswarteschlange 9 voreingelesen. Nun wird eine Struktur
beschrieben, die ein übliches Befehlsregister benutzt und den Befehl
nicht voreinliest.
Die Fig. 23 zeigt die wesentliche Struktur einer
Befehlsdekodierstufe, die in der zweiten Ausführungsform verwendet
wird. Wie in Fig. 23 dargestellt ist, weist die Befehlsdekodierstufe
ein Befehlsregister 54 zum Speichern zugeführter Befehle (Befehle 1-4),
einen Verzweigungsverarbeitungsabschnitt 11 zum Empfangen eines
Befehls vom Befehlsregister 54, Erfassen eines Verzweigungsbefehls
und Bestimmen, ob eine Verzweigung erfolgen soll oder nicht, und
einen Befehlsausgabe-Analyseabschnitt 10 zum Empfangen eines Signals
Not Taken vom Verzweigungsverarbeitungsbereich 11 und eines Befehls
vom Befehlsregister 54 und zum Analysieren des zugeführten Befehls
dahingehend, ob der Befehl ausgegeben werden soll oder nicht, auf.
Bei der in Fig. 23 gezeigten Struktur ohne Befehlswarteschlange ist
keine Struktur zur Steuerung des Zeigers einer Befehlswarteschlange
gebildet. Bei der in Fig. 23 dargestellten Struktur ist die
Definition eines Verzweigungsverzögerungs-Slot gleich wie bei der
Beschreibung von Ausführungsform 1.
In Fig. 24 ist der Betrieb des Befehlsregisters gezeigt, wenn von
einem Verzweigungsbefehl eine Verzweigung ausgeführt wird. Unter den
Befehlen, die in das Befehlsregister 54 aufgenommen worden sind, sei
der zweite Befehl ein Verzweigungsbefehl (Fig. 24A). Im
Verzweigungsverarbeitungsbereich 11 ist bekannt, daß eine
Verzweigung auf der Basis einer Ausführung dieses
Verzweigungsbefehls ausgeführt werden soll, das Signal Taken wird
aktiviert, und eine Verzweigungszieladresse wird zum Befehlsspeicher
übertragen. Der Befehlsausgabe-Analyseabschnitt 10 analysiert, ob
der im Befehlsregister 54 gespeicherte Befehl an eine
Funktionseinheit ausgegeben werden kann oder nicht, und aktiviert
das Signal inst_avail auf der Basis des Analyseergebnisses. Es wird
angenommen, daß vier Befehle ausgegeben werden.
Im nächsten Zyklus, der in Fig. 24B dargestellt ist, werden die
Befehle in einem Verzweigungsverzögerungs-Slot in das
Befehlsregister 54 eingelesen. Diese Befehle werden in
Funktionseinheiten eingegeben.
Im nächsten Zyklus (Fig. 24C) wird ein Befehl auf der Seite des
Verzweigungsziels, der vom Befehlsspeicher zugeführt wird, im
Registerspeicher 54 gespeichert und anschließend ausgeführt.
Im Fall der in Fig. 24 gezeigten Struktur, die die Befehle auf der
Seite der Verzweigung als Verzweigungsverzögerungs-Slot benutzt,
wird durch eine Verzweigung keine Verschlechterung der Leistung
verursacht, wenn bei der Verzweigung das Signal Taken aktiv ist.
Fig. 25 zeigt den Betrieb des Befehlsregisters, wenn keine
Verzweigung ausgeführt wird, das Signal Not Taken ist mit anderen
Worten aktiv. Unter Bezugnahme auf die Fig. 25 wird nun der Betrieb
des Befehlsregisters beschrieben, wenn das Signal Not Taken aktiv
ist.
Es wird angenommen, daß unter den in das Register 54 eingelesenen
Befehlen der zweite Befehl einen Verzweigungsbefehl darstellt (Fig.
25A). Der Verzweigungsverarbeitungsbereich 11 führt diesen
Verzweigungsbefehl aus, weiß, daß das Signal Not Taken ausgegeben
werden sollte (aktiv sein sollte), und aktiviert das Signal Not
Taken, wodurch das dem Befehlsausgabe-Analyseabschnitt 10 mitgeteilt
wird. Der Befehlsausgabe-Analyseabschnitt 10 verhindert
bedingungslos die Ausgabe von Befehlen, die diesem
Verzweigungsbefehl folgen.
Im nächsten Zyklus (Fig. 25B) werden die Befehle im
Verzweigungsverzögerungs-Slot in das Befehlsregister 54 eingelesen.
In diesem Zyklus ist die Ausgabe von Befehlen unterdrückt.
Im nächsten Zyklus (Fig. 25C) laufen Befehle nach dem
Verzweigungsverzögerungs-Slot ein, die im Befehlsregister 54
registriert und anschließend ausgeführt werden.
Wie in den Fig. 25A-C gezeigt ist, wird die Ausgabe von Befehlen für
1 Taktzyklus verhindert, wenn keine Verzweigung ausgeführt wird und
das Signal Not Taken aktiv ist. Das führt zu einer Verschlechterung
der Leistung. Wenn diese Verzweigung nicht ausgeführt wird (das
Signal Not Taken ist aktiv), wird das folgende Verfahren benutzt,
durch das zwei Arten von Verzweigungsbefehlen folgendermaßen
vorbereitet werden, um diese Leistungsverschlechterung zu
verhindern. Dieser Zugang lautet genauer:
- (a) einen Verzweigungsverzögerungs-Slot mit Befehlen auf der Seite der Verzweigung (Verzweigungszielseite) zu füllen, und
- (b) den Verzweigungsverzögerungs-Slot mit Befehlen auf der Seite ohne Verzweigung zu füllen.
Der erste Zugang (a) wird bei den Ausführungsformen 1 und 2 benutzt.
Der zweite Zugang stimmt mit dem Fall überein, in dem kein Verfahren
mit verzögerter Verzweigung benutzt wird. Mit anderen Worten zieht
der Zugang keinen Vorteil aus einem Verfahren mit verzögerter
Verzweigung. Der erste Zugang (a) leidet unter keiner
Leistungsverschlechterung, wenn eine Verzweigung auftritt, und wird
für einen Verzweigungsbefehl mit hoher Verzweigungswahr
scheinlichkeit benutzt. Der zweite Zugang (b) leidet unter keiner
Leistungsverschlechterung, wenn keine Verzweigung auftritt, und wird
für einen Verzweigungsbefehl mit geringer Verzweigungswahr
scheinlichkeit benutzt. In diesem Fall kann ein Befehlsregister zum
Empfangen der Ausgabe der Befehlswarteschlange in einer ID-Stufe
gebildet sein, oder es kann auch nur die Befehlswarteschlange
benutzt werden.
Fig. 26 zeigt ein Beispiel für die Struktur des in Fig. 23
dargestellten Befehlsausgabe-Analyseabschnitts 10. Die Struktur des
in Fig. 26 gezeigten Befehlsausgabe-Analyseabschnitt ist ähnlich der
in Fig. 21 dargestellten. Dem Ausgabeverhinderungsabschnitt 31 wird
jedoch das Signal Not Taken und über ein Register 35 das
Ausgabeverhinderungssignal issue_stop zugeführt. Das Register 35
besitzt die Funktion, das Signal Not Taken um 1 Taktzyklus zu
verzögern. Die restliche Struktur ist der in Fig. 21 gezeigten
ähnlich. Weil eine Befehlswarteschlange und/oder ein Befehlsregister
für den Ausgabeverhinderungsabschnitt 31 benutzt wird, wie das auch
bei der in Fig. 22 dargestellten Struktur der Fall ist, ist ein
Prioritätscodierer zum Erfassen des Prioritätsverzweigungsbefehls
unter den Befehlen 1-4 und zum Angeben seiner Position gebildet, und
es werden die Strukturen des Maskierungsschaltkreises 46 für
niederwertige Bit und des Addierers 45 verwendet.
Durch die Bildung des Ausgabeanzahl-Berechnungsabschnitts 32 wird
die Ausgabebefehlsanzahl issue_count erzeugt. Befehle mit Adressen
entsprechend der Anzahl ausgegebener Befehle können aus dem
Befehlsspeicher gelesen werden, ohne die Befehlswarteschlange zu
benutzen. Auch wenn das Befehlsregister benutzt wird, kann ein
weiterer Befehlsblock aus dem Befehlsspeicher entnommen werden,
nachdem alle im Register gespeicherten Befehle ausgegeben worden
sind.
Bei den oben angeführten Ausführungsformen 1 und 2 wird ein
Verzweigungsbefehl entsprechend einem Verfahren mit verzögerter
Verzweigung verarbeitet, womit eine Verarbeitung mit hoher
Geschwindigkeit erzielt wird. Als Verfahren zur Verarbeitung eines
Verzweigungsbefehls gibt es ein Verfahren mit
Verzweigungsvorhersage. Wenn ein Verzweigungsbefehl existiert wird
entsprechend diesem Verfahren der Verzweigungsvorhersage die
Verzweigungsrichtung vorher vorhergesagt, und ein
Verzweigungszielbefehl wird auf der Basis dieser Vorhersage
ausgeführt. Wenn die Vorhersage korrekt ist, wird entsprechend dem
Verzweigungsvorhersageverfahren die Zeit zum Einlesen eines
Zielbefehls eingespart und daher die Leistungsverschlechterung
reduziert. Nun folgt die Beschreibung einer Struktur entsprechend
diesem Verzweigungsvorhersageverfahren.
Fig. 27 zeigt schematisch die Strukturen einer Befehlseinlesestufe
und einer Befehlsdekodierstufe, die zu dieser dritten
Ausführungsform gehören. In der folgenden Beschreibung der dritten
Ausführungsform werden vier Einheiten für eine
Ganzzahlarithmetikoperation als Funktionseinheiten betrachtet.
Die Befehlswarteschlange 9 liest Befehle aus dem Befehlsspeicher
vorein und speichert die voreingelesenen Befehle. Die
Befehlswarteschlange 9 weist ein Register 14 zum Halten eines
Lesezeigers scope, ein Register 15 zum Halten eines Schreibzeigers
queue_top und eine Warteschlange 13 zum Speichern von Befehlen wie
im Fall der ersten Ausführungsform auf. Die Warteschlange 13
speichert als einen Eintrag einen Befehl, die Adresse des Befehls
(die Adresse im Befehlsspeicher) und ein Flag br_inv (das später
beschrieben wird), das angibt, daß der Befehl einen vorhergesagten
Verzweigungsbefehl darstellt.
Ein Befehlsdekoder 66 dekodiert einen Befehl, der aus der
Befehlswarteschlange 9 ausgelesen worden ist und analysiert, welcher
Befehl ausgebbar ist, wie im Fall der oben angeführten
Ausführungsformen. Das Analyseergebnis wird als Flag ausgegeben, das
die Verfügbarkeit des Befehls anzeigt, nämlich als Verfügbarkeits-
Flag flag_inst_avail auf die Signalleitung 91. Bei der in Fig. 27
dargestellten Struktur werden vier Befehle aus der
Befehlswarteschlange 9 ausgelesen, und die Ausgabeanalyse dieser
Befehle wird im Befehlsdekoder 66 ausgeführt. Daher werden vier Bit
an Verfügbarkeits-Flags ausgegeben, und falls ein Befehl ausgebbar
ist wird ein entsprechendes Flag id_inst_avail im Flag id_inst_avail
zu 4 Bit aktiviert.
Der Befehlsdekoder 66 gibt das Ergebnis der Befehlsdekodierung, mit
anderen Worten also einen Operationscode auf eine Signalleitung 97
als Code ID-code aus. Der Operationscode ID-code und das
Verfügbarkeits-Flag inst_avail des Befehls laufen stets zusammen zur
Funktionseinheit. Im folgenden bezeichnet EXC_code einen
Operationscode, der zu einer Ausführungsstufe EXC läuft, und
EXC_inst_avail stellt das Verfügbarkeits-Flag des Befehls in der
Ausführungsstufe EXC dar. Dieselbe Bezeichnung wird für die
Speicherzugriffsstufe MEM benutzt. Der Befehlsdekoder 66 steuert
ferner die Werte der Zeiger scope und queue_top der Register 14 und
15. Die Steuerung wird später beschrieben.
Bei der in Fig. 27 dargestellten Struktur werden die vier aus der
Befehlswarteschlange auf einmal ausgelesenen Befehle in den
Befehlsregistern 65a-65d gespeichert und an den Befehlsdekoder 66
angelegt. Die Befehlsregister 65a-65d weisen jeweils einen
Adreßspeicherbereich, einen Befehlscode-Speicherbereich und einen
Bereich zur Speicherung des Flag br_inv auf.
Der Befehlsdekoder 66 steuert ferner den Wert des Befehlszählers 12.
Ein Zugriff auf einen Befehls-Cache 61 wird entsprechend einem
Zeiger PC ausgeführt, der vom Befehlszähler 12 ausgegeben wird, und
die vier Befehle werden gleichzeitig vom Befehls-Cache 61
eingelesen.
Der Registersatz 69 ist zur Speicherung von Daten verfügbar und kann
von der Befehlsdekodierstufe und den Funktionseinheiten angesprochen
werden.
Ein Scoreboard-Steuerschaltkrels 100 und ein Scoreboard-Schaltkreis
101 sind zur Überwachung der Zustände der Register im Registersatz
69 gebildet. Der Betrieb des Steuerschaltkreises 100 und des
Scoreboard-Schaltkreis 101 wird später detailliert beschrieben.
Ein Verzweigungsbefehl wird folgendermaßen ausgeführt.
Als Beispiel für einen Verzweigungsbefehl wird folgender Befehl
betrachtet: "Wenn das Register R1 den Wert 0 anzeigt erfolgt eine
Verzweigung zu einer Adresse, die durch Addition von 5 zur Adresse
des Verzweigungsbefehls erzeugt wird" (die "5" wird als
Verzweigungs-Offset bezeichnet).
Im Befehlsdekoder 66 wird geprüft, ob der Inhalt des Registers R1,
der aus dem Registersatz 69 ausgelesen wird, gleich "0" ist.
Wenn das Testergebnis "falsch" lautet, wird nichts ausgeführt. Mit
anderen Worten wird keine Verzweigung ausgeführt und der Befehl nach
dem Verzweigungsbefehl wird ausgeführt. Ist das Ergebnis des Tests
"wahr", so wird 5 zur Adresse des Verzweigungsbefehls addiert, und
das Ergebnis der Addition wird im nächsten Zyklus im Befehlszähler
12 der Befehlseinlesestufe (IF-Stufe) eingestellt.
Der oben angeführte Sachverhalt stellt einen allgemeinen Weg dar,
einen Verzweigungsbefehl auszuführen. Nun folgt eine Beschreibung
der Ausführung eines Verzweigungsbefehls entsprechend einer
Verzweigungsvorhersage. Die Ausführung eines Verzweigungsbefehls auf
der Basis einer Verzweigungsvorhersage erfolgt folgendermaßen.
(1) Es wird bestimmt, ob eine Vorhersageverzweigung erfolgen soll.
Es werden die folgenden Bedingungen betrachtet:
IR1: R1 ← R2 + R3
IR2: IF R1 == 0 then PC ← Adresse + 5
IR3: Befehl
IR4: Befehl.
IR1: R1 ← R2 + R3
IR2: IF R1 == 0 then PC ← Adresse + 5
IR3: Befehl
IR4: Befehl.
Der oben angegebene Befehl IR2 stellt einen Verzweigungsbefehl dar,
der im vorherigen Beispiel beschrieben worden ist. Der Wert des
Registers R1, das für diesen Verzweigungsbefehl notwendig ist, ist
nicht bestimmt, bis der im Befehl IR1 enthaltene Additionsbefehl
abgeschlossen worden ist. In einem solchen Fall wird der Befehl IR2
als gefährdet bezeichnet. Bei einem herkömmlichen Verfahren zur
Ausführung eines Verzweigungsbefehls nimmt der Befehl IR2 daher
einen Halt-Zustand ein, bis die Addition im Befehl IR1 abgeschlossen
ist. Entsprechend dem Verfahren mit Verzweigungsvorhersage wird der
Verzweigungsbefehl IR2 an diesem Punkt vorhergesagt und entschieden,
daß eine Verzweigung auftreten wird. In den nachfolgenden Zyklen
wird ein Einlesen von Befehlen auf der Basis der
Verzweigungsvorhersage ausgeführt.
Um die Ausführung eines Befehls auf der Basis dieser
Verzweigungsvorhersage anzuzeigen wird das Flag on_pred des
Registers 63 gesetzt. Zur Vorhersage einer Verzweigung werden
verschiedene Verfahren benutzt. Wenn beispielsweise im Fall eines
Verfahrens mittels eines Verzweigungs-Offset der Verzweigungs-Offset
einen positiven Wert aufweist, so wird vorhergesagt, daß keine
Verzweigung auftritt. Weist der Verzweigungs-Offset dagegen einen
negativen Wert auf, so wird vorhergesagt, daß eine Verzweigung
auftritt.
Wenn die Vorhersage angibt "es wird keine Verzweigung vorgenommen",
so passiert nichts und die auf den Verzweigungsbefehl folgenden
Befehle werden ausgeführt. Wenn die Vorhersage "es wird eine
Verzweigung vorgenommen" angibt, so wird 5 zur Adresse des
Verzweigungsbefehls addiert, und der sich ergebende Wert wird im
nächsten Zyklus im Befehlszähler 12 der Befehlseinlesestufe IF
eingestellt.
Das Flag br_inv des Eintrags der Befehlswarteschlange 9, in dem der
Verzweigungsbefehl IR2 gespeichert ist, wird gesetzt. Das gibt an,
daß die Verzweigung vorhergesagt worden ist. Zu diesem Zweck sind
ein Verzweigungsadreßregister 85 und ein Flag-Schreibschaltkreis 86
gebildet. Das Verzweigungsadreßregister 85 speichert die Adresse
br_add eines Verzweigungsbefehls in der Warteschlange 13. Der
Schreibschaltkreis 86 setzt das Flag br_inv einer von der Adresse
br_add in der Warteschlange 13 angegebenen Adresse. In der
Warteschlange 13 wird ein gleichzeitiges Schreiben und Lesen von 4
Befehlen ausgeführt. Daher kann ein getrennter Schreibpfad zum
Setzen oder Schreiben nur des Flag br_inv zu einem Bit gebildet
sein. Ferner kann im Schreibschaltkreis 86 eine Struktur verwendet
werden, die auf der Basis der Adresse br_add nur ein entsprechendes
Flag gleich 1 setzt und gleichzeitig das Flag br_inv zu vier Bit
schreibt.
Wie oben beschrieben worden ist werden entsprechend dem
Verzweigungsvorhersageverfahren der dritten Ausführungsform die
Schritte (1) bis (3) ausgeführt. Nun wird die Ausführung von
Befehlen nach der Ausführung einer Verzweigungsvorhersage
beschrieben. Befehle, die nach der Ausführung einer
Verzweigungsvorhersage ausgeführt werden sollen, werden auf der
Basis der Vorhersage ausgeführt und erfordern daher verschiedene
Mechanismen.
Um anzugeben, daß der an eine Funktionseinheit auszugebende Befehl
ein Befehl nach einem Verzweigungsbefehl ist, der einer
Verzweigungsvorhersage unterworfen wurde, wird er mit einem Flag
inst_pred versehen, das anzeigt, daß es sich um einen Befehl unter
einer Verzweigungsvorhersage handelt, und das Flag wird vom
Befehlsdekoder 66 zu einer Signalleitung 98 übertragen. Das Flag
inst_pred gelangt zusammen mit dem Operationscode in die Pipeline
der Funktionseinheit. Der Befehlsdekoder 66 setzt ein Flag
ID_inst_pred für den Befehl nach einem Verzweigungsbefehl, wenn das
Flag on_pred gesetzt ist.
Ein Verzweigungsbefehl, der bereits einer Verzweigungsvorhersage
unterworfen wurde, darf nicht ausgeführt werden, selbst wenn er
erneut aus der Befehlswarteschlange 9 gelesen und im Befehlsregister
65 gespeichert worden ist, weil seine Ausführung bereits
abgeschlossen ist. Daher wird der Verzweigungsbefehl, der eine
Verzweigungsvorhersage durchlaufen hat, im Befehlsdekoder 66 als
"NOP-Befehl" betrachtet. Genauer gesagt wird der ausgelesene Befehl
mit gesetztem Flag br_inv als NOP-Befehl betrachtet.
Wenn die Gefährdung eines Verzweigungsbefehls, der bereits einer
Verzweigungsvorhersage unterworfen wurde, noch nicht verschwunden
ist, und ein Befehl (mit Large-Adresse) weiter nachfolgend auf
diesen Verzweigungsbefehl ausgegeben wird, wird der
Verzweigungsbefehl gesichert, so daß die Richtung der Verzweigung
später entschieden werden kann, wenn die Gefährdung des
Verzweigungsbefehls verschwindet. Daher wird der Verzweigungsbefehl
in einem Steuerschaltkreis 62 als Befehl br_save gespeichert. Der
Steuerschaltkreis 62 speichert den Verzweigungsbefehl, der einer
Verzweigungsvorhersage unterworfen wurde, und weist ferner eine
Funktion zum Testen und Bestimmen der Verzweigung wie im Fall des
Dekoders 66 auf. Wenn z. B. ein Verzweigungsbefehl anzeigt, daß eine
Verzweigung ausgeführt werden soll, wenn der Wert des Registers R5
im Registersatz 69 gleich 0 ist, speichert der Steuerschaltkreis 62
den Verzweigungsbefehl als Befehl br_save und überwacht den Wert des
Registers R5 im Registersatz 69. Ist der Wert des Registers R5
entschieden, testet der Steuerschaltkreis 62 den Verzweigungsbefehl
unter Verwendung des Wertes im Register R5.
Wenn die Gefährdung eines Verzweigungsbefehls unter der
Verzweigungsvorhersage verschwindet, kann eine Verzweigungsrichtung
entschieden werden. Es können verschiedene Steuerungen erfolgen, je
nachdem, ob die Verzweigungsrichtung mit der auf der Basis der
Vorhersage genommenen Richtung übereinstimmt.
In diesem Fall gibt der Befehlsdekoder 66 ein Signal pred_hit aus,
das angibt, daß die Verzweigungsvorhersage korrekt war. Das Flag
inst_pred der jeweiligen- Pipeline-Stufen einer Funktionseinheit wird
gelöscht.
In diesem Fall gibt der Befehlsdekoder 66 ein Signal pred_mis an die
jeweilige Funktionseinheit aus, das anzeigt, daß die
Verzweigungsvorhersage inkorrekt war. In den jeweiligen Pipeline
stufen der Funktionseinheit wird ein Befehl mit gesetztem Flag
inst_pred ungültig gemacht. Genauer gesagt wird das Flag inst_avail
gelöscht. Das Löschen des Flags inst_avail verhindert ein Schreiben
in den Registersatz in einer Write-Back-Stufe WB durch einen Befehl.
Ferner wird bei einem Befehl zum Speichern von Daten in den
Datenspeicher die Operation zum Speichern Daten in den Datenspeicher
in der Speicherzugriffsstufe verhindert.
Den oben angeführten Prozeß in einem Logikausdruck zusammenfassend
werden die Verfügbarkeits-Flag-Ausgabe EXC_inst_avail out und die
Ausgabe des Verzweigungsvorhersage-Ausführungs-Flag
EXC_pred_inst_out von der Ausführungsstufe EXC folgendermaßen
ausgedrückt:
EXC_inst_avail_out = (/EXC_inst_pred + EXC_inst_pred* (pred_hit + /pred_hit*/Pred_mis))*EXC_inst_avail
EXC_inst_pred_out = EXC_inst_pred * /pred * /pred_hit.
EXC_inst_avail_out = (/EXC_inst_pred + EXC_inst_pred* (pred_hit + /pred_hit*/Pred_mis))*EXC_inst_avail
EXC_inst_pred_out = EXC_inst_pred * /pred * /pred_hit.
Fig. 28 zeigt ein Logikdiagramm einer Schaltkreiskonfiguration, die
den oben angeführten Ausdruck implementiert. In Fig. 28 ist eine
Struktur zur Steuerung des Werts des jeweiligen Flag, wenn ein
Befehl von der Ausführungsstufe EXC zur Speicherzugriffsstufe MEM
übertragen wird, gezeigt. Der durch eine gestrichelte Linie
bezeichnete Block in dieser Ausführungsstufe EXC wird in der
Speicherzugriffsstufe MEM in ähnlicher Weise benutzt. In der
Struktur des jeweiligen Schaltkreises wird die Operation "+" im oben
angeführten Logikausdruck durch einen ODER-Schaltkreis, die
Operation "*" durch ein UND-Gatter und die Operation "/" durch einen
Inverter implementiert. Wie in Fig. 29 dargestellt ist, kann
anstelle der in Fig. 28 gezeigten Struktur eine Struktur benutzt
werden, bei der die Signale pred_mis und pred_hit der jeweiligen
Stufe gemeinsam zugeführt werden, und eine Rückstellung des Latch-
Schaltkreises in der jeweiligen Stufe (ungültig machen eines Flag)
ausgeführt wird.
Die Zeichen LA in Fig. 29 stellen einen Latch-Schaltkreis zum
Verriegeln eines Signals dar, das in Abhängigkeit von einem den
Pipeline-Betrieb taktenden Taktsignal angelegt wird.
Wenn eine Verzweigungsrichtung entschieden ist, wird das Flag
on_pred des Registers 63 (siehe Fig. 27) gelöscht. Das gibt den
Abschluß der Ausführung der Verzweigungsvorhersage an.
In der oben angeführten Beschreibung ist eine Verzweigungsvorhersage
für einen üblichen Verzweigungsbefehl betrachtet worden. Unter den
Verzweigungsbefehlen gibt es einen Befehl, der außerdem die Funktion
einer besonderen Operation mit der Bezeichnung Linkage (Verbindung)
aufweist. Ein solcher Befehl wird im folgenden mit jal bezeichnet.
Der jal-Befehl wird beschrieben als:
jal Ziel.
jal Ziel.
Der jal-Befehl stellt bedingungslos eine Verzweigungszieladresse
"Ziel" im Befehlszähler 63 ein und springt. Ferner schreibt er die
Adresse von sich selbst in ein angegebenes Register.
Der jal-Befehl weist neben der beschriebenen Funktion der Ausführung
einer Verzweigung eine Funktion zum erneuten Schreiben des Inhalts
eines Registers auf. Für den Fall einer Verzweigungsvorhersage wird
ein Befehl selbst ausgeführt, selbst wenn die Befehle, die dem
Befehl vorangehen, nicht ausgegeben werden können. Wenn der jal-
Befehl eine ähnliche Operation ausführt, wird ein erneutes Schreiben
des Inhalts eines Registers ausgeführt, weil die Ausführung der
vorherigen Befehle nicht abgeschlossen ist. Ein solches Ersetzen der
Reihenfolge beim erneuten Schreiben in das Register macht die
Verarbeitung von Unterbrechungen extrem schwierig. Daher wird im
Fall des jal-Befehls bei der Verzweigungsvorhersageausführung nur
ein erneutes Schreiben des Werts des Zeigers PC des Befehlszählers
62 ausgeführt. Eine Operation der Verbindung (Linkage) muß
ausgegeben werden, wenn alle Befehle, die dem Befehl jal vorangehen,
ausgegeben worden sind. Genauer gesagt kann der jal-Befehl eine
Verzweigung auf der Basis einer Verzweigungsvorhersage nehmen, wobei
aber die Verbindung zum Zeitpunkt der Verzweigungsausführung nicht
ausgeführt wird. Der jal-Befehl mit gesetztem Flag br_inv führt
keine Verzweigung aus, sondern löst die Operation einer Verbindung
aus, wenn eine Gefährdung verschwindet, wobei alle vorangegangenen
Befehle ausgegeben worden sind.
Nun folgt eine Beschreibung des Scoreboarding zur Implementierung
dieses Verfahrens zur Verzweigungsvorhersage. Betrachtet sei die
folgende Befehlsreihenfolge:
IR1: R1 ← M (R2)
IR2: R3 ← R1 + R4.
IR1: R1 ← M (R2)
IR2: R3 ← R1 + R4.
Der Befehl IR1 greift auf den Datenspeicher zu unter Verwendung des
Inhalts von Register R2 als Adresse und speichert die Daten des
angesprochenen Datenspeichers im Register R1. Der Befehl IR2 addiert
die Inhalte von Register R1 und Register R4 und schreibt das
Additionsergebnis in Register R3. Der zweite Befehl IR2 benutzt das
Ergebnis R1 des ersten Befehls IR1. Daher kann der zweite Befehl IR2
nicht ausgegeben werden, bis die Leseoperation des Datenspeichers
durch den ersten Befehl IR1 abgeschlossen ist. Daher ist ein
Mechanismus notwendig, um anzugeben, daß der Inhalt des
Befehlsregisters R1 nicht bestimmt ist, und um eine Steuerung
auszuführen, damit andere Befehle daran gehindert werden, das
Register R1 in inkorrekter Weise zu benutzen.
Wenn der Registersatz 69 aus 32 Worten besteht, wird für jedes Wort
ein Flag gebildet. Wenn das Flag gesetzt ist, gibt es an, daß der
Inhalt des entsprechenden Registers nicht bestimmt ist. Dieses Flag
wird als Scoreboard bezeichnet. Das Scoreboard wird durch
RF_lkf<31 : 0< ausgedrückt.
Für den Fall der oben angeführten Befehle IR1 und IR2 hat der erste
Befehl IR1 die Aufgabe, den Inhalt des Registers R1 neu zu
schreiben, wenn der Befehl ausgegeben wird. Gleichzeitig wird das
1-Bit-Flag RF_lkf<1< gesetzt. Wenn Daten aus dem Datenspeicher gelesen
werden, wird das Flag RF_lkf<1< gelöscht.
Zusätzlich zum Flag RF_lkf ist bei der gegenwärtigen Ausführungsform
ein Flag RF_lkf<31 : 0< gebildet, das angibt, daß der Befehl, der das
Flag des Scoreboard gesetzt hat, das jedem der Register entspricht,
einen Befehl darstellt, der eine Verzweigungsvorhersage erfährt.
Im folgenden wird angenommen, daß der einzige Befehl, der zur
Ausführung eine Steuerung zum Warten unter Verwendung des Scoreboard
(in Fig. 27 durch das Bezugszeichen 101 gekennzeichnet) benötigt, um
den Registerinhalt zu entscheiden, nur ein "Load Memory"
(Speicherwert laden) ist, der auf den Datenspeicher zugreift. In
diesem Fall werden im Scoreboard-Schaltkreis 101 die Bits des Flag
RF_lkf entsprechend dem Schreibregister gesetzt, wenn ein Ladebefehl
ausgegeben wird. Wenn die Ausgabe des Ladebefehls nach einer
Verzweigungsvorhersage (Flag on_pred ist gesetzt) ausgeführt wird,
wird das Flag RF_lkf_pred entsprechend dem zu schreibenden Register
gesetzt.
Wenn sich herausstellt, daß die Verzweigungsvorhersage inkorrekt
ist, löscht das Flag RF_lkf_pred das Flag RF_lkf entsprechend dem
gesetzten Bit. Darüber hinaus wird das Flag RF_lkf_pred für jedes
Register gelöscht.
Nun folgt die Beschreibung eines Logikschaltkreises des Scoreboard-
Steuerschaltkreises 101 zur Steuerung des Scoreboards. Der
Befehlsdekoder 66 aktiviert ein Signal issue_load, wenn er einen
Ladebefehl ausgibt. Die Speicherzugriffsstufe MEM der
Lade-/Speichereinheit aktiviert ein Signal MEM_load, wenn es Daten aus
einem Daten-Cache (Datenspeicher) lesen kann. Jedes der Bits des
Scoreboards RF_lkf weist ein Schreibaktivierungssignal
RF_lkf_we<31 : 0< auf. Das Schreiben in ein Register findet nur dann
statt, wenn das Schreibaktivierungssignal aktiv ist. In ähnlicher
Weise ist das Schreibaktivierungssignal RF_lkf_pred_we<31 : 0< für das
Flag RF_lkf_pred gebildet. Wenn das Signal RF_lkf_pred_reset
aktiviert wird, werden darüber hinaus alle Flags des Scoreboards
RF_lkf_pred für die Vorhersage gesetzt.
Bei der oben beschriebenen Logik kann die Steuerung des Scoreboard
RF_lkf und RF_lkf_pred durch eine Wahrheitstafel ausgedrückt werden,
die in Fig. 30 gezeigt ist. Wenn man die in Fig. 30 gezeigte
Wahrheitstafel durch einen Logikschaltkreis ausdrückt, erhält man
die in Fig. 31 dargestellte Schaltkreiskonfiguration. Bei der in
Fig. 31 gezeigten Konfiguration ist nur ein Steuerabschnitt
entsprechend einem Registersatz gezeigt. Ein Dekoder 140 dekodiert
ein Schreibregistersignal (5 Bit) und wählt eine der
Ausgangssignalleitungen aus (zusammen 32 Ausgangssignalleitungen
sind für die Schreibregister gebildet). Das logische Produkt des
Ausgangssignals des Dekoders 140 und des Signals issue_load wird
erzeugt. Daten werden in Abhängigkeit von den
Schreibaktivierungssignalen RF_lkf_we<i< bzw. RF_lkf_pred_we<i< in
die Register 141 und 142 geschrieben. Die Ausgangssignale der
Register 141 und 142 werden zum Befehlsdekoder 66 übertragen.
In Fig. 32 ist eine Funktionsstruktur des Befehlsdekoders 66
gezeigt. Wie in Fig. 32 dargestellt ist, dekodiert der
Befehlsdekoderschaltkreis 160 vier Befehle, nämlich die Befehle
#1-#4, und gibt einen Operationscode ID_code aus. Ein
Ausgabeanalyseabschnitt 161 empfängt diese Befehle #1-#4 und ein
Flag br_inv, analysiert, ob die Befehle ausgebbar sind und gibt ein
Ausgabe-Flag ID_inst_avail aus.
Ein Verzweigungsverarbeitungsabschnitt 164 empfängt die Befehle
#1-#4, erfaßt einen Verzweigungsbefehl und führt den Verzweigungsbefehl
aus. Wenn der Verzweigungsbefehl nicht in einem Zyklus ausgeführt
werden kann, gibt der Verzweigungsverarbeitungsabschnitt 164 ein
Flag pr_ex aus, das angibt, daß eine Verzweigungsvorhersage abläuft.
Der Verzweigungsverarbeitungsabschnitt 164 erzeugt ferner Signale
Taken und Not Taken, die das Vorhandensein bzw. Nicht-Vorhandensein
einer Verzweigung anzeigen, wenn die Ausführung des
Verzweigungsbefehls abgeschlossen ist.
Ein Register 163 empfängt das Signal pr_ex vom
Verzweigungsverarbeitungsabschnitt 164 und speichert es als Flag
on_pred ab.
Ein Vorhersage-Flag-Erzeugungsschaltkreis 162 empfängt das Flag
br_inv, die Signale Taken und Not Taken und das Flag on_pred vom
Verzweigungsverarbeitungsabschnitt 164 und erzeugt ein Vorhersage-
Flag ID_inst_pred. Die Signale Taken und Not Taken vom
Verzweigungsverarbeitungsabschnitt 164 werden dem
Ausgabeanalyseabschnitt 161 zugeführt. Der Betrieb der jeweiligen
Schaltkreise stimmt mit dem Betrieb beim oben angeführten
Signalerzeugungsverfahren überein und die Beschreibung wird nicht
wiederholt.
Obwohl bei der oben angeführten Ausführungsform die Anzahl der auf
einmal einzulesenden Befehle und die Anzahl der auf einmal zu
analysierenden Befehle gleich vier ist, ist die Anzahl der Befehle
nicht auf vier beschränkt, sondern kann andere Zahlen annehmen.
Die Besonderheiten der vorliegenden Erfindung
können folgendermaßen zusammengefaßt werden.
- (1) Eine Mehrzahl von Befehlen wird aus einem Befehlsspeicher voreingelesen, und es ist ein Warteschlangenspeicher zum Speichern der voreingelesenen Befehle gebildet. Der Warteschlangenspeicher weist eine Mehrzahl von Einträgen auf, in denen jeweils ein Befehl gespeichert wird. Der Eintrag weist ein Feld auf, das angibt, daß der gespeicherte Befehl bereits auf der Basis einer Verzweigungsvorhersage ausgeführt worden ist.
- (2) Auf der Basis des Werts des Feldes, das die Ausführung auf der Basis der Vorhersage angibt, erfolgt eine Steuerung, so daß der im entsprechenden Eintrag gespeicherte Befehl nicht ausgeführt wird.
- (3) Ein Befehl, durch den die Speicherung einer Rückkehradresse im Register eines Registersatzes und die Verzweigung gleichzeitig ausgeführt werden, wird auf der Basis einer Verzweigungsvorhersage ausgeführt, wobei nur die Verzweigung ausgeführt wird, und die Speicherung der Rückkehradresse im Register ausgeführt wird, wenn der Befehl ausführbar wird.
- (4) Befehle jeweils in einer Funktionseinheit (einer Pipeline) weisen ein erstes Flag (inst_pred), das anzeigt, daß der Befehl in einem Zeitraum ausgelöst worden ist, bevor entschieden ist, ob die Vorhersage korrekt ist oder nicht, nachdem eine Verzweigungsvorhersage ausgeführt worden ist, und ein zweites Flag (inst_avail), das anzeigt, daß der Befehl verfügbar ist, auf. Wenn sich die Verzweigungsvorhersage als korrekt erweist, wird das erste Flag (inst_pred) gelöscht, während das zweite Flag eines Befehls mit gesetztem ersten Flag gelöscht wird, wenn sich die Vorhersage als inkorrekt herausstellt, und auch das erste Flag gelöscht wird.
- (5) Ein Registersatz (ein Vielzweckregister) weist ein drittes Flag (RF_lkf), das anzeigt, daß ein Schreiben in das Register stattfindet, und ein viertes Flag (RF_lkf_pred) auf, das anzeigt, daß der Befehl, der das Flag steuert, in der Zeitspanne nach einer Verzweigungsvorhersage und bevor entschieden ist, ob die Vorhersage korrekt ist oder nicht, ausgegeben worden ist. Ist die Vorhersage korrekt, werden die vierten Flags aller Vielzweckregister zurückgesetzt. Wenn sich die Vorhersage als inkorrekt herausstellt, wird das dritte Flag des Registers, dessen viertes Flag gesetzt ist, gelöscht.
Entsprechend der vorliegenden Erfindung wird ein Verzweigungsbefehl
auf der Basis einer Verzweigungsvorhersage ausgeführt, bevor eine
Gefährdung verschwindet. Im Fall einer Verzweigung ist daher der
Zyklus, der herkömmlicherweise notwendig ist, um auf das Einlaufen
eines Verzweigungszielbefehls aus einem Befehls-Cache zu warten,
hier unnötig. Ein Zielbefehl wird auf der Basis einer Vorhersage
vorher eingelesen und der Zyklus zum Warten auf den Zielbefehl vom
Befehls-Cache ist nicht mehr notwendig, wodurch in der Pipeline
keine leeren Stufen erzeugt werden. Damit kann die
Leistungsverschlechterung einer Parallelverarbeitungseinheit
aufgrund eines Verzweigungsbefehls verhindert werden.
Claims (14)
1. Parallelverarbeitungseinheit mit:
- (ii) einer Mehrzahl von parallel betreibbaren Funktionsein heiten (4a, 4b, 6, 7) zum Ausführen von Befehlen aus dem Be fehlsspeicher (1);
- (i) einem Befehlsspeicher (1) zum Speichern von Befehlen;
- (iii) einer Speichereinrichtung (9) zum Speichern von Befeh len, die aus dem Befehlsspeicher (1) geholt sind und an die Funktionseinheiten (4a, 4b, 6, 7) auszugeben sind, wobei die Speichereinrichtung (9) eine Mehrzahl von Einträgen aufweist und jeder Eintrag ein erstes Feld für einen Befehl und ein zweites Feld zum Speichern eines ersten Flag (br_inv), das anzeigt, ob der zugehörige Befehl ein unter einer Vorhersage stehender Ver zweigungsbefehl ist, umfaßt;
- (iv) einer Steuereinrichtung (66) zum Erkennen eines Ver zweigungsbefehls unter den Befehlen, die aus der Speicherein richtung (1) geholt worden sind, und zum Vorhersagen, ob von ei nem Verzweigungsbefehl eine Verzweigung ausgeführt wird;
- (v) einer von der Steuereinrichtung (66) abhängigen Ein stelleinrichtung (85, 86) zum Einstellen des Wertes des ersten Flag (br_inv) in dem zweiten Feld des Eintrages, in dem ein un ter Vorhersage stehender Verzweigungsbefehl gespeichert ist; und
- (vi) einer von dem Wert des ersten Flag (br_inv) abhängigen Logikschaltung (Gatter in Fig. 28) zum Steuern der Ausführung oder Nichtausführung eines zugehörigen Befehls. (Fig. 27)
2. Parallelverarbeitungseinheit nach Anspruch 1, bei der die
Logikschaltung (Gatter in Fig. 28) eine Einrichtung aufweist zum
Verhindern der Ausführung eines Befehls, wenn das zugehörige er
ste Flag (br_inv) anzeigt, daß der Befehl entsprechend einer von
der Steuereinrichtung (66) vorhergesagten Verzweigung ausgeführt
wird.
3. Parallelverarbeitungseinheit nach Anspruch 1 oder 2, mit ei
nem Registersatz (69) mit einer Mehrzahl von Registern, wobei
die Steuereinrichtung (66) eine Einrichtung (100, 101) aufweist
zum Speichern einer Rückkehradresse in einem Register des Regi
stersatzes (69), wenn der Verzweigungsbefehl tatsächlich ausge
führt werden kann, falls der Verzweigungsbefehl einen Befehl zum
Speichern der Rückkehradresse im Register aufweist, die notwen
dig ist, um von einer ausgeführten Verzweigung zurückzukehren.
4. Parallelverarbeitungseinheit nach einem der Ansprüche 1 bis
3, bei der die Steuereinrichtung (66) aufweist:
- - eine Ausgabeeinrichtung (160), die eine Mehrzahl von Befeh len aus dem Befehlsspeicher (1) empfängt, gleichzeitig aus führbare Befehle unter den empfangenen Befehlen erfaßt und gleichzeitig ausführbare Befehle an zugehörige Funktionsein heiten (4a, 4b, 6, 7) ausgibt,
- - eine Vorhersageverifizierungseinrichtung (164) zum Ausführen des Verzweigungsbefehls und zum Bestimmen, ob die Vorhersage der Verzweigung korrekt ist,
- - eine erste Flag-Erzeugungseinrichtung (162, 163), die von der Steuereinrichtung (66) und der Vorhersageverifizierungs einrichtung (164) abhängig ist, zum Erzeugen eines zweiten Flag (inst_pred) für jeden Befehl, das angibt, daß der zuge hörige Befehl in einer Zeitspanne an eine zugehörige Funkti onseinheit (4a, 4b, 6, 7) ausgegeben werden soll, nachdem die Vorhersage einer Verzweigung erfolgt, bevor die Bestim mung durch die Vorhersageverifizierungseinrichtung (164) ge macht wird,
- - eine zweite Flag-Erzeugungseinrichtung (161) zum Erzeugen eines dritten Flag (inst_avail) für jeden Befehl, das an zeigt, daß der zugehörige Befehl gültig in einer Funktions einheit (4a, 4b, 6, 7) ausgeführt werden kann, wobei das zweite und dritte Flag und der zugehörige Befehl an eine zu gehörige Funktionseinheit in Form einer Verbindung ausgege ben werden, und
- - eine erste Flag-Steuereinrichtung, die von der Vorhersageve rifizierungseinrichtung (164) abhängig ist, zum Steuern des Wertes des zweiten und dritten Flags (inst_pred, inst_avail), die an die Funktionseinheit (4a, 4b, 6, 7) aus gegeben werden, wobei die erste Flag-Steuereinrichtung nur das zweite Flag (inst_pred) löscht, wenn die Vorhersageveri fizierungeinrichtung (164) anzeigt, daß die Vorhersage einer Verzweigung richtig ist, während die erste Flag-Steuerein richtung sowohl das zweite (inst_pred) als auch das dritte (inst_avail) Flag löscht, wenn ein Befehl ein gesetztes zweites Flag (inst_pred) aufweist und die Vorhersageverifi zierungseinrichtung (164) angibt, daß die Vorhersage falsch war. (Fig. 32)
5. Parallelverarbeitungseinheit nach einem der Ansprüche 1 bis
4 mit einem Registersatz (69) mit einer Mehrzahl von Regi
stern, wobei die Steuereinrichtung (66) aufweist:
- - eine Erkennungseinrichtung (140) zum Erkennen eines Befehls, der das Schreiben von Daten in ein Register des Register satzes (69) erfordert,
- - eine erste Flag-Speichereinrichtung (141), die für jedes der Register gebildet und von der Erkennungseinrichtung (140) abhängig ist, zum Speichern eines vierten Flag (RF_lkf), das anzeigt, daß das zugehörige Register einem Datenschreiben unterworfen wird,
- - eine zweite Flag-Speichereinrichtung (142), die für jedes der Register gebildet und von der Steuereinrichtung (66) ab hängig ist, zum Speichern eines fünften Flag (RF_lkf_pred), das anzeigt, daß der Befehl, der ein Schreiben von Daten er fordert, ein Befehl ist, der nach der Vorhersage einer Ver zweigung und bevor die Vorhersage als richtig oder falsch bestimmt wird, ausgegeben wird, und
- - eine zweite Flag-Steuereinrichtung (Gatter in Fig. 31), die von der Erkennungseinrichtung (140) und der Steuereinrichtung (66) abhängig ist, zum Steuern des vierten und fünften Flag, wobei die zweite Flag-Steuereinrichtung alle fünften Flags löscht, wenn die Vorhersage als falsch bestimmt wird, während die zweite Flag-Steuereinrichtung als vierte Flag für ein Register löscht, dessen fünftes Flag aktiv ist, wenn die Vorhersage als falsch bestimmt wird und ein aktives fünftes Flag anzeigt, daß der Inhalt des zugehörigen Registers nicht verfügbar ist. (Fig. 31)
6. Parallelverarbeitungseinheit nach einem der Ansprüche 1 bis
5, bei der die Speichereinrichtung (9) einen Warteschlangen
speicher (13) aufweist.
7. Parallelverarbeitungseinheit nach einem der Ansprüche 1
bis 6, bei der die Einstelleinrichtung eine auf die Steuerein
richtung (66) reagierende Einrichtung (85, 86) zum Erfassen
eines Verzweigungsbefehles zum Setzen des ersten Flag (br_inv)
in dem zweiten Feld aufweist, das mit dem Verzweigungsbefehl
verknüpft ist, der von der Steuereinrichtung (66) erfaßt ist.
8. Parallelverarbeitungseinheit nach einem der Ansprüche 1
bis 7, bei der ein Befehl mit einem zugehörigen ersten Flag
(br_inv) in dem zweiten Feld, das durch die Einstelleinrich
tung (85, 86) gesetzt ist, als NOP-Befehl dient, der keine
Operation nötig hat.
9. Verfahren zum Ausführen von Befehlen in einer Parallel
verarbeitungseinheit mit einem Befehlsspeicher (1) und einer
Mehrzahl von parallel betätigbaren Funktionseinheiten (4a, 4b,
6, 7) zum Ausführen von Befehlen aus dem Befehlsspeicher (1),
mit den Schritten:
- (I) Holen einer Mehrzahl von Befehlen aus dem Befehls speicher (1);
- (II) Speichern der geholten Befehle in entsprechenden Einträgen in einer Speichereinheit (9), während ein erstes Flag (br_inv) mit dem Befehl verknüpft ist, wobei das erste Flag anzeigt, daß ein zugehöriger Befehl sich auf das Vorhersagen einer Verzweigung bezieht;
- (III) Auslesen einer Mehrzahl von Befehlen aus der Spei chereinheit (9);
- (IV) Erkennen eines Verzweigungsbefehles unter den ausge lesenen Befehlen und Vorhersagen, ob die Verzweigung von dem Verzweigungsbefehl ausgeführt wird;
- (V) Setzen eines ersten Flag (br_inv) in die Speicher einheit (9) in Abhängigkeit von der Erkennung des Verzweigungsbefehles, das mit einem Befehl verknüpft ist, der sich auf das Vorhersagen der Verzweigung durch den Verzweigungsbefehl bezieht; und
- (VI) Stoppen des Ausführens oder Nichtausführens des zu gehörigen Befehles in Abhängigkeit von dem Wert des ersten Flag (br_inv).
10. Verfahren nach Anspruch 9, bei dem der Schritt (V) den
Schritt aufweist:
- (V1) Setzen des mit dem erfaßten Verzweigungsbefehl verknüpften ersten Flag (br_inv).
11. Verfahren nach Anspruch 9 oder 10, bei dem der Schritt
(VI) den Schritt aufweist:
- (VI1) Nichtbeachten des zugehörigen Befehles, wenn das erste Flag (br_inv) gesetzt ist.
12. Verfahren nach einem der Ansprüche 9 bis 11, bei dem die
Verarbeitungseinheit ein Registerfile (69) mit einer Mehrzahl
von Registern aufweist und bei dem der Schritt (VI) den
Schritt aufweist:
- (VI2) Speichern einer Rückkehradresse in einem Register des Registerfiles (69), wenn der Verzweigungsbe fehl tatsächlich ausgeführt werden kann, wenn der Verzweigungsbefehl einen Befehl zum Speichern der Rückkehradresse enthält, die zum Rückkehren von der genommenen Verzweigung in das Register nötig ist.
13. Verfahren nach einem der Ansprüche 9 bis 12, weiter mit
den Schritten:
- (VII) Empfangen einer Mehrzahl von Befehlen von der Speichereinheit (9), gleichzeitiges Erkennen gleichzeitig ausführbarer Befehle der empfangenen Befehle und Liefern der gleichzeitig ausführbaren Befehle zu zugehörigen Funktionseinheiten (4a, 4b, 6, 7);
- (VIII) Bestätigen der Vorhersage durch Ausführen des Ver zweigungsbefehles und Bestimmen, ob die Vorhersage der Verzweigung richtig ist;
- (IX) Anzeigen als Reaktion auf die Vorhersage und die Bestätigung der Vorhersage zum Erzeugen eines zweiten Flag (inst_pred) für jeden Befehl, daß ein zugehöriger Befehl an eine zugehörige Funktions einheit (4a, 4b, 6, 7) abzugeben ist in einer Zeitdauer, nachdem die Vorhersage einer Verzwei gung gemacht worden ist vor der Bestimmung der Vorhersagenbestätigung;
- (X) Erzeugen eines dritten Flag (inst_avail) für jeden Befehl, der anzeigt, daß ein zugehöriger Befehl gültig ist, um in einer Funktionseinheit (4a, 4b, 6, 7) ausgeführt zu werden, wobei der zweite und dritte Flag und der zugehörige Befehl in eine zu gehörige Funktionseinheit in verbundener Weise ausgegeben werden;
- (XI) Steuern als Reaktion auf das Resultat der Vorher sagebestätigung eines Wertes des zweiten und drit ten Flags (inst_pred, inst_avail), die in eine Funktionseinheit (4a, 4b, 6, 7) ausgegeben sind, so daß nur der zweite (inst_pred) Flag anzeigt, ob das Resultat der Vorhersagenbestätigung anzeigt, daß die Vorhersage der Verzweigung richtig ist, während zweiter und dritter Flag nicht aktiv für einen Befehl gemacht werden, dessen zweiter Flag (inst_pred) aktiv ist, wenn die Vorhersagenbestä tigung anzeigt, daß die Vorhersage falsch ist.
14. Verfahren nach einem der Ansprüche 9 bis 13, bei dem die
Verarbeitungseinheit weiter ein Registerfile (69) mit einer
Mehrzahl von Registern aufweist, wobei das Verfahren weiter
die Schritte aufweist:
- (XII) Erfassen eines Befehles, der Schreiben von Daten in ein Register des Registerfiles (69) benötigt, in den ausgelesenen Befehlen;
- (XIII) Setzen eines vierten Flag (RF_lkf) in Abhängigkeit von der Erfassung, daß ein Befehl Datenschreiben benötigt, der anzeigt, daß ein zugehöriges Regi ster (141) dem Datenschreiben unterliegt, wobei das vierte Flag für die entsprechenden Register vorgesehen wird;
- (XIV) Anzeigen als Reaktion auf das vorhergesagte Resul tat zum Setzen eines fünften Flag (RF_lkf_pred), daß der Befehl, der das Schreiben von Daten benö tigt, ein Befehl ist, der ausgegeben ist, nachdem die Vorhersage der Verzweigung gemacht ist, bevor die Vorhersage bestimmt ist, ob sie richtig oder nicht richtig ist, wobei der fünfte Flag für die entsprechenden Register (142) vorgesehen wird; und
- (XV) Steuern als Reaktion auf das Erfassen des Befeh les, der Datenschreiben nötig macht, und des Re sultates der Vorhersage der Verzweigung des vier ten und fünften Flag so, daß alle fünften Flag nicht aktiv gemacht werden, wenn die Vorhersage als richtig bestimmt wird, während die vierte Flag nicht aktiv gemacht wird für ein Register, wobei der fünfte Flag aktiv ist, wenn die Vorhersage als falsch bestimmt wird, wobei ein aktiver fünfter Flag anzeigt, daß der Inhalt eines zugehörigen Re gisters nicht verfügbar ist.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP17220391A JP2875909B2 (ja) | 1991-07-12 | 1991-07-12 | 並列演算処理装置 |
DE19924222776 DE4222776C2 (de) | 1991-07-12 | 1992-07-10 | Parallelverarbeitungseinheit und Verfahren zum Ausführen von Befehlen |
Publications (1)
Publication Number | Publication Date |
---|---|
DE4244924C2 true DE4244924C2 (de) | 1999-02-11 |
Family
ID=25916493
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE4244924A Expired - Fee Related DE4244924C2 (de) | 1991-07-12 | 1992-07-10 | Parallelverarbeitungseinheit und Verfahren dafür |
Country Status (1)
Country | Link |
---|---|
DE (1) | DE4244924C2 (de) |
-
1992
- 1992-07-10 DE DE4244924A patent/DE4244924C2/de not_active Expired - Fee Related
Non-Patent Citations (1)
Title |
---|
SOHI, G.S.: Instruction Issue Logic for High- Performance, Interruptible, Multiple Functional Unit, Pipelined Computers. In: IEEE Transactions on Computers, Vol. 39, No. 3, 1990, S. 349-359 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE4222776A1 (de) | Verfahren und anordnung fuer eine verzweigungsbefehlsverarbeitung in einer parallelverarbeitungseinheit | |
DE69031991T2 (de) | Verfahren und Gerät zur Beschleunigung von Verzweigungsbefehlen | |
DE69133302T2 (de) | Registerabbildung in einem einzigen Taktzyklus | |
DE69325086T2 (de) | Verfahren und System für spekulative Befehlsausführung | |
DE19983860B4 (de) | Ein Verfahren und eine Einrichtung zur verbesserten Prädikatvorhersage | |
DE69028138T2 (de) | Mechanismus zur präzisen Behandlung von Ausnahmebedingungen in einem Prozessor mit gepaarten Befehlen | |
DE10084556B4 (de) | Optimierte Ausführung von statisch sehr wahrscheinlich vorhergesagten Verzweigungsbefehlen | |
DE69534113T2 (de) | Kompression der Befehlswörter eines Rechners | |
DE69805275T2 (de) | Verfahren und Anordnung zur Reduzierung von Störungen in einer Verzweigungsgeschichtstabelle eines Mikroprozessors | |
DE69132675T2 (de) | Parallelfliessband-Befehlsverarbeitungssystem für sehr lange Befehlswörter | |
DE68928677T2 (de) | Verfahren und digitaler Computer zur Vorverarbeitung mehrerer Befehle | |
DE3650232T2 (de) | Rechnersteuerung mit Verzweigung in einem einzigen Zyklus. | |
DE69719235T2 (de) | Prozessor und Verfahren zur spekulativen Ausführung von bedingten Verzweigungsbefehlen unter Verwendung einer von mehreren Verzweigungsvorhersageverfahren | |
DE3116100C2 (de) | Datenverarbeitungseinheit | |
DE69130858T2 (de) | Überlappende Serienverarbeitung | |
DE69534148T2 (de) | Rechnersystem zur Ausführung von Verzweigungsbefehlen | |
DE69623146T2 (de) | Verfahren und Vorrichtung zum Koordinieren der Benutzung von physikalischen Registern in einem Mikroprozessor | |
DE69030931T2 (de) | Mehrfachsequenzprozessorsystem | |
DE69418146T2 (de) | Temporärer Registersatz für einen superpipeline-superskalaren Prozessor | |
DE2855106A1 (de) | Einrichtung zur durchfuehrung von instruktionsverzweigungen | |
DE102004013676A1 (de) | Schleifenbetrieb mit null Overhead in einem Mikroprozessor mit Anweisungspuffer | |
DE19855806A1 (de) | Vorrichtung und Verfahren zum Durchführen von Unterprogrammaufruf- und Rücksprungoperationen | |
DE68924400T2 (de) | Fliessbanddatenverarbeitungsvorrichtung. | |
DE3854142T2 (de) | Vektorrechner. | |
DE69429762T2 (de) | Verfahren und Vorrichtung zur Befehlsteuerung in einem Pipelineprozessor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
Q172 | Divided out of (supplement): |
Ref country code: DE Ref document number: 4222776 |
|
8110 | Request for examination paragraph 44 | ||
AC | Divided out of |
Ref country code: DE Ref document number: 4222776 Format of ref document f/p: P |
|
AC | Divided out of |
Ref country code: DE Ref document number: 4222776 Format of ref document f/p: P |
|
D2 | Grant after examination | ||
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |