DE69901910T2 - Verfahren und gerät zur rechnung von indirekten verzweigungszieladressen - Google Patents
Verfahren und gerät zur rechnung von indirekten verzweigungszieladressenInfo
- Publication number
- DE69901910T2 DE69901910T2 DE69901910T DE69901910T DE69901910T2 DE 69901910 T2 DE69901910 T2 DE 69901910T2 DE 69901910 T DE69901910 T DE 69901910T DE 69901910 T DE69901910 T DE 69901910T DE 69901910 T2 DE69901910 T2 DE 69901910T2
- Authority
- DE
- Germany
- Prior art keywords
- branch
- instruction
- address
- fetch
- cache
- 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 - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 27
- 238000004364 calculation method Methods 0.000 claims description 24
- 230000004044 response Effects 0.000 claims description 6
- 230000008569 process Effects 0.000 claims description 3
- 239000000872 buffer Substances 0.000 description 37
- 238000010586 diagram Methods 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 6
- 238000013519 translation Methods 0.000 description 6
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000007667 floating Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30054—Unconditional branch 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/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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Description
- Die vorliegende Erfindung bezieht sich auf das Speichern von Abzweig-Target- Adressen in einem Mikroprozessor und insbesondere auf Verfahren zum Zwischenspeichern von Indirekt-Abzweig-Target-Adressen.
- Die Proceedings of International Conference on Computer Design ICC VLSI in Computers and Processors, Austin, 7. Oktober 1996, Seiten 208 bis 216, Sakamoto M u. a. mildem Titel "Microarchitecture Support for Reducing Branch Penalty in a Superscalar Processor" offenbart einen Mikroprozessor, der ein dynamisches Abzweig-Vorhersage-Schema implementiert und eine Abzweig- Historie-Tabelle aufweist. Ein Abzweig-Target-Puffer unterhält das Ergebnis der vorher ausgeführten genommenen Sprung-Instruktionen. Sprunginstruktionen umfassen unbedingte Sprung-Instruktionen, bedingte Abzweiginstruktionen und indirekte Sprung-Instruktionen.
- Computer Architecture News, Band 25, Nr. 2, 1. Mai 1997, Seiten 274 bis 283, Chang P-Y u. a. mit dem Titel "Target Prediction for Indirect Jumps" offenbart eine Superskalar-Prozessor-Architektur, die einen Vorhersage-Mechanismus mit einem Target-Cache-Speicher zum Vorhersagen von indirekten Sprungtargets verwendet.
- Die WO 98/22873 offenbarte einen Abzweig-Vorhersage-Mechanismus, der Abzweig-Selektoren verwendet, um eine Abzweig-Vorhersage auszuwählen. Abzweig-Selektoren für die Abzweigvorhersage: Sequentiell, Rücksprungstapel, Abzweig-Vorhersage 1 und Abzweig-Vorhersage 2 werden offenbart.
- Moderne Mikroprozessor-Entwickler versuchen kontinuierlich die Leistung ihrer Produkte zu verbessern. Ein Verfahren, um die Leistung eines Mikroprozessors zu verbessern, besteht darin, die Taktfrequenz zu erhöhen, mit der er arbeitet. Wenn die Taktfrequenzen ansteigen, weist jedoch jede Funktionseinheit innerhalb des Mikroprozessors weniger Zeit zur Durchführung ihres zugewiesenen Tasks auf. Somit wurden andere Verfahren benutzt, um die Leistung bei einer vorgegebenen Taktzyklus-Frequenz weiter zu erhöhen. Die parallele Ausführung ist ein derartiges Verfahren. Die parallele Ausführung beinhaltet ein Ausführen von mehr als einer Instruktion während jedes Taktzyklus.
- Um eine parallele Ausführung zu implementieren, verwenden viele Mikroprozessoren parallele Funktionseinheiten, die jeweils konfiguriert sind, um unabhängig und parallel zu arbeiten.
- Ein weiteres Verfahren zum Erhöhen der Leistung eines Mikroprozessors bei einem vorgegebenen Taktzyklus ist eine Außerhalb-der-Reihenfolge-Ausführung. Die meisten Programme hängen davon ab, dass ihre Instruktionen in einer bestimmten Reihenfolge ausgeführt werden. Diese Reihenfolge wird als "Programm-Reihenfolge" bezeichnet. Bestimmte Instruktionen innerhalb des Programms können jedoch außerhalb der Programm-Reihenfolge ausgeführt werden, solange wie die gewünschte Funktionalität noch erreicht wird. Instruktionen, die außerhalb der Reihenfolge ausgeführt werden können, sind diejenigen, die nicht von den Instruktionen um sie herum "abhängen". Mikroprozessoren, die eine Außerhalb-der-Reihenfolge-Ausführung implementieren, sind imstande, zu bestimmen, welche Instruktionen nicht von anderen Instruktionen abhängen und daher außerhalb der Reihenfolge ausgeführt werden können.
- Es gibt verschiedene mögliche Nachteile für das Ausführen von Instruktionen außerhalb der Reihenfolge. Ein Nachteil ist insbesondere die Verwendung von Abzweig-Instruktionen. Beispiele von Abzweig-Instruktionen umfassen bedingte Sprung-Instruktionen (Jcc), unbedingte Sprung-Instruktionen (JMP), Rücksprung-Instruktionen (RET) und Unterprogramm-Instruktionen (CALL). Diese Instruktionen machen die Ausführung außerhalb der Reihenfolge besonders schwierig, da der Mikroprozessor nicht imstande sein kann, zu bestimmen, ob Instruktionen nach der Abzweig-Instruktion ausgeführt werden sollten oder nicht.
- Ein anderes verwendete Verfahren, um die Leistung eines Mikroprozessors bei einem vorgegebenen Taktzyklus zu erhöhen, ist Pipelining. Pipelining beinhaltet das Aufteilen der Tasks, die der Mikroprozessor beenden muss, um eine Instruktion auszuführen. Die Tasks werden in eine Anzahl von Stufen aufgeteilt, die eine Instruktions-Verarbeitungs-"Pipeline" bilden. Diese Stufen sind typischerweise serieller Art. Beispielsweise kann die erste Stufe zum Abrufen einer in einem Instruktions-Cache-Speicher gespeicherten Instruktion, während die zweite Stufe zum Ausrichten der Instruktion für ihre Übertragung an Dekodier-Einheiten zum Dekodieren oder an Funktions-Einheiten zur Ausführung sein kann. Pipelines ermöglichen, dass lange Ströme von Instruktionen in weniger Taktzyklen ausgeführt werden. Die Vorteile eines Pipeline- Mikroprozessors rühren von seiner Fähigkeit her, mehr als eine Instruktion gleichzeitig zu verarbeiten. Beispielsweise kann eine erste Instruktion zur gleichen Zeit dekodiert werden, wenn eine zweite Instruktion aus dem Instruktions-Cache-Speicher abgerufen wird.
- Wie bei der Außerhalb-der-Reihenfolge-Ausführung können jedoch Pipeline- Mikroprozessoren Leistungs-Rückschläge als das Ergebnis von Abzweiginstruktionen erleiden. Abzweig-Instruktionen können verursachen, dass die Pipeline "blockiert", da die Anfangsstufen der Pipeline nicht imstande sind, zu bestimmen, welche Instruktionen abzurufen sind, nachdem die Abzweiginstruktion ausgeführt wurde. Beispielsweise ist eine bedingte Abzweig-Instruktion entweder "genommen" oder "nicht genommen". Wenn die Abzweig- Instruktion nicht genommen ist, dann wird die der Abzweig-Instruktion in der Programm-Reihenfolge direkt folgende Instruktion ausgeführt. Wenn alternativ die Abzweig-Instruktion genommen ist, dann wird eine unterschiedliche Instruktion bei einem Offset relativ zu der Abzweig-Target-Adresse ausgeführt. In Pipeline-Mikroprozessoren ist es für Anfangs- oder Abrufstufen der Pipeline schwierig zu bestimmen, ob die "genommene" oder "nicht genommene" Target-Instruktion abzurufen ist, bis die Abzweig-Instruktion die Ausführung beendet hat. Somit kann die Mikroprozessor-Pipeline blockieren oder "Blasen" bilden (d. h. inaktive Taktzyklen, die sich durch die Pipeline ausbreiten), während die Anfangsstufen auf die Ergebnisse der Abzweig-Instruktion warten.
- Um Blockierungen oder Blasen vom Bilden in der Pipeline zu verhindern, implementieren viele Mikroprozessoren ein Abzweig-Vorhersage-Schema. Die Abzweig-Vorhersage beinhaltet eine Vorhersage, ob jede Abzweig-Instruktion genommen oder nicht genommen ist, bevor die Abzweig-Instruktion tatsächlich die Ausführung beendet. Obwohl eine Anzahl unterschiedlicher Algorithmen verwendet werden können, stützen sich die meisten auf das Speichern der genommen/nicht genommen Historie der bestimmten Abzweiginstruktion. Wenn beispielsweise eine Abzweig-Instruktion ausgeführt und genommen ist, wird die Abzweig-Vorhersage-Hardware diese Information speichern, so dass das nächste Mal, wenn die Abzweig-Instruktion abgerufen wird, die Pipeline automatisch annehmen wird, dass die Instruktion basierend auf ihrer vorherigen Leistung genommen ist.
- Obwohl das Speichern von Abzweig-Vorhersage-Information die Wahrscheinlichkeit eines Blockierens oder Blasenbildens verringert, weist es ebenfalls Nachteile auf. Ein Nachteil ist die komplexe Hardware, die erforderlich ist, um die Abzweig-Historie-Information zu unterhalten und zu aktualisieren. Ein zweiter Nachteil ist der Platz, der erforderlich ist, um die Abzweig-Historie- Information zu speichern. Chip-Platz innerhalb der Mikroprozessoren ist eine relativ knappe Ressource, womit ein Verwenden großer Mengen von Platz, um Abzweig-Vorhersagen zu speichern, nachteilhaft: ist. Wenn Instruktions-Cache- Speicher in der Größe wachsen, können mehr Abzweig-Instruktionen darin gespeichert werden. Dies erfordert seinerseits mehr Speicherplatz für Abzweig-Historie-Vorhersage-Informationen. Ferner tendiert moderne Software dazu/eine hohe Konzentration von Abzweig-Instruktionen aufzuweisen (z. B. eine alle vier Instruktionen). Diese hohe Konzentration gekoppelt mit der Unfähigkeit, genau zu wissen, wie viele Abzweige in dem Instruktions-Cache- Speicher gespeichert sind, führt typischerweise dazu, dass große Mengen von Chip-Platz dem Speichern von Abzweig-Historie-Information gewidmet ist.
- Aus diesen Gründen wird ein Verfahren zum wirksamen Speichern von Abzweig-Vorhersage- und Historie-Information gewünscht. Insbesondere ist ein Verfahren zum Verringern der Menge an Speicherplatz, die für Abzweig- Historie- und Vorhersage-Information benötigt wird, besonders wünschenswert.
- Die oben beschriebenen Probleme können teilweise durch einen Mikroprozessor und eine Abzweig-Vorhersage-Einheit und in Übereinstimmung mit der vorliegenden Erfindung gelöst werden. Bei einer Ausführungsform kann ein Mikroprozessor, der konfiguriert ist, um Abzweig-Vorhersage-Information wirksam zu speichern, einen Instruktions-Cache-Speicher und eine Abzweig- Vorhersage-Einheit umfassen. Die Abzweig-Vorhersage-Einheit kann mit dem Instruktions-Cache-Speicher gekoppelt sein und umfassen: einen Indirekt- Abzweig-Target-Cache-Speicher, einen Direkt-Abzweig-Addierer und ein Abzweig-Selektor-Array. Das Indirekt-Abzweig-Target-Array kann konfiguriert sein, um vorhergesagte Abzweig-Target-Adressen für Indirekt-Abzweig- Instruktionen zu speichern, während der Direkt-Abzweig-Addierer konfiguriert sein kann, um die Abzweig-Target-Adressen für Direkt-Abzweig-Instruktionen zu berechnen. Das Abzweig-Selektor-Array kann mit dem Indirekt-Abzweig- Target-Cache-Speicher gekoppelt und konfiguriert sein, um eine Mehrzahl von Selektor-Bits zu speichern. Bei einer Ausführungsform können die Selektor- Bits in den Instruktions-Cache-Speicher gespeicherten bestimmten Instrukti ons-Bytes entsprechen. Die Selektor-Bits geben eine Quelle für die den bestimmten Instruktions-Bytes zugeordnete nächste Abruf-Adresse an.
- Bei einer weiteren Ausführungsform kann die Abzweig-Vorhersage-Einheit ferner einen Multiplexer umfassen, der konfiguriert ist, um die vorhergesagte nächste Abruf-Adresse aus entweder dem Direkt-Abzweig-Addierer, dem Indirekt-Abzweig-Target-Cache-Speicher oder einer weiteren Quelle auszuwählen. Der Multiplexer kann konfiguriert sein, um seine Auswahl basierend auf dem Wert der Selektor-Bits durchzuführen, die der aktuellen Abruf-Adresse entsprechen. Die Abzweig-Vorhersage-Einheit kann ferner einen Sequentiell- Adress-Addierer umfassen, der mit dem Multiplexer gekoppelt ist. Der Sequentiell-Adress-Addierer kann konfiguriert sein, um eine vorhergesagte nächste Sequentiell-Abruf-Adresse durch Hinzuaddieren eines Teils der aktuellen Abruf-Adresse und einer Konstante, die dem Abruf-Block oder der Cache-Line- Größe des Instruktions-Cache-Speichers entspricht, zu erzeugen. Ein Rückkehr-Stapel kann ebenfalls benutzt werden, um die Abruf-Adresse zu speichern, die den den Abruf-Instruktionen unmittelbar folgenden Instruktionen entspricht.
- Ein Verfahren zum Speichern vorhergesagter nächster Abruf-Adressen in einem Mikroprozessor wird ebenfalls betrachtet. Bei einer Ausführungsform kann das Verfahren ein Speichern vorhergesagter Abzweig-Target-Adressen für Indirekt-Abzweig-Instruktionen in einem Indirekt-Abzweig-Target-Cache- Speicher umfassen. Außerdem werden Selektor-Bits, die den bestimmten Instruktions-Bytes entsprechen, in einem Abzweig-Selektor-Array gespeichert. Für direkte Abzweig-Instruktionen werden die vorhergesagten direkten Abzweig-Target-Adressen "während des Laufs" berechnet. Sobald die vorhergesagte Indirekt-Abzweig-Adresse nachgeschlagen und die vorhergesagte Direkt-Abzweig-Adresse berechnet wurde, wird die vorhergesagte nächste Abruf- Adresse basierend auf den Selektor-Bits ausgewählt.
- Bei einer Ausführungsform werden Vordekodier-Bits berechnet und zusammen mit den Instruktions-Bytes gespeichert. Die Vordekodier-Bits können verwen det werden, um die vorgesagten Direkt-Abzweig-Target-Adressen zu berechnen, die berechnet werden können durch: Bestimmen eines ersten Offsets von der aktuellen Abruf-Adresse zu der ersten Direkt-Abzweig-Instruktion, die vorgesagt genommen ist; Erfassen eines zweiten Offsets, der als unmittelbarer Datenwert innerhalb der Direkt-Abzweig-Instruktion gespeichert wird; und dann Hinzuaddieren der aktuellen Abruf-Adresse, des ersten Offsets und des zweiten Offsets.
- Bei einer weiteren Ausführungsform kann eine vorhergesagte sequentielle Adresse ebenfalls durch Addieren eines Teils der aktuellen Abruf-Adresse mit einer Konstanten berechnet werden, die die Cache-Line-Größe oder die Abruf- Block-Größe des Instruktions-Cache-Speichers darstellt.
- Ein Computersystem, das konfiguriert ist, um Abzweig-Vorhersageinformation wirksam zu speichern, wird ebenfalls betrachtet. Bei einer Ausführungsform umfasst das Computersystem einen Mikroprozessor, wie es oben beschrieben ist, und eine Busbrücke. Die Busbrücke kann mit dem Mikroprozessor über einen Hochgeschwindigkeits-CPU-Bus gekoppelt sein. Peripherie- Geräte, wie beispielsweise ein Modem, kann mit dem Mikroprozessor über die Busbrücke gekoppelt sein. Bei einer weiteren Ausführungsform kann das Computersystem einen zweiten Mikroprozessor umfassen, der mit dem ersten über den CPU-Bus gekoppelt ist.
- Weitere Aufgaben und Vorteile der Erfindung werden beim Lesen der folgenden ausführlichen Beschreibung und mit Bezug auf die beigefügten Zeichnungen offensichtlich, in denen zeigen:
- Fig. 1 eine Darstellung einer Ausführungsform eines Mikroprozessors;
- Fig. 2 eine Darstellung einer Ausführungsform der Abzweig-Vorhersage- Einheit von dem Mikroprozessor von Fig. 1;
- Fig. 3 ein Diagramm, das mehr Einzelheiten einer Ausführungsform der Abzweig-Vorhersage-Einheit von Fig. 2 darstellt;
- Fig. 4 ein Blockdiagramm, das zusätzliche Einzelheiten einer Ausführungsform der Abzweig-Vorhersage-Einheit von Fig. 2 darstellt;
- Fig. 5 ein Blockdiagramm, das eine weitere Ausführungsform der Abzweig- Vorhersage-Einheit von Fig. 2 darstellt;
- Fig. 6 ein Ablaufdiagramm, das eine Ausführungsform eines Verfahrens zum Speichern vorhergesagter nächster Abrufadressen in einem Mikroprozessor darstellt; und
- Fig. 7 ein Blockdiagramm einer Ausführungsform eines Computersystems, das ausgestaltet ist, um eine Ausführungsform des Mikroprozessors von Fig. 1 zu verwenden.
- Obwohl die Erfindung für verschiedene Modifikationen und alternative Formen empfänglich ist, werden spezifische Ausführungsformen derselben beispielhaft in den Zeichnungen gezeigt und hier ausführlich beschrieben. Es sollte jedoch offensichtlich sein, dass die Zeichnungen und die ausführliche Beschreibung dazu nicht beabsichtigt sind, die Erfindung auf die besondere offenbarte Form zu beschränken, sondern die Erfindung hat im Gegenteil alle Modifikationen, Äquivalente und Alternativen abzudecken, die innerhalb des Geistes und Schutzumfangs der vorliegenden Erfindung fallen, wie es durch die beigefügten Ansprüchen definiert ist.
- In Fig. 1 ist ein Blockdiagramm einer Ausführungsform eines beispielhaften Mikroprozessors 10 gezeigt. Der Mikroprozessor 10 umfasst eine Vorabruf/Vordekodiereinheit 12, eine Abzweig-Vorhersage-Einheit 14, einen Instruktionscache-Speicher 16, eine Instruktions-Ausrichteinheit 18, eine Mehrzahl von Dekodiereinheiten 20A-20C, eine Mehrzahl von Reservierungsstationen 22A- 22C, eine Mehrzahl von Funktionseinheiten 24A-24C, eine Lade/Speicher- Einheit 26, einen Daten-Cache-Speicher 28, eine Registerdatei 30, einen Umordnungspuffer 32 und eine MROM-Einheit 34. Auf Elemente, auf die hier mit einer bestimmten Bezugsziffer gefolgt von einem Buchstaben Bezug genommen wird, kann zusammen alleine durch die Bezugsziffer Bezug genommen werden. Beispielsweise können die Reservierungsstationen 22A-22C zusammen als Reservierungsstationen 22 bezeichnet werden.
- Die Vorabruf/Vordekodier-Einheit 12 ist gekoppelt, um Instruktionen aus einem Hauptspeicheruntersystem (nicht gezeigt) zu empfangen, und ist ferner mit dem Instruktions-Cache-Speicher 16 und der Abzweig-Vorhersage-Einheit 14 gekoppelt. Auf ähnliche Weise ist die Abzweig-Vörhersage-Einheit 14 mit dem Instruktions-Cache-Speicher 16 gekoppelt. Die Abzweig-Vorhersage- Einheit 14 ist ebenfalls mit der Instruktions-Ausrichteinheit 18 und den Funktionseinheiten 24A-C gekoppelt. Der Instruktions-Cache-Speicher 16 ist ferner mit der MROM-Einheit 34 und der Instruktions-Ausrichteinheit 18 gekoppelt. Die Instruktions-Ausrichteinheit 18 ist ihrerseits mit der Lade/Speicher-Einheit 26 und mit jeweiligen Dekodiereinheiten 20A-20C gekoppelt. Jeweilige Dekodiereinheiten 20A-20C sind mit Reservierungsstationen 22A-22C gekoppelt, die ferner mit jeweiligen Funktionseinheiten 24A-24C gekoppelt sind. Außerdem sind die Instruktions-Ausrichteinheit 18 und die Reservierungsstationen 22 mit der Registerdatei 30 und dem Umordnungspuffer 32 gekoppelt. Die Funktionseinheiten 24 sind ebenfalls mit der Lade/Speicher-Einheit 26, der Registerdatei 30 und dem Umordnungspuffer 32 gekoppelt. Der Daten-Cache- Speicher 28 ist mit der Lade/Speicher-Einheit 26 und dem Hauptspeicherun tersystem gekoppelt. Schließlich ist die MROM-Einheit 34 mit der Instruktions- Ausrichteinheit 18 gekoppelt.
- Instruktionen werden aus dem Hauptspeicher durch die Vorabruf/Vordekodier- Einheit 12 vorabgerufen. Die Vorabruf/Vordekodier-Einheit vordekodiert die Instruktionen variabler Länge in Instruktionen fester Länge, die dann in dem Instruktions-Cache-Speicher 16 gespeichert werden. Instruktionen können, bevor sie tatsächlich angefordert werden, aus dem Instruktions-Cache- Speicher 16 in Übereinstimmung mit einem Vorabrufschema vorabgerufen werden. Eine Vielfalt von Vorabrufschemata kann von der Vorabruf/Vordekodier-Einheit 12 benutzt werden.
- Der Mikroprozessor 10 kann die Abzweig-Vorhersage benutzen, um Instruktionen nach den bedingten Abzweig-Instruktionen spekulativ abzurufen. Die Abzweig-Vorhersage-Einheit 14 ist enthalten, um Abzweig-Vorhersagevorgänge durchzuführen. Die Vorabruf/Vordekodier-Einheit 12 bestimmt anfängliche Abzweig-Targets, wenn eine bestimmte Line vordekodiert wird. Nachfolgende Aktualisierungen an den Abzweig-Targets, die einer Cache-Line entsprechen, können auf Grund der Ausführung von Instruktionen innerhalb der Cache-Line auftreten. Der Instruktions-Cache-Speicher 16 liefert eine Meldung der abgerufenen Instruktions-Adresse an die Abzweig-Vorhersage-Einheit 14. Dies ermöglicht der Abzweig-Vorhersage-Einheit 14 zu bestimmen, welche Abzweig- Target-Adressen beim Bilden einer Abzweig-Vorhersage auszuwählen sind. Die Instruktions-Ausrichteinheit 18 und die Funktionseinheiten 24 liefern aktualisierte Information an die Abzweig-Vorhersage-Einheit 14. Die Instruktions- Ausrichteinheit 18 kann konfiguriert sein, um Abzweig-Instruktionen zu erfassen, die nicht von der Abzweig-Vorhersage-Einheit 14 vorhergesagt wurden. Funktionseinheiten 24 führen die Abzweig-Instruktionen aus und bestimmen, ob die vorhergesagte Abzweig-Richtung nicht richtig ist. Die Abzweig-Richtung kann "genommen" sein, wobei in diesem Fall nachfolgende Instruktionen aus der Target-Adresse der Abzweig-Instruktion abgerufen werden. Umgekehrt kann die Abzweigrichtung "nicht genommen" sein, wobei in diesem Fall nachfolgende Instruktionen aus Speicherplätzen abgerufen werden, die der Ab zweig-Instruktion nachfolgen. Wenn eine fehlvorhergesagte Abzweig-Instruktion erfasst wird, werden die dem fehlvorhergesagte Abzweig nachfolgenden Instruktionen von den verschiedenen Einheiten des Mikroprozessors 10 verworfen. Eine Vielfalt geeigneter Abzweig-Vorhersage-Algorithmen können von der Abzweig-Vorhersage-Einheit 14 benutzt werden. Bevor mehr Einzelheiten der Abzweig-Vorhersage-Einheit und ihrer Wechselwirkung mit dem Instruktions-Cache-Speicher 16 beschrieben werden, werden allgemeine Aspekte und mögliche Implementierungen des beispielhaften Mikroprozessors 10 beschrieben.
- Der Instruktions-Cache-Speicher 16 ist ein Hochgeschwindigkeits-Cache- Speicher, der vorgesehen ist/um von der Vorabruf/Vordekodier-Einheit 12 empfangene Instruktionen zu speichern. Gespeicherte Instruktionen werden dann aus dem Instruktions-Cache-Speicher 16 abgerufen und an die Instruktions-Ausrichteinheit 18 weitergeleitet. Bei einer Ausführungsform kann der Instruktions-Cache-Speicher 16 als teilassoziative Struktur konfiguriert sein. Der Instruktions-Cache-Speicher 16 kann zusätzlich ein Wegevorhersageschema benutzen, um Zugriffszeiten zu beschleunigen. Beispielsweise kann, anstatt auf Tags zuzugreifen, die jede Line von Instruktionen kennzeichnen, und die Tags mit der Abruf-Adresse zu vergleichen, um einen Weg auszuwählen, der Instruktions-Cache-Speicher 16 den Weg vorhersagen, auf den zugegriffen wird. Auf diese Art und Weise wird der Weg vor dem Zugriff auf das Array spekulativ ausgewählt. Unter Verwendung der Wegevorhersage kann die Zugriffszeit des Instruktions-Cache-Speichers 16 einem direkt abgebildeten Cache-Speicher ähnlich sein. Nachdem die Instruktions-Bytes gelesen wurden, wird ein Tag-Vergleich zur Überprüfung durchgeführt. Wenn die Wegevorhersage nicht richtig ist, werden die richtigen Instruktionen abgerufen und die nicht richtigen Instruktionen (die weiter unten an der Verarbeitungs-Pipeline sind) verworfen. Es sei bemerkt, dass der Instruktions-Cache-Speicher 16 als eine vollassoziative/teilassoziative oder direkt-abgebildete Konfiguration implementiert sein kann.
- Die MROM-Einheit 34 ist ein Nur-Lese-Speicher, der konfiguriert ist, um Folgen von "Fast-Path"-Instruktionen zuspeichern. Fast-Path-Instruktionen sind Instruktionen, die von den Dekodierern 20A-C und den Funktionseinheiten 24A- C dekodiert und ausgeführt werden können. Im Gegensatz dazu sind "MROM- Instruktionen" Instruktionen, die für die direkte Dekodierung oder Ausführung durch die Dekodierer 20A-20C und die Funktionseinheiten 24A-C zu komplex sind. Wenn der Instruktions-Cache-Speicher 16 eine MROM-Instruktion ausgibt, antwortet die MROM-Einheit 34 durch Ausgeben einer Folge von Fast- Path-Instruktionen. Insbesondere parst und übersetzt die MROM-Einheit 34 die MROM-Instruktion in eine Untermenge von definierten Fast-Path-Instruktionen, um den gewünschten Vorgang zu veranlassen. Die MROM-Einheit 34 sendet die Untermenge von Fast-Path-Instruktionen an die Dekodier-Einheiten 20A-C.
- Sobald die Instruktions-Bytes von dem Instruktions-Cache-Speicher 16 abgerufen sind, werden sie an die Instruktions-Ausrichteinheit 18 übertragen. Die Instruktions-Ausrichteinheit 18 leitet die Instruktionen an eine der Dekodier- Einheiten 20A-20C. Register-Operanden-Information wird ebenfalls erfasst, und an die Registerdatei 30 und den Umordnungspuffer 32 geleitet. Außerdem sendet, wenn es die Instruktionen erfordern, dass einer oder mehrere Speichervorgänge durchgeführt werden, die Instruktions-Ausricht-Einheit 18 die Speichervorgänge an die Lade/Speicher-Einheit 26. Jede dekodierte Instruktion wird an die Reservierungsstation 22 zusammen mit Operanden-Adresseninformation und Verschiebungs- oder unmittelbaren Datenwerten gesendet, die in der Instruktion enthalten sein können.
- Der Mikroprozessor 10 unterstützt eine Außerhalb-der-Reihenfolge-Ausführung und verwendet somit den Umordnungspuffer 32 für die folgenden Tasks: um die ursprüngliche Programmfolge für Register-Lese- und Schreibvorgänge zu verfolgen, um Registerumbenennung zu implementieren, um spekulative Instruktionsausführung und Abzweig-Fehlvorhersage-Wiederherstellung zu ermöglichen und um genaue Ausnahmen zu ermöglichen. Ein vorübergehender Speicherplatz innerhalb des Umordnungspuffers 32 ist beim Dekodieren einer Instruktion reserviert, die die Aktualisierung eines Registers beinhaltet. Der vorübergehende Speicherplatz speichert den spekulativen Registerzustand, der sich aus der spekulativen Ausführung einer Instruktion ergibt. Wenn eine Abzweig-Vorhersage nicht richtig ist, können die Ergebnisse aus den spekulativ ausgeführten Instruktionen zusammen mit dem fehlvorhergesagten Weg in dem Umordnungspuffer 32 ungültig gemacht werden, bevor sie in die Registerdatei 30 geschrieben werden. Auf ähnliche Weise können, wenn eine bestimmte Instruktion eine Ausnahme verursacht, die der Ausnahme-verursachenden Instruktion nachfolgende Instruktionen verworfen werden. Auf diese Art und Weise sind Ausnahmen "genau" (d. h. die der Ausnahmeverursachenden Instruktion nachfolgende Instruktionen werden nicht vor der Ausnahme beendet). Es sei bemerkt, dass eine bestimmte Instruktion spekulativ ausgeführt wird, wenn sie vor Instruktionen ausgeführt wird, die der bestimmten Instruktion in der Programmreihenfolge vorhergehen. Vorhergehende Instruktionen können eine Abzweig-Instruktion oder eine eine Ausnahmeverursachende Instruktion sein, wobei in diesem Fall die spekulativen Ergebnisse von dem Umordnungspuffer 32 verworfen werden können.
- Die dekodierten Instruktionen und unmittelbare oder Verschiebungsdatenwerte, die an den Ausgängen der Instruktions-Ausrichteinheit 18 bereitgestellt werden, werden direkt an jeweilige Reservierungsstationen 22 weitergeleitet. Bei einer Ausführungsform ist jede Reservierungsstation 22 imstande. Instruktionsinformation (d. h. dekodierte Instruktionen sowie auch Operandenwerte, Operanden-Tags und/oder unmittelbare Datenwerte) für bis zu drei anstehende Instruktionen zu halten, die auf die Ausgabe an die jeweilige Funktionseinheit warten. Es sei bemerkt, dass für die in der Figur gezeigten Ausführungsform jeder Reservierungsstation 22 eine dedizierte Funktionseinheit 24 zugeordnet ist. Demgemäß werden drei dedizierte "Ausgabepositionen" von den Reservierungsstationen 22 und den Funktionseinheiten 24 gebildet. Mit anderen Worten wird die Ausgabeposition 0 von der Reservierungsstation 22A und der Funktionseinheit 24A gebildet. Instruktionen, die ausgerichtet sind und an die Reservierungsstation 22A ausgegeben werden, werden von der Funktionseinheit 24A ausgeführt. Auf ähnliche Weise wird die Ausgabeposition 1 von der Reservierungsstation 22B und der Funktionseinheit 24B gebildet; und die Ausgabeposition 2 wird von der Reservierungsstation 22C und der Funktionseinheit 24C gebildet.
- Beim Dekodieren einer bestimmten Instruktion wird, wenn ein erforderlicher Operand ein Registerplatz ist, die Registeradresseninformation gleichzeitig an den Umordnungspuffer 32 und die Registerdatei 30 geleitet. Die x86-Registerdatei weist acht 32-Bit-Real-Register auf (d. h. typischerweise als EAX, EBX, ECX, EDX, EBP, ESI, EDI und ESP bezeichnet). Bei Ausführungsformen des Mikroprozessors 10, die die x86-Mikroprozessorarchitektur benutzen, umfasst die Registerdatei 30 Speicherplätze für jedes der 32-Bit-Real-Register. Zusätzliche Speicherplätze können in der Registerdatei 30 zur Verwendung durch die MROM-Einheit 34 enthalten sein. Der Umordnungspuffer 32 enthält vorübergehende Speicherplätze für Ergebnisse, die den Inhalt dieser Register ändern, um dadurch eine Außerhalb-der-Reihenfolge-Ausführung zu ermöglichen. Ein vorübergehender Speicherplatz des Umordnungspuffers 32 ist für jede Instruktion reserviert, die beim Dekodieren dazu bestimmt ist, den Inhalt eines der Realregister zu modifizieren. Daher kann an verschiedenen Punkten während der Ausführungen eines bestimmten Programms der Umordnungspuffer 32 eine oder mehrere Stellen aufweisen, die den spekulativ ausgeführten Inhalt eines gegebenen Registers enthalten.
- Wenn es nach dem Dekodieren einer gegebenen Instruktion bestimmt wird, dass der Umordnungspuffer 32 eine vorherige Stelle oder Stellen aufweist, dem/denen ein Register zugeordnet ist, das als Operand in der gegebenen Instruktion verwendet wird, leitet der Umordnungspuffer 32 an die entsprechende Reservierungsstation entweder weiter: 1) den Wert in der zuletzt zugeordneten Stelle oder 2) einen Tag für die zuletzt zugeordnete Stelle, wenn der Wert noch nicht von der Funktionseinheit erzeugt wurde, die schließlich die vorherige Instruktion ausführen wird. Wenn der Umordnungspuffer 32 eine für ein gegebenes Register reservierte Stelle aufweist, wird der Operandenwert (oder den Umordnungspuffer-Tag) von dem Umordnungspuffer 32 und nicht von der Registerdatei 30 geliefert. Wenn es keine für ein erforderliches Regis ter in dem Umordnungspuffer 32 reservierte Stelle gibt, wird der Wert direkt aus der Registerdatei 30 genommen. Wenn der Operand einem Speicherplatz entspricht, wird der Operandenwert an die Reservierungsstation durch die Lade/Speicher-Einheit 26 geliefert.
- Bei einer bestimmten Ausführungsform ist der Umordnungspuffer 32 konfiguriert, um gleichzeitig dekodierte Instruktionen als eine Einheit zu speichern und zu handhaben. Diese Konfiguration wird hier als "Line-orientiert" bezeichnet. Indem verschiedene Instruktionen zusammen gehandhabt werden, kann die innerhalb des Umordnungspuffers 32 benutzte Hardware vereinfacht werden. Beispielsweise ordnet ein Line-orientierter Umordnungspuffer, der in der vorliegenden Ausführungsform enthalten ist/Speicher zu, der für Instruktionsinformation ausreichend ist, die drei Instruktionen betrifft, wann immer eine oder mehrere Instruktion(en) von der Ausrichteinheit 18 ausgegeben wird/werden. Im Gegensatz dazu wird eine veränderliche Speichermenge in herkömmlichen Umordnungspuffern abhängig von der Anzahl tatsächlich übertragener Instruktionen zugeordnet. Eine relativ große Anzahl von Logikgattern kann erforderlich sein, um die veränderliche Menge von Speicher zuzuordnen. Wenn jede der gleichzeitig dekodierten Instruktionen ausgeführt wurde, werden die Instruktionsergebnisse gleichzeitig in der Registerdatei 30 gespeichert. Der Speicher ist dann für die Zuordnung zu einem weiteren Satz gleichzeitig dekodierter Instruktionen frei. Außerdem wird die Menge der je Instruktion benutzten Steuerlogikschaltungsanordnungen verringert, da die Steuerlogik über mehrere gleichzeitig dekodierte Instruktionen amortisiert wird. Ein eine bestimmte Instruktion kennzeichnender Umordnungspuffer-Tag kann in zwei Felder aufgeteilt werden: einen Line-Tag und einen Offset-Tag. Der Line-Tag kennzeichnet den Satz gleichzeitig dekodierter Instruktionen einschließlich der bestimmten Instruktion, und der Offset-Tag kennzeichnet, welche Instruktion innerhalb des Satzes der bestimmten Instruktion entspricht. Es sei bemerkt, dass das Speichern von Instruktionsergebnissen in der Registerdatei 30 und das Freimachen des entsprechenden Speichers als ein "Pensionieren (retiring)" der Instruktionen bezeichnet wird. Es sei ferner bemerkt, dass eine beliebige Umordnungspufferkonfiguration bei verschiedenen Ausführungsformen des Mikroprozessors 10 benutzt werden kann.
- Wie es vorher bemerkt wurde, speichern die Reservierungsstationen 22 Instruktionen, bis die Instruktionen von der entsprechenden Funktionseinheit 24 ausgeführt werden. Eine Instruktion wird zur Ausführung ausgewählt, wenn: (i) die Operanden der Instruktion bereitgestellt wurden; und (ii) die Operanden noch nicht für Instruktionen bereitgestellt wurden, die innerhalb der gleichen Reservierungsstation 22A-22C und die vor der Instruktion in der Programmfolge sind. Es sei bemerkt, dass, wenn eine Instruktion von einer der Funktionseinheiten 24 ausgeführt wird, das Ergebnis dieser Instruktion direkt an eine beliebige Reservierungsstation 22 weitergeleitet wird, die auf dieses Ergebnis zur gleichen Zeit wartet, wenn das Ergebnis an den Aktualisierungsumordnungspuffer 32 weitergeleitet wird (diese Technik wird allgemein als "Ergebnisweiterleiten" bezeichnet). Eine Instruktion kann zur Ausführung ausgewählt und an eine Funktionseinheit 24A-24C während des Taktzyklus weitergeleitet werden, wenn das zugeordnete Ergebnis weitergeleitet wird. In diesem Fall leiten die Reservierungsstationen 22 das weitergeleitete Ergebnis an die Funktionseinheit 24.
- Bei einer Ausführungsform ist jede der Funktionseinheiten 24 konfiguriert, um Ganzzahl-Arithmetikoperationen der Addition und Subtraktion sowie auch Verschiebungen, Drehungen, Logikoperationen und Abzweigvorgänge durchzuführen. Es sei bemerkt, dass eine Gleitkomma-Einheit (nicht gezeigt) ebenfalls benutzt werden kann, um Gleitkomma-Operationen unterzubringen. Die Gleitkomma-Einheit kann als ein Coprozessor betrieben werden, der Instruktionen von der MROM 34 empfängt und nachfolgend mit dem Umordnungspuffer 32 kommuniziert, um die Instruktionen abzuschließen. Außerdem können die Funktionseinheiten 24 konfiguriert sein, um eine Adressenerzeugung für von der Lade/Speicher-Einheit 26 durchgeführten Lade- und Speichervorgänge durchzuführen.
- Jede der Funktionseinheiten 24 liefert ferner Information hinsichtlich der Ausführung bedingter Abzweig-Instruktionen an die Abzweig-Vorhersage-Einheit 14. Wenn eine Abzweig-Vorhersage nicht richtig war, räumt die Abzweig- Vorhersage-Einheit 14 Instruktionen aus, die dem fehlvorhergesagten Abzweig folgen, die in die Instruktions-Verarbeitungs-Pipeline eingetreten sind, und veranlasst ein Abrufen der erforderlichen Instruktionen aus dem Instruktionscache-Speicher 16 oder dem Hauptspeicher. Es sei bemerkt, dass in derartigen Situationen Ergebnisse von Instruktionen in der ursprünglichen Programmfolge, die nach der fehlvorhergesagten Abzweig-Instruktion auftreten, einschließlich derjenigen, die spekulativ ausgeführt und vorübergehend in der Lade/Speicher-Einheit 26 und dem Umordnungspuffer 32 gespeichert wurden, verworfen werden.
- Von den Funktionseinheiten 24 erzeugte Ergebnisse werden an den Umordnungspuffer 32, wenn ein Registerwert aktualisiert wird, und an die Lade/Speicher-Einheit 26, wenn der Inhalt eines Speicherplatzes geändert wird, gesendet. Wenn das Ergebnis in einem Register zu speichern ist, speichert der Umordnungspuffer 32 das Ergebnis in der für den Wert des Registers reservierten Stelle, wenn die Instruktion dekodiert wurde. Eine Mehrzahl von Ergebnisbussen 38 ist zum Weiterleiten der Ergebnisse von den Funktionseinheiten 24 und der Lade/Speicher-Einheit 26 enthalten. Die Ergebnisbusse 38 übertragen das erzeugte Ergebnis sowie auch den Umordnungspuffer-Tag, der die ausgeführte Instruktion kennzeichnet.
- Die Lade/Speicher-Einheit 26 liefert eine Schnittstelle zwischen den Funktionseinheiten 24 und dem Daten-Cache-Speicher 28. Bei einer Ausführungsform ist die Lade/Speicher-Einheit 26 mit einem Lade/Speicher-Puffer konfiguriert, der acht Speicherplätze für Daten und Adresseninformation für anhängige Lade- oder Speichervorgänge aufweist. Wenn der Puffer voll ist, wartet die Instruktions-Ausrichteinheit 18 bis die Lade/Speicher-Einheit 26 Platz für die anhängige Lade- oder Speicheranforderungsinformation aufweist. Die Lade/Speicher-Einheit 26 führt ebenfalls eine Abhängigkeitsprüfung für Ladespeichervorgänge gegen anhängige Speichervorgänge durch/um sicherzustel len, dass Datenkohärenz beibehalten wird. Ein Speichervorgang ist eine Übertragung von Daten zwischen dem Mikroprozessor 10 und dem Hauptspeicheruntersystem. Speichervorgänge können das Ergebnis einer Instruktion sein, die einen im Speicher gespeicherten Operanden benutzt, oder können das Ergebnis einer Lade/Speicher-Instruktion sein, die die Datenübertragung, jedoch keinen weiteren Vorgang veranlasst. Außerdem kann die Lade/Speicher- Einheit 26 einen besonderen Registerspeicher für besondere Register aufweisen, wie beispielsweise das Segmentregister und andere Register, die sich auf den durch die x86-Mikroprozessor-Architektur definierten Adressenumsetzungsmechanismus beziehen.
- Bei einer Ausführungsform ist die Lade/Speicher-Einheit 26 konfiguriert, um Lade/Speichervorgänge spekulativ auszuführen. Speichervorgänge können in der Programmfolge ausgeführt werden, wobei sie jedoch spekulativ in dem vorhergesagten Weg gespeichert werden können. Wenn der vorhergesagte Weg nicht richtig ist, werden die Daten vor dem Speichervorgang nachfolgend auf dem vorhergesagten Weg wieder hergestellt, und der Speichervorgang wird auf dem richtigen Weg ausgeführt. Bei einer weiteren Ausführungsform können Speichervorgänge ebenfalls spekulativ ausgeführt werden. Spekulativ ausgeführte Speichervorgänge werden in einem Speicherpuffer zusammen mit einer Kopie der Cache-Line vor der Aktualisierung gespeichert. Wenn der spekulativ ausgeführte Speichervorgang später infolge einer Abzweig-Fehlvorhersage oder Ausnahme verworfen wird, kann die Cache-Line auf den in dem Puffer gespeicherten Wert wieder hergestellt werden. Es sei bemerkt, dass die Lade/Speicher-Einheit 26 konfiguriert sein kann, um jede Menge an spekulativer Ausführung einschließlich keiner spekulativen Ausführung auszuführen.
- Der Daten-Cache-Speicher 28 ist ein Hochgeschwindigkeits-Cache-Speicher, der vorgesehen ist, um zwischen der Lade/Speicher-Einheit 26 und dem Hauptspeicheruntersystem übertragene Daten vorübergehend zu speichern. Bei einer Ausführungsform weist der Daten-Cache-Speicher 28 eine Kapazität zum Speichern von bis zu 16 Kilobyte von Daten in einer teilassoziativen Achtwege-Struktur auf. Ähnlich dem Instruktions-Cache-Speicher 16 kann der Daten-Cache-Speicher 28 einen Wege-Vorhersagemechanismus verwenden. Es ist offensichtlich, dass der Daten-Cache-Speicher 28 in einer Vielfalt von spezifischen Speicherkonfigurationen einschließlich teilassoziativen und direkt- abgebildeten Konfigurationen implementiert sein kann.
- Bei einer bestimmten Ausführungsform des Mikroprozessors 10, der die x86- Mikroprozessor-Architektur benutzt, werden der, Instruktions-Cache-Speicher 16 und der Daten-Cache-Speicher 28 linear adressiert. Die lineare Adresse wird aus dem von der Instruktion spezifizierten Offset und der von dem Segmentanteil des x86-Adressenumsetzungsmechanismus spezifizierten Basisadresse gebildet. Lineare Adressen können optional in physische Adressen zum Zugreifen auf einen Hauptspeicher übersetzt werden. Die lineare in physische Übersetzung wird von dem Seitenadressierungsanteil des x86-Adressenumsetzungsmechanismus festgelegt. Es sei bemerkt, dass ein linear adressierter Cache-Speicher lineare Adressen-Tags speichert. Ein Satz von physischen Tags (nicht gezeigt) kann zum Abbilden der linearen Adressen in physische Adressen und zum Erfassen von Übersetzungsaliase genommen werden. Außerdem kann der physische Tag-Block die lineare in physische Adressenübersetzung durchführen.
- In Fig. 2 sind Einzelheiten einer Ausführungsform einer Abzweig-Vorhersage- Einheit 14 gezeigt. Wie die Figur darstellt, umfasst bei dieser Ausführungsform die Abzweig-Vorhersage-Einheit 14 ein Abzweig-Selektor-Array 50, einen Sequentiell-Adress-Addierer 52, eine Offset-Berechnungslogik 54, einen Direkt- Abzweig-Addierer 56, einen Indirekt-Abzweig-Target-Cache-Speicher 58, einen Rückkehr-Stapel 60, eine Steuerlogik 62 und einen Multiplexer 54.
- Im allgemeinen empfängt die Abzweig-Vorhersage-Einheit 14 Abruf-Adressen von den Funktionseinheiten 24A-C und gibt als Reaktion eine vorhergesagte nächste Abruf-Adressen aus. Die vorhergesagte nächste Abruf-Adresse wird dann an den Instruktions-Cache-Speicher 16 geleitet. Wenn die vorgesagte nächste Abruf-Adresse den Instruktions-Cache-Speicher 16 verfehlt, dann wird die vorhergesagte nächste Abruf-Adresse an die Vorabruf/Vordekodier-Einheit 12 geleitet. Die Vorabruf/Vordekodier-Einheit 12 beginnt dann den Prozess des Zugreifens auf das Hauptspeicheruntersystem und des Speicherns einer vorbestimmten Anzahl von Instruktions-Bytes, die an der vorhergesagten nächsten Abruf-Adresse in dem Instruktions-Cache-Speicher 16 liegen.
- Während des Betriebs der Abzweig-Vorhersage-Einheit 14 kann die gesamte oder ein Teil der empfangenen Abruf-Adresse an eine Anzahl unterschiedlicher Stellen parallel weitergeleitet werden. Beispielsweise wird bei der in der Figur dargestellten Ausführungsform die Abruf-Adresse an das Abruf-Selektor-Array 50, den Sequentiell-Adress-Addierer 52, den Instruktions-Cache-Speicher 16, den Direkt-Abzweig-Addierer 56 und den Indirekt-Abzweig-Target-Cache- Speicher 58 übertragen.
- Das Abzweig-Selektor-Array 50 ist konfiguriert, um eine Mehrzahl von Selektions-Bits zu speichern, die jeweils einem bestimmten Instruktions-Byte innerhalb des Instruktions-Cache-Speichers 16 entsprechen. Bei einer Ausführungsform kann das Abzweig-Selektions-Array 50 konfiguriert sein, um die Struktur des Instruktions-Cache-Speichers 16 zu spiegeln. Wenn beispielsweise der Instruktions-Cache-Speicher 16 als ein teilassoziativer Vierwege-Cache-Speicher konfiguriert ist, kann das Abzweig-Selektor-Array 50 ebenfalls als teilassoziativ Vierwege konfiguriert sein. Auf sowohl das Abzweig-Selektor-Array 50 als auch den Instruktions-Cache-Speicher 16 kann unter Verwendung des gleichen Tags oder Teils der Abruf-Adresse zugegriffen werden. Die von dem Abzweig- Selektor-Array 50 ausgegebenen Selektor-Bits werden an die Steuerlogik 62 geleitet. Basierend auf den Selektor-Bits weist die Steuerlogik 62 den Multiplexer 64 an, die nächste vorhergesagte Abruf-Adresse aus einer von vier möglichen Quellen auszuwählen. Bei einer Ausführungsform wählt der Multiplexer 64 die vorhergesagte nächste Abruf-Adresse aus den folgenden vier möglichen Adressen aus: (1) einer berechneten sequentiellen Adresse, (2) einer berechneten direkten Abzweig-Target-Adresse, (3) einer gespeicherten Indirekt- Abzweig-Target-Adresse und (4) einer gespeicherten Rückkehr-Adresse. Jede dieser vier möglichen Adressen wird einzeln nachstehend erläutert. Es sei bemerkt, dass sich, wie er hier verwendet wird, der Begriff Abruf-Block auf den Block von Instruktions-Bytes bezieht, die von dem Instruktions-Cache- Speicher 16 als Reaktion auf das Empfangen einer Abruf-Adresse ausgegeben werden, die in dem Instruktions-Cache-Speicher 16 trifft. Bei einigen Implementierungen kann ein Abruf-Block gleich einer Cache-Line sein. Bei anderen Implementierungen kann der Instruktions-Cache-Speicher 16 einen Bruchteil einer Cache-Line (z. B. die Hälfte einer Cache-Line) ausgeben, wobei in diesem Fall eine Cache-Line eine Anzahl von Abruf-Blöcken umfassen kann.
- Die erste der vier mögliche Adressen, d. h. die berechnete sequentielle Adresse, wird ausgewählt, wenn die Selektor-Bits angeben, dass es keinen genommenen Abzweig nach der Abruf-Adresse in der abgerufenen Cache-Line gibt. Wenn beispielsweise eine abgerufene Cache-Line keine Abzweig-Instruktionen aufweist, dann wird das Programm die Ausführung über das Ende der aktuell abgerufenen Cache-Line in die nächste sequentielle Cache-Line fortsetzen. Die Abruf-Adresse der nächsten sequentiellen Cache-Line wird von dem Sequentiell-Adress-Addierer 52 berechnet. Der Sequentieil-Adress-Addierer 52 ist konfiguriert, um die Abruf-Adresse (oder einen Teil derselben) zu empfangen und sie zu einer Konstanten 66 hinzu zu addieren. Die Konstante 66 ist gleich der Abruf-Block-Größe des Instruktions-Cache-Speichers 16. Wenn beispielsweise ein Block von sechzehn Instruktions-Bytes von dem Instruktions-Cache- Speicher 16 jedes Mal ausgeben wird, wenn eine Abrufadresse, die trifft, empfangen wird, dann würde die Konstante 66 gleich sechzehn sein. Durch Hinzufügen der Abruf-Block-Größe zu der Abruf-Adresse kann die Adresse des nächsten Sequentiell-Abruf-Blocks berechnet werden. Es sei bemerkt, dass bei einigen Ausführungsformen die Bits niedrigerer Ordnung der Abruf-Adresse (z. B. Index-Bits, die den Byte-Offset innerhalb des Abruf-Blocks angeben) auf Null gesetzt werden, bevor oder nachdem die Addition stattfindet. Dies gewährleistet, dass die nächste sequentielle Adresse dem Anfang einer Cache- Line (oder einem Abruf-Block, wenn es mehrere Abruf-Blöcke innerhalb einer Cache-Line gibt) entspricht.
- Die zweite der vier möglichen Adressen, d. h. die berechnete Direkt-Abzweig- Target-Adresse, wird ausgewählt, wenn die von der Steuerlogik 62 empfangenen Selektor-Bits die Anwesenheit einer Direkt-Abzweig-Instruktion angeben, die vorhergesagt genommen ist. Eine Direkt-Abzweig-Instruktion ist eine Abzweig-Instruktion, bei der der Offset (d. h. die Anzahl von Bytes, die zu springen sind) innerhalb der Instruktion als unmittelbare Datenwerte enthalten ist. Beispielsweise ist bei dem x86-Instruktionssatz die unbedingte nahe Sprunginstruktion mit einem unmittelbaren Offset (z. B. JMP 014C) ein Beispiel einer Direkt-Abzweig-Instruktion. Der unmittelbare Offset (014C bei dem vorhergehenden Beispiel) gibt die Anzahl von Bytes an, die von dem Instruktions- Pointer (EIP) der der Abzweig-Instruktion direkt folgenden Instruktion hinzuzufügen oder abzuziehen ist. Der Direkt-Abzweig-Addierer 56 ist für das Berechnen der Direkt-Abzweig-Target-Adresseverantwortlich. Bei einer Ausführungsform addiert der Direkt-Abzweig-Addierer 56 die folgenden drei Komponenten, um die vorhergesagte Direkt-Abzweig-Adresse zu erzeugen: (1) die Abruf-Adresse, (2) den Offset von der aktuellen Abruf-Adresse zu der der Direkt-Abzweig-Instruktion unmittelbar folgenden Instruktion und (3) den als unmittelbare Datenwerte innerhalb der Direkt-Abzweig-Instruktion gespeicherten Offset. Die Abruf-Adresse wirkt als ein Startpunkt für die Berechnung. Der Offset von der aktuellen Abruf-Adresse zu der der Direkt-Abruf-Adresse unmittelbar folgenden Instruktion wird zu dem Startpunkt hinzu addiert, um einen wirksamen EIP-Wert zu bilden. Der als unmittelbare Datenwerte gespeicherte Offset wird dann zu dem effektiven EIP-Wert hinzu addiert, um die vorhergesagte Direkt-Abzweig-Target-Adresse zu erzeugen. Es sei bemerkt, dass der Addierer 56 als einer einer beliebigen Anzahl von unterschiedlichen Arten von Addierern (z. B. ein Übertrag-Mitlauf-Addierer oder ein Überlauf-Abspeicher- Addierer) oder als eine Kombination von unterschiedlichen Addierertypen implementiert sein kann. Außerdem können die Additionsoperationen in einer beliebigen Reihenfolge oder parallel durchgeführt werden. Die von dem Direkt- Abzweig-Addierer 56 verwendeten beiden Offset-Werte werden von der Berechnungs-Logik-Einheit 54 berechnet, die die Offset-Werte aus den von dem Instruktions-Cache-Speicher 16 empfangenen Instruktions-Bytes bestimmt. Diese Berechnung wird nachstehend ausführlicher beschrieben.
- Die dritte der vier möglichen Adressen, d. h. die gespeicherte Indirekt- Abzweig-Target-Adresse, wird von dem Multiplexer 64 ausgewählt, wenn die von der Steuerlogik 62 empfangenen Selektor-Bits die Anwesenheit einer Indirekt-Abzweig-Instruktion angeben, die vorgesagt genommen ist. Eine Indirekt- Abzweig-Instruktion ist eine Abzweig-Instruktion, bei der der Offset nicht als unmittelbare Datenwerte gespeichert ist. Beispielsweise kann eine unbedingte Sprung-Instruktion, bei der der Offset im Speicher gespeichert ist (z. B. JMP [9912]), oder ein Register (z. B. JMP AX) als ein indirekter Abzweig betrachtet werden. Aufgrund der zusätzliche Zeit, die benötigt wird, um den gewünschten Offset aus dem Speicher oder einem Register wiederherzustellen, kann es im Gegensatz zu Direkt-Abzweig-Instruktionen schwieriger sein, vorhergesagte Abzweig-Target-Adressen "während des Laufs" (oder außerhalb der Programm-Reihenfolge) für indirekte Abzweige zu berechnen. Somit werden die vorhergesagten Indirekt-Abzweig-Adressen im Indirekt-Abzweig-Target- Cache-Speicher 58 gespeichert. Der Indirekt-Abzweig-Target-Cache-Speicher 58 ist konfiguriert, um die aktuelle Abruf-Adrese zu empfangen und als Reaktion eine vorhergesagte Indirekt-Abzweig-Target-Adresse an den Multiplexer 64 auszugeben. Wenn die Steuerlogik 62 eine Indirekt-Abzweig-Instruktion erfasst, die vorhergesagt genommen ist, weist sie den Multiplexer 64 an, die vorhergesagte Indirekt-Abzweig-Target-Adressen auszuwählen, die von dem Indirekt-Abzweig-Target-Cache-Speicher 58 ausgegeben wird.
- Die vierte mögliche Adresse ist die gespeicherte Rückkehr-Adresse, Die gespeicherte Rückkehr-Adresse wird von dem Multiplexer 64 ausgewählt, wenn die von der Steuerlogik 62 empfangenen Selektor-Bits die Anwesenheit einer Rückkehr-Instruktion angeben. Rückkehr-Instruktionen (z. B. RET und RETF bei dem x86-Instruktions-Satz) stellen den EIP auf den Wert wieder her, den er vor der vorhergehenden Ruf-Instruktion gehalten hat. Ruf- und Rückkehrinstruktionen werden typischerweise verwendet, um von Prozeduren oder Unterprogrammen zu springen oder zu diesen zurückzukehren. Ruf-Instruktionen speichern (oder einspeichern) den aktuellen Instruktions-Pointer in einem Stapel im Speicher, während Rückkehr-Instruktionen den Instruktions-Pointer auf seinen Wert von vor der letzten Ruf-Instruktion durch Lesen (oder Entnehmen) des gespeicherten Instruktions-Pointer aus dem Speicherstapel wiederherstellen. Bei der gezeigten Ausführungsform ist der Rückkehr-Stapel 60 konfiguriert, um Instruktions-Pointer entsprechend den Ruf-Instruktionen zu speichern. Wenn die von der Steuerlogik 62 empfangenen Selektor-Bits eine Rückkehr-Instruktion angeben, veranlasst die Steuerlogik 62, dass der Multiplexer 64 die vorhergesagte Rückkehr-Adresse an dem oberen Ende des Rückkehr-Stapels 60 auswählt. Der Rückkehr-Stapel 60 kann konfiguriert sein, um sein oberes Ende des Stapel-Pointers zu inkrementieren, wann immer eine vorhergesagte Rückkehr-Adresse von dem Multiplexer 64 ausgewählt wird, um einen geeigneten Stapelvorgang freizugeben. Auf ähnliche Weise kann, wenn eine Ruf-Instruktion erfasst und der entsprechende Instruktionsspeicher in dem Rückkehr-Stapel 60 gespeichert ist, das obere Ende des Stapel-Pointers dekrementiert werden.
- In Fig. 3 sind verschiedene Merkmale einer bestimmten Ausführungsform einer Abzweig-Vorhersage-Einheit 14 gezeigt. Wie es die Figur darstellt, können das Abzweig-Selektor-Array 50, der Instruktions-Cache-Speicher 16 und der Indirekt-Abzweig-Target-Cache-Speicher 58 jeweils Tags speichern, die der gespeicherten Information entsprechen. Der Indirekt-Abzweig-Target- Cache-Speicher kann die Struktur des Instruktions-Cache-Speichers 16 spiegeln und eine oder mehrere Indirekt-Abzweig-Target-Adressen pro Cache-Line oder Abruf-Block speichern. Bei einer anderen Ausführungsform kann der Indirekt-Abzweig-Target-Cache-Speicher 58 vollassoziativ sein und bis zu einer vorbestimmten Anzahl von vorhergesagten Indirekt-Abzweig-Target-Adressen speichern. Beispielsweise kann der Indirekt-Abzweig-Target-Cache-Speicher 58 konfiguriert sein, um ein Zuerst-hinein/Zuerst-hinaus(FIFO)-Austausch- Schema zu verwenden, um eine vorbestimmte Anzahl der zuletzt genommenen Indirekt-Abzweig-Target-Adressen zu speichern. Bei einigen Ausführungsformen kann der Indirekt-Abzweig-Target-Cache-Speicher 58 nur Indirekt- Abzweig-Target-Adressen speichern, was den Indirekt-Abzweig-Target-Cache- Indirekt-Abzweig-Target-Cache-Speicher 58 zu aktualisieren. Die Abzweig- Vorhersage-Einheit 14 und das Abzweig-Selektor-Array 50 können ebenfalls konfiguriert sein, um jegliche Selektor-Bits zurückzusetzen, die den ersetzen Cache-Lines oder Abruf-Blöcken innerhalb des Instruktions-Cache-Speichers 16 entsprechen. Der Rückkehr-Stapel 60 kann ebenfalls jedem seiner Einträge zugeordnete Gültig-Bits aufweisen. Außerdem können zusätzliche Speicher- Arrays verwendet werden, um unterschiedliche Größen von Offsets (z. B. trennen von Acht-, Sechzehn- und Zweiunddreißig-Bit-Arrays) anstatt des Speichern der gesamten Indirekt-Abzweig-Target-Adresse in dem Indirekt- Abzweig-Target-Array 58 zu speichern. Diese Ausführungsform kann jedoch einen zusätzlichen Addierer verwenden, um die Indirekt-Abzweig-Target- Adressen-Berechnung unter Verwendung der gespeicherten Offsets durchzuführen.
- In Fig. 4 sind weitere Einzelheiten des Betriebs einer Ausführungsform der Abzweig-Vorhersage-Einheit 14 gezeigt. Wie die Figur darstellt, kann bei einer Ausführungsform der Instruktions-Cache-Speicher 16 Instruktions-Bytes 84, Abzweig-Offset-Bits 86, Abzweig-Instruktions-Bits 88 und Star-Bits 90 speichern. Es sei bemerkt, dass nicht assemblierte Instruktionen 96 nur für erläuternde Zwecke gezeigt und nicht tatsächlich in dem Instruktions-Cache- Speicher 16 gespeichert sind. Abzweig-Offset-Bits 86, Abzweig-Instruktions- Bytes 88 und Start-Bits 90 sind alle von der Vordekodier-Einheit 12 erzeugte Vordekodier-Bits. Jedes Vordekodier-Bit entspricht einem Instruktions-Byte, wie es in der Darstellung gezeigt ist. Abzweig-Offset-Bits 86 werden aktiviert, wenn die entsprechenden Instruktions-Bytes einen Teil eines unmittelbaren Offset einer Direkt-Abzweig-Instruktion entsprechen. Beispielsweise stellt die Instruktion JMP 20 einen unbedingten Sprung zu einer Adresse zwanzig Bytes nach dem Start der nächsten Instruktion (d. h. POP AX) dar. Die Instruktion JMP 20 wird im hexadezimalen Maschinenkode als E9 E0 assembliert, wobei E9 der Opkode für einen unbedingten Sprung mit einem unmittelbaren Acht-Bit- Offset und E0 die Zweier-Komplement-Darstellung des Offset (20) ist. Die Offsets werden durch Kreise 72 in der Figur angegeben. Da die Bytes E0 unmittelbare Offset-Daten für eine Direkt-Abzweig-Instruktion darstellen, wird das Speicher 58 kleiner als andere Abzweig-Target-Cache-Speicher machen kann, die andere Arten von Target-Adresen zusätzlich zu den Indirekt-Abzweig- Target-Adressen speichern. Da außerdem indirekte Abzweige weniger häufig als direkte Abzweige auftreten können, kann dies außerdem irgendeinen möglichen Nachteil, der dem Implementieren eines Abzweig-Target-Cache- Speichers mit weniger Speicherplätzen zugeordnet ist, abschwächen.
- Wie es die Figur ebenfalls darstellt, kann die Offset-Berechnungs-Einheit 54 konfiguriert sein, um Vordekodier-Bits von dem Instruktions-Cache-Speicher 16 zu empfangen. Wie es vorher bemerkt wurde, werden Vordekodier-Bits von der Vordekodier-Einheit 12 erzeugt und können verwendet werden, um Information zu speichern, die für die Ausrichtung und Dekodierung von in dem Instruktions-Cache-Speicher 16 gespeicherten Instruktionen relevant ist. Die Offset-Berechnungs-Einheit 54 kann ebenfalls konfiguriert sein, um Selektor- Bits von dem Abzweig-Selektor-Array 50 zu empfangen. Bei einer Ausführungsform kann das Abzweig-Selektor-Array 50 konfiguriert sein, um nur die Selektor-Bits auszugeben, die nach der Abruf-Adresse auftreten. Bei einer anderen Ausführungsform kann das Abzweig-Selektor-Array 50 konfiguriert sein, um alle die Selektor-Bits auszugeben, die jedem Bit in der ausgewählten Cache-Line oder den Abruf-Block innerhalb des Instruktions-Cache-Speichers 16 entsprechen. Außerdem können sowohl die Steuerlogik 62 als auch die Offset- Berechnungs-Einheit 54 konfiguriert sein, um alle oder nur einen Teil der von dem Abzweig-Selektor-Array 50 ausgegebenen Selektor-Bits zu empfangen. Bei einer Ausführungsform kann das Abzweig-Selektor-Array konfiguriert sein, um die der Abruf-Adresse entsprechende Selektor-Bits direkt an die Steuereingänge des Multiplexers 64 auszugeben, wodurch die Komplexität der Steuerlogik 62 verringert (oder vollständig eliminiert) wird.
- Wenn eine Abzweig-Fehl-Vorhersage erfasst wird, können die Funktionseinheiten 24 die richtige Abzweig-Target-Adresse (und die entsprechende genommene oder nicht genommene Information) der Abzweig-Vorhersage-Einheit 14 liefern. Die Abzweig-Vorhersage-Einheit 14 kann dann konfiguriert sein, um die entsprechende Information in dem Abzweig-Selektor-Array 50 und dem entsprechende Abzweig-Offset-Bit 86 gesetzt (durch einen schattierten Block dargestellt).
- Auf ähnliche Weise werden Abzweig-Instruktions-Bits 88 aktiviert, wenn die entsprechenden Instruktions-Bytes Teil einer Abzweig-Instruktion sind. Beispielsweise sind sowohl die Instruktion JMP 20 als auch die Instruktion RET Abzweig-Instruktionen. Somit werden ihre entsprechenden Abzweig-Instruktions-Bits 86 aktiviert. Wie es vorher beschrieben wurde, werden Start-Bits 90 nur aktiviert, wenn das entsprechende Instruktions-Byte das erste Byte einer Instruktion ist.
- Die Figur stellt ebenfalls ein Beispiel einer Art von Kodierung für Selektor-Bits 94 dar. Die in der Figur verwendete Kodierung benutzt zwei Selektor-Bits für jedes in dem Instruktions-Cache-Speicher 16 gespeicherte Instruktions-Byte. Es sei bemerkt, dass bei anderen Ausführungsformen Selektor-Bits 94 für eine Untermenge der Instruktions-Bytes im Instruktions-Cache-Speicher 16 gespeichert sein können, z. B. zwei Selektor-Bits für jedes andere Instruktions-Byte. Die Tabelle 1 veranschaulicht die bei dem in der Figur gezeigten Beispiel verwendete Kodierung. Tabelle 1 Selektor-Bit-Kodierungen
- In der Figur stellen Pfeile 80 und 82 eine beispielhafte Abruf-Adresse dar. Unter Verwendung der beispielhaften Abruf-Adresse kann der Betrieb dieser Ausführungsform der Abzweig-Vorhersageeinheit 14 dargestellt werden. Die Abruf-Adresse wird von dem Instruktions-Cache-Speicher 16, der Offset- Berechnungs-Einheit 54, dem Direkt-Abzweig-Addierer 56 und dem Abzweig- Selektor-Array 50 empfangen. Als Reaktion gibt der Instruktions-Cache- Speicher 16 Instruktions-Bytes 84 beginnend mit der Instruktion MOV AX, BX an die Instruktions-Ausricht-Einheit 18 aus. Parallel werden die entsprechenden Vordekodier-Bits (die ebenfalls selektiv an die Ausricht-Einheit 18 geleitet werden können) an die Offset-Berechnungs-Einheit 54 übertragen. Das Abzweig-Selektor-Array 50 überträgt ebenfalls Selektor-Bits 94 (die den von dem, Instruktions-Cache-Speicher 16 ausgegebenen Instruktions-Bytes entsprechen) an die Offset-Berechnungseinheit 54.
- Nach Empfangen der Abruf-Adresse, der Vordekodier-Bits und der Selektor- Bits berechnet die Offset-Berechnungs-Einheit 54 zwei Offsets. Der erste Offset ist die Anzahl von Bytes von der Abruf-Adresse 80 zu dem Ende der ersten genommenen Abzweig-Instruktion (durch die Klammer 70 in der Figur dargestellt). Dies kann auf eine Anzahl von Wegen bestimmt werden, z. B. durch Abtasten nach dem ersten gesetzten Abzweig-Instruktions-Bit, das entsprechende Selektor-Bits aufweist, die aktiviert sind. Dieser Offset wird an den Direkt- Abzweig-Addierer 56 übertragen. Der zweite Offset ist der Offset, der als unmittelbare Datenwerte in der Direkt-Sprung-Instruktion gespeichert ist (durch Kreise 72 dargestellt). Bei einer Ausführungsform kann die Offset- Berechnungseinheit 54 Instruktions-Bytes von dem Instruktions-Cache- Speicher 16 zusätzlich zu den Vordekodier-Bits empfangen. Die Offset- Berechnungs-Einheit 54 kann dann die unmittelbaren Offset-Daten 72 auswählen, indem nach aktivierten Abzweig-Offset-Bits 86 abgetastet wird, die der ersten genommenen Abzweig-Instruktion nach der Abruf-Adresse entsprechen. Es sei bemerkt, dass die Offset-Berechnungs-Einheit 54 nach der ersten "genommenen" Abzweig-Instruktion abtasten kann, um sicherzustellen, dass Abzweig-Instruktionen, die "nicht genommen" sind, die Vorhersage nicht nachteilig beeinflussen werden. Es sei ferner bemerkt, dass/ obwohl Selektor- Bits, die eine Anzahl von Instruktions-Bytes entsprechen, an die Offset- Berechnungs-Einheit 54 übertragen werden können, bei einer Ausführungsform nur die Selektoren, die der Abruf-Adresse entsprechen, an die Steuerlogik 62 (oder den Multiplexer 64) übertragen werden. Bei dem oben verwendeten Beispiel würden Selektor-Bits mit dem Wert 01 (entsprechend den Instruktions-Bytes bei der Abruf-Adresse 80 und 82) an den Multiplexer 64 ausgegeben werden, was angibt, dass die Ausgabe von dem Direkt-Abzweig-Addierer 56 ausgewählt werden sollte.
- Wenn anstatt angenommen wird, dass die Abruf-Adresse diejenige der Instruktion POP BX war, würde das endgültige Paar von Selektor-Bits (mit einem Wert 00) an den Multiplexer 64 übertragen werden, was angibt, dass die nächste Sequentiell-Abruf-Adresse ausgewählt werden sollte (von dem Sequentiell-Adress-Addierer 52 erzeugte). Auf ähnliche Weise würden dann, wenn die Abruf-Adresse diejenige der Instruktion RET war, die Selektor-Bits mit einem Wert 11 an den Multiplexer 64 übertragen, was angibt, das die an dem oberen Ende des Rückkehr-Stapels 60 gespeicherte Rückkehr-Adresse ausgewählt werden sollte.
- Es sei bemerkt, dass weitere Konfigurationen von Selektor-Bits 94 ebenfalls betrachtet werden. Beispielsweise kann bei einer Ausführungsform die Abzweig-Vorhersage-Einheit ohne den Rückkehr-Stapel 60 implementiert sein. Auf ähnliche Weise kann weiter Vordekodier-Information ebenfalls zusätzlich oder anstatt der oben beschriebenen Vordekodier-Information gespeichert sein, z. B. ein Gültig-Bit kann gespeichert sein, das angibt, ob die entsprechende Abzweig-Vorhersage-Information gültig ist. Auf ähnliche Weise kann, wenn ein Rücksetzenstattfindet, das Abzweig-Selektor-Array 50 konfiguriert sein, um alle Selektor-Bits 94 zu löschen (z. B. 00). Der Instruktionscache-Speicher kann ebenfalls konfiguriert sein, um ein Steuersignal an der Vordekodier- Einheit 12 zu aktivieren, wenn eine Cache-Line überschrieben wird. Wenn das Abzweig-Selektor-Array 50 eine Struktur aufweist, die diejenige des Instruktions-Cache-Speichers 16 spiegelt, dann kann das Abzweig-Selektor-Array 50 alle Selektor-Bits 94 löschen, die der überschriebenen Cache-Line entsprechen.
- In Fig. 5 ist eine weitere Ausführungsform der Abzweig-Vorhersage-Einheit 14 dargestellt. Bei dieser Ausführungsform werden die Selektor-Bits von dem Abzweig-Selektor-Array 50 direkt an den Multiplexer 64 geleitet, um auszuwählen, welche Quelle die nächste vorhergesagte Abruf-Adresse bereitstellen wird. Wenn die Selektor-Bits nicht richtig sind, oder falls eine der gespeicherten Adressen nicht richtig ist (wie es später von den Funktions-Einheiten 24A- C erfasst wird), wird die nicht richtige Information mit der von den Funktions- Einheiten 24A-C empfangenen richtigen Information aktualisiert. Wenn beispielsweise die Selektor-Bits 94 unrichtigerweise angeben, dass eine bestimmte Instruktion genommen ist, werden beim Erfassen der Abzweig-Fehlvorhersage die Funktions-Einheiten 24A-C die Abzweig-Vorhersageeinheit 14 benachrichtigen, dass die Selektor-Bits nicht richtig sind und aktualisiert werden müssen.
- Ein zusätzliches Merkmal dieser Ausführungsform ist, dass Indirekt-Abzweig- Targets in der Form von Offsets gespeichert sind. Die Offsets werden dann zu der Abruf-Adresse durch den Indirekt-Abzweig-Addierer 68 hinzu addiert. Diese Berechnung kann auf ähnliche Weise wie die von dem Direkt-Abzweig- Addierer 56 durchgeführte Berechnung durchgeführt werden. Es sei ferner bemerkt, dass diese Ausführungsform den Rückkehr-Stapel 60 nicht verwendet.
- In Fig. 6 ist ein Ablauf-Diagramm, das eine Ausführungsform eines Verfahrens zum Speichern vorhergesagter nächster Abruf-Adressen in einem Mikroprozessor darstellt. Bei dieser Ausführungsform können, nachdem aktuelle Abruf-Adressen empfangen sind (Schritt 120), eine Anzahl von Funktionen parallel durchgeführt werden: (1) Instruktions-Bytes und Vordekodier-Bits werden von dem Instruktions-Cache-Speicher 16 ausgegeben (Schritt 122); (2) Selektor-Bits werden von dem Abzweig-Selektor-Array 50 ausgegeben (Schritt 124); (3) die Abruf-Adresse wird zum der Abruf-Block/Cache-Line-Größe hinzu addiert, um die nächste sequentielle Abruf-Adresse zu erzeugen (Schritt 126); (4) gespeicherte Indirekt-Abzweig-Instruktions-Adressen werden von dem Indirekt-Abzweig-Target-Cache-Speicher 58 ausgegeben; und (5) die Rückkehr- Adresse von dem oberen Teil des Rückkehr-Stapels 60 wird ausgegeben. Als nächstes berechnet die Offset-Berechnungs-Einheit 54 den Offset aus der Abruf-Adresse mit der ersten vorhergesagten genommenen Direkt-Abzweig- Instruktion und erfasst Offsets, die als unmittelbare Datenwerte innerhalb der Direkt-Abzweig-Instruktionen gespeichert sind (Schritt 132). Wenn sie einmal berechnet sind, dann werden die Offsets zu der Abruf-Adresse hinzu addiert, um die vorhergesagte nächste Direkt-Abzweig-Instruktion zu erzeugen (Schritt 134). Schließlich wird die nächste vorhergesagte Abruf-Adresse basierend auf den Selektor-Bits von dem Abzweig-Selektor-Array 50 ausgewählt (Schritt 136).
- Es sei bemerkt, dass einige der dargestellten Schritte optional sind (z. B. Schritt 130). Es sei ferner bemerkt, dass die Reihenfolge der Schritte geändert werden kann und dass unterschiedliche Funktionen innerhalb der Schritte in unterschiedlichen Folgen durchgeführt werden können. Beispielsweise können die Vordekodier-Bits von dem Ausgang des Instruktions-Cache-Speichers verfügbar sein (Schritt 122), bevor es die Instruktions-Bytes sind. Somit können die Berechnungen für jeden Offset zu unterschiedlichen Zeiten begonnen werden. Es sei ferner bemerkt, dass zusätzliche Schritte bei unterschiedlichen Ausführungsformen hinzu addiert werden können. Beispielsweise können, wie es vorher bemerkt wurde, einig Ausführungsformen Indirekt-Abzweig-Target- Adressen als Offsets anstatt voller Adressen speichern. Bei einigen Ausfüh rungsformen kann ein Zusatzschritt verwendet werden, um den gespeicherten Offset zu der Abruf-Adresse und dem von der Offset-Berechnungs-Logik 54 berechneten Offset hinzu zu addieren.
- In Fig. 7 ist ein Blockdiagramm einer Ausführungsform eines Computersystems 100 gezeigt, das konfiguriert ist, um eine Ausführungsform des Mikroprozessors 10 und der Abzweig-Vorhersage-Einheit 14 zu verwenden. Bei dem dargestellten System ist ein Hauptspeicher 204 mit einer Busbrücke 202 durch einen Speicher-Bus 206 gekoppelt, und ein Grafik-Controller 208 ist mit der Busbrücke 202 durch einen AGP-Bus 210 gekoppelt. Schließlich ist eine Mehrzahl von PCI-Vorrichtungen 212A-212B mit der Busbrücke 202 durch einen PCI-Bus 214 gekoppelt. Eine sekundäre Busbrücke 216 kann ferner vorgesehen sein, um eine elektrische Schnittstelle an einer oder mehreren EISA- oder ISA-Vorrichtung(en) 218 durch einen EISA/ISA-Bus 220 unterzubringen. Der Prozessor 10 ist mit der Busbrücke 202 durch einen CPU-Bus 224 gekoppelt. Die Busbrücke 202 stellt eine Schnittstelle zwischen dem Prozessor 10, dem Hauptspeicher 204, dem Grafik-Controller 208 und mit dem PCI-Bus 214 verbundene Vorrichtungen bereit. Wenn ein Vorgang von einer der mit der Busbrücke 202 verbundenen Vorrichtungen empfangen wird, identifiziert die Busbrücke 202 das Target des Vorgangs (z. B. eine bestimmte Vorrichtung oder in dem Fall des PCI-Busses 214, dass das Target auf dem PCI-Bus 214 ist). Die Busbrücke 202 leitet den Vorgang an die Target-Vorrichtung. Die Busbrücke 202 übersetzt im allgemeinen einen Vorgang aus dem von der Quellenvorrichtung oder dem Bus verwendeten Protokoll in das von der Target-Vorrichtung oder dem Bus verwendete Protokoll.
- Zusätzlich zum Bereitstellen einer Schnittstelle an einem ISA/EISA-Bus für den PCI-Bus 214 kann eine sekundäre Busbrücke 216 ferner zusätzliche Funktionalität aufnehmen, wie es gewünscht ist. Beispielsweise umfasst bei einer Aus führungsform die sekundäre Busbrücke 216 einen Master-PCI-Arbiter (nicht gezeigt) zum Arbitrieren der Inhaberschaft des PCI-Busses 214. Ein Eingangs/Ausgangs-Controller (nicht gezeigt), der entweder extern zu der sekundären Busbrücke 216 oder in dieser integriert ist, kann ebenfalls in dem Computersystem 200 aufgenommen sein, um Betriebsunterstützung für eine Tastatur und eine Maus 222 und für verschiedene serielle und parallele Ports bereitzustellen, wie es gewünscht ist. Eine externe Cache-Einheit (nicht gezeigt) kann ferner mit dem CPU-Bus 224 zwischen dem Prozessor 10 und der Busbrücke 202 bei anderen Ausführungsformen gekoppelt sein. Alternativ kann der externe Cache-Speicher mit der Busbrücke 202 gekoppelt sein, und die Cache-Steuerlogik für den externen Cache-Speicher kann in der Busbrücke 202 integriert sein.
- Der Hauptspeicher 204 ist ein Speicher, in dem Anwendungsprogramme gespeichert sind und von dem der Prozessor 10 primär ausführt. Ein geeigneter Hauptspeicher 204 umfasst DRAM (Dynamic Random Access Memory) und vorzugsweise eine Mehrzahl von Banken von SDRAM (Synchronous DRAM).
- Die PCI-Vorrichtungen 212A-212B veranschaulichen eine Vielfalt von Peripherie-Vorrichtungen, wie beispielsweise Netzwerk-Schnittstellen-Karten, Video- Beschleuniger, Audio-Karten, Festplatten- oder Disketten-Laufwerke oder Laufwerk-Controller, SCSI(Small Computer Systems Interface)-Adapter und Telefonie-Karten. Auf ähnliche Weise ist die ISA-Vorrichtung 218 für verschiedene Arten von Peripherie-Vorrichtungen, wie beispielsweise ein Modem, eine Soundkarte und eine Vielfalt von Datenerfassungs-Karten, wie beispielsweise GPIB- oder Feldbus-Schnittsteilenkarten veranschaulichend.
- Der Grafik-Controller 208 ist vorgesehen, um die Aufbereitung von Text und Bildern auf einer Anzeige 226 zu steuern. Der Grafik-Controller 208 kann einen typischen Grafikbeschleuniger, der in der Technik bekannt ist, unterzubringen, um dreidimensionale Datenstrukturen aufzubereiten, die wirksam in und aus dem Hauptspeicher 204 geschoben werden können. Der Grafik- Controller 208 kann daher dadurch ein Master des AGP-Busses 210 sein, dass er Zugriff auf eine Target-Schnittstelle innerhalb der Busbrücke 202 anfordern und empfangen kann, um dadurch Zugriff auf den Hauptspeicher 204 zu erhalten. Ein fest zugeordneter Grafik-Bus bringt eine schnelle Wiederherstellung von Daten von dem Hauptspeicher 204 unter. Für bestimmte Vorgänge kann der Grafik-Controller 208 ferner konfiguriert sein, um PCI-Protokoll- Transaktionen auf dem AGP-Bus 210 zu erzeugen. Die AGP-Schnittstelle der Busbrücke 202 kann somit eine Funktionalität aufweisen, um sowohl die AGP- Protokoll-Transaktionen als auch die PCI-Protokoll-Target- und Initiator- Transaktionen zu unterstützen. Die Anzeige 226 ist eine beliebige elektronische Anzeige, auf der ein Bild oder Text dargestellt werden kann. Eine geeignete Anzeige 226 umfasst eine Kathodenstrahlröhre ("CRT" = Cathode Ray Tube), eine Flüssigkristallanzeige ("LCD" = Liquid Crystal Display), etc..
- Es sei bemerkt, dass, obwohl die AGP-, PCI- und ISA- oder EISA-Busse als Beispiele bei der obigen Beschreibung verwendet Wurden, beliebige Bus- Architekturen substituiert werden können, wie es gewünscht ist. Es sei ferner bemerkt, dass das Computersystem 200 ein Multiprozessor-Computersystem sein kann, das zusätzliche Mikroprozessoren aufweist.
- Es sei ferner bemerkt, dass sich die vorliegende Erläuterung auf die Aktivierung verschiedener Signale beziehen kann. Wie es hier verwendet wird, ist ein Signal "aktiviert", wenn es einen Wert überträgt, der eine besondere Bedingung angibt. Umgekehrt ist ein Signal "deaktiviert" oder "nicht aktiviert", wenn es einen Wert überträgt, der ein Fehlen einer bestimmten Bedingung angibt. Ein Signal kann als aktiviert definiert werden, wenn es einen logischen Nullwert überträgt, oder umgekehrt, wenn es einen logischen Einswert überträgt. Außerdem wurden bei der obigen Erläuterung verschiedene Werte als verworfen beschrieben. Ein Wert kann auf eine Anzahl von Arten verworfen werden, wobei es jedoch im allgemeinen ein Modifizieren des Werts beinhaltet, so dass er von der logischen Schaltungsanordnung, die den Wert empfängt, ignoriert wird. Wenn der Wert beispielsweise ein Bit umfaßt, kann der logische Zustand des Werts invertiert werden, um den Wert zu verwerfen. Wenn der Wert ein n-Bit-Wert ist, kann einer der n-Bit-Kodierungen angeben, das der Wert ungültig ist. Das Setzen des Werts auf die ungültige Kodierung veranlasst, dass der Wert verworfen wird. Außerdem kann ein n-Bit-Wert ein Gültig- Bit umfassen, das, wenn es gesetzt ist, angibt, dass der n-Bit-Wert gültig ist. Ein Rücksetzen des Gültig-Bits kann ein Verwerfen des Werts umfassen. Weitere Verfahren zum Verwerfen eines Werts können ebenfalls verwendet werden.
- Die vorliegende Erfindung kann allgemein auf Mikroprozessoren und Computersysteme anwendbar sein.
- Zahlreiche Variationen und Modifikationen werden Fachleuten offensichtlich sein, sobald die obige Offenbarung voll gewürdigt ist. Es ist beabsichtigt, dass die folgenden Ansprüche interpretiert werden, um alle derartigen Variationen und Modifikationen zu umfassen.
Claims (16)
1. Mikroprozessor mit:
einem Instruktions-Cache-Speicher (16), der zum Empfangen und
Speichern von Instruktions-Bytes konfiguriert ist, wobei der
Instruktionscache-Speicher (16) derart konfiguriert ist, dass er eine Abruf-Adresse
empfängt und als Reaktion auf diese ein oder mehrere der Instruktions-
Bytes ausgibt, die der Abruf-Adresse entsprechen,
einem Abzweig-Selektor-Array (50), das zum Speichern mehrerer
Selektor-Bits konfiguriert ist, von denen jedes einem bestimmten, in dem
Instruktions-Cache-Speicher (16) gespeicherten Instruktions-Byte
entspricht, wobei das Abzweig-Selektor-Array (50) derart konfiguriert ist,
dass es die Abruf-Adresse empfängt und als Reaktion auf diese ein oder
mehrere entsprechende Selektor-Bits ausgibt, die eine Quelle einer
vorhergesagten nächsten Abruf-Adresse angeben,
einem Sequentiell-Adress-Addierer (52), der derart konfiguriert ist, dass
er der Abruf-Adresse eine Abruf-Block-Größe hinzuaddiert, um die
nächste sequentielle Adresse zu erzeugen,
einem Target-Cache-Speicher (58) für indirekte Abzweige, der derart
konfiguriert ist, dass er vorhergesagte Abzweig-Zieladressen für in dem
Instruktions-Cache-Speicher (16) gespeicherte Abzweig-Adressen
speichert, wobei der Indirekt-Abzweig-Target-Cache-Speicher (58) derart
konfiguriert ist, dass er die Abruf-Adressen empfängt und eine
entsprechende Indirekt-Abzweig-Adresse ausgibt, und
einem Direkt-Abzweig-Addierer (56), der derart konfiguriert ist, dass er
der Abruf-Adresse ein Offset gegenüber den Instruktions-Bytes von dem
Instruktions-Cache-Speicher (16) hinzuaddiert, um eine direkte Abzweig-
Adresse zu berechnen,
einem Multiplexer (64), der derart konfiguriert ist, dass er das eine oder
die mehreren entsprechenden Selektor-Bits von dem Abzweig-Selektor-
Array (50) empfängt, wobei der Multiplexer (64) derart konfiguriert ist,
dass er basierend auf den Selektor-Bits die nächste sequentielle Adresse
oder die direkte Abzweig-Adresse oder die Indirekt-Abzweig-Adresse
wählt.
2. Mikroprozessor nach Anspruch 1, bei dem der
Sequentiell-Adress-Addierer (52), der Direkt-Abzweig-Addierer (56) und der Indirekt-Abzweig-
Target-Cache-Speicher (58) zum parallelen Berechnen der nächsten
sequentiellen Adresse bzw. der direkten Abzweig-Adresse bzw. der
Indirekt-Abzweig-Adresse konfiguriert sind.
3. Mikroprozessor nach Anspruch 2, ferner mit einer Offset-Berechnungs-
Logikeinheit (54), die derart konfiguriert ist, dass sie das Offset von den
aus den Instruktions-Cache-Speicher (16) ausgegebenen Instruktions-
Bytes berechnet, wobei die Offset-Berechnungs-Logikeinheit (54) derart
konfiguriert ist, dass sie das Offset basierend auf den Selektor-Bits
berechnet.
4. Mikroprozessor nach Anspruch 3, bei dem jedem in dem Instruktions-
Cache-Speicher (16) gespeicherten Instruktions-Byte zwei der Selektor-
Bits entsprechen, wobei die beiden Bytes angeben, ob die entsprechende
Instruktion (i) eine nicht genommene Abzweig-Instruktion, (ii) eine
genommene Direkt-Abzweig-Instruktion, (iii) eine genommene Indirekt-
Abzweig-Adresse oder (iv) eine genommene Rückkehr-Adresse ist.
5. Mikroprozessor nach Anspruch 4, bei dem der
Instruktions-Cache-Speicher (16) zum Speichern von Vordekodier-Information für die
Instruktions-Bytes konfiguriert ist, wobei die Vordekodier-Information
Vordekodier-Bits enthält, die Instruktions-Start-Bytes angeben.
6. Mikroprozessor nach Anspruch 5, bei dem die Abruf-Block-Größe eine
Konstante ist.
7. Mikroprozessor nach Anspruch 6, ferner mit einem Rückkehr-Stapel (60),
der mit dem Multiplexer (64) verbunden und zum Speichern von
Instruktions-Pointern für Instruktionen konfiguriert ist, welche unmittelbar auf
Ruf-Instruktionen folgen.
8. Mikroprozessor nach Anspruch 2, bei dem das Abzweig-Selektor-Array
(50) und der Indirekt-Abzweig-Target-Cache-Speicher (58) jeweils
mehrfach-assoziativ sind und zum Speichern von Tags konfiguriert sind, die
mit den Abruf-Adressen verglichen werden, um festzustellen, welche
gespeicherten Selektor-Bits und Indirekt-Abzweig-Target-Adressen, falls
vorhanden, den Speicher-Adressen entsprechen.
9. Verfahren zum Erzeugen vorhergesagter nächster Abzweig-Adressen in
einem Mikroprozessor (10) gemäß Anspruch 17, mit den folgenden
Schritten:
Empfangen einer aktuellen Abruf-Adresse;
Ausgeben von Instruktions-Bytes und Vordekodier-Information, die der
aktuellen Abruf-Adresse entsprechen, aus einem Instruktions-Cache-
Speicher (16);
Ausgeben von der aktuellen Abruf-Adresse entsprechenden Selektor-Bits
aus einem Abzweig-Selektor-Array (50);
Hinzuaddieren der aktuellen Abruf-Adresse zu einer
Abruf-Block-Konstanten zwecks Erzeugens einer nächsten sequentiellen Adresse;
Ausgeben einer gespeicherten Indirekt-Abzweig-Adresse aus einem
Indirekt-Abzweig-Target-Cache-Speicher (58),
Ausgeben einer gespeicherten Rückkehr-Adresse aus einem Rückkehr-
Stapel (60);
Berechnen eines Offsets;
Hinzuaddieren der aktuellen Abruf-Adresse zu dem Offset zwecks
Erzeugens einer nächsten Direkt-Abzweigs-Adresse; und
Wählen einer der folgenden Adressen als vorhergesagter nächster
Abzweig-Adresse: (i) der nächsten sequentiellen Adresse; (ii) der
ausgegebenen Indirekt-Abzweig-Adresse; (iii) der ausgegebenen
Rückkehr-Adresse; (iv) der nächsten Direkt-Abzweig-Adresse.
10. Verfahren nach Anspruch 9, bei dem das Ausgeben der aktuellen Abruf-
Adresse, das Ausgeben der gespeicherten Indirekt-Abzweig-Adresse, das
Ausgeben der gespeicherten Rückkehr-Adresse und das Hinzuaddieren
der aktuellen Abruf-Adresse zu dem Offset zwecks Erzeugen der nächsten
Direkt-Abzweig-Adresse sämtlich parallel durchgeführt wird.
11. Verfahren nach Anspruch 9 oder Anspruch 10, ferner mit den folgenden
Schritten:
Erzeugen und Speichern von Selektor-Bits für in einem Instruktions-
Cache-Speicher (16) gespeicherte Instruktions-Bytes; und
Wählen der vorhergesagten nächsten Abruf-Adresse basierend auf den
Selektor-Bits.
12. Verfahren nach Anspruch 11, ferner mit dem Schritt des Aktualisierens
der Selektor-Bits basierend auf den Ergebnissen in dem
Instruktionscache-Speicher (16) gespeicherter Abzweig-Instruktionen.
13. Verfahren nach Anspruch 12, bei dem der Berechnungsvorgang folgende
Schritte enthält:
Feststellen eines ersten bestimmten Offsets von der aktuellen Abruf-
Adresse einer als genommen vorhergesagten ersten
Direkt-Abruf-Instruktion aus dem Instruktions-Cache-Speicher (16), und
Detektieren eines zweiten bestimmten Offsets, das als unmittelbarer
Datenwert innerhalb der ersten Direkt-Abruf-Instruktion gespeichert ist,
wobei der Addiervorgang das Addieren der aktuellen Abruf-Adresse, des
ersten Offsets und des zweiten Offsets enthält.
14. Verfahren nach Anspruch 13, ferner mit der Verwendung von Tags zum
Zugreifen auf die Selektor-Bits.
15. Verfahren nach Anspruch 14, ferner mit der Verwendung von Tags zum
Zugreifen auf den Indirekt-Abzweig-Target-Cache-Speicher.
16. Verfahren nach Anspruch 15, ferner mit dem Schritt des Speicherns
mehrerer Vordekodier-Bits in dem Instruktions-Cache-Speicher (16), wobei
die Vordekodier-Bits das Vorhandensein von Abzweig-Instruktionen und
das Vorhandensein von Offset-Bytes angeben, die als unmittelbare Daten
in den Direkt-Abzweig-Instruktionen gespeichert sind.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/157,721 US6279106B1 (en) | 1998-09-21 | 1998-09-21 | Method for reducing branch target storage by calculating direct branch targets on the fly |
PCT/US1999/007266 WO2000017745A1 (en) | 1998-09-21 | 1999-04-02 | Method for calculating indirect branch targets |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69901910D1 DE69901910D1 (de) | 2002-07-25 |
DE69901910T2 true DE69901910T2 (de) | 2003-02-13 |
Family
ID=22564987
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69901910T Expired - Fee Related DE69901910T2 (de) | 1998-09-21 | 1999-04-02 | Verfahren und gerät zur rechnung von indirekten verzweigungszieladressen |
Country Status (6)
Country | Link |
---|---|
US (1) | US6279106B1 (de) |
EP (1) | EP1116102B1 (de) |
JP (1) | JP3871883B2 (de) |
KR (1) | KR20010075258A (de) |
DE (1) | DE69901910T2 (de) |
WO (1) | WO2000017745A1 (de) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6651162B1 (en) * | 1999-11-04 | 2003-11-18 | International Business Machines Corporation | Recursively accessing a branch target address cache using a target address previously accessed from the branch target address cache |
US6609194B1 (en) * | 1999-11-12 | 2003-08-19 | Ip-First, Llc | Apparatus for performing branch target address calculation based on branch type |
US6640297B1 (en) * | 2000-06-19 | 2003-10-28 | Transmeta Corporation | Link pipe system for storage and retrieval of sequences of branch addresses |
US7707397B2 (en) * | 2001-05-04 | 2010-04-27 | Via Technologies, Inc. | Variable group associativity branch target address cache delivering multiple target addresses per cache line |
US7165168B2 (en) * | 2003-01-14 | 2007-01-16 | Ip-First, Llc | Microprocessor with branch target address cache update queue |
US7200740B2 (en) * | 2001-05-04 | 2007-04-03 | Ip-First, Llc | Apparatus and method for speculatively performing a return instruction in a microprocessor |
US20020194461A1 (en) * | 2001-05-04 | 2002-12-19 | Ip First Llc | Speculative branch target address cache |
US7165169B2 (en) * | 2001-05-04 | 2007-01-16 | Ip-First, Llc | Speculative branch target address cache with selective override by secondary predictor based on branch instruction type |
US6886093B2 (en) * | 2001-05-04 | 2005-04-26 | Ip-First, Llc | Speculative hybrid branch direction predictor |
US7134005B2 (en) * | 2001-05-04 | 2006-11-07 | Ip-First, Llc | Microprocessor that detects erroneous speculative prediction of branch instruction opcode byte |
US6895498B2 (en) * | 2001-05-04 | 2005-05-17 | Ip-First, Llc | Apparatus and method for target address replacement in speculative branch target address cache |
US7234045B2 (en) * | 2001-07-03 | 2007-06-19 | Ip-First, Llc | Apparatus and method for handling BTAC branches that wrap across instruction cache lines |
US7162619B2 (en) * | 2001-07-03 | 2007-01-09 | Ip-First, Llc | Apparatus and method for densely packing a branch instruction predicted by a branch target address cache and associated target instructions into a byte-wide instruction buffer |
US6823444B1 (en) * | 2001-07-03 | 2004-11-23 | Ip-First, Llc | Apparatus and method for selectively accessing disparate instruction buffer stages based on branch target address cache hit and instruction stage wrap |
US7203824B2 (en) * | 2001-07-03 | 2007-04-10 | Ip-First, Llc | Apparatus and method for handling BTAC branches that wrap across instruction cache lines |
US20030088758A1 (en) * | 2001-11-08 | 2003-05-08 | Matthew Becker | Methods and systems for determining valid microprocessor instructions |
US6948053B2 (en) * | 2002-02-25 | 2005-09-20 | International Business Machines Corporation | Efficiently calculating a branch target address |
US7159097B2 (en) * | 2002-04-26 | 2007-01-02 | Ip-First, Llc | Apparatus and method for buffering instructions and late-generated related information using history of previous load/shifts |
US7533382B2 (en) * | 2002-10-30 | 2009-05-12 | Stmicroelectronics, Inc. | Hyperprocessor |
US7143269B2 (en) * | 2003-01-14 | 2006-11-28 | Ip-First, Llc | Apparatus and method for killing an instruction after loading the instruction into an instruction queue in a pipelined microprocessor |
US7185186B2 (en) * | 2003-01-14 | 2007-02-27 | Ip-First, Llc | Apparatus and method for resolving deadlock fetch conditions involving branch target address cache |
US7152154B2 (en) * | 2003-01-16 | 2006-12-19 | Ip-First, Llc. | Apparatus and method for invalidation of redundant branch target address cache entries |
US7178010B2 (en) * | 2003-01-16 | 2007-02-13 | Ip-First, Llc | Method and apparatus for correcting an internal call/return stack in a microprocessor that detects from multiple pipeline stages incorrect speculative update of the call/return stack |
US7743238B2 (en) * | 2003-05-09 | 2010-06-22 | Arm Limited | Accessing items of architectural state from a register cache in a data processing apparatus when performing branch prediction operations for an indirect branch instruction |
US7237098B2 (en) * | 2003-09-08 | 2007-06-26 | Ip-First, Llc | Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence |
US7487334B2 (en) * | 2005-02-03 | 2009-02-03 | International Business Machines Corporation | Branch encoding before instruction cache write |
US7409535B2 (en) * | 2005-04-20 | 2008-08-05 | International Business Machines Corporation | Branch target prediction for multi-target branches by identifying a repeated pattern |
US7865705B2 (en) * | 2008-02-01 | 2011-01-04 | International Business Machines Corporation | Branch target address cache including address type tag bit |
US7844807B2 (en) * | 2008-02-01 | 2010-11-30 | International Business Machines Corporation | Branch target address cache storing direct predictions |
US20110078425A1 (en) * | 2009-09-25 | 2011-03-31 | Shah Manish K | Branch prediction mechanism for predicting indirect branch targets |
US20110093658A1 (en) * | 2009-10-19 | 2011-04-21 | Zuraski Jr Gerald D | Classifying and segregating branch targets |
EP2597123B1 (de) | 2011-11-23 | 2017-06-14 | Basf Se | Wässriges Bindemittel für körnige und/oder faserförmige Substrate |
CN103513958B (zh) * | 2012-06-27 | 2017-01-25 | 上海芯豪微电子有限公司 | 高性能指令缓存系统和方法 |
US9317293B2 (en) | 2012-11-28 | 2016-04-19 | Qualcomm Incorporated | Establishing a branch target instruction cache (BTIC) entry for subroutine returns to reduce execution pipeline bubbles, and related systems, methods, and computer-readable media |
US20140250289A1 (en) * | 2013-03-01 | 2014-09-04 | Mips Technologies, Inc. | Branch Target Buffer With Efficient Return Prediction Capability |
US9940262B2 (en) * | 2014-09-19 | 2018-04-10 | Apple Inc. | Immediate branch recode that handles aliasing |
US11977891B2 (en) | 2015-09-19 | 2024-05-07 | Microsoft Technology Licensing, Llc | Implicit program order |
US10936316B2 (en) | 2015-09-19 | 2021-03-02 | Microsoft Technology Licensing, Llc | Dense read encoding for dataflow ISA |
GB2573119A (en) * | 2018-04-24 | 2019-10-30 | Advanced Risc Mach Ltd | Maintaining state of speculation |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62226232A (ja) | 1986-03-28 | 1987-10-05 | Toshiba Corp | 分岐先アドレス算出回路 |
EP0253364A1 (de) | 1986-07-16 | 1988-01-20 | Siemens Aktiengesellschaft | Verfahren und Schaltungsanordnung zur Bearbeitung von unbedingten Sprungbefehlen in nach dem Fliessbandprinzip arbeitenden Datenverarbeitungsanlagen |
JP3494736B2 (ja) | 1995-02-27 | 2004-02-09 | 株式会社ルネサステクノロジ | 分岐先バッファを用いた分岐予測システム |
US5995749A (en) | 1996-11-19 | 1999-11-30 | Advanced Micro Devices, Inc. | Branch prediction mechanism employing branch selectors to select a branch prediction |
US6061786A (en) * | 1998-04-23 | 2000-05-09 | Advanced Micro Devices, Inc. | Processor configured to select a next fetch address by partially decoding a byte of a control transfer instruction |
-
1998
- 1998-09-21 US US09/157,721 patent/US6279106B1/en not_active Expired - Fee Related
-
1999
- 1999-04-02 WO PCT/US1999/007266 patent/WO2000017745A1/en not_active Application Discontinuation
- 1999-04-02 DE DE69901910T patent/DE69901910T2/de not_active Expired - Fee Related
- 1999-04-02 JP JP2000571339A patent/JP3871883B2/ja not_active Expired - Fee Related
- 1999-04-02 EP EP99915226A patent/EP1116102B1/de not_active Expired - Lifetime
- 1999-04-02 KR KR1020017003618A patent/KR20010075258A/ko not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
WO2000017745A1 (en) | 2000-03-30 |
JP3871883B2 (ja) | 2007-01-24 |
DE69901910D1 (de) | 2002-07-25 |
US6279106B1 (en) | 2001-08-21 |
EP1116102A1 (de) | 2001-07-18 |
JP2002525741A (ja) | 2002-08-13 |
EP1116102B1 (de) | 2002-06-19 |
KR20010075258A (ko) | 2001-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69901910T2 (de) | Verfahren und gerät zur rechnung von indirekten verzweigungszieladressen | |
DE69904479T2 (de) | Registerumbenennung wobei übertragungsinstruktionen mittels umbenennungsschildernzeichen realisiert werden | |
DE69835100T2 (de) | Prozessor konfiguriert um vorausschauende resultate von zusammengefassten übertragungs-, vergleichs- und einfachen arithmetischen befehlen zu produzieren | |
DE60102017T2 (de) | Räumungsfilter für adressenübersetzungspuffer | |
DE69518362T2 (de) | Wiedersynchronisierung eines Superskalarprozessors | |
DE60036016T2 (de) | Schnell multithreading für eng gekoppelte multiprozessoren | |
DE69802209T2 (de) | An bytebereiche innerhalb eines befehlscaches gebundene verzweigungsselektoren zur schnellen identifizierung von verzweigungsprädiktoren | |
DE69902392T2 (de) | Verwenden von ecc/paritätsbits zum speichern von vor- dekodierungs-informationen | |
DE69932066T2 (de) | Mechanismus zur "store-to-load forwarding" | |
DE69031433T2 (de) | Speicherzugriffsausnahmebehandlung bei vorausgelesenen Befehlswörtern in dem Befehlsfliessband eines Rechners mit virtuellem Speicher | |
DE60009151T2 (de) | Vorhersage von datenbeförderung von speicher- zum ladebefehl mit untrainierung | |
DE60025028T2 (de) | Speicherpuffer, der daten, basierend auf index und freiwilliger weisebemusterung überträgt | |
DE69429061T2 (de) | Superskalarmikroprozessoren | |
DE69904189T2 (de) | Konfigurierter prozessor zur abbildung von logischen registernummern auf physikalische registernummern unter verwendung von virtuellen registernummern | |
DE69427672T2 (de) | Befehlscachespeicher für Befehle mit variabler Byteslänge | |
DE69727773T2 (de) | Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor | |
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 | |
DE69504135T2 (de) | Einrichtung zur Aktualisierung von Programmzählern | |
DE69802105T2 (de) | Befehlsausrichtungseinheit mit doppelten befehlswarteschlangen zur hochfrequenz-befehlszuteilung | |
DE69131637T2 (de) | Registerhaltige Datenbearbeitung in einem Prozessor mit reduziertem Befehlssatz | |
DE69908175T2 (de) | Verbesserte befehlsdekodierung durch paralleldekodierungsalgorithmus | |
DE68928812T2 (de) | Vorrichtung zur Auflösung von einer variablen Anzahl von möglichen Speicherzugriffskonflikten in einem Pipeline-Rechnersystem und Verfahren dazu | |
DE69612991T2 (de) | System zur bearbeitung von selbstmodifizierendem kode | |
DE69802562T2 (de) | Prozessor mit vordekodierung von relativen verzweigungsbefehlen | |
DE69710503T2 (de) | Verzweigungsvorhersagemechanismus mit auswahlschaltern zum auswählen einer verzweigungsvorhersage |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |