-
Diese Anmeldung bezieht sich auf Verbesserungen von
Erfindungen, die in den folgenden gleichzeitig anhängigen US-
Patentanmeldungen offenbart sind, die alle auf Texas
Instruments übertragen worden sind:
-
US-A-5,471,592 (US-Patentanmeldung Nr. 08/263,501,
eingereicht am 21. Juni 1994) mit dem Titel "MULTI-PROCESSOR WITH
CROSSBAR LINK OF PROCESSORS AND MEMORIES AND METHOD OF
OPERATION", eine Fortführungsanmeldung der US-Patentanmeldung
Nr. 08/135,754, die am 12. Oktober 1993 eingereicht wurde und
mittlerweile zurückgezogen wurde, eine Fortführungsanmeldung
der US-Patentanmeldung Nr. 07/933,865, eingereicht am
21. August 1992 und nunmehr zurückgezogen, eine
Fortführungsanmeldung der US-Patentanmeldung Nr. 07/435,591, eingereicht am
17. November 1989 und nunmehr zurückgezogen (TI-14608);
-
US-Patent Nr. 5,212,777, erteilt am 18. Mai 1993 und
eingereicht am 17. November 1989.mit dem Titel "SIMD/MIMD
RECONFIGURABLE MULTI-PROCESSOR AND METHOD OF OPERATION" (TI-
14655);
-
US-A-5,522,083 (eine Fortführungsanmeldung der US-
Patentanmeldung Nr. 07/895,565, eingereicht am 5. Juni 1992,
mit dem Titel "RECONFIGURABLE COMMUNICATIONS FOR
MULTIPROCESSOR AND METHOD OF OPERATION", eine Fortführungsanmeldung
der US-Patentanmeldung Nr. 07/437,856, eingereicht am 17.
November 1989 und nunmehr zurückgezogen (TI-14656);
-
US-Patentanmeldung Nr. 08/264,582, eingereicht am
22. Juni 1994 mit dem Titel "REDUCED AREA OF CROSSBAR AND
METHOD OF OPERATION", eine Fortführungsanmeldung der US-
Patentanmeldung Nr. 07/437,852, eingereicht am
17. November 1989 und nunmehr zurückgezogen (TI-14657);
-
US-Patentanmeldung Nr. 08/032,530 eingereicht am
15. März 1993 mit dem Titel "SYNCHRONIZED MIMD MULTI-PROCESSING
SYSTEM AND METHOD OF OPERATION", eine Fortführungsanmeldung der
US-Patentanmeldung Nr. 07/437,853, eingereicht am
17. November 1989 und nunmehr zurückgezogen (TI-14658);
-
US-Patent Nr. 5,197,140, erteilt am 23. März 1993 und
eingereicht am 17. November 1989, mit dem Titel "SLICED
ADDRESSING MULTI-PROCESSOR AND METHOD OF OPERATION" (TI-14659);
-
US-A-5,339,447, erteilt am 16. August 1994 und eingereicht
am 17. November 1989 mit dem Titel "ONES COUNTING CIRCUIT,
UTILIZING A MATRIX OF INTERCONNECTED HALF-ADDERS, FOR COUNTING
THE NUMBER OF ONES IN A BINARY STRING OF IMAGE DATA" (TI-
14660);
-
US-Patent Nr. 5,239,654, erteilt am 24. August 1993 und
eingereicht am 17. November 1989, mit dem Titel "DUAL MODE
SIMD/MIMD PROCESSOR PROVIDING REUSE OF MIMD INSTRUCTION
MEMORIES A5 DATA MEMORIES WHEN OPERATING IN SIMD MODE" (TI-
14661);
-
US-A-5,410,649 (US-Patentanmeldung Nr. 07/911,562,
eingereicht am 29. Juni 1992, mit dem Titel "IMAGING COMPUTER AND
METHOD OF OPERATION", eine Fortführungsanmeldung der US-
Patentanmeldung Nr. 437,854, eingereicht am 17. November 1989
und nunmehr zurückgezogen) (TI-14662); und
-
US-Patent Nr. 5,226,125, erteilt am 6. Juli 1993 und
eingereicht am 17. November 1989, mit dem Titel "SWITCH MATRIX
HAVING INTEGRATED CROSSPOINT LOGIC AND METHOD OF OPERATION"
(TI-14709).
-
Diese Anmeldung ist darüber hinaus mit den gleichzeitig
eingereichten Patentanmeldungen verwandt, die die gleiche
Offenbarung umfassen:
-
EP-A-0 660 223 (TI-15518) "THREE INPUT ARITHMETIC LOGIC
UNIT WITH BARREL ROTATOR";
-
EP-A-0 656 584 (TI-15520) "MEMORY STORE FROM A REGISTER
PAIR CONDITIONAL";
-
US-Patentanmeldung Nr.... (TI-15525) "ITERATIVE DIVISION
APPARATUS, SYSTEM AND METHOD FORMING PLURAL QUOTIENT BITS PER
ITERATION";
-
EP-A-0 655 676 (TI-25526) "THREE INPUT ARITHMETIC LOGIC
UNIT FORMING MIXED ARITHMETIC AND BOOLEAN COMBINATIONS";
-
US-Patentanmeldung Nr.... (TI-15527) "METHOD, APPARATUS
AND SYSTEM FORMING THE SUM OF DATA IN PLURAL EQUAL SECTIONS OF
A SINGLE DATA WORD";
-
US-Patentanmeldung Nr.... (TI-15528) "HUFFMAN ENCODING
METHOD, CIRCUITS AND SYSTEM EMPLOYING MOST SIGNIFICANT BIT
CHANGE FOR SIZE DETECTION";
-
US-Patentanmeldung Nr.... (TI-15529) "HUFFMAN DECODING
METHOD, CIRCUIT AND SYSTEM EMPLOYING CONDITIONAL SUBTRACTION
FOR CONVERSION OF NEGATIVE NUMBERS";
-
US-Patentanmeldung Nr.... (TI-15530) "METHOD, APPARATUS
AND SYSTEM FOR SUM OF PLURAL ABSOLUTE DIFFERENCES";
-
US-Patentanmeldung Nr.... (TI-15531) "ITERATIVE DIVSION
APPARATUS, SYSTEM AND METHOD EMPLOYING LEFT MOST ONE'S
DETECTION AND LEFT MOST ONE'S DETECTION WITH EXCLUSIVE OR";
-
US-Patentanmeldung Nr.... (TI-15532) "ADDRESS GENERATOR
EMPLOYING SELECTIVE MERGE OF TWO INDEPENDENT ADDRESSES";
-
US-Patentanmeldung Nr.... (TI-15535) "METHOD, APPARATUS
AND SYSTEM METHOD FOR CORRELATION";
-
US-Patentanmeldung Nr.... (TI-15537) "LONG INSTRUCTION
WORD CONTROLLING PLURAL INDEPENDENT PROCESSOR OPERATIONS";
-
EP-A-0 657 802 (TI-15539) "ROTATION REGISTER FOR
ORTHOGONAL DATA TRANSFORMATION";
-
US-Patentanmeldung Nr.... (TI-15542) "MEDIAN FILTER
METHOD, CIRCUIT AND SYSTEM";
-
US-Patentanmeldung Nr.... (TI-15544) "ARITHMETTC LOGIC
UNIT WITH CONDITIONAL REGISTER SOURCE SELECTION";
-
US-Patentanmeldung Nr.... (TI-15651) "APPARATUS, SYSTEM
AND METHOD FOR DIVISION BY ITERATION";
-
US-Patentanmeldung Nr.... (TI-17919) "MULTIPLY ROUNDING
USING REDUNDANT CODED MULTIPLY RESULT";
-
US-Patentanmeldung Nr.... (TI-18209) "SPLIT MULTIPLY
OPERATION";
-
US-Patentanmeldung Nr.... (TI-18213) "MIXED CONDITION
TEST CONDITIONAL AND BRANCH OPERATIONS INCLUDING CONDITIONAL
TEST FOR ZERO";
-
US-Patentanmeldung Nr.... (TI-18214) "PACKED WORD PAIR
MULTIPLY OPERATION";
-
US-Patentanmeldung Nr.... (TI-18570) "THREE INPUT
ARITHMETIC LOGIC UNIT WITH SHIFTER";
-
US-Patentanmeldung Nr.... (TI-18571) "THREE INPUT
ARITHMETIC LOGIC UNIT WITH MASK GENERATOR";
-
US-Patentanmeldung Nr.... (TI-18572) "THREE INPUT
ARITHMETIC LOGIC UNIT WITH BARREL ROTATOR AND MASK GENERATOR";
-
US-Patentanmeldung Nr.... (TI-18573) "THREE INPUT
ARITHMETIC LOGIC UNIT WITH SHIFTER AND MASK GENERATOR";
-
EP-A-0 657 803 (TI-18574) "THREE INPUT ARITHMETIC LOGIC
UNIT FORMING THE SUM OF A FIRST INPUT ADDED WITH A FIRST
BOOLEAN COMBINATION OF A SECOND INPUT AND THIRD INPUT PLUS A
SECOND BOOLEAN COMBINATION OF THE SECOND AND THIRD INPUTS";
-
EP-A-0 660 227 (TI-18575) "THREE INPUT ARITHMETIC LOGIC
UNIT FORMING THE SUM OF FIRST BOOLEAN COMBINATION OF FIRST,
SECOND AND THIRD INPUTS PLUS A SECOND BOOLEAN COMBINATION OF
FIRST, SECOND AND THIRD INPUTS";
-
US-Patentanmeldung Nr.... (TI-18576) "THREE INPUT
ARITHMETIC LOGIC UNIT EMPLOYING CARRY PROPAGATE LOGIC"; und
-
US-Patentanmeldung Nr.... (TI-18577) "DATA PROCESSING
APPARATUS, SYSTEM AND METHOD FOR IF, THEN, ELSE OPERATION USING
WRITE PRIORITY".
TECHNISCHES GEBIET DER ERFINDUNG
-
Das technische Gebiet dieser Erfindung ist das Gebiet der
digitalen Datenverarbeitung und insbesondere der
Mikroprozessorschaltungen, Architekturen und Verfahren zur digitalen
Datenverarbeitung, besonders der digitalen Bild-/Graphik-
Verarbeitung.
HINTERGRUND DER ERFINDUNG
-
Diese Erfindung bezieht sich auf das Gebiet der
Computergraphik und insbesondere auf Bitmap-Graphiken. Bei Bitmap-
Graphiken speichert der Computerspeicher Daten für jedes
einzelne Bildelement oder Pixel eines Bildes an
Speicherstellen, die der Stelle des Pixels in dem Bild entsprechen.
Dieses Bild kann ein Bild sein, das angezeigt werden soll, oder
ein aufgenommenes Bild, das manipuliert, gespeichert, angezeigt
oder erneut übertragen werden soll. Das Gebiet der Bitmap-
Computergraphik hat in starkem Maße von den verringerten Kosten
und der erhöhten Kapazität der dynamischen RAMs und der
verringerten Kosten und der erhöhten Verarbeitungsleistung der
Mikroprozessoren profitiert. Diese günstigen Veränderungen bezüglich
der Kosten und der Leistungsfähigkeit von Komponenten rücken
größere und komplexere Bildverarbeitungssysteme in den Bereich
der wirtschaftlichen Machbarkeit.
-
Das Gebiet der Bitmap-Graphiken durchlief verschiedene
Stufen der Entwicklung was die Art der Verarbeitung angeht, die
für die Bilddatenmanipulation verwendet wird. Anfangs
verwendete ein Bitmap-Graphiken unterstützendes Computersystem den
Systemprozessor für sämtliche Bitmap-Operationen. Diese Art des
Systems wies jedoch einige Nachteile auf: Zunächst war der
Computersystemprozessor nicht speziell auf die Handhabung von
Bitmap-Graphiken ausgelegt. Design-Prinzipien, die für
Vielzweck-Computer sehr vernünftig sind, sind für Bitmap-
Graphiksysteme ungeeignet. Als Folge davon arbeiteten einige
Routinegraphik-Aufgaben langsam. Außerdem fand man schnell
heraus, daß die für die Bildverarbeitung von Bitmap-Graphiken
erforderliche Verarbeitung für die Berechnungskapazität des
Systemprozessors so belastend war, daß andere Operationen auch
verlangsamt wurden.
-
Der nächste Schritt in der Entwicklung der
Bitmap-Graphikverarbeitung waren spezielle Hardware-Graphiksteuereinheiten.
Diese Vorrichtungen können einfache Figuren wie Linien,
Ellipsen und Kreise unter der Steuerung des Systemprozessors
zeichnen. Viele dieser Vorrichtungen können auch
Pixelblockübertragungen (PixBlt) durchführen. Eine Pixelblockübertragung
ist eine Speicherverschiebungsoperation von Bilddaten von einem
Teil des Speichers zu einem anderen. Eine Pixelblockübertragung
ist nützlich, um Standardbildelemente, z. B. alphanumerische
Zeichen in einem bestimmten Zeichensatz, innerhalb einer
Anzeige durch Übertragung von nicht angezeigtem Speicher auf
Bitmap-Anzeigespeicher zu liefern. Diese Funktion kann auch zum
Tiling verwendet werden, indem das gleiche kleine Bild auf die
Gesamtheit des Bitmap-Anzeigespeichers übertragen wird. Die
integrierten Algorithmen zum Durchführen einiger der am meisten
verwendeten Graphikfunktionen liefern einen Weg, die
Leistungsfähigkeit des Systems zu erhöhen. Jedoch erfordert ein
nützliches Graphikcomputersystem oft viele Funktionen neben den
wenigen, die in einer solchen Hardware-Graphiksteuereinheit
implementiert sind. Diese zusätzlichen Funktionen können in
Form von Software durch den Systemprozessor implementiert
werden. Typischerweise erlauben diese
Hardware-Graphiksteuereinheiten dem Systemprozessor nur einen begrenzten Zugriff auf
den Bitmap-Speicher, wodurch der Grad, in dem die
Systemsoftware den begrenzten Satz an Funktionen der Hardware-
Graphiksteuereinheit vergrößern kann, begrenzt.
-
Der Graphiksystemprozessor stellt noch einen weiteren
Schritt in der Entwicklung der Bitmap-Graphikverarbeitung dar.
Ein Graphiksystemprozessor ist eine programmierbare
Vorrichtung, die sämtliche Merkmale eines Mikroprozessors und darüber
hinaus spezielle Funktionen für Bitmap-Graphiken besitzt. Die
Graphiksystemprozessoren TMS34010 und TMS34020, die von Texas
Instruments Incorporated hergestellt werden, repräsentieren
diese Klasse von Vorrichtungen. Diese Graphiksystemprozessoren
antworten in der gleichen Weise wie ein Mikroprozessor auf ein
gespeichertes Programm und besitzen die Fähigkeiten der
Datenmanipulation über eine arithmetisch-logische Einheit, der
Datenspeicherung in Registerdateien und der Steuerung des
Programmflusses und des externen Datenspeichers. Darüber hinaus
umfassen diese Vorrichtungen spezielle
Graphikmanipulationshardware, die unter der Programmsteuerung arbeitet. Zusätzliche
Befehle in dem Befehlssatz dieser Graphiksystemprozessoren
steuern die spezielle Graphikhardware. Diese Befehle und die
Hardware, die diese unterstützt, werden ausgewählt, um
grundsätzliche Graphikfunktionen durchzuführen, die bei
verschiedenen Fällen nützlich sein können. So kann ein
Graphiksystemprozessor für viele verschiedene Graphikanwendungen
programmiert werden, wobei Algorithmen verwendet werden, die für das
spezielle Problem ausgewählt sind. Diese bietet einen Zuwachs
an Nutzwert, der ähnlich dem ist, der durch den Wechsel von
Hardware-Steuereinheiten zu programmierten Mikroprozessoren
geliefert wurde. Da solche Graphiksystemprozessoren ebenso wie
Mikroprozessoren programmierbare Vorrichtungen sind, können sie
als alleinstehende Graphikprozessoren
(stand-alone-Graphikprozessoren), als Graphikcoprozessoren, die einem
Systemprozessor unterstehen, oder als eng gekoppelte Graphiksteuereinheiten
arbeiten.
-
Neue Anwendungen verlangen nach noch leistungsfähigeren
Graphikfunktionen. Einige Gebiete erfordern noch
kostengünstigere Graphikoperationen für eine wirtschaftliche
Durchführbarkeit. Hierzu gehören Videokonferenzen,
Multimedia-Computeranwendungen mit Echtzeitvideos, hochauflösendes Fernsehen
(HDTV), Farbfaxgeräte und digitale Fotographie. Jedes dieser
Gebiete besitzt eigene Probleme, die Bilddatenkompression und -
dekompression sind jedoch gemeinsame Probleme. Das für Bilder
und insbesondere Echtzeitbilder (full motion video)
erforderliche Ausmaß an Übertragungsbandbreite und Speicherkapazität
ist enorm. Ohne effiziente Videokompression und Dekompression,
die zu einer akzeptablen endgültigen Bildqualität führt, sind
diese Anwendungen durch die mit der Übertragungsbandbreite und
der Speicherkapazität verbundenen Kosten begrenzt. Es besteht
auf diesem Fachgebiet auch ein Bedürfnis nach einem einzigen
System, das sowohl Bildverarbeitungsfunktionen unterstützt als
auch eine Bilderkennung und Graphikfunktionen wie eine
Anzeigesteuerung ermöglicht.
-
EP-A-0 395 348, auf der der Oberbegriff des Anspruchs 1
basiert, offenbart eine Datenverarbeitungsvorrichtung mit einer
32-Bit-ALU, die in selektiver Weise in zwei Halbwörter oder
vier Einzelbyteabschnitte unterteilt werden kann.
-
Die vorliegende Erfindung schafft eine
Datenverarbeitungsvorrichtung mit einer arithmetisch-logischen Einneit (ALU) mit
Dateneingängen für mehrere mehrere Bits aufweisende digitale
Eingangssignale, die entsprechende Eingaben repräsentieren,
wobei die arithmetisch-logische Einheit (ALU) in eine
auswählbare Anzahl mehrerer unabhängiger Abschnitte gleicher Größe
teilbar ist, von denen jeder an einem entsprechenden Ausgang
ein digitales Ergebnissignal erzeugt, das eine Kombination aus
jeweils eigenen Untermengen aus den mehrere Bits aufweisenden
digitalen Eingangssignalen der Dateneingänge repräsentiert,
wobei die Untermengen von den jeweiligen Untermengen aus den
mehrere Bits aufweisenden digitalen Signalen der Eingaben zu
anderen Abschnitten unabhängig sind, und wobei die arit~
metisch-logische Einheit (ALU) einen Status-Detektor umfaßt, der
mehrere Einzelbit-Statussignale erzeugt, deren Anzahl der
ausgewählten Anzahl an Abschnitten entspricht, wobei jedes
Einzelbit-Statussignal eine Anzeige in bezug auf das digitale
Ergebnissignal eines entsprechenden Abschnitts der
arithmetisch-logischen Einheit (ALU) liefert, dadurch gekennzeichnet,
daß die Datenverarbeitungsvorrichtung ein mit dem
Status-Detektor verbundenes Flag-Register aufweist, das eine Anzahl an
Bitspeicherstellen aufweist, die größer als eine maximal
auswählbare Anzahl an Abschnitten der arithmetisch-logischen
Einheit (ALU) ist, wobei das Flag-Register die darin
gespeicherten Bits einer Rotation um eine Anzahl an Plätzen
unterzieht, die der ausgewählten Anzahl an Abschnitten der
arithmetisch-logischen Einheit (ALU) entspricht, und danach die
mehreren Einzelbit-Statussignale an Plätzen in dem Flag-Register
speichert, die durch den Rotationsvorgang frei geworden sind.
-
Das Einzelbit-Statussignal jedes Statusdetektors, das in
dem mehrere Flags aufweisenden Flag-Register gespeichert wird,
kann eine Anzeige einer Null-Ausgabe einer Anzeige eines
Übertrags von einem höchstwertigen Bit dieses Abschnitts sein.
Es können Daten in das mehrere Flags aufweisende Flag-Register
von einem Datenregister geschrieben werden. Ferner können Daten
von dem mehrere Flags aufweisenden Flag-Register gelesen und in
einem Datenregister gespeichert werden.
-
ALU-Operationen können Statussignale erzeugen, die die
vorigen Statussignale, die in dem mehrere Flags aufweisenden
Flag-Register gespeichert sind, überschreiben, was anstelle des
Rotierens der Bits durch das mehrere Flags aufweisende Flag-
Register und das Speichern der Einzelbit-Statussignale der
aktuellen Operation an Positionen, die durch diese Rotation
frei geworden sind, auftreten kann. Vorzugsweise speichert ein
Statusregister eine Anzeige, die Aufschluß darüber gibt, ob das
mehrere Flags aufweisende Flag-Register vor dem Speichern der
Statussignale rotiert werden soll.
-
Dieses Statusregister speichert vorzugsweise einen
Größenanzeiger, der eine Anzeige der Anzahl an Abschnitten liefert,
in die die arithmetisch-logische Einheit einzuteilen ist, wobei
die Größenanzeige aus mehreren möglichen Abschnittsanzahlen
ausgewählt wird, in die die arithmetisch-logische Einheit
eingeteilt werden kann. Die arithmetisch-logische Einheit wird
dann in die Abschnittsanzahl unterteilt, die diesem
Größen
anzeiger entspricht. Das mehrere Flags aufweisende Flag-
Register speichert eine Anzahl an Statussignalen, die der
Abschnittsanzahl dieses Größenanzeigers entspricht.
-
Es gibt eine maximale Anzahl elementarer Abschnitte, in
die die arithmetisch-logische Einheit unterteilt werden kann.
Der Statusdetektor weist vorzugsweise einen Null-Detektor für
jeden dieser elementaren Abschnitte auf. Der Statusdetektor
erzeugt das Statussignal für jeden Abschnitt, wenn die
arithmetisch-logische Einheit in eine Anzahl an Abschnitten unterteilt
wird, die kleiner als die maximale Anzahl an Abschnitten ist,
indem Statussignale für mehrere elementare Abschnitte einer
logischen UND-Operation unterzogen werden. Die
arithmetischlogische Einheit umfaßt vorzugsweise darüber hinaus einen
Multiplexer zwischen einem für die nächsthöhere Stelle
bestimmten Übertrag (Übertragsausgang, carry out) eines höchstwertigen
Bits jedes elementaren Abschnitts und einem von einer
vorhergehenden Stelle stammenden Übertrag (Übertragseingang, carry in)
eines niedrigstwertigen Bits eines angrenzenden elementaren
Abschnitts. Je nach der durch den Größenanzeiger ausgewählten
Abschnittsanzahl verbindet jeder Multiplexer den für die
nächsthöhere Stelle bestimmten Übertrag eines elementaren
Abschnitts mit dem von einer vorhergehenden Stelle stammenden
Übertrag des angrenzenden elementaren Abschnitts oder stellt
diese Verbindung nicht her. Der Statusdetektor liefert für die
nächsthöhere Stelle bestimmte Überträge von jedem elementaren
Abschnitt, der nicht mit einem angrenzenden Abschnitt verbunden
ist, über den entsprechenden Multiplexer zu dem mehrere Flags
aufweisenden Flag-Register.
-
Das mehrere Flags aufweisende Flag-Register ist darüber
hinaus mit der arithmetisch-logischen Einheit verbunden. In dem
mehrere Flags aufweisenden Flag-Register gespeicherte
Statussignale beeinflussen die Kombination an Eingaben, die
durch die arithmetisch-logische Einheit innerhalb
entsprechender Abschnitte gebildet werden. Eine mit dem mehrere Flags
aufweisenden Flag-Register und dem Statusregister verbundene
Erweiterungsschaltung liefert eine dritte Eingabe zu einem
dritten Dateneingang der arithmetisch-logischen Einheit. Die
Erweiterungsschaltung erweitert jedes Bit des mehrere Flags
aufweisenden Flag-Registers, um einen entsprechenden Abschnitt
der arithmetisch-logischen Einheit zu füllen.
-
Bei der bevorzugten Ausführungsform dieser Erfindung sind
die arithmetisch-logische Einheit und das mehrere Flags
aufweisende Flag-Register in wenigstens einem digitalen Bild-~
Graphikprozessor als Teil eines in einer einzigen integrierten
Schaltung gebildeten Multiprozessors verkörpert, der zur
Bildverarbeitung verwendet wird.
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Diese und andere Gesichtspunkte der vorliegenden Erfindung
werden unten zusammen mit den Figuren beschrieben, in denen:
-
Fig. 1 die Systemarchitektur eines
Bildverarbeitungssystems darstellt, das so gestaltet ist, daß es diese Erfindung
verwenden könnte;
-
Fig. 2 die Architektur eines einzelnen als integrierte
Schaltung ausgebildeten Multiprozessors darstellt, der die
bevorzugte Ausführungsform dieser Erfindung darstellt;
-
Fig. 3 in einem Blockdiagramm einen der in der Fig. 2
dargestellten digitalen Bild-/Graphikprozessoren darstellt;
-
Fig. 4 in schematischer Form die Pipelinestufen der
Operation des in der Fig. 2 dargestellten digitalen Bild-/
Graphikprozessors darstellt:
-
Fig. 5 in Blockdiagrammform die Dateneinheit des in der
Fig. 3 dargestellten digitalen Bild-/Graphikprozessors
darstellt;
-
Fig. 6 in schematischer Form Felddefinitionen des
Statusregisters der in der Fig. 5 dargestellten Dateneinheit zeigt;
-
Fig. 7 in Blockdiagrammform die Art und Weise darstellt,
in der die arithmetisch-logische Einheit der in der Fig. 5
dargestellten Dateneinheit aufgeteilt ist;
-
Fig. 8 in Blockdiagrammform die Art der Adressierung des
Datenregisters der in der Fig. 5 dargestellten Dateneinheit
als ein Rotationsregister darstellt:
-
Fig. 9 in schematischer Form die Felddefinitionen des
ersten Datenregisters der in der Fig. 5 dargestellten
Dateneinheit zeigt;
-
Fig. 10 in Blockdiagrammform den Aufbau einer einzelnen
Bitschaltung der arithmetisch-logischen Einheit der in der
Fig. 5 dargestellten Dateneinheit zeigt;
-
Fig. 11 in schematischer Form den Aufbau der
Ergebnislogik und der Logik für den Übertrag für die nächsthöhere
Stelle (carry out, Übertragsausgang) der in der Fig. IO
dargestellten Bitschaltung zeigt;
-
Fig. 12 in schematischer Form den Aufbau der Einheit zur
Erzeugung Boolscher Funktionen der in der Fig. 10
dargestellten Bitschaltung zeigt;
-
Fig. 13 in Blockdiagrammform die
Funktionssignalauswahleinheit des Funktionssignalerzeugers der in der Fig. 5
dargestellten Dateneinheit darstellt;
-
Fig. 14 in Blockdiagrammform den
Funktionssignalmodifiziererabschnitt des Funktionssignalerzeugers der in der Fig. 5
dargestellten Dateneinheit zeigt;
-
Fig. 15 in Blockdiagrammform den Erzeuger für den
Übertrag in bezug auf das Bit 0 der in der Fig. 5 dargestellten
Dateneinheit zeigt;
-
Fig. 16 in Blockdiagrammform eine prinzipielle Ansicht
der in den Fig. 10 und 11 dargestellten
arithmetischlogischen Einheit zeigt;
-
Fig. 17 in Blockdiagrammform eine prinzipielle Ansicht
einer anderen Ausführungsform der arithmetisch-logischen
Einheit zeigt;
-
Fig. 18 in schematischer Form das Befehlswort zeigt, das
die Operation des in der Fig. 3 dargestellten digitalen Bild-/
Graphikprozessors steuert; und
-
Fig. 19 in schematischer Form die integrierte Schaltung
des Multiprozessors dieser Erfindung zeigt, der einen einzigen
digitalen Bild-/Graphikprozessor in einem Farbfaxsystem
aufweist.
GENAUE BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORMEN
-
Fig. 1 ist ein Blockdiagramm eines
Bilddatenverarbeitungssystems, das den IC eines Multiprozessors, der für Bild-
und Graphikverarbeitung gemäß dieser Erfindung konstruiert ist,
umfaßt. Dieses Datenverarbeitungssystem umfaßt ein
Hauptverar
beitungssystem 1. Das Hauptverarbeitungssystem 1 liefert die
Datenverarbeitung für das Hauptsystem des
Datenverarbeitungssystems der Fig. 1. Zu dem Hauptverarbeitungssystem 1 gehören
ein Prozessor, wenigstens eine Eingabevorrichtung, eine
Langzeitspeichervorrichtung, ein Festwertspeicher (ROM), ein
Speicher mit wahlfreiem Zugriff (RAM) und wenigstens ein zum
Hauptsystem gehörendes Peripheriegerät 2, das mit einem
Hauptsystembus verbunden ist. Der Aufbau und der Betrieb des
Hauptverarbeitungssystems entsprechen denen herkömmlicher
Systeme. Mit seinen Verarbeitungsfunktionen steuert das
Hauptverarbeitungssystem 1 die Funktion des
Bilddatenverarbeitungssystems.
-
Der Multiprozessor-IC 100 leistet den größten Teil der
Datenverarbeitung einschließlich der Datenmanipulation und -
berechnung für Bildverarbeitungsoperationen des
Bilddatenverarbeitungssystems der Fig. 1. Der Multiprozessor-IC 100 ist in
bidirektionaler Weise mit einem Bildsystembus verbunden und
kommuniziert über diesen Bildsystembus mit dem
Hauptverarbeitungssystem 1. Bei der Anordnung der Fig. 1 arbeitet der
Multiprozessor-IC 100 unabhängig von dem
Hauptverarbeitungssystem 1. Der Multiprozessor-IC 100 reagiert jedoch auf das
Hauptverarbeitungssystem 1.
-
Die Fig. 1 zeigt zwei Bildsysteme. Das
Bilderzeugungsgerät 3 repräsentiert einen Dokumentscanner, einen CCD-Scanner
oder eine Videokamera, die als Bildeingabevorrichtung dienen.
Das Bilderzeugungsgerät 3 liefert dieses Bild zur
Bilderfassungssteuereinheit 4, die dazu dient, das Bild zu
digitalisieren und in Rasterabtastbilder umzuformen. Dieser
Bilderfassungsprozeß wird durch Signale von dem Multiprozessor-IC 100
gesteuert. Die so erzeugten Einzelbilder werden in dem Video-
RAM 5 gespeichert. Auf den Video-RAM 5 kann über den
Bildsystembus zugegriffen werden, was eine Datenübertragung zur
Bildverarbeitung durch den Multiprozessor-IC 100 ermöglicht.
-
Das zweite Bilderzeugungssystem steuert eine Videoanzeige.
Der Multiprozessor-IC 100 kommuniziert mit dem Video-RAM 6 für
die Beschreibung eines angezeigten Bildes über ein Pixelmuster.
Der Multiprozessor-IC 100 steuert die in dem Video-RAM 6
gespeicherten Bilddaten über den Bildsystembus. Diesem Bild
entsprechende Daten werden vom Video-RAM 6 zurückgerufen und
zur Video-Palette 7 geliefert. Die Video-Palette 7 kann diese
zurückgerufenen Daten in einen anderen Farbraum transformieren,
die Anzahl an Bits pro Pixel erweitern und dergleichen. Diese
Umwandlung kann durch eine Nachschlagetabelle erreicht werden.
Die Video-Palette 7 erzeugt darüber hinaus die geeigneten
Videosignale, um die Video-Anzeige 8 zu steuern. Wenn diese
Videosignale analog sind, dann umfaßt die Video-Palette 7 eine
geeignete Digital-Analog-Wandeleinrichtung. Die
Videopegelsignalausgabe von der Video-Palette 7 kann Farb-, Sättigungs-
und Helligkeitsinformationen umfassen. Der Multiprozessor-IC
100 steuert die in der Vidoe-Palette 7 gespeicherten Daten,
wodurch der Datentransformationsprozeß und die Zeitsteuerung
der Einzelbilder gesteuert wird. Der Multiprozessor-IC 100 kann
die Zeilenlänge und die Anzahl an Zeilen pro Einzelbild des
Videoanzeigebildes, die Synchronisation, den Rücklauf und die
Austastsignale durch die Steuerung der Video-Palette 7 steuern.
Wichtig ist, daß der Multiprozessor-IC 100 bestimmt und
steuert, wo Graphikanzeigeinformationen in dem Video-RAM 6
gespeichert werden. Später, während des Auslesens aus dem
Video-RAM 6, bestimmt der Multiprozessor-IC 100 die Sequenz des
Auslesens aus dem Video-RAM 6, die Adressen, auf die
zugegriffen wird, und die zur Herstellung des gewünschten Graphikbildes
auf der Videoanzeige 8 gewünschten Steuerinformationen.
-
Die Videoanzeige 8 erzeugt die beschriebene Videoanzeige
für die Betrachtung durch den Anwender. Es gibt zwei weit
verbreitete Verfahren, die verwendet werden. Das erste
Verfahren spezifiziert die Videodaten anhand der Farbe, des Farbtons,
der Helligkeit und der Sättigung für jedes Pixel. Bei dem
zweiten Verfahren werden Farbpegel für Rot, Blau und Grün für
jedes Pixel spezifiziert. Die Video-Palette 7 der Videoanzeige
8 ist so entworfen und hergestellt, daß sie mit dem
ausgewählten Verfahren kompatibel ist.
-
Die Fig. 1 zeigt einen zusätzlichen Speicher 9, der mit
dem Bildsystembus verbunden ist. Dieser zusätzliche Speicher
kann zusätzlichen Video-RAM, dynamischen RAM, statischen RAM
oder Festwertspeicher (ROM) umfassen. Der Multiprozessor-IC 100
kann entweder insgesamt oder in Teilen durch ein in dem
Speicher 9 gespeichertes Programm gesteuert werden. Dieser
Speicher 9 kann darüber hinaus verschiedene Arten von
Graphikbilddaten speichern. Darüber hinaus enthält der Multiprozessor-
IC 100 vorzugsweise Speicherschnittstellenschaltungen für das
Video-RAM, den dynamischen RAM und den statischen RAM. So kann
ein System so aufgebaut sein, daß es den Multiprozessor-IC 100
ohne Video-RAMs 5 oder 6 verwendet.
-
Die Fig. 1 zeigt einen Transceiver 16. Der Transceiver 16
liefert eine Umsetzung und eine bidirektionale Kommunikation
zwischen dem Bildsystembus und einem Kommunikationskanal. Ein
Beispiel für ein System, das den Transceiver verwendet, ist ein
Videokonferenzsystem. Das in der Fig. 1 dargestellte
Bilddatenverarbeitungssystem verwendet ein Bilderzeugungsgerät
und eine Bilderfassungssteuereinheit 4, um ein Videobild von
Personen an einem ersten Ort zu erzeugen. Der Multiprozessor-IC
100 liefert eine Videokompression und überträgt das
komprimierte Videosignal zu einem ähnlichen
Bilddatenverarbeitungssystem an einem anderen Ort über den Transceiver 16 und
den Kommunikationskanal. Der Transceiver 16 empfängt ein
ähnlich komprimiertes Videosignal von dem entfernt gelegenen
Bilddatenverarbeitungssystem über den Kommunikationskanal. Der
Multiprozessor-IC 100 dekomprimiert dieses empfangene Signal
und steuert den Video-RAM 6 und die Video-Palette 7, um das
entsprechende dekomprimierte Videosignal auf der Videoanzeige 8
anzuzeigen. Es ist zu erkennen, daß dieses nicht das einzige
Beispiel ist, bei dem das Bilddatenverarbeitungssystem einen
Transceiver 16 verwendet. Darüber hinaus ist zu erkennen, daß
die bidirektionale Kommunikation nicht unbedingt Signale
gleichen Typs verwenden muß. Zum Beispiel würde bei einem
interaktiven Kabelfernsehsignal der Kabelsystemkopfeingang
komprimierte Videosignale zum Bilddatenverarbeitungssystem über
den Kommunikationskanal übertragen. Das
Bilddatenverarbeitungssystem könnte Steuer- und Datensignale zum
Kabelsystemkopfeingang zurück über den Transceiver 16 und den Kommunikationskanal
übertragen.
-
Die Fig. 1 zeigt den Multiprozessor-IC 100 in einem
System verkörpert, das das Hauptverarbeitungssystem 1 umfaßt.
Fachleute auf diesem Gebiet erkennen aus der nachfolgenden
Offenbarung der Erfindung, daß der Multiprozessor-IC 100 als
einziger Prozessor eines nützlichen Systems verwendet werden
kann. Bei einem solchen System ist der Multiprozessor-IC 100 so
programmiert, daß er alle Funktionen des Systems durchführt.
-
Diese Erfindung ist besonders nützlich bei einem
Prozessor, der zur Bildverarbeitung verwendet wird. Gemäß der
bevorzugten Ausführungsform ist diese Erfindung in dem
Multiprozessor-IC 100 verkörpert. Diese bevorzugte Ausführungsform umfaßt
mehrere identische Prozessoren, die diese Erfindung verkörpern.
Jeder dieser Prozessoren wird als digitaler Bild-/
Graphikprozessor bezeichnet werden. Diese Bezeichnung wird nur
aus praktischen Gründen gewählt. Der diese Erfindung
verkörpernde Prozessor kann ein Prozessor sein, der getrennt auf
einer einzigen integrierten Schaltung oder auf mehreren
integrierten Schaltungen hergestellt worden ist. Wenn er auf
einer einzigen integrierten Schaltung verkörpert ist, kann
diese integrierte Schaltung optional ROM und RAM umfassen, die
bei dem digitalen Bild-/Graphikprozessor verwendet werden.
-
Fig. 2 zeigt die Architektur des Multiprozessor-ICs 100
der bevorzugten Ausführungsform dieser Erfindung. Der
Multiprozessor-IC 100 umfaßt: Zwei RAM 10 und 20, von denen jeder in
mehrere Abschnitte unterteilt ist; eine Kreuzschiene 50; einen
Hauptprozessor 60; digitale Bild-/Graphikprozessoren 71, 72, 73
und 74; eine Übertragungssteuereinheit 80, die den Zugriff auf
den Systemspeicher vermittelt; und Bildsteuereinheiten 90, die
den Zugriff auf unabhängige erste und zweite Bildspeicher
steuern. Der Multiprozessor-IC 100 liefert einen hohen Grad an
Betriebsparallelität, was bei der Bildverarbeitung und
Graphikoperationen nützlich sein wird, zum Beispiel bei
Multimedia-Computeranwendungen.
-
Der Multiprozessor-IC 100 umfaßt zwei Speicher mit
wahlfreiem Zugriff (RAMs). Der RAM 10 ist hauptsächlich für den
Hauptprozessor 60 vorgesehen. Er umfaßt zwei
Befehlscachespeicher 11 und 12, zwei Datencachespeicher 13 und 14 und einen
Parameterspeicher 15. Diese Speicherabschnitte können physisch
identisch sein, jedoch unterschiedlich verbunden und benutzt
werden. Auf den RAM 20 kann von dem Hauptprozessor 60 und jedem
der digitaler Bild-/Graphikprozessoren 71, 72, 73 und 74
zugegriffen werden. Jeder digitale Bild-/Graphikprozessor 71,
72, 73 und 74 besitzt fünf entsprechende Speicherabschnitte.
Diese umfassen einen Befehlscachespeicher, drei Datenspeicher
und einen Parameterspeicher. So besitzt der digitale Bild-/
Graphikprozessor 71 einen Befehlscachespeicher 21,
Datenspeicher 22, 23, 24 und den Parameterspeicher 25; der digitale
Bild-/Graphikprozessor 72 den Befehlscachespeicher 26, die
Datenspeicher 27, 28, 29 und den Parameterspeicher 30; der
digitale Bild-/Graphikprozessor 73 den Befehlscachespeicher 31,
die Datenspeicher 32, 33, 34 und den Parameterspeicher 35; und
der digitale Bild-/Graphikprozessor 74 den Befehlscachespeicher
36, die Datenspeicher 37, 38, 39 und den Parameterspeicher 40.
Wie bei den Abschnitten des RAMs 10 können diese
Speicherabschnitte physisch identisch sein, jedoch in unterschiedlicher
Weise verbunden und verwendet werden. Jeder dieser
Speicherabschnitte der Speicher 10 und 20 umfaßt vorzugsweise zwei
Kbyte, wodurch sich ein Gesamtspeicher in dem Multiprozessor-IC
100 von 50 Kbyte ergibt.
-
Der Multiprozessor-IC 100 ist so aufgebaut, daß er eine
hohe Datenübertragungsgeschwindigkeit zwischen den Prozessoren
und dem Speicher unter Verwendung von mehreren unabhängigen
parallelen Datenübertragungen liefert. Die Kreuzschiene 50
ermöglicht diese Datenübertragungen. Jeder digitale Bild-/
Graphikprozessor 71, 72, 73 und 74 besitzt drei Speicherports,
die gleichzeitig in jedem Zyklus arbeiten können. Ein
Befehlsport (I) kann 64-Bit-Datenwörter von dem entsprechenden
Befehlscachespeicher holen. Ein lokaler Datenport (L) kann ein
32-Bit-Datenwort von den Datenspeichern oder dem
Parameterspeicher lesen oder ein 32-Bit-Datenwort in diese schreiben,
entsprechend zu dem digitalen Bild-/Graphikprozessor. Ein
globaler Datenport (G) kann ein 32-Bit-Datenwort von einem
beliebigen der Datenspeicher oder der Parameterspeicher oder
dem RAM 20 lesen oder in diese ein solches Wort schreiben. Der
Hauptprozessor 60 umfaßt zwei Speicherports. Ein Befehlsport
(I) kann ein 32-Bit-Befehlswort von einem der
Befehlscachespeicher 11 und 12 abrufen. Ein Datenport (C) kann ein 32-Bit-
Datenwort von den Datencachespeichern 13 oder 14, dem
Parameterspeicher 15 oder dem RAM 10 oder einem beliebigen der
Datenspeicher, der Parameterspeicher oder dem RAM 20 lesen oder
ein solches Wort in diese Speicher schreiben. Die
Übertragungssteuereinheit 80 kann auf einen beliebigen Abschnitt des RAMs
10 oder des RAMs 20 über den Datenport (C) zugreifen. So können
fünfzehn parallele Speicherzugriffe in einem beliebigen
Speicherzyklus angefordert werden. Die RAMs 10 und 20 sind in
fünfundzwanzig Speicher unterteilt, um so viele parallele
Zugriffe zu unterstützen.
-
Die Kreuzschiene 50 steuert die Verbindungen des
Hauptprozessors 60, der digitalen Bild-/Graphikprozessoren 71, 72, 73
und 74 und der Übertragungssteuereinheit 80 zu den Speichern 10
und 20. Die Kreuzschiene 50 umfaßt mehrere Koppelpunkte 51, die
in Zeilen und Spalten angeordnet sind. Jede Spalte an
Koppelpunkten 51 entspricht einem einzelnen Speicherabschnitt und
einem entsprechenden Adressenbereich. Ein Prozessor fordert den
Zugriff auf einen der Speicherabschnitte durch die
höchstwertigen Bits einer Adressausgabe durch diesen Prozessor. Die
Adressausgabe durch den Prozessor wandert entlang einer Zeile.
Der Koppelpunkt 51, der zu dem Speicherabschnitt mit dieser
Adresse gehört, antwortet entweder durch Gewährung oder durch
Verweigerung des Zugriffs auf den Speicherabschnitt. Wenn kein
anderer Prozessor den Zugriff zu diesem Speicherabschnitt
während des aktuellen Speicherzyklusses angefordert hat, dann
gewährt der Koppelpunkt 51 den Zugriff durch Verbindung von
Zeile und Spalte. Dieses liefert die Adresse zu dem
Speicherabschnitt. Der Speicherabschnitt antwortet, indem er den
Datenzugriff bei dieser Adresse erlaubt. Dieser Datenzugriff kann
entweder eine Datenschreiboperation oder eine
Datenleseoperation sein.
-
Wenn mehr als ein Prozessor den Zugriff auf den gleichen
Speicherabschnitt gleichzeitig anfordert, dann gewährt die
Kreuzschiene den Zugriff nur zu einem der anfordernden
Prozessoren. Die Koppelpunkte 51 in jeder Spalte der Kreuzschiene 50
übertragen und gewähren den Zugriff basierend auf einer
Prioritätshierarchie. Wenn zwei Anforderungen nach einem Zugriff mit
dem gleichen Rang gleichzeitig auftreten, dann gewährt die
Kreuzschiene 50 den Zugriff nach dem Prinzip "Jeder gegen
Jeden", wobei der Prozessor, dem als letztes der Zugriff
gewährt wurde, die niedrigste Priorität hat. Jeder gewährte
Zugriff dauert so lange, wie es erforderlich ist, um die
Anforderung zu bedienen. Die Prozessoren können ihre Adressen
in jedem Speicherzyklus ändern, so daß die Kreuzschiene 50 die
Verbindung zwischen den Prozessoren und die Speicherabschnitte
Zyklus für Zyklus verändern kann.
-
Der Hauptprozessor 60 führt vorzugsweise die
Hauptkontrollfunktionen für den Multiprozessor-IC 100 durch. Der
Hauptprozessor 60 ist vorzugsweise ein 32-Bit-RISC-Prozessor
mit einer Hardware-Gleitkommaberechnungseinheit. Gemäß der
RISC-Architektur werden alle Zugriffe auf Speicher mit Lade-
und Speicherbefehlen durchgeführt, und die meisten Integer- und
Logikoperationen werden an Registern in einem einzigen Zyklus
durchgeführt. Die Gleitkommaberechnungseinheit wird jedoch
mehrere Zyklen benötigen, um Operationen durchzuführen, wenn
sie die gleiche Registerdatei verwendet, die von der Integer-
und Logikeinheit verwendet wird. Eine Registerbewertungskarte
(Register Score Board) stellt sicher, daß richtige
Registerzugriffsequenzen aufrechterhalten werden. Die RISC-Architektur
ist für Steuerfunktionen bei der Bildverarbeitung angemessen.
Die Gleitkommaberechnungseinheit ermöglicht eine schnelle
Berechnung von Bildrotationsfunktionen, was bei der
Bildverarbeitung von Bedeutung sein kann.
-
Der Hauptprozessor 60 ruft die Befehlswörter von dem
Befehlscachespeicher 11 oder dem Befehlscachespeicher 12 ab. In
gleicher Weise ruft der Hauptprozessor 60 die Daten entweder
von dem Datencachespeicher 13 oder dem Datencachespeicher 14
ab. Da jeder Speicherabschnitt 2 Kbyte an Speicher umfaßt, gibt
es 4 Kbyte an Befehlscachespeicher und 4 Kbyte an
Datencachespeicher. Die Cachesteuerung ist eine in dem Hauptprozessor 60
integrierte Funktion. Wie vorher erwähnt, kann der
Hauptprozessor 60 auch auf andere Speicherabschnitte über die Kreuzschiene
50 zugreifen.
-
Die vier digitalen Bild-/Graphikprozessoren 71, 72, 73 und
74 besitzen jeder die in hohem Maße parallele Architektur eines
digitalen Signalprozessors (DSP). Die Fig. 3 zeigt einen
Überblick über einen beispielhaft gewählten digitalen Bild-/
Graphikprozessor 71, der mit den digitalen Bild-/
Graphikprozessoren 72, 73 und 74 übereinstimmt. Der digitale
Bild-/Graphikprozessor 71 erreicht einen hohen Grad an
Parallelität seiner Operationen, indem er drei getrennte Einheiten
verwendet: Die Dateneinheit 110; die Adresseinheit 120 und die
Programmflußsteuereinheit 130 (PFC-Einheit). Diese drei
Einheiten wirken gleichzeitig auf verschiedene Befehle in einer
Befehlspipeline. Außerdem besitzt jede dieser Einheiten eine
interne Parallelität.
-
Die digitalen Bild-/Graphikprozessoren 71, 72, 73 und 74
können unabhängige Befehlsströme in dem Mehrfachbefehls-
Mehrfachdatenmodus (MIMD) durchführen. In dem MIMD-Modus führt
jeder digitale Bild-/Graphikprozessor ein individuelles
Programm von seinem zugehörigen Befehlscachespeicher aus, der
unabhängig oder kooperierend sein kann. In dem letzteren Fall
ermöglicht die Kreuzschiene 50 die Kommunikation zwischen den
Prozessoren in Verbindung mit dem gemeinsam genutzten Speicher.
Die digitalen Bild-/Graphikprozessoren 71, 72, 73 und 74 können
ebenso in einem synchronisierten MIMD-Modus arbeiten. In dem
synchronisierten MIMD-Modus sperrt die
Programmflußsteuereinheit jedes digitalen Bild-/Graphikprozessors das Abrufen des
nächsten Befehls, bis alle synchronisierten Prozessoren bereit
sind fortzufahren. Dieser synchronisierte MIMD-Modus ermöglicht
es, daß die getrennten Programmen der digitalen Bild-/
Graphikprozessoren im Gleichschritt in einer eng gekoppelten
Operation ausgeführt werden.
-
Die digitalen Bild-/Graphikprozessoren 71, 72, 73 und 74
können identische Befehle an verschiedenen Daten in dem
Einfachbefehls-Mehrfachdatenmodus (SIMD) ausführen. In diesem
Modus kommt ein einzelner Befehlsstrom für die vier digitalen
Bild-/Graphikprozessoren von dem Befehlscachespeicher 21. Der
digitale Bild-/Graphikprozessor 71 steuert die Abruf- und
Verzweigungsoperationen, und die Kreuzschiene 50 liefert den
gleichen Befehl zu den anderen digitalen Bild-/
Graphikprozessoren 72, 73 und 74. Da der digitale Bild-/
Graphikprozessor 71 den Befehlsabruf für alle digitalen Bild-/
Graphikprozessoren 71, 72, 73 und 74 steuert, sind die
digita
len Bild-/Graphikprozessoren von Natur aus in dem SIMD-Modus
synchronisiert.
-
Die Übertragungssteuereinheit 80 ist eine kombinierte
Direktspeicherzugriff (DMA)-Maschine und eine
Speicherschnittstelle für den Multiprozessor-IC 100. Die
Übertragungssteuereinheit 80 führt in intelligenter Weise die folgenden
Tätigkeiten aus: Bilden von Warteschlangen, Setzen von Prioritäten und
Bedienen der Datenanfragen und der Speichermängel der fünf
programmierbaren Prozessoren. Der Hauptprozessor 60 und die
digitalen Bild-/Graphikprozessoren 71, 72, 73 und 74 greifen
alle auf Speicher und Systeme außerhalb des Multiprozessor-ICs
100 über die Übertragungssteuereinheit 80 zu. Die Datencache-
oder Befehlscachemangelsituationen werden automatisch durch die
Übertragungssteuereinheit 80 gehandhabt. Der Cacheservice (S)-
Port überträgt solche Cachemangelsituationen zur
Übertragungssteuereinheit 80. Der Cacheservice (S)-Port liest die
Informationen von den Prozessoren und nicht von dem Speicher. Der
Hauptprozessor 60 und die digitalen Bild-/Graphikprozessoren
71, 72, 73 und 74 können Datenübertragungen von der
Übertragungssteuereinheit 80 als verbundene Listenpaketanforderungen
(linked list packet requests) anfordern. Diese verbundenen
Listenpaketanforderungen ermöglichen es, daß mehrdimensionale
Informationsblöcke zwischen Quell- und Zielspeicheradressen
übertragen werden, die innerhalb des Multiprozessor-ICs 100
oder außerhalb des Multiprozessor-ICs 100 liegen können. Die
Übertragungssteuereinheit 80 enthält darüber hinaus bevorzugt
eine Auffrischsteuereinheit für den dynamischen RAM (DRAM), der
eine periodische Auffrischung benötigt, um seine Daten zu
erhalten.
-
Die Bildsteuereinheit 90 ist die Schnittstelle zwischen
dem Multiprozessor-IC 100 und den externen Bilderfassungs- und
Anzeigesystemen. Die Bildsteuereinheit 90 steuert die
Erfassungs- und Anzeigegeräte und organisiert die Bewegung von Daten
zwischen diesen Geräten und dem Speicher in automatischer
Weise. Hierfür liefert die Bildsteuereinheit 90 eine
gleichzeitige Steuerung der beiden unabhängigen Bildsysteme. Hierzu
gehören typischerweise ein erstes Bildsystem für die
Bilderfassung und ein zweites Bildsystem für die Bildanzeige, obwohl die
Anwendung der Bildsteuereinheit 90 durch den Anwender gesteuert
wird. Diese Bildsysteme würden normalerweise unabhängige
Bildspeicher umfassen, die für die Bildfangschaltung oder die
Bildspeicherung verwendet würden. Die Bildsteuereinheit 90
arbeitet in bevorzugter Weise so, daß sie den dynamischen
Videospeicher mit wahlfreiem Zugriff (VRAM) durch Auffrisch-
und Schieberegistersteuerung steuert.
-
Der Multiprozessor-IC 100 ist für die
Hochleistungsbildverarbeitung entworfen. Der Hauptprozessor 60 liefert eine
eingebettete Steuerung (embedded control), wobei er die
Aktivitäten der digitalen Bild-/Graphikprozessoren 71, 72, 73 und 74
dirigiert und die Ergebnisse interpretiert, die diese erzeugen.
Die digitalen Bild-/Graphikprozessoren 71, 72, 73 und 74 sind
so ausgewählt, daß sie zur Pixelanalyse- und Manipulation gut
geeignet sind. Wenn man die Pixel als aufwendig in bezug auf
die Daten jedoch geringwertig in bezug auf die Information
ansieht, dann können bei einer typischen Anwendung die
digitalen Bild-/Graphikprozessoren 71, 72, 73 und 74 die Pixel
untersuchen und die Rohdaten in Informationen umwandeln. Diese
Informationen können dann entweder durch die digitalen Bild-/
Graphikprozessoren 71, 72, 73 und 74 oder durch den
Hauptprozessor 60 analysiert werden. Die Kreuzschiene 50 vermittelt die
Kommunikation zwischen den Prozessoren. Die Kreuzschiene 50
ermöglicht es, daß der Multiprozessor-IC 100 als ein System mit
gemeinsam genutztem Speicher implementiert wird. Die
Nachrichtenübermittlung braucht nicht eine Hauptfunktion der
Kommunikation bei dieser Architektur zu sein. Es können jedoch
Nachrichten über die gemeinsam genutzten Speicher übermittelt werden.
Jeder digitale Bild-/Graphikprozessor, der entsprechende
Abschnitt der Kreuzschiene 50 und die entsprechenden Abschnitte
des Speichers 20 haben die gleiche Breite. Dieses ermöglicht
eine Flexibilität der Architektur, indem eine Anpassung an das
Hinzufügen oder Entfernen von digitalen Bild-/
Graphikprozessoren und entsprechendem Speicher in modularer
Weise ermöglicht wird, wobei die gleiche Anschlußbelegung
beibehalten wird.
-
Bei der bevorzugten Ausführungsform sind alle Teile des
Multiprozessor-ICs 100 auf einer einzigen integrierten
Schaltung angeordnet. Bei der bevorzugten Ausführungsform ist
der Multiprozessor-IC 100 in Form von komplementärer
Metalloxidhalbleitertechnik (CMOS) ausgeführt, wobei
Merkmalsbemessungen von 0,6 um verwendet werden. Der Multiprozessor-IC
100 ist vorzugsweise als Pin-Grid-Gehäuse (PGA-Gehäuse) mit 256
Anschlußstiften ausgebildet. Die Eingangssignale und
Ausgangssignale sind vorzugsweise mit Transistor-Transistor-Logik-
Spannungen (TTL-Logik) kompatibel. Der Multiprozessor-IC 100
umfaßt vorzugsweise ungefähr 3 Millionen Transistoren und
verwendet eine Taktfrequenz von 50 MHz.
-
Fig. 3 zeigt einen Überblick über einen beispielhaft
gewählten digitalen Bild-/Graphikprozessor 71, der praktisch
mit den digitalen Bild-/Graphikprozessoren 72, 73 und 74
übereinstimmt. Der digitale Bild-/Graphikprozessor 71 umfaßt
eine Dateneinheit 110; eine Adresseinheit 120: und eine
Programmflußsteuereinheit 130 (PFC-Einheit). Die Dateneinheit
110 führt die logischen oder arithmetischen Datenoperationen
durch. Die Dateneinheit 110 umfaßt acht Datenregister D7-D0,
ein Statusregister 210 und ein mehrere Flags aufweisendes Flag-
Register 211. Die Adresseinheit 120 steuert die Erzeugung von
Lade-Speicher-Adressen für den lokalen Datenport und den
globalen Datenport. Wie weiter unten beschrieben, umfaßt die
Adresseinheit 120 zwei praktisch identische Adressiereinheiten,
von denen eine für das lokale Adressieren und eine für das
globale Adressieren gedacht ist. Jede dieser Adressiereinheiten
umfaßt ein sämtlichst Nullen aufweisendes Nur-Lese-Register,
das eine absolute Adressierung in einem relativen Adressmodus
ermöglicht, einen Stapelzeiger (stack pointer), fünf
Adressregister und drei Indexregister. Die Adressiereinheiten teilen
sich ein globales Bitmultiplexsteuerregister, das verwendet
wird, wenn eine Mischadresse von beiden Adresseinheiten
gebildet wird. Die Programmflußsteuereinheit 130 steuert den
Programmfluß für den digitalen Bild-/Graphikprozessor 71
einschließlich der Erzeugung von Adressen für den Befehlsabruf
über den Befehlsport. Die Programmflußsteuereinheit 130 umfaßt
einen Programmzähler PC 701, eine Befehlszeiger-Adressstufe IRA
702, die die Adresse des Befehls hält, die gegenwärtig in der
Adresspipelinestufe ist; eine Befehlszeiger-Ausführungsstufe
IRE 703, die die Adresse des Befehls hält, der sich gegenwärtig
in der Ausführungspipelinestufe befindet; einen Befehlszeiger
auf den Rücksprung von der Unterroutine IPRS 704, der die
Adresse für Rücksprünge von Unterroutinen hält; ein Satz an
Registern, die Schleifen mit Nullaufwand (zero overhead 100 ps)
steuern; und vier Cache-Tag-Register TAG3-TAGO, die zusammen
mit 708 bezeichnet werden, und die die höchstwertigen Bits der
vier Blocks aus Befehlswörtern in dem entsprechenden
Befehlscachespeicher halten.
-
Der digitale Bild-/Graphikprozessor 71 wirkt auf eine
dreistufige Pipeline, wie es in der Fig. 4 dargestellt ist. Die
Dateneinheit 110, die Adresseinheit 120 und die
Programmflußsteuereinheit 130 arbeiten gleichzeitig an verschiedenen
Befehlen in einer Befehlspipeline. Die drei Stufen sind in
chronologischer Reihenfolge Abruf, Adressierung und Ausführung.
So wird zu einem beliebigen Zeitpunkt der digitale Bild-/
Graphikprozessor 71 an verschiedenen Funktionen der drei
Befehle arbeiten. Der Ausdruck "Pipelinestufe" wird anstelle
des Bezugs auf Taktzyklen verwendet, um anzuzeigen, daß
spezielle Ereignisse auftreten, wenn die Pipeline fortschreitet
und nicht während der Bedingungen des Stillstandes.
-
Die Programmflußsteuereinheit 130 führt alle Operationen
durch, die während der Abruf-Pipelinestufe auftreten. Die
Programmflußsteuereinheit 130 umfaßt einen Programmzähler, eine
Schleifenlogik, eine Interruptlogik und eine
Pipelinesteuerlogik. Während der Abruf-Pipelinestufe wird das nächste
Befehlswort aus dem Speicher abgerufen. Die in dem
Programmzähler enthaltene Adresse wird mit den Cache-Tag-Registern
verglichen, um zu bestimmen, ob das nächste Befehlswort im
Befehlscachespeicher 21 gespeichert wird. Die
Programmflußsteuereinheit 130 liefert die Adresse in dem Programmzähler zu
dem Befehlsportadressbus 130, um dieses nächste Befehlswort aus
dem Befehlscachespeicher 21 abzurufen, wenn es vorliegt. Die
Kreuzschiene 50 übermittelt diese Adresse zum entsprechenden
Befehlscachespeicher, hier dem Befehlscachespeicher 21, der das
Befehlswort auf den Befehlsbus 132 zurückgibt. Sonst tritt ein
Cachemangel auf und die Übertragungssteuereinheit 80 greift auf
den externen Speicher zu, um das nächste Befehlswort zu
erhalten. Der Programmzähler wird aktualisiert. Wenn sich das
nächste Befehlswort an der nächsten nachfolgenden Adresse
befindet, inkrementiert die Programmflußsteuereinheit 130 dann
den Programmzähler. Sonst lädt die Programmflußsteuereinheit
130 die Adresse des nächsten Befehlswortes gemäß der
Schleifenlogik oder der Softwareverzweigung. Wenn der synchronisierte
MIMD-Modus aktiv ist, wartet der nächste Befehlsabruf, bis alle
angegebenen digitalen Bild-/Graphikprozessoren synchronisiert
sind, wie es durch die Synchronisationsbits in einem
Kommunikationsregister angezeigt wird.
-
Die Adresseinheit 120 führt alle Adressberechnungen der
Adress-Pipelinestufe durch. Die Adresseinheit 120 enthält zwei
unabhängige Adresseinheiten, eine für den globalen Port und
eine für den lokalen Port. Wenn der Befehl nach einem oder nach
zwei Speicherzugriffen verlangt, dann erzeugt die Adresseinheit
120 die Adresse(n) während der Adress-Pipelinestufe. Die
Adresse(n) werden zur Kreuzschiene 50 über den zum globalen
Port führenden Adressbus 121 und den zum lokalen Port führenden
Adressbus 122 zur Konkurrenzbetrieberkennung-/priorisierung
geliefert. Wenn kein Konkurrenzbetrieb auftritt, bereitet sich
der Speicher, auf den zugegriffen wurde, vor, den angefragten
Zugriff zu ermöglichen, jedoch tritt der Speicherzugriff
während der folgenden Ausführungs-Pipelinestufe auf.
-
Die Dateneinheit 110 führt sämtliche logischen und
arithmetischen Operationen während der Ausführungs-
Pipelinestufe durch. Sämtliche logischen und arithmetischen
Operationen und sämtliche Datenbewegungen zum Speicher oder aus
dem Speicher treten während der Ausführungs-Pipelinestufe auf.
Der globale Datenport und der lokale Datenport komplettieren
jeden Speicherzugriff, der während der Adress-Pipelinestufe
begann, während der Ausführungs-Pipelinestufe. Der globale
Datenport und der lokale Datenport führen sämtliche
Datenausrichtvorgänge durch, die durch Speichervorgänge erforderlich
sind, und beliebige Datenextrahierungen und
Zeichenerweiterungen, die durch Speicherladevorgänge benötigt werden. Wenn der
Programmzähler während einer Operation der Ausführungs-
Pipelinestufe als ein Datenziel spezifiziert wird, dann tritt
eine Verzögerung von zwei Befehlen auf, bevor eine Verzweigung
wirksam wird. Die Pipeline-Verarbeitung erfordert diese
Verzögerung, da die nächsten zwei Befehle, die einem
Verzweigungsbefehl folgen, bereits geholt worden sind. Wie bei RISC-
Prozessoren üblich können andere nützliche Befehle in die zwei
Verzögerungsschlitzpositionen gesetzt werden.
-
Der digitale Bild-/Graphikprozessor 71 umfaßt drei interne
32-Bit-Datenbusse. Dieses sind der zum lokalen Port gehörende
Datenbus Lbus 103, der zum globalen Port gehörende
Quelldatenbus Gsrc 105 und der zum globalen Port gehörende Zieldatenbus
Gdst 107. Diese drei Busse verbinden die Dateneinheit 110, die
Adresseinheit 120 und die Programmflußsteuereinheit 130
untereinander. Diese drei Busse sind auch mit einer
Datenporteinheit 140 verbunden, die einen lokalen Port 141 und einen
globalen Port 145 aufweist. Die Datenporteinheit 140 ist mit
der Kreuzschiene 50 verbunden, die den Speicherzugriff liefert.
-
Der lokale Datenport 141 besitzt einen Puffer 142, um
Daten in den Speicher zu speichern. Eine Multiplexer/Puffer-
Schaltung 143 lädt Daten auf den Lbus 103 von dem zum lokalen
Port gehörenden Datenbus 144 von dem Speicher über die
Kreuzschiene 50, von einem zum lokalen Port gehörenden
Adressbus 122 oder von einem zum globalen Port gehörenden
Datenbus 148. Der zum lokalen Port gehörende Datenbus Lbus 103
trägt so 32-Bit-Daten, die entweder von einem Register stammen
(Speichervorgänge) oder von einem Speicher kommen
(Ladevorgänge). In günstiger Weise können arithmetische
Ergebnisse in der Adresseinheit 120 über den zum lokalen Port
gehörenden Adressbus 122 und den Multiplexerpuffer 143 zum zum
lokalen Port gehörenden Datenbus Lbus 103 geführt werden, um
die arithmetischen Operationen der Dateneinheit 110 zu
berichten. Das wird weiter unten beschrieben. Der Puffer 142
und der Multiplexerpuffer 143 führen eine Ausrichtung und eine
Extrahierung von Daten durch. Der zum lokalen Port gehörende
Datenbus Lbus 103 verbindet die Datenregister in der
Dateneinheit 110. Ein den lokalen Bus vorübergehend haltendes
Register LTD 104 ist auch mit dem zum lokalen Port gehörenden
Datenbus Lbus 103 verbunden.
-
Der zum globalen Port gehörende Quelldatenbus Gsrc 105 und
der zum globalen Port gehörende Zieldatenbus Gdst 107
vermitteln globale Datenübertragungen. Diese globalen
Datenübertragungen können entweder Speicherzugriffe, Bewegungen
zwischen Registern oder Befehlswortübertragungen zwischen
Prozessoren sein. Der zum globalen Port gehörende Quelldatenbus
Gsrc 105 trägt 32-Bit-Quellinformationen eines zum globalen
Port gehörenden Datentransfers. Die Datenquelle kann
irgendeines der Register des digitalen Bild-/Graphikprozessors 71
oder irgendein Daten- oder Parameterspeicher sein, der zu einem
der digitalen Bild-/Graphikprozessoren 71, 72, 73 oder 74
gehört. Die Daten werden in dem Speicher über den globalen Port
145 gespeichert. Der Multiplexerpuffer 146 wählt die Leitungen
von dem zum lokalen Port gehörenden Datenbus Lbus 103 oder dem
zum globalen Port gehörenden Quelldatenbus Gsrc 105 und führt
eine Datenausrichtung durch. Der Multiplexerpuffer 146 schreibt
diese Daten auf den zum globalen Port gehörenden Datenbus 148
für die Anwendung auf den Speicher über die Kreuzschiene 50.
Der zum globalen Port gehörende Quelldatenbus Gsrc 105 liefert
darüber hinaus Daten zur Dateneinheit 110, was es ermöglicht,
daß die Daten des zum globalen Port gehörenden Quelldatenbusses
Gsrc 105 als eine der Quellen der arithmetisch-logischen
Einheit verwendet werden. Diese letztere Verbindung ermöglicht
es, daß irgendein Register des digitalen Bild-/
Graphikprozessors 71 als Quelle für eine Operation der
arithmetisch-logischen Einheit verwendet wird.
-
Der zum globalen Port gehörende Zieldatenbus Gdst 107
trägt 32-Bit-Zieldaten eines zum globalen Bus gehörenden
Datentransfers. Das Ziel ist irgendein Register des digitalen Bild-/
Graphikprozessors 71. Der Puffer 147 in dem globalen Port 145
stellt die Quelle für die Daten auf dem zum globalen Port
gehörenden Zieldatenbus Gdst 107 dar. Der Puffer 147 führt alle
notwendigen Datenextrahierungs- und
Zeichenerweiterungsoperationen durch. Dieser Puffer 147 arbeitet, wenn die
Datenquelle ein Speicher ist, und so wird ein Ladevorgang
durchgeführt. Das Ergebnis der arithmetisch-logischen Einheit dient
als eine alternative Datenquelle für den zum globalen Port
gehörenden Zieldatenbus Gdst 107. Dieses ermöglicht es, daß ein
beliebiges Register des digitalen Bild-/Graphikprozessors 71
das Ziel einer Operation der arithmetisch-logischen Einheit
ist. Ein den globalen Bus vorübergehend haltendes Register GTD
108 ist auch mit dem zum globalen Port gehörenden Zieldatenbus
Gdst 107 verbunden.
-
Die Multiplexerpuffer 143 und 146 umfassende
Schaltungsanordnung verbindet zwischen dem zum globalen Port gehörenden
Quelldatenbus Gsrc 105 und zum globalen Port gehörenden
Zieldatenbus Gdst 107, um Bewegungen zwischen Registern zu liefern.
Dieses ermöglicht es, daß ein Ausleseergebnis von einem
beliebigen Register des digitalen Bild-/Graphikprozessors 71 auf dem
zum globalen Port gehörenden Quelldatenbus Gsrc 105 über den
zum globalen Port gehörenden Zieldatenbus Gdst 107 in irgendein
Register des digitalen Bild-/Graphikprozessors 71 geschrieben
wird.
-
Es ist zu erkennen, daß es in vorteilhafter Weise möglich
ist, eine Eingabe in irgendein Register des digitalen Bild-/
Graphikprozessors 71 von dem Speicher über den zum globalen
Port gehörenden Zieldatenbus Gdst 107 durchzuführen, während
gleichzeitig die arithmetisch-logische Einheit in der
Dateneinheit 110 von einem beliebigen Register über den zum globalen
Port gehörenden Quelldatenbus Gsrc 105 gespeist wird. In
gleicher Weise ist es in vorteilhafter Weise möglich, die in
einem beliebigen Register des digitalen Bild-/Graphikprozessors
71 vorliegenden Daten über den zum globalen Port gehörenden
Quelldatenbus Gsrc 105 in dem Speicher zu speichern, während
das Speichern des Ergebnisses einer Operation der
arithmetischlogischen Einheit in ein Register des digitalen
Bild-/Graphikprozessors 71 über den zum globalen Port gehörenden
Zieldatenbus Gdst 107 möglich ist. Die Nützlichkeit dieser
Datenübertragungen wird unten im einzelnen beschrieben.
-
Die Programmflußsteuereinheit 130 empfängt die von dem
Befehlscachespeicher 21 geholten Befehlswörter über den
Befehlsbus 132. Diese abgerufenen Befehlswörter lassen sich
bevorzugt in zwei 64-Bit-Befehlsregistern speichern, die als
Befehlsregister-Adressstufe IRA 751 und
Befehlsregister-Ausführungsstufe IRE 752 bezeichnet werden. Der Inhalt beider
Befehlsregister IRA und IRE ist dekodiert und verteilt. Der
digitale Bild-/Graphikprozessor 71 umfaßt einen
Operationscodebus 133, der die dekodierten oder teilweise dekodierten
Befehlsinhalte zur Dateneinheit 110 und zur Adresseinheit 120
trägt. Wie weiter unten beschrieben kann ein Befehlswort ein
32-Bit-, ein 15-Bit- oder ein 3-Bit-Direktfeld (Immediate
Field) unmfassen. Die Programmflußsteuereinheit 130 lenkt ein
solches Direktfeld zum zum globalen Port gehörenden
Quelldatenbus Gsrc 105, um es seinem Ziel zuzuführen.
-
Der digitale Bild-/Graphikprozessor 71 umfaßt drei
Adressbusse 121, 122 und 131. Die Adresseinheit 120 erzeugt Adressen
auf dem zum globalen Port gehörenden Adressbus 121 und auf dem
zum lokalen Port gehörenden Adressbus 122. Wie weiter unten
beschrieben umfaßt die Adresseinheit 120 getrennte globale und
lokale Adresseinheiten, die die Adressen auf dem zum globalen
Port gehörenden Adressbus 121 bzw. dem zum lokalen Port
gehörenden Adressbus 122 liefern. Es ist zu erkennen, daß die
lokale Adresseinheit 120 auch auf einen anderen Speicher als
den zugreifen kann, der dem digitalen Bild-/Graphikprozessor
entspricht. In diesem Fall läuft der Zugriff der lokalen
Adresseinheit über den zum globalen Port gehörenden Adressbus
121. Die Programmflußsteuereinheit 130 bezieht die
Befehlsadresse auf dem Befehlsportadressbus 131 aus einer Kombination
von Adressbits von einem Programmzähler und einer
Cachesteuerlogik. Diese Adressbusse 121, 122 und 131 tragen jeweils
Adress-Bytehinweissignal- und Lese-/Schreib-Informationen.
-
Die Fig. 5 zeigt die Einzelheiten der Dateneinheit 110.
Es ist zu erkennen, daß die Fig. 5 nicht alle Verbindungen der
Dateneinheit 110 zeigt. Der Klarheit halber sind insbesondere
verschiedene Steuerleitungen und dergleichen weggelassen
worden. Daher ist die Fig. 5 im Zusammenhang mit der
nachfolgenden Beschreibung zu lesen, um ein komplettes Verständnis der
Arbeitsweise der Dateneinheit 110 zu erhalten. Die Dateneinheit
110 umfaßt eine Reihe von Teilen, die in vorteilhafter Weise
parallel arbeiten. Die Dateneinheit 110 umfaßt acht 32-Bit-
Datenregister 200, die als D7-D0 bezeichnet sind. Das
Datenregister D0 kann als ein universelles Register verwendet
werden, besitzt jedoch spezielle Funktionen, wenn es mit
speziellen Befehlen verwendet wird. Die Datenregister 200
umfassen mehrere Lese- und Schreibports, die mit den zur
Dateneinheit gehörenden Bussen 201 bis 206, mit dem zum lokalen Port
gehörenden Datenbus Lbus 103, mit dem zum globalen Port
gehörenden Quelldatenbus Gsrc 105 und mit dem zum globalen Port
gehörenden Zieldatenbus Gdst 107 verbunden sind. Die
Datenregister 200 können auch "von der Seite" gelesen werden, in
einer Weise, die als ein Rotationsregister beschrieben ist, das
unten näher beschrieben wird. Die Dateneinheit 110 umfaßt
darüber hinaus ein Statusregister 210 und ein mehrere Flags
aufweisendes Flag-Register 211, das den sich ergebenden Status
der arithmetisch-logischen Einheit für die Verwendung bei
bestimmten Befehlen speichert. Die Dateneinheit 110 umfaßt als
Hauptberechnungskomponenten einen Hardwaremultiplizierer 220
und eine drei Eingänge aufweisende arithmetisch-logische
Einheit 230. Darüber hinaus umfaßt die Dateneinheit 110 einen
ersten Multiplizierer-Eingabebus 201, einen zweiten
Multiplizierereingabebus 202, einen Multipliziererzielbus 203, einen
ALU-Zielbus 204, einen ersten ALU-Eingabebus 205, einen zweiten
ALU-Eingabebus 206; Puffer 104, 106, 108 und 236; Multiplexer
Rmux 221, Imux 222, MSmux 225, Bmux 227, Amux 232, Smux 231,
Cmux 233 und Mmux 234; und einen Produktlinksverschieber 224,
einen Addierer 226, einen Barrel-Rotator 235, die
LMO/RMO/LMBC/RMBC-Schaltung 237, die Erweiterungsschaltung 238,
den Maskenerzeuger 239, den A-Eingabebus 241, den B-Eingabebus
242, den C-Eingabebus 243, den Rotationsbus 244, den
Funktionssignalerzeuger 245, den Bit-0-Eingangsübertragungserzeuger 246
und die Befehlsdekodierlogik 250, wobei sämtliche Elemente
unten näher beschrieben werden.
-
Die nachfolgende Beschreibung der Dateneinheit 110 sowie
die weiteren Beschreibungen der Verwendung jedes der digitalen
Bild-/Graphikprozessoren 71, 72, 73 und 74 verwenden mehrere
Symbole zur Erleichterung der Ausdrucksweise. Viele dieser
Symbole sind standardmäßige mathematische Operationen, die
keiner Erklärung bedürfen. Einige sind logische Operationen,
die Fachleuten auf diesem Gebiet bekannt vorkommen werden,
deren Symbole sie jedoch nicht kennen. Schließlich beziehen
sich einige Symbole auf Operationen, die speziell bei dieser
Erfindung vorkommen. Die Tabelle 1 listet einige dieser Symbole
und ihre zugehörige Operation auf.
Tabelle 1
-
Symbol Operation
-
~ bitweises NICHT
-
& bitweises UND
-
bitweises ODER
-
^ bitweises EXKLUSIV-ODER
-
@ Flag-Register-Erweiterung
-
% Maskenerzeugung
-
%! modifizierte Maskenerzeugung
-
\\rotiere nach links
-
< < schiebe nach links
-
> > u schiebe nach rechts
-
> > s schiebe nach rechts,
-
Zeichenerweiterung
-
> > schiebe nach rechts, Zeichenerweiterung,
Standardfall
-
Parallelbetrieb
-
*(A ± X) Speicherinhalte beim Adreßbasisregister
A ± Indexregister X oder Offset X
-
&*(A ± X)
Adreßeinheit-Arithmetik-Adreßbasisregister A ± Indexregister X oder Offset
-
&*(A ± [X]) Speicherinhalte beim Adreßbasisregister
A ± skaliertes Indexregister X oder
Offset X
-
Da die Bedeutungen der oben in der Tabelle 1 aufgelisteten
Operationen nicht unmittelbar einleuchtend sein mögen, werden
sie unten im einzelnen erklärt.
-
Die Fig. 6 zeigt die Felddefinitionen für das
Statusregister 210. Das Statusregister 210 kann über den zum
globalen Port gehörenden Quelldatenbus Gsrc 105 gelesen werden
oder über den zum globalen Port gehörenden Zieldatenbus Gdst
107 beschrieben werden. Darüber hinaus kann das Statusregister
210 in ein spezifiziertes Datenregister 200 schreiben oder von
einem solchen laden. Das Statusregister 210 wird zur Steuerung
von Operationen in der Dateneinheit 110 verwendet.
-
Das Statusregister 210 speichert vier Statusbits zu
Ergebnissen der arithmetisch-logischen Einheit, nämlich die Bits
"N", "C", "V" und "Z". Diese sind einzeln unten beschrieben, ihr
gemeinsames Setzverhalten ist jedoch im folgenden beschrieben.
Es ist anzumerken, daß die hier aufgelisteten Befehlstypen
unten vollständig im einzelnen beschrieben werden. Für
Befehlswörter, die 32-Bit-Direktfelder umfassen, ist es so, daß dann,
wenn das Bedingungscodefeld "bedingungslos" ist, dann alle vier
Statusbits entsprechend dem Ergebnis der arithmetisch-logischen
Einheit 230 gesetzt werden. Wenn das Bedingungscodefeld eine
Bedingung spezifiziert, die nicht "bedingungslos" ist, dann
werden keine Statusbits gesetzt, unabhängig davon, ob die
Bedingung wahr ist. Bei Befehlswörtern, die keine 32-Bit-
Direktfeldoperationen umfassen und keine
Bedingungsoperationsfelder, werden alle Statusbits entsprechend dem Ergebnis der
arithmetisch-logischen Einheit 230 gesetzt. Bei Befehlswörtern,
die kein 32-Bit-Direktfeld umfassen und Bedingungsoperationen
erlauben, ist es so, daß dann, wenn das Bedingungsfeld
"bedingungslos" oder nicht "bedingungslos" ist und die Bedingung
wahr ist, die Befehlswortbits 28-25 anzeigen, welche Statusbits
geschützt werden sollten. Sämtliche ungeschützten Bits werden
gemäß dem Ergebnis der arithmetisch-logischen Einheit 230
gesetzt. Für Befehlswörter, die kein 32-Bit-Direktfeld umfassen
und die Bedingungsoperationen ermöglichen, ist es so, daß dann,
wenn das Bedingungsfeld nicht "bedingungslos" ist und die
Bedingung falsch ist, keine Statusbits gesetzt werden. Es gibt
keinen Unterschied in bezug auf das Statussetzverhalten bei
Boolschen Operationen und arithmetischen Operationen. Wie im
folgenden erklärt, ermöglicht dieses Verhalten die
Bedingungsbefehle und die Quellenauswahl, um Operationen durchzuführen,
die normalerweise eine Verzweigung erfordern.
-
Es gibt folgende ALU-Ergebnisbits des Statusregisters 210:
Das "N"-Bit (Bit 31) speichert einen Hinweis auf ein negatives
Ergebnis. Das "N"-Bit wird auf "1" gesetzt, wenn das Ergebnis
der letzten Operation der arithmetisch-logischen Einheit 230
negativ war. Dieses Bit wird mit dem Bit 31 des Ergebnisses
geladen. Bei einer ALU-Multioperation, die unten beschrieben
werden wird, wird das "N"-Bit auf die UND-Verknüpfung der
Nullvergleiche der mehreren Abschnitte der
arithmetischlogischen Einheit 230 gesetzt. Bei einer durch die
LMQ/RMQ/LMBC/RMBC-Schaltung 237 durchgeführten
Biterkennungsoperation wird das "N"-Bit auf die UND-Verknüpfung der
Nullvergleiche der mehreren Abschnitte der arithmetisch-logischen
Einheit 230 gesetzt. Das Schreiben in dieses Bit durch Software
überschreibt die normale ALU-Ergebnisschreiblogik.
-
Das "C"-Bit (Bit 30) speichert einen Hinweis auf ein
Übertragsergebnis. Das "C"-Bit wird auf "1" gesetzt, wenn das
Ergebnis der letzten Operation der arithmetisch-logischen
Einheit 230 einen Ausgangsübertrag von dem Bit 31 der
arithmetisch-logischen Einheit verursachte. Während der
Multiarithmetik und Biterkennung wird das "C"-Bit auf die ODER-Verknüpfung
der Übertragsausgangssignale der mehreren Abschnitte der
arithmetisch-logischen Einheit 230 gesetzt. So wird das "C"-Bit
auf "1" gesetzt, wenn wenigstens einer der Abschnitte ein
Übertragsausgangssignal aufweist. Das Schreiben in dieses Bit
mittels Software überschreibt die normale
ALU-Ergebnisschreiblogik.
-
Das "V"-Bit (Bit 29) speichert einen Hinweis auf ein
Überlaufergebnis. Das "V"-Bit wird auf "1" gesetzt, wenn das
Ergebnis der letzten Operation der arithmetisch-logischen
Einheit 230 eine Überlaufbedingung erzeugte. Dieses Bit wird
mit der EXKLUSIV-ODER-Verknüpfung des Eingangsübertrags und des
Ausgangsübertrags des Bits 31 der arithmetisch-logischen
Einheit 230 geladen. Während der ALU-Multioperation ist das
"V"-Bit die UND-Verknüpfung der Ausgangsüberträge (carry outs)
der mehreren Abschnitte der arithmetisch-logischen Einheit 230.
Für Linksrand- und Rechtsrand-Biterkennung (left most one and
right most one bit detection), wird das "V"-Bit auf "1" gesetzt,
wenn es keine "1" in dem Eingabewort gab. Ansonsten wird das
"V"-Bit auf "0" gesetzt. Für
Linksrandbitveränderungsbiterkennung und Rechtsrandbitveränderungserkennung wird das "V"-Bit
auf "1" gesetzt, wenn sämtliche Bits der Eingabe gleich sind.
Ansonsten wird "V"-Bit auf "0" gesetzt. Das Schreiben in dieses
Bit mittels Software überschreibt die normale
ALU-Ergebnisschreiblogik.
-
Das "Z"-Bit (Bit 28) speichert einen Hinweis auf ein "0"-
Ergebnis. Das "Z"-Bit wird auf "1" gesetzt, wenn das Ergebnis
der letzten Operation der arithmetisch-logischen Einheit 230
ein "0"-Ergebnis produziert. Dieses "Z"-Bit wird sowohl für
arithmetische Operationen als auch für logische Operationen
gesteuert. In Multiarithmetik- und Biterkennungsoperationen
wird das "Z"-Bit auf die ODER-Verknüpfung der Nullvergleiche
der mehreren Abschnitte der arithmetisch-logischen Einheit 230
gesetzt. Das Schreiben in dieses Bit mittels Software
überschreibt die normale
ALU-Ergebnisschreiblogikschaltungsanordnung.
-
Das "R"-Bit (Bit 6) steuert Bits, die von der
Erweiterungsschaltung 238 verwendet werden und die Rotation des
mehrere Flags aufweisenden Flag-Registers 211 während des
Ablaufs von Befehlen, die die Erweiterungsschaltung 238
verwenden, um Teile des mehrere Flags aufweisenden Flag-Registers 211
zu erweitern. Wenn das "R"-Bit "1" ist, dann sind die Bits, die
in einer Erweiterung des mehrere Flags aufweisenden Flag-
Registers 211 über die Erweiterungsschaltung 238 verwendet
werden, die höchstwertigen Bits. Bei einer Operation, die eine
Erweiterung des mehrere Flags aufweisenden Flag-Registers 211
betrifft, wobei der ALU-Funktionsmodifizierer keine Rotation
des meherere Flags aufweisenden Flag-Registers spezifiziert,
wird das meherere Flags aufweisende Flag-Register 211 "im
nachhinein nach links rotiert", entsprechend dem "Msize"-Feld.
Wenn der ALU-Funktionsmodifizierer eine Rotation des meherere
Flags aufweisenden Flag-Registers spezifiziert, dann wird das
meherere Flags aufweisende Flag-Register 211 gemäß dem "Asize"-
Feld rotiert. Wenn das "R"-Bit "0" ist, dann verwendet die
Erweiterungsschaltung 238 das niedrigstwertige Bit des mehrere
Flags aufweisenden Flag-Registers 211. Es findet entsprechend
dem "Msize"-Feld keine Rotation statt. Es kann jedoch der ALU-
Funktionsmodifizierer eine Rotation durch das "Asize"-Feld
spezifizieren.
-
Das "Msize"-Feld (Bits 5-3) gibt einen Hinweis auf die
Datengröße, die bei bestimmten Befehlsklassen verwendet wird,
die Maskendaten von dem mehrere Flags aufweisenden Flag-
Register 211 zum C-Port der arithmetisch-logischen Einheit 230
liefern. Das "Msize"-Feld bestimmt, wieviele Bits das meherere
Flags aufweisende Flag-Register 211 verwendet, um die
Maskeninformation zu erzeugen. Wenn der Befehl keine Rotation
entsprechend dem "Asize"-Feld spezifiziert, und das "R"-Bit "1"
ist, dann wird das meherere Flags aufweisende Flag-Register 211
automatisch "im nachhinein nach links rotiert", und zwar in
einem Ausmaß, das durch das "Msize"-Feld bestimmt wird. Die
Kodierungen für diese Bits sind unten in der Tabelle 2
dargestellt.
Tabelle 2
-
Wie oben erwähnt unterstützt die bevorzugte Ausführungsform
"Msize"-Felder "100", "101", und "110", entsprechend zu
Datengrößen von 8, 16 bzw. 32 Bits. Es ist anzumerken, daß eine
Rotation für ein "Msize"-Feld von "001" nicht zu einer
Veränderung der Datenausgabe führt. "Msize"-Felder "001", "010" und
"011" sind mögliche nützliche Alternativen. "Msize"-Felder "00"
und "111" sind bedeutungslos, können jedoch bei einer
Erweiterung des meherere Flags aufweisenden Flag-Registers 211 auf 64
Bits verwendet werden.
-
Das "Asize"-Feld (Bits 2-0) gibt einen Hinweis auf die
Datengröße für Multioperationen, die durch die
arithmetischlogische Einheit 230 durchgeführt werden. Die
arithmetischlogische Einheit 230 umfaßt vorzugsweise 32 parallele Bits.
Während bestimmter Befehle spaltet sich die
arithmetischlogische Einheit 230 in mehrere unabhängige Abschnitte auf. Das
wird als ALU-Multioperation bezeichnet. Dieses Aufspalten der
arithmetisch-logischen Einheit 230 ermöglicht eine parallele
Operation an Pixeln mit weniger als 32 Bits, die in 32-Bit-
Datenwörtern gepackt sind. Bei der bevorzugten Ausführungsform
unterstützt die arithmetisch-logische Einheit 230 eine einzige
32-Bit-Operation; zwei Abschnitte an 16-Bit-Operationen; und
vier Abschnitte an 8-Bit-Operationen. Diese Optionen werden
Wort-, Halbwort- bzw. Byteoperationen genannt.
-
Das "Asize"-Feld zeigt folgendes an: die Anzahl mehrerer
Abschnitte der arithmetisch-logischen Einheit 230; die Anzahl
an Bits des meherere Flags aufweisenden Flag-Registers 211, die
während der Operation der arithmetisch-logischen Einheit
gesetzt sind, wobei diese Anzahl der Anzahl an Abschnitten der
arithmetisch-logischen Einheit 230 entspricht; und die Anzahl
an Bits, die das meherere Flags aufweisende Flag-Register "im
nachhinein nach links rotieren" sollte, nachdem eine Ausgabe
während einer ALU-Multioperation erfolgte. Das durch das
"Asize"-Feld angegebene Rotationsausmaß dominiert das durch das
"Msize"-Feld angegebene Rotationsausmaß und das R-Bit, wenn der
ALU-Funktionsmodifizierer eine Multiarithmetik ohne Rotation
anzeigt. Kodierungen für diese Bits sind in der Tabelle 3
dargestellt. Es ist zu erwähnen, daß obwohl die vorliegende
Ausführungsform der Erfindung Multiarithmetik von einem 32-Bit-
Abschnitt, zwei 16-Bit-Abschnitten und vier 8-Bit-Abschnitten
unterstützt, die Kodierung des "Asize"-Feldes, die
Spezifizierung von acht Abschnitten à 4 Bit, 16 Abschnitten à 2 Bit und
32 Abschnitten à 1 Bit unterstützt. Jede dieser zusätzlichen
Abschnittsunterteilungen der arithmetisch-logischen Einheit 230
ist durchführbar. Es ist darüber hinaus zu erkennen, daß die
Kodierung des "Asize"-Feldes darüber hinaus die Spezifizierung
einer 64-Bit-Datengröße für eine mögliche Erweiterung des
mehrere Flags aufweisenden Flag-Registers 211 auf 64 Bit
unterstützt.
Tabelle 3
-
Die "Msize"- und "Asize"-Felder des Statusregisters 210
steuern verschiedene Operationen. Wenn das meherere Flags
aufweisende Flag-Register 211 als eine Quelle zur Herstellung
einer an den C-Port der arithmetisch-logischen Einheit 230
angelegten Maske verwendet wird, steuert das "Msize"-Feld die
Anzahl der verwendeten Bits und das Rotationsausmaß. In einem
solchen Fall bestimmt das "R"-Bit, ob die höchstwertigen Bits
oder die niedrigstwertigen Bits verwendet werden. Wenn das
meherere Flags aufweisende Flag-Register 211 als ein Ziel für
die Statusbits entsprechend den Abschnitten der
arithmetischlogischen Einheit 230 verwendet wird, dann steuert das "Asize"-
Feld die Anzahl und die Identität der geladenen Bits und das
optionale Rotationsausmaß. Wenn eine ALU-Multioperation mit
durch das "Asize"-Feld spezifizierter Rotation angegeben wird
bei einem Befehl, der Maskendaten zu dem C-Port liefert, die
von dem meherere Flags aufweisenden Flag-Register 211
abgeleitet wurden, dann dominiert das Rotationsausmaß des "Asize"-
Feldes über das Rotationsausmaß der Kombination des "R"-Bits
und des "Msize"-Feldes.
-
Das meherere Flags aufweisende Flag--Register 211 ist ein
32-Bit-Register, das Maskeninformationen zum C-Port der
arithmetisch-logischen Einheit 230 für bestimmte Befehle
liefert. Der zum globalen Port gehörende Zieldatenbus Gdst 107
kann in das meherere Flags aufweisende Flag-Register 211
schreiben. Der zum globalen Port gehörende Quelldatenbus Gsrc
kann Daten von dem mehrere Flags aufweisenden Flag-Register 211
lesen. Darüber hinaus können ALU-Multioperationen in das
mehrere Flags aufweisende Flag-Register 211 schreiben. In
diesem Fall zeichnet das meherere Flags aufweisende Flag-
Register 211 entweder die Übertrags- oder
Null-Statusinformationen der unabhängigen Abschnitte der arithmetisch-logischen
Einheit 230 auf. Der ausgeführte Befehl entscheidet mit seiner
Steuerung, ob der Übertrag oder die Null gespeichert wird.
-
Das "Msize"-Feld des Statusregisters 210 steuert die
Anzahl an niedrigstwertigen Bits, die von dem mehrere Flags
aufweisenden Flag-Register 211 verwendet werden. Diese Anzahl
ist in der Tabelle 2 oben angegeben. Das "R"-Bit des
Statusregisters 210 führt eine Steuerung durch, die entscheidet, ob
das mehrere Flags aufweisende Flag-Register 211 vorher vor der
Lieferung dieser Bits nach links rotiert wird. Der Wert des
"Msize"-Feldes bestimmt das Ausmaß der Rotation, wenn das "R"-
Bit "1" ist. Die ausgewählten Daten werden der
Erweiterungsschaltung 238 zugeführt, die, wie unten im einzelnen
beschrieben, eine 32-Hit-Maske erzeugt.
-
Das "Asize"-Feld des Statusregisters 210 steuert die in
dem meherere Flags aufweisenden Flag-Register 211 während der
ALU-Multioperationen gespeicherten Daten. Wie vorher
beschrieben kann bei der bevorzugten Ausführungsform die
arithmetischlogischen Einheit 230 in einem, in zwei oder in vier getrennten
Abschnitten verwendet werden, die Daten mit einer Größe von 32
Bits, 16 Bits bzw. 8 Bits verwenden. Bei der Ausführung einer
ALU-Multioperation zeigt das "Asize"-Feld anhand der
definierten Datengröße die Anzahl an Bits des meherere Flags
aufweisen
den Flag-Registers 211 an, die verwendet werden, um die Status-
Informationen jedes getrennten Ergebnisses der
arithmetischlogischen Einheit aufzuzeichnen. Die Bitbesetzung des meherere
Flags aufweisenden Flag-Registers 211 ist in der Tabelle 4
zusammengefaßt.
Tabelle 4
-
Es ist zu erkennen, daß die Tabelle 4 nur die Fälle für
Datengrößen von 8, 16 und 32 Bit umfaßt. Fachleute auf diesem Gebiet
erkennen jedoch leicht, wie die Tabelle 4 zu erweitern ist, um
die Fälle der Datengrößen 64, 4, 2 und 1 Bit, zu umfassen.
Darüber hinaus ist zu erkennen, daß die vorhergehende
Beschreibung sich nur auf das Speichern des Übertrags oder des Null-
Status in dem meherere Flags aufweisenden Flag-Register 211
bezog. Entsprechend ist natürlich das Speichern anderer
Statusbits wie des Negativ- und des Überlauf-Bits machbar.
-
Das mehrere Flags aufweisende Flag-Register 211 kann nach
links um eine Anzahl an Bit-Postionen bei der Ausführung einer
ALU-Operation rotiert werden. Das Rotationsausmaß ist oben
angegeben. Wenn ALU-Multioperationen durchgeführt werden,
dominiert die Ergebnisstatusbitsetzung über die Rotation für
diese Bits, die gesetzt sind. Wenn ALU-Multioperationen
durchgeführt werden, besteht eine Alternative zur Rotation
darin, sämtliche Bits des mehrere Bits aufweisenden Flag-
Registers 211 zu löschen, die nicht durch den Ergebnisstatus
gesetzt wurden. Dieses Löschen erfolgt nach der Erzeugung von
Maskendaten, wenn in diesem Befehl Maskendaten verwendet
werden. Wenn das mehrere Flags aufweisende Flag-Register 211
während des Aufnehmens eines ALU-Ergebnisses von Software
beschrieben wird, dann ist die bevorzugte Operation die des
Softwareschreibens, um sämtliche Bits zu laden. Das
Einschreiben durch Software dominiert daher gegenüber der Rotation und
dem Löschen des mehrere Flags aufweisenden Flag-Registers 211.
-
Die Fig. 7 zeigt die Unterteilung der
arithmetischlogischen Einheit 230 in mehrere Abschnitte. Wie in der Fig. 7
dargestellt, werden die 32 Bits der arithmetisch-logischen
Einheit 230 in vier Abschnitte à acht Bits unterteilt. Der
Abschnitt 301 umfaßt die ALU-Bits 7-0, der Abschnitt 302 die
Bits 15-8, der Abschnitt 303 die Bits 23-16 und der Abschnitt
304 die Bits 31-24. Es ist anzumerken, daß der
Übersichtlichkeit halber die Fig. 7 die Eingänge oder Ausgänge dieser
Abschnitte, die in herkömmlicher Weise ausgeführt sind, nicht
darstellt. Die Übertragspfade innerhalb jedes der Abschnitte
301, 302, 303 und 304 entsprechen denen, die im Stand der
Technik bekannt sind.
-
Die Multiplexer 311, 312 und 313 steuern die
Übertragspfade zwischen den Abschnitten 301, 302, 303 und 304. Jeder
dieser Multiplexer wird so gesteuert, daß er einen der drei
Eingänge auswählt. Der erste Eingang ist ein
Parallelübertragspfad von dem Ausgang des vorhergehenden Multiplexers, oder im
Falle des ersten Multiplexers 311 von dem
Bit-Null-Übertragserzeuger 246. Solche Parallelübertragspfade (carry look ahead
paths) und ihre Anwendungen sind im Stand der Technik bekannt
und werden daher hier nicht weiter beschrieben. Die zweite
Auswahl ist der Übertragsausgang (carry-out) von dem letzten
Bit des entsprechenden Abschnitts der arithmetisch-logischen
Einheit 230. Die letzte Auswahl ist das Übertragseingangssignal
(carry-in signal) von dem Bit-Null-Übertragseingangserzeuger
246. Der Multiplexer 314 steuert den Ausgangsübertragspfad für
die arithmetisch-logische Einheit 230. Der Multiplexer 314
wählt entweder den Parallelübertragspfad von dem durch den
Multiplexer 313 ausgewählten Ausgangsübertrag oder das
Ausgangsübertragssignal für das Bit 31 von dem Abschnitt 304
aus.
-
Die Multiplexer 311, 312, 313 und 314 werden, basierend
auf der ausgewählten Datengröße, gesteuert. In dem Normalfall
wirkt die arithmetisch-logische Einheit 230 auf
32-Bit-Datenwörter ein. Dies ist durch ein "Asize"-Feld des Status-
Registers 210 angezeigt, das gleich "110" ist. In diesem Falle
wählt der Multiplexer 311 den Ausgangsübertrag vom Bit 7, der
Multiplexer 312 wählt den Ausgangsübertrag vom Bit 15, der
Multiplexer 313 wählt den Ausgangsübertrag von dem Bit 23 und
der Multiplexer 314 wählt den Ausgangsübertrag von dem Bit 31.
So werden die vier Abschnitte 301, 302, 303 und 304 zu einer
einzigen 32-Bit-ALU zusammen verbunden. Wenn das Statusregister
210 ein Halbwort über ein "Asize"-Feld "101" auswählt, dann
wählt der Multiplexer 311 den Übertragsausgang vom Bit 7, der
Multiplexer 312 den Übertragseingang vom
Bit-Null-Übertragseingangserzeuger 246, der Multiplexer 313 den Übertragsausgang
vom Bit 23 und der Multiplexer 314 den Übertragsausgang vom Bit
31. Die Abschnitte 301 und 302 sind zu einer 16-Bit-Einheit
verbunden, und die Abschnitte 303 und 304 sind zu einer 16-Bit-
Einheit verbunden. Es ist zu erkennen, daß der Multiplexer 312
das Bit-0-Übertragseingangssignal für das Bit 16 wie das Bit 0
auswählt, da das Bit 16 das erste Bit in einem 16-Bit-Halbwort
ist. Wenn das Status-Register 210 ein Byte über ein "Asize"-
Feld "100" auswählt, dann wählen die Multiplexer 311, 312 und
313 den Übertragseingang vom Bit-0-Übertragseingangserzeuger
246 aus. Die Abschnitte 301, 302, 303 und 304 sind in vier
unabhängige 8-Bit-Einheiten unterteilt. Es ist zu erkennen, daß
die Auswahl des Bit-0-Übertragseingangssignals an jedem
Multiplexer geeignet ist, da die Bits 8, 16 und 24 jeweils das
erste Bit in einem 8-Bit-Byte sind.
-
Die Fig. 7 zeigt darüber hinaus die
Nullergebniserkennung. Jede 8-Bit-Nullerkennungsschaltung 321, 322, 323 und 324
erzeugt ein "1"-Ausgangssignal, wenn das Ergebnis aus dem
entsprechenden 8-Bit-Abschnitt sämtlichst aus Nullen besteht,
d. h. "00000000" ist. Das UND-Gatter 331 ist mit den 8-Bit-
Nullerkennungsschaltungen 321 und 322 verbunden, so daß es eine
"1" erzeugt, wenn sämtliche sechzehn Bits 15-0 "0" sind.
-
Entsprechend ist das UND-Gatter 332 mit den
8-Bit-Nullerkennungsschaltungen 321 und 322 verbunden, um eine "1" zu
erzeugen, wenn sämtliche sechzehn Bits 31-16 "0" sind.
Schließlich ist das UND-Gatter 341 mit den UND-Gattern 331 und
332 verbunden und erzeugt eine "1", wenn sämtliche 32 Bits 31-0
"0" sind.
-
Während der ALU-Multioperationen kann das mehrere Flags
aufweisende Flag-Register 211 je nach dem Befehl entweder
Übertragsausgangssignale oder den Nullvergleich speichern.
Diese gespeicherten Ergebnisse steuern die Masken zu dem C-Port
während späterer Operationen. Die Tabelle 4 zeigt die Quelle
für die gespeicherten Status-Bits. In dem Falle, in dem das
mehrere Flags aufweisende Flag-Register 211 das
Übertragsausgangssignal bzw. die Ausgangsübertragssignale speichert,
bestimmt das "Asize"-Feld des Status-Registers 210 die
Identität und Anzahl an gespeicherten Übertragsausgangssignalen. Wenn
das "Asize"-Feld Wortoperationen spezifiziert, dann speichert
das meherere Flags aufweisende Flag-Register 211 ein einzelnes
Bit, das dem Übertragsausgangssignal des Bits 31 entspricht.
Wenn das "Asize"-Feld Halbwortoperationen spezifiziert, dann
speichert das meherere Flags aufweisende Flag-Register 211 zwei
Bits, entsprechend den Übertragsausgangssignalen der Bits 31
bzw. 15. Wenn das "Asize"-Feld Byte-Operationen spezifiziert,
dann speichert das meherere Flags aufweisende Flag-Register 211
vier Bits, entsprechend den Übertragsausgangssignalen der Bits
31, 23, 15 bzw. 7. Das "Asize"-Feld steuert in entsprechender
Weise die Anzahl und Identität von Nullergebnissen, die in dem
meherere Flags aufweisenden Flag-Register 211 gespeichert
wurden, wenn die Speicherung von Nullergebnissen ausgewählt
wurde. Wenn das "Asize"-Feld Wortoperationen spezifiziert, dann
speichert das meherere Flags aufweisende Flag-Register 211 ein
einzelnes Bit, entsprechend dem Ausgangssignals des UND-Gatters
341, das anzeigt, daß die Bits 31-0 "0" sind. Wenn das
"Asize"-Feld Halbwortoperationen spezifiziert, dann speichert
das meherere Flags aufweisende Flag-Register 211 zwei Bits,
entsprechend den Ausgangssignalen der UND-Gatter 331 bzw. 332.
-
Wenn das "Asize"-Feld Byte-Operationen spezifiziert, dann
speichert das mehrere Flags aufweisende Flags-Register 211 4-Bits,
ensprechend den Ausgaben der 8-Bit-0-Erkennungsschaltungen 321,
322, 323 bzw. 324.
-
Es ist technisch durchführbar und liegt innerhalb des
Schutzbereichs der Erfindung, der arithmetisch-logischen Einheit
230 weitere Multioperationen zu erlauben wie: 8 Abschnitte an
4-Bit-Operationen; 16 Abschnitte an 2-Bit-Operationen; und 32
Abschnitte mit Einzel-Bit-Operationen. Es ist zu erkennen, daß
sowohl die "Msize"- und die "Asize"-Felder des Statusregisters
210 eine Codierung umfassen, um solche zusätzlichen Multi-
Operationstypen zu unterstützen. Fachleute auf diesem Gebiet
können leicht die in der Fig. 7 dargestellten Schaltungen unter
Verwendung von zusätzlichen Multiplexe m und UND-Gattern
modifizieren und erweitern. Diese letzteren durchführbaren Optionen
werden bei der bevorzugten Ausführungsform wegen der
zusätzlichen Komplexität beim Aufbau der ALU 230 nicht unterstützt. Es
ist darüber hinaus zu erkennen, daß dieses Verfahren auf eine
Datenverarbeitungsvorrichtung ausgedehnt werden kann, die 64-
Bit-Daten verwendet, und daß die gleichen Lehren eine solche
Erweiterung ermöglichen.
-
Die Datenregister 200, die als Datenregister D7-D0
bezeichnet sind, sind mit dem zum lokalen Port gehörenden
Datenbus Lbus 103, dem zum globalen Port gehörenden Quelldatenport
Gsrc 105 und dem zum globalen Port gehörenden Zieldatenbus Gdst
107 verbunden. Die Pfeile innerhalb des die Datenregister 200
darstellenden Rechtecks zeigen die Richtungen des Datenzugriffs
an. Ein nach links zeigender Pfeil weist auf Daten hin, die aus
den Datenregistern 200 abgerufen werden. Ein nach rechts
zeigender Pfeil weist auf Daten hin, die in die Datenregister 200
geschrieben werden. Der zum lokalen Port gehörende Datenbus
Lbus 103 ist in bidirektionaler Weise mit den Datenregistern
200 als eine Datenquelle oder ein Datenbestimmungsort
verbunden. Der zum globalen Port gehörende Zieldatenbus Gdst 107 ist
mit den Datenregistern 200 als eine Datenquelle für in die
Datenregister 200 geschriebene Daten verbunden. Der zum
globa
len Port gehörende Quelldatenbus Gsrc 107 ist mit den
Datenregistern 200 als ein Datenbestimmungsort für Daten verbunden,
die von den Datenregistern 200 in einem normalen
Datenregistermodus und in einem unten beschriebenen Rotationsregistermodus
abgerufen werden. Das Statusregister 210 und das mehrere Flags
aufweisende Flag-Register 211 können über den zum globalen Port
gehörenden Quelldatenbus Gsrc 106 ausgelesen und über den zum
globalen Port gehörenden Zieldatenbus Gdst 107 beschrieben
werden. Die Datenregister 200 liefern Daten zum ersten
Eingabebus 201 des Multiplexers, zum zweiten Eingabebus 202 des
Multiplexers, zum ersten ALU-Eingabebus 205 und zum zweiten ALU-
Eingabebus 206. Die Datenregister 200 sind so angeschlossen,
daß sie Eingabedaten von dem Zielbus 203 des Multiplexers und
von dem ALU-Zielbus 204 empfangen.
-
Die als D7-D0 bezeichneten Datenregister 200 sind so
verbunden, daß sie ein 256-Bit-Rotationsregister bilden, wie es in
der Fig. 8 dargestellt ist. Dieses Rotationsregister wird
insgesamt als Rotationsregister ROT 208 bezeichnet. Dabei steht
ROT für Rotationsregister. So wird ein 256-Bit-Register
gebildet, das acht 32-Bit-Rotationsregister ROT0, ROT1, ... ROT7
umfaßt. Die Fig. 8 zeigt in Teilen die Definitionen der
Rotationsregister ROT0, ROT1, ... ROT7. Diese Rotationsregister sind
von der Seite aus in Bezug auf die Datenregister D7-D0
definiert. Das Rotationsregister 208 kann durch einen Nicht-ALU-
Befehl DROT, wie unten beschrieben, rotiert werden. Während
dieser Rotation wird das niedrigstwertige Bit des
Datenregisters D7 in das höchstwertige Bit des Datenregisters D6, etc.
gedreht. Das niedrigstwertige Bit des Datenregisters D0 wird
wieder in Rückwärtsrichtung verbunden mit dem höchstwertigen
Bit des Datenregisters D7. 8-Bit-Bytes des ROT-Registers 208
können gleichzeitig gelesen werden. Die vier 8-Bit-Bytes sind
entsprechende Bit-Oktetts, die in jedem der Datenregister 200
die gleiche Bitnummer aufweisen, wie es unten in der Tabelle 5
und in der Fig. 8 dargestellt ist.
Tabelle 5
-
Rotationsregisterbits Bit-Oktett von jedem D7-D0-Bit
-
31-24 24
-
23-16 16
-
15-8 8
-
7-0 0
-
Wenn ein DROT-Befehl ausgeführt wird, wird das 256-Bit-
Rotationsregister 208 nach rechts um eine Bitstelle gedreht.
Das niedrigstwertige Bit 0 jedes Bytes A, B, C, D jedes
Registers, zum Beispiel D7, wird wie dargestellt auf eine spezielle
Bitnummer der ROT-Registerausgabe auf den zum globalen Port
gehörenden Quelldatenbus Gsrc 105 abgebildet. Bei der
bevorzugten Ausführungsform wird das ROT-Register 208 nur gelesen, es
kann jedoch bei anderen Ausführungsformen auch beschrieben
werden.
-
Das ROT-Register 208 ist bei Bildrotationen, orthogonalen
Transformationen und Spiegeltransformationen nützlich. Das
Durchführen von 32-Bit-Speicheraktionen in den Speicher durch
das Rotationsregister 208 parallel mit acht DROT-Befehlen
rotiert vier 8 · 8-Bit-Flicken an Daten im Uhrzeigersinn um
90º. Die rotierten Daten werden in den Zielspeicherstellen
gespeichert. Verschiedene Kombinationen des Registerladens, der
Speicheradreßspeicherung und der Datengrößenveränderung
ermöglichen eine Vielzahl an im Uhrzeigersinn oder gegen den
Uhrzeigersinn erfolgenden Rotationen von 8 · 8-Bit-Flicken. Die
Rotation von größeren Bereichen kann durch Bewegen von ganzen
Bytes durchgeführt werden. Diese bemerkenswerte orthogonale
Struktur, die einen Registerdateizugriff auf die Register D7-D0
in einem Modus und einen Rotationsregisterzugriff bei der DROT-
Operation erlaubt, ist nur etwas komplexer als eine
Registerdatei alleine.
-
Das Datenregister D0 besitzt eine Doppelfunktion. Es kann
als normales Datenregister wie die anderen Datenregister D7-D1
verwendet werden. DAs Datenregister D0 kann darüber hinaus
bestimmte Funktionen definieren, wenn einige Befehle ausgeführt
werden. Einige der Bits des höchstwertigen Halbwortes des
Datenregisters D0 spezifizieren die Operation aller Typen von
Operationen mit erweiterter ALU. Einige Bits des
niedrigstwertigen Halbworts des Datenregisters D0 spezifieren
Mulitpliziereroptionen während einer Multimultiplikationsoperation. Die
5 niedrigstwertigsten Bits des Datenregisters D0 spezifizieren
eine Standard-Barrel-Rotationsgröße, die bei bestimmten
Befehlsklassen verwendet wird. Die Fig. 9 zeigt die Inhalte des
Datenregisters D0, wenn die Operation der Dateneinheit 110
spezifiziert wird.
-
Das "FMOD" -Feld (Bits 31-28) des Datenregisters D0
ermöglicht die Modifikation der Grundoperation der ALU 230, wenn ein
Befehl ausgeführt wird, der eine Operation mit erweiterter ALU
(EALU) verlangt. Die Tabelle 6 illustriert diese
Modifiziereroptionen. Es ist zu erkennen, daß, wie in der Tabelle 6
angezeigt, bestimmte Befehlswortbits in einigen Befehlsformaten als
Funktionsmodifizierer in der gleichen Weise decodiert werden.
Dieses wird unten weiter erläutert werden.
Tabelle 6
-
Funktionsmodifizierercode durchgeführte Modifikation
-
0 0 0 0 Normale Operation
-
0 0 0 1 cain
-
0 0 1 0 %!, falls Maskenerzeugungsbefehl
LMO, falls kein Maskenerzeugungsbefehl
-
0 0 1 1 (%! und cain), falls Maskenerzeugungsbefehl
RMO, falls kein Maskenerzeugungsbefehl
-
0 1 0 0 A-Port = 0
-
0 1 0 1 A-Port = 0 und cain
-
0 1 1 0 (A-Port = 0 und %!), falls Maskenerzeugungsbefehl
LMBC, falls kein Maskenerzeugungsbefehl
-
0 1 1 1 (A-Port = 0 und %! und cain), falls
Maskenerzeugungsbefehl
RMBC, falls kein Maskenerzeugungsbefehl
-
1 0 0 0 ALU-Multioperationen,
Übertragsausgang (bzw. -ausgänge) → Multiflag-
Register,
-
1 0 0 1 ALU-Multioperationen,
Nullergebnis(se) → Multiflag-Register
-
1 0 1 0 ALU-Multioperationen,
Übertragsausgang (bzw. -ausgänge) → Multiflag-
Register,
rotiere um "Asize"-Feld des Status-Registers
-
1 0 1 1 ALU-Multioperationen,
Nullergebnis(se) → Multiflag-Register,
rotiere um "Asize"-Feld des Status-Registers
-
1 1 0 0 ALU-Multioperationen,
Übertragsausgang (bzw. -ausgänge) → Multiflag-
Register, lösche Multiflag-Register
-
1 1 0 1 ALU-Multioperationen,
Nullergebnis(se) → Multiflag-Register,
lösche Multiflag-Register
-
1 1 1 0 Reserviert
-
1 1 1 1 Reserviert
-
Die in der Tabelle aufgelisteten modifizierten Operationen
sind unten erklärt. Wenn das "FMOD"-Feld "0000" ist, ergibt
sich das normale unmodifizierte Operationsergebnis. Die
Modifikation "cain" führt dazu, daß der Übertragseingang zum Bit 0
der ALU 230 das "C"-Bit des Statusregisters 210 annimmt. Dieses
ermöglicht Additionen mit Übertrag, Subtraktionen mit
Negativübertrag und Negation mit Negativübertrag. Die Modifikation
"%!" arbeitet mit Maskenerzeugung. Wenn die "%!"-Modifikation
aktiv ist, erzeugt der Maskenerzeuger 239 in wirksamer Weise
lauter "1en" für ein Nullrotationsausmaß anstelle von lauter
"0en". Diese Funktion kann dadurch implementiert werden, daß
die durch den Maskenerzeuger 239 erzeugte Maske verändert wird
oder die Funktion der ALU 230 so modifiziert wird, daß die
Maske mit lauter "0en", die zum C-Port geliefert wird, so
arbeitet, als wenn lauter "1en" zugeführt worden wären. Diese
Modifikation ist bei einigen Rotationsoperationen nützlich. Die
Modifikationen "LMO", "RMO", "LMBC" and "RMBC" bestimmen die
Steuerung der LMO/RMO/LMBC/RMBC-Schaltung 237. Die Modifikation
"LMO" findet die am weitesten links stehende "1" der zweiten
Arithmetikeingabe. Die Modifikation "RMO" findet die am
weitesten rechts stehende "1". Die Modifikation "LMBC" findet das am
weitesten links stehende Bit, das sich von dem Vorzeichenbit
(Bit 31) unterscheidet. Die Modifikation "RMBC" findet das am
weitesten rechts stehende Bit, das sich von dem ersten Bit (Bit
0) unterscheidet. Es ist zu erkennen, daß diese Modifikationen
nur dann relevant sind, wenn der C-Port der ALU 230 keine Maske
vom Maskenerzeuger 239 empfängt. Die Modifikation "A-Port = 0"
zeigt an, daß der Eingang des A-Ports der ALU 230 auf Null
liegt. Das kann über den Multiplexer Amux 232 erfolgen, der ein
Nullausgangssignal liefert, oder aber es kann die Operation der
ALU 230 so verändert werden, daß sich der gleiche Effekt
ergibt. Eine "A-Port = 0"-Modifikation wird bei bestimmten
Negations-, Absolutwert- und Rechtsschieboperationen verwendet.
Eine "ALU-Multioperation"-Modifikation zeigt an, daß einer oder
mehrere der Übertragungspfade der ALU 230 durchbrochen sind,
wodurch zwei oder mehrere unabhängige arithmetisch-logische
Einheiten parallel arbeiten. Das "Asize"-Feld des
Statusregisters 210 steuert die Anzahl solcher mehrerer ALU-
Abschnitte. Das Multiflag-Register 211 speichert eine Anzahl an
Statusbits, die der Anzahl an Abschnitten der
Multi-ALU-Operationen entspricht. Bei der "Übertragsausgang (bzw. -ausgänge)
→ Multiflag"-Modifikation werden das Übertragsausgangsbit oder
die Übertragsausgangsbits in dem Multiflag-Register 211
gespeichert. Bei der "Nullergebnis(se) →
Multiflag"-Modifikation wird eine Anzeige des Nullergebnisses für den
entsprechenden ALU-Abschnitt in dem Multiflag-Register 211 gespeichert.
Dieser Prozeß ist oben zusammen mit der Beschreibung des
Multiflag-Registers 211 beschrieben. Während dieser
Speicheroperation können Bits innerhalb des Multiflag-Registers 211
in Reaktion auf die "Rotations"-Modifikation rotiert werden
oder in Reaktion auf die "Löschungs"-Modifikation gelöscht
werden. Diese Optionen sind oben zusammen bei der Beschreibung
des Multiflag-Registers 211 beschrieben.
-
Das "A"-Bit (Bit 27) des Datenregisters D0 führt eine
Steuerung durch, die entscheidet, ob die ALU 230 eine
arithmetische oder eine Boolsche Operation während einer erweiterten
ALU-Operation durchführt. Dieses Bit wird Arithmetikfreigabebit
genannt. Wenn das "A"-Bit "1" ist, dann wird eine
Arithmetikoperation durchgeführt. Wenn das "A"-Bit "0" ist, dann wird
eine Logikoperation durchgeführt. Wenn das "A"-Bit eine "0"
ist, dann ist der Übertragseingang vom
Bit-0-Übertragseingangserzeuger 246 in das Bit 0 der ALU 230 im allgemeinen
"0". Wie unten weiter erläutert können bestimmte erweiterte
ALU-Operationen ein Übertragseingangsbit von "0" aufweisen,
selbst wenn das "A"-Bit "0" ist, was eine Logikoperation
anzeigt.
-
Das "EALU"-Feld (Bits 19-26) des Datenregisters D0
definiert eine Operation mit erweiterter ALU. Die acht Bits des
"EALU"-Feldes spezifizieren die ALU-Funktionssteuerbits, die
bei allen Typen von Operationen mit erweiterter ALU verwendet
werden. Aus diesen Bits werden die Steuerbits der ALU 230. Sie
können der ALU 230 direkt übergeben werden oder entsprechend
dem "FMOD"-Feld modifiziert werden. Bei einigen Befehlen werden
die Bits des "EALU"-Feldes invertiert, was zu einem "EALUF"
oder einer erweiterten ALU-Falschoperation führt. In diesem
Falle sind die acht Steuerbits, die zur ALU 230 geliefert
werden, invertiert.
-
Das "C"-Bit (Bit 18) des Datenregisters D0 bestimmt den
Übertragseingang zum Bit 0 der ALU 230 während der Operationen
mit erweiterter ALU. Der Übertragseingangswert in das Bit 0 der
ALU während der Operationen mit erweiterter ALU ist durch
dieses "C"-Bit gegeben. Dies ermöglicht es, den
Übertragseingangswert direkt anzugeben, anstelle ihn durch eine Formel
anzugeben wie bei Nicht-EALU-Operationen.
-
Das "I"-Bit (Bit 17) des Datenregisters D0 wird als das
invertierte Übertragseingangsbit bezeichnet. Das "I"-Bit
bestimmt zusammen mit dem "C"-Bit und dem "S"-Bit (das unten
definiert wird), ob der Übertragseingang in das Bit 0 der ALU
230 invertiert wird oder nicht, wenn der Funktionscode einer
ALU-Operation invertiert ist. Dies wird unten näher beschrieben
werden.
-
Das "S"-Bit (Bit 16) des Datenregisters D0 zeigt die
Auswahl der Vorzeichenerweiterung an. Das "S"-Bit wird verwendet,
wenn "erweiterte ALU"-Operationen durchgeführt werden ("A"-
Bit = 1). Wenn das "S"-Bit "1" ist, dann sollten
ALU-Steuersignale F3-F0 (die von den Bits 22-19 produziert werden)
invertiert werden,. wenn das Zeichen Bit (Bit 31) des ersten ALU-
Dateneingabebuses 206 "0" ist, und nicht invertiert werden,
wenn dieses Zeichen Bit "1" ist. Die Wirkung des von
Bedingungen abhängigen Invertierens der ALU-Steuersignale F3-F0 wird
unten beschrieben werden. Eine solche Invertierung ist
nützlich, um eine rotierte Eingabe bei bestimmten
Arithmetikoperationen einer Zeichenerweiterung zu unterziehen. Wenn die
"erweiterte ALU"-Operation Boolsch ist ("A"-Bit = 0), dann wird
das "S"-Bit ignoriert, und die ALU-Steuersignale F3-F0 sind
unverändert.
-
Die Tabelle 7 zeigt die Wechselwirkung zwischen den "C"-,
"I"- und "S"-Bits des Datenregisters D0. Es ist zu erkennen,
daß ein "X"-Eintrag für das "I"-Bit oder das erste
Eingabevorzeichen anzeigt, daß das Bit das Ergebnis nicht steuert, d. h.,
daß es sich um eine "Egal"-Bedingung handelt.
Tabelle 7
-
Wenn das "S"-Bit "1" ist und das Vorzeichenbit der ersten
Eingabe, die für den B-Port der ALU 230 bestimmt ist, gleich
"0" ist, dann kann der Wert des Übertragseingangs zum Bit 0 der
ALU 230, der durch das "C"-Bit gesetzt ist, optional
entsprechend dem Wert des "I"-Bits invertiert werden. Das ermöglicht
es, daß der Übertragseingang in optionaler Weise invertiert ist
oder nicht, basierend auf dem Zeichen des Eingangs. Es ist
darüber hinaus auch zu erkennen, daß die ALU-Steuersignale F3-
F0 in optionaler Weise, basierend auf dem Zeichen des Eingangs,
invertiert sind, wenn das "S"-Bit "1" ist. Diese Auswahl der
Invertierung der ALU-Steuersignale F3-F0 kann durch das "FMOD"-
Feld überschrieben werden. Wenn das "FMOD"-Feld angibt
"Übertragseingang = Statusregister-Übertragsbit", dann
entspricht der Übertragseingang dem "C"-Bit des Statusregisters
210, unabhängig von dem Wert der "S"- und "I"-Bits. Es ist
darüber hinaus zu erkennen, daß der Übertragseingang für das Bit 0
der ALU 230 über das "C"-Bit für erweiterte ALU-Operationen auf
"1" gesetzt werden kann, selbst wenn das "A"-Bit "0" ist, was
eine Boolsche Operation anzeigt.
-
Das "N"-Bit (Bit 15) des Datenregisters D0 wird verwendet,
wenn eine Spaltungs- oder Mehrfachabschnitts-ALU-Operation
durchgeführt wird. Dieses "N"-Bit wird als
Anti-Multimaskierungsbit bezeichnet. Für einige "erweiterte ALU"-Operationen,
die eine Multioperation über das "FMOD"-Feld spezifizieren,
gibt der Befehl eine Maske an, die zum C-Port der ALU 230 über
den Maskenerzeuger 239 geleitet wird. Dieses "N"-Bit
entscheidet, ob die Maske in die gleiche Anzahl an Abschnitten wie die
ALU 230 unterteilt wird oder nicht. Man vergegenwärtige sich,
daß die Anzahl an derartigen Mehrfachabschnitten durch das
"Asize"-Feld des Statusregisters 210 gesetzt wird. Wenn das
"N"-Bit "0" ist, dann wird die Maske in mehrere Masken
unterteilt. Wenn das "N"-Bit "1" ist, dann erzeugt der
Maskenerzeuger 239 eine einzige 32-Bit-Maske.
-
Das "E"-Bit (Bit 14) bestimmt einen expliziten
Multiübertragseingang. Dieses Bit erlaubt es, daß der Übertragseingang
während der Durchlaufzeit durch den Eingang des C-Ports der ALU
230 spezifiziert wird. Wenn sowohl das "A"-Bit als auch das
"E"-Bit "1" sind und das "FMOD"-Feld nicht die Cain-Funktion
bestimmt, dann werden die Effekte der "S"-, "I"- und "C"-Bits
annulliert. Die Übertragseingabe in jeden Abschnitt während der
Multiarithmetik wird als das EXKLUSIV-ODER des
niedrigstwertigsten Bits der entsprechenden Abschnittseingabe zum C-Port und
des Funktionssignals F0 genommen. Wenn die Multiarithmetik
nicht ausgewählt ist, ist der Übertragseingang zum Bit 0 der
ALU 230 das EXKLUSIV-ODER des niedrigstwertigsten Bits (Bit 0)
des Eingangs zum C-Port und des Funktionssignals F0. Das ist
besonders nützlich zum Durchführen der Multiarithmetik, bei der
verschiedene Funktionen in verschiedenen Abschnitten
durchgeführt werden. Eine erweiterte ALU-Operation entspricht
(A^B) & C (A^~B) & C. Wird eine Maske für den C-Port-Eingang
verwendet, so erzeugt ein Abschnitt mit lauter "0en" eine
Addition mit dem passenden Übertragseingang von "0" und ein
Abschnitt mit lauter "1en" erzeugt eine Subtraktion mit dem
passenden Übertragseingang von "1".
-
Das "DMS"-Feld (Bits 12-8) des Datenregisters D0 definiert
die dem Multiplizierer nachfolgende Verschiebung. Diese
Verschiebung findet im Produktlinksverschieber 224 vor dem Sichern
des Ergebnisses oder dem Durchleiten des Ergebnisses zur
Rundungslogik statt. Während dieser Linksverschiebung werden die
hinausgeschobenen höchstwertigen Bits verworfen und Nullen
wer
den in die niedrigstwertigen Bits geschoben. Das "DMS"-Feld ist
während einer beliebigen Multiplizier-/"erweiterte
ALU"-Operation wirksam. Bei der bevorzugten Ausführungsform wählen die
Bits 9-8 des Datenregisters D0 eine Verschiebung nach links um
0, 1, 2 oder 3 Plätze aus. Die Tabelle 8 zeigt die Decodierung.
Tabelle 8
-
Das "DMS"-Feld umfaßt 5 Bits, die eine Linksverschiebung
in einem Ausmaß von 0 bis 31 Plätzen bestimmen können. Bei der
bevorzugten Ausführungsform ist der Produktlinksverschieber 224
auf Verschiebungen von 0 bis zu 3 Plätzen aus Gründen der Größe
und Komplexität begrenzt. So werden die Bits 12-10 des
Datenregisters D0 beim Setzen des Ausmaßes der Linksverschiebung
ignoriert. Jedoch ist es machbar, eine Linksverschiebung in
einem Ausmaß in dem vollen Bereich von 0 bis 31 Plätzen von dem
"DMS"-Feld zu liefern, wenn das gewünscht ist.
-
Das "M"-Bit (Bit 7) des Datenregisters D0 zeigt eine
Multimultiplizieroperation an. Der Multiplizierer 220 kann zwei
16-Bit-Zahlen multiplizieren, um ein 32-Bit-Ergebnis zu
erzeugen oder gleichzeitig zwei Paare an 8-Bit-Zahlen
multiplizieren, um ein Paar von 16-Bit-Ergebnissen zu erzeugen. Dieses
"M"-Bit wählt entweder eine 16 · 16-Multiplikation aus, wenn
"M" = "0" ist oder zwei 8 · 8-Multiplikationen, wenn "M" = "1"
ist. Diese Operation entspricht den ALU-Multioperationen und
wird unten weiter beschrieben.
-
Das "R"-Bit (Bit 6) des Datenregisters D0 gibt an, ob eine
Rundungsoperation an dem Ergebnis von dem Multiplizierer 220
vorgenommen werden soll. Wenn das "R"-Bit "1" ist, dann findet
eine Rundungsoperation, die unten zusammen mit der Operation
des Multiplizierers 220 erklärt ist, statt. Wenn das "R"-Bit
"0" ist, dann findet keine Rundung statt und das
32-Bit-Ergebnis von dem Multiplizierer 220 wird in das Zielregister
geschrieben. Es ist zu erkennen, daß die Verwendung eines
vorherbestimmten Bits im Datenregister D0 nur eine bevorzugte
Ausführungsform zum Auslösen dieses Modus ist. Es ist natürlich
genauso möglich, den Rundungsmodus über ein vorherbestimmtes
Befehlswortbit freizugeben.
-
Das "DBR"-Feld (Bits 4-0) des Datenregisters D0 gibt ein
Standard-Barrel-Rotationsausmaß an, daß der Barrel-Rotator 235
während bestimmter Befehle verwendet. Das "DBR"-Feld gibt die
Anzahl an Bitpositionen an, die der Barrel-Rotator 235 nach
links rotiert. Diese 5 Bits können eine Linksrotation zwischen
0 und 31 Plätzen angeben. Der Wert des "DBR"-Feldes kann auch
zum Maskenerzeuger 239 über den Multiplexer Mmux 234 geliefert
werden. Der Maskenerzeuger 239 erzeugt eine Maske, die zum C-
Port der ALU 230 geliefert wird. Die Operation des
Maskenerzeugers 239 wird unten beschrieben werden.
-
Der Multiplizierer 220 ist ein
Hardware-Einfachzyklusmultiplizierer. Wie oben beschrieben arbeitet der Multiplizierer
220 so, daß er ein Paar an 16-Bit-Zahlen multipliziert, um ein
32-Bit-Ergebnis zu erzielen, oder zwei Paare an 8-Bit-Zahlen
multipliziert, um zwei 16-Bit-Ergebnisse in dem gleichen 32-
Bit-Datenwort zu erzielen.
-
Die arithmetisch-logische Einheit 230 führt arithmetische
und logische Operationen innerhalb der Dateneinheit 110 durch.
Die arithmetisch-logische Einheit 230 umfaßt günstigerweise
drei Eingabeports zum Durchführen von arithmetischen und
logischen Operationen mit drei Eingaben. Zahlreiche Busse und
Zusatzhardware beliefern die drei Eingänge.
-
Der A-Eingabebus 241 liefert Daten zu einem A-Port der
arithmetisch-logischen Einheit 230. Der Multiplexer Amux 232
liefert in Abhängigkeit von dem Befehl Daten zum A-Eingabebus
241 von dem zweiten Multiplexereingabebus 202 oder dem ersten
ALU-Eingabebus 205. Die Daten auf dem zweiten
Multiplizierereingabebus 202 können von einem bestimmten Register der
Datenregister 200 oder einem Direktfeld des Befehls,
gleitet über den Multiplexer Imux 222 und den Puffer 223, stammen.
Die Daten auf dem ersten ALU-Eingabebus 205 können von einem
bestimmten Register der Datenregister 200 oder von dem zum
globalen Port gehörenden Quelldatenbus Gsrc 105 stammen, wobei
sie im letzteren Fall über den Puffer 106 geleitet werden. So
können die zum A-Port der ALU 230 gelieferten Daten von einem
der Datenregister 200, von einem Direktfeld des Befehlsworts
oder einer entfernten Quelle von einem weiteren Register des
digitalen Bild-/Graphikprozessors 71, geleitet über den zum
globalen Port gehörenden Quelldatenbus Gsrc 105 und den Puffer
106, stammen.
-
Der B-Eingabebus 242 liefert Daten zum B-Port der ALU 230.
Der Barrel-Rotator 235 liefert Daten zum B-Eingabebus 242. So
steuert der Barrel-Rotator 235 die Eingabe zum B-Port der ALU
230. Der Barrel-Rotator 235 empfängt Daten von dem zweiten ALU-
Eingabebus 206. Der zweite ALU-Eingabebus 206 liefert Daten von
einem bestimmten Register der Datenregister 200, Daten von den
zum gobalen Port gehörenden Quelldatenbus Gsrc 105 über den
Puffer 104 oder ein spezielles Datenwort von dem Puffer 236.
Der Puffer 236 führt eine 32-Bit-Datenkonstante
"00000000000000000000000000000001" (die auch als Hex "1"
bezeichnet wird) dem zweiten ALU-Eingabebus 206 zu, wenn eine
Freigabe erfolgte. Es ist hierin zu erkennen, daß Daten oder
Adressen, denen die Abkürzung "Hex" vorausgeht, im
Hexadezimalcode ausgedrückt sind. Es können Daten von dem zum globalen
Port gehörenden Quelldatenbus Gsrc 105 dem Barrel-Rotator 235
als eine entfernte Quelle, wie vorher beschrieben, zugeführt
werden. Wenn der Puffer 236 freigegeben ist, aktiviert der
Barrel-Rotator 235 die Erzeugung einer beliebigen Konstante der
Form 2 N an dem B-Eingabebus 242, wobei N das
Barrel-Rotationsausmaß ist. Konstanten dieser Form sind bei Operationen
nützlich, um ein einziges Bit eines 32-Bit-Datenworts zu steuern.
Die dem zweiten ALU-Eingabebus 206 und dem Barrel-Rotator 235
zugeführten Daten hängen von dem Befehl ab.
-
Der Barrel-Rotator 235 ist ein 32-Bit-Rotator, der die von
ihm empfangenen Daten in einem Bereich von 0 bis 31 Positionen
rotieren kann. Er ist ein Linksrotator, jedoch kann eine
Rechtsrotation von n Bits durch Linksrotation von 32-n-Bits
erzielt werden. Eine 5-Bit-Eingabe vom Rotationsbus 244 steuert
das Ausmaß der durch den Barrel-Rotator 235 gelieferten
Rotation. Es ist anzumerken, daß die Rotation kreisförmig
erfolgt und keine Bits verloren gehen. Die links nach außen
rotierten Bits des Barrel-Rotators 235 laufen rechts wieder
hinein. Der Multiplexer Smux 231 versorgt den Rotationsbus 244.
Der Multiplexer Smux 231 besitzt mehrere Eingänge. Diese
Eingänge sind: die fünf niedrigstwertigen Bits des ersten
Multiplizierereingabebusses 201; die fünf niedrigstwertigen
Bits des zweiten Multiplizierereingabebusses 202; die fünf Bits
von dem "DBR"-Feld des Datenregisters D0~ und eine 5-Bit-0-
Konstante "00000". Es ist zu erkennen, daß deswegen, weil der
zweite Multiplizierereingabebus 202 Direktdaten über den
Multiplexer Imux 222 und den Puffer 223 empfangen kann, das
Befehlswort ein Direktrotationsausmaß zum Barrel-Rotator 235
liefern kann. Der Multiplexer Smux 231 wählt eine dieser
Eingaben aus, um das Ausmaß der Rotation in dem Barrel-Rotator 235
je nach dem Befehl zu bestimmen. Jede der Rotationsmengen
beträgt fünf Bits und kann so eine Linksrotation in dem Bereich
zwischen 0 und 31 Bits einstellen.
-
Der Barrel-Rotator 235 liefert darüber hinaus Daten zum
Multiplexer Bmux 227. Das ermöglicht es, daß die vom Barrel-
Rotator 235 rotierten Daten in einem der Datenregister 200 über
den Multipliziererzielbus 203 parallel mit einer Operation der
ALU 230 gespeichert werden. Der Barrel-Rotator 235 teilt den
Multipliziererzielbus 203 mit dem Multiplexer Rmux 221 über den
Multiplexer Bmux 227. So können die rotierten Daten nicht
gesichert werden, wenn eine Multiplizieroperation stattfindet. Bei
der bevorzugten Ausführungsform wird dieses
Rückschreibverfahren insbesondere durch "erweiterte ALU"-Operationen
unterstützt, und es kann deaktiviert werden, indem das gleiche
Zielregister für das Ergebnis des Barrel-Rotators 235 angegeben
wird wie für das Ergebnis der ALU 230. In diesem Fall wird nur
das Ergebnis der ALU 230, das auf dem ALU-Zielbus 204
erscheint, gesichert.
-
Obwohl sich die obige Beschreibung auf einen
Barrel-Rotator 235 bezieht, ist für Fachleute auf dem Gebiet zu erkennen,
daß die wesentlichen Funktionen ein Schieber erzielen könnte,
der Daten nicht umlaufen läßt. Insbesondere für Schiebe- und
Maskenoperationen, bei denen nicht sämtliche Bits für den B-
Port der ALU 230 verwendet werden, liefert ein durch den
Rotationsbus 244 gesteuerter Schieber (Shifter) die benötigte
Funktionalität. In diesem Fall zeigt ein zusätzliches Bit, zum
Beispiel das höchstwertige Bit auf dem Rotationsbus 244,
vorzugsweise an, ob eine Verschiebung nach rechts oder eine
Verschiebung nach links zu erfolgen hat. Es sind fünf Bits auf
dem Rotationsbus 244 erforderlich, um das Ausmaß der
Verschiebung zu bestimmen. Daher sollte in der Beschreibung unten zu
erkennen sein, daß der Barrel-Rotator 235 in vielen. Fällen
durch einen Schieber (Shifter) ersetzt werden kann.
-
Der C-Eingabebus 243 liefert Daten zum C-Port der ALU 230.
Der Multiplexer Cmux 233 liefert Daten zum C-Eingabebus 243.
Der Multiplexer Cmux 233 empfängt Daten von vier Quellen.
Dieses sind die LMO/RMO/LMBC/RMBC-Schaltung 237, die
Erweiterungsschaltung 238, der zweite Multiplizierereingabebus 202 und der
Maskenerzeuger 239.
-
Die LMO/RMO/LMBC/RMBC-Schaltung 237 ist eine speziell
ausgelegte Hardwareschaltung, die entweder die am weitesten
stehende "1", die am weitesten rechts stehende "1", die am
weitesten links stehende Bitveränderung oder die am weitesten rechts
stehende Bitveränderung der Daten auf dem zweiten
ALU-Eingabebus 206 in Abhängigkeit von dem Befehl oder dem "FMOD"-Feld des
Datenregisters D0 bestimmt. Die LMO/RMO/LMBC/RMBC-Schaltung 237
liefert zum Multiplexer Cmux 233 eine 32-Bit-Zahl, die einen
Wert aufweist, der der entsprechenden Größe entspricht. Die am
weitesten links auftretende Bitveränderung ist definiert als
die Position des äußersten linken Bits, das sich von dem
Zeichenbit 32 unterscheidet. Die am weitesten rechts
auftre
tende Bitänderund ist definiert als die Position des am
weitesten rechts stehenden Bits, das sich von dem Bit 0
unterscheidet. Das Ergebnis ist eine binäre Zahl, die der erkannten
Bitposition entspricht, wie sie unten in der Tabelle 9
aufgelistet ist. Die Werte sind die Big-Endian-Bit-Nummer der
erkannten Bitposition, wobei das Ergebnis 31-(Bitposition) ist.
Tabelle 9
-
Bitposition Ergebnis
-
0 31
-
1 30
-
2 29
-
3 28
-
4 27
-
5 26
-
6 25
-
7 24
-
8 23
-
9 22
-
10 21
-
11 20
-
12 19
-
13 18
-
14 17
-
15 16
-
16 15
-
17 14
-
18 13
-
19 12
-
20 11
-
21 10
-
22 9
-
23 8
-
24 7
-
25 6
-
26 5
-
27 4
-
28 3
-
29 2
-
30 1
-
31 0
-
Diese Bestimmung ist für eine Normalisierung oder für die
Bildkompression nützlich, um eine äußerste linke oder eine
äußerste rechte "1" oder ein äußerstes linkes oder äußerstes
rechtes verändertes Bit als Rand eines Bildes zu finden. Die
LMO/RMO/LMBC/RMBC-Schaltung 237 ist ein potentieller
Geschwindigkeitspfad, weshalb die Quelle, die mit dem zweiten ALU-
Eingabebus 206 verbunden ist, vorzugsweise auf eines der
Datenregister 200 beschränkt ist. Für die auf die äußerst links
auftretende "1" und die äußerst rechts auftretende "1"
bezogenen Operationen ist das "V"-Bit, das den Überlauf des
Statusregisters 210 anzeigt, auf "1" gesetzt, wenn es keine "1" in
der Quelle gibt, und auf "0", wenn es welche gibt. Für die auf
die äußerst links auftretende Bitveränderung und die äußerst
rechts auftretende Bitveränderung bezogenen Operationen ist das
"V"-Bit auf "1" gesetzt, wenn alle Bits in der Quelle gleich
sind, und auf "0", wenn eine Veränderung entdeckt wurde. Wenn
das "V"-Bit auf "1" durch eine dieser Operationen gesetzt wird,
dann ist das LMO/RMO/LMBC/RMBC-Ergebnis 32. Weitere
Einzelheiten in bezug auf die Operation des Statusregisters 210 finden
sich oben.
-
Die Erweiterungsschaltung 238 empfängt Eingaben von dem
Multiflag-Register 211 und dem Statusregister 210. Basierend
auf dem "Msize"-Feld des oben beschriebenen Statusregisters 210
dupliziert die Erweiterungsschaltung 238 einige der
niedrigstwertigen Bits, die in dem Multiflag-Register 211
gespeichert sind, um 32 Bits aufzufüllen. Die Erweiterungsschaltung
238 kann das niedrigstwertige Bit 32 mal erweitern, die beiden
niedrigstwertigen Bits 16 mal erweitern oder die vier
niedrigstwertigen Bits 8 mal erweitern. Das "Asize"-Feld des
Statusregisters 210 steuert die Prozesse, bei denen die 32-Bit-
ALU 230 in unabhängige Abschnitte für unabhängige
Datenoperationen unterteilt wird. Das ist nützlich bei Operationen der
ALU 230 an Pixelgrößen, die eine Breite von 32 Bit
unterschreiten. Dieser Prozeß sowie Beispiele seiner Verwendung werden
unten beschrieben werden.
-
Der Maskenerzeuger 239 erzeugt 32-Bit-Masken, die zum C-
Eingabebus 243 über den Multiplexer Cmux 233 geliefert werden
können. Die erzeugte Maske hängt von einer 5-Bit-Eingabe von
dem Multiplexer Mmux 234 ab. Der Multiplexer Mmux 234 wählt
entweder die fünf niedrigstwertigen Bits des zweiten
Multiplizierereingabebusses 202 aus, oder das "DBR"-Feld von dem
Datenregister D0. Bei der bevorzugten Ausführungsform bringt eine
Eingabe eines Wertes N den Maskenerzeuger 239 dazu, eine Maske
zu erzeugen, die N "1en" in den niedrigstwertigen Bits
aufweist, und 32-N "0en" in den höchstwertigen Bits. Das bildet
eine Ausgabe mit N nach rechts ausgerichteten "1en". Das ist
nur eine von vier möglichen Verfahren der Operation des
Maskenerzeugers 239. Bei einer zweiten Ausführungsform erzeugt der
Maskenerzeuger 239 die Masken mit N nach rechts ausgerichteten
"0en", d. h. N-"0en" in den niedrigstwertigen Bits und N-32 "1"
in den höchstwertigen Bits. Es ist genauso möglich, daß der
Maskenerzeuger 239 die Maske so erzeugt, daß sie N nach links
ausgerichtete "1en" oder N nach links ausgerichtete "0en"
aufweist. Die Tabelle 10 zeigt die Operation des
Maskenerzeugers 239 gemäß der bevorzugten Ausführungsform, wenn eine
Multiarithmetik nicht ausgewählt ist.
Tabelle 10
-
Ein Wert N von "0" erzeugt so 32 "0en". Bei einigen
Situationen ist es jedoch besser, wenn ein Wert "0" 32 "1en"
erzeugt. Diese Funktion wird durch die "%!"-Modifikation
ausgewählt, die in dem "FMOD"-Feld des Status-Registers 210
oder in den Bits 52, 54, 56 und 58 des Befehls spezifiziert
wird, wenn eine erweiterte ALU-Operation ausgeführt wird. Diese
Funktion kann implementiert werden, indem die durch den
Maskenerzeuger 239 erzeugte Maske verändert wird oder die
Funktion der ALU 230 so modifiziert wird, daß die Maske mit
lauter "0en", die zum C-Port geliefert werden, so arbeitet, als
wären lauter "1en" geliefert worden. Es ist zu erkennen, daß
ähnliche Modifikationen der anderen durchführbaren
Maskenfunktionen möglich sind. So kann die "%!"-Modifikation einen
Maskenerzeuger 239, der eine Maske mit N nach rechts
ausgerichtet "0en" erzeugt, so verändern, daß lauter "0en" für N = 0
erzeugt werden. Entsprechend kann die "%!"-Modifikation einen
Maskenerzeuger 239, der N nach links ausgerichtete "1en"
erzeugt, so verändern, daß für N = 0 lauter "1en" erzeugt werden,
oder einen Maskenerzeuger 239, der N nach links ausgerichtete
"0en" erzeugt, so verändern, daß für N = 0 lauter "0en" erzeugt
werden.
-
Die Auswahl der Multiarithmetik modifiziert die Operation
des Maskenerzeugers 239. Wenn das "Asize"-Feld des Status-
Registers "110" ist, wählt dieses eine Datengröße von 32 Bits
aus, und die Operation des Maskenerzeugers 239 bleibt gegenüber
der in der Tabelle 10 dargestellten unverändert. Wenn das
"Asize"-Feld des Status-Registers "101" ist, wird so eine
Datengröße von 16 Bits ausgewählt, und der Maskenerzeuger 239
bildet daraus zwei unabhängige 16-Bit-Masken. Das ist in der
Tabelle 11 dargestellt. Es ist zu erkennen, daß in diesem Fall
das höchstwertige Bit der Eingabe zum Maskenerzeuger 239
ignoriert wird. Die Tabelle 11 zeigt dieses Bit als ein "Egal"-
"X", dessen Wert keine Rolle spielt.
Tabelle 11
-
Diese Funktion des Maskenerzeugers 239 wird in
entsprechender Weise für eine Auswahl von Bytedaten über ein "Asize"-
Feld "100" modifiziert. Der Maskenerzeuger 239 bildet vier
unabhängige Masken, wobei er nur die drei niedrigstwertigen
Bits seiner Eingaben benutzt. Das ist in der Tabelle 12
dargestellt.
Tabelle 12
-
Wie oben erwähnt, können auch Multioperationen mit 8
Abschnitten à 4 Bits, 16 Abschnitten à 2 Bits und 32
Abschnitten
-
à 1 Bit unterstützt werden. Fachleute auf diesem Gebiet
erkennen, daß diese anderen Datengrößen eine entsprechende
Modifikation der Operation des Maskenerzeugers 239, die in den Tabellen
10, 11 und 12 dargestellt ist, erfordern.
-
Die Dateneinheit 110 umfaßt eine drei Eingänge aufweisende
ALU 230. Die ALU 230 besitzt drei Eingabebusse: Der
A-Eingabebus 241 liefert eine Eingabe zum A-Port; der B-Eingabebus 242
liefert eine Eingabe zu einem B-Port; und der C-Eingabebus 243
liefert eine Eingabe zu einem C-Port. Die ALU 230 liefert ein
Ergebnis zum ALU-Zielbus 204. Dieses Ergebnis kann in einem der
Datenregister des Datenregisters 200 gespeichert werden.
Alternativ dazu kann das Ergebnis in einem anderen Register in dem
digitalen Bild-/Graphikprozessor 71 über den Puffer 108 und den
zum globalen Port gehörenden Zieldatenbus Gdst 107 gespeichert
werden. Diese Funktion wird als Fern-Operation bezeichnet. Der
Befehl gibt das Ziel dieses Ergebnisses an. Die zur ALU 230 von
dem Funktionssignalgenerator 245 gelieferten Funktionssignale
bestimmen die spezielle drei Eingaben aufweisende Funktion, die
durch die ALU 230 bei einem bestimmten Zyklus ausgeführt wird.
Bit-0-Übertragseingangserzeuger 246 bildet ein
Übertragseingangssignal, das zum Bit 0 geführt wird, dem ersten Bit der ALU
230. Wie vorher beschrieben, liefert während der
Multi-Arithmetikoperationen der Bit-0-Übertragseingangserzeuger 246 das
Übertragseingangssignal zu dem niedrigstwertigen Bit jedes der
mehreren Abschnitte.
-
Die Fig. 10 zeigt in Blockdiagrammform den Aufbau einer
beispielhaften Bit-Schaltung 400 der ALU 230. Die ALU 230 wirkt
vorzugsweise auf Datenwörter mit 32 Bits ein und besteht daher
aus 32-Bit-Schaltungen 400, die parallel arbeiten. Jede Bit-
Schaltung 400 der ALU 230 empfängt: die entsprechenden Bits der
drei Eingänge Ai, Bi und Ci; ein Nullübertragseingangssignal,
das als Cin0 bezeichnet wird, von der vorhergehenden Bit-
Schaltung 400; ein Eins-Übertragseingangssignal, das als Cin1
bezeichnet ist, von der vorhergehenden Bit-Schaltung 400: ein
Arithmetik-Freigabesignal Aen; ein inverses Abbruchsignal i-1
von der vorhergehenden Bit-Schaltung; ein
Übertragserkennungsauswahlsignal für die Auswahl des Übertragseingangssignals cin0
oder cin1: und acht inverse Funktionssignale - . Die
Übertragseingangssignale cin0 und cin1 für das erste Bit (Bit 0)
stimmen überein und werden durch eine spezielle Schaltung
erzeugt, die unten beschrieben werden wird. Es ist zu erkennen,
daß die drei Eingabesignale Ai, Bi und Ci für jedes Bit der ALU
230 gebildet werden und sich voneinander unterscheiden können.
Das Arithmetik-Freigabesignal Aen und die invertierten
Funktionssignale - stimmen für sämtliche der 32-Bit-
Schaltungen 400 überein. Jede Bit-Schaltung 400 der ALU 230
erzeugt ein entsprechendes Ein-Bit-Ergebnis Si; ein Früh-
Nullsignal Zi; ein Null-Übertragsausgangssignal, das als cout0
bezeichnet wird, das das Null-Übertragseingangssignal cin0 für
die nächste Bit-Schaltung bildet; ein
Eins-Übertragsausgangssignal, das als cout1 bezeichnet wird, das das
Eins-Übertragseingangssignal cin1 für die nächste Bit-Schaltung bildet; und
ein inverses Abbruchsignal i, das das inverse Abbruchsignal
i-1 für die nächste Bit-Schaltung bildet. Ein ausgewähltes
Signal aus der aus dem Null-Übertragsausgangssignal cout0 oder
dem Eins-Übertragsausgangssignal cout1 des letzten Bits in der
32-Bit-ALU 230 bestehenden Gruppe wird in dem Status-Register
210 gespeichert, wenn nicht das "C"-Bit vor Veränderung für
diesen Befehl geschützt ist. Darüber hinaus kann während der
Multi-Arithmetik der Befehl angeben, daß
Übertragsausgangssignale von separaten ALU-Abschnitten in dem Multiflag-Register
211 gespeichert werden. In diesem Fall wird das ausgewählte
Null-Übertragsausgangssignal Cout0 oder das
Eins-Übertragsausgangssignal Cout1 in dem Multiflag-Register 211 gespeichert.
-
Die Bit-Schaltung 400 umfaßt den Ergebniserzeuger 401, die
Übertragsausgangslogik 402 und den Erzeuger 403 Boolscher
Funk
tionen. Der Erzeuger 403 Boolscher Funktionen bildet eine
Boolsche Kombination der entsprechenden Bit-Eingaben Ai, Bi und
Ci, entsprechend den inversen Funktionssignalen - . Der
Erzeuger Boolscher Funktionen erzeugt ein entsprechendes
Fortpflanzungssignal Pi, ein Erzeugungssignal Gi und ein
Abbruchsignal Ki. Die Ergebnislogik 401 kombiniert das
Fortpflanzungssignal Pi mit einem Signal aus der aus dem
Übertragseingangssignal cin0 oder dem Übertragseingangssignal
Cin1 bestehenden Gruppe, je nach Auswahl durch das
Übertragserkennungsauswahlsignal von einer vorhergehenden Bit-
Schaltung 400, und bildet das Bit-Ergebnis Si und ein Früh-
Nullsignal Zi. Die Übertragsausgangslogik 402 empfängt das
Fortpflanzungssignal Pi, das Erzeugungssignal Gi und das
Abbruchsignal Ki, die zwei Übertragseingangssignale cin0 und cin1
und ein Arithmetik-Freigabesignal Aen. Die
Übertragsausgangslogik 402 erzeugt zwei Übertragsausgangssignale cout0 und cout1,
die zur nächsten Bit-Schaltung 400 geliefert werden.
-
Die Fig. 11 und 12 zeigen beide eine beispielhafte
Ausführungsform einer Bit-Schaltung 400 der ALU 230. Die Fig.
11 zeigt die Einzelheiten der Ergebnislogik 401 und der
Übertragsausgangslogik 402 jeder Bit-Schaltung 400 der ALU 230.
Die Fig. 12 zeigt die Einzelheiten des entsprechenden
Erzeugers 403 Boolscher Funktionen jeder Bit-Schaltung 400 der
ALU 230.
-
Jede Ergebnislogik 401 erzeugt ein entsprechendes
Ergebnissignal Si und ein Früh-Nullsignal Zi. Die Ergebnislogik 420
bildet diese Signale aus den zwei Übertragseingangssignalen,
einem inversen Fortpflanzungssignal i, einem inversen
Abbruchsignal i-1 von der vorhergehenden Bit-Schaltung und einem
Übertragserkennungsauswahlsignal. Die Übertragsausgangslogik 402
bildet zwei Übertragsausgangssignale und ein inverses
Abbruchsignal i-1. Diese Signale werden aus den zwei
Übertragseingangssignalen, einem inversen Fortpflanzungssignal i, einem
inversen Erzeugungssignal i und einem Abbruchsignal i für
diese Bit-Schaltung 400 erzeugt. Jedes Fortpflanzungssignal
zeigt an, ob ein "1"-Übertragseingangssignal sich durch die
Bit-Schaltung 400 zur nächsten Bit-Schaltung 400 fortpflanzt
oder absorbiert wird. Das Erzeugungssignal zeigt an, ob die
Eingaben zur Bit-Schaltung 400 ein "1"-Übertragsausgangssignal
zur nächsten Bit-Schaltung 400 erzeugen. Das Abbruchsignal
zeigt an, ob die Eingabe zur Bit-Schaltung 400 ein
"0"-Übertragsausgangssignal zur nächsten Bit-Schaltung erzeugt. Es ist
zu erkennen, daß das Übertragssignal Pi, das Erzeugungssignal
Gi und das Abbruchsignal Ki sich gegenseitig ausschließen.
Lediglich eines dieser Signale wird für eine beliebige
Kombination an Eingaben erzeugt.
-
Jede Bit-Schaltung 400 der ALU 230 verwendet ein
Verfahren, um die Übertragszeit durch die 32 Bits zu vermindern. Die
ALU 230 wird in Übertragsabschnitte, vorzugsweise 4 Abschnitte
à8 Bit unterteilt. Das 0-Übertragseingangssignal cin0 der
Bitschaltung 400 für das niedrigstwertige Bit jedes Abschnitts ist
auf "0" fest programmiert und sein Übertragseingangssignal cin1
ist auf "1" fest programmiert. Jede Bit-Schaltung 400 bildet
zwei Ergebnisse und zwei Übertragsausgangssignale zur nächsten
Bit-Schaltung. Wenn der Übertrag durch jeden Abschnitt
abgeschlossen ist, bildet der aktuelle Übertragsausgang von dem
höchstwertigen Bit des vorhergehenden Übertragsabschnitts das
Übertragserkennungsauswahlsignal. Dieses Übertragsauswahlsignal
ermöglicht eine Auswahl des aktuellen Ergebnisses, das durch
die Bits eines Abschnitts über einen Multiplexer erzeugt wird.
Der erste Übertragsabschnitt empfängt sein
Übertragsauswahlsignal von dem Bit-0-Übertragseingangserzeuger 246, der unten
im einzelnen beschrieben ist. Dieses Verfahren ermöglicht es,
daß der Übertrag durch die Übertragsabschnitte gleichzeitig
stattfindet. Durch ein gewisses Ausmaß an zusätzlicher Hardware
für die redundanten Übertragsleitungen und die
Übertragserkennungsauswahl wird so eine Verminderung der zur Erzeugung des
Ergebnisses erforderlichen Zeitdauer erreicht.
-
Die Übertragsausgangslogik 402 steuert die Transformation
der Übertragseingangssignale in Übertragsausgangssignale. Die
Übertragsausgangslogik 402 umfaßt identische Schaltungen, die
auf die beiden Übertragseingangssignale Cino und Cini einwirken.
Das inverse Fortpflanzungssignal i und das dazu inverse
Signal, das Fortpflanzungssignal Pi, das durch den Inverter 412
gebildet wird, steuern die Durchlauf-Gatter 413 und 423. Wenn
das Fortpflanzungssignal Pi "1" ist, dann wird die Eins-
Übertragseingangsleitung 410 mit der
Eins-Übertragsausgangsleitung 411 über das Durchgangsgatter 413 verbunden und die Null-
Übertragseingangsleitung 420 wird mit der
Null-Übertragsausgangsleitung 421 über das Durchgangsgatter 423 verbunden. So
wird das Übertragseingangssignal zum Übertragsausgang
weitergeleitet. Wenn das Fortpflanzungssignal Pi "0" ist, dann ist die
Eins-Übertragseingangsleitung 410 von der
Eins-Übertragseingangsleitung 411 isoliert, und die
Null-Übertragseingangsleitung 420 ist von der Übertragsausgangsleitung 421 isoliert.
Wenn das Erzeugungssignal Gi "1" ist, d. h. wenn das inverse
Erzeugungssignal Gi "0" ist, dann wird der P-Kanal-MOSFET
(Metalloxidhalbleiterfeldeffekttransistor) 414 durchgeschaltet,
um die Versorgungsspannung mit der Übertragsausgangsleitung 411
zu verbinden, und der P-Kanal-MOSFET 424 wird durchgeschaltet,
um die Versorgungsspannung mit der Übertragsausgangsleitung 421
zu verbinden. Wenn das Erzeugungssignal Gi "0" ist, d. h. wenn
das inverse Erzeugungssignal "1" ist, werden die P-Kanal-
MOSFETs 414 und 424 gesperrt und haben keinen Einfluß auf, die
Übertragsausgangsleitungen 411 und 421. Wenn das Abbruchsignal
Ki "1" ist, dann verbindet der N-Kanal-MOSFET 415 die
Übertragsausgangsleitung 411 mit Masse und der N-Kanal-MOSFET
425 die Übertragsausgangsleitung 421 mit Masse. Wenn das
Abbruchsignal Ki "0" ist, dann werden die N-Kanal-MOSFETs 415
und 425 gesperrt und haben keinen Einfluß auf die
Übertragsausgangsleitungen 411 und 421. Der Inverter 422 erzeugt das
inverse Abbruchsignal i, das zur nächsten Bit-Schaltung
geliefert wird.
-
Die EXKLUSIV-ODER-Schaltungen 431 und 433 bilden die zwei
Ergebnisse der Ergebnislogik 401. Die EXKLUSIV-ODER-Schaltungen
431 und 433 empfangen jeweils das Fortpflanzungssignal Pi von
dem Inverter 427 auf einem invertierenden Eingang und das
inverse Fortpflanzungssignal i, von dem Inverter 428 auf einem
nichtinvertierenden Eingang. Die EXKLUSIV-ODER-Schaltung 431
empfängt das inverse Null-Übertragseingangssignal in1 von dem
Inverter 426 auf einem nichtinvertierenden Eingang und bildet
das Ergebnis für den Fall eines "0"-Übertragseingangs zum
niedrigstwertigen Bit des aktuellen Übertragsabschnitts.
Entsprechend empfängt die EXKLUSIV-ODER-Schaltung 433 das inverse
Eins-Übertragseingangssignal in1 von dem Inverter 416 auf
einem nichtinvertierenden Eingang und bildet das Ergebnis für
den Fall eines "1"-Übertragseingangs zum niedrigstwertigen Bit
des aktuellen Übertragsabschnitts. Die Inverter 432 und 434
liefern Eingaben zum Multiplexer 435. Der Multiplexer 435 wählt
eines dieser Signale basierend auf dem
Übertragserkennungsauswahlsignal aus. Dieses Übertragserkennungsauswahlsignal
entspricht dem aktuellen Übertragsausgangssignal von dem
höchstwertigen Bit des vorhergehenden Übertragsabschnitts. Das
invertierte Ausgangssignal des Multiplexers 435 von dem
Inverter 436 ist das gewünschte Bitergebnis Si.
-
Die Ergebnislogik 401 bildet auch ein Früh-Nullsignal Zi
für die Bitschaltung. Dieses Früh-Nullsignal Zi gibt eine Früh-
Anzeige, daß das Ergebnis Si dieser Bit-Schaltung 400 auf "0"
geht. Die EXKLUSIV-ODER-Schaltung 437 empfängt das
Fortpflanzungssignal Pi von dem Inverter 427 auf einem invertierenden
Eingang und das inverse Fortpflanzungssignal i, von dem
Inverter 428 auf einem nichtinvertierenden Eingang. Die EXKLUSIV-
ODER-Schaltung 437 empfängt darüber hinaus das inverse
Abbruchsignal i-1 von der vorhergehenden Bit-Schaltung 400 auf einem
nichtinvertierenden Eingang. Die EXKLUSIV-ODER-Schaltung 437
bildet das Früh-Nullsignal Zi für den Fall, daß das
vorhergehende Bit-Abbruchsignal i-1 ein "0"-Übertragsausgangssignal
erzeugt und das Fortpflanzungssignal Pi auch "0" ist. Es ist zu
erkennen, daß dann, wenn das i-1-Signal "0" ist, unabhängig
von dem Zustand der Übertragseingangssignale Cino und Cini sowohl
das Null-Übertragsausgangssignal Cout0 als auch das Eins-
Übertragsausgangssignal Cout1 "0" sind. Es ist anzumerken, daß
dieses Früh-Nullsignal Zi verfügbar ist, bevor der Übertrag
durch den Übertragsabschnitt direkt weitergeleitet werden kann.
Dieses Früh-Nullsignal Zi kann so die Bestimmung eines Null-
Ausgangssignal von der ALU 230 beschleunigen.
-
Der Erzeuger 403 Boolscher Funktionen jeder Bit-Schaltung
400 der ALU 230, dargestellt in der Fig. 12, erzeugt das
Fortpflanzungssignal Pi, das Erzeugungssignal Gi und das
Abbruchsignal Ki für die Bit-Schaltung 400. Der Erzeuger 403
Boolscher Funktionen besteht aus vier Ebenen. Die erste Ebene
umfaßt die Durchgangsgatter 451, 452, 453, 454, 455, 456, 457
und 458. Die Durchgangsgatter 451, 453, 455 und 457 werden in
einem ersten Sinne durch das Eingangssignal Ci und durch das
vom Inverter 459 kommende inverse Eingangssignal i gesteuert.
Die Durchgangsgatter 452, 454, 456 und 458 werden in einem
entgegengesetzten Sinne durch das Eingangssignal Ci und das
inverse Eingangssignal i gesteuert. Je nach dem Zustand des
Eingangssignals Ci leiten entweder die Durchgangsgatter 451,
453, 455 und 457 oder die Durchgangsgatter 452, 454, 456 und
458. Die zweite Ebene umfaßt die Durchgangsgatter 461, 462, 463
und 464. Die Durchgangsgatter 461 und 463 werden in einem
ersten Sinne durch das Eingangssignal Bi und das von dem
Inverter 465 stammende inverse Eingangssignal i gesteuert.
Die Durchgangsgatter 462 und 464 werden im entgegengesetzten
Sinne gesteuert. Je nach dem Zustand des Eingangssignals Bi
leiten entweder die Durchgangsgatter 461 und 463 oder die
Durchgangsgatter 462 und 464. Die dritte Ebene umfaßt die
Durchgangsgatter 471, 472 und 473. Die Durchgangsgatter 471
werden in einem ersten Sinne durch das Eingangssignal Ai und
das vom Inverter 473 stammende inverse Eingangssignal i
gesteuert. Die Durchgangsgatter 472 und 473 werden in dem
entgegengesetzten Sinn gesteuert. Je nach dem Zustand des
Eingangssignals Ai leitet entweder das Durchgangsgatter 471
oder es leiten die Durchgangsgatter 472 und 473. Die erste
Ebene umfaßt die Inverter 441, 442, 443, 444, 445, 446, 447 und
448, die mit entsprechenden invertierten Funktionssignalen
- verbunden sind. Die Inverter 441, 442, 443, 444, 445,
446, 447 und 448 liefern eine Eingangssteuerung für den
Erzeuger 403 Boolscher Funktionen und bestimmen die logische
Funktion, die durch die ALU 230 durchgeführt wird. Basierend
auf den entsprechenden Eingangssignalen Ai, Bi und Ci und der
durch den Zustand der invertierten Funktionssignale -
ausgewählten Funktion bildet der Erzeuger 403 Boolscher
Funktionen das Fortpflanzungssignal Pi.
-
Basierend auf den entsprechenden Eingangssignalen Ai, Bi
und Ci und durch den Zustand der invertierten Funktionssignale
- ausgewählten Funktion bildet der Erzeuger 403 Boolscher
Funktionen das Fortpflanzungssignal Pi. Das
Fortpflanzungssignal Pi am Eingang des Inverters 476 ist "1", wenn irgendein
Pfad durch die Durchgangsgatter 451, 452, 453, 454, 455, 456,
457, 458, 461, 462, 463, 464, 471 oder 472 eine "1" von einem
der Inverter 441, 442, 443, 444, 445, 446, 447 oder 448
ankoppelt. In allen anderen Fällen ist dieses Fortpflanzungssignal
Pi "0". Der Inverter 476 bildet das inverse
Fortpflanzungssignal i, das mit der in der Fig. 11 dargestellten
Ergebnislogik 401 verbunden ist.
-
Jedes der Durchgangsgatter 451, 452, 453, 454, 455, 456,
457, 458, 461, 462, 463, 464, 471, 472 und 473 besteht aus
einem N-Kanal-MOSFET und einem P-Kanal-MOSFET, die
parallelgeschaltet sind. Der Gateanschluß des N-Kanal-MOSFETs empfängt
ein Steuersignal. Dieser Feldeffekttransistor leitet, wenn sein
Gate-Eingangssignal über der Schaltschwellenspannung liegt. Der
Gateanschluß des P-Kanal-MOSFETs wird durch das inverse Signal
des Steuersignals über einen der Inverter 459, 465 oder 474
gesteuert. Dieser Feldeffekttransistor leitet, wenn sein Gate-
Eingangssignal unter einer Schaltschwelle liegt. Da der P-
Kanal-MOSFET in entgegengesetzter Weise zu dem N-Kanal-MOSFET
arbeitet, stellt der entsprechende Inverter 459, 467 oder 474
sicher, daß diese beiden Feldeffekttransistoren entweder
leitend oder beide nichtleitend sind. Die parallelen N-Kanal-
und P-Kanal-Feldeffekttransistoren sichern die gewünschte
Leitfähigkeit unabhängig von der Polarität des gesteuerten
Eingangspunktes.
-
Die Drei-Zustands-UND-Schaltung 480 erzeugt das
Erzeugungssignal Gi und das Abbruchsignal Ki. Bei der bevorzugten
Ausführungsform schließen sich das Erzeugungssignal das
Erzeugungssignal Gi, das Abbruchsignal Ki und das
Fortpflanzungssignal Pi gegenseitig aus. Daher steuert das
Fortpflanzungssignal Pi den Ausgang der Drei-Zustands-UND-Schaltung 480. Wenn
das Fortpflanzungssignal Pi "1" ist, dann wird die Drei-
Zustands-UND-Schaltung 480 deaktiviert, und sowohl das
Erzeugungssignal Gi und das Abbruchsignal Ki sind "0". So verändern
weder das Erzeugungssignal Gi noch das Abbruchsignal Ki das
Übertragssignal. Das Durchgangsgatter 473 verbindet den Ausgang
eines Teils des Erzeugers 403 Boolscher Funktionen mit einem
Eingang der Drei-Zustands-UND-Schaltung 480. Die
Gate-Eingangssignale des Durchgangsgatters 473 werden mit dem ersten
Eingabe-Bit Ai in dem ersten Sinne verbunden. Ein N-Kanal-
MOSFET 475 verbindet diesen Eingang der Drei-Zustands-UND-
Schaltung 480 in Abhängigkeit von einer Bedingung mit Masse.
Das invertierte erste Eingangsbit i wird dem Gate-Eingang des
N-Kanal-MOSFETs 475 zugeleitet. Das Durchgangsgatter 473 und
der N-Kanal-MOSFET 475 sind in einer verdrahteten ODER-
Beziehung verbunden, es findet jedoch keine ODER-Operation
statt, da ihre Gate-Eingangssignale sie dazu bringen, in
wechselnder Weise leitfähig zu sein. Der N-Kanal-MOSFET 475
dient dazu, ein "0"-Eingangssignal in die Drei-Zustands-UND-
Schaltung 480 zu zwingen, wenn Ai = "0" ist. Ein Arithmetik-
Freigabesignal wird zum zweiten Eingang der Drei-Zustands-UND-
Schaltung 480 geliefert.
-
Das Drei-Zustands-UND-Gatter 480 arbeitet folgendermaßen:
Wenn das Fortpflanzungssignal Pi "1" ist, dann leiten sowohl
der P-Kanal-MOSFET 481 als auch der N-Kanal-MOSFET 482 und das
Durchgangsgatter 483 ist nichtleitend. So werden die P-Kanal-
MOSFETs 414 und 424 und die N-Kanal-MOSFETs 415 und 425
gesperrt, so daß keiner dieser Feldeffekttransistoren leitet.
Der Ausgang der Drei-Zustands-UND-Schaltung 480 ist daher in
einem Zustand hoher Impedanz, der das Signal auf den
Übertragsausgangsleitungen 411 und 421 nicht verändert. Wenn
das Fortpflanzungssignal Pi "0" ist, dann sind sowohl der P-
Kanal-MOSFET 481 als auch der N-Kanal-MOSFET 482 gesperrt, und
das Durchgangsgatter 483 leitet. Die Schaltung bildet dann ein
logisches UND der zwei Eingänge. Wenn entweder das Arithmetik-
Freigabesignal oder das Signal an der Verbindung des N-Kanal-
MOSFETs 475 und des Durchgangsgatters 473 "0" ist oder beide "0"
sind, dann verbindet entweder der P-Kanal-MOSFET 484 oder der
P-Kanal-MOSFET 485 die Versorgungsspannung V+ (eine logische
"1") als das inverse Erzeugungssignal i mit den
Gateanschlüssen der P-Kanal-MOSFETs 414 und 424 der Übertragsausgangslogik
402. Demzufolge sperren die P-Kanal-MOSFETs 414 und 424.
Gleichzeitig leitet das Durchgangsgatter 483 und liefert dieses
"1"-Signal als Abbruchsignal Ki zu den Gattern der N-Kanal-
MOSFETs 415 und 425 der Übertragslogik 402. Diese zieht das
Signal auf der Null-Übertragsausgangsleitung 421 potentialmäßig
nach unten, wodurch das "0"-Übertragsausgangssignal cout0 auf "0"
gezwungen wird, und zieht die Eins-Übertragsausgangsleitung 411
potentialmäßig nach unten, wodurch das
Eins-Übertragsausgangssignal cout0 auf "0" gezwungen wird. Wenn beide Eingaben "1"
sind, dann verbindet die Reihenschaltung aus dem N-Kanal-MOSFET
486 und dem N-Kanal-MOSFET 487 die Gateanschlüsse der N-Kanal-
MOSFETs 415 und 425 mit Masse (eine logische "0"). Die N-Kanal-
MOSFETs 415 und 425 der Übertragsausgangslogik 402 werden
gesperrt und sind dann nichtleitend. Gleichzeitig verbindet das
Durchgangsgatter 483 diese "0" mit den Gateanschlüssen der P-
Kanal-MOSFETs 414 und 424. So sind die P-Kanal-MOSFETs 414 und
424 der Übertragsausganglogik 402 dann leitend. Dieses zieht in
aktiver Weise das Signal auf der Null-Übertragsausgangsleitung
421 potentialmäßig nach oben, wodurch das
Null-Übertragsaus
gangssignal cout0 auf "1" gezwungen wird, und zieht die Eins-
Übertragsausgangsleitung 411 nach oben, wodurch das Eins-
Übertragsausgangssignal Cout1 auf "1" gezwungen wird.
-
Der in den Fig. 10 und 21 dargestellte
Bitschaltungsaufbau erzeugt einen Fortpflanzungsterm, einen Erzeugungsterm,
einen Ergebnisterm und zwei Übertragsausgangsterme. Die
Bitschaltung 400 bildet den Fortpflanzungsterm Pi
folgendermaßen:
-
Pi = F0 & (~Ai & ~Bi & ~Ci) F1 & (Ai & ~Bi & ~Ci) F2 & (~Ai & Bi& ~Ci)
F3 & (Ai & Bi& ~Ci) F4 & (~Ai & ~Bi & Ci) F5 & (Ai & ~Bi & Ci)
F6 & (~Ai & Bi & Ci) F7 & (Ai & Bi & Ci)
-
Die Bitschaltung 400 bildet den Erzeugungsterm Gi
folgendermaßen:
-
Gi = Ai & [(F0 & ~F1 & ~ Bi & ~Ci) (F2 & ~F3 & Bi & ~Ci)
(F4 & ~F5 & ~Bi & Ci) (F6 & ~F7 & Bi & Ci)]
-
Die Bitschaltung 400 bildet den Abbruchterm Ki
folgendermaßen:
-
Ki = ~Gi & ~Pi.
-
Die Bitschaltung 400 bildet den Ergebnisterm Si
folgendermaßen:
-
Si = Pi ^ (cin0 & CSS Cin1 & ~CSS),
-
wobei: CSS das Übertragserkennungsauswahlsignal ist. Die
Bitschaltung 400 bildet die zwei Übertragsausgangssignale cout0
und cout1 folgendermaßen:
-
Cout0 = (Pi & cin0) (Gi & Aen) ~ (Ki & Aen)
-
Cout1 = (Pi & cin1) (Gi & Aen) ~ (Ki & Aen)
-
Es ist zu erkennen, daß für ein bestimmtes Bit i das
Fortpflanzungssignal Pi, das Erzeugungssignal Gi und das Abbruchsignal Ki
sich gegenseitig unterscheiden. Es tauchen niemals zwei dieser
Signale gleichzeitig auf.
-
Der Aufbau jeder Bitschaltung 400 ermöglicht es der ALU
230, in Abhängigkeit von den invertierten Funktionssignalen
- eine beliebige von 256 möglichen Boolschen Funktionen
mit drei Eingaben durchzuführen oder eine beliebige von 256
möglichen gemischten Boolschen und arithmetischen Funktionen
mit drei Eingaben durchzuführen. Die neuen Eingaben
einschließlich des Arithmetik-Freigabesignals und der invertierten
Funktionssignale - ermöglichen die Auswahl von 512 Funktionen.
Wie weiter unten erläutert, ermöglichen die Datenpfade der
Dateneinheit 110 eine vorteilhafte Verwendung der drei Eingänge
aufweisenden ALU 230, um Operationen auf mehrere Arten zu
beschleunigen.
-
Die Tabelle 13 zeigt die einfachen Boolschen
Logikfunktionen der Bitschaltung 400 in Abhängigkeit von einzelnen
Funktionssignalen - . Da dieses Boolsche Logikfunktionen sind und
das Arithmetik-Freigabesignal "0" ist, sind sowohl die
Erzeugungs- als auch die Abbruchfunktionen deaktiviert. Es ist
anzumerken, daß es für Boolsche erweiterte ALU-Operationen
möglich ist, die Übertragseingangssignale cino und cin1 von dem
Bit-Null-Übertragseingangserzeuger 246 wie vorher beschrieben
zu spezifizieren, wodurch eine Übertragsdirektweiterleitung
(carry ripple) ermöglicht wird.
Tabelle 13
-
Diese Funktionen können bestätigt werden, indem die
Fig. 11 und 12 überprüft werden. Zum Beispiel geben dann,
wenn F7 = "1" und F6-F0 alle "0" sind, die Inverter 441, 442,
443, 444, 446, 447 und 448 jeweils eine "0" aus. Nur der
Inverter 445 erzeugt eine Eins-Ausgabe. Das Fortpflanzungssignal ist
nur dann "1", wenn Ci = "1", wodurch das Durchgangsgatter 455
eingeschaltet wird, Bi = "1", wodurch das Durchgangsgatter 463
eingeschaltet wird, und Ai = "1", wodurch das Durchgangsgatter
472 eingeschaltet wird. Alle anderen Kombinationen führen zu
einem Fortpflanzungssignal "0". Da dieses eine logische
Operation ist, sind sowohl das Null-Übertragseingangssignal cin0 als
auch
-
das Eins-Übertragseingangssignal cin1 "0". Daraus resultiert
Si = "1", da beide EXKLUSIV-ODER-Schaltungen 431 und 433 das
Fortpflanzungssignal zurückgeben. Die anderen Einträge in der
Tabelle 13 lassen sich in entsprechender Weise bestätigen.
-
Eine Gesamtheit von 256 Boolschen Logikfunktionen der drei
Eingaben A, B und C wird durch geeignete Auswahl der
Funktionssignale F7-F0 ermöglicht. Es ist zu erkennen, daß die
Zustandstabelle der drei Eingaben 8 Plätze umfaßt, d. h. es gibt
2&sup8; = 256 mögliche Boolsche Logikfunktionen der drei Eingaben.
Funktionen mit zwei Eingaben sind Unterfunktionen, die durch
Auswahl der Funktionssignale F7-F0 als Paare erzielt werden.
-
Man nehme an, daß eine Boolsche Funktion von B und C, ohne
Beziehung zur Eingabe A gewünscht ist. Die Auswahl F7 = F6,
F5 = F4, F3 = F2 und F1 = F0 stellt eine Unabhängigkeit von der
Eingabe A sicher. Es ist zu erwähnen, daß die Zweige des
Erzeugers 403 Boolscher Funktionen, die mit den Durchgangsgattern
471 und 472 verbunden sind, in gleicher Weise gesteuert werden.
Das stellt sicher, daß das Ergebnis gleich ist, unabhängig
davon, ob A&sub1; = "1" oder A&sub1; = "0" ist. Eine solche Auswahl
liefert immer noch vier steuerbare Funktionspaare, die eine
Spezifizierung sämtlicher 16 Boolscher Logikfunktionen der
Eingaben B und C ermöglicht. Es sei angemerkt, daß die
Zustandstabelle zweier Eingaben vier Plätze umfaßt, d. h. daß es
2&sup4; = 16 mögliche Boolsche Logikfunktionen der drei Eingaben
gibt. Entsprechend stellt die Auswahl F7 = F5, F6 = F4, F3 = F1
und F2 = F0 die Unabhängigkeit von der Eingabe B sicher und
liefert 4 steuerbare Funktionspaare für die Spezifizierung von
16 Boolschen Logikfunktionen der Eingaben A und C. Die Auswahl
F7 = F3, F6 = F2, F5 = F1 und F4 = F0 ermöglicht über 4
steuerbare Funktionspaare die Auswahl von 16 Boolschen
Logikfunktionen der Eingaben A und B, unabhängig von der Eingabe C.
-
Das Befehlswort bestimmt die durch die ALU 230
durchgeführte Funktion und entscheidet, ob diese Operation
arithmetisch oder Boolsch ist. Wie in der Tabelle 13 zu erkennen,
umfaßt das Befehlswort ein Feld, das mit den Funktionssignalen
für Boolsche Logikoperationen kodiert ist. Dieses Feld, das "8-
Bit-ALU"-Feld (Bits 58-51) des Befehlswortes ist direkt mit den
Funktionssignalen kodiert, wenn der Befehl eine Boolsche
Logikoperation für die ALU 230 angibt.
-
Das "8-Bit-ALU"-Feld ist anders kodiert, wenn der Befehl
Arithmetik-Operationen spezifiziert. Eine Untersuchung der
durchführbaren Arithmetikfunktionen zeigt an, daß eine
Untermenge dieser Arithmetikfunktionen die am häufigsten verwendeten
Operationen spezifiziert. Wenn der Satz an Funktionssignalen
F7-F0 als zweistellige hexadezimale Zahl ausgedrückt wird, dann
sind diese am häufigsten verwendeten Funktionen normalerweise
nur mit den Ziffern a, 9, 6 und 5 gebildet. In diesen
Untermen
gen von Funktionssignalen ist F7 = ~F6, F5 = ~F4, F3 = ~F2 und
F1 = ~F0. Die Bits 57, 55, 53 und 51 spezifizieren 15
Operationen, wobei ein "8-Bit-ALU"-Feld mit lauter Nullen für den
speziellen Fall von Nicht-ALU-Operationen reserviert ist.
-
Nicht-ALU-Operationen werden unten beschrieben werden. Wenn
eine Arithmetikoperation durchgeführt wird, gilt
Funktionssignal F6 = Bit 57, Funktionssignal F4 = Bit 55,
Funktionssignal F4 = Bit 53 und Funktionssignal F2 = Bit 51. Die anderen
Funktionssignale werden durch die folgenden Gleichungen
gesetzt:
-
F7 = ~F6, F5 = ~F4, F3 = ~F2 und F1 = ~F0. Diese Operationen
und ihre entsprechenden Funktionssignale sind in der Tabelle 14
dargestellt. Die Tabelle 14 zeigt darüber hinaus die
Modifikationen in bezug auf die Standardkodierung.
Tabelle 14
Tabelle 14 (Fortsetzung)
-
Mehrere Kodierungen der Befehlswortbits 57, 55, 53 und 51
werden in modifizierter Form, wie in der Tabelle 14
dargestellt, ausgeführt. Es ist anzumerken, daß die Funktionen, die
Links- oder Rechtsverschiebungen zeigen, in Verbindung mit dem
Barrel-Rotator 235 und dem Maskenerzeuger 238 verwendet werden.
Diese Operationen werden unten im Detail erläutert werden. Das
in dieser Beschreibung als "Vorzeichen" bezeichnete Objekt ist
das Bit 31 des zweiten ALU-Eingabebusses 206, des Busses, der
den Barrel-Rotator 235 steuert. Das ist das Vorzeichenbit einer
Zahl mit Vorzeichen. Eine "0" in diesem Vorzeichenbit zeigt
eine positive Zahl an, und eine "1" in diesem Vorzeichenbit
zeigt eine negative Zahl an (Zweierkomplement). Ein Zustand
"0100" der Bits 57, 55, 53 und 51 führt zu einer normalen
Funktion A-B mit Rechts-Verschieben mit "1"-Erweiterung. Wenn
das Bit 31 des zweiten ALU-Eingabebusses 206 "0" ist, dann
wechselt die Operation zu A-B mit Rechts-Verschieben mit
Vorzeichenerweiterung. Ein Bitzustand "0110" der Bits 57, 55,
53 und 51 führt zu einer normalen Funktion A - B oder A + B, je
nach dem Zustand des Bits C. Wenn der Befehl keine Multiflag-
Register-Maskenoperation (@MF) spezifiziert, dann wechselt die
Operation zu A - B. Wenn das Bit 31 des zweiten ALU-Eingabebusses
206 "1" ist, dann wechselt die Operation zu A + B (A plus dem
Absolutwert von B). Ein Bitzustand "1011" der Bits 57, 55, 53
und 51 führt zu einer normalen Funktion von A + B oder A - B, je
nach dem Bitzustand von C. Wenn der Befehl keine Multiflag-
Register-Maskenoperation (-@MF) spezifiziert, dann wechselt die
Operation zu' A + B. Wenn das Bit 31 des zweiten ALU-Eingabebusses
206 "1" ist, dann wechselt die Operation zu A - B (A minus dem
Absolutwert von B). Ein Bitzustand "1001" der Bits 57, 55, 53
und 51 führt zu einer normalen Funktion von A + B mit Rechts-
Verschieben mit "Eins"-Erweiterung. Wenn das Bit 31 des zweiten
ALU-Eingabebusses 206 "0" ist, dann wechselt die Operation zu
A + B mit Rechts-Verschieben mit Vorzeichenerweiterung.
-
Zwei Codes werden modifiziert, um mehrere nützliche
Funktionen zu liefern. Ein Bitzustand "0000" der Bits 57, 55,
53 und 51 führt zu einer normalen Funktion von ~A (nicht A),
die reserviert ist, um wie oben beschrieben
Nicht-ALU-Operationen zu unterstützen. Ein Bitzustand "1111" der Bits 57, 55, 53
und 51 führt zu einer normalen Funktion von A. Dieses wird
modifiziert zu (A & C) + (B & C) oder zu einer Feldaddition von A und
B, gesteuert durch den Zustand von C.
-
Die Basisgruppe an Operationen, die in der Tabelle 14
aufgelistet sind, kann in arithmetischen Befehlen spezifiziert
werden. Es ist zu erkennen, daß die Befehlswortbits 58, 56, 54
und 52 die Modifikationen dieser Grundopertionen steuern, wie
es in der Tabelle 6 dargestellt ist. Diese Modifikationen
wurden in Verbindung mit der Tabelle 6 und der Beschreibung des
Statusregisters 210 erläutert. Wie unten weiter beschrieben,
spezifizieren bestimmte Befehle "erweiterte ALU"-Operationen.
Es ist möglich, jede der 256 Arithmetik-Operationen über eine
"erweiterte ALU"-Operation (EALU) zu spezifizieren. Für diese
Befehle spezifiziert das "A"-Bit (Bit 27) des Datenregisters D0
entweder eine Arithmetik oder eine Boolsche Logikoperation, das
"EALU"-Feld (Bits 26-19) spezifiziert die Funktionssignale F7-
F0, und das "FMOD"-Feld (Bits 31-28) spezifiziert
Modifikationen dieser Grundfunktion. Es ist darüber hinaus zu erwähnen,
daß die "C", "I", "S", "N" und "E"-Felder des Datenregister D0
eine Steuerung des Übertragseingangs zum Bit 0 der ALU 230 und
zum niedrigstwertigen Bit jedes Abschnitts, im Fall der
Freigabe einer Multiarithmetik, ermöglichen. Es gibt vier
Formen von Operationen mit erweiterter ALU. Zwei von diesen
spezifizieren parallele Multiplikationsoperationen, die den
Multiplizierer 220 verwenden. Bei einer "erweiterte ALU"-Wahr-
Operation (SALUT) entsprechen die Funktionssignale F7-F0 den
entsprechenden Bits des "EALU"-Felds des Datenregisters D0. Bei
einer "erweiterte ALU"-Falsch-Operation (EALUF) werden die
einzelnen Bits des "EALU"-Feldes des Datenregisters D0
invertiert, um die Funktionssignale F7-F0 zu bilden. Die "erweiterte
ALU"-Falsch-Operation ist nützlich, da während einiger
Algorithmen die invertierten Funktionssignale eine nützliche
verwandte Operation durchführen. Das Invertieren sämtlicher
Funktionssignale spezifiziert typischerweise eine inverse
Funktion. So kann auf diese verwandten Operationen über einen
weiteren Befehl ohne erneutes Laden des Datenregisters 208
zugegriffen werden. Bei den anderen erweiterten ALU-Operationen
entsprechen die Funktionssignale F7-F0 den entsprechenden Bits
des "EALU"-Feldes des Datenregisters D0, jedoch werden
verschiedene Datenpfade zur ALU 230 freigegeben. Diese Optionen
werden unten beschrieben werden.
-
Die Operation der Dateneinheit 110 erfolgt in Abhängigkeit
von Befehlswörtern, die von der Programmflußsteuereinheit 130
abgerufen werden. Die Befehlsdecodierlogik 250 empfängt Daten,
die dem Befehl entsprechen, in der Ausführungspipelinestufe
über den Operationscode-Bus 133. Die Befehlsdecodierlogik 250
erzeugt Steuersignale für die Operation der Multiplexer
Fmux 221, Imux 222, Msmux 225, Bmux 227, Amux 232, Cmux 233,
Mmux 234 und Smux 231, entsprechend dem empfangenen
Befehls
wort. Die Befehlsdecodierlogik 250 steuert darüber hinaus die
Operation der Puffer 104, 106, 108, 223 und 236, entsprechend
dem empfangenen Befehlswort. Der Übersichtlichkeit halber sind
die Steuerleitungen für diese Funktionen weggelassen worden.
Die speziellen gesteuerten Funktionen der Multiplexer und
Puffer werden unten bei der Beschreibung des Befehlswortformats
in Verbindung mit der Fig. 18 beschrieben. Die
Befehlsdecodierlogik 250 liefert darüber hinaus teilweise decodierte
Signale zum Funktionssignalerzeuger 245 und zum Bit-0-
Übertragseingangs-erzeuger 246 für die Steuerung der ALU 230.
Spezielle Hardware für diese teilweise Decodierung ist nicht
dargestellt, jedoch wäre ein Fachmann auf diesem Gebiet in der
Lage, diese Funktionen aus der Beschreibung der
Befehlswortformate in Verbindung mit der Fig. 18 bereitzustellen. Die
Befehlsdecodierlogik 250 steuert darüber hinaus die optionale
Multiabschnittsoperation der ALU 230 durch Steuerung der
Multiplexer 311, 312, 313 und 314, wie vorher in Verbindung mit
der Fig. 7 beschrieben.
-
Die Fig. 13 zeigt die Einzelheiten des
Funktionssignalauswahlelements 245a. Das Funktionssignalauswahlelement 245a
bildet einen Teil des Funktionssignalerzeugers 245, der in der
Fig. 5 dargestellt ist. Um einen Gesamtüberblick über die
Funktionssignalerzeugung zu erzielen, sollte Fig. 13 zusammen
mit dem Funktionssignalmodifizierer 245b, der in der Fig. 14
dargestellt ist, betrachtet werden. Die Multiplexer sind als
Rechtecke dargestellt, die einen Pfeil aufweisen, der den
Bitfluß von den Eingängen zu den Ausgängen darstellt. Die
Eingänge sind mit Kleinbuchstaben bezeichnet. Die
Steuerleitungen sind mit entsprechenden Großbuchstaben
gekennzeichnet, die in das Multiplexerrechteck senkrecht zum
Pfeil eintreten. Wenn eine mit einem Großbuchstaben bezeichnete
Steuerleitung aktiv ist, dann wird der Eingang mit dem
entsprechenden Kleinbuchstaben ausgewählt und mit dem Ausgang
des Multiplexers verbunden.
-
Der Eingang "a" des Multiplexers Omux 500 empfängt eine
Eingabe in zwei Teilen. Die Bits 57, 55, 53 und 51 des
Befehlswortes sind mit den Bitleitungen 6, 4, 2 bzw. 0 des
Eingangs "a" verbunden. Der Inverter 501 invertiert die
jeweiligen Befehlswortbits und liefert sie an die Begleitungen
7, 5, 3 und "1" des Eingangs "a". Der Eingang "a" wird
ausgewählt, wenn die Steuerleitung "A" aktiv wird und wenn
ausgewählte acht Eingabebitleitungen mit ihren acht
entsprechend numerierten Ausgabebitleitungen 7-4 und 3-0
verbunden werden. Die Steuerleitung "A" wird durch das UND-
Gatter 502 gespeist. Das UND-Gatter 503 empfängt eine erste
Eingabe, die eine Ausführung eines Befehls in einer der
Befehlsklassen 7-0 anzeigt. Das Befehlswortbit 63 zeigt dieses
an. Diese Befehlsklassen werden unten weiter beschrieben
werden. Das UND-Gatter 502 besitzt einen zweiten Eingang, der
durch das Bit 59 des Befehlswortes gespeist wird. Wie unten
erläutert, weist das Bit 59, wenn es "1" ist, auf eine
Arithmetik-Operation hin. Das HAND-Gatter 503 liefert eine
dritte Eingabe zum UND-Gatter 502. Das NAND-Gatter 503 erkennt,
wenn irgendeines der vier Befehlswortbits 57, 55, 53 oder 51 im
L-Zustand ist. Der Steuereingang "A" ist dann aktiv, wenn
irgendeine der Befehlsklassen 7-0 ausgewählt wird, das
Arithmetik-Bit 59 des Befehlswortes "1" ist und die
Befehlswortbits 57, 55, 53 und 51 nicht alle "1" sind. Man rufe
sich aus der Tabelle 14 ins Gedächtnis, daß ein Bitzustand
"1111" der Bits 57, 55, 53 und 51 zu den modifizierten
Funktionssignalen Hex "60" führt, anstelle den normalen
Funktionssignalen.
-
Der Eingang "b" zum Multiplexer Omux 500 ist ein
konstantes Hex "60". Der Multiplexer Omux 500 wählt diesen
Eingang aus, wenn das UND-Gatter 504 das Steuersignal "B" aktiv
macht. Das UND-Gatter 504 macht das Steuersignal "B" aktiv,
wenn der Befehl sich innerhalb der Klassen 7-0 befindet, wie es
durch das Befehlswortbit 63 angezeigt wird, das Befehlswortbit
59 "1" ist, was eine Arithmetik-Operation anzeigt, und der
Zustand der Bits 57, 55, 53 und 51 "1111" ist. Wie vorher in
Verbindung mit der Tabelle 14 beschrieben, wird unter diesen
Bedingungen die Funktion Hex "60" für die durch den Befehl
angezeigten Funktionssignale ersetzt.
-
Der Eingang "c" zum Multiplexer Omux 500 empfängt alle
acht Befehlswortbits 58-61. Der Multiplexer Omux 500 wählt
diesen Eingang aus, wenn das UND-Gatter 505 das Steuersignal
"C" aktiv macht. Das UND-Gatter 505 empfängt das durch den
Inverter 506 invertierte Befehlswortbit 59 und eine Anzeige von
irgendeiner der Befehlsklassen 7-0. So werden die
Befehlswortbits 58-51 ausgewählt, um eine der 256 Boolschen
Operationen in den Befehlsklassen 7-0 durchzuführen.
-
Die Befehlswörter für die Operationen, die relevant sind,
um die Steuereingänge "D", "E", "F", "G" und "H" zu steuern,
weisen Bits 63-61 auf, die gleich "011" sind. Wenn diese
Bedingung erfüllt ist, dann definieren die Bits 60-57 die Art
der Operation.
-
Die Eingabe "d" zum Multiplexer Omux 500 ist eine
Konstante Hex "66". Diese Eingabe wird für Befehle ausgewählt,
die eine parallele Multiplikation ohne Vorzeichen und Addition
(MPYS ADD) oder eine parallele Multiplikation ohne Vorzeichen
und Addition (MPYU ADD) ausführen. Diese Befehle werden
gemeinsam durch den mnemonischen Code MPYx ADD bezeichnet.
-
Die Eingabe "e" zum Multiplexer Omux 500 ist eine
Konstante Hex "99". Diese Eingabe wird für Befehle ausgewählt,
die eine parallele Multiplikation mit Vorzeichen und eine
Subtraktion (MPYS SUB) ausführen oder eine parallele
Multiplikation ohne Vorzeichen und Subtraktion (MPYU SUB).
Diese Befehle werden gemeinsam durch den mnemonischen Code
MPYx SUB bezeichnet.
-
Die Eingabe "f" zum Multiplexer Omux 500 ist eine
Konstante Hex "A6". Diese Eingabe wird für die DIVI-Operation
ausgewählt. Die Operation DIVI, die bei der Division verwendet
wird, wird unten weiter beschrieben werden.
-
Die Eingabe "g" zum Multiplexer Omux 500 wird von dem
"EALU"-Feld (Bits 26-19) des Datenregisters D0 entsprechend
einem "erweiterte ALU"-Funktionscode von den Bits 26-19
geliefert. Der Steuereingang "G" wird aktiv, um dieses "EALU"-
Feld von dem Datenregister D0 auszuwählen, wenn das ODER-Gatter
507 entweder eine MPYxIIEALUT-Operation oder eine EALU-
Operation erkennt. Wie vorher beschrieben, deutet das T-Suffix
in EALUT auf einen EALU-Code "wahr" im Gegensatz zu dem
inversen Code "falsch" in EALUF hin. Die EALU-Eingabe ist
aktiv, um den Eingang "G" zu steuern, wenn das "EALU"-Feld des
Datenregisters D0 entweder EALU oder EALU% anzeigt.
-
Der Inverter 508 invertiert die einzelnen Bits des "EALU"-
Feldes des Datenregisters D0 für die Zuführung zum Eingang "h"
des Multiplexers Omux 500. Die Eingabe "h" des Multiplexers
Omux 500 wird in Abhängigkeit von der Erkennung einer
MPYx EALUF-Operation am Steuereingang "H" ausgewählt. Wie
vorher beschrieben, deutet das F-Suffix von EALUF darauf hin,
daß die einzelnen Bits des "EALU"-Feldes des Registers D0 für
die Spezifizierung der Funktionssignale F7-F0 invertiert sind.
-
Der Multiplexer AEmux 510, der auch in der Fig. 13
dargestellt ist, erzeugt das Arithmetik-Freigabesignal. Dieses
Arithmetik-Freigabesignal wird zum Drei-Zustands-UND-Gatter
jeder Bitschaltung 400 geliefert. Die "a"-Eingabe zum
Multiplexer AEmux 510 ist das "A"-Bit (Bit 27) des
Datenregisters D0. Das ODER-Gatter 511 empfängt drei Eingaben:
MPYx EALUT, EALU, und MPYx EALUF. Wenn der Befehl eine dieser
drei Operationen auswählt, dann wählt der Eingang "A" zum
Multiplexer AEmux das "A"-Bit (Bit 27) des Datenregisters D0
aus. Die "b"-Eingabe zum Multiplexer AEmux 510 ist das "ari"-
Bit (Bit 59) des Befehlswortes. Wie unten beschrieben wird,
wählt dieses "ari"-Bit Arithmetik-Operationen für bestimmte
Typen von Befehlen aus. Diese Eingabe wird ausgewählt, wenn der
Befehl ein beliebiger der Befehlsklassen 7-0 ist. In diesem
Fall wird das "ari"-Bit, das auf eine Arithmetik-Operation
("ari" = "1") oder eine Boolsche Operation ("ari" = "0")
hinweist, direkt zur ALU 230 geleitet. Die "c"-Eingabe zum
Multiplexer AEmux 510 ist eine Konstante "1". Das Gatter 512
wählt diese Eingabe aus, wenn der Befehl weder ein erweiterter
ALU-Befehl noch ein Befehl ist, der innerhalb der
Befehlsklassen 7-0 liegt. Zu einem solchen Befehl gehören die
DIVI-Operation und die MPYx ADD-, und MPYx SUB-Operationen.
Das ODER-Gatter 513 liefert ein Arithmetik- oder EALU-Signal,
wenn der Befehl entweder eine Arithmetikoperation, angezeigt
durch das Ausgangssignal des Multiplexers AEmux 510 ist, oder
eine beliebige EALU-Operation, die durch das ODER-Gatter 511
angezeigt wird.
-
Die Fig. 14 zeigt den Funktionssignalmodifizierer 245b.
Der Funktionssignalmodifizierer 245b modifiziert das von dem
Funktionssignalerzeuger 245a gesetzte Funktionssignal
entsprechend dem "FMOD"-Feld des Datenregisters D0 oder der
Befehlsbits 58, 56, 54 und 52 in Abhängigkeit von dem Befehl. Der
Multiplexer Fmux 520 wählt den Funktionsmodifizierercode aus.
-
Die "a"-Eingabe zum Multiplexer Fmux 520 besteht
sämtlichst aus Nullen (Hex "0"). Das NOR-Gatter 521 speist die
Steuerleitung "A" des Multiplexers Fmux 520. Das NOR-Gatter 521
besitzt einen ersten Eingang, der das "irgendein EALU"-Signal
von dem ODER-Gatter 511, dargestellt in der Fig. 13, empfängt
und einen zweiten Eingang, der mit dem Ausgang des UND-Gatters
522 verbunden ist. Das UND-Gatter 522 empfängt ein erstes
Eingangssignal von dem "ari"-Bit (Bit 59) des Befehlswortes und
ein zweites Eingangssignal, das anzeigt, daß sich der Befehl in
den Befehlsklassen 7-0 befindet. So erzeugt das NOR-Gatter 521
ein aktives Ausgangssignal, das das Hex "0"-Eingangssignal zum
Fmux 520 auswählt, wenn der Befehl keine erweiterte
ALU-Operation ist und entweder das "ari"-Bit des Befehlswortes "0" ist
oder der Befehl nicht innerhalb der Befehlsklassen 7-0 liegt.
-
Der "b"-Eingang zum Multiplexer Fmux 520 empfängt die Bits
58, 56, 54 und 52 des Befehlswortes. Der Steuereingang "B"
empfängt das Ausgangssignal des UND-Gatters 522. So wählt der
Multiplexer Fmux 520 die Bits 58, 56, 54 und 52 des
Befehlswortes aus, wenn der Befehl innerhalb der Befehlsklassen 7-0
liegt und das "ari"-Bit des Befehles gesetzt ist.
-
Der "c"-Eingang des Multiplexers Fmux 520 empfängt Bits
des "FMOD"-Feldes (Bits 31-28) des Datenregisters D0. Der
Steuereingang "C" empfängt das "irgendein EALU"-Signal von dem
ODER-Gatter 511. Der Multiplexer Fmux 520 wählt das "FMOD"-Feld
des Datenregisters D0 aus, wenn der Befehl irgendeine
erweiterte ALU-Operation aufruft.
-
Der Multiplexer Fmux 520 wählt den aktiven
Funktionsmodifikationscode aus. Der aktive Modifikationscode modifiziert
die zur ALU 230 gelieferten Funktionssignale wie oben
beschrieben. Der Funktionsmodifikationscode wird decodiert, um die in
der Tabelle 6 angegebenen Operationen zu steuern. Wie oben
erklärt, umfassen diese modifizierten Operationen das
gesteuerte Unterteilen der ALU 230, das Setzen von einem oder
mehreren Bits des Multiflag-Registers 211 durch eine Null oder
Nullen oder durch einen Übertragsausgang oder Übertragsausgänge
von der ALU 230, das Rotieren oder Löschen des Multiflag-
Registers 211, das Betreiben der LMO/RMO/LMBC/RMBC-Schaltung
237 in einer ihrer vier Modi, das Betreiben der Maskenerzeugung
239 und das Betreiben des Bit-Null-Übertragseingangserzeugers
246. Die in bezug auf einen bestimmten Zustand des
Funktionsmodifikationscodes durchgeführten Operationen sind in der
Tabelle 6 dargestellt.
-
Drei Schaltungsblöcke in dem Funktionsmodifizierer 245b
können die Funktionssignale F7-F0 von dem Multiplexer Omux 500,
dargestellt in der Fig. 13, modifizieren. Der Mmux-Block 530
kann so arbeiten, daß er in wirksamer Weise die Eingabe zu dem
C-Port sämtlichst auf Einsen setzt. Der A-Port-Block 540 kann
so arbeiten, daß er in effektiver Weise die Eingabe zum A-Port
sämtlichst auf Nullen setzt. Der Vorzeichenerweiterungsblock
550 ist eine Vorzeichenerweiterungseinheit, die
Funktionssignale F3-F0 kippen kann.
-
Der Mmux-Block 530 umfaßt einen Multiplexer 531, der
normalerweise Funktionssignale F3-F0 ohne Modifikation
durchleitet. Um die Eingabe zum C-Port der ALU 230 auf Einsen
zu setzen, kopiert der Multiplexer 531 Funktionssignale F7-F4
auf Funktionssignale F3-F0. Der Multiplexer 531 wird durch das
UND-Gatter 531 gesteuert. Das UND-Gatter 533 ist aktiv, um die
Eingabe zum C-Port auf Einsen zu setzen, vorausgesetzt, daß
sämtliche folgenden drei Bedingungen erfüllt sind: 1) der
Funktionsmodifizierercode des Multiplexers Fmux 520 ist "0010",
"0011", "0110" oder "0111", wobei er durch den
"0X1X"-Übereinstimmungsdetektor 532 erkannt wird (X - egal); 2) der Befehl
ruft eine Maskenerzeugungsoperation auf; und 3) die Ausgabe von
dem Multiplexer Mmux 234 ist "0". Wie oben beschrieben,
ermöglicht die Kopie der Funktionssignale F7-F4 auf die
Funktionssignale F3-F0, d. h. die Auswahl F7 = F3, F6 = F2, F5 = F1 und
F4 - F0, die Auswahl von 16 Boolschen Logikfunktionen der
Eingaben A und B, unabhängig von der Eingabe C. Es ist aus der
Tabelle 6 ersichtlich, daß die vier Funktionsmodifizierercodes
"0X1X" die "%!"-Modifikation umfassen. Gemäß der Fig. 14 wird
die "%!"-Modifikation nicht durch Veränderung der durch den
Maskenerzeuger 239 erzeugten Maske erzielt, sondern durch
Veränderung der zur ALU 230 gesendeten Funktionssignale.
-
Der A-Port-Block 540 umfaßt den Multiplexer 541 und die
Verbindungsschaltung 542, die normalerweise Funktionssignale
F7-F0 ohne Modifikation durchleiten. Um in wirksamer Weise die
Eingabe zum A-Port der ALU 230 auf lauter Nullen zu setzen,
kopieren der Multiplexer 541 und die Verbindungsschaltung 541
die Funktionssignale F6, F4, F2 und F0 auf die Funktionssignale
F7, F5, F3 bzw. F1. Der Multiplexer 541 und die
Verbindungsschaltung 542 führen diese Ersetzung durch, wenn sie durch das
ODER-Gatter 544 aktiviert worden sind. Der erste Eingang des
ODER-Gatters 544 ist mit dem "010X"-Übereinstimmungsdetektor
543 verbunden und der zweite Eingang ist mit dem UND-Gatter 546
verbunden. Ein erster Eingang des UND-Gatters 546 ist mit dem
"011X"-Übereinstimmungsdetektor 545 verbunden. Beide
Übereinstimmungsdetektoren 543 und 545 bestimmen, ob der
Funktionsmodifizierercode mit ihrem Erkennungszustand übereinstimmt. Das
UND-Gatter 546 besitzt einen zweiten Eingang, der ein Signal
empfängt, das anzeigt, ob der Befehl eine
Maskenerzeugungsoperation aufruft. Die Eingabe zum A-Port der ALU 230 wird in
wirksamer Weise durch Eintauschen der Funktionssignale F6, F4,
F2 und F0 tür die Funktionssignale F7, F5, F3 bzw. F1 auf Null
gesetzt. Wie vorher beschrieben, macht diese Ersetzung die
Ausgabe der ALU 230 unabhängig von der A-Eingabe. Diese
Ersetzung findet statt, wenn: 1) der Funktionsmodifizierercode
eine Übereinstimmung in dem "010X"-Übereinstimmungsdetektor 543
findet; oder 2) der Befehl eine Maskenerzeugungsoperation
aufruft und der Funktionsmodifizierercode eine Übereinstimmung
in dem "010X"-Übereinstimmungsdetektor 545 findet und der
Befehl eine Maskenerzeugungsoperation aufruft.
-
Der Vorzeichenerweiterungsblock 550 umfaßt das EXKLUSIV-
ODER-Gatter 551, das normalerweise die Funktionssignale F3-F0
in unmodifizierter Weise durchleitet. Jedoch werden diese
Funktionssignale F3-F0 zur ALU-Vorzeichenerweiterung und zu
Absolutwertzwecken unter bestimmten Bedingungen invertiert. Es
ist zu erkennen, daß die Funktionssignale F7-F4 vom A-Port-
Block 540 immer in unmodifizierter Weise durch den
Vorzeichenerweiterungsblock 550 weitergeleitet werden. Das UND-Gatter
552 führt eine Steuerung durch, die darüber entscheidet, ob das
EXKLUSIV-ODER-Gatter 551 die Funktionssignale F3-F0 invertiert.
Das UND-Gatter 552 besitzt einen ersten Eingang, der das
Arithmetiksignal oder das Signal der erweiterten ALU von den
ODER-Gatter 513, dargestellt in der Fig. 13, empfängt. Der
zweite Eingang des UND-Gatters 552 wird von dem Multiplexer 553
bedient.
-
Der Multiplexer 553 wird durch das "irgendein EALU"-Signal
von dem ODER-Gatter 511 der Fig. 13 gesteuert. Der Multiplexer
553 wählt ein erstes Signal von dem UND-Gatter 554 aus, wenn
das "irgendein EALU"-Signal aktiv ist, und wählt ein zweites
Signal von dem zusammengesetzten UND/ODER-Gatter 556 aus, wenn
das "irgendein EALU"-Signal inaktiv ist. Das Ausgangssignal des
UND-Gatter 554 ist "1", wenn die Daten auf dem zweiten ALU-
Eingabebus 206 positiv sind, wie es durch das Vorzeichenbit
(Bit 31), das durch den Inverter 555 invertiert ist, angezeigt
wird, und wenn das "S"-Bit (Bit 16) des Datenregisters D0 "1"
ist. Das Ausgangssignal des zusammengesetzten UND/ODER-Gatters
556 ist aktiv, wenn: 1) die Daten auf dem zweiten
ALU-Eingabebus 206 positiv sind, wie es durch das durch den Inverter 555
invertierte Vorzeichenbit (Bit 31) angezeigt wird; 2) der
Befehl innerhalb der Befehlsklassen 7-0 liegt; und 3) entweder
a) die Befehlsbits 57, 55, 53 und 51 eine Übereinstimmung in
dem "0100"/"1011"-Übereinstimmungsdetektor 557 finden oder b)
das UND-Gatter 560 erkennt, daß die Befehlswortbits 57, 55, 53
und 51 eine Übereinstimmung in dem
"1001"/"0110"-Übereinstimmungsdetektor 558 finden, und der Befehl nicht eine Multiflag-
Register-Maskenoperation (@MF) aufruft, wie es durch den
Inverter 559 angezeigt wird.
-
Der Vorzeichenerweiterungsblock 550 implementiert die in
der Tabelle 14 aufgeführten Ausnahmen. Ein inaktives "irgendein
EALU"-Signal, das anzeigt, daß der Befehl eine
Arithmetikoperation spezifiziert, wählt den zweiten zum Multiplexer 553
führenden Eingang aus. Das zusammengesetzte UND/ODER-Gatter 556
bestimmt, daß der Befehl innerhalb der Befehlsklassen 7-0 liegt
und daß das Vorzeichenbit "0" ist. Unter diesen Bedingungen
springt, wenn die Befehlswortbits 57, 55, 53 und 51 "0100"
entsprechen, das Funktionssignal von Hex "9a" auf Hex "95",
indem die Funktionssignalbits F3-F0 invertiert werden. Wenn die
Befehlswortbits 57, 55, 53 und 51 "1011" sind, springt dann
entsprechend das Funktionssignal von Hex "65" auf Hex "6a"
durch Invertieren der Funktionssignalbits F3-F0. Wenn die
Befehlswortbits 57, 55, 53 und 51 "1001" sind und der Befehl
keine Multiflag-Register-Maskenoperation aufruft, wie es durch
den Inverter 599 angezeigt wird, springt das Funktionssignal
von Hex "69" auf Hex "66". Dieser Satz an Funktionssignalen
bringt die ALU 230 dazu, A - B zu implementieren, d. h. A minus
dem Absolutwert von B. Wenn die Befehlwortbits 57, 55, 53 und
51 "0110" sind und der Befehl keine Multiflag-Register-
Maskenoperation aufruft, dann springt das Funktionssignal von
Hex "95" auf Hex "99". Dieses führt die Funktion A + B aus,
d. h. A plus dem Absolutwert von B. Es ist zu erkennen, daß
diese Sprünge der Funktionssignale auf dem Vorzeichenbit (Bit
31) der Daten auf dem zweiten ALU-Eingabebus 206 basieren.
-
Die Fig. 15 stellt den Bit-0-Übertragseingangserzeuger 246
dar. Wie vorher erläutert, erzeugt der
Bit-0-Übertragseingangs
erzeuger 246 das Übertragseingangssignal cin, das zum ersten
Bit der ALU 230 geliefert wird. Darüber hinaus wird dieses
Übertragseingangssignal Cin von dem
Bit-0-Übertragseingangserzeuger 246 zum ersten Bit von jedem der mehreren Abschnitte
geliefert, wenn der Befehl eine Multi-ALU-Operation aufruft.
Der Multiplexer Zmux 570 wählt eine von sechs möglichen Quellen
für dieses Bit-0-übertragseingangssignal cin, basierend auf
sechs entsprechenden Steuereingangssignalen von der
Befehlsdecodierlogik 250, aus.
-
Das Bit 31 des Multiflag-Registers 211 liefert das
Eingangssignal "a" des Multiplexers Zmux 570. Der Multiplexer
Zmux 570 wählt dieses Eingangssignal als das
Bit-0-Übertragseingangssignal cin aus, wenn der Befehl eine DIVI-Operation
aufruft.
-
Die Eingangssignale "b", "c" und "d" des Multiplexers Zmux
570 werden durch zusammengesetzte Logikfunktionen gebildet. Der
Eingang "b" des Multiplexers Zmux 570 empfängt ein Signal, das
eine Boolsche Funktion der Funktionssignale F6, F2 und F0 ist.
Dieser Boolsche Ausdruck, der durch die Schaltung 571 gebildet
wird, ist (F0 & ~F6) (F0 & ~F2) (~F2 & ~F6). Der Eingang "c des
Multiplexers Zmux 570 wird von dem EXKLUSIV-ODER-Gatter 572
versorgt, dessen erster Eingang von dem EXKLUSIV-ODER-Gatter
573 versorgt wird, wobei sein zweiter Eingang von dem UND-
Gatter 574 versorgt wird. Das erste Eingangssignal in das
EXKLUSIV-ODER-Gatter 573 ist das "C"-Bit (Bit 18) des
Datenregisters D0, das anzeigt, ob die vorhergehende Operation der
ALU 230 ein Übertragsausgangssignal cout am Bit 31, dem letzten
Bit erzeugte. Der zweite Eingang des XOR-Gatters 573 empfängt
ein Signal, das die Befehlsaufrufe für eine MPYx
EALUF-Operation anzeigt. Das UND-Gatter 574 weist einen ersten Eingang
auf, der sein Signal von dem Inverter 575 erhält, der das
Vorzeichenbit (Bit 31), das am zweiten ALU-Eingabebus 206
anliegt, zur Erkennung eines positiven Vorzeichens invertiert.
Die zweite Eingabe in das UND-Gatter 574 ist das "I"-Bit (Bit
17) des Datenregisters D0, und die dritte Eingabe ist das "S"-
Bit (Bit 16) des Datenregisters D0. Wie vorher erläutert,
verursacht das "I"-Bit eine Inversion des Übertragseingangs,
wenn das "S"-Bit, das auf eine Vorzeichenerweiterung hinweist,
freigegeben ist. Diese Operation bildet das Komplement zur
Vorzeichenerweiterungsoperation des UND-Gatters 554 und des
XOR-Gatters 551 des Funktionsmodifizierers 246b, dargestellt in
der Fig. 14. Das Eingangssignal "d" des Multiplexers Zmux 570
stammt von dem XOR-Gatter 576. Ein erster Eingang des XOR-
Gatters 576 empfängt das Funktionssignal F0, und ein zweiter
Eingang empfängt das Bit 0 der Daten auf dem C-Eingabebus 243.
-
Das Eingangssignal "b" des Multiplexers Zmux 570 wird
ausgewählt, wenn das UND-Gatter 581 den Steuereingang "B"
aktiviert. Das tritt auf, wenn das "Arithmetik oder EALU"-
Signal vom ODER-Gatter 513 aktiv ist, der Befehl nicht nach
einer erweiterten ALU-Operation, angezeigt durch den Inverter
582, ruft und kein anderer Eingang des Multiplexers Zmux 570
aktiviert wird, was durch die Inverter 583, 584 und 585
gesteuert wird.
-
Der Eingang "c" des Mulitplexers Zmux 570 wird ausgewählt,
wenn das UND-Gatter 586 ein aktives Ausgangssignal zum
Steuereingang "C" liefert. Das UND-Gatter 586 spricht auf ein Signal
an, das anzeigt, daß der Befehl eine "irgendein EALU"-Operation
aufruft. Die restlichen Eingänge des UND-Gatters 586 stellen
sicher, daß das UND-Gatter 586 nicht aktiv ist, wenn
irgendeiner der Eingänge "d", "e" oder "f" aktiv ist, was über die
Inverter 584, 585 und 595 sichergestellt wird.
-
Der Eingang "d" des Multiplexers Zmux 570 wird ausgewählt,
wenn die Steuerleitung "D" von dem UND-Gatter 587 aktiviert
wird. Das UND-Gatter 587 ist aktiv, wenn der Befehl eine
Arithmetikoperation oder eine "erweiterte ALU"-Operation ist,
das UND-Gatter 589 aktiv ist und das Eingangssignal "e",
angezeigt durch den Inverter 585, nicht ausgewählt ist. Das
UND-Gatter 589 ist aktiv, wenn der Befehl eine Multiflag-
Register-Maskenoperation (@MF)-Erweiterung spezifiziert und die
Befehlswortbits 57, 55, 53 und 51 eine Übereinstimmung in der
"0110"/"1001"-Übereinstimmungsschaltung 588 finden. Diese
Befehlswortbits entsprechen den Funktionssignalen Hex "69" und
Hex "96", die, abhängig von dem Eingang zum Port C eine
Addition oder Subtraktion zwischen den Ports A und B
verursachen. Ein Funktionssignalssprung tritt nicht auf, da die
Befehlsklasse eine Multiflag-Register-Erweiterung betrifft. Die
Fig. 7 zeigt das Bereitstellen dieses Übertragseingangssignals
für die mehreren Abschnitte einer unterteilten ALU in dem
Mehrfachmodus.
-
Das Eingangssignal "e" des Multiplexers Zmux 570 stammt
von dem "C"-Bit (Bit 30) des Statusregisters 210. Wie vorher
erläutert, wird dieses "C"-Bit des Statusregisters 210 auf "1"
gesetzt, wenn das Ergebnis der letzten Operation der ALU 230
einen Übertragsausgang von dem Bit 31 verursachte. Das UND-
Gatter 594 liefert das Steuereingangssignal "E". Das UND-Gatter
594 wird aktiv, wenn der Befehl eine Arithmetikoperation oder
eine "erweiterte ALU"-Operation spezifiziert und sich die
folgende Logik ergibt: 1) der Funktionsmodifizierercode findet
eine Übereinstimmung in dem "0X01"-Übereinstimmungsdetektor
591; oder (ODER-Gatter 590) 2) der Befehl ruft eine
Maskenerzeugungsoperation auf und (UND-Gatter 593) der
Funktionsmodifizierercode findet eine Übereinstimmung in dem
"0X11"-Übereinstimmungsdetektor 592.
-
Dem Eingang "f" des Multiplexers Zmux 570 wird eine
Konstante "0" zugeführt. Der Multiplexer Zmux 570 führt diese
Eingabe aus, wenn das "Arithmetik oder EALU"-Signal von dem
ODER-Gatter 513 anzeigt, daß der Befehl eine Boolsche
Operation, angezeigt durch den Inverter 595, spezifiziert.
-
Das Ausgangssignal des Zmux 570 läuft normalerweise in
unveränderter Form durch den Ymux 580 und erscheint an dem Bit-
0-Übertragseingangsausgang. Bei einer Multiarithmetikoperation,
bei der das "A"-Bit (Bit 27) des Datenregisters D0 und das "E"-
Bit (Bit 14) des Datenregisters D0 beide ungleich "1" sind,
erzeugt Ymux mehrere identische Übertragseingangssignale. Die
Auswahl der Halbwortoperation über das "Asize"-Feld des
Statusregisters 210 bringt Ymux dazu, das Ausgangssignal des Zmux 570
sowohl zum Bit-0-Übertragseingangsausgang als auch zum Bit-16-
Übertragseingangsausgang zu liefern. In entsprechender Weise
liefert Ymux 580 bei der Auswahl einer Byte-Operation das
Ausgangssignal von Zmux 570 zum Bit-0-Übertragseingangsausgang,
zum Bit-8-Übertragseingangsausgang, zum
Bit-16-Übertragseingangsausgang und zum Bit-24-Übertragseingangsausgang.
-
Die Operation des Ymux 580 verläuft in anderer Weise, wenn
das "A"-Bit (Bit 27) des Datenregisters D0 und das "E"-Bit (Bit
14) des Datenregisters D0 beide "1" sind. Das UND-Gatter 577
erzeugt diese Bedingung und steuert die Operation des Ymux 580.
Das ist nur der Fall, wenn die zu verschiedenen Abschnitten der
ALU 230 gelieferten Übertragseingangssignale sich während der
Multiarithmetik unterscheiden. Wenn das UND-Gatter 577 diese
Bedingung erkennt, dann werden die Übertragseingangssignale
durch das EXKLUSIV-ODER des Funktionssignals F0 und des
niedrigstwertigsten Bits des C-Eingangs des entsprechenden
Abschnitts der ALU 230 gebildet. Wenn das "Asize"-Feld eine
Wortoperation auswählt, d. h. wenn die ALU 230 einen einzigen
32-Bit-Abschnitt bildet, dann ist das durch den Ymux 580
gebildet Bit-0-Übertragseingangsausgangssignal das EXKLUSIV-
ODER des Funktionssignals F0 und des durch das XOR-Gatter 596
gebildeten C-Eingabebus-Bits 0. Andere Übertragseingangssignale
werden nicht gebildet. Wenn das "Asize"-Feld die
Halbwortoperation auswählt, wobei zwei 16-Bit-Abschnitte gebildet werden,
dann ist das durch den Amux 580 gebildete
Bit-0-Übertragseingangsausgangssignal das Ausgangssignal des XOR-Gatters 596 und
der Übertragseingang zum Bit 16 ist das EXKLUSIV-ODER des
Funktionssignals F0 und des C-Eingabebus-Bits 16, das durch das
XOR-Gatter 598 gebildet wird. Schließlich ist bei Byte-
Multiarithmetik das durch den Ymux 580 erzeugte Bit-0-
Übertragseingangsausgangssignal das Ausgangssignal des XOR-
Gatters 596, wobei der Bit-8-Übertragseingang durch das XOR-
Gatter 597 gebildet wird, der Bit-16-Übertragseingang durch das
XOR-Gatter 598 gebildet wird und der Bit-24-Übertragseingang
durch das XOR-Gatter 599 gebildet wird.
-
Die Fig. 13, 14 und 15 zeigen nicht nur spezifische
Blöcke, die die Tabellen implementieren, sondern zeigen darüber
hinaus den einfachen Prozeß, durch den die Tabellen und Figuren
in kompakter Weise eine Logikschaltungsanordnung definieren,
die es dem Fachmann auf diesem Gebiet ermöglicht, die
bevorzugte Ausführungsform aufzubauen, selbst wenn ein
Blockdiagramm einer speziellen Schaltungsanordnung aus Gründen
der Übersichtlichkeit nicht dargestellt ist. Es ist zu
erkennen, daß die Schaltungen der Fig. 13 und 14 nicht die
mittels der Befehldecodierlogik 250 durchgeführte Steuerung für
die verschiedenen Multiplexer und die speziellen Schaltungen
umfassen, die ein Teil der in der Fig. 5 dargestellten
Dateneinheit 110 ist. Die Steuerung dieser Schaltungen ist jedoch
einfach und liegt im Vermögen eines Durchschnittsfachmann auf
diesem Gebiet. Um eine knappe Darstellung zu gewährleisten,
wird diese Steuerung daher hier nicht näher erläutert.
-
Die ALU 230 umfaßt drei 32-Bit-Eingänge, die jeweils
unterschiedliche Hardwarefunktionen vor jedem Eingang
aufweisen. Dieses ermöglicht die Durchführung von verschiedenen
Funktionen unter Verwendung der ALU 230, um Ergebnisse von der
Hardware, die jeden Eingang speist, zu kombinieren. Die ALU 230
führt Boolsche oder Bit-für-Bit-Logikkombinationen,
Arithmetikkombinationen und gemischte Boolsche und
Arithmetikkombinationen mit drei Eingaben durch. Die gemischten Boolschen und
Arithmetikfunktionen werden hierin wegen der Ähnlichkeit der
Ausführung als Arithmetikfunktionen bezeichnet. Die ALU 230
besitzt ein Steuerbit, das entweder Boolsche Funktionen oder
Arithmetikfunktionen auswählt. Boolsche Funktionen erzeugen
keine Übertragsausgaben von Bitschaltungen 400 oder zwischen
Bitschaltungen 400 der ALU 230. So kombiniert jede Bitschaltung
400 der ALU 230 die drei Eingaben in dieser Bitschaltung
unabhängig, wobei 32 einzelne Bitergebnisse gebildet werden.
Während der Arithmetikfunktionen kann jede Bitschaltung 400
eine Übertragseingabe von dem benachbarten Bit mit geringerem
Wert empfangen und eine Übertragsausgabe zur Stelle mit dem
nächsthöheren Bit erzeugen. Ein 8-Bit-Steuersignal
(Funktionssteuersignale F7-F0) steuert die durch die ALU 230
durchgeführte Funktion. Hierdurch kann eine von 256 Boolschen
Funktionen und eine von 256 Arithmetikfunktionen ausgewählt
werden. Die Funktionssignalnummerierung der Funktionssignale
F7-F0 entspricht derjenigen, die bei Microsoft®Windows
verwendet wird. Der Bit-0-Übertragseingangserzeuger 246 erzeugt
Übertragseingangssignale, wenn er im Arithmetikmodus ist. Im
Arithmetikmodus kann die ALU 230 in entweder zwei unabhängige
16-Bit-Abschnitte oder vier unabhängige 8-Bit-Abschnitte
unterteilt werden, um in paralleler Weise mehrere kleinere
Datensegmente zu verarbeiten. Der
Bit-0-Übertragseingangserzeu
ger 246 liefert entweder ein, zwei oder vier
Übertragseingangssignale, wenn die ALU 230 mit einem, zwei bzw. vier Abschnitten
arbeitet. Bei der bevorzugten Ausführungsform umfaßt ein
Assembler für die Dateneinheit 110 eine
Ausdrucksauswerteeinheit, die den geeigneten Satz an Funktionssignalen,
basierend auf einer algebraischen Eingabesyntax, auswählt.
-
Der speziell ausgeführte Befehl bestimmt die Funktion der
ALU 230. Wie weiter unten im einzelnen beschrieben umfaßt bei
der bevorzugten Ausführungsform das Befehlswort ein Feld, das
entweder Boolsche oder Arithmetikoperationen anzeigt. Ein
anderes Befehlswort spezifiziert die der ALU 230 zugeführten
Funktionssignale. Boolsche Befehle spezifizieren die 8
Funktionssignale F7-F0 direkt. Bei Arithmetikbefehlen
spezifiziert eine erste Untermenge dieses Befehlswortfelds eine
Untermenge der möglichen ALU-Operationen entsprechend der
Tabelle 14. Eine zweite Untermenge dieses Befehlswortfelds
spezifiziert Modifikationen der Befehlsfunktion entsprechend
der Tabelle 6. Sämtliche möglichen Variationen der
Funktionssignale und die Funktionsmodifikationen für die Boolschen und
Arithmetikbefehle können unter Verwendung eines "erweiterte
arithmetisch-logische Einheit" (EALU)-Befehls spezifiziert
werden. In diesem Falle spezifizieren die vordefinierten Felder
in dem Datenregister D0, das in der Fig. 9 dargestellt ist, die
Operation der ALU 230.
-
Obwohl die ALU 230 alle drei Eingaben kombinieren kann,
verwenden viele nützliche Funktionen einige der Eingaben nicht.
Zum Beispiel behandelt der Ausdruck A & B die C-Eingabe als
"belanglose Eingaben", und der Ausdruck A C behandelt die B-
Eingabe als "belanglose Eingabe". Da jedem Eingang
unterschiedliche Datenpfadhardware vorausgeht, unterstützt die Fähigkeit,
irgendwelche Eingaben zu verwenden oder zu ignorieren, die
Auswahl der Datenpfadhardware, die für die gewünschte Funktion
erforderlich ist. Die Tabelle 15 zeigt Beispiele von nützlichen
Ausdrücken mit drei Eingaben, wobei die C-Eingabe als eine
Maske oder eine Verknüpfungssteuerung behandelt wird. Da die
Dateneinheit 110 die Erweiterungsschaltung 238 und den
Maskenerzeuger 239 in dem Datenpfad der C-Eingabe der ALU 230
umfaßt, bietet es sich an, die C-Eingabe als eine Maske zu
verwenden.
Tabelle 15
-
Logikfunktion (Typische Verwendung
-
(A & C) (B & ~C) Bitweises Multiplexieren (Verknüpfen)
von A und B basierend auf C. A wird
ausgewählt, wenn das entsprechende Bit
in C 1 ist.
-
(A & ~C) (B & C) Bitweises Multiplexieren (Verknüpfen)
von A und B basierend auf C. B wird
ausgewählt, wenn das entsprechende Bit
in C 1 ist.
-
(A B) & ~C Logisches ODER von A und B und
Erzwingen von 0, immer wenn C 1 ist.
-
(A & B) & ~C Logisches UND von A und B und Erzwingen
von 0, immer wenn C 1 ist.
-
A (B & C) Wenn C 0 ist, dann wird die B-Eingabe
vor der logischen ODER-Verknüpfung mit
A auf 0 gezwungen.
-
A (B ~C) Wenn C 0 ist, dann wird die B-Eingabe
vor der logischen ODER-Verknüpfung mit
A auf 1 gezwungen.
-
Die drei Eingänge aufweisende ALU 230 kann gemischte
Boolsche und Arithmetikfunktionen in einem einzigen Durchlauf
durch die ALU 230 durchführen. Die gemischten Boolschen und
Arithmetikfunktionen unterstützen das Durchführen von Boolschen
Funktionen vor einer Arithmetikfunktion. Verschiedene
zusammengesetzte Funktionen wie Verschieben und Addition, Verschieben
und Subtraktion oder Feldmaskierung vor dem Addieren oder
Subtrahieren können durch die geeignete ALU-Funktion in
Verbindung mit weiterer Datenpfadhardware durchgeführt werden.
Es ist zu erkennen, daß die ALU 230 256 verschiedene
Arithmetikfunktionen unterstützt, es wird jedoch nur eine
Untermenge dieser Funktionen für den größten Teil der
Programmierung verwendet. Außerdem müssen weitere Optionen wie
die Übertragseingabe und die Vorzeichenerweiterung gesteuert
werden. Einige Beispiele, deren Verwendung häufig zu erwarten
ist, sind unten in der Tabelle 16 aufgelistet.
Tabelle 16
Tabelle 16 (Fortsetzung)
-
Der im allgemeinen am häufigsten verwendete Satz an
Arithmetikfunktionen zusammen mit den Optionen der Standard-
Übertragseingabesteuerung und der Vorzeichenerweiterung ist
direkt in dem Befehlssatz in einem Basissatz an Operationen
verfügbar. Diese sind in der Tabelle 14 aufgeführt. Dieser
Basissatz umfaßt Operationen, die die Funktionssteuersignale
der ALU basierend auf Vorzeichenbits modifizieren und die eine
Standard-Übertragseingangsauswahl verwenden. Einige Beispiele
von diesen sind unten aufgeführt.
-
Sämtliche 256 Arithmetikfunktionen zusammen mit einer noch
klareren Übertragseingangs- und Vorzeichenerweiterungssteuerung
sind über den "erweiterte arithmetisch-logische Einheit (EALU)-
Befehl verfügbar. Bei den EALU-Befehlen sind die
Funktionssteuersignale, die Funktionsmodifizierer und die explizite
Übertragseingangs- und Vorzeichenerweiterungssteuerung in dem
Datenregister D0 spezifiziert. Die Codierung des Datenregisters
D0 während solcher EALU-Befehle ist oben mit Bezug auf die Fig.
9 beschrieben.
-
Binärzahlen können ein Vorzeichen oder kein Vorzeichen
aufweisen. Binärzahlen ohne Vorzeichen sind nicht negative
Ganzzahlen innerhalb des verwendeten Bitbereichs. Eine N-Bit-
Binärzahl ohne Vorzeichen kann eine beliebige Ganzzahl zwischen
0 und 2N-1 sein. Binärzahlen mit Vorzeichen tragen einen
Hinweis auf ihr Vorzeichen in ihrem höchstwertigen Bit. Wenn
dieses höchstwertige Bit "0" ist, dann ist die Zahl positiv
oder Null. Wenn das höchstwertige Bit "1" ist, dann ist die
Zahl negativ oder Null. Eine N-Bit-Binärzahl mit Vorzeichen
kann eine Ganzzahl sein, die zwischen -2N-1 - 1 und 2N-1 - 1 liegt.
Zu verstehen, wie und wann Zahlen eine Übertragsausgabe
(carryout) oder einen Überlauf erzeugen, ist zum Verstehen der
Operation der ALU 230 wichtig.
-
Die Summe zweier Zahlen ohne Vorzeichen "läuft über", wenn
die Summe nicht länger mit Hilfe der Anzahl an Bits, die für
die Zahl verwendet werden, ausgedrückt werden kann. Dieser
Zustand wird durch die Erzeugung einer Übertragsausgabe
(Übertragsausgang) von dem höchstwertigen Bit erkannt. Es ist
zu erkennen, daß die ALU 230 so ausgebildet sein kann, daß sie
eine Operation an Zahlen mit 8 Bits, 16 Bits oder 32 Bits
durchführt. Soche Übertragsausgaben können im Multiflag-
Register 211 gespeichert werden und verwendet werden, um die
Genauigkeit aufrechtzuerhalten. Die Differenz von zwei Zahlen
ohne Vorzeichen erzeugt einen Unterlauf
(Bereichsunterschreitung), wenn die Differenz kleiner als Null ist. Man
vergegenwärtige sich, daß negative Zahlen nicht in Form der
Notation von Zahlen ohne Vorzeichen ausgedrückt werden können.
Die Beispiele unten zeigen, wie Übertragsausgaben während einer
Subtraktion ohne Vorzeichen erzeugt werden.
-
Das erste Beispiel zeigt 7 "00000111" minus 5 "00000110".
Die ALU 230 führt eine Subtraktion durch die Addition des
Zweierkomplements durch. Das Zweierkomplement einer Binärzahl
ohne Vorzeichen kann durch Invertieren der Zahl und Addieren
von eins erzeugt werden, d. h. -X = ~X + 1. Die ALU 230 bildet die
Negation einer Zahl, indem sie die Zahl logisch invertiert
(oder das Einerkomplement bildet) und eine Übertragseingabe von
eins in das niedrigstwertige Bit injiziert. Zunächst wird die 5
bitweise invertiert, wodurch das Einerkomplement "11111001"
erzeugt wird. Die ALU 230 addiert dieses zu 7 hinzu, wobei eine
"1" in den Übertragseingang des ersten Bits injiziert ist. Das
erzeugt das folgende Ergebnis:
-
Es ist zu erkennen, daß dadurch eine Übertragsausgabe "1"
aus dem höchstwertigsten Bit erzeugt wird. Bei der
Zweierkomplementsubtraktion deutet eine solche Übertragsausgabe
darauf hin, daß kein negativer Übertrag auftritt. Daher gibt es
keinen Unterlauf während dieser Subtraktion. Das nächste
Beispiel zeigt 7-5. Es ist erkennen, daß das
8-Bit-Einerkomplement von "00000111" "11111000" ist.
-
In diesem Fall deutet die Übertragsausgabe "0" auf einen
negativen Übertrag (borrow) hin, d. h., daß das Ergebnis kleiner
als Null ist und ein Unterlauf aufgetreten ist. Das letzte
Beispiel einer Subtraktion ohne Vorzeichen ist 0-0. Es ist
klar, daß das 8-Bit-Einerkomplement von 0 "11111111" ist.
-
Die Erzeugung einer Übertragsausgabe (carry-out) "1" deutet
darauf hin, daß kein Unterlauf auftritt.
-
Die Situation bei Zahlen mit Vorzeichen ist komplexer. Ein
Überlauf bei einer Addition mit Vorzeichen tritt auf, wenn
beide Operanden positiv sind und das Vorzeichenbit des
Ergebnisses eine 1 (d. h. negativ) ist, was anzeigt, daß das
Ergebnis von dem positiven in den negativen Bereich geraten
ist. Ein Überlauf einer Addition tritt auch dann auf, wenn
beiden Operanden negativ sind und das Ergebnis eine 0-(d. h. ein
positives) Vorzeichenbit aufweist. Oder mit anderen Worten
ausgedrückt, tritt ein Überlauf bei einer Addition auf, wenn
beide Vorzeichenbits der Operanden gleich sind und das Ergebnis
ein anderes Vorzeichenbit aufweist. Entsprechend kann eine
Subtraktion überlaufen, wenn die Operanden das gleiche
Vorzeichen aufweisen und das Ergebnis ein anderes Vorzeichenbit
aufweist.
-
Wenn das Übertragsbit in dem Statusregister 210 oder in
dem Mflags-Register 211 gesetzt wird, ist das Bit oder sind die
Bits immer die durch die ALU 230 erzeugten "natürlichen"
Übertragsausgaben. Die meisten anderen Mikroprozessoren setzen
den "Übertragsstatus" basierend auf dem Übertragsausgabebit
während der Addition, setzen es jedoch während der Subtraktion
basierend auf der Nicht-Übertragsausgabe (not-carry-out) (oder
dem negativen Übertrag (borrow)). Diese anderen
Mikroprozessoren müssen den Nicht-Übertrag reinvertieren, wenn sie eine
Subtraktion mit negativem Übertrag (borrow) durchführen, um die
geeignete Übertragseingabe in die ALU zu erhalten. Dieser
Unterschied führt bei der Verwendung dieser Erfindung zu einem
leicht unterschiedlichen Satz an
Bedingungsverzweigungsgleichungen im Vergleich zu anderen Prozessoren, um die
gleichen Verzweigungsbedingungen zu erhalten. Läßt man den Sinn
der Überträge/Nicht-Entleihungen (not-borrows) gleich wie den
durch die ALU 230 erzeugten, so werden viele Arten vereinfacht,
wie jeder digitale Bild/Graphikprozessor diese verwenden kann.
-
In dem Basissatz an Arithmetikbefehlen ist die Standard-
Übertragseingabe "0" für die Addition und "1" für die
Subtraktion. Der Befehlssatz und die bevorzugte Ausführungsform des
Assemblers werden die Übertragseingabe für die Addition oder
die Subtraktion in 32-Bit-Arithmetikooperation automatisch in
richtiger Weise einstellen. Der Befehlssatz unterstützt darüber
hinaus eine Übertragseingabe basierend auf der Übertragsausgabe
der Statusregister, um Multipräzisionsoperationen Addition mit
Übertrag oder Subtraktion mit negativem Übertrag zu
unterstützen.
-
Wie hierin unten im einzelnen erläutert, unterstützen
einige Funktionen der ALU 230 es, daß der C-Port eine Steuerung
durchführt, die darüber entscheidet, ob die Eingabe zum B-Port
zu der Eingabe zum A-Port addiert wird oder von dieser
abgezogen wird. Die Kombination dieser ALU-Funktionen mit einer
Multiarithmetik ermöglicht es, daß die Eingabe zum C-Port
entscheidet, ob jeder Abschnitt der ALU 230 eine Addition oder
eine Subtraktion durchführt. Der Basissatz an Operationen
steuert die Übertragseingabe zu jedem Abschnitt der ALU 230, um
eine Übertragseingabe von "0" zu liefern, wenn dieser Abschnitt
eine Addition durchführt, und eine Übertragseingabe von "1" zu
liefern, wenn dieser Abschnitt eine Subtraktion durchführt. Die
Hardware, die dazu dient, diese Übertragseingaben zu diesen
Abschnitten zu liefern, ist oben mit Bezug auf die Fig. 15
beschrieben.
-
Die nachfolgende Darstellung zeigt im einzelnen den
gesamten Bereich an Arithmetikfunktionen, die unter Verwendung der
drei Eingaben aufweisenden ALU 230 des digitalen
Bild/Graphikprozessors 71 ermöglicht werden können. Für die
meisten Algorithmen wird die oben aufgelistete Untermenge an
Befehlen mehr als ausreichend sein. Der Vollständigkeit halber
wird die nachfolgende noch genauere Beschreibung geliefert.
-
Zu der Beschreibung unten gehören Informationen darüber,
wie der Funktionscode für die ALU 230 abgeleitet wird. Einige
Bemerkungen über den Funktionscode F7-F0 sind hilfreich, um zu
verstehen, wie die ALU 230 für verschiedene Operationen
verwendet werden kann und wie am besten die Befehle der erweiterten
ALU (EALU-Befehle) verwendet werden können. Die Standard-
Übertragseingabe entspricht F0, dem niedrigstwertigen Bit des
Funktionscodes, außer in den Fällen, in denen die Eingabe zum
C-Port die Auswahl einer Addition oder Subtraktion zwischen A
und B steuert. Das Invertieren der gesamten Funktionscodebits
verändert das Vorzeichen der Operation. Zum Beispiel ist der
Funktionscode Hex "66", der A + B spezifiziert, gegenüber dem
Funktionscode Hex "99", der A - B spezifiziert, bitweise
invertiert. Entsprechend ist der Funktionscode Hex "65" (A + (B ~C))
gegenüber dem Funktionscode Hex "9A" (A - (B ~C)) bitweise
invertiert. Die Befehle der erweiterten ALU(EALU-Befehle) treten in
den Paaren "erweiterte arithmetisch-logische Einheit wahr
"(SALUT) und "erweiterte arithmetisch-logische Einheit falsch"
(EALUF) auf. Der EALUF-Befehl invertiert den in den Bits 26-19
des Datenregisters D0 gespeicherten ALU-Steuercode. Wie oben
erwähnt, wählt diese Invertierung allgemein zwischen Addition
und Subtraktion aus. Das Invertieren der vier
niedrigstwertigsten Bits des Funktionscodes Hex "6A" für A+ (B & C) liefert Hex
"65", d. h. die Funktion A + (B ~C). Entsprechend liefert das
Invertieren der vier niedrigstwertigsten Bits des
Funktionscodes Hex "95" für A - (B & C) den Funktionscode Hex "9A",
d. h. A - (B ~C). Die B & C-Operation macht die Bits in B zu Null,
wenn C "0" ist und die Operation B ~C zwingt die Bits in B auf
"1", wenn C "0" ist. So erreicht man die entgegengesetzte
Maskierungsfunktion in bezug auf C. Wie unten erläutert,
bewirkt das selektive Invertieren der vier niedrigstwertigsten
Bits des Funktionscodes basierend auf einem Vorzeichenbit eine
Vorzeichenerweiterung vor der Addition oder Subtraktion.
-
Alle verfügbaren und die ALU 230 verwendenden 256
Arithmetikfunktionen können folgendermaßen ausgedrückt werden:
-
S = A & F1 (B, C) + F2 (B, C),
-
wobei S das ALU-Ergebnis ist; und F1(B, C) und F2(B, C)
jeweils irgendeine der 16 möglichen Boolschen Funktionen von B
und C sein können, die unten in der Tabelle 17 dargestellt
sind.
Tabelle 17
-
Die Fig. 16 zeigt diese Ansicht der ALU 230 in
Blockdiagrammform. Die Arithmetikeinheit 491 bildet die Addition der
Gleichung. Die Arithmetikeinheit 491 empfängt eine
Übertragseingabe für das Bit 0 vom Bit-0-Übertragseingangserzeuger. Das
UND-gatter 492 bildet die Beziehung A UND F1(B, C). Die
Logikeinheit 493 bildet die Unterfunktion F1(B, C) aus den in
der Tabelle 17 aufgelisteten Funktionssignalen. Die
Logikeinheit 494 bildet die Unterfunktion F2(B, C) aus den in der
Tabelle 17 aufgelisteten Funktionssignalen. Diese Darstellung
der ALU 230 zeigt, daß während gemischter Boolscher und
Arithmetikoperationen die Boolschen-Funktionen vor den
Arithmetikfunktionen durchgeführt werden. Ein Satz an Bitschaltungen
400, die in den Fig. 10, 11 und 12 dargestellt sind, zusammen
mit dem in der Fig. 13 dargestellten Funktionsgenerator, dem in
der Fig. 14 dargestellten Funktionsmodifizierer und dem Bit-0-
Übertragseingangserzeuger, der in der Fig. 15 dargestellt ist,
bilden die bevorzugte Ausführungsform der ALU 230, die in der
Fig. 16 dargestellt ist. Fachleute auf diesem Gebiet erkennen,
daß es viele andere durchführbare Möglichkeiten gibt, um die in
der Fig. 16 dargestellte ALU 230 zu implementieren.
-
In der Fig. 16 ist deutlich dargestellt, daß die
Unterfunktionen F1(B, C) und F2(B, C) unabhängig sind und es sich
dabei um unterschiedliche Unterfunktionen für eine
Einzeloperation der ALU 230 handeln kann. Die Unterfunktion F(B, C) umfaßt
sowohl den Negativwert von B als auch den Negativwert von C.
Daher können entweder B oder C von A durch Addition ihres
Negativwertes subtrahiert werden. Die Codes für die
Unterfunktionen F1(B, C) und F2(B, C) ermöglichen die Ableitung des
Funktionscodes F7-F0 für die ALU 230, dargestellt in den Fig.
11 und 12. Der Funktionscode F7-F0 für die ALU 230 ist das
EXKLUSIV-ODER der Codes für die entsprechenden Unterfunktionen
F1(B, C) und F2(B, C). Es ist anzumerken, daß die Codes für die
Unterfunktionen so ausgewählt worden sind, daß sie dieses
Ergebnis erzielen, so daß diese Unterfunktionen keine
identischen Codes für die gleiche Operation aufweisen.
-
Die Unterfunktionen der Tabelle 17 sind mit den allgemein
nützlichen Ausdrucksarten aufgelistet. Es gibt andere Arten, um
jede Funktion so darzustellen oder zu faktorisieren. So
entspricht z. B. bei Anwendung des Gesetzes von DeMorgan, die
Funktion B ~C der Funktion ~(-B & C). Da ~X = -X-1, ist -(~B & C)
gleich -(~B & C)-1 und B ~C gleich B (-C-1). Es ist zu erkennen,
daß die negativen Formen in der Tabelle 17 am Ende einen "-1"-
Term aufweisen. Wie oben erläutert, sind negative Zahlen zweier
Komplemente. Diese entsprechen dem bitweisen Logikinverswert,
der das ler Komplement bildet, minus 1. Eine Übertragseingabe
von "1" kann in das niedrigstwertige Bit injiziert werden, um
die "-1" zu löschen und das Zweierkomplement zu bilden. Bei den
meisten nützlichen Funktionen mit einer negativen Unterfunktion
erzeugt nur die F2(B, C)-Unterfunktion einen Negativwert.
-
Oft wird es üblich sein, die Boolschen Unterfunktionen in
der Tabelle 17 als Durchführung einer Maskenoperation zu
betrachten. Wie in der Tabelle 17 zu erkennen, kann die
Unterfunktion B & C so interpretiert werden, daß der
B-Eingabewert auf "0" gezwungen wird, wenn das entsprechende Bit in C
"0" ist. Die Unterfunktion B ~C kann so interpretiert werden,
daß der B-Eingabewert auf "1" für jedes Bit gezwungen wird,
wenn die C-Eingabe "0" ist. Da der Maskenerzeuger 234 und die
Erweiterungsschaltung 238 den C-Port der ALU 230 über den
Multiplexer 233 speisen, wird in den meisten Fällen der C-Port
als eine Maske in Unterfunktionen verwendet werden, die sowohl
den B- als auch den C-Term betreffen. In der Tabelle 17 sind
die Ausdrücke jeder Unterfunktion in Termen faktorisiert, die
annehmen, daß die Eingabe zum C-Port als eine Maske verwendet
wird. Die Gleichung oben zeigt, daß die A-Eingabe nicht in dem
arithmetischen Ausdruck negiert werden kann. So kann die ALU
230 nicht A von entweder B oder C subtrahieren. Auf der anderen
Seite können entweder B oder C von A subtrahiert werden, da die
Unterfunktionen F1(B, C) und F2(B, C) die Negation/Inversion von
B und C unterstützen.
-
Die Unterfunktionen der Tabelle 17 erzeugen, wenn sie in
die obige Gleichung eingesetzt werden, sämtliche der 256
möglichen Arithmetikfunktionen, die die arithmetisch-logische
Einheit 230 durchführen kann. Gelegentlich liefert eine weitere
Reduktion des Ausdrucks des Ergebnisses einen Ausdruck, der mit
dem Original übereinstimmt und leichter zu verstehen ist. Beim
Reduzieren solcher Ausdrücke können einige Hinweise nützlich
sein. Der Basisbefehlssatz ergibt standardmäßig eine
Übertragseingabe von "0" für die Addition und eine Übertragseingabe von
"1", wenn die Unterfunktion F2(B, C) einen negativen B- oder C-
Term aufweist, wie es in der Tabelle 17 zum Ausdruck gebracht
wird. Die Übertragseingabeinjektion hat den Effekt, das
Einerkomplement (logische Invertierung) in ein Zweierkomplement
zu verwandeln, indem in wirksamer Weise die "-1" auf der
rechten Seite des Ausdrucks dieser Unterfunktionen gelöscht
wird. Die logische UND-Verknüpfung von A mit lauter "1en"
entspricht A. Somit kann die Unterfunktion F1(B, C) so
eingestellt werden, daß sie lauter "1en" liefert, um A auf der
linken Seite der Gleichung zu erhalten. Es ist anzumerken, daß
ein Ausdruck mit nur "1en" dem Zweierkomplement der Binärzahl
mit Vorzeichen minus 1 (-1) entspricht.
-
Die Beispiele unten zeigen, wie diese Gleichung und die
Unterfunktionen der Tabelle 17 zu verwenden sind, um eine
beliebige mögliche ALU-Funktion und ihren entsprechenden
Funktionscode abzuleiten. Die Arithmetikfunktion A + B kann als
A & (Ausdruck mit lauter "1en") + B ausgedrückt werden. Das
erfordert es, daß F1 (B, C) - Ausdruck mit lauter "1en" ist und
F2(B, C) - B ist. Der F1-Code für lauter "1en" ist Hex "AA" und
der F2-Code für B ist Hex "CC". Die bitweise XOR-Verknüpfung
von Hex "AA" und Hex "CC" ergibt Hex "66". Die Tabelle 16
zeigt, daß Hex "66" der Funktionscode für A + B ist.
-
Die Arithmetikfunktion A-B kann als A & (Ausdruck mit lauter
"1en") + (-B - 1) + 1 ausgedrückt werden. Dieses impliziert F1(B, C) =
lauter "1en" (F1-Code Hex "AA") und F2(B, C) = -B-1 (F2-Code Hex
"33") mit einer Übertragseingangsinjektion von "1". Man
vergegenwärtige sich, daß eine Übertragseingabe von "1" der
Standardwert für Unterfunktionen F2 ist, die eine Negation
umfassen. Die bitweise XOR-Verknüpfung des F1-Codes von Hex
"AA" mit dem F2-Code von Hex "33" ergibt Hex "99". Die Tabelle
16 zeigt, daß Hex "99" der Funktionscode für A-B ist, wobei
eine Übertragseingabe von "1" angenommen wird.
-
Die Arithmetikfunktion A + C wird in entsprechender Weise
wie die Funktion A + B abgeleitet. Daher ist A + C = A & (lauter
"1en") + C. Dieses kann abgeleitet werden, indem F1(B, C) = lauter
"1en" und F2(B, C) = C gewählt werden. Die
EXKLUSIV-ODER-Verknüp
fung des F1-Codes von Hex "AA" und des F2-Codes von Hex "F0"
erzeugt Hex "5A", den Funktionscode für A + C. In entsprechender
Weise ist A-C gleich A & (lauter "1en") + (-C - 1) + 1. Die EXCLUSIV-
ODER-Verknüpfung des F1-Codes von Hex "AA" und des F2-Codes von
Hex "OF" erzeugt Hex "A5", den Funktionscode für A-C.
-
Die drei Eingaben aufweisende ALU 230 weist einen
Hauptvorteil auf, der darin besteht, daß sie Maskierungs-
und/oder Bedingungsfunktionen zwischen zwei der Eingaben
basierend auf der dritten Eingabe liefert. Der Datenpfad der
Dateneinheit 110 aktiviert den C-Port, so daß er in äußerst
nützlicher Weise als eine Maske unter Verwendung des
Iaskenerzeugers 234 oder als eine Bedingungssteuereingabe unter
Verwendung der Erweiterungsschaltung 238 auftritt. Die ALU 230
führt immer Boolsche Funktionen vor Arithmetikfunktionen bei
gemischten Boolschen und Arithmetikfunktionen durch. So kann
ein Übertrag aus unmaskierten Bits in ein oder in mehrere Bits
direkt weitergeleitet werden, die auf Null gesetzt wurden oder
durch eine Boolsche Funktion gesetzt wurden. Die folgenden
Beispiele sind bei Maskierungs- und Bedingungsoperationen
nützlich.
-
Die Funktion A + (B & C) kann als A & (lauter "1en") + (B & C)
ausgedrückt werden. Wählt man F1(B, C) - lauter "1en" (F1-Code
von Hex "AA") und F2(B, C) = B & C (F2-Code von Hex "C0"), so ergibt
sich A + (B & C). Die bitweise EXCLUSIV-ODER-Verknüpfung von Hex
"AA" und Hex "C0" ergibt den ALU-Funktionscode von Hex "6A",
der in der Tabelle 16 aufgelistet ist. Diese Funktion kann Bits
von Zahlen ohne Vorzeichen ablösen. Wie unten dargestellt, kann
diese Funktion mit dem Barrel-Rotator 235 und dem
Maskenerzeuger 234 beim Durchführen von Rechts-Schiebe- und
Additionsoperationen kombiniert werden. In diesem Falle wirkt C als eine
Bitmaske, die Bits von B auf Null setzt, wenn C "0" ist. Da der
Maskenerzeuger 234 eine Maske mit nach rechts ausgerichteten
Einsen erzeugen kann, ermöglicht die Auswahl des
Maskenerzeugers 234 über den Multiplexer Cmux 233 diese Funktion, um
einige der höchstwertigen Bits in B vor der Addition zu A auf
Null zu setzen. Eine andere Verwendung dieser Funktion ist die
bedingte Addition von B und A. Die Auswahl der
Erweiterungsschaltung 238 über den Multiplexer Cmux 233 aktiviert die
Steuerung, die darüber entscheidet, ob B zu A addiert wird,
basierend auf den Bits in dem Mflags-Register 211. Während der
Multiarithmetik können die Bits in dem Mflags-Register 211 die
entsprechenden Abschnitte der ALU 230 steuern.
-
Die Funktion A + (B ~C) kann als A & (lauter "1en") + (B ~C)
ausgedrückt werden. Wählt man F1(B, C) - lauter "1en" (F1-Code
von Hex "AA") und F2(B, C) = B ~ C (F2-Code von "CF"), so ergibt
sich dieser Ausdruck. Die bitweise EXKLUSIV-ODER-Verknüpfung
von Hex "AA" und Hex "C0" ergibt den Funktionscode von Hex
"65", wie er in der Tabelle 16 aufgelistet ist.
-
Die Funktion A - (B & C) kann als A & (lauter "1en") + (-(B & -C)-
1)+1 ausgedrückt werden. Wählt man F1(B, C) - lauter "1en" (F1-
Code Hex "AA") und F2(B, C) - -(B & C)-1 (F2-Code Hex "3F") mit
einer Übertragseingabeinjektion von "1", so ergibt sich dieser
Ausdruck. Die bitweise EXKLUSIV-ODER-Verknüpfung von Hex "AA"
und Hex "3F" ergibt den Funktionscode Hex "95", wie er in der
Tabelle 16 aufgelistet ist. Diese Funktion kann Bits in der B-
Eingabe ablösen oder maskieren, und zwar durch die C-Eingabe,
bevor eine Subtraktion von A stattfindet.
-
Es gibt 16, mögliche Funktionen, bei denen die
Unterfunktion F1(B, C) = 0 ist. Diese Funktionen werden gewöhnlich mit
einer anderen Hardware verwendet, um die Negation, die
Absolutwertbildung, die Bitmaskierung und/oder die
Vorzeichenerweiterung der B-Eingabe durch die C-Eingabe durchzuführen. Wenn die
Unterfunktion F1(B, C) = 0 ist, dann wird die ALU-Funktion durch
die Unterfunktion F2(B, C) definiert.
-
Die Funktion -(B & C) kann als (A & "0") + (-(B & C)) ausgedrückt
werden. Dieser Ausdruck kann gebildet werden, indem F1(B, C) - 0
(F1-Code Hex "00") und F2(B, C) - -(B & C)-1 (F2-Code Hex "3F")
mit einer Übertragseingabeinjektion von "1" gewählt wird. Die
EXKLUSIV-ODER-Verknüpfung von Hex "00" und Hex "3F" ergibt den
Funktionscode Hex "3F", der in der Tabelle 16 dargestellt ist.
Diese Funktion maskiert Bits in B durch eine Maske C und
negiert dann den Wert. Diese Funktion kann als Teil einer
Rechts-Verschiebungs- und Negationsoperation verwendet werden.
-
Mehrere Funktionen unterstützen das Maskieren von beiden
Termen der Summe in der obigen Gleichung in einer nützlichen
Weise. Die Funktion (A & C) + (B & C) kann erzielt werden, indem
F1 (B, C) - C (F1-Code Hex "A0") und F2 (B, C) - B & C (F2-Code Hex
"C0") gewählt werden. Die EXKLUSIV-ODER-Verknüpfung von Hex
"A0" und Hex "F0" ergibt den Funktionscode Hex "60", wie er in
der Tabelle 16 dargestellt ist. Diese Funktion bringt die
entsprechenden Bits der A- und B-Eingaben auf Null, wenn C "0"
ist, und zwar vor der Addition. Es ist zu erkennen, daß die
Boolsche Funktion vor der Addition angewendet wird, und daß ein
Übertrag oder mehrere Überträge in die Bits, die auf Null
gesetzt worden sind, weitergeleitet werden können. Wenn eine
Multiarithmetik verwendet wird, überschreiten solche Überträge
nicht die Grenzen zwischen den Unterteilungsabschnitten der ALU
230. Eine gewöhnliche Verwendung für diese Funktion ist das
Aufsummieren von mehreren kleineren Werten, die in einem
Register gehalten werden. Der B-Port empfängt eine rotierte Version
einer in den A-Port laufenden Zahl, und der C-Port liefert eine
Maske für die Bits, die sich überlappen. Vier 8 Bit-Zahlen
können in Form von zwei 16-Bit-Zahlen aufsummiert werden, oder
zwei 16-Bit-Zahlen können in Form von einer 32-Bit-Zahl in
einem einzigen Befehl aufsummiert werden.
-
Die ähnliche Funktion (A & C) - (B & C) wird erzielt, indem
F1(B, C) - C (F1-Code Hex "A0") und F2(B, C) = -(B & C)-1 gewählt
werden und eine Übertragseingabe von "1" injiziert wird. Die
EXCLUSIV-ODER-Verknüpfung von Hex "A0" und Hex "3F" ergibt den
Funktionscode Hex "9F", der in der Tabelle 16 dargestellt ist.
Die Funktion kann negative Summen erzeugen, wobei der C-Port-
Wert als eine Maske der A- und B-Eingaben wirkt.
-
Die Funktion (A & B) +B wird erzielt, indem F1 (B, C) = C (F1-
Code Hex "A0") und F2(B, C) - B (F2-Code Hex "CC") gewählt
werden. Die EXKLUSIV-ODER-Verknüpfung von Hex "A0" und Hex "CC"
liefert den Funktionscode Hex "6C". Diese Funktion kann in
Abhängigkeit von einer Bedingung B verdoppeln, basierend
darauf, ob A aus lauter "1en" oder lauter "0en" besteht.
-
Die Fig. 17 zeigt in Blockdiagrammform eine alternative
Ausführungsform der ALU 230. Die ALU 230 der Fig. 17 bildet die
folgende Gleichung:
-
S = F3 (A,B.C) + F4 (A,B, C),
-
wobei S das ALU-Ergebnis und F3(A, B, C) und F4(A, B, C)
jeweils eine von 256 möglichen Boolschen Funktionen von A, B
und C ist. Der Addierer 495 bildet die Addition dieser
Gleichung und umfaßt eine Eingabe für eine LSB-Übertragseingabe
von dem Bit-0-Übertragseingangserzeuger 246. Der Erzeuger 496
Boolscher Funktionen bildet die Funktion F3(A, B, C), gesteuert
durch die eingegebenen Funktionssignale. Der Erzeuger 497
Boolscher Funktionen bildet in ähnlicher Weise die Funktion
F4(A, B, C), gesteuert durch die eingegebenen Funktionssignale.
Es ist zu erkennen, daß die Erzeuger 496 und 497 Boolscher
Funktionen in unabhängiger Weise ausgewählte Boolsche
Kombinationen von A, B und C aus einem Satz von 256 möglichen
Boolschen Kombinationen der drei Eingaben bilden. Es ist
aufgrund dieses Aufbaus klar, daß die ALU 230 die Boolschen
Kombinationen vor dem Bilden der Arithmetikkombination
durchführt. Die Schaltung in der Fig. 12 kann modifiziert
werden, um dieses Ergebnis zu erreichen. Die in der Fig. 12
dargestellte Erzeugungs-/Abbruchfunktion verwendet einen Teil
des Logikbaums, der in der Fortpflanzungsfunktion verwendet
wird. Dieser besteht aus den Durchlaufgattern 451, 452, 453,
454, 461 und 462. Stellt man einen separaten Logikbaum für
diese Funktion bereit, der die Durchlaufgatter 451, 452, 453,
454, 461 und 462 in gruppierter Form enthält, und läßt das
NICHT-A-Gatter 475 weg, so gelangt man zu einer Struktur, die
in der Fig. 17 dargestellt ist. Bei diesem Aufbau kann einer
der Erzeugungs- oder Abbruchterme gleichzeitig mit dem
Fortpflanzungsterm auftreten. Dieser Aufbau liefert eine noch
größere Flexibilität als derjenige, der in der Fig. 16
dargestellt ist.
-
Die drei Eingaben aufweisende ALU 230, die Hilfsdatenpfad
Hardware und das Wissen über das Binärzahlensystem können
verwendet werden, um viele nützliche elementare Funktionen zu
bilden. Der Befehlssatz des digitalen Bild-/Graphikprozessors
ermöglicht den Zugriff auf einen größeren Teil der Hardware für
den Programmierer als des bei Mikroprozessoren normalerweise
üblich ist. Das stärkere Zugänglichmachen der Hardware für den
Programmierer legt einige Gesichtspunkte der Architektur frei,
die bei den meisten anderen Prozessoren verborgen sind. Dieser
Befehlssatz unterstützt das Bilden von Anwenderoperationen
unter Verwendung von elementaren Funktionen als
Funktionsbausteinen. Das bietet dem Programmierer eine größere
Funktionalität, die über die Hardwarefunktionen, die man im allgemeinen
bei anderen Prozessoren findet, hinausgeht. Die digitalen
Bild-/Graphikprozessoren besitzen Hardwarefunktionen, die für
die Bildverarbeitung, die Graphikverarbeitung und andere
Verarbeitungsformen sehr nützlich sein können. Diese
Kombination aus Hardwareleistungsvermögen und Flexibilität
ermöglicht es den Programmierern, in einem Befehl das
durchzuführen, was bei den meisten anderen Architekturen viele
Befehle erfordern würde. Die nachfolgende Beschreibung
erläutert einige elementare Schlüsselfunktionen und die Art und
Weise, wie zwei oder mehrere dieser Funktionen kombiniert
werden können, um eine noch komplexere Operation zu erreichen.
-
Die vorhergehenden Abschnitte beschrieben im einzelnen die
Arbeitsweisen jedes Funktionsblocks der Dateneinheit 110.
Dieser Abschnitt beschreibt, wie diese Funktionen in
Kombination verwendet werden können, um noch komplexere Operationen
durchzuführen. Der Barrel-Rotator 235, der Maskenerzeuger 239
und die 3 Eingaben aufweisende ALU 230 können zusammenarbeiten,
um eine Links-Verschiebung, eine Rechts-Verschiebung ohne
Vorzeichen und Rechts-Verschiebungen mit Vorzeichen entweder
alleine oder in Kombination mit Addition oder Subtraktion in
einem einzigen ALU-Befehlszyklus durchzuführen. Ein Assembler
erzeugt den Programmcode für die digialen
Bild-/Graphikprozessoren 71, 72, 73 und 74. Dieser Assembler unterstützt
vorzugsweise die Symbole "> > u" für die logische
Rechtsverschiebung ohne Vorzeichen, "> > " oder "> > s" für die
arithmetische Rechts-Verschiebung (mit Vorzeichen) und "< < " für
eine Links-Verschiebung. Diese Verschiebungsnotationen sind in
Wirklichkeit Makrofunktionen, die die geeigneten expliziten
Funktionen anhand von Rotationen, einer Maskenerzeugung und
einer ALU-Funktion auswählen. Der Assembler unterstützt darüber
hinaus vorzugsweise das explizite Spezifizieren einer Barrel-
Rotation ("\\"), einer Maskenerzeugung ("%" und "%!") und der
ALU-Funktion. Die explizite Notation wird nur dann verwendet
werden, wenn eine Anwenderfunktion spezifiziert wird, die sich
nicht durch die Verschiebungsnotation ausdrücken läßt.
-
Die Dateneinheit 110 führt Links-Verschiebungsoperationen
in einem einzigen ALU-Zyklus durch. Eine solche
Linksverschiebungsoperation umfaßt eine Barrel-Rotation über den Barrel-
Rotator 235 um die Anzahl an Bits der Links-Verschiebung. Wie
oben erwähnt, ist es während einer Rotation so, daß Bits, die
links hinausrotiert werden, in den rechten Teil umlaufen und
daher abgelöst werden müssen, um eine Links-Verschiebung
durchzuführen. Die rotierte Ausgabe wird zum B-Port der ALU 230
geschickt. Der Maskenerzeuger 239 empfängt das
Verschiebungsausmaß und bildet eine Maske mit einer Anzahl an nach rechts
ausgerichteten Einsen, die dem Verschiebungsausmaß entspricht.
Es ist anzumerken, daß das gleiche Verschiebungsausmaß die
Rotationssteuereingabe des Barrel-Rotators 235 von dem zweiten
Eingabebus 202 über den Multiplexer Smux 231 und den
Maskenerzeuger 239 von dem zweiten Eingabebus 202 über dem Multiplexer
Mmux 234 liefert. Der Maskenerzeuger 239 speist den C-Port der
ALU 230. Die ALU 230 kombiniert die rotierte Ausgabe mit der
Maske mit der Boolschen Funktion B & ~C. Die Linksverschiebungen
werden in dem Assembler folgendermaßen ausgedrückt:
-
Left_Shift = Input_Shift Amount,
-
wobei Left_Shift = Linksverschiebung,
-
Input = Eingabe, und
-
Shift_Amount = Verschiebungsausmaß
-
Diese Operation entspricht in der expliziten Notation der
folgenden Operation:
-
Left-Shift = (InputsShift Amount) & ~%Shift_Amount
-
Das folgende Beispiel zeigt eine Links-Verschiebung von
Hex "53FFFFA7" um 4 Bits. Obwohl diese in mehreren Schritten
dargestellt ist, führt die Dateneinheit 110 diese Operation in
einem einzigen ALU-Durchlaufzyklus durch. Die Originalzahl in
binärer Notation ist:
-
0101 0011 1111 1111 1111 1111 1010 0111
-
Die Rotation um 4 Plätze im Barrel-Rotator 235 liefert:
-
0011 1111 1111 1111 1111 1010 OIIl 0101
-
Der Maskenerzeuger 239 bildet die folgende Maske:
-
0000 0000 0000 0000 0000 0000 0000 1111
-
Die ALU 230 bildet die logische Kombination B & ~C. Dieses
maskiert Bits in dem rotierten Ausmaß, was dazu führt, daß sie
"0" werden, und erhält die anderen Bits. Dieses liefert das
Ergebnis der Links-Verschiebung:
-
0011 1111 1111 1111 1111 1010 0111 0000
-
Die Links-Verschiebung des obigen Beispiels führt zu einem
arithmetischen Überlauf, da einige Bits "übergelaufen sind".
Während einer Links-Verschiebung tritt ein arithmetischer
Überlauf für Zahlen ohne Vorzeichen auf, wenn irgendwelche Bits
hinausgeschoben werden. Der arithmetische Überlauf kann auch
bei Zahlen mit Vorzeichen auftreten, wenn das sich ergebende
Vorzeichenbit sich von dem ursprünglichen Vorzeichenbit
unterscheidet. Die ALU 230 dieser Erfindung erkennt einen
arithmetischen Überlauf bei Links-Verschiebungen nicht
automatisch. Der Linksverschiebungs-Überlauf läßt sich erkennen,
indem das Veränderungsausmaß des linken äußeren Bits der
ursprünglichen Zahl, erzeugt durch die LMO/RMO/LMBC/RMBC-
Schaltung 237, von dem Ausmaß der Linksverschiebung abgezogen
wird. Wenn die Differenz kleiner oder gleich Null ist, dann
werden während der Verschiebung keine Bits überlaufen. Wenn die
Differenz größer als Null ist, dann ist die Differenz die
Anzahl an Bits, die überlaufen.
-
Der Assembler steuert darüber hinaus die Dateneinheit
110, um Linksverschiebungen und Additionsoperationen und
Linksverschiebungen und Subtraktionsoperationen durchzuführen.
Der Assembler übersetzt die A + (B< < n)-Funktion in eine Steuerung
des Barrel-Rotators 235, des Maskenerzeugers 239 und der ALU
230, um die gewünschte Operation durchzuführen. Eine
Linksverschiebung mit Additionsoperation läuft identisch zu dem obigen
Beispiel einer einfachen Verschiebung ab, wenn man von der
Operation der ALU 230 absieht. Anstelle der Durchführung der
logischen Funktion B & ~C, wie bei einer einfachen Verschiebung,
führt die ALU die gemischte arithmetische und logische Funktion
A + (B & ~C) durch. Eine Linksverschiebung mit Additionsoperation
läßt sich in der Assemblernotation in der folgenden Weise
ausdrücken:
-
LShift_Add = Input1 + Input2< < Shift Amount
-
(wobei LShift_Add = Linksverschiebung mit Addition ist).
Diese Operation entspricht:
-
LShift_Add = Input1 + [(Input2\\Shift_Amount) & -%Shift_Amount].
-
Das folgende Beispiel zeigt eine Linksverschiebung von Hex
"53FFFFA7" um 4 Bits, gefolgt von einer Addition von Hex
"000000AA". Es ist zu erkennen, daß alle diese Schritte nur
einen einzigen ALU-Zyklus erfordern. Die ursprüngliche
Eingabe 2 in binärer Notation ist folgende:
-
0101 0011 1111 1111 1111 Illl 1010 0111.
-
Die Rotation um 4 Plätze im Barrel-Rotator 235 liefert:
-
0011 1111 1111 1111 1111 1010 0111 0101.
-
Der Maskenerzeuger 239 bildet die folgende Maske:
-
0000 0000 0000 0000 0000 0000 0000 1111.
-
Die ALU 230 bildet die Logikkombination B & ~C, was ein
Linksverschiebungsergebnis erzeugt:
-
0011 1111 1111 1111 1111 1010 0111 0000.
-
Der andere Operand "Eingabe 1" in binärer Notation ist
folgender:
-
0000 0000 0000 0000 0000 0000 1010 1010.
-
Schließlich ergibt sich folgende Summe:
-
0011 1111 1111 1111 1111 1011 0001 1010.
-
Es ist zu erkennen, daß die ALU 230 die Logikkombination
und die Arithmetikkombination in einem einzigen Zyklus
durchführt und daß das oben dargestellte
Linksverschiebungsrgebnis nicht als Direktergebnis verfügbar ist. Es ist zu
erkennen, daß die Summe überlaufen kann, selbst wenn die
Linksverschiebung keinen Überlauf erzeugt. Der Überlauf der
Summe wird anhand der Erzeugung einer Übertragsausgabe von dem
höchstwertigen Bit der ALU 230 erkannt. Diese Bedingung wird
erkannt und in dem "V"-Bit des Statusregisters 210 gespeichert.
-
Die Linksverschiebungs- und Subtraktionsoperation wird
darüber hinaus in eine Gruppe von Funktionen aufgebrochen, die
durch den Barrel-Rotator 235, den Maskenerzeuger 237 und die
ALU 230 in einem einzigen ALU-Zyklus durchgeführt werden. Die
Linksverschiebungs- und Subtraktionsoperation unterscheidet
sich von der vorher beschriebenen Linksverschiebungsoperation
und der Links-Verschiebung und Additionsoperation nur in der
Funktion der ALU 230. Während der Links-Verschiebung und
Subtraktion führt die ALU 230 die gemischte Arithmetik- und
Logikfunktion A + (BI - C) + 1 durch. Die ALU 230 führt die "+1"-
Operation durch Injektion einer "1" in die Übertragseingabe des
niedrigstwertigsten Bits durch. Diese Injektion einer
Übertragseingabefindet beim Bit-Null-Übertragseingangserzeuger
246 statt. Die meisten Subtraktionsoperationen bei dieser
Erfindung finden unter Verwendung einer Übertragseingabe von
"1" in das niedrigstwertige Bit statt. Die Assembler-Notation
drückt die Linksverschiebungs- und Subtraktionsoperationen
folgendermaßen aus:
-
LShift_Sub = Input1 - Input2< < Shift_Amount
-
(wobei LShift_Sub = Links-Verschiebung mit Subtraktion ist).
Diese Operation entspricht:
-
LShift_Sub = Input1-[(Input2\\Shift_Amount) & ~%Shift_Amount] + 1.
-
Das folgende Beispiel zeigt eine Links-Verschiebung von
Hex "53FFFFA7" um 4 Bits, gefolgt von einer Subtraktion von Hex
"000000AA". Es ist zu erkennen, daß alle diese Schritte nur
einen einzigen ALU-Zyklus erfordern. Die ursprüngliche Eingabe
2 in binärer Notation ist folgende:
-
0101 0011 1111 1111 1111 1111 1010 0111.
-
Die Rotation um 4 Plätze im Barrel-Rotator 235 liefert:
-
0011 1111 1111 1111 1111 1010 0111 0101.
-
Der Maskenerzeuger 239 bildet die folgende Maske:
-
0000 0000 0000 0000 0000 0000 0000 1111.
-
Das Ergebnis der Logikkombination ~B C ist folgendes:
-
1100 0000 0000 0000 0000 0101 1000 1111.
-
Der andere Operand "Eingabe 1" in binärer Notation ist
folgender:
-
0000 0000 0000 0000 0000 0000 1010 1010.
-
Die Summe A + (~B C) ist folgende:
-
1100 0000 0000 0000 0000 0110 0011 1001.
-
Schließlich liefert die Addition von "1", injiziert in die
LSB-Übertragseingabe, folgendes:
-
1100 0000 0000 0000 0000 0110 0011 1010.
-
Es ist zu erkennen, daß die ALU 230 die logische
Kombination und die arithmetische Kombination in einem einzigen Zyklus
durchführt und daß weder das Ergebnis der Links-Verschiebung
noch die oben dargestellte Teilsumme als Direktergebnisse
verfügbar sind.
-
Der Assembler der bevorzugten Ausführungsform kann die
Dateneinheit 110 so steuern, daß sie eine Rechts-Verschiebung
ohne Vorzeichen mit Nullen, die von links eingeschoben sind, in
einem einzigen ALU-Zyklus durchführt. Da der Barrel-Rotator 235
eine Zinkrotation durchführt, kann eine Nettorechts-Rotation
mit einem Rotationsausmaß von 32-n durchgeführt werden, wobei n
die Anzahl an Bits ist, um die nach rechts zu rotieren ist. Es
sei erwähnt, daß nur die 5 niedrigstwertigsten Bits der Daten
auf dem zweiten Eingabebus 202 von dem Barrel-Rotator 235 und
dem Maskenerzeuger 239 verwendet werden. Daher sind die Beträge
32 und 0 gleich in bezug auf die Steuerung der
Verschiebungsoperation. Der Assembler wird automatisch die 32-n-Berechnungen
für Verschiebungen mit einem Direkt-Rechtsverschiebungsausmaß
durchführen. Der Assembler der bevorzugten Ausführungsform
verlangt von dem Programmierer, daß er den Wert 32-n an
registerbasierten Verschiebungen bildet.
-
Nachdem Platz für die Rechts-Rotation geschaffen wurde,
arbeitet die Rechts-Verschiebung ohne Vorzeichen in der
gleichen Weise wie die Links-Verschiebung, mit Ausnahme der
Tatsache, daß die ALU 230 eine andere Funktion durchführt.
Diese Operation umfaßt eine Rotation um den Betrag 32-n mittels
des Barrel-Rotators 235. Das Ergebnis dieser Netto-Rechts-
Rotation besteht darin, daß Bits von dem niedrigstwertigen Teil
des Wortes zum höchstwertigen Teil des Wortes umgelaufen sind.
Der gleiche Betrag (32-n) steuert den Maskenerzeuger 239, der
32-n rechtsausgerichtete Einsen erzeugen wird. Der
Maskenerzeuger 239 wird mit der "!"-Option gesteuert, so daß ein
Verschiebungsausmaß von Null eine Maske mit lauter "Einsen" erzeugt. In
diesem Falle sind keine Bits abzulösen. Die ALU 230 erzeugt
dann eine Boolsche Kombination der Ausgaben des Barrel-Rotators
235 und des Maskenerzeugers 239.
-
Ein Beispiel für eine Rechtsverschiebungsoperation ohne
Vorzeichen wird unten dargestellt. Die Assembler-Notation für
eine Rechts-Verschiebung ohne Vorzeichen ist folgende:
-
Unsigned_Right_Shift = Input> > u(32-Shift_Amount)
-
(wobei Unsigned_Right_Shift = Rechts-Verschiebung ohne
Vorzeichen ist).
-
Die äquivalente Operation, die explizit die durchgeführten
Funktionen zeigt, ist folgende:
-
Unsigned_Right_Shift =
-
(Input\\(32-Shift_Amount)) & %!(32-Shift_Amount).
-
Es ist in der obigen Gleichung zu erkennen, daß der
Maskenoperator "%!" angibt, daß dann, wenn der
Verschiebungsbetrag Null ist, eine Maske mit lauter Einsen erzeugt werden
wird. Das unten angegebene Beispiel zeigt die Verschiebung ohne
Vorzeichen der Zahl Hex "53FFFFA7" um 4 Bitpositionen nach
rechts. Die ursprüngliche Zahl in binärer Form ist:
-
0101 0011 1111 1111 1111 1111 1010 0111.
-
Wird diese Zahl nach links um 32-4 = 28 Plätze rotiert, so
erhält man:
-
0111 0101 0011 1111 1111 1111 1111 1010.
-
Der Maskenerzeuger 239 bildet eine Maske aus der Eingabe
32-4 = 28, die folgendermaßen aussieht:
-
0000 1111 1111 1111 1111 1111 1111 1111.
-
Schließlich bildet die ALU 230 die Boolsche Kombination B & C,
die das folgende Ergebnis liefert:
-
0000 0101 0011 1111 1111 1111 1111 1010.
-
Die Dateneinheit 110 kann entweder Rechts-Verschiebungen
ohne Vorzeichen mit Addition oder Rechts-Verschiebungen ohne
Vorzeichen mit Subtraktion durchführen. Bei der bevorzugten
Ausführungsform übersetzt der Assembler die Notation A + B> > u(n)
in einen Befehl, der den Barrel-Rotator 235, den Maskenerzeuger
239 und die ALU 230 steuert, so daß eine Rechts-Verschiebung
ohne Vorzeichen mit Addition durchgeführt wird. Die
Rechtsverschiebung ohne Vorzeichen mit Addition arbeitet in der
gleichen Weise wie das vorhergehende Beispiel einer einfachen
Rechts-Verschiebung ohne Vorzeichen, wobei jedoch jetzt die ALU
230 die Funktion A + (B & C) durchführt. Bei der bevorzugten
Ausführungsform übersetzt der Assembler die Notation A - B> > u (n)
in einen Befehl, der den Barrel-Rotator 235, den Maskenerzeuger
239 und die ALU 230 steuert, so daß eine Rechts-Verschiebung
ohne Vorzeichen mit Subtraktion durchgeführt wird. Die
Rechtsverschiebung ohne Vorzeichen mit Subtraktion läuft ähnlich dem
oben gegebenen Beispiel einer einfachen Rechts-Verschiebung
ohne Vorzeichen ab, wobei jedoch jetzt die ALU 230 die Funktion
A - (~B C) + 1
durchführt. Wie bei der Links-Verschiebung mit
Subtraktion bedingt die "+1"-Operation die Injektion einer
"Eins"-Übertragseingabe in das niedrigstwertige Bit über den
Bit-0-Übertragseingangserzeuger 246.
-
Der Assembler der bevorzugten Ausführungsform kann die
Dateneinheit 110 so steuern, daß eine Rechts-Verschiebung mit
Vorzeichen, bei der die Vorzeichenbits von links eingeschoben
werden, in einem einzigen ALU-Zyklus durchgeführt wird. Der
Assembler führt automatisch die 32-n-Berechnung für solche
Verschiebungen mit einem Direkt-Rechts-Verschiebungsbetrag
durch. Die Dateneinheit 110 umfaßt Hardware, die den Zustand
des als Vorzeichenbit bezeichneten höchstwertigen Bits der
Eingabe in den Barrel-Rotator 235 erkennt. Dieses Vorzeichenbit
kann die 4 niedrigstwertigen Bits des Funktionscodes steuern.
Wenn diese Hardware verwendet wird, werden die 4
niedrigstwertigen Bits des Funktionscodes invertiert, wenn das
Vorzeichenbit "0" ist. Rechts-Verschiebungs-Operationen mit
Vorzeichen verwenden diese Vorzeichenerkennungshardware, um die
Funktion zu steuern, die die ALU 230 basierend auf dem
Vorzeichen der Eingabe in den Barrel-Rotator 235 durchführt.
Diese Operation läßt sich unter Verwendung der folgenden
elementaren Funktionen erklären. Der Barrel-Rotator 235 führt
eine Netto-Rechts-Rotation durch, indem um einen Betrag nach
links rotiert wird, der 32 minus der Anzahl an Bits der
gewünschten Rechts-Verschiebung mit Vorzeichen (32-n)
entspricht. Dieses Verschiebungsausmaß (32-n) wird zum
Maskenerzeuger 237 geliefert, der dann 32-n rechts
ausgerichtete Einsen erzeugen wird. Die Einsen dieser Maske werden die
gewünschten Bits der Zahl auswählen, die nach rechts verschoben
werden soll. Die Nullen dieser Maske erzeugen Vorzeichenbits
entsprechend der Eingabe des höchstwertigen Bits in den Barrel-
Rotator 235. Die ALU 230 kombiniert dann die rotierte Zahl von
dem Barrel-Rotator 235 und die Maske von dem Maskenerzeuger
237. Die durch die ALU 230 durchgeführte Boolsche Funktion
hängt von dem Vorzeichenbit an dem Eingang zum Barrel-Rotator
235 ab. Wenn dieses Vorzeichenbit "0" ist, dann empfängt die
ALU 230 Funktionssignale, um B & C durchzuführen. Wenn die
Auswahl erfolgt, daß die rotierte Zahl unverändert bleibt, dann
werden alle Bits auf "0" gezwungen, die in der Maske "0" sind.
So sind die höchstwertigen Bits des Ergebnisses "0", was auf
das gleiche Vorzeichen wie die Eingabe zum Barrel-Rotator 235
hinweist. Wenn das Vorzeichenbit "1" ist, dann empfängt die ALU
230 Funktionssignale, um B ~C durchzuführen. Diese Funktion
führt die Auswahl durch, daß das Rotationsausmaß unverändert
bleibt, wobei alle Bits auf "1" gezwungen werden, die "0" in
der Maske sind. Die Veränderung des Funktionscodes bedingt das
Invertieren der 4 niedrigstwertigen Bits, wenn das erkannte
Vorzeichenbit "0" ist. So sind die höchstwertigen Bits des
Ergebnisses "1", die gleiche Vorzeichenanzeige wie die Eingabe
zum Barrel-Rotator 235.
-
Zwei Beispiele der Rechts-Verschiebungsoperation ohne
Vorzeichen sind unten dargestellt. "Signed right shift" (Rechs-
Verschiebung mit Vorzeichen) ist die Standard-Assembler-
Notation für Rechts-Verschiebungen. Die zwei möglichen
Assembler-Notationen für eine Rechts-Verschiebung mit
Vorzeichen sind:
-
Signed Right-Shift = Input> > s(32-Shift Amount)
Signed Right Shift = Input> > (32-Shift Amount).
-
Da diese Operation die Vorzeichenerkennungshardware
verwendet, gibt es keine explizite Notation der bevorzugten
Ausführungsform des Assemblers, um diese Operation durch
Rotationen und Maskierungen auszudrücken. Bei der bevorzugten
Ausführungsform steuert das Vorzeichen der Eingabe in den
Barrel-Rotator 235 die Invertierung der Funktionssignale F3-F0.
Das erste Beispiel zeigt eine Rechts-Verschiebung mit
Vorzeichen um 4 Plätze der negativen Zahl Hex "ECFFFFA7". Die
ursprüngliche Zahl in binärer Notation ist folgende:
-
1110 1100 1111 1111 1111 1111 1010 0111
-
Die Links-Rotation um 28 (32-4) Plätze liefert folgende
Zahl:
-
0111 1110 1100 1111 1111 1111 1111 1010
-
Der Maskenerzeuger 237 bildet folgende Maske:
-
0000 1111 1111 1111 1111 1111 1111 1111
-
Da das höchstwertige Bit der Eingabe in den Barrel-Rotator
235 "1" ist, führt die ALU 230 die Boolsche Kombination BI-C
durch. Dieses liefert das folgende Ergebnis:
-
1111 1110 1100 1111 1111 1111 1111 1010
-
Bei diesem Beispiel werden "1en" in die höchstwertigen
Bits des verschobenen Ergebnisses geschoben, wobei eine
Anpassung an das Vorzeichenbit der ursprünglichen Zahl erfolgt.
Das zweite Beispiel zeigt eine Rechts-Verschiebung mit
Vorzeichen der positiven Zahl Hex "5CFFFFA7". Die ursprüngliche
Zahl lautet in binärer Notation folgendermaßen:
-
0101 1100 1111 1111 1111 1111 1010 0111
-
Die Links-Rotation um 28 (32-4) Plätze liefert folgende
Zahl:
-
0111 0101 1100 1111 1111 1111 1111 1010
-
Der Maskenerzeuger 237 bildet folgende Maske:
-
0000 1111 1111 1111 1111 1111 1111 1111
-
Da das höchstwertige Bit der Eingabe in den Barrel-Rotator
235 "0" ist, bildet die ALU 230 die Boolsche Kombination B & C
durch Invertierung der vier niedrigstwertigen Bits des
Funktionscodes. Dieses liefert das folgende Ergebnis:
-
0000 0101 1100 1111 1111 1111 1111 1010
-
Es ist zu erkennen, daß bei dieser Rechts-Verschiebung
"0en" in die höchstwertigen Bits geschoben werden, wobei eine
Anpassung an das Vorzeichenbit der ursprünglichen Zahl erfolgt.
-
Die Dateneinheit 110 kann entweder Rechts-Verschiebungen
mit Vorzeichen mit Addition oder Rechts-Verschiebungen mit
Vorzeichen mit Subtraktion durchführen. Bei der bevorzugten
Ausführungsform übersetzt der Assembler die Notationen A + B> > (n)
oder A + B> > s(n) in einen Befehl, der den Barrel-Rotator 235, den
Maskenerzeuger 239 und die ALU 230 so steuert, daß eine Rechts-
Verschiebung mit Vorzeichen und Addition durchgeführt wird. Die
Rechts-Verschiebung mit Vorzeichen und Addition läuft in der
gleichen Weise, wie das vorher dargestellte Beispiel der
Rechts-Verschiebung mit Vorzeichen ab, wobei jedoch dieses Mal
die Funktion, die die ALU 230 durchführt, anders aussieht. Bei
der Rechts-Verschiebung mit Vorzeichen und Addition führt die
ALU 230 die Funktion A + (B & C) durch, wenn das Vorzeichenbit der
Eingabe zum Barrel-Rotator 235 "0" ist. Wenn dieses
Vorzeichenbit "1" ist, dann führt die ALU 230 die Funktion A + (B ~C)
durch. Bei der bevorzugten Ausführungsform übersetzt der
Assembler die Notationen A - B> > s(n) oder A - B> > (n) in einen
Befehl, der den Barrel-Rotator 235, den Maskenerzeuger 239 und
die ALU 230 steuert, um eine Rechts-Verschiebung mit Vorzeichen
und Subtraktion durchzuführen. Die Rechts-Verschiebung mit
Vorzeichen und Subtraktion läuft ähnlich dem vorhergehenden
Beispiel einer einfachen Rechts-Verschiebung mit Vorzeichen ab,
mit Ausnahme der Funktion der ALU 230. Wenn das Vorzeichenbit
"1" ist, führt die ALU 230 die Funktion A - (B & C) + 1 durch. Wenn
das Vorzeichenbit "0" ist, führt die ALU 230 die alternative
Funktion A - (B ~C) + 1 durch. Wie bei dem Fall der
Links-Verschiebung und Subtraktion bedingt die "+1"-Operation die Injektion
einer "Eins"-Übertragseingabe in das niedrigstwertige Bit über
den Bit-0-Übertragseingangserzeuger 246.
-
Der Barrel-Rotator 235, der Maskenerzeuger 237 und die ALU
230 können eine Feldextrahierung in einem einzigen Zyklus
durchführen. Eine Feldextrahierung nimmt ein Bitfeld aus einem
Wort heraus, wobei bei einer beliebigen Bitposition gestartet
wird, löst die Bits außerhalb des Feldes ab und richtet das
Feld nach rechts aus. Solch eine Feldextrahierung wird
durchgeführt, indem das Wort um die Anzahl an Bits nach links rotiert
wird, die notwendig sind, um das Feld nach rechts auszurichten,
und indem das Ergebnis der Rotation durch die Anzahl an Bits in
der Größe des Feldes maskiert wird. Anders als bei den Fällen
des Verschiebens sind hier das Rotationsausmaß, das auf der
Bitposition basiert, und die Maskeneingabe, die auf der
Feldgröße basiert, nicht notwendigerweise vom Betrag her
gleich. Der Assembler der bevorzugten Ausführungsform verwendet
die folgende Notation für die Feldextrahierung:
-
Field_Extract = (Value\\(32-starting_bit)) & %!Field size
-
(wobei "Field_Extract" für Feldextrahierung, "Value" für Wert,
"32-starting_bit" für 32-Startbit und "Field size" für
Feldgröße steht)
-
Der "%"-Operator bringt den Maskenerzeuger 237 dazu, eine
Maske mit einer Anzahl an rechts ausgerichteten "1en" zu
bilden, die der Feldgröße entspricht, außer für eine Eingabe
von Null. In diesem Fall sind alle Bits der erzeugten Maske
"1", so daß keine Bits durch die logische UND-Operation
maskiert werden. Diese Rotation und Maskierung kann umlaufende
Bits erzeugen, wenn die Feldgröße größer als die
Startbitposition ist. Diese Parameter spezifizieren einen anormalen Fall,
bei dem sich das spezifizierte Feld über das Ende des
ursprünglichen Wortes hinaus ausdehnt. Die Dateneinheit 110 bietet
keine Hardwareüberprüfung für diesen Fall. Es liegt im
Verantwortungsbereich des Programmierers, dieses Ergebnis
auszuschließen. Das unten dargestellte Beispiel zeigt eine
Feldextrahierung eines 4-Bit-Feldes, das beim Bit 24 beginnt,
welches das achte Bit von links ist, und zwar eine Extrahierung
aus der Zahl Hex "5CFFFFA7". Die Zahl sieht in binärer Form
folgendermaßen aus:
-
0101 1100 1111 1111 1111 1111 1010 0111
-
Die Zahl muß um 32-24 oder 8 Bits rotiert werden, um das
Feld nach rechts auszurichten. Die Ausgabe vom Barrel-Rotator
235 ist folgende:
-
1111 1111 1111 1111 1010 0111 0101 1100
-
Der Maskenerzeuger 237 erzeugt die folgende Maske aufgrund
der 4-Bit-Feldgröße:
-
0000 0000 0000 0000 0000 0000 0000 1111
-
Schließlich bildet die ALU 230 die Boolsche Kombination B & C.
Dieses erzeugt das folgende extrahierte Feld:
-
0000 0000 0000 0000 0000 0000 0000 1100.
-
Das Mflags-Register ("Multiflag-Register" oder "mehrere
Flags aufweisendes Flag-Register") 211 ist bei einer Vielzahl
von Bild- und Graphikverarbeitungsoperationen nützlich. Diese
Operationen fallen in zwei Klassen. Die erste Klasse an Mflags-
Operationen erfordert einen einfachen Durchlauf durch die ALU
230. Eine Zahl wird in das Mflags-Register 211 geladen und
steuert die Operation der ALU 230 über die
Erweiterungsschaltung 238, den Multiplexer Cmux 233 und den C-Port der ALU 230.
Die Farberweiterung ist ein Beispiel dieser einfachen
Durchlaufoperationen. Die zweite Klasse von Mflags-Operationen
erfordert zwei Durchläufe durch die ALU 230. Während eines
ersten Durchlaufs werden bestimmte Bits in dem Mflags-Register
211 basierend auf dem Übertrag von Null-Ergebnissen der ALU 230
gesetzt. Während eines zweiten Durchlaufs steuern die Inhalte
des Mflags-Registers 211 die Operation der ALU 230 über die
Erweiterungsschaltung 238, den Multiplexer Cmux 233 und den C-
Port der ALU 230. Solche zwei Durchläufe aufweisende Mflags-
Operationen sind besonders nützlich, wenn eine Multi-Arithmetik
verwendet wird. Zahlreiche Anpassungs- und Vergleichs-,
Transparenz-, Minimum-, Maximum- und Sättigungs-Operationen
fallen in diese zweite Klasse.
-
Eine Basisgraphikoperation ist die Umwandlung eines Bits
pro Pixel vom Deskriptor in Pixelgrößenwerte. Das wird oft als
Farberweiterung bezeichnet. Um Speicherplatz zu sparen, wird
häufig die Form von Rasterschriften (bit mapped text fonts)
Formen aus einem Bit pro Pixel gespeichert. Diese Formen werden
dann auf die gewünschte Farbe bzw. die gewünschten Farben
"erweitert", wenn sie in den Anzeigespeicher gezogen werden. Im
allgemeinen wählen "1en" in dem Formdeskriptor eine "1"-Farbe
und "0en" eine "0"-Farbe. Eine häufig verwendete Alternative
weist "0en" in dem Formdeskriptor auf, die als Platzeinsparer
oder transparentes Pixel wirken.
-
Das folgende Beispiel wandelt 4 Bits solcher
Formdeskriptordaten in 8-Bit-Pixel um. Bei diesem Beispiel beträgt die
Datengröße der Multiarithmetikoperation 8 Bits. Demgemäß
arbeitet die ALU 230 in vier unabhängigen 8-Bit-Abschnitten.
Die vier Bits der Deskriptordaten "0110" werden in das Mflags-
Register 211 geladen:
-
XXXXXXXX XXXXXXXX XXXXXXXX XXXX0110
-
Die als "X" aufgelisteten Bits sind beliebige Bits, die in
der Farberweiterungsoperation nicht involviert sind. Die
Erweiterungsschaltung 238 erweitert diese vier Bits in dem
Mflags-Register 211 in Blöcke ä 8 Bits mit "1en" und "0en" in
der folgenden Weise:
-
00000000 11111111 11111111 00000000
-
Die Eins-Farbe wird zum A-Port der ALU 230 geführt, wobei
eine Wiederholung für jedes der 4 Pixel in dem 32-Bit-Datenwort
auftritt:
-
11110000 11110000 11110000 11110000
-
Die Null-Farbe wird zum B-Port der ALU 230 geführt, wobei
wiederum eine Wiederholung für jedes der 4 Pixel auftritt:
-
10101010 10101010 10101010 10101010
-
Die ALU 230 bildet die Boolsche Kombination (A & C) (B & ~C), die
das folgende Ergebnis liefert:
-
10101010 11110000 11110000 10101010
-
Die Farberweiterung wird gewöhnlich mit einem PixBlt-
Algorithmus (Pixelblockübertragungsalgorithmus) verwendet. Um
einen vollständigen PixBlt-Algorithmus durchzuführen, müssen
die Daten rotiert und mit vorhergehenden Daten zusammengeführt
werden, um die Bits in den zu erweiternden Daten mit der
Pixelausrichtung der Zielwörter auszurichten. Der Barrel-
Rotator 235 und die ALU 230 können Wörter in dem Mflags-
Register 211 ausrichten. Bei diesem Beispiel wurde angenommen,
daß die Formdeskriptordaten in richtiger Weise ausgerichtet
waren, um das Beispiel einfach zu halten. Es ist darüber hinaus
zu erkennen, daß das Mflags-Register 211 seine eigenen
Rotationsfähigkeiten beim Setzen von Bits und beim Verwenden
von Bits besitzt. So kann ein 32-Bit-Wort in das Mflags-
Register 211 geladen werden, und der oben angegebene Befehl
kann 8 mal wiederholt werden, um 32 erweiterte Pixel zu
erzeugen.
-
Bei der in dem obigen Beispiel dargestellten einfachen
Farberweiterung ist das Ergebnis zwingenderweise eine von zwei
feststehenden Farben. Oft, insbesondere bei überstehenden
Textbuchstaben, deren rechteckige Felder überlappen können, ist
es wünschenswert, die "1en" in dem Formdeskriptor auf die eine
Farbe zu erweitern, jedoch "0en" mit der Funktion als
Platzsparer oder transparente Pixel zu haben. Der Zielpixelwert wird
nicht verändert, wenn eine solche transparente Farbe bewegt
wird. Die Dateneinheit 110 kann die Erweiterung einer
transparenten Farbe durchführen, indem sie einfach ein Register
verwendet, das die ursprünglichen Inhalte des Zieles als die
Nullwerteingabe enthält. Ein Beispiel hierfür ist unten
angeführt. Die ALU 230 führt die gleiche Funktion wie bei dem
vorhergehenden Farberweiterungsbeispiel durch. Der einzige
Unterschied besteht darin, daß das ursprüngliche Ziel eine der
Eingaben zur ALU 230 wird. Die vier Bits an Deskriptordaten
"0110" werden in das Mflags-Register 211 geladen:
-
XXXXXXXX XXXXXXXX XXXXXXXX XXXX0110
-
Die Erweiterungsschaltung 238 erweitert diese vier Bits in
dem Mflags-Register 211 in Blöcke à 8 Bits mit "1en" und "0en"
in der folgenden Weise:
-
00000000 11111111 11111111 00000000
-
Die Eins-Farbe wird zum A-Port der ALU 230 geführt, wobei
eine Wiederholung für jedes der 4 Pixel innerhalb des 32-Bit-
Datenwortes auftritt:
-
11110000 11110000 11110000 11110000
-
Die ursprünglichen Zieldaten werden zum B-Port der ALU 230
geführt, wobei die ursprünglichen Zieldaten 4 Pixel umfassen:
-
11001100 10101010 11101110 11111111
-
Die ALU 230 bildet wiederum die Boolsche Kombination
(A & C) (B & ~C), die das folgende Ergebnis liefert:
-
11001100 11110000 11110000 11111111.
-
Es ist zu erkennen, daß das Ergebnis die "1"-Farbe für in
dem Mflags-Register 211 einer "1" entsprechende Pixel und den
ursprünglichen Pixelwert für in dem Mflags-Register 211 einer
"0" entsprechende Pixel enthält.
-
Die Dateneinheit 110 kann eine 1-Bit-Pro-Pixel-Maske
basierend auf einer exakten Übereinstimmung einer Reihe von 8-
Bit-Werten mit einem feststehenden Vergleichswert erzeugen. Das
ist in dem Beispiel unten dargestellt. Der Vergleichswert wird
viermal in dem 32-Bit-Wort wiederholt. Die ALU 230 subtrahiert
den wiederholten Vergleichswert von einem Datenwort, das vier
der 8-Bit-Werte aufweist. Während dieser Subtraktion wird die
ALU 230 in 4 Abschnitte mit jeweils 8 Bit unterteilt. Die
Nulldetektoren 321, 322, 323 und 324, die in der Fig. 7
dargestellt sind, liefern Daten, die in dem Mflags-Register 211
gespeichert werden sollen. Dieses Beispiel umfaßt zwei Befehle
in einer Zeile, um das Akkumulieren durch Rotieren des Mflags-
Registers 211 zu demonstrieren. Anfangs speichert das Mflags-
Register 211 völlig beliebige Daten:
-
XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
-
Der erste Wert für den Vergleich ist:
-
00000011 00001111 00000001 00000011
-
Der Vergleichswert ist "00000011". Dieser wird viermal in
dem 32-Bit-Wort wiederholt:
-
00000011 00000011 00000011 00000011
-
Die ALU 230 subtrahiert den Vergleichswert von dem ersten
Wert. Die sich ergebende Differenz ist folgende:
-
00000000 00001100 11111110 00000000
-
Das erzeugt die folgenden Nullvergleiche "1001", die in
dem Mflags-Register 211 gespeichert sind. Bei diesem Beispiel
wird das Mflags-Register vor dem Speichern der Nullergebnisse
gelöscht. Daher ist der Inhalt des Mflags-Registers 211
folgender:
-
00000000 00000000 00000000 00001001
-
Der zweite Wert für den Vergleich ist folgender:
-
00000111 11111100 00000011 00000000
-
Das Ergebnis einer zweiten Subtraktion des gleichen
Vergleichswertes ist folgendes:
-
00000100 11111001 00000000 11111101
-
Dieses erzeugt die neuen Nullvergleiche "0010", die in dem
Mflags-Register 211 nach der Rotation von vier Plätzen
gespeichert sind:
-
00000000 00000000 00000000 10010010.
-
Zusätzliche Vergleiche können in der gleichen Art
durchgeführt werden, bis das Mflags-Register 211 32 Bits speichert.
Dann können die Inhalte des Mflags-Registers 211 in ein anderes
Register bewegt werden oder in den Speicher geschrieben werden.
-
Eine Schwellenerkennung bedingt das Vergleichen von
Pixelwerten mit einer festgelegten Schwelle. Die
Schwellenerkennung setzt einen 1-Bit-Wert für jedes Pixel, der darauf
hinweist, daß der Pixelwert größer oder kleiner als die
festgelegte Schwelle war. Je nach der speziellen Anwendung werden die
Fälle der Gleichheit den Fällen des Größerseins oder des
Kleinerseins. zugeordnet. Die Dateneinheit 110 kann so
programmiert werden, daß sie das Vergleichsergebnis in einem einzigen
ALU-Zyklus bildet. Die ALU 230 bildet die Differenz zwischen
dem zu untersuchenden Wert und der festgelegten Schwelle. Die
Übertragsausgaben von jedem Abschnitt der ALU 230 werden in dem
Mflags-Register 211 gespeichert. Wenn von dem zu testenden Wert
I die feste Schwelle T subtrahiert wird, wird nur dann eine
Übertragsausgabe auftreten, wenn I größer oder gleich T ist.
Wie oben erwähnt, führt die ALU 230 eine Subtraktion mittels
einer Zweierkomplementaddition durch, und unter diesen
Umständen deutet eine Übertragsausgabe auf einen nicht
vorhandenen negativen Übertrag hin. Unten ist ein Beispiel dieses
Prozesses für 8-Bit-Werte dargestellt, bei denen der
Schwellenwert "00000111" ist. Es sollen 8-Bit-Werte I untersucht werden,
die folgendermaßen lauten:
-
00001100 00000001 00000110 00000111
-
Der Schwellenwert T in vierfacher Wiederholung innerhalb
des 32-Bit-Wortes sieht folgendermaßen aus:
-
00000111 00000111 00000111 00000111
-
Die Differenz lautet:
-
00000101 11111010 11111111 00000000,
-
was die folgende Übertragsausgabe "1001" erzeugt. Dieses
führt zu einem Zustand in dem Mflags-Register 211, der
folgendermaßen aussieht:
-
XXXXXXXX XXXXXXXX XXXXXXXX XXXX1001.
-
Wie bei der Übereinstimmungserkennung kann dieser einfache
Befehl für neue Daten durch eine Rotation des Mflags-Registers
wiederholt werden, bis 32 Bits gebildet worden sind.
-
Wenn zwei Zahlen ohne Vorzeichen addiert werden, weist
eine Übertragsausgabe darauf hin, daß das Ergebnis größer ist,
als es in der Anzahl an Bits des Ergebnisses ausgedrückt werden
kann. Diese Übertragsausgabe stellt das höchstwertige Bit der
Genauigkeit des Ergebnisses dar. So kann das Sichern der
Übertragsausgaben in dem Mflags-Register 211 dazu verwendet
werden, die Genauigkeit zu erhalten. Diese
Übertragsausgangsbits können für die spätere Addition gesichert werden, um die
Genauigkeit aufrechtzuerhalten. Insbesondere bei der Verwendung
in Verbindung mit einer Multi-Arithmetik kann die Begrenzung
der Genauigkeit auf eine kleinere Anzahl an Bits es
ermöglichen, daß der gleiche Prozeß in einer geringeren Anzahl an ALU-
Zyklen durchgeführt wird.
-
Mflags-Operationen der zweiten Art verwenden sowohl das
Setzen von Bits in dem Mflags-Register 211 als auch das
Verwenden von in dem Mflags-Register 211 gespeicherten Bits, um die
Operation der ALU 230 zu steuern. Eine Multi-Arithmetik kann in
Verbindung mit Erweiterungen des Mflags-Registers 211 vewendet
werden, um mehrere parallele Byte- oder Halbwortoperationen
durchzuführen. Darüber hinaus sind das Setzen von Bits in dem
Mflags-Register 211 und das Erweitern des Mflags-Registers 2I1
auf die ALU 230 inverse Raumumwandlungen, die in einer Vielzahl
unterschiedlicher Arten verwendet werden können.
-
Das Beispiel unten zeigt eine Kombination aus einem 8-Bit-
Multi-Arithmetikbefehl, der von einem Befehl gefolgt wird, der
eine Erweiterung verwendet, um eine Transparenzfunktion
durchzuführen. Die Transparenz wird im allgemeinen verwendet,
wenn rechteckige PixBlts aus Formen gebildet werden, die nicht
rechteckig sind. Die transparenten Pixel werden als
Platzsparerpixel verwendet, die nicht den Zielwert berühren und
transparent sind, so daß das ursprüngliche Ziel durchscheint.
Bei der Transparenz werden nur die Pixel in der Quelle, die
nicht mit dem transparenten Code übereinstimmen, in dem Ziel
ersetzt. Bei einem ersten Befehl wird der Transparentfarbcode
von der Quelle subtrahiert und das Mflags-Register 211 wird,
basierend auf Nullen, gesetzt. Wenn ein bestimmter 8-Bit-Wert
mit dem Transparentcode übereinstimmt, wird eine entsprechende
"1" in dem Mflags-Register 211 gesetzt. Der zweite Befehl
verwendet die Erweiterungsschaltung 238, um das Mflags-Register
211 zu erweitern, um auf einer Pixel-für-Pixel-Basis die
Auswahl der Quelle oder des Zieles zu steuern. Die ALU 230
führt die Funktion (A & C) (B & ~C) durch, um diese Auswahl
durchzuführen. Während diese Boolsche Funktion bitweise
durchgeführt wird, ist das Mflags-Register 211 auf die
Pixelgröße von 8 erweitert worden, und es führt so eine Auswahl
zwischen Pixeln durch. Die Pixelquelle ist folgende:
-
00000011 01110011 00000011 00000001
-
Der Transparentcode TC ist "00000011". Wiederholt man
diesen viermal, um das 32-Bit-Wort zu füllen, erhält man
folgendes:
-
00000011 00000011 00000011 00000011
-
Die Different SRC-TC ist:
-
00000000 01110000 00000000 11111110,
-
was die Nullerkennungsbits "1010" erzeugt. So speichert
das Mflags-Register 211 folgendes:
-
XXXXXXXX XXXXXXXX XXXXXXXX XXXX1010
-
Bei dem zweiten Befehl erweitert die Erweiterungsschaltung
238 das Mflags-Register 211 in der folgenden Weise:
-
11111111 00000000 11111111 00000000
-
Das ursprüngliche Ziel DEST ist folgendes:
-
11110001 00110011 01110111 11111111
-
Die ursprüngliche Quelle SRC bildet eine dritte Eingabe in
die ALU 230. Die ALU 230 bildet dann die Boolsche Kombination
(DEST & @MF) (SRC & ~@MF), so daß sich folgendes ergibt:
-
11110001 00010011 01110111 00000001.
-
Es ist zu erkennen, daß das Ergebnis den Zustand der
Quelle aufweist, wobei die Quelle nicht transparent war, im
anderen Fall weist es den Zustand des Zieles auf. Das ist die
Transparenzfunktion.
-
Die Dateneinheit 110 kann Maximum- und Minimumfunktionen
unter Verwendung des Mflags-Registers 211 und unter Verwendung
von zwei ALU-Zyklen durchführen. Das Ergebnis der
Maximumfunktion ist der größere Wert von zwei Pixelwerten ohne Vorzeichen.
Das Ergebnis der Minimumfunktion ist der kleinere Wert von zwei
Pixelwerten ohne Vorzeichen. Bei diesen Operationen führt der
erste Befehl mehrere Subtraktionen durch, wobei das Mflags-
Register 211 basierend auf Übertragsausgaben gesetzt wird. So
bildet die ALU 230 für das Statussetzen OP1-OP2. Der erste
Befehl setzt nur das Mflags-Register 211 und die sich ergebende
Differenz wird verworfen. Wenn die Maximumfunktion durchgeführt
wird, führt die ALU 230 beim zweiten Befehl die Operation
(OP1 & @MF)~(OP2 & ~@MF)
durch. So wird das Maximum der einzelnen
Pixel gebildet. Wenn der erste Operand OP1
-
00000001 11111110 00000011 00000100
-
ist und der zweite Operand OP2
-
00000011 00000111 00000111 00000011
-
ist, dann ist die Differenz OP1-OP2:
-
11111110 11110111 11111100 00000000.
-
Dieses erzeugt Übertragsausgaben (Nicht-Negativüberträge)
"0101", die das Mflags-Register 211 folgendermaßen setzen:
-
XXXXXXXX XXXXXXXX XXXXXXXX XXXXO101
-
Bei dem zweiten Befehl werden die vier niedrigstwertigen
Bits in dem Mflags-Register 211 über die Erweiterungsschaltung
238 erweitert, was den folgenden Wert ergibt:
-
00000000 11111111 00000000 11111111
-
Die ALU 230 führt die Boolsche Funktion
-
(OP1 & @MF) (OP2 & ~@MF) durch. Das ergibt das folgende Ergebnis:
00000011 11111110 00000111 00000100
-
Es ist zu erkennen, daß jeder 8-Bit-Abschnitt des
Ergebnisses den Zustand des größeren der entsprechenden
Abschnitte von OP1 und OP2 aufweist. Das ist die
Maximumfunktion. Die Minimumfunktion arbeitet ähnlich wie die oben
dargestellte Maximumfunktion, mit der Ausnahme, daß bei dem
zweiten Befehl die ALU 230 die Boolsche Funktion
(OP1 & @MF) (OP2 & -@MF) durchführt. Diese Boolsche Funktion wählt
den geringeren Wert anstelle des größeren Wertes für den 8-Bit-
Abschnitt aus.
-
Die Dateneinheit 110 kann darüber hinaus auch eine
Additionsfunktion mit Sättigung durchführen. Die
Additionsfunktion mit Sättigung arbeitet wie eine normale Addition bis ein
Überlauf auftritt. In diesem Fall klemmt die Additionsfunktion
mit Sättigung das Ergebnis auf lauter "1en". Die
Additionsfunktion mit Sättigung wird gewöhnlich bei der Graphik- und
Bildverarbeitung dazu verwendet, kleine Integer-Ergebnisse
davon abzuhalten, die größte Zahl hin zu einer kleinen Zahl zu
"überlaufen". Das Beispiel unten zeigt die Bildung der
Additionsfunktion mit Sättigung unter Verwendung der Multi-
Arithmetik, die auf vier 8-Bit-Pixel in zwei Befehlen
angewendet wird. Zunächst findet die Addition statt, wobei die
Übertragsausgaben in dem Mflags-Register 211 gespeichert
werden. Eine Übertragsausgabe "1" zeigt einen Überlauf an, d. h.
daß diese Summe sämtlichst auf "1en" gesetzt werden sollte, was
den Sättigungswert darstellt. Dann erweitert die
Erweiterungsschaltung 238 das Mflags-Register 211, um die Auswahl der Summe
oder des gesättigten Wertes zu steuern. Der erste Operand OP1
lautet:
-
00000001 11111001 00000011 00111111
-
Der zweite Operand OP2 lautet:
-
11111111 00001011 00000111 01111111
-
Die ALU 230 bildet die Summe OP1 + OP2 = Ergebnis, was zu
folgendem führt:
-
00000000 00001010 00001010 10111110
-
mit entsprechenden Übertragsausgaben "1100". Diese werden
in dem Mflags-Register 211 in der folgenden Weise gespeichert:
-
XXXXXXXX XXXXXXXX XXXXXXXX XXXX1100
-
Bei dem zweiten Befehl erweitert die Erweiterungsschaltung
238 die vier niedrigstwertigen Bits des Mflags-Registers 211
auf den folgenden Wert:
-
11111111 11111111 00000000 00000000
-
Die ALU 230 führt die Boolsche Funktion ERGEBNIS'@MF
durch, die den folgenden Wert bildet:
-
11111111 11111111 00001010 10111110
-
Es ist zu erkennen, daß der zweite Befehl der Summe
gleicht, wenn die Summe nicht "überläuft", und "11111111"
gleicht, wenn die Summe "überläuft".
-
Die Dateneinheit 110 kann in ähnlicher Weise eine
Subtraktionsfunktion mit Sättigung durchführen. Die
Subtraktionsfunktion mit Sättigung arbeitet wie eine normale Subtraktion bis
ein Unterlauf auftritt. In diesem Fall klemmt die
Subtraktionsfunktion mit Sättigung das Ergebnis auf lauter "0en". Die
Subtraktionsfunktion mit Sättigung kann gewöhnlicherweise auch
bei der Graphik- und Bildverarbeitung verwendet werden. Die
Dateneinheit 110 führt die Subtraktionsfunktion mit Sättigung
in ähnlicher Weise durch wie die oben dargestellte
Additionsfunktion mit Sättigung. Zunächst wird die Subtraktion
durchgeführt, wobei die Übertragsausgänge in dem Mflags-Register 211
gespeichert werden. Eine Übertragsausgabe "0" weist auf einen
negativen Übertrag und damit auf einen Unterlauf hin. In diesem
Fall sollte die Differenz auf lauter "0en" gesetzt werden, was
dem Sättigungswert entspricht. Dann erweitert die
Erweiterungsschaltung 238 das Mflags-Register 211, um die Auswahl der
Differenz oder des Sättigungswertes zu steuern. Während dieses
zweiten Befehls führt die ALU 230 die Boolsche Funktion
ERGEBNIS & @MF durch. Dieses zwingt die Kombination auf "0", wenn
die entsprechende Übertragsausgabe "0" war, wodurch die
Differenz auf lauter "0en" gesättigt wird. Wenn andererseits
die entsprechende Übertragsausgabe "1" war, dann entspricht die
Boolsche Kombination dem ERGEBNIS.
-
Die Fig. 18 zeigt das Format des Befehlswortes für die
digitalen Bild-/Graphikprozessoren 71, 72, 73 und 74. Das
Befehlswort weist 64 Bits auf, die in zwei parallele Abschnitte
unterteilt sind, was in der Fig. 18 dargestellt ist. Die
höchstwertigsten 25 Bits des Befehlswortes (Bits 63-39) geben
die Art der Operation an, die durch die Dateneinheit 110
durchgeführt wird. Die niedrigstwertigsten 39 Bits des
Befehlswortes (Bits 38-0) spezifizieren Datenübertragungen, die
parallel zur Operation der Dateneinheit 110 durchgeführt
werden. Es gibt fünf Formate A, B, C, D und E für die Operation
der Dateneinheit 110. Es gibt 10 Arten von
Datenübertragungsformaten 1 bis 10. Das Befehlswort kann alternativ zum
Spezifizieren von Datenübertragungen einen 32-Bit-Direktwert
spezifizieren. Das Befehlswort wird nicht in zwei oben angegegebene
Abschnitte unterteilt, wenn ein 32-Bit-Direktwert spezifiziert
wird, wobei dieses die Ausnahme von der allgemeinen Regel ist.
Viele Befehle führen Operationen durch, die die Dateneinheit
110 nicht verwenden. Diese Befehle können in Abhängigkeit von
dem Befehl parallele Datenübertragungsoperationen zulassen oder
nicht. Ansonsten sind die für die Dateneinheit 110
spezifizierten Operationen von den für die Datenübertragung spezifizierten
Operationen unabhängig.
-
Die Befehlswortalternativen sind unten zusammengefaßt. Die
Operation der Dateneinheit 110 kann eine einfache ALU-Operation
oder eine einfache Mehrfach-Operation (Multi-Operation) sein,
oder eine von beiden kann parallel durchgeführt werden. Alle
Operationen der Dateneinheit 110 können von Bedingungen,
basierend auf einem Feld in dem Befehlswort, abhängig gemacht
werden. Die parallelen Datenübertragungen werden auf dem
lokalen Port 141 und dem globalen Port 145 der Datenporteinheit
140 zu und/oder von dem Speicher durchgeführt. Zwei
Datenübertragungsoperationen werden unabhängig voneinander in dem
Befehlswort angegeben. Zwölf Adressiermodi werden für jeden
Speicherzugriff unterstützt, mit einer Auswahl des Register-
oder Offset-Indexes. Eine interne Übertragung zwischen
Registern in der Dateneinheit 110 kann in dem Befehlswort
anstelle eines Speicherzugriffs über den globalen Port 145
spezifiziert werden. Wenn eine Operation der Dateneinheit 110
ein nicht zur Dateneinheit gehörendes Register als Quelle oder
Ziel verwendet, dann spezifiziert ein Teil des
Paralleldatenübertragungsabschnitts des Befehlswortes zusätzliche
Registerinformationen, und der zum globalen Port gehörende
Quelldatenbus Gsrc 105 und der zum globalen Port gehörende Zieldatenbus
Gdst 107 übertragen die Daten zur Dateneinheit 110 und von der
Dateneinheit 110.
-
Ein Teil des Befehlswortes, das normalerweise die zum
lokalen Bus gehörende Datenübertragung spezifiziert, besitzt
eine alternative Verwendungsweise. Diese alternative
Verwendungsweise ermöglicht Bedingungsoperationen der Dateneinheit
110 und/oder globalen Speicherzugriff oder eine Register-zu-
Register-Bewegung. Eine begrenzte Bedingungsquellenauswahl wird
bei der Operation der Dateneinheit 110 unterstützt. Das
Ergebnis der Dateneinheit 110 kann in Abhängigkeit von
Bedingungen gesichert oder verworfen werden, wobei in vorteilhafter
Weise in Abhängigkeit von einer Bedingung eine Operation
durchgeführt wird, ohne daß eine Verzweigung erforderlich ist.
Die Aktualisierung jedes einzelnen Bits des Statusregisters
kann auch in Abhängigkeit von Bedingungen ausgewählt werden.
Bedingte Speichervorgänge im Speicher wählen zwischen zwei
Registern aus. Bedingte Ladevorgänge aus dem Speicher wählen
zwischen dem Laden oder Verwerfen der Daten aus. Bedingte
Register-zu-Register-Bewegungen schreiben entweder in das Ziel
oder verwerfen die Daten.
-
Es folgen eine Beschreibung der Arten der Befehlswörter
der Fig. 18 und eine Erklärung oder ein Glossar verschiedener
Bits und Felder der fünf Dateneinheitsoperationsformate. Die
Bits und Felder definieren nicht nur die Befehlswörter, sondern
darüber hinaus die Schaltungsanordnung, die die Befehlswörter
entsprechend den spezifizierten Logikbeziehungen decodiert.
Diese Schaltungsanordnung reagiert auf ein bestimmtes Bit oder
Feld oder eine logische Kombination der Befehlswörter, um die
spezielle dargestellte Operation oder die speziellen
dargestellten Operationen durchzuführen. Demgemäß definiert auf
diesem Gebiet die Spezifikation der Bits, Felder, Formate und
Operationen wichtige und vorteilhafte Merkmale der bevorzugten
Ausführungsform und spezifiziert die entsprechende
Logikschal
tungsanordnung, um die Befehlswörter zu decodieren oder zu
implementieren. Diese Schaltungsanordnung läßt sich aus dieser
Beschreibung durch den Fachmann in einfacher Weise in einer
programmierbaren Logikanordnung (PLA) oder in anderen
Schaltungsformen implementieren, die bisher bekannt waren oder
hierin entwickelt wurden. Der Beschreibung des
Befehlswortformats folgt eine Beschreibung der zulässigen
Operationskombinationen.
-
Das Format A der Dateneinheit läßt sich daran erkennen,
daß das Bit 63 = "1" und das Bit 44 = "0" ist. Das Format A der
Dateneinheit spezifiziert eine ALU-Grundarithmetikoperation mit
einem 5-Bit-Direktfeld. Das "Klassen"-Feld (Bits 62-60)
bestimmt die Datenführung innerhalb der Dateneinheit 110 in
bezug auf die ALU 230. Die Tabelle 18 zeigt die Definition der
Datenführungen entsprechend dem "Klassen"-Feld der Formate A, B
und C der Dateneinheit.
Tabelle 18
-
In der Tabelle 18 ist "Eingabe A" die durch den Amux 232
für den A-Eingabebus 241 ausgewählte Quelle. Die Quelle
"src2/im" ist entweder der 5-Bit-Direktwert des "immed"-Feldes
(Bits 43-49) in dem Format A der Dateneinheit, das
Datenregister 200, gekennzeichnet durch das "src2"-Feld (Bits 41-39) in
dem Format B der Dateneinheit oder der 32-Bit-Direktwert des
"32-Bit-immediate"-Feldes (Bits 31-0) in dem Format C der
Dateneinheit. Die Quelle "dstc" ist ein Begleitdatenregister
200 zum Ziel des Ergebnisses der ALU 230. Die oberen vier Bits
des Begleitdatenregisters 200 entsprechen "0110", wodurch eines
der Datenregister 200 spezifiziert wird, und die unteren drei
Bits sind durch das "dst"-Feld (Bits 50-48) spezifiziert. Es
werden Begleitregister mit Übertragungsformaten 6 und 10
verwendet, die ein "Adstbnk"-Feld (Bits 21-18) verwenden, um
die Registerbank des Zieles zu spezifizieren, und ein
"As1bank"-Feld (Bits 9-6) verwenden, um die Registerbank der
Eingabe B zu spezifizieren. Das ist als "Fernziel" (long
distance destination) bekannt, da das Ziel keines der
Datenregister 200 ist. So können eine Quelle und das Ziel
unterschiedliche Registerbänke mit den gleichen Registernummern
aufweisen. Die Tabelle 19 zeigt die Begleitregister zu
verschiedenen anderen digitalen
Bild-/Graphikprozessorregistern, basierend auf der in dem "Adstbnk"-Feld
spezifizierten Registerbank. Es ist anzumerken, daß bei
beliebigen anderen Übertragungsformaten dieses Quellregister
das Datenregister 200 ist, wobei die Registernummer durch das
"dst"-Feld spezifiziert wird.
Tabelle 19
-
In der Tabelle 19 weist "--" auf ein reserviertes Register
hin. Es ist zu erkennen, daß die Tabelle 19 die Registerbänke
"0110", "1000", "1001", "1010" oder "1011" nicht auflistet.
-
Sämtliche Register in diesen Bänken sind entweder reserviert
oder Emulationsfunktionen zugeordnet und würden normalerweise
nicht als Fernziele verwendet werden.
-
In der Tabelle 18 ist "Eingabe B" die Quelle für den
Barrel-Rotator 235, die den B-Eingabebus 242 versorgt. Die mit
"src1" bezeichnete "Eingabe B"-Quelle ist das Datenregister
200, was durch das "src1"-Feld (Bit 47-45) in den Formaten A
und B der Dateneinheit oder durch die Registerbank des
"s1bank"-Feldes (Bits 38-36) und die Registernummer des "src1"-
Feldes (Bits 48-45), wobei es sich um irgendeines der 64
unteren adressierbaren Register in der Dateneinheit 110 handeln
kann, in dem Datenformat C. Die "Hex 1"-Quelle für die "Eingabe
B" ist die 32-Bit-Konstante, die "1" entspricht, von dem Puffer
236. In der Tabelle 18 ist "Eingabe C" die durch den Cmux 233
für den C-Eingabebus 243 ausgewählte Quelle.
-
Die "Eingabe C"-Quelle "@MF" entspricht einem Bit oder
mehreren Bits aus dem Multiflag-Register 211, wie es durch die
Erweiterungsschaltung 238 entsprechend dem "Msize"-Feld (Bits
5-3) des Statusregisters 210 erweitert worden ist. Für die
Definition des "Msize"-Feldes des Statusregisters 210 betrachte
man die Tabelle z. Die "src2/im"-Quelle wurde vorher in
Verbindung mit der "Eingabe A"-Quelle beschrieben. Die "Mask"-Quelle
ist die Ausgabe des Maskenerzeugers 239. In der Tabelle 18 ist
"maskgen" die durch Mmux 234 für den Maskenerzeuger 239
ausgewählte Quelle. Diese Quelle kann "src2/im" sein, wie
vorher beschrieben, oder "D0(4-0)", welches das Standard-
Barrel-Rotationsausmaß des "DBR"-Feldes (Bits 4-0) des
Datenregisters D0 ist. In der Tabelle 18 ist "Rotation" die von dem
Smux 231 für die Steuerung des Rotationsausmaßes des Barrel-
Rotators 235 ausgewählte Quelle. Diese Quelle kann "0" sein,
was keine Rotation ergibt, "D0(4-0)", welches das Standard-
Barrel-Rotationsausmaß des "DBR"-Feldes (Bits 4-0) des
Datenregisters D0 ist, oder "src2/im", was es vorher beschrieben
wurde.
-
Das "ari"-Bit (Bit 59) bestimmt, ob die ALU 230 der
Dateneinheit 110 für eine Arithmetikoperation oder für eine
Boolsche Logikoperation verwendet wird. Wenn das "ari"-Bit "1"
ist, dann tritt eine Arithmetikoperation auf, wenn dieses Bit
"0" ist, dann tritt eine Boolsche Logikoperation auf.
-
Das Format A der Dateneinheit ermöglicht eine
Befehlswortspezifikation der Operation der ALU 230. Das "8-Bit-ALU-Code"-
Feld (Bits 58-51) bestimmt die durch die ALU 230 durchgeführte
Operation. Dieses Feld zeigt eine Arithmetikoperation an, wenn
das "ari"-Bit "1" ist. Wenn dieses der Fall ist, dann bestimmen
die "8-Bit-ALU-Code"-Bits 57, 55, 53 und 51 die
Arithmetikoperation entsprechend der Tabelle 14, so wie sie durch das
"FMOD"-Feld, das aus den "8-Bit-ALU-Code-"-Bits 58, 56, 54 und
52 besteht, entsprechend der Tabelle 6 modifiziert wird. Wenn
das "ari"-Bit "0" ist, dann ist dieses eine Boolsche Operation
und das "8-Bit-ALU-Code"-Feld führt zur Umsetzung in die
Funktionssignale F7-F0 entsprechend der Tabelle 13. Die
Einzelheiten dieser Codierungen wurden oben in Verbindung mit der
Beschreibung der Dateneinheit 110 erläutert.
-
Das Format A der Dateneinheit bestimmt zwei Quellen und
ein Ziel für die ALU 230. Das "dst"-Feld (Bits 50-48) bestimmt
ein Register als Ziel für die ALU 230. Das "dst"-Feld kann sich
auf eines der Datenregister 200 anhand der Registernummer
beziehen, oder die Registernummer des "dst"-Feldes kann in
Verbindung mit einer Registerbank verwendet werden, um ein
Fernregister (long distance register) in Abhängigkeit von dem
Übertragungsformat zu spezifizieren. Das "src1"-Feld (Bits 47-
45) bestimmt ein Register als erste Quelle für die ALU 230.
Dieses kann eines der Datenregister 200 sein oder es kann in
Verbindung mit einer Registerbank verwendet werden, um ein
Fernregister in Abhängigkeit von dem Übertragungsformat zu
spezifizieren. Das "immed"-Feld (Bits 43-39) bestimmt einen 5-
Bit-Direktwert, der als die zweite Quelle für die ALU 230
verwendet wird. Während der Verwendung wird dieser 5-Bit-
Direktwert um Nullen auf 32 Bits erweitert. Die Verwendung von
Registerbänken wird unten in Verbindung mit der Beschreibung
der Übertragungsformate näher erläutert werden.
-
Die Speicherung des Ergebnisses in dem Zielregister tritt
nur dann auf, wenn die in dem "cond."-Feld vermerkte Bedingung
wahr ist. Das "cond."-Feld (Bits 35-32) bestimmt die
Bedingungen für eine Bedingungsoperation. Es ist zu erkennen, daß
dieses "cond."-Feld in den Teil des Befehlsworts fällt, der im
allgemeinen für das Übertragungsformat verwendet wird. Die
Übertragungsformate 7, 8, 9 und 10 umfassen dieses Feld. So
tritt das in Abhängigkeit von einer Bedingung erfolgende
Speichern des Ergebnisses der ALU 230 nur dann auf, wenn diese
Übertragungsformate verwendet werden. Bei der bevorzugten
Ausführungsform ist das "cond."-Feld so decodiert wie es unten
in der Tabelle 20 dargestellt ist.
Tabelle 20
-
Die Bedingungen lassen sich unter Bezug auf das Statusregister
210 erkennen. Wie vorher beschrieben speichert das
Statusregister 220 mehrere Bits, die eine Beziehung zur Bedingung der
Ausgabe der ALU 230 aufweisen. Diese Bedingungen umfassen einen
Negativwert, einen Übertrag, einen Überlauf und einen Nullwert.
-
Die Bedingungsoperation der ALU 230 in bezug auf das
Statusregister 210 wurde oben in Verbindung mit der Beschreibung der
Dateneinheit 110 im einzelnen erläutert.
-
Das Format B der Dateneinheit wird dadurch erkannt, daß
das Bit 63 = "1" und das Bit 44 = "0" ist. Das Format B der
Dateneinheit spezifiziert eine ALU-Basisoperation, wobei ein
Register für die zweite Quelle der ALU 230 spezifiziert wird.
Das "Klassen"-Feld bestimmt die Datenführung innerhalb der
Dateneinheit 110, wie es vorher in Verbindung mit der Tabelle
18 beschrieben wurde. Das "ari"-Bit bestimmt, ob die ALU 230
der Dateneinheit 110 für eine Arithmetikoperation oder für eine
Boolsche Logikoperation verwendet wird. Das "8-Bit-ALU-Code"-
Feld bestimmt in der oben beschriebenen Weise die durch die ALU
230 durchgeführte Operation. Das "src2"-Feld (Bits 41-39)
bestimmt eines der Datenregister 200 als zweite Quelle für die
ALU 230. In dem Format B der Dateneinheit ist die zweite Quelle
für die ALU 230 das in dem "src2"-Feld angegebene
Datenregister. Einige Datenübertragungsformate erlauben die Bestimmung
von Registerbänken für die erste Quelle und das Ziel der ALU
230. Ansonsten stimmt das Format B der Dateneinheit mit dem
Format A der Dateneinheit überein.
-
Das Format C der Dateneinheit wird dadurch erkannt, daß
das Bit 63 = "1", das Bit 44 = "1" und das Bit 43 = "1" ist.
Das Format C der Dateneinheit spezifiziert eine
ALU-Grundoperation mit einem 32-Bit-Direktfeld. Das "Klassen"-Feld bestimmt
die Datenführung innerhalb der Dateneinheit 110, wie es vorher
in Verbindung mit der Tabelle 18 beschrieben wurde. Das "ari"-
Bit bestimmt, ob die ALU 230 der Dateneinheit 110 für eine
Arithmetikoperation oder für eine Boolsche Logikoperation
verwendet wird. Das "8-Bit-ALU-Code"-Feld bestimmt die durch
die ALU 230 durchgeführte Operation, wie es oben beschrieben
wurde. Die erste Quelle ist das durch das "src1"-Feld bestimmte
Datenregister. Die zweite Quelle ist der 32-Bit-Direktwert des
"32-Bit-imm."-Feldes (Bits 31-0). Dieses Dateneinheitsformat
läßt keinen Raum zum Spezifizieren von parallelen
Datenübertragungen, so daß solche nicht zugelassen sind. Das "dstbank"-Feld
(Bits 42-39) bestimmt eine Registerbank innerhalb der
Dateneinheit 110. Das "dstbank"-Feld wird zusammen mit dem "dst"-Feld
(Bits 50-48) verwendet, um irgendeines der 64 Register der
Dateneinheit 110 als Ziel für die ALU 230 zu bestimmen. Das
"slbnk"-Feld (Bits 38-36) bestimmt eine Registerbank in der
Dateneinheit 110. Diese Bestimmung ist auf die untere Hälfte
der Register der Dateneinheit 110 begrenzt und wird mit dem
"src1" -Feld verwendet, um ein beliebiges der 64 unteren
Halbregister in der Dateneinheit 110 als die erste Quelle für
die ALU 230 zu bestimmen. Die Operationen können, basierend auf
dem "cond."-Feld (Bits 35-32), in einer unten im einzelnen
erläuterten Weise von Bedingungen abhängig gemacht werden.
-
Das Format D der Dateneinheit sieht so aus, daß das Bit 63
= "1" ist, das Bit 44 - "0" ist, das "Klassen"-Feld "000" ist,
das Bit 59 = "1" ist (das normalerweise die Arithmetikoperation
im Gegensatz zur Boolschen Logikoperation auswählt) und die
Bits 57, 55, 53 und 51 des 8-Bit-ALU-Codes" alle "0" sind. Das
Format D der Dateneinheit spezifiziert Nicht-ALU-Operationen.
Das "Operations"-Feld (Bits 43-39) bestimmt eine Nicht-ALU-
Operation. Bei der bevorzugten Ausführungsform wird dieses
"Operations"-Feld wie unten in der Tabelle 21 dargestellt
decodiert.
Tabelle 21
-
Operationsfeld
-
4 4 4 4 3 Nicht-ALU-Operation
-
3 2 1 0 9
-
0 0 0 0 0 keine Operation
-
0 0 0 0 1 Leerlauf
-
0 0 0 1 0 aktiviere globale Interrupts
-
0 0 0 1 1 deaktiviere globale Interrupts
-
0 0 1 0 0 verriegele die Synchronisation
des Befehlsabrufs
-
0 0 1 0 1 entriegele die Synchronisation
des Befehlsabrufs
-
0 0 1 1 0 reserviert
-
0 0 1 1 1 rotiere die D-Register um
1 nach rechts
-
0 1 0 0 0 Null
-
0 1 0 0 1 halte die Befehlsausführungen an
-
0 1 0 1 0 reserviert
-
0 1 0 1 1 reserviert
-
0 1 1 0 0 gehe zum Emulator-Interrupt
-
0 1 1 0 1 Ausgabe Emulator-Interrupt 1
-
0 1 1 1 0 Ausgabe Emulator-Interrupt 2
-
0 1 1 1 1 reserviert
-
1 X X X X reserviert
-
Die Nicht-ALU-Befehle "0", "halte die Befehlsausführung an",
"gehe zum Emulator-Interrupt", "Ausgabe des Emulator-Interrupts
1" und "Ausgabe des Emulator-Interrupts 2" verhindern parallele
Datenübertragungen. Irgendwelche in dem Befehlswort
spezifizierten parallelen Datenübertragungen werden ignoriert. Die
anderen Nicht-ALU-Befehle erlauben parallele
Datenübertragungen.
-
Das Format E der Dateneinheit wird erkannt, wenn die Bits
63-61 "011" sind. Das Format E der Dateneinheit spezifiziert
parallele ALU- und Multiplikationsoperationen. Diese
Operationen werden als "Operationen mit sechs Operanden" bezeichnet, da
in diesem Format sechs Operanden spezifiziert werden. Bei der
bevorzugten Ausführungsform spezifiziert das "Operations"-Feld
(Bits 60-57) die in der Tabelle 22 dargestellten Operationen.
Das Symbol " " zeigt an, daß die aufgelisteten Operationen in
der Dateneinheit 110 parallel ablaufen. Es ist zu erkennen, daß
nur 11 von 16 möglichen Operationen definiert sind.
Tabelle 22
-
Operationsfeldbits
-
6 5 5 5 Operationen mit 6 Operanden
-
0 9 8 7
-
0 0 0 0 MPYS ADD
-
0 0 0 1 MPYS SUB
-
0 0 1 0 MPYS EALUT
-
0 0 1 1 MPYS EALUF
-
0 1 0 0 MPYU ADD
-
0 1 0 1 MPYU SUB
-
0 1 1 0 MPYU EALUT
-
0 1 1 1 MPYU EALUF
-
1 0 0 0 EALU ROTATION
-
1 0 0 1 EALU % ROTATION
-
1 0 1 0 DIVI
-
1 0 1 1 reserviert
-
1 1 0 0 reserviert
-
1 1 01 reserviert
-
1 1 1 0 reserviert
-
1 1 1 1 reserviert
Tabelle 22
-
Die Mnemonic-Symbole für diese Operationen wurden oben
definiert. Zur Erinnerung: MPYS ADD bezeichnet eine
parallele Multiplikation mit Vorzeichen mit Addition;
MPYS SUB bezeichnet eine parallele Multiplikation mit
Vorzeichen mit Subtraktion; MPYS EALUT bezeichnet eine
parallele Multiplikation mit Vorzeichen und "erweiterte
arithmetisch-logische Einheit-Wahr"-Operation; MPYS EALUF
bezeichnet eine parallele Multiplikation mit Vorzeichen mit
einer "erweiterte arithmetisch-logische
Einheit-Falsch"-Operation"; MPYU ADD bezeichnet eine parallele Multiplikation
ohne Vorzeichen mit Addition; MPYU SUB bezeichnet eine
parallele Multiplikation ohne Vorzeichen mit Subtraktion;
MPYU EALUT bezeichnet eine parallele Multiplikation ohne
Vorzeichen mit einer "erweiterte arithmetisch-logische Einheit-
Wahr"-Operation; MPYU EALUF bezeichnet eine parallele
Multiplikation ohne Vorzeichen mit "erweiterte
arithmethisch
logische Einheit-Falsch"-Operation; EALU ROTATION bezeichnet
eine "erweiterte arithmetisch-logische Einheit"-Operation, bei
der die Ausgabe des Barrel-Rotators 235 getrennt gespeichert
wird; EALU% ROTATION bezeichnet eine "erweiterte
arithmetisch-logische Einheit"-Operation, die eine durch den
Maskenerzeuger 239 erzeugte Maske verwendet, wobei die Ausgabe des
Barrel-Rotators 235 getrennt gespeichert wird; und DIVI
bezeichnet eine Divisionsiterationsoperation, die bei der
Division verwendet wird. Die ALU-Operation in einem
"MPYx EALUT"-Befehl wird durch das "EALU"-Feld (Bits 19-26)
des Datenregisters D0 ausgewählt, wobei das "A"-Bit (Bit 27)
entweder eine Arithmetikoperation oder eine Logikoperation
auswählt, je nach der Modifikation durch das "FMOD"-Feld (Bits
31-28). Die Codierung dieser Felder ist oben beschrieben
worden. Die ALU-Operation in einem "MPYx EALUF"-Befehl wird
ähnlich ausgewählt, mit der Ausnahme, daß der Sinn der "EALU"-
Feldbits invertiert ist. Die ALU-Operationen für die EALU- und
EALU%-Befehle werden in entsprechender Weise ausgewählt. Diese
Operationen verwenden einen Teil des Datenregisters D0 der
Dateneinheit 110, um die ALU-Operation zu spezifizieren. Das
Datenregister D0 wird im voraus mit dem gewünschten
"erweiterete ALU"-Operationscode geladen. Die DIVI-Operation
wird unten im einzelnen näher beschrieben. Ein beliebiges
Datenübertragungsformat kann parallel zur Operation der
Dateneinheit 110 spezifiziert werden.
-
In dem Format E der Dateneinheit werden sechs Operanden
spezifiziert. Diese sind vier Quellen und zwei Ziele. Das
"src3"-Feld (Bit 56-54) gibt eines der Datenregister 200 als
die dritte Quelle an. Dieses ist die erste Eingabe für den
Multiplizierer 220, wenn eine Multiplikationsoperation
spezifiziert wurde, ansonsten ist dieses das Barrel-Rotationsausmaß
des Barrel-Rotators 235. Das "dst2"-Feld (Bits 53-51) bestimmt
eines der Datenregister 200 als das zweite Ziel. Wenn der
Befehl eine Multiplikationsoperation spezifiziert, dann ist
"dst2" das Ziel für den Multiplizierer 220. Ansonsten
spezifiziert "dst2" das Ziel für die Ausgabe des Barrel-Rotators 235.
Das "dst1"-Feld (Bits 50-48) bestimmt eines der Datenregister
200 als das Ziel für die ALU 230. Das "src1"-Feld (Bits 47-45)
bestimmt ein Register als die erste Eingabe für die ALU 230.
Wenn dieser Befehl ein Übertragungsformat 6 oder 10 umfaßt, was
ein "As1bank"Feld (Bits 9-6) umfaßt, dann kann diese
Registerquelle ein beliebiges Register innerhalb der Dateneinheit 110
sein, wobei das "As1bank"-Feld die Registerbank bezeichnet und
das "src1"-Feld die Registernummer bezeichnet. In einem solchen
Fall können diese Daten nicht durch den Barrel-Rotator 235
rotiert werden. Das wird als eine Fern-ALU-Operation (long
distance ALU-Operation) bezeichnet. Für andere
Übertragungsformate spezifiziert das "src1"-Feld eines der Datenregister
200 durch die Registernummer. Die Übertragungsformate 7, 8, 9
und 10 ermöglichen es, daß die Registerquelle in bedingter
Weise aus einem Paar an Datenregistern 200, basierend auf dem
"N"-Bit des Statusregisters 210, ausgewählt wird. Wenn das "N"-
Bit (Bit 31) des Statusregisters 211 "1" ist, dann wird das
bezeichnete Datenregister als die erste Quelle für die ALU 230
ausgewählt. Wenn das "N"-Bit "0" ist, dann wird das um eins
kleinere Datenregister ausgewählt. Wenn diese Option verwendet
wird, muß die Registernummer des "src"-Feldes ungerade sein.
Das "src3"-Feld (Bit 56-54) bestimmt eines der Datenregister
200 als die zweite Eingabe für den Multiplizierer 220. Das
"src4"-Feld (Bits 44-42) bestimmt eines der Datenregister 200
als die zweite Eingabe für den Multiplizierer 220.
-
Die Tabelle 23 zeigt die Datenpfadverbindungen für einige der
in dem Format E der Dateneinheit unterstützten Operationen. Die
Eingabe C ist das zum C-Eingabebus 243 gelieferte Signal,
ausgewählt durch den Multiplexer Cmux 233. "Maskgen" ist das
dem Maskenerzeuger 239 zugeführte Signal, ausgewählt durch den
Multiplexer Mmux 234. Die "Rotation" ist das zum Steuereingang
des Barrel-Rotators 235 zugeführte Signal, ausgewählt durch den
Multiplexer Smux 231. Produkt-Links-Verschiebung ist das zum
Steuereingang des Produkt-Linksverschiebers 224 zugeführte
Steuersignal, ausgewählt durch den
Multiplikaitionsverschiebungsmultiplexer Msmux 225. Der spezielle Fall für die DIVI-
Operation wird unten später beschrieben.
Tabelle 23
-
Für alle sechs Operanden aufweisenden Befehle, die in der
Tabelle 23 aufgelistet sind, ist die erste Eingabe in den
Multiplizierer 220 auf dem Bus 201 das Register, das durch das
"src3"-Feld (Bits 56-54) bezeichnet wird, die zweite Eingabe in
den Multiplizierer 220 auf dem Bus 202 ist das Register, das
durch das "src4"-Feld (Bits 44-42) bezeichnet wird, die Eingabe
in den Barrel-Rotator 235 ist das Register, das durch das
"src1"-Feld (Bits 41-39) bezeichnet wird, und die Eingabe in
den A-Eingabebus 241 ist das Register, das durch das "src2"-
Feld (Bits 47-45) bezeichnet wird. Es ist darüber hinaus zu
erkennen, daß der Multiplizierer 220 bei den EALU- und EALU%-
Befehlen nicht verwendet wird, statt dessen werden die
Ergebnisse des Barrel-Rotators 235 in dem Register gespeichert, das
durch das "dst2"-Feld (Bits 53-51) bezeichnet wird, und zwar
über den Multiplexer Bmux 227.
-
Die DIVI-Operation verwendet die ALU 230 und verwendet
nicht den Multiplizierer 220. Die DIVI-Operation kann bei einer
inneren Schleife für eine Division ohne Vorzeichen verwendet
werden. Die Division mit Vorzeichen kann mit zusätzlichen
Vorbereitungs- und Säuberungs-Befehlen (set-up and clean-up
instructions) implementiert werden, um das Vorzeichen des
Quotienten zu handhaben. Es ist auf diesem Fachgebiet bekannt,
daß die Division die schwierigste der vier arithmetischen
Grundoperationen (Addition, Subtraktion, Multiplikation und
Division) ist, was die Implementierung in Computern angeht.
-
Der DIVI-Befehl verwendet die Hardware der Dateneinheit
110, um ein Zeichen des gewünschten Quotienten pro
Ausführungspipelinestufe zu berechnen, wenn er in geeigneter Weise
vorbereitet wurde. Es ist zu erkennen, daß der
DIVI-Dateneinheitsbefehl nur bei einem Datenübertragungsformat verwendet
werden kann, das bedingte Datenübertragungen unterstützt (und
daher bedingte Dateneinheitsoperationen). Diese
Datenübertragungsformate 7, 8, 9 und 10 werden unten genau beschrieben.
Der Multiplexer Amux 232 wählt Daten von dem Datenregister
200b, gekennzeichnet durch das "src2"-Feld auf dem ersten ALU-
Eingabebus 205, für die Zuführung zur ALU 230 über den A-
Eingabebus 241. Der Multiplexer Imux 222 wählt die Konstante
Hex "1" für die Zuführung zum zweiten Eingabebus 202 des
Multiplizierers, und der Multiplexer Smux 231 wählt dieses Hex
"1" auf dem zweiten Eingabebus 202 des Multiplizierers für die
Eingabe in den Rotationsbus 244. Daten von einem der
Datenregister 200, bestimmt durch das "src1"-Feld, versorgen den Barrel-
Rotator 235. Dieses Register kann nur eines der Datenregister
D7, D5, D3 oder D1 sein, und es handelt sich um eine
Bedingungsregisterquelle, die von dem Multiplexer 215 basierend auf
dem "N"-Bit (Bit 31) des Statusregisters 210 ausgewählt wird.
Wenn das "N"-Bit des Statusregisters 210 "0" ist, dann wird das
Datenregister 200a, gekennzeichnet durch das "src1"-Feld,
ausgewählt. Diese Registerauswahl verwendet vorzugsweise die
gleiche Hardware, die zur Bereitstellung einer
Bedingungsregisterauswahl bei anderen Befehlen, die die ALU 230 verwenden,
verwendet wird, mit der Ausnahme, daß hier ein
entgegengesetzter Sinn vorliegt. Diese Registerauswahl kann über einen
Multiplexer oder durch Substituieren des Inverswertes des "N"-Bits
des Statusregisters 210 für das niedrigstwertige Bit des
Registerfeldes während der Spezifikation des Registers erzielt
werden. Wenn das "N"-Bit des Statusregisters 210 "1" ist, dann
wird das Datenregister 200c, das um einen Platz hinter dem
durch das "src1"-Feld gekennzeichneten Register liegt,
ausgewählt. Der Barrel-Rotator 235 rotiert diese Daten um ein Bit
nach links und liefert das Ergebnis zur ALU 230 über den B-
Eingabebus 241. Die Ausgabe des Barrel-Rotators 235 wird auch
in dem Datenregister 200a über den Multiplexer Bmux 227
gespeichert, wobei das Bit 31 des Multiflag-Registers 211 (vor der
Rotation) für das Bit 0 der Asugabe des Barrel-Rotators 235
ersetzt wird. Dieses Zielregister ist das Register, das durch
das "src1"-Feld bestimmt wird. Der Multiplexer Mmux 234 wählt
die Konstante Hex "1" auf dem zweiten Multiplizierereingabebus
202 für die Zuführung zum Maskenerzeuger 239 aus. Der
Multiplexer Cmux 233 wählt die Ausgabe von dem Maskenerzeuger 239 für
die Zuführung zur ALU 230 über den C-Eingabebus 243. Der Bit-0-
Übertragseingangserzeuger 246 liefert das Bit 31 des Multiflag-
Registers 211 (vor der Rotation) zur Übertragseingangseingabe
der ALU 230.
-
Während des DIVI-Befehls empfängt die ALU 230 einen
Funktionscode F7-F0 von Hex "A6". Das bringt die ALU 230 dazu,
die Eingaben auf dem A-Eingabebus 241 und dem B-Eingabebus 242
zu addieren und das Ergebnis mit einer Nullerweiterung nach
links zu verschieben. Diese Linksverschiebung erfolgt um ein
Bit aufgrund der von dem Maskenerzeuger 239 gelieferten Maske
in Reaktion auf die Hex "1"-Eingabe. Diese Funktion wird
mnemonisch als A + B < 0 < bezeichnet. Das Ergebnis der ALU 230 wird
in dem Datenregister 200c, das durch das "dst1"-Feld bezeichnet
wird, gespeichert. Das Multiflag-Register 211 wird um ein Bit
rotiert, und das niedrigstwertige Bit (Bit 0) des Multiflag-
Registers 211 wird entsprechend dem von der ALU 230 erzeugten
Ergebnis gesetzt. Dasselbe Bit wird in dem "N"-Bit (Bit 31) des
Statusregisters 210 gespeichert. Das ODER-Gatter 247 bildet
dieses Bit, das in dem Multiflag-Register 211 und dem
Statusregister 210 gespeichert wird, aus cout der ALU 230, das einer
ODER-Verknüpfung mit dem Bit 31 der Eingabe zum Barrel-Rotator
235 unterzogen wird. Es ist zu erkennen, daß die anderen Bits
des Statusregisters 210ºC", "V" und "Z" in normaler Weise
gesetzt werden. Wenn die Daten in dem Datenregister 200a "X"
sind, die Daten in dem Datenregister 200b "Y" sind und die
Daten in dem Datenregister 200c "Z" sind, dann bildet der DIVI-
Befehl die Beziehung X = X< < 1 und Z =
X[n]Z + Y. Das mnemonische
Zeichen "n" deutet auf eine Registerquellenselektion basierend
auf dem "N"-Statusregisterbit hin.
-
Der DIVI-Befehl wirkt so, daß Interationen an einem
Bedingungssubtraktions- und Schiebedivisionsalgorithmus durchgeführt
werden. Dieser Befehl kann für einen 32-Bit-Zähler, geteilt
durch einen 16-Bit-Nenner, verwendet werden, um einen 16-Bit-
Quotienten und einen 16-Bit-Rest zu erzeugen, oder für einen
64-Bit-Zähler, geteilt durch einen 32-Bit-Nenner, um einen 32-
Bit-Quotienten und einen 32-Bit-Rest zu erzeugen. Bei dem Fall
mit dem 64-Bit-Zähler werden die 32 höchstwertigen Bits des
Zählers anfangs in dem Datenregister 200a gespeichert, und die
32 niedrigstwertigen Bits werden anfangs in dem Multiflag-
Register 211 gespeichert. Das Datenregister 200b speichert den
negierten Wert des Nenners. Für die erste Iteration einer
Divisionsoperation wird entweder der DIVI-Befehl ohne Bedingung
ausgeführt oder das "N"-Bit des Statusregisters 210 wird auf
"0" gesetzt. Die rotierte Zahl von dem Barrel-Rotator 235 wird
in dem Datenregister 200a gespeichert. Der Barrel-Rotator 235
und die Rotation des Multiflag-Registers 211 schieben den 64-
Bit-Zähler um einen Platz. Es ist zu erkennen, daß das
höchstwertige Bit des Multiflag-Registers 211 das nächste
höchstwertige Bit des 64-Bit-Zählers ist und daß dieses in richtiger
Weise zur Übertragseingangseingabe der ALU 230 geliefert wird.
Der in dem Datenregister 200a gespeicherte Wert wird als
Zähler/"laufender Rest" bezeichnet. Das Ergebnis der
Versuchssubtraktion wird in dem Datenregister 200c gespeichert.
-
Es gibt zwei Fälle für das Ergebnis der
Versuchssubtraktion. Wenn entweder das höchstwertige Bit des ursprünglichen
Zählers "1" war, oder wenn die Addition des negativen Nenners
einen Übertrag erzeugte, dann ist das entsprechende
Quotientenbit "1". Dieses wird in dem ersten Bit des Multiflag-Registers
211 und in dem "N"-Bit des Statusregisters 210 gespeichert. Für
die nächste Versuchssubtraktion wählt der Multiplexer 215 das
Datenregister 200c für die B-Eingabe für die nächste Iteration
mittels der "1" in dem "N"-Bit des Statusregisters 210 aus. So
wird die nächste Versuchssubtraktion von dem vorhergehenden
Ergebnis genommen. Wenn das ODER-Gatter 247 eine "0" erzeugt,
dann ist das entsprechende Quotientenbit "0". So wird dann die
nächste Versuchssubtraktion von dem vorhergehenden
Zähler/"laufender Rest", gespeichert in dem Datenregister 200a,
um einen Platz nach links verschoben. Diese Iteration wird für
32 Zyklen von DIVI fortgeführt, wobei ein Bit des Quotienten in
jedem Zyklus gebildet wird. Der 32-Bit-Quotient wird dann
vollständig in dem Multiflag-Register 211 gebildet. Je nach dem
Zustand des "N"-Bits des Statusregisters 210 findet sich der
32-Bit-Rest entweder in dem Datenregister 200a oder dem
Datenregister 200c.
-
Der Prozeß für eine 32-Bit-durch-16-Bit-Division verläuft
ähnlich. Der einer Negation unterzogene Nenner wird vor dem
Speichern in dem Datenregister 200b um 16 Plätze nach links
verschoben. Der gesamte Zähler wird in dem Datenregister 200a
gespeichert. Der DIVI-Befehl wird nur 16mal wiederholt,
woraufhin der Quotient in den 16 niedrigstwertigen Bits des
Multiflag-Registers 211 gespeichert wird und der Rest in
Abhängigkeit von dem Zustand des "N"-Bits des Statusregisters 210 in
den 16 höchstwertigen Bits des Datenregisters 200a oder des
Datenregisters 200c gespeichert wird.
-
Dieses Verfahren verwendet Hardware, die bereits in der
Dateneinheit 100 verfügbar ist, um den Aufwand der
Mikroprozessoroperationen zu reduzieren. Der DIVI-Befehl bildet im
wesentlichen ein Bit einer Division ohne Vorzeichen. Es kann
zusätzliche Software verwendet werden, um eine Division mit
Vorzeichen zu unterstützen. Es können vier Divisionsunterroutinen für
die Fälle der Division von Halbwörtern ohne Vorzeichen (32
Bit/16 Bit), der Division von Wörtern ohne Vorzeichen (64
Bit/32 Bit), der Division von Halbwörtern mit Vorzeichen (32
Bit/16 Bit) und der Division von Wörtern mit Vorzeichen (64
Bit/32 Bit) geschrieben werden. Jede der vier Unterroutinen
umfaßt drei Phasen: Divisionsvorbereitung; Divisionsiteration
in einer einzigen Befehlsschleife und Divisionsabschluß (divide
wrap-up). Vorzugsweise werden eine Schleife mit Null-Aufwand
und ein einziger 64-Bit-DIVI-Befehl innerhalb des
Schleifenkerns verwendet.
-
Der erste Teil jeder Divisionsunterroutine ist die
Divisionsvorbereitung. Hierzu gehört zunächst ein Test
daraufhin, ob der Nenner Null ist. Wenn der Nenner "0" ist, dann wird
die Divisionsunterroutine abgebrochen und eine Fehlerbedingung
vermerkt. Als nächstes werden die Vorzeichenbits für den Zähler
und den Nenner bestimmt. Bei den Unterroutinen der Division mit
Vorzeichen wird das Vorzeichen des Quotienten als eine ODER-
Verknüpfung der Vorzeichenbits des Zählers und des Nenners
gesetzt. Dann werden bei einer Division mit Vorzeichen dann,
wenn der Zähler oder der Nenner negativ ist, diese einer
Negation unterzogen, um eine positive Zahl zu erhalten. Der
Zähler wird zwischen einem ausgewählten ungeraden Datenregister
und dem Multiflag-Register 211 aufgeteilt. Bei einer
Wortdivision werden die oberen 32 Bits des Zählers in dem ausgewählten
Datenregister und die unteren 32 Bits des Zählers in dem
Multiflag-Register 211 gespeichert. Bei einer Halbwortdivision
werden alle 32 Bits des Zählers in dem ausgewählten
Datenregister gespeichert. Bei einer Halbwortdivision werden die nicht
verwendeten unteren Bits des Multiflag-Registers 211 mit Nullen
aufgefüllt. Bei einer Halbwortdivision wird der Nenner in den
oberen 16 Bits eines Datenregisters gespeichert, dessen untere
Bits mit Nullen aufgefüllt werden. Der Nenner sollte einer
Negation unterzogen werden, so daß die ALU 230 eine Subtraktion
mittels einer Addition durchführen kann. Die Unterroutinen
können Absolutwerte der höchstwertigen Bits des Zählers und
Nenners vergleichen, um zu entscheiden, ob der Quotient
"überlaufen" wird.
-
Das Herz jeder Divisionsunterroutine ist eine Schleife,
die einen einzigen DIVI-Befehl umfaßt. Es ist sehr vorteilhaft,
in eine der Registeradressen LSRE2-LSRE0 zu schreiben, um eine
Einbefehlsschleife mit Nullaufwand zu initialisieren. 16
Iterationen sind für Halbwortquotienten und 32 für
Wortquotienten erforderlich. Da die Schleifenlogik 720 auf Null
dekrementiert, sollte der Schleifenzähler mit der gewünschten Anzahl an
Iterationen minus eins geladen werden. Es ist auch möglich,
zwei Iterationen des DIVI-Befehls in den Verzögerungsschlitzen
zu plazieren, die der Schleifenlogikinitialisierung folgen. Der
einzige Befehl in dieser Schleife ist der DIVI-Befehl, der oben
vollständig beschrieben worden ist.
-
Jede Divisionsunterroutine wird mit einem
Divisionsaufwickelschritt (divide wrap-up) abgeschlossen. Der
Divisions
aufwickelschritt umfaßt die folgenden Schritte. Der Quotient
wird von dem Multiflag-Register 211 zu einem Datenregister
bewegt. Wenn das Vorzeichen des Quotienten negativ ist, dann
wird "1" zu dem Quotienten in dem Datenregister hinzuaddiert,
um eine Umsetzung von einer Einerkomplementdarstellung zu einer
Zweierkomplementdarstellung zu erreichen. Wenn der Rest
benötigt wird, wird er basierend auf dem "N"-Bit des
Statusregisters 210 ausgewählt.
-
Eine Beschreibung der Datenübertragungsformate und eine
Erklärung oder ein Glossar der verschiedenen Bits und Felder
der parallelen Datenübertragungsformate der Befehlswörter der
Fig. 18 folgt. Wie vorher in Verbindung mit dem Glossar von
Bits und Feldern der Dateneinheitsformate beschrieben,
definieren diese Bits und Felder nicht nur das Befehlswort, sondern
auch die Schaltungsanordnung, die die Ausführung des
Befehlsworts ermöglicht.
-
Das Übertragungsformat 1 wird daran erkannt, daß die Bits
38-37 nicht "00" sind, die Bits 30-28 nicht "000" sind und die
Bits 16-15 nicht "00" sind. Das Übertragungsformat 1 wird als
Doppelparalleldatenübertragungsformat bezeichnet. Das
Übertragungsformat 1 ermöglicht zwei unabhängige Zugriffe auf den
Speicher 20, einen globalen Zugriff und einen lokalen Zugriff,
begrenzt auf die Speicherabschnitte entsprechend dem digitalen
Bild-/Graphikprozessor. Das "Lmode"-Feld (Bits 38-35) bezieht
sich auf einen lokalen Übertragungsmodus, der angibt, wie die
lokale Adreßeinheit der Adreßeinheit 120 arbeitet. Dieses Feld
ist vorzugsweise in der in der Tabelle 24 dargestellten Weise
decodiert.
Tabelle 24
-
Das "d"-Feld (Bits 34-32) bestimmt eines der Datenregister D0-
D7 als Quelle oder Ziel einer lokalen Busübertragung. Das "e"-
Bit (Bit 31) bestimmt dann, wenn es "1" ist, eine
Vorzeichenerweiterung und dann, wenn es "0" ist, eine Nullerweiterung für
die lokale Datenübertragung. Dieses wirkt bei einer
Speicherzu-Register-Übertragung, wenn das lokale "siz"-Feld (Bits 30-
29) eine Wortgröße anzeigt, die unter der vollständigen 32-Bit-
Wortgröße liegt. Das "e"-Bit wird ignoriert, wenn die
Datengröße 32 Bits beträgt. Die Kombination von "e" (Bit 31) = "1"
und "L" (Bit 21) = "0", die sonst bedeutungslos sein könnte,
zeigt eine Arithmetikoperation einer lokalen Adreßeinheit an.
Das lokale "siz"-Feld (Bits 30-29) ist vorzugsweise in der in
der Tabelle 25 dargestellten Weise codiert.
Tabelle 25
-
Das "s"-Bit (Bit 28) setzt den Skalierungsmodus, der auf die
Lokaladreßindexskalierung anzuwenden ist. Wenn das "s"-Bit "1"
ist, wird der Index bei der Adreßberechnung, der aus einem
Indexregister oder von einer durch einen von einem Befehl
spezifizierten Offset abgerufen werden kann, auf die Größe
skaliert, die durch das "siz"-Feld angegeben wird. Wenn das
"s"-Bit "0" ist, tritt keine Skalierung auf. Wie vorher
erwähnt, tritt diese Indexskalierung in dem Indexskalierer 614
auf. Wenn die ausgewählte Datengröße 8 Bits (1 Byte) beträgt,
dann findet, unabhängig von dem Zustand des "s"-Bits, keine
Skalierung statt. Nur in diesem Fall kann das "s"-Bit als ein
zusätzliches Offsetbit verwendet werden. Wenn das "Lmode"-Feld
einen Offset kennzeichnet, dann wird das "s"-Bit das
höchstwertige Bit des Offsets und verwandelt den 3-Bit-Offsetindex des
"Lim/x"-Feldes in 4 Bits um. Das "La"-Feld (Bits 27-25)
kennzeichnet ein Adreßregister in der Lokaladreßeinheit 620 der
Adreßeinheit 120 für eine lokale Datenübertragung. Das "L"-Bit
(Bit 21) zeigt an, daß die lokale Datenübertragung ein
Ladevorgang ist, der Daten vom Speicher zum Register (L = "1")
überträgt oder einen Speichervorgang, der Daten vom Register
zum Speicher überträgt (L = "0"). Das "Lim/x"-Feld (Bits 2-0)
spezifiziert entweder die Registernummer eines Indexregisters
oder ein 3-Bit-Offset, je nach der Codierung des "Lmode"-
Feldes.
-
Die Operation der globalen Datenübertragung wird in einer
ähnlichen Weise wie das Codieren einer lokalen Datenübertragung
codiert. Das "L"-Bit (Bit 17) bestimmt die Auswahl eines
globalen Lade-/Speichervorgangs. Dieses Bit bestimmt, ob die
globale Datenübertragung eine Speicher-zu-Register-Übertragung
("L" = "1") ist, die auch als Ladevorgang bekannt ist, oder
eine Register-zu-Speicher-Übertragung ("L" = "0"), die auch als
Speichervorgang bekannt ist. Das "Gmode"-Feld (Bits 16-13)
definiert einen globalen Übertragungsmodus in der gleichen
Weise, wie der lokale Übertragungsmodus durch das "Lmode"-Feld
definiert wird. Dieses Feld ist vorzugsweise in der in der
Tabelle 26 dargestellten Weise decodiert.
Tabelle 26
-
Das "reg"-Feld (Bits 12-10) identifiziert ein Register.
Das "reg"-Feld kennzeichnet die Nummer des Quellregisters in
dem Fall eines Speichervorgangs oder die Nummer des
Zielregisters in dem Fall eines Ladevorgangs. Das "0bank"-Feld
(Bits 20-18) enthält drei Bits und identifiziert eine Bank an
Registern in den unteren 64 Registern. Die Registerbanknummern
dieser Register weisen die Form "0XXX" auf. Das 3-Bit-"Obank"-
Feld in Kombination mit dem 3-Bit-"reg"-Feld bestimmt ein
beliebiges Register in den unteren 64 Registern als Datenquelle
oder Ziel für die globale Datenübertragung. Das "e"-Bit (Bit 9)
bestimmt dann, wenn es "1" ist, eine Vorzeichenerweiterung und
in dem Fall, wenn es "0" ist, eine Nullerweiterung für die
globale Datenübertragung. Dieses wirkt bei einer Speicher-zu-
Register-Übertragung, wenn das globale "siz"-Feld (Bits 8-7)
eine Wortgröße anzeigt, die kleiner als die vollständige 32-
Bit-Wortgröße ist. Das "e"-Bit wird ignoriert, wenn die
Datengröße 32 Bits beträgt. Die Kombination von "e" (Bit 9) = "1"
und "L" (Bit 17) = "0" zeigt eine Arithmetikoperation einer
globalen Adresseinheit an. Das globale "siz"-Feld (Bits 8-7)
wird vorzugsweise in der in Tabelle 27 dargestellten Weise
codiert.
Tabelle 27
-
Das "s"-Bit (Bit 6) setzt den Skalierungsmodus, der auf
die Globaladressindexskalierung anzuwenden ist. Wenn das "s"-
Bit "1" ist, dann wird der Index bei der Adressberechnung, der
von einem Indexregister oder einem durch einen Befehl
spezifizierten Offset abgerufen werden kann, auf die durch das
"siz"-Feld angegebene Größe skaliert. Wenn das "s"-Bit "0" ist,
dann tritt keine Skalierung auf. Keine Skalierung findet
unabhängig von dem Zustand des "s"-Bits statt, wenn das "size"-
Feld eine Datengröße von 8 Bits kennzeichnet. Wenn das "Gmode"-
Feld einen Offset kennzeichnet, wird dieses "s"-Bit das
höchstwertige Bit des Offsets und wandelt den Drei-Bit-Offset-
Index des "Gim/x"-Feldes in 4 Bit um. Das "Ga"-Feld (Bits 5-3)
kennzeichnet ein Adressregister in der globalen Adresseinheit
610 der Adresseinheit 120 für eine lokale Busübertragung. Das
"Gim/x"-Feld (Bits 24-22) spezifiziert entweder die
Registernummer eines Indexregisters oder einen Drei-Bit-Offset, je nach
der Codierung des "Gmode"-Feldes. Das "Ga"-Feld (Bits 5-3)
spezifiziert die Registernummer des Adressregisters, das bei
der Berechnung der Speicheradresse der globalen
Datenübertragung verwendet wird.
-
Das Datenübertragungsformat 2 wird dadurch erkannt, daß
die Bits 38-37 nicht "00", die Bits 30-28 nicht "000" und die
Bits 16-15 nicht "00" sind. Das Datenübertragungsformat 2 wird
als XY-Teilflächenformat (XY patch format) bezeichnet. Das
Datenübertragungsformat 2 ermöglicht das Adressieren des
Speichers 20 in einer auf eine XY-Teilfläche bezogenen Weise,
wobei Adressen von sowohl der globalen Adresseinheit als auch
der lokalen Adresseinheit der Adresseinheit 120 multiplexiert
werden. Das "o"-Bit (Bit 34) ermöglicht
Außen-XY-Teilflächenerkennung (outside XY patch detection). Wenn das "o"-Bit auf
"1" gesetzt ist, dann werden die durch die Bits "a" und "n"
spezifizierten Operationen durchgeführt, wenn die spezifizierte
Adresse außerhalb der XY-Teilfläche liegt. Ansonsten, wenn das
"o"-Bit "0" ist, werden die Operationen durchgeführt, wenn die
Adresse innerhalb der Teilfläche liegt. Das "a"-Bit (Bit 33)
spezifiziert den XY-Teilflächenspeicher-Zugriffsmodus. Wenn das
"a"-Bit auf "1" gesetzt ist, wird der Speicherzugriff
durchgeführt, und zwar unabhängig davon, ob die Adresse
innerhalb oder außerhalb der XY-Teilfläche liegt. Wenn das "a"-
Bit auf "0" gesetzt ist, wird der Speicherzugang gesperrt, wenn
die Adresse außerhalb (wenn das "o"-Bit "1" ist) oder innerhalb
(wenn das "o"-Bit "0" ist) der Teilfläche liegt. Das "n"-Bit
(Bit 32) spezifiziert den XY-Teilflächen-Interrup-Modus. Wenn
das "n"-Bit auf "1" gesetzt ist, ist ein Interrupt-Flag-
Register-Bit für die XY-Teilfläche auf "1" gesetzt, wenn die
Adresse außerhalb (wenn das "o"-Bit "1" ist) oder innerhalb
(wenn das "o"-Bit "0" ist) der Teilfläche ist. Wenn das "n"-Bit
auf "0" gesetzt ist, wird das XY-Teilflächen-Interrupt-
Aufrufflag nicht gesetzt.
-
Andere Felder werden in der gleichen oben beschriebenen
Weise definiert. Das "Lmode"-Feld spezifiziert den in der
Tabelle 28 angegebenen lokalen Adressberechnungsmodus. Diese
lokale Adressberechnung umfaßt ein lokales Adressregister, das
als "La"-Feld bezeichnet ist, und entweder ein Drei-Bit-Offset
ohne Vorzeichen oder ein lokales Index-Register, das durch das
"Lim/x"-Feld bestimmt wird. Das "Gmode"-Feld spezifiziert die
globale Adressberechnung. Ein 3-Bit-Offset ohne Vorzeichen oder
ein globales Index-Register, gekennzeichnet durch das "Gim/x"-
Feld, werden mit dem Adressregister kombiniert, das durch das
"Ga"-Feld spezifiziert wird, um die globale Adresse zu bilden.
Das 4-Bit-"bank"-Feld (Bits 21-18) identifiziert eine
Datenregisterbank und wird mit dem eine Registernummer
identifizierenden 3-Bit-"reg"-Feld verbunden, um ein beliebiges Register
als Datenquelle oder Ziel für einen XY-Teilflächenzugriff zu
bestimmen. Das "L"-Bit kennzeichnet eine Auswahl zwischen
Laden/Speichern. Dieses Bit bestimmt, ob ein
XY-Teilflächenzugriff eine Speicher-zu-Register-Übertragung ("L" = "1") ist,
die auch als Ladevorgang bekannt ist, oder eine Register-zu-
Speicher-Übertragung ("L" = "0"), die auch als Speichervorgang
bekannt ist. Wenn das "e"-Bit "1" ist, kennzeichnet es eine
Vorzeichenerweiterung, wenn es "0" ist, kennzeichnet es eine
Nullerweiterung. Dieses wirkt bei einer Ladeoperation
(Speicher-zu-Register-Datenübertragung), wenn das "siz"-Feld
eine Wortgröße anzeigt, die kleiner als eine vollständige-32-
Bit-Wortgröße ist. Das "e"-Bit wird ignoriert, wenn die
Datengröße 32 Bits beträgt. Die Kombination von "e" = "1" und "L" -
"0" zeigt eine Teilflächen-Adresseinheit-Arithmetikoperation
an. Das "s"-Bit setzt den Skalierungsmodus, der auf eine
globale Adressindexskalierung anzuwenden ist. Wenn das "s"-Bit
"1" ist, werden die aus dem Speicher abgerufenen Daten auf die
Größe skaliert, die durch das "siz"-Feld angezeigt wird. Wenn
das "s"-Bit "0" ist, dann tritt keine Skalierung auf. Wenn die
ausgewählte Datengröße 8 Bits (1 Byte) beträgt, dann findet
keine Skalierung statt, und zwar unabhängig von dem Zustand des
"s"-Bits. Nur in diesem Fall wird das "s"-Bit als das
höchstwertige Bit des Offsets verwendet, wobei der 3-Bit-"Gim/x"-
Offsetindex auf 4 Bit gewandelt wird.
-
Das Datenübertragungsformat 3 wird dadurch erkannt, daß
die Bits 38-37 nicht "00", das Bit 24 nicht "0" und die Bits
16-13 nicht "0000" sind. Das Datenübertragungsformat 3 wird als
das Bewegungs- und lokale Datenübertragungsformat bezeichnet.
Das Datenübertragungsformat 3 ermöglicht einen Ladevorgang oder
einen Speichervorgang von einem der Datenregister 200 über den
lokalen Datenport parallel mit einer Register-Register-Bewegung
unter Verwendung des zum globalen Port gehörenden
Quelldatenbusses Gsrc 105 und des zum globalen Port gehörenden
Zieldatenbusses Gdst 107. Die zum lokalen Datenport gehörende.Operation
wird durch die Felder "Lmode" "d" "e" "siz" "s" "La" "L"
und "Lim/x" in der oben beschriebenen Weise definiert. Die
Register-Register-Bewegung findet von dem Register, das durch
die durch das "srcbank"-Feld (Bits 9-6) angezeigte Bank und die
durch durch das "src"-Feld (Bits 12-10) angezeigte
Registernummer definiert wird, zu dem Register statt, das durch die
durch das "dstbank"-Feld (Bits 21-18) angezeigte Bank und die
Registernummer definiert wird, die durch das "dst"-Feld (Bits
5-3) gekennzeichnet wird.
-
Das Datenübertragungsformat 3 unterstützt eine auf den
digitalen Bild-/Graphikprozessor bezogene Adressierung. Das
"Lrm"-Feld (Bits 23-22) zeigt die Art der
Adressierungsoperation an. Das ist in der Tabelle 28 dargestellt.
Tabelle 28
-
Die Spezifikation DBA bringt die lokale Adresseinheit 620
dazu, die Basisadresse ihres entsprechenden Speichers zu
erzeugen. In entsprechender Weise bringt die Spezifikation von
"PBA" den Erzeuger 620 lokaler Adressen dazu, die Basisadresse
ihres entsprechenden Parameterspeichers zu erzeugen. Die auf
diese Weise erzeugte Basisadresse kann mit dem in einem Index-
Register oder einem Offset-Feld gespeicherten Index in
irgendeiner der Adresserzeugungsoperationen kombiniert werden, die in
dem in der Tabelle 24 dargestellten "Lmode"-Feld spezifiziert
sind.
-
Dieses Datenübertragungsformat unterstützt darüber hinaus
die Befehlsworterzeugung. Wenn das Ziel der Register-zu-
Register-Bewegung das Nullwertadressregister der globalen
Adresseinheit A15 ist, dann initiiert die
Befehlswortdecodierungsschaltungsanordnung eine Befehlswortübertragung zu einem
bestimmten Prozessor. Dieses Befehlswort wird über die
Kreuzschiene 50 über den globalen Datenport, begleitet von einem
speziellen Befehlswortsignal, übertragen. Dieses ermöglicht
eine Kommunikation zwischen den Prozessoren in der Weise, daß
zum Beispiel ein beliebiger der digitalen Bild-/
Graphikprozessoren 71, 72, 73 und 74 ein Interrupt-Signal zu
anderen Prozessoren ausgeben kann. Dieser Prozess ist oben im
einzelnen dargestellt.
-
Das Datenübertragungsformat 4 wird dadurch erkannt, daß
die Bits 38-37 nicht "00", das Bit 24 nicht "0" und die Bits
16-13 nicht "0001" sind. Das Datenübertragungsformat 4 wird als
das Feldbewegungs- und lokale Datenübertragungsformat
bezeichnet. Das Datenübertragungsformat 4 ermöglicht einen Ladevorgang
oder einen Speichervorgang von einem der Datenregister 200 über
den lokalen Datenport parallel mit einer Register-zu-Register-
Feldbewegung unter Verwendung des zum globalen Port gehörenden
Quelldatenbusses Gsrc 105 und des zum globalen Port gehörenden
Zieldatenbusses Gdst 107. Die zum lokalen Datenport gehörende
Operation wird durch die Felder "Lmode", "d", "e" (Bit 31),
"siz" (Bits 30-29), "s", "La", "L" und "Lim/x" in der oben
beschriebenen Weise definiert.
-
Die Register-zu-Register-Feldbewegung findet von dem
Datenregister, das durch die durch das "src"-Feld (Bits 12-10)
gekennzeichnete Registernummer definiert wird, zu dem Register
statt, das durch die durch das "dstbank"-Feld (Bits 21-18)
gekennzeichnete Bank und die durch das "dst"-Feld (Bits 5-3)
gekennzeichnete Registernummer definiert ist. Das "D"-Bit (Bit
6) zeigt an, ob die Feldbewegung eine Feldwiederholungsbewegung
("D" = "1") oder eine Feldextrahierungsbewegung ("D" = "0")
ist. Bei einer Feldwiederholungsbewegung werden die
niedrigstwertigen 8-Bits des Quellregisters viermal in dem
Zielregister wiederholt, wenn das "siz"-Feld (Bits 8-7) eine
Bytegröße anzeigt, und die niedrigstwertigen 16 Bits des
Quellregisters werden in das Zielregister kopiert, wenn das "siz"-
Feld (Bits 8-7) eine Halbwortgröße anzeigt. Wenn das "siz"-Feld
eine Wortgröße anzeigt, dann werden die gesamten 32 Bits des
Quellregisters zum Zielregister ohne Wiederholung übertragen,
und zwar unabhängig von dem Zustand des "D"-Bits. Bei einer
Feldextrahierungsbewegung zeigt das "itm"-Feld (Bits 23-22) an,
daß die "Little-Endfan"-Objektnummer aus dem Quellregister zu
extrahieren ist. Die speziell extrahierten Bits sind von dem
"siz"-Feld abhängig. Wenn die Datengröße des "siz"-Feldes (Bits
8-7) Byte ist, dann kann "itm" 0, l, 2 oder 3 sein, was das
gewünschte Byte anzeigt. Wenn die Datengröße des "siz"-Feldes
(Bits 8-7) Halbwort ist, dann kann "itm" "0" oder "1" sein, was
das gewünschte Halbwort anzeigt. Das "itm"-Feld wird ignoriert,
wenn das "siz"-Feld (Bits 8-7) Wort ist. Das aus dem
Quellregister extrahierte Feld wird um ein Vorzeichen erweitert, wenn
das "e"-Bit (Bit 9) "1" ist und um "0" erweitert, wenn das "e"-
Bit (Bit 9) "0" ist. Das "e"-Feld wird während der
Feldwiederholungsbewegungen ignoriert.
-
Das Datenübertragungsformat 5 wird dadurch erkannt, daß
die Bits 38-37 nicht "00", das Bit 24 "1" und die Bits 16-15
"00" sind. Das Datenübertragungsformat 5 wird als lokale
Datenübertragung mit langem Offset bezeichnet. Das
Datenübertragungsformat 5 ermöglicht einen Speicherzugriff über den
globalen Port unter Verwendung einer Adresse, die in der lokalen
Adresseinheit aufgebaut wird, da keine globalen
Datenübertragungen möglich sind. Die auf den lokalen Datenport bezogene
Operation wird durch die Felder "Lmode" "d" "e" "siz" "s"
"La" und "L" in der oben beschriebenen Weise definiert. Die
Registerquelle oder das Registerziel entspricht der durch das
"reg"-Feld (Bits 34-32) bestimmten Registernummer in der Bank
an Registern, die durch das "bank"-Feld (Bits 21-18) bestimmt
wird. Das "Local Long Offset/x"-Feld (Bits 14-0) spezifiziert
einen 15-Bit-Lokaladressen-Offset oder die drei
niedrigstwertigen Bits spezifizieren ein Index-Register, wie es durch das
"Lmode"-Feld gesetzt wird. Es mag sein, daß ein Programmierer
dieses Datenübertragungsformat unter Verwendung eines
Indexregisters anstelle des "Local long offset"-Feldes verwenden
mag, da es das Datenübertragungsformat 5 ermöglicht, daß ein
beliebiges Dateneinheitsregister als Quelle für einen
Speichervorgang oder als Ziel für einen Ladevorgang verwendet wird. Das
"Lmode"-Feld zeigt an, ob das Feld einen Offset-Wert oder eine
Indexregisterzahl enthält. Wenn die ausgewählte Datengröße 8
Bits (1 Byte) ist, dann findet keine Skalierung statt, und zwar
unabhängig von dem Zustand des "s"-Bits. Nur in diesem Fall
wird das "s"-Bit zu dem höchstwertigen Bit des Offsets, wobei
das 15-Bit-"Local long offset"-Feld in 16 Bits umgewandelt
wird. Das "Lrm"-Feld (Bits 23-22) spezifiziert eine normale
Adressenoperation, eine Datenspeicher-Basisadressenoperation
oder eine Parameterspeicher-Basisoperation, wie sie oben in der
Tabelle 28 aufgelistet sind. Das Datenübertragungsformat 6 wird
dadurch erkannt, daß die Bits 38-37 "00", die Bits 16-15 nicht
"00" und das Bit 2 "0" ist. Das Datenübertragungsformat 6 wird
als globale Datenübertragung mit langem Offset (global long
offset data transfer) bezeichnet. Das Datenübertragungsformat 6
ist dem Datenübertragungsformat 5 ähnlich, mit der Ausnahme,
daß die Adressenberechnung in der globalen Adresseinheit
auftritt. Die Felder "bank", "L", "Genode", "reg", "e", "siz"
"s" und "Ga" sind so wie sie oben definiert wurden. Das "Global
Long Offset/x"-Feld (Bits 36-22) spezifiziert eine globale
Offset-Adresse oder ein Indexregister je nach dem "Genode"-Feld.
Dieses ist ähnlich dem oben erwähnten "Local Long Offset/x"-
Feld. Das "Grm"-Feld (Bits 1-0) zeigt den Typ der
Adressierungsoperation an. Dies ist unten in der Tabelle 29
dargestellt.
Tabelle 29
-
Dieses wirkt in der gleichen Weise wie das oben
beschriebene "Lrm"-Feld, mit der Ausnahme, daß die Adressberechnung in
der globalen Adresseinheit 610 stattfindet.
-
Das Datenübertragungsformat 7 wird dadurch erkannt,
daß die Bits 38-37 nicht "00" sind, das Bit 24 "0" ist und die
Bits 16-14 "001" sind. Das Datenübertragungsformat 7 wird als
das Format der Nicht-Datenregister-Dateneinheit-Operation und
der lokalen Datenübertragung bezeichnet. Das
Datenübertragungsformat 7 ermöglicht auf den lokalen Port bezogene
Speicherzugriffe parallel mit einer Dateneinheitsoperation, bei der die
erste Quelle für die ALU 230 und das Ziel für die ALU 230
irgendein Register des digitalen Bild-/Graphikprozessors 71
sein kann. Die auf den lokalen Datenport bezogene Operation
wird durch die Felder "Lmode" "d" "e" "siz" "s" "La"
"Lrm", "L" und "Lim/x" in der oben beschriebenen Weise
definiert. Das "Adstbnk"-Feld (Bits 21-18) spezifiziert eine
Registerbank für das ALU-Ziel. Dieses Feld spezifiziert eine
Registerquelle in Verbindung mit dem "dst"-Feld in den
Dateneinheitsformaten A, B und C, und dem "dst1"-Feld in dem
Dateneinheitsformat D. Das "Astbank"-Feld spezifiziert eine
Registerbank für die erste ALU-Quelle. So wird eine Registerquelle
in Verbindung mit dem "src1"-Feld in den Dateneinheitsformaten
A, B, C und D spezifiziert. Diese Dateneinheitsoperationen
werden ALU-Operationen mit langem Abstand genannt, da die
Datenregister 200 der Dateneinheit 110 nicht die erste Quelle
und das Ziel zu bilden brauchen.
-
Das Datenübertragungsformat 8 wird dadurch erkannt, daß
die Bits 38-37 "00" sind, das Bit 24 "0" ist und die Bits 16-13
"0000" sind. Das Datenübertragungsformat 8 wird als das Format
der Bedingungsdateneinheitsoperation und der Bedingungsbewegung
bezeichnet. Das Datenübertragungsformat 8 ermöglicht eine auf
einer Bedingung basierende Auswahl der ersten Quelle der ALU
230 und einen auf einer Bedingung basierenden Speichervorgang
des Ergebnisses der ALU 230. Die ALU-Bedingungsoperationen sind
in den Feldern "cond. ", "c", "r", "g" und "N C V Z" definiert.
-
Das "cond."-Feld (Bits 35-32) definiert eine ALU-Operation
aus Bedingungsregisterquellen und eine Bedingungsspeicherung
des ALU-Ergebnisses. Dieses Feld ist in der Tabelle 20
definiert. Diese Bedingungen werden basierend auf den "N"-,
"C"-, "V"- und "Z"-Bits des Statusregisters 210 ausgewertet.
-
Die spezifizierte Bedingung kann eine
Bedingungsregisterquelle, eine Bedingungsspeicherung des Ergebnisses der ALU 230
oder eine von einer Bedingung abhängige Bewegung von einem
Register zum anderen bestimmen. Das "c"-Bit (Bit 31) bestimmt
die Bedingungsquellenauswahl. Wenn das "c"-Bit "0" ist, dann
wird die erste Quelle für die ALU 230 ohne Bedingung basierend
auf dem "src1"-Feld (Bits 47-45) des Dateneinheitsformatteils
des Befehlsworts ausgewählt. Wenn das "c"-Bit "1" ist, dann
wird die Registerquelle zwischen einem ungeraden und einem
geraden Registerpaar ausgewählt. Es ist zu erkennen, daß in
diesem Fall das "src1"-Feld ein mit einer ungeraden Zahl
numeriertes Datenregister 200 spezifizieren muß. Wenn die
Bedingung wahr ist, dann wird das spezifizierte Register als
erste Quelle für die ALU 230 ausgewählt. Wenn die Bedingung
falsch ist, dann wird das entsprechende im Vergleich zu dem
spezifizierten Datenregister um eins kleinere entsprechende
geradzahlige Datenregister als Quelle ausgewählt. Die
bevorzugte Ausführungsform unterstützt eine
Bedingungsquellenauswahl basierend auf dem "N"-Bit des Statusregisters 210. Wenn
das "N"-Feld des Statusregisters 210 "1" ist, dann wird das
bestimmte Datenregister als die erste Quelle für die ALU 230
ausgewählt. Wenn das "N"-Feld des Statusregisters 210 "0" ist,
dann wird das um eins kleinere Datenregister ausgewählt. Diese
Auswahl kann mittels eines Multiplexers oder durch die
Substitution des "N"-Feldes des Statusregisters 210 für das
niedrigstwertige Bit der Registerzahl durchgeführt werden.
Obwohl die bevorzugte Ausführungsform nur eine
Bedinungsquellenauswahl basierend auf dem "N"-Bit des Statusregisters 210
unterstützt, ist es auch möglich, eine Bedingungsquellenauswahl
basierend auf den "C"-, "V"- und "Z"-Bits des Statusregisters
210 durchzuführen.
-
Das Datenübertragungsformat 8 unterstützt das Speichern
des Ergebnisses der ALU 230 in Abhängigkeit von einer
Bedingung. Das "r"-Bit (Bit 30) zeigt an, daß das Speichern des
Ergebnisses von einer Bedingung abhängt. Wenn das "r"-Bit "1"
ist, dann hängt das Speichern des Ergebnisses von der Bedingung
des "cond."-Feldes ab. Wenn das "r"-Bit "0" ist, dann hängt das
Speichern der Bedingung von keiner Bedingung ab. Es ist zu
erkennen, daß bei einer von einer Bedingung abhängigen
Ergebnisoperation die Statusbits des Statusregisters 210
unabhängig von einer Bedingung gesetzt werden. So können diese
Bits selbst dann gesetzt werden, wenn das Ergebnis nicht
gespeichert wird.
-
Das Datenübertragungsformat 8 erlaubt darüber hinaus eine
von einer Bedingung abhängige
Register-Register-Bewegungsoperation. Diese Bedingung wird durch das gleiche "cond."-Feld
definiert, das von Bedingungen abhängige
Dateneinheitsoperationen definiert. Die Registerdatenquelle der Bewegung wird durch
die Bank definiert, die durch das "srcbank"-Feld (Bits 9-6)
angezeigt wird, und die Registernummer, die durch das "src"-
Feld (Bits 12-10) angezeigt wird. Das Registerdatenziel wird
durch die Bank definiert, die durch das "dstbank"-Feld (Bits
21-18) und die Registernummer, die durch das "dst"-Feld (Bits
5-3) angezeigt wird. Das "g"-Bit (Bit 29) zeigt an, ob die
Datenbewegung von einer Bedingung abhängig ist. Wenn das "g"-
Bit "1" ist, dann ist die Datenbewegung von einer in dem
"cond."-Feld angegebenen Bedingung abhängig. Wenn das "g"-Bit
"0" ist, dann ist die Datenbewegung nicht von einer Bedingung
abhängig. Es sei angemerkt, daß eine Bestimmung des
Nullwertadreßregisters A15 der globalen Adreßeinheit eine
Befehlswortschreiboperation erzeugt, wie es vorher beschrieben worden
ist. So ermöglicht das Datenübertragungsformat 8 eine von einer
Bedingung abhängige Befehlsworterzeugung.
-
Das "N C V Z"-Feld (Bits 28-25) zeigt an, welche Bits des
Zustands vor einer Veränderung während der Ausführung des
Befehls geschützt sind. Die Bedingungen des Statusregisters
sind folgende: N negativ; C Übertrag; V Überlauf; und Z Null.
Wenn eines oder mehrere dieser Bits auf "1" gesetzt sind, dann
ist das entsprechende Bit bzw. sind die entsprechenden Bits in
dem Statusregister vor einer Veränderung während der Ausführung
des Befehls geschützt. Ansonsten werden die Statusbits des
Statusregisters 210 in normaler Weise entsprechend dem Ergebnis
der ALU 230 gesetzt.
-
Das Datenübertragungsformat 9 wird daran erkannt, daß die
Bits 38-37 "00" sind, das Bit 24 "0" ist und die Bits 16-13
"0001" sind. Das Datenübertragungsformat 9 wird als das Format
der Dateneinheits-Bedingungsoperation und der Bedingungs-
Feldbewegungsübertragung bezeichnet. Das
Datenübertragungsformat 9 ermöglicht, in Abhängigkeit von einer Bedingung, die
Auswahl der ersten Quelle für die ALU 230 und in Abhängigkeit
von einer Bedingung das Speichern des Ergebnisses der ALU 230
in derselben Weise wie beim Datenübertragungsformat B. Die von
einer Bedingung abhängigen ALU-Operationen werden durch die
Felder "cond. ", "c", "r" und "N C V Z" definiert, wie sie oben
bei der Beschreibung des Datenübertragungsformats 8 erwähnt
wurden.
-
Das Datenübertragungsformat 9 unterstützt darüber hinaus
von einer Bedingung abhängige Register-Register-Feldbewegungen.
Die Bedingung wird durch das gleiche "cond."-Feld definiert,
das von einer Bedingung abhängige Dateneinheitsoperationen
spezifiziert. Die Quelle der Feldbewegung muß eines der
Datenregister 200 sein. Das "src"-Feld (Bits 12-10) spezifiziert das
spezielle Datenregister. Das Ziel der Register-Register-
Bewegung ist das Register, das durch die Registerbank des
"dstbank"-Feldes (Bits 21-18) und die Registernummer des "dst"-
Feldes (Bits 5-3) definiert wird. Die Felder "g" (Bit 29),
"itm" (Bits 23-22), "e" (Bit 9), "siz" (Bits 8-7) und "D" (Bit
6) definieren die Parameter der von einer Bedingung abhängigen
Feldbewegung. Das "g"-Bit zeigt an, daß die Feldbewegung nicht
von einer Bedingung abhängig ist, wenn "g" = "0" ist, und daß
die Feldbewegung von einer Bedingung abhängt, wenn "g" = "1".
Das "D"-Bit zeigt an, ob die Feldbewegung eine
Feldwiederholungsbewegung ("D" = "1") ist oder eine
Feldextrahierungsbewegung ("D" = "0"). Diese Optionen sind oben beschrieben worden.
Bei einer Feldextrahierungsbewegung zeigt das "itm"-Feld (Bits
23-22) die Little-Endfan-Objektnummer an, die, basierend auf
der durch das "siz"-Feld spezifizierten Datengröße, aus dem
Quellregister extrahiert werden soll. Das aus dem Quellregister
extrahierte Feld wird um ein Vorzeichen erweitert, wenn das
"e"-Bit (Bit 9) "1" ist, und einer Nullerweiterung unterzogen,
wenn das "e"-Bit (Bit 9) "0" ist. Das "e"-Feld wird während der
Feldwiederholungsbewegungen ignoriert.
-
Das Datenübertragungsformat 10 wird dadurch erkannt, daß
die Bits 38-37 "00" sind, die Bits 16-15 "00" sind und das Bit
2 "1" ist. Das Datenübertragungsformat 10 wird als das Format
der Dateneinheitsbedingungsoperation und der von Bedingung
abhängigen globalen Datenübertragungen bezeichnet. Das
Datenübertragungsformat 10 erlaubt die von einer Bedingung
abhängige Auswahl der ersten Quelle der ALU 230 und die von
einer Bedingung abhängige Speicherung des Ergebnisses der ALU
230. Die von einer Bedingung abhängigen ALU-Operätionen werden
durch die Felder "cond.", "c", "r" und "N C V Z" definiert, wie
es oben bei der Beschreibung des Datenübertragungsformats 8
erwähnt wurde.
-
Das Datenübertragungsformat 10 unterstützt darüber hinaus
den von einer Bedingung abhängigen Speicherzugriff über die
globale Adreßeinheit 610. Der von einer Bedingung abhängige
Speicherzugriff wird durch die Felder "g", "Gim/x", "bank",
"L", "Gmode", "reg", "e", "siz", "s", "Ga" und "Grm"
spezifiziert, wie es vorher beschrieben worden ist. Das "g"-Bit (Bit
29) zeigt an, ob die Datenbewegung von einer Bedingung abhängig
ist, und zwar in der oben beschriebenen Weise. Das "Gim/x"-Feld
spezifiziert entweder eine Indexregisternummer oder ein Offset-
Feld, je nach dem Zustand des "Gmode"-Feldes. Das "bank"-Feld
spezifiziert die Registerbank und das "reg"-Feld spezifiziert
die Registernummer der Registerquelle oder des Ziels des
globalen Speicherzugriffs. Das "L" weist auf eine Ladeoperation
(Übertragung vom Speicher zum Register) anhand einer "1" hin
und auf eine Speicheroperation (Übertragung vom Register zum
Speicher) anhand einer "0". Das "Gmode"-Feld bestimmt die
Operation der globalen Dateneinheit 610, wie es in der Tabelle
26 dargestellt ist. Das "e"-Bit zeigt eine Nullvorzeichen- oder
Null-Erweiterung für Ladeoperationen an. Es sei angemerkt, daß
ein "L"-Feld mit dem Inhalt "0" und ein "e"-Feld mit dem Inhalt
"1" eine Adreßarithmetikoperation erzeugen. Das "siz"-Feld
spezifiziert die Datengröße, wie es in der Tabelle 27 angegeben
ist. Das "s"-Bit zeigt an, ob der Index auf die Datengröße
skaliert ist, wie es oben beschrieben wurde. Das "Ga"-Feld
spezifiziert das Adreßregister, das zur Adreßberechnung
verwendet wird. Das "Grm"-Feld zeigt die Art der
Adressierungsoperation an, wie es in der Tabelle 29 dargestellt ist.
-
Das Datenübertragungsformat 11 wird daran erkannt, daß die
Bits 38-37 "00" sind, das Bit 24 "0" ist und die Bits 16-14
"001" sind. Das Datenübertragungsformat 11 wird als das
Bedingungs-Nicht-Datenregister-Dateneinheits-Format bezeichnet.
Das Datenübertragungsformat 11 ermöglicht keine
Speicherzugriffe. Statt dessen ermöglicht das Datenübertragungsformat
11 eine von einer Bedingung abhängige Dateneinheitsoperation
mit einer Quelle, bei der ein beliebiges Register in dem
digitalen Bild-/Graphikprozessor 71 als Ziel für die ALU 230
dient. Diese Operationen werden als ALU-Operationen mit langem
Abstand bezeichnet. Das "Aslbank"-Feld (Bits 9-6) spezifiziert
eine Registerbank, die die erste ALU-Quelle in Verbindung mit
dem "src1"-Feld (Bits 47-45) in dem Dateneinheitsformat des
Befehls definiert. So kann diese Quelle irgendeines der
Register in dem digitalen Bild-/Graphikprozessor 71 sein. Das
"Adstbnk"-Feld (Bits 21-18) spezifiziert eine Bank aus
Registern, die das ALU-Ziel in Verbindung mit dem "dst"-Feld
(Bits 50-48) in den Dateneinheitsformaten A, B und C, und dem
"dst1"-Feld (Bits 50-48) in dem Dateneinheitsformat E
definiert. Die von einer Bedingung abhängigen ALU-Operationen
werden durch die Felder "cond.", "c", "r" und "N C V Z"
definiert, wie es oben bei der Beschreibung des
Datenübertragungsformats 8 erwähnt wurde.
-
Das "R"-Bit (Bit 0) ist ein Rücksetzbit. Das "R"-Bit wird
nur beim Rücksetzen verwendet. Dieses "R"-Bit wird nur beim
Rücksetzen verwendet. Das "R"-Bit entscheidet, ob das
Stapelzeigerregister A14 beim Zurücksetzen des digitalen Bild-/
Graphikprozessors 71 initialisiert wird. Dieses "R"-Bit ist für
die Anwender über den Befehlssatz nicht verfügbar und wird
nicht weiter beschrieben.
-
Bei so vielen innerhalb von einem Befehl möglichen
Operationen ist es möglich, daß eine Operation eines einzelnen
Befehls das gleiche Zieldatenregister 200 spezifiziert. In
einem solchen Fall bestimmt eine festgelegte
Prioritätsreihenfolge, welche Operation ihr Ergebnis in dem gleichzeitig
spezi
fizierten Zielregister sichert. Diese festgelegte
Prioritätsreihenfolge ist in der Tabelle 30 in der Reihenfolge von der
höchsten Priorität zur niedrigsten Priorität dargestellt.
Tabelle 30
Prioritätsrang Operation
-
hoch "Globale Adreßeinheit"-Datenübertragung
-
mittel "Lokale Adreßeinheit"-Datenübertragung
-
gering Dateneinheit
-
Multiplikation/ALU Multiplikation
-
Rotation/ALU ALU
-
So haben Datenübertragungen in bezug auf die globale
Adreßeinheit die höchste Priorität und Dateneinheitsoperationen die
geringste Priorität. Da mehr als eine Dateneinheitoperation
während eines einzigen Befehls auftreten kann, gibt es einen
weiteren Prioritätsrang für solche Operationen. Wenn eine
Multiplikationsoperation und eine ALU-Operation das gleiche
Zielregister haben, dann wird nur das Ergebnis der
Multiplikationsoperation gespeichert. In diesem Fall werden keine
Statusbits durch die abgebrochene ALU-Operation verändert. Es ist zu
erkennen, daß dann, wenn das Speichern des Ergebnisses einer
ALU-Operation aufgrund eines Konfliktes mit einer in bezug auf
eine globale Adreßeinheit oder eine lokale Adreßeinheit
erfolgendem Datentransfer abgebrochen wird, die Statusbits in
normaler Weise gesetzt werden. Wenn ein
Barrel-Rotations-Ergebnis und eine ALU-Operation das gleiche Ziel haben, dann werden
nur die Ergebnisse der ALU-Operation gespeichert. In diesem
Falle werden die Statusbits in normaler Weise für die
abgeschlossene ALU-Operation gesetzt.
-
Der Multiprozessor-IC 101 ist in der Fig. 19 als Teil
eines Farbfaxgerätes dargestellt. Das Modem 1301 ist in
bidirektionaler Weise mit einer Telefonleitung zum Senden und
Empfangen verbunden. Das Modem 1301 kommuniziert darüber hinaus
mit dem Puffer 1302, der auch mit dem Bildsystembus verbunden
ist. Das Modem 1301 empfängt ein Faxsignal über die
Telefonleitung. Das Modem 1301 demoduliert diese Signale, die dann
vorübergehend in dem Puffer 1302 gespeichert werden. Die
Übertragungssteuereinheit 80 bedient den Puffer 1302, indem sie
Daten in die Datenspeicher 22, 23 und 24 für die Verarbeitung
durch den digitalen Bild-/Graphikprozessor 71 überträgt. In dem
Fall, daß der digitale Bild-/Graphikprozessor 71 nicht mit den
ankommenden Daten Schritt halten kann, kann die
Übertragungssteuereinheit 80 auch Daten von dem Puffer 1302 in den Speicher
9 übertragen. Der digitale Bild-/Graphikprozessor 71
verarbeitet die Bilddaten des ankommenden Faxes. Zu dieser Verarbeitung
können eine Farbdekomprimierung, eine Rauschreduktion, eine
Fehlerkorrektur, eine Farbbasiskorrektur und dergleichen
gehören. Nach der Verarbeitung überträgt die
Übertragungssteuereinheit 80 die Bilddaten von den Datenspeichern 22, 23
und 24 in den VRAM 1303. Die Druckersteuereinheit 1304 ruft die
Bilddaten unter der Steuerung der Bildsteuereinheit 90 ab und
liefert sie zum Farbdrucker 1305, der den Ausdruck liefert.
-
Das in der Fig. 19 dargestellte Gerät kann auch ein
Farbfax senden. Die Bilderzeugungsvorrichtung 3 scannt das
Ausgangsdokument. Die Bilderzeugungsvorrichtung 3 liefert die
rohen Bilddaten zur Bilderfassungssteuereinheit 4, die unter
der Steuerung der Bildsteuereinheit 90 arbeitet. Diese
Bilddaten werden in dem VRAM 1303 gespeichert. Es ist zu
erkennen, daß die in der Fig. 19 dargestellte Ausführungsform
den VRAM 1303 sowohl für das Bilderfassen als auch für die
Bildanzeige verwendet, was im Gegensatz zu der Ausführungsform
der Fig. 1 steht, die getrennte VRAMs verwendet. Die
Übertragungssteuereinheit 80 überträgt diese Bilddaten zu den
Datenspeichern 22, 23 und 24. Der digitale
Bild-/Graphikprozessor 71 verarbeitet dann die Bilddaten für die
Bildkompression, die Fehlerkorrekturredundanz, die
Farbbasiskorrektur und dergleichen. Die verarbeiteten Daten werden zum
Puffer 1303 durch die Übertragungssteuereinheit 80 übertragen,
so wie sie benötigt werden, um die Farbübertragung zu
unterstützen. In Abhängigkeit von den relativen
Datenübertragungsgeschwindigkeiten kann die Übertragungssteuereinheit 80 Daten
vorübergehend in den Speicher 9 speichern, bevor sie zum Puffer
1302 übertragen werden. Diese Bilddaten in dem Puffer 1302
werden durch das Modem 1301 moduliert und über die
Telefonleitung übertragen.
-
Es ist zu erkennen, daß das Vorhandensein einer
Bilderzeugungsvorrichtung und eines Farbdruckers in demselben System
dieses System in die Lage versetzt, auch als Farbkopierer zu
arbeiten. In diesem Fall braucht eine Datenkompression und eine
Datendekompression nicht erforderlich zu sein. Jedoch ist der
digitale Bild-/Graphikprozessor 71 immer noch zur
Rauschverminderung und zur Farbbasiskorrektur nützlich. Der digitale Bild-/
Graphikprozessor 71 kann auch so programmiert werden, daß er in
gezielter Weise Farben verschiebt, so daß die Kopie im
Vergleich zum Original unterschiedliche Farben aufweist. Dieses
Verfahren, das als Falschfarbgebung bekannt ist, ist nützlich,
um den dynamischen Bereich der Daten an den dynamischen Bereich
der verfügbaren Druckfarben anzupassen.