-
1. Gebiet
der Erfindung
-
Die
Erfindung betrifft im allgemeinen Mikroprozessoren und insbesondere
einen Prozessor zum Durchführen
von Medien-Operationen. Insbesondere betrifft die Erfindung einen
Prozessor mit einer modifizierten Harvard-Speicherarchitektur, der
Streaming-ALU-Operationen durchführt.
-
2. Beschreibung des Stands
der Technik
-
Es
besteht ein allgemeines Interesse daran, die Geschwindigkeit von
Computerprozessoren zu erhöhen.
Ein besonders großes
Interesse besteht insbesondere auf dem Gebiet der Medienverarbeitung,
einschließlich
digitaler Signalverarbeitung (DSP), graphische Verarbeitung, Audioverarbeitung
und Videoverarbeitung. Auf diesem Gebiet verarbeitet ein typischer
Algorithmus eine große
Anzahl von Elementen, wobei jedes Element nur einmal verwendet wird.
Beispielsweise verarbeitet eine typische DSP-Filterschleife eine
große
Anzahl verschiedener Eingangs-Abtastwerte und wendet verschiedene
Operanden eines großen
Koeffizientenfeldes auf jeden Eingangs-Abtastwert an. Daher ist
für einen
typischen Operationszyklus in einer solchen Verarbeitungsumgebung
folgendes notwendig: 1) Ermitteln der Adressen des Abtastwertes
und des Koeffizienten; 2) Holen des Abtastwerts und des Koeffizienten
aus dem Speicher; 3) Anwenden einer Operation auf den Abtastwert
sowie auf den Koeffizienten und 4) Speichern des Ergebnisses der
Operation.
-
Um
den Anforderungen der Medienverarbeitung gerecht zu werden, wurden
verschiedene Techniken eingesetzt, um entweder die Taktgeschwindigkeit
des Prozessors zu erhöhen,
oder um die Effizienz der von dem Prozessor durchgeführten Befehlsverarbeitung
zu verbessern. Eine dieser Techniken ist die Computer-Architektur
mit reduziertem Befehlssatz (reduced instruction set computer, RISC).
Eine RISC-Architektur verwendet ein Design mit geringer Komplexität, das vorsieht,
einen kleinen Satz einfacher Befehle zu bedienen, um eine hohe Geschwindigkeit
und eine hohe Leistungsfähigkeit
zu erreichen. Ferner verwendet eine RISC-Architektur innerhalb des Befehlsformats
Befehle mit fester Länge
mit sehr wenigen Befehls formaten und mit festen Positionen für bestimmte
Operandenfelder, wie Registerindizes. Diese Architektur ermöglicht Befehlsdecodierer
und Steuerlogik mit geringer Komplexität, wobei diese geringere Komplexität in eine
erhöhte
Leistungsfähigkeit
anderer Teile des Prozessors umgesetzt werden kann.
-
Eine
andere Art und Weise, die Komplexität in einen RISC-basierten Prozessor
zu verringern, ist das Entkoppeln der Funktionen der arithmetisch
logischen Einheit (ALU) von dem Bewegen der Operanden zwischen der
Registerdatei und dem Speicher. Dieses Entkoppeln führt zu einer
Lade-/Speicherarchitektur, in der Speicherzugriffe nur durch explizites
Laden und Speichern gestattet sind. Daher führt diese Lade-/Speicherarchitektur
zu einer Erweiterung der Codegröße, da ein
Befehl jeden Speicherzugriff explizit aufrufen muß. Um die
oben erörterten
DSP-Schritte durchzuführen,
muß der
RISC-Prozessor daher für
eine einzige Iteration einer DSP-Filterschleife zweimal laden und
speichern.
-
In
der Veröffentlichung "Utilising low level
parallelism in general purpose code: the HARP project" von Adams, R. G.
et al., Microprocessing and Microprogramming, Band 29, Nr. 3 vom
Oktober 1990, wird auf den Seiten 137–149 ein RISC-Prozessor beschrieben,
der verschiedene ALUs und eine boolsche Einheit verwendet, um arithmetische
und logische Operationen durchzuführen. Die Einheiten arbeiten
parallel, wobei von dem Befehl Operanden von verschiedenen Allzweck-Registern
sowie ein Direktwert verwendet werden. Das Befehlsformat umfaßt ein Datenziel
und zwei Datenquellen.
-
Im
Gegensatz zu RISC-Prozessoren haben Computerprozessoren mit einem
komplexen Befehlssatz (complex instruction set computer processors,
CISC) Befehle, die simultane Speicherzugriffe auf zwei verschiedene
Speicherorte zulassen. Durch die Verwendung dieser Befehle kann
ein Programmierer in einem einzigen Befehlszyklus sowohl einen Eingangs-Abtastwert als auch
einen Koeffizienten abrufen. Ferner sind bei solchen Prozessoren
simultane ALU-Operationen möglich.
Somit ist die zur Durchführung
einer DSP-Filterschleife notwendige Anzahl von Befehlen reduziert.
-
Um
diese funktionelle Parallelität
zu erreichen, haben CISC-Prozessoren im allgemeinen komplexe Befehls-Decodierschemata,
in denen verschiedene Operanden implizit für die Befehle stehen, wobei
der Lade-/Speichermechanismus mit der Codierung der ALU-Operation
gekoppelt ist. Dementsprechend erlauben nur wenige Befehle paralleles
Laden bzw. Spei chern. Sogar diese Operationen sind zudem hinsichtlich
der Ein-/Ausgabe auf Kombinationen kleiner Registerdateien begrenzt
und unterstützen
nur eine begrenzte Untermenge paralleler ALU-Operationen. Ferner
erfordern solche Prozessoren komplexere Befehlsdecodierer und haben
daher geringere Taktraten.
-
Eine
weitere Technik zum Erhöhen
der Prozessoreffizienz ist die superskalare Befehls-Ablaufsteuerung (superscalar
instruction scheduling). Prozessoren, die superskalare Befehls-Ablaufsteuerungen
unterstützen,
extrahieren Parallelitäten
dynamisch auf dem Befehlsniveau ausgehend von dem Befehlsstream
und gruppieren dann Lade- und Speicheroperationen mit den ALU-Operationen.
Auf diese Weise können
die Befehle parallele Funktionseinheiten in dem Prozessor verwenden.
Jedoch sind solche Prozessoren hinsichtlich des Designs und der
Größe sehr
komplex.
-
Ein
weiterer Ansatz zum Erhöhen
der Prozessoreffizienz ist das Format mit sehr langem Befehlswort (very
long instruction word, VLIW). Das VLIW-Format codiert auf dem Befehlsniveau
explizit Parallelitäten
in ein sehr langes Befehlswort. Das VLIW hat typischerweise Felder
für häufig durchgeführte Operationen,
beispielsweise ALU-Operationen und Speicherzugriffe. Bei der Verwendung
von VLIWs können
die für
eine DSP-Filterschleife verwendeten Befehle in ein einziges Befehlswort
zusammengefaßt
werden. Ferner ermöglicht
das VLIW-Format die Verwendung von Decodierern mit geringer Komplexität und bietet
die Voraussetzungen für
eine hohe Leistungsfähigkeit,
indem die Verwendung mehrerer funktioneller Einheiten innerhalb
des Prozessors parallelisiert ist.
-
Jedoch
setzt das VLIW-Format im wesentlichen voraus, daß die in dem Instruktionsstream
vorliegenden Parallelitäten
bestimmt werden, wenn das Programm kompiliert wird. Diese Voraussetzung
führt zu
einem extrem komplexen Programmiermodell, weshalb das Programm schwierig
zu kompilieren ist. Daher werden die Vorteile, die sich durch die
Verarbeitungseffizienz mittels der Verwendung des VLIW-Formats ergeben, durch
Schwierigkeiten während
des Kompilierens beschnitten.
-
ABRISS DER
ERFINDUNG
-
Die
oben beschriebenen Probleme werden durch einen neuen Prozessor und
ein Verfahren für
Datenstreaming gelöst,
die gemäß der vorliegenden
Erfindung aufgebaut sind. Der Prozessor hat vorzugsweise eine modifizierte
Harvard-Speicherarchitektur mit ersten und zweiten adressierbaren
Speichern, einer Adreßregisterdatei
mit einer ersten und einer zweiten Gruppe von Adreßregistersätzen, erste
und zweite Adreßerzeugungseinheiten,
die mit der jeweiligen ersten und zweiten Gruppe von Adreßregistersätzen gekoppelt
sind, erste und zweite Stream-Register,
eine Allzweckregister-Datei-(Allzweckregister – general purpose register, GPR)
und eine arithmetisch-logische Einheit (ALU).
-
Die
Adreßregisterdatei
umfaßt
vorzugsweise acht Registersätze,
die in jeweils zwei Gruppen von vier Registern unterteilt sind.
Jedes Register umfaßt
ein Basis-Register, ein Schritt-Register
und eine Modulo-Register. Die ersten und zweiten Gruppen von Adreßregistersätzen adressieren
den jeweiligen ersten und zweiten adressierbaren Speicher. Wenn
ein Speicherzugriff auf einen Adreßregistersatz durchgeführt wird,
werden Inhalte dieses Adreßregistersatzes
als Adresse an den entsprechenden adressierbaren Speicher gesendet. Die
jeweiligen ersten und zweiten Adreßerzeugungseinheiten aktualisieren
gemäß einem
von sechs Adressiermodi die Inhalte der gewählten Adreßregistersätze in der ersten und zweiten
Gruppe.
-
Der
erste und der zweite adressierbare Speicher geben in Reaktion auf
das Empfangen einer Adresse eines Adreßregistersatzes Daten aus.
Diese Daten werden in den jeweiligen ersten und zweiten Stream-Registern
gespeichert. Die GPR-Registerdatei enthält 32 GPRs. Die ALU nimmt zwei
Operanden als Eingaben an, wobei der erste entweder von dem ersten
Stream-Register
oder einem GPR stammt und der zweite entweder von dem zweiten Stream-Register
oder einem GPR stammt. Die Ausgaben der ALU können in dem ersten oder zweiten
adressierbaren Speicher oder in einem GPR gespeichert werden.
-
Der
Prozessor führt
Streambefehle aus. Ein Streambefehl führt drei Aktionen parallel
aus: 1) er führt eine
spezifizierte ALU-Operation bezüglich
der Operanden in dem Stream-Register oder in den GPRs durch und
speichert das Ergebnis in einem GPR oder in einem Speicher; 2) er
aktualisiert die Stream-Register, indem Adressen von der Adreßregisterdatei
verwendet werden, um neue Werte zu laden, und 3) er aktualisiert
die Adressen in der Adreßregisterdatei.
-
Um
diese drei Aktionen durchzuführen,
codiert ein Streambefehl ein Operanden-Auswahlfeld und drei Operandenfelder.
Das Operanden-Auswahlfeld wählt
die Operanden für
die ALU-Operation
aus und spezifiziert, ob das Ergebnis im ersten oder in dem zweiten
adressierbaren Speicher oder in einem GPR gespeichert wird. Die
ersten und zweiten Operandenfelder spezifizieren Operanden, die
von einer ALU-Operation verwendet werden, welche durch einen darauffolgenden
Streambefehl ausgeführt
wird. Der erste Operand kann entweder einen Registersatz in der
ersten Gruppe innerhalb der Adreßregisterdatei und einen Adressiermodus, oder
ein GPR spezifizieren. In gleicher Weise kann der zweite Operand
entweder einen Registersatz in der zweiten Gruppe und einen Adressiermodus,
oder ein GPR spezifizieren. Es sind fünf Bits notwendig, um entweder
einen Registersatz und einen Adressiermodus oder ein bestimmtes
GPR zu wählen.
Dementsprechend sind die Bits zum Adressieren eines GPRs genauso
positioniert, wie die Bits, welche zum Auswählen eines Registersatzes und
eines Adreßmodus
vorgesehen sind.
-
KURZBESCHREIBUNG
DER ZEICHNUNGEN
-
1 ist
ein Blockdiagramm, das eine Harvard-Speicherarchitektur nach dem
Stand der Technik in der Übersicht
darstellt;
-
2 ist
ein Blockdiagramm, das die funktionellen Komponenten eines Prozessors
in der Übersicht darstellt,
der Datenstreaming unterstützt;
-
3 ist
ein Blockdiagramm, das eine Adreßregisterdatei in der Übersicht
darstellt;
-
4 ist
eine Liste, die ein Befehlswort-Format darstellt, welches von dem
Prozessor von 2 verwendet wird; und
-
5 ist
ein Zeitverlaufdiagramm, das die von dem Prozessor von 2 durchgeführten Schritte
darstellt, wenn dieser einen Streambefehl ausführt.
-
DETAILLIERTE
BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGEN
-
Die 1 zeigt
eine Darstellung einer Harvard-Speicherarchitektur 100 nach
dem Stand der Technik in der Übersicht.
Bei der Harvard-Achitektur ist die Prozessorkern-Logik 110 über zwei
unabhängige
Busgruppen X, Y mit zwei unabhängigen
Speicherbänken 112, 114 verbunden.
Der Prozessorkern 110 ist mit einem X-Speicher 112 über einen
X-Bus gekoppelt, der einen Adreßbus 116 und
einen Datenbus 118 aufweist. Ferner ist der Prozessorkern 110 über einen
Y-Bus mit einem Y-Speicher 114 gekoppelt, der einen Adreßbus 120 und einen
Datenbus 122 aufweist. Üblicherweise
werden in einer Harvard-Architektur Daten in einer Speicherbank gehalten,
während
Befehle in der anderen gehalten werden. Dementsprechend wird eine
Architektur, bei der Daten in zwei Speicherbänken und Befehle in einer dritten
gehalten werden, "modifizierte
Harvard-Architektur" genannt.
-
Ein
Vorteil der modifizierten Harvard-Architektur ist, daß zwei Speicherzugriffe
in einem einzigen Befehlszyklus ausgeführt werden können. Dieser
Vorteil wird erzielt, wenn ein Prozessor mit dieser Architektur Medien-Operationen
durchführt.
Bei solchen Operationen arbeitet der Prozessor typischerweise auf
zwei Datenfeldern, nämlich
auf einem Koeffizientenfeld und auf einem Abtastdatenfeld. Wenn
die Felder in verschiedenen Speichern gespeichert sind, dann kann
der Prozessor durch einen einzigen Befehlszyklus auf zwei Datenfelder
zugreifen.
-
Die 2 ist
ein Blockdiagramm, das bestimmte funktionelle Komponenten eines
Prozessors 200 in der Übersicht
darstellt, der gemäß einer
Ausführung
der vorliegenden Erfindung konstruiert wurde. Es sind ein Befehlsspeicher 210,
ein Befehlsdecodierer 214, X- und Y-Adreßregisterdateien 216 und
eine Allzweck-Register-(general purpose register)-Datei 218 dargestellt.
Ferner sind zwei X- und Y-Adreßerzeugungseinheiten (address
generation units, AGUs), eine Lade-/Speichereinheit 222,
ein X-Speicher 224X und ein Y-Speicher 224Y dargestellt.
Ferner zeigt die 2 X- und Y-Stream-Register 226,
X- und Y-Multiplexer (MUXs) 228, eine arithmetisch-logische
Einheit (arithmetic logic unit ALU) 230 und einen GPR-Multiplexer
(GPR-MUX) 232.
-
Der
Befehlsspeicher 210 ist mit dem Befehlsdecodierer 214 gekoppelt
und hält
Befehle für
das von dem Prozessor 200 auszuführende Programm. Der Befehlsspeicher 210 empfängt von
dem Befehlsdecodierer 214 einen Programmzähler, der
einen Befehl in dem Speicher 210 identifiziert. Der identifizierte
Befehl wird aus Befehlsspeicher 210 an den Befehlsdecodierer 214 übertragen.
-
Der
Befehlsdecodierer 214 ist mit dem Befehlsspeicher 210,
den X- und Y-Adreßregisterdateien 216 und
der GPR-Datei 218 gekoppelt. Ferner ist der Befehlsdecodierer 214 über Steuerleitungen
(in der 2 als gestrichelte Linien dargestellt)
mit den X- und Y-Adreßregisterdateien 216,
der Lade-/Speichereinheit 222, den X- und Y-Multiplexern 228,
der ALU 230 und dem GPR-Multiplexer 232 gekoppelt.
Der Befehlsdecodierer decodiert Be fehle, die der Befehlsspeicher 210 empfängt, und
steuert abhängig
davon den Betrieb des Prozessors 200. Zum Zwecke dieser
Betrachtung wird angenommen, daß der
empfangene Befehl ein Streaming-ALU-Befehl ist. Wie im weiteren
detailliert beschrieben ist, spezifiziert der Streaming-ALU-Befehl
drei Operanden: zwei Quellen und ein Ziel. Die Quellenoperanden
werden aus den X- und Y-Stream-Registern 226 und der GPR-Datei 218 ausgewählt. Der
Zieloperand wird entweder aus dem X- oder Y-Speicher 224 oder
aus der GPR-Datei 218 ausgewählt. Während der Befehl decodiert
wird, sendet der Befehlsdecodierer 214 einen ersten Index
von dem ersten Operanden an die X-Adreßregisterdatei 216X,
einen zweiten Index von dem zweiten Operanden an die Y-Adreßregisterdatei 216Y und
alle drei Operanden an die GPR-Datei 218. Ferner sendet
der Befehlsdecodierer 214 Steuersignale, welche Befehls-Adreßmodi angeben,
an die AGUs 220, und Signale, welche angeben, ob der GPR-Multiplexer 232 in
die GPR-Datei 218 schreiben wird, an die GPR-Datei 218.
-
Die
X- und Y-Adreßregisterdateien 216 empfangen
die jeweiligen X- und Y-Indizes von dem Befehlsdecodierer 214.
Ferner sind die X- und Y-Adreßregisterdateien 216 jeweils
mit den entsprechenden AGUs 220 und mit der Lade-/Speichereinheit 222 gekoppelt.
Die 3 zeigt eine detailliertere Ansicht der Adreßregisterdatei 216.
Die Adreßregisterdatei 216 hat
acht Adreßregistersätze A0–A7, die
in zwei Gruppen von vier Registersätzen A0–A3, A4–A7 unterteilt sind. Die erste
Gruppe von vier Registersätzen
bildet die X-Registerdatei 216X, während die zweite Gruppe von
vier Registersätzen
die Y-Registerdatei 216Y bildet. Jeder Adreßregistersatz,
wobei der Registersatz A0 beispielhaft ist, hat ein Basis-Register
B0 mit 32 Bit, ein Schritt-Register S0 mit 16 Bit und ein Modulo-Register
M0 mit 16 Bit. Da nur vier Registersätze in jeder Gruppe A0–A3, A4–A7 sind,
ist lediglich ein Index mit zwei Bit notwendig, um einen bestimmten
Registersatz aus einer Gruppe auszuwählen. Die jeweiligen X- und Y-Indizes, die
von dem Befehlsdecodierer 214 empfangen werden, wählen ein Register
in den X- und Y-Adreßregisterdateien 216.
Die Inhalte der ausgewählten
X- und Y-Adreßregistern 216 werden
an die entsprechenden AGUs 220 gesendet, und die Inhalte
der ausgewählten
X- und Y-Basis-Register 216 werden an die Lade-/Speichereinheit 222 gesendet.
-
Die
X- und Y-AGUs 220 empfangen die entsprechenden Inhalte
der X- und Y-Adreßregister
und die Adreßmodus-Steuersignale
von dem Befehlsdecodierer 214, wobei deren Ausgang mit
den Eingängen
der X- und Y-Adreßregisterdateien 216 gekoppelt
ist. Die AGUs 220 modifizieren im nachhinein (post-modify)
die gewählten
Basis-Register B0, abhängig
von dem Adreßmodus,
dem Schritt-(S0)-Register und dem Modulo-(M0)-Register, in Reaktion
auf den Empfang von Adreßregisterinhalten.
Die von den AGUs 220 unterstützten Modi umfassen: 1) automatisches
Dekrementieren im nachhinein (auto post decrement); 2) automatisches Inkrementieren
im nachhinein (auto post increment); 3) schrittweises Dekrementieren
im nachhinein (step post decrement); 4) schrittweises Inkrementieren
im nachhinein (step post increment); 5) Basismodus (base) (keine Änderung);
und 6) Bit-invertierter (bit reversed)-Modus. In den Modi 1) und 2) wird das
Basis-Register B0 gemäß den Inhalten
eines Benutzer-Prozessor-Statusregisters (nicht gezeigt) modifiziert.
In den Modi 3 und 4 wird das Basis-Register B0 gemäß den Inhalten des Schritt-Registers
S0 entweder inkrementiert oder dekrementiert. In den Modi des Dekrementierens/Inkrementierens
im nachhinein (post decrement/increment modes), den Modi 1 bis 4,
qualifiziert der Modulo-Wert in dem Modulo-Register M0 die Adreßberechnung, um Umlaufpuffern
eine Adressierung bereitzustellen. Da es sechs Adreßmodi gibt,
werden drei Bits benötigt,
um einen bestimmten Modus auszuwählen.
-
Die
jeweiligen X- und Y-Adreßregisterdateien 216 senden
zudem die Inhalte der ausgewählten
Basis-Register an die Lade-/Speichereinheit 222. Die Lade-/Speichereinheit 222 ist
mit den X- und Y-Adreßregisterdateien 216,
den X- und Y-Stream-Registern 226, der ALU 230,
dem GPR-Multiplexer 232 und der GPR-Datei 218 gekoppelt
und empfängt
Steuersignale von dem Befehlsdecodierer 214. Ferner ist
die Lade-/Speichereinheit 222 bidirektional mit den X-
und Y-Speichern 224 gekoppelt. Die Kopplungen 223 zwischen
den Lade-/Speichereinheiten 222 und
den Speichern 224 umfassen jeweils getrennte Adreß- und Datenbusse,
wie diejenigen, welche in 1 gezeigt
sind, und bilden daher eine modifizierte Harvard-Architektur.
-
Die
Lade-/Speichereinheit 222 lädt Daten von adressierbaren
Speicherorten innerhalb des Prozessors 200, einschließlich der
X- und Y-Speicher 224 und speichert Daten in diesen Speicherorten.
Für Stream-Zugriffe
lädt die
Lade-/Speichereinheit 222 Daten von den X- und Y-Speichern 224 in
die jeweiligen X- und Y-Stream-Register 228. Für normale
Zugriffe lädt
die Lade-/Speichereinheit 222 Daten über den GPR-Multiplexer 232 von
den Speichern in die GPR-Datei 218. Die Lade-/Speichereinheit 222 speichert
Eingangsdaten, die von der ALU 230 empfangen werden, in
dem X- oder Y-Speicher 224, falls dies von einem Streaming-Befehl spezifiziert
ist. Die Lade-/Speichereinheit 222 speichert ferner in
Reaktion auf einen expliziten Speicherbefehl Daten im Speicher,
die von der GPR-Datei 218 empfangen werden.
-
Die
X-Registerdatei 216X kann nur Adressen in dem X-Speicher 216X referenzieren,
während
die Y-Registerdatei 216Y nur Adressen innerhalb des Y-Speichers 216Y referenzieren
kann. Daher muß die
Lade-/Speichereinheit 222 nicht ermitteln, auf welchen
Speicher 224 sich eine von der Adreßregisterdatei 216 empfangene
Adresse bezieht. Für
Zugriffe ohne Streaming (non-streaming accesses) identifiziert die
Adresse, welche von der Lade-/Speichereinheit 222 empfangen
wurde, explizit denjenigen Speicher, auf den sich die Adresse bezieht.
-
Die
X- und Y-Speicher 224 sind mit der Lade-/Speichereinheit 222 gekoppelt
und sind adressierbare Speicher. In Reaktion auf das Empfangen einer
Speicheradresse und von Steuersignalen von der Lade-/Speichereinheit 222 speichern
die Speicher entweder eine Eingabe in der referenzierten Speicheradresse
oder geben die Inhalte der referenzierten Speicheradresse aus.
-
Die
X- und Y-Stream-Register 226 empfangen Eingaben von der
Lade-/Speichereinheit 222, geben Werte an die X- und Y-Multiplexer 228 aus
und haben eine Breite von mindestens 32 Bits. Die X- und Y-Stream-Register 226 speichern
die Daten, welche von der Lade-/Speichereinheit 222 von
den jeweiligen X- und Y-Speichern 224 geholt wurden, wenn
Befehle der ALU 230 mit Streaming ausgeführt werden.
-
Die
GPR-Datei 218 weist Eingänge auf, die mit dem Befehlsdecodierer 214 und
dem GPR-Multiplexer 232 gekoppelt
sind, und hat Ausgänge,
die mit den X- und Y-Multiplexern 228 und der Lade-/Speichereinheit 222 gekoppelt
sind. Innerhalb der GPR-Datei 218 sind 32 GPRs vorgesehen,
und jeder GPR hat eine Breite von mindestens 32 Bits. Die GPRs 218 halten
Allzweckdaten, die von dem Prozessor 200 verwendet werden. Dementsprechend
können
in Reaktion auf explizite Lade- und Speicherbefehle die Inhalte
der GPRs innerhalb der Datei 218 über die Lade-/Speichereinheit 222 von
dem Speicher geladen und in diesem Speicher gespeichert werden.
-
Wenn
ein Streamingbefehl decodiert wird, sendet der Befehlsdecodierer 214 drei
in dem Streambefehl vorliegende Operandenfelder an die GPR-Datei 218.
Die ersten zwei Operanden spezifizieren die Quellen für die Streaming-Operation
der ALU 230. Da die Datei 218 32 GPRs aufweist,
spezifizieren Indizes mit fünf
Bit in jedem der ersten zwei Operandenfelder bestimmte GPRs innerhalb
der GPR-Datei 218. Die Inhalte des GPRs, welche von dem
ersten Operanden spezifiziert werden, werden an den Multiplexer 228X gesendet,
welcher dem X-Register 226X entspricht,
und die Inhalte des GPRs, welche von dem zweiten Operanden spezifiziert werden,
werden an den Multiplexer 228Y gesendet, welcher dem Y-Register 226Y entspricht.
Der dritte Operand spezifiziert zusammen mit dem im weiteren beschriebenen
Operanden-Auswahlfeld das Ziel des Ergebnisses der Operation der
ALU 230. Wenn dieses Ziel ein GPR ist, dann empfängt die
GPR-Datei 218 von der ALU 230 das Ergebnis über den
GPR-Multiplexer 232 und speichert dieses in dem GPR, welches
durch den dritten Operanden spezifiziert ist.
-
Die
X- und Y-Multiplexer 228 empfangen die jeweiligen Inhalte
der X- und Y-Stream-Register 226 sowie
die Inhalte der spezifizierten ersten und zweiten GPRs. Die Ausgaben
des Multiplexers 228 werden an die ALU 230 weitergegeben.
Jeder Multiplexer empfängt
Steuersignale von dem Befehlsdecoder 214, die spezifizieren,
welche Eingabe der Multiplexer an die ALU 230 ausgibt.
-
Die
ALU 230 empfängt
Eingaben von den Multiplexern 228, empfängt Steuersignale von dem Befehlsdecodierer 214 und
weist einen Ausgang auf, der mit der Lade-/Speichereinheit 222 und
dem GPR-Multiplexer 232 gekoppelt ist. Die ALU 230 führt arithmetische
Operationen mit ihren Eingaben aus und erzeugt eine Ausgabe. Der
durchgeführte
Operationstyp wird durch die Steuersignale spezifiziert, die von
dem Befehlsdecodierer 214 empfangen werden.
-
Der
GPR-Multiplexer 232 weist einen Eingang auf, der mit dem
Ausgang der ALU 230 gekoppelt ist, sowie einen Eingang,
der mit einem Ausgang der Lade-/Speichereinheit 222 gekoppelt
ist, empfängt
Steuersignale von dem Befehlsdecodierer 214 und hat einen
Ausgang, der mit der GPR-Datei 218 gekoppelt ist. Wenn
der GPR-Multiplexer 232 derartig von dem Befehlsdecodierer 214 angesteuert
wird, gibt dieser eine empfangene Eingabe an die GPR-Datei 218 aus.
-
Die 4 zeigt
das Codieren von Befehlen für
einen ALU-Befehl mit Streaming, der von denjenigem Typ ist, welcher
von dem Befehlsdecodierer 214 decodiert wurde. Wie sich
aus der 4 ergibt, sind acht Befehl-Codierungsformate
vorgesehen, wobei jedes Befehl-Codierungsformat
durch einen Code mit drei Buchstaben identifiziert wird, der die
Operanden für
dieses Format spezifiziert. Die drei Buchstaben spezifizieren die
jeweilige Quelle des ersten Operanden, die Quelle des zweiten Operanden
und das Ziel für
die Ergebnisse der Opera tion der ALU 230. Beim Auftreten
an erster oder zweiter Stelle spezifiziert der Buchstabe "X" das Stream-Register 226X,
der Buchstabe "Y" das Y-Stream-Register 226Y und
der Buchstabe "R" ein GPR. Beim Auftreten
an der dritten Stelle spezifiziert der dritte Buchstabe "X" den X-Speicher 224X, der Buchstabe "Y" den Y-Speicher 224Y und der
Buchstabe "R" ein GPR. Wird beispielsweise
ein Befehlsformat 414 mit "XYR" gekennzeichnet,
gibt dies an, daß die
Quelloperanden von den jeweiligen X- und Y-Stream-Registern 226 kommen,
und daß das
Ziel ein GPR ist.
-
Das
Befehlsformat 400 ist vorzugsweise 32 Bit lang. Die Bits
14–10,
die mit "A" gekennzeichnet sind, identifizieren
den ersten Operanden, die Bits 9–5, welche mit "B" gekennzeichnet sind, identifizieren
den zweiten Operanden, und die Bits 20–16, die mit "C" gekennzeichnet sind, identifizieren
den dritten Operanden. Die Op6-Bits 2–0, die mit "D" gekennzeichnet sind, spezifizieren
den Codiertyp (der Operanden), der von dem Befehlsformat verwendet
wird. Die Op1-6-Bits 27–21,
15 und 4–3,
die mit "E" gekennzeichnet sind,
enthalten Operationscodes (opcodes) für das Befehlsformat. Schließlich identifizieren
die COND-Bits 31–28,
welche mit "F" gekennzeichnet sind,
die Bedingungen, unter denen der Befehl ausgeführt werden wird.
-
Das
Feld D ist ein Operanden-Auswahlfeld mit drei Bit, das spezifiziert,
von wo der erste und der zweite Operand der ALU gelesen werden,
und wohin das Ergebnis der ALU-Operation gespeichert wird (Operand 3).
Die Tabelle 1 gibt die möglichen
Operandenkombinationen an, den entsprechenden Wert des Feldes D (Op6)
und das entsprechende Bezugszeichen in 4.
-
-
Der
erste Operand wird entweder aus einem GPR oder aus einem X-Stream-Register 226X ausgewählt. Im
Gegensatz dazu wird der zweite Operand entweder aus dem GPR oder
aus dem Y-Stream-Register 226Y ausgewählt. Der dritte Operand kann
in dem X-Speicher 224X, dem Y-Speicher 224Y oder
in einem GPR gespeichert werden.
-
Die
Felder A, B und C spezifizieren den jeweiligen ersten, zweiten und
dritten Operanden. Der erste Operand A und der zweite Operand B
werden verwendet, um die Eingaben an die ALU 230 (das Stream-Register 226 und
die GPR-Datei 218) für
die Verwendung durch eine darauffolgende Operation der ALU 230 zu aktualisieren.
Die durch den ersten und zweiten Operanden spezifizierten Werte überschreiben
diejenigen Werte, welche davor in den Stream-Registern 226 gehalten wurden.
Wie oben bemerkt, gibt der dritte Operand an, wo das Ergebnis der
aktuellen Operation der ALU 230 zu speichern ist.
-
Da
in der GPR-Datei 218 32 GPRs vorliegen, ist jedes der Operandenfelder
A, B und C fünf
Bit breit. Da in jeder der X- und Y-Adreßregisterdateien 216 nur
vier Registersätze
vorliegen, und da der erste Operand A nur Registersätze aus
der X-Registerdatei 216X und der zweite Operand B nur Registersätze aus
dem Y-Register 216Y auswählen kann, ist lediglich eine
Codierung mit 2 Bits innerhalb des ersten Operandenfelds A und des
zweiten Operandenfelds B erforderlich, um einen bestimmten Registersatz
innerhalb der Adreß-Registerdatei 216 auszuwählen. Ferner
ist eine Codierung mit drei Bits notwendig, um unter den möglichen
Adreßmodi auszuwählen. Die
Tabelle 2 ist eine Aufstellung der möglichen Adreßmodi und
der zugehörigen
Adreßmodusbits.
-
-
In
den Operandenfeldern A, B und C werden die fünf Bits, welche zum Auswählen eines
GPR verwendet werden, mit dem Zwei-Bit-Teilfeld des Adreßregisterindexes
und dem Drei-Bit-Teilfeld
des Adressiermodus überlappt.
Daher ist nur ein einzelnes Feld mit fünf Bit A, B, C für jeden
der drei Operanden notwendig. Ist beispielsweise das Befehlsformat 410 für einen
RRR-Befehl, sind dementsprechend alle drei Operanden als Feld mit
fünf Bit
A, B, C dargestellt. Im Gegensatz hierzu ist das Befehlsformat 418 ein
RYX-Befehl und die Felder mit fünf
Bit für
den zweiten Operanden B und den dritten Operanden C sind in Teilfelder
unterteilt mit drei bzw. zwei Bits dargestellt.
-
Wenn
ein Programmierer ein GPR als einen der Quelloperanden verwenden
möchte,
verwendet der Programmierer das Operandenfeld mit fünf Bit,
um das GPR zu spezifizieren. Wenn der Programmierer das X-Stream-Register 226X als
ersten Operanden verwenden möchte,
nimmt der Programmierer für
den Registersatz den Zwei-Bit-Index sowie drei Bits, die den Adreßmodus in
dem ersten Operandenfeld A spezifizieren. Der Programmierer kann
in gleicher Weise das Y-Stream-Register 226Y als zweiten
Operanden verwenden. Wenn die Adreßmodus-Bits auf 000 gesetzt
sind, wird der Wert in den X- oder Y-Stream-Registern 226 verwendet,
ohne eine Speicherabfrage auszulösen
oder das Adreßregister 216 zu
aktualisieren.
-
Die
Operandenfelder E bezeichnen die Berechnung, die von dem Prozessor
ausgeführt
wird. Das COND-Feld F beschreibt die Bedingungen (conditions), die
geprüft
werden müssen,
bevor die Berechnung ausgeführt
wird.
-
Die 5 ist
ein Zeitverlaufsdiagramm, das die von dem Prozessor 200 durchgeführten Schritte
darstellt, wenn dieser einen wie in 4 dargestellten
Streambefehl ausführt.
In der 5 ist die Zeit in der Richtung aufgetragen, die
durch Pfeil 500 auf der linken Seite der Figur angegeben
ist und die Rechtecke auf der rechten Seite zeigen die Reihenfolge,
in der die angegebenen Schritte von den funktionellen Einheiten
des Prozessors 200 ausgeführt werden. Da die funktionellen
Einheiten des Prozessors 200 parallel arbeiten, ist 5 nicht
so zu verstehen, daß die
zeitlich nebeneinandergefügten
Schritte gleichzeitig auftreten, sondern soll lediglich die ungefähre Reihenfolge
angeben, in der die Schritte ausgeführt werden.
-
Als
erstes wird ein Streambefehl, wie der in 4 dargestellt,
von dem Befehlsdecodierer 214 empfangen, T0. Als nächstes,
T1, sendet der Befehlsdecodierer 214 die Indexbits des
ersten und zweiten Operanden an die jeweilige X- und Y-Adreßregisterdatei 216.
Zur gleichen Zeit, T1, sendet der Befehlsdecodierer 214 alle
drei Operanden an die GPR-Datei 218.
-
Zudem
decodiert der Befehlsdecodierer das Up6-Feld, um die Operanden für die aktuelle
Operation der ALU 230 sowie den Ort zu ermitteln, an dem
das Ergebnis gespeichert werden soll. Der folgende Pseudocode erklärt das von
dem Decodierer 214 durchgeführte Befehlsdecodieren, wenn
das Op6-Feld decodiert wird.
-
-
Sobald
das Op6-Feld decodiert ist, liest die ALU 230 die gewählten Eingaben
von dem Befehlsdecodierer 214.
-
Als
nächstes,
T2, geben die Adreßregisterdateien 216 die
Inhalte der gewählten
Register an die Lade-/Speichereinheit 222 weiter und veranlassen,
daß die
entsprechenden Werte in die X- und Y-Stream-Register 226 geladen
werden. Zudem aktualisieren die AGUs 220 die von den Indexbits
gewählten
Adreßregister. Zur
gleichen Zeit wird die von dem decodierten Befehl angegebene Operation
der ALU 230 bezüglich
der davor gelesenen Operanden durchgeführt.
-
Als
nächstes
wird das Ergebnis der fertiggestellten Operation der ALU 230 an
dem Ort gespeichert, der von dem Op6-Feld und dem dritten Operanden
angegeben ist, wie es der folgende Pseudocode darstellt:
-
-
Somit
führt eine
Streamoperation drei Aufgaben gleichzeitig aus:
- 1)
führt die
spezifizierte Operation der ALU 230 bezüglich der Operanden der X- und Y-Stream-Register 226 oder
der GPR-Datei 218 durch und speichert das Ergebnis;
- 2) aktualisiert die Operanden für die ALU 230, indem
die Daten in den X- und Y-Stream-Registern 226 aktualisiert
werden und stellt die Inhalte der zwei GPRs von der GPR-Datei für den X-
und Y-Multiplexer 228 bereit; und
- 3) berechnet die Adressen für
die zwei nächsten
Speicherreferenzen, indem die AGUs 220 verwendet werden,
und speichert die Adressen in der Adreßregisterdatei.
-
Als
Beispiel soll eine Streaming-Implementierung des "ADD"-Befehls betrachtet
werden, der das Format "ADD
Quelle 1 Quelle 2 Ergebnis" verwendet. Ein ADD-Befehl mit Streaming,
der das X-Stream-Register 226X und das Y-Stream-Register 226Y als
Quelloperanden verwendet, der das Ergebnis der ADD-Operation in
einem GPR in der GPR-Datei 218 speichert, und ferner die
Quelloperanden im nachhinein dekrementiert, wird als "add [x++] [y++] GPR" bezeichnet, wobei "x" und "y" sich
auf die jeweiligen Register innerhalb der X- und Y-Adreßregisterdatei 216 bezieht
und "GPR" sich auf ein Register
innerhalb der GPR-Datei 218 bezieht. Dieser ADD-Befehl
entspricht dem Befehlsformat 414.
-
Wenn
dieser Befehl von dem Prozessor 200 ausgeführt wird,
werden von der ALU 230 die Daten in dem X-Stream-Register 218X zu
den Daten in dem Y-Stream-Register 228Y addiert. Das Ergebnis
dieser Addieroperation wird in dem identifizierten GPR gespeichert.
Ferner wird eine Abfrage des X-Speichers 224X bezüglich der
Daten gestartet, welche durch [x] adressiert werden, und diese werden
in dem X-Stream-Register 226X gespeichert. In gleicher
Weise wird eine Abfrage des Y-Speichers 224Y bezüglich der
Daten gestartet, welche von [y] adressiert werden, und diese werden
in dem Y-Stream-Register 226Y gespeichert. Schließlich werden
die Basis-Register der [x]- und [y]-Register innerhalb der Adreßregisterdatei 216 aktualisiert.
Wenn der ADD-Befehl mit Streaming mit "add X [y++] GPR" bezeichnet worden wäre, dann wäre die Speicherabfrage des
X-Speichers 224X und das Aktualisieren des [x]-Registers nicht durchgeführt worden,
da die Inhalte des X-Stream-Registers 226 wieder verwendet
worden wären.
-
In
einem weiteren Beispiel wird ein Befehl angenommen, der mit "add [x++] GPR [y++]" bezeichnet wird.
Wenn der Prozessor 200 diesen Befehl ausführt, werden
die Daten in dem X-Stream-Register 226X zu den
Daten in dem identifizierten GPR addiert und das Ergebnis der Addieroperation
wird an dem Ort innerhalb des Y-Speichers 224Y gespeichert,
der durch [y] identifiziert ist. Zudem wird eine Abfrage des X-Speichers 224X bezüglich Daten
ausgelöst,
die durch [x] identifiziert werden. Die abgefragten Daten werden
in dem X-Stream-Register 226X gespeichert. Schließlich werden
die Basis-Register der [x]- und [y]-Register innerhalb der Adreßregisterdatei
aktualisiert.