DE69634464T2 - Cachespeicher - Google Patents

Cachespeicher Download PDF

Info

Publication number
DE69634464T2
DE69634464T2 DE69634464T DE69634464T DE69634464T2 DE 69634464 T2 DE69634464 T2 DE 69634464T2 DE 69634464 T DE69634464 T DE 69634464T DE 69634464 T DE69634464 T DE 69634464T DE 69634464 T2 DE69634464 T2 DE 69634464T2
Authority
DE
Germany
Prior art keywords
instruction
address
branch
line
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69634464T
Other languages
English (en)
Other versions
DE69634464D1 (de
Inventor
Peter Domain de l'Etoile Cumming
Richard Kirkcaldy Grisenthwaite
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
STMicroelectronics Ltd Great Britain
Original Assignee
STMicroelectronics Ltd Great Britain
SGS Thomson Microelectronics Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by STMicroelectronics Ltd Great Britain, SGS Thomson Microelectronics Ltd filed Critical STMicroelectronics Ltd Great Britain
Publication of DE69634464D1 publication Critical patent/DE69634464D1/de
Application granted granted Critical
Publication of DE69634464T2 publication Critical patent/DE69634464T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Description

  • 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 39 beschrieben, wobei die Schaltkreisanordnung einen Verzweigungszielpuffer aufweist.
  • Zuerst Bezug nehmend auf 3 besteht ein Verzweigungszielpuffer 400 aus vier im Allgemeinen gleichen Abschnitten 401404, 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 401404 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 512812 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 517817 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 600699, diejenigen der Partition 403 in dem Bereich 700799 und diejenigen der Partition 404 in dem Bereich 800899 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 518818 sind daher in Reihe mit einem gemeinsamen Weg zu dem Ausgang 503 angeschlossen und die Steuergatter 530830 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 401403, 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 401404 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 401403 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 510810 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.

Claims (13)

  1. Verfahren zum Laden von Einträgen in einen Cache-Speicher, der einen inhaltsadressierbaren (CAM)-Bereich (510) mit einer Mehrzahl von Leitungen (511) umfasst, die jeweils mit einer entsprechenden Leitung eines Datenspeicherbereichs (518) verbunden sind, welches 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.
  2. Verfahren nach Anspruch 1, umfassend die Gültigkeit einer oder mehrerer Leitungen (511b) 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 Cachetreffer aufgefunden wird.
  3. Verfahren nach Anspruch 1 oder Anspruch 2, bei dem in Antwort auf einen Cachetreffer in einer CAM-Leitung (511b) Daten, die in dieser Leitung des Datenspeicherbereichs gespeichert sind, durch die Schreiboperation modifiziert werden.
  4. Verfahren nach einem der Ansprüche 1 bis 3, bei dem ein zugeordneter Eingang des CAM mit einer Auswahlschaltkreisanordnung (116) verbunden ist, die ausgelegt ist, um sowohl Schreibdaten (900) als auch zugeordnete Daten (500) zu empfangen, wobei das Verfahren umfasst, die Auswahlschaltkreisanordnung (116) zu betreiben, wenn eine Schreiboperation bewirkt wird, um die Schreibdaten für den zugeordneten Eingang auszuwählen.
  5. Verfahren zum Betreiben eines Verzweigungszielpuffers, umfassend, das Verfahren nach Anspruch 1 zu verwenden, um zu verhindern, dass die Adresse einen einzelnen Verzweigungsbefehl als mehrfacher Eintrag in dem Puffer gespeichert wird, welches Verfahren umfasst, die Gültigkeit einer oder mehrerer Leitungen (511b) in dem Cache (400) 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.
  6. Verfahren nach Anspruch 5, bei dem in Antwort auf einen Cachetreffer in einer CAM-Leitung Daten, die in dieser Leitung des Datenspeicherbereichs gespeichert sind, durch die Schreiboperation modifiziert werden.
  7. Verfahren nach Anspruch 6, bei dem der CAM (510) verwendet wird, um Adressdaten zu speichern, die eine Mehrzahl von Verzweigungsbefehlen betreffen, und der Datenspeicherbereich (514, 518, 550) verwendet wird, um für jeden Verzweigungsbefehl in dem Cache eine Zieladresse für den Verzweigungsbefehl zusammen mit einer Vorhersage darüber zu speichern, ob die Verzweigung ausgewählt wird, wenn der Befehl von einem Prozessor ausgeführt wird, wobei die Schreiboperation eine Modifikation wenigstens einer der Zieladressen oder Vorhersage im Fall eines Cachetreffers während der Schreiboperation bewirkt.
  8. Verfahren nach Anspruch 7, bei dem der Datenspeicherbereich (550) auch einen Vorhersagestärkewert zusätzlich zu der Vorhersage speichert und die Schreiboperation wirksam ist, den Vorhersagestärkewert im Fall eines Cachetreffers während der Schreiboperation zu modifizieren.
  9. Cachespeicher mit einem inhaltsadressierbaren Speicher-(CAM)-Bereich (510) mit Adressdaten und einer Mehrzahl von Leitungen (511), die jeweils mit einer entsprechenden Leitung eines Datenspeicherbereichs (518) verbunden sind, wobei der CAM-Bereich einen zugeordneten Eingang (500), um Adressdaten einzugeben, um eine zugeordnete Operation zu bewirken, und einen Schreibeingang (900) aufweist, um Adressdaten einzugeben, um eine Schreiboperation zu bewirken, wobei der zugeordnete Eingang mit einer Eingangsauswahlschaltkreisanordnung (116) 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 wird, 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, wobei dadurch verhindert wird, dass die gemeinsame Adresse in mehr als einer Leitung des Cache gespeichert wird.
  10. Verzweigungszielpuffer mit einem Cachespeicher, wie in Anspruch 9 beansprucht, wobei der CAM-Bereich (510) Adressdaten speichert, die eine Mehrzahl von Verzweigungsbefehlen betreffen, und der Datenspeicherbereich (514, 518, 550) für jeden Verzweigungsbefehl in dem Cache eine Zieladresse für den Verzweigungsbefehl zusammen mit einer Vorhersage darüber speichert, ob die Verzweigung ausgewählt wird, wenn der Befehl von einem Prozessor ausgeführt wird.
  11. Verzweigungszielpuffer nach Anspruch 10, bei der der Cache eine Datenmodifizierungsschaltkreisanordnung (502) (908) aufweist, die betriebsfähig ist, in Antwort auf eine Schreiboperation Daten zu modifizieren, die für einen Ver zweigungsbefehl gespeichert sind, die von einem Cachetreffer während einer Schreiboperation ausgemacht wurde.
  12. Verzweigungszielpuffer nach Anspruch 11, bei dem der Datenspeicherbereich eine Speicherschaltkreisanordnung (550) aufweist, um einen Vorhersagestärkewert zusätzlich zu der Vorhersage für jeden in dem Cache gespeicherten Verzweigungsbefehl zu speichern, und die Speicherschaltkreisanordnung auf die Datenmodifizierungsschaltkreisanordnung (502) anspricht, um den Vorhersagestärkewert in Antwort auf eine Schreiboperation zu modifizieren, die einen Verzweigungsbefehl in dem Puffer betrifft.
  13. Computersystem mit einem Speicher zum Speichern einer Mehrzahl von Befehlen, einem Prozessor (110) zum sequenziellen Ausführen einer Mehrzahl von Befehlen und einem Verzweigungszielpuffer (400) gemäß einem der Ansprüche 10 bis 12, um eine Zieladresse für einen Verzweigungsbefehl vorherzusagen, die zur Ausführung durch den Prozessor aus dem Speicher geholt wird.
DE69634464T 1995-10-26 1996-10-23 Cachespeicher Expired - Lifetime DE69634464T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB9521977 1995-10-26
GBGB9521977.0A GB9521977D0 (en) 1995-10-26 1995-10-26 Cache memory

Publications (2)

Publication Number Publication Date
DE69634464D1 DE69634464D1 (de) 2005-04-21
DE69634464T2 true DE69634464T2 (de) 2006-01-05

Family

ID=10782960

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69634464T Expired - Lifetime DE69634464T2 (de) 1995-10-26 1996-10-23 Cachespeicher

Country Status (4)

Country Link
US (1) US5946705A (de)
EP (1) EP0770955B1 (de)
DE (1) DE69634464T2 (de)
GB (1) GB9521977D0 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6112299A (en) * 1997-12-31 2000-08-29 International Business Machines Corporation Method and apparatus to select the next instruction in a superscalar or a very long instruction word computer having N-way branching
US6101573A (en) * 1998-06-12 2000-08-08 Arm Limited Bit line and/or match line partitioned content addressable memory
US6725337B1 (en) * 2001-05-16 2004-04-20 Advanced Micro Devices, Inc. Method and system for speculatively invalidating lines in a cache
KR100591769B1 (ko) * 2004-07-16 2006-06-26 삼성전자주식회사 분기 예측 정보를 가지는 분기 타겟 버퍼
JP4393317B2 (ja) * 2004-09-06 2010-01-06 富士通マイクロエレクトロニクス株式会社 メモリ制御回路
US7640399B1 (en) 2006-05-10 2009-12-29 Advanced Micro Devices, Inc. Mostly exclusive shared cache management policies
JP4940824B2 (ja) * 2006-08-18 2012-05-30 富士通セミコンダクター株式会社 不揮発性半導体メモリ

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3781812A (en) * 1971-06-28 1973-12-25 Burroughs Corp Addressing system responsive to a transfer vector for accessing a memory
US4847755A (en) * 1985-10-31 1989-07-11 Mcc Development, Ltd. Parallel processing method and apparatus for increasing processing throughout by parallel processing low level instructions having natural concurrencies
EP0468831B1 (de) * 1990-06-29 1997-10-15 Digital Equipment Corporation Busprotokoll für Prozessor mit write-back cache
US5414822A (en) * 1991-04-05 1995-05-09 Kabushiki Kaisha Toshiba Method and apparatus for branch prediction using branch prediction table with improved branch prediction effectiveness
GB9205551D0 (en) * 1992-03-13 1992-04-29 Inmos Ltd Cache memory
US5692167A (en) * 1992-07-31 1997-11-25 Intel Corporation Method for verifying the correct processing of pipelined instructions including branch instructions and self-modifying code in a microprocessor
EP0649084A1 (de) * 1993-10-18 1995-04-19 Cyrix Corporation Verzweigungsverarbeitung in Mikroprozessor
US5604909A (en) * 1993-12-15 1997-02-18 Silicon Graphics Computer Systems, Inc. Apparatus for processing instructions in a computing system
US5550995A (en) * 1994-01-03 1996-08-27 Motorola, Inc. Memory cache with automatic alliased entry invalidation and method of operation
US5574871A (en) * 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer

Also Published As

Publication number Publication date
GB9521977D0 (en) 1996-01-03
US5946705A (en) 1999-08-31
EP0770955B1 (de) 2005-03-16
DE69634464D1 (de) 2005-04-21
EP0770955A1 (de) 1997-05-02

Similar Documents

Publication Publication Date Title
DE69534148T2 (de) Rechnersystem zur Ausführung von Verzweigungsbefehlen
DE3485766T2 (de) Nach dem pipelineverfahren arbeitende fehlerkorrektur.
DE69133302T2 (de) Registerabbildung in einem einzigen Taktzyklus
DE69434728T2 (de) Synchronisationssystem und verfahren in einem datencachesystem mit aufgeteiltem pegel
DE68911398T2 (de) Methode und digitaler computer zum vorausholen von vektordaten aus dem speicher in einem für skalaverarbeitung bestimmten speichersystem.
DE3750935T2 (de) Verfahren und System zum Erleichtern der Befehlsausführung in einem digitalen Rechner.
DE69130858T2 (de) Überlappende Serienverarbeitung
DE69702350T2 (de) Verzweigungsvorhersageschema für cachespeicherzeile, das von sätzen eines set-assoziativen cachespeichers gemeinsam verwendet wird
DE10084556B4 (de) Optimierte Ausführung von statisch sehr wahrscheinlich vorhergesagten Verzweigungsbefehlen
DE69622663T2 (de) Zweistufige vorausholungspufferstruktur und verfahren mit bypass
DE68928727T2 (de) Cachespeicheranlage zum Versorgen eines Festworts eines Befehlscodes mit variabler Länge und Befehlsabrufanlage
DE112006000339B4 (de) System für einen beschränkten Cache-Zugriff während des Datentransfers und Verfahren dazu
DE69738188T2 (de) Verfahren und apparat für eine erhöhte genauigkeit bei der verzweigungsvorhersage in einem superskalaren mirkroprozessor
DE3851746T2 (de) Sprungvorhersage.
DE69327927T2 (de) Schnelles Vorausholen und Zuteilung von Befehlen mittels vorausschauender Anmerkungen von früher vorausgeholten
DE68907518T2 (de) Inhaltsadressierte Speicheranordnung.
DE4335475A1 (de) Datenverarbeitungseinrichtung mit Cache-Speicher
DE19526007A1 (de) Horizontal partitionierter Befehls-Cache-Speicher
DE69418146T2 (de) Temporärer Registersatz für einen superpipeline-superskalaren Prozessor
DE68924719T2 (de) Vorrichtung und Verfahren zur Ausführung eines Unterprogramms in einem Datenverarbeitungssystem mit Blockumschaltung.
DE19855806A1 (de) Vorrichtung und Verfahren zum Durchführen von Unterprogrammaufruf- und Rücksprungoperationen
DE2644441A1 (de) Datenverarbeitungssystem
DE19526008A1 (de) Vertikal partitionierter, primärer Befehls-Cache-Speicher
DE69415393T2 (de) Struktur zur Verwendung eines teilweise funktionsfähigen Cachespeichers
DE69634464T2 (de) Cachespeicher

Legal Events

Date Code Title Description
8364 No opposition during term of opposition