DE60223023T2 - Verwendung von typenbit zur verfolgung der speicherung von ecc- und vordekodierungsbit in einem cache der ebene 2 - Google Patents

Verwendung von typenbit zur verfolgung der speicherung von ecc- und vordekodierungsbit in einem cache der ebene 2 Download PDF

Info

Publication number
DE60223023T2
DE60223023T2 DE60223023T DE60223023T DE60223023T2 DE 60223023 T2 DE60223023 T2 DE 60223023T2 DE 60223023 T DE60223023 T DE 60223023T DE 60223023 T DE60223023 T DE 60223023T DE 60223023 T2 DE60223023 T2 DE 60223023T2
Authority
DE
Germany
Prior art keywords
cache
instruction
memory
bytes
predecode
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE60223023T
Other languages
English (en)
Other versions
DE60223023D1 (de
Inventor
Gerald D. Austin ZURASKI
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
GlobalFoundries Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of DE60223023D1 publication Critical patent/DE60223023D1/de
Application granted granted Critical
Publication of DE60223023T2 publication Critical patent/DE60223023T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding

Description

  • 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.

Claims (8)

  1. Mikroprozessor mit: einer Vordecodiereinheit (12), die ausgebildet ist, Befehlsbytes zu empfangen und eine entsprechende Vordecodierungsinformation zu erzeugen; einem Befehlscache-Speicher (16), der mit der Vordecodiereinheit verbunden und ausgebildet ist, die Befehlsbytes und die Vordecodierungsinformation, die den Befehlsbytes entspricht, zu speichern, einer Lade/Schreibeinheit (26), die für das Empfangen von Datenbytes ausgebildet ist; einem Datencache-Speicher (28), der ausgebildet ist, die Datenbytes aus der Lade/Schreibeinheit zu empfangen und zu speichern, und einem Cache-Speicher der Ebene 2 (50) mit mehreren Cache-Zeilen, wobei jede Cache-Zeile einen Speicherbereich (176), der ausgebildet ist, geopferte Befehlsbytes oder geopferte Datenbytes zu speichern, und einen zusätzlichen Speicherbereich (174) aufweist, der ausgebildet ist, Fehlerkorrekturcodierungsbits oder Paritätsinformation und Vordecodierungsinformation zu speichern, wobei der Cache-Speicher der Ebene 2 ausgebildet ist, geopferte Befehlsbytes aus dem Befehlscache-Speicher in einer Cache-Zeile der mehreren Cache-Zeilen zu empfangen und zu speichern und geopferte Datenbytes aus dem Datencache-Speicher in einer weiteren Cache-Zeile der mehreren Cache-Zeilen zu empfangen und zu speichern, wobei der Cache-Speicher der Ebene 2 ausgebildet ist, Paritätsinformation und Vordecodierungsinformation für die gespeicherten geopferten Befehlsbytes in dem zusätzlichen Speicherbereich, der in der Cache-Zeile enthalten ist, zu empfangen und zu speichern, und wobei der Cache-Speicher der Ebene 2 ausgebildet ist, Fehlerkorrekturcodierungsbits für die gespeicherten geopferten Datenbytes in dem zusätzlichen Speicherbereich, der in der weiteren Cache-Zeile enthalten ist, zu empfangen und zu speichern; dadurch gekennzeichnet, dass jede Cache-Zeile ausgebildet ist, ein oder mehrere Indikatorbits zu speichern, die angeben, ob: (a) Befehlsbytes in dem Speicherbereich der Cache-Zeile gespeichert sind und Vordecodierungsbits und ein Paritätsbit in dem zusätzlichen Speicherbereich der Cache-Zeile gespeichert sind, oder (b) Datenbytes in dem Speicherbereich der Cache-Zeile gespeichert sind und Fehlerkorrekturcodierungsbits in dem zusätzlichen Speicherbereich der Cache-Zeile gespeichert sind.
  2. Mikroprozessor nach Anspruch 1, der ferner eine Paritätserzeugungs- und Prüflogik (402) aufweist, die ausgebildet ist, um: die Paritätsbits für die Befehlsbytes zu erzeugen, die zu dem Cache-Speicher der Ebene 2 übertragen werden, und die Paritätsbits für die Befehlesbytes zu prüfen, die aus dem Cache-Speicher der Ebene 2 übertragen werden.
  3. Mikroprozessor nach Anspruch 1, der ferner eine Fehlerprüf- und Korrekturlogik (404) aufweist, die ausgebildet ist, um: die Fehlerkorrekturcodierungsbits für die zu dem Cache-Speicher der Ebene 2 übertragenen Datenbytes zu erzeugen, und die Fehlerkorrekturcodierungsbits für die aus dem Cache-Speicher der Ebene 2 übertragenen Datenbytes zu prüfen.
  4. Mikroprozessor nach Anspruch 3, wobei die Fehlerprüf- und Korrekturlogik (404) ausgebildet ist, die Fehlerkorrekturcodierungsbits anzuwenden, um mindestens einen Bitfehler in den aus dem Cache-Speicher der Ebenen 2 übertragenen Datenbytes zu korrigieren.
  5. Verfahren zum Betreiben eines Mikroprozessors mit: Empfangen von Befehlesbytes mittels einer Vordecodiereinheit (12); wobei die Vordecodiereinheit Vordecodierungsinformation für die Befehlsbytes erzeugt; Speichern der Befehlsbytes und der Vordecodierungsinformation in einem Befehlscache-Speicher (16); Ausgeben zumindest eines Teils der Befehlsbytes und der Vordecodierungsinformation mit Paritätsinformation an einen Cache-Speicher der Ebene 2 (50) in Reaktion darauf, dass Befehlsbytes in dem Befehlscache-Speicher überschrieben werden; wobei der Cache-Speicher der Ebene 2 die Befehlsbytes in einem Speicherbereich ablegt, der in einer Cache-Zeile aus mehreren Cache-Zeilen, die in dem Cache-Speicher der Ebene 2 enthalten sind, enthalten ist; wobei der Cache-Speicher der Ebene 2 die Paritätsinformation und die Vordecodierungsinformation in einem zusätzlichen Speicherbereich, der in der Cache-Zeile enthalten ist, speichert; Empfangen von Datenbytes durch eine Lade/Schreib-Einheit (26); Speichern der Datenbytes in einem Datencache-Speicher (28); und Ausgeben mindestens eines Teils der Datenbytes mit einer entsprechenden Fehlerkorrekturcodierungsinformation an den Cache-Speicher der Ebene 2 in Reaktion darauf, dass die Datenbytes in dem Datencache-Speicher überschrieben werden, wobei der Cache-Speicher der Ebene 2 die Datenbytes in einem Speicherbereich speichert, der in einer weiteren Cache-Zeile von mehreren Cache-Zeilen enthalten ist, die in dem Cache-Speicher der Ebene 2 enthalten sind; wobei der Cache-Speicher der Ebene 2 die Fehlerkorrekturcodierungsinformation in einem zusätzlichen Speicherbereich speichert, der in der eine weitere Cache-Zeile enthalten ist; und dadurch gekennzeichnet, dass das Verfahren ferner umfasst: Speichern eines Indikatorbits in jeder Cache-Zeile in dem Cache-Speicher der Ebene 2, wobei das Indikatorbit angibt, ob: (a) Befehlsbytes in dem Speicherbereich der Cache-Zeile gespeichert sind, und Vordecodierungsbits und ein Paritätsbit in dem zusätzlichen Speicherbereich der Cache-Zeile gespeichert sind, oder (b) Datenbytes in dem Speicherbereich der Cache-Zeile gespeichert sind und Fehlerkorrekturcodierungsbits in dem zusätzlichen Speicherbereich der Cache-Zeile gespeichert sind.
  6. Verfahren nach Anspruch 5, das ferner umfasst: Speichern eines Indikatorbits für jeden Logikblock in dem Cache-Speicher der Ebene 2, wobei das Indikatorbit angibt, ob Vordecodierungsbits oder Fehlerprüf- und Korrekturbits darin gespeichert sind.
  7. Verfahren nach Anspruch 5, das ferner umfasst: Übertragen des mindestens einen gespeicherten Paritätsbits und des entsprechenden gespeicherten Teils der Befehlsbytes und der Vordecodierungsinformation zurück zu dem Prozessor, wobei der Prozessor ausgebildet ist, die übertragene Vordecodierungsinformation zu verwenden anstatt eine neue Vordecodierungsinformation zu erzeugen, wenn das Paritätsbits korrekt ist.
  8. Computersystem mit: einem Hauptsystemspeicher (420); einer Speichersteuerung (410), die mit dem Hauptsystemspeicher verbunden ist; einem Mikroprozessor (10) gemäß einem der Ansprüche 1 bis 4, der mit der Speichersteuerung verbunden ist.
DE60223023T 2001-06-26 2002-04-02 Verwendung von typenbit zur verfolgung der speicherung von ecc- und vordekodierungsbit in einem cache der ebene 2 Expired - Lifetime DE60223023T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US892328 2001-06-26
US09/892,328 US6804799B2 (en) 2001-06-26 2001-06-26 Using type bits to track storage of ECC and predecode bits in a level two cache
PCT/US2002/012768 WO2003003218A1 (en) 2001-06-26 2002-04-02 Using type bits to track storage of ecc and predecode bits in a level two cache

Publications (2)

Publication Number Publication Date
DE60223023D1 DE60223023D1 (de) 2007-11-29
DE60223023T2 true DE60223023T2 (de) 2008-07-31

Family

ID=25399796

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60223023T Expired - Lifetime DE60223023T2 (de) 2001-06-26 2002-04-02 Verwendung von typenbit zur verfolgung der speicherung von ecc- und vordekodierungsbit in einem cache der ebene 2

Country Status (8)

Country Link
US (1) US6804799B2 (de)
EP (1) EP1399824B1 (de)
JP (1) JP4170216B2 (de)
KR (1) KR100884351B1 (de)
CN (1) CN1287292C (de)
DE (1) DE60223023T2 (de)
TW (1) TW583541B (de)
WO (1) WO2003003218A1 (de)

Families Citing this family (65)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6751707B2 (en) * 2002-05-06 2004-06-15 Sony Computer Entertainment Inc. Methods and apparatus for controlling a cache memory
US7437593B2 (en) * 2003-07-14 2008-10-14 International Business Machines Corporation Apparatus, system, and method for managing errors in prefetched data
US7386756B2 (en) * 2004-06-17 2008-06-10 Intel Corporation Reducing false error detection in a microprocessor by tracking instructions neutral to errors
US7555703B2 (en) * 2004-06-17 2009-06-30 Intel Corporation Method and apparatus for reducing false error detection in a microprocessor
JP4673584B2 (ja) * 2004-07-29 2011-04-20 富士通株式会社 キャッシュメモリ装置、演算処理装置及びキャッシュメモリ装置の制御方法
US7415638B2 (en) * 2004-11-22 2008-08-19 Qualcomm Incorporated Pre-decode error handling via branch correction
US7421568B2 (en) * 2005-03-04 2008-09-02 Qualcomm Incorporated Power saving methods and apparatus to selectively enable cache bits based on known processor state
US8020047B2 (en) * 2006-01-17 2011-09-13 Xyratex Technology Limited Method and apparatus for managing storage of data
US8065555B2 (en) * 2006-02-28 2011-11-22 Intel Corporation System and method for error correction in cache units
US7337272B2 (en) * 2006-05-01 2008-02-26 Qualcomm Incorporated Method and apparatus for caching variable length instructions
US7962725B2 (en) 2006-05-04 2011-06-14 Qualcomm Incorporated Pre-decoding variable length instructions
US7644233B2 (en) * 2006-10-04 2010-01-05 International Business Machines Corporation Apparatus and method for supporting simultaneous storage of trace and standard cache lines
US7945763B2 (en) * 2006-12-13 2011-05-17 International Business Machines Corporation Single shared instruction predecoder for supporting multiple processors
US20080148020A1 (en) * 2006-12-13 2008-06-19 Luick David A Low Cost Persistent Instruction Predecoded Issue and Dispatcher
US8001361B2 (en) * 2006-12-13 2011-08-16 International Business Machines Corporation Structure for a single shared instruction predecoder for supporting multiple processors
US20080256419A1 (en) * 2007-04-13 2008-10-16 Microchip Technology Incorporated Configurable Split Storage of Error Detecting and Correcting Codes
US8055975B2 (en) * 2007-06-05 2011-11-08 Apple Inc. Combined single error correction/device kill detection code
FR2924836B1 (fr) * 2007-12-11 2010-12-24 Commissariat Energie Atomique Dispositif de service de fiabilite, systeme et procede electroniques mettant en oeuvre au moins un tel dispositif et produit de programme informatique permettant de mettre en oeuvre un tel procede.
US7814300B2 (en) 2008-04-30 2010-10-12 Freescale Semiconductor, Inc. Configurable pipeline to process an operation at alternate pipeline stages depending on ECC/parity protection mode of memory access
US20090276587A1 (en) * 2008-04-30 2009-11-05 Moyer William C Selectively performing a single cycle write operation with ecc in a data processing system
JP5202130B2 (ja) 2008-06-24 2013-06-05 株式会社東芝 キャッシュメモリ、コンピュータシステム、及びメモリアクセス方法
US8356239B2 (en) * 2008-09-05 2013-01-15 Freescale Semiconductor, Inc. Selective cache way mirroring
US8145985B2 (en) 2008-09-05 2012-03-27 Freescale Semiconductor, Inc. Error detection schemes for a unified cache in a data processing system
US8291305B2 (en) * 2008-09-05 2012-10-16 Freescale Semiconductor, Inc. Error detection schemes for a cache in a data processing system
US8181005B2 (en) * 2008-09-05 2012-05-15 Advanced Micro Devices, Inc. Hybrid branch prediction device with sparse and dense prediction caches
US8364896B2 (en) * 2008-09-20 2013-01-29 Freescale Semiconductor, Inc. Method and apparatus for configuring a unified cache based on an associated error rate
US8316186B2 (en) * 2008-09-20 2012-11-20 Freescale Semiconductor, Inc. Method and apparatus for managing cache reliability based on an associated error rate
US8117497B1 (en) * 2008-11-17 2012-02-14 Xilinx, Inc. Method and apparatus for error upset detection and correction
KR101042197B1 (ko) 2008-12-30 2011-06-20 (주)인디링스 메모리 컨트롤러 및 메모리 관리 방법
US8266498B2 (en) * 2009-03-31 2012-09-11 Freescale Semiconductor, Inc. Implementation of multiple error detection schemes for a cache
JP4865016B2 (ja) * 2009-08-27 2012-02-01 株式会社東芝 プロセッサ
JP5325159B2 (ja) 2010-05-12 2013-10-23 インターナショナル・ビジネス・マシーンズ・コーポレーション ファイルリストを抽出してクライアントにて表示するファイルサーバ、クライアントにて表示する方法及びファイルサーバで実行することが可能なコンピュータプログラム
CN102346715B (zh) * 2010-07-30 2014-05-28 国际商业机器公司 保护内存中应用程序的方法、内存控制器和处理器
CN102012872B (zh) * 2010-11-24 2012-05-02 烽火通信科技股份有限公司 一种用于嵌入式系统的二级缓存控制方法及装置
JP4862100B1 (ja) * 2011-03-25 2012-01-25 好一 北岸 中央演算処理装置及びマイクロコンピュータ
KR101178293B1 (ko) 2011-03-25 2012-08-29 마사미 후쿠시마 중앙 처리 장치 및 마이크로컨트롤러
US8516225B2 (en) 2011-03-25 2013-08-20 Koichi Kitagishi Central processing unit and microcontroller
KR101788737B1 (ko) 2011-05-12 2017-10-24 에스케이하이닉스 주식회사 반도체 시스템
US8572441B2 (en) * 2011-08-05 2013-10-29 Oracle International Corporation Maximizing encodings of version control bits for memory corruption detection
US9378142B2 (en) 2011-09-30 2016-06-28 Intel Corporation Apparatus and method for implementing a multi-level memory hierarchy having different operating modes
EP3364304B1 (de) 2011-09-30 2022-06-15 INTEL Corporation Speicherkanal zur unterstützung von nah- und fernspeicherzugriffen
US9600416B2 (en) 2011-09-30 2017-03-21 Intel Corporation Apparatus and method for implementing a multi-level memory hierarchy
EP2761480A4 (de) 2011-09-30 2015-06-24 Intel Corp Vorrichtung und verfahren zur implementierung einer mehrstufigen speicherhierarchie über gemeinsame speicherkanäle
WO2013095525A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Content-aware caches for reliability
US9043559B2 (en) 2012-10-23 2015-05-26 Oracle International Corporation Block memory engine with memory corruption detection
CN102968355A (zh) * 2012-11-13 2013-03-13 浪潮电子信息产业股份有限公司 一种基于Intel-Brickland-EX平台的内存纠错方法
US20140244932A1 (en) * 2013-02-27 2014-08-28 Advanced Micro Devices, Inc. Method and apparatus for caching and indexing victim pre-decode information
US9348598B2 (en) 2013-04-23 2016-05-24 Arm Limited Data processing apparatus and method for pre-decoding instructions to be executed by processing circuitry
US9021334B2 (en) * 2013-05-01 2015-04-28 Apple Inc. Calculation of analog memory cell readout parameters using code words stored over multiple memory dies
JP6140093B2 (ja) * 2014-03-18 2017-05-31 株式会社東芝 キャッシュメモリ、誤り訂正回路およびプロセッサシステム
US9672298B2 (en) 2014-05-01 2017-06-06 Oracle International Corporation Precise excecution of versioned store instructions
US9195593B1 (en) 2014-09-27 2015-11-24 Oracle International Corporation Hardware assisted object memory migration
US10210107B2 (en) * 2014-10-29 2019-02-19 Hewlett Packard Enterprise Development Lp Trans-fabric instruction set for a communication fabric
US10795681B2 (en) * 2014-12-23 2020-10-06 Intel Corporation Instruction length decoding
CN105938447B (zh) * 2015-03-06 2018-12-14 华为技术有限公司 数据备份装置及方法
JP6158265B2 (ja) 2015-09-16 2017-07-05 株式会社東芝 キャッシュメモリシステム
TWI569279B (zh) 2015-10-15 2017-02-01 財團法人工業技術研究院 記憶體保護裝置與方法
CN106445720A (zh) * 2016-10-11 2017-02-22 郑州云海信息技术有限公司 一种内存错误恢复方法和装置
US10268581B2 (en) * 2017-04-05 2019-04-23 Arm Limited Cache hierarchy management
US10291258B2 (en) 2017-05-25 2019-05-14 Advanced Micro Devices, Inc. Error correcting code for correcting single symbol errors and detecting double bit errors
KR102490104B1 (ko) 2017-10-30 2023-01-19 삼성전자주식회사 데이터 보호를 사용하는 인-밴드 메모리에 액세스하기 위한 장치 및 방법
US20190265976A1 (en) * 2018-02-23 2019-08-29 Yuly Goryavskiy Additional Channel for Exchanging Useful Information
US11119909B2 (en) * 2018-12-11 2021-09-14 Texas Instmments Incorporated Method and system for in-line ECC protection
EP3683679A1 (de) 2019-01-15 2020-07-22 ARM Limited Prüfsummenerzeugung
CN110311772A (zh) * 2019-06-15 2019-10-08 上海来远电子科技有限公司 一种可编程加解密方法及其系统

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4747043A (en) 1984-02-10 1988-05-24 Prime Computer, Inc. Multiprocessor cache coherence system
JPS62151971A (ja) 1985-12-25 1987-07-06 Nec Corp マイクロ・プロセツサ装置
US5214769A (en) 1987-12-24 1993-05-25 Fujitsu Limited Multiprocessor control system
US5265004A (en) 1991-10-15 1993-11-23 Allen-Bradley Company, Inc. Sequence controller with combinatorial Boolean logic
US5689672A (en) 1993-10-29 1997-11-18 Advanced Micro Devices, Inc. Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions
DE69429061T2 (de) 1993-10-29 2002-07-18 Advanced Micro Devices Inc Superskalarmikroprozessoren
US5721854A (en) 1993-11-02 1998-02-24 International Business Machines Corporation Method and apparatus for dynamic conversion of computer instructions
US5604753A (en) * 1994-01-04 1997-02-18 Intel Corporation Method and apparatus for performing error correction on data from an external memory
US6161208A (en) * 1994-05-06 2000-12-12 International Business Machines Corporation Storage subsystem including an error correcting cache and means for performing memory to memory transfers
US5752264A (en) 1995-03-31 1998-05-12 International Business Machines Corporation Computer architecture incorporating processor clusters and hierarchical cache memories
US5828895A (en) 1995-09-20 1998-10-27 International Business Machines Corporation Methods and system for predecoding instructions in a superscalar data processing system
US5819067A (en) 1996-02-23 1998-10-06 Advanced Micro Devices, Inc. Computer system configured to translate a computer program into a second computer program prior to executing the computer program
US5748978A (en) 1996-05-17 1998-05-05 Advanced Micro Devices, Inc. Byte queue divided into multiple subqueues for optimizing instruction selection logic
US6115795A (en) * 1997-08-06 2000-09-05 International Business Machines Corporation Method and apparatus for configurable multiple level cache with coherency in a multiprocessor system
US5951671A (en) 1997-12-18 1999-09-14 Advanced Micro Devices, Inc. Sharing instruction predecode information in a multiprocessor system
US6108753A (en) * 1998-03-31 2000-08-22 International Business Machines Corporation Cache error retry technique
US6092182A (en) 1998-06-24 2000-07-18 Advanced Micro Devices, Inc. Using ECC/parity bits to store predecode information

Also Published As

Publication number Publication date
CN1287292C (zh) 2006-11-29
WO2003003218A1 (en) 2003-01-09
KR100884351B1 (ko) 2009-02-18
TW583541B (en) 2004-04-11
US6804799B2 (en) 2004-10-12
DE60223023D1 (de) 2007-11-29
US20020199151A1 (en) 2002-12-26
KR20040041550A (ko) 2004-05-17
EP1399824A1 (de) 2004-03-24
CN1522410A (zh) 2004-08-18
JP2004531837A (ja) 2004-10-14
EP1399824B1 (de) 2007-10-17
JP4170216B2 (ja) 2008-10-22

Similar Documents

Publication Publication Date Title
DE60223023T2 (de) Verwendung von typenbit zur verfolgung der speicherung von ecc- und vordekodierungsbit in einem cache der ebene 2
DE60102017T2 (de) Räumungsfilter für adressenübersetzungspuffer
DE60025028T2 (de) Speicherpuffer, der daten, basierend auf index und freiwilliger weisebemusterung überträgt
DE69835100T2 (de) Prozessor konfiguriert um vorausschauende resultate von zusammengefassten übertragungs-, vergleichs- und einfachen arithmetischen befehlen zu produzieren
DE112004002848B4 (de) Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor
DE60009151T2 (de) Vorhersage von datenbeförderung von speicher- zum ladebefehl mit untrainierung
DE60205363T2 (de) Mikroprozessor mit einem performance-drosselmechanismus für das energiemanagement
DE60003235T2 (de) Cachespeicher zum bereitstellen von partiellen etiketten aus nicht-vorhergesagten wegen um die suche bei wegvorhersagefehlgriffen zu leiten
JP3836322B2 (ja) プリデコード情報を記憶するためのecc/パリティビットの使用
DE112004001608B4 (de) Mikro-TLB und Mikro-Etiketten für das Verringern der Leistungsaufnahme in einem Prozessor
CN101646999B (zh) 以适当的预解码预载来自可变长度指令集的指令的系统、方法和软件
DE69908175T2 (de) Verbesserte befehlsdekodierung durch paralleldekodierungsalgorithmus
DE112006003632B4 (de) Dynamische selbstzerfallende Bauteilarchitektur
US6427192B1 (en) Method and apparatus for caching victimized branch predictions
US7337272B2 (en) Method and apparatus for caching variable length instructions
US6240506B1 (en) Expanding instructions with variable-length operands to a fixed length
DE112008001666T5 (de) Hierarchische Cache-Tag-Architektur
DE602004010265T2 (de) Load-store-einheit mit wiederholungsmechanismus
DE112004000736T5 (de) System und Verfahren zur Verhinderung einer Unterbrechung von Operationswiederholungen durch anhängige Instanzen von Operationen innerhalb eines datenspekulativen Mikroprozessors
DE112004001248B4 (de) Mikroprozessor und Verfahren zum Ausführen einer index-behafteten Speicher-zu-Lade-Weiterleitung
US20040073775A1 (en) Data flow oriented storage
DE112004000741B4 (de) Spekulationszeiger zur Identifizierung datenspekulativer Operationen in einem Mikroprozessor
US5687350A (en) Protocol and system for performing line-fill address during copy-back operation
DE69736404T2 (de) Abhängigkeitstabelle zum reduzieren von hardware zur überprüfung von abhängigkeiten
DE10059501B4 (de) Abrufen eines nicht-spekulativen Befehls bei einem spekulativen Verarbeiten

Legal Events

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

Owner name: GLOBALFOUNDRIES INC., GRAND CAYMAN, KY

8328 Change in the person/name/address of the agent

Representative=s name: GRUENECKER, KINKELDEY, STOCKMAIR & SCHWANHAEUSSER,