DE69908193T2 - Ausführung von speicher- und ladeoperationen mittels einer linkdatei - Google Patents

Ausführung von speicher- und ladeoperationen mittels einer linkdatei Download PDF

Info

Publication number
DE69908193T2
DE69908193T2 DE69908193T DE69908193T DE69908193T2 DE 69908193 T2 DE69908193 T2 DE 69908193T2 DE 69908193 T DE69908193 T DE 69908193T DE 69908193 T DE69908193 T DE 69908193T DE 69908193 T2 DE69908193 T2 DE 69908193T2
Authority
DE
Germany
Prior art keywords
data
memory
load
buffer
store
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
DE69908193T
Other languages
English (en)
Other versions
DE69908193D1 (de
Inventor
Alexander William HUGHES
R. Derrick MEYER
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
GlobalFoundries Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Application granted granted Critical
Publication of DE69908193D1 publication Critical patent/DE69908193D1/de
Publication of DE69908193T2 publication Critical patent/DE69908193T2/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/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

  • Hintergrund der Erfindung
  • 1. Technisches Gebiet
  • Diese Erfindung betrifft das Gebiet der Prozessoren und insbesondere die Lade/Speichereinheiten innerhalb von Prozessoren.
  • 2. Stand der Technik
  • Prozessoren werden mehr und mehr unter Benutzung von Techniken zur Erhöhung von der Anzahl pro Sekunde ausgeführten Befehlen entworfen. Superskalare Techniken umfassen die Bereitstellung mehrfacher Ausführungseinheiten und den Versuch, mehrere Befehle parallel auszuführen. Pipeliningoder Superpipelining-Techniken umfassen ein Überschneiden bei der Ausführung von verschiedenen Befehlen, welche Stufen der Pipeline benutzen. Jede Stufe führt einen Teil des Befehlsausführungsprozesses aus (umfassend Holen, Dekodierung, Ausführung und Übergabe des Ergebnisses, neben anderen), und gibt den Befehl an die nächste Stufe weiter. Während jeder Befehl immer noch in dem gleichen Betrag an Zeit ausgeführt wird, erlaubt die Überschneidung bei der Ausführung von Befehlen, dass die tatsächliche Ausführungsrate höher ist. Typische Prozessoren verwenden eine Kombination dieser Techniken und anderer, um die Ausführungsrate von Befehlen zu erhöhen.
  • Mit der Verwendung von ausgedehnteren superskalaren Konfigurationen und/oder tieferen Befehlspipelines wird die Latenzzeit des Speichers ein noch größeres Thema als es vorher schon war. Während praktisch alle modernen Prozessoren einen oder mehrere Cachespeicher verwenden, um die Latenzzeit des Speichers zu verringern, beginnt sogar der Zugriff auf diese Cachespeicher die Leistungsfähigkeit zu beeinflussen.
  • Genauer gesagt steigt, da Prozessoren eine größere Anzahl von Befehlen erlauben, die in der Verarbeitung innerhalb des Prozessors sind, die Anzahl von Lade- und Speicher-Operationen, die in der Verarbeitung sind, ebenso. Wie hier benutzt ist ein Befehl "in der Verarbeitung", wenn der Befehl in die Befehlspipeline geholt worden ist (entweder spekulativ oder nicht spekulativ) aber die Ausführung bislang noch nicht durch die Übergabe seines Ergebnisses (entweder zu architekturisierten Registern oder Speicherstellen) beendet worden ist. Des weiteren ist der Ausdruck "Speicheroperation" eine Operation, welche einen Transfer von Daten zwischen einem Prozessor und Speicher angibt (obwohl der Transfer im Cachespeicher ausgeführt werden kann). Lade-Speicheroperationen geben einen Transfer von Daten vom Speicher zu dem Prozessor an und Speicher-Speicheroperationen geben einen Transfer von Daten von dem Prozessor zu dem Speicher an. Lade-Speicheroperationen können hier knapper als "Ladevorgang" bezeichnet werden und ähnlich können Speicher-Speicheroperationen als "Speichervorgang" bezeichnet werden. Speicheroperationen können implizit innerhalb eines Befehls sein, der direkt auf einen Speicheroperanden zugreift, um seine definierte Funktion (zum Beispiel arithmetisch, logisch usw.) auszuführen, oder können ein expliziter Befehl sein, der nur den Transfer von Daten ausführt, was von dem von dem Prozessor verwendeten Befehlssatz abhängt. Im allgemeinen geben Speicheroperationen die betroffene Speicherstelle über eine Adresse an, welche von einem oder mehreren Operanden der Speicheroperation erzeugt wurde. Diese Adresse wird hier allgemein als "Datenadresse" bezeichnet werden oder als Ladeadresse (wenn die entsprechende Speicheroperation ein Ladevorgang ist) oder als Speicheradresse (wenn die entsprechende Speicheroperation ein Speichervorgang ist). Andererseits werden Adressen, welche die Befehle selbst in dem Speicher ausfindig machen, als "Befehlsadressen" bezeichnet.
  • Da Speicheroperationen ein Teil des Befehlsflusses sind, führt das Vorhandensein von mehreren Befehlen in der Verarbeitung zu dem Vorhandensein von mehreren Speicheroperationen in der Verarbeitung. Unglücklicherweise ist das Hinzufügen von zusätzlichen Anschlüssen an den Daten-Cachespeicher, um mehr Operationen das parallele Auftreten zu erlauben, im allgemeinen über wenige Anschlüsse (zum Beispiel 2) nicht durchführbar, wegen des Anstiegs sowohl der Zugriffszeit des Cachespeichers als auch der von der Schaltung des Daten-Cachespeichers belegten Fläche. Entsprechend werden oftmals relativ größere Puffer für Speicheroperationen eingesetzt. Das Abtasten dieser Puffer für Speicheroperationen, um auf den Daten-Cachespeicher zuzugreifen ist im allgemeinen komplex und entsprechend langsam. Das Abtasten kann die Latenzzeit für Lade-Speicheroperationen wesentlich beeinflussen, sogar für Treffer im Cachespeicher.
  • Darüber hinaus sind Daten-Cachespeicher begrenzte Speicher, für die einige Lade- und Speichervorgänge nicht treffen werden. Eine Speicheroperation ist ein "Treffer" in einem Cachespeicher, wenn die Daten, auf die von der Speicheroperation zugegriffen werden, zu dem Zeitpunkt des Zugriffs in dem Cachespeicher gespeichert sind. Eine Speicheroperation ist ein "Fehltreffer" in einem Cachespeicher, wenn die Daten, auf die von der Speicheroperation zugegriffen werden, zu dem Zeitpunkt des Zugriffs nicht in dem Cachespeicher gespeichert sind. Wenn eine Lade-Speicheroperation einen Daten-Cachespeicher fehl trifft, werden die Daten üblicherweise in den Cachespeicher geladen. Speicher-Speicheroperationen, welche dem Daten-Cachespeicher fehl treffen, können veranlassen, dass die Daten in den Cachespeicher geladen werden, oder können es nicht veranlassen. Daten werden in Cachespeichern in Einheiten gespeichert, die als "Cachezeilen" bezeichnet werden, welche die minimale Anzahl von benachbarten Bytes sind, die zugewiesener und freigegebener Speicher innerhalb des Cachespeichers sein können. Da viele Speicheroperationen versucht werden, wird es immer wahrscheinlicher, dass zahlreiche Fehltreffer im Cachespeicher erfahren werden. Des weiteren kann in vielen üblichen Fällen ein Fehltreffer innerhalb einer Cachezeile schnell von einer großen Anzahl von zusätzlichen Fehltreffern in dieser Cachezeile gefolgt werden. Diese Fehltreffer können die in dem Prozessor für Speicheroperatio nen zugewiesenen Puffer füllen oder nahe an ein Gefüllt sein bringen. Ein effizientes Schema zum Puffern von Speicheroperationen wird daher benötigt.
  • Ein zusätzliches Problem, das sogar noch schwerwiegender wird, da Prozessoren breitere, superskalare Konfigurationen und/oder tiefere Pipelines verwenden, ist die Ausgabe einer Speicher zu Lade Weiterleitung. Da mehr Speicheroperationen vor ihrer Beendigung warten können, wird es wahrscheinlicher, dass Lade-Speicheroperationen frühere Speicher-Speicheroperation, die noch in den Puffern sind, treffen werden. Darüber hinaus wird es immer wahrscheinlicher, da die spekulative Ausführung von Befehlen wegen der größeren Anzahl von in der Verarbeitung befindlichen Befehlen innerhalb des Prozessors ansteigt, dass Ladevorgänge versuchen werden auszuführen, bevor die Speichervorgänge ihre Speicherdaten empfangen. Während Ladevorgänge, die ältere Ladevorgänge treffen, welche die entsprechenden Speicherdaten zur Verfügung haben, die entsprechenden Speicherdaten von den Puffern empfangen können, werden Ladevorgänge, die ältere Ladevorgänge treffen, welche die entsprechenden Speicherdaten nicht zur Verfügung haben, für einen späteren Zeitpunkt erneut geplant. Da der Betrag der Zeit ansteigt, um den Ladevorgang zeitlich zu planen, den Ladevorgang auszuführen, auf den Daten-Cachespeicher zuzugreifen (und den Treffer in dem Speichervorgang festzustellen) und die Daten weiterzuleiten, tendiert die Verzögerung der entsprechenden Speicherdaten, die zu den Daten bereitgestellt werden, welche als die Ladedaten weitergeleitet werden, anzusteigen. Des weiteren neigen tiefere Puffer zu einer Erhöhung des Betrags an Zeit zwischen Versuchen zur zeitlichen Planung (zur Genehmigung der Planung anderer Speicheroperationen). Die Leistungsfähigkeit des Prozessors, welche durchaus von der Ladelatenz abhängig sein kann, kann daher leiden. Ein Mechanismus zur Minimierung der Ladeverzögerung für Ladevorgänge, welche Speichervorgänge treffen, für die keine Speicherdaten zur Verfügung stehen, ist daher erwünscht.
  • US-A-5,781,790 offenbart ein Schema zum Puffern von Speicheroperationen in einem Prozessor mit einem Daten-Cachespeicher, wobei der Prozessor eine Speicherausführungseinheit mit einem Speicherordnungspuffer hat, aufwei send einen Speicherpuffer und einen getrennten Ladepuffer. Der Speicherpuffer hat eine Anzahl von Slots, von denen jeder durch ein Speicherpufferkennzeichen bezeichnet wird, während der Ladepuffer auch eine Anzahl von Slots hat, von denen jeder durch ein Ladepufferkennzeichen bezeichnet wird. Der Prozessor enthält jedoch keinen Mechanismus, um die Ladeverzögerung für Ladevorgänge, welche Speichervorgänge treffen, für die keine Speicherdaten zur Verfügung stehen, zu verringern.
  • Die oben angeführten Probleme werden zu einem großen Teil von einem Prozessor gelöst, der eine Abhängigkeitsverbindungsdatei wie hier beschreiben verwendet. Nach der Feststellung eines Ladevorgangs, welcher einen Speichervorgang trifft, für den Speicherdaten nicht zur Verfügung stehen, weist der Prozessor einen Eintrag innerhalb der Abhängigkeitsverbindungsdatei für den Ladevorgang zu. Der Eintrag speichert ein Ladekennzeichen, das den Ladevorgang identifiziert, und ein Speicherdatenkennzeichen, das eine Quelle der Speicherdaten identifiziert. Die Abhängigkeitsverbindungsdatei überwacht die von den Ausführungseinheiten innerhalb des Prozessors erzeugten Ergebnisse, um die zur Verfügung gestellten Speicherdaten zu detektieren. Die Abhängigkeitsverbindungsdatei veranlasst dann, dass die Speicherdaten als die Ladedaten weiter geleitet werden in Reaktion auf das Detektieren, dass die Speicherdaten bereit gestellt werden. Die Latenzzeit von der Bereitstellung der Speicherdaten bis zu der Weiterleitung der Ladedaten kann dadurch minimiert werden. Insbesondere können die Ladedaten weiter geleitet werden, ohne das Erfordernis, dass die Lade-Speicheroperation geplant werden muss. Die Leistungsfähigkeit des Mikroprozessors kann wegen der reduzierten Lade-Latenzzeit, die in den oben erwähnten Fällen erreichbar ist, reduziert werden. Allgemein gesagt wird eine Lade/Speichereinheit betrachtet, die einen ersten Puffer, eine mit dem ersten Puffer verbundene erste Steuerlogik, eine zweite Steuerlogik und einen mit der zweiten Steuerlogik verbundenen zweiten Puffer aufweist. Der erste Puffer enthält eine erste Vielzahl von Einträgen, wobei jeder von der ersten Vielzahl von Einträgen konfiguriert ist, um eine Speicheradresse zu und entsprechende Speicherdaten von einer entsprechenden Spei cher-Speicheroperation zu speichern. Die erste Steuerlogik ist konfiguriert, um eine erste Lade-Speicheroperation zu detektieren, welche eine erste Ladeadresse hat, die eine erste Speicheradresse innerhalb eines ersten Eintrags aus der ersten Vielzahl von Einträgen trifft und für die erste entsprechende Speicherdaten nicht innerhalb des ersten Eintrags gespeichert sind. Angeschlossen zum Empfangen eines Signals von der ersten Steuerlogik, welches das Detektieren der ersten Lade-Speicheroperation anzeigt, ist die zweite Steuerlogik konfiguriert, um einen zweiten Eintrag in einer zweiten Vielzahl von Einträgen in dem zweiten Puffer an die erste Lade-Speicheroperation in Reaktion auf das Signal zuzuweisen. Der zweite Eintrag ist konfiguriert, um ein erstes Ladekennzeichen, das eine erste Lade-Speicheroperation identifiziert, und ein erstes Speicherdatenkennzeichen, das eine Quelle der ersten entsprechenden Speicherdaten identifiziert, in Reaktion auf die den zweiten Eintrag zuweisende zweite Steuerlogik zu speichern.
  • Ein Prozessor wird betrachtet, der einen Daten-Cachespeicher und eine Lade/Speichereinheit aufweist. Die Lade/Speichereinheit umfasst einen ersten Puffer, der eine Vielzahl von Einträgen aufweist. Die Lade/Speichereinheit ist konfiguriert, um einen ersten Eintrag aus der Vielzahl von Einträgen an eine erste Lade-Speicheroperation zuzuweisen in Reaktion auf das Detektieren, dass eine erste Ladeadresse der ersten Lade-Speicheroperation eine erste Speicheradresse einer ersten Speicher-Speicheroperation trifft, für welche erste Speicherdaten während einer Sondierung von der ersten Lade-Speicheroperation in dem Daten-Cachespeicher nicht zur Verfügung stehen. Der erste Eintrag speichert ein erstes Ladekennzeichen, das eine erste Lade-Speicheroperation identifiziert, und ein erstes Speicherdatenkennzeichen, das eine Quelle der ersten entsprechenden Speicherdaten identifiziert. Des weiteren wird ein Computersystem betrachtet, das einen Prozessor und ein Eingangs/Ausgangs (I/O) Gerät aufweist. Das I/O Gerät stellt die Kommunikation zwischen dem Computersystem und anderen Computersystemen, mit denen das I/O Gerät verbunden ist, zur Verfügung.
  • Darüber hinaus wird ein Verfahren zum Durchführen einer Lade-Speicheroperation betrachtet. Ein Daten-Cachespeicher wird durch Anwendung der Lade-Speicheroperation sondiert. Die Lade-Speicheroperation wird detektiert, wenn sie eine Speicher-Speicheroperation trifft, für welche entsprechende Speicherdaten während der Sondierung nicht zur Verfügung stehen. Ein erstes Ladekennzeichen, das die Lade-Speicheroperation identifiziert, und ein Speicherdatenkennzeichen, das eine Quelle der Speicherdaten identifiziert, wird von einem ersten Puffer aufgezeichnet. Das Speicherdatenkennzeichen wird dann von dem ersten Puffer weiter geleitet und die Speicherdaten werden weiter geleitet in Reaktion auf das Detektieren, dass die Speicherdaten zur Verfügung gestellt werden.
  • Kurze Beschreibung der Zeichnungen
  • Weitere Ziele und Vorteile der Erfindung werden offenbar beim Studium der folgenden detaillierten Beschreibung und bei Bezugnahme auf die begleitenden Zeichnungen. Es zeigen:
  • 1 ein Blockdiagramm eines Ausführungsbeispiels eines Prozessors.
  • 2 ein Blockdiagramm eines Ausführungsbeispiels einer in 1 gezeigten Dekodiereinheit, einer Reservierungsstation, einer Funktionseinheit, eines Umordnungspuffers, einer Lade/Speichereinheit, eines Daten-Cachespeichers und einer Businterfaceeinheit.
  • 3 ein Blockdiagramm eines Ausführungsbeispiels einer Lade/Speichereinheit.
  • 4 ein Zeitablaufdiagramm, das ein Ausführungsbeispiel einer Zugriffspipeline für einen Daten-Cachespeicher von einem in 3 gezeigten ersten Puffer (LS1) darstellt.
  • 5 ein Zeitablaufdiagramm, das ein Ausführungsbeispiel einer Zugriffspipeline für einen Daten-Cachespeicher von einem in 3 gezeigten zweiten Puffer (LS1) darstellt.
  • 6 ein Blockdiagramm eines Ausführungsbeispiels eines Eintrags innerhalb von LS1.
  • 7 ein Blockdiagramm eines Ausführungsbeispiels eines Eintrags innerhalb von LS2.
  • 8 ein Schaltungsdiagramm darstellend einen Bereich eines Ausführungsbeispiels einer Auswahllogik für LS1.
  • 9 ein Schaltungsdiagramm darstellend einen Bereich eines Ausführungsbeispiels einer Auswahllogik für LS2.
  • 10 ein Zeitablaufdiagramm, das die Weiterleitung von Daten mit und ohne eine Abhängigkeitsverbindungsdatei darstellt.
  • 11 ein Blockdiagramm eines Ausführungsbeispiels einer Lade/Speichereinheit und eines Daten-Cachespeichers, wobei die Lade/Speichereinheit eine Abhängigkeitsverbindungsdatei verwendet.
  • 12 ein Zeitablaufdiagramm, das beispielhafte Lade- und Speichervorgänge darstellt, die von zwei Prozessoren durchgeführt werden.
  • 13 ein Blockdiagramm eines Bereichs eines Ausführungsbeispiels einer Lade/Speichereinheit, die Snoop-Hardware enthält.
  • 14 ein Ablaufdiagramm, das den Betrieb eines Ausführungsbeispiels der in 13 gezeigten Steuerlogik während einer Snoop-Anfrage darstellt.
  • 15 ein Ablaufdiagramm, das den Betrieb eines Ausführungsbeispiels der in 13 gezeigten Steuerlogik während eines Rücksondierungsbetriebs darstellt.
  • 16 ein Diagramm darstellend ein Beispiel eines Snoop-Resynchronisierungsbetriebs.
  • 17 ein Blockdiagramm, das einen Bereich eines Ausführungsbeispiels einer Lade/Speichereinheit darstellt, die eine selbstmodifizierende, Code überprüfende Hardware enthält.
  • 18 eine Zustandsmaschine, welche von einem in 17 gezeigten Ausführungsbeispiel der Lade/Speichereinheit verwendet werden kann.
  • 19 ein Blockdiagramm eines Bereichs eines Ausführungsbeispiels von einem Befehlscachespeicher, der mit der in 17 gezeigten Lade/ Speichereinheit benutzt werden kann.
  • 20 ein Ablaufdiagramm, das den Betrieb eines Ausführungsbeispiels der in 10 gezeigten selbstmodifizierenden, Code überprüfenden Steuerlogik darstellt.
  • 21 ein Blockdiagramm eines Bereich von einem Ausführungsbeispiel einer Lade/Speichereinheit, die einen exponentiellen Backoff enthält.
  • 22 eine Zustandsmaschine, die von einem Ausführungsbeispiel einer Businterfaceeinheit verwendet werden kann, die einen exponentiellen Backoff enthält.
  • 23 ein Ablaufdiagramm, das den Betrieb eines Ausführungsbeispiels einer in 21 dargestellten Steuerlogik darstellt.
  • 24 ein Zeitablaufdiagramm, das ein Beispiel eines exponentiellen Backoffs darstellt.
  • 25 ein Blockdiagramm eines Ausführungsbeispiels von einem Computersystem, das den in 1 gezeigten Prozessor enthält.
  • Während die Erfindung verschiedenen Modifikationen und alternativen Formen unterworfen werden kann, sind bestimmte Ausführungsbeispiele davon in den Zeichnungen beispielhaft gezeigt und werden hier detailliert beschrieben werden. Es sollte jedoch verstanden werden, dass die Zeichnungen und die dazu gehörige detaillierte Beschreibung nicht beabsichtigen, die Erfindung auf die bestimmte, offenbarte Form zu beschränken, sondern dass die Erfindung vielmehr alle Modifikationen, Äquivalente und Alternativen, die in den Umfang der vorliegenden Erfindung wie sie durch die angefügten Ansprüche definiert ist, umfassen soll.
  • Weg(e) zum Ausführen der Erfindung
  • Prozessor Übersicht
  • Es wird nun auf 1 Bezug genommen, in der ein Blockdiagramm von einem Ausführungsbeispiel eines Prozessors 10 gezeigt ist. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. Wie in 1 gezeigt enthält der Prozessor 10 eine Vorhol-/Vordekodier-Einheit 12, eine Verzweigungsvorhersageeinheit 14, einen Befehls-Cachespeicher 16, eine Befehlsausrichtungseinheit 18, eine Vielzahl von Dekodiereinheiten 20A20C, eine Vielzahl von Reservierungsstationen 22A22C, eine Vielzahl von Funktionseinheiten 24A24C, eine Lade/Speicher-Einheit 26, einen Daten-Cachespeicher 28, eine Registerdatei 30, einen Umordnungspuffer 32, eine MROM Einheit 34 und eine Businterfaceeinheit 37. Elemente, auf die hier mit einer bestimmten Bezugsnummer gefolgt von einem Buchstaben verwiesen wird, werden gemeinsam bezeichnet durch die Bezugsnummer allein. Zum Beispiel werden die Dekodiereinheiten 20A20C gemeinsam als Dekodiereinheiten 20 bezeichnet.
  • Die Vorhol-/Vordekodier-Einheit 12 ist zum Empfangen von Befehlen von der Businterfaceeinheit 37 angeschlossen und ist des weiteren an den Befehls-Cachespeicher 16 und die Verzweigungsvorhersageeinheit 14 angeschlossen. Ähnlich ist die Verzweigungsvorhersageeinheit 14 mit dem Befehls-Cachespeicher 16 verbunden. Darüber hinaus ist die Verzweigungsvorhersageeinheit 14 mit den Dekodiereinheiten 20 und den Funktionseinheiten 24 verbunden. Der Befehls-Cachespeicher 16 ist ferner mit der MROM Einheit 34 und der Befehlsausrichtungseinheit 18 verbunden. Die Befehlsausrichtungseinheit 18 wiederum ist mit den Dekodiereinheiten 20 verbunden. Jede Dekodiereinheit 20A20C ist mit der Lade/Speicher-Einheit 26 und der entsprechenden Reservierungsstation 22A22C verbunden. Die Reservierungsstationen 22A– 22C sind ferner mit den entsprechenden Funktionseinheiten 24A24C verbunden. Zusätzlich sind die Dekodiereinheiten 20 und die Reservierungsstationen 22 mit der Registerdatei 30 und dem Umordnungspuffer 32 verbunden. Die Funktionseinheiten 24 sind ebenso mit der Lade/Speicher-Einheit 26, der Registerdatei 30 und dem Umordnungspuffer 32 verbunden. Der Daten-Cachespeicher 28 ist mit der Lade/Speicher-Einheit 26 und der Businterfaceeinheit 37 verbunden. Die Businterfaceeinheit 37 ist des weiteren an eine L2 Schnittstelle von einem L2 Cachespeicher und an einen Bus angeschlossen. Schließlich ist die MROM Einheit 34 an die Dekodiereinheiten 20 angeschlossen.
  • Der Befehls-Cachespeicher 16 ist ein Cachespeicher mit hoher Geschwindigkeit, der zur Speicherung von Befehlen vorgesehen ist. Befehle werden von dem Befehls-Cachespeicher 16 geholt und an die Dekodiereinheiten 20 ausgegeben. In einem Ausführungsbeispiel ist der Befehls-Cachespeicher 16 konfiguriert, um bis zu 64 Kilobyte an Befehlen in einer 2 Wege Satz assoziativen Struktur mit 32 Byte Zeilen (ein Byte enthält 8 binäre Bits) zu speichern. Alternativ kann jede andere gewünschte Konfiguration und Größe verwendet werden. Zum Beispiel ist fest zu halten, dass der Befehls-Cachespeicher 16 als eine voll assoziative, Satz assoziative oder direkt abgebildete Konfiguration implementiert sein kann.
  • Befehle werden von der Vorhol-/Vordekodier-Einheit 12 in dem Befehls-Cachespeicher 16 gespeichert. Befehle können vor der Anforderung davon aus dem Befehls-Cachespeicher 16 in Übereinstimmung mit einem Vorhol-Schema vorher geholt werden. Eine Vielzahl von Vorhol-Schemata kann von der Vorhol-/Vordekodier-Einheit 12 verwendet werden. Wenn die Vorhol-/Vordekodier-Einheit 12 Befehle in den Befehls-Cachespeicher 16 transferiert, erzeugt die Vorhol-/Vordekodier-Einheit 12 drei Vordekodierbits für jedes Byte des Befehls: Ein Start Bit, ein Ende Bit und ein funktionales Bit. Die Vordekodierungsbits bilden Markierungen, welche die Grenzen von jedem Befehl anzeigen. Die Vordekodierungsmarkierungen können auch zusätzliche Informationen befördern, wie zum Beispiel, ob ein bestimmter Befehl direkt von den Dekodiereinheiten 20 dekodiert werden kann oder ob der Befehl ausgeführt wird durch das Aufrufen einer von der MROM Einheit 34 gesteuerten Mikrocode Prozedur, wie folgend detaillierter beschrieben wird. Des weiteren kann die Vorhol-/Vordekodier-Einheit 12 konfiguriert werden, um Verzweigungsbefehle zu detektieren und Verzweigungsbefehlsinformationen entsprechend den Verzweigungsbefehlen in der Verzweigungsvorhersageeinheit 14 zu speichern. Weitere Ausführungsbeispiele können jedes geeignete Vordekodierungsschema verwenden.
  • Eine Kodierung der Vordekodierungsmarkierungen für ein Ausführungsbeispiel von dem Prozessor 10, der einen Befehlssatz mit variabler Länge der Bytes verwendet, wird als nächstes beschrieben werden. Ein Befehlssatz mit variabler Länge der Bytes ist ein Befehlssatz, in dem verschiedene Befehle unterschiedliche Anzahlen von Bytes belegen können. Ein beispielhafter Befehlssatz mit variabler Länge der Bytes, der von einem Ausführungsbeispiel des Prozessors 10 verwendet wird, ist der x86 Befehlssatz.
  • In der beispielhaften Kodierung ist, wenn ein gegebenes Byte das erste Byte eines Befehls ist, das Start Bit für dieses Byte gesetzt. Wenn das Byte das letzte Byte eines Befehls ist, ist das Ende Bit für dieses Byte gesetzt. Befehle, die von den Dekodiereinheiten 20 direkt dekodiert werden können, werden als „Schnelle Weg" Befehle bezeichnet. Die verbleibenden x86 Befehle werden gemäß einem Ausführungsbeispiel als MROM Befehle bezeichnet. Für schnelle Weg Befehle ist das funktionale Bit für jedes in dem Befehl enthaltene Präfix Byte gesetzt und für andere Bytes gelöscht. Alternativ, für MROM Befehle, ist das funktionale Bit für jedes Präfix Byte gelöscht und für andere Bytes gesetzt. Der Typ des Befehls kann bestimmt werden durch die Untersuchung des funktionalen Bits, das dem Ende Byte entspricht. Umgekehrt ist, wenn das funktionale Bit gesetzt ist, der Befehl ein MROM Befehl. Der Opcode eines Befehls kann dadurch innerhalb eines Befehls angeordnet sein, der direkt von den Dekodiereinheiten 20 als das Byte dekodiert werden kann, das mit dem ersten freien funktionalen Bit in dem Befehl verbunden ist. Zum Beispiel enthält ein schneller Weg Befehl zwei Präfix Bytes, ein Mod R/M Byte und ein unverzügliches Byte würde Start, Ende und funktionale Bits wie folgt haben:
    Start Bits 10000
    Ende Bits 00001
    Funktionale Bits 11000
  • In Übereinstimmung mit einem bestimmten Ausführungsbeispiel ist eine frühe Identifizierung von einem Befehl, der ein Skalierungs-Index-Basis (SIB) Byte hat, vorteilhaft für die MROM Einheit 34. Für ein derartiges Ausführungsbeispiel zeigt das funktionale Bit für das Mod R/M Byte das Vorhandensein eines SIB Bytes an, wenn ein Befehl zumindest zwei Bytes nach dem Opcode Byte enthält. Wenn das funktionale Bit für das Mod R/M Byte gesetzt ist, dann ist ein SIB Byte vorhanden. Alternativ ist kein SIB Byte vorhanden, wenn das funktionale Bit für das Mod R/M Byte nicht gesetzt ist.
  • MROM Befehle sind Befehle, welche als zu komplex angesehen sind, um von den Dekodiereinheiten 20 dekodiert zu werden. MROM Befehle werden ausgeführt durch das Aufrufen der MROM Einheit 34. Genauer gesagt, wenn ein MROM Befehl angetroffen wird, analysiert die MROM Einheit 34 den Befehl und gibt ihn in einen Untersatz von definierten schnellen Weg Befehlen aus, um die gewünschte Operation zu bewirken. Die MROM Einheit 34 gibt den Untersatz von schnellen Weg Befehlen an die Dekodiereinheiten 20 weiter.
  • Der Prozessor 10 verwendet eine Verzweigungsvorhersage, um spekulativ Befehle nachfolgend bedingten Verzweigungsbefehlen zu holen. Die Verzweigungsvorhersageeinheit 14 ist enthalten, um Operationen zu der Vorhersage von Verzweigungen auszuführen. In einem Ausführungsbeispiel verwendet die Verzweigungsvorhersageeinheit 14 einen Verzweigungszielpuffer, der bis zu zwei Verzweigungszieladressen und entsprechende genommen/nicht genommen Vorhersagen pro 16 Byte Bereich einer Cachezeile im Befehls-Cachespeicher 16 zwischen speichert. Der Verzweigungszielpuffer kann zum Beispiel 2048 Einträge oder jede andere geeignete Anzahl an Einträgen aufweisen. Die Vorhol-/Vordekodier-Einheit 12 bestimmt die anfänglichen Verzweigungsziele, wenn eine bestimmte Zeile vordekodiert wird. Nachfolgende Aktualisierungen der Verzweigungsziele, die einer Cachezeile entsprechen, können aufgrund der Ausführung von Befehlen innerhalb der Cachezeile auftreten. Der Befehls-Cachespeicher 16 stellt einen Hinweis zur Verfügung, dass die Adresse des Befehls geholt wird, so dass die Verzweigungsvorhersageeinheit 14 feststellen kann, welche Verzweigungszieladressen für die Bildung einer Verzweigungsvorhersage auszuwählen sind. Die Dekodiereinheiten 20 und die Funktionseinheiten 24 stellen der Verzweigungsvorhersageeinheit 14 Informationen zur Aktualisierung zur Verfügung. Die Dekodiereinheiten 20 detektieren Verzweigungsbefehle, welche nicht von der Verzweigungsvorhersageeinheit 14 vorher gesagt wurden. Die Funktionseinheiten 24 führen die Verzweigungsbefehle aus und stellen fest, ob die vorher gesagte Richtung der Verzweigung nicht korrekt ist. Die Richtung der Verzweigung kann "genommen" sein, in welchem Fall nachfolgende Befehle von der Zieladresse des Verzweigungsbefehls geholt werden. Umgekehrt kann die Richtung der Verzweigung "nicht genommen" sein, in welchem Fall nachfolgende Befehle von Speicherstellen geholt werden, die dem Verzweigungsbefehl folgen. Wenn ein falsch vorher gesagter Verzweigungsbefehl detektiert wird, werden Befehle, die der falsch vorher gesagten Verzweigung folgen, von den verschiedenen Einheiten des Prozessors 10 verworfen. In einer alternativen Ausbildung kann die Verzweigungsvorhersageeinheit 14 anstatt mit den Dekodiereinheiten 20 und den Funktionseinheiten 24 mit dem Umordnungspuffer 32 verbunden sein und kann Informationen bezüglich der Fehlvorhersage der Verzweigung von dem Umordnungspuffer 32 empfangen. Eine Vielzahl von geeigneten Algorithmen zur Vorhersage von Verzweigungen kann von der Verzweigungsvorhersageeinheit 14 verwendet werden.
  • Aus dem Befehls-Cachespeicher 16 geholte Befehle werden zu der Befehlsausrichtungseinheit 18 befördert. Wenn Befehle aus dem Befehls-Cachespeicher 16 geholt werden, werden die entsprechenden Vordekodierungsdaten abgetastet, um der Befehlsausrichtungseinheit 18 (und der MROM Einheit 34) Informationen hinsichtlich der geholten Befehle zur Verfügung zu stellen. Die Befehlsausrichtungseinheit 18 verwendet die abgetasteten Daten, um einen Befehl an jede der Dekodiereinheiten 20 auszurichten. In einem Ausführungsbeispiel richtet die Befehlsausrichtungseinheit 18 Befehle von drei Sätzen von acht Befehlsbytes auf die Dekodiereinheiten 20 aus. Die Dekodiereinheit 20A empfängt einen Befehl, der früher ist als die Befehle, welche gleichzeitig von den Dekodiereinheiten 20B und 20C empfangen werden (in Reihenfolge des Programms). Auf ähnliche Weise empfängt die Dekodiereinheit 20B einen Befehl, der früher ist als der Befehl, welcher gleichzeitig von der Dekodiereinheit 20C in Reihenfolge des Programms empfangen wird.
  • Die Dekodiereinheiten 20 sind konfiguriert, um von der Befehlsausrichtungseinheit 18 empfangene Befehle zu dekodieren. Informationen bezüglich der Registeroperanden werden detektiert und zu der Registerdatei 30 und dem Umordnungspuffer 32 weiter geleitet. Zusätzlich schicken die Dekodiereinheiten 20 die Speicheroperationen an die Lade/Speicher-Einheit 26, wenn die Befehle erfordern, dass eine oder mehrere Speicheroperationen ausgeführt werden müssen. Jeder Befehl wird in einen Satz von Steuerwerten für die Funktionseinheiten 24 dekodiert und diese Steuerwerte werden zusammen mit Informationen bezüglich der Adressen der Operanden und Ersetzungsoder unmittelbaren Daten, welche in dem Befehl enthalten sein können, an die Reservierungsstationen 22 geschickt. In einem bestimmten Ausführungsbeispiel wird jeder Befehl in bis zu zwei Operationen dekodiert, welche von den Funktionseinheiten 24A24C separat ausgeführt werden können.
  • Der Prozessor 10 unterstützt eine nicht geordnete Ausführung und verwendet daher den Umordnungspuffer 32, um die ursprüngliche Abfolge des Programms für Lese- und Schreiboperationen für die Register nach zu verfolgen, die Umbenennung von Registern zu verwirklichen, eine spekulative Ausführung von Befehlen und die Wiederherstellung bei falsch vorher gesagten Verzweigungen zu erlauben und um präzise Ausnahmen zu erleichtern. Eine temporäre Speicherstelle innerhalb des Umordnungspuffers 32 wird auf eine Dekodierung eines Befehls reserviert, der die Aktualisierung eines Registers umfasst, um dort spekulative Zustände des Registers zu speichern. Falls eine Vorhersage der Verzweigung falsch ist, können die Ergebnisse der spekulativ ausgeführten Befehle entlang des falsch vorher gesagten Pfads in dem Puffer ungültig gemacht werden bevor sie in die Registerdatei 30 geschrieben werden. Auf ähnliche Weise können Befehle, die einem bestimmten Befehl folgen, verworfen werden, falls der bestimmte Befehl eine Ausnahme verursacht. Auf diese Weise sind Ausnahmen "präzise" (das heißt Befehle, die dem bestimmten Befehl folgen, der eine Ausnahme verursacht, werden nicht früher als die Ausnahme beendet). Es ist fest zu halten, dass ein bestimmter Befehl spekulativ ausgeführt wird, wenn er vor Befehlen ausgeführt wird, die dem bestimmten Befehl in der Reihenfolge des Programms voraus gehen. Voraus gehende Befehle können ein Verzweigungsbefehl oder ein eine Ausnahme verursachender Befehl sein, in welchem Fall die spekulativen Ergebnisse von dem Umordnungspuffer 32 verworfen werden können.
  • Die Steuerwerte für die Befehle und die Ersetzungs- und unmittelbaren Daten, die an den Ausgängen der Dekodiereinheiten 20 zur Verfügung gestellt werden, werden direkt an die entsprechenden Reservierungsstationen 22 weiter geleitet. In einem Ausführungsbeispiel ist jede Reservierungsstation 22 fähig, Informationen bezüglich der Befehle (das heißt sowohl Steuerwerte für die Befehle als auch Operandenwerte, Operandenmarkierungen und/oder unmit telbare Daten) für bis zu fünf anhängige Befehle, die auf die Ausgabe an die entsprechende Funktionseinheit warten, zu halten. Es ist zu bemerken, dass für das Ausführungsbeispiel aus 1 jede Reservierungsstation 22 einer bestimmten Funktionseinheit 24 zugeordnet ist. Entsprechend sind drei bestimmte "Ausgabepositionen" von den Reservierungsstationen 22 und den Funktionseinheiten 24 gebildet. Anders ausgedrückt ist die Ausgabeposition 0 von der Reservierungsstation 22A und der Funktionseinheit 24A gebildet. Befehle, die auf die Reservierungsstation 22A ausgerichtet wurden und an sie geschickt wurden, werden von der Funktionseinheit 24A ausgeführt. Auf ähnliche Weise ist die Ausgabeposition 1 von der Reservierungsstation 22B und der Funktionseinheit 24B gebildet und die Ausgabeposition 2 ist von der Reservierungsstation 22C und der Funktionseinheit 24C gebildet.
  • Auf das Dekodieren eines bestimmten Befehls werden, falls ein benötigter Operand eine Registerstelle ist, Informationen über die Adresse des Registers gleichzeitig an den Umordnungspuffer 32 und die Registerdatei 30 weiter geleitet. Die Fachleute auf dem Gebiet wissen zu schätzen, dass die x86 Registerdatei acht ganzzahlige Register mit 32 Bit umfasst (das heißt, diese werden üblicherweise als EAX, EBX, ECX, EDX, EBP, ESI, EDI und ESP bezeichnet). In Ausführungsbeispielen des Prozessors 10, welche die x86 Prozessorarchitektur verwenden, weist die Registerdatei 30 Speicherstellen für jedes der ganzzahligen Register mit 32 Bit auf. Zusätzliche Speicherstellen können innerhalb der Registerdatei 30 für die Benutzung durch die MROM Einheit 34 enthalten sein. Der Umordnungspuffer 32 enthält temporäre Speicherstellen für Ergebnisse, welche die Inhalte dieser Register ändern, um dadurch eine ungeordnete Ausführung zu erlauben. Eine temporäre Speicherstelle in dem Umordnungspuffer 32 ist für jeden Befehl reserviert, der bei dem Dekodieren bestimmt wird, die Inhalte eines der ganzzahligen Register zu ändern. Daher kann der Umordnungspuffer 32, an verschiedenen Punkten während der Ausführung eines bestimmten Programms, eine oder mehrere Stellen haben, welche die spekulativ ausgeführten Inhalte eines gegebenen Registers enthalten. Wenn folgend auf die Dekodierung eines gegebenen Befehls fest gestellt wird, dass der Umordnungspuffer 32 eine einem Register zugewiesene vorherige Stelle oder Stellen hat, die als ein Operand in dem gegebenen Befehl benutzt wird, leitet der Umordnungspuffer 32 an die entsprechende Reservierungsstation weiter entweder: 1) den Wert in der zuletzt zugewiesenen Stelle oder 2) eine Markierung für die zuletzt zugewiesene Stelle, wenn der Wert bislang noch nicht von der Funktionseinheit erzeugt worden ist, die schließlich den vorherigen Befehl ausführen wird. Falls der Umordnungspuffer 32 eine für ein bestimmtes Register reservierte Stelle hat, wird der Operandenwert (oder die Markierung des Umordnungspuffers) von dem Umordnungspuffer 32 anstatt von der Registerdatei 30 zur Verfügung gestellt. Wenn keine für ein benötigtes Register reservierte Stelle in dem Umordnungspuffer 32 vorhanden ist, wird der Wert direkt aus der Registerdatei 30 genommen. Wenn der Operand einer Speicherstelle entspricht, wird der Wert des Operanden der Reservierungsstation von der Lade/Speicher-Einheit 26 zur Verfügung gestellt.
  • In einem bestimmten Ausführungsbeispiel ist der Umordnungspuffer 32 zum Speichern und Verändern von gleichzeitig dekodierten Befehlen als eine Einheit konfiguriert. Diese Konfiguration wird hier als "zeilenausgerichtet" bezeichnet. Durch das Verändern von einigen Befehlen zusammen kann die innerhalb des Umordnungspuffers 32 verwendete Hardware vereinfacht werden. Zum Beispiel weist ein in dem vorliegenden Ausführungsbeispiel enthaltener zeilenausgerichteter Umordnungspuffer Speicher zu, der ausreichend ist für Informationen bezüglich Befehlen, die bis zu drei Befehlen gehören (einen von jeder Dekodiereinheit 20), immer wenn ein oder mehrere Befehle von den Dekodiereinheiten 20 abgeschickt werden. Im Gegensatz hierzu wird ein variabler Betrag an Speicher in konventionellen Umordnungspuffern zugewiesen, abhängig von der Anzahl der tatsächlich abgeschickten Befehle. Eine vergleichsweise größere Anzahl von logischen Gattern kann erforderlich sein, um den variablen Betrag an Speicher zuzuweisen. Wenn jeder der gleichzeitig dekodierten Befehle ausgeführt worden ist, werden die Ergebnisse der Befehle gleichzeitig in der Registerdatei 30 gespeichert. Der Speicher ist dann frei für die Zuweisung an einen anderen Satz von gleichzeitig dekodierten Befehlen. Des weiteren ist der Betrag von für jeden Befehl verwendeten Schaltungen für die Steuerlogik reduziert, weil die Steuerlogik sich über mehrere gleichzeitig dekodierte Befehle amortisiert. Eine Markierung des Umordnungspuffers, die einen bestimmten Befehl identifiziert, kann in zwei Felder geteilt sein: eine Zeilenmarkierung und eine Abzweigungsmarkierung. Die Zeilenmarkierung identifiziert den Satz von gleichzeitig dekodierten Befehlen einschließlich des bestimmten Befehls und die Abzweigungsmarkierung identifiziert, welcher Befehl innerhalb des Satzes dem bestimmten Befehl entspricht. Es ist zu bemerken, dass die Speicherung von Ergebnissen der Befehle in die Registerdatei 30 und das Freimachen des entsprechenden Speichers als "zurückziehen" der Befehle bezeichnet wird. Es ist ferner fest zu halten, dass jede Konfiguration des Umordnungspuffers in verschiedenen Ausführungsbeispielen des Prozessors 10 verwendet werden kann.
  • Wie zuvor bemerkt speichern die Reservierungsstationen 22 Befehle bis die Befehle von den entsprechenden Funktionseinheiten 24 ausgeführt werden. Ein Befehl wird für die Ausführung ausgewählt, wenn: (i) die Operanden des Befehls zur Verfügung gestellt worden sind und (ii) die Operanden bislang noch nicht für Befehle zur Verfügung gestellt worden sind, die innerhalb der gleichen Reservierungsstation 22A22C sind und die in Reihenfolge des Programms vor dem Befehl sind. Es ist zu bemerken, dass, wenn ein Befehl von einer der Funktionseinheiten 24 ausgeführt ist, das Ergebnis von diesem Befehl direkt an eine beliebige der Reservierungsstationen 22 gegeben wird, die zu dem gleichen Zeitpunkt auf dieses Ergebnis warten zu dem das Ergebnis zur Aktualisierung des Umordnungspuffers 32 weiter gegeben wird (diese Technik wird allgemein als "Ergebnisweiterleitung" bezeichnet). Ein Befehl kann für die Ausführung ausgewählt und an eine Funktionseinheit 24A24C weiter gegeben werden während des Taktzyklus, in dem das damit verbundene Ergebnis weiter geleitet wird. Die Reservierungsstationen 22 dirigieren das weiter geleitete Ergebnis in diesem Fall an die Funktionseinheiten 24. In Ausführungsbeispielen, in denen Befehle in mehrfache Operationen dekodiert werden können, die von den Funktionseinheiten 24 auszuführen sind, können die Operationen getrennt voneinander zeitlich geplant werden.
  • In einem Ausführungsbeispiel ist jede der Funktionseinheiten 24 konfiguriert zur Ausführung von ganzzahligen arithmetischen Operationen sowohl von Addition und Subtraktion als auch von Verschiebungen, Rotationen, logischen Operationen und Verzweigungsoperationen. Die Operationen werden in Reaktion auf die Steuerwerte ausgeführt, die für einen bestimmten Befehl von den Dekodiereinheiten 20 dekodiert wurden. Es ist zu bemerken, dass eine Gleitkommaeinheit (nicht gezeigt) ebenso verwendet werden kann, um Gleitkommaoperationen zu verwirklichen. Die Gleitkommaeinheit kann wie ein Koprozessor betrieben werden, der Befehle von der MROM Einheit 34 oder von dem Umordnungspuffer 32 empfängt und nachfolgend mit dem Umordnungspuffer 32 kommuniziert, um die Befehle zu vollenden. Des weiteren können die Funktionseinheiten 24 konfiguriert sein, um eine Erzeugung von Adressen für Lade- und Speicher-Speicheroperationen auszuführen, die von der Lade/Speicher-Einheit 26 ausgeführt werden. In einem bestimmten Ausführungsbeispiel kann jede Funktionseinheit 24 eine Adresserzeugungseinheit zum Erzeugen von Adressen aufweisen und eine Ausführungseinheit zum Durchführen der verbleibenden Funktionen. Die beiden Einheiten können unabhängig voneinander auf verschiedenen Befehlen oder Operationen während eines Taktzyklus arbeiten.
  • Jede der Funktionseinheiten 24 stellt auch der Verzweigungsvorhersageeinheit 14 Informationen hinsichtlich der Ausführung von bedingten Verzweigungsbefehlen zur Verfügung. Falls eine Verzweigungsvorhersage falsch war, löscht die Verzweigungsvorhersageeinheit 14 Befehle nachfolgend der falsch vorher gesagten Verzweigung, welche die Befehlsverarbeitungspipeline betreten haben, und veranlasst ein Holen der benötigten Befehle von dem Befehls-Cachespeicher 16 oder dem Hauptspeicher. Es ist zu bemerken, dass in solchen Situationen die Ergebnisse von Befehlen in der ursprünglichen Sequenz des Programms, die nach dem falsch vorher gesagten Verzweigungsbefehl auftreten, verworfen werden, einschließlich derjenigen, welche spekulativ ausgeführt worden sind und temporär in der Lade/Speicher-Einheit 26 und dem Umordnungspuffer 32 gespeichert worden sind. Es ist des weiteren zu bemerken, dass Ergebnisse von Verzweigungsausführungen dem Umord nungspuffer 32 von den Funktionseinheiten 24 zur Verfügung gestellt werden können, der den Funktionseinheiten 24 Fehlvorhersagen von Verzweigungen anzeigen kann.
  • Von den Funktionseinheiten 24 erzeugte Ergebnisse werden an die Funktionseinheiten 24 geschickt, wenn ein Registerwert aktualisiert wird, und zu der Lade/Speicher-Einheit 26, wenn die Inhalte einer Speicherstelle geändert werden. Wenn das Ergebnis in einem Register gespeichert werden soll, speichert der Umordnungspuffer 32 das Ergebnis an der Stelle, die für den Wert des Registers reserviert wurde als der Befehl dekodiert wurde. Eine Vielzahl von Ergebnisbussen 38 sind vorgesehen zum Weiterleiten von Ergebnissen von den Funktionseinheiten 24 und der Lade/Speicher-Einheit 26. Die Ergebnisbusse 38 befördern sowohl das erzeugte Ergebnis als auch die Markierung des Umordnungspuffers, die den bearbeiteten Befehl identifiziert.
  • Die Lade/Speicher-Einheit 26 stellt eine Schnittstelle zwischen den Funktionseinheiten 24 und dem Daten-Cachespeicher 28 bereit. In einem Ausführungsbeispiel ist die Lade/Speicher-Einheit 26 konfiguriert mit einem ersten Lade/Speicher-Puffer, der Speicherstellen für Daten- und Adressinformationen für anhängige Lade- oder Speichervorgänge hat, die nicht auf den Daten-Cachespeicher 28 zugegriffen haben, und einen zweiten Lade/Speicher-Puffer, der Speicherstellen für Daten- und Adressinformationen für anhängige Ladeoder Speichervorgänge hat, die auf den Daten-Cachespeicher 28 zugegriffen haben. Zum Beispiel kann der erste Puffer 12 Stellen aufweisen und der zweite Puffer kann 32 Stellen aufweisen. Die Dekodiereinheiten 20 vermitteln den Zugriff auf die Lade/Speicher-Einheit 26. Wenn der erste Puffer voll ist muss eine Dekodiereinheit warten bis die Lade/Speicher-Einheit 26 Platz hat für die anhängige Lade- oder Speicheranforderungsinformation. Die Lade/Speicher-Einheit 26 führt auch eine Überprüfung der Abhängigkeit für Lade-Speicheroperationen gegen anhängige Speicher-Speicheroperationen durch, um sicher zu stellen, dass die Kohärenz der Daten gewährleistet bleibt. Eine Speicheroperation ist ein Transfer von Daten zwischen dem Prozessor 10 und dem Subsystem des Hauptspeichers. Speicheroperationen können das Ergeb nis eines Lade/Speicher-Befehls sein, der den Transfer der Daten aber keine andere Operation veranlasst. Des weiteren kann die Lade/Speicher-Einheit 26 einen Spezialregisterspeicher umfassen für Spezialregister wie zum Beispiel die Segmentregister und andere Register, die mit dem von der x86 Prozessorarchitektur definierten Mechanismus für die Übersetzung der Adressen zusammenhängen.
  • Der Daten-Cachespeicher 28 ist ein Cachespeicher mit hoher Geschwindigkeit, der vorgesehen ist zum temporären Speichern von Daten, die zwischen der Lade/Speicher-Einheit 26 und dem Subsystem des Hauptspeichers transferiert werden. In einem Ausführungsbeispiel hat der Daten-Cachespeicher 28 eine Kapazität zum Speichern von 64 Kilobyte an Daten in einer zwei Wege Satz assoziativen Struktur. Es sollte verstanden werden, dass der Daten-Cachespeicher 28 in einer Vielzahl von bestimmten Speicherkonfigurationen implementiert sein kann, einschließlich einer Satz assoziativen Konfiguration, einer voll assoziativen Konfiguration, einer direkt abgebildeten Konfiguration und jeder geeigneten Größe jeder anderen Konfiguration.
  • In einem bestimmten Ausführungsbeispiel des Prozessors 10, der die x86 Prozessorarchitektur verwendet, sind der Befehls-Cachespeicher 16 und der Daten-Cachespeicher 28 linear adressiert und physikalisch markiert. Die lineare Adresse wird von dem durch den Befehl angegebenen Versatz und der Basisadresse gebildet, die von dem Segmentbereich des x86 Mechanismus zur Übersetzung der Adressen angegeben ist. Lineare Adressen können optional in physikalische Adressen übersetzt werden, um auf den Hauptspeicher zuzugreifen. Die Übersetzung von linear nach physikalisch wird von dem Seitenbereich des x86 Mechanismus zur Übersetzung der Adressen angegeben. Die physikalische Adresse wird mit den physikalischen Markierungen verglichen, um einen Treffer/Fehltreffer Status zu bestimmen.
  • Die Businterfaceeinheit 37 ist konfiguriert zur Kommunikation über einen Bus zwischen dem Prozessor 10 und anderen Komponenten in dem Computersystem. Zum Beispiel kann der Bus mit dem von der Digital Equipment Corpora tion entwickelten EV-6 Bus kompatibel sein. Alternativ können alle geeigneten Verbindungsstrukturen benutzt werden, einschließlich paketbasierter, unidirektionaler oder bidirektionaler Verbindungen, usw. Ein optionales L2 Cachespeicherinterface kann auch als Schnittstelle für einen Level zwei Cachespeicher verwendet werden.
  • Lade/Speicher-Einheit
  • Eine detailliertere Betrachtung eines Ausführungsbeispiels der Lade/Speicher-Einheit 26 wird als nächstes gegeben. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. 2 stellt die Lade/Speicher-Einheit 26, den Umordnungspuffer 32, den Daten-Cachespeicher 28, die Businterfaceeinheit (BIU) 37, die Dekodiereinheit 20A, die Reservierungsstation 22A und die Funktionseinheit 24A dar, um gewisse Verbindungen dazwischen in Übereinstimmung mit einem Ausführungsbeispiel des Prozessors 10 heraus zu stellen. Weitere Ausführungsbeispiele können zusätzliche, alternative oder ersetzende Verbindungen wie gewünscht verwenden. Verbindungen zwischen den Dekodiereinheiten 20B20C, den Reservierungsstationen 22B22C, den Funktionseinheiten 24B24C und anderen in 2 gezeigten Einheiten können ähnlich sein wie die in 2 gezeigten.
  • Die Dekodiereinheit 20A empfängt einen Befehl von der Befehlsausrichtungseinheit 18 und dekodiert den Befehl. Die Dekodiereinheit 20A stellt den dekodierten Befehl der Reservierungsstation 22A zur Verfügung, welche den dekodierten Befehl speichert bis der Befehl zur Ausführung ausgewählt wird. Des weiteren signalisiert die Dekodiereinheit 20A der Lade/Speicher-Einheit 26 über die L/S Leitungen 46A, falls der Befehl eine Lade- oder Speicher-Speicheroperationen angibt. Ähnliche Signale von den Dekodiereinheiten 20B20C können von der Lade/Speicher-Einheit 26 ebenfalls empfangen werden. Die L/S Leitungen 46A zeigen an, ob eine Lade-Speicheroperation, eine Speicher-Speicheroperation oder beide von dem dekodierten Befehl angegeben werden. Zum Beispiel können die L/S Leitungen 46A eine Lade-Leitung und eine Speicher-Leitung aufweisen. Wenn keine Speicheroperation angegeben ist, dann liegen auf beiden Leitungen keine Signale an. Das Signal auf der Lade-Leitung ist gesetzt, wenn eine Lade-Speicheroperation angegeben ist, und auf ähnliche Weise ist das Signal auf der Speicher-Leitung gesetzt, wenn eine Speicher-Speicheroperation angegeben ist. In Reaktion auf die Signale auf den L/S Leitungen 46A weist die Lade/Speicher-Einheit 26 einen Eintrag in dem darin enthaltenen Lade/Speicher-Puffer zu, um die entsprechende Speicheroperation zu speichern.
  • In Zusatz zu dem obigen stellt die Dekodiereinheit 20A dem Umordnungspuffer 32 Informationen hinsichtlich des zu dekodierenden Befehls zur Verfügung. Der Umordnungspuffer 32 empfängt die Information (ebenso wie ähnliche Informationen von den Dekodiereinheiten 20B20C) und weist in Reaktion darauf Einträge im Umordnungspuffer zu. Die zugewiesenen Einträge im Umordnungspuffer werden durch Umordnungspuffermarkierungen identifiziert, welche der Lade/Speicher-Einheit 26 auf einem Befehlsmarkierungsbus 48 übermittelt werden. Der Befehlsmarkierungsbus 48 kann konfiguriert sein, um eine Markierung für jeden möglichen Befehl zu übertragen (zum Beispiel drei in dem vorliegenden Ausführungsbeispiel, eine von jeder der Dekodiereinheiten 20A20C). Alternativ kann, in einem Ausführungsbeispiel, das die oben beschriebene zeilenorientierte Struktur verwendet, der Umordnungspuffer 32 konfiguriert sein, um eine Zeilenmarkierung für die Zeile zu übertragen und die Lade/Speicher-Einheit 26 kann die Zeilenmarkierung mit der Versatzmarkierung der Ausgabeposition anreichern, die einen bestimmten Lade- oder Speichervorgang signalisiert.
  • Der Umordnungspuffer 32 ist des weiteren konfiguriert, um eine Überprüfung der Abhängigkeit für Registeroperanden des Befehls auszuführen. Die Registeroperanden werden in den von den Dekodiereinheiten 20 übermittelten Befehlsinformationen identifiziert. Für Speicher-Speicheroperationen sind die Speicherdaten ein Quelloperand, den die Lade/Speicher-Einheit 26 zusätzlich zu der Speicheradresse empfängt. Entsprechend bestimmt der Umordnungspuffer 32 den Befehl, der die Speicherdaten für jede Speicher-Speicheroperation erzeugt und befördert entweder die Speicherdaten (wenn sie innerhalb des Umordnungspuffers 32 oder der Registerdatei 30 nach dem Abschicken der Speicher-Speicheroperation verfügbar sind) oder eine Speicherdatenmarkierung für die Speicherdaten auf einem Speicherdaten/Markierungsbus 50. Falls der der Speicher-Speicheroperation entsprechende Befehl ein expliziter Speicherbefehl ist, der die Inhalte eines Registers im Speicher speichert, wird die Befehlsmarkierung von diesem Befehl, der die Speicherdaten (oder die Speicherdaten, falls sie verfügbar sind) erzeugt, befördert. Andererseits erzeugt der Befehl selbst die Speicherdaten, wenn der Befehl die Speicher-Speicheroperation als eine implizite Operation enthält. In derartigen Fällen stellt der Umordnungspuffer 32 die Befehlsmarkierung von dem Befehl als die Speicherdatenmarkierung zur Verfügung.
  • Obwohl in 2 wegen der Übersichtlichkeit der Zeichnung nicht dargestellt empfängt die Reservierungsstation 22A die Operandenmarkierungen und/oder Daten für den Befehl ebenso von dem Umordnungspuffer 32. Die Reservierungsstation 22A liest die Operandenmarkierungen und/oder Daten ein und wartet auf die Lieferung von jeglichen verbleibenden Operandendaten (identifiziert durch die Operandenmarkierungen) von den Ergebnisbussen 38. Sobald ein Befehl seine Operanden empfangen hat, ist er geeignet für die Ausführung durch die Funktionseinheit 24A. Genauer gesagt enthält die Funktionseinheit 24A in dem gezeigten Ausführungsbeispiel eine Ausführungseinheit (EXU) 40 und eine Adresserzeugungseinheit (AGU) 42. Die Ausführungseinheit 40 führt Befehlsoperationen (zum Beispiel arithmetische und logische Funktionen) aus, um Ergebnisse zu erzeugen, die auf dem Ergebnisbus 38A (einer der Ergebnisbusse 38) an die Lade/Speicher-Einheit 26, die Reservierungsstationen 22 und den Umordnungspuffer 32 weiter geleitet werden. Die AGU 42 erzeugt Datenadressen für die Benutzung durch eine Speicheroperation oder durch von dem Befehl angegebene Operationen und übermittelt die Datenadressen über den Adressbus 44 an die Lade/Speicher-Einheit 26. Es ist zu bemerken, dass weitere Ausführungsbeispiele verwendet werden können, in denen die AGU 42 und die Ausführungseinheit 40 den Ergebnisbus 38A teilen und in denen die Funktionseinheit 24A lediglich eine Ausführungseinheit enthält, welche die Erzeugung der Adressen und weitere Befehlsausführungsoperationen durchführt. Die Lade/Speicher-Einheit 26 ist des weiteren angeschlossen, um auch Ergebnisbusse und Adressbusse von den Ausführungseinheiten und A-GUs innerhalb der anderen Funktionseinheiten 24B und 24C zu empfangen.
  • Da das gezeigte Ausführungsbeispiel eine AGU 42 verwendet, kann die Reservierungsstation 22A den Bereich der Adresserzeugung eines Befehls zur Ausführung durch die AGU 42 auswählen, sobald die zur Bildung der Adresse benutzten Operanden empfangen worden sind, aber bevor jegliche zusätzliche Operanden, die der Befehl haben kann, empfangen werden. Die AGU 42 übermittelt die erzeugte Adresse auf dem Adressbus 44A an die Lade/Speicher-Einheit 26, zusammen mit der Befehlsmarkierung des Befehls für den die Datenadresse erzeugt wird. Entsprechend kann die Lade/Speicher-Einheit 26 die auf dem Adressbus 44A empfangene Markierung mit den Befehlsmarkierungen vergleichen, die in dem Lade/Speicher-Puffer gespeichert sind, um festzustellen, welchem Lade- oder Speichervorgang die Datenadresse entspricht.
  • Die Lade/Speicher-Einheit 26 überwacht die auf den Ergebnisbussen 38 zur Verfügung gestellten Ergebnismarkierungen, um die Speicherdaten für die Speicher-Speicheroperationen zu erfassen. Wenn die Ergebnismarkierungen mit einer Speicherdatenmarkierung innerhalb der Lade/Speicher-Einheit 26 überein stimmen, erfasst die Lade/Speicher-Einheit 26 die entsprechenden Daten und verbindet die Daten mit dem entsprechenden Speicherbefehl.
  • Die Lade/Speicher-Einheit 26 ist mit dem Daten-Cachespeicher 28 über ein Daten-Cachespeicher-Interface verbunden. Die Lade/Speicher-Einheit 26 wählt Speicheroperationen aus, um den Daten-Cachespeicher 28 über das Daten-Cachespeicher-Interface zu sondieren und empfängt die Ergebnisse der Sondierung von dem Daten-Cachespeicher-Interface. Allgemein gesagt weist eine "Sondierung" des Daten-Cachespeichers für eine bestimmte Speicheroperation die Übermittlung der Datenadresse der bestimmten Speicheroperation an den Daten-Cachespeicher 28 auf, um den Daten-Cachespeicher 28 feststellen zu lassen, ob die Datenadresse darin trifft. Der Daten-Cachespeicher 28 gibt ein Ergebnis der Sondierung (zum Beispiel einen Treffer/Fehltreffer Hin weis) an die Lade/Speicher-Einheit 26 zurück. Zusätzlich leitet der Daten-Cachespeicher 28, wenn die bestimmte Speicheroperation ein Ladevorgang ist und trifft, die entsprechenden Ladedaten auf dem Ergebnisbus 38D an die Reservierungsstationen 22, den Umordnungspuffer 32 und die Lade/Speicher-Einheit 26 weiter. In einem Ausführungsbeispiel enthält der Daten-Cachespeicher 28 zwei Anschlüsse und kann somit bis zu 2 Sondierungen nebeneinander empfangen. Der Daten-Cachespeicher 28 kann zum Beispiel eine Konfiguration mit Bänken verwenden, in der Cachezeilen über zumindest zwei Bänke gespeichert werden und zwei Sondierungen nebeneinander bedient werden können solange sie auf unterschiedliche Bänke zugreifen. In einem bestimmten Ausführungsbeispiel kann der Daten-Cachespeicher 28 8 Bänke verwenden. Verschiedene Ausführungsbeispiele des Daten-Cachespeicher-Interfaces werden im folgenden detaillierter beschrieben werden.
  • Der Daten-Cachespeicher 28 ist konfiguriert, um Cachezeilen in Reaktion auf Sondierungen, die fehl treffen, zuzuweisen und kommuniziert über die Businterfaceeinheit 37, um die fehlenden Cachezeilen zu holen. Des weiteren übermittelt der Daten-Cachespeicher 28 geleerte Cachezeilen, die geändert worden sind, an die Businterfaceeinheit 37 zur Aktualisierung des Hauptspeichers.
  • Die Businterfaceeinheit 37 ist auch über ein Snoop-Interface 52 mit dem Daten-Cachespeicher 28 und der Lade/Speicher-Einheit 26 verbunden. Das Snoop-Interface 52 kann von der Businterfaceeinheit 37 verwendet werden, um festzustellen, ob eine Kohärenzaktivität in Reaktion auf eine von dem Bus empfangene Snoop-Operation notwendigerweise ausgeführt werden muss. Im Allgemeinen ist eine "Snoop-Operation" eine auf dem Bus durchgeführte Operation zum Zweck der Beibehaltung von Speicherkohärenz im Hinblick auf an den Bus angeschlossene Cachespeicher (zum Beispiel innerhalb von Prozessoren). Wenn die Kohärenz ordentlich beibehalten wird, ist eine Kopie von Daten, die einer bestimmten Speicherstelle entsprechen und in einem der Cachespeicher gespeichert sind, konsistent mit den Kopien, die in anderen Cachespeichern gespeichert sind. Die Snoop-Operation kann eine explizite Ope ration sein oder sie kann ein impliziter Teil von einer Operation sein, die auf die Adresse einer bestimmten Speicherstelle angewendet wird. Im Allgemeinen gibt die Snoop-Operation die Adresse an, an der gesnoopt werden soll (die "Snoop-Adresse"), und den gewünschten Zustand der Cachezeile, wenn die Adresse in dem Cachespeicher gespeichert ist. Die Businterfaceeinheit übermittelt eine Snoop-Anforderung über das Snoop-Interface 52 an den Daten-Cachespeicher 28 und die Lade/Speicher-Einheit 26, um die Snoop-Operation auszuführen.
  • Der Umordnungspuffer 32 leitet das Zurückziehen von Befehlen. Der Umordnungspuffer 32 kommuniziert mit der Lade/Speicher-Einheit 26 über das Rückzugs-Interface 54, um Befehle zu identifizieren, die entweder zurück gezogen werden oder bereit für das Zurückziehen sind. Des weiteren können gewisse Ladebefehle beschränkt sein, um sie nicht spekulativ auszuführen. Der Umordnungspuffer 32 kann der Lade/Speicher-Einheit 26 über das Rückzugs-Interface 54 Speicheroperationen anzeigen, welche zurück gezogen sind oder zurückziehbar sind. Entsprechend kann die für jeden Befehl von den Dekodiereinheiten 20 an den Umordnungspuffer 32 übermittelte Befehlsinformation einen Hinweis enthalten, ob der Befehl eine Lade- oder Speicheroperation enthält oder nicht. Die Lade/Speicher-Einheit 26 kann eine Bestätigung an den Umordnungspuffer 32 zurück geben, dass eine bestimmte Speicheroperation als zurückgezogen vermerkt ist, und der Umordnungspuffer 32 kann nachfolgend den entsprechenden Befehl zurück ziehen.
  • Da die Lade/Speicher-Puffer zeitweise voll werden können, kann die Lade/ Speicher-Einheit 26 einen Mechanismus zur Flusskontrolle verwenden, um nachfolgende Speicheroperationen an den Dekodiereinheiten 20 anzuhalten, bis ausreichend Einträge innerhalb des Lade/Speicher-Puffers für die nachfolgenden Speicheroperationen frei gemacht sind (mittels der Erledigung von früheren Speicheroperationen). Zum Beispiel kann die Lade/Speicher-Einheit 26 eine Zählung der Anzahl der freien Einträge an die Dekodiereinheiten 20 durchgeben, welche anhalten können, falls die Zählung anzeigt, dass nicht genügend Einträge für die Speicheroperationen von gerade dekodierten Be fehlen zur Verfügung stehen. In Übereinstimmung mit einem bestimmten Ausführungsbeispiel bewegen sich die Befehle, die nebeneinander von den Dekodiereinheiten 20 dekodiert werden, im Gleichschritt zu den Reservierungsstationen 22 (so dass eine Zeile in dem Umordnungspuffer 32 für die Befehle zugewiesen werden kann, wie oben im Hinblick auf 1 beschrieben). In einem derartigen Ausführungsbeispiel können die Dekodiereinheiten 20 abwarten, bis ausreichend Einträge für alle Speicheroperationen innerhalb des Satzes der nebeneinander dekodierten Befehle zur Verfügung stehen. Alternativ kann die Lade/Speicher-Einheit 26 ein Haltesignal verwenden, um nachfolgende Speicheroperationen anzuhalten bis Einträge im Puffer zur Verfügung stehen. Jeglicher geeignete Mechanismus zur Steuerung des Flusses kann verwendet werden.
  • Es wird nun auf 3 Bezug genommen, in der ein Blockdiagramm eines Ausführungsbeispiels von einer Lade/Speicher-Einheit 26 gezeigt ist. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. In dem Ausführungsbeispiel aus 3 enthält die Lade/Speicher-Einheit 26 einen ersten Lade/Speicher-Puffer (LS1 Puffer) 60, einen zweiten Lade/Speicher-Puffer (LS2 Puffer) 62, eine LS1 Steuerlogik 64, eine LS2 Steuerlogik 66, einen temporären Puffer 68, Segmentaddierer 70, einen Anschluss 0 Multiplexer (Mux) 72, einen Anschluss 1 Mux 74 und einen LS2 Resondierungs Mux 76. Die Segmentaddierer 70 sind angeschlossen, um Datenadressen von den AGUs 42 innerhalb der Funktionseinheiten 24A – 24C zu empfangen (zum Beispiel befördert der Adressbus 44A, Teil des in 2 gezeigten Adressbusses 44A, die Datenadressen von der AGU 42 innerhalb der Funktionseinheit 24A). Die Multiplexer 72 und 74 sind angeschlossen, um die Datenadressen von den AGUs 42 und die Ausgänge der Segmentaddierer 70 zu empfangen, des weiteren sind sie auch mit dem LS1 Puffer 60 verbunden. Der Multiplexer 72 empfängt ebenfalls einen Eingang von dem LS2 Resondierungs Mux 76. Darüber hinaus ist der LS1 Puffer 60 mit den Segmentaddierern 70, der LS1 Steuerlogik 64, dem temporären Puffer 68, dem Befehlsmarkierungsbus 48, dem Speicherdaten/Markierungsbus 50 und den Ergebnisbussen 38a (der Ergebnisdatenbereich der Ergebnisbusse 38) verbunden. Die LS1 Steuerlogik 64 ist mit den Multiplexern 72 und 74 und mit der LS2 Steuerlogik 66 verbunden. Darüber hinaus ist die LS1 Steuerlogik 64 angeschlossen, um Adressmarkierungen von den AGUs 42 (zum Beispiel befördert der Adressmarkierungsbus 44AB, Teil des in 2 gezeigten Adressmarkierungsbusses 44A, die Adressmarkierungen von der AGU 42 innerhalb der Funktionseinheit 24A), Ergebnismarkierungen über die Ergebnismarkierungsbusse 38b (der Ergebnismarkierungsbereich des Ergebnisbusses 38) und L/S Leitungen 46 (einschließlich der L/S Leitungen 46A von der Dekodiereinheit 20A) zu empfangen. Der temporäre Puffer 68 und der LS2 Puffer 62 sind mit den Ergebnisbussen 38a und den Ergebnismarkierungsbussen 38b verbunden. Der LS2 Puffer 62 ist ferner angeschlossen, um eine Fehltrefferadresspuffer (MAB) Markierung auf einem MAB Markierungsbus 78 und eine physikalische Adresse auf einem physikalischen Adressbus 80 von dem Daten-Cachespeicher 28 zu empfangen. Der LS2 Puffer 62 ist des weiteren mit dem Multiplexer 76, dem Rückzugs-Interface 54, den Ergebnismarkierungsbussen 38b, dem Snoop-Interface 52, den Treffer/Fehltreffer-Signalen 82 von dem Daten-Cachespeicher 28 und einem Füllmarkierungsbus von der Businterfaceeinheit 37 verbunden.
  • Im Allgemeinen enthält die Lade/Speicher-Einheit 26 einen vor dem Cachespeicher angeordneten Puffer (LS1 Puffer 60) und einen nach dem Cachespeicher angeordneten Puffer (LS2 Puffer 62). Speicheroperationen werden auf die Versendung innerhalb des Prozessors 10 hin in den LS1 Puffer 60 zugewiesen und verbleiben in dem LS1 Puffer 60 bis sie ausgewählt werden, um den Daten-Cachespeicher 28 zu sondieren. Nachfolgend auf die Sondierung des Daten-Cachespeichers 28 werden die Speicheroperationen unabhängig von dem Status der Sondierung (zum Beispiel Treffer/Fehltreffer, usw.) in den LS2 Puffer 62 bewegt. Da der LS1 Puffer 60 Speicheroperationen speichert, die den Daten-Cachespeicher 28 noch sondieren müssen, und die Speicheroperationen aus dem LS1 Puffer 60 auf die Sondierung des Daten-Cachespeichers 28 hin entfernt werden, kann ein relativ einfaches Schema zum Abtasten benutzt werden, um Speicheroperationen auszuwählen, die den Daten-Cachespeicher 28 sondieren sollen. Da das Schema einfach ist, kann es schnell ausgeführt werden und kann dabei helfen, die Ladelatenz für Ladevor gänge, die den Daten-Cachespeicher 28 treffen, niedrig zu halten. Zusätzlich kann, da Speicheroperationen nach dem Sondieren des Daten-Cachespeichers 28 vom LS1 gelöscht werden, die Größe (das heißt die Anzahl der Einträge) des LS1 Puffers 60 relativ klein im Vergleich zu der Gesamtzahl von Speicheroperationen sein, die in der Verarbeitung sind.
  • Speicheroperationen, welche fehl treffen, können nachfolgend durch den LS2 Resondierungs Mux 76 und den Anschluss 0 Mux ausgewählt werden, um den Daten-Cachespeicher 28 erneut zu sondieren. Der Ausdruck "Resondierung", wie er hier verwendet wird, bezieht sich auf die Sondierung eines Cachespeichers für einen zweiten oder nachfolgenden Versuch nach der ersten Sondierung für eine bestimmte Speicheroperation. Des weiteren können Speicher-Speicheroperationen in dem LS2 Puffer 62 gehalten werden bis die Speichervorgänge in der Verfassung für ein Zurückziehen sind. Der LS2 Puffer 62 kann tiefer angelegt sein als der LS1 Puffer 60, was erlaubt, eine größere Anzahl an Fehltreffern darin zu speichern. Da in vielen Fällen Speicheroperationen, welche auf die gleiche Cachezeile zugreifen, dazu tendieren, in einem Befehlsstrom nahe beisammen zu sein, kann eine relative große Anzahl von Fehltreffern für die gleiche Cachezeile in dem LS2 Puffer 62 aufgereiht sein. Nachfolgende Speicheroperationen, welche den Daten-Cachespeicher 28 treffen, können dann von dem LS1 Puffer 60 ausgewählt und bedient werden. Durchschnittliche Bandbreiten des Cachespeichers können dadurch erhöht werden. Des weiteren kann es durch das Zulassen des Aufreihens von zahlreichen Fehltreffern für den Cachespeicher im LS2 in vielen Fällen möglich sein, die Businterfaceeinheit 37 beschäftigt zu halten mit der Bedienung zahlreicher Holanforderungen für die Cachezeilen von dem Daten-Cachespeicher 28, wodurch die Verwendung von externer Busbandbreite maximiert wird.
  • In Reaktion auf Signale auf den L/S Leitungen 46 weist die LS1 Steuerlogik 64 den identifizierten Lade- und Speicher-Speicheroperationen Einträge innerhalb des LS1 Puffers 60 zu. Die entsprechenden Befehlsmerkmale und Ladedaten/Merkmale (wenn anwendbar) werden in den zugewiesenen Einträgen von dem LS1 Puffer 60 unter der Steuerung der LS1 Steuerlogik 64 empfangen.
  • Nachfolgend werden die entsprechenden Datenadressen von den AGUs empfangen (identifiziert durch die von der LS1 Steuerlogik 64, empfangenen Adressmarkierungen) und in den zugewiesenen Einträgen gespeichert.
  • Eine Speicheroperation, die ihre Adresse empfangen hat, wird geeignet, um den Daten-Cachespeicher 28 zu sondieren. Die LS1 Steuerlogik 64 tastet die Einträge des LS1 Puffers auf Speicheroperationen ab, um den Daten-Cachespeicher 28 zu sondieren, und erzeugt Auswahlsteuerungen für den Anschluss 0 Mux 72 und den Anschluss 1 Mux 74. Entsprechend können in dem dargestellten Ausführungsbeispiel bis zu zwei Speicheroperationen den Daten-Cachespeicher 28 pro Taktzyklus sondieren. In Übereinstimmung mit einer bestimmten Implementierung wählt die LS1 Steuerlogik 64 Speicheroperationen zum Sondieren des Daten-Cachespeichers 28 in der Reihenfolge des Programms aus. Entsprechend kann die LS1 Steuerlogik 64 konfiguriert werden, um die Abtastung der ältesten Speicheroperationen in dem LS1 Puffer 60 zu begrenzen. Die "Reihenfolge des Programms" der Speicheroperationen ist die Reihenfolge, in der Befehle ausgeführt werden würden, wenn die Befehle zu einem Zeitpunkt geholt und ausgeführt würden. Des weiteren ist die Reihenfolge des Programms von spekulativ geholten Befehlen (entsprechend Verzweigungsvorhersagen zum Beispiel) die Reihenfolge, in der die Befehle wie oben erwähnt unter der Annahme ausgeführt werden würden, dass die Spekulation richtig ist. Befehle, welche in der Reihenfolge des Programms vor anderen Befehlen sind, werden als älter als die anderen Befehle bezeichnet. Umgekehrt werden Befehle, welche in der Reihenfolge des Programms anderen Befehlen nachfolgend sind, als jünger als die anderen Befehle bezeichnet. Es ist zu bemerken, dass weitere Implementierungen Speicheroperationen zur Sondierung des Daten-Cachespeichers 28 wie gewünscht außer der Reihe auswählen können.
  • Die LS1 Steuerlogik 64 ist konfiguriert zur Auswahl einer Speicheroperationen, um den Daten-Cachespeicher 28 zu sondieren, wenn die Datenadresse empfangen ist (vorausgesetzt, bei dem vorliegenden Ausführungsbeispiel, dass die Speicheroperation in einem Eintrag ist, der von der LS1 Steuerlogik 64 abge tastet wird). Wenn die von den AGUs 42 empfangenen Adressmarkierungen mit einer Befehlsmarkierung einer anders auswählbaren Speicheroperation überein stimmen, wählt die LS1 Steuerlogik 64 die entsprechende von der AGU 42 empfangene Datenadresse über einen der Multiplexer 72 und 74 aus.
  • Während die Datenadresse zum Sondieren ausgewählt werden kann, wenn sie der Lade/Speicher-Einheit 26 zur Verfügung gestellt wird, wird die Datenadresse ebenso einem der Segmentaddierer 70 zur Verfügung gestellt. Die Segmentaddierer 70 sind in dem vorliegenden Ausführungsbeispiel vorhanden, um den Segmentationsbereich des x86 Adressierungsschemas handzuhaben. Ausführungsbeispiele, die nicht die x86 Befehlssatzarchitektur verwenden, können die Segmentaddierer 70 eliminieren. Im Allgemeinen erzeugen die AGUs 42 eine virtuelle Adresse, die der Speicheroperation entspricht. Die virtuelle Adresse wird mittels eines Mechanismus zur Übersetzung der Adressen, der von der von dem Prozessor 10 verwendeten Befehlssatzarchitektur angegeben ist, in eine physikalische Adresse übersetzt. Die physikalische Adresse identifiziert eine Speicherstelle im Hauptspeicher. In der x86 Architektur ist ein zweireihiges Übersetzungsschema von einer logischen Adresse (oder virtuellen Adresse) zu einer linearen Adresse durch ein Segmentationsschema und dann zu der physikalischen Adresse durch eine Seitenschema definiert. Da die AGUs 42 die Adressoperanden des Befehls hinzufügen, ist die von den AGUs zur Verfügung gestellte Datenadresse eine logische Adresse. Jedoch verwendet moderner Befehlscode im allgemeinen eine "flache Adressierungsmethode", in der die Segmentbasisadressen (welche zu den logischen Adressen addiert werden, um die lineare Adresse zu erzeugen) auf Null programmiert sind. Entsprechend nimmt die Lade/Speicher-Einheit 26 an, dass die Segmentbasisadresse Null ist (und damit die logischen und linearen Adressen gleich sind) und wählt die logische Adresse aus, um den Daten-Cachespeicher 28 zu sondieren. Die Segmentaddierer 70 addieren die Segmentbasisadresse des ausgewählten Segments für die Speicheroperation und stellen die lineare Adresse den Multiplexern 72 und 74 und dem LS1 Puffer 60 zur Speicherung zur Verfügung. Wenn die Segmentbasisadresse für eine bestimmte Speicheroperation nicht Null ist und die Speicheroperation auf den Empfang der logischen Adresse hin zur Sondierung des Daten-Cachespeichers 28 ausgewählt wurde, kann die LS1 Steuerlogik 64 den vorherigen Zugriff abbrechen (so dass die Ladedaten nicht weiter geleitet werden) und die entsprechende lineare Adresse von dem Ausgang des entsprechenden Segmentaddierers 70 zum Sondieren des Daten-Cachespeichers 28 auswählen. In weiteren alternativen Ausführungsbeispielen können die AGUs 42 die Segmentbasisadresse empfangen und lineare Adressen erzeugen. Noch weitere Ausführungsbeispiele können den flachen Adressierungsmodus benötigen und die Segmentbasisadressen können ignoriert werden.
  • Die Multiplexer 72 und 74 sind angeschlossen, um Datenadressen von Einträgen auch in dem LS1 Puffer 60 zu empfangen. Die einer Speicheroperation entsprechende Datenadresse ist in dem LS1 Eintrag gespeichert, der der Speicheroperation auf den Empfang hin von den AGUs 42 zugewiesen wurde. Die Datenadresse wird von dem Eintrag ausgewählt auf die Auswahl der Speicheroperation, den Daten-Cachespeicher 28 zu sondieren. Es ist zu bemerken, dass neben den Datenadressen zusätzlich weitere Informationen dem Daten-Cachespeicher 28 über die Multiplexer 70 und 72 übermittelt werden können. Zum Beispiel kann ein Hinweis, ob die Speicheroperation ein Lade- oder Speichervorgang ist, befördert werden. Das Befehlsmerkmal der Speicheroperation kann zur Weiterleitung auf den Ergebnisbussen 38D über die Multiplexer 70 und 72 befördert werden. Die Größe der Operation (zum Rausmultiplexen der geeigneten Daten) kann ebenfalls befördert werden. Jede wünschenswerte Information kann in Übereinstimmung mit der Auswahl des Entwurfs übermittelt werden.
  • Die Speicherdaten können für eine Speicher-Speicheroperation zur Verfügung gestellt werden, während die Speicher-Speicheroperationen sich in dem LS1 Puffer 60 befindet. Entsprechend kann die LS1 Steuerlogik 64 den Ergebnismarkierungsbus 38b überwachen. Falls eine Markierung, die mit einer Speicherdatenmarkierung in dem LS1 Puffer 64 überein stimmt, empfangen wird, werden die entsprechenden Speicherdaten von dem entsprechenden einem der Ergebnisbusse 38a in den Eintrag eingelesen, der die übereinstimmende Speicherdatenmarkierung hat.
  • Die LS1 Steuerlogik 64 entfernt die Speicheroperationen von dem LS1 Puffer 60 in Reaktion auf die Speicheroperationen, welche den Daten-Cachespeicher 28 sondieren. In einem bestimmten Ausführungsbeispiel werden die Speicheroperationen einen Takt, nachdem sie zum Sondieren des Daten-Cachespeichers 28 ausgewählt wurden, entfernt. Der Takt danach kann benutzt werden, um es der Datenadresse zu erlauben, sich in den LS1 Puffer 60 auszubreiten, in Fällen, in denen eine Speicheroperation auf die Erzeugung einer Datenadresse durch eine der AGUs 42 ausgewählt wird. Weitere Ausführungsbeispiele können auswählen, die Speicheroperationen während des Taktes, in dem die Speicheroperationen ausgewählt werden, zu entfernen. Weil die Speicheroperationen in dem Takt entfernt werden nachdem sie ausgewählt wurden, ist die LS1 Steuerlogik 64 konfiguriert, um die ältesten 4 Einträge in dem LS1 Puffer 60 abzutasten, um Speicheroperationen auszuwählen, welche den Daten-Cachespeicher 28 sondieren sollen (bis zu zwei in dem vorherigen Taktzyklus ausgewählte Einträge und bis zu zwei Einträge sind in dem aktuellen Taktzyklus auswählbar).
  • Von dem LS1 Puffer 60 entfernte Speicheroperationen werden in den temporären Puffer 68 bewegt. Der temporäre Puffer 68 kann vorgesehen sein, um Zwänge im Zeitablauf beim Lesen von Einträgen aus dem LS1 Puffer 60 und beim Schreiben derselben in den LS2 Puffer 62 zu hindern. Entsprechend ist der temporäre Puffer 68 lediglich eine Entwurfshilfe und ist vollkommen optional. Im Taktzyklus nachdem eine Speicheroperation in den temporären Puffer 68 bewegt wird, wird sie in den LS2 Puffer 62 bewegt. Da Speicherdaten während des Taktzyklus, in dem eine Speicher-Speicheroperation in dem temporären Puffer 68 gehalten wird, auf den Ergebnisbussen 38 empfangen werden können, überwacht der temporäre Puffer 68 die Ergebnismarkierungen auf den Ergebnismarkierungsbussen 38b und liest Daten von den Ergebnisbussen 38a auf ähnliche Weise ein wie der LS1 Puffer 60 die Daten einliest.
  • Entsprechend werden Speicheroperationen, welche den Daten-Cachespeicher 28 sondiert haben, in dem LS2 Puffer 62 platziert. In dem vorliegenden Ausführungsbeispiel werden alle Speicheroperationen nach einer anfänglichen Sondierung des Daten-Cachespeichers 28 in dem LS2 Puffer 62 platziert. Speichervorgänge werden in dem LS2 Puffer 62 gehalten bis sie dem Daten-Cachespeicher 28 übergeben werden können (das heißt bis sie den Daten-Cachespeicher 28 aktualisieren dürfen). Im Allgemeinen können Speichervorgänge übergeben werden, wenn sie nicht spekulativ werden. In einem Ausführungsbeispiel können Speichervorgänge übergeben werden in Reaktion auf ihr Zurückziehen (wie über das Rückzugs-Interface 54 angezeigt) oder zu jedem Zeitpunkt danach. Ladevorgänge werden in dem vorliegenden Ausführungsbeispiel in dem LS2 Puffer 62 gehalten bis sie ebenfalls zurückgezogen werden. Ladetreffer verbleiben in dem LS2 Puffer 62 für Snooping-Zwecke. Ladefehltreffer werden in dem LS2 zumindest gehalten, bis die Cachezeile, auf die von dem Ladevorgang zugegriffen wurde, in den Daten-Cachespeicher 28 transferiert wird. In Reaktion darauf, dass die Cachezeile (oder Teile davon einschließlich der Ladedaten) für die Aktualisierung des Cachespeichers zeitlich geplant wird, wird der Ladefehltreffer eingeplant, um den Daten-Cachespeicher 28 erneut zu sondieren. Nach der erneuten Sondierung wird der Ladefehltreffer ein Ladetreffer (und die Ladedaten werden von dem Daten-Cachespeicher 28 weiter geleitet) und wird als solcher zurückgehalten bis zur Zurückziehung.
  • Die LS2 Steuerlogik 66 weist Einträge innerhalb des LS2 Puffers 62 für Speicheroperationen zu, welche den Daten-Cachespeicher 28 sondiert haben. Des weiteren empfängt die LS2 Steuerlogik 66 Informationen über den Status der Sondierung von dem Daten-Cachespeicher 28 für jede der Sondierungen auf Treffer/Fehltreffer Signale 82. Die Treffer/Fehltreffer Information wird in dem Eintrag des LS2 Puffers gespeichert, welcher der Speicheroperation entspricht, für welche der Status der Sondierung zur Verfügung gestellt wird. In einem Ausführungsbeispiel enthält der Daten-Cachespeicher 28 eine Schaltung zur Adressübersetzung, welche parallel zum Zugriff auf den Daten-Cachespeicher versucht, die virtuelle Adresse in die physikalische Adresse zu übersetzen.
  • Falls eine Übersetzung innerhalb der Schaltung zur Adressübersetzung nicht verfügbar ist, kann die Sondierung als ein Fehltreffer identifiziert werden bis eine Übersetzung erstellt ist (durch Suchen von durch Software gesteuerten Übersetzungstabellen im Hauptspeicher zum Beispiel). In einer bestimmten Implementierung enthält die Schaltung zur Adressübersetzung innerhalb des Daten-Cachespeichers 28 eine zweistufige Übersetzungs-Seitenschau-Puffer (TLB) Struktur einschließlich einem einstufigen TLB mit 32 Einträgen und einem 4 Wege Satz assoziativen, zweistufigen TLB mit 256 Einträgen.
  • Falls die Datenadresse der Speicheroperation von dem Daten-Cachespeicher 28 erfolgreich übersetzt wurde, wird die entsprechende physikalische Adresse auf dem physikalischen Adressbus 80 zur Verfügung gestellt. Die LS2 Steuerlogik veranlasst den entsprechenden Eintrag, die virtuelle Adresse mit der physikalischen Adresse zu überschreiben. Jedoch können gewisse Bits der virtuellen Adresse separat beibehalten werden für indizierende Zwecke bei erneuten Sondierungen und Übergaben von Speicherdaten für Ausführungsbeispiele, bei denen der Daten-Cachespeicher 28 virtuell indiziert und physikalisch markiert wird.
  • Für Speicheroperationen, welche den Daten-Cachespeicher 28 fehl treffen, weist der Daten-Cachespeicher 28 einen Eintrag in einem darin enthaltenen Fehltrefferadressenpuffer zu. Der Fehltrefferadressenpuffer listet die Fehltrefferadressen für die Übermittlung an die Businterfaceeinheit 37 auf, welche die Adressen aus dem L2 Cachespeicher oder dem Hauptspeicher holt. Eine Markierung, die den Eintrag innerhalb des Fehltrefferadressenpuffers identifiziert (die MAB Markierung), wird auf dem MAB Bus 78 für jede Speicheroperation, die fehl trifft, zur Verfügung gestellt. Es ist zu bemerken, dass der Daten-Cachespeicher 28 Einträge in dem Fehltrefferadressenpuffer auf Basis von Cachezeilen zuweist. Entsprechend erhalten nachfolgende Fehltreffer auf die gleiche Cachezeile dieselbe MAB Markierung und veranlassen nicht, dass ein neuer Eintrag im Fehltrefferadressenpuffer zugewiesen wird.
  • Die Businterfaceeinheit 37 holt nachfolgend die fehlende Cachezeile und gibt die Cachezeile als Fülldaten an den Daten-Cachespeicher 28 zurück. Die Businterfaceeinheit 37 stellt auch die der Cachezeile entsprechende MAB Markierung als eine Füllmarkierung auf einem Füllmarkierungsbus 84 zur Verfügung. Die LS2 Steuerlogik 66 vergleicht die Füllmarkierung mit den MAB Markierungen in dem LS2 Puffer 62. Falls eine Übereinstimmung mit der MAB Markierung für eine Lade-Speicheroperation auftritt, dann kann dieser Ladevorgang mit anderen Speicheroperationen, die während nachfolgender Taktzyklen ausgewählt werden, ausgewählt werden. Speichervorgänge, die mit der MAB Markierung überein stimmen werden als Treffer markiert, aber warten bis sie nicht spekulativ werden, bevor versucht wird, Daten zu übergeben.
  • In einem Ausführungsbeispiel wird die Cachezeile von Daten unter Benutzung mehrerer Pakete zurückgegeben. Jede Lade-Speicheroperation kann aufzeichnen, auf welches Paket sie zugegriffen hat (oder das Paket kann von den geeigneten Adressbits der Ladeadresse erkannt werden) und die Businterfaceeinheit 37 kann das Paket identifizieren, das zusammen mit der Füllmarkierung zurück gegeben wird. Entsprechend können lediglich solche Ladevorgänge für ein erneutes Sondieren ausgewählt werden, die auf das zurück zu gebende Paket zugreifen.
  • Die Businterfaceeinheit 37 stellt die Füllmarkierung im voraus zu den Fülldaten zur Verfügung, um es einem Ladevorgang zu erlauben, für ein erneutes Sondieren ausgewählt zu werden und über den Anschluss 0 an den Daten-Cachespeicher 28 übermittelt zu werden, um nebeneinander mit dem Paket von Daten, das den Daten-Cachespeicher 28 erreicht, an der die Daten weiterleitenden Stufe anzukommen. Die zugegriffenen Daten können dann weitergeleitet werden.
  • Da Speichervorgänge nach der Sondierung des Daten-Cachespeichers 28 zu dem LS2 Puffer 62 bewegt werden und nachfolgenden Ladevorgängen erlaubt wird, den Daten-Cachespeicher 28 von dem LS1 Puffer 60 zu sondieren und Daten daraus weiter zu leiten, ist es möglich, dass ein jüngerer Ladevorgang, der auf die gleiche Speicherstelle zugreift wie ein älterer Ladevorgang, den Daten-Cachespeicher 28 sondieren wird, bevor der ältere Ladevorgang seine Daten an den Daten-Cachespeicher 28 übergibt. Das korrekte Ergebnis des Ladens ist es, die dem älteren Speichervorgang entsprechenden Speicherdaten zu empfangen. Entsprechend überwacht die LS2 Steuerlogik 66 die Sondierungsadressen und stellt fest, wenn ältere Speichervorgänge zu diesen Adressen innerhalb des LS2 Puffers 62 sind. Falls eine Übereinstimmung detektiert wird und die Speicherdaten in dem LS2 Puffer 62 zur Verfügung stehen, signalisiert die LS2 Steuerlogik 66 dem Daten-Cachespeicher 28, die von dem LS2 Puffer 62 zur Verfügung gestellten Daten zur Weiterleitung auszuwählen, und stellt die ausgewählten Daten zur Verfügung. Wenn andererseits ein Fehltreffer detektiert wird und die Speicherdaten nicht in dem LS2 Puffer 62 zur Verfügung stehen, wird die Weiterleitung von Daten aus dem Daten-Cachespeicher 28 abgebrochen. Der Ladevorgang wird in den LS2 Puffer 62 bewegt und wird zur erneuten Sondierung ausgewählt bis die Speicherdaten verfügbar werden. Weitere Details betreffend die Speicher zu Lade Weiterleitung werden weiter unten zur Verfügung gestellt.
  • Im Allgemeinen ist die LS2 Steuerlogik 66 konfiguriert, um die Einträge in dem LS2 Puffer 62 abzutasten und Speicheroperationen für die erneute Sondierung des Daten-Cachespeichers 28 auszuwählen. Ladefehltreffer werden zur erneuten Sondierung ausgewählt in Reaktion auf die Daten, welche an den Daten-Cachespeicher 28 zurück gegeben werden. Ladevorgänge, die ältere Speichervorgänge treffen werden zur erneuten Sondierung ausgewählt, wenn sie derzeit nicht erneut sondieren. Speichervorgänge werden zur erneuten Sondierung ausgewählt in Reaktion darauf, dass sie zurück gezogen werden. Falls mehrere Speicheroperationen auswählbar sind, kann die LS2 Steuerlogik 66 die älteste der mehreren Speicheroperationen auswählen. Falls die LS2 Steuerlogik 66 den Anschluss 0 benutzt (über den Anschluss 0 Mux 72) signalisiert die LS2 Steuerlogik 66 der LS1 Steuerlogik 64, was den LS2 Eingang durch den Anschluss 0 Mux 72 auswählt und die Auswahl einer Speicheroperation von dem LS1 Puffer 60 auf Anschluss 0 für diesen Taktzyklus unmöglich macht.
  • Die LS2 Steuerlogik 66 ist des weiteren angeschlossen, um Snoop-Anforderungen von der Businterfaceeinheit 37 über das Snoop-Interface 52 zu empfangen. Im Allgemeinen werden Speicheroperationen in dem LS2 Puffer 62 einem Snoop unterzogen, da sie den Daten-Cachespeicher 28 sondiert haben und daher korrigierende Maßnahmen in Reaktion auf die Snoop-Operation benötigen können. Zum Beispiel können Ladetreffer (welche Daten an abhängige Befehle weiter geleitet haben) erfordern, verworfen und erneut ausgeführt zu werden. Speichervorgänge können einen Zustand eines Cachespeichers von ihrer Sondierung speichern, der geändert werden müsste. Im Gegensatz dazu haben Speicheroperationen in dem LS1 Puffer 60 den Daten-Cachespeicher 28 nicht sondiert und müssen daher auch nicht einem Snoop unterzogen werden.
  • Die LS2 Steuerlogik 66 empfängt die Snoop-Anforderung, untersucht die Einträge des LS2 Puffers auf die Snoop-Anforderung hin und antwortet über das Snoop-Interface 52 an die Businterfaceeinheit 37. Des weiteren kann die LS2 Steuerlogik 66 Aktualisierungen in den Einträgen des LS2 Puffers in Reaktion auf den Snoop durchführen. Weitere Details hinsichtlich Snooping in dem LS2 Puffer 62 werden folgend beschrieben.
  • Allgemein gesagt ist ein Puffer ein Speicherelement, das zum Speichern von zwei oder mehr Gegenständen an Information für eine spätere Wiedererlangung benutzt wird. Der Puffer kann eine Vielzahl von Registern, Signalspeichern, Flip-Flops oder anderen getakteten Speichergeräten aufweisen. Alternativ kann der Puffer einen geeignet angeordneten Satz von Zellen an wahlfreiem Zugriffsspeicher (RAM) aufweisen. Der Puffer ist in eine Anzahl von Einträgen unterteilt, wobei jeder Eintrag entworfen ist, um einen Gegenstand an Information zu speichern, für den der Puffer entworfen ist. Einträge können zugewiesen und frei gemacht werden auf jede geeignete Art. Zum Beispiel können die Puffer betrieben werden als schiebender zuerst-rein, zuerstraus (FIFO) Puffer, in dem Einträge nach unten bewegt werden, wenn ältere Einträge gelöscht werden. Alternativ können Anfangs- und Endezeiger ver wendet werden, um die ältesten und jüngsten Einträge in dem Puffer anzuzeigen und Einträge können in einer bestimmten Speicherstelle des Puffers verbleiben, bis sie von dort gelöscht werden. Der Ausdruck "Steuerlogik" wie er hier verwendet wird, bezeichnet jegliche Kombination von kombinatorischer Logik und/oder Zustandsmaschinen, welche Operationen auf Eingängen ausführen und in Reaktion darauf Ausgänge erzeugen, um die beschriebenen Operationen zu beeinflussen.
  • Es ist zu bemerken, dass in einem Ausführungsbeispiel die Lade/Speicher-Einheit 26 versucht, Speichersondierungen vom LS1 mit der Datenübergabe von einem älteren Speichervorgang an demselben Anschluss zu überlappen. Dies kann durchgeführt werden, da die Speichersondierung lediglich die Markierungen des Daten-Cachespeichers auf Treffer/Fehltreffer überprüft und nicht versucht, Daten innerhalb des Datenspeichers zu erhalten oder zu aktualisieren. Es ist weiter zu bemerken, dass, während die voran gegangene Beschreibung sich auf ein Ausführungsbeispiel bezieht, in welchem alle Speicheroperationen in dem LS2 Puffer 62 platziert werden, andere Ausführungsbeispiele nicht auf diese Weise arbeiten. Zum Beispiel müssen in einigen Ausführungsbeispielen Ladetreffer nicht in dem LS2 Puffer 62 gespeichert werden. Derartige Ausführungsbeispiele können zum Beispiel verwendet werden, falls die Beibehaltung einer starken Speicherordnung nicht gewünscht ist.
  • Als nächstes wird auf 4 Bezug genommen, in der ein Zeitablaufdiagramm gezeigt ist, das eine beispielhafte Pipeline für eine Speicheroperation darstellt, die den Daten-Cachespeicher 28 von dem LS1 Puffer 60 testet. Weitere Ausführungsbeispiele, die unterschiedliche Pipelines verwenden, sind möglich und werden betrachtet. In 4 werden Taktzyklen von durchgezogenen senkrechten Linien von einander abgegrenzt. Eine horizontale gestrichelte Linie ist ebenfalls gezeigt. Stufen der Pipeline, die sich auf andere Bereiche des Prozessors 10 beziehen, sind gezeigt, um die Schnittstelle von anderen Elementen zu der Lade/Speicher-Einheit 26 darzustellen.
  • Der Taktzyklus CLKO ist der Dekodier/Absendungs Zyklus für einen Befehl, der eine Speicheroperation spezifiziert. Während des Taktzyklus CLKO signalisiert die Dekodiereinheit 20, welche den Befehl dekodiert, der Lade/Speicher-Einheit 26 hinsichtlich der Speicheroperation. Die LS1 Steuerlogik 64 weist während der Dekodier/Absendungs-Stufe einen Eintrag im LS1 Puffer für den entsprechenden Befehl zu. Des weiteren übermittelt die Dekodiereinheit 20 den dekodierten Befehl an die entsprechende Reservierungsstation 22.
  • Während des Taktzyklus CLK1 erzeugt die Adresserzeugungseinheit die Datenadresse für die Speicheroperation und übermittelt die Datenadresse an die Lade/Speicher-Einheit 26. Während dieses Taktzyklus nimmt die Speicheroperation an der von der LS1 Steuerlogik 64 durchgeführten Abtastung teil (kraft der zur Verfügung gestellten Datenadresse) und wird ausgewählt, um den Daten-Cachespeicher 28 zu sondieren. Entsprechend befindet sich die Speicheroperation in der Pipelinestufe Abtastung der LS1 Pipeline.
  • Während des Taktzyklus CLK2 wird die Datenadresse an den Daten-Cachespeicher 28 übermittelt. Wie durch den Pfeil innerhalb des Taktzyklus CLK2 dargestellt, wird die Speicheroperation an dem Ende des Taktzyklus CLK2 von dem LS1 Puffer 60 zu dem temporären Puffer 68 bewegt. Die Speicheroperation ist während des Taktzyklus CLK2 in der Adresse der Stufe Datencachespeicher der LS1 Pipeline.
  • Während des Taktzyklus CLK3 greift die Datenadresse auf den Daten-Cachespeicher 28 zu. Der Speicheroperation entsprechende Daten (falls die Speicheroperation ein Ladevorgang ist) werden am Ende des Taktzyklus CLK3 weiter geleitet. Darüber hinaus wird die Speicheroperation von dem temporären Puffer 68 zu dem LS2 Puffer 62 bewegt. Die Speicheroperation ist während des Taktzyklus CLK3 in der Stufe Cachezugriff.
  • Während des Taktzyklus CLK4 kann ein Befehl in Abhängigkeit von der Speicheroperation (falls die Speicheroperation ein Ladevorgang ist) ausgeführt werden. Entsprechend stellt die in 4 dargestellte Pipeline eine drei Takt zyklen dauernde Adresserzeugung für die Ladelatenz der abhängigen Operationsausführung zur Verfügung. Des weiteren ist die Speicheroperation während des Taktzyklus CLK4 in der Pipelinestufe Antwort. Der Daten-Cachespeicher 28 stellt während der Stufe Antwort Informationen hinsichtlich Treffern/Fehltreffern und die physikalische Adresse zur Verfügung. Entsprechend verbindet die LS2 Steuerlogik 66 während der Stufe Antwort die Informationen hinsichtlich Treffern/Fehltreffern und die physikalische Adresse mit einer Speicheroperation.
  • Während des Taktzyklus CLK5 ist die Speicheroperation in einer Stufe Antwort2 der Pipeline. Während dieser Stufe wird die Fehltrefferadresspuffermarkierung, die den Eintrag des Fehltrefferadresspuffers identifiziert, welcher der Cachezeile zugewiesen ist, auf die von der Speicheroperation zugegriffen wurde, (falls die Speicheroperation ein Fehltreffer ist) dem Daten-Cachespeicher 28 zur Verfügung gestellt. Entsprechend verbindet die LS2 Steuerlogik 66 in der Stufe Antwort2 die von dem Daten-Cachespeicher 28 empfangene MAB Markierung mit einer Speicheroperation.
  • Es wird nun auf 5 Bezug genommen, in der ein Zeitablaufdiagramm gezeigt ist, das eine beispielhafte Pipeline für eine Speicheroperation darstellt, die den Daten-Cachespeicher 28 von dem LS2 Puffer 62 testet. Weitere Ausführungsbeispiele, die unterschiedliche Pipelines verwenden, sind möglich und werden betrachtet. In 5 werden Taktzyklen von durchgezogenen senkrechten Linien von einander abgegrenzt. Eine horizontale gestrichelte Linie ist ebenfalls gezeigt. Stufen der Pipeline, die sich auf andere Bereiche des Prozessors 10 beziehen, sind gezeigt, um die Schnittstelle von anderen Elementen zu der Lade/Speicher-Einheit 26 darzustellen.
  • Während des Taktzyklus CLKO nimmt die Speicheroperation an einer Abtastung der Einträge des LS2 Puffers teil und wird ausgewählt, um den Daten-Cachespeicher 28 erneut zu sondieren. Wie von dem Pfeil unterhalb des Taktzyklus CLKO gezeigt, kann die Speicheroperation ausgewählt werden, falls eine Füllmarkierung mit der für die Speicheroperation empfangenen MAB Mar kierung überein stimmt, falls die Speicheroperation ein Ladevorgang ist, der einen älteren Speichervorgang in dem LS2 Puffer 62 trifft (für den die Daten bei der vorherigen Sondierung nicht zur Verfügung standen), oder falls die Speicheroperation ein Ladevorgang ist, der von dem Umordnungspuffer 32 zurück gezogen worden ist.
  • Während des Taktzyklus CLK1 betritt die während der Stufe Abtastung1 ausgewählte Speicheroperation die Stufe Abtastung1. Während der Stufe Abtastung1 wird die Speicheroperation von den Multiplexern 76 und 72 für die Übermittlung an den Daten-Cachespeicher 28 ausgewählt. Entsprechend wählt die LS2 Steuerlogik 66 die Speicheroperation während der Stufe Abtastung1 durch den Multiplexer 76 aus. Die Taktzyklen CLK2, CLK3, CLK4 und CLK5 sind die Adress- zu Daten-Cachespeicher, Cachespeicherzugriff, Antwort und Antwort2 Stufen der LS2 Puffer Resondierungspipeline und sind ähnlich zu den entsprechenden Stufen oben. Entsprechend kann, für das vorliegende Ausführungsbeispiel, die Businterfaceeinheit 37 die MAB Markierung 4 Takte vor der Verfügbarmachung der entsprechenden Daten zur Verfügung stellen, um eine Auswahl eines Ladevorgangs zu erlauben, der auf die entsprechenden Fülldaten zugreift, die während des Taktzyklus in der Stufe Cachespeicherzugriff sind, in dem die Fülldaten an dem Daten-Cachespeicher 28 ankommen (und daher können die Fülldaten weiter geleitet werden).
  • Es ist zu bemerken, dass die Zeitplanung zwischen den Stufen der Befehlspipeline über den gestrichelten Linien in den 4 und 5 und den Stufen der Speicheroperationspipeline unterhalb der gestrichelten Linien von der in den 4 und 5 gezeigten erweitert werden kann. Zum Beispiel muss in 4 die Adresse nicht genau in dem Taktzyklus erzeugt werden, der unmittelbar dem Dekodier/Absendungs Zyklus folgt. Operanden können nicht zur Verfügung stehen oder ältere Befehle können stattdessen für die Erzeugung der Adresse ausgewählt werden. Darüber hinaus muss eine Speicheroperation nicht während des Taktzyklus, in dem die Adresse zur Verfügung gestellt wird, auf Zugriff abgetastet werden, da stattdessen ältere Speicheroperationen abgetastet werden können.
  • Als nächstes wird auf 6 Bezug genommen, in der ein Blockdiagramm gezeigt ist, das beispielhaft Information darstellt, die in einem Ausführungsbeispiel eines Eintrags 90 in dem LS1 Puffer gespeichert werden kann. Weitere Ausführungsbeispiele sind möglich und werden betrachtet.
  • Der Eintrag 90 in dem LS1 Puffer enthält ein Gültig Feld 92A, das die Gültigkeit eines Eintrags und auch gewisser anderer Felder innerhalb des Eintrags anzeigt. Zum Beispiel kann das Gültig Feld 92A ein Gültig Bit, das anzeigt, ob der Eintrag gültig ist oder nicht, ein Daten Gültig Bit, das anzeigt, ob Speicherdaten gültig sind oder nicht (falls anwendbar), und ein Adress Gültig Bit, das anzeigt, ob die Datenadresse gültig ist oder nicht, aufweisen.
  • Ein Typ Feld 92B speichert den Typen der innerhalb des Eintrags 90 in dem LS1 Puffer vertretenden Speicheroperation. Die Speicheroperation kann ein Ladevorgang, eine Speichervorgang oder ein Lade/Speichervorgang sein (für einen Lade-op-Speicher Befehl, wie sie in der x86 Befehlssatzarchitektur auftreten können). Lade/Speicher Typen können den Daten-Cachespeicher 28 einmal sondieren und die auf der Sondierung basierenden Daten weiter leiten, dann nachfolgend den Speichervorgang ausführen, wenn der Befehl zurück gezogen ist. Entsprechend können Lade/Speicher Typen einen einzelnen Eintrag für sowohl die Speicher- als auch die Lade-Speicheroperationen belegen.
  • Das Adress Feld 92C speichert die Datenadresse der Speicheroperation und das Speicherdaten Feld 92D speichert die Speicherdaten, die einer Speicher-Speicheroperation entsprechen. Das Befehlsmarkierungs Feld 92E speichert die Befehlsmarkierungen, die dem der Speicheroperation entsprechendem Befehl von dem Umordnungspuffer 32 zugewiesen wurden. Die Befehlsmarkierung wird verwendet, um die Datenadresse von den Datenadressbussen 44 einzulesen. Des weiteren kann die Befehlsmarkierung verwendet werden, um festzustellen, wenn der entsprechende Befehl von dem Umordnungspuffer 32 zurück gezogen wird und kann für Ladevorgänge als Ergebnismarkierung zum Weiterleiten von Daten verwendet werden. Das Datenmarkierungs Feld 92F speichert die Speicherdatenmarkierung, welche die Quelle der Speicherdaten für eine Speicher-Speicheroperation identifiziert.
  • Das Adress Gültig Bit innerhalb des Gültig Felds 92A zeigt an, ob das Adressdaten Feld 92C gültig ist. Jedoch kann die Datenadresse von den AGUs 42 zur Verfügung gestellt werden und zum Sondieren des Daten-Cachespeichers 28 ausgewählt werden, bevor die Datenadresse in dem Eintrag 90 des LS1 Puffers gültig wird. Ein AtagM Feld 92G wird benutzt, um anzuzeigen, dass die in dem vorherigen Taktzyklus von den AGUs 42 zur Verfügung gestellte Adressmarkierung mit dem Befehlsmarkierungsfeld 92E überein stimmt, um Auswahlsteuerungen für den Anschluss 0 Mux 72 und den Anschluss 1 Mux 74 zur Verfügung zu stellen. In einem Ausführungsbeispiel kann das AtagM Feld 92G ein Bit für jede Ausgabeposition enthalten, um die Ausgabeposition zu identifizieren, von der die Datenadresse empfangen wird. Entsprechend kann das AtagM Feld 92G verwendet werden, um festzustellen, welcher LS1 Eintrag eine Adresse einlesen soll, die dem LS1 Puffer 60 von einem der Segmentaddierer 70 präsentierte wurde.
  • Wie in 4 dargestellt kann die Entfernung eines Eintrags von dem LS1 Puffer 60 von dem Taktzyklus verzögert werden, in dem der Eintrag für die Sondierung ausgewählt wird. Entsprechend wird ein zugegriffenes Bit 92H in dem Eintrag 90 in dem LS1 Puffer zur Verfügung gestellt. Das zugegriffene Bit 92H kann gesetzt werden, um anzuzeigen, dass die Speicheroperation in dem vorherigen Taktzyklus für die Sondierung ausgewählt wurde, und daher in dem aktuellen Taktzyklus nicht ausgewählt werden sollte. Gewisse Typen von Speicheroperationen können zur nicht spekulativen Ausführung vorbestimmt werden, in Übereinstimmung mit der von dem Prozessor 10 verwendeten Befehlssatzarchitektur oder gemäß einem Entwurfswunsch. Ein nicht spekulativ Bit 92I kann verwendet werden, um derartige Speicheroperationen anzuzeigen.
  • Schließlich kann, wie gewünscht, ein allgemeines Steuerfeld 92J für zusätzliche Steuerbits enthalten sein. Zum Beispiel kann ein Ausführungsbeispiel des Prozessors 10, das die x86 Befehlssatzarchitektur verwendet, innerhalb des Steuerfelds 92J Steuerinformationen enthalten, die typisch für die x86 Architektur sind. Zum Beispiel kann Information in dem Steuerfeld 92J bezogen auf das zugegriffene Segment, Verletzungen der Segmentgrenze und Merkmale des Segments gespeichert sein. Des weiteren können Informationen wie die Größe der Speicheroperation (das heißt die Anzahl der zusammenhängenden Bytes, die von der Speicheroperation betroffen sind) enthalten sein, ebenso wie jegliche andere gewünschte Steuerinformation in Übereinstimmung mit dem Wunsch des Entwicklers.
  • Es wird nun auf 7 Bezug genommen, in der ein Blockdiagramm gezeigt ist, das beispielhaft Information darstellt, die in einem Ausführungsbeispiel eines Eintrags 94 in dem LS2 Puffer gespeichert werden kann. Weitere Ausführungsbeispiele sind möglich und werden betrachtet.
  • Der Eintrag 94 in dem LS2 Puffer enthält ein Gültig Feld 96A, das die Gültigkeit eines Eintrags und auch gewisser anderer Felder innerhalb des Eintrags anzeigt. Zum Beispiel kann das Gültig Feld 92A ein Gültig Bit, das anzeigt, ob der Eintrag gültig ist oder nicht, ein Daten Gültig Bit, das anzeigt, ob Speicherdaten gültig sind oder nicht (falls anwendbar), und ein physikalische Adress Bit, das anzeigt, ob die physikalische Datenadresse gültig ist oder nicht (das heißt, ob eine gültige Übersetzung von dem Daten-Cachespeicher 28 durchgeführt wurde oder nicht), aufweisen.
  • Der Eintrag 94 in dem LS2 Puffer enthält ferner ein Typ Feld 96B, ein Adress Feld 96C, ein Speicherdaten Feld 96D, ein Befehlsmarkierungs Feld 96E und ein Datenmarkierungs Feld 96F, die ähnlich sind zu den oben beschriebenen Feldern 92B92F. Zusätzlich kann das Speicherdaten Feld 96D verwendet werden für den Fall, dass ein Ladevorgang einen älteren Speichervorgang im LS2 Puffer 62 trifft. Für diese Fälle wird die Speicherbefehlsmarkierung des Speichervorgangs, der den Ladevorgang trifft, in dem Speicherdaten Feld 96D des Ladeeintrags gespeichert. Für nachfolgende erneute Sondierungen kann der ältere Speichervorgang durch den Vergleich der Speicherbefehlsmarkierung lokalisiert werden, anstatt zu versuchen, nach der Adresse abzutasten und die Treffer zu priorisieren. Weitere Details hinsichtlich der Speicher zu Lade Weiterleitung werden für ein Ausführungsbeispiel der Lade/Speicher-Einheit 26 weiter unten zur Verfügung gestellt. Der LS2 Puffer 94 enthält des weiteren ein nicht spekulativ Bit 96L ähnlich zudem oben beschriebenen nicht spekulativ Bit 92I.
  • Ein MAB Markierungsfeld 96G speichert die MAB Markierung, die einer nicht treffenden Speicheroperation von dem Daten-Cachespeicher 28 zugewiesen wurde. Ähnlich wie das zugegriffen Bit 92N zeigt das zugegriffen Bit 96H an, dass der Eintrag 94 in dem LS2 Puffer ausgewählt wurde, um auf den Daten-Cachespeicher 28 zuzugreifen, und derzeit nicht für eine Auswahl zur Verfügung steht. Des weiteren enthält der Eintrag 94 in dem LS2 Puffer ein Pipe Feld 96I, welches die Stufe der Pipeline nachverfolgt, die von der in dem Eintrag gespeicherten Speicheroperation belegt ist, nachdem sie ausgewählt worden ist. Das Pipe Feld 96I kann zum Beispiel ein Bit für jede Stufe der Pipeline aufweisen. Das Bit für die erste Stufe der Pipeline kann in Reaktion auf die Auswahl der Speicheroperation in dem Eintrag gesetzt werden, und dann kann das Feld jeden Taktzyklus weiter geschoben werden so wie die Speicheroperation sich durch die Pipeline weiter bewegt. Alternativ kann ein kodierter Wert verwendet werden. Von dem Daten-Cachespeicher 28 empfangene Informationen können von den abtastenden Pipe Feldern 96I mit der entsprechenden Speicheroperation für eine Speicheroperation verbunden werden, die in der Stufe der Pipeline ist, in der die Informationen erzeugt werden.
  • Wie zuvor erwähnt können Speicheroperationen in dem LS2 Puffer 62 verbleiben nachdem sie von dem Umordnungspuffer 32 zurück gezogen worden sind. Das Zurückgezogen Bit 96J wird verwendet, um den Eintrag als entsprechend zu einem Befehl zu identifizieren, der zurück gezogen worden ist. Des weiteren kann der Eintrag 94 in dem LS2 Puffer ein zuletzt rein (LIB) Bit 96K enthalten. Das LIB Bit 96K wird verwendet, wenn Speichervorgänge in dem LS2 Puffer 62 mit Ladevorgängen verglichen werden, die den Daten-Cachespeicher 28 zum ersten Mal sondieren. Das zuletzt in den Puffer Bit zeigt an, dass der Speichervorgang in dem entsprechenden Eintrag der letzte (das heißt der jüngste) Eintrag in dem Puffer ist, der die von diesem Speichervorgang angegebene Datenadresse aktualisiert. Entsprechend wird, in dem Fall, in dem mehrere Speichervorgänge in dem Puffer von einem Ladevorgang getroffen werden, der Ladevorgang mit dem gesetzten LIB Bit als der Speichervorgang ausgewählt, von dem der Ladevorgang abhängig ist. Eine komplexe Trefferpriorisierungslogik kann dadurch vermieden werden. Dieselbe Vergleichsschaltung, die zum Vergleichen von sondierenden Ladevorgängen mit dem LS2 Puffer 62 verwendet wird, kann auch zum Vergleichen der sondierenden Speichervorgänge verwendet werden. Falls ein sondierender Speichervorgang einen Speichervorgang im LS2 Puffer 62 trifft, für den das LIB Bit 96K gesetzt ist, wird das LIB Bit 96K zurück gesetzt. Alternativ kann ein zweites Bit gesetzt werden und als Zurücksetzen des LIB Bits 96K interpretiert werden. Das LIB Bit 96K wird für einen Speicherpuffereintrag gesetzt, wenn der Speicherpuffereintrag zugewiesen wird.
  • Das Fehltreffer Bit 96M wird zur Identifizierung verwendet, ob die in dem Eintrag 94 in dem LS2 Puffer gespeicherte Speicheroperation ein Fehltreffer in dem Daten-Cachespeicher 28 ist oder nicht. Das Fehltreffer Bit 96M wird gesetzt in Übereinstimmung mit der Treffer/Fehltreffer Information, die von dem Daten-Cachespeicher 28 auf den Treffer/Fehltreffer Leitungen 82 (entweder bei der anfänglichen Sondierung oder bei der erneuten Sondierung) zur Verfügung gestellt wird. Des weiteren enthält der Eintrag 94 in dem LS2 Puffer ein selbstmodifizierenden Code Feld (SMC) 96N zur Benutzung mit der SMC Zustandsmaschine, die im folgenden für ein Ausführungsbeispiel der Lade/Speicher-Einheit 26 detaillierter beschrieben ist. Das Snoop Resync Bit 960 wird verwendet, um die Synchronisierung aufgrund von Snoops anzuzeigen, wie unten in weiteren Details beschrieben ist. Das Speicher Lade Weiterleitung Bit 96P wird verwendet, um anzudeuten, dass der aktuelle Eintrag ein Ladevorgang ist, der im LS2 Puffer 62 einen älteren Ladevorgang trifft (für den keine Daten zur Verfügung stehen). Ladevorgänge, die frühere Ladevorgänge treffen, werden zur erneuten Sondierung ausgewählt bis die Speicherdaten verfügbar werden (zu welchem Zeitpunkt die Daten für den Ladevorgang weiter geleitet werden). Ein Speichertyp Feld 96Q ist in dem Eintrag 94 in dem LS2 Puffer ebenfalls enthalten. Der Speichertyp kann von dem Daten-Cachespeicher 28 bei der Übersetzung der Adresse der Speicheroperation zur Verfügung gestellt werden. Neben anderen Dingen kann der Speichertyp anzeigen, ob die Speicheroperation zwischen gespeichert werden kann oder nicht. Diese Information kann in Übereinstimmung mit einem unten beschriebenen Ausführungsbeispiel verwendet werden, um festzustellen, ob SMC Überprüfungen ausgeführt werden sollen oder nicht.
  • Schließlich kann, wie gewünscht, ein allgemeines Steuerfeld 96R für zusätzliche Steuerbits enthalten sein. Zum Beispiel zusätzliche Informationen von der Übersetzung der Adresse, die für die Befehlssatzarchitektur spezifisch ist. In einem Ausführungsbeispiel kann ein Resondierungsbit enthalten sein, um anzuzeigen, dass ein Speichertreffer erneut sondieren muss, weil eine dazwischengekommene Aktivität veranlasst hat, dass die Zeile verworfen wird. Des weiteren kann der Weg des Daten-Cachespeichers 28, der trifft, zur Verwendung bei der Aktualisierung des Daten-Cachespeichers 28 mit Speicherdaten gespeichert werden. Noch ein weiteres Bit kann definiert werden, um anzuzeigen, dass die Businterfaceeinheit 37 in dem Vorgang ist, den Zustand für eine Cachezeile zu erlangen, die von einem Ladevorgang aktualisiert wurde, was dem Ladevorgang eine Beendigung erlaubt. Noch weiter können lineare Adress Bits in dem Steuerfeld 96R gespeichert werden, die übersetzt worden sind, aber zum Indizieren verwendet werden. Steuerinformationen können nach Wahl des Entwicklers eingeschlossen oder ausgeschlossen werden.
  • Es wird nun auf 8 Bezug genommen, in der ein Schaltungsdiagramm gezeigt ist, das eine beispielhafte Abtastlogik für einen Eintrag im LS1 Puffer darstellt. Weitere Ausführungsbeispiele und bestimmte Implementierungen sind möglich und werden betrachtet. Jede geeignete Logik kann verwendet werden, einschließlich den in 8 dargestellten Booleschen Äquivalenten der Logik. Weitere Schemata können zusätzliche oder ersetzende Auswahlkriterien umfassen, wie gewünscht.
  • Wie in 8 gezeigt, kann ein LS1 Eintrag zur Auswahl geeignet sein, wenn die Datenadresse (AV) gültig ist oder eine Markierungsübereinstimmung für von den AGUs 42 zur Verfügung gestellten Adressen detektiert wird (AtagM). Des weiteren ist der Eintrag nicht geeignet, wenn auf ihn für eine Sondierung zugegriffen wurde (ACC) oder er auf eine nicht spekulative Ausführung beschränkt ist (NonSpec) bis er von dem Umordnungspuffer 32 als zurückziehbar angezeigt wird.
  • Das Ergebnis der in 8 gezeigten Logik ist es, dass der entsprechende Eintrag zum Sondieren des Daten-Cachespeichers 28 auswählbar ist. In einem Ausführungsbeispiel begrenzt die Lade/Speicher-Einheit 28 die Abtastung auf die vier ältesten Einträge in dem LS1 Puffer 60. Entsprechend kann eine Auswahllogik ähnlich wie die 8 gezeigte für die vier ältesten Einträge verwendet werden und kann geeignet sein, unabhängig ob ältere Einträge existieren und nicht ausgewählt sind oder nicht.
  • Als nächstes wenden wir uns 9 zu, in der ein Schaltungsdiagramm gezeigt ist, das eine beispielhafte Abtastlogik für einen Eintrag im LS2 Puffer darstellt. Weitere Ausführungsbeispiele und bestimmte Implementierungen sind möglich und werden betrachtet. Jede geeignete Logik kann verwendet werden, einschließlich der in 8 dargestellten Booleschen Äquivalente der Logik. Weitere Schemata können zusätzliche oder ersetzende Auswahlkriterien umfassen, wie gewünscht.
  • Für das Ausführungsbeispiel aus 9 kann ein LS2 Eintrag zur erneuten Sondierung geeignet sein, wenn eine von der Businterfaceeinheit 37 zur Verfügung gestellte Füllmarkierung mit der MAB Markierung von diesem Eintrag überein stimmt und dieser Eintrag ein Fehltreffer ist oder wenn der Eintrag ein Ladevorgang ist, der einen Speichervorgang trifft, für den Daten nicht zur Verfügung stehen (STLF), oder wenn der Eintrag zurück gezogen ist (RET) und ein Speichervorgang ist. Des weiteren ist der Eintrag auswählbar, wenn er gültig ist und nicht auf ihn zugegriffen wird (ACC).
  • Ähnlich wie in dem Ausführungsbeispiel aus 8 ist das Ergebnis der in 9 gezeigten Logik, dass der entsprechende Eintrag zum erneuten Sondieren des Daten-Cachespeichers 28 auswählbar ist. Die Auswählbarkeit eines Eintrags kann geeignet sein, unabhängig ob ältere auswählbare Einträge existieren oder nicht.
  • Abhängigkeitsverbindungsdatei
  • Wie zuvor erwähnt ist die Lade/Speicher-Einheit 26 konfiguriert, um Fälle zu behandeln, in welchen eine sondierende Lade-Speicheroperation eine in dem LS2 Puffer 62 gespeicherte ältere Speicher-Speicheroperation trifft. Allgemein ausgedrückt wird von einer Lade-Speicheroperation gesagt, dass sie eine Speicher-Speicheroperation "trifft", wenn die Lade-Speicheroperation zumindest auf ein Byte zugreift, das von der Speicher-Speicheroperation aktualisiert wird. Auf ähnliche Weise kann die Ladeadresse bestimmt sein, die Speicheradresse zu treffen, wenn die Ladeadresse (und die Größe der Operation) anzeigt, dass zumindest auf ein von dem Speichervorgang aktualisiertes Byte von dem Ladevorgang zugegriffen wird.
  • Im Allgemeinen vergleicht die Lade/Speicher-Einheit 26 Datenadressen von Speicheroperationen, die den Daten-Cachespeicher 28 von dem LS1 Puffer 60 sondieren, mit Speicheroperationen in dem LS2 Puffer 62. Falls ein sondierender Ladevorgang einen Speichervorgang in dem LS2 Puffer 62 trifft und die Speicherdaten in dem LS2 Puffer 62 zur Verfügung stehen, werden die Speicherdaten an den Daten-Cachespeicher 28 zur Weiterleitung anstelle von jeglichen Ladedaten, die in dem Cachespeicher sein mögen, übermittelt. Andererseits kann ein sondierender Ladevorgang in dem LS2 Puffer 62 einen Speichervorgang treffen, für den die Speicherdaten nicht zur Verfügung stehen. In diesem Fall wird die Weiterleitung der Daten von dem Daten-Cachespeicher 28 abgebrochen und die Lade-Speicheroperation wird ausgewählt, um den Daten-Cachespeicher 28 erneut zu sondieren bis die Speicherdaten in dem LS2 Puffer 62 verfügbar werden (in Übereinstimmung mit dem oben beschriebenen Abtastmechanismus). Schließlich werden die Speicherdaten in dem LS2 Puffer 62 verfügbar und werden von ihm während eines erneuten Sondierens durch den Ladevorgang weiter geleitet oder der Speichervorgang kann den Daten-Cachespeicher 28 aktualisieren und die Daten können von dem Daten-Cachespeicher 28 während eines erneuten Sondierens durch den Ladevorgang weiter geleitet werden. Abschließend können Speicher-Speicheroperationen, die in dem Puffer auf Speicher-Speicheroperationen treffen, veranlassen, dass das LIB Bit für die Treffer-Speicher-Speicheroperationen zurück gesetzt wird.
  • Um die Bestimmung, welcher Speichervorgang von einem Ladevorgang, der den LS2 Puffer 62 erneut sondiert, getroffen wird, zu vereinfachen, wird die Speicherbefehlsmarkierung des Speichervorgangs, der von dem Ladevorgang bei der anfänglichen Sondierung des LS1 Puffer 60 getroffen wird, in dem Eintrag des LS2 Puffers des Ladevorgangs aufgezeichnet. Während des erneuten Sondierens des LS2 Puffers 62, wird die für den Ladevorgang aufgezeichnete Speicherbefehlsmarkierung mit den Speicherbefehlsmarkierungen in dem LS2 Puffer 62 verglichen, anstatt dass die Datenadressen des Ladevorgangs mit den Datenadressen der Speichervorgänge in dem LS2 Puffer 62 verglichen werden. Wenn die für den Speichervorgang aufgezeichnete Speicherbefehlsmarkierung mit einer Speicherbefehlsmarkierung in dem LS2 Puffer 62 überein stimmt und die Speicherdaten zur Verfügung stehen, werden die Speicherdaten für den Ladevorgang auf ähnliche Weise weiter geleitet, wie bei dem oben beschriebenen Fall der anfänglichen Sondierung. Auf ähnliche Weise wird, wenn die für den Ladevorgang aufgezeichnete Speicherbefehlsmarkierung mit einer Speicherbefehlsmarkierung in dem LS2 Puffer 62 überein stimmt und die Speicherdaten nicht zur Verfügung stehen, das Weiterleiten abgebrochen und der Ladevorgang wieder ausgewählt, um zu einem späteren Zeitpunkt erneut zu sondieren. Wenn die für den Ladevorgang aufgezeichnete Speicherbefehlsmarkierung nicht mit einer Speicherbefehlsmarkierung überein stimmt, werden die Daten aus dem Daten-Cachespeicher 28 weiter geleitet.
  • Allgemein betrachtet sind Speicherdaten von einer Speicherstelle "verfügbar", wenn die Speicherdaten tatsächlich an der Speicherstelle gespeichert werden. Wenn die Daten zu einem späteren Zeitpunkt an der Speicherstelle gespei chert werden wollen, aber bis jetzt dort noch nicht gespeichert worden sind, dann sind die Daten "nicht verfügbar", "noch nicht verfügbar" oder "unverfügbar". Zum Beispiel wären Speicherdaten in einem Eintrag des LS2 Puffers nicht verfügbar, wenn die Speicherdaten noch nicht von der Quelle der Speicherdaten an den Eintrag des LS2 Puffers übermittelt worden sind. Die Quelle der Speicherdaten ist der Befehl, der zur Erzeugung der Speicherdaten ausführt, und kann derselbe Befehl sein, auf welchen sich der Speichervorgang bezieht (ein Befehl gibt einen Speicheroperanden als Ziel an), oder kann ein älterer Befehl sein. Die Speicherdatenmarkierung identifiziert die Quelle der Speicherdaten und wird daher mit den Ergebnismarkierungen von den Ausführungseinheiten verglichen, um die Speicherdaten einzulesen.
  • Während des oben beschriebenen Mechanismus empfangen Ladevorgänge, die von älteren Ladevorgängen abhängig sind, die korrekten Daten. Jedoch kann in vielen Fällen der obige Mechanismus zu erheblichen Verzögerungen bei der Weiterleitung von Daten für einen Ladevorgang führen (gemessen, wenn die Speicherdaten zur Verfügung stehen). 10 ist ein Zeitablaufdiagramm, das ein Beispiel einer derartigen Verzögerung in Übereinstimmung mit einem Ausführungsbeispiel der Lade/Speicher-Einheit 26 darstellt. Ähnlich wie bei den Zeitablaufdiagrammen oben, stellt 10 einen Satz von Taktzyklen dar, die von vertikalen durchgehenden Linien getrennt sind. Die Stufen der Pipeline der Lade/Speicher-Einheit 26 mit einem einen älteren Ladevorgang treffenden Ladevorgang, der während jedem Taktzyklus des Beispiels belegt, sind innerhalb jedes Taktzyklus aufgelistet. Entsprechend ist der Ladevorgang in der Stufe Cachespeicherzugriff während des Taktzyklus CLKO, der Stufe Antwort während des Taktzyklus CLK1, der Stufe Antwort2 während des Taktzyklus CLK2, der Stufe Abtastung1 während des Taktzyklus CLK3, der Stufe Abtastung1 während des Taktzyklus CLK4, der Stufe Adresse an Daten-Cachespeicher während des Taktzyklus CLK5 und wieder der Stufe Cachespeicherzugriff während des Taktzyklus CLK6.
  • In dem Beispiel werden die Speicherdaten an dem Ende des Taktzyklus CLKO zur Verfügung gestellt. Um die minimale Latenzzeit für den Ladevorgang zu erzielen, würde es wünschenswert sein, die Daten während des Taktzyklus CLKO weiter zu leiten. Abhängige Operationen könnten dann in dem Taktzyklus CLK1 ausgeführt werden. Jedoch können in Übereinstimmung mit einem Ausführungsbeispiel die Daten nicht weiter geleitet werden. Entsprechend werden die Speicherdaten bei dem erneuten Sondieren des Daten-Cachespeichers 28 während des Taktzyklus CLK6 weiter geleitet.
  • Es ist zu bemerken, dass noch erheblichere Verzögerungen angetroffen werden können. Zum Beispiel muss der Ladevorgang nicht unmittelbar in der Stufe Abtastung1 des Taktzyklus CLK4 ausgewählt werden. Mehrere Taktzyklen können ablaufen bevor der Ladevorgang ausgewählt wird, um den Daten-Cachespeicher 28 erneut zu sondieren. Des weiteren kann, sogar wenn der Ladevorgang zu dem Zeitpunkt nicht in der Pipeline wäre, an dem die Speicherdaten im Taktzyklus CLKO ankommen (zum Beispiel, wenn der Ladevorgang untätig im LS2 Puffer 62 sein würde), eine erhebliche Verzögerung erfahren werden, bevor der Ladevorgang für ein erneutes Sondieren ausgewählt wird. Darüber hinaus könnte, sogar wenn die LS2 Steuerlogik 66 konfiguriert wäre, um den Ladevorgang in Reaktion auf den Empfang der Speicherdaten für ein erneutes Sondieren auszuwählen, eine Verzögerung von vier Taktzyklen (in dem vorliegenden Ausführungsbeispiel) erfahren werden.
  • Ein Ausführungsbeispiel einer Lade/Speicher-Einheit 26 kann einen Mechanismus zur Weiterleitung verwenden, der die Weiterleitung der Speicherdaten auf den Empfang der Speicherdaten erlaubt (unabhängig von dem erneuten Sondieren des entsprechenden Ladevorgangs). Ein derartiges Ausführungsbeispiel kann Speicherdaten an Befehle weiter leiten, die von dem Ladevorgang während zum Beispiel des in 10 gezeigten Taktzyklus CLKO abhängig sind.
  • 11 stellt ein Ausführungsbeispiel eines Bereichs der Lade/Speicher-Einheit 26 und des Daten-Cachespeichers 28 dar. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. In dem Ausführungsbeispiel von 11 enthält die Lade/Speicher-Einheit 26 den LS2 Puffer 62, die LS2 Steuerlogik 66, Adress Komparatoren 102A102B, eine Abhängigkeitsverbindungsdatei 104, eine Steuerlogik für die Abhängigkeitsverbindungsdatei 106 und Speicherdatenmarkierungs Komparatoren 108A108B. Des weiteren enthält der Daten-Cachespeicher 28 in dem Ausführungsbeispiel von 11 einen Anschluss 0 Daten Mux 110, einen Anschluss 1 Daten Mux 112 und einen LS2 Weiterleitungsdaten Mux 114. Der LS2 Puffer 62 ist mit dem Datenweiterleitung Mux 100, den Komparatoren 102A102B und der LS2 Steuerlogik 66 verbunden. Die LS2 Steuerlogik 66 ist ferner mit den Multiplexern 100, 110, 112 und 114 verbunden. Die LS2 Steuerlogik 66 ist des weiteren mit der Steuerlogik für die Abhängigkeitsverbindungsdatei 106, der Abhängigkeitsverbindungsdatei 104 und den Komparatoren 102A102B verbunden. Die Abhängigkeitsverbindungsdatei 104 ist zum Empfangen von Befehlsmarkierungen angeschlossen, die den Datencacheanschlüssen 0 und 1, dem LS2 Weiterleitungsdaten Mux 114, den Komparatoren 108A108B und der Steuerlogik für die Abhängigkeitsverbindungsdatei 106 entsprechen. Die Steuerlogik für die Abhängigkeitsverbindungsdatei 106 ist ferner mit dem Mux 114 und den Komparatoren 108A108B verbunden. Die Komparatoren 102A102B sind angeschlossen zum Empfangen der an den Anschlüssen 0 und 1 des Daten-Cachespeichers 28 präsentierten Datenadressen. Die Komparatoren 108A108B sind angeschlossen zum Empfangen der Ergebnismarkierungen auf den Bussen 38b. Der Mux 114 ist mit dem Mux 112 verbunden. Der Mux 112 ist angeschlossen, um Ergebnisse auf dem Ergebnisbus 38DA zur Verfügung zu stellen, und auf ähnliche Weise ist der Mux 110 angeschlossen, um Ergebnisse auf dem Ergebnisbus DB zur Verfügung zu stellen. Die Ergebnisbusse 38DA38DB können ein Ausführungsbeispiel der in 2 gezeigten Ergebnisbusse 38D sein.
  • Allgemein betrachtet ist die Lade/Speicher-Einheit 26 konfiguriert, um einen Ladevorgang zu detektieren, der einen Speichervorgang trifft, für den die entsprechenden Speicherdaten nicht zur Verfügung stehen. In Reaktion auf die Detektierung eines derartigen Ladevorgangs weist die Lade/Speicher-Einheit 26 für den Ladevorgang einen Eintrag in der Abhängigkeitsverbindungsdatei 104 zu. Der Eintrag in der Abhängigkeitsverbindungsdatei speichert ein Ladekennzeichen (zum Beispiel die Befehlsmarkierung, die dem dem Ladevorgang entsprechenden Befehl von dem Umordnungspuffer 32 zugewiesen wurde), das den Ladevorgang identifiziert, der den Speichervorgang trifft, und ein Speicherdatenkennzeichen (zum Beispiel die Speicherdatenmarkierung), das die Quelle der Speicherdaten identifiziert, welche dem von dem Ladevorgang getroffenem Speichervorgang entsprechen. Die Lade/Speicher-Einheit 26 überwacht die Ergebnisbusse 38 auf die Speicherdatenmarkierungen, die in der Abhängigkeitsverbindungsdatei 104 gespeichert sind. Nach der Detektierung, dass Speicherdaten auf einem der Ergebnisbusse zur Verfügung gestellt werden, leitet die Lade/Speicher-Einheit 26 den Daten-Cachespeicher 28 an, die Daten von dem entsprechenden Ergebnisbus auf einen Ergebnisbus von dem Daten-Cachespeicher 28 weiterzuleiten. Des weiteren wird das Ladekennzeichen des entsprechenden Eintrags als die Ergebnismarkierung weiter geleitet. Auf diese Weise werden die Speicherdaten während des Taktzyklus, in dem die Speicherdaten zur Verfügung gestellt werden, direkt an jegliche Operationen weiter geleitet, die abhängig sind von den Ladedaten. Vorteilhafterweise kann die Latenzzeit vom Empfangen der Speicherdaten zum Weiterleiten der Speicherdaten an einen zuvor sondierenden Ladevorgang reduziert werden. In einem Ausführungsbeispiel kann die Latenzzeit auf Null Taktzyklen reduziert werden.
  • Wie oben beschrieben, werden die Ladeadressen mit Ladeadressen in dem LS2 Puffer 62 verglichen, um Ladevorgänge, die ältere Speichervorgänge treffen, zu detektieren. Entsprechend sind Komparatoren wie die Komparatoren 102 vorgesehen. Die Komparatoren 102 sind vorgesehen, um Adressen an jedem Anschluss des Daten-Cachespeichers 28 mit den in dem LS2 Puffer 62 gespeicherten Datenadressen zu vergleichen. Als ein Beispiel enthält ein Ausführungsbeispiel des Daten-Cachespeichers 28 zwei Anschlüsse, von denen jeder unterschiedliche Ladeadressen während eines Taktzyklus empfangen kann. Ein derartiges Ausführungsbeispiel kann zwei Komparatoren 102 für jeden Eintrag in dem LS2 Puffer enthalten. Wegen der Übersichtlichkeit der Zeichnung sind nicht alle der Komparatoren 102 dargestellt. Wenn eine Adresse an einem der Anschlüsse des Daten-Cachespeichers 28 eine Datenadresse in dem LS2 Puffer 62 trifft, gibt der entsprechende Komparator 102 ein Signal an die LS2 Steuerlogik 66 aus. Die LS2 Steuerlogik 66 bestimmt, ob der Anschluss für einen Ladevorgang verwendet wird, ob der getroffene Eintrag ein Speichervorgang ist und ob die entsprechenden Speicherdaten zur Verfügung stehen oder nicht.
  • Wenn detektiert ist, dass ein Ladevorgang einen Eintrag für einen Speichervorgang trifft und die entsprechenden Speicherdaten zur Verfügung stehen, wählt die LS2 Steuerlogik 66 die Speicherdaten unter Benutzung des Datenweiterleitung Mux 100 aus und stellt die Speicherdaten entweder dem LS2 Weiterleitungsdaten Mux 114 oder dem Anschluss 0 Daten Mux 110 zur Verfügung. Entsprechend kann der Datenweiterleitung Mux 100 einen Satz von unabhängigen Multiplexern aufweisen, einen für jeden Anschluss. Des weiteren gibt die LS2 Steuerlogik 66 ein entsprechendes Signal an den Daten-Cachespeicher 28 aus, damit der Daten-Cachespeicher 28 die weiter geleiteten Daten anstatt der Cachedaten auswählt, die von den Daten-Cachespeicher 28 für den treffenden Ladevorgang gelesen wurden.
  • Wenn detektiert ist, dass ein Ladevorgang einen Eintrag für einen Speichervorgang trifft und die entsprechenden Speicherdaten nicht zur Verfügung stehen, signalisiert die LS2 Steuerlogik 66 dem Daten-Cachespeicher 28, die Weiterleitung der Daten abzubrechen. Des weiteren signalisiert die LS2 Steuerlogik 66 der Steuerlogik für die Abhängigkeitsverbindungsdatei 106, dass ein Ladevorgang detektiert wurde, der einen Speichervorgang mit nicht verfügbaren Daten getroffen hat. Des weiteren liest die LS2 Steuerlogik 66 die Speicherdatenmarkierung von dem getroffenen Eintrag aus und stellt die Speicherdatenmarkierung der Abhängigkeitsverbindungsdatei 104 zur Verfügung (oder veranlasst alternativ den LS2 Puffer 62, die Speicherdatenmarkierung an die Abhängigkeitsverbindungsdatei 104 zu übermitteln). Falls mehr als ein Speichervorgang als von einem Ladevorgang getroffen detektiert wird, wählt die LS2 Steuerlogik 66 den Eintrag aus, für den das LIB Bit 96K gesetzt ist.
  • Die Abhängigkeitsverbindungsdatei 104 ist auch angeschlossen, um die Befehlsmarkierungen zu empfangen, die den Speicheroperationen entsprechen, welche den Daten-Cachespeicher 28 über die Anschlüsse 0 und 1 sondieren. In Reaktion auf das Signal von der LS2 Steuerlogik 66 weist die Steuerlogik für die Abhängigkeitsverbindungsdatei 106 einen Eintrag in der Abhängigkeitsverbindungsdatei 104 zu. Die Ladebefehlsmarkierung und die Speicherdatenmarkierung des von dem Ladevorgang getroffenen Speichervorgang werden in dem zugewiesenen Eintrag in der Abhängigkeitsverbindungsdatei 104 gespeichert.
  • Die Steuerlogik für die Abhängigkeitsverbindungsdatei 106 überwacht die Ergebnismarkierungen auf den Ergebnisbussen, um die in der Abhängigkeitsverbindungsdatei 104 gespeicherten Speicherdatenmarkierungen zu detektieren. Entsprechend sind die Komparatoren 108 (umfassend die Komparatoren 108A108B) vorgesehen. Im Allgemeinen kann die Anzahl der Komparatoren gleich der Anzahl der überwachten Ergebnismarkierungen multipliziert mit der Anzahl der Einträge in der Abhängigkeitsverbindungsdatei 104 sein. Wegen der Übersichtlichkeit der Zeichnung sind nicht alle Komparatoren 108 in 11 gezeigt. Die Komparatoren 108 signalisieren nach der Detektierung der Gleichheit zwischen der Speicherdatenmarkierung des entsprechenden Eintrags und einer Ergebnismarkierung auf den Ergebnismarkierungsbussen 38b der Steuerlogik für die Abhängigkeitsverbindungsdatei 106. Die Steuerlogik für die Abhängigkeitsverbindungsdatei veranlasst, dass die entsprechenden Ladebefehlsmarkierungen aus der Abhängigkeitsverbindungsdatei 104 gelesen werden und dem Mux 114 zur Verfügung gestellt werden. Des weiteren signalisiert die Steuerlogik für die Abhängigkeitsverbindungsdatei 106, basierend auf dem Ergebnisbus, von dem die mit der Speicherdatenmarkierung übereinstimmende Ergebnismarkierung empfangen wurde, dem Daten-Cachespeicher 28, die entsprechenden Daten (und die Ladebefehlsmarkierung) durch den LS2 Weiterleitungsdaten Mux 114 und durch den Anschluss 0 Mux 112 auf Anschluss 0 des Ergebnisbusses 38DA auszuwählen. Auf diese Weise werden die Speicherdaten als Ladedaten für den entsprechenden Ladevorgang weiter geleitet. Schließlich löscht die Steuerlogik für die Abhängigkeitsverbindungs datei 106 den Eintrag, für den die Daten von der Abhängigkeitsverbindungsdatei 104 weiter geleitet wurden, was es nachfolgenden Ladevorgängen erlaubt, diesem Eintrag zugewiesen zu werden.
  • In einem Ausführungsbeispiel wird die Abhängigkeitsverbindungsdatei 104 verwendet, um Ladedaten weiter zu leiten, wenn die folgenden Bedingungen erfüllt sind: (i) die Ladeadresse und die Speicheradresse stimmen exakt überein (das heißt bestimmen das gleiche Byte); und (ii) die Speichergröße ist gleich oder größer als die Ladegröße (das heißt der Speichervorgang aktualisiert jedes Byte, auf das von dem Ladevorgang zugegriffen wird). Andere Ausführungsbeispiele können je nach Wunsch mehr oder weniger Beschränkungen verwenden.
  • In dem vorliegenden Ausführungsbeispiel verwendet die Lade/Speicher-Einheit 26 den Anschluss 0 des Daten-Cachespeicher 28, um die in der Abhängigkeitsverbindungsdatei 104 repräsentierten Ladedaten für einen Ladevorgang weiterzuleiten. Entsprechend kann die Steuerlogik für die Abhängigkeitsverbindungsdatei 106, nach der Detektierung, dass die Ladedaten weiter geleitet werden, der LS1 Steuerlogik 64 und der LS2 Steuerlogik 66 signalisieren. Die Steuerlogiken 64 und 66 können die Auswahl einer Operation für den Anschluss 0 verhindern und können den Anschluss 0 der Pipeline anhalten, um die Verwendung des Anschlusses 0 des Ergebnisbusses 38DA durch die Abhängigkeitsverbindungsdatei 104 zu erlauben.
  • Wenn die LS2 Steuerlogik 66 fest stellt, dass ein Speichervorgang auf einem der Anschlüsse 0 oder 1 des Daten-Cachespeichers einen älteren Speichervorgang trifft, wird das LIB Bit für den älteren Speichervorgang zurück gesetzt. Das LIB Bit für den Speichervorgang auf dem Anschluss des Daten-Cachespeichers wird gesetzt sobald der Eintrag in dem LS2 Puffer 62 gespeichert wird. Schließlich wird, falls die LS2 Steuerlogik 66 bestimmt, dass ein Speichervorgang einen älteren Ladevorgang trifft, der von den Komparatoren 102 detektierte Treffer ignoriert.
  • Es ist zu bemerken, dass mehr als eine Speicherdatenmarkierung innerhalb der Abhängigkeitsverbindungsdatei 104 in einem Taktzyklus als weiter geleitet werdend detektiert werden kann. In dem vorliegenden Ausführungsbeispiel kann die Steuerlogik für die Abhängigkeitsverbindungsdatei 106 einen Eintrag zum Weiterleiten auswählen und die anderen Einträge ungültig machen. Nachfolgende erneute Sondierungen durch die Ladevorgänge, die den ungültig gemachten Einträgen entsprechen, können veranlassen, dass die entsprechenden Daten von dem LS2 Puffer 62 weiter geleitet werden. Alternativ kann ein Multiplexer ähnlich wie der Mux 114 auch für den Anschluss vorgesehen werden, um das Weiterleiten eines zweiten Ladevorgangs von der Abhängigkeitsverbindungsdatei 104 zu erlauben. Bei noch einer weiteren Alternative kann die Steuerlogik für die Abhängigkeitsverbindungsdatei 106 konfiguriert sein, um die Speicherdaten für die zusätzlichen Einträge in der Abhängigkeitsverbindungsdatei 104 einzulesen und die Daten während nachfolgender Taktzyklen weiterzugeben.
  • Bei dem vorliegenden Ausführungsbeispiel ist die Abhängigkeitsverbindungsdatei 104 eine Verbesserung der Leistungsfähigkeit, aber verdrängt nicht den Mechanismus des erneuten Sondierens für das Weiterleiten von Daten. Entsprechend kann die Steuerlogik für die Abhängigkeitsverbindungsdatei 106, in Fällen, in denen die Abhängigkeitsverbindungsdatei 104 bei der Detektierung eines Ladevorgangs, der einen Speichervorgang mit nicht verfügbaren Daten trifft, voll ist, keinen Eintrag zuweisen. Während jegliche gewünschte Anzahl von Einträgen in der Abhängigkeitsverbindungsdatei verwendet werden kann, sind in einem Ausführungsbeispiel 4 Einträge vorgesehen. Während eines nachfolgenden erneuten Sondierens kann ein Eintrag zugewiesen werden, wenn er verfügbar ist, auf dieselbe Weise, wie Einträge bei einer anfänglichen Sondierung des LS1 Puffers 60 zugewiesen werden. Des weiteren nehmen Ladevorgänge, für welche Einträge in der Abhängigkeitsverbindungsdatei zugewiesen sind, in dem vorliegenden Ausführungsbeispiel immer noch an der LS2 Abtastung und erneuten Sondierung teil. Nachfolgend auf die Weiterleitung von Ladedaten für einen Ladevorgang über die Abhängigkeitsverbindungsdatei 104, kann der Ladevorgang den Daten-Cachespeicher 28 erneut sondieren und die Ladedaten auf die oben beschriebene Art und Weise von dem LS2 Puffer 62 weiter leiten lassen. Dieses zusätzliche Weiterleiten kann harmlos sein, da die vorherige Weiterleitung über die Abhängigkeitsverbindungsdatei 104 die Abhängigkeiten des Ladevorgangs befriedigt. Es ist weiter zu bemerken, dass wenn eine erneute Sondierung von einem Ladevorgang, für den ein Eintrag in der Abhängigkeitsverbindungsdatei bereits zugewiesen ist, durchgeführt wird, die Steuerlogik für die Abhängigkeitsverbindungsdatei 106 die Zuweisung eines weiteren Eintrags für den Ladevorgang unterbindet (zum Beispiel durch Vergleichen des Ladebefehlsmarkierung mit den in der Abhängigkeitsverbindungsdatei 104 gespeicherten Markierungen).
  • In noch einem anderen Ausführungsbeispiel kann die Abhängigkeitsverbin- dungsdatei 104 verwendet werden, um in allen Fällen, in denen Ladevorgänge Speichervorgänge ohne verfügbare Daten treffen, Daten weiterzuleiten. In einem derartigen Ausführungsbeispiel wird, falls ein Ladevorgang einen Speichervorgang ohne verfügbare Daten trifft und die Abhängigkeitsverbindungsdatei 104 voll ist, der Ladevorgang für die erneute Sondierung ausgewählt, bis ein Eintrag verfügbar wird. Jedoch kann nach der Zuweisung eines Eintrags in der Abhängigkeitsverbindungsdatei der Ladevorgang an der erneuten Sondierung gehindert werden und die Speicherdaten werden unter Benutzung der Abhängigkeitsverbindungsdatei 104 weiter geleitet.
  • Es ist weiter zu bemerken, dass, während das vorliegende Ausführungsbeispiel zur Benutzung mit dem LS2 Puffer 62 gezeigt ist, andere Ausführungsbeispiele betrachtet werden können, in denen die Abhängigkeitsverbindungsdatei 104 in einem Ausführungsbeispiel der Lade/Speicher-Einheit 26 verwendet wird, das eine konventionelle Speicherwarteschlange hat, die lediglich Speicher-Speicheroperationen speichert, welche den Daten-Cachespeicher 28 sondiert haben.
  • Es ist zu bemerken, dass, während ein Ausführungsbeispiel der Lade/Speicher-Einheit 26, das die oben beschriebene Abhängigkeitsverbindungsdatei verwendet, die Latenzzeit zwischen den Speicherdaten und der Ladeweiterleitung auf Null Taktzyklen reduziert, andere betrachtete Ausführungsbeispiele die Speicherdaten während eines nachfolgenden Taktzyklus einlesen und weiter leiten können. Während die Latenzzeit in einem derartigen Ausführungsbeispiel ein Taktzyklus sein würde, könnten Probleme mit dem zeitlichen Ablauf für einen derartigen Ansatz erleichtert werden. Noch andere Ausführungsbeispiele können zusätzliche Taktzyklen an Latenzzeit von den Speicherdaten zu der Ladeweiterleitung einrichten unter Verwendung der beschriebenen Abhängigkeitsverbindungsdatei. Es ist zu bemerken, dass die Abhängigkeitsverbindungsdatei 104 als ein Puffer angesehen werden kann, der eine Vielzahl von Einträgen hat, von denen jeder Eintrag wie oben beschrieben die Ladebefehlsmarkierung und die entsprechende Speicherdatenmarkierung speichern kann.
  • Snoop Resynchronisierung zum Ordnen von Ladevorgängen
  • Es wird nun auf 12 Bezug genommen, in der ein Zeitablaufdiagramm gezeigt ist, das beispielhafte von einem Paar von Prozessoren (Prozessor 1 und Prozessor 2) ausgeführte Ladevorgänge und Speichervorgänge darstellt. Das Zeitablaufdiagramm stellt ein Problem dar, das in Prozessoren auftreten kann, welche: (i) eine Befehlssatzarchitektur verwenden, die eine strenge Ordnung des Speichers erfordert; und (ii) es Ladevorgängen, die treffen, erlauben fortzufahren bevor ältere Ladevorgänge, die fehl treffen, von dem Speicher bedient werden.
  • Über dem Zeitablaufdiagramm in 12 ist eine Liste der Reihenfolge des Programms der beispielhaften Speicheroperationen gezeigt, wobei ältere Operationen vor jüngeren Operationen aufgeführt sind. Entsprechend führt der Prozessor 1 einen Speichervorgang an die Adresse A1 gefolgt von einem Speichervorgang an die Adresse A2 aus (in Übereinstimmung mit der Reihenfolge des Programms), während Prozessor 2 einen Ladevorgang von der Adresse A2 gefolgt von einer bedingten Verzweigung basierend auf dem in A2 gespeicherten Wert und einen Ladevorgang von der Adresse A1 durchführt. Die von dem Prozessor 2 ausgeführte Sequenz kann zum Beispiel benutzt werden, wenn die Adresse A1 eine Speicherstelle angibt, die als ein Signal für die Weitergabe der Kontrolle einer von der Adresse A2 identifizierten Speicherstelle von einem Prozessor zu dem anderen Prozessor dient. Allgemein überprüft ein Prozessor das Signal, um festzustellen, ob ein anderer Prozessor die geschützte Speicherstelle(n) kontrolliert, bevor die geschützte Speicherstelle(n) gelesen wird oder die Kontrolle über sie übernommen wird. Wenn zum Beispiel das Signal nicht Null ist kann die geschützte Speicherstelle(n) von einem anderen Prozessor kontrolliert werden. Der lesende Prozessor kann den Zugriff auf die geschützte Speicherstelle(n) verhindern (zum Beispiel über die bedingte Verzweigung) bis das Signal auf einen Null Wert aktualisiert wird. Die Verwendung des Signals für den Prozessor 2 in der gezeigten Weise kann, zusammen mit dem Vorhandensein einer strengen Ordnung des Speichers, garantieren, dass der Ladevorgang von der Adresse A2 (ausgeführt von dem Prozessor 2) die von dem Prozessor 1 durchgeführte Aktualisierung von A1 empfängt.
  • Im Allgemeinen erfordert die strenge Ordnung des Speichers, dass von einem Prozessor ausgeführte Speicheroperationen von anderen Prozessoren detektiert werden, wie sie in der Reihenfolge des Programms auftreten. Das Zeitablaufdiagramm in 12 stellt einen Fall dar, in dem die Reihenfolge der Speichervorgänge durch den Prozessor 1 sich scheinbar aus der Reihe ereignet, zu dem Befehlsstrom, der von dem Prozessor 2 ausgeführt wird, durch die Erlaubnis für die Ladevorgänge, Daten außer der Reihe zu empfangen. Wie das Zeitablaufdiagramm zeigt, kann der Ladevorgang von A1 in dem Prozessor 2 als ein Treffer in dem Daten-Cachespeicher vor dem Speichervorgang zu A1 durch den Prozessor 1 abgeschlossen werden. Nachfolgend kann der Speichervorgang zu A2 von dem Prozessor 1 ausgeführt werden, gefolgt von dem Ladevorgang von A2 durch den Prozessor 2. In der Folge der Ereignisse würde der Ladevorgang von A2 durch den Prozessor 2 den aktualisierten Wert in Übereinstimmung mit dem Speichervorgang zu A2 empfangen, aber der Ladevorgang von A1 (der dem Ladevorgang von A2 in der Reihenfolge des Programms folgt) würde nicht den aktualisierten Wert in Übereinstimmung mit dem Speichervorgang zu A1 empfangen. Wenn der Speichervorgang zu A2 ein Wert ist, der es der bedingten Verzweigung nicht erlaubt, genommen zu werden, würden Regeln für eine strenge Ordnung des Speichers verletzt werden.
  • Wie oben beschrieben führt ein Ausführungsbeispiel einer Lade/Speicher-Einheit 26 Speichervorgänge in der Reihenfolge des Programms aus (durch Aktualisieren des Daten-Cachespeichers 28 oder zur Verfügung stellen der Speichervorgänge an die Businterfaceeinheit 37 auf das Zurückziehen der Speicher-Speicheroperationen). Ladevorgänge andererseits können im allgemeinen vollständig außer der Reihe sein. Genauer gesagt sondieren Ladevorgänge den Daten-Cachespeicher 28 in der Reihenfolge des Programms, aber ein Ladevorgang, der trifft (entweder einen älteren Speichervorgang oder in dem Daten-Cachespeicher 28) kann Daten weiter leiten bevor der ältere nicht treffende Ladevorgang bedient wird und nicht treffende Ladevorgänge können auch außer der Reihe bedient werden. Entsprechend kann der Prozessor 10 eine Verletzung der strengen Ordnung des Speichers erfahren, wenn der Ladevorgang von A2 nicht trifft und der Ladevorgang von A1 trifft (oder nicht trifft und vor dem Ladevorgang von A2 bedient wird). Allgemeiner kann der Prozessor 10 eine Verletzung der strengen Ordnung des Speichers erfahren, wenn ein Ladetreffer ein Snoop ist, der von einer Operation vom Aktualisierungstyp getroffen wird, bevor ein älterer Ladefehltreffer bedient wird.
  • Es wird nun auf 13 Bezug genommen, in der ein Ausführungsbeispiel eines Bereichs von einem Ausführungsbeispiel der Lade/Speicher-Einheit 26 gezeigt ist, das eine strenge Ordnung des Speichers korrekt behandeln kann. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. Der in 13 dargestellte Bereich der Lade/Speicher-Einheit 26 umfasst den LS2 Puffer 62, die LS2 Steuerlogik 66, den Resondierungs Mux 76 und eine Vielzahl von Komparatoren 120A120B. Die Komparatoren 120A120B sind verbunden mit dem LS2 Puffer 62 und zum Empfangen von einer Snoopadresse, die einer Snoopanforderung auf einem Snoopadressbus 52A (Teil des Snoop-Interfaces 52) entspricht. Des weiteren sind die Komparatoren 120A120B an die LS2 Steuerlogik 66 angeschlossen. Die LS2 Steuerlogik 66 ist mit dem LS2 Puffer 62 und dem Resondierungs Mux 70 verbunden und ist angeschlossen zum Empfangen eines Snooptyps auf einem SnpType Bus 52B (Teil des Snoop-Interfaces 52) und einer Füllmarkierung auf dem Füllmarkierungsbus 84 von der Businterfaceeinheit 37. Die LS2 Steuerlogik 66 ist ferner mit einer Resync Leitung 122 zu dem Umordnungspuffer 32 verbunden.
  • Allgemein betrachtet ist die Lade/Speicher-Einheit 26 konfiguriert, um Lade-Speicheroperationen in dem LS2 Puffer 62 zu speichern unabhängig von dem Treffer/Fehltreffer Status der Speicheroperationen in dem Daten-Cachespeicher. Entsprechend ist die LS2 Steuerlogik 66 konfiguriert, um Speicheroperationen in dem LS2 Puffer 52 im Hinblick auf Snoopanforderungen von der Businterfaceeinheit 37 einem Snoop zu unterziehen. Wenn ein Ladevorgang, der ein Daten-Cachespeicher-Treffer ist (ein "Ladetreffer" für die Besprechung der 1216), vor einem Snoop getroffen wird durch eine Snoopungültigmachungsanforderung (zum Beispiel wegen eines Speichervorgangs an die Adresse durch einen an deren Prozessor), tastet die LS2 Steuerlogik 66 die älteren Speicheroperationen in dem LS2 Puffer 62 ab. Wenn beliebige ältere Lade-Speicheroperationen in dem LS2 Puffer 62 Daten-Cachespeicher-Fehltreffer sind (ein "Ladefehltreffer" für die Besprechung der 1216), wird ein Hinweis auf Synchronisierung für diese ältere Lade-Speicheroperation gesetzt. Nachfolgend wird der ältere Ladefehltreffer abgeschlossen. Die LS2 Steuerlogik 66 detektiert den Hinweis auf Synchronisierung während der Beendigung des Ladefehltreffers und signalisiert dem Umordnungspuffer 32. Der Umordnungspuffer 32 reagiert auf das Signal durch die Synchronisierung des Befehls, welcher dem beendeten Ladefehltreffer entspricht. Vorteilhafterweise wird der Ladetreffer, der außer der Reihe ausgeführt wurde und der für schuldig erklärt wurde, die strenge Ordnung des Speichers zu verletzen, verworfen und i erneut ausgeführt. Bei der erneuten Ausführung kann der Ladetreffer den aktualisierten Wert für die zugegriffene Speicherstelle empfangen und eine strenge Ordnung kann erreicht werden.
  • Im Allgemeinen ist eine "Snoopungültigmachungsanforderung" ein Typ einer Snoopanforderung, der die einem Snoop unterworfene Cachezeile (falls gefunden) veranlasst, ungültig gemacht zu werden. Auf ähnliche Weise ist eine Snoopungültigmachungsoperation eine Snoopoperation, die die einem Snoop unterworfene Cachezeile (falls gefunden) veranlasst, ungültig gemacht zu werden. Neben anderen Gründen kann eine Snoopungültigmachungsoperation eingeleitet werden, wenn ein Speichervorgang auf die einem Snoop unterworfene Cachezeile von einem anderen Prozessor ausgeführt wird, um es dem Prozessor zu erlauben, die richtigen Besitzrechte über die Cachezeile einzurichten bevor der Speichervorgang durchgeführt wird. Der Ausdruck "Besitzrechte" bezieht sich auf den Grad des Zugriffs auf eine Cachezeile, der einem bestimmten Prozessor gewährt wird, der die Cachezeile speichert, und auf den Grad der Verantwortlichkeit von diesem bestimmten Prozessor für die Beibehaltung der Kohärenz von dieser Cachezeile. Die Besitzrechte können bestimmt werden sowohl durch die Besitzrechte, die von anderen Prozessoren aufrecht erhalten werden, als auch durch Betrachtungen auf Systemebene, und sind generell einer von mehreren Zuständen, die in Übereinstimmung mit einem Kohärenzschema definiert sind. Zum Beispiel definiert das MOESI Kohärenzschema den modifizierten Zustand (in dem der Prozessor die exklusive Benutzung der Cachezeile hat und sie im Hinblick auf die in dem Hauptspeicher gespeicherten Daten modifiziert hat), den besitzenden Zustand (in dem der Prozessor verantwortlich für die Beibehaltung der Kohärenz von dieser Cachezeile ist, aber die von dem Prozessor gemachten Veränderungen mit zumindest einem anderen Prozessor geteilt hat), dem exklusiven Zustand (in dem der Prozessor die exklusive Benutzung der Cachezeile hat, aber sie nicht modifiziert hat), den geteilten Zustand (in dem zwei oder mehrere Prozessoren geteilte Benutzung der Cachezeile haben) und den ungültigen Zustand (in dem der Prozessor keine Benutzung der Cachezeile hat). Weitere Kohärenzschemata (zum Beispiel wie MESI, MOSI usw.) Schemata sind ebenso möglich.
  • Wie hier verwendet bezieht sich der Ausdruck "Synchronisierung" auf die Wiederherstellung des spekulativen Zustands des Prozessors zu einem Zustand, der konsistent ist mit einem bestimmten Punkt in der ausgeführten Befehlssequenz. Genauer gesagt berücksichtigt der spekulative Zustand des Prozessors nicht die Ausführung jeglichen Befehls nach dem bestimmten Punkt. Befehle können beginnend an dem bestimmten Punkt nachfolgend der Synchronisierung geholt werden. Im Allgemeinen kann die Synchronisierung durchgeführt werden, um die Auswirkungen einer nicht korrekten spekulativen Ausführung zu korrigieren.
  • In einem Ausführungsbeispiel weist der Hinweis auf Synchronisierung in dem LS2 Puffer 62 ein Snoop Resync Bit 96O auf. Das Snoop Resync Bit 96O kann gesetzt werden, um anzuzeigen, dass eine Synchronisierung durchgeführt werden soll sobald der entsprechende Ladevorgang beendet ist. Entsprechend tastet die LS2 Steuerlogik 66, auf die Detektierung eines Snooptreffers für eine Snoopungültigmachungsanforderung auf einem Ladetreffer in dem LS2 Puffer 62, den LS2 Puffer 62 nach Einträgen von älteren Ladefehltreffern ab und setzt das entsprechende Snoop Resync Bit 96O. Alternativ kann, je nach Wunsch, das Bit am Anfang gesetzt werden und gelöscht werden, um eine Synchronisierung anzuzeigen. Ladefehltreffer können angezeigt werden, zum Beispiel dadurch, dass das Fehltreffer Bit 96M in dem entsprechenden Eintrag des LS2 Puffers gesetzt wird.
  • Die an die Lade/Speicher-Einheit 26 beförderten Snoopanforderungen umfassen eine auf dem Snoopadressbus 52A zur Verfügung gestellte Snoopadresse und einen auf dem SnpType Bus 52B beförderten Snooptyp. Die Snoopadresse wird mittels der Komparatoren 120 mit den in jedem Eintrag des LS2 Puffers 62 gespeicherten Datenadressen verglichen. Entsprechend kann ein Komparator 120 in jedem Eintrag des LS2 Puffers enthalten sein. Die Komparatoren 120A120B sind als beispielhafte Komparatoren dargestellt, um die Übersichtlichkeit der Zeichnung zu erhalten. Wenn der Komparator 120 detektiert, dass die Snoopadresse in derselben Cachezeile ist wie die Datenadresse der entsprechenden Speicheroperation, signalisiert der Komparator der LS2 Steuerlogik 66. Die LS2 Steuerlogik 66 untersucht den identifizierten Eintrag oder die Einträge und den von der Businterfaceeinheit 37 zur Verfügung gestellten Snooptyp. Wenn der Snooptyp ungültig machen ist und der identifizierte Eintrag ein Treffer ist, tastet die LS2 Steuerlogik 66 die älteren Einträge des LS2 Puffers ab und setzt die entsprechenden Snoop Resync Bits 96O, falls irgendwelche älteren Ladefehltreffer gefunden werden. Die LS2 Steuerlogik 66 kann, wie gewünscht, weitere Snoopoperationen unter Benutzung des Ausgangs des Komparators 120 durchführen. Zum Beispiel kann ein Speichervorgang, der während seiner anfänglichen Sondierung den Daten-Cachespeicher 28 trifft, als ein Fehltreffer in Reaktion auf eine Sondierung angezeigt werden, so dass der Speichervorgang erneut sondiert wird, bevor versucht wird, Daten in den Cachespeicher zu übertragen.
  • Die Einträge der älteren Ladefehltreffer werden in dem vorliegenden Ausführungsbeispiel nachfolgend in Reaktion auf eine Füllmarkierung von der Businterfaceeinheit 37, die mit der dem älteren Ladefehltreffer zugewiesenen MAB Markierung überein stimmt, abgeschlossen. Im Allgemeinen wird eine Speicheroperation als „abgeschlossen" bezeichnet, wenn der der Speicheroperation entsprechende Status an den Umordnungspuffer 32 zurück gegeben worden ist. Der Umordnungspuffer 32 ist konfiguriert, um die Speicheroperation in Übereinstimmung mit dem zurück gegebenen Status (der Synchronisierung, Ausnahme, usw. anzeigen kann) zurückzuziehen. Eine Synchronisierung kann angezeigt werden durch die Ausgabe des Resync Signals auf der Resync Leitung 122, während die Daten für die entsprechende Lade-Speicheroperation weiter geleitet werden (zum Beispiel während der Stufe Cachespeicherzugriff in dem oben gezeigten Ausführungsbeispiel der Pipeline). Weitere Signalleitungen können wie gewünscht zur Meldung anderer Zustände verwendet werden.
  • Der Umordnungspuffer 32 kann auf das Resync Signal auf eine Weise ähnlich wie bei Verzweigungsfehlvorhersagen reagieren: durch die Verwerfung der Befehle, die dem dem Ladevorgang entsprechenden Befehl folgen, für den das Resync Signal ausgegeben wird, und das erneute Holen der Befehle. Da der Ladetreffer, der von einem Snoop getroffen wurde, um die Synchronisierung zu veranlassen, in der Reihenfolge des Programms nachfolgend ist zu dem Ladefehltreffer, wird der Ladetreffer verworfen, erneut geholt und erneut ausgeführt. Es ist zu bemerken, dass Speicheroperationen in dem LS1 Puffer 60 und in dem LS2 Puffer 62, welche verworfenen Befehlen entsprechen, ge löscht werden. Jedes geeignete Schema zum Verwerfen kann von dem Umordnungspuffer 32 verwendet werden. Zum Beispiel kann der Umordnungspuffer 32 die Markierung des Befehls senden, für den die nachfolgenden Befehle zu verwerten sind, und die Lade/Speicher-Einheit 26 (und andere Bereiche des Prozessors 10) kann die entsprechenden Befehle und Speicheroperationen verwerfen. Alternativ kann der Umordnungspuffer 32 unter Benutzung des Rückzugs-Interfaces 54 mit der Lade/Speicher-Einheit 26 kommunizieren, um zu verwerfende Speicheroperationen zu identifizieren. Die Lade/Speicher-Einheit 26 kann zufällige Daten für zu verwertende Ladevorgänge weiter leiten und die abhängigen Befehle können ausgeführt werden und Ergebnisse an den Umordnungspuffer 32 zurück geben, der dann die Befehle verwirft.
  • Nach der erneuten Ausführung wird der korrekte Wert für den Ladevorgang von dem Speicher gelesen (da die Snoopungültigmachungsanforderung ebenso an den Daten-Cachespeicher 28 übermittelt wird und veranlasst, dass die Cachezeile, auf die von dem Ladevorgang zugegriffen wurde, ungültig gemacht wird). Auf diese Weise wird die strenge Ordnung des Speichers beachtet, während es Ladetreffern generell erlaubt wird, Ladefehltreffern voranzugehen, wo die strenge Ordnung des Speichers nicht verletzt wird.
  • Es ist zu bemerken, dass der Ausdruck "Cachezeile" hier verwendet worden ist, um die Schrittgröße zu beschreiben, auf der die Kohärenz beibehalten wird. Jedoch können andere Schrittgrößen entsprechend einem Bereich von einer Cachezeile oder mehreren Cachezeilen verwendet werden. Entsprechend kann, je nach Wunsch, die Kohärenz auf Basis eines "Cacheblocks", der ein Teil einer Cachezeile, eine Cachezeile oder mehrere Cachezeilen sein kann, beibehalten werden.
  • Es wird nun auf 14 Bezug genommen, in der ein Ablaufdiagramm gezeigt ist, das Operationen darstellt, die von dem in 13 gezeigten Ausführungsbeispiel der LS2 Steuerlogik 66 in Reaktion auf eine Snoopoperation durchgeführt werden. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. Die LS2 Steuerlogik 66 stellt fest, ob eine Snoopanforderung einen Lade vorgang trifft und ob der Snooptyp ungültig machen ist (Entscheidungsblock 126). Falls die Snoopanforderung einen Ladetreffer trifft und der Snooptyp ungültig machen ist, tastet die LS2 Steuerlogik 66 die älteren LS2 Einträge ab und setzt das Snoop Resync Bit für jeden Ladefehltreffer (Schritt 128). Umgekehrt, wenn die Snoopanforderung keinen Ladetreffer trifft oder der Snooptyp nicht ungültig machen ist, unternimmt die LS2 Steuerlogik 66 nichts. Optional können weitere Snoopaktivitäten in Verbindung mit der Beibehaltung der Kohärenz je nach Wunsch durchgeführt werden.
  • In einem alternativen Ausführungsbeispiel kann die LS2 Steuerlogik 66 das Snoop Resync Bit für jeden Ladetreffer setzen, der von einem Snoop getroffen wird. Wenn jeder Ladefehltreffer erneut sondiert wird, kann die LS2 Steuerlogik 66 den LS2 Puffer 62 abtasten, um festzustellen, ob irgendwelche gültigen Einträge das Snoop Resync Bit gesetzt haben. Wenn zumindest ein Snoop Resync Bit gesetzt ist, kann die LS2 Steuerlogik 66 den Resync Zustand für den Ladefehltreffer zurück geben.
  • Es wird nun auf 15 Bezug genommen, in der ein Ablaufdiagramm gezeigt ist, das Operationen darstellt, die von dem in 13 gezeigten Ausführungsbeispiel der LS2 Steuerlogik 66 durchgeführt werden, um eine Ladefehltrefferoperation abzuschließen. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. Die LS2 Steuerlogik 66 stellt fest, ob ein Ladefehltreffer in der Pipelinestufe Datenweiterleitung der Pipeline ist (Entscheidungsblock 130). Zum Beispiel ist in dem vorliegenden Ausführungsbeispiel die Pipelinestufe Datenweiterleitung in der Stufe Cachespeicherzugriff. Die LS2 Steuerlogik 66 kann feststellen, ob ein Ladefehltreffer in der Pipelinestufe Datenweiterleitung ist, durch Untersuchung seines Pipe Feldes 96I zum Beispiel. Wenn kein Ladefehltreffer in der Pipelinestufe Datenweiterleitung ist, dann wird keine Aktion im Hinblick auf das Resync Signal unternommen. Wenn andererseits ein Ladefehltreffer in der Pipelinestufe Datenweiterleitung ist, untersucht die LS2 Steuerlogik 66 das entsprechende Snoop Resync Bit 96O (Schritt 132). Wenn das entsprechende Snoop Resync Bit 96O gesetzt ist, dann gibt die LS2 Steuerlogik 66 das Resync Signal auf der Reysnc Leitung 122 aus, um den Resync Zustand zurückzugeben (Schritt 134). Wenn andererseits das entsprechende Snoop Resync Bit 96O nicht gesetzt ist, dann nimmt die LS2 Steuerlogik 66 das Resync Signal zurück, um den normalen Zustand zurückzugeben (Schritt 136). Es ist zu bemerken, dass andere Zustände, wie zum Beispiel Ausnahmen, von anderen Logiken in dem normalen Zustand zurück gegeben werden können.
  • Es wird nun auf 16 Bezug genommen, in der ein Beispiel der Operation von einem Ausführungsbeispiel des LS2 Puffers 62 für Prozessor 2 in dem Zeitablaufdiagramm von 12 gezeigt ist. Auswahlbereiche der Einträge des LS2 Puffers sind dargestellt, einschließlich des Adress Feldes 96C (Adr in 16), Fehltreffer Bit 96 M (Fehl in 16) und Snoop Resync Bit 96O (SR in 16).
  • Bei dem Bezugszeichen 140 ist der LS2 Puffer 62 gezeigt, nach dem Detektieren des Ladefehltreffers für die Adresse A2 und des Ladetreffers für die Adresse A1. Entsprechend hat ein Eintrag des LS2 Puffers, der die Adresse A2 enthält, das Fehltreffer Bit gesetzt und das Snoop Resync Bit frei.
  • Nach dem Empfangen der Snoopungültigmachungsanforderung, die dem Speichervorgang des Prozessors 1 an die Adresse A1 entspricht, stellt das Bezugszeichen 142 den Zustand des LS2 Puffers 62 dar. Das Snoop Resync Bit für den die Adresse A2 enthaltenden Eintrag wurde gesetzt, weil der Ladevorgang für die Adresse A2 älter ist als der Ladetreffer für die Adresse A1 und der Ladevorgang für die Adresse A2 ein Fehltreffer ist.
  • Nachfolgend zu der Snoopungültigmachungsanforderung gibt die Businterfaceeinheit 37 die Füllmarkierung, welche mit der MAB Markierung für den Ladevorgang überein stimmt, an die Adresse A2 zurück. Die Lade/Speicher-Einheit 26 gibt den Resync Zustand an den Umordnungspuffer 32 zum Laden an die Adresse A2 zurück und der Prozessor 2 synchronisiert. Die Synchronisierung veranlasst, dass der Eintrag für die Adresse A1 verworfen wird. Mit dem Bezugszeichen 144 ist der Zustand des LS2 Puffers 62 nachfolgend zu der Synchronisierung (und dem Zurückziehen des Befehls, der dem Ladevorgang an die Adresse A2 entspricht) dargestellt. Der LS2 Puffer 62 ist bei dem Bezugszeichen 144 leer.
  • Der Prozessor 2 holt die verworfenen Befehle, einschließlich des Ladevorgangs an die Adresse A1. Mit dem Bezugszeichen 146 ist der Zustand des LS2 Puffers 62 nach der erneuten Sondierung für den Ladevorgang an die Adresse A1 gezeigt. Entsprechend ist das Fehltreffer Bit für den Ladevorgang an die Adresse A1 gesetzt. Schließlich wird die Füllmarkierung, welche mit der MAB Markierung für den Ladevorgang an die Adresse A1 überein stimmt, von der Businterfaceeinheit 37 zurück gegeben, zusammen mit den Daten, welche die Aktualisierung des Prozessors 1 an die Adresse A1 berücksichtigen. Die korrekten Daten werden in dem Prozessor 2 weiter geleitet. Nachfolgend zu dem Zurückziehen des Ladevorgangs an die Adresse A1 ist der LS2 Puffer 62 leer (Bezugszeichen 148).
  • Selbstmodifizierende Codeüberprüfung
  • Es wird nun auf 17 Bezug genommen, in der ein Blockdiagramm eines Ausführungsbeispiels eines Bereichs von einem Ausführungsbeispiel der Lade/Speicher-Einheit 26 gezeigt ist. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. Das in 17 gezeigt Ausführungsbeispiel ist konfiguriert, um selbstmodifizierende Code (SMC) Überprüfungen für Speicher-Speicheroperationen einzuleiten. In anderen Worten ist das gezeigte Ausführungsbeispiel konfiguriert, um eine Überprüfung einzuleiten, um festzustellen, ob eine Speicher-Speicheroperation Speicherstellen verändert, die als Befehle geholt worden sind und in der Verarbeitung innerhalb des Prozessors 10 sind. Das Ausführungsbeispiel von 17 umfasst den LS2 Puffer 62, die LS2 Steuerlogik 66 und eine Vielzahl von Komparatoren 150A150B. Die Komparatoren 150A150B sind angeschlossen, um Rückzugsmarkierungen über einen Rückzugsmarkierungsbus 54A (Teil des Rückzugs-Interface 54) von dem Umordnungspuffer 32 zu empfangen, und sind mit dem LS2 Puffer 62 und der LS2 Steuerlogik 66 verbunden. Die LS2 Steuerlogik 66 ist des weite ren verbunden mit dem LS2 Puffer 62 und der Resync Leitung 122, einer SMC Überprüfungsleitung 152, einem Adressbus 154, einer SMC Ergebnisleitung 156 und einer I-Strom UC Leitung 158. Die Resync Leitung 122 ist mit dem Umordnungspuffer 32 verbunden und die andere Verbindung ist mit dem Befehls-Cachespeicher 16 verbunden.
  • Im Allgemeinen versucht die hier beschriebene Vorrichtung, die innerhalb des Prozessors 10 durchgeführten expliziten SMC Überprüfungen zu minimieren. SMC Überprüfungen bringen die Übermittlung der Speicheradressen an Ziele innerhalb des Prozessors 10 mit sich, an denen Informationen hinsichtlich der Befehle, die innerhalb des Prozessors 10 in der Verarbeitung sind, gespeichert sind. Die Speicheradresse wird mit den Befehlsadressen der in der Verarbeitung befindlichen Befehle verglichen, um festzustellen, ob der Speichervorgang irgend einen der in der Verarbeitung befindlichen Befehle aktualisiert. Falls festgestellt wird, dass in der Verarbeitung befindliche Befehle aktualisiert worden sind, werden korrigierende Maßnahmen ergriffen (zum Beispiel die Verwerfung der Befehle, die in Reihenfolge des Programms dem dem Speichervorgang entsprechenden Befehl folgen und erneute Holung dieser Befehle). Die Aktualisierung des Cachespeichers und die Zurückgabe des Zustands für den Speichervorgang wird verzögert bis die Überprüfung abgeschlossen ist, was einige Taktzyklen in Anspruch nehmen kann.
  • Genauer gesagt versucht die Vorrichtung, SMC Überprüfungen für Speichervorgänge zu minimieren, die nicht zwischen gespeichert werden können. SMC Überprüfungen für Speichervorgänge, die zwischen gespeichert werden können, können zum Beispiel durch Beibehaltung des Ausschlusses zwischen dem Daten-Cachespeicher 28 und dem Befehls-Cachespeicher 16 minimiert werden. Anders ausgedrückt, ist es einer bestimmten Cachezeile erlaubt, zu jedem gegebenem Zeitpunkt in maximal einem der Daten-Cachespeicher 28 und Befehls-Cachespeicher 16 zu existieren. Durch die Beibehaltung des Ausschlusses können SMC Überprüfungen für Speichervorgänge, die in dem Befehls-Cachespeicher 16 treffen, übersprungen werden, weil Befehle nicht von der Cachezeile geholt werden können ohne die Cachezeile von dem Daten- Cachespeicher 28 zu entfernen (was veranlassen würde, dass der Speichervorgang ein Fehltreffer wäre). Daher können SMC Überprüfungen ausgeführt werden für Speichervorgänge, die zwischen gespeichert werden können und nicht treffen. Alternativ kann ein Hinweis in jeder Cachezeile enthalten sein, um anzuzeigen, ob die Cachezeile auch in dem Befehls-Cachespeicher 16 gespeichert ist. Falls ein Speichervorgang ein Fehltreffer ist oder ein Treffer für eine Cachezeile, die auch in dem Befehls-Cachespeicher 16 gespeichert ist, wird die SMC Überprüfung durchgeführt. Weitere Ausführungsbeispiele zur Behandlung von SMC Überprüfungen von Speichervorgängen, die zwischen gespeichert werden können, werden betrachtet. Es ist zu bemerken, dass die Fähigkeit eines Speichervorgangs, zwischen gespeichert werden zu können, während der Übersetzung der Speicheradresse festgestellt werden kann (die während der Sondierung des Daten-Cachespeichers 28 vor dem Platzieren der Speichervorgänge in dem LS2 Puffer 62 durchgeführt wird). Zum Beispiel kann in dem oben beschriebenen Ausführungsbeispiel das Speichertyp Feld 96Q Information über die Fähigkeit der Speicher-Speicheroperation, zwischen gespeichert werden zu können, speichern.
  • Für Speichervorgänge, die nicht zwischen gespeichert werden können, sind die Taktiken zur Minimierung der SMC Überprüfungen uneffektiv, da keine entsprechenden Cachezeilen vorhanden sind. Wenn jedoch der Speichervorgang nicht zwischen gespeichert werden kann, dann kann der Befehl, der von denselben Speicherstellen holt, ebenfalls nicht zwischen gespeichert werden. Der Befehls-Cachespeicher 16 verfolgt die Fähigkeit zum Zwischenspeichern der Befehle, die sich innerhalb des Prozessors 10 in der Verarbeitung befinden. Wenn eine oder mehrere der in der Verarbeitung befindlichen Befehle nicht zwischen gespeichert werden können, dann gibt der Befehls-Cachespeicher 16 ein I-Strom UC Signal auf der I-Strom UC Leitung 158 aus. Das ausgegebene I-Strom UC Signal zeigt der Lade/Speicher-Einheit 26 an, dass zumindest ein Befehl, der nicht zwischen gespeichert werden kann, in der Verarbeitung ist, während das nicht angelegte I-Strom UC Signal anzeigt, dass jeder in der Verarbeitung befindliche Befehl zwischen gespeichert werden kann. Es ist zu bemerken, dass die Begriffe nicht zwischengespeichert werden können und unfähig zur Zwischenspeicherung hier verwendet sein können. Die Begriffe nicht zwischengespeichert werden können und unfähig zur Zwischenspeicherung sind als Synonym beabsichtigt und zeigen an, dass die Speicherstellen, auf die von der Speicheradresse oder der Befehlsadresse verwiesen werden, vom Speichern innerhalb der Cachespeicher ausgeschlossen sind.
  • Die LS2 Steuerlogik 66 stellt fest, ob SMC Überprüfungen für einen bestimmten Speichervorgang durchgeführt werden sollen oder nicht, sobald der bestimmte Speichervorgang sonst in der Verfassung ist, die betroffenen Speicherstellen zu aktualisieren (entweder in dem Daten-Cachespeicher 28 oder über die Businterfaceeinheit 37 zu anderen Cachespeicherstufen und/oder dem Hauptspeicher). In dem vorliegenden Ausführungsbeispiel kann ein Speichervorgang seine Aktualisierung in Reaktion auf von dem Umordnungspuffer 32 als zurückziehbar angezeigt zu werden ausführen. Entsprechend sind die Komparatoren 150A150B vorgesehen. Der Umordnungspuffer 32 stellt den Komparatoren 150A150B die Rückzugsmarkierungen (Befehlsmarkierungen entsprechend den von dem Umordnungspuffer 32 zurückgezogenen Speicheroperationen) zur Verfügung. Die Komparatoren 150A150B vergleichen die Rückzugsmarkierungen mit den Befehlsmarkierungen in jedem Eintrag des LS2 Puffers, um die zurückzuziehenden Speicheroperationen zu orten. Entsprechend kann die Anzahl der Komparatoren gleich der Anzahl der Speicheroperationen, die nebeneinander von dem Umordnungspuffer 32 zurück gezogen werden, multipliziert mit der Anzahl der Einträge in dem LS2 Puffer 62 sein. Jedoch sind aus Gründen der Übersichtlichkeit der Zeichnung lediglich die Komparatoren 150A150B dargestellt worden. In einem Ausführungsbeispiel können bis zu zwei Speicheroperationen nebeneinander von dem Umordnungspuffer 32 zurück gezogen werden.
  • Die Komparatoren 150A150B signalisieren der LS2 Steuerlogik 66, wenn eine Übereinstimmung zwischen den Rückzugsmarkierungen und den Befehlsmarkierungen in dem entsprechenden Eintrag detektiert wird. Die LS2 Steuerlogik 66 stellt fest, ob die identifizierten Einträge Speichervorgänge sind und ob eine SMC Überprüfung durchzuführen ist. Falls der Speichervorgang zwischen gespeichert werden kann, stellt die LS2 Steuerlogik 66 fest, ob wie oben beschrieben eine SMC Überprüfung durchgeführt werden soll oder nicht. Falls der Speichervorgang zwischen gespeichert werden kann, wird eine SMC Überprüfung durchgeführt, wenn das I-Strom UC Signal angelegt ist. Falls eine SMC Überprüfung nicht angezeigt ist, gibt die LS2 Steuerlogik 66 den normalen Zustand für den Speichervorgang zurück und markiert den Speichervorgang in dem LS2 Puffer 62 als zurück gezogen (zum Beispiel über das zurückgezogen Bit 96J in dem entsprechenden Eintrag).
  • Falls eine SMC Überprüfung angezeigt ist, leitet die LS2 Steuerlogik 66 eine SMC Überprüfung durch die Ausgabe eines SMC Überprüfungssignals auf der SMC Überprüfungsleitung 152 ein und übermittelt die Speicherdatenadresse auf dem Adressbus 154 an den Befehls-Cachespeicher 16. Der Befehls-Cachespeicher 16 führt die SMC Überprüfung durch und gibt ein Ergebnis auf der SMC Ergebnisleitung 156 zurück. Zum Beispiel kann der Befehls-Cachespeicher 16 ein Signal ausgeben, das angibt, dass die SMC Überprüfung abgeschlossen ist, und ein zweites Signal ausgeben, das das Ergebnis als einen SMC Treffer (Korrektur muss durchgeführt werden) oder als einen SMC Fehltreffer (Korrektur muss nicht durchgeführt werden) identifiziert. Wenn das Ergebnis ein SMC Treffer ist, gibt die LS2 Steuerlogik 66 über die Resync Leitung 122 einen Hinweis auf eine Synchronisierung an den Umordnungspuffer 32 zurück. Ansonsten wird der normale Zustand für den Speichervorgang zurück gegeben (was dem Umordnungspuffer 32 die Zurückziehung des entsprechenden Befehls erlaubt). Der Umordnungspuffer 32 kann nach dem Speichervorgang auf ähnliche Weise wie bei falsch vorher gesagten Verzweigungen synchronisieren, durch die Verwerfung von Befehlen, die dem dem Speichervorgang entsprechenden Befehl folgen, und erneutes Holen der Befehle. Da die Befehle geholt werden nachdem der Speichervorgang die angezielten Speicherstellen aktualisiert hat, werden bei dem erneuten Holen die korrekten Befehle geholt.
  • Es ist zu bemerken, dass die LS2 Steuerlogik 66 die Vergleiche zwischen den Rückzugsmarkierungen und den Einträgen des LS2 Puffers auch für andere Zwecke nutzen kann, abhängig von weiteren Betrachtungen bei dem Entwurf. Zum Beispiel können die Rückzugsmarkierungen auch Speicheroperationen identifizieren, die bereits den Zustand an den Umordnungspuffer 32 zurück gegeben haben und damit derzeitig von dem Umordnungspuffer 32 zurück gezogen werden. Die LS2 Steuerlogik 66 kann Ladetreffer aus dem LS2 Puffer löschen.
  • Es wird nun auf 18 Bezug genommen, in der ein Diagramm einer Zustandsmaschine gezeigt ist, welche die Leistungsfähigkeit einer SMC Überprüfung für einen Speichervorgang darstellt. Das in 18 gezeigte Ausführungsbeispiel kann zum Beispiel durch die Speicherung des aktuellen Zustands für jeden Speichervorgang in dem SMC Feld 96N des entsprechenden Eintrags in dem LS2 Puffer implementiert werden.
  • Die SMC Zustandsmaschine ist am Anfang in einem SMC untätig Zustand 160. Die SMC Zustandsmaschine verbleibt in dem SMC untätig Zustand, wenn der Speichervorgang noch nicht zurück gezogen werden kann (wie angezeigt durch das Empfangen einer Rückzugsmarkierung für den Speichervorgang). Sobald ein Hinweis empfangen wird, dass der Speichervorgang zurück gezogen werden kann, geht die SMC Zustandsmaschine in einen von zwei Zuständen über: SMC Überprüfungszustand 162 oder SMC abgeschlossen Zustand 164. Der SMC Überprüfungszustand 162 wird ausgewählt, wenn der Speichervorgang ein Speichervorgang ist, der zwischen gespeichert werden kann, für den eine SMC Überprüfung ausgeführt werden soll oder wenn der Speichervorgang nicht zwischen gespeichert werden kann und das I-Strom UC Signal angelegt ist. Des weiteren wird das SMC Überprüfungssignal ausgegeben und die Speicheradresse des Speichervorgangs wird an den Befehls-Cachespeicher 16 übermittelt. Andererseits geht die SMC Zustandsmaschine von dem SMC untätig Zustand in den SMC abgeschlossen Zustand 164 über, wenn die LS2 Steuerlogik 66 feststellt, dass der Speichervorgang eine SMC Überprüfung nicht erfordert. Der normale Zustand wird in diesem Fall an den Umordnungs puffen 32 zurück gegeben und der Speichervorgang wird in dem entsprechenden Eintrag des LS2 Puffers als zurück gezogen angezeigt.
  • Die SMC Zustandsmaschine verbleibt in dem SMC Überprüfungszustand 162 bis ein SMC Ergebnis von dem Befehls-Cachespeicher 16 zur Verfügung gestellt wird. Auf den Empfang des SMC Ergebnisses geht die SMC Zustandsmaschine in den SMC abgeschlossen Zustand 164 über. Darüber hinaus gibt die LS2 Steuerlogik 66 entweder einen Synchronisierungszustand oder einen normalen Zustand in Reaktion auf das zur Verfügung gestellte SMC Ergebnis zurück.
  • Die SMC Zustandsmaschine verbleibt in dem SMC abgeschlossen Zustand 164 bis der Speichervorgang für die Aktualisierung der von der Speicheradresse angegebenen Speicherstellen ausgewählt wird. Im Allgemeinen wird der Speichervorgang schnell ausgewählt, da er die älteste Operation in dem LS2 Puffer 62 ist (da er zurück gezogen wird). Nach der Auswahl wird der Speichervorgang zur Aktualisierung an den Daten-Cachespeicher 28 übermittelt, falls der Speichervorgang zwischen gespeichert werden kann, oder an die Businterfaceeinheit 37 übermittelt, falls der Speichervorgang nicht zwischen gespeichert werden kann. Der Speichervorgang kann dann aus dem LS2 Puffer 62 gelöscht werden, was die SMC Zustandsmaschine wirksam in den SMC untätig Zustand 160 zurück bringt.
  • Es wird nun auf 19 Bezug genommen, in der ein Blockdiagramm eines Bereichs des Befehls-Cachespeichers 16 gezeigt ist. Für die Übersichtlichkeit der Zeichnung sind lediglich die Teile des Befehls-Cachespeichers 16 gezeigt, welche an einer SMC Überprüfung für in der Verarbeitung befindliche Befehle beteiligt sind. Weitere Teile können den Speicher und die Steuerung des Befehls-Cachespeichers, die Befehlsadressübersetzung usw. enthalten. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. In dem Ausführungsbeispiel aus 19 enthält der Befehls-Cachespeicher 16 einen in Verarbeitung Puffer 170, eine Hollogik 172, eine SMC Logik 174, Snoop/Opfer Komparatoren 176A176B und SMC Komparatoren 178A–178A. Die Hollogik 172 ist angeschlossen, um eine Holadresse, die von dem Befehls-Cachespeicher 16 (oder dem Hauptspeicher) geholt wird, und den Zustand der Holadresse dem in Verarbeitung Puffer 170 zur Verfügung zu stellen. Befehle kommen in die Verarbeitung, sobald sie aus dem Befehls-Cachespeicher 16 oder dem Hauptspeicher in die Befehlsverarbeitungspipeline des Prozessors 10 geholt werden. Der in Verarbeitung Puffer 170 ist ferner mit der SMC Logik 174, den Snoop/Opfer Komparatoren 176A176B und den SMC Komparatoren 178A178A verbunden. Die SMC Logik 174 ist des weiteren angeschlossen, um ein SMC Überprüfungssignal auf der SMC Überprüfungsleitung 152 zu empfangen und um ein SMC Ergebnis auf der SMC Ergebnisleitung und ein I-Strom UC Signal auf der I-Strom UC Signalleitung 158 zur Verfügung zu stellen. Die SMC Logik 174 ist darüber hinaus angeschlossen, um dem Umordnungspuffer 32 eine Hole in Verarbeitungspuffer (IFB) Markierung auf einem Hole IFB Markierungsbus 180 zur Verfügung zu stellen und auf einem Rückzugs IFB Markierungsbus 182 eine Rückzugs IFB Markierung von dem Umordnungspuffer 32 zu empfangen. Die SMC Komparatoren 178A178A sind angeschlossen, um eine SMC Adresse auf dem Adressbus 154 zu empfangen. Die Snoop/Opfer Komparatoren 176A176B sind angeschlossen, um eine Snoop- oder Opferadresse von der Hollogik 172 zu empfangen.
  • Im Allgemeinen speichert der in Verarbeitung Puffer 170 Befehlsadressen von in der Verarbeitung befindlichen Befehlen. Des weiteren speichert der in Verarbeitung Puffer 170 einen den Befehlsadressen entsprechenden Zustand. In einem Ausführungsbeispiel kann der Zustand Vorholpuffer, Cachespeicher oder nicht zwischen gespeichert umfassen. Der Zustand Vorholpuffer zeigt an, dass die Befehle in einem Vorholpuffer gespeichert sind, der von dem Befehls-Cachespeicher 16 verwendet wird (nicht gezeigt). Der Zustand Cachespeicher zeigt an, dass die Befehle in dem Befehls-Cachespeicher 16 gespeichert sind. Der Zustand nicht zwischen gespeichert zeigt an, dass die Befehle nicht in dem Befehls-Cachespeicher 16 gespeichert sind (zum Beispiel weil die Befehle in einem Bereich des Speichers sind, der nicht zwischen gespeichert werden kann oder weil die Befehle ein Fehltreffer in dem Befehls-Cachespeicher 16 sind oder weil die Befehle vorher ein Treffer in dem Befehls-Cachespeicher 16 waren, aber später von dem Befehls-Cachespeicher 16 aufgrund einer Sondierungsungültigmachung oder anderen Cachespeicherersetzungen entfernt wurden). Die SMC Logik 174 weist einen Eintrag in dem in Verarbeitung Puffer 170 in Reaktion auf eine von der Hollogik 172 geholte Befehlsadresse zu. Der Eintrag wird von einer IFB Markierung identifiziert, die über die Pipeline dem Umordnungspuffer 32 zusammen mit den geholten Befehlen übermittelt wird. Der Umordnungspuffer 32 zeichnet die IFB Markierung auf und gibt die IFB Markierung in Reaktion auf das Zurückziehen oder das Verwerten von der IFB Markierung entsprechenden Befehlen zurück. Die SMC Logik 174 löscht den entsprechenden Eintrag in dem in Verarbeitung Puffer 170 in Reaktion auf die Rückzugs IFB Markierung. Entsprechend repräsentieren die Befehlsadressen in dem in Verarbeitung Puffer 170 die in der Verarbeitung befindlichen Befehle. Es ist zu bemerken, dass in einem Ausführungsbeispiel der Umordnungspuffer 32 Befehle nebeneinander zurück ziehen kann, die mehr als einer IFB Markierung entsprechen. In einem derartigen Ausführungsbeispiel kann der Umordnungspuffer 32 die jüngste IFB Markierung auf dem Rückzugs IFB Markierungsbus 182 zur Verfügung stellen. Die SMC Logik 174 kann jeden Eintrag löschen, der älter ist als der von der Rückzugs IFB Markierung identifizierte (zum Beispiel mit einer Rate von einem Eintrag pro Taktzyklus oder jeden anderen geeigneten Rate).
  • Die SMC Logik 174 erzeugt ein I-Strom UC Signal in Reaktion auf die Zustände der in der Verarbeitung befindlichen Befehle. Falls einer oder mehrere der in der Verarbeitung befindlichen Befehle nicht zwischen gespeichert sind, wie durch den Zustand nicht zwischen gespeichert in dem in Verarbeitung Puffer 170 angezeigt ist, gibt die SMC Logik 174 das I-Strom UC Signal aus. Falls alle Befehle zwischen gespeichert sind oder in den Vorholpuffern sind, dann nimmt die SMC Logik 174 das I-Strom UC Signal zurück.
  • In einem Ausführungsbeispiel werden die Holadressen in einer Holblockschrittweite aufgezeichnet. Der Befehls-Cachespeicher 16 stellt einen Block von nebeneinander liegenden Befehlsbytes in Reaktion auf eine Holadresse (den "Holblock") zur Verfügung, der einen oder mehrere Befehle aufweisen kann. Der Holblock wird als eine Gruppe zu einer Befehl Abtastungs- und Ausrichtungslogik weiter gegeben (zum Beispiel in eine Befehlswarteschlange oder einen ähnlichen Mechanismus). In verschiedenen Ausführungsbeispielen kann der Holblock eine Cachezeile oder einen vordefinierten Teil einer Cachezeile je nach Entwurfswunsch aufweisen. Der Holblock ist durch einen Eintrag in dem in Verarbeitung Puffer 170 repräsentiert. Die Anzahl der Einträge für den in Verarbeitung Puffer 170 kann bestimmt werden in Übereinstimmung mit der Anzahl von Holblöcken, welche in dem Prozessor 10 in der Verarbeitung sein können, und können daher abhängig sein von der Anzahl der Stufen der Pipeline in dem Prozessor 10, der superskalaren Ausgabebreite, der Anzahl der Einträge in dem Umordnungspuffer usw. In einer bestimmten Implementierung sind 32 Einträge vorgesehen, obwohl jede Anzahl verwendet werden kann.
  • Die SMC Logik 174 führt SMC Überprüfungen in Reaktion auf das von der Lade/Speicher-Einheit 26 zur Verfügung gestellte SMC Überprüfungssignal aus. Parallel zu der das SMC Überprüfungssignal empfangenen SMC Logik 174 empfangen die SMC Komparatoren 178 die SMC Adresse. Die SMC Komparatoren 178 sind mit entsprechenden Einträgen in dem in Verarbeitung Puffer 170 verbunden. Entsprechend kann die Anzahl der SMC Komparatoren 178 gleich der Anzahl der Einträge in dem in Verarbeitung Puffer 170 sein. Zur Übersichtlichkeit der Zeichnung sind die SMC Komparatoren 178A178A dargestellt. Die Komparatoren 178 vergleichen die SMC Adresse mit der in dem in Verarbeitung Puffer 170 aufgezeichneten Befehlsadresse. Die Komparatoren 178 sind konfiguriert, um die Adressen zu vergleichen ohne die Bits, welche einen Versatz innerhalb des Holblocks definieren, und führen daher einen Vergleich aus, um zu bestimmen, ob die SMC Adresse in dem selben Holblock ist wie die in dem in Verarbeitung Puffer 170 aufgezeichneten Adressen. Falls eine Übereinstimmung detektiert wird, signalisiert der entsprechende Komparator 178 der SMC Logik 174. Die SMC Logik 174 legt auf der SMC Ergebnisleitung 156 Signale an, um anzuzeigen, dass ein SMC Treffer detektiert worden ist, wenn einer oder mehrere der Komparatoren 178 eine Übereinstimmung signalisiert und eine SMC Überprüfung signalisiert ist. Andererseits legt, falls eine SMC Überprüfung signalisiert ist und keiner der Komparatoren 178 eine Übereinstimmung signalisiert, die SMC Logik 174 dann Signale auf der SMC Ergebnisleitung 156 an, um anzuzeigen, dass ein SMC Fehltreffer detektiert worden ist.
  • Es ist zu bemerken, dass die SMC Adresse auch anderen Teilen des Befehls-Cachespeichers 16 zur Verfügung gestellt werden kann. Zum Beispiel kann die SMC Adresse dem Speicher und der Steuerung des Befehls-Cachespeichers zur Verfügung gestellt werden, um die Entfernung einer mit der SMC Adresse überein stimmenden Cachezeile zu veranlassen. Des weiteren kann der Befehls-Cachespeicher 16 einen oder mehrere Fehltrefferpuffer für Cachezeilen, die von dem Businterfaceeinheit 37 transferiert werden sollen, enthalten, und die SMC Überprüfung kann auch auf die Fehltrefferpuffer ausgeführt werden.
  • Der Zustand des Holblocks, der zusammen mit der Befehlsadresse von der Hollogik 172 zur Verfügung gestellt wird, stellt den Zustand des Holblocks nach dem Holen desselben dar. Der Zustand kann sich ändern, während die Befehle in der Verarbeitung sind, und die SMC Logik 174 ist konfiguriert, um den in Verarbeitung Puffer 170 auf solche Zustandsänderungen zu überwachen und ihn zu aktualisieren, um den Aktualisierungen Rechnung zu tragen. Zum Beispiel kann eine Snoopungültigmachungsanforderung veranlassen, dass eine Cachezeile aus dem Befehls-Cachespeicher 16 entfernt wird. Auf ähnliche Weise können Fehltreffer im Befehls-Cachespeicher die Entfernung einer Cachezeile veranlassen, um die Befehlsbytes der Cachezeile des fehltreffenden Befehls zu speichern. Weitere Bedingungen können je nach Wunsch des Entwicklers veranlassen, dass eine Cachezeile entfernt wird. Zum Beispiel kann ein Ausführungsbeispiel des Prozessors 10, das den Ausschluss zwischen dem Befehls-Cachespeicher 16 und dem Daten-Cachespeicher 28 beibehält, die Entfernung aus dem Befehls-Cachespeicher veranlassen, wenn die Cachezeile in den Daten-Cachespeicher 28 zugewiesen wird.
  • Die Hollogik 172 stellt den Komparatoren 176A176B Opferadressen (von Cachezeilen, die entfernt werden) und Snoopadressen zur Verfügung. Wie mit den Komparatoren 178 können die Komparatoren 176 für jeden Eintrag in dem in Verarbeitung Puffer vorgesehen sein. Jedoch sind wegen der Übersichtlichkeit der Zeichnung die Komparatoren 176A176B gezeigt. Des weiteren können, wenn gleichzeitige Vergleiche von Snoopadressen und Opferadressen gewünscht sind, separate Komparatoren 176 für jede Eingangsadresse vorgesehen sein. Diese Adressen werden verglichen (auf Basis von Cachezeilen, was sich von der Holblockbasis unterscheiden kann) mit den Adressen in den Einträgen im in Verarbeitung Puffer. Anders gesagt werden Adressbits, die einen Versatz in der Cachezeile zur Verfügung stellen, von den Vergleichen ausgenommen, die von den Komparatoren 176 durchgeführt werden. Falls ein Komparator 176 eine Übereinstimmung detektiert, wird ein entsprechendes Signal an die SMC Logik 174 ausgegeben. In Reaktion ändert die SMC Logik 174 den Zustand des identifizierten Eintrags auf nicht zwischengespeichert (was zu einer Ausgabe des I-Strom NC Signals führen kann, wenn das I-Strom NC Signal nicht angelegt ist).
  • Es ist zu bemerken, dass der in Verarbeitung Puffer auch für andere Zwecke verwendet werden kann, je nach Wunsche des Entwicklers. Es ist weiter zu bemerken, dass in anderen Ausführungsbeispielen die SMC Überprüfungen wie gewünscht in dem Umordnungspuffer 32 und Stufen der Pipeline vor dem Umordnungspuffer 32 durchgeführt werden können.
  • Es wird nun auf 20 Bezug genommen, in der ein Ablaufdiagramm gezeigt ist, das Operationen darstellt, die von einem Ausführungsbeispiel einer SMC Logik 174 ausgeführt werden können. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. Während die in 20 gezeigten Schritte zum leichteren Verständnis in einer bestimmten Reihenfolge dargestellt sind, kann jede geeignete Reihenfolge verwendet werden. Des weiteren können Schritte von der kombinatorischen Logik in der SMC Logik 174 parallel ausgeführt werden.
  • Falls eine SMC Überprüfung signalisiert wird (Entscheidungsblock 300), bestimmt die SMC Logik 174, ob die Komparatoren 178 einen SMC Treffer an zeigen (Entscheidungsblock 302). Falls ein SMC Treffer detektiert wird, signalisiert die SMC Logik 174 der Lade/Speicher-Einheit 26, dass ein SMC Treffer für die SMC Überprüfung aufgetreten ist (Schritt 304). Umgekehrt, wenn kein SMC Treffer detektiert wird, signalisiert die SMC Logik 174 der Lade/Speicher-Einheit 26, dass ein SMC Fehltreffer detektiert worden ist (Schritt 306).
  • Falls ein Holen auftritt (Entscheidungsblock 308), weist die SMC Logik 174 für die Befehlsadresse einen Eintrag im in Verarbeitung Puffer zu und übermittelt eine dem Eintrag entsprechende IFB Markierung (Schritt 310). Falls eine Rückzugs IFB Markierung empfangen wird (Entscheidungsblock 312), löst die SMC Logik 174 die Zuweisung des identifizierten Eintrags im in Verarbeitung Puffer (Schritt 314). Falls ein Snoop oder eine Entfernung von den Komparatoren 176 detektiert wird (Entscheidungsblock 316), setzt die SMC Logik 174 den Zustand des betroffenen Eintrags auf nicht zwischen gespeichert (Schritt 318). Schließlich gibt die SMC Logik 174 das I-Strom UC Signal aus, wenn ein oder mehrere Einträge im in Verarbeitung Puffer in dem Zustand nicht zwischen gespeichert sind (Schritt 320).
  • Exponentielles Backoff
  • Es wird nun auf 21 Bezug genommen, in der ein Blockdiagramm eines Ausführungsbeispiels eines Bereichs eines Ausführungsbeispiels der Lade/Speicher-Einheit 26 gezeigt ist. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. In dem Ausführungsbeispiel in 21 enthält die Lade/Speicher-Einheit 26 den LS2 Puffer 62, die LS2 Steuerlogik 66, die Komparatoren 120A – 120B, den Snoopadressbus 54A und den Snooptypbus 54B. Die oben aufgeführten Elemente sind auf ähnliche Weise miteinander verbunden, wie es zuvor für das Ausführungsbeispiel von 13 beschrieben wurde. Des weiteren enthält das Ausführungsbeispiel von 21 ein Zeitstempel-Zählerregister 330, einen Zeitstempel-Vorwärtszähler 332 und einen Backoff Verzögerungs Mux 334. Das Zeitstempel-Zählerregister 330 ist mit dem Zeitstempel-Vorwärtszähler 332 und dem Backoff Verzögerungs Mux 334 verbunden. Der Backoff Verzögerungs Mux 334 ist angeschlossen zum Empfangen von Auswahlsteuerungen von der LS2 Steuerlogik 66 und zum zur Verfügung stellen eines Backoff Verzögerungssignals an die Businterfaceeinheit 37. Die LS2 Steuerlogik 66 ist ferner mit einer Backoff Leitung 336 verbunden, die des weiteren mit der Businterfaceeinheit 37 verbunden ist.
  • Im Allgemeinen ist die Lade/Speicher-Einheit 26 konfiguriert, um eine Blockade in Multiprozessorsystemen für Fälle zu verhindern, in denen zwei oder mehrere Prozessoren versuchen, Besitzrechte einer bestimmten Cachezeile zu erlangen. Die Lade/Speicher-Einheit 26 kann eine Verhinderung von Blockaden bewerkstelligen durch die Detektierung von Fällen, in denen ein Snooptreffer auf eine Speicheroperation in dem LS2 Puffer 62 den Prozessor 10 veranlasst, genügend Besitzrechte zu verlieren, um die Speicheroperation beenden zu können. Zum Beispiel verliert der Prozessor 10 genügend Besitzrechte, um eine Lade-Speicheroperation beenden zu können, wenn eine zuvor gültige Cachezeile, auf die von dem Ladevorgang zugegriffen wird, ungültig gemacht wird. Andererseits verliert der Prozessor 10 genügend Besitzrechte, um eine Speicher-Speicheroperation beenden zu können, wenn eine Cachezeile, auf die von dem Speichervorgang zugegriffen wird, zuvor in einem Zustand anders als ungültig oder geteilt ist und die Cachezeile zu ungültig oder geteilt geändert wird in Reaktion auf einen Snooptreffer. In Reaktion auf das Verlieren von genügend Besitzrechten ist die Lade/Speicher-Einheit 26 konfiguriert, der Busintefaceeinheit 37 ein Backoff zu signalisieren (über ein Backoff Signal auf der Backoff Leitung 336) und die anfängliche Backoff Zeit zu erhöhen. Die Backoff Zeit wird jedes Mal erhöht, wenn die Besitzrechte erlangt und dann verloren werden, bevor die betroffene Speicheroperation abgeschlossen werden kann. Schließlich kann die Speicheroperation abgeschlossen werden (nachdem der andere Prozessor seine Speicheroperation erfolgreich abgeschlossen hat) und die Backoff Zeit kann wieder auf ihren anfänglichen Wert gesetzt werden. Der Ausdruck "Backoff Zeit" bezieht sich auf einen Zeitintervall, während dem die Prozessoren konfiguriert sind, die Versuche zu behindern, die Besitzrechte für eine Cachezeile wieder zu erlangen, über die die Besitzrechte über eine Snoopoperation verloren wurden. Es ist zu bemerken, dass die Lade/Speicher-Einheit 26 konfiguriert sein kann, den Backoff intern durchzuführen (zum Beispiel dadurch, nicht zu versuchen, Kommandos an die Businterfaceeinheit 37 für die Übermittlung auf dem Bus zu übermitteln).
  • Wie oben für das Ausführungsbeispiel von 13 beschrieben, sind die Komparatoren 120 (einschließlich der Komparatoren 120A120B und weiteren Komparatoren für weitere Einträge in dem LS2 Puffer) konfiguriert, um die Snoopadresse einer Snoopoperation mit den Adressen in dem LS2 Puffer 62 zu vergleichen. Falls ein Snooptreffer für einen Eintrag detektiert wird, aktualisiert die LS2 Steuerlogik 66 den Zustand von diesem Eintrag, um den Zustand zu berücksichtigen, dass auf der entsprechenden Cachezeile aktualisiert wird (parallel von dem Daten-Cachespeicher 28 in Reaktion auf die Snoopadresse und den Snooptyp). Des weiteren kann, falls der neue Zustand der Cachezeile anzeigt, dass der Prozessor 10 genügend Besitzrechte über die Cachezeile verloren hat, um die Speicheroperation in dem LS2 Puffer 62 abzuschließen, die LS2 Steuerlogik 66 konfiguriert sein, um die von der Businterfaceeinheit 37 verwendete Backoff Zeit zu erhöhen.
  • In einem bestimmten Ausführungsbeispiel kann die LS2 Steuerlogik 66 Speicher-Speicheroperationen, welche von einem Snoop getroffen werden, aktualisieren, um anzuzeigen, dass die Speicher-Speicheroperationen Fehltreffer sind oder eine Änderung des Zustands von geteilt zu exklusiv erfordern, bevor sie abgeschlossen werden können. Nachfolgend können diese Speichervorgänge zum Holen der entsprechenden Cachezeile aus dem Speicher oder zum Durchführen der Änderung des Zustands ausgewählt werden. Nach dem erfolgreichen Abschluss dieser Operationen kann der Speichervorgang abgeschlossen werden. Darüber hinaus kann ein Ausführungsbeispiel Lade-Speicheroperationen auf ähnliche Weise wie das in 13 gezeigte Ausführungsbeispiel behandeln.
  • Die LS2 Steuerlogik 66 kann die Erhöhung der Backoff Zeiten auf Fälle begrenzen, in denen genügend Besitzrechte für die älteste Speicheroperation in dem LS2 Puffer 62 verloren wurden. Auf diese Weise wird die Backoff Zeit nicht jedes Mal erhöht, wenn die Besitzrechte von einer beliebigen Speicher operation in dem LS2 Puffer 62 verloren werden. Wenn anderenfalls eine Blockade für eine bestimmte Speicheroperation auftreten würde, wird diese Speicheroperation schließlich die älteste in der Verarbeitung befindliche Speicheroperation werden, da ältere Speicheroperationen erfolgreich abgeschlossen werden. Des weiteren kann ein derartiges Ausführungsbeispiel einfacher zu implementieren sein als die anderen Ausführungsbeispiele.
  • Noch weiter kann ein Ausführungsbeispiel erfolgreich eine Blockade in Fällen verhindern, in denen ein Befehl eine Speicheroperation ausführt, die falsch über eine Grenze der Cachezeile ausgerichtet ist (das heißt die Speicheroperation greift auf ein oder mehrere Bytes von einer ersten Cachezeile und auf ein oder mehrere Bytes von einer zweiten nachfolgenden Cachezeile zu). Speicheroperationen, die über eine Grenze der Cachezeile falsch ausgerichtet sind, erfordern genügend Besitzrechte von beiden Cachezeilen, um abgeschlossen werden zu können. Die Lade/Speicher-Einheit 26 behandelt falsch ausgerichtete Fälle durch die Ausführung von zwei Speicheroperationen, die von dem selben Befehl abgeleitet sind (von denen einer auf jede Cachezeile zugreift). Entsprechend kann der Backoff für die erste der Cachezeilen implementiert werden (wenn sie die älteste wird), was die Prozessoren daran hindert, die Besitzrechte der beiden Cachezeilen zu tauschen, ohne dass ein Prozessor die Besitzrechte über beide Cachezeilen gleichzeitig lang genug erhält, um die Speicheroperation abzuschließen.
  • In dem vorliegenden Ausführungsbeispiel kann die von der Businterfaceeinheit 37 verwendete Backoff Zeit von dem Zeitstempel-Zählerregister 330 abgeleitet werden. Im Allgemeinen kann das von dem Prozessor 10 verwendete Zeitstempel-Zählerregister 330 zur Messung der verstrichenen Zeit verwendet werden. In anderen Worten berücksichtigt die Differenz zwischen den in dem Zeitstempel-Zählerregister 330 an zwei zeitlich willkürlich gespeicherten Werten die zwischen diesen beiden Punkten verstrichene Zeit. Der Zeitstempel-Vorwärtszähler 332 kann zum Beispiel das Zeitstempel-Zählerregister 330 jeden Taktzyklus hoch zählen. In anderen Ausführungsbeispielen kann das Zeitstempel-Zählerregister 330 auf eine von der Taktfrequenz unabhängige Weise hoch gezählt werden, um die Echtzeit korrekt zu berücksichtigen. Zum Beispiel kann der Zeitstempel-Vorwärtszähler 332 ein Signal unabhängig von den von dem Prozessor 10 empfangenen Taktsignalen empfangen und kann das Zeitstempel-Zählerregister 330 einmal pro Intervall des empfangenen Signals hoch zählen.
  • Der Backoff Verzögerungs Mux 334, unter der Kontrolle der LS2 Steuerlogik 66, ist konfiguriert, um eine Backoff Verzögerung auszuwählen, die von der Businterfaceeinheit 37 benutzt wird. In einem Ausführungsbeispiel wählt der Backoff Verzögerungs Mux 334 ein Bit aus einer vorbestimmten Spanne von Bits innerhalb des Zeitstempel-Zählerregisters 330 aus. Das niederwertigste Bit innerhalb der Spanne gibt die anfängliche und minimale Backoff Zeit an und die erhöhten Backoff Zeiten können ausgewählt werden durch das Auswählen anderer Bits innerhalb der Spanne. Genauer gesagt kann ein Übergang des ausgewählten Bits das Auslaufen des Backoff Intervalls anzeigen. Ein Übergang von einem Bit ist ein Wechsel in dem binären Zustand des Bits (das heißt von Eins zu Null oder von Null zu Eins). Da das niederwertigste Bit in der Spanne häufiger wechselt als der Wert in dem Zeitstempel-Zählerregister 330 hoch gezählt wird, gibt das niederwertigste Bit die minimale Backoff Zeit an. Andere höhenwertige Bits innerhalb der Spanne wechseln in zunehmend längeren Intervallen (in dem vorliegenden Ausführungsbeispiel tatsächlich ein exponentieller Anstieg wenn zunehmend wertigere Bits ausgewählt werden).
  • Entsprechend kann, sobald detektiert wird, dass die Backoff Zeit erhöht werden soll, die LS2 Steuerlogik 66 den Backoff Verzögerungs Mux 334 steuern, das nächstwertigste Bit innerhalb der Spanne auszuwählen. Im Allgemeinen ist das nächstwertigste Bit innerhalb eines Werts mit mehreren Bits das benachbarte aber höhenwertige Bit zu dem derzeit ausgewählten Bit innerhalb des Werts mit mehreren Bits. Entsprechend wird, jedes Mal wenn die Besitzrechte von dem Prozessor 10 erlangt und verloren werden, die Backoff Verzögerung als ein höhenwertigeres Bit als die vorherige Auswahl ausgewählt. Die höhenwertigeren Bits innerhalb des Zeitstempel-Zählerregisters 330 wechseln weniger häufiger und daher wird die Backoff Verzögerung erhöht.
  • Nach der Detektierung, dass die älteste Speicheroperation in dem LS2 Puffer 62 erfolgreich abgeschlossen wurde, signalisiert die LS2 Steuerlogik 66 dem Backoff Verzögerungs Mux 334, das niedrigwertigste Bit innerhalb der vorgegebenen Spanne auszuwählen, wodurch die Backoff Verzögerung auf ihren anfänglichen Wert zurück gesetzt wird.
  • Es wird nun auf 22 Bezug genommen, in der eine Backoff Zustandsmaschine gezeigt ist, die das Backoff innerhalb eines Ausführungsbeispiels der Businterfaceeinheit 37 darstellt. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. In dem Ausführungsbeispiel aus 22 umfasst die Backoff Zustandsmaschine einen Zustand Normal 340 und einen Zustand Blockiert 342. Die Backoff Zustandsmaschine ist üblicherweise in dem Zustand Normal und verbleibt in dem Zustand Normal, es sei denn, es wird von der Lade/Speicher-Einheit 26 ein Backoff signalisiert. Während die Backoff Zustandsmaschine in dem Zustand Normal 340 ist, führt die Businterfaceeinheit einen Transfer von Daten zwischen dem Befehls-Cachespeicher 16, dem Daten-Cachespeicher 28, dem LS2 Cachespeicher und dem Businterface durch. Wenn ein Backoff signalisiert wird, geht die Backoff Zustandsmaschine in den Zustand Blockiert 342 über. In dem Zustand Blockiert 342 blockiert die Businterfaceeinheit 37 die Einleitung von Transfers von Daten auf dem Businterface. Die Businterfaceeinheit 37 verbleibt in dem Zustand Blockiert 342 bis die von der Lade/Speicher-Einheit 26 angegebene Backoff Verzögerung abläuft. Nach dem Ablaufen der Backoff Verzögerung kehrt die Backoff Zustandsmaschine in den Zustand Normal 340 zurück.
  • Es ist zu bemerken, dass während die obige Beschreibung anzeigt, dass die Businterfaceeinheit 37 alle Speicheroperationen blockiert, während die Backoff Zustandsmaschine in dem Zustand Blockiert 342 ist, andere Ausführungsbeispiele die Einleitung von begrenzten Transfers von Daten erlauben können. Zum Beispiel kann ein Transferieren von Daten aufgrund eines Snooptreffers während des Zustands Blockiert 342 eingeleitet werden. Weitere Ausführungsbeispiele können während des Zustands Blockiert 342 ferner Transfers von Daten erlauben, die anderen Speicheroperationen als denjenigen entsprechen, für die der Backoff detektiert wurde.
  • Es wird nun auf 23 Bezug genommen, in der ein Ablaufdiagramm gezeigt ist, das den Betrieb eines Ausführungsbeispiels der in 21 gezeigten LS2 Steuerlogik 66 darstellt. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. Während die in 23 gezeigten Schritte zum leichteren Verständnis in einer bestimmten Reihenfolge dargestellt sind, kann jede geeignete Reihenfolge verwendet werden. Des weiteren können Schritte von der kombinatorischen Logik in der SMC Logik 174 parallel ausgeführt werden.
  • Die LS2 Steuerlogik 66 bestimmt, ob für einen Eintrag in dem LS2 Puffer ein Snooptreffer detektiert wird und ob der Snooptreffer die Speicheroperation in dem Eintrag veranlasst, die genügenden Besitzrechte zum Abschließen zu verlieren (Entscheidungsblock 350). Falls der Entscheidungsblock 350 zu einem wahren Ausgang kommt, signalisiert die LS2 Steuerlogik 66 dem Backoff Verzögerungs Mux 334, das nächstwertigste Bit in dem Zeitstempelzähler als die Backoff Verzögerung auszuwählen (Schritt 352). Des weiteren gibt die LS2 Steuerlogik 66 das Backoff Signal an die Businterfaceeinheit 37 aus (Schritt 354). Umgekehrt, wenn der Entscheidungsblock 350 zu einem falschen Ausgang kommt, lässt die LS2 Steuerlogik 66 das derzeit ausgewählte Bit in dem Zeitstempelzähler als die Backoff Verzögerung (Schritt 356).
  • Falls die LS2 Steuerlogik 66 bestimmt, dass die Speicheroperation (für die der Verlust der genügenden Besitzrechte zu einer Erhöhung der Backoff Verzögerung führt) erfolgreich abgeschlossen wird oder von dem Prozessor 10 abgebrochen wird (Entscheidungsblock 358), signalisiert die LS2 Steuerlogik 66 dem Backoff Verzögerungs Mux 334, das niedrigwertigste Bit der auswählbaren Bits in dem Zeitstempelzähler als die Backoff Verzögerung auszuwählen (Schritt 360). In anderen Worten wird die Backoff Verzögerung auf ihren anfänglichen Wert zurück gesetzt.
  • Es wird nun auf 24 Bezug genommen, in der ein Zeitablaufdiagramm gezeigt ist, das einen beispielhaften Betrieb von zwei Prozessoren (Prozessor 1 und Prozessor 2) zeigt, die beide versuchen, einen Speichervorgang auszuführen, der über die Cachezeilen A1 und A2 falsch ausgerichtet ist. Bevor die in 24 gezeigten Vorgänge eingeleitet werden, hat der Prozessor 1 die exklusiven Besitzrechte über die Cachezeile A1 und keine Besitzrechte (ungültig) für die Cachezeile A2. Der Prozessor 2 andererseits hat keine Besitzrechte über die Cachezeile A1 und die exklusiven Besitzrechte über die Cachezeile A2. Für Zwecke des Beispiels kann jeder Prozessor den Teil des Speichervorgangs zu A1 als den ältesten Eintrag in dem LS2 Puffer 62 haben und den Teil des Speichervorgangs zu A2 als den zweitältesten Eintrag in dem LS2 Puffer 62 haben.
  • Zu etwa demselben Zeitpunkt leitet der Prozessor 1 eine Operation ein, um Schreibrechte für die Cachezeile A2 zu erlangen, (Bezugszeichen 370) und der Prozessor 2 leitet eine Operation ein, um Schreibrechte für die Cachezeile A1 zu erlangen, (Bezugszeichen 372). Zum Beispiel kann jeder Prozessor eine Leseoperation einleiten (um die Cachezeile mit den Daten zu lesen), mit einem Hinweis, dass die Daten modifiziert werden (und damit, dass ein exklusives Kopieren angefordert wird). In Reaktion auf das Durchführen eines Snoops auf den Zugriff des Prozessors 1 auf die Adresse A2, verliert der Prozessor 2 die Besitzrechte an der Cachezeile A2. Auf ähnliche Weise verliert der Prozessor 1 die Besitzrechte an der Cachezeile A1 in Reaktion auf das Durchführen eines Snoops auf den Zugriff des Prozessors 2 auf die Adresse A1. Des weiteren leitet, da der Speichervorgang an die Adresse A1 der älteste Eintrag in dem LS2 Puffer 62 ist, der Prozessor 1 ein Backoff Intervall ein, das das anfängliche Backoff Zeitintervall benutzt.
  • Während der Prozessor 1 sich im Backoff befindet, versucht der Prozessor 2, die Besitzrechte der Cachezeile A2 erneut zu erlangen (Bezugszeichen 374). Wiederum kann die Operation ein Lesevorgang mit geändertem Inhalt sein. Der Prozessor 1 verliert die Besitzrechte der Cachezeile A1 in Reaktion auf das Durchführen eines Snoops auf die Operation des Prozessors 2. Der Prozessor 2 hat dann die exklusiven Besitzrechte von beiden Cachezeilen A1 und A2. Jedoch läuft, bevor der Prozessor 2 die Speicheroperation abschließen kann, das Backoff Intervall des Prozessors 1 aus und der Prozessor 1 versucht, die Besitzrechte der Cachezeile A1 erneut zu erlangen (Bezugszeichen 376). Der Prozessor 1 führt einen Snoop auf die Operation durch und verliert die Besitzrechte der Cachezeile A1. Des weiteren betritt der Prozessor 1 auch ein Backoff Intervall der anfänglichen Länge.
  • Ähnlich zu der Operation des Prozessors 2 während des Backoff Zeitraums von Prozessor 1, versucht der Prozessor 1 die Besitzrechte der Cachezeile A1 erneut zu erlangen (Bezugszeichen 378). Der Prozessor 1 hat dann die exklusiven Besitzrechte von beiden Cachezeilen A1 und A2. Jedoch läuft, bevor der Prozessor 1 die Speicheroperation abschließen kann, das Backoff Intervall des Prozessors 2 aus und der Prozessor 2 versucht, die Besitzrechte der Cachezeile A1 erneut zu erlangen (Bezugszeichen 380). Der Prozessor 1 führt einen Snoop auf die Operation durch und verliert die Besitzrechte der Cachezeile A1. Des weiteren betritt der Prozessor 1 ein Backoff Intervall von erweiterter Länge, wegen des wiederholten Verlusts der Besitzrechte. Während des erweiterten Backoff Intervalls, versucht der Prozessor 2, die Besitzrechte der Cachezeile A2 erneut zu erlangen (Bezugszeichen 382). Des weiteren schließt der Prozessor 2 seinen Speichervorgang aufgrund der zusätzlich verfügbaren Zeit während des erweiterten Backoff Intervalls ab (Pfeil 384).
  • Nachfolgend läuft das erweiterte Backoff Intervall aus und der Prozessor 1 versucht, die Besitzrechte der Cachezeilen A1 und A2 zu erlangen (Bezugszeichen 386 beziehungsweise 388). Da der Prozessor 2 seine Schreiboperation beendet hat, erlaubt der Prozessor 2 es dem Prozessor 1, die Besitzrechte von beiden Cachezeilen A1 und A2 zu erhalten (und stellt die aktualisierten Kopien zur Verfügung, um Kohärenz zu bewahren).
  • Computersystem
  • Es wird nun auf 25 Bezug genommen, in der ein Blockdiagramm gezeigt ist, das ein Ausführungsbeispiel eines Computersystems 200 einschließlich des Prozessors 10 darstellt, der über eine Busbrücke 202 mit einer Vielzahl von Systemkomponenten verbunden ist. Weitere Ausführungsbeispiele sind möglich und werden betrachtet. In dem dargestellten System ist ein Hauptspeicher 204 über einen Speicherbus 206 mit der Busbrücke 202 verbunden und eine Grafiksteuerung 208 ist über einen AGP Bus 210 mit der Busbrücke 202 verbunden. Schließlich ist eine Vielzahl von PCI Geräten 212A212B über einen PCI Bus 214 mit der Busbrücke 202 verbunden. Eine zweite Busbrücke 216 kann ferner vorgesehen sein, um einem oder mehreren EISA oder ISA Geräten 218 über einen EISA/ISA Bus 220 eine elektrische Schnittstelle zu bieten. Der Prozessor 10 ist über einen CPU Bus 224 mit der Busbrücke 202 und mit einem optionalen L2 Cachespeicher verbunden.
  • Die Busbrücke 202 stellt eine Schnittstelle zwischen dem Prozessor 10, dem Hauptspeicher 204, der Grafiksteuerung 208 und an den PCI Bus 214 angebrachten Geräten zur Verfügung. Wenn eine Operation von einem der an die Busbrücke 202 angeschlossenen Geräte empfangen wird, identifiziert die Busbrücke 202 das Ziel der Operation (zum Beispiel ein bestimmtes Gerät oder in dem Fall des PCI Busses 214, dass das Ziel auf dem PCI Bus 214 ist). Die Busbrücke 202 führt die Operation zu dem angezielten Gerät. Die Busbrücke 202 übersetzt im Allgemeinen eine Operation von dem Protokoll, das von dem Quellgerät oder -bus benutzt wird, in das Protokoll, das von dem Zielgerät oder -bus benutzt wird.
  • Zusätzlich zur Bereitstellung einer Schnittstelle zu einem ISA/EISA Bus für den PCI Bus 214 kann die zweite Busbrücke 216 wie gewünscht weitere Funktionalität enthalten. Eine Eingangs/Ausgangssteuerung (nicht gezeigt), entweder außerhalb von der oder in die zweite Busbrücke 216 integriert, kann auch in dem Computersystem 200 enthalten sein, um operationelle Unterstützung für eine Tastatur und Maus 222 und für verschiedene serielle und paral lele Anschlüsse wie gewünscht zur Verfügung zu stellen. Eine externe Cachespeichereinheit (nicht gezeigt) kann ferner an den CPU Bus 224 zwischen dem Prozessor 10 und der Busbrücke 202 in anderen Ausführungsbeispielen angeschlossen sein. Alternativ kann der externe Cachespeicher an die Busbrücke 202 angeschlossen sein und die Cachespeichersteuerlogik für den externen Cachespeicher kann in der Busbrücke 202 integriert sein. Ein L2 Cachespeicher 228 ist des weiteren in einer hinter dem Prozessor 10 angeordneten Konfiguration gezeigt. Es ist zu bemerken, dass der L2 Cachespeicher 228 getrennt von dem Prozessor 10, in einem Einsatz (zum Beispiel Slot 1 oder Slot A) für den Prozessor 10 integriert oder sogar integriert auf einem Halbleitersubstrat in dem Prozessor 10 sein kann.
  • Der Hauptspeicher 204 ist ein Speicher, in dem Anwendungsprogramme gespeichert werden und von dem der Prozessor 10 hauptsächlich ausführt. Ein geeigneter Hauptspeicher 204 weist DRAM (dynamischen wahlfreien Zugriffsspeicher) auf. Zum Beispiel kann eine Vielzahl von Bänken an SDRAM (Synchrones DRAM) oder an Rambus DRAM (RDRAM) geeignet sein.
  • Die PCI Geräte 212A212B sind beispielhaft für eine Vielzahl von peripheren Geräten, wie zum Beispiel Netzwerkschnittstellenkarten, Videobeschleunigern, Audiokarten, Festplatten oder Diskettenlaufwerken oder Laufwerkssteuerungen, SCSI (kleine Computer Systemschnittstelle) Adaptern oder Telefoniekarten. Auf ähnliche Weise ist das 15A Gerät 218 beispielhaft für verschiedene Typen von peripheren Geräten, wie einem Modem, einer Soundkarte und einer Vielzahl von Daten sammelnden Karten, wie GPIB oder Feldbus Schnittstellenkarten.
  • Die Grafiksteuerung 208 ist vorgesehen, um Text und Bilder auf einer Anzeige 256 sichtbar zu machen. Die Grafiksteuerung 208 kann einen typischen Grafikbeschleuniger verwenden, der allgemein im Stand der Technik bekannt ist, um dreidimensionale Datenstrukturen sichtbar zu machen, die effektiv aus und in den Hauptspeicher 204 geschoben werden können. Die Grafiksteuerung 208 kann daher ein Master von dem AGP Bus 210 sein, so dass es Zugriff auf eine Zielschnittstelle innerhalb der Busbrücke 202 anfordern und empfangen kann, um dadurch Zugriff auf den Hauptspeicher 204 zu bekommen. Ein fest zugeordneter Grafikbus erlaubt eine schnelle Erlangung von Daten aus dem Hauptspeicher 204. Für gewisse Operationen kann die Grafiksteuerung 208 des weiteren konfiguriert sein, um auf dem AGP Bus Transaktionen nach dem PCI Protokoll zu erzeugen. Die AGP Schnittstelle der Busbrücke 202 kann daher Funktionalitäten enthalten, um sowohl Transaktionen nach dem AGP Protokoll als auch Ziel- und Urhebertransaktionen nach dem PCI Protokoll zu unterstützen. Die Anzeige 226 ist jegliche elektronische Anzeige, auf der ein Bild oder ein Text dargestellt werden kann. Eine geeignete Anzeige umfasst eine Kathodenstrahlröhre ("CRT"), ein Flüssigkristalldisplay ("LCD") usw.
  • Es ist zu bemerken, dass, während die AGP, PCI und ISA oder EISA Busse in der obigen Beschreibung als Beispiele benutzt worden sind, jede Busarchitektur wie gewünscht ersetzt werden kann. Es ist weiter zu bemerken, dass das Computersystem 200 ein Mehrfachprozessorsystem sein kann, das zusätzliche Prozessoren enthält (zum Beispiel Prozessor 10a, der als optionale Komponente des Computersystems 200 gezeigt ist). Der Prozessor 10a kann ähnlich zu dem Prozessor 10 sein. Genauer gesagt kann der Prozessor 10a eine identische Kopie des Prozessors 10 sein. Der Prozessor 10a kann über einen unabhängigen Bus (wie in 25 gezeigt) mit der Busbrücke 202 verbunden sein oder kann den CPU Bus 224 mit dem Prozessor 10 teilen. Des weiteren kann der Prozessor 10a mit einem optionalen L2 Cachespeicher 228a verbunden sein, der dem L2 Cachespeicher 228 ähnlich ist.
  • Es ist darüber hinaus zu bemerken, dass die vorliegende Besprechung auf die Ausgabe von verschiedenen Signalen Bezug nimmt. Wie hier benutzt wird ein Signal "ausgegeben", wenn es einen Wert befördert, der anzeigend ist für eine bestimmte Bedingung. Umgekehrt ist ein Signal "zurück gezogen", wenn es einen Wert befördert, der anzeigend ist für ein Fehlen einer bestimmten Bedingung. Ein Signal kann als ausgegeben definiert werden, wenn es einen logischen Wert Null befördert oder umgekehrt, wenn es einen logischen Wert Eins befördert. Des weiteren sind in der obigen Besprechung verschiedene Werte als verworfen werdend beschrieben worden. Ein Wert kann auf mehrere Arten verworfen werden, aber im Allgemeinen umfasst es die Veränderung des Werts derart, dass er von der logischen Schaltung, die den Wert empfängt, ignoriert wird. Zum Beispiel kann, falls der Wert ein Bit aufweist, der logische Zustand des Werts invertiert werden, um den Wert zu verwerfen. Falls der Wert ein Wert mit n Bits ist, kann eine der n Bit Kodierungen anzeigen, dass der Wert ungültig ist. Das Setzen des Werts auf die ungültig Kodierung veranlasst ein Verwerfen des Werts. Des weiteren kann ein n Bit Wert ein Gültig Bit enthalten, das, wenn gesetzt, anzeigt, dass der n Bit Wert gültig ist. Ein Zurücksetzen des Werts kann ein Verwerfen des Werts einschließen. Weitere Verfahren des Verwerfens eines Werts können ebenso verwendet werden.
  • Es ist zu bemerken, dass, während eine Vielzahl der oben beschriebenen Ausführungsbeispiele mit Puffern verbundene Komparatoren zeigt, um Werte in den Puffern mit Eingangswerten zu vergleichen, diese Puffer, wie gewünscht, gleichwertig als inhaltsadressierbare Speicher (CAMs) implementiert werden können, zumindest für die zu vergleichenden Bereiche der Einträge. Es ist weiter zu bemerken, dass verschiedene Ausführungsbeispiele oben getrennt von anderen Ausführungsbeispielen verwendet werden können, oder, wie gewünscht, in Kombination mit einem oder mehreren anderen Ausführungsbeispielen verwendet werden können. Des weiteren wird ein Ausführungsbeispiel, das den Betrieb von allen der obigen Ausführungsbeispiele kombiniert, betrachtet.
  • Zahlreiche Variationen und Modifikationen werden den Fachleuten auf dem Gebiet offenbar werden sobald die obige Offenbarung vollständig gewürdigt ist. Es ist beabsichtigt, dass die folgenden Ansprüche interpretiert werden, um alle derartigen Variationen und Modifikationen zu umfassen.
  • Industrielle Anwendbarkeit
  • Diese Erfindung kann allgemein in Prozessoren und Computersystem angewendet werden.

