[go: up one dir, main page]

DE69429061T2 - Superskalarmikroprozessoren - Google Patents

Superskalarmikroprozessoren

Info

Publication number
DE69429061T2
DE69429061T2 DE69429061T DE69429061T DE69429061T2 DE 69429061 T2 DE69429061 T2 DE 69429061T2 DE 69429061 T DE69429061 T DE 69429061T DE 69429061 T DE69429061 T DE 69429061T DE 69429061 T2 DE69429061 T2 DE 69429061T2
Authority
DE
Germany
Prior art keywords
instruction
microprocessor
functional unit
bus
result
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69429061T
Other languages
English (en)
Other versions
DE69429061D1 (de
Inventor
William M. Johnson
David B. Witt
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.)
GlobalFoundries Inc
Original Assignee
Advanced Micro Devices Inc
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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Application granted granted Critical
Publication of DE69429061D1 publication Critical patent/DE69429061D1/de
Publication of DE69429061T2 publication Critical patent/DE69429061T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30094Condition code generation, e.g. Carry, Zero flag
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • 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
    • 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
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Description

  • Diese Erfindung bezieht sich im allgemeinen auf Mikroprozessoren und insbesondere auf superskalare Hochleistungs-Mikroprozessoren.
  • Wie viele andere moderne technische Disziplinen ist die Mikroprozessor- Entwicklung eine Technologie, bei der Ingenieure und Wissenschaftlicher kontinuierlich nach erhöhter Geschwindigkeit, erhöhtem Wirkungsgrad und erhöhter Leistung streben. Im allgemeinen können Mikroprozessoren in zwei Klassen aufgeteilt werden, d. h. skalare und Vektorprozessoren. Der elementarste Skalarprozessor verarbeitet ein Maximum von einem Befehl pro Maschinenzyklus. Sogenannte "superskalare" Prozessoren können mehr als einen Befehl pro Maschinenzyklus verarbeiten. Im Gegensatz zu dem skalaren Prozessor kann ein Vektorprozessor ein relativ großes Array von Werten während jedes Maschinenzyklus verarbeiten.
  • Vektorprozessoren stützen sich auf Datenparallelismus, um Verarbeitungswirkungsgrade zu erreichen, wohingegen superskalare Prozessoren sich auf Befehlsparallelismus stützen, um einen erhöhten Betriebswirkungsgrad zu erreichen. Befehlsparallelismus kann als eine inhärente Eigenschaft einer Folge von Befehlen betrachtet werden, die es derartigen Befehlen erlaubt, parallel verarbeitet zu werden. Im Gegensatz dazu kann Datenparallelismus als die inhärente Eigenschaft eines Stroms von Daten angesehen werden, die ermöglicht, dass Elemente desselben parallel verarbeitet werden. Befehlsparallelismus bezieht sich auf die Anzahl von Abhängigkeiten, die eine bestimmte Folge von Befehlen aufweist. Abhängigkeit ist als das Ausmaß definiert, mit der ein bestimmter Befehl von dem Ergebnis eines weiteren Befehls abhängt. Bei einem skalaren Prozessor muss, wenn ein Befehl eine Abhängigkeit von einem weiteren Befehl aufweist, die Abhängigkeit im allgemeinen gelöst werden, bevor der Befehl an eine Funktionseinheit zur Ausführung weitergeleitet werden kann. Aus diesem Grund erleiden herkömmliche skalare Prozessoren unerwünschte Zeitverzögerungen, während der Prozessor auf die anhängige Lösung derartiger Abhängigkeiten wartet.
  • Verschiedene Vorgehensweisen wurden über Jahre angewendet, um die Ausführung von Befehlen durch Prozessoren und Mikroprozessoren zu beschleunigen. Eine Vorgehensweise, die noch heute bei Mikroprozessoren häufig angewendet wird, ist Pipelining. Beim Pipelining wird eine Fließband- Vorgehensweise angenommen, bei der die drei Mikroprozessor-Operationen von (1) Abrufen des Befehls, (2) Decodieren des Befehls und Sammeln der Operanden und (3) Ausführen des Befehls und Zurückschreiben des Ergebnisses überlappt werden, um die Verarbeitung zu beschleunigen. Mit anderen Worten wird der Befehl 1 abgerufen, und der Befehl 1 im jeweiligen Maschinenzyklus decodiert. Während der Befehl 1 decodiert wird und seine Operanden gesammelt werden, wird der Befehl 2 abgerufen. Während der Befehl 1 ausgeführt und das Ergebnis geschrieben wird, wird der Befehl 2 decodiert und seine Operanden werden gesammelt, und der Befehl 3 wird abgerufen. In der tatsächlichen Praxis kann die Fließband-Vorgehensweise in mehr Fließbandstationen aufgeteilt werden, als oben beschrieben sind. Eine tiefergehende Erläuterung der Pipelining-Technik ist in D.W. Anderson u. a. in ihrer Veröffentlichung "The IBM Sstem/360 Model 91: Machine Philosophy", IBM Journal, Bd. 11, Januar 1967, Seiten 8-24, beschrieben.
  • Die folgenden Definitionen werden nun dargelegt, um die Klarheit in diesem Dokument zu fördern. "Weiterleiten" ist die Handlung eines Sendens eines Befehls von dem Befehls-Decodierer an eine Funktionseinheit. "Ausgeben" ist die Handlung eines Bringens eines Befehls zur Ausführung in einer Funktionseinheit. "Beenden" wird erreicht, wenn ein Befehl die Ausführung beendet und das Ergebnis verfügbar ist. Man sagt, dass ein Befehl "stillgelegt (retired)" wird, wenn das Ergebnis des Befehls in die Registerdatei geschrieben wird. Dies wird auch als ein "Zurückschreiben" bezeichnet.
  • Das neue Buch "Superscalar Microprocessor Design" von William Johnson, 1991, Prentice-Hall, Inc., beschreibt verschiedene allgemeine Betrachtungen für die Ausgestaltung von praktischen superskalaren Mikroprozessoren. Fig. 1 ist ein Blockdiagramm eines Mikroprozessors 10, das die Implementierung eines in dem Buch von Johnson beschriebenen superskalaren Mikroprozessors beschreibt. Der Mikroprozessor 10 umfasst eine Ganzzahlen-Einheit 15 zur Bearbeitung von Ganzzahlen-Operationen und eine Gleitkomma-Einheit 20 zur Bearbeitung von Gleitkomma-Operationen. Die Ganzzahlen-Einheit 15 und die Gleitkomma-Einheit umfassen jeweils ihre eigenen getrennten und zugeordneten Befehlsdecodierer, Registerdatei, Neuordnungspuffer und Lade- und Speichereinheiten. Insbesondere umfasst die Ganzzahlen-Einheit 15 einen Befehlsdecodierer 25, eine Registerdatei 30, einen Neuordnungspuffer 35 und Lade- /Speicher-Einheiten (60 und 65), während die Gleitkomma-Einheit 20 ihren eigenen Befehlsdecodierer 40, Registerdatei 45, Neuordnungspuffer 50 und Lade- und Speichereinheiten (75 und 80) aufweist, wie es in Fig. 1 gezeigt ist. Die Neuordnungspuffer enthalten den spekulativen Zustand des Mikroprozessors, wohingegen die Registerdateien den Architekturzustand des Mikroprozessors enthalten.
  • Der Mikroprozessor 10 ist mit einem Hauptspeicher 55 gekoppelt, den man als aus zwei Teilen bestehend betrachten kann, d. h. einen Befehlsspeicher 55A zum Speichern von Befehlen und einen Datenspeicher 55B zum Speichern von Daten. Der Befehlsspeicher 55A ist mit sowohl der Ganzzahlen-Einheit 15 als auch der Gleitkomma-Einheit 20 gekoppelt. Ebenso ist der Datenspeicher 55B mit sowohl der Ganzzahlen-Einheit 15 als auch der Gleitkomma-Einheit 20 gekoppelt. Genauer gesagt ist der Befehlsspeicher 55A mit dem Decodierer 25 und dem Decodierer 40 über einen Befehls-Cache-Speicher 58 gekoppelt. Der Datenspeicher 55B ist mit der Ladefunktionseinheit 60 und der Speicherfunktionseinheit 65 der Ganzzahlen-Einheit 15 über einen Daten-Cache-Speicher 70 gekoppelt. Der Datenspeicher 55B ist ebenfalls mit einer Gleitladefunktionseinheit 75 und einer Gleitspeicherfunktionseinheit 80 der Gleitkomma-Einheit 20 über den Daten-Cache-Speicher 70 gekoppelt. Die Ladeeinheit 60 führt die herkömmliche Mikroprozessorfunktion eines Ladens ausgewählter Daten von dem Datenspeicher 55B in die Ganzzahlen-Einheit 15 durch, wohingegen die Speichereinheit 70 die herkömmliche Mikroprozessorfunktion eines Speicherns von Daten von der Ganzzahlen-Einheit 15 in den Datenspeicher 55B durchführt.
  • Ein Computerprogramm umfasst eine Folge von Befehlen, die von dem Mikroprozessor 10 auszuführen sind. Computerprogramme werden typischerweise in einer Festplatte, Floppy-Disk oder anderen nichtflüchtigen Speichermedien gespeichert, die in einem Computersystem angeordnet sind. Wenn das Programm abläuft, wird das Programm aus den Speichermedien in den Hauptspeicher 55 geladen. Sobald die Befehle des Programms und die zugeordneten Daten in dem Hauptspeicher 55 sind, können die einzelnen Befehle zur Ausführung vorbereitet und schließlich von dem Mikroprozessor 10 ausgeführt werden.
  • Nachdem sie in dem Hauptspeicher 55 gespeichert sind, werden die Befehle durch den Befehls-Cache-Speicher 58 und dann an den Befehlsdecodierer 25 geleitet. Der Befehlsdecodierer 25 prüft jeden Befehl und bestimmt die geeignete Maßnahme, die zu befolgen ist. Beispielsweise bestimmt der Decodierer 25, ob ein bestimmter Befehl ein PUSH, POP, LOAD, AND, OR, EX OR, ADD, SUB, NOP, JUMP, bedingter JUMP (BRANCH) oder ein anderer Befehlstyp ist. Abhängig von dem bestimmten Typ eines Befehls, die der Decodierer 58 als vorliegend bestimmt, wird der Befehl an die geeignete Funktionseinheit weitergeleitet. Bei der in dem Buch von Johnson vorgeschlagenen superskalaren Architektur ist der Decodierer 25 ein Mehrfachbefehlsdecodierer, der imstande ist, vier Befehle pro Maschinenzyklus zu decodieren. Es kann somit gesagt werden, dass der Decodierer 58 eine Bandbreite aufweist, die vier Befehle breit ist.
  • Wie es in Fig. 1 gezeigt ist, ist ein OP CODE-Bus 85 zwischen dem Decodierer 25 und jeder der Funktionseinheiten gekoppelt, d. h. einer Verzweigungseinheit 90, Arithmetik- und Logik-Einheiten 95 und 100, einer Verschiebungseinheit 105, der Ladeeinheit 60 und der Speichereinheit 65. Auf diese Art und Weise wird der OP CODE für jeden Befehl an die geeignete Funktionseinheit geliefert.
  • Wenn momentan von der direkten Erläuterung abgewichen wird, sei bemerkt, dass Befehle typischerweise mehrere Felder in dem folgenden Format aufweisen: OP CODE, OPERAND A, OPERAND B, DESTINATION REGISTER. Beispielsweise würde der Beispielbefehl ADD A, B, C bedeuten, den Inhalt des Registers A zu dem Inhalt des Registers B hinzuzufügen (ADD) und das Ergebnis in das Zielregister C zu bringen. Die Bearbeitung des OP CODE-Teils jedes Befehls wurde bereits obenstehend erläutert. Die Bearbeitung der OPERANDen für jeden Befehl wird nun beschrieben.
  • Es muss nicht nur der OP CODE für einen bestimmten Befehl an die geeignete Funktionseinheit geliefert werden, sondern auch die gekennzeichneten OPE- RANDen für diesen Befehl müssen wieder hergestellt und an die Funktionseinheit gesendet werden. Wenn der Wert eines bestimmten Operanden noch nicht berechnet wurde, dann muss dieser Wert zuerst berechnet und an die Funktionseinheit geliefert werden, bevor die Funktionseinheit den Befehl ausführen kann. Wenn beispielsweise ein aktueller Befehl von einem vorhergehenden Befehl abhängt, muss das Ergebnis des vorherigen Befehls bestimmt werden, bevor der aktuelle Befehl ausgeführt werden kann. Diese Situation wird als eine Abhängigkeit bezeichnet.
  • Die Operanden, die benötigt werden, um einen bestimmten Befehl von einer Funktionseinheit auszuführen, werden entweder von der Registerdatei 30 oder dem Neuordnungspuffer 35 auf dem Operandenbus 110 bereitgestellt. Der Operandenbus 110 ist mit jeder Funktionseinheit gekoppelt. Somit überträgt der Operandenbus 110 die Operanden an die geeignete Funktionseinheit. In der tatsächlichen Praxis weist der Operandenbus 110 getrennte Busse für den OPERAND A und den OPERAND B auf.
  • Sobald eine Funktionseinheit mit dem OP CODE und dem OPERAND A und dem OPERAND B versehen ist, führt die Funktionseinheit den Befehl aus und bringt das Ergebnis auf einen Ergebnisbus 115, der mit dem Ausgang jeder der Funktionseinheiten und mit dem Neuordnungspuffer 35 (und mit den jeweiligen Reservierungsstationen an dem Eingang jeder Funktionseinheit, wie es nun erläutert wird) gekoppelt ist.
  • Der Eingang jeder Funktionseinheit ist mit einer "Reservierungsstation" zum Speichern von OP-Codes von Befehlen versehen, die noch nicht in dem Sinn beendet sind, dass die Operanden für diesen Befehl noch nicht an der Funktionseinheit verfügbar sind. Die Reservierungsstation speichert den OP CODE des Befehls zusammen mit Operandenkennungen, die Plätze für die fehlenden Operanden reservieren, die später an der Reservierungsstation ankommen werden. Diese Technik verbessert die Leistung, indem es dem Mikroprozessor ermöglicht wird, mit dem Ausführen weiterer Befehle fortzufahren, während der anhängige Befehl zusammen mit seinen Operanden bei der Reservierungsstation zusammengesetzt wird. Wie es in Fig. 1 gezeigt ist, ist die Verzweigungseinheit 90 mit Reservierungsstationen 90R ausgestattet; ALUs 95 und 100 mit Reservierungsstationen 95R bzw. 100R ausgestattet; die Verschiebungseinheit 105 mit einer Reservierungsstation 105R ausgestattet; die Ladeeinheit 60 mit einer Reservierungsstation 60R ausgestattet; und die Speichereinheit 65 ist mit einer Reservierungsstation 65R ausgestattet: Bei dieser Vorgehensweise werden Reservierungsstationen anstelle von Eingangs-Latches benutzt, die typischerweise an den Eingängen von Funktionseinheiten bei früheren Mikroprozessoren verwendet wurden. Der klassische Literaturhinweis bezüglich Reservierungsstationen ist R.M. Tomasulo, "An Efficient Algorithm For Exploiting Multiple Arithmetic Units", IBM Journal, Bd. 11, Januar 1967, Seiten 25-33.
  • Wie es vorher erwähnt wurde, kann eine Pipeline verwendet werden, um den wirksamen Durchsatz bei einem skalaren Mikroprozessor bis zu einer Grenze von einem Befehl pro Maschinenzyklus zu erhöhen. Bei dem in Fig. 1 gezeigten superskalaren Mikroprozessor werden mehrere Pipelines verwendet, um die Verarbeitung von Mehrfachbefehlen pro Maschinenzyklus zu erreichen. Diese Technik wird als "Super-Pipelining" bezeichnet.
  • Eine weitere Technik, die als "Register-Umbenennung" bezeichnet wird, kann ebenfalls verwendet werden, um den Durchsatz des superskalaren Mikroprozessors zu verbessern. Diese Technik ist bei der Situation nützlich, bei der zwei Befehle in einem Befehlsstrom beide die Verwendung des gleichen Registers erfordern, beispielsweise eines hypothetischen Registers 1. Vorausgesetzt, dass der zweite Befehl nicht von dem ersten Befehl abhängt, wird ein zweites Register, genannt Register 1A, zur Verwendung von dem zweiten Befehl anstelle des Registers 1 zugeordnet. Auf diese Art und Weise kann der zweite Befehl ausgeführt und ein Ergebnis erhalten werden, ohne darauf zu warten, dass der erste Befehl mit dem Register 1 ausgeführt wird. Der in Fig. 1 gezeigte superskalare Mikroprozessor 10 verwendet eine Vorgehensweise zur Registerumbenennung, um die Befehlsbearbeitungsfähigkeit zu erhöhen. Die Art und Weise, mit der die Registerumbenennung in dem Mikroprozessor 10 implementiert ist, wird nun ausführlicher erläutert.
  • Aus dem obigen ist ersichtlich, dass die Registerumbenennung Speicherkonflikte für Register eliminiert. Um die Registerumbenennung zu implementieren, werden der Ganzzahlen-Einheit 15 und der Gleitkomma-Einheit 20 jeweilige Neuordnungspuffern 35 und 50 zugeordnet. Zwecks Einfachheit wird nur die Registerumbenennung mittels des Neuordnungspuffers 35 in der Ganzzahlen- Einheit 15 erläutert, obgleich die gleiche Erläuterung auf eine ähnliche Schaltungsanordnung bei der Gleitkomma-Einheit 20 Anwendung findet.
  • Der Neuordnungspuffer 35 umfasst eine Anzahl von Speicherstellen, die den Befehlsergebnissen dynamisch zugeordnet werden. Insbesondere wird, wenn ein Befehl von dem Decodierer 25 decodiert wird, der Ergebniswert des Befehls einer Stelle im Neuordnungspuffer 35 zugeordnet, und seine Zielregisternummer ist dieser Stelle zugeordnet. Dies benennt die Zielregisternummer des Befehls an der Neuordnungspufferstelle wirksam um. Eine Kennung oder ein vorübergehender Hardware-Identifizierer wird von der Mikroprozessor- Hardware erzeugt, um das Ergebnis zu identifizieren. Diese Kennung wird ebenfalls in der zugewiesenen Neuordnungspufferstelle gespeichert. Wenn sich ein späterer Befehl in diesem Befehlsstrom auf das umbenannte Zielregister bezieht, um den Wert zu erhalten, von dem man annimmt, dass er in dem Register gespeichert ist, erhält der Befehl anstelle dessen den in dem Neuordnungspuffer gespeicherten Wert oder die Kennung für diesen Wert, wenn der Wert noch nicht berechnet wurde.
  • Der Neuordnungspuffer 35 ist als ein kreisförmiger FIFO-Puffer implementiert, der ein inhaltsadressierbarer Speicher ist. Dies bedeutet, dass ein Eintrag im Neuordnungspuffer 35 durch Spezifizieren von etwas, das der Eintrag enthält, und nicht durch direktes Identifizieren des Eintrags gekennzeichnet wird. Insbesondere wird der Eintrag durch Verwenden der Registernummer, die in ihn geschrieben ist, gekennzeichnet. Wenn eine Registernummer an den Neuordnungspuffer 35 geliefert wird, liefert der Neuordnungspuffer den zuletzt in das Register geschriebenen Wert (oder eine Kennung für diesen Wert, wenn dieser Wert noch nicht berechnet ist). Diese Kennung enthält die relative spekulative Position eines bestimmten Befehls im Neuordnungspuffer 35. Diese Organisation mimt die Registerdatei 30, die ebenfalls einen Wert in einem Register liefert, wenn sie mit einer Registernummer präsentiert wird. Der Neuordnungspuffer 35 und die Registerdatei 30 verwenden jedoch sehr unterschiedliche Mechanismen zum Zugreifen auf Werte darin.
  • Bei dem von dem Neuordnungspuffer 35 benutzten Mechanismus vergleicht der Neuordnungspuffer die angeforderte Registernummer mit den Registernummern in allen Einträgen des Neuordnungspuffers. Dann gibt der Neuordnungspuffer den Wert (oder die Kennung) in den Eintrag zurück, der eine übereinstimmende Registernummer aufweist. Dies ist eine assoziative Nachschlagetechnik. Im Gegensatz dazu decodiert, wenn der Registerdatei 30 eine angeforderte Registernummer präsentiert wird, die Registerdatei einfach die Registernummer und liefert den Wert an den ausgewählten Eintrag.
  • Wenn der Befehlsdecodierer 25 einen Befehl decodiert, werden die Registernummern der Quellenoperanden des decodierten Befehls verwendet, um auf sowohl den Neuordnungspuffer 35 als auch auf die Registerdatei 30 zur gleichen Zeit zuzugreifen. Wenn der Neuordnungspuffer 35 keinen Eintrag aufweist, dessen Registernummer mit der angeforderten Quellen-Registernummer übereinstimmt, dann wird der Wert in der Registerdatei 30 als der Quellenoperand ausgewählt. Wenn jedoch der Neuordnungspuffer 35 einen übereinstimmenden Eintrag enthält, dann wird der Wert in diesem Eintrag als der Quellenoperand ausgewählt, da dieser Wert der allerletze dem Neuordnungspuffer zugewiesene Wert sein muss. Wenn der Wert nicht verfügbar ist, da der Wert noch nicht berechnet wurde, dann wird anstatt dessen die Kennung für den Wert gewählt und als der Operand verwendet. In jedem Fall wird der Wert oder die Kennung in die Reservierungsstation der geeigneten Funktionseinheit kopiert. Dieses Verfahren wird für jeden Operanden durchgeführt, der von jedem decodierten Befehl verlangt.
  • Bei einer typischen Befehlsfolge kann ein gegebenes Register viele Male beschrieben werden. Aus diesem Grund ist es möglich, dass unterschiedliche Befehle veranlassen, dass das gleiche Register in unterschiedlichen Einträgen des Neuordnungspuffers 35 in dem Fall geschrieben wird, wobei die Befehle das gleiche Zielregister spezifizieren. Um den richtigen Registerwert in diesem Szenarium zu erhalten, priorisiert der Neuordnungspuffer 35 mehrere übereinstimmende Einträge durch die Reihenfolge der Zuordnung und gibt den allerletzten Eintrag zurück, wenn ein bestimmter Registerwert angefordert wird. Durch diese Technik lösen neue Einträge in dem Neuordnungspuffer ältere Einträge ab.
  • Wenn eine Funktionseinheit ein Ergebnis erzeugt, wird das Ergebnis in den Neuordnungspuffer 35 und in jeden Reservierungsstationseintrag geschrieben, der eine Kennung für dieses Ergebnis enthält. Wenn ein Ergebniswert in die Reservierungsstationen auf diese Art und Weise geschrieben wird, kann er einen benötigten Operanden bereitstellen, der einen oder mehrere wartende Befehle befreit, die an die Funktionseinheit zur Ausführung auszugeben sind. Nachdem der Ergebniswert in den Neuordnungspuffer 35 geschrieben ist, fahren nachfolgende Befehle fort, den Ergebniswert aus dem Neuordnungspuffer abzurufen. Dieses Abrufen wird fortgesetzt, es sei denn, dass der Eintrag von einem neuen Wert ersetzt wird, und bis der Wert durch Schreiben des Werts in die Registerdatei 30 stillgelegt wird. Die Stillegung tritt in der Reihenfolge der ursprünglichen Befehlsfolge auf, womit der In-Reihenfolge-Zustand für Interrupts und Ausnahmen gewahrt wird.
  • Bezüglich der Gleitkomma-Einheit 20 sei bemerkt, dass zusätzlich zu der Gleitladefunktionseinheit 75 und einer Gleitspeicherfunktionseinheit 80 die Gleitkomma-Einheit 20 ebenfalls weitere Funktionseinheiten aufweist. Beispielsweise umfasst die Gleitkomma-Einheit 20 eine Gleitaddiereinheit 120, eine Gleitkonvertiereinheit 125, eine Gleitmultipliziereinheit 130 und eine Gleitteilungseinheit 140. Ein OP CODE-Bus 145 ist zwischen dem Decodierer 40 und jeder Funktionseinheit in der Gleitkomma-Einheit 20 gekoppelt, um decodierte Befehle an die Funktionseinheiten zu liefern. Jede Funktionseinheit umfasst eine jeweilige Reservierungsstation, d. h. Gleitaddier-Reservierungsstation 120R, Gleitkonvertier-Reservierungsstation 125R, Gleitmultiplizier-Reservierungsstation 130R und Gleitteilungs-Reservierungsstation 140R. Ein Operandenbus 150 koppelt die Registerdatei 45 und den Neuordnungspuffer 50 mit den Reservierungsstationen der Funktionseinheiten, so dass Operanden dazu geliefert werden. Ein Ergebnisbus 155 koppelt die Ausgaben aller Funktionseinheiten der Gleitkomma-Einheit 20 mit dem Neuordnungspuffer 50. Der Neuordnungspuffer 50 wird dann mit der Registerdatei 45 gekoppelt. Der Neuordnungspuffer 50 und die Registerdatei 45 werden somit mit Ergebnissen auf die gleiche Art und Weise beliefert, wie es oben bezüglich der Ganzzahlen-Einheit 15 erläutert wurde.
  • Ein Ganzzahlen-Neuordnungspuffer 35 hält 16 Einträge, und der Gleitkomma- Neuordnungspuffer 50 hält 8 Einträge. Der Ganzzahlen-Neuordnungspuffer 35 und der Gleitkomma-Neuordnungspuffer 50 können jeweils zwei berechnete Ergebnisse pro Maschinenzyklus annehmen und zwei Ergebnisse pro Zyklus in der jeweiligen Registerdatei stillegen.
  • Wenn ein Mikroprozessor auf das Ausgeben von decodierten Befehlen in Reihenfolge ("geordnete Ausgabe") beschränkt ist, muss der Mikroprozessor die Decodierung von Befehlen immer anhalten, wenn ein decodierter Befehl einen Ressourcen-Konflikt erzeugt (d. h. zwei Befehle wollen beide das Register R1 benutzen) oder wenn der decodierte Befehl eine Abhängigkeit aufweist. Im Gegensatz dazu erreicht der Mikroprozessor 10 von Fig. 1, der eine "ungeordnete Ausgabe" verwendet, diese Art von Befehlsausgabe durch Isolieren des Decodierers 25 von den Ausführungseinheiten (Funktionseinheiten). Dies wird durch Verwenden des Neuordnungspuffers 35 und der oben erwähnten Reservierungsstationen an den Funktionseinheiten erreicht, um ein verteiltes Befehlsfenster wirksam einzurichten. Auf diese Art und Weise kann der Decodierer fortfahren, Befehle zu decodieren, sogar wenn die Befehle nicht sofort ausgeführt werden können. Das Befehlsfenster wirkt als ein Pool von Befehlen, aus denen der Mikroprozessor ziehen kann, wenn er weiter fortfährt und Befehle ausführt. Somit wird dann dem Mikroprozessor durch das Befehlsfenster eine Vorausschaufähigkeit verfügbar gemacht. Wenn die Abhängigkeiten gelöscht und die Operanden verfügbar werden, werden mehr Befehle in dem Fenster von den Funktionseinheiten ausgeführt, und der Decodierer fährt fort, das Fenster mit noch mehr decodierten Befehlen zu füllen.
  • Der Mikroprozessor 10 umfasst eine Verzweigungsvorhersageeinheit 90, um seine Leistung zu verbessern. Es ist bekannt, dass Verzweigungen in dem Befehlsstrom eines Programms die Fähigkeit eines Mikroprozessors behindern, Befehle abzurufen. Dies ist so, da, wenn eine Verzweigung auftritt, der nächste Befehl, den der Abrufer abrufen sollte, von dem Ergebnis der Verzweigung abhängt. Ohne eine Verzweigungsvorhersageeinheit, wie beispielsweise der Einheit 90, kann der Befehlsabrufer des Mikroprozessors blockieren oder nicht korrekte Befehle abrufen. Dies verringert die Wahrscheinlichkeit, dass der Mikroprozessor weitere Befehle in dem Befehlsfenster finden kann, um sie parallel auszuführen. Im Gegensatz zu der Software-Verzweigungsvorhersage wird die Hardware-Verzweigungsvorhersage von der Verzweigungsvorhersage-Einheit 90 verwendet, um die Ergebnisse von Verzweigungen vorherzusagen, die während des Abrufens von Befehlen auftreten. Mit anderen Worten sagt die Verzweigungsvorhersage 90 voraus, ob Verzweigungen genommen werden sollten oder nicht. Beispielsweise wird ein Verzweigungszielpuffer verwendet, um eine laufende Historie der Ergebnisse von vorherigen Verzweigungen zu behalten. Basierend auf dieser Historie wird eine Entscheidung während einer bestimmten abgerufenen Verzweigung hinsichtlich dessen durchgeführt, welche Verzweigung der abgerufenen Verzweigungsbefehl nehmen wird.
  • Es sei bemerkt, dass die Software-Verzweigungsvorhersage ebenfalls benutzt werden kann, um das Ergebnis einer Verzweigung vorherzusagen. Bei dieser Vorgehensweise der Verzweigungsvorhersage werden verschiedene Prüfungen an jeder Verzweigung in einem Programm durchgeführt, um statistisch zu bestimmen, welches Verzweigungsergebnis wahrscheinlicher ist. Software- Verzweigungsvorhersage-Techniken beinhalten typischerweise eingebettete statistische Verzweigungsvorhersage-Information hinsichtlich des favorisierten Verzweigungsergebnisses in dem Programm selbst. Es sei bemerkt, dass der Begriff "spekulative Ausführung" häufig auf Mikroprozessor-Entwicklungspraktiken angewendet wird, wobei eine Codefolge (wie beispielsweise eine Verzweigung) ausgeführt wird, bevor der Mikroprozessor sicher ist, dass es richtig war, diese Codefolge auszuführen.
  • Um die Arbeitsweise von superskalaren Mikroprozessoren zu verstehen, ist es hilfreich, skalare und superskalare Mikroprozessoren bei jeder Stufe der Pipeline zu vergleichen, das heißt, beim Abrufen, Decodieren, Ausführen, Zurückschreiben und Ergebnis-Commit. Die nachstehende Tabelle 1 liefert einen derartigen Vergleich. Tabelle 1
  • Aus der obigen Beschreibung des superskalaren Mikroprozessors 10 ist es offensichtlich, dass dieser Mikroprozessor tatsächlich eine leistungsfähige, jedoch sehr komplexe Struktur aufweist. Weitere Erhöhungen in der Verarbeitungsleistung sowie auch Ausgestaltungs-Vereinfachungen sind jedoch bei Mikroprozessoren, wie dem Mikroprozessor 10, immer wünschenswert.
  • Die WO-A-93/01546 (SEIKO EPSON CORP.), auf der der Oberbegriff des beigefügten Anspruchs 1 basiert, beschreibt eine ausbaufähige RISC- Mikroprozessor-Architektur, bei der eine vereinigte Ablaufsteuerung über mehrere Ausführungsdatenwege durchgeführt wird, wobei jeder Ausführungsdatenweg und die entsprechende Funktionseinheit im allgemeinen für den Typ der Berechnungsfunktion optimiert wird, die an den Daten durchzuführen ist.
  • IBM JOURNAL OF RESEARCH AND DEVELOPMENT, Bd. 11, Januar 1967, New York, U.S.A., Seiten 25-32, mit dem Titel "An efficient algorithm for exploiting multiple arithmetic units" von Tomasulo beschreibt ein Verfahren zum Erreichen einer gleichzeitigen Ausführung von Gleitkomma-Befehlen bei dem IBM- System/360 Modell 91 Computer.
  • IEEE TRANSACTIONS ON COMPUTERS, Bd. 39, Nr. 3, März 1990, New York, U.S.A., Seiten 349-359, von Sohi beschreibt "Instruction issue logic for highperformance, interruptible, multiple functional unit, pipelined computers".
  • PROCEEDINGS COMPCON SPRING '91, 25. Februar 1991, San Francisco, U.S.A., Seiten 13-18, mit dem Titel "The Metaflow Lightning chipset" von Lightner und Hill beschreibt die bei dem superskalaren Lightning-SPARC- Mikroprozessor-Chipsatz verwendete Metaflow-Architektur, die imstande ist, Befehle ungeordnet und spekulativ auszuführen.
  • Wir werden nun einen superskalaren Mikroprozessor beschreiben, der den Vorteil einer erhöhten Leistung hinsichtlich der parallelen Verarbeitung von Befehlen aufweist.
  • Weitere Vorteile des superskalaren Mikroprozessors sind, verglichen mit anderen superskalaren Mikroprozessoren, eine verringerte Komplexität und eine verringerte Chipgröße.
  • Bei einer Ausführungsform der Erfindung wird ein superskalarer Mikroprozessor zum Verarbeiten von in einem Hauptspeicher gespeicherten Befehlen bereitgestellt. Der Mikroprozessor umfasst einen Mehrfachbefehlsdecodierer zum Decodieren von Mehrfachbefehlen in ein und demselben Mikroprozessorzyklus. Der Decodierer decodiert sowohl Ganzzahlen- als auch Gleitkomma-Befehle in ein und demselben Mikroprozessorzyklus. Der Mikroprozessor umfasst einen mit dem Decodierer gekoppelten gemeinsamen Datenverarbeitungsbus. Der Mikroprozessor umfasst ferner eine Ganzzahlen-Funktionseinheit und eine Gleitkomma-Funktionseinheit, die mit dem gleichen gemeinsamen Datenverarbeitungsbus gekoppelt sind und diesen gemeinsam benutzen. Ein gemeinsamer Neuordnungspuffer ist mit dem Datenverarbeitungsbus zur Benutzung sowohl durch die Ganzzahlen-Funktionseinheit als auch durch die Gleitkomma- Funktionseinheit gekoppelt. Eine gemeinsame Registerdatei umfasst mindestens ein Register zur Benutzung sowohl durch die Ganzzahlen-Funktionseinheit als auch durch die Gleitkomma-Funktionseinheit und ist mit dem Neuordnungspuffer zum Annehmen von Befehlsergebnissen gekoppelt, die von dem Neuordnungspuffer stillgelegt (retired) werden.
  • In den beigefügten Zeichnungen zeigen beispielhaft:
  • Fig. 1 ein Blockdiagramm eines herkömmlichen superskalaren Mikroprozessors;
  • Fig. 2 ein vereinfachtes Blockdiagramm einer Ausführungsform des superskalaren Hochleistungs-Mikroprozessors der vorliegenden Erfindung;
  • Fig. 3A ein ausführlicheres Blockdiagramm eines Teils einer weiteren Ausführungsform des superskalaren Hochleistungs-Mikroprozessors der vorliegenden Erfindung;
  • Fig. 3B ein ausführlicheres Blockdiagramm des verbleibenden Teils des superskalaren Hochleistungs-Mikroprozessors von Fig. 3A;
  • Fig. 4 ein Diagramm, das die Priorität darstellt, die die Funktionseinheiten erhalten, wenn sie für Ergebnisbusse arbitrieren;
  • Fig. 5 ein Blockdiagramm der internen Adressdatenbus-Arbitrierungsanordnung in dem Mikroprozessor der Erfindung;
  • Fig. 5A ein Timing-Diagramm des Betriebs des Mikroprozessors von Fig. 3A-3B überall in den mehreren Stufen der Pipeline desselben während einer sequentiellen Verarbeitung;
  • Fig. 5B ein Timing-Diagramm, das dem Timing-Diagramm von Fig. 5A ähnlich ist, wobei es jedoch auf den Fall gerichtet ist, bei dem eine Verzweigungsfehlvorhersage und Wiederherstellung auftritt;
  • Fig. 6 ein Blockdiagramm einer weiteren Ausführungsform des superskalaren Mikroprozessors der Erfindung;
  • Fig. 7 ein Blockdiagramm der Registerdatei, des Neuordnungspuffers und des Ganzzahlen-Kerns des Mikroprozessors von Fig. 6;
  • Fig. 8 ein ausführlicheres Blockdiagramm des Neuordnungspuffers von Fig. 7;
  • Fig. 9 ein Blockdiagramm einer von dem Mikroprozessor von Fig. 6 verwendeten verallgemeinerten Funktionseinheit;
  • Fig. 10 ein Blockdiagramm einer von dem Mikroprozessor von Fig. 6 verwendeten Verzweigungsfunktionseinheit;
  • Fig. 11 ein Timing-Diagramm des Betriebs des Mikroprozessors von Fig. 6 während einer sequentiellen Ausführung; und
  • Fig. 12 ein Timing-Diagramm des Betriebs des Mikroprozessors von Fig. 6 während einer Verzweigungsfehlvorhersage und Wiederherstellung.
  • 1. ÜBERSICHT DES SUPERSKALAREN MIKROPROZESSORS
  • Der superskalare Hochleistungs-Mikroprozessor ermöglicht gewünschterweise eine parallele ungeordnete Ausgabe von Befehlen und eine ungeordnete Ausführung von Befehlen. Insbesondere werden bei dem offenbarten superskalaren Mikroprozessor Befehle in der programmierten Reihenfolge weitergeleitet, ausgegeben und außer der Reihenfolge beendet und in der Reihenfolge stillgelegt (retired). Verschiedene Aspekte des Mikroprozessors, die ein Erreichen einer hohen Leistung ermöglichen, werden nun erläutert, bevor mit einer ausführlicheren Beschreibung fortgefahren wird.
  • Der superskalare Mikroprozessor 200 von Fig. 2 erreicht eine erhöhte Leistung ohne Erhöhen der Chipgröße durch gemeinsames Benutzen verschiedener Schlüsselkomponenten. Die Architektur des Mikroprozessors sieht vor, dass die Ganzzahlen-Einheit 215 und die Gleitkomma-Einheit 225 mit einem gemeinsamen Datenverarbeitungsbus 535 gekoppelt sind. Der Datenverarbeitungsbus 535 ist primär infolge seiner breiten Bandbreite ein Hochgeschwindigkeits-, Hochleistungsbus. Eine erhöhte Benutzung von sowohl der Ganzzahlen-Funktionseinheit als auch der Gleitkomma-Funktionseinheit wird verglichen mit Ausgestaltungen, bei denen die Funktionseinheiten auf getrennten Bussen untergebracht sind, ermöglicht.
  • Die Ganzzahlen- und Gleitkomma-Funktionseinheiten umfassen Mehrfach- Reservierungsstationen, die ebenfalls mit dem gleichen Datenverarbeitungsbus 535 gekoppelt sind. Wie es in der ausführlicheren Darstellung des Mikroprozessors der Erfindung in den Fig. 3A und 3B ersichtlich ist, teilen die Ganzzahlen- und Gleitkomma-Funktionseinheiten ebenfalls eine gemeinsame Verzweigungseinheit 520 auf dem Datenverarbeitungsbus 535. Außerdem teilen die Ganzzahlen- und Gleitkomma-Funktionseinheiten eine gemeinsame Lade- /Speicher-Einheit 530, die mit dem gleichen Datenverarbeitungsbus 535 gekoppelt ist. Die offenbarte Mikroprozessor-Architektur erhöht vorteilhafterweise die Leistung, während die Größe des Mikroprozessor-Chips wirksamer verwendet wird. Bei der in den Fig. 2 und 3A-3B gezeigten Ausführungsform der Erfindung ist der Mikroprozessor der vorliegenden Erfindung ein Computer mit verringertem Befehlssatz (RISC computer = reduced instruction set computer), bei dem die von dem Mikroprozessor verarbeiteten Befehle die gleiche Breite aufweisen und die Operandengröße veränderbar ist.
  • Zurückkehrend zu Fig. 2 ist darin als Mikroprozessor 200 ein vereinfachtes Blockdiagramm des erfindungsgemäßen superskalaren Mikroprozessors gezeigt. Der superskalare Mikroprozessor 200 umfasst einen vier Befehle breiten, zweifach teilassoziativen, teilweise decodierten 8KByte-Befehls-Cache- Speicher 205. Der Befehls-Cache-Speicher 205 unterstützt ein Abrufen von Mehrfachbefehlen pro Maschinenzyklus mit Verzweigungsvorhersage. Für die Zwecke dieses Dokuments werden die Begriffe Maschinenzyklus und Mikroprozessorzyklus als Synonyme angesehen. Der Befehls-Cache-Speicher 205 wird auch als ein ICACHE bezeichnet.
  • Der Mikroprozessor 200 umfasst ferner einen Befehlsdecodierer (IDECODE) 210, der imstande ist, bis zu vier Befehle pro Maschinenzyklus zu decodieren und diese an irgendeine der sechs unabhängigen Funktionseinheiten ohne Rücksicht auf Operandenverfügbarkeit und weiterzuleiten. Wie es in der in Fig. 3A und 3B als Mikroprozessor 500 dargestellten ausführlicheren Ausführungsform der Erfindung gezeigt ist, umfassen diese Funktionseinheiten zwei Arithmetik- und Logik-Einheiten (ALU 0 und ALU 1), die zusammen als ALU 505 gezeigt sind. Diese Funktionseinheiten umfassen ferner einen Verschieberabschnitt 510 (SHFSEC), der zusammen mit dem ALU-Abschnitt 505 eine Ganzzahlen-Einheit 515 zum Verarbeiten von Ganzzahlen-Befehlen bilden. Die Funktionseinheiten umfassen ferner einen Verzweigungsabschnitt (BRNSEC) 520 zum Verarbeiten von Befehlsverzweigungen und zum Durchführen einer Verzweigungsvorhersage. Eine Verzweigungseinheit, die als Verzweigungseinheit 520 verwendet werden kann, wird in der EP-A-0 401 882 mit dem Titel "System for Reducing Delay for Execution Subsequent To Correctly Predicted Branch Instruction Using Fetch Information Stored With Each Block of Instruction In Cache" beschrieben. Ein Gleitkomma-Abschnitt (FPTSEC) 525 und ein Lade-/Speicher-Abschnitt (LSSEC) 530 sind ebenfalls in den Funktionseinheiten enthalten, an die der Decodierer (IDECODE) 210 Befehle weiterleitet. Die oben beschriebenen Funktionseinheiten teilen alle einen gemeinsamen Datenverarbeitungsbus 535, wie es in den Fig. 3A und 3B gezeigt ist. (Für die Zwecke dieses Dokuments bilden die Fig. 3A und 3B zusammen den Mikroprozessor 500 und sollten zusammen in einer seitenweisen Beziehung gesehen werden.)
  • Bei dem vereinfachten Blockdiagramm des superskalaren Mikroprozessors 200 von Fig. 2 werden Verzweigungen als Ganzzahlen-Operationen angesehen, und die Verzweigungseinheit wird als ein Teil des Ganzzahlen-Kerns 220 betrachtet. Es sei ferner bemerkt, dass der superskalare Mikroprozessor 200 die Kennung von Befehlen vorsieht, um die richtige Reihenfolge von Operandenabhängigkeiten beizubehalten und eine ungeordneten Ausgabe zu ermöglichen. Der Mikroprozessor 200 umfasst ferner Mehrfach-Reservierungsstationen an den Funktionseinheiten, wo weitergeleitete Befehle in Warteschlangen für ihre Ausführung gebracht werden. Bei dieser besonderen Ausführungsform sind zwei Reservierungsstationen an dem Eingang jeder Funktionseinheit vorgesehen. Insbesondere umfasst der Ganzzahlen-Kern 215 zwei Reservierungsstationen 220, und der Gleitkomma-Kern 225 umfasst zwei Reservierungsstationen 230 bei dieser besonderen Ausführungsform. Die pro Funktionseinheit verwendete Anzahl - von Reservierungsstationen kann gemäß dem Grad des gewünschten Warteschlangenbetriebs variieren. Der Ganzzahlen-Kern 250 verarbeitet Ganzzahlen-Befehle, und der Gleitkomma-Kern 225 verarbeitet Gleitkomma-Befehle. In der tatsächlichen Praxis umfassen der Ganzzahlen- Kern 250 und der Gleitkomma-Kern 225 jeweils Mehrfach-Funktionseinheiten, wobei jeder derselben mit Mehrfach-Reservierungsstationen bei einer Ausführungsform der Erfindung ausgestattet sind.
  • Bei dieser besonderen Ausführungsform ist der Mikroprozessor 200 imstande, bis zu drei Funktionseinheitenergebnisse pro Maschinenzyklus zu bearbeiten. Dies ist so, da der Mikroprozessor 200 drei mit RESULT 0, RESULT 1 und RESULT 2 gekennzeichnete Ergebnisbusse aufweist, die mit allen Funktionseinheiten (d. h. mit dem Ganzzahlen-Kern 215 und dem Gleitkomma-Kern 225 in Fig. 2) gekoppelt sind. Die Erfindung ist nicht auf diese Anzahl von Ergebnisbussen begrenzt, und eine größere oder kleinere Anzahl von Ergebnisbussen können dem gewünschten Leistungspegel angemessen benutzt werden: Ebenso ist die Erfindung nicht auf die besondere Anzahl von in den Ausführungsformen dargestellten Funktionseinheiten begrenzt.
  • Der Mikroprozessor 200 umfasst ferner eine vereinheitlichte Registerdatei 235 zum Speichern von Ergebnissen, die von einem Neuordnungspuffer 240 stillgelegt (retired) werden. Die Registerdatei 235 ist ein Mehrkanal-, Mehrfach- Registerspeicherbereich, der vier Lesevorgänge und zwei Schreibvorgänge pro Maschinenzyklus bei einer Ausführungsform erlaubt. Die Registerdatei 235 bringt Einträge von verschiedener Größe, d. h. sowohl 32-Bit-Ganzzahlen- als auch 64-Bit-Gleitkomma-Operandeneinträge in der gleichen Registerdatei bei einer Ausführungsform unter. Die Registerdatei 235 weist eine Größe von 194 32-Bit-Registern bei dieser besonderen Ausführungsform auf. Der Neuordnungspuffer 240 bringt ebenfalls Einträge unterschiedlicher Größe, d. h. sowohl 32-Bit-Ganzzahlen- als auch 64-Bit-Gleitkommaoperanden-Einträge in der gleichen Registerdatei bei einer Ausführungsform unter. Diese besonderen Zahlen werden erneut nur zwecks Darstellung und nicht als Begrenzung angegeben.
  • Der Neuordnungspuffer 240 ist ein kreisförmiger Puffer oder Warteschlange, der die ungeordneten Funktionseinheitenergebnisse empfängt und der die Registerdatei 235 in einer sequentiellen programmierten Befehlsreihenfolge aktualisiert. Bei einer Ausführungsform ist der Neuordnungspuffer 240 als ein FIFO-Puffer mit 10 Einträgen implementiert. Die Warteschlange innerhalb des FIFO ROB 240 umfasst einen Kopf und ein Ende. Eine weitere Ausführungsform der Erfindung verwendet einen Neuordnungspuffer mit 16 Einträgen. Der Neuordnungspuffer 240 enthält Positionen, die umbenannten Registern zugeordnet sind, und hält die Ergebnisse der Befehle, die spekulativ ausgeführt werden. Befehle werden spekulativ ausgeführt, wenn die Verzweigungslogik vorhersagt, dass eine bestimmte Verzweigung genommen wird, so dass Befehle in der vorhergesagten Verzweigung gemäß der Spekulierung ausgeführt werden, dass die Verzweigung tatsächlich bei einem bestimmten Fall richtig genommen wurde. Wenn es bestimmt werden soll, dass die Verzweigung fehlvorhergesagt wurde, dann werden die Verzweigungsergebnisse, die in dem Neuordnungspuffer 240 sind, wirksam gelöscht. Dies wird dadurch erreicht, indem der Mikroprozessor die fehlvorhergesagte Verzweigungsbefehl sichert, wobei der spekulative Zustand des Mikroprozessors ausgeräumt und die Ausführung von einem Punkt in dem Programmbefehlsstrom vor der fehlvorhergesagten Verzweigung wieder aufgenommen wird.
  • Obgleich die 10 Einträge des Neuordnungspuffers jeweils 32 Bit breit sind (was der Breite einer 32-Bit-Ganzzahlengröße entspricht), kann der Neuordnungspuffer ebenfalls 64-Bit-Größen, wie beispielsweise 64-Bit-Gleitkommagrößen unterbringen. Dies wird durch Speichern der 64-Bit-Größe innerhalb des Neuordnungspuffers als zwei aufeinanderfolgende ROPs erreicht. (ROPs, ausgesprochen R-ops, bezieht sich auf RISC oder RISC-ähnliche Befehle/Operationen, die von dem Mikroprozessor verarbeitet werden.) Derartige gespeicherte aufeinanderfolgende ROPs weisen Information auf, die sie als eine Struktur verknüpft; und sie werden zusammen als eine Struktur stillgelegt. Jeder Neuordnungspuffereintrag weist die Kapazität auf, eine 32-Bit- Größe, d. h. 1/2 einer Gleitkommagröße mit doppelter Genauigkeit, eine Gleitkommagröße mit einfacher Genauigkeit oder eine 32-Bit-Ganzzahl zu halten.
  • Ein Programmzähler (PC = program counter) wird verwendet, um den Punkt in dem Programmbefehlsstrom zu verfolgen, der die Grenze zwischen denjenigen Befehlen ist, die als nicht länger spekulativ in die Registerdatei 235 stillgelegt werden, und denjenigen Befehlen, die spekulativ ausgeführt wurden und deren Ergebnisse im Neuordnungspuffer (ROB) 240 untergebracht sind und auf Stillegung (retirement) warten. Dieser PC wird als der Stillegungs-PC oder einfach der PC bezeichnet. Der Stillegungs-PC wird gespeichert und an dem Kopf der ROB-Warteschlange aktualisiert. ROB-Einträge enthalten relative PC- Aktualisierungsstatusinformation.
  • Der Stillegungs-PC wird durch Statusinformation, die dem Kopf der Neuordnungspufferwarteschlange zugeordnet ist, aktualisiert. Insbesondere gibt die Neuordnungspufferwarteschlange die Anzahl von Befehlen an, bei dieser besonderen Ausführungsform bis zu einem Maximum von vier Befehlen, die für eine Stillegung bereit sind. Der Stillegungs-PC-Abschnitt, der innerhalb der Stillegungslogik 242 angebracht ist, hält den aktuellen stillgelegten PC. Wenn vier (4) sequentielle Befehle bei einem bestimmten Taktzyklus stillzulegen sind, dann addiert die Stillegungs-PC-Logik (4 Befehle*4 Bytes/Befehl) zu dem aktuellen Stillegungs-PC, um den neuen Stillegungs-PC zu erzeugen. Wenn eine genommene Verzweigung existiert, dann wird der Stillegungs-PC zu dem Ziel der Verzweigung vorgerückt, sobald die Verzweigung stillgelegt wird und nicht länger spekulativ ist. Der Stillegungs-PC wird nachfolgend von diesem Punkt durch die Anzahl stillgelegter Befehle inkrementiert. Der Stillegungs-PC ist auf einem internen Bus innerhalb der Stillegungslogik 242 vorhanden, d. h. PC(31 : 0).
  • II. VEREINFACHTES BLOCKDIAGRAMM DES SUPERSKALAREN MIKROPRO- ZESSORS
  • Die Erläuterung dieses Abschnitts wird sich auf noch nicht bereits oben erläuterte Aspekte des vereinfachten Mikroprozessorblockdiagramms von Fig. 2 konzentrieren. Eine allgemeine Perspektive wird dargelegt.
  • Fig. 2 zeigt ein vereinfachtes Blockdiagramm einer Ausführungsform des superskalaren Hochleistungsmikroprozessors der vorliegenden Erfindung als Mikroprozessor 200. Bei dem Mikroprozessor 200 sind der Befehls-Cache-Speicher 205 und ein Daten-Cache-Speicher 245 miteinander über einen 32-Bitbreiten internen Adressdatenbus (IAD-Bus) 250 gekoppelt. Der IAD-Bus 250 ist ein Kommunikationsbus, der bei einer Ausführungsform verglichen mit dem Datenverarbeitungsbus 535 eine relativ niedrige Geschwindigkeit aufweist. Der IAD-Bus 250 dient dazu, verschiedene Schlüsselkomponenten des Mikroprozessors 200 zu verbinden, um eine Kommunikation von sowohl Adresseninformation als auch Daten unter derartigen Komponenten bereitzustellen. Der IAD-Bus 250 wird für diejenigen Aufgaben benutzt, die keinen Hochgeschwindigkeitsparallelismus erfordern, wie es Operandenbearbeitung und Ergebnisbearbeitung erfordern, die der Datenverarbeitungsbus 535 bearbeitet. Bei einer Ausführungsform der Erfindung ist der IAD-Bus 250 ein 32-Bit-breiter Bus auf dem sowohl Daten als auch Adresseninformation in jedem Taktzyklus multiplext werden. Die Bandbreite des IAD-Bus 250 ist somit 64 Bit/Takt bei einem Beispiel.
  • Ein Hauptspeicher 255 ist mit dem IAD-Bus 250 über eine Bus-Interface- Einheit 260 gekoppelt, wie es in Fig. 2 gezeigt ist. Auf diese Art und Weise wird das Lesen und Schreiben von Information in und aus dem Hauptspeicher 255 ermöglicht. Für eine zweckmäßige Darstellung ist der Hauptspeicher 255 in Fig. 2 als Teil des Mikroprozessors 200 gezeigt. In der tatsächlichen Praxis ist der Hauptspeicher 225 im allgemeinen extern zum Mikroprozessor 200 angeordnet. Es werden jedoch Implementierungen des Mikroprozessors 200 in Betracht gezogen, bei denen der Hauptspeicher 255 innerhalb des Mikroprozessors 200 positioniert ist, wie beispielsweise in dem Fall eines Mikrocontrollers.
  • Der Decodierer 210 umfasst eine Abrufeinheit 257, die mit dem Befehls- Cache-Speicher 205 gekoppelt ist. Die Abrufeinheit 257 ruft Befehle aus dem Cache-Speicher 205 und dem Hauptspeicher 255 zum Decodieren und Weiterleiten durch den Codierer 210 ab.
  • Eine Bus-Interface-Einheit (BIU = Bus Interface Unit) 260 ist mit dem IAD-Bus 250 gekoppelt, um den mit einer Busschaltungsanordnung (nicht gezeigt), die extern zu dem Mikroprozessor 200 ist, schnittstellenmäßig zu verbinden. Insbesondere verbindet der IAD-Bus 260 den Mikroprozessor 200 schnittstellenmäßig mit einem Systembus, Lokalbus oder weiteren Bus (nicht gezeigt), der extern zu dem Mikroprozessor 200 ist. Eine Bus-Interface-Einheit, die als BIU 260 benutzt werden kann, ist die Bus-Interface-Einheit von dem AM29030 Mikroprozessor, der von Advanced Micro Devices hergestellt wird. Die BIU 260 umfasst einen Adressenkanal, der mit A(31 : 0) gekennzeichnet ist, und einen Datenkanal, der mit B(31 : 0) gekennzeichnet ist. Die BIU 260 umfasst ferner einen Bus-Handshake-Kanal (BUS HAND SHAKE) und Bewilligungs/Anforderungsleitungen, die mit XBRIQ (keine Busanforderung) und XBRGT (keine Busbewilligung) gekennzeichnet werden. Die Bus-Interface-Einheit des Mikroprozessors AM29030 ist ausführlicher in dem Anwenderhandbuch des AM29030 beschrieben, das von Advanced Micro Devices, Inc., herausgegeben wird.
  • Fachleute werden erkennen, dass Programme, die Folgen von Befehlen und Daten dafür aufweisen, im Hauptspeicher 255 gespeichert sind. Wenn Befehle und Daten aus dem Speicher 255 gelesen werden, werden die Befehle und Daten jeweils im Befehls-Cache-Speicher 205 und im Daten-Cache-Speicher 245 gespeichert, bevor die Befehle abgerufen, decodiert und an die Funktionseinheiten von dem Decodierer 210 weitergeleitet werden können.
  • Wenn ein bestimmter Befehl von dem Decodierer 210 decodiert wird, sendet der Decodierer 210 den OP CODE des decodierten Befehls an die geeignete Funktionseinheit für diese Art von Befehl. Es sei für Beispielszwecke angenommen, dass der folgende Befehl abgerufen wurde: ADD R1, R2, R3 (ADD (Addieren) der Ganzzahl im Register 1 zu der Ganzzahl im Register 2 und Bringen des Ergebnisses in das Register 3. Hier ist R1 der A Operand, R2 der B Operand und R3 das Zielregister).
  • In der tatsächlicher Praxis decodiert der Decodierer 210 vier (4) Befehle pro Block gleichzeitig und kennzeichnet den jedem Befehl zugeordneten Opcode. Mit anderen Worten kennzeichnet der Decodierer 210 einen Opcode-Typ für jede der vier in dem Decodierer 210 enthaltenen Dispatch-Positionen. Die vier decodierten Opcode-Typen werden dann jeweils auf den vier TYP-Bussen an die Funktionseinheiten gesendet. Die vier decodierten Opcodes werden auf jeweiligen OP CODE-Bussen an die Funktionseinheiten gesendet. Wenn sie verfügbar sind, werden Operanden aus dem ROB 240 und der Registerdatei 235 wiederhergestellt. Operanden werden an die Funktionseinheiten über die A-Operanden- und B-Operandenbusse gesendet. Wenn ein bestimmter Operand nicht verfügbar ist, wird anstatt dessen eine A- oder B-Operandenkennung an die geeignete Funktionseinheit über den geeigneten A- oder B-Operandenbus gesendet. Die vier von dem Decodierer 210 decodierten Befehle werden somit an die Funktionseinheiten zur Verarbeitung weitergeleitet.
  • Bezüglich dem ADD-Opcode bei dem vorliegenden Beispiel wird eine der Funktionseinheiten, d. h. die Arithmetik- und Logik-Einheit (ALU) in dem Ganzzahlen-Kern 215 den Opcodetyp erkennen und in ihrer Reservierungsstation 220 die Information einschließlich des Opcodes, der A-Operandenkennung, des A- Operanden (falls verfügbar), der B-Operandenkennung, des B-Operanden (falls verfügbar) und der Zielkennung zwischenspeichern. Die ALU-Funktionseinheit bestimmt dann das Ergebnis und bringt das Ergebnis auf den Ergebnisbus 265 zum Speichern im ROB 240 und zum Wiederherstellen durch irgendeine weitere Funktionseinheit, die das Ergebnis benötigt, um einen anhängigen Befehl zu verarbeiten.
  • Es sei bemerkt, dass, wenn ein Befehl von dem Decodierer 210 decodiert wird, ein Register im Neuordnungspuffer 240 dem Ergebnis zugeteilt wird. Das Zielregister des Befehls wird dann dem zugeteilten Register zugeordnet. Eine Ergebniskennung (ein vorübergehend eindeutiger Hardwareidentifizierer), der dem noch nicht verfügbaren Ergebnis des Befehls entspricht, wird dann in das zugeteilte Register gebracht. Eine "Registerumbenennung" wird somit implementiert. Wenn ein Befehl später in der Programmbefehlsfolge auf dieses umbenannte Zielregister im Neuordnungspuffer 240 Bezug nimmt, liefert der Neuordnungspuffer 240 entweder den Ergebniswert, der in der diesem Register zugeteilten Stelle gespeichert ist, oder die Kennung für diesen Wert, wenn das Ergebnis noch nicht berechnet wurde. Wenn das Ergebnis schließlich berechnet ist, wird ein Signal auf den Ergebniskennungsbus gebracht, um dem Neuordnungspuffer 240 und den Reservierungsstationen der Funktionseinheiten bekanntzugeben, dass das Ergebnis nun auf dem Ergebnisbus verfügbar ist. Das Ergebnis wird somit im Neuordnungspuffer 240 gespeichert.
  • Wie es in Fig. 3A ersichtlich ist, läuft die Zielkennungsleitung von dem Neuordnungspuffer 240 zu den Funktionseinheiten. Der Decodierer 210 informiert den Neuordnungspuffer über die Anzahl von Befehlen, die gegenwärtig zur Zuteilung der Neuordnungspuffereinträge bereit sind. Der Neuordnungspuffer weist dann jeden Befehl eine Zielkennung basierend auf dem aktuellen Zustand des Neuordnungspuffers zu. Der Decodierer 210 prüft dann, ob jeder Befehl ausgeben wird oder nicht. Der Neuordnungspuffer nimmt diejenigen Befehle, die ausgegeben werden, und prüft die vorübergehende Zuteilung der Neuordnungspuffereinträge.
  • Die Operanden für einen bestimmten Befehl werden an die geeignete Funktionseinheit über den A-Operandenbus (A OPER) und den B-Operandenbus (B OPER) des gemeinsamen Datenverarbeitungsbusses 535 übertragen. Die Ergebnisse der jeweiligen Befehle werden an den diesen Befehlen zugewiesenen Funktionseinheiten erzeugt. Diese Ergebnisse werden an den Neuordnungspuffer 240 über einen Ergebniszusammensetzungsbus 245 übertragen, der drei Ergebnisbusse RESULT 0, RESULT 1 und RESULT 2 umfasst. Der Ergebniszusammensetzungsbus 265 ist ein Teil des Datenverarbeitungsbusses 535.
  • Die Tatsache, dass einer oder mehrere der Operanden gegenwärtig nicht verfügbar sind, wenn ein bestimmter Befehl decodiert wird, verhindert nicht die Weiterleitung des Befehls von dem Decodierer 210 an eine Funktionseinheit. Anstatt dessen wird in dem Fall, bei dem ein oder mehrere Operanden noch nicht verfügbar sind, eine Operandenkennung (eine vorübergehende eindeutige Hardwarekennzeichnung) an die geeignete Funktionseinheit/Reservierungsstation anstatt des fehlenden Operanden gesendet. Der OP CODE für den Befehl und die Operandenkennung werden dann in der Reservierungsstation dieser Funktionseinheit gespeichert, bis der der Kennung entsprechende Operand im Neuordnungspuffer 240 über den Ergebnisbus verfügbar wird. Sobald alle fehlenden Operanden in dem Neuordnungspuffer 240 verfügbar werden, wird der der Kennung entsprechende Operand aus dem Neuordnungspuffer 240 wiederhergestellt. Der Operand/die Operanden und der OP CODE werden dann von der Reservierungsstation an die Funktionseinheit zur Ausführung gesendet. Das Ergebnis wird auf den Ergebnisbus zur Übertragung an den Neuordnungspuffer 240 gebracht.
  • Es sei bemerkt, dass bei der obigen Operandenkennungstransaktion die Operandenkennungen tatsächlich an die Reservierungsstationen der Funktionseinheit über die A-OPER- und B-OPER-Busse übertragen werden. Wenn sie auf diese Art und Weise verwendet werden, um Operandenkennungen zu kommunizieren, werden die A-OPER- und B-OPER-Busse als die A-TAG- und B-TAG- Busse gekennzeichnet, wie es in Fig. 2 angegeben ist.
  • III. SUPERSKALARER MIKROPROZESSOR: EINE AUSFÜHRLICHERE ERLÄU- TERUNG
  • Fig. 3A und 3B zeigen eine ausführlichere Implementierung des Mikroprozessors der vorliegenden Erfindung als Mikroprozessor 500. Gleiche Ziffern werden verwendet, um gleiche Elemente der in den in Fig. 2, 3A und 3B dargestellten Mikroprozessoren anzugeben. Es sei bemerkt, dass Teile des Mikroprozessors 500 bereits oben erläutert wurden.
  • Im Mikroprozessor 500 werden Befehle in einer spekulativen programmierten Reihenfolge weitergeleitet, ausgegeben und außerhalb der Reihenfolge beendet und in der Reihenfolge stillgelegt. Es wird in den nachfolgenden Erläuterungen offensichtlich werden, dass viele Signal und Busse dupliziert werden, um Parallelismus insbesondere zur Befehlsweiterleitung zu fördern. Der Decodierer 210 decodiert Mehrfachbefehle pro Mikroprozessorzyklus und bildet ein Dispatch-Fenster, von dem die decodierten Befehle parallel zu den Funktionseinheiten weitergeleitet werden. Der ICACHE 205 ist imstande, vier Befehle auf einmal an den Decoder 210 über Leitungen INS0, INS1, INS2 und INS3 zu liefern, die den ICACHE 205 mit dem Decodierer 210 koppeln.
  • Im Mikroprozessor 500 ist der Hauptdatenverarbeitungsbus wieder als der Datenverarbeitungsbus 535 gekennzeichnet. Der Datenverarbeitungsbus 535 umfasst 4 OP CODE-Busse, 4 A OPERA TAG-Busse, 4 B OPER B TAG-Busse und 4 OP CODE TYPE Busse. Da die 4 OP CODE Busse, 4 A OPERA TAG- Busse, 4 B OPER/B TAG-Busse und 4 OP CODE TYPE-Busse zusammenarbeiten, um decodierte Befehle an die Funktionseinheiten zu senden, wird auf sie zusammen auch als mit XI0B, XI1B, XI2B und XI3B gekennzeichnete 4 Befehlsbusse Bezug genommen (in den Figuren nicht getrennt gekennzeichnet). Diese ähnlichen Befehlsbusnamen unterscheiden sich voneinander durch eine einzige Ziffer. Diese Ziffer gibt die Position des Befehls in einen 0 Mod 16- Byte-Block von Speicher an, wobei 0 der frühere Befehl ist. Diese Namen werden hier in generischer Form gegeben, wobei die Ziffer hier durch einen Kleinbuchstaben "n" ersetzt wird (d. h. die vier Befehlsbusse XI0B, XI1B, XI2B und XI3B werden als XInB bezeichnet)
  • Die Merkmale des superskalaren Mikroprozessors 500, der eine ungeordnete parallele Befehlsausführung ermöglicht, werden nun kurz vor Beginn einer ausführlicheren Erläuterung des Mikroprozessors wiederholt. Der Mikroprozessor 500 umfasst einen vier Befehl breiten, zweifach teilassoziativen, teilweise decodierten 8KByte-Befehls-Cache-Speicher 205 (ICACHE), um das Abrufen von bis zu vier Befehlen pro Mikroprozessorzyklus mit Verzweigungsvorhersage zu unterstützen. Der Mikroprozessor 500 sieht die Decodierung und Weiterleitung von bis zu vier Befehlen pro Zyklus durch den Decodierer 210 (IDECODE) an irgendeine der fünf unabhängigen Funktionseinheiten ohne Rücksicht auf Operandenverfügbarkeit vor. Diese Funktionseinheiten umfassen einen Verzweigungsabschnitt BRNSEC 520, eine Arithmetik- und Logik-Einheit ALU 505, einen Verschieberabschnitt SHFSEC 510, einen Gleitkomma- Abschnitt FPTSEC 525 und einen LADE/SPEICHER-Abschnitt 530.
  • Der Mikroprozessor 500 liefert eine Kennung der Befehle, um die richtige Reihenfolge von Operandenabhängigkeiten beizubehalten und eine ungeordnete Ausgabe zu ermöglichen. Der Mikroprozessor 500 umfasst ferner Reservierungsstationen in den Funktionseinheiten, bei denen weitergeleitete Befehle, die noch nicht ausgeführt werden können, in eine Warteschlange gebracht werden. Drei Ergebnisbusse (RESULT0, RESULT1 und RESULT2) werden bereitgestellt, um die Bearbeitung von bis zu drei Funktionseinheitenergebnisse pro Zyklus zu ermöglichen. Ein kreisförmiger Puffer oder FIFO-Warteschlange, d. h. der Neuordnungspuffer 240, empfängt ungeordnete Funktionseinheitenergebnisse und aktualisiert die Registerdatei 235. Genauer gesagt wird die Registerdatei in der richtigen programmierten Reihenfolge mit Ergebnissen von dem Neuordnungspuffer aktualisiert. Mit anderen Worten ist die Stillegung von Ergebnissen von dem Neuordnungspuffer an die Registerdatei in der Reihenfolge der korrekten Ausführung mit allen Verzweigungen, arithmetischen und Lade-/Speicher-Operationen, die das mit sich bringt. Die Mehrkanal- Registerdatei 235 ist imstande, vier Lesevorgänge und zwei Schreibvorgänge pro Maschinenzyklus durchzuführen. RESULT0, RESULT1 und RESULT2 werden parallel in den ROB 240 geschrieben. Wenn Ergebnisse von dem ROB 240 stillgelegt werden, werden sie parallel in die Registerdatei 235 über die Schreibbusse WRITEBACKO und WRITEBACK1 geschrieben. Der Mikroprozessor 500 umfasst ferner einen auf dem Board befindlichen, kohärenten 8KByte-Daten- Cache-Speicher mit direkter Speicherplatzzuordnung 245, um die Lade- und Speicherlatenzzeiten zu minimieren.
  • III (A) Befehlsablauf - ABRUFEN (FETCH)
  • Der Befehlsablauf durch den Mikroprozessor 500 wird nun erläutert. Der Befehlsdecodierer (IDECODE) 210 umfasst eine Befehlsabrufvorrichtung 257, die Befehle aus dem Befehls-Cache-Speicher (ICACHE) 205 abruft.
  • Wenn ein bestimmtes Programm im Hauptspeicher 255 von dem Mikroprozessor 500 ausgeführt wird, werden die Befehle des Programms in der programmierten Reihenfolge zur Ausführung wieder hergestellt. Da die Befehle am Anfang normalerweise nicht im ICACHE 205 sind, wird zuerst ein typischer ICACHE-Nachfüllvorgang erläutert. Bei einem Cache-Fehlzugriff wird eine Anforderung an die Bus-Interface-Einheit (BIU) 260 nach einem Vierwort-Block von Befehlen durchgeführt, die im Speicher bei 0 mod 16 Bytes (der Cache- Blockgröße) ausgerichtet sind. Dies startet einen kontinuierlichen Vorabrufstrom von Befehlsblöcken, wobei die Annahme ist, dass nachfolgende Fehlzugriffe ebenfalls auftreten werden. Ein Vierwort-Block ist die minimale Übertragungsgröße, da es bei dieser besonderen Ausführungsform nur ein Gültigkeitsbit pro Block in dem Cache-Speicher gibt. Ein Gültigkeitsbit gibt an, dass der aktuelle 16 Byte-Eintrag und die Kennung gültig ist. Dies bedeutet, dass der Eintrag geladen wurde und mit dem gegenwärtig laufenden Programm validiert wurde.
  • Wenn ein Block von Befehlen zurückkehrt (Wort niedriger Ordnung zuerst im Gegensatz zu Wort-von-Interesse zuerst) läuft er durch ein Vordecodierungs- Netzwerk (nicht gezeigt), das 4 Bits von Information pro Befehl erzeugt. Wenn der vorherige Block von Befehlen weitergeleitet wurde, rückt der nächste Befehlsblock (neue Befehlsblock) zum Befehlsregister 258 und dem IDECODE 210 vor. Andernfalls wartet der nächste Befehlsblock im Vorabrufpuffer 259. Das Befehlsregister 258 hält die aktuellen vier Befehle, die die nächsten Befehle sind, die zur spekulativen Ausführung weiterzuleiten sind. Der Vorabrufpuffer 259 hält einen Block vorabgerufener Befehle, die der ICACHE 259 angefordert hat. Diese Befehle werden nachfolgend vordecodiert und in den ICACHE 205 und den IDECODE 210 gespeist. Durch Halten eines Blocks vorabgerufener Befehle auf diese Art und Weise wird eine Pufferwirkung bereitgestellt, so dass das Weiterleiten von IDECODE 210 und das Vorabrufen nicht im Sperrschritt (lockstep) ablaufen muss.
  • Der nächste Befehlsblock wird in den ICACHE 205 geschrieben, wenn der nächste Befehl, der vorhergesagt ausgeführt ist, zum Decodieren vorrückt, wenn es keine ungelösten bedingten Verzweigungen gibt. Diese Vorgehensweise verhindert gewünschterweise, dass unbenötigte Befehle zwischengespeichert werden. Die Vordecodierungs-Information wird ebenfalls in den Cache-Speicher geschrieben. Vordecodierungs-Information ist Information bezüglich der Größe und des Inhalts eines Befehls, der beim schnellen Kanalisieren eines bestimmten Befehls an die geeignete Funktionseinheit hilft. Es sei bemerkt, dass die Verzweigungsvorhersage verwendet wird, um vorherzusagen, welche Verzweigungen genommen werden, wenn ein Programm ausgeführt wird. Die Vorhersage wird später validiert, wenn die Verzweigung tatsächlich ausgeführt wird. Die Vorhersage findet während des Abrufstadiums der Mikroprozessor-Pipeline statt.
  • Der Vorabrufstrom setzt sich fort, bis die BIU 260 den dazu gekoppelten externen Bus (nicht gezeigt) aufgeben muss, der Daten-Cache-Speicher 245 externen Zugriff benötigt, der Vorabrufpuffer 259 überläuft, ein Cache-Treffer oder eine Verzweigung oder ein Interrupt auftritt. Von dem obigen ist es offensichtlich, dass Vorabrufströme dazu neigen, nicht sehr lang zu sein. Im allgemeinen sind externe Vorabrufvorgänge höchstens zwei Blöcke vor dem, was weitergeleitet wird.
  • Es sei bemerkt, dass bei dieser besonderen Ausführungsform es nur ein Gültigkeitsbit pro Block im Befehls-Cache-Speicher 205 (ICACHE) gibt, so dass Teilblöcke nicht existieren - alle externen Abrufvorgänge werden in Blöcken von vier Befehlen durchgeführt. Es gibt erneut nur ein Gültigkeitsbit pro Block in dem Cache-Speicher. Der ICACHE 205 enthält ebenfalls Verzweigungsvorhersage-Information für jeden Block. Diese Information wird bei einem Nachfüllvorgang gelöscht.
  • Da nun die Befehle in den ICACHE 205 weitergerückt sind, kann die superskalare Ausführung beginnen. Es sei bemerkt, dass sobald ein extern abgerufener Block zum Decodieren vorrückt, der Vorgang der gleiche ist, als ob er von dem ICACHE 205 abgerufen würde, wobei jedoch die Gesamtleistung durch die maximale externe Abrufrate von einem Befehl pro Zyklus begrenzt ist. Ein Vierwort-Block von Befehlen wird abgerufen und rückt zum Decodieren zusammen mit der Vordecodierungs-Information vor (Cache-Lesen bei PH2, Befehlsbusse bei PH1 getrieben). PH1 ist als die erste der zwei Phasen des Taktes und PH2 ist als die zweite der beiden Phasen des Taktes definiert. PH1 und PH2 bilden das fundamentale Timing eines Pipeline-Prozessors.
  • Wie es in Fig. 3A ersichtlich ist, ist ein 32 Bit-Abruf-PC (FPC = fetch PC) Bus, FPC(31 : 0), zwischen dem Befehls-Cache-Speicher (ICACHE) 205 und der Abrufeinrichtung 257 des Decodierers (IDECODE) 210 gekoppelt. Insbesondere erstreckt sich der FPB-Bus zwischen dem FPB-Block 207 im ICACHE 205 und der Abrufvorrichtung 257. Der Abruf-PC oder FPC-Block 207 im Befehls-Cache- Speicher 205 steuert den darin angeordneten spekulativen Abruf- Programmzähler, der mit FPC gekennzeichnet ist. Der FPC-Block 207 hält den den Befehlen zugeordneten Programmzählwert FPC, den die Abrufeinrichtung 257 vor dem Weiterleiten von Befehlen durch den Decodierer 210 an die Funktionseinheiten vorabruft. Der FPC-Bus gibt die Stelle für den ICACHE an, zu dem er bei einer Ausnahme oder einer Verzweigungsvorhersage zu gehen hat. Der Abruf-PC-Block 207 verwendet im Befehls-Cache-Speicher 205 gespeicherte Verzweigungsvorhersage-Information, um Befehle (4 breit) in den Decodierer 210 vorabzurufen. Der Abruf-PC-Block kann entweder sequentielle Zugriffe vorhersagen, wobei er in diesem Fall den aktuellen Abruf-PC von 16 Bytes inkrementiert, wenn ein neuer Block erforderlich ist, oder zu einem neuen Block verzweigen. Die neuen Verzweigungspositionen können entweder von dem Befehls-Cache-Speicher für vorhergesagte Verzweigungen oder von der Verzweigungsfunktionseinheit bei einer Fehlvorhersage oder Ausnahmen empfangen werden. Der Abruf-PC oder FPC ist von dem vorher erläuterten Stillegungs-PC zu unterscheiden.
  • Der Abruf-PC (FPC) wird bei PH1 inkrementiert, und der nächste Block wird aus dem ICACHE 205 ausgelesen, obgleich der IDECODE 210 nicht die Abrufvorrichtung 257 durch Aktivieren von HOLDIFET blockieren wird, wenn er nicht alle Befehle aus dem ersten Block weitergeleitet hat. Die Funktion des Signals HOLDIFET besteht darin, den Befehlsabrufvorgang zu halten, da die vier Befehle im Befehlsregister 258 nicht vorrücken können.
  • Die Abrufvorrichtung 257 hilft ebenfalls bei der Durchführung einer Verzweigungsvorhersage. Die Verzweigungsvorhersage ist eine Ausgabe des Befehls- Cache-Speichers 205. Wenn eine Verzweigung vorhergesagt ist, werden die vier Befehle des nächsten Blocks, der vorhergesagt ist, von dem Befehls- Cache-Speicher 205 auf die Befehlsleitungen INS0, INS1, INS2 und INS3 ausgegeben. Ein Array IC_NXTBLK (nicht gezeigt) im Befehls-Cache-Speicher 205 definiert für jeden Block in dem Cache-Speicher, welche vorhergesagten Befehle in diesem bestimmten Block ausgeführt werden, und gibt ebenfalls an, welches der nächste Block ist, der vorhergesagt wird. In der Abwesenheit einer Verzweigung würde die Ausführung immer sequentiell blockweise sein. Somit sind die genommenen Verzweigungen das einzige Ereignis, der diese blockorientierte Verzweigungsvorhersage ändert. Mit anderen Worten ändert sich bei einer Ausführungsform der Erfindung die sequentielle blockweise Vorhersage nur, wenn eine als nicht genommene vorhergesagte Verzweigung genommen wird und nachfolgend fehlvorhergesagt wird.
  • Das erste Mal, wenn ein Block, der einen Verzweigungsbefehl enthält, an den Decodierer 210 (IDECODE) gesendet wird, ist das nachfolgende Abrufen sequentiell unter der Annahme, dass die Verzweigung nicht genommen wird. Wenn die Verzweigung ausgeführt wird und es sich einige Zeit später herausstellt, dass sie tatsächlich zu nehmen ist, benachrichtigt die Verzweigungsvorhersageeinheit (Verzweigungseinheit) 520 den ICACHE 205, der die Vorhersageinformation für diesen Block aktualisiert, um widerzuspiegeln, dass 1) die Verzweigung genommen wurde, um 2) die Stelle innerhalb des Blocks des Verzweigungsbefehls und 3) die Stelle in dem Cache-Speicher des Zielbefehls widerzuspiegeln. Die Abrufvorrichtung 257 wird ebenfalls umgeleitet, um das Abrufen an dem Ziel zu beginnen. Das nächste Mal, wenn dieser Block abgerufen wird, bemerkt die Abrufvorrichtung 257, dass er eine Verzweigung enthält, die vorher genommen wurde, und führt einen nicht sequentiellen Abrufvorgang mit den folgenden Maßnahmen durch: 1) Befehl-Gültigkeitsbits werden nur bis und einschließlich des Verzögerungsschlitzes der Verzweigung eingestellt; die Verzweigungsverzögerung ist ein Konzept eines immer Ausführens des Befehls nach einer Verzweigung und wird auch als ein verzögertes Verzweigen bezeichnet. Dieser Befehl ist bereits in einer skalaren RISC-Pipeline vorabgerufen, so dass in dem Fall einer Verzweigung kein Mehraufwand beim Ausführen desselben verloren geht; 2) eine Angabe, dass die vorhergesagte Verzweigung genommen wurde, wird zusammen mit dem Block an den Decodierer 210 gesendet; 3) der Cache-Index für den nächsten Abrufvorgang wird von der Vorhersageinformation genommen; (der Cache-Index ist die Position innerhalb des Cache-Speichers für den nächsten Block, der Vorhersage ausgeführt wird, wenn eine Verzweigung auftritt. Es sei bemerkt, dass der Cache- Index nicht der absolute PC ist. Anstatt dessen wird der absolute PC durch Verketten des TAG (Kennung) an der Position mit dem Cache-Index gebildet.); 4) der Block an diesem Cache-Index wird abgerufen und eine vorhergesagte Zieladresse aus der Kennung des Blocks gebildet, und die Vorhersageinformation wird in den Verzweigungs-FIFO (BRN FIFO) 261 platziert; S) Gültigkeitsbits für diesen nächsten Block werden beginnend mit dem vorhergesagten Zielbefehl gesetzt.
  • Das Verzweigungs-FIFO 261 wird verwendet, um die von der Abrufvorrichtung 257 vorhergesagte Zieladresse an die Verzweigungsfunktionseinheit (BNRSEC) 550 zu senden. Es sei bemerkt, dass obgleich getrennt gezeigt, das Verzweigungs-FIFO 261 als ein Teil des Verzweigungsabschnitts BRNSEC 550 betrachtet wird. Das Verzweigungs-FIFO 261 wird mit dem PC des Befehls geladen, wobei die Verzweigung sowie auch das Ziel vorhergesagt genommen wurde. Wenn der Verzweigungsbefehl tatsächlich weitergeleitet wurde, wird der Verzweigungsbefehl mit dem Eintrag in dem Verzweigungs-FIFO, d. h. dem darin gespeicherten PC, verglichen. Wenn es eine Übereinstimmung gibt, dann wird der Eintrag aus dem Verzweigungs-FIFO geräumt und der Verzweigungsbefehl wird an den Neuordnungspuffer 240 als erfolgreich vorhergesagt zurückgegeben. Wenn es eine Fehlvorhersage gibt, dann wird der PC, der korrekt ist, an den Neuordnungspuffer 240 geliefert.
  • Das Vorhersagebit wird von dem Decodierer 210 zusammen mit dem Verzweigungsbefehl an die Verzweigungseinheit 520 weitergeleitet. Das Vorhersagebit gibt an, ob eine bestimmte Verzweigung aus der in dem IC_NXTBLK-Array gespeicherten Information als vorhergesagt genommen wurde.
  • Wenn die Verzweigungseinheit 520 den Befehl ausführt, wird das Ergebnis mit der Vorhersage verglichen, und falls genommen, wird die tatsächliche Zieladresse mit dem Eintrag am oberen Ende des Verzweigungs-FIFOs verglichen (falls notwendig, darauf warten, bis er erscheint). Wenn eine der beiden Prüfungen versagt, leitet die Verzweigungseinheit 520 die Abrufvorrichtung 257 zu der richtigen Zieladresse um und aktualisiert die Vorhersage. Es sei bemerkt, dass dies ist wie ein Cache-Fehlzugriff für einen vorhergesagten, nichtsequentiellen Abrufvorgang erfasst wird, d. h. nicht von der Abrufeinrichtung 257 erfasst wird. Die Vorhersageinformation enthält nur ein Cache-Index, keine volle Adresse, so dass die Kennung des Zielblocks nicht auf einen Treffer geprüft werden kann; es sei angenommen, dass die Zieladresse die Adresse des Blocks an dem Index ist, wie es durch seine Kennung spezifiziert ist. Wenn der tatsächliche Zielblock ersetzt wurde, seit dem die Verzweigung zuletzt ausgeführt wurde, wird dies zu einem Fehlvergleich und einer Korrektur bei der Ausführung führen. Wenn eine Fehlvorhersage auftritt, können viele Befehle nach der Verzweigung und nicht nur sein Verzögerungsschlitz ausgeführt worden sein.
  • Eine Verzweigungsvorhersageeinheit, die als eine Verzweigungsvorhersageeinheit 520 verwendet werden kann, wird in EP-A-0 401 992, W.M. Johnson, mit dem Titel "System For Reducing Delay For Execution Subsequent To Correctly Predicted Branch Instruction Using Fetch Information Stored With Each Block Of Instructions In Cache" beschrieben.
  • III (B) Befehlsablauf - Decodieren, Registerdatei lesen, Weiterleiten
  • Die Befehle rücken zu IDECODE 210 blockweise vor und belegen spezifische Stellen im Befehlsregister 258, die ihrer Position in dem Speicherblock entsprechen (0 = am ehesten in der Folge). Jeder Befehl wird von seiner Vordecodierungs-Information und einem Gültigkeitsbit begleitet.
  • Die primäre Funktion des IDECODE 210 besteht darin, Befehle gemäß ihrer Funktionseinheiten zu klassifizieren, die die Befehle bearbeiten werden, und die Befehle an diese Funktionseinheiten weiterzuleiten. Dies wird durch Senden von vier 3-Bit-Befehlstyp-Codes (INSTYPn) an alle Funktionseinheiten durchgeführt und durch Aktivieren bei jedem gegebenen Zyklus eines Signals für jeden Befehl, der weitergeleitet wird (XINSDISP(3 : 0)). (In diesem Dokument erscheinen einige Signale mit und ohne der Y-Kennzeichnung. Das X, wie beispielsweise in dem Signal XINSDISP, gibt an, dass eine falsche Aktivierung den Bus entlädt.) Wie es aus den Fig. 3A und 3B ersichtlich ist, umfasst der Mikroprozessor 500 vier TYPE-Busse, INSTYPn(7 : 0) für den Zweck des Sendens der TYPE-Codes an die Funktionseinheiten. Ein jeweiliger TYPE-Bus wird für jeden der vier Befehle eines bestimmten Blocks von Befehlen bereitgestellt.
  • Wenn eine bestimmte Funktionseinheit ein TYPE-Signal entsprechend seines Typ erfasst, weiß die Funktionseinheit aufgrund der Position des erfassten Signaltyps auf dem TYPE-Bus, welchen der vier Befehle des aktuellen Blocks der Befehle in dem aktuellen Dispatch-Fenster von IDECODE 210 sie zu empfangen hat. Der TYPE-Bus weist vier Abschnitte auf, die den jeweiligen Dispatch- Positionen des IDECODE 210 entsprechen. Die Funktionseinheit bestimmt ebenfalls, welche Funktion es an die Operanden-Daten des Befehls durch den Operations-Code (opcode) durchzuführen hat, der an dem Abschnitt des Dispatch-Informationsbus auftritt, der dem erfassten Typ entspricht. Da ferner die Funktionseinheit weiß, welchen Befehl sie auszuführen hat, wird sie ihre Hardware mit dem jeweiligen Zielkennungsbus DEST. TAG(0 : 3) und dem Operanden-Datenbus zum Empfangen der Operanden-Daten und der Zielkennung abstimmen.
  • Wenn Befehle weitergeleitet werden, werden ihre Gültigkeitsbits zurückgesetzt und ihr Typ wird "Null". Alle vier Befehle eines bestimmten Blocks müssen weitergeleitet werden, bevor der nächste Block von Befehlen abgerufen wird. Alle · vier Befehle eines Blocks können sofort weitergeleitet werden, wobei jedoch die folgenden Ereignisse auftreten können und häufig tatsächlich auftreten, um diesen Prozeß zu verlangsamen:
  • 1) Klassenkonflikt - Dies tritt auf, wenn zwei oder mehr Befehle die gleiche Funktionseinheit benötigen. Ganzzahlen-Codes sind für den Mikroprozessor 500 wichtig. Aus diesem Grund umfasst eine Ausführungsform der Erfindung zwei ALUs, um das Auftreten eines Klassenkonflikts unter den Funktionseinheiten ALU0, ALU1, SHFSEC, BRNSEC, LSSEC, FPTSEC und SRBSEC zu verringern. Befehle werden an den SRBSEC 512 nur bei Serialisierungspunkten weitergeleitet. Mit anderen Worten werden nur Befehle, die seriell ausgeführt werden müssen, an den SRBSEC 512 gesendet.
  • 2) Funktionseinheit ist nicht imstande, Befehle anzunehmen.
  • 3) Kanäle der Registerdatei (RF = register file) 235 nicht verfügbar - Bei dieser Ausführungsform gibt es nur vier RF-Lesekanäle und nicht acht, wie man es zum Speisen von acht Operandenbussen erwarten würde. Es wurde herausgefunden, dass eine derartige verringerte Anzahl von Lesekanälen nicht so einschränkend ist, wie es zuerst erscheinen würde, da viele Befehle nicht zwei Operanden aus der Registerdatei 235 erfordern oder mittels Operanden- Weiterleitung durch den ROB 240 erfüllt werden können. Weitere Ausführungsformen der Erfindung werden in Betracht gezogen, wobei eine größere Anzahl von RF-Lesekanälen, wie beispielsweise acht, verwendet werden, um eine potentielle "Registerdatei-Kanal-nicht verfügbar"-Situation zu vermeiden.
  • 4) Platzmangel im Neuordnungspuffer 240 - Jeder Befehl muss einen entsprechenden Neuordnungspuffereintrag aufweisen (oder es sind, wie in dem Fall von Gleitkommabefehlen mit doppelter und erweiterter Genauigkeit, zwei Neuordnungspuffereinträge vorgesehen), und der Neuordnungspuffer gibt durch ROBSTAT(3 : 0) an, für wie viele der vorhergesagten Befehle er einen Platz finden kann. Wie es aus Fig. 3A ersichtlich ist, ist ein mit ROBSTAT (3 : 0) gekennzeichneter Statusbus zwischen dem Neuordnungspuffer (ROB) 240 und dem Decodierer (IDECODE) 210 gekoppelt. ROBSTAT (3 : 0) gibt von dem ROB an den IDECODE an, wie viele der vier aktuellen Befehle einen zugeteilten ROB-Eintrag aufweisen. Es sei bemerkt, dass es möglich ist, die Einträge des ROB aufzufüllen.
  • 5) Serialisierung - Einige Befehle modifizieren den Zustand, der über den Umfang des Mechanismus hinausgeht, der den sequentiellen Zustand bewahrt diese Befehle müssen in der programmierten Reihenfolge bezüglich ihrer umgebenden Befehle ausgeführt werden (beispielsweise die Befehle MTSR, MFSR, IRET).
  • Wenn eine der oben aufgeführten Bedingungen eintritt, hält der betroffene Befehl die Weiterleitung an; es können keine nachfolgenden Befehle weitergeleitet werden, obgleich es nicht anderes geben kann, das sie aufhält. Für jede Dispatch-Position gibt es einen Satz von Operandenbussen A und B (auch als XRDnAB/XRDnBB Busse bezeichnet), die Quellenoperanden an die Funktionseinheiten liefern. Auf die Registerdatei 235 wird bei PH2 parallel mit Decode (Decodierung) zugegriffen, und die Operanden werden bei PH1 auf diese Busse getrieben. Wenn ein Befehl, der ein Quellenregister modifizieren wird, noch in der Ausführung ist, ist der Wert in der Registerdatei 235 ungültig. Dies bedeutet, dass die Registerdatei 235 und der ROB 240 nicht die Daten enthalten, und daher wird eine Kennung für die Daten substituiert. Der Neuordnungspuffer (ROB) 240 verfolgt dies, wobei auf ihn parallel mit einem Registerdateizugriff zugegriffen wird. Es sei bemerkt, dass Operanden-Nichtverfügbarkeit oder Registerkonflikte die Weiterleitung nicht betreffen. Der ROB 240 kann als ein kreisförmiger Puffer mit einer vorbestimmten Anzahl von Einträgen und einem Kopf- und einem Endezeiger betrachtet werden.
  • Wenn ein Befehl weitergeleitet wird, wird ein Eintrag in dem ROB für sein Zielregister reserviert. Jeder Eintrag in dem ROB ist aufgebaut aus: 1) Der Zielregisteradresse des Befehls; 2) Platz für das Ergebnis des Befehls (was zwei Einträge für eine Operation mit doppelter Genauigkeit oder einem Call/JMPFDEC- Typ eines Befehl erfordern kann), sowie auch Ausnahmestatus-Information; und 3) Bits, um anzugeben, dass a) ein Eintrag zugeteilt wurde und b) ein Ergebnis zurückgegeben wurde.
  • Einträge werden sequentiell beginnend an dem Endezeiger zugewiesen. Das Zuteilungsbit wird gesetzt, um anzugeben, dass der Befehl weitergeleitet wurde. Das Zuteilungsbit ist jedem ROB-Eintrag zugeordnet. Das Zuteilungsbit gibt an, dass ein bestimmter ROB-Eintrag einem anhängigen Vorgang zugeteilt wurde. Die Zuteilung des Zuteilungsbits wird aufgehoben, wenn ein Eintrag stillgelegt wird oder eine Ausnahme auftritt. Ein getrenntes Gültigkeitsbit gibt an, ob ein Ergebnis beendet und in die Registerdatei geschrieben wurde. Die Adresse eines Eintrags (genannt die Ergebnis- oder die Zielkennung) begleitet den entsprechenden Befehl von der Weiterleitung durch die Ausführung und wird an den ROB 240 zusammen mit dem Ergebnis des Befehls über einen der Ergebnisbusse zurückgegeben.
  • Ausführlicher gesagt werden die Zielkennungen verwendet, wenn ein Befehl an eine Funktionseinheit weitergeleitet wird, und die Ergebniskennungen werden verwendet, wenn der Befehl zurückkehrt, das heißt, wenn das Ergebnis von der Funktionseinheit an den ROB zurückkehrt. Mit anderen Worten sind die Zielkennungen den weitergeleiteten Befehlen zugeordnet und werden an die Funktionseinheit durch den Neuordnungspuffer geliefert, um die Funktionseinheit zu benachrichtigen, wo das Ergebnis eines bestimmten Befehls zu speichern ist.
  • Ausführlicher gesagt wird die einem Befehl zugeordnete Zielkennung in der Funktionseinheit gespeichert und dann auf dem Ergebnisbus übermittelt. Derartige Zielkennungen werden noch als Zielkennungen gekennzeichnet, wenn sie auf dem Ergebnisbus übertragen werden. Diese Kennungen werden mit Operandenkennungen in den Reservierungsstationen der anderen Funktionseinheiten verglichen, um zu sehen, ob derartige weitere Funktionseinheiten ein bestimmtes Ergebnis benötigen. Das Ergebnis von einer bestimmten Funktionseinheit wird an die entsprechende relative spekulative Position in dem ROB zurückübermittelt.
  • Das Ergebnis eines Befehls wird in den durch die Zielkennung des Befehls gekennzeichneten ROB-Eintrag gebracht, der wirksam die Ergebniskennung dieses Befehls wird. Das Gültigkeitsbit dieses bestimmten ROB-Eintrags wird dann gesetzt. Die Ergebnisse bleiben dort, bis sie für ein Zurückschreiben in die Registerdatei an der Reihe sind. Es ist für Einträge möglich, schneller an den ROB 240 zugeteilt zu werden, als sie entfernt werden, wobei in diesem Fall der ROB 240 schließlich voll wird. Der volle Zustand des Neuordnungspuffers wird über den ROBSTAT(3 : 0)-Bus an den Decodierer 210 zurück kommuniziert. Als Antwort erzeugt der Decodierer 210 das Signal HOLDIFET, um das Abrufen von Befehlen aus dem ICACHE 205 anzuhalten, Es ist somit ersichtlich, dass der volle Zustand des ROB die Weiterleitung durch den Decodierer 210 blockieren wird.
  • Beim Zurückkehren zu einer Erläuterung der Bearbeitung von Operanden sei bemerkt, dass die Ergebnisse, die auf das Zurückschreiben in den ROB 240 warten, an andere Funktionseinheiten übermittelt werden können, falls benötigt. Dies wird durch Vergleichen der Quellenregisteradressen der Befehle in dem IDECODE 210 mit den Zielregisteradressen in dem ROB parallel mit dem Registerdateizugriff zur Decodierungszeit durchgeführt. Für die allerletzten Adressenübereinstimmungen, die für die A- und B-Quellen-Operanden auftreten, und die das Ergebnis-Gültigkeitsbit gesetzt haben, treibt der ROB 240 die entsprechenden Ergebnisse auf die geeigneten Operandenbusse anstelle der Registerdatei 235. Wenn diese Übereinstimmung auftritt, aktiviert der ROB 240 die OVERRIDE-Leitung zwischen dem ROB 240 und der Registerdatei 235, um die Registerdatei 235 anzuweisen, keine Operanden auf dem A- und B- Operandenbussen zu treiben.
  • Es sei beispielsweise angenommen, dass der Decodierer 210 den Befehl ADD R3, R5, R7 decodiert, der definiert ist, um zu bedeuten, den Inhalt des Registers R3 zu dem Inhalt des Registers R5 zu addieren und das Ergebnis in das Register R7 zu platzieren. In diesem Fall werden die im IDECODE decodierten Quellenregisteradressen R3 und R5 mit dem Zielregisteradressen im ROB 240 verglichen. Für die Zwecke dieses Beispiels sei angenommen, dass das Ergebnis R3 in dem ROB 240 und dass das Ergebnis R5 in der Registerdatei 235 enthalten ist. Unter diesen Umständen würde der Vergleich zwischen der Quellenadresse R3 in dem decodierten Befehl und der Zielregisteradresse R3 in dem ROB 240 positiv sein. Das Ergebnis in dem ROB-Eintrag für das Register R3 wird aus ROB 240 wieder hergestellt und auf dem Operanden-A-Bus zum Zwischenspeichern durch die Reservierungsstation der geeigneten Funktionseinheit, d. h. der ALU0 oder ALU1 gesendet. Da in diesem Fall eine Übereinstimmung mit einem ROB-Eintrag gefunden wurde, wird die OVERRIDE- Leitung getrieben, um zu verhindern, dass die Registerdatei 235 den A- Operandenbus mit irgendeinem stillgelegten R3-Wert treibt, den sie enthalten kann.
  • Bei dem vorliegenden Beispiel ist der Vergleich zwischen der Quellenadresse R5 in dem decodierten Befehl und der in dem ROB enthaltenen Zielregisteradressen nicht erfolgreich. Der in der Registerdatei 235 enthaltene Ergebniswert R5 wird somit auf dem B-Operandenbus getrieben, wobei das Ergebnis an die Funktionseinheiten, d. h. der ALU0 zur Ausführung gesendet wird. Wenn sowohl der Operand A als auch der Operand B in einer Reservierungsstation der Funktionseinheit ALU0 vorhanden sind, wird der Befehl an den ALU0 ausgegeben und von der ALU0 ausgeführt. Das Ergebnis (Ergebnis-Operand) wird auf den Ergebnisbus 265 zur Übertragung an die Reservierungsstationen von anderen Funktionseinheiten platziert, die nach diesem Ergebnisoperanden suchen. Der Ergebnisoperand wird ebenfalls an den ROB 240 zur Speicherung darin bei dem diesem Ergebnis zugeteilten Eintrag geliefert.
  • Sogar wenn ein gewünschter Operandenwert noch nicht in dem ROB 240 ist (wie es durch ein aktiviertes Gültigkeitsbit angegeben ist), kann der Befehl noch von dem Decodierer 210 weitergeleitet werden. In diesem Fall sendet der ROB 240 den Index des übereinstimmenden Eintrags (d. h. die Ergebniskennung des Befehls, der schließlich das Ergebnis erzeugen wird) an die Funktionseinheit anstatt des Operanden. Es sei erneut bemerkt, dass es effektiv acht A/B-Kennungsbusse gibt (d. h. vier A-Kennungsbusse und vier B- Kennungsbusse, d. h. TAGnAB(4 : 0) und TAGnBB(4 : 0), wobei n eine Ganzzahl ist), die den acht Operandenbussen entsprechen. Das höchstwertige Bit (MSB = Most Significant Bit) einer Kennung gibt an, wenn eine Kennung gültig ist.
  • Wenn mehr als ein ROB-Eintrag die gleiche Zielregisterkennung aufweist, wird der allerletzte Eintrag verwendet. Dies unterscheidet zwischen unterschiedlichen Anwendungen des gleichen Registers als ein Ziel durch unabhängige Befehle, was andernfalls künstlicherweise den verfügbaren Parallelismus verringern würde. (Dies ist als ein "Write-after-Write-Risiko" bekannt).
  • Die Vordecodierungs-Information, die erzeugt wird, wenn Befehle zwischengespeichert werden, kommen beim Decodieren ins Spiel. Es sei bemerkt, dass die Vordecodierungs-Information von dem ICACHE 205 an den IDECODE 210 über die PREDECODE-Leitung läuft.
  • Das Vordecodieren arbeitet auf die folgende Art und Weise. Für jeden Befehl gibt es ein Vordecodierungs-Signal PREDECODE, das ein 2-Bit-Code aufweist, das die Zuteilung von ROB-Einträgen durch Angeben, wie viele Einträge benötigt werden, beschleunigt (einige Befehle erfordern einen Eintrag, einige Befehle erfordern zwei Einträge). Beispielsweise erfordert der Addier-Befehl ADD (RA + RB)-> RC einen Eintrag für das einzige 32-Bit-Ergebnis, das in das Register RC zu platzieren ist. Im Gegensatz dazu erfordert der Multiplizierungsbefehl DFMULT (RA + RB) (doppelte Genauigkeit) zwei ROB-Einträge, um das 64-Bit-Ergebnis zu halten. Bei dieser besonderen Ausführungsform der Erfindung ist jeder ROB-Eintrag 32-Bit breit. Dieser 2- Bit-Code gibt ferner an, wie viele Ergebnisoperanden aus einem gegebenem Befehl resultieren werden (d. h. keine - z. B. Verzweigungen, einen - meistens, oder zwei - doppelte Genauigkeit). Die Vordecodierungs-Information umfasst zwei zusätzliche Bits, die angeben, ob ein Registerdatei-Zugriff für A- oder B- Operanden erforderlich ist oder nicht. Somit gibt es vier Bits von Vordecodierungs-Information pro 32-Bit-Befehl im Mikroprozessor 500. Diese Bits ermöglichen eine wirksame Zuteilung der Registerdateikanäle in PH1 vor der Registerdateikanäle in PH1 vor dem PH2-Zugriff. Wenn ein Befehl nicht den Registerdateikanälen zugeteilt ist, die er benötigt, sondern der ROB 240 angibt, dass die Operanden übermittelt werden können, kann der Befehl trotzdem noch weitergeleitet werden.
  • III (C) Befehlsablauf - Funktionseinheiten, Reservierungsstationen.
  • Die Fig. 3A und 3B zeigen, dass alle Funktionseinheiten des Mikroprozessors 500 auf einem gemeinsamen Datenverarbeitungsbus 535 untergebracht sind. Der Datenverarbeitungsbus 535 ist infolge seiner relativ breiten Bandbreite ein Hochgeschwindigkeitsbus. Jede der Funktionseinheiten ist mit Reservierungsstationen an ihrem Ausgang ausgestattet. Weitere Ausführungsformen der Erfindung werden in Betracht gezogen, wobei eine größere oder geringere Anzahl von Reservierungsstationen an den Funktionseinheiten benutzt werden.
  • Um es zu wiederholen, die Ganzzahlen-Einheit 550 umfasst die Arithmetik- und Logik-Einheiten ALU0 und ALU1. Die ALU0 ist mit Reservierungsstationen 540 und die ALU1 mit Reservierungsstationen 545 versehen. Die Verzweigungseinheit 520 (BRNSEC) ist mit Reservierungsstationen 550 an ihrem Ausgang ausgestattet. Die Gleitkommaeinheit (FPTSEC) 525 umfasst eine Gleitkomma-Addiereinheit 555, die mit Reservierungsstationen 560 versehen ist. Die Gleitkommaeinheit 525 umfasst ferner eine Gleitkomma-Konvertiereinheit 565, die mit Reservierungsstationen 570 ausgestattet ist. Die Gleitkommaeinheit 525 umfasst ferner eine Gleitkomma-Multipliziereinheit 575, die mit Reservierungsstationen 580 ausgestattet ist. Und schließlich umfasst die Gleitkommaeinheit 525 ferner eine Gleitkomma-Teilungseinheit 585, die mit Reservierungsstationen 590 an ihrem Ausgang ausgestattet ist. Die Lade-/Speicher- Einheit 530 ist ebenfalls auf dem Datenverarbeitungsbus 535 untergebracht und umfasst Reservierungsstationen 600.
  • Wie es in Fig. 3A und 3B ersichtlich ist, werden die Haupteingänge in jede Funktionseinheit (d. h. in jede einer Funktionseinheit zugeordneten Reservierungsstation) durch die zugehörigen Busse des Hauptdatenverarbeitungsbus 535 bereitgestellt, d. h.:
  • 1) die vier OPCODE-Busse von IDECODE 210 (als INSOPn(7 : 0) gekennzeichnet, wobei n eine Ganzzahl von 0-3 ist);
  • 2) die vier Befehlstypbusse von IDECODE 210 (als INSTYPn(7 : 0) gekennzeichnet, wobei n eine Ganzzahl von 0-3 ist);
  • 3) die vier 4-Bit-Dispatch-Vektorbusse vom IDECODE 210 (als XINSDISP(3 : 0) gekennzeichnet);
  • 4) die vier Paare von A-Operandenbusse und B-Operandenbusse (als XRDnAB/XRDnBB(31 : 0) gekennzeichnet, wobei n eine Ganzzahl von 0-3 ist);
  • 5) die vier Paare zugeordneter A-/B-Kennungsbusse (als TAGnAB/TAGnBB(4 : 0) gekennzeichnet, wobei n eine Ganzzahl von 0-3 ist);
  • 6) ein Ergebnisbus 265 mit drei bidirektionalen Ergebnis- Operandenbusse (als XRES0B(31 : 0), XRES1B(31 : 0) und XRES2B(31 : 0) gekennzeichnet);
  • 7) zwei Ergebnis-Kennungsbusse (als XRESTAG0B/XRESTAD1B(2 : 0) gekennzeichnet) und
  • 8) zwei Ergebnis-Zustandsbusse (als XRESSTAT0B und XRESSTAT1B(2 : 0) gekennzeichnet).
  • Eine oder mehrere Reservierungsstationen sind vor jeder der obigen Funktionseinheit positioniert. Eine Reservierungsstation ist im wesentlichen ein FIFO- Puffer, bei dem Befehle in Warteschlangen plaziert werden, während sie auf die Ausführung durch die Funktionseinheit warten. Wenn ein Befehl mit einer Kennung anstelle eines Operanden weitergeleitet wird, oder die Funktionseinheit blockiert oder belegt ist, wird der Befehl in der Reservierungsstation in eine Warteschlange plaziert, wobei nachfolgende Befehle danach in die Warteschlange plaziert werden. (Es sei bemerkt, dass die Ausgabe innerhalb einer bestimmten Funktionseinheit streng geordnet ist). Wenn sich die Reservierungsstation auffüllt, wird ein Signal, das dies angibt, an IDECODE aktiviert. Dies veranlaßt, daß die Weiterleitung blockiert wird, wenn ein weiterer Befehl der gleichen Art angetroffen wird.
  • Der Befehls-Dispatch findet wie folgt statt. Jede Reservierungsstation umfasst eine Reservierungsstationslogik, die die Befehls-TYP-Busse (bei PH2) nach einem entsprechenden Befehlstyp überwacht. Die Reservierungsstation wählt dann den entsprechenden Opcode, A- und B-Operand und A- und B- Operanden-Kennungsbusse aus, wenn eine derartiger Befehlstyp angetroffen wird. Wenn zwei oder mehrere Befehle beobachtet werden, die in der zugeordneten Funktionseinheit verarbeitet werden, hat der frühere bezüglich der Reihenfolge den Vorrang. Der Befehl wird jedoch nicht von der Reservierungsstation angenommen, bis sie sieht, dass das entsprechende Dispatch-Bit gesetzt ist (XINSDISP(n) bei PH1).
  • An diesem Punkt wird, wenn die erforderlichen Operanden verfügbar sind, und vorausgesetzt, dass die Funktionseinheit nicht aus irgendeinem Grund blockiert oder belegt ist, und ferner vorausgesetzt, dass keine vorherigen Befehle in der Reservierungsstation warten, der Befehl sofort in die Ausführung in dem gleichen Taktzyklus gehen. Andernfalls wird der Befehl in die Reservierungsstation plaziert. Wenn ein Befehl mit einer Operandenkennung anstelle eines Operanden weitergeleitet wurde, vergleicht die Reservierungsstationslogik die Operandenkennung mit den Ergebniskennungen, die auf den Ergebniskennungsbussen (XRESTAG0B und XRESTAG1B) erscheinen. Wenn eine Übereinstimmung beobachtet wird, wird das Ergebnis von dem entsprechenden Ergebnisbus der Ergebnisbusgruppe 265 genommen. Dieses Ergebnis wird dann in die Funktionseinheit weitergeleitet, wenn sie die Ausgabe des Befehl ermöglicht. Andernfalls wird das Ergebnis in die Reservierungsstation als ein Operand plaziert, wobei sies hilft, den Befehl zu beenden, und das entsprechende Kennungs-Gültigkeitsbit wird gelöscht. Es sei bemerkt, dass beide Operanden gleichzeitig von einem oder beiden der Allzweck-Ergebnisbusse weitergeleitet werden können.
  • Die den Ergebnisbus 265 bildenden drei Ergebnisbusse umfassen zwei Allzweck-Ergebnisbusse XRES0B(31 : 0) und XRES1B(31 : 0), und ferner einen Ergebnisbus XRES2B(31 : 0), der Verzweigungen und Speicherungen zugeordnet ist. Da der Ergebnisbus XRES2B(31 : 0) Verzweigungen und Speichervorgängen zugeordnet ist, werden die Ergebnisse, die er bearbeitet (wie beispielsweise die Verzweigungs-PC-Adresse) nicht weitergeleitet. Die Funktionseinheiten überwachen die Ergebnisbusse XRES0B(31 : 0) und XRES1B(31 : 0), wohingegen der Neuordnungspuffer (ROB) 240 alle drei Ergebnisbusse überwacht.
  • Wenn Ergebnisse in der Reservierungsstation warten, wird jede gültige Operandenkennung ebenfalls mit Ergebniskennungen verglichen und eine ähnliche Weiterleitung durchgeführt. Die Ergebnisweiterleitung zwischen Funktionseinheiten und innerhalb einer Funktionseinheit wird auf diese Art und Weise durchgeführt. Diese Kennung in Verbindung mit den Reservierungsstationen ermöglicht, dass Befehle ungeordnet in verschiedenen Funktionseinheiten ausgeführt werden, während noch die richtige Reihenfolge von Abhängigkeiten beibehalten wird, und verhindert ferner, dass Operanden-Risiken die Ausführung nicht verwandter, nachfolgender Befehle blockieren. Die Befehlstypen und A-/B-Kennungen sind in PH2 verfügbar, während die Entscheidung auszugeben, in der nachfolgenden PH1 durchgeführt wird.
  • Operanden in der Reservierungsstation weisen eine Kennung und ein Gültigkeitsbit auf; wenn ihnen nicht die tatsächliche Operanden-Daten gesendet wurden. Mit anderen Worten, wenn ein Befehl an die Reservierungsstation weitergeleitet wird und ein bestimmter Operand noch nicht verfügbar ist, dann wird anstatt dessen eine diesem Operanden zugeordnete Operandenkennung an die Reservierungsstation anstelle des tatsächlichen Operanden geliefert. Ein Gültigkeitsbit ist jeder Operandenkennung zugeordnet. Wenn Ergebnisse an den Funktionseinheiten fertiggestellt werden, werden die Ergebnisse auf den Ergebnisbussen bereitgestellt, die mit den anderen Funktionseinheiten und mit dem ROB 240 gekoppelt sind. Die Ergebnisse werden mit Operandenkennungen in den Reservierungsstationen verglichen, und wenn ein Treffer auftritt, wird das Kennungs-Gültigkeitsbit gelöscht, und der Operand Von dem Ergebnisbus wird an die Stelle in der für Operanden gekennzeichneten Funktionseinheit weitergeleitet. Mit anderen Worten leitet ein Kennungsvergleich an Ergebniskennungen 0 und 1, die mit irgendeinem Eintrag in einer Reservierungsstation übereinstimmen, den Wert in diese Station weiter.
  • Ein Bestimmen, welche Befehlsquelle (die Reservierungsstation oder einer der vier, mit der Reservierungsstation gekoppelten ankommenden Busse) der nächste Kandidat für die lokale Decodierung und Ausgabe ist, wird in PH2 durch Prüfen des Gültigkeitsbits der Reservierungsstation für den Eintrag an dem Kopf der Reservierungsstation und der decodierten/priorisierten Befehlstyp-Busse durchgeführt; ein Eintrag in der Reservierungsstation hat Vorrang. Bei einer Funktionseinheit mit zwei Reservierungsstationen bilden die zwei Reservierungsstationen eine FIFO-Anordnung, wobei der erste an die Reservierungsstation weitergeleitete Befehl den Kopf des FIFO und der letzte an das FIFO weitergeleitete Befehl das Ende des FIFO bildet.
  • Eine lokale Decodierung durch die Funktionseinheit bedeutet, dass durch Überwachen des Typ-Busses die Funktionseinheit zuerst bestimmt, dass ein Befehl ihres Typs weitergeleitet wird. Dann prüft, sobald die Funktionseinheit einen Befehl identifiziert, den sie verarbeiten sollte, die Funktionseinheit den entsprechenden Opcode auf dem Opcode-Bus; um den genauen Befehl festzulegen, den die Funktionseinheit ausführen soll.
  • Bei dieser Ausführungsform der Erfindung hängt die Ausführungszeit von dem bestimmten Befehlstyp und der Funktionseinheit ab, die diesen Befehl ausführt. Insbesondere erstreckt sich die Ausführungszeit von einem Zyklus für alle ALU-, Verschieber-Einrichtung-, Verzweigungsoperationen und Lade/Speichervorgänge, die in den Cache treffen, bis zu mehreren Zyklen für Gleitkomma-, Lade/Speicher-Fehlzugriffs- und Spezialregister-Operationen. Ein Spezialregister wird als jedes nicht Allzweckregister definiert, das nicht umbenannt ist.
  • Die Funktionseinheiten arbitrieren für die Ergebnisbusse wie folgt: der Ergebnisbus 2 wird für Speichervorgänge verwendet, die keinen Operanden zurückgeben, und ebenfalls für Verzweigungen, die die berechnete Zieladresse zurückgeben. Es sei bemerkt, dass Verzweigungen Priorität haben. Die Allzweck- Ergebnisbusse 0 und 1 bearbeiten Ergebnisse von entweder der ALU0 oder ALU1, von der Verschiebeeinheit 510, von der Gleitkommaeinheit 525 und ebenfalls Ladevorgänge und Spezialregisterzugriffe.
  • Die Priorität unter den Funktionseinheiten bezüglich des Erhaltens eines Zugriffs auf den Ergebnisbus 0 (auch als XRES0B(31 : 0) gekennzeichnet) und dem Ergebnisbus 1 (auch als XRES1B(31 : 0) gekennzeichnet) ist in Fig. 4 dargelegt. In dem Diagramm von Fig. 4 bedeutet der Begriff "niederwertige Hälfte der DP" die untere Hälfte einer Zahl mit doppelter Genauigkeit. Der Mikroprozessor 500 benutzt 32-Bit-Operandenbusse, um eine Zahl mit doppelter Genauigkeit (DP = double precision) zu senden. Genauer gesagt wird, wenn eine Zahl mit doppelter Genauigkeit über die Operandenbusse übertragen wird, die Zahl in zwei 32-Bit-Teile übertragen, d. h. einem oberen 32-Bit-Teil und einem unteren 32-Bit-Teil. Die oberen und unteren Teile werden im allgemeinen über zwei Zyklen und zwei Operandenbusse übertragen. Die Ablehnung einer Anforderung für Zugriff auf einen bestimmten Ergebnisbus durch die Funktionseinheit wird diese Funktionseinheit blockieren und kann sich an die Decodiereinheit als ein Reservierungsstation-Voll-Zustand zurückfortpflanzen.
  • Die Ergebnisse umfassen einen 3-Bit-Status-Code (result status), der den Typ des Ergebnisses angibt (keinen, normal oder Ausnahme, plus befehlsspezifische Codes, d. h. Daten-Cache-Fehlzugriff, Aktivierungs-Trap und Verzweigungs-Fehlvorhersage). Bei einer Ausführungsform umfasst ein Ergebnis ebenfalls einen 32-Bit-Ergebnisoperanden und einen ausführlichen Ausführungs- oder Ausnahmestatus abhängig von der Einheit und dem Befehl. Die Ergebnisbusse 235 werden verwendet, um die Ergebnisse an den ROB 240 zurückzugeben, sowie auch zum Weiterleiten von Ergebnissen an die Funktionseinheits- Reservierungsstationen. Die gesamte Ergebnisinformation wird in dem ROB 240 gespeichert, wobei jedoch die Funktionseinheiten nur den Ergebnis- Statuscode und den Ergebnisoperanden betrachten.
  • Die meisten Funktionseinheiten arbeiten in der oben beschriebenen Art und Weise. Der Spezialregister-Blockabschnitt (SRBSEC) 512 und der Lade-/ Speicher-Abschnitt (LSSEC) 530 sind jedoch etwas unterschiedlich. Die SRBSEC- Funktionseinheit erhält Maschinenzustandsinformation, wie beispielsweise Status- und Steuerregister, die selten aktualisiert werden und nicht durch Register-Umbenennung unterstützt werden. Bewegungen zu und von den Spezialregistern des SRBSEC 512 werden immer bezüglich umgebender Befehle serialisiert. Somit benötigt der SRBSEC, da er eine separate Funktionseinheit ist, keine Reservierungsstation, da die Serialisierung gewährleistet, dass Operanden immer von der Registerdatei 235 verfügbar sind. Beispiele von Befehlen, die von der SRBSEC-Funktionseinheit ausgeführt werden, sind die "Bewegung zum Spezialregister" (MTSRS = move to special register)- und "Bewegung vorn Spezialregister" (MFSR = move from special register)-Befehle. Vor einem Ausführen eines derartigen Befehls, der Serialisierung erfordert, serialisiert der Mikroprozessor 500 alle spekulativen Zustände vor diesem Befehl oder führt sie aus. Der gleiche Spezialregisterblock, wie der bei der AM29000- Mikroprozessor-Herstellung von Advanced Micro Devices verwendet wird, kann als SRBSEC 512 verwendet werden.
  • Der Lade-/Speicher-Abschnitt LSSEC 530 verwendet eine Reservierungsstation auf die gleiche Art und Weise wie die anderen Funktionseinheiten. Der Lade- /Speicher-Abschnitt 530 steuert das Laden der Daten aus dem Daten-Cache- Speicher 245 und das Speichern von Daten in den Daten-Cache-Speicher 245. Bezüglich der Ausführung von Befehlen ist er jedoch die komplexeste Funktionseinheit. Der LSSEC ist eng mit dem Daten-Cache-Speicher (DCACHE) 245 und der Speicherverwaltungseinheit (MMU) 247 gekoppelt. Der Mikroprozessor 500 ist ausgestaltet, so dass jede Maßnahme, die den Daten-Cache-Speicher 245 oder den Hauptspeicher 255 modifiziert, nicht rückgängig gemacht werden kann. Außerdem muss eine derartige Modifikation in der programmierten Reihenfolge bezüglich der umgebenden Befehle stattfinden. Dies bedeutet, dass die Ausführung von Ladevorgängen, die in dem Daten-Cache-Speicher einen Fehlzugriff verursachen, und alle Speichervorgänge, mit der Stillegungslogik 242 in dem ROB 240 koordiniert werden müssen. Dies wird mit einem als Zugriffspuffer 605 bezeichneten Mechanismus durchgeführt, der ein FIFO ist, wo diese Operationen in Warteschlangen platziert werden, bis die entsprechenden ROB-Einträge von der ROB-Stillegungslogik angetroffen werden.
  • Der Zugriffspuffer 605 ist in dem LSSEC 530 angeordnet. Bei einer Ausführungsform ist der Zugriffspuffer 605 ein 2-4-Wort-FIFO von Speichervorgängen (Treffer/Fehlzugriff) oder Ladevorgänge, die verfehlen. Ein Speichervorgang, der trifft, kann nicht geschrieben werden, bevor er der nächste zum Ausführen ist. Ein Zugriff- oder Speicher-Puffer ermöglicht jedoch, dass dieser Zustand in einem vorübergehenden Speicher gehalten wird, der nachfolgend Datenreferenzen auf eine Art und Weise weiterleiten kann, die ähnlich der Weise ist, mit der der ROB Registerreferenzen weiterleitet. Der Zugriffspuffer schreibt schließlich in den Daten-Cache-Speicher 245 (CACHE), wenn der Inhalt des Zugriffspuffers in der programmierten Reihenfolge der nächste ist. Mit anderen Worten ist ein Zugriffspuffer oder Speicherpuffer ein FIFO-Puffer, der einen oder mehrere Lade-/Speicher-Befehle speichert, so dass die Verarbeitung weiterer Lade-/ Speicher-Befehle fortgesetzt werden kann. Beispielsweise kann der Zugriffspuffer 605 einen Speichervorgang halten, während ein nachfolgender Ladevorgang von der Lade-/Speichereinheit LSSEC 530 ausgeführt wird.
  • Die Funktion der ROB-Stillegungslogik 242 besteht darin, zu bestimmen, welche Befehle von dem ROB 240 in die Registerdatei 235 stillzulegen sind. Die Kriterien für eine derartige Stillegung eines ROB-Eintrags bestehen darin, dass der Eintrag gültig und zugeteilt sein muss, dass das Ergebnis von einer Funktionseinheit zurückgegeben wurde und dass der Eintrag nicht mit einer Fehlvorhersage oder einem Ausnahmeereignis markiert wurde.
  • Ein Speichervorgang erfordert zwei Operanden, d. h. die Speicheradresse und die Daten. Wenn ein Speichervorgang ausgegeben wird, wird er von der LSSEC-Reservierungsstation 600 an den Zugriffspuffer 605 übertragen, und ein Speicher-Ergebnisstatus wird an den ROB 240 zurückgegeben. Der Speichervorgang kann ausgegeben werden, wobei jedoch die Daten noch nicht verfügbar sind, obgleich die Adresse dort sein muss. In diesem Fall wird der Zugriffspuffer die Speicherdaten von den Ergebnisbussen 235 mit der Kennung auf eine Art und Weise aufnehmen, die einer Reservierungsstation ähnlich ist. Wenn der Speichervorgang ausgegeben wird, wird das Nachschlägen im Übersetzungs-Lookaside-Puffer (TLB) 615 in der Speicherverwaltungseinheit (MMU) 247 durchgeführt, und es wird auf den Daten-Cache-Speicher zugegriffen, um auf einen Treffer hin zu überprüfen.
  • Die physische Adresse von der MMU und der Seitenteil der virtuellen Adresse zusammen mit Statusinformation von dem Daten-Cache-Speicher wird in den Zugriffspuffer platziert. Mit anderen Worten wird der Cache-Speicher physisch adressiert. Wenn ein TLB-Fehlzugriff auftritt, wird in dem Ergebnisstatus widergespiegelt, und ein geeigneter Trap-Vektor wird auf den Ergebnisbus 2 getrieben - es wird keine weitere Maßnahme zu dieser Zeit durchgeführt. (Das TLB-Nachschlagen für Ladevorgänge wird auf die gleiche Art und Weise durchgeführt, obgleich jeder Trap-Vektor auf den Ergebnisbus 1 geht.)
  • Ein Trap-Vektor ist eine Ausnahme. Der Mikroprozessor 500 nimmt einen TLB- Trap, um eine neue Seite in den physischen Speicher zu laden und den TLB zu aktualisieren. Diese Maßnahme kann mehrere hundert Zyklen beanspruchen; wobei sie jedoch ein relativ seltenes Ereignis ist. Der Mikroprozessor 500 blockiert den PC, lagert die Mikroprozessor-Register aus, führt den Vektor aus, stellt den Registerzustand wieder her und führt eine Interrupt-Rückgabe durch.
  • Wenn der Speichervorgang den Kopf des Zugriffspuffers erreicht(was sofort sein wird, wenn er leer ist), wartet er darauf, dass der ROB 240 ein mit LSRETIRE gekennzeichnetes Signal aktiviert, das angibt, dass der entsprechende ROB-Eintrag den Stillegungszustand erreicht hat; er fährt dann mit dem Cache-Zugriff fort.
  • Der Zugriff kann jedoch verzögert werden; wenn der Cache beschäftigt ist, ein vorheriges Nachfüllen zu beenden oder einen Kohärenz-Vorgang ausführt. Inzwischen wird der ROB 240 fortfahren und einen weiteren Speicherbefehl antreffen. Um zu verhindern, dass der Speicherbefehl stillgelegt wird, bevor der LSSEC bereit ist, ihn zu beenden, wird ein Handshaking wie folgt verwendet. Der LSSEC 530 versorgt den ROB 240 mit einem Signal, das durch Aktivieren von LSDONE angibt, wenn der LSSEC einen Vorgang beendet hat. Es sei bemerkt, dass der ROB 240 bei einem Speicherbefehl (oder Ladebefehl) blockiert, wenn er LSDONE nicht gesehen hat, seit dem der vorherige Speicherbefehl stillgelegt wurde.
  • Ein Ladevorgang, der in den Daten-Cache-Speicher 245 trifft, muss nicht mit dem ROB 240 koordiniert sein. Ein Fehlzugriff muss jedoch mit dem ROB 240 koordiniert sein, um unnötige Nachfüllungen und ungültige externe Referenzen nach einer fehlvorhergesagten Verzweigung zu vermeiden.
  • Wenn ein Laden ausgegeben wird, wird der Cache-Zugriff sofort durchgeführt (vorausgesetzt, dass der Cache-Speicher nicht beschäftigt ist). Wenn es einen Treffer in dem Cache-Speicher gibt, wird das Ergebnis an den ROB auf dem Ergebnisbus mit einem normalen Statuscode zurückgegeben. Wenn es einen Fehlzugriff gibt, wird der Ladebefehl in dem Zugriffspuffer 605 platziert und ein load_miss Ergebnis-Code wird zurückgegeben. Wenn die Stillegungslogik 242 des ROB 240 diesen Zustand antrifft, aktiviert sie LSRETIRE und das Nachfüllen beginnt, wobei das gewünschte Wort auf den Ergebnisbus mit einem load_valid-Ergebnis-Statuscode platziert wird, sobald es ankommt (kein Warten darauf, dass das Nachfüllen beendet wird). Es sei bemerkt, dass der ROB 240 einen Laden nicht bei Aktivieren von LSRETIRE stillegen kann, wie er es für ein Speichern tut. Anstatt dessen muss der ROB 240 auf die Rückkehr der Daten warten.
  • Ein Laden kann sogar dann verarbeitet werden, wenn es vorherige nicht beendete Speichervorgänge gibt, die in dem Zugriffspuffer warten. Wenn es möglich gemacht wird, dass ein Laden ungeordnet bezüglich der Speichervorgänge durchgeführt wird, gewährleistet der Mikroprozessor 500, dass das Laden nicht von einer Stelle durchgeführt wird, die noch von einem vorherigen (bezüglich · der programmierten Reihenfolge) Speichervorgang zu modifizieren ist. Dies wird durch Vergleichen der Lade-Adresse mit jeder Speicher-Adresse im Zugriffspuffer 605 parallel mit dem Cache-Zugriff durchgeführt. Wenn keine übereinstimmen, wird das Laden fortgesetzt. Wenn eine übereinstimmt (der allerletzte Eintrag, wenn es mehr als einen gibt), dann werden die Speicherdaten von dem Zugriffspuffer 605 an den Ergebnisbus 265 anstatt der Cache- Daten weitergeleitet. Jeder Cache-Fehlzugriff, der aufgetreten sein kann, wird ignoriert (d. h. es findet kein Nachfüllen statt). Wenn die Speicherdaten noch nicht vorliegen, wird das Laden blockiert, bis die Speicherdaten ankommen. Außerdem hindern diese Maßnahmen gewünschterweise Speicherzugriffe daran, unnötigerweise Parallelismen zu sperren.
  • Zusätzliche Lade-/Speicher-Betrachtungen werden nun erläutert. Für Seitengrößen von 1KByte und 2KByte wird das Nachschlagen im Übersetzungs- Lookaside-Puffer (TLB) vor dem Cache-Speicher-Zugriff durchgeführt. Dies verursacht einen zusätzlichen Zyklus von Lade-/Speicher-Latenzzeit. Es sei ferner bemerkt, dass wenn LSSEC ein Laden oder Speichern "beendet", dies nicht bedeutet, dass die zugeordnete Cache-Speicher-Aktivität beendet ist. Anstatt dessen kann es noch eine Aktivität in entweder dem ICACHE oder dem DCACHE, der BIU, und extern, wie beispielsweise ein Nachfüllen geben.
  • Das Zugriffspuffer-Weiterleiten wird nicht für Teil-Wort-Lade-/Speicher- Vorgänge durchgeführt. Wenn eine Wort-Adressen-Übereinstimmung erfaßt wird, und es irgendeine Überlappung zwischen dem Laden und Speichern gibt, wird das Laden gezwungen, wie ein Cache-Fehlzugriff auszusehen, und wird im Zugriffspuffer 605 in eine Warteschlange platziert, so dass es nach dem Speichern ausgeführt wird (und kann oder kann nicht tatsächlich in den Cache- Speicher treffen). Wenn es keine Überlappung gibt, wird das Laden fortgesetzt, als ob es keine Adressenübereinstimmung gegeben hätte.
  • Es sei bemerkt, dass Lade-/Speicher-Mehrfachbefehle auf eine serialisierte Art und Weise ausgeführt werden, d. h. dass, wenn Lade-/Speicher-Mehrfachvorgänge ausgeführt werden, keine weiteren Befehle parallel ausgeführt werden.
  • Ein Lade- oder Speicher (Lade/Speicher)-Mehrfachbefehl ist eine Blockbewegung zu oder von der Registerdatei. Dieser Befehl umfasst eine gegebene Adresse, ein gegebenes Register und ein Zählwertfeld. Ein Beispiel eines Lade- /Speicher-Mehrfachbefehls ist LOADM (C, A, B), wobei C das Zielregister, A das Adressenregister und B die Anzahl von Übertragungen ist.
  • Es sei ferner bemerkt, dass Lade-Fehlzugriffe nicht notwendigerweise ein Nachfüllen verursachen. Anstatt dessen kann die Seite als nicht zwischenspeicherbar markiert werden, oder Ladevorgang kann von einem Zugriffspuffer erfüllt worden sein.
  • III (D) Befehlsablauf - Neuordnungspuffer und Befehlsstillegung
  • Wenn Ergebnisse an den ROB 240 zurückgegeben werden, werden sie den durch die Ergebniskennung spezifizierten Eintrag geschrieben, der irgendwo zwischen den Kopf- und Endezeigern des ROB sein wird. Die Stillegungslogik 242, die das Zurückschreiben, die Ausführung von Speichervorgängen und Lade-Fehlzugriffe, Traps und das Aktualisieren von PC0, PC1 und PC2 steuert, sucht nach Einträgen mit gültigen Ergebnissen in der programmierten Reihenfolge.
  • PC0, PC1 und PC2 sind abgebildete Register, die die PC-Werte von DEC, EXEC und WRITEBACK0,1 enthalten. Die Signale DEC, EXEC und WRITEBACK0,1 beziehen sich auf die Stufen Decodieren; Ausführen und Zurückschreiben der skalaren AM29000-Pipeline, wobei der AMD2900 ein Mikroprozessor ist, der von Advanced Micro Devices, Inc., verfügbar ist. Diese Signale werden verwendet, um die Pipeline bei einer Ausnahme neu zu starten. Mehr als ein PC wird aufgrund von verzögerten Abzweigungen verwendet. PC0, PC1 und PC2 werden an einem Interrupt oder Trap verwendet, um den alten Wert von DEC, EXEC und WRITEBACK0,1 zu erhalten, an den der Mikroprozessor 500 bei Antreffen einer Verzweigungs-Fehlvorhersage oder Ausnahme zurückkehren kann. PC0, PC1 und PC2 werden bei einer Interrupt-Rückgabe zum Neustarten der Pipeline verwendet und sind in der Stillegungslogik 242 im Neuordnungspuffer 240 enthalten. PC1 bildet den aktuellen Stillegungs-PC ab.
  • Wenn Einträge mit normalen Ergebnissen angetroffen werden, werden die Ergebnisoperanden (falls vorhanden) in die in den Einträgen spezifizierten Stellen in die Registerdatei (RF = register file) 235 geschrieben. Es gibt zwei RF- Schreibkanäle (WR = write ports), so dass zwei Ergebnisoperanden zur gleichen Zeit in der Registerdatei stillgelegt werden können. Der ROB 240 kann zusätzlich einen Speichervorgang und eine Verzweigung stilliegen, wobei ein Maximum von vier Befehlen pro Mikroprozessorzyklus stillegbar ist. Weitere Zustände, wie beispielsweise CPS-Bits und FPS-Stickybits können zu dieser Zeit ebenfalls aktualisiert werden. CPS bezieht sich auf den aktuellen Prozessorstatus; CPS gibt den Programmzustand und die Zustandscoderegister an. FPS bezieht sich auf Gleitkomma-Statusregister-Bits. FPS gibt die Status/Zustandscoderegister für die Gleitkomma-Funktionseinheit 525 an. FPS- Stickybits sind Bits, die durch einen Einstellvorgang gesetzt und nicht bei einem Löschzustand gelöscht werden können. FPS-Stickybits werden zur Rundung der Steuerung an Gleitkommazahlen verwendet. Wenn der Mikroprozessor 500 beispielsweise einen Wert subtrahiert oder verschiebt, können einige der niederstwertigen Bits (LSBs) von der Mantisse wegverschoben werden. FPS-Stickybits geben eine Anzeige, dass dieser Zustand eingetreten ist.
  • Ein Eintrag im ROB 240, dessen Ergebnisse noch nicht zurückgegeben wurden, veranlaßt, dass die Weiterverarbeitung blockiert wird, bis die Ergebnisse zurückkommen. Nichts nach diesem Eintrag kann stillgelegt werden, sogar falls es gültig ist. Wenn ein Speicherergebnis angetroffen wird, gibt der ROB 240 das Startsignal (go-ahead) an den Lade-/Speicher-Abschnitt, um das Speichern tatsächlich auszuführen und legt dann den Befehl still. Wenn ein Lade- Fehlzugriff-Ergebnis angetroffen wird, gibt der ROB 240 das Startsignal (goahead), um das Laden auszuführen. Wenn das Laden beendet ist, wird der angeforderte Ladeoperand an den ROB 240 mit dem Lade-Treffer-Status zurückgegeben, was ermöglicht, dass der Befehl stillgelegt wird, und was ebenfalls von allen Reservierungsstationen gesehen wird, die auf diesen Operanden warten. Wenn ein Verzweigungsergebnis angetroffen wird, verwendet es den ROB 240, um den PC1 zu aktualisieren.
  • Der Architekturzustand des Mikroprozessors ist der aktuelle Zustand des Stillegungs-PCs in dem Programm. Der spekulative Zustand des Mikroprozessors sind alle Einträge in dem Neuordnungspuffer, in dem Decodierer und der aktuelle Wert des FETCHPC. Diese bilden die aktuelle spekulative Warteschlange von Befehlen, die dynamisch aktualisiert wird. Bei einer Ausnahme oder Fehlvorhersage kann der gesamte spekulative Zustand, jedoch nicht der Architekturzustand gelöscht werden, da er der aktuelle Zustand der Registerdatei ist.
  • Es wurde vorher erwähnt, dass Befehle über einen Verzögerungsschlitz einer fehlvorhergesagten Verzweigung hinaus ausgeführt werden können, bevor die Fehlvorhersage offensichtlich ist. Dieses Auftreten wird von dem ROB 240 aussortiert. Wenn eine Fehlvorhersage erfaßt wird, werden alle nicht weitergeleiteten Befehle gelöscht, und die Abrufeinrichtung 257 wird umgeleitet. Keine der Funktionseinheiten werden über die Fehlvorhersage in Kenntnis gesetzt (die Verzweigungseinheit 520 setzt jedoch "Lösch"-Bits in allen gültigen Einträgen in ihrer eigenen Reservierungsstation 550, so dass diese Verzweigungen harmlos ausgeführt werden und an ROB 240 ohne Verursachen von Fehlvorhersagen zurückkehren).
  • Wenn eine derartige Fehlvorhersage auftritt, wird der entsprechende Eintrag in dem ROB als fehlvorgesagt zugeteilt. Wenn die nachfolgenden Einträge von der Funktionseinheit weitergeleitet werden, werden sie als beendet jedoch fehlvorhergesagt markiert. Die Stillegungslogik 242 im Neuordnungspuffer 240 ignoriert diese Einträge und hebt deren Zuteilung auf.
  • Zur gleichen Zeit wird der Verzweigungsergebnis-Status, der eine genommene/nicht genommene und korrekte/nicht korrekte Vorhersage angibt, an den ROB 240 zurückgegeben. Ein Fehlvorhersage-Ergebnis veranlaßt den ROB, sofort ein Löschbit in allen Einträgen beginnend mit dem zweiten nach dem Verzweigungseintrag (um den Verzögerungsschlitz zu berücksichtigen) an dem Endezeiger zu setzen. In dem zweiten Zyklus nach diesem Vorfalls wird Decode beginnen, die Zielbefehle weiterzuleiten, denen wie gewöhnlich Kennungen beginnend von dem Endezeiger zugewiesen werden. Wenn die gelöschten Einträge von der ROB-Stillegungslogik 242 angetroffen werden, werden sie verworfen. Die Lade-/Speicher-Einheit wird über alle Löschvorgänge in Kenntnis gesetzt, auf die sie auf ein Startsignal (go-ahead) von dem ROB mittels eines LSCANCEL-Signal wartet, das auf einer LSCANCEL-Leitung zwischen dem ROB 240 und dem Lade-/Speicherabschnitt LSSEC 530 übertragen wird. Das Signal LSCANCEL gibt jeden anhängigen Speichervorgang oder Lade-Fehlzugriff im Zugriffspuffer 605 an, der zu löschen ist. Der Zugriffspuffer 605 verhält sich wie ein FIFO, und der nächst-älteste Speichervorgang ist der Befehl, der gelöscht wird.
  • Wenn eine Ausnahme bei der Ausführung eines bestimmten Befehls auftritt, ist keine globale Maßnahme erforderlich. Anstatt dessen wird nur der Ausnahmezustand in dem an den ROB 240 zurückgegebenen Ergebnisstatus widergespiegelt. Die geeignete Trap-Vektor-Zahl wird im allgemeinen anstelle des normalen Ergebnisoperanden zurückgegeben (ausgenommen in Fällen, wobei die RF-Aktualisierung nicht gesperrt ist, wobei in diesem Fall der ROB die Vektor-Zahl generiert). Die Trap-Vektor-Zahl ist die Zahl, die angibt, welche der vielen Typen von Traps aufgetreten sind, und wohin beim Auftreten eines bestimmten Traps zu gehen ist. Typische Beispiele, die zu dem Auftreten eines Traps führen, sind ein Teilen durch Null; arithmetisches Überlaufen und eine fehlende TLB-Seite. Wenn der ROB 240 den Ausnahmezustand bei dem Prozeß des Stillegens von Befehlen antrifft, initiiert er einen Trapvorgang, der aus Löschen aller Einträge aus dem ROB 240, Aktivieren eines EXCEPTION-Signals an alle Funktionseinheiten, um sie zu löschen (und IDECODE), Erzeugen eines Trap-Vektors durch das Vf-Bit und Umleiten der Abruf-Vorrichtung 257 an den Trap-Verarbeitungs-Code aufgebaut ist. Das Vf-Bit gibt an, ob ein Trap als ein externes Abrufen (als ein Laden aus einer Tabelle von Vektoren) oder intern durch Verketten einer Konstanten mit der Vektorzahl genommen werden sollte. Das Vf-Bit ist ein Merkmal der Architektur der AM29000-Mikroprozessor- Serie von Advanced Micro Devices.
  • Es sei bemerkt, dass die in der Registerdatei 235 gespeicherten Daten den aktuellen Ausführungszustand des Mikroprozessors darstellen. Die in dem ROB 240 gespeicherten Daten stellen jedoch den vorhergesagten Ausführungszustand des Mikroprozessors dar. Wenn ein Befehl stillzulegen ist, wird das entsprechende in dem ROB 240 gespeicherte Ergebnis an die Registerdatei 235 übertragen und dann stillgelegt.
  • III (E) Befehlsablauf-Timing
  • Um den Betrieb des superskalaren Mikroprozessors 500 hinsichtlich des Befehlsablauf-Timings darzustellen, wird die nachstehende Tabelle 2 bereitgestellt. Tabelle 2 stellt die Pipeline-Stufen des Mikroprozessors 500 zusammen mit bedeutenden Ereignissen, die während jeder dieser Stufe auftreten, dar. Die Stufen der Pipeline werden nachstehen in der ersten Spalte der Tabelle 2 aufgeführt.
  • Tabelle 2 zeigt, was sich in jeder Phase (PH&sub1; und PH&sub2; eines jeden Mikroprozessorzyklusses) ereignet, wenn ein grundlegender Ganzzahlen-Befehl durch den Mikroprozessor 500 mit keinerlei Blockierungen läuft sowie auch Verzweigungskorrektur-Timing (in Klammern).
  • III (F) Speicherverwaltungseinheit, Daten-Cache-Speicher und Bus-Interface- Einheit
  • Die Speicherverwaltungseinheit (MMU) 247 ist im wesentlichen die gleiche wie in dem von Advanced Micro Devices, Inc. hergestellten Mikroprozessor AM29050. Die MMU 247 übersetzt virtuelle Adressen in physische Adressen zum Befehlsabrufen sowie auch für Datenzugriff. Ein Unterschied bezüglich des Befehlsabrufens besteht zwischen dem AM29050 und dem Mikroprozessor 500 darin, dass bei dem AM29050 die MMU über eine Referenz zu dem Verzweigungsziel-Cache-Speicher (BTC = branch target cache) konsultiert wird, wohingegen der Mikroprozessor 500 keinen Verzweigungsziel-Cache-Speicher benutzt, und die MMU für eine BTC-Referenz nicht konsultiert. Der Verzweigungsziel-Cache-Speicher ist ein Cache-Speicher nur aus Verzweigungszielen. Der Verzweigungsziel-Cache-Speicher bildet einen Teil der skalaren Pipeline des von Advanced Micro Devices hergestellten Mikroprozessors AM29050. Der BTC (branch target cache) ruft den Befehl einmal pro Taktzyklus ab.
  • Um die Anforderung an die MMU 247 nach Befehls-Abrufadressen- Übersetzungen weiter zu verringern, enthält der ICACHE 205 einen Übersetzungs-Lookaside-Puffer mit einem Eintrag (TLB) 615, auf den sich ICACHE bei Cache-Fehlzugriffen bezieht. Der TLB wird nachgefüllt, wenn eine Übersetzung erforderlich ist, die nicht in den TLB mit einem Eintrag trifft. Somit wird der TLB 650 wie benötigt von der MMU nachgefüllt. Da die MMU 247 mit dem ICACHE 205 nicht eng gekoppelt ist, verringert dies die Nachfüllzeit und ebenfalls gewünschterweise die Last auf die MMU.
  • Der Daten-Cache-Speicher 245 ist als ein physisch adressierter, zweifach teilassoziativer 8K-Speicher organisiert. Bei dieser Ausführungsform wird für Seitengrößen geringer als 4K die Adressenübersetzung zuerst durchgeführt. Diese Anforderung ist für 1K- und 2K-Seitengrößen richtig und erhöht die Latenzzeit von Ladungen, die in zwei Zyklen treffen. 4K-Seitengrößen, die ein Bit von Unsicherheit in dem Cache-Index aufweisen, werden durch Aufteilen des Cache-Speichers in zwei 4K-Arrays bearbeitet, was einen Zugriff auf beide möglichen Blöcke ermöglicht. Ein vierfacher Vergleich wird zwischen den beiden Cache-Kennungen und den beiden physischen Adressen von der MMU durchgeführt, um die richtige auszuwählen.
  • Der Daten-Cache-Speicher 245 implementiert eine gemischte Zurückschreib-/ Durchschreib-Verfahrensweise. Genauer gesagt werden Schreib-Fehlzugriffe als Durchschreiben ohne Zuteilung durchgeführt; Schreibtreffer finden nur an vorher durch eine Last zugeteilten Blöcken statt und können ein Durchschreiben abhängig von der Cache-Kohärenz verursachen. Der Mikroprozessor 500 unterstützt Daten-Cache-Kohärenz für Mehrprozessorsysteme und wirksame E/A von zwischenspeicherfähigem Speicher mit dem bekannten MOESI(Modified Owned Exclusive Shared Invalid (Futurebus))-Protokoll. Das MOESI-Protokoll gibt einen von fünf Zuständen eines bestimmten Cache- Blocks an. Wohingegen der Mikroprozessor 500 von Fig. 3A bis 3B das MOESI-Protokoll benutzt, benutzt der später erläuterte Mikroprozessor von Fig. 6 das ähnliche MESI-Protokoll.
  • Die Bus-Interface-Einheit (BIU) 260 benutzt das gleiche externe Interface wie der von Advanced Micro Devices, Inc. hergestellte Mikroprozessor AMD29030. Außerdem benutzt die BIU 260 einen einzigen internen 32-Bit-Bus für Adressen, Befehle und Daten, d. h. den internen Adressdaten-Bus (IAD-Bus) 250.
  • Bei dieser besonderen Ausführungsform ist der Hauptspeicher 255, der wahlweise als ein externer Speicher bezeichnet wird, ein einziger flacher Raum mit nur einer Unterscheidung zwischen E/A und Daten/Befehl. Bei der besonderen gezeigten Ausführungsform umfasst der Speicher 255 einen Nur-Lese-Speicher (ROM = read only memory) und weist keinen Unterschied zwischen Befehlen und Daten auf. Weitere Typen von externen Speicheranordnungen können wahlweise als Hauptspeicher 255 benutzt werden.
  • Wie es in Fig. 3A und 3A ersichtlich ist, werden die BIU 260, der ICACHE 205, der DCACHE 245, die MMU 247 und der SRBSEC 512 alle durch den 32- Bit-IAD-Bus 250 verknüpft. Der IAD-Bus 250 wird hauptsächlich zur Kommunikation zwischen der BIU 260 und den Cache-Speichern (ICACHE 205, DCACHE 245), für externe Zugriffe auf Cache-Fehlzugriffe und Kohärenz-Operationen verwendet. Der IAD-Bus 250 verarbeitet sowohl Adressen als auch Daten. Er ist ein statischer Bus, wobei die BIU 260 während PH1 treibt und alle anderen Einheiten während PH2 treiben. Jede Anforderung für den IAD-Bus 250 muss durch Bus-Arbitrierung und Bus-Bewilligung gehen, die von einer in Fig. 5 gezeigten Bus-Arbitrierungsblock 700 bereitgestellt wird. Um Platz zu sparen ist der Bus-Arbitrierungsblock 700 nicht in dem Blockdiagramm des Mikroprozessors 500 von Fig. 3A und 3B gezeigt.
  • Die Arbitrierung für den IAD-Bus umfasst eine Busüberwachung (auf Cache- Kohärenz), die die erste Priorität bei den Arbitrierungsaktivitäten erhält. Eine Anforderung für den IAD-Bus wird während der frühen PH1 durchgeführt und auf diese wird in der sehr späten PH1 geantwortet. Wenn eine Funktionseinheit den IAD-Bus in PH1 bewilligt bekommt, kann sie eine Adresse auf den IAD-Bus während der folgenden PH2 treiben und eine Maßnahme von der BIU anfordern (beispielsweise Befehl-Abrufen, Laden).
  • Der IAD-Bus 250 ist ein relativ niederfrequenter Adressen-, Daten- und Steuer-Bus, der alle Haupt-Arrays in dem Mikroprozessor 500 miteinander und dem externen Bus verknüpft. Der IAD-Bus 250 liefert relativ niederfrequente Übertragungen von Operationen, wie beispielsweise Busüberwachung, Cache- Nachfüllen, MMU-Übersetzungen und Spezialregister-Aktualisierungen an abgebildeten Arrays. Bei einer Ausführungsform der Erfindung umfasst der IAD- Bus 250 32 Bits, auf die Adressen und Daten multiplext werden. Der IAD-Bus 250 umfasst ferner 12 Steuerleitungen, d. h. eine Lese = Steuerleitung und Schreib-Steuerleitung für jeden der damit gekoppelten Blöcke, nämlich für den ICACHE, den DCACHE, den TLB, den SRBSEC, den LSSEC und die BIU.
  • Der in Fig. 5 gezeigte IAD-Arbitrierungsblock 700 benutzt ein Anforderungs-/ Bewilligungsprotokoll, um zu bestimmen, welchen Komponenten (ICACHE 205, BIU 260, BRNSEC 520, DCACHE 245, SRBSEC 512 oder MMU 247) Zugriff auf den IAD-Bus 250 zu irgendeiner bestimmten Zeit bewilligt wird. Im externen Speicher 255 wird über die BIU 260 die höchste Priorität für Busüberwachungszwecke bewilligt. Die Busüberwachung ist Teil des Daten-Konsistenz- Protokolls für den Mikroprozessor 500. Da der Mikroprozessor 500 modifizierte Daten aufweisen kann, die lokal in dem Daten-Cache-Speicher gehalten werden können, werden derartige Daten aktualisiert, wenn Schreibvorgänge in den Speicher auftreten. Der Mikroprozessor 500 liefert ferner die modifizierten Daten, wenn ein Lesevorgang auftritt, an einen modifizierten Block, der in dem Daten-Cache-Speicher lokal gehalten wird. Ein Zurückschreibschema mit Busüberwachung wird bei dem Cache-Betrieb des Mikroprozessors 500 benutzt.
  • Wie es in Fig. 5 ersichtlich ist, wird eine jeweilige Anforderungsleitung zwischen dem IAD-Arbitrierungsblock 700 und jedem der ICACHE 205, BIU 260, BRNSEC 520, DCACHE 245, SRBSEC 512 oder MMU 247 gekoppelt. Jede dieser Anforderungsleitungen ist mit der Steuerlogik 705 gekoppelt, wobei der Ausgang dieser mit einem Treiber 710 gekoppelt ist. Der IAD- Arbitrierungsblock 70 umfasst eine jeweilige Bewilligungsleitung für jeden der ICACHE 205, BIU 260, BRNSEC 520, DCACHE 245, SRBSEC 5I2 oder MMU 247. Wenn eine bestimmte Komponente Zugriff auf den IAD-Bus 250 wünscht, übertragt diese Komponente ein Anforderungssignal an den IAD-Arbitrierungsblock und an die Steuerschaltung 705. Beispielsweise sei angenommen, dass die BIU 260 Zugriff auf den IAD-Bus 250 zu erlangen wünscht, um einen Speicherzugriff durchzuführen. In diesem Fall überträgt die BIU 260 eine IAD- Buszugriffsanforderung an den IAD-Arbitrierungsblock 700 und die Steuerschaltung 705. Der IAD-Arbitrierungsblock 700 bestimmt die Priorität von Anforderungen, wenn mehrere Anforderungen für Zugriff auf den IAD-Bus 250 zur gleichen Zeit vorhanden sind. Der Arbitrierungsblock 700 gibt dann eine Bewilligung auf der Bewilligungsleitung der bestimmten Vorrichtung aus, der, wie er entschieden hat, Zugriff auf den IAD-Bus gemäß dem Prioritätsschema bewilligt werden sollte. Bei dem vorliegenden Beispiel wird ein Bewilligungssignal auf der BIU-Bewilligungsleitung ausgegeben, und dann fährt die BIU 260 fort, auf den IAD-Bus 250 zuzugreifen.
  • Der Ausgang der Steuerschaltung 705 ist mit dem IAD-Bus 250 gekoppelt. Jede der folgenden Komponenten ICACHE 205, BIU 260, BRNSEC 520, SRBSEC 512, DCACHE 245 und MMU 247 sind mit einer Treiberschaltung 710 ausgestattet, um es derartigen Komponenten zu ermöglichen, den IAD-Bus 250 zu treiben. Jede dieser Komponenten ist ferner mit einem Latch 715 ausgestattet, um es diesem Komponenten zu ermöglichen, die Werte von dem IAD-Bus 250 zwischenzuspeichern. Die Steuerschaltung 705 liefert das Anforderungsbewilligungsprotokoll für den IAD-Bus. Eine Funktionseinheit erkennt lokal, dass ein Zugriff auf den IAD-Bus gewünscht wird und sendet eine Anforderung an den Arbitrierungsblock 700. Der Arbitrierungsblock 700 nimmt die Anforderung mit der höchsten Priorität und bewilligt demgemäß einen Zugriff. Das Latch 750 meldet das Lesen der angeforderten Daten, wenn eine Übertragung an diesem Block stattfindet. Der Treiber 710 meldet das Treiben des lokal verfügbaren Werts, um eine andere Position zu treiben, wo ihn ein weiterer Block lesen wird. Das Durchlaufen dieser Bus-Arbitrierung, um Zugriff auf den IAD-Bus 250 zu erlangen, fügt eine Latenzzeit hinzu, wobei jedoch herausgefunden wurde, dass nichtsdestotrotz eine annehmbare Leistung bereitgestellt wird. Das Ausstatten des Mikroprozessors 500 mit dem IAD-Bus 250 ist erheblich kostenwirksamer als das Bereitstellen von zugeordneten Wegen unter all den oben aufgeführten Abschnitten, die mit dem IAD-Bus verbunden sind.
  • Fig. 5A ist ein Timing-Diagramm, das den Status ausgewählter Signale in den Mikroprozessor 500 während der mehreren Stufen der Pipeline derselben darstellt. Fig. 5A zeigt eine derartige Pipeline für die sequentielle Verarbeitung. Im Gegensatz dazu zeigt das Timing-Diagramm von Fig. 58 ein ähnliches Timing-Diagramm für den Mikroprozessor 500, mit der Ausnahme, dass das Timing-Diagramm von Fig. 5B auf den Fall gerichtet ist, wobei eine Verzweigungs-Fehlvorhersage und -Wiederherstellung auftritt.
  • Genauer gesagt stellen Fig. 5A und 5B den Betrieb des Mikroprozessors 500 während der fünf wirksamen Pipelinestufen von Abrufen, Decodieren, Ausführen, Ergebnis/ROB(Ergebnis-Weiterleiten - Ergebnis an ROB weitergeleitet) Stillegungs-/Register-Datei (Zurückschreib-Operand aus dem ROB in der Registerdatei stillgelegt) dar. Die fünf Stufen der Mikroprozessor-Pipeline sind horizontal oben an diesen Timing-Diagrammen aufgeführt. Die Signale, die diese Timing-Diagramme aufbauen, sind vertikal zur Linken der Diagramme aufgelistet und werden wie folgt aufgelistet: Das Signal PH1 ist das Taktsignal für den Mikroprozessor 500. FPC (31 : 0) ist der Abruf-PC-Bus (FPC). IRO- 3(31 : 0) stellt die Befehlsbusse dar. Die Timing-Diagramme zeigen ferner die Source A/B pointer, die angeben, welche bestimmten Operanden von einem bestimmten Decodierungsbefehl in dem ROB benötigt werden. Die Timing- Diagramme umfassen ferner ein Signal DREGF/ROB access, dass den Registerdatei/ROB-Zugriff angibt. Das Signal issue instr/dest tag gibt die Ausgabe von Befehlen/Zielkennungen an. Das A/B-Lese-Operandenbussignal gibt die Übertragung von A- und B = Operanden auf den A- und B-Operandenbussen an. Das Signal funct unit exec. gibt die Ausführung eines ausgegebenen Befehls an einer Funktionseinheit an. Das Signal result bus arb gibt die Arbitrierung für den Ergebnisbus an. Das Signal Result bus forward gibt die Weiterleitung von Ergebnissen auf dem Ergebnisbus an, sobald derartige Ergebnisse von der Funktionseinheit erzeugt werden. Das Signal ROB write result gibt an, dass das Ergebnis in den ROB geschrieben wird. Das Signal ROB tag forward gibt die Weiterleitung einer Operandenkennung von dem ROB an eine Funktionseinheit an. Das Signal REGF write/retire gibt das Stillegen eines Ergebnisses von dem ROB an die Registerdatei an. Das Signal PC(31 : 0) gibt dem Programmzähler (PC = program counter) an, wenn ein Befehl als nicht länger spekulativ stillgelegt, wobei der PC immer aktualisiert wird.
  • Bei dem Timing-Diagramm von Fig. 5A ist die Pipeline zum Ausführen eines sequentiellen Befehlsstroms dargestellt. Bei diesem Beispiel wird der vorhergesagte Ausführungsweg tatsächlich genommen, so wie er auch direkt von dem Cache-Speicher verfügbar ist. Kurz gesagt werden bei der Abruf-Pipeline- Stufe Befehle aus dem Cache-Speicher zur Verarbeitung durch den Mikroprozessor abgerufen. Ein Befehl wird in der Decodier-Pipeline decodiert und in der Ausführungs-Pipeline-Stufe ausgeführt. Es sei bemerkt, dass die Quellen- Operandenbusse und Ergebnisbusse eine Breite von 32-Bit aufweisen, die der Ganzzahlgröße entspricht. Zwei Zyklen werden von einem Befehlsbus-/ Operandenbus verlangt, um einen 64-Bit-Wert für eine Gleitkommaoperation mit doppelter Genauigkeit zu treiben.
  • In der Ergebnis-Pipeline-Stufe werden Operandenwerte direkt von der Funktionseinheit, die das Ergebnis erzeugte, an die anderen Funktionseinheiten zur Ausführung weitergeleitet. In der Taktphase PH1 der Ergebnisstufe wird die Stelle des spekulativen Befehls mit dem Zielergebnis sowie auch irgendeinem Status beschrieben. Mit anderen Worten wird das von einer Funktionseinheit erzeugte Ergebnis in einen Eintrag in dem Neuordnungspuffer platziert, und diesem Eintrag wird eine Anzeige der Gültigkeit sowie auch Zuteilung gegeben. Auf diese Art und Weise kann der Neuordnungspuffer nun Operandendaten für einen angeforderten Operanden direkt weiterleiten, anstatt eine Operandenkennung weiterzuleiten. In der Taktphase PH2 der Ergebnis-Pipeline-Stufe kann die neu zugeteilte Kennung durch aufeinanderfolgende Befehle erfaßt werden, die erfordern, dass die Kennung einer ihrer Quellenoperanden ist. Dies wird in dem Timing-Diagramm von Fig. 5A durch direktes Weiterleiten des Ergebnisses "c" über die Weiterleitung der ROB-Kennung auf die Quellen A/B-Operandenbusse dargestellt, wie es durch den Pfeil in Fig. 5A angegeben ist. Es sei bemerkt, dass in Fig. 5A "a" und "b" Operanden sind, die ein Ergebnis "c" ergeben, und das "c" und "d" Operanden sind, die ein Ergebnis "e" ergeben.
  • Die Stillegungs-Pipeline-Stufe, die die letzte Stufe der Pipeline ist, ist die Stufe, wo der reale Programmzähler (PC) oder Stillegungs-PC gehalten wird. In der Taktphase PH1 der Stillegungs-Pipeline-Stufe wird das Ergebnis des Vorgangs aus dem Neuordnungspuffer in die Registerdatei geschrieben, und der Stillegungs-PC wird aktualisiert, um dieses Zurückschreiben widerzuspiegeln. Mit anderen Worten wird der Stillegungs-PC aktualisiert, um den Befehl aufzuweisen, der gerade in der Registerdatei als nicht länger spekulativ stillgelegt wurde. Der Eintrag für diesen Befehl oder dieses Ergebnis wird in dem Neuordnungspuffer aufgehoben. Da der Eintrag aufgehoben ist, werden nachfolgende Bezüge auf das Register "c" zu einem Lesevorgang aus der Registerdatei anstelle eines spekulativen Lesens aus dem Neuordnungspuffer führen.
  • Fig. 5B zeigt die gleichen fünf Pipelinestufen wie das Timing-Diagramm von Fig. 5A. Das Timing-Diagramm von Fig. 5B zeigt jedoch den Betrieb des Mikroprozessors 500, wenn eine Verzweigungs-Fehlvorhersage auftritt. XFPC kennzeichnet eine Umkehrung des FPC-Bussignals.
  • IV. EINE ALTERNATIVE AUSFÜHRUNGSFORM DES SUPERSKALAREN MIKRO- PROZESSORS
  • Wohingegen die oben beschriebene superskalare Mikroprozessor-Ausführungsform am vorteilhaftesten verwendet wird, um RISC-Programme zu verarbeiten, wobei alle Befehls-Opcodes von der gleichen Größe sind, ist die nun als Mikroprozessor 800 beschriebene Ausführungsform des Mikroprozessors imstande, Befehle zu verarbeiten, wobei die Opcodes in der Größe veränderbar sind. Beispielsweise ist der Mikroprozessor 800 imstande, sogenannte X86- Befehle zu verarbeiten, die von dem bekannten IntelTM-Befehlssatz benutzt werden, der Opcodes veränderlicher Länge verwendet. Der Mikroprozessor 800 benutzt einen RISC-Kern, der dem RISC-Kern des obigen Mikroprozessors 500 ähnlich ist. Der Begriff "Risc-Kern" bezieht sich auf den zentralen Kern des Mikroprozessors 500, der eine inhärente RISC (Reduced Instruction Set Computer)-Architektur mit den Funktionseinheiten, dem Neuordnungspuffer, der Registerdatei und dem Befehlsdecodierer des Mikroprozessors 500 ist.
  • Die Architektur des Mikroprozessors 800 ist imstande, sogenannte CISC (Complete Instruction Set Computer)-Befehle zu nehmen, wie beispielsweise diejenigen, die in dem IntelTM-X86 Befehlssatz gefunden werden, und diese Befehle in RISC-ähnliche Befehle (ROPs) umzuwandeln, die dann von dem RISC-Kern verarbeitet werden. Dieses Umwandlungsverfahren findet in einem Decodierer 805 des Mikroprozessors 800 statt, wie es Fig. 6 dargestellt ist. Der Decodierer 805 decodiert CISC-Befehle, wandelt die CISC-Befehle in ROPs um und leitet dann die ROPs an die Funktionseinheiten zur Ausführung weiter.
  • Die Fähigkeit des Mikroprozessors 800, den RISC-Kern desselben mit einer großen Anzahl von Befehlen pro Taktzyklus zu versorgen, ist eine Quelle der erheblichen Leistungsverbesserung, die durch diesen superskalaren Mikroprozessor bereitgestellt wird. Der Befehls-Cache-Speicher (ICACHE) 810 ist die Komponente des Mikroprozessors 800, die diesen Befehlsvorrat als eine Warteschlange von Bytes oder Bytewarteschlange (Byte Q) 815 liefert. Bei dieser besonderen Ausführungsform der Erfindung ist der Befehls-Cache-Speicher 810 ein wirksamer vierfach teilassoziativer, linear adressierter 16KByte- Befehls-Cache-Speicher.
  • Wie es in Fig. 6 ersichtlich ist, wird die Byte Q 815 des Befehls-Cache- Speichers 810 an den Befehls-Decodierer 805 geliefert. Der Befehls-Decodierer 805 bildet jeden dazu gelieferten Befehl in eine oder mehrere ROPs ab. Das ROP-Dispatch-Fenster 820 des Decodierers 805 umfasst vier Dispatch- Positionen, in die ein Befehl von dem ICACHE 810 abgebildet werden kann. Die vier Dispatch-Positionen werden als D0, D1, D2 und D3 gekennzeichnet. Bei einem ersten Beispiel sei angenommen, dass der von der Byte Q 815 an den Decodierer 805 gelieferte Befehl ein Befehl ist, der auf zwei ROP-Dispatch- Positionen abgebildet werden kann. In diesem Fall bildet, wenn dieser erste Befehl an den Decodierer 805 geliefert wird, der Decodierer 805 den Befehl in eine erste ROP ab, die dann an die Dispatch-Position D0 und eine zweite ROP geliefert wird, die an die Dispatch-Position D1 geliefert wird. Es sei dann angenommen, dass ein nachfolgender zweiter Befehl in drei ROP-Positionen abbildbar ist. Wenn dieser zweite Befehl von der Byte Q 815 an den Decodierer 805 geliefert wird, wird der Befehl in eine dritte ROP abgebildet, die an die Dispatch-Position D2 geliefert wird, und eine vierte ROP, die an die Dispatch- Position D3 geliefert wird. Die an den Dispatch-Positionen D0 bis D3 vorliegenden ROPs werden dann an die Funktionseinheiten weitergeleitet. Es sei bemerkt, dass die verbleibende dritte ROP, auf die der zweite Befehl abgebildet wird, auf das nächste Dispatch-Fenster warten muss, um verarbeitet zu werden, bevor eine derartige ROP weitergeleitet werden kann.
  • Information bezüglich dessen, welche bestimmten Bytes dieser Befehls-Cache- Speicher 810 in die Byte Q 815 zu treiben hat; ist in dem Verzweigungsvorhersage-Block 825 enthalten, der eine Eingabe in den Befehls-Cache-Speicher 810 ist. Der Verzweigungsvorhersage-Block 825 ist das nächste Block-Array, das auf einer blockweisen Basis die nächste vorhergesagte Verzweigungsstelle angibt. Eine Verzweigungsvorhersage-Funktionseinheit 835 führt Verzweigungen auf eine Art und Weise ähnlich derjenigen des BRNSEC 520 des Mikroprozessors 500 von Fig. 3A bis 3B durch. Der Befehls-Cache-Speicher 810 ist ebenfalls mit einem Vorabrufblock 830 ausgestattet, der angeforderte Befehls- Cache-Fehlzugriffe aus dem externen Speicher abruft.
  • Der Mikroprozessor 800 umfasst vier Ganzzahlen-Funktionseinheiten, an die die vier ROP-Positionen des Decodierers 805 ausgegeben werden können, d. h. die Verzweigungs-Funktionseinheit 835, die ALU0/Verschieber- Funktionseinheit 840, die ALU1-Funktionseinheit 845 und die Spezialregister- Funktionseinheit 850. Die Verzweigungs-Funktionseinheit 835 umfasst eine Latenzzeit von einem Zyklus, so dass eine neue ROP von der Verzweigungs- Funktionseinheit 835 je Taktzyklus angenommen werden kann. Die Verzweigungseinheit 835 umfasst eine Reservierungsstation mit zwei Einträgen 835R. Für die Zwecke dieses Dokuments wird eine Reservierungsstation mit zwei Einträgen als synonym mit zwei Reservierungsstationen angesehen. Die Verzweigungs-Funktionseinheit 835 behandelt alle X86-Verzweigungs-, Ruf- und Rückkehr-Befehle. Diese verarbeitet ebenfalls bedingte Verzweigungsroutinen.
  • Die ALU0/Verschieber-Funktionseinheit 840 weist eine Latenzzeit von einem Zyklus auf. Eine neue ROP kann in der Einheit 840 pro Taktzyklus angenommen werden. Die ALU0/Verschieber-Funktionseinheit 6840 umfasst eine Reservierungsstation mit zwei Einträgen 840R, die bis zu zwei spekulative ROPs hält. Alle X86-Arithmetik- und -Logik-Berechnungen gehen durch diese Funktionseinheit oder wahlweise durch die andere Arithmetik- und Logik-Einheit ALU1 845. Außerdem werden Verschiebungs-, Drehungs- oder Finde-Zuerst- Einen-Befehle an die ALU0-Verschiebe-Funktionseinheit 840 geliefert.
  • Die ALU1-Funktionseinheit 845 weist ebenfalls eine Latenzzeit von einem Zyklus auf. Es sei bemerkt, dass eine neue ROP von der ALU1-Funktionseinheit 845 je Taktzyklus angenommen werden kann. Die ALU1-Funktionseinheit umfasst eine Reservierungsstation mit zwei Einträgen 845R, die bis zu zwei spekulative ROPs hält. Alle X86-Arithmetik- und -Logik-Berechnungen gehen durch diese Funktionseinheit oder durch die andere Arithmetik- und Logik- Einheit ALU0. Die ALU0 und ALU1 ermöglichen, dass bis zu zwei Ganzzahlen- Ergebnis-Optionen je Taktzyklus berechnet werden.
  • Die Spezialregister-Funktionseinheit 850 ist ein Spezialblock zum Behandeln der internen Steuerung, des Status und des abgebildeten Zustands, der außerhalb der X86-Registerdatei 855 ist. Bei einer Ausführungsform der Erfindung umfasst die Spezialregister-Funktionseinheit keine Reservierungsstation, da kein spekulativer Zustand anhängig ist, wenn eine ROP an die Spezialregister-Funktionseinheit 850 ausgegeben wird. Der Spezialregister-Block 850 ist in Aufbau und Funktion dem vorher in diesem Dokument beschreiben Spezialregister-Block 512 ähnlich.
  • Eine Lade-/Speicher-Funktionseinheit 860 und eine Gleitkomma-Funktionseinheit 865 ist mit einem ROP-Dispatch-Fenster 820 des Decodierers 805 gekoppelt. Die Lade-/Speicher-Funktionseinheit 860 umfasst eine Reservierungsstation mit Mehrfach-Einträgen 860R. Die Gleitkomma-Funktionseinheit 865 umfasst zwei Reservierungsstationen 865R. Ein Daten-Cache-Speicher 870 ist mit der Lade-/Speicher-Funktionseinheit 860 gekoppelt, um dafür Datenspeicherung und Datenwiederherstellung bereitzustellen. Die Gleitkomma- Funktionseinheit 865 ist mit einem gemischten 41-Bit-Ganzzahl/Gleitkomma- Operandenbus 875 und Ergebnisbussen 880 verknüpft. Ausführlicher gesagt umfassen die Operandenbusse 875 acht Lese-Operandenbusse, die eine Breite von 41-Bit aufweisen. Die Ergebnisbusse 880 umfassen fünf Ergebnisbusse, die eine Breite von 41 Bit aufweisen. Die Verknüpfung der Gleitkommaeinheit mit den gemischten Ganzzahlen-Gleitkomma-Operanden und Ergebnisbussen ermöglicht es, dass eine Registerdatei 855 und ein Neuordnungspuffer 885 für sowohl spekulative Ganzzahlen- als auch Gleitkomma-ROPs verwendet werden können. Zwei ROPs bilden eine 80-Bit-Operation mit erweiterter Genauigkeit; die von der Gleitkomma-Reservierungsstation 865R in einen 80-Bit-Gleitkomma-Kern innerhalb der Gleitkomma-Funktionseinheit 865 eingegeben wird
  • Der 80-Bit-Gleitkomma-Kern der Gleitkomma-Funktionseinheit 865 umfasst einen Gleitkomma-Addierer, einen Gleitkomma-Multiplizierer und Gleitkomma- Teilungs-/Quadratwurzel-Funktionseinheiten. Die Gleitkomma-Addierer-Funktionseinheit innerhalb der Gleitkommaeinheit 865 weist eine Latenzzeit von zwei Zyklen auf. Der Gleitkomma-Addierer berechnet ein erweitertes 80-Bit- Ergebnis, das dann weitergeleitet wird. Der Gleitkomma-Multiplizierer weist eine Latenzzeit von sechs Zyklen für erweitere Genauigkeits-Multiplizier-Operationen auf. Ein 32 · 32-Multiplizierer wird für Multiplikations-Operationen mit einfacher Genauigkeit benutzt. Der 32 · 32-Multiplizierer innerhalb der Gleitkomma-Funktionseinheit 865 wird mehrfach für 64-Bit-Mantissen-Operationen zyklisch durchlaufen, die eine erweiterte Genauigkeit erfordern. Die Gleitkomma-Teilungs/Quadratwurzel-Funktionseinheit benutzt eine Radix-4- Interaktive-Teilung, um zwei Bit/Takt der 64-Bit-Mantisse zu berechnen.
  • Es sei bemerkt, dass bei der vorliegenden Ausführungsform, bei der die Busbreite der A-/B-Operandenbusse 41 Bit ist, dass bezüglich derjenigen A-/B- Operandenbusse, die auf den Ganzzahlen-Einheiten laufen, 32 Bit den Operanden zugewiesen sind und die verbleibenden 9 Bits Steuerinformation ist. Es sei ferner bemerkt, dass weitere Ausführungsformen der Erfindung in Betracht gezogen werden, bei denen die Busbreite der A-/B-Operandenbusse nicht 41 Bit sondern anstatt dessen 32 Bit oder eine andere Größe ist. Bei einer derartigen 32-Bit-Anordnung der Breite des Operandenbusses werden Steuerleitungen getrennt von dem Operandenbus zur Übertragung der Steuerinformation benutzt.
  • Die Lade-/Speicher-Funktionseinheit 860 umfasst eine Reservierungsstation mit vier Einträgen 860 W Die Lade-/Speicher-Funktionseinheit 860 ermöglicht, dass zwei Lade- oder Speicher-Vorgänge je Taktzyklus ausgegeben werden. Der Lade-/Speicher-Abschnitt berechnet ferner die lineare Adresse und Prüfzugriffsrechte auf ein angefordertes Segment des Speichers. Die Latenzzeit eines Lade- oder Speichervorgangs bezüglich eines Prüfens eines Treffers/Fehlzugriffs im Daten-Cache-Speicher 870 beträgt einen Zyklus. Bis zu zwei Ladevorgänge können gleichzeitig auf den Daten-Cache-Speicher 870 zugreifen und ihren Vorgang an die Ergebnisbusse 880 weiterleiten. Der Lade- /Speicher-Abschnitt 860 bearbeitet sowohl Ganzzahlen- als auch Gleitkomma- /Lade- und Speicher-Operationen.
  • Wie es Fig. 6 ersichtlich ist, umfasst der Mikroprozessor 800 eine Registerdatei 855, die mit einem Neuordnungspuffer 885 gekoppelt ist. Sowohl die Registerdatei 855 als auch der Neuordnungspuffer 885 sind mittels einer Operanden-Steuerschaltung 890 mit Operandenbussen 875 gekoppelt. Die Registerdatei 855, der Neuordnungspuffer 885 und die Operanden-Steuerschaltung 890 arbeiten zusammen, um Operanden an die Funktionseinheiten zu liefern. Wenn Ergebnisse von den Funktionseinheiten erhalten werden, werden diese Ergebnisse an den Neuordnungspuffer 885 übertragen und darin als Einträge gespeichert.
  • Ausführlicher gesagt stellen die Registerdatei 855 und der Neuordnungspuffer 885 Speicher für Operanden während der Programmausführung bereit. Die Registerdatei 855 enthält die abgebildeten X86-Register für sowohl die Ganzzahlen- als auch die Gleitkomma-Befehle. Die Registerdatei enthält vorübergehende Ganzzahlen- und Gleitkomma-Register und hält ebenfalls Zwischenberechnungen. Bei dieser besonderen Ausführungsform der Erfindung werden alle Register in der Registerdatei 855 als acht Lese- und vier Schreib-Latches implementiert. Die somit bereitgestellten vier Schreibkanäle ermöglichen, dass bis zu zwei Registerdatei-Ziele pro Taktzyklus geschrieben werden können. Dies kann entweder ein Ganzzahlwert pro Kanal oder eine Hälfte eines Gleitkomma-Werts pro Kanal sein, wenn ein Gleitkomma-Ergebnis in die Registerdatei geschrieben wird. Die acht Lesepkanäle ermöglichen, dass vier ROPs mit zwei Quellen-Lesevorgängen jeweils pro Taktzyklus ausgegeben werden.
  • Der Neuordnungspuffer 885 ist als ein kreisförmiger FIFO mit 16 Einträgen organisiert, der eine Warteschlange von bis zu sechzehn spekulativen ROPs hält. Der Neuordnungspuffer 885 ist somit imstande, sechzehn Einträge zuzuordnen, wobei jeder dieser ein Ganzzahlen-Ergebnis oder eine Hälfte eines Gleitkomma-Ergebnis enthalten kann. Der Neuordnungspuffer 885 kann bis zu vier ROPs pro Taktzyklus zuordnen und bis zu fünf ROPs pro Taktzyklus validieren und bis zu vier ROPs in die Registerdatei 855 pro Taktzyklus stillegen. Der aktuelle spekulative Zustand des Mikroprozessors 800 wird in dem Neuordnungspuffer 880 zur nachfolgenden Weiterleitung gehalten, falls es notwendig ist. Der Neuordnungspuffer 885 hält ferner einen Zustand mit jedem Eintrag, der die relative Reihenfolge jeder ROP angibt. Der Neuordnungspuffer 885 markiert ferner verfehlte Vorhersagen und Ausnahmen zur Bearbeitung durch einen Interrupt- oder eine Trap-Routine.
  • Der Neuordnungspuffer 885 kann die acht Operandenbusse 875 mit jeweils acht Operanden treiben. Der Neuordnungspuffer kann bis zu fünf Ergebnisse pro Taktzyklus auf den fünf Ergebnisbussen 880 empfangen. Es sei bemerkt, dass die Operandenbusse acht gemeinsam benutzte 41-Bit-Ganzzahl/Gleitkommabusse sind. Die acht Operandenbusse entsprechen den vier ROP-Dispatch-Positionen in dem ROP-Dispatch-Fenster 820 des Decodierers 805. Jede der vier ROP-Dispatch-Positionen kann einen Quellen-A-Lese- Operanden und Quellen-B-Lese-Operanden aufweisen. Jeder der somit gebildeten vier Lese-Operandenbus-Paare A und B sind einer fester ROP und einer Quellen-Lese-Stelle in dem ROP-Dispatch-Fenster 820 zugeordnet.
  • Die Registerdatei 855 und der Neuordnungspuffer 885 sind die Vorrichtungen im Mikroprozessor 800, die die Lese-Operandenbusse 875 treiben. Wenn kein spekulatives Ziel für eine decodierte ROP existiert, d. h. wenn ein von der ROP angeforderter Operand nicht in dem Neuordnungspuffer existiert, dann liefert die Registerdatei den Operanden. Wenn jedoch ein spekulatives Ziel existiert, d. h. wenn ein von dem decodierten ROP angeforderter Operand in dem Neuordnungspuffer existiert, dann wird der neueste Eintrag in dem Neuordnungspuffer für diesen Operanden an die Funktionseinheit anstatt des entsprechenden Registers weitergeleitet. Dieser Neuordnungspuffer-Ergebniswert kann ein spekulatives Ergebnis, wenn er in dem Neuordnungspuffer vorhanden ist, oder eine Neuordnungspuffer-Kennung für ein spekulatives Ziel sein, das noch in einer Funktionseinheit beendet wird.
  • Die fünf Ergebnisbusse 880 sind 41-Bit-Busse. Es sei ferner bemerkt, dass der Leseoperand und die Ergebnisbusse Eingaben und Ausgaben an alle Ganzzahlen-Funktionseinheiten sind. Diese gleichen Leseoperanden- und Ergebnisbusse sind ebenfalls Eingänge und Ausgänge in die Gleitkomma- Reservierungsstation 865R der Gleitkomma-Funktionseinheit 865. Die Gleitkomma-Reservierungsstation 865R wandelt die 41-Bit-Operanden- und Ergebnisbusse in 80-Bit-Busse mit erweiterter Genauigkeit um, die sie zu ihren fest zugeordneten Bestands-Funktionseinheiten weiterleitet, wenn es notwendig ist.
  • Die Ganzzahlen- und Gleitkomma-Funktionseinheiten des Mikroprozessors 800 sind mit einer lokalen Pufferung von ROPs über die Reservierungsstationen dieser Einheiten versehen. Bei den meisten dieser Funktionseinheiten nimmt diese lokale Pufferung die Form von als FIFOs organisierte Reservierungsstationen mit zwei Einträgen an. Der Zweck derartiger Reservierungsstationen besteht darin, es der Dispatch-Logik des Decodierers 805 zu ermöglichen, spekulative ROPs an die Funktionseinheiten ohne Rücksicht darauf zu senden, ob die Quellen-Operanden derartiger spekulativer ROPs gegenwärtig verfügbar sind. Damit kann bei dieser Ausführungsform der Erfindung eine große Anzahl spekulativer ROPs (bis zu sechzehn) ausgegeben werden, ohne auf die Beendigung einer langen Berechnung oder eines Ladevorgangs zu warten. Auf diese Art und Weise wird viel mehr des Parallelismus der Befehlsebene freigelegt, und es wird dem Mikroprozessor 800 ermöglicht, näher an seiner Spitzenleistung zu arbeiten.
  • Jeder Eintrag einer Reservierungsstation kann zwei Quellen-Operanden oder - Kennungen plus Information bezüglich des Ziels und einen jeder dieser Einträge zugeordneten Opcode halten. Die Reservierungsstationen können ferner Quellen-Operanden-Ergebnisse weiterleiten, die der Neuordnungspuffer als anhängig markiert hat (diejenigen Operanden, die der Neuordnungspuffer markiert hat, für die eine Operanden-Kennung und nicht der Operand selber bereitgestellt wird) direkt zu weiteren Funktionseinheiten, die auf derartige Ergebnisse warten. Bei dieser besonderen Ausführungsform der Erfindung nehmen die Reservierungsstationen an den Funktionseinheiten typischerweise einen neuen Eintrag pro Taktzyklus an und können einen neuen Eintrag pro Taktzyklus an die Funktionseinheit weitersenden.
  • Eine Ausnahme dazu ist der Lade-/Speicher-Abschnitt 860, der zwei Einträge pro Taktzyklus von seiner Reservierungsstation annehmen und stillegen kann. Der Lade-/Speicher-Abschnitt 860 weist ferner eine tieferes Reservierungsstations-FIFO von vier Einträgen auf.
  • Alle Zuordnungen der Reservierungsstationseinträge können innerhalb eines Taktzyklus aufgehoben werden, sollte eine Ausnahme auftreten. Wenn eine Verzweigungs-Fehlvorhersage auftritt, werden Zwischenergebnisse aus den Funktionseinheiten ausgeräumt und ihre Zuordnung von dem Neuordnungspuffer aufgehoben.
  • Der Mikroprozessor 800 umfasst einen internen Adress-Datenbus 895, der an den Befehls-Cache-Speicher 810 über eine Vorabrufeinheit 830 und mit der Bus-Interface-Einheit 900 gekoppelt ist. Die Bus-Interface-Einheit 900 ist mit einem Hauptspeicher oder externen Speicher (nicht gezeigt) gekoppelt, so dass der Mikroprozessor 800 mit externen Speicherzugriff versehen ist. Der IAD-Bus 895 ist ferner mit der Lade-/Speicher-Funktionseinheit 860 gekoppelt, wie es in Fig. 6 gezeigt ist.
  • Ein Daten-Cache-Speicher 870 ist mit der Lade-/Speicher-Einheit 860 gekoppelt. Bei einer besonderen Ausführungsform der Erfindung ist der Daten- Cache-Speicher 870 ein linear adressierter, zweifach teilassoziativer, 8KByte- Dual-Zugriffs-Cache-Speicher. Adressen und Datenleitungen koppeln den Daten-Cache-Speicher 870 mit der Lade-/Speicher-Funktionseinheit 860, wie es gezeigt ist. Genauer gesagt umfasst der Daten-Cache-Speicher 840 zwei Sätze von Adressen und Datenwegen zwischen dem Cache-Speicher 870 und der Lade-/Speicher-Einheit 860, um zwei gleichzeitige Zugriffe von der Lade-/ Speicher-Funktionseinheit 860 zu ermöglichen. Diese zwei Zugriffe können zwischen einem 8-Bit und einem 32-Bit-Lade- oder Speicherzugriffe liegen, die an der 16-Byte-Daten-Cache-Zeilengröße ausgerichtet sind. Der Daten-Cache- Speicher 870 ist in 16 Byte-Zeilen oder -Blöcken organisiert. Bei dieser besonderen Ausführungsform wird der Daten-Cache-Speicher 870 linear adressiert oder es wird auf ihn von der Segment-basierten Adresse jedoch nicht von einer Seitentabellen-basierten physischen Adresse zugegriffen. Der Daten- Cache-Speicher 870 umfasst vier Bänke, die derart organisiert sind, dass eine Zeile in dem Daten-Cache-Speicher vier Bytes in jeder der vier Bänke aufweist. Somit können, solange wie die lineare Adresse der Bits(3 : 2) der beiden Zugriffe nicht identisch sind, die beiden Zugriffe auf das Daten-Array im Cache-Speicher 870 gleichzeitig zugreifen.
  • Der Daten-Cache-Speicher 870 ist zweifach assoziativ. Er nimmt die zwei linearen Adressen in der Phase PH1 des Taktes und greift auf seine vier Bänke zu. Die resultierenden Ladevorgänge werden in der folgenden Taktphase PH2 abgeschlossen, und können dann einen der Ergebnisbusse treiben. Anforderungen von den Funktionseinheiten nach den Ergebnisbussen werden mit Anforderungen von den weiteren Funktionseinheiten, die wünschen, ein Ergebnis zurückzuschreiben, arbitriert.
  • Der Befehls-Cache-Speicher 810 und der Daten-Cache-Speicher 870 weisen ein jeweiliges lineares Befehls-Cache-Kennungs-Array und ein lineares Daten- Cache-Kennungs-Array auf, die den Adressen dieser Befehle und Dateneinträgen entsprechen, die in diesem Cache-Speicher gespeichert sind. Wie es in Fig. 6 ersichtlich ist, umfasst der Mikroprozessor 800 einen physischen Kennungs-I/D-Block 910, der mit dem IAD-Bus 895 zwecks Verfolgen der physischen Adressen von Befehlen und Daten im Befehls-Cache-Speicher 810 bzw. im Daten-Cache-Speicher 870 gekoppelt ist. Genauer gesagt umfasst der I/DBlock 910 für physische Kennungen physische Befehls-Daten-Kennungs- Arrays, die die physischen Adressen dieser Caches-Speicher unterhalten. Das physische Befehlskennungs-Array von Block 910 spiegelt die Organisation für das entsprechende linear Befehls-Kennungs-Array des Befehls-Cache- Speichers 810 wider. Ebenso spiegelt die Organisation des physischen Datenkennungs-Arrays in dem Block 910 die Organisation des entsprechenden linearen Datenkennungs-Arrays in dem Befehls-Cache-Speicher 810.
  • Die physischen I/D-Kennungen weisen gültige, gemeinsam benutzte und modifizierte Bits auf, abhängig davon, ob sie Befehls-Cache-Speicher- oder Daten-Cache-Speicher-Kennungen sind. Wenn eine physische Kennung des Daten-Cache-Speichers ein modifiziertes Bit gesetzt hat, gibt dies an, dass das angeforderte Datenelement an der äquivalenten Position in dem linearen Daten-Cache-Speicher ist. Der Mikroprozessor 800 wird dann einen Back-Off- Zyklus an dem externen Speicher starten und den angeforderten modifizierten Block in den Speicher zurückschreiben, wo ihn danach die anfordernde Vorrichtung sehen kann.
  • Ein Übersetzungs-Lookaside-Puffer (TLB 915) ist zwischen dem IAD-Bus 895 und I/D-Block der physischen Kennungen 910 gekoppelt, wie es gezeigt ist. Der TLB 915 speichert 128 lineare in physische Seiten-Übersetzungsadressen und Seitenrechte bis zu 128 4KByte-Seiten. Dieses Übersetzungs-Lookaside- Puffer-Array ist als eine vierfach assoziative Struktur mit Zufalls-Ersetzung organisiert. Der TLB 915 bearbeitet den für die X86-Architektur definierten linearen in physischen Adressen-Übersetzungs-Mechanismus. Dieser Mechanismus verwendet einen Cache-Speicher der neuesten linearen in physischen Adressen-Übersetzungen, um ein Suchen von externen Seitentabellen für eine gültige Übersetzung zu verhindern.
  • Die Bus-Interface-Einheit 900 verbindet den IAD-Bus 895 schnittstellenmäßig mit einer externen Vorrichtung, wie beispielsweise einem Speicher. Der IAD- Bus 895 ist ein globaler gemeinsam benutzter 64-Bit-Adressen/Daten/Steuer- Bus, der verwendet wird, um die unterschiedlichen Komponenten des Mikroprozessors 800 zu verbinden. Der IAD-Bus 895 wird für Cache-Block- Nachfüllungen, Ausschreiben von modifizierten Blöcken sowie auch zum Weiterleiten von Daten und Steuer-Information an derartige Funktionsblöcke verwendet, wie die Spezialregister-Einheit 850, die Lade-/Speicher-Funktionseinheit 860, den Daten-Cache-Speicher 870, den Befehls-Cache-Speicher 810, den physischen I/D-Kennungs-Block 910 und den Übersetzungs-Lookaside- Puffer 915 sowie auch die Bus-Interface-Einheit 900.
  • V. BETRIEBSÜBERSICHT DER ALTERNATIVEN AUSFÜHRUNGSFORM
  • Wenn ein CISC-Programm ausgeführt wird, werden die Befehle und Daten des CISC-Programms in den Hauptspeicher aus welchen auch immer verwendeten Speichermedien geladen, um diese Befehle und Daten zu speichern. Sobald das Programm in den Hauptspeicher geladen ist, der mit der Bus-Interface- Einheit 900 gekoppelt ist, werden die Befehle in der programmierten Reihenfolge in den Decodierer 805 zur Weiterleitung und Verarbeitung durch die Funktionseinheiten abgerufen. Insbesondere werden vier Befehle auf einmal von dem Decodierer 805 decodiert. Befehle fließen von dem Hauptspeicher an die Bus-Interface-Einheit 900, über den IAD-Bus 895, durch die Vorabrufeinheit 830 an den Befels-Cache-Speicher 810 und dann an den Decodierer 805. Der Befehls-Cache-Speicher 810 dient als ein Verwahrungsort für Befehle, die von dem Decodierer 805 zu decodieren sind und dann zur Ausführung weitergeleitet werden. Der Befehls-Cache-Speicher 810 arbeitet in Verbindung mit der Verzweigungs-Vorhersage-Einheit 835, um den Decodierer 805 mit einem Vier-Befehl-breiten Block von Befehlen zu versorgen, was der nächste vorhergesagte Block von Befehlen ist, die spekulativ auszuführen sind.
  • Insbesondere umfasst der Befehls-Cache-Speicher 810 ein mit ICSTORE gekennzeichnetes Speicher-Array, das Blöcke von aus dem Hauptspeicher über die Bus-Interface-Einheit 900 abgerufener Befehle enthält. Der ICACHE 810 ist ein wirksamer linear adressierter 16KByte-Befehls-Cache-Speicher, der in 16- - - Byte-Zeilen oder -Blöcken organisiert ist. Jede Cache-Zeile oder -Block umfasst. 16 X86-Bytes. Jede Zeile oder Block umfasst ferner einen 5-Bit-Vordecodierungszustand für jedes Byte. Der ICACHE 810 ist für das Abrufen der nächsten vorhergesagten X86-Befehls-Bytes in den Befehls-Decodierer 805 verantwortlich.
  • Der ICACHE 810 unterhält einen mit FETCHPC (FPC) gekennzeichneten spekulativen Programmzähler. Dieser spekulative Programmzähler FETCHPC wird verwendet, um auf die folgenden drei getrennten Direktzugriffsspeicher(RAM)- Arrays) zuzugreifen, die die Cache-Information unterhalten. Genauer gesagt umfassen die drei oben erwähnten RAM-Arrays, die die Cache-Information halten, 1) ICTAGV, ein Array, das die linearen Kennungen und die Byte- Gültigkeitsbits für den entsprechenden Block in dem Speicherarray ICSTORE unterhält. Jeder Eintrag in dem Cache umfasst 16-Byte-Gültigkeits-Bits und ein 20-Bit lineare Kennung. Bei dieser besonderen Ausführungsform werden 256 Kennungen verwendet. 2) Das Array ICNXTBLK unterhält Verzweigungsvorhersage-Information für den entsprechenden Block in dem Speicherarray ICSTORE. Das ICNXTBLK-Array ist in vier Sätzen von 256 Einträgen organisiert, die jeweils einem wirksamen 16K-Byte-X86-Bit-Befehl entsprechen. Jeder Eintrag in diesem nächsten Block-Array ist aus einem sequentiellen Bit, einem zuletzt vorhergesagten Byte und einem Nachfolger-Index aufgebaut. 3) Das ICSTORE-Array enthält die X86-Befehls-Bytes plus 5 Bits des Vordecodierungszustand. Der Vordecodierungszustand ist jedem Byte zugeordnet und gibt die Anzahl von ROPs an, auf die ein bestimmtes Byte abgebildet wird. Diese Vorcodierungs-Information beschleunigt die Decodierung von Befehlen, sobald sie an den Decodierer 805 geliefert sind. Die Byte-Warteschlange oder ICBYTEQ 815 liefert den aktuellen spekulativen Zustand eines an den ICACHE 810 von der Vorabrufeinheit 830 gelieferten Befehls-Vorabrufstrom.
  • Der Decodierer 805 (IDECODE) führt Befehls-Decodierungs- und Weiterleitungs-Vorgänge in dem Mikroprozessor 800 durch. Insbesondere führt der Decodierer 805 die als Decode 1 und Decode 2 bezeichneten zwei Stufen der Mikroprozessor-Pipeline durch: Während des Beginnens von Decode 1 werden die Bytes, die vorausgelesen und vorhergesagt ausgeführt sind, in die Byte- Warteschlange bei einer gekennzeichneten Füllposition getrieben. Diese Bytes werden dann mit unabhängigen Bytes in der Byte-Warteschlange 815 gemischt. Bei der Decodierung in einer Pipeline-Stufe werden Neuordnungspuffer-Einträgen entsprechende ROPs zugeordnet, die bei der nächsten Taktphase ausgeben werden können.
  • Der Decodierer 805 nimmt die rohen X86-Befehls-Bytes und die Vordecodierungs-Information von der Byte-Warteschlange 815 und teilt sie vier ROP- Positionen in der ROP-Dispatch-Einheit 820 zu. Der Decodierer 805 bestimmt, an welche besondere Funktionseinheit jede ROP übertragen werden sollte. Der ICACHE und die Decodierer-Schaltungsanordnung ermöglicht es dem Mikroprozessor 800 zu decodieren und vier ROPs pro Taktzyklus auf einen RISCähnlichen Datenweg zu treiben. Die vier ROPs werden an die Funktionseinheiten weitergeleitet, die die Ergebnisse an den Neuordnungspuffer 385 und an weiter Funktionseinheiten zurücksenden, die diese Ergebnisse verlangen.
  • Die Registerdatei 855 und der Neuordnungspuffer 885 arbeiten zusammen, um eine spekulative Ausführung an Befehlen in dem Programmstrom bereitzustellen. Eine ausführlichere Erläuterung der Registerdatei 855, des Neuordnungspuffers 885 und das Ganzzahl-Kerns des Mikroprozessors 800 wird nun mit Bezug auf Fig. 7 geliefert. Der Ganzzahl-Kern des Mikroprozessors 800 wird als ein Ganzzahl-Kern 920 bezeichnet und umfasst die Verzweigungs- Vorhersage-Einheit 835, die ALU0, die ALU1 und das Spezialregister 860.
  • Bei dieser besonderen Ausführungsform wird die Registerdatei 855 als 12 32- Bit-Register (Ganzzahl-Register) und 24 41-Bit-Register (Gleitkomma-Register) organisiert. Von dem Decodierer 805 gelieferte Registerdatei-Zeiger bestimmen, welches besondere Register oder welche Register als Operanden- Werte bei einer bestimmten ROP angefordert werden, sowie auch die Größe des Zugriffs.
  • Es sei bemerkt, dass die Registerdatei 855 den Architekturzustand des Mikroprozessors 800 enthält, wohingegen der Neuordnungspuffer 825 den spekulativen, Zustand des Mikroprozessors 800 enthält. Das Timing der Registerdatei 855 ist derart, dass auf sie in Phase PH2 der Pipelinestufe des Decode 2 mit bis zu 8 parallelen Lesezeigern zugegriffen wird. Als Antwort auf den Empfang dieser bis zu 8 Lesezeigern treibt dann die Registerdatei 855 die somit ausgewählten Operanden-Werte auf die entsprechenden Operandenbusse in der folgenden Phase PH1 des Taktes.
  • Ein Sperr-Bus ist in Fig. 7 gezeigt, der den Neuordnungspuffer 885 mit der Registerdatei 855 koppelt. Der Sperr-Bus ist acht Zeilen breit und umfasst acht Eingriff-Signale (override signals), die der Registerdatei 855 angeben, dass der angeforderte Lesewert als ein spekulativer Eintrag im Neuordnungspuffer 885 gefunden wurde. In diesem Fall wird die Registerdatei 855 einem Eingriff unterworfen und es wird ihr nicht erlaubt, einen angeforderten Lese- · Operanden-Wert auf einen Operandenbus zu platzieren. Anstatt dessen wird, da ein spekulativer Eintrag im Neuordnungspuffer 885 vorhanden ist, der Neuordnungspuffer 885 dann entweder den tatsächlichen angeforderten Operanden-Wert oder eine Operanden-Kennung für diesen Wert liefern.
  • Der Neuordnungspuffer 885 umfasst 16 Einträge bei dieser besonderen Ausführungsform und arbeitet als eine Warteschlange spekulativer ROP-Ergebnis- Werte. Wie es ausführlicher in Fig. 8 ersichtlich ist, umfasst der Neuordnungspuffer 885 zwei Zeiger, die dem Kopf und dem Ende der Warteschlange entsprechen, nämlich der Kopfzeiger und der Endezeiger. Ein Verschieben einer Zuordnung der Warteschlange zu weitergeleiteten ROPs findet durch Inkrementieren oder Dekrementieren dieser Zeiger statt.
  • Die an den Neuordnungspuffer 885 gelieferten Eingaben umfassen die Anzahl von ROPs, die der Decodierer 805 versuchen möchte, darin zuzuordnen (bis zu vier ROPs pro Block), Quellen-Operanden-Zeigerwerte für diese vier ROPs und die jeweiligen Zielzeiger-Werte. Der Neuordnungspuffer 885 versucht dann diese Einträge aus seiner aktuellen spekulativen Warteschlange zuzuordnen. Vorausgesetzt, dass Eintragsplatz für die weitergeleiteten ROPs vorhanden ist, werden Einträge nach dem Endezeiger zugeordnet.
  • Insbesondere werden, wenn Einträge von dem Decodierer 805 angefordert werden, die nächsten Einträge von dem Kopf der Warteschlange zugeordnet. Die Nummer eines bestimmten Eintrags wird dann die Zielkennung für diesen besonderen ROP von dem Decodierer 805. Die Zielkennung wird an die jeweilige ROP-Position an die Funktionseinheit zusammen mit dem besonderen auszuführenden Befehl getrieben. Ein zugeordneter Zielkennungs-Bus, der als "4 ROP-Zielkennungen" gekennzeichnet ist, ist in Fig. 7 als eine Ausgabe von dem Neuordnungspuffer 885 an die Funktionseinheiten des Ganzzahl-Kerns 920 und der verbleibenden Funktionseinheiten des Mikroprozessors 800 gezeigt. Die Funktionseinheiten werden somit mit Zielinformation für jeden auszuführenden ROP geliefert, so dass die Funktionseinheit wirksam weiß, wo das Ergebnis eines ROP über die Ergebnisbusse zu übertragen ist.
  • Aus dem Obigen ist ersichtlich, dass spekulativ ausgeführte Ergebniswerte oder Operanden vorübergehend in dem Neuordnungspuffer 885 gespeichert werden, bis derartige Ergebnisoperanden nicht länger spekulativ sind. Ein Pool von potentiellen Operandenwerten wird somit von dem Neuordnungspuffer 885 zur Verwendung durch nachfolgende ROPs bereitgestellt, die an den Decodierer 805 geliefert werden und von diesen decodiert werden.
  • Wenn Einträge in dem Neuordnungspuffer 885 existieren, wird die ursprüngliche Registernummer (d. h. EAX) in dem Neuordnungspuffer-Eintrag gehalten, der ein bestimmtes ROP-Ergebnis zugeteilt war. Fig. 8 zeigt die Einträge, die in einem spekulativen Zustand zwischen dem Ende- und Kopfzeigern sind, durch gestrichelte vertikale Linien in diesen Einträgen. Bei jedem Neuordnungspuffer-Eintrag wird auf seine ursprüngliche Zielregister-Nummer zurück verwiesen. Wenn irgendeiner der acht Lesezeiger-Werte von den vier ROP- Positionen der ROP-Dispatch-Einheit 820 mit der einem Eintrag zugeordneten Registernummer übereinstimmen, werden die Ergebnisdaten dieses Eintrags, falls gültig, oder die Kennung weitergeleitet, falls der diesem Eintrag zugeordnete Vorgang noch in einer Funktionseinheit anhängig ist.
  • Der Neuordnungspuffer 885 unterhält den richtigen spekulativen Zustand der von dem Decodierer 805 weitergeleiteten neuen ROPs durch Zuteilen dieser ROPs in der programmierten Reihenfolge. Die vier ROPs tasten dann aus ihrer gegenwärtigen Position in Richtung der Endeposition der Neuordnungspuffer- Warteschlange, um nach einer Übereinstimmung einer ihrer Leseoperanden zu suchen. Wenn eine Übereinstimmung in einem bestimmten Neuordnungspuffer-Eintrag auftritt, dann wird der entsprechende Lesekanal in der Registerdatei 855 gesperrt, und entweder der tatsächlich Ergebnisoperand oder die Operandenkennung wird dem Operandenbus zum Empfang durch die geeignete Funktionseinheit präsentiert. Diese Anordnung ermöglicht es, dass Mehrfachaktualisierungen des gleichen Registers in dem Neuordnungspuffer vorhanden sein können, ohne seinen Betrieb zu beeinflussen. Das Ergebnis-Weiterleiten wird somit erreicht.
  • Wie es in Fig. 8 gezeigt ist, umfasst der Neuordnungspuffer 885 eine Stillegungslogik 925, die die Stillegung der in der Neuordnungspuffer-Warteschlange oder dem Array 930 gespeicherten Ergebnisoperanden steuert. Wenn ein in der Warteschlange 930 gespeicherter Ergebnisoperand nicht länger spekulativ ist, wird ein derartiger Ergebnisoperand unter der Stillegungslogik- Steuerung an die Registerdatei 855 übertragen. Um zu veranlassen, dass dies stattfindet, werden die Stillegungslogik, die schnittstellenmäßig mit der Stillegung der ROPs verbunden ist, das Zurückschreiben in die Registerdatei und der Zustand der letzten vier ROP-Einträge abgetastet. Die Stillegungslogik 925 bestimmt, wieviele der zugeteilten ROP-Einträge nun gültige Ergebnisse aufweisen. Die Stillegungslogik prüft ebenfalls, wieviele von diesen ROP-Einträgen Zurückschreib-Ergebnisse in die Registerdatei gegenüber denjenigen ROPs ohne Zurückschreiben aufweisen. Außerdem tastet die Stillegungslogik nach genommenen Verzweigungen, Speichervorgängen und Lade-Fehlzugriffen ab. Wenn ein vollständiger Befehl in den letzen vier ROPs existiert, dann wird eine derartige ROP in der Registerdatei stillgelegt. Wenn jedoch während des Abtastens eines ROP-Eintrags ein Status gefunden wird, der angibt, dass eine Ausnahme an einer bestimmten ROP aufgetreten ist, dann werden alle nachfolgenden ROPs ungültig gemacht und eine Trap-Vektor-Abruf-Anforderung wird mit der in dem ROP-Eintrag gespeicherten Ausnahmestatus-Information gebildet.
  • Wenn ein Verzweigungs-Fehlvorhersage-Status während des Abtastens der ROPs in dem Neuordnungspuffer angetroffen wird, dann invalidiert außerdem die Stillegungslogik diese ROP-Einträge ohne irgendein Zurückschreiben oder Aktualisieren des EIP-Registers bis die erste ROP angetroffen wird, die nicht als in dem fehlvorhergesagten Weg markiert wurde. Es sei bemerkt, dass das innerhalb der Stillegungslogik 925 (siehe Fig. 8) enthaltene EIP-Register (nicht gezeigt) den Programmzähler oder den Stillegungs-PC hält, der den rollenden Demarkationspunkt in dem in Ausführung befindlichen Programm darstellt, der diejenigen ausgeführten Befehle, die nicht spekulative sind, von denjenigen Befehlen, die bei Spekulation ausgeführt wurden, trennt. Der EIP oder Stillegungs-PC wird kontinuierlich bei Stillegung der Ergebnis-Operanden von dem Neuordnungspuffer 885 an die Registerdatei 855 aktualisiert, um widerzuspiegeln, das derartige stillgelegte Befehle nicht länger spekulativ sind. Es sei bemerkt, dass der Neuordnungspuffer 885 den spekulativen Zustand ohne weiteres verfolgt und imstande ist, mehrere X86-Befehle oder ROPs pro Taktzyklus stillzulegen. Der Mikroprozessor 800 kann beim Antreffen eines Ausnahmezustands oder einer Verzweigungs-Fehlvorhersage schnell invalidieren und anfangen, einen korrigierten Befehlsstrom abzurufen.
  • Die allgemeine Organisation der Funktionseinheiten des Mikroprozessors 800 wird nun mit Bezug auf ein verallgemeinertes Funktionsblockdiagramm beschrieben, das für Beispielzwecke in Fig. 9 gezeigt wird. Es sei daran erinnert, dass ROPs, die einen Opcode, einen A-Operanden, einen B-Operanden und eine Zielkennung enthalten, an die verallgemeinerte Funktionseinheit von Fig. 9 weitergeleitet werden. Im äußersten linken Abschnitt von Fig. 9 ist ersichtlich, dass vier A-Operandenbusse einem (1 : 4) A-Operanden-Multiplexer 932 bereitgestellt werden, der den besonderen A-Operanden aus den dazu weitergeleiteten Befehlen auswählt. Auf eine ähnliche Art und Weise werden die vier B-Operandenbusse mit einem (1 : 4) B-Operanden-Multiplexer 935 gekoppelt, der den bestimmten B-Operanden für den Subjektbefehl auswählt; den die Funktionseinheit von Fig. 9 auszuführen hat. Vier Ziel-/Opcode-Busse sind mit einem Multiplexer 940 gekoppelt, der den Opcode und die Zielkennung für diesen bestimmten Befehl auswählt, der von dieser Funktionseinheit ausgeführt wird.
  • Diese Funktionseinheit überwacht den Typ-Bus an dem "find first FUNC Type"- Eingang in den Multiplexer 940. Insbesondere sucht die Funktionseinheit nach der ersten ROP, die mit dem Typ der Funktionseinheit übereinstimmt, und gibt dann die 1 : 4-Multiplexer 932, 935 und 940 frei, um die entsprechenden Operanden und Kennungsinformation in der Reservierungsstation 1 der Funktionseinheit von Fig. 9 zu treiben. Es sei beispielsweise angenommen, dass die Ausführungseinheit 945 die Arithmetik- und Logik-Einheit 1 (ALU1) ist, und dass der an die Funktionseinheit an dem Typ-Eingang des Multiplexers 940 präsentierte Befehlstyp ein ADD-Befehl ist, dann werden die Zielkennung, der Opcode, A-Operand und der B-Operand des weitergeleiteten Befehls in die Reservierungsstation 1 über die auswählenden Multiplexer 932, 935 und 940 getrieben.
  • Eine zweite Reservierungsstation, nämlich die Reservierungsstation 0, kann zwischen der Reservierungsstation und der Ausführungseinheit 945 beobachtet werden. Man sagt somit, dass die Funktionseinheit von Fig. 9 zwei Reservierungsstationen aufweist, oder wahlweise eine Reservierungsstation, die imstande ist, zwei Einträge zu halten. Diese Reservierungsstation mit zwei Einträgen wird als ein FIFO implementiert, wobei der älteste Eintrag als Reservierung 0 gezeigt wird. Die Reservierungsstationen 0 und 1 können entweder Operanden oder Operanden-Kennungen abhängig davon halten, was an die Funktionseinheit auf den Operandenbussen von entweder der Registerdatei 855 oder dem Neuordnungspuffer 885 gesendet wurde.
  • Um eine Ergebnis-Weiterleitung von Ergebnissen von weiteren Funktionseinheiten zu erreichen, die ihre Ergebnisse auf den fünf Ergebnisbussen bereitstellen, umfasst die Funktionseinheit eine A-Weiterleitungslogik 950 und eine B-Weiterleitungslogik 955. Die A-Weiterleitungslogik 950 tastet die fünf Ergebnisbusse nach Kennungen ab, um entweder den Operanden der Quelle A zu übereinstimmen, und wenn eine Übereinstimmung auftritt, leitet die A-Wieterleitungslogik 950 den entsprechenden Ergebnisbus an den A-Datenteil 960 der Reservierungsstation 1 weiter. Es sei hier bemerkt, dass wenn eine Operandenkennung A über den Multiplexer 930 anstatt des tatsächlichen Operanden A geliefert wird, dann die Operandenkennung A bei der mit A-Kennung 965 gekennzeichneten Stelle gespeichert wird. Es ist diese in der A-Kennungs- Position 965 gespeicherte A-Operandenkennung, die mit den abgetasteten Ergebniskennungen auf den fünf Ergebnisbussen nach einer Übereinstimmung abgetastet werden. Auf eine ähnliche Art und Weise tastet die B- Weiterleitungslogik 955 die fünf Ergebnisbusse nach irgendwelchen Ergebniskennungen ab, die in der B-Operanden-Kennungs-Position 970 gespeicherten B-Operanden-Kennung übereinstimmen. Sollte eine Übereinstimmung gefunden sein, wird der entsprechende Ergebnisoperand von dem Ergebnisbussen wiedergewonnen und in der B-Datenposition 975 gespeichert. Die Zielkennung und der Opcode der von der Funktionseinheit ausgeführten ROP werden in der Kennungs- und Opcode-Position 980 gespeichert.
  • Wenn alle notwendige Information, um einen ROP-Befehl auszuführen, in der Funktionseinheit zusammengestellt wurde, dann wird der ROP-Befehl an die Ausführungseinheit 945 zur Ausführung ausgegeben. Insbesondere werden der A-Operand und der B-Operand an die Ausführungseinheit 945 von der Reservierungsstation geliefert. Der Opcode und die Zielkennung für diesen Befehl werden an die Ausführungseinheit 945 von der Kennungs- und Opcode- Position 980 geliefert. Die Ausführungseinheit führt den Befehl aus und erzeugt ein Ergebnis. Die Ausführungseinheit arbitriert dann für den Zugriff auf den Ergebnisbus durch Senden eines Ergebnis-Anforderungs-Signals an einen Arbiter (nicht gezeigt). Wenn der Ausführungseinheit 945 Zugriff auf den Ergebnisbus bewilligt wird, wird ein Ergebnis-Bewilligungs-Signal von der Ausführungseinheit 945 von dem Arbiter Empfangen. Die Ausführungseinheit 945 platziert dann das Ergebnis auf den gekennzeichneten Ergebnisbus.
  • Das Ergebnis wird an die anderen Funktionseinheiten mit anhängigen Operanden weitergeleitet, die die gleiche Kennung wie dieses Ergebnis aufweisen. Das Ergebnis wird ebenfalls an den Neuordnungspuffer 885 zum Speichern der ausgeführten ROPs darin bei dem der Zielkennung zugeordneten Eintrag geliefert.
  • In der tatsächlichen Praxis arbitriert die Funktionseinheit für den Ergebnisbus, während der Befehl ausgeführt wird. Insbesondere wird, wenn ein gültiger Eintrag in der Funktionseinheit vorhanden ist, d. h. wenn alle Operanden-, Opcode- und Zielkennungs-Information, die zur Ausführung notwendig sind, zusammengestellt wurde, der Befehl an die Ausführungseinheit 945 ausgegeben, und die Funktionseinheit arbitriert für den Ergebnisbus, während die Ausführungseinheit 945 tatsächlich den Befehl ausführt. Es sei bemerkt, dass jede Reservierungsstation Speicherplatz für den lokalen Opcode sowie auch der Zielkennung enthält. Diese Kennung gibt die Stelle an, in die der ROP während der Ergebnis-Pipeline-Stufe schließlich zurückschreiben wird. Diese Zielkennung wird ebenfalls mit jedem Eintrag in der Reservierungsstation gehalten und durch das FIFO derselben geschoben.
  • Während ein verallgemeinertes Funktionseinheit-Blockdiagramm mit Bezug auf Fig. 9 erläutert wurde, kann die Ausführungseinheit 945 die Verzweigungs- Vorhersage-Einheit 835, die ALU0-/Schieber-Einrichtung 840, die ALU1 845, die Lade-/Speicher-Einheit 860, die Gleitkomma-Einheit 865 und Spezialregister 850 mit geeigneter Modifikation für diejenigen besonderen Funktionen sein.
  • Bei einer erfolgreichen Bewilligung des Ergebnisbusses an die besondere Funktionseinheit, wird der Ergebniswert auf den Ergebnisbus getrieben und der entsprechende Eintrag in der Reservierungsstation gelöscht. Die Ergebnisbusse umfassen ein 41-Bit-Ergebnis, eine Zielkennung und ferner Statusanzeige- Information, wie beispielsweise Normal, Gültig und Ausnahme. Bei dem Pipeline-Betrieb des Mikroprozessors 800 tritt das Timing der gerade beschriebenen Funktionseinheit-Aktivitäten während der Ausführungsstufe auf. Während der Taktphase PH1 werden die Operanden, Zielkennungen und Opcodes getrieben, wenn die ROP weitergeleitet und in eine Reservierungsstation platziert wird. Während der Taktphase PH2 wird der von dem Op-Code beschriebener Vorgang ausgeführt, wenn alle Operanden bereit sind, und während der Ausführung arbitriert die Funktionseinheit für die Ergebnisbusse, um den Wert zurück auf den Neuordnungspuffer zu treiben.
  • Fig. 10 ist eine ausführlichere Darstellung der Verzweigungs-Funktionseinheit 835. Die Verzweigungs-Funktionseinheit 835 bearbeitet alle nicht sequentiellen Abrufvorgänge, einschließlich Sprungbefehle, sowie auch kompliziertere Ruf- und Rückkehr-Mikroroutinen. Die Verzweigungseinheit 835 umfasst die Reservierungsstation 835R und ein Verzweigungs-FIFO 980 zum Verfolgen vorhergesagter genommener Verzweigungen. Die Verzweigungs-Funktionseinheit umfasst ferner einen Addierer 985, einen Inkrementierer 990 und einen Verzweigungs-Vorhersage-Komparator 995, die alle für die Bearbeitung von PC-relativen Verzweigungen sind.
  • Die Verzweigungs-Funktionseinheit 835 steuert spekulative Verzweigungen durch Verwendung des in Fig. 10 gezeigten vorhergesagt genommene Verzweigungs-FIFOs 980. Insbesondere wird jeder, von dem Befehls-Cache- Speicher 810 vorhergesagte, nicht sequentielle Abrufvorgang an den Verzweigungs-vorhergesagten FIFO 980 getrieben und darin zusammen mit dem PC (Programmzähler) dieser Verzweigung zwischengespeichert. Diese Information wird auf den Zielbus (XTARGET) und den Decodier-PC-Bussen an die Verzweigungs-Funktionseinheit getrieben. Wenn die entsprechende Verzweigung später decodiert und ausgegeben wird, wird der PC dieser Verzweigung, der Offset und die Vorhersage-Information lokal von der Verzweigungs- Funktionseinheit 835 berechnet. Wenn eine Übereinstimmung auftritt, wird das Ergebnis korrekt an den Neuordnungspuffer 885 mit dem Ziel-PC und einen eine Übereinstimmung angebenden Status zurückgesendet. Wenn eine Verzweigungs-Fehlvorhersage aufgetreten ist, wird das richtige Ziel an sowohl den Befehls-Cache-Speicher 810, um das Abrufen zu beginnen, sowie auch an den Neuordnungspuffer 885, um die in der verpaßten vorhergesagten Verzweigung enthaltenen nachfolgenden ROPs zu löschen, getrieben. Auf diese Art und Weise kann die Ausführung an dem richtigen Ziel-PC neu gestaltet werden, und die Verfälschung des Ausführungsprozesses wird somit verhindert. Wann immer eine verpaßte Vorhersage auftritt, sendet die Verzweigungs-Funktionseinheit 835 sowohl die neue Zieladresse als auch den Index an den Block, wo die Verzweigungsinformation dieses Array zu aktualisieren hatte. Dies bedeutet, dass der Mikroprozessor das Abrufen des neuen korrekten Stroms von Befehlen beginnt, während gleichzeitig die Vorhersage-Array- Information aktualisiert wird. Es sei bemerkt, dass der Mikroprozessor ferner auf die Vorhersage-Information mit dem neuen Block zugreift, um zu wissen, welche Bytes vorhergesagt ausgeführt werden. Das ICNXTBLK-Array ist ein Zweikanal-Array, so dass die Vorhersageinformation durch einen zweiten Kanal desselben aktualisiert werden kann. Die Vorhersageinformation von dem Block, wo die Fehlvorhersage auftritt, ist Information, wie beispielsweise sequentiell/nicht sequentiell, Verzweigungsposition und Position des ersten vorhergesagt ausgeführten Bytes innerhalb des Cache-Arrays.
  • Der Addierer 985 und der Inkrementierer 990 berechnen lokal den aktuellen PC + den Offset des aktuellen Verzweigungsbefehls, sowie auch den PC + die Befehlslänge für den nächsten PC, falls sequentiell. Diese Werte werden von dem Komparator gegen die vorhergesagt genommenen Verzweigungen in einer lokalen Verzweigung genommenen Warteschlange (FIFO 980) zur Vorhersage derartiger Verzweigungen verglichen.
  • Die internen Hauptbusse des Mikroprozessors 800 werden nun als eine Einleitung zum Erläutern von Timing-Diagrammen zusammengefasst, die den Betrieb des Mikroprozessors 800 überall in seinen Pipelinestufen darstellen. Es sei bemerkt, dass ein führendes X auf einer Busleitung einen falschen Bus angibt, der dynamisch in einer Phase vorgeladen ist und bedingt in der anderen Phase aktiviert wird. Die internen Busse des Mikroprozessors 800 umfassen:
  • FPC(31 : 0) - Ph1, statisch. Dieser Abruf-PC-Bus wird für spekulative Befehlsvorabrufe von dem Befehls-Cache-Speicher 810 in die Bytewarteschlange 815 verwendet. Der FPC-Bus ist mit dem FPC-Block 813 in dem ICACHE 810 gekoppelt, der im wesentlichen die gleiche Funktion wie der FPC-Block 207 des Mikroprozessors 500 von Fig. 3A-3B durchführt.
  • XTARGET(41 : 0) - Ph1, dynamisch. Dieser Bus kommuniziert den Ziel-PC zur Neuorientierung fehlvorhergesagter Verzweigungen und Ausnahmen an den Befehls-Cache-Speicher und die Verzweigungsvorhersageeinheiten (825/835).
  • XICBYTEnB(12 : 0) Ph1, dynamisch. Dieser Bus ist der Ausgang des Befehls- Cache-Speicher-Arrays ICSTORE des aktuell angeforderten vorabgerufenen X86-Befehls plus entsprechender Vordecodierungs-Information. Bei dieser besonderen Ausführungsform können insgesamt 16 Bytes pro Taktzyklus aktiviert ausgerichtet werden, so dass das nächste vorhergesagte ausgeführte Byte die erste offene Byteposition in der Bytewarteschlange füllt.
  • BYTEQn(7 : 0) Ph1, statisch. Dies stellt die Warteschlange der vorhergesagt ausgeführten X86-Befehls-Bytes dar, die aus dem Befehls-Cache-Speicher vorabgerufen wurden. Bei dieser besonderen Ausführungsform werden insgesamt 16 Bytes auf den Decodierwegen des Decodierers 805 präsentiert. Jedes Byte enthält Vordecodierungs-Information aus dem Befehls-Cache-Speicher bezüglich der Position der Start- und -End-Befehls-Positionen, Präfixbytes und Opcode-Position. Die ROP-Größe jedes X86-Befehls ist ebenfalls in der Vordecodierungs-Information enthalten. Die jedem Byte hinzugefügte Vordecodierungs-Information stellt insgesamt 6 Bits von Speicher pro Byte in der Bytewarteschlange dar, nämlich 1 Gültigkeitsbit plus 5 Vordecodierungsbits.
  • IAD(63,0) - Ph1, dynamisch. Der IAD-Bus 895 ist der allgemeine Verbindungsbus für Hauptblöcke des Mikroprozessors 800. Er wird für Adressen, Daten und Steuerübertragung zwischen derartigen Blöcken sowie auch zu und von externem Speicher, wie es alles in dem Blockdiagramm von Fig. 6 dargestellt ist.
  • XRDnAB(40 : 0) Ph1, dynamisch. Diese Kennzeichnung stellt den an die Funktionseinheiten für jede ROP gelieferten Quellenoperanden A-Bus dar und ist in den Operandenbussen 875 enthalten. Genauer gesagt enthält er insgesamt vier 41-Bit-Busse für ROP 0 bis ROP 3. Ein in den Operandenbussen enthaltender entsprechender Kennungsbus gibt an, wenn eine weitergeleitete Kennung von dem Neuordnungspuffer 885 anstelle der tatsächlichen Operandendaten von dem Neuordnungspuffer 885 vorhanden ist.
  • XRDnBB(40 : 0) - Ph1, dynamisch. Diese Kennzeichnung gibt den Quellenoperanden B-Bus für jede an die Funktionseinheiten gesendete ROP an. Diese Busstruktur umfasst vier 41-Bit-Busse für ROP 0 bis ROP 3 und ist in den acht Leseoperandenbussen 875 enthalten. Es sei erneut bemerkt, dass ein entsprechender Kennungsbus angibt, wenn eine weitergeleitete Operandenkennung auf diesem Bus anstelle der tatsächlichen Operandendaten von dem Neuordnungspuffer 885 vorhanden ist.
  • XRESnB(40 : 0) - Ph1, dynamisch. Diese Kennzeichnung gibt den Ergebnisbus 880 für 8, 16, 32 Bit-Ganzzahlen oder 1/2 eines 80 Bit erweiterten Ergebnisses an. Es sei bemerkt, dass entsprechende Kennungs- und Statusbusse 882 einen Eintrag auf diesem Ergebnisbus validieren.
  • Der Mikroprozessor 800 umfasst eine sechsstufige Pipeline mit den Stufen Abrufen, Decode 1, Decode 2, Ausführen, Ergebnis/ROB und Stillegen/Registerdatei. Zwecks Klarheit wurde die Decodierungsstufe in Decode 1 und Decode 2 in Fig. 11 aufgeteilt. Fig. 11 zeigt die Mikroprozessor-Pipeline, wenn eine sequentielle Ausführung durchgeführt wird. Die aufeinanderfolgenden Pipelinestufen werden durch senkrechte Spalten in Fig. 11 dargestellt. Ausgewählte Signale im Mikroprozessor 800 werden in horizontalen Zeilen dargestellt, wenn sie in den verschiedenen Stufen der Pipeline erscheinen.
  • Das sequentielle Ausführungs-Pipeline-Diagramm von Fig. 11 porträtiert die folgenden ausgewählten Signale.
  • "Ph1", was die führende Flanke des Systemtaktsignals darstellt. Das Systemtaktsignal umfasst sowohl Ph1- als auch Ph2-Komponenten.
  • "FPC(31 : 0)", was den Abruf-PC-Bus von der Bytewarteschlange 815 kennzeichnet.
  • "ICBYTEnB(12 : 0)", was der ICBYTE-Bus von dem ICSTORE-Array des Befehls- Cache-Speichers 810 ist, der mit der Bytewarteschlange 815 gekoppelt ist.
  • "BYTEQn(7 : 0)", was der Bytewarteschlangenbus ist.
  • "ROPmux(3 : 0)", was ein Decodierungssignal ist, das die an den Decodierer gelieferte Befehlsblock- und Vordecodierungs-Information angibt.
  • "Source A/B Pointer", die die Lese-/Schreib-Zeiger für die von dem Decodierer 805 gelieferten A- und B-Operanden sind, um den Puffer 815 neu zu ordnen. Obgleich nicht explizit in Fig. 6 gezeigt, sind die Quellenzeiger die Registerdateiwerte, die Eingaben in sowohl die Registerdatei als auch den Zuordnungspuffer von dem Decodierungsblock sind.
  • "REGF/ROB access" gibt Zugriff auf die Registerdatei und den Neuordnungspuffer für den Zweck eines Erhaltens von Operandenwerten zur Übertragung an Funktionseinheiten an.
  • "Issue ROPs/dest tags" gibt die Ausgabe von ROPs und Zielkennungen durch den Decodierer 805 an die Funktioneinheiten an.
  • "A/B read oper buses" gibt das Lesen der A- und B-Operandenbusse durch die Funktionseinheiten an, um damit A- und B-Operanden oder Kennungen zu erhalten.
  • "Funct unit exec" gibt die Ausführung von den Funktionseinheiten an. Es sei bemerkt, dass in den Fig. 11 und 12 die Kennzeichnungen a&b-> c und c&d- > e und c&g-> beliebige Operationen angeben und in der Form von "Source 1- Operand, Source 2-Operand-> Target" sind. Genauer gesagt sind die gekennzeichneten Quellenregister Register, nämlich vorübergehende oder abgebildete X86-Register. Bei dem a&b-> c Beispiel stellt der "c"-Wert das Ziel dar und zeigt die lokale Weiterleitung von sowohl den Ergebnisbussen als auch dem Neuordnungspuffer an nachfolgende Referenzen in dem vorhergesagt ausgeführten Strom.
  • "Result Bus arb" gibt die Zeit an, während der eine Funktionseinheit für den Zugriff auf den Ergebnisbus 880 für den Zweck einer Übertragung des Ergebnisses an den Neuordnungspuffer und jede weitere Funktionseinheit arbitriert, die dieses Ergebnis benötigen könnte, da diese Einheit ein einem derartigen Ergebnis entsprechende Operandenkennung hält.
  • "Result bus forward" gibt die Zeit an, während der Ergebnisse von einer Funktionseinheit an weitere Funktionseinheiten, die das Ergebnis als einen anhängigen Operanden benötigen, weitergeleitet werden.
  • "ROB write result" gibt die Zeit an, während der das Ergebnis von einer Funktionseinheit in den Neuordnungspuffer geschrieben wird.
  • "ROB tag forward" gibt die Zeit an, während der der Neuordnungspuffer Operandenkennungen an Funktionseinheiten anstelle von Operanden, für die er gegenwärtig noch keine Ergebnisse hat, weiterleitet.
  • "REGF write/retire" gibt die Zeit an, während der ein Ergebnis aus der FIFO- Warteschlange des Neuordnungspuffers in der Registerdatei stillgelegt wird.
  • "EIP(31 : 0)" gibt den Stillegungs-PC-Wert an. Da eine Interrupt-Rückgabe keine verzögerten Verzweigungen aufweist, kann der Mikroprozessor bei einer Interrupt-Rückgabe mit nur einem PC neu starten. Der Stillegungs-PC-Wert oder EIP ist in der Stillegungslogik 925 des Neuordnungspuffers 885 enthalten. Der EIP ist dem bereits mit Bezug auf den Mikroprozessor 500 erläuterten Stillegungs-PC ähnlich. Die Stillegungslogik 925 führt eine Funktion ähnlich der Stillegungslogik 242 des Mikroprozessors 500 durch.
  • Das Timing-Diagramm von Fig. 11 zeigt, wie der Mikroprozessor 800 einen sequentiellen Strom von X86-Bytes ausführt. Bei diesem Beispiel wird der vorhergesagte Ausführungsweg tatsächlich genommen, sowie er direkt aus dem Befehls-Cache-Speicher verfügbar ist.
  • Die erste Stufe der Befehlsverarbeitung ist das Befehlsabrufen. Wie es gezeigt ist, wird dieser Taktzyklus verbraucht, um Befehls-Cache-Aktivitäten durchzuführen. Der Befehls-Cache-Speicher 810 bildet einen neuen Abruf-PC (FPC) während Ph1 des Taktzyklus und greift dann auf die Cache-Arrays des Befehls- Cache-Speichers in dem zweiten Taktzyklus zu. Der Abruf-PC-Programmzähler (in dem Timing-Diagramm als FPC(31 : 0) gezeigt) greift auf die Kennungs- Arrays des linearen Befehls-Cache-Speichers parallel mit den Speicher-Arrays zu. Später wird in der Taktphase Ph2 des Abrufens eine Bestimmung durchgeführt, ob die linearen Kennungen mit der linearen Abruf-PC-Adresse übereinstimmen. Wenn eine Übereinstimmung auftritt, werden die vorhergesagten ausgeführten Bytes an die Bytewarteschlange 815 weitergeleitet.
  • Zusätzlich zum Zugreifen auf die Kennungs- und Speicher-Arrays in dem Befehls-Cache-Speicher greift der Abruf-PC ebenfalls auf das Block-Vorhersage- Array ICNXTBLK zu. Dieses Block-Vorhersage-Array kennzeichnet, welche der X86-Byte vorhergesagt ausgeführt sind, und ob der nächste vorhergesagt ausgeführte Block sequentiell oder nicht sequentiell ist. Diese Information, auf die ebenfalls bei Ph2 zugegriffen wird, bestimmt, welche der Bytes des aktuell abgerufenen Blocks als gültige Bytes in die Bytewarteschlange 815 getrieben werden.
  • Die Bytewarteschlange 815 kann gegenwärtig darin gespeicherte X86-Bytes aufweisen, die vorher abgerufen wurden und noch nicht an Funktionseinheiten ausgegeben wurden. Wenn dies der Fall ist, wird eine Byte-Füllposition an den Befehls-Cache-Speicher 810 gegeben, um das erste vorhergesagte Byte um diesen Betrag hinüber zu schieben, um dahinter die älteren X86-Bytes zu füllen.
  • Es sei bemerkt, dass, da die Verzweigungsvorhersage-Information in der Taktphase Ph2 des Abrufens auftritt, der nächste von der Vorabrufeinheit 830 vorabzurufende Block sequentiell oder nicht sequentiell sein kann, da es in jedem Fall einen Taktzyklus gibt, in dem erneut auf die Cache-Arrays zuzugreifen ist. Somit ermöglichen die Verzweigungsvorhersage-Arrays, dass eine Verzweigung aus dem Block die gleiche relative Leistung wie ein Zugreifen auf den nächsten Block aufweist, womit eine Leistungssteigerung bereitgestellt wird.
  • Die Decode 1/Decode 2-Pipeline-Stufen werden nun erläutert. Während des Beginnens von Decode 1 werden die Bytes, die vorabgerufen und vorhergesagt ausgeführt wurden, in die Bytewarteschlange 815 an der gekennzeichneten Füllposition getrieben. Dies wird in dem Timing-Diagramm von Fig. 11 als ICBYTEnB(12 : 0) gezeigt, das in Ph1 von Decode 1 aktiviert ist. Diese Bytes werden dann mit beliebigen anhängigen Bytes in der Bytewarteschlange gemischt. Die Bytewarteschlange enthält die fünf Bits des Vordecodierungszustands plus die rohen X86-Bytes, um zu zeigen, wo die Befehlsgrenzen angeordnet sind. Der Kopf der Bytewarteschlange ist an den Anfang des nächsten vorhergesagt ausgeführten X86-Befehls. In der Mitte der Taktphase Ph1 von Decode 1 wird der nächste Bytestrom von dem Befehls-Cache-Speicher mit den existierenden Bytes in der Bytewarteschlange 815 gemischt, und der gemischte Strom wird an den Decodierer 805 zum Abtasten geliefert. Der Decodierer 805 bestimmt die Anzahl von ROPs, die jeder Befehl nimmt, und die Position des Opcodes, um die Ausrichtung dieser Opcodes mit den entsprechenden ROP-Ausgabepositionen D0, D1, D2 und D3 zu ermöglichen, wobei die ROP bei D0 die nächste auszugebende ROP ist. Der Decodierer 805 unterhält eine Kopie der Programmzähler PCs von jedem der X86-Befehle in der Bytewarteschlange 815 durch Zählen der Anzahl von Bytes zwischen Befehlsgrenzen oder Erfassen einer Verzweigung innerhalb des Befehls-Cache- Speichers und Anfügen des Ziel-PC-Werts an das erste von dieser Position abgerufenen X86-Byte.
  • Durch Benutzen des OP-Codes und der ROP-Positionsinformation sowie auch die in der Bytewarteschlange 815 sofort gespeicherten Felder bestimmt der Decodierer 805 statisch die folgende Information während der Taktphase Ph2 von Decode 1 und der Taktphase Ph2 von Decode 2 : 1) Funktionseinheitsziel, 2) Quellen A/B und Zieloperandenzeigerwert, 3) Größe der Quellen- und Zieloperationen und 4) sofortige Adressen- und Datenwerte, falls vorhanden. Am Ende der Taktphase Ph1 von Decode 2 werden alle Register-Lese/Schreib- Zeiger aufgelöst und der Vorgang wird bestimmt. Dies wird in dem Timing- Diagramm von Fig. 11 durch die Aktivierung der Quellen-A/B-Zeigerwerte angegeben.
  • In der in dem Timing-Diagramm von Fig. 11 dargestellten Decode 2-Pipeline- Stufe werden die Neuordnungspuffereinträge den entsprechenden ROPs zugeordnet, die in der nächsten Taktphase ausgegeben werden können. Somit werden bis zu vier zusätzliche ROP-Einträge in den Neuordnungspuffer mit 16 Einträgen 885 während der Taktphase Ph1 von Decode 2 zugeteilt. Während der Taktphase Ph2 von Decode 2 werden die Quellenlesezeiger für alle zugeteilten ROPs dann aus der Registerdatei gelesen, während gleichzeitig auf die Warteschlange von spekulativen ROPs, die in dem Neuordnungspuffer enthalten ist, zugegriffen wird. Dieser gleichzeitige Zugriff auf sowohl die Registerdatei als auch auf die Neuordnungspuffer-Arrays ermöglicht es dem Mikroprozessor 800 spät auszuwählen, ob der aktuelle Registerdateiwert zu verwenden ist oder entweder den Operanden oder die Operandenkennung aus dem Neuordnungspuffer weiterzuleiten ist. Indem zuerst die vier ROP-Einträge in dem Neuordnungspuffer in Ph1 zugeteilt werden und dann der Neuordnungspuffer in Ph2 abgetastet wird, kann der Mikroprozessor 800 gleichzeitig nach Leseabhängigkeiten suchen, wobei die aktuellen ROPs sowie auch alle vorherigen ROPs, die noch in dem spekulativen Zustand sind, weitergeleitet werden. Dies wird in dem Timing-Diagramm von Fig. 11 durch den REGF/ROB-Zugriff und die Prüfung an diesen Kennungen angegeben.
  • Bei der Ausführungs-Pipeline-Stufe werden ROPs an die Funktionseinheiten durch zugeordnete OP-Code-Busse sowie auch den Leseoperandenbussen ausgegeben. Die zugeordneten OP-Code-Busse kommunizieren den OP-Code einer ROP an eine Funktionseinheit, wohingegen die Leseoperandenbusse Operanden oder Operandenkennungen an derartige Funktionseinheiten übertragen. Die Zeit, während derselben die Operandenbusse Operanden mit den Funktionseinheiten kommunizieren, wird in dem Timing-Diagramm von Fig. 11 durch die Kennung A/B-Leseoperandenbusse angegeben.
  • In dem letzteren Teil der Taktphase Ph1 der Ausführungs-Pipeline-Stufe bestimmen die Funktionseinheiten, welche ROPs an derartige Funktionseinheiten ausgegeben wurden und ob irgendwelche anhängigen ROPs zur Ausgabe von den lokalen Reservierungsstationen in derartigen Funktionseinheiten bereit sind. Es sei bemerkt, dass ein FIFO in der Reservierungsstation einer Funktionseinheit unterhalten wird, um zu gewährleisten, dass die in den Reservierungsstationen enthaltenen ältesten Befehle zuerst ausgeführt werden.
  • In dem Fall, dass ein Befehl innerhalb einer Funktionseinheit zum Ausführen bereit ist, beginnt sie eine derartige Ausführung in der späten Ph1 der Ausführungs-Pipeline-Stufe und fährt statisch durch Ph2 dieser Stufe fort. An dem Ende von Ph2 arbitriert die Funktionseinheit für einen der fünf Ergebnisbusse, wie es durch das ROB-Signal des Ergebnisbusses in Fig. 11 angegeben ist. Mit anderen Worten wird das Ergebnisbus-Arbitrierungssignal während dieser Zeit aktiviert. Wenn einer Funktionseinheit Zugriff auf den Ergebnisbus bewilligt ist, dann treibt sie den zugeordneten Ergebnisbus in der folgenden Ph1.
  • Die in dem Timing-Diagramm von Fig. 11 gezeigte Ergebnis-Pipeline-Stufe stellt die Weiterleitung eines Ergebnisses von einer Funktionseinheit zu einer weiteren dar, die ein derartiges Ergebnis benötigt. In der Taktphase Ph1 der Ergebnis-Pipeline-Stufe wird die Stelle der spekulativen ROP in den Neuordnungspuffer mit dem Zielergebnis sowie auch jedem Status geschrieben. Diesem Eintrag in dem Neuordnungspuffer wird dann eine Gültigkeits- sowie auch einer Zuteilungsangabe gegeben. Sobald ein zugeteilter Eintrag in dieser Angelegenheit validiert ist, ist der Neuordnungspuffer imstande, Operandendaten direkt weiterzuleiten, im Gegensatz zu einer Operandenkennung bei Empfang eines angeforderten Lesezugriffs. In der Taktphase Ph2 der Ergebnis-Pipeline-Stufe kann die neu zugeteilte Kennung durch nachfolgende ROPs erfasst werden, die sie als eine ihrer Quellenoperanden benötigen. Dies ist in dem Timing-Diagramm von Fig. 11 als direktes Weiterleiten des Ergebnisses C über "ROB tag forward" auf die Quellen A/B-Operandenbusse gezeigt.
  • Die Stillegungs-Pipeline-Stufe ist die letzte Stufe der Pipeline in dem Timing- Diagramm von Fig. 11. Diese Stufe ist dort, wo der reale Programmzähler (Stiliegungs-PC) in der Form des EIP-Registers unterhalten und aktualisiert wird, wie es durch die Buskennung EIP(31 : 0) angegeben ist. Wie es in Fig. 11 ersichtlich ist, zeigt das EIP(31 : 0) Timing-Diagramm, wo ein neuer PC (oder Stillegungs-PC) bei Stillegung eines Befehls von dem Neuordnungspuffer in der Registerdatei erzeugt wird. Die tatsächliche Handlung einer Stillegung eines Ergebnisses von dem Neuordnungspuffer in die Registerdatei wird durch das mit REGF Schreiben/Stillegen in Fig. 11 gekennzeichnete Signal angegeben. Es ist in Fig. 11 ersichtlich, dass in der Taktphase Ph1 der Stillegungs- Pipeline-Stufe das Ergebnis eines Vorgangs in die Registerdatei geschrieben wird, und das EIP-Register aktualisiert wird, um widerzuspiegeln, dass dieser Befehl nun ausgeführt wird. Die Zuteilung des entsprechenden Antrags in dem Neuordnungspuffer wird nun in der gleichen Taktphase Ph1 aufgehoben, in der der Wert aus dem Neuordnungspuffer in die Registerdatei geschrieben wird. Da die Zuordnung dieses Eintrags in dem Neuordnungspuffer nun aufgehoben ist, werden nachfolgende Referenzen auf das Register C zu einem Lesevorgang aus der Registerdatei anstelle eines spekulativen Lesevorgangs aus dem Neuordnungspuffer führen. Auf diese Art und Weise wird der Architekturzustand des Mikroprozessors wahrheitsgemäß widergespiegelt.
  • Fig. 12 stellt ein Timing-Diagramm des Prozessors 800 während einer Verzweigungsfehlvorhersage dar. Das Timing-Diagramm von Fig. 12 zeigt die gleichen Signaltypen wie das Timing-Diagramm von Fig. 11 mit den folgenden Ausnahmen:
  • Das Signal BRN_MISP gibt an, wenn eine Verzweigungsfehlvorhersage aufgetreten ist.
  • Das Signal XTARGET(31 : 0) bezeichnet die Zeit, bei der ein vorhergesagter Zielverzweigungsbefehl an die Verzweigungseinheit 835 kommuniziert wird.
  • Das Timing-Diagramm von Fig. 12 zeigt die Stufen der Pipeline des Mikroprozessors 800 während einer Verzweigungsfehlvorhersage und Wiederherstellung. Das Timing-Diagramm nimmt an, dass der erste Zyklus der Ausführungszyklus der Verzweigung ist, und dass die folgenden Zyklen beim Korrigieren der Vorhersage und Abrufen des neuen Befehlsstroms beteiligt sind. Es sei bemerkt, dass bei dieser besonderen Ausführungsform eine Verzögerung von drei Zyklen von der Beendigung der Ausführung des Verzweigungsbefehls, der fehlvorhergesagt wurde, zu dem Anfang der Ausführung eines korrigierten Weges existiert.
  • Die Abrufstufe der in Fig. 12 dargestellten Pipeline ist die der in Fig. 11 dargestellten normalen Abrufstufe ähnlich, mit der Ausnahme, dass der Bus XTARGET(31 : 0) von der Verzweigungsfunktionseinheit 835 an den Befehls- Cache-Speicher 810 getrieben wird, um den Befehls-Cache-Speicher 810 mit Information bezüglich des vorhergesagten Ziels zu versorgen. Es sei bemerkt, dass die Verzweigungsfunktionseinheit ein Block des Mikroprozessors 800 ist, der bestimmt, dass eine Verzweigungsfehlvorhersage tatsächlich aufgetreten ist. Die Verzweigungsfunktionseinheit berechnet ferner das richtige Ziel. Dieses Ziel wird zur gleichen Zeit, wenn ein Ergebnis an den Neuordnungspuffer mit einer Fehlvorhersagestatus-Anzeige auf dem Ergebnisbus 880 zurückgegeben wird, gesendet. Der Ergebnisbus enthält ebenfalls den korrekten PC- Wert zum Aktualisieren des EIP-Registers beim Stillegen des Verzweigungsbefehls, wenn ein reale Verzweigung aufgetreten ist. Der XTARGET-Bus wird dann auf den abgerufenen PC-Bus getrieben, und es wird auf die Befehls- Cache-Arrays zugegriffen. Wenn ein Treffer auftritt, werden die Bytes in die Bytewarteschlange wie vorher getrieben.
  • Wenn eine verpasste Fehlvorhersage auftritt, werden alle Bytes in der Bytewarteschlange 815 automatisch in der ersten Phase des Abrufens mit der Aktivierung des Signals BRN_MISP gelöscht. Keine zusätzlichen ROPs werden von dem Decodierer 805 weitergeleitet, bis der korrigierte Weg abgerufen und decodiert wurde.
  • Wenn der Ergebnisstatus einer Fehlvorhersage in der Taktphase Ph1 der Abruf-Pipeline-Stufe an den Neuordnungspuffer zurückgegeben wird, wird die Fehlvorhersagestatus-Anzeige an alle spekulativen ROPs nach der Fehlvorhersage gesendet, so dass es ihnen nicht ermöglicht wird, in die Registerdatei oder in den Speicher zu schreiben. Wenn diese Befehle als nächstes stillzulegen sind, werden ihre Einträge in dem Neuordnungspuffer aufgehoben, um es zusätzlichen ROPs zu ermöglichen, ausgegeben zu werden.
  • Bezüglich der Pipeline-Stufe Decode 1 während einer Verzweigungsfehlvorhersage ist der Rest des Weges zum Decodieren des korrigierten Weges identisch mit dem Fall eines sequentiellen Abrufens mit der Ausnahme eines Aktualisierens der Vorhersageinformation in dem Array ICNXTBLK des Befehls-Cache- Speichers 810. Die richtige Richtung der Verzweigung wird nun in das Vorhersage-Array IXNXTBLK in dem Cache-Block darin geschrieben, wo die Verzweigung fehlvorhergesagt wurde.
  • Die Pipeline-Stufen Decode 2, Ausführen, Ergebnis, Stillegen erscheinen während einer Fehlvorhersage im wesentlichen denjenigen ähnlich, die in Fig. 11 erläutert wurden.
  • VI. SCHLUSSFOLGERUNG - SUPERSKALARE HOCHLEISTUNGSMERKMALE
  • Hochleistung wird in dem Mikroprozessor der Erfindung durch Extrahieren von substantiellen Parallelismus aus dem Code erreicht, der von dem Mikroprozessor ausgeführt wird. Befehlskennung, Reservierungsstationen und Ergebnisbusse mit Weiterleitung hindern Operandenrisiken daran, die Ausführung nicht verwandter Befehle zu blockieren. Der Neuordnungspuffer (ROB) des Mikroprozessors erreicht mehrere Vorteile. Der ROB verwendet einen Typ einer Registerumbenennung, um zwischen unterschiedlichen Verwendungen des gleichen Registers als ein Ziel zu unterscheiden, was andernfalls künstlicherweise einen Parallelismus sperren würde. Die in den Neuordnungspuffer gespeicherten Daten stellen den vorhergesagten Ausführungszustand des Mikroprozessors dar, wohingegen die in der Registerdatei gespeicherten Daten den aktuellen Ausführungszustand des Mikroprozessors darstellen. Ferner bewahrt der Neuordnungspuffer den sequentiellen Zustand des Programms in dem Fall von Interrupts. Außerdem ermöglicht der Neuordnungspuffer mehr Parallelismus durch Ermöglichen einer Ausführung über unaufgelöste bedingte Verzweigungen. Parallelismus wird ebenfalls durch den Board-internen Befehls-Cache- Speicher (ICACHE) gefördert, der einen Befehlsabrufen mit hoher Bandbreite durch Verzweigungsvorhersage bereitstellt, die die Wirkung von Verzweigungen durch einen Board-internen Daten-Cache-Speicher (DCACHE) minimiert, um die Latenzzeit für Lade- und Speichervorgänge zu minimieren.
  • Der superskalare Mikroprozessor der vorliegenden Erfindung erreicht eine erhöhte Leistung durch wirksames Verwenden von Chipfläche durch gemeinsames Benutzen verschiedener Komponenten. Insbesondere sind die Ganzzahlen-Einheit und die Gleitkomma-Einheit des Mikroprozessors auf einem gemeinsam benutzten Datenverarbeitungsbus angebracht. Diese Funktionseinheiten umfassen mehrere Reservierungsstationen, die ebenfalls mit dem gleichen Datenverarbeitungsbus gekoppelt sind. Die Ganzzahlen- und Gleitkomma-Funktionseinheiten benutzen eine gemeinsame Verzweigungseinheit auf dem Datenverarbeitungsbus. Außerdem benutzen die Ganzzahlen- und Gleitkomma-Funktionseinheiten einen gemeinsamen Decodierer und eine gemeinsame Lade-/Speicher-Einheit 530. Ein interner Adressdatenbus (IAD-Bus) liefert lokale Kommunikationen zwischen verschiedenen Komponenten des Mikroprozessors der Erfindung.

