-
Die
vorliegende Erfindung betrifft Cache-Speicher und Verfahren zum
Schreiben von Daten wie zum Beispiel Befehle, in einen Cache-Speicher
eines Computersystems.
-
Um
ein Computerprogramm laufen zu lassen, führt ein Computer wiederholend
eine Folge von Funktionen aus, typischerweise indem ein Befehl, der
an einer vorgegebenen Adresse gespeichert ist, abgerufen wird, der
Befehl dekodiert wird, auf einen Operanden zur Verwendung durch
den Befehl zugegriffen wird, der Befehl ausgeführt wird, das Ergebnis der
Ausführung
gespeichert wird und die nächste
Befehlsadresse ermittelt wird. Probleme können auftreten, wenn ein Befehl
eine Überprüfung aufweist,
dessen Ergebnis die Adresse des nächsten auszuführenden
Befehls bestimmt. Ein Befehl dieser Art ist als bedingter Sprung
bekannt.
-
Die
Folge des Vorhandenseins eines bedingten Sprungbefehls besteht darin,
dass der Befehl typischerweise durch einige Pipeline-Stufen (Parallelverarbeitungsstufen)
in einem Prozess zu durchlaufen hat, bevor die Überprüfung gelöst ist und bevor der nächste abzurufende
Befehl mit Sicherheit bestimmt werden kann. Dies kann den Pipeline-Prozess
verzögern.
-
Eine
Programmfolge kann auch nicht bedingte Sprungbefehle aufweisen.
Derartige Befehle führen,
wenn sie ausgeführt
werden, in der Programmfolge zu einem Sprung zu einem neuen Befehl.
-
Zwecks
der vorliegenden Beschreibung und Ansprüche wird der Begriff "Verzweigungsbefehl" verwendet, um sowohl
bedingte als auch nicht bedingte Sprungbefehle zu umfassen.
-
In
dieser Spezifikation umfasst der Begriff Befehl einfache Operationen,
die in einem VLIW-System unter Verwendung von sehr langen Befehlsworten
(engl.: Very Long Instruction Words) integriert sein können. Ein
Befehlswort oder -folge kann daher einen VLIW-Befehl umfassen.
-
Um
eine Verzögerung
beim Ermitteln der nächsten
Abrufadresse zu verkleinern, können
Verzweigungsbefehle in einen Cache-Speicher, wie zum Beispiel ein Verzweigungszielpuffer,
geladen werden, um zu versuchen, eine neue Befehlszieladresse vorher
zu sagen.
-
Es
ist eine Aufgabe der vorliegenden Erfindung, zu vermeiden, dass
ein adressierbarer Eintrag, wie zum Beispiel ein Verzweigungsbefehl,
in zwei oder mehr Leitungen des gleichen Cache eingetragen wird.
-
Die
vorliegende Erfindung stellt ein Verfahren bereit, um Einträge in einen
Cache-Speicher zu laden, der einen inhaltsadressierbaren (CAM engl.: Content
Addressable Memory)-Bereich mit einer Mehrzahl von Leitungen umfasst,
die jeweils mit einer entsprechenden Leitung eines Datenspeicherbereichs
verbunden sind, wobei das Verfahren dadurch gekennzeichnet ist,
gleichzeitig eine zugeordnete Operation und eine Schreiboperation
mit den gleichen Adressdaten zu bewirken und das Ergebnis der zugeordneten
Operation zu verwenden, um die Schreiboperation für gültig zu
erklären,
wenn die zugeordnete Operation ein negatives Ergebnis hat, und dadurch
zu verhindern, dass eine einzelne Adresse zwei Einträge in dem
gleichen Cache aufweist.
-
Vorzugsweise
umfasst das Verfahren, die Gültigkeit
einer oder mehrerer Leitungen in dem Cache selektiv zu steuern,
eine Leitung des Cache für ungültig zu
erklären,
Daten einschließlich
einer Adresse auf die genannte eine Leitung zu dem gleichen Zeitpunkt
zu schreiben, zu dem eine zugeordnete Operation unter Verwendung
der gleichen Adresse durchgeführt
wird, und ein wieder gültig
Erklären
der genannten einen Leitung in Abhängigkeit von dem Ergebnis der
zugeordneten Operation zu steuern, wobei dadurch die genannte Leitung
nur dann für
gültig
erklärt
wird, wenn kein Cache-Treffer aufgefunden wird.
-
Bei
einer Ausführungsform
werden in Antwort auf einen Cache-Treffer in einer CAM-Leitung Daten,
die in dieser Leitung des Datenspeicherbereichs gespeichert sind,
durch die Schreiboperation modifiziert. Vorzugsweise ist ein zugeordneter
Eingang des CAM mit einer Auswahlschaltkreisanordnung verbunden
ist, die ausgelegt ist, sowohl Schreibdaten als auch zugeordnete
Daten zu empfangen, wobei das Verfahren umfasst, die Auswahlschaltkreisanordnung
zu betreiben, wenn eine Schreiboperation bewirkt wird, um die Schreibdaten für den zugeordneten
Eingang auszuwählen.
-
Die
Erfindung umfasst ein Verfahren, einen Verzweigungszielpuffer zu
betreiben, das umfasst, das zuvor genannte Verfahren zu verwenden,
um zu verhindern, dass die Adresse eines einzelnen Verzweigungsbefehls
als mehrfacher Eintrag in dem Puffer gespeichert wird, welches Verfahren
umfasst, die Gültigkeit
einer oder mehrerer Leitungen in dem Cache selektiv zu steuern,
eine Leitung des Cache für
ungültig
zu erklären,
Daten einschließlich
einer Adresse auf die genannte eine Leitung zu dem gleichen Zeitpunkt
zu schreiben, zu dem eine zugeordnete Operation unter Verwendung
der gleichen Adresse durchgeführt
wird, und die genannte eine Leitung wieder für gültig zu erklären, wenn
das Ergebnis der zugeordneten Operation negativ ist.
-
Die
Erfindung umfasst einen Cachespeicher mit einem inhaltsadressierbaren
Speicher-(CAM; engl.: Content Addressable Memory)-Bereich mit Adressdaten
und einer Mehrzahl von Leitungen, die jeweils mit einer entsprechenden
Leitung eines Datenspeicherbereichs verbunden sind, wobei der CAM-Bereich
einen zugeordneten Eingang zur Eingabe von Adressdaten, um eine
zugeordnete Operation zu bewirken, und einen Schreibeingang zur
Eingabe von Adressdaten aufweist, um eine Schreiboperation zu bewirken,
wobei der zugeordnete Eingang mit einer Eingangsauswahlschaltkreisanordnung
verbunden ist, um entweder Schreibdaten oder zugeordnete Daten zur
Verbindung zu dem zugeordneten Eingang auszuwählen, wodurch eine zugeordnete
Operation gleichzeitig mit einer Schreiboperation unter Verwendung
gemeinsamer Adressdaten bewirkt werden kann, wobei der Speicher ferner
eine Leitungsgültigkeitsschaltkreisanordnung
umfasst, die betriebsfähig
ist, eine Leitung für
ungültig
zu erklären
und die Leitung wieder für
gültig
zu erklären, wenn
das Ergebnis der zugeordneten Operation negativ ist und zu verhindern,
dass die gemeinsame Adresse in mehr als einer Leitung des Cache
gespeichert wird.
-
Die
Erfindung umfasst ein Computersystem mit einem Speicher zum Speichern
einer Mehrzahl von Befehlen, einem Prozessor zum sequenziellen Ausführen einer
Mehrzahl von Befehlen und einem Verzweigungszielpuffer wie zuvor
ausgeführt,
um eine Zieladresse für
einen Verzweigungsbefehl vorherzusagen, der zur Ausführung durch
den Prozessor aus dem Speicher abgerufen wird.
-
Das
U.S.-Patent 5,414,822 und die GB 2285526 betreffen Verzweigungszielpuffer
und eine Schaltkreisanordnung zum Vorhersagen von Verzweigungen.
Sie umfassen eine Schaltkreisanordnung für Schreiboperationen sowie
die Fähigkeit, eine
zugeordnete Operation auszuführen.
Sie offenbaren jedoch keinen gleichzeitigen Betrieb von zugeordneten
und Schreiboperationen auf die gleichen Daten.
-
Einige
Ausführungsformen
der vorliegenden Erfindung sind nun Bezug nehmend auf die beigefügten Zeichnungen
beschrieben, in denen:
-
1 ein
vereinfachtes Beispiel einer Reihe von Befehlen zeigt;
-
2 ein
schematisches Teildiagramm einer Schaltkreisanordnung zur Implementierung
des Verfahrens dieser Erfindung zeigt;
-
3 ein
teilweises Blockdiagramm einer Ausführungsform eines Verzweigungszielpuffer
zur Implementierung der Erfindung zeigt;
-
4 ein
veranschaulichendes Schaltkreisdiagramm einer Lese-Schaltkreisanordnung
einer Partition des Verzweigungszielpuffers von 3 zeigt;
-
5 den
Inhalt von CAM-Zellen und Daten-RAMs des Verzweigungszielpuffers
von 3 beim Bearbeiten der Befehle von 1 zeigt;
-
6 ein
erstes Beispiel zeigt, die vorhergesagten Verzweigungswerte für einen
Befehl zu aktualisieren;
-
7 ein
zweites Beispiel zeigt, die vorhergesagten Verzweigungswerte für einen
Befehl zu aktualisieren;
-
8 eine
Schreib-Schaltkreisanordnung einer Leitung einer Partition des Verzweigungszielpuffers
von 3 zeigt, die mit einem Teil eines Computersystems
verbunden ist; und
-
9 ein
Computersystem zeigt, das den Verzweigungszielpuffer von 3 umfasst.
-
1 zeigt
eine Reihe von zwanzig Ein-Byte-Befehlen 0–19 in einem Computerprogramm.
Wie in der Figur zu sehen, wird jeder Befehl durch eine Befehlsnummer
(0–19)
und durch eine Adresse repräsentiert,
die eine Speicherstelle angibt, an der der Befehl gespeichert ist
und die durch das binäre Äquivalent
der Befehlsnummer repräsentiert ist.
Die Befehle sind in veranschaulichender Weise in Folgen von vier
Befehlen 101, 102, 103, 104, 105 gruppiert.
Jede dieser Gruppen wird als Befehlswort bezeichnet. Jedes Befehlswort
weist eine einzelne Wortadresse auf, wobei die des Befehlsworts 101 "000" ist, die des Befehlsworts 102 "001" ist und so weiter.
Jeder Befehl weist eine Byteadresse auf, die dessen Position innerhalb
des Worts angibt, so dass der erste Befehl jedes Worts eine Byteadresse
von "00" hat, der zweite "01" und so weiter. Der
größte Teil
der Befehle, insbesondere die Befehle 0–4, 6, 8, 10, 11, 13 und 15–19 führen unmittelbar
zu dem nächsten
folgenden Be fehl; diese Befehle sind mit "X" markiert.
Der Befehl 12 (mit "j" markiert) wird als nicht
bedingter Sprung bezeichnet, weil, wenn die Ausführung den Befehl 12 erreicht,
das Ergebnis darin besteht, zu dem Befehl 16 zu springen. Die Befehle
5, 7, 9 und 14 (markiert mit "cj") sind jeweils als
bedingte Sprünge
bezeichnet. Der nächste
Befehl, der nach einem bedingten Sprung ausführen ist, hängt typischerweise von einer überprüften Bedingung
ab und kann beispielsweise bestimmt werden, wenn der Wert des Operanden,
der als Ergebnis des Befehls gespeichert ist, der dem bedingten
Sprung zeitlich unmittelbar vorangeht, einen vorgegebenen Wert überschreitet.
Der Befehl, zu dem der Sprung stattfinden wird, wenn die Bedingung
erfüllt
ist, ist in der Figur angegeben. Daher folgt dem Befehl 5 entweder der
Befehl 6 oder der Befehl 13 abhängig
von dem Wert, der von dem Befehl 4 geliefert wird. Abhängig von
dem von dem Befehl 6 gelieferten Wert folgt dem Befehl 7 entweder
der Befehl 8 oder der Befehl 0. Abhängig von dem von dem Befehl
8 gelieferten Wert folgt dem Befehl 9 der Befehl 13 oder der Befehl
10. Dem Befehl 14 folgt entweder der Befehl 15 oder der Befehl 2
abhängig
von dem Wert, der von dem Befehl 13 geliefert wird.
-
Bei
einigen Computern werden die Befehle vom Speicher einzeln abgerufen,
wobei der Befehl 0 zuerst abgerufen wird und dann der Befehl 1 abgerufen
wird und so weiter. Bei bestimmen Computern ist es jedoch vorgesehen,
mehrere Befehle zusammen in einer als Befehlsworte bezeichneten
Folge einander zuzuordnen, so dass ein Abrufen von einer adressierbaren
Stelle die mehreren Befehle des Worts zur Ausführung verfügbar macht. Bei der vorliegenden
Beschreibung soll der Begriff "Befehlswort" nicht einschränkend sein
und wird der Einfachheit halber verwendet, um auf eine Mehrzahl
von Befehlen oder einen VLIW-Befehl zu verweisen, die abgerufen
werden können,
indem auf eine einzelne Adresse im Speicher zugegriffen wird.
-
Bei
dem in 1 gezeigten Beispiel von Befehlsworten enthält das erste
Befehlswort 101 keine Verzweigungsbefehle, d. h. keine
bedingten Sprünge und
keine nicht bedingten Sprünge.
Das zweite Befehlswort 102 enthält zwei für bedingte Sprungbefehle, die
Befehle 5 und 7. Das dritte Befehlswort 103 enthält einen
bedingten Sprungbefehl, den Befehl 9. Das vierte Befehlswort 104 enthält einen
nicht bedingten Sprungbefehl, den Befehl 12, und einen bedingten
Sprungbefehl, den Befehl 14. Das fünfte Befehlswort enthält keine
Befehle für
Sprünge
oder bedingte Sprünge.
-
Es
ist ersichtlich, dass der Programmfluss aufgrund der Ausführung des
ersten Befehlsworts 101 immer der gleiche sein wird, nämlich eine
Ausführung
des ersten Befehls 4 des zweiten Befehlsworts 102. Eine
Ausführung
des zweiten Befehlsworts 102 bewirkt drei mögliche Programmflüsse, nämlich eine
Ausführung
des ersten Befehls 8 des dritten Befehlsworts 103 (wenn
kein bedingter Sprung ausgeführt
wird), eine Ausführung
des zweiten Befehls 13 des vierten Befehlsworts 104 (wenn der
bedingte Sprung bei Befehl 5 ausgeführt wird) oder eine Ausführung des
ersten Befehls 0 des ersten Befehlsworts 101 (wenn der
bedingte Sprung bei Befehl 7 ausgeführt wird). In vergleichbarer
Weise besteht das Ergebnis einer Ausführung des dritten Befehlsworts 103 darin,
entweder den ersten Befehl 12 des vierten Befehlsworts 104 auszuführen (wenn der
bedingte Sprung bei Befehl 9 nicht ausgeführt wird) oder den zweiten
Befehl 13 des vierten Befehlsworts 104 auszuführen (wenn
der bedingte Sprung bei Befehl 9 ausgeführt wird). Schließlich besteht
das Ergebnis einer Ausführung
des vierten Befehlsworts 104 darin, entweder den Befehl
16 auszuführen,
was geschieht, wenn der erste Befehl 12 des Befehlsworts 104 ausgeführt worden
ist oder wenn der bedingte Sprungbefehl 14 nicht ausgeführt wird,
oder das alternative Ergebnis besteht in einem Zurückkehren
zum dem Befehl 2 des ersten Befehlsworts 101.
-
Für eine optimale
Betriebsgeschwindigkeit sollte der Computer, der ein vorgegebenes
Befehlswort zur Ausführung
abgerufen hat, als nächstes
das korrekte Befehlswort abrufen, das heißt, das Befehlswort, das den
nächsten
Befehl enthält,
der ausgeführt werden
soll. Aus dem Vorherigen ist es jedoch ersichtlich, dass die Identität des nächsten auszuführenden
Befehls variieren kann, wenn das aktuelle Befehlswort einen Verzweigungsbe fehl
enthält.
Man nehme beispielsweise das vierte Befehlswort 104:
Das
Befehlswort 104 kann entweder in Antwort auf eine Ausführung des
Befehls 9 oder des Befehls 11 des dritten Befehlsworts 103 oder
in Antwort auf eine Ausführung
des Befehls 5 des zweiten Befehlsworts 102 abgerufen. Das
nächste
korrekte Befehlswort, das nach dem Wort 104 abzurufen ist,
ist entweder das erste Befehlswort 101 oder das fünfte Befehlswort 105.
Durch Überprüfung des
vierten Befehlsworts 104 wird der Leser feststellen, dass,
wenn der Befehl 11 des dritten Befehlsworts 103 ausgeführt wurde,
der erste Befehl 12 des vierten Befehlsworts 104 als nächstes auszuführen wäre, wobei
das Ergebnis davon darin bestehen würde, dass das fünfte Befehlswort 105 das
nächste
abzurufende Wort ist. Wenn jedoch das vierte Befehlswort 104 als
Ergebnis des bedingten Sprungbefehls 9 oder des bedingten Sprungbefehls
5 abgerufen würde,
hängt die
Identität des
nächsten
korrekten abzurufenden Befehlsworts von dem Ergebnis des bedingten
Sprungs in dem Befehl 14 ab.
-
Wenn
man weiter das vierte Befehlswort 104 betrachtet, würde ein
Abrufen eines falschen Worts (beispielsweise das erste Befehlswort 101 wird
anstelle des fünften
Befehlsworts 105 abgerufen) darin resultieren, dass die
Verarbeitungspipeline eine Anzahl von falschen Befehlen enthält, die
natürlich
nicht ausgeführt
würden.
Diese praktische Folge davon würde
darin bestehen, dass eine Anzahl von Zyklen verloren würde, während denen
keine brauchbare Ausführung
stattfindet; nur in einem nachfolgenden korrekten Zyklus würde das
korrekte fünfte
Befehlswort 105 ausgeführt
werden, nachdem es in die Pipeline geholt worden ist.
-
Eine
vereinfachte Vorrichtung, die einige der Merkmale der vorliegenden
Erfindung veranschaulicht, ist nun unter Bezugnahme auf 2 beschrieben.
-
Bezugnehmend
auf 2 umfasst die Vorrichtung eine Speicherschaltkreisanordnung 200,
die aus einer Speicheranordnung 205 mit einer Mehrzahl von
adressierbaren Stellen und einem Adressdekodierer 210 besteht,
um die Speicheranordnung 205 zu adressieren. Der Adressdekodierer 210 weist
einen Eingang 201 auf, über
den er Befehlsadressen in einem einzelnen Befehlswort erhält. Der
Adressdekodierer erzeugt Adressausgaben, die den eingegebenen Befehlsadressen
und allen späteren
Befehlsadressen bis zu dem Ende des relevanten Befehlsworts entsprechen.
Die Anzahl n von Speicherstellen in der Speicheranordnung 205 entspricht
wenigstens der Anzahl von Befehlen in der aktuell ablaufenden Programmfolge.
Die Speicherstellen der Anordnung 205 speichern an der
Adresse des entsprechenden Befehls Information, die angibt, ob der
Befehl ein Verzweigungsbefehl ist oder nicht, d. h. eine logische
0, wenn der Befehl kein Verzweigungsbefehl ist, und eine logische
1, wenn der Befehl ein Verzweigungsbefehl ist. Jede Speicherstelle
weist eine entsprechende Ausgangsleitung 2201 –220n auf. Die Ausgangsleitungen 2101 –220n sind mit einer Registeranordnung 250 verbunden,
die Speicherstellen aufweist, die jeder der Leitungen 2201 –220n entsprechen, um Verzweigungsvorhersagewerte
zu speichern. Jede Registerstelle weist einen entsprechenden durch
eine der Leitungen 2201 –220n gebildeten Eingang und eine entsprechende
Ausgangsleitung 2801 –280n auf. Die Registerstellen speichern
eine logische 1, wenn ein zugeordneter Verzweigungsbefehl als gewählt angenommen
wird, und eine logische 0, wenn ein zugeordneter Verzweigungsbefehl
als nicht gewählt
vorhergesagt wird. Wenn eine Befehlsadresse über die Eingangsleitungen 210 eingegeben wird,
adressiert der Adressdekodierer 210 die entsprechenden
Stellen der Anordnung 205, und wenn ein Befehl an einer
entsprechenden Adresse ein Verzweigungsbefehl ist, wird eine logische
1 auf der entsprechenden der Ausgangleitungen 2201 –220n ausgegeben, die wiederum auf das Register 250 zugreift und
auf einer Ausgangsleitung 280 entweder eine entsprechende
logische 1, wenn die Verzweigung als gewählt vorhergesagt wird, oder
eine entsprechend logische 0 erzeugt, wenn der Verzweigungsbefehl
als nicht gewählt
vorhergesagt wird. Wenn eine oder mehrere der adressierten Stellen
kein Verzweigungsbefehl ist, werden logischen Nullen über die
entsprechenden Ausgangsleitungen 2201 –220n ausgegeben.
-
Die
in der Registerstelle gespeicherte logische Stufe, die keinen Verzweigungsbefehlen
entspricht, ist nicht bedeutsam, weil auf einer Leitung 2201 –220n keine logische 1 auftreten kann, es
sei denn, der zugeordnete Befehl ist ein Verzweigungsbefehl. Folglich
ist jede Stelle, die keinem Verzweigungsbefehl entspricht, logisch
0. Die Ausgangsleitungen 2801 –280n des Registers 250 bilden
Wortleitungen zu einem Speicher 300, der Zieladressen von Verzweigungsbefehlen
speichert. Der Speicher 300 weist einen ersten Adressausgang 301,
an dem der Speicher 300 die Zieladresse eines Verzeigungsbefehls
liefert, und einen zweiten Ausgang 302 auf, der eine logische
1 bereitstellt, wenn ein Verzweigungsbefehl als gewählt vorhergesagt
wird. Der Speicher 300 weist eine Reihe 3001 –300n für
jede Wortleitung 2801 –280n auf, und jede Reihe enthält mit den
Ausgangsleitungen 301 verbundene Speicherzellen, so dass
das Anlegen einer logischen 1 an eine der Wortleitungen 2801 –280n eine Adresse auf den Ausgangsleitungen 301 erzeugt.
Die Speicherschaltkreisanordnung 300 enthält auch
eine Torschaltkreisanordnung, die einen Ausgang zu der zweiten Ausgangsleitung 302 aufweist
und eine logische 1 auf der Ausgangsleitung 302 erzeugt,
wenn eine Verzweigung als gewählt
vorhergesagt wird. Die Speicherschaltkreisanordnung 300 enthält ferner
eine Entscheidungsschaltkreisanordnung, die nur die Zieladresse
des ersten Sprungbefehls von dem Wort bereitstellt, das als gewählt vorhergesagt
ist.
-
Vor
einem Betrieb der Vorrichtung von 2 wird sie
initialisiert, indem die Speicheranordnung 205 sequenziell
adressiert und eine logische 1 an den Adressstellen der Speicheranordnung 205 gespeichert
werden, die Verzweigungsbefehlen entsprechen. Die Registerschaltkreisanordnung 205 wird
während
der Initialisierungsstufe mit Vorhersageinformation geladen, die
angibt, ob die zugeordneten Verzweigungsbefehle als gewählt vorhergesagt sind
oder nicht. Die Speicherschaltkreisanordnung 300 wird mit
Adressinformation geladen, die den Zieladressen der Verzweigungsbefehle
entspricht, die in der Speicheranordnung 205 gespeichert
sind. Die Schaltkreisanordnung, die erforderlich ist, um die Initialisierung
der Schaltkreisanordnung von 2 zu bewirken,
ist nicht gezeigt.
-
Sobald
die Initialisierung ausgeführt
wurde, kann die Programmfolge ablaufen. Um dies zu erreichen, wird
die Adresse des ersten Befehls, der Befehl 0 des ersten Befehlsworts 101,
dem Eingang 201 der Speicherschaltkreisanordnung 200 zugeführt. Dies bewirkt
eine Adressierung der Speicheranordnung 205 an allen Stellen,
die Befehlen in dem ersten Wort entsprechen. Weil das erste Befehlswort 101 keine Sprungbefehle
enthält,
wird keine logische 1 ausgegeben. Daher führen die Ausgangsleitungen 2201 –220n alle eine logische Null und diese
logischen Nullen werden an das Register 250 angelegt. Das
Ergebnis, alle logischen Nullen an die Eingänge des Registerspeichers 250 anzulegen,
besteht darin, auf den Ausgangsleitungen 2801 –280n Ausgaben bereitzustellen, die alle
logische Nullen umfassen. Die Speicherschaltkreisanordnung 300 empfängt die
logischen Nullen und stellt eine Ausgabe von einer logischen Null
an dem ersten Ausgang 301 und eine Ausgabe einer logischen
Null an dem zweiten Ausgang 302 bereit.
-
Bei
dem vorliegenden Beispiel enthält
das erste Befehlswort 101 keine Verzweigungen und daher
wird keine Zieladresse an dem Ausgang 302 ausgegeben. Dementsprechend
setzt sich die Ausführung
mit dem Abrufen des zweiten Worts 102 fort.
-
Dementsprechend
ist das nächste
Befehlswort, das abzurufen ist, das zweite Befehlswort 102. Für das zweite
Befehlswort 102 speichert die Speicherschaltkreisanordnung
eine logische 1 an der Adresse, die dem Befehl 5 an einer Byteposition
2 (die Bytepositionen in jedem Wort sind mit 1 bis 4 bezeichnet)
dieses Befehlsworts entsprechen, und eine logische 1 an der Adresse,
die dem Befehl 7 an einer Byteposition 4 dieses Befehlsworts entsprechen. Eine
logische Eins wird von der Speicherschaltkreisanordnung über die
Ausgangsleitung 2201 –220n , die der zweiten Position entspricht,
und über
die Ausgangsleitung 2201 –220n ausgegeben, die der vierten Position
in dem zweiten Befehlswort 102 entspricht. Diese Eingaben
einer logi schen Eins werden dem Register 250 bereitgestellt,
das wiederum Ausgaben einer logischen Eins über diejenigen Registerausgangsleitungen 2801 –280n ausgibt, die Verzweigungsbefehlen
entsprechen, die als gewählt vorhergesagt
sind. Daher führt
eine der Registerausgangsleitungen 2801 –280n , die der zweiten Position des zweiten
Befehlsworts 102 entspricht, eine logische Eins, wenn vorhergesagt
ist, dass der bedingte Sprungbefehl 5 gewählt wird, und die Leitung,
die der vierten Befehlsposition des zweiten Befehlsworts 102 entspricht,
wird eine logische Eins übertragen,
wenn vorhergesagt wird, dass der bedingte Sprungbefehl 7 ausgeführt wird.
-
Diese
Eingaben mit einer logischen Eins werden der Speicherschaltkreisanordnung 300 bereitgestellt,
um die Zieladressen der als gewählt
vorhergesagten Verzweigungen zu lesen, und der Entscheidungsschaltkreis
gibt die Zieladresse des ersten auftretenden, als gewählt vorhergesagten
Verzweigungsbefehl aus. Dies erfolgt, weil, wenn zum Beispiel der
bedingte Sprungbefehl 5 als gewählt
vorhergesagt ist, die Befehle 6 und 7 nicht ausgeführt werden
können,
wenn die Vorhersage korrekt ist. Daher bestimmt die zuerst auftretende,
als gewählt
vorhergesagte Verzweigung in einem Befehlswort den nächsten abzurufenden
Befehl.
-
Die
Zieladresse wird von dem Prozessor des Computers verwendet, um zu
erreichen, dass ein neues Befehlswort abgerufen wird, das den Befehl enthält, dessen
Ausführung
vorhergesagt ist.
-
Diese
vereinfachte, zuvor genannte Ausführungsform, bei der die Ausführung der
Befehle in einem Befehlswort an anderer Stelle als an der des ersten
Befehls dieses Worts beginnt, wird die Adresse des anfänglichen
Befehls über
die Eingänge 201 eingegeben,
und der Adressdekodierer 320 legt nur Adressen, die den
restlichen Befehlen des Worts entsprechen, auf die Speicheranordnung 205 an.
Daher würde,
wenn, wie zum Beispiel hinsichtlich 1 beschrieben,
die Ausführung
des vierten Befehlsworts 104 an der Befehlsnummer 13 beginnen
soll (zum Beispiel in Antwort auf den bedingten Sprung bei Befehl
9), die Adresse, die dem Befehl 13 entspricht, über die Eingangsleitungen 201 eingegeben,
und die Adressschaltkreisanordnung 201 würde dann
die Adressen der Befehle 13, 14 und 15 auf die Speicheranordnung
anlegen. Folglich würde
der Verzweigungsbefehl bei Befehl 12 (der ein nicht bedingter Sprung
ist und daher immer als gewählt
vorhergesagt wird) nicht auf einer der Ausgangsleitungen 2201 –220n der Speicheranordnung vorliegen.
-
Die
obige Beschreibung soll die Konzepte dieser Erfindung veranschaulichen.
Eine Ausführungsform
einer Schaltkreisanordnung zur Ausführung der Verfahrens der vorliegenden
Erfindung ist nun unter Bezugnahme auf die 3–9 beschrieben,
wobei die Schaltkreisanordnung einen Verzweigungszielpuffer aufweist.
-
Zuerst
Bezug nehmend auf 3 besteht ein Verzweigungszielpuffer 400 aus
vier im Allgemeinen gleichen Abschnitten 401–404,
die im Folgenden als Partitionen bezeichnet werden.
-
Die
Anzahl an Partitionen der vorliegenden Ausführungsform entspricht der Anzahl
an Befehlen pro Befehlswort, wobei in dem oben unter Bezugnahme
auf 1 beschriebenen Beispiel diese Anzahl 4 ist. Es
ist natürlich
verständlich,
dass andere Anzahlen gemäß dem Inhalt
des Befehlsworts verwendet werden könnten; insbesondere könnten in
einem komplexeren System 8 Partitionen verwendet werden. Für einen
Fachmann ist auch ersichtlich, dass weniger Partitionen vorgesehen
sein könnten.
Zum Beispiel wäre
es bei dem Vier-Byte-Beispiel von 1 möglich, nur
zwei Partitionen vorzusehen, eine, die den ersten zwei Bytes jedes
Befehlsworts entspricht, und die andere, die den zweiten zwei Bytes jedes
Befehlsworts entspricht.
-
Bei
dem vorliegenden Beispiel speichert die erste Partition 401 für Verzweigungsbefehle,
die an dem ersten Byte eines in dem Puffer gespeicherten Worts liegen,
relevante Daten, speichert die zweite Partition 402 für Verzweigungsbefehle
an zweiten Bytestellen relevante Daten und so weiter. Die erste Partition 402 wird
hier als die niedrigste Partition bezeichnet und die vierte Partition 404 als
die höchste Partition.
-
Jede
Partition des Puffers 400 weist eine CAM-Anordnung, die
eine Mehrzahl von Wortadressen speichert, und zugeordnete Daten-RAMs
auf, die Zieladressen für
Verzweigungsbefehle speichert, die an den in den CAMs gespeicherten
Wortadressen liegen. Der Puffer weist erste und zweite Eingangsbusse 500, 501 auf,
die die Adresse eines abzurufenden Befehls liefern. Der erste Eingangsbus 500 ist
ein Befehlswortadressbus, der die höchstwertigen Bits der Befehlsadresse
empfängt,
und der zweite Eingangsbus 501 ist ein Befehlsbyteadressbus
für die niedrigstwertigen
Bits der Adresse des abgerufenen Befehls. Bei dem Beispiel von 1 bilden
die ersten drei Bits der Befehlsadresse die Befehlswortadresse und
die niedrigsten zwei Bits die Befehlsbyteadresse. Eine Eingabe auf
den Bus 500 ermöglicht
daher eine zugeordnete Operation, um zu ermitteln, ob der Bus Daten
speichert, die der Wortadresse des abgerufenen Befehls entsprechen.
Der Eingang 501 wird verwendet, um die Ausgabe von den
CAM-Anordnungen während
einer Leseoperation so zu steuern, dass eine Maskierungsoperation
geschaffen wird, um eine Ausgabe von einem Partitions-CAM zu verhindern,
der einer Bytestelle in dem Wort vor der auf Leitung 501 eingegebenen
Byteposition entspricht (dass heißt, wenn die Eingabe auf Leitung 501 größer als die
Partitionsnummer ist). Wenn eine Leseoperation in dem Puffer 400 einen
Treffer für
den relevanten, durch die Eingänge 500 und 501 identifizierten
Befehl aufweist, stellt der Puffer auf dem Bus 500 ein
Zieladressausgabe bereit, eine Ausgabe 505, die eine Busübertragungsinformation
ist, die angibt, welche Partitionen Verzweigungsbefehle des aktuellen
Befehlsworts enthalten, die als gewählt vorhergesagt sind, und
eine Ausgabe 504, die von jeder Partition erhaltene Information über die "Vorhersagestärke" enthält.
-
Es
ist verständlich,
dass, wenn ein Prozessor eine Adresse an den Speicher ausgibt, um
einen neuen Befehl abzurufen, diese Adresse gleichzeitig in den
Puffer 400 eingegeben wird, um eine Leseoperation auszuführen, und,
wenn der Prozessor ein Verzweigungsbefehl ausführt, der sich nicht in dem
Puffer befindet, Daten, die diesen Verzweigungsbefehl betreffen,
nach der Ausführung
durch den Prozessor in den Puffer geschrieben wer den, um für zur Verwendung
zu einem späteren
Zeitpunkt bereit zu stehen. Um Daten in den Puffer zu schreiben,
ist ein Wortadresseingangsbus 900 vorgesehen, um Wortadressen
in die CAM-Anordnungen
zu schreiben, ist ein Zieladresseingang 908 vorgesehen,
um Zieladressen für
die Verzweigungsbefehle, die neu in den Puffer geschrieben werden,
in die Daten-RAMs zu schreiben. Wie später beschrieben, wird jede Schreiboperation
in den Puffer gleichzeitig mit einer Leseoperation unter Verwendung
der gleichen Wortadresse und Eingangs 900 sowie einer Leseingabe 500 zusammen
mit der geeigneten Byteadresse 501 ausgeführt, um
zu vermeiden, dass ein Befehl in den Puffer geschrieben wird, der
bereits in dem Puffer gespeichert ist. Andere Eingänge und
Ausgänge
sind in 3 gezeigt und deren Funktion
ist unter Bezugnahme auf die detaillierteren Zeichnungen der 4, 8 und 9 beschrieben.
-
Wie
unter Bezugnahme auf 3 zu sehen, ist jede der Partition 401–404 im
Wesentlichen gleich und daher erfolgt nur eine detaillierte Beschreibung einer
einzelnen beispielhaften Partition 401.
-
Bezugnehmend
auf 4, besteht die Partition 401 aus n inhaltsadressierbaren,
mit dem Befehlswortadresseingangsbus 500 verbundenen Speicherzellen 5101 –510n , die eine erste Mehrzahl von CAM-Ausgangsleitungen 5111 –511n aufweisen. Wie später hier beschrieben, wird
die vorliegende Ausführungsform
des Verzweigungszielpuffers in dem Sinn dynamisch betrieben, dass
die Partition als "voll" betrachtet wird,
sobald abgesehen von einer alle Leitungen Daten enthalten. Die eine
nicht gefüllte
Leitung wird zum Schreiben eines neuen Eintrags zurückbehalten,
wobei als Teil einer Schreiboperation Details eines in dem Verzweigungszielpuffer
gespeicherten Verzweigungsbefehls verworfen werden, um für die Eingabe
eines nächsten,
neu aufgefundenen Verzweigungsbefehls bereit zu stehen. Ein Verzweigungsbefehl
wird als "neu aufgefunden" bezeichnet, wenn
er in dem Verzweigungszielpuffer nicht zu dem Zeitpunkt vorliegt,
an dem das Vorhandensein der Verzweigung in dem Puffer überprüft wird.
Es ist angemerkt, dass der Verzweigungsbefehl, der in einem Betriebszyklus
aus dem Verzweigungszielpuffer verworfen wurde, während eines
späteren
Betriebszyklus zu einem "neu
aufgefundenen" Befehl
werden kann. Daher neigt, während
eine Vergrößerung der Anzahl
n an inhaltsadressierbaren Speicherzellen die Komplexität und Größe der Vorrichtung
erhöht,
eine solche Vergrößerung dazu,
die Anzahl von Anlässen reduziert,
bei denen ein Verzweigungsbefehl eingeschrieben werden muss.
-
Eine
Verringerung der Anzahl n an Speicherzellen sorgt für eine kleinere
und einfachere Vorrichtung, aber mit der Einschränkung, dass die Chancen, beim
Auffinden eines Verzweigungsbefehls fehlzuschlagen, erhöht werden.
Wo ein Sprungbefehl nicht aufgefunden wird, tendiert dies dazu,
zu einer Bearbeitungsverzögerung
zu führen.
-
Bei
der derzeit beschriebenen Ausführungsform
sind inhaltsadressierbare Speicherzellen 5101 –510n in der Lage, die Wortadressen zu speichern,
die über
dem Befehlswortadressbus 500 eingegeben werden. Wie später beschrieben,
werden bestimmte Befehlswortadressen in den inhaltsadressierbaren
Speicherzellen gespeichert. Die Befehlswortadresse des Befehls,
der aktuell abgerufen wird, wird über den Befehlswortadressbus 500 eingegeben,
wobei, wenn ein einer der gespeicherten Adresse entsprechende Befehlswortadresse
eingegeben wird, auf der entsprechenden der CAM-Ausgangsleitungen 5111 –511n eine logische 1 auftritt.
-
Die
Auswahlschaltkreisanordnung 512 weist einen Eingang auf,
der mit dem Befehlsbyteadressbus 501 verbunden ist, und
ist mit den CAM-Ausgangsleitungen 5111 –511n verbunden, um alle Leitungen einer
Partition selektiv zu deaktivieren. Die Auswahlschaltkreisanordnung 512 weist
einen Bearbeitungsschaltkreis 560 auf, der eine Eingabe
von dem Befehlsbyteadressbus 501 empfängt und einen Ausgang 561 aufweist,
der mit den Steuereingängen
einer Mehrzahl von Pull-Down-Transistoren (Herunterzieh-Transistoren) 5621 –562n verbunden ist. Jeder der Pull-Down-Transistoren
ist zwischen einer entsprechenden der CAM-Ausgangsleitungen 5111 –511n und Masse verbunden. Beim Le sen stellt ein
Steuereingang 912 die Schaltkreisanordnung 560 ein,
um eine hochpegelige Ausgabe zu erzeugen, um alle Pull-Down-Transistoren 5621 –562n in Antwort auf die Byteadresseingabe über den
Befehlsbyteadressbus 501 einzuschalten, die größer als
die Anzahl der Partition ist. Auf diese Weise dienen die Schaltkreise 512–812 dazu,
diejenigen Partitionen auszumaskieren, in denen der gespeicherte
Verzweigungsbefehl eine Bytestelle vor der auf Leitung 501 angegebenen Byteposition
hat. Die Auswahlschaltkreisanordnung 512 weist Ausgangsleitungen 5131 –513n auf, die Eingänge für eine Vorhersagebearbeitungsschaltkreisanordnung 512 bilden.
Die Vorhersagebearbeitungsschaltkreisanordnung 512 weist
einen Speicher 563 mit n Stellen auf, um Vorhersageinformationen
zur Angabe darüber
zu speichern, ob ein zugeordneter Verzweigungsbefehl als gewählt oder
als nicht gewählt
vorhergesagt ist. Jede dieser Speicherstellen 5631 –563n entspricht einer entsprechenden CAM-Zelle
und weist einen Ausgang auf, der mit einem Eingang eines entsprechenden
AND-Gatters 5641 –564n mit zwei Eingängen verbunden ist, dessen anderer
Eingang durch eine entsprechende Ausgangsleitung 5131 –513n der Auswahlschaltkreisanordnung 512 bereitgestellt
ist. Wie in 8 gezeigt, ist ein OR-Gatter 565 zwischen
entsprechenden Speicherstellen 563 und dem entsprechenden AND-Gatter 5641 –564n angeschlossen, weil dies aber eine
unmittelbare Verbindung beim Lesen bildet, ist sie der Klarheit
halber in 4 weggelassen worden. Wie hier
später
beschrieben, speichert der Vorhersagespeicher 563 eine
logische 1 an Positionen, die Verzweigungsbefehlen entsprechen,
die als gewählt
vorhergesagt sind, und eine logische 0 an Positionen, die Verzweigungsbefehlen
entsprechen, die als nicht gewählt
vorhergesagt sind. Eine Leitung 907, die vollständiger unter
Bezugnahme auf 8 beschrieben ist, erlaubt es,
neue Vorhersageinformationen in den Vorhersagespeicher zu schreiben.
Jedes AND-Gatter 5641 –564n weist einen entsprechenden Ausgang
auf, der mit einer entsprechenden Ausgangsleitung 5151 –515n der Vorhersageverarbeitungsschaltkreisanordnung 514 verbunden
ist. Wie in 8 gezeigt, gibt es ein OR-Gatter 905 zwischen dem
Ausgang jedes AND-Gatters 5641 –564n und der Ausgangsleitung 5151 –515n , weil dies aber eine unmittelbare
Ver bindung beim Lesen bildet, ist sie der Klarheit halber in 4 weggelassen
worden. Die Ausgangsleitungen 5151 –515n bilden die Wortleitungen zu einem
RAM 518 und bilden auch Eingänge zu einem NOR-Gatter 516 mit
n Eingängen.
Das NOR-Gatter 516 ist mit einer einzelnen Ausgangsleitung 517 verbunden,
die ein erstes Übertragungsgatter 531 und
eine zweite Gruppe von Übertragungsgattern 530 steuert.
Die Ausgangsleitungen 517–817 des NOR-Gatters
von allen Partitionen bilden zusammen den Ausgangsbus 505.
Wie in 8 gezeigt, ist der Ausgang des NOR-Gatters 516 mit
einem OR-Gatter 590 verbunden, das der Klarheit halber
in 4 weggelassen ist, da es während einer Leseoperation keine
Wirkung hat, weil das Signal auf der Leitung 920 beim Lesen
0 ist. Beim Schreiben empfängt
das Gatter 590 in jeder Partition auf der Leitung 920 ein
Signal 1.
-
Das
Daten-RAM 580 besteht aus n Reihen an Speicherzellen, deren
jede Reihe durch eine entsprechende der Leitungen 5151 –515n adressiert wird. Jede Reihe der Speicherzellen
speichert eine Zieladresse eines Verzweigungsbefehls, d. h. die
Adresse, an der die Ausführung
fortgesetzt wird, wenn die Verzweigung gewählt wird. Diese Information
wird auf dem Zieladressausgangsbus 513 verfügbar gemacht,
der zwischen den Partitionen hindurchgeht, der aber Übertragungsgatter 530 enthält, um Partitionen
voneinander zu isolieren, die Daten speichern, die für spätere Bytes
im dem gleichen Wort relevant sind, wie später beschrieben ist. Der Bus 503 ist
mit einer Leseverstärkerschaltkreisanordnung 506 verbunden,
die einen Zieladressausgang 507 und einen Zieladresseingang 903 aufweist,
der während
einer Schreiboperation verwendet wird Der Bus 503 bildet einen
Teil eines gemeinsamen Datenwegs, der die Daten-RAMs mit entsprechenden
Bitleitungen der Daten-RAMs, die in Reihe angeschlossen sind, und mit Übertragungsgattern
in den Bitleitungswegen zwischen benachbarten Daten-RAMs verbindet.
-
Der
Verzweigungszielpuffer besteht auch aus einer Vorhersagestärkebearbeitungsschaltkreisanordnung 550.
-
Die
Vorhersagestärkebearbeitungsschaltkreisanordnung 550 empfängt als
erste Eingänge
die Ausgangsleitungen 5131 –513n der Auswahlschaltkreisanordnung 512 und
erzeugt auf einer Vorhersagestärkeausgangsleitung 504 eine
Ausgabe. Die Vorhersagestärkebearbeitungsschaltkreisanordnung 550 empfängt ferner
als Steuereingabe die Aktualisierungsstärkeleitung 502 und
empfängt
auch Eingaben von einer Leitung 909, um neue Vorhersagestärkedaten
zu schreiben. Das Letztere ist unter Bezugnahme auf 8 beschrieben.
-
Erneut
Bezug nehmend auf 3 und wie oben erwähnt, weisen
die übrigen
Partitionen Strukturen vergleichbar zu der der ersten Partition 401 auf. Die
ganzen Zahlen jeder Partition, die mit den Partitionen 401 vergleichbar
sind, weisen gleiche Bezugszeichen auf, wobei die Bezugszeichen
der Partition 402 im Bereich 600–699,
diejenigen der Partition 403 in dem Bereich 700–799 und
diejenigen der Partition 404 in dem Bereich 800–899 liegen.
-
Wie
zuvor beschreiben, gibt es zwischen jeder entsprechenden Partition
und der benachbarten Partition ein erstes Übertragungsgatter 531, 631, 731, 831 und
eine zweite Gruppe von Übertragungsgatter 430, 630, 730, 830.
Sowohl das erste Übertragungsgatter
als auch die zweite Gruppe von Übertragungsgattern
werden durch die Ausgangsleitung 517, 617, 717, 817 des
entsprechenden NOR-Gatters 516, 616, 716, 816 der
zugeordneten Partition gesteuert. In jeder Partition ist der Betrieb
derart, dass, wenn das entsprechende NOR-Gatter 516, 616, 716, 816 eine
logische 1 an einem seiner Eingänge
empfängt,
die entsprechende Ausgangsleitung 517, 817, 717, 817 auf
eine logische 0 übergeht, wodurch
das entsprechende erste Übertragungsgatter 531, 631, 731, 831 und
die entsprechende zweite Gruppe an Übertragungsgattern 530, 630, 730, 830 nicht
leitend werden. Dies bewirkt, dass der Zieladressausgangsbus zwischen
der relevanten Partition und der nächst höheren Partition unterbrochen wird.
Das Ergebnis besteht darin, dass nur die niedrigste Partition, in
der sich eine logische 1 für
den Eingang des NOR-Gatters 516, 616, 716, 816 befindet, eine
Zieladresse auf den Zieladressausgangsbus 503 ausgeben
kann. Die Ausgangs-RAMs 518–818 sind daher in
Reihe mit einem gemeinsamen Weg zu dem Ausgang 503 angeschlossen
und die Steuergatter 530–830 in diesem Weg
weisen Partitionen, die sich fortschreitend von dem Ausgang 503 weg
bewegen, eine abnehmende Priorität
zu. Jede Partition kann nur dann eine Ausgabe bereitstellen, wenn
keine Partition mit höherer
Priorität
eine Ausgabe bereitstellt. Sobald eine Partition eine Ausgabe bereitstellt, sind
alle Partitionen mit niedrigerer Priorität blockiert und können keine
Ausgabe bereitstellen.
-
Der
Betrieb der Schaltkreisanordnung von 3 ist nun
beschrieben:
Daten, die Verzweigungsbefehle betreffen, sind
in einer Partition gespeichert, die der Byteposition des Verzweigungsbefehls
in seinem Befehlswort entspricht. Beispielsweise sind Daten, die
einen Verzweigungsbefehl an der erste Byteposition eines Worts betreffen,
in der ersten Partition 401 gespeichert, Daten, die einen
Verzweigungsbefehl an der zweiten Byteposition betreffen, in der
zweiten Position 402 und so weiter. Daher ist für das Beispiel
von 1 die Partition 402 für die Befehle 0, 4, 8, 12 und 16
(die erste Byteadresse jedes Befehlsworts) relevant, speichert und
verarbeitet die zweite Partition 402 Information, die für die Befehle
1, 5, 9, 13, 17 relevant ist, und so weiter. Daten, die das Vorhandensein
von Verzweigungsbefehlen angeben, sind in den CAM-Zellen der Partition
gespeichert, Daten, die die Vorhersage, ob die Verzweigung gewählt ist,
betreffen, sind in der Vorhersagebearbeitungsschaltkreisanordnung
gespeichert und Daten, die die Zieladresse des Verzweigungsbefehls
betreffen, in dem RAM der Partition. Bei dem vorliegend beschriebenen
Beispiel sind die Daten, die das Vorhandensein eines Verzweigungsbefehls
angeben, die vollständige
Befehlswortadresse des Worts, das den Verzweigungsbefehl enthält. Wie
hier später
beschrieben, ist es möglich,
nur einen Teil der Befehlswortadresse zu speichern. Die Daten, die
zur Angabe des Vorhandenseins von Verzweigungsbefehlen gewählt sind, werden
in den inhaltsadressierbaren Speicherzellen der entsprechenden Partition
gespeichert.
-
Die
Stelle von Daten, die Verzweigungsbefehle identifizieren, ist für das Beispiel
von 1 in 5 gezeigt. Bezugnehmend auf 5 ist
es ersichtlich, dass die Zellen 510 der ersten Partition 401 einen
Eintrag von "011" enthalten, weil
das Befehlswort 104 (das die Adresse "011" hat),
an der ersten Byteposition einen nicht bedingten Sprungbefehl aufweist.
Vergleichbarerweise weisen die zweiten und dritten Befehlsworte 102, 103 (Wortadressen "001" und "010") bedingte Sprungbefehle
an der zweiten Byteposition der Befehlsworte auf, nämlich den
Positionen, die den Befehlen 5 und 9 entsprechen. Daher speichern
die Zellen 610 der zweiten Partition 402 die Wortadressen "001" und "010" der Worte 102 und 103.
In der dritten Partition (für
die Adresse "011", die dem Befehl
14 entspricht) und in der vierten Partition (die dem Befehl 7 entspricht)
werden auf vergleichbare Weise Einträge vorgenommen.
-
Weiterhin
Bezug nehmend auf 5 im Zusammenhang mit den in 1 gezeigten
Befehlen wird die Wortadresse des aktuell abgerufenen Befehls auf
den Befehlsadressbus 500 eingegeben; diese Adresse wird
von dem Bus auf die CAM-Zellen 510, 610, 710, 810 der
gesamten Vorrichtung angewendet. Wo eine Übereinstimmung zwischen den
auf den Bus 500 eingegebenen Wortadressen und einer in
einer CAM-Zelle gespeicherten Adresse auftritt, wird eine Ausgabe
einer logischen Eins (als "CAM-Treffer" bezeichnet) durch
die relevante Ausgangsleitung des CAM's bereitgestellt. Wenn beispielsweise
die Wortadresse "000", die dem Wort 101 entspricht,
eingegeben wird, treten in keiner Partition Übereinstimmungen auf und es
werden keine CAM-Treffer auftreten. Wenn jedoch die Wortadresse "001" des zweiten Befehlsworts 102 über den
Bus 500 eingegeben wird, tritt eine Übereinstimmung in den CAM-Zellen 610 der
zweiten Partition (die dem Befehl 5 entspricht – siehe 1) und in
den CAM-Zellen 810 der vierten Partition (für Befehl
7 – siehe 1)
auf. Das Ergebnis dieser Übereinstimmungen
besteht darin, CAM-Treffer auf den CRM-Ausgangsleitungen 611, 811 zu erzeugen,
die mit den CAM-Zellen verbunden sind, wo der Treffer aufgetreten
ist.
-
Zu
dem Byteeingangsadressbus 501 wird eine Eingabe gemacht,
die die Befehlsbyteadresse umfasst, die die Position in dem Befehlswort
repräsentiert,
an dem eine Ausführung
einzuleiten ist. Für das
in 5 gezeigte Beispiel wird angenommen, dass die
Ausführung
des gezeigten Programmsegments bei dem dritten Befehl des zweiten
Befehlsworts 102 (Befehl 6 in 1) beginnen
soll. In dieser Situation würde
die Wortadresseingabe über
den Bus 500 "001" sein, was dem zweiten
Befehlswort 102 entspricht. Dies würde CAM-Treffer in den zweiten und
vierten Partitionen erzeugen. Erneut Bezug nehmend auf 1,
ist es ersichtlich, dass die Byteadresse für den dritten Befehl in jedem
Befehlswort "10" ist. Es ist diese
Adresse, die auf den Befehlsbyteadressbus 501 eingegeben
wird.
-
Die
Auswahlschaltkreisanordnung 512, 612, 712, 812 weist
eine entsprechende Bearbeitungsschaltkreisanordnung 560 (siehe 4)
auf, die beim Lesen dazu dient, Partitionen zu deaktivieren, die
Bytes kleiner als die Byteadresseingabe auf den Befehlsbyteadresseingangsbus 501 entsprechen. Daher
wird für
eine Eingabe einer Byteadresse von "00" keine
Partition deaktiviert, und alle Auswahlschaltkreise werden Treffer
von dem Eingang 511, 611 etc. zu dem Ausgang 513, 613 etc.
weiterleiten. Wenn die Befehlsbyteadresse "01" ist,
wird die Auswahlschaltkreisanordnung 512 der ersten Partition 401 keinen
Treffer von einer Eingangsleitung 5111 –511n zu einer Ausgangsleitung 5131 –513n weiterleiten, während bei anderen Partitionen
jeder Treffer vom Eingang zum Ausgang weitergeleitet wird. Wenn
die Befehlsbyteadresse "10" wäre, würde jeder Treffer
nur von den Auswahlschaltkreisen 712 und 812 in
den dritten und vierten Partitionen weitergeleitet werden und so
weiter. Im vorliegenden Fall ist die Befehlsbyteadresse "10", was daher nur der
Auswahlschaltkreisanordnung 712 und 812 erlaubt,
einen Treffer weiter zu leiten. Der einzige Treffer, der auftritt,
liegt jedoch in der vierten Partition vor und dieser kann da her
als Eingabe für
die Vorhersagebearbeitungsschaltkreisanordnung 814 der
vierten Partition weitergehen.
-
Es
ist daran erinnert, dass die Vorhersagebearbeitungsschaltkreisanordnung 514, 614, 714, 814 jeweils
aus einem entsprechenden Vorhersagespeicher 563, der eine
logische 1 oder eine logische 0 enthält, die angeben, ob eine entsprechende
Verzweigung als gewählt
vorhergesagt ist oder nicht, und einer Mehrzahl von AND-Gattern 564 besteht. Die
AND-Gatter empfangen eine Eingabe von der zugeordneten Auswahlschaltkreisanordnung
und eine von einem entsprechenden Eintrag des Registers. Zieht man
den Befehl Nummer 7 von 1 in Betracht, wird die Vorhersagebearbeitungsschaltkreisanordnung 814 der
vierten Partition daher entweder eine logische 1 von einem entsprechenden AND-Gatter
auf einer der Ausgangsleitungen 815 erzeugen (wenn der
Verzweigungsbefehl 7 als gewählt vorhergesagt
ist) oder wird insgesamt logische 0's auf den Ausgangsleitungen 815 erzeugen
(wenn der Verzweigungsbefehl 7 als nicht gewählt vorhergesagt ist).
-
Für die erste
Situation, nämlich
dass der Verzweigungsbefehl als gewählt vorhergesagt ist, bewirkt
das Vorhandensein einer logischen 1 auf der Ausgangsleitung 815,
die der Position der in dem inhaltsadressierbaren Speicher 810 gespeicherten Verzweigungsbefehlinformation
entspricht:
- 1. Der Ausgang des NOR-Gatters 816 geht
auf eine logische 0 über;
wobei
- 2. die entsprechende Reihe des zu adressierenden Daten-RAM's 818 daher auf den
Zieladressausgangsbus 503 ausgibt. Die Zieladresse "00000", d. h. die Zieladresse
des Verzweigungsbefehls.
-
Es
ist anzumerken, dass in den übrigen,
d. h. den ersten bis dritten Partitionen 401–403,
keinen logischen 1's
an dem Ausgang der entsprechenden Vorhersagebearbeitungsschaltkreisanordnung 514, 614, 714 vorliegt.
Folglich weisen die NOR-Gatter 516, 616, 716 eine
Ausgabe einer logischen 1 auf, die gewährleistet, dass die entsprechenden Übertragungsgatter 530, 630 etc.; 531, 631,
etc. leitend sind und dass die entsprechenden Leitungen des als
gewählt
vorhergesagten Busses 505 auf einer logischen 1 liegen,
abgesehen von der Leitung, die von der vierten Partition 404 stammt.
Dies ermöglicht
es, die Ausgabe von der Partition 404 auf die Leitungen 503 und 504 auszugeben.
-
Als
zweites Beispiel wird angenommen, dass das vierte Befehlswort 104 in
der abgerufenen Folge der erste Befehl (Befehl 12) ist, der auszuführen ist.
-
Eine
Bezugnahme auf 1 zeigt, dass der Befehl 12
(der die Adresse 01100 hat), ein nicht bedingter Sprung ist. Dementsprechend
stellt die Verzweigungszielpufferschaltkreisanordnung eine logische
1 auf einer Ausgangsleitung 5151 –515n der Vorhersagebearbeitungsspeicherschaltkreisanordnung 514 in
der ersten Partition 401 jedes Mal dann bereit, wenn die
Ausführung
zu diesem Befehl weitergeht, der Sprung ausgewählt wird und der bereitgestellte
Befehl 12 in dem Verzweigungszielpuffer gespeichert ist. Es ist
ersichtlich, dass der Umstand, den Verteilungsbefehl 12 zu wählen, bedeutet,
dass die Ausführung
nicht unmittelbar zu den Befehlen 13, 14 oder 15 weiter geht. Folglich
ist das vorhergesagte Ergebnis des Verteilungsbefehls 14 irrelevant,
da dieser Befehl in der Folge mit dem Befehl 12 nicht ausgeführt wird.
Der Verzweigungszielpuffer berücksichtigt
dies, weil das NOR-Gatter 516 der ersten Partition eine
Ausgabe einer logischen 0 über
seine Ausgangsleitung 517 bereitstellt, um die Übertragungsgatter 530, 531 nicht
leitend zu machen, wobei dadurch die zweiten bis vierten Partitionen 402, 403, 404 isoliert
werden. Die zweite Gruppe an Übertragungsgattern 530 verhindert
die Ausgabe von Zieldaten von den Daten-RAMs der anderen Partitionen und,
wie hier später
beschrieben, verhindert das erste Übertragungsgatter 531,
dass die Vorhersagestärke
von vorhergesagten nicht ausgeführten
Verzweigungsbefehlen aktualisiert werden. Auch wenn dieses die Prioritäten betreffende
Merkmal für
den nicht bedingten Verzweigungsbefehl 12 beschrieben worden ist,
sollte berücksich tigt
werden, dass der Verzweigungszielpuffer nicht erkennt, dass sich
(der Befehl) 12 von einer anderen als gewählt vorhergesagten Verzweigung
unterscheidet. Der Puffer behandelt daher jede andere als gewählt vorhergesagte
Verzweigung auf die gleiche Weise, d. h. dient dazu, jede Ausgabe
für spätere Verzweigungen
in dem gleichen Wort auszuschließen.
-
Betrachte
ein weiteres Beispiel, bei dem die Ausführung des Befehlsworts 102 ausgehend
von dem ersten Befehl dieses Wort beginnen soll (Befehl 4 von 1,
der die Adresse "00100" hat). Zwecks dieses
Beispiels wird angenommen, dass der Befehl 5 (00101) als nicht ausgewählt vorhergesagt
ist und dass der Befehl 7 (00111) als gewählt vorhergesagt ist. Die Befehlswortadresse
wird über
den Befehlswortadresseingangsbus 500 eingegeben, der CAM-"Treffer" mit einer logischen
1 in den zweiten und vierten Partitionen 402, 404 erzeugt.
Die Byteadresse "00" wird über den
Befehlsbyteadresseingabebus 510 zu den Auswahlschaltkreisanordnungen 512, 612, 712, 812 der
Partitionen eingegeben. Wie oben erwähnt, bewirkt die "00"-Adresse, dass jeder der Auswahlschaltkreisanordnungen
Treffer vom Eingang zum Ausgang weiterleitet, um entsprechende logische
1's der Vorhersagebearbeitungsschaltkreisanordnung
bereitzustellen. Bei dem derzeit beschriebenen Beispiel treten derartige
logische 1's in den
zweiten und vierten Partitionen 402 und 404 auf. In
der zweiten Partition 402 speichert das relevante Register
der Vorhersagebearbeitungsschaltkreisanordnung eine "nicht gewählt"-Vorhersage, wobei
folglich alle Ausgänge
der Vorhersagebearbeitungsschaltkreisanordnung 614 logisch
0 bleiben, was angibt, dass keine Verzweigung als gewählt vorgesagt ist.
Demgegenüber
speichert die Vorhersagebearbeitungsschaltkreisanordnung 814 eine "gewählt"-Vorhersage an der
Position, die dem Wort 102 entspricht, und die Anwendung
einer logischen 1 für
einen "Treffer" sorgt für eine Ausgabe
eines gewählten Sprungs
auf einer der Leitungen 815. Dies:
- a)
stellt eine logische 0 an dem Ausgang des zugeordneten NOR-Gatters 816 bereit;
und
- b) bewirkt, dass das Daten-RAM 818 der vierten Partition
eine Zieladresse von "00000" ausgibt. Da keine
der "niedrigeren" Partitionen ein
nicht leitendes Übertragungsgatter
aufweist, wird diese Zieladresse zu dem Zieladressausgangsbus 503 weitergeleitet.
-
Folglich
ist zu erkennen, dass der oben beschriebene Verzweigungszielpuffer
nur den ersten als gewählt
vorhergesagten Verzweigungsbefehl einer Folge identifiziert, der
nicht von einer Ausführung ausgeschlossen
ist, weil er vor dem ersten auszuführenden Befehl der Folge liegt,
und insbesondere die Zieladresse dieses Befehls.
-
Wie
zuvor hinsichtlich von 4 diskutiert, weist jede Partition
des Verzweigungszielpuffers eine Schaltkreisanordnung 550,
die hier als Vorhersagestärkebearbeitungsschaltkreisanordnung
bezeichnet ist, auf, um basierend auf der Vergangenheit der in der
entsprechenden Partition identifizierten Verzweigungsbefehlen Information
zu speichern. Wie zuvor angemerkt, stellt die 4 lediglich eine
beispielhafte Partition 401 dar und die Vorhersagestärkebearbeitungsschaltkreisanordnung 550 hat
Gegenstücke 650, 750, 850 in
den anderen Partitionen.
-
Die
Vorhersagestärkebearbeitungsschaltkreisanordnung 550 empfängt eine
Eingabe von jeder der Auswahlschaltkreisanordnungsausgangsleitungen 5131 –513n . Eine logische 1 tritt auf einer dieser
Ausgangsleitungen 5131 –513n auf, wenn eine Übereinstimmung zwischen der
auf den Bus 500 eingegebenen Wortadresse und Daten vorliegt,
die das Vorhandensein eines in einer der CAM-Zellen 5101 –510n gespeicherten Verzweigungsbefehls
angeben, vorausgesetzt, dass die Auswahlschaltkreisanordnung 512 die
Partition nicht deaktiviert hat, weil der Befehl in dieser Partition
vor einem ersten ausgeführten
Befehl der relevanten Sequenz auftritt. Jeder der Eingänge stellt
eine erste Eingabe zu einem entsprechenden AND-Gatter 5701 –570n bereit. Die andere Eingabe zu jedem
AND-Gatter wird von einem entsprechenden Eintrag 5711 –571n eines Speichers 571 in der
Vorhersagestär kebearbeitungsschaltkreisanordnung
erhalten, der Information speichert, die angibt, ob in Zuordnung
mit den entsprechenden Befehl eine sogenannte "schwache" Vorhersage oder eine sogenannte "starke" Vorhersage vorliegt. Bei
der vorliegenden Ausführungsform
ist eine schwache Vorhersage durch eine in der entsprechenden Stufe
gespeicherte logische 1 angegeben und eine starke Vorsage ist eine
in der entsprechenden Stufe gespeicherte logische 0.
-
Eine
starke Vorhersage gibt ein hohes Maß an Vertrauen an, das die
aktuell gespeicherte Vorhersage korrekt und daher wahrscheinlich
nicht geändert
wird, während
eine schwache Vorhersage ein geringeres Maß an Vertrauen hinsichtlich
der Korrektheit der aktuellen Vorhersage und eine größere Wahrscheinlichkeit
einer Änderung
angibt.
-
Die
Leitungen 5131 –513n bilden
auch einen Eingang für
die entsprechenden AND-Gatter 5721 –572n . Die anderen Eingänge zu den AND-Gattern 5721 –572n werden durch die Aktualisierungsfreigabeleitung 502 bereitgestellt,
die allen diesen Gattern gemeinsam ist. Der Ausgang jedes AND-Gatters 5721 –572n steuert einen entsprechenden Pull-Down-Transistor 5731 –573n . Die Pull-Down-Transistoren 5731 –573n sind mit einem entsprechenden Eintrag 5711 –571n des Vorhersagestärkespeichers 571 verbunden.
Der Ausgang der AND-Gatter 5701 –570n bilden Eingänge für ein OR-Gatter 574 mit
n Eingängen,
das einen Ausgang 504 aufweist, der für jede Partition eine Vorhersagestärkeausgangsleitung
aufweist.
-
Wenn
im Betrieb auf einer der Eingangsleitungen 5131 –513n eine logische 1 auftritt (was angibt, dass
ein Verzweigungsbefehl in der Partition "getroffen" wurde), wird diese logische 1 an eines
der AND-Gatter 5701 –570n angelegt. Das AND-Gatter erzeugt eine
Ausgabe einer logischen 1 nur dann, wenn die entsprechende Stufe
des Vorhersagestärkespeichers 571 eine
logische 1 speichert, was einer "schwachen" Vorhersage entspricht.
-
Wenn
dies auftritt, wird einer der Eingänge zu dem OR-Gatter 574 auf
logisch 1 sein und die Ausgangsleitung 504 weist eine logische
1 auf, die angibt, dass die Vorhersage schwach ist. Die logische
1 auf der einen der Eingangsleitungen 5131 –513n wird auch an einen Eingang eines entsprechenden
der AND-Gatter 5721 –572n angelegt.
-
Der
Ausgang des AND-Gatters 5721 –572n wird auf logisch 0 sein, bis die Aktualisierungsfreigabeleitung 502 auf
logisch 1 ist, was eine automatische Aktualisierung der Vorhersagestärke auf
einen vorläufigen
neuen Wert bewirkt. In diesem Fall wird eines der AND-Gatter 5721 –572n einen Ausgang mit einer logischen
1 aufweisen, was bewirkt, dass der zugeordnete der Pull-Down-Transistoren 5731 –573n sich einschaltet, wobei die entsprechende
Stufe 5711 –571n des
Vorhersagespeichers 571 auf logisch 0 heruntergezogen wird,
wobei dadurch bewirkt wird, dass sich der in dieser Stufe gespeicherte
Vorhersagewert auf logisch 0 ändert,
was eine starke Vorhersage angibt, oder auf logisch 0 bleibt, wenn
er bereits in diesem Zustand war.
-
Wie
zuvor festgestellt, ist zwischen jeder Partition und der nächst höheren Partition
ein entsprechendes Übertragungsgatter 531, 631 etc.
in der Aktualisierungsfreigabeleitung 502 angeschlossen. Es
sei in Erinnerung gerufen, dass dieses Übertragungsgatter leitend ist,
es sei denn, dass die relevante Partition festgestellt hat, dass
ein Verzweigungsbefehl als gewählt
vorhergesagt ist. In diesem Fall wird das Übertragungsgatter während des
Betriebszyklus durch die entsprechende Leitung 517, 617, 717, 817,
die auf logisch 0 übergeht,
nicht leitend gemacht. Am Beginn jedes Zyklus sind die Übertragungsgatter
leitend und eine logische Null wird über die Leitung 502 an
alle Partitionen als Vorladungspegel angelegt. Die logische Null
wird dann abgetrennt, aber die Leitung bleibt auf diesem Pegel.
Sobald die Übertragungsgatter 531, 631 in
Partitionen, wo eine Verzweigung als gewählt vorhergesagt ist, nicht
leitend geworden sind, wird eine logische Eins an die Leitung 502 angelegt.
Die Folge davon besteht darin, dass eine logische 1 auf der Aktualisierungsfreigabeleitung
in jede Partition in aufsteigender Reihenfolge bis zu und einschließlich einer
Partition eingegeben wird, in der ein Verzweigungsbefehl als gewählt vorhergesagt
ist. Spätere
Partitionen, unabhängig
davon, ob sie als gewählt
vorhergesagte Verzweigungsbefehle enthalten oder nicht, empfangen
den Pegel einer logischen Eins nicht, der benötigt wird, um die Vorhersage
zu aktualisieren, und werden daher nicht automatisch aktualisiert.
-
Wenn
während
einer Abrufoperation ein Befehlswort als mehrere Verzweigungsbefehle
aufweisend erkannt wird, ist es wünschenswert, dass die oben
diskutierte automatische Aktualisierung für alle diejenigen Verzweigungsbefehle
stattfindet, die von der Ausführung
nur aufgrund der anfänglichen
Ausführungsstelle
in dem Wort bis zu und einschließlich der ersten als gewählt vorhergesagten
Verzweigung ausgeschlossen sind. Wenn beispielsweise alle der Partitionen 401–404 einen
Verzweigungsbefehl für ein
spezielles Befehlswort speichern und wenn die Ausführung ausgehend
von dem Verzweigungsbefehl in der Partition 402 (als nicht
gewählte
vorhergesagt) beginnen soll und der Befehl in der Partition 403 als
gewählt
vorhergesagt ist, sollten keine Aktualisierung hinsichtlich der
in der Partition 401 gespeicherten Vorhersagen durchgeführt werden
(weil dieser Befehl nicht ausgeführt
werden könnte),
und keine Aktualisierung hinsichtlich des durch die Partition 404 angegebenen
Befehls (weil der durch die Partition 403 angegebene Befehl
als gewählt
vorhergesagt ist, wobei dadurch alle Beurteilungen hinsichtlich
des durch die Partition 404 angegebenen Befehls vorweggenommen
werden) durchgeführt
werden.
-
Diese
Aktualisierungsstrategie ist für
den Verzweigungszielpuffer auf folgende Weise vorgesehen:
Weil
bei diesem Beispiel die Byteadresse, die über den Byteadresseingangsbus 501 eingegeben
wird, bewirkt, dass die Auswahlsschaltkreisanordnungen 512 die
erste Partition 401 deaktiviert, treten auf keiner der
Leitungen 513 logische 1s auf. Daher werden keine logischen
Einsen an die Vorhersagestärke schaltkreisanordnung 550 angelegt
und der Ausgang des NOR-Gatters 516 bleibt
auf logisch 1. Die Gatter 530, 531 bleiben leitend.
Auch wenn in der zweiten Partition 402 kein CAM-Treffer auftritt
und die Auswahlschaltkreisanordnung 612 ermöglicht,
dass die entsprechende logische 1 an die Vorhersagebearbeitungsschaltkreisanordnung 614 angelegt
wird, hat die "nicht
gewählt"-Vorhersage die Folge,
alle logischen 0s an den Leitungen 615 bereitzustellen.
Daher weist das NOR-Gatter 616 eine Ausgabe einer logischen
1 auf und die Gatter 630, 631 sind leitend. Das
Auftreten eines als gewählt
vorhergesagten Ergebnisses in der dritten Partition 403 bewirkt,
dass das NOR-Gatter 716 dieser Partition eine Ausgabe einer
logischen 0 bereitstellt, was das Übertragungsgatter 731 nicht
leitend macht. Daher wird die Aktualisierungsleitung 502 mit
den Partitionen 401–403 verbunden
und von der Partition 404 getrennt. In der Partition 401 findet
keine Aktualisierung statt, weil hierfür auf einer der Leitungen 513 eine
logische 1 erforderlich ist.
-
Die
Vorhersagestärkeinformation
stellt, wie oben erwähnt,
bestimmte Informationen über
den Verlauf von identifizierten Verzweigungsbefehlen bereit.
-
Da
die Vorhersage des Ergebnisses einer Verzweigung – d. h.
ob ein Sprungbefehl gewählt
wird oder nicht – vielmehr
beim Abrufen als beim Ausführen
des Verzweigungsbefehls erforderlich ist, ist es notwendig, die
Vorhersage zur Verwendung beim nächsten
Zeitpunkt zu aktualisieren, zu dem dieser spezielle Sprungbefehl
abgerufen wird, abhängig
davon, ob festgesellt wird oder nicht, dass die aktuell getroffene
Vorhersage während
der aktuellen Ausführung
korrekt ist oder nicht. Die bei der derzeit beschriebenen Ausführungsform
angenommene Strategie besteht darin, auf eine vorläufige neue
Vorhersage auf der Grundlage der Annahme automatisch zu aktualisieren,
dass die aktuelle Vorhersage tatsächlich korrekt ist. Wenn festgestellt
wird, dass die vorläufige
Vorhersage korrekt war, wenn die Verzweigung analysiert wird, wird
die vorläufige
Vorhersage als neue Vorhersage für
die nächste
Ausführung,
die hier als analysierte Vorhersage bezeichnet wird, beibehalten;
nur wenn festgestellt wird, dass die aktuelle Vorhersage nicht korrekt
war, ist eine Korrektur erforderlich, wobei eine korrigierte "analysierte Vorhersage" gespeichert wird.
Der Verzweigungszielpuffer nimmt als Standardeinstellung einen Zustand
ein, in dem keine Verzweigung für
irgendeinen Zyklus als gewählt
vorhergesagt ist, in dem Korrekturen vorgenommen werden. Dies ermöglicht es,
den Verzweigungszielpuffer als Vorrichtung mit einen einzelnen Anschluss
zu implementieren, wobei der einzelne Anschluss alternativ zum Auslesen
von Vorhersagen und zum Einschreiben von Vorhersagen verwendet wird.
-
Bezugnehmend
auf die 6 und 7 ist das
Verfahren, die Vorhersage und die Vorhersagestärke zu aktualisieren, beschrieben.
Beide 6 und 7 zeigen den Verlauf eines Verzweigungsbefehls,
der während
eines Eintragszyklus (E) in den Verzweigungszielpuffer eingegeben
wird. Für
die Erläuterung
wird angenommen, dass jedes Mal, wenn der Verzweigungsbefehl abgerufen
wird, die vorherige Ausführung
des Befehls beschlossen worden ist. In der Praxis kann es möglich sein,
dass der Befehl erneut abgerufen wird, bevor eine vorherige Ausführung beschlossen
worden ist, wie hier später
beschrieben. Beim Eintrag ist die Vorhersage und Vorhersagestärke für jeden
neu eingetragenen Sprungbefehl "schwach – gewählt" (wT; engl.: weakly-taken). Die
Vorhersage und Stärke
werden als logische 1 (was "gewählt" angibt) in dem Vorhersagespeicher 563, 663, 763, 863 und
als logische 1 (was "schwach" angibt), in dem
Vorhersagestärkespeicher 591 etc.
gespeichert, um die Vorhersage für
diesen Befehl zu bilden, wenn er das nächste Mal ausgeführt wird.
-
In
beiden 6 und 7 gibt der Zyklus C1 den
nächsten
Zyklus an, in dem der derzeit berücksichtigte Befehl abgerufen
wird, und die analysierte Vorhersage für den vorherigen Zyklus gibt
den Vorhersagezustand zu dem Zeitpunkt an, an dem der Befehl das
nächste
Mal abgerufen wird, d. h. den Beginn des Zyklus C1.
Auf vergleichbare Weise gibt C2 den zweiten
Anlass an, an dem der Verzweigungsbefehl abgerufen wird, und die
analy sierte Vorhersage für
den Zyklus C1 gibt den vorhergesagten Wert
für den
Zyklus C2 an, und so weiter. In jedem Zyklus
wird die Vorhersage aktualisiert, um eine vorläufige Aktualisierung bereitzustellen,
indem angenommen wird, dass die Vorhersage am Beginn des Zyklus
korrekt war. Wenn die Ausführung
des Befehls zeigt, dass die Vorhersage tatsächlich falsch war, wird die
vorläufige
Aktualisierung verworfen und eine neue Vorhersage gemacht. Diese
neue Vorhersage basiert auf der vorherigen Vorhersage am Beginn
des Zyklus und dem während
der Analyse gewonnenen Wissens.
-
Bei
der derzeit beschriebenen Ausführungsform
wird ein Verzweigungsbefehl in den BTB (engl.: Brand Target Buffer;
Verzweigungspuffer) nur dann eingegeben, wenn er ausgeführt wird,
um einen Sprung aus der normalen Folge zu bewirken. Daher ist am
Ende des Eintragszyklus nach der Analyse des Verlaufs des Sprungbefehls "T" (einmal gewählt).
-
Bezugnehmend
auf 6 ist der Fortgang eines Sprungbefehls, der anfänglich als
korrekt vorausgesagt ist, beschrieben:
Am Beginn des Zyklus
C1 ist die Vorhersage "schwach – gewählt" und es wird von dem Verzweigungszielpuffer
davon ausgegangen, dass der Sprung tatsächlich gewählt wird. Daher wird der Vorhersagezustand
durch die Aktualisierungsfreigabeleitung 502 aktualisiert
und die automatische Aktualisierungsschaltkreisanordnung 572, 573 etc.
auf "stark – gewählt". In diesem Fall
wird der Sprung gewählt.
Daher ist es nicht erforderlich, die vorläufige Vorhersage zu korrigieren,
die die analysierte Vorhersage am Ende des Zyklus wird, der ein
Abrufen und Ausführen
des Befehls umfasst. Am Beginn des Zyklus C2 ist
die Vorhersage "stark – gewählt" und der Sprung wird
als "gewählt" beurteilt. Die vorläufige aktualisierte
Vorhersage bleibt stark gewählt
und, weil der Sprung als gewählt
analysiert worden ist, ist die analysierte Vorhersage ebenso "stark – gewählt".
-
Wenn
in dem Zyklus C3 die Vorhersage jedoch dahingehend
nicht korrekt ist, dass der Sprung als nicht gewählt analysiert wird, dann gilt
das Folgende:
Am Beginn des Zyklus C3 war
die analysierte Vorhersage "stark – gewählt" und die vorläufige Aktualisierung
ist daher "stark – gewählt". Falls jedoch der Sprung
als "nicht gewählt" analysiert worden
ist, erfordert die Vorhersage eine Aktualisierung auf "schwach – gewählt", wie gezeigt. Daher
ist es ersichtlich, dass die Stärke,
nicht die Vorhersage geändert
wird.
-
Für den nächsten Zyklus
C4 ist der Vorhersagewert weiterhin "gewählt", obwohl "schwach – gewählt". Unter der Annahme,
dass das vorhergesagte Verhalten korrekt ist, wird daher die vorläufige Aktualisierung
von "schwach – gewählt" auf "stark – gewählt" sein. Wenn jedoch
der Sprung erneut als nicht gewählt
analysiert wird, muss die analysierte Vorhersage auf "schwach nicht gewählt" korrigiert werden, mit
anderen Worten, die Korrektur von der analysierten Vorhersage des
Zyklus C3 auf die analysierte Vorhersage
des Zyklus C4 erfordert es, die Vorhersage zu ändern, anstatt
die Stärke
zu ändern,
d. h. von "schwach – gewählt" auf "schwach nicht gewählt". Diese Änderung
wird bei der vorliegenden Ausführungsform
durch eine assoziative Nachschlagetabelle durchgeführt.
-
Schließlich ist
am Beginn des Zyklus C5 der Vorhersagewert "schwach nicht gewählt" und dementsprechend
ist die "vorläufige Aktualisierung" auf "stark nicht gewählt". Wenn der Sprung
als "nicht gewählt" analysiert wird,
ist die analysierte Vorhersage "stark
nicht gewählt", während die
analysierte Vorhersage "schwach – gewählt" wäre, wenn
der Sprung als gewählt
analysiert wird.
-
Bezugnehmend
auf 7 ist der Fortgang eines Sprungbefehls gezeigt,
bei dem die erste Analyse des Sprungbefehls nach dem Eintrag in
den Verzweigungszielpuffer nicht korrekt ist. Daher ist im Zyklus
C1 die vorläufige Aktualisierung unter
der Annahme, dass der Vorhersagewert "schwach – gewählt" korrekt ist, auf "stark – gewählt". Der Sprung wird jedoch als "nicht gewählt" analysiert. Folglich
ist die analysierte Vorhersage "schwach – nicht
gewählt", mit anderen Worten,
die Vorhersage am Beginn des Zyklus, die "schwach – gewählt" war, muss auf "schwach – nicht gewählt" korrigiert werden.
-
Am
Beginn des Zyklus C2 liefert die "schwach – nicht
gewählt"-Vorhersage eine vorläufige Aktualisierung auf "stark – nicht
gewählt" und die Analyse des
Sprungs als "nicht
gewählt" bestätigt diesen
Wert als die analysierte Vorhersage. Auch wenn die vorläufige Aktualisierung
auf "stark – nicht
gewählt" bleibt, ergibt die
Analyse im Zyklus C3 jedoch "gewählt", wodurch die analysierte
Vorhersage am Ende des Zyklus C3 "schwach – nicht
gewählt" ist, d. h. es wird
erneut nur die Stärke
der Vorhersage geändert, statt
der Vorhersage selbst. Dies soll mit Zyklus 4 in Kontrast gesetzt
werden, indem der vorhergesagte Wert von "schwach – nicht gewählt" am Beginn des Zyklus auf "stark – nicht
gewählt" aktualisiert wird, aber
als Ergebnis einer Analyse von "gewählt" schließlich auf "schwach – gewählt" korrigiert wird, mit
anderen Worten, eine Änderung
des Vorhersagewerts, nicht der Vorhersagestärke.
-
Die
obige Diskussion des Verzweigungszielpuffers betrifft im Allgemeinen
die Schaltkreisanordnung beim Betrieb des Puffers im Lesemodus.
Einzelheiten der Schaltkreisanordnung zum Schreiben von Information
auf eine beispielhafte Leitung des Verzweigungszielpuffers sind
nun unter Bezugnahme auf 8 beschrieben. 8 zeigt
eine beispielhafte inhaltsadressierbare Speicherzelle 510b , die eine der Speicherzellen 510 in
der ersten Partition 401 ist. Diese inhaltsadressierbare
Speicherzelle 510b ist zur Veranschaulichung
als vier Speicherstellen aufweisend gezeigt, um eine Befehlswortadresse mit
4 Bits zu speichern. Die inhaltsadressierbare Speicherzelle 510b weist eine Ausgangsleitung 511b auf, auf der eine logische 1 für einen "CAM-Treffer" auftritt, wenn eine
Adresseingabe über
den Befehlswortadresseingangsbus 500 eine Übereinstimmung in
der CAM-Zelle findet.
-
Die
Ausgangsleitung 511b geht zu der
vorher beschriebenen Auswahlschaltkreisanordnung 512 zu einer
Ausgangsleitung 513b . Im Schreibmodus ändert der
Eingang 912 den Zustand aus dem Lesemodus, so dass die
Auswahlschaltkreisanordnung 512 eine Verbindung zwischen
seinem Eingang und einem Ausgang bereitstellt, an dem die Partition
liegt, zu der zu schreiben ist, wobei der Schaltkreis 512 aber
für alle
anderen Partitionen keine Verbindung zwischen Eingang und Ausgang
bereitstellt und diese Ausgänge
auf Masse gehalten werden. Die inhaltsadressierbaren Speicherzellen
werden nicht nur mit dem Befehlswortadresseingangsbus, sondern auch
mit einem Befehlswortschreibbus 900 verbunden. Dieser Bus
ist mit jeder der Speicherstellen des inhaltsadressierbaren Speichers
verbunden. Jede der Speicherstellen des inhaltsadressierbaren Speichers 510b ist auch mit einer Schreibfreigabeleitung 901b verbunden, die eine logische 1 empfängt, wenn die
aktuell auf dem Schreibbus 900 auftretende Adresse in die
inhaltsadressierbare Speicherzelle 510b zu
schreiben ist. Eine separate Schreibfreigabeleitung ist für jede Leitung
jeder Partition vorgesehen. Eine weitere Steuerleitung 920,
die mit allen Partitionsleitungen verbunden ist, ist vorgesehen,
um zu ermöglichen,
eine neue Zieladresse in das RAM 518 zu schreiben.
-
Die
CAM-Ausgangsleitung 511b ist mit
einem Pull-Down-Transistor 902b verbunden,
der betriebsfähig
ist, die CAM-Ausgangsleitung auf Masse zu ziehen. Der Pull-Down-Transistor 902b wird durch einen Steuerschaltekreis 903b gesteuert, der selektiv über einen
Eingang 904b gesetzt oder zurückgesetzt
wird, um die Leitung als gültig
oder ungültig
zu markieren. Die Schreibfreigabeleitung 901b ist
auch mit einem Eingang eines OR-Gattes 905b mit
zwei Eingängen verbunden,
dessen anderer Eingang durch den Ausgang des AND-Gatters 564b der Vorhersagebearbeitungsschaltkreisanordnung 514 bereitgestellt
ist, wobei der Ausgang des OR-Gatters 905b eine
Wortleitung 515b für eine Reihe
b des RAM's 518 bildet.
Die Schreibfreigabeleitung 901b ist
ferner mit einem Eingang eines OR-Gattes 906b mit
zwei Eingängen
verbunden. Ein Registereintrag 563b des
Vorhersagespeichers 563 ist mit einer Vorhersageänderungsfreigabeleitung 907 verbunden, die
es ermöglicht, über ein Übertragungsgatter 918b eine neue Vorhersage ausgehend von
dem Schaltkreis 102 einzuschreiben. Der Ausgang des Vorhersagespeichers 563b ist über ein OR-Gatter 565b mit dem AND-Gatter 564b verbunden. Der zweite Eingang des
OR-Gatters 565b ist durch die Steuerleitung 920 bereitgestellt. Eine
Vorhersagestärkespeicherstelle 571b ist mit einer Eingangsleitung 909 verbunden,
die es ermöglicht, über ein
zweites Übertragungsgatter 910b eine neue Vorhersagestärke ausgehend
von einer Zustandsübergangsschaltkreisanordnung 912 einzuschreiben.
Der zweite Ausgang des zweiten OR-Gatters 906b stellt
den Übertragungsgattern 918b und 910b die
Steuereingabe bereit. Der zweite Eingang zu dem zweiten OR-Gatter 906b ist durch den Ausgang eines AND-Gatters 911b bereitgestellt, das von dem entsprechenden
Ausgang der Auswahlschaltkreisanordnung 512 eine erste
Eingabe und von einer Eingangsleitung 912 eine zweite Eingabe
empfängt.
-
Wie
zuvor erwähnt,
ist die Schreibfreigabeleitung 901b betriebsfähig, es
zu ermöglichen,
eine über
den Schreibbus 900 eingegebene Adresse in der CAM-Zelle 510b zu speichern. Zu jeder Zeit werden
eine Leitung des Zieldadress-RAM's
und die zugeordneten Vorhersage- und Vorhersagestärkedaten als
ungültig
identifiziert, wobei eine Leitung in jeder Partition eine CAM-Zelle umfasst, und
es ist diese ungültige
Leitung, zu der ein neuer Verzweigungssprungbefehl geschrieben wird.
Um die in 8 gezeigte Partitionsleitung
ungültig
zu machen, wird eine Eingabe an den Steuereingang 904b angelegt, um den Haltekreis 903b zu setzen und den Pull-Down-Transistor 902b leitend zu machen. Die Wirkung davon
besteht darin, die CAM-Ausgangsleitung 511b auf
Masse zu ziehen. Die CAM-Ausgangsleitung wird dann auf Masse gehalten,
bis ein neuer vorhergesagter Wert in diese Leitung geschrieben wird
und, wie später
beschrieben, die Leitung als gültig
markiert wird.
-
Um
einen neuen, als gewählt
vorhergesagten Eintrag auf die in 8 gezeigte
Leitung zu schreiben, ist es erforderlich, Information in die inhaltsadressierbaren
Speicherzelle 510b , in die Zieladressreihe 518b des Vorhersagespeichers 563b und in den Vorhersagestärkespeicher 571b zu schreiben. Bei der vorliegenden
Ausführungsform
ist die Vorhersage für
eine neu eingegebene Verzweigung "gewählt" und die Vorhersagestärke ist
als "schwach" ausgewählt; daher
ist das gesamte Vorhersageniveau "schwach gewählt". Um dies zu erreichen, antwortet der
Schaltkreis 112 auf einen Eintragungssteuerbefehl von dem
Prozessor 110, um zu bewirken, dass die erste Eingangsleitung 901 eine
logische 1 zuführt
und die zweite Eingangsleitung 909 eine logische 1 zuführt. Wenn
die Schreibfreigabeleitung 901b auf
logisch 1 übergeht,
geht der Ausgang des zweiten OR-Gatters 906b auf
logisch 1 über,
wobei dadurch die Übertragungsgatter 918b und 910b freigegeben
werden und bewirkt wird, dass die logische 1 auf der Leitung 907 in
die Vorhersagespeicherregisterstufe 563b geschrieben
wird (was "gewählt" angibt) und die
logische 1 auf der zweiten Eingangsleitung 909 in die Vorhersagestärkestufe 571b geschrieben wird (was "schwach" angibt). Die auf dem
Schreibbus 900 vorhandenen Adressdaten werden zu der CAM-Zelle 510b , wie zuvor erwähnt worden ist, geschrieben.
Eine an die Leitung 920 angelegte logische 1 gewährleistet,
dass das OR-Gatter 590 eine
logische 1 ausgibt, wobei dadurch die Übertragungsgatter 530 leitend
gemacht werden. Das Vorliegen der logischen 1 auf der Schreibfreigabeleitung 901b , die an dem Eingang zu dem ersten OR-Gatter 905b bereitgestellt ist, stellt jedoch
eine logische 1 auf der Wortleitung 515b zu
der RAM-Leitung 518b bereit, wobei dies erlaubt, Zieladressdaten in
die entsprechende Leitung 518b des
RAM's 508 ausgehend
von einem Zieladresseingangssignal 908 zu schreiben.
-
Um
zu gewährleisten,
dass immer eine leere Leitung für
jede Partition verfügbar
ist, wählt
ein Zufallszahlgenerator 113, jedes Mal, wenn eine neue Verzweigung
in den Verzweigungszielpuffer eingegeben wird, zufällig eine
Leitung in der Partition aus, die die neue Verzweigung enthalten
soll, und gibt ein Bit in den entsprechenden Haltekreis 903 ein,
so dass die Leitung als ungültig
markiert wird. Die Leitung, zu der der Verzweigungsbefehl geschrieben
wird, wird unter Verwendung eines gespeicherten Werts der zuvor
ausgewählten
Zufallszahl ausgewählt.
Dieses Verfahren erfordert es, dass ein erster Reihen dekodierer 115 ein
Signal 904 ausgibt, um eine Leitung als ungültig zu
markieren, und ein zweiter Reihendekodierer 114 ein Signal 901 ausgibt,
um die neue Verzweigung hinzuzufügen.
Der Zufallszahlgenerator 113 ist konfiguriert, um zu gewährleisten,
dass die gleiche Zahl nicht zweimal aufeinanderfolgend erzeugt wird.
-
19 zeigt schematisch ein Computersystem,
das den bereits beschriebenen Verzweigungszielpuffer 400 enthält. Ein
Prozessor 110 ist ausgelegt, Befehle von einem Speicher 111 abzurufen
und eine Mehrzahl von Befehlen in einem Pipeline-Verfahren auszuführen. Die
Abrufadresse wird auf eine Leitung 120 ausgegeben, und
diese vollständige Zieladresse
wird dem Speicher 111 und zum gleichen Zeitpunkt über einen
Multiplexer 116 den Eingängen 500 und 501 des
Puffers 400 zugeführt.
Die abgerufenen Befehle werden auf einer Leitung 121 zu
dem Prozessor zur Ausführung
zugeführt
und die Ergebnisse einer Leseoperation in dem Puffer 400 werden auf
den Leitungen 504, 505 und 507, wie zuvor
beschrieben, dem Prozessor 110 zugeführt. Auf einer entsprechenden
Stufe in der bearbeitenden Pipeline analysiert der Prozessor 110 jeden
Verzweigungsbefehl, um festzustellen, ob er tatsächlich gewählt ist. Wenn der Prozessor
von dem Puffer 400 eine korrekte Vorhersage für den Verzweigungsbefehl
erhalten hat, ist keine Schreiboperation erforderlich. Wenn jedoch
keine korrekte Vorhersage erhalten worden ist (entweder aufgrund
des Fehlens des Verzweigungsbefehls in dem Puffer oder aufgrund
einer Fehlvorhersage durch den Puffer), gibt der Prozessor Signale
an den Schaltkreis 112 aus, um ein Schreiben zu bewirken.
Die Ausgabe auf den Leitungen 122 umfasst das Ergebnis
der Analyse, die Vorhersage für diesen
Verzweigungsbefehl, die geeignete Zieladresse und Verzweigungsadresse
für den
Befehl. Diese werden in die Zustandsübergangsschaltkreisanordnung 112 eingegeben,
die Ausgaben 900, 907, 908, 909, 912, 920 und 502 an
den Verzweigungszielpuffer 400 und eine Ausgabe auf der
Leitung 123 bereitstellt, um den Zufallszahlgenerator 113 zu
betreiben. Die Zustandsübergangsschaltkreisanordnung
spricht auf die auf der Leitung 122 empfangene Analyse
und Vorhersage an, um die Vorhersage oder die Stärke von Vorhersa gewerten gemäß der Analyse
des Verzweigungsbefehls durch den Prozessor 110, wie zuvor
unter Bezugnahme auf die 6 und 7 beschrieben
worden ist, zu ändern.
Die aktualisierte Vorhersage und Stärke von Vorhersagewerten werden
auf den Leitungen 907 und 909 zu dem geeigneten
Eintrag in dem Puffer 400 zusammen mit den anderen zu schreibenden
Daten eingegeben, einschließlich
der Zieladresse auf der Leitung 908, wie bereits unter
Bezugnahme auf 8 beschrieben. In diesem Fall
gibt der Ausgangsbus 900 die vollständige Befehlsadresse des Befehls
für die
Schreiboperation in den Puffer ein und die Leitung 900 bildet
einen zweiten Eingang für
den Multiplexer 116. Die Leitung 912 wird auf
logisch 1 gesetzt, was einer Schreiboperation entspricht, und der
Multiplexer 116 wählt
von der Leitung 900 die Adresse zur Eingabe auf die Leitungen 500 und 501 aus,
um eine zugeordnete Operation in dem CAM der durch 501 bezeichneten
Partition parallel mit der Schreiboperation durchzuführen, die
durch eine Eingabe auf der Leitung 900 unmittelbar in den
Puffer 400 bewirkt wird. Die Eingabe 900, die
unmittelbar von dem Puffer 4 erhalten wird, gibt lediglich die Wortadressbits
der Befehlsadresse ein, weil diese den CAM-Anordnungen 510–810 zugeführt werden.
In 9 weist der Multiplexer 116 einen ersten
Eingang 124 von der Adressleitung 120, einen zweiten
Eingang 125 von der Leitung 900 und einen Steuereingang 126 von
der Leitung 912 auf. Bei jeder Schreiboperation erhält der Verzweigungszielpuffer
eine Eingabe von der Zustandsübergangsschaltkreisanordnung 112,
die versucht, den Inhalt des Puffers ohne Unterscheidung dahingehend
zu korrigieren, ob der Fehler auf eine Fehlvorhersage oder das Fehlen
des Verzweigungsbefehls in dem Puffer zurückzuführen ist. Dementsprechend führt die
Ausführung
in beiden Situation die gleiche Hilfsaktion wie folgt aus:
- 1. Eingabe der Befehlsadresse in den Verzweigungszielpuffer
für eine
zugeordnete Übereinstimmung.
Beginne gleichzeitig Information in die ungültige Leitung in dem Verzweigungszielpuffer zu
schreiben, als ob der Fehler aufgrund des Fehlens des Verzweigungsbefehls
in dem Puffer aufgetreten ist. Wenn die Vorhersage auf der Leitung 907 gewählt ist,
dann wird die Lei tung 920 auf logisch 1 gesetzt, um zu
ermöglichen,
die neue Zieladresse zu schreiben. In diesem Fall stellt das Signal 920,
das 1 ist, dem AND-Gatter 564b eine Eingabe
einer logischen 1 bereit. Wenn für
diese Partitionsreihe ein CAM-Treffer auftritt, wird das Signal 513b auf logisch 1 gesetzt und das OR-Gatter 905b stellt folglich eine logische 1 auf
der Wortleitung 505b des RAM's bereit. Zusätzlich bewirkt die
Leitung 920, dass der Schaltkreis 506 die neue
Zieladresse von dem Eingang 908 auf die RAM-Bitleitungen 503 ausgibt,
so dass die neue Zieladresse in diese Reihe des RAM's geschrieben wird.
- 2. Wenn die zugeordnete Übereinstimmung
einen Treffer erzeugt, gibt dies an, dass die Verzweigung bereits
durch den Verzweigungszielpuffer ermittelt worden ist. Folglich
wird der (angeblich neue) Verzweigungseintrag beendet, indem die relevante
Leitung als ungültig
hinterlassen wird.
-
Wenn
die zugeordnete Übereinstimmung
zu keinem Treffer führte,
war die Ursache des Fehlers eine tatsächlich neue Verzweigung, und
die Leitung, in die die Information geschrieben wird, wird als ungültig markiert.
In diesem Fall ist keine der Leitungen 513 hochpegelig,
so dass ein Ausgang 923 eines OR-Gatters 922 einen
niedrigen Pegel hat. Die Leitung 923 bildet einen Eingang
für den
Haltekreis 903b , um den Haltekreis
für die
neue Leitung frei zu geben, die durch das hochpegelige Signal auf
der Leitung 901b ausgewählt wird,
um dadurch diese Leitung als gültig
zu markieren. Das Signal 903 bewirkt, dass der Haltekreis 903b auf ein Signal auf der Leitung 904b anspricht, um eine neue Leitung als
ungültig
zu markieren.
-
Wenn
eine falsche Vorhersage getroffen worden ist, können die Eigenschaften hinsichtlich
einer automatischen Aktualisierung des beschriebenen Verzweigungszielpuffers
zu einem falschen Wert einer vorläufigen Aktualisierung einer
gespeicherten Vorhersage führen.
Bezug sollte auf die 6 und 7 und die
entsprechende Beschreibung genommen werden. Daraus ist ersichtlich,
dass, wenn die ursprüngliche
Vorhersage "schwach – gewählt" oder "schwach – nicht
gewählt" war und der Analyse der Verzweigung
in der entgegengesetzten Richtung war, d. h. "nicht gewählt" oder "gewählt", ein neuer Vorhersagewert
in den Vorhersagespeicher 563 geschrieben werden muss.
Wenn andererseits die ursprünglich
gespeicherte Vorhersage "stark – gewählt" oder "stark – nicht
gewählt" war, dann muss, wenn
die Verzweigung in der entgegengesetzten Richtung analysiert worden
ist, das Stärkebit
erneut geschrieben werden. Dementsprechend erlaubt, unter Bezugnahme
auf 8, die dritte Eingangsleitung 912 das
Schreiben einer neuen Vorhersage und Vorhersagestärkebits
in die entsprechende Leitung des Vorhersagespeichers 563 und
des Vorhersagestärkespeichers 571.
Zum erneuten Schreiben des Werts einer Vorhersage oder einer Vorhersagestärke, wird
die Schreibfreigabeleitung 901b auf
logisch 0 gehalten, wobei dadurch verhindert wird, dass eine neue
Adresse in die CAM-Zelle oder eine neue Zieladresse in das RAM 518 geschrieben
wird, wobei stattdessen die dritte Eingangsleitung 912 auf
logisch 1 gebracht wird. Das Vorhandensein einer logischen 1 (was
der Übereinstimmung
zwischen der eingegebenen Befehlsadresse auf dem Bus 500 und
der in der CAM-Zelle 510b gespeicherten
Information entspricht) stellt dem zweiten Eingang des AND-Gatters 911b eine logische 1 und eine konsequente
logische 1 an dem Ausgang des zweiten OR-Gatters 906b bereit. Dies bewirkt, dass die Übertragungsgatter 918b und 910b leitend
gemacht werden, was ermöglicht, den
neuen Vorhersagewert über
die Leitung 907 einzugeben und den neuen Vorhersagestärkewerte über die
Leitung 909 einzugeben.
-
Bei
der unter Bezugnahme auf 3 beschriebenen Ausführungsform
wird keine Vorhersage in Zyklen durchgeführt, wo eine Schreiboperation
in den Verzweigungszielpuffer durchgeführt wird – d. h. der Verzweigungszielpuffer
erzeugt keine Zieladress- oder Vorhersageausgabe.
-
Es
ist ersichtlich, dass das obige Beispiel eine Schaltkreisanordnung
bereitstellt, um einen doppelten Eintrag in dem Puffer für den gleichen
Verzweigungsbefehl zu verhindern. Es ist verständlich, dass aufgrund der Prozessor-Pipeline
eine Verzögerung
zwischen einem neuen Verzweigungsbefehl, der zuerst von dem Prozessor
abgerufen und als in dem Puffer fehlend erkannt wird, und der endgültigen Analyse
des Verzweigungsbefehls durch den Prozessor vorliegt, die dann zu
einer Ausgabe über
die Zustandsübergangsschaltkreisanordnung 112 führen würde, um
ein Schreiben in den Puffer hinein zu bewirken. Auch wenn es unwahrscheinlich
ist, ist es möglich,
dass der gleiche Verzweigungsbefehl durch den Prozessor ein zweites
Mal abgerufen werden könnte,
bevor die erste Ausführung
des Verzweigungsbefehls analysiert worden ist und einen Schreibeintrag
in den Puffer hinein bewirkt hat. Es ist sehr wichtig, die Möglichkeit
zu vermeiden, den gleichen Verzweigungsbefehl in den Puffer an einer
anderen Stelle zu schreiben, wenn der Befehl zu dem ersten Zeitpunkt,
zu dem er zum ersten Mal durch den Prozessor abgerufen wurde, nicht
in dem Puffer angeordnet war. Aus diesem Grund wird eine assoziative Anpassung
der Verzweigungsadresse am Eingang 500, 501 parallel
zu der Schreibeingabe auf der Leitung 900 durchgeführt. Die
Verwendung des Multiplexers 116 gewährleistet, dass die Schreibadresse
auf dem Bus 900 gleichzeitig für beide Operationen verwendet
wird und, während
diese parallele Operation ausgeführt
wird, die Leitung, zu der geschrieben wird, ungültig beibehalten wird. Wenn
diese zugeordnete Operation einen Treffer findet, wird die neue
Eintragungsleitung als ungültig
aufrecht erhalten und eine Leitung, auf der der Treffer aufgetreten
ist, weist eine Modifikation der Vorhersagestärke und des Ziels auf, die
von der Zustandsübergangsschaltkreisanordnung 102 eingegeben
worden sind. Im Fall, dass durch die zugeordnete Operation kein
Treffer festgestellt wurde, wird die neue Eintragungsleitung als
gültig
markiert und eine weitere neue Leitung wird zur Vorbereitung für eine nächste Schreiboperation
ungültig
gemacht.
-
In 3 speichern
sowohl die inhaltsadressierbaren Speicherzellen 510, 610, 710 und 810 als auch
die Daten-RAMs 518, 618, 718, 818 vollständige Adressen.
Im Fall der CAM-Zelle ist durch die "vollständige Adresse" die vollständige Abrufadresse jedes
Befehlsworts gemeint. Für
das Daten-RRM bedeutet die "vollständige Adresse" die genaue Zieladresse
oder den Offset von der Adresse des ausführenden Verzweigungsbefehls.
-
Bei
einer Ausführungsform
speichern jedoch sowohl die CAM-Zellen
als auch das Daten-RAM weniger als vollständige Adressen. Insbesondere,
bevor ein Verzweigungsbefehl in den Verzweigungszielpuffer eingegeben
wird, werden die höchstwertigen
Bits der Abrufadresse des Verzweigungsbefehls mit den höchstwertigen
Bits der Zieladresse dieses Befehls verglichen. Dies wird durch
einen Vergleichsschaltkreis bewerkstelligt, der Adresse auf den
Ausgangsleitungen 900 und 908 von dem Schaltkreis 112 vergleicht.
Wenn die Inhalte einer ausgewählten
Anzahl der höchstwertigen
Bits der Abrufadresse sich von den Inhalte der gleichen Anzahl an
ausgewählten Bits
der Zieladressen unterscheiden, wird kein Eintrag in den Verzweigungszielpuffer
vorgenommen. Wenn die Inhalte der ausgewählten Anzahl an höchstwertigen
Bits sowohl in der Abrufadresse als auch in der Zieladresse gleich
sind, d. h. das Ergebnis den Verzweigungsbefehl auszuwählen, würde darin
bestehen, zu einer neuen Abrufadresse zu verzweigen, die sich in
dem gleichen oder einem benachbarten Programmsegment zu der Abrufadresse des
Befehls selbst befindet, werden die niederwertigen Bits der Zieladresse
dieses Befehls in dem Verzweigungszielpuffer gespeichert. Auf vergleichbare Weise
wird die gleiche Anzahl an niederwertigen Bits der Verzweigungsbefehladresse
von der Leitung 900 in den Puffer 400 geschrieben.
-
Bei
dieser Anordnung wird während
des Abrufens von Befehlen die vollständige Abrufadresse an den Verzweigungszielpuffer
angelegt, auch wenn nur die relevante Anzahl niederwertiger Bits
der Abrufadresse über
den Befehlswortadressbus 500 eingegeben wird. Es ist für Fachleute
auf dem Gebiet ersichtlich, dass bei dieser Ausführungsform Befehle von anderen
Programmsegmenten, d. h. Befehle mit höchstwertigen Bits, die sich
von den höchstwertigen Bits
des Verzweigungsbefehls unterscheiden, der gespeichert ist, niederwertige
Bits aufweisen können, die
identisch mit denjenigen der gespeicherten Befehle sind. Die Folge
davon besteht darin, dass Befehle mit daraus resultierenden Bearbeitungsverzögerungen
fälschlicherweise
als Verzweigungsbefehle identifiziert werden können.