DE69429061T2 - Superskalarmikroprozessoren - Google Patents
SuperskalarmikroprozessorenInfo
- 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
Links
- 239000000872 buffer Substances 0.000 claims description 239
- 238000007667 floating Methods 0.000 claims description 116
- 230000015654 memory Effects 0.000 claims description 78
- 238000012545 processing Methods 0.000 claims description 61
- 238000000034 method Methods 0.000 claims description 27
- 230000008569 process Effects 0.000 claims description 16
- 238000003860 storage Methods 0.000 claims description 14
- 238000012546 transfer Methods 0.000 claims description 12
- 238000004891 communication Methods 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 3
- 230000003213 activating effect Effects 0.000 claims description 2
- 206010038933 Retinopathy of prematurity Diseases 0.000 description 125
- 238000010586 diagram Methods 0.000 description 58
- 230000006870 function Effects 0.000 description 17
- 239000013598 vector Substances 0.000 description 15
- 238000003491 array Methods 0.000 description 14
- 238000013519 translation Methods 0.000 description 14
- 230000014616 translation Effects 0.000 description 14
- 230000009471 action Effects 0.000 description 8
- 238000013459 approach Methods 0.000 description 8
- 238000013461 design Methods 0.000 description 6
- 230000000694 effects Effects 0.000 description 6
- 230000009977 dual effect Effects 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 230000008520 organization Effects 0.000 description 5
- 230000002829 reductive effect Effects 0.000 description 5
- 230000003111 delayed effect Effects 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 238000012544 monitoring process Methods 0.000 description 4
- 238000011084 recovery Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000000903 blocking effect Effects 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 101100179596 Caenorhabditis elegans ins-3 gene Proteins 0.000 description 2
- 101150089655 Ins2 gene Proteins 0.000 description 2
- 101100397598 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) JNM1 gene Proteins 0.000 description 2
- 101100397001 Xenopus laevis ins-a gene Proteins 0.000 description 2
- 101100072652 Xenopus laevis ins-b gene Proteins 0.000 description 2
- 230000004913 activation Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 101150032953 ins1 gene Proteins 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000005070 sampling Methods 0.000 description 2
- HRANPRDGABOKNQ-ORGXEYTDSA-N (1r,3r,3as,3br,7ar,8as,8bs,8cs,10as)-1-acetyl-5-chloro-3-hydroxy-8b,10a-dimethyl-7-oxo-1,2,3,3a,3b,7,7a,8,8a,8b,8c,9,10,10a-tetradecahydrocyclopenta[a]cyclopropa[g]phenanthren-1-yl acetate Chemical compound C1=C(Cl)C2=CC(=O)[C@@H]3C[C@@H]3[C@]2(C)[C@@H]2[C@@H]1[C@@H]1[C@H](O)C[C@@](C(C)=O)(OC(=O)C)[C@@]1(C)CC2 HRANPRDGABOKNQ-ORGXEYTDSA-N 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000005465 channeling Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000001693 membrane extraction with a sorbent interface Methods 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30094—Condition code generation, e.g. Carry, Zero flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/3822—Parallel decoding, e.g. parallel decode units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent 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.
- 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).
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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).
- 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.
- 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.
- 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.
- 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.
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)
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)
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)
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 |
-
1994
- 1994-09-20 DE DE69429061T patent/DE69429061T2/de not_active Expired - Lifetime
- 1994-09-20 EP EP94306869A patent/EP0651321B1/de not_active Expired - Lifetime
- 1994-10-27 JP JP26331794A patent/JP3670039B2/ja not_active Expired - Fee Related
-
1995
- 1995-07-10 US US08/501,243 patent/US5651125A/en not_active Expired - Fee Related
-
1996
- 1996-02-09 US US08/599,697 patent/US5655098A/en not_active Expired - Fee Related
- 1996-02-09 US US08/599,696 patent/US5867682A/en not_active Expired - Fee Related
- 1996-02-09 US US08/599,699 patent/US5751981A/en not_active Expired - Fee Related
- 1996-02-09 US US08/599,700 patent/US5664136A/en not_active Expired - Lifetime
- 1996-02-09 US US08/599,698 patent/US5655097A/en not_active Expired - Fee Related
-
1997
- 1997-04-30 US US08/845,978 patent/US5867683A/en not_active Expired - Lifetime
Cited By (1)
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 |