Claims (18)

1. Superskalarer Mikroprozessor (200) mit:
einem Mehrfachbefehlsdekodierer (210) zum Dekodieren von Mehrfachbefehlen in ein und demselben Mikroprozessorzyklus, wobei der Dekodierer sowohl Ganzzahlen- als auch Gleitkommabefehle in ein und demselben Mikroprozessorzyklus dekodiert; und
einen mit dem Dekodierer (210) gekoppelten gemeinsamen Datenverarbeitungsbus (535);
gekennzeichnet durch:
eine mit dem gemeinsamen Datenverarbeitungsbus (535) gekoppelte Ganzzahlen-Funktionseinheit (220);
eine mit dem gemeinsamen Datenverarbeitungsbus (535) gekoppelte Gleitkomma-Funktionseinheit (230);
einen mit dem gemeinsamen Datenverarbeitungsbus (535) gekoppelten gemeinsamen Neuordnungspuffer (240) zur Benutzung sowohl durch die Ganzzahlen-Funktionseinheit (220) als auch durch die Gleitkomma- Funktionseinheit (230); und
eine gemeinsame Registerdatei (235) mit mindestens einem Register zur Benutzung sowohl durch die Ganzzahlen-Funktionseinheit (220) als auch durch die Gleitkomma-Funktionseinheit (230), wobei die gemeinsame Registerdatei (235) zur Übernahme von Befehlsergebnissen vom Neuordnungspuffer (240) mit dem Neuordnungspuffer (240) gekoppelt ist.
2. Mikroprozessor nach Anspruch 1, bei dem die Ganzzahlen-Funktionseinheit (220) mindestens eine Reservierungsstation (540,545) aufweist.
3. Mikroprozessor nach Anspruch 1 oder 2, bei dem die Ganzzahlen-Funktionseinheit (220) zwei Reservierungsstationen (540,545) aufweist.
4. Mikroprozessor nach Anspruch 1, 2 oder 3, bei dem die Gleitkomma- Funktionseinheit mindestens eine Reservierungsstation (560,570,580, 590) aufweist.
5. Mikroprozessor nach einem der vorhergehenden Ansprüche, bei dem die Gleitkomma-Funktionseinheit (230) zwei Reservierungsstationen aufweist.
6. Mikroprozessor nach einem der vorhergehenden Ansprüche, ferner mit: einer mit dem Datenverarbeitungsbus (530) gekoppelten und sowohl von der Ganzzahlen-Funktionseinheit (220) als auch von der Gleitkomma-Funktionseinheit (230) benutzten Verzweigungsvorhersage-Funktionseinheit (825).
7. Mikroprozessor nach einem der vorhergehenden Ansprüche, bei dem die Gleitkomma-Funktionseinheit (230) Operanden mit mehrfachen Größen verarbeitet.
8. Superskalarer Mikroprozessor (200) nach Anspruch 1, bei dem: die Ganzzahlen-Funktionseinheit (220) mehrere Reservierungsstationen (540,545) zum Aktivieren einer ungeordneten Befehlausführung durch den Mikroprozessor aufweist;
die Gleitkomma-Funktionseinheit (230) mehrere Reservierungsstationen (560,570,580,590) zum Aktivieren einer ungeordneten Befehlsausführung durch den Mikroprozessor aufweist; und
der gemeinsame Neuordnungspuffer (240) zum Aktivieren einer spekulativen und ungeordneten Verarbeitung von Befehlen dient;
wobei der Mikroprozessor ferner aufweist:
eine mit dem Datenverarbeitungsbus gekoppelte Verzweigungsvorhersage-Einheit (825) zur Benutzung sowohl durch die Ganzzahlen-Funktionseinheit (220) als auch durch die Gleitkomma-Funktionseinheit (230) zur spekulativen Vorhersage, welche Verzweigungen in einem Computerprogramm genommen werden; und
eine mit dem Datenverarbeitungsbus gekoppelte Lade-/Speicher-Funktionseinheit (530) zur Benutzung sowohl durch die Ganzzahlen-Funktionseinheit (220) als auch durch die Gleitkomma-Funktionseinheit (230) zum Ermöglichen des Ladens und Speicherns von Informationen.
9. Mikroprozessor nach einem der vorhergehenden Ansprüche, bei dem der Datenverarbeitungsbus aufweist:
mehrere Opcode- (OPCODE-) Busse;
mehrere Operanden- (A,B- OPER-) Busse;
mehrere Befehlstypenbusse (TYPE);
mehrere Ergebnis- (RESULT-) Busse; und
mehrere Ergebniskennungsbusse.
10. Mikroprozessor nach Anspruch 9, bei dem der Operandenbus Operandenkennungsbusse (A,B, TAG) aufweist.
11. Mikroprozessor nach Anspruch 9, bei dem die mehreren Operandenbusse Busse sind, auf denen sowohl Operanden als auch Operandenkennungen übertragen werden.
12. Mikroprozessor nach einem der vorhergehenden Ansprüche, bei dem der Datenübertragungsbus eine vorbestimmte Datenbreite aufweist und der Neuordnungspuffer (240) eine Speichereinheit zum Speichern von Eingaben mit einer Breite gleich der Datenverarbeitungsbusbreite und Eingaben mit einer Breite gleich dem Mehrfachen der Datenbreite des Datenverarbeitungsbusses aufweist.
13. Mikroprozessor nach einem der vorhergehenden Ansprüche, bei dem der Dekodierer (210) ferner eine Dispatch-Einrichtung (820) zum Weiterleiten sowohl von Ganzzahlen- als auch von Gleitkommabefehlen in einer programmierten Reihenfolge aufweist.
14. Mikroprozessor nach einem der vorhergehenden Ansprüche, bei dem die Gleitkomma-Funktionseinheit (230) eine Gleitkomma-Funktionseinheit mit einfacher Genauigkeit/doppelter Genauigkeit aufweist.
15. Mikroprozessor nach einem der vorhergehenden Ansprüche, ferner mit:
einer Bus-Interface-Einheit (260) zum Anschließen des Mikroprozessors an einen externen Speicher, in dem Befehle und Daten gespeichert sind; einem mit der Bus-Interface-Einheit gekoppelten internen Adressdaten- Kommunikationsbus (250);
einer Lade-/Speicher-Funktionseinheit (530), die zum Empfangen von Lade- und Speicherbefehlen vom Datenverarbeitungsbus mit diesem gekoppelt ist und ferner mit dem internen Adressdaten-Kommunikationsbus (250) gekoppelt ist, so dass der externe Speicher auf die Lade- /Speicher-Funktionseinheit zugreifen kann;
einem mit dem internen Adressdaten-Kommunikationsbus (250) und dem Dekodierer (210) gekoppelten Befehls-Cache-Speicher (205), damit dem Dekodierer (210) eine Befehlsquelle zur Verfügung steht; und
einem mit dem internen Adressdaten-Kommunikationsbus und der Lade-/Speicher-Funktionseinheit (530) gekoppelten Daten-Cache-Speicher (245);
wobei der interne Adressdaten-Kommunikationsbus (250) Adress- und Dateninformationen an den externen Speicher, den Befehls-Cache- Speicher (205) und den Daten-Cache-Speicher (245) übermittelt.
16. Mikroprozessor nach einem der vorhergehenden Ansprüche, bei dem der Mehrfachbefehlsdekodierer (210) vier Befehle pro Mikroprozessorzyklus dekodieren kann.
17. Mikroprozessor nach einem der vorhergehenden Ansprüche, kombiniert mit einem externen Speicher zum Liefern von Befehlen und Daten an den Mikroprozessor (200).
18. Mikroprozessor nach einem der vorhergehenden Ansprüche, bei dem der gemeinsame Neuordnungspuffer (240) einen inhaltsadressierbaren Speicher aufweist.
DE69429061T 1993-10-29 1994-09-20 Superskalarmikroprozessoren Expired - Lifetime DE69429061T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US14638293A 1993-10-29 1993-10-29