Claims (10)

  1. Prozessor (10) mit: einem Daten-Cachespeicher (28); und einer Lade-/Speichereinheit (26) mit einem ersten Puffer (104), der mehrere Einträge aufweist, dadurch gekennzeichnet, dass jeder Eintrag zum Speichern eines Ladekennzeichens und eines Speicherdatenkennzeichens vorgesehen ist, wobei der erste Eintrag der mehreren Einträge einer ersten Lade-Speicheroperation zugewiesen ist, und zwar in Reaktion auf das Detektieren, dass eine erste Ladeadresse der ersten Lade-Speicheroperation eine erste Ladeadresse einer ersten Speicher-Speicheroperation trifft, für die erste Speicherdaten während eines Abtastens durch eine erste Lade-Speicheroperation dem Daten-Cachespeicher (28) nicht zur Verfügung stehen, und der erste Eintrag ein erstes Ladekennzeichen, das die erste Lade-Speicheroperation identifiziert, und ein erstes Speicherdatenkennzeichen, das eine Quelle der ersten Speicherdaten identifiziert, speichert.
  2. Prozessor nach Anspruch 1, bei dem der Daten-Cachespeicher (28) einen oder mehrere Multiplexer (110, 112, 114) zum Auswählen von Weiterleitungsdaten aufweist, wobei ein oder mehrere Eingänge des Multiplexers (110, 112, 114) zum Empfangen der ersten Speicherdaten vorgesehen sind und wobei die Lade-/Speichereinheit (26) zum Benachrichtigen des Daten-Cachespeichers (28) in Reaktion auf das Detektieren, dass die ersten Speicherdaten erzeugt worden sind, vorgesehen ist, und wobei die Multiplexer (110, 112, 114) zum Auswählen der ersten Speicherdaten in Reaktion auf das Benachrichtigungssignal vorgesehen sind.
  3. Prozessor nach Anspruch 2, bei dem die Speicher-/Ladeeinheit (26) zum Senden des Ladekennzeichens von dem ersten Puffer (104) zu dem Daten-Cachespeicher (28) zum Weiterleiten mit den ersten entsprechenden Speicherdaten vorgesehen ist.
  4. Prozessor nach Anspruch 2, ferner mit einer oder mehreren Ausführungseinheiten (40) zum Ausführen von Befehlen und Erzeugen entsprechender Befehlsergebnisse auf einem oder mehreren Ergebnisbussen (38), wobei die entsprechenden Befehlsergebnisse Markierungen aufweisen, die Befehle identifizieren, welche entsprechenden Befehlsergebnissen entsprechen, und wobei eine der Markierungen eine der Ausführungseinheiten (40) als Quelle der ersten Speicherdaten identifiziert und wobei die Lade-/Speichereinheit (26) mit den Ergebnisbussen (38) gekoppelt ist und wobei die Lade-/Speichereinheit (26) zum Vergleichen der Markierung mit dem ersten Speicherdatenkennzeichen in dem ersten Eintrag und mit weiteren Speicherdatenkennzeichen in weiteren der mehreren Einträge vorgesehen ist.
  5. Prozessor nach Anspruch 1, ferner mit einem zweiten Puffer (62) zum Speichern der ersten Speicher-Speicheroperation, wobei der zweite Puffer (62) ferner zum Speichern einer zweiten Lade-Speicheroperation vorgesehen ist, mit der der Daten-Cachespeicher (28) abgetastet worden ist.
  6. Prozessor nach Anspruch 5, bei dem die Lade-/Speichereinheit (26) zum Auswählen der zweiten Lade-Speicheroperation zum erneuten Abtasten des Daten-Cachespeichers (28) vorgesehen ist, wobei die Lade-/Speichereinheit (26) zum Zuweisen eines zweiten Eintrags der mehreren Einträge in dem ersten Puffer (104) zu der zweiten Lade-Speicheroperation in Reaktion auf das Detektieren vorgesehen, dass eine zweite Ladeadresse der zweiten Lade-Speicheroperation eine zweite Speicheradresse einer zweiten Speicher-Speicheroperation trifft, für die zweite Speicherdaten während des erneuten Abtastens durch die zweite Lade-Speicheropera tion dem Daten-Cachespeicher (28) nicht zur Verfügung stehen, wobei der zweite Eintrag ein zweites Ladekennzeichen, das eine zweite Lade-Speicheroperation identifiziert, und ein zweites Speicherdatenkennzeichen, das eine Quelle der zweiten Speicherdaten identifiziert, speichert.
  7. Verfahren zum Durchführen einer Lade-Speicheroperation mit folgenden Schritten: Abtasten eines Daten-Cachespeichers (28) durch Anwendung der Lade-Speicheroperation; Detektieren, dass die Lade-Speicheroperation eine Speicher-Speicheroperation trifft, für die entsprechende Speicherdaten während des Abtastens nicht zur Verfügung stehen; und Aufzeichnen eines Ladekennzeichens, das die Lade-Speicheroperation identifiziert, und eines Speicherdatenkennzeichens, das eine Quelle der Speicherdaten identifiziert, wobei das Aufzeichnen in einen ersten Puffer (104) erfolgt.
  8. Verfahren nach Anspruch 7, ferner mit folgenden Schritten: Detektieren, dass die Speicherdaten durch Empfangen des Speicherdatenkennzeichens von einer Quelle bereitgestellt werden; und Weiterleiten des Ladekennzeichens von dem ersten Puffer (104) und der Speicherdaten in Reaktion auf das Detektieren.
  9. Verfahren nach Anspruch 8, ferner mit folgenden Schritten: Ausführen eines Befehls in einer Ausführungseinheit (40); und Erzeugen eines Ergebnisses und einer Ergebnismarkierung in Reaktion auf die Ausführung, wobei die Ergebnismarkierung dem Speicherdatenkennzeichen gleich ist, wenn der Befehl die Speicherdaten bereitstellt, wodurch die Ausführungseinheit (40) als Quelle der Speicherdaten identifiziert wird.
  10. Verfahren nach Anspruch 9, mit dem Schritt des Übertragens des Ergebnisses in Form von Ladedaten entsprechend der Lade-Speicheroperation.
