-
HINTERGRUND DER ERFINDUNG
-
Gebiet der Erfindung
-
Die
vorliegende Erfindung betrifft einen Datenprozessor und insbesondere
einen Mikroprozessor für
einen 32-Bit-Computer mit eingeschränktem Befehlssatz.
-
Beschreibung des Standes
der Technik
-
In
der japanischen Patent-Offenlegungsschrift Nr. 49843/1988, die die
Priorität
der US-Anmeldung mit der Seriennummer 896 156 beansprucht, die von
IBM in den Vereinigten Staaten am 18. August 1986 eingereicht wurde,
ist bereits ein Computer mit eingeschränktem Befehlssatz (im folgenden 'RISC' für Reduced
Instruction Set Computer genannt) beschrieben, der Befehle mit hoher
Geschwindigkeit ausführen
kann.
-
Der
Mikroprozessor für
einen Computer mit komplexem Befehlssatz (im folgenden 'CISC' für Complex
Instruction Set Computer genannt) wird hinsichtlich der Hardware
kompliziert, wenn sich der Hardware-Software-Transfer seiner Funktionen
vergrößert. Demgegenüber ist
ein RISC-Mikroprozessor so aufgebaut, daß er unkomplizierte Funktionen schnell
ausführt.
-
Als
RISC sind auch Rechenmaschinensysteme mit primitivem Befehlssatz
bekannt (im folgenden 'PRISM' genannt), die einen
primitiven Befehlssatz direkt ausführen, wobei die Hardware alle
primitiven Befehle in einem einzigen Maschinenzyklus ausführt.
-
Die
Tendenz geht bei der Mikroprozessorarchitektur allgemein dahin,
CISC zunehmend durch RISC zu ersetzen, da die Leistungssteigerung
durch die Geschwindigkeitszunahme bei letzteren größer ist
als bei ersteren.
-
Bei
neueren Hochleistungs-RISC-Mikroprozessoren werden Befehle mit einer
festen Länge
von 32 Bit verwendet, die in einem einzigen Maschinenzyklus ausgeführt werden.
-
In
der Druckschrift 'IEEE
International Solid-State Circuits Conference DIGEST OF TECHNICAL
PAPERS, Seiten 54-55, 1989' sind
von Intel in den Vereinigten Staaten entwickelte Mikroprozessoren
beschrieben, deren Leistungsfähigkeit
durch Vergrößern der
Bandbreite des Busses verbessert wurde, wobei die Datenbreite an
dem mit dem Speicher verbundenen externen Bus 64 Bit beträgt. Mit
anderen Worten werden vom Mikroprozessor aus dem Speicher über den
externen 64-Bit-Datenbus in einem Zyklus zwei 32-Bit-Befehle abgerufen,
und die beiden Befehle können
gleichzeitig ausgeführt
werden, wenn es ein Ganzzahlbefehl bzw. ein Gleitkommabefehl ist.
Der Ganzzahlbefehl und der Gleitkommabefehl können in einer Ganzzahleinheit
und einer Gleitkommaeinheit parallel ausgeführt werden.
-
Der
in der japanischen Patent-Offenlegungsschrift Nr. 49843/1988 beschriebene
RISC-Prozessor weist die Funktion des gleichzeitigen Ausführens von
zwei Befehlen auf. Dieser Prozessor ist mit einer ersten und einer
zweiten Ausführungseinheit,
einer ersten und einer zweiten Befehlsdekodiereinheit, einem Befehlspuffer
zum Abrufen von Befehlen aus einem Speicher und zum Zuführen der
Befehle zu der ersten und der zweiten Befehlsdekodiereinheit, einer Registerbank
und dergleichen ausgestattet. Bei Erhalt der Ausgangssignale von
der Registerbank können
die erste und die zweite Ausführungseinheit gleichzeitig
Prozesse parallel ausführen.
-
Die
japanische Patent-Offenlegungsschrift Nr. 49843/1988 beschreibt
auch spezielle Zustände, in
denen die beiden parallelen Befehle nicht gleichzeitig ausgeführt werden
können
(weil (1) zum Ausführen
des zweiten der beiden parallelen Befehle das Ergebnis des ersten
Befehls benötigt
wird, (2) die beiden parallelen Befehle zur gleichen Befehlskategorie gehören, (3)
einer der parallelen Befehle mehr Zyklen benötigt als der andere, (4) einer
der parallelen Befehle von beiden Ausführungseinheiten Gebrauch macht,
und weil (5) die beiden parallelen Befehle das gleiche Zielregister
angeben, und wenn es erforderlich ist, durch Löschen eines der Befehle zu
verhindern, daß die
beiden Befehle ungeordnet ausgeführt werden),
sowie Gegenmaßnahmen,
die für
diese Zustände
zu ergreifen sind (im Falle von (1) und (2) durch Ändern des
Codeablaufs in einem Compiler. Da ein RISC-Prozessor nur primitive
Befehle umfaßt und
es nur wenige Befehle gibt, die mehrere Zyklen benötigen, treten
die Fälle
(3) und (4) nur selten auf. Der Zustand (5) sollte durch Hardware
für Ausnahmeprozesse
behandelt werden).
-
Die
Erfinder der vorliegenden Erfindung haben den Stand der Technik
studiert und festgestellt, daß er
einige Nachteile aufweist.
-
Da
die Ganzzahleinheit und die Gleitkommaeinheit durch einen Ganzzahlbefehl
bzw. einen Gleitkommabefehl gesteuert werden, wird sichergestellt, daß in der
in den obigen technischen Druckschriften beschriebenen Architektur
keine Konflikte auftreten. Das Problem ist jedoch, daß die Architektur
nicht bei Systemen angewendet werden kann, in denen gleichzeitig
zwei ganze Zahlen behandelnde arithmetische Befehle ausgeführt werden.
-
Das
in der japanischen Patent-Offenlegungsschrift Nr. 49843/1988 beschriebene
System, das voraussetzt, daß im
Compiler aufwendige Befehlscode-Anordnungsprozesse ausgeführt werden, weist
den Nachteil auf, daß bei
der Erstellung der Software Einschränkungen zu beachten sind.
-
Bei
dem in der genannten Veröffentlichung beschriebenen
System muß,
da der Compiler zur Anordnung der Befehlscodes verwendet wird, ein
für herkömmliche
Hardware zur seriellen Ausführung
einer Anzahl von Befehlen erstelltes Programm in ein Programm für parallel
arbeitende Hardware umgewandelt werden. Der Nachteil ist, daß dieses
Programm nicht mit den herkömmlichen
Programmen kompatibel ist.
-
Im
IBM Technical Disclosure Bulletin, Bd. 23, Nr. 1, Juni 1980, Seiten
409-412 ist eine Technik zum Beschleunigen des Betriebs eines Computers
durch gleichzeitiges Ausführen
von Paaren aufeinanderfolgender, datenunabhängiger Befehle beschrieben.
Es werden zwei Befehlseinheiten verwendet, die sich eine Recheneinheit
teilen.
-
Die
EP-A-0 368 332 beschreibt einen Pipeline-Datenprozessor mit zwei
Befehlsausführungseinheiten.
Eine dieser Einheiten führt
Laden/Speichern-Befehle, Verschiebebefehle und Registerbefehle aus
und die andere Registerbefehle. Wenn zwischen dem Quellenregister
eines zweiten Befehls und dem Zielregister eines ersten Befehls
ein Registerkonflikt auftritt, wird der zweite Befehl im nächsten Zyklus
von der ersten Ausführungseinheit
ausgeführt,
nachdem der zweite Befehl von der zweiten Ausführungseinheit an die erste
Ausführungseinheit abgegeben
wurde.
-
Die
EP-A-0 368 332 ist die Basis für
den Oberbegriff des Patentanspruchs 1.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Aufgabe
der vorliegenden Erfindung ist es, einen Datenprozessor zu schaffen,
der gleichzeitig zwei arithmetische Befehle ausführen kann, die numerische Werte
betreffen.
-
Eine
andere Aufgabe der vorliegenden Erfindung ist es, einen Datenprozessor
mit einer Hardware zu schaffen, die einen Compiler von der Last der
Befehlsanordnung befreit.
-
Eine
weitere Aufgabe der vorliegenden Erfindung ist es, einen Datenprozessor
zu schaffen, dessen Programme mit der herkömmlichen Hardware zur seriellen
Ausführung
kompatibel sind und der zu einer parallelen Ausführung in der Lage ist.
-
Diese
Aufgaben werden mit dem Datenprozessor nach Patentanspruch 1 gelöst.
-
Es
folgt eine allgemeine Beschreibung eines Mikroprozessors bei der
repräsentativen
Ausführungsform
der vorliegenden Erfindung, die in der vorliegenden Anmeldung beschrieben
ist.
-
Der
erfindungsgemäße Mikroprozessor
umfaßt
- (1) eine Befehlsabrufeinheit 640,
die aus einem Speicher einen ersten Befehl und einen zweiten Befehl
mit einer Befehlslänge
mit einer vorgegebenen Bitbreite (32 Bit) abruft und die den ersten Befehl
und den zweiten Befehl parallel ausgibt;
- (2) einen ersten Befehlsdecoder 644, dessen Eingang
der von der Befehlsabrufeinheit 640 ausgegebene erste Befehl
zugeführt
wird;
- (3) einen zweiten Befehlsdecoder 645, dessen Eingang
der von der Befehlsabrufeinheit 640 ausgegebene zweite
Befehl zugeführt
wird;
- (4) eine erste Befehlsausführungseinheit 651,
die entsprechend dem Dekodierergebnis des ersten Befehlsdecoders 644 gesteuert
wird;
- (5) eine zweite Befehlsausführungseinheit 652, die
entsprechend dem Dekodierergebnis des zweiten Befehlsdecoders 645 gesteuert
wird; und
- (6) Komparatoren 131, 132 zum Vergleichen
der Daten im Zielfeld des von der Befehlsabrufeinheit 640 ausgegebenen
ersten Befehls mit den Daten im Quellenfeld des von der Befehlsabrufeinheit 640 ausgegebenen
zweiten Befehls.
-
Wenn
die Daten im Zielfeld des von der Befehlsabrufeinheit 640 ausgegebenen
ersten Befehls mit den Daten im Quellenfeld des von der Befehlsabrufeinheit 640 ausgegebenen
zweiten Befehls übereinstimmen,
unterdrücken
die Ausgangssignale der Kompara toren 131, 132 die
parallele Ausführung
des ersten und des zweiten Befehls in der ersten und der zweiten
Befehlsausführungseinheit 651, 652.
-
Der
erste und der zweite Befehl werden innerhalb eines Zyklusses von
der Befehlsabrufeinheit 640 aus einem Speicher 620 abgerufen,
und die so abgerufenen ersten und zweiten Befehle werden im ersten
und im zweiten Befehlsdecoder 644, 645 dekodiert.
-
Die
Befehlsausführungseinheiten 651, 652 werden
entsprechend den Dekodierergebnissen gesteuert, die vom ersten und
zweiten Decoder 644, 645 erhalten werden.
-
Wenn
sich die Daten im Zielfeld des von der Befehlsabrufeinheit 640 ausgegebenen
ersten Befehls von den Daten im Quellenfeld des von der Befehlsabrufeinheit 640 ausgegebenen
zweiten Befehls unterscheiden, können
der erste und der zweite Befehl parallel ausgeführt werden. Im Ergebnis erlauben
dann die Ausgangssignale der Komparatoren 131, 132 die
parallele Ausführung
des ersten und des zweiten Befehls in der ersten und der zweiten
Befehlsausführungseinheit 651, 652.
-
Wenn
dagegen die Daten im Zielfeld des von der Befehlsabrufeinheit 640 ausgegebenen
ersten Befehls mit den Daten im Quellenfeld des von der Befehlsabrufeinheit 640 ausgegebenen
zweiten Befehls übereinstimmen,
können
der erste und der zweite Befehl nicht parallel ausgeführt werden.
Folglich unterdrücken
dann die Ausgangssignale der Komparatoren 131, 132 die
parallele Ausführung
des ersten und des zweiten Befehls in der ersten und der zweiten
Befehlsausführungseinheit 651, 652.
-
Diese
und andere Aufgaben und die Merkmale der vorliegenden Erfindung
gehen aus der folgenden Beschreibung von Ausführungsformen mit Bezug zu den
beiliegenden Zeichnungen hervor.
-
KURZBESCHREIBUNG
DER ZEICHNUNGEN
-
1 ist
eine Blockdarstellung der Systemkonfiguration eines erfindungsgemäßen Datenprozessors.
-
2 zeigt Befehlsformate für den Datenprozessor
der 1.
-
3 zeigt ein Befehlsteuerverfahren bei der
gleichzeitigen Ausführung
von zwei Befehlen im Datenprozessor der 1.
-
4 zeigt Aspekte einer Pipelineverarbeitung
im Datenprozessor der 1.
-
5 ist
eine Tabelle von zugeordneten Befehlscodes bei dem Datenprozessor
der 1.
-
6 zeigt ein Befehlsteuerverfahren bei der
seriellen Ausführung
von Befehlen im Datenprozessor der 1.
-
7 zeigt ein Verfahren zur Verarbeitung einer
Ausnahme, wenn diese auftritt, während
zwei Befehle im Datenprozessor der 1 gleichzeitig ausgeführt werden.
-
BESCHREIBUNG DER BEVORZUGTEN
AUSFÜHRUNGSFORMEN
-
Es
folgt eine genaue Beschreibung von Ausführungsformen der vorliegenden
Erfindung mit Bezug zu den beiliegenden Zeichnungen.
-
Allgemeine Beschreibung
des Datenprozessors
-
Die 1 ist
eine Blockdarstellung eines erfindungsgemäßen Datenprozessors. Allgemein
besteht der Datenprozessor aus einer Prozessoreinheit 610,
einem Programmspeicher 620 und einem Datenspeicher 630.
-
Der
Programmspeicher 620 ist über einen Befehlsadressenbus 621 und
einen Befehlsdatenbus 622 mit dem Prozessor 610 verbunden.
-
Der
Befehlsadressenbus 621 ist 32 Bit breit und wird zum Adressieren
von bis zu 4 GByte (Gigabyte) verwendet.
-
Der
Befehlsdatenbus 622 ist 64 Bit breit und wird dazu verwendet,
beim Übertragen
von Befehlen immer gleichzeitig zwei Befehle aus dem Programmspeicher 620 abzurufen.
-
Der
Datenspeicher 630 ist über
einen Operandenadressenbus 631 und einem Operandendatenbus 632 mit
dem Prozessor 610 verbunden.
-
Der
Operandenadressenbus 631 ist 32 Bit breit und wird zum
Adressieren von bis zu 4 GByte (Gigabyte) verwendet.
-
Der
Operandendatenbus 632 ist 32 Bit breit und wird dazu verwendet,
einzeln aus dem Datenspeicher 630 Einwortdaten abzurufen
oder sie darin zu speichern.
-
Der
Programmspeicher 620 und der Datenspeicher 630 sind
zum Beispiel ein Befehls-Cachespeicher und ein Daten-Cachespeicher,
die Kopien eines Teils der Befehle und Daten in einem Hauptspeicher
(nicht gezeigt) enthalten.
-
Interne Konfiguration
des Prozessors
-
Der
Prozessor 610 enthält
einen Programmzähler 643 zur
Berechnung von Befehlsadressen, einen Prefetchpuffer 640 zum
Festhalten des vorab ausgelesenen Befehls, ein erstes Befehlsregister 641,
ein zweites Befehlsregister 642, einen ersten Befehlsdecoder 644,
einen zweiten Befehlsdecoder 645, eine Registerbank 650,
eine erste Arithmetik- und Logikeinheit 651, eine zweite
Arithmetik- und Logikeinheit 652, ein Adressenspeicherregister
(MAR) 653, ein Datenspeicherregister (MDR) 654 und
eine Parallelbetrieb-Steuereinheit 646.
-
Prefetcheinheit
-
Der
Prefetchpuffer 640 ist als Prefetcheinheit 64 Bit breit
und kann gleichzeitig zwei Befehle festhalten, die aus dem Programmspeicher 620 abgerufen
wurden.
-
Der
Inhalt des Prefetchpuffers 640 wird zu einem Zeitpunkt,
wenn darin freier Platz festgestellt wird, derart zum ersten Befehlsregister 641 und
zum zweiten Befehlsregister 642 übertragen, daß zum ersten
und zum zweien Befehlsregister 641, 642 ein linker
bzw. rechter Befehl übertragen
werden.
-
Da
bei der vorliegenden Ausführungsform die
große
Endianadressierung angewendet wird, ist der linke der beiden im
Prefetchpuffer enthaltenen Befehle der jüngere und wird daher zuerst
ausgeführt,
woraufhin dann der rechte Befehl ausgeführt wird.
-
Registerbank
-
Die
Registerbank 650 besteht aus 32 Registern R0, R1, R2, ...
R31 mit jeweils 32 Bit Breite, wobei gleichzeitig ein Auslesen an
5 Anschlüssen
und ein Einschreiben an 3 Anschlüssen
möglich
ist.
-
Befehlsdecoder
-
Der
erste und der zweite Befehl, die in einem Zyklus vom Befehlsabrufpuffer 640 aus
dem Programmspeicher 620 abgerufen werden, werden im ersten
bzw. zweiten Decoder 644, 645 dekodiert.
-
Entsprechend
dem Dekodierergebnis im ersten und zweiten Decoder 644, 645 werden
die Befehlsausführungseinheiten 651, 652 gesteuert.
-
Befehlsausführungseinheiten
-
Die
Arithmetik- und Logikeinheiten 651, 652 in den
Befehlsausführungseinheiten
weisen A-seitige Eingänge 655, 657 und
B-seitige Eingänge 656, 658 mit
jeweils 32 Bit, ALUs zum Ausführen
von arithmetischen Operationen (arithmetisch-logischen Operationen)
an den Eingangssignalen und Ausgangsschieberegister SFs zum Verschieben
der B-seitigen Eingänge 656, 658 um
die Stellen der A-seitigen Eingänge 655, 657 auf.
-
Komparator
-
Wenn
sich die Daten im Zielfeld des vom Befehlsabrufpuffer 640 ausgegebenen
ersten Befehls von den Daten im Quellenfeld des vom Befehlsabrufpuffer 640 ausgegebenen
zweiten Befehls unterscheiden, können
der erste und der zweite Befehl parallel ausgeführt werden. In Reaktion auf
die Daten im Zielfeld des ersten Befehls und die Daten im Quellenfeld
des zweiten Befehls erlauben dabei die Ausgangssignale der Komparatoren 131, 132 die
parallele Ausführung
des ersten und des zweiten Befehls in der ersten und der zweiten
Befehlsausführungseinheit 651, 652.
-
Wenn
die Daten im Zielfeld des vom Befehlsabrufpuffer 640 ausgegebenen
ersten Befehls mit den Daten im Quellenfeld des vom Befehlsabrufpuffer 640 ausgegebenen
zweiten Befehls übereinstimmen,
können
der erste und der zweite Befehl nicht parallel ausgeführt werden.
In Reaktion auf die Daten im Zielfeld des ersten Befehls und die
Daten im Quellenfeld des zweiten Befehls unterdrücken dann die Ausgangssignale
der Komparatoren 131, 132 die parallele Ausführung des
ersten und des zweiten Befehls in der ersten und der zweiten Befehlsausführungseinheit 651, 652.
-
Parallelbetrieb-Steuereinheit
-
Die
Parallelbetrieb-Steuereinheit 646 nimmt Daten wie die sich
aus der Dekodierung im ersten und zweiten Befehlsdecoder 644, 645 ergebenden Ausgangssignale
der Komparatoren 131, 132 auf und stellt fest,
ob die beiden Befehle im ersten und zweiten Befehlsregister 641, 642 gleichzeitig
ausführbar
sind.
-
Wenn
die beiden Befehle gleichzeitig ausführbar sind, wird das Dekodierergebnis
des ersten und des zweiten Befehlsdecoders 644, 645 in
Kraft gesetzt, und die beiden Befehle werden in der ersten und der
zweiten Befehlsausführungseinheit 651, 652 ausgeführt.
-
Wenn
die beiden Befehle nicht gleichzeitig ausführbar sind, wird das Dekodierergebnis
des zweiten Befehlsdecoders 645 aufgehoben und nur das
Dekodierergebnis des ersten Befehlsdecoders 644 in Kraft
gesetzt, und die beiden Befehle werden seriell ausgeführt.
-
Wenn
(1) sowohl der erste als auch der zweite Befehl ein arithmetischer
Befehl ist, wenn (2) der erste und der zweite Befehl ein Sprungbefehl
bzw. ein arithmetischer Befehl sind, wenn (3) der erste und der
zweite Befehl ein arithmetischer Befehl bzw. ein Speicherbefehl
sind, und wenn (4) der erste und der zweite Befehl ein Sprungbefehl
bzw. ein Speicherbefehl sind, können
die beiden gleichzeitig vom Befehlsprefetchpuffer 640 zugeführten Befehle
im Prinzip gleichzeitig ausgeführt
werden.
-
(5)
Wenn sowohl der erste als auch der zweite Befehl ein Sprungbefehl
ist und wenn (6) sowohl der erste als auch der zweite Befehl ein
Speicherbefehl ist, kann die angegebene Hardware dazu verwendet
werden, die gleichzeitige Ausführung
der beiden Befehle zu unterdrücken.
-
(7)
Wenn das Zielregister des ersten Befehls das Quellenregister des
zweiten Befehls ist, bleibt außerdem
die datenabhängige
Beziehung zwischen den Befehlen erhalten, da die obige Hardware
die gleichzeitige Ausführung
der beiden Befehle unterdrückt.
-
Die
Häufigkeit
der Befehlsausführung
liegt bei einem Datenprozessor im allgemeinen für Sprungbefehle bei 20 bis
30 % und für
Speicherbefehle bei ebenfalls 20 bis 30 %. Den Rest bilden die arithmetischen
Befehle.
-
Bei
dem Datenprozessor der in der 1 gezeigten
Ausführungsform
für die
gleichzeitige Ausführung
von zwei Befehlen ergibt sich hinsichtlich der Leistungsfähigkeit
nahezu kein Problem, auch wenn die erste Befehlsausführungseinheit 651 darauf
beschränkt
wird, arithmetische Befehle und Sprungbefehle auszuführen und
die zweite Befehlsausführungseinheit 652 für arithmetische
Befehle und Speicherbefehle verwendet wird. Wenn die Funktionen
der einzelnen Befehlsausführungseinheiten
wie beschrieben eingeschränkt
werden, verringert sich außerdem
der Umfang des auszubildenden Schaltkreises.
-
Verzögerter Sprung und Verzögerungslücke
-
Für Sprungbefehle
wird oft eine verzögerte Sprungtechnik
angewendet. Bei dieser Technik wird der auf den Sprungbefehl folgende
Zyklus als Verzögerungslücke bezeichnet,
wobei in einem für
einen RISC-Prozessor compilierten Programm in diesem Zyklus der
unmittelbar auf den Sprungbefehl des folgende Befehl ausgeführt wird.
Nach der Ausführung des
unmittelbar auf den Sprungbefehl folgenden Befehls erfolgt der tatsächliche
Sprung.
-
Der
unmittelbar auf den Sprungbefehl des für einen RISC-Prozessor compilierten
Programms folgende Befehl entspricht einem Befehl, der einem Sprungbefehl
eines für
einen Datenprozessor wie einen CISC-Prozessor compilierten Programms
unmittelbar vorangeht.
-
Bei
dem oben beschriebenen RISC-Prozessor wird dagegen zuerst der der
auf den Sprungbefehl folgende Befehl (normalerweise ist das der
dem Sprungbefehl unmittelbar vorangehende Befehl) ausgeführt und
dann erst der Sprungbefehl.
-
Eine
genaue Beschreibung des verzögerten Sprungs
und der Verzögerungslücke ist
in 'mips RISC ARCHITECTURE', Seiten 1-9 bis
1-11, Gerry Kane (1988) enthalten.
-
In
einem gewöhnlichen
Prozessor wird zum parallelen Ausführen von Befehlen für das Zuführen, Dekodieren
und Ausführen
der Befehle eine Multiebenen-Pipeline verwendet.
-
Bei
der parallelen Pipeline-Verarbeitung führt die Befehlsabrufeinheit
den Prozeß des
Abrufens von Befehlen nach dem Sprungbefehl weiter aus, während die
Adressenberechnung für
das Sprungziel des Sprungbefehls erfolgt.
-
Bei
einem herkömmlichen
CISC-Prozessor wird der bereits abgerufene Befehl, der auf den Sprungsbefehl
folgt, aufgehoben, wenn der Sprung erfolgt, und es wird ein Sprungzielbefehl
abgerufen, damit der Befehl dekodiert und ausgeführt werden kann. Bei einem
CISC-Prozessor kann unmittelbar nach dem Sprungbefehl, der zwei
Ausführungszyklen
benötigt,
kein Operationszyklus automatisch eingefügt werden.
-
Bei
einem RISC-Prozessor wird jedoch der vorher abgerufene Befehl, der
auf den Sprungbefehl folgt (normalerweise ein Befehl, der dem Sprungbefehl
unmittelbar vorangeht), bei der Ausführung des Sprungs nicht aufgehoben,
und der erstere Befehl wird zuerst ausgeführt und dann der Sprungbefehl ausgeführt, bevor
der Sprungzielbefehl abgerufen wird.
-
In
einem RISC-Prozessor kann daher durch das wirkungsvolle Anordnen
von Befehlen, die nach dem Sprungbefehl im Programm nicht aufgehoben werden,
der Zyklus gut ausgenutzt werden. Ein Sprungbefehl wie beschrieben
wird verzögerter Sprung
genannt, wobei der Zyklus nach dem Sprungbefehl die Verzögerunglücke genannt
wird.
-
Gleichzeitige Ausführung von
zwei Befehlen in der Verzögerungslücke
-
Es
folgt eine Beschreibung des Basisverfahrens zum Handhaben der Verzögerungslücke beim verzögerten Sprung,
wenn in einem RISC-Prozessor zwei Befehle gleichzeitig ausgeführt werden.
-
Zuerst
wird, wenn der unmittelbar vorhergehende Befehl ein bedingter Sprungbefehl
ist und dann zwei Befehle abgerufen werden, nur der erste Befehl
in der Verzögerungslücke ausgeführt, wenn (1)
die Bedingung für
den bedingten Sprungbefehl erfüllt
ist. Wenn (2) die Bedingung für den bedingten Sprungbefehl
nicht erfüllt
ist, werden die beiden Befehle in der Verzögerungslücke unter der Voraussetzung
ausgeführt,
daß der
zweite Befehl gleichzeitig mit dem ersten Befehl ausführbar ist.
Die Vorgehensweise beim verzögerten
Sprung wird genauer mit Bezug zu der Ausführungsform der 6(f) beschrieben.
-
Befehlsformat
-
Die 2 zeigt die Befehlsformate für den Datenprozessor
der 1 als Ausführungsform
der vorliegenden Erfindung.
-
Wie
in der 2 gezeigt, weist ein Befehl eine
feste Länge
von 32 Bit auf. Von links ist der Befehl in Felder mit 6, 5, 5 und
16 Bit unterteilt. Das 6-Bit-Feld 210 am linken Ende bezeichnet
den Operationscode (OP-Code), der die Art des Befehls angibt. Das
folgende 5-Bit-Feld 220 ist ein Zielfeld zum Bezeichnen
des Registers zum Speichern des Ergebnisses der Ausführung des
Befehls. Das nächste 5-Bit-Feld 230 ist
ein erstes Quellenfeld zum Bezeichnen des einen Befehlseingaberegisters.
Das 16-Bit-Feld 240 am rechten Ende ist ein zweites Quellenfeld
zum Bezeichnen des anderen Eingaberegisters. Das zweite Quellenfeld 240 kann
16 Bit unmittelbare Daten enthalten, wie es in der 2(A) gezeigt
ist, oder durch die 5 Bit 250 am rechten Ende wird ein
Register bezeichnet, wie es in der 2(B) gezeigt
ist. Die Verwendung des zweiten Quellenfeldes auf eine solche Weise
wird durch das am weitesten links befindliche Bit des OP-Codes 210 bezeichnet;
wenn das Bit '0' ist, wird das Feld
wie in (A) gezeigt verwendet, wenn es dagegen '1' ist,
wird das Feld wie in (B) gezeigt verwendet. Ein Befehl in der Form
(A) wird als unmittelbarer Befehl bezeichnet, während ein Befehl in der Form
(B) als Registerbefehl bezeichnet wird.
-
Die
Anzahl der Register in der Registerbank der vorliegenden Ausführungsform
ist 32, und wenn die Register mit R0, R1, R2, ... R31 bezeichnet
werden, sind wie angegeben dafür
5 Bit erforderlich.
-
Die 5 zeigt
die Bitzuordnung des OP-Codes 210. Ein LUI-Befehl 510 (Load
Upper Immediate) stellt die Anweisung dar, an die rechte Seite der
16 Bit unmittelbaren Daten im zweiten Quellenfeld 240 16
Bit '0' anzuschließen, um
sie zu 32 Bit unmittelbaren Daten zu machen, und die Daten in dem Register
zu speichern, das im Zielfeld 220 angegeben ist.
-
Ein
ADDI-Befehl 512 (Add Immediate) stellt die Anweisung dar,
an die linke Seite der 16 Bit unmittelbaren Daten im zweiten Quellenfeld 240 16
Bit mit dem Wert des höchstwertigen
Bits im zweiten Quellenfeld 240 anzuschließen, um
eine unmittelbare 32-Bit-Vorzeichenerweiterung
auszuführen,
dazu den Inhalt des Registers zu addieren, der im ersten Quellenfeld 230 angegeben
ist, und das Ergebnis in dem Register zu speichern, das im Zielfeld 220 angegeben
ist.
-
Ein
SUBI-Befehl 514 (Subtract Immediate) stellt die Anweisung
dar, wie beim ADDI-Befehl 512 eine unmittelbare 32-Bit-Vorzeichenerweiterung
auszuführen,
die Daten vom Inhalt des Registers zu subtrahieren, der im ersten
Quellenfeld 230 angegeben ist, und das Ergebnis in dem
Register zu speichern, das im Zielfeld 220 angegeben ist.
-
Ein
ANDI-Befehl 516 (AND Immediate) stellt die Anweisung dar,
an die linke Seite der 16 Bit unmittelbaren Daten im zweiten Quellenfeld 240 16
Bit '0' anzuschließen, um
eine unmittelbare 32-Bit-Vorzeichenerweiterung auszuführen, Bit
für Bit
eine UND-Operation
mit dem Inhalt des Registers auszuführen, der im ersten Quellenfeld 230 angegeben
ist, und das Ergebnis in dem Register zu speichern, das im Zielfeld 220 angegeben
ist.
-
Ein
ORI-Befehl 518 (OR Immediate) und ein EORI-Befehl 520 (Exclusive
OR Immediate) stellt die Anweisung dar, wie im Fall des ANDI-Befehls 516 eine
ODER- bzw. eine Exklusiv-ODER-Operation auszuführen.
-
Ein
SLLI-Befehl 522 (Shift Left Logical Immediate) stellt die
Anweisung dar, den Inhalt des im ersten Quellenfeld 230 bezeichneten
Registers um die Zahl der 16 Bit unmittelbaren Daten im zweiten
Quellenfeld 240 zu verschieben und das Ergebnis in dem Register
zu speichern, das im Zielfeld 220 angegeben ist. Der vom
rechten Ende her eingeschobene Wert ist '0'.
-
Ein
SRLI-Befehl 524 (Shift Right Logical Immediate) stellt
die Anweisung dar, im Gegensatz zum SLLI-Befehl 522 eine
Verschiebung nach rechts durchzuführen. Der vom linken Ende her
eingeschobene Wert ist '0'.
-
Ein
SRAI-Befehl 526 (Shift Right Arithmetic Immediate) stellt
wie der SRLI-Befehl 524 die
Anweisung dar, eine Verschiebung nach rechts durchzuführen, wobei
der vom linken Ende her eingeschobene Wert nicht '0' ist, sondern der Wert des Bits am linken Ende
des Registers, das im ersten Quellenfeld 230 bezeichnet
ist.
-
Ein
LD-Befehl 530 (Load) stellt wie der ADDI-Befehl 512 die
Anweisung dar, am zweiten Quellenfeld 240 eine unmittelbare
32-Bit-Vorzeichenerweiterung durchzuführen, das Ergebnis zu dem Inhalt
des im ersten Quellenfeld 230 bezeichneten Registers zu
addieren, um ihn zu einer Adresse zu machen, und den Inhalt des
Datenspeichers unter dieser Adresse in dem Register zu speichern,
das im Zielfeld 220 angegeben ist.
-
Ein
ST-Befehl 532 (Store) stellt wie der LD-Befehl 530 die
Anweisung dar, eine Adresse zu berechnen und den Inhalt des im Zielfeld 220 angegebenen
Registers unter dieser Adresse im Datenspeicher zu speichern.
-
Ein
Bcc-Befehl 536 (Branch) ist ein bedingter Sprungbefehl,
der die Anweisung darstellt, an der linken Seite der 16 Bit unmittelbaren
Daten im zweiten Quellenfeld 240 16 Bit mit dem gleichen
Wert wie das höchstwertige
Bit im zweiten Quellenfeld 240 anzuschließen, um
eine unmittelbare 32-Bit-Vorzeichnerweiterung auszuführen, wenn
die Bedingung erfüllt ist,
und den Programmfluß zu
der Adresse zu leiten, die durch Addieren des erweiterten Werts
zum Wert des Programmzählers
erhalten wird, der die Adresse des vorliegenden Befehls angibt.
Die Sprungbedingung wird durch 5 Bit im Zielfeld 220 bezeichnet.
-
Der
ADD-Befehl 552 bis zum SRA-Befehl 566 sind Anweisungen,
beim ADDI-Befehl 512 bis zum
SRAI-Befehl 526 jeweils den Inhalt eines Registers als
zweiten Quellenoperanden zu verwenden.
-
Ein
JUMP-Befehl 576 (Jump) ist ein unbedingter Sprungbefehl,
der den Inhalt des im zweiten Quellenfeld 240 bezeichneten
Registers zur Zieladresse des Sprungs macht und die Anweisung darstellt,
den Programmfluß zu
dieser Adresse zu leiten.
-
Bei
der vorliegenden Ausführungsform
werden die Befehle vom LUI-Befehl 510 bis zum SRAI-Befehl 526 und
vom ADD-Befehl 552 bis zum SRA-Befehl 566 als
arithmetische Befehle eingestuft, während der LD-Befehl 530 und
der ST-Befehl 532 als Speicherbefehle eingestuft werden.
Der Bcc-Befehl 536 und der JUMP-Befehl 576 werden
als Sprungbefehle eingestuft.
-
Vorgehensweise
bei der parallelen Ausführung
von zwei Befehlen
-
Die 3 zeigt die Operationen, die ausgeführt werden,
wenn erfindungsgemäß zwei Befehle gleichzeitig
ausgeführt
werden.
-
Die 3(A) zeigt zuerst die Operationen, die ausgeführt werden,
wenn gleichzeitig ein Sprungbefehl und ein arithmetischer Befehl
ausgeführt
werden. Im vorliegenden Fall wird von der linken Seite des 64-Bit-Befehlsdatenbusses 622 der
Sprungbefehl zugeführt
und von der rechten Seite davon ein ORI-Befehl. Bei der gezeigten
Ausführungsform
können
diese beiden Befehle gleichzeitig ausgeführt werden.
-
Der
von der linken Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte Sprungbefehl
wird in das erste Befehlsregister 641 eingegeben und der gleichzeitig
von der rechten Seite davon zugeführte ORI-Befehl in das zweite
Befehlsregister 641. Der erste Befehlsdecoder 644 dekodiert
das OP-Codefeld 111 im ersten Befehlsregister 641 und
stellt fest, daß es
ein Sprungbefehl ist, und der zweite Befehlsdecoder 645 dekodiert
das OP-Codefeld 121 im zweiten Befehlsregister 642 und
stellt fest, daß es
ein arithmetischer Befehl (ORI-Befehl)
ist.
-
Die
Parallelbetrieb-Steuereinheit 646 stellt anhand der Dekodierergebnisse
des ersten und zweiten Befehlsdecoders 644, 645 fest,
daß der
zugeführte
Sprungbefehl und der zugeführte
arithmetische Befehl im Prinzip parallel ausgeführt werden können.
-
Da
das Zielregister des Sprungbefehls kein Ausführungsergebnis enthält, befindet
sich das Quellenregister des arithmetischen Befehls (ORI-Befehls) nicht
im Konflikt mit dem Zielregister. Auf der Basis dieser Feststellung
beginnt die Parallelbetrieb-Steuereinheit 646 damit, die
beiden Befehle im gleichen Zyklus parallel auszuführen.
-
Mit
anderen Worten wird der Sprungbefehl ausgeführt, um durch Verbinden von
16 Bit unmittelbarer Datencodes mit der linken Seite der 16 Bit
unmittelbarer Daten im zweiten Quellenfeld 114 des ersten
Befehlsregisters 641 zur Ausführung einer 32-Bit-Erweiterung und Eingabe
der 32 Bit unmittelbarer Daten in den Programmzähler 643 zum Addieren
der Daten zu der gegenwärtigen
Befehladresse die Sprungzieladresse zu berechnen. Die Sprungzieladresse
wird dann dazu verwendet, den Befehl abzurufen, der in dem Fall
folgt, daß die
im Zielfeld 112 angegebene Sprungbedingung erfüllt ist.
-
Gleichzeitig
werden aufgrund des ORI-Befehls entsprechend dem ersten Quellenfeld 123 im zweiten
Befehlsregister 642 der Inhalt des Registers R3 in der
Registerbank 650 ausgelesen und die 16 Bit unmittelbaren
Daten im zweiten Quellenfeld auf eine Codelänge von 32 Bit gebracht. Die
Arithmetik- und Logikeinheit 652 wird dann dazu verwendet,
das ODER der beiden Daten zu suchen. Das Ergebnis wird im Register
R3 der Registerbank 650 gespeichert, das im Zielfeld 122 angegeben
ist. Die Arithmetik- und Logikeinheit 652 wird vom zweiten
Decoder 645 zum Dekodieren des OP-Codes 121 im
zweiten Befehlsregister 642 gesteuert. Die unmittelbare Erweiterung
des zweiten Quellenfeldes 124 wird ebenfalls vom zweiten
Decoder 645 gesteuert.
-
Wenn
der auf den Sprungbefehl folgende Befehl und der Sprungbefehl im
gleichen Zyklus ausgeführt
werden können,
werden diese beiden Befehle bei der vorliegenden Ausführungsform
gleichzeitig ausgeführt,
und es wird in der Verzögerungslücke nicht
die Ausführung
eines neuen Befehls gestartet. Wenn der auf den Sprungbefehl folgende
Befehl und der Sprungbefehl nicht im gleichen Zyklus ausgeführt werden
können,
wird der auf den Sprungbefehl folgende Befehl in der Verzögerungslücke ausgeführt.
-
Es
gibt daher keinen Unterschied zwischen den Operationen bei der vorliegenden
Ausführungsform
und den Operationen bei einem herkömmlichen Prozessor, so daß die Kompatibilität dazwischen
sichergestellt ist.
-
Bei
einer anderen Ausführungsform
der vorliegenden Erfindung wird in Betracht gezogen, gleichzeitig
den auf den Sprungbefehl folgenden Befehl und den Sprungbefehl auszuführen, wenn
die beiden Befehle in einem Zyklus ausgeführt werden können, und
in der Verzögerungslücke mit
der Ausführung
von zwei neuen Befehlen zu beginnen. Dies ist gleichbedeutend mit
der Ausführung
von drei Befehlen in der Verzögerungslücke, wodurch
sich die Verarbeitungsleistung weiter erhöht.
-
Es
wurde der Fall beschrieben, daß der
Befehl unmittelbar vor dem Sprungbefehl kein Sprungbefehl ist. Da
bei der vorliegenden Ausführungsform jedoch
der Sprungbefehl von der Compiler-Software und dergleichen so gesteuert
wird, daß in
der Verzögerungslücke eines
anderen Sprungbefehls kein Sprungbefehl angeordnet wird, wurde die
Befehlsausführungsschaltung
dazu ausgelegt, einen Fall wie diesen zu ignorieren.
-
Die 3(B) zeigt die Operationen bei der gleichzeitigen
Ausführung
eines arithmetischen Befehls und eines Speicherbefehls. Im vorliegenden Fall
wird von der linken Seite des 64-Bit-Befehlsdatenbusses 622 ein
ADD-Befehl zugeführt
und von der rechten Seite davon ein LD-Befehl. Aufgrund des ADD-Befehls
werden der Inhalt des Registers R1 und der Inhalt des Registers
R2 in der Registerbank 650 zusammenaddiert und das Ergebnis
wird im Register R3 gespeichert, während aufgrund des LD-Befehls der
Inhalt des Datenspeichers 630 als Wert einer Adresse in
das Register R4 eingegeben wird, wobei der Wert durch Addieren der
unmittelbaren Daten zum Register R5 erhalten wird. Bei der vorliegenden Ausführungsform
können
diese beiden Befehle gleichzeitig ausgeführt werden.
-
Der
von der linken Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte ADD-Befehl wird vom Prefetchpuffer 640 übertragen
und in das erste Befehlsregister 641 eingegeben. Der gleichzeitig
von der rechten Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte LD-Befehl
wird vom Prefetchpuffer 640 übertragen und in das zweite
Befehlsregister 642 eingegeben. Der erste Befehlsdecoder 644 dekodiert das
OP-Codefeld 141 im ersten Befehlsregister 641 und
stellt fest, daß es
ein arithmetischer Befehl (ADD-Befehl) ist, und der zweite Befehlsdecoder 645 dekodiert
das OP-Codefeld 151 im zweiten Befehlsregister 642 und
stellt fest, daß es
ein Speicherbefehl (LD-Befehl) ist.
-
Anhand
der Dekodierergebnisse des ersten und zweiten Befehlsdecoders 644, 645,
die mit der Parallelbetrieb-Steuereinheit 646 verbunden
sind, wird festgestellt, daß die
beiden genannten Befehl im Prinzip parallel ausgeführt werden
können.
-
Der
Komparator 131 vergleicht das Zielfeld 142 im
ersten Befehlsregister 641 mit dem ersten Quellenfeld 153 des
zweiten Befehlsregisters 642, um eine gegenseitige Unvereinbarkeit
festzustellen. Auf der Basis dieser Feststellung beginnt die Parallelbetrieb-Steuereinheit 646 damit,
die beiden Befehle gleichzeitig parallel auszuführen.
-
Mit
anderen Worten wird durch den ADD-Befehl entsprechend dem ersten
Quellenfeld 143 des ersten Befehlsregisters 641 der
Inhalt des Registers R1 ausgelesen und entsprechend dem zweiten
Quellenfeld 144 davon der Inhalt des Registers R2. Die Arithmetik-
und Logikeinheit 651 wird dann dazu verwendet, die Summe
dieser beiden Daten zu berechnen. Das Ergebnis wird im Register
R3 gespeichert, das vom Zielfeld 142 bezeichnet wird. Die
Arithmetik- und Logikeinheit 651 wird vom ersten Decoder 644 zum
Dekodieren des OP-Codes 141 des ersten Befehlsregisters 641 gesteuert.
-
Gleichzeitig
wird durch den LD-Befehl durch Addieren eines Werts mit 32 Bit Länge, der
durch eine Vorzeichenerweiterung aus den 16 Bit unmittelbaren Daten
des zweiten Quellenfelds 154 im zweiten Befehlsregister 642 erhalten
wird, zu dem vom ersten Quellenfeld 153 des zweiten Befehlsregisters 642 bezeichneten
Register R5 mittels der Arithmetik- und Logikeinheit 652 ein
Wert bestimmt, der sich ergebende Wert in das MAR 653 gegeben,
der Inhalt des Datenspeichers 630 mit dem Wert als Adresse
in das MDR 654 ausgelesen und die so ausgelesenen Daten
in das Register R4 der Registerbank 650 eingegeben, das
vom Zielfeld 152 des zweiten Befehlsregisters 642 bezeichnet
wird. Die Arithmetik- und Logikeinheit 652 wird vom zweiten
Decoder 645 zum Dekodieren des OP-Codes 151 des
zweiten Befehlsregisters 642 gesteuert.
-
Der
nachfolgend auszuführende
Befehl befindet sich im Prefetchpuffer 640 und wird von
dort vor der Ausführung
zum ersten und zweiten Befehlsregister 641, 642 übertragen.
-
Es
wurde ein Fall beschrieben, bei dem der dem LD-Befehl unmittelbar
vorangehende Befehl kein Sprungbefehl, sondern ein ADD-Befehl ist. Wenn
in einem anderen Beispiel der vorangehende Befehl (der auf der linken
Seite) kein ADD-Befehl ist, sondern ein Sprungbefehl, werden bei
der vorliegenden Ausführungsform
der LD-Befehl und der Sprungbefehl gleichzeitig ausgeführt, und
es wird verhindert, daß in
der Verzögerungslücke des
Sprungbefehls ein neu zugeführter
Befehl ausgeführt
wird.
-
Die 3(C) zeigt die Operationen bei der gleichzeitigen
Ausführung
von zwei arithmetischen Befehlen. Im diesem Fall wird von der linken
Seite des 64-Bit-Befehlsdatenbusses 622 ein
ADD-Befehl zugeführt
und von der rechten Seite davon ein OR-Befehl. Entsprechend dem
ADD-Befehl werden der Inhalt des Registers R1 und der Inhalt des
Registers R2 zusammenaddiert, das Ergebnis wird im Register R3 gespeichert,
während
das ODER zwischen dem Register R5 und dem Register R6 erhalten wird und
im Register R4 gespeichert wird. Bei der vorliegenden Ausführungsform
können
die beiden Befehle gleichzeitig ausgeführt werden.
-
Der
von der linken Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte ADD-Befehl wird in das erste
Befehlsregister 641 eingegeben. Der gleichzeitig von der
rechten Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte OR-Befehl
wird in das zweite Befehlsregister 642 eingegeben. Der
erste Befehlsdecoder 644 dekodiert das OP-Codefeld 141 im
ersten Befehlsregister 641 und stellt fest, daß es ein arithmetischer
Befehl (ADD-Befehl)
ist, und der zweite Befehlsdecoder 645 dekodiert das OP-Codefeld 161 im
zweiten Befehlsregister 642 und stellt fest, daß es ein
arithmetischer Befehl (OR-Befehl) ist.
-
Anhand
der Dekodierergebnisse des ersten und zweiten Befehlsdecoders 644, 645,
die mit der Parallelbetrieb-Steuereinheit 646 verbunden
sind, wird festgestellt, daß die
beiden genannten Befehl im Prinzip parallel ausgeführt werden
können.
-
Der
Komparator 131 vergleicht das Zielfeld 142 im
ersten Befehlsregister 641 mit dem ersten Quellenfeld 163 des
zweiten Befehlsregisters 642, um eine gegenseitige Unvereinbarkeit
festzustellen. Außerdem
vergleicht der Komparator 132 das Zielfeld 142 im
ersten Befehlsregister 641 mit dem zweiten Quellenfeld 164 des
zweiten Befehlsregisters 642, um eine gegenseitige Unvereinbarkeit
festzustellen. Auf der Basis dieser Feststellungen beginnt die Parallelbetrieb-Steuereinheit 646 damit,
die beiden Befehle gleichzeitig parallel auszuführen.
-
Mit
anderen Worten wird durch den ADD-Befehl entsprechend dem ersten
Quellenfeld 143 des ersten Befehlsregisters 641 der
Inhalt des Registers R1 ausgelesen und entsprechend dem zweiten
Quellenfeld 144 davon der Inhalt des Registers R2. Die Arithmetik-
und Logikeinheit 651 wird dann dazu verwendet, die Summe
dieser beiden Daten zu berechnen. Das Ergebnis wird im Register
R3 gespeichert, das vom Zielfeld 142 bezeichnet wird. Die
Arithmetik- und Logikeinheit 651 wird vom ersten Decoder 644 zum
Dekodieren des OP-Codes 141 des ersten Befehlsregisters 641 gesteuert.
-
Gleichzeitig
wird durch den OR-Befehl entsprechend dem ersten Quellenfeld 163 des
zweiten Befehlsregisters 642 der Inhalt des Registers R5
ausgelesen und entsprechend dem zweiten Quellenfeld 164 davon
der Inhalt des Registers R6. Die Arithmetik- und Logikeinheit 652 wird
dann dazu verwendet, das ODER dieser beiden Daten zu bestimmen.
Das Ergebnis wird im Register R4 gespeichert, das vom Zielfeld 162 bezeichnet
wird. Die Arithmetik- und Logikeinheit 652 wird vom zweiten
Decoder 645 zum Dekodieren des OP-Codes 161 des
zweiten Befehlsregisters 642 gesteuert.
-
Pipeline-Verarbeitung
-
Die 4 zeigt die Pipeline-Verarbeitung in dem
erfindungsgemäßen Prozessor.
Es wird dabei angenommen, daß wie
in der 4(C) gezeigt im Programmspeicher 620 die
Befehle A bis F gespeichert sind.
-
In
der 4(C) sind die beiden gleichzeitig auszuführenden
Befehle nebeneinander angeordnet, und die Befehle an der Oberseite
sind die jungen, während
die Befehle an der Unterseite die großen sind. Folglich wird ein
Programm sequentiell in der absteigenden Reihenfolge von Befehlen
ausgeführt.
-
Die 4(A) stellt die Pipeline-Verarbeitung dar, wenn
wie bei der vorliegenden Erfindung angegeben zwei Befehle gleichzeitig
ausgeführt
werden. Es wird angenommen, daß wie
in der 4(C) gezeigt im Programmspeicher 620 die
Befehle A bis F gespeichert sind. Der Befehl A sei ein Sprungbefehl Bcc
zu einem Befehl X und der Befehl B ein arithmetischer Befehl. In
der 4(A) entspricht ein Kästchen in
jeder Pipelinestufe einem Taktzyklus. Die Pipelinestufen umfassen
die fünf
Stufen IF (Befehlsabruf), ID (Befehlsdekodierung), EX (Ausführung),
M (Datenabruf/Speichern) und W (Ergebnisspeicherung).
-
In
der Stufe IF wird ein Befehl aus dem Programmspeicher 620 in
den Prefetchpuffer 640 gelesen.
-
In
der Stufe ID wird der Befehl vom Prefetchpuffer 640 in
die Befehlsregister 641, 642 eingegeben und in
den Befehlsdecodern 644, 645 dekodiert. Damit
werden die erforderlichen Operandendaten aus der Registerbank 650 ausgelesen.
-
In
der Stufe EX werden die Operandendaten in den Arithmetik- und Logikeinheiten 651, 652 verarbeitet.
-
In
der Stufe M wird, wenn der Befehl ein LD- oder ST-Befehl ist, auf
den Datenspeicher 630 zugegriffen. Das Ergebnis der Ausführung wird
in der Registerbank 650 gespeichert.
-
In
der Stufe W werden, wenn der Befehl ein LD-Befehl ist, die aus dem
Datenspeicher 630 ausgelesenen Daten in der Registerbank 650 gespeichert.
-
Der
Pipelineprozeß der 4(A) wird im folgenden auf der Basis der Taktzyklen
beschrieben.
-
[Erster Taktzyklus]
-
Aus
dem Programmspeicher 620 werden die 64-Bit-Befehle (A und
B) abgerufen und in den Prefetchpuffer 640 gegeben.
-
[Zweiter Taktzyklus]
-
Die
beiden Befehle (A und B) im Prefetchpuffer 640 werden in
das erste Befehlsregister 641 bzw. das zweite Befehlsregister 642 gegeben
und im ersten Befehlsdecoder 644 sowie dem zweiten Befehlsdecoder 645 dekodiert.
Es wird dabei festgestellt, daß die
Befehle A, B ein Sprungbefehl bzw. ein arithmetischer Befehl sind,
weshalb Vorbereitungen getroffen werden, die beiden Befehle im nächsten Zyklus
gleichzeitig auszuführen.
In diesem Zyklus erfolgen, falls erforderlich, ein Registerauslesen
und eine Erweiterung der unmittelbaren Daten. Darüberhinaus erfolgt
in diesem Zyklus die Adressenberechnung des Sprungziels. Andererseits
werden die nächsten 64-Bit-Befehle
(C und D) aus dem Programmspeicher 620 abgerufen und in
den Prefetchpuffer 640 gegeben.
-
[Dritter Taktzyklus]
-
Der
im ersten Befehlsdecoder 644 dekodierte Befehl A (der Sprungbefehl)
und der im zweiten Befehlsdecoder 645 dekodierte Befehl
B (der arithmetische Befehl) werden ausgeführt. Wenn die Sprungbedingung
erfüllt
ist, wird der Prefetchpuffer 640 gelöscht und die im vorherigen
Zyklus erhaltene Adresse des Sprungziels dazu verwendet, wieder
einen Befehl abzurufen. Mit anderen Worten werden die nächsten 64-Bit-Befehle
(X und Y) aus dem Programmspeicher 620 abgerufen und in
den Prefetchpuffer 640 gegeben.
-
[Vierter Taktzyklus]
-
Das
Ergebnis der Ausführung
des Befehls B wird im Register gespeichert, und die im Prefetchpuffer 640 gespeicherten
beiden Befehle (X und Y) werden in das erste bzw. zweite Befehlsregister 641, 642 gegeben
und im ersten und zweiten Befehlsdecoder 644, 645 dekodiert.
Dabei erfolgen, falls erforderlich, in diesem Zyklus ein Registerauslesen
und eine Erweiterung der unmittelbaren Daten.
-
[Fünfter Taktzyklus]
-
Die
im ersten und zweiten Befehlsdecoder 644, 645 dekodierten
Befehle (X und Y) werden ausgeführt.
Danach folgt die gleiche Operation erneut.
-
Die 4(B) stellt die Pipeline-Verarbeitung dar, wenn
wie bei der vorliegenden Erfindung angegeben zwei Befehle gleichzeitig
ausgeführt
werden. Es wird angenommen, daß wie
in der 4(C) gezeigt im Programmspeicher 620 die
Befehle A bis F gespeichert sind. Der Befehl A sei ein arithmetischer Befehl
und der Befehl B ein LD-Befehl. Der Pipelineprozeß wird im
folgenden auf der Basis der Taktzyklen beschrieben.
-
[Erster Taktzyklus]
-
Aus
dem Programmspeicher 620 werden die 64-Bit-Befehle (A und
B) abgerufen und in den Prefetchpuffer 640 gegeben.
-
[Zweiter Taktzyklus]
-
Die
beiden Befehle (A und B) im Prefetchpuffer 640 werden in
das erste Befehlsregister 641 bzw. das zweite Befehlsregister 642 gegeben
und im ersten Befehlsdecoder 644 sowie dem zweiten Befehlsdecoder 645 dekodiert.
Es wird dabei festgestellt, daß die
Befehle A, B ein arithmetischer Befehl bzw. ein LD-Befehl sind,
weshalb Vorbereitungen getroffen werden, die beiden Befehle im nächsten Zyklus gleichzeitig
auszuführen.
In diesem Zyklus erfolgen, falls erforderlich, ein Registerauslesen
und eine Erweiterung der unmittelbaren Daten. Andererseits werden
die nächsten
64-Bit-Befehle (C und D) aus dem Programmspeicher 620 abgerufen
und in den Prefetchpuffer 640 gegeben.
-
[Dritter
Taktzyklus] Der im ersten Befehlsdecoder 644 dekodierte
Befehl A (der arithmetische Befehl) und der im zweiten Befehlsdecoder 645 dekodierte
Befehl B (der LD-Befehl) werden ausgeführt. Unter dem LD-Befehl wird
die effektive Adresse der Operandendaten berechnet. Andererseits
werden die im Prefetchpuffer 640 gespeicherten beiden Befehle
(C und D) in das erste bzw. zweite Befehlsregister 641, 642 gegeben
und im ersten und zweiten Befehlsdecoder 644, 645 dekodiert.
Falls erforderlich, erfolgen dabei in diesem Zyklus ein Registerauslesen
und eine Erweiterung der unmittelbaren Daten.
-
[Vierter Taktzyklus]
-
Das
Ergebnis der Ausführung
des Befehls A wird im Register gespeichert, und auf der Basis der effektiven
Adresse des Operanden des LD-Befehls wird auf den Datenspeicher 630 zugegriffen.
Andererseits werden die im ersten und zweiten Befehlsdecoder 644, 645 dekodierten
beiden Befehle (C und D oder X und Y) ausgeführt.
-
[Fünfter Taktzyklus]
-
Die
zugeführten
Daten werden unter dem LD-Befehl im Register gespeichert. Danach
folgt die gleiche Operation erneut.
-
Auf
den obigen Datenspeicher 630 konnte in einem Zyklus zugegriffen
werden. Wenn der Datenspeicher 630 jedoch ein Cache-Speicher
ist, kann es vorkommen, daß die
Daten, auf die zugegriffen werden soll, nicht im Cache-Speicher
liegen (Cache-Fehlgriff). Es sind dann weitere Zyklen erforderlich,
um auf den Hauptspeicher zuzugreifen. In dem obigen Beispiel konnte
auf den Datenspeicher 630 innerhalb eines Zyklusses zugegriffen
werden. Im Falle eines Cache-Fehlgriffs wird der erforderliche Zyklus als
Dummy-Ausführungszyklus
(Wartezyklus) zwischen den vierten und den fünften Taktzyklus eingefügt.
-
Auch
wenn in der folgenden Beschreibung davon ausgegangen wird, daß auf den
Datenspeicher 630 grundsätzlich in einem Zyklus zugegriffen werden
kann, kann gegebenenfalls immer ein zusätzlicher Dummy-Zyklus eingefügt werden.
-
Registerkonflikt zwischen
zwei arithmetischen Befehlen
-
Die 6(A) zeigt das Vorhandensein eines Registerkonflikts
zwischen zwei arithmetischen Befehlen. Im vorliegenden Fall wird
von der linken Seite des 64-Bit-Befehlsdatenbusses 622 ein
ADD-Befehl zugeführt
und von der rechten Seite davon ein OR-Befehl. Entsprechend dem
ADD-Befehl werden der Inhalt des Registers R1 und der Inhalt des
Registers R2 addiert und das Ergebnis wird im Register R3 gespeichert,
während
das ODER zwischen dem Register R5 und dem Register R3 erhalten wird
und im Register R4 gespeichert wird. Mit der vorliegenden Erfindung
kann der Registerkonflikt zwischen den beiden Befehlen erfaßt werden,
so daß die
Ausführung
in einem Zyklus unterdrückt
wird.
-
Der
von der linken Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte ADD-Befehl wird in das erste
Befehlsregister 641 eingegeben. Der gleichzeitig von der
rechten Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte OR-Befehl
wird in das zweite Befehlsregister 642 eingegeben. Der
erste Befehlsdecoder 644 dekodiert das OP-Codefeld 311 im
ersten Befehlsregister 641 und stellt fest, daß es ein arithmetischer
Befehl (ADD-Befehl)
ist, und der zweite Befehlsdecoder 645 dekodiert das OP-Codefeld 316 im
zweiten Befehlsregister 642 und stellt fest, daß es ein
arithmetischer Befehl (OR-Befehl) ist.
-
Anhand
der Dekodierergebnisse des ersten und zweiten Befehlsdecoders 644, 645,
die mit der Parallelbetrieb-Steuereinheit 646 verbunden
sind, wird festgestellt, daß die
beiden genannten Befehl im Prinzip parallel ausgeführt werden
können.
-
Der
Komparator 131 vergleicht das Zielfeld 312 im
ersten Befehlsregister 641 mit dem ersten Quellenfeld 319 des
zweiten Befehlsregisters 642, um eine gegenseitige Unvereinbarkeit
festzustellen. Außerdem
vergleicht der Komparator 132 das Zielfeld 312 im
ersten Befehlsregister 641 mit dem zweiten Quellenfeld 318 des
zweiten Befehlsregisters 642, um die gegenseitige Vereinbarkeit
festzustellen. Im Ergebnis stellt die Parallelbetrieb-Steuereinheit 646 anhand
des Ausgangssignals des Komparators 132 fest, daß die beiden
Befehle nicht im gleichen Zyklus parallel ausgeführt werden können, und
führt sie seriell
aus.
-
Zuerst
wird durch den ADD-Befehl entsprechend dem ersten Quellenfeld 313 des
ersten Befehlsregisters 641 der Inhalt des Registers R1
ausgelesen und entsprechend dem zweiten Quellenfeld 314 davon
der Inhalt des Registers R2. Die Arithmetik- und Logikeinheit 651 wird
dann dazu verwendet, die Summe dieser beiden Daten zu berechnen.
Das Ergebnis wird im Register R3 gespeichert, das vom Zielfeld 312 bezeichnet
wird. Die Arithmetik- und Logikeinheit 651 wird vom ersten
Decoder 644 zum Dekodieren des OP-Codes 311 des ersten Befehlsregisters 641 gesteuert.
-
Es
ist bei der vorliegenden Ausführungsform vorgesehen,
daß alle
arithmetischen Befehle in einem Zyklus ausgeführt werden.
-
Entsprechend
kann der nächste
Befehl uneingeschränkt
einen Zyklus später
aktiviert werden.
-
Daraufhin
wird durch den OR-Befehl entsprechend dem ersten Quellenfeld 319 des
zweiten Befehlsregisters 642 der Inhalt des Registers R5
ausgelesen und entsprechend dem zweiten Quellenfeld 318 davon
der Inhalt des Registers R3. Die Arithmetik- und Logikeinheit 652 wird
dann dazu verwendet, das ODER dieser beiden Daten zu bestimmen.
Das Ergebnis wird im Register R4 gespeichert, das vom Zielfeld 317 bezeichnet
wird. Die Arithmetik- und Logikeinheit 652 wird vom zweiten
Decoder 645 zum Dekodieren des OP-Codes 316 des
zweiten Befehlsregisters 642 gesteuert.
-
Bei
der vorliegenden Ausführungsform
erfolgt, wie mit Bezug zu der 4 beschrieben,
das Auslesen des Registers für
den OR-Befehl gleichzeitig mit der Ausführung des unmittelbar vorangehenden
ADD-Befehls. Aus diesem Grund enthält das Register R3 noch nicht
das Ergebnis der Ausführung des
ADD-Befehls.
-
Wenn
der Komparator 132 feststellt, daß die Registernummern identisch
sind, wird statt einem Auslesen aus der Registerbank 650 vorzugsweise eine
Bypasseinrichtung zum Eingeben des Ausgangssignals der Arithmetik-
und Logikeinheit 651 in das Ausgangsregister 659 und
gleichzeitig in das Eingangsregister 658 der Arithmetik-
und Logikeinheit 652 vorgesehen.
-
Auch
wenn zwischen den beiden gleichzeitig abgerufenen Befehlen ein Registerkonflikt
besteht, wird der Konflikt daher festgestellt und bei der obigen Ausführungsform
ein normaler Betrieb sichergestellt.
-
Buskonflikt zwischen zwei
Speicherbefehlen
-
Da
bei einem Speicherbefehl auf den Datenspeicher 630 zugegriffen
wird, kann zwischen den Zugriffsadressen von zwei Speicherbefehlen
auf dem Operandenadressenbus 631 ein Konflikt auftreten, wenn
die beiden Speicherbefehle parallel ausgeführt werden. Zur Lösung des
Problems werden die beiden Speicherbefehle dann seriell ausgeführt.
-
Die 6(B) zeigt die Operationen bei der seriellen Ausführung von
zwei aneinander anschließenden
Speicherbefehlen. Die LD-Befehle werden gleichzeitig von der linken
und der rechten Seite des 64-Bit-Befehlsdatenbusses 622 zugeführt. Der
Inhalt des Datenspeichers 630, der durch einen Zugriff
mit dem addierten Wert der Inhalte des Registers R1 und der unmittelbaren
Daten als Adresse erhalten wird, wird unter dem linken LD-Befehl im Register
R3 gespeichert, und der Datenspeicher 630, der durch einen
Zugriff mit dem addierten Wert der Inhalte des Registers R5 und
der unmittelbaren Daten als Adresse erhalten wird, wird unter dem
rechten LD-Befehl in das Register R4 gegeben. Die beiden Befehle
können
in dieser Ausführungsform
vor der Ausführung hintereinandergeschaltet
werden.
-
Der
von der linken Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte LD-Befehl
wird in das erste Befehlsregister 641 eingegeben. Der gleichzeitig
von der rechten Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte LD-Befehl
wird in das zweite Befehlsregister 642 eingegeben. Der
erste Befehlsdecoder 644 dekodiert das OP-Codefeld 321 des
ersten Befehlsregisters 641 und stellt fest, daß es ein Speicherbefehl
(LD-Befehl) ist, und der zweite Befehlsdecoder 645 dekodiert
das OP-Codefeld 326 des zweiten Befehlsregisters 642 und
stellt fest, daß es
auch ein Speicherbefehl (LD-Befehl) ist.
-
Anhand
der Dekodierergebnisse des ersten und zweiten Befehlsdecoders 644, 645,
die mit der Parallelbetrieb-Steuereinheit 646 verbunden
sind, wird festgestellt, daß die
beiden genannten Befehle prinzipiell nicht parallel ausgeführt werden
können.
-
Auf
der Basis dieser Feststellung unterdrückt bei der vorliegenden Ausführungsform
die Parallelbetrieb-Steuereinheit 646 die Ausführung der
beiden Befehle im gleichen Zyklus.
-
Wie
mit Bezug zu der 4 beschrieben, umfaßt der LD-Befehl
die Berechnung der Adresse im ersten Zyklus, den eigentlichen Speicherzugriff
im zweiten Zyklus und das Eingeben des Ergebnisses in das Zielregister
im dritten Zyklus.
-
Im
folgenden wird Zyklus für
Zyklus der Vorgang bei der Ausführung
der beiden Befehle beschrieben.
-
Im
ersten Zyklus liest der linke LD-Befehl entsprechend dem ersten
Quellenfeld 323 des ersten Befehlsregisters 641 den
Inhalt des Registers R1 aus und berechnet mit Hil fe der Arithmetik-
und Logikeinheit 651 einen Wert, der durch Addieren eines
Wertes mit 32 Bit Länge
dazu erhalten wird, der durch eine Vorzeichenerweiterung aus dem
unmittelbaren 16-Bit-Daten des zweiten Quellenfelds 324 erhalten wird.
Der sich ergebende Wert wird in das MAR 653 gegeben. Die
Arithmetik- und Logikeinheit 651 wird vom ersten Decoder 644 zum
Dekodieren des OP-Codes 321 des ersten Befehlsregisters 641 gesteuert.
-
Im
zweiten Zyklus liest der linke LD-Befehl den Inhalt des Speichers
mit dem MAR 653 als Adresse in den MDR 654 aus.
Der rechte LD-Befehl berechnet mit Hilfe der Arithmetik- und Logikeinheit 652 den
Wert, der durch Addieren eines Wertes mit 32 Bit Länge, der
durch eine Vorzeichenerweiterung aus dem unmittelbaren 16-Bit-Daten
des zweiten Quellenfelds 329 im zweiten Befehlsregister 642 erhalten
wird, zu dem von ersten Quellenfeld 328 des zweiten Befehlsregisters 642 bezeichneten
Register R5 erhalten wird, und gibt den sich ergebenden Wert in
das MAR 653. Die Arithmetik- und Logikeinheit 652 wird
vom zweiten Decoder 645 zum Dekodieren des OP-Codes 326 des
zweiten Befehlsregisters 642 gesteuert.
-
Im
dritten Zyklus gibt der linke LD-Befehl die aus dem MDR 654 ausgelesenen
Daten in das vom Zielfeld 322 des ersten Registers 641 bezeichnete Register
R3. Der rechte LD-Befehl liest den Inhalt des Datenspeichers 630 mit
dem MAR 653 als Adresse in den MDR 654 aus.
-
Im
vierten Zyklus gibt der rechte LD-Befehl die aus dem MDR 654 ausgelesenen
Daten in das vom Zielfeld 327 des zweiten Registers 642 bezeichnete
Register R4.
-
Wenn
gleichzeitig zwei Speicherbefehle zugeführt werden, wird dies bei der
gezeigten Ausführungsform
erfaßt,
und die Speicherbefehle werden dann seriell ausgeführt. Bei
der obigen Beschreibung ist das Zielregister des linken LD-Befehls
nicht das Quellenregister des rechten LD-Befehls. Wenn jedoch die
beiden Register identisch sind, erfaßt dies der Komparator 131 (Registerübereinstimmung,
Registerkonflikt). Unter Berücksichtigung
der Verzögerungslücke des
linken LD-Befehls fügt
die Parallelbetrieb-Steuereinheit 646 dann
eine Wartezeit von einem Zyklus ein, bevor mit dem Auslesen des
Registers für
den rechten LD-Befehl begonnen wird.
-
Auch
wenn eine Wartezeit von einem Zyklus eingefügt wird, werden jedoch das
Auslesen des Quellenregisters für
den rechten LD-Befehl und der Zugriff auf den Datenspeicher 630 für den linken LD-Befehl
gleichzeitig ausgeführt.
Folglich ist das Ergebnis der Ausführung des rechten LD-Befehls
noch nicht im Quellenregister für
den linken LD-Befehl
gespeichert. Wenn die Registernummern übereinstimmen und dies vom
Komparator 131 festgestellt wird, wird vorzugsweise eine
Bypasseinrichtung (nicht gezeigt) zum Eingeben der aus dem Datenspeicher 630 ausgelesenen
Daten in das Eingangsregister 657 der Arithmetik- und Logikeinheit 652 gleichzeitig
mit dem MDR 654 verwendet, statt das Auslesen aus der Registerbank 650 auszuführen, wenn
die Registernummern übereinstimmen
und dies vom Komparator 131 unter dem LD-Befehl ähnlich wie
in der 6(A) festgestellt wird.
-
Arithmetischer Befehl,
der das Ergebnis eines Speicherbefehls verwendet
-
Wie
bei der Ausführungsform
der 1 beschrieben, ist die erste Befehlsausführungseinheit 651 der 1 auf
die Verwendung bei einem arithmetischen Befehl und einem Sprungbefehl
beschränkt,
während
die zweite Befehlsausführungseinheit 652 auf
die Verwendung bei einem arithmetischen Befehl und einem Speicherbefehl
beschränkt ist.
-
Es
seien im ersten Befehlsregister 641 und im zweiten Befehlsregister 642 entgegen
den Voraussetzungen hinsichtlich der funktionellen Einschränkungen
ein Speicherbefehl und ein arithmetischer Befehl enthalten.
-
Die
beiden Befehle können
nicht parallel ausgeführt
werden, sondern müssen
seriell ausgeführt
werden.
-
Die 6(C) zeigt die Operationen bei der Ausführung eines
arithmetischen Befehls, der das Ergebnis eines Speicherbefehls verwendet.
Im diesem Fall wird von der linken Seite des 64-Bit-Befehlsdatenbusses 622 ein
LD-Befehl zugeführt
und von der rechten Seite des 64-Bit-Befehlsdatenbusses 622 ein
OR-Befehl. Unter dem LD-Befehl wird der Inhalt des Datenspeichers 630,
der durch einen Zugriff mit dem addierten Wert der Inhalte des Registers
R1 und der unmittelbaren Daten als Adresse erhalten wird, im Register
R3 gespeichert, während
unter dem OR-Befehl das ODER zwischen dem Register R5 und dem Register
R3 erhalten wird und das Ergebnis im Register R4 gespeichert wird.
Bei der vorliegenden Ausführungsform
können
diese beiden Befehle seriell ausgeführt werden.
-
Der
von der linken Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte LD-Befehl
wird in das erste Befehlsregister 641 eingegeben. Der gleichzeitig
von der rechten Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte OR-Befehl
wird in das zweite Befehlsregister 642 eingegeben. Der
erste Befehlsdecoder 644 dekodiert das OP-Codefeld 331 des
ersten Befehlsregisters 641 und stellt fest, daß es ein Speicherbefehl
(LD-Befehl) ist, und der zweite Befehlsdecoder 645 dekodiert
das OP-Codefeld 336 des zweiten Befehlsregisters 642 und
stellt fest, daß es
ein arithmetischer Befehl (OR-Befehl) ist.
-
Anhand
der Dekodierergebnisse des ersten und zweiten Befehlsdecoders 644, 645,
die mit der Parallelbetrieb-Steuereinheit 646 verbunden
sind, wird festgestellt, daß die
beiden genannten Befehle prinzipiell nicht parallel ausgeführt werden
können.
-
Der
Komparator 131 vergleicht das Zielfeld 332 des
ersten Befehlsregisters 641 mit dem ersten Quellenfeld 338 des
zweiten Befehlsregisters 642, um eine gegenseitige Unvereinbarkeit
festzustellen. Der Komparator 132 vergleicht das Zielfeld 332 des ersten
Befehlsregisters 641 mit dem zweiten Quellenfeld 339 des
zweiten Befehlsregisters 642, um die gegenseitige Vereinbarkeit
festzustellen. Wie bei der Ausführungsform
der 4 beschrieben, wird das Ergebnis
des LD-Befehls zwei Zyklen später
wirksam. Wenn versucht wird, das Ergebnis des LD-Befehls beim nächsten Befehl
zu verwenden, fügt
die Parallelbetrieb-Steuereinheit 646 eine Wartezeit von einem
Zyklus ein, bevor mit dem Auslesen des Registers für den nächsten Befehle
begonnen wird, und startet dann den nächsten Befehl.
-
Auf
der Basis der obigen Feststellung unterdrückt bei der vorliegenden Ausführungsform
die Parallelbetrieb-Steuereinheit 646 die Ausführung der beiden
Befehle im gleichen Zyklus.
-
Im
folgenden wird Zyklus für
Zyklus der Vorgang bei der Ausführung
der beiden Befehle beschrieben.
-
Im
ersten Zyklus liest der LD-Befehl entsprechend dem ersten Quellenfeld 333 des
ersten Befehlsregisters 641 den Inhalt des Registers R1
aus und gibt ihn in das Eingangsregister 655. In das Eingangsregister 656 wird
ein Wert mit 32 Bit Länge
eingegeben, der durch eine Vorzeichenerweiterung aus den unmittelbaren
16-Bit-Daten des zweiten Quellenfelds 334 erhalten wird.
-
Im
zweiten Zyklus wird die Arithmetik- und Logikeinheit 651 dazu
verwendet, eine Speicheradresse zu erhalten, die in das MAR 653 eingegeben wird.
Die Arithmetik- und Logikeinheit 651 wird vom ersten Decoder 644 zum
Dekodieren des OP-Codes 331 des ersten Befehlsregisters 641 gesteuert.
In diesem Zyklus wird kein neuer Befehl (im vorliegenden Fall der
OR-Befehl) ausgeführt,
und es wird einen Zyklus gewartet.
-
Im
dritten Zyklus liest der LD-Befehl den Inhalt des Datenspeichers 630 mit
dem MAR 653 als Adresse aus und gibt ihn in das MDR 654 ein.
-
Darüberhinaus
liest der OR-Befehl entsprechend dem ersten Quellenfeld 338 des
zweiten Befehlsregisters 642 den Inhalt des Registers R5
in das Eingangsregister 657 und entsprechend dem zweiten
Quellenfeld 339 des zweiten Befehlsregisters 642 den
Inhalt des Registers R3 in das Eingangsregister 658. Der
LD-Befehl aktualisiert den Inhalt des Registers R3 im nächsten Zyklus,
um ihn zu korrigieren. Wenn wie bei der Ausführungsform der 6(A) der Komparator 132 unter dem unmittelbar
dem LD-Befehl vorangehenden Befehl feststellt, daß die Registernummern übereinstimmen,
umfaßt
der unmittelbar vorhergehende Befehl wie bei der Ausführungsform der 6(A) die Funktion, die aus dem Datenspeichers 630 ausgelesenen
Daten in das MDR 654 einzulesen, statt sie aus der Registerbank 650 auszulesen,
und sie gleichzeitig zum B-seitigen Eingangsregister 658 der
Arithmetik- und Logikeinheit 652 zu leiten.
-
Im
vierten Zyklus gibt der LD-Befehl die aus dem MDR 654 ausgelesenen
Daten in das vom Zielfeld 332 des ersten Registers 641 bezeichnete
Register R3.
-
Der
OR-Befehl berechnet dann mit Hilfe der Arithmetik- und Logikeinheit 652 das
ODER zwischen den beiden Daten. Die Arithmetik- und Logikeinheit 652 wird
vom zweiten Decoder 645 zum Dekodieren des OP-Codes 336 des
zweiten Befehlsregisters 642 gesteuert.
-
Im
fünften
Zyklus wird das Ergebnis des OR-Befehls in dem vom Zielfeld 337 bezeichneten Register
R4 gespeichert.
-
Auch
wenn ein Befehl, der das Ergebnis eines Speicherbefehls verwendet,
und dieser Speicherbefehl gleichzeitig abgerufen werden, wird dies
erfindungsgemäß erfaßt, und
die Operationen werden normal seriell ausgeführt.
-
Sprungbefehl, der einen
arithmetischen Befehl verwendet
-
Wie
bei der Ausführungsform
der 1 beschrieben, ist die erste Befehlsausführungseinheit 651 der 1 auf
die Verwendung bei einem arithmetischen Befehl und einem Sprungbefehl
beschränkt,
während
die zweite Befehlsausführungseinheit 652 auf
die Verwendung bei einem arithmetischen Befehl und einem Speicherbefehl
beschränkt ist.
-
Es
seien im ersten Befehlsregister 641 und im zweiten Befehlsregister 642 entgegen
den Voraussetzungen hinsichtlich der funktionellen Einschränkungen
ein arithmetischer Befehl und ein Sprungbefehl enthalten.
-
Die
beiden Befehle können
nicht parallel ausgeführt
werden, sondern müssen
seriell ausgeführt
werden.
-
Die 6(D) zeigt die ausgeführten Operationen, wenn das
Ergebnis des arithmetischen Befehls die Sprungzieladresse des Sprungbefehls
ist.
-
Im
vorliegenden Fall wird von der linken Seite des 64-Bit-Befehlsdatenbusses 622 ein
ADD-Befehl zugeführt
und von der rechten Seite davon ein JUMP-Befehl.
-
Unter
dem ADD-Befehl werden der Inhalt des Registers R1 und der Inhalt
des Registers R2 addiert und das Ergebnis im Register R3 gespeichert. Der
Sprung erfolgt zu der Adresse, die im Register R3 angegeben ist.
-
Bei
der gezeigten Ausführungsform
wird der Konflikt zwischen den beiden Befehlregistern festgestellt
und die parallele Ausführung
der beiden Befehle in einem Zyklus unterdrückt.
-
Der
von der linken Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte ADD-Befehl wird in das erste
Befehlsregister 641 eingegeben und der gleichzeitig von
der rechten Seite des 64-Bit-Befehlsdatenbusses 622 zugeführe JUMP-Befehl
in das zweite Befehlsregister 642. Der erste Befehlsdecoder 644 dekodiert
das OP-Codefeld 341 des ersten Befehlsregisters 641 und
stellt fest, daß es
ein arithmetischer Befehl (ADD-Befehl) ist, und der zweite Befehlsdecoder 645 dekodiert
das OP-Codefeld 346 des zweiten Befehlsregisters 642 und
stellt fest, daß es
ein Sprungbefehl (JUMP-Befehl) ist.
-
Anhand
der Dekodierergebnisse des ersten und zweiten Befehlsdecoders 644, 645,
die mit der Parallelbetrieb-Steuereinheit 646 verbunden
sind, wird festgestellt, daß die
beiden genannten Befehl prinzipiell nicht parallel ausgeführt werden
können.
-
Der
Komparator 131 vergleicht das Zielfeld 342 des
ersten Befehlsregisters 641 mit dem ersten Quellenfeld 348 des
zweiten Befehlsregisters 642, um die gegenseitige Verträglichkeit
festzustellen. Die Parallelbetrieb-Steuereinheit 646 stellt
dann fest, daß die
beiden Befehle nicht parallel im gleichen Zyklus ausgeführt werden
können,
und führt
sie seriell aus.
-
Zuerst
liest der ADD-Befehl entsprechend dem ersten Quellenfeld 343 des
ersten Befehlsregisters 641 den Inhalt des Registers R1
aus und entsprechend dem zweiten Quellenfeld 344 davon
den Inhalt des Registers R2. Die Arithmetik- und Logikeinheit 651 wird
dann dazu verwendet, die Summe dieser beiden Daten zu berechnen.
Das Ergebnis wird in Register R3 gespeichert, das vom Zielfeld 342 bezeichnet
wird. Die Arithmetik- und Lo gikeinheit 651 wird vom ersten
Decoder 644 zum Dekodieren des OP-Codes 341 des
ersten Befehlsregisters 641 gesteuert.
-
Es
werden nun die Operationen des JUMP-Befehls beschrieben. In dieser
Ausführungsform
wird der Sprungbefehl normal in das erste Befehlsregister 641 eingegeben
und ausgeführt.
In dem Zyklus, der auf den Zyklus folgt, in dem der ADD-Befehl ausgeführt wird, überträgt die Parallelbetrieb-Steuereinheit 646 den
Inhalt des zweiten Befehlsregisters 642 (den JUMP-Befehl)
zum ersten Befehlregister 641 und beginnt mit der Ausführung des
JUMP-Befehls. Mit anderen Worten liest die Parallelbetrieb-Steuereinheit 646 entsprechend
einem ersten Quellenfeld 343' (nicht
gezeigt) den Inhalt des Registers R3 aus und führt mit dem Ergebnis als Sprungzieladresse
den nachfolgenden Befehlsabruf aus.
-
Der
Komparator 131 vergleicht vor der Ausführung des ADD-Befehls das Zielfeld 342 des
ersten Befehlsregisters 641 mit dem ersten Quellenfeld 348 des
zweiten Befehlsregisters 642, um die gegenseitige Verträglichkeit
festzustellen. Wie in der 4 gezeigt,
enthält
das Register R3 zum Zeitpunkt des Auslesens des Registers für den JUMP-Befehl
noch nicht das Ergebnis der Ausführung
des ADD-Befehls.
-
Wie
bei der 6(A) ist, wenn der Komparator 131 feststellt,
daß die
Registernummern übereinstimmen,
und wenn der rechte Befehl zur linken Seite des Befehlsregisters 641 übertragen
wird, anstelle des Auslesens der Registerbank 650 eine
Bypasseinrichtung (nicht gezeigt) zum Eingeben des Ausgangssignals
der Arithmetik- und Logikeinheit 651 in das Ausgangsregister 659 und
gleichzeitig in das Eingangsregister 655 der Arithmetik-
und Logikeinheit 651 vorgesehen.
-
Auch
wenn zwischen den beiden gleichzeitig zugeführten Befehlen ein Registerkonflikt
besteht und sogar wenn sich der Sprungbefehl nicht in der normalen
Position befindet, wird bei der gezeigten Ausführungsform nicht nur der Konflikt,
sondern auch die Position des Befehls festgestellt, um eine normale Operation
sicherzustellen.
-
Eingeben des Sprungzielbefehls
in das zweite Befehlsregister 642
-
Die 6(E) zeigt einen Sprung zu dem Befehl auf der
rechten Seite der 64-Bit-Befehlsbusses unter
dem Sprungbefehl. Von der rechten Seite des 64-Bit-Befehlsdatenbusses 622 wird
ein OR-Befehl zugeführt.
Unter dem OR-Befehl wird das ODER zwischen dem Register R5 und dem
Register R6 erhalten und im Register R4 gespeichert. Es wird somit
erfindungsgemäß verhindert,
daß die
beiden Befehle im gleichen Zyklus ausgeführt werden, wenn die Ausführung des
linken Befehls nicht erlaubt ist.
-
Der
von der rechten Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte OR-Befehl wird in das
zweite Befehlsregister 642 eingegeben.
-
Wenn
die Parallelbetrieb-Steuereinheit 646 bei dem unmittelbar
vorhergehenden Sprungbefehl feststellt, daß der Befehl zu der rechten
Seite des 64-Bit-Befehlsbusses springt, unterdrückt sie die Operation des ersten
Befehlsdecoders 644 und ignoriert den in das erste Befehlsregister 641 eingegebenen
Befehl. Der zweite Befehlsdecoder 645 deko diert das OP-Codefeld 356 des
zweiten Befehlsregisters 642 und stellt fest, daß es ein
arithmetischer Befehl (ein OR-Befehl) ist.
-
Die
Parallelbetrieb-Steuereinheit 646 stellt fest, daß der Befehl
im Prinzip in der Arithmetik- und Logikeinheit 652 der
rechten Seite ausgeführt
werden kann, und beginnt mit der Ausführung.
-
Der
OR-Befehl liest entsprechend dem ersten Quellenfeld 358 des
zweiten Befehlsregisters 642 den Inhalt des Registers R5
aus und entsprechend dem zweiten Quellenfeld 359 des zweiten
Befehlsregisters 642 den Inhalt des Registers R6. Der OR-Befehl
berechnet dann das ODER zwischen den beiden Daten und speichert
das Ergebnis im Register R4, das vom Zielfeld 357 bezeichnet
wird. Die Arithmetik- und Logikeinheit 652 wird vom zweiten
Decoder 645 zum Dekodieren des OP-Codes 356 des
zweiten Befehlsregisters 642 gesteuert.
-
Es
kann somit die Ausführung
des linksseitigen Befehls verhindert werden, wenn dieser Sprungbefehl
zu der rechten Seite des 64-Bit-Befehlsbusses springt.
-
Ausführung eines
Befehls in der Verzögerungsglücke
-
Die 6(F) zeigt die Operationen, die ausgeführt werden,
wenn ein unmittelbar vorangehender bedingter Sprungbefehl und der
unmittelbar auf den Sprungbefehl folgende Befehl zugeführt werden,
was zu dem Ergebnis führt,
daß der
linke Befehl in der Verzögerungslücke liegt.
-
Mit
anderen Worten wird der linke Befehl immer ausgeführt, unabhängig davon,
ob die Sprungbedingung des Sprungbefehls erfüllt ist oder nicht. Der rechte
Befehl wird dagegen wie beschrieben nur dann ausgeführt, wenn
die Sprungbedingung erfüllt ist.
-
Bei
dieser Ausführungsform
wird von der linken Seite des 64-Bit-Befehlsdatenbusses 622 ein ADD-Befehl
zugeführt
und von der rechten Seite davon ein OR-Befehl. Unter dem ADD-Befehl
in der Verzögerungslücke werden
der Inhalt des Registers R1 und der Inhalt des Registers R2 addiert,
und das Ergebnis wird im Register R3 gespeichert. Wenn die Bedingung
für den
Sprungbefehl nicht erfüllt
ist, wird unter dem OR-Befehl das ODER zwischen dem Register R5
und dem Register R6 berechnet und das Ergebnis im Register R4 gespeichert.
-
Wenn
die Bedingung für
den Sprung erfüllt ist,
wird der rechte Befehl unterdrückt,
während, wenn
die Bedingung nicht erfüllt
ist, die beiden Befehle gleichzeitig ausgeführt werden können.
-
Der
von der linken Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte ADD-Befehl wird in das erste
Befehlsregister 641 eingegeben und der gleichzeitig von
der rechten Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte OR-Befehl
in das zweite Befehlsregister 642. Der erste Befehlsdecoder 644 dekodiert
das OP-Codefeld 361 des ersten Befehlsregisters 641 und
stellt fest, daß es
ein arithmetischer Befehl (ADD-Befehl) ist, und der zweite Befehlsdecoder 645 dekodiert
das OP-Codefeld 366 des zweiten Befehlsregisters 642 und
stellt fest, daß es
auch ein arithmetischer Befehl (OR-Befehl) ist.
-
Anhand
der Dekodierergebnisse des ersten und zweiten Befehlsdecoders 644, 645,
die mit der Parallelbetrieb-Steuereinheit 646 verbunden
sind, wird festgestellt, daß die
beiden genannten Befehle im Prinzip parallel ausgeführt werden
können.
-
Der
Komparator 131 vergleicht das Zielfeld 362 des
ersten Befehlsregisters 641 mit dem ersten Quellenfeld 368 des
zweiten Befehlsregisters 642, um eine gegenseitige Unverträglichkeit
festzustellen. Der Komparator 132 vergleicht das Zielfeld 362 des ersten
Befehlsregisters 641 mit dem zweiten Quellenfeld 369 des
zweiten Befehlsregisters 642, um eine gegenseitige Unverträglichkeit
festzustellen.
-
Die
Parallelbetrieb-Steuereinheit 646 führt, wenn die Bedingung für den unmittelbar
vorhergehenden Sprungbefehl nicht erfüllt ist, die beiden Befehle
parallel aus. Wenn die Bedingung jedoch erfüllt ist, annulliert die Parallelbetrieb-Steuereinheit 646 den
zweiten Befehlsdecoder 645, unterdrückt die Ausführung des
rechten Befehls und führt
nur den linken Befehl aus.
-
Auch
wenn sich einer der gleichzeitig zugeführten Befehle in der Verzögerungslücke befindet, kann
somit in Abhängigkeit
von der Erfüllung/Nichterfüllung der
Sprungbedingung der andere Befehl aufgehoben werden, um eine normale
Operation sicherzustellen.
-
Befehl,
der das Zuführergebnis
des unmittelbar vorhergehenden LD-Befehls verwendet Die 6(G) zeigt die Operationen, wenn das Zuführergebnis
des unmittelbar vorhergehenden LD-Befehls verwendet wird. Im vorliegenden
Fall wird von der linken Seite des 64-Bit-Befehlsdatenbusses 622 ein ADD-Befehl
zugeführt
und von der rechten Seite davon ein OR-Befehl. Unter dem unmittelbar
vorhergehenden LD-Befehl werden Daten aus dem Datenspeicher 630 in
das Register R1 eingegeben. Unter dem folgenden ADD-Befehl werden der
Inhalt des Registers R1 und der Inhalt des Registers R2 addiert, und
das Ergebnis wird im Register R3 gespeichert. Unter dem OR-Befehl
wird das ODER zwischen dem Register R5 und dem Register R1 erhalten
und das Ergebnis im Register R4 gespeichert.
-
Wie
bei den 4 und 6(B) sowie 6(C) beschrieben, ist bei dieser Ausführungsform
in dem Zyklus, der unmittelbar auf die Ausführung des LD-Befehls folgt,
der Inhalt des Registers R1 nicht der richtige Inhalt. Folglich
wird in dem Fall, daß der
unmittelbar folgende Befehl einen Registerkonflikt mit sich bringt,
eine Wartezeit von einem Zyklus eingefügt.
-
Der
von der linken Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte ADD-Befehl wird in das erste
Befehlsregister 641 eingegeben und der gleichzeitig von
der rechten Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte OR-Befehl
in das zweite Befehlsregister 642. Der erste Befehlsdecoder 644 dekodiert
das OP-Codefeld 371 des ersten Befehlsregisters 641 und
stellt fest, daß es
ein arithmetischer Befehl (ADD-Befehl) ist, und der zweite Befehlsdecoder 645 dekodiert
das OP-Codefeld 376 des zweiten Befehlsregisters 642 und
stellt fest, daß es
auch ein arithmetischer Befehl (OR-Befehl) ist. Auf der Basis dieser
Feststellungen erkennt die Parallelbetrieb-Steuereinheit 646,
daß die
beiden Befehle im Prinzip parallel ausgeführt werden können.
-
Ein
Komparator 133 vergleicht das erste Quellenfeld 373 des
ersten Befehlsregisters 641 mit einem Verzögerungslastregister 647,
um die gegenseitige Verträglichkeit
festzustellen. Ein Komparator 134 vergleicht das zweite
Quellenfeld 374 des ersten Befehlsregisters 641 mit
dem Verzögerungslastregister 647,
um eine gegenseitige Unverträglichkeit
festzustellen.
-
Ein
Komparator 136 vergleicht das erste Quellenfeld 378 des
zweiten Befehlsregisters 642 mit einem Verzögerungslastregister 647,
um eine gegenseitige Unverträglichkeit
festzustellen. Ein Komparator 135 vergleicht das zweite
Quellenfeld 379 des zweiten Befehlsregisters 642 mit
dem Verzögerungslastregister 647,
um die gegenseitige Verträglichkeit festzustellen.
-
Die
Parallelbetrieb-Steuereinheit 646 fügt vor dem Start des ADD-Befehls
des ersten Befehlsregisters 641 und des OR-Befehls des
zweiten Befehlsregisters 642 eine Wartezeit von einem Zyklus ein.
Dann führt
die Parallelbetrieb-Steuereinheit 646 die beiden Befehle
parallel aus. Die Nummer des Zielregisters des LD-Befehls wird in
das Verzögerungslastregister 647 eingegeben.
-
Auch
wenn die beiden gleichzeitig zugeführten Befehle die aus einem
Speicher ausgelesenen Daten des unmittelbarvorhergehenden LD-Befehls nutzen,
wird bei der gezeigten Ausführungsform durch
Berücksichtigen
des Registerkonflikts eine normale Operation sichergestellt.
-
Es
wurde der Fall beschrieben, daß sowohl der
linke als auch der rechte Befehl das Ergebnis des unmittelbar vorangehenden
LD-Befehls verwenden. Die Parallelbetrieb-Steuereinheit 646 betreibt
die beiden Arithmetik- und Logikeinheiten 651, 652 wie
gewohnt parallel, wenn keiner davon das Ergebnis verwendet.
-
Wenn
nur der rechte Befehl das Ergebnis des LD-Befehls verwendet, wird
der linke Befehl zuerst ausgeführt
und dann der rechte Befehl ausgeführt, da mittlerweile der LD-Befehl abgeschlossen wurde.
-
Wenn
nur der linke Befehl das Ergebnis des LD-Befehls verwendet, werden
sowohl er linke als auch der rechte Befehl so gesteuert, daß sie wie
im Fall der 6(G) warten, um den Aufbau der
Parallelbetrieb-Steuereinheit 646 zu vereinfachen.
-
Ausnahmeprozesse
-
Die 7(A) zeigt die ausgeführten Operationen, wenn während der
Zeit, während
der zwei arithmetische Befehle gleichzeitig ausgeführt werden,
im linken Befehl eine Ausnahme auftritt.
-
Im
vorliegenden Fall wird von der linken Seite des 64-Bit-Befehlsdatenbusses 622 ein
ADD-Befehl zugeführt
und gleichzeitig von der rechten Seite davon ein OR-Befehl. Unter
dem ADD-Befehl werden der Inhalt des Registers R1 und der Inhalt
des Registers R2 addiert, und das Ergebnis wird im Register R3 gespeichert.
Unter dem OR-Befehl wird das ODER zwischen dem Register R5 und dem
Register R6 erhalten und im Register R4 gespeichert. Wenn während der
gleichzeitigen Ausführung
der beiden Befehle bei dem linken ADD-Befehl eine Ausnahme auftritt,
unterdrückt
die Parallelbetrieb-Steuereinheit 646 das Speichern des
Ergebnisses der Ausführung des
rechten OR-Befehls im Register, hebt die Ausführung des rechten OR-Befehls
auf und geht in den Zustand einer Ausnahmebehandlung.
-
Der
von der linken Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte ADD-Befehl wird in das erste
Befehlsregister 641 eingegeben und der gleichzeitig von
der rechten Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte OR-Befehl
in das zweite Befehlsregister 642. Der erste Befehlsdecoder 644 dekodiert
das OP-Codefeld 711 des ersten Befehlsregisters 641 und
stellt fest, daß es
ein arithmetischer Befehl (ADD-Befehl) ist, und der zweite Befehlsdecoder 645 dekodiert
das OP-Codefeld 716 des zweiten Befehlsregisters 642 und
stellt fest, daß es
auch ein arithmetischer Befehl (OR-Befehl) ist.
-
Auf
der Basis dieser Feststellungen erkennt die Parallelbetrieb-Steuereinheit 646,
daß die
beiden Befehle im Prinzip parallel ausgeführt werden können.
-
Der
Komparator 131 vergleicht das Zielfeld 712 des
ersten Befehlsregisters 641 mit dem ersten Quellenfeld 718 des
zweiten Befehlsregisters 642, um eine gegenseitige Unverträglichkeit
festzustellen. Der Komparator 132 vergleicht das Zielfeld 712 des ersten
Befehlsregisters 641 mit dem zweiten Quellenfeld 719 des
zweiten Befehlsregisters 642, um eine gegenseitige Unverträglichkeit
festzustellen. Auf der Basis dieser Feststellungen erkennt die Parallelbetrieb-Steuereinheit 646,
daß die
beiden Befehle parallel ausgeführt
werden können.
-
Mit
anderen Worten liest der ADD-Befehl entsprechend dem ersten Quellenfeld 713 des
ersten Befehlsregisters 641 den Inhalt des Registers R1
aus und entsprechend dem zweiten Quellenfeld 714 davon
den Inhalt des Registers R2. Die Arithmetik- und Logikeinheit 651 wird
dann dazu verwendet, die Summe dieser beiden Daten zu berechnen.
Das Ergebnis wird im Register R3 gespeichert, das vom Zielfeld 712 bezeichnet
wird. Die Arithmetik- und Logikeinheit 651 wird vom ersten
Decoder 644 zum Dekodieren des OP-Codes 711 des ersten Befehlsregisters 641 gesteuert.
Es wird angenommen, daß bei diesen
Operationen ein Überlauf
auftritt.
-
Der
OR-Befehl liest entsprechend dem ersten Quellenfeld 718 des
zweiten Befehlsregisters 642 den Inhalt des Registers R5
aus und entsprechend dem zweiten Quellenfeld 719 des zweiten
Befehlsregisters 642 den Inhalt des Registers R6. Die Arithmetik-
und Logikeinheit 652 wird dann dazu verwendet, das ODER
zwischen den beiden Daten zu bestimmen. Die Arithmetik- und Logikeinheit 652 wird
vom zweiten Decoder 645 zum Dekodieren des OP-Codes 716 des
zweiten Befehlsregisters 642 gesteuert. Die Parallelbetrieb-Steuereinheit 646 erfaßt das Auftreten
der Überlaufausnahme
im linken Befehl (dem ADD-Befehl) und verhindert, daß das Ergebnis
aus der Arithmetik- und Logikeinheit 651 im Register gespeichert
wird.
-
Die
Adresse des Befehls, in dem eine Ausnahme aufgetreten ist, wird
wie folgt gespeichert:
Zuerst wird die Befehlsadresse, auf
die im Programmspeicher 620 zugegriffen wird, in ein Prefetch-Befehlsadressenregister 701 eingegeben.
Die Adresse entspricht der Befehlsadresse, die in den Prefetch-Befehlspuffer 640 eingegeben
wird. Wenn der Befehl vom Prefetch-Befehlspuffer 640 zum
ersten Befehlsregister 641 und zum zweiten Befehlsregister 642 übertragen
wird, wird die Adresse des Befehls aus dem Prefetch-Befehlsadressenregister auch
in ein Ausnahme-Befehlsadressenregister 702 eingegeben.
Die in das Ausnahme-Befehlsadressenregister 702 eingegebene
Befehlsadresse ist die in das erste Befehlsregister 641 eingegebene
Befehlsadresse, und die in das zweite Befehlsregister 642 eingegebene
Befehlsadresse ist ein Wert, der durch Addieren von 4 zum Ausnahme-Befehlsadressenregister 702 erhalten
wird.
-
Wenn
die Ausnahme während
der Ausführung
des Befehls (ADD-Befehls) des ersten Befehlsregisters 641 auftritt,
gibt die Parallelbetrieb-Steuereinheit 646 den Wert des
Ausnahme-Befehlsadressenregisters 702 in ein Ausnahme-Befehlsadressenregister 703 ein.
Wenn die Ausnahme während
der Ausführung
des Befehls (OR-Befehls) des zweiten Befehlsregisters 642 auftritt,
addiert die Parallelbetrieb-Steuereinheit 646 zum Wert
des Ausnahme-Befehlsadressenregisters 702 den Wert 4 und
gibt den sich ergebenden Wert in das Ausnahme-Befehlsadressenregister 703 ein.
-
Wenn
eine Ausnahme auftritt, wird bei der vorliegenden Ausführungsform
die Adresse des Befehls mit der Ausnahme gespeichert, und der Prozessor
führt eine
vorgegebene Ausnahmeprozeßroutine aus.
Die Kopfadresse der Ausnahmeprozeßroutine ist vorgegeben, der
Wert wird von einem ROM 705 im Prozessor ausgelesen. Entsprechend
der Adresse erfolgt ein Vorauslesen der Befehle.
-
Da
die Ausnahmeprozeßroutine
auf Seiten des Nutzers erstellt wird, sind auf einer Nutzerbasis verschiedene
Prozeßverfahren
möglich.
Zum Beispiel kann der Nutzer über
die Adresse beim Auftreten der Ausnahme und den die Ausnahme verursachenden
Faktor informiert werden, so daß der
Nutzer das entsprechende Programm beenden und ein anderes ausführen kann.
Im Falle der 7(A) wird der Wert von EXPC 703 als
die Adresse beim Auftreten der Ausnahme angezeigt, und es wird darauf
hingewiesen, daß der
Ausnahmefaktor ein arithmetischer Überlauf war.
-
Erfindungsgemäß können auch
beim Auftreten einer Ausnahme in einem von zwei gleichzeitig ausgeführten Befehlen
die Befehlsadresse beim Auftreten der Ausnahme und der Prozeßstatus
festgehalten werden.
-
Die 7(B) zeigt die ausgeführten Operationen, wenn während der
gleichzeitigen Ausführung von
zwei Befehlen im rechten Befehl eine Ausnahme auftritt. Im vorliegenden
Fall wird von der linken Seite des 64-Bit-Befehlsdatenbusses 622 ein
ADD-Befehl zugeführt
und von der rechten Seite davon ein LD-Befehl. Unter dem ADD-Befehl
werden der Inhalt des Registers R1 und der Inhalt des Registers
R2 addiert, und das Ergebnis wird im Register R3 gespeichert. Der
Inhalt des Speichers wird mit der Summe des Registers R5 und den
unmittelbaren 16-Bit-Daten als Adresse abgerufen und das Ergebnis
im Register R4 gespeichert. Während
der Ausführung
der beiden Befehle speichert bei der gezeigten Ausführungsform
die Parallelbetrieb-Steuereinheit 646 das Ergebnis der
Ausführung
des linken ADD-Befehls, wenn im rechten LD-Befehl eine Ausnahme
auftritt, und hält
den Status des Befehls zum Zeitpunkt des Auftretens der Ausnahme
nach dem Beendigen der Verarbeitung des linken ADD-Befehls fest.
-
Der
von der linken Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte ADD-Befehl wird in das erste
Befehlsregister 641 eingegeben und der gleichzeitig von
der rechten Seite des 64-Bit-Befehlsdatenbusses 622 zugeführte LD-Befehl
in das zweite Befehlsregister 642. Der erste Befehlsdecoder 644 dekodiert
das OP-Codefeld 721 des ersten Befehlsregisters 641 und
stellt fest, daß es
ein arithmetischer Befehl (ADD-Befehl) ist, und der zweite Befehlsdecoder 645 dekodiert
das OP-Codefeld 726 des zweiten Befehlsregisters 642 und
stellt fest, daß es
ein Speicherbefehl (LD-Befehl) ist.
-
Auf
der Basis dieser Feststellungen erkennt die Parallelbetrieb-Steuereinheit 646,
daß die
beiden Befehle im Prinzip parallel ausgeführt werden können.
-
Der
Komparator 131 vergleicht das Zielfeld 722 des
ersten Befehlsregisters 641 mit dem ersten Quellenfeld 728 des
zweiten Befehlsregisters 642, um eine gegenseitige Unverträglichkeit
festzustellen. Der Komparator 132 vergleicht das Zielfeld 722 des ersten
Befehlsregisters 641 mit dem zweiten Quellenfeld 729 des
zweiten Befehlsregisters 642, um eine gegenseitige Unverträglichkeit
festzustellen. Auf der Basis dieser Feststellungen erkennt die Parallelbetrieb-Steuereinheit 646,
daß die
beiden Befehle parallel ausgeführt
werden können,
und führt
sie parallel aus.
-
Mit
anderen Worten liest der ADD-Befehl entsprechend dem ersten Quellenfeld 723 des
ersten Befehlsregisters 641 den Inhalt des Registers R1
aus und entsprechend dem zweiten Quellenfeld 724 davon
den Inhalt des Registers R2. Die Arithmetik- und Logikeinheit 651 wird
dann dazu verwendet, die Summe dieser beiden Daten zu berechnen.
Das Ergebnis wird im Register R3 gespeichert, das vom Zielfeld 722 bezeichnet
wird. Die Arithmetik- und Logikeinheit 651 wird vom ersten
Decoder 644 zum Dekodieren des OP-Codes 721 des ersten Befehlsregisters 641 gesteuert.
-
Der
LD-Befehl liest entsprechend dem ersten Quellenfeld 728 des
zweiten Befehlsregisters 642 den Inhalt des Registers R5
aus und erweitert die unmittelbaren 16-Bit-Daten im zweiten Quellenfeld 729 des
zweiten Befehlsregisters 642 auf 32 Bit Codelänge. Die
Arithmetik- und Logikeinheit 652 wird dann dazu verwendet,
die Summe der beiden Daten zu berechnen, sie wird vom zweiten Decoder 645 zum
Dekodieren des OP-Codes 726 des zweiten Befehlsregisters 642 gesteuert.
Mit der Summe als Adresse wird auf den Datenspeicher 630 zugegriffen.
-
Die
Adresse des Befehls, in dem eine Ausnahme aufgetreten ist, wird
wie folgt gespeichert: Da während
der Ausführung
des Befehls (LD-Befehls) des zweiten Befehlsregisters 642 eine
Ausnahme aufgetreten ist, addiert die Parallelbetrieb-Steuereinheit 646 den
Wert 4 zum Wert des Ausnahme-Befehlsadressenregisters 702 und
gibt den sich ergebenden Wert in das Ausnahme-Befehlsadressenregister 703 ein.
Es wird zwar angegeben, daß 4
zum Wert des Ausnahme-Befehlsadressenregisters 702 addiert
wird, es ist jedoch nur erforderlich, das dritte Bit auf der rechten
Seite von 0 auf 1 zu ändern,
da der Wert des Ausnahme-Befehlsadressenregisters 702 als
ein Vielfaches von 8 festgehalten wird. Mit anderen Worten ist keine
Operation zur Ausführung
eines Übertrags
erforderlich.
-
Mit
dem aus dem ROM 705 als Adresse ausgelesenen Wert führt der
Prozessor einen Befehlsvorabruf aus und damit eine vorgegebene Ausnahmeprozeßroutine.
-
Wie
im Fall der 7(A) zeigt der Inhalt der Ausnahmeprozeßroutine
zum Beispiel den Wert des EXPC 703 für die Adresse beim Auftreten
der Ausnahme und als Ausnahmefaktor einen Datenbuszugriffsfehler
(d.h. Busfehler) an.
-
Wenn
in einem von zwei gleichzeitig ausgeführten Befehlen eine Ausnahme
auftritt, wird erfindungsgemäß die Befehlsadresse
beim Auftreten der Ausnahme und der Prozeßstatus festgehalten.
-
Wie
beschrieben werden die Adressen des ersten Befehlsregisters 641 und
des zweiten Befehlsregisters 642 beide in dem einen Register 702 festgehalten,
was im Vergleich zu dem Fall, daß die Adressen des ersten Befehlsregisters 641 und
des zweiten Befehlsregisters 642 in getrennten Registern
festgehalten werden, zu einer Einsparung bei den Registern führt.
-
Bei
den gezeigten Ausführungsformen
ist das Befehlsformat jeweils restriktiv, wodurch die Befehlsdekodierung
erleichtert wird. Trotz zwei Befehlsdecodern wird dadurch der Umfang
der Schaltung verringert.
-
Da
sich die OP-Codes der Befehle zum Manipulieren der unmittelbaren
Daten nur durch ein Bit am linken Ende vom OP-Code der Befehle zum
Steuern der Register unterscheiden, kann bei den gezeigten Ausführungsformen
der Befehlsdecoder derart vereinfacht werden, daß die Befehlsdekodierung zum
Erzeugen des Steuersignal für
die Arithmetik- und Logikeinheit zum Beispiel gewöhnlich von
einem der Befehle ausgeführt
wird.
-
Da
nur ein Bit am linken Ende dazu verwendet wird, festzustellen, ob
die unmittelbaren Daten zu manipulieren sind, kann der Befehlsdecoder
zum Erzeugen des Signals zum Steuern der die unmittelbaren Daten
erzeugenden Schaltung vereinfacht werden.
-
Erfindungsgemäß wird somit
ein Befehlssteuersystem zum gleichzeitigen Ausführen von zwei Befehlen unter
Berücksichtigung
der Beziehung zwischen den vorangehenden oder folgenden Befehlen geschaffen.
-
Es
läßt sich
damit ein Datenprozessor schaffen, der eine Leistungsfähigkeit
aufweist, die doppelt so groß ist
wie die eines herkömmlichen
Systems zur Spitzenzeit.
-
Da
die beiden Befehle in einem Zyklus durch einen Bus zugeführt werden,
der so breit ist, daß die Daten
gleichzeitig übertragen
werden können,
ist die Belastung der Pipelinestufen gleichmäßig, wodurch die Hardwareschaltung
erfindungsgemäß effektiv ausgenutzt
wird.
-
Da
die Art der Befehle, die in der Befehlsausführungsschaltung parallel ausgeführt werden
können,
auf der Schaltungsbasis eingeschränkt ist, kann erfindungsgemäß der Umfang
der Befehlsausführungsschaltung
verringert werden.
-
Wenn
der auf einen Sprungbefehl folgende Befehl und der Sprungbefehl
gleichzeitig ausgeführt werden
können,
werden sie bei der gezeigten Ausführungsform auch gleichzeitig
ausgeführt,
wobei verhindert wird, daß gleichzeitig
in der Verzögerungslücke ein
weiterer Befehl ausgeführt
wird. Im Ergebnis ist die Ausführung
jedes herkömmlichen
Programms kompatibel möglich,
ohne daß ein
anderes Programm davon beeinträchtigt
wird.