-
TECHNISCHES
GEBIET
-
Diese
Erfindung betrifft Computersysteme und insbesondere eine Einrichtung
zum Verarbeiten von Anweisungen in einem Computersystem.
-
TECHNOLOGISCHER
HINTERGRUND
-
In
einem typischen Computersystem werden Anweisungen von einem Anweisungsspeicher
geholt, in einem Puffer gespeichert und dann zur Ausführung durch
eine oder mehrere zentrale Verarbeitungseinheiten (CPU) ausgegeben. 10A bis 10C zeigen
ein konventionelles System, wobei bis zu vier Anweisungen gleichzeitig
ausgeführt
werden können.
Angenommen, die Anweisungen sind alphabethisch in einer Programmfolge
aufgelistet. Wie in 10A gezeigt enthält ein Anweisungspuffer 10 eine
Vielzahl von Zeilen 14A–C von
Anweisungen, wobei jede Zeile vier Anweisungen enthält. Die
im Puffer 10 gespeicherten Anweisungen werden in ein Ausgaberegister 18 geladen,
das vier Register 22A–D umfasst,
bevor sie zur Ausführung ausgegeben
werden. Wenn vier Anweisungen gleichzeitig von dem Ausgaberegister 18 ausgegeben
werden, dann können
vier neue Anweisungen von dem Puffer 10 in das Ausgaberegister 18 geladen
werden und der Prozess wird fortgesetzt. Jedoch können manchmal
keine vier Anweisungen gleichzeitig ausgegeben werden, aufgrund
von Ressourcen-Konkurrenz
oder anderen Schwierigkeiten. 10B zeigt
die Situation, in welcher nur zwei Anweisungen (A, B) gleichzeitig
ausgegeben werden können.
In bekannten Rechensystemen muss das System warten, bis das Ausgaberegister 18 vollständig leer
ist, bevor irgendwelche ferneren Anweisungen von dem Puffer 10 in
das Ausgaberegister 18 übermittelt
werden können,
um Einschränkungen
von Code-Ausrichtung und die Art der Anweisungen, die jederzeit
geladen werden können, unterzubringen.
Folglich können im
vorliegenden Beispiel höchstens
zwei Anweisungen (C, D) während
des nächsten
Zyklus (10C) ausgegeben werden und dann
kann das Ausgaberegister 18 neu geladen werden (mit Anweisungen
E, F, G und H). Die Einschränkung
bezüglich
des Ladens neuer Anweisungen in das Ausgaberegister 18 kann
die Systembandbreite signifikant verschlechtern, insbesondere wenn
einige der neuen Anweisungen (z. B. E und F) gleichzeitig ausgegeben
worden sein könnten,
wie die in dem Ausgaberegister verbleibenden Anweisungen (C, D),
wenn sie unmittelbar geladen worden wären, nachdem der vorangegangene
Satz von Anweisungen (A, B) ausgegeben wurde.
-
Eine
andere Einschränkung
bekannter Rechensysteme kann in der Weise der Behandlung von Abzweigungsanweisungen
gefunden werden, wo die Verarbeitung bei einer von der Anweisung,
die sequenziell der Abzweigungsanweisung in dem Anweisungsspeicher
folgt, abweichenden Anweisung fortgesetzt wird. Im typischen Fall
werden Anweisungen sequenziell unter Verwendung einer mehrstufigen
Pipeline (Reihenanordnung) geholt und ausgeführt. Demnach folgt gewöhnlich einer
Abzweigungsanweisung in der Pipeline eine Anweisung, die ihr sequenziell
im Anweisungsspeicher folgt. Wenn die Abzweigungsbedingung aufgelöst ist, üblicherweise
zu irgendeinem späteren
Zeitpunkt in der Gesamt-Pipeline, muss das Ausführen der Anweisung angehalten
werden, die Anweisung, welche der Abzweigungsanweisung folgt, muss
aus der Pipeline geräumt werden
und die korrekte Anweisung muss von dem Anweisungsspeicher geholt
werden und verarbeitet vom Beginn der Pipeline an. Demnach wird
eine Menge Zeit verschwendet von der Zeit, zu der die Abzweigungsbedingung
aufgelöst
ist bis die geeignete Anweisung ausgeführt wird.
-
Es
ist ein Ziel der vorliegenden Erfindung, eine Einrichtung zum Verarbeiten
von Anweisungen in einem Rechensystem bereitzustellen, wobei vier
Anweisungen immer verfügbar
sind zur Ausgabe unabhängig davon,
wie viele Anweisungen zuvor ausgegeben worden sind und unbeachtlich
der Code-Ausrichtung oder des Anweisungstyps.
-
OFFENBARUNG
DER ERFINDUNG
-
Gemäß einem
Aspekt der vorliegenden Erfindung wird eine Einrichtung zum Verarbeiten
einer Anweisung in einem Rechnersystem bereitgestellt, umfassend:
erste und zweite Anweisungsspeicherschaltungen, wobei jede Anweisungsspeicherschaltung
N Anweisungen zur parallelen Ausgabe speichert; eine an die erste Anweisungsspeicherschaltung
gekoppelte Anweisungsausgabeschaltung zum Ausgeben von L in der
Anweisungsspeicherschaltung gespeicherten Anweisungen, wobei L kleiner
oder gleich N ist; und eine an die Anweisungsausgabeschaltung und
die ersten und zweiten Anweisungsspeicherschaltungen gekoppelte
Anweisungsladeschaltung zum Laden von L Anweisungen von der zweiten
Anweisungsspeicherschaltung in die erste Anweisungsspeicherschaltung,
nachdem die L Anweisungen von der ersten Anweisungsspeicherschaltung ausgegeben
worden sind und bevor fernere Anweisungen von der ersten Anweisungsspeicherschaltung
ausgegeben werden; wobei die Anweisungsladeschaltung die L Anweisungen
von der zweiten Anweisungsspeicherschaltung in die Positionen lädt, die
zuvor von L Anweisungen belegt waren, welche von der ersten Anweisungsspeicherschaltung
ausgegeben worden sind.
-
Gemäß einem
anderen Aspekt der vorliegenden Erfindung wird eine Einrichtung
zum Verarbeiten von Anweisungen in einem Rechnersystem bereitgestellt,
umfassend eine Anweisungsspeicherschaltung zum Speichern von N Anweisungen
zur parallelen Ausgabe; eine an die Anweisungsspeicherschaltung
gekoppelte Anweisungsausgabeschaltung zum Ausgeben von L in der
Anweisungsspeicherschaltung gespeicherten Anweisungen, wobei L kleiner
oder gleich N ist; eine Anweisungswarteschlange zum Speichern von
M Zeilen von N Anweisungen aus einem Anweisungsspeicher; und eine
an die Anweisungsspeicherschaltung und die Anweisungswarteschlange
gekoppelte Anweisungsladeschaltung zum Laden von L Anweisungen von
der Anweisungswarteschlange in die Anweisungsspeicherschaltung,
nachdem die L Anweisungen von der Anweisungsspeicherschaltung ausgegeben
worden sind und bevor fernere Anweisungen von der Anweisungsspeicherschaltung
ausgegeben werden; wobei die Anweisungsladeschaltung die L Anweisungen
von der Anweisungswarteschlange in die Positionen lädt, die
zuvor von den L Anweisungen belegt waren, welche von der Anweisungsspeicherschaltung
ausgegeben worden sind.
-
Die
Anweisungsausgabeschaltung kann einen Ausgabezeiger (Pointer) umfassen
zum Speichern eines Wertes, der indikativ ist bezüglich eines
Ortes einer nächsten
in der Anweisungsspeicherschaltung auszugebenden Anweisung. Der
Ausgabezeiger kann einen Modulo-N-Zähler umfassen.
-
Die
Anweisungswarteschlange kann einen Warteschlangenzeiger (Pointer)
umfassen zum Speichern eines Wertes, der indikativ ist bezüglich eines
Ortes einer von der Warteschlange in die Anweisungsspeichereinheit
zu ladenden nächsten
Anweisung. Die Anweisungswarteschlange kann ferner einen an den
Warteschlangenzeiger gekoppelten Multiplexer umfassen zum Auswählen von
N Anweisungen aus der Warteschlange und Ausgeben der N ausgewählten Anweisungen
zu der Anweisungsspeicherschaltung. Der Multiplexer kann die N nächsten aufeinanderfolgenden
Anweisungen von dem Warteschlangenzeigerwert auswählen.
-
Die
Einrichtung kann eine Warteschlangenladeschaltung umfassen zum simultanen
Laden von N Anweisungen von dem Anweisungsspeicher in die Anweisungswarteschlange.
Auch kann die Einrichtung einen Taktgeber (Clock) umfassen zum Bereitstellen
periodischer Taktimpulse; und die Warteschlangenladeschaltung kann
auf jeden Taktimpuls hin simultan N Anweisungen von dem Anweisungsspeicher
in eine leere Zeile in der Anweisungswarteschlange laden.
-
Die
Warteschlangenladeschaltung kann eine Ladenverhinderungsschaltung
umfassen zum Verhindern des Ladens von Anweisungen von dem Anweisungsspeicher
in die Anweisungswarteschlange, wenn es keine leere Zeile in der
Warteschlange gibt.
-
Die
Anweisungswarteschlange kann einen Eingabekommunikationspfad einschließen und
ferner eine Warteschlangenumgehungsschaltung umfassen, die an den
Eingabekommunikationspfad gekoppelt ist und an die Anweisungsspeicherschaltung
zum direkten Kommunizieren von Anweisungen von dem Eingabekommunikationspfad
zur Anweisungsspeicherschaltung.
-
In Übereinstimmung
mit der vorliegenden Erfindung werden immer vier Anweisungen zur
Ausgabe verfügbar
gehalten, unabhängig
davon, wie viele Anweisungen zuvor ausgegeben worden sind und unbeachtlich
der Code-Ausrichtung oder des Anweisungstyps.
-
KURZBESCHREIBUNG
DER ZEICHNUNGEN
-
Es
zeigt:
-
1 ein
Blockdiagramm des Holens und Ausgebens von einer Anweisung in einer
speziellen Ausgestaltung eines Rechnersystems gemäß der vorliegenden
Erfindung;
-
2 ein
Blockdiagramm einer speziellen Ausgestaltungsform einer Einrichtung
gemäß der vorliegende
Erfindung zum Holen und Ausgeben von Anweisungen;
-
3 ein
Blockdiagramm des Betriebs des Anweisungswarteschlangenbilders der 3;
-
4 ein
Blockdiagramm einer alternativen Ausführungsform einer Einrichtung
gemäß der vorliegenden
Erfindung zum Holen und Ausgeben von Anweisungen;
-
5 ein
Blockdiagramm einer Einrichtung zum Vorhersagen von Abzweigungen;
-
6 ein
Blockdiagramm eines Eintrags in das in 5 gezeigte
Abzweigungs-Chaches; und
-
7 ein
Blockdiagramm des Hol-Schrittes bzw. Fetch-Schrittes (F) einer Anweisungs-Pipeline;
-
8 ein
Blockdiagramm des Decodier-Schrittes (D) und Adressgenerier-Schrittes
(A) der Anweisungs-Pipeline;
-
9 ein
Blockdiagramm der Ausführungs-(E)
und Zurückschreibe-Stufen
(W) der Pipeline, und
-
10 Blockdiagramme
des Anweisungsholens und Ausgebens in einem bekannten Rechnersystem.
-
BESTE ART
ZUR AUSFÜHRUNG
DER ERFINDUNG
-
1A–D sind
Blockdiagramme zum Zeigen von Anweisungsholen und Ausgeben in einer
speziellen Ausgestaltungsform eines Rechnersystems gemäß der vorliegenden
Erfindung. Wie in dem in 10A–D gezeigten
Beispiel sei angenommen, dass zwei Anweisungen (A, B) anfangs ausgegeben werden.
Jedoch abweichend von dem Beispiel in den 10A-D werden
die beiden ausgegebenen Anweisungen (A, B) unmittelbar ersetzt durch
die nächsten
beiden sequenziellen Anweisungen (E, F), wie in 1B gezeigt.
Demnach sind vier Anweisungen zur Ausgabe im nächsten Taktzyklus verfügbar. Ein
Zeiger 26 wird verwendet, um nachzuverfolgen, welche Anweisung den
zuvor ausgegebenen Anweisungen in der Programmabfolge folgt. Wenn
drei Anweisungen im nächsten
Taktzyklus ausgegeben werden, wie in 1C gezeigt,
dann kann die durch den Zeiger 26 angezeigte Anweisung
gemeinsam mit den beiden sequenziell folgenden Anweisungen durch
Zulassen der geeigneten Register 22A, 22C und 22D freigegeben
werden. Unmittelbar danach wird das Ausgaberegister 18 mit
den nächsten
drei Anweisungen in der Programmfolge von dem Anweisungspuffer 10 geladen.
-
An
diesem Punkt sollte bemerkt werden, dass zwei Zeilen in dem Anweisungspuffer
gegebenenfalls die in das Ausgaberegister 18 geladenen
Anweisungen zuführen
müssen.
Beispielsweise führt
die Zeile 14C Anweisungen (G, H) zu und die Zeile 14B führt eine
Anweisung (I) zu dem Ausgaberegister 18 in 1C zu. Vier
Anweisungen pro Zeile annehmend, kann die Zeile, die die nächste sequenzielle
Programmanweisung, die in das Ausgaberegister 18 zu laden
ist, enthält
mit dem Begriff "Leading-Quad" (führender
Vierer) bezeichnet werden und irgendeine nächste fernere Zeile, die simultan
Anweisungen zu dem Ausgaberegister 18 zuführt, um
die Auffülloperation
abzuschließen,
kann bezeichnet werden mit "Trailing-Quad" (nachfolgender bzw. hinterer
Vierer). Wenn der führende
Vierer durch die Auffülloperation
geleert wird, dann kann der Inhalt des Puffers weitergeführt werden
um eine Zeile, wie in 1D gezeigt. In 1D werden
zwei weitere Anweisungen (F, G) ausgegeben und zwei Anweisungen
(J,K) werden an deren Stelle geladen.
-
2 ist
ein Blockdiagramm einer speziellen Ausgestaltungsform einer Einrichtung 30 zum
Holen und Ausgeben von Anweisungen gemäß der vorliegenden Erfindung.
Die Einrichtung 30 schließt ein Anweisungs-Cache 34 ein,
welches eine Vielzahl von Zeilen von Anweisungen speichert, die
adressiert werden können
durch einen Adresswert, der auf einem Kommunikationspfad 38 empfangen
wird. In dieser Ausgestaltungsform speichert jede Zeile vier 32-Bit-Anweisungen und kommuniziert
alle Anweisungen in einer Zeile zu einer Vordecodierschaltung 42 über einen
Kommunikationspfad 46. Die Vordecodierschaltung decodiert
die vier Anweisungen partiell und kommuniziert die vier partiell
decodierten Anweisungen zu einem Anweisungswarteschlangenbilder 50 über einen
Kommunikationspfad 54 und zu Ausgabemultiplexern 58A–D über einen Warteschlangenumgehungspfad 62.
-
Der
Anweisungswarteschlangenbilder 50 schließt vier
Warteschlangenabschnitte 66A–D ein, einen für jede Anweisung
in jeder Zeile. Alle vier Warteschlangenabschnitte haben denselben
Aufbau, so dass nur die Details des Warteschlangenabschnittes 66A beschrieben
werden. Der Warteschlangenabschnitt 66A schließt eine
Vielzahl, z. B. sechs seriell verbundene Anweisungspuffer IBUFO-IBUF5
ein. Jeder Anweisungspuffer ist an einen Multiplexer 68 durch
einen entsprechenden Multiplexereingangspfad 70A–F gekoppelt.
Der Multiplexer 68 wählt
eine der Anweisungen aus den Anweisungspuffern IBUFO-IBUF5 ansprechend
auf über
eine Leitung 72A empfangene Signale und kommuniziert die
ausgewählte
Anweisung zu einem Ausgabemultiplexer 58A über einen
Kommunikationspfad 74A. Die momentane Anweisung in dem
Register 22A wird auch zu dem Eingang des Ausgabemultiplexers 58A über einen
Rückführungskommunikationspfad 76D kommuniziert.
Der Ausgabemultiplexer 58A wählt demnach aus der Ausgabe
des Multiplexers 68, dem Warteschlangenumgehungspfad 62 oder
dem Rückmeldungskommunikationspf
ad 76A ansprechend auf über
eine QOMXSEL-Leitung 80A empfangene Signale aus zum Kommunizieren
einer Anweisung zu dem Register 22A über einen Kommunikationspfad 82A.
Das Register 22A lädt
dann den empfangenen wert ansprechend auf an das Register angelegte
Taktsignale aus (getaktete Register werden durch das winklige Symbol
auf der linken Seite jedes Registers gekennzeichnet), und gibt dann
die Anweisung, wenn möglich,
aus.
-
Warteschlangenabschnitte 66B–D wählen auch
Anweisungen innerhalb eines ihrer seriell verbundenen Pufferabschnitte
als Reaktion auf Signale aus, die über Leitungen 72B–D jeweils empfangen
worden sind und kommunizieren die ausgewählten Anweisungen zu Ausgabemultiplexern 58B–D über jeweilige
Kommunikationspfade 74B–D.
Ausgabemultiplexer 58B–D kommunizieren
Anweisungen, die von über
QIMXSEL-Q3MXSEL-Leitungn
empfangene Signale ausgewählt
worden sind an ihre jeweiligen Register 22B–D über Kommunikationspfade 82B–D.
-
Eine
Einrichtung 30 wählt
in folgender Weise aus, welche Anweisungen dem Ausgaberegister 18 zu präsentieren
sind. Das erste Mal, wenn eine Zeile von Anweisungen von dem Anweisungs-Cache 34 geholt worden
ist, ist der Anweisungswarteschlangenbilder 50 leer und
Multiplexer 58A–D wählen die
Anweisungen aus dem Warteschlangenumgehungspfad 62 aus.
Anweisungen werden dann ausgegeben und eine neue Zeile von Anweisungen
werden von dem Anweisungs-Cache 34 gelesen.
-
Im
Allgemeinen wird eine neue Zeile von Anweisungen von dem Anweisungs-Cache 34 mit
jedem Taktzyklus gelesen. Wenn vier Anweisungen mit jedem Taktzyklus
ausgegeben würden,
würde das
Ausgaberegister jedes Mal von dem Warteschlangenumgehungspfad 62 geladen
werden. Jedoch werden zu jedem Taktzyklus jedes Mal zwischen null
und vier Anweisungen ausgegeben. Wenn demnach nicht alle Anweisungen
ausgegeben werden, werden dann nur gewisse der Register 22A–D von
dem Warteschlangenumgehungspfad 62 geladen entsprechend
der Anzahl von ausgegebenen Anweisungen. Die zuvor gelesene Anweisungszeile
wird dann in jedem Warteschlangenabschnitt 66A–D in
IBUFO geladen und die neue Zeile von Anweisungen wird von dem Anweisungs-Cache 34 gelesen.
Daraufhin werden Anweisungen von IBUFO von dem Warteschlangenumgehungspfad 62 in
den geeigneten Warteschlangenabschnitt 66A–D geladen. Wenn beispielsweise
zwei Anweisungen in einem ersten Zyklus ausgegeben werden, dann
werden Register 22A–B von
dem Warteschlangenumgehungspfad 62 geladen, Register 22C–D werden
mit denselben Anweisungen über
die Kommunikationspfade 76C–D neu
geladen und die zuvor gelesene Zeile von Anweisungen wird in IBUFO
in Warteschlangenabschnitten 66A–D geladen und eine neue Anweisungszeile
wird von dem Anweisungs-Cache 34 gelesen. Wenn nur eine
Anweisung während
des nächsten
Taktzyklus ausgegeben wird, dann wird das Register 22C von
IBUFO in dem Warteschlangenabschnitt 66C geladen, die Register 22A, 22B und 22D werden
mit derselben Anweisung über
die Kommunikationspfade 76A, 76C und 76D neu
geladen und die Anweisungszeile, die im IBUFO gespeichert ist, in
jedem Warteschlangenabschnitt 66A–D wird weitergeführt zu IBUF1
in jedem Warteschlangenabschnitt, die zuvor gelesene Anweisungszeile
wird in IBUFO Warteschlangenabschnitten 66A–D geladen und eine neue
Zeile wird von dem Anweisungs-Cache 34 gelesen. Die Anweisungszeilen
werden innerhalb der Warteschlangenabschnitte 66A–D fortgeführt bis
der Puffer voll ist. Zu diesem Zeitpunkt blockiert die Einrichtung
ein ferneres Laden von Anweisungszeilen in die Warteschlange. Diese
Betriebsart ermöglicht
es, dass die Anweisungsvoreinholoperation entkoppelt ist von der
Ausgabeoperation.
-
Ein
RDPTR-Register 86 speichert einen Wert I-STATE[4:0] zum
Steuern des Betriebs des Anweisungswarteschlangenbilders 50.
STATE[4:2] wird verwendet zum Bestimmen, welcher Puffer IBUFO-IBUF5 in dem jeweiligen
Warteschlangenabschnitt 66A–D die
nächste
Anweisung zu Registern 22A–D zur
Verfügung stellt
und STATE[1:0] arbeitet als Zeiger 26 in 1A–C (ein
Modulo-4-Zähler) zum
Angeben, welche Anweisung als nächstes
auszugeben ist. Ein F-INST-Register 90 speichert einen
INST-CONSUME-Wert,
der angibt, wie viele Anweisungen im jeweiligen Zyklus verbraucht
werden (d.h. die Summe von Warteschlangenbilderregistertaktfreigaben
oder die Gesamtzahl von von dem Ausgaberegister 18 ausgegebenen
Anweisungen, egal ob gültig
oder nicht). Der INST-CONSUME-Wert (Anweisungsverbrauchswert) wird
in Verbindung mit 8 diskutiert. Der INST-CONSUME-Wert
wird zu STATE[4:0] durch einen Addierer 92 hinzugefügt, um auf die
nächste
auszugebende Anweisung zu zeigen. STATE[4:2] wird jedes Mal inkrementiert,
wenn die momentane Anweisungszeile, die zum Laden des Ausgaberegisters 18 verwendet
wird, fortgeführt
wird in der Warteschlange. Der Aktualisierungswert von STATE[4:0]
wird zurückgeladen
in das RDPTR-Register 86 und zu einer Warteschlangenbilder-Multiplex-Auswahlschaltung 98 über Kommunikationspfade 99A und 99B kommuniziert.
Wenn STATE[4:2]="101" (=5) gilt, ist der
Anweisungspuffer voll und die Einrichtung blockiert ein ferneres Laden
von Anweisungszeilen in die Warteschlange.
-
Die
Warteschlangen-Multiplex-Auswahlschaltung 98 präsentiert
die nächsten
vier sequenziellen Anweisungen (in Programmreihenfolge) zum Ausgaberegister 18 in Übereinstimmung
mit den Werten von STATE[4:2] und STATE[1:0]. 3 und
Tabelle 1 zeigen, welcher Puffer in welchem Warteschlangenabschnitt 66A–D die
nächste
Anweisung zu seinem entsprechenden Register 22A–D im
Ausgaberegister 18 zuführt
für die
unterschiedlichen Werte von STATE[1:0].
-
-
Wenn
demnach STATE[4:2]=2 gilt und STATE[4:2]=3, dann werden den Registern 22C und 22D die letzten
beiden Anweisungen in dem führenden
Vierer (Vierergruppe IBUF3) und den Registern 22A und 22B werden
die ersten beiden Anweisungen in dem hinteren Vierer (IBUF2) präsentiert.
-
Die
beschriebene Einrichtung zum Holen und Ausgeben von Anweisungen
kann in vielen Umgebungen mit oder ohne Modifikation verwendet werden.
Beispielsweise angenommen, ganzzahlige, Speicher- und Fließkommaanweisungen
sind in einem Anweisungs-Cache 34 gespeichert und sie können gemischt
werden innerhalb einer Anweisungszeile. Wenn es ein Problem gibt
mit Ressourcenwettbewerb und Datenabhängigkeiten mit einer Anweisung
oder einem Anweisungstyp (z. B. Fließkommaanweisungen), dann können jene Anweisungen
in eine andere Warteschlange ausgegeben werden, in welcher sie warten
können
auf das Klären der
Ressourcenwettbewerbssituation bzw. der Datenabhängigkeiten, ohne die Ausgabe
der anderen Anweisungen aufzuhalten.
-
4 ist
ein Blockdiagramm einer alternativen Ausgestaltungsform einer Einrichtung 104 gemäß der vorliegenden
Erfindung zum Holen und Ausgeben von Gleitkommaanweisungen, die
zuvor von einem Ausgaberegister 18 in 4 ausgegeben
worden sein können.
Beim Betrachten wird ersichtlich, dass die Einrichtung 104 weitgehend ähnlich der
Einrichtung 30 in 2 arbeitet,
mit der Ausnahme, dass die Einrichtung 104 auch im Bezug
auf das Speichern von Daten gemeinsam mit den Anweisungen bereitsteht
zum Behandeln von ganzzahligen Speicheroperationsdaten oder Gleitkommaregisterdaten,
die von dem ganzzahligen Register zu laden sind.
-
Die
zuvor beschriebene Einrichtung erleichtert auch die Verarbeitung
von Anweisungen in einem Rechnersystem, wobei Abzweigungen zur Zeit
des Anweisungsholens vorhergesagt sind und wobei die vorhergesagte
Zielanweisung unmittelbar geholt wird derart, dass die Zielanweisung
unmittelbar nachdem die Abzweigungsanweisung ausgeführt worden
ist, zur Ausführung
verfügbar
ist. 5 ist ein Blockdiagramm einer Einrichtung 110 zum
Vorhersagen von Abzweigungen. Ein Abzweigungsvorhersage-Cache 114 wird
verwendet zum Vorhersagen des Ergebnisses von in einem Anweisungs-Cache 34 gespeichert
Abzweigungsanweisungen. Beispielsweise kann der Anweisungs-Cache 34 ein
16kB-direktabgebildeter fache sein, welcher vier Anweisungen pro
Zyklus ausgibt, wie oben erwähnt.
In dieser Einrichtung ist auch ein Abzweigungsvorhersage-Cache 114 direkt
abgebildet und kann 1k-Einträge
enthalten (einen Eintrag pro vier Anweisungen im Anweisungs-Cache 34).
Auf den Anweisungs-Cache 34 und im Abzweigungs-Cache 114 wird
parallel in der Hol-Stufe der Pipeline durch den Kommunikationspfad 38 zugegriffen,
welcher einen Indexwert (Adresswert) von einem Zähler 116 empfängt. Selbstverständlich könnten der
Anweisungs-Cache 34 und der Abzweigungsvorhersage-Cache 114 auf
Wunsch mit unterschiedlichen Adressen bezugrifft werden.
-
6 zeigt
einen Beispielseintrag 120 von dem Abzweigungsvorhersage-Cache 114 und
ein Beispiel der Abzweigungsvorhersage. Ein Eintrag 120 schließt ein Gültig-Feld 124 (Valid)
zum Vorhersagen ein, ob die Abzweigung genommen wird (0=nicht vorhergesagt;
1=vorhergesagt), ein Indexfeld 128, welches der Anweisungs-Cache-Index
der Abzweigungszielanweisung ist, ein Quellefeld (SRC) 132,
welches die Position der letzten innerhalb der die Abzweigungsanweisung
enthaltenden Zeile auszuführende
Anweisung enthält,
und ein Zielfeld (DST) 134, welches die Position der Abzweigungszielanweisung
innerhalb der von dem Cache-Index geholten Zeile anzeigt.
-
In
dieser Einrichtung umfasst jede Abzweigungsanweisung tatsächlich zwei
Anweisungen. Die erste Anweisung, die als Anfangsabzweigungsanweisung
bezeichnet wird, berechnet das Abzweigungsziel und die Abzweigungsbedingung.
Die zweite Anweisung, die als Verzögerungsanweisung bezeichnet
wird, folgt unmittelbar der Anfangsabzweigungsanweisung und wird
verwendet zum tatsächlichen Ändern des
Programmablaufs zu der Abzweigungszielanweisung. Folglich zeigt
das Quellenfeld 132 üblicherweise
die Position der Verzögerungsanweisung
innerhalb der Anweisungszeile an, wie in 6 gezeigt.
-
Der
Adresswert im Zähler 116 wird
zu einer Inkrementierschaltung 138 kommuniziert, welche
den Zählwert
um vier inkrementiert (da es vier Anweisungen pro Zeile gibt) und
den inkrementierten Wert zu einem Multiplexer 142 durch
einen Kommunikationspfad 144 kommuniziert. Zusätzlich wird
der Wert. in dem Indexfeld 128 des Abzweigungs-Cache-Eintrags
zu dem Multiplexer 142 über
einen Kommunikationspfad 148 kommuniziert. Der Wert in
dem Gültig-Feld 124 kann
verwendet werden zum Steuern der Operation des Multiplexers 142.
Wenn demnach die Abzweigung vorhergesagt wird (V=1), wird dann der
Anweisungs-Cache 34 adressiert werden mit dem Wert von
dem Indexfeld 128 im nächsten
Zyklus. Wenn die Abzweigung nicht vorhergesagt wird (V=0), dann
wird der Anweisungs-Cache 134 mit der nächsten sequenziellen Zeile
der Anweisungen adressiert werden, wie von der Inkrementierschaltung 138 bestimmt.
-
Der
Wert im Quellenfeld 132 wird zu einer Gültig-Maske 18 durch
eine ODER-Schaltung 150 kommuniziert. Wenn die Abzweigung
vorhergesagt wird, macht die Gültig-Maske 148 alle
Anweisungen in der momentanen Zeile, welche nach der Verzögerungsanweisung,
die der Abzweigung zugeordnet ist, auftreten, ungültig, da
sie nicht ausgeführt
werden würden,
wenn die Abzweigung genommen würde.
Beispielsweise, wenn die Verzögerungsanweisung
die dritte Anweisung in der Zeile ist, wie in 6 gezeigt,
dann wird die vierte Anweisung ungültig gemacht. Während des
nächsten
Taktzyklus wird die Zeile (einschließlich irgendwelcher ungültig gemachter
Anweisungen) zu dem Anweisungswarteschlangenbilder 50 kommuniziert
und dem Warteschlangenumgehungspfad 62 (2);
der Wert des Zielfeldes wird in ein Register 152 geladen,
der Wert des Zählers 116 wird
mit dem Wert von dem Indexfeld 128 geladen und der Anweisungs-Cache 34 wird
adressiert zum Holen der Zeile, die die vorhergesagte Abzweigungszielanweisung
enthält.
Das Zielfeld im Register 152 wird dann zu einer Gültig-Maske 148 durch
eine ODER-Schaltung 150 kommuniziert, um die Anweisungen
ungültig
zu machen, die auftreten, bevor die vor der Abzweigungszielanweisung
in der Zeile auftreten. Wenn beispielsweise die Abzweigungszielanweisung
die zweite Anweisung in der Zeile ist, dann macht die Gültig-Maske 148 die
erste Anweisung in der Zeile ungültig.
Die Zeile wird dann zu dem Anweisungswarteschlangenbilder 50 und
dem Warteschlangenumgehungspfad 62 kommuniziert.
-
In
dieser Einrichtung werden alle Abzweigungsvorhersage-Cache-Einträge mit einem
Gültig-Wert
von Null initialisiert (Abzweigung nicht vorhergesagt). Wenn das
Programm zum ersten Mal ausgeführt
wird, wird das Ergebnis jeder Abzweigungsanweisung verwendet zum
Aktualisieren des Abzweigungsvorhersage-Cache-Eintrags (wenn erforderlich)
durch Einstellen des Gültig-Bits
auf Eins und durch Einfügen
des geeigneten Index-, Quellen- und Zielwertes. Abzweigungsvorhersage
kann demnach daraufhin auftreten. Wenn eine entsprechend zuvor genommene
Abzweigung nicht zu einem späteren
Zeitpunkt genommen wird, oder wenn eine zuvor nicht genommene Abzweigung
zu einem späteren
Zeitpunkt genommen wird, dann wird der Abzweigungs-Cache-Eintrag
aktualisiert (und die korrekte Anweisung geholt) (wie unten diskutiert).
-
Zusätzlich pausiert
(hält)
das Ausgaberegister 18 die Superskalar-Anweisungen, welche
nach der Verzögerungsanweisung
einer vorhergesagten Abzweigung im Dispatch-Register 18 auftreten
zum Vermeiden des Vermischens von Zielanweisungen mit einer momentanen
Abzweigungsanweisung. Zudem pausiert (hält) das Ausgaberegister die
Superskalar-Anweisungen an der zweiten Abzweigung, wenn zwei Abzweigungen
in dem Ausgaberegister 18 gespeichert sind, so dass nur
eine Abzweigung gleichzeitig auszuführen ermöglicht wird.
-
7–9 sind
Blockdiagramme von Abschnitten einer Anweisungs-Pipeline, die zeigt, wie Abzweigungsvorhersage
arbeitet. Womöglich
sind Bezugszeichen beibehalten worden von vorangegangenen Figuren.
Ein Anweisungs-Cache 34 kann einen Anweisungsspeicher umfassen
und einen Etiketten- bzw. Tag-Speicher,
wie im Stand der Technik wohlbekannt ist. Der Anweisungsspeicherabschnitt
kann die Anweisungszeilen enthalten und der Etikettenspeicher kann
die virtuellen Adress-Tags (und Steuerinformation) enthalten, die
jeder Zeile im Anweisungsspeicher zugeordnet sind. Für die vorliegende
Diskussion ist nur der Tag-Speicherabschnitt 34A des Anweisungs-Cache 34 dargestellt.
Der Tag-Speicher 34A schließt ein anwendungsspezifisches
Indikationsfeld (asid[7:0]) ein, den Anweisungs-Cache-Tag bzw. das
Anweisungs-Cache-Etikett (tag[33:0], die 34 Bits höherer Ordnung
der zugeordneten virtuellen Adresse), ein Gültigkeits-Bit (V) und ein Regionsfeld
(r[1:0]) zum Anzeigen des Adressraums der Anweisung.
-
7 zeigt
die Hol-Stufe (F) der Anweisungs-Pipeline. Zähler 116A und 116B sind
die primären Hol-Stufenprogrammzähler, die
den Tag-Speicher 34A und den Abzweigungs-Cache 114 adressieren.
Der Wert im Zähler 116A (fpc[13:4]),
welcher eine Zeile im Tag-Speicher 34A indiziert, wird
zu dem Tag-Speicher 34A und zu der Inkrementierschaltung 138 über einen
Kommunikationspfad 38A kommuniziert. Die Inkrementierschaltung 138 fügt eine
Eins zu dem Zählwert
und kommuniziert den inkrementierten Wert zu dem Multiplexer 142A und
dem Multiplexer 142B über
den Kommunikationspfad 144. Die Multiplexer 142A und 142B empfangen
auch das Indexfeld von dem Abzweigungs-Cache 114 über den
Kommunikationspfad 148 und eine Korrekturadresse (unten
beschrieben) über
einen Kommunikationspfad 160. Der Wert auf dem Kommunikationspfad 160 (pc
jam-bus[13:2]} wird verwendet zum Korrigieren von Abzweigungsfehlvorhersage,
Cache-Verlusten, etc. Der Multiplexer 142B empfängt auch
eine Abzweigungs-Cache-Schreibadresse
(bcwadr[13:4]) zum Aktualisieren des Abzweigungs-Cache. Die zum
Aktualisieren des Abzweigungsvorhersage-Cache 114 verwendeten
Daten (bc wdata[14:0]) werden zu einem Register 164 über einen
Kommunikationspfad 168 kommuniziert. Multiplexer 142A und 142B wählen die
geeignete Adresse aus und kommunizieren sie jeweils zu Zählern 116A und 116B.
-
Ein
Register 172 speichert ein Parallellade-Bit (f pld), das
anzeigt, ob Zähler 116A–B mit
dem inkrementierten Wert von der Inkrementierschaltung 138 geladen
worden sind, oder ob Zähler
116A-B von entweder dem Kommunikationspfad 148 oder dem
Kommunikationspfad 160 geladen worden sind, und ein Register 176 speichert
einen Wert (fpc [3:2]) entsprechend dem Zielfeld eines Abzweigungsvorhersage-Cache-Eintrags (Bits
(4:3) der bc-Daten
(14:3) auf dem Kommunikationspfad 148). Die Werte
in Registern 116A, 172 und 176 werden
kombiniert mit der Ausgabe des Tag-Speichers 34A und in
einem Warteschlangenregister TBUF0 gespeichert, welches eines von
sechs Registern (TBUF0-TBUF5)
ist, die verwendet werden zum Speichern von Tag-Daten, um den sechs
Anweisungspuffern IBUF0-IBUF5 in dem Anweisungswarteschlangenbilder 50 zu entsprechen.
Jedes Register TBUF0-TBUF5 ist mit Multiplexern 180 und 184 gekoppelt,
welche die Register auswählen,
die jeweils dem führenden
Vierer und dem hinteren Vierer im Anweisungswarteschlangenbilder 50 entsprechen.
Die Tag-Speicherinformation
des führenden
Vierers wird zu der nächsten
Stufe in der Pipeline über
einen Kommunikationspfad 188 kommuniziert und die Tag-Speicherinformation
des hinteren Vierers wird zu der nächsten Stufe in der Pipeline über einen
Kommunikationspfad 190 kommuniziert.
-
8 zeigt
die Decodier-Stufen bzw. D-Stufen und die Adressgenerier-Stufen
bzw. A-Stufen der Anweisungs-Pipeline. In der D-Stufe werden Bits
[56:2] der Information des führenden
Vierers von dem Tag-Speicher 34A in einem DLTAG-Register 200 gespeichert
und Information des hinteren Vierers von dem Tag-Speicher 34A wird
in einem DTTAG-Register 204 gespeichert. Das Bestimmungsortfeld
des Abzweigungsvorhersage-Cache-Eintrags
(fpc[3:2]), das, falls vorhanden, der Information des führenden
Vierers zugeordnet ist, wird zu einem Multiplexer 208 kommuniziert.
Der andere Eingang zum Multiplexer 208 ist gekoppelt mit
einem Ausgangskommunikationspfad 210 eines Addierers 214,
der den Zeigerwert der Position der nächsten sequenziellen Anweisung
enthält,
die während
des normalen sequenziellen Ausführens
auszugeben ist. Der Multiplexer 208 wählt entweder den Bestimmungsortwert
oder den nächsten
sequenziellen Anweisungswert aus und kommuniziert den ausgewählten Wert
zu dem Ausgangskommunikationspfad 216 des DLTAG-Registers 200.
Der Kommunikationspfad 216 ist an einen Eingang eines Multiplexers 218 gekoppelt.
-
Die
Tag-Speicherinformation des hinteren Vierers, die in dem DTTAG-Register 204 gespeichert
ist, wird zu dem Multiplexer 218 und zu einer Vergleichsschaltung 220 über einen
Kommunikationspfad 224 kommuniziert. Der Multiplexer 218 wählt die
Tag-Information entsprechend der ersten als nächstes auszuführenden
Anweisung aus und gibt die ausgewählte Information an einen Kommunikationspfad 226 zu
einem ATAG-Register
in einer A-Stufe (Adressgenerierstufe) der Pipeline aus. Der Ausgaberegisterzeigerwert
wird zu dem Addierer 214 über einen Kommunikationspfad 228 kommuniziert,
die Tag-Speicherinformation
wird über
einen Kommunikationspfad 230 zu einer Vergleichsschaltung 220 kommuniziert,
und der Anweisungs-Cache-Index wird zu einer Vergleichsschaltung 234 kommuniziert.
-
Die
Vergleichsschaltung 220 vergleicht das Tag des führenden
Vierers mit dem Tag des hinteren Vierers. Wenn es keine Übereinstimmung
gibt, kommen die Anweisungen des führenden Vierers und die Anweisungen
des hinteren Vierers aus einem unterschiedlichen Zusammenhang, so
dass sie nicht gleichzeitig ausgegeben werden sollten. Ein Signal
wird bereitgestellt auf einem Kommunikationspfad 238, um
die Superskalar-Anweisungen pausieren zu lassen, wenn dies auftritt.
-
Eine
Vergleichsschaltung 234 vergleicht den Anweisungs-Cache-Index mit dem Hexadezimalwert "FFF", um zu bestimmen,
ob das Ende des Anweisungs-Cache adressiert worden ist. Ist dies
der Fall, dann ist es wünschenswert,
die Superskalar-Anweisungen am Ende der Cache-Zeile pausieren zu
lassen, und ein Signal wird zu diesem Zweck auf einem Kommunikationspfad 224 bereitgestellt.
-
Ein
Addierer 214 empfängt
einen Wert, der die Summe gültiger
Anweisungen angibt, die über
einen Kommunikationspfad 250 ausgegeben worden sind, und
dieser Wert wird verwendet zum Inkrementieren des momentanen Ausgaberegisterzeigerwertes,
um den aktualisierten Ausgaberegisterzeigerwert auf einem Kommunikationspfad 214 zu
produzieren.
-
Während der
D-Stufe bzw. Decodier-Stufe, wird das Register 90 (siehe
auch 2) mit dem Wert geladen, der die Anzahl von verbrauchten
Anweisungen (sowohl gültige,
als auch ungültige
Anweisungen) anzeigt, und dieser Wert wird verwendet zum Steuern
des Betriebs des Anweisungswarteschlangenbilders 50, wie
in Verbindung mit 2 diskutiert.
-
Während der
A-Stufe bzw. Adressgenerier-Stufe wird die tatsächliche Abzweigungsadresse
generiert. Da jede Abzweigungsanweisung eine Anfangsabzweigungsanweisung
umfasst, gefolgt von einer Verzögerungsanweisung,
und da die tatsächliche
Abzweigung ausgeführt
wird nach der Verzögerungsanweisung, muss
die Abzweigungszieladresse in Bezug auf die Verzögerungsanweisung berechnet
werden. Entsprechend wird, wenn die Tag-Information, die der die
Abzweigungsanweisung enthaltenden Zeile entspricht, in dem ATAG-Register-224 gespeichert
wird, ein die relative Position der Verzögerungsanweisung angebender Wert
innerhalb der Zeile ausgewählt
durch einen Multiplexer 250 und über einen Kommunikationspfad 258 in einem
RELDLY-Register 254 gespeichert. Der relative Verzögerungswert
wird zu einem Abzweigungszieladdierer 260 über einen
Kommunikationspfad 264 kommuniziert. Der Abzweigungszieladdierer
empfängt
auch den ATAG-Registerwert (welcher die Adresse der ersten Anweisung
in der Zeile ist) (224) über einen Kommunikationspfad 268,
und einen Versatzwert von einem AOFFSET-Register 272 über einen
Kommunikationspfad 276. Das AOFFSET-Register 272 empfängt den
26-Bit-Versatzwerts von der Abzweigungsanweisung über einen
Kommunikationspfad 280 und unterzieht Bits [17:2] des Versatzwert
einer Vorzeichenerweiterungsfunktion in einer Vorzeichenerweiterungsschaltung 284 (wenn
erforderlich) vor dem Weiterleiten des Versatzwertes zu einem Abzweigungszieladdierer 260.
Das AOFFSET-Register 272 kommuniziert auch den 26-Bit-Versatzwert
zu einem Multiplexer 288, welcher auch Bits [27:2] der
Abzweigungszieladresse, die von einem Abzweigungszieladdierer 260 berechnet
worden sind, über
einen Kommunikationspfad 292 empfängt. Der Multiplexer 288 ermöglicht demnach
das Ersetzen von Bits [27:2] der berechneten Abzweigungszieladresse
durch den in dem AOFFSET-Register 272 gespeicherten
Versatzwert.
-
Die
Ausgangsgröße des Abzweigungszieladdierers 260 wird
zu einem Eingang eines Multiplexers 288 kommuniziert. Der
andere Eingang zum Multiplexer 288 ist eine Abzweigungszieladresse
von einer JUMP-Anweisung oder JUMP-REGISTER-Anweisung, die über einen
Kommunikationspfad 296, der an eine Universalregisterdatei
gekoppelt ist, empfangen wird. Demnach wird die ausgewählte Abzweigungszieladresse
von dem Abzweigungszieladdierer 260 ausgegeben (möglicherweise
modifiziert durch den Multiplexer 288), solange nicht die
Abzweigung durch eine JUMP- oder JUMP-REGISTER-Anweisung verursacht
worden ist, in welchem Fall die durch das geeignete Register spezifizierte
Adresse bevorzugt werden wird.
-
Der
Grund für
den spezifischen Aufbau der Abzweigungszieladressberechnungsschaltung
erwächst aus
der Art, in der die Abzweigungszieladressen aus den unterschiedlichen
Arten von Abzweigungsanweisungen berechnet werden, nämlich einer
regulären
Abzweigung, JUMP und JUMP-REGISTER.
Für eine
reguläre Abzweigungsanweisung
werden der relative Verzögerungsregisterwert,
der ATAG-Registerwert, und der Versatzwert zusammenaddiert zum Bilden
der Abzweigungszieladresse; für
eine JUMP-Anweisung werden die ATAG- und REL DLY-Registerwerte addiert
und der Versatzwert wird mit der Summe verknüpft; und für eine JUMP-REGISTER- Anweisung wird der
Registerwert von dem Kommunikationspfad 296 verwendet für die Abzweigungszieladresse.
-
Die
Werte von dem ATAG-Register 227 und dem REL DLY-Register 254 werden
auch zu einem Rücksprungadressenaddierer 300 kommuniziert.
Der Rücksprungadressenaddierer 300 wird
verwendet zum Berechnen der Rücksprungadresse,
wenn eine Abzweigung zu dem Ausführen
einer Subroutine führt.
Nachdem die Subroutine beendet worden ist, ist es wünschenswert,
unmittelbar zu der Anweisung zurückzukehren,
die der Anweisung folgt, welche jene aufgerufen hatte. Demnach addiert
der Rücksprungadressenaddierer 300 +1 zu
der Addition des Tag, Index und der relativen Verzögerung,
um die Adresse der Anweisung zu produzieren, die dem Verzögerungsschlitz
der Abzweigungsanweisung folgt, welche die Subroutine aufgerufen
hat. Die Rücksprungadresse
wird auf einem Kommunikationspfad 304 ausgegeben.
-
9 zeigt
die Ausführungsstufen
bzw. E-Stufen und die Zurückschreibestufen
bzw. W-Stufen der Pipeline. Die Inhalte des ATAG-Registers 227 werden
zu einem ETAG-Register 318 über einen Kommunikationspfad 308 kommuniziert
und zu einer Vergleichsschaltung 341 über einen Kommunikationspfad 309,
die Inhalte des RELDLY-Registers 254 werden zu einem E_REL_DLY-Register 322 über einen
Kommunikationspfad 312 kommuniziert, die berechnete Rücksprungadresse
von dem Rücksprungadressenaddierer 300 wird über ein
Verbindungswertregister (LNVAL)-Register 326 über den
Kommunikationspfad 304 kommuniziert und die ausgewählte Abzweigungszieladresse
von dem Multiplexer 289 wird zu einem BR_TARG-Register 330 über einen
Kommunikationspfad 314 kommuniziert. Ein EPC-Register 334 speichert
die Real-Adresse der Anweisung, das Programm wird überlagert,
um in einer E-Stufe
ausgeführt
zu werden, und ein ASID-Register speichert das programmgesteuerte
ASID der Anweisung, das gemeinsam mit einem Kohärenzwert (c[2:0]) auszuführen ist,
welcher üblicherweise
anzeigt, ob die durch die Anweisung verwendeten Daten cache-fähig sind oder
nicht.
-
Das
ASID und das in dem ETAG-Register 318 gespeicherte Tag
(entsprechend der geholten Anweisung), werden verglichen mit ASID
und Tag von dem ASID-Register 338 und dem EPC-Register 334 (entsprechend
der Anweisung, die tatsächlich
auszuführen
angenommen wird (durch eine Vergleichsschaltung 339 zum
Bestimmen, ob die tatsächliche
Anweisung, die auszuführen
erwartet wird (wo das Programm sein sollte) tatsächlich die von dem Anweisungs-Cache
geholte Anweisung ist. Wenn die Werte nicht übereinstimmen, wird ein Cache-Verlustsignal
bereitgestellt auf einen Kommunikationspfad 340.
-
In
dieser Zeit entspricht der Wert in dem ATAG-Register 227 der
Teile, die die vorhergesagte Abzweigungszielanweisung enthält, wohingegen
der Wert im BR_TARG-Register 330 der tatsächlichen
Abzweigungszieladresse entspricht. Demnach werden der Index und
das Bestimmungsortfeld (vorhergesagte Abzweigungszieladresse), die
von dem ATAG-Register 227 über den Kommunikationspfad 309 empfangen
worden sind, verglichen mit der von dem BT_TARG-Register 330 über einen
Kommunikationspfad 343 empfangenen berechneten Abzweigungszieladresse
durch eine Vergleichsschaltung 341 zum Bestimmen, ob die
tatsächliche
Abzweigungszielanweisung, die auszuführen erwartet wird, der von
dem Anweisungs-Cache geholten Vorhersageabzweigungszielanweisung
entspricht. Wenn die Werte nicht übereinstimmen, wird ein Abzweigungs-Cache-Verlust-Signal (Abzweigungsfehlvorhersage)
auf einem Kommunikationspfad 345 bereitgestellt.
-
Der
Wert im EPC-Register 334 wird zu einem WPC-Register 354 in
der Zurückschreibe-Stufe
der Pipeline kommuniziert und zu einem Eingang eines Multiplexers 362 über einen
Kommunikationspfad 358. Der andere Eingang zu dem Multiplexer 362 empfängt den
Wert im WPC-Register 354 (der Ursprungswert des EPC-Registers 334 verzögert um
einen Zyklus) über
einen Kommunikationspfad 366. Der Multiplexer 350 wählt einen
dieser Werte aus und kommuniziert den ausgewählten Wert zu einem Eingang
eines EPC-Addierers 350. Der EPC-Addierer 350 ist
zuständig
für das
Aktualisieren des wertes von dem EPC-Register 334 während des
Normalbetriebs. Der Wert des EPC-Registers 334 wird
gewöhnlich
ausgewählt
während
des Normalbetriebs und der Wert des WPC-Registers 354 wird
ausgewählt
zum Ausführen
der Verarbeitung.
-
Der
andere Eingang zum EPC-Addierer 350 ist mit einem Multiplexer 366 gekoppelt.
Eine Eingangsgröße des Multiplexers 366 ist
die Zahl der gültigen
Anweisungen, die von dem Ausgaberegister 18 ausgegeben
worden sind und die andere Eingangsgröße ist ein Ausnahmeeinstellwert 369 (–1 bis +3).
während
des Normalbetriebs wird der Wert vom EPC-Register 334 um
die Zahl gültiger,
vom Ausgaberegister 18 ausgegebener, Anweisungen inkrementiert,
so dass der Wert im EPC-Register 334 auf die nächste auszuführende Anweisung
zeigt. wenn eine Ausnahme auftritt (Falle, Anweisungs-Cache-Verlust
etc.), wird der Ausnahmeeinstellwert hinzugefügt zu dem Wert im WPC-Register 354,
um die Anweisung anzuzeigen, die die Ausnahme verursacht hat. Der
Wert –1
wird verwendet, wenn die Ausnahme durch eine Verzögerungsanweisung
verursacht worden ist da es in diesem Fall wünschenswert ist, auf die Abzweigungsanweisung
unmittelbar davor zu zeigen. Der Wert, der anzeigt, welche Anweisung
die Ausnahme verursacht hat, wird in einem EPC_COP-Register 370 gespeichert,
welches neu geladen wird mit ihrem voreingestellten Wert bis ein
anderer Ausnahmefall auftritt über
den Multiplexer 374. Ein TRAP_BASE-Register 376 speichert
eine Adresse, zu der das Programm gehen sollte, wenn eine Ausnahme
auftritt und kommuniziert den Wert zu einem Multiplexer 377.
Die andere Eingangsgröße des Multiplexers 377 ist
ein Rückstellvektorwert.
Einer dieser Werte wird ausgewählt
und an einen Kommunikationspfad 379 ausgegeben.
-
Ein
Multiplexer 380 empfängt
den Wert von dem EPC_COP-Register 370 über einen Kommunikationspfad 384,
wenn er von einer Ausnahme zurückkehrt,
eine Vektoradresse vom Kommunikationspfad 379 auf eine
Ausnahmebedingung, die berechnete Abzweigungszieladresse über einen
Kommunikationspfad 388 zum Abzweigen, den EPC-Wert von
dem Kommunikationspfad 358 zum Halten des EPC-Wertes während ein
Anweisungs-Cache verloren gegangen ist oder fehlerhaft war und den
Aktualisierungswert EPC über
den Kommunikationspfad 396. Der ausgewählte Wert wird auf einem Kommunikationspfad 430 (PC
JAM BUS [47:0]) ausgegeben, von welchen Bits [13:2] die Korrekturwerte
sind, die der in 7 gezeigten F-Stufenschaltung zugeführt werden
zum korrekten Indizieren vom Anweisungs-Cache, Tag-Speicher 34A und
Abzweigungsvorhersage-Cache 114.
-
Während des
normalen Betriebs wird der aktualisierte EPC-Wert ausgewählt durch
den Multiplexer 380 und in das EPC-Register 334 geladen.
Wenn ein Abzweigungs-Cache-Ausfall auftritt, wählt der Multiplexer 380 die
berechnete Abzweigungszieladresse und kommuniziert die neue Abzweigungszieladresse
zum Abzweigungs-Cache 114 über den Kommunikationspfad 160 (7).
Die Schreibadresse, die verwendet wird zum Aktualisieren des Abzweigungsvorhersage-Caches 114,
wird berechnet durch einen Abzweigungs-Cache-Adressaddierer 400, welcher
den Wert im EPC-Register 334 zu dem Wert in E_REL_DLY-Register 322 hinzuaddiert
und die Schreibadresse auf einem Kommunikationspfad 404 produziert.
Es sollte bemerkt werden, dass der Wert der Bits [3:2] auf dem Kommunikationspfad 404 der
Position der Verzögerungsanweisung entspricht
und kann als Quellenfeld in dem Abzweigungsvorhersage-Cache-Eintrag
verwendet werden. Die verbleibenden Schreibdaten auf dem Kommunikationspfad 168 umfassen
Bits [13:2] der berechneten Abzweigungszieladresse, welche der aktualisierte
Index ist, und der Bestimmungsortfeldeinträge.
-
GEWERBLICHE
ANWENDBARKEIT
-
Während das
Obige eine Beschreibung einer bevorzugten Ausführungsform der vorliegenden
Erfindung ist, können
verschiedenartige Modifikationen verwendet werden, um noch innerhalb
des Schutzbereichs der vorliegenden Erfindung zu liegen. Folglich
wird der Schutzbereich der vorliegenden Erfindung von den beiliegenden
Patentansprüchen
bestimmt.
-
In Übereinstimmung
mit der vorliegenden Erfindung werden vier Anweisungen immer zur
Ausgabe verfügbar
gehalten, unabhängig
davon, wie viele Anweisungen zuvor ausgegeben worden sind und unbeachtlich
der Codeausrichtung oder des Anweisungstyps, und demnach kann eine
Anweisungsausgabeoperation glatt ausgeführt werden, so dass die Verarbeitungsgeschwindigkeit
verbessert wird.