-
Die
Erfindung bezieht sich auf ein Verarbeitungsgerät mit
- – einer
Verarbeitungseinheit,
- – einem
Speicher zum Speichern von Befehlen für die Verarbeitungseinheit,
- – einer
Leseeinheit zum Lesen von Befehlen aus dem Speicher in einer logischen
-
Reihenfolge
und zum Weiterleiten der Befehle an die Verarbeitungseinheit, damit
sie in der logischen Reihenfolge ausgeführt werden.
-
Ein
Verarbeitungsgerät
dieser Art ist aus der internationalen Patentanmeldung Nr. WO 93/14457 bekannt.
Während
der Ausführung
eines Programms werden aufeinanderfolgende Befehle aus dem Speicher
in die Verarbeitungseinheit geladen, um ausgeführt zu werden. Zeitgemäße Verarbeitungseinheiten sind
jedoch in der Lage, die Befehle im Allgemeinen schneller auszuführen als
die Befehle aus dem Speicher gelesen werden können. Aus diesem Grund ist der
Speicher, wenn keine speziellen Maßnahmen getroffen werden, ein
begrenzender Faktor in Bezug auf die Gesamtgeschwindigkeit des Verarbeitungsgeräts. Dieses
Problem wird als „Speicher-Engpass" bezeichnet.
-
Aus
dem Stand der Technik ist eine Reihe von Maßnahmen zur Umgehung des Engpass-Problems
bekannt. Es sind zum Beispiel „Caching"-Techniken bekannt.
Beim „Caching" wird ein schneller
Cache-Speicher verwendet, der die Befehle, die voraussichtlich durch
die Verarbeitungseinheit ausgeführt
werden, gemäß einer
Cache-Strategie speichert. Der Cache-Speicher ist vergleichsweise kostenaufwändig, weil
er ausreichend schnell sein muss, um einen Befehl pro Befehlszyklus
der Verarbeitungseinheit zu lesen. Außerdem sind Caching-Techniken
im Allgemeinen sehr komplex und erfordern daher einen erheblichen
Schaltungsaufwand.
-
Aus
dem Stand der Technik ist auch bekannt, dass man den Speicher wesentlich
breiter macht als dies zum Lesen eines einzelnen Befehls erforderlich ist.
Das bedeutet, dass eine Vielzahl von aufeinanderfolgenden Befehlen
gleichzeitig parallel in einem einzelnen Lesezyklus des Speichers
gelesen werden kann. Diese Befehle werden in einem Vorabbefehlspuffer
gespeichert, der sehr schnell ausgelesen werden kann, und anschließend werden
sie nacheinander der Verarbeitungseinheit zugeführt. Während die Verarbeitungs einheit
die Vielzahl von Befehlen aus dem Vorabbefehlspuffer ausführt, wird
anschließend ein
neuer Speicherlesezyklus für
eine nächste
Vielzahl von Befehlen gestartet. Wenn N Befehle gleichzeitig aus
dem Speicher gelesen werden, wird unter optimalen Bedingungen die
effektive Geschwindigkeit des Speichers auf diese Weise um einen
Faktor N gesteigert, so dass der Speicher nicht mehr der beschränkende Faktor
in Bezug auf die Geschwindigkeit des Verarbeitungsgeräts zu sein
braucht. Dieses Verfahren liefert nur dann optimale Ergebnisse,
wenn die Verarbeitungseinheit Befehle in einer „logischen" Reihenfolge ausführt (also in einer Reihenfolge,
die durch die Leseeinheit definiert wird, ohne durch die Verarbeitungseinheit
neu angepasst zu werden). Dies ist normalerweise der Fall. Die durch
die Verarbeitungseinheit ausgeführten
Befehle können
jedoch auch Sprungbefehle enthalten, die eine andere Reihenfolge
der Befehlsausführung
zur Folge haben. Aufgrund eines Sprungbefehls ist dann ein Teil
des Inhalts des Vorabbefehlspuffers (nach einem herausgehenden Sprung
oder einem eintreffenden Sprung) daher nutzlos. Das bereits begonnene
Auslesen des Speichers ist dann ebenfalls nutzlos. Hierdurch wird wiederum
die Geschwindigkeit des Prozessors beschränkt.
-
Die
Erfindung hat unter anderem zur Aufgabe, ein Verarbeitungsgerät zu schaffen,
in dem der Speicher-Engpass mit weniger Aufwand eliminiert wird.
-
Das
erfindungsgemäße Verarbeitungsgerät ist dadurch
gekennzeichnet, dass der Speicher eine Vielzahl von unabhängig adressierbaren
Speicherbänken
umfasst, wobei logisch aufeinanderfolgende Befehle in verschiedenen
Speicherbänken
gespeichert werden, und dass die Leseeinheit vorgesehen ist, um
eine Anzahl von Befehlen aus verschiedenen Speicherbänken parallel
zu lesen und diese Anzahl von Befehlen jedes Mal wieder aufzufüllen, wenn
die Verarbeitungseinheit mit dem Ausführen eines Befehls beginnt,
indem sie beginnt, einen Befehl zu lesen, der logisch auf die Befehle
folgt, die in diesem Augenblick parallel aus den Speicherbänken ausgelesen
werden.
-
Jeder
nachfolgende Befehl wird auf diese Weise in einer nächsten Speicherbank
gespeichert. Zu diesem Zweck verfügt die Verarbeitungseinheit vorzugsweise
ausschließlich über Befehle
von fester Länge.
Als Folge der Erfindung werden die Befehle auf Pipeline-Weise gesucht,
und normalerweise wird sich eine Anzahl von Befehlen in unterschiedenen Stadien
des Auslesens befinden. Die Befehle können daher nacheinander über den
gleichen Bus und mit zwischengefügten
Zeitintervallen, die kürzer
als das zum Auslesen einer einzelnen Speicherbank erforderliche
Zeitintervall sind, dem Prozessor zugeführt werden. Weil für jeden
Befehl, der ausgeführt
wird, ein neuer Befehl adressiert wird, ist die Anzahl der adressierten
Befehle nicht größer als
unbedingt erforderlich. Dadurch wird das Risiko von Speicherkonflikten
reduziert, das auftritt, wenn mehr als ein Befehl gleichzeitig aus
der gleichen Speicherbank ausgelesen werden müsste.
-
Die
Verarbeitungseinheit einer Ausführungsform
des erfindungsgemäßen Verarbeitungsgeräts ist in
der Lage, nicht mehr als die aufeinanderfolgende Ausführung von
einer Anzahl N Befehlen in einem Zeitintervall zu starten, das mindestens
zwischen dem Adressieren einer Speicherbank und dem Zuführen eines
dann gelesenen Befehls an die Verarbeitungseinheit erforderlich
ist, wobei die Leseeinheit vorgesehen ist, um N Befehle parallel
aus den verschiedenen Speicherbänken
zu lesen. Auf diese Weise können
exakt so viele Befehle parallel ausgelesen werden, dass die Verarbeitungseinheit
nicht durch den Speicher verlangsamt wird. Infolgedessen wird die
Anzahl der immer noch mit dem Auslesen befassten und daher noch
nicht für
eine neue Adressierung verfügbaren
Speicherbänke
minimiert. Aus diesem Grunde gibt es vorzugsweise mindestens N Speicherbänke.
-
Die
Verarbeitungseinheit in einer Ausführungsform des erfindungsgemäßen Verarbeitungsgeräts ist vorgesehen,
um unter anderem einen Sprungbefehl auszuführen, nach dem die Verarbeitungseinheit
abhängig
von der Erfüllung
der zu beurteilenden Bedingung mit der Ausführung von entweder einem Sprungzielbefehl
oder einem Befehl, der logisch auf den Sprungbefehl folgt, fortfahren
sollte, wobei die Leseeinheit vorgesehen ist, um Befehle zwischen dem
Auslesen aus dem Speicher und dem Zuführen zur Verarbeitungseinheit
in einer Pipeline-Einheit zwischenzuspeichern, um den Sprungbefehl
in der Pipeline-Einheit zu erkennen, und außerdem vorgesehen ist, um in
Reaktion auf das Erkennen des Sprungbefehls und parallel zu dem
Auslesen von einem oder mehreren Befehlen, die logisch auf den Sprungbefehl
folgen, mit dem Auslesen des Sprungzielbefehls aus einer weiteren
Speicherbank zu beginnen, vorausgesetzt, dass die weitere Speicherbank
nicht einen oder mehrere Befehle) enthält, der (die) logisch auf den
Sprungbefehl folgt (folgen), und auch vorgesehen ist, um nach der
Ausführung
des Sprungbefehls und in Abhängigkeit
von dem Erfüllen der
Bedingung entweder die Sprungzielbefehle und die logisch darauf
folgenden Befehle oder den Befehl, der logisch auf den Sprungbefehl
folgt und Befehle, die logisch auf diesen folgen, an die Verarbeitungseinheit
weiterzuleiten. Auf diese Weise wird eine Verlangsamung auch in
dem Fall eines Sprungbefehls vermieden. Aus der Patentanmeldung
WO 93/14457 ist an sich ein Vorauslesen auch ab dem Sprungziel bekannt,
aber nicht aus anderen Speicherbänken,
die jeweils einen Befehl aus einer Reihe von logisch nachfolgenden
Befehlen enthalten, und es erfolgt auch kein Pipeline-Auslesen aus den
Speicherbänken.
Aufgrund des Pipeline-Auslesens der Speicherbänke und der Zwischenspeicherung
in der Pipeline-Einheit wird die Anzahl der aktiven Speicherbänke minimiert,
so dass das Risiko von Speicherbankkonflikten zwischen dem Auslesen
des Sprungzielbefehls und der auf den Sprungbefehl folgenden Befehle
minimiert wird.
-
Die
Leseeinheit in einer Ausführungsform des
erfindungsgemäßen Verarbeitungsgeräts ist vorgesehen,
um parallel zu der Adressierung eines Sprungzielbefehl-Speicherplatzes einen
Befehlsspeicherplatz von mindestens einem Befehl zu adressieren,
der logisch auf den Sprungzielbefehl folgt, und um den genannten
mindestens einen Befehl in eine interne Stufe oder entsprechende
interne Stufen der Pipeline-Einheit zu laden, wenn die Bedingung
erfüllt
wird.
-
Die
Verarbeitungseinheit in einer weiteren Ausführungsform des erfindungsgemäßen Verarbeitungsgeräts ist in
der Lage, nicht mehr als die aufeinanderfolgende Ausführung von
einer Anzahl N Befehlen in einem Zeitintervall zu starten, das mindestens
zwischen dem Adressieren einer Speicherbank und dem Zuführen eines
daraufhin gelesenen Befehls an die Verarbeitungseinheit erforderlich
ist, wobei die Leseeinheit vorgesehen ist, um parallel zur Adressierung
des Sprungzielbefehls Befehlsspeicherplätze von N – 1 Befehlen, die logisch auf
den Sprungzielbefehl folgen, zu adressieren, und vorgesehen ist,
um die N – 1
Befehle parallel in die Pipeline-Einheit zu laden, wenn die Bedingung
erfüllt
wird. Die Pipeline-Einheit kann daher wieder so schnell wie möglich mit
Befehlen geladen werden, die logisch auf den in der Verarbeitungseinheit
ausgeführten
Befehl folgen, und das Auslesen der nachfolgenden Befehle wird ebenfalls
so schnell wie möglich
abgeschlossen, so dass die Speicherbänke wieder zum Auslesen von anderen
Befehlen zur Verfügung
stehen. Um Lesekonflikte zu vermeiden, umfasst der Speicher vorzugsweise
mindestens 2*N Speicherbänke.
Da die Anzahl der Speicherbänke
größer ist,
besteht ein geringeres Konfliktrisiko, wo der Sprungzielbefehl oder logisch
darauf folgende Befehle aus der gleichen Speicherbank ausgelesen
werden müssen
wie die Befehle, die logisch auf den Sprungbefehl folgen.
-
Die
Leseeinheit in einer Ausführungsform des
erfindungsgemäßen Verarbeitungsgeräts ist vorgesehen,
um nach der Erkennung des bedingten Sprungbefehls und bis die Verarbeitungseinheit
den bedingten Sprungbefehl ausgeführt hat, jedes Mal, wenn die
Verarbeitungseinheit mit der Ausführung eines Befehls beginnt,
mit dem parallelen Auslesen eines Befehls, der logisch dem Sprungbefehl
folgt, und eines Befehls, der logisch auf den Sprungzielbefehl folgt,
aus verschiedenen Speicherbänken
zu beginnen. Nach dem Start der Ausführung des Sprungzielbefehls
stehen auf diese Weise jedes Mal, wenn mit der Ausführung eines
neuen Befehls begonnen wird, unmittelbar ohne Verzug Befehle zur
Verfügung,
wobei die Anzahl der aktiven Speicherbänke auf ein Minimum beschränkt ist.
-
Die
Leseeinheit in einer Ausführungsform des
erfindungsgemäßen Verarbeitungsgeräts ist vorgesehen,
um zu erkennen, ob sich der Speicherplatz des Sprungzielbefehls
in der gleichen Speicherbank befindet wie ein Befehlsspeicherplatz
eines Befehls, der logisch dem Sprungbefehl folgt, und vorgesehen, um
im Fall einer Koinzidenz und auf der Basis von ergänzenden
Informationen bezüglich
des Sprungbefehls entweder den Speicherplatz des Sprungzielbefehls
und die Befehlsspeicherplätze
der Befehle zu adressieren, die logisch auf den Speicherplatz des Sprungziels
folgen, oder den Befehlsspeicherplatz des Befehls, der logisch dem
Sprungbefehl folgt, und die Befehlsspeicherplätze der Befehle, die diesem
logisch folgen. Die Informationen geben an, wie wahrscheinlich es
ist, dass die Bedingung erfüllt
wird. Diese Informationen können
zum Beispiel während
des Kompilierens des Programms oder auf der Basis von neuen Sprungstatistiken
während
der Ausführung der
Befehle erzeugt werden. Die Informationen werden benutzt, um sicherzustellen,
dass der Befehl, der am wahrscheinlichsten ausgeführt wird,
tatsächlich im
Fall einer Koinzidenz adressiert wird.
-
Eine
Ausführungsform
des erfindungsgemäßen Verarbeitungsgeräts ist mit
einem Programm programmiert, in dem der Sprungzielbefehl und M Befehle,
die dem Sprungzielbefehl logisch folgen, in anderen Speicherbänken gespeichert
werden als der Befehl, der logisch dem Sprungbefehl und M Befehlen
folgt, die diesem Sprungbefehl logisch folgen. Diese Befehle werden
auf diese Weise so schnell wie möglich
gelesen, so dass die Speicherbänke
so schnell wie möglich
wieder für
andere Leseoperationen (zum Beispiel zugunsten eines Sprungbefehls) zur
Verfügung
stehen. Wenn eine Pipeline-Einheit verwendet wird, können die
auf diese Weise gelesenen Befehle direkt parallel in die Pipeline-Einheit
geladen werden.
-
Das
Verarbeitungsgerät
ist vorzugsweise zusammen mit den Speicherbänken auf einem Halbleitersubstrat
integriert. Damit kann eine große
Anzahl von Verbindungsleitungen zum Laden der Befehle auf einfache
Weise zwischen den Speicherbänken und
der Verarbeitungseinheit implementiert werden.
-
Die
Erfindung bezieht sich auch auf einen Kompilierer, der vorgesehen
ist, um Befehle zu erzeugen, die in dem Befehlsspeicher gespeichert
werden, einschließlich eines
Sprungbefehls, und außerdem
vorgesehen ist, um die Anordnung von Befehlen im Befehlsspeicher
auf eine solche Weise anzupassen, dass ein Sprungzielbefehl und
ein oder mehrere Befehle, die logisch darauf folgen, in anderen Speicherbänken gespeichert
werden als eine gleiche Anzahl von Befehlen, die dem Sprungbefehl
folgen. Bankkonflikte können
vermieden werden, indem man bereits bei der Kompilierung die Bankstruktur
berücksichtigt,
vor allem die Anzahl der Bänke
im Speicher. In dem erfindungsgemäßen Verarbeitungsgerät kann genau
vorhergesagt werden, welcher Befehl wann gelesen wird. Konflikte
zwischen Bänken
werden durch eine geeignete Anordnung der gleichzeitig zu lesenden
Befehle vermieden. Die Anordnung kann zum Beispiel durch Auffüllen realisiert
werden: die Aufnahme von „Keine
Operation"-Befehlen,
oder die Speicherung eines Sprungzielbefehls in einer geeigneten
Anzahl von nicht-benutzten Speicherplätzen nach einem unbedingten
Sprungbefehl, oder das Verzweigen über nicht-benutzte Befehlsspeicherplätze.
-
Diese
und andere vorteilhafte Aspekte der Erfindung werden im Folgenden
unter Bezugnahme auf die Figuren ausführlich beschrieben. Es zeigen:
-
1 eine Ausführungsform
eines erfindungsgemäßen Verarbeitungsgeräts;
-
2 ein Timing-Diagramm der
Funktion des Verarbeitungsgeräts
aus 1;
-
3 eine weitere Ausführungsform
eines erfindungsgemäßen Verarbeitungsgeräts, und
-
4 ein Timing-Diagramm der
Funktion des Verarbeitungsgeräts
aus 3.
-
In 1 ist eine Ausführungsform
eines erfindungsgemäßen Verarbeitungsgeräts dargestellt. Das
Verarbeitungsgerät
umfasst eine Verarbeitungseinheit 10, einen Speicher mit
einer Anzahl von Speicherbänken 12a–d,
eine Leseeinheit 14 und einen Takt 19. Die Leseeinheit 14 hat
eine Anzahl von Adress/Auswahl-Ausgängen, die jeweils über eine zugehörige Adress/Auswahl-Verbindung 18a–d mit einer
entsprechenden Speicherbank 12a–d gekoppelt sind.
Die Speicherbänke 12a–d sind über einen Befehlsbus 16 mit
einem Befehlseingang der Verarbeitungseinheit 10 verbunden.
Der Takt 19 ist mit der Leseeinheit 14, den Speicherbänken 12a–d und
der Verarbeitungseinheit 10 verbunden.
-
In 2 ist ein Timing-Diagramm
für die Funktion
des Verarbeitungsgeräts
aus 1 dargestellt. Die
Leseeinheit 14 adressiert aufeinanderfolgende Speicherplätze in aufeinanderfolgenden
Taktperioden (auch als Befehlszyklen oder Lesezyklen be zeichnet).
Der Verlauf mit der Bezeichnung AD gibt pro Taktperiode an, welche
Speicheradresse (I1, I2, ...) ausgewählt wurde. Speicherplätze mit
aufeinanderfolgenden Speicheradressen (I1, I2, ...) befinden sich
in aufeinanderfolgenden Speicherbänken 12a–d.
Aus diesem Grunde wählt
die Leseeinheit 14 während
der Adressierung immer aufeinanderfolgende Speicherbänke 12a–d.
Nach Empfang der Speicheradresse (I1, I2, ...) beginnt die gewählte Speicherbank 12a–d,
den Inhalt des durch die Speicheradresse (I1, I2, ...) angegebenen
Speicherplatzes zu lesen. Die Verläufe B1, B2, B3, B4 geben die Speicheradressen
(I1, I2, ...) der durch die entsprechenden Speicherbänke 12a–d ausgelesenen
Speicherplätze
an. Eine Speicherbank 12a–d benötigt mehr
als eine Taktperiode, damit der Inhalt des Speicherplatzes nach
Empfang der Speicheradresse (I1, I2, ...) zur Verfügung steht
(zum Beispiel drei Taktperioden in dem Timing-Diagramm). In der
Taktperiode, die auf die Taktperiode folgt, in der eine Speicherbank 12a–d adressiert
wurde, während
die Speicherbank 12a–d daher
noch nicht über
den Inhalt verfügt, wählt die
Leseeinheit 14 bereits eine andere Speicherbank 12a–d und
führt dieser
Speicherbank 12a–d eine
Speicheradresse (I1, I2, ...) zu. Die Leseeinheit 14 tut
dies zum Beispiel auf der Basis eines zyklischen Warteschlangenbetriebs,
wo die Speicherbänke 12a–d in
allen vier aufeinanderfolgenden Taktperioden in einer festen Sequenz
adressiert werden. Auf diese Weise wird jedes Mal eine Anzahl von
Speicherbänken 12a–d parallel
mit dem Lesen von Befehlen beschäftigt
sein. Der Inhalt des adressierten Speicherplatzes (I1, I2, ...)
wird eine Anzahl von Taktperioden nach dem Adressieren der Speicherbank 12a–d zur
Verfügung
stehen (zum Beispiel drei Taktperioden). In Reaktion darauf führt die Leseeinheit 14 der
entsprechenden Speicherbank 12a–d ein Signal zu,
um diesen Inhalt über
den Befehlsbus 16 an die Verarbeitungseinheit 10 zu
leiten. In Reaktion darauf beginnt die Verarbeitungseinheit 10 mit
der Ausführung
des gelesenen Befehls. Der Verlauf EX stellt die Speicheradressen
(I1, I2, ...) der auszuführenden
Befehle dar. Die Verarbeitungseinheit 10 ist zum Beispiel
eine RISC-Verarbeitungseinheit, die im Prinzip in jeder Taktperiode
mit der Ausführung
eines Befehls beginnen kann. Gelegentlich kann die Ausführung eines
vorhergehenden Befehls jedoch ein „Stehenbleiben" verursachen, so
dass die Verarbeitungseinheit 10 in einer bestimmten Taktperiode
nicht mit der Ausführung
eines Befehls beginnen kann. In diesem Fall wird auch keine Speicherbank 12a–d adressiert,
es sei denn, die Anzahl der mit dem Auslesen beschäftigten
Speicherbänke
ist kleiner als die Anzahl der zum Lesen eines Befehls erforderlichen
Befehlszyklen.
-
Die
Leseeinheit 14 stellt sicher, dass die nacheinander ausgewählten Speicherbänke 12a–d auch
ihre betreffenden adressierten Speicherinhalte nacheinander der
Ver arbeitungseinheit zuführen. Wenn
die Anzahl der Speicherbänke 12a–d mindestens
der maximalen Anzahl von Befehlen entspricht, die durch die Verarbeitungseinheit 10 in
dem zum Lesen eines Befehls aus einer Speicherbank 12a–d benötigten Zeitintervall
ausgeführt
werden kann, kann auf diese Weise in jeder Taktperiode ein neuer
Befehl an die Verarbeitungseinheit 10 geleitet werden.
-
Die
Befehle können
auch Sprungbefehle umfassen, die möglicherweise nur ausgeführt werden, wenn
eine vorgegebene Bedingung erfüllt
wurde. Der Sprungbefehl definiert eine Sprungzieladresse. Nach der
erfolgreichen Ausführung
eines Sprungbefehls (d. h. wenn die Bedingung, falls vorhanden,
erfüllt wurde),
muss anschließend
der Befehl aus der Sprungzieladresse in dem Speicher 12a–d an
die Verarbeitungseinheit 10 geleitet werden. Der Befehl, der
unmittelbar nach der Taktperiode, in der der Sprung ausgeführt wird,
von den Speicherbänken 12a–d zur
Verfügung
steht, wird im Allgemeinen kein Befehl von der Sprungzieladresse
sein. Die Leseeinheit 14 sollte in dieser Hinsicht eine
Korrektur vornehmen.
-
Zu
diesem Zweck informiert die Verarbeitungseinheit 10 die
Leseeinheit 14, wenn ein Sprungbefehl „erfolgreich" ausgeführt wurde,
und informiert sie auch über
die Sprungzieladresse. Die Leseeinheit 14 verhindert dann
die weitere Zuführung
von bereits adressierten Befehlen an die Verarbeitungseinheit 10 und
wählt die
Speicherbank 12a–d,
in der sich die Sprungzieladresse befindet. Die Leseeinheit 14 wählt anschließend erneut
nacheinander die Speicherbänke
ab dieser Sprungzieladresse, wie vor dem Sprungbefehl. Von dem Augenblick
an, an dem der Inhalt der Sprungzieladresse zur Verfügung steht, werden
die Befehle auch wieder der Verarbeitungseinheit 10 zugeführt.
-
Diese
Vorgehensweise hat jedoch den Nachteil, dass der Prozessor während einer
Anzahl von Taktperioden keine Befehle empfängt.
-
3 zeigt eine Ausführungsform,
in der dieser Nachteil im Wesentlichen behoben wurde.
-
3 zeigt eine weitere Ausführungsform
eines erfindungsgemäßen Verarbeitungsgeräts. Dieses
Verarbeitungsgerät
enthält
ebenfalls eine Verarbeitungseinheit 20, eine Anzahl von
Speicherbänken 22a–h,
eine Leseeinheit 24 und einen Takt 29. Die Verbindungen
zwischen der Verarbeitungseinheit 20, den Speicherbänken 22a–h und
der Leseeinheit 24 entsprechen denen aus 1, mit der Ausnahme, dass in 3 drei Befehlsbusse 26a–c dargestellt sind,
die über
eine Pipeline-Einheit 240 mit der Verarbeitungseinheit
gekoppelt sind.
-
Die
Verarbeitungseinheit 20 ist zum Beispiel eine Pipeline-RISC-Verarbeitungseinheit,
die jeden Befehl in aufeinanderfolgenden Stufen ausführt, zum Beispiel
die Stufen der Decodierung, arithmetischen/logischen Verarbeitung,
Datenspeicheradressierung, Schreiben. Die verschiedenen Stufen der aufeinanderfolgenden
Befehle werden in der Pipeline-RISC-Verarbeitungseinheit parallel
ausgeführt: während die
durch einen Befehl spezifizierte arithmetische und logische Operation
ausgeführt
wird, wird bereits der nächste
Befehl parallel decodiert. Wenn die Ausführung eines Befehls beginnt,
kann daher ein vorhergehender Befehl gerade ausgeführt werden. Zu
diesem Zweck enthält
die Verarbeitungseinheit 20 vorzugsweise auch eine Pipeline
von Registern (nicht abgebildet) zur Speicherung der Befehle für die verschiedenen
Stufen. Diese Pipeline kann nach der Pipeline-Einheit 240 angeschlossen
werden, um eine zusammengesetzte Pipeline-Einheit zu bilden.
-
Jede
der Speicherbänke
ist über
eine entsprechende Umschaltschaltung 25a–h mit
drei Befehlsbussen 26a–c gekoppelt.
Die Pipeline-Einheit 240 umfasst zwei Register 242, 244 und
zwei Multiplexer 243, 245. Ein erster Befehlsbus 26a ist
mit einem Eingang eines vordersten Registers 242 verbunden.
Ein Ausgang des vordersten Registers 242 ist über einen
ersten Multiplexer 243 mit einem hintersten Register 244 verbunden.
Ein Ausgang des hintersten Registers 244 ist über den
zweiten Multiplexer 245 mit der Verarbeitungseinheit 20 verbunden. Ein
zweiter Befehlsbus 26b ist über den ersten Multiplexer 243 mit
dem hintersten Register 244 verbunden. Ein dritter Befehlsbus 26c ist über den
zweiten Multiplexer 245 mit dem Verarbeitungselement 20 verbunden.
Das Verarbeitungsgerät
enthält
außerdem
einen Detektor 248, der mit dem Ausgang des vordersten
Registers 242 gekoppelt ist. Ein Ausgang des Detektors
ist mit der Leseeinheit 24 verbunden. Die Anzahl der Register 242, 244 der
Pipeline-Einheit 240 und die Anzahl der Befehlsbusse 26a–c sei
beispielsweise als zwei oder drei angenommen. Im Allgemeinen entsprechen
die Anzahl der Register plus eins und die Anzahl der Befehlsbusse
vorzugsweise der Anzahl der Taktperioden, die die Leseeinheit 24 benötigt, um
einen Befehl aus einer Speicherbank 22a–h zu lesen.
-
In 4 ist die Funktion des Verarbeitungsgeräts aus 3 auf der Basis eines Timing-Diagramms
dargestellt, das eine Reihe von Verläufen mit Speicheradressen (I1,
I2, ..., T1, T2, ...) zeigt. Die Verläufe zeigen die Zeit „n" ausgedrückt in Taktzyklen,
die Speicheradressen (I1, I2, ..., T1, T2, ...), welche aus jeder
der sechzehn Speicherbänke
(Verläufe B1,
B2, ..., B16) gelesen werden, die Speicheradressen (I1, I2, ...,
T1, T, ...), die in den Registern 242, 244 gespeichert
werden, und die Speicheradresse (I1, I2, ..., T1, T2, ...) der in
der Verarbeitungseinheit 20 ausgeführten Befehle. Normalerweise
(d. h. wenn kein Sprungbefehl gelesen wurde) funktioniert das Verarbeitungsgerät aus 3 auf die gleiche Weise
wie das in 1 dargestellte
Verarbeitungsgerät,
bis auf die Ausnahme, dass die Befehle von einer Speicherbank 22a–h zum
vordersten Register 242 geleitet werden und in jeder nachfolgenden
Taktperiode, in der die Verarbeitungseinheit 20 mit der
Ausführung eines
Befehls beginnt, an ein nächstes
Register (beispielsweise direkt an das hinterste Register 244)
in der Pipeline-Einheit 240 weitergeleitet werden. Von dem
hintersten Register 244 werden die Befehle der Verarbeitungseinheit 20 zugeführt, um
ausgeführt
zu werden.
-
Wenn
ein Befehl über
den ersten Befehlsbus 26a in dem vordersten Register 244 eintrifft,
erkennt der Detektor 248, ob es sich um einen bedingten Sprungbefehl
handelt. Wenn dies der Fall ist, informiert der Detektor 248 die
Leseeinheit 24 und führt der
Leseeinheit 24 auch die Sprungzieladresse zu. Dies ist
zum Beispiel der Fall beim Lesen eines Befehls aus der Speicheradresse
I3. In Reaktion auf die Erkennung beginnt die Leseeinheit 24,
wenn die Verarbeitungseinheit 20 die Ausführung eines
nächsten Befehls
startet, parallel mit der Adressierung der Speicherbänke 22a–h mit
Hilfe der Adressen (I4, I5, I6, ...) der Befehle, die logisch dieser
Speicheradresse (I3) des Sprungbefehls folgen, und auch mit der Adressierung
von Speicherbänken
mit den Speicheradressen (T1, T2, ...) ab der Sprungzieladresse
(T1) und logisch nachfolgenden Adressen (T2, T3, ...). (Man sagt,
dass ein Befehl logisch einem anderen Befehl folgt, wenn er – ausgenommen
bei Sprüngen – nach dem
genannten anderen Befehl zur Ausführung gelangt.) Für die Adressierung
der Sprungzieladresse (T1) und der logisch nachfolgenden Adressen
(T2, T3) beginnt die Leseeinheit 24 mit dem parallelen
Adressieren von so vielen Speicherbänken für nachfolgende Befehle, wie
es Befehlsbusse 26a–c gibt,
soweit dies nicht zu einem Konflikt führt, wo eine Speicherbank 22a–h mehr
als einmal adressiert wird. Während
einer oder mehrerer Taktperioden, die auf diese Adressierung folgen,
führt die
Leseeinheit 24 den Speicherbänken 22a–h parallel,
sobald die Verarbeitungseinheit mit der Ausführung eines Befehls beginnt,
eine Speicheradresse (T4, T5, ...) zu, die den Speicheradressen
(T1, T2, T3) der bereits adressierten Befehle folgt, und eine Speicheradresse
(I8, I9), die der Speicheradresse (I4) des Sprungbefehls folgt.
-
Nachdem
die Verarbeitungseinheit 20 anschließend mit der Ausführung von
Befehlen aus einigen Speicheradressen (I1, I2) begonnen hat, beginnt
sie mit der Ausfüh rung
des Sprungbefehls (aus der Speicheradresse I3). Dieser Sprungbefehl
wird dann zum Beispiel in einer ersten Stufe decodiert. In einer
zweiten Stufe wird zum Beispiel die Bedingung des Sprungbefehls
geprüft.
Nach Beendigung des Sprungbefehls (aus der Speicheradresse I3) signalisiert
die Verarbeitungseinheit 20 der Leseeinheit 24, ob
der Sprungbefehl (aus der Speicheradresse I3) erfolgreich ausgeführt wurde
oder nicht (unter „erfolgreich" ist zu verstehen,
dass die Bedingung so beschaffen ist, dass der Sprungzielbefehl
nach dem Sprungbefehl ausgeführt
werden muss). Diese Signalisierung erfolgt zum Beispiel am Ende
eines Befehlszyklus, in dem die Ausführung des Befehls aus der Speicheradresse
(I4), die logisch der Speicheradresse des Sprungbefehls (I3) folgt,
begonnen wurde.
-
Wenn
der Sprungbefehl (aus der Speicheradresse I3) erfolgreich ausgeführt wurde,
stoppt die Leseeinheit 24 in Reaktion auf die Signalisierung
mit der Adressierung der Speicheradressen (I10, I11, nicht abgebildet)
von Befehlen, die normalerweise dieser Speicheradresse (I3) des
Sprungbefehls folgen. Die Verarbeitungseinheit 20 stoppt
die Ausführung
(zum Beispiel Stufen nach der Decodierung) von allen Befehlen (aus
der Speicheradresse I4), deren Ausführung nach dem Sprungbefehl
(aus der Speicheradresse I3) begonnen wurde. Die Leseeinheit 24 steuert
auch die Speicherbänke 22a–h auf eine
solche Weise, dass die aus der Sprungzieladresse (T1) und den nachfolgenden
Adressen (T2, T3), die gleichzeitig mit der Sprungzieladresse adressiert
werden, gelesenen Befehle über
die Befehlsbusse 26a–c zur
Verfügung
stehen. Mit Hilfe der Multiplexer 243, 245 stellt
die Einheit 24 sicher, dass der Sprungzielbefehl (aus der
Speicheradresse T1) der Verarbeitungseinheit 20 parallel
zum Laden der Befehle aus den nachfolgenden Speicheradressen (T3, T2)
in die Register 242, 244 der Pipeline-Einheit 240 zugeführt wird.
Während
nachfolgender Taktperioden werden die nachfolgenden Befehle wie üblich in
das vorderste Register 242 geladen. Dieses Verfahren kann
im Fall von unbedingten Sprungbefehlen angewendet werden, sei es,
dass die Leseeinheit das Lesen von Befehlen, die logisch dem Sprungbefehl
folgen, bereits ab der Signalisierung des unbedingten Sprungbefehls
stoppen kann.
-
Wenn
der Sprungbefehl (aus der Speicheradresse I3) nicht erfolgreich
ausgeführt
wurde (die Situation ist in 4 nicht
dargestellt), stoppt die Leseeinheit 24 die Adressierung
der Speicheradressen (T7, T8) von Befehlen, die der Sprungzieladresse (T1)
folgen. Während
aufeinanderfolgender Taktperioden werden die dem Sprungbefehl folgenden
Befehle wieder in das vorderste Register 242 geladen, wobei
dann der aus der Sprungzieladresse gelesene Befehl und die nachfolgenden
Befehle ignoriert werden.
-
Wenn
die Verarbeitungseinheit 20 einen Sprungbefehl ausführt, der
nicht durch den Detektor 248 signalisiert wurde (zum Beispiel
weil der entsprechende Befehl in die Pipeline-Einheit 240 geladen wurde,
während
das vorderste Register 242 umgangen wurde), verarbeitet
die Leseeinheit 24 den Sprungbefehl wie in Bezug auf die 1 und 2 beschrieben, so dass mehr Zeit verloren
geht. Das gleiche gilt für
Sprungbefehle, deren Sprungzieladresse nicht im vorhinein bekannt
ist, zum Beispiel weil sie von der Verarbeitungseinheit 20 auf
der Basis von Daten berechnet werden muss. Es hat sich in der Praxis
gezeigt, dass diese Umstände
nur selten in Programmen auftreten. Wenn gewünscht, kann dieses Problem
abgemildert werden, indem man eine Vielzahl von Sprungdetektoren
(nicht abgebildet) aufnimmt, die jeweils mit dem Eingang eines entsprechenden
Befehlsbusses 26b–c verbunden
sind. Diese Detektoren können
der Leseeinheit 24 im vorhinein Sprungbefehle signalisieren,
die in die Pipeline-Einheit geladen wurden, während das vorderste Register 242 umgangen
wurde. Die Leseeinheit 24 kann dann derartige Sprungbefehle
wie zuvor beschrieben verarbeiten, so dass weniger Zeit verloren geht.
-
Während der
Adressierung der Speicherbänke 22a–h kann
ein Konflikt zwischen der Adressierung der Speicheradressen (I4,
I5, I6, ...) von Befehlen, die logisch dem Sprungbefehl folgen,
und der Adressierung des Sprungzielbefehls (T1) und der dem Sprungzielbefehl
(T2, T3, ...) logisch folgenden Befehlen auftreten. Ein Konflikt
tritt auf, wenn eine Speicherbank 22a–h zum Lesen eines
Befehls adressiert werden muss, während diese Speicherbank auch
für einen
anderen Befehl adressiert werden muss oder noch mit dem Lesen eines
anderen Befehls befasst ist. Ein derartiger Konflikt kann nicht zwischen
den Speicheradressen (I1, I2, I4, I5, ...) von Befehlen auftreten,
die logisch der Speicheradresse (I3) des Sprungbefehls vorangehen
oder folgen, weil Speicheradressen von direkt logisch folgenden
Befehlen auf der Basis eines zyklischen Warteschlangenbetriebs auf
verschiedene Speicherbänke 22a–h verteilt
sind und weil die Anzahl der Speicherbänke so groß ist, dass eine Speicherbank 22a–h das
Lesen immer beendet haben wird, bevor so viele neue Befehle zur
Ausführung übernommen
werden konnten, dass diese Speicherbank 22a–h wieder
zum Lesen eines Befehls adressiert werden kann, der logisch auf
einen zuvor gelesenen Befehl folgt. Aus dem gleichen Grund kann
auch kein Konflikt zwischen dem Lesen des Sprungzielbefehls (T1)
und der Befehle (T2, T3, ...) auftreten, die logisch auf den Sprungzielbefehl
folgen.
-
Die
Speicheradresse (T1) des Sprungzielbefehls kann jedoch in einer
Speicherbank 22a–h gespeichert
werden, in der auch die Speicheradresse (I4, I5, I6, ...) eines Befehls
gespeichert wird, die logisch der des Sprungbefehls (I3) folgt und
die in einem Zeitintervall gelesen werden sollte, das sich mit dem
zum Lesen des Sprungzielbefehls (T1) erforderlichen Zeitintervall überlappt.
Das gleiche kann für Befehle
(T2, T3, ...) gelten, die logisch dem Sprungzielbefehl (T1) folgen.
Die Leseeinheit 24 erkennt derartige Konflikte und verhindert
daraus entstehende Fehler.
-
Wenn
die gleiche Speicherbank 22a–h zum Lesen von zwei
Befehlen gleichzeitig adressiert werden müsste (d. h. innerhalb der gleichen
Taktperiode), wählt
die Leseeinheit 24 einen dieser beiden Befehle und adressiert
die Speicherbank 22a–h nur
zum Lesen des gewählten
Befehls. Die Leseeinheit 24 kann diese Entscheidung im
Prinzip zufallsmäßig treffen.
Die Leseeinheit 24 verschiebt das Lesen des nicht-gewählten Befehls
und der logisch folgenden Befehle, bis bekannt ist, ob der Sprung
erfolgreich war oder nicht. Wenn der Sprungzielbefehl in einer Speicherbank 22a–h gespeichert
wird, die noch mit dem Lesen eines anderen Befehls befasst ist,
wenn der Sprungbefehl signalisiert wird, wählt die Leseeinheit 24 zwischen
dem Unterbrechen dieses Lesevorgangs und dem Adressieren des Sprungzielbefehls auf
der einen Seite und dem Unterlassen der Adressierung des Sprungzielbefehls
auf der anderen Seite. (Dies erfolgt natürlich nur, wenn die Speicherbänke 22a–h Speicher
enthalten, die während
(des relevanten Teils) der Leseoperation unterbrochen werden dürfen, also
zum Beispiel nicht im Fall von DRAMs). Die Leseeinheit 24 verschiebt
das Lesen des nicht-gewählten
Befehls und der diesem logisch folgenden Befehle, bis bekannt ist,
ob der Sprung erfolgreich war oder nicht.
-
Wenn
sich herausstellt, dass infolge des Sprungs der derzeit adressierte
Befehl ausgeführt werden
muss, setzt das Verarbeitungsgerät
seinen Betrieb fort, wie unter Bezugnahme auf 4 beschrieben. Wenn sich herausstellt,
dass infolge des Sprungs der nicht-adressierte Befehl ausgeführt werden
muss, adressiert die Leseeinheit 24 nun diesen Befehl und
die diesem logisch folgenden Befehle. In diesem Fall kann die Verarbeitungseinheit 20 die Ausführung der
Befehle für
einige Taktperioden nicht starten, bis die auf diese Weise adressierten
Befehle aus den Speicherbänken 22a–h ausgelesen
wurden. Die gelesenen Befehle werden dann der Verarbeitungseinheit 20 und
den Registern 242, 244 zugeführt, und anschließend kann
die Verarbeitungseinheit 20 mit dem Betrieb fortfahren.
Die Leseeinheit 24 kann dann im Prinzip parallel zum Adressieren
dieses Befehls (parallel bedeutet in der gleichen Taktperiode) auch
eine Anzahl von Adressen adressieren, die diesem Befehl logisch
folgen, so dass diese logisch folgenden Befehle so schnell wie möglich zum Laden
in die Register 242, 244 der Pipeline-Einheit zur
Verfügung
stehen und dadurch die Wartezeit der Verarbeitungseinheit 20 minimiert
wird und die relevanten Speicherbänke 22a–h so
schnell wie möglich wieder
für die
weitere Adressierung zur Verfügung stehen.
In dem Fall, dass die Speicherbänke 22a–h Speicher
umfassen, die nicht während
(eines Teils) der Leseoperation unterbrochen werden dürfen (wie dies
zum Beispiel bei DRAMs der Fall ist), kann es erforderlich sein,
das Lesen dieser logisch folgenden Befehle zu verschieben.
-
Die
von der Leseeinheit 24 getroffene Wahl beim Bestimmen,
welcher Befehl bei einem Konflikt gelesen werden soll und welcher
Befehl nicht gelesen werden soll, kann auf verschiedene Weise implementiert
werden. Akzeptable Möglichkeiten
sind: eine zufallsmäßige Wahl,
eine bewusste Entscheidung für
das Sprungziel, oder eine bewusste Entscheidung für den Befehl,
der logisch dem Sprungbefehl folgt. Solange der Erfolg des Sprungs
nicht vorhergesagt werden kann, kann bei der Ausführung der Befehle
immer ein Zeitverlust auftreten, wenn sich herausstellt, dass der
Befehl ausgeführt
werden muss, der nicht gelesen wurde. Um diesen Zeitverlust zu minimieren,
können
zusammen mit dem Sprungbefehl Informationen gespeichert werden,
mit denen angegeben wird, welche Entscheidung vorzugsweise zu treffen
ist. Nach dem Lesen kann die Leseeinheit 24 dann eine Entscheidung
auf der Basis dieser Informationen treffen. Diese Informationen können zum
Beispiel durch einen Kompilierer erzeugt oder während der Ausführung der
Befehle aktualisiert werden, und zwar in Abhängigkeit davon, ob der Sprung
erfolgreich war oder nicht.
-
Außerdem kann
durch das Kompilieren auch sichergestellt werden, dass Speicherkonflikte
verhindert werden, indem ein Sprungzielbefehl an einer solchen Adresse
in Bezug auf den zugehörigen
Sprungbefehl platziert wird, dass keine Konflikte entstehen, d.
h., indem man ihn in der zyklischen Warteschlangensequenz der Speicherbänke 22a–h weit
genug von dem Sprungbefehl entfernt platziert.