-
Die Erfindung bezieht sich auf eine
Vorrichtung zur Datenverarbeitung nach Anspruch 1. Eine derartige
Vorrichtung zur Datenverarbeitung wird in der Übersicht zum Aufbau des Prozessors
80C51XA von Philips im Datenhandbuch IC25 auf den Seiten 33 bis
56 beschrieben, das 1996 von Philips Semiconductors veröffentlicht
wurde.
-
Ein Stapel kann beispielsweise mittels
eines Stapelzeigerregisters beibehalten werden, das einen Speicheradressenzeiger
speichert. Während
einer Operation des Hinzufügens
(engl. push operation) wird der Speicheradressenzeiger inkrementiert,
und Informationen werden an dem Speicherplatz gespeichert, auf den
er zeigt. Durch aufeinander folgende Push-Operationen werden somit
Informationen in eine Reihe von aufeinander folgenden Speicherplätzen geschrieben.
Diese Informationen können
durch Adressierung der Speicherplätze gelesen werden, die zur
Stapelspitze gehören.
-
Die Operation des Auslesens (engl.
pop operation) ist das Gegenteil der Push-Operation. Während einer
Pop-Operation werden Informationen aus dem Speicherplatz gelesen,
auf den der Adressenzeiger zeigt, und der Speicheradressenzeiger
wird dekrementiert.
-
Der Prozessor 80C51XA unterstützt einen derartigen
Stapelmechanismus, da er über
Befehle mit einem Adressiermodus verfügt, bei dem die Adressen in
Bezug auf ein Register ausgedrückt
werden, das einen Speicheradressenzeiger enthält. Durch den Verweis auf ein
Register identifiziert der Befehl den Speicheradressenzeiger in
dieser Adresse als den Zeiger auf den Speicherplatz, der als Quelle
eines Operanden oder als Ziel eines Ergebnisses zu verwenden ist.
Mehrere Register können auf
diese Weise eingesetzt werden, und daher kann jedes als Stapelzeiger
verwendet werden. Der Prozessor 80CS1XA definiert auch speziell
einen Benutzerstapel und einen Systemstapel für den Rücksprung von Prozeduraufrufen
und Unterbrechungen. Der Stapelzeiger auf diese Stapel wird auf
eines der normalen Register abgebildet. Dies ist in der Patentschrift
US-A-5 319 757 dargelegt.
-
Es gibt einen Adressiermodus, in
dem die Ausführung
eines Befehls das Register, auf das er sich bezieht, dazu veranlasst,
zusammen mit seiner funktionellen Operation des Befehls inkrementiert oder
dekrementiert zu werden. Die Inkremente oder De kremente erfolgen
in Einheiten von 16-Bit-Wortadressen, das heißt, der Inhalt des Registers
wird jeweils um 2 Byte-Adressen inkrementiert oder dekrementiert.
-
Stapel bieten einen leistungsfähigen Mechanismus
für die
Verwaltung von Informationen, insbesondere wenn sie dazu verwendet
werden, Programme auszuführen,
die durch höhere
Programmiersprachen definiert werden. Dies bedeutet, dass eine große Anzahl
von Daten auf einem Stapel gespeichert wird, und dass ein Stapel
eine beträchtliche
Menge an Speicherplatz mit wahlfreiem Zugriff nutzt.
-
Der Erfindung liegt unter anderem
die Aufgabe zugrunde, eine Verarbeitungsvorrichtung zu schaffen,
in der weniger Speicherplatz für
gestapelte Informationen benötigt
wird.
-
Der Erfindung liegt ferner die Aufgabe
zugrunde, den Umfang des zum Speichern von Programmen, die Stapel
nutzen, erforderlichen Speicherplatzes zu reduzieren.
-
Der Erfindung liegt außerdem die
Aufgabe zugrunde, einen leistungsfähigen Vorrat an Stapelverarbeitungsbefehlen
zu schaffen, ohne dass die Befehle übermäßig lang werden.
-
Die erfindungsgemäße Verarbeitungsvorrichtung
ist in Anspruch 1 definiert. Der erste Stapel kann beispielsweise
für numerische
Datenwerte genutzt werden, die als Operanden in verschiedenen arithmetischen
bzw. logischen Befehlen verwendet werden sollen, wobei die Basiseinheit
in diesem Fall beispielsweise ein 16-Bit-Wort ist, und der zweite Stapel
kann für
Adressen genutzt werden, die als Adressen für Operanden in derartigen arithmetischen bzw.
logischen Befehlen verwendet werden sollen, wobei die Basiseinheit
in diesem Fall beispielsweise ein 24-Bit-Wort ist.
-
Somit ist die Länge der Basiseinheiten beispielsweise
16 Bits und 24 Bits für
den ersten bzw. den zweiten Stapel. Wenn ein erster und ein zweiter Stapelzeiger
verwendet werden, die auf einen in Bytes adressierten Speicher zeigen,
wird infolgedessen der erste Stapelzeiger um 2-Byte-Adressen als Ergebnis
einer Push- bzw. einer Pop-Operation und der zweite Stapelzeiger
um 3-Byte-Adressen als Ergebnis einer Push- oder einer Pop-Operation verändert. Der
erste Stapel kann beispielsweise für numerische Datenwerte genutzt
werden, die als Operanden in verschiedenen arithmetischen bzw. logischen Befehlen
verwendet werden sollen, und der zweite Stapel kann für Adressen
genutzt werden, die als Adressen für Operanden in derartigen arithmetischen bzw.
logischen Befehlen verwendet werden sollen.
-
Die Basislänge von Datenwerten und Adressen
unterscheidet sich im Allgemeinen aufgrund der unterschiedlichen
Nutzung dieser beiden Arten von Informationen. Wenn im Gegensatz
zu der Erfindung nur eine Basiseinheitslänge für die Stapelung beider Arten
von Informationen zur Verfügung
steht, bedeutet dies, dass Speicherplatz auf dem Stapel für nutzlose
Informationen verschwendet wird. Dies wird durch die Erfindung verhindert,
da Stapel mit unterschiedlichen Längen für die Basisstapeleinheiten verwendet
werden. Die Erfindung beschränkt
sich nicht auf Adressen und Daten, sondern kann unter allen Umständen angewendet
werden, bei denen zwei Arten von Informationen mit unterschiedlichen
bedeutungsvollen Längen
verwendet werden.
-
Andere Ausführungsbeispiele der erfindungsgemäßen Verarbeitungsvorrichtung
sind in den beigefügten
abhängigen
Ansprüchen
beschrieben.
-
Diese und weitere vorteilhafte Aspekte
der erfindungsgemäßen Verarbeitungsvorrichtung
werden ohne Anspruch auf Vollständigkeit
in Bezug auf die folgenden Zeichnungen beschrieben. Es zeigen:
-
1 eine
vereinfachte Vorrichtung zur Datenverarbeitung zur Erläuterung
des Prinzips der Erfindung;
-
2a/b
einen Teil eines Befehlsvorrats einer Vorrichtung zur Datenverarbeitung;
-
3 eine
Vorrichtung zur Datenverarbeitung mit speziellen Stapelcaches/-pufferspeichern.
-
1 zeigt
eine vereinfachte Vorrichtung zur Datenverarbeitung zur Erläuterung
des Prinzips der Erfindung. Die Vorrichtung umfasst eine Einheit 10 zur
Befehlsausführung
und einen Speicher 12, die beide mit einem Datenbus 14a und
einem Adressenbus 14b verbunden sind. Die Vorrichtung umfasst
ferner eine erste und eine zweite Stapelsteuerungseinheit 16, 18,
deren Steuerungsschnittstelle mit der Einheit 10 zur Befehlsausführung und
deren Ausgang mit dem Adressenbus 14b verbunden ist.
-
Die erste Stapelsteuerungseinheit 16 umfasst
ein Stapelzeigerregister 160 mit einem Ausgang, der mit
einem Versatzsubtrahierglied 163 verbunden ist. Die Steuerungsschnittstelle
zur Ausführungseinheit 10 umfasst
einen Versatzeingang, der über
eine Verschiebeeinheit 162 mit einem Eingang des Versatzsubtrahiergliedes 163 verbunden
ist. Der Ausgang des Versatzsubtrahiergliedes 163 ist über eine
Busschnittstelleneinheit 164 mit dem Adressenbus 14b verbunden.
Der Ausgang des Stapelzeigerregisters ist ebenso über ein
Inkrementier-/Dekrementierglied 169 mit einem ersten Eingang
eines Multiplexers 165 verbunden. Der zweite Eingang des Multiplexers 165 ist
mit einem Stapelvoreinstellausgang der Einheit 10 zur Befehlsausführung verbunden.
Der Ausgang des Multiplexers 165 ist mit einem Eingang
des Stapelzeigerregisters 160 verbunden. Die Steuereingänge des
Multiplexers 165, des Stapelzeigerregisters 160 und
der Busschnittstelleneinheit 164 sind über die Steuerungsschnittstelle
mit der Einheit 10 zur Befehlsausführung verbunden.
-
Die zweite Stapelsteuerungseinheit 18 umfasst
einen zweiten Stapelzeiger 180 und entspricht der ersten
Stapelsteuerungseinheit 16 mit der Ausnahme, dass der Versatzeingang 181 über eine
Multiplizierschaltung 186 mit dem Versatzsubtrahierglied 183 verbunden
ist. Die Multiplizierschaltung 186 umfasst eine Verschiebeeinheit 182 und
ein weiteres Addierglied 187. Der Versatzeingang 181 ist
direkt und über
die Verschiebeeinheit 182 mit den Eingängen des weiteren Addiergliedes 187 verbunden.
Der Eingang des weiteren Addiergliedes 187 ist mit dem Eingang
des Versatzsubtrahiergliedes 183 verbunden.
-
Die 2a,
b stellen eine Tabelle dar, die verschiedene mögliche Befehle vom Befehlsvorrat der
Einheit 10 zur Befehlsausführung zeigt. Der Befehlsvorrat
nutzt primär
zwei Arten von Registern: A-Register (oder Adressenregister) mit
24 Bits und D-Register
(oder Datenregister) mit 16 Bits. Bei der vereinfachten Vorrichtung
zur Datenverarbeitung aus 1 entsprechen
diese „Register" in der Tat Plätzen im
Speicher 12.
-
Der Befehlsvorrat umfasst Lade- (Ld)
und Speicher- (St) Operationen zum Laden und Speichern von Informationen
aus dem Speicher in ein Register bzw. aus einem Register in den
Speicher. Es existieren verschiedene Versionen dieser Befehle (beispielsweise
LdA, LdB, LdD) in Abhängigkeit
beispielsweise von dem betroffenen Quellen- oder Zielregister (beispielsweise
ein Adressenregister oder ein Datenregister) und der Art der zu
ladenden Daten (beispielsweise ganzes Wort oder halbes Wort). Zusätzlich umfasst
der Befehlsvorrat Befehle zum Ausführen zahlreicher arithmetischer
und logischer Operationen, wie Add (Addieren), Sub (Subtrahieren), Shl,
Shr (Verschieben nach links bzw. rechts) And Or, Xor (exklusives
ODER), Not (logische Inversion). Ferner umfasst der Befehlsvorrat
Steueroperationen wie Br (Verzweigen), J (Springen) usw.
-
Die Quellenoperanden der arithmetischen und
logischen Operationen stammen im Allgemeinen von D-Registern oder
werden direkt in den entsprechenden Befehlen definiert. Die Adressen
der Quellenoperanden von Ladeoperationen und der Zieloperanden von
Speicheroperation werden im Allgemeinen direkt in den Befehlen durch
eine Speicheradresse oder indirekt durch eine in einem A-Register
gespeicherte Adresse definiert, auf die sich der Befehl bezieht.
Zusätzlich
existiert ein Add-Befehl für
A-Register.
-
Für
viele Befehle existiert eine Anzahl von Versionen, die sich nur
durch den Adressiermodus unterscheiden, der verwendet wird, um Operanden zu
handhaben, sonst jedoch die gleiche Operation definieren. So kommen
die Befehle für
LdA in zwei Hauptversionen vor, wobei eine erste Hauptversion ein
Register und einen Versatz spezifiziert. Der Operand ist im Speicher
bei einer Adresse angeordnet, die durch Addieren des Versatzes zum
Inhalt des angegebenen Registers erzielt wird. Bei entsprechenden
Versionen der ersten Hauptversion ist der Versatz 5 Bits oder 13
Bits lang, und der gesamte Befehl ist 16 Bits bzw. 28 Bits lang
(der Operationscode ist bei der zweiten Version länger). Eine
zweite Hauptversion spezifiziert den Operandenwert direkt. Bei entsprechenden
Versionen der zweiten Hauptversion ist der Operandenwert 8 Bits
oder 24 Bits lang, und die Befehle sind 20 bzw. 36 Bits lang.
-
In den 2a,
b sind Maschinenbefehle mittels einer Beschreibung von Assemblerbefehlen
für die
Vorrichtung dargestellt. Ein Assemblerbefehl umfasst einen Funktionscode
gefolgt von einer Operandenbeschreibung. Die erste Spalte zeigt
ein mnemonisches Symbol für
den Funktionscode. Die zweite Spalte zählt verschiedene Versionen
eines Befehls mit der gleichen Mnemonik. Die dritte Spalte beschreibt
das Format der Operandenbeschreibung. Die vierte bis achte Spalte
zeigt die Anzahl von Bits, die in dem Maschinenbefehl für den Funktionscode (Operationscode)
verwendet werden, und den ersten, zweiten, dritten bzw. vierten
Operanden (wenn vorhanden). Die letzten Spalten zeigen die Gesamtlänge des
Befehls in 4-Bit-Nibbles.
-
Bei dem in der dritten Spalte beschriebenen Format
werden unterschiedliche Operanden eines Befehls durch Kommata getrennt.
Normalerweise gibt der erste Operand den Platz an, an dem das Ergebnis
des Befehls gespeichert werden soll, und der zweite und mögliche weitere
Operanden geben das Argument an, das bei der Durchführung der
Funktion verwendet wird. Im Fall der Befehle LdB und Shr (Verschieben
nach rechts) geht den anderen Operanden ein Operand „s" voraus, der angibt,
ob eine Vorzeichenerweiterung stattfinden soll. Im Fall der Operationen
St bezieht sich der erste Operand auf die Quelle und der zweite
Operand auf die Adresse des Ziels.
-
Ein Eintrag für einen Operanden, der „An" enthält, bedeutet,
dass sich der Operand auf ein auswählbares Register „A" bezieht. „Dn" bedeutet, dass sich
der Operand auf ein auswählbares
Register „D" bezieht. Die Verwendung
der Zeichen "+", "–" und "*" vor
und nach Registern wird weiter unten erläutert. Wenn der Bezug auf ein
Register in Klammern gesetzt wird „(" ")", bedeutet dies,
dass der Inhalt des betreffenden Registers als Adresse für den Operanden
verwendet wird. Folgt dem Verweis auf ein Register in Klammern ein
Zeichen "+" und das Wort „offset", bedeutet dies,
dass der Assemblerbefehl einen Versatzwert enthält, der zu dem Inhalt des Registers addiert
werden muss, um die Adresse des Operanden zu erzielen. Dem Wort „offset" folgt eine Zahl,
die die Anzahl von Bits angibt, die für diesen Operanden in dem speziellen
Befehl verwendet werden.
-
In einer Reihe von Befehlen ist ein
Wert explizit enthalten, der als Parameter für die Funktion zu verwenden
ist. Dies wird verschiedentlich durch das Wort „offset" ohne Klammern oder ein Zeichen „#" gefolgt von dem
Wort „immediate" oder „imm", angegeben. In jedem
Fall kann diesen Worten eine Zahl folgen, die die Anzahl von Bits
angibt, die in diesem Befehl zur Codierung des Wertes verwendet
werden. Weitere Einzelheiten der Befehle werden im Folgenden erläutert.
-
Im Betrieb lädt die Einheit 10 zur
Befehlsausführung
nacheinander den Maschinencode für
Befehle vom Speicher 12 und führt sie aus. Dies beginnt,
wenn die Befehlsausführungseinheit 10 eine Adresse
des Befehls zum Adressenbus 14b ausgibt. Als Reaktion leitet
der Speicher 12 (mindestens einen ersten Teil) des Befehls
zurück,
der dann decodiert wird. Wenn sich aus dem geladenen Teil entnehmen
lässt,
dass der Befehl noch nicht vollständig ist (Befehle können unterschiedliche
Längen
aufweisen), lädt
die Ausführungseinheit 10 auch
den Rest des Befehls. Im Fall eines arithmetischen Befehls wählt die
Befehlsausführungseinheit 10 dann
die Operanden aus und leitet sie zu einem Rechenwerk (in der Befehlseinheit;
nicht getrennt dargestellt) weiter; das Ergebnis der Verarbeitung
durch das Rechenwerk wird in einem Zielregister gespeichert. Im Fall
einer Lade-/Speicheroperation berechnet die Befehlsausführungseinheit
die Adresse und ruft Informationen an dieser Adresse vom Speicher
ab oder speichert Infonmationen an dieser Adresse im Speicher.
-
Die D-Register und ein Teil der A-Register sind
als ein separater D-Stapel bzw. A-Stapel organisiert. Informationen
werden auf dem D-Stapel in Einheiten von zwei Bytes (16 Bits)
und auf dem A-Stapel in Einheiten von drei Bytes (24 Bits)
gespeichert. Bei dem vereinfachten Datenverarbeitungssystem in 1 werden die Inhalte jedes
Stapels im Speicher 12 gespeichert, und die Stapelzeiger 160, 180 in
der ersten und der zweiten Stapelsteuerungseinheit 16, 18 enthalten
Adressen, die auf die Speicherplätze zeigen,
an denen die Spitze des D-Stapels bzw. die Spitze des A-Stapels
gespeichert ist. Die Befehlsausführungseinheit
interpretiert Verweise auf drei Register D0, D1, D2 usw. in Befehlen
als Verweise auf den Platz an der Spitze des D-Stapels, den Platz
ein Wort unterhalb der Spitze des D-Stapels bzw. den Platz zwei
Worte unterhalb der Spitze des D-Stapels. Auf die gleiche Weise
interpretiert die Befehlsausführungseinheit
Verweise auf drei Register A0, A1, A2 usw. in Befehlen als Verweise
auf den Platz an der Spitze des A-Stapels, den Platz drei Bytes
unterhalb der Spitze des A-Stapels bzw. den Platz sechs Bytes unterhalb
der Spitze des A-Stapels. Bei einer Version des Befehls LdD (siebte
Version) wird der Quellenoperand als Dn_ext bezeichnet und mit Hilfe
von 3 Bits codiert. Bei dieser Version des Befehls LdD kann der Wert
in dem Feld Dn_ext acht Werte annehmen, die sich auf so viele Positionen
verschiedener Basiseinheiten gezählt
von der Stapelspitze beziehen, wie durch den Befehl LdD in D0 geladen
werden können.
-
Trifft die Befehlseinheit 10 in
einem Befehl einen Verweis auf ein D-Register an, das einer Position im D-Stapel
entspricht, gibt sie an die erste Stapelsteuerungseinheit 16 einen
Code aus, der die Anzahl der Register darstellt, um die dieses Register
im Vergleich zu dem Register verschoben ist, das der Spitze des
D-Stapels entspricht. Die Verschiebeeinheit 162 verschiebt
diese Anzahl um ein Bit nach höherer Wertigkeit,
indem sie effektiv die Anzahl mit Zwei multipliziert. Das Versatzsubtrahierglied 163 subtrahiert
das Ergebnis vom Inhalt des Stapelzeigerregisters 160.
Gesteuert von der Befehlsausführungseinheit 10 wird
der Ausgang des Versatzsubtrahiergliedes dem Adresseneingang des
Speichers 12 zugeführt,
und Informationen werden in oder aus dem adressierten Platz geschrieben
oder gelesen, was einen Lese- oder Schreibvorgang des betroffenen D-Registers
darstellt.
-
Der Einfachheit halber wird angenommen, dass
der Datenpfad zum Speicher breit genug für jede Basiseinheit von Informationen
auf dem Stapel ist, und dass keine Besehränkungen hinsichtlich der Adressen
bestehen, die verwendet werden können. Wird
diese Annahme nicht erfüllt,
kann die Busschnittstelleneinheit 164 den Informationstransfer
in mehr als einen Speicherzyklus aufteilen, indem beispielsweise
aufeinander folgende Bytes übertragen werden,
die ein Wort ergeben, oder erst ein Anfangsteil der Basiseinheit über tragen
wird, der sich nicht an einer Wortgrenze befindet und daher nicht
in einer Worttransferoperation adressiert werden kann.
-
Trifft die Befehlseinheit 10 in
einem Befehl einen Verweis auf ein A-Register an, das einer Position im A-Stapel
entspricht, wird die zweite Stapelsteuerungseinheit 18 im
Wesentlichen auf die gleiche Weise wie die erste Stapelsteuerungseinheit 16 verwendet.
In diesem Fall wird die Anzahl der Register, um die dieses Register
im Vergleich zu dem Register, das der Spitze dieses A-Stapels entspricht,
versetzt ist, effektiv mit Drei multipliziert, indem diese Anzahl zu
einer verschobenen Version ihrer selbst addiert wird.
-
Somit wird der berechnete Versatz
im Vergleich zu dem Speicherplatz, der sich an der Spitze des Stapels
befindet, an die Art des Stapels angepasst: er wird mit der Länge der
auf dem Stapel gespeicherten Basiseinheiten multipliziert, d. h.
mit Zwei oder Drei in 1,
es kann jedoch natürlich
jeder andere Faktor verwendet werden in Abhängigkeit von der Art der Informationen,
für die
der Stapel genutzt wird.
-
Wenn die Befehlsausführungseinheit 10 einen
Befehl erhält,
Daten vom D-Stapel
oder A-Stapel auszulesen oder zu ihm hinzuzufügen, wird der Platz im Speicher 12 an
der Stapelspitze adressiert. Gesteuert von der Befehlsausführungseinheit 10 berechnet
das Inkrementier-/Dekrementierglied 169, 189 den
Stapelzeiger vom Stapelzeigerregister 160, 180 inkrementiert
oder dekrementiert um die Länge einer
Basiseinheit. Das Ergebnis wird dazu verwendet, das Stapelzeigerregister 160, 180 zu
aktualisieren. Im Falle der ersten Stapelsteuerungseinheit 16 für den D-Stapel
beträgt
dieses Inkrement oder Dekrement zwei. Im Fall der zweiten Stapelsteuerungseinheit 18 für den A-Stapel
beträgt
dieses Inkrement oder Dekrement drei. Dies ist in jedem Fall die
Länge der
auf dem Stapel gespeicherten Basiseinheiten.
-
Bei dem in den 2a, b gezeigten Befehlsvorrat bewirken
mehrere Befehle, dass die Befehlsausführungseinheit eine Pop- oder
eine Push-Operation durchführt
und gleichzeitig die Stapelspitze als Operanden- oder Zieladresse
verwendet. In diesem Fall ist eine Push-Operation gekennzeichnet
durch "+" gefolgt von A0 oder
D0, und eine Pop-Operation ist
gekennzeichnet durch A0 oder D0 gefolgt von "–". Bei einigen Befehlen
ist die Push- und Pop-Operation implizit: in diesem Fall sind keine
separaten Bits in dem Maschinenbefehl erforderlich, um eine Push- und
Pop-Operation zu codieren. In diesem Fall dient die Angabe von +/– und A0/D0
in den Assemblerbefehlen aus den 2a,
b lediglich als Erinnerung. Bei anderen Befehlen ist die Push- oder
Pop-Operation optional. In diesem Fall steht +/– in Klammern „[" "]", und
ein Bit wird in dem Maschinenbefehl dazu verwendet auszuwählen, ob
eine Push- oder eine Pop-Operation auszuführen ist.
-
In der vorangehenden Erläuterung
wurde angenommen, dass der Stapelzeiger bei einer Push-Operation
inkrementiert und bei einer Pop-Operation dekrementiert wird, und
dass der Stapelzeiger auf den Platz der letzten hinzugefügten Information
zeigt. Dies stellt nur ein Beispiel dar, und es kann natürlich stattdessen
der Stapelzeiger bei einer Push-Operation dekrementiert werden,
wobei ein Versatz im Vergleich zum Stapelzeiger berechnet wird,
indem er zum Stapelzeiger addiert wird. Der Stapelzeiger kann ferner
auf jeden Speicherplatz mit einer feststehenden Beziehung zur Stapelspitze
zeigen, beispielsweise auf den Platz, an den die nächsten Informationen
als Reaktion auf eine Push-Operation
geschrieben werden.
-
Es ist nicht einmal erforderlich,
dass bei einer Pop-Operation beide Stapelzeiger in der gleichen Richtung
verändert
werden. Es kann beispielsweise vorkommen, dass der Stapelzeiger
für den
D-Stapel bei einer Pop-Operation inkrementiert und im Gegensatz
dazu der Stapelzeiger für
den A-Stapel bei einer Pop-Operation dekrementiert wird oder umgekehrt. In
diesem Fall kann ein einziger Speicheradressenbereich für beide
Stapel verwendet werden, wobei ein Stapel vom unteren Ende dieses
Bereichs aus anwächst
and der andere Stapel vom oberen Ende dieses Bereichs nach unten
wächst,
bis sie sich treffen. Auf diese Weise kann der gemeinsame Stapelraum
durch den Stapel genutzt werden, der den meisten Raum benötigt, auf
Kosten des für
den anderen Stapel zur Verfügung
stehenden Raums. Die Verarbeitungseinheit umfasst in diesem Fall
vorzugsweise einen Kollisionsdetektor, der erkennt, ob sich die Stapelzeiger
für den
A-Stapel und den D-Stapel treffen. Der Kollisionsdetektor erzeugt
eine Unterbrechung aufgrund eines Stapelüberlauffehlers, um zu verhindern,
dass Daten oder Adressen von einem der Stapel Adressen oder Daten
von dem anderen Stapel überschreiben.
-
Ohne von der Erfindung abzuweichen,
kann der Stapelzeiger auch als Stapelbasiszeiger beibehalten und
ein Zählerwert,
der die Anzahl von Basiseinheiten mit auf dem Stapel gespeicherten
Informationen darstellt, gespeichert werden. In diesem Fall kann
die Stapelspitzenadresse berechnet werden, indem der Zählerwert
mit der Länge
der Basiseinheit auf dem entsprechenden Stapel multipliziert wird
(da diese eine feststehende Länge
ist, erfordert die Multiplikation höchstens ein paar Additionen).
Die Summe des Produkts und der Stapelbasis ist der Stapelzeiger.
Die Speicheradresse einer Basiseinheit eine Anzahl von Einheiten
unterhalb der Stapelspitze kann in gleicher Weise berechnet werden,
indem zuerst die gegebene Anzahl von dem Zählwert subtrahiert wird.
-
Der Einfachheit halber sind die Stapelsteuerungseinheiten 16, 18 in 1 als vollständig getrennte
Einheiten dargestellt, in der Praxis können jedoch mehrere Funktionen
dieser Stapelsteuerungseinheiten von gemeinsamen Schaltungen durchgeführt werden.
Die Versatzsubtrahierglieder 163, 183 und/oder
die Busschnittstelleneinheiten 164 können beispielsweise von den
beiden Stapelsteuerungseinheiten gemeinsam genutzt werden, da nur
auf einen Stapel auf einmal zugegriffen wird.
-
Werden zwei Bits verwendet, um ein
Operandenregister zu identifizieren, so können im Prinzip vier verschiedene
Register, d. h. vier Positionen von Basiseinheiten auf dem Stapel,
adressiert werden. Bei einem vorteilhaften Ausführungsbeispiel der Erfindung
behandelt die Befehlsausführungseinheit 10 einen
Verweis auf ein viertes Register D3, A3 auf einem der Stapel als
Verweis auf die Stapelspitze, genau wie D0 oder A0; wenn jedoch
D3 oder A3 verwendet wird, folgt dem Zugriff auf den Stapel eine
Dekrementierung oder geht ihm eine Inkrementierung voraus, falls
der Verweis auf A3 oder D3 als Quelle bzw. Ziel eines Operanden
verwendet wird. Dies ist in der Tat eine Push- oder Pop-Operation.
Durch die Verwendung eines derartigen Registerverweises zur Meldung
einer Push- oder Pop-Operation an die Ausführungseinheit 10,
erfordern die meisten Push- und Pop-Operationen keinen zusätzlichen
getrennten Befehl, und der auf D3 oder A3 verweisende Befehl beansprucht
nicht viel von dem Befehlsvorrat. Somit kann der für die Speicherung
von Programmen erforderliche Speicherplatz minimiert werden. In
den 2a, b ist diese
Möglichkeit
für eine
ausgewählte Anzahl
von Befehlen angegeben, indem der entsprechende Operand mit "*" gekennzeichnet ist. Diese Art der Behandlung
des Operanden kann auf alle Befehle angewendet werden, die sich
auf Register beziehen, oder diese Behandlung kann nur auf ausgewählte Befehle
angewendet werden, so dass andere Befehle normalerweise A3 oder
D3 für
das vierte Register verwenden.
-
Vorzugsweise werden die vier Register
D0, D1, D2, D3 und die vier Register A0, A1, A2, A3 unter Verwendung
von zwei Bits in dem Befehl codiert. Natürlich können, wenn mehr Register erforderlich
sind, die auf den Stapel verweisen, allgemeiner n Bits verwendet
werden, wobei 2**n – 1
Werte verwendet werden, um auf verschiedene Versätze zur Stapelspitze zu verweisen,
und ein Wert zum Durchführen
einer Push- oder Pop-Operation
verwendet wird.
-
Die Befehlsausführungseinheit kann Verweise
auf zusätzliche
Register A4, A5, A6, A7 als Verweise auf lokale Register interpretieren,
die sich auf den gleichen lokalen Speicherplatz unabhängig vom Zustand
des Stapels beziehen. Beispielsweise kann sich Register A4 auf den
A-Stapelzeiger 180, Register A5 auf den D-Stapelzeiger 160,
Register A7 auf den Programmzähler
und Register A6 auf den Programmähler
beziehen, der beim Rücksprung
von einem Prozedurabruf zu verwenden ist. Alle diese Register speichern
Adressen mit 24 Bits und werden daher A-Register genannt.
-
Im Prinzip können Rücksprungadressen von Unterprogrammaufrufen
auch auf dem Adressenstapel gespeichert werden. Die Befehlsausführungseinheit 10 behält jedoch
vorzugsweise mindestens einen weiteren Stapel zum Speichern von
Rücksprungadressen
und für
den Rücksprung
von Unterbrechungsinformationen, zum Einsatz in den Befehlen JSR
(jump to subroutine), RT (return from subroutine), RTI (return from
interrupt) usw.
-
Befehle mit indirekten A-Stapel-Verweisen, d.
h. Befehle, in denen eine auf dem A-Stapel gespeicherte Adresse
dazu verwendet wird, einen Speicherplatz zu adressieren, werden
nur bei Lade- und Speicheroperationen in einem Befehlsvorrat verwendet
und nicht beispielsweise bei arithmetischen oder logischen Operationen.
Dadurch ist es möglich,
zwei Stapel mit einem hocheffizienten RISC-ähnlichen Schaltungsaufbau zu
kombinieren, der in der Lage ist, einen Befehl pro Taktzyklus auszuführen.
-
Der Befehlsvorrat aus den 2a, b umfasst einige spezielle
Befehle, beispielsweise RET mit zwei Bits für Parameter, der einen Rücksprung
von einem Unterprogramm kombiniert mit optionalen Pop-Operationen
vom A- und D-Stapel bewirkt, wie sie in den beiden Bits codiert
sind. Si ist ein Software-Unterbrechungsbefehl und Tr ist ein Trap-Befehl.
-
In der Praxis ist die vereinfachte
Datenverarbeitungsvorrichtung aus 1 langsam,
da sie für
jeden Verweis auf den A-Stapel und den D-Stapel auf den Speicher 10 zugreifen
muss. Ohne von der Erfindung abzuweichen, kann dies verbessert werden,
indem Informationen, die in den Stapeln vorliegen, in einen Cachespeicher
kopiert werden. Hierzu können ein
Universal-Cachespeicher oder spezielle Cachespeicher für jeden
Stapel verwendet werden. Es können
optimal geeignete Stapelverwaltungsverfahren eingesetzt werden,
da bekannt ist, dass nur diejenigen Stapelplätze sofort benötigt werden
können,
auf die explizit in den Befehlen verwiesen wird, und dass auf den
Stapel sonst im Allgemeinen nur sequentiell zugegriffen wird. Die
Konsistenz zwischen dem Cachespeicher und dem Speicher braucht nicht
strikt aufrecht erhalten zu werden, wenn zwingend vorgeschrieben
ist, dass Progammierer davon absehen, auf Speicherplätze auf
dem Stapel auf andere Weise als über
den Stapelmechanismus zuzugeifen.
-
3 zeigt
eine Vorrichtung zur Datenverarbeitung mit speziellen Stapel-Cachespeichern. Die Vorrichtung
umfasst eine Befehlsausführungseinheit 30 und
einen Speicher 32, die durch einen Adressenbus 34a und
einen Datenbus 34b miteinander verbunden sind. Die Vorrichtung
umfasst eine erste und eine zweite Stapelsteuerungseinheit 36, 38.
Die erste Stapelsteuerungseinheit 36 umfasst eine Registerdatei 360 mit
Registern, die goß genug
sind, um jeweils eine Basisstapeleinheit zu speichern, eine Registerverwaltungseinheit 362,
eine Stapelzeigereinheit 364 und eine Schnittstelleneinheit 366.
Die Registerverwaltungseinheit 362 verfügt über einen Registerauswahleingang,
der mit der Befehlsausführungseinheit 30 verbunden
ist, und über
einen Registerauswahlausgang, der mit der Registerdatei 360 verbunden ist.
Die Registerdatei ist mit einem Doppelport ausgerüstet, und
ihre Zugriffsports sind mit der Befehlsausführungseinheit 30 und
der Schnittstelleneinheit 366 verbunden. Die Stapelzeigereinheit 364 verfügt über einen
Steuereingang, der mit der Registerverwaltungseinheit 362 verbunden
ist, einen Schreibeingang, der mit der Befehlsausführungseinheit 30 verbunden
ist, und einen Ausgang, der mit der Befehlsausführungseinheit 30 und
der Schnittstelleneinheit 366 verbunden ist. Es existiert
eine Steuerverbindung zwischen der Registerverwaltungseinheit 362 und
der Schnittstelleneinheit 366. Die Schnittstellenverwaltungseinheit 366 ist
ferner mit dem Adressenbus 34a und dem Datenbus 34b verbunden.
-
Während
des Betriebs speichern die Register in der Registerdatei 360 entsprechende
Informationseinheiten, die auf dem oberen Teil eines der Stapel,
beispielsweise dem A-Stapel, gespeichert werden. Die Registerverwaltungseinheit 362 verfolgt eine Übereinstimmung
zwischen entsprechenden Positionen auf dem Stapel und Registern
in der Registerdatei 360. Diese Übereinstimmung kann wahlweise
angepasst werden, oder es kann beispielsweise eine zyklische Beziehung
verwendet werden. Wenn ein Befehl auf eine Position an der Spitze
des Stapels verweist, gibt die Befehlsausführungseinheit 30 den
Verweis zu der Registerverwaltungseinheit 362 aus, die
als Reaktion ein Register in der Registerdatei 360 auswählt, das
diesem Verweis entspricht. Danach wird dieses Register mit der Befehlsausführungseinheit 30 zum
Lesen oder Schreiben einer Basiseinheit mit Informationen verbunden.
-
In Prinzip hält die Registerverwaltungseinheit 362 ein
Register in der Registerdatei 360 zum Empfangen hinzugefügter Informationen
in Bereitschaft. Wenn ein Befehl eine Push-Operation auf den Stapel
verlangt, wählt
die Registerverwaltungseinheit 362 dieses Register so aus,
dass die Befehlsausführungseinheit 30 eine
Basiseinheit mit Informationen in diesem Register speichert. Die
Registerverwaltungseinheit 362 befiehlt der Stapelzeigereinheit,
den Wert des Stapelzeigers um die Länge einer Basiseinheit mit
Informationen zu erhöhen.
Die Registerverwaltungseinheit 362 aktualisiert die Übereinstimmung
zwischen den Registern und der Position auf dem Stapel, so dass
dieses Register der Stapelspitze entspricht und die übrigen Register
jeweils einer Position weiter entfernt von der Stapelspitze als
vor der Push-Operation entsprechen.
-
Danach befiehlt die Registerverwaltungseinheit 362 der
Schnittstelleneinheit 366, die Basiseinheit mit Informationen,
die am weitesten von der Stapelspitze entfernt ist, von der Registerdatei 360 zu dem
Speicher 32 an den Platz zu übertragen, der ihrer Position
auf dem Stapel entspricht; dies kann von der Schnittstelleneinheit 366 berechnet
werden, indem eine vorher festgelegte Anzahl von Basislängen von
dem Wert des Stapelzeigers subtrahiert wird. Auf diese Weise wird
das Register in der Registerdatei 360, das die Basiseinheit
mit Informationen von der Registerdatei 360 enthielt, die
am weitesten entfernt vom der Stapelspitze ist, verfügbar als
Register, das für
das Empfangen der nächsten
hinzugefügten
Informationen in Bereitschaft gehalten wird.
-
Somit stehen Informationen, die in
Bezug auf die Stapelspitze ausgewählt wurden, der Befehlsausführungseinheit
immer ohne die Verzögerung,
die für die
Speicherung im Speicher 32 erforderlich ist, zur Verfügung.
-
Verlangt ein Befehl eine Pop-Operation
vom Stapel, wählt
die Registerverwaltungseinheit 362 das Register in der
Registerdatei 360 aus, das der Stapelspitze entspricht,
so dass die Befehlsausführungseinheit
dieses Register lesen kann. Die Registerverwaltungseinheit 362 befiehlt
der Stapelzeigereinheit 364, den Stapelzeiger um die Länge einer Basiseinheit
zu verringern. Die Registerverwaltungseinheit 362 aktualisiert
die Übereinstimmung
zwischen den Registern und Positionen auf dem Stapel, so dass dieses
Register der Stapelspitze entspricht, und die übrigen Register jeweils einer
Position entsprechen, die vor der Pop-Operation um eins näher an der
Stapelspitze liegt. Außerdem
befiehlt die Registerverwaltungseinheit 362 der Schnittstelleneinheit 366,
die höchste
Basiseinheit mit Informationen vom Speicher 32 abzurufen,
die sich nicht in der Registerdatei 360 befindet. Die Schnittstelleneinheit 366 kann
die Adresse dieser Basiseinheit durch Subtraktion einer vorher festgelegten
Anzahl von Basislängen
von dem Wert des Stapelzeigers berechnen. Diese Basiseinheit wird
in dem Register gespeichert, das in Bereitschaft gehalten wurde, um
die nächsten hinzugefügten Informationen
zu empfangen, und das Register, das sich an der Stapelspitze befand,
wird zu dem Register, das in Bereitschaft gehalten wird, um die
nächsten
hinzugefügten
Informationen zu empfangen. Wenn der Pop-Operation eine Push-Operation vorausging,
ohne dass inzwischen ausgelesen wurde, ist der Speicherabruf natürlich nicht
erforderlich und kann wegfallen, da sich die entsprechenden Informationen
bereits in dem Register befinden, das in Bereitschaft gehalten wurde.
-
Somit stehen Informationen, die in
Bezug auf die Stapelspitze ausgewählt werden, der Befehlsausführungseinheit 30 immer
ohne die für
den Abruf aus dem Speicher 32 erforderliche Verzögerung zur
Verfügung.
-
Auf diese Weise braucht die Anzahl
der Register in der Registerdatei 360 nur Eins plus die
Anzahl der Positionen in Bezug auf die Stapelspitze zu sein, auf
die explizit verwiesen werden kann. Es können jedoch, ohne von der Erfindung
abzuweichen, mehr Register verwendet werden. Wenn mehr Register
verwendet werden, kann die Registerverwaltungseinheit 362 den
Befehl zur Durchführung
von Schreiboperationen in den Speicher 32 nach Push-Befehlen
so lange aufschieben, wie freie Register zur Verfügung stehen.
Dadurch kann vermieden werden, dass viele Schreiboperationen erforderlich
sind, wenn aus der Stapelspitze gelesen wird, bevor keine freien
Register mehr vorhanden sind.
-
Die Stapelzeigereinheit 364 und
die Registerverwaltungseinheit 362 können auch die maximalen und
minimalen Stapelzeigerwerte verfolgen um zu vermeiden, dass Schreib-,
Lese-, Push- oder Pop-Operationen außerhalb dieser Maxima und Minima
auftreten, und, falls erforderlich, eine Unterbrechung der normalen
Befehlsausführung
erzeugen, wenn dies eintritt. Falls die Stapel in entgegengesetzten
Richtungen in demselben Speicherbereich aufeinander zu wachsen,
kann dies durch einen Test ersetzt werden, dass die beiden Stapel
nicht kollidieren.
-
Falls die Länge der Basiseinheit größer als die
Breite des Busses ist, verwendet die Schnittstelleneinheit 366 mehr
als einen Buszyklus, um eine Basiseinheit gestapelter Informationen
zu übertragen. Falls
die Länge
L der Basiseinheit kein ganzzahliges Vielfaches der Breite W des
Busses ist, kann ein Überschuss
von R Bits der Basiseinheit (L = N*W + R, N ganzzahlig, 0 < R < W, z. B. W = 16,
L = 24 und R = 8) vorliegen. In diesem Fall kann die Schnittstelleneinheit 366 beim
Schreiben in den Speicher davon absehen, den Überschuss von R Bits einer
speziellen Speichereinheit zu schreiben und sie zurückhalten, um
sie später
kombiniert mit der nächsten
Basiseinheit zu schreibender Stapelinformationen zu schreiben oder
sie mit dem Rest der speziellen Basiseinheit wieder zu verknüpfen, wenn
sie wieder vom Speicher 32 abgerufen wird. In der gleichen
Weise kann die Schnittstelleneinheit 366 beim Abrufen vom
Speicher 32 die W-R-Bits zurückhalten, die mit den überschüssigen Bits
abgerufen werden müssen,
um sie bei einem Abruf der nächsten
Basiseinheit zu verwenden, so dass auf Worte im Speicher 32,
die Informationen von mehr als einer Basiseinheit speichern, nicht zweimal
so oft zugegriffen werden muss wie auf Worte, die Informationen
von nur einer Basiseinheit speichern. Alternativ kann die Schnittstelleneinheit 366 mehr
als eine (M) Basiseinheiten auf einmal abrufen oder schreiben, so
dass sie zusammen eine ganzzahlige Anzahl von Busbreiten (M*L =
N*W) ergeben.
-
Die Vorrichtung kann noch effizienter
sein, wenn eine Architektur mit verschiedenen Speichern für jeden
Stapel bzw. mit unterschiedlichen, an die Länge der Basiseinheiten des
speziellen Stapels angepassten Busbreiten eingesetzt wird. Der Programmierer
der Vorrichtung braucht dieses jedoch nicht zu wissen, da in diesem
Fall der Befehlsvorrat nicht zu verändert werden braucht. Programme
für eine
Architektur können
einfach auf die andere Architektur portiert werden.
-
Die zweite Stapelsteuerungseinheit 38 funktioniert
analog zu der ersten Stapelsteuerungseinheit 36, mit der
Ausnahme, dass sie Basiseinheiten mit einer anderen Länge nutzt.
Alternativ kann die Stapelsteuerungseinheit aus 1 eingesetzt werden.
-
Die Vorrichtung kann einen zusätzlichen Adressiermodus
bieten, der Blöcke
aus den Speichern 12, 32 verwendet, die durch
Versätze
zu einer Adresse adressiert werden können, die von einem Teil des
Programmzählers
mit der höchsten
Wertigkeit (z. B. im Fall eines 24-Bit-Programmzählers nur die 15 Bits mit der
höchsten
Wertigkeit) abgeleitet werden kann. Ein Befehl, der diesen Adressiermodus nutzt,
enthält
beispielsweise einen Versatz von N Bits. Die Befehlsausführungseinheit
interpretiert diesen Befehl als Verweis auf einen Speicherplatz
mit einer Adresse, die die N Bits des Versatzes als Bits mit der
niedrigsten Wertigkeit und die M-N Bits mit der höchsten Wertigkeit
des Programmzählers
(der selbst M Bits enthält)
als Bits mit der höchsten
Wertigkeit aufweist. Auf die gemeinsamen Daten für eine Anzahl von Befehlen
an benachbarten Platzen kann somit mit einer relativ geringen Befehlslänge verwiesen
werden, die für
den Versatz verwendet wird, und nach einem Sprung zum Unterprogrammbefehl
können
die gemeinsamen Daten ohne jeglichen Aufwand erneut definiert werden.
-
In einigen Fallen ist es wünschenswert,
Datenelementen einen Typcode zuzuordnen, beispielsweise anzugeben,
ob das Datenelement ein einzelnes 16-Bit-Wort oder Teil eines 32-Bit-Wortes
ist (wobei der Rest des Wortes an einem logisch benachbarten Speicherplatz
oder in einem logisch benachbarten Register gespeichert wird). Bei
einem anderen Beispiel kann der Typcode angeben, ob das Datenelement
eine Gleitkommavariable, eine Festkommavariable oder eine ganzzahlige
Variable ist. Wenn einem Datenelement ein Typcode zugeordnet ist, kann
die Befehlsausführungseinheit
eine Laufzeitauswahl einer Operationsart durchführen, die für den Typcode eines Datenelements
geeignet ist, wenn auf ein Datenelement als Operand verwiesen wird.
Dies bedeutet, dass explizite Befehlsversionen für verschiedene Typen nicht
erforderlich sind. Infolgedessen sind weniger Befehlsversionen erforderlich,
um zwischen Operationen zu unterscheiden. Dies bietet den Vorteil,
dass kürzere
Maschinenbefehlcodes verwendet werden können, um zwischen Operationen zu
unterscheiden und somit der für
Befehle erforderliche Speicherplatz verringert wird.
-
Um die Verwendung von Datenelementen mit
Typcodes zu implementieren, würde
die Befehlsausführungseinheit
eine Schaltung zum Erfassen des Typs der eingehenden Operanden und
ein umschaltbares Rechenwerk umfassen, das durch die Schaltung zur
Typerfassung gesteuert wird, um die Ausführung der für den erfassten Typ geeigneten
logischen Rechenoperation auszuwählen.
Ferner würde
die Befehlsausführungseinheit
Befehle enthalten, um Datenelemente von einem Typ in einen anderen umzuwandeln.
-
Wird eine derartige Befehlsausführungseinheit
eingesetzt, die Operanden (insbesondere D-Operanden) Typen zuordnet,
sollten die Inkremente und Dekremente des Stapelzeigers gesteuert
von dem Typcode der Basiseinheit an der Stapelspitze einstellbar
sein. Wenn beispielsweise der Typcode des Elements an der Stapelspitze
ein 16-Bit-Wort anzeigt, verringert die Stapelsteuerungseinheit
im Falle einer Pop-Operation den Stapelzeiger um 2 Byte-Adressen
(oder um eine Wortadresse), und wenn der Typcode des Elements an
der Stapelspitze ein 32-Bit-Wort anzeigt, verringert die Stapelsteuerungseinheit
im Falle einer Pop-Operation den Stapelzeiger um 4 Byte-Adressen
(oder um zwei Wortadressen). In gleicher Weise untersucht die Befehlsausführungseinheit
im Falle einer Push-Operation den Typcode des hinzugefügten Datenelements
und bewirkt, dass die Stapelsteuerungseinheit entsprechend des Typcodes
um 2 oder um 4 Byte-Adressen erhöht,
und 16 Bits oder 32 Bits werden auf dem Stapel gespeichert.
-
In diesem Fall sollte ein Typcode
für jedes gestapelte
Element gespeichert werden. Dies kann beispielsweise durchgeführt werden,
indem ein zusätzlicher
Stapel mit Typcodes gespeichert wird, der automatisch ausgelesen
oder zu dem automatisch hinzugefügt
wird, wenn der entsprechende Stapel ausgelesen oder zu ihm hinzugefügt wird.
-
Die in den Figuren dargestellte Vorrichtung kann
als ein einzelner IC-Chip ausgeführt
werden. Hierbei ist die Erfindung besonders vorteilhaft, da sie den
für ein
typisches Programm erforderlichen Speicherplatz und somit die Chipfläche reduziert.
Der Speicher kann jedoch auch zumindest teilweise außerhalb
des Chips liegen. Die erfindungsgemäße Vorrichtung kann jedoch
ebenso aus mehreren kombinierten IC-Chips mit oder ohne den Speicher
bestehen.
-
Text in der
Zeichnung
-
2a
-
- instruction
- Befehl
- data
format
- Datenformat
- opc
- Operationscode
- op
- Operand
- nibble
- Nibble