DE19945940C2 - Verfahren und Vorrichtung zur Bearbeitung bedingter Sprungbefehle in einem Prozessor mit PIPELINE-Rechnerarchitektur - Google Patents
Verfahren und Vorrichtung zur Bearbeitung bedingter Sprungbefehle in einem Prozessor mit PIPELINE-RechnerarchitekturInfo
- Publication number
- DE19945940C2 DE19945940C2 DE19945940A DE19945940A DE19945940C2 DE 19945940 C2 DE19945940 C2 DE 19945940C2 DE 19945940 A DE19945940 A DE 19945940A DE 19945940 A DE19945940 A DE 19945940A DE 19945940 C2 DE19945940 C2 DE 19945940C2
- Authority
- DE
- Germany
- Prior art keywords
- processor
- command
- instruction
- jump
- condition
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn - After Issue
Links
- 238000000034 method Methods 0.000 title claims abstract description 13
- 230000009191 jumping Effects 0.000 claims 1
- 230000008569 process Effects 0.000 description 5
- 238000006073 displacement reaction Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 229940036310 program Drugs 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
Verfahren und Vorrichtung zur Bearbeitung bedingter Sprungbefehle in einem Prozessor mit "Pipelined"-Architektur, wobei jedem Befehl, nach dem ein bedingter Sprung ausgeführt werden soll, ein oder mehrere zusätzliche Bits hinzugefügt werden, die angeben, unter welcher Bedingung der bedingte Sprung auszuführen ist. Zusätzlich kann die Vorrichtung eine Vorrichtung zur Veränderung des Programmzählerstandes in Abhängigkeit von den zusätzlichen Bits zur Ausführung der bedingten Sprünge umfassen.
Description
Die vorliegende Erfindung betrifft ein Verfahren und eine
Vorrichtung zur Bearbeitung bedingter Sprungbefehle in einem
Prozessor mit PIPELINE-Rechnerarchitektur.
Die US 5136697 beschreibt die Bearbeitung bedingter Sprungbe
fehle in einem Prozessor. Der Prozessor weist dabei einen In
struction-Cache-Speicher, einen Verzweigungs-Vorhersage-Fifo-
Speicher und eine Verzweigungsbefehlseinheit auf. Die Auswer
tung der Befehlsreihenfolge zur Ausführung des Sprungbefehls
erfolgt durch die Verzweigungsbefehlseinheit, die das ausge
wertete Ergebnis an den Fifo-Speicher abgibt. Die Instrukti
onsblöcke werden in den Instruktions-Cache-Speicher geladen
wobei jeder Instruktions- bzw. Befehlsblock mehrere Befehle
und zugehörige Befehlsladeinformationen aufweist. Die Be
fehlsladeinformation umfasst einen Nachfolger-Index mit einem
Nachfolger-Gültigkeitsbit bzw. Sucessor-Valid-Bit. Falls das
Nachfolger-Gültigkeitsbit gesetzt ist, wird eine Adresse ge
neriert, die den Ort für einen Verzweigungsbefehl innerhalb
des Befehls-Cache-Speichers angibt und eine Zielverzweigungs
adresse.
Die Anzahl der benötigten Zyklen für die Ausführung bestimm
ter Befehle ist eines der wichtigsten Leistungsmerkmale eines
Prozessors. Um maximale Verarbeitungsgeschwindigkeit und mi
nimalen Leistungsverbrauch zu erreichen, soll die Anzahl der
Zyklen möglichst minimiert werden. Zu diesem Zweck kennt der
Stand der Technik bereits Prozessoren mit der sogenannten
PIPELINE-Rechnerarchitektur. Dies bedeutet, dass der Prozes
sor mehrere Befehle gleichzeitig abarbeitet, wobei sich jeder
Befehl in einer anderen Stufe der Bearbeitung befindet. Bei
spielsweise wird ein Befehl gerade ausgeführt, der nächste
wird gleichzeitig schon decodiert, der übernächste aus dem
Speicher angefordert, etc.
In einer solchen PIPELINE-Rechnerarchitektur kann insbesonde
re ein bedingter Sprungbefehl (branch) zum sogenannten "har
zard" führen, wodurch dann sogar falsche Ergebnisse entstehen
können. Bei einem bedingten Sprungbefehl liegt nämlich erst
nach Abarbeitung dieses bedingten Sprungbefehls die Adresse
des nächstfolgenden Befehls fest. Auf diese Weise kann also
der nächstfolgende Befehl erst dann aus dem Speicher angefor
dert und decodiert werden, wenn das Ergebnis der Ausführung
des vorigen Befehls aus dem Rechenwerk des Prozessors zur
Verfügung steht.
Gemäß dem bisherigen Stand der Technik wurde dieses "hazard"-
Problem dergestalt gelöst, daß direkt nach dem Sprungbefehl
so viele Dummy-Befehle (NOP), also No-Operation- oder Warte
befehle eingefügt werden, daß die Ergebnisse auf jeden Fall
richtig bleiben. Dadurch werden allerdings auch so viele Pro
zessorzyklen nicht ausgenutzt, wie Dummy-Befehle abgearbeitet
werden müssen.
Es ist daher die Aufgabe der vorliegenden Erfindung, die Be
arbeitung bedingter Sprungbefehle in einem Prozessor mit ei
ner PIPELINE-Rechnerarchitektur ohne einen so großen Verlust
an Prozessorzyklen durch Dummybefehle zu ermöglichen.
Erfindungsgemäß wird diese Aufgabe durch ein Verfahren zur
Bearbeitung bedingter Sprungbefehle in einem Prozessor mit
PIPELINE-Rechnerarchitektur gelöst, bei der jedem Befehl,
nach dem ein bedingter Sprung ausgeführt werden soll, ein o
der mehrere zusätzliche Bits hinzugefügt werden, die angeben,
unter welcher Bedingung der bedingte Sprung auszuführen ist.
Auf dieses Weise kann bereits ein Befehl früher festgestellt
werden, ob eine Verzweigung (branch) durchzuführen ist, oder
nicht. Damit steht bereits ein Befehl früher fest, welches
der nächste Befehl nach dem bedingten Sprung sein wird. Durch
diese "branch-prediction" im Befehlssatz ist es also möglich,
wesentlich früher das Sprungziel eines bedingten Sprungbe
fehls festzustellen.
Dabei ist es besondere bevorzugt, daß zusätzlich zu jedem Be
fehl, nach dem ein bedingter Sprung ausgeführt werden soll,
die entsprechende Sprungadresse zugefügt wird. Auf diese Wei
se ist einen Befehl früher nicht nur bekannt, ob ein beding
ter Sprung durchgeführt werden soll oder nicht, sondern es
ist bereits die entsprechende neue Zieladresse bekannt. Damit
kann bereits der richtige Befehl aus dem Arbeitsspeicher des
Prozessors angefordert werden.
Weiter können vorzugsweise zusätzlich jedem Befehl ein oder
mehrere Bits hinzugefügt werden, die angeben, unter welchen
Bedingungen der Befehl überhaupt auszuführen ist.
Zur weiteren Optimierung der Arbeitsgeschwindigkeit des Pro
zessors ist es dabei besonders bevorzugt, bei jedem der Be
fehle mit einem oder mehreren zusätzlichen Bits parallel zur
Ausführung des Befehls die dem oder den Bits entsprechenden
Flags (z. B. zero, carry, overflow) im Prozessor zu prüfen,
wenn das entsprechende Bit gesetzt ist, und abhängig von die
sem Ergebnis den Programmzähler des Prozessors entsprechend
einzustellen.
Die Aufgabe der vorliegenden Erfindung wird ebenso durch eine
Vorrichtung zur Bearbeitung bedingter Sprungbefehle in einem
Prozessor mit PIPELINE-Rechnerarchitektur gelöst, in dem eine
Vorrichtung zur Veränderung des Programmzählerstandes zur
Ausführung der bedingten Sprünge vorgesehen ist.
Dabei ist es besonders bevorzugt, wenn die Vorrichtung zur
Veränderung des Programmzählerstandes einen oder mehrere Ein
gänge für entsprechende zusätzliche Bits in den Maschinenbe
fehlen des Prozessors und einen oder mehrere Eingänge für die
entsprechenden "Flag"-Signale aus dem Rechenwerk des Prozes
sors aufweist.
Es ist dabei besonders vorteilhaft, wenn sichergestellt ist,
daß die entsprechenden zusätzlichen Bits aus den Maschinenbe
fehlen gleichzeitig mit den zugehörigen "Flag"-Signalen an
der Vorrichtung zur Veränderung des Programmzählerstandes an
liegen.
Vorzugsweise ist die Vorrichtung zur Veränderung des Pro
grammzählerstandes mit einem Addierwerk ausgerüstet.
Die Vorliegende Erfindung wird im folgenden anhand der in der
Anlage beigefügten Zeichnungen näher erläutert. Es zeigen:
Fig. 1 den Arbeitsablauf eines Prozessors mit zweistufiger
Pipeline;
Fig. 2 den Aufbau eines erfindungsgemäßen 22 Bit langen Ma
schinenbefehls;
Fig. 3 den Aufbau eines erfindungsgemäßen 25 Bit langen Ma
schinenbefehls;
Fig. 4 eine schematische Darstellung einer erfindungsgemäßen
Vorrichtung zur Veränderung des Programmzählerstandes zur
Ausführung bedingter Sprünge;
Fig. 5 eine weitere erfindungsgemäße Vorrichtung zur Verän
derung des Programmzählerstandes zur Ausführung bedingter
Sprünge;
Fig. 6 eine schematische Darstellung des Gesamtaufbaus eines
Prozessors mit PIPELINE-Rechnerarchitektur zur Ausführung be
dingter Sprungbefehle mit der erfindungsgemäßen "branch-
prediction"; und
Fig. 7 eine detaillierte Darstellung eines Prozessors mit
Vorrichtungen zur erfindungsgemäßen "branch-prediction".
Die vorliegende Erfindung geht von einer PIPELINE-
Rechnerarchitektur für einen Prozessor aus. Diese ist bei
spielsweise in dem Buch "Computer Organisation and Design"
von Pattersen & Hennessy beschrieben.
Kurz gefaßt bedeutet die PIPELINE-Rechnerarchitektur folgen
des:
Normalerweise wird jeder Maschinenbefehl von einem Prozessor mittels folgender Operationen abgearbeitet:
Normalerweise wird jeder Maschinenbefehl von einem Prozessor mittels folgender Operationen abgearbeitet:
- 1. Instruction fetch (Laden des Befehls)
- 2. Instruction decoding (Dekodieren des Befehls)
- 3. Execution (Ausführung des Befehls)
- 4. Write back (Zurückschreiben der Ergebnisse)
Es ist bereits im Stand der Technik bekannt, diese Operatio
nen teilweise parallel ablaufen zu lassen, indem ein Befehl
beispielsweise gerade ausgeführt wird, während bereits der
nächste Befehl dekodiert wird. Diese Vorgehensweise ist in
der Fig. 1 für eine zweistufige Pipeline dargestellt.
Ein Prozessor nutzt die "Pipeline" also, um im Schnitt einen
Befehl pro Prozessorzyklus zu verarbeiten.
Diese PIPELINE-Rechnerarchitektur des Prozessors führt aller
dings dann zu Problemen, wenn bedingte Sprungbefehle ausge
führt werden sollen. Dieses Problem wird in der Fachsprache
"branch harzard" genannt. Dies bedeutet, dass ein "branch"-
Befehl, also ein bedingter Sprungbefehl, erst nach Ausführung
des vorigen Befehls zeigen kann, ob der nächste Befehl weiter
bearbeitet oder auf eine andere Zieladresse gesprungen werden
soll.
Im Stand der Technik löst man dieses Problem, indem der Takt
nach dem bedingten Sprungbefehl mit einem "No operation"-
Befehl, also einem Befehl, einen Prozessorzyklus zu warten,
gefüllt wird. Dann ist zwar auf jeden Fall sichergestellt,
daß das Programm richtig weiterläuft, man verliert aber einen
Prozessorzyklus und damit die maximal mögliche Rechenleis
tung. Der bisherige Stand der Technik soll anhand der folgen
den Beispiele, die jeweils die Berechnung des Absolut-Betrags
einer Zahl behandeln, näher erläutert werden:
Zum einen gibt es die Möglichkeit der bedingten Ausführung, also beispielsweise:
Zum einen gibt es die Möglichkeit der bedingten Ausführung, also beispielsweise:
Diese Art der Ausführung ist jedoch nur möglich, wenn nur ein
einziger Befehl bedingt ausgeführt werden muß, und dieser Be
fehl keinen Sprung enthält. Bei komplexeren Funktionen oder
Aufgaben, die nicht mehr nur mit einem Befehl dargestellt
werden können, muß jeweils ein bedingter Sprung erfolgen, wie
dies im folgenden Programm dargestellt ist. Wie aus dem ein
gerahmten Programmabschnitt erkennbar ist, muß nach den bei
den Sprungbefehlen ein "no operation"-Befehl eingefügt werden
(im Falle einer zweistufigen Pipeline, bei längeren Pipelines
entsprechend mehr "no operation"-Befehle:
Schließlich gibt es im Stand der Technik noch die Möglichkeit
der sogenannten spekulativen Ausführung. Das bedeutet, daß
man einfach eine Möglichkeit ausführt, und hofft, mit einer
Wahrscheinlichkeit von etwas mehr als 50% die richtige Fort
setzung zu treffen. Dies erfordert aber einen ganz erhebli
chen Hardware-Aufwand, da ja dann im Falle des Nichtzutref
fens der Vermutung einige Befehle "rückabgewickelt" werden
müssen. Außerdem gehen trotzdem Prozessorzyklen verloren,
wenn man sich "verschätzt" hat.
Gemäß dem Stand der Technik gab es also bisher keine geeigne
te Lösung für dieses Problem, daß ein solcher "branch har
zard", also ein Problem bei der bedingten Verzweigung, einen
Verlust an Arbeitszyklen des Prozessors in einer "Pipelined"-
Architektur bewirkte. Erfindungsgemäß wird nun durch eine
Kombination eines Befehls mit "bedingter Ausführung" und ei
nes "Sprungarithmetik"-Befehls dieses Problem folgendermaßen
gelöst:
Hier soll wieder ein einfaches Beispiel betrachtet werden, nämlich der Befehl "Addiere R2 zu R1, wenn R1 dann = 0 ist, springe nach L1". Dieses Programm wird in "C" wie folgt ge schrieben:
Hier soll wieder ein einfaches Beispiel betrachtet werden, nämlich der Befehl "Addiere R2 zu R1, wenn R1 dann = 0 ist, springe nach L1". Dieses Programm wird in "C" wie folgt ge schrieben:
Erfindungsgemäß wird dafür der Maschinenbefehl ADD R1, R2,
#JMP, ON ZERO, verwendet. #JMP bedeutet dabei die relative
Sprungadresse zum Einsprungspunkt L1.
Damit erweitern wir einmal den Befehl um eine "Post-
Condition" zur bekannten "Pre-condition". Zum Beispiel: P1,
ADD R1, R2, #JMP, Q1.
Dabei bedeutet P1: Ausführen von R1 = R1 + R2 wenn P1 erfüllt
ist. Erfindungsgemäß bedeutet Q1: Ausführen von Sprung um JMP
wenn Q1 nach der Berechnung von R1 = R1 + R2 erfüllt ist.
Damit könnte man das folgende "C"-Programm:
folgendermaßen in Maschinencode übersetzen:
Erfindungsgemäß können also in der Befehlscodierung sowohl
Bits für "Pre-Conditions" als auch Bits für
"Post-Conditions" vorgesehen werden, wie dies beispielsweise
in Fig. 2 und 3 dargestellt ist.
Fig. 2 zeigt dabei ein vereinfachtes Beispiel mit einem le
diglich 22 Bit langen Befehl, wobei ein Bit 1 für die "Pre-
Condition" ein Bit 2 für die "Post-Conditions", 8 Bit 3 bis
10 für den relativen Sprungwert (Displacement) und dann wie
üblich je drei Bits für die beiden Registeradressen und 6 Bit
für den Befehlscode vorgesehen sind.
In der Realität ist es üblicherweise erforderlich, mehrere
Bedingungen als "Pre-condition" und "Post-Condition" zu prüfen.
Es müssen deshalb entsprechend mehr Bits vorgesehen wer
den, wie dies in Fig. 3 dargestellt ist.
In Fig. 3 enthalten die Bits 0 bis 1 die Informationen für
Post condition, die Bits 2 und 3 Information für Pre-
Conditions, die Bits 4 bis 10 die relative Sprungadresse,
d. h. die Sprungweite.
Besonders wirkungsvoll läßt sich das erfindungsgemäße Verfah
ren im Zusammenhang mit einer Programmschleife einsetzten,
beispielsweise für das folgende "C"-Programm:
Erfindungsgemäß kann dies dann in das folgende erheblich ver
einfachte Maschinenprogramm umgesetzt werden:
Dabei bedeutet die "Post condition Q1": Bedingter Sprung,
wenn das Ergebnis R1 = R1 - 1 nicht 0 ist.
Ein weiteres Beispiel für die erfindungsgemäß erzielbaren
Vereinfachungen bei der Programmierung ist das im folgenden
dargestellte Programm für die Abarbeitung eines Ringpuffers.
Gemäß dem Stand der Technik hätte dieses Programm wie folgt
programmiert werden müssen:
Erfindungsgemäß genügen statt dessen die folgenden beiden Be
fehle:
Es ist jedoch zu beachten, daß diese erfindungsgemäße Lösung
nicht für alle Schleifenstrukturen anwendbar ist. Schleifen
strukturen aller Art können jedoch erfindungsgemäß wie folgt
programmiert werden:
Erfindungsgemäß wird anstelle des üblichen Subtraktions-
Maschinenbefehls SUB ein Maschinenbefehl SUBI verwendet, der
erweitert ist, so daß er ein Flag-Bit aufweist, welches dazu
benutzt wird, einen Zyklus vor dem bedingten Sprungbefehl BNZ
anzuzeigen, was die richtige Verzweigung beim bedingten
Sprung ist, so daß im Falle einer zweistufigen Pipeline über
haupt kein Verlust an Prozessorzyklen auftritt. Der Befehl
LDI zeigt einen Schleifenbeginn an.
Die typische Lösung zur Vermeidung des "branch harzard" be
ruht darauf, eine Vorhersage über das zu erwartende Sprung
ziel des bestimmten Sprunges zu machen.
Die Implementierung einer Schleife erfordert im allgemeinen
diese drei Schritte:
- 1. Initialisiere den Schleifenzähler
- 2. Dekrementiere oder inkrementiere den Schleifenzähler
- 3. Springe am Ende der Schleife
Der Zyklenverlust bei dem bedingten Sprung beruht darauf, daß
die nächste Instruktion, die nach dem Sprung ausgeführt wird
abhängig von der Erfüllung der Schleifenbedingung ist. Diese
Tatsache führt dazu, daß nach dem bedingten Sprungbefehl der
Dummy-Befehl NOP eingefügt werden muß. Durch Verwendung eines
Schleifen-Flags in einem Rechenbefehl wie ADD oder SUB kann
die Schleifenbedingung am Ende der Ausführung des Additions-
oder Subtraktionsbefehls geprüft werden. Dann kann das "Zero-
flag", d. h. die Anzeige des Rechenwerks, daß es auf 0 steht,
geprüft werden, um zu entscheiden, auf welche Adresse der
Programmzähler des Prozessors gesetzt werden sollte. Das
"LOOP-flag" kann als "ENABLE-DISABLE-flag" oder allgemeiner
als Adressverschiebung interpretiert werden.
Fig. 4 zeigt das einfachste Grundprinzip für die erfindungs
gemäße Implementierung eines "LOOP"-flags.
Der Programmspeicher 10 wird hierbei über einen Multiplexer
12 mit dem Programmzähler 14 verbunden. Der Ausgang des Pro
grammzählers (PC) 14 ist mit einem logischen Gatter 16 ver
bunden, welches den Ausgangswert des Programmzählers mit ei
ner Konstante oder dem LOOP-flag verknüpft. Der Ausgang die
ser Logik-Schaltung 16 ist mit dem einen Eingang des Multi
plexers (MUX) 12 verbunden, dessen anderer Eingang ja mit dem
Programmspeicher 10 verbunden ist, und dessen Ausgang mit dem
Programmzähler 14 verbunden ist. Der Multiplexer 12 wird über
ein Steuersignal (Control) vom Prozessor gesteuert.
Eine weitere Verbesserung der Erfindung erlaubt den Verzicht
auf den Sprungbefehl, indem der Beginn der Schleife gepuffert
wird:
Hierbei ist ein zuätzlicher Befehl LDP erforderlich, der an
zeigt, daß eine Schleife beginnt. Die nächste Programmcodead
resse wird dann als Schleifenbeginn gepuffert. Das selbe Re
sultat könnte man auch erzielen, indem man den Befehl LDI
verwendet und den nächsten Programmzählerwert explizit in den
Puffer lädt. Hierdurch wird aber natürlich wieder ein zusätz
licher Befehl benötigt. Der Befehl SUBI weist ein Loop-flag
auf, welches dazu dient, anzuzeigen, welches die richtige
Verzweigung bei dem bedingten Sprung ist. Das zero-flag wird
geprüft, um zu entscheiden, ob man zum Beginn der Schleife
zurückspringen soll, oder die nächste Instruktion (NEXT_INS)
ausführen soll, die durch #-Loop-Flag angezeigt ist.
Für diese vereinfachte Bearbeitung von Schleifenstrukturen
ist eine etwas kompliziertere Struktur der erfindungsgemäßen
Schaltung erforderlich, wie sie in Fig. 5 dargestellt ist.
Ähnlich wie in Fig. 4 ist auch hier ein Programmspeicher 10
vorgesehen, der mit dem Eingang eines Multiplexers 12 verbun
den ist, dessen Ausgang wiederum mit dem Programmzähler (PC)
14 verbunden ist. Der Ausgang des Programmzählers (PC) 14,
ist ebenfalls mit einem logischen Gatter 16 verbunden, wel
ches den Ausgangswert des Programmzählers mit dem Loop-Flag
verknüpft. Der Ausgang dieser Logik-Schaltung 16 ist mit ei
nem weiteren Eingang des Multiplexers (MUX) 12 verbunden. Im
vorliegenden Fall weist jedoch der Mulitplexer 12 einen wei
teren Eingang auf, der mit einem Puffer 18 verbunden ist,
dessen Eingang mit dem Wert des Programmzählers 14 geladen
werden kann. Auf diese Weise erübrigt sich der explizite Be
fehl "Lade den nächsten Programmzählerstand in den Puffer".
Die Fig. 6 zeigt den gesamten Aufbau eines Prozessors mit der
Fähigkeit, die erfindungsgemäßen Befehle abzuarbeiten. Glei
che Elemente wie in den Fig. 4 und 5 sind auch hier mit glei
chen Bezugszeichen versehen. Der Programmzähler (PC) 14
greift wiederum auf den Programmcodespeicher 10, und dabei
jeweils auf die abzuarbeitende Programmzeile zu. Vom Pro
grammspeicher 10 wird der entsprechende Instruction Code (Be
fehlscode) dem Befehlsdecoder (IDEC) 20 zugeführt. Dieser
gibt die entsprechenden Steuerbefehle an das Rechenwerk (ALU)
22 und an den Registersatz 24 weiter. Die Inhalte der Regis
ter werden dann nach Bedarf in das Rechenwerk 22 geladen, o
der von dort wieder zurückgeschrieben, wie dies mit den Pfei
len angedeutet ist. Die Flag-Signale zero, carry und overflow
des Rechenwerks 22 werden gleichzeitig sowohl dem Befehlsde
coder (IDEC) 20 als auch dem Steuereingang des Multiplexers
(MUX) 12 zugeführt. Die beiden Eingänge des Multiplexers 12
sind mit dem Wert 1 und mit dem vom Befehlsdecoder 20 gelie
ferten relativen Sprungwert #JMP belegt. Der Ausgang des Mul
tiplexers 12 ist mit einem Addierwerk 16 verbunden, dessen
anderer Eingang mit dem Ausgang des Programmzählers 14 ver
bunden ist.
Bei mehr als zwei Pipelined-Stufen ist zu beachten, daß die
Flag-Signale zero, carry, overflow und der zugehörige relati
ve Sprungwert #JMP gleichzeitig am Multiplexer 12 anliegen
müssen. Bei einer zweistufigen Pipeline, wie bei dem vorlie
genden Ausführungsbeispiel beschrieben, ist dies jedoch
nicht erforderlich. Im folgenden wird nun die entsprechende
Befehlscodierung mit der erfindungsgemäßen "Post-condition"
beschrieben. Hierzu wenden wir uns nochmals der Fig. 2 zu,
die den einfachstmöglichen erfindungsgemäßen Befehlssatz mit
einer Länge von 22 Bit darstellt.
Die obersten 6 Bit (21 bis 16) enthalten dabei den Befehls
code (OPCODE), beispielsweise: Addition. Die nächsten drei
Bits enthalten die Adresse des ersten Registers (REG A)mit
drei Bit Länge (übliche Prozessoren verwenden meist nicht
mehr als 8 Register) auf den Bits 15, 14, 13, sodann folgt
die Registeradresse des zweiten, im vorliegenden Fall zu ad
dierenden Registers (REG B) auf den Bits 12, 11 und 10.
Das Rechenwerk des Prozessors wird bei diesem Befehl also den
Inhalt der Register A und B addieren und ins Register able
gen. Erfindungsgemäß sind diesem Befehl nun weitere Bits an
gefügt, nämlich die Bits 9 bis 2 (displacement), die die re
lative Sprungweite bei einem folgenden bedingten Sprung ange
ben. Sodann folgen die Condition-Bits 1 und 0, wobei das Bit
1 (Post) die Post-condition angibt, während das Bit 0 (PRE)
die Pre-condition angibt.
Der Bearbeitungsablauf ist dabei nun folgendermaßen: Der Be
fehl muß abgeholt und decodiert werden. Dazu startet der Pro
zessor an einem bestimmten Programmzählerstand, z. B. PC = 0.
Mit diesem Programmzählerstand wird ein Befehl von 22 Bit aus
dem Programmspeicher abgeholt, der an der diesem Programmzäh
lerstand entsprechenden Adresse im Speicher steht.
Der Befehl wird sodann vom Instruction-Decoder (IDEC) 20 ver
arbeitet.
Dabei wird zuerst geprüft, ob das entsprechende Pre-
condition-Bit gesetzt ist. Wenn dies der Fall ist, wird der
Befehl beim Nichterfüllen der entsprechenden Pre-condition
gar nicht ausgeführt.
Der Unterschied der vorliegenden Erfindung zum Stand der
Technik liegt in den Post-condition-Bits.
Aus diesem Post-condition-Bits wird das Signal "BR_CTR" er
zeugt. Gleichzeitig wird die Addition folgendermaßen durchge
führt:
Ein Steuersignal ALU-CTR sowie die Lese- und Schreibadressen und Enable-Signale für das Rechenwerk werden erzeugt. Zugleich stellt der Instruction-Decoder 20 die relative Sprungweite "BR" zur Verfügung. Das "BR-CTR"-Signal steuert die Verzweigungskontrolle nach folgenden Vorgaben an:
Ein Steuersignal ALU-CTR sowie die Lese- und Schreibadressen und Enable-Signale für das Rechenwerk werden erzeugt. Zugleich stellt der Instruction-Decoder 20 die relative Sprungweite "BR" zur Verfügung. Das "BR-CTR"-Signal steuert die Verzweigungskontrolle nach folgenden Vorgaben an:
- 1. Kein Sprung, wenn Post-condition-Bit = 0, also PCNEW = PCOLD + 1
- 2. Wenn Post-condition-Bit = 1 und die Bedingung erfüllt wird, z. B. zero-flag = 1, dann wird ein relativer Sprung ausgeführt. Der Programmzähler 14 wird also auf den neuen Wert PCNEW = PCOLD + BR gesetzt.
Wenn das Post-condition-Bit zwar = 1 ist, die Bedingung aber
nicht erfüllt wird, wird ebenfalls kein Sprung durchgeführt,
also: PCNEW = PCOLD + 1.
Es ist möglich, mehr als ein Post-condition-Bit zu verwenden,
wie dies beispielsweise in Fig. 3 dargestellt ist. Es können
dann mehr Bedingungen geprüft werden (beispielsweise zero,
carry, overflow).
Erfindungsgemäß wird also erstmals gleichzeitig Steuerinfor
mation für das Rechenwerk und Information zu Sprungzieladres
sen gleichzeitig vom Instruction-Decoder 20 beim Decodieren
der Befehle bereitgestellt.
Nunmehr wird der Befehl ausgeführt und ggf. verzweigt.
Dazu wird die Aktion vom Rechenwerk (ALU) ausgeführt. Das Er
gebnis wird in das entsprechende Register zurückgeschrieben.
Gleichzeitig liegen die entsprechenden zero-, carry- usw.
-flags am Ausgang des Rechenwerks an.
Der Verzweigungssteuerung werden dabei die Bits für die ein
zelnen Flags, "BRCTR" und der Wert "BR" zum gleichen Takt zur
Verfügung gestellt. Wie in Fig. 7 dargestellt, erzeugt dann
die Steuereinheit "Cond" 26 zwei Steuersignale S1 und S2. S1
steuert an, entweder keinen Sprung vorzunehmen, oder einen
relativen Sprung auszurechnen. S2 schaltet dann die relative
Sprungadresse "PCNEW" durch den Multiplexer 12 durch.
Im Ergebnis spart man einen zusätzlichen Befehl für den
Sprung zusätzlich zu dem entsprechenden Arithmetikbefehl. Da
durch kann man eine Verringerung der Anzahl der erforderli
chen Befehle erreichen und erhöht damit den Durchsatz des
Prozessors.
Der Aufbau eines Prozessors zur Bearbeitung von Befehlen mit
den erfindungsgemäßen "Post-condition-Bits" ist in Fig. 7 im
einzelnen dargestellt. Gleiche Ziffern wie in den Fig. 4, 5
und 6 verweisen auf gleiche Einheiten.
Auch in Fig. 7 ist ein Programmzähler 14 vorgesehen, der einen
Befehlsspeicher (CODEROM) 10 adressiert. Von dort werden die
Befehle mit einer Befehlsbreite von 22 Bit dem Befehlsdeco
dierer (IDEC) 20 zugeführt. Dieser erzeugt die üblichen Sig
nale zur Ansteuerung der Register 24 und des Rechenwerks
(ALU) 22. Erfindungsgemäß erzeugt er jedoch auch zusätzlich
die Signale "BR" (dieses Signal umfaßt mehrere Bits) und gibt
die relative Sprungweite an, sowie das Signal "BR-CTR", wel
ches angibt, daß ein bedingter Sprung abzuarbeiten ist, und
die entsprechenden Flag-Bits des Rechenwerks abzuprüfen sind.
Das Rechenwerk 22 liefert an seinem Ausgang Ergebnisse (re
sult) und die entsprechenden Flags, die bestimmten Bedingun
gen (z. B. 0 = zero, Überlauf = overflow, Übertrag = carry usw.)
darstellen. Die Ergebnisse (result) können natürlich auch den
Registern 24 wieder zugeführt werden. Die "BR_CTR"-Signale
und die Flags aus der ALU werden einer weiteren Logikeinheit
(Cond) 26 zugeführt. Diese erzeugt in Abhängigkeit von den
entsprechenden BR_CTR-Signalen und den zugehörigen Flags Sig
nale S1 und S2, die den Multiplexer 12 und einen Schalter vor
dem einen Eingang des Addierwerks 16 steuern. Dieser Schalter
schaltet abhängig von der Erfüllung der Flagbedingungen zwi
schen 1 und "BR" um. Der andere Eingang dieses Addierwerks
ist mit dem Ausgang des Programmzählers 14 verbunden.
Auf diese erfindungsgemäße Weise kann mit relativ wenig tech
nischem Zusatzaufwand am Prozessor eine wesentlich schnellere
Abarbeitung bedingter Sprünge durchgeführt werden.
Claims (3)
1. Verfahren zu Bearbeitung bedingter Sprungbefehle in einem
Prozessor mit Pipeline-Rechnerarchitektur, das die folgenden
Schritte aufweist:
- a) Laden und Dekodieren eines Prozessorbefehls, wobei der Prozessorbefehl einen Befehls-Opcode, Registeradressen, eine relative Sprungweite, eine Precondition und eine Post- Condition enthält,
- b) Ausführen des decodierten Prozessorbefehls, wenn die Precondition erfüllt ist, und
- c) Springen zu einer Sprungadresse in Abhängigkeit von der in dem Prozessorbefehl enthaltenen relativen Sprungweite, wenn die Post-Condition erfüllt ist.
2. Verfahren nach Anspruch 1,
wobei die Postcondition mehrere Post-Condition Bits umfasst,
die in dem Prozessor geprüft werden.
3. Vorrichtung zur Bearbeitung bedingter Sprungbefehle in
einem Prozessor mit Pipeline-Rechnerarchitektur mit:
einem Befehlsdecoder (20) zum Decodieren eines Prozessorbefehls, der einen Befehls-Opcode, Registeradressen, eine relative Sprungweite, eine Precondition und eine Post- Condition enthält,
wobei der Befehlsdecoder (20) bei erfüllter Precondition prüft ob die Post-Condition erfüllt ist und bei erfüllter Post- Condition ein Programmzähler (14) zur Bildung einer Sprungadresse in Abhängigkeit von der in dem Prozessorbefehl enthaltenen relativen Sprungweite ansteuert.
einem Befehlsdecoder (20) zum Decodieren eines Prozessorbefehls, der einen Befehls-Opcode, Registeradressen, eine relative Sprungweite, eine Precondition und eine Post- Condition enthält,
wobei der Befehlsdecoder (20) bei erfüllter Precondition prüft ob die Post-Condition erfüllt ist und bei erfüllter Post- Condition ein Programmzähler (14) zur Bildung einer Sprungadresse in Abhängigkeit von der in dem Prozessorbefehl enthaltenen relativen Sprungweite ansteuert.
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE19945940A DE19945940C2 (de) | 1999-09-24 | 1999-09-24 | Verfahren und Vorrichtung zur Bearbeitung bedingter Sprungbefehle in einem Prozessor mit PIPELINE-Rechnerarchitektur |
PCT/EP2000/009267 WO2001022217A1 (de) | 1999-09-24 | 2000-09-21 | Verfahren und vorrichtung zur bearbeitung bedingter sprungbefehle in einem prozessor mit 'pipelined'-architektur |
KR1020027003878A KR100631318B1 (ko) | 1999-09-24 | 2000-09-21 | 파이프라인 아키텍처를 갖는 프로세서에서 조건 점프 명령을 처리하기 위한 방법 및 명령어 디코더 |
CN00815782A CN1390324A (zh) | 1999-09-24 | 2000-09-21 | 在流水线结构的处理器中处理条件转移指令的方法和装置 |
EP00967740A EP1218819A1 (de) | 1999-09-24 | 2000-09-21 | Verfahren und vorrichtung zur bearbeitung bedingter sprungbefehle in einem prozessor mit "pipelined"-architektur |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE19945940A DE19945940C2 (de) | 1999-09-24 | 1999-09-24 | Verfahren und Vorrichtung zur Bearbeitung bedingter Sprungbefehle in einem Prozessor mit PIPELINE-Rechnerarchitektur |
Publications (2)
Publication Number | Publication Date |
---|---|
DE19945940A1 DE19945940A1 (de) | 2001-04-12 |
DE19945940C2 true DE19945940C2 (de) | 2002-01-17 |
Family
ID=7923254
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE19945940A Withdrawn - After Issue DE19945940C2 (de) | 1999-09-24 | 1999-09-24 | Verfahren und Vorrichtung zur Bearbeitung bedingter Sprungbefehle in einem Prozessor mit PIPELINE-Rechnerarchitektur |
Country Status (5)
Country | Link |
---|---|
EP (1) | EP1218819A1 (de) |
KR (1) | KR100631318B1 (de) |
CN (1) | CN1390324A (de) |
DE (1) | DE19945940C2 (de) |
WO (1) | WO2001022217A1 (de) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7281120B2 (en) * | 2004-03-26 | 2007-10-09 | International Business Machines Corporation | Apparatus and method for decreasing the latency between an instruction cache and a pipeline processor |
US9405537B2 (en) * | 2011-12-22 | 2016-08-02 | Intel Corporation | Apparatus and method of execution unit for calculating multiple rounds of a skein hashing algorithm |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5136697A (en) * | 1989-06-06 | 1992-08-04 | Advanced Micro Devices, Inc. | System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache |
DE3855629T2 (de) * | 1988-01-18 | 1997-03-27 | Toshiba Kawasaki Kk | Verzweigungsschaltung für einen Pipeline-Prozessor |
US5928358A (en) * | 1996-12-09 | 1999-07-27 | Matsushita Electric Industrial Co., Ltd. | Information processing apparatus which accurately predicts whether a branch is taken for a conditional branch instruction, using small-scale hardware |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5349671A (en) * | 1989-03-23 | 1994-09-20 | Matsushita Electric Industrial Co., Ltd. | Microprocessor system generating instruction fetch addresses at high speed |
FR2770662B1 (fr) * | 1997-11-03 | 1999-12-10 | Inside Technologies | Microprocesseur pipeline a saut conditionnel en un cycle d'horloge |
-
1999
- 1999-09-24 DE DE19945940A patent/DE19945940C2/de not_active Withdrawn - After Issue
-
2000
- 2000-09-21 CN CN00815782A patent/CN1390324A/zh active Pending
- 2000-09-21 EP EP00967740A patent/EP1218819A1/de not_active Withdrawn
- 2000-09-21 KR KR1020027003878A patent/KR100631318B1/ko not_active IP Right Cessation
- 2000-09-21 WO PCT/EP2000/009267 patent/WO2001022217A1/de active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE3855629T2 (de) * | 1988-01-18 | 1997-03-27 | Toshiba Kawasaki Kk | Verzweigungsschaltung für einen Pipeline-Prozessor |
US5136697A (en) * | 1989-06-06 | 1992-08-04 | Advanced Micro Devices, Inc. | System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache |
US5928358A (en) * | 1996-12-09 | 1999-07-27 | Matsushita Electric Industrial Co., Ltd. | Information processing apparatus which accurately predicts whether a branch is taken for a conditional branch instruction, using small-scale hardware |
Also Published As
Publication number | Publication date |
---|---|
KR100631318B1 (ko) | 2006-10-09 |
KR20020085878A (ko) | 2002-11-16 |
DE19945940A1 (de) | 2001-04-12 |
WO2001022217A1 (de) | 2001-03-29 |
EP1218819A1 (de) | 2002-07-03 |
CN1390324A (zh) | 2003-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69031991T2 (de) | Verfahren und Gerät zur Beschleunigung von Verzweigungsbefehlen | |
DE68928340T2 (de) | Fliessband-Datenprozessor | |
DE3116100C2 (de) | Datenverarbeitungseinheit | |
DE2715073C3 (de) | Mikroprogrammierte Rechner-Steuervorrichtung | |
DE69738188T2 (de) | Verfahren und apparat für eine erhöhte genauigkeit bei der verzweigungsvorhersage in einem superskalaren mirkroprozessor | |
DE60032794T2 (de) | Bit-dekompression-verarbeitung mit einem vielseitigen ausrichtungswerkzeug | |
DE19855806A1 (de) | Vorrichtung und Verfahren zum Durchführen von Unterprogrammaufruf- und Rücksprungoperationen | |
DE2935906C2 (de) | Mikroprozessor | |
DE68924400T2 (de) | Fliessbanddatenverarbeitungsvorrichtung. | |
DE19983098B4 (de) | Mehrfach-Bitanzeige zur Behandlung von Schreib-nach-Schreib-Fehlern und zur Eliminierung von Bypass-Komparatoren | |
DE4134392C2 (de) | Verfahren und Vorrichtung zum Ungültigmachen von Befehlen in Geräten mit Parallelverarbeitung | |
DE102005001679B4 (de) | Mikroprozessor-Einrichtung, und Verfahren zur Branch-Prediktion für conditional Branch-Befehle in einer Mikroprozessor-Einrichtung | |
DE3307194C2 (de) | ||
EP1117037B1 (de) | Datenverarbeitungsvorrichtung zum parallelen Verarbeiten von unabhängigen Prozessen (Threads) | |
DE2906685C2 (de) | ||
DE19945940C2 (de) | Verfahren und Vorrichtung zur Bearbeitung bedingter Sprungbefehle in einem Prozessor mit PIPELINE-Rechnerarchitektur | |
DE2702722A1 (de) | Instruktionsinterpretation in elektronischen datenverarbeitungsanlagen | |
DE4010895C2 (de) | Mikroprozessor mit Befehlsdecodiereinrichtung | |
DE10201439B4 (de) | Mikroprozessor | |
DE3104256C2 (de) | ||
DE2622140C3 (de) | Einrichtung zur Steuerung manueller Operationen | |
DE60007312T2 (de) | Verfahren und vorrichtung zur verzweigungssteuerung in einem pipelineprozessor | |
EP2248021B1 (de) | Anordnung zur überprüfung eines programmspeichers einer recheneinheit | |
DE10359949A1 (de) | Multithread-Prozessorarchitektur zum getriggerten Thread-Umschalten ohne Taktzyklusverlust, ohne Umschalt-Programmbefehl und ohne Erweiterung des Programmbefehlsformates | |
EP0480095B1 (de) | Vorrichtung zur Befehlsbereitstellung in einem Mikroprozessor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law | ||
D2 | Grant after examination | ||
8364 | No opposition during term of opposition | ||
8330 | Complete disclaimer |