DE69419697T2 - Arithmetisch-logische Einheit mit mehreren unabhängigen Abschnitten und ein Register zur Speicherung der Statusbits - Google Patents

Arithmetisch-logische Einheit mit mehreren unabhängigen Abschnitten und ein Register zur Speicherung der Statusbits

Info

Publication number
DE69419697T2
DE69419697T2 DE69419697T DE69419697T DE69419697T2 DE 69419697 T2 DE69419697 T2 DE 69419697T2 DE 69419697 T DE69419697 T DE 69419697T DE 69419697 T DE69419697 T DE 69419697T DE 69419697 T2 DE69419697 T2 DE 69419697T2
Authority
DE
Germany
Prior art keywords
bit
alu
data
input
bits
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69419697T
Other languages
English (en)
Other versions
DE69419697D1 (de
Inventor
Keith Balmer
Jeremiah E. Golston
Robert J. Gove
Karl M. Guttag
Nicholas Ing-Simmons
Sydney W. Poland
Christopher J. Read
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Texas Instruments Inc
Original Assignee
Texas Instruments Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Texas Instruments Inc filed Critical Texas Instruments Inc
Application granted granted Critical
Publication of DE69419697D1 publication Critical patent/DE69419697D1/de
Publication of DE69419697T2 publication Critical patent/DE69419697T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • G06F7/575Basic arithmetic logic units, i.e. devices selectable to perform either addition, subtraction or one of several logical operations, using, at least partially, the same circuitry
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30094Condition code generation, e.g. Carry, Zero flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3812Devices capable of handling different types of numbers
    • G06F2207/382Reconfigurable for different fixed word lengths
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3828Multigauge devices, i.e. capable of handling packed numbers without unpacking them
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Image Processing (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)
  • Processing Or Creating Images (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Editing Of Facsimile Originals (AREA)
  • Controls And Circuits For Display Device (AREA)
  • Digital Computer Display Output (AREA)
  • Image Generation (AREA)

Description

  • 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) &rarr; Multiflag- Register,
  • 1 0 0 1 ALU-Multioperationen, Nullergebnis(se) &rarr; Multiflag-Register
  • 1 0 1 0 ALU-Multioperationen, Übertragsausgang (bzw. -ausgänge) &rarr; Multiflag- Register, rotiere um "Asize"-Feld des Status-Registers
  • 1 0 1 1 ALU-Multioperationen, Nullergebnis(se) &rarr; Multiflag-Register, rotiere um "Asize"-Feld des Status-Registers
  • 1 1 0 0 ALU-Multioperationen, Übertragsausgang (bzw. -ausgänge) &rarr; Multiflag- Register, lösche Multiflag-Register
  • 1 1 0 1 ALU-Multioperationen, Nullergebnis(se) &rarr; 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) &rarr; Multiflag"-Modifikation werden das Übertragsausgangsbit oder die Übertragsausgangsbits in dem Multiflag-Register 211 gespeichert. Bei der "Nullergebnis(se) &rarr; 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.

Claims (8)