DE69908193T 1999-05-18 1999-11-15 Ausführung von speicher- und ladeoperationen mittels einer linkdatei Expired - Lifetime DE69908193T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US313873 1999-05-18
US09/313,873 US6266744B1 (en) 1999-05-18 1999-05-18 Store to load forwarding using a dependency link file
PCT/US1999/027105 WO2000070469A2 (en) 1999-05-18 1999-11-15 Store to load forwarding using a dependency link file

Publications (2)

Publication Number Publication Date
DE69908193D1 DE69908193D1 (de) 2003-06-26
DE69908193T2 true DE69908193T2 (de) 2004-04-01

Family

ID=23217527

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69908193T Expired - Lifetime DE69908193T2 (de) 1999-05-18 1999-11-15 Ausführung von speicher- und ladeoperationen mittels einer linkdatei

Country Status (4)

Country Link
US (2) US6266744B1 (de)
EP (1) EP1224557B1 (de)
DE (1) DE69908193T2 (de)
WO (1) WO2000070469A2 (de)

Families Citing this family (78)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6266744B1 (en) 1999-05-18 2001-07-24 Advanced Micro Devices, Inc. Store to load forwarding using a dependency link file
US6473837B1 (en) 1999-05-18 2002-10-29 Advanced Micro Devices, Inc. Snoop resynchronization mechanism to preserve read ordering
US6427193B1 (en) 1999-05-18 2002-07-30 Advanced Micro Devices, Inc. Deadlock avoidance using exponential backoff
US6473832B1 (en) 1999-05-18 2002-10-29 Advanced Micro Devices, Inc. Load/store unit having pre-cache and post-cache queues for low latency load memory operations
US6393536B1 (en) 1999-05-18 2002-05-21 Advanced Micro Devices, Inc. Load/store unit employing last-in-buffer indication for rapid load-hit-store
AU5027200A (en) * 1999-05-20 2000-12-12 Intensifi, Inc. Method and apparatus for access to, and delivery of, multimedia information
US6405290B1 (en) * 1999-06-24 2002-06-11 International Business Machines Corporation Multiprocessor system bus protocol for O state memory-consistent data
US6662280B1 (en) * 1999-11-10 2003-12-09 Advanced Micro Devices, Inc. Store buffer which forwards data based on index and optional way match
US6487627B1 (en) * 1999-12-22 2002-11-26 Intel Corporation Method and apparatus to manage digital bus traffic
US6694424B1 (en) * 2000-01-03 2004-02-17 Advanced Micro Devices, Inc. Store load forward predictor training
US6651161B1 (en) * 2000-01-03 2003-11-18 Advanced Micro Devices, Inc. Store load forward predictor untraining
US6622237B1 (en) * 2000-01-03 2003-09-16 Advanced Micro Devices, Inc. Store to load forward predictor training using delta tag
US6678807B2 (en) * 2000-12-21 2004-01-13 Intel Corporation System and method for multiple store buffer forwarding in a system with a restrictive memory model
US20020152259A1 (en) * 2001-04-14 2002-10-17 International Business Machines Corporation Pre-committing instruction sequences
US6662277B2 (en) * 2001-07-31 2003-12-09 Hewlett-Packard Development Company, L.P. Cache system with groups of lines and with coherency for both single lines and groups of lines
US7620954B2 (en) * 2001-08-08 2009-11-17 Hewlett-Packard Development Company, L.P. Mechanism for handling load lock/store conditional primitives in directory-based distributed shared memory multiprocessors
WO2003017136A1 (en) * 2001-08-16 2003-02-27 Etagon Israel Ltd. Using associative memory to perform database operations
US6775748B2 (en) * 2002-01-24 2004-08-10 Intel Corporation Methods and apparatus for transferring cache block ownership
US7100001B2 (en) * 2002-01-24 2006-08-29 Intel Corporation Methods and apparatus for cache intervention
US6983348B2 (en) * 2002-01-24 2006-01-03 Intel Corporation Methods and apparatus for cache intervention
US7080211B2 (en) * 2002-02-12 2006-07-18 Ip-First, Llc Microprocessor apparatus and method for prefetch, allocation, and initialization of a cache line from memory
US7089368B2 (en) * 2002-02-12 2006-08-08 Ip-First, Llc Microprocessor apparatus and method for exclusively prefetching a block of cache lines from memory
US7080210B2 (en) * 2002-02-12 2006-07-18 Ip-First, Llc Microprocessor apparatus and method for exclusive prefetch of a cache line from memory
US7089371B2 (en) * 2002-02-12 2006-08-08 Ip-First, Llc Microprocessor apparatus and method for prefetch, allocation, and initialization of a block of cache lines from memory
US7111125B2 (en) * 2002-04-02 2006-09-19 Ip-First, Llc Apparatus and method for renaming a data block within a cache
US7222226B1 (en) 2002-04-30 2007-05-22 Advanced Micro Devices, Inc. System and method for modifying a load operation to include a register-to-register move operation in order to forward speculative load results to a dependent operation
US7028166B2 (en) * 2002-04-30 2006-04-11 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values
US7114043B2 (en) * 2002-05-15 2006-09-26 Broadcom Corporation Ambiguous virtual channels
JP3948615B2 (ja) * 2002-07-05 2007-07-25 富士通株式会社 プロセッサ及び命令制御方法
US7089400B1 (en) 2002-08-29 2006-08-08 Advanced Micro Devices, Inc. Data speculation based on stack-relative addressing patterns
US7627721B2 (en) * 2002-10-08 2009-12-01 Rmi Corporation Advanced processor with cache coherency
US7024537B2 (en) * 2003-01-21 2006-04-04 Advanced Micro Devices, Inc. Data speculation based on addressing patterns identifying dual-purpose register
US7657880B2 (en) * 2003-01-31 2010-02-02 Intel Corporation Safe store for speculative helper threads
US20040153611A1 (en) * 2003-02-04 2004-08-05 Sujat Jamil Methods and apparatus for detecting an address conflict
US7188215B2 (en) * 2003-06-19 2007-03-06 Ip-First, Llc Apparatus and method for renaming a cache line
US7321964B2 (en) * 2003-07-08 2008-01-22 Advanced Micro Devices, Inc. Store-to-load forwarding buffer using indexed lookup
US7287126B2 (en) * 2003-07-30 2007-10-23 Intel Corporation Methods and apparatus for maintaining cache coherency
US7676621B2 (en) * 2003-09-12 2010-03-09 Hewlett-Packard Development Company, L.P. Communications bus transceiver
US7237043B2 (en) * 2003-11-21 2007-06-26 Lsi Corporation System for improving PCI write performance
US7263600B2 (en) * 2004-05-05 2007-08-28 Advanced Micro Devices, Inc. System and method for validating a memory file that links speculative results of load operations to register values
US20050289050A1 (en) * 2004-06-29 2005-12-29 Narayanan Raja P Automated marketplace presentation and purchasing service for a data computing device
US7418541B2 (en) * 2005-02-10 2008-08-26 International Business Machines Corporation Method for indirect access to a support interface for memory-mapped resources to reduce system connectivity from out-of-band support processor
US7392350B2 (en) * 2005-02-10 2008-06-24 International Business Machines Corporation Method to operate cache-inhibited memory mapped commands to access registers
US7467204B2 (en) * 2005-02-10 2008-12-16 International Business Machines Corporation Method for providing low-level hardware access to in-band and out-of-band firmware
TWI283411B (en) * 2005-03-16 2007-07-01 Ind Tech Res Inst Inter-cluster communication module using the memory access network
US7376817B2 (en) * 2005-08-10 2008-05-20 P.A. Semi, Inc. Partial load/store forward prediction
US20080010441A1 (en) * 2006-07-05 2008-01-10 International Business Machines Corporation Means for supporting and tracking a large number of in-flight loads in an out-of-order processor
US20080010440A1 (en) * 2006-07-05 2008-01-10 International Business Machines Corporation Means for supporting and tracking a large number of in-flight stores in an out-of-order processor
US20100306509A1 (en) * 2009-05-29 2010-12-02 Via Technologies, Inc. Out-of-order execution microprocessor with reduced store collision load replay reduction
JP5283128B2 (ja) * 2009-12-16 2013-09-04 学校法人早稲田大学 プロセッサによって実行可能なコードの生成方法、記憶領域の管理方法及びコード生成プログラム
JP5419761B2 (ja) * 2010-03-12 2014-02-19 アズビル株式会社 デバイス制御装置およびcpu
US8886881B2 (en) 2011-05-24 2014-11-11 International Business Machines Corporation Implementing storage adapter performance optimization with parity update footprint mirroring
US8793462B2 (en) * 2011-05-24 2014-07-29 International Business Machines Corporation Implementing storage adapter performance optimization with enhanced resource pool allocation
US8868828B2 (en) 2011-05-24 2014-10-21 International Business Machines Corporation Implementing storage adapter performance optimization with cache data/directory mirroring
US20120303934A1 (en) * 2011-05-26 2012-11-29 Advanced Micro Devices, Inc. Method and apparatus for generating an enhanced processor resync indicator signal using hash functions and a load tracking unit
WO2013101213A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Method and apparatus for cutting senior store latency using store prefetching
US9128725B2 (en) 2012-05-04 2015-09-08 Apple Inc. Load-store dependency predictor content management
US9600289B2 (en) 2012-05-30 2017-03-21 Apple Inc. Load-store dependency predictor PC hashing
US9213641B2 (en) * 2012-06-14 2015-12-15 International Business Machines Corporation Cache line history tracking using an instruction address register file
US9286233B2 (en) * 2012-08-30 2016-03-15 Advanced Micro Devices, Inc. Oldest operation translation look-aside buffer
US10198265B2 (en) 2013-03-15 2019-02-05 Intel Corporation Microprocessor for gating a load operation based on entries of a prediction table
US10467010B2 (en) * 2013-03-15 2019-11-05 Intel Corporation Method and apparatus for nearest potential store tagging
CN104346285B (zh) * 2013-08-06 2018-05-11 华为技术有限公司 内存访问处理方法、装置及系统
US9524164B2 (en) 2013-08-30 2016-12-20 Advanced Micro Devices, Inc. Specialized memory disambiguation mechanisms for different memory read access types
US9569212B2 (en) * 2014-03-28 2017-02-14 Intel Corporation Instruction and logic for a memory ordering buffer
US9710268B2 (en) 2014-04-29 2017-07-18 Apple Inc. Reducing latency for pointer chasing loads
DE102015104776B4 (de) * 2015-03-27 2023-08-31 Infineon Technologies Ag Verfahren und Vorrichtung zum Verarbeiten von Radarsignalen
US9514083B1 (en) * 2015-12-07 2016-12-06 International Business Machines Corporation Topology specific replicated bus unit addressing in a data processing system
US10514925B1 (en) 2016-01-28 2019-12-24 Apple Inc. Load speculation recovery
US10437595B1 (en) 2016-03-15 2019-10-08 Apple Inc. Load/store dependency predictor optimization for replayed loads
JP6680978B2 (ja) * 2016-04-15 2020-04-15 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US10528353B2 (en) 2016-05-24 2020-01-07 International Business Machines Corporation Generating a mask vector for determining a processor instruction address using an instruction tag in a multi-slice processor
US10467008B2 (en) 2016-05-31 2019-11-05 International Business Machines Corporation Identifying an effective address (EA) using an interrupt instruction tag (ITAG) in a multi-slice processor
US10248555B2 (en) * 2016-05-31 2019-04-02 International Business Machines Corporation Managing an effective address table in a multi-slice processor
US10545887B2 (en) 2017-02-24 2020-01-28 Ati Technologies Ulc Multiple linked list data structure
US10789175B2 (en) * 2017-06-01 2020-09-29 Mellanox Technologies Ltd. Caching policy in a multicore system on a chip (SOC)
US10387162B2 (en) * 2017-09-20 2019-08-20 International Business Machines Corporation Effective address table with multiple taken branch handling for out-of-order processors
US10713057B2 (en) 2018-08-23 2020-07-14 International Business Machines Corporation Mechanism to stop completions using stop codes in an instruction completion table

