-
HINTERGRUND
DER ERFINDUNG
-
Gebiet der Erfindung
-
Die vorliegende Erfindung bezieht
sich auf VLIW-(sehr langes Instruktionswort)Prozessoren und insbesondere
auf einen VLIW-Prozessor,
der einen komprimierten Programmcode ausführt, eine Codekompressionseinrichtung,
die einen Programmcode komprimiert, ein Codekompressionsverfahren
und ein Medium, auf dem ein Codekompressionsprogramm aufgezeichnet
wird.
-
Beschreibung
der Hintergrundstechnik
-
Es hat zunehmend der Anforderungen
für verbesserte
Prozessorleistung auf verschiedenen Gebieten wie Multimediaverarbeitung
und Verarbeitung hochaufgelöster
Bilder gegeben. Die gegenwärtige
LSI-(Integration auf großem
Maßstab)Herstellungstechnik
weist eine Grenze beim Erzielen höherer Einrichtungsgeschwindigkeit
auf. Daher haben VLIW-Prozessoren die Aufmerksamkeit angezogen und
sind aktiv untersucht und entwickelt worden.
-
Der VLIW-Prozessor, der eine Mehrzahl
von Verarbeitungseinheiten enthält,
zielt auf die Verbesserung der Leistung eines programmgesteuerten
Prozessors durch Ausführen
einer Mehrzahl von Instruktionen in dem gleichen Zyklus und somit
Vergrößerung der
Parallelität.
Bei dem VLIW-Prozessor ist eine Verarbeitungseinheit entsprechend
einem Instruktionsfeld vorbestimmt, und daher werden nicht alle
Instruktionsslots mit gültigen
Instruktionen gefüllt.
Somit wird eine nop-(keine Tätig keit)Instruktion
als eine ungültige
Instruktion in einen Code eingefügt,
was in dem wesentlichen Problem niedriger Codedichte resultiert.
-
Der VLIW-Prozessor, bei dem zwei
Instruktionen simultan ausgegeben werden, kann nicht simultan "load mem (100) → R1" und "add R1, R2 → R3" ausführen, wie
in dem Codebeispiel 1 unten gezeigt ist.
-
-
Im folgenden werden die Ausdrücke "Instruktion" und "Unterinstruktion" zum Bezeichnen des
gleichen Gegenstandes benutzt, im Gegensatz zu VLIW (siehe unten).
-
Da eine von ihnen eine Instruktion
zum Laden eines Wertes in ein Register R1 ist und die andere eine Instruktion
zum Bezugnehmen auf den Wert des gleichen Registers R1 ist, können diese
Instruktionen nicht zur gleichen Zeit ausgeführt werden. In diesem Fall
wird eine nop-Instruktion eingeführt,
wie in dem Codebeispiel 1 gezeigt ist. In der folgenden Beschreibung
wird eine lange Instruktion, die durch Kombinieren zweier Instruktionen
gebildet wird, eine VLIW-(sehr langes Instruktionswort)Instruktion
genannt, und jede Instruktion, die in der VLIW-Instruktion enthalten
ist (load-, nop- und add-Instruktionen in dem Codebeispiel 1) wird
eine Unterinstruktion oder eine Instruktion genannt.
-
Erfindungen, die in H. Sato, T. Yoshida,
M. Matsuo, T. Kengaku und K. Tsuchihashi: "A Dual-Issue RISC Processor for Multimedia
Signal Processing",
IEICE Trans. Elektron., Bd. E81-C, Nr. 9, Sept. 1998 und der japanischen
Patentoffenlegungsschrift 9-84004
offenbart sind, sind zum Lösen
des obigen Problemes gerichtet. Zusätzlich zu diesen Instruktionen
wird Codekompression durch Trennen einer VLIW-Instruktion, die Instruktionen
enthält,
die ursprünglich
zu der gleichen Zeit auszuführen
sind, in zwei Unterinstruktionen und Ausführen der Unterinstruktionen
ausgeführt.
Mit anderen Worten, "load
mem (100) → R1" und "add R1, R2 → R3" werden als eine
VLIW-Instruktion beschrieben, und die VLIW-Instruktion wird in zwei
Zyklen während
der Ausführung
unterteilt zum getrennten Ausführen
der Unterinstruktionen, wie in dem Codebeispiel 2 unten gezeigt
ist.
-
-
Für
diese Operation werden FM-(Format-spezifierende)Bit zwei niedrigstwertigen
Bit der 32-Bit VLIW-Instruktion zugeordnet, und die Instruktion
wird durch den Prozessor auf die folgende Weise gemäß dem FM-Bitmuster
ausgeführt.
- (1) FM = 00 : gleichzeitiges Ausführen zweier
Unterinstruktionen
- (2) FM = 01 : Ausführen
der linken Unterinstruktion und dann Ausführen der rechten Unterinstruktion
- (3) FM = 10 : Ausführen
der rechten Unterinstruktion und dann Ausführen der linken Unterinstruktion
- (4) FM = 11 : Ausführen
der zwei Unterinstruktionen durch Betrachten der zwei Unterinstruktionen
als eine lange Instruktion.
-
Da der Betriebsmodus in dem Fall
FM = 11 irrelevant für
die vorliegende Erfindung ist, wird er nicht im einzelnen beschrieben. 1 zeigt schematisch Beziehungen
zwischen FM-Bit
und Instruktionsausführung.
-
Das Codebeispiel 1 wird unten als
Codebeispiel 3 beschrieben.
-
-
Beim Ausführen des Codebeispiels 3 führt ein
Prozessor Instruktionen aus, wie sie in dem Ausführungssequenzbeispiel 1 gezeigt
sind.
-
Ausführungssequenzbespiel
1:
-
In dem zweiten Zyklus nimmt eine
arithmetische Einheit entsprechend der Addierinstruktion den Nichtbetriebszustand
an und führt
im wesentlichen die gleiche Tätigkeit
wie bei der Ausführung
der nop-Instruktion aus. In dem 2'-ten Zyklus nimmt eine arithmetische
Einheit entsprechend der Ladeinstruktion den Nichttätigkeitszustand
an und führt
im wesentlichen die gleiche Tätigkeit
wie das Ausführen
der nop-Instruktion aus.
-
Daher ist das Ausführungssequenzbesipiel
1 äquivalent
zu der Ausführung
der Codebeispiels 1. Da Instruktionen in einem Instruktionsspeicher
in dem Format des Codebeispiels 3 gespeichert sind, werden sie auf
2/3-faches der Kapazität
im Vergleich mit dem Codebeispiel 1 komprimiert.
-
Bei dem obigen herkömmlichen
VLIW-Prozessor kann die Reihenfolge des Beschreibens der Unterinstruktionen
freier bestimmt werden, und die Codedichte kann durch Addieren von
FM-Bit zu einer VLIW-Instruktion verbessert werden. Da die FM-Bit
zu 2 Bit eines Instruktionsfeldes zugeordnet sind, ist jedoch die
Zahl der Instruktionstypen begrenzt. Weiterhin müssen die Instruktionen vor
der Instruktionsdecodierung abgebildet werden, was die Schaltungsverzögerung vergrößert.
-
Da der Austauschabschnitt eine Mehrzahl
von Unterinstruktionen austauscht und sie in eine Mehrzahl von Containern
eingibt, kann ein komprimierter Code in solch einer Ausführungssequenz
ausgeführt
werden, die vor der Kompression genommen wird.
-
Aus dem US-Patent 5 475 824 kann
ein VLIW-Prozessor gemäß dem Oberbegriff
des Anspruchs 1 entnommen werden. Wenn eine Operantstörung auftritt,
wird zuerst eine mov-Instruktion an eine erste Pipe ausgegeben,
während
eine nop-Instruktion an eine zweite Pipe ausgegeben wird. Eine ADD-Instruktion
wird an die erste Pipe in dem folgenden Zyklus ausgegeben. Eine
Instruktion auf diese ADD-Instruktion folgend wird zu der zweiten
Pipe ausgegeben. Eine sequentielle Reihenfolge der Schritte wird
ausgeführt.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Es ist eine Aufgabe der vorliegenden
Erfindung, einen VLIW-Prozessor
vorzusehen, der ein komprimiertes Programm in solch einer Ausführungssequenz
verarbeiten kann, die vor der Kompression genommen wird, ohne daß spezielle
Bit einem Instruktionsfeld zugeordnet werden, das bevorzugt dem
VLIW-Verfahren von mindestens drei Wegen entspricht, das ein komprimiertes
Programm in solch einer Ausführungssequenz ausführen kann,
die vor der Kompression genommen wird, und das bevorzugte dem zwei
n-Wege-VLIW-Verfahren entspricht, das ein komprimiertes Programm
in solch einer Ausführungssequenz
verarbeiten kann, die vor der Kompression genommen wird.
-
Solch eine Aufgabe wird gelöst durch
einen VLIW-Prozessor nach Anspruch 1.
-
Bevorzugte Ausgestaltungen der Erfindung
sind in den abhängigen
Ansprüchen
angegeben.
-
Die vorangehenden und andere Aufgaben,
Merkmale, Aspekte und Vorteile der vorliegenden Erfindung werden
ersichtlicher aus der folgenden detaillierten Beschreibung der vorliegenden
Erfindung, wenn sie in Zusammenhang mit den begleitenden Zeichnungen
genommen wird.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
1 zeigt
schematisch die Beziehung zwischen FM-Bit, die bei einem herkömmlichen
VLIW-Verfahren benutzt werden, und der Instruktionsausführung.
-
2 zeigt
schematisch einen VLIW-Prozessor in einer ersten Ausführungsform.
-
3 ist
ein Blockschaltbild, das einen schematischen Aufbau des VLIW-Prozessors
in der ersten Ausführungsform
zeigt.
-
4 ist
ein Blockschaltbild, das einen schematischen Aufbau eines VLIW-Prozessors
in einer zweiten Ausführungsform
zeigt.
-
5 ist
ein Blockschaltbild, das einen schematischen Aufbau einer Codekompressionseinrichtung
in einer vierten Ausführungsform
zeigt.
-
6 ist
ein Flußdiagramm
zum Beschreiben einer Verarbeitungsprozedur der Codekompressionseinrichtung
in der vierten Ausführungsform.
-
7 zeigt
ein Beispiel der externen Ansicht der Codekompressionseinrichtung
in der vierten Ausführungsform.
-
8 ist
ein schematischer Aufbau eines in 7 gezeigten
Computers 41.
-
9 zeigt
schematisch einen VLIW-Prozessor in einer sechsten Ausführungsform.
-
10 zeigt
schematisch einen VLIW-Prozessor in einer siebten Ausführungsform.
-
11 zeigt
einen schematischen Aufbau des VLIW-Prozessors in der siebten Ausführungsform.
-
BESCHREIBUNG
DER BEVORZUGTEN AUSFÜHRUNGSFORMEN
-
Erste Ausführungsform
-
Ein VLIW-Prozessor in einer ersten
Ausführungsform
der vorliegenden Erfindung wird im folgenden beschrieben. In dieser
Ausführungsform
benutzte Begriffe werden zuerst beschrieben. Ein "Hauptzyklus" bezieht sich auf
einen Zyklus, wenn eine Instruktion ausgegeben ist, das heißt ein Zyklus,
in dem Schrittnummern nur durch Nummern in einer Ausführungssequenz
bezeichnet sind. Ein "Unterzyklus" bezieht sich auf
einen Zyklus, der einen Zyklus nach dem Hauptzyklus ausgeführt wird,
das heißt,
ein Zyklus, in dem die Schrittnummern durch Nummern mit Apostroph
(') in einer Ausführungssequenz
bezeichnet sind. Der Unterzyklus wird nicht immer nach dem Hauptzyklus
ausgeführt.
-
Ein "linker Container" bezieht sich auf den linken von Instruktionspuffern,
in denen VLIW-Instruktionen angeordnet sind. Ein "linker Instruktionsdecoder" bezieht sich auf
einen Decoder, der eine Instruktion decodiert, die in dem linken
Container angeordnet ist. Eine "linke
Verarbeitungseinheit" bezieht
sich auf eine Verarbeitungseinheit, die die Instruktion ausführt, die
durch den linken Instruktionsdecoder decodiert ist. Eine "linke Unterinstruktion" (oder "linke Instruktion") gehört zu einer
Instruktionssequenz für
linke Unterinstruktionen (oder linke Instruktionen), das heißt eine
Instruktion, die vorbestimmt ist, daß sie in der linken Verarbeitungseinheit
zu verarbeiten ist.
-
Ein "rechter Container" bezieht sich auf den rechten von Instruktionspuffern,
in denen VLIW-Instruktionen angeordnet sind. Ein "rechter Instruktionsdecoder" bezieht sich auf
einen Decoder, der eine Instruktion decodiert, die in dem rechten
Container angeordnet ist. Eine "rechte
Verarbeitungseinheit" bezieht
sich auf eine Verarbeitungseinheit, die die Instruktion ausführt, die
von dem rechten Instruktionsdecoder decodiert ist. Eine "rechte Unterinstruktion" (oder "rechte Instruktion") gehört zu einer
Instruktionssequenz für
rechte Unterinstruktionen (oder rechte Instruktionen), das heißt eine
Instruktion, die vorbestimmt ist, daß sie in der rechten Verarbeitungseinheit
zu verarbeiten ist.
-
2 zeigt
schematisch einen VLIW-Prozessor in dieser Ausführungsform. Der VLIW-Prozessor
enthält
einen Instruktionsspeicher 1, einen linken Container 2,
einen rechten Container 3, einen linken Instruktionsdecoder 4,
einen rechten Instruktionsdecoder 5, eine linke Verarbeitungseinheit 6 und
eine rechte Verarbeitungseinheit 7. Wie in 2 gezeigt ist, führen der linke und der rechte
Container 2 und 3 eine Austauschtätigkeit
zum Austauschen ihrer Unterinstruktionen aus.
-
Die Verarbeitungsregel von VLIW-Instruktionen
wird im folgenden beschrieben.
- (1) Wenn eine
linke Unterinstruktion 1 zu dem linken Container ausgegeben
wird und eine rechte Unterinstruktion 2 zu dem rechten
Container ausgegeben wird, werden diese zwei Unterinstruktionen
simultan zu entsprechenden Instruktionsdecodern übertragen. In dem Hauptzyklus
werden die Unterinstruktionen durch die Decoder decodiert und simultan
durch entsprechende Verarbeitungseinheiten ausgeführt. In
diesem Fall wird ein Unterzyklus nicht verursacht.
- (2) Wenn eine linke Unterinstruktion 3 zu dem linken
Container ausgegeben wird und eine linke Unterinstruktion 4 zu
dem rechten Container ausgegeben wird, werden diese zwei Unterinstruktionen
simultan zu entsprechenden Instruktionsdecodern übertragen. In dem Hauptzyklus
wird die linke Unterinstruktion 3 durch den linken Decoder
decodiert und in der linken Verarbeitungseinheit ausgeführt. Weiterhin
versagt der rechte Decoder, die linke Unterinstruktion 4 zu
decodieren und behandelt sie als eine nop-Instruktion, da sie ungültig ist,
und die linke Unterinstruktion 4 wird nicht in der rechten
Verarbeitungseinheit ausgeführt. Zu
der gleichen Zeit wird das Vorhandensein der Instruktion, die mit
der Instruktionssequenz für
linke Unterinstruktionen verknüpft
ist, in dem rechten Container erfaßt, und die Inhalte des linken
und des rechten Containers werden ausgetauscht.
In dem Unterzyklus
wird die linke Unterinstruktion 4 durch den linken Decoder
decodiert und in der linken Verarbeitungseinheit ausgeführt. Weiterhin
versagt der rechte Decoder zum Decodieren der linken Unterinstruktion 3 und
behandelt sie als eine nop-Instruktion, da sie ungültig ist,
und die linke Unterinstruktion 3 wird nicht in der rechten
Verarbeitungseinheit ausgeführt.
Das heißt,
eine VLIW-Instruktion,
die eine linke Unterinstruktion 3 und eine rechte nop-Instruktion
enthält,
wird in dem Hauptzyklus ausgeführt,
und eine VLIW-Instruktion, die eine linke Unterinstruktion 4 und
eine rechte nop-Instruktion enthält,
wird in dem Unterzyklus ausgeführt.
- (3) Wenn eine rechte Unterinstruktion 5 zu dem linken
Container ausgegeben wird und eine rechte Unterinstruktion 6 zu
dem rechten Container ausgegeben wird, werden diese zwei Unterinstruktionen
simultan zu entsprechenden Instruktionsdecodern übertragen. In dem Hauptzyklus
wird die rechte Unterinstruktion 6 durch den rechten Decoder
decodiert und in der rechten Verarbeitungseinheit ausgeführt. Weiterhin
versagt der linke Decoder zum Decodieren der rechten Unterinstruktion 5 und
behandelt sie als eine nop-Instruktion, da sie ungültig ist,
und die rechte Unterinstruktion 5 wird nicht in der linken
Verarbeitungseinheit verarbeitet. Zu der gleichen Zeit wird das
Vorhandensein der Instruktion, die mit der Instruktionssequenz für die rechten
Unterinstruktionen verknüpft
ist, in dem linken Container erfaßt, und die Inhalte des linken und
des rechten Containers werden ausgetauscht.
In dem Unterzyklus
wird die rechte Unterinstruktion 5 durch den rechten Decoder
decodiert und in der rechten Verarbeitungseinheit ausgeführt. Weiterhin
versagt der linke Decoder zum Decodieren der rechten Unterinstruktion 6 und
behandelt sie als eine nop-Instruktion, da sie ungültig ist,
und die rechte Unterinstruktion 6 wird nicht in der linken
Verarbeitungseinheit verarbeitet. Das heißt, eine VLIW-Instruktion,
die eine rechte Unterinstruktion 6 und eine linke nop-Instruktion
enthält,
wird in dem Hauptzyklus ausgeführt,
und eine VLIW-Instruktion, die eine rechte Unterinstruktion 5 und
eine linke nop-Instruktion enthält,
wird in dem Unterzyklus ausgeführt.
- (4) Wenn eine rechte Unterinstruktion 7 zu dem linken
Container ausgegeben wird und eine linke Unterinstruktion 8 zu
dem rechten Container ausgegeben wird, werden diese zwei Unterinstruktionen
simultan zu den entsprechenden Instruktionsdecodern übertragen.
In dem Hauptzyklus versagt der linke Decoder zum Decodieren der
rechten Unterinstruktion
7 und behandelt sie als eine nop-Instruktion,
da sie ungültig
ist, und die rechte Unterinstruktion 7 wird nicht in der
linken Verarbeitungseinheit verarbeitet. Weiterhin versagt der rechte
Decoder zum Decodieren der linken Unterinstruktion 8 und
behandelt sie als eine nop-Instruktion, da sie ungültig ist,
und die linke Unterinstruktion 8 wird nicht in der rechten
Verarbeitungseinheit verarbeitet. Zu der gleichen Zeit wird das
Vorhandensein der Instruktion, die mit der Instruktionssequenz für die rechte
Unterinstruktionen verknüpft
ist, in dem linken Container erfaßt, und das Vorhandensein der
Instruktion, die mit der Instruktionssequenz für die linken Unterinstruktionen
verknüpft
ist, wird in dem rechten Container erfaßt. Somit werden die Inhalte
des linken und des rechten Containers ausgetauscht.
In dem
Unterzyklus wird die rechte Unterinstruktion 7 durch den
rechten Decoder decodiert und in der rechten Verarbeitungseinheit
ausgeführt.
Weiterhin wird die linke Unterinstruktion 8 durch den linken
Decoder decodiert und in der linken Verarbeitungseinheit ausgeführt. Das
heißt,
eine VLIW-Instruktion, die eine rechte nop-Instruktion und eine
linke nop-Instruktion enthält,
wird in dem Hauptzyklus ausgeführt,
und eine VLIW-Instruktion, die eine rechte Unterinstruktion 7 und
eine linke Unterinstruktion 8 enthält, wird in dem Unterzyklus
ausgeführt.
-
3 ist
ein Blockschaltbild, das einen schematischen Aufbau eds VLIW-Prozessors
in dieser Ausführungsform
zeigt. Der VLIW-Prozessor
enthält
einen Instruktionsspeicher 1, einen linken Container 2,
einen rechten Container 3, einen linken Instruktionsdecoder 4,
einen rechten Instruktionsdecoder 5, eine linke Verarbeitungseinheit 6,
eine rechte Verarbeitungseinheit 7, einen Austauschabschnitt 8,
der die Inhalte des linken und des rechten Containers 2 und 3 austauscht,
einen Programmzähler 9,
Verzweigungszielregister (BTR) 10, Wähler 11 und 12,
einen Inkrementierer 13 und ein Steuersystem 14,
das den gesamten Prozessor steuert. Der Instruktionsspeicher enthält eine
Mehrzahl von Speicherzellen 15 und einen Adreßdecoder 16,
der die Inhalte des Programmzählers
zum Auswählen
einer Speicherzelle 15 decodiert. Der Austauschabschnitt 18 enthält ein Register 17,
das die Inhalte des linken Containers 2 hält, ein
Register 19, das die Inhalte des rechten Containers 3 hält, und
Wähler 19 und 20.
-
Der linke Container 2, der
rechte Container 3, der Programmzähler 9 und das Verzweigungszielregister 10 halten
Eingangssignale an einem Anstieg eines Taktsignales, das nicht gezeigt
ist. Das Register 17 und 18 halten Eingangssignale
an dem Abfall des Taktsignales. Wenn der linke und der rechte Container 2 und 3 Unterinstruktionen
von dem Instruktionsspeicher 1 in einem Zyklus halten,
können
sie daher die Unterinstruktionen in dem nächsten Zyklus austauschen und
empfangen.
-
Für
die Hauptzyklussteuerung steuert das Steuersystem 14 so,
daß der
Wähler 11 die
Ausgabe des Inkrementierers 13 auswählt, der Wähler 12 wählt die
Ausgabe des Wählers 11,
und die Wähler 19 und 20 wählen die
Ausgaben des Instruktionsspeichers 1. Für die Unterzyklusverarbeitung
steuert das Steuersystem 14 so, daß der Wähler 11 die Ausgaben
des Programmzählers 9 auswählt, der
Wähler 12 wählt die
Ausgabe des Wählers 11,
und die Wähler 19 und 20 wählen die
Ausgaben der Register 18 bzw. 17.
-
Bei der Schreibtätigkeit des in 3 gezeigten Programmzählers 9 wird er so
gesteuert, daß der
Ausgabe des Verzweigungs zielregisters 10 Priorität über die
Ausgabe des Inkrementierers 13 gegeben wird.
-
Bei der Schreibtätigkeit in dem in 3 gezeigten Programmzähler 9 wird
er so gesteuert, daß der Ausgabe
des Verzweigungszielregisters 10 Priorität über die
Ausgabe des Inkrementierers 13 gegeben wird. Dieses ist
so, da Programmierer Instruktionen codierten, während eine nop-Instruktion
eingefügt
ist, wie in dem Codebeispiel 1, das im Stand der Technik
beschrieben wurde, und daher, wenn Verzweigung vor dem Zyklus der
Codenummer 3 gefunden wird, muß der Verzweigung Priorität gegeben
werden, ohne daß "add R1, R2 → R3" als ein Unterzyklus
ausgeführt
wird.
-
Es sei als ein Beispiel angenommen,
daß ein
Programmierer das Programm von dem Codebeispiel 4 unten hergestellt
hat.
-
-
Dieses Programm des Codebeispiels
4 wird in das Codebeispiel 5 unten durch einen Codekompressionsalgorithmus
umgewandelt, der unten beschrieben wird.
-
-
Wenn der VLIW-Prozessor in dieser
Ausführungsform
das Programm des Codebeispiels 5 ausführt, ist die Ausführungssequenz
wie folgt.
-
Ausführungssequenzbeispiel
2:
-
Hier bedeutet "nop [load mem (100) → R1]", daß, wenn eine linke Unterinstruktion "load mem (100) → R1" zu der Instruktionssequenz
für die
rechten Unterinstruktionen ausgegeben wird, die Instruktion als
eine nop-Instruktion verarbeitet wird. Hier im folgenden bedeutet
die Beschreibung von "nop
[ ]", daß, wenn
eine rechte Unterinstruktion zu der Instruktionssequenz für linke
Unterinstruktionen ausgegeben wird oder wenn eine linke Unterinstruktion
zu der Instruktionssequenz für
rechte Unterinstruktionen ausgegeben wird, die Instruktion als nop-Instruktion
verarbeitet wird.
-
Wie oben beschrieben wurde, werden
gemäß dem VLIW-Prozessor
in dieser Ausführungsform,
wenn eine rechte Unterinstruktion zu der Instruktionssequenz für linke
Unterinstruktionen ausgegeben wird oder wenn eine linke Unterinstruktion
zu der Instruktionssequenz für
rechte Unterinstruktionen ausgegeben wird, die Unterinstruktionen
ausgetauscht und in dem Unterzyklus verarbeitet, und daher kann
eine Code-komprimiertes Programm in solch einer Ausführungssequenz-
verarbeitet werden, daß es
vor der Kompression genommen wird.
-
Zweite Ausführungsform
-
4 ist
ein Blockschaltbild, das einen schematischen Aufbau eines VLIW-Prozessors
in einer zweiten Ausführungsform
der vorliegenden Erfindung zeigt. Der einzige Unterschied von dem
in 3 gezeigten VLIW-Prozessor
in der ersten Ausführungsform
ist der Aufbau des Austauschabschnittes 8. Daher wird die
detaillierte Beschreibung überlappender
Aufbauten und Funktionen nicht wiederholt. In dieser Ausführungsform wird
das Bezugszeichen 8' für den Austauschabschnitt
genommen.
-
Der Austauschabschnitt 8' enthält Wähler 21 und 22.
In dem Hauptzyklus steuert das Steuersystem 14 den Wähler 21
zum Auswählen
einer Unterinstruktion, die zu der Instruktionssequenz für die linken
Unterinstruktionen gehört,
von dem Instruktionsspeicher 1, und den Wähler 22
zum Auswählen
einer Unterinstruktion, die zu der Instruktionssequenz für die rechten
Unterinstruktionen gehört,
von dem Instruktionsspeicher 1. In dem Unterzyklus steuert
das Steuersystem 14 den Wähler zum Auswählen einer
Unterinstruktion, die zu der Instruktionssequenz für die rechten
Unterinstruktionen gehört,
von dem Instruktionsspeicher 1, und den Wähler 22 zum
Auswählen
einer Unterinstruktion, die zu der Instruktionssequenz für linke
Unterinstruktionen gehört,
von dem Instruktionsspeicher 1.
-
Der in 3 gezeigte
VLIW-Prozessor in der ersten Ausführungsform erfaßt einen Übergang
zu dem Unterzyklus an der decodierten Stufe und bewirkt, daß die Unterinstruktion
in dem linken und rechten Container 2 und 3 gehalten
wird, so daß sie
zurückgeführt und
ausgetauscht werden. An der Decodierstufe ist der Wert des Programmzählers 9 bereits
erhöht
worden, und eine aus dem Instruktionsspeicher 1 gelesene VLIW-Instruktion ist
bereits für
die Instruktion der nächsten
Stufe aktualisiert. Somit sind Register 17 und 18 notwendig
zum Zurückführen und
Austauschen von Unterinstruktionen in dem linken und rechten Container 2 und 3.
Da der VLIW-Prozessor in dieser Ausführungsform nicht die Erhöhung des
Wertes des Programmzählers 9 durch
Erfassen eines Überganges
auf den Unterzyklus an der Befehlshohlstufe steuern kann, gibt es keine
Notwendigkeit zum Zurückführen, wodurch
die Notwendigkeit für
Schaltungen entsprechend den Registern 17 und 18 beseitigt
wird. In einem Prozessor, in dem ein Instruktionshohlzyklus ein
kritischer Pfad ist, kann die Taktrate, d. h. die Verarbeitungsgeschwindigkeit
gesenkt werden.
-
Wie oben beschrieben wurde kann gemäß dem VLIW-Prozessor
in dieser Ausführungsform
ein einfacher Schaltungsaufbau und eine Kostenverringerung erzielt
werden im Vergleich mit dem VLIW-Prozessor
in der ersten Ausführungsform.
-
Dritte Ausführungsform
-
Ein VLIW-Prozessor in einer dritten
Ausführungsform
der vorliegenden Erfindung ist der gleiche wie die VLIW-Prozessoraufbauten
in der ersten und zweiten Ausführungsform.
Der einzige Unterschied ist der, daß die nop-Instruktion einer
linken Unterinstruktion und die nop-Instruktion einer rechten Unterinstruktion
in dieser Ausführungsform
unterstützt
werden. Daher wird eine detaillierte Beschreibung der überlappenden
Aufbauten und Funktionen nicht wiederholt.
-
Hier ist die nop-Instruktion für eine linke
Unterinstruktion eine Lnop-Instruktion, und die nop-Instruktion einer
rechten Unterinstruktion ist eine Rnop-Instruktion. Es sei als ein Beispiel
angenommen, daß ein
komprimierter Code wie in dem Codebeispiel 6 unten beschrieben ist.
-
-
Wenn der VLIW-Prozessor in dieser
Ausführungsform
das Programm des Codebeispiels 6 ausführt, wird das Programm ausgeführt, wie
in dem Ausführungssequenzbeispiel
3 unten gezeigt ist.
-
Ausführungssequenzbeispiel
3:
-
Wie oben beschrieben wurde, kann
gemäß dem VLIW-Prozessor
in dieser Ausführungsform
die Ausführung
entsprechend zu zwei Zyklen von nop-Instruktionen möglich gemacht
werden durch eine VLIW-Instruktion, und daher kann Codekompression
effektiv durchgeführt
werden.
-
Vierte Ausführungsform
-
Eine vierte Ausführungsform der vorliegenden
Erfindung bezieht sich auf eine Codekompressionseinrichtung (Verknüpfer), der
die oben beschriebene Codekompression durchführt. 5 ist ein Blockschaltbild, das einen
schematischen Aufbau der Codekompressionseinrichtung zeigt. Die
Codekompressionseinrichtung enthält
einen Speicherabschnitt 31 für unkomprimierten Sourcecode,
der einen unkomprimierten Sourcecode speichern kann, ei nen Codeextraktionsabschnitt 32,
der zwei aufeinanderfolgende Zeilen von VLIW-Instruktionen von dem
Sourcecode extrahiert, einen Codekompressionsabschnitt 33,
der den von dem Codeextraktionsabschnitt 32 extrahierten
Code komprimiert, einen Codeausgabeabschnitt 34, der den
komprimierten Code ausgibt, und einen Speicherabschnitt 35 für komprimierten
Sourcecode, der den von dem Codeausgabeabschnitt 34 ausgegebenen
Code speichert.
-
6 ist
ein Flußdiagramm
zum Beschreiben der Verarbeitungsprozedur der Codekompression. Zuerst
liest der Codeextraktionsabschnitt 32 einen zu komprimierenden
Sourcecode aus dem Speicherabschnitt 31 für unkomprimierten
Sourcecode (S1), und "1" wird auf eine Variable
i gesetzt (S2). Dann extrahiert der Codeextraktionsabschnitt 32 Codes
des i-ten Codes und die (i + 1)te Zeile von dem Sourcecode (S3).
-
Danach bestimmt der Codekompressionsabschnitt 33,
ob ein Etikett nicht zu dem Code der (i + 1)ten Reihe addiert worden
ist, die von dem Codeextraktionsabschnitt 32 extrahiert
worden ist, und ob mindestens zwei Unterinstruktionen des Codes
der i-ten und der (i + 1)ten Zeile nop-Instruktionen sind (S4).
Wenn ein Etikett zu dem Code der (i + 1)ten Zeile addiert worden
ist oder wenn es weniger als zwei Unterinstruktionen gibt, die nop-Instruktionen sind,
werden die Codes der i-ten und der (i + 1)ten Zeile eingegeben (S4,
NEIN), der Schritt S11 wird betreten.
-
Wenn ein Etikett nicht zu dem Code
der (i + 1)ten Zeile addiert worden ist und mindestens zwei Unterinstruktionen
des Codes der i-ten und der (i + 1)ten Zeile nop-Instruktionen sind
(54, JA), bestimmt der Codekompressionsabschnitt 33,
ob der Code der i-ten Zeile eine Kombination einer linken Unterinstruktion und
einer nop-Instruktion ist und der Code der (i + 1)ten Zeile eine
Kombination einer linken Unterinstruktion und einer nop-Instruktion ist (S5).
Wenn die i-te Zeile nicht eine Kombination einer linken Unterinstruktion
und einer nop-Instruktion ist oder wenn die (i + 1)te Zeile nicht
eine Kombination einer linken Unterinstruktion und einer nop-Instruktion
ist (S5, NEIN), wird Schritt S7 betreten.
-
Wenn die i-te Zeile eine Kombination
einer linken Unterinstruktion und einer nop-Instruktion ist und
die (i + 1)te Zeile eine Kombination einer linken Unterinstruktion
und einer nop-Instruktion
ist (S5, JA), komprimiert der Codekompressionsabschnitt 33 Instruktionen
so, daß die
linke Unterinstruktion der i-ten Zeile an den linken Container 2 eingegeben
wird und die linke Unterinstruktion der (i + 1)ten Zeile an den
rechten Container 3 eingegeben wird (S6). Dann speichert
der Codeausgabeabschnitt 34 den komprimierten Code in den
Speicherabschnitt 35 des komprimierten Sourcecodes.
-
In Schritt S7 bestimmt der Codekompressionsabschnitt 33,
ob die i-te Zeile eine Kombination einer nop-Instruktion und einer
rechten Unterinstruktion ist und die (i + 1)te Zeile eine Kombination
einer nop-Instruktion und einer rechten Unterinstruktion ist. Wenn
die i-te Zeile nicht eine Kombination einer nop-Instruktion und einer
rechten Unterinstruktion ist oder wenn die (i + 1)te Zeile nicht
eine Kombination einer nop-Instruktion
und einer rechten Unterinstruktion ist (S7, NEIN), wird Schritt
S9 betreten.
-
Wenn die i-te Zeile eine Kombination
einer nop-Instruktion und einer rechten Unterinstruktion ist und die
(i + 1)te Zeile eine Kombination einer nop-Instruktion und einer
rechten Unterinstruktion ist (S7, JA), komprimiert der Codekompressionsab schnitt 33 Instruktionen
so, daß die
rechte Unterinstruktion der (i + 1)ten Zeile in den linken Container 2 eingegeben
wird und die rechte Unterinstruktion der i-ten Zeile in den rechten
Container 3 eingegeben wird (S8). Dann speichert der Codeausgabeabschnitt 34 den
komprimierten Code in den Speicherabschnitt 35 des komprimierten
Sourcecodes.
-
In Schritt S9 bestimmt der Codekompressionsabschnitt 33,
ob die i-te Zeile eine Kombination einer nop-Instruktion und einer
nop-Instruktion ist und die (i + 1)te Zeile eine Kombination einer
linken Unterinstruktion und einer rechten Unterinstruktion ist.
Wenn die i-te Zeile nicht eine Kombination von nop-Instruktionen ist oder
wenn die (i + 1)te Zeile nicht eine Kombination einer linken und
einer rechten Unterinstruktion ist (S9, NEIN), wird Schritt S11
betreten.
-
Wenn die i-te Zeile eine Kombination
von nop-Instruktionen ist und die (i + 1)te Zeile eine Kombination einer
linken und einer rechten Unterinstruktion ist (S9, JA), komprimiert
der Codekompressionsabschnitt 38 Instruktionen so, daß die rechte
Unterinstruktion der (i + 1)ten Zeile in den linken Container 1 eingegeben
wird und die linke Unterinstruktion der (i + 1)ten Zeile in den
rechten Container 3 eingegeben wird (S10). Dann speichert
der Codeausgabeabschnitt 34 den komprimierten Code in den
Speicherabschnitt 35 des komprimierten Sourcecodes.
-
In Schritt S11 wird eine Bestimmung
gemacht, ob die Kompressionsverarbeitung für alle Zeilen des Sourcecodes
durchgeführt
worden ist (S11). Wenn es irgendeine Zeile gibt, die nicht komprimiert
worden ist (S11, NEIN), wird (i + 1) für die Variable i gesetzt, und
der Vorgang kehrt zu Schritt S3 zurück. Wenn die Kompression für alle Zeilen
durchgeführt
worden ist (S11, JA), ist die Kompressionsverarbeitung beendet.
-
7 zeigt
ein Beispiel der externen Ansicht der Codekompressionseinrichtung
gemäß der vorliegenden
Erfindung. Die Codekompressionseinrichtung enthält einen Computer 41,
eine Graphikanzeigeeinrichtung 42, eine Magnetbandeinrichtung 43,
in die ein Magnetband 44 eingeführt ist, eine Tastatur 45,
eine Maus 46, eine CD-ROM-(Nurlesespeicher einer Kompaktdisc)Einrichtung 47,
in die ein CD-ROM 48 eingeführt ist, und ein Kommunikationsmodem 49.
Ein Codekompressionsprogramm wird durch ein Speichermedium wie ein
Magnetband 44 oder ein CD-ROM 48 geliefert. Das
Codekompressionsprogramm wird durch den Computer 41 ausgeführt, und
ein Bediener komprimiert Sourcecodes durch Betätigen der Tastatur 45 oder
der Maus 46, wobei auf die Graphikanzeigeeinrichtung 42 Bezug
genommen wird. Das Codekompressionsprogramm kann zu dem Computer 41 von
einem anderen Computer über
Kommunikationsleitungen und das Kommunikationsmodem 49 geliefert
werden.
-
8 ist
ein Blockschaltbild, das ein Beispiel des Aufbaus der Codekompressionseinrichtung
gemäß der vorliegenden
Erfindung zeigt. Der in 7 gezeigte
Computer 41 enthält
eine CPU 50, einen ROM (Nurlesespeicher) 51, einen
RAM (Direktzugriffsspeicher) 52 und eine Festplatte 53.
Die CPU 50 führt
Verarbeitung durch Übertragen
und Empfangen zu und von der Magnetbandeinrichtung 43,
der Tastatur 45, der Maus 46, der CD-ROM-Einrichtung 47,
dem Kommunikationsmodem 49, dem ROM 51, dem RAM 52 oder
der Festplatte 53 durch. Ein auf dem Magnetband 44 oder
dem CD-ROM 48 gespeichertes Codekompressionsprogramm wird
einmal auf der Festplatte 53 über die Magnetbandeinrichtung 43 oder
die CD-ROM-Einrichtung 47 durch die CPU 50 gespeichert.
Die CPU 50 komprimiert einen Sourcecode durch Laden des
Codekompressionsprogrammes wenn notwendig in den RAM 52 zum Ausführen.
-
Wie oben beschrieben wurde kann gemäß der Codekompressionseinrichtung
in dieser Ausführungsform
ein Sourcecode in einem Format komprimiert werden, das den Betrieb
des in der ersten Ausführungsform beschriebenen
VLIW-Prozessors ermöglicht.
Somit kann die Kapazität
eines Instruktionsspeichers zum Beispiel effektiv benutzt werden.
-
Fünfte Ausführungsform
-
Eine Codekompressionseinrichtung
in einer fünften
Ausführungsform
der vorliegenden Erfindung ist ähnlich
zu der unter Bezugnahme auf 5 bis 8 beschriebenen vierten Ausführungsform.
Obwohl die Datenabhängigkeit
für die
Codekompression in der Codekompressionseinrichtung in der vierten
Ausführungsform nicht
betrachtet worden ist, wird die Datenunabhängigkeit in der Codekompressionseinrichtung
in dieser Ausführungsform
in Betracht gezogen (in dieser Ausführungsform wird eine Abwicklerfunktion
zu der Codekompressionseinrichtung in der vierten Ausführungsform
hinzugefügt).
-
Es sei als ein Beispiel angenommen,
daß das
Programm des Codebeispiels 7 unten beschrieben wird.
-
-
Da die in den Codenummern 2 und 3
gezeigten VLIW-Instruktionen keine Datenunabhängigkeit aufweisen, können die
Codes wie in dem Codebeispiel 8 unten geändert werden.
-
-
Das in dem Codebeispiel 8 gezeigte
Programm kann in ein Codebeispiel 9 unten durch die Codekompressionseinrichtung
in der vierten Ausführungsform
komprimiert werden.
-
-
Wenn das in dem Codebeispiel 9 gezeigte
Programm ausgeführt
wird, wird es wie in dem Ausführungssequenzbeispiel
4 unten gezeigt ausgeführt.
-
-
Durch Ausführen der Abwicklung, während die
Datenunabhängigkeit
in Betracht gezogen wird, können
die Codes effektiver komprimiert werden. Das folgende Codebeispiel
10 ist ein Beispiel von Codes, die nicht komprimiert werden können.
-
-
Da die linke Unterinstruktion der
Codenummer 2 "load
mem (100) → R1" bewirkt, daß Daten
in das Register R1 geladen werden, und die rechte Unterinstruktion
der Codenummer 3 "add
R1, R2 → R3" bewirkt, daß auf Daten
des Registers R1 zugegriffen wird, kann die Kompression der gleichen
VLIW-Instruktion nicht durchgeführt
werden.
-
Wie oben beschrieben wurde wird gemäß der Codekompressionseinrichtung
in dieser Ausführungsform
die Abwicklung ausgeführt,
während
die Datenunabhängigkeit
in Betracht gezogen wird, die Codes können effektiver im Vergleich
mit der Codekompressionseinrichtung in der vierten Ausführungsform
komprimiert werden.
-
Sechste Ausführungsform
-
9 zeigt
schematisch einen VLIW-Prozessor in einer sechsten Ausführungsform
der vorliegenden Erfindung. Der VLIW-Prozessor in dieser Ausführungsform
weist den Aufbau auf, der durch Verbinden einer Mehrzahl der VLIW-Prozessoren
in der in 2 gezeigten
ersten Ausführungsform
gebildet ist, das heißt,
der VLIW-Prozessor dieser Ausführungsform
ist ein 2n-Weg-VLIW-Prozessor. 9 zeigt einen VLIW-Prozessor, wenn
n gleich 3 ist.
-
Wie oben beschrieben wurde, kann
der VLIW-Prozessor in dieser Ausführungsform höhere Parallelität und Verarbeitungsgeschwin digkeit
als der VLIW-Prozessor in der ersten Ausführungsform aufweisen.
-
Siebte Ausführungsform
-
10 zeigt
schematisch einen VLIW-Prozessor in einer siebten Ausführungsform
der vorliegenden Erfindung. Die VLIW-Prozessoren in der ersten bis sechsten
Ausführungsform
sind die 2n-Weg-VLIW-Prozessoren, die zwei rechte und linke Unterinstruktionen
enthalten, während
der VLIW-Prozessor in dieser Ausführungsform auf den VLIW-Verfahren
von mindestens drei Wegen basiert, die Instruktionen austauschen
durch Verschieben derselben statt Austauschen der Instruktionen
durch Austauschen derselben.
-
Der VLIW-Prozessor in dieser Ausführungsform
enthält
einen Instruktionsspeicher 61, einen ersten Container 62,
einen zweiten Container 63, einen dritten Container 64,
einen vierten Container 65, einen ersten Instruktionsdecoder 66,
einen zweiten Instruktionsdecoder 67, einen dritten Instruktionsdecoder 68,
einen vierten Instruktionsdecoder 69, eine erste Verarbeitungseinheit 70,
eine zweite Verarbeitungseinheit 71, eine dritte Verarbeitungseinheit 72 und
eine vierte Verarbeitungseinheit 73. Zum Verarbeiten werden
Unterinstruktionen von dem ersten Container 62 zu dem vierten
Container 65, von dem vierten Container 65 zu
dem dritten Container 64, von dem dritten Container 64 zu
dem zweiten Container 63 und von dem zweiten Container 63 zu dem
ersten Container 62 verschoben.
-
11 ist
ein Blockschaltbild, das einen speziellen Aufbau des VLIW-Prozessors
in dieser Ausführungsform
zeigt. Der VLIW-Prozessor
enthält
einen Instruktionsspeicher 61, einen ersten Container 62,
einen zweiten Container 63, einen dritten Con tainer 64,
einen vierten Container 65, einen ersten Instruktionsdecoder 66,
einen zweiten Instruktionsdecoder 67, einen dritten Instruktionsdecoder 68,
einen vierten Instruktionsdecoder 69, eine erste Verarbeitungseinheit 70,
eine zweite Verarbeitungseinheit 71, eine dritte Verarbeitungseinheit 72,
eine vierte Verarbeitungseinheit 73, einen Austauschabschnitt 74,
der die Inhalte des ersten bis vierten Containers 62 bis 65 durch
serielles Verschieben der Inhalte austauscht, einen Programmzähler 75,
ein Verzweigungszielregister BTR 76, Wähler 77 und 78,
einen Inkrementierer 79 und ein Steuersystem 80,
das den gesamten Prozessor steuert. Der Instruktionsspeicher 61 enthält eine
Mehrzahl von Speicherzellen 81 und einen Adreßdecoder 82,
der die Inhalte des Programmzählers 75 decodiert
zum Auswählen
der Speicherzelle 81. Der Austauschabschnitt 74 enthält ein Register 83,
das die Inhalte des zweiten Containers 63 hält, ein
Register 84, das die Inhalte des dritten Containers 64 hält, ein
Register 85, das die Inhalte des vierten Containers 65 hält, ein
Register 86, das die Inhalte des ersten Containers 62 hält, und
Wähler 87 bis 90.
-
Der erste bis vierte Container 62 bis 65,
der Programmzähler 75 und
das Verzweigungszielregister 76 halten Eingangssignale
an dem Anstieg eines Taktsignales, nicht gezeigt. Die Register 83 bis 86 halten
Eingangssignale an einem Abfall des Taktsignales. Wenn der erste
bis vierte Container 62 bis 65 Unterinstruktionen
von dem Instruktionsspeicher 1 in einem Zyklus halten,
können
sie daher die Unterinstruktionen verschieben und an die entsprechenden
Container in dem nächsten
Zyklus eingeben.
-
Zur Hauptzyklusverarbeitung steuert
das Steuersystem 80 so, daß der Wähler 77 die Ausgabe
des Inkrementierers 79 auswählt, der Wähler 78 die Ausgabe
des Wählers 77 auswählt, und
die Wähler 87 bis 90 die
Ausgaben des Instruktionsspeichers 1 auswählen. Für Unterzyklusverarbeitung
steuert das Steuersystem 80 so, daß der Wähler 77 die Ausgabe
des Programmzählers 75 auswählt, der
Wähler 78 die
Ausgabe des Wählers 77 auswählt und
die Wähler 87 bis 90 die
Ausgaben der Register 83 bis 86 auswählen.
-
Es wird als ein Beispiel angenommen,
daß ein
Programmierer das Programm des Codebeispiels 11 unten hergestellt
hat.
-
-
Wenn das Programm des Codebeispiels
11 komprimiert wird, wird es wie in dem Codebeispiel 12 unten beschrieben.
-
-
Wenn das in dem Codebeispiel 12 gezeigte
Programm durch den VLIW-Prozessor in dieser Ausführungsform ausgeführt wird,
wird es als ein Ausführungssequenzbeispiel
5 unten verarbeitet.
-
Ausführungssequenzbeispiel
5:
-
Wie oben beschrieben wurde kann gemäß dem VLIW-Prozessor
in dieser Ausführungsform
das VLIW-Verfahren von mindestens 3-Wegen angewendet werden, und Codes können effektiver
im Vergleich mit dem 2n-Weg-VLIW-Prozessor komprimiert werden.
-
Obwohl die vorliegende Erfindung
im Detail beschrieben und dargestellt worden ist, ist klar zu verstehen,
daß dieses
nur als Illustration und Beispiel getan ist, und es kann nicht als
Begrenzung genommen werden, der Umfang der vorliegenden Erfindung
wird nur durch den Inhalt der beigefügten Ansprüche begrenzt.