Publications (2)

Publication Number Publication Date
DE69429061D1 DE69429061D1 (de) 2001-12-20
DE69429061T2 true DE69429061T2 (de) 2002-07-18

Family

ID=22517120

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69429061T Expired - Lifetime DE69429061T2 (de) 1993-10-29 1994-09-20 Superskalarmikroprozessoren

Country Status (4)

Country Link
US (7) US5651125A (de)
EP (1) EP0651321B1 (de)
JP (1) JP3670039B2 (de)
DE (1) DE69429061T2 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE112005002432B4 (de) * 2004-09-30 2009-05-14 Intel Corporation, Santa Clara Verfahren und Vorrichtung zum Bereitstellen eines Quellenoperanden für eine Instruktion in einem Prozessor

Families Citing this family (337)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6370623B1 (en) * 1988-12-28 2002-04-09 Philips Electronics North America Corporation Multiport register file to accommodate data of differing lengths
CA2016068C (en) * 1989-05-24 2000-04-04 Robert W. Horst Multiple instruction issue computer architecture
US5539911A (en) 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
US5493687A (en) 1991-07-08 1996-02-20 Seiko Epson Corporation RISC microprocessor architecture implementing multiple typed register sets
US5961629A (en) * 1991-07-08 1999-10-05 Seiko Epson Corporation High performance, superscalar-based computer system with out-of-order instruction execution
US5398330A (en) * 1992-03-05 1995-03-14 Seiko Epson Corporation Register file backup queue
US5438668A (en) * 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
WO1993020505A2 (en) 1992-03-31 1993-10-14 Seiko Epson Corporation Superscalar risc instruction scheduling
KR950701437A (ko) 1992-05-01 1995-03-23 요시오 야마자끼 슈퍼스칼라 마이크로프로세서에서의 명령어 회수를 위한 시스템 및 방법
US6735685B1 (en) 1992-09-29 2004-05-11 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
DE69329778T2 (de) 1992-09-29 2001-04-26 Seiko Epson Corp., Tokio/Tokyo System und verfahren zur handhabung von laden und/oder speichern in einem superskalar mikroprozessor
DE69330889T2 (de) 1992-12-31 2002-03-28 Seiko Epson Corp., Tokio/Tokyo System und Verfahren zur Änderung der Namen von Registern
US5628021A (en) 1992-12-31 1997-05-06 Seiko Epson Corporation System and method for assigning tags to control instruction processing in a superscalar processor
US5630082A (en) * 1993-10-29 1997-05-13 Advanced Micro Devices, Inc. Apparatus and method for instruction queue scanning
DE69427265T2 (de) * 1993-10-29 2002-05-02 Advanced Micro Devices, Inc. Superskalarbefehlsdekoder
SG47981A1 (en) * 1994-03-01 1998-04-17 Intel Corp Pipeline process of instructions in a computer system
TW353732B (en) * 1994-03-31 1999-03-01 Ibm Processing system and method of operation
US5559976A (en) * 1994-03-31 1996-09-24 International Business Machines Corporation System for instruction completion independent of result write-back responsive to both exception free completion of execution and completion of all logically prior instructions
US5649225A (en) * 1994-06-01 1997-07-15 Advanced Micro Devices, Inc. Resynchronization of a superscalar processor
US5559975A (en) * 1994-06-01 1996-09-24 Advanced Micro Devices, Inc. Program counter update mechanism
US5632023A (en) * 1994-06-01 1997-05-20 Advanced Micro Devices, Inc. Superscalar microprocessor including flag operand renaming and forwarding apparatus
US5675758A (en) * 1994-11-15 1997-10-07 Advanced Micro Devices, Inc. Processor having primary integer execution unit and supplemental integer execution unit for performing out-of-order add and move operations
EP1265132A3 (de) * 1994-12-02 2005-02-09 Intel Corporation Mikroprozessor mit Packfunktion für zusammengesetzte Operanden
JP3442175B2 (ja) * 1995-02-02 2003-09-02 株式会社リコー 中央演算処理装置
US5832297A (en) * 1995-04-12 1998-11-03 Advanced Micro Devices, Inc. Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations
US5692170A (en) * 1995-04-28 1997-11-25 Metaflow Technologies, Inc. Apparatus for detecting and executing traps in a superscalar processor
US5867726A (en) * 1995-05-02 1999-02-02 Hitachi, Ltd. Microcomputer
US5968169A (en) * 1995-06-07 1999-10-19 Advanced Micro Devices, Inc. Superscalar microprocessor stack structure for judging validity of predicted subroutine return addresses
US6112019A (en) * 1995-06-12 2000-08-29 Georgia Tech Research Corp. Distributed instruction queue
US5742840A (en) * 1995-08-16 1998-04-21 Microunity Systems Engineering, Inc. General purpose, multiple precision parallel operation, programmable media processor
US6643765B1 (en) 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US5987561A (en) 1995-08-31 1999-11-16 Advanced Micro Devices, Inc. Superscalar microprocessor employing a data cache capable of performing store accesses in a single clock cycle
US5845323A (en) * 1995-08-31 1998-12-01 Advanced Micro Devices, Inc. Way prediction structure for predicting the way of a cache in which an access hits, thereby speeding cache access time
US5694565A (en) * 1995-09-11 1997-12-02 International Business Machines Corporation Method and device for early deallocation of resources during load/store multiple operations to allow simultaneous dispatch/execution of subsequent instructions
US5850563A (en) * 1995-09-11 1998-12-15 International Business Machines Corporation Processor and method for out-of-order completion of floating-point operations during load/store multiple operations
US5761105A (en) * 1995-09-26 1998-06-02 Advanced Micro Devices, Inc. Reservation station including addressable constant store for a floating point processing unit
US5748516A (en) * 1995-09-26 1998-05-05 Advanced Micro Devices, Inc. Floating point processing unit with forced arithmetic results
US5878266A (en) * 1995-09-26 1999-03-02 Advanced Micro Devices, Inc. Reservation station for a floating point processing unit
US5872947A (en) * 1995-10-24 1999-02-16 Advanced Micro Devices, Inc. Instruction classification circuit configured to classify instructions into a plurality of instruction types prior to decoding said instructions
US5881278A (en) * 1995-10-30 1999-03-09 Advanced Micro Devices, Inc. Return address prediction system which adjusts the contents of return stack storage to enable continued prediction after a mispredicted branch
US5864707A (en) * 1995-12-11 1999-01-26 Advanced Micro Devices, Inc. Superscalar microprocessor configured to predict return addresses from a return stack storage
US6792523B1 (en) 1995-12-19 2004-09-14 Intel Corporation Processor with instructions that operate on different data types stored in the same single logical register file
US5857096A (en) * 1995-12-19 1999-01-05 Intel Corporation Microarchitecture for implementing an instruction to clear the tags of a stack reference register file
US5852726A (en) * 1995-12-19 1998-12-22 Intel Corporation Method and apparatus for executing two types of instructions that specify registers of a shared logical register file in a stack and a non-stack referenced manner
US5701508A (en) 1995-12-19 1997-12-23 Intel Corporation Executing different instructions that cause different data type operations to be performed on single logical register file
US5911057A (en) * 1995-12-19 1999-06-08 Texas Instruments Incorporated Superscalar microprocessor having combined register and memory renaming circuits, systems, and methods
US5940859A (en) 1995-12-19 1999-08-17 Intel Corporation Emptying packed data state during execution of packed data instructions
US5778246A (en) * 1995-12-27 1998-07-07 Intel Corporation Method and apparatus for efficient propagation of attribute bits in an instruction decode pipeline
US5930490A (en) * 1996-01-02 1999-07-27 Advanced Micro Devices, Inc. Microprocessor configured to switch instruction sets upon detection of a plurality of consecutive instructions
JP3658072B2 (ja) * 1996-02-07 2005-06-08 株式会社ルネサステクノロジ データ処理装置およびデータ処理方法
SE509499C2 (sv) * 1996-05-03 1999-02-01 Ericsson Telefon Ab L M Metod och anordning för hantering av villkorliga hopp vid instruktionsbehandling i en pipeline-arkitektur
US6108769A (en) 1996-05-17 2000-08-22 Advanced Micro Devices, Inc. Dependency table for reducing dependency checking hardware
DE69728081T2 (de) * 1996-05-30 2004-08-19 Matsushita Electric Industrial Co., Ltd., Kadoma Verfahren und Schaltkreis zur Steuerung verzögerter Verzweigungsbefehle
US5784603A (en) * 1996-06-19 1998-07-21 Sun Microsystems, Inc. Fast handling of branch delay slots on mispredicted branches
US5652774A (en) * 1996-07-08 1997-07-29 International Business Machines Corporation Method and apparatus for decreasing the cycle times of a data processing system
US5802556A (en) * 1996-07-16 1998-09-01 International Business Machines Corporation Method and apparatus for correcting misaligned instruction data
US5903740A (en) * 1996-07-24 1999-05-11 Advanced Micro Devices, Inc. Apparatus and method for retiring instructions in excess of the number of accessible write ports
US5867680A (en) * 1996-07-24 1999-02-02 Advanced Micro Devices, Inc. Microprocessor configured to simultaneously dispatch microcode and directly-decoded instructions
US6049863A (en) * 1996-07-24 2000-04-11 Advanced Micro Devices, Inc. Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor
US5946468A (en) * 1996-07-26 1999-08-31 Advanced Micro Devices, Inc. Reorder buffer having an improved future file for storing speculative instruction execution results
US5915110A (en) * 1996-07-26 1999-06-22 Advanced Micro Devices, Inc. Branch misprediction recovery in a reorder buffer having a future file
US6058465A (en) * 1996-08-19 2000-05-02 Nguyen; Le Trong Single-instruction-multiple-data processing in a multimedia signal processor
US5882993A (en) 1996-08-19 1999-03-16 Advanced Micro Devices, Inc. Integrated circuit with differing gate oxide thickness and process for making same
JP2933026B2 (ja) * 1996-08-30 1999-08-09 日本電気株式会社 複数命令並列発行/実行管理装置
US5884062A (en) * 1996-08-30 1999-03-16 Texas Instruments Incorporated Microprocessor with pipeline status integrity logic for handling multiple stage writeback exceptions
JP2933027B2 (ja) * 1996-08-30 1999-08-09 日本電気株式会社 複数命令並列発行/実行管理装置
US6055598A (en) * 1996-09-26 2000-04-25 Vlsi Technology, Inc. Arrangement and method for allowing sequence-independent command responses across a computer bus bridge
US5991884A (en) * 1996-09-30 1999-11-23 Intel Corporation Method for reducing peak power in dispatching instructions to multiple execution units
US5754811A (en) * 1996-10-08 1998-05-19 Putrino; Michael Instruction dispatch queue for improved instruction cache to queue timing
WO1998020421A1 (en) * 1996-11-04 1998-05-14 Advanced Micro Devices, Inc. A way prediction structure
US6256745B1 (en) * 1998-06-05 2001-07-03 Intel Corporation Processor having execution core sections operating at different clock rates
US6631454B1 (en) 1996-11-13 2003-10-07 Intel Corporation Processor and data cache with data storage unit and tag hit/miss logic operated at a first and second clock frequencies
US6175906B1 (en) 1996-12-06 2001-01-16 Advanced Micro Devices, Inc. Mechanism for fast revalidation of virtual tags
US5887160A (en) * 1996-12-10 1999-03-23 Fujitsu Limited Method and apparatus for communicating integer and floating point data over a shared data path in a single instruction pipeline processor
US5881306A (en) * 1996-12-17 1999-03-09 International Business Machines Corporation Instruction fetch bandwidth analysis
US6088793A (en) * 1996-12-30 2000-07-11 Intel Corporation Method and apparatus for branch execution on a multiple-instruction-set-architecture microprocessor
US5983321A (en) * 1997-03-12 1999-11-09 Advanced Micro Devices, Inc. Cache holding register for receiving instruction packets and for providing the instruction packets to a predecode unit and instruction cache
US6542998B1 (en) 1997-02-08 2003-04-01 Pact Gmbh Method of self-synchronization of configurable elements of a programmable module
US5881307A (en) * 1997-02-24 1999-03-09 Samsung Electronics Co., Ltd. Deferred store data read with simple anti-dependency pipeline inter-lock control in superscalar processor
US5909567A (en) * 1997-02-28 1999-06-01 Advanced Micro Devices, Inc. Apparatus and method for native mode processing in a RISC-based CISC processor
US5828873A (en) * 1997-03-19 1998-10-27 Advanced Micro Devices, Inc. Assembly queue for a floating point unit
US5887185A (en) * 1997-03-19 1999-03-23 Advanced Micro Devices, Inc. Interface for coupling a floating point unit to a reorder buffer
US5887161A (en) * 1997-03-31 1999-03-23 International Business Machines Corporation Issuing instructions in a processor supporting out-of-order execution
US5987235A (en) * 1997-04-04 1999-11-16 Advanced Micro Devices, Inc. Method and apparatus for predecoding variable byte length instructions for fast scanning of instructions
US5974535A (en) * 1997-05-09 1999-10-26 International Business Machines Corporation Method and system in data processing system of permitting concurrent processing of instructions of a particular type
US6122729A (en) 1997-05-13 2000-09-19 Advanced Micro Devices, Inc. Prefetch buffer which stores a pointer indicating an initial predecode position
US5845101A (en) * 1997-05-13 1998-12-01 Advanced Micro Devices, Inc. Prefetch buffer for storing instructions prior to placing the instructions in an instruction cache
US5923898A (en) * 1997-05-14 1999-07-13 International Business Machines Corporation System for executing I/O request when an I/O request queue entry matches a snoop table entry or executing snoop when not matched
JPH10333908A (ja) * 1997-05-30 1998-12-18 Mitsubishi Electric Corp 分岐予測方法
US6009511A (en) * 1997-06-11 1999-12-28 Advanced Micro Devices, Inc. Apparatus and method for tagging floating point operands and results for rapid detection of special floating point numbers
US5898851A (en) * 1997-06-11 1999-04-27 Advanced Micro Devices, Inc. Method and apparatus for five bit predecoding variable length instructions for scanning of a number of RISC operations
US5940602A (en) * 1997-06-11 1999-08-17 Advanced Micro Devices, Inc. Method and apparatus for predecoding variable byte length instructions for scanning of a number of RISC operations
US5933626A (en) * 1997-06-12 1999-08-03 Advanced Micro Devices, Inc. Apparatus and method for tracing microprocessor instructions
US5930491A (en) * 1997-06-18 1999-07-27 International Business Machines Corporation Identification of related instructions resulting from external to internal translation by use of common ID field for each group
US6044222A (en) * 1997-06-23 2000-03-28 International Business Machines Corporation System, method, and program product for loop instruction scheduling hardware lookahead
US6094719A (en) * 1997-06-25 2000-07-25 Sun Microsystems, Inc. Reducing data dependent conflicts by converting single precision instructions into microinstructions using renamed phantom registers in a processor having double precision registers
US5884070A (en) * 1997-06-25 1999-03-16 Sun Microsystems, Inc. Method for processing single precision arithmetic operations in system where two single precision registers are aliased to one double precision register
US6052775A (en) * 1997-06-25 2000-04-18 Sun Microsystems, Inc. Method for non-intrusive cache fills and handling of load misses
US6085305A (en) * 1997-06-25 2000-07-04 Sun Microsystems, Inc. Apparatus for precise architectural update in an out-of-order processor
US6035388A (en) 1997-06-27 2000-03-07 Sandcraft, Inc. Method and apparatus for dual issue of program instructions to symmetric multifunctional execution units
US6021489A (en) * 1997-06-30 2000-02-01 Intel Corporation Apparatus and method for sharing a branch prediction unit in a microprocessor implementing a two instruction set architecture
US5987259A (en) * 1997-06-30 1999-11-16 Sun Microsystems, Inc. Functional unit switching for the allocation of registers
US5978901A (en) * 1997-08-21 1999-11-02 Advanced Micro Devices, Inc. Floating point and multimedia unit with data type reclassification capability
US6289437B1 (en) * 1997-08-27 2001-09-11 International Business Machines Corporation Data processing system and method for implementing an efficient out-of-order issue mechanism
US5870575A (en) * 1997-09-22 1999-02-09 International Business Machines Corporation Indirect unconditional branches in data processing system emulation mode
US7197625B1 (en) 1997-10-09 2007-03-27 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US5864703A (en) * 1997-10-09 1999-01-26 Mips Technologies, Inc. Method for providing extended precision in SIMD vector arithmetic operations
US6029244A (en) * 1997-10-10 2000-02-22 Advanced Micro Devices, Inc. Microprocessor including an efficient implementation of extreme value instructions
US6237077B1 (en) 1997-10-13 2001-05-22 Idea Corporation Instruction template for efficient processing clustered branch instructions
US6014739A (en) * 1997-10-27 2000-01-11 Advanced Micro Devices, Inc. Increasing general registers in X86 processors
US6032252A (en) * 1997-10-28 2000-02-29 Advanced Micro Devices, Inc. Apparatus and method for efficient loop control in a superscalar microprocessor
US5974542A (en) * 1997-10-30 1999-10-26 Advanced Micro Devices, Inc. Branch prediction unit which approximates a larger number of branch predictions using a smaller number of branch predictions and an alternate target indication
US6230259B1 (en) 1997-10-31 2001-05-08 Advanced Micro Devices, Inc. Transparent extended state save
US6157996A (en) * 1997-11-13 2000-12-05 Advanced Micro Devices, Inc. Processor programably configurable to execute enhanced variable byte length instructions including predicated execution, three operand addressing, and increased register space
EP1029267B1 (de) * 1997-11-14 2002-03-27 Marathon Technologies Corporation Verfahren zur erhaltung von synchronisierter ausführung bei fehler-betriebssicheren/ fehlertoleranten rechnersystemen
US6112293A (en) * 1997-11-17 2000-08-29 Advanced Micro Devices, Inc. Processor configured to generate lookahead results from operand collapse unit and for inhibiting receipt/execution of the first instruction based on the lookahead result
US6199154B1 (en) 1997-11-17 2001-03-06 Advanced Micro Devices, Inc. Selecting cache to fetch in multi-level cache system based on fetch address source and pre-fetching additional data to the cache for future access
US5974432A (en) * 1997-12-05 1999-10-26 Advanced Micro Devices, Inc. On-the-fly one-hot encoding of leading zero count
US5870578A (en) * 1997-12-09 1999-02-09 Advanced Micro Devices, Inc. Workload balancing in a microprocessor for reduced instruction dispatch stalling
US6134650A (en) * 1997-12-12 2000-10-17 Advanced Micro Devices, Inc. Apparatus and method for predicting a first scanned instruction as microcode instruction prior to scanning predecode data
US6061775A (en) * 1997-12-12 2000-05-09 Advanced Micro Devices, Inc. Apparatus and method for predicting a first microcode instruction of a cache line and using predecode instruction data to identify instruction boundaries and types
US6016533A (en) * 1997-12-16 2000-01-18 Advanced Micro Devices, Inc. Way prediction logic for cache array
US6157986A (en) * 1997-12-16 2000-12-05 Advanced Micro Devices, Inc. Fast linear tag validation unit for use in microprocessor
US6016545A (en) * 1997-12-16 2000-01-18 Advanced Micro Devices, Inc. Reduced size storage apparatus for storing cache-line-related data in a high frequency microprocessor
US6041405A (en) * 1997-12-18 2000-03-21 Advanced Micro Devices, Inc. Instruction length prediction using an instruction length pattern detector
US6125441A (en) * 1997-12-18 2000-09-26 Advanced Micro Devices, Inc. Predicting a sequence of variable instruction lengths from previously identified length pattern indexed by an instruction fetch address
US6112296A (en) * 1997-12-18 2000-08-29 Advanced Micro Devices, Inc. Floating point stack manipulation using a register map and speculative top of stack values
US5951671A (en) * 1997-12-18 1999-09-14 Advanced Micro Devices, Inc. Sharing instruction predecode information in a multiprocessor system
US6018798A (en) * 1997-12-18 2000-01-25 Advanced Micro Devices, Inc. Floating point unit using a central window for storing instructions capable of executing multiple instructions in a single clock cycle
US6112018A (en) * 1997-12-18 2000-08-29 Advanced Micro Devices, Inc. Apparatus for exchanging two stack registers
US6012138A (en) * 1997-12-19 2000-01-04 Lsi Logic Corporation Dynamically variable length CPU pipeline for efficiently executing two instruction sets
US6047367A (en) * 1998-01-20 2000-04-04 International Business Machines Corporation Microprocessor with improved out of order support
US6009510A (en) * 1998-02-06 1999-12-28 Ip First Llc Method and apparatus for improved aligned/misaligned data load from cache
US6065110A (en) * 1998-02-09 2000-05-16 International Business Machines Corporation Method and apparatus for loading an instruction buffer of a processor capable of out-of-order instruction issue
US5881260A (en) * 1998-02-09 1999-03-09 Hewlett-Packard Company Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction
US6105129A (en) * 1998-02-18 2000-08-15 Advanced Micro Devices, Inc. Converting register data from a first format type to a second format type if a second type instruction consumes data produced by a first type instruction
US6141745A (en) * 1998-04-30 2000-10-31 Advanced Micro Devices, Inc. Functional bit identifying a prefix byte via a particular state regardless of type of instruction
US6175908B1 (en) 1998-04-30 2001-01-16 Advanced Micro Devices, Inc. Variable byte-length instructions using state of function bit of second byte of plurality of instructions bytes as indicative of whether first byte is a prefix byte
US6212621B1 (en) 1998-06-24 2001-04-03 Advanced Micro Devices Inc Method and system using tagged instructions to allow out-of-program-order instruction decoding
US6092182A (en) * 1998-06-24 2000-07-18 Advanced Micro Devices, Inc. Using ECC/parity bits to store predecode information
US6278838B1 (en) * 1998-06-26 2001-08-21 Lsi Logic Corporation Peak-ahead FIFO for DVD system stream parsing
WO2000000878A2 (en) * 1998-06-26 2000-01-06 Chi Lan Wong Derek Methods for increasing instruction-level parallelism in microprocessors and digital systems
US6988183B1 (en) 1998-06-26 2006-01-17 Derek Chi-Lan Wong Methods for increasing instruction-level parallelism in microprocessors and digital system
US6119223A (en) * 1998-07-31 2000-09-12 Advanced Micro Devices, Inc. Map unit having rapid misprediction recovery
US6230262B1 (en) 1998-07-31 2001-05-08 Advanced Micro Devices, Inc. Processor configured to selectively free physical registers upon retirement of instructions
US6304953B1 (en) * 1998-07-31 2001-10-16 Intel Corporation Computer processor with instruction-specific schedulers
US6122656A (en) * 1998-07-31 2000-09-19 Advanced Micro Devices, Inc. Processor configured to map logical register numbers to physical register numbers using virtual register numbers
US6304960B1 (en) 1998-08-06 2001-10-16 Intel Corporation Validating prediction for branches in a cluster via comparison of predicted and condition selected tentative target addresses and validation of branch conditions
US6240510B1 (en) * 1998-08-06 2001-05-29 Intel Corporation System for processing a cluster of instructions where the instructions are issued to the execution units having a priority order according to a template associated with the cluster of instructions
US6212622B1 (en) 1998-08-24 2001-04-03 Advanced Micro Devices, Inc. Mechanism for load block on store address generation
US6122727A (en) * 1998-08-24 2000-09-19 Advanced Micro Devices, Inc. Symmetrical instructions queue for high clock frequency scheduling
US6212623B1 (en) 1998-08-24 2001-04-03 Advanced Micro Devices, Inc. Universal dependency vector/queue entry
US6742111B2 (en) * 1998-08-31 2004-05-25 Stmicroelectronics, Inc. Reservation stations to increase instruction level parallelism
US6418527B1 (en) * 1998-10-13 2002-07-09 Motorola, Inc. Data processor instruction system for grouping instructions with or without a common prefix and data processing system that uses two or more instruction grouping methods
US6434689B2 (en) * 1998-11-09 2002-08-13 Infineon Technologies North America Corp. Data processing unit with interface for sharing registers by a processor and a coprocessor
US6223254B1 (en) * 1998-12-04 2001-04-24 Stmicroelectronics, Inc. Parcel cache
US6266763B1 (en) 1999-01-05 2001-07-24 Advanced Micro Devices, Inc. Physical rename register for efficiently storing floating point, integer, condition code, and multimedia values
SG81954A1 (en) * 1999-01-21 2001-07-24 Ibm Microprocessor with improved out of order support via register management with synchronization of multiple pipelines
US6260133B1 (en) * 1999-02-08 2001-07-10 Kabushiki Kaisha Toshiba Processor having operating instruction which uses operation units in different pipelines simultaneously
US6732259B1 (en) 1999-07-30 2004-05-04 Mips Technologies, Inc. Processor having a conditional branch extension of an instruction set architecture
US7242414B1 (en) * 1999-07-30 2007-07-10 Mips Technologies, Inc. Processor having a compare extension of an instruction set architecture
US6178496B1 (en) * 1999-02-17 2001-01-23 Motorola, Inc. System for converting instructions, and method therefore
US6338133B1 (en) 1999-03-12 2002-01-08 International Business Machines Corporation Measured, allocation of speculative branch instructions to processor execution units
US20040158695A1 (en) 1999-05-03 2004-08-12 Laurent Ugen Method and apparatus for handling transfer of guarded instructions in a computer system
US7089404B1 (en) * 1999-06-14 2006-08-08 Transmeta Corporation Method and apparatus for enhancing scheduling in an advanced microprocessor
US6374345B1 (en) * 1999-07-22 2002-04-16 Advanced Micro Devices, Inc. Apparatus and method for handling tiny numbers using a super sticky bit in a microprocessor
US7346643B1 (en) * 1999-07-30 2008-03-18 Mips Technologies, Inc. Processor with improved accuracy for multiply-add operations
US6714197B1 (en) 1999-07-30 2004-03-30 Mips Technologies, Inc. Processor having an arithmetic extension of an instruction set architecture
US6697832B1 (en) 1999-07-30 2004-02-24 Mips Technologies, Inc. Floating-point processor with improved intermediate result handling
US6631392B1 (en) 1999-07-30 2003-10-07 Mips Technologies, Inc. Method and apparatus for predicting floating-point exceptions
US6912559B1 (en) 1999-07-30 2005-06-28 Mips Technologies, Inc. System and method for improving the accuracy of reciprocal square root operations performed by a floating-point unit
US7089367B1 (en) * 1999-08-11 2006-08-08 Intel Corporation Reducing memory access latencies from a bus using pre-fetching and caching
US6438664B1 (en) 1999-10-27 2002-08-20 Advanced Micro Devices, Inc. Microcode patch device and method for patching microcode using match registers and patch routines
US6876991B1 (en) 1999-11-08 2005-04-05 Collaborative Decision Platforms, Llc. System, method and computer program product for a collaborative decision platform
US6542986B1 (en) 1999-11-09 2003-04-01 Advanced Micro Devices, Inc. Resolving dependencies among concurrently dispatched instructions in a superscalar microprocessor
US6539467B1 (en) * 1999-11-15 2003-03-25 Texas Instruments Incorporated Microprocessor with non-aligned memory access
US7107434B2 (en) * 1999-12-20 2006-09-12 Board Of Regents, The University Of Texas System, method and apparatus for allocating hardware resources using pseudorandom sequences
US6622237B1 (en) 2000-01-03 2003-09-16 Advanced Micro Devices, Inc. Store to load forward predictor training using delta tag
US6694424B1 (en) 2000-01-03 2004-02-17 Advanced Micro Devices, Inc. Store load forward predictor training
US6542984B1 (en) 2000-01-03 2003-04-01 Advanced Micro Devices, Inc. Scheduler capable of issuing and reissuing dependency chains
US6622235B1 (en) 2000-01-03 2003-09-16 Advanced Micro Devices, Inc. Scheduler which retries load/store hit situations
US6564315B1 (en) 2000-01-03 2003-05-13 Advanced Micro Devices, Inc. Scheduler which discovers non-speculative nature of an instruction after issuing and reissues the instruction
US6651161B1 (en) 2000-01-03 2003-11-18 Advanced Micro Devices, Inc. Store load forward predictor untraining
US6662361B1 (en) 2000-01-14 2003-12-09 International Business Machines Corporation Method, system, program, and data structures for transforming an instruction in a first bit architecture to an instruction in a second bit architecture
US6453405B1 (en) * 2000-02-18 2002-09-17 Texas Instruments Incorporated Microprocessor with non-aligned circular addressing
US8095508B2 (en) * 2000-04-07 2012-01-10 Washington University Intelligent data storage and processing using FPGA devices
US6711558B1 (en) 2000-04-07 2004-03-23 Washington University Associative database scanning and information retrieval
US7139743B2 (en) 2000-04-07 2006-11-21 Washington University Associative database scanning and information retrieval using FPGA devices
US6751724B1 (en) * 2000-04-19 2004-06-15 Motorola, Inc. Method and apparatus for instruction fetching
US6996596B1 (en) 2000-05-23 2006-02-07 Mips Technologies, Inc. Floating-point processor with operating mode having improved accuracy and high performance
US6735686B1 (en) * 2000-06-30 2004-05-11 Hitachi, Ltd. Data processing device including two instruction decoders for decoding branch instructions
US6981132B2 (en) 2000-08-09 2005-12-27 Advanced Micro Devices, Inc. Uniform register addressing using prefix byte
US6877084B1 (en) 2000-08-09 2005-04-05 Advanced Micro Devices, Inc. Central processing unit (CPU) accessing an extended register set in an extended register mode
US6633969B1 (en) 2000-08-11 2003-10-14 Lsi Logic Corporation Instruction translation system and method achieving single-cycle translation of variable-length MIPS16 instructions
US6804815B1 (en) * 2000-09-18 2004-10-12 Cisco Technology, Inc. Sequence control mechanism for enabling out of order context processing
US8058899B2 (en) 2000-10-06 2011-11-15 Martin Vorbach Logic cell array and bus system
US7149878B1 (en) * 2000-10-30 2006-12-12 Mips Technologies, Inc. Changing instruction set architecture mode by comparison of current instruction execution address with boundary address register values
US6484241B2 (en) * 2000-12-28 2002-11-19 International Business Machines Corporation Multiprocessor computer system with sectored cache line system bus protocol mechanism
US6553462B2 (en) * 2000-12-28 2003-04-22 International Business Machines Corporation Multiprocessor computer system with sectored cache line mechanism for load and store operations
US6571322B2 (en) * 2000-12-28 2003-05-27 International Business Machines Corporation Multiprocessor computer system with sectored cache line mechanism for cache intervention
US6449431B1 (en) * 2001-07-16 2002-09-10 Non Typical Inc. Enclosure for wildlife surveillance system and security apparatus therefore
US7181484B2 (en) 2001-02-21 2007-02-20 Mips Technologies, Inc. Extended-precision accumulation of multiplier output
US7711763B2 (en) * 2001-02-21 2010-05-04 Mips Technologies, Inc. Microprocessor instructions for performing polynomial arithmetic operations
US7599981B2 (en) * 2001-02-21 2009-10-06 Mips Technologies, Inc. Binary polynomial multiplier
US7162621B2 (en) 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
US9037807B2 (en) 2001-03-05 2015-05-19 Pact Xpp Technologies Ag Processor arrangement on a chip including data processing, memory, and interface elements
US7444531B2 (en) 2001-03-05 2008-10-28 Pact Xpp Technologies Ag Methods and devices for treating and processing data
US7711926B2 (en) * 2001-04-18 2010-05-04 Mips Technologies, Inc. Mapping system and method for instruction set processing
US6804799B2 (en) * 2001-06-26 2004-10-12 Advanced Micro Devices, Inc. Using type bits to track storage of ECC and predecode bits in a level two cache
US7107439B2 (en) 2001-08-10 2006-09-12 Mips Technologies, Inc. System and method of controlling software decompression through exceptions
US7996827B2 (en) 2001-08-16 2011-08-09 Martin Vorbach Method for the translation of programs for reconfigurable architectures
US7716330B2 (en) 2001-10-19 2010-05-11 Global Velocity, Inc. System and method for controlling transmission of data packets over an information network
US7107433B1 (en) * 2001-10-26 2006-09-12 Lsi Logic Corporation Mechanism for resource allocation in a digital signal processor based on instruction type information and functional priority and method of operation thereof
US7114059B2 (en) * 2001-11-05 2006-09-26 Intel Corporation System and method to bypass execution of instructions involving unreliable data during speculative execution
US20030088758A1 (en) * 2001-11-08 2003-05-08 Matthew Becker Methods and systems for determining valid microprocessor instructions
CA2365375A1 (en) * 2001-12-18 2003-06-18 Ibm Canada Limited-Ibm Canada Limitee Optimizing source code for iterative execution
US8914590B2 (en) 2002-08-07 2014-12-16 Pact Xpp Technologies Ag Data processing method and device
WO2005026925A2 (en) 2002-05-21 2005-03-24 Washington University Intelligent data storage and processing using fpga devices
US7093023B2 (en) * 2002-05-21 2006-08-15 Washington University Methods, systems, and devices using reprogrammable hardware for high-speed processing of streaming data to find a redefinable pattern and respond thereto
JP3800533B2 (ja) * 2002-06-28 2006-07-26 富士通株式会社 プログラムカウンタ制御方法及びプロセッサ
US7406587B1 (en) * 2002-07-31 2008-07-29 Silicon Graphics, Inc. Method and system for renaming registers in a microprocessor
US7711844B2 (en) 2002-08-15 2010-05-04 Washington University Of St. Louis TCP-splitter: reliable packet monitoring methods and apparatus for high speed networks
US20040128480A1 (en) * 2002-12-31 2004-07-01 Intel Corporation Register file read port to support uop fusion
US20040148497A1 (en) * 2003-01-27 2004-07-29 Ali Vahidsafa Method and apparatus for determining an early reifetch address of a mispredicted conditional branch instruction in an out of order multi-issue processor
US20040199749A1 (en) * 2003-04-03 2004-10-07 Robert Golla Method and apparatus to limit register file read ports in an out-of-order, multi-stranded processor
US10572824B2 (en) 2003-05-23 2020-02-25 Ip Reservoir, Llc System and method for low latency multi-functional pipeline with correlation logic and selectively activated/deactivated pipelined data processing engines
US7321964B2 (en) * 2003-07-08 2008-01-22 Advanced Micro Devices, Inc. Store-to-load forwarding buffer using indexed lookup
WO2006082091A2 (en) * 2005-02-07 2006-08-10 Pact Xpp Technologies Ag Low latency massive parallel data processing device
GB0320386D0 (en) * 2003-08-30 2003-10-01 Ibm A method, apparatus and computer program for executing a program
US7117290B2 (en) 2003-09-03 2006-10-03 Advanced Micro Devices, Inc. MicroTLB and micro tag for reducing power in a processor
US20050050278A1 (en) * 2003-09-03 2005-03-03 Advanced Micro Devices, Inc. Low power way-predicted cache
US7043626B1 (en) 2003-10-01 2006-05-09 Advanced Micro Devices, Inc. Retaining flag value associated with dead result data in freed rename physical register with an indicator to select set-aside register instead for renaming
US7167989B2 (en) * 2003-10-14 2007-01-23 Intel Corporation Processor and methods to reduce power consumption of processor components
US7707389B2 (en) * 2003-10-31 2010-04-27 Mips Technologies, Inc. Multi-ISA instruction fetch unit for a processor, and applications thereof
US7246215B2 (en) * 2003-11-26 2007-07-17 Intel Corporation Systolic memory arrays
US7406565B2 (en) * 2004-01-13 2008-07-29 Hewlett-Packard Development Company, L.P. Multi-processor systems and methods for backup for non-coherent speculative fills
US8301844B2 (en) * 2004-01-13 2012-10-30 Hewlett-Packard Development Company, L.P. Consistency evaluation of program execution across at least one memory barrier
GB2410097B (en) 2004-01-13 2006-11-01 Advanced Risc Mach Ltd A data processing apparatus and method for performing data processing operations on floating point data elements
US8281079B2 (en) * 2004-01-13 2012-10-02 Hewlett-Packard Development Company, L.P. Multi-processor system receiving input from a pre-fetch buffer
US7360069B2 (en) * 2004-01-13 2008-04-15 Hewlett-Packard Development Company, L.P. Systems and methods for executing across at least one memory barrier employing speculative fills
US7376794B2 (en) * 2004-01-13 2008-05-20 Hewlett-Packard Development Company, L.P. Coherent signal in a multi-processor system
US7383409B2 (en) * 2004-01-13 2008-06-03 Hewlett-Packard Development Company, L.P. Cache systems and methods for employing speculative fills
US7340565B2 (en) * 2004-01-13 2008-03-04 Hewlett-Packard Development Company, L.P. Source request arbitration
US7409503B2 (en) * 2004-01-13 2008-08-05 Hewlett-Packard Development Company, L.P. Register file systems and methods for employing speculative fills
US7409500B2 (en) * 2004-01-13 2008-08-05 Hewlett-Packard Development Company, L.P. Systems and methods for employing speculative fills
US7602785B2 (en) 2004-02-09 2009-10-13 Washington University Method and system for performing longest prefix matching for network address lookup using bloom filters
US7613950B2 (en) * 2004-02-27 2009-11-03 Hewlett-Packard Development Company, L.P. Detecting floating point hardware failures
JP2005276104A (ja) * 2004-03-26 2005-10-06 Nec Electronics Corp マイクロコンピュータ
US7831642B1 (en) * 2004-09-30 2010-11-09 Symantec Operating Corporation Page cache management for a shared file
US7733347B2 (en) * 2004-11-05 2010-06-08 Microsoft Corporation Automated construction of shader programs
US7800620B2 (en) 2004-11-05 2010-09-21 Microsoft Corporation Optimizing automated shader program construction
WO2006114874A1 (ja) * 2005-04-21 2006-11-02 Fujitsu Limited プロセッサ装置
JP4837305B2 (ja) * 2005-05-10 2011-12-14 ルネサスエレクトロニクス株式会社 マイクロプロセッサ及びマイクロプロセッサの制御方法
US8161252B1 (en) * 2005-08-01 2012-04-17 Nvidia Corporation Memory interface with dynamic selection among mirrored storage locations
US7237095B1 (en) 2005-08-04 2007-06-26 Advanced Micro Devices, Inc. Optimum power efficient shifting algorithm for schedulers
US7376817B2 (en) * 2005-08-10 2008-05-20 P.A. Semi, Inc. Partial load/store forward prediction
US7328330B2 (en) * 2005-08-16 2008-02-05 International Business Machines Corporation Queue design supporting dependency checking and issue for SIMD instructions within a general purpose processor
US20070083737A1 (en) * 2005-08-16 2007-04-12 Ibm Corporation Processor with efficient shift/rotate instruction execution
US7373486B2 (en) * 2005-08-29 2008-05-13 P.A. Semi, Inc. Partially decoded register renamer
US7350056B2 (en) * 2005-09-27 2008-03-25 International Business Machines Corporation Method and apparatus for issuing instructions from an issue queue in an information handling system
US20070198812A1 (en) * 2005-09-27 2007-08-23 Ibm Corporation Method and apparatus for issuing instructions from an issue queue including a main issue queue array and an auxiliary issue queue array in an information handling system
US7996662B2 (en) * 2005-11-17 2011-08-09 Apple Inc. Floating point status/control register encodings for speculative register field
US7702629B2 (en) * 2005-12-02 2010-04-20 Exegy Incorporated Method and device for high performance regular expression pattern matching
US7954114B2 (en) 2006-01-26 2011-05-31 Exegy Incorporated Firmware socket module for FPGA-based pipeline processing
US7636703B2 (en) * 2006-05-02 2009-12-22 Exegy Incorporated Method and apparatus for approximate pattern matching
US7921046B2 (en) 2006-06-19 2011-04-05 Exegy Incorporated High speed processing of financial information using FPGA devices
US7840482B2 (en) 2006-06-19 2010-11-23 Exegy Incorporated Method and system for high speed options pricing
US20080072015A1 (en) * 2006-09-18 2008-03-20 Julier Michael A Demand-based processing resource allocation
US7620797B2 (en) * 2006-11-01 2009-11-17 Apple Inc. Instructions for efficiently accessing unaligned vectors
US7624251B2 (en) * 2006-11-01 2009-11-24 Apple Inc. Instructions for efficiently accessing unaligned partial vectors
US7660793B2 (en) 2006-11-13 2010-02-09 Exegy Incorporated Method and system for high performance integration, processing and searching of structured and unstructured data using coprocessors
US8326819B2 (en) 2006-11-13 2012-12-04 Exegy Incorporated Method and system for high performance data metatagging and data indexing using coprocessors
EP2106584A1 (de) * 2006-12-11 2009-10-07 Nxp B.V. Pipeline-prozessor und compiler/planer für branch-delay-slots mit veränderlicher anzahl
US7725690B2 (en) * 2007-02-13 2010-05-25 Advanced Micro Devices, Inc. Distributed dispatch with concurrent, out-of-order dispatch
JP5007860B2 (ja) * 2007-04-17 2012-08-22 エヌイーシーコンピュータテクノ株式会社 ベクトル処理装置
US7870350B1 (en) * 2007-06-07 2011-01-11 Nvidia Corporation Write buffer for read-write interlocks
US9015399B2 (en) 2007-08-20 2015-04-21 Convey Computer Multiple data channel memory module architecture
US8561037B2 (en) * 2007-08-29 2013-10-15 Convey Computer Compiler for generating an executable comprising instructions for a plurality of different instruction sets
US9710384B2 (en) * 2008-01-04 2017-07-18 Micron Technology, Inc. Microprocessor architecture having alternative memory access paths
US8095735B2 (en) 2008-08-05 2012-01-10 Convey Computer Memory interleave for heterogeneous computing
US7877559B2 (en) * 2007-11-26 2011-01-25 Globalfoundries Inc. Mechanism to accelerate removal of store operations from a queue
US7882325B2 (en) * 2007-12-21 2011-02-01 Intel Corporation Method and apparatus for a double width load using a single width load port
US10229453B2 (en) 2008-01-11 2019-03-12 Ip Reservoir, Llc Method and system for low latency basket calculation
US7913067B2 (en) * 2008-02-20 2011-03-22 International Business Machines Corporation Method and system for overlapping execution of instructions through non-uniform execution pipelines in an in-order processor
US8374986B2 (en) * 2008-05-15 2013-02-12 Exegy Incorporated Method and system for accelerated stream processing
US8806505B1 (en) * 2008-06-30 2014-08-12 Bank Of America Corporation Service and project request processing within a business enterprise
EP2370946A4 (de) 2008-12-15 2012-05-30 Exegy Inc Verfahren und vorrichtung zur hochgeschwindigkeitsverarbeitung von finanzmarkttiefendaten
US8539397B2 (en) * 2009-06-11 2013-09-17 Advanced Micro Devices, Inc. Superscalar register-renaming for a stack-addressed architecture
US8150902B2 (en) * 2009-06-19 2012-04-03 Singular Computing Llc Processing with compact arithmetic processing element
US8423745B1 (en) 2009-11-16 2013-04-16 Convey Computer Systems and methods for mapping a neighborhood of data to general registers of a processing element
CA2820898C (en) 2010-12-09 2020-03-10 Exegy Incorporated Method and apparatus for managing orders in financial markets
US9740494B2 (en) 2011-04-29 2017-08-22 Arizona Board Of Regents For And On Behalf Of Arizona State University Low complexity out-of-order issue logic using static circuits
WO2013095533A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Fault-aware mapping for shared last level cache (llc)
US9990393B2 (en) 2012-03-27 2018-06-05 Ip Reservoir, Llc Intelligent feed switch
US10650452B2 (en) 2012-03-27 2020-05-12 Ip Reservoir, Llc Offload processing of data packets
US11436672B2 (en) 2012-03-27 2022-09-06 Exegy Incorporated Intelligent switch for processing financial market data
US10121196B2 (en) 2012-03-27 2018-11-06 Ip Reservoir, Llc Offload processing of data packets containing financial market data
US9128725B2 (en) 2012-05-04 2015-09-08 Apple Inc. Load-store dependency predictor content management
US9600289B2 (en) 2012-05-30 2017-03-21 Apple Inc. Load-store dependency predictor PC hashing
US10430190B2 (en) 2012-06-07 2019-10-01 Micron Technology, Inc. Systems and methods for selectively controlling multithreaded execution of executable code segments
US9672044B2 (en) * 2012-08-01 2017-06-06 Nxp Usa, Inc. Space efficient checkpoint facility and technique for processor with integrally indexed register mapping and free-list arrays
US9633093B2 (en) 2012-10-23 2017-04-25 Ip Reservoir, Llc Method and apparatus for accelerated format translation of data in a delimited data format
CA2887022C (en) 2012-10-23 2021-05-04 Ip Reservoir, Llc Method and apparatus for accelerated format translation of data in a delimited data format
US10102260B2 (en) 2012-10-23 2018-10-16 Ip Reservoir, Llc Method and apparatus for accelerated data translation using record layout detection
US9977596B2 (en) * 2012-12-27 2018-05-22 Dropbox, Inc. Predictive models of file access patterns by application and file type
US9336003B2 (en) * 2013-01-25 2016-05-10 Apple Inc. Multi-level dispatch for a superscalar processor
US10198265B2 (en) * 2013-03-15 2019-02-05 Intel Corporation Microprocessor for gating a load operation based on entries of a prediction table
US10467010B2 (en) 2013-03-15 2019-11-05 Intel Corporation Method and apparatus for nearest potential store tagging
US9535744B2 (en) * 2013-06-29 2017-01-03 Intel Corporation Method and apparatus for continued retirement during commit of a speculative region of code
US9367317B2 (en) * 2013-07-03 2016-06-14 Intel Corporation Loop streaming detector for standard and complex instruction types
US11768689B2 (en) 2013-08-08 2023-09-26 Movidius Limited Apparatus, systems, and methods for low power computational imaging
US10001993B2 (en) * 2013-08-08 2018-06-19 Linear Algebra Technologies Limited Variable-length instruction buffer management
US9983990B1 (en) * 2013-11-21 2018-05-29 Altera Corporation Configurable storage circuits with embedded processing and control circuitry
US10616333B2 (en) * 2014-04-09 2020-04-07 Stmicroelectronics S.R.L. System for the management of out-of-order traffic in an interconnect network and corresponding method and integrated circuit
WO2015164639A1 (en) 2014-04-23 2015-10-29 Ip Reservoir, Llc Method and apparatus for accelerated data translation
US9710268B2 (en) 2014-04-29 2017-07-18 Apple Inc. Reducing latency for pointer chasing loads
US9824058B2 (en) * 2014-11-14 2017-11-21 Cavium, Inc. Bypass FIFO for multiple virtual channels
US9658963B2 (en) * 2014-12-23 2017-05-23 Intel Corporation Speculative reads in buffered memory
US9858078B2 (en) 2015-06-02 2018-01-02 International Business Machines Corporation Speculative load data in byte-write capable register file and history buffer for a multi-slice microprocessor
US11275590B2 (en) * 2015-08-26 2022-03-15 Huawei Technologies Co., Ltd. Device and processing architecture for resolving execution pipeline dependencies without requiring no operation instructions in the instruction memory
US10942943B2 (en) 2015-10-29 2021-03-09 Ip Reservoir, Llc Dynamic field data translation to support high performance stream data processing
US9870039B2 (en) * 2015-12-15 2018-01-16 International Business Machines Corporation Reducing power consumption in a multi-slice computer processor
US10514925B1 (en) 2016-01-28 2019-12-24 Apple Inc. Load speculation recovery
US10437595B1 (en) 2016-03-15 2019-10-08 Apple Inc. Load/store dependency predictor optimization for replayed loads
US9825647B1 (en) * 2016-09-28 2017-11-21 Intel Corporation Method and apparatus for decompression acceleration in multi-cycle decoder based platforms
EP3560135A4 (de) 2016-12-22 2020-08-05 IP Reservoir, LLC Rohrleitungen zum hardware-beschleunigten maschinellen lernen
CN111108527B (zh) 2017-05-19 2023-06-30 莫维迪乌斯有限公司 用于当取回像素核时降低存储器延迟的方法、系统和设备
US11126663B2 (en) 2017-05-25 2021-09-21 Intel Corporation Method and apparatus for energy efficient decompression using ordered tokens
US11086625B2 (en) 2019-09-10 2021-08-10 Apple Inc. Compression assist instructions
CN111459549B (zh) * 2020-04-07 2022-11-01 上海兆芯集成电路有限公司 具有高度领先分支预测器的微处理器
US11645238B2 (en) 2021-06-01 2023-05-09 International Business Machines Corporation Notifying a cache file system of changes to files in a source file system served from the cache file system
US11650957B2 (en) * 2021-06-01 2023-05-16 International Business Machines Corporation Receiving at a cache node notification of changes to files in a source file system served from a cache file system at the cache node
US12182003B1 (en) * 2021-08-31 2024-12-31 Apple Inc. Hardware support for software event collection
CN114116533B (zh) * 2021-11-29 2023-03-10 海光信息技术股份有限公司 利用共享存储器存储数据的方法
US12105629B2 (en) 2022-07-25 2024-10-01 Samsung Electronics Co., Ltd. Adaptive cache indexing for a storage device
CN117348933B (zh) * 2023-12-05 2024-02-06 睿思芯科(深圳)技术有限公司 一种处理器及计算机系统
CN119149107B (zh) * 2024-09-02 2025-04-18 摩尔线程智能科技(北京)股份有限公司 指令控制电路及指令控制方法、处理器和芯片

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3781808A (en) * 1972-10-17 1973-12-25 Ibm Virtual memory system
AT354159B (de) * 1975-02-10 1979-12-27 Siemens Ag Assoziativspeicher mit getrennt assoziierbaren bereichen
US4161784A (en) * 1978-01-05 1979-07-17 Honeywell Information Systems, Inc. Microprogrammable floating point arithmetic unit capable of performing arithmetic operations on long and short operands
US4928223A (en) * 1982-10-06 1990-05-22 Fairchild Semiconductor Corporation Floating point microprocessor with directable two level microinstructions
US4713750A (en) * 1983-03-31 1987-12-15 Fairchild Camera & Instrument Corporation Microprocessor with compact mapped programmable logic array
US4807115A (en) * 1983-10-07 1989-02-21 Cornell Research Foundation, Inc. Instruction issuing mechanism for processors with multiple functional units
JPH0658631B2 (ja) * 1983-12-19 1994-08-03 株式会社日立製作所 デ−タ処理装置
US4992934A (en) * 1986-12-15 1991-02-12 United Technologies Corporation Reduced instruction set computing apparatus and methods
US4926322A (en) * 1987-08-03 1990-05-15 Compag Computer Corporation Software emulation of bank-switched memory using a virtual DOS monitor and paged memory management
US5222230A (en) * 1988-01-29 1993-06-22 Texas Instruments Incorporated Circuitry for transferring data from a data bus and temporary register into a plurality of input registers on clock edges
US5155817A (en) * 1988-04-01 1992-10-13 Kabushiki Kaisha Toshiba Microprocessor
US5056006A (en) * 1988-09-12 1991-10-08 General Electric Company Parallel processor with single program storage and sequencer and simultaneous instruction processing
US5067069A (en) * 1989-02-03 1991-11-19 Digital Equipment Corporation Control of multiple functional units with parallel operation in a microcoded execution unit
US5155816A (en) * 1989-02-10 1992-10-13 Intel Corporation Pipelined apparatus and method for controlled loading of floating point data in a microprocessor
US5155820A (en) * 1989-02-21 1992-10-13 Gibson Glenn A Instruction format with designations for operand lengths of byte, half word, word, or double word encoded in address bits
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
US4940908A (en) * 1989-04-27 1990-07-10 Advanced Micro Devices, Inc. Method and apparatus for reducing critical speed path delays
CA2016068C (en) * 1989-05-24 2000-04-04 Robert W. Horst Multiple instruction issue computer architecture
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
US5129067A (en) * 1989-06-06 1992-07-07 Advanced Micro Devices, Inc. Multiple instruction decoder for minimizing register port requirements
US5471593A (en) * 1989-12-11 1995-11-28 Branigin; Michael H. Computer processor with an efficient means of executing many instructions simultaneously
US5251306A (en) * 1990-01-16 1993-10-05 Advanced Micro Devices, Inc. Apparatus for controlling execution of a program in a computing device
US5185868A (en) * 1990-01-16 1993-02-09 Advanced Micro Devices, Inc. Apparatus having hierarchically arranged decoders concurrently decoding instructions and shifting instructions not ready for execution to vacant decoders higher in the hierarchy
US5226130A (en) * 1990-02-26 1993-07-06 Nexgen Microsystems Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
US5077692A (en) * 1990-03-05 1991-12-31 Advanced Micro Devices, Inc. Information storage device with batch select capability
US5237700A (en) * 1990-03-21 1993-08-17 Advanced Micro Devices, Inc. Exception handling processor for handling first and second level exceptions with reduced exception latency
US5128888A (en) * 1990-04-02 1992-07-07 Advanced Micro Devices, Inc. Arithmetic unit having multiple accumulators
US5206828A (en) * 1990-04-02 1993-04-27 Advanced Micro Devices, Inc. Special carry save adder for high speed iterative division
US5053631A (en) * 1990-04-02 1991-10-01 Advanced Micro Devices, Inc. Pipelined floating point processing unit
US5095458A (en) * 1990-04-02 1992-03-10 Advanced Micro Devices, Inc. Radix 4 carry lookahead tree and redundant cell therefor
US5058048A (en) * 1990-04-02 1991-10-15 Advanced Micro Devices, Inc. Normalizing pipelined floating point processing unit
US5128891A (en) * 1990-04-02 1992-07-07 Advanced Micro Devices, Inc. High speed divider with square root capability
US5157780A (en) * 1990-06-12 1992-10-20 Advanced Micro Devices, Inc. Master-slave checking system
US5222244A (en) * 1990-12-20 1993-06-22 Intel Corporation Method of modifying a microinstruction with operands specified by an instruction held in an alias register
US5247644A (en) * 1991-02-06 1993-09-21 Advanced Micro Devices, Inc. Processing system with improved sequential memory accessing
EP0498654B1 (de) * 1991-02-08 2000-05-10 Fujitsu Limited Cachespeicher zur Verarbeitung von Befehlsdaten und Datenprozessor mit demselben
KR100299691B1 (ko) * 1991-07-08 2001-11-22 구사마 사부로 확장가능알아이에스씨마이크로프로세서구조
US5345569A (en) * 1991-09-20 1994-09-06 Advanced Micro Devices, Inc. Apparatus and method for resolving dependencies among a plurality of instructions within a storage device
US5438668A (en) * 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
US5337415A (en) * 1992-12-04 1994-08-09 Hewlett-Packard Company Predecoding instructions for supercalar dependency indicating simultaneous execution for increased operating frequency
US5467473A (en) * 1993-01-08 1995-11-14 International Business Machines Corporation Out of order instruction load and store comparison
US5465373A (en) * 1993-01-08 1995-11-07 International Business Machines Corporation Method and system for single cycle dispatch of multiple instructions in a superscalar processor system
US5454117A (en) * 1993-08-25 1995-09-26 Nexgen, Inc. Configurable branch prediction for a processor performing speculative execution
IE80854B1 (en) * 1993-08-26 1999-04-07 Intel Corp Processor ordering consistency for a processor performing out-of-order instruction execution
US5500943A (en) * 1993-11-02 1996-03-19 Motorola, Inc. Data processor with rename buffer and FIFO buffer for in-order instruction completion

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE112005002432B4 (de) * 2004-09-30 2009-05-14 Intel Corporation, Santa Clara Verfahren und Vorrichtung zum Bereitstellen eines Quellenoperanden für eine Instruktion in einem Prozessor

