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-Rechnerarchitektur

Info

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
Application number
DE19945940A
Other languages
English (en)
Other versions
DE19945940A1 (de
Inventor
Xiaoning Nie
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Infineon Technologies AG filed Critical Infineon Technologies AG
Priority to DE19945940A priority Critical patent/DE19945940C2/de
Priority to PCT/EP2000/009267 priority patent/WO2001022217A1/de
Priority to KR1020027003878A priority patent/KR100631318B1/ko
Priority to CN00815782A priority patent/CN1390324A/zh
Priority to EP00967740A priority patent/EP1218819A1/de
Publication of DE19945940A1 publication Critical patent/DE19945940A1/de
Application granted granted Critical
Publication of DE19945940C2 publication Critical patent/DE19945940C2/de
Anticipated expiration legal-status Critical
Withdrawn - After Issue legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional 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:
  • 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:
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:
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:
  • 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.
DE19945940A 1999-09-24 1999-09-24 Verfahren und Vorrichtung zur Bearbeitung bedingter Sprungbefehle in einem Prozessor mit PIPELINE-Rechnerarchitektur Withdrawn - After Issue DE19945940C2 (de)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (3)

* Cited by examiner, † Cited by third party
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