-
1. Technisches
Gebiet
-
Diese
Erfindung betrifft das Gebiet von Prozessoren und insbesondere Instruktionsplanungs-Mechanismen
bei Prozessoren.
-
2. Technischer
Hintergrund
-
Bei
superskalaren Prozessoren wird angestrebt, eine hohe Leistung zu
erzielen, indem mehrere Instruktionen pro Taktzyklus ausgegeben
und ausgeführt
werden und die höchstmögliche mit
dem Design zu vereinbarende Taktfrequenz verwendet wird. Eine Methode
zur Erhöhung
der Anzahl der in jedem Taktzyklus ausgeführten Instruktionen ist die
Außer-der-Reihe-Ausführung. Bei
der Außer-der-Reihe Ausführung können Instruktionen
in einer anderen Reihenfolge als der in der Programmsequenz (oder "Programm-Reihenfolge") angegebenen ausgeführt werden.
Gewisse Instruktionen, die in einer Programmsequenz nahe zueinander
liegen, können
Abhängigkeiten
haben, welche ihre gleichzeitige Ausführung verhindern, während nachfolgende
Instruktionen in der Programmsequenz möglicherweise keine Abhängigkeiten
von den vorhergehenden Instruktionen haben. Entsprechend kann durch
die Außer-der-Reihe
Ausführung
die Leistungsfähigkeit
von superskalaren Prozessoren durch die Erhöhung der Anzahl von gleichzeitig
(im Mittel) ausgeführten
Instruktionen erhöht
werden.
-
Leider
verursacht die Außer-der-Reihe-Ausführung zusätzliche
Komplexitäten
der Hardware für den
Prozessor. Der Ausdruck "Planung" betrifft generell
das Wählen
einer Reihenfolge zum Ausführen von
Instruktionen. Typischerweise versucht der Prozessor die Instruktionen
so schnell wie möglich
zu planen, um die mittlere Instruktionsausführungsrate zu maximieren (z.B.
durch Ausführen
von Instruktionen außer
der Reihe zwecks Handhabung der Abhängigkeiten und der Hardware-Verfügbarkeit
für verschiedene
Instruktions-Typen). Diese Komplexitäten können die Taktfrequenz begrenzen,
mit welcher der Prozessor arbeiten kann. Insbesondere müssen von
der Planungs-Hardware die Abhängigkeiten
zwischen Instruktionen respektiert werden. Generell betrifft der
Ausdruck "Abhängigkeit" gemäß der vorliegenden
Verwendung ein Verhältnis
zwischen einer ersten Instruktion und einer nachfolgenden zweiten Instruktion
in der Programm-Reihenfolge, das die Ausführung der ersten Instruktion
vor der Ausführung der
zweiten Instruktion verlangt. Es können verschiedene Abhängigkeiten
definiert werden. Beispielsweise tritt eine Operanden-Abhängigkeit
auf, falls ein Ursprungs-Operand
der zweiten Instruktion der Ziel-Operand der ersten Instruktion
ist.
-
Im
Allgemeinen können
Instruktionen einen oder mehrere Ursprungs-Operanden und einen oder mehrere
Bestimmungs-Operanden aufweisen. Die Ursprungs-Operanden sind Eingabewerte,
die entsprechend der Definition der Instruktion zur Erzeugung eines
oder mehrerer Ergebnisse (welche die Bestimmungs-Operanden sind)
manipuliert werden. Die Ursprungs- und Bestimmungs-Operanden können Speicher-Operanden
sein, die in einer Speicherstelle außerhalb des Prozessors gespeichert
sind, oder können
in einem Register, das in dem Prozessor enthalten ist, gespeicherte
Register-Operanden
sein. Die von dem Prozessor verwendete Instruktions-Satz-Architektur definiert
eine Anzahl von architekturellen Registern. Die Existenz dieser
Register wird von der Instruktions-Satz-Architektur definiert, und
Instruktionen können
zur Benutzung der architekturellen Register als Ursprungs- und Bestimmungs-Operanden
kodiert sein. Eine Instruktion gibt ein bestimmtes Register als
einen Ursprungs- oder Bestimmungs-Operanden über eine Register-Nummer (oder
eine Registeradresse) in einem Operandenfeld einer Instruktion an.
Die Register-Nummer bestimmt das ausgewählte Register eindeutig unter den
architekturellen Registern. Ein Ursprungs-Operand wird durch eine
Ursprungs-Register-Nummer und ein Bestimmungs-Operand durch eine
Bestimmung-Register-Nummer identifiziert.
-
Die
U.S.-Patentveröffentlichtung
5,710,902 von G.S. Sheaffer et al. beschreibt einen superskalaren
Prozessor, in dem eine Einheit enthalten ist, mit der ein Abhängigkeitsvektor
entsprechend einer Instruktions-Operation erzeugt wird.
-
Zusätzlich zu
den Operanden-Abhängigkeiten
können
ein oder mehrere Typen von Reihenfolgebildungs-Abhängigkeiten
durch einen Prozessor erzwungen werden. Reihenfolgebildungs-Abhängigkeiten
können
z.B. verwendet werden, um die verwendete Hardware zu vereinfachen
oder um eine korrekte Programm-Ausführung zu generieren. Indem
das Ausführen
bestimmter Instruktionen in einer Reihenfolge relativ zu anderen
Instruktionen erzwungen wird, kann die Hardware zum Handhaben der
Konsequenzen der Außer-der-Reihe-Ausführung entfallen. Falls
z.B. Speicher-Lade-Operationen außerhalb der Reihenfolge relativ
zu Speicher-Speicherungs-Operationen durchgeführt werden dürfen, kann
Hardware erforderlich sein, um eine vorherige Speicher-Speicherungs-Operation
zu detektieren, welche die gleiche Speicherstelle aktualisiert,
auf die durch eine nachfolgende Speicher-Lade-Operation zugegriffen wird (die möglicherweise
außer
der Reihe ausgeführt worden
ist). Generell können
Reihenfolgebildungs-Abhängkeiten
von der Mikroarchitektur zur Makroarchitektur variieren.
-
Das
Durchführen
der Planung wird bei hoher Frequenz zunehmend schwierig, da zugelassen
wird, dass sich größere Anzahlen
von Instruktionen "in
der Höhe" befinden (d.h. in
dem Prozessor hervorstehen). Die Abhängigkeiten zwischen Instruktionen können aufgrund
der größeren Anzahl
von Instruktionen, die noch abgeschlossen werden müssen, häufiger sein.
Ferner kann das Detektieren von Abhängigkeiten unter der großen Anzahl
von Instruktionen schwieriger sein, was auch für das Detektieren gilt, wenn
die Abhängigkeiten
erfüllt
sind (d.h. wenn der Fortlauf der ersten Instruktion bis zu dem Punkt
vorgerückt
ist, an dem die Abhängigkeit
die Planung der zweiten Instruktionen nicht zu verhindern braucht. Somit
wird ein Planungsmechanismus gewünscht, der
an eine Hochfrequenz-Operation anpassbar ist.
-
Somit
wird ein Planungsmechanismus gewünscht,
der die große
Vielfalt von Reihenfolgebildungs-Abhängigkeiten, die der Mikroarchitektur
auferlegt werden können,
handhaben kann. Die Reihenfolgebildungs-Abhängigkeiten können zusätzlich zu den
Operanden-Abhängigkeiten
darin resultieren, dass eine bestimmte Instruktion von einer relativ
großen
Anzahl früherer
Instruktionen abhängig
ist. Somit ist ein flexibler Planungsmechanismus erwünscht, der
eine große
Anzahl von Abhängigkeiten
erlaubt.
-
OFFENBARUNG
DER ERFINDUNG
-
Die
oben umrissenen Probleme werden größtenteils durch einen Prozessor
gelöst,
bei dem Reihenfolgebildungs-Abhängigkeiten
für Lade-Instruktions-Operationen bei Adress-Speicher-Instruktions-Operationen
verwendet werden. Der Prozessor teilt Speicherungs-Operationen in
Adress-Speicherungs-Instruktions-Operationen
und Daten-Speicherungs-Instruktions-Operationen. Die Adress-Speicherungs-Instruktions-Operationen
generieren die Adresse der Speicherung, und die Daten-Speicherungs-Instruktions-Operationen
leiten die entsprechenden Daten in die Lade-/Speicher-Einheit. Der Prozessor
hält einen
Speicheradress-Abhängigkeitsvektor
bei, der jede der ausstehenden Speicheradressen angibt, und zeichnet
bei den Adress-Speicherungs-Instruktions-Operationen für jede Lade-Instruktions-Operation
Reihenfolgebildungs-Abhängigkeiten
auf. Somit wird die Lade-Instruktions-Operation nicht eingeplant, bis jede
vorherige Adress-Speicherungs-Instruktions-Operation eingeplant
worden ist. Vorteilhafterweise stehen Speicheradressen für das Abhängigkeits-Prüfen gegen
die Ladeadresse beim Ausführen
der Lade-Instruktions-Operation zur Verfügung. Falls eine Speicher-Abhängigkeit
existiert, kann sie beim Ausführen
der Lade-Instruktions-Operation
detektiert werden.
-
Allgemein
ausgedrückt
ist gemäß der vorliegenden
Erfindung ein Prozessor vorgesehen, der ein Adress-Speicher-Register
und eine mit diesem verbun dene Abhängigkeitsvektor-Erzeugungseinheit aufweist.
Das Adress-Speicher-Register ist konfiguriert zum Speichern eines
Speicheradress-Abhängigkeitsvektors,
der die in dem. Prozessor ausstehenden Adress-Instruktions-Operanden
identifiziert. Die Abhängigkeitsvektor-Erzeugungseinheit
ist konfiguriert zum Erzeugen eines Abhängigkeitsvektors für eine Instruktions-Operation. Für Lade-Instruktions-Operationen
ist die Abhängigkeitsvektor-Erzeugungseinheit
dahingehend konfiguriert, dass sie den Speicheradress-Abhängigkeitsvektor
in dem Abhängigkeitsvektor
enthält.
-
Die
Erfindung betrifft ferner ein Verfahren zum Durchführen einer
Lade-Instruktions-Operation in
einem Prozessor. Ein Speicheradress-Abhängigkeitsvektor, der jede in
dem Prozessor ausstehende Speicheradress-Instruktions-Operation anzeigt, wird aufrechterhalten.
Es wird ein Abhängigkeitsvektor
für die
Lade-Instruktions-Operation erzeugt, der den Speicheradress-Abhängigkeitsvektor
enthält.
Die Planung der Lade-Instruktions-Operation wird verhindert, bis jede
in dem Abhängigkeitsvektor
angegebene Instruktions-Operation abgeschlossen ist.
-
Ferner
wird ein Prozessor offenbart, in dem die Instruktions-Warteschlange
und die Abhängigkeitsvektoren
verwendet werden, die eine flexible Abhängigkeitsaufzeichnungs-Struktur
ermöglichen.
Der Abhängigkeitsvektor
enthält
für jeden
Instruktionswarteschlangen-Eintrag einen Abhängigkeits-Hinweis, wodurch
vorteilhafterweise einen universeller Mechanismus zum Planen von
Instruktions-Operationen geschaffen wird. Für eine gegebene Instruktions-Operation
kann eine beliebige Anzahl von Abhängigkeiten aufgezeichnet werden.
Da der Abhängigkeitsvektor
zum Aufzeichnen einer beliebigen Anzahl von Abhängigkeiten konfiguriert ist,
kann eine gegebene Instruktions-Operation relativ zu jeder anderen
Instruktions-Operation in eine Reihenfolge eingebracht werden. Folglich
können
für die
gleichzeitige Ausführung
oder für
die Reihenfolge bestimmter Instruktions-Operationen bei der Ausführung beliebige
architektische Restriktionen oder mikroarchitektonischen Restriktionen
auferlegt werden. Falls es während
der Entwicklung einer Mikroprozessor-Implantierung wünschenswert
wird, zusätzliche
Aus führungs-Reihenfolgen-Instruktionen
aufzuerlegen (z.B. um die Implementierung zu vereinfachen), können die
zusätzlichen
Restriktionen aufgenommen werden, indem die Ordnungsbildungs-Abhängigkeiten
in dem Abhängigkeitsvektor
abgezeigt werden. Die Instruktions-Warteschlagen evaluieren die
Abhängigkeitsvektoren
und verlangen die Planung für
jede Instruktions-Operation,
für welche
die aufgezeichneten Abhängigkeiten
erfüllt
worden sind. Die verbesserte Flexibilität kann die Eignung der Instruktions-Warteschlangen
für verschiedene
Prozessor-Implementierungen verbessern.
-
Somit
betrifft die vorliegende Erfindung einen Prozessor mit einer Abhängigkeitsvektor-Erzeugungseinheit
und einer Instruktions-Warteschlange. Die Abhängigkeitsvektor-Erzeugungseinheit
ist konfiguriert zum Erzeugen eines Abhängigkeitsvektors entsprechend
einer Instruktions-Operation. Indem sie zum Empfang des Abhängigkeitsvektors
und der Instruktions-Operation geschaltet ist, ist die Instruktions-Warteschlange
konfiguriert zum Verhindern des Planens der Instruktions-Operation,
bis jede in dem Abhängigkeitsvektor
angezeigte Abhängigkeit
erfüllt ist.
Der Abhängigkeitsvektor
ist in der Lage, Abhängigkeiten
von einer beliebigen Anzahl von weiteren Instruktions-Operationen
in der gleichen Instruktions-Warteschlange anzuzeigen.
-
Die
vorliegende Erfindung betrifft ferner ein Verfahren zum Einplanen
von Instruktions-Operationen in einem Prozessor. Es wird für jede Instruktion ein
entsprechender Abhängigkeitsvektor
erzeugt. Der Abhängigkeitsvektor
gibt eine beliebige Anzahl von Abhängigkeiten von anderen Instruktions-Operationen in einer
Instruktions-Warteschlange an. Der Abhängigkeitsvektor und eine entsprechende
Instruktions-Operation werden in der gleichen Instruktions-Warteschlange
gespeichert. Es wird jede Abhängigkeit
der beliebigen Anzahl der vom Abhängigkeitsvektor angezeigten
Abhängigkeiten
erfüllt,
und anschließend
wird die entsprechende Instruktions-Operation geplant (auf das Erfüllen der
Abhängigkeiten hin).
-
KURZBESCHREIBUNG
DER ZEICHNUNGEN
-
Weitere
Aufgaben und Vorteile der Erfindung werden in Kenntnis der folgenden
detaillierten Beschreibung und im Zusammenhang mit den beigefügten Zeichnungen
ersichtlich, in denen folgendes gezeigt ist:
-
1 zeigt
ein Blockschaltbild einer Ausführungsform
eines Prozessors.
-
2 zeigt
ein Blockschaltbild einer Ausführungsform
einer Instruktions-Warteschlange
gemäß 1.
-
3 zeigt
ein Blockschaltbild einer Ausführungsform
eines Abhängigkeitsvektors.
-
4 zeigt
ein Blockschaltbild einer Ausführungsform
eines Paars von Abhängigkeitsvektor-Warteschlangen.
-
5 zeigt
ein Schaltbild eines Teils einer Ausführungsform einer Abhängigkeitsvektor-Warteschlange.
-
6 zeigt
ein Schatbild eines weiteren Teils einer Ausführungsform einer Abhängigkeitsvektor-Warteschlange.
-
7 zeigt
ein Blockschaltbild einer Ausführungsform
einer Abbildungseinheit gemäß 1 und einer
Ausführungsform
einer Speicher-/Lade-Vorwärts-Detektionseinheit.
-
8 zeigt
ein Flussdiagramm zur Veranschaulichung der Arbeitsweise einer Ausführungsform
einer Abhängigkeitsvektor-Erzeugungseinheit gemäß 7.
-
9 zeigt
ein Flussdiagramm zur Veranschaulichung einer Ausgestaltung eines
Schritts gemäß 8.
-
10 zeigt
ein Zeitsteuerungsdiagramm zur Veranschaulichung der Arbeitsweise
eines Paars von Instruktions-Warteschlangen gemäß 1.
-
11 zeigt
ein Blockschaltbild einer Ausführungsform
eines Computersystems mit dem Prozessor gemäß 1.
-
Obwohl
die Erfindung in Form verschiedener Modifikationen und alternativer
Ausführungsformen ausgebildet
sein kann, werden als Beispiel besondere Ausführungsbeispiele der Erfindung
in den Zeichnungen gezeigt und hier detailliert beschrieben. Es versteht
sich jedoch, dass die Zeichnungen und die dazugehörende detaillierte
Beschreibung nicht dazu vorgesehen sind, die Erfindung auf die bestimmte
offenbarte Form zu beschränken,
sondern dass die Erfindung sämtliche
Modifikationen, Äquivalente
und Alternativen umfasst, die unter den Geist und den Umfang der
vorliegenden Erfindung fallen, wie sie in den beigefügten Ansprüchen definiert
ist.
-
ART(EN) DER AUSFÜHRUNG DER
ERFINDUNG
-
Die
nun zu erläuternde 1 zeigt
ein Blockdiagramm eines Ausführungsbeispiels
eines Prozessors 10. Weitere Ausführungsbeispiele sind möglich und
vorgesehen. Bei dem Ausführungsbeispiel
gemäß 1 enthält der Prozessor 10 eine
Zeilenvorhersagevorrichtung 12, einen Instruktions-Cache (I-Cache) 14,
eine Zuweisungseinheit 16, eine Verzweigungs-Geschichte-Tabelle 18,
einen indirekten Adress-Cache 20, einen Rückkehr-Stapel 22,
eine Dekodiereinheit 24, eine Fehlvorhersage-Dekodiereinheit 26,
eine Mikrocode-Einheit 28, eine Abbildungseinheit 30,
einen Abbildungssilo 32, einen architekturellen Neubenennungs-Block 34,
ein Paar von Instruktions-Warteschlangen 36A-36B,
ein Paar von Register-Dateien 38A-38B, ein Paar
von Ausführungs-Kernen 40A-40B,
eine Lade-/Speicher-Einheit 42, einen Daten-Cache (D-Cache) 44,
eine externe Interface-Einheit 46, eine PC-Silo-und- Umleitungs-Einheit 48 und
einen Instruktions-TLB (ITB) 50. Die Zeilenvorhersagevorrichtung 12 ist
angeschlossen an den ITB 50, die Fehlvorhersage-Dekodiereinheit 26,
die Verzweigungs-Geschichte-Tabelle 18, den indirekten
Adress-Cache 20, den Rückkehr-Stapel 22,
den PC-Silo-und-Umleitungs-Block 48,
die Zuweisungseinheit 16 und den I-Cache 14. Der
I-Cache 14 ist
mit der Zuweisungseinheit 16 verbunden. Die Zuweisungseinheit 16 ist
ferner mit der Fehlvorhersage-Dekodiereinheit 26 und der
Dekodiereinheit 24 verbunden. Die Dekodiereinheit 24 ist
ferner mit der Mikrocode-Einheit 28 und der Abbildungseinheit 30 verbunden.
Die Abbildungseinheit 30 ist angeschlossen an den Abbildungssilo 32,
den architekturellen Neubenennungs-Block 34, die Instruktions-Warteschlangen 36A-36B,
die Lade-/Speicher-Einheit 42, die Ausführungs-Kerne 40A-40B und
den PC-Silo-und-Umleitungs-Block 48.
Die Instruktions-Warteschlangen 36A-36B sind aneinander
angeschlossen und an die entsprechenden Ausführungs-Kerne 40A-40B und
Register-Dateien 38A-38B. Die Register-Dateien 38A-38B sind
aneinander angeschlossen und an die entsprechenden Ausführungs-Kerne 40A-40E.
Die Ausführungs-Kerne 40A-40B sind
ferner verbunden mit der Lade-/Speicher-Einheit 42, dem
Daten-Cache 44 und der PC-Silo-und-Umleitungs-Einheit 48.
Die Lade-/Speicher-Einheit 42 ist mit der PC-Silo-und-Umleitungs-Einheit 48,
dem D-Cache 44 und der externen Interface-Einheit 46 verbunden.
Der D-Cache 44 ist mit der Register-Datei 38 verbunden
und die externe Interface-Einheit 46 ist mit einem externen
Interface 52 verbunden. Elemente, welche hier mit einem von
einem Buchstaben gefolgten Bezugszeichen bezeichnet sind, werden
kollektiv nur mit dem Bezugszeichen allein bezeichnet. Zum Beispiel
werden die Instruktions-Warteschlangen 36A-36B gemeinsam als
Instruktions-Warteschlangen 36 bezeichnet.
-
In
dem Ausführungsbeispiel
von 1 verwendet der Prozessor 10 eine komplexe
Instruktions-Satz-Berechnungs (CISC) Instruktions-Satz-Architektur
mit variabler Bitlänge.
Zum Beispiel kann der Prozessor 10 die x86 Instruktions-Satz-Architektur
(auch als IA-32 bezeichnet) verwenden. Andere Ausführungsbeispiele
können
andere Instruktions-Satz-Architekturen verwenden, einschließlich Instruktions-Satz-Architekturen
mit fester Länge
und reduzierte Instruktions-Satz-Berechnungs- (RISC-) Instruktions-Satz-Architekturen. Gewisse
in 1 gezeigte Merkmale können in derartigen Architekturen
ausgelassen werden.
-
Die
Zeilenvorhersagevorrichtung 12 ist konfiguriert zum Erzeugen
von Abruf-Adressen für
den I-Cache 14 und ist zusätzlich zum Bereitstellen von Information
hinsichtlich einer Zeile von Instruktions-Operationen an die Ausrichtungseinheit 16 konfiguriert.
Im Allgemeinen speichert die Zeilenvorhersagevorrichtung 12 Zeilen
von Instruktions-Operationen, die zuvor spekulativ von dem Prozessor 10 abgerufen
wurden, und eine oder mehrere nächste
Abruf-Adressen, die jeder nach dem Abrufen der Zeile auszuwählenden
Zeile entsprechen. In einem Ausführungsbeispiel
ist die Zeilenvorhersagevorrichtung 12 zum Speichern von
Einträgen
mit 1K konfiguriert, wobei jeder eine Zeile von Instruktions-Operationen definiert.
Die Zeilenvorhersagevorrichtung 12 kann in mehrere Bänke unterteilt
sein, zum Beispiel vier Bänke
mit jeweils 256 Einträgen,
um gleichzeitiges Lesen und Aktualisieren ohne doppelte Anschlüsse zu ermöglichen,
falls gewünscht.
-
Die
Zeilenvorhersagevorrichtung 12 stellt dem I-Cache 14 die
nächste
Abruf-Adresse zum Abrufen der entsprechenden Instruktions-Bytes
bereit. Der I-Cache 14 ist ein Hochgeschwindigkeits-Cachespeicher
zum Speichern von Instruktions-Bytes. Gemäß einem Ausführungsbeispiel
kann der I-Cache 14 beispielsweise eine 256 Kbyte große vierfach satz-assoziative
Organisation unter Verwendung von 64 Byte Cache-Zeilen aufweisen.
Jedoch kann jede Struktur des I-Cache geeignet sein. Zusätzlich wird die
nächste
Abruf-Adresse an
die Zeilenvorhersagevorrichtung 12 als eine Eingabe zur
Abruf-Information
betreffend die entsprechende Zeile von Instruktions-Operationen
zurückgeliefert.
Die nächste
Abruf-Adresse kann als Reaktion auf von der PC-Silo-und-Umleitungs-Einheit 48 gemeldete
Ausnahme-Zustände
von einer durch den ITB 50 bereitgestellten Adresse ersetzt
werden.
-
Die
von der Zeilenvorhersagevorrichtung gelieferte nächste Abruf-Adresse kann die
Adresse sein, die der letzten Instruktion innerhalb der Zeile folgt
(falls die Zeile mit einer nicht verzweigenden Instruktion endet).
Alternativ kann die nächste
Abruf-Adresse eine Ziel-Adresse einer die Zeile beendenden Verzweigungs-Instruktion
sein. Gemäß einer weiteren
Alternative kann die Zeile durch eine Rückkehr-Instruktion beendet
sein, in welchem Fall die nächste
Abruf-Adresse von dem Rückkehr-Stapel 22 gezogen
wird.
-
Als
Antwort auf eine Abruf-Adresse gibt die Zeilenvorhersagevorrichtung 12 Information
hinsichtlich einer Zeile von Instruktions-Operationen, die an der
Abruf-Adresse beginnt, an die Zuweisungseinheit 16 aus.
Die Zuweisungseinheit 16 empfängt die der Abruf-Adresse entsprechenden
Instruktions-Bytes von
dem I-Cache 14 und unterteilt die Instruktions-Bytes entsprechend
der bereitgestellten Information zu der Instruktions-Operation in
einen Satz von Ausgabepositionen. Genauer gesagt stellt die Zeilenvorhersagevorrichtung 12 für jede Instruktion innerhalb
der Instruktions-Operationen der Zeile einen Verschiebungsbetrag
und eine Abbildung der Instruktionen für den Satz der Instruktions-Operationen,
welche die Zeile enthalten, bereit. Eine Instruktion kann Mehrfach-Instruktions-Operationen
entsprechen und daher kann der dieser Instruktion entsprechende
Verschiebungsbetrag zur Auswahl von Instruktions-Bytes in mehrere
Ausgabepositionen benutzt werden. Eine Ausgabeposition wird für jede mögliche Instruktions-Operation
innerhalb der Zeile bereitgestellt. In einem Ausführungsbeispiel
kann eine Zeile von Instruktions-Operationen bis zu 8 Instruktions-Operationen entsprechend
bis zu 6 Instruktionen enthalten. Im Allgemeinen bezeichnet eine
Zeile von Instruktions-Operationen, wie hier verwendet, eine Gruppe
von Instruktions-Operationen, die gemeinsam an die Dekodiereinheit 24 ausgegeben
wird. Die Zeile von Instruktions-Operationen rückt als eine Einheit durch
die Pipeline des Mikroprozessors 10 zu den Instruktions-Warteschlangen 36 vor.
Auf die Speicherung in den Instruktions-Warteschlangen 36 können die
einzelnen Instruktions-Operationen in beliebiger Reihenfolge ausgeführt werden.
-
Die
Ausgabepositionen innerhalb der Dekodiereinheit 24 (und
die darauffolgenden Stufen der Pipeline bis zu den Instruktions-Warteschlangen 36) definieren
die Programm-Reihenfolge der Instruktions-Operationen innerhalb
der Zeile für
die Hardware innerhalb dieser Stufen der Pipeline. Eine von der
Zuweisungseinheit 16 einer Ausgabeposition zugewiesene
Instruktions-Operation
verbleibt in dieser Ausgabeposition bis sie innerhalb einer Instruktions-Warteschlange 36A-36B gespeichert
ist. Entsprechend kann eine erste Ausgabeposition als vor einer
zweiten Ausgabeposition seiend bezeichnet werden, wenn eine Instruktions-Operation
innerhalb der ersten Ausgabeposition vor einer Instruktions-Operation
ist, die gleichzeitig in der zweiten Ausgabeposition in der Programm-Reihenfolge
ist. Ähnlich
kann eine erste Ausgabeposition als nachfolgend auf eine zweite
Ausgabeposition bezeichnet werden, wenn eine Instruktions-Operation
innerhalb der ersten Ausgabeposition nachfolgend auf eine Instruktions-Operation
ist, die gleichzeitig in der zweiten Ausgabeposition in der Programm-Reihenfolge
ist. Instruktions-Operationen innerhalb der Ausgabepositionen können auch
als vor oder nachfolgend zu einer anderen Instruktion innerhalb
der Zeile bezeichnet werden.
-
Eine
Instruktions-Operation (oder ROP) ist gemäß der hier vorliegenden Verwendung
des Ausdrucks eine Operation, wobei eine Ausführungseinheit innerhalb der
Ausführungs-Kerne 40A-40B zur Ausführung dieser
als eine einzelne Einheit konfiguriert ist. Einfache Instruktionen
können
einer Einfach-Instruktions-Operation entsprechen, während komplexere
Instruktionen Mehrfach-Instruktions-Operationen entsprechen können. Gewisse
dieser komplexeren Instruktionen können in der Mikrocode-Einheit 28 als
Mikrocode-Routinen implementiert sein. Ferner können nicht-CISC Instruktions-Sätze verwendende
Ausführungsbeispiele
eine Einfach-Instruktions-Operation
für jede
Instruktion verwenden (d.h. Instruktion und Instruktions-Operation können in
derartigen Ausführungsbeispielen
ein Synonym sein). In einem bestimmten Ausführungsbeispiel kann eine Zeile
bis zu acht Instruktions-Operationen entsprechend bis zu 6 Instruktionen
aufweisen. Zusätzlich
kann das bestimmten Ausführungsbeispiel
Zeilen bei weniger als 6 Instruktion und/oder 8 Instruktions-Operationen
beenden, wenn eine Verzweigungsinstruktion entdeckt wurde. Zusätzliche Einschränkungen
hinsichtlich der Instruktions-Operationen der Zeile können wie
gewünscht
verwendet werden.
-
Die
von der Zeilenvorhersagevorrichtung 12 erzeugte nächste Abruf-Adresse
wird an die Verzweigungs-Geschichte-Tabelle 18, den indirekten Adress-Cache 20 und
den Rückkehr-Stapel 22 weitergeführt. Die
Verzweigungs-Geschichte-Tabelle 18 stellt
eine Geschichte der Verzweigung für eine bedingte Verzweigungsinstruktion
bereit, welche die von der nächsten
Abruf-Adresse identifizierte
Zeile beenden könnte.
Die Zeilenvorhersagevorrichtung 12 kann die von der Verzweigungs-Geschichte-Tabelle 18 gelieferte
Vorhersage benutzen, um festzustellen, ob eine die Zeile beendende
bedingte Verzweigungsinstruktion vorhergesagt genommen oder nicht
genommen werden sollte. In einem Ausführungsbeispiel kann die Zeilenvorhersagevorrichtung 12 eine
Verzweigungsinstruktion, die zur Auswahl genommen oder nicht genommen
benutzt wird, speichern und wird die Verzweigungs-Geschichte-Tabelle 18 zur
Bereitstellung einer präziseren
Vorhersage benutzt, welche die Vorhersage der Zeilenvorhersagevorrichtung
streichen kann und veranlassen kann, dass eine andere nächste Abruf-Adresse ausgewählt wird.
Der indirekte Adress-Cache 20 wird zur Vorhersage von indirekten
Verzweigungs-Ziel-Adressen, welche häufig wechseln, benutzt. Die
Zeilenvorhersagevorrichtung 12 kann eine zuvor erzeugte
indirekte Ziel-Adresse als eine nächste Abruf-Adresse speichern.
Der indirekte Adress-Cache 20 kann die von der Zeilenvorhersagevorrichtung 12 gelieferte
nächste
Abruf-Adresse überstimmen,
wenn die entsprechende Zeile von einer indirekten Verzweigungsinstruktion
beendet wird. Ferner kann die auf die letzte Instruktion innerhalb
einer Zeile von Instruktions-Operationen folgende Adresse auf den
Rückkehr-Stapel 22 geschoben
werden, wenn die Zeile von einer Instruktion zum Aufruf einer Unterroutine beendet
wird. Der Rückkehr-Stapel 22 gibt
die an seinem oberen Ende gespeicherte Adresse an die Zeilenvorhersagevorrichtung 12 als
eine potentielle nächste
Abruf-Adresse für Zeilen
aus, die von einer Rückkehr-Instruktion
beendet werden.
-
Zusätzlich zum
Liefern von Informationen zu der nächsten Abruf-Adresse und zu
den Instruktions-Operationen an die oben erwähnten Blöcke ist die Zeilenvorhersagevorrichtung 12 konfiguriert
zur Bereitstellung von Informationen zu der nächsten Abruf-Adresse und zu
den Instruktions-Operationen an die PC-Silo-und-Umleitungs-Einheit 48.
Die PC-Silo-und-Umleitungs-Einheit 48 speichert
die Informationen zu der Abruf-Adresse und der Zeile und ist verantwortlich
sowohl für
die Umleitung des Abrufens der Instruktion auf Ausnahmen hin als
auch für
das ordnungsgemäße Zurückziehen
von Instruktionen. Die PC-Silo-und-Umleitungs-Einheit 48 kann
einen Ringpuffer zum Speichern von Informationen zu der Abruf-Adresse
und zu den Instruktions-Operationen enthalten, die mehreren Zeilen
von Instruktions-Operationen
entsprechen, welche innerhalb des Prozessors 10 ausstehen
können.
Nach dem Zurückziehen einer
Zeile von Instruktionen kann die PC-Silo-und-Umleitungs-Einheit 48 die
Verzweigungs-Geschichte-Tabelle 18 und den indirekten Adress-Cache 20 entsprechend
der Ausführung
einer bedingten Verzweigung bzw. einer indirekten Verzweigung aktualisieren.
Nach dem Verarbeiten einer Ausnahme kann die PC-Silo-und-Umleitungs-Einheit 48 Einträge aus dem
Rückkehr-Stapel 22 entfernen,
welche der die Ausnahme verursachenden Instruktion folgen. Zusätzlich leitet
die PC-Silo-und-Umleitungs-Einheit 48 einen
Hinweis der die Ausnahme verursachenden Instruktion an die Abbildungseinheit 30,
die Instruktions-Warteschlangen 36 und die Lade-/Speicher-Einheit 42 weiter,
so dass diese Einheiten Instruktionen streichen können, welche
nachfolgend zu der die Ausnahme verursachenden Instruktion sind,
und entsprechend einen spekulativen Zustand wiederherstellen können.
-
Gemäß einem
Ausführungsbeispiel
weist die PC-Silo-und-Umleitungs-Einheit 48 jeder Instruktions-Operation
eine Sequenz-Nummer(R#) zur Identifizierung der Reihenfolge der
innerhalb des Prozessors 10 ausstehenden Instruktions-Operationen
zu. Die PC-Silo-und-Umleitungs-Einheit 48 kann jeder möglichen
Instruktions-Operation innerhalb einer Zeile R#s zuweisen. Falls
eine Zeile weniger als die maximale Anzahl an Instruktions- Operationen enthält, werden
einige der zugewiesenen R#s für
diese Zeile nicht benutzt. Jedoch kann die PC-Silo-und-Umleitungs-Einheit 48 konfiguriert
sein zur Zuweisung des nächsten
Satzes von R#s an die nächste
Zeile von Instruktions-Operationen und daher verbleiben die zugewiesenen
aber nicht benutzten R#s unbenutzt bis die entsprechende Zeile der
Instruktions-Operationen
zurückgezogen
wird. Auf diese Weise kann ein Teil der einer bestimmten Zeile zugewiesenen
R#s zur Identifizierung der Zeile innerhalb des Prozessors 10 benutzt
werden. In einem Ausführungsbeispiel
kann ein Maximum von 8 ROPs einer Zeile zugeteilt werden. Entsprechend
kann dem ersten ROP innerhalb jeder Zeile ein R# zugewiesen werden,
das ein Vielfaches von 8 ist. Unbenutzte R#s werden entsprechend
automatisch übersprungen.
-
In
der vorstehenden Erläuterung
wurde die Zeilenvorhersagevorrichtung 12 dahingehend beschrieben,
dass sie nächste
Adressen vorhersagt und Information über Instruktions-Operationen
für Zeilen
von Instruktions-Operationen bereitstellt. Diese Operation erfolgt
so lange, wie jede Abruf-Adresse in der Zeilenvorhersagevorrichtung 12 trifft.
Auf das Feststellen eines Fehltreffers in der Zeilenvorhersagevorrichtung 12 leitet
die Zuweisungseinheit 16 die entsprechenden Instruktions-Bytes
von dem I-Cache 14 an die Vorhersage-Fehltreffer-Dekodiereinheit 26 weiter.
Die Vorhersage-Fehltreffer-Dekodiereinheit 26 dekodiert
die an dem Versatz, der von der fehlgetroffenen Abruf-Adresse angegeben
wird, beginnenden Instruktionen und erzeugt eine Zeile von Information
zu der Instruktions-Operation und eine nächste Abruf-Adresse. Die Vorhersage-Fehltreffer-Dekodiereinheit 26 erzwingt
jegliche Begrenzungen auf eine Zeile von Instruktions-Operationen
für die
der Prozessor 10 entworfen ist (zum Beispiel maximale Anzahl
von Instruktions-Operationen,
maximale Anzahl von Instruktionen, Abbruch bei Verzweigungsinstruktionen
usw.). Nach Beendigung des Dekodierens einer Zeile, stellt die Vorhersage-Fehltreffer-Dekodiereinheit 26 die
Information der Zeilenvorhersagevorrichtung 12 zum Speichern
bereit. Es wird festgestellt, dass die Vorhersage-Fehltreffer-Dekodiereinheit 26 zur
Ausgabe von Instruktionen konfiguriert sein kann während sie
dekodiert werden. Alternativ kann die Vorhersage-Fehltreffer-Dekodiereinheit 26 die
Information der Zeile der Instruktion dekodieren und der Zeilenvorhersagevorrichtung 12 zum
Speichern bereitzustellen. Nachfolgend kann die fehlgetroffene Abruf-Adresse
nochmals in der Zeilenvorhersagevorrichtung 12 versucht
werden und ein Treffer kann festgestellt werden. Ferner kann ein
Treffer in der Zeilenvorhersagevorrichtung 12 festgestellt
werden und ein Fehltreffer kann in dem I-Cache auftreten. Die entsprechenden
Instruktions-Bytes können durch
die externe Interface-Einheit 46 abgerufen und in dem I-Cache 14 gespeichert
werden.
-
Gemäß einem
Ausführungsbeispiel
verwenden die Zeilenvorhersagevorrichtung 12 und der I-Cache 14 eine
physische Adressierung. Jedoch wird der PC-Silo-und-Umleitungs-Einheit 48 auf
das Feststellen einer Ausnahme eine logische (oder virtuelle) Adresse
zugeführt.
Entsprechend werden die umgeleiteten Adressen von dem ITB 50 zur Überreichung
an die Zeilenvorhersagevorrichtung 12 übersetzt. Zusätzlich behält die PC-Silo-und-Umleitungs-Einheit 48 einen
virtuellen Vorausschau-PC-Wert für
die Benutzung von PC relativen Berechnungen bei, wie beispielsweise
relative Verzweigungs-Ziel-Adressen. Der jeder Zeile entsprechende
virtuelle Vorausschau-PC
wird von dem ITB 50 übersetzt,
um sicherzustellen, dass die entsprechende physische Adresse mit
der von der Zeilenvorhersagevorrichtung 12 erzeugten physischen
Abruf-Adresse übereinstimmt.
Falls eine Fehlübereinstimmung
auftritt wird die Zeilenvorhersagevorrichtung 12 mit der
korrekten physischen Adresse aktualisiert und die korrekten Instruktionen
werden abgerufen. Die PC-Silo-und-Umleitungs-Einheit 48 handhabt
ferner mit dem Abrufen jenseits von Schutzgrenzen usw. zusammenhängende Ausnahmen.
Die PC-Silo-und-Umleitungs-Einheit 48 behält auch
einen Zurückziehungs-PC-Wert bei, der
die Adresse der zuletzt zurückgezogenen
Instruktion anzeigt.
-
Die
Dekodiereinheit 24 ist zum Empfangen von Instruktions-Operationen
von der Zuweisungseinheit 16 in einer Vielzahl von Ausgabepositionen, wie
oben beschrieben, konfiguriert. Die Dekodiereinheit 24 dekodiert
die jeder Ausgabeposition zugewiesenen Instruktions-Bytes parallel
(zusammen mit einem Hinweis, welche der den Instruktions-Bytes entsprechende
Instruktions-Operation in einer bestimmten Ausgabeposition zu erzeugen
ist). Die Dekodiereinheit 24 identifiziert Ursprungs- und
Bestimmungs-Operanden für
jede Instruktions-Operation und erzeugt die von den Instruktions-Kernen 40A-40B verwendete
Instruktions-Operations-Kodierung. Die Dekodiereinheit 24 ist
auch zum Abrufen von Mikrocode-Routinen von der Mikrocode-Einheit 28 für Instruktionen,
welche in einem Mikrocode implementiert sind, konfiguriert.
-
Gemäß einem
bestimmten Ausführungsbeispiel
werden die folgenden Instruktions-Operationen von dem Prozessor 10 unterstützt: Ganzzahl,
Gleitkomma-Addition (umfassend Multimedia), Gleitkomma-Multiplikation
(umfassend Multimedia), Verzweigung, Laden, Erzeugung von Speicher-Adressen und Speichern
von Daten. Jede Instruktions-Operation kann bis zu 2 Ursprungs-Register-Operanden
und einen Bestimmungs-Register-Operanden verwenden. Gemäß einem
bestimmten Ausführungsbeispiel
kann ein einzelner Bestimmungs-Register-Operand Ganzzahl-ROPs zugewiesen
werden, um sowohl das Ganzzahl-Ergebnis als auch eine Aktualisierung
eines Zustandskodes (oder Flaggen) zu speichern. Die entsprechenden
logischen Register werden beide die entsprechende PR# nach dem Zurückziehen
der Ganzzahl-Operation empfangen. Gewisse Instruktionen können zwei
Instruktions-Operationen desselben Typs erzeugen, um zwei Bestimmungs-Register zu aktualisieren
(zum Beispiel POP, welches die ESP und das angegebene Bestimmungs-Register
aktualisiert).
-
Die
dekodierten Instruktions-Operationen und die Ursprungs- und Bestimmungs-Register-Nummern
werden der Abbildungseinheit 30 bereitgestellt. Die Abbildungseinheit 30 ist
zur Durchführung
der Register-Neubenennung durch das Zuweisen von physischen Register-Nummern
(PR#s) an jeden Bestimmungs-Register-Operanden und Ursprungs-Register-Operanden
jeder Instruktions-Operation konfiguriert. Die physische Register-Nummer
identifiziert Register innerhalb der Register-Dateien 38A-38B.
Zusätzlich
weist die Abbildungseinheit 30 jeder Instruktions-Operation
eine Warteschlangen-Nummer
(IQ#) zu, welche die Stelle innerhalb der Instruktions-Warteschlangen 36A-36B identifiziert,
die zum Speichern der Instruktions-Operation zugewiesen ist. Die
Abbildungseinheit 30 stellt ferner einen Hinweis auf die
Abhängigkeiten
für jede Instruktions-Operation
bereit, indem Warteschlangen-Nummern für die Instruktionen vergeben
werden, die jede einem Ursprungs-Operanden einer Instruktions-Operation
zugewiesene physische Register-Nummer aktualisieren. Die Abbildungseinheit 30 aktualisiert
den Abbildungssilo 32 mit den physischen Register-Nummern
und der Instruktion für
die Nummern, welche jeder Instruktions-Operation zugewiesen sind
(genauso wie die entsprechenden logischen Register-Nummern). Ferner
kann der Abbildungssilo 32 konfiguriert sein, einen Vorausschau-Zustand,
der den logischen Registern vor der Zeile von Instruktionen entspricht,
und einen R#, der die Zeile von Instruktionen im Hinblick auf den
PC-Silo identifiziert, zu speichern. Ähnlich zu dem oben beschriebenen
PC-Silo kann der Abbildungssilo 32 einen zirkularen Puffer
von Einträgen
aufweisen. Jeder Eintrag kann zum Speichern der einer Zeile von
Instruktions-Operationen entsprechenden Information konfiguriert
sein.
-
Die
Abbildungseinheit 30 und der Abbildungssilo 32 sind
ferner zum Empfangen eines Rückzugs-Hinweises
von dem PC-Silo 48 konfiguriert. Auf das Zurückziehen
einer Zeile von Instruktions-Operationen leitet der Abbildungssilo 32 die
der Zeile zugewiesenen Bestimmungs-Physisch-Register-Nummern und die entsprechenden
Logisch-Register-Nummern zum Speichern an den architekturellen Neubenennungs-Block 34 weiter.
Der architekturelle Neubenennungs-Block 34 speichert eine
jedem logischen Register entsprechende physische Register-Nummer,
welche den übergebenden
Zustand des Registers für
jedes logische Register darstellt. Die von dem architekturellen
Neubenennungs-Block 34 auf die Aktualisierung der entsprechenden
logischen Register mit einer neuen physischen Register-Nummer hin
ersetzten physischen Register-Nummern werden an die Frei-Liste der
physischen Register-Nummern zur Zuweisung an nachfolgende Instruktionen
zurückgegeben.
Gemäß einem
Ausführungsbeispiel
werden, vor dem Zurückgeben
einer physischen Register-Nummer an die Frei-Liste, die physischen
Register-Nummern mit den verbleibenden physischen Register-Nummern innerhalb
des architekturellen Neubenennungs-Blocks 34 verglichen. Falls
eine physische Register-Nummer nach der Ersetzung immer noch innerhalb
des architekturellen Neubenennungs-Blocks 34 vorhanden
ist, wird die physische Register-Nummer nicht zu der Frei-Liste hinzugefügt. Ein
derartiges Ausführungsbeispiel kann
in Fällen
verwendet werden, in denen die gleiche physische Register-Nummer
zum Speichern von mehr als einem Ergebnis einer Instruktion benutzt wird.
Beispielsweise kann ein die x86 Instruktions-Satz-Architektur verwendendes
Ausführungsbeispiel
physische Register bereitstellen, die groß genug zum Speichern von Gleitkomma-Operanden sind. Auf
diese Weise kann jedes physische Register zum Speichern jeglicher
Art von Operanden verwendet werden. Jedoch nutzen Ganzzahl-Operanden und
Bedingungscode-Operanden den Platz innerhalb eines gegebenen physischen
Registers nicht voll aus. In einem derartigen Ausführungsbeispiel kann
der Prozessor 10 ein einzelnes physisches Register anweisen,
sowohl das Ganzzahl-Ergebnis als auch ein Bedingungscode-Ergebnis einer Instruktion zu
speichern. Ein darauffolgendes Zurückziehen einer Instruktion,
welche das einem physischen Register entsprechende Bedingungscode-Ergebnis überschreibt,
vermag nicht, das gleiche Ganzzahl-Register zu aktualisieren, und daher
kann das physische Register auf die Übergabe eines neuen Bedingungscode-Ergebnisses
nicht freigemacht werden. Ähnlich vermag
ein nachfolgendes Zurückziehen
einer Instruktion, welche das einem physischen Register entsprechende
Ganzzahl-Register aktualisiert, nicht, das Bedingungscode-Register
zu aktualisieren, und daher kann das physische Register auf die Übergabe eines
neuen Ganzzahl-Ergebnisses nicht freigemacht werden.
-
Darüber hinaus
sind die Abbildungseinheit 30 und der Abbildungssilo 32 ferner
zum Empfangen von Ausnahme-Hinweisen von dem PC-Silo 48 konfiguriert.
Zeilen von Instruktions-Operationen, die der die Ausnahme verursachenden
Instruktions-Operation enthaltenden Zeile folgen, werden innerhalb
des Abbildungssilos 32 als ungültig markiert. Die den darauffolgenden
Zei len von Instruktions-Operationen entsprechenden physischen Register-Nummern werden auf
die Auswahl der entsprechenden Zeilen für das Zurückziehen freigemacht (und der
architekturelle Neubenennungs-Block 34 wird nicht mit den
ungültig
gemachten Bestimmungsregistern aktualisiert). Zusätzlich wird
der Zustand des Vorausschau-Registers, der von der Abbildungseinheit 30 aufrechterhalten
wurde, zu dem der die Ausnahme verursachenden Instruktion entsprechenden
Zustand des Vorausschau-Registers wiederhergestellt.
-
Die
Zeile von Instruktions-Operationen, die Ursprungs-Physisch-Register-Nummern, die Ursprungs-Warteschlangen-Nummern
und die Bestimmungs-Physisch-Register-Nummern
werden in den Instruktions-Warteschlangen 36A-36B entsprechend den
von der Abbildungseinheit 30 zugewiesenen Warteschlangen-Nummern
gespeichert. Gemäß einem
Ausführungsbeispiel
sind die Instruktions-Warteschlangen 36A-36B symmetrisch
und können
jegliche Instruktionen speichern. Ferner können Abhängigkeiten für eine bestimmte
Instruktions-Operation auftreten im Hinblick auf andere Instruktions-Operationen,
welche in einer von beiden Instruktions-Warteschlangen gespeichert
sind. Die Abbildungseinheit 30 kann beispielsweise eine
Zeile von Instruktions-Operationen in eine der Instruktions-Warteschlangen 36A-36B speichern
und eine darauffolgende Zeile von Instruktions-Operationen in die
andere der Instruktions-Warteschlangen 36A-36B speichern.
Eine Instruktions-Operation verbleibt in der Instruktions-Warteschlange 36A-36B zumindest
bis die vorherigen Instruktions-Operationen, von denen die Instruktions-Operation
abhängig
ist, ausgeführt
werden und läßt die Instruktions-Warteschlangen 36A-36B aktualisieren
(und die Instruktions-Operation wird für die Ausführung eingetragen). In einem Ausführungsbeispiel
verbleiben die Instruktions-Operationen bis zur Zurückziehung
in den Instruktions-Warteschlangen 36A-36B.
-
Die
Instruktions-Warteschlangen 36A-36B bestimmen,
auf das Einplanen einer bestimmten Instruktions-Operation zur Ausführung hin,
mit welcher Taktfrequenz diese bestimmte Instruktions-Operation die
Register-Dateien 38A-38B aktualisieren wird. Verschiedene
Ausführungs-Einheiten
innerhalb der Ausführungs-Kerne 40A-40B können unterschiedliche
Anzahlen von Stufen der Pipeline (und damit unterschiedliche Latenzzeiten)
verwenden. Ferner können
gewisse Instruktionen innerhalb einer Pipeline höhere Latenzzeiten als andere
erfahren. Entsprechend wird ein Countdown erzeugt, der die Latenzzeit
für die
bestimmte Instruktions-Operation mißt (in Vielfachen von Taktzyklen).
Die Instruktions-Warteschlangen 36A-36B warten
die angegebene Anzahl von Taktzyklen ab, bis die Aktualisierung
stattfindet und zeigen dann an, dass die Instruktions-Operationen,
die von der bestimmten Instruktions-Operation abhängen, vorbereitet
werden können.
Jede Instruktions-Warteschlange 36A-36B behält die Countdowns
für Instruktions-Operationen innerhalb
dieser Instruktions-Warteschlange bei und erlaubt es intern abhängigen Instruktions-Operationen
vorbereitet zu werden, wenn der Countdown abgelaufen ist. Zusätzlich stellt
die Instruktions-Warteschlange auf das Ablaufen des Countdowns Hinweise
an die andere Instruktions-Warteschlange bereit. Nachfolgend kann
die andere Instruktions-Warteschlange
abhängige
Instruktions-Operationen vorbereiten. Diese verzögerte Übertragung von Abschlüssen von
Instruktions-Operationen an die andere Instruktions-Warteschlange
erlaubt es den Register-Dateien 38A-38B von einem der Ausführungs-Kerne 40A-40B bereitgestellte
Ergebnisse an die andere Register-Datei weiter zu leiten. Jede der
Register-Dateien 38A-38B implementiert den von
dem Prozessor 10 verwendeten Satz von physischen Registern
und wird von einem der Ausführungs-Kerne 40A-40B aktualisiert. Die
Aktualisierungen werden dann an die andere Register-Datei weiter
geleitet. Es ist festzustellen, dass die Instruktions-Warteschlangen 36A-36B eine
Instruktion vorbereiten können,
sobald ihre Abhängigkeiten
befriedigt worden sind (d.h. außer-der-Reihe im
Hinblick auf die Reihenfolge innerhalb der Warteschlange).
-
Von
der Instruktions-Warteschlange 36A ausgegebene Instruktions-Operationen
lesen Ursprungs-Operanden entsprechend den Ursprungs-Physisch-Register-Nummern
aus der Register-Datei 38A ein und werden zur Ausführung an
den Ausführungs-Kern 40A weiter
geleitet. Der Ausführungs-Kern 40A führt die
Instruktions-Operation aus und aktualisiert das dem Ziel innerhalb
der Register-Datei 38A zugewiesene physische Register.
Einige Instruktions-Operationen haben keine Bestimmungs-Register
und der Ausführungs-Kern 40A aktualisiert
in diesem Fall kein Ursprungs-Physisch-Register. Entsprechend meldet der Ausführungs-Kern 40A die
R# der Instruktions-Operation Ausnahme-Information bezüglich der
Instruktions-Operation
(wenn überhaupt
vorhanden) an die PC-Silo und-Umleitungs-Einheit 48. Die Instruktions-Warteschlange 36B,
die Register-Datei 38B und der Ausführungs-Kern 40B können in ähnlicher
Weise arbeiten.
-
Gemäß einem
Ausführungsbeispiel
sind der Ausführungs-Kern 40A und
der Ausführungs-Kern 40B symmetrisch.
Jeder Ausführungs-Kern 40 kann beispielsweise
eine Gleitkomma-Additions-Einheit, eine Gleitkomma-Multiplikations-Einheit,
zwei Ganzzahl-Einheiten, eine Verzweigungs-Einheit, eine Lade-Adressen-Erzeugungs-Einheit,
eine Speicher-Adressen-Erzeugungs-Einheit und eine Speicher-Daten-Einheit
umfassen. Andere Konfigurationen von Ausführungseinheiten sind möglich.
-
Unter
den Instruktions-Operationen, welche keine Bestimmungs-Register
haben, sind Speicher-Adressen-Erzeugungen, Speicher-Daten-Operationen
und Verzweigungs-Operationen. Die Speicher-Adressen/Speicher-Daten-Operationen stellen der
Lade-/Speicher-Einheit 42 Ergebnisse bereit. Die Lade-/Speicher-Einheit 42 stellt
eine Schnittstelle zu dem D-Cache 44 zur Durchführung von
Speicher-Daten-Operationen bereit. Die Ausführungs-Kerne 40A-40B führen Lade-ROPs
und Speicher-Adressen-ROPs zur Erzeugung von Lade- beziehungsweise
Speicher-Adressen aus, in Abhängigkeit
von den Adress-Operanden der Instruktionen. Genauer gesagt können die
Lade-Adressen und die Speicher-Adressen dem D-Cache 44 auf
die Erzeugung dieser durch die Ausführungs-Kerne 40A-40B übergeben
werden (direkt über
die Verbindungen zwischen den Ausführungs-Kernen 40A-40B und
dem D-Cache 44). Lade-Adressen, welche den D-Cache 44 treffen,
resultieren in von dem D-Cache 44 zu den Register-Dateien 38 übertragenen
Daten. Auf der anderen Seite werden Speicher-Adressen, welche treffen,
ei nem Eintrag einer Speicher-Warteschlange zugeordnet. Nachfolgend
wird das Speicher-Datum von einer Speicher-Daten-Instruktions-Operation
bereitgestellt (welche benutzt wird, um das Speicher-Datum von den
Register-Dateien 38A-38B zu
der Lade-/Speicher-Einheit 42 zu leiten). Auf das Zurückziehen
der Speicher-Instruktion wird das Datum in dem D-Cache 44 gespeichert.
Zusätzlich
kann die Lade-/Speicher-Einheit 42 einen Lade-/Speicher-Puffer
zum Speichern von Lade-/Speicher-Adressen, welche den D-Cache 44 für nachfolgende
Cache-Auffüllungen
(über das
externe Interface 46) fehltreffen, und zum erneuten Versuchen
der fehlgetroffenen Lade-/Speicher-Operation
haben. Die Lade-/Speicher-Einheit 42 ist ferner zum Handhaben
von Lade-/Speicher-Speicherabhängigkeiten konfiguriert.
-
Die
nun zu erläuternde 2 zeigt
ein Blockschaltbild einer Ausführungsform
der Instruktions-Warteschlange 36A. Die Instruktions-Warteschlange 36B kann ähnlich konfiguriert
sein. Weitere Ausführungsformen
sind möglich
und vorgesehen. Bei der Ausführungsform
gemäß 2 weist
die Instruktions-Warteschlange 36A eine Abhängigkeitsvektor-Warteschlange 60A,
eine Warteschlangen-Steuereinheit 62A, eine Opcode-/Konstanten-Speichervorrichtung 64A und
eine Auswahl-Logik 66A auf. Die Abhängigkeitsvektor-Warteschlange 60A ist
mit einem Abhängigkeitsvektor-Bus 68 aus der
Abbildungseinheit 30 sowie einer Warteschlangen-Steuereinheit 62A,
einer Auswahl-Logik 66A und einer Instruktions-Warteschlange 36B verbunden.
Die Warteschlangen-Steuereinheit 62A ist mit einem Tail-Pointer-Steuerbus 70 aus
der Abbildungseinheit 30, einem IQ#s-Bus 72A aus
der Abbildungseinheit 30, und einer Opcode-/Konstanten-Speichervorrichtung 64A verbunden.
Die Opcode-/Konstanten-Speichervorrichtung 64A ist mit
der Auswahl-Logik 66A, einem Ausgangs-/Bestimmungs-PR's-Bus 72B aus
der Abbildungseinheit 30, einer Opcode-/R#s-Unmittelbar-Feld-Bus 74 aus
der Abbildungseinheit 30 und einem PC-Silo 48 verbunden. Die
Opcode-/Konstanten-Speichervorrichtung 64A ist ferner mit
einem Bus 76 verbunden, auf dem gewählte opcodes, Unmittelbar-Daten,
PR#s, R#s und IQ#s an die Register-Datei 38A und den Ausführungs-Kern 40A übermittelt werden
können.
Die Auswahl-Logik 66A ist mit einem Speicher-Adress-IQ#-Bus 78A verbunden.
-
Generell
wird einem ROP ein Eintrag in einer Abhängigkeitsvektor-Warteschlange 66A und
einer Opcode-/Konstanten-Speichervorrichtung 64A zugewiesen,
der der IQ# entspricht, die diesem ROP von der Abbildungseinheit 30 zugewiesen
worden ist. Anders ausgedrückt
identifiziert die IQ# den Eintrag in der Abhängigkeitsvektor-Warteschlange 60A und
die Opcode-/Konstanten-Speichervorrichtung 64A,
in der die dem ROP entsprechende Information gespeichert wird. Die
zugewiesenen IQ#s werden der Instruktions-Warteschlange 36A auf
dem IQ#s-Bus 72A zugeführt.
Die Warteschlangen-Steuereinheit 62A empfängt die
zugewiesenen IQ#s und aktiviert entsprechende Schreibaktivierungssignale,
um die Abhängigkeitsvektor-Warteschlange 60A und
die Opcode-/Konstanten-Speichervorrichtung 64A zu veranlassen,
die empfangene Information an der zugewiesenen Eintragsstelle zu
speichern.
-
Die
Abhängigkeitsvektor-Warteschlange 60A speichert
für jedes
in der Instruktions-Warteschlange 36A identifizierte ROP
einen Abhängigkeitsvektor.
Generell zeichnet ein "Abhängigkeitsvektor" jede Abhängigkeit
auf, die für
das entsprechende ROP vermerkt ist. Die Abhängigkeiten können Operanden-Abhängigkeiten
oder Reihenfolgebildungs-Abhängigkeiten
sein. Im folgenden wird eine Ausführungsform eines Abhängigkeitsvektors
erläutert,
obwohl bei anderen Ausführungsformen
auch andere Abhängigkeitsvektoren
verwendet werden können.
Ein ROP ist zur Einplanung nicht wählbar, bis sämtliche
Abhängigkeiten,
die in dem entsprechenden Abhängigkeitsvektor
aufgezeichnet sind, erfüllt
sind. Nachdem jede der Abhängigkeiten
erfüllt ist,
wird von der Abhängigkeitsvektor-Warteschlange 60A ein
Planungs-Request-Signal
auf einer Planungs-Request-Leitung, die dem Eintrag entspricht, aktiviert,
um die Logik 66A auszuwählen,
die die ROPs in der Instruktions-Warteschlange 36A zur Ausführung einplant.
Die Abhängigkeitsvektoren,
die einer Reihe seitens der Instruktions-Warteschlange 36A emp fangener
ROPs entsprechen, werden auf dem Abhängigkeitsvektor-Bus 68 der
Abhängigkeitsvektor-Warteschlange 60A zugeführt.
-
Die
Opcode-/Konstanten-Speichervorrichtung 64A speichert Instruktions-Information, bei
der es sich nicht um die zum Einplanen der ROPs verwendete Abhängigkeits-Information
handelt. Beispielsweise werden der Opcode und sämtliche unmittelbaren Daten,
die von dem ROP identifiziert werden, in der Opcode-/Konstanten-Speichervorrichtung 64A gespeichert.
Zusätzlich
wird die R#, die von dem PC-Silo 48 dem ROP zugewiesen
wurde, in der Opcode-/Konstanten-Speichervorrichtung 64A gespeichert.
Die Opcodes, die unmittelbaren Daten und die R#s, die einer Reihe
von ROPs entsprechen, werden auf dem OPcodes-/R#-/Unmittelbar-Felder-Bus 74 aus
der Abbildungseinheit 30 empfangen. Ferner werden Ausgangs-
und Ziel-PR#s, die der ROP von der Abbildungseinheit 30 zugewiesen
worden sind, in der Opcode-/Konstanten-Speichervorrichtung 64A gespeichert.
Die Ausgangs- und Ziel-PR#s, die einer Reihe von ROPs entsprechen,
werden auf dem Ausgangs-/Ziel-Bus-PR#s-Bus 72B aus der
Abbildungseinheit 30 empfangen. Die Opcode-/Konstanten-Speichervorrichtung 64A kann
z.B. einen Direktzugriffsspeicher (RAM) aufweisen. Alternativ können verschiedene
andere Speichervorrichtungen verwendet werden (z.B. ein Set von
Registern oder andere getaktete Speichervorrichtungen).
-
Die
Auswahl-Logik 66A übermittelt
die IQ#s der zur Ausführung
eingeplanten ROPs zur Ausführung
an die Opcode-/Konstanten-Speichervorrichtung 64A. Die
Opcode-/Konstanten-Speichervorrichtung 64A liest die von
den gewählten
IQ#s spezifizierten Einträge
und gibt die Opcodes, die unmittelbaren Daten, die PR#s, die R#s
und die IQ#s der entsprechenden ROPs auf dem Bus 76 an
den Ausführungs-Kern 40A und
die Registerdatei 38A aus. Die Registerdatei 38A empfängt die
Ausgangs-PR#s zum Lesen der Ausgangs-Operanden. Der Ausführungs-Kern 40A empfängt die
verbleibende Information zum Ausführen des ROP. Die Auswahl-Logik 66A ist
konfiguriert zum Einplanen bis zu einer Instruktions-Operation pro
Taktzyklus für
jede Ausführungseinheit
in dem Ausführungs-Kern 40A.
-
Gemäß einer
Ausführungsform
weist die Abbildungseinheit 30 die Ausführungseinheit in dem Ausführungs-Kern 40A zu,
in dem eine gegebene Instruktion ausgeführt werden soll. Bestimmte
ROPs können
nur von einer der Ausführungseinheiten
ausgeführt
werden und werden somit dieser Ausführungseinheit zugewiesen. Andere
ROPs können
von mehreren Ausführungseinheiten
ausgeführt
werden und können
so gleichmäßig wie
möglich
zwischen den mehreren Ausführungseinheiten
aufgeteilt werden. Beispielsweise sind gemäß einer Ausführungsform
zwei Ganzzahl-Ausführungseinheiten
in dem Ausführungs-Kern 40A enthalten.
Die Abbildungseinheit 30 kann Ganzzahl-ROPs in einer Reihe
von ROPs alternierend den beiden Ausführungseinheiten zuweisen. Die
Auswahl-Logik 66A plant jedes ROP für die zugewiesene Ausführungseinheit
ein, nachdem die Abhängigkeiten
dieser ROP erfüllt
worden sind. Gemäß einer
bestimmten Ausführungsform empfängt die
Auswahl-Logik 66A die zugewiesenen Ausführungseinheiten für eine Reihe
von ROPs gleichzeitig mit der Reihe von ROPs, die seitens der Abhängigkeitsvektor-Warteschlange 60A und
der Opcode-/Konstanten-Speichervorrichtung 64A empfangen
worden sind. Alternativ kann die zugewiesene Ausführungseinheit
in der Abhängigkeitsvektor-Warteschlange 60A oder
der Opcode-/Konstanten-Speichervorrichtung 64A gespeichert
werden, um zur Planung verwendet zu werden.
-
Die
Auswahl-Logik 66A kann zusätzlich die bereits erwähnte Abwärtszähl-Schaltung enthalten, um
den Taktzyklus zu bestimmen, bei dem ein eingeplantes ROP als erfüllt in Bezug
auf die abhängigen ROPs
in den Instruktions-Warteschlange 36A-36B zu gelten
hat. Bei der vorliegenden Ausführungsform wird
eine Abhängigkeit
etwas vor dem Abschluss des ROPs erfüllt, bei dem die Abhängigkeit
vermerkt worden ist. Insbesondere können eine oder mehrere Pipeline-Stufen
zwischen dem Einplanen eines ROP aus Instruktions-Warteschlangen 36A-36B und
dem Punkt existieren, am dem dieses ROP Register-Dateien 36A-36B liest
(z.B. 2 Stufen gemäß einer
bestimmten Ausführungsform).
Andere Ausführungsformen
weisen zwei oder weniger Stufen auf, einschließlich keiner Stufe (d.h. das
Abwärtszählen läuft beim
Aktualisieren der Register-Dateien 36A-36B aus).
Beim Auslaufen einer Abwärtszählung wird
von der Auswahl-Logik 66A ein Schreib-Gültig-Signal auf einer Schreib-Gültig-Leitung
aktiviert, das dem Eintrag in der Instruktions-Warteschlange 36A entspricht,
die für
den Abschluss des ROP zugewiesen worden ist. Das Schreib-Gültig-Signal
bleibt aktiviert, bis ein entsprechender Warteschlangen-Eintrag
einem anderen ROP zugewiesen worden ist. Das Schreib-Gültig-Signal
wird von der Abhängigkeitsvektor-Warteschlange 60A verwendet,
um zu erkennen, dass eine entsprechende Abhängigkeit erfüllt worden
ist. Anders ausgedrückt
kann jedes ROP, für das
eine Abhängigkeit
für das
abgeschlossene ROP aufgezeichnet worden ist, diese Abhängigkeit
als erfüllt
erkennen. Falls jede andere aufgezeichnete Abhängigkeit erfüllt ist,
kann die Abhängigkeits-Warteschlange 60A das
Planungs-Requets-Signal auf der diesem ROP entsprechenden Planungs-Request-Leitung für die Auswahl-Logik 66A aktivieren, um
das Planen anzufordern.
-
Bei
jedem Taktzyklus evaluiert jeder Eintrag in der Abhängigkeitsvektor-Warteschlange 60A den gespeicherten
Abhängigkeitsvektor,
um festzustellen, ob die Abhängigkeiten
erfüllt
sind. Falls die aufgezeichneten Abhängigkeiten erfüllt sind,
wird das entsprechende Planungs-Request-Signal auf der entsprechenden
Planungs-Request-Leitung aktiviert. Gemäß der hier vorliegenden Verwendung
bezeichnet das "Evaluieren" eines Abhängigkeitsvektors
das Prüfen
der in dem Abhängigkeitsvektor
aufgezeichneten Abhängigkeiten,
und zwar in Verbindung mit den Schreib-Gültig-Signalen, die angeben,
welche ROPs abgeschlossen worden sind, um zu bestimmen, welche Abhängigkeitsvektoren
nur erfüllte
Abhängigkeiten
aufzeichnen. Die ROPs, welche den Abhängigkeitsvektoren entsprechen,
die nur erfüllte Abhängigkeiten
aufzeichnen, sind zur Ausführung wählbar und
aktivieren ein Planungs-Request-Signal für die Auswahl-Logik 66A.
-
Gemäß der vorliegenden
Ausführungsform können die
ROPs bis zu zwei Ausgangs-Operanden haben und können somit bis zu zwei Ausgangs-Operanden-Abhängigkeiten
haben, die in dem entsprechenden Abhängigkeits vektor vermerkt sind.
Ferner sind gemäß der vorliegenden
Ausführungsform
mehrere Reihenfolgebildungs-Abhängigkeiten
zum Laden von ROPs definiert. Erstens sind Lade-ROPs reihenfolge-abhängig von
jedem vorherigen Speicher-Adress-ROP. Diese Abhängigkeit wird auferlegt, um
die von der Lade-/Speicher-Einheit 42 verwendete Abhängigkeits-Prüf-Logik
zu vereinfachen. Falls Adressen vorheriger Speicherungen beim Ausführen eines
Lade-ROP nicht verfügbar
sind, dann muss die Logik zum Detektieren, dass eine Abhängigkeit
von einer der vorherigen Speicherungen (bestimmt durch das Vergleichen
der Adresse der Speicherung mit der Adresse des Ladens) in irgendeiner
Weise in der Lage sein, die Abhängigkeit
zu einem späteren
Zeitpunkt zu erkennen und die Abhängigkeit korrekt zu handhaben.
Andererseits sind durch Erzwingen einer Reihenfolgebildungs-Abhängigkeit
für jedes
vorherige Speicher-Adress-ROP die Speicher-Adressen verfügbar, und
die Abhängigkeits-Prüfung kann
beim Ausführen
des Lade-ROP abgeschlossen werden. Zusätzlich können Lade-ROPs Reihenfolgebildungs-Abhängigkeiten
von früheren
Speicher-Daten-ROPs erfahren, falls eine Abhängigkeit von einer bestimmten
Speicherung über
einen weiter unten beschriebenen Speicher-/Lade-Vorwärts-Mechanismus vorhergesagt
wird. Weitere Typen von Reihenfolgebildungs-Abhängigkeiten können wie
gewünscht
verwendet werden. Beispielsweise handelt es sich bei bestimmten
Instruktionen um Synchronisier-Instruktionen (d.h. jede Instruktion
vor der Synchronisier-Instruktion wird vor dem Ausführen der
Synchronisier-Instruktion abgeschlossen, und jede Instruktion nach
der Synchronisier-Instruktion wird nicht vor dem Ausführen der
Synchronisier-Instruktion ausgeführt). Synchronisier-Instruktionen können erzielt
werden, indem für
die Synchronisier-Instruktion eine Reihenfolgebildungs-Abhängigkeit
von jedem vorherigen ROP vermerkt wird und für jedes nachfolgende ROP eine
Reihenfolgebildungs-Abhängigkeit
von der Synchronisations-Instruktion vermerkt wird.
-
Zum
Aufzeichnen der Speicher-Adress-ROP-Reihenfolgebildungs-Abhängigkeiten
zum Laden der ROPs hält
die Abbildungseinheit 30 einen (noch zu beschreibenden)
Speicher-Adress-Abhängigkeitsvektor
aufrecht. Der Speicher-Adress-Abhängigkeitsvektor zeichnet jedes ausstehende
Speicher- Adress-ROP
zur Aufnahme in den Abhängigkeitsvektor
für nachfolgende
Lade-ROPs auf. Somit sendet, wenn festgestellt wird, dass ein Speicher-Adress-ROP erfolgreich
abgeschlossen worden ist, die Auswahl-Logik 66A die IQ# des
Speicher-Adress-ROP auf dem Speicher-Adress-IQ#-Bus 78A an
die Abbildungseinheit 30.
-
Gemäß 2 ist
die vorliegende Ausführungsform
der Abhängigkeitsvektor-Warteschlange 60A mit
einer Instruktions-Warteschlange 36B verbunden (und insbesondere
mit einer ähnlichen
Abhängigkeitsvektor-Warteschlange,
wie sie unten in 4 gezeigt ist). Die Abhängigkeitsvektor-Warteschlange 60A lenkt
die von der Auswahl-Logik 66A ausgegebenen Schreib-Gültig-Reihen zu der Abhängigkeitsvektor-Warteschlange
in der Instruktions-Warteschlange 36B und empfängt Schreib-Gültig-Reihen,
die ROPs entsprechen, welche in der Instruktions-Warteschlange 36B gespeichert
sind. Logischerweise können
die Instruktions-Warteschlangen 36A-36B als eine
einzige Instruktions-Warteschlange betrachtet werden, die eine Anzahl
von Einträgen
aufweist, welche der Summe der Einträge in der Instruktions-Warteschlange 36A und
der Einträge in
der Instruktions-Warteschlange 36B gleicht. Eine Hälfte der
IQ#s identifiziert Einträge
in der Instruktions-Warteschlange 36A,
und die andere Hälfte
der IQ#s identifiziert Einträge
in der Instruktions-Warteschlange 36B. Beispielsweise kann
das signifikanteste Bit der IQ# einen Eintrag dahingehend identifizieren,
dass er sich in der Instruktions-Warteschlange 36A oder
der Instruktions-Warteschlange 36A befindet.
-
Es
kann eine Abhängigkeit
zwischen einem ROP in einer der Instruktions-Warteschlangen 36A-36B und
einem ROP in der anderen Instruktions-Warteschlange existieren. Somit können die
Abhängigkeitsvektoren
Abhängigkeiten
aufzeichnen, die ROPs von der anderen Instruktions-Warteschlange
entsprechen. Die der anderen Instruktions-Warteschlange entsprechenden
Schreib-Gültig-Leitungen werden
jeder Abhängigkeitsvektor-Warteschlange zugeleitet,
um beim Evaluieren der darin gespeicherten Abhängigkeitsvektoren verwendet
zu werden.
-
Die
Warteschlangen Steuereinheit 62A kommuniziert über den
Tail-Pointer-Steuerbus 70 mit
der Abbildungseinheit 30. Generell ist die Warteschlangen
Steuereinheit 62A konfiguriert zum Halten von Head- und
Tail-Pointern, welche die erste gültige Instruktion in der Instruktions-Warteschlange 36A (in Programm-Reihenfolge)
bzw. die letzte gültige
Instruktion in der Instruktions-Warteschlange 36B (in Programm-Reihenfolge)
angeben. Die Warteschlangen Steuereinheit 62A übermittelt
den aktuellen Tail-Pointer über
den Tail-Pointer-Steuerbus 70 an die Abbildungseinheit 30.
Falls die Abbildungseinheit 30 Einträge in der Instruktions-Warteschlange 36A zuweist,
gibt die Abbildungseinheit 30 die Anzahl der über den
Tail-Pointer-Steuerbus 70 übermittelten Warteschlangen-Einträge derart
zurück,
dass die Warteschlangen Steuereinheit 36A den Tail-Pointer aktualisieren
kann. Die Warteschlangen Steuereinheit 62A kann ferner
ein Warteschlangen-Voll-Signal ausgeben,
falls bei einer Reihe von ROPs unzureichender Platz zwischen dem
Tail-Pointer und dem Head-Pointer besteht. Es ist anzumerken, dass
bei der vorliegenden Ausführungsform
den ROPs eine IQ# mehrere Pipeline-Stufen vor dem Speichern der ROPs
in der Instruktions-Warteschlange 36A zugewiesen werden
kann. Somit können
die zugewiesenen IQ#s mit den ROPs zu der Instruktions-Warteschlange 36A gepipelinet
werden. Nach dem Zuweisen der IQ#s in der Abbildungseinheit 30 und
dem Aktualisieren des Tail-Pointers reservieren die Abbildungseinheit 30 und
die Instruktions-Warteschlange 36A effektiv Reserve-Warteschlangen-Einträge für ROPs in
der Pipeline.
-
Der
PC-Silo 48 ist konfiguriert zum Übermitteln einer R# eines ROP,
das eine Ausnahme hinsichtlich verschiedener Pipeline-Stufen in
dem Prozessor 10 zwecks Streichung nachfolgender Instruktionen
erfährt.
Somit kann die Opcode-/Konstanten-Speichervorrichtung 64A die
Ausnahme R# aus dem PC-Silo 48 empfangen. Die Opcode-/Konstanten-Speichervorrichtung 64A vergleicht
die Ausnahme-R# mit den darin gespeicherten R#s. Die Opcode-/Konstanten-Speichervorrichtung 64A kann
die Warteschlangen Steuereinheit 62A angeben, an deren
Eintragsstellen R#s gespeichert sind, die anzei gen, dass das entsprechende
ROP auf das die Ausnahme erfahrende ROP folgt. Die angegebenen Einträge können dann
invalidiert werden, und der Tail-Pointer kann rückgesetzt werden, um die angegebenen
Einträge
aus der Warteschlange zu löschen.
-
In
der nun zu erläuternden 3 ist
ein Blockschaltbild einer Ausführungsform
eines Abhängigkeitsvektors 80 gezeigt.
Andere Ausführungsformen
sind möglich
und vorgesehen. Gemäß 3 enthält der Abhängigkeitsvektor 80 für jede IQ#
(0 bis N-1, wobei die Gesamtzahl von Einträgen in den Instruktions-Warteschlangen 36A-36B gleich
N ist) einen Hinweis. Gemäß einer
bestimmten Ausführungsform
kann N gleich 128 sein, obwohl auch eine andere geeignete
Zahl verwendet werden kann. Der jede IQ# entsprechende Hinweise
zeichnet auf, ob für
das dem Abhängigkeitsvektor 80 entsprechende
ROP eine Abhängigkeit
von dem ROP besteht, dem die entsprechende IQ# zugewiesen ist, oder
ob dies nicht der Fall ist. Somit kann der Abhängigkeitsvektor 80 eine
beliebige Anzahl von Abhängigkeiten
für das entsprechende
ROP aufzeichnen (bis hin zu einer Abhängigkeit von jedem weiteren
ausstehenden ROP). Gemäß einer
bestimmten Ausführungsform weist
jeder Hinweis ein Bit auf, das, wenn es gesetzt ist, eine Abhängigkeit
von dem ROP anzeigt, dem die entsprechende IQ# zugewiesen ist, und
das, wenn es frei ist, das Nichtvorhandensein einer Abhängigkeit von
dem ROP anzeigt, dem die entsprechende IQ# zugewiesen ist.
-
Der
Abhängigkeitsvektor 80 kann
vorteilhafterweise einen universellen Mechanismus zum Planen von
ROPs bilden. Da der Abhängigkeitsvektor 80 zum
Aufzeichnen einer beliebigen Anzahl von Abhängigkeiten konfiguriert ist,
kann ein gegebenes ROP in Bezug auf jedes andere ROP in eine Reihenfolge
gebracht werden. Somit können
sämtliche
architekturellen oder mikroarchitekturellen Restriktionen, die einer
gleichzeitigen Ausführung
oder der Reihenfolge bestimmter ROPs bei der Ausführung auferlegt
sind, erzwungen werden. Falls es während der Entwicklung einer
Prozessor-Implementierung wünschenswert
wird, zusätzliche
Ausführungsreihenfolge-Instruktionen
hinzuzufügen
(z.B. um die Implementierung zu vereinfachen), können die zu sätzlichen
Instruktionen aufgenommen werden, indem die Reihenfolgebildungs-Abhängigkeiten
in dem Abhängigkeitsvektor 80 angezeigt
werden. Die verbesserte Flexibilität kann die Eignung der Instruktions-Warteschlangen 36A-36B für verschiedene
Prozessor-Impementierungen verbessern.
-
Die
als nächstes
zu erläuternde 4 zeigt ein
Blockschaltbild einer Ausführungsform
einer Abhängigkeitsvektor-Warteschlange 60A und
einer Abhängigkeitsvektor-Warteschlange 60B aus
der Instruktions-Warteschlange 36B. Weitere Ausführungsformen
sind möglich
und vorgesehen. Bei der Ausführungsform
gemäß 4 enthält die Abhängigkeitsvektor-Warteschlange 60A eine
erste Speichervorrichtung 90A und eine zweite Speichervorrichtung 90B sowie
eine PH2-Halteschaltung 92A und eine PH1-Halteschaltung 94A.
In ähnlicher
Weise enthält
die Abhängigkeitsvektor-Warteschlange 60B eine
erste Speichervorrichtung 90C und eine zweite Speichervorrichtung 90D sowie
eine PN2-Halteschaltung 92B und eine PH1-Halteschaltung 94B. Die
erste Speichervorrichtung 90A ist mit der PN2-Halteschaltung 92A verbunden,
die ferner mit der zweiten Speichervorrichtung 90B verbunden
ist. Die zweiten Speichervorrichtung 90B wiederum ist mit
der PH1-Halteschaltung 94A, die mit der (in 2 gezeigten)
Auswahl-Logik 66A verbunden ist. In ähnlicher Weise ist die zweite
Speichervorrichtung 90D mit der PH1-Halteschaltung 94B verbunden,
die ferner mit der ersten Speichervorrichtung 90C verbunden
ist. Die erste Speichervorrichtung 90C ist wiederum mit
der PH2-Halteschaltung 92B verbunden.
-
Insbesondere
ist die PN1-Halteschaltung 94A mit einem Set von Planungs-Request-Leitungen 96A und
einem Set von Schreib-Gültig-Leitungen 98A verbunden.
Die Planungs-Request-Leitungen 96A werden aus der zweiten
Speichervorrichtung 90B durch die PH1-Halteschaltung 94A geführt, während die
Schreib-Gültig-Leitungen 98A durch
die PH1-Halteschaltung 94A zu der zweiten Speichervorrichtung 90B und
der zweiten Speichervorrichtung 90D geführt werden. Ein Set von Zwischen-Planungs-Request-Leitungen 100A wird
durch die PH2-Halteschaltung 92A von einer ersten Speichervorrichtung 90A zu
einer zweiten Speichervorrichtung 90B geführt. Ein
Set von Planungs-Request-Leitungen 96B und ein Set von
Schreib-Gültig-Leitungen 98B wird
in ähnlicher
Weise durch die PH2-Halteschaltung 92B zu der Auswahl-Logik 66B bzw.
der ersten Speichervorrichtung 90C geführt. Schreib-Gültig-Leitungen 98B werden
in ähnlicher Weise
durch die erste Speichervorrichtung 90A geführt. Ein
Set von Zwischen-Planungs-Request-Signalen auf den Ein Set von Zwischen-Planungs-Request-Leitungen 100B wird
durch die zweite Speichervorrichtung 90D erzeugt und durch
die PH1-Halteschaltung 94B an die erste Speichervorrichtung 90C übermittelt.
Jede PH2-Halteschaltung 92A-92B empfängt ein
PH2-Takt-Eingangssignal, während jede
PH1-Halteschaltung 94A-94B ein PH1-Takt-Eingangssignal
empfängt.
Die Abhängigkeitsvektor-Warteschlangen 60A und 60B sind
mit einem Rotator 102 verbunden, der ferner mit Abhängigkeitsvektor-Bussen 68 aus
der Abbildungseinheit 30 verbunden ist (z.B. gibt der Abhängigkeitsvektor-Bus 68A den
Abhängigkeitsvektor
für die
Gegenstands-Position 0 aus, der Abhängigkeitsvektor-Bus 68B gibt
den Abhängigkeitsvektor
für die
Gegenstands-Position 1 aus, etc.) Der Rotator 102 ist derart angeordnet,
dass er ein Rotations-Steuersignal von einem Multiplexer (mux) 104 empfängt, das
ein Eingangssignal aus den Warteschlangen-Steuereinheiten 62 empfängt. Ferner
empfängt
die Abhängigkeitsvektor-Warteschlange 60A ein
Set von Schreib-Aktivierungssignalen 106 aus der Warteschlangen-Steuereinheit 62A,
und die Abhängigkeitsvektor-Warteschlange 60B empfängt in ähnlicher
Weise ein Set von Schreib-Aktivierungssignalen 108 aus
der Warteschlangen-Steuereinheit 62B.
-
Die
Abhängigkeitsvektor-Warteschlangen 60A und 60B verwenden
mehrere Merkmale, welche die Taktfrequenz erhöhen können, mit der die Instruktions-Warteschlangen 36A 36B arbeiten
können.
Aufgrund der relativ großen
Anzahl von Instruktions-Warteschlangen-Einträgen, die gestützt werden können (z.B.
128 gemäß einer
Ausführungsform) wird
die Abhängigkeitsvektor-Evaluation
in Abschnitte unterteilt und während
aufeinanderfolgender Takt-Phasen durchgeführt. Der erste Abschnitt des Abhängigkeitsvektors
wird während
der ersten Phase ausgewertet, so dass die Zwischen-Planungs-Request-Signale
z.B. auf den Zwischen-Planungs-Request-Leitun gen 100A in
der Abhängigkeitsvektor-Warteschlange 60A erzeugt
werden. Während der
nachfolgenden Takt-Phase wird der zweite Abschnitt des Abhängigkeitsvektors
(zusammen mit den Zwischen-Planungs-Request-Signalen) ausgewertet,
um die Planungs-Request-Signale für die Auswahl-Logik 66A zu
erzeugen. Beispielsweise werden gemäß einer Ausführungsform
die Zwischen-Planungs-Request-Leitungen und die Planungs-Request-Leitungen
Draht-OR-Leitungen, die auf einen High-Zustand vorgeladen sind (was
angibt, dass keine Abhängigkeit
existiert), und sie werden entladen, falls eine oder mehr Abhängigkeiten
in dem entsprechenden Abschnitt des Abhängigkeitsvektors unerfüllt bleiben.
Somit wird, indem die Evaluation in Abschnitten durchgeführt wird,
die auf die Draht-OR-Leitungen einwirkende Last reduziert, und somit
kann das Entladen der Draht-OR-Leitungen auf eine Abhängigkeit
hin schneller erfolgen. Vorteilhafterweise kann die Gesamt-Taktfrequenz erhöht werden.
Ein weiteres Merkmal, das die Betriebsfrequenz verbessern kann,
ist die Teilung einer einzelnen logischen Instruktions-Warteschlange
in Instruktions-Warteschlangen 36A-36B. Die Auswahl-Logik für jede Warteschlange
kann weniger komplex sein und dadurch schneller zum Planen von Instruktionen arbeiten,
da die Auswahl-Logik nur einen Teil der Instruktionen in Betracht
zieht, die sich tatsächlich
in der Instruktions-Warteschlange befinden. Ferner können die
Instruktions-Warteschlangen Instruktionen während unterschiedlicher Takt-Phasen
einplanen, so dass die Erfüllung
einer Abhängigkeit
von einem ROP in der zu der Instruktions-Warteschlange gegenläufigen Instruktions-Warteschlange
in 1/2 Taktzyklus (im Gegensatz zu einem vollen Taktzyklus) ausbreiten
kann. Dieser 1/2 Taktzyklus der Übermittlung
kann auch dazu verwendet werden, Daten aus dem zu der Register-Datei,
die der planenden Instruktions-Warteschlange entspricht, entgegengesetzten
Register zu bewegen.
-
Gemäß der hier
vorliegenden Verwendung wird mit der "Phase" eines Taktsignals ein Teil der Periode
des Taktsignals bezeichnet. Jede Phase ist durch den Anstieg und
den Abfall des Taktsignals begrenz, das dieser Phase entspricht.
Generell erfasst eine getaktete Speichervorrichtung (wie z.B. ein Latch-Speicher,
ein Register, ein Flip-flop etc.) einen Wert am Ende einer der Phasen.
Ferner überlappen die
Phasen einander typischerweise nicht. Bei der Ausführungsform
gemäß 4 ist
die Taktperiode in zwei Phasen unterteilt (PH1 und PH2), von denen jede
durch ein Taktsignal repräsentiert
ist. PH1 hält 94A-94B-Erfassungswerte
am Ende der PH1-Phase, während
PH2 am Ende der PH2-Phase 92A-92B-Erfassungswerte
hält.
-
Generell
speichert die erste Speichervorrichtung 90A für jeden
Abhängigkeitsvektor,
der einer ROP in der Instruktions-Warteschlange 36A entspricht,
den Teil des Abhängigkeitsvektors,
der IQ#s N-1 abwärts
bis N/2 entspricht. In ähnlicher
Weise speichert die erste Speichervorrichtung 90C für jeden Abhängigkeitsvektor,
der einer ROP in der Instruktions-Warteschlange 36B entspricht,
den Teil des Abhängigkeitsvektors,
der IQ#s N-1 abwärts
bis N/2 entspricht. Die zweite Speichervorrichtung 90B speichert
für jeden
Abhängigkeitsvektor,
der einer ROP in der Instruktions-Warteschlange 36A entspricht,
den Teil des Abhängigkeitsvektors,
der IQ#s N/2 – 1
abwärts
bis 0 entspricht. Somit speichern die erste Speichervorrichtung 90A und
die erste Speichervorrichtung 90C die Teile jedes Abhängigkeitsvektors, die
den Einträgen
in der Instruktions-Warteschlange 36B entsprechen, während die
zweite Speichervorrichtung 90B und die zweite Speichervorrichtung 90C die
Teile jedes Abhängigkeitsvektors
speichern, die den Einträgen
in der Instruktions-Warteschlange 36A entsprechen.
-
Im
folgenden wird die Arbeitsweise der Abhängigkeitsvektor-Warteschlange 60A gemäß 4 beschrieben.
Während
der PN2-Phase wertet die erste Speichervorrichtung 90A den
Teil jedes darin gespeicherten Abhängigkeitsvektors aus (den "ersten Teil"), wobei die Zwischen-Planungs-Request-Signale auf Zwischen-Planungs-Request-Leitungen 100A erzeugt
werden. Für
jeden Eintrag in der Abhängigkeitsvektor-Warteschlange 60A ist
eine Zwischen-Planungs-Request-Leitung vorgesehen. Das Zwischen-Planungs-Request-Signal wird
aktiviert, falls jede in dem ersten Teil aufgezeichnete Abhängigkeit
erfüllt
ist, und es wird deaktiviert, falls mindestens eine in dem ersten
Teil aufgezeichnete Abhängigkeit
erfüllt
ist. Gemäß einer
Ausführungsform
werden, wie bereits erwähnt,
Zwischen-Planungs-Request- Leitungen 100A in
OR-Weise verdrahtet. Die Zwischen-Planungs-Request-Leitungen werden
auf einen aktivierten Zustand vorgeladen (während der PH1-Phase für die erste
Speichervorrichtung 90A) und dann auf den deaktivierten
Zustand entladen (während
der PH2-Phase für
die erste Speichervorrichtung 90A), falls eine oder mehrere
Abhängigkeiten
unerfüllt
bleiben. Die PH1-Halteschaltung 92A erfasst das Set von
Zwischen-Planungs-Request-Signalen
auf den Zwischen-Planungs-Request-Leitungen 100A und übermittelt
sie während
der PH1-Phase der zweiten Speichervorrichtung 90B.
-
Die
zweite Speicervorrichtung 90B wertet ähnlich wie die erste Speichervorrichtung 90A den zweiten
Teil des Abhängigkeitsvektors
aus, wobei ein Set von Planungs-Request-Signalen auf den Planungs-Request-Leitungen 96A erzeugt
wird. Zusätzlich
zum Evaluieren der Abhängigkeiten
in dem zweiten Teil des Abhängigkeitsvektors
zwecks Erzeugens des Sets von Abhängigkeits-Request-Signalen
werden die entsprechenden Zwischen-Abhängigkeits-Request-Signale in
die Evaluation einbezogen. Falls das entsprechende Zwischen-Abhängigkeits-Request-Signal
aktiviert ist und jede der in dem zweiten Teil des Abhängigkeitsvektors
aufgezeichneten Abhängigkeiten
erfüllt
ist, wird das Abhängigkeits-Request-Signal
aktiviert. Falls das entsprechende Zwischen-Abhängigkeits-Request-Signal deaktiviert
wird oder eine oder mehrere der in dem zweiten Teil des Abhängigkeitsvektors
aufgezeichneten Abhängigkeiten
nicht erfüllt
sind, wird das Planungs-Request-Signal deaktiviert. Die PN1-Halteschaltung 94A erfasst
die Abhängigkeits-Request-Signale und übermittelt
die Zwischen-Abhängigkeits-Request-Signale
an die Auswahl-Logik 66A.
-
Die
Auswahl-Logik 66A gibt Schreib-Gültig-Signale an die PH1-Halteschaltung 94A aus.
Für jeden
Warteschlangen-Eintrag in der Instruktions-Warteschlange 36A wird
ein Schreib-Gültig-Signal
ausgegeben, das angibt, dass die Abhängigkeit von dem entsprechenden
ROP erfüllt
ist. Anders ausgedrückt
handelt es sich bei einem aktivierten Schreib-Gültig-Signal um einen Hinweise,
dass eine Abhängigkeit
von dem entsprechenden ROP erfüllt wor den
ist. Somit werden die Schreib-Gültig-Signale aus
der Auswahl-Logik 66A an die zweite Speichervorrichtung 90B und
die zweite Speichervorrichtung 90D übermit telt. In ähnlicher
Weise werden Schreib-Gültig-Signale
aus der Auswahl-Logik 66A zu der ersten Speichervorrichtung 90A und
die erste Speichervorrichtung 90C geleitet.
-
Due
Abhängigkeitsvektor-Warteschlange 60B wertet
die Vektoren in ähnlicher
Weise aus wie die Abhängigkeitsvektor-Warteschlange 60A.
Die zweite Speichervorrichtung 90D jedoch wertet den zweiten
Teil des Abhängigkeitsvektors
aus, um während
der PH1-Phase Zwischen-Abhängigkeits-Request-Signale zu erzeugen,
gefolgt von einer in der ersten Speichervorrichtung 90C erfolgenden
Evaluation des ersten Teils des Abhängigkeitsvektors und der Zwischen-Planungs-Request-Signale,
um während
der PH2-Phase Abhängigkeits-Request-Signale zu
erzeugen.
-
Um
die Anzahl der Transistoren zu reduzieren, welche die Abhängigkeitsvektor-Warteschlangen 36A-36B bilden,
kann es wünschenswert
sein, für
jeden Eintrag eine Schreib-Leitung vorzusehen (d.h. eine Leitung
zum Transportieren von Daten in den Eintrag). Generell kann die
erste von der Abbildungseinheit 30 gelieferte ROP (an der
Gegenstands-Position 0, mit dem entsprechenden Abhängigkeitsvektor
auf dem Abhängigkeitsvektor-Bus 68A)
jedem beliebigen Warteschlangen-Eintrag zugewiesen werden, basierend
auf dem Tail-Pointer der Warteschlange zum Zeitzpunkt der Zuweisung. Nachfolgende
ROPs werden den nächstfolgenden Warteschlangen
zugewiesen, bis zu dem letzten vorgesehenen ROP (die weniger sein
können
als die maximale Anzahl von acht). Folglich ist ein Rotator 102 vorgesehen.
Jedes Ausgangssignal des Rotators ist mit einem Eintrag eines Sets
von Einträgen verbunden,
wobei jeder Eintrag in dem Set von den benachbarten Einträgen in dem
Set um eine Anzahl von Einträgen
beabstandet ist, die der Anzahl von Gegenständen gleich ist. Beispielsweise
kann bei der vorliegenden Ausführungsform,
bei der acht Gegenstands-Positionen verwendet werden, das erste
Ausgangssignal mit den Einträgen
0,8,16 etc. verbunden werden. Das zweite Ausgangssignal kann mit
den Einträgen
1,9,17 etc. ver bunden werden. Damit die Abhängigkeitsvektoren auf den Schreib-Eingangs-Leitungen
dem zugewiesenen Warteschlangen-Eintrag zugeführt werden kann, rotiert der
Rotator 102 die auf dem Abhängigkeitsvektor-Bus 68 geführten Abhängigkeitsvektoren
entsprechend den Bits niedriger Ordnung der IQ#, die der Gegenstands-Position
null zugeteilt ist. Bei der vorliegenden Ausführungsform, bei der acht Gegenstands-Positionen
verwendet werden, übermitteln
die dem Low-Niveau zugehörigen
drei Bits den Dreh-Betrag. Falls
beispielsweise IQ# 0, 8 oder 16 der Gegenstands-Position 0 zugewiesen
wird, wir 1 eine Drehung von 0 Positionen durchgeführt, und
der der Gegenstands-Position 0 entsprechende Abhängigkeitsvektor wird an den
ersten Ausgangs des Rotators angelegt. Falls andererseits IQ# 1,
9 oder 17 vorgelegt wird, wird eine Drehung um eine Gegenstands-Position
durchgeführt,
und der der Gegenstands-Position null entsprechende Abhängigkeitsvektor
wird an den zweiten Ausgang des Rotators angelegt. Da der zweite
Ausgang mit den Einträgen
1, 9, 17 etc. verbunden ist, wird der der Gegenstands-Position null entsprechende
Abhängigkeitsvektor
auf die Schreib-Leitungen
gelegt, die dem zugewiesenen Warteschlangen-Eintrag zugewiesen sind.
Die verbleibenden Abhängigkeitsvektoren
werden entsprechend auf die Schreib-Leitungen gegeben, die mit den
zugewiesenen Warteschlangen-Einträgen verbunden sind.
-
Der
Rotator 102 ist derart angeordnet, dass er den Dreh-Betrag
von einer der Warteschlangen Steuereinheiten 62 empfängt, je
nachdem, welche der Instruktions-Warteschlangen 36A-36B in
dem aktuellen Taktzyklus ROPs empfängt. Der Mux 104 wählt alternierend
das Drehbetrag-Eingangssignal (entsprechend der IQ#, die dem ROP
on der Gegenstands-Position null zugewiesen ist) aus der Warteschlangen-Steuereinheit 82A in
der Instruktions-Warteschlange 36A, und die Steuereinheit 62B führt dies in
der Instruktions-Warteschlange 36B durch. Zusätzlich gibt
die Warteschlangen-Steuereinheit 82A oder 82B (je
nachdem, welche Instruktions-Warteschlange ROPs empfängt) Schreib-Aktivierungs-Signale
aus, die den zugewiesenen IQ#s entsprechen, so dass die zugewiesenen
Warteschlangen-Einträge die
vorgelegten Abhängigkeitsvektor
speichern.
-
Die
nun zu erläuternde 5 zeigt
ein Schaltbild einer Ausführungsform
eines Abhängigkeitsvektor-Warteschlangen-Eintrags
(Eintrag-Nummer M) in der Instruktions-Warteschlange 60A.
Weitere Ausführungsformen
sind möglich
und vorgesehen Der gezeigte Teil entspricht einem Abhängigkeits-Hinweis in dem Abhängigkeitsvektor,
der in dem Eintrag M gespeichert ist (z.B. einen Hinweis auf die
Abhängigkeiten
von IQ#N).
-
Der
Abhängigkeits-Hinweis
für IQ#N
wird auf der Schreib-Leitung 110 aus dem Rotator 102 zugeführt. Falls
das Schreib-Aktivierungs-Signal auf der Schreib-Aktivierungs-Leitung 112 von
der Warteschlangen-Steuereinheit 62A aktiviert wird, wird
der Abhängigkeits-Hinweis
in der Speicherzelle gespeichert, die durch die über Kreuz verbundenen Invertierer 114A-114B repräsentiert
ist. Der auf der Schreiben-Leitung 110 empfangene Abhängigkeits-Hinweis ist
die Invertierung des tatsächlichen
Abhängigkeits-Hinweises,
so dass ein logisches High-Signal an dem Knotenpunkt 116 anzeigt,
dass für
das ROP in IQ#N eine Abhängigkeit
existiert.
-
Die
Planungs-Request-Leitung 96AA (eine der in 4 gezeigten
Planungs-Request-Leitungen)
ist ebenfalls in 5 gezeigt. Ein (nicht gezeigter)
Vorlade-Transistor lädt
die Draht-OR-Leitung 96AA auf einen aktivierten Zustand
vor. Ein Entlade-Transistor 118 ist zwischen die Planungs-Request-Leitung 96AA und
Masse geschaltet. Falls das Ausgangssignal eines mit dem Entlade-Transistor 118 verbundenen
Gatters 120 eine logische Eins ist, entlädt der Entlade-Transistor 118 die
Planungs-Request-Leitung 96AA, und das in IQ#M gespeicherte ROP
wird nicht eingeplant. Falls andererseits das Ausgangssignal eines
Gatters 120 eine logische Null ist, führt der Entlade-Transistor 118 keine
Entladung der Planungs-Request-Leitung 96AA durch. Falls keine
anderen, ähnlichen
Entlade-Transistoren, die anderen Abhängigkeits-Hinweisen in dem
Abhängigkeitsvektor
entsprechen, die Planungs-Request-Leitung 96AA entladen,
kann das in IQ#M gespeicherte ROP eingeplant werden.
-
Bei
dem Gatter 120 handelt es sich gemäß 5 um ein
NOR-Gatter. Folglich ist, falls keine Abhängigkeit in der durch die Invertierer 114-114B repräsentierten
Speicherzelle angezeigt wird, das Eingangssignal aus der Speicherzelle,
das dem Gatter 120 zugeführt wird, eine logische Eins,
und das Ausgangssignal des Gatters 120 ist eine logische
Null, wodurch verhindert wird, dass der Entlade-Transistor 118 die
Planungs-Request-Leitung 96AA auf einen deaktivierten Zustand
entlädt.
Auf diese Weise wird durch ein Nichtvorhandensein einer Abhängigkeit
bei einer gegebenen IQ# das Einplanen des ROP in IQ#M nicht verhindert,
unabhängig
davon, ob das ROP in RQ#M abgeschlossen ist oder nicht. Falls andererseits
eine Abhängigkeit
in der Speicher-Zelle angezeigt wird, ist das Eingangssignal von
der Speicher-Zelle eine loigische Null, und das Eingangssignal des
Gatters 120 ist eine logische Eins, bis die Schreib-Gültig-Leitung 98AA (eine
der in 4 gezeigten Schreib-Gültig-Leitungen 98A)
auf low aktiviert wird. Bei der Ausführungsform gemäß 5 wird
eine Abhängigkeit
durch ein logisches low auf einer Schreib-Gültig-Leitung als erfüllt angezeigt. Nachdem
die Schreib-Gültig-Leitung
aktiviert worden ist, schaltet der Ausgang des Gatters 120 auf
eine logische Null, und der Entlade-Transistor 118 wird
nicht aktiviert.
-
Die
nun zu erläuternde 6 zeigt
ein Schaltbild einer Ausgestaltung der Weitergabe eines Zwischen-Planungs-Request-Signals
auf der Zwischen-Planungs-Request-Leitung 100BA (eine
der in 4 gezeigten Zwischen-Planungs-Request-Leitungen 100B)
aus der zweiten Speichervorrichtung 90D auf eine entsprechende
Planungs-Request-Leitung 96BA (eine der in 4 gezeigten
Planungs-Request-Leitungen 96B). Andere Ausführungsforemen
sind möglich
und vorgesehen.
-
Bei
der Ausführungsform
gemäß 6 wird das
Zwischen-Planungs-Request-Signal auf des Zwischen-Planungs-Request-Leitung 100BA)
in einer Speicherzelle erfasst, die durch über Kreuz verbundene Invertierer 122A-122B repräsentiert
ist. Eine invertierte Version des Zwischen-Planungs-Request-Signals
wird entsprechend der PH1-Phase durch einen Durchlass-Transistor 126 zu
einem Transistor 124 geleitet. Am Ende der PH1-Phase ist die Inversion
des Zwischen-Planungs-Request-Signals an dem Gate des Transistors 124 präsent und
ist durch den Transistor 126 von der Speicher-Zelle isoliert. Beim
Start der PN2-Phase wird der Transistor 128 aktiviert.
Falls das Gate des Transistor 124 eine logische Eins führt (d.h.
das Zwischen-Planungs-Request-Signal wurde beim Erfassen am Ende
der PH1-Phase deaktiviert),
wird die Planungs-Request-Leitung 96BA durch die Transistoren 124 und 128 auf
einen deaktivierten Zustand entladen. Falls andererseits das Gate
des Transistors 124 eine logische Eins führt (d.h.
die Zwischen-Request-Leitung wurde beim Erfassen am Ende der PH1-Phase
aktiviert), wird die Planungs-Request-Leitung 96BA nicht durch
die Transistoren 124 und 128 entladen. Die Planungs-Request-Leitung 96BA kann
entsprechend der Evaluatior des ersten Teils des Abhängigkeitsvektors
deaktiviert werden, oder sie kann aktiviert bleiben, um anzuzeigen,
dass das ROP in dem Eintrag P eingeplant werden kann.
-
Es
ist anzumerken, dass die Invertierer 122A-122B und
die Transistoren 124, 126 und 128 einen
Teil der PH1-Latch-Schaltung 94B aufweisen können. Ferner
ist anzumerken, dass die obige Erläuterung Signale betrifft, die
aktiviert und deaktiviert werden. Ein Signal kann als aktiviert
definiert werden, wenn es sich in einem Zustand mit logischer Eins
befindet, und als deaktiviert, wenn es sich in einem Zustand mit
logischer Null befindet, oder umgekehrt, je nachdem, wie es praktikabel
ist. Beispielsweise sind in 4 und 5 die
Planungs-Request-Leitungen im Zustand mit logischer Eins aktiviert,
während
die Schreib-Leitungen im Zustand mit logischer Null aktiviert sind.
Bei anderen Ausführungsformen
kann die Ausrichtung jedes Signals wie gewünscht umgekehrt werden.
-
Die
nun zu erläuternde 7 zeigt
ein Blockschaltbild einer Ausführungsform
einer Abbildungseinheit 30 und einer Speicher-/Lade-Vorwärts-Detektionseinheit 148.
Andere Ausführungsformen
sind möglich
und vorgesehen. Bei der Ausführungsform gemäß 7 weist
die Abbildungseinheit 30 eine Register-Abtasteinheit 130,
eine IQ#PR#-Steuereinheit 132, eine Virtuell-/Physisch-Register-Abbildungseinheit 136,
eine Abhängigkeitsvektor-Erzeu gungseinheit 134 und
ein Speicher-Adress-Register 138 auf. Die Register-Abtasteinheit 130 ist
geschaltet zum Empfang von Ausgangs- und Ziel-Register-Nummern (und eines Gültig-Hinweises
für jede) aus
der Dekodiereinheit 24 auf dem Wege über den Bus 140. Die
Register-Abtasteinheit 130 ist zum Durchlassen der Ziel-Register-Nummern
und Ausgangs-Virtuell-Register-Nummern
an die Virtuell-/Physisch-Register-Abbildungseinheit 136 konfiguriert.
Die IQ#PR#-Steuereinheit 132 ist mit einem Bus 142 verbunden,
um Ziel-Register-Nummern und den Ziel-Register-Nummern entsprechende
Gültig-Hinweise
zu empfangen. Die Instruktions-Warteschlange 36A-36B geben
Tail-Pointer auf dem Tail-Pointer-Bus 70A aus (ein Teil
eines Tail-Pointer-Steuerbusses 70 ist in 2 gezeigt),
die angeben, welcher Eintrag in jeder Warteschlange derzeit das
Ende der Warteschlange ist. Die IQ#PR#-Steuereinheit 132 ist
ferner mit einem ROP-Zuweisungsbus 70B verbunden (einem
Teil des Tail-Pointer-Steuerbusses 70 gemäß 2).
Ferner ist die IQ#PR#-Steuereinheit 132 mit einem Ziel-PR#IQ#-Bus 144 verbunden.
Die Virtuell-/Physisch-Register-Abbildungseinheit 136 ist
mit einem Abbildungs-Silo 32 verbunden und ausgelegt zum Ausgeben
von Ausgangs-PR#s, Ausgangs-IQ#s, Ziel-PR#s und eines IQ# für jedes
ROP in der Reihe auf einem Ausgangs-/Ziel-PR#- und IQ#-Bus 72 an die
Instruktions-Warteschlange 36A-36B. Eine (nicht gezeigte)
Frei-Listen-Steuereinheit ist mit der IQ#PR#-Steuereinheit 132 über einen Nächst-Frei-PR#-Bus 146 verbunden.
Die Abhängigkeitsvektor-Erzeugungseinheit 134
ist mit der Virtuell-/Physisch-Register-Abbildungseinheit 136 verbunden,
um die Ausgangs-/Ziel-IQ#s zu empfangen, und ist ferner mit dem
Speicher-Adress-Register 138 und
der Speicher-/Lade-Vorwärts-Detektionseinheit 148 verbunden.
Die Abhängigkeitsvektor-Erzeugungseinheit 134 ist
angeordnet zum Empfangen eines Hinweises auf die ROP-Typen in einer
Reihe von ROPs auf dem ROP-Typen-Bis 150, und ist verbunden
mit einem Speicher-Adress-IQ#s-Bus 78 (einschießlich des
Speicher-Adress-IQ#-Busses 78A von der Instruktions-Warteschlange 36A).
Ferner ist die Abhängigkeitsvektor-Erzeugungseinheit 134 mit einem
Abhängigkeits-Vektoren-Bus 68 verbunden. Die
Speicher-/Lade-Vorwärts-Detektionseinheit 148 ist
verbunden mit einem Lade-Treffer-Speicher-Daten-Bus 152 aus
dem PC-Silo 48, einem Speicher- Daten-IQ#-Bus 154 aus der IQ#PR#-Steuereinheit 132,
und einem ROP-Typen-
und PCs-Bus 156 von der Dekodiereinheit 24.
-
Generell
ist die Abhängigkeitsvektor-Erzeugungseinheit 134 konfiguriert
zum Erzeugen eines Abhängigkeitsvektors
für jede
RPO, dass auf den Instruktions-Warteschlangen 36A-36B ausgegeben wird
(d.h. jede Gegenstands-Position in der Leitung), und zum Übermitteln
dieses Abhängigkeitsvektors auf
dem Abhängigkeitsvektor-Bus 68 an
die Instruktions-Warteschlangen 36A-36B. Die Abhängigkeitsvektor-Erzeugungseinheit 134 empfängt für jedes ROP
einen Hinweis auf den ROP-Typ auf einer Leitung von der Dekodiereinheit 24.
Die Abhängigkeitsvektor-Erzeugungseinheit 134 ist
derart konfiguriert, dass sie für
jeden beliebigen ROP-Typ Operanden-Abhängigkeiten in dem Abhängigkeitsvektor
für jeden
Ausgangs-Operanden aufzeichnet. Die Abhängigkeitsvektor-Erzeugungseinheit 134 empfängt die jedem
Ausgangs-Operanden entsprechenden IQ#s aus der Virtuell-/Physisch-Register-Abbildungseinheit 136 und
dekodiert die Ausgangs-IQ#s, um einen entsprechenden Abhängigkeits-Hinweises
in dem Abhängigkeitsvektor
zu setzen.
-
Wie
oben erwähnt
handelt es sich bei dem Abhängigkeitsvektor
um einen flexiblen Abhängigkeits-Mechanismus,
der das Anzeigen einer beliebigen Anzahl von Abhängigkeiten für ein bestimmtes ROP
erlaubt. Bei der vorliegenden Ausführungsform beispielsweise werden
Lade-ROPs als reihenfolgeabhängig
von früheren
Speicher-Adress-ROPs definiert. Somit hält die Abhängigkeitsvektor-Erzeugungseinheit 134 einen
Speicheradress-Abhängigkeits-Vektor
in der Speicher-Adress-Register 138. Der Speicheradress-Abhängigkeits-Vektor
zeichnet Hinweise auf jede ausstehende Speicher-Adresse auf (z.B. durch IQ# bei der
vorliegenden Ausführungsform).
Die Abhängigkeitsvektor-Erzeugungseinheit 134 aktualisiert
den Speicher-Adress-Abhängigkeitvektor
mit einem Hinweis auf die IQ#s, die jedem Speicher-Adress-ROP in
der Leitung zugewiesen ist (identifiziert durch die aus der Dekodiereinheit 24 empfangenen
ROP-Typen). Die Ziel-IQ#s werden aus der Virtuell-/Physisch-Register-Abbildungseinheit 136 empfangen.
-
Jedes
Speicher-Adress-ROP steht aus, bis die entsprechende IQ# von den
Instruktions-Warteschlangen 36A-36B auf dem Speicher-Adress-IQ#-Bus 78 (auf
dem die Abhängigkeitsvektor-Erzeugungseinheit 134 den
Speicher-Adress-Abhängigkeitsvektor
aktualisiert, um die entsprechende IQ# zu löschen) ausgibt.
-
Für jedes
Lade-ROP, das auf dem ROP-Typen-Bus 150 angezeigt wird,
enthält
die Abhängigkeitsvektor-Erzeugungseinheit 134 den
Speicher-Adress-Abhängigkeitsvektor
in dem für
dieses ROP erzeugten Abhängigkeitsvektor.
Insbesondere weiser bei einer Ausführungsform die Abhängigkeitsvektoren
für jede
IQ# ein Bit auf. Falls das Bit gesetzt ist, wird eine Abhängigkeit
auf dem ROP aufgezeichnet, dem die entsprechende IQ# zugewiesen
ist. Bei einer derartigen Ausführungsform
kann der Speicher-Adress-Abhängigkeitsvektor
mit den Abhängigkeitsvektoren,
die den Ausgangs-Operanden entsprechen, einem OR Vorgang unterzogen
werden. Zusätzlich
zum Speichern des in dem Speicher-Adress-Register 138 gespeicherten
Speicher-Adress-Abhängigkeitsvektors
kann die Abhängigkeitsvektor-Erzeugungseinheit 134 Speicher-Adress-ROPs
in der Reihe von ROPs mit einem bestimmten Lade-ROP und vor diesem bestimmten Lade-ROP
in der Leitung detektieren. Es werden auch Abhängigkeiten von den detektierten
Speicher-Adress-ROPs in dem Abhängigkeitsvektor
für das
bestimmte Lade-ROP aufgezeichnet.
-
Ein
bestimmtes Lade-ROP kann ferner als abhängig von einem Speicher-Daten-ROP aufgezeichnet
werden, falls die Abhängigkeitsvektor-Erzeugungseinheit 134 vorhersagt,
dass das bestimmte Lade-ROP eine Lade-Treffer-Speicher-Daten-Situation erfahren
wird. Wie oben beschrieben werden Lade-ROPs in Abhängigkeit
von vorherigen Speicher-Adress-ROPs in Reihenfolge gebracht. Indem diese
Reihenfolgebildung erzwungen wird, können Abhängigkeiten zwischen Lade-ROPs
und vorherigen Speicher-ROPs, die auf die gleiche Speicherstelle
zugreifen, bestimmt werden. Da jedoch (im allgemeinen) keine Reihenfolge
von Lade-ROPs bei vorherigen Speicher-ROPs besteht, kann möglicherweise eine Detektion
einer Abhängigkeit
durch die Lade-Speicher-Einheit 42 nicht unmittelbar zur Übermittlung
der Spei cher-Daten führen
(d h. falls das Speicher-Daten-ROP noch nicht ausgeführt ist,
dann sind die Daten noch nicht verfügbar). Falls die Speicher-Daten
noch nicht übermittelt
werden können, wird
das Lade-ROP gelöscht
und in einem nachfolgenden Taktzyklus neu eingeplant. Nachteiligerweise werden
ROPs, die von dem gelöschten
Lade-ROP abhängig
sind, ebenfalls gelöscht.
Aus Gründen
der Einfachheit können
Instruktions-Warteschlangen 36A36B sämtliche ROPs löschen, die
im Anschluss an das gelöschte
Lade-ROP eingeplant sind. Um die Löschungen von ROPs zu verhindern,
ohne Lade-ROPs für
Speicher-Daten-ROPs übermäßig zu verzögern, wird
die Speicher-/Lade-Vorwärts-Detektionseinheit 148 verwendet,
um die Lade-Treffer-Speicher-Daten-
(bei unverfügbaren
Speicher-Daten) Situation vorherzusagen und bei Bedarf auf diese
Vorhersage hin eine Abhängigkeit
aufzuzeichnen. Falls eine Lade-Treffer-Speicher-Daten-Situation
vorhergesagt wird, wird die IQ# des Speicher-Daten-ROP von der Speicher-/Lade-Vorwärts-Detektionseinheit 148 an
die Abhängigkeitsvektor-Erzeugungseinheit 134 ausgegeben.
Die Abhängigkeitsvektor-Erzeugungseinheit 134 zeichnet eine
Reihenfolgebildungs-Abhängigkeit
von dem Speicher-Daten-ROP in dem Abhängigkeitsvektor des entsprechenden
Lade-ROP auf.
-
Die
Speicher-/Lade-Vorwärts-Detektionseinheit 148 kann
gemäß der vorliegenden
Ausführungsform
ein Paar von Tabellen aufrechterhalten. Die erste Tabelle ist durch
die Lade-PC-Adresse indiziert und speichert eine Speicher-Daten-PC-Adresse,
bei der zuvor eine Lade-Treffer-Speicher-Daten-Situation detektiert
wurde. Die zweite Tabelle ist durch die Speicher-Daten-PC-Adresse indiziert
und speichert die dem Speicher-Daten-ROP zugewiesene IQ#. Somit
indiziert die Speicher-/Lade-Vorwärts-Detektionseinheit 148 die
erste Tabelle mit den PCs jedes Lade-ROP, das von der Abbildungseinheit 30 abgebildet
wird (angezeigt auf dem Bus 156 von der Dekodiereinheit 24).
Falls der indizierte Eintrag anzeigt, dass eine Lade-Treffer-Speicher-Daten-Situation vorhergesagt
wird, dann wird die in dem indizierten Eintrag gespeicherte Speicher-PC-Adresse
zum Indizieren der zweiten Tabelle verwendet. Die IQ# in der zweiten
Tabelle an dem indizierten Eintrag wird von der Speicher-/Lade-Vorwärts-Detektionseinheit 148 an
die Abhängigkeits vektor-Erzeugungseinheit 134 übermittelt,
um in den Abhängigkeiten
des entsprechenden Lade-ROP einbezogen zu werden.
-
Beim
Detektieren einer Lade-Treffer-Speicher-Daten-Situation während des
Ausführens
eines Lade-ROPs teilt die Lade-/Speicher-Einheit 42 die R#
des Lade-ROP und die R# des Speicher-Daten-ROP, bei dem Abhängigkeit
detektiert wird, dem PC-Silo 48 mit. Der PC-Silo 48 gibt
die entsprechenden physischen PC-Adressen des Lade-ROP und des Speicher-Daten-ROP
auf dem Lade-Treffer-Speicher-Daten-Bus 152 aus. Die Speicher-/Lade-Vorwärts-Detektionseinheit 148 aktualisiert
die erste Tabelle an dem durch die Lade-PC-Adresse induzierten Eintrag
mit der Speicher-Daten-PC-Adresse des Speicher-Daten-ROP bei dem
die Lade-Treffer-Speicher-Daten-Situation detektiert wurde (und setzt
einen Hinweis darauf, dass die Lade-Treffer-Speicher-Daten-Situation detektiert
wurde). Gemäß einer
Ausführungsform
handelt es sich bei der ersten Tabelle um eine mit 2-KByte bemessene, 2-Wege-set-assoziative
Tabelle, in der jeder Eintrag sechs Bits der Speicher-PC-Adresse und den
entsprechenden Lade-Treffer-Daten-Hinweis speichert.
-
Die
Speicher-/Lade-Vorwärts-Detektionseinheit 148 empfängt die
IQ#s- und PC-Adressen der Spicher-Daten-ROPs, die von der IQ#PR#-Steuereinheit 132 auf
dem Bus 154 ausgegeben werden und zeichnet die IQ#s in
den Einträgen
der zweiten Tabelle gemäß der Indizierung
durch die entsprechenden Speicher-Daten-PC-Adressen auf.
-
Bei
der Ausführungsform
gemäß 7 führt die
Abbildungseinheit 30 eine Register-Neubenennung unter Verwendung
eines Zwei-Stufen-Pipeline-Designs
aus. Bei weiteren Ausführungsformen kann
das Register-Neubenennen in einer einzige Pipeline-Stufe oder zusätzlichen
Stufen ausgeführt werden,
je nach Wunsch. In der ersten Stufe weist die Register-Abtasteinheit 130 jedem
Ausgangs-Register virtuelle Register-Nummern zu. Parallel dazu weist
die IQ#PR#-Steuereinheit 132 sämtlichen ROPs und RR#s von
den ROPs, die ein Ziel-Register haben, IQ#s zu (basierend auf den
von den Instruktions-Warteschlange 36A-36B gelieferten
Tail-Pointern).
-
In
der zweiten Stufe bildet die Speicher-/Lade-Vorwärts-Detektionseinheit 148 die
virtuellen Register-Nummern auf physische Register-Nummern ab (basierend
auf dem aktuellen Voraussage-Zustand und den zugewiesenen PR#s)
und leitet die von der IQ#PR#-Steuereinheit 132 zugewiesenen Physisch-Register-Nummern
an die Ausgabe-Position des entspechenden ROP.
-
Die
von der Register-Abtasteinheit 130 zugewiesenen Virtuell-Register-Nummern identifizieren eine
Quelle für
die Physisch-Register-Nummern. Beispielsweise können bei der vorherigen Ausführungsform
die den Ausgangs-Registern entsprechenden Physisch-Register-Nummern
aus einem Lookahead-Register-Zustand gezogen werden (das die Updates
reflektiert, die den zuvor von der Abbildungseinheit 30 verarbeiteten
Reihen von ROPs entspricht und das von der Virtuell-/Physisch-Register-Abbildungseinheit 136 aufrechterhalten
wird), oder von einer vorherigen Gegenstands-Position in der Reihe
von ROPs (falls der Ziel-Operand des vorherigen ROP der gleiche
ist wie der Ausgangs-Operand, d.h. eine Intraline-Abhängigkeit
existiert). Mit anderen Worten ist die Physisch-Register-Nummer, die
einer Ausgangs-Register-Nummer entspricht, die Physisch-Register-Nummer
in dem Lookahead-Register-Zustand, falls keine Intraline-Abhängigkeit
detektiert wird. Die Register-Abtasteinheit 130 führt effektiv
eine Intraline-Abhängigkeits-Prüfung durch. Bei
anderen Ausführungsformen
können
andere Quellen von Quell-Operanden vorgesehen sein, falls gewünscht.
-
Die
IQ#PR#-Steuereinheit 132 weist Instruktions-Warteschlangen-Nummern
beginnend mit dem Tail-Pointer einer der Instruktions-Warteschlangen 36A-36B zu.
Anders ausgedrückt
empfängt
das erste ROP in der Reihe den Tail-Pointer der gewählten Instruktions-Warteschlange
als IQ#, und weitere ROPs empfangen IQ#s in ansteigender Reihenfolge
von dem Tail-Pointer. Die Steuereinheit 132 weist jedes der
ROPs in der Reihe der gleichen Instruktions-Warteschlange 36A-36B zu
und weist die nächste
Reihe von ROPs der anderen Instruktions-Warteschlange 36A-36B zu.
Die Steuereinheit 132 übermittelt
einen Hinweis auf die Anzahl von ROP, die der Instruktions-Warteschlange 36A-36B zugewiesen
worden sind, über
den ROP-Zu weisungs-Bus 70B (einen Teil des Tail-Pointer-Steuerbusses 70 gemäß 2).
Die Empfangs-Instruktions-Warteschlange kann dadurch ihren Tail-Pointer
derart aktualisieren, dass er die Zuweisung der ROPs zu dieser Warteschlange
reflektiert.
-
Die
Steuereinheit 132 empfängt
auf dem nächsten
freien PR#-Bus 146 ein Set freier PR#s aus der Frei-Listen-Steuereinheit.
Das Set freier PR#s wird den Ziel-Registern in der Reihe von Instruktions-Operationen
zugewiesen. Gemäß einer
Ausführungsform
begrenzt der Prozessor 10 die Anzahl von Logik-Regsister-Updates
in einer Reihe auf vier (d.h. falls die Vorhersage-Fehlgänger-Dekodiereinheit 26 ein
fünftes
Logik-Register-Update erhält,
wird die Reihe bei der vorherigen Instruktion beendet). Somit wählt die
Frei-Listen-Steuereinheit vier PR#s aus der Frei-Liste und übermittelt
die gewählten
Register auf dem nächstem
freien PR-Bus 146 an die Steuereinheit 132. Bei
weiteren Ausführungsformen
können andere
Grenzwerte von Updates in einer Reihe verwendet werden, einschließlich keines
Grenzwerts (d.h. jedes ROP kann aktualisieren).
-
Die
Frei-Listen-Steuereinheit handhabt das Befreien der physischen Register
und wählt
Register zur Zuweisung an nachfolgende Instruktionen aus. Die Frei-Listen-Steuereinheit
empfängt
die vorherigen Physisch-Register-Nummern, die aus dem architekturellen
Neubenennungs-Block 34 heraus präsentiert werden, der auch die
vorherigen Physisch-Register-Nummern gegen das aktualisierte Set
von architekturellen Neubenennungen kämmt. Jede vorherige PR#, für die eine
entsprechende Kämmungs-Anpassung
nicht detektiert wird, wird der freien Liste hinzugefügt.
-
Die
Virtuell-Physisch-Register-Abbildungseinheit 136 übermittelt
die PR# und IQ# des entsprechenden Logik-Registers gemäß der Anzeige
durch den Lookahead-Register-Zustand für jedes Quell-Register, das
eine Virtuell-Register-Nummer hat,
die anzeigt, dass der Ausgangspunkt der PR# der Lookahead-Register-Zustand
ist. Quell-Register, für
die die Virtuell-Register-Nummer eine vorherige Gegenstands-Nummer
anzeigt, werden mit der entsprechenden PR# und IQ# zugeführt, die
von der Steuereinheit 132 zugewiesen werden. Ferner aktualisiert
die Virtuell-Physisch-Register-Abbildungseinheit 136 den
Lookahead-Register-Zustand entsprechend den logischen Ziel-Registern,
die von der Reihe von ROPs spezifiziert werden, und die von der Steuereinheit 132 zugewiesenen
PR#sIQ#s.
-
Die
Virtuell-Physisch-Register-Abbildungseinheit 136 ist ferner
konfiguriert zum Empfangen eines Rückgewinnungs-Lookahead-Register-Zustands,
der von dem Abbildungs-Silo 32 auf einen Ausnahmezustand
hin vorgelegt wird. Die Virtuell-Physisch-Register-Abbildungseinheit 136 kann den
nächsten
Lookahead-Register-Zustand, der gemäß den Eingangssignalen aus
der Register-Abtasteinheit 136 und der IQ#PR#-Steuereinheit 132 generiert
wird, durch Priorität
seitens des vom Abbildungs-Silo 32 gelieferten Rückgewinnungs-Lookahead-Zustand
unwirksam machen.
-
Anzumerken
ist, dass bei der vorliegenden Ausführungsform IQ#s für jeden
Quell-Operanden erzeugt werden, um anzuzeigen, von welchen Instruktions-Warteschlangen-Einträge das entsprechende
ROP abhängig
ist. Die Instruktions-Warteschlangen 36A-36B warten
auf den Abschluss der ROPs in den entsprechenden Instruktions-Warteschlangen-Einträgen, bevor
sie das abhängige
ROP zur Ausführung
einplanen.
-
Die
nun zu erläuternde 8 zeigt
ein Flussdiagramm zur Veranschaulichung der Arbeitsweise einer Ausführungsform
einer Abhängigkeitsvektor-Erzeugungseinheit 134.
Weitere Ausführungsformen
sind möglich
und vorgesehen. Obwohl in 8 die Schritte
zur Erleichterung des Verständnisses
in einer bestimmten Reihenfolge gezeigt sind, kann jede beliebige
Reihenfolge geeignet sein. Ferner können in der kombinatorischen
Logik innerhalb der Abhängigkeitsvektor-Erzeugungseinheit 134 verschiedene
Schritte parallel ausgeführt
werden.
-
Die
Abhängigkeitsvektor-Erzeugungseinheit 134 bestimmt,
ob eine oder mehrere Speicher-Adress-IQ#s aus den Instruktions-Warteschlangen 36A- 36B empfangen
werden (Entscheidungs-Block 160). Falls eine Speicher-Adress-IQ# empfangen
wird, löscht
die Abhängigkeitsvektor-Erzeugungseinheit 134 den
entsprechenden Abhängigkeits-Hinweis
in dem Speicheradress-Abhängigkeitsvektor
(Schritt 162). Beispielsweise wird bei einer Ausführungsform,
bei welcher der Abhängigkeitsvektor
für jede
IQ# ein Bit aufweist, das eine Abhängigkeit angibt, wenn es gesetzt
ist, das der empfangenen IQ# entsprechende Bit rückgesetzt (oder gelöscht).
-
Die
Abhängigkeitsvektor-Erzeugungseinheit 134 erstellt
einen Intraline-Speicheradress-Abhängigkeitsvektor
(Schritt 164). Der Intraline-Speicheradress-Abhängigkeitsvektor
zeichnet Abhängigkeits-Hinweise
für jedes
Speicher-Adress-ROP in der Reihe von ROPs auf, die von der Abhängigkeitsvektor-Erzeugungseinheit 134 verarbeitet
werden. Die Abhängigkeitsvektor-Erzeugungseinheit 134 erstellt für jedes
ROP in der Reihe von ROPs einen Abhängigkeitsvektor (d.h. einen
entsprechenden Abhängigkeitsvektor
für jede
Gegenstands-Position mit gültigem
ROP). Das Erstellen eines Abhängigkeitsvektors
für eine
bestimmte Gegenstands-Position entsprechend einer Ausführungsform
der Abhängigkeitsvektor-Erzeugungseinheit 134 ist
in der folgenden 9 gezeigt. Schließlich fügt die Abhängigkeitsvektor-Erzeugungseinheit 134 den
im Speicheradress-Register 138 gespeicherten Speicheradress-Abhängigkeitsvektor
mit dem Intraline-Speicheradress-Abhängigkeitsvektor zusammen und
aktualisiert das Speicheradress-Register 138 mit dem Resultat
(Schritt 168).
-
In
der nun zu erläuternden 9 ist
ein Flussdiagramm zur Veranschaulichung des Erstellens eines Abhängigkeitsvektors
für ein
ROP gemäß einer
Ausführungsform
der Abhängigkeitsvektor-Erzeugungseinheit 134 gezeigt
(d.h. für
den Schritt 166 gemäß 8).
Die in 9 gezeigten Schritte können für jedes ROP in der Reihe durchgeführt werden. Weitere
Ausführungsformen
sind möglich
und vorgesehen. Obwohl die Schritte in 8 um des
leichteren Verständnisses
willen in einer bestimmten Reihenfolge gezeigt sind, kann jede beliebige
Reihenfolge geeignet sein. Ferner können in der kombinatorischen
Logik innerhalb der Abhängigkeitsvektor-Erzeugungseinheit 134 verschiedene
Schritte parallel ausgeführt
werden.
-
Die
Abhängigkeitsvektor-Erzeugungseinheit 134 bestimmt,
ob das ROP, für
das der Abhängigkeitsvektor
gerade erstellt wird, ein Lade-ROP ist (Entscheidungs-Block 170).
Wie bereits erwähnt
wird der Typ jedes ROP in der Reihe von der Dekodiereinheit 24 an
die Abhängigkeitsvektor-Erzeugungseinheit 134 übermittelt,
woraus die Abhängigkeitsvektor-Erzeugungseinheit 134 bestimmen
kann, welche ROPs Lade-ROPs sind. Falls das ROP ein Lade-ROP ist, maskiert
die Abhängigkeitsvektor-Erzeugungseinheit 134 den
Intraline-Speicheradress-Abhängigkeitsvektor
zu den Gegenstands-Positionen vor dem Lade-ROP und zeichnet die
maskierten Hinweise in dem Abhängigkeitsvektor
auf (Schritt 172). Anders ausgedrückt werden die Abhängigkeits-Hinweise,
die Speicher-Adress-ROPs vor dem Lade-ROP in der Leitung entsprechen,
in den Abhängigkeitsvektor
einbezogen, wobei die Abhängigkeits-Hinweise,
die Speicher-Adress-ROPs nach dem Lade-ROP entsprechen, nicht einbezogen
werden. Die Abhängigkeits-Hinweise,
die Speicher-Adress-ROPs
nach dem Lade-ROP entsprechen, werden wegmaskiert, da keine Abhängigkeit von
den nachfolgenden Speicher-Adress-ROPs für das Lade-ROP vermerkt werden
soll.
-
Ferner
wird der in dem Speicher-Adress-Register 138 gespeicherte
Speicheradress-Abhängigkeitsvektor
in dem Abhängigkeitsvektor
aufgezeichnet, falls das ROP eine Lade-ROP ist (Schritt 174). Weiterhin
wird, falls eine Lade-Treffer-Speicher-Daten-Situation von der Speicher-/Lade-Vorwärts-Detektionseinheit 148 vorausgesagt
wird, eine Abhängigkeit
von dem vorhergesagten Speicher-Daten-ROP aufgezeichnet (Schritt 176).
-
Für jedes
ROP werden Abhängigkeiten
von den durch die Virtuell-/Physisch-Register-Abbildungseinheit 136 erstellten
Ausgangs-IQ#s aufgezeichnet (Schritt 178). Anzumerken ist,
dass bei dieser Ausführungsform
jeder Abhängigkeitsvektor
für jede
IQ# ein Bit aufweist, das, wenn es gesetzt ist, eine Abhängigkeit
von dem dieser IQ# zugewiesenen ROP anzeigt und, wenn es frei ist,
ein Nichtvorhandensein einer Abhängigkeit
von dieser IQ# anzeigt. Folglich kann das Aufzeichnen von Abhängigkeiten von
verschiedenen Quellen eine OR-Behandlung der Abhängigkeitsvektor von den verschiedenen
Quellen umfassen. Alternativ kann jede Quelle einer Abhängigkeit
anzeigen, welche Bits in dem Abhängigkeitsvektor
gesetzt werden sollen.
-
Die
nun zu erläuternde 10 zeigt
ein Zeitsteuerungsdiagramm zur Veranschaulichung der Arbeitsweise
der Instruktions-Warteschlangen 36A-36B. Phasen
der Taktzyklen sind durch vertikale unterbrochene Linien abgetrennt.
Jede Phase und jeder Taktzyklus sind durch Angaben an der Oberseite des
begrenzten Bereichs bezeichnet. Das Zeitsteuerungsdiagramm gemäß 10 stellt
die Zeitsteuerung eines als abgeschlossen bezeichneten ROP (derart,
dass abhängige
ROPs geplant werden können) über die
Aktivierung der Schreib-Gültig-Leitung und
das Planen eines abhängigen
ROP in jeder Instruktions-Warteschlange dar.
-
Während der
PN2-Phase des Taktsignals 0 aktiviert die Auswahl-Logik in der Instruktions-Warteschlange 36A ein
Schreib-Gültig-Signal
für ein
ROP (Bezugszeichen 180). Währen der PN1-Phase des Taktsignals
1 wird ein Planungs-Request-Signal für ein erstes abhängiges ROP
in der zweiten Speichervorrichtung 90B ausgewertet und
aktiviert (unter der Annahme, dass keine anderen Abhängigkeiten
noch aktiv sind – Bezugszeichen 182).
Ferner wird ein Zwischen-Planungs-Request-Signal für ein zweites
abhängiges
ROP in der zweiten Speichervorrichtung 90D ausgewertet
und aktiviert (wiederum unter der Annahme, dass keine anderen Abhängigkeiten
mehr aktiv sind). Die PH1-Halteschaltung 94B hält das aktivierte
Zwischen-Planungs-Request-Signal
(Bezugszeichen 184).
-
Während der
Phase PH2 des Taktsignals 1 plant die Auswahl-Logik in der Instruktions-Warteschlange 36A das
erste abhängige
ROP aus der Instruktions-Warteschlange 36A zur Ausführung ein (Bezugszeichen 186).
Ferner wird das zweite abhängige
ROP in der ersten Speichervorrichtung 90C der Instruktions-Warteschlange 36B ausgewertet,
und das entsprechende Request-Signal wird aktiviert (unter der Annahme,
dass keine anderen Abhängigkeiten
aktiv sind – Bezugszeichen 188).
-
Während der
PH1-Phase des Taktsignals 2 initiiert die Register-Datei 38A ein
Register-Datei-Lesesignal für
die Quell-Operanden des ersten abhängigen ROP. Das Register-Lesesignal
wird in der PN2-Phase des Taktsignals 2 abgeschlossen (Bezugszeichen 190).
Ferner plant während
der PH1-Phase des Taktsignals 2 die Auswahl-Logik in der Instruktions-Warteschlange 36B das
zweite abhängige
ROP zur Ausführung
ein (Bezugszeichen 192). Die Register-Datei 38B initiiert
ein Registerdatei-Lesesignal für
die Quell-Operanden
des zweiten abhängigen
ROP während
der PH2-Phase des Taktsignals 2, wobei das Registerdatei-Lesesignal
während
der PH1-Phase des Taktsignals 3 abgeschlossen wird (Bezugszeichen 194).
Der Ausführungs-Kern 40A initiiert
das Ausführen
des ersten abhängigen
ROP während
der PH1-Phase des Taktsignals 3, wobei die Ausführung während der PH2-Phase des Taktsignals
3 abgeschlossen wird (Bezugszeichen 196). In ähnlicher
Weise initiiert der Ausführungs-Kern 40B die
Ausführung
des abhängigen ROP
während
der PH2-Phase des Taktsignals 3 und schließt die Ausführung während der PH1-Phase des Taktsignals
4 ab (Bezugszeichen 198).
-
Durch
Evaluieren der Abhängigkeitsvektoren in
Teilabschnitten (wie in 4 und 10 gezeigt) ist
eine höhere
Betriebsfrequenz erzielbar als wenn der gesamte Abhängigkeitsvektor
gleichzeitig ausgewertet würde.
Während
einer der Abschnitte ausgewertet wird, kann der andere Abschnitt
vorgeladen werden. Die Leistung des Prozessors 10 kann
als Ergebnis der höheren
Frequenz gesteigert werden. Indem die Instruktions-Warteschlange 36A um
1/2 Taktzyklus gegenüber
der Instruktions-Warteschlange 36B versetzt betätigt wird
(und in ähnlicher
Weise die Register-Datei 38A um 1/2 Taktzyklus gegenüber der
Register-Datei 38B versetzt betätigt wird, und der Ausführungs-Kern 40A um
1/2 Taktzyklus gegenüber dem
Ausführungs-Kern 40B versetzt
betätigt
wird), kann die höhere
Frequenz unter Verwendung nur von 1/2 Taktzyklus zum Weiterleiten
des Abschlusses eines ROP zu ei nem in der gegenüberliegenden Warteschlange
gespeicherten abhängigen
ROP realisiert werden. Ferner kann der 1/2-Zeit-Taktzyklus verwendet
werden, um das Ergebnis des ROP an die Register-Datei zu übermitteln,
welche das abhängige
ROP zum Zugriff auf die Ergebnisse liest. Der Gesamt-Instruktions-Durchsatz
kann im Vergleich mit einer Ausführungsform,
bei der ei voller Taktzyklus zur Übermittlung zwischen Warteschlangen
verwendet wird, vergrößert werden.
-
Anzumerken
ist, dass, obwohl bei der vorliegenden Ausführungsform die Instruktions-Warteschlange
physisch in Instruktions-Warteschlangen 36A-36B unterteilt
ist, gemäß weiteren
Ausführungsformen
die Instruktions-Warteschlange
in noch größere Anzahlen
physischer Warteschlangen unterteilt ist, die unabhängig arbeiten
können.
Beispielsweise kann eine Ausführungsform
vorgesehen sein, bei der vier Instruktions-Warteschlangen verwendet
werden (mit vier Register-Dateien und vier Ausführungs-Kernen). Bei der Anzahl
von Instruktions-Warteschlangen kann es sich um jede beliebige Anzahl
handeln. Ferner können
die Auswertungs-Abhängigkeits-Vektoren bei Bedarf
in mehr als zwei Abschnitte unterteilt sein, die in aufeinanderfolgenden
Phasen ausgewertet werden.
-
Die
nun zu erläuternde 11 zeigt
ein Blockschaltbild einer Ausführungsform
eines Computersystems 200 mit einem Prozessor 10,
der über eine
Bus-Brücke
mit verschiedenen System-Komponenten verbunden ist. Weitere Ausführungsformen sind
möglich
und vorgesehen. Bei dem gezeigten System ist ein Haupt-Speicher 204 durch
einen Speicher-Bus 206 mit der Bus-Brücke 202 verbunden, und
ein Graphik-Controller 208 ist durch einen AGP-Bus 210 mit
der Bus-Brücke 202 verbunden. Schließlich sind
mehrere PCI-Vorrichtungen 212A-212B durch einen
PCI-Bus 214 mit der Bus-Brücke 202 verbunden.
Ferner kann eine zweite Bus-Brücke 216 vorgesehen
sein, um ein elektrisches Interface mit einer oder mehreren EISA-
oder ISA-Vorrichtungen 218 durch
einen EISA-/ISA-Bus 220 aufzunehmen. Der Prozessor 10 ist
durch das externe Interface 52 mit der Bus-Brücke 202 verbunden.
-
Die
Bus-Brücke 202 bildet
ein Interface zwischen dem Prozessor 10, dem Haupt-Speicher 204, dem
Graphik-Controller 208 und mit dem PCI-Bus 214 verbundenen
Vorrichtungen. Wenn eine Operation aus einer der mit der Bus-Brücke 202 verbundenen
Vorrichtungen empfangen wird, identifiziert die Bus-Brücke 202 das
Target der Operation (d.h. eine bestimmte Vorrichtung oder, im Fall
des PCI-Busses 214, dass sich das Target an dem PCI-Bus 214 befindet).
Die Bus-Brücke 202 leitet
die Operation zu der als Target vorgesehenen Vorrichtung. Die Bus-Brücke 202 übersetzt
generell eine Operation eine Operation von dem von der Ausgangs-Vorrichtung
oder dem Bus verwendeten Protokoll in das von der Target-Vorrichtung
oder dem Bus verwendeten Protokoll.
-
Zusätzlich dazu,
dass sie ein Interface mit einem ISA-/EISA-Bus für den PCI-Bus 214 bildet,
kann die zweite Bus-Brücke 216 zudem
bei Bedarf weitere Funktionen enthalten. In dem Computersystem 200 kann
zudem ein (nicht gezeigter) Eingangs-/Ausgangs-Controller, der entweder
extern von der zweiten Bus-Brücke 216 ausgebildet
oder in diese integriert ist, enthalten sein, um eine Betriebs-Stützung für eine Tastatur
mit Maus 222 und für
verschiedene serielle und parallele Ports zu leisten, falls dies
gewünscht
ist. Ferner kann bei weiteren Ausführungsformen eine (nicht gezeigte)
externe Cache-Einheit mit dem externen Interface 52 zwischen
dem Prozessor 10 und der Bus-Brücke 202 angeordnet
sein. Alternativ kann der externe Cache mit der Bus-Brücke 202 verbunden
sein, und die Cache-Steuer-Logik für den externen Cache kann in
die Bus-Brücke 202 integriert
sein.
-
Bei
dem Haupt-Speicher 204 handelt es sich um einen Speicher,
in dem Anwenderprogramme gespeichert sind und aus dem heraus der
Prozessor 10 in erster Linie seine Vorgänge ausführt. Ein geeigneter Haupt-Speicher 204 weist
einen DRAM (einen dynamischen Direktzugriffsspeicher) und vorzugsweise mehrere
Gruppen von SDRAMs (synchrone DRAMs) auf.
-
Die
PCI-Vorrichtungen 212A-212B dienen als Beispiele
für verschiedene
Peripherieeinrichtungen wie z.B. Netzwerk-Interface-Karten, Video-Beschleuniger,
Audio-Karten, Hard- oder Floppy-Diskettenlaufwerke oder Laufwerk-Controller, SCSI-
(Small Computer Systems Interface-) Adapter und Telephon-Karten. Ähnlich dient
die ISA-Vorrichtung 218 als Beispiel für verschiedene Typen von Peripherieeinrichtungen,
wie z.B. Modems, eine Sound-Karte und verschiedene Datenerfassungskarten
wie z.B. GPIB- oder Feld-Bus-Interface-Karten.
-
Der
Graphik-Controller 208 ist zum Steuern der Wiedergabe von
Text und Bildern auf dem Display 226 vorgesehen. Bei dem
Graphik-Controller 208 kann es sich um einen typischen
auf dem Gebiet bekannten Graphik-Beschleuniger
zur Wiedergabe dreidimensionaler Datenstrukturen handeln, der effektiv
in den und aus dem Haupt-Speicher 204 geschaltet werden
kann. Somit kann der Graphik-Controller 208 ein Master
eines AGP-Busses 210 sein, indem er einen Zugriff auf ein
Target-Interface in der Bus-Brücke 202 anfordern
und erhalten kann, um dadurch Zugriff auf den Haupt-Speicher 204 zu
erlangen. Ein speziell vorgesehener Graphik-Bus nimmt ein schnelles
Aufrufen von Daten aus dem Haupt-Speicher 204 auf. Für bestimmte
Operationen kann der Graphik-Controller 208 ferner zum
Erzeugen von PCI-Protokoll-Transaktionen auf dem AGP-Bus 210 konfiguriert
sein. Das AGP-Interface der Bus-Brücke 202 kann somit
ein Funktion zum Stützen
sowohl von AGP-Protokoll-Transaktionen als auch von PCI-Protokoll-Target- und Initiator-Transaktionen
aufweisen. Bei dem Display 226 handelt es sich um ein elektronisches
Display, auf dem Bilder oder Texte angezeigt werden können. Ein
geeignetes Display 226 weist eine Kathodenstrahlröhre ("CRT"), eine Flüssigkristallanzeige
("LCD") etc. auf.
-
Es
ist anzumerken, dass, obwohl bei der obigen Beschreibung die AGP-,
PCI- und ISA- oder EISA-Busse als Beispiele verwendet wurden, jede
der Bus-Architekturen wie gewünscht
ersetzt werden kann. Ferner ist anzumerken, dass das Computersystem 200 ein
Mehrfachverarbeitungs-Computersystem mit zusätzlichen Prozessoren sein kann
(z.B. dem Prozessor 10, der als optionale Komponente des
Computersystems 200 gezeigt ist). Der Prozessor 10a kann
dem Prozessor 10 ähnlich
sein. Insbesondere kann der Prozessor 10a eine exakte Kopie des
Prozessors 10 sein. Der Prozessor 10a kann (gemäß 11)
das externe Interface 52 gemeinsam mit dem Prozessor 10 benutzen,
oder er kann über einen
unabhängigen
Bus mit der Bus-Brücke 202 verbunden
sein.