-
Hintergrund
der Erfindung
-
1. Technisches
Gebiet
-
Diese
Erfindung betrifft das Gebiet der Prozessoren und betrifft insbesondere
die Speicherabhängigkeitsprüfung und
die Weiterleitung von Schreibdaten für nachfolgende Lade- bzw. Leseoperationen.
-
2. Hintergrund
der Erfindung
-
EP-A-0
651 331 offenbart einen Schreibpuffer für superskalare Mikroprozessoren
mit einer „Superpipeline"-Konfiguration. Es
werden Maßnahmen zum
Erkennen von Datengefährdungen
oder Abhängigkeiten,
etwa „Lesen-nach-Schreiben" (RAW) Abhängigkeiten
vorgesehen, indem die gelesene physikalische Adresse eines Lesebefehls
mit jedem der physikalischen Adressenwerte in allen Einträgen des Schreibpuffers
verglichen wird. Um Daten einer Schreiboperation an eine nachfolgende
Leseoperation weiterzuleiten, muss im Falle einer RAW-Gefährdung,
die Bedingung erfüllt
werden, dass die Leseoperation nur Bytes umfasst, die eine Teilmenge
der Bytes bilden, die von der Schreiboperation zu schreiben sind.
-
US-A-5
606 670 offenbart ein Verfahren und eine Vorrichtung, um einem Schreibpuffer
zu signalisieren, gespeicherte Schreibdaten für eine Lade- bzw. Leseoperation
in einem Computersystem mit „außer der
Reihenfolge"-Ausführung auszugeben.
Es ist eine Schreibweiterleitungsschaltung vorgesehen, die bedingt
Schreibdaten für
eine Speicherleseoperation aus einer variablen Teilmenge der gespeicherten
Speicherschreiboperationen, die funktionell abhängig ist zu dem Zeitpunkt,
in welchem die Speicherleseoperation ausgegeben wird, weiterleitet,
wobei die Ausnahmezustände
dieser gespeicherten Speicherschreiboperationen berücksichtigt
werden.
-
Superskalare
Prozessoren versuchen, ein höheres
Leistungsvermögen
zu erreichen, indem mehrere Befehle pro Taktzyklus ausgegeben und ausgeführt werden
und indem die größtmögliche Taktfrequenz,
die mit dem Aufbau verträglich
ist, verwendet wird. Im Laufe der Zeit wurde die Anzahl der Befehle,
die gleichzeitig von superskalaren Prozessoren ausge geben und/oder
ausgeführt
werden können,
ständig
erhöht,
um das Leistungsvermögen
superskalarer Prozessoren zu verbessern.
-
Wenn
jedoch mehr Befehle gleichzeitig ausgeführt werden können, wird
es zunehmend wichtig, Lade- bzw. Leseoperationen in rascher Weise
zu verarbeiten. Ladeoperationen sind Zugriffe auf einen externen
Speicher (im Gegensatz zu internen Registern), in denen die Daten,
die an den Speicherstellen abgelegt sind, auf die von der Ladeoperation
zugegriffen wird, in den Prozessor übertragen werden (beispielsweise
in ein internes Register). Im Gegensatz dazu sind Speicher- bzw.
Schreiboperationen Zugriffe auf einen externen Speicher, wobei Daten, die
von dem Prozessor erzeugt werden, in der Speicherstelle gespeichert
werden, auf die von der Schreib- bzw. Speicheroperation zugegriffen
wird. Obwohl Ladeoperationen und Schreiboperationen als Zugriffe
auf einen externen Speicher definiert sind, können ein oder mehrere interne
Cache-Speicher in dem Prozessor verwendet werden, um die Speicherwartezeit
für Zugriffe,
die auf die Cache-Speicher abzielen, zu reduzieren.
-
Da
Lade- bzw. Leseoperationen Daten von dem Speicher in den Prozessor übertragen,
was typischerweise so stattfindet, dass auf den Daten mittels nachfolgender
Befehlsoperationen operiert werden kann, ist es wichtig, die Ladeoperationen
in rascher Weise zu verarbeiten, um damit die Daten für die nachfolgenden
Befehlsoperationen bereitzustellen. Wenn die Daten nicht rasch bereitgestellt
werden, werden die nachfolgenden Befehlsoperationen unterbrochen.
Wenn andere Befehle für
die Disponierung bzw. die Ablauforganisation zur Ausführung nicht
verfügbar
sind, kann sich der Gesamtbefehlsdurchsatz verringern (und kann
folglich das Leistungsverhalten reduzieren). Da superskalare Prozessoren
versuchen, eine große
Anzahl an Befehlen gleichzeitig auszugeben/auszuführen, können diese
Auswirkungen noch stärker
hervortreten. Somit wächst
auch der Bedarf für
ein rasches Verarbeiten von Ladeoperationen.
-
Ferner
kann die Zunahme der Zahl an gleichzeitig ausgegebenen/ausgeführten Befehlen
in einem Prozessor zu einer mittleren Zunahme der Anzahl an Schreib-
bzw. Speicheroperationen führen, die
in einer Schreibwarteschlange enthalten sind. Typischerweise werden
Schreiboperationen nicht an einen Speicher (Cache-Speicher oder
externer Speicher) übergeben,
bis nicht bekannt ist, dass diese nicht-spekulativ sind. Beispielsweise
werden Schreiboperationen nicht festgelegt, bis sie abgeschlossen sind.
Die Schreiboperationen werden in der Schreibwarteschlange angeordnet,
wobei eine Schreibadresse enthalten ist, die unter Verwendung der Adressenoperanden
des Schreibbefehls und der zu speichernden Daten erzeugt wird, bis
die Schreibbefehle in dem Speicher abgelegt werden.
-
Obwohl
eine größere Anzahl
an Schreibbefehlen in der Schreibwartelange für sich kein Problem hinsichtlich
der Leistungsfähigkeit
darstellen muss, kann die größere Anzahl
an Schreibbefehlen indirekterweise ein Problem für die Leistungsfähigkeit
für die rasche
Verarbeitung von Ladebefehlen darstellen. Wenn die Anzahl der Schreibbefehle
innerhalb der Schreibwarteschlange ansteigt, wächst auch die Wahrscheinlichkeit,
dass Daten, auf die von einem Ladebefehl zugegriffen wird, sich
in der Schreibwarteschlange befinden (im Gegensatz zu dem Cache/externen
Speicher). Ferner kann auch die Wahrscheinlichkeit ansteigen, dass
einige Bytes, auf die von dem Ladebefehl zugegriffen wird, von einem
vorhergehenden Schreibbefehl in der Schreibwarteschlange modifiziert
werden, während
andere Bytes, auf die von dem Ladebefehl zugegriffen wird, von einem
weiteren vorhergehenden Schreibbefehl in der Schreibwarteschlange
modifiziert werden können. Des
weiteren steigt auch die Wahrscheinlichkeit an, dass Schreibdaten,
die von dem Ladebefehl zu verwenden sind, in der Schreibwarteschlange
nicht verfügbar
sind. Je häufiger
diese Ereignisse auftreten, desto größer wird die Barriere für eine rasche
Ladebefehlsverarbeitung.
-
Überblick über die
Erfindung
-
Die
zuvor dargestellten Probleme werden größtenteils durch eine Lade/Schreibeinheit
gelöst, die
ausgebildet ist, eine Weiterleitung von Schreibbefehlen zu Ladebefehlen
auszuführen.
Die Lade/Schreibeinheit durchsucht eine Schreibwarteschlange, die
darin enthalten ist, in Bezug auf jedes von dem Ladebefehl abgerufene
Byte unabhängig von
den anderen Bytes, und bestimmt den jüngsten Schreibbefehl (in der
Programmreihenfolge), um dieses Bytes zu aktualisieren. Selbst wenn
ein oder mehrere Bytes, auf die von dem Ladebefehl zugegriffen werden,
durch einen Schreibbefehl modifiziert werden, während ein oder mehrere andere
Bytes, auf die von dem Ladebefehl zugegriffen wird, durch einen
weiteren Schreibbefehl modifiziert werden, kann der Weiterleitungsmechanismus
daher die Bytes, auf die von dem Ladebefehl bzw. der Ladeoperation
zugegriffen wird, zusammenfügen.
Vorteilhafterweise können
die Ladedaten von der Schreibwarteschlange weitergeleitet werden,
wenn die Ladedaten darin gespeichert sind. Insbesondere können die
Ladedaten in genauer Weise aus einer beliebigen Anzahl an Schreibbefehlen
weitergeleitet werden. Bei spielsweise kann die Weiterleitung aus
Null Schreibbefehlen heraus (wenn die Schreibwartschlange leer ist
oder keine Treffer für
die Schreibwarteschlange für
einen speziellen Ladebefehl erkannt werden), aus einem einzelnen
Schreibbefehl bzw. einer einzelnen Schreiboperation (wenn der Schreibbefehl
der jüngste
ist, um jedes Byte zu aktualisieren, auf das von der Ladeoperation
zugegriffen wird), oder aus bis zu N Schreiboperationen (wobei N
die Anzahl an Bytes ist, auf die von der Ladeoperation zugegriffen
wird) heraus erfolgen. Ladeoperationen bzw. Befehle können in
rascher Weise verarbeitet werden und somit kann das Gesamtleistungsverhalten
eines Prozessors mit der Lade/Schreibeinheit verbessert werden.
-
In
einer speziellen Ausführungsform
erzeugt die Lade/Schreibeinheit einen Bit-Vektor aus einer vorbestimmten
Menge von am wenigsten signifikanten Bits der Adressen von Ladebefehlen
und Schreibbefehlen. Der Bit-Vektor enthält ein Bit für jedes
Byte in einem Bereich, der durch die Anzahl der am wenigsten signifikanten
Bits definiert ist. Das Bit zeigt an, ob das Byte aktualisiert wird
(für Schreib-Bit-Vektoren)
oder ob darauf zugegriffen wird (für Lade-Bit-Vektor). Die Lade/Schreibeinheit
kann dann die Bit-Vektoren untersuchen (und die verbleibenden Bits
der Schreib- und Ladeadressen ausschließlich der am wenigsten signifikanten
Bits, die zum Erzeugen der Bit-Vektoren verwendet werden, vergleichen),
um die jüngste
Aktualisierung jedes Bytes zu erkennen. Da die Bit-Vektoren jedes
angesprochene/aktualisierte Byte individuell angeben, kann die Verarbeitung
zur Erkennung der jüngsten
Aktualisierung jedes Bytes unabhängig
für jedes
Byte (und parallel) ausgeführt
werden. Die von den diversen Schreibwarteschlangeneinträgen ausgewählten Bytes
werden dann zusammengefügt,
um den Satz aus Bytes zu bilden, auf den von dem Ladebefehl bzw.
der Ladeoperation zugegriffen wird.
-
Allgemein
gesagt, wird ein Verfahren zur Weiterleitung von Schreibdaten, auf
die von einem Ladebefehl zugegriffen wird, aus einer Schreibwarteschlange
bereitgestellt. Es wird ein erstes Byte, auf das von dem Ladebefehl
zugegriffen wird, aus einem ersten Schreibwarteschlangeneintrag
innerhalb der Schreibwarteschlange ausgewählt. Ein erster Schreibbefehl
bzw. eine erste Schreiboperation entsprechend dem ersten Schreibwarteschlangeneintrag
ist der jüngste
in der Programmreihenfolge, um das erste Byte zu aktualisieren.
Ein zweites Byte, auf das von dem Ladebefehl zugegriffen wird, wird
aus einem zweiten Schreibwarteschlangeneintrag innerhalb der Schreibwarteschlange
ausgewählt,
wobei der zweite Schreibwarteschlangeneintrag unterschiedlich ist
zu dem ersten Schreibwarteschlangenein trag. Ein zweiter Schreibbefehl,
der dem zweiten Schreibwarteschlangeneintrag entspricht, ist der jüngste in
der Programmreihenfolge, um das zweite Byte zu aktualisieren. Das
Auswählen
des zweiten Bytes ist unabhängig
zum Auswählen
des ersten Bytes.
-
Es
wird eine Lade/Schreibeinheit bereitgestellt. Die Lade/Schreibeinheit
umfasst eine Schreibwarteschlange, die ausgebildet ist, Adressen
und Daten, die den Schreibbefehlen bzw. Schreiboperationen entsprechen,
die noch nicht abgeschlossen sind, in einem Datencache-Speicher
abzulegen, und umfasst ferner eine Weiterleitungslogik, die mit
der Warteschlange verbunden ist. Die Weiterleitungslogik ist ferner
angeschlossen, um eine Ladeadresse zu empfangen und ist ausgebildet,
unabhängig
für jedes
einzelne Byte aus mehreren Bytes, auf die von einem Ladebefehl entsprechend
der Ladeadresse zugegriffen wird, zu bestimmen, welche der Schreiboperationen,
die in der Schreibwarteschlange gespeichert sind, die jüngste Aktualisierung
dieses einzelnen Bytes der mehreren Bytes ist. Mindestens eines
der mehreren Bytes ist von einer Schreiboperation in der Schreibwarteschlange
verfügbar
und mindestens ein weiteres der mehreren Bytes ist von einer weiteren Schreiboperation
innerhalb der Schreiboperation verfügbar.
-
Ferner
wird ein Prozessor bereitgestellt. Der Prozessor umfasst mindestens
einen Ausführungskern
mit einer oder mehreren Adressenerzeugungseinheiten. Die Adressenerzeugungseinheiten
sind ausgebildet, Lade- bzw. Lese-Adressen entsprechend den Ladeoperationen
bzw. Ladebefehlen zu erzeugen, und Schreibadressen entsprechend
den Schreiboperationen bzw. Schreibbefehlen zu erzeugen. Der Prozessor
umfasst ferner eine Lade/Schreibeinheit, die mit dem Ausführungskern
verbunden ist, wobei die Lade/Schreibeinheit eine Schreibwarteschlange
aufweist, die ausgebildet ist, die Schreibadressen und entsprechende
Schreibdaten für
Schreiboperationen zu speichern, die innerhalb des Prozessors anhängig sind.
Des weiteren ist die Lade/Schreibeinheit ausgebildet, die Ladeadressen
zu empfangen und Schreibdaten entsprechend den Ladeoperationen von
der Schreibwarteschlange weiterzuleiten, wenn darin Schreibdaten
gespeichert sind, die den Ladeoperationen entsprechen. Die Lade/Schreibeinheit
ist ausgebildet, eine spezielle Schreiboperation innerhalb der Schreibwarteschlange
auszuwählen,
von der Daten unabhängig
auf der Grundlage von Byte zu Byte für jedes Byte, auf das von einem
speziellen Ladebefehl zugegriffen wird, weiterzuleiten sind.
-
Kurze Beschreibung der
Zeichnungen
-
Weitere
Aufgaben und Vorteile der Erfindung gehen deutlicher aus der folgenden
detaillierten Beschreibung unter Bezugnahme zu den begleitenden Zeichnungen
hervor, in denen:
-
1 eine
Blockansicht einer Ausführungsform
eines Prozessors ist;
-
2 eine
Blockansicht von Teilen einer Ausführungsform des in 1 gezeigten
Prozessors ist, wobei ein Datencache-Speicher, eine Lade/Schreibeinheit
und Funktionseinheiten enthalten sind;
-
3 eine
Blockansicht ist, die eine Schreibwarteschlange und eine Weiterleitungslogik
gemäß einer
Ausführungsform
der in 2 gezeigten Lade/Schreibeinheit zeigt;
-
4 eine
Ansicht ist, in der eine beispielhafte Ausführungsform eines Schreibdatenbereichs der
Schreibwarteschlange gezeigt ist, die in 3 dargestellt
ist;
-
5 eine
Ansicht ist, die eine Ausführungsform
der in 3 gezeigten Weiterleitungslogik zeigt;
-
6 ein
Beispiel zum Weiterleiten von Daten aus der in 2 gezeigten
Schreibwarteschlange ist;
-
7 eine
Blockansicht eines Computersystems ist, das den in 1 gezeigten
Prozessor enthält.
-
Obwohl
die Erfindung diversen Modifizierungen und alternativen Formen unterliegen
kann, sind dennoch spezielle Ausführungsformen beispielhaft in den
Zeichnungen dargestellt und werden im Folgenden detailliert beschrieben.
Es sollte jedoch beachtet werden, dass die Zeichnungen und die detaillierte Beschreibung
nicht beabsichtigen, die Erfindung auf die spezielle offenbarte
Form einzuschränken,
sondern die Erfindung soll vielmehr alle Modifizierungen, Äquivalente
und Alternativen abdecken, die im Bereich der vorliegenden Erfindung,
wie sie durch die angefügten
Patentansprüche
definiert ist, liegen.
-
Art bzw. Arten zum Ausführen der
Erfindung
-
1 ist
eine Blockansicht einer Ausführungsform
eines Prozessors. In der Ausführungsform aus 1 umfasst
der Prozessor 10 eine Reihenvorhersageeinheit 12,
einen Befehlscache-Speicher (I-Cache-Speicher) 14, eine
Ausricht- bzw. Justiereinheit 16, eine Verzweigungsgeschichtetabelle 18, einen
indirekten Adressencache-Speicher 20, einen Rücksprungstapel 22,
eine Decodiereinheit 24, eine Vorhersagenichttreffer-Decodiereinheit 26,
eine Mikrocodierungseinheit 28, eine Abbildungs- bzw. Zuordnungseinheit 30,
einen Zuordnungs-Silo 32, einen Konfigurationsumbenennungsblock 34,
ein Paar aus Befehlswarteschlangen 36a bis 36b,
ein Paar aus Registerdateien 38a bis 38b, ein
Paar aus Ausführungskernen 40a bis 40b,
eine Lade/Schreibeinheit 42, einen Datencache-Speicher
(D-Cache-Speicher) 44,
eine externe Schnittstelleneinheit 46, eine PC-Silo- und
Umleitungseinheit 48 und einen Befehls-TLB (ITB) 50.
Die Reihenvorhersageeinheit 12 ist mit dem ITB 50,
der Vorhersagenichttrefferdecodiereinheit 26, der Verzweigungsgeschichtetabelle 18,
dem indirekten Adressencache-Speicher 20, dem Rücksprungstapel 22,
dem PC-Silo- und Umleitungsblock 48, der Justiereinheit 16 und
dem I-Cache-Speicher 14 verbunden. Der I-Cache-Speicher 14 ist
mit der Justiereinheit 14 verbunden. Die Justiereinheit 16 ist
ferner mit der Vorhersagenichttreffer-Decodiereinheit 26 und
der Decodiereinheit 24 verbunden. Die Decodiereinheit 24 ist
ferner mit der Mikrocodierungseinheit 28 und der Zuordnungseinheit 30 verbunden.
Die Zuordnungseinheit 30 ist mit dem Zuordnungs-Silo 32,
dem Konfigurationsumbenennungsblock 34, den Befehlswarteschlangen 36A–36B,
der Lade/Schreibeinheit 42, den Ausführungskernen 40A–40B und dem
PC-Silo- und Umbenennungsblock 48 verbunden. Die Befehlswarteschlangen 36A–36B sind
miteinander und mit den entsprechenden Ausführungskernen 40A–40B und
den Registerdateien 38A–38B verbunden. Die
Registerdateien 38A–38B sind
miteinander und mit entsprechenden Ausführungskernen 40A–40B verbunden.
Die Ausführungskerne 40A–40B sind
ferner mit der Lade/Schreibeinheit 42, dem Datencache-Speicher 44 und
der PC-Silo- und Umleitungseinheit 48 verbunden. Die Lade/Schreibeinheit 42 ist
mit der PC-Silo- und Umleitungseinheit 48, dem D-Cache-Speicher 44 und
der externen Schnittstelleneinheit 46 verbunden. Der D-Cache-Speicher 44 ist
mit den Registerdateien 38 verbunden, und die externe Schnittstelleneinheit 46 ist mit
einer externen Schnittstelle 52 verbunden. Elemente, die
hierin mit einem Bezugszeichen mit einem nachfolgenden Buchstaben
bezeichnet sind, werden gemeinsam durch das Bezugszeichen alleine
benannt. Beispielsweise werden die Befehlswarteschlangen 36A–36B gemeinsam
als Befehlswarteschlangen 36 bezeichnet.
-
Im
Allgemeinen stellt die Lade/Schreibeinheit 42 die Weiterleitung
von einer Schreibwarteschlange, die darin enthalten ist, für Ladeoperationen bzw.
Ladebefehle bereit. Der Weiterleitungsmechanismus durchsucht die
Schreibwarteschlange nach jedem Byte des Ladebefehls unabhängig zu
den anderen Bytes und bestimmt den jüngsten Schreibbefehl (in der
Programmreihenfolge), um das Byte zu aktualisieren. Wenn daher ein
oder mehrere Bytes, auf die von der Ladeoperation zugegriffen wird,
von einem einzelnen Schreibbefehl modifiziert werden, während ein
oder mehrere Bytes, auf die von dem Ladebefehl zugegriffen wird,
durch einen weiteren Schreibbefehl modifiziert werden, kann der
Weiterleitungsmechanismus die Bytes zusammenfügen, auf die von der Ladeoperation
zugegriffen wird. Vorteilhafterweise können die Ladedaten von der
Schreibwarteschlange weitergeleitet werden, wenn die Ladedaten darin
gespeichert sind. Ladebefehle- bzw. Ladeoperationen können rascher
ausgeführt
werden, und somit kann das Gesamtleistungsverhalten des Prozesses 10 verbessert
werden.
-
Im
hierin verwendeten Sinne bezeichnet der Begriff „Programmreihenfolge" die Sequenz bzw.
Abfolge aus Befehlen, wie sie in einem gerade ausgeführten Programm
spezifiziert ist. Ein spezieller Schreibbefehl ist der jüngste in
der Programmreihenfolge, um ein Byte zu aktualisieren, wenn keine
anderen Schreibbefehle zwischen (in der Programmreihenfolge) dem
speziellen Schreibbefehl und dem Ladebefehl, für den die Weiterleitung versucht
wird, vorhanden sind.
-
In
einer speziellen Ausführungsform
erzeugt die Lade/Schreibeinheit 42 einen Bit-Vektor aus
einer vorbestimmten Menge von am wenigsten signifikanten Bits der
Adressen der Lade- und Schreibbefehle. Der Bit-Vektor enthält ein Bit
für jedes
Byte in einem Bereich, der die Anzahl der am wenigsten signifikanten
Bits definiert. Das Bit zeigt an, ob das Byte aktualisiert wird
(für Schreib-Bit-Vektoren)
oder ob auf dieses zugegriffen wird (für Lade-Bit-Vektoren). Beispielsweise kann ein Setzen
des Bits anzeigen, dass das Byte aktualisiert/dem Zugriff unterliegt
und ein Zurücksetzen
des Bits kann anzeigen, dass das Byte nicht aktualisiert wird/kein
Zugriff darauf erfolgt. Alternativ kann ein zurückgesetztes Bit anzeigen, dass das
Byte aktualisiert wird/ein Zugriff darauf erfolgt, und ein gesetztes
Bit kann anzeigen, dass das Byte nicht aktualisiert wird/darauf
zugegriffen wird. Die Lade/Schreibeinheit 42 kann die Schreib-Bit-Vektoren erzeugen,
wenn die Schreibadressen in der Schreibwarteschlange abgelegt werden,
und sie kann die Lade-Bit-Vektoren bei der Bereitstellung der entsprechenden
Ladeadressen für
den Daten-Cache-Speicher 44 und die Lade/Schreibeinheit 42 erzeugen. Die
Lade/Schreibeinheit 42 kann dann die Bit-Vektoren untersuchen
(und die verbleibenden Bits der Schreib- und Ladeadressen ausschließlich der
am wenigsten signifikanten Bits, die zum Erzeugen der Bit-Vektoren
verwendet werden, vergleichen), um die jüngste Aktualisierung jedes
Bytes zu erkennen. Da die Bit-Vektoren jedes angesprochene/aktualisierte Byte
individuell kennzeichnen, kann die Verarbeitung für das Erkennen
der jüngsten
Aktualisierung jedes Bytes unabhängig
für jedes
Byte (und parallel) ausgeführt
werden. Die von den diversen Schreibwarteschlangeneinträgen ausgewählten Bytes
werden dann zusammengefügt,
um den Satz aus Bytes zu bilden, auf den von dem Ladebefehl zugegriffen
wird.
-
Es
ist zu beachten, dass Ladebefehle und Schreibbefehle im Allgemeinen
eine damit verknüpfte
Adresse besitzen, die den Speicherplatz innerhalb eines Speichers
angibt, auf den von dem Ladebefehl/Schreibbefehl zugegriffen wird
oder der aktualisiert wird. Ein oder mehrere Adressenoperanden der Lade/Schreibbefehle
wird von dem Prozessor 10 verwendet, um die Adresse zu
erzeugen. Adressenoperanden können
Registerwerte sowie Verschiebungen, die in dem Befehl codiert sind,
enthalten.
-
In
der Ausführungsform
aus 1 verwendet der Prozessor 10 eine Befehlssatzarchitektur
mit variabler Bytelänge
und einer komplexen Befehlssatzberechnung (CISC). Beispielsweise
kann der Prozessor 10 die x86-Befehlssatzarchitektur verwenden
(die auch als IA-32 bezeichnet ist). In anderen Ausführungsformen
können
andere Befehlssatzarchitekturen verwendet werden, einschließlich einer Befehlssatzarchitektur
mit festgelegter Befehlslänge und
Befehlssatzarchitekturen mit einer reduzierten Befehlssatzberechnung
(RISC). Gewisse Merkmale, die in 1 gezeigt
sind, können
in derartigen Architekturen weggelassen werden.
-
Die
Reihenvorhersageeinheit 12 ist ausgebildet, Abholadressen
für den
I-Cache-Speicher 14 zu erzeugen, und ist ferner ausgebildet,
Information hinsichtlich einer Linie bzw. Reihe aus Befehlsoperationen
für die
Justiereinheit 16 bereitzustellen. Im Allgemeinen speichert
die Reihenvorhersageeinheit 12 Reihen aus den Befehlsoperationen,
die zuvor von dem Prozessor 10 spekulativ abgeholt werden,
und speichert eine oder mehrerer nächste Abholadressen entsprechend
jeder Linie, die beim Abholen der Linie auszuwählen sind. In einer Ausführungsform
ist die Reihenvorhersageeinheit 12 ausgebildet, 1K-Einträge zu speichern,
wobei jeder eine einzelne Linie aus Befehlsoperationen definiert.
Die Reihenvor hersageeinheit 12 kann in beispielsweise 4
Bänke aus
246 Einträgen
aufgeteilt werden, um bei Bedarf ein gleichzeitiges Auslesen und
Aktualisieren ohne eine duale Port- bzw. Anschlusskonfiguration
zu ermöglichen.
-
Die
Reihenvorhersageeinheit 12 liefert die nächste Abholadresse
an den I-Cache-Speicher 14, um die entsprechenden Befehlsbytes
abzuholen. Der I-Cache-Speicher 14 ist ein Hochgeschwindigkeitscache-Speicher
zur Speicherung von Instruktions- bzw. Befehlsbytes. Gemäß einer
Ausführungsform umfasst
der I-Cache-Speicher 14 beispielsweise eine 256 K-Byte-Vier-Wege-teilassoziative
Organisation unter Anwendung von 64 Byte-Cache-Zeilen. Jedoch ist eine beliebige andere
I-Cache-Struktur möglich. Ferner
wird die nächste
Abholadresse zurück
an die Reihenvorhersageeinheit 12 als ein Eingangssignal geleitet,
um Information hinsichtlich der entsprechenden Linien aus Befehlsoperationen
abzuholen. Die nächste
Abholadresse kann von einer Adresse überschrieben werden, die von
dem ITB 50 in Reaktion auf Ausnahmebedingungen bereitgestellt
werden, die der PC-Silo- und Umleitungseinheit 48 berichtet werden.
-
Die
nächste
Abholadresse, die von der Reihenvorhersageeinheit 12 bereitgestellt
wird, kann die Adresse benachbart zu dem letzten Befehl innerhalb der
Linie sein (wenn die Linie mit einem Nichtverzweigungsbefehl abschließt). Alternativ
kann die nächste
Abholadresse eine Zieladresse eines Verzweigungsbefehls sein, der
die Linie beschließt.
In einer noch weiteren Alternative kann die Linie durch einen Rücksprungbefehl
abgeschlossen sein, wobei dann die nächste Abholadresse aus dem
Rücksprungstapel 22 gewonnen
wird.
-
In
Reaktion auf eine Abholadresse liefert die Reihenvorhersageeinheit 12 Informationen
hinsichtlich einer Linie bzw. Reihe aus Befehlsoperationen an die
Justiereinheit 16 beginnend bei der Abholadresse. Die Justiereinheit 16 empfängt die
Befehlsbytes, die der Abholadresse entsprechen, von dem I-Cache-Speicher 14 und
gruppiert Befehlsbytes in einen Satz aus Ausgabepositionen gemäß der bereitgestellten
Information über
die Befehlsoperationen. Genauer gesagt, die Reihenvorhersageeinheit 12 liefert einen
Verschiebebetrag für
jeden Befehl innerhalb der Reihe der Befehlsoperationen und eine
Zuordnung der Befehle zu dem Satz aus Befehlsoperationen, die die
Linie bzw. Reihe bilden. Ein Befehl kann mehreren Befehlsoperationen
entsprechen, und damit kann der Verschiebebetrag, der diesem Befehl entspricht,
verwendet werden, um Befehlsbytes für mehrere Ausgabepositionen
auszuwählen.
Es wird eine Ausgabeposition für
jede mögliche
Befehlsoperation in der Rei he bereitgestellt. In einer Ausführungsform
kann eine Linie oder Reihe aus Befehlsoperationen bis zu acht Befehlsoperationen,
die bis zu 6 Befehlen entsprechen, enthalten. Im Allgemeinen bezeichnet
im hierin verwendeten Sinne eine Linie bzw. eine Reihe aus Befehlsoperationen
eine Gruppe aus Befehlsoperationen, die gleichzeitig an die Decodiereinheit 24 ausgegeben
werden. Die Reihe aus Befehlsoperationen wandert als Einheit durch
die Pipeline des Mikroprozessors 10 zu den Befehlswarteschlangen 36.
Beim Speichern in den Befehlswarteschlangen 36 können die
einzelnen Befehlsoperationen in einer beliebigen Reihenfolge ausgeführt werden.
-
Die
Ausgabepositionen innerhalb der Decodiereinheit 24 (und
die nachfolgenden Pipeline-Stufen
bis zu den Befehlswarteschlangen 36) definieren die Programmreihenfolge
der Befehlsoperationen innerhalb der Reihe für die Hardware in diesen Pipeline-Stufen.
Eine Befehlsoperation, die von der Justiereinheit 16 einer
Ausgabeposition zugeordnet ist, verbleibt in dieser Ausgabeposition,
bis sie in einer Befehlswarteschlange 36A–36B gespeichert
wird. Folglich kann eine erste Ausgabeposition als vor einer zweiten
Ausgabeposition liegend betrachtet werden, wenn eine Befehlsoperation
in der ersten Ausgabeposition vor einer Befehlsoperation liegt,
die gleichzeitig in der zweiten Ausgabeposition in der Programmreihenfolge
vorliegt. In ähnlicher
Weise kann eine erste Ausgabeposition als nachfolgend zu einer zweiten
Ausgabeposition betrachtet werden, wenn eine Befehlsoperation in
der ersten Ausgabeposition nachfolgend in der Programmreihenfolge
ist, die gleichzeitig in der zweiten Ausgabeposition vorliegt. Befehlsoperationen
in den Ausgabepositionen können
auch als vor oder nach anderen Befehlsoperationen innerhalb der
Reihe bezeichnet werden.
-
Im
hierin verwendeten Sinne ist eine Befehlsoperation (oder ROP) eine
Operation, die in einer Ausführungseinheit
innerhalb der Ausführungskerne 40A bis 40B als
eine einzelne Einheit ausgeführt
werden kann. Einfache Befehle können
einer einfachen Befehlsoperation entsprechen, während komplexere Befehle mehreren
Befehlsoperationen entsprechen können.
Gewisse komplexere Befehle können
in der Mikrocodierungseinheit 28 als Mikrocodierungsroutinen
eingerichtet sein. Ferner kann in Ausführungsformen, in denen Nicht-CISC-Befehlssätze verwendet werden,
eine einzelne Befehlsoperation für
jeden Befehl verwendet werden (d. h. in derartigen Ausführungsformen
sind ein Befehl und eine Befehlsoperation gleichbedeutend). In einer
speziellen Ausführungsform
kann eine Linie bzw. Reihe bis zu 8 Befehlsoperationen entsprechend
bis zu 6 Befehle aufweisen. Des weiteren kann die spezielle Ausführungsform
eine Reihe mit weniger als 6 Befehlen und/oder 8 Be fehlsoperationen
beenden, wenn ein Verzweigungsbefehl erkannt wird. Weitere Einschränkungen hinsichtlich
der Befehlsoperationen für
die Reihe können
nach Bedarf eingesetzt werden.
-
Die
von der Reihenvorhersageeinheit 12 erzeugte Abholadresse
wird zu der Verzweigungsgeschichtetabelle 18, dem indirekten
Adressencache-Speicher 20 und dem Rücksprungstapel 22 geleitet.
Die Verzweigungsgeschichtstabelle 18 liefert eine Verzweigungsgeschichte
für einen
bedingten Verzweigungsbefehl, der die durch die nächste Abholadresse
gekennzeichnete Reihe abschließen kann.
Die Reihenvorhersageeinheit 12 kann die Vorhersage, die
von der Verzweigungsgeschichtetabelle 18 bereitgestellt
wird, verwenden, um zu bestimmen, ob ein bedingter Verzweigungsbefehl
am Ende der Reihe als durchgeführt
oder nicht durchgeführt
vorhergesagt werden sollte. In einer Ausführungsform kann die Reihenvorhersageeinheit 12 eine
Verzweigungsvorhersage speichern, die verwendet werden soll, um
das „durchgeführt oder
nicht durchgeführt" auszuwählen, und
die Verzweigungsgeschichtetabelle 18 wird verwendet, um
eine genauere Vorhersage bereitzustellen, die die Vorhersage der
Reihenvorhersageeinheit löschen
kann und bewirken kann, dass eine andere nächste Abholadresse ausgewählt wird.
Der indirekte Adressencache-Speicher 20 wird verwendet,
um indirekte Verzweigungszieladressen vorherzusagen, die sich häufig ändern. Die
Reihenvorhersageeinheit 12 kann als nächste Abholadresse eine zuvor
erzeugte indirekte Zieladresse speichern.
-
Der
indirekte Adressencache-Speicher 20 kann die nächste Abholadresse
speichern, die von der Reihenvorhersageeinheit 12 bereitgestellt
wird, wenn die entsprechende Reihe von einem indirekten Verzweigungsbefehl
abgeschlossen wird. Des weiteren kann die auf dem letzten Befehl
nachfolgende Adresse innerhalb einer Reihe aus Befehlsoperationen
auf den Rücksprungstapel 22 gelegt
werden, wenn die Reihe durch einen Unterroutinenaufrufbefehl abgeschlossen
wird. Der Rücksprungstapel 22 liefert
die an seiner Oberseite gespeicherte Adresse an die Reihenvorhersageeinheit 12 als
mögliche nächste Abholadresse
für Reihen,
die von einem Rücksprungbefehl
abgeschlossen werden. Zusätzlich
zum Bereitstellen einer nächsten
Abholadresse und einer Information über die Befehlsoperation für die oben
genannten Blöcke
ist die Reihenvorhersageeinheit 12 ausgebildet, Information über die
nächste
Abholadresse und Befehlsoperationen an die PC-Silo- und Umleitungseinheit 48 zu
liefern. Die PC-Silo- und Umleitungseinheit 48 speichert
die Abholadresse und die Reiheninformation und ist für das Umleiten
von Befehlsabholungen bei Ausnahmebehandlungen sowie bei verspäteten Abschließen von Befehlen
verantwortlich. Die PC-Silo- und Umleitungseinheit 48 kann
einen Ringpuffer zum Speichern der Abholadresse und der Befehlsoperationsinformation
entsprechend den mehreren Reihen aus Befehlsoperationen beinhalten,
die in dem Prozessor 10 anhängig sein können. Beim Abschluss einer
Reihe aus Befehlen kann die PC-Silo- und Umleitungseinheit 48 die
Verzweigungsgeschichtetabelle 18 und den indirekten Adressencache-Speicher 20 gemäß der Ausführung eines
bedingten Verzweigungsbefehls bzw. einer indirekten Verzweigung
aktualisieren. Beim Verarbeiten eines Sonder- bzw. Ausnahmebefehls
kann die PC-Silo- und Umleitungseinheit 48 Einträge aus dem
Rücksprungstapel 22 löschen, die
nachfolgend zu dem die Ausnahmesituation hervorrufenden Befehl sind.
Ferner kann die PC-Silo- und Umleitungseinheit 48 eine
Angabe über
den die Ausnahme hervorrufenden Befehl an die Zuordnungseinheit 30,
die Befehlswarteschlangen 36 und die Lade/Schreibeinheit 42 weiterleiten,
so dass diese Einheiten Befehle löschen können, die nachfolgend sind
zu dem die Ausnahmesituation hervorrufenden Befehl und den spekulativen
Zustand entsprechend wieder herstellen.
-
In
einer Ausführungsform
ordnet die PC-Silo- und Umleitungseinheit 48 eine Sequenznummer
(R#) jeder Befehlsoperation zu, um die Reihenfolge der Befehlsoperationen
anzugeben, die in dem Prozessor 10 anhängig sind. Die PC-Silo- und
Umleitungseinheit 48 kann deren # jeder möglichen
Befehlsoperation innerhalb einer Reihe zuordnen. Wenn eine Reihe
weniger als die maximale Anzahl an Befehlsoperationen enthält, werden
einige der zugeordneten R# für
diese Reihe nicht verwendet. Jedoch kann die PC-Silo- und Umleitungseinheit 48 so
ausgebildet sein, dass der nächste
Satz aus R# der nächsten Reihe
aus Befehlsoperationen zugeordnet wird, und damit verbleiben die
zugeordneten aber nicht verwendeten R# unbenutzt, bis die entsprechende
Reihe aus Befehlsoperationen abgeschlossen ist. Auf diese Weise
wird ein Teil der einer vorgegebenen Reihe zugeordneten R# verwendet,
um die Reihe innerhalb des Prozesses 10 zu kennzeichnen.
In einer Ausführungsform
wird ein Maximum an 8 ROP's
einer Reihe zugeordnet. Folglich kann der ersten ROP innerhalb jeder
Reihe eine R# zugeordnet werden, die ein Vielfaches von acht ist.
Nicht benutzte R# werden entsprechend automatisch übersprungen.
-
Die
vorhergehende Erläuterung
ist so angegeben, dass die Reihenvorhersageeinheit 12 die nächsten Adressen
vorhersagt, und Befehlsoperationsinformationen für Reihen aus Befehlsoperationen bereitstellt.
Diese Funktionsweise wird beibehalten, solange jede Abholadresse
die Reihenvorhersageeinheit 12 betrifft. Beim Erkennen
eines Nichttreffers für
die Reihenvorhersageeinheit 12 leitet die Justiereinheit 16 die
entsprechenden Befehlsbytes aus dem I-Cache-Speicher 14 an
die Vorhersagenichttreffer-Decodiereinheit 26 weiter. Die
Vorhersagenichttreffer-Decodiereinheit 26 decodiert die
Befehle beginnend bei dem Offset, der von der nichttreffenden Abholadresse
angegeben wird, und erzeugt eine Reihe aus Befehlsoperationsinformationen
und eine nächste
Abholadresse. Die Vorhersagenichttreffer-Decodiereinheit 26 setzt entsprechende
Beschränkungen
für eine
Reihe aus Befehlsoperationen entsprechend dem Aufbau des Prozesses 10 fest (beispielsweise
eine maximale Anzahl an Befehlsoperationen, eine maximale Anzahl
an Befehlen, Beendigung bei Verzweigungsbefehlen, etc.). Nach dem
Ende des Decodierens einer Reihe liefert die Vorhersagenichttreffer-Decodiereinheit 26 die
Information an die Reihenvorhersageeinheit 12, um die Information
zu speichern. Zu beachten ist, dass die Vorhersagenichttreffer-Decodiereinheit 26 ausgebildet
sein kann, um Befehle in ihrer decodierten Form auszugeben. In 1 ist
diese Option mit einer gestrichelten Linie dargestellt. Alternativ
kann die Vorhersagenichttreffer-Decodiereinheit 26 die
Reihe aus Befehlsoperationen decodieren und diese Reihe der Reihenvorhersageeinheit 12 zur
Speicherung zuführen.
Nachfolgend kann die nichttreffende Abholadresse erneut in der Reihenvorhersageeinheit 12 verwendet
werden, und es kann ein Treffer erkannt werden. Des weiteren kann
ein Treffer in der Reihenvorhersageeinheit 12 erkannt werden
und ein Nichttreffer für
den I-Cache-Speicher 14 kann
auftreten. Die entsprechenden Befehlsbytes können über die externen Schnittstelleneinheit 46 abgeholt
und in dem I-Cache-Speicher 14 gespeichert werden.
-
In
einer Ausführungsform
verwenden die Reihenvorhersageeinheit 12 und der I-Cache-Speicher 14 eine
physikalische Adressierung. Beim Erkennen eines Sonderbefehls bzw.
eines Ausnahmebefehls liefert jedoch die PC-Silo- und Umleitungseinheit 48 eine
logische (oder virtuelle) Adresse. Folglich werden die umgeleiteten
Adressen von dem ITB 50 für die Darstellung für die Reihenvorhersageeinheit 12 übersetzt
(und parallel für
den I-Cache-Speicher 14 zum
Lesen der entsprechenden Befehlsbytes). Zusätzlich bewahrt die PC-Silo- und Umleitungseinheit 48 einen
virtuellen vorausschauenden PC-Wert zur Verwendung bei der Berechnungen
für einen
relativen PC, etwa relative Verzweigungszieladressen. Der virtuelle
vorausschauende PC, der jeder Reihe entspricht, wird von dem ITB 50 übersetzt, um
zu verifizieren, dass die entsprechende physikalische Adresse mit
der physikalische Abholadresse, die von der Reihenvorhersageeinheit 12 erzeugt wird, übereinstimmt.
Wenn eine Nichtübereinstimmung
auftritt, wird die Reihenvorhersageeinheit 12 mit der korrekten
physikalischen Adresse aktualisiert und die korrekten Befehle werden
abgeholt. Die PC- Silo-
und Umleitungseinheit 48 handhabt ferner Ausnahme- bzw.
Sondersituationen, die mit dem Abholen über Schutzgrenzen hinaus, etc.
verknüpft sind.
Die PC-Silo- und Umleitungseinheit 48 bewahrt ferner einen
Abschluss-PC-Wert, der die Adresse der jüngsten abgeschlossenen Befehle
angibt. In der vorliegenden Ausführungsform
kann die PC-Silo- und Umleitungseinheit 48 eine
Reihe aus Befehlsoperationen gleichzeitig abschließen. Folglich
kann die PC-Silo- und Umleitungseinheit 48 eine R#, die
die Reihe angibt, an die Zuordnungseinheit 30, die Befehlswarteschlange 38A–36B und
die Lade/Schreibeinheit 42 übermitteln.
-
Die
Decodiereinheit 24 ist ausgebildet, Befehlsoperationen
von der Justiereinheit 16 in mehreren Ausgabepositionen
zu empfangen, wie dies zuvor beschrieben ist. Die Decodiereinheit 24 decodiert parallel
die Befehlsbytes, die zu jeder Ausgabeposition gehören (zusammen
mit einer Angabe, welche Befehlsoperation entsprechend den Befehlsbytes
in einer speziellen Ausgabeposition zu erzeugen ist). Die Decodiereinheit 24 erkennt
Quellen- und Zieloperanden
für jede
Befehlsoperation und erzeugt die Codierung der Befehlsoperation,
die von den Ausführungskernen 40A–40B verwendet
wird. Die Decodiereinheit 24 ist ferner ausgebildet, Mikrocodierungsroutinen
von der Mikrocodierungseinheit 28 für Befehle abzuholen, die in
einer Mikrocodierung vorliegen.
-
Gemäß einer
speziellen Ausführungsform werden
die folgenden Befehlsoperationen von dem Prozessor 10 unterstützt: Ganzzahl,
Fließkommaaddition
(einschließlich
Multimedia), Fließkommamultiplikation
(einschließlich
Multimedia), Verzweigung, Laden bzw. Lesen, Schreibadressenerzeugung
und Datenspeicherung. Jede Befehlsoperation kann bis zu zwei Quellenregisteroperanden
und einen Zielregisteroperanden verwenden. Gemäß einer speziellen Ausführungsform
kann ein einzelner Zielregisteroperand Integer-ROP's zugeordnet werden,
um sowohl das Integer- bzw. Ganzzahlergebnis als auch eine Bedingungscodierung-
(oder Flaggen-) Aktualisierung zu speichern. Die entsprechenden
logischen Register erhalten beide die entsprechenden PR# beim Abschluss
der Integeroperation. Gewisse Befehle können zwei Befehlsoperationen
der gleichen Art erzeugen, um damit zwei Zielregister zu aktualisieren
(beispielsweise POP, die ESP und das spezifizierte Zielregister
aktualisiert).
-
Die
decodierten Befehlsoperationen und die Quellen- und Zielregisternummern
werden der Zuordnungseinheit 30 zugeführt. Die Zuordnungseinheit 30 ist
ausgebildet, eine Register umbenennung durch Zuordnung physikalischer
Registernummern (PR#) zu jedem Zielregisteroperanden und Quellenregisteroperanden
für jede
Befehlsoperation durchzuführen.
Die physikalischen Registernummern geben Register innerhalb der
Registerdatei 38A–38B an.
Ferner ordnet die Zuordnungseinheit 30 eine Warteschlangennummer
(IQ#) jeder Befehlsoperation zu, die die Lage innerhalb der Befehlswarteschlangen 36A–36B angibt,
die für
die Speicherung der Befehlsoperation ausgewählt sind. Die Zuordnungseinheit 30 liefert
zusätzlich
eine Angabe über die
Abhängigkeiten
für jede
Befehlsoperation, indem die Warteschlangennummern der Befehle bereitgestellt
werden, die jede physikalische Registernummer aktualisieren, die
dem Quellenoperanden der Befehlsoperation zugeordnet ist. Die Zuordnungseinheit 30 aktualisiert
den Zuordnungs-Silo 32 entsprechend den physikalischen
Registernummern und dem Befehl, mit Nummern, die jeder Befehlsoperation
zugeordnet sind (sowie die entsprechenden logischen Registernummern).
Ferner kann der Zuordnungs-Silo 32 ausgebildet sein, einen
vorausschauenden Zustand entsprechend den logischen Registern vor
der Reihe aus Befehlen und eine R# zu speichern, die die Reihe aus
Befehlen in Bezug auf den PC-Silo angibt. Ähnlich zu dem PC-Silo, wie
er zuvor beschrieben ist, kann der Zuordnungs-Silo 32 einen
Ringpuffer aus Einträgen
aufweisen. Jeder Eintrag kann ausgebildet sein, Information entsprechend
einer einzelnen Reihe aus Befehlsoperationen zu speichern.
-
Die
Zuordnungseinheit 30 und der Zuordnungs-Silo 32 sind
ferner ausgebildet, eine Angabe über
den Abschluss aus dem PC-Silo 48 zu empfangen. Beim Abschließen einer
Reihe aus Befehlsoperationen überträgt der Zuordnungs-PC-Silo 32 die physikalischen
Zielregisternummern, die der Reihe zugeordnet sind, und entsprechende
logische Registernummern zu dem Konfigurationsumbenennungsblock 34 zur
Speicherung. Der Konfigurationsumbenennungsblock 34 speichert
eine physikalische Registernummer entsprechend jedem logischen Register, die
den festgeschriebenen Registerzustand für jedes logische Register repräsentiert.
Die Nummern der physikalischen Register, die von dem Konfigurationsumbenennungsblock 34 beim
Aktualisieren der entsprechenden logischen Register durch eine neue physikalische
Registernummer verschoben werden, werden wieder der freien Liste
aus physikalischen Registernummern für die Reservierung für nachfolgende
Befehle zurückgegeben.
In einer Ausführungsform
werden vor dem Zurückgeben
einer Nummer eines physikalischen Registers an die freie Liste, die
Nummern der physikalischen Register mit den verbleibenden Nummern
der physikalischen Registern innerhalb des Konfigurationsumbenennungsblocks 34 verglichen.
Wenn eine physikalische Registernummern weiterhin innerhalb des
Konfigurationsumbenennungsblocks 34 nach dem Verschieben repräsentiert
ist, wird die physikalische Registernummer nicht der freien Liste
hinzugefügt.
Eine derartige Ausführungsform
kann in Fällen
eingesetzt werden, in denen die gleiche physikalische Registernummer verwendet
wird, um mehr als ein Ergebnis eines Befehls zu speichern. Beispielsweise
kann in einer Ausführungsform
mit dem x86-Befehlssatz eine ausreichende Menge an physikalischen
Registern bereitgestellt werden, um Fließkommaoperanden zu speichern.
Auf diese Weise kann ein beliebiges physikalisches Register verwendet
werden, um eine beliebige Art eines Operanden zu speichern. Jedoch
nutzen Ganzzahloperanden und Bedingungscodierungsoperanden den Platz
innerhalb eines gegebenen physikalischen Registers nicht vollständig. In
einer derartigen Ausführungsform
kann der Prozessor 10 ein einzelnes physikalisches Register
benutzen, um sowohl ein Ganzzahlergebnis als auch ein Bedingungscodierungsergebnis
eines Befehls zu speichern. Ein nachfolgender Abschluss eines Befehls,
der das Bedingungscodierungsergebnis, das den physikalischen Registern
entspricht, überschreibt,
kann das gleiche Ganzzahlregister nicht aktualisieren, und damit
ist das physikalische Register beim Festschreiben eins neuen Bedingungscodierungsergebnisses nicht
frei. In ähnlicher
Weise kann bei einem nachfolgenden Abschluss eines Befehls, der
das Ganzzahlregister, aktualisiert, das Bedingungscodierungsregister
nicht aktualisiert werden, und somit ist das physikalische Register
beim Abspeichern des neuen Ganzzahlergebnisses nicht frei.
-
Ferner
sind die Zuordnungseinheit 30 und der Zuordnungs-Silo 32 ausgebildet,
Ausnahme- bzw. Sondersituationsangaben
von dem PC-Silo 48 zu empfangen. Reihen aus Befehlsoperationen,
die auf die Reihe folgen, die die Ausnahmesituation hervorrufende
Befehlsoperation enthält,
werden als unzulässig
innerhalb des Zuordnungs-Silos 32 markiert. Die physikalischen
Registernummern, die den nachfolgenden Reihen aus Befehlsoperationen
entsprechen, werden bei der Auswahl der entsprechenden Reihen für den Abschluss
freigegeben (und der Konfigurationsumbenennungsblock 34 wird
nicht mit den als ungültig
erklärten
Zielregistern aktualisiert). Des weiteren wird der vorausschauende
Registerzustand, der von der Zuordnungseinheit 30 bewahrt wird,
wieder zu dem vorausschauenden Registerzustand gemacht, der dem
die Ausnahme hervorrufenden Befehl entspricht.
-
Die
Reihe aus Befehlsoperationen, die Nummern der physikalischen Quellenregister,
die Nummern der Quellenwarteschlange und die Nummern der physikalischen
Zielregister werden in den Befehlswarteschlangen 36A, 36B entsprechend
den Warteschlangennum mern, die von der Zuordnungseinheit 30 vergeben
werden, gespeichert. Gemäß einer
Ausführungsform
sind die Befehlswarteschlangen 36A, 36B symmetrisch
und können
beliebige Befehle speichern. Ferner können Abhängigkeiten für eine spezielle
Befehlsoperation in Bezug auf andere Befehlsoperationen auftreten,
die in einer der Befehlswarteschlangen gespeichert sind. Die Zuordnungseinheit 30 kann
beispielsweise eine Reihe aus Befehlsoperationen in einer der Befehlswarteschlangen 36A–36B speichern
und eine nachfolgende Reihe aus Befehlsoperationen in der anderen
Befehlswarteschlange 36A–36B speichern. Eine
Befehlsoperation bleibt in der Befehlswarteschlange 36A–36B zumindest
bis die Befehlsoperation für
die Ausführung
vorgesehen ist. In einer Ausführungsform
bleiben die Befehlsoperationen in den Befehlswarteschlangen 36A–36B,
bis diese abgeschlossen sind.
-
Die
Befehlswarteschlangen 36A–36B prüfen beim
Einteilen einer speziellen Befehlsoperation für die Ausführung, bei welchem Taktzyklus
diese spezielle Befehlsoperation die Registerdateien 38A, 38B aktualisiert.
Unterschiedliche Ausführungseinheiten innerhalb
der Ausführungskerne 40A–40B können unterschiedliche
Anzahlen an Pipeline-Stufen (und damit unterschiedliche Wartezeiten)
verwenden. Ferner können
gewisse Befehle eine größere Wartezeit bzw.
Verarbeitungszeit innerhalb einer Pipeline erfahren als andere Befehle.
Folglich wird eine Abwärtszählung erzeugt,
die die Wartezeit für
die spezielle Befehlsoperation misst (gemäß der Anzahl der Taktzyklen).
Die Befehlswarteschlangen 36A–36B warten, bis die
spezifizierte Anzahl an Taktzyklen verstrichen ist (bis die Aktualisierung
vor oder gleichzeitig mit dem Auslesen der Registerdatei durch die
abhängigen
Befehlsoperationen geschieht), und gibt dann an, dass die Befehlsoperationen,
die von dieser speziellen Befehlsoperation abhängen, disponiert bzw. zur Abarbeitung
freigegeben werden. Beispielsweise werden in einer speziellen Ausführungsform abhängige Befehlsoperationen
zwei Taktzyklen vor der Befehlsoperation disponiert, von der diese
durch Aktualisierung der Registerdateien 38A–38B abhängen. In
anderen Ausführungsformen
können
abhängige
Befehlsoperationen mit einer unterschiedlichen Anzahl an Taktzyklen
vor oder nachfolgend zu der Befehlsoperation disponiert werden,
von der sie für das
Abschließen
und Aktualisieren von den Registerdateien 38A–38B abhängen. Jede
Befehlswarteschlange 36A–36B bewahrt die Abwärtszählung für die Befehlsoperationen
innerhalb dieser Warteschlange und ermöglichen es intern, dass abhängige Befehlsoperationen
nach Ablauf der Abwärtszählung disponiert
werden. Ferner liefert die Befehlswarteschlange Angaben für die andere
Befehlswarteschlange nach Ablauf der Abwärtszählung. Daraufhin kann die andere
Befehlswarteschlange abhängige Befehlsoperationen
disponieren. Diese verzögerte Übertragung
von Abschlüssen
von Befehlsoperationen zu der anderen Befehlswarteschlange ermöglicht es
den Registerdateien 38A–38B, Ergebnisse, die
von einem der Ausführungskerne 40A–40B bereitgestellt
werden, zur anderen Registerdatei weiterzuleiten. Jede der Registerdateien 38A–38B richtet den
Satz aus physikalischen Registern ein, die von dem Prozessor 10 verwendet
werden, und wird durch einen der Ausführungskerne 40A–40B aktualisiert. Die
Aktualisierungen werden dann zu der anderen Registerdatei weitergegeben.
Zu beachten ist, dass die Befehlswartenschlangen 36A–36B einen
Befehl disponieren können,
sobald dessen Abhängigkeiten erfüllt sind
(d. h. außer
der Reihenfolge in Bezug auf seine Reihenfolge innerhalb der Warteschlange).
-
Befehlsoperationen,
die von der Befehlswarteschlange 36A disponiert werden,
lesen Quellenoperanden gemäß der Nummer
der physikalischen Quellenregister aus der Registerdatei 38A aus
und werden dann dem Ausführungskern 40A für die Ausführung zugeführt. Der
Ausführungskern 40A führt die
Befehlsoperation aus und aktualisiert das physikalische Register,
das dem Ziel in der Registerdatei 38A zugeordnet ist. Einige
Befehlsoperationen besitzen keine Zielregister, und der Ausführungskern 40A wird
in diesem Falle kein physikalisches Zielregister aktualisieren.
Ferner berichtet der Ausführungskern 40A die
R# der Befehlsoperation und die Ausnahmeinformation hinsichtlich
der Befehlsoperation (falls vorhanden) an die PC-Silo- und Umleitungseinheit 48.
Die Befehlswarteschlange 38B, die Registerdatei 38B und
der Ausführungskern 40B können in ähnlicher
Weise betrieben werden.
-
In
einer Ausführungsform
sind der Ausführungskern 40A und
der Ausführungskern 40B symmetrisch.
Jeder Ausführungskern 40 kann
beispielsweise eine Fließkommaaddiereinheit,
ein Fließkommamultipliziereinheit,
zwei Integer- bzw. Ganzzahleinheiten, eine Verzweigungseinheit,
eine Ladeadressenerzeugungseinheit, eine Schreibaddressenerzeugungseinheit
und eine Schreibdateneinheit aufweisen. Es sind jedoch auch andere
Konfigurationen für
die Ausführungseinheiten
möglich.
-
Zu
den Befehlsoperationen, die keine Zielregister besitzen, gehören das
Erzeugen von Schreibadressen, Schreibdatenoperationen und Verzweigungsoperationen.
Die Schreibadressen/Schreibdatenoperationen liefern Ergebnisse an
die Lade/Schreibeinheit 42. Die Lade/Schreibeinheit 42 stellt
eine Schnittstelle für
den D-Cache-Speicher 44 bereit, um Speicherdatenoperationen
auszuführen. Die
Ausführungskerne 40A–40B führen Lade-
bzw. Lese-ROP's
und Schreibadressen-ROP's
aus, um die Lade- und Schreibadressen auf der Grundlage der Adressenoperanden
der Befehle zu erzeugen. Insbesondere können die Ladeadressen und Schreibadressen
den D-Cache-Speicher 44 beim Erzeugen durch Ausführungskerne 40A–40B (direkt über Verbindungen
zwischen den Ausführungskernen 40A–40B und
dem D-Cache-Speicher 44) zugeführt werden. Ladeadressen, die
den D-Cache-Speicher 44 ansprechen,
führen
dazu, dass Daten von dem D-Cache-Speicher 44 zu den Registerdateien 38 geleitet
werden. Andererseits wird den treffenden Schreibadressen ein Schreibwarteschlangeneintrag zugeordnet.
Danach werden die Schreibdaten von einer Schreibdatenbefehlsoperation
(die verwendet wird, um die Schreibdaten von den Registerdateien 38A–38B zu
der Lade/Schreibeinheit 42 zu leiten) bereitgestellt. Folglich
kann eine Schreiboperation eine Schreibadressenbefehlsoperation
und eine Schreibdatenbefehlsoperation in dieser Ausführungsform
umfassen. Anders ausgedrückt,
die Schreibadressenbefehlsoperation und die entsprechende Schreibdatenbefehlsoperation
werden aus dem gleichen Befehl abgeleitet. Die Schreiboperation kann
ein Befehl sein, oder kann ein impliziter Bereich eines weiteren
Befehls mit einem Speicherzieloperanden sein. Beim Abschluss des
Schreibbefehls werden die Daten in dem D-Cache-Speicher 44 gespeichert.
Ferner kann die Lade-Schreib-Einheit 42 einen Lade/Schreibpuffer
zur Speicherung von Lade/Schreibadressen beinhalten, die nicht den
D-Cache-Speicher 44 betreffen, für nachfolgende Cache-Speicherfüllereignisse
(über die
externe Schnittstelle 46), und für das erneute Versuchen, die
betreffenden Lade/Schreiboperationen auszuführen. Die Lade/Schreibeinheit 42 ist
ferner ausgebildet, Lade/Schreibspeicherabhängigkeiten zu handhaben.
-
2 ist
eine Blockansicht einer Ausführungsform
von Bereichen des Prozessors 10. In der Ausführungsform
aus 2 sind eine Schreibadressenerzeugungseinheit AGU 40AA,
eine Lade-AGU 40AB und eine Schreibdateneinheit 40AC gezeigt. Die
Schreib-AGU 40AA, die Lade-AGU 40AB und die Schreibdateneinheit 40AC sind
in dem Ausführungskern 40A (in 1 gezeigt)
enthalten. Der Ausführungskern 40B ist
in einer Ausführungsform
in ähnlicher
Weise aufgebaut. Alternativ kann in dem Ausführungskern 40B eine
oder mehrere der Ausführungseinheiten,
die in 2 gezeigt sind, weggelassen werden. Des weiteren
ist in 2 ein Schreibtranslationspuffer (TB) 40AD und
ein Lade-TB 40AE dargestellt, die in dem Ausführungskern 40A enthalten
sein können.
Der D-Cache-Speicher 44 und die Lade/Schreibeinheit 42 sind
so dargestellt, dass die Lade/Schreibeinheit 42 eine Lade/Schreibwarteschlange 60,
eine Weiterleitungslogik 62 und eine Schreibwarteschlange 64 enthält. Ferner
ist eine Rotation/Multiplexer-Schaltung 66 gezeigt. Die Schreib-AGU 40AA ist
mit dem Schreib-TB 40AD verbunden, der wiederum mit dem
D-Cache-Speicher 44, der Lade/Schreibwarteschlange 60 und
der Schreibwarteschlange 64 verbunden ist. Die Lade-AGU 40AB ist
mit dem Lade-TB 40AE verbunden, der wiederum mit dem Daten-Cache-Speicher 44, der
Lade/Schreibwarteschlange 60 und der Weiterleitungslogik 62 verbunden
ist. Die Schreibdateneinheit 40AC ist mit der Schreibwarteschlange 64 verbunden.
Der PC-Silo 48 ist mit der Schreibwarteschlange 64 verbunden.
Die Schreibwarteschlange 64, die Weiterleitungslogik 62 und
der Daten-Cache-Speicher 44 sind mit der Rotation/Multiplexer-Schaltung 66 verbunden,
die ihrerseits mit den Registerdateien 38A/38B verbunden
ist. Der Daten-Cache-Speicher 44 ist mit der Lade/Schreibwarteschlange 60 und
der Schreibwarteschlange 64 verbunden. Der Ausführungskern 40B ist
mit dem Daten-Cache-Speicher 44,
der Lade/Schreib-Warteschlange 60, der Weiterleitungslogik 62 und
der Schreibwarteschlange 64 in der vorliegenden Ausführungsform
verbunden.
-
Die
Schreib-AGU 40AA führt
Schreibadressen-ROP's
aus und erzeugt eine Schreibadresse entsprechend dem Schreibbefehl,
aus dem die Schreibadressen-ROP abgeleitet wurde. Die erzeugte Adresse
ist eine virtuelle Adresse (VA), die zu dem Schreib-TB 40AD zur Übersetzung
in eine physikalische Adresse (PA) übermittelt wird. Es kann ein
beliebiger geeigneter Übersetzungsmechanismus
eingesetzt werden, und der Übersetzungsmechanismus ist
im Allgemeinen entsprechend der Befehlssatzarchitektur definiert,
die in dem Prozessor 10 eingesetzt wird. Beispielsweise
wird in einer Ausführungsform
des Prozesses 10 die x86-Befehlfssatzarchitektur verwendet.
In einer derartigen Ausführungsform ist
die virtuelle Adresse eine logische Adresse, die zunächst über einen
Segmentierungsmechanismus in eine lineare Adresse übersetzt
wird. Es kann ein Festadressierungsmodus eingesetzt werden, in welchem
die logischen und linearen Adressen gleich sind. Die lineare Adresse
wird über
einen Seitenbildungsmechanismus in eine physikalische Adresse übersetzt.
Der Schreib-TB 40AD speichert jüngst verwendete Übersetzungen
für ein
rasches Ausführen
der Übersetzung.
Wenn eine Übersetzung
für eine
vorgegebene Adresse nicht in dem Schreib-TB 40AD gefunden
wird, dann wird eine erneute Einladesequenz für den Translationspuffer ausgeführt, um die
in dem externen Speicher für
die entsprechende Übersetzung
gespeicherte Übersetzungsinformation zu
finden.
-
Die
Schreibwarteschlange 64 speichert Adressen und Daten entsprechend
den Schreiboperationen, die in dem Prozessor 10 anhängig sind
(d. h. die ausgegebenen und noch nicht abgeschlossen sind). Insbesondere
hält in
der vorliegenden Ausführungsform
die Schreibwarteschlange 64 Schreiboperationen, die ausgeführt wurden
aber noch nicht abgeschlossen sind. Folglich ist die Schreibwarteschlange 64 ausgebildet,
eine physikalische Schreibadresse und eine entsprechende R# aus
dem Schreib-TB 40AD zu erhalten. Beim Empfang einer Adresse
reserviert die Schreibwarteschlange 64 einen Schreibwarteschlangeneintrag
für die
Schreiboperation und legt die Schreibadresse darin ab. Die Schreibwarteschlange 64 kann
in ähnlicher
Weise physikalische Schreibadressen von einer Schreib-AGU-Schreib-TB-Struktur
innerhalb des Ausführungskern 40B ebenso
erhalten.
-
Danach
wird die Schreibdaten-ROP, die der Schreiboperation entspricht,
von der Schreibdateneinheit 40AC ausgeführt. Die Schreibdateneinheit 40AC sendet
die Schreibdaten zusammen mit der der Schreibdaten-ROP zugeordneten
R# zu der Schreibwarteschlange 64. Die Schreibwarteschlange 64 speichert
die Schreibdaten in dem Schreibwarteschlangeneintrag, der dem entsprechenden
Schreibbefehl zugeordnet ist. Die Schreibwarteschlange 64 kann
in ähnlicher
Weise Schreibdaten von einer Schreibdateneinheit innerhalb der Ausführungseinheit 40B ebenso
erhalten.
-
Ähnlich zu
der Funktionsweise der Schreib-AGU 40AA und des Schreib-TB 40AD erzeugen
die Lade-AGU 40AB und der Lade-TB 40AE eine physikalische
Lade- bzw. Leseadresse, die einer Lade-ROP entspricht, und überträgt die physikalische
Ladeadresse an die Weiterleitungslogik 62. Die Weiterleitungslogik 62 bestimmt,
ob von der Ladeoperation angesprochene Bytes in der Schreibwarteschlange 64 gespeichert
sind oder nicht. Unter unabhängiger
Behandlung jedes angesprochenen Bytes durchsucht die Weiterleitungslogik 62 die
Schreibwarteschlange 64 in Bezug auf die jüngste Schreiboperation
in dieses Byte. Wenn eine Aktualisierung erkannt wird, wird das
Byte aus der Schreibwarteschlange 64 ausgewählt und
der Rotations/Multiplexerschaltung 66 zugeführt. Auf
diese Weise wird jedes Byte der jüngsten Aktualisierung des Bytes
innerhalb der Schreibwarteschlange 64 bereitgestellt (wenn
eine Aktualisierung für
dieses Bytes erkannt wird). Jedes Byte kann von einer separaten
Schreiboperation bereitgestellt werden, oder zwei oder mehr Bytes
können
von der gleichen Schreiboperation bereitgestellt werden, während andere
Bytes von unterschiedlichen Schreiboperationen geliefert werden,
oder die gleiche Schreiboperation kann alle angesprochenen Bytes
bereitstellen, je nach Situation. Folglich werden die angesprochenen
Bytes, die aus der Schreibwarteschlange 64 ausgewählt werden,
in effizienter Wiese zusammengefügt,
um die Lade- bzw. Lesedaten an der Rotations/Multiplexerschaltung 66 bereitzustellen.
-
Die
Weiterleitungslogik 62 liefert ferner Auswahl- und Rotationssteuersignale
an die Rotations/Multiplexerschaltung 66. Wenn die Weiterleitungslogik 62 erkennt,
dass eine Lade-ROP
weitergeleitete Daten aus einem Schreibbefehl in der Schreibwarteschlange 64 erhält, dann
signalisiert die Weiterleitungslogik 62 der Rotations/Multiplexerschaltung 66,
die von der Schreibwarteschlange 64 bereitgestellten Daten
auszuwählen.
Ferner liegen von der Schreibwarteschlange 64 bereitgestellten Daten
in der Speicherreihenfolge vor (d. h. die Bytes werden in der Schreibwarteschlange 64 an
Byte-Positionen gespeichert, die entsprechend der Adresse der entsprechenden
Schreiboperationen ausgerichtet sind). Die Daten können rotiert
werden, so dass sie in geeigneter Weise für die Speicherung in den Registerdateien 38A–38B angeordnet
sind. Die Weiterleitungslogik 62 stellt auch diese Signalisierung bereit.
Wenn schließlich
die Weiterleitungslogik 62 erkennt, dass eine Lade-ROP
keine weitergeleiteten Daten aus der Schreibwarteschlange 64 empfängt, dann
signalisiert die Weiterteitungslogik 62 der Rotations/Multiplexerschaltung 66,
den Ausgang des Daten-Cache-Speichers 44 auszuwählen.
-
Zu
beachten ist, dass eine Lade-ROP vor der Schreibdaten-ROP ausgeführt werden
kann, die die Schreibdaten bereitstellt, auf die von der Lade-ROP zugegriffen
wird. In einem derartigen Falle kann die Schreibwarteschlange 64 die
R# der Schreibdaten-ROP anstelle der angesprochenen Bytes bereitstellen.
Die Lade-ROP kann erneut für
die Ausführung
disponiert werden, nachdem die Schreibdaten-ROP disponiert wurde.
Die Lade/Schreibeinheit 42 kann den Befehlswarteschlangen 36A–36B signalisieren,
wenn Schreibdaten für
das Weiterleiten zu der Ladeoperation noch nicht verfügbar sind,
um damit das erneute Disponieren der Ladeoperation zu ermöglichen
(sowie von nachfolgend disponierten ROP's). Des weiteren kann die Zuordnungseinheit 30 ausgebildet
sein, Fälle
von Leseoperationen, die Schreiboperationen betreffen, in denen
die Schreibdaten noch nicht verfügbar
waren, vorherzusagen. Die R# der Schreibdaten-ROP kann dem PC-Silo 48 zugeführt werden,
der Information hinsichtlich des Schreibbefehls der Zuordnungseinheit 30 zur
Verwendung in der Vorhersage nachfolgender Leseoperationen, die
Schreiboperationen treffen (wobei die Schreibdaten nicht verfügbar sind)
zuführt.
-
Zusätzlich zu
dem Bereitstellen von Lade- und Schreibadressen für die Schreibwarteschlange 64 gemäß dem obigen
Ablauf werden Lade- und Schreibadressen dem Daten-Cache-Speicher 44 zugeführt, um
zu bestimmen, ob ein Treffer in dem Daten-Cache- Speicher 44 erkannt wird. Bei
Lade-ROP's werden
bei einem Treffer in dem Daten-Cache-Speicher 44 Daten aus dem Daten-Cache-Speicher 44 an
die Registerdateien 38A, 38B weitergeleitet. Wenn
eine Lade-ROP den Daten-Cache-Speicher 44 nicht betrifft,
dann wird die Lade-ROP in die Lade-Schreibwarteschlange 60 für ein nachfolgendes
erneutes Versuchen des Ausführens gespeichert
(und schließlich
für die Übertragung
zu der externen Schnittstelleneinheit 46, um die fehlende
Cache-Zeile aus dem Speicher abzuholen, wenn die Lade-ROP den Anfang
der Lade/Schreibwarteschlange 60 erreicht und nicht mehr
spekulativ ist, ohne ein Treffer in dem D-Cache-Speicher 44 durch die
Cache-Speicherauffüllung aus
einer früheren Speicheroperation
zu werden). Beim erneuten Ausleseversuch des Daten-Cache-Speicher 44 wird
die Lade-ROP auch zu der Weiterleitungslogik 62 übermittelt,
um zu bestimmen, ob Schreibdaten in der Schreibwarteschlange 64 für die Lade-ROP
weiterzuleiten sind. Angaben über
Treffer/Nichttreffer für jede
Lade-ROP, die an dem Daten-Cache-Speicher 44 versucht wurde
(von dem Ausführungskant 40A oder 40B),
werden zu der Lade/Schreib-Warteschlange 60 übermittelt,
um zu bestimmen, ob die Lade-ROP darin gespeichert ist. Für Schreibadressen-ROP's bestimmt die Angabe über den
Treffer/Nichttreffer, ob die Schreiboperation einem Eintrag in der
Lade/Schreibwarteschlange 60 zugeordnet ist oder nicht
(ähnlich
zu dem Lade-ROP's).
Jedoch werden Schreibadressen-ROP's in der Schreibwarteschlange 64 unabhängig von
ihrem Status hinsichtlich des Treffens/Nichttreffens zugeordnet.
Zu beachten ist, dass, obwohl eine beliebige Anzahl an Einträgen verwendet
werden, die Lade/Schreibwarteschlange 60 128 Einträge und die
Schreibwarteschlange 64 64 Einträge in einer beispielhaften
Ausführungsform
aufweisen können.
-
Der
PC-Silo 48 liefert Abschlusssteuersignale an die Schreibwarteschlange 64.
Wie zuvor erläutert
ist, schließt
in der vorliegenden Ausführungsform der
PC-Silo 48 eine Reihe aus ROP's gleichzeitig ab. Der PC-Silo 48 kann
die R# der ROP's,
die gerade abgeschlossen werden, an die Schreibwarteschlange 64 liefern,
so dass die Schreibwarteschlange 64 Daten auswählt, die
in dem Daten-Cache-Speicher 44 abgelegt werden. Wenn eine
spezielle Schreiboperation nicht unmittelbar gespeichert werden
kann (beispielsweise wenn die Schreiboperation nicht den Daten-Cache-Speicher 44 betrifft
oder wenn mehr als eine Schreiboperation gleichzeitig abgeschlossen wird),
kann die Schreibwarteschlange 64 den Abschluss des speziellen
Schreibbefehls aufzeichnen und die Schreibdaten nachfolgend abspeichern.
-
Es
ist zu beachten, dass, obwohl die in 2 (und in
anderen nachfolgenden Figuren) gezeigte Ausführungsform physikalische Adressen
zum Ausführen
der Weiterleitung vom Schreibbefehl zum Ladebefehl nutzt, andere
Ausführungsformen
ebenso möglich
sind, in denen virtuelle Adressen, logische Adressen oder lineare
Adressen verwendet werden. Des weiteren ist zu beachten, dass, obwohl
in der obigen Ausführungsform
der Ausführungskern 40B so
beschrieben ist, dass er die gleichen Lade/Schreibausführungsressourcen
wie der Ausführungskern 40A aufweist
(d. h., dass der Ausführungskern 40A und 40B symmetrisch
sind im Hinblick auf die Ausführungsressourcen),
können
jedoch in anderen Ausführungsformen
asymmetrische Ausführungsressourcen
nach Bedarf verwendet werden.
-
3 ist
eine Blockansicht, die eine Ausführungsform
der Schreibwarteschlange 64 und der Weiterleitungslogik 62 zeigt.
Wie in 3 gezeigt ist, enthält die Schreibwarteschlange 64 eine
Schreibadressenwarteschlange 64A, eine Schreibbit-Vektorwarteschlange 64B und
eine Schreibdatenwarteschlange 64C. Ferner sind zwei Bitvektorgeneratoren 70A und 70B in 3 gezeigt. 3 zeigt
das Weiterleiten von Daten für
eine Lese- bzw. Ladeadresse, um die zeichnerische Darstellung zu
vereinfachen. Wie in 2 gezeigt ist, kann die Schreibwarteschlange 64 ausgebildet
sein, um Ladedaten für
bis zu drei Lade-ROP's
bereitzustellen (jeweils Daten von dem Ausführungskern 40A und 40B und
für Ladeoperationen,
die aus der Lade/Schreib-Warteschlange erneut untersucht werden).
Ein ähnlicher Aufbau
kann auch für
die anderen Lade-ROP's
verwendet werden. Für
die vorliegende Erläuterung
wird die Lese- bzw. Ladeinformation so beschrieben, dass diese von
dem Lade-TB 40AE und
die Schreibadressinformation von dem Schreib-TB 40AD erhalten wird.
Die Schreibdateninformationen werden so beschrieben, dass diese
von der Schreibdateneinheit 40AC erhalten werden. Es können jedoch
auch andere Quellen für
jede Art von Information vorgesehen werden, einschließlich jener
Quellen, die in 2 gezeigt sind. Ferner können die
Adressen direkt aus den AGU's
in Ausführungsformen
erhalten werden, in denen virtuelle Adressen für die Weiterleitung verwendet
werden.
-
Der
Bit-Vektorgenerator 70A ist angeschlossen, um eine vorbestimmte
Anzahl von am wenigsten signifikanten Bits der Ladeadresse und eine
Angabe über
die Größe des Ladebefehls
(d. h. die Anzahl der Bytes, auf die zugegriffen wird, beginnend
von der Ladeadresse) von dem Lade-TB 40AE zu erhalten, und
ist ferner mit der Weiterleitungslogik 62 verbunden. In ähnlicher
Weise ist der Bit-Vektorgenerator 70B angeschlossen, um
die vorbestimmte Anzahl der wenigsten signifikanten Bits der Schreibadresse und
die Größe des Schreibbefehls
aus dem Schreib-TB 40AD zu erhalten, und ist ferner mit
der Schreib-Bit-Vektorwarteschlange 40B verbunden.
Zu beachten ist, dass in Ausführungsformen,
in denen Ladeoperationen lediglich eine einzelne Operation sind,
die Information über
die Größe weggelassen werden
kann. Die Schreib-Bit-Vektorwarteschlange 64B und die Schreibadressenwarteschlange 64A sind
mit der Weiterleitungslogik 62 verbunden, die wiederum
mit einem Satz aus Multiplexern (MUX) 72A bis 72H und
mit der Rotations/Multiplexer-Schaltung 66 verbunden
ist. Die Multiplexer 72A bis 72H sind mit der
Rotations/Multiplexer-Schaltung 66 und der
Schreibdatenwarteschlange 64C verbunden. Die Schreibwarten-schlange 64C ist
angeschlossen, um Schreibdaten und eine entsprechende R# aus der Schreibdateneinheit 70AC zu
erhalten, und ist ferner mit dem PC-Silo 48 verbunden,
um eine abgeschlossene R# zu empfangen. Des weiteren ist die Schreibdatenwartenschlange 64C angeschlossen,
um eine R# entsprechend einer Schreibadressen-ROP aus dem Schreib-TB 40AD zu
empfangen. Die Schreibadressenwarteschlange 64A ist angeschlossen,
um eine Schreibadresse von dem Schreib-TB 40AD und eine
Ladeadresse von dem Lade-TB 40AE zu erhalten. Insbesondere
ist die Schreibadressenwarteschlange 64A angeschlossen,
die Adressen ohne die wenigsten signifikanten Bits, die von dem
Bit-Vektor 70A erhalten werden, zu empfangen.
-
Die
vorbestimmte Anzahl der wenigsten signifikanten Bits, die von den
Bit-Vektorgeneratoren 70A und 70B erhalten
werden, definieren einen Bereich an Bytes, innerhalb welchem die
Bytes liegen, auf die zugegriffen wird oder die aktualisiert werden. Anders
ausgedrückt,
die Adresse ohne die wenigsten signifikanten Bits ist die gleiche
für einen
Satz an Bytes innerhalb des Bytebereichs. Die Bit-Vektorgeneratoren 70A bis 70B erzeugen
Bit-Vektoren mit einem Bit für
jedes Byte innerhalb dieses Bereichs. Das Bit wird gesetzt, wenn
das Byte in Reaktion auf die entsprechende Ladeoperation oder Schreiboperation
angesprochen/aktualisiert wird, und wird zurückgesetzt, wenn das Byte in
Reaktion auf die entsprechende Ladeoperation oder Schreiboperation nicht
angesprochen/aktualisiert wird. Die Schreibbit-Vektoren, die von
dem Bit-Vektorgenerator 70B erzeugt werden, werden in der
Schreib-Bit-Vektorwarteschlange 64B gespeichert. Folglich
werden Schreib-Bit-Vektoren,
für jede
in der Schreibwarteschlange 64 repräsentierte Schreibadresse erzeugt. Lade-Bit-Vektoren,
die von dem Bit-Vektor-Generator 70A erzeugt wurden, werden
der Weiterleitungslogik 62 zur Verfügung gestellt. Die verbleibenden
Bits der Ladeadresse (ausschließlich
der Bits, die zur Bildung des Lade-Bit-Vektors verwendet werden)
werden der Schreibadressenwarteschlange 64A zur Verfügung gestellt.
Die Ladeadresse wird mit der Schreibadresse, die in der Schreibadressenwarteschlange 64A gespeichert
ist, verglichen. Die Schreibadressenwarteschlange 64A kann
beispielsweise einen inhaltsadressierbaren Speicher (CAM) für Ladeadressen
gegenüber
den darin gespeicherten Schreibadressen sein. Es sind jedoch auch
andere alternative Konfigurationen möglich. Jeder Eintrag innerhalb
der Schreibadressenwarteschlange 64A, der eine Schreibadresse
enthält,
die mit der gelieferten Leseadresse übereinstimmt, setzt ein „Treffer"-Signal für die Weiterleitungslogik 62.
-
Zusätzlich zu
dem Ladebit-Vektor und den Treffersignalen aus der Schreibadressenwarteschlange 64A erhält die Weiterleitungslogik 62 die Schreib-Bit-Vektoren,
die den Schreiboperationen innerhalb der Schreibwarteschlange 64 entsprechen. Die
Weiterleitungslogik 62 behandelt jedes Byte unabhängig, untersucht
das entsprechende Bit in dem Lade-Bit-Vektor, um zu bestimmen, ob auf das
Byte zugegriffen wird und untersucht das entsprechende Bit in jedem
Schreib-Bit-Vektor, um zu bestimmen, ob das Byte von dem entsprechenden
Schreibbefehl aktualisiert wird. Jeder Schreibwarteschlangeneintrag, der
angibt, dass ein Byte aktualisiert wird (über das entsprechende Bit in
dem Schreibbit-Vektor und ein entsprechendes gesetztes Treffersignal
aus der Schreibadressenwarteschlange 64A) ist Teil einer „Wähle 1"-Schaltung in der
Weiterleitungslogik 62, die die jüngste Aktualisierung an dem
Bit gemäß der Programmreihenfolge
der Schreiboperationen in der Schreibwarteschlange auswählt. Das
ausgewählte Byte
wird aus der Schreibdatenwarteschlange 64C über Auswahlsignale
ausgewählt,
die von der Weiterleitungslogik 62 für die Multiiplexer 72 gesetzt
werden. Jeder Multiplexer 72A bis 72H entspricht
einem anderen Byte innerhalb der Schreibwarteschlange 64.
Beispielsweise wählt
der Multiplexer 72A das Byte Null der Ladedaten von den
Byte-Null-Positionen jedes Eintrags für erhalb der Schreibwarteschlange 64 unter
der Steuerung der Weiterleitungslogik 62 aus. In ähnlicher
Weise wählt
der Multiplexer 72H das Byte 7 der Ladedaten aus den Byte-7-Positionen
jedes Eintrags innerhalb der Schreibwarteschlange 64 unter
Steuerung der Weiterleitungslogik 62 aus. Andere Bytepositionen
werden von anderen Multiplexern ausgewählt (die der Einfachheit halber in 3 nicht
gezeigt sind). Des weiteren bestimmt die Weiterleitungslogik 62,
ob Ladedatenbytes von der Schreibwarteschlange 64 bereitgestellt
werden, und stellt Auswahlsteuersignale für die Rotations/Multiplexer-Schaltung 66 bereit,
und die von den Multiplexern 72 gelieferten Datenbytes
als Eingänge für die Rotations/Multiplexer-Schaltung 66 auszuwählen.
-
Rotationssteuersignale
werden ebenso von der Weiterleitungslogik 62 bereitgestellt.
Datenbytes werden in der Schreibwarteschlange 64C in der
Speicherreihenfolge abgelegt (d. h. an Byte-Positionen in dem Warteschlangeneintrag,
die den Speicherpositionen innerhalb eines Speicherblocks entsprechen, der
zu einer Grenze ausgerichtet ist, die die Größe eines Warteschlangeneintrags
ist, etwa eine 8-Byte-Grenze für
die 8-Byte-Datenwartenschlangeneinträge in der
vorliegenden beispielhaften Ausführungsform).
Obwohl die Ladeoperationen und die Schreiboperationen in den Speicher
eine beliebige Ausrichtung in Bezug auf die Speicherplätze besitzen können, sind
die Bytepositionen in dem Register festgelegt. Folglich kann die
Rotation der Datenbytes, die von dem Multiplexern 72 geliefert
wird, durchgeführt werden,
um die Bytes entsprechend der Registerdatei auszurichten.
-
Im
Allgemeinen wird ein Eintrag in der Schreibwarteschlange 64 beim
Ausführen
einer Schreibadressen-ROP entsprechend einem Schreibbefehl reserviert.
Der Eintrag umfasst einen Eintrag in der Schreibadressenwarteschlange 64A,
einen Eintrag in der Schreibbit-Vektorwarteschlange 64B und
einen Eintrag in der Schreibdatenwarteschlange 64C. Beispielsweise
können
die Einträge 76A, 76B und 76C,
die in 3 gezeigt sind, einen Schreibwarteschlangeneintrag
in der Schreibwarteschlange 64 bilden. Die Schreibadresse
(ohne die wenigsten signifikanten Bits, die zum Erzeugen des Bit-Vektors verwendet
werden) wird in der Schreibadressenwarteschlange 64A und
der entsprechende Schreibbit-Vektor
wird in der Schreibbit-Vektorwarteschlange 64B bei Erhalt
der Schreibadresse aus dem Schreib-TB 40AD gespeichert.
Ferner wird die R# entsprechend der entsprechenden Schreibdaten-ROP
in der Schreibdatenwarteschlange 64C beim Erhalt der Schreibadresse
aus dem Schreib-TB 40AD gespeichert. In der vorliegenden
Ausführungsform
liegt die Schreibdaten-ROP vor der Schreibadressen-ROP in der gleichen
Reihe aus ROP's.
Folglich ist die entsprechende R# die R# der Schreibädressen-ROP,
die um 1 vermindert ist.
-
Nachfolgend
wird die entsprechende Schreibdaten-ROP von der Schreibdateneinheit 40AC ausgeführt, und
die R# und die Schreibdaten werden der Schreibdatenwarteschlange 64C bereitgestellt.
Die R#, die von der Schreibdateneinheit 40AC geliefert
wird, wird mit dem R#, die in der Schreibdatenwarteschlange 64C gespeichert
sind, verglichen, um den Eintrag zu bestimmen, in welchem die Schreibdaten
gespeichert werden sollten. Die Schreibdatenwarteschlange 64C kann
beispielsweise als ein CAM für
die R# der Schreibdatenoperation in einer Ausführungsform eingerichtet sein.
Es sind auch alternative Konfigurationen möglich. Der Eintrag, für den eine Übereinstimmung
der R# erkannt wird, zeichnet die Daten auf. Die Schreibdatenwarteschlange 64C kann
zusätzlich
ein Gültigkeitsbit enthalten,
das angibt, dass die Daten gültig
sind. Eine CAM-Übereinstimmung
kann verwendet werden, um das Gültigkeitsbit
zu setzen. Wenn die Daten nicht gültig sind, kann die Schreibdatenwarteschlange 64C die
R# der Schreibdatenoperation als ein Eingang für die Multiplexer 72A–72H anstelle
der Daten bereitstellen. Alternativ kann die R# in jeder Bytestelle
innerhalb der Schreibdatenwarteschlange 64C gespeichert
werden, um automatisch die R# bereitzustellen, wenn die Daten noch
nicht gültig
sind.
-
In
der vorliegenden beispielhaften Ausführungsform enthalten die Bit-Vektoren
16 Bits, während
die Schreibdatenwartenschlange bis zu 8 Bytes an Schreibdaten pro
Eintrag speichert. Die vorliegende anschauliche Ausführungsform
unterstützt
damit bis zu 8 Bytes an Schreibdaten pro Schreiboperation. Jedoch
werden 16 Bits des Bit-Vektors unterstützt, um eine eindeutige Verarbeitung
von nicht ausgerichteten 8 Byte-Werten zu ermöglichen. Anders ausgedrückt, bei
einem Bit-Vektor mit 16 Bits ist eine beliebige nicht ausgerichtete
8 Byte-Größe als eine
Maske aus Nullen und Einsen darstellbar. Wenn der Bit-Vektor beispielsweise
8 Bits aufweist, dann ist der gesamte Bit-Vektor lauter Einsen für eine 8 Byte-Schreiboperation,
unabhängig
von der Ausrichtung der Schreiboperation (und damit unabhängig davon,
ob die Bytes, auf die von der Ladeoperation zugegriffen wird, von
der Schreiboperation aktualisiert werden oder nicht). Im Allgemeinen
kann es wünschenswert
sein, Bit-Vektoren aus 2n Bits zu verwenden, wobei n die größte Anzahl
an Bytes ist, die von einem einzelnen Schreibbefehl aktualisierbar sind.
-
Es
ist zu beachten, dass gewisse Bits innerhalb des Bit-Vektors gegenseitig
ausschließlich
sind, da Bit-Vektoren mit 16 Bits in der vorliegenden beispielhaften
Ausführungsform
eingerichtet sind und 8 Byte-Lade- und Schreiboperationen die größten Lade-
und Schreiboperationen sind, die in der vorliegenden beispielhaften
Ausführungsform
unterstützt werden.
Beispielsweise sind das Bit, das dem Byte Null innerhalb des Bereiches
entspricht, der durch den Bit-Vektor angegeben ist, und das Bit
entsprechend dem Byte 8 innerhalb des Bereiches gegenseitig ausschließend. Wenn
das Byte Null als angesprochen/aktualisiert angegeben ist, dann
kann das Byte 8 nicht als angesprochen/aktualisiert angegeben sein.
In ähnlicher
Weise sind Byte 1 und Byte 9 gegenseitig ausschließend, etc.
Ferner wird ein Byte, das entweder dem Byte 0 oder dem Byte 8 innerhalb des
Bit-Vektors entspricht, in der Byte-Null-Position innerhalb der
Schreibdatenwarteschlange 64C gespeichert. Ferner kann eine
Auswahllogik die Ergebnisse der Untersuchung der Bit-Vektor-Positionen
0 und 8 logisch Oder-verknüpft,
um Auswahlsteuersignale für
das Byte 0 der Schreibdatenwarteschlange 64C zu erzeugen.
Jedoch werden vor der Oder-Verknüpfung
der Ergebnisse die Bits unabhängig
untersucht, um zu bestimmen, ob das entsprechende Byte sowohl von
der Ladeoperation angesprochen als auch von der entsprechenden Schreiboperation
aktualisiert wird.
-
Der
PC-Silo 48 liefert eine Abschluss-R#, die eine Reihe aus
ROP's kennzeichnet,
die abgeschlossen werden. Die Schreibdatenwarteschlange 64C vergleicht
die Abschluss-R# mit den R#, die in der Schreibdatenwarteschlange 64C gespeichert
sind. Die Schreibdatenwarteschlange 64C kann als ein CAM
in Bezug auf die Abschluss-R# gemäß einer beispielhaften Ausführungsform
betrieben werden. Alternative Konfigurationen sind möglich. Der
CAM kann bezüglich
der Abschluss-R# lediglich mit dem Teil der R#, der die Reihe kennzeichnet,
mit der R# vergleichen, die von dem PC-Silo 48 geliefert
wird. Beliebige erkannte Übereinstimmungen
zeigen an, dass die Schreiboperation in diesem Warteschlangeneintrag
abgeschlossen ist und dem D-Cache-Speicher 44 übergeben
werden kann. Die Schreibwarteschlange 64 kann ein Bit in
jedem Eintrag enthalten, das beispielsweise angibt, ob die Schreiboperation
an den D-Cache-Speicher 44 zur festen Speicherung übergeben
werden kann oder nicht. Das Bit kann gemäß dem Vergleich der Abschluss-R#
gesetzt werden. Sobald eine Schreiboperation als abgeschlossen gekennzeichnet
ist, kann die Schreiboperation aus der Schreibwarteschlange 64 durch Übertragung
an den D-Cache-Speicher 44 ausgewählt werden. Nach Aktualisierung
des D-Cache-Speichers 44 kann die Schreiboperation aus
der Schreibwarteschlange 64 gelöscht werden.
-
Es
ist zu beachten, dass, obwohl gewisse Bit-Bereiche und Größen anderer
Merkmale in der Beschreibung und in 3 dargestellt
sind, diese Bereiche und Größen lediglich
beispielhaft sind und entsprechend den Entwurfserfordernissen variiert werden
können.
Ferner ist zu beachten, dass als Alternative zur Verwendung der
Bit-Vektorgeneratoren 70A–70B die Adressenerzeugungseinheiten
ausgebildet sein können,
die entsprechenden Bit-Vektoren zu
erzeugen. Es ist ferner zu beachten, dass eine Alternative für die CAM-Strukturen, die zuvor
dargestellt sind, darin besteht, die Warteschlangeneintröge in Registern
mit separaten Komparatorschaltungen einzurichten, die damit verbunden
sind, um den Vergleich auszuführen.
Es sind auch andere Alternativen möglich.
-
4 zeigt
eine beispielhafte Ausführungsform
einer Schreibdatenwarteschlange 64C, die keine separaten
Multiplexerschaltungen 72A bis 72H, wie sie in 3 gezeigt
sind, benötigt.
Andere alternative Konfigurationen einschließlich der Konfiguration in 3 sind
ebenfalls möglich.
Wie in 4 gezeigt ist, ist die Schreibwarteschlange 64C mit
einem Satz aus Lade- bzw. Lesebytebussen verbunden, die in 3 als
Ausgänge
jedes Multiplexer 72A bis 72H gezeigt wurden.
Das Byte 0 jedes Schreibwarteschlangeneintrags ist mit dem Byte
0 des Ladebusses verbunden. In ähnlicher
Weise ist das Byte 1 jedes Schreibwarteschlangeneintrags mit dem
Byte 1 des Lade-Busses verbunden, etc. Die Auswahlsignale, die zuvor
den Multiplexern 72A bis 72H zugeführt wurden,
werden stattdessen als Freigabe- bzw. Aktivierungssignale jedem
der Warteschlangeneinträge zugeführt. Es
ist ein Freigabesignal für
jedes Byte innerhalb des Warteschlangeneintrags vorgesehen. Wenn
das Freigabesignal für
dieses Byte gesetzt ist, steuert der Warteschlangeneintrag dieses
Byte auf dem angeschlossen Bus an. Wenn das Freigabesignal nicht
gesetzt ist, steuert der Warteschlangeneintrag das Byte auf dem
angeschlossenen Bus nicht an. Diese Konfiguration wird typischerweise
als eine „verdrahtete
Oder"-Konfiguration
bezeichnet.
-
5 ist
eine Blockansicht eines Teils einer Ausführungsform der Weiterleitungslogik 62.
In der Ausführungsform
aus 5 umfasst die Weiterleitungslogik 62 mehrere
Wähle 1"-Schaltungen (eine für jedes Byte, das zu einer
Ladeoperation weitergeleitet werden, beispielsweise 8 „Wähle 1"-Schaltungen in einer
speziellen Ausführungsform).
Beispielsweise sind die „Wähle 1"-Schaltungen 80A und 80B in 5 gezeigt.
Des weiteren ist eine kombinatorische Logik in der Weiterleitungslogik 62 vorgesehen, um
die Bit-Vektoren aus dem Bit-Vektorgenerator 60A und der
Schreibbit-Vektorwarteschlange 64B sowie die Treffersignale
für die
Schreibadressenwarteschlange 64A zu verarbeiten. Beispielsweise
ist eine kombinatorische Logik 82A vorgesehen, um die Bytes
0 und 8 für
den Schreibwarteschlangeneintrag 0 zu verarbeiten. In ähnlicher
Weise ist die kombinatorische Logik 82B vorgesehen, um
die Bytes 0 und 8 für
den Schreibwarteschlangeneintrag 1 zu verarbeiten, während die
kombinatorischen Logik 82C und 82D die Bytes 1
und 9 für
die Schreibwarteschlangeneinträge
1 und 0 verarbeiten. Andere kombinatorische Logikeinheiten (nicht
gezeigt) verarbeiten andere Bytes und/oder andere Schreibwarteschlangeneinträge.
-
Die „Wähle 1"-Schaltung 80A wählt das
Byte 0 aus der Schreibdatenwarteschlange 64C aus. Die „Wähle 1"-Schaltung 80B nimmt
das Byte aus der Schreibdatenwarteschlange 64C. Andere „Wähle 1"-Schaltungen (in 5 nicht
gezeigt) werden verwendet, um die Bytes 2 bis 7 auszuwählen. Die „Wähle 1"-Schaltungen 80A und 80B sind
jeweils angeschlossen, um Eingangssignale von einer kombinatorischen
Logik zu empfangen, die für
jeden Schreibwarteschlangeneintrag bestimmt, ob der Eintrag eine
Schreiboperation speichert, die ein spezielles Byte aktualisiert,
auf das von dem Lese- bzw. Ladeprozess zugegriffen wird. Beispielsweise
bestimmt die kombinatorische Logik 82A, ob die Schreiboperation
in dem Schreibwarteschlangeneintrag 0 das Byte 0 oder das Byte 8
(SBV0(0) und SBV0(8)) innerhalb des Bytebereichs, der durch den
Bit-Vektor definiert wird, aktualisiert, und ob das entsprechende
Byte 0 oder Byte 8 von der Ladeoperation (LBV(0) und LVB(8)) angesprochen
wird. Die entsprechenden Ergebnisse des Bestimmens werden logisch
Oder-verknüpft
(da Zugriffsbytes 0 und 8 in der beispielhaften Ausführungsform
sich gegenseitig ausschließen)
und werden mit dem Treffersignal für die Schreibadressenwarteschlange 64 für den Eintrag
0 (ST0 Hit) kombiniert. Wenn auf das Byte von der Ladeoperation
zugegriffen wird und von der Schreiboperation aktualisiert wird
(wie dies durch die entsprechenden Bit-Vektoren angegeben ist) und
die Ladeadresse und Schreibadresse (ausschließlich der Bits, die zum Erzeugen
der Bit-Vektoren verwendet werden) übereinstimmen, setzt die kombinatorische
Logik ein Signal für
die „Wähle 1"-Schaltungen und
der Schreibwarteschlangeneintrag nimmt an der Auswahl teil. Ansonsten
wird das Signal für
die „Wähle 1"-Logikschaltung zurückgesetzt
und der Schreibwarteschlangeneintrag nimmt an den Auswahlereignissen nicht
teil.
-
In ähnlicher
Weise analysiert die kombinatorische Logik 82B den Schreibwarteschlangen-Bit-Vektor aus dem
Schreibwarteschlangeneintrag 1 (SBV1 in 5), den
Ladebit-Vektor und das Schreibadressenwarteschlangentreffersignal
für den Schreibwarteschlangeneintrag
1 (ST1 Hit in 5), um ein Signal zu setzen/zurückzusetzen.
Die kombinatorische Logik 82C und 82D untersuchen
die Bits aus den Schreib- und Ladebit-Vektoren für die Bytes 1 und 9 (der Schreibwarteschlangeneintrag
0 für die kombinatorische
Logik 82C und der Schreibwarteschlangeneintrag 1 für die kombinatorische
Logik 82D). Die "Wähle 1"-Schaltungen wählen unabhängig voneinander die jüngste Aktualisierung
des Bytes aus, dem diejenige „Wähle 1"-Schaltung zugeordnet ist.
Beispielsweise wählt
die „Wähle 1"-Schaltung 80A das Byte 0 aus
der Schreibdatenwarteschlange 64C in Reaktion auf Bit-Vektor-Angaben für die Bytes 0
und 8 und die Schreibadressenwarteschlangen-Treffersignale aus. Unabhängig davon
wählt die "Wähle 1"-Schaltung 80B das Byte 1 aus
der Schreibdatenwarteschlange 64C. Folglich liefert die „Wähle 1"-Schaltung 80A Auswahlsignale
an den Multiplexer 72A (3) oder
die Freigabesignale für das
Byte 0 jedes War teschlangeneintrags (4). In ähnlicher
Weise kann die "Wähle 1"-Schaltung 80B Auswahlsignale
für einen
Multiplexer bereitstellen, der angeschlossen ist, um das Byte 1
der Ladedaten „3)
zu liefern, oder kann die Freigabesignale für das Byte 1 jedes Warteschlangeneintrags
bereitstellen (4). In einer Ausführungsform
ist die Schreibwarteschlange 64 als eine Ringpufferanordnung
mit „zuerst
hinein, zuerst heraus" (FIFO)
ausgebildet, mit einem Kopfzeiger, der den ältesten Eintrag in der Warteschlange
kennzeichnet, und einem Endbereichszeiger, der den jüngsten Eintrag
angibt. Anstatt die Einträge
zu verschieben, wenn Einträge
gelöscht werden,
können
der Kopfzeiger und der Endbereichszeiger heraufgesetzt und herabgesetzt
werden, um Schreiboperationen in der Warteschlange hinzuzufügen oder
daraus zu löschen.
Die „Wähle 1"-Schaltungen 80A–80B erhalten
die Kopfzeiger und Endbereichszeiger für eine derartige Ausführungsform
und Untersuchen die Eingangssignale von der kombinatorischen Logik,
etwa der kombinatorischen Logik 82A, 82D ausgehend
von dem Signal, das dem Eintrag entspricht, der von dem Endbereichszeiger
angegeben wird, bis zu dem Signal, das dem Eintrag entspricht, der
von dem Kopfzeiger angegeben ist. Für eine derartige Ausführungsform können Schreiboperationen
in der Schreibwarteschlange 64 in Programmreihenfolge zugewiesen werden.
Als Alternative können
R# verwendet werden um eine Reihenfolge der Schreiboperationen bei Bedarf
in der Schreibwarteschlange zu bestimmen.
-
Es
ist zu beachten, dass obwohl die kombinatorischen Logiken 82A–82D in 5 gezeigt
sind, um damit die logische Bestimmung von Schreibwarteschlangeneinträgen zur
Teilnahme bei der Auswahl von Bytes aus der Schreibwarteschlange
darzustellen, auch andere geeignete Logikkonfigurationen verwendet
werden können.
Der Inhalt der Eingangssignale (gesetzt/nicht gesetzt) kann geändert werden,
um eine alternative kombinatorische Logik bereitzustellen, und es
können
logische äquivalente Sätze an Logikgattern
eingesetzt werden, falls dies gewünscht ist. Ferner ist zu beachten,
dass ein zusätzlicher
Logikblock (in 5 nicht gezeigt) verwendet werden
kann, um die Auswahl- und Rotationssteuersignale für die Rotations/Multiplexer-Schaltung 66 zu
erzeugen. Die Auswahlsteuersignale können auf der Auswahl von Bytes
aus der Schreibwarteschlange 64 für die Weiterleitung beruhen,
und die Rotationssteuersignale können
auf den wenigsten signifikanten Ladeadressenbits (die die Zuordnung
von Bytes innerhalb des Speichers und damit innerhalb der Schreibdatenwarteschlange 64C definieren
und der Größe der Ladeoperation,
die definiert, wie viele Bytes in das Zielregister übertragen
werden) beruhen.
-
In 6 ist
ein Beispiel des Weiterleitens eines beispielhaften Satzes aus Schreibwarteschlangeneinträgen gezeigt.
In 6 ist die Schreibadressenwarteschlange 64A,
die Schreibbit-Vektorwarteschlange 64B und die Schreibdatenwarteschlange 64C gezeigt.
Der Einfachheit sind in diesem Beispiel 5 Einträge dargestellt. Jedoch kann
die Schreibwarteschlange eine beliebige geeignete Anzahl an Einträgen enthalten.
Beispielsweise kann die Schreibwarteschlange 64 in einer
beispielhaften Ausführungsform 64 Einträge aufweisen.
Die Schreibadressenwarteschlange 64A enthält Einträge 90A bis 90E. Die
Schreibbitvektorwarteschlange 64B enthält entsprechende Einträge 92A bis 92E und
die Schreibdatenwarteschlange 64C enthält entsprechende Einträge 92A bis 94E.
Anders ausgedrückt,
die Einträge 90A, 92A und 94A bilden
eine ersten Eintrag in der Schreibwarteschlange 64. In ähnlicher
Weise bilden die Einträge 90B, 92B und 94B einen
zweiten Eintrag in der Schreibwarteschlange 64, etc. In
dem Beispiel gibt der Kopfzeiger der Schreibwarteschlange an, dass
der Eintrag mit den Einträgen 90A, 92A und 94A der älteste Eintrag
in der Warteschlange ist, und der Endbereichszeiger der Schreibwarteschlange gibt
an, dass der Eintrag mit den Einträgen 90E, 92E und 94E der
jüngste
Eintrag ist. Die verbleibenden Einträge liegen zwischen dem ältesten
und dem jüngsten
Eintrag.
-
Die
Schreibadressenwartenschlangeneinträge 90A, 90B, 90D und 90E enthalten
jeweils eine spezielle Adresse A1. Der Schreibadressenwarteschlangeneintrag 90C enthält eine
andere Adresse A2. Die Bit-Vektoren, die
jeder Schreiboperation entsprechen, sind in den Schreibbit-Vektorwarteschlangeneinträgen 92A bis 92E gezeigt,
und die Schreibdaten sind in den Schreibdatenwarteschlangeneinträgen 94A bis 94E gezeigt.
-
In
dem Beispiel wird eine Ladeoperation mit der Adresse A1 ausgeführt, und
in 6 ist ein Ladebit-Vektor gezeigt. Gemäß dem Ladebit-Vektor
wird auf 4 Bytes zugegriffen (Bytes 11, 10, 9 und 8). Durch Untersuchung
der Bit-Vektoren in der Schreibbit-Vektorwarteschlange 64B können die
folgenden Aktualisierungen der Bytes, auf die zugegriffen wird,
erkannt werden: Bit-Vektoren in den Einträgen 92B und 92E geben
Aktualisierungen des Bytes 11 an; Bit-Vektoren in den Einträgen 92B und 92D geben
Aktualisierungen an dem Byte 10 an; und Bit-Vektoren in den Einträgen 92B und 92C geben
Aktualisierungen an den Bytes 9 und 8 an. Jedoch enthält die Adresse
in dem Schreibadressenwarteschlangeneintrag 90C (der dem
Bit-Vektorwartenschlangeneintrag 92C entspricht) die Adresse
A2. Da der Lese- bzw. Ladevorgang auf die Adresse A1 zugreift, wird die Schreiboperation in
den Einträgen 90C, 92C und 94C für die weitere
Berücksichtigung
bei der Weiterleitung gestrichen. Folg lich suchen die „Wähle 1"-Schaltungen die jüngste Aktualisierung:
Byte 11 aus den Einträgen entsprechend
zu 92B und 92E; Byte 10 aus den Einträgen 92B und 92D;
und Bytes 9 und 8 aus dem Eintrag 92B.
-
Wie
zuvor erläutert
ist, gibt der Endbereichzeiger den Eintrag an, der der Eintrag ist,
der 90E entspricht, während
der Kopfzeiger den ältesten
Eintrag angibt, der der Eintrag entsprechend 90A ist. Folglich
wird Byte 11 aus dem Eintrag 94E; Byte 10 aus dem Eintrag 94D und
die Bytes 9 und 8 aus dem Eintrag 94D ausgewählt. Byte
11 ist die Byteposition 3 innerhalb der Schreibdatenwarteschlange
und in ähnlicher
Weise ist Byte 10 die Byteposition 2, Byte 9 ist die Byteposition
1 und Byte 8 ist die Byteposition 0. Daher sind die weitergeleiteten
Daten für
den Ladebefehl 76DD DE F0 (Hexadezimal). Der Wert 76 wird
aus der Byteposition 3 aus dem Eintrag 94E gewonnen. Der
Wert DD wird aus der Byteposition 2 des Eintrags 94D gewonnen.
Die Werte DE und F0 werden aus den Bytepositionen 1 und 0 des Eintrags 94B gewonnen.
Diese Werte sind in dem Beispiel in der Schreibdatenwarteschlange 64C fettgedruckt.
-
Wie
das Beispiel zeigt, können
die Bytes, auf die von der Ladeoperation zugegriffen wird, zusammengefügt werden,
selbst wenn die Bytes aus zwei oder mehr unterschiedlichen Schreiboperationen hervorgehen.
Vorteilhafterweise können
Ladedaten in genauer Weise aus einer beliebigen Anzahl an Schreiboperationen
weitergeleitet werden. Beispielsweise kann das Weiterleiten aus
0 Schreiboperationen (wenn die Schreibwarteschlange 64 leer
ist oder wenn keine Treffer in der Schreibwarteschlange 64 für eine spezielle
Leseoperation erkannt werden), aus einer Schreiboperation (wenn
die Schreiboperation die jüngste
Operation ist, die jedes Bytes aktualisiert, auf das von der Leseoperation
zugegriffen wird), oder aus bis zu n Schreiboperationen (wobei n die
Anzahl an Bytes ist, auf die von der Ladeoperation zugegriffen wird)
erfolgen.
-
7 ist
eine Blockansicht einer Ausführungsform
eines Computersystem 200 mit einem Prozessor 10,
der mit einer Reihe von Systemkomponenten über einer Busbrücke 202 verbunden
ist. Andere Ausführungsformen
sind möglich
und sind hierin berücksichtigt.
In dem dargestellten System ist ein Hauptspeicher 204 mit
der Busbrücke 202 über einen Speicherbus 206 verbunden,
und eine Graphiksteuerung 208 ist mit der Busbrücke 202 über einen AGP-Bus 210 verbunden.
Schließlich
sind mehrere PCI-Geräte 212A bis 212B mit
der Busbrücke 202 über einen
PCI-Bus 214 verbunden. Eine sekundäre Busbrücke 216 kann ferner
vorgesehen sein, um eine elektrische Schnittstelle mit einem oder
mehreren EISA oder ISA-Geräten 218 über einen
EISA/ISA-Bus 220 zu bilden. Der Prozessor 10 ist
mit der Busbrücke 202 über eine
externe Schnittstelle 52 verbunden.
-
Die
Busbrücke 202 bildet
eine Schnittstelle zwischen dem Prozessor 10, dem Hauptspeicher 204,
der Graphiksteuerung 208 und den Geräten, die an den PCI-Bus 214 angeschlossen
sind. Wenn eine Operation aus einem der Geräte empfangen wird, die mit
der Busbrücke 202 verbunden
sind, erkennt die Busbrücke 202 das
Ziel der Operation (beispielsweise ein spezielles Gerät oder im
Falle des PCI-Busses 214, dass das Ziel auf dem PCI-Bus 214 liegt).
Die Busbrücke 202 leitet
die Operation an das Zielgerät weiter.
Die Busbrücke 202 übersetzt
im Wesentlichen eine Operation aus dem Protokoll, das von dem Quellengerät oder dem
Quellenbus verwendet wird, in das Protokoll, das von dem Zielgerät oder dem Zielbus
verwendet wird.
-
Zusätzlich zur
Bereitstellung einer Schnittstelle für einen ISA/EISA-Bus für den PCI-Bus 214 kann
die sekundäre
Busbrücke 216 weitere
Funktionen nach Bedarf aufweisen. Eine Eingabe/Ausgabe-Steuerung
(nicht gezeigt), die extern oder intern zur sekundären Busbrücke 216 vorgesehen
sein kann, kann ebenfalls in dem Computersystem 200 enthalten
sein, um eine Funktionsunterstützung
für eine
Tastatur und eine Maus 222 und für diverse serielle und parallele
Anschlüsse
nach Bedarf bereitzustellen. Eine externe Cache-Einheit (nicht gezeigt) kann
ferner mit der externen Schnittstelle 52 zwischen dem Prozessor 10 und
der Busbrücke 202 in anderen
Ausführungsformen
vorgesehen sein. Alternativ kann der externe Cache-Speicher mit
der Busbrücke 202 verbunden
sein, und eine Cache-Steuerlogik kann für den externen Cache-Speicher
in der Busbrücke 202 integriert
sein.
-
Der
Hauptspeicher 204 ist ein Speicher, der Anwendungsprogramme
enthält
und aus dem der Prozessor 10 heraus hauptsächlich arbeitet.
Ein geeigneter Hauptspeicher 204 umfasst einen DRAM (dynamischer
Speicher mit wahlfreiem Zugriff). Beispielsweise kann der Hauptspeicher 204 mehrere Bänke aus
SDRAM (synchrone DRAM) aufweisen. Alternativ kann der Hauptspeicher 204 einen RAM-Bus
DRAM (RDRAM) oder einen anderen beliebigen geeigneten DRAM enthalten.
-
Die
PCI-Geräte 212A–212B sind
als anschauliche Beispiele für
eine Vielzahl von peripheren Geräten
dargestellt, etwa beispielsweise Netzwerkschnittstellenkarten, Videobeschleuniger, Klangkarten,
Festplatten und Diskettenlaufwerte oder Laufwerkssteuerungen (SCSI-(Kleincomputersystemschnittstellen-Adapter
und Telefonkarten). In ähnlicher
Weise ist das ISA-Gerät 218 als
anschauliches Beispiel für
diverse Arten von peripheren Geräten dargestellt,
etwa ein Modem, eine Klangkarte, und eine Vielzahl von Datennahmekarten,
etwa GPIB- oder
Feldbusschnittstellenkarten.
-
Die
Graphiksteuerung 208 ist vorgesehen, um das Erzeugen von
Text und Bildern auf einer Anzeige 226 zu ermöglichen.
Die Graphiksteuerung 208 kann einen typischen Graphikbeschleuniger
darstellen, der im Stand der Technik bekannt ist, um dreidimensionale
Datenstrukturen zu erzeugen, die in effizienter Weise in den Hauptspeicher 204 verschoben und
daraus ausgelesen werden können.
Die Graphiksteuerung 208 kann daher ein übergeordnetes Gerät bzw. ein
Master des AGP-Busses 210 sein, indem diese Zugriff auf
eine Zielschnittstelle innerhalb der Busbrücke 202 anfordert
und erhält,
um damit Zugriff auf den Hauptspeicher 204 zu erhalten.
Ein zugeordneter Graphikbus sorgt für einen raschen Zugriff auf
Daten in dem Hauptspeicher 204. Für gewisse Operationen kann
die Graphiksteuerung 208 ferner ausgebildet sein, PCI-Protokolltransaktionen
auf dem AGP-Bus 210 zu erzeugen. Die AGP-Schnitstelle der
Busbrücke 202 kann
somit eine Funktion enthalten, um sowohl AGP-Protokolltransaktionen
sowie PCI-Protokollziell- und Initiatortransaktionen zu unterstützen. Die
Anzeige 226 ist eine beliebige elektronische Anzeige, auf
der Bild oder Text dargestellt werden kann. Zu einer geeigneten
Anzeige 226 gehört
eine Kathodenstahlröhre
(„CRT"), eine Flüssigkristallanzeige
(„LCD"), und dergleichen.
-
Es
ist zu beachten, dass obwohl die AGP-, PCI- und ISA- oder EISA-Busse
als Beispiele in der obigen Beschreibung verwendet sind, beliebige Busarchitekturen
nach Bedarf eingesetzt werden können.
Ferner ist zu beachten, dass das Computersystem 200 ein
parallel verarbeitendes Computersystem mit zusätzlichen Prozessoren sein kann
(beispielsweise der Prozessor 10A, wie er als optionale Komponente
des Computersystems 200 gezeigt ist). Der Prozessor 10A kann ähnlich zu
dem Prozessor 10 sein. Insbesondere kann der Prozessor 10A eine identische
Kopie des Prozessors 10 sein. Der Prozessor 10A kann
die externe Schnittstelle 52 gemeinsam mit dem Prozessor 10 benutzen
(wie in 7 gezeigt ist), oder kann mit
der Busbrücke 202 über einen
unabhängigen
Bus verbunden sein.
-
Zu
beachten ist, dass diverse Signale hierin als gesetzt bzw. nicht
gesetzt beschrieben sind. Ein spezielles Signal kann als gesetzt
definiert sein, wenn es einen logischen Wert 1 trägt, und
kann nicht gesetzt sein, wenn es einen logischen Wert 0 trägt. Alternativ
kann ein spezielles Signal als gesetzt definiert betrachtet werden,
wenn es einen logischen Wert 0 trägt und kann als nicht gesetzt
definiert betrachtet werden, wenn es einen logischen Wert 1 trägt. Die
Auswahl der Definition für
ein spezielles Signal liegt im Rahmen der speziellen Gestaltung
des Systems.
-
Industrielle
Anwendbarkeit
-
Die
vorliegende Erfindung ist auf dem Gebiet von Prozessoren und Computersystemen
anwendbar.