-
GEBIET DER
ERFINDUNG
-
Die
vorliegende Erfindung bezieht sich auf Prozessoren und auf das Management
eines Stapels zum Übergeben
von Variablen während
der Ausführung
von Befehlen in diesen Prozessoren.
-
HINTERGRUND
DER ERFINDUNG
-
Mikroprozessoren
sind Universalprozessoren, die hohe Befehlsdurchsätze erfordern,
um die darauf laufende Software auszuführen, und können je nach den besonderen
betroffenen Software-Anwendungen einen weiten Bereich von Verarbeitungsanforderungen
aufweisen. Es ist bekannt, einen Stapel bereitzustellen, der dazu
verwendet werden kann, Variablen von einer Software-Routine zu einer
anderen zu übergeben.
Außerdem
werden Stapel dazu verwendet, die Inhalte des Programmzählers zu
halten, wenn eine erste Software-Routine eine zweite Software-Routine
aufruft, so dass der Programmablauf nach Abschluss der aufgerufenen
zweiten Routine zu der ersten Software-Routine zurückkehren
kann. Ein Aufruf in der zweiten Software-Routine kann eine dritte
Routine aufrufen usw.
-
Es
sind viele verschiedene Arten von Prozessoren bekannt, von denen
Mikroprozessoren nur ein Beispiel sind. Zum Beispiel werden insbesondere
für spezifische
Anwendungen wie etwa Mobilverarbeitungsanwendungen umfassend digitale
Signalprozessoren (DSPs) verwendet. DSPs sind typisch so konfiguriert,
dass sie die Leistungsfähigkeit
der betroffenen Anwendungen optimieren, wobei sie spezielle Ausführungseinheiten und
Befehlssätze
nutzen, um dies zu erreichen. Insbesondere, aber nicht ausschließlich, in
Anwendungen wie etwa Mobiltelekommunikationsanwendungen ist es erwünscht, eine
ständig
wachsende DSP-Leistungsfähigkeit
bereitzustellen, während
der Leistungsverbrauch so niedrig wie möglich gehalten wird.
-
Eine
Art der Bereitstellung einer verbesserten Leistungsfähigkeit
ist die Bereitstellung eines größeren Befehlsspeichers
und das Erhöhen
der Länge
des Pro grammzählers,
so dass der größere Befehlsspeicher
direkt adressiert werden kann. Allerdings kann dies zu einer Programminkompatibilität zwischen
verschiedenen Generationen von Mikroprozessoren führen.
-
Das
Patent der Vereinigten Staaten Nummer 5.430.864 beschreibt ein System,
das ermöglicht,
dass ein Computersystem Daten von Programmen, die so beschaffen
sind, dass sie in Übereinstimmung
mit einer ersten Wortgröße arbeiten,
sowie von Programmen, die so beschaffen sind, dass sie in Übereinstimmung
mit einer zweiten Wortgröße arbeiten,
von Registerdateien im Speicher speichert und aus dem Speicher zurück in die
Registerdateien wieder herstellt. Dies wird ohne Zunahme an Hardware
und ohne, dass eine Änderung
der vorhandenen Software erforderlich ist, erreicht. Insbesondere
wird auf der Prozedurebene eine Angabe genutzt, die bestimmt, ob
eine besondere Prozedur Wörter
mit einer ersten oder mit einer zweiten Wortgröße verwendet. Vorzugsweise
wird diese Angabe in einer ersten vorgegebenen Bitposition in dem
Stapelzeiger der Prozedur angeordnet. Wenn ein Sichern stattfindet,
werden bestimmte Inhalte aus der Registerdatei zusammen mit dem
Stapelzeiger im Speicher gesichert. Unter bestimmten Umständen wird
die Wortgrößenangabe zu
einer zweiten vorgegebenen Bitposition in dem Stapelzeiger verschoben,
die in einer vorbestimmten Stapelzeigeradresse in dem sicheren Gebiet
gespeichert wird. Wenn die Inhalte aus dem Speicher zurück in die Registerdatei
wieder hergestellt werden, wird die Angabe in der Stapelzeigeradresse überprüft, wobei
sie dazu dient, die Wortgröße der Prozedur
zu bestimmen, die wieder hergestellt wird.
-
Das
Patent der Vereinigten Staaten Nummer 5.023.777 beschreibt eine
Informationsverarbeitungsvorrichtung mit einer Adressenerweiterungsfunktion,
die eine Menge von Adressenaddierern zum Ausführen einer Adressenaddition
in Bezug auf einen ersten Teil einer Adresse für einen Befehl und/oder für Daten,
wobei der Teil dem nicht erweiterten Bitabschnitt der Adresse entspricht,
und eine Menge von Domänenregistern
zum Speichern als zweiten Teil der Adresse für einen Befehl oder für einen
Operanden, wobei der Teil dem erweiterten Bitabschnitt der Adresse
entspricht, enthält.
Falls die Adressenerweiterung nicht vorge nommen wird, wird unter
Verwendung einer virtuellen Adresse, die durch eine Additionsoperation
durch den Adressenaddierer und in Übereinstimmung mit einem herkömmlichen
nicht adressenerweiterten Programm erhalten wird, eine Adressenübersetzung
in eine echte Adresse ausgeführt.
Falls die Adressenerweiterung vorgenommen wird, wird die Adressenübersetzung
in eine echte Adresse unter Verwendung einer virtuellen Adresse
ausgeführt,
die durch Verketten des Additionsergebnisses mit dem Inhalt des
Domänenregisters
durch den Adressenaddierer erhalten wird.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Besondere
und bevorzugte Aspekte der Erfindung sind in den beigefügten unabhängigen und
abhängigen
Ansprüchen
dargelegt.
-
Die
vorliegende Erfindung ist auf die Verbesserung der Leistungsfähigkeit
von Prozessoren wie etwa z. B., aber nicht ausschließlich, digitalen
Signalprozessoren gerichtet.
-
In Übereinstimmung
mit einem ersten Aspekt der Erfindung wird ein Prozessor geschaffen,
der ein programmierbarer digitaler Signalprozessor (DSP) ist, der
sowohl eine hohe Codedichte als auch eine leichte Programmierung
bietet. Die Architektur und der Befehlssatz sind für niedrigen
Leistungsverbrauch und für
die hocheffiziente Ausführung
von DSP-Algorithmen wie etwa für
drahtlose Telephone sowie von reinen Steueraufgaben optimiert. Der
Prozessor enthält
eine Befehlspuffereinheit und eine Datenberechnungseinheit zum Ausführen der
durch die Befehlspuffereinheit decodierten Befehle. Ein Programmzähler, der
einen unteren Programmzählerabschnitt
und einen oberen Programmzählerabschnitt
aufweist, stellt eine Befehlsadresse bereit, die für den Befehlsspeicher
bereitgestellt wird. Ein erster Stapelzeiger ist so betreibbar,
dass er in Reaktion auf einen Befehl, z. B. einen CALL-Befehl, der
durch den Mikroprozessor ausgeführt
wird, einen ersten Stapelbereich in einem Datenspeicher adressiert,
um einen unteren Programmzählerwert
zu sichern. Ein zweiter Stapelzeiger ist so betreibbar, dass er
in Reaktion auf die Ausführung
des CALL-Befehls einen zweiten Stapelbereich in dem Datenspeicher
adressiert, um einen oberen Programmzählerwert zu sichern. Dies erhält vorteilhaft
die Software-Code-Kompatibilität
von einem Mikroprozessor einer früheren Generation, der Variable über einen
Stapel übergibt.
-
In Übereinstimmung
mit einem weiteren Aspekt der vorliegenden Erfindung ist die Datenberechnungseinheit
so betreibbar, dass sie in Reaktion auf die Ausführung eines weiteren Befehls
wie etwa z. B. eines PUSH-Befehls einen ersten variablen Wert in
dem ersten Stapelbereich in der Nähe des unteren Programmzählerwerts
unter Verwendung einer Adresse relativ zu dem ersten Stapelzeiger
in Relation zu dem ersten Stapelzeiger speichert. Vorteilhaft wird
die Adresse relativ zu dem Stapelzeiger durch den oberen Programmzählerwert,
der in dem zweiten Stapelbereich gespeichert ist, nicht beeinflusst.
-
In Übereinstimmung
mit einem weiteren Aspekt der vorliegenden Erfindung wird ein Verfahren
zum Betreiben eines digitalen Systems geschaffen. In einem verbesserten
Prozessorkern werden mehrere Befehle ausgeführt, wobei die Befehle in Reaktion
auf einen Programmzähler
von einem dem Prozessorkern zugeordneten Befehlsspeicher geholt
werden. Es wird ein erster Stapelbereich zum Halten einer Mehrzahl
von Datenwerten in einem dem Prozessorkern zugeordneten Datenspeicher
durch Halten eines ersten Stapelzeigers gebildet. In dem Datenspeicher
wird getrennt von dem ersten Stapelbereich ein zweiter Stapelbereich
gebildet, um eine zweite Mehrzahl von Datenwerten durch Halten eines
zweiten Stapelzeigers zu speichern. In Reaktion auf einen Befehl
wie etwa einen CALL, der in dem Prozessorkern ausgeführt wird,
wird ein unterer Programmzählerwert
in dem ersten Stapelbereich gespeichert. In Reaktion auf die Ausführung des
CALL-Befehls wird ein erster oberer Programmzählerwert in dem zweiten Stapelbereich
gespeichert. Daraufhin wird in dem ersten Stapelbereich in der Nähe des ersten
unteren Programmzählerwerts
unter Verwendung einer Adresse relativ zu dem Stapelzeiger in Relation
zu dem ersten Stapelzeiger in Reaktion auf die Ausführung eines
Befehls wie etwa z. B. eines PUSH-Befehls ein erster Argumentwert
gespeichert. Vorteilhaft wird die Adresse relativ zu dem Stapelzeiger
durch den oberen Programmzählerwert,
der in dem zweiten Stapelbereich gespei chert ist, nicht beeinflusst,
so dass Software-Code von einem Mikroprozessor einer früheren Generation
leicht auf den verbesserten Mikroprozessor portiert werden kann.
-
Ein
weiterer Aspekt der vorliegenden Erfindung ist, dass ein Kontextdatenwert
in der Nähe
des oberen Programmzählerwerts
unter Verwendung einer Adresse relativ zu dem Stapelzeiger in Relation
zu dem zweiten Stapelzeiger in Reaktion auf die Ausführung des
PUSH-Befehls gespeichert werden kann. Vorteilhaft wird die Adressierung
relativ zu dem Stapelzeiger in dem ersten Stapelgebiet durch den
Kontextdatenwert, der in den zweiten Stapelbereich gespeichert ist,
nicht beeinflusst. Somit kann die Software-Code-Kompatibilität erhalten
werden, während
zusätzliche
Kontextinformationen für
zusätzliche
Funktionalität
gesichert werden.
-
KURZBESCHREIBUNG
DER ZEICHNUNG
-
Es
werden nun besondere Ausführungsformen
in Übereinstimmung
mit der Erfindung lediglich beispielhaft und mit Bezug auf die beigefügte Zeichnung
beschrieben, in der zur Bezeichnung gleicher Teile gleiche Bezugszeichen
verwendet sind und in der sich die Figuren, soweit nichts anderes
angegeben ist, auf den Prozessor aus 1 beziehen
und in der:
-
1 ein
schematischer Blockschaltplan eines Prozessors in Übereinstimmung
mit einer Ausführungsform
der Erfindung ist;
-
2 ein
schematisches Diagramm eines Kerns des Prozessors aus 1 ist;
-
3 ein
ausführlicherer
schematischer Blockschaltplan verschiedener Ausführungseinheiten des Kerns des
Prozessors ist;
-
4 ein
schematisches Diagramm einer Befehlspuffer-Warteschlange und eines
Befehlsdecodierers des Prozessors ist;
-
5 eine
schematische Darstellung des Kerns des Prozessors zur Erläuterung
des Betriebs der Pipeline des Prozessors ist;
-
6 ein
Blockschaltplan des Prozessors ist, der einen mit einer Speichermanagementeinheit
verbundenen Speicher veranschaulicht;
-
7 die
vereinheitliche Struktur von Programm- und Datenspeicherräumen des
Prozessors zeigt;
-
8A eine
schematische Darstellung eines Stapelbereichs ist, der in einem
Mikroprozessor einer früheren
Generation verwendet wird;
-
8B eine
schematische Darstellung eines Beispiels eines Stapelbereichs zum
Speichern eines erweiterten Programmzählers ist;
-
9 eine
schematische Darstellung von Dualstapelgebieten zum Speichern eines
erweiterten Programmzählers
gemäß Aspekten
der vorliegenden Erfindung ist;
-
10 eine
schematische Darstellung eines Anwenderstapelbereichs und eines
Systemstapelbereichs für
den Mikroprozessor aus 1 gemäß Aspekten der vorliegenden
Erfindung ist;
-
11 ein
Blockschaltplan ist, der die Adressenerzeugung in dem Mikroprozessor
veranschaulicht;
-
12 ein
ausführlicherer
Blockschaltplan von Abschnitten der Adressenerzeugungsschaltungsanordnung
aus 11 ist;
-
13 ein
Blockschaltplan ist, der eine Schaltungsanordnung zum Bereitstellen
des Stapelzeigers und des Systemstapelzeigers gleichzeitig für zwei Datenbusse
für Duallese-
oder Dualschreibtransaktionen veranschaulicht;
-
14 ein
Zeitablaufplan ist, der Einzellese- und Einzelschreibtransaktionen
und Duallese- oder Dualschreibtransaktionen in dem Mikroprozessor
veranschaulicht;
-
15 eine
Tabelle ist, die Kontextdaten veranschaulicht, die in dem Systemstapel
gespeichert sind;
-
16 eine
schematische Darstellung einer integrierten Schaltung ist, die den
Prozessor enthält;
und
-
17 eine
schematische Darstellung einer Telekommunikationsvorrichtung ist,
die den Prozessor aus 1 enthält.
-
BESCHREIBUNG
DER BEVORZUGTEN AUSFÜHRUNGSFORMEN
-
Obgleich
die Erfindung besondere Anwendung auf digitale Signalprozessoren
(DSPs) findet, die z. B. in einer anwendungsspezifischen integrierten
Schaltung (ASIC) realisiert sind, findet sie ebenfalls Anwendung auf
andere Formen von Prozessoren.
-
Es
wird nun die Grundarchitektur eines Beispiels eines Prozessors gemäß der Erfindung
beschrieben. Der Prozessor 100 ist ein programmierbarer
Festkomma-DSP-Kern
mit variabler Befehlslänge
(8 Bits bis 48 Bits), der sowohl hohe Codedichte als auch leichte
Programmierung bietet. Die Architektur und der Befehlssatz sind
für niedrigen
Leistungsverbrauch und hocheffiziente Ausführung von DSP-Algorithmen sowie
von reinen Steueraufgaben wie etwa z. B. für drahtlose Telephone optimiert.
Der Prozessor 100 enthält
Emulationseinrichtungen und Code-Austesteinrichtungen.
-
1 ist
eine schematische Übersicht
eines digitalen Systems 10 in Übereinstimmung mit einer Ausführungsform
der vorliegenden Erfindung. Das digitale System enthält einen
Prozessor 100 und eine Prozessorrückwandleiterplatte 20.
In einem besonderen Beispiel der Erfindung ist das digitale System
ein digitales Signalprozessorsystem 10, das in einer anwendungsspezifischen
integrierten Schaltung (ASIC) realisiert ist. Im Interesse der Klarheit
zeigt 1 nur jene Abschnitte des Mikroprozessors 100,
die für
ein Verständnis
einer Ausführungsform
der vorliegenden Erfindung relevant sind. Einzelheiten der allgemeinen
Konstruktion für DSPs
sind gut bekannt und leicht anderswo zu finden. Zum Beispiel beschreibt
das US-Patent 5.072.418, erteilt an Frederick Boutaud u. a., ausführlich einen
DSP. Das US-Patent 5.329.471, erteilt an Gary Swoboda u. a., beschreibt ausführlich,
wie ein DSP zu testen und zu emulieren ist. Einzelheiten der für eine Ausführungsform
der vorliegenden Erfindung relevanten Abschnitte des Mikroprozessors 100 werden
im Folgenden ausreichend ausführlich
erläutert,
um zu ermöglichen,
dass der Durchschnittsfachmann auf dem Gebiet der Mikroprozessoren
die Erfindung herstellen und verwenden kann.
-
Wie
in 1 gezeigt ist, bildet der Prozessor 100 eine
Zentraleinheit (CPU) mit einem Prozessorkern 102 und einer
Speicherschnittstelleneinheit 104 als Schnittstelle des
Prozessorkerns 102 mit den gegenüber dem Prozessorkern 102 externen
Speichereinheiten.
-
Die
Prozessorrückwandleiterplatte 20 umfasst
einen Rückwandleiterplattenbus 22,
mit dem die Speichermanagementeinheit 104 des Prozessors
verbunden ist. Außerdem
sind mit dem Rückwandleiterplattenbus 22 ein
Befehls-Cache-Speicher 24, Peripheriegeräte 26 und
eine externe Schnittstelle 28 verbunden.
-
Es
ist klar, dass die Erfindung in anderen Beispielen unter Verwendung
anderer Konfigurationen und/oder anderer Technologien realisiert
werden könnte.
Zum Beispiel könnte
der Prozessor 100 eine erste integrierte Schaltung bilden,
von der die Prozessorrückwandleiterplatte 20 getrennt
ist. Der Prozessor 100 könnte z. B. ein DSP sein, der
getrennt von einer Rückwandleiterplatte 20 ist,
die einen Rückwandleiterplattenbus 22,
Peripheriegeräte
und externe Schnittstellen trägt,
und auf ihr angebracht ist. Der Prozessor 100 könnte z.
B. eher als ein DSP ein Mikroprozessor sein und könnte in
anderen Technologien als der ASIC-Technologie realisiert sein. Der
Prozessor oder ein Prozessor, der den Prozessor enthält, könnte in
einer oder in mehreren integrierten Schaltungen realisiert sein.
-
2 veranschaulicht
die Grundstruktur einer Ausführungsform
des Prozessorkerns 102. Wie veranschaulicht ist, enthält diese
Ausführungsform
des Prozessorkerns 102 vier Elemente, d. h. eine Befehlspuffereinheit
(I-Einheit) 106 und drei Ausführungseinheiten. Die Ausführungseinheiten
sind eine Programmablaufeinheit (P-Einheit) 108, eine Adressendatenflusseinheit
(A-Einheit) 110 und eine Datenberechnungseinheit (D-Einheit) 112 zur
Ausführung
von von der Befehls puffereinheit (I-Einheit) 106 decodierten
Befehlen und zum Steuern und Überwachen
des Programmablaufs.
-
3 veranschaulicht
die P-Einheit 108, die A-Einheit 110 und die D-Einheit 112 des
Prozessorkerns 102 genauer und zeigt die Busstruktur, die
die verschiedenen Elemente des Prozessorkerns 102 verbindet. Die
P-Einheit 108 enthält
z. B. eine Schleifensteuerschaltungsanordnung, eine GoTo-/Verzweigungs-Steuerschaltungsanordnung
und verschiedene Register zum Steuern und Überwachen des Programmablaufs
wie etwa ein Wiederholungszählerregister
sowie Unterbrechungsmasken-, Merker- oder Vektorregister. Die P-Einheit 108 ist
mit Universaldatenschreibbussen (EB, FB) 130, 132,
mit Universaldatenlesebussen (CB, DB) 134, 136 und
mit einem Koeffizientenprogrammbus (BB) 138 gekoppelt.
Die P-Einheit 108 ist außerdem über verschiedene mit CSR, ACB
und RGD bezeichnete Busse mit Untereinheiten in der A-Einheit 110 und
in der D-Einheit 112 gekoppelt.
-
Wie
in 3 veranschaulicht ist, enthält die A-Einheit 110 in
der vorliegenden Ausführungsform
eine Registerdatei 30, eine Datenadressenerzeugungs-Untereinheit
(DAGEN) 32 und eine Arithmetik-Logik-Einheit (ALU) 34.
Die A-Einheits-Registerdatei 30 enthält verschiedene Register, darunter
16-Bit-Zeigerregister (AR0, ..., AR7) und 16-Bit-Datenregister (DR0,
..., DR3), die ebenfalls für
den Datenfluss sowie für
die Adressenerzeugung verwendet werden können. Außerdem enthält die Registerdatei 16-Bit-Ringpufferregister
und 7-Bit-Datenseitenregister. Mit der A-Einheits-Registerdatei 30 sind
die Universalbusse (EB, FB, CB, DB) 130, 132, 134, 136 sowie
ein Koeffizientendatenbus 140 und ein Koeffizientenadressenbus 142 gekoppelt.
Die A-Einheits-Registerdatei 30 ist durch einseitig gerichtete
Busse 144 bzw. 146, die in entgegengesetzten Richtungen
arbeiten, mit der A-Einheits-DAGEN-Einheit 32 gekoppelt.
Die DAGEN-Einheit 32 enthält 16-Bit-X/Y-Register und Koeffizienten-
und Stapelzeigerregister, um z. B. die Adressenerzeugung in dem
Prozessor 100 zu steuern und zu überwachen.
-
Außerdem umfasst
die A-Einheit 110 die ALU 34, die eine Schieberfunktion
sowie die einer ALU typisch zugeordneten Funktionen wie etwa Addition,
Sub traktion und die Logikoperatoren UND, ODER und XOR enthält. Die
ALU 34 ist ebenfalls mit den Universalbussen (EB, DB) 130, 136 und
mit einem Befehlskonstanten-Datenbus (KDB) 140 gekoppelt.
Die A-Einheits-ALU ist durch einen PDA-Bus mit der P-Einheit 108 gekoppelt,
um Registerinhalt von der P-Einheits-108-Registerdatei zu empfangen.
Außerdem
ist die ALU 34 durch Busse RGA und RGB, um Adressen- und
Datenregisterinhalte zu empfangen, und durch einen Bus RGD, um Adressen-
und Datenregister in die Registerdatei 30 weiterzuleiten,
mit der A-Einheits-Registerdatei 30 gekoppelt.
-
In Übereinstimmung
mit der veranschaulichten Ausführungsform
der Erfindung enthält
die D-Einheit 112 eine D-Einheits-Registerdatei 36,
eine D-Einheits-ALU 38,
eine D-Einheits-Schiebeeinrichtung 40 und zwei Multiplikations-
und Akkumulationseinheiten (MAC1, MAC2) 42 und 44.
Die D-Einheits-Registerdatei 36, die D-Einheits-ALU 38 und
die D-Einheits-Schiebeeinrichtung 40 sind mit Bussen (EB,
FB, CB, DB und KDB) 130, 132, 134, 136 und 140 gekoppelt
und die MAC-Einheiten 42 und 44 sind mit den Bussen
(CB, DB, KDB) 134, 136, 140 und mit einem
Datenlesebus (BB) 144 gekoppelt. Die D-Einheits-Registerdatei 36 enthält 40-Bit-Akkumulatoren
(AC0, ..., AC3) und ein 16-Bit-Übergangsregister.
Außer
den 40-Bit-Akkumulatoren kann die D-Einheit 112 ebenfalls
die 16-Bit-Zeiger-
und 16-Bit-Datenregister in der A-Einheit 110 als Quell-
oder Zielregister nutzen. Die D-Einheits-Registerdatei 36 empfängt über die
Akkumulatorschreibbusse (ACW0, ACW1) 146, 148 Daten
von der D-Einheits-ALU 38 und von den MACs 1 und 2 42, 44 und über den
Akkumulatorschreibbus (ACW1) 148 Daten von der D-Einheits-Schiebeeinrichtung 40.
Die Daten werden von den D-Einheits-Registerdateiakkumulatoren über Akkumulatorlesebusse
(ACR0, ACR1) 150, 152 in die D-Einheits-ALU 38,
in die D-Einheits-Schiebeeinrichtung 40 und in die MACs
1 und 2 42, 44 gelesen. Außerdem sind die D-Einheits-ALU 38 und
die D-Einheits-Schiebeeinrichtung 40 über verschiedene
mit EFC, DRB, DR2 und ACB bezeichnete Busse mit Untereinheiten der
A-Einheit 108 gekoppelt.
-
In 4 ist
nun eine Befehlspuffereinheit 106 in Übereinstimmung mit der vorliegenden
Ausführungsform
veranschaulicht, die eine 32-Wort-Befehlspuffer- Warteschlange (32-Wort-IBQ) 502 umfasst.
Die IBQ 502 umfasst 32 × 16-Bit-Register 504, die logisch in
8-Bit-Bytes 506 aufgeteilt sind. Die Befehle kommen über den 32-Bit-Programmbus
(32-Bit-PB) 122 bei der IBQ 502 an. Die Befehle
werden in einem 32-Bit-Zyklus an den Platz geholt, auf den der lokale
Schreibprogrammzähler
(LWPC) 532 zeigt. Der LWPC 532 ist in einem Register enthalten,
das sich in der P-Einheit 108 befindet. Außerdem enthält die P-Einheit 108 das
Register des lokalen Leseprogrammzählers (LRPC) 536 sowie
die Register des Schreibprogrammzählers (WPC) 530 und
des Leseprogrammzählers
(RPC) 534. Der LRPC 536 zeigt auf den Platz in
der IBQ 502 des nächsten
Befehls oder der nächsten
Befehle, der/die in den/die Befehlsdecodierer 512 und 514 zu
laden ist/sind. Das heißt,
der LRPC 534 zeigt auf den Ort in der IBQ 502 des
Befehls, der momentan an die Decodierer 512, 514 abgesendet
wird. Der WPC zeigt im Programmspeicher auf die Adresse des Starts
der nächsten
4 Bytes des Befehlscodes für die
Pipeline. Für
jeden Holvorgang in die IBQ werden unabhängig von Befehlsgrenzen die
nächsten
4 Bytes aus dem Programmspeicher geholt. Der RPC 534 zeigt
im Programmspeicher auf die Adresse des Befehls/der Befehle, der/die
momentan an den/die Decodierer 512/514 abgesendet
wird/werden.
-
In
dieser Ausführungsform
werden die Befehle zu einem 48-Bit-Wort gebildet und über einen 48-Bit-Bus 516 über Multiplexer 520 und 521 in
die Befehlsdecodierer 512, 514 geladen. Für den Durchschnittsfachmann
auf dem Gebiet ist klar, dass die Befehle zu Worten gebildet werden
können,
die eine andere Anzahl als 48 Bits umfassen, und dass die vorliegende
Erfindung nicht auf die spezifische oben beschriebene Ausführungsform
beschränkt
ist.
-
Für die derzeit
bevorzugte 48-Bit-Wortgröße kann
der Bus 516 während
irgendeines Befehlszyklus maximal 2 Befehle, einen pro Decodierer,
laden. Die Kombination der Befehle kann in irgendeiner Kombination der
Formate 8, 16, 24, 32, 40 und 48 Bits
sein, die über
den 48-Bit-Bus passen. Falls während
eines Zyklus nur ein Befehl geladen werden kann, wird der Decodierer 1, 512,
vor dem Decodierer 2, 514, geladen. Daraufhin
werden die jeweiligen Befehle zu den jeweiligen Funktionseinheiten
weitergeleitet, um sie auszuführen
und um auf die Daten zuzugreifen, für die der Befehl oder die Operation
ausgeführt
werden soll. Bevor die Befehle an die Befehlsdecodierer übergeben
werden, werden sie an den Byte-Grenzen ausgerichtet. Die Ausrichtung erfolgt
anhand des für
den voran gehenden Befehl während
dessen Decodierung abgeleiteten Formats. Die der Ausrichtung der
Befehle auf die Bytegrenzen zugeordnete Multiplexierung wird in
den Multiplexern 520 und 521 ausgeführt.
-
Der
Prozessorkern 102 führt
die Befehle durch eine 7-Stufen-Pipeline aus, deren jeweilige Stufen
nun anhand von Tabelle 1 und 5 beschrieben
werden. Die Prozessorbefehle werden unabhängig davon, wo die Ausführung stattfindet
(A-Einheit oder D-Einheit), durch eine 7-Stufen-Pipeline ausgeführt. Um
die Programmcodegröße zu verringern,
sendet ein C-Compiler gemäß einem
Aspekt der vorliegenden Erfindung so viele Befehle wie möglich für die Ausführung in
der A-Einheit ab, so dass die D-Einheit abgeschaltet werden kann,
um Leistung zu sparen. Dies erfordert, dass die A-Einheit die an
Speicheroperanden ausgeführten Grundoperationen
unterstützt.
-
Tabelle
1: Die Prozessorpipelinebeschreibung für einen Einzyklus-Befehl ohne
Speicherwartezustände.
-
Die
erste Stufe der Pipeline ist eine PRE-FETCH-Stufe (P0-Stufe) 202,
während
derer durch Aktivieren einer Adresse auf dem Adressenbus (PAB) 118 einer
Speicherschnittstelle 104 ein nächster Programmspeicherplatz
adressiert wird.
-
In
der nächsten
Stufe, der FETCH-Stufe (P1-Stufe) 204, wird der Programmspeicher
gelesen und die I-Einheit 106 über den PB-Bus 122 von
der Speicherschnittstelleneinheit 104 gefüllt.
-
Die
PRE-FETCH- und die FETCH-Stufe sind dadurch, dass die Pipeline,
z. B. für
einen Verzweigungsbefehl, während
der PRE-FETCH- und der FETCH-Stufe unterbrochen werden kann, um
den nachfolgenden Programmablauf zu unterbrechen und auf andere
Befehle in dem Programmspeicher zu zeigen, vom Rest der Pipelinestufen
getrennt.
-
Daraufhin
wird der nächste
Befehl in dem Befehlspuffer an den/die Decodierer 512/514 in
der dritten Stufe, DECODE (P2) 206, abgesendet, wobei der
Befehl decodiert und an die Ausführungseinheit
abgesendet wird, um diesen Befehl für die P-Einheit 108,
für die
A-Einheit 110 oder für
die D-Einheit 112 auszuführen. Die Decodierungsstufe 206 enthält die Decodierung
wenigstens eines Teils des Befehls, der einen ersten Teil, der die
Klasse des Befehls angibt, einen zweiten Teil, der das Format des
Befehls angibt, und einen dritten Teil, der eine Adressierungsbetriebsart
für den
Befehl angibt, enthält.
-
Die
nächste
Stufe ist eine ADDRESS-Stufe (P3-Stufe) 208, in der die
Adresse der in dem Befehl zu verwendenden Daten berechnet wird oder
in der eine neue Programmadresse berechnet wird, falls der Befehl eine
Programmverzweigung oder einen Programmsprung erfordert. Die jeweiligen
Berechnungen finden in der A-Einheit 110 bzw. in der P-Einheit 108 statt.
-
In
einer ACCESS-Stufe (P4-Stufe) 210 wird die Adresse eines
Leseoperanden erzeugt und daraufhin der Speicheroperand, dessen
Adresse in einem DAGEN-Y- Operator
mit einer indirekten Ymem-Adressierungsbetriebsart erzeugt worden
ist, aus dem indirekt adressierten Y-Speicher (Ymem) gelesen (READ).
-
Die
nächste
Stufe der Pipeline ist die READ-Stufe (P5-Stufe) 212, in
der ein Speicheroperand gelesen wird (READ), dessen Adresse in einem
DAGEN-X-Operator
mit einer indirekten Xmem-Adressierungsbetriebsart oder in einem
DAGEN-C-Operator mit Koeffizientenadressen-Betriebsart erzeugt worden
ist. Es wird die Adresse des Speicherplatzes erzeugt, in den das
Ergebnis des Befehls geschrieben werden soll.
-
Schließlich gibt
es eine Ausführungs-EXEC-Stufe
(P6-Stufe) 214, in der der Befehl entweder in der A-Einheit 110 oder
in der D-Einheit 112 ausgeführt wird. Das Ergebnis wird
daraufhin in einem Datenregister oder in einem Akkumulator gespeichert
oder für
Lese-/Änderungs-/Schreibbefehle
in den Speicher geschrieben. In den Akkumulatoren werden während der
EXEC-Stufe außerdem
Schiebeoperationen an den Daten ausgeführt.
-
Die
Pipeline des Prozessors 100 ist geschützt. Dies verbessert erheblich
die Leistungsfähigkeit
des C-Compilers, da keine NOP-Befehle eingefügt zu werden brauchen, um Latenzzeitanforderungen
zu erfüllen. Außerdem erleichtert
es wesentlich die Codeübersetzung
von einem Prozessor einer früheren
Generation zu einem Prozessor einer späteren Generation.
-
Eine
im Prozessor 100 verwendete Pipelineschutz-Grundregel ist
wie folgt: Falls ein Schreibzugriff vor dem andauernden Lesezugriff
begonnen, aber noch nicht abgeschlossen worden ist und falls beide
Zugriffe dasselbe Betriebsmittel gemeinsam nutzen, werden Zusatzzyklen
eingefügt,
um den Schreibabschluss zu ermöglichen
und mit den aktualisierten Operanden den nächsten Befehl auszuführen; allerdings
muss sich für die
Emulation eine Einschritt-Codeausführung genau wie eine frei laufende
Codeausführung
verhalten.
-
Anhand
von 5 wird nun das Grundprinzip des Betriebs für einen
Pipeline-Prozessor
beschrieben. Wie aus 5 zu sehen ist, finden für einen
ersten Befehl 302 die aufeinander folgenden Pipeline-Stufen über die
Zeitdauern T1-T7 statt.
-
Jede
Zeitdauer ist ein Taktzyklus für
den Prozessor-Maschinentakt. In der Zeitdauer 72 kann ein
zweiter Befehl 304 in die Pipeline eintreten, da sich der
voran gehende Befehl nun in die nächste Pipeline-Stufe bewegt
hat. Für
den Befehl 3, 306, findet die PRE-FETCH-Stufe
202 im Zeitraum T3 statt. Wie aus 5 zu sehen
ist, können
für eine
Sieben-Stufen-Pipeline insgesamt 7 Befehle gleichzeitig verarbeitet
werden. 5 zeigt sie für alle 7
Befehle 302–314 im
Zeitraum T7 in der Verarbeitung. Eine solche
Struktur fügt
eine Form von Parallelismus zu der Verarbeitung der Befehle hinzu.
-
Wie
in 6 gezeigt ist, enthält die vorliegende Ausführungsform
der Erfindung eine Speicherschnittstelleneinheit 104, die über einen
24-Bit-Adressenbus 118 und über einen doppelt gerichteten
32-Bit-Datenbus 120 mit einem externen Programmablagespeicher 150 gekoppelt
ist. Außerdem
ist die Speicherschnittstelleneinheit 104 über einen
24-Bit-Adressenbus 114 und über einen doppelt gerichteten
16-Bit-Datenbus 116 mit Datenspeichereinheiten 151 gekoppelt.
Außerdem
ist die Speicherschnittstelleneinheit 104 über einen 32-Bit-Programmlesebus
(32-Bit-PB) 122 mit der I-Einheit 106 des Maschinenprozessorkerns 102 gekoppelt. Die
P-Einheit 108, die A-Einheit 110 und die D-Einheit 112 sind über Datenlesebusse
und Datenschreibbusse und über
entsprechende Adressenbusse mit der Speicherschnittstelleneinheit 104 gekoppelt.
Ferner ist die P-Einheit 108 mit einem Programmadressenbus 128 gekoppelt.
-
Genauer
ist die P-Einheit 108 über
einen 24-Bit-Programmadressenbus 128, über die zwei 16-Bit-Datenschreibbusse
(EB, FB) 130, 132 und über die zwei 16-Bit-Datenlesebusse
(CB, DB) 134, 136 mit der Speicherschnittstelleneinheit 104 gekoppelt.
Die A-Einheit 110 ist über
zwei 24-Bit-Datenschreib-Adressenbusse (EAB, FAB) 160, 162, über die
zwei 16-Bit-Datenschreibbusse (EB, FB) 130, 132, über die
drei Datenlese-Adressenbusse (BAB, CAB, DAB) 164, 166, 168 und über die
zwei 16-Bit-Datenlesebusse (CB, DB) 134, 136 mit
der Speicherschnittstelleneinheit 104 gekoppelt. Die D-Einheit 112 ist über die
zwei Datenschreibbusse (EB, FB) 130, 132 und über die
drei Datenlesebusse (BB, CB, DB) 144, 134, 136 mit
der Speicherschnittstelleneinheit 104 gekoppelt.
-
6 stellt
die Übergabe
von Befehlen von der I-Einheit 106 an die P-Einheit 108 bei 124,
z. B. zum Weiterleiten von Verzweigungsbefehlen, dar. Außerdem stellt 6 die Übergabe
von Daten von der I-Einheit 106 an die A-Einheit 110 und
an die D-Einheit 112 bei 126 bzw. bei 128 dar.
-
Wie
in 7 veranschaulicht ist, ist der Prozessor 100 um
einen vereinheitlichten Programm-/Datenraum organisiert. Ein Programmzeiger
hat intern 24 Bits und eine Byte-Adressierungsfähigkeit, wobei aber nur eine
22-Bit-Adresse an den Speicher exportiert wird, da das Programmholen
immer an einer 32-Bit-Grenze ausgeführt wird. Allerdings wird z.
B. während
der Emulation für
die Software-Entwicklung
die volle 24-Bit-Adresse für
eine Hardware-Unterbrechungspunkt-Realisierung bereitgestellt. Die Datenzeiger
sind 16 Bit, erweitert durch eine 7-Bit-Hauptdatenseite, und besitzen Wortadressierungsfähigkeit.
Die Software kann wie folgt bis zu 3 Hauptdatenseiten definieren:
MDP
direkter Zugriff indirekter Zugriff CDP
MDP05 – indirekter
Zugriff AR[0-5]
MDP67 – indirekter
Zugriff AR[6-7]
-
Es
wird ein Stapel gehalten, der immer auf der Hauptdatenseite 0 liegt.
Die auf den CPU-Speicher abgebildeten Register sind von allen Seiten
sichtbar.
-
In
Tabelle 2 sind verschiedene Aspekte des Prozessors 100 zusammengefasst.
-
-
Tabelle
2- Zusammenfassung des verbesserten Prozessors 100
-
Ein
Aspekt der vorliegenden Erfindung ist die Erhaltung der Software-Code-Kompatibilität zwischen
einer früheren
Version eines Mikroprozessors und einer späteren, verbesserten Version
des Mikroprozessors. Bei einer klassischen Stapelarchitektur, die
mit einem 16-Bit-Prozessor einer früheren Familie verwendet wird, würde der
Prozessorstapelzeiger während
des Codeübersetzungsprozesses
wegen eines 24-Bit-Programmzählers,
der in der verbesserten Version des Mikroprozessors anstelle eines
16-Bit-Programmzählers
verwendet wird, divergieren. Das Synchronhalten der Stapelzeiger
ist eine Hauptübersetzungsanforderung,
um die richtige Parameterübergabe über den
Stapel zu unterstützen.
-
Um
die obige Anforderung zu erfüllen,
wird der Prozessorstapel gemäß Aspekten
der vorliegenden Erfindung mit zwei unabhängigen Zeigern gemanagt:
Anwenderstapelzeiger
SP und Systemstapelzeiger SSP, wie sie in den 9 und 10 veranschaulicht
sind. Den Systemstapelzeiger sollte der Anwender mit Ausnahme für die Abbildung
nie behandeln.
-
8A ist
eine schematische Darstellung eines Stapelbereichs 810 in
einem Speicherraum 800, der in einem Mikroprozessor einer
früheren
Generation verwendet wird. Der veranschaulichte Stapel beginnt bei der
Wortadresse 100, könnte
aber bei einer anderen Adresse beginnen. Ein Stapelzeiger 802 enthält einen Adressenwert,
der auf den letzten gespeicherten Datenplatz in dem Stapelbereich "zeigt". Typisch werden
eine oder mehrere Variable auf einen Stapel geschoben, woraufhin
ein Unterprogramm aufgerufen wird. Ein Aufrufbefehl schiebt den
Wert des Programmzählers
auf den Stapel, so dass nach der Rückkehr von dem Unterprogramm
die Befehlsausführung
an diesem Punkt wieder aufgenommen werden kann. Es wird angemerkt,
dass der Programmzählerwert
16 Bits oder weniger ist und in ein 16-Bit-Wort in dem Stapel passt.
-
Auf
die Variablen innerhalb des Unterprogramms wird unter Verwendung
der Relativadressierung des Stapelzeigers wie in der folgenden Codesequenz
veranschaulicht zugegriffen:
-
In
der obigen Codesequenz gibt der Term "*SP(offset_var1)" an, dass der Datenwert geholt wird,
der sich an einem Speicherplatz befindet, der um einen Betrag (offset_var1)
relativ zu dem Stapelzeiger SP ist. Ein Compiler berechnet während des
Kompilierungsprozesses die Relativadresse jeder Variablen. Wieder
anhand von 8A zeigt der Stapelzeiger auf
die Adresse FE, nachdem der Wert des Programmzählers PC1 in Reaktion auf das
Ausführen
des Befehls "call
func_a" geschoben
worden ist. In diesem Fall ist die Adresse relativ zu dem Stapelzeiger
der geschobenen Variablen VAR1 2. Somit fügt der Compiler anstelle von "offset var1" "2" ein.
Alternativ schreibt ein Programmierer von Hand ein Assemblersprachenprogramm,
in dem er die richtigen Literal-Offset-Werte für "offset var1" und "offset var2" einfügt.
-
Weiter
anhand von 8A ist zu sehen, dass vor jedem
Aufruf, der einen Programmzählerwert
PC2, PC3, PC4 schiebt, verschiedene Anzahlen von Variablen auf den
Stapel geschoben werden können.
Allerdings wird der Stapelzeiger SP in jedem Fall vorausdekrementiert,
so dass er auf die letzte auf den Stapel geschobene Position wie
etwa bei FA, F8 und F7 zeigt.
-
8B ist
eine schematische Darstellung eines Beispiels eines Stapelbereichs
zum Speichern eines erweiterten Programmzählers. In diesem Fall ist der
Programmzähler
auf 24 Bits erhöht
worden. Nun sind zwei 16-Bit-Stapel-Wortplätze wie bei den Adressen FE
und FD erforderlich, um einen Wert des Programmzäh lers auf den Stapel zu schieben.
Somit tritt, falls das obige Codesegment, das für den früheren Prozessor mit einem wie
in 8A veranschaulichten Stapel kompiliert oder von
Hand geschrieben wurde, auf einem verbesserten Prozessor mit einem
wie in 8B veranschaulichten Stapel
ausgeführt
wird, ein Fehler auf, wenn von dem Unterprogramm die Relativadressierung
des Stapelzeigers verwendet wird, da die durch den Compiler bereitgestellten
ursprünglichen
Versatzwerte jetzt falsch sind. Somit muss das Programm neu kompiliert
werden, was ein Nachteil ist. Ähnlich
ist es für
den Fall des von Hand geschriebenen Assemblercodes. Das Assemblerprogramm
muss mühsam
von Hand übersetzt
werden, da die von dem Programmierer bereitgestellten Literal-Offsets
durch einen Assembler nicht korrigiert werden können. Selbst wenn ein Assembler
die Offset-Werte bereitstellt, muss das Programm dennoch neu assembliert
werden, was ein Nachteil ist.
-
9 ist
eine schematische Darstellung der Dualstapelbereiche 910, 911,
zum Speichern eines erweiterten Programmzählers gemäß Aspekten der vorliegenden
Erfindung. Beide Bereiche befinden sich in einem zusammenhängenden
Speicherraum, der die Speicherräume 900a und 900b enthält. Alternativ
könnten
die Speicherräume 900a und 900b in
einem nicht zusammenhängenden
Speicher oder in getrennten Speicherräumen sein. Der Anwenderstapelbereich 910 wird
zum Speichern von Variablen und von einem ersten Abschnitt des Programmzählers verwendet,
so dass alle Adressen-Offsets relativ zu dem Stapelzeiger von einem Prozessor
einer früheren
Generation gültig
bleiben. Der Systemstapelbereich 911 wird zum Speichern
des verbleibenden Abschnitts des Programmzählers verwendet.
-
In 9 enthält der erste
Abschnitt des Programmzählers
die Bits 0-15, während
der verbleibende Abschnitt für
einen 24-Bit-Programmzähler
die Bits 16-23 enthält.
Allerdings könnte
der Programmzähler
anders aufgeteilt werden, solange nur ein Wortplatz in dem Anwenderstapel
zum Speichern des ersten Abschnitts des Programmzählers verwendet
wird.
-
Weiter
anhand von 9 kann außerdem ein Kontextwert in dem
Systemstapelbereich gespeichert werden, wie es z. B. durch context1
gezeigt ist, das bei der Adresse 200 gespeichert ist. Der
Kontextwert stellt Statusinformationen über verschiedene Funktionsschaltungsanordnungen
in dem Mikroprozessor zu der Zeit bereit, zu der der Programmzähler auf
den Stapel geschoben wurde. Kontextwerte werden gespeichert, wenn Befehle,
die den Programmablauf ändern,
wie etwa z. B. ein CALL ausgeführt
werden. Kontextwerte werden gleichfalls gespeichert, wenn eine Unterbrechung
auftritt und in Reaktion auf die Unterbrechung Programmzählerwerte
auf den Stapel geschoben werden. Das Format des Kontextwerts wird
später
genauer beschrieben. Alternativ könnten Kontextwerte nur in Reaktion
auf Unterbrechungen oder nur in Reaktion auf Befehle, die den Programmablauf ändern, gespeichert
werden.
-
Der
Stapel wird durch die folgenden Ereignisse manipuliert:
- (1) Unterbrechungen und die Befehle intr(), trap() und call(),
die Daten sowohl in den System- als auch in den Datenstapel schieben.
SP und SSP werden beide vor dem Speichern von Elementen in dem Stapel vorausdekrementiert.
- (2) push()-Befehle, die Daten nur in den Datenstapel schieben.
SP wird vor dem Speichern von Elementen in dem Stapel vorausdekrementiert.
- (3) return()-Befehle, die Daten sowohl von dem System- als auch
von dem Datenstapel abheben. SP und SSP werden beide nachinkrementiert,
nachdem die Stapelelemente geladen worden sind.
- (4) pop()-Befehle, die Daten nur von dem Datenstapel abheben.
SP wird nachinkrementiert, nachdem die Stapelelemente geladen worden
sind.
-
Außerdem wird
der Datenstapelzeiger (SP) verwendet, um auf die Einzeldatenspeicheroperanden
in der Direktbetriebsart zuzugreifen.
-
10 ist
eine schematische Darstellung des Anwenderstapelbereichs 910 und
des Systemstapelbereichs 911 für den Mikroprozessor aus 1 gemäß weiteren
Aspekten der vorliegenden Erfindung. Beide Stapelzeiger enthalten
die Adresse des letzten in den Datenstapel geschobenen Elements.
Der Prozessor 100 stellt einen 32-Bit-Weg in den Stapel
bereit, was eine schnelle Kontextsicherung zulässt.
-
Der
Prozessor 100 nutzt die 2 × 16-Bit-Speicher-Lese-/Schreibbusse
und den Duallese-/Dualschreibzugriff, um Kontextsicherungen zu beschleunigen.
Zum Beispiel werden ein 32-Bit-Akkumulator oder zwei unabhängige Register
als eine Sequenz von zwei 16-Bit-Speicherschreibvorgängen gesichert.
Die Kontextsicherungsroutine kann Einzel- und Doppel-push()/pop()-Befehle
mischen. Das Byteformat wird durch die push/pop-Befehlsfamilie nicht
unterstützt.
In einer durch den Programmablauf (Aufrufe, Unterbrechungen) angesteuerten
Kontextsicherung wird der Programmzähler in zwei Felder PC[23:16],
PC[15:0] aufgeteilt und als ein Dualschreibzugriff gesichert. Das
Feld PC[15:0] wird über
die EB/EAB-Busse auf dem Datenstapel an dem Platz gesichert, auf
den SP zeigt. Das Feld PC[23:16] wird über die FB/FAB-Busse auf dem
Stapel an dem Platz gesichert, auf den SSP zeigt. Tabelle 3 fasst
die Aufruf- und Rücksprung-Befehle
zusammen.
-
Tabelle
3: Aufruf- und Rücksprung-Befehle
-
Weiter
anhand von 10 wird, wie zuvor beschrieben
wurde, ein erster Abschnitt des Programmzählers 1000 in dem
Anwenderstapel gespeichert, während
der verbleibende Abschnitt des Programmzählers 1001 in dem
Systemstapel gespeichert wird. Wie zuvor beschrieben wurde, kann
auf den Speicher 900 über den
E-Bus 1010 und über
den F-Bus 1011 gleichzeitig zugegriffen werden. Somit können beide
Abschnitte des Programmzählers 1000, 1001 gleichzeitig
in die Dualstapel geschrieben oder aus ihnen gelesen werden, so dass
es im Vergleich zu einem früheren
Mikroprozessor mit nur einem 16-Bit-Programmzähler keinen Leistungsverlust
gibt.
-
Um
die beste Leistungsfähigkeit
während
der Kontextsicherung zu erhalten, muss der Stapel auf Dualzugriffsspeicherinstanzen
abgebildet werden. In dieser Ausführungsform werden die Stapelgebiete
in der Hauptdatenseite 0 (64Kword) gehalten. Allerdings könnten andere
Ausführungsformen
die Stapelbereiche in anderen Speichergebieten anordnen. Anwendungen,
die einen großen
Stapel erfordern, können
ihn mit zwei Einzelzugriffs-Speicherinstanzen mit einer speziellen
Abbildung (ungerade/gerade Bank) realisieren, um sich von dem Konflikt
zwischen E- und F-Anforderungen zu befreien.
-
Die
Stapelbefehle sind in Tabelle 4 zusammengefasst.
-
Tabelle
4: Stapelbezugnahmebefehle
-
Je
nach dem Originalcode der Vorrichtung einer früheren Generation kann der Übersetzer "Fernaufrufe" (24-Bit-Adresse)
behandeln müssen.
Der Befehlssatz des Prozessors 100 unterstützt eine
einzige Klasse von Aufruf/Rücksprung-Be fehlen
auf der Grundlage des Duallese/Dualschreib-Schemas. Der übersetzte
Code führt
außer
dem Aufruf einen SP = SP + K8-Befehl aus, um schließlich dieselbe
SP-Nachänderung
zu erhalten.
-
Es
gibt eine begrenzte Anzahl von Fällen,
in denen der Übersetzungsprozess
zusätzliche
CPU-Betriebsmittel beinhaltet. Falls in einem solchen Makro eine
Unterbrechung genommen wird und falls die Unterbrechungsroutine ähnliche
Makros enthält,
erfordert die übersetzte
Kontextsicherungssequenz zusätzliche push()-Befehle.
Das heißt,
die Stapelzeiger eines Prozessors einer früheren Familie und des vorliegenden
Prozessors sind während
des ISR-Ausführungsfensters
nicht mehr synchron. Sofern die gesamte Kontextsicherung zu Beginn
des ISR ausgeführt
wird, wird irgend Parameter, der in der Unterbrechungsaufgabe über den Stapel übergeben
wird, erhalten. Beim Rücksprung
von der Unterbrechung sind die Stapelzeiger des Prozessors einer
früheren
Familie und des vorliegenden Prozessors wieder synchron.
-
11 ist
ein Blockschaltplan, der die Adressenerzeugung in dem Mikroprozessor
aus 1 veranschaulicht. Die Registerdatei 30 hält verschiedene
Register für
den Mikroprozessor 100 einschließlich des Anwenderstapelzeigers 902 und
des Systemstapelzeigers 904. Die Zeiger-Nachänderungs-Schaltungsanordnung 1102 ist über einen
Bus 1110 mit der Registerdatei verbunden und so betreibbar,
dass sie ein ausgewähltes
Register um einen ausgewählten
Betrag inkrementiert oder dekrementiert. Über den Bus 1111 wird
ein geänderter
Registerwert für
die Operandenadressenberechnungs-Schaltungsanordnung 1104 bereitgestellt.
Die Operandenadressenberechnungs-Schaltungsanordnung 1104 ist
so betreibbar, dass sie in Reaktion auf die Adressierungsbetriebsart
eines Befehls, der ausgeführt
wird, wie etwa durch Addieren einer Adresse relativ zu dem Stapelzeiger
zu dem Stapelzeiger wie früher
beschrieben den Wert eines ausgewählten Registers ändert. Daraufhin
wird in der Adressenregisterschaltungsanordnung 1106 ein
richtig geänderter
Adressenwert gespeichert und an den Adressenbus 1108 angelegt,
um auf den Speicher zuzugreifen. Der Adressenbus 1108 ist repräsentativ
für irgendeinen
der Adressenbusse 160, 162, 164, 166 oder 168 aus 6.
Die A-Einheit unterstützt
16-Bit-Operationen und 8-Bit-Lade-/Speichervorgänge. Dank leistungsfähiger Modifizierer
wird die meiste Adressenberechnung durch den DAGEN ausgeführt. Alle
Zeigerregister und zugeordneten Offset-Register sind als 16-Bit-Register
realisiert. Daraufhin wird die 16-Bit-Adresse mit der Hauptdatenseite
verkettet, um eine 24-Bit-Speicheradresse aufzubauen.
-
12 ist
ein ausführlicherer
Blockschaltplan der Abschnitte der Adressenschaltungsanordnung aus 11.
Die Adressenerzeugung erfolgt durch Berechnen logischer und arithmetischer
Operationen (Maskieren, Additionen und Subtraktionen mit oder ohne
Reverse-Carry-Fortpflanzung). Die Auswahl der Operanden erfolgt
in der Registerdatei. Die Adressenerzeugung wird in zwei Stufen
ausgeführt:
Die Registeränderung
wird in der Änderungsschaltungsanordnung 1102 ausgeführt und
die Offset-Berechnung wird in der Berechnungsschaltungsanordnung 1104 ausgeführt. Die
direkte und die absolute Adressierung verwenden keine Registeränderung
(wobei das Registeränderungsergebnis
in diesen Fällen
ignoriert wird).
-
Die
Registeränderung
wird durch die in Tabelle 5 beschriebenen Signale gesteuert, während die
Offset-Änderung
durch die in Tabelle 6 beschriebenen Signale gesteuert wird.
-
Tabelle
5: Registeränderungs-Steuersignale
-
Tabelle
6: Offset-Änderungen
sind Steuersignale
-
Der
X-, der Y- und der Koeffizientenweg sind sehr ähnlich. Allerdings ist der
Koeffizientenweg viel einfacher, da er nur die indirekte Adressierung
mit einer beschränkten
Menge von Modifizierern (keine Vorausänderung) unterstützt.
-
Weiter
anhand von 12 enthält die Operandenadressenberechnungs-Schaltungsanordnung 1104 eine
Addierer/Subtrahierer-Einheit 1200 für das Vorausinkrementieren/Vorausdekrementieren
eines Registerwerts. Der Mux 1202 kann über den Bus 1111 einen
geänderten
Registerwert für
den ersten Eingang des Addierers 1200 bereitstellen. Außerdem kann
der Mux 1202 einen Offset-Wert für einen Befehl für den ersten
Eingang des Addierers 1200 bereitstellen. Der Maskierer 1204 ist
mit einem zweiten Eingang des Addierers 1200 verbunden
und kann eines der Register aus der Registerdatei auswählen. Eine
berechnete Adresse wird in der Erfassungsschaltungsanordnung 1206 untersucht,
um zu bestimmen, ob sie auf ein MMR zeigt, und daraufhin über den
Bus 1112 an ein Adressenregister gesendet.
-
Weiter
anhand von 12 empfängt die Änderungsschaltungsanordnung 1102 über den
Bus 1110 einen Registerwert von der Registerdatei 30.
Der Registerwert kann durch den Addierer/Subtrahierer 1210 inkrementiert
oder dekrementiert werden oder durch die Maskierungsschaltungsanordnung 1212 maskiert
werden und daraufhin durch den Addierer/Subtrahierer 1214 inkrementiert/dekrementiert
werden. Die Multiplexer 1216 und 1218 leiten den
geänderten
Wert zum Bus 1111, um die Registerdatei 30 zu
aktualisieren und um ihn an die Adressenberechnungs-Schaltungsanordnung 1104 zu
senden.
-
13 ist
ein Blockschaltplan, der nur die Wege durch die Änderungsschaltungsanordnung 1102 und durch
die Berechnungsschaltungsanordnung 1104 veranschaulicht,
um gemäß einem
Aspekt der vorliegenden Erfindung den Stapelzeiger und den Systemstapelzeiger
für Duallese-
oder Dualschreibtransaktionen gleichzeitig für zwei Datenbusse bereitzustellen.
Außer
der wie oben diskutierten Vorausinkrementierung/Vorausdekrementierung
kann die Nachänderungsschaltungsanordnung 1102 den
Stapelzeiger SP inkrementieren oder dekrementieren. Der Mux 1300 wählt entweder
den Anwenderstapelzeiger SP oder den Systemstapelzeiger SSP aus
und lädt
ein Adressenregister über
den Bus 1310 entweder auf den C-Bus oder auf den E-Bus.
Gleichfalls wählt
der Mux 1301 entweder den Anwenderstapelzeiger SP oder
den Systemstapelzeiger SSP aus und lädt ein Adressenregister über den
Bus 1311 entweder auf den D-Bus oder auf den F-Bus.
-
14 ist
ein Zeitablaufplan, der Einzel- und Duallesetransaktionen und Einzel-
und Dualschreibtransaktionen in der Pipeline des Mikroprozessors 100 veranschaulicht.
Diese Figur veranschaulicht verschiedene Speicher-Lese-/Schreibtransaktionen,
die entweder den C-Bus und den D-Bus für Lesevorgänge oder den E-Bus und den
F-Bus für
Schreibvorgänge
verwenden. Wie zuvor diskutiert wurde, hat die Pipeline sieben Stufen,
wobei hier aber nur die Stufen P1-P6 veranschaulicht sind. Jede
Zeitlinie 1400–1414 stellt
einen einzelnen Taktzyklus in der Pipeline dar und gibt an, wann
verschiedene Speichertransaktionen stattfinden. Die Zeitlinie 1400 veranschaulicht
einen Einzellesezyklus, der in der Lesestufe P5 unter Verwendung
des D-Busses stattfindet. Es wird angemerkt, dass während der
Lesestufe P5 Speicherlesevorgänge
während
der durch den Zeitschlitz 1420 angegebenen ersten Hälfte des
Zyklus ausgeführt
werden. Die Zeitlinie 1401 veranschaulicht eine Einzelschreibtransaktion,
die in der Ausführungsstufe
P6 im Schlitz 1422 stattfindet.
-
Die
Zeitlinie 1404 veranschaulicht das Lesen sowohl des Anwenderstapels
als auch des Systemstapels in demselben Zyklus unter Verwendung
des Stapelzeigers SP und des Systemstapelzeigers SSP wie oben diskutiert.
Im Zeitschlitz 1423 wird einer der Stapel unter Verwendung
des C-Busses während
der letzten Hälfte
der Zugriffsstufe P4 vom Datenspeicher 151 gelesen. Der
andere Stapel wird unter Verwendung des D-Busses während der
ersten Hälfte
der Lesephase P5 im Zeitschlitz 1424 vom Datenspeicher 151 gelesen. Vorteilhaft
kann unter Verwendung der Adressenschaltungsanordnung, wie sie anhand
von 13 beschrieben ist, jeder Stapel in jeder Pipeline-Stufe
gelesen werden. Allerdings kann die Adressenschaltungsanordnung
in einer anderen Ausführungsform
auf eine einfachere Weise realisiert sein, die diese Flexibilität nicht bieten
kann.
-
Die
Zeitlinie 1407 veranschaulicht das Schreiben/Lesen sowohl
des Anwenderstapels auch des Systemstapels in demselben Zyklus unter
Verwendung des Stapelzeigers SP und des Systemstapelzeigers SSP wie
oben diskutiert. Einer der Stapel wird unter Verwendung des E-Busses
während
der letzten Hälfte
der Ausführungsstufe
P6 im Zeitschlitz 1425 in den Datenspeicher 151 geschrieben.
Der andere Stapel wird unter Verwendung des F-Busses während der
ersten Hälfte
der folgenden Ausführungsstufe
P6 im Zeitschlitz 1426 in den Datenspeicher 151 geschrieben.
Vorteilhaft kann unter Verwendung der Adressenschaltungsanordnung, wie
sie anhand von 13 beschrieben ist, jeder Stapel
in jeder Pipeline-Stufe
geschrieben werden. Allerdings kann die Adressenschaltungsanordnung
in einer anderen Ausführungsform
auf einfachere Weise realisiert sein, die diese Flexibilität nicht
bieten kann.
-
Die
Zeitlinie 1402 veranschaulicht ein Einzelschreiben mit
einer Verschiebung. Die Zeitlinie 1403 veranschaulicht
eine Duallesetransaktion. Die Zeitlinie 1405 veranschaulicht
eine Doppellesetransaktion. Die Zeitlinie 1406 veranschaulicht
eine Dualschreibtransaktion. Die Zeitlinie 1408 veranschaulicht
eine Doppelschreibtransaktion. Die Zeitlinie 1409 veranschaulicht
eine Lese-/Änderungs /Schreibtransaktion.
Die Zeitlinie 1410 veranschaulicht ein Duallesen und ein
Koeffizientenlesen. Die Zeitlinie 1411 veranschaulicht
eine Doppellese-/Doppelschreibtransaktion. Die Zeitlinie 1412 veranschaulicht
eine Duallese-/Dualschreibtransaktion. Die Zeitlinie 1413 veranschaulicht
ein Duallesen/Dualschreiben mit einer Verschiebung. Die Zeitlinie 1414 veranschaulicht
ein Doppelschreiben mit einer Dualverschiebung. Verschiedene Ausführungsformen
der vorliegenden Erfindung könnten
Stapelzugriffe unter Verwendung verschiedener Arten von Speichertransaktionen ausführen, wie
sie z. B. durch die Zeitlinien 1400–1414 veranschaulicht
sind.
-
15 ist
eine Tabelle, die Kontextdaten veranschaulicht, die in dem Systemstapel
gespeichert sind. Vorteilhaft können
in dem Systemstapel zusätzliche
Informationen gespeichert werden, während die Software-Kompatibilität mit Prozessoren
einer früheren
Generation erhalten bleibt, da der Anwenderstapel durch die in dem
Systemstapel gespeicherten Informationen nicht beeinflusst wird.
Die in Tabelle 7 gegebenen Definitionen erläutern die Felder in dieser
Figur.
-
Tabelle
7 – Auf
dem Systemstapel gesicherte Kontextinformationen
-
16 ist
eine schematische Darstellung einer integrierten Schaltung, die
den Prozessor 100 enthält. Wie
gezeigt ist, enthält
die integrierte Schaltung mehrere Kontakte für die Oberflächenmontage.
Allerdings könnte
die integrierte Schaltung andere Konfigurationen, z. B. mehrere
Anschlussstifte an einer unteren Oberfläche der Schaltung zur Montage
in einem ZIF-Sockel oder tatsächlich
irgendeine andere geeignete Konfiguration, enthalten.
-
17 veranschaulicht
eine beispielhafte Realisierung eines Beispiels einer solchen integrierten Schaltung
in einer Mobiltelekommunikationsvorrichtung wie etwa in einem Mobiltelephon
mit integrierter Tastatur 12 und Anzeige 14. Wie
in 17 gezeigt ist, ist das digitale System 10 mit
dem Prozessor 100, falls angebracht über einen (nicht gezeigten)
Tastaturadapter, mit der Tastatur 12, falls angebracht über einen
(nicht gezeigten) Anzeigeadapter, mit der Anzeige 14 und
mit einer Hochfrequenzschaltungsanordnung (HF-Schaltungsanordnung) 16 verbunden.
Die HF-Schaltungsanordnung 16 ist mit einer Antenne 18 verbunden.
-
Die
Herstellung der Datenverarbeitungsvorrichtung 100 umfasst
mehrere Schritte des Implantierens verschiedener Mengen von Störstellen
in ein Halbleitersubstrat und des Diffundierens der Störstellen
in ausgewählte
Tiefen in dem Substrat, um Transistorvorrichtungen auszubilden.
Zum Steuern der Anordnung der Störstellen
werden Masken ausgebildet. Es werden mehrere Schichten aus leitendem
Material und isolierendem Material abgelagert und geätzt, um
die verschiedenen Vorrichtungen miteinander zu verbinden. Diese Schritte
werden in einer Reinraumumgebung ausgeführt.
-
Ein
erheblicher Anteil der Herstellungskosten der Datenverarbeitungsvorrichtung
umfasst Tests. Die einzelnen Vorrichtungen werden in Wafer-Form
in einen Betriebszustand vorgespannt und auf die Grundbetriebsfunktionalität sondengetestet.
Daraufhin wird der Wafer in einzelne Chips getrennt, die als blanker
Chip verkauft oder gepackt werden können. Nach der Packung werden
die Fertigteile in einen Betriebszustand vorgespannt und auf die
Betriebsfunktionalität
getestet.
-
Eine
alternative Ausführungsform
der neuen Aspekte der vorliegenden Erfindung kann weitere Schaltungsanordnungen
enthalten, die mit den hier offenbarten Schaltungsanordnungen kombiniert
werden, um die Gesamtgatterzahl der kombinierten Funktionen zu verringern.
Da der Fachmann auf dem Gebiet die Techniken zur Gatterminimierung
kennt, werden die Einzelheiten einer solchen Ausführungsform
hier nicht beschrieben.
-
Somit
ist ein Prozessor beschrieben worden, der ein programmierbarer digitaler
Signalprozessor (DSP) ist, der sowohl eine hohe Codedichte als auch
eine leichte Programmierung bietet. Die Architektur und der Befehlssatz
sind für
niedrigen Leistungsverbrauch und für die hocheffiziente Ausführung von
DSP-Algorithmen wie etwa für
drahtlose Telephone sowie von reinen Steueraufgaben optimiert. Der
Prozessor enthält eine
Befehlspuffereinheit und eine Datenberechnungseinheit zur Ausführung der
durch die Befehlspuffereinheit decodierten Befehle. Ein Programmzähler, der
einen unteren Programmzählerabschnitt
und einen oberen Programmzählerabschnitt
aufweist, stellt eine Befehlsadresse bereit, die für den Befehlsspeicher
bereitgestellt wird. Ein erster Stapelzeiger ist so betreibbar,
dass er in Reaktion auf einen Befehl, z. B. auf einen CALL-Befehl,
der durch den Mikroprozessor ausgeführt wird, einen ersten Stapelbereich
in einem Datenspeicher adressiert, um einen unteren Programmzählerwert
zu sichern. Ein zweiter Stapelzeiger ist so betreibbar, dass er
in Reaktion auf die Ausführung
des CALL-Befehls
einen zweiten Stapelbereich in dem Datenspeicher adressiert, um
einen oberen Programmzählerwert
zu sichern. Dies erhält
vorteilhaft die Software-Code-Kompatibilität von einem
Mikroprozessor einer früheren
Generation, der Variable über
einen Stapel übergibt.
-
Die
Begriffe "angelegt", "verbunden" und "Verbindung", wie sie hier verwendet
werden, bedeuten elektrisch verbunden einschließlich dort, wo zusätzliche
Elemente in dem elektrischen Verbindungsweg sein können.
-
Obgleich
die Erfindung anhand veranschaulichender Ausführungsformen beschrieben worden
ist, soll diese Beschreibung nicht in einem beschränkenden
Sinn verstanden werden. Für
den Fachmann auf dem Gebiet gehen anhand dieser Beschreibung verschiedene
weitere Ausführungsformen
der Erfindung hervor. Somit wird betrachtet, dass die beigefügten Ansprüche irgendwelche
solche Änderungen
der Ausführungsformen, wie
sie im Umfang der Erfindung liegen, umfassen.