-
Die
vorliegende Erfindung betrifft ein Speicherfeld zur Verwendung in
einem Computersystem
-
In
einem Computersystem werden Instruktionen typischerweise aus einem
Programmspeicher geholt, decodiert und an eine Ausführungseinheit
geleitet, wo sie ausgeführt
werden, um das in dem Programmspeicher gespeicherte Programm auszuführen. Gemäß eines
neuartigen Designs eines Computersystems, das durch die Anmelder
entwickelt wurde, werden eine Anzahl von verschiedenen Instruktionsmodi
unterstützt.
Um diese Modi zu unterstützen
werden Daten in einem Speicherfeld gespeichert, das es erlaubt,
dass Daten gleichzeitig als eine Zeile von 8n Bits geschrieben werden,
aber selektiv in Folgen von 2n Bits ausgelesen werden. Somit gibt
es gemäß der beschriebenen
Ausführungsform
einen Eingangsdatenanschluss zum Schreiben von 128 Bits und vier
Ausgangsdatenanschlüsse
mit jeweils 32 Bits zum Auslesen. Somit werden Zeilen von 128 Bit
Länge gleichzeitig
nacheinander geschrieben, während
es möglich
ist, verschiedene Anzahlen von 32 Bit-Abfolgen abhängig von
dem Instruktionsmodus des Gerätes
auszulesen.
-
Gemäß einem
ersten Instruktionsmodus wird eine Sequenz von 2n Bits während jedes
Maschinenzyklus ausgelesen, um ein Paar von n-Bit-Instruktionen
der Dekodiereinheit zu leiten (hierin als GP16-Modus bezeichnet).
-
Gemäß einem
zweiten Instruktionsmodus werden zwei Abfolgen von 2n Bits während jedes
Maschinenzyklus ausgelesen, um zwei 2n Bit-Instruktionen der Dekodiereinheit
bereitzustellen (hierin als GP32-Modus bezeichnet).
-
Gemäß einem
dritten Instruktionsmodus werden vier Abfolgen von 2n Bits während jedes
Maschinenzyklus ausgelesen, um gleichzeitig vier Instruktionen von
jeweils 2n Bits der Dekodiereinheit bereitzustellen (hierin als
VLIW-Modus (VLIW: sehr langes Instruktionswort) bezeichnet). Es
ist eine Funktion des VLIW-Modus, dass diese vier Instruktionen
eine in dem Speicherfeld gespeicherte Zeile darstellen.
-
Die
Erfinder haben ein Speicherfeld entwickelt, das diese Instruktionsmodi
in einer einfachen Weise unterstützt.
-
Gemäß der vorliegenden
Erfindung ist ein Speicherfeld zum Speichern von Instruktionen in
einem Prozessor vorgesehen, umfassend:
eine erste Gruppe von
Speicherzellen, die jeweils einen Schreibeingang und einen einzelnen
Leseausgang aufweisen;
eine zweite und eine dritte Gruppe von
Speicherzellen, die jeweils einen Schreibeingang und lediglich zwei
Leseeingänge
aufweisen; und
eine vierte Gruppe von Speicherzellen, die jeweils
einen Schreibeingang und lediglich drei Leseausgänge aufweisen, wobei alle Schreibeingänge gemeinsam
durch eine einzige Schreibadresse adressierbar sind und wobei die
Leseausgänge
individuell anhand eines Lesezeigers auswählbar sind.
-
In
der beschriebenen Ausführungsform
umfasst das Speicherfeld vier Ausgangsanschlüsse, wobei der erste Ausgangsanschluss
so geschaltet ist, dass er Daten von einer der ersten bis vierten
Gruppe empfängt, wobei
der zweite Ausgangsanschluss geschaltet ist, um Daten lediglich
von der zweiten oder vierten Gruppe zu empfangen, und der dritte
und vierte Ausgangsanschluss geschaltet sind, um Daten nur von der
dritten bzw. vierten Gruppe zu empfangen.
-
Das
Speicherfeld kann einen Leseschaltkreis zum Lesen von Instruktionen
aus dem Speicherfeld abhängig
von einem Instruktionsmodus des Prozessors umfassen. Somit liest
der Leseschaltkreis gemäß dem ersten
Instruktionsmodus nacheinander aus der ersten bis dritten Gruppe
während
aufeinander folgenden Maschinenzyklen aus, um während jedes Maschinenzyklus
ein Instruktionspaar an den ersten Ausgangsanschluss anzulegen.
-
In
dem zweiten Instruktionsmodus liest der Leseschaltkreis die erste
und zweite Gruppe während
eines ersten Maschinenzyklus und die dritte und vierte Gruppe während eines
nächsten
Maschinenzyklus aus, um zwei Instruktionen an dem ersten bzw. zweiten
Ausgangsanschluss während
jedes Maschinenzyklus bereitzustellen.
-
Gemäß dem dritten
Instruktionsmodus liest der Leseschaltkreis alle vier Gruppen während jedes
Maschinenzyklus ausliest, um jeweils vier VLIW-Instruktionen jeweils
an dem ersten bis vierten Anschluss bereitzustellen.
-
Indem
der Aufbau des oben beschriebenen Speicherfeldes sorgfältig vorgesehen
wird, um die drei Instruktionsmodi zu unterstützen, war es möglich, den
Verdrahtungsaufwand der Festverdrahtung erheblich zu reduzieren,
weil nicht alle Gruppen von Speicherzellen mit jedem Ausgangsanschluss
verbunden werden müssen.
D.h., es entfällt
die Notwendigkeit, dass jede Speicherzelle vier Leseanschlüsse aufweist,
was normalerweise der Fall wäre,
wenn die Speicherzelle an vier Ausgangsanschlüsse angeschlossen würde. Das
Reduzieren der Anzahl der Ausleseanschlüsse für jede Zelle macht die Verdrahtung
einfacher und spart Siliziumfläche.
-
Zusätzlich kann
der Leseschaltkreis vereinfacht werden und durch eine Anzahl von
reduzierten Eingangs-Multiplexer-Gatter zur Verfügung gestellt werden, wie es
in der nachfolgenden Beschreibung dargestellt ist.
-
Für ein besseres
Verständnis
der vorliegenden Erfindung und um zu zeigen, wie diese ausgeführt werden
kann, wird diese nun beispielhaft mit Hilfe der beigefügten Zeichnungen
erläutert,
in denen:
-
1 ein
Blockdiagramm einer Vorladeeinheit zeigt;
-
2 die
verschiedenen Instruktionsmodi des Prozessors darstellt;
-
3 die
Organisation eines Vorladepuffers darstellt;
-
4 ein
schematisches Diagramm zeigt, das die Betriebsweise des Vorladepuffers
darstellt;
-
5 eine
vereinfachte Darstellung zeigt, die die Kommunikationspfade für eine Instruktionszeile
in dem Speicher darstellt; und
-
die 6a bis 6c verschiedene
Typen von Speicherzellen darstellen, um die Kommunikationspfade
zu implementieren.
-
1 zeigt
ein Blockdiagramm einer Vorladeeinheit 2 für einen
Prozessor, wobei die Vorladeeinheit 2 einen Vorladepuffer 4 mit
zugeordneten Steuerbits 6 und einen Steuerschaltkreis umfasst,
der eine Vorladeeinrichtung 8 und eine Zuordnungseinrichtung 10 aufweist.
Die Vorladeeinrichtung 8 ist mit einem Programmspeicher 12 verbunden
und dient dazu, Speicherzugriffe auf den Programmspeicher 12 mit
Hilfe von Speicherzugriffsteuersignalen 14a, 14b zu
starten. Die Adresse in dem Speicher, bezüglich der ein Vorladen gestartet wird,
wird in einem Vorladeprogrammzähler 16 in
der Vorladeeinrichtung 8 gespeichert. Die Steuerung des
Vorladeprogrammzählers
wird hierin nicht beschrieben, man kann jedoch annehmen, dass das
Vorladen aus dem Speicher gemäß einer
Abfolge von Instruktionen, die durch den Prozessor ausgeführt werden,
gestartet wird. D.h., der Vorladeprogrammzähler kann jedes Mal, wenn eine
Abfolge von benachbarten Instruktionen geladen wird, erhöht werden
oder gemäß Verzweigungen,
Traps, Interrupts usw. geändert
werden. Abhängig
von einem Speichervorladevorgang, der durch die Vorladeeinrichtung
gestartet wird, werden Instruktionsworte aus dem Programmspeicher 12 an
den Vorladepuffer 4 geliefert, wie durch den Dateneingabepfad 18 dargestellt ist.
-
Die
Zuordnungseinrichtung 10 steuert das Auslesen von Instruktionen
aus dem Vorladepuffer an einen Dekodierer 20 entlang des
Datenausgabepfades 22. Um dies auszuführen, sendet und empfängt die
Zuordnungseinrichtung Vorladezuordnungs (PFAL)/Dekodiersteuersignale 24a, 24b.
Die Zuordnungseinrichtung 10 weist einen Zuordnungsprogrammzähler 26 auf,
der verfolgt, wie viele Instruktionen an den Dekodierer 20 bei jedem
Maschinenzyklus abgesetzt wurden und eine Zustandsmaschine 28,
die einen Lesezeiger RP erzeugt, um den Vorladepuffer auf eine Weise
zu steuern, die nachfolgend ausführlicher
beschrieben wird.
-
Instruktionen
in dem Programmspeicher 12 können eine Länge von 16 Bit oder 32 Bit
aufweisen. Der Vorladepuffer unterstützt drei verschiedene Instruktionsmodi,
die nachfolgend mit Bezug auf 2 beschrieben
werden. Der Instruktionsmodus wird in einem Prozessstatusregister
(PSR) 3 gespeichert und kann geändert werden. Wechselsignale
chmd1, chmd2 werden durch den Dekodierer 20 abhängig von
einem Wechsel des Instruktionsmodus abgesetzt.
-
Gemäß einem
ersten Instruktionsmodus wird während
jedes Maschinenzyklus ein Paar von 16-Bit-Instruktionen an den Dekodierer 20 von
dem Vorladepuffer 4 geliefert. Dieses Paar wird als slot0,
slot1 in Bitsequenzen w0, w1 usw. bezeichnet. Dies wird hierin als
GP16-Modus bezeichnet.
-
Gemäß einem
zweiten Instruktionsmodus werden zwei Instruktionen mit jeweils
einer Länge
von 32 Bit an den Dekodierer von dem Vorladepuffer in jedem Maschinenzyklus,
z.B. w0, w1 im Zyklus 0 geliefert. Dieser Modus wird hierin als
GP32-Modus bezeichnet.
-
Gemäß einem
dritten Instruktionsmodus werden vier Instruktionen w0, w1, w2,
w3 von jeweils 32 Bits Länge
in jedem Maschinenzyklus an den Dekodierer geliefert. Dies wird
hierin als VLIW bezeichnet.
-
In
allen Modi ruft jede Vorladeoperation, die durch den Programmspeicher 12 gestartet
wird, ein Instruktionswort von 128 Bit Länge ab. Somit umfasst das Instruktionswort
in dem GP16-Modus acht 16-Bit-Instruktionen, die paarweise als slot0,
slot1 für
jeden Maschinenzyklus zusammengestellt sind. In dem GP32 und VLIW-Modus
umfasst das Instruktionswort vier 32-Bit-Instruktionen.
-
Die
Organisation des Vorladepuffers 4 ist in 3 dargestellt.
Es kann angenommen werden, dass der Vorladepuffer 4 aufeinander
folgende Leitungen L0 bis L3 mit jeweils einer Kapazität von 128
Bit aufweist. Es gibt einen einzelnen Schreibanschluss WPO mit einer
Breite von 128 Bit, der Daten aus dem Programmspeicher über den
Dateneingangspfad 18 und ein Eingangs-Latch FF-in empfängt und
diese in die ausgewählte
Zeile, gesteuert von einem Schreibzeiger WP[3:0], schreibt. Jede
Zeile umfasst vier Speicherorte mit jeweils einer Kapazität von 32
Bits, von denen zur Verdeutlichung jeder diagrammartig als zwei
16-Bit-Abschnitte dargestellt ist. Die Speicherorte sind mit F0
bis F15 bezeichnet. Jede Zeile in 3 wird hierin
als eine Gruppe von Speicherorten bezeichnet und weist die Kapazität einer
128-Bit-Zeile aus dem Speicher auf. Dies ermöglicht das Ausführen von
bis zu vier aufeinander folgenden Speicherzugriffen, sogar wenn
das erste Instruktionswort nicht empfangen wurde oder durch den
Prozessor ausgeführt
wurde. Während
das Instruktionswort in den Speicherorten F0 bis F3 dekodiert wird
und nachfolgend ausgeführt
wird, kann das Vorladen aus dem Speicher in die Speicherorte F4
bis F7, F8 bis F11 und F12 bis F15 fortgesetzt werden, bis der Puffer
gefüllt ist.
Wenn das Vorladen aus einem Speicher in die letzte Gruppe F12 bis
F15 durchgeführt
worden ist, ist es wahrscheinlicher, dass die erste Gruppe F0 bis
F3 vollständig
in den Dekodierer ausgelesen wurde und ist somit bereit, ein nachfolgendes
Instruktionswort aus dem Speicher zu empfangen. Die Anzahl von Zyklen,
die notwendig sind ein Instruktionswort zu dekodieren, variiert
in jeder Gruppe abhängig
von dem Instruktionsmodus der Maschine auf eine Weise, die nachfolgend
ausführlicher
beschrieben wird. Nichtsdestotrotz ist mindestens ein Zyklus zum
Auslesen und Dekodieren notwendig und somit versteckt die Verwendung
des Vorladepuffers eine Speicherlatenz.
-
Um
einen Zyklus einzusparen, wenn der Vorladepuffer leer ist oder nach
einer Verzweigung geleert wird, können Daten den Vorladepuffer
mit Hilfe eines Umgehungsschaltkreises BS umgehen. Wie nachfolgend ausführlicher
beschrieben wird, ist der Umgehungsschaltkreis als eine Mehrzahl
von Multiplexern (MUX0 bis MUX3) in 4 implementiert.
-
4 zeigt
ein ausführlicheres
Diagramm des Vorladepuffers und des zugeordneten Leseschaltkreises.
Die Speicherorte F0 bis F15 sind zum Zweck der Darstellung vertikal
ausgerichtet dargestellt.
-
Die
oben in 1 beschriebenen Steuerbits 6 enthalten
Leer-Merker EF1
bis EF4, die anzeigen, wenn eine vollständige 128-Bit-Zeile der Speicherorte leer ist,
so dass ein nachfolgendes Vorladen aus dem Speicher gestartet werden
kann. Wenn ein Vorladen aus dem Speicher durchgeführt wird
und Daten in dem Vorladepuffer empfangen wurden, wird der Leer-Merker
gelöscht,
um anzuzeigen, dass diese Speicherorte nun gefüllt sind.
-
Nun
wird das Auslesen des Vorladepuffers mit Bezug auf das schematische
Diagramm der 4 beschrieben. Der Vorladepuffer
umfasst vier Leseanschlüsse
RP1, RP2, RP3 und RP4. Diese Leseanschlüsse sind jeweils in der Lage,
ausgewählte
Speicherorte F0 bis F15 mit einem 32-Bit-Ausgang pf-buf-out1, 2,
3 oder 4 zu verbinden. Jedoch sind die Leseanschlüsse nicht
identisch. Der erste Leseanschluss RP1 weist 16 Eingänge auf,
von denen jeder mit einer entsprechendem Speicherort F0 bis F15
verbunden ist und von denen jeder mit dem Ausgang pf-buf-out1 verbunden
werden kann. Der zweite Leseanschluss RP2 weist 8 Eingänge auf,
die jeweils mit Speicherorten F1, F3, F5, F7, F9, F11, F13, F15
verbunden sind, um die Inhalte dieser Speicherorte selektiv mit
dem Ausgang pf-buf-out2 zu verbinden.
-
Der
dritte Leseanschluss RP3 weist vier Eingänge auf, die mit den Speicherorten
F2, F6, F10 und F14 verbunden sind, um selektiv die Inhalte dieser
Speicherorte mit dem Ausgang pf-buf-out3
zu verbinden. Der vierte Leseanschluss RP4 weist auch vier Eingänge auf,
die mit den Speicherorten F3, F7, F11 und F15 verbunden sind, um
selektiv die Inhalte dieser Speicherorte mit dem Ausgang pf-buf-out4
zu verbinden.
-
Die
Leseanschlüsse
RP1 bis RP4 werden durch den Lesezeiger RP von der Zuordnungseinrichtung 10 abhängig von
dem Instruktionsmodus der Maschine und der entsprechenden Anzahl
der Maschinenzyklen, die zum Dekodieren jedes Instruktionswortes
notwendig sind, gesteuert.
-
Alternativ
ist bei Instruktionen, die direkt aus dem Speicher über den
Dateneingabepfad 18 geliefert werden, die Steuerung der
Instruktionen, die an den Dekodierer abhängig von dem Instruktionsmodus
und dem Maschinenzyklus geliefert werden, zusätzlich über Multiplexer MUX0, MUX1,
MUX2 und MUX3 steuerbar. Diese empfangen an ihren Eingängen entsprechende
Bits des 128-Bit-Dateneingabepfades 18, um eine Bitfolge
von 32-Bit an jeden Multiplexer in jedem Maschinenzyklus bereitzustellen,
wie nachfolgend beschrieben wird.
-
Die
Auswahl, welche Instruktionen innerhalb des Instruktionswortes an
den Dekodierer 20 geliefert werden, wird abhängig von
dem Instruktionsmodus durchgeführt,
wie nachfolgend beschrieben wird. In 3 werden
die Symbole w0 bis w3 für
verschiedene Eingangsleitungen der Multiplexer MUX0 bis MUX3 verwendet,
um verschiedene Bitfolgen mit 32 Bit wie bei 4 darzustellen.
Die Definition jeder Bitfolge von 32 Bit hängt von dem Instruktionsmodus
ab, jedoch sind die Bits des Dateneingabepfades immer als w0 [0:31],
w1 [32:63], w2 [64:95], w3 [96:127] bezeichnet. Die Eingänge der
Multiplexer sind individuell so bezeichnet, dass man zwischen ihnen
unterscheiden kann. D.h., in dem GP16-Modus wird die erste Bitfolge
w0 in dem ersten Dekodierzyklus, Zyklus 0, an den Dekodierer 20 geliefert.
Dies stellt ein Paar von 16-Bit-Instruktionen,
slot0, slot1 (w0) für
die gleichzeitige Dekodierung durch den Dekoder 20 zur
Verfügung.
Im nächsten
Zyklus, Zyklus 1, wird die Bitfolge w1 bereitgestellt, die das nächste Paar
der 16-Bit-Instruktionen slot0, slot1 (w1) zum Dekodieren bereitstellt.
Bei dem GP16-Modus sind der Leseanschluss RP1 und der Multiplexer
MUX0 lediglich Ausleseeinrichtungen, die verwendet werden, und die
Steuerung des Wortes, das an den Dekodierer bereitgestellt wird,
wird durch den Multiplexer MUX0 unter der Steuerung des Signals
mux-ctrl0 und dem Lesezeiger RP durchgeführt. Wenn das Signal mux-ctrl0
den Leseanschlussausgang pf-buf-out1 auswählt, wählt der Lesezeiger die Eingänge F0 bis
F3 über
vier aufeinander folgende Zyklen, Zyklus 0 bis Zyklus 3, aus, um
aufeinander folgend w0 bis w4 auszulesen. Wenn der Speicherort F3
ausgelesen wurde, setzt der Leseanschlusszähler den Leseanschluss RP1
so zurück,
dass er aus den Speicherorten F4 bis F7 über die nächsten vier Zyklen ausliest.
Wenn der Puffer nicht verwendet wird, wird das erste Instruktionspaar
w0 durch den Multiplexer MUX0 ausgelesen. Das findet in Zyklus 0
statt, wenn der Eingang M00 des Multiplexers MUX0 ausgewählt ist.
In der Zwischenzeit wird die 128-Bit-Zeile in die erste Position
des Vorladepuffers geladen und der Lesezeiger zeigt auf die nächste Position,
die durch den Dekodierer ausgelesen werden soll. Daher wird im Zyklus
1 das nächste
Instruktionspaar w1 durch den Multiplexer MUX0 ausgelesen, indem
pf-buf-out1 ausgewählt
wird.
-
In
dem GP32-Modus werden in den ersten Maschinenzyklus die ersten 2
Instruktionen w0, w1 an den Dekodierer 20 bereitgestellt.
In dem nachfolgenden Zyklus, Zyklus 1, werden die nächsten zwei
Instruktionen w2, w3 an den Dekodierer bereitgestellt. Dieser verwendet
die Leseanschlüsse
RP1 und RP2 und die Multiplexer MUX0 und MUX1. Wenn das Signal mux-ctrl0 auf pf-buf-out1
eingestellt ist und mux-ctrl1 auf pf-buf-out2, wird der Lesezeiger RP für RP1 auf
F0 und auf F1 für
RP2 im Zyklus 0 eingestellt. In dem Zyklus 1 wird er auf F2 bzw.
F3 geändert.
Die Instruktionen werden dann über
die nächsten
zwei Zyklen von der nächsten
Gruppe der Speicherorte F4 bis F7 ausgelesen, indem die Einstellungen
der Leseanschlüsse
RP1 und RP2 abhängig von
dem Lesezeiger RP geändert
werden. Alternativ wird der erste Eingang M10 des Multiplexers MUX1
beim Lesen von dem Dateneingangspfad 18 in dem ersten Zyklus
eingestellt, um w1 (Bits 31 bis 62) auszulesen, und der erste Eingang
M00 des Multiplexers MUX0 wird eingestellt, um w0 (Bits 0 bis 31)
auszulesen. Somit werden die Instruktionen w0 und w1 dem Dekodierer 20 in
dem Zyklus 0 bereitgestellt. In der Zwischenzeit wird die 128-Bit-Zeile in den Vorladepuffer
geladen, so dass in dem nachfolgenden Zyklus, Zyklus 1, w2 und w3
aus dem Puffer gelesen werden, in dem pf-buf-out1 und pf-buf-out2
ausgewählt
werden.
-
In
dem VLIW-Modus werden vier 32-Bit-Instruktionen w0 bis w3 (slot0
bis slot3) gleichzeitig dem Dekodierer 20 in jedem Maschinenzyklus,
z.B. Zyklus 0, bereitgestellt. Die Multiplexer MUX2 und MUX3 werden entsprechend
den Steuersignalen mux-ctrl2 bzw. mux-ctrl3 eingestellt, um zu ermöglichen,
dass die Instruktionsworte w2 und w3 entweder von dem Puffer oder über den
Dateneingangspfad 18 ausgelesen werden. Die Einstellungen
von RP1 und RP2, MUX0 und MUX3 sind entsprechend wie in dem GP32-Modus.
Jedoch wird angemerkt, dass die Instruktionsworte w2 und w3, die
in dem GP32-Modus verbleiben würden,
in dem nachfolgenden Zyklus, z.B. Zyklus 1 in dem VLIW-Modus nun
ausgelesen wurden. Daher kann der Lesezeiger RP sofort zur nächsten Gruppe
der Speicherorte F4 bis F7 springen, um das nachfolgende VLIW-Instruktionswort, das
die nächsten
vier Instruktionen enthält,
auszulesen.
-
Daten
werden von den Multiplexern MUX0 bis MUX3 an die entsprechenden
Ausgangs-Flip-Flops FF0 bis FF3 über
eine Gruppe von Steuergatter, die als GC1, GC2 und GS0 bis GS3 bezeichnet
sind, geleitet. Die Steuergatter GC1, GC2 reagieren auf Modusänderungssignale
chmd1 bzw. chmd2, die der Vorladeeinheit anzeigen, dass der Instruktionsmodus,
in dem die Maschine betrieben wird, sich geändert hat. Die Steuergatter GS0
bis GS3 hängen
von den entsprechenden Stoppsignalen stop[0] bis stop[3] ab, um
zu verhindern, dass neue Daten an den Dekodierern von dem Ausgangs-Flip-Flop
eintreffen. Dies ermöglicht
es effektiv, den Dekodierer anzuhalten. Bei einem Stop werden die
Ausgänge
der Flip-Flops zu dem Eingang ihrer zugeordneten Steuerschalter
zurückgeführt, um
eine unnötige
Operation des nachfolgenden Dekodierers zu vermeiden.
-
Die
Betriebsweise der Vorladeeinheit in Abhängigkeit zu den Modusänderungssignalen
chmd1 und chmd2 wird nun beschrieben. Das Ausgangs-Flip-Flop FF0
ist mit einem einzelnen 32-Bit-Dekodierer
und mit zwei 16-Bit-Dekodierern verbunden. Wenn die Maschine sich
in dem GP16-Modus befindet, werden die Ausgänge der zwei 16-Bit-Dekodierer
für das
Instruktionspaar, das dem Flip-Flop FF0 bereitgestellt wird, ausgewählt. Wenn
die Maschine sich in dem GP32-Modus befindet, wird der Ausgang des
32-Bit-Dekodierers ausgewählt.
Die verbleibenden Flip-Flops FF1 bis FF3 werden jeweils mit dem
entsprechenden 32-Bit-Dekodierer verbunden.
-
Ein
erstes Modusänderungssignal
chmd1 signalisiert einen Wechsel des Maschineninstruktionsmodus
von GP32 zu GP16. Wenn die Maschine in dem GP32-Modus betrieben
wurde, betrachtet man die Situation zu Ende des Zyklus 0 mit Bezug
auf 2. Die Instruktionen w0 und w1 sind über die
Flip-Flops FF0 und FF1 an die entsprechenden 32-Bit-Dekodierer des
Dekodierers 20 angelegt worden. Jedoch impliziert nun die Änderung
des Instruktionsmodus, dass die 32-Bit-Abfolge, die zuvor als zweite
Instruktion w1 im Zyklus 0 des GP32-Modus betrachtet wurde, tatsächlich ein
Paar von 16-Bit-Instruktionen, die im Zyklus 1 des GP16-Modus angegeben
ist, enthält.
Somit muss der Ausgang des 32-Bit-Dekodierer, der mit dem Flip-Flop
FF1 verbunden ist, ignoriert werden, und die 32-Bit-Abfolge w1 muss
erneut an die zwei 16-Bit-Dekodierer, die mit dem Ausgangs-Flip-Flop
F0 verbunden sind, angelegt werden. Dies wird durch die Rückführungsleitung 42 von
dem Ausgang des Flip-Flop FF1 zum Eingang des Steuergatters CG1
erreicht.
-
Umgekehrt
gibt das Steuersignal chmd2 einen Wechsel des Instruktionsmodus
von GP16 zu GP32 an. Man betrachtet nun wieder das Ende des Zyklus
0 mit Bezug auf 2. Das Instruktionspaar, das
mit w0 bezeichnet ist, wurde gerade in dem GP16-Modus dekodiert
und die Erwartung ist, dass die Maschine nun auf das nächste Instruktionspaar
w1 wartet. Jedoch stellt das Wort w1 in dem GP32-Modus eine einzelne
Instruktion dar und das Modusänderungssignal
chmd2 ermöglicht
es, direkt über
das Steuergatter GC2 zu dem Ausgangs-Flip-Flop FF1 angelegt zu werden,
so dass es direkt an den Eingang des zugeordneten 32-Bit-Dekodierers
angelegt werden kann, der mit dem Ausgang des Flip-Flop FF1 verbunden
ist. Dies ermöglicht
es, dass die Instruktion w1 als eine einzelne 32-Bit-Instruktion dekodiert
wird. In dem nächsten
Zyklus können
die Instruktionen w2 und w3 normal übertragen werden, wie durch
Zyklus 1 in dem GP32-Modus in 2 angegeben
ist.
-
Aus
dem oben Beschriebenen wird klar, dass die Anzahl der Zyklen, die
notwendig sind, um alle vier Speicherorte in einer Gruppe auszulesen,
von dem Instruktionsmodus abhängt.
D.h., in dem GP16-Modus werden vier Zyklen benötigt, in dem GP32-Modus zwei
Zyklen und in dem VLIW-Modus ein Zyklus. Wenn alle Speicherorte
F0 bis F3 in der ersten Gruppe ausgelesen wurden, wird der erste
Leer-Merker EF1 auf den Zustand „gelöscht" gelöscht.
-
Die
Zuordnungseinrichtung steuert die Einstellung und das Löschen der
Leer-Merker mit Hilfe einer Information von dem Lesezeiger. Die
Zuordnungseinrichtung detektiert, wenn der Lesezeiger von einer
Zeile (128 Bits) zur nächsten übergeht.
Wenn dies erfolgt, wird der Leer-Merker, das der soeben ausgelesenen
Seite entspricht, gesetzt.
-
Der
Zustand eines Leer-Merkers, das gelöscht worden ist, wird durch
die Vorladeeinheit 8 entlang der Zeile 48 detektiert
und ein Vorladen auf eine nächste
Vorladeadresse wird in dem Vorladeprogrammzähler 16 gestartet.
Somit wird die nächste
Instruktionszeile aus dem Speicher vorgeladen und der Schreibzeiger
WP wird gesetzt, um in die Speicherorte F0 bis F3 zu schreiben.
In der Zwischenzeit hat sich der Lesezeiger zur zweiten Gruppe F4
bis F7 geändert,
um Instruktionen dieser Gruppe auszulesen und zu dekodieren. Wenn
diese Speicherorte leer sind, wird der Leer-Merker EF2 gelöscht, ein
nächstes
Vorladen aus dem Speicher durch die Vorladeeinheit 8 gestartet
und der Lesezeiger bewegt sich zur Gruppe F8 bis F11. Wie man sehen
kann, maskiert der Vorladepuffer eine Latenz der Vorladevorgänge aus
den Speichern von zumindest drei Zyklen in dem VLIW-Modus und eine
größere Anzahl
von Zyklen in dem GP32- und
GP16-Modus. Signale werden von dem Dekodierer entlang der Leitung 24b an
die Zuordnungseinrichtung 10 geliefert, die angeben, in
welchem Modus der Dekodierer arbeitet, so dass die Zuordnungseinrichtung
den Zuordnungs-Programmzähler 26 entsprechend
anpassen kann und die nächste
zu dekodierende Instruktion verfolgen kann, so dass der Lesezeiger
RP korrekt durch die Zustandsmaschine 28 angesteuert werden
kann.
-
Zum
Zweck des Beschreibens einer optimierten Implementation des Vorladepuffers
wird nun 5 beschrieben. 5 zeigt
eine sehr vereinfachte schematische Version, die für jede Bitfolge
w0 bis w3 in einer Speicherzeile von 128 Bits die notwendigen Verbindungen über die
Multiplexer MUX0 bis MUX4 an die Ausgangseinrichtungen FF0 bis FF4
darstellt. In 5 sei bemerkt, dass die Ausgangseinrichtungen
als port0 bis port3 bezeichnet sind. 5 kann am
besten in Verbindung mit 2 verstanden werden. D.h., in
dem GP16-Modus kann es notwendig sein, jeden der Bitfolgen zu 32
Bit w0 bis w3 über
den ersten Multiplexer MUX0 mit port0 zu verbinden. In dem GP32-Modus
kann es notwendig sein, die Bitfolgen w0, w2 mit dem ersten Multiplexer
MUX0 und die Bitfolgen w1, w3 mit dem zweiten Multiplexer MUX1 zu
verbinden. In dem VLIW-Modus kann jede Bitfolge w0 bis w3 direkt
mit seinem zugeordneten Multiplexer MUX0 bis MUX3 verbunden werden.
Weiterhin ist es niemals notwendig, die Bitfolge w0 an einen anderen
Multiplexer weiterzuleiten als MUX0.
-
-
Um 5 zusammenzufassen
zeigt die Tabelle 1 wie die vier Bitfolgen in der Speicherzeile
mit den Ausgangsanschlüssen
abhängig
von dem Instruktionsmodus der Maschine verbunden werden. Durch diese Merkmale
haben die Erfinder realisiert, dass es möglich ist, die Implementation
der Speicherzellen in den Pufferspeicherorten F0 bis F15 abhängig von
einer Bitfolge in der Speicherzeile, die die Pufferspeicherorte
speichern sollen, erheblich zu vereinfachen. Es ist aus 3 offensichtlich,
dass die erste Bitfolge w0 in den Pufferspeicherorten F0, F4, F8
oder F12 gespeichert wird. Die Bitfolge w1 wird in den Speicherorten
F1, F5, F9 oder F13 gespeichert. Die Bitfolge w2 wird in den Speicherorten
F2, F6, F10 oder F14 gespeichert. Die Bitfolge w3 wird in den Speicherorten
F3, F7, F11 oder F15 gespeichert.
-
6a zeigt
eine Speicherzelle MC1, die zum Speichern der ersten Bitfolge w0
geeignet ist. Sie weist einen einzelnen Schreibanschluss d, der
zum Empfangen eines Schreibaktivierungssignals wen0 ausgelegt ist,
und einen einzelnen Leseanschluss q0, der zum Empfangen eines Leseaktivierungssignals
ren0 ausgelegt ist, sowie einen Lesezeigereingang iren0 auf. Die
Speicherorte F0, F4, F8 und F12 umfassen 32 solcher Zellen zum Anlegen
des 32-Bit-Wortes an den ersten Multiplexer MUX0.
-
Die 6b zeigt
den Aufbau einer Speicherzelle MC2, der für die Speicherorte F1, F2,
F5, F6, F9, F10, F13 und F14 verwendet werden kann. Die Speicherzelle
weist einen einzelnen Schreibeingang d auf, der zum Empfangen eines
Schreibaktivierungssignals wen0 ausgelegt ist. Die Speicherzelle
MC2 weist zwei Leseausgänge
q0, q1 auf, die jeweils eine Ausgabe bereitstellen, die von den
Leseaktivierungssignalen ren0, ren1 und der Auswahl des Lesezeigers
an den Eingängen
iren0, iren1 abhängen.
Eine solche Speicherzelle, die an den Speicherorten verwendet wird,
ermöglicht
es, dass die Bitfolgen w1, w2 selektiv an MUX0 und MUX1 (im Falle
von w1) und MUX0, MUX2 (im Falle von w2) geschrieben werden.
-
Schließlich zeigt 6c eine
Speicherzelle MC3, die für
F3, F7, F11 und F15 geeignet ist. Die Speicherzelle MC3 weist einen
einzelnen Schreibeingang d auf, der für ein Schreibaktivierungssignal
wen0 ausgelegt ist. Sie weist drei Leseausgänge q0, q1 und q2, die jeweils
eine Ausgabe aufweisen, die von den Leseaktivierungssignalen ren0,
ren1, ren2 und den Lesezeigerauswahlen an den Eingängen iren0,
iren1, iren2 abhängen.
Durch die Verwendung dieser Speicherzellen kann die Bitfolge w3
selektiv mit MUX0, MUX1 und MUX3 abhängig von der benötigen Lesezeigerauswahl
verbunden werden.
-
Mit
dem oben beschriebenen Aufbau werden lediglich acht Leseanschlüsse pro
Seite in dem Speicher anstelle von 16 benötigt. Dies bedeutet eine kleinere
Speicherfeldanordnung und reduziert die Verdrahtungskomplexität. Weiterhin
können
die Multiplexer MUX0 bis MUX3 vereinfacht werden, so dass es möglich ist,
anstelle von vier 5:1-Multiplexern, ein 5:1-Multiplexer MUX0, ein 3:1-Multiplexer,
MUX1, und zwei 2:1-Multiplexer, MUX2,
MUX3 zu verwenden. Somit reduziert dies die Siliziumfläche, die
notwendig ist, den Schaltkreis und die Verdrahtungskomplexität zu implementieren.