1. Datenverarbeitungsvorrichtung mit einer arithmetischlogischen Einheit (ALU) (230) mit Dateneingängen (A, B) für mehrere mehrere Bits aufweisende digitale Eingangssignale, die entsprechende Eingaben repräsentieren, wobei die arithmetischlogische Einheit (ALU) in eine auswählbare Anzahl mehrerer unabhängiger Abschnitte (301, 302, 303, 304) gleicher Größe teilbar ist, von denen jeder (301, 302, 303, 304) 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 arithmetisch-logische Einheit (ALU) (230) einen Status-Detektor (321, 322, 323, 323) 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 (211) aufweist, das eine Anzahl an Bitspeicherstellen aufweist, die größer als eine maximal auswählbare Anzahl an Abschnitten der arithmetischlogischen 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.
2. Datenverarbeitungsvorrichtung nach Anspruch 1, bei der das Flag-Register (211) mit der arithmetisch-logischen Einheit (ALU) (230) verbunden ist, und ein digitaler Zustand jedes der Einzelbit-Statussignale, die an vorherbestimmten Plätzen des Flag-Registers (211) gespeichert sind, deren Anzahl der ausgewählten Anzahl an Abschnitten der arithmetisch-logischen Einheit (230) (ALU) entspricht, eine Auswahl aus zwei Arten von Kombinationen von Eingaben bestimmt, die durch eine einzelne Operation der arithmetisch-logischen Einheit (ALU) (230) in den jeweiligen Abschnitten (301, 302, 303, 304) gebildet werden.
3. Datenverarbeitungsvorrichtung nach Anspruch 2, bei der die Einzelbit-Statussignale, die an vorherbestimmten Plätzen des Flag-Registers (211) gespeichert sind, bestimmen, ob die arithmetisch-logische Einheit (ALU) (230) eine Addition oder eine Subtraktion in den jeweiligen Abschnitten (301, 302, 303, 304) während der einzelnen Operation durchführt.
4. Datenverarbeitungsvorrichtung nach Anspruch 1 mit einer Rotationsanzeige, die anzeigt, ob eine Rotation des Flag- Registers (211) vorliegt oder nicht; und bei der das Flag- Register (211) mit dem Rotationsbit verbunden ist, um die Rotationsanzeige zu empfangen, und bei der das Flag-Register (211) die darin gespeicherten Bits einer Rotation um eine Anzahl an Plätzen unterzieht, die der ausgewählten Anzahl an Abschnitten (301, 302, 303, 304) der arithmetisch-logischen Einheit (ALU) (230) entspricht, bevor die mehreren Einzelbit- Statussignale an vorherbestimmten Plätzen in dem Flag-Register (211) gespeichert werden, die durch die Rotation frei geworden sind, wenn die Rotationsanzeige eine Rotation des Flag- Registers (211) anzeigt; und die mehreren Einzelbit- Statussignale durch Überschreiben vorher vorhandener Bits an vorhergestimmten Plätzen in dem Flag-Register (211) speichert, wenn die Rotationsanzeige keine Rotation des Flag-Registers (211) anzeigt.
5. Datenverarbeitungsvorrichtung nach Anspruch 4, bei der die Rotationsanzeige durch einen Befehl durchgeführt wird, der die Operation der arithmetisch-logischen Einheit (ALU) (230) steuert.
6. Datenverarbeitungsvorrichtung nach einem der Ansprüche 1 bis 4 mit einer Löschungsanzeige, die entweder ein Löschen oder Nichtlöschen des Flag-Registers (211) anzeigt; und bei der das Flag-Register (211) die Löschungsanzeige empfängt, wobei das Flag-Register (211) sämtliche darin vor dem Speichern der Einzelbit-Statussignale gespeicherten Bits löscht, wenn die Löschungsanzeige das Löschen des Flag-Registers (211) anzeigt, und das Flag-Register (211) sämtliche darin vor dem Speichern der Einzelbit-Statussignale gespeicherten Bits nicht löscht, wenn die Löschungsanzeige das Nichtlöschen des Flag-Registers (211) anzeigt.
7. Datenverarbeitungsvorrichtung nach Anspruch 6, bei der die Löschungsanzeige durch einen Befehl durchgeführt wird, der die Operation der arithmetisch-logischen Einheit (ALU) (230) steuert.
8. Datenverarbeitungsvorrichtung nach Anspruch 1, bei der die arithmetisch-logische Einheit (ALU) (230) einen ersten Dateneingang (A), einen zweiten Dateneingang (B) und einen dritten Dateneingang (C) für entsprechende erste, zweite und dritte mehrere Bits aufweisende digitale Signale aufweist, und die Datenverarbeitungsvorrichtung eine erste Datenquelle (205), die das erste mehrere Bits aufweisende digitale Signal zu dem ersten Dateneingang der arithmetisch-logischen Einheit (ALU) liefert, eine zweite Datenquelle (206), die das zweite mehrere Bits aufweisende digitale Signal zu dem zweiten Dateneingang der arithmetisch-logischen Einheit (ALU) liefert, und eine mit dem Flag-Register (211) verbundene Erweiterungsschaltung (238) umfaßt, die das dritte mehrere Bits aufweisende Signal zu dem dritten Dateneingang (C) der arithmetisch-logischen Einheit (ALU) (230) liefert, indem sie eine Anzahl aufeinanderfolgender Bits des Flag-Registers (230), die der ausgewählten Anzahl an Abschnitten (301, 302, 303, 304) der arithmetisch-logischen Einheit (ALU) (230) entspricht, auswählt, wobei jedes ausgewählte Bit eine Anzahl von Malen wiederholt wird, um jedes Bit eines entsprechenden Abschnitts (301, 302, 303, 304) der arithmetisch-logischen Einheit (ALU) (230) zu füllen.
DE69419697T 1993-11-30 1994-11-30 Arithmetisch-logische Einheit mit mehreren unabhängigen Abschnitten und ein Register zur Speicherung der Statusbits Expired - Lifetime DE69419697T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US08/158,742 US5640578A (en) 1993-11-30 1993-11-30 Arithmetic logic unit having plural independent sections and register storing resultant indicator bit from every section

