-
PRIORITÄTSINFORMATION
-
Dieses
Patent nimmt die Priorität
in Anspruch, die auf der US-Anmeldung, Eingangsnummer 10/771,682,
eingereicht am 4. Feb. 2004, beruht.
-
GEBIET DER ERFINDUNG
-
Die
Erfindung betrifft im Allgemeinen das Gebiet von Pipeline-Mikroprozessoren
und insbesondere die frühzeitige
Befehlsausführung
in derartigen Mikroprozessoren.
-
HINTERGRUND DER ERFINDUNG
-
Moderne
Mikroprozessoren sind Pipeline-Mikroprozessoren. D. h., sie bearbeiten
mehrere Befehle gleichzeitig in unterschiedlichen Blöcken bzw. Pipelinestufen
des Mikroprozessors. Hennessy und Patterson definieren das Pipelineverfahren
als "eine Implementierungstechnik,
bei der sich mehrere Befehle während
der Ausführung überlappen". Siehe hierzu Computer
Architecture: A Quantitative Approach, 2nd edition,
von John L. Hennessy und David A. Patterson, Morgan Kaufmann Publishers,
San Francisco, CA, 1996. Sie liefern weiterhin die folgende ausgezeichnete
Erläuterung
des Pipelineverfahrens:
Eine Pipeline ist wie ein Fließband. In
einem Automobil-Fließband
gibt es viele Schritte, von denen jeder einen Teil zum Zusammenbau
des Autos beiträgt.
Jeder Schritt arbeitet parallel zu den anderen Schritten, jedoch
an einem unterschiedlichen Fahrzeug. In einer Computerpipeline vervollständigt jeder
Schritt in der Pipeline einen Teil eines Befehls. Wie am Fließband vervollständigen unterschiedliche
Schritte unterschiedliche Teile der verschiedenen Befehle parallel.
Jeder dieser Schritte heißt
Pipestufe oder Pipesegment. Die Stufen sind hintereinander verbunden, so
dass sie eine "Rohrleitung" bilden. Die Befehle
treten an einem Ende ein, schreiten durch die Stufen fort und treten
am anderen Ende so aus, wie dies auch Automobile auf einem Fließband tun.
-
Synchrone
Mikroprozessoren arbeiten in Taktzyklen. Normalerweise geht ein
Befehl in jedem Taktzyklus von einer Stufe der Mikroprozessor-Pipeline
auf eine andere Stufe über.
Bleiben an einem Automobil-Fließband
die Arbeiter in einer Stufe des Bands ohne Beschäftigung, weil sie kein Auto
vorfinden, an dem Arbeiten zu verrichten sind, so wird die Produktion
bzw. die Leistung des Bands geringer. Ist eine Mikroprozessorstufe
während
eines Taktzyklus untätig,
da sie keinen Befehl hat, der auszuführen ist – diese Situation bezeichnet
man üblicherweise
als Pipeline-Blase – so
nimmt die Prozessorleistung ab.
-
Eine
mögliche
Ursache für
Pipelineblasen sind Verzweigungsbefehle. Tritt ein Verzweigungsbefehl
auf, so muss der Prozessor die Zieladresse des Verzweigungsbefehls
feststellen und damit beginnen, Befehle an der Zieladresse zu holen
und nicht an der nächstfolgenden
Adresse nach dem Verzweigungsbefehl. Ist zudem der Verzweigungsbefehl
ein bedingter Verzweigungsbefehl (d. h., dass eine Verzweigung abhängig davon
genommen wird, ob eine besondere Bedingung vorliegt oder nicht),
so muss der Prozessor entscheiden, ob der Verzweigungsbefehl ausgeführt wird
und zusätzlich
die Verzweigungsadresse ermitteln. Da die Pipelinestufe, die die Zieladresse
und/oder das Verzweigungsergebnis definitiv bestimmt (d. h., ob
der Verzweigung gefolgt wird oder nicht), normalerweise in der Pipeline
ein gutes Stück
hinter der Stufe liegt, die die Befehle holt, können Blasen erzeugt werden.
-
Um
dieses Problem anzugreifen enthalten moderne Mikroprozessoren in
der Regel Verzweigungsvorhersage-Mechanismen, die die Zieladresse und
das Verzweigungsergebnis weit oben in der Pipeline vorhersagen.
Die Entwickler von Mikroprozessoren streben fortgesetzt danach,
Verzweigungsvorhersager mit höherer
Vorhersagegenauigkeit zu entwerfen. Die Verzweigungsvorhersager
sagen jedoch die Ergebnisse von Verzweigungsbefehlen mit einer nicht
trivialen Häufigkeit
falsch voraus. Wie oben bereits erwähnt müssen die Fehlvorhersagen in einer
nachfolgenden Pipelinestufe unter der Verzweigungsvorhersagestufe
erkannt und korrigiert werden. Die mit der Fehlvorhersage verbundenen
Nachteile hängen
von der Anzahl der Pipelinestufen zwischen dem Verzweigungsvorhersager
und der Korrekturstufe für
die Verzweigungsfehlvorhersage ab. Man benötigt daher eine Vorrichtung
und ein Verfahren zum Korrigieren von Fehlvorhersagen bei bedingten
Verzweigungsbefehlen weiter oben in der Pipeline.
-
Zudem
legen bedingte Verzweigungsbefehle eine Verzweigungsbedingung fest,
die, wenn sie erfüllt
wird, den Mikroprozessor anweist, zur Verzweigungszieladresse zu
verzweigen. Andernfalls fährt der
Mikroprozessor damit fort, den nächsten
nachfolgenden Befehl zu holen. Der Mikroprozessor enthält Statusflags,
die den Status des Mikroprozessors speichern. Die Statusflags werden
geprüft,
um festzustellen, ob die vom bedingten Verzweigungsbefehl festgelegte
Bedingung erfüllt
ist. Um letztlich festzustellen, ob ein bedingter Verzweigungsbefehl
falsch vorhergesagt wurde, muss der Mikroprozessor den allerneuesten
Status der Statusflags untersuchen. Derzeit werden die Statusflags
jedoch erst sehr spät in
der Pipeline untersucht, um festzustellen, ob die Verzweigungsbedingung
erfüllt
ist und ob die Verzweigungsvorhersage unzutreffend war. Man benötigt daher
eine Einrichtung und ein Verfahren, mit denen die Statusflags weiter
oben in der Pipeline erzeugt werden.
-
Schließlich wird
der Status von Statusflags in der Regel von den Ergebnissen von
Befehlen beeinflusst, die dem bedingten Verzweigungsbefehl vorausgehen.
Die Bedingung kann beispielsweise darin bestehen, ob das Carry-Flag,
das eines der Statusflags ist, gesetzt ist. Der Status des Carry-Flags
kann beispielsweise durch das Ergebnis des allerletzten Addierbefehls
bestimmt werden. Die Ergebnisse von Befehlen, die die Statusflags
beeinflussen, werden jedoch derzeit in Ausführungseinheiten erzeugt, die sich
in unteren Pipelinestufen des Mikroprozessors befinden. Man benötigt daher
eine Einrichtung und ein Verfahren, mit denen die Befehlsergebnisse
weiter oben in der Pipeline erzeugt werden.
-
In
einer Veröffentlichung
von Farcy et al. ("Dataflow
analysis of branch mispredictions and its application to early resolution
of branch outcomes", PROCEEDINGS
OF THE ANNUAL ACM/IEEP INTERNATIONAL SYMPOSIUM ON MICROARCHITECTURE,
LOS ALMITOS, CA: IEEE COMP. SOC., US, 20. November 1998, Seiten
59–68)
ist ein Verfahren zum Verringern der Auswirkungen von Verzweigungs-Fehlvorhersagen
auf die Prozessorleistung offenbart, wobei die Verzögerung bei
der Bewertung der Bedingungen verringert wird. Dies wird durch die
Vorwegnahme des Verzweigungsergebnisses erzielt.
-
In
US-6,079,014 ist ein Prozessor
offenbart, der eine eingangsseitige Schaltung aufweist, die eine Reihe
von Befehlen abhängig
von einer Programmfolge holt, die von mindestens einem Verzweigungsbefehl
bestimmt wird, eine Registerumbenennungsschaltung, die einem jeden
Befehl Ausführungsressourcen
zuweist, und eine Ausführungsschaltung, die
jeden Befehl im Befehlsstrom ausführt. Die Ausführungsschaltung
veranlasst die eingangsseitige Schaltung, die Befehlsfolge erneut
zu holen, falls eine Verzweigungs-Fehlvorhersage erkannt wird.
-
Zusammenfassung
-
Gemäß einem
Aspekt stellt die Erfindung eine Vorrichtung und ein Verfahren bereit,
die einen bedingten Verzweigungsbefehl in einem Pipeline-Mikroprozessor
früh korrigieren.
Ein Verzweigungsvorhersager sagt das Ergebnis des bedingten Verzweigungsbefehls
früh in
der Pipeline vorher, und der Mikroprozessor verzweigt abhängig von
der Vorhersage entweder zur vorhergesagten Verzweigungs-Zieladresse
oder holt den nächsten
nachfolgenden Befehl. Die Vorhersage wird zusammen mit dem Verzweigungsbefehl
durch die Pipeline geführt.
Die Vorrichtung umfasst eine Früh-Verzweigungs-Korrekturlogik,
die sich in einer Pipelinestufe über
einer Stufe befindet, in der die Spät-Verzweigungs-Korrekturlogik
sitzt. Erreicht der Verzweigungsbefehl die Früh-Verzweigungs-Korrekturlogik, so untersucht
die Früh-Verzweigungs-Korrekturlogik
den Bedingungscode, der durch den Verzweigungsbefehl festgelegt wird,
und stellt fest, ob die festgelegte Bedingung in den Früh-Statusflags
erfüllt
ist, um zu ermitteln, ob die Vorhersage unzutreffend ist. Die Früh-Statusflags werden
abhängig
von Befehlen erzeugt, die dem Verzweigungsbefehl vorhergehen. Die
Früh-Statusflags werden
von einer Erzeugungslogik für
Früh-Flags
erzeugt, die weiter oben in der Pipeline liegen als Ausführungseinheiten,
die die Architektur-Statusflags des Mikroprozessors erzeugen. Die
Früh-Statusflags können gültig sein
oder nicht. Sind die Früh-Statusflags
gültig
und zeigen sie eine Fehlvorhersage an, so korrigiert die Früh-Verzweigungs-Korrekturlogik die
Fehlvorhersage. Wurde der Vorhersage gefolgt und zeigen die Früh-Statusflags
an, dass die Bedingung nicht erfüllt
war, so korrigiert die Früh-Verzweigungs-Korrekturlogik
die Fehlvorhersage durch das Leeren der Pipeline und das Verzweigen
des Mikroprozessors zu dem nächstfolgenden
Befehl nach dem bedingten Verzweigungsbefehl. Wurde der Vorhersage
nicht gefolgt und zeigen die Früh-Statusflags
an, dass die Bedingung erfüllt
war, so korrigiert die Früh-Verzweigungs-Korrekturlogik
die Fehlvorhersage durch das Leeren der Pipeline und das Verzweigen
des Mikroprozessors zu der Verzweigungs-Zieladresse.
-
In
einer Ausführungsform
werden die Früh-Statusflags
abhängig
von den Frühergebnissen von
Statusflag-Veränderungsbefehlen
erzeugt, die dem bedingten Verzweigungsbefehl vorausgehen. Die Frühergebnisse
können
gültig
sein oder nicht. Ist das Ergebnis eines Statusflag-Veränderungsbefehls ungültig, so
werden die Früh-Statusflags
für ungültig erklärt. Die
Früh-Statusflags
werden wieder gültig
gemacht, indem die Architektur-Statusflags auf die Früh-Statusflags
kopiert werden, nachdem alle Statusflag-Veränderungsbefehle – wenn vorhanden – in den
Pipelinestufen unter der Früh-Verzwei gungs-Korrekturlogikstufe
die Architektur-Statusflags aktualisiert haben. Dieses Ereignis
tritt beispielsweise dann ein, wenn die Pipeline geleert wird, etwa während der
Korrektur einer Verzweigungs-Fehlvorhersage.
-
In
einer weiteren Ausführungsform
wird eine Angabe darüber,
ob die Früh-Verzweigungs-Korrekturlogik
die Fehlvorhersage korrigiert hat, durch die Pipeline zur Spät-Verzweigungs-Korrekturlogik
geführt.
Erreicht der bedingte Verzweigungsbefehl nachfolgend die Spät-Verzweigungs-Korrekturlogik, und
zeigen die Architektur-Statusflags eine Fehlvorhersage an und hat
die Früh-Verzweigungs-Korrekturlogik
die Fehlvorhersage nicht korrigiert, so korrigiert die Spät-Verzweigungs-Korrekturlogik
die Fehlvorhersage.
-
In
einer weiteren Ausführungsform
werden die Frühergebnisse
der Befehle vor dem bedingten Verzweigungsbefehl von der Früh-Ausführungslogik erzeugt.
Die Früh-Ausführungslogik
befindet sich in einer Pipelinestufe über der Stufe, in der die Ausführungseinheiten
sitzen, die die endgültigen
Befehlsergebnisse erzeugen. Die Früh-Ausführungslogik ist so aufgebaut,
dass sie eine Untermenge der Befehle des Mikroprozessor-Befehlsatzes
ausführt.
Im Einzelnen ist die Früh-Ausführungslogik
in einer Adressstufe der Pipeline enthalten und umfasst einen Adressgenerator,
der so ergänzt
ist, dass er häufig ausgeführte Befehle
abarbeitet, die rasch bearbeitet werden können. In einer Ausführungsform
enthält
die Früh-Ausführungslogik
eine Logik zum Ausführen
allgemeiner Befehle, schneller arithmetischer Operationen, logischer
Operationen und Verschiebeoperationen. Sind die Frühergebnisse,
die die Früh-Ausführungslogik
erzeugt, Ergebnisse eines vorhergehenden Befehls, für den die
Früh-Ausführungslogik
nicht konfiguriert ist, um ein gültiges
Ergebnis zu erzeugen, so sind die Frühergebnisse ungültig. Ist
der Befehl ein Befehl, der Statusflags verändert, so werden die Früh-Statusflags
für ungültig erklärt.
-
In
einer anderen Ausführungsform
werden die Frühergebnisse
in einer Früh-Registerdatei
gespeichert, deren Register der Architektur-Registerdatei des Mikroprozessors
entsprechen, und zwar zusammen mit Gültigkeitsanzeigen für jedes
Register in der Früh-Registerdatei.
Die Früh-Registerdatei
liefert Frühergebnisse
als Operanden an den Früh-Ausführungslogik/Adressgenerator,
damit sie beim Erzeugen der Früh-Resultate
verwendet werden. Liefert die Früh-Registerdatei
einen ungültigen
Eingabeoperanden für
die Früh-Ausführungslogik,
so wird das erzeugte Frühergebnis
für ungültig erklärt. Ist
der Befehl ein Befehl, der Statusflags verändert, so werden die Früh-Statusflags
für ungültig erklärt.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Es
zeigt:
-
1 ein
Blockdiagramm eines Pipeline-Mikroprozessors der Erfindung;
-
2 ein
Blockdiagramm, das ausführlich die
R-Stufe, die A-Stufe und die J- Stufe
des Mikroprozessors der Erfindung in 1 erläutert;
-
3 ein
Blockdiagramm der Architektur-Registerdatei, der Früh-Registerdatei,
des Architektur-EFLAGS-Registers und des Früh-EFLAGS-Registers in 1 und 2 ge
mäß der Erfindung;
-
4 ein Flussdiagramm, das die Arbeitsweise
der Vorrichtung in 2 zum Erzeugen von Frühergebnissen
und Früh-EFLAGS
gemäß der Erfindung
erläutert;
-
5 ein
Flussdiagramm, das die Arbeitsweise der Vorrichtung in 2 zum
Wiederherstellen und für
gültig
Erklären
des Früh-EFLAGS-Registers gemäß der Erfin
dung erläutert;
-
6 ein
Flussdiagramm, das die Arbeitsweise des Mikroprozessors beim Aus
führen
früher Verzweigungskorrekturen
gemäß der Erfindung
erläutert;
und
-
7 ein
Flussdiagramm, das die Arbeitsweise des Mikroprozessors beim Aus
führen
später Verzweigungskorrekturen
gemäß der Erfindung
erläutert.
-
AUSFÜHRLICHE
BESCHREIBUNG
-
Anhand
von 1 wird nun ein Blockdiagramm eines Pipeline-Mikroprozessors 100 der
Erfindung dargestellt. Der Mikroprozessor 100 enthält eine
Anzahl Stufen in seiner Pipeline. In 1 sind zwölf Pipelinestufen
dargestellt.
-
Der
Mikroprozessor 100 enthält
eine I-Stufe 102 (Befehlsholstufe), die Befehle holt. Die
I-Stufe 102 enthält
einen Befehlscache, in dem Programmbefehle zwischengespeichert werden.
Die I-Stufe 102 holt Programmbefehle aus dem Befehlscache oder
aus einem Systemspeicher, der mit dem Mikroprozessor 100 verbunden
ist. Die I-Stufe 102 holt Befehle an einer Speicheradresse,
die in einem Befehlszeigerregister gespeichert ist. Im Normalfall
wird der Befehlszeiger beim Holen von Befehlen erhöht, so dass
Befehle nacheinander geholt werden. Der Befehlszeigerwert kann jedoch
auf eine nicht nachfolgende Speicheradresse geändert werden, wenn ein Verzweigungsbefehl
vorliegt, damit der Mikroprozessor 100 zu einer Verzweigungs-Zieladresse
verzweigt. Die I-Stufe 102 enthält einen Verzweigungsvorhersager 132.
Der Verzweigungsvorhersager 132 sagt vorher, ob ein Verzweigungsbefehl
in dem geholten Befehlsstrom enthalten ist, ob dem Verzweigungsbefehl
gefolgt wird oder nicht, und die Verzweigungs-Zieladresse des Verzweigungsbefehls,
falls diesem gefolgt wird. Der Verzweigungsvorhersager 132 sagt
also vorher, ob der Verzweigungsbefehl, wenn er schließlich später in der
Pipeline 100 aufgearbeitet wird, den Mikroprozessor 100 anweist,
zu einer Verzweigungs-Zieladresse zu verzweigen, die der Verzweigungsbefehl
festlegt (wenn ihm gefolgt wird), oder ob er den Mikroprozessor 100 anweist, den
nächstfolgenden
Befehl zu holen und auszuführen,
der hinter dem Verzweigungsbefehl kommt (wenn diesem nicht gefolgt
wird). Die I-Stufe 102 empfängt erste und zweite Steuereingaben 154 und 156,
die im Weiteren ausführlicher
beschrieben werden. Diese weisen die I-Stufe 102 an, eine
Vorhersage eines Verzweigungsbefehls zu korrigieren, die der Verzweigungsvorhersager 132 getätigt hat.
In einer Ausführungsform
umfasst der Verzweigungsvorhersager 132 einen Verzweigungsziel-Adresscache
(BTAC), der die Adressen der vorher ausgeführten Verzweigungsbefehle und
ihre aufgelösten
Verzweigungs-Zieladresse zwischenspeichert. Zusätzlich speichert der BTAC Vorhersageinformation,
die für die
Vorhersage verwendet wird, ob dem Verzweigungsbefehl gefolgt wird
oder nicht, und zwar abhängig
von der Vorgeschichte des Verzweigungsbefehls. Andere Ausführungsformen
enthalten dynamische Tabellen bezüglich der Verzweigungsvorgeschichte, statische
Verzweigungsvorhersager und hybride statisch-dynamische Verzweigungsvorhersager,
die im Gebiet der Verzweigungsvorhersage bekannt sind. In einer
Ausführungsform
umfasst die I-Stufe 102 vier Pipelinestufen.
-
Der
Mikroprozessor 100 enthält
auch eine F-Stufe 104 (Befehlsformatstufe), die mit der
I-Stufe 102 verbunden ist. In einer Ausführungsform
enthält der
Befehlssatz des Mikroprozessors 100 Befehle mit unterschiedlicher
Länge,
beispielsweise beim Befehlssatz der x86-Architektur, und nicht nur
Befehle mit fester Länge.
Die F-Stufe 104 enthält
einen Befehlsformatierer, der einen Strom von Befehlsbytes unterteilt
und den Strom in einzelne Befehle zerlegt. Insbesondere erkennt
der Befehlsformatierer die Länge
und den Anfangsort eines jeden Befehls innerhalb des Befehlsbytestroms.
In einer Ausführungsform
enthält
die F-Stufe 104 eine Befehlswarteschlange, die formatierte
Befehle speichert.
-
Der
Mikroprozessor 100 enthält
auch eine X-Stufe 106 (Übersetzungsstufe),
die mit der F-Stufe 104 verbunden ist. In einer Ausführungsform
enthält der
Mikroprozessor 100 einen RISC-Kern (RISC = Reduced Instruction
Set Computer, Computer mit verringertem Befehlsvorrat). Der RISC-Kern
führt einen
eigentlichen Befehlssatz aus. Die eigentlichen Befehle, die auch
Mikrobefehle heißen,
sind Befehle, die relativ unkompliziert sind und wirksamer ausgeführt werden
als die Programmbefehle, die die I-Stufe 102 holt. Diese
Befehle werden als Makrobefehle bezeichnet. Beispielsweise enthält der Befehlssatz
der x86-Architektur Makrobefehle oder Computerbefehle mit komplexem
Befehlssatz (CISC, CISC = Complex Instruction Set Computer instructions).
Die X-Stufe 106 enthält
einen Befehlsübersetzer,
der Makrobefehle in Mikrobefehle übersetzt. Der Befehlsübersetzer
holt formatierte Makrobefehle aus der Makrobefehlsschlange der F-Stufe 104 und übersetzt
jeden Makrobefehl in einen oder mehrere Mikrobefehle, die an die
restlichen Stufen der Pipeline 100 geliefert werden, die
generell und gemeinsam als Ausführungsstufen
der Pipeline 100 bezeichnet werden. In einer Ausführungsform
enthält
die X-Stufe 106 eine Mikrobefehls-Warteschlange, in der übersetzte
Mikrobefehle abgelegt werden. In einer Ausführungsform umfasst die X-Stufe 106 zwei
Pipelinestufen.
-
Der
Mikroprozessor 100 enthält
auch eine R-Stufe 108 (Registerstufe), die mit der X-Stufe 106 verbunden
ist, und eine A-Stufe 112 (Adresserzeugungsstufe), die
mit der R-Stufe 108 verbunden ist. Die R-Stufe 108 enthält eine
Architektur-Registerdatei 134 (ARF) und eine Früh-Registerdatei 136 (ERF).
Die Architektur-Registerdatei 134 enthält Register, die den Programmen
sichtbar sind, die auf dem Mikroprozessor 100 laufen. Im
Einzelnen kann ein Programmbefehl ein Register in der Architektur-Registerdatei 134 als
Quelloperand festlegen, von dem eine Eingabe für den Befehl zu empfangen ist,
die zum Erzeugen eines Ergebnisses verarbeitet wird. In ähnlicher
Weise kann der Programmbefehl ein Register in der Architektur-Registerdatei 134 als Zieloperand
festlegen, in den das Ergebnis des Befehls zu schreiben ist. Der
Befehl kann die Register explizit oder implizit festlegen. In einer
Ausführungsform
enthält
die Architektur-Registerdatei 134 die Register EAX, EBX,
ECX, EDX, EBP, ESI, EDI und ESP der Registerdatei der x86-Architektur,
siehe 3. Die Früh-Registerdatei 136 enthält Register,
die jedem Register in der Architektur-Registerdatei 134 zugeordnet
sind, siehe 3.
-
Die
in den Registern der Architektur-Registerdatei 134 gespeicherten
Werte geben den für
den Benutzer sichtbaren Status des Mikroprozessors 100 wieder.
Die in den Registern der Früh-Registerdatei 136 gespeicherten
Werte können
einen spekulativen Status des Mikroprozessors 100 wiedergeben.
Erzeugt eine Stufe des Mikroprozessors 100 ein Befehlsergebnis,
und legt der Befehl ein Register in der Architektur-Registerdatei 134 als
Ergebnisziel fest, so darf das Ergebnis so lange nicht in die Architektur-Registerdatei 134 geschrieben
werden, bis der Befehl nicht mehr spekulativ ist, d. h., bis der
Befehl garantiert abgeschlossen oder zurückgezogen wird. Im Weiteren
wird genauer beschrieben, dass im Gegensatz dazu ein Befehlsergebnis
in die Früh-Registerdatei 136 geschrieben
werden kann, bevor der Befehl garantiert abgeschlossen wird. Insbesondere kann
ein Befehlsergebnis, das vom Früh-Ausführungslogik/Adressgenerator 138 (der
in der A-Stufe 112 enthalten ist und weiter unten ausführlich beschrieben
wird) erzeugt wird, in die Früh-Registerdatei 136 geschrieben
werden, bevor garantiert ist, dass der Befehl abgeschlossen wird.
Ein Befehl wird garantiert abgeschlossen, falls der Mikroprozessor 100 feststellt,
dass der Befehl selbst und keine Befehle vor diesem Befehl noch
in der Lage sind, einen Abbruch zu erzeugen, und dass alle Verzweigungsbefehle
vor diesem Befehl endgültig
aufgelöst
sind, d. h., falls der Mikroprozessor 100 letztendlich
feststellt, dass jedem Verzweigungsbefehl vor diesem Befehl entweder
korrekt gefolgt wird oder nicht gefolgt wird, und dass die Verzweigungs-Zieladresse
eines jeden verfolgten Verzweigungsbefehls korrekt ist. Zusätzlich werden
die Werte in der Architektur-Registerdatei 134 stets als
gültig
garantiert, wogegen die Werte in der Früh-Registerdatei 136 zusätzlich dazu,
dass sie spekulativ sind, gültig
oder ungültig
sein können. Dies
wird im Weiteren genauer erläutert.
Folgerichtig enthält
jedes Register in der Früh-Registerdatei 136 auch
ein zugehöriges
Gültigkeitsbit 218,
siehe 3, das anzeigt, ob der im zugehörigen Register
gespeicherte Wert gültig
ist. Die Früh-Registerdatei 136 wird
beim Zurücksetzen
des Mikroprozessors 100 mit den gleichen Werten initialisiert,
mit denen die Architektur-Registerdatei 134 initialisiert
wird.
-
Die
R-Stufe 108 der Pipeline des Mikroprozessors 100 enthält auch
das Architektur-EFLAGS-Register 162. Die A-Stufe 112 enthält ein Früh-EFLAGS-Register 142.
Das Architektur-EFLAGS-Register 162 und das Früh-EFLAGS-Register 142 speichern
Statusflags, die Attribute der Ergebnisse von Befehlen anzeigen, beispielsweise
ob das Ergebnis null ist, einen Übertrag
erzeugt hat oder negativ ist. In einer Ausführungsform umfasst jedes Statusflag
ein einziges Bit. In einer Ausführungsform
umfasst das Architektur-EFLAGS-Register 162 ein
x86-Architektur-EFLAGS-Register, das die folgenden Statusflags enthält: Überlaufflag
(OF), Vorzeichenflag (SF), Nullflag (ZF), Paritätsflag (PF) und Übertragsflag
(CF), siehe 3. Der Mikroprozessor 100 enthält in seinem
Befehlssatz bedingte Befehle, die Bedingungscodes spezifizieren.
Ein Bedingungscode legt einen Zustand eines oder mehrerer Statusflags
fest. Ist der aktuelle Status der Statusflags gleich dem im Bedingungscode
festgelegten Status, so ist die Bedingung erfüllt, und der Mikroprozessor 100 führt eine
Operation aus, die der bedingte Befehl festlegt. Andernfalls wird
die spezifizierte Operation nicht ausgeführt. Ein Beispiel für einen
bedingten Befehl ist ein bedingter Verzweigungsbefehl, der in der
x86-Architektur ein Sprungbefehl ist, der bei erfüllter Bedingung
ausgeführt
wird (Jcc), und der einen Bedingungscode und einen Versatz festlegt,
der zum Berechnen einer Verzweigungs-Zieladresse verwendet wird.
Ein besonderes Beispiel für
einen Jcc ist ein JNZ-Befehl (JNZ = Jump if Not Zero). Der JNZ-Befehl
legt einen Bedingungscode "nicht
null" fest. Ist
das Nullflag (ZF) gelöscht
(d. h. ist die Bedingung "nicht
null" wahr), so verzweigt
der Mikroprozessor 100 zur Verzweigungs-Zieladresse, die
der Verzweigungsbefehl festlegt (d. h. dem bedingten Verzweigungsbefehl
wird gefolgt). Ist jedoch das Nullflag gesetzt, (d. h. ist die Bedingung "nicht null" falsch), so holt
der Mikroprozessor 100 den nächstfolgenden Befehl nach dem bedingten
Verzweigungsbefehl (d. h. dem bedingten Verzweigungsbefehl wird
nicht gefolgt). Weitere Beispiele für bedingte x86-Befehle sind
die Befehle SETcc, LOOPcc und CMOVcc.
-
Das
Architektur-EFLAGS-Register 162 enthält Statusflags, die für Programme
sichtbar sind, die auf dem Mikroprozessor 100 laufen. Insbesondere kann
ein bedingter Programmbefehl einen Bedingungscode abhängig von
den Statusflags im Architektur-EFLAGS-Register 162 festlegen.
Die Früh-EFLAGS-Register 142 enthalten
Statusflags, die jedem Statusflag im Architektur-EFLAGS-Register 162 zugeordnet
sind, siehe 3. Ähnlich wie beim Zusammenhang
zwischen der Architektur-Registerdatei 134 und der Früh-Registerdatei 136 spiegeln
die im Architektur-EFLAGS-Register 162 gespeicherten Werte
den für
den Benutzer sichtbaren Status des Mikroprozessors 100.
Dagegen können die
im Früh-EFLAGS-Register 142 gespeicherten Werte
einen spekulativen Status des Mikroprozessors 100 wiedergeben.
Führt eine
Stufe des Mikroprozessors 100 einen Befehl aus, der ein
oder mehrere Statusflags verändert,
so werden die Statusflags in dem Architektur-EFLAGS-Register 162 so
lange nicht aktualisiert, bis der Befehl nicht mehr spekulativ ist.
Im Gegensatz dazu können,
siehe die ausführliche
Beschreibung unten, die Statusflags im Früh-EFLAGS-Register 142 aktualisiert
werden, bevor garantiert ist, dass der Befehl abgeschlossen wird.
Im Einzelnen kann der Mikroprozessor 100 ein Statusflag
im Früh-EFLAGS-Register 142 abhängig von
einem Befehl aktualisieren, den der Früh-Ausführungslogik/Adressgenerator 138 ausführt, der auch
als Früh-Ausführungseinheit 138 bezeichnet wird,
bevor garantiert ist, dass der Befehl abgeschlossen wird. Zusätzlich ist
stets garantiert, dass die Werte im Architektur-EFLAGS-Register 162 immer
gültig
sind, wogegen die Werte im EFLAGS-Register 142 gültig oder
ungültig
sein können.
Dies wird im Folgenden ausführlicher
erläutert.
Folglich enthält das
EFLAGS-Register 142 auch
ein Gültigkeitsbit 246,
siehe 3, das anzeigt, ob die im EFLAGS-Register 142 gespeicherten
Werte gültig sind.
Beim Zurücksetzen
des Mikroprozessors 100 wird das EFLAGS-Register 142 mit
den gleichen Werten initialisiert, mit denen auch das Architektur-EFLAGS-Register 162 initialisiert
wird. Die Ausführungsform
in 3 zeigt ein einziges Gültigkeitsbit 246 für das EFLAGS-Register 142.
Es wird jedoch eine andere Ausführungsform
in Betracht gezogen, in der ein Gültigkeitsbit für jedes
Statusflag im Früh-EFLAGS-Register 142 gehalten
wird.
-
Der
Früh-Ausführungslogik/Adressgenerator 138 in
der A-Stufe 112 erzeugt ein Frühergebnis und eine Gültigkeitsanzeige,
die über
einen Frühergebnisbus 152 an
die R-Stufe 108 zurückgeliefert
werden. Dies wird im Weiteren ausführlicher erklärt. Der Früh-Ausführungslogik/Adressgenerator 138 nimmt auch
effektive Adressberechnungen vor und erzeugt damit Speicheradressen
für Speicherzugriffe
abhängig
von Eingabeoperanden, beispielsweise Operanden, die die Architektur-Registerdatei 134 und
die Früh-Registerdatei 136 liefern
und/oder einen konstanten Operanden, den der Befehl liefert, beispielsweise
eine Verschiebung oder einen Versatz. Die Speicheradressen können von
dem Befehl explizit festgelegt werden. Die Speicheradressen können von
dem Befehl auch implizit festgelegt werden, beispielsweise als eine
Adresse eines Orts in einem Stapelspeicher abhängig von einem implizit festgelegten Stapelzeigerregister
(z. B. ESP) oder Blockzeigerregister (z. B. EBP), beispielsweise
bei einem Push- oder Popbefehl.
-
Der
Mikroprozessor 100 enthält
auch eine J-Stufe 114, die mit der A-Stufe 112 verbunden
ist. Die J-Stufe 114 enthält eine Früh-Verzweigungs-Korrekturlogik 144.
Die Früh-Verzweigungs-Korrekturlogik 144 korrigiert
gezielt Verzweigungsvorhersagen anhand der Werte des Früh-EFLAGS-Registers 142 über das
Steuersignal 154. Dies wird weiter unten genauer beschrieben.
-
Der
Mikroprozessor 100 enthält
auch eine D-Stufe 116, die mit der J-Stufe 114 verbunden
ist, eine G-Stufe 118, die mit der D-Stufe 116 verbunden ist,
und eine H-Stufe 122, die mit der G-Stufe 118 verbunden
ist. Die D-Stufe 116, die G-Stufe 118 und die H-Stufe 122 enthalten
einen Datencache, in dem Daten aus dem Systemspeicher zwischengelagert
werden. In einer Ausführungsform
ist der Datencache ein Pipeline-Cache, der drei Pipelinestufen umfasst
und eine Zugriffszeit von drei Taktzyklen erfordert. Auf den Datencache
wird mit Hilfe von Speicheradressen zugegriffen, die der Früh-Ausführungslogik/Adressgenerator 138 erzeugt.
Befehle, die Ladevorgänge von
Daten aus dem Speicher ausführen,
erfolgen in der D-Stufe 116, der G-Stufe 118 und
der H-Stufe 122.
-
Der
Mikroprozessor 100 enthält
auch eine E-Stufe 124 (Ausführungsstufe), die mit der H-Stufe 122 verbunden
ist. Die E-Stufe 124 enthält Ausführungseinheiten 146,
die Befehlsoperationen ausführen.
Die Ausführungseinheiten 146 können Schaltkreise
wie Addierer, Subtrahierer, Multiplizierer, Dividierer, Schieber,
Dreher, Logik zum Aus führen
von booleschen Operationen, Logik zum Ausführen von transzendenten und
logarithmischen Funktionen usw. enthalten, die endgültige Ergebnisse
der Befehle erzeugen. In einer Ausführungsform enthalten die Ausführungseinheiten 146 eine
Ganzzahleinheit, eine Fließkommaeinheit,
eine MMX-Einheit und eine SSE-Einheit. Die Befehlsergebnisse, die
die Ausführungseinheiten 146 erzeugen,
sind stets korrekte Befehlsergebnisse. Die Ausführungseinheiten 146 erhalten
Eingabe- bzw. Quelloperanden, die immer gültig sind. Zu den Quellen der
in die Ausführungseinheiten 146 eingegebenen
Operanden gehören
die Architektur-Registerdatei 134, das Architektur-EFLAGS-Register 162,
Operanden aus dem Datencache, augenblickliche oder konstante Operanden,
die explizit in Befehlen festgelegt werden, und Operanden, die von
anderen Pipelinestufen weitergereicht werden. Die Ausführungseinheiten 146 empfangen
insbesondere keine spekulativen Eingabeoperanden aus der Früh-Registerdatei 136 oder dem
Früh-EFLAGS-Register 142.
-
Der
Mikroprozessor 100 enthält
eine S-Stufe 126 (Speicherstufe), die mit der E-Stufe 124 verbunden
ist. Die S-Stufe 126 nimmt Speicheroperationen zum Ablegen
von Daten vor, beispielsweise Befehlsergebnisse, die von den Ausführungseinheiten 146 erzeugt
werden, und zwar im Datencache und/oder Systemspeicher. Zusätzlich enthält die S-Stufe 126 eine
Spät-Verzweigungs-Korrekturlogik 148,
die Verzweigungsvorhersagen anhand der Werte des Architektur-EFLAGS-Registers 162 über das
Steuersignal 156 korrigiert. Dies wird im Folgenden genauer
erläutert.
-
Der
Mikroprozessor 100 enthält
auch eine W-Stufe 128 (Ergebnis-Zurückschreibstufe), die mit der
S-Stufe 126 verbunden ist. Die W-Stufe 128 aktualisiert
den Architekturstatus des Mikroprozessors 100 durch das
Zurückschreiben
von Befehlsergebnissen in die Architektur-Registerdatei 134 und
das Architektur-EFLAGS-Register 162 über einen Ergebnisbus 158.
-
In
einer Ausführungsform
umfasst der Mikroprozessor 100 einen Einzelbefehlsausgabe-
oder Skalar- oder Einzelausführungs-Mikroprozessor.
D. h., in jedem Taktzyklus des Mikroprozessors 100 wird höchstens
ein Befehl von den Befehlsausgabe- oder Befehlserzeugungsstufen
(I-Stufe 102 bis X-Stufe 106) an die Befehlsausführungsstufen
(R-Stufe 108 bis W-Stufe 128) ausgegeben. Im Gegensatz
dazu geben superskalare Mikroprozessoren je Taktzyklus zwei oder
mehr Befehle zur Verarbeitung aus. Die hier beschriebene Vorrichtung
und das beschriebene Verfahren sind jedoch nicht auf skalare Mikroprozessoren
eingeschränkt,
sofern dies nicht so angegeben wird. In einer Ausfüh rungsform
umfasst der Mikroprozessor 100 einen Mikroprozessor, der
der Reihe nach ausgibt. D. h., Befehle werden zur Ausführung in
der Reihenfolge ausgegeben, in der sie im Programm festgelegt sind.
Dagegen besitzen einige Mikroprozessoren die Fähigkeit, Befehle außerhalb
der Reihenfolge auszugeben.
-
2 zeigt
ein Blockdiagramm, das die R-Stufe 108, die A-Stufe 112 und
die J-Stufe 114 des Mikroprozessors 100 der
Erfindung in 1 in Einzelheiten darstellt.
Die R-Stufe 108 enthält
die Architektur-Registerdatei 134, die Früh-Registerdatei 136 und
das Architektur-EFLAGS-Register 162 aus 1.
Das Architektur-EFLAGS-Register 162 wird von der W-Stufe 128 über den
Ergebnisbus 158 aktualisiert. Die R-Stufe 108 empfängt einen
Befehl 206 von der X-Stufe 106. Der Befehl 206 kann
decodierte Information über
den Befehl zusätzlich
zu den Befehlsbytes selbst enthalten. Der Befehl legt den Typ des
Befehls fest, beispielsweise Addition, Verzweigung usw. Der Befehl
kann auch einen Bedingungscode festlegen. Der Befehl kann auch einen
Zieloperandenort über
eine Marke festlegen. Im Einzelnen kann die Zieloperandenmarke eines
der Register in der Architektur-Registerdatei 134 das Ziel
des Ergebnisses des Befehls 206 festlegen. Die Architektur-Registerdatei 134 empfängt über den
Ergebnisbus 158 in 1 Befehlsergebnisse
von der W-Stufe 128. In die Architektur-Registerdatei 134 wird über den
Ergebnisbus 158 eine Zieloperandenmarke 278 geliefert,
damit gewählt
wird, welches der Register mit den Befehlsergebnissen aus dem Ergebnisbus 158 aktualisiert
wird. Die Früh-Registerdatei 136 empfängt über den
Frühergebnisbus 152 in 1 ein Frühergebnis 242 von
der A-Stufe 112. Der Befehl 206 enthält eine
Zieloperandenmarke 216, die als Auswahleingabe für die Früh-Registerdatei 136 dient und
auswählt,
welches der Register mit dem Frühergebnis 242 aktualisiert
wird. Die an die Früh-Registerdatei 136 gelieferte
Zieloperandenmarke 216 kommt aus einem Pipelineregister 232,
das den Befehl 206 durch die Stufen zur A-Stufe 112 führt.
-
Der
Befehl kann auch einen oder mehrere Quelloperanden über ein
Quelloperanden-Markensignal 214 festlegen. In einer Ausführungsform
kann der Befehl 206 bis zu drei Quelloperanden bestimmen.
Der Befehl 206 legt über
das Quelloperanden-Markensignal 214 Registerquelloperanden
fest. Die Quelloperanden-Marken 214 werden als Auswahleingabe
an die Architektur-Registerdatei 134 und die Früh-Registerdatei 136 geliefert
und wählen aus,
welche der Register – wenn überhaupt – als Quelloperanden
an den Befehl 206 geliefert werden. Der Befehl kann auch
unmittelbare oder konstante Operanden (beispielsweise Verschiebung
oder Versatz) 222 festlegen.
-
Die
R-Stufe 108 enthält
auch Gültigkeitsbits 218 für jedes
Register der Früh-Registerdatei 136, die
auch in 3 zu sehen sind. Die Gültigkeitsbits 218 der
Früh-Registerdatei
erhalten über
den Frühergebnisbus 152 eine
Frühergebnis-Gültigkeitsanzeige 244 von
der A-Stufe 112. Die Frühergebnis-Gültigkeitsanzeige 244 wird
zum Aktualisieren des Gültigkeitsbits 218 verwendet,
das dem Register der Früh-Registerdatei 136 zugeordnet
ist, das die Zieloperandenmarke 216 wählt.
-
Die
R-Stufe 108 enthält
auch einen Multiplexer 226, der Quelloperanden für den Befehl 206 wählt, der
in die R-Stufe 108 eintritt. Der Multiplexer 226 empfängt Quelloperandeneingaben
aus der Architektur-Registerdatei 134 und der Früh-Registerdatei 136.
In einer Ausführungsform
umfasst die Architektur-Registerdatei 134 drei Leseports,
von denen zwei Ausgänge
als Eingänge
für den
Multiplexer 226 dienen und bis zu zwei Quelloperanden je
Taktzyklus liefern. In einer Ausführungsform umfasst die Früh-Registerdatei 136 zwei
Leseports, deren Ausgänge
als Eingänge
für den
Multiplexer 226 dienen und bis zu zwei Quelloperanden je
Taktzyklus liefern. Der Multiplexer 226 empfängt auch
einen unmittelbaren/konstanten Operanden 222, der in dem
Befehl 206 enthalten sein kann. Der Multiplexer 226 empfängt auch
das Frühergebnis 242 aus
der A-Stufe 112.
-
Zusätzlich empfängt der
Multiplexer 226 eine Gültigkeitsbit-Eingabe,
die jedem eingegebenen Operanden zugeordnet ist. Die aus der Früh-Registerdatei 136 empfangenen
Gültigkeitsbits,
die den Operanden zugeordnet sind, stammen von den Gültigkeitsbits 218 der
Früh-Registerdatei.
Das Gültigkeitsbit,
das dem Frühergebnisoperanden 242 zugeordnet
ist, der von der A-Stufe 112 empfangen wird, ist die Frühergebnis-Gültigkeitsanzeige 244.
Die Gültigkeitsbits
für die
Operanden, die die Architektur-Registerdatei 134 und
der unmittelbare/konstante Operand 222 liefern, sind stets
wahr, d. h., die Operanden der Architektur-Registerdatei 134 und
der unmittelbare/konstante Operand 222 sind immer gültig. Die Quelloperanden
und die zugeordneten Gültigkeitsbits,
die der Multiplexer 226 wählt, werden an ein Quelloperanden-Pipelineregister 238 und
ein Gültigkeitsbits-Pipelineregister 236 geliefert,
das sie für
die A-Stufe 112 bereithält.
In einer Ausführungsform
ist das Quelloperandenregister 238 dafür ausgelegt, bis zu drei Quelloperanden
zu speichern. Das Gültigkeitsbitsregister 236 ist
dafür ausgelegt,
bis zu drei zugehörige
Gültigkeitsbits
zu speichern.
-
In
einer Ausführungsform
enthält
der Mikroprozessor 100 auch Weitergabebusse (nicht dargestellt),
die Ergebnisse weiterreichen, die die Ausführungseinheiten 146 er zeugt
haben, und zwar als Operandenlieferung von der E-Stufe 124 und
der S-Stufe 126 an die R-Stufe 108. Die Weitergabebusse
dienen als Eingänge
für die
Multiplexer 226. Legt der Befehl der R-Stufe 108 einen
Quelloperanden fest, dessen Marke nicht mit einer Zielmarke in einer der
Stufen A 112 bis H 122 übereinstimmt, jedoch mit einer
Zielmarke in einer der Stufen E 124 oder S 126 übereinstimmt,
so steuert die Früh-Flagerzeugungs/Steuerlogik 212 den
Multiplexer 226 so, dass er den Weitergabebus wählt, der
das neueste Ergebnis als Operand liefert. Wird ein Operand auf den Weitergabebussen
geliefert, so ist er stets gültig.
-
Der
Mikroprozessor 100 enthält
auch eine Früh-Flagerzeugungs/Steuerlogik 212.
Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingaben
die Architektur-EFLAGS 162.
Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingabe
auch den Befehl 206 in der R-Stufe 108 und in
der A-Stufe 112. Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als
Eingabe auch die Ausgabe des Multiplexers 226, d. h. die
Quelloperanden der R-Stufe 108 und die zugehörigen Gültigkeitsbits.
Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingabe
auch die Ausgaben der Pipelineregister 232, 236 und 238,
d. h. den Befehl der A-Stufe 112, seine Quelloperanden
und zugehörigen
Gültigkeitsbits.
Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingabe
auch das Frühergebnis 242.
Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingabe
auch ein Flagveränderungsbefehl-vorhanden-Signal 202 von
jeder der Pipelinestufen unter der A-Stufe 112. Ein Wahr-Wert
auf einem Flagveränderungsbefehl-vorhanden-Signal 202 zeigt
an, dass die entsprechende Stufe einen Befehl hat, der das Architektur-EFLAGS-Register 162 verändert, und
dass das Architektur-EFLAGS-Register 162 von dem Befehl
noch nicht aktualisiert worden ist. Die Flagveränderungsbefehl-vorhanden-Signale 202 werden
dazu verwendet, festzustellen, wann das Früh-EFLAGS-Register 142 wiederhergestellt
und für
gültig
erklärt
werden kann. Dies wird im Weiteren anhand von 5 erklärt. Die
Früh-Flagerzeugungs/Steuerlogik 212 empfängt als
Eingabe auch ein verzweigungskorrigiertes Spätsignal 268. Ein Wahr-Wert
auf dem verzweigungskorrigierten Spätsignal 268 zeigt
an, dass die Spät-Verzweigungs-Korrekturlogik 148 in 1 eine
Verzweigungs-Fehlvorhersage korrigiert hat. Dies impliziert, dass
die Pipeline 100 geleert wurde. Das verzweigungskorrigierte Spätsignal 268 wird
auch dazu verwendet, festzustellen, wann das Früh-EFLAGS-Register 142 wiederhergestellt
und für
gültig
erklärt
werden kann. Dies wird im Weiteren anhand von 5 erklärt. Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingabe
auch Zielmarken 204 der Befehle, die in jeder der Pipelinestufen
unter der A-Stufe 112 vorhanden sind. Die Zielmarken 204 werden
dazu verwendet, festzustellen, ob ein von einem Befehl 206 in
der R-Stufe 108 spezifizierter Quelloperand aus der Architektur-Registerdatei 134 oder
der Früh-Registerdatei 136 geliefert
werden soll, oder ob das Frühergebnis 242 der
A-Stufe 112 geliefert werden soll. Dies wird weiter unten
anhand von 4 beschrieben. In einer
Ausführungsform
kann der Befehl 206 einen Speicherquelloperanden bestimmen,
d. h. einen Operanden, dessen Ort durch eine Speicheradresse festgelegt
ist. In der Regel ist der Speicheroperand im Speichersystem vorhanden
oder im Datencache. In einer Ausführungsform kann der Speicheroperand
auch in einer unteren Stufe der Pipeline des Mikroprozessors 100 vorhanden
sein. Dies kann für
Daten der Fall sein, die der Gegenstand eines vorhergehenden Speicherbefehls
sind, der eine Zielspeicheradresse hat, die mit der Speicheroperandenadresse
des Befehls der R-Stufe 108 übereinstimmt. Obwohl dies nicht
dargestellt ist, empfängt
der Multiplexer 226 auch Speicheroperanden als Eingaben. Die
Früh-Flagerzeugungs/Steuerlogik 212 empfängt als
Eingabe ein Speicheroperanden-vorhanden-Signal 266, das
angibt, ob vom Befehl spezifizierte Speicherquelloperanden vorhanden
sind und an den Multiplexer 226 geliefert werden können. Das
Speicheroperanden-vorhanden-Signal 266 dient dazu, festzustellen,
ob es nötig
ist, den Befehl 206 der R-Stufe 108 abzubrechen,
und ob das Frühergebnis 242 gültig ist.
Dies wird im Folgenden anhand von 4 erklärt.
-
Die
Früh-Flagerzeugungs/Steuerlogik 212 erzeugt
abhängig
von ihren Eingangssignalen verschiedene Steuersignale. Die Früh-Flagerzeugungs/Steuerlogik 212 erzeugt
ein Wählersteuersignal 282,
das den Multiplexer 226 so steuert, dass er die geeigneten
Quelloperanden für
den Befehl 206 wählt.
Die Früh-Flagerzeugungs/Steuerlogik 212 erzeugt
auch das Frühergebnis-Gültigkeitssignal 244. Die
Früh-Flagerzeugungs/Steuerlogik 212 erzeugt auch
einen Wert der Früh-EFLAGS 262,
der im Früh-EFLAGS-Register 142 gespeichert
wird, und ein Steuersignal 264 zum Aktualisieren des Werts
im Früh-EFLAGS-gültig-Register 246.
Der Wert im Früh-EFLAGS-gültig-Register
wird beim Zurücksetzen
des Mikroprozessors auf einen Gültig-Wert
initialisiert. Das Früh-EFLAGS-Register 142 und
das Gültig-Register 246 arbeiten
als Pipelineregister, die die Früh-EFLAGS und das Gültigkeitsbit
an die J-Stufe 114 liefern. Die Früh-Flagerzeugungs/Steuerlogik 212 erzeugt
auch ein Abbruchsignal 228, das für das Anhalten der R-Stufe 108 an
die Pipelineregister 232, 234, 236 und 238 geliefert
wird. In einer Ausführungsform
umfassen die Pipelineregister 232, 234, 236 und 238 gemultiplexte
Register, die dafür
ausgelegt sind, ihren momentanen Status zu halten, wenn das Abbruchsignal 228 wahr
ist, und zwar bis zum nächsten
Taktzyklus. Die Wirkungsweise des Abbruchsignals 228 wird
weiter unten mit Hilfe von 4 beschrieben.
-
Die
A-Stufe 112 enthält
einen Früh-Ausführungslogik/Adressgenerator 138,
der die Quelloperanden vom Quelloperandenregister 238 empfängt und
das Frühergebnis 242 abhängig von
den Quelloperanden 238 erzeugt. Der Früh-Ausführungslogik/Adressgenerator 138 enthält eine
Arithmetik-Logik 272, eine boolsche Logik 274 und
eine Schiebelogik 276. Der Früh-Ausführungslogik/Adressgenerator 138 ist
dafür ausgelegt,
effektive Adressen für Speicheroperationen
zu erzeugen. Der Früh-Ausführungslogik/Adressgenerator 138 ist
auch dafür
ausgelegt, eine Untermenge der Operationen auszuführen, die
die Befehle des Befehlssatzes des Mikroprozessors 100 benötigen. Daher
ist der Früh-Ausführungslogik/Adressgenerator 138 dafür ausgelegt, eine
Untermenge der Operationen auszuführen, die die Ausführungseinheiten 146 in 1 ausführen können. Der
Früh-Ausführungslogik/Adressgenerator 138 ist
dafür ausgelegt,
die Untermenge der Operationen auszuführen, die die am häufigsten
ausgeführten
Operationen sind. Vorteilhafterweise fallen in einer Ausführungsform
die am häufigsten
ausgeführten
Operationen mit den Operationen zusammen, die sich am schnellsten
ausführen
lassen (d. h., sie erfordern einen relativ kurzen Zeitraum für die Ausführung, so
dass sie in einem Taktzyklus ausgeführt werden können), und
sie erfordern einen relativ geringen Hardwareumfang, insbesondere über die
Hardware hinaus, die bereits zum Erzeugen von Speicheradressen erforderlich
ist. In einer Ausführungsform
ist die Arithmetik-Logik 272 dafür ausgelegt, zu addieren, subtrahieren,
inkrementieren und dekrementieren. Die Arithmetik-Logik 272 ist
jedoch beispielsweise nicht dafür
konfiguriert, eine Addition mit Übertrag oder
eine Subtraktion mit Borgübertrag
auszuführen. In
einer Ausführungsform
ist die boolsche Logik 274 so konfiguriert, dass sie boolsche
UND-, ODER-, EXKLUSIV-ODER- und NICHT-ODER-Verknüpfungen ausführt sowie
Verschiebungen mit Vorzeichenerweiterung (move with sign extend)
und Verschiebungen mit Nullerweiterung (move with zero extend).
Die boolsche Logik 274 ist jedoch beispielsweise nicht dafür konfiguriert,
einen Byte-Swap vorzunehmen. In einer Ausführungsform ist die Schiebelogik 276 so konfiguriert,
dass sie Linksschieben und Rechtsschieben ausführt. Die Schiebelogik 276 ist
jedoch beispielsweise nicht dafür
konfiguriert, Rotationsvorgänge
oder Rotationsvorgänge
mit Übertrag
vorzunehmen. Obwohl besondere Ausführungsformen beschrieben werden,
in denen der Früh-Ausführungslogik/Adressgenerator 138 bestimmte
Untermengen an Operationen ausführt,
ist die Erfindung nicht auf besondere Ausführungsformen eingeschränkt. Fachleute
auf dem Gebiet des Mikroprozessorentwurfs können leicht erkennen, dass
man den Früh-Ausführungslogik/Adressgenerator 138 so
konfigurieren kann, dass er eine bestimmte Untermenge an Operationen
ausführt,
die vom besonderen Befehlssatz des Mikroprozessors 100 abhängen und
von Leistungszielen und den Wünschen
bezüglich
des Flächenbedarfs
der Schaltung. Das vom Früh-Ausführungslogik/Adressgenerator 138 erzeugte
Frühergebnis 242 wird
an ein Frühergebnis-Pipelineregister 254 geliefert,
damit es gespeichert und nachfolgend an die J-Stufe 114 übergeben
wird.
-
Die
J-Stufe 114 enthält
die Früh-Verzweigungs-Korrekturlogik 144 aus 1.
Die Früh-Verzweigungs-Korrekturlogik 144 empfängt die
Ausgabe des Früh-EFLAGS-Registers 142,
des Früh-EFLAGS-Gültigkeitsregisters 246 und
des Frühergebnisregisters 254.
Die Früh-Verzweigungs-Korrekturlogik 144 empfängt auch
den Befehl in der J-Stufe 114 aus einem Pipelineregister 248,
das zum Führen
des Befehls 206 vom Pipelineregister 232 durch
die Pipeline verwendet wird. Der Mikroprozessor 100 enthält auch
ein Vorhergesagte-Verzweigung-genommen-Signal 208, das
von der I-Stufe 102, der F-Stufe 104 und der X-Stufe 106 durch
das Pipelineregister 234 in die R-Stufe 108 und
das Pipelineregister 252 in die A-Stufe 112 geführt und
an die Früh-Verzweigungs-Korrekturlogik 144 übergeben wird.
Ein Wahr-Wert auf dem Vorhergesagte-Verzweigung-genommen-Signal 208 gibt
an, dass der Befehl in der zugehörigen
Stufe ein Verzweigungsbefehl ist, von dem der Verzweigungsvorhersager 132 in 1 vorhergesagt
hat, dass die Verzweigung genommen wird. D. h., dass der Mikroprozessor 100 bereits
abhängig
von der Vorhersage des Verzweigungsvorhersagers 132 verzweigt
hat.
-
Abhängig von
seinen Eingangssignalen erzeugt die Früh-Verzweigungs-Korrekturlogik 144 das Verzweigungssteuersignal 154,
das der I-Stufe 102 in 1 geliefert
wird. Das Verzweigungssteuersignal 154 enthält ein Verzweigung-früh-korrigiert-Signal 258,
das an die Spät-Verzweigungs-Korrekturlogik 148 in 1 übergeben
wird. Das Verzweigung-früh-korrigiert-Signal 258 ist
wahr, falls die Früh-Verzweigungs-Korrekturlogik 144 eine
Verzweigungsvorhersage korrigiert. Dies wird im weiteren Text anhand
von 6 beschrieben. Die Arbeitsweise der Früh-Verzweigungs-Korrekturlogik 144 wird
im Folgenden anhand von 6 in Einzelheiten beschrieben.
-
4 zeigt ein Flussdiagramm, das die Arbeitsweise
der Vorrichtung in 2 erläutert, die gemäß der Erfindung
Frühergebnisse
und Früh-EFLAGS
erzeugt. Das Flussdiagramm in 4 erstreckt
sich über
zwei Druckseiten, die mit 4A und 4B bezeichnet
sind. Der Ablauf beginnt im Block 402.
-
Im
Block 402 erreicht ein Befehl 206, der einen Quelloperanden
festlegt, die R-Stufe 108 aus
der Architektur-Registerdatei 134. Der Befehl spezifiziert einen
oder mehrere Quellregisteroperanden über das Quelloperanden-Markensignal 214.
Der Ablauf geht zum Entscheidungsblock 404.
-
Im
Entscheidungsblock 404 untersucht die Früh-Flagerzeugungs/Steuerlogik 212 den
Befehlstyp und stellt fest, ob es sich um eine Befehlsart handelt,
die in der A-Stufe 112 ausgeführt werden muss. In einer Ausführungsform
muss der Befehl in der A-Stufe 112 ausgeführt werden,
falls der Befehl das Erzeugen einer Speicheradresse erfordert, die an
den Datencache in der D-Stufe 116 angelegt werden muss.
Muss der Befehl in der A-Stufe 112 ausgeführt werden,
so geht der Ablauf auf den Entscheidungsblock 406 über. Andernfalls
geht der Ablauf zum Entscheidungsblock 412.
-
Im
Entscheidungsblock 406 stellt die Früh-Flagerzeugungs/Steuerlogik 212 fest,
ob alle von dem Befehl festgelegten Quelloperanden vorhanden und
gültig
sind. Spezifiziert der Befehl einen Speicheroperanden, so untersucht
die Früh-Flagerzeugungs/Steuerlogik 212 das
Speicheroperanden-vorhanden-Signal 266, um herauszufinden,
ob der angegebene Speicheroperand vorhanden und gültig ist.
Spezifiziert der Befehl einen unmittelbaren Operanden, so ist der
unmittelbare Operand stets vorhanden und gültig. Spezifiziert der Befehl
einen Registeroperanden, so vergleicht die Früh-Flagerzeugungs/Steuerlogik 212 die
Zielmarken 204 aus den unteren Pipelinestufen mit der Quelloperandenmarke 214,
um zu ermitteln, ob ein älterer
Befehl in der Pipeline 100 ein Ergebnis erzeugt hat, das
für das Register
der Architektur-Registerdatei 134 bestimmt ist, das die
Quelloperandenmarke 214 angibt. Trifft dies zu, so ist
das Ergebnis in der Früh-Registerdatei 136 vorhanden.
In diesem Fall untersucht die Früh-Flagerzeugungs/Steuerlogik 212 das
Gültigkeitsbit 218 für den festgelegten
Operanden, um festzustellen, ob der Operand gültig ist. Hat kein älterer Befehl
in der Pipeline 100 ein Ergebnis erzeugt, das für das Register
der Architektur-Registerdatei 134 bestimmt ist, das die
Quelloperandenmarke 214 angibt, so ist der Operand vorhanden
und gültig,
weil er von der Architektur-Registerdatei 134 zugeführt wird. Sind
alle von dem Befehl spezifizierten Operanden vorhanden und gültig, so
geht der Ablauf auf den Entscheidungsblock 412 über. Andernfalls
geht der Ablauf auf den Block 408 über.
-
Im
Block 408 erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 einen
Wahr-Wert auf dem Abbruchsignal 228, damit der Befehl in
der R-Stufe 108, der darauf wartet, dass der Quelloperand
entweder aus dem Speicher ankommt oder in die Architektur-Registerdatei 134 zurückgeschrieben
wird oder über
die Weiterleitungsbusse verfügbar
wird, während
des aktuellen Taktzyklus abgebrochen wird. Der Ablauf geht vom Block 408 zurück zum Entscheidungsblock 406.
-
Im
Entscheidungsblock 412 vergleicht die Früh-Flagerzeugungs/Steuerlogik 212 die
Zielmarken 204 aus den unteren Pipelinestufen mit der Quelloperandenmarke 214,
um zu ermitteln, ob ein älterer
Befehl in der Pipeline 100 ein Ergebnis erzeugt hat, das
für das
Register der Architektur-Registerdatei 134 bestimmt ist,
das die Quelloperandenmarke 214 angibt. Trifft dies zu,
so ist das Ergebnis in der Früh-Registerdatei 136 vorhanden;
das Ergebnis kann jedoch gültig
oder ungültig
sein. Hat kein älterer Befehl
in der Pipeline 100 ein Ergebnis erzeugt, das für das Register
der Architektur-Registerdatei 134 bestimmt ist, das die
Quelloperandenmarke 214 angibt, so geht der Ablauf zum
Block 416. Andernfalls geht der Ablauf zum Block 414.
-
Im
Block 414 erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 einen
Wert auf dem Steuersignal 282, der den Multiplexer 226 veranlasst,
den Registerquelloperanden zu wählen,
den die Quelloperandenmarke 214 festlegt, die von der Früh-Registerdatei 136 geliefert
wird. Wird das Frühergebnis 242 in der
A-Stufe 112 während
des gleichen Taktzyklus erzeugt, in der der Befehl die R-Stufe 108 erreicht
und den Quelloperanden anfordert, so wählt der Multiplexer 226 das
eingegebene Frühergebnis 242,
um den Quelloperanden an den Befehl zu liefern. Der Multiplexer 226 kann
mehrere Registeroperanden aus der Früh-Registerdatei 136 für einen
Befehl wählen,
der mehrere Registeroperanden festlegt. Der Ablauf geht zum Block 418.
-
Im
Block 416 erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 einen
Wert auf dem Steuersignal 282, das den Multiplexer 226 veranlasst,
den Registerquelloperanden zu wählen,
den die Quelloperandenmarke 214 festlegt, die von der Architektur-Registerdatei 134 geliefert
wird. Zusätzlich
steuert die Früh-Flagerzeugungs/Steuerlogik 212 den Multiplexer 226 so,
dass er – falls
vorhanden – Nicht-Register-Operanden
wählt,
die der Befehl festlegt, beispielsweise einen unmittelbaren/konstanten Operanden 222 oder
gültige
weitergereichte Operanden. Der Ablauf geht zum Block 418.
-
Im
Block 418 geht der Befehl in die A-Stufe 112 weiter,
in der der Früh-Ausführungslogik/Adressgenerator 138 das
Frühergebnis 242 aus
den vom Multiplexer 226 gewählten Operanden erzeugt. Im Einzelnen
erzeugt die passende Logik, d. h., die Arithmetik-Logik 272 oder
die boolsche Logik 274 oder die Schiebelogik 276,
das Frühergebnis 242 abhängig von
der Art des Befehls. Der Ablauf geht zum Entscheidungsblock 422.
-
Im
Entscheidungsblock 422 untersucht die Früh-Flagerzeugungs/Steuerlogik 212 die
Zieloperandenmarke des Befehls, um festzustellen, ob das Frühergebnis 242 für ein Register
in der Architektur-Registerdatei 134 bestimmt ist. Trifft
dies zu, so geht der Ablauf zum Entscheidungsblock 424.
Andernfalls geht der Ablauf zum Entscheidungsblock 434.
-
Im
Entscheidungsblock 424 untersucht die Früh-Flagerzeugungs/Steuerlogik 212 den
Befehlstyp, um festzustellen, ob es sich um eine Befehlsart handelt,
die von dem Früh-Ausführungslogik/Adressgenerator 138 ausführbar ist.
D. h., die Früh-Flagerzeugungs/Steuerlogik 212 stellt
fest, ob sich der Befehl innerhalb der Untermenge von Befehlen befindet,
für die
der Früh-Ausführungslogik/Adressgenerator 138 konfiguriert
ist, um ein korrektes Frühergebnis
zu erzeugen, wobei unterstellt wird, dass die Quelloperanden gültig sind.
Trifft dies zu, so geht der Ablauf zum Entscheidungsblock 428.
Andernfalls geht der Ablauf zum Block 426.
-
Im
Block 426 erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 einen
Falsch-Wert auf
dem Frühergebnis-Gültigkeitssignal 244 und
aktualisiert das Gültigkeitsbit 218 gemäß dem Register
der Früh-Registerdatei 136,
das die Zieloperandenmarke 216 festlegt, mit dem Falsch-Wert,
da der Früh-Ausführungslogik/Adressgenerator 138 nicht
dafür konfiguriert
war, ein gültiges
Frühergebnis 242 für diesen Befehlstyp
zu erzeugen. Nun geht der Ablauf zum Entscheidungsblock 434.
-
Da
im Entscheidungsblock 428 der Früh-Ausführungslogik/Adressgenerator 138 dafür konfiguriert
war, ein gültiges
Frühergebnis 242 zu
erzeugen, stellt die Früh-Flagerzeugungs/Steuerlogik 212 fest,
ob alle zum Erzeugen des Frühergebnisses 242 verwendeten
Operanden gültig
waren. Es sei angemerkt, dass, falls die Früh-Flagerzeugungs/Steuerlogik 212 im
Entscheidungsblock 404 feststellt, dass der Befehl in der
A-Stufe 112 nicht
ausgeführt werden
darf, der Befehl in der R-Stufe 108 nicht abgebrochen wird,
da ein Operand fehlt. D. h., dass auch für einen ungültigen Registeroperanden aus
der Früh-Registerdatei 136 der
Befehl in der R-Stufe 108 nicht abgebrochen wird. Ist noch
kein Speicheroperand aus dem Speicher geladen, so wird in ähnlicher Weise
der Befehl in der R-Stufe 108 nicht abgebrochen. Ist der
Früh-Ausführungslogik/Adressgenerator 138 nicht
dafür konfiguriert,
eine gültige
Frühanforderung
für diesen
Befehlstyp zu erzeugen, so wird in ähnlicher Weise der Befehl in
der R-Stufe 108 nicht abgebrochen. Statt dessen wird das
Frühergebnis 242 im
Block 426 als ungültig
gekennzeichnet, und das korrekte Ergebnis wird später von
den Ausführungseinheiten 146 der
E-Stufe 124 berechnet. Im Gegensatz dazu werden Befehle,
die in der A-Stufe 112 ausgeführt wer den müssen, beispielsweise
ein Befehl, der eine Adresse berechnet, die dem Zugriff auf den
Datencache in der D-Stufe 116 dient, in der R-Stufe 108 abgebrochen,
falls die Operanden noch nicht verfügbar sind und/oder nicht gültig sind.
Sind alle zum Erzeugen des Frühergebnisses 242 verwendeten
Operanden gültig,
geht der Ablauf zum Block 432. Andernfalls geht der Ablauf
zum Block 426.
-
Im
Block 432 erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 einen
Wahr-Wert auf dem Frühergebnis-Gültigkeitssignal 244,
und sie aktualisiert das Gültigkeitsbit 218,
das zum Register der Früh-Registerdatei 136 gehört, das
von der Zieloperandenmarke 216 spezifiziert wird, mit dem Wahr-Wert,
da im Block 418 ein gültiges
Frühergebnis 242 erzeugt
wurde. Zusätzlich
wird das Register der Früh-Registerdatei 136,
das von der Zieloperandenmarke 216 spezifiziert wird, mit
dem Frühergebnis 242 aktualisiert.
Der Ablauf geht zum Entscheidungsblock 434.
-
Im
Entscheidungsblock 434 untersucht die Früh-Flagerzeugungs/Steuerlogik 212 den
Befehl, um festzustellen, ob es sich um eine Befehlsart handelt,
die das Architektur-EFLAGS-Register 162 modifiziert.
In einer Ausführungsform
werden Anweisungen, die die EFLAGS verändern, gemäß dem x86-Architekturbefehlssatz
angegeben. Verändert
der Befehl EFLAGS, so geht der Ablauf zum Block 436. Andernfalls
endet der Ablauf.
-
Im
Block 436 erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 den
Früh-EFLAGS-Wert 262 abhängig vom
Frühergebnis 242,
das der Früh-Ausführungslogik/Adressgenerator 138 erzeugt
hat, und abhängig
vom Befehl 206, und sie aktualisiert das Früh-EFLAGS-Register 142 mit
dem Früh-EFLAGS-Wert 262.
In einer Ausführungsform erzeugt
die Früh-Flagerzeugungs/Steuerlogik 212 einen
Wahr-Wert für
das Überlaufflag
(OF), falls die Zweierkomplementarithmetik für vorzeichenbehaftete Ganzzahlen,
die der Früh-Ausführungslogik/Adressgenerator 138 ausführt, um
das Frühergebnis 242 zu
erzeugen, eine Überlaufbedingung verursacht
(d. h., das Frühergebnis 242 ist
zu groß oder
zu klein, um in den Zieloperanden zu passen). Andernfalls erzeugt
sie einen Falsch-Wert. Die Früh-Flagerzeugungs/Steuerlogik 212 setzt
das Vorzeichenflag (SF) auf den Wert des höchstwertigen Bits des Frühergebnisses 242.
Die Früh-Flagerzeugungs/Steuerlogik 212 erzeugt
einen Wahr-Wert für das
Nullflag (ZF), falls das Frühergebnis 242 null
ist; andernfalls erzeugt sie einen Falsch-Wert. Die Früh-Flagerzeugungs/Steuerlogik 212 erzeugt
einen Wahr-Wert für
das Paritätsflag
(PF), falls das geringstwertige Byte des Frühergebnisses 242 eine
gerade Anzahl von 1-Bits enthält;
andernfalls erzeugt sie einen Falsch-Wert. Die Früh-Flagerzeugungs/Steuerlogik 212 er zeugt
einen Wahr-Wert für das Übertragsflag
(CF), falls die Arithmetik für
vorzeichenlose Ganzzahlen, die der Früh-Ausführungslogik/Adressgenerator 138 ausführt, um
das Frühergebnis 242 zu
erzeugen, eine Überlaufbedingung verursacht
(d. h., die arithmetische Operation erzeugte einen Übertrag
oder ein Ausborgen des höchstwertigen
Bits des Frühergebnisses 242).
Andernfalls erzeugt sie einen Falsch-Wert. In einer Ausführungsform
aktualisiert die Früh-Flagerzeugungs/Steuerlogik 212 nur
die besonderen Statusflags, die von dem Frühergebnis 242 beeinflusst
werden, und sie erzeugt keinen vollständigen Satz von Statusflags
zum Schreiben in das Früh-EFLAGS-Register 142.
In beiden Ausführungsformen
akkumuliert die Früh-Flagerzeugungs/Steuerlogik 212 die
Statusflags vorhergehender Befehle, bis sie vom Architektur-EFLAGS-Register 162 kopiert
werden. Dies wird im Weiteren anhand von 5 erklärt. Der
Ablauf geht zum Entscheidungsblock 438.
-
Im
Entscheidungsblock 438 stellt die Früh-Flagerzeugungs/Steuerlogik 212 fest,
ob die Veränderung
der EFLAGS vom Ergebnis des Befehls abhängt. Beispielsweise verändern in
einer Ausführungsform
gewisse Befehle die EFLAGS direkt, etwa die Befehle der x86-Architektur
STC (set carry), CLC (clear carry) oder CMC (complement carry).
Die Veränderung
hängt nicht
vom Befehlsergebnis ab, da es kein anderes Befehlsergebnis gibt
als die Modifizierung des Statusflags. Hängt das Modifizieren der EFLAGS
vom Ergebnis des Befehls ab, so geht der Ablauf zum Entscheidungsblock 442.
Andernfalls endet der Ablauf.
-
Im
Entscheidungsblock 442 untersucht die Früh-Flagerzeugungs/Steuerlogik 212 die
Frühergebnis-Gültigkeitsanzeige 244,
um festzustellen, ob das Frühergebnis 242 gültig ist.
Trifft dies zu, so endet der Ablauf. Andernfalls geht der Ablauf
zum Block 444.
-
Im
Block 444 erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 einen
Wert auf dem Steuersignal 264 zum Aktualisieren des Werts
im Früh-EFLAGS-gültig-Register 246,
der anzeigt, dass die im Früh-EFLAGS-Register 142 gespeicherten Statusflags
ungültig
sind. Man beachte, dass die Blöcke 434 bis 444 so
wirken, dass sie die Ungültigkeit des
Früh-EFLAGS-Registers 142 beibehalten,
wenn es einmal für
ungültig
erklärt
wurde, bis das Früh-EFLAGS-Register 142 wieder
für gültig erklärt wird,
siehe die folgende Beschreibung anhand von 5. Da Befehle,
die die EFLAGS direkt verändern, relativ
selten auftreten, werden in einer Ausführungsform zum Vereinfachen
der Früh-Flagerzeugungs/Steuerlogik 212 die
Früh-EFLAGS 142 für ungültig erklärt, wenn
ein Be fehl auftritt, der ein Statusflag direkt aktualisiert. Der
Ablauf endet im Block 444.
-
5 zeigt
ein Flussdiagramm, das die Arbeitsweise der Vorrichtung in 2 beim
Wiederherstellen und gültig
Erklären
des Früh-EFLAGS-Registers 142 gemäß der Erfindung
darstellt. 5 enthält zwei getrennte Flussdiagramme.
Jedes Flussdiagramm beschreibt das Wiederherstellen und gültig Erklären des
Früh-EFLAGS-Registers 142 abhängig von
einem unterschiedlichen Ereignis, das das Wiederherstellen und gültig Erklären auslöst. Für das erste
Ereignis beginnt der Ablauf im Block 502.
-
Im
Block 502 erreicht ein Verzweigungsbefehl die S-Stufe 126.
Muss der Verzweigungsbefehl korrigiert werden, d. h., hat der Verzweigungsvorhersager 132 den
Verzweigungsbefehl falsch vorhergesagt, und zwar entweder durch
eine Fehlvorhersage darüber,
ob der Verzweigung gefolgt wird, oder eine Fehlvorhersage der Verzweigungs-Zieladresse, so leert
die Spät-Verzweigungs-Korrekturlogik 148 die Pipeline 100 im
Zuge des Vorgangs, der die Fehlvorhersage korrigiert. Dies wird
unten anhand von 7 erläutert. Das Leeren der Pipeline 100 impliziert, dass
keine Befehle, die das Architektur-EFLAGS-Register verändern, in den Pipelinestufen
unter der R-Stufe 108 vorhanden sind. Anders formuliert
haben jegliche Befehle in der Pipeline, die das Architektur-EFLAGS-Register 162 modifizieren,
das Architektur-EFLAGS-Register 162 bereits aktualisiert,
oder sie wurden entfernt. Daher enthält das Architektur-EFLAGS-Register 162 den
alleraktuellsten Status. Es sei darauf hingewiesen, dass der korrigierte Verzweigungsbefehl
entweder ein bedingter oder ein unbedingter Verzweigungsbefehl sein
kann. Zudem kann das Früh-EFLAGS-Register 142 abhängig von anderen
Ereignissen wiederhergestellt werden, die bewirken, dass die Pipeline
geleert wird, oder Ereignisse, die keine Korrektur von Verzweigungsbefehlen sind,
beispielsweise Abbrüche.
Der Ablauf geht zum Entscheidungsblock 504.
-
Im
Entscheidungsblock 504 untersucht die Früh-Flagerzeugungs/Steuerlogik 212 das
verzweigungskorrigierte Spätsignal 268,
um festzustellen, ob der Verzweigungsbefehl der S-Stufe 126 von
der Spät-Verzweigungs-Korrekturlogik 148 korrigiert
wurde. Dies impliziert, dass die Pipeline 100 geleert wurde,
um die Fehlvorhersage zu korrigieren. Trifft dies zu, so geht der
Ablauf zum Block 506. Andernfalls endet der Ablauf.
-
Im
Block 506 kopiert die Früh-Flagerzeugungs/Steuerlogik 212 den
Wert des Architektur-EFLAGS-Registers 162 über das
Signal 262 in das Früh-EFLAGS-Register 142 und
markiert das Früh-EFLAGS-Register 142 über das
Signal 264 als gültig,
wo durch die Früh-EFLAGS 142 wieder
in einen gültigen
Zustand versetzt werden. Der Ablauf endet im Block 506.
-
Für das zweite
in 5 beschriebene Ereignis beginnt der Ablauf im
Block 512.
-
Im
Block 512 untersucht die Früh-Flagerzeugungs/Steuerlogik 212 das
Flagveränderungsbefehl-vorhanden-Signal 202,
um festzustellen, ob alle Befehle, die Architektur-EFLAGS-Register
verändern und
unter der A-Stufe 112 – wenn überhaupt – vorhanden
sind, das Architektur-EFLAGS-Register 162 aktualisiert
haben. Trifft dies zu, so geht der Ablauf zum Block 514.
Andernfalls endet der Ablauf.
-
Im
Block 514 kopiert die Früh-Flagerzeugungs/Steuerlogik 212 den
Wert des Architektur-EFLAGS-Registers 162 über das
Signal 262 in das Früh-EFLAGS-Register 142 und
markiert das Früh-EFLAGS-Register 142 über das
Signal 264 als gültig,
wodurch die Früh-EFLAGS 142 wieder
in einen gültigen
Zustand versetzt werden. Der Ablauf endet im Block 514.
-
Man
beachte, dass das Leeren der Pipeline 100 durch eine Verzweigungskorrektur
in der S-Stufe 126, die im Block 504 festgestellt
wird, ein Ereignis ist, das die Bedingung erzeugt, für die im
Block 512 eine Entscheidung erfolgt.
-
6 zeigt
ein Flussdiagramm, das die Arbeitsweise des Mikroprozessors 100 erläutert, wenn dieser
gemäß der Erfindung
eine frühe
Verzweigungskorrektur vornimmt. Der Ablauf beginnt im Block 602.
-
Im
Block 602 erreicht ein bedingter Verzweigungsbefehl die
J-Stufe 114. Der Ablauf geht zum Entscheidungsblock 604 über.
-
Im
Entscheidungsblock 604 untersucht die Früh-Verzweigungs-Korrekturlogik 144 die
Ausgabe des Früh-EFLAGS-gültig-Registers 246,
um festzustellen, ob das Früh-EFLAGS-Register 142 gültig ist. Trifft
dies zu, so geht der Ablauf zum Block 606. Andernfalls
endet der Ablauf. Ist das Früh-EFLAGS-Register 142 ungültig, so
führt die
Vorrichtung keine frühe
Korrektur bedingter Verzweigungen aus.
-
Im
Block 606 untersucht die Früh-Verzweigungs-Korrekturlogik 144 die
Inhalte des Früh-EFLAGS-Registers 142,
um festzustellen, ob die durch den Bedingungscode im bedingten Verzweigungsbefehl
festgelegte Bedingung erfüllt
ist. Der Ablauf geht zum Entscheidungsblock 608.
-
Im
Entscheidungsblock 608 prüft die Früh-Verzweigungs-Korrekturlogik 144,
ob es erforderlich ist, die Vorhersage des bedingten Verzweigungsbefehls
abhängig
vom Block 606 zu korrigieren. Der bedingte Verzweigungsbefehl
muss korrigiert werden, falls die Bedingung im Früh-EFLAGS-Register 142 erfüllt ist,
so dass der bedingte Verzweigungsbefehl hätte verfolgt werden müssen, der
Verzweigungsvorhersager 132 jedoch vorhergesagt hat, dass
der Verzweigung nicht gefolgt wird (angezeigt durch einen Falsch-Wert
der Version des Vorhergesagte-Verzweigung-genommen-Signals 208,
das durch die Pipeline in die J-Stufe 114 geführt wird),
d. h., den Mikroprozessor 100 veranlasst hat, den nächstfolgenden
Befehl zu holen. Im Gegensatz dazu muss der bedingte Verzweigungsbefehl korrigiert
werden, falls die Bedingung im gültigen Früh-EFLAGS-Register 142 nicht
erfüllt
ist, so dass der bedingte Verzweigungsbefehl nicht hätte verfolgt werden
sollen, der Verzweigungsvorhersager 132 jedoch vorhergesagt
hat, dass der Verzweigung gefolgt wird (angezeigt durch einen Wahr-Wert
der Version des Vorhergesagte-Verzweigung-genommen-Signals 208,
das durch die Pipeline in die J-Stufe 114 geführt wird),
d. h., den Mikroprozessor 100 veranlasst hat, zur vorhergesagten
Verzweigungs-Zieladresse zu verzweigen. Muss die Vorhersage des
bedingten Verzweigungsbefehls korrigiert werden, so geht der Ablauf
zum Entscheidungsblock 612. Andernfalls endet der Ablauf.
-
Im
Entscheidungsblock 612 ist bereits festgestellt worden,
dass der bedingte Verzweigungsbefehl korrigiert werden muss. Die
Früh-Verzweigungs-Korrekturlogik 144 untersucht
die in der Pipeline zur J-Stufe 114 weitergeleitete Version
des Vorhergesagte-Verzweigung-genommen-Signals 208, um
festzustellen, ob der bedingte Verzweigungsbefehl als zu nehmen
vorhergesagt wurde. Trifft dies zu, so geht der Ablauf zum Block 616.
Andernfalls geht der Ablauf zum Block 614.
-
Im
Block 614 weist die Früh-Verzweigungs-Korrekturlogik 144 die
I-Stufe 102 über
das Signal 154 an, die Pipeline 100 über der
J-Stufe 114 zu leeren und den Mikroprozessor 100 zur
Verzweigungs-Zieladresse des bedingten Verzweigungsbefehls zu verzweigen.
In einer Ausführungsform
wird die Verzweigungs-Zieladresse des bedingten Verzweigungsbefehls
vom Früh-Ausführungslogik/Adressgenerator 138 in
der A-Stufe 112 erzeugt. Zusätzlich erzeugt die Früh-Verzweigungs-Korrekturlogik 144 einen
Wahr-Wert auf dem
Verzweigung-früh-korrigiert-Signal 258,
das durch die Pipeline zur Spät- Verzweigungs-Korrekturlogik 148 geführt wird.
Deren Gebrauch wird anhand von 7 beschrieben.
Der Ablauf endet im Block 614.
-
Im
Block 616 weist die Früh-Verzweigungs-Korrekturlogik 144 die
I-Stufe 102 über
das Signal 154 an, die Pipeline 100 über der
J-Stufe 114 zu leeren und den Mikroprozessor 100 zum
nächstfolgenden
Befehl nach dem bedingten Verzweigungsbefehl zu verzweigen. Zusätzlich erzeugt
die Früh-Verzweigungs-Korrekturlogik 144 einen Wahr-Wert auf dem Verzweigung-früh-korrigiert-Signal 258,
das durch die Pipeline zur Spät-Verzweigungs-Korrekturlogik 148 geführt wird.
Deren Gebrauch wird anhand von 7 beschrieben.
Der Ablauf endet im Block 616.
-
7 zeigt
ein Flussdiagramm der Arbeitsweise des Mikroprozessors 100 beim
Ausführen
einer Spät-Verzweigungskorrektur
gemäß der Erfindung.
Der Ablauf beginnt im Block 702.
-
Im
Block 702 erreicht ein bedingter Verzweigungsbefehl die
S-Stufe 126. Der Ablauf geht zum Block 704.
-
Im
Block 704 untersucht die Spät-Verzweigungs-Korrekturlogik 148 die
Inhalte des Architektur-EFLAGS-Registers 162, um festzustellen,
ob die im Bedingungscode des bedingten Verzweigungsbefehls spezifizierte
Bedingung erfüllt
ist. Der Ablauf geht zum Entscheidungsblock 706.
-
Im
Entscheidungsblock 706 stellt die Spät-Verzweigungs-Korrekturlogik 148 fest,
ob es erforderlich ist, die Vorhersage des bedingten Verzweigungsbefehls
aufgrund des Blocks 704 zu korrigieren. Der bedingte Verzweigungsbefehl
muss korrigiert werden, falls die Bedingung im Architektur-EFLAGS-Register 162 erfüllt ist,
so dass der bedingte Verzweigungsbefehl hätte genommen werden müssen, der
Verzweigungsvorhersagen 132 jedoch vorhergesagt hat, dass
der Verzweigung nicht gefolgt wird (angezeigt durch einen Falsch-Wert
der Version des durch die Pipeline zur S-Stufe 126 geführten Vorhergesagte-Verzweigung-genommen-Signals 208), d.
h., den Mikroprozessor 100 veranlasst hat, den nächstfolgenden
Befehl zu holen. Im Gegensatz dazu muss der bedingte Verzweigungsbefehl
korrigiert werden, falls die Bedingung im Architektur-EFLAGS-Register 162 nicht
erfüllt
ist, so dass der bedingte Verzweigungsbefehl nicht hätte verfolgt werden
sollen, der Verzweigungsvorhersagen 132 jedoch vorhergesagt
hat, dass der Verzweigung gefolgt wird (angezeigt durch einen Wahr-Wert
der Version des Vorher gesagte-Verzweigung-genommen-Signals 208,
das durch die Pipeline in die S-Stufe 126 geführt wird),
d. h., den Mikroprozessor 100 veranlasst hat, zur vorhergesagten
Verzweigungs-Zieladresse zu verzweigen. Muss die Vorhersage des bedingten
Verzweigungsbefehls korrigiert werden, so geht der Ablauf zum Entscheidungsblock 708.
Andernfalls endet der Ablauf.
-
Im
Entscheidungsblock 708 untersucht die Spät-Verzweigungs-Korrekturlogik 148 das
Verzweigung-früh-korrigiert-Signal 258,
um festzustellen, ob die Fehlvorhersage des bedingten Verzweigungsbefehls
bereits von der Früh-Verzweigungs-Korrekturlogik 144 korrigiert
worden ist. Trifft dies zu, so endet der Ablauf. Andernfalls geht
der Ablauf zum Entscheidungsblock 712.
-
Im
Entscheidungsblock 712 untersucht die Spät-Verzweigungs-Korrekturlogik 148,
nachdem sie festgestellt hat, dass der bedingte Verzweigungsbefehl
korrigiert werden muss, die durch die Pipeline in die S-Stufe 126 geführte Version
des Vorhergesagte-Verzweigung-genommen-Signals 208,
um festzustellen, ob der bedingte Verzweigungsbefehl als zu nehmen
vorhergesagt wurde. Trifft dies zu, so geht der Ablauf zum Block 716.
Andernfalls geht der Ablauf zum Block 714.
-
Im
Block 714 weist die Spät-Verzweigungs-Korrekturlogik 148 die
I-Stufe 102 über
das Signal 154 an, die Pipeline 100 über der
S-Stufe 126 zu leeren und den Mikroprozessor 100 zur
Verzweigungs-Zieladresse des bedingten Verzweigungsbefehls zu verzweigen.
Der Ablauf endet im Block 714.
-
Im
Block 716 weist die Spät-Verzweigungs-Korrekturlogik 148 die
I-Stufe 102 über
das Signal 154 an, die Pipeline 100 über der
S-Stufe 126 zu leeren und den Mikroprozessor 100 zum
nächstfolgenden
Befehl nach dem bedingten Verzweigungsbefehl zu verzweigen. Der
Ablauf endet im Block 716.
-
Der
obigen Beschreibung kann man entnehmen, dass der vorgestellte Mikroprozessor 100 in
der Lage ist, ein Ergebnis eines vorhergehenden Befehls als Registeroperand
an einen nachfolgenden Adresserzeugungs- oder Nicht-Adresserzeugungs-Befehl
zu liefern, und zwar zahlreiche Taktzyklen früher als ein Mikroprozessor,
der nicht die Vorteile des Früh-Ausführungslogik/Adressgenerators 138 und
der Früh-Registerdatei 136 aufweist.
Dadurch verringert sich die Anzahl der auftretenden Pipelineblasen.
Weniger Pipelineblasen senken die mittlere Taktanzahl pro Befehl,
die eine Hauptkomponente der Mikroprozessorleistungsfähigkeit
darstellt. Zudem kann man die Frühergebnisse
dazu verwenden, Statusflags früher
zu aktualisieren als dies bisher möglich war. Dadurch wird das
Ausführen
von bedingten Befehlen möglicherweise
früher
machbar als dies bisher zu erreichen war. Ferner ist der beschriebene
Mikroprozessor 100 in der Lage, einen unkorrekt vorhergesagten
bedingten Verzweigungsbefehl zahlreiche Taktzyklen früher zu korrigieren
als ein Mikroprozessor, der den Vorzug der Früh-Verzweigungs-Korrekturlogik 144 nicht
aufweist. Schließlich veranlasst
die Nachfrage nach höheren
Mikroprozessor-Taktfrequenzen die Entwickler von Mikroprozessoren,
die Anzahl der Pipelinestufen zu erhöhen. Mit immer mehr Pipelinestufen
kann die Anzahl der auftretenden Pipelineblasen wachsen, die auf
Befehlsergebnisse und/oder Statusflagaktualisierungen warten. In
vergleichbarer Weise kann die Verzögerung bei der Korrektur falsch
vorhergesagter Verzweigungsbefehle ebenfalls zunehmen, wenn die
Anzahl der Pipelinestufen wächst.
Diese Tatsachen bekräftigen
die Vorteile des oben beschriebenen Mikroprozessors und der dargestellten
Vorrichtungen und Verfahren.
-
Obwohl
die Erfindung und ihre Aufgaben, Merkmale und Vorteile ausführlich beschrieben
sind, schließt
die Erfindung weitere Ausführungsformen ein.
Obwohl beispielsweise eine Mikroprozessorausführungsform beschrieben ist,
die im Wesentlichen mit der x86-Architektur übereinstimmt, sind die beschriebenen
Vorrichtungen und Verfahren nicht auf die x86-Architektur eingeschränkt, und
man kann sie in verschiedenen Mikroprozessorarchitekturen verwenden.
Obgleich eine Ausführungsform
dargestellt ist, in der ein bedingter Verzweigungsbefehl früh korrigiert
wird, können
zusätzlich
Vorteile der frühen
Statusflagerzeugung dazu verwendet werden, andere Befehle frühzeitig
auszuführen,
beispielsweise den x86-Befehl LOOPcc, wobei diesem Fall die gleichen Vorzüge innewohnen
wie dem Fall des Jcc-Befehls. Es können auch die x86-Befehle SETcc
und CMOVcc frühzeitig
ausgeführt
werden, so dass ihre Ergebnisse für nachfolgende abhängige Anweisungen
verfügbar
sein können. Über die
Verwendung der Frühergebnisse
zum Erzeugen von frühen
Statusflagwerten hinaus können
die Frühergebnisse
weiterhin auch dazu verwendet werden, frühe Verzweigungskorrekturen
von indirekten Verzweigungsbefehlen vorzunehmen, die gemeinhin als "Sprung-über-Register-Befehle" bezeichnet werden
und die Verzweigungs-Zieladresse als Quellregister-Operandenwert angeben.
-
Zusätzlich zu
Implementierungen der Erfindung mit Hilfe von Hardware kann man
die Erfindung in computerlesbarem Code ausführen (z. B. computerlesbarem
Programmcode, Daten usw.), der in einem computernutzbaren (z. B.
lesbaren) Medium un tergebracht ist. Der Computercode bewirkt die
Ermöglichung
oder Herstellung der Funktionen der hier offenbarten Erfindung oder
beides. Man kann dies beispielsweise durch den Gebrauch von allgemeinen Programmiersprachen
(z. B. C, C++, JAVA usw.) erreichen, durch GDSII-Datenbanken, durch
Hardware-Beschreibungssprachen (HDL), zu denen Verilog HDL, VHDL,
Alters HDL (Alters Hardware Description Language) und weitere gehören, oder
durch andere Programmier- und Schaltungserfassungswerkzeuge (d.
h. für
Schaltpläne),
die verfügbar
sind. Man kann den Computercode in jedem bekannten computerverwendbaren
(z. B. lesbaren) Medium unterbringen, etwa Halbleiterspeicher, magnetische Disks,
optische Disks (z. B. CD-ROM, DVD-ROM usw.), und in einem Computerdatensignal,
das in einem computernutzbaren (z. B. lesbaren) Übertragungsmedium (z. B. Trägerwellen
oder irgendein anderes Medium einschließlich digitaler, optischer
oder analoger Medien) ausgeführt
ist. Damit kann der Computercode über Kommunikationsnetze übertragen
werden, zu denen Internets und Intranets gehören. Natürlich kann die Erfindung als
Computercode ausgeführt
werden (z. B. als Teil eines IP-Kerns
(IP = Intellectual Property, geistiges Eigentum), etwa eines Mikroprozessorkerns,
oder als Entwurf auf Systemebene, beispielsweise als System an Chip
(SOC)) und als Teil der Herstellung integrierter Schaltungen in Hardware
transformiert werden. Die Erfindung kann auch als Kombination von
Hardware und Computercode ausgeführt
werden.
-
Schließlich sollten
Fachleute zur Kenntnis nehmen, dass sie die offenbarte Konzeption
und die besonderen Ausführungsformen
leicht als Grundlage für
den Entwurf oder für
das Modifizieren anderer Strukturen verwenden können und damit die gleichen Zwecke
der Erfindung erfüllen,
ohne den Bereich der Erfindung zu verlassen, der durch die beigefügten Ansprüche bestimmt
ist.