DE69133571T2 - Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen - Google Patents

Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen Download PDF

Info

Publication number
DE69133571T2
DE69133571T2 DE69133571T DE69133571T DE69133571T2 DE 69133571 T2 DE69133571 T2 DE 69133571T2 DE 69133571 T DE69133571 T DE 69133571T DE 69133571 T DE69133571 T DE 69133571T DE 69133571 T2 DE69133571 T2 DE 69133571T2
Authority
DE
Germany
Prior art keywords
instruction
command
register
data
decoder
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69133571T
Other languages
English (en)
Other versions
DE69133571D1 (de
Inventor
Makoto Hanawa
Tadahiko Sagamihara-shi Nishimukai
Makoto Niiza-shi Suzuki
Katsuhiro Musashimurayama-shi Shimohigashi
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Application granted granted Critical
Publication of DE69133571D1 publication Critical patent/DE69133571D1/de
Publication of DE69133571T2 publication Critical patent/DE69133571T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units

Description

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

Claims (5)

  1. Datenprozessor zur selektiven gleichzeitigen parallelen Ausführung von wenigstens zwei Befehlen auf einen bedingten Sprungbefehl hin, mit einer Befehlsabrufeinheit (640), die aus einem Speicher (620) einen ersten Befehl mit einem Zielfeld und einen auf den ersten Befehl folgenden zweiten Befehl mit einem Quellenfeld abruft, wobei der erste Befehl unmittelbar nach der Zuführung des bedingten Sprungbefehls zum Datenprozessor aus dem Speicher abgerufen wird, und zur parallelen Ausgabe des ersten Befehls und des zweiten Befehls; einem ersten Befehlsdecoder (644) mit einem Eingang, dem der vom der Befehlsabrufeinheit (640) ausgegebene erste Befehl zugeführt wird, wobei der erste Befehlsdecoder (644) den ersten Befehl dekodiert und ein erstes Dekodierergebnis ausgibt; einem zweiten Befehlsdecoder (645) mit einem Eingang, dem der vom der Befehlsabrufeinheit (640) ausgegebene zweite Befehl zugeführt wird, wobei der zweite Befehlsdecoder (645) den zweiten Befehl dekodiert und ein zweites Dekodierergebnis ausgibt; einer ersten Befehlsausführungseinheit (651), die entsprechend dem ersten Dekodierergebnis des ersten Befehlsdecoders (644) gesteuert wird; einer zweiten Befehlsausführungseinheit (652), die entsprechend dem zweiten Dekodierergebnis des zweiten Befehlsdecoders (645) gesteuert wird; einem Komparator (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, wobei der Komparator (131, 132) ein Ausgangssignal erzeugt, 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; wobei der Datenprozessor des weiteren eine Parallelbetrieb-Steuereinheit (646) umfaßt, die mit dem ersten Befehlsdecoder (644), dem zweiten Befehlsdecoder (645), der ersten Befehlsausführungseinheit (651), der zweiten Befehlsausführungseinheit (652) und dem Komparator (131, 132) verbunden ist, wobei die Parallelbetrieb-Steuereinheit (646) dafür vorgesehen ist, bei nicht kompatiblen ersten und zweiten Befehlen ein Parallelbetrieb-Unterdrückungssignal zu erzeugen; dadurch gekennzeichnet, daß der Datenprozessor den ersten Befehl unabhängig von der Bedingung des bedingten Sprungbefehls unbedingt ausführt; und daß die Parallelbetrieb-Steuereinheit (646) ein Parallelbetrieb-Unterdrückungssignal erzeugt, wenn die Bedingung des bedingten Sprungbefehls erfüllt ist oder das Ausgangssignal des Komparators vorliegt, das die Ausführung des zweiten Befehls in der zweiten Befehlsausführungseinheit (652) verhindert; und die parallele Ausführung des ersten Befehls in der ersten Befehlsausführungseinheit (651) und des zweiten Befehls in der zweiten Befehlsausführungseinheit (652) bei Abwesenheit des Parallelbetrieb-Unterdrückungs signals veranlaßt, wenn die Bedingung des unmittelbar vorhergehenden bedingten Sprungbefehls nicht erfüllt ist und kein Ausgangssignal vom Komparator (131, 132) vorliegt.
  2. Datenprozessor nach Anspruch 1, wobei der Prozessor des weiteren eine Registerbank (650) mit einer Anzahl von Registern (R0 ... R31) umfaßt, und wobei, wenn das von den Daten im Zielfeld im ersten Verzögerungslückenbefehl bezeichnete Register mit dem Register übereinstimmt, das von den Daten im Quellenfeld des zweiten Befehls bezeichnet wird, das Ausgangssignal des Komparators (131, 132) die parallele Ausführung des ersten Verzögerungslückenbefehls und des zweiten Befehls in der ersten und der zweiten Befehlsausführungseinheit (651, 652) unterdrückt.
  3. Datenprozessor nach Anspruch 1 oder 2, wobei die Befehlslänge des ersten Verzögerungslückenbefehls und des zweiten Befehls mit einer vorgegebenen Bitlänge feststeht, und wobei der Datenprozessor für einen RISC-Computer vorgesehen ist.
  4. Datenprozessor nach einem der Ansprüche 1 bis 3, wobei der Speicher wenigstens einen Hauptspeicher oder einen Cache-Speicher umfaßt.
  5. Datenprozessor nach Anspruch 1, wobei die Parallelbetrieb-Steuereinheit (646) eine Einrichtung umfaßt, die das Dekodierergebnis für den zweiten Befehl des zweiten Befehlsdecoders (645) freigibt, so daß parallel (i) der erste Verzögerungslückenbefehl in der ersten Befehlsausführungseinheit (651) und (ii) der zweite Befehl in der zweiten Befehlsausführungseinheit (652) ausgeführt werden, wenn die Bedingung des vorhergehenden bedingten Sprungbefehls nicht erfüllt ist.
DE69133571T 1990-08-15 1991-07-15 Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen Expired - Lifetime DE69133571T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP21426090 1990-08-15
JP2214260A JP2834292B2 (ja) 1990-08-15 1990-08-15 データ・プロセッサ

Publications (2)

Publication Number Publication Date
DE69133571D1 DE69133571D1 (de) 2007-07-05
DE69133571T2 true DE69133571T2 (de) 2007-09-06

Family

ID=16652806

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69133571T Expired - Lifetime DE69133571T2 (de) 1990-08-15 1991-07-15 Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen

Country Status (5)

Country Link
US (1) US5381531A (de)
EP (1) EP0471191B1 (de)
JP (1) JP2834292B2 (de)
KR (2) KR100254008B1 (de)
DE (1) DE69133571T2 (de)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5787303A (en) * 1991-10-31 1998-07-28 Kabushiki Kaisha Toshiba Digital computer system capable of processing a plurality of instructions in parallel based on a VLIW architecture
JP3182591B2 (ja) * 1993-01-20 2001-07-03 株式会社日立製作所 マイクロプロセッサ
JP3207591B2 (ja) * 1993-03-19 2001-09-10 株式会社日立製作所 キャッシュメモリを有する計算機の改良
CA2123442A1 (en) * 1993-09-20 1995-03-21 David S. Ray Multiple execution unit dispatch with instruction dependency
JPH07200289A (ja) * 1993-12-28 1995-08-04 Fujitsu Ltd 情報処理装置
JPH07281893A (ja) * 1994-04-15 1995-10-27 Internatl Business Mach Corp <Ibm> 処理システム及び演算方法
US5928357A (en) * 1994-09-15 1999-07-27 Intel Corporation Circuitry and method for performing branching without pipeline delay
US5931941A (en) * 1995-04-28 1999-08-03 Lsi Logic Corporation Interface for a modularized computational unit to a CPU
JPH0991136A (ja) * 1995-09-25 1997-04-04 Toshiba Corp 信号処理装置
US5826054A (en) * 1996-05-15 1998-10-20 Philips Electronics North America Corporation Compressed Instruction format for use in a VLIW processor
US5796997A (en) * 1996-05-15 1998-08-18 Hewlett-Packard Company Fast nullify system and method for transforming a nullify function into a select function
US8583895B2 (en) * 1996-05-15 2013-11-12 Nytell Software LLC Compressed instruction format for use in a VLIW processor
JP3431397B2 (ja) * 1996-05-23 2003-07-28 東芝マイクロエレクトロニクス株式会社 命令キュー
US5878242A (en) * 1997-04-21 1999-03-02 International Business Machines Corporation Method and system for forwarding instructions in a processor with increased forwarding probability
JP2002532775A (ja) * 1998-12-08 2002-10-02 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ インタープリタプログラム実行方法
WO2001025900A1 (en) * 1999-10-06 2001-04-12 Cradle Technologies Risc processor using register codes for expanded instruction set
US6834337B1 (en) 2000-09-29 2004-12-21 International Business Machines Corporation System and method for enabling multiple signed independent data elements per register
US7039906B1 (en) 2000-09-29 2006-05-02 International Business Machines Corporation Compiler for enabling multiple signed independent data elements per register
JP3683248B2 (ja) * 2002-10-22 2005-08-17 富士通株式会社 情報処理装置及び情報処理方法
WO2004097625A2 (en) * 2003-04-29 2004-11-11 Koninklijke Philips Electronics N.V. Zero overhead branching and looping in time-stationary processors
US9672037B2 (en) * 2013-01-23 2017-06-06 Apple Inc. Arithmetic branch fusion
KR20200111412A (ko) 2019-03-19 2020-09-29 배성주 밥알의 건조 및 갈변현상을 방지하는 수분 조절장치가 구비된 전기밥솥
KR102262151B1 (ko) 2019-03-19 2021-06-07 배성주 밥알의 건조 및 갈변현상을 방지하는 수분 조절장치가 구비된 전기밥솥

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3718912A (en) * 1970-12-22 1973-02-27 Ibm Instruction execution unit
US4755966A (en) * 1985-06-28 1988-07-05 Hewlett-Packard Company Bidirectional branch prediction and optimization
JPH06100968B2 (ja) * 1986-03-25 1994-12-12 日本電気株式会社 情報処理装置
EP0239081B1 (de) * 1986-03-26 1995-09-06 Hitachi, Ltd. Datenprozessor in Pipelinestruktur mit der Fähigkeit mehrere Befehle parallel zu dekodieren und auszuführen
JPS63131230A (ja) * 1986-11-21 1988-06-03 Hitachi Ltd 情報処理装置
JPH0810430B2 (ja) * 1986-11-28 1996-01-31 株式会社日立製作所 情報処理装置
EP0354740B1 (de) * 1988-08-09 1996-06-19 Matsushita Electric Industrial Co., Ltd. Datenverarbeitungsgerät zur parallelen Dekodierung und parallelen Ausführung von Befehlen mit variabler Wortlänge
JP2810068B2 (ja) * 1988-11-11 1998-10-15 株式会社日立製作所 プロセッサシステム、コンピュータシステム及び命令処理方法
US5072364A (en) * 1989-05-24 1991-12-10 Tandem Computers Incorporated Method and apparatus for recovering from an incorrect branch prediction in a processor that executes a family of instructions in parallel
JP2816248B2 (ja) * 1989-11-08 1998-10-27 株式会社日立製作所 データプロセッサ
US5150470A (en) * 1989-12-20 1992-09-22 International Business Machines Corporation Data processing system with instruction queue having tags indicating outstanding data status
US5185868A (en) * 1990-01-16 1993-02-09 Advanced Micro Devices, Inc. Apparatus having hierarchically arranged decoders concurrently decoding instructions and shifting instructions not ready for execution to vacant decoders higher in the hierarchy

Also Published As

Publication number Publication date
EP0471191A2 (de) 1992-02-19
JPH0496825A (ja) 1992-03-30
EP0471191A3 (en) 1992-11-19
US5381531A (en) 1995-01-10
JP2834292B2 (ja) 1998-12-09
KR100254008B1 (ko) 2000-04-15
KR970005021A (ko) 1997-01-29
KR920004964A (ko) 1992-03-28
KR100254007B1 (ko) 2000-04-15
EP0471191B1 (de) 2007-05-23
DE69133571D1 (de) 2007-07-05

Similar Documents

Publication Publication Date Title
DE69133571T2 (de) Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen
DE68929483T2 (de) Datenprozessor mit einer Befehlseinheit, die einen Cachespeicher und einen ROM aufweist.
DE69534113T2 (de) Kompression der Befehlswörter eines Rechners
DE2855106C2 (de) Einrichtung zur Durchführung von bedingten Verzweigungen
DE2411963C3 (de) Elektronische Datenverarbeitungsanlage mit einer Prioritätssteuerschaltung mit änderbaren Steuerblöcken
DE4206062C2 (de) Pipelineverarbeitung von Instruktionen
DE3116100C2 (de) Datenverarbeitungseinheit
DE3119741C2 (de) Datenverarbeitungseinheit
DE69833008T2 (de) Prozessor mit instruktionskodierung mittels eines schablonenfeldes
DE2846495C2 (de) Zentraleinheit
DE69820027T2 (de) Vorrichtung zur ausführung virtueller maschinenbefehle
DE19527031C2 (de) Verzweigungsprozessor für ein Datenverarbeitungssystem und Verfahren zum Betreiben eines Datenverarbeitungssystems
DE69730276T2 (de) Vorrichtung und Verfahren zur Erleichterung der Vermeidung von exzeptionellen bestimmten Zuständen während des Ablaufs eines Programmes
DE2430127C2 (de) Einrichtung zur Steuerung des Speicherzugriffs konkurrierender Benutzer
DE3424962C2 (de)
DE2847934A1 (de) Datenverarbeitungseinrichtung mit einem mikrobefehlsspeicher
DE4301417A1 (de)
DE2230102A1 (de) Rechenwerk fuer variable wortlaengen
WO1994022079A1 (de) Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren
DE69835425T2 (de) Verbesserter befehlszuteilungsmechanismus für eine geschützte vliw-architektur
DE2353258A1 (de) Datenverarbeitungssystem
DE19983098B4 (de) Mehrfach-Bitanzeige zur Behandlung von Schreib-nach-Schreib-Fehlern und zur Eliminierung von Bypass-Komparatoren
DE3900246C2 (de)
DE4134392C2 (de) Verfahren und Vorrichtung zum Ungültigmachen von Befehlen in Geräten mit Parallelverarbeitung
DE69824032T2 (de) Computer-prozessor und verfahren zum kontinuierlichen schreiben und lesen von daten

Legal Events

Date Code Title Description
8364 No opposition during term of opposition