Family Cites Families (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5155816A (en) 1989-02-10 1992-10-13 Intel Corporation Pipelined apparatus and method for controlled loading of floating point data in a microprocessor
US5276828A (en) 1989-03-01 1994-01-04 Digital Equipment Corporation Methods of maintaining cache coherence and processor synchronization in a multiprocessor system using send and receive instructions
US5487156A (en) 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
US5440752A (en) 1991-07-08 1995-08-08 Seiko Epson Corporation Microprocessor architecture with a switch network for data transfer between cache, memory port, and IOU
EP0553743A1 (de) * 1992-01-31 1993-08-04 Motorola, Inc. Cachespeichersteuerungseinrichtung
JP3199465B2 (ja) 1992-07-22 2001-08-20 株式会社日立製作所 情報処理装置
DE69329778T2 (de) * 1992-09-29 2001-04-26 Seiko Epson Corp., Tokio/Tokyo System und verfahren zur handhabung von laden und/oder speichern in einem superskalar mikroprozessor
US6735685B1 (en) * 1992-09-29 2004-05-11 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
IE80854B1 (en) 1993-08-26 1999-04-07 Intel Corp Processor ordering consistency for a processor performing out-of-order instruction execution
US5715428A (en) 1994-02-28 1998-02-03 Intel Corporation Apparatus for maintaining multilevel cache hierarchy coherency in a multiprocessor computer system
US5526510A (en) 1994-02-28 1996-06-11 Intel Corporation Method and apparatus for implementing a single clock cycle line replacement in a data cache unit
US5692152A (en) 1994-06-29 1997-11-25 Exponential Technology, Inc. Master-slave cache system with de-coupled data and tag pipelines and loop-back
US5666514A (en) 1994-07-01 1997-09-09 Board Of Trustees Of The Leland Stanford Junior University Cache memory containing extra status bits to indicate memory regions where logging of data should occur
US6216200B1 (en) 1994-10-14 2001-04-10 Mips Technologies, Inc. Address queue
US5669003A (en) 1994-12-23 1997-09-16 Intel Corporation Method of monitoring system bus traffic by a CPU operating with reduced power
US5887152A (en) 1995-04-12 1999-03-23 Advanced Micro Devices, Inc. Load/store unit with multiple oldest outstanding instruction pointers for completing store and load/store miss instructions
US5802588A (en) 1995-04-12 1998-09-01 Advanced Micro Devices, Inc. Load/store unit implementing non-blocking loads for a superscalar microprocessor and method of selecting loads in a non-blocking fashion from a load/store buffer
US5832297A (en) 1995-04-12 1998-11-03 Advanced Micro Devices, Inc. Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations
US5625835A (en) 1995-05-10 1997-04-29 International Business Machines Corporation Method and apparatus for reordering memory operations in a superscalar or very long instruction word processor
US5761712A (en) 1995-06-07 1998-06-02 Advanced Micro Devices Data memory unit and method for storing data into a lockable cache in one clock cycle by previewing the tag array
US5652859A (en) 1995-08-17 1997-07-29 Institute For The Development Of Emerging Architectures, L.L.C. Method and apparatus for handling snoops in multiprocessor caches having internal buffer queues
US5765208A (en) 1995-09-29 1998-06-09 Motorola, Inc. Method of speculatively executing store instructions prior to performing snoop operations
US5751983A (en) 1995-10-03 1998-05-12 Abramson; Jeffrey M. Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations
US5781790A (en) 1995-12-29 1998-07-14 Intel Corporation Method and apparatus for performing floating point to integer transfers and vice versa
US5822755A (en) 1996-01-25 1998-10-13 International Business Machines Corporation Dual usage memory selectively behaving as a victim cache for L1 cache or as a tag array for L2 cache
US5742791A (en) 1996-02-14 1998-04-21 Advanced Micro Devices, Inc. Apparatus for detecting updates to instructions which are within an instruction processing pipeline of a microprocessor
US5838943A (en) 1996-03-26 1998-11-17 Advanced Micro Devices, Inc. Apparatus for speculatively storing and restoring data to a cache memory
US5764934A (en) 1996-07-03 1998-06-09 Intel Corporation Processor subsystem for use with a universal computer architecture
US5991819A (en) 1996-12-03 1999-11-23 Intel Corporation Dual-ported memory controller which maintains cache coherency using a memory line status table
US6189072B1 (en) 1996-12-17 2001-02-13 International Business Machines Corporation Performance monitoring of cache misses and instructions completed for instruction parallelism analysis
US5768555A (en) 1997-02-20 1998-06-16 Advanced Micro Devices, Inc. Reorder buffer employing last in buffer and last in line bits
US6085292A (en) 1997-06-05 2000-07-04 Digital Equipment Corporation Apparatus and method for providing non-blocking pipelined cache
US6138212A (en) 1997-06-25 2000-10-24 Sun Microsystems, Inc. Apparatus and method for generating a stride used to derive a prefetch address
US6317810B1 (en) 1997-06-25 2001-11-13 Sun Microsystems, Inc. Microprocessor having a prefetch cache
US5920889A (en) 1997-06-27 1999-07-06 Sun Microsystems, Inc. Apparatus and method for write miss processing in a copy-back data cache with an allocating load buffer and a non-allocating store buffer
US6065103A (en) 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
US6356270B2 (en) 1998-03-31 2002-03-12 Intel Corporation Efficient utilization of write-combining buffers
US6157977A (en) 1998-11-24 2000-12-05 Hewlett Packard Company Bus bridge and method for ordering read and write operations in a write posting system
US6311254B1 (en) 1999-03-18 2001-10-30 International Business Machines Corporation Multiple store miss handling in a cache memory memory system
US6321303B1 (en) 1999-03-18 2001-11-20 International Business Machines Corporation Dynamically modifying queued transactions in a cache memory system
US6237066B1 (en) 1999-03-22 2001-05-22 Sun Microsystems, Inc. Supporting multiple outstanding requests to multiple targets in a pipelined memory system
US6366984B1 (en) 1999-05-11 2002-04-02 Intel Corporation Write combining buffer that supports snoop request
US6427193B1 (en) 1999-05-18 2002-07-30 Advanced Micro Devices, Inc. Deadlock avoidance using exponential backoff
US6266744B1 (en) 1999-05-18 2001-07-24 Advanced Micro Devices, Inc. Store to load forwarding using a dependency link file

Also Published As

Publication number Publication date
EP1224557A2 (de) 2002-07-24
US20010037434A1 (en) 2001-11-01
WO2000070469A3 (en) 2002-04-25
US6549990B2 (en) 2003-04-15
US6266744B1 (en) 2001-07-24
EP1224557B1 (de) 2003-05-21
DE69908193D1 (de) 2003-06-26
WO2000070469A2 (en) 2000-11-23

Similar Documents

Publication Publication Date Title
DE69908193T2 (de) Ausführung von speicher- und ladeoperationen mittels einer linkdatei
DE60036016T2 (de) Schnell multithreading für eng gekoppelte multiprozessoren
DE60025028T2 (de) Speicherpuffer, der daten, basierend auf index und freiwilliger weisebemusterung überträgt
DE112004002848B4 (de) Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor
DE60005860T2 (de) Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle
DE69429061T2 (de) Superskalarmikroprozessoren
DE69329778T2 (de) System und verfahren zur handhabung von laden und/oder speichern in einem superskalar mikroprozessor
DE69612991T2 (de) System zur bearbeitung von selbstmodifizierendem kode
DE112007003801B3 (de) Vorrichtung mit einer speichereinheit und einer logik zur bereitstellung eines effizienten mechanismus‘ für transaktionalspeicherausführungen in out-of-order-prozessoren
DE69721961T2 (de) Mikroprozessor mit einem Nachschreibcachespeicher
DE112005002173B4 (de) Prozessor mit Abhängigkeitsmechanismus, um vorherzusagen, ob ein Ladevorgang von einem älteren Schreibvorgang abhängig ist
DE19781995C2 (de) Prozessor mit einer Wiederhol-Architektur
DE112010003492B4 (de) Transaktionsspeichersystem mit wirksamerZwischenspeicherunterstützung
DE69518362T2 (de) Wiedersynchronisierung eines Superskalarprozessors
DE112005003874B3 (de) Transaktionsgestützter Verarbeitungsbetrieb mit gemeinsam genutzten Daten in einer Multiprozessorumgebung
DE69904189T2 (de) Konfigurierter prozessor zur abbildung von logischen registernummern auf physikalische registernummern unter verwendung von virtuellen registernummern
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE60038693T2 (de) Verfahren und vorrichtung zur ausschaltung eines taktsignals in einem vielfadenprozessor
DE69607760T2 (de) Ungeordnete lade-/speicher-ausführungssteuerung
DE60009151T2 (de) Vorhersage von datenbeförderung von speicher- zum ladebefehl mit untrainierung
DE69130858T2 (de) Überlappende Serienverarbeitung
DE19506734A1 (de) Computersystem und Verfahren zum Aufrechterhalten der Speicherkonsistenz in einer Busanforderungswarteschlange
DE10296989T5 (de) Multi-Thread-Prozessor mit der Fähigkeit einer impliziten Multi-Thread-Ausführung eines Ein-Thread-Programms
DE69908175T2 (de) Verbesserte befehlsdekodierung durch paralleldekodierungsalgorithmus
DE102016219651A1 (de) Für Vorabzugriff unempfindlicher transaktionsgebundener Speicher

Legal Events

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

Owner name: GLOBALFOUNDRIES INC. MAPLES CORPORATE SERVICES, KY