-
Die Erfindung bezieht sich auf Computer
und superskalare Pipeline-Mikroprozessoren. Diese Erfindung bezieht
sich insbesondere auf ein Verfahren und eine Vorrichtung zum Verbessern
der Leistung von Pipeline-Mikroprozessoren.
-
Typische Computersysteme weisen eine Zahl
von üblichen
Komponenten auf. Diese Komponenten, wie in 1 zu sehen, umfassen eine CPU, einen
Bus, einen Speicher und Peripherievorrichtungen. Bei Hochgeschwindigkeitscomputern,
kann die CPU ein superskalarer Pipeline-Mikroprozessor sein. wie
in 2 gezeigt, kann ein
superskalarer Pipeline-Mikroprozessor eine Befehlsabrufeinheit,
mehrere Pipelines und eine zentralisierte Datenabhängigkeitsgefahrerfassungsvorrichtung
umfassen. Die Befehlsabrufeinheit ruft Befehle ab und leitet dieselben zu
einer Pipeline weiter. In der Pipeline fließen die Befehle durch mehrere
Pipelinestufen, wonach die Resultate der Befehle in einen architektonischen
Zustand (d. h. einen Speicher) übergeben
werden.
-
Die Stufen in einem Standard-Pipeline-Mikroprozessor
können
eine Umbenennungsregisteridentifikations- oder Befehlsdecodier-Stufe
("REN"), eine Registerlese-
oder Operandenabruf-Stufe ("REG"), eine erste Befehlsausführungsstufe ("EX1"), eine zweite Befehlsausführungsstufe ("EX2"), und eine Zurückschreibestufe
("WRB") umfassen. Ein Pipeline-Mikroprozessor
führt ein
paralleles Verarbeiten durch, bei dem Befehle auf eine Fließband-Art
ausgeführt
werden. Aufeinanderfolgende Befehle werden in Folge bearbeitet,
es werden jedoch mehrere Befehle eingeleitet, bevor ein erster Befehl
beendet ist. Auf diese Art und Weise bewegen sich Befehle schrittweise
durch jede Stufe einer speziellen Pipeline, ein Befehl pro Stufe
pro Pipeline zu einem Zeitpunkt. Ein erster Befehl wird beispielsweise
abgerufen und dann zu der Stufe REN weitergeleitet. Wenn der erste
Befehl in der Stufe REN beendet ist, d. h. derselbe decodiert ist
und die Registeridentifikation des Befehls ("RegID") von einem virtuellen Raum zu einem
realen Raum umbenannt ist, wird derselbe zu der Stufe REG weitergeleitet,
und ein zweiter Befehl wird abgerufen und zu der Stufe REN weitergeleitet.
Dieses Verfahren fährt
so lange fort, bis jeder Befehl seinen Weg durch jede Stufe der Pipeline
macht. In einigen Situationen, wie im folgenden erörtert, ist
es jedoch notwendig, einen Befehl oder mehrere Befehle in der Pipeline
anzuhalten. Das Anhalten eines Befehls betriffts das Halten des Befehls
in einer Stufe der Pipeline, bis die Situation gelöst und das
Anhalten nicht länger
aktiviert ist.
-
Befehle in Pipeline-Mikroprozessoren
besitzen Erzeuger und Verbraucher. In einem Pipeline-Mikroprozessor
kann ein Befehl in einer früheren
Stufe (z. B. REG) von Daten von einem Befehl (Erzeuger) in einer
späteren
Stufe (z. B. EX1 oder EX2) abhängen
(ein Verbraucher sein). Ein Erzeuger ist ein Befehl, der Daten erzeugt,
wie z. B. einen Addier-Befehl. Ein Zielregister ist ein Register,
in das der Erzeuger die Resultate (die Zieloperanden) des Addierens schreibt.
Es kann ein folgender Addier-Befehl auftreten, der in der Pipeline
früher
ist – früher bedeutet, daß derselbe
ein jüngerer
Befehl in der Programmreihenfolge ist – der die Resultate des ersten
Addier-Befehls aus dem Zielregister (dem Quellregister desselben)
nimmt, und dieselben zu etwas anderem addiert, wobei ein zweites
Resultat erzeugt wird. Daher ist der zweite Addier-Befehl ein Verbraucher
und die Beziehung zwischen dem Verbraucher und dem Erzeuger wird
eine Datenabhängigkeit
genannt. Das Verfahren des Lesens von Daten durch den Verbraucher
aus dem Quellenregister desselben ist als eine Verbraucheroperandenerzeugung
bekannt.
-
Oftmals benötigt ein Befehl mehrere Stufen oder
Zyklen bevor derselbe seinen Betrieb beendet, und die Daten, die
durch den Befehl erzeugt werden, sind verfügbar. Diese Verzögerung oder
Latenz bzw. Wartezeit kann von Befehl zu Befehl variieren, wobei einfache
Befehle eine Stufe (eine Ein-Zyklus-Latenz) und komplexe Befehle
mehrere Stufen (eine Mehr-Zyklus-Latenz)
benötigen.
Wenn ein Erzeuger eine Mehr-Zyklus-Latenz
aufweist, dann sind die Daten desselben für den Verbraucher so lange
nicht verfügbar,
bis sich der Erzeuger zu einer späteren Stufe bewegt und den
Betrieb desselben beendet. Eine solche Situation wird eine Datenabhängigkeitsgefahr genannt,
und wenn ein Codesegment geschrieben wird, wenn der Verbraucher
unmittelbar dem Erzeuger folgt oder andernfalls nicht ausreichend
durch Pipelinestufen von dem Erzeuger getrennt ist, muß die Hardware
die Datenabhängigkeits-Gefahr
erfassen. Bei dieser Situation muß die Hardware den Verbraucher
in einer bestimmten Pipelinestufe so lange anhalten, bis der Erzeuger
seine Daten zur Verfügung
stellen kann.
-
Wie in 2 dargestellt,
weisen herkömmliche
superskalare Pipeline-Entwürfe
eine zentralisierte Datenabhängigkeitsgefahrerfassungsvorrichtung auf,
deren Ausgangssignal ein Anhalte-Signal ist. Dieses Anhalte-Signal
ist ein globales Anhalten, das effektiv den Verbraucher in der EX1-Stufe
hält, der Stufe,
in der der Verbraucher auf die Quellenoperanden desselben wartet,
da das globale Anhalten eintrifft, nachdem sich der Verbraucher
aus der Stufe REG bewegt hat. Das globale Anhalten gilt für alle Pipelines
und alle Stufen vor und einschließlich der Stufe, in der die
Datenabhängigkeitsgefahr
erfaßt wird.
Die zentralisierte Datenabhängigkeitsgefahrerfassungsschaltungsanordnung
erfaßt
alle möglichen Verbraucher-Erzeuger-Datenabhängigkeitsgefahren.
Das globale Anhalte-Signal, das erzeugt wird, muß frühere Pipelinestufen durchqueren – um etwas in
der REG-Stufe anzuhalten, muß das
Anhalten alle vorhergehenden Stufen, wie z. B. die Stufe REN, durchqueren. Ähnlicherweise
muß das
globale Anhalte-Signal
die physischen Abmessungen der CPU durchqueren, um sich durch die
Stufen zurück
zu bewegen. Allein die Strecke durch den Chip einer CPU kann relativ
lang sein, und es gibt üblicherweise
eine große
Zahl von Stufen.
-
Dementsprechend kann das Eintreffen
des globalen Anhalte-Signals an einem Punkt in einem Zyklus spät sein,
was eine späte
Kenntnis eines Anhaltens bewirkt. Die resultierende späte Kenntnis wird
vergrößert, wenn
zusätzliche
Pipelines hinzugefügt
werden, da eine nichtlineare Zunahme der Logikmenge benötigt wird,
um das globale Anhalten zu erzeugen, sowie die Anzahl der Pipelines
erhöht
wird. Diese nichtlineare Berechnung ist eine Funktion der Zahl der
Quellenoperanden entlang der Breite oder Zahl der Pipelines entlang
der Tiefe der Pipelines (oder Zahl der Stufen). Folglich ist eine
schnellere Schaltungsanordnung bei dem globalen Anhalten erforderlich,
um bei den beabsichtigten Frequenzen zu arbeiten. Diese Schaltungsanordnung
kann die gesamte CPU-Betriebsfrequenz begrenzen.
-
Ein weiteres Problem bei dem späten Eintreffen
des globalen Anhaltens besteht darin, daß dasselbe eine vollständige Neuberechnung
der Datenweiterleitungsarchitektur, einschließlich eines erneuten Registerdateilesens,
notwendig macht, um korrekte Operandendaten sicherzustellen. Wenn
sich die Verbraucherbefehle Y1 und Y2 in der Stufe REG befinden,
wenn eine Datenabhängigkeitsgefahr
für einen
Operanden von Y1 auftritt, kann das globale Anhalten nicht eintreffen
oder aktiviert sein, bis sich Y1 und Y2 bereits in einer späteren Stufe,
wie z. B. der Stufe EX1, befinden. Da eine Datenabhängigkeitsgefahr
für einen
Operanden von Y1 auftrat, als sich Y1 in der Stufe REG befand, und
Y1 zu der Stufe EX1 weitergeleitet wurde, bevor das globale Anhalten
eintraf (d. h. bevor der Erzeugerbefehl seine Berechnung beendet
hat und seine Daten für
Y1 zur Verfügung
gestellt hat), sind die Daten in Y1 inkorrekt. Y1 wird die korrekten
Daten von dem Erzeuger derselben über die Datenweiterleitungsarchitektur empfangen,
wenn die Erzeugerdaten verfügbar
sind.
-
Da keine Datenabhängigkeitsgefahr für Y2 auftritt,
sind die Daten für
Y2 korrekt. Da jedoch das globale Anhalten weder anzeigt in welcher
Pipeline noch für
welchen Befehl in REG die Datenabhängigkeitsgefahr auftritt, müssen die
Operandendaten für jeden
Befehl, der zu der Stufe EX1 weitergeleitet wird, während jedes
Zyklus des globalen Anhaltens neu gelesen werden, um korrekte Daten
sicherzustellen. Folglich muß trotz
der Tatsache, daß Y2
die korrekten Daten, während
es sich in REG befunden hat, gelesen hat, Y2 das Register erneut
lesen und während
jedes Zyklus des Anhaltens neu berechnen.
-
Das erneute Lesen ist hinsichtlich
dessen problematisch, daß es
mehrere Quellenregister in jeder Pipeline gibt. Wenn es daher 6
Ausführungspipelines
und 2 Quellenoperanden pro Befehl gibt, gibt es eine Gesamtzahl
von 12 unterschiedlichen Registerwerten, die aus der Registerdatei
gelesen werden müssen.
Diese Registerwerte werden so lange verwendet, bis es ein Datenweiterleiten
von einem Erzeuger in einer späteren
Stufe der Pipeline gibt. Wie im vorhergehenden erörtert, wird
das Datenweiterleiten für
den Verbraucher mit der Datenabhängigkeitsgefahr
durchgeführt.
Die Datenweiterleitungsarchitektur führt die notwendigen Berechnungen
durch, um die Daten weiter zu leiten, die durch Erzeugerbefehle
erzeugt werden. Wenn ein Erzeuger unterwegs ist, hat derselbe noch
nicht zu der Registerdatei geschrieben, und ein Verbraucher kann
direkt aus dem Erzeuger lesen, wenn die Daten desselben verfügbar sind.
Wenn sich jedoch der Verbraucher zu einer späteren Stufe bewegt, wenn eine
Datenabhängigkeitsgefahr
auftritt, muß die
Datenweiterleitungsarchitektur die Berechnungen, die notwendig sind,
um die Daten weiter zu leiten, basierend auf der neuen Position
des Verbrauchers neu berechnen.
-
Zusammenfassung ausgedrückt ist
das erneute Lesen der Registerdateien und das Neuberechnen der Datenweiterleitungsarchitektur
Zeit- und Ressourcen-verbrauchend. Diese Erfordernis beschränkt die
Leistung eines superskalaren Pipeline-Mikroprozessors und kann es
erschweren, daß die
gesamte CPU bei den gewünschten
Betriebsfrequenzen arbeitet bzw. be trieben wird.
-
Aus der
US 5,778,248 A sind Verfahren
und Vorrichtungen zum Bestimmen von Datenabhängigkeiten und parallelen Freigeben
einer Umgehungslogik bekannt. Insbesondere vergleicht eine gegebene Stufe
in einer gegebenen Ausführungseinheit
ihr Bestimmungsregister mit dem Bestimmungsregister der Anfangsstufe
in jeder Ausführungseinheit
und kombiniert das Ergebnis des Vergleichs mit den weitergeleiteten
Ergebnissen der vorhergehenden Stufen in der gegebenen Ausführungseinheit.
Die anderen Stufen werden nicht überprüft, da dies
durch eine vergleichbare Überprüfungslogik
in vorherigen Stufen abgedeckt ist, wobei die Ergebnisse jeweils
zu den nachfolgenden Stufen weitergeleitet werden.
-
Aus der
US 5,524,263 A sind Verfahren
und Vorrichtungen zum Handhaben einer Betriebsmittelzuweisung während Prozessor-Halte-Bedingungen beschrieben.
Die Ausgabe neuer Befehle wird als ein Ergebnis verschiedener Anhalte-Bedingungen
eingefroren. Eine Anhalte-Bedingung (vollständiges Anhalten) findet statt,
wenn ein zugeteiltes Pufferbetriebsmittel voll wird. Eine weitere
Anhalte-Bedingung (partielles Anhalten) wird ansprechend auf eine
partielle Registerbreiten-Datenabhängigkeit zwischen Befehlen
eines gegebenen Satzes von Befehlen aktiviert.
-
Die
EP 0 654 737 A1 beschreibt Verfahren und
Vorrichtungen zum Steuern von Befehlswiederholungen. Eine Befehlswiederholunssteuerung
zur Verwendung mit einem Prozessor, der ein Programm unter Pipeline-Steuerung
ausführt, übersetzt
einen Befehl, der in dem Programm enthalten ist, in Befehle in einer
verarbeitbaren Form und erledigt die Verarbeitung auf einer Befehlsbasis.
Die Befehlswiederholungssteuerung bestimmt, ob ein Fehler während der Ausführung des
Befehls stattfindet, ob ein Operandenwert ein normaler Wert ist
oder nicht, und führt, wenn
der Operandenwert der normale Wert ist, eine Befehlswiederholung
durch Anhalten des Eingehens eines nächsten Befehls durch. Die Wiederholungssteu erung
setzt die Verarbeitung durch Wiederaufnehmen der Eingabe des nächsten Befehls
fort, wenn die Befehlswiederholung normal beendet wird. Wenn erneut
der Fehler in der Mitte der Befehlswiederholung auftritt, entscheidet
die Wiederholungssteuerung, daß der
Befehl nicht ausführbar
ist und setzt ein Verwaltungssystem vom Auftreten des Fehlers in
Kenntnis.
-
Schließlich offenbart die
EP 0 779 577 A2 einen
Pipeline-Prozessor
mit einer Mehrzahl von Ausführungspipelines,
von denen jede eine Mehrzahl von Stufen aufweist, in denen Befehle,
die in eine Pipeline erteilt werden, verarbeitet werden, um dadurch
den Prozessorzustand zu ändern.
Eine Befehlserteilungseinrichtung zum Erteilen von Befehlen in die
mehreren Pipelines ohne Rücksicht
auf Datenabhängigkeiten
zwischen solchen erteilten Befehlen ist vorgesehen. Ferner umfaßt der Prozessor
eine Pipeline-Steuereinrichtung zum Überwachen von Datenabhängigkeiten
zwischen Befehlen in mehreren Pipelines. Die Pipeline-Steuereinrichtung
steuert den Befehlsfluß durch
die Stufe der Pipelines derart, daß ein erster Befehl in einer
ersten Stufe einer Pipeline aufgrund einer Datenabhängigkeit
von einem zweiten Befehl in einer anderen Pipeline nicht verzögert wird,
es sei denn, die Datenabhängigkeit
muß für eine ordnungsgemäße Verarbeitung
des ersten Befehls in der gegenwärtigen
Stufe aufgelöst
werden.
-
Die Aufgabe der vorliegenden Erfindung
besteht darin, ein Verfahren und eine Vorrichtung zu schaffen, die
es ermöglichen,
ein erneutes Lesen einer Registerdatei in einer Pipeline mit mehreren
Stufen eines Pipeline-Systems mit einer Mehrzahl von Pipelines zu
verhindern.
-
Diese Aufgabe wird durch ein Verfahren
gemäß Anspruch
1 und eine Vorrichtung gemäß Anspruch
11 gelöst.
-
Die vorliegende Erfindung ist ein
Verfahren und eine Vorrichtung, die eine lokalisierte und vereinfachte
Version des globalen Anhaltens ("ein
lokales Anhalten")
erzeugen und das lokale Anhalten verwenden, um den Betrieb eines
Pipeline-Mikroprozessors zu verbessern. Die Erfindung positioniert
die vereinfachte Datenabhängigkeitsgefahrerfassung näher zu der
Verbraucheroperandenerzeugung als die zentralisierte Datenabhängigkeitsgefahrerfassung,
wodurch die inhärenten
Probleme in der zentralisierten Datenabhängigkeitsgefahrerfassung, die oben
erörtert
sind, überwunden
werden. Die vereinfachte Datenabhängigkeitsgefahrerfassung verwendet
die existierende Schaltungsanordnung von einer Datenweiterleitungsarchitektur
erneut, um ein lokales Anhalten zu erzeugen. Dementsprechend kann
die vereinfachte Datenabhängigkeitsgefahrerfassung ein
lokales Anhalten mit einer sehr begrenzten Zunahme an Logik durch
erneutes Verwenden der Datenweiterleitungsschaltungsanordnung erzeugen.
-
Bei der vorliegenden Erfindung wird
das lokale Anhalten verwendet, um die Notwendigkeit eines erneuten
Registerlesens zu vermeiden. Die Registeradresse oder RegID für den (die)
Quellenoperanden eines Befehls wird für eine Stufe REN angewendet
und während
der Stufe REN erfaßt.
Die RegID zeigt die Position (oder die Adresse) der Quellenoperandendaten
in der Registerdatei. Die RegID wird während der Stufe REG verwendet,
um die Quellenoperandendaten aus der Registerdatei zu lesen, was
die Daten für
den Befehl während
der Stufe REG zur Verfügung
stellt. Mit einer vereinfachten Datenabhängigkeitsgefahrerfassung, wenn
kein lokales Anhalten aktiviert ist, ist bekannt, daß die Quellenoperandendaten
für den
Befehl in der Stufe REG einer lokalen Pipeline korrekt sind. Dementsprechend
wird der Befehl in der Stufe REG einer lokalen Pipeline zu der nächsten Stufe,
EX1, weitergeleitet und gemäß dem globalen
Anhalten gehalten, das in dem nächsten
Zyklus eintrifft. Da die fehlende Aktivierung eines lokalen Anhaltens
anzeigt, daß die
Quellenoperandendaten korrekt sind, ist ein Vorrang des globalen Anhaltens
nicht angezeigt, und die Notwendigkeit für ein erneutes Lesen des Registers
wird vermieden, und die Gesamtleistung und die Frequenz der CPU werden
verbessert.
-
Wenn ein lokales Anhalten aktiviert
ist, ist bekannt, daß die
Quellenoperandendaten für
den Befehl in der Stufe REG inkorrekt sind und dieselben werden
gelöscht.
Wenn dementsprechend die Erzeugerdaten verfügbar werden, was der erste
Zyklus sein wird, in dem das lokale Anhalten in REG deaktiviert
ist, wird der Quellenoperand für
den Befehl in der Stufe REG mit diesen korrekten Daten aktualisiert
und dann entsprechend dem globalen Anhalten, das in dem nächsten Zyklus
eintrifft, gehalten. Dementsprechend wird eine Neuberechnung der
Datenweiterleitungsarchitektur vermieden und die Gesamtleistung
und die Frequenz der CPU werden verbessert.
-
Bevorzugte Ausführungsbeispiele der vorliegenden
Erfindung werden nachfolgend unter Bezugnahme auf die beigefügten Zeichnungen
näher erläutert. Es
zeigen:
-
1 ein
Blockdiagramm eines Computersystems;
-
2 ein
Blockdiagramm eines bekannten superskalaren Pipeline-Mikroprozessors;
-
3 ein
Blockdiagramm eines superskalaren Pipeline-Mikroprozessors mit einer
vereinfachten Datenabhän gigkeitsgefahrerfassung;
-
4 ein
logisches Schaltungsdiagramm der vereinfachten Datenabhängigkeitsgefahrerfassung;
-
5 ein
logisches Schaltungsdiagramm einer alternativen vereinfachten Datenabhängigkeitsgefahrerfassung;
-
6 ein
logisches Schaltungsdiagramm einer weiteren vereinfachten Datenabhängigkeitsgefahrerfassung;
-
7 eine
graphische Darstellung, die den Betrieb des superskalaren Pipeline-Mikroprozessors gemäß der vorliegenden
Erfindung darstellt;
-
8 eine
zweite graphische Darstellung, die den Betrieb des superskalaren
Pipeline-Mikroprozessors gemäß der vorliegenden
Erfindung darstellt;
-
9 eine
dritte graphische Darstellung, die den Betrieb des superskalaren
Pipeline-Mikroprozessors gemäß der vorliegenden
Erfindung darstellt;
-
10 ein
logisches Schaltungsdiagramm eines ersten Abschnitts einer lokalen
Pipeline; und
-
11 ein
logisches Schaltungsdiagramm eines zweiten Abschnitts der lokalen
Pipeline.
-
Die Erfindung ist ein Verfahren und
eine Vorrichtung zum Verwenden eines lokalen Anhaltens, um ein erneutes
Lesen der Registerdatei zu vermeiden. Das lokale Anhalten ist eine
vereinfachte Version des globalen Anhaltens und kann früher als
das globale Anhalten erzeugt werden. Die Erfindung positioniert
die vereinfachte Datenabhängigkeitsgefahrerfassung – die die
Schaltungsanordnung neu verwendet bzw. wieder verwendet, die bei
den Datenweiterleitungsberechnungen beteiligt ist – näher zu der
Verbraucheroperandenerzeugung. Die Erfindung wird am besten verständlich,
indem zunächst
erklärt wird,
wie das lokale Anhalten durch eine vereinfachte Gefahrerfassung
erzeugt wird, und dann detailliert beschrieben wird, wie das lokale
Anhalten verwendet wird, um das erneute Lesen der Registerdatei
zu vermeiden. In der folgenden Beschreibung sind die erörterten
Pipelinestufen REN, REG, EX1, EX2 und WRB, obwohl die Erfindung
mit einer beliebigen Vielfalt von Pipelinestufen und Kombinationen
von Pipelinestufen verwendet werden kann.
-
3 stellt
einen superskalaren Pipeline-Mikroprozessor 10 gemäß der vorliegenden
Erfindung dar. Ähnlich
wie der Mikroprozessor, der in 2 gezeigt
ist, umfaßt
der superskalare Pipeline-Mikroprozessor 10 eine Befehlsabrufeinheit 12,
mehrere Pipelines 14, die eine lokale Pipeline 16 umfassen,
und eine zentralisierte Datenabhängigkeitsgefahrerfassungsvorrichtung 20.
Der superskalare Pipeline-Mikroprozessor 10 umfaßt ferner
eine lokale oder vereinfachte Datenabhängigkeitsgefahrerfassung 22, die
der lokalen Pipeline 16 zugeordnet ist. Die vereinfachte
Datenabhängigkeitsgefahrerfassung 22 erzeugt
ein lokales Anhalten auf einer operandenweisen Basis, das auf eine
Stufe der lokalen Pipeline 16 angewendet wird.
-
4 zeigt
die vereinfachte Datenabhängigkeitsgefahrerfassung 22 detaillierter.
Die vereinfachte Datenabhängigkeitsgefahrerfassung 22 erzeugt das
lokale Anhalten, das durch localReg symbolisiert ist, für die Stufe
REG der lokalen Pipeline 16 durch Durchführen von
operandenspezifischen Berechnungen. Die vereinfachte Datenabhängigkeitsgefahrerfassung 22 kann
modifiziert sein, um das lokale Anhalten auf einer Pipelinebasis
oder Mehrstufenbasis zu erzeugen. Derart modifiziert führt die
vereinfachte Datenabhängigkeitsgefahrerfassung 22 Mehroperandenberechnungen
durch, um das lokale Anhalten zu erzeugen.
-
Die vereinfachte Gefahrerfassung 22 verwendet
Ausgangssignale von Komparatoren 24, 34, um die
Operandenberechnungen durchzuführen. Diese
Komparatoren 24, 34 sind Teil der Datenweiterleitungsarchitektur,
die sich bereits in dem superskalaren Pipeline-Mikroprozessor 10 befindet.
Dies ist durch das Ausgangssignal von den Komparatoren 24, 34 "zu der Datenweiterleitungsarchitektur" gezeigt.
-
Ein erster Komparator 24 weist
als Eingangssignale desselben ein Quellenoperanden-RegID in der
Stufe REG und ein Zieloperanden RegID in der Stufe EX1 auf . Wie
in 4 zu sehen, sind
diese zwei Eingangssignale srcIDOReg bzw. destIDExl. SrcIDOREG identifiziert
das Quellenregister für
einen Verbraucherbefehl in der Stufe REG der lokalen Pipeline 16 und
destIDExl identifiziert das Zielregister für die Erzeugerbefehle in der
Stufe EX1 in mehreren Pipelines.
-
Bei dem gezeigten Beispiel gibt es
sechs (6) Ausführungspipelines
und daher eine Gesamtsumme von 6 Erzeugern in der Stufe EX1 dieser
6 Pipelines. Die "6" auf dem ersten Komparator 24 zeigt, daß der erste
Komparator 24 sechs Drähte
aufweist, die aus demselben kommen, einen Draht für jeden Erzeuger
in jeder Stufe EX1 jeder Pipeline. Dementsprechend führt der
erste Komparator 24 sechs Vergleiche zwischen srcIDOReg
und destIDExl durch, um eine Datenabhängigkeit zwischen dem Verbraucherbefehl
in REG und einen der 6 Erzeugerbefehle in EX1 zu finden. Wenn das
Quellenregister gleich dem Zielregister für einen der 6 Erzeuger ist,
d. h. srcIDOReg und destIDExl stimmen für einen der Erzeuger überein,
dann gibt es eine Datenabhängigkeit und
der Erzeuger ist ein übereinstimmender
Erzeuger. Als ein Resultat aktiviert der erste Komparator 24 ein
Ausgangssignal in dem Draht für
den Erzeuger in EX1, von dem der Verbraucher in REG datenabhängig ist
(d. h. der übereinstimmende
Erzeuger).
-
Die Ausgangssignale des ersten Komparators 24 werden
in ein erstes UND-Gatter 30 eingespeist. Das erste UND-Gatter 30 weist
zwei zusätzliche
Eingangssignale auf. Die anderen zwei Eingangssignale des ersten
UND-Gatters 30 sind ein Signal Gültiger-Erzeuger-in-Ex1, das
durch valpEX1 dargestellt ist, und ein Signal Erzeuger-Daten-nicht-verfügbar, das
durch pdnaExl dargestellt ist. Ein aktiviertes Signal valpEx1 bedeutet,
daß der übereinstimmende
Erzeuger in EX1 gültig
ist, und daß ein
Anhalten erzeugt werden sollte, wenn die anderen Eingangssignale
des ersten UND-Gatters 30 ebenfalls aktiviert sind (d.
h. eine Datenabhängigkeit und
eine Gefahr bestehen). Wenn der übereinstimmende
Erzeuger in EX1 nicht gültig
ist (valpEx1 ist nicht aktiviert), dann wird kein Anhalten basierend
auf der Datenabhängigkeit
von diesem übereinstimmenden
Erzeuger in EX1 erzeugt.
-
Bei einem alternativen Ausführungsbeispiel, das
in 5 gezeigt ist, kann
ferner ein zusätzliches Eingangssignal
zu dem UND-Gatter 30' vorhanden sein.
Dieses Eingangssignal ist QpExl, das ein qualifizierendes Prädikat bzw.
eine bestimmende Aussage für
den übereinstimmenden
Erzeuger in EX1 ist. Wenn das qualifizierende Prädikat aktiviert ist, dann wird
der übereinstimmende
Erzeuger in EX1 normal ausgeführt.
Wenn das qualifizierende Prädikat
nicht aktiviert ist, dann wird der übereinstimmende Erzeuger in
EX1 nicht ausgeführt
und derselbe wird keine Daten erzeugen. Wenn das qualifizierende
Prädikat für einen übereinstimmenden
Erzeuger in EX1 nicht aktiviert ist, dann gibt es kein lokales Anhalten,
das seinetwegen erzeugt wird (da das erste Ausgangssignal des UND-Gatters 30 nicht
aktiviert ist). Dementsprechend ist das qualifizierende Prädikat eine
alternative Art zum Bezeichnen, ob es notwendig ist, ein lokales
Anhalten für
einen gegebenen übereinstimmenden
Erzeuger zu erzeugen.
-
Das Signal Erzeuger-Daten-nicht-verfügbar oder
pdnaEx1 zeigt an, ob es eine Datenabhängigkeitsgefahr für den übereinstimmenden
Erzeuger gibt. Das Signal pdnaEx1 charakterisiert den übereinstimmenden
Erzeuger mit dem Erzeugertyp oder den Attributen des Erzeugers.
Alternativ charakterisiert pdnaEx1 die Beziehung des übereinstimmenden
Erzeugers mit den Attributen des Verbrauchers. Wenn die Daten nicht
von dem übereinstimmenden Erzeuger
verfügbar
sind, dann gibt es eine Datenabhängigkeitsgefahr
für den
Verbraucher.
-
Bestimmte Erzeugerbefehle besitzen
unterschiedliche Latenzen, wie z. B. das Benötigen von einem Zyklus oder
mehreren Zyklen, um zu berechnen. Abhängig von dem Zyklus können die
Resultate eines Befehls mit einer Mehrzykluslatenz nicht verfügbar sein,
während
die Resultate eines Befehls mit einer Einzelzykluslatenz verfügbar sind.
Dementsprechend bestimmt die Charakterisierung die Latenz des Erzeugers
in EX1. Wenn die Latenz und der aktuelle Zyklus derart sind, daß der Befehl
noch nicht berechnet ist, dann stehen die Daten des übereinstimmenden
Erzeugers nicht zur Verfügung,
und pdnaEx1 ist aktiviert. Wenn pdnaEx1 aktiviert ist, und die anderen zwei
Eingangssignale in das erste UND-Gatter 30 für den übereinstimmenden
Erzeuger ebenfalls aktiviert sind, dann gibt es eine Datenabhängigkeitsgefahr
in der Stufe EX1.
-
Die Erzeugung des Signals pdnaEx1
ist implementationsspezifisch. Wenn beispielsweise der übereinstimmende
Erzeuger in EX1 eine Zwei-Zyklus-Latenz besitzt, dann wird pdnaEx1
aktiviert, wenn sich der übereinstimmende
Erzeuger in EX1 befindet, ein pdnaEx2-Signal wird jedoch nicht aktiviert
werden, wenn sich derselbe in EX2 (siehe im folgenden) befindet.
Wenn der übereinstimmende
Erzeuger eine 3-Zyklus-Latenz aufweist, dann wird pdnaEx1 aktiviert,
wenn sich der übereinstimmende Erzeuger
in EX1 befindet, und das Signal pdnaEx2 wird aktiviert, wenn sich
derselbe in EX2 (siehe im folgenden) befindet. Ähnlicherweise wird, wenn der übereinstimmende
Erzeuger eine 4-Zyklus-Latenz aufweist, dann pdnaEx1 aktiviert,
wenn sich der übereinstimmende
Erzeuger in EX1 befindet, pdnaEx2 wird aktiviert, wenn sich derselbe
in EX2 befindet, und ein Signal pdnaWrb wird aktiviert, wenn sich
derselbe in WRB befindet (siehe im folgenden).
-
Als ein spezifisches Beispiel betreffen
einige Implementationen Mehrmedien- ("mmu-")
Befehle, wie es in 5 zu
sehen ist. Das Signal pdnaExl wird durch ODER-Verknüpfen von
zwei Signalen mmusrcReg und mmudstEx1 mit einem ODER-Gatter 32 erzeugt.
Das Signal mmusrcReg wird aktiviert, wenn der Verbraucher ein mmu-Typ-Befehl
in REG ist, d. h. es gibt ei nen mmu-Verbraucher. Das mmudstEx1 ist aktiviert,
wenn der übereinstimmende
Erzeuger ein mmu-Typ-Befehl in EX1 ist, d. h. es gibt einen mmu-Erzeuger.
Der mmu-Typ-Erzeuger-Befehl weist eine 2-Zyklus-Latenz zu einem
weiterem mmu-Typ-Verbraucher-Befehl auf. Wenn daher der übereinstimmende
Erzeuger ein mmu-Erzeuger in EX1 ist, dann gibt es eine Datenabhängigkeitsgefahr, da
ein Verbraucher in REG lediglich eine Stufe hinter der Stufe EX1
ist. Als ein Resultat wird ein lokales Anhalten erzeugt, wenn die
anderen zwei Eingangssignale in das erste UND-Gatter 30 ebenfalls
für den übereinstimmenden
Erzeuger aktiviert sind.
-
Für
den EX2-Abschnitt der vereinfachten Gefahrerfassung 22 in 5 unterscheidet sich die Berechnung
von pdnaEx2. Das Signal pdnaEX2 wird durch UND-Verknüpfen eines
NICHTmmusrcReg und mmudstEX2 miteinander erzeugt. Wie im vorhergehenden
erwähnt
weist ein mmu-Typ-Erzeugerbefehl eine 2-Zyklus-Latenz zu einem weiteren mmu-Typ-Verbraucherbefehl
auf. Wenn jedoch der mmu-Typ-Erzeugerbefehl sich zu EX2 bewegt hat,
ist die 2-Zyklus-Latenz für
einen mmu-Typ-Verbraucherbefehl in REG erfüllt. Folglich wird pdenaEX2
nicht aktiviert, wenn es einen mmu-Typ-Verbraucherbefehl in REG
(NICHT-mmusrcReg ist nicht aktiviert) gibt. Wenn der Verbraucherbefehl
in REG kein mmu-Typ-Befehl ist, d. h. NICHTmmusrcReg ist aktiviert,
dann weist der mmu-Typ-Erzeugerbefehl eine 3-Zyklus-Latenz auf.
Dementsprechend gibt es eine Datenabhängigkeitsgefahr für den Quellenoperanden
in REG und pdnaEX2 ist aktiviert.
-
Zurückkehrend zu 4 weist ein zweiter Komparator 34 als
Eingangssignale desselben den Quellenoperanden in REG und den Zieloperanden
in EX2, srcIDOReg und destIDEX2, auf. wie der oben beschriebene
erste Komparator 24 vergleicht der zweite Komparator 34 das
srcIDOReg mit destIDEX2 für
sechs (6) mögliche
Erzeuger in der Stufe EX2. Wenn eine Datenabhängigkeit vorgefunden wird,
aktiviert der zweite Komparator 34 ein Ausgangssignal in
dem Draht für
den übereinstimmenden
Erzeuger in EX2 zu einem zweiten UND-Gatter 40.
-
Das zweite UND-Gatter 40 umfaßt ein Eingangssignal
Erzeuger-Daten-nicht-verfügbar,
das pdnaEX2-Signal, das oben erwähnt
ist. Das Signal pdnaEX2 führt
die gleiche Funktion wie das pdnaEX1 für das erste UND-Gatter 30 durch,
mit der Ausnahme, daß dasselbe
lediglich den übereinstimmenden Erzeuger
in EX2 betrifft. Wenn dementsprechend die Erzeugerdaten nicht für den übereinstimmenden
Erzeuger in EX2 zur Verfügung
stehen, ist pdnaEX2 aktiviert. In dieser Situation sind beide Eingangssignale in
das zweite UND-Gatter 40 aktiviert. Folglich ist das Ausgangssignal
des zweiten UND-Gatters 40 aktiviert, was eine Datenabhängigkeitsgefahr
in EX2 für diesen
Erzeuger anzeigt.
-
Die Ausgangssignale des ersten UND-Gatters 30 und
des zweiten UND-Gatters 40 sind die Resultate der Operandenberechnung,
das oben beschrieben sind. Diese Ausgangssignale werden miteinander
durch das ODER-Gatter 50 ODER-verknüpft. Da es sechs Pipelines
und daher sechs Erzeuger für
dieses Beispiel gibt, führt
das ODER-Gatter 50 eine ODER-Funktion an den Ausgangssignalen
des ersten UND-Gatters 30 und des zweiten UND-Gatters 40 für jeden
Erzeuger durch. Wenn daher die Resultate der Operandenberechnungen
zeigen, daß es
eine Datenabhängigkeitsgefahr
für einen der
sechs Erzeuger in entweder der Stufe EX1 oder der Stufe EX2 gibt,
wird das Ausgangssignal des ODER-Gatters 50 aktiviert.
Ein aktiviertes Ausgangssignal des ODER-Gatters 50 zeigt,
daß ein
lokales Anhalten für
den Verbraucher in REG erzeugt werden sollte.
-
Vor dem Erzeugen eines lokalen Anhaltens und
des Aktivierens des localReg basierend auf dem aktivierten Ausgangssignal
des ODER-Gatters 50 führt
die vereinfachte Datenabhängigkeitsgefahrerfassung 22 eine
weitere Operation durch. Das Ausgangssignal des ODER-Gatters 50 wird
mit einem gültigen
Verbraucher in dem REG-Signal valcReg durch ein UND-Gatter 55 UND-verknüpft. Wenn
der Verbraucher in REG nicht gültig
ist, ist das valcReg-Signal nicht aktiviert, und ein lokales Anhalten wird
für diesen
Verbraucher nicht erzeugt. wenn der Verbraucher in REG gültig ist,
wird jedoch valcReg aktiviert und ein lokales Anhalten wird für diesen
lokalen Verbraucher erzeugt, d. h. localReg wird aktiviert.
-
6 stellt
eine alternative vereinfachte Gefahrerfassung 22' dar. Bei diesem
Ausführungsbeispiel
gibt es drei Eingangssignale in das ODER-Gatter 50'. Das dritte
Eingangssignal ist von einem dritten UND 60, das die übereinstimmenden
Erzeuger in der Zurückschreibestufe
WRB der sechs Pipelines auswertet. Die Erzeuger in der Stufe WRB,
von denen die Verbraucher in der REG datenabhängig sind, können ein
Anhalten verursachen, wenn dieselben 4-Zyklus-Latenz-Befehle sind.
Das Signal pdnaWrb, das oben erwähnt
ist, wird aktiviert, wenn ein 4-Zyklus-Latenz-Erzeuger in WRB mit
dem Verbraucher in REG übereinstimmt
(d. h. der Verbraucher in REG ist von dem Erzeuger in WRB datenabhängig). Anderenfalls
werden die Eingangssignale für
das dritte UND 60 auf eine Art und Weise erzeugt, die ähnlich zu
den Eingangssignalen für
das erste UND-Gatter 30 und das zweite UND-Gatter 40 ist,
die oben beschrieben sind.
-
Ein Verfahren, das das lokale Anhalten
verwendet, um ein erneutes Lesen der Registerdatei zu vermeiden,
ist durch 7 dargestellt. 7 ist eine graphische Darstellung,
die den Betrieb eines superskalaren Pipeline-Mikroprozessors 10 gemäß der vorliegenden
Erfindung darstellt. Dieselbe zeigt Befehle in den verschiedenen
Stufen einer Standardpipeline (die andere Pipelines in dem superskalaren Pipeline-Mikroprozessor 10 ohne
eine vereinfachte Datenabhängigkeitsgefahrerfassung 22 darstellt) und
der lokalen Pipeline 16 über fünf Taktzyklen (0-4).
Die Stufen umfassen REN, REG, EX1, EX2 und WRB in sowohl der Standardpipeline
als auch der lokalen Pipeline 16. Zusätzlich ist die lokale Pipeline 16 eine
Standardpipeline, die gemäß der vorliegenden
Erfindung modifiziert ist, um ein Wiederherstellungs-Latch REC zu
umfassen.
-
Die graphische Darstellung zeigt
ferner die Werte von localReg, localEX1 und stallEX1 in einem gegebenen
Zyklus.
-
Wie im vorhergehenden beschrieben,
ist das localReg das lokale Anhalten in der Stufe REG. Das localEX1
ist das lokale Anhalten in der Stufe EX1 – dies wird beispielsweise
durch Weiterleiten von localReg durch ein stufendes Latch (nicht
gezeigt) durchgeführt,
das dann das lokale Anhalten in der Stufe EX1 zusammen mit jedem
Befehl, der sich in EX1 befindet, ausgibt. StallEX1 ist das zentralisierte
oder globale Anhalten.
-
Wenn die Befehle die Stufe REN der
Standardpipelines erreichen, werden die RegID für den (die) Quellenoperanden
dieses Befehls verwendet, um die Daten für den (die) Quellenoperanden
aus der Registerdatei zu positionieren. Wenn die Befehle die Stufe
REG erreichen, werden Daten für
den (die) Quellenoperanden aus der Position gelesen, die in der
Registerdatei durch RegID spezifiziert ist. Die Registerdatei gehorcht
den Standardpipelineregeln (d. h. dieselbe muß nicht das lokale Anhalten
beobachten). Wenn daher ein globales Anhalten aktiviert ist, wird
die Registerdatei das globale Anhalten und das erneute Zuführen, während der
nächsten
Stufe, des Operanden für
den Befehl, der derzeit in REG ist, beobachten.
-
Dementsprechend zeigt unterhalb der
Befehle in jedem Zyklus die graphische Darstellung den Befehl, dessen
Quellenoperandendaten aus der Registerdatei in der lokalen Pipeline
während
dieses Zyklusses (in der Reihe, die mit "RegFile" bezeichnet ist) gelesen werden. Die
Daten, die aus der Registerdatei gelesen werden, werden normalerweise
in ein Operandenregister gelesen, das in den Befehlsausführungsstufen
(z. B. EX1 und EX2) verwendet werden soll. Wenn jedoch der Befehl
von einem Befehl in einer späteren
Stufe (einem Erzeuger), der unterwegs ist, datenabhängig ist
(ein Verbraucher ist), kann die Datenweiterleitungsarchitektur Quellenoperandendaten
von dem Erzeuger direkt in das Operandenregister weiterleiten. Dementsprechend
zeigt die graphische Darstellung unter der RegFile-Reihe in jedem
Zyklus den Befehl, dessen Quellenoperandendaten in das Operanden register
während
dieses Zyklusses (in der Reihe, die mit "opReg" bezeichnet ist) gelesen werden.
-
In einem Zyklus 0 befinden
sich die Befehle C, B und A in den Stufen REN, REG bzw. EX1 der Standardpipeline
und der lokalen Pipeline 16. Wie es detaillierter im folgenden
erörtert
ist, ist das REC-Latch in der lokalen Pipeline 16 parallel
zu der Stufe REG. Das REC-Latch ist keine zusätzliche Stufe. Dementsprechend
enthält
bei dem Zyklus 0 das REC-Latch den gleichen Befehl wie
die Stufe REG, den Befehl B. In dem Zyklus 0 sind localReg, localEX1
und stallEX1 alle nicht aktiviert, d. h. es gibt kein lokales oder
zentrales Anhalten.
-
Da sich der Befehl C in der Stufe
REN befindet, wird der RegID der Quellenoperandendaten für den Befehl
C durch die Registerdatei in dem Zyklus 0 erfaßt. Ferner
zeigt die RegFile-Reihe, daß die
Quellenoperandendaten für
den Befehl B, der sich in der Stufe REG befindet, aus der Registerdatei
in dem Zyklus 0 gelesen werden. Da localReg nicht aktiviert
ist, ist es bekannt, daß die
Quellenoperanden für
den Befehl B korrekt sind. Ähnlicherweise
zeigt die OpReg-Reihe,
daß die
Quellenoperandendaten des Befehls B in das Operandenregister zur
Verwendung in der (den) Ausführungsstufe(n)
gelesen werden.
-
In einem Zyklus 1 werden
alle Befehle eine Stufe weitergeleitet, und ein neuer Befehl D wird
in die Stufe REN der Standardpipeline und der lokalen Pipeline 16 abgerufen.
Das REC-Latch in der lokalen Pipeline 16 enthält wiederum
den gleichen Befehl wie die Stufe REG, den Befehl C. In dem Zyklus 1 sind
localReg, localEX1 und stallEX1 alle nicht aktiviert, d. h. es gibt
kein lokales oder zentrales Anhalten.
-
Da sich der Befehl D in der Stufe
REN befindet, wird die RegID der Quellenoperandendaten für den Befehl
D durch die Registerdatei in dem Zyklus 1 erfaßt. Da ähnlicherweise
die Quellenoperandendaten-RegID des Befehls C in dem Zyklus 0 erfaßt wurde,
zeigt die RegFile-Reihe, daß die
Quellenoperandendaten für
den Befehl C, der sich in der Stufe REG befindet, aus der Registerdatei
in dem Zyklus 1 gelesen werden. Da localReg nicht aktiviert
ist, ist es bekannt, daß die
Operandendaten für
den Befehl C korrekt sind. Ähnlicherweise
zeigt die OpReg-Reihe, daß die
Quellenoperandendaten des Befehls C in das Operandenregister zur
Verwendung in der (den) Ausführungsstufe(n)
gelesen werden.
-
Bei einem Zyklus 2 werden
die Befehle alle wiederum eine Stufe weitergeleitet, und ein neuer Befehl
E wird in die Stufe REN der Standardpipeline und der lokalen Pipeline 16 abgerufen.
Da der Befehl E in die Stufe REN abgerufen wird, wird die RegID
für die
Quellenoperandendaten für
den Befehl E in einem Zyklus 2 erfaßt. Die RegFile-Reihe zeigt,
daß die
Quellenoperandendaten für
den Befehl D aus der Registerdatei in dem Zyklus 2 gelesen
werden, da die RegID des Befehls D in dem Zyklus 2 erfaßt wurde. Ähnlicherweise
zeigt die OpReg-Reihe, daß die Quellenoperandendaten
des Befehls D in das Operandenregister zur Verwendung in der (den)
Ausführungsstufe(n)
gelesen werden.
-
Weder localReg noch localEX1 sind
aktiviert, ein globales Anhalten stallEX1 ist jedoch in dem Zyklus 2 aktiviert.
Dementsprechend verbleiben die Befehle in beiden Pipelines in den
Stufen, die EX1 vorangehen und EX1 umfassen, in einem Zyklus 3 stationär, während die
Befehle in den späteren
Stufen EX2 und WRB nicht beieinflußt werden und zu der Stufe
EX2 und hinaus aus der Standardpipeline weitergeleitet werden. Wenn
der Befehl A nach außen aus
der Standardpipeline weitergeleitet wird, wird derselbe in den architektonischen
Zustand übergeben.
-
Da es kein lokales Anhalten gibt,
das in dem Zyklus 1 aktiviert wird, gibt es keine Datenabhängigkeitsgefahr
für den
Befehl C in der lokalen Pipeline, und von den Daten, die aus dem
Quellenregister durch den Befehl C in die lokale Pipeline gelesen werden,
ist bekannt, daß dieselben
korrekt sind. Da bekannt ist, daß diese Daten korrekt sind,
ist ein erneutes Lesen für
den Befehl C in dem Zyklus 2 im Gegensatz zum Stand der
Technik nicht notwendig und kann vermieden werden. Folglich werden
die Quellenoperandendaten für
den Befehl C gehalten und es wird kein erneutes Lesen des Quellenregisters
für den
Befehl C durchgeführt.
-
Wie im vorhergehenden erwähnt, befolgt
die Registerdatei Standardpipelineregeln. Dementsprechend gehorcht
die Registerdatei dem globalen Anhalten und der gleiche Befehl D
ist in den RegFile- und Opreg-Reihen in beiden Zyklen 2 und 3 gezeigt, obwohl
die RegID für
den Befehl E in dem Zyklus 2 erhalten wird. Dies stellt
kein erneutes Lesen der Registerdatei für den Befehl D dar, es stellt
jedoch dar, daß kein
erneutes Lesen für
den Befehl C in dem Zyklus C durchgeführt wird.
-
In einem Zyklus 4 verhalten
sich die Standardpipelines und die lokale Pipeline 16 normal,
da es kein aktiviertes lokales oder globales Anhalten gibt. Der
Befehl B wird hinaus aus beiden Pipelines weitergeleitet, die Befehle
C, D und E werden jeweils eine Stufe weitergeleitet, und ein neuer
Befehl F wird in die Stufe REN von beiden Pipelines abgerufen. Der
Befehl E befindet sich ferner in dem REC-Latch in der lokalen Pipeline 16.
-
Ähnlicherweise
werden, da der Befehl E in der Stufe REN in dem Zyklus bleibt, die
Quellenoperandendaten für
den Befehl E aus der Registerdatei in dem Zyklus 4 (wie
es durch E in der RegFile-Reihe gezeigt ist) gelesen. Da sich außerdem die
lokale Pipeline normal verhält,
und es keine lokalen Datenabhängigkeitsgefahren
gibt, werden die Quellenoperandendaten für den Befehl E in das Operandenregister
in dem Zyklus 4 gelesen.
-
Zusammenfassend stellt 7 dar, daß die vorliegende
Erfindung dem erneuten Lesen der Registerdatei begegnet, wenn kein
lokales Anhalten aktiviert ist. In 7 wird
der Be fehl C zu der Stufe EX1 in dem Zyklus 2 weitergeleitet,
da es kein aktiviertes lokales Anhalten in dem Zyklus 1 gibt.
In dem Zyklus 2 wird ein globales Anhalten aktiviert, und
alle Befehle vor der Stufe EX1 und die die Stufe EX1 umfassen, einschließlich des
Befehls C, werden in der lokalen Pipeline gehalten. Da es jedoch
kein aktiviertes lokales Anhalten gibt, ist es bekannt, daß die Daten
für den
Befehl C korrekt sind, und es ist nicht notwendig, die Registerdatei
für den
Befehl C neu zu lesen.
-
Wie im vorhergehenden erörtert, ist
das globale Anhalten eine ODER-Funktion von allen lokalen Anhaltevorgängen, und
wenn das lokale Anhalten, das die lokale Pipeline betrifft, nicht
aktiviert ist, ist das globale Anhalten für den Befehl C in der lokalen Pipeline
weniger wichtig, da die Datenabhängigkeitsgefahr,
die das globale Anhalten verursacht, nicht den Befehl C in der lokalen
Pipeline beeinflußt.
Dies ist der Grund, warum es bekannt ist, daß die Daten in dem Befehl C
in der lokalen Pipeline korrekt sind, trotz des Auftretens eines
globalen Anhaltens, wenn es kein lokales Anhalten gibt.
-
In einer parallelen Standardpipeline,
die kein lokales Anhalten erzeugen kann, ist es jedoch nicht bekannt,
ob die Datenabhängigkeitsgefahr,
die das globale Anhalten verursacht, die Operanden für den Befehl
C beeinflußt.
Folglich ist es unbekannt, ob die Daten für den Befehl C in der parallelen
Standardpipeline korrekt sind oder nicht korrekt sind. Daher muß die Pipeline
annehmen, daß die
Quellenoperandendaten für
den Befehl C inkorrekt sind, und muß die Quellenoperandendaten
neu berechnen, was ein erneutes Lesen der Registerdatei während des
Anstehens des globalen Anhaltens umfaßt, um sicherzustellen, daß dieselben
korrekt sind.
-
8 stellt
das Pipelineverhalten mit einem aktivierten lokalen Anhalten dar.
Bei den ersten zwei Zyklen verhalten sich beide Pipelines wie oben
in 7. Bei dem Zyklus 2,
der als der Fehlübereinstimmungszyklus
bekannt ist, sind die Effekte des lokalen Anhaltens in der Stufe
REG zu sehen. Die Befehle werden alle eine Stufe in der Standardpipeline weitergeleitet,
und ein neuer Befehl E wird in beide Pipelines in der Stufe REN
abgerufen. Aufgrund des in dem Zyklus 1 aktivierten lokalen
Anhaltens werden jedoch lediglich die Befehle A und B in der lokalen Pipeline 16 weitergeleitet.
Diese Fehlübereinstimmung
zwischen der Standardpipeline und der lokalen Pipeline 16 stellt
den Effekt und die Vorteile des lokalen Anhaltens dar.
-
Da die lokale Pipeline 16 für die lokale
Datenabhängigkeitsgefahr
für den
Verbraucher in der REG (Befehl C) und einen übereinstimmenden Erzeuger (beispielsweise
der Befehl A) in Alarmbereitschaft gesetzt ist, weiß dieselbe,
daß die
Daten, die durch den Verbraucher von dem Quellenregister desselben
während
des Zyklus 1 gelesen werden, nicht korrekt sind. Da das
lokale Anhalten in dem Zyklus 1 aktiviert ist, während sich
der Verbraucher noch in der REG befindet, kann die lokale Pipeline 16 den Verbraucher
in der REG halten, um es dem Erzeuger zu ermöglichen, den Betrieb desselben
zu beenden. Dementsprechend wird der Befehl C in der Stufe REG in
dem Zyklus 2 gehalten, währenddessen der übereinstimmende
Erzeuger (beispielsweise der Befehl A) den Betrieb desselben beendet.
Durch Halten des Befehls C in der Stufe REG bis das lokale Anhalten
deaktiviert ist (was anzeigt, daß die Daten des übereinstimmenden
Erzeugers verfügbar
sind), wird die Notwendigkeit des Neuberechnens der Datenweiterleitungsarchitektur
vermieden.
-
Da der Befehl C in der Stufe REG
gehalten wird, und sich der Befehl B nach vorwärts zu der Stufe EX2 bewegt
hat, ist EX1 leer. Da sich ähnlicherweise
der Befehl C noch in der Stufe REG in der lokalen Pipeline befindet,
wobei sich derselbe normalerweise in der EX1 (siehe z. B. die Standardpipeline)
befinden würde,
wird der Befehl D in dem REC-Latch gehalten. Der Befehl D wird in
dem REC-Latch gehalten, das parallel zu der Stufe REG ist, so daß derselbe
nicht verloren geht, wenn der Befehl C in der Stufe REG gehalten
wird. LocalReg ist nun nicht aktiviert, was anzeigt, daß es keine
weiteren lokalen Datenabhängigkeitsgefahren
für den
Verbraucher in der Stufe REG (Befehl C) gibt, und daß der übereinstimmende Erzeuger
für den
Befehl C eine 3-Zyklus-Latenz (daher ein 1-Zyklus-Anhalten aufgrund der Einstufentrennung
des Verbraucherbefehls C, und bei diesem Beispiel, des Übereinstimmenden
Erzeugerbefehls A) aufweist. Dementsprechend sind nun die Daten des übereinstimmenden
Erzeugers verfügbar.
LocalExl ist aktiviert, da sich das lokale Anhalten von REG zu EX1
bewegt hat. Ähnlicherweise
ist nun stallEx1 aktiviert, was das globale Anhalten widerspiegelt, das
als ein Resultat der lokalen Datenabhängigkeitsgefahr erzeugt wird,
die durch die vereinfachte Datenabhängigkeitsgefahrerfassung 22 in
dem Zyklus 1 erfaßt
und aktiviert wird. Daß das
lokale Anhalten nicht bis zu dem Zyklus 2 aktiviert ist
stellt die Verzögerung
dar, die beim Erzeugen eines globalen Anhaltens beteiligt ist, und
unterstreicht die Vorteile des Erzeugens eines lokalen Anhaltens.
-
Da der Befehl E in die Stufe REN
abgerufen wird, wird RegID für
die Quellenoperandendaten für den
Befehl E in dem Zyklus 2 erfaßt. Die RegFile-Reihe zeigt,
daß die
Quellenoperandendaten für
den Befehl D aus der Registerdatei in dem Zyklus 2 gelesen werden.
Dies stellt ferner dar, daß obwohl
der Befehl C in der Stufe REG aufgrund des aktivierten localReg verbleibt,
es kein erneutes Lesen der Registerdatei für den Befehl C gibt. Die Registerdatei
verwendet die RegID der Quellenoperandendaten für den Befehl C nicht erneut,
verwendet jedoch die RegID der Quellenoperandendaten für den Befehl
D, der in dem Zylus 1 erfaßt wurde, als sich der Befehl
D in der Stufe REN befand, da die Registerdatei die Standardpipelineregeln
befolgt (d. h. die Registerdatei muß nicht das lokale Anhalten
beobachten).
-
Tatsächlich werden die Daten, die
aus dem Register für
den Befehl C in dem Zyklus 1 gelesen werden, gelöscht, da
dieselben inkorrekt sind. Anstelle des erneuten Lesens der Registerdatei
für den Befehl
C leitet die Datenweiterlei tungsarchitektur die Quellenoperandendaten
für den
Befehl C von dem Erzeuger (beispielsweise A) direkt zu dem Operandenregister
weiter, da die Daten von dem Erzeuger nun verfügbar sind (siehe oben). Dies
ist durch die OpReg-Reihe gezeigt, die zeigt, daß der Befehl C der Befehl ist,
dessen Quellenoperandendaten in das OpReg in dem Zyklus 2 gelesen
werden.
-
Da jedoch das lokale Anhalten (localReg)
in dem Zyklus 1 aktiviert ist, ist es einen Zyklus früher als
das globale Anhalten bekannt, daß die Daten nicht von dem Erzeuger
für den
Befehl C verfügbar sind,
und daß daher
die Daten, die aus der Registerdatei gelesen werden, gelöscht werden
können.
Da dementsprechend der Befehl C aktualisiert wird, wenn die Daten
des Erzeugers desselben verfügbar sind,
und in dem Zyklus 2 aufgrund des lokalen Anhaltens gehalten
werden, sind die Daten für
den Operanden für
den Befehl korrekt und benötigen
keine weitere Manipulation. Diese Daten werden dann in einem Latch
zwischen REG und EX1 gehalten, bevor dieselben zu EX1 für eine Ausführung in
dem Zyklus 3 (siehe die folgende Erörterung von 11) gesendet werden.
-
In dem Zyklus 3, der als
der Wiederherstellungszyklus bekannt ist, verbleiben alle Befehle
in den Stufen, die EX1 vorhergehen und die EX1 umfassen, aufgrund
des globalen Anhaltens (stallEx1), das in EX1 in dem Zyklus 2 aktiviert
wird, in der Standardpipeline stationär. Da das globale Anhalten
in EX1 aktiviert wird, sind die Befehle in den späteren Stufen
EX2 und WRB nicht beeinflußt
und werden zu der Stufe EX2 und hinaus aus der Standardpipeline weitergeleitet.
Wenn der Befehl A hinaus aus der Standardpipeline weitergeleitet
wird, wird derselbe in einen architektonischen Zustand übergeben.
-
In der lokalen Pipeline 16 wird
das lokale Anhalten jedoch durch localEx1 dominiert, und die Befehle
C und D werden zu der Stufe EX1 und der Stufe REG von der Stufe
REG bzw. dem REC-Latch weitergeleitet. Die Befehls C und D stellen
sich aus dem lokalen Anhalten, das in dem Zyklus 1 aktiviert
wur de, wieder her, und werden zu den folgenden Stufen weitergeleitet. Üblicherweise
ist diese Wiederherstellung ein Verstoß gegen normale Pipelineregeln,
da die Befehle C und D, nachdem ein globales Anhalten aktiviert
wird, weitergeleitet werden, was im Effekt das globale Anhalten
dominiert. Aufgrund des in dem Zyklus 1 aktivierten lokalen
Anhaltens und des Fehlens eines lokalen Anhaltens in dem Zyklus 2 ist
es jedoch bekannt, daß die
Daten, die durch den Befehl C aus dem Quellenregister desselben
gelesen werden, korrekt sind. Folglich kann der Befehl C zu der
nächsten Stufe
EX1 ohne Schaden weitergeleitet werden. Das Weiterleiten der Befehle
C und D zusammen mit dem Weiterleiten der Befehle B und A, die durch
das globale Anhalten stallEx1 unbeeinflußt sind, bringt die lokale
Pipeline 16 wieder in eine Übereinstimmung mit der Standardpipeline.
-
Wie im vorhergehenden mit 7 erörtert ist, ist, obwohl die
RegID für
den Befehl E in dem Zyklus 2 erhalten wird, da die Registerdatei
die Standardpipelineregeln befolgt, der Befehl D dennoch in der
RegFile und dem Opreg in dem Zyklus 3 gezeigt. Dies stellt
kein erneutes Lesen der Operandendaten für den Befehl D dar, sondern
zeigt lediglich den Effekt des globalen Anhaltens auf die Registerdatei.
-
In dem Zyklus 4 verhalten
sich die Standardpipeline und die lokale Pipeline 16 normal
und gleich, da es kein aktiviertes lokales oder globales Anhalten gibt.
Der Befehl B wird hinaus aus beiden Pipelines weitergeleitet, die
Befehle C, D und E werden jeweils eine Stufe weitergeleitet, und
ein neuer Befehl F wird in die Stufe REN von beiden Pipelines abgerufen. Der
Befehl E befindet sich ferner in dem REC-Latch in der lokalen Pipeline 16.
-
Da ähnlicherweise der Befehl E
in der Stufe REN in dem Zyklus 3 verbleibt, werden die
Quellenoperandendaten für
den Befehl E aus der Registerdatei in dem Zyklus 4 (wie
es durch E in der RegFile-Reihe gezeigt ist) gelesen. Da sich außerdem die lokale
Pipeline normal verhält,
und es keine lokalen Datenabhängigkeitsgefahren
gibt, werden die Quellenoperandendaten für den Befehl E in das Operandenregister
in dem Zyklus 4 gelesen.
-
Ein Verfahren, das das lokale Anhalten
verwendet, um die Pipelineleistung zu verbessern, wenn zwei globale
Anhaltevorgänge
aktiviert sind, ist durch 9 dargestellt.
Die Pipelineleistung für
die Zyklen 0, 1, 2 und 3 ist
identisch zu der Pipelineleistung für die Zyklen 0, 1, 2 und 3 in 8, wie im vorhergehenden
beschrieben. Wie in 8 wird
der Befehl C in der Stufe REG während
des Fehlübereinstimmungszyklus
gehalten, und die lokale Pipeline 16 gehorcht wiederum
nicht dem globalen Anhalten, das in dem Zyklus 2 aktiviert
wird, und leitet die Befehle C und D in dem Wiederherstellungszyklus
weiter. Die RegFile- und Opreg-Reihen stellen ferner das Vermeiden eines
erneuten Lesens zum Datenweiterleiten der Erzeugerdaten des Befehls
C in dem Zyklus 2 dar. Ein zweites globales Anhalten wird
jedoch in dem Zyklus 3 aktiviert, und die Befehle in sowohl
der Standardpipeline als auch der lokalen Pipeline 16 verbleiben
in den Stufen, die EX1 vorhergehen und die EX1 umfassen, während des
Zyklus 4 stationär.
Da es kein in dem Zyklus 2 aktiviertes lokales Anhalten
gibt, gehorcht die lokale Pipeline 16 dem zweiten globalen Anhalten,
und es ist bekannt, daß die
Daten, die zu dem Befehl C weitergeleitet werden, korrekt sind (von der
Datenabhängigkeitsgefahr,
die das zweite globale Anhalten verursacht hat, ist bekannt, daß dieselbe nicht
den Befehl C beeinflußt
hat, da das lokale Anhalten für
lediglich einen Zyklus aktiviert wurde). Bis zu dem Zyklus 5 werden
keine normalen Pipelinefunktionen in beiden Pipelines wieder aufgenommen.
-
10 stellt
einen ersten Abschnitt 70 der lokalen Pipeline 16 dar,
der gemäß dem oben
beschriebenen Verfahren unter Bezugnahme auf die 7 bis 9 funktioniert.
Der erste Abschnitt 70 der lokalen Pipeline 16 zeigt
den Abschnitt der Stufe REN bis zu der Stufe REG der lokalen Pipeline 16.
Der erste Abschnitt 70 der lokalen Pipeline 16 weist
drei Haupt komponenten auf, die den Stufen REN und REG zugeordnet
sind: ein erstes Freigabelatch 75, einen Multiplexer 80 und
ein zweites Freigabelatch 85. Das erste Freigabelatch 75,
der Multiplexer 80 und das zweite Freigabelatch 85 weisen
alle ein Takteingangssignal und zusätzliche Eingangssignale auf.
Der Befehl in der Stufe REN wird zu sowohl dem ersten Freigabelatch 75 als
auch dem Multiplexer 80 ausgegeben, während der Befehl in dem zweiten Freigabelatch 85 zu
der Stufe REG ausgegeben wird.
-
Wie im vorhergehenden beschrieben,
ist das erste Freigabelatch 75 (das REC-Latch) parallel
zu der Stufe REG, da dieselben beide das Ausgangssignal der Stufe
REN empfangen. Das erste Freigabelatch 75 (REC) weist ein
Freigabeeingangssignal 76 auf, das, wenn dasselbe aktiviert
ist, bewirkt, daß sich
das erste Freigabelatch 75 (REC) mit dem Befehl in REN
aktualisiert. Wenn das Freigabeeingangssignal 76 nicht
aktiviert ist, hält
das erste Freigabelatch 75 (REC) den derzeitigen Befehl
desselben. Wenn dasselbe den derzeitigen Befehl hält, ist das
Ausgangssiganl des ersten Freigabelatchs 75 (REC) zu dem
Multiplexer 80 dieser gehaltene Befehl.
-
Das Freigabeeingangssignal 76 für das erste Freigabelatch 75 stammt
von einem NICHT-ODER-Gatter 77 von stallEx1 und stallEx2. StallEx1
ist das globale oder zentralisierte Anhalten (Stall), das oben beschrieben
ist und in den 7 bis 9 zu sehen ist. Das stallEx2
ist ein zweites globales oder zentralisiertes Anhalten von einer
anderen Einheit. Das stallEx2 verhindert, daß Befehle zurückschreiben,
da Ausnahmen jetzt noch nicht bestimmt sind. Ausnahmen sind Datenüberläufe, Fehler
und sind ferner als Störungen
bekannt. Die Zurückschreibestufe
WRB kann nicht die Resultate eines Befehls zu dem architektonischen
Zustand bei der Anwesenheit einer Ausnahme übergeben. Daher wird sta11Ex2
aktiviert, wenn ein Ausnahmebefehl in EX2 erfaßt wird, und solange, bis die
Ausnahmen bestimmt und gelöst
sind. Mit 6 Pipelines gibt es 6 Befehle in EX2, wobei jeder
derselben eine Ausnahme aufweisen kann. Das stallEx2 wird verhindern,
daß der
Aus nahmebefehl und jeder jüngere
Befehl in EX2 in den architektonischen Zustand übergeben werden.
-
Da das Freigabeeingangssignal 76 ein NICHT-ODER
ist, wenn entweder stallEx1 oder stallEx2 aktiviert sind, wird dann
das Freigabeeingangssignal 76 nicht aktiviert, und das
erste Freigabelatch 75 (REC) wird den derzeitigen Befehl
desselben halten. Bezugnehmend auf 7 ist
zu sehen, daß dies
die Situation in dem Zyklus 2 ist. StallEx1 wird in dem
Zyklus 2 aktiviert, so daß REC den Befehl D hält und sich
nicht mit dem Befehl E (der sich in REN befindet) in dem Zyklus 3 aktualisiert.
Wenn sowohl stallEx1 als auch stallEx2 nicht aktiviert sind, ist das
Freigabeeingangssignal 76 aktiviert, und das erste Freigabelatch 75 (REC)
wird sich mit dem Befehl von der REN (wie es in den Zyklen 1 und 4 von 7 zu sehen ist) aktualisieren.
-
Der Multiplexer 80 empfängt ein
Eingangssignal von der REN, ein Eingangssignal von dem ersten Freigabelatch 75 und
ein Steuereingangssignal 81. Die "1" und
die "0" an dem Multiplexer 80 zeigen, daß der Multiplexer 80 das
Eingangssignal ausgeben wird, das der "1" entspricht,
wenn das Steuereingangssignal 81 desselben aktiviert ist,
und daß derselbe
das Eingangssignal ausgeben wird, das der "0" entspricht,
wenn das Steuereingangssignal 81 desselben nicht aktiviert
ist.
-
Das Steuereingangssignal 81 für den Multiplexer 80 ist
ein NICHT des Ausgangssignals des NICHT-ODER-Gatters 77 von
stallEx1 und stallEx2. Mit anderen Worten ist das Steuereingangssignal 81 das
NICHT des Freigabeeingangssignals 76. Wenn das Freigabeeingangssignal 76 nicht
aktiviert ist, d. h. stallEx1 und/oder stallEx2 sind aktiviert,
dann ist das Steuereingangssignal 81 für den Mulltiplexer 80 aktiviert.
Folglich wird der Multiplexer 80 das Eingangssignal von
dem ersten Freigabelatch 75 ausgeben. Wenn das Freigabeeingangssignal 76 aktiviert ist,
d. h. stallEx1 und stallEx2 sind nicht aktiviert, ist das Steuereingangssignal 81 nicht
aktiviert, und der Multiplexer wird das Eingangssignal von REN ausgeben.
-
Als ein Beispiel wird auf 7 Bezug genommen. In dem
Zyklus 2 ist stallEx1 aktiviert, so daß das Steuereingangssignal 81 aktiviert
ist. Dementsprechend gibt in dem Zyklus 3 der Multiplexer 80 den
Befehl D aus (der das Eingangssignal von REC ist), der seinerseits
zu REG durch das zweite Freigabelatch 85, wie im folgenden
erörtert,
ausgegeben wird.
-
Das zweite Freigabelatch 85 weist
ein Eingangssignal von dem Multiplexer 80 und ein Freigabeeingangssignal 86 auf.
Wenn das Freigabeeingangssignal aktiviert ist, empfängt das
zweite Freigabelatch 85 den Befehl, der durch den Multiplexer 80 augegeben
wird, und aktualisiert REG mit diesem Befehl. Ähnlicherweise hält, wenn
das Freigabeeingangssignal 86 nicht aktiviert ist, das
zweite Freigabelatch 85 den derzeitigen Befehl desselben
(d. h. der derzeitige Befehl wird in REG gehalten).
-
Das Freigabeeingangssignal 86 für das zweite
Freigabelatch 85 ist ein "NICHT von localReg". Wenn daher localReg in einem ersten
Zyklus aktiviert wird, ist das Freigabeeingangssignal 86 nicht
aktiviert, und das zweite Freigabelatch 85 wird das Ausgangssignal
desselben halten und wird nicht REG in dem nächsten Zyklus aktualisieren.
Bezugnehmend auf 7 wird
in dem Zyklus 1 localReg aktiviert. Daher ist das Freigabeeingangssignal 86 nicht
aktiviert, das zweite Freigabelatch 85 hält den derzeitigen
Befehl C desselben, und REG wird nicht zwischen dem Zyklus 1 und
dem Zyklus 2 aktiviert (der Befehl in REG bleibt der Befehl
C). Durch Halten des Befehls C in REG zwischen den Zyklen 1 und 2 dominiert
localReg das globale Anhalten, da stallEx1 nicht in dem Zyklus 1 aktiviert
ist. Das globale Anhalten wird mißachtet, da die Daten, die
durch den Befehl C aus dem Quellenregister desselben während des
Zyklus 1 gelesen werden, aufgrund einer lokalen Datenabhängigkeitsgefahr,
wie im vorhergehenden beschrieben, inkorrekt sind.
-
Da localReg in dem Zyklus 2 nicht
aktiviert ist, ist das Freigabeeingangssignal 86 aktiviert,
und das zweite Freigabelatch 85 ist aktiviert. Dementsprechend
gibt das zweite Freigabelatch 85 den Befehl D zu REG zwischen
dem Zyklus 2 und dem Zyklus 3 aus, da der Befehl
D das Eingangssignal von dem Multiplexer 80 (siehe oben)
war. Daß localReg nicht
aktiviert ist zeigt wiederum, daß die Daten, die durch den
Befehl C von dem Quellenregister desselben in dem Zyklus 2 gelesen
werden, korrekt sind, und daß dieselben
zu der Stufe EX1, wie im vorhergehenden beschrieben, weitergeleitet
werden können.
Durch Aktualisieren von REG zwischen den Zyklen 2 und 3 gehorcht
die lokale Pipeline wiederum nicht dem globalen Anhalten.
-
Ein zweiter Abschnitt 90 eines
Ausführungsbeispiels
einer lokalen Pipeline 16, der gemäß dem Verfahren, das unter
Bezugnahme auf die 7 bis 9 beschrieben ist, funktioniert,
ist durch 11 dargestellt. 11 zeigt den Abschnitt der
Stufe REG bis zu der Stufe EX1 der lokalen Pipeline 16.
Der zweite Abschnitt 90 weist ein Freigabelatch 95 zwischen
der Stufe REG und der Stufe EX1 auf. Wenn das Freigabelatch 95 freigegeben
ist, wird das Eingangssignal von der Stufe REG zu der Stufe EX1 ausgegeben.
-
Das Freigabeeingangssignal 96 für das Freigabelatch 95 stammt
von einem ODER-Gatter 97 von localEx1 und dem Ausgangssignal
eines NICHT-ODER-Gatters 99 von stallEx1 und stallEx2. Wenn
es kein aktiviertes lokales Anhalten gibt, und ein globales Anhalten
in EX1 aktiviert ist, d. h. localEx1 ist nicht aktiviert und sta11Ex1
ist aktiviert, dann wird das Freigabeeingangssignal 96 für das Freigabelatch 95 nicht
aktiviert sein. Dementsprechend wird der Wert in REG in REG gehalten
und wird nicht zu EX1 ausgegeben. Dies ist die Situtation in dem
Zyklus 2 von 7 oben.
Wie zu sehen, wird dem globalen Anhalten gehorcht, und der Befehl
D wird in REG gehalten. Da es kein lokales Anhalten in REG in dem
Zyklus 1 gibt, ist es jedoch bekannt, daß die Daten
für den
Befehl C, der sich in EX1 befindet, korrekt sind und kein erneutes
Lesen erforderlich ist.
-
Wenn jedoch entweder localEx1 aktiviert
ist oder sowohl stallEx1 als auch stallEx2 nicht aktiviert sind,
dann ist das Freigabeeingangssignal 96 für das Freigabelatch 95 aktiviert,
und das Eingangssignal von der Stufe REG wird zu der Stufe EX1 ausgegeben.
Wenn localEx1 aktiviert ist, und stallEx1 ebenfalls aktiviert ist,
dann wirkt das Freigabelatch 95 vorranging bzw. dominierend
gegenüber
dem globalen Anhalten. Dasselbe bewirkt, daß die lokale Pipeline 16 das
globale Anhalten mißachtet
bzw. dem globalen Anhalten "nicht
gehorcht", wie es
im vorhergehenden erörtert
ist, da das lokale Anhalten in EX1 bedeutet, daß die Daten in REG korrekt
sind (wenn localEx1 aktiviert ist, hat sich das lokale Anhalten
zu EX1 bewegt und ist in REG nicht länger aktiviert). Dies ist die
Situation, die bei dem Übergang
zwischen dem Zyklus 2 und dem Zyklus 3 auftritt,
wie es in 8 gezeigt
ist, da sowohl localEx1 als auch stallEx1 in dem Zyklus 2 aktiviert
sind. Der Befehl C wird von REG zu EX1 durch das Freigabelatch 95 in dem
Zyklus 3 weitergeleitet, obwohl es ein globales Anhalten
in dem Zyklus 2 gibt, und die Pipeline üblicherweise den Befehl C in
REG halten würde.
Indem bewirkt wird, daß das
globale Anhalten ignoriert wird, verbessert daher das lokale Anhalten
die Leistung der lokalen Pipeline 16, indem dasselbe dieselbe
effizienter macht.
-
Bei der vorliegenden Erfindung wird
daher, wenn es ein lokales Anhalten gefolgt von einem globalen Anhalten
gibt, der Befehl in der Stufe REG aktualisiert, wenn die Daten von
dem Erzeuger derselben verfügbar
sind, und dann gemäß dem globalen Anhalten
gehalten. Insbesondere umgeht die Weiterleitungsarchitektur die
Registerdatei mit den Erzeugerdaten, was die Erzeugerdaten direkt
zu dem Operandenregister weiterleitet. Ähnlicherweise wird bei der
vorliegenden Erfindung, wenn es ein globales Anhalten ohne ein lokales
Anhalten gibt, der Befehl in der Stufe REG einfach zu der nächsten Stufe
weitergeleitet und gemäß dem globalen
Anhalten gehalten, da die Daten desselben korrekt sind. In keinem Fall wird
ein erneutes Lesen durchgeführt
oder ist notwendig, da das vorliegende Verfahren sicherstellt, daß die Operandendaten
für den
Befehl korrekt sind.