DE69315630T2 - Datenzugriff in einem RISC-Digitalsignalprozessor - Google Patents

Datenzugriff in einem RISC-Digitalsignalprozessor

Info

Publication number
DE69315630T2
DE69315630T2 DE69315630T DE69315630T DE69315630T2 DE 69315630 T2 DE69315630 T2 DE 69315630T2 DE 69315630 T DE69315630 T DE 69315630T DE 69315630 T DE69315630 T DE 69315630T DE 69315630 T2 DE69315630 T2 DE 69315630T2
Authority
DE
Germany
Prior art keywords
data
address
streamer
register
word
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69315630T
Other languages
English (en)
Other versions
DE69315630D1 (de
Inventor
Keith M Bindloss
Lawrence F Blank
Ricke W Clark
Kenneth E Garey
George A Watson
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intellectual Ventures Fund 83 LLC
Original Assignee
Rockwell International Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Rockwell International Corp filed Critical Rockwell International Corp
Application granted granted Critical
Publication of DE69315630D1 publication Critical patent/DE69315630D1/de
Publication of DE69315630T2 publication Critical patent/DE69315630T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Description

    Hintergrund der Erfindung
  • Ein RJSC-Computer (RISC Reduced Instruction Set Computer Computer mit verringertem Anweisungssatz) genießt einen verbesserten Durchsatz, in dem die zentrale Verarbeitungseinheit (CPU = Central Processing Unit) Daten empfängt, teilweise speichert und ausgibt, und zwar an Register anstatt an Speicheradressen. Register können physisch näher an der CPU angeordnet werden als es ein Speicher kann, und sie arbeiten auch schneller. Die einzigen zulässigen Gegenwirkungen mit dem Speicher sind Laden (LOAD) von Daten vom Speicher in ein Register und speichern (STORE) von Daten aus einem Register in den Speicher. Es ist diese stark verringerte Anzahl von Instruktionen bzw. Anweisungen, die einem RISC seinen Namen gibt.
  • Viele Anwendungen, insbesondere die digitale Signalverarbeitung (DSP) erfordern einen intensiven Zugang zum Speicher. Eine typische Anweisung, wie beispielsweise MAC (multiply and accumulate = Multiplizieren und Akkumulieren), d. h. Multiplizieren von zwei Zahlen miteinander und Addieren des Produktes mit einer dritten Zahl, kann mehrere Speicherzugriffe erfordern. Die frühere RISC- Technik ist es gewesen, den Multiplikanten in ein erstes Register zu laden (ein Takt- bzw. Clockzyklus), den Multiplikator in ein zweites Register zu laden (ein zweiter Taktzyklus) und die zwei Zahlen zusammen zu multiplizieren und das Produkt zu den Inhalten eines dritten Registers zu addieren, und die Summe zurück in dem dritten Register anzuordnen (ein dritter Taktzyklus). Alle diese Berechnungen können in dem gleichen Zeitausmaß fortfahren, wie notwendig war, um eine einzelne Anzahl vom Speicher zu holen. Diese Ungleichheit hat Verbesserungen zur bloßen RISC-Architektur begünstigt.
  • Das Voreinholen kann die MAC-Vorrichtung die ganze Zeit beschäftigt halten, anstatt nur ein Drittel der Zeit, wenn die Adresse, von der die Daten zu speichern sind, mehrere Takt- bzw. Clockzyklen im voraus bekannt ist. Falls auf lange Läufe bzw. Durchlässe von aufeinanderfolgenden Adressen zuzugreifen ist, benötigt man relativ we nige Zyklen, um die anfängliche Adresse festzulegen, ob jede Adresse oder nur jede weitere Adresse (oder jede dritte Adresse) aufgerufen bzw. darauf zugegriffen werden sollte, usw.. Wenn auf mehrere kurze Durchläufe jedoch zuzugreifen ist, kann der Kopf, der beim Aufbau von jedem Durchlauf vorkommt, einschränkend werden. Ein Prozessor mit mehreren Ausführungseinheiten kann die MAC-Vorrichtung beschäftigt halten jedoch sind mehrere Einheiten (oder schlechter, mehrfache Prozessoren) mehrfach teuer. Eine Berechnungseinheit anders als das MAC hat ein ähnliches Problem. Die vorliegende Erfindung sieht eine kostengünstige Alternative für das Problem vor, die Berechnungseinheit beschäftigt zu halten.
  • Zusammenfassung der Erfindung
  • Die vorliegende Erfindung beutet die Tatsache aus, daß die Register nicht identisch sein müssen und es im allgemeinen nicht sind. Einige Register ("Datenregister") werden verwendet, um Daten zwischen der CPU und dem Speicher hin- und herzuleiten, andere Register werden verwendet, um Zwischenergebnisse zu speichern, und noch andere werden andere Zwecke haben. Die vorliegende Erfindung zieht in Betracht, daß jedes der Datenregister mit zwei anderen Nicht-Datenregistern assoziiert sein wird, die im folgenden Indexregister und Kontextregister genannt werden. Dieses Trio von Datenregister, Indexregister und Kontextregister wird "Streamer" (Datenstromvorrichtung) genannt, da sie Daten zu und von dem Speicher strömen läßt. Eine Unterstützungslogik muß auch vorgesehen werden. Falls erwünscht könnten der Index und der Kontext getrennte Felder in einem einzigen Register sein, getrennte Kontextfelder könnten in getrennten Registern gelegen sein, usw. obwohl dies nicht bevorzugt wird. "Register" wie hier verwendet, umschließt daher "Feld".
  • Ein Streamer bzw. eine Datenstromvorrichtung ist derart aufgebaut, daß, wenn die CPU nach Daten vom Datenregister ruft, drei Dinge passieren. Als erstes werden die Daten (das heißt die Inhalte des Datenregisters) an die CPU geliefert. Als zweites wird der Index (das heißt, die Inhalte des Indexregisters) verwendet, um eine Adresse zu erzeugen. In seiner einfachsten Form ist der Index die Adresse und wird direkt an den Speicher geleitet. Falls jedoch erwünscht, kann der Index einen ROM oder eine andere Vorrichtung antreiben, die wiederum eine Adresse an den Speicher leitet. Jedenfalls wird der Speicher die Daten bei dieser Adresse in das Datenregister laden. Diese Daten werden im allgemeinen für die CPU fertig sein, wenn die CPU das nächste Mal nach Daten aus dem Datenregister ruft. Als drittes wird der Kontext (das heißt die Inhalte des Kontextregisters) zu einem Adreßgenerator geleitet. Dieser Adreßgenerator ist vom ROM oder einer anderen oben erwähnten Vorrichtung getrennt und muß vorhanden sein, auch wenn der ROM/die andere Vorrichtung vollständig nicht vorhanden ist. Der Adreßgenerator empfängt auch den Index, der gegenwärtig im Indexregister ist. Er verwendet den Kontext und den Index, um den Index zu aktualisieren.
  • Das Kontextregister wird so genannt durch die Anwendung des Ausdruckes "Kontextschaltung" (Kontext switching) bei Multi-Task-Computern bzw. Computern mit mehreren Aufgaben, Ein Computer kann mehreren Anwendern dienen, jedem mit seiner eigenen Aufgabe (task). Wenn die Zeit kommt, bei einer Aufgabe zu stoppen, und die Arbeit an einer weiteren zu starten, muß der Computer zuerst die Inhalte von allen der Register speichern. Dieser angeordnete Satz von Inhalten wird ein Kontext genannt, da es bedeutungslos ist, über den Inhalt eines speziellen Registers zu sprechen, ohne seinen Kontext festzulegen: An welcher Arbeit der Computer arbeitete, zu welcher Codezeile er gekommen ist, welche Zwischenergebnisse er bis dahin berechnet hatte, usw..
  • Es ist in ähnlicher Weise bedeutungslos, über den Inhalt des Indexregisters zu sprechen, ohne im Kontextregister festzulegen bzw. zu beschreiben, wie der nächste Index (Adresse) zu berechnen ist. In der einfachsten Situation kann die nächste zu betrachtende Adresse genauso wie die nächste Adresse numerisch in einem einzelnen Adressenblock sein. Eine komplexere Situation ist jedoch in Fig. 1 gezeigt. Ein rechteckiger Speicher 10 besitzt eine niedrige Adresse 12, und zwar mit steigenden Adressen, wenn die obere Zeile 14 von links nach rechts abgetastet bzw. gescant wird, bis eine rechte Endadresse 16 der oberen Zeile 14 erreicht ist. Die nächst höhere Adresse ist die linke Endadresse 18 der zweiten Zeile 20. Es sei angenommen, daß nur ein unterer Speicher 22 abzutasten oder zu scannen ist. Er besitzt eine untere Zeile 24 mit einer Adresse 26 des linken Endes und einer Adresse 28 des rechten Endes, jedoch ist die Adresse 30 des linken Endes der zweiten Unterzeile 32 nicht die numerisch inkrementierte Adresse wie es bei den Adressen 16 und 18 für das linke und rechte Ende der Fall war.
  • Eine noch kompliziertere Situation wird dargelegt, wenn, wie in Fig. 2 gezeigt, ein Ring zwischen zwei konzentrischen Ellipsen auf einem Schirm angezeigt wird, wobei jedes Pixel mit einer Adresse im Speicher assoziiert ist, und wobei nur die Punkte innerhalb des Rings von Interesse sind. In dieser Situation würde die Abtastung von jeder Linie auf dem Schirm die Berechnung von bis zu vier Punkten auf jeder Abtastlinie erfordern, und nur auf die Adressen zwischen den geeigneten Punkten zugreifen. Ein ziemlich komplizierter Adreßgenerator ist erforderlich, um sowohl die einfachen als auch die komplexen Beispiele handzuhaben, die gerade gegeben wurden.
  • Es sei im Moment angenommen, daß eine spezielle CPU nur zwei damit assozuerte Streamer bzw. Datenstronvorrichtungen besitzt, das heißt nur zwei Trios von Datenregistern, Indexregistern und Kontextregistern, da nur auf zwei Datenregister gleichzeitig zugegriffen werden muß. Jeder Streamer (Streamer A oder Streamer B) muß dann damit assoziiert einen Adreßgenerator (Generator A odergenerator B) aufweisen, der fähig ist, sein Indexregister gemäß irgendeiner Anzahl von Regeln zu aktualisieren, wobei die Regel durch ihr Kontextregister identifiziert wird. Wenn die CPU irgendein Datenregister ausliest, tut sie simultan folgendes:
  • (a) Sie aktiviert den entsprechenden Adreßgenerator, um zu beginnen, den Index in dem Indexregister zu modifizieren, und zwar gemäß der in dem Kontextregister festgelegten Regel;
  • (b) sie signalisiert dem Speicher, das Laden der Datenregister mit den Daten zu starten, die an der Adresse gegenwärtig geladen sind (obwohl nicht für lange), und zwar in dem Indexregister festgelegt; und
  • (c) sie aktiviert einen Wandler, der die in dem Kontextregister erwähnte Regel verwendet, um die Daten umzuwandeln, und zwar von der Form, in der sie in den Speicher gespeichert waren, auf die Form, in der sie in dem Datenregister am nützlichsten sein wird.
  • Wenn die CPU nur auf zwei Datenregister gleichzeitig zugreifen kann, müssen nur zwei Adreßgeneratoren vorgesehen werden, um den maximalen Durchsatz beizubehalten. Für eine kostengünstige Einrichtung könnte ein einzelner Generator geteilt werden, es könnte jedoch Leistung geopfert werden. Falls auf mehr (oder weniger) Datenregister gleichzeitig zugegriffen werden kann, dann sollten mehr (oder weniger) Adreßgeneratoren vorgesehen werden. Bei den meisten Anwendungen sind zwei Generatoren am geeignetsten. Jedoch ist die Anzahl der Streamer bzw. Datenstromvorrichtungen nicht durch die Anzahl der Adreßgeneratoren eingeschränkt. Auch wenn nur zwei Adreßgeneratoren verwendet werden, kann es passend sein, verschiedene Sätze von Streamer bzw. Datenstromvorrichtungsregistern vorzusehen, vielleicht sechzehn davon.
  • Jedes der zwei Datenregister, die von den Adreßgeneratoren bedient werden (einer für jedes Datenregister) ist ein Teil eines einzelnen Streamers, der ein einzelnes Kontextregister und ein einzelnes Indexregister besitzt. Da nur zwei Datenregister bei irgendeinem Zyklus gelesen werden, müssen nur zwei Indexregister aktualisiert werden (gemäß der Regeln in den zwei Kontextregistern), und zwar bei irgendeinem Zyklus. Die Adreßgeneratoren können vollständig ohne Speicher aufgebaut werden. Somit modifiziert jeder Adreßgenerator den Index in dem assoziierten Indexregister gemäß einer Regel, die vollständig durch den Kontext in dem assoziierten Kontextregister definiert wird. Der Adreßgenerator kann so aufgebaut sein, daß der Kontext des Streamers, auf den während des vorherigen Zyklus zugegriffen wurde, keinen Effekt hat, und dies kann getan werden, ungeachtet dessen, ob auf den gleichen Streamer zweimal in einer Reihe bzw. Zeile zugegriffen wurde, oder ob auf unterschiedliche Streamer erfolgreich zugegriffen wurde.
  • In einem entsprechenden Ausführungsbeispiel der vorliegenden Erfindung sind dem gleichen physischen Streamerdatenregister drei getrennte Adressen gegeben, um drei unterschiedliche Arten zur Anwendung des Indexregisters oder IR und des Kontextregisters oder CR des Streamers zu beschreiben, um auf Daten in (oder aus) dem Datenregister oder DR des Streamers zuzugreifen. Ein Streamer in diesem Ausführungsbeispiel wird "Mehrfachadressen-Streamer" (multiple address streamer) genannt. Mehrfachadressen- Streamer und Einzeladressenstreamer können in dem gleichen Datenprozessor vorhanden sein.
  • Die erste DR Adresse (oder einige ihrer Bits) sind derart aufgebaut, um mit dem Kontext (oder einigen seiner Bits) kombiniert zu werden, und zwar derart, um den Vorholen- Befehl (pre-fetch command) auszuschalten bzw. zu disabeln. Auf diese Streameradresse wird gewöhnlicherweise zugriffen, wenn auf Daten an einer speziellen Speicheradresse wiederholt zugegriffen werden muß.
  • Wenn auf die zweite DR-Adresse zugegriffen wird, wird sie (oder einige ihrer Bits) mit dem Kontext (oder einigen seiner Bits) kombiniert, um anzuzeigen, daß der Index um eine erste Versetzung zu inkrementieren ist. Diese erste Versetzung kann in geeigneter Weise in einem anderen Teil des CR gelegen sein, kann jedoch alternativ in einem vollständig getrennten Register gelegen sein, falls erwünscht. Sie kann sogar vollständig implizit sein, beispielsweise "weitergeschaltet um eins" bzw. "Inkrement um eins", wie erwünscht, wenn eine innere (nicht am Ende liegende) Adresse in dem Unterspeicher aufgerufen wird.
  • Das Aufrufen bzw. Zugreifen auf die dritte DR-Adresse bewirkt in ähnlicher Weise, daß auf eine zweite Verschiebung zugegriffen wird. Dies wird in geeigneter Weise am rechten Ende einer Abtastunterzeile bzw. Scanunterzeile des Unterspeichers getan, der abgetastet bzw. gescant wird. Wenn der Unterspeicher 22 rechteckig ist (Fig. 1), wird diese dritte Veränderung konstant sein. Sie kann einfach teilweise in dem CR gespeichert werden, wodurch eine Flexibilität bei der Auswahl des abzutastenden Unterspeichers vorgesehen wird, was jedoch kein getrenntes Register erfordert. Ein solches getrenntes Register ist wünschenswert beispielsweise in dem Doppel-Ellipsen- Unterspeicher 34, der in Fig. 2 gezeigt ist. Während die CPU das Innere des Rings abtastet bzw. scant, kann ein getrennter Coprozessor die Verschiebung berechnen, die benötigt wird, um zum linken Ende der nächsten Unterzeile zu springen. Dies kann (Unterzeilen 36, 38) oder kann nicht (Unterzeilen 40, 42) von der gleichen Abtastzeile des Speichers 10 insgesamt genommen sein.
  • Das Datenregister kann in ein ausgedehntes bzw. erweitertes Datenregister ausgedehnt werden, was aufweist, daß das Datenregister sauber ist, und weiter ein Datenausdehnungsregister nach links. Die CPU kann Halbwort-(16-Bit)- Paare verarbeiten, und auf Daten wird vom Speicher in Wort-(32-Bit)-Grenzen zugegriffen werden. 16 und 32 Bit werden für Halbwort und Wortgrößen bevorzugt, jedoch können andere Größen verwendet werden, falls erwünscht. Jedoch kann das Halbwort- (HW-) Paar an einer ungeraden HW- Adresse gelegen sein, und daher zwei Worte auseinanderspreizen. Ein einzelner Zugriff eines HW-Paars kann daher zwei Wortzugriffe erfordern. Jedoch kann ein Strom von N aufeinanderfolgenden HW-Paar Zugriffen bei ungeraden HW- Adressen in N+1 Wortzugriffen durchgeführt werden, und zwar unter Verwendung eines erweiterten Datenregisters. Jeder HW-Paaroperand verwendet das hohe HW von einem Speicherzugriff t und das niedrige HW von einem Speicherzugriff t+1.
  • Streamerinitialisierung und Aktualisierung
  • Die Streamerinitialisierung wird durchgeführt unter Verwendung der IS-Instruktion und bezieht sich zuerst auf die Initialisierung des Index- und/oder Kontextregisters eines Streamers, und dann optional auf die Verwendung dieser Register, um auf einen Operanden von Speicher zuzugreifen, und zwar zur Initialisierung der erweiterten Datenregister. Ein Operandengualifikator zeigt an, wie, falls überhaupt, der Quellenoperand bei der Initialisierung des Index und/oder Kontextregisters anzuwenden ist.
  • Die Initialisierung des Datenregisters ist nützlich, wenn der Streamer für Quellenoperanden zu verwenden ist. Zur Anwendung für Bestimmungsoperanden erfordert das Datenregister keine Initialisierung.
  • Ein Bestimungsgualifikator steuert, ob oder ob nicht der Datenregister initialisiert wird, und falls dies so ist, welche Verschiebung bei der Modifikation des Index zu verwenden ist. Die Voreinstellung bzw. der Default ist der Nicht-Vorholen-Bestimmungsgualifikator, NPF (NPF = no prefetch), was die Anweisung vollendet, und zwar ohne irgendeinen Speicherzugriff oder eine Modifikation am Datenregister. Der Vorhol-Qualifikator (prefetch-gualifier) PF bedeutet, das Datenregister vom Speicher zu beladen, und zwar ohne weitere Modifikation am Indexregister. Das Vorholen (prefetch) mit der Versetzung Eins/Zwei-Qualifikatoren, PFD1 und PFD2, bedeutet, die Daten- und Datenerweiterungsregister vom Speicher zu initialisieren und dann das Indexregister nachzumodifizieren. Es wird hilfreich sein, auf die Kombination des Datenregisters Bezug zu nehmen, welches am signifikantesten Ende (most significant end) durch das Datenerweiterungsregister als das erweiterte Datenregister erweitert bzw. ausgedehnt ist.
  • Die Initialisierung des Datenregisters hängt auch vom Betriebszustand bzw. Modus des Streamers ab, nachdem das Kontextregister initialisiert worden ist und detaillierter unten beschrieben worden ist.
  • Standardbetriebszustand-Datenregisterinitialisierung
  • Wenn man die IS-Anweisung im Standardbetriebszustand ausführt, nachdem der Index und/oder die Kontextregister durch den Quellenoperanden initialisiert worden sind, ist es der nächste Schritt, die neuen Index/Kontextwerte zur Initialisierung des ausgedehnten bzw. erweiterten Datenregisters zu verwenden. Wenn der Bestimmungsqualifikator NPF ist, wird das erweiterte bzw. ausgedehnte Datenregister nicht initialisiert, und die Anweisung ist vollständig ausgeführt worden. Falls der Qualifikator PF ist, wird das Indexregister als Speicheradresse entsprechend der in dem Kontextregister festgelegten Datenumwandlung verwendet, und die Daten vorn Speicher werden in das Datenregister nach der Datenartumwandlung eingetragen bzw. eingegeben. Es werden keine zusätzlichen Veränderungen am Indexregister vorgenommen, und die Anweisung ist vollständig ausgeführt worden. Wenn der Bestimmungsqualifikator PFD2 oder PFD2 ist, hängt die Anweisungsausführung davon ab, ob oder ob nicht die Indexregisteradresse auf der Grenze ist. Das Indexregister wird gemäß der genannten Art skaliert, die von der Datenartumwandlung abhängt, die in dem Kontextregister festgelegt ist. Für alle Datenartumwandlungen, die einzelne Elemente aus dem Speicher lesen, ist die Indexregisteradresse immer auf der Grenze. Jedoch für die Umwandlungen, die Halbwortpaare lesen, ist die Elernentgröße ein Halbwort, und für Umwandlungen, die Bytepaare lesen, ist die Elementgröße ein Byte. Daher können für diese Umwandlungen die Indexregisteradressen auf der Grenze oder von der Grenze weg sein. Auf der Grenze bedeutet, daß beide Mitglieder des Paares die gleiche Paaradresse im Speicher sich teilen, und könren daher in dem gleichen Speicherzugriff geholt werden. Das heißt, beide Halbworte des Halbwortpaares können zusammen als ein Wort aufgerufen werden, und auf beide Bytes des Bytepaares kann vom gleichen Speicherhalbwort zugegriffen werden. Weg von der Grenze impliziert, daß zwei Speicherzugriffe erforderlich sind, um beide Elemente des Elementpaares zu bekommen.
  • Falls auf der Grenze, wird das Indexregister als die Speicheradresse zum Zugriff auf das Element oder das Elementpaar vom Speicher verwendet, das datenart-umgewandelt wird bzw. bezüglich der Datenart umgewandelt wird und in das Datenregister geschrieben wird. Das Indexregister wird dann mit der Verschiebung eins oder die Verschiebung zwei aktualisiert, wie von PFD1 bzw. PFD2 ausgewählt, und die Ausführung ist vollendet.
  • Falls von der Grenze weg, sind zwei Speicherzugriffe erforderlich, um das ausgedehnte bzw. erweiterte Datenregister zu initialisieren. Für den ersten Zugriff wird das Indexregister in eine Elementpaaradresse umgewandelt, und zwar durch Fallenlassen des am wenigsten signifikanten Bits (least significant bit). Das Elementenpaar vom Speicher ist bezüglich der Datenart umgewandelt, um ein Halbwortpaar zu bilden, welches in das erweiterte bzw. ausgedehnte Datenregister geladen wird, so daß das am wenigstens signifikante Halbwort das obere Halbwort des Datenregisters einnimmt, und daß das am meisten signifikante Halbwort das untere Halbwort des Datenerweiterungsregisters einnimmt. Die Verschiebung eins oder die Verschiebung zwei, wie jeweils von PFD1 bzw. PFD2 ausgewählt, wird zum Indexregister addiert.
  • Dann wird für den zweiten Zugriff das aktualisierte Indexregister in eine Elementpaaradresse umgewandelt, und zwar durch Fallenlassen des am wenigsten signifikanten Bits. Das Elementpaar vorn Speicher wird bezüglich der Datenart umgewandelt, um ein Halbwortpaar zu bilden, welches in das erweiterte Datenregister geladen wird, und zwar an den gleichen Bitpositionen wie beim ersten Zugriff, während das untere Halbwort des Erweiterungsregisters in das untere Halbwort des Datenregisters geschoben wird. Wiederum wird die Verschiebung eins oder die Verschiebung zwei, wie von PFD1 bzw. PFD2 ausgewählt, zum Indexegister zugegeben.
  • Standardbetriebszustand-Datenregisteraktualisierung
  • Wenn ein Standardbetriebszustand-Streamerdatenregister als ein Quellenoperand bezeichnet wird, treten die folgenden Schritte auf, nachdem das Datenregister verfügbar gemacht ist. Wenn die untere redundante Adresse (A) verwendet wird, um auf das Datenregister Bezug zu nehmen, dann tritt kein Speicherzugriff auf, und das Indexregister wird nicht modifiziert. Wenn die mittleren (B) oder oberen (C) redundanten Adressen verwendet werden, dann hängt die Ausführung davon ab, ob oder ob nicht der Index auf der Grenze ist.
  • Falls er auf der Grenze ist, wird das Indexregister als die Speicheradresse zum Zugriff auf ein Element oder ein Elementpaar vom Speicher verwendet, welches bezüglich der Datenart umgewandelt wird und in das Datenregister geschrieben wird. Das Indexregister wird dann mit Verschiebung eins oder Verschiebung zwei aktualisiert, wie von der mittleren (B) bzw. oberen (C) redundanten Adresse ausgewählt, und die Aktualisierung ist vollendet worden.
  • Falls weg von der Grenze, wird das Indexregister in eine Elementpaaradresse umgewandelt, und zwar durch Fallenlassen des am wenigsten signifikanten Bits. Das Elementpaar vom Speicher wird bezüglich der Datenart umgewandelt, um ein Halbwortpaar zu bilden, welches in das erweiterte Datenregister geladen wird, so daß das am wenigsten signifikante Halbwort das obere Halbwort des Datenregisters einnimmt, und das am meisten signifikante Halbwort nimmt das untere Halbwort des Datenerweiterungsregisters ein, während das untere Halbwort des Erweiterungsregisters in das obere Halbwort des Datenregisters geschoben wird. Wiederum wird die Verschiebung eins oder die Verschiebung zwei, wie von der mittleren (B) bzw. oberen (C) redundanten Adresse ausgewählt, zum Indexregister addiert.
  • Wenn das Standardbetriebszustands-Streamerdatenregister als ein Bestimmungsoperand bezeichnet wird, wird das Anweisungsergebnis in das Datenregister geschrieben, und die folgenden Schritte treten auf. Wenn die untere redundante Adresse (A) verwendet wird, um sich auf das Datenregister zu beziehen, tritt kein Speicherzugriff auf, und das Indexregister wird nicht modifiziert. Wenn die anderen redundanten Adressen verwendet werden, dann werden die Verschiebung eins oder die Verschiebung zwei, wie von der mittleren (B) bzw. oberen (C) redundanten Adresse ausgewählt, zum Indexregister addiert, nachdem das Indexregister verwendet wird, um eine Speicheradresse vorzusehen, um den Bestimmungsoperanden zu speichern.
  • Stapelbetriebszustand-Datenregisterinitialisierung
  • Die Initialisierung des Datenregisters ist nicht für den Stapelbetriebszustand (Stack Mode) erforderlich, falls der Stapel (stack) leer ist. Wenn daher bei der Vollendung einer IS-Anweisung das Kontextregister den Stapelbetriebszustand beschreibt bzw. festlegt, dann ist der einzige definierte Bestimmungsqualifikator NPF, was bedeutet, daß das Datenregister nicht zu initialisieren ist. Wenn der Stapel nicht leer ist, müssen die Registerinhalte gespeichert und wieder geladen werden. Die Inhalte des Datenregisters können wie bei den anderen Registern gespeichert und wieder aufgerufen werden, oder die Daten können in den Speicher und den Index geschoben werden und der Kontext kann gespeichert werden. Dies würde gefolgt werden durch eine Wiederherstellung des Index und des Kontext und das Aufrufen (popping) der Daten.
  • Stapelbetriebszustand-Datenregisteraktualisierung
  • Wenn ein Stapelbetriebszustand-Streamer (Stack Mode Streamer) als ein Quellenoperand bezeichnet wird, ist das Datenregister vorgesehen, und nichts anderes passiert, wenn die untere redundante Adresse (A) verwendet wird. Wenn eine weitere redundante Adresse verwendet wird, wird das Datenregister vorgesehen, und das Indexregister wird als eine Speicheradresse verwendet, und zwar gemäß der Datenartumwandlung, die in dem Kontextregister beschrieben bzw. festgelegt wird, es wird auf den Speicher zugegriffen, die ausgelesenen Daten werden bezüglich der Datenart umgewandelt und die Ergebnisse werden zurück in das Datenregister geschrieben. Auch wird das Indexregister um eins oder zwei dekrementiert, und zwar abhängig davon, ob die mittlere (B) bzw. obere (C) redundante Adresse verwendet wird.
  • Wenn ein Streamer als ein Bestimmungsoperand bezeichnet wird, wird der Bestimmungsoperand in das Datenregister geschrieben, und falls die untere redundante Adresse (A) verwendet wird, passiert sonst nichts. Falls eine weitere redundante Adresse verwendet wird, wird das Indexregister um eins oder zwei inkrernentiert, und zwar abhängig davon, ob die mittlere (B) oder obere (C) redundante Adresse jeweils verwendet wird. Das Datenregister wird bezüglich der Datenart umgewandelt und an der Speicherstelle gespeichert, und zwar festgelegt durch das aktualisierte Indexregister, dann wird der Bestimmungsoperand auf das Datenregister geschrieben.
  • Bit-Feld-Betriebszustands-Datenregisterinitialisierung
  • Wenn man die IS-Anweisung im Bit-Feld-Betriebszustand (Bit-Field Mode) ausführt, nachdem das Index- und/oder Kontextregister von dem Quellenoperand initialisiert worden ist, ist es der nächste Schritt, die neuen Index/Kontextwerte zur Initialisierung des erweiterten Datenregisters zu verwenden. In diesem Betriebszustand wird das Indexregister auf eine Bitadrese skaliert. Wenn der Bestimmungsgualifikator NPF ist, wird das erweiterte Datenregister nicht initialisiert, und die Anweisung ist vollständig ausgeführt worden. Der PF-Qualifikator wird für den Bit-Feld-Betriebszustand nicht definiert.
  • Für die anderen Qualifikatoren, FPD1 und FPD2 ist es das Ziel, das erweiterte Datenregister mit einem oder zwei Worten des Speichers zu laden, so daß das Bit im Speicher, auf welches vom Indexregister zugegriffen wird, im unteren Halbwort des Datenregisters erscheint. Die Ausführung ist dieselbe für die beiden Qualifikatoren.
  • Dies wird in der folgenden Weise eingerichtet. Falls das Indexregister auf ein Bit im am wenigsten signifikanten Halbwort eines Wortes zeigt (das fünfte Bit des Indexregisters ist eine NULL), dann wird nur ein Zugriff erforderlich. Die Wortadresse, die durch das Fallenlassen der fünf am wenigsten signifikanten Bits des Indexregisters erhalten wird, wird verwendet, um auf den Speicher zuzugreifen, und die Inhalte des Speichers werden in das Datenregister geschrieben. Dann wird das Indexregister um die Integer-Konstante bzw. die ganzzahlige Konstante 48 gesteigert.
  • Wenn jedoch das Indexregister auf ein Bit im am meisten signifikanten Halbwort eines Wortes zeigt (das fünfte Bit des Indexregisters ist eine EINS) dann werden zwei Speicherzugriffe erforderlich. Für den ersten Zugriff wird die Wortadresse, die gebildet wird durch Fallenlassen der am wenigsten signifikanten fünf Bits des Indexregisters, verwendet, um auf den Speicher zuzugreifen, und die Inhalte des Speichers werden in das Datenregister geschrieben. Gleichzeitig wird das Indexregister um die Integer- Konstante bzw. die ganze Zahl 16 gesteigert, was bewirkt, daß die Wortadresse inkrementiert wird. Der zweite Zugriff verwendet diese neue Wortadresse, und das aus dem Speicher ausgelesene Datenwort wird in das obere Halbwort des Datenregisters und das untere Halbwort des Datenerweiterungsregisters eingegeben, nachdem das obere Halbwort des Datenregisters auf das untere Halbwort des Datenregisters geschoben worden ist. Während des zweiten Zugriffes wird die Integer-Konstante 32 zum Indexregister addiert.
  • Das fünfte Bit des Indexregisters zeigt an, ob Daten aus dem Speicher im unteren Halbwort des Erweiterungsregisters gehalten werden. Falls das Bit NULL ist, werden Daten enthalten, falls das Bit EINS ist, hat nur das Datenregister nützliche Daten aus dem Speicher.
  • Bit-Feld-Betriebszustands-Datenregisteraktualisierung
  • Wenn ein Streamer bzw. eine Datenstrornvorrichtung im Bit- Feld-Betriebszustand als ein Quellenoperand verwendet wird, ist das Datenregister vorgesehen. Falls die untere redundante Adresse (A) verwendet wird, wird nichts mehr getan. Die obere redundante Adresse (C) ist für den Bit- Feld-Betriebszustand undefiniert. Falls die mittlere redundante Adresse (B) verwendet wird, wird die Breite des Bit-Feldes, gegeben durch einen angrenzenden Operanden zu dem Indexregister addiert, und zwar durch Bewegung davon als ein Pointer bzw. Zeiger über das Bit-Feld. Falls der Pointer (Zeiger) nicht die Halbwortgrenze überkreuzt, d. h., falls es keine Veränderung in den Halbwortadreßbits gibt, dann wird nichts mehr getan. Wenn es jedoch so ist (die Halbwortadresse wird inkrernentiert), dann wird das erweiterte Datenregister 16 Bit-Positionen nach rechts geschoben. Wenn zusätzlich der Pointer bzw. Zeiger eine Wortgrenze überkreuzt bzw. überschneidet (d. h. es gibt eine Veränderung der Wortadreßbits), dann wird ein Wort vom Speicher unter Verwendung der Wortadresse des Indexregisters gelesen, bevor sie aktualisiert wurde. Das Wort wird in das obere Halbwort des Datenregisters und das untere Halbwort des Datenerweiterungsregisters geladen.
  • Als ein Quellenoperand zeigt das Indexregister 48 Bitpositionen vor dem Beginn des Bit-Felds im Datenregister.
  • Wenn es als ein Bestimmungsoperand verwendet wird, wird das Datenregister gewöhnlicherweise als ein Quellenoperand vorgesehen, und zwar kombiniert mit einem Bit-Feld, welches in das Streamerdatenregister einzufügen ist und zurückzuspeichern ist. Wenn die untere redundante Adresse (A) verwendet wird, wird nichts getan. Die obere redundante Adresse (C) ist für den Bit-Feld-Betriebszustand nicht definiert. Falls die mittlere redundante Adresse (B) verwendet wird, wird die Breite des Bitfeldes, gegeben durch einen Zwischenoperanden, zum Indexregister addiert, was es als ein Zeiger über das Bitfeld bewegt. Falls der Zeiger bzw. Pointer nicht die Halbwortgrenze überkreuzt (das heißt wenn es keine Veränderung bei den Halbwortadreßbits gibt), dann wird nichts mehr getan. Wenn er jedoch dies tut (die Halbwortadresse wird inkrementiert), dann wird das untere Halbwort des Datenregisters im Speicher gespeichert, und zwar unter Verwendung der Halbwortadresse des Indexregisters, bevor es aktualisiert wurde, und das Datenregister wird nach rechts auf 16 Bit Positionen verschoben.
  • Als ein Bestimmungsoperand zeigt das Indexregister zur Speicherstelle, wo die Daten gespeichert werden.
  • Mischmodus-Datenregisterinitialisierung
  • Wenn man die IS-Anweisung im Mischmodus (Mixed Mode) ausführt, nachdem die Index- und/oder Kontextregister vom Quellenoperand initialisiert worden sind, ist es der nächste Schritt, die neuen Index/Kontextwerte zu verwenden, um das erweiterte Datenregister zu initialisieren. Falls der Bestimmungsqualifikator NPF ist, wird das erweitere Datenregister nicht initialisiert und die Anweisung ist vollständig ausgeführt worden. Der PF-Bestimmungsqualifikator ist für den Mischmodus nicht definiert. Beide der PFD1- und PFD2-Qualifikatoren bewirken die gleiche Initialisierung des erweiterten Datenregisters, wie unten beschrieben.
  • Die Inhalte des Indexregisters legen eine Byteadresse fest. Das Ziel der Initialisierung ist es, die Speicherinhalte von dieser Byteadresse als das am wenigsten signifikante Byte des Datenregisters enden zu lassen, und zwar mit steigenden Bytes vorn Speicher, die die signifikanteren Bytes des erweiterten Datenregisters einnehmen.
  • Beim Erhalt der Daten vom Speicher werden Wortzugriffe auf Wortgrenzen ausgeführt, und nur Bytes von kleineren Byteadressen als die Indexadresse werden abgelegt. Bytes von höheren Adressen als der Indexadresse werden in steigender Reihenfolge in dem erweiterten Datenregister gehalten. Weiter sind zwei Speicherzugriffe erforderlich, so daß mindestens vier Datenbytes vom Speicher in dem erweiterten Datenregister enden, außer die Indexadresse zeigt auf das am wenigsten signifikante Byte einer Wortadresse. Nach einem oder zwei Speicherzugriffen sind die Inhalte des Indexregisters um sieben gesteigert worden.
  • Die Hardware richtet dies wie folgt ein. Die Byteadresse, die aus dem Indexregister gelesen wird, wird zuerst in eine Wortadresse umgewandelt, und zwar durch Fallenlassen der zwei am wenigsten signifikanten Bits. Diese Wortadresse wird für den ersten Speicherzugriff verwendet, und das 32-Bit-Datenwort wird in das Datenregister eingegeben. Während des ersten Zugriffes wird eine Integer-Konstante bzw. eine ganzzahlige Konstante zum Indexregister addiert. Wenn der Index auf der Grenze war, was bedeutet, daß die zwei am wenigsten signifikanten Bits Null waren, so ist die ganzzahlige Konstante sieben. Nachdem sieben zum Indexregister addiert worden ist, ist die Initialisierungsanweisungsausführung vollendet.
  • Wenn jedoch der Index von der Grenze weg war, was bedeutet, daß die zwei am wenigsten signifikanten Bits nicht Null waren, dann wird der Index um die ganzzahlige Konstante von drei gesteigert, und ein zweiter Speicherzugriff ist erforderlich. Die Byteadresse von dem aktualisierten Indexregister wird in eine Wortadresse umgewandelt, und zwar durch Fallenlassen der zwei am wenigstens signifikanten Bits, und die Wortadresse wird für den zweiten Speicherzugriff verwendet. Während des zweiten Speicherzugriffs wird die ganzzahlige Konstante vier zum Indexregister addiert.
  • Das zweite Wort, welches aus dem Speicher gelesen wird, ist am am meisten signifikanten Ende der Inhalte des Datenregisters angekettet. Diese zwei Worte werden dann um ein, zwei oder drei Bytes nach rechts geschoben und in das erweiterte Datenregister geladen. Bits, die vom am wenigstens signifikanten Ende verschoben sind, sind verloren, und Nullen werden am am meisten signifikanten Ende eingefüllt. Die Anzahl der verschobenen Bytes wird aus den zwei am wenigstens signifikanten Bits des aktualisierten Indexregisters bestimmt. Falls zwei (10), Rechtsverschiebung um 3 Bytes; falls 1 (01), Rechtsverschiebung um 2 Bytes; falls 0 (00) Rechtsverschiebung um 1 Byte; und 3 (11) sollte nicht möglich sein. Die Indexregisteranweisungsausführung ist nun vollendet worden.
  • Die zwei am wenigstens signifikanten Bits im Indexregister zeigen an, wie viele Bytes der Daten aus dem Speicher in dem erweiterten Datenregister bleiben, und zwar überprüft bzw. festgestellt auf dem am wenigsten signifikanten Ende. Falls 3, bleiben vier Byte; falls 2, bleiben fünf Bytes; falls 1, bleiben sechs Bytes; und falls O bleiben sieben Bytes.
  • Mischmodus-Datenregisteraktualisierung
  • Wenn auf einem Streamer im Mischmodus (Mixed Mode) als ein zweiter Quellenoperand zugegriffen wird, werden die folgenden Schritte eingerichtet, um das erweitere Datenregister zu aktualisieren. Als erstes wird die Anzahl der Bytes, auf die vom Datenregister zugegriffen wird, aus der redundanten Adresse bestimmt, die für das Datenregister verwendet wird. Die untere redundante Adresse (A) legt ein Byte fest; die mittlere redundante Adresse (B) legt zwei Bytes (ein Halbwort) fest; und die obere redundante Adresse (C) legt vier Bytes (ein Wort) fest. Nachdem diese Bytes aus dem Datenregister gelesen worden sind, wird das erweiterte Datenregister nach rechts um die Anzahl der aufgerufenen bzw. zugegriffenen Bytes verschoben.
  • Dann wird das Indexregister um die Anzahl der vom Datenregister aufgerufenen Bytes gesteigert. Falls dies bewirkt, daß sich der Wortadressenteil des Indexregisters inkrementiert bzw. weitergeschaltet wird, (das heißt, ein Austragen bzw. Auflaufen der zweiten Bitposition bewegt), dann ist ein Speicherzugriff erforderlich. Die für den Speicherzugriff erforderliche Adresse ist der Wert des Indexregisters, bevor es mit den fallengelassenen zwei am wenigsten signifikanten Bits aktualisiert worden ist, um eine Wortadresse zu formen. Das aus dem Speicher gelesene Datenwort wird in das erweiterte Datenregister geladen, um mit den vorherigen Inhalten des Datenregisters verkettet zu werden. Die zwei am wenigsten signifikanten Bits des aktualisierten Indexregisters zeigen an, wo die Speicherdaten zu laden sind. Falls 3 (11) wird das Speicherwort so geladen, daß das am wenigsten signifikante Byte das am wenigsten signifikante Byte des Datenregisters einnimmt. Falls 2 (10) wird das Speicherwort so geladen, daß das am wenigstens signifikante Byte das zweite Byte des Datenregisters einnimmt. Falls in ähnlicher Weise 1 (01) sollte es das dritte Byte einnehmen; und falls 0 (00) sollte es das am meisten signifikante Byte einnehmen. Alle anderen Bytes vom Speicher fallen in steigender Reihenfolge in dem erweiterten Datenregister an ihren Platz.
  • Der aktualisierte Betrieb für einen Mischmodus-Quellenoperandenaufruf bzw. das Holen eines Quellenoperanden ist nun vollendet worden. Streamer im Mischmodus können nicht für Bestimmungsoperanden verwendet werden.
  • Es wird bevorzugt, das Kontextregister nicht bei jedem Zyklus zu modifizieren, sondern es einfach zu Beginn des Laufes der CPU zu laden. Die Modifikation wird viel einfacher durch einen einzelnen Streamer mit mehreren bzw. mehrfachen Adressen ersetzt, wodurch der Vorteil der Modifikation gerade wird, während ihre Nachteile eliminiert werden. Es sei beispielsweise angenommen, daß der Kontext des Kontextregisters einen von drei Werten annehmen müßte, so daß der Index durch eine von drei Ersetzungen verändert werden könnte. Diese Indexmodifikation kann durchgeführt werden, indem der Kontext nur einen Wert annimmt, indem man jedoch für eine Interaktion bzw. Gegenwirkung zwischen dem (einzelnen) Kontext und der (mehrfachen) Adresse vorsieht, so daß die Veränderung des Index sowohl vom Kontext als auch von der Adresse abhängt und nicht nur vom Kontext. Beispielsweise kann der (einzelne) Kontext drei unterschiedliche Verschiebungen aufweisen, und die Auswahl der zum Index zu addierenden Verschiebung kann durch die Adresse vorgenommen werden. Falls jedoch erwünscht, kann der Adreßgenerator modifiziert werden, um das Kontextregister zu aktualisieren, genau wie das Indexregister.
  • Wie oben bemerkt, sieht das Kontextregister nicht nur eine Regel zur Bestimmung der nächsten Adresse vor, von der zu lesen ist, sondern sieht auch eine Regel zur Umwandlung der Daten bei dieser Adresse vor, und zwar aus dem Format, welches am geeignetsten zur Speicherung in dem Speicher ist, und zwar auf dem Format, welches am geeignetsten zum Zugriff durch die CPU in dem Datenregister ist. Eine geeignete Vorrichtung ist daher im Datenpfad zwischen dem Speicher und dem Datenregister bei der Hand vorgesehen, wobei eine solche Vorrichtung durch das Kontextregister bei der Hand betrieben wird. Falls das Registerformat das gleiche ist, wie das Speicherformat, kann diese Vorrichtung weggelassen werden. Das Kontextregister kann dann vollständig der Unterstützung der Adreßerzeugung gewidmet werden und muß nicht zusätzlich eine Formatumwandlung unterstützen.
  • Die vorausgegangene Beschreibung behandelt das Problem des Extrahierens von Daten aus dem Speicher zur einer solchen Zeit und in einem solchen Format, daß sie für die CPU verfügbar sind, wenn sie benötigt werden. Die gleiche Vorrichtung oder eine parallele Vorrichtung kann verwendet werden, um das umgekehrte Problem zu behandeln, nämlich das Einfügen von Daten in dem Speicher im ordnungsgemäßen Format, lange nachdem die CPU auf andere Dinge übergegangen ist. Wenn somit die CPU ein Datenregister schreibt, tut sie simultan folgendes:
  • (a) sie aktiviert den entsprechenden Adreßgenerator, um die Modifikation des Index in dem Indexregister gemäß der im Kontextregister bemerkten Regel zu modifizieren;
  • (b) sie signalisiert dem Speicher, die Speicherung zu starten, und zwar bei der Adresse, die gegenwärtig (jedoch nicht für lange) im Indexregister festgelegt ist, wobei die Daten im Datenregister gespeichert sind; und
  • (c) sie aktiviert eihen Konverter (Umwandlungsvorrichtung), der die im Kontextregister aufgestellte Regel verwendet, um die Daten von der Form, in der sie im Datenregister gespeichert worden ist, in die Form umzuwandeln, die für den Speicher am geeignesten ist.
  • Somit wird dem Vorhol- bzw. Voraufrufschritt des Lesezyklus durch einen parallelen Nachspeicherschritt im Schreibzyklus entsprochen.
  • Der Kontext in einem Kontextregister kann teilweise oder gesamt reflektiv sein. Er ist teilweise reflektiv, wenn der Kontext, der Daten vorn Speicherformat in das Registerformat während eines Lesezyklus umwandelt, auch Daten vom Registerformat in das Speicherformat während eines Schreibzyklus umwandelt. Er ist auch teilweise reflektiv, wenn der Kontext, der Daten von der korrekten Speicheradresse während eines Lesezyklus vorholt bzw. voraufruft, auch die Daten an der korrekten Speicheradresse während eines Schreibzyklus nachgspeichert. Er ist total reflektiv, wenn der Kontext beide Zustände erfüllt. Wenn der Kontext nicht total bzw. voll reflektiv ist, dann muß ein Schreib-Streamer verwendet werden, der getrennt von den Lesestreamern ist. Diese Wahl trägt zur Attraktivität der Mehrfachstreamer bei. Natürlich kann ein zusätzlicher Adreßgenerator in dieser Situation erforderlich sein. Alternativ, obwohl nicht bevorzugt, kann der Kontext des Kontextregisters verändert werden
  • Die vorausgegangene Beschreibung zeigt einen RISC, der verwendet wird, um die Digitalsignale zu verarbeiten. Er kann ägivalent als ein DSP verwendet werden, und zwar mit der Flexibilität, die ein RISC hat, wenn er sich nicht mit dem Speicherzyklus beschäftigt; das heißt, er kann als ein DSP angesehen werden, der lose mit dem Speicher gekoppelt ist. Die vorliegende Erfindung ist somit auch fähig, Software zu betreiben, die eine Mischung aus Software ist, die auf einem RISC und auf einem DSP verwendet wird.
  • Kurze Beschreibung der Zeichnungen
  • Fig. 1 zeigt eine einfache Form des Problems, welches von der vorliegenden Erfindung angesprochen wird;
  • Fig. 2 zeigt eine komplexere Form des Problems der Fig. 1;
  • Fig. 3 ist eine Blockformzeichnung der vorliegenden Erfindung.
  • Detaillierte Beschreibung eines bevorzugten Ausführungsbeispiels
  • In Fig. 3 treibt eine CPU bzw. zentrale Verarbeitungseinheit 46 einen Selektor bzw. eine Auswahlvorrichtung 48 und eine Vielzahl von Datenregistern 50. Sechzehn Datenregister (DR0 bis DR15) sind gezeigt, es können jedoch mehr oder weniger verwendet werden, wie benötigt. Der Selektor 48 bestimmt, auf welches Datenregister 50 zugegriffen werden soll (darauf geschrieben oder davon gelesen werden soll). Wenn die CPU 46 ausreichend ausgefeilt ist, kann mehr als ein Datenregister 50 gleichzeitig ausgewählt werden.
  • Jedes Datenregister 50 besitzt damit assoziiert ein Kontextregister (CR) 52 und ein Indexregister (IR) 54, die zusammen eine Datenstromvorrichtung bzw. einen Streamer 56 bilden. Das Kontextregister 52 und das Indexregister 54 des ausgewählten Streamers 56 treiben einen eine Vielzahl von Adreßgeneratoren (AG) 58, wobei der spezielle Generator (oder die Generatoren) 58 durch den Selektor 48 bestimmt werden. Drei Generatoren 58 sind gezeigt (AG0 bis AG2), es kann jedoch einer oder eine größere Anzahl verwendet werden. Der Generator 58 erzeugt die Adresse im Datenspeicher 60, von dem geladen wird oder in dem gespeichert wird, und aktualisiert auch das Indexregister 54 des ausgewählten Streamers 56. Falls erwünscht, kann er auch das Kontextregister 52 aktualisieren, jedoch wird dies nicht bevorzugt.
  • Der Datenspeicher 60 kann direkt vorn ausgewählten Datenregister 50 laden oder darin speichern, tut es jedoch vorzugsweise nicht. Statt dessen treibt er (wenn er lädt) oder wird getrieben (wenn er speichert) einen einer Vielzahl von Konvertern bzw. Umwandlungsvorrichtungen 62 (Konverter 0 bis Konverter 2). Wie bei den Adreßgeneratoren 58 wird der spezielle Konverter (oder die Konverter) 62 bestimmt durch den Selektor 48. Drei Konverter 62 sind gezeigt, jedoch kann einer oder irgendeine größere Anzahl verwendet werden. Der Konverter 62 wandelt Daten in den Datenspeicher 60 vom Speicherformat auf das Registerformat um (beim Laden) oder wandelt Daten im ausgewählten Datenregister 50 vom Registerformat in das Speicherformat um (beim Speichern), und zwar gemäß der von dem ausgewählten Kontextregister 52 bestimmten Regel.
  • Industrielle Anwendbarkeit
  • Die vorliegende Erfindung kann in der Industrie ausgebeutet werden und kann verwendet werden, immer wenn es erwünscht ist, den intensiven Speicherzugriff eines Digitalsignalsprozessors mit der Geschwindigkeit und Flexibilität eines Computers mit verringertem Instruktionssatz (RISC) zu kombinieren. Sie kann aus Komponenten hergestellt werden, die getrennt und aufgeteilt voneinander vollständig herkömmlich sind, oder sie kann aus ihren nicht herkömmlichen, analogen Elementen aufgebaut werden.
  • Während ein spezielles Ausführungsbeispiel der vorliegenden Erfindung in gewisser Detailtreue beschrieben worden ist, ist der Umfang derselben nicht darauf eingeschränkt, sondern wird nur durch die beigefügten Ansprüche begrenzt.

Claims (10)

1. Datenverarbeitungsvorrichtung (Datenprozessor), die folgendes aufweist:
(a) eine zentrale Verarbeitungseinheit (CPU 46);
(b) einen Datenspeicher (60);
(c) mindestens einen Streamer (Datenstromvorrichtung) (56), wobei jeder Streamer folgendes aufweist:
(i) ein Datenregister (DR 50);
(ii) ein Kontextregister (CR 52), und
(iii) ein Indexregister (IR 54); und
(d) einen Selektor (48) zur Auswahl, daß ansprechend auf ein READ (LESE) Signal von der CPU zu einem Streamer Daten vorn Streamer zu der CPU gelesen werden, oder zur Auswahl, daß ansprechend auf ein WRITE (SCHREIB) Signal von der CPU an einen Streamer Daten von der CPU zu dem Streamer geschrieben werden;
(e) mindestens einen Adressengenerator (58) der derart aufgebaut ist, daß ein Streamer beim Zugriff zum Datenspeicher unterstützt wird, und zwar ansprechend auf die Auswahl durch den Selektor, um
(i) einen Kontext von dem CR des unterstützten Streamers und einen Index von dem IR des unterstützten Streamers zu empfangen;
(ii) aus dem Kontext und dem Index eine Adresse für den Datenspeicher zu erzeugen; und
(iii) aus dem Kontext und dem Index einen neuen Index für den IR des unterstützten Streamers zu erzeugen.
2. Datenverarbeitungsvorrichtung (Datenprozessor) nach Anspruch 1, wobei ferner mindestens ein Datenkonverter (62) ansprechend auf die Auswahl durch den Selektor zur Unterstützung eines Streamers ausgebildet ist, um:
(a) einen Kontext von dem CR des unterstützten Streamers zu empfangen;
(b) ansprechend auf ein READ (LESE)-Signal vom CPU folgendes vorzusehen:
(i) Daten von einer Adresse in dem Datenspeicher angegeben oder spezifiziert durch den Adressengenerator, der auch den Streamer unterstützt, einzugeben bzw. zu laden;
(ii) Umwandeln der Daten gemäß dem Kontext aus einem Speicherformat in ein Registerformat; und
(iii) Plazieren der umgewandelten Daten in dem DR des unterstützten Streamers; und
(c) ansprechend auf ein WRITE- (SCHREIB-) Signal von der CPU folgendes vorzusehen:
(i) Datenempfang vorn DR des unterstützten Streamers;
(ii) Umwandeln der Daten gemäß dem Kontext von dem Registerformat in ein Speicherformat; und
(iii) Speichern der umgewandelten Daten in einer Adresse in dem Datenspeicher spezifiziert durch den Adressengenerator, der auch den Streamer unterstützt.
3. Datenverarbeitungsvorrichtung (Datenprozessor) nach Anspruch 1, wobei der Adressengenerator ferner derart aufgebaut ist, daß er ansprechend auf seine Auswahl durch den Selektor zur Unterstützung eines Streamers aus dem Kontext und dem Index einen neuen Kontext für den CR des unterstützten Streamers erzeugt.
4. Datenverarbeitungsvorrichung (Datenprozessor) nach Anspruch 1, wobei
(a) mindestens ein Streamer derart aufgebaut ist, daß er durch eine Vielzahl von Adressen dem Zugriff unterliegt; und
(b) die Kombination des CR und IR von jedem derartigen Streamer derart aufgebaut ist, daß sie mit jeder derartigen Adresse in einer Weise in Wechselwirkung tritt, unterschiedlich von seiner Art der Wechselwirkung mit jeder anderen solchen Adresse.
5. Datenverarbeitungsvorrichtung (Datenprozessor) nach Anspruch 4, wobei folgendes vorgesehen ist:
(a) jeder derartige Streamer ist derart aufgebaut, daß er durch erste, zweite und dritte Adressen dem Zugriff unterliegt;
(b) die Kombination von CR und IR ist derart aufgebaut, daß sie mit der ersten Adresse in der Weise in Wechselwirkung tritt, um jedes LOAD (LADEN) von oder STORE (SPEICHERN) zu dem Datenspeicher zu vermeiden, und zwar an eine Adresse unterschiedlich von einer Adresse, die unter Betrachtung ist;
(c) die Kombination von CR und IR ist derart aufgebaut, um mit der zweiten Adresse derart in Wechselwirkung zu treten, um ein LOAD (LADEN) vom oder STORE (SPEICHERN) zu dem Datenspeicher zu erzeugen, und zwar an eine Adresse unterschiedlich um eine erste vorbelastete Verschiebung gegenüber der Adresse, die unter Betrachtung steht; und
(d) die Kombination von CR und IR ist derart aufgebaut, um mit der dritten Adresse derart in Wechselwirkung zu treten, um so ein LOAD (LADEN) von oder STORE (SPEICHERN) zu dem Datenspeicher zu erzeugen, und zwar an einer Adresse unterschiedlich um eine zweite vorbelastete bzw. vorgeladene Verschiebung gegenüber der unter Betrachtung stehenden Adresse.
6. Datenverarbeitungsvorrichtung (Datenprozessor) nach Anspruch 1, wobei ferner folgendes vorgesehen ist:
(a) ein Datenerweiterungsregister (DER = data extension register) zur linken Seite des DR, wobei das DER und das DR zusammen ein erweitertes Datenregister (EDR = extended data register) bilden; und
(b) ein Barrel- oder Bündelschieber aufgebaut zum Bündelverschieben von Bits innerhalb des EDR;
wobei das DR und DER beide in Verbindung mit dem Datenspeicher stehen und das DR in Verbindung mit der CPU steht.
7. Datenverarbeitungsvorrichtung (Datenprozessor) nach Anspruch 6, wobei ferner folgendes vorgesehen ist:
(a) Mittel zum Lesen eines Bit-Feldes aus einem un teren Halbwort des DR;
(b) Mittel zur Bündel- oder Barrelverschiebung des EDR um ein halbes Wort nach rechts, wenn das Bit- Feld eine Halbwortgrenze kreuzt;
(c) Mittel zum Laden eines Wortes aus dem Datenspeicher zu einem Teil des EDR, bestehend aus einem unteren Halbwort des DER und einem oberen Halbwort des DR, wenn das Bit-Feld eine Wortgrenze kreuzt; und
(d) Mittel zum Barrel- oder Bündelverschieben des EDR um ein halbes Wort nach rechts, wenn das Bit- Feld eine Wortgrenze kreuzt.
8. Datenverarbeitungsvorrichtung (Datenprozessor) nach Anspruch 6, wobei ferner folgendes vorgesehen ist:
(a) Mittel zum Schreiben eines Bit-Feldes aus der CPU zu einem unteren Halbwort des DR;
(b) Mittel zur Bündelverschiebung des EDR um ein Halbwort nach links, wenn das Bit-Feld eine Halbwortgrenze kreuzt;
(c) Mittel zur Bündelverschiebung des EDR um ein halbes Wort nach links, wenn das Bit-Feld eine Wortgrenze kreuzt; und
(d) Mittel zum Speichern eines Worts zu dem Datenspeicher von einem Teil des EDR, bestehend aus einem unteren Halbwort des DER und einem oberen Halbwort des DR, wenn das Bit-Feld eine Wortgrenze kreuzt.
9. Datenverarbeitungsvorrichtung (Datenprozessor) nach Anspruch 1, wobei ein Streamer eine Kombination von CR und IR aufweist, und zwar wie folgt aufgebaut:
(a) zum Laden des DR des Streamers mit einem Inkrement des Datenspeichers, wobei das Inkrernent eine Länge besitzt;
(b) Verkettung des Inkrementes mit einem vorhergehenden Inhalt des DR; und
(c) Bündelverschiebung des verketteten Inhalts des DR um die Länge in die CPU.
10. Datenverarbeitungsvorrichtung (Datenprozessor) nach Anspruch 1, wobei ein Streamer eine Kombination von CR und IR aufweist, und zwar aufgebaut, um
(a) an das DR des Streamers mit einem Inkrement von Daten zu schreiben, wobei das Inkrement eine Länge besitzt;
(b) das Inkrement mit einem vorherigen Inhalt des DR zu verketten; und
(c) den verketteten Inhalt des DR um die Länge in den Datenspeicher bündelzuverschieben.
DE69315630T 1992-07-23 1993-07-19 Datenzugriff in einem RISC-Digitalsignalprozessor Expired - Lifetime DE69315630T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US91787292A 1992-07-23 1992-07-23

Publications (2)

Publication Number Publication Date
DE69315630D1 DE69315630D1 (de) 1998-01-22
DE69315630T2 true DE69315630T2 (de) 1998-07-16

Family

ID=25439448

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69315630T Expired - Lifetime DE69315630T2 (de) 1992-07-23 1993-07-19 Datenzugriff in einem RISC-Digitalsignalprozessor

Country Status (4)

Country Link
US (1) US5586284A (de)
EP (1) EP0580109B1 (de)
JP (1) JP3509134B2 (de)
DE (1) DE69315630T2 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6944747B2 (en) * 2002-12-09 2005-09-13 Gemtech Systems, Llc Apparatus and method for matrix data processing
US7805589B2 (en) * 2006-08-31 2010-09-28 Qualcomm Incorporated Relative address generation

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3454932A (en) * 1966-06-27 1969-07-08 Gen Electric Data processing system employing indirect addressing apparatus
US4131940A (en) * 1977-07-25 1978-12-26 International Business Machines Corporation Channel data buffer apparatus for a digital data processing system
US4550368A (en) * 1982-07-02 1985-10-29 Sun Microsystems, Inc. High-speed memory and memory management system
JPS61177540A (ja) * 1985-02-01 1986-08-09 Nec Corp ストリングデ−タ制御回路
DE3686984T2 (de) * 1985-06-28 1993-03-11 Hewlett Packard Co Verfahren und mittel zum laden und speichern von daten in einem rechner mit beschraenktem befehlssatz.
DE3688186D1 (de) * 1985-12-02 1993-05-06 Ibm Datenverarbeitungsgeraet mit drei-adress-befehlen.
EP0551931B1 (de) * 1987-06-05 1998-07-15 Mitsubishi Denki Kabushiki Kaisha Digitaler Signalprozessor mit Adress-Generator für den Zugriff von Daten aus einem Zweidirektionalen Bereich eines Datenspeichers
US5218674A (en) * 1990-09-14 1993-06-08 Hughes Aircraft Company Hardware bit block transfer operator in a graphics rendering processor
US5222222A (en) * 1990-12-18 1993-06-22 Sun Microsystems, Inc. Apparatus and method for a space saving translation lookaside buffer for content addressable memory
JPH04257939A (ja) * 1991-02-13 1992-09-14 Tokyo Electric Co Ltd データ処理装置

Also Published As

Publication number Publication date
EP0580109B1 (de) 1997-12-10
DE69315630D1 (de) 1998-01-22
US5586284A (en) 1996-12-17
JP3509134B2 (ja) 2004-03-22
JPH06168117A (ja) 1994-06-14
EP0580109A2 (de) 1994-01-26
EP0580109A3 (de) 1994-04-06

Similar Documents

Publication Publication Date Title
DE3587591T2 (de) Mikroprozessor für Forth-ähnliche Sprache.
DE69130852T2 (de) Verarbeitungsmechanismus zur Verschachtelung in einem Schleifensteuersystem
DE69033444T2 (de) Signalprozessor mit einer arithmetischen und logischen Einheit und einer Multiplizier-Akkumulatoreinheit, die gleichzeitig betrieben werden können
DE69421103T2 (de) Programmgesteuertes Prozessor
DE2819571C2 (de)
DE69519449T2 (de) Raumzeigersdatenpfad
DE3586603T2 (de) Datenprozessor fuer interpretierende und kompilierte sprache.
DE69115344T2 (de) Vorverarbeitungsprozessor zur Verbindung von Befehlen für einen Cache-Speicher
DE69424115T2 (de) Rechnersystem und Verfahren zur Verarbeitung von Vektordaten
DE3687724T2 (de) Digitalprozessorsteuerung.
DE69530520T2 (de) Computerprogrammprodukt zur Verwendung von Mehrfachbefehlssätzen
DE69729974T2 (de) Datenverarbeitungsschaltung, Mikrocomputer und elektronische Einrichtung
DE3685913T2 (de) Vektorenverarbeitung.
DE3424962C2 (de)
DE69033131T2 (de) Logikvorrichtung und Verfahren zur Verwaltung einer Befehlseinheit in einer Pipeline-Verarbeitungseinheit
DE69225839T2 (de) Filtersystem und Verfahren zur Bildverarbeitung mit sehr hoher Geschwindigkeit
DE2353258A1 (de) Datenverarbeitungssystem
DE2322674B2 (de) Mikroprogramm-Steuereinrichtung
DE2829668A1 (de) Kanaldatenpufferspeicher
EP0010185B1 (de) Virtuell-Adressiervorrichtung für einen Computer
DE69722859T2 (de) Formatumwandlung von Datenwörtern graphischer Bilder
DE69221840T2 (de) Abtastratenwandlungsschaltung für Bilddaten
DE69229771T2 (de) Datenverarbeitungsverfahren und -vorrichtung
DE69524379T2 (de) Verarbeitungssystem mit ausgerichtetem wortverzweigungsziel
DE69231237T2 (de) Datenverarbeitungsvorrichtung

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: MINDSPEED TECHNOLOGIES, INC., NEWPORT BEACH, C, US

8327 Change in the person/name/address of the patent owner

Owner name: XIAM TREA PTE, LLC, DOVER, DEL., US