-
HINTERGRUND DER ERFINDUNG
-
Die
vorliegende Erfindung bezieht sich auf eine Verarbeitungseinheit
und insbesondere auf eine zentrale Verarbeitungseinheit (CPU) wie
etwa einen Mikrocontroller. Mikrocontroller sind auf dem Gebiet allgemein
bekannt, und es ist eine große
Vielfalt von derartigen Vorrichtungen verfügbar, von Einsteigervorrichtungen
(z. B. einem 4/8-Bit-Controller)
bis zu professionellen Vorrichtungen (z. B. einem 32-Bit-Controller).
Professionelle Controller werden in nahezu jeder Art von elektronischen
Vorrichtungen, wie etwa Laserdruckern und Festplatten, oder zur
Steuerung jeder Art von Prozessen verwendet, beispielsweise in Kraftfahrzeugen
usw.
-
Mit
der Lösung
komplexerer Aufgaben, steigt die Nachfrage nach sehr schnellen professionellen Controllern.
Insbesondere sind derartige Vorrichtungen zum Steuern von Echtzeitanwendungen
erforderlich. Bei derartigen Anwendungen ist es notwendig, dass
sehr schnell auf externe Ereignisse reagiert wird. Wenn ein derartiges
Ereignis eintritt, muss der Inhalt von wenigstens einem bestimmten
Satz von Registern gewechselt werden. Wenn dieser Kontextwechsel
schneller ist, ist die Reaktionszeit des Steuerungssystems besser.
-
EP-A-0 745 933 (IBM)
vom 4. Dezember 1996 (2996-12-04) offenbart eine Mehr-Port-Registerdatei
zur Verwendung mit einem sehr langen Anweisungswort (VLIW) und mit
N-Weg-Superskalar-Prozessoren.
Die Registerdatei umfasst eine ausgewählte Anzahl von Kopien eines
universelle Register bildenden Blocks. Der Block umfasst zwei verschachtelte
Teilbänke
von Registern (ungeradzahligen und geradzahligen Registern), von
denen jedes eine Anzahl n von Schreib-Ports und eine Anzahl m von
Lese-Ports aufweist. Die Teilbänke
sind durch Schreib-Ports verschachtelt und besitzen nicht verschachtelte
Lese-Ports.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Daher
ist es eine Aufgabe der vorliegenden Erfindung, eine Verarbeitungseinheit
zu schaffen, die die Fähigkeit
zum sehr schnellen Lese-/Schreibzugriff auf Adressen- und Datenregister
in einer CPU hat.
-
Diese
Aufgabe wird mittels einer Datenverarbeitungseinheit nach Anspruch
1 gelöst,
die einen Satz von Datenregistern und einen Satz von Adressenregistern
besitzt. Jedes Register hat eine Breite von n Bit. Außerdem sind
vorgesehen: Adressenlade- und -Speicherpuffer, die den Adressenregistern zugeordnet
sind, Datenlade- und -Speicherpuffer, die den Datenregistern zugeordnet
sind, und ein Bus mit mehreren Busleitungen, die mit den Speicherpuffern verbunden
sind. Mit dem Bus ist eine Datenspeichereinheit verbunden. Die Datenregister
sind in einer solchen Weise angeordnet, dass wenigstens n Datenregister
mit entsprechenden Busleitungen parallelgeschaltet sind, wobei n
größer als
1 ist, und die Adressenregister sind in einer solchen Weise angeordnet,
dass wenigstens m Adressenregister mit entsprechenden Busleitungen
parallelgeschaltet sind, wobei m größer als 1 ist. Dadurch kann
auf wenigstens vier Register parallel zugegriffen werden.
-
Wenn
beispielsweise 4 Datenregister und 4 Adressenregister gleichzeitig
geladen oder gespeichert werden können, muss ein 32-Bit-Mikrocontroller-Bus
256 Bit breit sein. Der Vorteil einer derartigen Anordnung besteht
darin, dass ein Kontextwechsel sehr schnell ausgeführt werden
kann, da 8 Register in nur 2 entsprechenden Zyklen gespeichert und
geladen werden. Dies ermöglicht
eine sehr kurze Reaktionszeit auf externe Ereignisse. Außerdem ist
die Verarbeitungsgeschwindigkeit gesteigert, da Befehle implementiert
sein können,
die eine parallele Verarbeitung vorsehen. Das bedeutet, dass zur
gleichen Zeit mehr als ein Register geladen oder gespeichert werden
kann.
-
Damit
Lese- und Schreibprozeduren an Mehrfachregistern ermöglicht werden,
ist jedes Register mit mehrfachen unidirektionalen und/oder mehrfachen
bidirektionalen Ports versehen, die die Register mit einer Speichereinheit
und/oder mit einer Adressenarithmetik-Pipeline oder einer Ganzzahlen-Pipeline
oder irgendeiner anderen Verarbeitungseinheit verbinden. Die Register
können
in unterschiedliche Sätze
von Registern aufgeteilt sein, beispielsweise in geradzahlige und
ungeradzahlige Register. Dadurch ist eine optimierte Anordnung der
entsprechenden Register möglich,
während
die Zugänglichkeit
zu den Registern beibehalten wird. Jede der oben erwähnten Leitungen
kann separat ausgewählt werden,
und die Leitungen sind mit ungeradzahligen oder geradzahligen Speicheradressen
verbunden.
-
Es
ist eine breite Vielfalt von Implementierungen möglich. Entweder kommunizieren
sämtliche Registerzellen über einen
mehrere Wörter
breiten Bus, wobei jede Registerzelle mehrere Lese-/Schreibleitungen
aufweist, die mit jeweiligen Wortleitungen des mehrere Wörter breiten
Busses verbunden sind, oder unterschiedliche Sätze von Registern verbinden
mit entsprechenden Wortleitungen des mehrere Wörter breiten Busses, der mit
dem Speicher verbindet. Multiplexer und Synchronisationseinheiten
können
jedes Register mit jedem Adressenort im Speicher verbinden.
-
Weiterhin
ist eine Einheit vorgesehen, die eine Null- und eine Vorzeichen-Erweiterung
für Byte- und
Halbwort-Ladeanweisungen
abwickelt. Die Adressenregister können über einen Adressenweiterleitungspuffer
mit einer Adressenarithmetikeinheit oder irgendeiner anderen Verarbeitungseinheit
verbunden sein, und die Datenregister können über einen entsprechenden Datenweiterleitungspuffer
mit einer Multiplikations-Akkumulatoreinheit (MAC) und/oder einer
Ganzzahlenausführungseinheit
oder irgendeiner anderen Verarbeitungseinheit verbunden sein.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
1 zeigt
einen funktionellen Blockschaltplan einer Registerdatei in Übereinstimmung
mit der vorliegenden Erfindung;
-
2A zeigt
eine Datenlade- und -Speicherpuffereinheit;
-
2B zeigt
eine Adressenlade- und -Speicherpuffereinheit;
-
2C zeigt
eine Datenregisterdatei-Einheit;
-
2D zeigt
eine Adressenregisterdatei-Einheit;
-
2E zeigt
eine Datenweiterleitungseinheit;
-
2F zeigt
eine Adressenweiterleitungseinheit;
-
3 zeigt
detaillierter eine Adressenregisterzelle; und
-
4 zeigt
detaillierter eine Datenregisterzelle.
-
BESCHREIBUNG DER BEVORZUGTEN
AUSFÜHRUNGSFORM
-
1 zeigt
einen Überblick über die
universelle Registerdatei eines 32-Bit-Mikrocontrollers in Übereinstimmung
mit der vorliegenden Erfindung. In dieser Zeichnung ist nur eine
Ebene dargestellt, die ein einziges Bit jedes Registers zeigt. Die
universelle Registerdatei 1 weist eine Adressenregisterdatei 2 und
eine Datenregisterdatei 3 auf, die mehrere Adressen- und
Datenregister 4, 7 mit einer vorgegebenen Bitbreite
sowie Puffer 5, 6, 8, 9 enthalten.
Bei der bevorzugten Ausführungsform
beträgt
die Registerbitbreite 32 Bits, und die Anzahl von Registern
ist 16. Diese Bitbreite kann irgendeine Bitgröße in Übereinstimmung mit der Spezifikation
der entsprechenden Mikrocontroller-, Mikroprozessor- oder Daten handhabungseinheit
sein.
-
Die
Adressenregister 4 sind über einen Bus 13 einerseits
mit einer Adressenweiterleitungseinheit 5 und andererseits
mit einem Adressenlade- und -Speicherpuffer 6 verbunden.
Außerdem
enthält
die Datenregisterdatei 1 mehrere Datenregister 7,
beispielsweise 16 Datenregister mit einer Bitbreite von 32
Bits. Es ist ein zweiter Bus 14 vorgesehen, der die Datenregister 7 einerseits
mit Datenlade- und -Speicherpuffern 9 und andererseits
mit einer Datenweiterleitungseinheit 8 verbindet. Die universelle
Registerdatei 1 ist einerseits über einen dritten Bus 15 mit
einer Datenspeichereinheit 10 und andererseits mit zusätzlichen
Bussen 16, 17 verbunden. Der Bus 16 verbindet
die Adressenweiterleitungspuffer 5 und Teile der Datenweiterleitungspuffer 8 mit
einer Einheit 12, die beispielsweise eine Adressenarithmetikeinheit und
eine Anweisungseinholungseinheit (IFU) aufweist. Der Bus 17 verbindet
die Datenweiterleitungspuffer 8 mit einer Einheit 11,
die beispielsweise eine Multiplikations-Akkumulator-(MAC-) und eine
Ganzzahlen-Ausführungseinheit
aufweist.
-
2A bis 2F zeigen
detaillierter die Elemente der universellen Registerdatei 1.
In diesem Schaltplan ist von jedem der Register d0, ..., d15, a0, ...,
a15 nur ein Bit gezeigt. Die anderen 31 Bit der Register d0, ...,
d15, a0, ..., a15 sind parallel angeordnet. In 2A bis 2F stellen
gleiche Bezugszeichen durchgehend gleiche Elemente dar.
-
2D zeigt
Register in einer Adressenregisterdatei. Zur besseren Übersicht
sind in 2D die Register a2 bis a13 nicht
gezeigt. Jedes Adressenregister a0, ..., a15 der Adressenregisterdatei 4 hat
zwei unidirektionale Ausgänge
zum Lesen und drei bidirektionale I/O-Ports. Mit dem ersten bidirektionalen
I/O-Port sämtlicher
Adressenregister a0, ..., a15 ist eine interne Busleitung 40 verbunden,
und mit den entsprechenden zwei Ausgängen sämtlicher Adressenregister a0,
a15 sind zwei Leitungen 41 und 42 verbunden. Außerdem sind
mit entsprechenden I/O-Ports sämtlicher
geradzahliger Adressenregister a0, a2, a4, ..., a14 zwei interne
Busleitungen 44 und 46 verbunden. Mit den I/O-Ports
sämtlicher
ungeradzahliger Adressenregister a1, a3, a5, ..., a15 sind zwei
weitere Leitungen 43 und 45 verbunden.
-
2A zeigt
im Detail den Adressenlade- und -Speicherpuffer 6 von 1.
Busleitungen 43 bis 46 verbinden mit den entsprechenden
Eingängen von
Speicherpuffern 101 bis 104. Die Ausgänge der Speicherpuffer 101 bis 104 sind über Treiber 106 bis 109 mit
Speicherbusleitungen 119 bis 122 verbunden. Sämtliche
Treiber sind Tristate-Treiber, die mit einem Steuereingang zur selektiven
Aktivierung mittels einer (nicht gezeigten) Steuereinheit versehen sind.
Zwei Blöcke 100 und 105 bezeichnen 4 Ladepuffer,
die einerseits mit den Speicherbusleitungen 119 bis 122 und
andererseits über
Treiber 110 bis 113 mit den internen Busleitungen 43 bis 46 verbunden sind.
Zusätzlich
sind die Ausgänge
der Ladepuffer 105 über
Puffer 115 und 116 mit den internen Busleitungen 43 und 44 verbunden.
-
2E zeigt
im Detail die Adressenweiterleitungseinheit 5 von 1.
Busleitungen 40, 41 und 42 sind über Treiber 500, 501 bzw. 502 mit
Adressenweiterleitungsausgangs-Busleitungen 524, 525 bzw. 526 verbunden.
Zwei Speicherbusleitungen 121 und 122 sind jeweils
mit dem Eingang von drei Treibern 503, 504, 505 bzw. 506, 507, 508 verbunden.
Die Ausgänge
der Treiber 503 und 506 verbinden mit der Busleitung 526,
die Ausgänge
der Treiber 504 und 507 mit der Busleitung 525 und
die Ausgänge
der Treiber 505 und 508 mit der Busleitung 524.
Interne Busleitungen 43 und 44 sind mit den Ausgängen von zwei
Treibern 518 bzw. 519 verbunden. Die Eingänge der
Treiber 518 und 519 sind mit dem Ausgang eines Zurückschreibpuffers 515 verbunden,
dessen Eingang mit einer Adressenweiterleitungsbus-Eingangsleitung 523 verbunden
ist. Es sind zwei weitere Treiber 516 und 517 vorgesehen,
deren Ausgänge
mit der internen Busleitung 40 verbunden sind. Der Eingang
des Treibers 517 ist mit dem Ausgang des Puffers 515 verbunden.
Der Ein gang des Treibers 516 ist mit dem Ausgang des Puffers 514 verbunden,
dessen Eingang mit der Adressenweiterleitungsbus-Eingangsleitung 522 verbunden
ist. Die Busleitungen 45 und 46 sind außerdem über bidirektionale
Treiber 520 bzw. 521 mit Busleitungen 522 bzw. 523 verbunden.
Das Signal auf der Busleitung 523 wird außerdem den
Eingängen
von drei Treibern 509, 510 bzw. 511 zugeführt, deren
Ausgänge
mit den Busleitungen 524, 525 bzw. 526 verbunden
sind. Das Signal auf der Busleitung 522 wird außerdem den
Eingängen von
zwei Treibern 512 und 513 zugeführt, deren
Ausgänge
mit den Busleitungen 524 bzw. 525 verbunden sind.
Wiederum sind sämtliche
Treiber Tristate-Treiber, die mit einem Steuereingang zur Auswahl
mittels einer (nicht gezeigten) Steuereinheit versehen sind. Die
drei Einheiten 4, 5 und 6 gemäß 1 zeigen den
Weg der Adressensignale in die und aus der Adressenregisterdatei
an, wobei die Busleitungen 119 bis 122 gemäß 2A mit
der Speichereinheit 10 und die Busleitungen 522 bis 524 mit
der Adressenarithmetik-Pipeline und der Anweisungsweiterleitungseinheit 12 verbinden.
-
2C zeigt
Datenregister in einer Datenregisterdatei. Wiederum sind in 2C zur
besseren Übersicht
die Register d2 bis d13 nicht gezeigt. Jedes Datenregister d0, ...,
d15 der Datenregisterdatei 5 hat drei unidirektionale Ausgänge zum
Lesen sowie zwei bidirektionale I/O-Ports. Zwei Leitungen 72 und 73 sind
jeweils mit den ersten zwei Ausgängen
sämtlicher
Datenregister d0, ..., d15 verbunden. Außerdem ist eine interne Busleitung 71 mit
entsprechenden Ausgängen
sämtlicher
geradzahliger Datenregister d0, d2, d4, ..., d14 verbunden, während eine
interne Busleitung 70 mit entsprechenden Ausgängen sämtlicher
ungeradzahliger Register d1, d3, ..., d15 verbunden ist. Zwei weitere
Leitungen 74 und 76 sind mit den I/O-Ports sämtlicher
ungeradzahliger Adressenregister d1, d3, d5, ..., d15 verbunden.
Schließlich sind
zwei weitere Leitungen 75 und 77 mit den I/O-Ports
sämtlicher
geradzahliger Adressenregister d0, d2, d4, ..., d14 verbunden.
-
2B zeigt
den Datenlade- und -Speicherpuffer 9 von 1.
Interne Busleitungen 74 bis 77 sind mit den Eingängen von
vier entsprechenden Speicherpuffern 909 bis 912 verbunden.
Der Ausgang des Speicherpuffers 909 ist über einen
Treiber 916 mit einer Speicherbusleitung 921 verbunden, und
der Ausgang des Speicherpuffers 910 ist über einen
Treiber 917 mit einer Speicherbusleitung 920 verbunden.
Die Ausgänge
der Puffer 911 und 912 sind mit zwei Eingangsanschlüssen einer
Maskierungseinheit 915 verbunden. Die Maskierungseinheit 915 ist
mit zwei Eingangs- und zwei Ausgangsanschlüssen versehen. Die zwei Ausgangsanschlüsse der
Maskierungseinheit 915 sind über Treiber 918 bzw. 919 mit
zwei Speicherbusleitungen 922 bzw. 923 verbunden.
Zwei Blöcke 908 und 913 stellen
vier Ladepuffer dar. Der Block 913 ist mit zwei Eingangsanschlüssen versehen,
die mit zwei internen Busleitungen 900 bzw. 901 sowie über einen
Synchronisierungsblock 914 mit den Speicherbusleitungen 922 bzw. 923 verbunden
sind. Der Synchronisierungsblock 914 ist mit zwei Eingängen versehen,
die mit den Eingängen
der Maskierungseinheit 915 bzw. mit den Ausgängen des
Speicherpuffers 913 verbunden sind. Außerdem ist ein Ausgang des
Ladepuffers 913 über
Treiber 904 bzw. 906 mit den internen Busleitungen 74 bzw.
76 verbunden. Der andere Ausgang des Ladepuffers 913 ist über Treiber 905 und 907 mit
den internen Busleitungen 75 und 77 verbunden.
Der zweite Ladepuffer 908 ist auf seiner Eingangsseite mit
den Speicherbusleitungen 920 bzw. 921 sowie an seiner
Ausgangsseite über
Treiber 902 bzw. 903 mit den internen Busleitungen 74 und 75 verbunden. Wiederum
sind sämtliche
Treiber Tristate-Treiber, die mit einem Steuereingang für die Auswahl
mittels einer (nicht gezeigten) Steuereinheit versehen sind.
-
2F zeigt
im Detail die Datenweiterleitungseinheit 8 von 1.
Interne Busleitungen 70 bis 73 sind über Treiber 807 bis 810 mit
den Datenweiterleitungsbusleitungen 802 bis 805 verbunden.
Eine zusätzliche
Datenweiterleitungsbusleitung 806 ist mit Ausgangsanschlüssen von
Treibern 827 und 828 verbunden, deren Eingangsanschlüsse mit
Busleitungen 802 bzw. 803 verbunden sind. Die
Busleitung 806 ist gemäß 1 Teil
des Busses 16, der mit der Adressenarithmetik-Pipeline
und der Anweisungsweiterleitungseinheit 12 verbunden ist.
Die Busleitung 900 ist mit den Eingängen von drei Treibern 811, 812 und 813 verbunden,
deren Ausgänge
mit den Busleitungen 805, 804 bzw. 802 verbunden
sind. Die Busleitung 901 ist mit den Eingängen von
drei Treibern 814, 815 und 816 verbunden,
deren Ausgänge mit
den Busleitungen 805, 804 bzw. 803 verbunden sind.
Es sind zwei weitere Datenweiterleitungsbusleitungen 800 und 801 vorgesehen,
die mit den Eingangsanschlüssen
von zwei Zurückschreibpuffern 829 bzw. 830 verbunden
sind. Die Ausgangsanschlüsse
der Puffer 829 und 830 sind über Treiber 832 bzw. 834 mit
den Busleitungen 74 bzw. 75 verbunden. Außerdem ist
der Ausgang des Puffers 830 über einen Treiber 833 mit
der Busleitung 74 verbunden. Die Busleitung 800 ist über einen
Treiber 835 mit der Busleitung 76 verbunden, und
außerdem
ist die Busleitung 801 über
Treiber 836 und 837 mit den Busleitungen 76 bzw. 77 verbunden.
Außerdem
ist die Busleitung 806 über
Treiber 840 und 841 mit den Busleitungen 76 bzw. 77 verbunden.
Außerdem
ist die Busleitung 806 mit dem Eingangsanschluss eines weiteren
Zurückschreibpuffers 831 verbunden,
dessen Ausgang über
Treiber 838 und 839 mit den Busleitungen 76 bzw. 77 verbunden
ist. Außerdem
ist die Busleitung 806 über
entsprechende Treiber 817 bis 820 mit den Busleitungen 802 bis 805 verbunden. Schließlich ist
die Busleitung 800 über
entsprechende Treiber 821 bis 823 mit den Busleitungen 805, 804 bzw. 802 verbunden,
und die Busleitung 801 ist über entsprechende Treiber 824 bis 826 mit
den Busleitungen 803 bis 805 verbunden. Wiederum
sind sämtliche
Treiber Tristeste-Treiber, die mit einem Steuereingang zur Auswahl
mittels einer (nicht gezeigten) Steuereinheit versehen sind. Die
Speicherbusleitungen 119 bis 122 gemäß 2A sowie 920 bis 923 gemäß 2B bilden
den Speicherbus 15 von 1. Die Busleitungen 522 bis 526 gemäß 2E sowie 806 bilden
den Bus 16, und die Busleitungen 800 bis 805 bilden
den Bus 17 von 1.
-
3 zeigt
eine Ausführungsform
einer Adressenregisterzelle. 3 zeigt
Bezugszeichen, die sich auf das Adressenregister a0 gemäß 2D beziehen.
Vorzugsweise haben sämtliche
Register a0, ..., a15 die gleiche Struktur. Der Registerkern wird durch
zwei Invertierer 400 und 401 gebildet. Diese Invertierer 400 und 401 bilden
eine statische Speicherzelle, sodass der Ausgang jedes Invertierers
mit dem Eingang des anderen Invertierers verbunden ist. Der Eingang
des Invertierers 400 und der Ausgang des Invertierers 401 sind über den
Ladeweg von Feldeffekttransistoren 402, 403 und 406 mit
den Busleitungen 40, 44 und 46 verbunden.
Jeder der Feldeffekttransistoren 402, 403 und 406 bildet
ein Übertragungsgatter.
Der Ausgang des Invertierers 400 und der Eingang des Invertierers 401 sind
mit den Eingängen
von fünf
steuerbaren Tristate-Treibern 404, 405, 407, 408 und 409 verbunden.
Der Ausgang des Treibers 404 ist mit der Busleitung 40,
der Ausgang des Treibers 405 mit der Busleitung 44 und
der Ausgang des Treibers 407 mit der Busleitung 46 verbunden.
Der Ausgang des Treibers 408 verbindet mit der Busleitung 41 und
der Ausgang des Treibers 409 mit der Busleitung 42.
-
4 zeigt
eine Ausführungsform
einer Datenregisterzelle. 4 zeigt
abermals Bezugszeichen, die sich auf das Datenregister d0 gemäß 2C beziehen.
Vorzugsweise haben sämtliche Register
d0, ..., d15 die gleiche Struktur. Der Registerkern wird durch zwei
Invertierer 700 und 701 gebildet. Diese Invertierer 700 und 701 bilden
eine statische Speicherzelle, sodass der Ausgang jedes Invertierers
mit dem Eingang des anderen Invertierers verbunden ist. Der Eingang
des Invertierers 700 und der Ausgang des Invertierers 701 sind über den
Ladeweg von Feldeffekttransistoren 702 und 703 mit
den Busleitungen 75 und 77 verbunden. Der Ausgang
des Invertierers 700 und der Eingang des Invertierers 701 sind
mit den Eingängen
von fünf
steuerbaren Tristate-Treibern 704, 705, 706, 707 und 708 verbunden. Der
Ausgang des Treibers 704 ist mit der Busleitung 75 und
der Ausgang des Treibers 705 mit der Busleitung 77 verbunden.
Der Ausgang des Treibers 706 verbindet mit der Busleitung 71,
der Ausgang des Treibers 707 mit der Busleitung 72 und
der Ausgang des Treibers 708 mit der Busleitung 73.
-
Sämtliche
anderen Register a1, ..., a15 und d1, ..., d15 sind mit den entsprechenden
Busleitungen verbunden, wie in 2C und 2D gezeigt ist.
Die Übertragungsgatter 402, 403, 406, 702 und 703 (siehe 3 und 4)
sowie die Tristate-Treiber 404, 407, 408, 409, 704, 705, 706, 707 und 708 sind über entsprechende
Auswahleingangsanschlüsse
steuerbar. Die (nicht gezeigte) Steuerschaltung erzeugt die entsprechenden
Steuersignale, um den Betrieb dieser Elemente zusammen mit den anderen steuerbaren
Treibern in der universellen Registerdatei 1 (siehe 1)
zu steuern. Für
Schreibvorgänge kann
immer nur eines der Übertragungsgatter
eines Registers aktiviert sein, während für irgendeinen Lesevorgang mehrere
Tristate-Treiber parallel aktiv sein können.
-
Die
universellen Register handhaben sämtliche Daten, die durch eine
Datenhandhabungseinheit wie etwa einen Mikrocontroller/Mikrocomputer
verarbeitet werden. Daher sind sie Teil des Kerns eines Mikroprozessors/Mikrocontrollers,
und die Art und Weise, in der sie die Daten handhaben, hat großen Einfluss
auf die resultierende Geschwindigkeit einer derartigen Datenhandhabungseinheit.
Die universelle Registerdatei 1 (siehe 1)
liefert am häufigsten benötigte Operanden
an die Ganzzahlen- sowie die Lade- und Speicher-Pipelines in den
Einheiten 11, 12. Die Lade- und Speicheranwiesungen
in der Architektur des Anweisungssatzes stellen den Zugriff auf den
Datenspeicher 10 bereit, in dem sich eine Mehrheit von
Operanden befindet, bevor sie in die Registerdatei 1 eingebracht
werden. Wie in 1 gezeigt, ist der funktionelle
Blockschaltplan für
die Registerdatei unterteilt in eine Adressenregisterdatei 2 und eine
Datenregisterdatei 3. Der Datenfluss durch die Registerdateien
hängt von
der jeweiligen Anweisung ab, die von der Datenhandhabungseinheit
abgearbeitet wird.
-
In Übereinstimmung
mit der Erfindung sind der Daten- und der Adressenregisterblock 4 bzw. 7 in zwei
separaten Blöcken
angeordnet. Die Datenregister im Block 7 sind in einer
ersten Matrix angeordnet, die c1 Spalten und r1 Zeilen hat, und
die Adressenregister im Block 4 sind in einer zweiten Matrix
angeordnet, die c2 Spalten und r2 Zeilen hat. Bei der bevorzugten
Ausführungsform
sind beide Matrices gleich, wobei 2 Spalten und 8 Zeilen vorgesehen sind.
Dennoch sind bei dieser Ausführungsform 4 Datenregister
im Block 4 sowie 4 Adressenregister im Block 7 parallel
angeordnet, sodass über
bidirektionale Ports auf Seiten der Speicherschnittstelle gleichzeitig
auf 8 Register, 4 geradzahlige und 4 ungeradzahlige
Register, zugegriffen werden kann. Daher benötigt bei diesem Beispiel der
Bus 15, der einerseits mit der Datenspeichereinheit und
andererseits mit den nachfolgend beschriebenen Datenverarbeitungseinheiten
eine Schnittstelle bildet, eine Breite von 256 Bits.
-
Auf
Seiten der Verarbeitungseinheit bildet die Adressenregisterdatei 4 über den
Bus 16 mit jeder Verarbeitungseinheit eine Schnittstelle.
Der Bus 16 stellt bei dieser Ausführungsform 6 Busleitungen bereit,
wodurch 5 Busleitungen 522, ..., 526 (siehe 2E)
mit der Adressenregisterdatei verbinden. Die Datenregisterdatei 7 bildet über den
Bus 17 mit jeder Verarbeitungseinheit eine Schnittstelle.
Der Bus 17 stellt bei dieser Ausführungsform 6 Busleitungen
bereit. Bei dieser Ausführungsform
hat, gemäß 3 und 4,
jede Registerzelle 5 Ports, wodurch zwei bidirektionale
Ports entweder geradzahligen oder ungeradzahligen Registern zugewiesen
sind. Daher kann bei dieser Ausführungsform
gleichzeitig auf 7 Datenregister und 5 Adressenregister
zugegriffen werden, und diese Register können jeder Verarbeitungseinheit
Daten zuführen,
wobei auf manche Register nur über
den Lese-Port zugegriffen werden kann.
-
Abhängig vom
Betriebssystem, mit dem der Mikrocontroller betrieben wird, führt diese
Anordnung in einem einzigen Zyklus zu einem Zugriff auf mehrere
universelle Register des Kerns. In Übereinstimmung mit der Erfindung
sind m und n ganze Zahlen größer als
1, sodass gleichzeitig auf mindestens 4 Register zugegriffen
werden kann. Eine Aufteilung der Zuweisung mancher Ports zu geradzahligen
und ungeradzahligen Registersätzen
kann diese Anzahl verdoppeln. Ein Kontextwechsel in einem Echtzeit-Betriebssystem
kann es erforderlich machen, dass 8 Datenregister und 8 Adressenregister
gewechselt werden müssen.
Bei der bevorzugten Ausführungsform
könnte
dies in nur 2 Zyklen ausgeführt werden,
da 8 Register gleichzeitig zugänglich
sind. Wenn für
einen Kontextwechsel nur 4 Register gewechselt werden müssen, kann
dies in einem einzigen Zyklus ausgeführt werden.
-
In Übereinstimmung
mit der Erfindung ist jedes Register mit mehreren unidirektionalen
und mehreren bidirektionalen Ports versehen. Dies ermöglicht es,
dass gleichzeitig auf mehr Register zugegriffen werden kann und
dass auch eine breite Vielfalt von unterschiedlichen Anweisungen
in einem Minimum an Zeit ausgeführt
werden kann. Dies erfolgt in paralleler Weise, wie nachfolgend beschrieben
wird. Diese unidirektionalen und bidirektionalen Ports können mit dem
Bus, der mit dem Datenspeicher verbunden ist, einzeln verbunden
sein. Dies ermöglicht
einen gleichzeitigen Zugriff auf so viele Register, wie Ports vorgesehen
sind; oder die Register sind in geradzahlige und ungeradzahlige
Registersätze
aufgeteilt, die mit geradzahligen und mit ungeradzahligen Busleitungen
verbunden sind. Bei der Ausführungsform
gemäß 2A und 2B sind
die Speicherbusleitungen 119 und 121 sowie die
Speicherbusleitungen 920 und 922 mit ungeradzahligen
Registern in der Adressen- und der Datenregisterdatei verbunden.
Die Busleitungen 120 und 122 sowie 921 und 923 sind
mit entsprechenden geradzahligen Registern verbunden. Daher werden
nur zwei Ports von jedem Register dazu verwendet, mit 4 Registern
von jeder Registerdatei 4 und 7 gleichzeitig eine
Schnittstelle zu bilden. Auf Seiten der Datenverarbeitung kann der
interne Bus zusätzliche
Busleitungen aufweisen, die mit unidirektionalen und bidirektionalen
Ports der Register verbinden. Bei dieser Ausführungsform sind dies die Busleitungen 802,
..., 806 und 524, ..., 526 (siehe 2F und 2E).
Eine Aufteilung zwischen geradzahligen und ungeradzahligen Registern ist
für diese
Busleitungen optional. Es kann sogar auf mehr Register auf Seiten
der Verarbeitungseinheit gleichzeitig zugegriffen werden, wie oben
beschrieben ist.
-
Die
bidirektionale 256-Bit-Busschnittstelle auf Seiten des Datenspeichers
der Registerdatei 1 unterstützt die Übertragung von Operanden zwischen
dem Datenspeicher 10 und der Registerdatei 1.
Dieser Bus 15 könnte
auch 128 Bit breit sein oder könnte,
abhängig
von der oben beschriebenen Struktur der Register, pro Zyklus 128
Bit des 256-Bit-Busses verwenden. Die Konstruktion dieses Busses kann
von der Leistung oder von Problemen abhängen, die mit dem Rauschen
zusammenhängen.
Im Wesentlichen muss dieser Bus einen parallelen Zugriff auf wenigstens 4 Register
unterstützen.
-
Die
Konstruktion in Übereinstimmung
mit der Erfindung ermöglicht
Byte-, Halbwort-, Wort- und Doppelwort-Übertragungen in einem einzigen
Zyklus. Der Kontext-Sicherungs- oder -Wiederherstellungsvorgang
ermöglicht
die Übertragung
von 16 Wörtern
in zwei Zyklen, wie oben erwähnt
(oder in vier Zyklen auf einem 128-Bit-Bus). Jedoch ist die Registerdatei 1 in
der Lage, den gesamten Kontext (32 Wörter) in 4 Zyklen (oder in
acht Zyklen auf einem 128-Bit-Bus) zu sichern oder wiederherzustellen.
Im Allgemeinen unterstützt
die Registerdatei 1 Wort-, Doppelwort- und Vierfach-Doppelwort-Zugriffe.
Die Datenlenkung für
Byte-, Halbwort- und nicht synchronisierte Zugriffe wird in den
Adressenlade- und -Speicherpuffern 6, in den Datenlade- und -Speicherpuffern 9 und/oder
im DMU-Modul 10 abgewickelt.
-
Die
universelle Registerdatei 1 dieser Ausführungsform enthält zweiunddreißig 32-Bit-Register, die
in Übereinstimmung
mit dem Prinzip der vorliegenden Erfindung gleichmäßig aufge teilt
sind, um eine parallele Operation an Ganzzahlen sowie Lade- und
Speicheranweisungen zu erleichtern, wie oben beschrieben. Der Datenabschnitt
von Registern, die Datenoperanden an die Ganzzahlen-Pipeline liefern, befinden
sich im Datenregisterdatei-Block (DGPR) 7. Der DGPR 7 enthält sechzehn
32-Bit-Datenregister. Der Adressenabschnitt von Registern, die Adressenoperanden
an die Lade- und Speicher-Pipeline liefern, befinden sich im Adressenregisterdatei-Block (AGPR) 4.
Der AGPR 4 enthält
sechzehn 32-Bit-Adressenregister. Die Anweisung liefert gewöhnlich die
Registeradressen für
Lese- und Schreibzugriffe. Die Lese- und Schreib-Adressenzeiger
werden in der Anweisungseinholungsstufe aus der Anweisung abgeleitet
und in der Decodierungsstufe abgelegt. Die Adresse in den Lesezeigern
wird decodiert, damit in der Decodierungsstufe die Registeroperanden
gelesen werden. Die Adresse in den Schreibzeigern wird in der Zurückschreibstufe
abgelegt. Die Entscheidung für
eine Operandenweiterleitung wird in der Decodierungsstufe getroffen,
um kritische Wege in der Anweisungseinholungsstufe zu minimieren.
-
Kontextanweisungen
mit einer inbegriffenen Adressensequenz greifen auf eine Gruppe
von Registern in jeder Registerdatei 2, 3 gleichzeitig
zu. Beispielsweise wird während
einer Kontextübertragung auf
Adressenregister a0, a1, a4 und a5 während des ersten Zyklus gemeinsam
zugegriffen, und auf Adressenregister a2, a3, a6 und a7 wird während des nächsten Zyklus
gemeinsam zugegriffen.
-
Bei
dieser Ausführungsform
schreibt die MAC-Anweisung die Anzahl von Lese- und Schreib-Ports
in der Datenregisterdatei 7 vor, die mit der Ganzzahlen-Pipeline
in der Einheit 11 eine Schnittstelle bilden. Außerdem schreibt
der Kontextzugriff die Anforderung einer Anzahl von bidirektionalen
I/O-Ports in der Datenregisterdatei 7 vor, die mit der
DMU 10 eine Schnittstelle bilden. Die Struktur eines einzigen
Registers wurde mit Bezug auf 3 und 4 erläutert. Wegen
der Notwendigkeit einer parallelen Ausführung von Ganzzahlen- sowie
La de- und Speicheranweisungen sind Ports in der Datenregisterdatei 7 vorgesehen,
um ausschließlich
mit der Ganzzahlen-Pipeline der Einheit 11 und der DMU 10 eine
Schnittstelle zu bilden. Die Lese- und Schreib-Ports in der DGPR 7 ermöglichen
eine parallele Ausführung
von Multiplikations- und
Ladeanweisungen oder von Multiplikations- und Speicheranweisungen.
Die Multiplikationsanweisung in dieser Ausführungsform erfordert beispielsweise
vier 32-Bit-Lese-Ports, die durch Busleitungen 802 bis 805 (siehe 2F)
repräsentiert
werden, und zwei 32-Bit-Schreib-Ports, die durch Busleitungen 800 und 801 repräsentiert
werden. Der Kontextzugriff benötigt
vier bidirektionale 32-Bit-Ports, die durch Busleitungen 920 bis 923 (siehe 2B)
repräsentiert werden,
sowie interne Busse 900 und 901, die von den Lese-Ports
getrennt sind, die der Ganzzahlen-Pipeline in der Einheit 11 zugeordnet
sind. Die Lade- und Speicheranweisungen könnten zwei von vier Kontextports
und internen Bussen 74 bis 77 gemeinsam nutzen
(siehe 2B), die als Lade- und Speicher-Ports bzw. -Busse
bezeichnet werden könnten.
Die restlichen zwei internen Kontextbusse, die als Zurückschreibbusse
bezeichnet werden könnten,
könnten
von der Ganzzahlen-Pipeline für
den Zurückschreibvorgang
gemeinsam genutzt werden.
-
Viele
Adressenarithmetikanweisungen erfordern zwei 32-Bit-Lese-Ports und einen 32-Bit-Schreib-Port
in der Adressenregisterdatei 4, um mit der Adressenarithmetik-Pipeline
in der Einheit 12 eine Schnittstelle zu bilden. Bei dieser
Ausführungsform
schreibt der Kontextzugriff die Anzahl von bidirektionalen I/O-Ports
in der Adressenregisterdatei 4 vor, die mit der DMU 10 eine
Schnittstelle bilden. Bei der bevorzugten Ausführungsform benötigt der Kontextzugriff
vier bidirektionale 32-Bit-Ports, die durch Busleitungen 119 bis 122 (siehe 2A)
repräsentiert
werden, und interne Busse, die von den Lese-Ports getrennt sind,
die der Adressenarithmetik-Pipeline zugeordnet sind. Mit anderen
Worten: Für jedes
Register, auf das parallel zugegriffen werden kann, muss ein Lese-/Schreib-Port vorgesehen sein. Die
Anzahl von Ports hängt
daher von der Breite des Busses oder von der Anzahl an Wörtern ab,
die auf diesem Bus parallel übertragen
werden können.
Die Lade- und Speicheranweisungen
könnten
zwei von vier Kontextports und zwei von vier internen Bussen gemeinsam
nutzen, die als Lade- und Speicher-Ports bzw. -Busse bezeichnet
werden könnten.
Die restlichen zwei internen Kontextbusse, die als Zurückschreibbusse
bezeichnet werden könnten,
könnten durch
die Adressenarithmetik-Pipeline für den Zurückschreibvorgang gemeinsam
genutzt werden. Ein hierfür
vorgesehener bidirektionaler 32-Bit-Part, der durch Busleitungen 800 (siehe 2F)
repräsentiert wird,
wickelt Übertragungen
zwischen der Anweisungseinholungseinheit und den Registern mit spezieller
Funktion der Einheit 12 und der Adressenregisterdatei 4 ab.
Kontext- und Stapelzeiger nutzen den Zurückschreibbus gemeinsam, um
mit der universellen Datei 1 eine Schnittstelle zu bilden.
-
Wegen
der Einschränkung
bei der Anzahl von Lese- und Schreib-Ports, die in der Registerdatei 1 verfügbar sind,
nutzen Anweisungen, die sowohl Daten- als auch Adressenregister
betreffen, nur bestehende Ports gemeinsam. Im Ergebnis müssen bei dieser
Ausführungsform
viele Adressenarithmetikoperationen, wenn sie parallel mit Ganzzahlenanweisungen
ausgegeben werden, im momentanen Zyklus ggf. abgebrochen und im
nachfolgenden Zyklus wieder eingeführt werden. Ein hierfür vorgesehener
bidirektionaler 32-Bit-Port 806 (siehe 2F)
in der Registerdatei löst
das Problem der Datenübertragung zwischen
Daten- und Adressenregisterdateien. Der Datenoperand aus einem Lese-Port
in der Datenregisterdatei 7 wird über den bidirektionalen Port
zu einem Lese-Port in der Adressenregisterdatei 4 gelenkt.
Das Ergebnis aus der Adressenarithmetik-Pipeline wird für den Zurückschreibvorgang über den
Schreib-Port in
der Adressenregisterdatei 4 und den bidirektionalen Port
zu den Lade- und Speicherbussen in der Datenregisterdatei 7 gelenkt.
-
Es
wird ein Lese-Modifizier-Schreibvorgang durchgeführt, um während eines Kontext-Sicherungs-
oder -Wiederherstellungsvorgangs auf das Verbindungswort aus dem
Datenspeicher zuzugreifen. Um auf das Verbindungswort zuzugreifen,
verwendet der Kontextsicherungsvorgang einen Zeiger. Während des
Kontextsicherungsvorgangs wird (a) das Verbindungswort in das Zeigerregister
geladen, werden (b) die Inhalte aus dem Zeigerregister an einem
Verbindungswort-Adressenort
gespeichert (wie von den alten Zeigerinhalten angezeigt) und nimmt (c)
das Zeigerregister die alten Zeigerinhalte an. Um auf das Verbindungswort
zuzugreifen, verwendet der Kontextwiederherstellungsvorgang das
Zeigerregister. Während
des Kontextwiederherstellungsvorgangs wird (a) das Verbindungswort
in das Zeigerregister geladen, werden (b) die Inhalte aus dem Zeigerregister
an einem Verbindungswort-Adressenort gespeichert
(wie von den alten Zeigerinhalten angezeigt) und nimmt (c) das Zeigerregister
die alten Zeigerinhalte an.
-
Die
Registerdatei 1 bildet auf einer Seite eine Schnittstelle
mit der DMU 10 und verbindet auf der anderen Seite direkt
mit der Adressenarithmetik-Pipeline IFU 12 sowie mit der
MAC und den Ganzzahlen-Pipelines 11. Die Steuersignale
für den
Zugriff auf die Registerdatei werden aus den Anweisungen abgeleitet.
Zur besseren Übersicht
sind diese Leitungen in 2A bis 2F nicht
gezeigt. Die Adressenregister 4 werden in der ersten Phase
des Decodierungszyklus (oder, für
einen Speicheroperanden, des Ausführungszyklus) gelesen und in
der ersten Phase des Zurückschreibzyklus
geschrieben, um zu vermeiden, dass ein Zurückschreibergebnis weitergeleitet
werden muss. Wenn beispielsweise die nächste + 1 Anweisung das Ergebnis
der momentanen Anweisung benötigt
(die nächste
ist in der Mitte), dann wird der Operand direkt aus den Adressenregistern 4 gelesen.
Die Datenregister 7 werden in der zweiten Phase des Decodierungszyklus
(oder, für Speicheroperanden,
des Ausführungszyklus)
gelesen und in der zweiten Phase des Zurückschreibzyklus geschrieben.
Ein Zugreifen auf Adressen- und Datenregister
in abwechselnden Phasen verringert den Spitzenwert der Leistung.
Die Datenregisterdatei 3 besteht aus den folgenden Blöcken: universellen Datenregistern 7,
Datenlade- und Speicherpuffern 9 und Datenweiterleitungspuffern 8.
Die Adressenregisterdatei 2 besteht aus den folgenden Blöcken: universellen
Adressenregistern 4, Adressenlade- und Speicherpuffern 6 und
einer Adressenweiterleitungseinheit 5.
-
Der
Datenregisterdatei-Block 3 enthält bei der bevorzugten Ausführungsform 16 Datenregister d0,
..., d15. Die grundlegende Datenregisterzelle in der Datenregisterdatei 7 besitzt
drei Lese-Ports 71, 72, 73 (siehe 2F)
sowie zwei bidirektionale Ports 75 und 77. Zwei
Lese-Ports 72 und 73 verbinden mit sämtlichen
sechzehn Registern d0, ..., d15, wobei sie einen Zugriff auf jedes
dieser Register d0, ..., d15 ermöglichen.
Jedoch sind die Lese-Ports 70, 71 entweder mit
geradzahligen oder mit ungeradzahligen Registern verbunden, sodass
auf geradzahlige Register d0, d2, ..., d14 über den geradzahligen Port 71 und auf
ungeradzahlige Register d1, d3, ..., d15 über den ungeradzahligen Port 70 zugegriffen
wird. Die MAC- und andere Anweisungen benötigen einen dritten Leseoperanden.
Die MAC-Anweisung erfordert einen 64-Bit-Akkumulator-Operanden, der keine
weitere Lenkung benötigt,
da er bereits mit der geradzahligen Adressenbegrenzung synchronisiert
ist. Doch wenn der dritte Operand in 32-Bit-Daten besteht, wie bei manchen
speziellen Anweisungen, abhängig
von der Registeradresse, dann kann der Operand am geradzahligen
oder am ungeradzahligen Lese-Port 71 bzw. 70 erscheinen,
der eine weitere Lenkung in die Ganzzahlen-Pipeline benötigt. Die
Operandenlenkung für die
spezielle Anweisung könnte
in der Ganzzahlen-Pipeline
in ihren eigenen Eingangsmultiplexern abgewickelt werden, was die
Notwendigkeit vermeidet, die Steuersignale an die Registerdatei 1 zu
senden. Dies schließt
einen weiteren Lese-Port in der Datenregisterdateizelle aus.
-
Jeder
bidirektionale Port 75, 77, 74, 76 in
der Registerzelle ist entweder mit geradzahligen oder mit ungeradzahligen
Registern verbunden, sodass auf geradzahlige Register d0, d2, ...,
d14 über
einen geradzahligen Port 75, 77 und auf unge radzahlige
Register d1, d3, ..., d15 über
einen ungeradzahligen Port 74, 76 zugegriffen
wird. Dies schließt
zusätzliche bidirektionale
Ports in der Datenregisterzelle aus. Jedoch muss das Datenergebnis,
entweder in der Datenspeichereinheit 10 für Lade-
und Speicheranweisungen oder in der Datenweiterleitungseinheit 8 für Ganzzahlenanweisungen,
synchronisiert werden oder von außen auf geeignete Busse gelenkt
werden.
-
Wenn
Ganzzahlen-, Lade- und Speicheranweisungen der Reihe nach ausgeführt werden,
dann werden die Datenlade- und -Speicher-Busse 76 und 77 sowie
die Datenzurückschreibbusse 74 und 75 innerhalb
der Datenregisterdatei 3 entsprechend durch Ganzzahlen-
und Speicheranweisungen besetzt. Die Datenlade- und Ziel-Registerzeiger
bleiben in den Ladepuffern, bis jeder der Busse 74 bis 77 verfügbar gemacht
wird. Inzwischen liefern die Ladepuffer die Daten immer dann, wenn
der Lesezeiger und der Zielzeiger in den Ladepuffern übereinstimmen.
-
Für eine Ganzzahlen-
mit nachfolgender Lade-Anweisungssequenz besetzen die Ladedaten
die Datenlade- und -Speicher-Busleitungen 76, 77,
während
das Zurückschreib-Ergebnis
einer Ganzzahlenanweisung die Datenzurückschreib-Busleitungen 74, 75 besetzt.
Doch für
eine Lade- mit nachfolgender Speicheranweisungssequenz besetzen
die Ladedaten, anstatt Datenlade- und
-Speicher-Busleitungen 76, 77 zu verwenden, die
Datenzurückschreib-Busleitungen 74, 75,
während
die Speicherdaten die Datenlade- und -Speicher-Busleitungen 76, 77 besetzen.
-
Der
Adressenregisterdatei-Block 2 enthält 16 Adressenregister.
Die grundlegende Registerzelle im Register besitzt zwei Lese-Ports 41, 42 (siehe 2E)
sowie drei bidirektionale Ports 40, 43, 44 oder 40, 45, 46.
Jedoch verbinden sowohl die Lese-Ports 41, 42 als
auch ein bidirektionaler Port 40 mit sämtlichen sechzehn Registern
a0, ..., a15. Adressenarithmetikanweisungen benötigen nur zwei Lese-Ports und
einen Schreib-Port, da sie die Zurückschreib-Busse gemeinsam nut zen.
Die Lade- und die Speicheranweisungen verwenden die Lade- und die
Speicher-Ports. Der dritte bidirektionale Port ist Schleifen- und
Sprunganweisungen zugeordnet. Wie üblich, muss das Adressergebnis,
entweder in der Datenspeichereinheit 10 für Lade-
und Speicheranweisungen oder in der Adressenweiterleitungseinheit 5 für Adressenarithmetikanweisungen,
synchronisiert werden oder nach außen gelenkt werden, damit auf
geradzahlige und auf ungeradzahlige bidirektionale Ports zugegriffen
werden kann.
-
Die
Datenweiterleitungseinheit 8 leitet die Lade- oder die
Ganzzahlen-Ergebnisse in der Ausführungsstufe der momentanen
Anweisung an die Lese-Ports in der Decodierungsstufe der nächsten Anweisung
weiter, um die von den Daten abhängige Latenzzeit
zu minimieren. Die Adressenweiterleitungseinheit 5 leitet
die Lade- oder Adressenarithmetik-Ergebnisse in der Ausführungsstufe
der momentanen Anweisung an die Lese-Ports in der Decodierungsstufe
der nächsten
Anweisung weiter, um die von der Adresse abhängige Latenzzeit zu minimieren.
Die Registerinhalte werden auch dann noch in der Decodierungsstufe
für die
nächste
Anweisung gelesen, wenn die momentane Anweisung neueste Daten enthält. Die
Inhalte aus dem Register werden verworfen, wenn die momentane Anweisung
ein neuestes Datenergebnis hat. Wenn in der Anweisungseinholungsstufe
eine Weiterleitungserfassung für
die nächste
Anweisung ausgeführt
werden kann, könnte das
Lesen von Registern für
jene Operanden vermieden werden, deren Adresse oder Daten aus den
Ergebnissen der momentanen Anweisung in der Ausführungsstufe erhalten werden
müssen,
sodass Leistung in der Registerdatei 1 gespart wird.
-
Die
Ganzzahlenanweisung könnte
mit einer nachfolgenden Lade- und
Speicher- oder einer Adressenarithmetik-Anweisung parallel ausgeführt werden.
Jedoch blockiert bei dieser Ausführungsform die
Anweisung in der Adressenarithmetik-Pipeline für einen Zyklus, wenn das Ergebnis
der Ganzzahlenanweisung an die Adressenarithmetik-Pipeline weitergeleitet
werden muss. Die Ergebnisweiterleitung aus der Adressenarithmetik-Pipeline zur Ganzzahlen-Pipeline
muss die Ganzzahlen-Pipeline nicht blockieren, da die Adressenarithmetik,
das Laden oder das Speichern mit nachfolgenden Ganzzahlenanweisungen
niemals parallel ausgeführt
werden. Ein bidirektionaler 32-Bit-Bus liefert Datenübertragungen zwischen
der Datenweiterleitungseinheit 8 und der Adressenweiterleitungseinheit 5.
Ein spezieller Weiterleitungsweg ermöglicht eine parallele Ausführung einer
Ganzzahlenanweisung mit nachfolgenden Speicheranweisungen. Das Ergebnis
aus der Ganzzahlen-Pipeline in der Ausführungsstufe wird direkt an
die Speicherpuffer weitergeleitet.
-
Der
Zurückschreibvorgang
für Ganzzahlenanweisungen
erfolgt über
Zurückschreibpuffer 829, 830, 831 (siehe 2F)
in der Datenweiterleitungseinheit 8. Die Zurückschreibvorgänge für Adressenarithmetik-,
Schleifen- und manche Sprunganweisungen erfolgen über Zurückschreibpuffer 515 (siehe 2E)
in der Adressenweiterleitungseinheit 5.
-
Die
Lade- und Speicherpuffer-Blöcke 6 und 9 sind
funktionell identisch, abgesehen vom Maskierungsblock 915 (siehe 2B)
im Datenlade- und -Speicherpuffer 9. Der Datenlade- und
-Speicherpuffer 9 sowie der Adressenlade- und -Speicherpuffer 6 bilden
für Kontext-Lade-
und -Speicher-Vorgänge eine
Schnittstelle mit der DMU 10. Der Datenlade- und -Speicherpuffer 9 stellt
eine Schnittstelle zwischen der Datenregisterdatei 7 und
der DMU 10 bereit. Der Adressenlade- und -Speicherpuffer 6 stellt eine
Schnittstelle zwischen der Adressenregisterdatei 2 und
der DMU 10 bereit. Obwohl der Datenwegschaltplan von 2A bis 2F die
Konfiguration für
das Bit 0 zeigt, gilt die gleiche Konfiguration für sämtliche
Bit im Schaltplan.
-
Einfache
Lade- und Kontextlade-Anweisungen verwenden für einen Zurückschreibvorgang die Ladepuffer 100, 105 (siehe 2A)
sowie 908 und 913 (LDB). Diese Ladepuffer 100, 105, 908 und 913 sind
sowohl in der Datenweiterleitungseinheit 5 als auch in
der Adressenweiterleitungseinheit 8 von den Zurückschreibpuffern
getrennt. Eine Kontextladeanweisung verwendet sämtliche vier Ladepuffer 100, 105, 908 und 913 zum
Bereitstellen von zwei Doppelwörtern
während
eines Kontextzurückschreibvorgangs.
Die unterschiedlichen Ladeanweisungen für Doppelwörter verwenden zwei Ladepuffer
zum Bereitstellen eines Doppelworts während eines Zurückschreibvorgangs.
Die anderen Ladeanweisungen und ähnliche
Anweisungen verwenden einen geradzahligen oder einen ungeradzahligen
Ladepuffer der Puffer 100, 105, 908 und 913 zum
Bereitstellen eines Worts für
einen Zurückschreibvorgang.
-
Der
Synchronisationsteilblock 914 im Datenlade- und -Speicherpuffer 9 wickelt
eine Null- und eine Vorzeichenerweiterung für Byte- und Halbwort-Ladeanweisungen
ab. Jedoch wickelt die DMU 10 das Entpacken von Ladedaten
und die Datenlenkung für
nicht synchronisierte Byte-, Halbwort-, Wort- und Doppelwort-Ladevorgänge im Lade-
und Speicherwechsler ab.
-
Einfache
Speicher- und Kontextspeicher-Anweisungen verwenden für einen
Speichervorgang die Speicherpuffer (STB) 101, ..., 104; 909,
..., 912. Eine Kontextspeicheranweisung verwendet sämtliche
vier Speicherpuffer 101, ..., 104; 909,
..., 912 zum Bereitstellen von zwei Doppelwörtern während eines
Kontextspeichervorgangs. Die Doppelwortspeicheranweisungen verwenden
zwei Speicherpuffer zum Bereitstellen eines Doppelworts während eines
Speichervorgangs. Die anderen Speicheranweisungen und ähnliche
Anweisungen verwenden einen geradzahligen oder einen ungeradzahligen
Speicherpuffer 102, 104, 910, 912; 101, 103, 909, 911 zum
Bereitstellen eines Worts für
einen Speichervorgang. Jedoch wickelt die DMU 10 das Packen
von Speicherdaten und die Datenlenkung für nicht synchronisierte Byte-,
Halbwort-, Wort- und Doppelwort-Speichervorgänge im Lade-
und Speicherwechsler ab.
-
Die
Austauschanweisung für
Wörter
erfordert ein Register, dessen Inhalte gegen Datenspeicherinhalte
ausgetauscht werden können,
was als ein einziger Zyklus eines Lese-Modifizier-Schreib-Vorgangs
angesehen werden könnte. Die
Lade- und Speicherpuffer 6 und 9 wickeln den Austauschvorgang
ab. Die Austauschanweisung für Wörter führt parallel
eine Ladeanweisung für
Wörter und
eine Speicheranweisung für
Wörter
aus. Die Ladedaten aus dem Datenspeicher gelangen in die Ladepuffer 908 und 913,
und die Speicherdaten aus der Registerdatei gelangen in der Ausführungsstufe
in die Speicherpuffer 909, ..., 912. Die Speicherdaten gehen
zu dem Datenspeicher 10, und die Ladedaten gelangen in
der Zurückschreibphase
in die Datenregisterdatei 7. Die (nicht gezeigte) periphere
Schnittstelle und ein interner Speicher behandeln die Austauschanweisungen
als zwei separate Vorgänge.
-
Für eine spezielle
Lade- und Maskierungsanweisung ist ein Lese-Modifizier-Schreib-Vorgang in
einem einzigen Zyklus erforderlich, und diese Anweisung führt bis
auf einige geringfügige
Abweichungen Vorgänge ähnlich wie
die oben erwähnte
Austauschanweisung aus. Die Lade- und Maskierungsanweisung verwendet
zum Ausführen
eines Maskierungsvorgangs die Maskierungseinheit 915. Der
Ladevorgang liest den Datenspeicher aus und aktualisiert die Ladepuffer 908 und 913,
aktualisiert jedoch nicht die Register d0, ..., d15. Der Speichervorgang liest
aus den Registern d0, ..., d15 ein Doppelwort aus und speichert
nur ein einziges Wort in den Datenspeicher 10 ein. Die
Daten aus dem Datenspeicher 10 gelangen in die Ladepuffer 908 und 913,
und die Speicherdaten aus der Registerdatei 7 gelangen
in der Ausführungsstufe
in die Speicherpuffer. Die Maskierungseinheit 915 verwendet
das höherwertige Wort
aus den Speicherpuffern 911 und 912, um das niederwertige
Wort mit dem Ausgang aus den Ladepuffern 908 und 913 zu
vereinigen. Die Speicherdaten gehen in der Zurückschreibphase zu dem Datenspeicher 10.
Zwischen der Datenspeichereinheit 10 und der universellen
Registerdatei kann optional ein Cache-Speicher vorgesehen sein, um den Zugriff
auf die im Speicher gespeicherten Daten zu verbessern.