Publications (2)

Publication Number Publication Date
DE69419697D1 DE69419697D1 (de) 1999-09-02
DE69419697T2 true DE69419697T2 (de) 2000-02-17

Family

ID=22569489

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69419697T Expired - Lifetime DE69419697T2 (de) 1993-11-30 1994-11-30 Arithmetisch-logische Einheit mit mehreren unabhängigen Abschnitten und ein Register zur Speicherung der Statusbits

Country Status (5)

Country Link
US (1) US5640578A (de)
EP (1) EP0655680B1 (de)
JP (1) JPH07287567A (de)
KR (1) KR100319353B1 (de)
DE (1) DE69419697T2 (de)

Families Citing this family (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5638312A (en) * 1995-03-03 1997-06-10 Hal Computer Systems, Inc. Method and apparatus for generating a zero bit status flag in a microprocessor
US6643765B1 (en) 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US6092094A (en) * 1996-04-17 2000-07-18 Advanced Micro Devices, Inc. Execute unit configured to selectably interpret an operand as multiple operands or as a single operand
US5826070A (en) * 1996-08-30 1998-10-20 International Business Machines Corporation Apparatus and method for maintaining status flags and condition codes using a renaming technique in an out of order floating point execution unit
GB2317464A (en) * 1996-09-23 1998-03-25 Advanced Risc Mach Ltd Register addressing in a data processing apparatus
GB2317469B (en) * 1996-09-23 2001-02-21 Advanced Risc Mach Ltd Data processing system register control
GB2317465B (en) * 1996-09-23 2000-11-15 Advanced Risc Mach Ltd Data processing apparatus registers.
GB2317466B (en) * 1996-09-23 2000-11-08 Advanced Risc Mach Ltd Data processing condition code flags
GB2317467B (en) * 1996-09-23 2000-11-01 Advanced Risc Mach Ltd Input operand control in data processing systems
US5784602A (en) * 1996-10-08 1998-07-21 Advanced Risc Machines Limited Method and apparatus for digital signal processing for integrated circuit architecture
US6952823B2 (en) * 1998-09-01 2005-10-04 Pkware, Inc. Software patch generator using compression techniques
US6318156B1 (en) * 1999-10-28 2001-11-20 Micro Motion, Inc. Multiphase flow measurement system
FR2802660B1 (fr) * 1999-12-21 2002-11-29 St Microelectronics Sa Procede pour effectuer des operations avec une arithmetique variable
JP2001216136A (ja) * 2000-02-01 2001-08-10 Toshiba Corp 加算回路およびプロセッサ
US6671797B1 (en) 2000-02-18 2003-12-30 Texas Instruments Incorporated Microprocessor with expand instruction for forming a mask from one bit
US20060173847A1 (en) * 2000-03-09 2006-08-03 Pkware, Inc. System and method for manipulating and managing computer archive files
US8230482B2 (en) 2000-03-09 2012-07-24 Pkware, Inc. System and method for manipulating and managing computer archive files
US20060143199A1 (en) * 2000-03-09 2006-06-29 Pkware, Inc. System and method for manipulating and managing computer archive files
US20060143237A1 (en) * 2000-03-09 2006-06-29 Pkware, Inc. System and method for manipulating and managing computer archive files
US20060143180A1 (en) * 2000-03-09 2006-06-29 Pkware, Inc. System and method for manipulating and managing computer archive files
US6879988B2 (en) * 2000-03-09 2005-04-12 Pkware System and method for manipulating and managing computer archive files
US8959582B2 (en) 2000-03-09 2015-02-17 Pkware, Inc. System and method for manipulating and managing computer archive files
US7844579B2 (en) * 2000-03-09 2010-11-30 Pkware, Inc. System and method for manipulating and managing computer archive files
US20050015608A1 (en) * 2003-07-16 2005-01-20 Pkware, Inc. Method for strongly encrypting .ZIP files
US20060143249A1 (en) * 2000-03-09 2006-06-29 Pkware, Inc. System and method for manipulating and managing computer archive files
US20060155788A1 (en) * 2000-03-09 2006-07-13 Pkware, Inc. System and method for manipulating and managing computer archive files
US20060143253A1 (en) * 2000-03-09 2006-06-29 Pkware, Inc. System and method for manipulating and managing computer archive files
US20060248311A1 (en) * 2000-05-15 2006-11-02 Jennings Earle W Method and apparatus of dsp resource allocation and use
US7119576B1 (en) 2000-09-18 2006-10-10 Altera Corporation Devices and methods with programmable logic and digital signal processing regions
US7346644B1 (en) 2000-09-18 2008-03-18 Altera Corporation Devices and methods with programmable logic and digital signal processing regions
US6630936B1 (en) * 2000-09-28 2003-10-07 Intel Corporation Mechanism and method for enabling two graphics controllers to each execute a portion of a single block transform (BLT) in parallel
US7725513B2 (en) * 2003-01-15 2010-05-25 Ikanos Communications, Inc. Minimum processor instruction for implementing weighted fair queuing and other priority queuing
KR100426655B1 (ko) * 2003-09-18 2004-04-13 (주)유디피 Agc 기능이 개선된 다채널 영상 신호 캡쳐 방법 및시스템
JP4300151B2 (ja) * 2004-04-19 2009-07-22 Okiセミコンダクタ株式会社 演算処理装置
US7477256B1 (en) * 2004-11-17 2009-01-13 Nvidia Corporation Connecting graphics adapters for scalable performance
US8620980B1 (en) 2005-09-27 2013-12-31 Altera Corporation Programmable device with specialized multiplier blocks
US8335810B2 (en) * 2006-01-31 2012-12-18 Qualcomm Incorporated Register-based shifts for a unidirectional rotator
US8301681B1 (en) 2006-02-09 2012-10-30 Altera Corporation Specialized processing block for programmable logic device
US8041759B1 (en) 2006-02-09 2011-10-18 Altera Corporation Specialized processing block for programmable logic device
US8266199B2 (en) 2006-02-09 2012-09-11 Altera Corporation Specialized processing block for programmable logic device
US8266198B2 (en) 2006-02-09 2012-09-11 Altera Corporation Specialized processing block for programmable logic device
US7836117B1 (en) 2006-04-07 2010-11-16 Altera Corporation Specialized processing block for programmable logic device
US7822799B1 (en) 2006-06-26 2010-10-26 Altera Corporation Adder-rounder circuitry for specialized processing block in programmable logic device
US20080016320A1 (en) * 2006-06-27 2008-01-17 Amitabh Menon Vector Predicates for Sub-Word Parallel Operations
US8386550B1 (en) 2006-09-20 2013-02-26 Altera Corporation Method for configuring a finite impulse response filter in a programmable logic device
US8386553B1 (en) 2006-12-05 2013-02-26 Altera Corporation Large multiplier for programmable logic device
US7930336B2 (en) 2006-12-05 2011-04-19 Altera Corporation Large multiplier for programmable logic device
US7814137B1 (en) 2007-01-09 2010-10-12 Altera Corporation Combined interpolation and decimation filter for programmable logic device
US8650231B1 (en) 2007-01-22 2014-02-11 Altera Corporation Configuring floating point operations in a programmable device
US7865541B1 (en) 2007-01-22 2011-01-04 Altera Corporation Configuring floating point operations in a programmable logic device
US8645450B1 (en) 2007-03-02 2014-02-04 Altera Corporation Multiplier-accumulator circuitry and methods
US7949699B1 (en) 2007-08-30 2011-05-24 Altera Corporation Implementation of decimation filter in integrated circuit device using ram-based data storage
US8959137B1 (en) 2008-02-20 2015-02-17 Altera Corporation Implementing large multipliers in a programmable integrated circuit device
US8244789B1 (en) 2008-03-14 2012-08-14 Altera Corporation Normalization of floating point operations in a programmable integrated circuit device
US8626815B1 (en) 2008-07-14 2014-01-07 Altera Corporation Configuring a programmable integrated circuit device to perform matrix multiplication
US8755515B1 (en) 2008-09-29 2014-06-17 Wai Wu Parallel signal processing system and method
JP2010086256A (ja) * 2008-09-30 2010-04-15 Mitsubishi Electric Corp 並列処理型プロセッサ
US8255448B1 (en) 2008-10-02 2012-08-28 Altera Corporation Implementing division in a programmable integrated circuit device
US8307023B1 (en) 2008-10-10 2012-11-06 Altera Corporation DSP block for implementing large multiplier on a programmable integrated circuit device
US8805916B2 (en) * 2009-03-03 2014-08-12 Altera Corporation Digital signal processing circuitry with redundancy and bidirectional data paths
US8706790B1 (en) 2009-03-03 2014-04-22 Altera Corporation Implementing mixed-precision floating-point operations in a programmable integrated circuit device
US8886696B1 (en) 2009-03-03 2014-11-11 Altera Corporation Digital signal processing circuitry with redundancy and ability to support larger multipliers
US8645449B1 (en) 2009-03-03 2014-02-04 Altera Corporation Combined floating point adder and subtractor
US8468192B1 (en) 2009-03-03 2013-06-18 Altera Corporation Implementing multipliers in a programmable integrated circuit device
US8549055B2 (en) 2009-03-03 2013-10-01 Altera Corporation Modular digital signal processing circuitry with optionally usable, dedicated connections between modules of the circuitry
US8650236B1 (en) 2009-08-04 2014-02-11 Altera Corporation High-rate interpolation or decimation filter in integrated circuit device
US8412756B1 (en) 2009-09-11 2013-04-02 Altera Corporation Multi-operand floating point operations in a programmable integrated circuit device
US8396914B1 (en) 2009-09-11 2013-03-12 Altera Corporation Matrix decomposition in an integrated circuit device
US8539016B1 (en) 2010-02-09 2013-09-17 Altera Corporation QR decomposition in an integrated circuit device
US7948267B1 (en) 2010-02-09 2011-05-24 Altera Corporation Efficient rounding circuits and methods in configurable integrated circuit devices
US8601044B2 (en) 2010-03-02 2013-12-03 Altera Corporation Discrete Fourier Transform in an integrated circuit device
US8458243B1 (en) 2010-03-03 2013-06-04 Altera Corporation Digital signal processing circuit blocks with support for systolic finite-impulse-response digital filtering
US8484265B1 (en) 2010-03-04 2013-07-09 Altera Corporation Angular range reduction in an integrated circuit device
US8510354B1 (en) 2010-03-12 2013-08-13 Altera Corporation Calculation of trigonometric functions in an integrated circuit device
US8539014B2 (en) 2010-03-25 2013-09-17 Altera Corporation Solving linear matrices in an integrated circuit device
US8538205B2 (en) * 2010-05-14 2013-09-17 Mobileye Technologies Ltd. Multi-function summing machine
US8589463B2 (en) 2010-06-25 2013-11-19 Altera Corporation Calculation of trigonometric functions in an integrated circuit device
US8862650B2 (en) 2010-06-25 2014-10-14 Altera Corporation Calculation of trigonometric functions in an integrated circuit device
US8577951B1 (en) 2010-08-19 2013-11-05 Altera Corporation Matrix operations in an integrated circuit device
US8645451B2 (en) 2011-03-10 2014-02-04 Altera Corporation Double-clocked specialized processing block in an integrated circuit device
US9600278B1 (en) 2011-05-09 2017-03-21 Altera Corporation Programmable device using fixed and configurable logic to implement recursive trees
US8812576B1 (en) 2011-09-12 2014-08-19 Altera Corporation QR decomposition in an integrated circuit device
US8949298B1 (en) 2011-09-16 2015-02-03 Altera Corporation Computing floating-point polynomials in an integrated circuit device
US9053045B1 (en) 2011-09-16 2015-06-09 Altera Corporation Computing floating-point polynomials in an integrated circuit device
US8762443B1 (en) 2011-11-15 2014-06-24 Altera Corporation Matrix operations in an integrated circuit device
US8543634B1 (en) 2012-03-30 2013-09-24 Altera Corporation Specialized processing block for programmable integrated circuit device
US9098332B1 (en) 2012-06-01 2015-08-04 Altera Corporation Specialized processing block with fixed- and floating-point structures
US8996600B1 (en) 2012-08-03 2015-03-31 Altera Corporation Specialized processing block for implementing floating-point multiplier with subnormal operation support
US9207909B1 (en) 2012-11-26 2015-12-08 Altera Corporation Polynomial calculations optimized for programmable integrated circuit device structures
US9189200B1 (en) 2013-03-14 2015-11-17 Altera Corporation Multiple-precision processing block in a programmable integrated circuit device
US9348795B1 (en) 2013-07-03 2016-05-24 Altera Corporation Programmable device using fixed and configurable logic to implement floating-point rounding
US9379687B1 (en) 2014-01-14 2016-06-28 Altera Corporation Pipelined systolic finite impulse response filter
US9684488B2 (en) 2015-03-26 2017-06-20 Altera Corporation Combined adder and pre-adder for high-radix multiplier circuit
US10339057B2 (en) * 2016-12-20 2019-07-02 Texas Instruments Incorporated Streaming engine with flexible streaming engine template supporting differing number of nested loops with corresponding loop counts and loop offsets
US10942706B2 (en) 2017-05-05 2021-03-09 Intel Corporation Implementation of floating-point trigonometric functions in an integrated circuit device
CN109871181A (zh) * 2017-12-01 2019-06-11 航天信息股份有限公司 一种对象存取方法及装置

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3937940A (en) * 1974-11-26 1976-02-10 Texas Instruments Incorporated Direct compare in an electronic digital calculator
US4179746A (en) * 1976-07-19 1979-12-18 Texas Instruments Incorporated Digital processor system with conditional carry and status function in arithmetic unit
US4312034A (en) * 1979-05-21 1982-01-19 Motorola, Inc. ALU and Condition code control unit for data processor
US4467444A (en) * 1980-08-01 1984-08-21 Advanced Micro Devices, Inc. Processor unit for microcomputer systems
JPS6053349B2 (ja) * 1981-06-19 1985-11-25 株式会社日立製作所 画像処理プロセツサ
US4451885A (en) * 1982-03-01 1984-05-29 Mostek Corporation Bit operation method and circuit for microcomputer
US4592005A (en) * 1982-07-06 1986-05-27 Sperry Corporation Masked arithmetic logic unit
US4785393A (en) * 1984-07-09 1988-11-15 Advanced Micro Devices, Inc. 32-Bit extended function arithmetic-logic unit on a single chip
US4692888A (en) * 1984-10-03 1987-09-08 Advanced Micro Devices, Inc. Method and apparatus for generating and summing the products of pairs of numbers
US4653075A (en) * 1985-03-29 1987-03-24 Ford Aerospace & Communications Corp. BPSK synchronizer using computational analysis
US5249266A (en) * 1985-10-22 1993-09-28 Texas Instruments Incorporated Data processing apparatus with self-emulation capability
US5140687A (en) * 1985-10-22 1992-08-18 Texas Instruments Incorporated Data processing apparatus with self-emulation capability
US5294918A (en) * 1985-11-06 1994-03-15 Texas Instruments Incorporated Graphics processing apparatus having color expand operation for drawing color graphics from monochrome data
US4752893A (en) * 1985-11-06 1988-06-21 Texas Instruments Incorporated Graphics data processing apparatus having image operations with transparent color having a selectable number of bits
US5095301A (en) * 1985-11-06 1992-03-10 Texas Instruments Incorporated Graphics processing apparatus having color expand operation for drawing color graphics from monochrome data
US4689807A (en) * 1985-11-06 1987-08-25 Texas Instruments Incorporated Linked cell discharge detector having improved response time
US4933878A (en) * 1988-07-07 1990-06-12 Texas Instruments Incorporated Graphics data processing apparatus having non-linear saturating operations on multibit color data
US5231694A (en) * 1986-01-23 1993-07-27 Texas Instruments Incorporated Graphics data processing apparatus having non-linear saturating operations on multibit color data
US4789957A (en) * 1986-03-28 1988-12-06 Texas Instruments Incorporated Status output for a bit slice ALU
US4847802A (en) * 1986-06-12 1989-07-11 Advanced Micro Devices, Inc. Method and apparatus for identifying the precision of an operand in a multiprecision floating-point processor
US4811266A (en) * 1986-11-05 1989-03-07 Honeywell Bull Inc. Multifunction arithmetic indicator
JPH07113886B2 (ja) * 1987-05-11 1995-12-06 株式会社日立製作所 演算回路
US4888722A (en) * 1987-07-02 1989-12-19 General Datacomm, Inc. Parallel arithmetic-logic unit for as an element of digital signal processor
US4985848A (en) * 1987-09-14 1991-01-15 Visual Information Technologies, Inc. High speed image processing system using separate data processor and address generator
US4924422A (en) * 1988-02-17 1990-05-08 International Business Machines Corporation Method and apparatus for modified carry-save determination of arithmetic/logic zero results
US4901270A (en) * 1988-09-23 1990-02-13 Intel Corporation Four-to-two adder cell for parallel multiplication
US5103419A (en) * 1989-02-02 1992-04-07 Matsushita Electric Industrial Co., Ltd. Circuit for calculating the sum of products of data
US5020014A (en) * 1989-02-07 1991-05-28 Honeywell Inc. Generic interpolation pipeline processor
US5081698A (en) * 1989-02-14 1992-01-14 Intel Corporation Method and apparatus for graphics display data manipulation
US5001662A (en) * 1989-04-28 1991-03-19 Apple Computer, Inc. Method and apparatus for multi-gauge computation
US5185714A (en) * 1989-09-19 1993-02-09 Canon Kabushiki Kaisha Arithmetic operation processing apparatus
US5197140A (en) * 1989-11-17 1993-03-23 Texas Instruments Incorporated Sliced addressing multi-processor and method of operation
US5226125A (en) * 1989-11-17 1993-07-06 Keith Balmer Switch matrix having integrated crosspoint logic and method of operation
US5239654A (en) * 1989-11-17 1993-08-24 Texas Instruments Incorporated Dual mode SIMD/MIMD processor providing reuse of MIMD instruction memories as data memories when operating in SIMD mode
US5212777A (en) * 1989-11-17 1993-05-18 Texas Instruments Incorporated Multi-processor reconfigurable in single instruction multiple data (SIMD) and multiple instruction multiple data (MIMD) modes and method of operation
JP2559868B2 (ja) * 1990-01-06 1996-12-04 富士通株式会社 情報処理装置
US5206828A (en) * 1990-04-02 1993-04-27 Advanced Micro Devices, Inc. Special carry save adder for high speed iterative division
DE4103882A1 (de) * 1990-06-01 1991-12-12 Pioneer Electronic Corp Programm-bearbeitungsvorrichtung und digitalsignal-prozessor

Also Published As

Publication number Publication date
EP0655680B1 (de) 1999-07-28
EP0655680A1 (de) 1995-05-31
JPH07287567A (ja) 1995-10-31
DE69419697D1 (de) 1999-09-02
KR100319353B1 (ko) 2002-06-20
KR950015060A (ko) 1995-06-16
US5640578A (en) 1997-06-17

Similar Documents

Publication Publication Date Title
DE69419697T2 (de) Arithmetisch-logische Einheit mit mehreren unabhängigen Abschnitten und ein Register zur Speicherung der Statusbits
DE69430516T2 (de) Arithmetisch-logische Einheit mit drei Eingängen, die die Summe einer ersten und einer zweiten booleschen Kombination berechnet
DE69428499T2 (de) Bedingtes Speicherladen von einem Registerpaar
DE69430510T2 (de) Arithmetik-Logikschaltung mit drei Eingängen
DE69432659T2 (de) Rotationsregister zur orthogonalen Datentransformation
EP0655676A2 (de) Arithmetisch-logische Einheit mit drei Eingängen, die gemischte arithmetische und boolesche Kombinationen macht
DE69811877T2 (de) ARITHMETISCHER PROZESSOR, der endliche Felder Arithmetik und ganzzahlige modular Arithmetik kombiniert.
DE69430838T2 (de) Schaltung und Verfahren zur parallelen Verschiebung und Addition
DE69625790T2 (de) Verfahren und vorrichtung für anpassbare operationen durch einen prozessor
US7389317B2 (en) Long instruction word controlling plural independent processor operations
US6219688B1 (en) Method, apparatus and system for sum of plural absolute differences
US5696954A (en) Three input arithmetic logic unit with shifting means at one input forming a sum/difference of two inputs logically anded with a third input logically ored with the sum/difference logically anded with an inverse of the third input
DE19735348A1 (de) Einzelbefehl-Mehrdaten-Verarbeitung unter Verwendung von mehreren Bänken von Vektorregistern
US5596519A (en) Iterative division apparatus, system and method employing left most one&#39;s detection and left most one&#39;s detection with exclusive OR
DE2900324A1 (de) Mikroprogrammierbare arithmetische fliesskommaeinheit
DE69901338T2 (de) Mikroprozessor mit mehreren registersätzen, die den gleichen logischen raum besitzen
US5512896A (en) Huffman encoding method, circuit and system employing most significant bit change for size detection
US6173305B1 (en) Division by iteration employing subtraction and conditional source selection of a prior difference or a left shifted remainder
KR100315408B1 (ko) 이동기를구비한3입력산술논리유닛
DE69428504T2 (de) Drei-Eingänge-Arithmetik-Logik-Einheit mit Trommel-Rotationsschaltung
JPH08161460A (ja) 第1の入力に加算された第2の入力と第3の入力との第1のブール組合せプラス第2の入力と第3の入力の第2のブール組合せの和を形成する3入力算術論理装置
JPH087082A (ja) バレル回転子及びマスク発生器を有する3入力算術論理装置

Legal Events

Date Code Title Description
8364 No opposition during term of opposition