-
Hintergrund der Erfindung
-
1. Technisches Gebiet
-
Diese
Erfindung betrifft Mikroprozessoren und betrifft insbesondere das
Decodieren von Befehlen mit variabler Länge in einem Mikroprozessor.
-
2. Hintergrund der Erfindung
-
Die
Anzahl der Softwareanwendungen, die für den x86-Befehlssatz erstellt
wurde, ist sehr groß. Als
Folge davon haben trotz der Einführung
neuerer und fortschrittlicherer Befehlssätze die Entwicklungsingenieure
für Mikroprozessoren
weiterhin Mikroprozessoren entworfen, die für das Ausführen des x86-Befehlssatzes
geeignet sind.
-
Der
x86-Befehlssatz ist relativ komplex und zeichnet sich durch eine
Vielzahl von Befehlen mit variabler Länge aus. Ein allgemeines Format,
das den x86-Befehlssatz darstellt, ist in 1 gezeigt. Wie
in der Figur dargestellt ist, besteht ein x86-Befehl aus 1 bis 5
optionalen Präfixbytes 102,
an die sich ein Operationscodierungs-(opcode-)Feld 104,
ein optionales Adressiermodus (Mod R/M) Byte 106, ein optionales
Skalenindexbasis-(SIB)Byte 108,
ein optionales Versetzungsfeld 110 und ein optionales unmittelbares
Datenfeld 112 anschließen.
-
Das
Operationscodierungsfeld 104 definiert die grundlegende
Operation für
einen speziellen Befehl. Die voreingestellte Operationsweise einer
speziellen Operationscodierung kann durch eines oder mehrere Präfixbytes 102 modifiziert
werden. Beispielsweise kann eines der Präfixbytes 102 verwendet
werden, um die Adressengröße oder
die Operandengröße für einen
Befehl zu ändern,
das voreingestellte Segment, das in der Speicheradressierung verwendet
wird, zu überschreiben,
oder den Prozessor anzuweisen, eine Kettenoperation mehrere Male zu
wiederholen. Das Operationscodierungsfeld 104 folgt auf
die Präfixbytes 102,
falls dieses vorhanden ist, und kann eine Länge von 1 bis 2 Bytes aufweisen. Das
Adressierungsmodus-(Mod R/M)Byte 106 spezifiziert die verwendeten
Register sowie die Speicheraddressierungsmodi. Das Skalenindexbasis-(SIB)Byte 108 wird
lediglich bei der 32-Bit-Basis-Relativaddressierung unter Verwendung
von Skalen- und Indexfaktoren eingesetzt. Ein Basisfeld innerhalb
des SIB-Bytes 108 spezifiziert, welches Register den Basiswert
für die
Adressenberechnung enthält
und ein Indexfeld innerhalb des SIB-Bytes 108 spezifiziert,
welches Register den Indexwert enthält. Ein Skalenfeld innerhalb
des SIB-Bytes 108 gibt die Potenz zur Basis 2 an, mit der
der Indexwert vor dem Addieren zu dem Basiswert multipliziert wird, wobei
auch eine Verschiebung angegeben ist. Das nächste Befehlsfeld ist ein Verschiebungsfeld 110, das
optional ist und eine Länge
von 1 bis 4 Bytes aufweisen kann. Das Verschiebungsfeld 110 enthält eine
Konstante, die bei Adressenberechnungen verwendet wird. Das optionale
unmittelbare Feld 112, das auch eine Länge von 1 bis 4 Bytes aufweisen kann,
enthält
eine Konstante, die als ein Befehlsoperand verwendet wird. Die kürzesten
x86-Befehle sind lediglich
ein Byte lang und enthalten ein einzelnes Operationscodierungsbyte.
Der 80286 setzt eine maximale Länge
für einen
Befehl von 10 Bytes fest, während
für den
80386 und 80486 jeweils Befehlslängen
von bis zu 15 Bytes zulässig
sind.
-
Die
Komplexität
des x86-Befehlssatzes führt zu
vielen Schwierigkeiten beim Einrichten von Mikroprozessoren mit
hohem Leistungsniveau, die kompatibel zum x86-Befehlssatz sind.
Insbesondere die variable Länge
der x86-Befehle erschwert das Decodieren der Befehle. Das Decodieren
von Befehlen beinhaltet typischerweise das Bestimmen der Grenzen eines
Befehls und dann das Erkennen jedes Feldes innerhalb des Befehls,
beispielsweise der Operationscodierungs- und Operandenfelder. Das
Decodieren findet typischerweise statt, wenn der Befehl aus dem
Befehlscache-Speicher vor der Ausführung abgeholt wird.
-
Ein
Verfahren zum Bestimmen der Grenzen von Befehlen beinhaltet das
Erzeugen und Speichern eines oder mehrerer Vordecodierungsbits für jedes Befehlsbyte,
wenn dieses aus dem Hauptspeicher ausgelesen und in dem Befehlscache-Speicher
abgelegt wird. Die Vordecodierungsbits liefern Information über das
Befehlsbyte, mit dem sie verknüpft
sind. Beispielsweise gibt ein gesetztes Vordecodierungsstartbit
an, dass das zugehörige
Befehlsbyte das erste Byte eines Befehls ist. Sobald ein Startbit
für einen speziellen
Befehl berechnet ist, wird es zusammen mit dem Befehlsbyte in dem
Befehlscache-Speicher gespeichert.
Wenn ein "Abholvorgang" ausgeführt wird,
werden eine Reihe an Befehlsbytes aus dem Befehlscache-Speicher
ausgelesen und für
die Vorbereitung zur Ausführung
decodiert. Entsprechende zugeordnet Startbits werden durchsucht,
um zu lässige
Masken für
die einzelnen Befehle beim Abholen zu erzeugen. Eine zulässige Maske
ist eine Reihe von Bits, in der jedes Bit einem speziellen Befehlsbyte
entspricht. Gültige
Maskenbits, die dem ersten Byte eines Befehls, dem letzten Byte
des Befehls und allen Bytes zwischen dem ersten und dem letzten Byte
des Befehls zugeordnet sind, werden gesetzt. Alle anderen gültigen Maskenbits
werden nicht gesetzt. Sobald die gültige Maske berechnet ist,
kann diese verwendet werden, um andere Bytes von anderen Befehlen
zu maskieren.
-
In 2 ist
eine beispielhafte gültige
Maske gezeigt. Die Figur zeigt einen Teil eines Abholvorgangs 120 und
seiner zugehörigen
Startbits 122. Unter Annahme, dass eine gültige Maske 126 für den Befehl
B 128 zu erzeugen ist, werden das Startbit 122a und
alle Bits zwischen dem Startbit 122a und einem Startbit 122b gesetzt,
um die Maske 126 zu erzeugen. Nach der Erzeugung kann dann
die gültige Maske 126 verwendet
werden, um alle Bytes innerhalb des Abholvorgangs 120 zu
maskieren, die nicht Teil des Befehls B 128 sind.
-
Wie
aus der vorhergehenden Beschreibung hervorgeht, kann das Vordecodieren
der Information besonders vorteilhaft bei der Verringerung der Decodierzeiten
sein. Durch Speichern der Vordecodierinformation zusammen mit Befehlsbytes
in dem Befehlscache-Speicher muss die Vordecodierungsinformation
lediglich ein mal berechnet werden, selbst wenn der entsprechende
Befehl mehrere Male ausgeführt
wird (beispielsweise in einer Schleife). Wenn jedoch der Befehl
ausgetauscht oder aus dem Befehlscache-Speicher entfernt wird, ist eine zugehörige Vordecodierungsinformation
verloren. Wenn der Befehl das nächste
mal in den Befehlscache-Speicher eingelesen wird, muss die Vordecodierungsinformation
erneut erzeugt werden. Die durch das Warten auf das Berechnen der
Vordecodierungsinformation hervorgerufene Zeitverzögerung kann
insbesondere nachteilig für
das Leistungsverhalten sein, wenn der Befehl als Ergebnis einer
Verzweigungsfehlvorhersage oder eines Nichttreffers im Cache-Speicher in
den Befehlscache-Speicher eingelesen wird. Im Gegensatz zu Befehlen,
die spekulativ vorläufig
abgeholt werden, bevor sie benötigt
werden, können Abholvorgänge, die
sich aus Verzweigungsfehlvorhersagen oder Nichttreffern für den Cache-Speicher ergeben,
bewirken, dass die Decodiereinheiten und Funktionseinheiten des
Mikroprozessors angehalten werden, während diese auf das Empfangen
der angeforderten Befehle warten. In diesem Falle kann die Zeit,
die zum Erzeugen der Vordecodierungsinformation erforderlich ist,
einen wesentlichen Einfluss auf das Leistungsverhalten des Mikroprozessors
ausüben.
-
Aus
diesen und weiteren Gründen
werden ein Verfahren und eine Vorrichtung zum Reduzieren der Vordecodierungszeit
benötigt.
Insbesondere ist ein Verfahren und eine Vorrichtung zum Reduzieren der
Zeit wünschenswert,
die zum Erzeugen der Vordecodierungsinformation für Befehle
erforderlich ist, die zuvor in einem Befehlscache-Speicher verworfen wurden.
-
In
dem
US-Patent 6,092,182 mit
dem Titel "Verwenden
von ECC/Paritätsbits
zur Speicherung von Vordecodierungsinformation", von Rupaka Mahalingaiah, ist eine
mögliche
Lösung
für diese
Probleme aufgezeigt, d. h. das Speichern der Vordecodierungsinformation
in den ECC/Paritätsbits
eines Cache-Speichers der Ebene 2. Vorteilhafterweise kann die Verzögerung für das Vordecodieren
von angesprochenen Befehlsbytes in einigen Fällen umgangen werden.
-
Jedoch
bleiben in der vorgeschlagenen Lösung
die in dem Cache-Speicher der Ebene 2 gespeicherten Daten ungeschützt vor
Einzel- und Mehrfachbitfehler. Unter Berücksichtigung der höheren Betriebsfrequenzen
von aktuellen Mikroprozessoren und dem höheren Grad an Integration sind
Speicherfehler in den Cache-Speichern ein potentielles Problem insbesondere
in Cache-Speichern. Somit sind ein System und ein Verfahren wünschenswert,
die in der Lage sind, die Menge der Vordecodierungsinformation zu
reduzieren, die verworfen wird, wobei dennoch die Möglichkeit
beibehalten wird, zumindest einige der üblicheren Arten von Fehlern
(beispielsweise Einzelbitfehler) zu erkennen.
-
Überblick über die Erfindung
-
Die
zuvor angegebene Aufgabe wird gelöst durch einen Mikroprozessor,
wie er im Anspruch 1 definiert ist, und durch ein Verfahren zum
Betreiben eines Mikroprozessors, wie es in Anspruch 5 definiert ist.
-
Weitere
Ausführungsformen
sind in den abhängigen
Patentansprüchen
2 bis 4 und 6 bis 8 angegeben.
-
Kurze Beschreibung der Zeichnungen
-
Weitere
Aufgaben und Vorteile der Erfindung gehen aus dem Studium der detaillierten
Beschreibung hervor, wenn Bezug genommen wird auf die begleitenden
Zeichnungen, in denen:
-
1 eine
Blockansicht eines allgemeinen x86-Befehlsformats ist;
-
2 eine
Blockansicht ist, in der eine Ausführungsform einer gültigen Maske
gezeigt ist;
-
3 eine
Blockansicht einer Ausführungsform
eines Mikroprozessors ist;
-
4 eine
Ansicht ist, die Details einer Ausführungsform der Schnittstelle
zwischen dem Befehlscache-Speicher der 3 und einem
Cache-Speicher der Ebene 2 zeigt;
-
5 eine
Ansicht ist, die Details der Beziehung zwischen einer Ausführungsform
des Befehlscache-Speichers, der in 4 gezeigt
ist, und einer Ausführungsform
des Cache-Speichers
der Ebene 2 aus 4 darstellt;
-
6 ein
Flussdiagramm ist, das eine Ausführungsform
eines Verfahrens zum Speichern von Vordecodierungsinformation in
einem Cache-Speicher der Ebene 2 zeigt;
-
7a bis 7b Ansichten
sind, die unterschiedliche Ausführungsformen
eines Systems zum Speichern von zu verwerfender Vordecodierungsinformation
zeigen;
-
8a bis 8b Flussdiagramme
sind, die unterschiedliche Ausführungsformen
zum Verfahren zum Speichern von zu verwerfender Vordecodierungsinformation
zeigen;
-
9 eine
Ansicht einer weiteren Ausführungsform
eines Systems ist, um zu verwerfende Vordecodierungsinformation
zu speichern;
-
10 eine
Ansicht ist, die eine Ausführungsform
eines Computersystems unter Verwendung des Mikroprozessors aus 3 zeigt.
-
Obwohl
die Erfindung diversen Modifizierungen und alternativen Formen unterliegen
kann, sind dennoch spezielle Ausführungsformen beispielhaft in den
Zeichnungen dargestellt und werden im Weiteren detailliert beschrieben.
Es sollte jedoch beachtet werden, dass die Zeichnungen und die detaillierte Beschreibung
davon nicht beabsichtigen, die Erfindung auf die speziellen offenbarten
Formen einzuschränken,
sondern es ist vielmehr beabsichtigt, alle Modifizierungen, Äquivalente
und Alternativen abzudecken, die innerhalb des Schutzbereichs der
vorliegenden Erfindung liegen, wie sie durch die angefügten Patentansprüche definiert
ist. Die hierin verwendeten Überschriften
sind lediglich zur besseren Gestaltung vorgesehen und sollen den
Schutzbereich der Beschreibung oder der Ansprüche nicht einschränken. Der
Begriff "kann" wird durchwegs in
dieser Anmeldung in einem möglichen
Sinne (d. h. in der Bedeutung "hat
die Fähigkeit
zu") verwendet,
und nicht in einem bestimmenden Sinne (d. h. in der Bedeutung von
muss). In ähnlicher
Weise bedeuten die Begriffe "enthalten", "einschließlich" und "mit" enthaltend im Sinne,
dass keine Beschränkung
auf diese Elemente beabsichtigt ist.
-
Arten zum Ausführen der
Erfindung
-
3 zeigt
eine Blockansicht einer Ausführungsform
eines Mikroprozessors 10. Der Mikroprozessor 10 enthält eine
Vorabhol/Vordecodiereinheit 12, eine Verzweigungsvorhersageeinheit 14,
einen Befehlscache-Speicher 16, eine Befehlsausrichteinheit 18,
mehrere Decodiereinheiten 20a bis 20c, mehrere
Reservierstationen 22a bis 22c, mehrere Funktionseinheiten 24a bis 24c,
eine Lade/Schreibeinheit 26, einen Datencache-Speicher 28,
eine Registerdatei 30, einen Umordnungspuffer 32 und
eine MROM-Einheit 34. Elemente, die hierin mit einem speziellen
Bezugszeichen mit anschließendem Buchstaben
bezeichnet sind, werden auch gemeinsam mit dem Bezugszeichen alleine
benannt. Beispielsweise können
die Reservierstationen 22a bis 22c auch zusammen
als Reservierstationen 22 bezeichnet werden.
-
Die
Vorabhol/Vordecodiereinheit 12 ist ausgebildet, Befehle
aus einem Hauptspeichersubsystem (nicht gezeigt) zu empfangen und
ist ferner mit dem Befehlscache-Speicher 16 und der Verzweigungsvorhersageeinheit 14 verbunden.
In ähnlicher Weise
ist die Verzweigungsvorhersageeinheit 14 mit dem Befehlscache-Speicher 16 verbunden.
Die Verzweigungsvorhersageeinheit 14 ist ferner mit der
Befehlsausrichteinheit 18 und den Funktionseinheiten 24a bis
c verbunden. Der Befehlscache-Speicher 16 ist ferner mit
der MROM-Einheit 34 und der Befehlsausrichteinheit 18 verbunden.
Die Befehlsausrichteinheit 18 ist wiederum mit der Lade/Schreibeinheit 26 und
jeweiligen Decodiereinheiten 20a bis c verbunden. Die entsprechenden
Decodiereinheiten 20a bis c sind mit den Reservierstationen 22a bis
c verbunden, die ferner mit entsprechenden Funktionseinheiten 24a bis
c verbunden sind. Des weiteren sind die Befehlsausrichteinheit 18 und
die Reservierstationen 22 mit der Registerdatei 30 und
dem Unordnungspuffer 32 verbunden. Die Funktionseinheiten 24 sind
mit der Lade/Schreibeinheit 26, der Registerdatei 30 und
dem Unordnungspuffer 32 verbunden. Der Datencache-Speicher 28 ist
mit der Lade/Schreibeinheit 26 und dem Hauptspeichersubsystem
verbunden. Schließlich
ist die MROM-Einheit 34 mit der Befehlsausrichteinheit 18 verbunden.
-
Befehle
werden aus dem Hauptspeicher durch die Vorabhol/Vordecodiereinheit 12 abgeholt. Die
Vorabhol/Vordecodiereinheit 12 decodiert vorläufig die
Befehle mit variabler Länge
in Befehle mit festgelegter Länge,
die dann in dem Befehlscache-Speicher 16 abgelegt werden.
Befehle können
vorabgeholt und vordecodiert werden unter Anwendung eines Vorabholschemas,
bevor sie tatsächlich
angefordert werden. Es können
eine Vielzahl von Vorabholschemata mittels der Vorabhol/Vordecodiereinheit 12 angewendet
werden. Wenn eine detailliertere Beschreibung der Vordecodiereinheit 12 und
des Befehlscache-Speichers 16 angegeben werden soll, werden
allgemeine Aspekte im Hinblick auf die Ausführungsform des beispielhaften
Mikroprozessors 10, der in der Figur dargestellt ist, beschrieben.
-
Der
Mikroprozessor 10 verwendet eine Verzweigungsvorhersage,
um in spekulativer Weise Befehle, die auf bedingte Verzweigungsbefehle
folgen, abzuholen. Die Verzweigungsvorhersageeinheit 14 ist
vorgesehen, um Verzweigungsvorhersageoperationen auszuführen. In
einer Ausführungsform
werden bis zu zwei Verzweigungszieladressen für jeden 16 Byte-Bereich jeder
Cache-Zeile in dem Befehlscache-Speicher 16 gespeichert.
Die Vorabhol/Vordecodiereinheit 12 bestimmt anfängliche
Verzweigungsziele, wenn eine spezielle Zeile vordecodiert wird. Nachfolgende
Aktualisierungen der Ver zweigungsziele entsprechend einer Cache-Zeile
können
auf Grund des Ausführens
von Befehlen innerhalb der Cache-Zeile auftreten. Der Befehls-Cache-Speicher 16 liefert
eine Angabe für
die Befehlsadresse, die gerade an die Verzweigungsvorhersageeinheit 14 geliefert
wird. Dies ermöglicht
der Verzweigungsvorhersageeinheit 14 zu bestimmen, welche
Verzweigungszieladressen auszuwählen
sind, wenn eine Verzweigungsvorhersage erstellt wird. Die Befehlsausrichteinheit 18 und
die Funktionseinheiten 24 liefern Aktualisierungsinformation
für die
Verzweigungsvorhersageeinheit 14. Da die Verzweigungsvorhersageeinheit 14 zwei
Ziele pro 16-Byte-Bereich der Cache-Zeile speichert, können Vorhersagen
für einige Verzweigungsbefehle
in der Zeile nicht in der Verzweigungsvorhersageeinheit 14 gespeichert
werden. Die Befehlsausrichteinheit 18 ist ausgebildet,
Verzweigungsbefehle zu erkennen, die nicht von der Verzweigungsvorhersageeinheit 14 vorhergesagt wurden.
Die Funktionseinheiten 24 führen die Verzweigungsbefehle
aus und bestimmen, ob die vorhergesagte Verzweigungsrichtung falsch
vorhergesagt war. Die Verzweigungsrichtung kann "genommen" werden, wobei nachfolgende Befehle
bezüglich der
Zieladresse des Verzweigungsbefehls abgeholt werden. Andererseits
kann die Verzweigungsrichtung "nicht
genommen" werden,
wobei nachfolgende Befehle aus Speicherstellen abgeholt werden,
die auf den Verzweigungsbefehl folgen. Wenn ein falsch vorhergesagter
Verzweigungsbefehl erkannt wird, werden Befehle, die auf die falsch
vorhergesagte Verzweigung folgen, in den diversen Einheiten des
Mikroprozessors 10 verworfen. Es kann eine Reihe geeigneter
Verzweigungsvorhersagealgorithmen in der Verzweigungsvorhersageeinheit 14 eingesetzt
werden.
-
Der
Befehlscache-Speicher 16 ist ein Hochgeschwindigkeitscache-Speicher,
der zum Speichern von Befehlen vorgesehen ist, die aus der Vorabhol/Vordecodiereinheit 12 erhalten
werden. Gespeicherte Befehle werden dann aus dem Befehlscache-Speicher 16 abgeholt
und an die Befehlsausrichteinheit 18 weitergeleitet. In
einer Ausführungsform
ist der Befehlscache-Speicher 16 als eine teilassoziative
Struktur aufgebaut. Der Befehlscache-Speicher 16 kann zusätzlich ein
Wegevorhersageschema anwenden, um die Zugriffszeit zu verringern.
Beispielsweise kann anstelle des Zugreifens auf Markierungen, die
jede Zeile von Befehlen kennzeichnen, und statt dem Vergleichen
der Markierungen mit der Abholadresse zur Auswahl eines Weges der
Befehlscache-Speicher 16 den Weg vorhersagen, auf den zugegriffen
wird. Auf diese Weise wird der Weg spekulativ vor dem Zugreifen
auf das Array ausgewählt. Unter
Anwendung der Vorhersage von Wegen können die Zugriffszeiten für den Befehlscache-Speicher 16 ähnlich sein
zu einem direkt zugeordneten Cache-Speicher. Nachdem die Befehlsbytes
ausgelesen sind, wird ein Vergleich der Markierungen zur Verifizierung
durchgeführt.
Wenn die Wegevorhersage nicht korrekt ist, werden die richtigen
Befehlsbytes abgeholt und die nicht korrekten Befehlsbytes (die weiter
abwärts
in der Verarbeitungs-Pipeline liegen) werden verworfen. Zu beachten
ist, dass der Befehlscache-Speicher 16 als vollständig assoziative,
teilassoziative oder direkt abgebildete Konfiguration eingerichtet
werden kann.
-
Die
MROM-Einheit 34 ist ein Nur-Lese-Speicher, der ausgebildet
ist, Sequenzen aus "schnellen Pfad-Befehlen" zu speichern. Schnelle
Pfad-Befehle sind Befehle, die von den Decodierern 20a bis 20c und
den Funktionseinheiten 24a bis c ausgeführt werden können. Im
Gegensatz dazu sind "MROM-Befehle" Befehle, die zu
komplex sind, um direkt von den Decodierern 20a bis c und
den Funktionseinheiten 24a bis c decodiert oder ausgeführt zu werden.
Wenn der Befehlscache-Speichern 16 einen MROM-Befehl ausgibt,
reagiert die MROM-Einheit 34 darauf, indem eine Sequenz
aus schnellen Pfad-Befehlen
ausgegeben wird. Genauer gesagt, die MROM-Einheit 34 analysiert
und übersetzt
den MROM-Befehl in eine Teilmenge aus definierten schnellen Pfad-Befehlen,
um die gewünschte
Operation zu bewirken. Die MROM-Einheit 34 gibt die Teilmenge
der schnellen Pfad-Befehle zu den Decodiereinheiten 20a bis
c aus.
-
Sobald
Befehlsbytes aus dem Befehlscache-Speicher 16 abgeholt
sind, werden diese zu der Befehlsausrichteinheit 18 übertragen.
Die Befehlsausrichteinheit 18 leitet die Befehle zu einer
der Decodiereinheiten 20a bis c weiter. Es wird auch die
Registeroperandeninformation erkannt und der Registerdatei 30 und
dem Umordnungspuffer 32 zugeleitet. Wenn zusätzlich die
Befehle das Ausführen
einer oder mehrerer Speicheroperationen erfordern, gibt die Befehlsausrichteinheit 18 die
Speicheroperationen an die Lade/Schreibeinheit 26 aus.
Jeder decodierte Befehl wird an die Reservierstationen 22 zusammen
mit den Operandenadresseninformationen und den Verschiebungsdaten
oder unmittelbaren Daten, die in den Befehl enthalten sein können, ausgegeben.
-
Der
Mikroprozessor 10 unterstützt eine Ausführung außerhalb
der Reihenfolge und verwendet daher den Umordnungspuffer 32,
um die ursprüngliche
Programmreihenfolge für
Registerlese- und Schreiboperationen zu verfolgen, die Registerumbenennung
einzurich ten, eine spekulative Befehlsausführung und Wiederherstellung
nach Verzweigungsfehlvorhersage zu ermöglichen und um genaue Ausnahmebehandlungen
zu er ermöglichen.
Eine temporäre
Speicherstelle innerhalb des Umordnungspuffers 32 wird
beim Decodieren eines Befehls reserviert, wobei das Aktualisieren
eines Registers beteiligt ist. Der temporäre Speicherplatz speichert
den spekulativen Registerzustand, der sich aus der spekulativen
Ausführung
eines Befehls ergibt. Wenn eine Verzweigungsvorhersage nicht korrekt
ist, können
die Ergebnisse aus den spekulativ ausgeführten Befehlen entlang des
falsch vorhergesagten Pfades in dem Umordnungspuffer 32 als
ungültig
erklärt
werden, bevor diese in die Register 330 geschrieben werden.
Wenn in ähnlicher
Weise ein spezieller Befehl eine Ausnahmebehandlung bewirkt, werden
Befehle nachfolgend zu dem die Ausnahmebehandlung hervorrufenden
Befehl verworfen. Auf diese Weise werden Ausnahmebehandlungen "präzise" (d. h. Befehle nachfolgend
zu dem die Ausnahmebehandlung hervorrufenden Befehl werden nicht
abgeschlossen vor der Ausnahmebehandlung). Zu beachten ist, dass
ein spezieller Befehl spekulativ ausgeführt wird, wenn dieser vor den
Befehlen ausgeführt
wird, die dem speziellen Befehl in der Programmreihenfolge vorausgehen.
Vorhergehende Befehle können
ein Verzweigungsbefehl oder eine Ausnahmebehandlung hervorrufender
Befehl sein, in welchem Falle die spekulativen Ergebnisse von dem
Umordnungspuffer 32 verworfen werden können.
-
Die
decodierten Befehle und die unmittelbaren Daten oder die Versetzungsdaten,
die an den Ausgängen
der Befehlsausrichteinheit 18 bereitgestellt werden, werden
direkt den entsprechenden Reservierstationen 22 zugeleitet.
In einer Ausführungsform
ist jede Reservierstation 22 ausgebildet, Befehlsinformation
zu halten (d. h. decodierte Befehle sowie Operandenwerte, Operandenmarkierungen und/oder
unmittelbare Daten) für
bis zu drei anhängige
Befehle, die auf die Ausgabe zu der entsprechenden Funktionseinheit
warten. Zu beachten ist, dass für
die in der Figur gezeigte Ausführungsform
jede Reservierstation 22 mit einer zugeordneten Funktionseinheit 24 verknüpft ist.
Folglich werden drei entsprechende "Ausgabepositionen" durch die Reservierstationen 22 und
die Funktionseinheit 24 gebildet. Anders ausgedrückt, die
Ausgabeposition Null wird durch die Reservierstation 22 und
die Funktionseinheit 24a gebildet. Befehle, die für die Reservierstation 22a vorbereitet
und an diese ausgegeben werden, werden von der Funktionseinheit 24a ausgeführt. In ähnlicher
Weise wird die Ausgabeposition 1 durch die Reservier station 22b und
die Funktionseinheit 24b gebildet; schließlich wird
die Ausgabeposition 2 durch die Reservierstation 22c und
de Funktionseinheit 24c gebildet.
-
Beim
Decodieren eines speziellen Befehls wird, wenn ein erforderlicher
Operand eine Registerstelle ist, die Registeradresseninformation
an den Umordnungspuffer 32 und gleichzeitig an die Registerdatei 30 weitergeleitet.
Der Fachmann erkennt, dass die x86-Registerdatei 8 32-Bit-Realregister
enthält
(d. h., diese werden typischerweise als EAX, EBX, EXX, EDX, EBP,
ES, EDI und ESP bezeichnet). In Ausführungsformen des Mikroprozessors 10,
in denen die x86-Mikroprozessorarchitektur eingesetzt ist, umfasst
die Registerdatei 30 Speicherplätze für jedes der 32-Bit-Realregister.
Weitere Speicherplätze
können
in der Registerdatei 30 zur Verwendung durch die MROM-Einheit 34 vorgesehen
sein. Der Umordnungspuffer 32 enthält temporäre Speicherplätze für Ergebnisse,
die den Inhalt dieser Register ändern,
um damit eine Abarbeitung außerhalb
der Reihenfolge zu ermöglichen.
Ein temporärer
Speicherplatz des Umordnungspuffers 32 ist für jeden
Befehl reserviert, der beim Decodieren als einer erkannt wird, der
den Inhalt eines der realen Register modifiziert. Daher kann zu
diversen Zeitpunkten während des
Ausführens
eines speziellen Programms der Umordnungspuffer 32 eine
oder mehrere Speicherstellen aufweisen, die den spekulativ ausgeführten Inhalt
eines gegebenen Registers enthalten.
-
Wenn
nach dem Decodieren eines gegebenen Befehls bestimmt wird, dass
der Umordnungspuffer 32 eine vorhergehende Speicherstelle
oder Speicherstellen aufweist, die einem Register zugeordnet sind,
das als ein Operand in dem gegebenen Befehl verwendet wird, leitet
der Umordnungspuffer 32 an die entsprechende Reservierstation
weiter 1) den Wert in der jüngst
zugeordneten Speicherstelle, oder 2) eine Markierung für die jüngste zugeordnete Speicherstelle,
wenn der Wert durch die Funktionseinheit noch nicht erzeugt ist,
die schließlich
den vorhergehenden Befehl ausführen
wird. Wenn der Umordnungspuffer 32 eine Speicherstelle
besitzt, die für ein
gegebenes Register reserviert ist, wird der Operandenwert (oder
die Umordnungspuffermarkierung) von dem Umordnungspuffer 32 anstatt
von der Registerdatei 30 bereitgestellt. Wenn es keine
Speicherstelle gibt, die für
ein erforderliches Register in dem Umordnungspuffer 32 reserviert
ist, wird der Wert direkt aus der Registerdatei 30 genommen.
Wenn der Operand einer Speicherstelle entspricht, wird der Operandenwert
der Reservierstation über
die Lade/Schreibeinheit 26 zugeführt.
-
In
einer speziellen Ausführungsform
ist der Umordnungspuffer 32 ausgebildet, gleichzeitig decodierte
Befehle als eine Einheit zu speichern und zu manipulieren. Diese
Konfiguration wird im Weiteren als "zeilenorientiert" bezeichnet. Durch Bearbeiten mehrerer
Befehle gleichzeitig kann die Hardware, die in dem Umordnungspuffer 32 eingesetzt
ist, vereinfacht werden. Beispielsweise reserviert ein zeilenorientierter
Umordnungspuffer, der in der vorliegenden Ausführungsform vorgesehen ist,
Speicherplatz, der für
Befehlsinformation ausreichend ist, die sich auf drei Befehle bezieht,
und dies geschieht, sobald ein oder mehrere Befehle von der Befehlsausrichteinheit 18 ausgegeben
werden. Im Gegensatz dazu wird eine variable Menge an Speicherplatz
in konventionellen Umordnungspuffern abhängig von der Anzahl der tatsächlich ausgegebenen
Befehle reserviert. Es ist eine verhältnismäßig große Anzahl an Logikgattern erforderlich,
um die variable Menge an Speicherplatz zu reservieren. Wenn jeder
der gleichzeitig decodierten Befehle ausgeführt ist, werden die Ergebnisse
der Befehle gleichzeitig in der Registerdatei 30 gespeichert.
Der Speicherplatz ist dann für
eine Zuordnung zu einer weiteren Gruppe aus gleichzeitig decodierten
Befehlen verfügbar.
Ferner wird der Anteil an Steuerlogikschaltung, die pro Befehl verwendet
wird, verringert, da sich für
die Steuerlogik auf mehrere gleichzeitig Befehle verteilt. Eine
Umordnungspuffermarkierung, die einen speziellen Befehl kennzeichnet,
kann in zwei Felder unterteilt werden: eine Zeilenmarkierung und
eine Versatz- bzw. Abstands- oder Offsetmarkierung. Die Zeilenmarkierung
kennzeichnet die Gruppe aus gleichzeitig decodierten Befehlen, die
den speziellen Befehl enthalten, und die Versatzmarkierung kennzeichnet,
welcher Befehl innerhalb der Gruppe dem speziellen Befehl entspricht.
Zu beachten ist, dass das Speichern von Befehlsergebnisse in der
Registerdatei 30 und das Freigeben des entsprechenden Speicherplatzes
als "Abschließen bzw.
Zurücknehmen" der Befehle bezeichnet
wird. Des weiteren ist zu beachten, dass eine beliebige Umordnungspufferkonfiguration
in den diversen Ausführungsformen
des Mikroprozessors 10 eingesetzt werden kann.
-
Wie
zuvor beschrieben ist, speichern die Reservierstationen 22 Befehle,
bis die Befehle durch die entsprechende Funktionseinheit 24 ausgeführt werden.
Ein Befehl wird für
die Ausführung
ausgewählt, wenn:
(i) die Operanden des Befehls bereitgestellt sind; und (ii) die
Operanden noch nicht für
Befehle bereitgestellt sind, die innerhalb der gleichen Reservierstationen 22a bis 22c vorhanden
sind und die vor dem Befehl entsprechend der Programmreihenfolge liegen.
Zu beachten ist, dass, wenn ein Befehl durch eine der Funktionseinheiten 24 ausgeführt wird,
das Ergebnis dieses Befehls direkt zu einer Reservierstation 22 weitergeleitet
wird, die auf dieses Ergebnis wartet, wobei dies gleichzeitig mit
dem Weiterleiten des Ergebnisses zur Aktualisierung des Umordnungspuffers 32 geschieht
(diese Technik wird üblicherweise
als "Ergebnisweiterleitung" bezeichnet). Ein
Befehl kann zur Ausführung
ausgewählt
und an eine Funktionseinheit 24a bis 24c während des
Taktzyklus weitergeleitet werden, in welchem das zugehörige Ergebnis
weitergeleitet wird. Die Reservierstationen 22 geben das
weitergeleitete Ergebnis in diesem Falle an die Funktionseinheit 24 weiter.
-
In
einer Ausführungsform
ist jede Funktionseinheit 24a bis 24c ausgebildet,
Ganzzahlarrithmetikoperationen für
Addition und Subtraktion, sowie Verschiebungen, Rotationen, logische
Operationen und Verzweigungsoperationen auszuführen. Zu beachten ist, dass
eine Gleitkommaeinheit (nicht gezeigt) ebenfalls eingesetzt werden
kann, um Gleitkommaoperationen zu ermöglichen. Die Gleitkommaeinheit kann
als ein Koprozessor betrieben werden, der Befehle aus der MROM-Einheit 34 erhält und nachfolgend
mit dem Umordnungspuffer 32 in Verbindung tritt, um die
Befehle abzuschließen.
Des weiteren können
die Funktionseinheiten 24 ausgebildet sein, eine Adressenerzeugung
für das
Laden und Speichern von Speicheroperationen, die von der Lade/Schreibeinheit 26 ausgeführt werden,
auszuführen.
-
Jede
der Funktionseinheiten 24 liefert auch Information im Hinblick
auf das Ausführen
bedingter Verzweigungsbefehle an die Verzweigungsvorhersageeinheit 14.
Wenn eine Verzweigungsvorhersage nicht korrekt war, verwirft die
Verzweigungsvorhersageeinheit 14 Befehle, die nach der
falsch vorhergesagten Verzweigung auftreten, die die Befehlsverarbeitungspipeline
gerade durchlaufen, und bewirkt ein Abholen der erforderlichen Befehle
aus dem Befehlscache-Speicher 16 oder dem Hauptspeicher.
Zu beachten ist, dass in derartigen Situationen die Ergebnisse von
Befehlen in der ursprünglichen
Programmreihenfolge, die nach dem falsch vorhergesagten Verzweigungsbefehl
auftreten, verworfen werden, wozu jene gehören, die spekulativ ausgeführt wurden und
temporär
in der Lade/Schreibeinheit 26 und dem Umordnungspuffer 32 gespeichert
wurden.
-
Die
von den Funktionseinheiten 24 erzeugten Ergebnisse werden
an den Umordnungspuffer 32 weitergegeben, wenn ein Registerwert
aktualisiert wird, und werden auch an die Lade/Schreibeinheit 26 weitergegeben,
wenn der Inhalt einer Speicherstelle geändert wird. Wenn das Ergebnis
in einem Register zu speichern ist, speichert der Umordnungspuffer 32 das
Ergebnisse in der Speicherstelle, die für den Wert des Registers reserviert
wurde, wenn der Befehl decodiert wurde. Es sind mehrere Ergebnisbusse 38 zur
Weiterleitung von Ergebnissen von Funktionseinheiten 24 und
der Lade/Schreibeinheit 26 vorgesehen. Die Ergebnisbusse 38 übertragen
das erzeugte Ergebnis sowie die Umordnungspuffermarkierung, die
den gerade auszuführenden
Befehl kennzeichnet.
-
Die
Lade/Schreibeinheit 26 stellt eine Schnittstelle zwischen
den Funktionseinheiten 24 und dem Datencache-Speicher 28 bereit.
In einer Ausführungsform
ist die Lade/Schreibeinheit 26 mit einem Lade/Schreibpuffer
mit 8 Speicherplätzen
für Daten-
und Adresseninformationen für
anhängige Ladebefehle
oder Schreibbefehle versehen. Wenn der Puffer voll ist, wartet die
Befehlsausrichteinheit 18, bis die Lade/Schreibeinheit 26 Platz
für die
anhängige
Anforderungsinformation für
Lade- oder Schreibbefehle hat. Die Lade/Schreibeinheit 26 führt ferner
eine Abhängigkeitsprüfung für Ladespeicheroperationen
im Hinblick auf anhängige
Schreibspeicheroperationen durch, um sicherzustellen, dass die Datenkohärenz bewahrt
wird. Eine Speicheroperation ist ein Datenaustausch zwischen dem
Mikroprozessor 10 und dem Hauptspeichersubsystem. Speicheroperationen
können
das Ergebnis eines Befehls sein, der einen Operanden verwendet,
der in einem Speicher abgelegt ist, oder diese können das Ergebnis eines Lade/Schreibbefehls
sein, der einen Datenaustausch aber keine weitere Operationen hervorruft.
Ferner kann die Lade/Schreibeinheit 26 einen speziellen
Registerspeicherplatz für
spezielle Register aufweisen, etwa die Segmentregister oder andere Register,
die mit dem Adressenübersetzungsmechanismus
verknüpft
sind, der durch die x86-Mikroprozessorarchitektur definiert ist.
-
In
einer Ausführungsform
ist die Lade/Schreibeinheit 26 ausgebildet, Ladespeicheroperationen
spekulativ auszuführen.
Die Schreibspeicheroperationen können
in der Programmreihenfolge ausgeführt werden, können jedoch
spekulativ in dem vorhergesagten Weg gespeichert werden. Wenn der vorhergesagte
Weg nicht korrekt ist, werden die Daten vor der Schreibspeicheroperation
nachfolgend in dem vorhergesagten Weg gespeichert und die Schreibspeicheroperation
wird für
den korrekten Weg ausgeführt.
In einer weiteren Ausführungsform
können
Schreiboperationen ebenfalls spekulativ ausgeführt werden. Spekulativ ausgeführte Schreiboperationen
werden in einem Schreibpuffer zusammen mit einer Kopie der Cache-Zeile
vor der Aktualisierung abgelegt. Wenn der spekulativ ausgeführte Schreibvorgang
später
auf Grund einer Verzweigungsfehlvorhersage oder einer Ausnahmebehandlung
verworfen wird, kann die Cache-Zeile durch den in dem Puffer gespeicherten
Wert aktualisiert werden. Zu beachten ist, dass die Lade/Schreibeinheit 26 ausgebildet
ist, einen beliebigen Grad an spekulativer Ausführung auszuführen, wobei
auch der Fall des nicht-spekulativen Ausführens enthalten ist.
-
Der
Datencache-Speicher 28 ist ein Hochgeschwindigkeitscache-Speicher,
der vorgesehen ist, um temporär
Daten zu speichern, die zwischen der Lade/Schreib-Einheit 26 und
dem Hauptspeichersubsystem ausgetauscht werden. In einer Ausführungsform
besitzt der Datencache-Speicher 28 eine Kapazität zur Speicherung
von bis zu 16 Kilobytes an Daten in einer 8-Wege-teilassoziativen
Struktur. Ähnlich zu
dem Befehlscache-Speicher 16 verwendet auch der Datencache-Speicher 28 einen
Wegevorhersagemechanismus. Zu beachten ist, dass der Datencache-Speicher 28 in
einer Vielzahl an spezifischen Speicherkonfigurationen eingerichtet
werden kann, wozu teilassoziative Konfigurationen und direkt zugeordnete
Konfigurationen gehören.
-
In
einer speziellen Ausführungsform
des Mikroprozessor 10 unter Verwendung der x86-Mikroprozessorarchitektur
werden der Befehlscache-Speicher 16 und der Datencache-Speicher 28 linear adressiert.
Die lineare Adresse wird aus dem Offset bzw. Versatz, der durch
den Befehl angegeben ist, und der Basisadresse, die durch den Segmentbereich
des x86-Adressenübersetzungsmechanismus spezifiziert
wird, gebildet. Lineare Adressen können optional in physikalische
Adressen zum Zugreifen auf einen Hauptspeicher übersetzt werden. Die Übersetzung
von linearer zu physikalischer Adresse wird durch den Seitenbereich
des x86-Adressenübersetzungsmechanismus
angegeben. Zu beachten ist, dass ein linear adressierter Cache-Speicher
lineare Adressenmarkierungen enthält. Eine Gruppe aus physikalischen
Markierungen (nicht gezeigt) kann eingesetzt werden, um die linearen
Adressen den physikalischen Adressen zuzuordnen und den Alias- Namen der Übersetzung
zu erkennen. Ferner kann der Block für die physikalischen Markierungen eine Übersetzung
von linearer zu physikalischer Adresse ausfüllen.
-
Vorabhol/Vordecodiereinheit
und Befehlscache-Konfiguration
-
Wie
zuvor beschrieben ist, können
viele Speichereinrichtungen, die zur Verwendung als externe Cache-Speicher
für Mikroprozessoren
gestaltet sind, beispielsweise der 84941/82493-Cache-SRAM von Intel,
ausgebildet sein, um Paritätsinformation
zu speichern. In einer Ausführungsform
wird ein Paritätsbit
für jeweils
8 Datenbits gespeichert. Wenn angenommen wird, dass eine gerade
Parität
gewünscht ist,
besäße ein Datenbyte
von 011010112 ein gesetztes Paritätsbit derart,
dass die Gesamtzahl der gesetzten Bits geradzahlig ist. Das Pariätsbit kann
von dem Mikroprozessor erzeugt werden und dann in dem externen Cache-Speicher
zusammen mit dem Datenbyte abgelegt werden. Wenn der Mikroprozessor
die Daten aus dem Cache-Speicher wieder ausliest, kann dieser die
gesetzten Daten- und Paritätsbits
zählen.
Wenn der resultierende Wert nicht mit der ausgewählten Parität übereinstimmt, dann ist ein
Paritätsfehler
aufgetreten und der Mikroprozessor kann geeignete Maßnahmen
ergreifen, beispielsweise Anzeigen des Auftretens eines Speicherfehler
an das Betriebssystem. Andere Speicherkonfigurationen können weitere
Bits für
die Fehlerprüfung
und Korrektur (ECC) reservieren.
-
Während anspruchsvolle
Systeme, etwa Server-Rechner typischerweise Parität und ECC
unterstützen,
entscheiden sich Entwickler für
weniger anspruchsvolle Systeme, diese Eigenschaften nicht zu aktivieren,
da eine relativ geringe Wahrscheinlichkeit für das Auftreten eines Datenfehlers
vorliegt. In diesen Systemen können
die Parität
und die ECC-Bits in den Cache-Speichern der Ebene 2 zum Speichern
von Vordecodierinformation verwendet werden. Dies kann vorteilhaft
sein zur Verbesserung des Leistungsverhaltens, ohne dass übermäßige Hardwareänderungen
auf Systemebene erforderlich sind.
-
4 zeigt
eine Ansicht, in der Details in einer Ausführungsform der Vordecodiereinheit 12 und des
Befehlscache-Speichers 16 gezeigt sind. In dieser Ausführungsform
ist die Vordecodiereinheit 12 mit einem Cache-Speicher 50 über eine
Busschnittstellenlogik 52 verbunden. Der Cache-Speicher 50 umfasst
einen Speicher mit großer
Bandbreite und geringer Zugriffszeit, der auf dem gleichen Chip
wie der Mikroprozessor 10 vorgesehen sein kann oder in einem
separaten Siliziumchip vorgesehen ist, der in der Nähe angeordnet
ist, beispielsweise auf einer Tochterplatine oder einer Mutterplatine
in der Nähe des
Mikroprozessors 10. Der Cache-Speicher 50 kann
einen statischen Speicher mit wahlfreiem Zugriff (SRAM), einen synchronen
dynamischen Speicher mit wahlfreiem Zugriff (SDRAM) oder eine andere
Art von Speicher mit geringer Zugriffszeit repräsentieren. Der Cache-Speicher 50 kann
auf dem gleichen Siliziumchip wie der Mikroprozessor 10 oder
auf einem separaten Siliziumchip vorgesehen werden. In einigen Ausführungsformen
wird der Cache-Speicher 50 als ein Cache-Speicher "der Ebene 2" bezeichnet, da er
der zweit nächst
liegende Cache-Speicher für die
Funktionseinheiten des Mikroprozessor 10 ist, d. h. dieser
ist hinter dem Befehlscache-Speicher 16 und dem Datencache-Speicher 28 der
Ebene 1 angeordnet. Der Cache-Speicher 50 kann ebenfalls
als ein "externer
Cache-Speicher" bezeichnet
werden, da dieser außerhalb
des Mikroprozessors liegt.
-
Die
Busschnittstellenlogik 52 umfasst Multiplexer, Puffer,
Sender/Empfänger,
Treiber eine andere Art von Busschnittstellenlogik, die in der Lage
ist, die Übertragung
von Daten, Adressen und Steuersignalen zwischen dem Mikroprozessor 10 und
dem Cache-Speicher 50 zu
ermöglichen
oder zu verbessern. In einigen Ausführungsformen ist keine Busschnittstellenlogik 52 zwischen
dem Mikroprozessor 10 und dem Cache-Speicher 50 der
Ebene 2 erforderlich. Wenn beispielsweise der Mikroprozessor 10 und
der Cache-Speicher
der Ebene 52 physikalisch nahe genug beieinander angeordnet
sind und die Ansteuerfähigkeit
ihrer Ausgangstransistoren groß genug
ist, dann können
der Mikroprozessor 10 und der Cache-Speicher 50 miteinander
ohne Busschnittstellenlogik 52 verbunden werden.
-
Die
Vordecodierlogik 12 ist ausgebildet, Befehlsadressen, die
aus der Verzweigungsvorhersageeinheit 14 vorläufig abzuholen
sind, zu empfangen und diese dem Cache-Speicher 50 über den
Bus 68, die Busschnittstellenlogik 52 und den
Speicherbus 56 zuzuführen.
Wenn der Cache-Speicher der Ebene 52 die Befehlsbytes speichert,
die der angeforderten Adresse entsprechen, werden eine vorbestimmte
Anzahl an Befehlsbytes (beispielsweise eine Cache-Zeile aus 32 Bytes
der Vordecodiereinheit 12 über den Bus 56, die
Busschnittstellenlogik 52 und den Bus 68 zugeführt. Wenn
die angeforderten Be fehlsbytes nicht in dem Cache-Speicher der Ebene 52 enthalten
sind, ist der Cache-Speicher 50 ausgebildet,
die angeforderten Befehlsbytes aus dem Hauptspeichersubsystem abzurufen.
Sobald die angeforderten Befehlsbytes aus dem Hauptspeichersubsystem übertragen
sind, werden diese dem Befehlscache-Speicher 16 zugeleitet.
Diese können auch
in dem Cache-Speicher 50 abgelegt werden.
-
Wenn
die Vordecodiereinheit 12 die angeforderten Befehlsbytes
empfängt,
erzeugt diese die Vordecodierinformation für jedes Befehlsbyte. In der
in der Figur gezeigten Ausführungsform
erzeugt die Vordecodiereinheit 12 für jedes Befehlsbyte ein Startbit.
Unter der Annahme, dass die Vordecodiereinheit 12 32 Bytes
(beispielsweise eine Cache-Zeile) in Reaktion auf das Ausgeben einer
angeforderten Adresse empfängt,
ist die Vordecodiereinheit 12 ausgebildet, ein Startbit
für jedes
Befehlsbyte und damit insgesamt 32 Startbits zu erzeugen. Sobald
die Startbits erzeugt sind, werden diese dem Befehlscache-Speicher 16 zugeleitet,
in welchem diese zusammen mit ihren zugehörigen Befehlsbytes gespeichert
werden. Der Befehlscache-Speicher 16 kann lokal in mehrere Cache-Zeilen
Speicherplätze 64 und
mehrere Vordecodierinformationsspeicherplätze 62 eingeteilt
sein, wobei ein einzelner Vordecodierinformationsspeicherplatz jeweils
einem Cachezeilenspeicherplatz entspricht. Die Befehlsbytes und
die Vordecodierungsbits können
ferner direkt der Befehlsausrichteinheit 18 zugeleitet
werden.
-
Sobald
alle Cache-Zeilenspeicherplätze 62 innerhalb
des Befehlscache-Speichers 16 voll sind, werden eine Reihe
unterschiedlicher Algorithmen eingesetzt, um zu entscheiden, welche
Cache-Zeile bei einem Cache-Nichttreffer ersetzt werden soll. Um beispielsweise
die Wahrscheinlichkeit zu reduzieren, Information auszulagern, die
in der näheren
Zukunft benötigt
wird, an ein "am
wenigsten aktuell verwendet" (LRU)
Austauschschema eingesetzt werden, das die Reihenfolge der Cache-Zugriffe
aufzeichnet. Wenn die zu überschreibende
Cache-Zeile ausgewählt
ist, wird die in dem entsprechenden Vordecodierungsspeicherplatz 62 gespeicherte
zugehörige Vordecodierungsinformation
aus dem Befehlscache-Speicher 16 an den Cache-Speicher 50 mittels der
Vordecodiereinheit 12 und der Busschnittstellenlogik 52 ausgegeben.
Die Vordecodiereinheit 12 überträgt auch die Adresse, die der
zu überschreibenden
Befehlscache-Information
entspricht.
-
Wenn
der Cache-Speicher 50 die Vordecodierbits und die entsprechende
Adresse aus der Vorabholeinheit 12 und dem Befehlscache-Speicher 16 empfängt, ist
der Cache-Speicher 50 ausgebildet,
die Vordecodierbits in dem Paritätsbitspeicherplätzen 60,
die der entsprechenden Adresse zugeordnet sind, zu speichern. In
einigen Ausführungsformen werden
die eigentlichen Befehlsbytes, die in dem Befehlscache-Speicher 16 zu überschreiben
sind, auch an den Cache-Speicher 50 zur Speicherung zusammen
mit dem Vordecodierbits ausgegeben. Diese Konfiguration kann in
einigen Ausführungsformen des
Mikroprozessors 10 vorteilhaft sein, um eine selbstmodifizierende
Codierung zu unterstützen.
Beispielsweise können
Schreibadressen von dem Befehlscache-Speicher 16 "durchsucht" werden, um zu bestimmen,
ob ein Schreibbefehl die in dem Befehlscache-Speicher 16 gespeicherten
Befehlsbytes überschreiben
wird. Wenn dies der Fall ist, wird der Schreibbefehl an dem Befehlscache-Speicher 16 und
dem Datencache-Speicher 28 ausgeführt, wodurch
die gewünschten
Befehlsbytes modifiziert werden. In einer derartigen Konfiguration
ist die Vordecodiereinheit 12 ausgebildet, die Vordecodierinformation
für den
Befehl emeut zu berechnen, der modifiziert wurde und anschließend die
neu berechneten Vordecodierungsbits in dem Befehlscache-Speicher 16 zu
speichern. Wenn der Cache-Speicher 50 als ein Rückschreibecache-Speicher
ausgebildet ist, können
die modifizierten Befehlsbytes später in den Cache-Speicher 50 geschrieben
werden, wenn der Cache-Zeilenspeicherplatz, der die modifizierten
Befehlsbytes hält,
in dem Befehlscache-Speicher 16 überschrieben wird.
-
Nachdem
die Vordecodierungsinformation (und Befehlsbytes, wenn diese so
konfiguriert sind) in den Cache-Speicher 50 geschrieben
ist, können
die Cache-Zeilenspeicherplätze
und die Vordecodierungsinformationsspeicherplätze in dem Befehlscache-Speicher 16 durch
neue Befehlsbytes und neue Vordecodierungsinformationen gefahrlos überschrieben
werden. Wenn die Vordecodierungseinheit 12 eine Vorabhol-
oder Abholanforderung für
Befehlsbytes erhält,
die an den Cache-Speicher 50 ausgegeben wurden, gibt die
Vordecodierungseinheit 12 die angeforderte Adresse an den
Cache-Speicher 50 aus. Wenn der Cache-Speicher 50 weiterhin
die entsprechenden Befehlsbytes und die Vordecodierungsinformation
(d. h. diese wurde nicht ersetzt) speichert, dann ist der Cache-Speicher 50 ausgebildet, diese
zu der Vordecodiereinheit 12 zu übertragen. Die Vordecodiereinheit 12 überträgt die Befehlsbytes und
die entsprechende Vordecodierungsinformation an die Befehlsausrichteinheit 18 und
dem Befehlscache-Speicher 16. Vorteil hafterweise kann in
dieser Ausführungsform
der Vorgang des Erzeugens einer neuen Vordecodierungsinformation
für die
angeforderten Befehlsbytes umgangen werden. Wie zuvor beschrieben
ist, kann dies besonders vorteilhaft in einigen Ausführungsformen
des Mikroprozessors 10 sein, wenn eine Verzweigungsfehlvorhersage
oder ein Nicht-Treffer für
den Cache-Speicher auftritt und die Funktionseinheiten 24a bis
c in Gefahr sind, die Bearbeitung zu unterbrechen.
-
Wenn
andererseits der Cache-Speicher 50 die gewünschten
Befehlsbytes durch andere Befehlsbytes, die in einer anderen Adresse
enthalten sind, ersetzt hat, ist der Cache-Speicher 50 ausgebildet, die
angeforderten Bytes aus dem Hauptspeicher abzurufen und diese an
die Vordecodiereinheit 12 zu übertragen. Der Cache-Speicher 50 ist
ausgebildet, ein spezielles Steuersignal zu setzen, wenn die Befehlsbytes
zu der Vordecodiereinheit 12 übertragen werden, um anzuzeigen,
dass der Befehlscache-Speicher 50 keine gültige Vordecodierinformation
für die
gerade übertragenen
Befehlsbytes besitzt.
-
In
einer weiteren Ausführungsform überwacht
eine Steuereinheit 80 den Cache-Speicher 50 und
speichert eine spezielle Ungültigerklärungssequenz
für Vordecodierbits
in den Paritäts/ECC-Speicherplätzen 60,
die einem Befehlsspeicherplatz 58 entsprechen, der durch
neue Befehlsbytes aus dem Hauptspeicher ersetzt wird. Dies "initialisiert" wirksam die Vordecodierungsinformation
für neue
Befehlsbytes. In dieser Konfiguration ist der Cache-Speicher 50 ausgebildet,
die Ungültigkeitserklärungssequenz
aus Vordecodierbits auszugeben, wenn die entsprechenden Befehlsbytes
von der Vordecodiereinheit 12 angefordert werden. Vorteilhafterweise
kann in dieser Konfiguration der Cache-Speicher 50 ein
standardmäßiger Cache-Speicher
sein, der Parität/ECC
unterstützt
und dieser muss nicht in irgendeiner Weise modifiziert werden, um
zu erkennen, ob die Vordecodierbits, die er ausgibt, gültig oder
ungültig
sind. Stattdessen ist die Vordecodiereinheit 12 ausgebildet,
die Vordecodierbits, die sie von dem Cache-Speicher 50 empfängt, zu
untersuchen. Wenn die Vordecodierbits mit der vorbestimmten Ungültigkeitserklärungssequenz übereinstimmen,
ist die Vorabholeinheit 12 ausgebildet, eine neue Vordecodierinformation
zu berechnen. Wenn die Vordecodierbits nicht mit der vorbestimmten
Ungültigkeitserklärungssequenz übereinstimmen,
ist die Vorabholeinheit 12 ausgebildet, die Vordecodierbits aus
dem Cache-Speicher 50 der Ebene 2 an den Befehls-Cache-Speicher 16 (und
die Ausrichteinheit 16/Decodiereinheiten 20a bis c, falls
erforderlich) weiterzugeben.
-
Zu
beachten ist, dass die Busse 56 und 68 eine beliebige
geeignete Größe aufweisen
können, etwa
16, 32, 64 oder 128 Bits. Die Anzahl der verwendeten Busleitungen
kann durch Multiplexen von Daten, Adressen und Steuerbussen verringert
werden. In einigen Ausführungsformen
sind die Vordecodiereinheit 12 und der Cache-Speicher 50 der
Ebene 2 so ausgebildet, dass diese Paritätsbits für empfangene und übertragene
Adressen erzeugen. Diese Paritätsbits
müssen
jedoch nicht gespeichert werden und können nach dem Übertragen
jeder Adresse verworfen werden.
-
In
einer noch weiteren Ausführungsform kann
eine Vordecodierinformation zusätzlich
zu den Startbits durch die Vordecodiereinheit 12 erzeugt
und in dem Befehlscache-Speicher 16 gespeichert werden.
Beispielsweise können
Endbits, die angeben, ob ihr zugehöriges Befehlsbyte das letzte
Bytes eines Befehls ist, und ob Codierungsbytes, die angeben, ob ihr
zugehöriges
Befehlsbyte ein Operationscodierungsbyte ist, ebenfalls durch die
Vordecodiereinheit 12 erzeugt und in dem Befehlscache-Speicher 16 gespeichert
werden. Einige oder alle dieser Vordecodierungsbits können zu
dem Cache-Speicher 50 übertragen
werden, wenn die Befehlsbytes in dem Cache-Speicher 16 ersetzt
werden, abhängig
von der Anzahl der Paritäts-
und/oder ECC-Bits 60, die in dem Cache-Speicher 50 verfügbar sind.
-
In
einigen Ausführungsformen
sind die Decodiereinheiten 20a bis 20c ausgebildet
zu erkennen, wenn die Vordecodierungsinformation, die von der Vordecodiereinheit 12 bereitgestellt
wird oder aus dem Befehlscache-Speicher 16 ausgelesen wird, nicht
korrekt ist. Ungenauigkeiten in der Vordecodierungsinformation können aus
unterschiedlichen Gründen
in Abhängigkeit
von dem Verfahren auftreten, das zum Erzeugen der Vordecodierungsinformation
verwendet wird. Im Falle einer ungenauen Vordecodierinformation
sind die Decodiereinheiten 20a bis c ausgebildet, zu unterbrechen,
während
die Vordecodiereinheit 12 die Vordecodierinformation emeut erzeugt.
Die neue Vordecodierinformation kann dann in den Befehlscache-Speicher 16 geschrieben
werden, um damit die ungenaue Vordecodierinformation zu überschreiben.
In einer weiteren Ausführungsform sind
die Decodiereinheiten 20a bis c ausgebildet, die ungenau
Vordecodierinformation einfach zu verwerfen und das Decodieren selbst
abzuschließen.
-
In 5 sind
mehr Details einer Ausführungsform
des Befehlscache-Speichers 16 und des Cache-Speichers 50 gezeigt.
Wie zuvor beschrieben ist, kann der Befehlscache-Speicher 16 mit Befehlsspeicherplätzen 62 und
Vordecodierinformationsspeicherplätzen 64 versehen sein.
Jeder Vordecodierinformationsspeicherplatz entspricht einem Befehlsspeicherplatz.
Beispielsweise entspricht die in dem Speicherplatz 80 enthaltene
Vordecodierinformation den Befehlsbytes, die in dem Befehlsspeicherplatz 82 gespeichert
sind. In der in der Figur gezeigten Ausführungsform enthält der Speicherplatz 80 Startbits,
die jeden in dem Speicherplatz 82 gespeicherten Befehlsbyte
entsprechen.
-
Wie
in der Figur gezeigt ist, kann der Cache-Speicher 50 die
gleichen Befehlsbytes wie der Befehlscache-Speicher 16 enthalten.
Wenn beispielsweise die Befehle aus der Codierungssequenz 72 zum
ersten mal angefordert werden, können
diese aus dem Hauptspeicher in den Cache-Speicher 50 der
Ebene 2 und den Befehlscache-Speicher 16 eingelesen werden.
Zu beachten ist jedoch, dass der Cache-Speicher 50 der
Ebene 2 keine Vordecodierdaten für
das Codierungssegment besitzt. Daher wird die vorbestimmte Ungültigerklärungskonstante
(in diesem Falle 00000000 ...) in der Speicherstelle 90 gespeichert.
Wenn die Vordecodiereinheit 12 die Befehlsbytes erhält, erkennt
diese die Ungültigerklärungskonstante
und fährt
fort, die Vordecodierinformation für das Codierungssegment 72 zu
berechnen. Diese Vordecodierinformation wird dann in der Speicherstelle 80 in
dem Befehlscache-Speicher 60 gespeichert.
-
Der
gleiche Prozess tritt zum ersten mal auf, wenn die Befehle in dem
Codierungssegment 78 angefordert werden. Sobald jedoch
die Befehlsbytes für das
Codierungssegment 78 in dem Befehlscache-Speicher 16 ausgetauscht
sind, wird die Vordecodierinformation in den Cache-Speicher 50 der
Ebene 2 zurückgeschrieben
und in der Speicherstelle 94 gespeichert. Wenn das Codierungssegment 78 emeut
angefordert wird, nachdem es in dem Befehlscache-Speicher 16 ausgetauscht
wurde und bevor es in den Cache-Speicher 50 der Ebene 2
gesetzt wurde, können
sowohl die Befehlsbytes als auch die Vordecodierinformation für das Codierungssegment 78 aus
den Speicherstellen 94 bis 96 ausgelesen und in dem
Befehlscache-Speicher 16 gespeichert werden. Dieser Zustand
ist in der Figur gezeigt.
-
Obwohl
eine beliebige vorbestimmte Sequenz aus Bits als eine Ungültigerklärungskonstante verwendet
werden kann, ist es in einigen Ausführungsformen vorteilhaft, eine
Vordecodierbitsequenz zu wählen,
die in der Regel nicht von der Vordecodiereinheit 12 erzeugt
wird. Beispielsweise wenn eine maximale Befehlslänge von 16 Bytes und eine Cache-Zeilenlänge von
32 Bytes angenommen wird, ist es unwahrscheinlich, dass die Vordecodiereinheit 12 eine
Cache-Zeile mit 32 aufeinanderfolgenden Befehlsbytes ohne
mindestens ein Startbyte empfängt.
Somit kann das Auswählen
einer Ungültigerklärungskonstante
mit 32-Nullen vorteilhaft sein, da dadurch die Anzahl falscher Ungültigerklärungen reduziert
werden kann. Eine falsche Ungültigerklärung kann
auftreten, wenn die Vordecodierbits, die von der Vordecodiereinheit 12 berechnet
wurden, gleich der vorbestimmten Ungültigerklärungskonstante sind. Wenn dies
geschieht, werden die ursprünglichen
Vordecodierbits, die aus dem Cache-Speicher 50 ausgelesen
werden, verworfen und es werden neue Vordecodierbits berechnet,
obwohl die ursprünglichen
Vordecodierbits korrekt waren.
-
In
einer Ausführungsform
sind die zuvor beschriebenen Merkmale lediglich in dem Mikroprozessor 10 eingerichtet.
Beispielsweise kann die Funktion der Steuereinheit 80 weggelassen
werden oder kann in dem Mikroprozessor 10 enthalten sein.
In ähnlicher Weise
kann auch die Busschnittstellenlogik 52 weggelassen werden
oder kann in dem Mikroprozessor 10 in einigen Ausführungsformen
eingerichtet sein. Das Einrichten der beschriebenen Funktionen nur
in dem Mikroprozessor 10 kann vorteilhaft sein, um die Kosten
des Einrichtens eines Computersystems zu reduzieren, das die Vordecodierinformation
in der zuvor offenbarten Weise speichert. In anderen Ausführungsformen
können
die gewünschten
Funktionen auf den Mikroprozessor 10 und eine oder mehrere Schnittstellen
oder Hilfschips aufgeteilt werden.
-
6 zeigt
ein Flussdiagramm, das eine Ausführungsform
eines Verfahrens zum Speichern einer Vordecodierinformation in dem
Cache-Speicher 50 der Ebene 2 darstellt. Zunächst werden
Befehlsbytes aus dem Befehlscache-Speicher 16 angefordert
(Schritt 140). Wenn die angeforderten Bytes in dem Befehlscache-Speicher 16 gespeichert
sind, werden diese der Ausrichteinheit 16 und den Decodiereinheiten 20a bis
c zusammen mit ihren entsprechenden Vordecodierinformationen (Schritte 142 und 150)
zugeleitet. Wenn andererseits die angeforderten Befehlsbytes nicht
in dem Befehlscache-Speicher 16 gespeichert sind, wird
die angeforderte Adresse an den Cache-Speicher 50 der Ebene
2 weitergeleitet (Schritte 142 und 144). Wenn
die angeforderten Befehlsbytes nicht in dem Cache-Speicher 50 der
Ebene 2 gespeichert sind, werden diese aus dem Hauptspeichersubsystem
ausgelesen (146 und 148). Wenn die angeforderten
Befehlsbytes aus dem Hauptspeichersubsystem empfangen werden, werden
diese in dem Cache-Speicher 50 der
Ebene 2 zusammen mit einer Ungültigerklärungskonstante
gespeichert (Schritte 148 und 150). Wie zuvor
beschrieben ist, initialisiert die Ungültigerklärungskonstante wirksam die
Vordecodierspeicherplätze
in dem Cache-Speicher der Ebene 50, wodurch der Vordecodiereinheit 12 angezeigt
wird, dass eine neue Vordecodierinformation erzeugt werden sollte.
Wenn die Vordecodiereinheit 12 die Befehlsbytes und die
Vordecodierbits empfängt,
werden die Vordecodierbits untersucht, um zu bestimmen, ob diese
gleich der Ungültigerklärungskonstante
sind (Schritte 154 und 156). Wenn die Vordecodierbits
gleich der Ungültigerklärungskonstante
sind, ist die Vordecodiereinheit 12 ausgebildet, neue Vordecodierinformationen
zu erzeugen (Schritte 156 und 164). Die Befehlsbytes und
die neue Vordecodierinformation werden dann in dem Befehlscache-Speicher 16 gespeichert
(Schritt 158). Wenn das Speichern der Befehlsbytes und
der neuen Vordecodierinformation dazu führt, dass eine zuvor gespeicherte
Cache-Zeile in dem Befehlscache-Speicher 16 überschrieben
wird, wird die Vordecodierinformation, die der zuvor gespeicherten
Cache-Zeile, die gerade beschrieben wird, entspricht, in den Cache-Speicher 50 der
Ebene 2 zurückgespeichert
(Schritte 160 und 166).
-
Zu
beachten ist, dass die einzelnen Schritte in der Figur lediglich
zum Zwecke der Erläuterung
in einer seriellen Weise dargestellt sind. Andere Ausführungsformen
sind möglich
und hiermit mit eingeschlossen. Eine Anzahl der Schritte kann kombiniert werden
oder parallel ausgeführt
werden. Beispielsweise können
die Schritte 150 und 154 parallel ausgeführt werden.
Wie ferner zuvor angegeben ist, sind die Schritte, die die Verwendung
einer Ungültigerklärungskonstante
beinhalten, optional.
-
Speichern
von Paritäts-
und/oder ECC-Information mit zu ersetzenden Befehls- und Datenbytes.
-
Ein
Nachteil der zuvor beschriebenen Ausführungsformen besteht darin,
dass Befehls- und
Datenbytes, die in den Cache-Speicher der Ebene 2 gespeichert sind,
nicht im Hinblick auf Einzel-Bit und Mehrfach-Bit-Fehler als Folge
der Paritäts-
und/oder ECC-(Fehlerprüf-
und Korrektur-)Bits, die zum Speichern der Vordecodierinformation
verwendet werden, geschützt
sind. Jedoch können
in einigen Ausführungsformen
das Verfahren und die Systeme, die zuvor beschrieben sind, modifiziert
werden, um damit zumindest einen gewissen Schutz im Hinblick auf Einzelbitfehler
und/oder Mehrfachbitfehler an Daten und Befehlsbytes, die in dem
Cache-Speicher der Ebene 2 gespeichert sind, bereitzustellen.
-
In 7a ist
eine derartige Ausführungsform eines
System zum Speichern von Vordecodierinformation in einem Cache-Speicher
der Ebene 2 gezeigt, wobei auch gespeicherte Befehls- und Datenbytes
im Hinblick auf Einzelbit-Fehler und Mehrfachbit-Fehler geschützt sind.
Cache-Speicher sind häufig
in logische Reihen und/oder Spalten, die häufig auch als Cache-Zeilen
bezeichnet werden, aufgeteilt. Wie in der Zeichnung dargestellt
ist, kann jede Cache-Zeile in dem Befehlscache-Speicher 16 ein
Paritätsbit 180a und
eine Vordecodierinformation 182a speichern, die den gespeicherten
Befehlsbytes 184a entsprechen. Wie im Zusammenhang mit
den vorhergehenden Ausführungsformen
beschrieben ist, liefern die Vordecodierbits 182a Information über Befehlsbytes 184a (beispielsweise
Information über
das Startbyte, Endbyte und Operationscodierungsbyte). Wie zuvor
beschrieben ist, können
die Vordecodierbits 182a verwendet werden, um die zum Decodieren von
Befehlsbytes 184a erforderliche Zeit zu verringern. Beispielsweise
können
die Vordecodierbits 182a, die das Startbyte und das Endbyte
innerhalb der Befehlsbyte 184a angeben, verwendet werden, um
in rascher Weise Befehle in den Befehlsbytes 184a auszurichten.
Das Paritätsbit 180a kann
berechnet werden, um eine gerade Parität oder eine ungerade Parität auf der
Grundlage der Summe der Vordecodierbits 182a und der Befehlsbytes 184a zu erzeugen.
In einer weiteren Ausführungsform
wird das Paritätsbit 180a auf
der Grundlage lediglich der Befehlsbytes 184a berechnet
(d. h. es wird die Fähigkeit
bereitgestellt, eine ungerade Anzahl an Bitfehlern nur in den Befehlsbytes 184a zu
erkennen). In dieser Ausführungsform
kann potentiell ein höherer Grad
an Schutz für
die Befehlsbytes 184a bereitgestellt werden, während die
Vordecodierbits 182a ungeschützt bleiben. Dies ist in Ausführungsformen
akzeptabel, in denen die Vordecodierbits 182a lediglich vorhersagend
sind. Beispielsweise können
die Vordecodierbits 182a zu einem späteren Zeitpunkt als ungültig erkannt
werden.
-
Der
Datencache-Speicher 28 ist ebenfalls in Form einer Anzahl
an Cache-Zeilen vorgesehen. Jede Cache-Zeile besitzt ihren eigenen
Satz an Datenbytes 188a und an entsprechenden ECC-Bits 186a.
Wie zuvor beschrieben ist, können
die ECC-Bits 186a so ausgewählt werden, dass das Erkennen
von Einzelbitfehlern und einigen Mehrfachbitfehlern in den Datenbytes 188a möglich ist.
In einigen Ausführungsformen
werden die ECC-Bits 186a ebenfalls
entsprechend einem Algorithmus ausgewählt, der das Erkennen und Korrigieren
von Einzelbitfehlern ermöglicht.
-
Im
hierin verwendeten Sinne betrifft eine ECC-Information eine Fehlerkorrekturcodierungsinformation.
In digitalen elektronischen Systemen wird Information in binärer Form
dargestellt (d. h. als Einsen und Nullen). Wenn eine binäre Information
von einem Punkt zu einem anderen übertragen wird oder in einem
Speicher abgelegt wird, besteht immer die Gefahr, dass ein Fehler
auftritt. Beispielsweise kann eine Eins als eine Null interpretiert
werden oder eine Null kann als eine Eins aufgefasst werden. Dies
kann durch Defekte in den Übertragungsmedien,
durch elektronisches Rauschen, durch Komponentenausfall, durch schlechte
Verbindungen, durch Alterung, Strahlung oder andere Faktoren hervorgerufen
werden. Wenn ein Bit in falscher Weise interpretiert wird, wird
gesagt, dass ein "Bitfehler" aufgetreten ist.
Die Fehlerkorrektur ist ein Prozess zum Erkennen der Fehler und
zum Korrigieren dieser Bitfehler. Die Fehlerkorrektur kann in Hardware
oder Software ausgeführt
werden, obwohl für
hohe Datenraten die Fehlerkorrektur vorzugsweise in speziell gestalteten
Hardwareeinrichtungen ausgeführt
wird, da Softwarelösungen
typischerweise zu langsam sind. Mit Zunahme der Dichte und der Arbeitsgeschwindigkeit
von Speichereinrichtungen steigt auch die Wahrscheinlichkeit für Einzelbitfehler
oder Mehrfachbitfehler an. Somit wird das Unterstützen von
Fehlerkorrekturcodierungen zunehmend wichtig. Beispielsweise werden
in einigen mobilen Systemen Fehlerkorrekturcodierungen als Basis
eingeführt,
um die Batterielebensdauer des Systems zu verlängern, da eine deutlich geringere
Speicherauffrischungrate zulässig ist.
Vorteilhafterweise können
die hierin offenbarten Systeme und Verfahren unter Anwendung einer
Reihe unterschiedlicher ECC-Algorithmen eingerichtet werden. Die
spezielle Auswahl eines Algorithmus hängt von der Speicherstruktur
und der Anzahl der zum Speichern der ECC- Information verfügbaren Bits ab. Ferner ist
zu beachten, dass in einigen Ausführungsformen die ECC-Bits 186a und
die Datenbytes 188a als Teil des ECC-Algorithmus kombiniert werden
können.
-
Im
hierin verwendeten Sinne ist eine Paritätsprüfung ein grobes Verfahren zum
Erkennen von Einzelbitfehlern in einem Speichersystem. Paritätsunterstützende Speicher
stellen typischerweise ein zusätzliches
Bit an Speicherplatz für
jedes Byte bereit, es sind aber auch andere Konfigurationen möglich. Dieses
zusätzliche
Bit wird verwendet, um Information zur Fehlererkennung zu speichern.
Jedes Byte an Daten, das in dem Speichersystem gespeichert wird,
enthält
8 Bits realer Daten, wobei jedes Bit eine Eins oder eine Null ist.
Somit ist es möglich,
die Anzahl an Nullen oder Einsen in einem Byte zu zählen. Beispielsweise
besitzt das Byte 10110011 drei Nullen und fünf Einsen. Das Byte 00100100
besitzt Sechs Nullen und zwei Einsen. Somit besitzen einige Bytes
eine geradzahlige Anzahl an Einsen und einige eine ungeradzahlige
Anzahl an Einsen. Wenn die Paritätsprüfung aktiviert
ist, untersucht jedes mal, wenn ein Byte in den Speicher geschrieben
wird, eine Logikschaltung, die als Paritätsgenerator/Prüfer bezeichnet
wird, das Byte und bestimmt, ob das Datenbyte eine gerade oder ungerade
Anzahl an Einsen aufweist. Wenn es eine geradzahlige Anzahl Einsen aufweist,
wird das neunte (oder Paritätsbit)
Bit auf eins gesetzt, und ansonsten wird es auf Null gesetzt. Das
Ergebnis davon ist, dass unabhängig
davon, wie viele Einsen in den ursprünglichen acht Datenbits vorhanden
waren, diese stets eine ungerade Anzahl an Einsen sind, wenn alle
neun Bits zusammen untersucht werden. Diese Einrichtung wird als "ungerade Parität" bezeichnet. Es ist
auch möglich
eine gerade Parität
vorzusehen, wobei der Paritätsgenerator/Prüfer die
Summe immer so gestaltet, dass sie gerade ist.
-
Wenn
die Daten aus dem Speicher zurückgelesen
werden, dient die Paritätsschaltung
dabei als eine Prüfeinrichtung.
Diese liest alle neun Bits aus und bestimmt, ob es eine ungerade
Anzahl oder eine gerade Anzahl an Einsen gibt. Wenn es eine gerade Anzahl
an Einsen gibt, muss ein Fehler in einer ungeraden Anzahl der Bits
aufgetreten sein. Auf diese Weise wird der Paritätsspeicher verwendet, um einen Einzelbitfehler
zu erkennen. Die Paritätsgenerator/Prüfschaltung
ist in der Lage zu bestimmen, dass ein einzelnes Bit nicht korrekt
ist, obwohl, anders als das obige ECC-Beispiel, sie nicht in der
Lage ist zu bestimmen, welches Bit nicht korrekt ist. Vorteilhafterweise
kann die Paritätserzeugung und
Prüfung
parallel beim Lesen und Schreiben in den Speicher ausgeführt werden.
Somit beeinträchtigt
die Paritätsprüfung und
Erzeugung nicht unnötig
die Funktionsweise des Speichersystems.
-
Es
können
auch Fehlerprüf-
und Korrekturcodierungen parallel in einigen Ausführungsformen ausgeführt werden.
In anderen Ausführungsformen werden
diese als ein serieller Vorgang ausgeführt, wodurch eine geringfügige Reduzierung
der Systemgeschwindigkeit auf Grund der Zeit erfolgt, die für die Fehlerprüfung und
die Korrekturschaltung zum Korrigieren von erkannten Fehlern vorgesehen
wird. Diese Verzögerung
ist jedoch abhängig
von der Speicherarchitekturimplementierung und kann relativ gering sein
(beispielsweise 2 bis 3%).
-
In 7a ist
in einer Ausführungsform
der Befehls- und Datencache-Speicher 28 in einer teilassoziativen
Weise ausgebildet. Somit enthält
jede Gruppe eine Anzahl an "Wegen", die einer Spalte entsprechen.
Die ECC-Bits 186a entsprechen den Daten in einer speziellen
Cache-Zeile (d. h. dem Schnittpunkt einer einzelnen Spalte und einer
Reihe oder einem einzelnen Weg). Der Befehlscache-Speicher 16 ist
ebenfalls in ähnlicher
Weise aufgebaut. Somit besitzt jede Cache-Zeile in dem Befehlscache-Speicher 16 ihren
eigenen Satz an Paritäts-
und Vordecodierbits 180a und 182a. In einigen
Ausführungsformen
ist der Cache-Speicher der Ebene zwei 50 auf dem Chip des
Prozessors 10 eingerichtet. Vorteilhafterweise ist es dadurch
möglich,
dass der Cache-Speicher 50 der Ebene 2 mit der gleichen
Frequenz wie der Prozessor 10 arbeitet.
-
In
einer Ausführungsform
ist der Cache-Speicher der Ebene zwei 50 als ein "exklusiver" Cache-Speicher ausgebildet,
der lediglich zu ersetzende oder zurückzukopierende Cache-Blöcke aufweist,
die in das Speichersubsystem als Folge eines Fehltreffers zu schreiben
sind. Die Begriffe zu ersetzende bzw. zu opfernde Daten oder zurückzukopierende
Daten beziehen sich auf Cache-Blöcke,
die zuvor in dem Cache-Speicher der Ebene 1 gehalten wurden (d.
h. dem Befehlscache-Speicher 16 und dem Datencache-Speicher 28),
die aber überschrieben
werden mussten (geopfert oder verworfen), um für neuere Daten Platz zu schaffen.
In einer Ausführungsform
besitzt der Cache-Speicher
der Ebene zwei 50 256 Kilobytes und der Befehlscache-Speicher 16 und
der Datencache-Speicher 28 besitzen jeweils 64 Kilobytes,
so dass der Prozessor 10 insge samt mit einem zugeordneten
Speicherbereich von 384 Kilobytes versehen ist. Zu beachten ist,
dass diese Speichergrößen beispielhaft
sind und das andere Speichergrößen in Abhängigkeit
von der entsprechend genauen Implementierung des Prozessors 10 verwendet
werden können.
In ähnlicher
Weise kann der Cache-Speicher 50 der Ebene zwei außerhalb des
Chips des Prozessors 10 eingerichtet sein. In anderen Ausführungsformen
wird der Cache-Speicher 50 der Ebene zwei als ein "inklusiver" Cache-Speicher eingerichtet,
der eine Kopie aller Daten in dem Befehlscache-Speicher 16 und
dem Datencache-Speicher 28 aufweist. In einigen Ausführungsformen
besitzen der Befehlscache-Speicher 16 und der Datencache-Speicher 28 unterschiedliche
Größen. Der
Cache-Speicher 50 der
Ebene 2 kann auch als teilassoziativer Cache-Speicher in weiteren
Ausführungsformen
eingerichtet sein.
-
Wie
in der Zeichnung dargestellt ist, werden, sobald eine spezielle
Cache-Zeile in dem Befehlscache-Speicher 16 neue Befehlsbytes
speichern muss, die zuvor vordecodierten Befehlsbytes (182a und 184a) "geopfert" bzw. für den Austausch
gekennzeichnet. Da der Cache-Speicher 50 der Ebene 2 entweder
(a) Befehlsbytes mit Vordecodierinformation und Paritätsinformation
oder (b) Datenbytes mit ECC-Information speichern kann, wird ein
Indikatorbit (beispielsweise ein Codierungsindikatorbit 190) gespeichert,
um anzugeben, welche Art der Information darin gespeichert ist.
Das Kennungsbit 190 kann von dem Demultiplexer 319 verwendet
werden, um auszuwählen,
ob das Ausgangssignal von der Paritätsprüfeinheit 314 oder
der Fehlerprüf-
und Korrektureinheit 312 als Ausgangssignal 320 auszugeben ist.
Der Demultiplexer 316 ist ferner ausgebildet, ein Fehlerunterbrechungssignal 318 zu
setzen oder auszugeben in Reaktion auf das Empfangen einer Fehlerindikation
aus der Paritätsprüfeinheit 314 oder
der Fehlerprüf-
und Korrektureinheit 312. Beispielsweise ist in dem Falle,
dass die Paritätsprüfeinheit 314 bestimmt,
dass ein Paritätsfehler
aufgetreten ist, der Demultiplexer 316 ausgebildet, das
Unterbrechungs- bzw. Interruptsignal 318 zu setzen. In ähnlicher
Weise ist der Demultiplexer 316 ausgebildet, ein Fehlersignal 318 in
Reaktion auf ein entsprechendes Fehlersignal von der Fehlerprüf- und Korrektureinheit 312 zu
setzen. Wie in der Zeichnung gezeigt ist, kann die Fehlerprüf- und Korrektureinheit 312 ausgebildet sein,
die ECC-Bits 186b und die Datenbytes 188b zu empfangen.
Die Paritätsprüfeinheit 314 ist
ausgebildet, das Paritätsbit 180b,
die Vordecodierbits 182b und die Befehlsbytes 184b zu
empfangen. Wie zuvor beschrieben ist, wird das Paritätsbit 180b erzeugt,
indem die Anzahl der gesetzten Bits in den Vordecodierbits 182b und
den Befehlsbytes 184b bestimmt wird. Wie in der Zeichnung
dargestellt ist, geben die Indikatorbits 190 und 192 an,
ob Befehlscodierungsbytes oder Datenbytes in der entsprechenden
Cache-Zeile des Cache-Speichers der Ebene zwei 50 gespeichert
sind. Der Demultiplexer 319 ist ausgebildet, die Indikatorbits
oder Datenbits 170 (beispielsweise Bits 190 und 192)
zu empfangen, um das Ausgangssignal aus der Paritätsprüfeinheit 314 oder
der ECC-Einheit 312 auszuwählen.
-
Wie
in der Zeichnung dargestellt ist, wird ein einzelnes Paritätsbits 180a für jede Cache-Zeile in dem Befehlscache-Speicher 16 gespeichert.
Beispielsweise wird das Paritätsbit 180a verwendet,
um die Parität
für jede
Cache-Zeile 300 anzugeben. In ähnlicher Weise können die
ECC-Bits 186a verwendet werden, um eine Fehlerprüfung und
Korrektur für die
Datenbytes 188a in der Cache-Zeile 302 in dem Datencache-Speicher 28 zu
ermöglichen.
Obwohl der Cache-Speicher 50 der Ebene zwei als ein direkt zugeordneter
Cache-Speicher dargestellt ist, kann der Cache-Speicher der Ebene
zwei 50 auch als ein teilassoziativer oder vollständig assoziativer
Cache-Speicher mit mehreren Spalten oder "Wegen" eingerichtet sein. Wie in der Zeichnung
gezeigt ist, werden die Cache-Zeilen der Ebene 1 300 und 302 in den
Cache-Speicher 50 der Ebene 2 in Reaktion darauf geschrieben,
dass die Daten durch neue Daten überschrieben
("geopfert") werden, die in
den Befehlscache-Speicher 16 und den Datencache-Speicher 28 geschrieben
werden.
-
Obwohl
dies in der Figur nicht gezeigt ist, kann die Paritätseinheit 314 auch
verwendet werden, um die Parität
für Auslesevorgänge aus
dem Befehlscache-Speicher 16 zu prüfen (d. h., es sind Lesevorgänge für Befehle
mit eingeschlossen, die zu den Ausricht-, Decodier- und Ausführungseinheiten
des Prozessors weitergeleitet werden, und es sind Lesevorgänge mit
eingeschlossen für
zu überschreibende Befehle,
die für
den Cache-Speicher 50 der
Ebene zwei vorgesehen sind). In einer weiteren Ausführungsform
wird eine weitere Instanz der Paritätseinheit 314 eingerichtet,
um diese Funktion bereitzustellen. In ähnlicher Weise kann die Fehlerprüf- und Korrektureinheit 312 (oder
eine weitere Instanz davon) verwendet werden, um eine Fehlerprüfung und
Korrektur für
Auslesevorgänge
aus dem Datencache-Speicher 28 auszuführen.
-
In
einer Ausführungsform
wird der Cache-Speicher der Ebene zwei in zwei Teilen eingerichtet,
wobei jeder Teil eine unterschiedliche Art an Information speichert.
Beispielsweise ist der erste Teil des Cache-Speichers der Ebene
zwei 50 ausgebildet, um ausschließlich Befehlsbytes und entsprechende
Vordecodierbits und Paritätsbits
zu speichern. Der zweite Teil des Cache-Speichers 50 der Ebene
zwei kann ausgebildet sein, um ausschließlich Datenbytes und ECC-Bits
zu speichern. Vorteilhafterweise kann in dieser Ausführungsform
der Cache-Speicher der Ebene 2 möglicherweise
den Bedarf verringern, datenartige Bits 170 zu speichern (beispielsweise
Codierungsbits 190 und Datenbits 192). Jedoch
kann diese Art der Konfiguration möglicherweise die Effizienz
des Cache-Speichers 50 der Ebene 2 verringern, wenn unterschiedliche
Programme ausgeführt
werden, die unterschiedliche Verhältnisse an Befehlsbytes zu
Datenbytes besitzen. Zu beachten ist, dass die datenartigen Bits 170 erzeugt werden,
indem erkannt wird, welcher Teil des Cache-Speichers der Ebene 2
die Information liefert (d. h. der Befehlscache-Speicher 16 oder
der Datencache-Speicher 28). Beispielsweise erhält eine
Information aus dem Befehlscache-Speicher 16 automatisch
ein datenartiges Bit, das angibt, dass es sich um eine Befehlscodierungsinformation
handelt. In ähnlicher
Weise erhält
Information, die in dem Cache-Speicher der Ebene zwei 50 zu
speichern ist, und die aus dem Datencache-Speicher 28 stammt, automatisch
ein datenartiges Indikatorbit, das angibt, dass die Information
Daten enthält
(beispielsweise Datenbit 192).
-
7b zeigt
eine weitere Ausführungsform des
Systems zum Speichern von zu überschreibenden
Befehlsbytes und Vordecodierinformation. In dieser Ausführungsform
wird die Paritätsinformation nicht
in dem Befehlscache-Speicher 16 gespeichert und die ECC-Information wird
nicht in dem Datencache-Speicher 28 gespeichert. Dies kann
vorteilhafterweise die Chipfläche
verringern, die zum Einrichten des Befehlscache-Speichers 16 und
des Datencache-Speichers 28 erforderlich ist. Stattdessen
kann die Paritätseinheit 402 Paritätsbits für Befehlsbytes 184a erzeugen,
wenn diese aus dem Befehlscache-Speicher 16 ausgelesen
und in den Cache-Speicher der Ebene zwei 50 geschrieben
werden. In ähnlicher
Weise ist der Cache-Speicher der Ebene zwei ausgebildet, die ECC-Bits
für die
Datenbytes 188a zu erzeugen, wenn diese aus dem Datencache-Speicher 28 ausgelesen
und in den Cache-Speicher 50 der Ebene zwei gespeichert
werden. Der Rest des Systems kann in ähnlicher Weise funktionieren,
wie dies in der Ausführungsform
der 7a gezeigt ist.
-
8a zeigt
eine Ausführungsform
eines Verfahrens zum Speichern von Vordecodierinformation. In dieser
Ausführungsform
wird ein Abholen initiiert, um einen Satz aus gewünschten
Befehlsbytes einzuladen (Schritt 240). In Reaktion auf
den Abholvorgang wird der Befehlscache-Speicher durchsucht, um zu
bestimmen, ob der Befehlscache-Speicher
die gewünschten
Befehlsbytes enthält
oder nicht (Schritt 242). Wenn der Befehlscache-Speicher
die gewünschten
Befehlsbytes enthält,
werden die Befehlsbytes und die entsprechende Vordecodierinformation aus
dem Befehlscache-Speicher ausgelesen (Schritt 252). Dies
wird als ein "Befehlscache-Treffer" bezeichnet, und
ist typischerweise vorteilhaft, da der Befehlscache-Speicher typischerweise
eine geringere Zuggriffszeit als der Rest des Speichersystems besitzt.
Wenn jedoch die gewünschten
Befehlsbytes nicht in einem Befehlscache-Speicher gespeichert sind,
dann werden die Befehlsbytes aus dem Cache-Speicher der Ebene zwei
angefordert (Schritt 244). Wie zuvor beschrieben ist, ist
in einigen Ausführungsformen
der Cache-Speicher der Ebene zwei auf dem gleichen Chip eingerichtet
wie der Prozessor mit dem Cache-Speicher der Ebene eins. Wenn die gewünschte Information
nicht in dem Cache-Speicher der Ebene zwei enthalten ist (Schritt 246),
werden die Befehlsbytes und die entsprechenden Paritätsinformationen
aus dem Hauptspeicher ausgelesen (Schritt 248). Der Fachmann
erkennt, dass es weitere Ebenen an Cache-Speichern über dem
Cache-Speicher der Ebene zwei als Teil des Hauptspeichersubsystems
geben kann. In einigen Ausführungsformen
ist das Hauptspeichersubsystem so ausgebildet, dass die Paritätsinformation
oder ECC unterstützt
werden. Beispielsweise kann das Hauptspeichersubsystem ausgebildet
sein, Paritätsbits oder
ECC-Bits für
Daten zu speichern, die in den Hauptspeicher geschrieben und aus
dem Hauptspeicher ausgelesen werden. In anderen Ausführungsformen
speichert jedoch das Hauptspeichersubsystem keine Paritäts- und/oder
ECC-Information
oder unterstützt
diese Art an Information.
-
In
einigen Ausführungsformen
ist der Cache-Speicher der Ebene zwei ausgebildet, eine Duplikatkopie
aller Informationen aus dem Cache-Speicher der Ebene eins zu speichern.
In diesen Ausführungsformen
können
die aus dem Hauptspeicher ausgelesenen Befehlsbytes in dem Cache-Speicher der
Ebene zwei zusammen mit einem Paritätsbit und einem Indikatorbit
(beispielsweise einem Datentypbit) zusammen mit einer Ungültigerklärungskonstante
für die
Vordecodierungsbits gespeichert werden, die für die Befehlsbytes noch nicht
erzeugt sind, wenn die Vordecodierbits bereits erzeugt sind, oder sobald
diese erzeugt sind, können
diese in dem Cache-Speicher der Ebene zwei gespeichert werden, wobei
die Ungültigerklärungskonstante überschrieben
wird (Schritt 250). Wie zuvor beschrieben ist, ist in anderen
Ausführungsformen
der Cache-Speicher der Ebene zwei "exklusiv", wodurch lediglich zu überschreibende
Information aus dem Cache-Speicher der Ebene eins gespeichert wird.
In diesen Ausführungsformen
werden die Befehlsbytes, die aus dem Hauptspeichersubsystem ausgelesen
werden, nicht in dem Cache-Speicher der Ebene zwei zu diesem Zeitpunkt
in dem Prozess abgelegt. Sobald die Befehlsbytes aus dem Hauptspeichersubsystem
empfangen werden, sind eine oder mehrere Decodiereinheiten ausgebildet,
Vordecodierbits für
die Befehlsbytes zu erzeugen (Schritt 252).
-
In
Ausführungsformen,
die die Paritätsprüfung für Information,
die aus dem Hauptspeicher ausgelesen wird, unterstützen, ist
die Vordecodiereinheit (oder eine Paritätseinheit) ausgebildet, die
Parität
zu prüfen,
um damit sicherzustellen, dass die Daten in korrekter Weise aus
dem Hauptspeicher empfangen wurden (Schritt 254). Zu beachten
ist, dass in einigen Ausführungsformen
die Paritätserkennung
parallel dazu oder, bevor die Decodiereinheit die entsprechenden
Vordecodierbits erzeugt, ausgeführt
werden kann. Wenn ein Fehler auftritt, ist die Vordecodiereinheit
ausgebildet, ein Fehlersignal oder einen Interrupt für den Prozessor
zu aktivieren (Schritt 256). Wenn die Paritätsprüfung keinen
Fehler ergibt, werden die aus dem Hauptspeichersubsystem ausgelesenen Vordecodierbits
untersucht, um zu bestimmen, ob diese gleich sind zu der Ungültigerklärungskonstante oder
nicht (Schritt 258).
-
Wenn
die Vordecodierbits gleich sind zu der Ungültigerklärungskonstante ist die Vordecodiereinheit
ausgebildet, eine neue Vordecodierinformation zu erzeugen (Schritt 260).
Wenn die Vordecodierbits ungleich sind zu der Ungültigerklärungskonstante, dann
ist die Vordecodiereinheit ausgebildet, die Befehlsbytes und die
zuvor erzeugten Vordecodierbits in dem Befehlscache-Speicher zu
speichern (Schritt 262). Zu beachten ist, dass in einigen
Ausführungsformen
der Befehlscache-Speicher auch ausgebildet ist, Paritätsbits für die Befehlsbytes
zu speichern. In anderen Ausführungsformen
werden die Paritätsbits für die Befehlsbytes
erzeugt, sobald die Befehlsbytes aus dem Befehlscache-Speicher ausgelesen
und in dem Cache-Speicher der Ebene zwei gespeichert sind (d. h. beim Überschreiben).
Somit wird in einigen Ausführungsformen
die Paritätsprüfung lediglich für den Cache-Speicher
der Ebene zwei ausgeführt. In
anderen Ausführungsformen
wird die Paritätsprüfung sowohl
für den
Befehlscache-Speicher (d. h. den Cache-Speicher der Ebene eins) als auch den Cache-Speicher
der Ebene zwei ausgeführt.
Ferner kann die Paritätsprüfung auch
für das
Hauptspeichersubsystem in einigen Ausführungsformen ausgeführt werden.
-
Wenn
die Vordecodierbits gleich der Ungültigerklärungskonstanten sind, ist die
Vordecodiereinheit ausgebildet, die Befehlsbytes, die Vordecodierbits
und die Paritätsinformation
in dem Befehlscache-Speicher zu speichern (Schritt 262).
Wenn die Daten unmittelbar benötigt
werden, werden die Befehlsbytes auch den Decodiereinheiten zur Weiterverarbeitung übermittelt.
In einem späteren
Zeitpunkt kann die entsprechende Cache-Zeile in dem Befehlscache-Speicher,
die die Befehlsbytes und die Vordecodierinformation enthält, überschrieben
oder geopfert werden (Schritt 264). In diesem Falle können die Vordecodierinformation
und die Befehlsbytes aus dem Befehlscache-Speicher in dem Cache-Speicher der
Ebene 2 mit entsprechenden Paritätsbit
und einem Datentypbit gespeichert werden (Schritt 266).
-
8b zeigt
eine Ausführungsform
eines Verfahrens zur Handhabung der "geopferten" bzw. überschriebenen Datenbytes.
Zunächst
werden Datenbytes von der Lade/Schreibeinheit angefordert bzw. abgeholt
(Schritt 370). Als Teil dieses Abholprozesses wird der
Cache-Speicher der Ebene 1 oder der Datencache-Speicher geprüft, um zu
bestimmen, ob die gewünschten
Datenbytes darin enthalten sind (Schritt 372). Wenn die
Datenbytes in dem Datencache-Speicher enthalten sind, werden diese
aus dem Datencache-Speicher zusammen mit ihrer entsprechenden ECC-Information
ausgelesen (Schritt 374). Wenn jedoch die gewünschten
Datenbytes nicht in dem Datencache-Speicher enthalten sind, werden die
Daten aus dem Cache-Speicher der Ebene zwei angefordert (Schritt 376).
Wenn die Daten nicht in dem Cache-Speicher der Ebene zwei enthalten
sind (Schritt 378), werden die gewünschten Datenbytes aus dem
Hauptspeicher ausgelesen (Schritt 380).
-
Wie
zuvor beschrieben ist, kann ähnlich
wie die Paritätsinformation,
die im Zusammenhang mit der 8a erläutert ist,
auch die ECC-Information vorhanden sein: (a) lediglich in dem Cache-Speicher der
Ebene zwei, (b) sowohl in dem Cache-Speicher der Ebene eins als
auch in dem Cache-Speicher der Ebene zwei, oder (c) in dem Cache-Speicher
der Ebene eins, dem Cache-Speicher der Ebene zwei und dem Hauptspeichersubsystem.
Andere Kombinationen sind ebenfalls möglich (beispielsweise nur in
dem Hauptspeichersubsystem und dem Cache-Speicher der Ebene zwei).
In Ausführungsformen,
in denen die ECC-Information aus dem Hauptspeicher unterstützt wird,
wird, sobald die Datenbytes aus dem Hauptspeichersubsystem empfangen sind,
die entsprechende ECC-Information geprüft (Schritt 282).
Wenn die Information nicht korrekt ist, versucht die Fehlerprüf- und Korrektureinheit
den Fehler zu korrigieren. Wenn der Fehler nicht korrigierbar ist,
dann wird ein Fehler angezeigt (Schritt 384). Wenn die
ECC-Information korrekt ist (oder der Fehler korrigiert ist), dann
wird die ECC-Information zusammen mit den Datenbytes in dem Cache-Speicher
der Ebene zwei gespeichert (Schritt 386). Wie zuvor im
Zusammenhang mit der 8a erläutert ist, wird in diesem Bespiel
eine inklusiver Cache-Speicher der Ebene zwei angenommen. In einigen
Ausführungsformen
kann der Cache-Speicher der Ebene zwei exklusiv sein, und die direkt
aus dem Hautspeicher ausgelesenen Daten können nicht in dem Cache-Speicher
der Ebene zwei gespeichert werden, bis diese Daten in dem Cache-Speicher
der Ebene eins überschrieben
sind.
-
Zu
einem späteren
Zeitpunkt kann die Cache-Zeile der Ebene eins, in der die Datenbytes
und die ECC-Information gespeichert sind, geopfert oder überschrieben
werden (Schritt 392). In diesem Falle werden die Datenbytes
aus dem Datencache-Speicher in dem Cache-Speicher der Ebene zwei
zusammen mit den entsprechenden ECC-Bits und einem Datentypbit gespeichert
(Schritt 366). Das Datentypbit wird verwendet, um anzugeben,
dass die gespeicherte Information Daten und ECC-Informationen sind
(im Gegensatz zu Befehlsbytes mit Paritäts- und Vordecodierinformation).
-
9 zeigt
eine Ausführungsform
eines Computersystems, das aus gebildet ist, Vordecodierinformation
für zu überschreibende
Befehlsbytes zu speichern, wobei dennoch Parität und/oder ECC-Schutz für überschriebene
Datenbytes bereitgestellt wird. In dieser Ausführungsform enthält der Prozessor 10 einen
Befehlscache-Speicher der Ebene eins 16 und einen Datencache-Speicher 28 der Ebene
eins. Der Prozessor 10 umfasst ferner die Vordecodier/Vorabholeinheit 12 und
die Lade/Schreibeinheit 26. Wie in der Zeichnung gezeigt
ist, enthalten die Vorabhol/Vordecodiereinheit und die Lade/Schreibeinheit 26 jeweils
eine Paritätserzeugungs-
und Prüfeinheit 402 und
eine Fehlerprüf-
und Korrektureinheit 404.
-
In
dieser Ausführungsform
ist der Cache-Speicher 50 der Ebene zwei mit einer Reihe
von Speicherplätzen 406 versehen,
die ausgebildet sind, Paritäts-
und/oder ECC-Information
für die
entsprechenden Bytes, die in dem Cache-Speicher 50 der Ebene
zwei enthalten sind, zu speichern. In dieser Ausführungsform
umfasst das Computersystem ferner eine Speichersteuerung 410.
Die Speichersteuerung 410 umfasst eine Paritätseinheit 414,
die ausgebildet ist, die Parität
für Bytes,
die aus dem Hauptspeicher 420 stammen, zu erzeugen und
zu prüfen. In
Ausführungsformen,
in denen die Parität
unterstützt
wird, ist das Hauptspeichersubsystem 420 mit zusätzlichen
Speicherplätzen
zur Speicherung der Paritätsinformation 430 versehen.
-
In
anderen Ausführungsformen
umfasst die Speichersteuerung 410 die Fehlerprüf- und Korrektureinheit 416,
die so ausgebildet ist, dass Fehlerkorrekturcodierungen erzeugt
und geprüft
werden für
Information, die in dem Hauptspeichersubsystem 420 gespeichert
wird. Zu beachten ist, dass eine zusätzliche Fehlerprüf- und Korrekturinformation
für die
Busse erzeugt werden kann, die zum Austauschen von Information zwischen
dem Speicher 420, der Speichersteuerung 410 und
dem Prozessor 10 verwendet werden. Diese Information kann
zusätzlich
zu der ECC- und/oder Paritätsinformation,
wie sie hierin erläutert
ist, vorgesehen sein. Wie zuvor beschrieben ist, sind in einigen
Ausführungsformen
das Speichersubsytem 420 und die Speichersteuerung 410 ausgebildet,
so dass diese Paritäts-
und/oder ICC-Information nicht unterstützen. Wie ebenfalls in der
Figur gezeigt ist, ist in einigen Ausführungsformen der Cache-Speicher 50 der
Ebene zwei ausgebildet, Datentypbits 408 für jede Cache-Zeile
zu speichern.
-
Einzelbitfehler,
die durch die Verwendung der Paritätsbits in dem Befehlscache-Speicher
der Ebene eins erkannt werden, können
korrigiert werden, indem die Cache-Zeile verworfen wird und die entsprechenden
Befehlsbytes aus dem Speicher 420 ausgelesen werden (der
seinerseits durch ECC-Information geschützt sein kann). Im Gegensatz
dazu, werden die Daten, die in dem Datencache-Speicher 28 der
Ebene 1 gespeichert sind, modifiziert, wodurch die ursprüngliche
Kopie der Daten in dem Speicher 420 (d. h. die alte Kopie)
nicht zur Korrektur von Fehlern verwendet wird. Das Halten von ECC- Information in dem
Datencache-Speicher 28 kann somit besonders vorteilhaft
in einigen Ausführungsformen sein,
um damit einen alternativen Mechanismus zum Korrigieren von Fehlern
anstelle des Kopierens von Datenbytes aus dem Speicher 420 bereitzustellen.
-
Beispielhaftes Computersystem
-
10 zeigt
eine Blockansicht einer Ausführungsform
eines Computersystems 500, in der der Mikroprozessor 10 verwendet
ist. In dem dargestellten System ist der Hauptspeicher 504 mit
einer Busbrücke 502 verbunden
(die als eine Speichersteuerung dient) über einen Speicherbus 506,
und eine Graphiksteuerung 508 ist mit der Busbrücke 502 über einen
AGP-Bus 510 verbunden. Schließlich sind mehrere PCI-Geräte 512a bis 512b mit
der Busbrücke 502 über einen
PCI-Bus 514 verbunden. Eine zweite bzw. sekundäre Busbrücke 516 kann
vorgesehen sein, um eine elektrische Schnittstelle zu einem oder
mehreren EISA- oder ISA-Geräten 518 über einen
EISA/ISA-Bus 520 bereitzustellen. Der Mikroprozessor 10 ist
mit der Busbrücke 502 über einen CPU-Bus 524 verbunden.
-
Die
Busbrücke 502 stellt
eine Schnittstelle zwischen dem Mikroprozessor 10, dem
Hauptspeicher 504, der Graphiksteuerung 508 und
den mit dem PCI-Bus 214 verbundenen Geräten bereit. Wenn eine Operation
von einem der Geräte,
die mit der Busbrücke 502 verbunden
sind, empfangen wird, erkennt die Busbrücke 502 das Ziel der
Operation (beispielsweise ein spezielles Gerät oder im Falle des PCI-Busses 514,
dass das Ziel auf dem PCI-Bus 514 liegt. Die Busbrücke 502 leitet
die Operation an das Zielgerät
weiter. Die Busbrücke 502 übersetzt
im Allgemeinen eine Operation aus dem Protokoll, das von dem Ausgangsgerät oder Bus
verwendet wird, in das Protokoll, das von dem Zielgerät oder Bus
verwendet wird.
-
Zusätzlich zur
Bereitstellung einer Schnittstelle für einen ISA/EISA-Bus für den PCI-Bus 514 enthält die sekundäre Busbrücke 516 nach
Bedarf weitere Funktionen. Beispielsweise enthält in einer Ausführungsform
die sekundäre
Busbrücke 516 einen übergeordneten
PCI-Verteiler 8 (nicht gezeigt), um die Besitzrechte des
PCI-Busses 514 zu verwalten. Eine Eingangs/Ausgangssteuerung
(nicht gezeigt), die extern zu der sekundären Busbrücke 516 oder darin
integriert sein kann, ist ferner in dem Computersystem 500 vorgesehen,
um eine Tastatur und eine Maus 522 und diverse serielle
und parallele Anschlüs se
nach Bedarf zu verwalten. Eine externe Cache-Einheit (nicht gezeigt)
kann ferner mit dem CPU-Bus 524 zwischen dem Mikroprozessor 10 und der
Busbrücke 502 in
weiteren Ausführungsformen vorgesehen
sein. Alternativ kann der externe Cache-Speicher mit der Busbrücke 502 verbunden
sein, und die Cache-Steuerlogik für den externen Cache-Speicher kann in
der Busbrücke 502 Integriert sein.
-
Der
Hauptspeicher 504 ist ein Speicher, in welchem Anwendungsprogramme
gespeichert sind und aus dem heraus der Mikroprozessor 10 hauptsächlich arbeitet.
Ein geeigneter Hauptspeicher 504 umfasst DRAM (dynamischer
Speicher mit wahlfreiem Zugriff) und vorzugsweise mehrere Bänke aus SDRAM-Speichern
(synchrone DRAM).
-
Die
PCI-Geräte 512A bis 512B sind
beispielhaft für
eine Vielzahl peripherer Geräte,
etwa beispielsweise Netzwerkschnittstellenkarten, Videobeschleuniger,
Audiokarten, Festplatten oder Diskettenlaufwerke oder Laufwerkssteuerung,
SCSI (Kleincomputersystemschnittstellen) Adapter und Telefonkarten.
In ähnlicher
Weise ist das ISA-Gerät 518 beispielhaft
für diverse
Arten von peripheren Geräten, etwa
Modems, Klangkarten und eine Vielzahl von Datennahmekarten, etwa
GPIB- oder Feldbusschnittstellenkarten.
-
Die
Graphiksteuerung 508 wird vorgesehen, um Text und Bilder
auf einer Anzeige 526 zu erzeugen. Die Graphiksteuerung 508 kann
einer typischen Graphikbeschleunigereinrichtung entsprechen, wie sie
allgemein bekannt ist, um dreidimensionale Datenstrukturen zu erzeugen,
die in effizienter Weise in den Hauptspeicher 504 verschoben
und aus diesem ausgelesen werden können. Die Graphiksteuerung 508 kann
daher ein übergeordnetes
Gerät eines AGP-Busses 510 sein,
dahingehend, dass es Zugriff auf eine Zielschnittstelle innerhalb
der Busbrücke 502 anfordern
kann und diesen Zugriff erhält,
um damit einen Zugriff auf den Hauptspeicher 504 zu erhalten.
Ein spezieller Graphikbus übernimmt
das schnelle Abrufen von Daten aus dem Hauptspeicher 504.
Für gewisse
Operationen ist die Graphiksteuerung 508 ferner ausgebildet,
PCI-Protokolltransaktionen auf dem AGP-Bus 510 zu erzeugen.
Die AGP-Schnittstelle der Busbrücke 502 kann
damit eine Funktion enthalten, um sowohl AGP-Protokolltransaktionen
sowie auch PCI-Protokollziel-
und Initiatortransaktionen zu unterstützen. Die Anzeige 526 kann
eine beliebige elektronische Anzeige sein, auf der Bild oder Text
dargestellt werden kann. Zu geeigneten Anzeigen 526 gehören Kathodenstrahlröhren ("CRT"), Flüssigkristallanzeigen
("LCD"), etc.
-
Zu
beachten ist, dass die AGP-, PCI- und ISA- oder EISA-Busse als Beispiele
in der obigen Beschreibung angegeben sind, aber auch beliebige Busarchitekturen
nach Bedarf vorgesehen werden können.
Des weiteren ist zu beachten, dass das Computersystem 500 ein
Multiprozessorcomputersystem mit weiteren Mikroprozessoren sein
kann.
-
Ferner
ist zu beachten, dass die vorliegende Erläuterung auf das Setzen diverser
Signale Bezug nehmen kann. Im hierin verwendeten Sinne ist ein Signal "gesetzt", wenn es einen Wert übermittelt,
der eine spezielle Bedingung angibt. Andererseits ist ein Signal "zurückgesetzt" oder "nicht gesetzt", wenn es einen Wert
trägt,
der das Fehlen einer speziellen Bedingung angibt. Ein Signal kann
als gesetzt definiert sein, wenn es einen logischen Nullwert oder
wenn es andererseits einen logischen Einswert überträgt. Ferner wurden in der vorhergehenden
Erläuterung
diverse Werte als verworfen bezeichnet. Ein Wert kann auf viele
Arten verworfen werden, aber im Allgemeinen beinhaltet dies das
Modifizieren des Wertes derart, dass dieser von der Logikschaltung
ignoriert wird, die den Wert empfängt. Wenn beispielsweise der
Wert ein Bit enthält,
kann der Logikzustand des Wertes invertiert werden, um den Wert
zu verwerfen. Wenn der Wert ein n-Bit-Wert ist, kann eine der n-Bit-Codierungen
angegeben, dass der Wert ungültig
ist. Das Setzen des Wertes auf die ungültige Codierung bewirkt, dass
der Wert verworfen ist. Ferner kann ein n-Bit-Wert ein Gültigkeitsbit
enthalten, das angibt, wenn es gesetzt ist, dass der n-Bit-Wert
gültig
ist. Das Zurücksetzen
des Gültigkeitsbits
kann das Verwerfen des Wertes beinhalten. Andere Verfahren zum Verwerfen
eines Wertes können
ebenso angewendet werden.
-
Es
sind ein System und ein Verfahren zum Speichern von Vordecodierinformation
und überschriebenen
Befehls- und/oder Datenbytes hierin offenbart. Obwohl die Ausführungsformen,
die hierin beschrieben und in den Figuren gezeigt sind, detailliert
erläutert
sind, sind andere Ausführungsformen möglich und
hierin mit eingeschlossen. Es sollte beachtet werden, dass die Zeichnungen
und die detaillierte Beschreibung nicht beabsichtigen, die Erfindung
auf die speziellen offenbarten Formen einzuschränken, sondern es ist vielmehr
beabsichtigt, alle Modifizierungen, Äquivalente und Alternativen,
die in nerhalb des Schutzbereichs der vorliegenden Erfindung liegen,
wie sie durch die angefügten
Patentansprüche
definiert ist, abzudecken.
-
Industrielle Anwendbarkeit
-
Diese
Erfindung ist industriell auf Mikroprozessoren anwendbar.