Also Published As

Publication number Publication date
US5655097A (en) 1997-08-05
EP0651321B1 (de) 2001-11-14
JPH07182160A (ja) 1995-07-21
US5751981A (en) 1998-05-12
EP0651321A1 (de) 1995-05-03
US5867682A (en) 1999-02-02
JP3670039B2 (ja) 2005-07-13
US5655098A (en) 1997-08-05
US5867683A (en) 1999-02-02
DE69429061D1 (de) 2001-12-20
US5651125A (en) 1997-07-22
US5664136A (en) 1997-09-02

Similar Documents

Publication Publication Date Title
DE69429061T2 (de) Superskalarmikroprozessoren
DE69508303T2 (de) Superskalarmikroprozessor mit einer Vorrichtung zur Namenänderung und Beförderung einer Operandenflagge und Verfahren zur Bearbeitung von RISC-ähnliche Funktionen in diesem Superskalarmikroprozessor
DE69111707T2 (de) Fehlerübergangsmodus für eine Mehrrechneranordnung.
DE69230554T2 (de) Risc-mikroprozessorarchitektur mit schnellem unterbrechungs- und ausnahmemodus
DE69127726T2 (de) Kombinierte Warteschlange für Entwertungen und Rücklaufdaten in einem Multiprozessorsystem
DE69233493T2 (de) RISC-Prozessor mit erweiterbarer Architektur
DE69518362T2 (de) Wiedersynchronisierung eines Superskalarprozessors
DE69232113T2 (de) Hochleistungsarchitektur für risc-mikroprozessor
DE69130138T2 (de) Sprungvorhersageeinheit für hochleistungsfähigen Prozessor
DE69127936T2 (de) Busprotokoll für Prozessor mit write-back cache
DE69130519T2 (de) Hochleistungsfähiger Multiprozessor mit Gleitkommaeinheit und Verfahren zu seinem Betrieb
DE69130495T2 (de) Umwandlung der Befehle von internen Prozessorregistern in I/O-Adressraum
DE69504135T2 (de) Einrichtung zur Aktualisierung von Programmzählern
DE60036016T2 (de) Schnell multithreading für eng gekoppelte multiprozessoren
DE69130588T2 (de) Cache-Speicher von partiell decodierten Befehlen und Verfahren hierfür
DE69612991T2 (de) System zur bearbeitung von selbstmodifizierendem kode
Palacharla et al. Complexity-effective superscalar processors
DE69901910T2 (de) Verfahren und gerät zur rechnung von indirekten verzweigungszieladressen
DE69908193T2 (de) Ausführung von speicher- und ladeoperationen mittels einer linkdatei
DE69802209T2 (de) An bytebereiche innerhalb eines befehlscaches gebundene verzweigungsselektoren zur schnellen identifizierung von verzweigungsprädiktoren
DE69427672T2 (de) Befehlscachespeicher für Befehle mit variabler Byteslänge
DE69607760T2 (de) Ungeordnete lade-/speicher-ausführungssteuerung
DE69904479T2 (de) Registerumbenennung wobei übertragungsinstruktionen mittels umbenennungsschildernzeichen realisiert werden
DE60029619T2 (de) Verfahren, vorrichtung, medium und programm zur aufnahme und zum verlassen von mehreren fäden in einem vielfadenprozessor
DE69433339T2 (de) Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: GLOBALFOUNDRIES INC. MAPLES CORPORATE SERVICES, KY