-
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 20A–20C,
eine Vielzahl von Reservierungsstationen 22A–22C,
eine Vielzahl von Funktionseinheiten 24A– 24C,
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 20A–20C 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 20A–20C ist
mit der Lade/Speicher-Einheit 26 und der entsprechenden Reservierungsstation 22A–22C verbunden.
Die Reservierungsstationen 22A– 22C sind ferner mit den entsprechenden
Funktionseinheiten 24A–24C 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 24A–24C 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 22A–22C 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 24A–24C 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 20B–20C, den Reservierungsstationen 22B–22C, den
Funktionseinheiten 24B–24C 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 20B –20C 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 20B–20C)
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 20A–20C). 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 92B–92F. 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 102A–102B, eine
Abhängigkeitsverbindungsdatei 104,
eine Steuerlogik für
die Abhängigkeitsverbindungsdatei 106 und
Speicherdatenmarkierungs Komparatoren 108A–108B.
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 102A–102B 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 102A–102B 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 108A–108B 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 108A–108B verbunden.
Die Komparatoren 102A–102B sind
angeschlossen zum Empfangen der an den Anschlüssen 0 und 1 des
Daten-Cachespeichers 28 präsentierten Datenadressen. Die
Komparatoren 108A–108B 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 38DA–38DB 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 108A–108B)
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 120A–120B. Die Komparatoren 120A–120B 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 120A–120B 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 12–16), 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 12–16), 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 120A–120B 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 150A–150B.
Die Komparatoren 150A–150B 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 150A–150B vorgesehen.
Der Umordnungspuffer 32 stellt den Komparatoren 150A–150B die
Rückzugsmarkierungen
(Befehlsmarkierungen entsprechend den von dem Umordnungspuffer 32 zurückgezogenen
Speicheroperationen) zur Verfügung.
Die Komparatoren 150A–150B 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 150A–150B dargestellt
worden. In einem Ausführungsbeispiel
können
bis zu zwei Speicheroperationen nebeneinander von dem Umordnungspuffer 32 zurück gezogen
werden.
-
Die Komparatoren 150A–150B 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 176A–176B 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 176A–176B und
den SMC Komparatoren 178A–178A 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 178A–178A sind
angeschlossen, um eine SMC Adresse auf dem Adressbus 154 zu
empfangen. Die Snoop/Opfer Komparatoren 176A–176B 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 178A–178A 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 176A–176B 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 176A–176B 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 120A–120B 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 212A–212B ü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 212A–212B 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.