DE69835392T2 - Graphisches Verarbeitungssystem - Google Patents

Graphisches Verarbeitungssystem Download PDF

Info

Publication number
DE69835392T2
DE69835392T2 DE69835392T DE69835392T DE69835392T2 DE 69835392 T2 DE69835392 T2 DE 69835392T2 DE 69835392 T DE69835392 T DE 69835392T DE 69835392 T DE69835392 T DE 69835392T DE 69835392 T2 DE69835392 T2 DE 69835392T2
Authority
DE
Germany
Prior art keywords
instruction
data
stream
memory
mode
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
DE69835392T
Other languages
English (en)
Other versions
DE69835392D1 (de
Inventor
c/o Canon Inf.Syst.Res.A.PTY LTD Ian North Ryde Gibson
Timothy M. c/o Canon Inf.Syst.Res.A. North Ryde Long
Christopher Eight Mile Plain Amies
c/o Canon Inf.Syst.Res.A.PTY LTD Graham North Ryde Stoney
c/o Canon Inf.Syst.Res.A.PTY LTD Michael J. North Ryde Webb
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.)
Canon Inc
Original Assignee
Canon 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
Priority claimed from AUPO6479A external-priority patent/AUPO647997A0/en
Priority claimed from AUPO6492A external-priority patent/AUPO649297A0/en
Priority claimed from AUPO6480A external-priority patent/AUPO648097A0/en
Priority claimed from AUPO6481A external-priority patent/AUPO648197A0/en
Priority claimed from AUPO6483A external-priority patent/AUPO648397A0/en
Priority claimed from AUPO6482A external-priority patent/AUPO648297A0/en
Priority claimed from AUPO6484A external-priority patent/AUPO648497A0/en
Priority claimed from AUPO6486A external-priority patent/AUPO648697A0/en
Priority claimed from AUPO6487A external-priority patent/AUPO648797A0/en
Priority claimed from AUPO6485A external-priority patent/AUPO648597A0/en
Application filed by Canon Inc filed Critical Canon Inc
Application granted granted Critical
Publication of DE69835392D1 publication Critical patent/DE69835392D1/de
Publication of DE69835392T2 publication Critical patent/DE69835392T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Advance Control (AREA)

Description

  • Gebiet der Erfindung
  • Die vorliegende Erfindung bezieht sich auf Computerarchitekturen und insbesondere auf die der Erzeugung von graphischen Bildern zum Drucken oder Anzeigen ausschließlich zugeordneten Architekturen.
  • Hintergrund der Erfindung
  • Die Erzeugung und das Ausdrucken von komplizierten Bildern geht normalerweise über eine Beschreibung des Bilds in einer Seitenbeschreibungssprache (PDL) wie beispielsweise Postscript (Marke) vonstatten. Die Seitenbeschreibungssprache beschreibt normalerweise, wie das Ausgabebild aus einer Anzahl von Grundelementen und Zusammensetzungsoperatoren aufzubauen ist. Häufig besteht ein Hauptvorteil des Nutzens einer Seitenbeschreibungssprache in einer Vorrichtungsunabhängigkeit dahingehend, dass die gleiche Beschreibung auf mehreren Ausgabevorrichtungen genutzt werden kann, wobei ein Vorteil aus denjenigen Merkmalen in der Vorrichtung gezogen wird, die vorteilhafte Wirkungen bereitstellen können. Andere Vorteile schließen die Fähigkeit zum leichten Bearbeiten oder Berichtigen von Abschnitten der Seite ein. Ferner können Optimierungen bei der PDL realisiert werden, wodurch der Renderprozess beschleunigt wird.
  • Der Prozess des Nehmens einer Seitenbeschreibung und Erzeugens einer entsprechenden Seite zum Drucken aus der Beschreibung ist als Rasterung bekannt und nimmt Computerbetriebsmittel häufig stark in Anspruch. Wenn die PDL-Interpretation oder der Rasterungsprozess durch einen auf einem Host-CPU-System laufenden Softwareinterpretierer ausgeführt wird, ist es wahrscheinlich, dass der Softwareinterpretierer bei der Erzeugung jeder Seite ein wesentliches Ausmaß des CPU-Betriebsmittels derart in Anspruch nimmt, dass die Haupt-Host-CPU wenig Zeit hat, noch etwas anderes zu tun. Zusätzlich ist es wahrscheinlich, dass der Softwareinterpretierer eine übermäßig lange Zeit braucht, wenn jedes Bildelement in einem Bild dekomprimiert und/oder farbgewandelt werden muss.
  • Es ist bekannt, eine Hardwarebeschleunigung von verschiedenen Aspekten des Prozesses der Erzeugung eines graphischen Bilds vorzusehen. Es sind zum Beispiel Hardware-JPEG-Komprimierungs-/Dekomprimierungschips zum Durchführen einer Hardwarebeschleunigung des Komprimierungs-/Dekomprimierungsprozesses allgemein auf dem Markt erhältlich.
  • Der Typ der Ausgabevorrichtung wie beispielsweise ein Drucker oder eine Anzeige, auf dem oder der ein Bild zu erzeugen ist, kann in seinen Anforderungen zum Anzeigen eines Bilds sehr variabel sein. Sobald das Drucken einer Seite unternommen wird, erfordern einige Druckervorrichtungen es, dass Bildelementinformationen bezüglich der ganzen Seite vor dem Drucken oder innerhalb vorbestimmter Zeitperioden bereitgestellt werden, und können während des Druckens einer Seite nicht zu irgendeiner Zeit gestoppt werden. Andere Ausgabevorrichtungen arbeiten dahingehend in einer "bandorientierten" ("banded") Art und Weise, dass ein Band des Bilds zu einer Zeit gedruckt wird und eine beliebige Zeitperiode zwischen Bändern auftreten kann. Andere Ausgabevorrichtungen können aktualisierte Bildelementinformationen in einer beliebigen Art und Weise empfangen.
  • Wenn ein beliebiges Bild unter Verwendung verschiedener Drucker oder anderer Ausgabevorrichtungen so schnell wie möglich ausgedruckt wird, ist es sehr wünschenswert, die Ausgabevorrichtung mit Drucken (oder Anzeigen) "beschäftigt" ("busy") zu halten und nicht auf die erforderlichen Bildelementdaten zu warten. Jedes Mal, wenn die Ausgabevorrichtung auf Bildelementdaten warten muss, wird der Prozess des Druckens oder Anzeigens offensichtlich verzögert, was zu einer Frustration des Benutzers führt. Ferner ist es auch vorteilhaft, es sicherzustellen, dass alle auf das Problem der Rasterung angewendeten Betriebsmittel voll in einer produktiven Aktivität genutzt gehalten werden, um eine maximierte Ausgabedruckgeschwindigkeit (oder Ausgabeanzeigegeschwindigkeit) bereitzustellen.
  • Ferner kann abhängig von dem Typ des Ausgabeaufbaus das Ergebnis sehr anfällig für wahrgenommene Fehler sein. Bei einigen Videoanwendungen, bei denen ein Bild kontinuierlich aktualisiert wird, können zum Beispiel dann, wenn die neuen Daten nicht in ausreichender Zeit zugeführt werden, die alten Daten wieder angezeigt werden, und es wird kein Fehler durch den Betrachter wahrgenommen. Bei anderen Videoanwendungen wird jedoch das alte Bild mit der Aktualisierungsrate verworfen, und somit ist dann, wenn das neue Bild nicht verfügbar ist, eine offensichtliche Lücke oder Leere vorhanden. Mit einem Drucken ruft ein geringfügiger Defekt bei den Bilddaten häufig einen eklatanten Fehler hervor, da das sich ergebende Bild permanent ist. Ferner müssen wie vorstehend angeführt abhängig von der Natur des Druckers die Daten nicht nur in einer perfekten Form, sondern auch mit mehr als einer vorbestimmten Geschwindigkeit zugeführt werden. Mit einem Drucken kann jedoch eine Verzögerung vor einem Ausgeben des endgültigen Bilds toleriert werden.
  • Überdies erfordern moderne Computersysteme typischerweise ein Verfahren zur Speicherverwaltung, um für eine dynamische Speicherzuordnung zu sorgen. In dem Fall eines Systems mit einem Coprozessor oder mehreren Coprozessoren ist ein Verfahren zum Synchronisieren zwischen der dynamischen Zuordnung von Speicher und der Verwendung des Speichers durch einen Coprozessor notwendig.
  • Bei einer typischen Hardwarekonfiguration einer CPU mit einem spezialisierten Coprozessor nutzen beide gemeinsam eine Speicherbank. In einem derartigen System ist die CPU die einzige Einheit in dem System, die zum dynamischen Zuordnen von Speicher in der Lage ist. Sobald er durch die CPU zur Verwendung durch den Coprozessor zugeordnet ist, kann dieser Speicher durch den Coprozessor frei verwendet werden, bis er nicht mehr benötigt wird, wobei er an diesem Punkt durch die CPU freigegeben werden kann. Dies bedeutet, dass eine Form der Synchronisation zwischen der CPU und dem Coprozessor notwendig ist, um sicherzustellen, dass der Speicher nur freigegeben wird, nachdem seine Verwendung durch den Coprozessor beendet ist.
  • Mehrere mögliche Lösungen für dieses Problem weisen unerwünschte Leistungsauswirkungen auf. Eine Verwendung von statisch zugeordnetem Speicher würde den Bedarf an einer Synchronisation vermeiden, aber würde das System daran hindern, seine Speicherbetriebsmittelverwendung dynamisch anzupassen. Alternativ würde es die Parallelität wesentlich verringern und folglich die Gesamtsystemleistung verringern, wenn man die CPU blockieren und warten würde, bis der Coprozessor ein Durchführen jeder Operation beendet hat. Auf ähnliche Weise würde die Verwendung von Interrupts bzw. Unterbrechungen zum Angeben eines Abschlusses von Operationen durch den Coprozessor ebenfalls einen bedeutenden Verarbeitungsoverhead aufbürden, falls der Coprozessordurchsatz sehr hoch ist. Daher sind diese Lösungen gemäß dem Stand der Technik nicht attraktiv.
  • Zusätzlich zu dem Bedarf an einer hohen Leistung muss ein derartiges System auch elegant mit dynamischen Speicherengpässen fertig werden. Die meisten Computersysteme erlauben ein breites Spektrum von Speichergrößenkonfigurationen. Es ist wichtig, dass ein System, dem große Mengen von Speicher zur Verfügung stehen, die verfügbaren Betriebsmittel voll verwendet, um die Leistung zu maximieren. Systeme mit Minimalkonfigurationen müssen jedoch immer noch angemessen arbeiten, um verwendbar zu sein, und allermindestens angesichts eines Speicherengpasses elegant nachlassen.
  • Überdies sind Computerarchitekturen mit virtuellem Speicher in der Neuzeit zunehmend populär geworden. Diese Popularität hat in einem Grad zugenommen, dass nun sogar die meisten Mikroprozessor-/Personalcomputer-Systeme virtuellen Speicher nutzen. Virtueller Speicher weist bekannte bedeutende Vorteile bei einer Vereinfachung des Softwareerzeugungsprozesses auf.
  • Zum Beschleunigen des Betriebs des Computersystems ist es vorgeschlagen worden, dass eine Anzahl von Coprozessoren genutzt werden könnte, um verschiedene Operationen wie beispielsweise die Erzeugung von graphischen Bildern zur Anzeige oder zum Ausdrucken zu beschleunigen. Es wäre vorteilhaft, falls derartige Systeme in Verbindung mit einem Nutzen von virtuellem Speicher arbeiten könnten.
  • Die EP-A-0,475,422 offenbart eine Multifunktionseinrichtung zur gleichzeitigen Erzeugung (multifunction cogenerator) oder einen Graphikprozessor zur Verwendung in einem Graphikrenderprozessor. Der Graphikprozessor umfasst doppelte Graphikeinrichtungen, die parallel arbeiten, wobei eine der Einrichtungen eine höhere Betriebspriorität als die andere aufweist. Der Graphikprozessor umfasst eine Kegelschnitte-, Vektor- und Bereichsfüllungserzeugungseinrichtung, eine Symbolerzeugungseinrichtung, einen Bitblocktransferoperator und einen Blocktexturierungs- und Komplizierte-Kappungsmaske-Prozessor, die durch eine Multiprozessplanungseinrichtung synchron gesteuert werden. In dem Graphikprozessor sind ein großer Anzeigespeicher zum Empfangen und Speichern von durch einen externen Hostprozessor erzeugten Programmanweisungen und Daten, interne Erzeugungseinrichtungen und Prozessoren und ein Rastergraphikspeicher einer Graphikanzeige enthalten. Der Graphikprozessor stellt hardwarespezifische Graphikfunktionen und eine extern programmierbare Universalverarbeitung bereit.
  • Zusammenfassung der Erfindung
  • Gemäß der vorliegenden Erfindung werden ein Verfahren zum Rendern von Bilddaten wie in dem Patentanspruch 1 definiert und ein Gerät zum Rendern von Bilddaten wie in dem Patentanspruch 12 definiert bereitgestellt. Optionale Merkmale sind in den anderen Patentansprüchen definiert.
  • INHALTSVERZEICHNIS
    • 1.0 Kurzbeschreibung der Zeichnungen
    • 2.0 Liste der Tabellen
    • 3.0 Beschreibung des bevorzugten Ausführungsbeispiels und anderer Ausführungsbeispiele
    • 3.1 Allgemeiner Aufbau der Mehrstromarchitektur
    • 3.2 In die Warteschlange stellen von Host/Coprozessor
    • 3.3 Registerbeschreibung des Coprozessors
    • 3.4 Format von mehreren Strömen
    • 3.5 Derzeitigen aktiven Strom bestimmen
    • 3.6 Anweisung aus derzeitigem aktivem Strom abrufen
    • 3.7 Anweisung decodieren und ausführen
    • 3.8 Register der Anweisungssteuerungseinrichtung aktualisieren
    • 3.9 Semantik des Registerzugriffssemaphors
    • 3.10 Anweisungssteuerungseinrichtung
    • 3.11 Beschreibung einer lokalen Registerdatei eines Moduls
    • 3.12 Registerlese-/-schreibhandhabung
    • 3.13 Speicherbereichslese-/-schreibhandhabung
    • 3.14 CBus-Struktur
    • 3.15 Datennormalisierungsschaltung
    • 3.16 Module der Beschleunigerkarte
    • 3.16.1 Bildelementorganisationseinrichtung
    • 3.16.2 MUV-Puffer
    • 3.16.3 Ergebnisorganisationseinrichtung
    • 3.16.4 Operandenorganisationseinrichtungen B und C
    • 3.16.5 Hauptdatenwegeinheit
    • 3.16.6 Daten-Cache-Steuerungseinrichtung und Cache
    • a. Normale Cache-Betriebsart
    • b. Die allgemeine Farbraum wandlungsbetriebsart mit Einzelausgabe
    • c. Allgemeine Farbraumwandlungsbetriebsart mit Mehrfachausgabe
    • d. JPEG-Codierungsbetriebsart
    • e. Langsame JPEG-Decodierungsbetriebsart
    • f. Matrixmultiplikationsbetriebsart
    • g. Gesperrte Betriebsart
    • h. Für-ungültig-erklären-Betriebsart
    • 3.16.7 Eingabeschnittstellenschalter
    • 3.16.8 Lokaler-Speicher-Steuerungseinrichtung
    • 3.16.9 Sonstiges-Modul
    • 3.16.10 Externe-Schnittstelle-Steuerungseinrichtung
    • 3.16.11 Peripherieschnittstelle-Steuerungseinrichtung
  • 1.0 Kurzbeschreibung der Zeichnungen
  • Nachstehend werden Ausführungsbeispiele der Erfindung unter Bezugnahme auf die beigefügten Zeichnungen lediglich beispielhaft beschrieben:
  • 1 veranschaulicht den Betrieb eines Rasterbildcoprozessors in einer Hostcomputerumgebung;
  • 2 veranschaulicht den Rasterbildcoprozessor gemäß 1 ausführlicher;
  • 3 veranschaulicht die Speicherbelegung des Rasterbildcoprozessors;
  • 4 zeigt die Beziehung zwischen einer CPU, einer Anweisungswarteschlange, Anweisungsoperanden und -ergebnissen in gemeinsam genutztem Speicher und einem Coprozessor;
  • 5 zeigt die Beziehung zwischen einer Anweisungserzeugungseinrichtung, einer Speicherverwaltungseinrichtung, einer Warteschlangenverwaltungseinrichtung und einem Coprozessor;
  • 6 zeigt den Betrieb des Graphikcoprozessors, der Anweisungen zur Ausführung aus der Anstehende-Anweisungen-Warteschlange (pending instruction queue) liest und sie in der Abgeschlossene-Anweisungen-Warteschlange (completed instruction queue) platziert;
  • 7 zeigt eine Realisierung eines kreisförmigen Puffers mit fester Länge der Anweisungswarteschlange, die den Grund dafür erkennen lässt, zu warten, wenn der Puffer sich füllt;
  • 8 veranschaulicht zwei Anweisungsausführungsströme, wie sie durch den Coprozessor genutzt werden;
  • 9 veranschaulicht ein Anweisungsausführungsflussdiagramm;
  • 10 veranschaulicht das Standardanweisungswortformat, das durch den Coprozessor genutzt wird;
  • 11 veranschaulicht die Anweisungswortfelder einer Standardanweisung;
  • 12 veranschaulicht die Datenwortfelder einer Standardanweisung;
  • 13 veranschaulicht die Anweisungssteuerungseinrichtung gemäß 2 schematisch;
  • 14 veranschaulicht die Ausführungssteuerungseinrichtung gemäß 13 ausführlicher;
  • 15 veranschaulicht ein Zustandsübergangsdiagramm der Anweisungssteuerungseinrichtung;
  • 16 veranschaulicht den Anweisungsdecodierer gemäß 13;
  • 17 veranschaulicht die Anweisungsablaufsteuerung gemäß 16 ausführlicher;
  • 18 veranschaulicht ein Übergangsdiagramm für die ID-Ablaufsteuerung gemäß 16;
  • 19 veranschaulicht schematisch die Vorababrufpuffersteuerungseinrichtung gemäß 13 ausführlicher;
  • 20 veranschaulicht die Standardform der Registerspeicherung und Modulinteraktion, wie sie in dem Coprozessor genutzt wird;
  • 21 veranschaulicht das Format der Steuerungsbustransaktionen, wie es in dem Coprozessor genutzt wird;
  • 2248 sind nun gelöscht;
  • 49 stellt ein Blockschaltbild eines Graphikuntersystems, das eine Datennormalisierung verwendet, dar;
  • 50 veranschaulicht ein Schaltbild eines Datennormalisierungsgeräts;
  • 51107 sind nun gelöscht;
  • 108 veranschaulicht die Bildelementorganisationseinrichtung ausführlicher;
  • 109 veranschaulicht die Operandenabrufeinheit der Bildelementorganisationseinrichtung ausführlicher;
  • 110114 veranschaulichen verschiedene Speicherformate, wie sie durch den Coprozessor genutzt werden;
  • 115 veranschaulicht die MUV-Adresserzeugungseinrichtung der Bildelementorganisationseinrichtung des Coprozessors ausführlicher;
  • 116 zeigt ein Blockschaltbild eines in dem Coprozessor genutzten Mehrwertpuffers (MUV-Puffers);
  • 117 veranschaulicht eine Struktur des Codierers gemäß 116;
  • 118 veranschaulicht eine Struktur des Decodierers gemäß 116;
  • 119 veranschaulicht eine Struktur einer Adresserzeugungseinrichtung gemäß 116 zum Erzeugen von Leseadressen in einer JPEG-Betriebsart (Bildelementzerlegung);
  • 120 veranschaulicht eine Struktur einer Adresserzeugungseinrichtung gemäß 116 zum Erzeugen von Leseadressen in einer JPEG-Betriebsart (Bildelementrekonstruktion);
  • 121 veranschaulicht eine Organisation der Speichermodule, aus denen die Speichervorrichtung gemäß 116 besteht;
  • 122 veranschaulicht eine Struktur einer Schaltung, die Leseadressen zu Speichermodulen multiplext;
  • 123 veranschaulicht eine Darstellung dessen, wie Nachschlagetabelleneinträge in dem in einer Einzelnachschlagetabellenbetriebsart (single lookup table mode) arbeitenden Puffer gespeichert werden;
  • 124 veranschaulicht eine Darstellung dessen, wie Nachschlagetabelleneinträge in dem in einer Mehrnachschlagetabellenbetriebsart (multiple lookup table mode) arbeitenden Puffer gespeichert werden;
  • 125 veranschaulicht eine Darstellung dessen, wie Bildelemente in dem in einer JPEG-Betriebsart arbeitenden Puffer gespeichert werden (Bildelementzerlegung);
  • 126 veranschaulicht eine Darstellung dessen, wie Einzelfarbdatenblöcke aus dem in einer JPEG-Betriebsart arbeitenden Puffer wiedergewonnen werden (Bildelementrekonstruktion);
  • 127 veranschaulicht die Struktur der Ergebnisorganisationseinrichtung des Coprozessors ausführlicher;
  • 128 veranschaulicht die Struktur der Operandenorganisationseinrichtungen des Coprozessors ausführlicher;
  • 129 zeigt ein Blockschaltbild einer Computerarchitektur für die in dem Coprozessor genutzte Hauptdatenwegeinheit;
  • 130 zeigt ein Blockschaltbild einer Eingabeschnittstelle zum Annehmen, Speichern und Neuanordnen von eingegebenen Datenobjekten zur weiteren Verarbeitung;
  • 131 zeigt ein Blockschaltbild eines Bilddatenprozessors zum Durchführen von arithmetischen Operationen bei ankommenden Datenobjekten;
  • 132 zeigt ein Blockschaltbild eines Farbkanalprozessors zum Durchführen von arithmetischen Operationen bei einem Kanal der ankommenden Datenobjekte;
  • 133 zeigt ein Blockschaltbild eines Multifunktionsblocks in einem Farbkanalprozessor;
  • 134 veranschaulicht ein Blockschaltbild für Zusammensetzungsoperationen;
  • 135 zeigt eine inverse Transformation der Abtastzeile;
  • 136 zeigt ein Blockschaltbild der zum Berechnen des Werts für ein Bezeichnungsbildelement erforderlichen Schritte;
  • 137 veranschaulicht ein Blockschaltbild der Bildtransformationseinrichtung;
  • 138 veranschaulicht die zwei Formate der Kernbeschreibungen (kernel descriptions);
  • 139 zeigt die Definition und die Interpretation eines Felds bp;
  • 140 zeigt ein Blockschaltbild der Multiplizierer-Addierer, die die Matrixmultiplikation durchführen;
  • 141 veranschaulicht den Steuerungs-, Adress- und Datenfluss des Caches und der Cache-Steuerungseinrichtung des Coprozessors;
  • 142 veranschaulicht die Speicherorganisation des Caches;
  • 143 veranschaulicht das Adressformat für die Cache-Steuerungseinrichtung des Coprozessors;
  • 144 zeigt ein Blockschaltbild eines Multifunktionsblocks in einem Farbkanalprozessor;
  • 145 veranschaulicht den Eingabeschnittstellenschalter des Coprozessors mehr, 144 veranschaulicht ein Blockschaltbild des Caches und der Cache-Steuerungseinrichtung;
  • 146 veranschaulicht eine Dynamischer-lokaler-Speicher-Steuerungseinrichtung mit vier Anschlüssen des Coprozessors, die die Hauptadress- und -datenwege zeigt;
  • 147 veranschaulicht ein Zustandsmaschinendiagramm für die Steuerungseinrichtung gemäß 146;
  • 198 zeigt eine Pseudocodeauflistung, die die Funktion der Arbitrierungseinrichtung gemäß 146 genau schildert;
  • 149 stellt die Struktur der Anfordererprioritätsbits und die in 146 verwendete Terminologie dar;
  • 150 veranschaulicht die Externe-Schnittstelle-Steuerungseinrichtung des Coprozessors ausführlicher;
  • 151154 veranschaulichen den Prozess der Abbildung von virtuellen auf/aus physikalischen Adressen, wie er durch den Coprozessor genutzt wird;
  • 155 veranschaulicht die IBus-Empfängereinheit gemäß 150 ausführlicher;
  • 156 veranschaulicht die RBus-Empfängereinheit gemäß 2 ausführlicher;
  • 157 veranschaulicht die Speicherverwaltungseinheit gemäß 150 ausführlicher;
  • 158 veranschaulicht die Peripherieschnittstelle-Steuerungseinrichtung gemäß 2 ausführlicher.
  • 2.0 Liste der Tabellen
    • Tabelle 1: Registerbeschreibung
    • Tabelle 2: Operationscodebeschreibung
    • Tabelle 3: Operandentypen
    • Tabelle 4: Operandendeskriptoren
    • Tabelle 5: Modul-Setup-Ordnung
    • Tabelle 6: CBus-Signaldefinition
    • Tabelle 7: CBus-Transaktionstypen
    • Tabelle 8: Bruch-Tabelle
  • 3.0 Beschreibung des bevorzugten Ausführungsbeispiels und anderer Ausführungsbeispiele
  • Bei dem bevorzugten Ausführungsbeispiel wird mittels einer Nutzung von zwei unabhängigen Anweisungsströmen durch einen Hardwarebeschleuniger ein wesentlicher Vorteil bei einer Hardwarerasterung erlangt. Während der erste Anweisungsstrom eine derzeitige Seite zum Drucken vorbereiten kann, kann folglich ein nachfolgender Anweisungsstrom die nächste Seite zum Drucken vorbereiten. Eine hohe Nutzung von Hardwarebetriebsmitteln ist besonders da erhältlich, wo der Hardwarebeschleuniger mit einer wesentlich schnelleren Geschwindigkeit als der Geschwindigkeit der Ausgabevorrichtung arbeiten kann.
  • Das bevorzugte Ausführungsbeispiel beschreibt einen zwei Anweisungsströme nutzenden Aufbau. Es können jedoch Aufbauten mit weiteren Anweisungsströmen bereitgestellt werden, wenn die Hardwarekompromisse diktieren, dass durch die Nutzung von weiteren Strömen wesentliche Vorteile erhalten werden können.
  • Die Nutzung von zwei Strömen erlaubt es, die Hardwarebetriebsmittel des Rasterbildcoprozessors abhängig von der Ausgabedruckvorrichtung bei einem Vorbereiten von nachfolgenden Seiten oder Bändern, Streifen etc. voll engagiert zu halten, während eine gegenwärtige Seite, ein gegenwärtiges Band etc. zu einer Druckvorrichtung weitergeleitet wird.
  • 3.1 Allgemeiner Aufbau der Mehrstromarchitektur
  • In 1 ist ein Computerhardwareaufbau 201, der das bevorzugte Ausführungsbeispiel bildet, schematisch veranschaulicht. Der Aufbau 201 schließt ein Standardhostcomputersystem ein, das die Form einer über eine Brücke 204 mit ihrem eigenen Speicher (RAM) 203 gegenseitig verbundenen Host-CPU 202 annimmt. Das Hostcomputersystem stellt alle die normalen Einrichtungen eines Computersystems einschließlich Betriebssystemprogrammen, Anwendungen etc. bereit. Das Hostcomputersystem ist über eine PCI-Bus-Schnittstelle 207 mit einem Standard-PCI-Bus 206 verbunden. Der PCI-Standard ist ein allgemein bekannter Industriestandard, und die meisten heutzutage verkauften Computersysteme, insbesondere die Betriebssysteme Microsoft Windows (Marke) ausführenden, kommen normalerweise mit einem PCI-Bus 206 ausgerüstet. Der PCI-Bus 206 erlaubt es, den Aufbau 201 mittels der Hinzufügung von einer PCI-Karte oder mehreren PCI-Karten, zum Beispiel 209, die jeweils eine weitere PCI-Bus-Schnittstelle 210 und andere Vorrichtungen 211 und einen lokalen Speicher 212 zur Nutzung in dem Aufbau 201 enthalten, zu erweitern.
  • Bei dem bevorzugten Ausführungsbeispiel ist eine Rasterbildbeschleunigerkarte 220 zum Helfen bei dem Beschleunigen von in einer Seitenbeschreibungssprache ausgedrückten graphischen Operationen bereitgestellt. Die Rasterbildbeschleunigerkarte 220 (die ebenfalls eine PCI-Bus-Schnittstelle 221 aufweist) ist zum Arbeiten in einer lose gekoppelten, Speicher gemeinsam nutzenden Art und Weise mit der Host-CPU 202 in der gleichen Art und Weise wie andere PCI-Karten 209 entworfen. Es ist möglich, dem Hostcomputersystem weitere Bildbeschleunigerkarten 220 nach Bedarf hinzuzufügen. Die Rasterbildbeschleunigerkarte ist zum Beschleunigen der Operationen, die den Großteil der Ausführungskompliziertheit bei Rasterbildverarbeitungsoperationen bilden, entworfen. Diese können einschließen:
    • (a) Zusammensetzung
    • (b) Verallgemeinerte Farbraumwandlung
    • (c) JPEG-Komprimierung und -Dekomprimierung
    • (d) Huffman-, Lauflängen- und prädiktive Codierung und Decodierung
    • (e) Hierarchisches-Bild-Dekomprimierung (Marke)
    • (f) Verallgemeinerte affine Bildtransformationen
    • (g) Kleiner-Kern-Faltungen
    • (h) Matrixmultiplikation
    • (i) Halbtönung
    • (j) Umfangreiche arithmetische und Speicherkopie-Operationen
  • Die Rasterbildbeschleunigerkarte 220 weist ferner ihren eigenen lokalen Speicher 223 auf, der mit einem Rasterbildcoprozessor 24 verbunden ist, der die Rasterbildbeschleunigerkarte 220 im Allgemeinen von der Host-CPU 202 angewiesen betreibt. Der Coprozessor 224 ist vorzugsweise als ein Chip mit anwendungsspezifischem Schaltkreis (ASIC) aufgebaut. Der Rasterbildcoprozessor 224 weist die Fähigkeit zum Steuern zumindest einer Druckervorrichtung 226 nach Bedarf über eine Peripherieschnittstelle 225 auf. Die Bildbeschleunigerkarte 220 kann auch eine beliebige Eingabe-/Ausgabevorrichtung einschließlich Scannern steuern. Zusätzlich ist an der Beschleunigerkarte 220 eine generische externe Schnittstelle 227 bereitgestellt, die mit dem Rasterbildcoprozessor 224 zur Überwachung und zum Testen desselben verbunden ist.
  • Im Betrieb sendet die Host-CPU 202 über den PCI-Bus 206 eine Sequenz von Anweisungen und Daten für die Erzeugung von Bildern durch den Rasterbildcoprozessor 224. Die Daten können zusätzlich zu einem Cache 230 in dem Rasterbildcoprozessor 224 in dem lokalen Speicher 223 oder in sich ebenfalls in dem Coprozessor 224 befindenden Registern 229 gespeichert werden.
  • Nachstehend 2 zugewendet ist der Rasterbildcoprozessor 224 dort ausführlicher veranschaulicht. Der Coprozessor 224 ist für die Beschleunigung der vorstehend angeführten Operationen verantwortlich und besteht aus einer Anzahl von sich im Allgemeinen unter der Steuerung einer Anweisungssteuerungseinrichtung 235 befindenden Komponenten. Zuerst der Kommunikation des Coprozessors mit der Außenwelt zugewendet ist eine Lokaler-Speicher-Steuerungseinrichtung 236 für Kommunikationen mit dem lokalen Speicher 223 gemäß 1 bereitgestellt. Eine Peripherieschnittstelle-Steuerungseinrichtung 237 ist ebenfalls für die Kommunikation mit Standardformate wie beispielsweise das Centronics-Schnittstelle-Standardformat oder andere Videoschnittstellenformate nutzenden Druckervorrichtungen bereitgestellt. Die Peripherieschnittstelle-Steuerungseinrichtung 237 ist gegenseitig mit der Lokaler-Speicher-Steuerungseinrichtung 236 verbunden. Sowohl die Lokaler-Speicher-Steuerungseinrichtung 236 als auch die Externe-Schnittstelle-Steuerungseinrichtung 238 sind mit einem Eingabeschnittstellenschalter 252 verbunden, der dann wieder mit der Anweisungssteuerungseinrichtung 235 verbunden ist. Der Eingabeschnittstellenschalter 252 ist auch mit einer Bildelementorganisationseinrichtung 246 und einer Daten-Cache-Steuerungseinrichtung 240 verbunden. Der Eingabeschnittstellenschalter 252 ist zum Umschalten von Daten von der Externe-Schnittstelle-Steuerungseinrichtung 238 und der Lokaler-Speicher-Steuerungseinrichtung 236 zu der Anweisungssteuerungseinrichtung 235, der Daten-Cache-Steuerungseinrichtung 240 und der Bildelementorganisationseinrichtung 246 nach Bedarf bereitgestellt.
  • Für Kommunikationen mit dem PCI-Bus 206 gemäß 1 ist die Externe-Schnittstelle-Steuerungseinrichtung 238 in dem Rasterbildcoprozessor 224 bereitgestellt und ist mit der Anweisungssteuerungseinrichtung 235 verbunden. Es ist auch ein Sonstiges-Modul (miscellaneous module) 239 bereitgestellt, das ebenfalls mit der Anweisungssteuerungseinrichtung 235 verbunden ist und das sich mit Interaktionen mit dem Coprozessor 224 zu Zwecken der Testdiagnostik und der Bereitstellung von taktgebenden (clocking) und globalen Signalen befasst.
  • Der Daten-Cache 230 arbeitet unter der Steuerung der Daten-Cache-Steuerungseinrichtung 240, mit der er verbunden ist. Der Daten-Cache 230 wird in verschiedener Weise genutzt, primär zum Speichern von in jüngster Zeit verwendeten Werten, deren anschließende Nutzung durch den Coprozessor 224 wahrscheinlich ist. Die vorstehend angeführten Beschleunigungsoperationen werden bei mehreren Strömen von Daten primär durch einen JPEG-Codierer/Decodierer 241 und eine Hauptdatenwegeinheit 242 ausgeführt. Die Einheiten 241, 242 sind in einer parallelen Anordnung mit jeder der Bildelementorganisationseinrichtung 246 und zwei Operandenorganisationseinrichtungen 247, 248 verbunden. Die verarbeiteten Ströme von den Einheiten 241, 242 werden zu einer Ergebnisorganisationseinrichtung 249 zum Verarbeiten und Neuformatieren nach Bedarf weitergeleitet. Häufig ist es wünschenswert, Zwischenergebnisse greifbar zu speichern. Zu diesem Zweck ist zusätzlich zu dem Daten-Cache 230 ein zwischen die Bildelementorganisationseinrichtung 246 und die Ergebnisorganisationseinrichtung 249 geschalteter Mehrfach-verwendeter-Wert-Puffer (multi-used value buffer) 250 für die Speicherung von Zwischendaten bereitgestellt. Die Ergebnisorganisationseinrichtung 249 gibt nach Bedarf zu der Externe-Schnittstelle-Steuerungseinrichtung 238, der Lokaler-Speicher-Steuerungseinrichtung 236 und der Peripherieschnittstelle-Steuerungseinrichtung 237 aus.
  • Wie in 2 durch gestrichelte Linien angegeben kann bei Bedarf eine weitere (dritte) Datenwegeinheit 243 "parallel" zu den zwei anderen Datenwegen in der Form des JPEG-Codierers/Decodierers 241 und der Hauptdatenwegeinheit 242 verbunden werden. Die Erweiterung auf 4 oder mehr Datenwege wird auf die gleiche Weise erreicht. Obwohl die Wege "parallel" verbunden sind, arbeiten sie nicht parallel. Stattdessen arbeitet immer nur ein Weg.
  • Der gesamte ASIC-Entwurf gemäß 2 ist in der folgenden Art und Weise entwickelt worden. Erstens ist es bei einem Drucken von Seiten notwendig, dass noch nicht einmal kleine oder vorübergehende Artefakte vorhanden sind. Dies liegt daran, dass während bei einer Videosignalerzeugung zum Beispiel derartige kleine Fehler, falls vorhanden, nicht für das menschliche Auge ersichtlich sein können (und folglich nicht wahrnehmbar sein können), bei einem Drucken jedes kleine Artefakt permanent auf der gedruckten Seite erscheint und gelegentlich eklatant offensichtlich sein kann. Ferner kann eine Verzögerung bei dem den Drucker erreichenden Signal gleichermaßen verheerend sein und zu weißen, nicht gedruckten Bereichen auf einer Seite führen, da die Seite fortfährt, sich durch den Drucker zu bewegen. Es ist daher notwendig, Ergebnisse von sehr hoher Qualität sehr schnell bereitzustellen, und dies wird eher durch eine Hardwarelösung als eine Softwarelösung am besten erreicht.
  • Zweitens wird dann, wenn man alle die verschiedenen Betriebsschritte (Algorithmen), die für den Druckprozess ausgeführt werden müssen, auflistet und für jeden Schritt eine äquivalente Einheit von Hardware bereitstellt, die Gesamtmenge von Hardware enorm und untragbar teuer. Ferner ist die Geschwindigkeit, mit der die Hardware arbeiten kann, im Wesentlichen durch die Rate begrenzt, mit der die für die Berechnungen notwendigen und durch sie erzeugten Daten abgerufen bzw. versendet (despatched) werden können. Das heißt, es ist eine durch die begrenzte Bandbreite der Schnittstellen erzeugte Geschwindigkeitsbegrenzung vorhanden.
  • Der gesamte ASIC-Entwurf basiert jedoch auf einer überraschenden Erkenntnis dahingehend, dass dann, wenn die enorme Menge von Hardware schematisch dargestellt wird, verschiedene Teile der ganzen erforderlichen Hardware als (a) doppelt und (b) nicht die ganze Zeit arbeitend identifiziert werden können. Dies ist besonders hinsichtlich des bei dem Präsentieren der Daten vor ihrer Berechnung beteiligten Overheads der Fall.
  • Daher wurden verschiedene Schritte unternommen, um den gewünschten Zustand des Verringerns der Menge von Hardware, während alle Teile der Hardware so aktiv wie möglich gehalten werden, zu erreichen. Der erste Schritt war die Erkenntnis, dass es bei einer Bildmanipulation häufig erforderlich war, sich wiederholende Berechnungen des gleichen Grundtyps auszuführen. Somit könnte dann, wenn die Daten in irgendeiner Weise geströmt (streamed) werden würden, eine Berechnungseinheit zum Ausführen eines spezifischen Typs von Berechnung konfiguriert werden, ein langer Strom von Daten verarbeitet werden und daraufhin die Berechnungseinheit für den nächsten erforderlichen Typ von Berechnungsschritt neu konfiguriert werden. Wenn die Datenströme ziemlich lang wären, dann wäre die zur Neukonfiguration erforderliche Zeit im Vergleich zu der ganzen Berechnungszeit vernachlässigbar, und somit würde der Durchsatz erhöht werden.
  • Darüber hinaus bedeutet die Bereitstellung von mehreren Datenverarbeitungswegen, dass in dem Fall, dass ein Weg neu konfiguriert wird, während der andere Weg verwendet wird, daraufhin im Wesentlich kein der notwendigen Neukonfiguration zuzuschreibender Verlust von Berechnungszeit vorhanden ist. Dies trifft zu, wenn die Hauptdatenwegeinheit 242 eine allgemeinere Berechnung ausführt und der andere Datenweg (die anderen Datenwege) eine spezialisiertere Berechnung wie beispielsweise die JPEG-Codierung und -Decodierung wie in der Einheit 241 ausführt (ausführen) oder, falls eine zusätzliche Einheit 243 bereitgestellt ist, sie eine Entropie- und/oder Huffman-Codierung/Decodierung bereitstellen kann.
  • Ferner kann das Abrufen und Präsentieren von Daten für die Berechnungseinheit weitergehen, während die Berechnungen weitergehen würden. Dieser Prozess kann weiter beschleunigt und Hardwarebetriebsmittel besser genutzt werden, falls die verschiedenen Typen von Daten in irgendeiner Weise standardisiert oder normalisiert werden. Somit kann der an dem Abrufen und Versenden von Daten beteiligte ganze Overhead verringert werden.
  • Wie vorher besonders erwähnt ist es wichtig, dass der Coprozessor 224 unter der Steuerung der Host-CPU 202 (1) arbeitet. In dieser Hinsicht ist die Anweisungssteuerungseinrichtung 235 für die Gesamtsteuerung des Coprozessors 224 verantwortlich. Die Anweisungssteuerungseinrichtung 235 betreibt den Coprozessor 224 mittels des Nutzens eines Steuerungsbusses 231, der im Folgenden als der CBus bekannt ist. Der CBus 231 ist mit jedem der Module 236250 einschließlich verbunden, um Register (231 gemäß 1) in jedem Modul einzustellen, um den Gesamtbetrieb des Coprozessors 224 zu erreichen. Um 2 nicht allzu sehr zu komplizieren, ist die gegenseitige Verbindung des Steuerungsbusses 231 mit jedem der Module 236250 aus 2 weggelassen.
  • Nachstehend 3 zugewendet ist dort eine schematische Anordnung 260 der verfügbaren Modulregister veranschaulicht. Die Anordnung 260 weist der Gesamtsteuerung des Coprozessors 224 und seiner Anweisungssteuerungseinrichtung 235 ausschließlich zugeordnete Register 261 auf. Die Coprozessormodule 236250 weisen ähnliche Register 262 auf.
  • 3.2 In die Warteschlange stellen von Host/Coprozessor
  • Die vorstehende Architektur im Sinn habend ist es klar, dass ein Bedarf an einem angemessenen Sorgen für eine Kooperation zwischen dem Hostprozessor 202 und dem Bildcoprozessor 224 vorhanden ist. Die Lösung für dieses Problem ist jedoch allgemein und nicht auf die spezifische vorstehend beschriebene Architektur beschränkt und wird daher nachher unter Bezugnahme auf eine allgemeinere Berechnungshardwareumgebung beschrieben.
  • Moderne Computersysteme erfordern typischerweise ein Verfahren zur Speicherverwaltung, um für eine dynamische Speicherzuordnung zu sorgen. In dem Fall eines Systems mit einem Coprozessor oder mehreren Coprozessoren ist ein Verfahren zum Synchronisieren zwischen der dynamischen Zuordnung von Speicher und der Verwendung des Speichers durch einen Coprozessor notwendig.
  • Typischerweise weist eine Computerhardwarekonfiguration sowohl eine CPU als auch einen spezialisierten Coprozessor auf, die jeweils eine Speicherbank gemeinsam nutzen. In einem derartigen System ist die CPU die einzige Einheit in dem System, die zum dynamischen Zuordnen von Speicher in der Lage ist. Sobald er durch die CPU zur Verwendung durch den Coprozessor zugeordnet ist, kann dieser Speicher durch den Coprozessor frei verwendet werden, bis er nicht mehr benötigt wird, wobei er an diesem Punkt zum Freigeben durch die CPU verfügbar ist. Dies bedeutet, dass eine Form der Synchronisation zwischen der CPU und dem Coprozessor notwendig ist, um sicherzustellen, dass der Speicher nur freigegeben wird, nachdem seine Verwendung durch den Coprozessor beendet ist. Es sind mehrere mögliche Lösungen für dieses Problem vorhanden, aber jede weist unerwünschte Leistungsauswirkungen auf.
  • Die Verwendung von statisch zugeordnetem Speicher vermeidet den Bedarf an einer Synchronisation, aber hindert das System daran, seine Speicherbetriebsmittelverwendung dynamisch anzupassen. Auf ähnliche Weise ist es möglich, die CPU zu blockieren und zu warten, bis der Coprozessor ein Durchführen jeder Operation beendet hat, aber dies verringert die Parallelität wesentlich und verringert folglich die Gesamtsystemleistung. Die Verwendung von Unterbrechungen zum Angeben eines Abschlusses von Operationen durch den Coprozessor ist ebenfalls möglich, aber bürdet einen bedeutenden Verarbeitungsoverhead auf, falls der Coprozessordurchsatz sehr hoch ist.
  • Zusätzlich zu dem Bedarf an einer hohen Leistung muss ein derartiges System auch elegant mit dynamischen Speicherengpässen fertig werden. Die meisten Computersysteme erlauben ein breites Spektrum von Speichergrößenkonfigurationen. Es ist wichtig, dass die Systeme mit verfügbaren großen Mengen von Speicher ihre verfügbaren Betriebsmittel voll verwenden, um die Leistung zu maximieren. Auf ähnliche Weise sollten die Systeme mit Minimalspeichergrößenkonfigurationen immer noch angemessen arbeiten, um verwendbar zu sein, und sollten allermindestens angesichts eines Speicherengpasses elegant nachlassen.
  • Zum Überwinden dieser Probleme ist ein Synchronisationsmechanismus notwendig, der die Systemleistung maximieren wird, während er es auch erlaubt, die Coprozessorspeicherverwendung dynamisch an sowohl die Kapazität des Systems als auch die Kompliziertheit der durchgeführten Operation anzupassen.
  • Allgemein ist der bevorzugte Aufbau zum Synchronisieren der (Host-)CPU und des Coprozessors in 4 veranschaulicht, wo die verwendeten Bezugszeichen die bereits bei der vorhergehenden Beschreibung von 1 genutzten sind.
  • Somit ist in 4 die CPU 202 für die ganze Speicherverwaltung in dem System verantwortlich. Sie ordnet Speicher 203 sowohl für ihre eigenen Verwendungen als auch für die Verwendung durch den Coprozessor 224 zu. Der Coprozessor 224 weist seinen eigenen graphikspezifischen Anweisungssatz auf und ist zum Ausführen von Anweisungen 1022 aus dem Speicher 203, der gemeinsam mit dem Hostprozessor 202 genutzt wird, in der Lage. Jede dieser Anweisungen kann auch Ergebnisse 1024 zurück in den gemeinsam genutzten Speicher 203 schreiben und kann ebenso Operanden 1023 aus dem Speicher 203 lesen. Die zum Speichern von Operanden 1023 und Ergebnissen 1024 von Coprozessoranweisungen erforderliche Menge von Speicher 203 variiert gemäß der Kompliziertheit und dem Typ der speziellen Operation.
  • Die CPU 202 ist auch für das Erzeugen der durch den Coprozessor 224 ausgeführten Anweisungen 1022 verantwortlich. Zum Maximieren des Grads der Parallelität zwischen der CPU 202 und dem Coprozessor 224 werden durch die CPU 202 erzeugte Anweisungen wie bei 1022 angegeben zur Ausführung durch den Coprozessor 224 in die Warteschlange gestellt. Jede Anweisung in der Warteschlange 1022 kann auf Operanden 1023 und Ergebnisse 1024 in dem gemeinsam genutzten Speicher 203, der durch die Host-CPU 202 zur Verwendung durch den Coprozessor 224 zugeordnet worden ist, Bezug nehmen.
  • Das Verfahren nutzt eine Anweisungserzeugungseinrichtung 1030, eine Speicherverwaltungseinrichtung 1031 und eine Warteschlangenverwaltungseinrichtung 1032, die miteinander verbunden sind, wie es in 5 gezeigt ist. Alle diese Module werden in einem einzelnen Prozess auf der Host-CPU 202 ausgeführt.
  • Anweisungen zur Ausführung durch den Coprozessor 224 werden durch die Anweisungserzeugungseinrichtung 1030 erzeugt, die die Dienste der Speicherverwaltungseinrichtung 1031 zum Zuordnen von Platz für die Operanden 1023 und die Ergebnisse 1024 der erzeugten Anweisungen verwendet. Die Anweisungserzeugungseinrichtung 1030 kann auch die Dienste der Warteschlangenverwaltungseinrichtung 1032 zum Stellen der Anweisungen zur Ausführung durch den Coprozessor 224 in die Warteschlange verwenden.
  • Sobald jede Anweisung durch den Coprozessor 224 ausgeführt worden ist, kann die CPU 202 den Speicher freigeben, der durch die Speicherverwaltungseinrichtung 1031 zur Verwendung durch die Operanden der Anweisung zugeordnet wurde. Das Ergebnis einer Anweisung kann auch ein Operand für eine nachfolgende Anweisung werden, wonach sein Speicher ebenfalls durch die CPU freigegeben werden kann. Statt eine Unterbrechung ins Feld zu schicken und derartigen Speicher freizugeben, sobald der Coprozessor 224 mit ihm fertig ist, gibt das System die durch jede Anweisung benötigten Betriebsmittel über eine Reinigungsfunktion (cleanup function) frei, die in irgendeinem Stadium läuft, nachdem der Coprozessor 224 die Anweisung abgeschlossen hat. Die genaue Zeit, zu der diese Reinigungen auftreten, hängt von der Interaktion zwischen der Speicherverwaltungseinrichtung 1031 und der Warteschlangenverwaltungseinrichtung 1032 ab und erlaubt es dem System, sich gemäß der verfügbaren Menge von Systemspeicher und der durch jede Coprozessoranweisung benötigten Menge von Speicher dynamisch anzupassen.
  • 6 veranschaulicht die Realisierung der Coprozessoranweisungswarteschlange 1022 schematisch. Anweisungen werden durch die Host-CPU 202 in eine Anstehende-Anweisungen-Warteschlange (pending instruction queue) 1040 eingefügt und werden durch den Coprozessor 224 zur Ausführung gelesen. Nach der Ausführung durch den Coprozessor 224 bleiben die Anweisungen in einer Reinigungswarteschlange (cleanup queue) 1041, so dass die CPU 202 die Betriebsmittel freigeben kann, die die Anweisungen benötigt haben, nachdem der Coprozessor 224 ihre Ausführung beendet hat.
  • Die Anweisungswarteschlange 1022 kann selbst als ein kreisförmiger Puffer mit fester oder dynamischer Größe realisiert sein. Die Anweisungswarteschlange 1022 entkoppelt die Erzeugung von Anweisungen durch die CPU 202 von ihrer Ausführung durch den Coprozessor 224.
  • Operanden- und Ergebnisspeicher für jede Anweisung wird durch die Speicherverwaltungseinrichtung 1031 (5) im Ansprechen auf Anforderungen von der Anweisungserzeugungseinrichtung 1030 während der Anweisungserzeugung zugeordnet. Es ist die Zuordnung dieses Speichers für neu erzeugte Anweisungen, die die nachstehend beschriebene Interaktion zwischen der Speicherverwaltungseinrichtung 1031 und der Warteschlangenverwaltungseinrichtung 1032 auslöst und es dem System erlaubt, sich automatisch an die verfügbare Menge von Speicher und die Kompliziertheit der beteiligten Anweisungen anzupassen.
  • Die Anweisungswarteschlangenverwaltungseinrichtung 1032 kann darauf warten, dass der Coprozessor 224 die Ausführung jeder gegebenen Anweisung abschließt, die durch die Anweisungserzeugungseinrichtung 1030 erzeugt worden ist. Durch ein Bereitstellen einer ausreichend großen Anweisungswarteschlange 1022 und eines ausreichenden Speichers 203 zur Zuordnung durch die Speicherverwaltungseinrichtung 1031 wird es jedoch möglich, es zu vermeiden, dass überhaupt auf den Coprozessor 224 oder zumindest ganz bis zu dem Ende der ganzen Anweisungssequenz, die bei einem sehr großen Auftrag mehrere Minuten dauern kann, auf den Coprozessor 224 gewartet werden muss. Eine Spitzenspeicherverwendung kann jedoch leicht über den verfügbaren Speicher hinausgehen, und an diesem Punkt kommt die Interaktion zwischen der Warteschlangenverwaltungseinrichtung 1032 und der Speicherverwaltungseinrichtung 1031 ins Spiel.
  • Die Anweisungswarteschlangenverwaltungseinrichtung 1032 kann zu jeder Zeit zum "Reinigen" ("cleanup") der abgeschlossenen Anweisungen durch ein Freigeben des Speichers, der dynamisch für sie zugeordnet wurde, angewiesen werden. Falls die Speicherverwaltungseinrichtung 1031 erfasst, dass verfügbarer Speicher entweder knapp wird oder erschöpft ist, besteht ihre erste Zuflucht darin, die Warteschlangenverwaltungseinrichtung 1032 in einem Versuch, einigen Speicher freizugeben, der durch den Coprozessor 224 nicht mehr verwendet wird, zum Durchführen einer derartigen Reinigung anzuweisen. Dies kann es der Speicherverwaltungseinrichtung 1031 erlauben, eine Anforderung von durch eine neu erzeugte Anweisung benötigtem Speicher von der Anweisungserzeugungseinrichtung 1030 zu erfüllen, ohne dass die CPU 202 auf den Coprozessor 224 warten oder mit ihm synchronisiert sein muss.
  • Falls eine derartige durch die Speicherverwaltungseinrichtung 1031 ausgeführte Anforderung davon, dass die Warteschlangenverwaltungseinrichtung 1032 abgeschlossene Anweisungen reinigt, keinen angemessenen Speicher zum Erfüllen der neuen Anforderung der Anweisungserzeugungseinrichtung freigibt, kann die Speicherverwaltungseinrichtung 1031 anfordern, dass die Warteschlangenverwaltungseinrichtung 1032 darauf wartet, dass ein Bruchteil, sagen wir mal die Hälfte, der unerledigten Anweisungen in der Anstehende-Anweisungen-Warteschlange 1040 abgeschlossen ist. Dies wird die Verarbeitung der CPU 202 zum Blockieren veranlassen, bis einige der Anweisungen des Coprozessors 224 abgeschlossen worden sind, wobei an diesem Punkt ihre Operanden freigegeben werden können, was ausreichend Speicher zum Erfüllen der Anforderung freigeben kann. Nur auf einen Bruchteil der unerledigten Anweisungen zu warten stellt sicher, dass der Coprozessor 224 beschäftigt gehalten wird, indem zumindest einige Anweisungen in seiner Anstehende-Anweisungen-Warteschlange 1040 gelassen werden. In vielen Fällen gibt die Reinigung von dem Bruchteil der Anstehende-Anweisungen-Warteschlange 1040, auf den die CPU 202 wartet, ausreichend Speicher für die Speicherverwaltungseinrichtung 1031 zum Erfüllen der Anforderung von der Anweisungserzeugungseinrichtung 1030 frei.
  • In dem unwahrscheinlichen Fall, dass ein Warten darauf, dass der Coprozessor 224 die Ausführung von sagen wir mal der Hälfte der anstehenden Anweisungen abschließt, keinen ausreichenden Speicher zum Erfüllen der Anforderung freigibt, besteht daraufhin die letzte Zuflucht der Speicherverwaltungseinrichtung 1031 darin, zu warten, bis alle anstehenden Coprozessoranweisungen abgeschlossen worden sind. Dies sollte außer in dem Fall von äußerst großen und komplizierten Aufträgen, die insgesamt über die vorhandene Speicherkapazität des Systems hinausgehen, ausreichende Betriebsmittel zum Erfüllen der Anforderung der Anweisungserzeugungseinrichtung 1030 freigeben.
  • Durch die vorstehend beschriebene Interaktion zwischen der Speicherverwaltungseinrichtung 1031 und der Warteschlangenverwaltungseinrichtung 1032 stimmt sich das System wirkungsvoll selbst zum Maximieren des Durchsatzes für die für das System verfügbare gegebene Menge von Speicher 203 ab. Mehr Speicher führt zu einem geringeren Bedarf an einer Synchronisation und folglich zu einem größeren Durchsatz. Weniger Speicher verlangt von der CPU 202, häufiger darauf zu warten, dass der Coprozessor 224 die Verwendung des knappen Speichers 203 beendet, wodurch ein System geliefert wird, das mit einem verfügbaren minimalen Speicher immer noch funktioniert, aber mit einer niedrigeren Leistung.
  • Die durch die Speicherverwaltungseinrichtung 1031 unternommenen Schritte, wenn sie versucht, eine Anforderung von der Anweisungserzeugungseinrichtung 1030 zu erfüllen, sind nachstehend zusammengefasst. Jeder Schritt wird der Reihe nach probiert, wonach die Speicherverwaltungseinrichtung 1031 überprüft, um zu sehen, ob ausreichend Speicher 203 zum Erfüllen der Anforderung verfügbar gemacht worden. Falls dem so ist, stoppt sie, da die Anforderung erfüllt werden kann; andernfalls geht sie in einem aggressiveren Versuch, die Anforderung zu erfüllen, zu dem nächsten Schritt über:
    • 1. Versuchen, die Anforderung mit dem bereits verfügbaren Speicher 203 zu erfüllen.
    • 2. Alle abgeschlossenen Anweisungen reinigen.
    • 3. Auf einen Bruchteil der anstehenden Anweisungen warten.
    • 4. Auf alle die verbleibenden anstehenden Anweisungen warten.
  • In dem Versuch, die Anforderung zu erfüllen, können auch andere Optionen verwendet werden, wie beispielsweise ein Warten auf andere Bruchteile (wie beispielsweise ein Drittel oder zwei Drittel) der anstehenden Anweisungen oder ein Warten auf spezifische Anweisungen, von denen es bekannt ist, dass sie große Mengen von Speicher verwenden.
  • Nachstehend 7 zugewendet kann zusätzlich zu der Interaktion zwischen der Speicherverwaltungseinrichtung 1031 und der Warteschlangenverwaltungseinrichtung 1032 die Warteschlangenverwaltungseinrichtung 1032 in dem Fall, in dem der Platz in einem Anweisungswarteschlangenpuffer mit fester Länge 1050 erschöpft ist, auch eine Synchronisation mit dem Coprozessor 224 einleiten. Eine derartige Situation ist in 7 dargestellt. In 7 beträgt die Länge der Anstehende-Anweisungen-Warteschlange 1040 zehn Anweisungen. Die neueste zu der Warteschlange 1040 hinzuzufügende Anweisung weist die höchste belegte Nummer auf. Somit befindet sich da, wo der Platz erschöpft ist, die neueste Anweisung an der Position 9. Die nächste in den Coprozessor 224 einzugebende Anweisung wartet an der Position null.
  • In einem derartigen Fall des erschöpften Platzes wird die Warteschlangenverwaltungseinrichtung 1032 auch darauf warten, dass sagen wir mal die Hälfte der anstehenden Anweisungen durch den Coprozessor 224 abgeschlossen wird. Diese Verzögerung erlaubt es normalerweise, dass ausreichender Platz in der Anweisungswarteschlange 1040 für durch die Warteschlangenverwaltungseinrichtung 1032 einzufügende neue Anweisungen freigegeben wird.
  • Das durch die Warteschlangenverwaltungseinrichtung 1032 dann, wenn sie neue Anweisungen plant, verwendete Verfahren stellt sich dar wie folgt:
    • 1. Testen, um zu sehen, ob ausreichender Platz in der Anweisungswarteschlange 1040 verfügbar ist.
    • 2. Falls kein ausreichender Platz verfügbar ist, darauf warten, dass der Coprozessor eine vorbestimmte Anzahl oder einen vorbestimmten Bruchteil von Anweisungen abschließt.
    • 3. Der Warteschlange die neuen Anweisungen hinzufügen.
  • Das durch die Warteschlangenverwaltungseinrichtung 1032 dann, wenn sie um ein Warten auf eine gegebene Anweisung gebeten wird, verwendete Verfahren stellt sich dar wie folgt:
    • 1. Warten, bis der Coprozessor 224 angibt, dass die Anweisung abgeschlossen ist.
    • 2. Während abgeschlossene Anweisungen vorhanden sind, die noch nicht gereinigt sind, die nächste abgeschlossene Anweisung der Warteschlange reinigen.
  • Das durch die Anweisungserzeugungseinrichtung 1030 dann, wenn sie neue Anweisungen erteilt, verwendete Verfahren stellt sich dar wie folgt:
    • 1. Ausreichenden Speicher für die Anweisungsoperanden 1023 von der Speicherverwaltungseinrichtung 1031 anfordern.
    • 2. Die vorzulegenden (to be submitted) Anweisungen erzeugen.
    • 3. Der Warteschlangenverwaltungseinrichtung 1032 die Coprozessoranweisungen zur Ausführung vorlegen.
  • Das Folgende ist ein Beispiel für Pseudocode der vorstehenden Entscheidungsprozesse.
  • Figure 00370001
  • Figure 00380001
  • Figure 00390001
  • 3.3 Registerbeschreibung des Coprozessors
  • Wie vorstehend in Bezug auf 1 und 3 erläutert unterhält der Coprozessor 224 verschiedene Register 261 für die Ausführung jedes Anweisungsstroms.
  • Auf jedes der Module gemäß 2 Bezug nehmend legt die Tabelle 1 den Namen, den Typ und die Beschreibung jedes der durch den Coprozessor 224 genutzten Register dar.
  • Tabelle 1: Registerbeschreibung
    Figure 00400001
  • Figure 00410001
  • Figure 00420001
  • Figure 00430001
  • Figure 00440001
  • Figure 00450001
  • Figure 00460001
  • Figure 00470001
  • Die bemerkenswerteren Register dieser Register schließen ein:
    • (a) Anweisungszeigerregister (ic_ipa und ic_ipb). Dieses Paar von Registern enthält jeweils die virtuelle Adresse der derzeit ausgeführten Anweisung. Anweisungen werden von ansteigenden virtuellen Adressen abgerufen und ausgeführt. Eine Sprunganweisung kann zum Transferieren der Steuerung quer über nicht benachbarte virtuelle Adressen verwendet werden. Jeder Anweisung ist eine 32-Bit-Sequenznummer zugeordnet, die pro Anweisung um eins zunimmt. Die Sequenznummern werden sowohl durch den Coprozessor 224 als auch durch die Host-CPU 202 zum Synchronisieren der Anweisungserzeugung und -ausführung verwendet.
    • (b) Beendet-Register (ic_fna und ic_fnb). Dieses Paar von Registern enthält jeweils eine abgeschlossene Anweisungen zählende Sequenznummer.
    • (c) Zu-erledigen-Register (ic_tda und ic_tdb). Dieses Paar von Registern enthält jeweils eine in die Warteschlange gestellte Anweisungen zählende Sequenznummer.
    • (d) Unterbrechungsregister (ic_inta und ic_intb). Dieses Paar von Registern enthält jeweils eine Sequenznummer, bei der zu unterbrechen ist.
    • (e) Unterbrechungsstatusregister (ic_stat.a_primed und ic_stat.b_primed). Dieses Paar von Registern enthält jeweils ein Vorbereitet-Bit (primed bit), das ein die Unterbrechung im Anschluss an eine Übereinstimmung des Unterbrechungs- und Beendet-Registers freigebender Zustandsmerker ist. Dieses Bit erscheint neben anderen Unterbrechungsfreigabebits und anderen Status-/Konfigurationsinformationen in dem Unterbrechungsstatusregister (ic_stat).
    • (f) Registerzugriffssemaphore (ic_sema und ic_semb). Die Host-CPU 202 muss diesen Semaphor erhalten, bevor sie Registerzugriffe auf den Coprozessor 224 versucht, die eine Atomarität (atomicity) erfordern, das heißt mehr als einen Registerschreibvorgang. Irgendwelche Registerzugriffe, die die Atomarität nicht erfordern, können zu jeder Zeit durchgeführt werden. Eine Nebenwirkung davon, dass die Host-CPU 202 diesen Semaphor erhält, besteht darin, dass die Ausführung des Coprozessor pausiert, sobald die derzeit ausgeführte Anweisung abgeschlossen ist. Der Registerzugriffssemaphor ist als ein Bit des Konfigurations-/Statusregisters des Coprozessors 224 realisiert. Diese Register sind in dem eigenen Registerbereich der Anweisungssteuerungseinrichtung gespeichert. Wie vorher besonders erwähnt weist jedes Untermodul des Coprozessors seinen eigenen Satz von Konfigurations- und Statusregistern auf. Diese Register werden im Verlauf der regulären Anweisungsausführung eingestellt. Alle diese Register erscheinen in der Registerspeicherbelegung, und viele werden als Teil der Anweisungsausführung implizit modifiziert. Diese sind über die Registerspeicherbelegung alle für den Host sichtbar.
  • 3.4 Format von mehreren Strömen
  • Wie vorher besonders erwähnt führt der Coprozessor 224 zum Maximieren der Nutzung seiner Betriebsmittel und zum Sorgen für eine schnelle Ausgabe auf einer beliebigen externen Peripherievorrichtung einen von zwei unabhängigen Anweisungsströmen aus. Typischerweise ist ein Anweisungsstrom einer durch eine Ausgabevorrichtung in einer rechtzeitigen Art und Weise benötigten derzeitigen Ausgabeseite zugeordnet, während der zweite Anweisungsstrom die Module des Coprozessors 224 nutzt, wenn der andere Anweisungsstrom untätig ist. Klarerweise bestehen die vorrangigen Gebote darin, die erforderlichen Ausgabedaten in einer rechtzeitigen Art und Weise bereitzustellen, während gleichzeitig versucht wird, die Verwendung von Betriebsmitteln für die Vorbereitung von nachfolgenden Seiten, Bändern etc. zu maximieren. Der Coprozessor 224 ist daher zum Ausführen von zwei vollständig unabhängigen, aber identisch realisierten Anweisungsströmen (nachher als A und B bezeichnet) entworfen. Die Anweisungen werden vorzugsweise durch auf der Host-CPU 202 (1) laufende Software erzeugt und zur Ausführung durch den Coprozessor 224 zu der Rasterbildbeschleunigungskarte 220 weitergeleitet. Während eines normalen Betriebs arbeitet einer der Anweisungsströme (Strom A) mit einer höheren Priorität als der andere Anweisungsstrom (Strom B). Der Strom oder die Warteschlange von Anweisungen wird durch die Host-CPU 202 in einen Puffer oder eine Liste von Puffern in dem Host-RAM 203 (1) geschrieben. Die Puffer werden zu einer Startzeit zugeordnet und für die Dauer der Anwendung in den physikalischen Speicher des Hosts 203 eingeschlossen (locked). Jede Anweisung wird vorzugsweise in der Virtueller-Speicher-Umgebung des Host-RAM 203 gespeichert, und der Rasterbildcoprozessor 224 nutzt ein Virtuelle-zu-physikalische-Adresse-Übersetzungsschema zum Bestimmen einer entsprechenden physikalischen Adresse mit dem RAM 203 in dem Host für die Speicherstelle einer nächsten Anweisung. Diese Anweisungen können alternativ in dem lokalen Speicher des Coprozessors 224 gespeichert werden.
  • Nachstehend 8 zugewendet ist dort das Format von zwei Anweisungsströmen A und B 270, 271, die in dem Host-RAM 203 gespeichert werden, veranschaulicht. Das Format jedes der Ströme A und B ist im Wesentlichen identisch.
  • Kurz gesagt besteht das Ausführungsmodell für den Coprozessor 224 aus:
    • • Zwei virtuellen Strömen von Anweisungen, dem A-Strom und dem B-Strom.
    • • Immer nur eine Anweisung wird ausgeführt.
    • • Jeder Strom kann Priorität haben, oder die Priorität kann auf dem Weg über "Round Robin" gegeben sein.
    • • Jeder Strom kann "eingeschlossen" sein, das heißt es kann garantiert sein, dass er ohne Rücksicht auf Stromprioritäten oder eine Verfügbarkeit von Anweisungen in dem anderen Strom ausgeführt wird.
    • • Jeder Strom kann leer sein.
    • • Jeder Strom kann gesperrt sein.
    • • Jeder Strom kann Anweisungen enthalten, die "überlagert" sein können, das heißt eine Ausführung der Anweisung kann mit der der folgenden Anweisung überlagert sein, falls die folgende Anweisung nicht ebenfalls "überlagert" ist.
    • • Jede Anweisung weist eine "eindeutige" zunehmende 32-Bit-Sequenznummer auf.
    • • Jede Anweisung kann zum Veranlassen einer Unterbrechung und/oder einer Pause bei der Anweisungsausführung codiert werden.
    • • Anweisungen können spekulativ vorab abgerufen (prefetched) werden, um die Auswirkungen einer Externe-Schnittstelle-Latenz zu minimieren.
  • Die Anweisungssteuerungseinrichtung 235 ist für ein Realisieren des eine Gesamtausführungssteuerung des Coprozessors 224 unterhaltenden Anweisungsausführungsmodells des Coprozessors und ein Abrufen von Anweisungen aus dem Host-RAM 203 nach Bedarf verantwortlich. Auf einer Pro-Anweisung-Grundlage führt die Anweisungssteuerungseinrichtung 235 die Anweisungsdecodierung aus und konfiguriert die verschiedenen Register in den Modulen über den CBus 231, um die entsprechenden Module zum Ausführen der Anweisung zu zwingen.
  • Nachstehend 9 zugewendet ist dort eine vereinfachte Form des durch die Anweisungssteuerungseinrichtung 235 ausgeführten Anweisungsausführungszyklus veranschaulicht. Der Anweisungsausführungszyklus besteht aus vier Hauptstadien 276279. Das erste Stadium 276 dient zum Bestimmen, ob eine Anweisung in einem beliebigen Anweisungsstrom ansteht. Falls dies der Fall ist, wird eine Anweisung mittels eines Aktualisierens von Registern 279 abgerufen 277, decodiert und ausgeführt 278.
  • 3.5 Derzeitigen aktiven Strom bestimmen
  • Bei dem Realisieren des ersten Stadiums 276 sind zwei Schritte vorhanden, die unternommen werden müssen:
    • 1. Bestimmen, ob eine Anweisung ansteht; und
    • 2. Entscheiden, welcher Strom von Anweisungen als Nächstes abgerufen werden sollte.
  • Bei dem Bestimmen, ob Anweisungen anstehen, müssen die folgenden möglichen Bedingungen untersucht werden:
    • 1. ob die Anweisungssteuerungseinrichtung freigegeben ist;
    • 2. ob die Anweisungssteuerungseinrichtung verursacht durch einen internen Fehler oder eine interne Unterbrechung pausiert;
    • 3. ob eine anstehende externe Fehlerbedingung vorhanden ist;
    • 4. ob einer des A-Stroms oder B-Stroms eingeschlossen ist;
    • 5. ob eine Strom-Sequenznummerierung freigegeben ist; und
    • 6. ob ein Strom eine anstehende Anweisung enthält.
  • Der folgende Pseudocode beschreibt den Algorithmus zum Bestimmen, ob eine Anweisung ansteht, gemäß den vorstehenden Regeln. Dieser Algorithmus kann über eine Zustandsübergangsmaschine in der Anweisungssteuerungseinrichtung 235 in einer bekannten Art und Weise in Hardware realisiert werden:
  • Figure 00520001
  • Figure 00530001
  • Wenn keine anstehende Anweisung gefunden wird, dann wird die Anweisungssteuerungseinrichtung 235"sich im Kreis drehen" ("spin") oder leer laufen, bis eine anstehende Anweisung gefunden wird.
  • Zum Bestimmen, welcher Strom "aktiv" ist und welcher Strom als Nächstes ausgeführt wird, werden die folgenden möglichen Bedingungen untersucht:
    • 1. ob ein Strom eingeschlossen ist;
    • 2. welche Priorität dem A-Strom und B-Strom zugewiesen ist und welches der letzte Anweisungsstrom war;
    • 3. ob ein Strom freigegeben ist; und
    • 4. ob ein Strom eine anstehende Anweisung enthält.
  • Der folgende durch die Anweisungssteuerungseinrichtung realisierte Pseudocode beschreibt, wie der nächste aktive Anweisungsstrom zu bestimmen ist:
  • Figure 00540001
  • Figure 00550001
  • Da die Bedingungen sich ständig ändern können, müssen alle Bedingungen atomar (atomically) zusammen bestimmt werden.
  • 3.6 Anweisung aus derzeitigem aktivem Strom abrufen
  • Nachdem der nächste aktive Anweisungsstrom bestimmt ist, ruft die Anweisungssteuerungseinrichtung 235 die Anweisung unter Verwendung der Adresse in dem entsprechenden Anweisungszeigerregister (ic_ipa oder ic_ipb) ab. Die Anweisungssteuerungseinrichtung 235 ruft jedoch keine Anweisung ab, falls bereits eine gültige Anweisung in einem in der Anweisungssteuerungseinrichtung 235 gespeicherten Vorababrufpuffer (prefetch puffer) vorhanden ist.
  • Eine gültige Anweisung ist in dem Vorababrufpuffer vorhanden, falls
    • 1. der Vorababrufpuffer gültig ist; und
    • 2. die Anweisung in dem Vorababrufpuffer aus dem gleichen Strom wie dem derzeit aktiven Strom stammt.
  • Die Gültigkeit der Inhalte des Vorababrufpuffers wird durch ein Vorababrufbit in dem Register ic_stat angegeben, das bei einem erfolgreichen Anweisungsvorababruf eingestellt wird. Ein externes Schreiben in eines der Register der Anweisungssteuerungseinrichtung 235 veranlasst, dass die Inhalte des Vorababrufpuffers für ungültig erklärt werden (invalidated).
  • 3.7 Anweisung decodieren und ausführen
  • Sobald eine Anweisung abgerufen und angenommen worden ist, decodiert die Anweisungssteuerungseinrichtung 235 sie und konfiguriert die Register 229 des Coprozessors 224 zum Ausführen der Anweisung.
  • Das durch den Rasterbildcoprozessor 224 genutzte Anweisungsformat unterscheidet sich dahingehend von herkömmlichen Prozessoranweisungssätzen, dass die Anweisungserzeugung Anweisung für Anweisung durch die Host-CPU 202 ausgeführt werden muss und als solche ein direkter Overhead für den Host ist. Ferner sollten die Anweisungen so klein wie möglich sein, da sie in dem Host-RAM 203 gespeichert und über den PCI-Bus 206 gemäß 1 zu dem Coprozessor 224 transferiert werden müssen. Der Coprozessor 224 kann vorzugsweise mit nur einer Anweisung zum Betrieb eingerichtet werden. So viel Flexibilität wie möglich sollte durch den Anweisungssatz bewahrt werden, um den Bereich von irgendwelchen zukünftigen Änderungen zu maximieren. Ferner findet vorzugsweise eine durch den Coprozessor 224 ausgeführte Anweisung bei einem langen Strom von Operandendaten Anwendung, um dadurch die beste Leistung zu erreichen. Der Coprozessor 224 wendet eine Anweisungsdecodierungsphilosophie an, die zum Erleichtern eines einfachen und schnellen Decodierens für "typische Anweisungen" entworfen ist, aber es dem Hostsystem immer noch ermöglicht, für "atypische" Operationen eine feinere Steuerung über den Betrieb des Coprozessors 224 anzuwenden.
  • Nachstehend 10 zugewendet ist dort das Format einer einzelnen Anweisung 280 veranschaulicht, die acht Wörter von jeweils 32 Bits umfasst. Jede Anweisung weist ein Anweisungswort oder einen Anweisungsoperationscode 281 und ein Operanden- oder Ergebnistypdatenwort 282, das das Format der Operanden definiert, auf. Die Adressen 283285 von drei Operanden A, B und C sind zusätzlich zu einer Ergebnisadresse 286 ebenfalls bereitgestellt. Ferner ist ein Bereich 287 zur Verwendung durch die Host-CPU 202 zum Speichern von für die Anweisung relevanten Informationen bereitgestellt.
  • Die Struktur 290 eines Anweisungsoperationscodes 281 einer Anweisung ist in 11 veranschaulicht. Der Anweisungsoperationscode ist 32 Bits lang und weist einen Hauptoperationscode (major opcode) 291, einen Nebenoperationscode (minor opcode) 292, ein Unterbrechungsbit (I-Bit) 293, ein Teildecodierungsbit (Pd-Bit) 294, ein Registerlängenbit (R-Bit) 295, ein Einschlussbit (L-Bit, lock bit) 296 und eine Länge 297 auf. Eine Beschreibung der Felder in dem Anweisungswort 290 stellt sich dar wie durch die folgende Tabelle bereitgestellt.
  • Tabelle 2: Operationscodebeschreibung
    Figure 00570001
  • Figure 00580001
  • Figure 00590001
  • Auf dem Weg über die Erörterung der verschiedenen Felder eines Operationscodes kann durch ein Einstellen des I-Bit-Felds 293 die Anweisung derart codiert werden, dass die Anweisungsausführung eine Unterbrechung und Pause bei einem Abschluss der Anweisung einstellt. Diese Unterbrechung wird eine "Anweisung-abgeschlossen-Unterbrechung" genannt. Das Teildecodierungsbit 294 sorgt für einen Teildecodierungsmechanismus derart, dass dann, wenn das Bit eingestellt und auch in dem Register ic_cfg freigegeben ist, die verschiedenen Module vor der Ausführung der Anweisung in einer Art und Weise, die im Folgenden ausführlicher erläutert wird, mikrocodiert (micro coded) werden können. Das Einschlussbit 296 kann für Operationen genutzt werden, die mehr als eine Anweisung zum Einrichten benötigen. Dies kann ein Einstellen von verschiedenen Registern vor einer Anweisung umfassen und stellt die Fähigkeit zum "Einschließen" in dem derzeitigen Anweisungsstrom für die nächste Anweisung bereit. Wenn das L-Bit 296 eingestellt ist, wird die nächste Anweisung aus dem gleichen Strom abgerufen, sobald eine Anweisung abgeschlossen ist. Das Längenfeld 297 weist eine natürliche Definition für jede Anweisung auf und ist nach Bedarf als die Anzahl von "Eingabedateneinheiten" oder die Anzahl von "Aungabedateneinheiten" definiert. Das Längenfeld 297 ist nur 16 Bits lang. Für auf einem Strom von Eingabedateneinheiten größer als 64000 Einheiten arbeitende Anweisungen kann das R-Bit 295 eingestellt werden, wobei in diesem Fall die Eingabelänge aus einem Register po_len in der Bildelementorganisationseinrichtung 246 gemäß 2 entnommen wird. Dieses Register wird unmittelbar vor einer derartigen Anweisung eingestellt.
  • Zu 10 zurückkehrend variiert die für eine gegebene Anweisung erforderliche Anzahl von Operanden 283286 abhängig von dem Typ von genutzter Anweisung ein wenig. Die folgende Tabelle legt die Anzahl von Operanden und die Längendefinition für jeden Anweisungstyp dar:
  • Tabelle 3: Operandentypen
    Figure 00600001
  • Figure 00610001
  • Nachstehend 12 zugewendet ist dort erstens das Datenwortformat 300 des Datenworts oder Operandendeskriptors 282 gemäß 10 für Anweisungen mit drei Operanden und zweitens das Datenwortformat 301 für Anweisungen mit zwei Operanden veranschaulicht. Die Einzelheiten der Codierung der Operandendeskriptoren sind in der folgenden Tabelle bereitgestellt:
  • Tabelle 4: Operandendeskriptoren
    Figure 00610002
  • Figure 00620001
  • Unter Bezugnahme auf die vorstehende Tabelle sollte es beachtet werden, dass der Coprozessor 224 zuerst hinsichtlich der Konstante-Daten-Adressierungsbetriebsart zum Abrufen oder andernfalls Berechnen einer internen Dateneinheit und Verwenden dieser Einheit für die Länge der Anweisung für den Operand eingerichtet wird. In der Kacheladressierungsbetriebsart wird der Coprozessor 224 zum zyklischen Durchlaufen eines kleinen Satzes von Daten eingerichtet, was eine "Kachelungswirkung" ("tiling effect") erzeugt. Wenn das L-Bit eines Operandendeskriptors Null ist, dann sind die Daten unmittelbar, das heißt die Dateneinheiten erscheinen wörtlich in dem Operandenwort.
  • Wieder zu 10 zurückkehrend enthält jedes der Operanden- und Ergebniswörter 283286 entweder den Wert des Operanden selbst oder eine virtuelle 32-Bit-Adresse zu dem Anfang des Operanden oder Ergebnisses, wo Daten zu finden oder speichern sind.
  • Die Anweisungssteuerungseinrichtung 235 gemäß 2 geht zu einem Decodieren der Anweisung in zwei Stadien über. Sie überprüft zuerst, um zu sehen, ob der Hauptoperationscode der Anweisung gültig ist, wobei ein Fehler hervorgerufen wird, falls der Hauptoperationscode 291 (11) ungültig ist. Als Nächstes wird die Anweisung mittels eines Einstellens der verschiedenen Register über den CBus 231 zum Widerspiegeln der durch die Anweisung bestimmten Operation durch die Anweisungssteuerungseinrichtung 235 ausgeführt. Einige Anweisungen können kein Einstellen von Registern benötigen.
  • Die Register für jedes Modul können basierend auf ihrem Verhalten in Typen klassifiziert werden. Als Erstes ist der Statusregistertyp vorhanden, der für andere Module "nur lesen" und für das das Register enthaltende Modul "lesen/schreiben" ist. Als Nächstes ist ein erster Typ von Konfigurationsregister, der im Folgenden "Konfig1" genannt wird, extern für die Module "lesen/schreiben" und für das das Register enthaltende Modul "nur lesen". Diese Register werden normalerweise zum Erhalten von Konfigurationsinformationen eines größeren Typs wie beispielsweise Adresswerten verwendet. Ein zweiter Typ von Konfigurationsregister, der dabei als "Konfig2" bekannt ist, ist für jedes Modul lesbar und schreibbar, aber ist für das das Register enthaltende Modul nur zum Lesen. Dieser Typ von Register wird genutzt, wenn eine Bit-für-Bit-Adressierung des Registers erforderlich ist.
  • Es ist eine Anzahl von Registern des Steuerungstyps bereitgestellt. Ein erster Typ, der im Folgenden als "Steuerung1"-Register bekannt ist, ist für alle Module (einschließlich des Moduls, das das Register enthält) lesbar und schreibbar. Die Steuerung1-Register werden zum Halten von großen Steuerungsinformationen wie beispielsweise Adresswerten genutzt. Analog ist ferner ein zweiter Typ von Steuerungsregister, der im Folgenden als "Steuerung2" bekannt ist, bereitgestellt, der auf einer Bit-für-Bit-Grundlage eingestellt werden kann.
  • Ein letzter Typ von Register, der als ein Unterbrechungsregister bekannt ist, weist Bits in dem Register auf, die durch das das Register enthaltende Modul auf 1 einstellbar sind und durch ein Schreiben einer "1" in das Bit, das eingestellt worden ist, extern auf Null rücksetzbar sind. Dieser Typ von Register wird zum Behandeln der durch jedes der Module gekennzeichneten Unterbrechungen/Fehler genutzt.
  • Jedes der Module des Coprozessors 224 stellt eine Leitung c_aktiv bzw. c_active auf dem CBus 231 ein, wenn es mit einem Ausführen einer Anweisung beschäftigt ist. Die Anweisungssteuerungseinrichtung 235 kann daraufhin bestimmen, wann Anweisungen abgeschlossen worden sind, indem sie die von jedem der Module über den CBus 231 kommenden Leitungen c_active "mit ODER verknüpft" ("OR-ing"). Das Lokaler-Speicher-Steuerungseinrichtung-Modul 236 und das Peripherieschnittstelle-Steuerungseinrichtung-Modul 237 können überlagerte Anweisungen ausführen und weisen eine Leitung c_Hintergrund bzw. c_background auf, die aktiviert wird, wenn sie eine überlagerte Anweisung ausführen. Die überlagerten Anweisungen sind Daten zwischen der Lokaler-Speicher-Schnittstelle und der Peripherieschnittstelle transferierende "Lokaler-DMA"-Anweisungen ("local DMA" instructions).
  • Der Ausführungszyklus für eine überlagerte Lokaler-DMA-Anweisung weicht leicht von dem Ausführungszyklus anderer Anweisungen ab. Falls auf eine überlagerte Anweisung zur Ausführung getroffen wird, überprüft die Anweisungssteuerungseinrichtung 235, ob bereits eine ausgeführte überlagerte Anweisung vorhanden ist. Falls sie vorhanden ist oder die Überlagerung gesperrt ist, wartet die Anweisungssteuerungseinrichtung 235 darauf, dass die Anweisung beendet wird, bevor sie mit der Ausführung der Anweisung fortfährt. Falls sie nicht vorhanden ist und die Überlagerung freigegeben ist, codiert die Anweisungssteuerungseinrichtung 235 unmittelbar die überlagerte Anweisung und konfiguriert die Peripherieschnittstelle-Steuerungseinrichtung 237 und die Lokaler-Speicher-Steuerungseinrichtung 236 zum Ausführen der Anweisung. Nachdem die Registerkonfiguration abgeschlossen ist, geht die Anweisungssteuerungseinrichtung 235 daraufhin zu einem Aktualisieren ihrer Register (einschließlich des Beendet-Registers, des Statusregisters, des Anweisungszeigers etc.) weiter, ohne darauf zu warten, dass die Anweisung in dem herkömmlichen Sinne "abgeschlossen" wird. Falls in diesem Moment die Beendet-Sequenznummer gleich der Unterbrechungssequenznummer ist, wird die Unterbrechung 'die überlagerte Anweisung ist abgeschlossen' vorbereitet, statt die Unterbrechung unmittelbar hervorzurufen. Die Unterbrechung 'überlagerte Anweisung abgeschlossen' wird hervorgerufen, wenn die überlagerte Anweisung vollständig abgeschlossen worden ist.
  • Sobald die Anweisung decodiert worden ist, versucht die Anweisungssteuerungseinrichtung, die nächste Anweisung vorab abzurufen, während die derzeitige Anweisung ausgeführt wird. Die meisten Anweisungen brauchen beträchtlich länger zum Ausführen als sie zum Abrufen und Decodieren brauchen werden. Die Anweisungssteuerungseinrichtung 235 ruft eine Anweisung vorab ab, falls alle die folgenden Bedingungen erfüllt sind:
    • 1. die derzeit ausgeführte Anweisung ist nicht zum Unterbrechen und Pausieren eingestellt;
    • 2. die derzeit ausgeführte Anweisung ist keine Sprunganweisung;
    • 3. bei dem nächsten Anweisungsstrom ist der Vorababruf freigegeben; und
    • 4. es ist eine weitere anstehende Anweisung vorhanden.
  • Falls die Anweisungssteuerungseinrichtung 235 bestimmt, dass ein Vorababrufen möglich ist, fordert sie die nächste Anweisung an, platziert sie in einem Vorababrufpuffer und erklärt daraufhin den Puffer für gültig (validate). An diesem Punkt ist nichts mehr für die Anweisungssteuerungseinrichtung 235 zu tun, bis die derzeit ausgeführte Anweisung abgeschlossen worden ist. Die Anweisungssteuerungseinrichtung 235 bestimmt den Abschluss einer Anweisung durch ein Untersuchen der dem CBus 231 zugeordneten Leitungen c_active und c_background.
  • 3.8 Register der Anweisungssteuerungseinrichtung aktualisieren
  • Bei einem Abschluss einer Anweisung aktualisiert die Anweisungssteuerungseinrichtung 235 ihre Register, um den neuen Zustand widerzuspiegeln. Dies muss atomar getan werden, um Probleme mit einem Synchronisieren mit möglichen externen Zugriffen zu vermeiden. Dieser atomare Aktualisierungsprozess umfasst:
    • 1. Erhalten des passenden Registerzugriffssemaphors. Falls der Semaphor durch einen für die Anweisungssteuerungseinrichtung 235 externen Agenten genommen wird, wartet der Anweisungsausführungszyklus an diesem Punkt darauf, dass der Semaphor freigegeben wird, bevor er fortfährt.
    • 2. Aktualisieren der passenden Register. Der Anweisungszeiger (ic_ipa und ic_ipb) wird um die Größe einer Anweisung erhöht, sofern die Anweisung kein erfolgreicher Sprung war, wobei in diesem Fall der Zielwert des Sprungs in den Anweisungszeiger geladen wird.
  • Das Beendet-Register (ic_fna oder ic_fnb) wird daraufhin erhöht, falls die Sequenznummerierung freigegeben ist.
  • Das Statusregister (ic_stat) wird ebenfalls passend aktualisiert, um den neuen Zustand widerzuspiegeln. Dies schließt gegebenenfalls ein Einstellen der Pausebits ein. Die Anweisungssteuerungseinrichtung 235 pausiert, falls eine Unterbrechung aufgetreten ist und ein Pausieren für die Unterbrechung freigegeben ist oder falls ein Fehler aufgetreten ist. Das Pausieren wird durch ein Einstellen der Anweisungsstrom-Pausebits in dem Statusregister (Bits a_pause oder b_pause in ic_stat) realisiert. Zum Fortsetzen der Anweisungsausführung sollten diese Bits auf 0 rückgesetzt werden.
    • 3. Geltendmachen (asserting) eines Signals c_end auf dem CBus 231 für einen Taktzyklus, was anderen Modulen in dem Coprozessor 224 zeigt, dass eine Anweisung abgeschlossen worden ist.
    • 4. Hervorrufen einer Unterbrechung bei Bedarf. Eine Unterbrechung wird hervorgerufen, falls:
    • a. Eine Unterbrechung "Sequenznummer abgeschlossen" auftritt. Das heißt, falls die Sequenznummer des Beendet-Registers (ic_fna oder ic_fnb) die gleiche wie die Unterbrechungssequenznummer ist. Daraufhin wird diese Unterbrechung vorbereitet, die Sequenznummerierung wird freigegeben, und die Unterbrechung tritt auf; oder
    • b. Die gerade abgeschlossene Anweisung zum Unterbrechen eines Abschlusses codiert wurde, woraufhin dieser Mechanismus freigegeben wird.
  • 3.9 Semantik des Registerzugriffssemaphors
  • Der Registerzugriffssemaphor ist ein Mechanismus, der atomare Zugriffe auf mehrere Anweisungssteuerungseinrichtung-Register bereitstellt. Die Register, die einen atomaren Zugriff benötigen können, stellen sich dar wie folgt:
    • 1. Anweisungszeigerregister (ic_ipa und ic_ipb)
    • 2. Zu-erledigen-Register (ic_tda und ic_tdb)
    • 3. Beendet-Register (ic_fna und ic_fnb)
    • 4. Unterbrechungsregister (ic_inta und ic_intb)
    • 5. Die Pausenbits in dem Konfigurationsregister (ic_cfg)
  • Externe Agenten können alle Register zu jeder Zeit sicher lesen. Externe Agenten können zu jeder Zeit in beliebige Register schreiben, jedoch muss zum Sicherstellen, dass die Anweisungssteuerungseinrichtung 235 Werte in diesen Registern nicht aktualisiert, der externe Agent zuerst den Registerzugriffssemaphor erhalten. Die Anweisungssteuerungseinrichtung versucht nicht, irgendwelche Werte in den vorstehend angeführten Registern zu aktualisieren, falls der Registerzugriffssemaphor extern beansprucht wird. Die Anweisungssteuerungseinrichtung 235 aktualisiert alle die vorstehend angeführten Register in einem Taktzyklus, um die Atomarität sicherzustellen.
  • Wie vorstehend angeführt wird jeder Anweisung eine 32-Bit-"Sequenznummer" zugeordnet, sofern der Mechanismus nicht gesperrt ist. Anweisungssequenznummern nehmen von 0xFFFFFFFF bis 0x00000000 durchlaufend zu.
  • Wenn ein externes Schreiben in eines der Unterbrechungsregister (ic_inta oder ic_intb) ausgeführt wird, führt die Anweisungssteuerungseinrichtung 235 unmittelbar die folgenden Vergleiche und Aktualisierungen aus:
    • 1. Falls die Unterbrechungssequenznummer (das heißt, der Wert in dem Unterbrechungsregister) "größer" (in einem Modulo-Sinn) als die Beendet-Sequenznummer (das heißt, der Wert in dem Beendet-Register) des gleichen Stroms ist, bereitet die Anweisungssteuerungseinrichtung den Unterbrechungsmechanismus "Sequenznummer abgeschlossen" vor, indem sie das Vorbereitet-Bit "Sequenznummer abgeschlossen" (Bit a_primed oder b_primed in ic_stat) in dem Statusregister einstellt.
    • 2. Wenn die Unterbrechungssequenznummer nicht "größer" als die Beendet-Sequenznummer ist, aber eine im Werden befindliche überlagerte Anweisung in dem Strom vorhanden ist und die Unterbrechungssequenznummer gleich der Letzte-überlagerte-Anweisung-Sequenznummer (das heißt, dem Wert in dem Register ic_loa oder ic_lob) ist, dann bereitet die Anweisungssteuerungseinrichtung den Unterbrechungsmechanismus "Überlagerte-Anweisung-Sequenznummer abgeschlossen" vor, indem sie die Bits a_ol_primed oder b_ol_primed in dem Register ic_stat einstellt.
    • 3. Wenn die Unterbrechungssequenznummer nicht "größer" als die Beendet-Sequenznummer ist und eine im Werden befindliche überlagerte Anweisung in dem Strom vorhanden ist, aber die Unterbrechungssequenznummer nicht gleich der Letzte-überlagerte-Anweisung-Sequenznummer ist, dann stellt die Unterbrechungssequenznummer eine beendete Anweisung dar, und kein Unterbrechungsmechanismus wird vorbereitet.
    • 4. Wenn die Unterbrechungssequenznummer nicht "größer" als die Beendet-Sequenznummer ist und keine im Werden befindliche überlagerte Anweisung in dem Strom vorhanden ist, dann muss die Unterbrechungssequenznummer eine beendete Anweisung darstellen, und kein Unterbrechungsmechanismus wird vorbereitet.
  • Externe Agenten können irgendwelche der Unterbrechung-vorbereitet-Bits (Bits a_primed, a_ol_primed, b primed oder b_ol_primed) in dem Statusregister einstellen, um diesen Unterbrechungsmechanismus unabhängig zu aktivieren oder deaktivieren.
  • 3.10 Anweisungssteuerungseinrichtung
  • Nachstehend 13 zugewendet ist dort die Anweisungssteuerungseinrichtung 235 ausführlicher veranschaulicht. Die Anweisungssteuerungseinrichtung 235 weist eine Ausführungssteuerungseinrichtung 305 auf, die den Anweisungsausführungszyklus realisiert sowie die Gesamtausführungssteuerung des Coprozessors 224 aufrechterhält. Die Funktionen der Ausführungssteuerungseinrichtung 305 umfassen ein Aufrechterhalten der Gesamtausführungssteuerung der Anweisungssteuerungseinrichtung 235, ein Bestimmen der Anweisungsablaufsteuerung, ein Initiieren des Anweisungsabrufs und -vorababrufs, ein Einleiten der Anweisungsdecodierung und ein Aktualisieren der Anweisungssteuerungseinrichtung-Register. Die Anweisungssteuerungseinrichtung weist ferner einen Anweisungsdecodierer 306 auf. Der Anweisungsdecodierer 306 nimmt Anweisungen von einer Vorababrufpuffersteuerungseinrichtung 307 an und decodiert sie gemäß der vorstehend angeführten Beschreibung. Der Anweisungsdecodierer 306 ist für ein Konfigurieren von Registern in den anderen Coprozessormodulen zum Ausführen der Anweisung verantwortlich. Die Vorababrufpuffersteuerungseinrichtung 307 verwaltet das Lesen aus einem Vorababrufpuffer und Schreiben in den Vorababrufpuffer in der Vorababrufpuffersteuerungseinrichtung und verwaltet die Koppelung zwischen dem Anweisungsdecodierer 306 und dem Eingabeschnittstellenschalter 252 (2). Die Vorababrufpuffersteuerungseinrichtung 307 ist auch für ein Verwalten des Aktualisierens der zwei Anweisungszeigerregister (ic_ipa und ic_ipb) verantwortlich. Ein Zugriff auf den CBus 231 (2) durch die Anweisungssteuerungseinrichtung 235, das Sonstiges-Modul 239 (2) und die Externe-Schnittstelle-Steuerungseinrichtung 238 (2) wird durch eine "CBus"-Arbitrierungseinrichtung ("CBus" arbitrator) 308 gesteuert, die zwischen den Anforderungen eines Zugriffs der drei Module arbitriert (arbitrates). Die Anforderungen werden mittels eines Steuerungsbusses (CBus) 231 zu den Registereinheiten der verschiedenen Module transferiert.
  • Nachstehend 14 zugewendet ist dort die Ausführungssteuerungseinrichtung 305 gemäß 13 ausführlicher veranschaulicht. Wie vorher besonders erwähnt ist die Ausführungssteuerungseinrichtung für ein Realisieren des Anweisungsausführungszyklus 275 gemäß 9 verantwortlich und ist insbesondere verantwortlich für:
    • 1. Bestimmen, aus welchem Anweisungsstrom die nächste Anweisung zu kommen hat;
    • 2. Einleiten eines Abrufens der Anweisung;
    • 3. Dem Anweisungsdecodierer signalisieren, die Anweisung wie in dem Vorababrufpuffer befindlich zu decodieren;
    • 4. Bestimmen und Einleiten eines Vorababrufens der nächsten Anweisung;
    • 5. Bestimmen eines Anweisungsabschlusses; und
    • 6. Aktualisieren der Register, nachdem die Anweisung abgeschlossen worden ist.
  • Die Ausführungssteuerungseinrichtung weist eine im Folgenden als "das Zentralgehirn" ("the central brain") bekannte Zustandsmaschine mit großem Kern 310 auf, die den Gesamtanweisungsausführungszyklus realisiert. 15 zugewendet ist dort das Zustandsmaschinendiagramm für das Zentralgehirn 310 veranschaulicht, das den Anweisungsausführungszyklus wie vorstehend angeführt realisiert. Zu 14 zurückkehrend weist die Ausführungssteuerungseinrichtung eine Anweisungsvorababruflogikeinheit 311 auf. Diese Einheit ist für ein Bestimmen, ob eine auszuführende unerledigte Anweisung vorhanden ist und zu welchem Anweisungsstrom die Anweisung gehört, verantwortlich. Die Zustände Start 312 und Vorababruf 313 des Übergangsdiagramms gemäß 15 nutzen diese Informationen bei einem Erhalten von Anweisungen. Eine Registerverwaltungseinheit 317 gemäß 14 ist für ein Überwachen der Registerzugriffssemaphore bei beiden Anweisungsströmen und ein Aktualisieren aller notwendigen Register in jedem Modul verantwortlich. Die Registerverwaltungseinheit 317 ist auch für ein Vergleichen des Beendet-Registers (ic_fna oder ic_fnb) mit dem Unterbrechungsregister (ic_inta oder ic_intb) zum Bestimmen, ob eine Unterbrechung "Sequenznummer abgeschlossen" fällig ist, verantwortlich. Die Registerverwaltungseinheit 317 ist auch für eine Unterbrechungsvorbereitung verantwortlich. Eine Überlagerte-Anweisungen-Einheit 318 ist für ein Verwalten des Aufarbeitens einer überlagerten Anweisung durch eine Verwaltung der passenden Statusbits in dem Register ic_stat verantwortlich. Die Ausführungssteuerungseinrichtung weist auch eine Decodiererschnittstelleneinheit 319 zum Koppeln zwischen dem Zentralgehirn 310 und dem Anweisungsdecodierer 206 gemäß 13 auf.
  • Nachstehend 16 zugewendet ist dort der Anweisungsdecodierer 306 ausführlicher veranschaulicht. Der Anweisungsdecodierer ist für ein Konfigurieren des Coprozessors zum Ausführen der sich in dem Vorababrufpuffer befindenden Anweisungen verantwortlich. Der Anweisungsdecodierer 306 weist eine Anweisungsdecodiererablaufsteuerung 321 auf, die eine in viele kleinere Zustandsmaschinen aufgegliederte große Zustandsmaschine umfasst. Die Anweisungsablaufsteuerung 321 kommuniziert mit einem CBus-Verteiler 312, der für ein Einstellen der Register in jedem Modul verantwortlich ist. Die Anweisungsdecodiererablaufsteuerung 321 überträgt auch relevante Informationen wie beispielsweise Anweisungsgültigkeit und Anweisungsüberlagerungsbedingungen zu der Ausführungssteuerungseinrichtung. Die Anweisungsgültigkeitsüberprüfung dient dazu, zu überprüfen, dass der Anweisungsoperationscode keiner der reservierten Operationscodes ist.
  • Nachstehend 17 zugewendet ist dort die Anweisungsabfertigungsablaufsteuerung 321 gemäß 16 ausführlicher veranschaulicht. Die Anweisungsabfertigungsablaufsteuerung 321 weist eine Gesamtfolgesteuerung-Zustandsmaschine 324 und eine Reihe von Pro-Modulkonfiguration-Ablaufsteuerung-Zustandsmaschinen (per module configuration sequencer state machines), zum Beispiel 325, 326, auf. Für jedes zu konfigurierende Modul ist eine Pro-Modulkonfiguration-Ablaufsteuerung-Zustandsmaschine bereitgestellt. Zusammen realisieren die Zustandsmaschinen die Coprozessor-Mikroprogrammierung der Module. Die Zustandsmaschinen, zum Beispiel 325, weisen den CBus-Verteiler zum Nutzen des globalen CBus zum Einstellen verschiedener Register an, um die verschiedenen Module zur Verarbeitung zu konfigurieren. Eine Nebenwirkung des Schreibens in spezielle Register besteht darin, dass die Anweisungsausführung beginnt. Die Anweisungsausführung braucht typischerweise viel länger als die Zeit, die die Ablaufsteuerung 321 zum Konfigurieren der Coprozessorregister zur Ausführung braucht.
  • In der Praxis konfiguriert die Anweisungsdecodierungsablaufsteuerung 321 nicht alle die Module in dem Coprozessor für jede Anweisung. Die nachstehende Tabelle zeigt die Reihenfolge bzw. Ordnung der Modulkonfiguration für jede Klasse von Anweisung, wobei die konfigurierten Module die Bildelementorganisationseinrichtung 246 (PO), die Daten-Cache-Steuerungseinrichtung 240 (DCC), die Operandenorganisationseinrichtung B 247 (OOB), die Operandenorganisationseinrichtung C 248 (OOC), den Hauptdatenweg 242 (MDP), die Ergebnisorganisationseinrichtung 249 (RO) und den JPEG-Codierer 241 (JC) einschließen. Einige der Module werden während des Verlaufs der Anweisungsdecodierung nie konfiguriert. Diese Module sind die Externe-Schnittstelle-Steuerungseinrichtung 238 (EIC), die Lokaler-Speicher-Steuerungseinrichtung 236 (LMC), die Anweisungssteuerungseinrichtung 235 selbst (IC), der Eingabeschnittstellenschalter 252 (IIS) und das Sonstiges-Modul (MM).
  • Tabelle 5: Modul-Setup-Ordnung
    Figure 00750001
  • Figure 00760001
  • Nachstehend 17 zugewendet ist jede der Modulkonfiguration-Ablaufsteuerungen, zum Beispiel 325, für ein Ausführen der erforderlichen Registerzugriffsoperationen zum Konfigurieren des speziellen Moduls verantwortlich. Die Gesamtfolgesteuerung-Zustandsmaschine 324 ist für den Gesamtbetrieb der Modulkonfiguration-Ablaufsteuerung in der vorstehend angeführten Ordnung verantwortlich.
  • Nachstehend 18 zugewendet ist dort 330 das Zustandsübergangsdiagramm für die Gesamtfolgesteuerungseinheit veranschaulicht, die grundsätzlich die relevante Modulkonfiguration-Ablaufsteuerung gemäß der vorstehenden Tabelle aktiviert. Jede der Modulkonfiguration-Ablaufsteuerungen ist für ein Steuern des CBus-Verteilers zum Ändern von Registereinzelheiten zum Einstellen der verschiedenen Register bei dem Betrieb der Module verantwortlich.
  • Nachstehend 19 zugewendet ist dort die Vorababrufpuffersteuerungseinrichtung 307 gemäß 13 ausführlicher veranschaulicht. Die Vorababrufpuffersteuerungseinrichtung besteht aus einem Vorababrufpuffer 335 für die Speicherung einer einzelnen Coprozessoranweisung (sechs Mal 32-Bit-Wörter). Der Vorababrufpuffer weist einen durch eine IBus-Ablaufsteuerung 336 gesteuerten Schreibanschluss und einen Leseanschluss, der Daten für die Anweisungsdecodierer-, die Ausführungssteuerungseinrichtung- und die Anweisungssteuerungseinrichtung-CBus-Schnittstelle bereitstellt, auf. Die IBus-Ablaufsteuerung 336 ist für ein Einhalten von Busprotokollen bei der Verbindung des Vorababrufpuffers 335 mit dem Eingabeschnittstellenschalter verantwortlich. Eine Adressverwaltungseinrichtungseinheit 337 ist ebenfalls bereitgestellt, die sich mit einer Adresserzeugung für den Anweisungsabruf befasst. Die Adressverwaltungseinrichtungseinheit 337 führt die Funktionen des Auswählens eines von ic_ipa oder ic_ipb zum Platzieren auf dem Bus zu dem Eingabeschnittstellenschalter, Erhöhens eines von ic_ipa oder ic_ipb basierend darauf, aus welchem Strom die letzten Anweisungen abgerufen wurden, und Leitens von Sprungzieladressen zurück zu dem Register ic_ipa und ic_ipb durch. Eine PBC-Steuerungseinrichtung 339 erhält die Gesamtsteuerung der Vorababrufpuffersteuerungseinrichtung 307 aufrecht.
  • 3.11 Beschreibung einer lokalen Registerdatei eines Moduls
  • Wie in 13 veranschaulicht weist jedes Modul einschließlich des Anweisungssteuerungseinrichtungsmoduls selbst einen internen Satz von Registern 304 wie vorher definiert zusätzlich zu einer CBus-Schnittstelle-Steuerungseinrichtung 303 wie in 20 veranschaulicht und für ein Empfangen von CBus-Anforderungen und Aktualisieren von internen Registern angesichts der Anforderungen verantwortlich auf. Das Modul wird durch ein Schreiben in Register 304 in dem Modul über eine CBus-Schnittstelle 302 gesteuert. Eine CBus-Arbitrierungseinrichtung 308 (13) ist für ein Bestimmen, welches Modul der Anweisungssteuerungseinrichtung 235, der Externe-Schnittstelle-Steuerungseinrichtung oder des Sonstiges-Moduls den CBus 309 für ein Fungieren als ein Master des CBus und für das Schreiben oder Lesen von Registern steuern kann, verantwortlich.
  • 20 veranschaulicht die Standardstruktur einer CBus-Schnittstelle 303 wie durch jedes der Module genutzt ausführlicher. Die Standard-CBus-Schnittstelle 303 nimmt Lese- und Schreibanforderungen von dem CBus 302 an und weist eine Registerdatei 304 auf, die durch die verschiedenen Untermodule in einem Modul genutzt 341 und aktualisiert 341 wird. Ferner sind Steuerungsleitungen 344 für das Aktualisieren irgendwelcher Untermodulspeicherbereiche einschließlich eines Lesens der Speicherbereiche bereitgestellt. Die Standard-CBus-Schnittstelle 303 fungiert als ein Ziel auf dem CBus, wobei sie Lese- und Schreibanforderungen für das Register 304 und Speicherobjekte innerhalb anderer Untermodule annimmt.
  • Ein Signal "c_rücksetzen" bzw. "c_reset" 345 stellt jedes Register innerhalb der Standard-CBus-Schnittstelle 103 auf seinen Vorgabezustand ein. "c_reset" wird jedoch nicht die Zustandsmaschine zurücksetzen, die den Quittungsaustausch von Signalen zwischen ihr selbst und dem CBus-Master steuert, so dass selbst dann, wenn "c_reset" in der Mitte einer CBus-Transaktion geltend gemacht wird, die Transaktion immer noch mit undefinierten Wirkungen enden wird. Die Signale "c_int" 347, "c_exp" 348 und "c_err" 349 werden aus dem Inhalt von Registern err_int und err_int_en eines Moduls durch die folgenden Gleichungen erzeugt:
  • Figure 00790001
  • Die Signale "c_sdata in" 345 und "c_svalid in" sind Daten- und Gültigkeitssignale von dem vorhergehenden Modul in einer Verkettung von Modulen. Die Signale "c_sdata_out" und "c_svalid out" 350 sind Daten- und Gültigkeitssignale, die zu dem nächsten Modul in der Verkettung gehen.
  • Die Funktionalität der Standard-CBus-Schnittstelle 303 schließt ein:
    • 1. Registerlese-/-schreibhandhabung
    • 2. Speicherbereichslese-/-schreibhandhabung
    • 3. Testbetriebsartlese-/-schreibhandhabung
    • 4. Untermodulbeobachtungs-/-aktualisierungshandhabung
  • 3.12 Registerlese-/-schreibhandhabung
  • Die Standard-CBus-Schnittstelle 303 nimmt Registerlese-/-schreibanforderungen und Biteinstellungsanforderungen an, die auf dem CBus erscheinen. Es sind zwei Typen von CBus-Anweisungen vorhanden, die die Standard-CBus-Schnittstelle handhabt:
  • 1. Typ A
  • Typ-A-Operationen erlauben es anderen Modulen, 1, 2, 3 oder 4 Bytes in einem beliebigen Register innerhalb der Standard-CBus-Schnittstelle 303 zu lesen oder schreiben. Für Schreiboperationen tritt der Datenzyklus in dem Taktzyklus unmittelbar nach dem Anweisungszyklus auf. Es ist zu beachten, dass das Typfeld für ein Registerschreiben und -lesen "1000" bzw. "1001" ist. Die Standard-CBus-Schnittstelle 303 decodiert die Anweisung, um zu überprüfen, ob die Anweisung an das Modul adressiert ist und ob sie eine Lese- oder Schreiboperation ist. Für eine Leseoperation verwendet die Standard-CBus-Schnittstelle 303 das Feld "reg" der CBus-Transaktion zum Auswählen, welche Registerausgabe in den Bus "c_sdata" 350 zu stellen ist. Für Schreiboperationen verwendet die Standard-CBus-Schnittstelle 303 die Felder "reg" und "byte" zum Schreiben der Daten in das ausgewählte Register. Nachdem die Leseoperation abgeschlossen ist, gibt die Standard-CBus-Schnittstelle die Daten zurück und macht zu der gleichen Zeit "c_svalid" 350 geltend. Nachdem Schreiboperationen abgeschlossen sind, macht die Standard-CBus-Schnittstelle 303 zum Bestätigen "c_svalid" 350 geltend.
  • 2. Typ C
  • Typ-C-Operationen erlauben es anderen Modulen, ein Bit oder mehrere Bits in einem der Bytes in einem der Register zu schreiben. Anweisung und Daten werden in ein Wort gepackt.
  • Die Standard-CBus-Schnittstelle 303 decodiert die Anweisung, um zu überprüfen, ob die Anweisung an das Modul adressiert ist. Sie decodiert auch Felder "reg", "byte" und "enable", um die erforderlichen Freigabesignale zu erzeugen. Sie speichert auch das Datenfeld der Anweisung zwischen und verteilt es auf alle vier Bytes eines Worts, so dass das erforderliche Bit (die erforderlichen Bits) in jedem freigegebenen Bit (allen freigegebenen Bits) in jedem freigegebenen Byte (allen freigegebenen Bytes) geschrieben wird (werden). Für diese Operation ist keine Bestätigung erforderlich.
  • 3.13 Speicherbereichslese-/-schreibhandhabung
  • Die Standard-CBus-Schnittstelle 303 nimmt Speicherlese- und Speicherschreibanforderungen an, die auf dem CBus erscheinen. Während sie eine Speicherlese-/-schreibanforderung annimmt, überprüft die Standard-CBus-Schnittstelle 303, ob die Anforderung an das Modul adressiert ist. Daraufhin erzeugt die Standard-CBus-Schnittstelle durch ein Decodieren des Adressfelds in der Anweisung die passenden Adress- und Adressfreigabesignale 344 zu dem Untermodul, an das eine Speicherlese-/-schreiboperation adressiert ist. Für Schreiboperationen gibt die Standard-CBus-Schnittstelle auch die Bytefreigabesignale von der Anweisung an die Untermodule weiter.
  • Der Betrieb der Standard-CBus-Schnittstelle 303 wird durch eine Lese-/Schreibsteuerungseinrichtung 352 gesteuert, die das Typfeld einer CBus-Anweisung von dem CBus 302 decodiert und die passenden Freigabesignale zu der Registerdatei 304 und einer Ausgabeauswahleinrichtung 353 erzeugt, so dass die Daten in dem nächsten Zyklus in der Registerdatei 304 zwischengespeichert oder zu anderen Untermodulen 344 weitergeleitet werden. Falls die CBus-Anweisung eine Registerleseoperation ist, gibt die Lese-/Schreibsteuerungseinrichtung 352 die Ausgabeauswahleinrichtung 353 zum Auswählen der auf den Bus "c_sdata" 345 gehenden richtigen Registerausgabe frei. Falls die Anweisung eine Registerschreiboperation ist, gibt die Lese-/Schreibsteuerungseinrichtung 352 die Registerdatei 304 zum Auswählen der Daten in dem nächsten Zyklus frei. Wenn die Anweisung ein Speicherbereichslesen oder -schreiben ist, dann erzeugt die Lese-/Schreibsteuerungseinrichtung 352 die passenden Signale 344 zum Steuern der Speicherbereiche unter der Steuerung eines Moduls. Die Registerdatei 304 enthält vier Teile, wobei es sich um einen Registerauswahldecodierer 355, eine Ausgabeauswahleinrichtung 353, eine Unterbrechungserzeugungseinrichtung 356, Fehlererzeugungseinrichtung 357 und Ausnahmeerzeugungseinrichtung 358 und eine Unmaskierter-Fehler-Erzeugungseinrichtung 359 handelt, und die Registerkomponenten 360, die die Register des speziellen Moduls bilden. Der Registerauswahldecodierer 355 decodiert das Signal "ref_en" (Registerdateifreigabe), "write" und "reg" von der Lese-/Schreibsteuerungseinrichtung 352 und erzeugt die Registerfreigabesignale zum Freigeben des speziellen Registers von Interesse. Die Ausgabeauswahleinrichtung 353 wählt die auf Leitungen c_sdata_out 350 für Registerleseoperationen auszugebenden richtigen Registerdaten gemäß dem von der Lese-/Schreibsteuerungseinrichtung 352 ausgegebenen Signal "reg" aus.
  • Die Ausnahmeerzeugungseinrichtungen 356359 erzeugen ein Ausgabefehlersignal, zum Beispiel 347349, 362, wenn ein Fehler bei ihren Eingaben erkannt wird. Die Formel zum Berechnen jedes Ausgabefehlers stellt sich dar wie vorstehend angeführt.
  • Die Registerkomponenten 360 können gemäß Anforderungen wie vorher bei der Beschreibung der Struktur des Registersatzes unter Bezugnahme auf die Tabelle 5 erörtert derart definiert werden, dass sie von einer Anzahl von Typen sind.
  • 3.14 CBus-Struktur
  • Wie vorher besonders erwähnt ist der CBus (Steuerungsbus) für die Gesamtsteuerung jedes Moduls auf dem Weg über ein Transferieren von Informationen für das Einstellen von Registern in der Standard-CBus-Schnittstelle jedes Moduls verantwortlich. Es wird aus der Beschreibung der Standard-CBus-Schnittstelle ersichtlich, dass der CBus zwei Hauptzwecken dient:
    • 1. Er ist der Steuerungsbus, der jedes der Module ansteuert.
    • 2. Er ist der Zugriffsbus für RAMs, FIFOs und in jedem der Module enthaltene Statusinformationen.
  • Der CBus verwendet ein Anweisung-Adresse-Daten-Protokoll zum Steuern von Modulen durch das Einstellen von Konfigurationsregistern in den Modulen. Im Allgemeinen werden Register auf einer Pro-Anweisung-Grundlage eingestellt, aber können zu jeder Zeit modifiziert werden. Der CBus sammelt Statusinformationen und andere Informationen und greift auf RAM- und FIFO-Daten von den verschiedenen Modulen zu, indem er Daten anfordert.
  • Der CBus wird auf einer Transaktion-für-Transaktion-Grundlage angesteuert, entweder durch:
    • 1. die Anweisungssteuerungseinrichtung 235 (2), wenn sie Anweisungen ausführt,
    • 2. die Externe-Schnittstelle-Steuerungseinrichtung 238 (2), wenn sie eine Ziel-(Slave-)Betriebsart-Busoperation durchführt, oder
    • 3. eine externe Vorrichtung, falls die externe CBus-Schnittstelle so konfiguriert ist.
  • In jedem dieser Fälle wird das Ansteuerungsmodul als das Quellmodul des CBus betrachtet, und alle anderen Module werden als mögliche Ziele betrachtet. Eine Arbitrierung auf diesem Bus wird durch die Anweisungssteuerungseinrichtung ausgeführt.
  • Die folgende Tabelle legt eine zur Verwendung mit dem bevorzugten Ausführungsbeispiel geeignete Form von CBus-Signaldefinitionen dar.
  • Tabelle 6: CBus-Signaldefinition
    Figure 00840001
  • Figure 00850001
  • Ein CBus-Signal c_iad enthält die Adressierungsdaten und wird durch die Steuerungseinrichtung in zwei gesonderten Zyklen angesteuert:
    • 1. Anweisungszyklen (c_valid hoch), wo die CBus-Anweisung und eine Adresse auf c_iad angesteuert werden; und
    • 2. Datenzyklen (c_valid niedrig), wo die Daten auf c_iad (Schreiboperationen) oder c_sdata (Leseoperationen) angesteuert werden.
  • In dem Fall einer Schreiboperation werden die einer Anweisung zugeordneten Daten in dem dem Anweisungszyklus direkt folgenden Zyklus auf dem Bus c_iad platziert. In dem Fall einer Leseoperation steuert das Zielmodul der Leseoperation das Signal c_sdata an, bis der Datenzyklus abgeschlossen wird.
  • Nachstehend 21 zugewendet weist der Bus ein 32-Bit-Anweisung-Adresse-Daten-Feld auf, das von einem von drei Typen 370372 sein kann:
    • 1. Typ-A-Operationen (370) werden zum Lesen und Schreiben von Registern und den Pro-Modul-Datenbereichen in dem Coprozessor verwendet. Diese Operationen können durch die Zielbetriebsart-PCI-Zyklen durchführende Externe-Schnittstelle-Steuerungseinrichtung 238, durch die den Coprozessor für eine Anweisung konfigurierende Anweisungssteuerungseinrichtung 231 und durch die externe CBus-Schnittstelle erzeugt werden. Für diese Operationen tritt der Datenzyklus in dem dem Anweisungszyklus unmittelbar folgenden Taktzyklus auf. Der Datenzyklus wird durch das Bezeichnungsmodul unter Verwendung des Signals c_svalid bestätigt.
    • 2. Typ-B-Operationen (371) werden für Diagnosezwecke zum Zugreifen auf irgendwelchen lokalen Speicher und zum Erzeugen von Zyklen auf der generischen Schnittstelle verwendet. Diese Operationen werden durch die Zielbetriebsart-PCI-Zyklen durchführende Externe-Schnittstelle-Steuerungseinrichtung und durch die externe CBus-Schnittstelle erzeugt. Der Datenzyklus kann zu einer beliebigen Zeit nach dem Anweisungszyklus folgen. Der Datenzyklus wird durch das Zielmodul unter Verwendung des Signals c_svalid bestätigt.
    • 3. Typ-C-Operationen (372) werden zum Einstellen von einzelnen Bits in Registern eines Moduls verwendet. Diese Operationen werden durch die den Coprozessor für eine Anweisung konfigurierende Anweisungssteuerungseinrichtung 231 und durch die externe CBus-Schnittstelle erzeugt. Einer Typ-C-Operation ist kein Datenzyklus zugeordnet. Daten werden in dem Anweisungszyklus codiert.
  • Das Typfeld jeder Anweisung codiert den relevanten CBus-Transaktionstyp gemäß der folgenden Tabelle:
  • Tabelle 7: CBus-Transaktionstypen
    Figure 00860001
  • Figure 00870001
  • Das Bytefeld wird zum Freigeben von Bits in einem einzustellenden Register genutzt. Das Modulfeld definiert das spezielle Modul, an das eine Anweisung auf dem CBus adressiert ist. Das Registerfeld definiert, welches der Register in einem Modul zu aktualisieren ist. Das Adressfeld wird zum Adressieren von Speicherabschnitten genutzt, wenn eine Operation bei den Speicherabschnitten gewünscht ist, und kann zum Adressieren von RAMs, FIFOs etc. genutzt werden. Das Freigabefeld gibt ausgewählte Bits in einem ausgewählten Byte frei, wenn eine Biteinstellungsanweisung genutzt wird. Das Datenfeld enthält die bitweisen Daten der in das zur Aktualisierung ausgewählte Byte zu schreibenden Bits.
  • Wie vorher besonders erwähnt weist der CBus eine Leitung c_active für jedes Modul auf, die geltend gemacht wird, wann immer ein Modul eine anstehende unerledigte Aktivität aufweist. Die Anweisungssteuerungseinrichtung nutzt diese Signale zum Bestimmen, wann eine Anweisung abgeschlossen worden ist. Ferner enthält der CBus eine Leitung c_background für jedes Modul, die in einer Hintergrundbetriebsart zusätzlich zu irgendwelchen Rücksetzungs-, Fehler- und Unterbrechungsleitungen, einer für jedes Modul, für ein Rücksetzen, ein Erkennen von Fehlern und Unterbrechungen arbeiten kann.
  • 3.15 Datennormalisierungsschaltung
  • Mit Bezug auf 49 ist dort ein Computergraphikprozessor mit drei Hauptfunktionsblöcken gezeigt: einer Datennormalisierungseinrichtung 1062, die in jeder der Bildelementorganisationseinrichtung 246 und Operandenorganisationseinrichtungen B und C 247, 248 realisiert sein kann, einer Zentralgraphikeinrichtung in der Form des Hauptdatenwegs 242 oder der JPEG-Einheiten 241 und einem Programmieragenten 1064 in der Form einer Anweisungssteuerungseinrichtung 235. Der Betrieb der Datennormalisierungseinrichtung 1062 und der Zentralgraphikeinrichtung 1064 wird durch einen Anweisungsstrom 1066 bestimmt, der für den Programmieragenten 1064 bereitgestellt wird. Für jede Anweisung führt der Programmieragent 1064 eine Decodierungsfunktion durch und gibt interne Steuerungssignale 1067 und 1068 zu den anderen Blöcken in dem System aus. Für jedes Eingabedatenwort 1069 wird die Normalisierungseinrichtung 1062 die Daten gemäß der derzeitigen Anweisung formatieren und das Ergebnis zu der Zentralgraphikeinrichtung 1063 leiten, wenn eine weitere Verarbeitung durchgeführt wird.
  • Die Datennormalisierungseinrichtung stellt in einer vereinfachten Form die Bildelementorganisationseinrichtung und die Operandenorganisationseinrichtungen B und C dar. Jede dieser Organisationseinrichtungen realisiert die Datennormalisierungsschaltungen, wodurch eine passende Normalisierung der Eingabedaten, bevor sie zu der Zentralgraphikeinrichtung in der Form des JPEG-Codierers oder des Hauptdatenwegs geleitet werden, ermöglicht wird.
  • Die Zentralgraphikeinrichtung 1063 arbeitet auf Daten, die in einem Standardformat vorliegen, wobei es sich in diesem Fall um 32-Bit-Bildelemente handelt. Die Normalisierungseinrichtung ist somit für ein Wandeln ihrer Eingabedaten in ein 32-Bit-Bildelement-Format verantwortlich. Die Eingabedatenwörter 1069 für die Normalisierungseinrichtung sind ebenfalls 32 Bits breit, können aber die Form von entweder gepackten Komponenten oder ungepackten Bytes annehmen. Ein Eingabestrom mit gepackten Komponenten besteht aus aufeinanderfolgenden Datenobjekten in einem Datenwort, wobei die Datenobjekte 1, 2, 4, 8 oder 16 Bits breit sind. Im Gegensatz dazu besteht ein Eingabestrom mit ungepackten Bytes aus 32-Bit-Wörtern, von denen nur ein 8-Bit-Byte gültig ist. Überdies können die durch die Normalisierungseinrichtung erzeugten Bildelementdaten 11 aus 1, 2, 3 oder 4 gültigen Kanälen bestehen, wobei ein Kanal als 8 Bits breit definiert ist.
  • Nachstehend 50 zugewendet ist dort eine spezielle Hardwarerealisierung der Datennormalisierungseinrichtung 1062 ausführlicher veranschaulicht. Die Datennormalisierungseinheit 1062 besteht aus den folgenden Schaltungen: einem Zuerst-hinein-zuerst-hinaus-Puffer (FIFO) 1073, einem 32-Bit-Eingaberegister (REG1) 1074, einem 32-Bit-Ausgaberegister (REG2) 1076, Normalisierungsmultiplexern 1075 und einer Steuerungseinheit 1076. Jedes Eingabedatenwort 1069 wird in dem FIFO 1073 gespeichert und wird anschließend in REG1 1074 zwischengespeichert, wo es verbleibt, bis alle seine Eingabebits in das gewünschte Ausgabeformat gewandelt worden sind. Die Normalisierungsmultiplexer 1075 bestehen aus 32 kombinatorischen Schaltern, die in REG2 zwischenzuspeichernde Bildelemente durch ein Auswählen von Bits aus dem Wert in REG1 1074 und der derzeitigen Ausgabe des FIFO 1073 erzeugen. Somit empfangen die Normalisierungsmultiplexer 1075 zwei 32-Bit-Eingabewörter 1077, 1078, die als x[63..32] und als x[31..0] bezeichnet sind.
  • Es ist herausgefunden worden, dass ein derartiges Verfahren den Gesamtdurchsatz des Geräts verbessert, besonders wenn der FIFO während des Verlaufs einer Anweisung zumindest zwei gültige Datenwörter enthält. Dies ist typischerweise der Art und Weise zuzuschreiben, in der Datenwörter ursprünglich aus dem Speicher abgerufen worden sind. In einigen Fällen kann ein gewünschtes Datenwort oder -objekt quer über ein Paar von angrenzenden Eingabedatenwörtern in dem FIFO-Puffer ausgebreitet oder in sie "eingehüllt" ("wrapped") sein. Unter Verwendung eines zusätzlichen Eingaberegisters 1074 können die Normalisierungsmultiplexer ein vollständiges Eingabedatenwort unter Verwendung von Komponenten aus angrenzenden Datenwörtern in dem FIFO-Puffer neu zusammensetzen, wodurch ein Bedarf an einer zusätzlichen Speicherung oder Bit-Stripping-Operationen (bit-stripping operations) vor den Hauptdatenmanipulationsstadien vermieden wird. Dieser Aufbau ist besonders vorteilhaft, wenn mehrere Datenwörter eines ähnlichen Typs in die Normalisierungseinrichtung eingegeben werden.
  • Die Steuerungseinheit erzeugt Freigabesignale REG1_EN 20 und REG2_EN[3..0] 1081 zum Aktualisieren von REG1 1074 bzw. REG2 1076 sowie Signale zum Steuern des FIFO 1073 und der Normalisierungsmultiplexer 1075.
  • Der Programmierungsagent 1064 in 49 stellt die folgenden Konfigurationssignale für die Datennormalisierungseinrichtung 1062 bereit: ein Signal FIFO_WR 4, einen Normalisierungsfaktor n[2..0], einen Bitoffset b[2..0], einen Kanalzählwert c[1..0] und ein externes Format (E). Eingabedaten werden in den FIFO 1073 geschrieben, indem das Signal FIFO_WR 1085 für jeden Taktzyklus geltend gemacht wird, in dem gültige Daten vorhanden sind. Der FIFO macht ein Statuskennzeichen bzw. einen Statuszustandsmerker fifo_full 1086 geltend, wenn kein Platz verfügbar ist. Wenn 32-Bit-Eingabedaten gegeben sind, wird das Externes-Format-Signal verwendet, um zu bestimmen, ob die Eingabe in dem Format eines gepackten Stroms (wenn E = 1) vorliegt oder aus angepackten Bytes (wenn E = 0) besteht. Für den Fall, in dem E = 1, codiert der Normalisierungsfaktor die Größe jeder Komponente eines gepackten Stroms, das heißt: n = 0 bezeichnet 1 Bit breite Komponenten, n = 1 bezeichnet 2 Bits pro Komponente, n = 2 bezeichnet 4 Bits pro Komponente, n = 3 bezeichnet 8 Bits breite Komponenten, und n > 3 bezeichnet 16 Bits breite Komponenten. Der Kanalzählwert codiert die maximale Anzahl von pro Taktzyklus zu formatierenden aufeinanderfolgenden Eingabeobjekten, um Bildelemente mit der gewünschten Anzahl von gültigen Bytes zu erzeugen. Insbesondere ergibt c = 1 Bildelemente, bei denen nur das niedrigstwertige Byte gültig ist, c = 2 bezeichnet, dass die niedrigstwertigen 2 Bytes gültig sind, c = 3 bezeichnet, dass die niedrigstwertigen 3 Bytes gültig sind, und c = 0 bezeichnet, dass alle 4 Bytes gültig sind.
  • Wenn ein gepackter Strom aus Komponenten besteht, die weniger als 8 Bits breit sind, bestimmt der Bitoffset die Position in x[31..0], dem in REG1 gespeicherten Wert, von der aus eine Verarbeitung von Daten zu beginnen ist. Unter der Annahme eines Bitoffsets relativ zu dem höchstwertigen Bit des ersten Eingabebytes wird das Verfahren zum Erzeugen eines Ausgabedatenbytes y[7..0] durch den folgenden Satz von Gleichungen beschrieben:
    wenn n = 0:
    y[i] = x[7 – b], wenn 0 <= i <= 7
    wenn n = 1:
    y[i] = x[7 – b], wenn i = 1, 3, 5, 7
    y[i] = x[6 – b], wenn i = 0, 2, 4, 6
    wenn n = 2:
    y[3] = x[7 – b]
    y[2] = x[6 – b]
    y[1] = x[5 – b]
    y[0] = x[4 – b]
    y[7] = y[3]
    y[6] = y[2]
    y[5] = y[1]
    y[4] = y[0]
    wenn n = 3:
    y[i] = x[i], wenn 0 <= i <= 7
    wenn n > 3
    y[7..0] = x[15..8]
  • Entsprechende Gleichungen können zum Erzeugen von Ausgabedatenbytes y[15..8], y[23..16] und y[31..24] verwendet werden.
  • Das vorstehende Verfahren kann verallgemeinert werden, um eine ausgegebene regelmäßige Anordnung einer beliebigen Länge zu erzeugen, indem jede Komponente des Eingabestroms genommen wird und sie so oft wie nötig repliziert wird, um Ausgabeobjekte einer Standardbreite zu erzeugen. Darüber hinaus kann die Ordnung der Verarbeitung jeder Eingabekomponente als Little-Endian oder Big-Endian definiert werden. Das vorstehende Beispiel befasst sich mit der Bit-Endian-Komponentenordnung, da die Verarbeitung immer von dem höchstwertigen Bit eines Eingabebytes aus beginnt. Die Little-Endian-Ordnung erfordert eine Neudefinition des Bitoffsets derart, dass er relativ zu dem niedrigstwertigen Bit eines Eingabebytes ist. In Situationen, in denen die Eingabekomponentenbreite die Standardausgabebreite überschreitet, werden Ausgabekomponenten durch ein Beschneiden jeder Eingabekomponente erzeugt, typischerweise durch ein Entfernen einer geeigneten Anzahl der niedrigstwertigen Bits. Bei dem vorstehenden Satz von Gleichungen wird die Beschneidung von 16-Bit-Eingabekomponenten zum Ausbilden einer 8 Bits breiten Standardausgabe durch ein Auswählen des höchstwertigen Bytes jedes 16-Bit-Datenobjekts durchgeführt.
  • Die Steuerungseinheit gemäß 50 führt die Decodierung von n[2..0] und c[1..0] durch und verwendet das Ergebnis zusammen mit b[2..0] und E zum Bereitstellen der Auswahlsignale für die Normalisierungsmultiplexer und der Freigabesignale für REG1 und REG2. Da der FIFO während des Verlaufs einer Anweisung leer werden kann, enthält die Steuerungseinheit auch Zähler, die die derzeitige Bitposition, in_bit[4..0], in REG1, von der Eingabedaten auszuwählen sind, und das derzeitige Byte, out_byte[1..0], in REG2 zum Beginnen eines Schreibens von Ausgabedaten aufzeichnen. Die Steuerungseinheit erkennt es, wenn sie das Verarbeiten jedes Eingabeworts abgeschlossen hat, indem sie den Wert von in_bit[4..0] mit der Position des letzten Objekts in REG1 vergleicht, und leitet eine FIFO-Leseoperation ein, indem sie das Signal FIFO_RD für einen Taktzyklus geltend macht, wenn der FIFO nicht leer ist. Die Signale fifo_empty und fifo_full bezeichnen die FIFO-Statuszustandsmerker derart, dass fifo_empty = 1, wenn der FIFO keine gültigen Daten enthält, und fifo_full = 1, wenn der FIFO voll ist. In dem gleichen Taktzyklus, in dem FIFO_RD geltend gemacht wird, wird REG1_EN geltend gemacht, so dass neue Daten in REG1 erfasst werden. Es sind 4 Freigabesignale für REG2 vorhanden, eins für jedes Byte in dem Ausgaberegister. Die Steuerungseinheit berechnet REG2_EN[3..0], indem sie das Minimum der folgenden 3 Werte nimmt: der decodierten Version von c[1..0], der Anzahl von zum Verarbeiten in REG1 verbleibenden gültigen Komponenten und der Anzahl von nicht verwendeten Kanälen in REG2. Wenn E = 0, dann ist nur eine gültige Komponente in REG1 vorhanden. Ein vollständiges Ausgabewort ist verfügbar, wenn die Anzahl von Kanälen, die in REG2 gefüllt worden sind, gleich der decodierten Version von c[1..0] ist.
  • Bei einem besonders bevorzugten Ausführungsbeispiel der Erfindung kann der durch das Gerät in 50 belegte Schaltungsbereich wesentlich verringert werden, indem eine Beschneidungsfunktion auf den Bitoffsetparameter derart angewendet wird, dass nur ein beschränkter Satz von Offsets durch die Steuerungseinheit und die Normalisierungsmultiplexer verwendet wird. Die Offsetbeschneidung hängt von dem Normalisierungsfaktor ab und arbeitet gemäß der folgenden Gleichung:
    b_trunc[2..0] = 0, wenn n >= 3
    = b[2..0], wenn n = 0
    = b[2..1] & "0", wenn n = 1
    = b[2] & "00", wenn n = 2
  • (Es ist zu beachten, dass "&" eine bitweise Verkettung bezeichnet).
  • Das vorstehende Verfahren erlaubt es, jeden der in 50 durch MUX0, MUX1 ... MUX31 bezeichneten Normalisierungsmultiplexer von einer Größe von 32-zu-1, wenn keine Beschneidung angewendet wird, derart zu verringern, dass er eine maximale Größe von 20-zu-1 mit Bitoffsetbeschneidung aufweist. Die Größenverringerung führt dann wieder zu einer Verbesserung der Schaltungsgeschwindigkeit.
  • Es ist aus dem Vorhergehenden ersichtlich, dass das bevorzugte Ausführungsbeispiel eine effiziente Schaltung für die Transformation von Daten in eine von ein paar normalisierten Formen bereitstellt.
  • 3.16 Module der Beschleunigerkarte
  • Wieder 2 zugewendet wird nachstehend eine weitere getrennte Beschreibung der verschiedenen Module bereitgestellt.
  • 3.16.1 Bildelementorganisationseinrichtung
  • Die Bildelementorganisationseinrichtung 246 adressiert und puffert Datenströme von dem Eingabeschnittstellenschalter 252. Die Eingabedaten werden in dem internen Speicher der Bildelementorganisationseinrichtung gespeichert oder in dem MUV-Puffer 250 gepuffert. Eine notwendige Datenmanipulation wird bei dem Eingabestrom durchgeführt, bevor er nach Bedarf dem Hauptdatenweg 242 oder dem JPEG-Codierer 241 zugeführt wird. Die Betriebsarten der Bildelementorganisationseinrichtung sind durch die übliche CBus-Schnittstelle konfigurierbar. Die Bildelementorganisationseinrichtung 246 arbeitet in einer von fünf Betriebsarten wie durch ein Steuerungsregister PO_CFG bestimmt. Diese Module schließen ein:
    • (a) Leerlaufbetriebsart – wenn die Bildelementorganisationseinrichtung 246 keine Operationen durchführt
    • (b) Sequentielle Betriebsart – wenn Eingabedaten in einem internen FIFO gespeichert werden und die Bildelementorganisationseinrichtung 246 Datenanforderungen zu dem Eingabeschnittstellenschalter 252 aussendet, wobei 32-Bit-Adressen für diese Daten erzeugt werden.
    • (c) Farbraumwandlungsbetriebsart – wenn die Bildelementorganisationseinrichtung Bildelemente zur Farbraumwandlung puffert. Darüber hinaus werden Anforderungen von in dem MUV-Puffer 250 gespeicherten Intervall- und Bruchwerten (fractional values) ausgeführt.
    • (d) JPEG-Komprimierungsbetriebsart – wenn die Bildelementorganisationseinrichtung 246 den MUV-Puffer zum Puffern von Bilddaten in der Form von MCUs nutzt.
    • (e) Faltungs- und Bildtransformationsbetriebsart – wenn die Bildelementorganisationseinrichtung 246 Matrixkoeffizienten in dem MUV-Puffer 250 speichert und sie gegebenenfalls zu dem Hauptdatenweg 242 leitet.
  • Der MUV-Puffer 250 wird daher durch die Bildelementorganisationseinrichtung 246 für sowohl Operationen des Hauptdatenwegs 242 als auch Operationen des JPEG-Codierers 241 genutzt. Während einer Farbraumwandlung speichert das MUV-RAM 250 die Intervall- und Bruchtabellen, und es wird als 36 Bits von Daten (vier Farbkanäle) × (4-Bit-Intervallwerte und 8-Bit-Bruchwerte) auf sie zugegriffen. Für eine Bildtransformation und Faltung speichert das MUV-RAM 250 Matrixkoeffizienten und zugehörige Konfigurationsdaten. Die Koeffizientenmatrix ist auf 16 Zeilen × 16 Spalten begrenzt, wobei jeder Koeffizient maximal 20 Bits breit ist. Nur ein Koeffizient pro Taktzyklus wird von dem MUV-RAM 250 angefordert. Zusätzlich zu Koeffizientendaten müssen Steuerungsinformationen wie beispielsweise Binärpunkt, Quellstartkoordinaten und Unterabtastdeltas zu dem Hauptdatenweg 242 geleitet werden. Diese Steuerungsinformationen werden durch die Bildelementorganisationseinrichtung 246 abgerufen, bevor einer der Matrixkoeffizienten abgerufen wird.
  • Während einer JPEG-Komprimierung wird der MUV-Puffer 250 durch die Bildelementorganisationseinrichtung 246 zum doppelten Puffern von MCUs genutzt. Vorzugsweise wird die Technik der doppelten Pufferung zum Erhöhen der Leistung der JPEG-Komprimierung angewendet. Eine Hälfte des MUV-RAM 250 wird mit Verwendungsdaten von dem Eingabeschnittstellenschalter 252 beschrieben, während die andere Hälfte durch die Bildelementorganisationseinrichtung gelesen wird, um zu dem JPEG-Codierer 241 zu sendende Daten zu erhalten. Die Bildelementorganisationseinrichtung 246 ist auch für ein Durchführen einer horizontalen Unterabtastung von Farbkomponenten, wenn dies erforderlich ist, und für ein Auffüllen (pad) von MCUs, wenn ein Eingabebild keine einer genauen ganzen Zahl von MCUs gleiche Größe aufweist, verantwortlich.
  • Die Bildelementorganisationseinrichtung 246 ist auch für ein Formatieren von Eingabedaten einschließlich Operationen des Bytespurwechsels (byte lane swapping), der Normalisierung, der Byteersetzung, des Bytepackens und -entpackens und der Replikation verantwortlich. Die Operationen werden nach Bedarf ausgeführt, indem die Bildelementorganisationseinrichtungsregister eingestellt werden.
  • Nachstehend 108 zugewendet ist dort die Bildelementorganisationseinrichtung 246 ausführlicher gezeigt. Die Bildelementorganisationseinrichtung 246 arbeitet unter der Steuerung ihres eigenen Satzes von Registern, der in einer CBus-Schnittstelle-Steuerungseinrichtung 801 enthalten ist, die über den globalen CBus mit der Anweisungssteuerungseinrichtung 235 verbunden ist. Die Bildelementorganisationseinrichtung 246 weist eine Operandenabrufeinheit 802 auf, die für ein Erzeugen von Anforderungen von dem Eingabeschnittstellenschalter 252 hinsichtlich durch die Bildelementorganisationseinrichtung 246 benötigten Operandendaten verantwortlich ist. Die Startadresse für Operandendaten ist durch das Register PO_SAID gegeben, das unmittelbar vor der Ausführung eingestellt werden muss. Das Register PO_SAID kann wie durch das L-Bit in dem Register PO_DMR bestimmt auch unmittelbare Daten halten. Der derzeitige Adresszeiger ist in dem Register PO_CDP gespeichert und wird um die Burst-Länge einer Eingabeschnittstellenschalteranforderung erhöht. Wenn Daten in das MUV-RAM 250 abgerufen werden, wird der derzeitige Offset für Daten mit einer Basisadresse für das MUV-RAM 250 verkettet, wie sie durch das Register PL_MUV gegeben ist.
  • Ein FIFO 803 wird zum Puffern von durch die Operandenabrufeinheit 802 abgerufenen sequentiellen Eingabedaten genutzt. Die Datenmanipulationseinheit 804 ist für ein Realisieren von verschiedenen Manipulationen der Eingabedaten verantwortlich. Die Ausgabe der Datenmanipulationseinheit wird zu der MUV-Adresserzeugungseinrichtung 805 geleitet, die für ein Leiten von Daten zu dem MUV-RAM 250, dem Hauptdatenweg 242 oder dem JPEG-Codierer 241 gemäß Konfigurationsregistern verantwortlich ist. Eine Bildelementorganisationseinrichtungssteuerungseinheit 806 ist eine Zustandsmaschine, die die erforderlichen Steuerungssignale für alle die Untermodule in der Bildelementorganisationseinrichtung 246 erzeugt. In diesen Signalen sind die für ein Steuern einer Kommunikation auf den verschiedenen Busschnittstellen eingeschlossen. Die Bildelementorganisationseinrichtungssteuerungseinheit gibt nach Bedarf Diagnoseinformationen zu dem Sonstiges-Modul 239 gemäß seinen Statusregistereinstellungen aus.
  • Nachstehend 109 zugewendet ist dort die Operandenabrufeinheit 802 gemäß 108 ausführlicher veranschaulicht. Die Operandenabrufeinheit 802 weist eine Anweisungsbusadresserzeugungseinrichtung (IAG) 810 auf, die eine Zustandsmaschine zum Erzeugen von Anforderungen zum Abrufen von Operandendaten enthält. Diese Anforderungen werden zu einer Anforderungsarbitrierungseinrichtung 811 gesendet, die zwischen Anforderungen von der Adresserzeugungseinrichtung 810 und denen von der MUV-Adresserzeugungseinrichtung 805 (108) arbitriert und die siegreichen Anforderungen zu dem Eingabeschnittstellenschalter 252 (MAG) sendet. Die Anforderungsarbitrierungseinrichtung 811 enthält eine Zustandsmaschine zum Handhaben von Anforderungen. Sie überwacht den Zustand des FIFO über eine FIFO-Zähleinheit 814, um zu entscheiden, wann sie die nächste Anforderung abfertigen sollte. Eine Bytefreigabeerzeugungseinrichtung 812 nimmt Informationen bei der IAG 810 an und erzeugt Bytefreigabemuster 816, die die gültigen Bytes in jedem durch den Eingabeschnittstellenschalter 252 zurückgegebenen Operandendatenwort bestimmen. Das Bytefreigabemuster wird zusammen mit den zugeordneten Operandendaten in dem FIFO gespeichert. Die Anforderungsarbitrierungseinrichtung 811 handhabt MAG-Anforderungen vor IAG-Anforderungen, wenn beide Anforderungen zu der gleichen Zeit ankommen.
  • Zu 108 zurückkehrend arbeitet die MUV-Adresserzeugungseinrichtung 805 in einer Anzahl von verschiedenen Betriebsarten. Eine erste dieser Betriebsarten ist die JPEG-Betriebsart (JPEG-Komprimierungsbetriebsart). In dieser Betriebsart werden Eingabedaten für die JPEG-Komprimierung durch die Datenmanipulationseinheiten 804 zugeführt, wobei der MUV-Puffer 250 als ein Doppelpuffer genutzt wird. Die Adresserzeugungseinrichtung 805 des MUV-RAM 250 ist für ein Erzeugen der richtigen Adressen für den MUV-Puffer zum Speichern von durch die Datenmanipulationseinheit 804 verarbeiteten eingehenden Daten verantwortlich. Die MAG 805 ist auch für ein Erzeugen von Leseadressen zum Wiedergewinnen von Farbkomponentendaten aus den gespeicherten Bildelementen zum Ausbilden von 8 × 8-Blöcken zur JPEG-Komprimierung verantwortlich. Die MAG 805 ist ebenfalls für ein Befassen mit der Situation, wenn eine MCU teilweise auf dem Bild liegt, verantwortlich. In 110 ist ein Beispiel für eine durch die MAG 805 ausgeführte Auffülloperation veranschaulicht.
  • Für normale Bildelementdaten speichert die MAG 805 die vier Farbkomponenten an der gleichen Adresse in dem MUV-RAM 250 in vier 8-Bit-Schreib-Lese-Speichern mit wahlfreiem Zugriff. Zum Erleichtern einer gleichzeitigen Wiedergewinnung von Daten aus dem gleichen Farbkanal werden die MCU-Daten nach links balkenverschoben (barrel shifted), bevor sie in dem MUV-RAM 250 gespeichert werden. Die Anzahl von Bytes, um die die Daten nach links verschoben werden, wird durch die niedrigsten zwei Bits der Schreibadresse bestimmt. In 111 ist zum Beispiel die Datenorganisation in dem MUV-RAM 250 für 32-Bit-Bildelementdaten, wenn keine Unterabtastung benötigt wird, veranschaulicht. Eine Unterabtastung von Eingabedaten kann für eine verschachtelte JPEG-Betriebsart mit drei oder vier Kanälen ausgewählt werden. In einer Mehrkanal-JPEG-Komprimierungsbetriebsart mit arbeitender Unterabtastung führt die MAG 805 (108) die Unterabtastung für eine optimale JPEG-Codierer-Leistung durch, bevor die 32-Bit-Daten in den MUV-RAM 250 gespeichert werden. Für die ersten vier eingehenden Bildelemente enthalten nur der in dem MUV-RAM 250 gespeicherte erste und vierte Kanal verwendbare Daten. Die Daten in dem zweiten und dritten Kanal werden unterabgetastet und in einem Register innerhalb der Bildelementorganisationseinrichtung 246 gespeichert. Für die nächsten vier eingehenden Bildelemente werden der zweite und dritte Kanal mit unterabgetasteten Daten gefüllt. In 112 ist ein Beispiel für eine MCU-Datenorganisation für eine Mehrkanalunterabtastungsbetriebsart veranschaulicht. Die MAG behandelt alle ungepackten Einkanaldaten genau gleich wie Mehrkanalbildelementdaten. Ein Beispiel für gepackte Einkanaldaten wie aus dem MUV-RAM gelesen ist in 113 veranschaulicht.
  • Während der Schreibprozess eine eingehende MCU in dem MUV-RAM speichert, liest der Leseprozess 8 × 8-Blöcke aus dem MUV-RAM. Im Allgemeinen werden die Blöcke durch die MAG 805 erzeugt, indem die Daten für jeden Kanal sequentiell gelesen werden, jeweils vier Koeffizienten. Für Bildelementdaten und ungepackte Eingabedaten werden die gespeicherten Daten organisiert wie in 111 veranschaulicht. Daher liest der Leseprozess zum Zusammensetzen eines 8 × 8-Blocks von nicht abgetasteten Bildelementdaten Daten diagonal aus dem MUV-RAM. Ein Beispiel für diesen Prozess ist in 114 veranschaulicht, die die Lesesequenz für Vier-Kanal-Daten zeigt, wobei die Form der Speicherung in dem MUV-RAM 250 bei einem gleichzeitigen Lesen von mehreren Werten für den gleichen Kanal hilft.
  • Wenn in einer Farbwandlungsbetriebsart gearbeitet wird, wird das MUV-RAM 250 als ein Cache zum Halten der Intervall- und Bruchwerte verwendet, und die MAG 805 arbeitet als eine Cache-Steuerungseinrichtung. Das MUV-RAM 250 speichert Werte für drei Farbkanäle im Cache, wobei jeder Farbkanal 256 Paare von Vier-Bit-Intervall- und Bruchwerten enthält. Für jede Bildelementausgabe über die DMU wird die MAG 805 zum Bekommen der Werte aus dem MUV-RAM 250 genutzt. Wenn der Wert nicht verfügbar ist, erzeugt die MAG 805 eine Speicherleseanforderung zum Abrufen der fehlenden Intervall- und Bruchwerte. Statt bei jeder Anforderung einen Eintrag abzurufen, werden zur besseren Nutzung der Bandbreite mehrere Einträge gleichzeitig abgerufen.
  • Für eine Bildtransformation und Faltung speichert das MUV-RAM 250 die Matrixkoeffizienten für den MDP. Die MAG durchläuft alle die in dem MUV-RAM 250 gespeicherten Matrixkoeffizienten. Bei dem Start einer Bildtransformations- und Faltungsanweisung erzeugt die MAG 805 eine Anforderung an die Operandenabrufeinheit zum Abrufen des Kernbeschreibungs-"Kopfteils" (kernal description "header") und des ersten Matrixkoeffizienten in einer Burst-Anforderung.
  • Nachstehend 115 zugewendet ist dort die MUV-Adresserzeugungseinrichtung (MAG) 805 gemäß 108 ausführlicher veranschaulicht. Die MAG 805 weist ein IBus-Anforderungsmodul 820 auf, das durch eine Bildtransformationssteuerungseinrichtung (ITX) 821 und eine Farbraumwandlungssteuerungseinrichtung (CSC) 822 erzeugte IBus-Anforderungen multiplext. Die Anforderungen werden zu der Operandenabrufeinheit gesendet, die die Anforderung abarbeitet. Die Bildelementorganisationseinrichtung 246 wird nur entweder in einer Bildtransformationsbetriebsart oder einer Farbraumwandlungsbetriebsart betrieben. Folglich ist keine Arbitrierung zwischen den zwei Steuerungseinrichtungen 821, 822 erforderlich. Das IBus-Anforderungsmodul 820 leitet die Informationen zum Erzeugen einer Anforderung an die Operandenabrufeinheit einschließlich der Burst-Adresse und der Burst-Länge aus den relevanten Bildelementorganisationseinrichtungsregistern ab.
  • Eine JPEG-Steuerungseinrichtung 824 wird genutzt, wenn in einer JPEG-Betriebsart gearbeitet wird, und umfasst zwei Zustandsmaschinen, bei denen es sich um eine JPEG-Schreibsteuerungseinrichtung und eine JPEG-Lesesteuerungseinrichtung handelt. Die zwei Steuerungseinrichtungen arbeiten durch die Verwendung von internen Registern gleichzeitig und synchronisieren sich miteinander.
  • Bei einer JPEG-Komprimierungsoperation gibt die DMU die MCU-Daten aus, die in dem MUV-RAM gespeichert sind. Die JPEG-Schreibsteuerungseinrichtung ist für ein horizontales Auffüllen und eine Steuerung der Bildelementunterabtastung verantwortlich, während die JPEG-Lesesteuerungseinrichtung für ein vertikales Auffüllen verantwortlich ist. Das horizontale Auffüllen wird erreicht, indem die DMU-Ausgabe zum Stillstand gebracht wird (stalling), und das vertikale Auffüllen wird erreicht, indem die vorher gelesene 8 × 8-Block-Zeile gelesen wird.
  • Die JPEG-Schreibsteuerungseinrichtung verfolgt die Position des derzeitigen MCU- und DMU-Ausgabebildelements auf dem Quellbild und verwendet diese Informationen zum Entscheiden, wann die DMU für ein horizontales Auffüllen zum Stillstand zu bringen ist. Wenn eine MCU in das MUV-RAM 250 geschrieben worden ist, stellt die JPEG-Schreibsteuerungseinrichtung einen Satz von internen Registern ein/setzt ihn zurück, was angibt, dass die MCU sich an der rechten Kante des Bilds befindet oder sich an der unteren Kante des Bilds befindet. Die JPEG-Lesesteuerungseinrichtung verwendet daraufhin den Inhalt dieser Register zum Entscheiden, ob es erforderlich ist, ein vertikales Auffüllen durchzuführen, und ob sie die letzte MCU auf dem Bild gelesen hat.
  • Die JPEG-Schreibsteuerungseinrichtung verfolgt DMU-Ausgabedaten und speichert die DMU-Ausgabedaten in dem MUV-RAM 250.
  • Die Steuerungseinrichtung verwendet einen Satz von Registern zum Aufzeichnen der derzeitigen Position des Eingabebildelements. Diese Informationen werden zum Durchführen eines horizontalen Auffüllens, indem die DMU-Ausgabe zum Stillstand gebracht wird, verwendet.
  • Wenn eine vollständige MCU in das MUV-RAM 250 geschrieben worden ist, schreibt die Steuerungseinrichtung MCU-Informationen in Register JPEG-RW-IPC, die später durch die JPEG-Lesesteuerungseinrichtung verwendet werden.
  • Die Steuerungseinrichtung tritt in den Zustand SCHLAFEN ein, nachdem die letzte MCU in das MUV-RAM 250 geschrieben worden ist. Die Steuerungseinrichtung bleibt in diesem Zustand, bis die derzeitige Anweisung abgeschlossen wird.
  • Die JPEG-Lesesteuerungseinrichtung liest die 8 × 8-Blöcke aus den in dem MUV-RAM 250 gespeicherten MCUs. Für Mehrkanalbildelemente liest die Steuerungseinrichtung die MCU mehrere Male, wobei jedes Mal ein anderes Byte aus jedem in dem MUV-RAM gespeicherten Bildelement extrahiert wird.
  • Die Steuerungseinrichtung erkennt unter Verwendung der durch das JPEG-RW-IPC bereitgestellten Informationen, ob sie ein vertikales Auffüllen durchführen muss. Das vertikale Auffüllen wird durch ein erneutes Lesen der letzten aus dem MUV-RAM 250 gelesenen 8 Bytes erreicht.
  • Die Bildtransformationssteuerungseinrichtung 821 ist für ein Lesen des Kerndeskriptors aus dem IBus verantwortlich und leitet den Kernkopfteil zu dem MDP 242 und durchläuft die Matrixkoeffizienten so oft, wie es in dem Register po.len bestimmt ist. Alle durch die PO 246 bei einer Bildtransformations- und Faltungsanweisung ausgegebenen Daten werden direkt aus dem IBus abgerufen und nicht durch die DMU geleitet.
  • Die obersten acht Bits des unmittelbar nach dem Kernkopfteil abgerufenen ersten Matrixkoeffizienten enthalten die Anzahl von verbleibenden abzurufenden Matrixkoeffizienten.
  • Der Kernkopfteil wird ohne Modifikationen direkt zu dem MDP geleitet, während die Matrixkoeffizienten um ein Vorzeichen erweitert werden, bevor sie zu dem MDP geleitet werden.
  • Die Bildelementunterabtasteinrichtung 825 umfasst zwei identische Kanalunterabtasteinrichtungen; jede arbeitet auf einem Byte aus dem Eingabewort. Wenn das relevante Konfigurationsregister nicht geltend gemacht wird, kopiert die Bildelementunterabtasteinrichtung ihre Eingabe in ihre Ausgabe. Wenn das Konfigurationsregister geltend gemacht wird, führt die Unterabtasteinrichtung entweder durch ein Nehmen des Durchschnitts oder durch eine Dezimierung eine Unterabtastung der Eingabedaten aus.
  • Ein MUV-Multiplexermodul 826 wählt die MUV-Lese- und Schreibsignale von der derzeit aktiven Steuerungseinrichtung aus. Interne Multiplexer werden zum Auswählen der über die verschiedenen Steuerungseinrichtungen, die das MUV-RAM 250 nutzen, ausgegebenen Leseadressen verwendet. Eine MUV-RAM-Schreibadresse wird in einem 8-Bit-Register in einem MUV-Multiplexermodul gehalten. Die Steuerungseinrichtungen nutzen das MUV-RAM 250, laden das Schreibadressregister und stellen darüber hinaus eine Steuerung zum Bestimmen einer nächsten MUV-RAM-Adresse bereit.
  • Ein Gültiger-MUV-Zugriff-Modul (MUV valid access module) 827 wird durch die Farbraumwandlungssteuerungseinrichtung zum Bestimmen, ob die Intervall- und Bruchwerte für ein durch die Datenmanipulationseinheit ausgegebenes derzeitiges Bildelement in dem MUV-RAM 250 verfügbar sind, genutzt. Wenn ein Farbkanal oder mehrere Farbkanäle fehlen, leitet das Gültiger-MUV-Zugriff-Modul 827 die relevante Adresse zu dem IBus-Anforderungsmodul 820, um Intervall- und Bruchwerte in einer Burst-Betriebsart zu laden. Bei einem Abfertigen eines Cache-Fehlschlags stellt das Gültiger-MUV-Zugriff-Modul 827 interne Gültigkeitsbits ein, die den Satz von bislang abgerufenen Intervall- und Bruchwerten abbilden.
  • Ein Replikationsmodul 829 repliziert die eingehenden Daten die Anzahl von Malen, wie sie durch ein internes Bildelementregister bestimmt wird. Der Eingabestrom wird zum Stillstand gebracht, während das Replikationsmodul das derzeitige Eingabewort repliziert. Ein PBus-Schnittstellenmodul 630 wird zum neuen Terminieren der Ausgabesignale der Bildelementorganisationseinrichtung 246 zu dem Hauptdatenweg 242 und dem JPEG-Codierer 241 und umgekehrt genutzt. Schließlich erzeugt eine MAG-Steuerungseinrichtung 831 Signale zum Anstoßen und Abschalten der verschiedenen Untermodule. Sie führt auch ein Multiplexen von eingehenden PBus-Signalen von dem Hauptdatenweg 242 und dem JPEG-Codierer 241 durch.
  • 3.16.2 MUV-Puffer
  • Zu 2 zurückkehrend wird es aus der vorangehenden Erörterung ersichtlich, dass die Bildelementorganisationseinrichtung 246 mit dem MUV-Puffer 250 interagiert.
  • Der neu konfigurierbare MUV-Puffer 250 kann eine Anzahl von Betriebsarten einschließlich der Einzelnachschlagetabellenbetriebsart (Betriebsart 0), der Mehrnachschlagetabellenbetriebsart (Betriebsart 1) und der JPEG-Betriebsart (Betriebsart 2) unterstützen. In jeder Betriebsart wird ein anderer Typ von Datenobjekt in dem Puffer gespeichert. Die Datenobjekte, die in dem Puffer gespeichert werden, können zum Beispiel Datenwörter, Werte einer Vielzahl von Nachschlagetabellen, Einkanaldaten und Mehrkanalbildelementdaten sein. Im Allgemeinen können die Datenobjekte verschiedene Größen aufweisen. Überdies kann auf die in dem neu konfigurierbaren MUV-Puffer 250 gespeicherten Datenobjekte auf wesentlich verschiedenen Wegen zugegriffen werden, was von der Betriebsart des Puffers abhängt.
  • Zum Erleichtern der verschiedenen Verfahren, die zum Speichern und Wiedergewinnen von verschiedenen Typen von Datenobjekten benötigt werden, werden die Datenobjekte häufig codiert, bevor sie gespeichert werden. Das auf ein Datenobjekt angewendete Codierungsschema wird durch die Größe des Datenobjekts, durch das Format, in dem die Datenobjekte zu präsentieren sind, dadurch, wie die Datenobjekte aus dem Puffer wiedergewonnen werden, und auch durch die Organisation der Speichermodule, aus denen der Puffer besteht, bestimmt.
  • 116 zeigt ein Blockschaltbild der zum Realisieren des neu konfigurierbaren MUV-Puffers 250 verwendeten Komponenten. Der neu konfigurierbare MUV-Puffer 250 umfasst einen Codierer 1290, eine Speichervorrichtung 1293, einen Decodierer 1291 und eine Leseadressen- und Rotationssignalerzeugungseinrichtung 1292. Wenn ein Datenobjekt aus einem Eingabedatenstrom 1295 ankommt, kann das Datenobjekt durch den Codierer 1290 in ein internes Datenformat codiert und in dem codierten Eingabedatenstrom 1296 platziert werden. Das codierte Datenobjekt wird in der Speichervorrichtung 1293 gespeichert.
  • Wenn vorher gespeicherte Datenobjekte decodiert werden, wird ein codiertes Datenobjekt über einen codierten Ausgabedatenstrom 1297 aus der Speichervorrichtung gelesen. Das codierte Datenobjekt in dem codierten Ausgabedatenstrom 1297 wird durch einen Decodierer 1291 decodiert. Das decodierte Datenobjekt wird daraufhin bei dem Ausgabedatenstrom 1298 präsentiert.
  • Die Schreibadressen 1305 für die Speichervorrichtung 1293 werden durch die MAG 805 (108) bereitgestellt. Die Leseadressen 1299, 1300 und 1301 werden ebenfalls durch die MAG 805 (108) bereitgestellt und durch die Leseadressen- und Rotationssignalerzeugungseinrichtung 1292, die auch Eingabe- und Ausgaberotationssteuerungssignale 1303 und 1304 für den Codierer bzw. Decodierer erzeugt, für die Speichervorrichtung 1293 übersetzt und gemultiplext. Die Schreibfreigabesignale 1306 und 1307 werden durch eine externe Quelle bereitgestellt. Ein Betriebsartsignal 1302, das mittels der Steuerungseinrichtung 801 (108) bereitgestellt wird, ist mit dem Codierer 1290, dem Decodierer 1291, der Leseadressen- und Rotationssignalerzeugungseinrichtung 1292 und der Speichervorrichtung 1293 verbunden. Ein Erhöhungssignal 1308 erhöht einen internen Zähler (interne Zähler) in der Leseadressen- und Rotationssignalerzeugungseinrichtung und kann in der JPEG-Betriebsart (Betriebsart 2) genutzt werden.
  • Vorzugsweise dann, wenn der neu konfigurierbare MUV-Puffer 250 in der Einzelnachschlagetabellenbetriebsart (Betriebsart 0) arbeitet, verhält sich der Puffer im Wesentlichen wie ein einzelnes Speichermodul. Datenobjekte können in im Wesentlichen der gleichen Weise wie der zum Zugreifen auf Speichermodule verwendeten in dem Puffer gespeichert und aus ihm wiedergewonnen werden.
  • Wenn der neu konfigurierbare MUV-Puffer 250 in der Mehrnachschlagetabellenbetriebsart (Betriebsart 1) arbeitet, ist der Puffer 250 in eine Vielzahl von Tabellen aufgeteilt, wobei bis zu drei Nachschlagetabellen in der Speichervorrichtung 1293 gespeichert werden können. Auf die Nachschlagetabellen kann getrennt und gleichzeitig zugegriffen werden. Bei einem Beispiel werden zum Beispiel Intervall- und Bruchwerte in der Mehrnachschlagetabellenbetriebsart in der Speichervorrichtung 1293 gespeichert, und die Tabellen werden unter Nutzung der unteren drei Bytes des Eingabedatenstroms 1295 indiziert. Jedes der drei Bytes wird zum Zugreifen auf eine in der Speichervorrichtung 1293 gespeicherte getrennte Nachschlagetabelle ausgegeben.
  • Wenn ein Bild einer JPEG-Komprimierung ausgesetzt ist, wird das Bild in einen codierten Datenstrom gewandelt. Die Bildelemente werden in der Form von MCUs aus dem ursprünglichen Bild wiedergewonnen. Die MCUs werden von links nach rechts und von oben nach unten aus dem Bild gelesen. Jede MCU wird in eine Anzahl von Einzelkomponenten-8 × 8-Blöcken zerlegt. Die Anzahl von 8 × 8-Blöcken, die aus einer MCU extrahiert werden können, hängt von mehreren Faktoren ab, einschließlich: der Anzahl von Farbkomponenten in den Quellbildelementen, und für eine Mehrkanal-JPEG-Betriebsart, ob eine Unterabtastung benötigt wird. Die 8 × 8-Blöcke werden daraufhin einer Vorwärts-DCT (FDCT), einer Quantisierung und einer Entropiecodierung unterzogen. In dem Fall der JPEG-Dekomprimierung werden die codierten Daten sequentiell aus einem Datenstrom gelesen. Der Datenstrom wird einer Entropiedecodierung, einer Dequantisierung und einer inversen DCT (IDCT) ausgesetzt. Bei der Ausgabe der IDCT-Operation handelt es sich um 8 × 8-Blöcke. Eine Anzahl von Einzelkomponenten-8 × 8-Blöcken wird zum Rekonstruieren einer MCU kombiniert. Wie mit der JPEG-Komprimierung hängt die Anzahl von Einzelkomponenten-8 × 8-Blöcken von den vorstehend angeführten gleichen Faktoren ab. Der neu konfigurierbare MUV-Puffer 250 kann in dem Prozess zum Zerlegen von MCUs in eine Vielzahl von Einzelkomponenten-8 × 8-Blöcken verwendet werden, um MCUs aus einer Vielzahl von Einzelkomponenten-8 × 8-Blöcken zu rekonstruieren.
  • Wenn der neu konfigurierbare MUV-Puffer 250 in der JPEG-Betriebsart (Betriebsart 2) arbeitet, umfasst der Eingabedatenstrom 1295 für den Puffer 250 Bildelemente für eine JPEG-Komprimierungsoperation oder Einzelkomponentendaten bei einer JPEG-Dekomprimierungsoperation. Der Ausgabedatenstrom 1298 des Puffers 250 umfasst Einkanaldatenblöcke für eine JPEG-Komprimierungsoperation oder Bildelementdaten bei einer JPEG-Dekomprimierungsoperation. Bei diesem Beispiel kann ein Eingabebildelement für eine JPEG-Komprimierungsoperation bis zu vier als Y, U, V und O bezeichnete Kanäle umfassen. Wenn die erforderliche Anzahl von Bildelementen zum Ausbilden eines vollständigen Bildelementblocks in dem Puffer angesammelt worden ist, kann die Extraktion von Einzelkomponentendatenblöcken anfangen. Jeder Einzelkomponentendatenblock umfasst Daten aus dem gleichen Kanal jedes in dem Puffer gespeicherten Bildelements. Somit können bei diesem Beispiel bis zu vier Einzelkomponentendatenblöcke aus einem Bildelementdatenblock extrahiert werden. Bei diesem Ausführungsbeispiel kann dann, wenn der neu konfigurierbare MUV-Puffer 250 in der JPEG-Betriebsart (Betriebsart 2) zur JPEG-Komprimierung arbeitet, eine Vielzahl von jeweils 64 Ein- oder 64 Mehrkanalbildelemente enthaltenden minimalcodierten Einheiten (MCUs, Minimum Coded Units) in dem Puffer gespeichert werden, und eine Vielzahl von 64 Bytes langen Einkanalkomponentendatenblöcken wird aus jeder in dem Puffer gespeicherten MCU extrahiert. Bei diesem Ausführungsbeispiel enthält für den in der JPEG-Betriebsart (Betriebsart 2) für eine JPEG-Dekomprimierungsoperation arbeitenden Puffer 1289 der Ausgabedatenstrom Ausgabebildelemente, die bis zu vier Komponenten Y, U, V und O aufweisen. Wenn die erforderliche Anzahl von vollständigen Einzelkomponentendatenblöcken in den Puffer geschrieben worden ist, kann die Extraktion von Bildelementen anfangen. Ein Byte aus bis zu vier Einzelkomponentenblöcken entsprechend verschiedenen Farbkomponenten wird zum Ausbilden eines Ausgabebildelements wiedergewonnen.
  • 117 veranschaulicht den Codierer 1290 gemäß 116 ausführlicher. Nur für die Bildelementblockzerlegungsbetriebsart wird jedes Eingabedatenobjekt unter Verwendung einer bitweisen Rotation codiert, bevor es in der Speichervorrichtung 1293 (129) gespeichert wird. Das Ausmaß der Rotation wird durch das Eingaberotationssteuerungssignal 1303 bestimmt. Da die Bildelementdaten bei diesem Beispiel maximal vier Bytes aufweisen, werden ein 32-Bit-4-zu-1-Multiplexer 1320 und eine Ausgabe 1325 zum Auswählen einer der vier möglichen rotierten Versionen des Eingabebildelements verwendet. Falls zum Beispiel die vier Bytes in einem Bildelement als (3, 2, 1, 0) benannt werden, sind die vier möglichen rotierten Versionen dieses Bildelements (3, 2, 1, 0), (0, 3, 2, 1), (1, 0, 3, 2) und (2, 1, 0, 3). Die vier codierten Bytes werden zur Speicherung in der Speichervorrichtung ausgegeben 1296.
  • Wenn der Puffer in eine andere Betriebsart als die JPEG-Betriebsart (Betriebsart 2) versetzt wird, zum Beispiel in die Einzelnachschlagetabellenbetriebsart (Betriebsart 0) und die Mehrnachschlagetabellenbetriebsart (Betriebsart 1), kann eine bitweise Rotation nicht notwendig sein und kann nicht bei den Eingabedatenobjekten durchgeführt werden. Das Eingabedatenobjekt wird in den letzteren Fällen daran gehindert, rotiert zu werden, indem das Eingaberotationssteuerungssignal mit einem Keine-Operation-Wert aufgehoben wird. Dieser Wert 1323 kann null sein. Ein 2-zu-1-Multiplexer 1321 erzeugt Steuerungssignale 1326, indem er zwischen dem Eingaberotationssteuerungssignal 1303 und dem Keine-Operation-Wert 1323 auswählt. Die derzeitige Betriebsart 1302 wird mit dem der Bildelementblockzerlegungsbetriebsart zugewiesenen Wert verglichen, um das Multiplexerauswahlsignal 1322 zu erzeugen. Der 4-zu-1-Multiplexer 1320, der durch das Signal 1326 gesteuert wird, wählt eine der vier rotierten Versionen des Eingabedatenobjekts in dem Eingabedatenstrom 1325 aus und erzeugt ein codiertes Eingabedatenobjekt in dem codierten Eingabedatenstrom 1326.
  • 118 veranschaulicht eine schematische Darstellung einer kombinatorischen Schaltung, die den Decodierer 1291 für das Decodieren des codierten Ausgabedatenstroms 1297 realisiert. Der Decodierer 1321 arbeitet in einer im Wesentlichen ähnlichen Art und Weise wie der Codierer. Der Decodierer arbeitet nur auf den Daten, wenn der Datenpuffer sich in der JPEG-Betriebsart (Betriebsart 2) befindet. Die unteren 32 Bits eines codierten Ausgabedatenobjekts in dem codierten Ausgabedatenstrom 1297 werden zu dem Decodierer geleitet. Die Daten werden unter Verwendung einer bitweisen Rotation mit einem der durch den Codierer 1290 durchgeführten Rotation entgegengesetzten Rotationssinn decodiert. Ein 32-Bit-4-zu-1-Multiplexer 1330 wird zum Auswählen einer der vier möglichen rotierten Versionen der codierten Daten verwendet. Falls zum Beispiel die vier Bytes in einem Eingabebildelement als (3, 2, 1, 0) benannt sind, sind die vier möglichen rotierten Versionen dieses Bildelements (3, 2, 1, 0), (2, 1, 0, 3), (1, 0, 3, 2) und (0, 3, 2, 1). Das Ausgaberotationssteuerungssignal 1304 wird nur dann genutzt, wenn der Puffer sich in einer Bildelementblockzerlegungsbetriebsart befindet und wenn es in anderen Betriebsarten durch einen Keine-Operation-Wert aufgehoben wird. Der genutzte Keine-Operation-Wert 1333 ist null. Ein 2-zu-1-Multiplexer 1331 erzeugt ein Signal 1334, indem er zwischen dem Ausgaberotationssteuerungssignal 1304 und dem Keine-Operation-Wert 1333 auswählt. Die derzeitige Betriebsart 1302 wird mit dem der Bildelementblockzerlegungsbetriebsart zugewiesenen Wert verglichen, um das Multiplexerauswahlsignal 1332 zu erzeugen. Der 4-zu-1-Multiplexer 1330, der durch das Signal 1334 gesteuert wird, wählt eine der vier rotierten Versionen des codierten Ausgabedatenobjekts in dem codierten Ausgabedatenstrom 1297 aus und erzeugt ein Ausgabedatenobjekt in dem Ausgabedatenstrom 1298.
  • Zu 116 zurückkehrend wird das durch die Schaltung verwendete Verfahren zur internen Leseadressenerzeugung durch die Betriebsart 1302 des neu konfigurierbaren MUV-Puffers 250 ausgewählt. Für die Einzelnachschlagetabellenbetriebsart (Betriebsart 0) und die Mehrnachschlagetabellenbetriebsart (Betriebsart 1) werden die Leseadressen durch die MAG 805 (108) in der Form von externen Leseadressen 1299, 1300 und 1301 bereitgestellt. Für die Einzelnachschlagetabellenbetriebsart (Betriebsart 0) arbeiten die Speichermodule 1380, 1381, 1382, 1383, 1384 und 1385 (121) der Speichervorrichtung 1293 zusammen. Die Leseadresse und die Schreibadresse, die den Speichermodulen 1380 bis 1385 (121) zugeführt werden, sind im Wesentlichen die gleichen. Folglich benötigt die Speichervorrichtung 1233 nur, dass die externen Schaltungen eine Leseadresse und eine Schreibadresse zuführen, und verwendet eine interne Logik zum Multiplexen dieser Adressen zu den Speichermodulen 1380 bis 1385 (121). Für die Betriebsart 0 wird die Leseadresse durch die externe Leseadresse 1299 (116) zugeführt und wird ohne wesentliche Änderungen zu der internen Leseadresse 1348 (121) gemultiplext. Die externen Leseadressen 1300 und 1301 (116) und die internen Leseadressen 1349, 1350 und 1351 (121) werden in der Betriebsart 0 nicht verwendet. Die Schreibadresse wird durch die externe Schreibadresse 1305 (116) zugeführt und wird ohne eine wesentliche Modifikation mit der Schreibadresse jedes Speichermoduls 1380 bis 1385 (121) verbunden.
  • Bei diesem Beispiel ist ein Entwurf, der in der Mehrnachschlagetabellenbetriebsart (Betriebsart 1) drei Nachschlagetabellen bereitstellt, dargestellt. Die codierten Eingabedaten werden gleichzeitig in alle Speichermodule 1380 bis 1385 (121) geschrieben, während unabhängig auf die drei Tabellen zugegriffen wird und somit ein Index für jede der drei Tabellen benötigt wird. Drei Indizes, das heißt Leseadressen für die Speichermodule 1380 bis 1385 (121), werden der Speichervorrichtung 1293 zugeführt. Diese Leseadressen werden unter Verwendung einer internen Logik zu den passenden Speichermodulen 1380 bis 1385 gemultiplext. In im Wesentlichen der gleichen Art und Weise wie bei der Einzelnachschlagetabellenbetriebsart wird die extern zugeführte Schreibadresse ohne wesentliche Modifikationen mit der Schreibadresse jedes der Speichermodule 1380 bis 1385 verbunden. Folglich werden für die Mehrnachschlagetabellenbetriebsart (Betriebsart 1) die externen Leseadressen 1299, 1300 und 1311 zu internen Leseadressen 1348, 1349 bzw. 1350 gemultiplext. Die interne Leseadresse 1351 wird in der Betriebsart 1 nicht verwendet. Das Verfahren zum Erzeugen der in der JPEG-Betriebsart (Betriebsart 2) benötigten internen Leseadressen ist von dem vorstehend beschriebenen Verfahren verschieden.
  • 119 veranschaulicht eine schematische Darstellung einer kombinatorischen Schaltung, die die Leseadressen- und Rotationssteuerungssignalerzeugungsschaltung 1292 (116) für den in der JPEG-Betriebsart (Betriebsart 2) zur JPEG-Komprimierung arbeitenden neu konfigurierbaren Datenpuffer realisiert. In der JPEG-Betriebsart (Betriebsart 2) verwendet die Erzeugungseinrichtung 1292 die Ausgabe eines Komponentenblockzählers 1340 und die Ausgabe eines Datenbytezählers 1341 zum Berechnen der internen Leseadressen für die Speichermodule, aus denen die Speichervorrichtung 1293 besteht. Der Komponentenblockzähler 1340 gibt die Anzahl von aus einem Bildelementdatenblock, der in der Speichervorrichtung gespeichert ist, extrahierten Komponentenblöcken an. Die Anzahl von aus dem Bildelementdatenblock extrahierten gleichen Komponenten wird durch ein Multiplizieren der Ausgabe des Datenbytezählers 1341 mit vier angegeben. Bei diesem Ausführungsbeispiel wird eine interne Leseadresse 1348, 1349, 1350 oder 1351 für die Bildelementdatenblockzerlegungsbetriebsart wie folgt berechnet. Die Ausgabe des Komponentenblockzählers wird zum Erzeugen eines Offsetwerts 1343, 1344, 1345, 1346 oder 1347 verwendet, und die Ausgabe des Datenbytezählers 1341 wird zum Erzeugen einer Basisleseadresse 1354 verwendet. Der Offsetwert 1343 wird zu der Basisleseadresse 1354 addiert, 1358, und die Summe ist eine interne Leseadresse 1348 (oder 1349, 1350 oder 1351). Die Offsetwerte für die Speichermodule sind im Allgemeinen für bei mehreren Speichermodulen durchgeführte gleichzeitige Leseoperationen verschieden, aber der Offsetwert für jedes Speichermodul ist allgemein im Wesentlichen während der Extraktion eines Komponentendatenblocks der gleiche. Die zum Berechnen der vier internen Leseadressen in der Bildelementdatenblockzerlegungsbetriebsart verwendeten Basisadressen 1354 sind im Wesentlichen die gleichen. Das Erhöhungssignal 1308 wird als das Komponentenbytezählererhöhungssignal verwendet. Der Zähler wird erhöht, nachdem jede erfolgreiche Leseoperation durchgeführt worden ist. Ein Komponentenblockzählererhöhungssignal 1356 wird zum Erhöhen des Komponentenblockzählers 1340 verwendet, nachdem ein vollständiger einzelner Komponentendatenblock aus dem Puffer wiedergewonnen worden ist.
  • Das Ausgaberotationssteuerungssignal 1304 (116) wird aus der Ausgabe des Komponentenblockzählers und der Ausgabe des Datenbytezählers in einer im Wesentlichen ähnlichen Art und Weise wie bei der Erzeugung einer internen Leseadresse abgeleitet. Die Ausgabe des Komponentenblockzählers wird zum Berechnen eines Rotationsoffsets 1347 verwendet. Das Ausgaberotationssteuerungssignal 1304 ist durch die niedrigsten zwei Bits der Summe der Basisleseadresse 1354 und des Rotationsoffsets 1355 gegeben. Das Eingaberotationssteuerungssignal 1303 ist bei diesem Beispiel für die Adressen- und Rotationssteuerungssignalerzeugungseinrichtung einfach durch die niedrigsten zwei Bytes der externen Schreibadressen 1305 gegeben.
  • 120 zeigt ein weiteres Beispiel für die Adressenerzeugungseinrichtung 1292 zum neuen Zusammensetzen von Mehrkanalbildelementdaten aus in dem neu konfigurierbaren MUV-Puffer 250 gespeicherten Einzelkomponentendaten. In diesem Fall arbeitet der Puffer in dem JPEG (Betriebsart 2) für eine JPEG-Dekomprimierungsoperation. In diesem Fall werden Einzelkomponentendatenblöcke in dem Puffer gespeichert, und Bildelementdatenblöcke werden aus dem Puffer wiedergewonnen. Bei diesem Beispiel werden die Schreibadressen für die Speichermodule ohne wesentliche Änderungen durch die externe Schreibadresse 1305 bereitgestellt. Die Einzelkomponentenblöcke werden in zusammenhängenden Speicherplätzen gespeichert. Das Eingaberotationssteuerungssignal 1303 wird bei diesem Beispiel einfach auf die niedrigsten zwei Bits der Schreibadresse eingestellt. Ein Bildelementzähler 1360 wird zum Verfolgen der Anzahl von aus den in dem Puffer gespeicherten Einzelkomponentenblöcken extrahierten Bildelementen verwendet. Die Ausgabe des Bildelementzählers wird zum Erzeugen der Leseadressen 1348, 1349, 1350 und 1351 und des Ausgaberotationssteuerungssignals 1304 verwendet. Die Leseadressen sind im Allgemeinen für jedes Speichermodul, aus dem die Speichervorrichtung 1293 besteht, verschieden. Bei diesem Beispiel umfasst eine Leseadresse zwei Teile, einen Einzelkomponentenblockindex 1362, 1363, 1364 oder 1365 und einen Byteindex 1361. Ein Offset wird zu Bit 3 und 4 der Ausgabe des Bildelementzählers addiert, um den Einzelkomponentenblockindex für einen speziellen Block zu berechnen. Die Offsets 1366, 1367, 1368 und 1369 sind im Allgemeinen für jede Leseadresse verschieden. Bit 2 bis Bit 0 der Ausgabe des Bildelementzählers werden als der Byteindex 1361 einer Leseadresse verwendet. Eine Leseadresse ist das Ergebnis der Verkettung eines Einzelkomponentenblockindex 1362, 1363, 1364 oder 1365 und eines Byteindex 1361 wie in 120 veranschaulicht. Bei diesem Beispiel wird das Ausgaberotationssteuerungssignal 1304 unter Verwendung von Bit 4 und Bit 3 der Ausgabe des Bildelementzählers ohne eine wesentliche Änderung erzeugt. Das Erhöhungssignal 1308 wird als das Bildelementzählererhöhungssignal zum Erhöhen des Bildelementzählers 1360 verwendet. Der Bildelementzähler 1360 wird erhöht, nachdem ein Bildelement erfolgreich aus dem Puffer wiedergewonnen worden ist.
  • 121 veranschaulicht ein Beispiel für eine Struktur der Speichervorrichtung 1293. Die Speichervorrichtung 1293 kann drei 4 Bits breite Speichermodule 1383, 1384 und 1385 sowie drei 8 Bits breite Speichermodule 1380, 1381 und 1382 umfassen. Die Speichermodule können miteinander kombiniert werden, um 36-Bit-Wörter in der Einzelnachschlagetabellenbetriebsart (Betriebsart 0), 3 × 12-Bit-Wörter in der Mehrnachschlagetabellenbetriebsart (Betriebsart 1) und 32-Bit-Bildelemente oder 4 × 8-Bit-Einzelkomponentendaten in der JPEG-Betriebsart (Betriebsart 2) zu speichern. Typischerweise ist jedes Speichermodul einem anderen Teil der codierten Eingabe- und Ausgabedatenströme (1296 und 1297) zugeordnet. Der Dateneingabeanschluss des Speichermoduls 1380 ist zum Beispiel mit Bit 0 bis Bit 7 des codierten Eingabedatenstroms 1296 verbunden, und sein Datenausgabeanschluss ist mit Bit 0 bis Bit 7 des codierten Ausgabedatenstroms 1297 verbunden. Bei diesem Beispiel sind die Schreibadressen für alle die Speichermodule miteinander verbunden und nutzen im Wesentlichen gemeinsam den gleichen Wert. Im Gegensatz dazu werden die Leseadressen 1386, 1387, 1388, 1389, 1390 und 1391 für die Speichermodule des in 121 veranschaulichten Beispiels durch die Leseadressenerzeugungseinrichtung 1292 zugeführt und sind im Allgemeinen verschieden. Bei dem Beispiel wird ein gemeinsames Schreibfreigabesignal zum Bereitstellen der Schreibfreigabesignale für alle drei 8-Bit-Speichermodule verwendet, und ein zweites gemeinsames Schreibfreigabesignal wird zum Bereitstellen der Schreibfreigabesignale für alle drei 4-Bit-Speichermodule verwendet.
  • 122 veranschaulicht eine schematische Darstellung einer zum Erzeugen von Leseadressen 1386, 1387, 1388, 1389, 1390 und 1391 zum Zugreifen auf die in einer Speichervorrichtung 1293 enthaltenen Speichermodule verwendeten kombinatorischen Schaltung. Jedes codierte Eingabedatenobjekt wird in Teile zerlegt, und jeder Teil wird in einem getrennten Speichermodul in der Speichervorrichtung gespeichert. Folglich sind typischerweise die Schreibadressen für alle Speichermodule für alle Betriebsarten im Wesentlichen die gleichen, und somit ist im Wesentlichen keine Logik zum Berechnen der Schreibadressen für die Speichermodule erforderlich. Demgegenüber sind die Leseadressen bei diesem Beispiel typischerweise für verschiedene Operationen verschieden und sind auch in jeder Betriebsart für jedes Speichermodul verschieden. Alle Bytes in dem Ausgabedatenstrom 1298 des neu konfigurierbaren MUV-Puffers 250 müssen aus den in der JPEG-Betriebsart (Betriebsart 2) zur JPEG-Komprimierung in dem Puffer gespeicherten Bildelementdaten extrahierte Einzelkomponentendaten oder aus den in der JPEG-Betriebsart zur JPEG-Zerlegung in dem Puffer gespeicherten Einzelkomponentendatenblöcken extrahierte Bildelementdaten enthalten. Die Anforderungen an den Ausgabedatenstrom werden erfüllt, indem vier Leseadressen 1348, 1349, 1350 und 1351 für den Puffer bereitgestellt werden. In der Mehrnachschlagetabellenbetriebsart (Betriebsart 1) werden bis zu drei Nachschlagetabellen in dem Puffer gespeichert, und somit werden nur bis zu drei Leseadressen 1348, 1349 und 1350 zum Indizieren der drei Nachschlagetabellen benötigt. Die Leseadressen für alle Speichermodule sind in der Einzelnachschlagetabellenbetriebsart (Betriebsart 0) im Wesentlichen die gleichen, und nur eine Leseadresse 248 wird in dieser Betriebsart verwendet. Die in 122 gezeigte Beispielsteuerungseinrichtungsschaltung verwendet die Betriebsartsignale für den Puffer und bis zu vier Leseadressen zum Berechnen der Leseadresse 13861391 für jedes der sechs Speichermodule, aus denen die Speichervorrichtung 1293 besteht. Die Leseadressenerzeugungseinrichtung 1292 nimmt als ihre Eingaben die externen Leseadressen 1299, die externe Adressbusse 1348, 1349, 1350 und 1351 umfassen, und erzeugt die internen Leseadressen 1386, 1387, 1388, 1389, 1390 und 1391 für die Speichermodule, aus denen die Speichervorrichtung 1293 besteht. Bei dem Betrieb dieses Beispiels ist keine Manipulation an den externen Schreibadressen 1305 erforderlich.
  • 123 veranschaulicht eine Darstellung eines Beispiels dafür, wie 20-Bit-Matrixkoeffizienten in dem Puffer 250 gespeichert werden können, wenn der Puffer 250 in der Einzelnachschlagetabellenbetriebsart (Betriebsart 0) arbeitet. Bei diesem Beispiel wird typischerweise keine Codierung auf die in dem Cache gespeicherten Datenobjekte angewendet, wenn die Datenobjekte in den neu konfigurierbaren MUV-Puffer geschrieben werden. Die Matrixkoeffizienten werden in den 8-Bit-Speichermodulen 1380, 1381 und 1382 gespeichert. Bit 7 bis Bit 0 des Matrixkoeffizienten werden in dem Speichermodul 1380 gespeichert, Bit 15 bis Bit 8 des Matrixkoeffizienten werden in dem Speichermodul 1381 gespeichert, und Bit 19 bis Bit 16 des Matrixkoeffizienten werden in den unteren 4 Bits des Speichermoduls 1382 gespeichert. Die in dem Puffer gespeicherten Datenobjekte können so viele Male wie für den Rest der Anweisung erforderlich wiedergewonnen werden. Die Schreib- und Leseadressen für alle an der Einzelnachschlagetabellenbetriebsart beteiligten Speichermodule sind im Wesentlichen die gleichen.
  • 124 veranschaulicht eine Darstellung davon, wie die Tabelleneinträge in der Mehrnachschlagetabellenbetriebsart (Betriebsart 1) in dem Puffer gespeichert werden. Bei diesem Beispiel können bis zu drei Nachschlagetabellen in dem Puffer gespeichert werden, und jeder Nachschlagetabelleneintrag umfasst einen 4-Bit-Intervallwert und einen 8-Bit-Bruchwert. Typischerweise werden die Intervallwerte in den 4-Bit-Speichermodulen gespeichert, und die Bruchwerte werden in den 8-Bit-Speichermodulen gespeichert. Die drei Nachschlagetabellen 1410, 1411 und 1412 werden bei dem Beispiel in den Speicherbänken 1380 und 1383, 1381 und 1384, 1382 und 1385 gespeichert. Die getrennten Schreibfreigabesteuerungssignale 1306 und 1307 (121) erlauben es, die Intervallwerte in der Speichervorrichtung 1293 zu speichern, ohne die bereits in der Speichervorrichtung gespeicherten Bruchwerte zu beeinflussen. In im Wesentlichen der gleichen Art und Weise können die Bruchwerte in die Speichervorrichtung geschrieben werden, ohne die bereits in der Speichervorrichtung gespeicherten Intervallwerte zu beeinflussen.
  • 125 veranschaulicht eine Darstellung davon, wie Bildelementdaten bei der JPEG-Betriebsart (Betriebsart 2) zum Zerlegen von Bildelementdatenblöcken in Einzelkomponentendatenblöcke in dem neu konfigurierbaren MUV-Puffer 250 gespeichert werden. Die Speichervorrichtung 1293 ist als vier 8-Bit-Speicherbänke organisiert, die die Speichermodule 1380, 1381, 1382, 1383 und 1384 umfassen, wobei 1383 und 1384 zusammen verwendet werden, um im Wesentlichen in der gleichen Art und Weise wie ein 8-Bit-Speichermodul zu arbeiten. Das Speichermodul 1385 wird in der JPEG-Betriebsart (Betriebsart 2) nicht verwendet. Ein codiertes 32-Bit-Bildelement wird in vier Bytes zerlegt, und jedes wird in einem anderen 8-Bit-Speichermodul gespeichert.
  • 126 veranschaulicht eine Darstellung davon, wie in der Einzelkomponentenbetriebsart die Einzelkomponentendatenblöcke in der Speichervorrichtung 1293 gespeichert werden. Die Speichervorrichtung 1293 ist als vier 8-Bit-Speicherbänke organisiert, die die Speichermodule 1380, 1381, 1382, 1383 und 1384 umfassen, wobei 1383 und 1384 zusammen verwendet werden, um im Wesentlichen in der gleichen Art und Weise wie ein 8-Bit-Speichermodul zu arbeiten. Bei diesem Beispiel umfasst ein Einzelkomponentenblock 64 Bytes. Auf jeden Einzelkomponentenblock kann ein anderes Ausmaß von Byterotation angewendet werden, wenn er in den Puffer geschrieben wird. Codierte 32-Bit-Bildelementdaten werden wiedergewonnen, indem sie aus dem in dem Puffer gespeicherten verschiedenen Einzelkomponentendatenblock gelesen werden.
  • Für weitere Einzelheiten über die Organisation der Daten in dem MUV-Puffer 250 wird dabei auf den Bildelementorganisationseinrichtung betitelten Abschnitt Bezug genommen.
  • Die vorstehende Beschreibung hat gezeigt, dass ein neu konfigurierbarer Datenpuffer zum Handhaben von an verschiedenen Anweisungen beteiligten Daten verwendet werden kann. Ein neu konfigurierbarer Datenpuffer, der drei Betriebsarten bereitstellt, ist offenbart worden. In jeder Betriebsart des Puffers können andere Adresserzeugungstechniken benötigt werden. Die Einzelnachschlagetabellenbetriebsart (Betriebsart 0) kann zum Speichern von Matrixkoeffizienten in dem Puffer für eine Bildtransformationsoperation verwendet werden. Die Mehrnachschlagetabellenbetriebsart (Betriebsart 1) kann zum Speichern einer Vielzahl von Intervall- und Bruchnachschlagetabellen in dem Puffer bei einer Mehrkanalfarbraumwandlungsoperation (CSC) verwendet werden. Die JPEG-Betriebsart (Betriebsart 2) kann entweder zum Zerlegen von MCU-Daten in Einzelkomponenten-8 × 8-Blöcke oder zum Rekonstruieren von MCU-Daten aus Einzelkomponenten-8 × 8-Blöcken bei einer JPEG-Komprimierungs- bzw. -Dekomprimierungsoperation verwendet werden.
  • 3.16.3 Ergebnisorganisationseinrichtung
  • Der MUV-Puffer wird auch durch die Ergebnisorganisationseinrichtung 249 genutzt. Die Ergebnisorganisationseinrichtung 249 puffert und formatiert den Datenstrom von entweder dem Hauptdatenweg 242 oder dem JPEG-Codierer 241. Die Ergebnisorganisationseinrichtung 249 ist auch für ein Datenpacken und -entpacken, eine Denormalisierung (denormalization), einen Bytespurwechsel und eine Neuausrichtung von Ergebnisdaten verantwortlich. Zusätzlich überträgt die Ergebnisorganisationseinrichtung 249 ihre Ergebnisse nach Bedarf zu der Externe-Schnittstelle-Steuerungseinrichtung 238, der Lokaler-Speicher-Steuerungseinrichtung 236 und der Peripherieschnittstelle-Steuerungseinrichtung 237.
  • Wenn sie in der JPEG-Dekomprimierungsbetriebsart arbeitet, nutzt die Ergebnisorganisationseinrichtung 249 das MUV-RAM 250 zum doppelten Puffern von durch den JPEG-Codierer 241 erzeugten Bilddaten. Die doppelte Pufferung steigert die Leistung der JPEG-Dekomprimierung, indem sie es erlaubt, dass Daten von dem JPEG-Codierer 241 in eine Hälfte des MUV-RAM 250 geschrieben werden, während zu der gleichen Zeit in der anderen Hälfte des MUV-RAM 250 vorhandene Bilddaten zu einem gewünschten Ziel ausgegeben werden.
  • Die 1-, 3- und 4-Kanal-Bilddaten werden während der JPEG-Dekomprimierung in einer Form von 8 × 8-Blöcken zu der Ergebnisorganisationseinrichtung 249 geleitet, wobei jeder Block aus 8-Bit-Komponenten aus dem gleichen Kanal besteht. Die Ergebnisorganisationseinrichtung speichert diese Blöcke in der bereitgestellten Reihenfolge in dem MUV-RAM 250, und daraufhin wird für verschachtelte Mehrkanalbilder ein Verzahnen (meshing) der Kanäle durchgeführt, wenn Daten aus dem MUV-RAM 250 gelesen werden. Bei einer auf dem Farbraum Y, U, V basierenden Dreikanal-JPEG-Komprimierung gibt der JPEG-Codierer 241 zum Beispiel drei 8 × 8-Blöcke aus, wobei der erste aus Y-Komponenten besteht, der zweite aus den U-Komponenten besteht und der dritte aus den V-Komponenten besteht. Das Verzahnen wird ausgeführt, indem eine Komponente aus jedem Block genommen wird und das Bildelement in der Form von (YUVX) aufgebaut wird, wobei X einen nicht verwendeten Kanal darstellt. Ein Bytewechsel kann auf jede Ausgabe angewendet werden, um die Kanäle wie gewünscht zu wechseln. Die Ergebnisorganisationseinrichtung 249 muss auch eine erforderliche Unterabtastung zum Rekonstruieren von Chrominanzdaten aus einer dekomprimierten Ausgabe durchführen. Dies kann ein Replizieren jedes Programmkanals zum Erzeugen und einen einzigen umfassen.
  • 127 zugewendet ist dort die Ergebnisorganisationseinrichtung 249 gemäß 2 ausführlicher veranschaulicht. Die Ergebnisorganisationseinrichtung 249 basiert um die übliche Standard-CBus-Schnittstelle 840, die eine Registerdatei von Registern, die für den Betrieb der Ergebnisorganisationseinrichtung 249 einzustellen sind, enthält. Der Betrieb der Ergebnisorganisationseinrichtung 249 ähnelt dem der Bildelementorganisationseinrichtung 246, jedoch finden die umgekehrten Datenmanipulationsoperationen statt. Eine Datenmanipulationseinheit 842 führt Operationen des Bytespurwechsels, der Komponentenersetzung, der Komponentenabwahl (component deselection) und der Denormalisierung bei durch die MUV-Adresserzeugungseinrichtung (MAG) 805 bereitgestellten Daten durch. Die ausgeführten Operationen arbeiten gemäß verschiedenen eingestellten Feldern in internen Registern. Die FIFO-Warteschlange 843 stellt eine Pufferung von Ausgabedaten, bevor sie über die RBus-Steuerungseinheit 844 ausgegeben werden, bereit.
  • Die RBus-Steuerungseinheit 844 besteht aus einem Adressdecodierer und Zustandsmaschinen zur Adresserzeugung. Die Adresse für das Zielmodul wird zusätzlich zu Daten über die erforderliche Anzahl von Ausgabebytes in einem internen Register gespeichert. Ferner bestimmt ein internes Register RO_CUT, wie viele Ausgabebytes zu verwerfen sind, bevor ein Bytestrom auf dem Ausgabebus gesendet wird. Zusätzlich bestimmt ein Register RO_LMT die maximale Anzahl von auszugebenden Dateneinheiten, wobei nachfolgende Datenbytes nach der Ausgabegrenze ignoriert werden. Die MAG 805 erzeugt während der JPEG-Dekomprimierung Adressen für das MUV-RAM 250. Das MUV-RAM 250 wird zum doppelten Puffern einer Ausgabe von dem JPEG-Decodierer genutzt. Die MAG 805 führt ein passendes Verzahnen von Komponenten in dem MUV-RAM 250 gemäß einem internen Konfigurationsregister durch und gibt verschachtelte Einkanal-, Dreikanal- oder Vierkanalbildelemente aus. Die aus dem MUV-RAM 250 erhaltenen Daten werden daraufhin durch die Datenmanipulationseinheit 842 geleitet, da ein Anwenden eines Bytespurwechsels benötigt werden kann, bevor Bildelementdaten zu dem passenden Ziel gesendet werden.
  • Wenn die Ergebnisorganisationseinrichtung 249 nicht für die JPEG-Betriebsart konfiguriert ist, leitet die MAG 805 Daten von dem PBus-Empfänger 845 einfach direkt zu der Datenmanipulationseinheit 842 weiter.
  • 3.16.4 Operandenorganisationseinrichtungen B und C
  • Wieder zu 2 zurückkehrend führen die zwei identischen Operandenorganisationseinrichtungen 247, 248 die Funktion des Pufferns von Daten von der Daten-Cache-Steuerung 240 und Weiterleitens der Daten zu dem JPEG-Codierer 241 oder dem Hauptdatenweg 242 durch. Die Operandenorganisationseinrichtungen 247, 248 werden in einer Anzahl von Betriebsarten betrieben:
    • (a) Leerlaufbetriebsart, in der die Operandenorganisationseinrichtung nur auf CBus-Anforderungen anspricht.
    • (b) Unmittelbare Betriebsart, bei der die Daten der derzeitigen Anweisung in einem internen Register der Operandenorganisationseinrichtung gespeichert werden.
    • (c) Sequentielle Betriebsart, in der die Operandenorganisationseinrichtung sequentielle Adressen erzeugt und Daten von der Daten-Cache-Steuerungseinrichtung 240 anfordert, wann immer ihr Eingabepuffer ein Füllen benötigt.
  • Eine Anzahl von Betriebsarten des Hauptdatenwegs 242 erfordert es, dass zumindest eine der Operandenorganisationseinrichtungen 247, 248 in der sequentiellen Betriebsart arbeitet. Diese Betriebsarten schließen ein Zusammensetzen ein, wobei die Operandenorganisationseinrichtung B 247 Bildelemente puffern muss, die mit einem anderen Bild zusammenzusetzen sind. Die Operandenorganisationseinrichtung C 248 wird für Zusammensetzungsoperationen zur Dämpfung (attenuation) von Werten für jeden Datenkanal verwendet. In einer Halbtönungsbetriebsart puffert die Operandenorganisationseinrichtung B 247 8-Bit-Matrixkoeffizienten, und in einer Hierarchisches-Bildformat-Dekomprimierungsbetriebsart puffert die Operandenorganisationseinrichtung B 247 Daten für sowohl eine vertikale Interpolation als auch Restverschmelzungsanweisungen (residual merging instructions).
    • (d) In einer konstanten Betriebsart baut eine Operandenorganisationseinrichtung B ein einzelnes internes Datenwort auf und repliziert dieses Wort eine Anzahl von Malen, wie sie durch ein internes Register gegeben ist.
    • (e) In einer Kachelungsbetriebsart puffert eine Operandenorganisationseinrichtung B Daten, die eine Bildelementkachel umfassen.
    • (f) In einer zufälligen Betriebsart leitet die Operandenorganisationseinrichtung Adressen von dem MDP 242 oder dem JPEG-Codierer 241 direkt zu der Daten-Cache-Steuerungseinrichtung weiter. Diese Adressen werden zum Indizieren des Daten-Caches 230 genutzt.
  • Ein internes Längenregister bestimmt die Anzahl von Einheiten, die durch die einzelnen Operandenorganisationseinrichtungen 247, 248 zu erzeugen sind, wenn sie in der sequentiellen Betriebsart/Kachelungsbetriebsart/konstanten Betriebsart betrieben werden. Jede Operandenorganisationseinrichtung 247, 248 führt Buch über die Anzahl von bislang verarbeiteten Dateneinheiten und stoppt, wenn der Zählwert den in ihrem internen Register bestimmten Wert erreicht. Jede Operandenorganisationseinrichtung ist ferner für ein Formatieren von Eingabedaten über Funktionen des Bytespurwechsels, der Komponentenersetzung, des Packens/Entpackens und der Normalisierung verantwortlich. Die gewünschten Operationen werden unter Nutzung von internen Registern konfiguriert. Ferner kann jede Operandenorganisationseinrichtung 247, 248 auch zum Beschränken von Dateneinheiten konfiguriert werden.
  • Nachstehend 128 zugewendet ist dort die Struktur der Operandenorganisationseinrichtungen (247, 248) ausführlicher veranschaulicht. Die Operandenorganisationseinrichtung 247, 248 weist die übliche Standard-CBus-Schnittstelle und für die Gesamtsteuerung der Operandenorganisationseinrichtung verantwortliche Register 850 auf. Ferner ist eine OBus-Steuerungseinheit 851 zur Verbindung mit der Daten-Cache-Steuerungseinrichtung 240 bereitgestellt und ist für ein Durchführen einer Adresserzeugung für die sequentielle Betriebsart/Kachelungsbetriebsart/konstante Betriebsart verantwortlich, wobei sie Steuerungssignale zum Freigeben von Kommunikationen auf der OBus-Schnittstelle mit jeder Operandenorganisationseinrichtung 247, 248 erzeugt und Datenmanipulationseinheitsoperationen wie beispielsweise eine Normalisierung und Replikation steuert, die es erfordern, dass der Zustand von vorhergehenden Taktzyklen des Eingabestroms gesichert wird. Wenn eine Operandenorganisationseinrichtung 247, 248 in der sequentiellen Betriebsart oder Kachelungsbetriebsart arbeitet, sendet die OBus-Steuerungseinheit 851 Anforderungen von Daten zu der Daten-Cache- Steuerungseinrichtung 240, wobei die Adressen durch interne Register bestimmt werden.
  • Jede Operandenorganisationseinrichtung enthält ferner einen 36 Bits breiten FIFO-Puffer 852, der zum Puffern von Daten von der Daten-Cache-Steuerungseinrichtung 240 in verschiedenen Betriebsarten verwendet wird.
  • Eine Datenmanipulationseinheit 853 führt die gleichen Funktionen wie die entsprechende Datenmanipulationseinheit 804 der Bildelementorganisationseinrichtung 246 durch.
  • Eine Hauptdatenweg/JPEG-Codierer-Schnittstelle 854 multiplext Adressen und Daten zu und von den Hauptdatenweg- und JPEG-Codierer-Modulen 242, 241 in der normalen Betriebsart. Die MDP/JC-Schnittstelle 854 leitet Eingabedaten von den Datenmanipulationseinheiten 853 zu dem Hauptdatenweg und kann in dem Prozess zum Replizieren dieser Daten konfiguriert werden. Wenn in der Farbwandlungsbetriebsart gearbeitet wird, werden die Einheiten 851, 854 umgangen, um einen Hochgeschwindigkeitszugriff auf die Daten-Cache-Steuerungseinrichtung 240 und die Farbwandlungstabellen sicherzustellen.
  • 3.16.5 Hauptdatenwegeinheit
  • Zu 2 zurückkehrend führt die Hauptdatenwegeinheit 242 alle von der JPEG-Daten-Codierung verschiedenen Datenmanipulationsoperationen und Anweisungen durch. Diese Anweisungen schließen eine Zusammensetzung, eine Farbraumwandlung, Bildtransformationen, eine Faltung, eine Matrixmultiplikation, eine Halbtönung, eine Speicherkopie und eine Hierarchischens-Bildformat- Dekomprimierung ein. Der Hauptdatenweg 242 empfängt Bildelement- und Operandendaten von der Bildelementorganisationseinrichtung 246 und den Operandenorganisationseinrichtungen 247, 248 und führt die sich ergebende Ausgabe der Ergebnisorganisationseinrichtung 249 zu.
  • 129 veranschaulicht ein Blockschaltbild der Hauptdatenwegeinheit 242. Die Hauptdatenwegeinheit 242 ist ein allgemeiner Bildprozessor und weist eine Eingabeschnittstelle 1460, einen Bilddatenprozessor 1462, ein Anweisungswortregister 1464, einen Anweisungswortdecodierer 1468, ein Steuerungssignalregister 1470, eine Registerdatei 1472 und ein ROM 1475 auf.
  • Die Anweisungssteuerungseinrichtung 235 transferiert Anweisungswörter über einen Bus 1454 zu dem Anweisungswortregister 1464. Jedes Anweisungswort enthält Informationen wie beispielsweise die Art der auszuführenden Bildverarbeitungsoperation und Zustandsmerker zum Freigeben oder Sperren verschiedener Optionen bei der Bildverarbeitungsoperation. Das Anweisungswort wird daraufhin über den Bus 1465 zu dem Anweisungswortdecodierer 1468 transferiert. Die Anweisungssteuerungseinrichtung 235 kann daraufhin dem Anweisungswortdecodierer 1468 angeben, dass das Anweisungswort zu decodieren ist. Bei einem Empfangen der Angabe decodiert der Anweisungsdecodierer 1468 das Anweisungswort in Steuerungssignale. Diese Steuerungssignale werden daraufhin über einen Bus 1469 zu dem Steuerungssignalregister 1470 transferiert. Die Ausgabe des Steuerungssignalregisters wird daraufhin über einen Bus 1471 mit der Eingabeschnittstelle 1460 und dem Bilddatenprozessor 1462 verbunden.
  • Zum Hinzufügen einer weiteren Flexibilität zu der Hauptdatenwegeinheit 242 kann die Anweisungssteuerungseinrichtung 235 auch in das Steuerungssignalregister 1470 schreiben. Dies erlaubt es jedem, der mit der Struktur der Hauptdatenwegeinheit 242 vertraut ist, die Hauptdatenwegeinheit 242 derart mikrozukonfigurieren (micro-configure), dass die Hauptdatenwegeinheit 242 Bildverarbeitungsoperationen ausführen wird, die nicht durch ein Anweisungswort beschrieben sind.
  • In Fällen, in denen nicht alle die notwendigen Informationen zum Durchführen der gewünschten Bildverarbeitungsoperation in das Anweisungswort passen, kann die Anweisungssteuerungseinrichtung 235 alle die anderen zum Durchführen der gewünschten Bildverarbeitungsoperation notwendigen Informationen in einige der ausgewählten Register in der Registerdatei 1472 schreiben. Die Informationen werden daraufhin über einen Bus 1473 zu der Eingabeschnittstelle 1460 und dem Bilddatenprozessor 1462 transferiert. Für einige Bildverarbeitungsoperationen kann die Eingabeschnittstelle 1460 die Inhalte von ausgewählten Registern in der Registerdatei 1472 aktualisieren, um den derzeitigen Status der Hauptdatenwegeinheit 242 widerzuspiegeln. Dieses Merkmal hilft der Anweisungssteuerungseinrichtung 235, herauszufinden, was das Problem ist, wenn ein Problem bei einem Ausführen einer Bildverarbeitungsoperation vorhanden ist.
  • Sobald die Decodierung des Anweisungsworts beendet ist und/oder die gewünschten Steuerungssignale in das Steuerungssignalregister geladen sind kann die Anweisungssteuerungseinrichtung 235 der Hauptdatenwegeinheit 242 angeben, ein Durchführen der gewünschten Bildverarbeitungsoperation zu starten. Sobald die Angabe empfangen wird, beginnt die Eingabeschnittstelle 1460, von einem Bus 1451 kommende Datenobjekte anzunehmen. Abhängig von der Art der durchgeführten Bildverarbeitungsoperation kann die Eingabeschnittstelle 1460 auch beginnen, von einem Operandenbus 1452 und/oder einem Operandenbus 1453 kommende Operandendaten anzunehmen oder Adressen für Operandendaten zu erzeugen und Operandendaten von dem Operandenbus 1452 und/oder dem Operandenbus 1453 zu empfangen. Die Eingabeschnittstelle 1460 speichert daraufhin die eingehenden Daten und ordnet sie gemäß der Ausgabe des Steuerungssignalregisters 1470 neu an. Die Eingabeschnittstelle 1460 erzeugt auch Koordinaten, die über die Busse 1452 und 1453 abzurufen sind, wenn derartige Funktionen wie affine Bildtransformationsoperationen und eine Faltung berechnet werden.
  • Der Bilddatenprozessor 1462 führt die hauptsächlichen arithmetischen Operationen bei den neu angeordneten Datenobjekten von der Eingabeschnittstelle 1460 durch. Der Bildprozessor 1462 kann: mit einem bereitgestellten Interpolationsfaktor zwischen zwei Datenobjekten interpolieren; zwei Datenobjekte multiplizieren und das Produkt durch 255 dividieren; zwei Datenobjekte allgemein multiplizieren und addieren; Bruchteile eines Datenobjekts, das verschiedene Auflösungen aufweisen kann, runden; eine Bereichsüberschreitung eines Datenobjekts auf einen gewissen maximalen Wert festklemmen (clamp) und eine Bereichsunterschreitung eines Datenobjekts auf einen gewissen minimalen Wert festklemmen; und ein Skalieren und Klemmen bei einem Datenobjekt durchführen. Die Steuerungssignale auf dem Bus 1471 steuern, welche der vorstehenden arithmetischen Operationen bei den Datenobjekten durchgeführt werden, und steuern die Reihenfolge der Operationen.
  • Ein ROM 1475 enthält die Dividenden von 255/x, wobei x sich in dem 8.8-Format gerundet von 0 bis 255 bewegt. Das ROM 1475 ist über einen Bus 1476 mit der Eingabeschnittstelle 1460 und dem Bilddatenprozessor 1462 verbunden. Das ROM 1475 wird zum Erzeugen von Mischungen (blends) von kurzen Längen und Multiplizieren eines Datenobjekts mit 255 und Dividieren des Produkts durch ein anderes Datenobjekt verwendet.
  • Vorzugsweise ist die Anzahl von Operandenbussen, zum Beispiel 1452, auf 2 begrenzt, was für die meisten Bildverarbeitungsoperationen ausreicht.
  • 130 veranschaulicht die Eingabeschnittstelle 1460 ausführlicher. Die Eingabeschnittstelle 1460 weist eine Datenobjektschnittstelleneinheit 1480, Operandenschnittstelleneinheiten 1482 und 1484, eine Adresserzeugungszustandsmaschine 1486, eine Mischungserzeugungszustandsmaschine 1488, eine Matrixmultiplikationszustandsmaschine 1490, eine Interpolationszustandsmaschine 1490, eine Datensynchronisationseinrichtung 1500, eine arithmetische Einheit 1496, ein Sonstiges-Register 1498 und eine Datenverteilungslogik 1505 auf.
  • Die Datenobjektschnittstelleneinheit 1480 und die Operandenschnittstelleneinheiten 1482 und 1484 sind für ein Empfangen von Datenobjekten und Operanden von außen verantwortlich. Diese Schnittstelleneinheiten 1482, 1484 werden alle durch Steuerungssignale von einem Steuerungsbus 1515 konfiguriert. Diese Schnittstelleneinheiten 1482, 1484 weisen Datenregister in ihnen zum Enthalten der Datenobjekte/Operanden, die sie gerade empfangen haben, auf, und sie erzeugen alle ein Signal GÜLTIG, das geltend gemacht wird, wenn die Daten in dem Datenregister gültig sind. Die Ausgaben der Datenregister in diesen Schnittstelleneinheiten 1482, 1484 werden mit einem Datenbus 1505 verbunden. Die Signale GÜLTIG dieser Schnittstelleneinheiten 1482, 1484 werden mit einem Ablaufbus 1510 verbunden. Wenn sie zum Abrufen von Operanden konfiguriert werden, nehmen die Operandenschnittstelleneinheiten 1482 und 1484 Adressen von der arithmetischen Einheit 1496, der Matrixmultiplikationszustandsmaschine 1490 und/oder der Ausgabe des Datenregisters in der Datenobjektschnittstelleneinheit 1480 an und wählen unter ihnen die erforderliche Adresse gemäß den Steuerungssignalen von dem Steuerungsbus 1515 aus. In einigen Fällen können die Datenregister in den Operandenschnittstelleneinheiten 1482 und 1484 zum Speichern von Daten von der Ausgabe des Datenregisters in der Datenobjektschnittstelleneinheit 1480 oder der arithmetischen Einheit 1496 konfiguriert werden, besonders dann, wenn sie keine Daten von außen annehmen und speichern müssen.
  • Die Adresserzeugungszustandsmaschine 1486 ist für ein Steuern der arithmetischen Einheit 1496 derart, dass sie die nächsten Koordinaten, auf die in dem Quellbild zuzugreifen ist, bei affinen Bildtransformationsoperationen und Faltungsoperationen berechnet, verantwortlich.
  • Die Adresserzeugungszustandsmaschine 1486 wartet auf ein einzustellendes Signal START auf dem Steuerungsbus 1515. Wenn das Signal START auf dem Steuerungsbus 1515 eingestellt wird, hört die Adresserzeugungszustandsmaschine 1486 daraufhin auf (deasserts), das Signal ZUM_STILLSTAND_BRINGEN (STALL) bei der Datenobjektschnittstelleneinheit 1480 geltend zu machen, und wartet darauf, dass Datenobjekte ankommen. Sie stellt auch einen Zähler auf die Anzahl von Datenobjekten in einem Kerndeskriptor ein, die die Adresserzeugungszustandsmaschine 1486 abrufen muss. Die Ausgabe des Zählers wird decodiert, damit sie zu Freigabesignalen für Datenregister in den Operandenschnittstelleneinheiten 1482 und 1484 und das Sonstiges-Register 1498 wird. Wenn das Signal GÜLTIG von der Datenobjektschnittstelleneinheit 1480 geltend gemacht wird, erniedrigt die Adresserzeugungszustandsmaschine 1486 den Zähler, so dass das nächste Stück von Datenobjekt in einem anderen Register zwischengespeichert wird.
  • Wenn der Zähler null erreicht, sagt die Adresserzeugungszustandsmaschine 1486 der Operandenschnittstelleneinheit 1482, dass sie ein Abrufen von Indextabellenwerten und Bildelementen aus der Operandenschnittstelleneinheit 1484 starten soll. Ferner lädt sie zwei Zähler, einen mit der Anzahl von Zeilen, einen anderen mit der Anzahl von Spalten. Bei jeder Taktflanke werden die Zähler dann, wenn sie nicht durch Signale ZUM_STILLSTAND_BRINGEN von der Operandenschnittstelleneinheit 1482 oder anderen pausieren, zum Liefern der verbleibenden Zeilen und Spalten erniedrigt, und die arithmetische Einheit 1496 berechnet die nächsten Koordinaten, von denen abzurufen ist. Wenn beide Zähler null erreicht haben, laden die Zähler sich selbst wieder mit der Anzahl von Zeilen und Spalten neu, und die arithmetische Einheit 1496 wird zum Finden der oberen linken Ecke der nächsten Matrix konfiguriert.
  • Falls eine Interpolation zum Bestimmen des wahren Werts eines Bildelements verwendet wird, erniedrigt die Adresserzeugungszustandsmaschine 1486 die Anzahl von Zeilen und Spalten nach jedem zweiten Taktzyklus. Dies wird unter Verwendung eines 1-Bit-Zählers realisiert, wobei die Ausgabe als die Freigabe des Zeilen- und Spaltenzählers verwendet wird. Nachdem die Matrix einmal überall durchlaufen ist, sendet die Zustandsmaschine ein Signal zum Erniedrigen des Zählwerts in dem Längenzähler. Wenn der Zähler 1 erreicht und die letzte Indextabellenadresse zu der Operandenschnittstelleneinheit 1482 gesendet wird, macht die Zustandsmaschine ein Endsignal geltend und setzt das Startbit zurück.
  • Die Mischungserzeugungszustandsmaschine 1488 ist für ein Steuern der arithmetischen Einheit 1496 zum Erzeugen einer Sequenz von Zahlen von 0 bis 255 für die Länge einer Mischung verantwortlich. Diese Sequenz von Zahlen wird daraufhin als der Interpolationsfaktor zum Interpolieren zwischen dem Mischungsstartwert und Mischungsendwert verwendet.
  • Die Mischungserzeugungszustandsmaschine 1488 bestimmt, in welcher Betriebsart sie laufen sollte (Sprungbetriebsart oder Schrittbetriebsart). Wenn die Mischungslänge kleiner oder gleich 256 ist, dann wird die Sprungbetriebsart verwendet, andernfalls wird die Schrittbetriebsart verwendet.
  • Die Mischungserzeugungszustandsmaschine 1488 berechnet die Folgenden und legt sie in Register (reg0, reg1, reg2). Wenn eine Mischungsrampe sich für eine vorbestimmte Länge in einer Schrittbetriebsart befindet, dann 511 – Länge in reg0 (24 Bits), 512 – 2·Länge in reg1 (24 Bits) und Ende-Start in reg2 (4 × 9 Bits) zwischenspeichern. Wenn die Rampe sich in der Sprungbetriebsart befindet, dann 0 in reg0, 255/(Länge – 1) in reg1 und Ende-Start in reg2 (4 × 9 Bits) zwischenspeichern.
  • In der Schrittbetriebsart werden die folgenden Operationen für jeden Zyklus durchgeführt:
    Wenn reg0 > 0, dann reg0 und reg1 addieren und das Ergebnis in reg0 speichern. Eine andere Erhöhungseinrichtung kann ebenfalls freigegeben werden, so dass ihre Ausgabe um 1 erhöht wird. Wenn reg0 <= 0, dann reg0 und 510 addieren und das Ergebnis in reg0 speichern. Die Erhöhungseinrichtung wird nicht erhöht. Die Ausgabe der Erhöhungseinrichtung ist der Rampenwert.
  • In der Sprungbetriebsart wird das Folgende für jeden Zyklus durchgeführt:
    reg0 und reg1 addieren. Die Addiererausgabe beträgt 24 Bits in einem Festpunktformat von 16.8. Die Addiererausgabe in reg0 speichern. Wenn das erste Bit des Bruchergebnisses 1 ist, dann den Ganzzahlteil erhöhen.
  • Die letzten 8 Bits des Ganzzahlteils der Erhöhungseinrichtung sind der Rampenwert. Der Rampenwert, die Ausgabe von reg2 und der Mischungsstartwert werden daraufhin in den Bilddatenprozessor 1462 eingespeist, um die Rampe zu erzeugen.
  • Die Matrixmultiplikationszustandsmaschine 1490 ist für ein Durchführen einer linearen Farbraumwandlung bei Eingabedatenobjekten unter Verwendung einer Wandlungsmatrix verantwortlich. Die Wandlungsmatrix ist von der Dimension 4 × 5. Die ersten vier Spalten werden mit den vier Kanälen in dem Datenobjekt multipliziert, während die letzte Spalte zu der Summe von Produkten zu addierende konstante Koeffizienten enthält. Wenn das Signal START von dem Steuerungsbus 1515 geltend gemacht wird, tut die Matrixmultiplikationszustandsmaschine das Folgende:
    • 1) Sie erzeugt Zeilennummern zum Abrufen von konstanten Koeffizienten der Wandlungsmatrix von Bussen 1482 und 1484. Sie gibt auch das Sonstiges-Register 1498 zum Speichern dieser konstanten Koeffizienten frei.
    • 2) Sie enthält ein 1-Bit-Flipflop, das eine Zeilennummer erzeugt, die als eine Adresse zum Abrufen der Hälfte der Matrix von den Bussen 1482 und 1484 verwendet wird. Sie erzeugt auch ein Signal "MAT_SEL", das auswählt, welche Hälfte des Datenobjekts mit der Hälfte der Matrix zu multiplizieren ist.
    • 3) Sie hört auf, wenn keine von der Datenobjektschnittstelleneinheit 1480 kommenden Datenobjekte vorhanden sind.
  • Die Interpolationszustandsmaschine 1494 ist für ein Durchführen einer horizontalen Interpolation von Datenobjekten verantwortlich. Während der horizontalen Interpolation nimmt die Hauptdatenwegeinheit 242 einen Strom von Datenobjekten von dem Bus 1451 an und interpoliert zwischen angrenzenden Datenobjekten, um einen Strom von Datenobjekten auszugeben, der zweimal oder viermal so lang wie der ursprüngliche Strom ist. Da die Datenobjekte gepackte Bytes oder Bildelemente sein können, arbeitet die Interpolationszustandsmaschine 1494 in jedem Fall anders, um den Durchsatz zu maximieren. Die Interpolationszustandsmaschine 1494 tut das Folgende:
    • 1) Sie erzeugt ein Signal INT_SEL für die Datenverteilungslogik 1503, um die eingehenden Datenobjekte neu anzuordnen, so dass das richtige Paar von Datenobjekten interpoliert wird.
    • 2) Sie erzeugt Interpolationsfaktoren zum Interpolieren zwischen angrenzenden Paaren von Datenobjekten.
    • 3) Sie erzeugt ein Signal ZUM_STILLSTAND_BRINGEN zum Hindern der Datenobjektschnittstelleneinheit 1480 daran, mehr Datenobjekte anzunehmen. Dies ist notwendig, da der Ausgabestrom länger als der Eingabestrom ist. Das Signal ZUM_STILLSTAND_BRINGEN geht zu dem Ablaufbus 1510.
  • Die arithmetische Einheit 1496 enthält Schaltungen zum Durchführen von arithmetischen Berechnungen. Sie wird durch Steuerungssignale auf dem Steuerungsbus 1515 konfiguriert. Sie wird nur durch zwei Anweisungen verwendet: eine affine Bildtransformation und Faltung sowie eine Mischungserzeugung bei einer Zusammensetzung.
  • Bei der affinen Bildtransformation und Faltung ist die arithmetische Einheit 1496 verantwortlich für:
    • 1) Berechnen der nächsten x- und y-Koordinaten. Zum Berechnen von x-Koordinaten verwendet die arithmetische Einheit 1494 einen Addierer/Subtrahierer zum Addieren/Subtrahieren des x-Teils des Horizontal- und Vertikaldeltas bzw. horizontalen und vertikalen Deltas zu/von der derzeitigen x-Koordinate. Zum Berechnen der y-Koordinaten verwendet die arithmetische Einheit 1498 einen Addierer/Subtrahierer zum Addieren/Subtrahieren des y-Teils des horizontalen oder vertikalen Deltas zu/von der derzeitigen y-Koordinate.
    • 2) Addieren der y-Koordinate zu dem Indextabellenoffset zum Berechnen der Indextabellenadresse. Diese Summe wird auch um 4 erhöht, um den nächsten Indextabelleneintrag zu finden, wenn eine Interpolation zum Finden des wahren Werts eines Bildelements verwendet wird.
    • 3) Addieren der x-Koordinate zu dem Indextabelleneintrag zum Finden der Adresse des Bildelements.
    • 4) 1 von dem Längenzählwert subtrahieren.
  • Bei der Mischungserzeugung tut die arithmetische Einheit 1496 das Folgende:
    • 1) In der Schrittbetriebsart wird einer der Rampenaddierer zum Berechnen einer internen Variable in dem Rampenerzeugungsalgorithmus verwendet, während der andere Addierer zum Erhöhen des Rampenwerts, wenn die interne Variable größer als 0 ist, verwendet wird.
    • 2) In der Sprungbetriebsart wird nur einer der Addierer zum Addieren des Sprungwerts zu dem derzeitigen Rampenwert benötigt.
    • 3) In der Sprungbetriebsart auftretende Brüche runden.
    • 4) Start der Mischung von Ende der Mischung bei dem Beginn der Rampenerzeugung subtrahieren.
    • 5) 1 von dem Längenzählwert subtrahieren.
  • Das Sonstiges-Register 1498 stellt von den Datenregistern in der Datenobjektschnittstelleneinheit 1480 und den Operandenschnittstelleneinheiten 1482 und 1484 gesonderten zusätzlichen Speicherplatz bereit. Es wird üblicherweise zum Speichern von internen Variablen oder als ein Puffer von früheren Datenobjekten von der Datenobjektschnittstelleneinheit 1480 verwendet. Es wird durch Steuerungssignale auf dem Steuerungsbus 1515 konfiguriert.
  • Die Datensynchronisationseinrichtung 1500 wird durch Steuerungssignale auf dem Steuerungsbus 1515 konfiguriert. Sie stellt Signale ZUM_STILLSTAND_BRINGEN für die Datenobjektschnittstelleneinheit 1480 und die Operandenschnittstelleneinheiten 1482 und 1484 bereit, so dass dann, wenn eine der Schnittstelleneinheiten ein Stück von Datenobjekt empfängt, was die anderen nicht haben, die Schnittstelleneinheit zum Stillstand gebracht wird, bis alle die anderen Schnittstelleneinheiten ihre Stücke von Daten empfangen haben.
  • Die Datenverteilungslogik 1505 ordnet Datenobjekte von dem Datenbus 1510 und der Registerdatei 1472 über einen Bus 1530 gemäß Steuerungssignalen auf dem Steuerungsbus 1515 einschließlich eines Signals MAT_SEL von der Matrixmultiplikationszustandsmaschine 1490 und eines Signals INT_SEL von der Interpolationszustandsmaschine 1494 neu an. Die neu angeordneten Daten werden auf einem Bus 1461 ausgegeben.
  • 131 veranschaulicht den Bilddatenprozessor 1462 gemäß 129 ausführlicher. Der Bilddatenprozessor 1462 weist eine Pipelinesteuerungseinrichtung 1540 und eine Anzahl von Farbkanalprozessoren 1545, 1550, 1555 und 1560 auf. Alle Farbkanalprozessoren nehmen Eingaben von einem Bus 1565 an, der durch die Eingabeschnittstelle 1460 (131) angesteuert wird. Alle Farbkanalprozessoren und die Pipelinesteuerungseinrichtung 1540 werden durch Steuerungssignale von dem Steuerungssignalregister 1470 über einen Bus 1472 konfiguriert. Alle die Farbkanalprozessoren nehmen auch Eingaben von der Registerdatei 1472 und dem ROM 1475 gemäß 129 über einen Bus 1580 an. Die Ausgaben aller der Farbkanalprozessoren und der Pipelinesteuerungseinrichtung werden zusammengruppiert, um einen Bus 1570 auszubilden, der die Ausgabe 1455 des Bilddatenprozessors 1462 bildet.
  • Die Pipelinesteuerungseinrichtung 1540 steuert den Fluss von Datenobjekten in allen den Farbkanalprozessoren durch ein Freigeben und Sperren von Registern in allen den Farbkanalprozessoren. In der Pipelinesteuerungseinrichtung 1540 ist eine Pipeline von Registern vorhanden. Die Form und Tiefe der Pipeline wird durch die Steuerungssignale von dem Bus 1471 konfiguriert, und die Pipeline in der Pipelinesteuerungseinrichtung 1540 weist die gleiche Form wie die Pipeline bei den Farbkanalprozessoren auf. Die Pipelinesteuerungseinrichtung nimmt Signale GÜLTIG von dem Bus 1565 an. Für jede Pipelinestufe in der Pipelinesteuerungseinrichtung 1540 macht dann, wenn das eingehende Signal GÜLTIG geltend gemacht wird und die Pipelinestufe nicht zum Stillstand gebracht wird, die Pipelinestufe die Registerfreigabesignale für alle Farbkanalprozessoren geltend und speichert das eingehende Signal GÜLTIG zwischen. Die Ausgabe des Zwischenspeicherns ist daraufhin ein zu der nächsten Pipelinestufe gehendes Signal GÜLTIG. Auf diese Weise wird die Bewegung von Datenobjekten in der Pipeline ohne eine Speicherung von irgendwelchen Daten simuliert und gesteuert.
  • Die Farbkanalprozessoren 1545, 1550, 1555 und 1560 führen die hauptsächlichen arithmetischen Operationen bei eingehenden Datenobjekten durch, wobei jeder von ihnen für einen der Kanäle des Ausgabedatenobjekts verantwortlich ist. Bei dem bevorzugten Ausführungsbeispiel ist die Anzahl von Farbkanalprozessoren auf 4 begrenzt, da die meisten Bildelementdatenobjekte maximal 4 Kanäle aufweisen.
  • Einer der Farbkanalprozessoren verarbeitet den Opazitätskanal eines Bildelements. Es sind mit dem Steuerungsbus 1471 verbundene zusätzliche Schaltungen (nicht in 131 gezeigt) vorhanden, die die Steuerungssignale von dem Steuerungsbus 1471 derart transformieren, dass der Farbkanalprozessor den Opazitätskanal richtig verarbeitet, da für einige Bildverarbeitungsoperationen die Operationen bei dem Opazitätskanal leicht von den Operationen bei den Farbkanälen verschieden sind.
  • 132 veranschaulicht den Farbkanalprozessor 1545, 1550, 1555 oder 1560 (in 132 allgemein durch 1600 bezeichnet) ausführlicher. Jeder Farbkanalprozessor 1545, 1550, 1555 oder 1560 weist einen Verarbeitungsblock A 1610, einen Verarbeitungsblock B 1615, einen Großaddierer (big adder) 1620, eine Bruchrundungseinrichtung (fraction rounder) 1625, eine Klemm- oder Umbruchseinrichtung (clamp-or-wrapper) 1630 und einen Ausgabemultiplexer 1635 auf. Der Farbkanalprozessor 1600 nimmt Steuerungssignale von dem Steuerungssignalregister 1470 über einen Bus 1602, Freigabesignale von der Pipelinesteuerungseinrichtung 1540 über einen Bus 1604, Informationen von der Registerdatei 1472 über einen Bus 1605, Datenobjekte von einem anderen Farbkanalprozessor über einen Bus 1603 und Datenobjekte von der Eingabeschnittstelle 1460 über einen Bus 1601 an.
  • Der Verarbeitungsblock A 1610 führt einige arithmetische Operationen bei den Datenobjekten von dem Bus 1601 durch und erzeugt teilweise berechnete Datenobjekte auf einem Bus 1611. Das Folgende veranschaulicht, was der Verarbeitungsblock A 1610 für bezeichnete Bildverarbeitungsoperationen tut.
  • Bei einer Zusammensetzung multipliziert der Verarbeitungsblock A 1610 Datenobjekte von dem Datenobjektbus 1451 mit der Opazität vor, interpoliert mit einem Interpolationsfaktor von der Eingabeschnittstelle 1460 in 129 zwischen einem Mischungsstartwert und einem Mischungsendwert, multipliziert Operanden von dem Operandenbus 1452 in 129 mit der Opazität vor oder multipliziert eine Mischungsfarbe mit der Opazität und dämpft die Multiplikation bei dem vormultiplizierten Operanden oder den Mischungsfarbdaten.
  • Bei einer allgemeinen Farbraumwandlung interpoliert der Verarbeitungsblock A 1610 unter Verwendung von zwei Bruchwerten von dem Bus 1451 in 129 zwischen 4 Farbtabellenwerten.
  • Bei einer affinen Bildtransformation und Faltung multipliziert der Verarbeitungsblock A 1610 die Farbe des Quellbildelements mit der Opazität vor und interpoliert unter Verwendung des Bruchteils der derzeitigen x-Koordinate zwischen Bildelementen in der gleichen Zeile.
  • Bei einer linearen Farbraumwandlung multipliziert der Verarbeitungsblock A 1610 die Farbe des Quellbildelements mit der Opazität vor und multipliziert die vormultiplizierten Farbdaten mit Wandlungsmatrixkoeffizienten.
  • Bei einer horizontalen Interpolation und vertikalen Interpolation interpoliert der Verarbeitungsblock R 1610 zwischen zwei Datenobjekten.
  • Bei einer Restverschmelzung addiert der Verarbeitungsblock A 1610 zwei Datenobjekte.
  • Der Verarbeitungsblock A 1610 weist eine Anzahl von Multifunktionsblöcken 1640 und eine Verarbeitungsblock-A-Klebelogik (processing block A glue logic) 1645 auf. Die Multifunktionsblöcke 1640 werden durch Steuerungssignale konfiguriert und können eine der folgenden Funktionen durchführen:
    zwei Datenobjekte addieren/subtrahieren;
    ein Datenobjekt durchleiten;
    mit einem Interpolationsfaktor zwischen zwei Datenobjekten interpolieren;
    eine Farbe mit einer Opazität vormultiplizieren;
    zwei Datenobjekte multiplizieren und daraufhin ein drittes Datenobjekt zu dem Produkt addieren; und
    zwei Datenobjekte addieren/subtrahieren und daraufhin die Summe/Differenz mit einer Opazität vormultiplizieren.
  • Die Register in den Multifunktionsblöcken 1640 werden durch durch die Pipelinesteuerungseinrichtung 1540 in 131 erzeugte Freigabesignale von dem Bus 1604 freigegeben oder gesperrt. Die Verarbeitungsblock-A-Klebelogik 1545 nimmt Datenobjekte von dem Bus 1601 und Datenobjekte von dem Bus 1603 sowie die Ausgaben von einigen der Multifunktionsblöcke 1640 an und leitet sie zu Eingängen von anderen ausgewählten Multifunktionsblöcken 1640. Die Verarbeitungsblock-A-Klebelogik 1645 wird ebenfalls durch Steuerungssignale von dem Bus 1602 konfiguriert.
  • Der Verarbeitungsblock B 1615 führt arithmetische Operationen bei den Datenobjekten von dem Bus 1601 und teilweise berechneten Datenobjekten von dem Bus 1611 durch, um teilweise berechnete Datenobjekte auf einem Bus 1616 zu erzeugen. Die folgende Beschreibung veranschaulicht, was der Verarbeitungsblock B 1615 für bezeichnete Bildverarbeitungsoperationen tut.
  • Bei einer Zusammensetzung (mit Nichtplusoperatoren (non-plus operators)) multipliziert der Verarbeitungsblock B 1615 vorverarbeitete Datenobjekte von dem Datenobjektbus 1451 und Operanden von dem Operandenbus 1452 mit Zusammensetzungsmultiplikanden von dem Bus 1603 und multipliziert geklemmte/umgebrochene Datenobjekte mit der Ausgabe des ROM, die 255/Opazität in dem Format 8.8 ist.
  • Bei einer Zusammensetzung mit einem Plusoperator addiert der Verarbeitungsblock B 1615 zwei vorverarbeitete Datenobjekte. Bei dem Opazitätskanal subtrahiert er auch 255 von der Summe, multipliziert einen Offset mit der Differenz und dividiert das Produkt durch 255.
  • Bei einer allgemeinen Farbraumwandlung interpoliert der Verarbeitungsblock B 1615 unter Verwendung von 2 der Bruchwerte von dem Bus 1451 zwischen 4 Farbtabellenwerten und interpoliert unter Verwendung des verbleibenden Bruchwerts zwischen einem teilweise interpolierten Farbwert von dem Verarbeitungsblock A 1610 und dem Ergebnis der vorhergehenden Interpolation.
  • Bei einer affinen Bildtransformation und Faltung interpoliert der Verarbeitungsblock B 1615 unter Verwendung des Bruchteils der derzeitigen y-Koordinate zwischen teilweise interpolierten Bildelementen und multipliziert interpolierte Bildelemente mit Koeffizienten in einer Unterabtastgewichtsmatrix.
  • Bei einer linearen Farbraumwandlung multipliziert der Verarbeitungsblock B 1615 die Farbe des Quellbildelements mit der Opazität vor und multipliziert die vormultiplizierte Farbe mit Wandlungsmatrixkoeffizienten.
  • Der Verarbeitungsblock B 1615 weist wieder eine Anzahl von Multifunktionsblöcken und eine Verarbeitungsblock-B-Klebelogik (processing block B glue logic) 1650 auf. Die Multifunktionsblöcke sind genau die gleichen wie die in dem Verarbeitungsblock A 1610, aber die Verarbeitungsblock-B-Klebelogik 1650 nimmt Datenobjekte von Bussen 1601, 1603, 1611, 1631 und die Ausgaben von ausgewählten Multifunktionsblöcken an und leitet sie zu den Eingängen von ausgewählten Multifunktionsblöcken. Die Verarbeitungsblock-B-Klebelogik 1650 wird ebenfalls durch Steuerungssignale von dem Bus 1602 konfiguriert.
  • Der Großaddierer 1620 ist für ein Kombinieren von einigen der Teilergebnisse von dem Verarbeitungsblock A 1610 und dem Verarbeitungsblock B 1615 verantwortlich. Er nimmt Eingaben von der Eingabeschnittstelle 1460 über den Bus 1601, dem Verarbeitungsblock A 1610 über den Bus 1611, dem Verarbeitungsblock B 1615 über den Bus 1616 und der Registerdatei 1472 über den Bus 1605 an, und er erzeugt das kombinierte Ergebnis auf einem Bus 1621. Er wird ebenfalls durch Steuerungssignale auf dem Bus 1602 konfiguriert.
  • Für verschiedene Bildverarbeitungsoperationen kann der Großaddierer 1620 verschieden konfiguriert werden. Die folgende Beschreibung veranschaulicht seinen Betrieb während bezeichneter Bildverarbeitungsoperationen.
  • Bei einer Zusammensetzung mit Nichtplusoperatoren addiert der Großaddierer 1620 zwei Teilprodukte von dem Verarbeitungsblock B 1615.
  • Bei einer Zusammensetzung mit Plusoperatoren subtrahiert der Großaddierer 1620 die Summe von vorverarbeiteten Datenobjekten mit Offset von dem Opazitätskanal, falls eine Offsetfreigabe eingeschaltet ist.
  • Bei einer affinen Bildtransformation/Faltung sammelt der Großaddierer 1620 die Produkte von dem Verarbeitungsblock B 1615 an.
  • Bei einer linearen Farbraumwandlung addiert der Großaddierer in dem ersten Zyklus die zwei Matrixkoeffizienten/Datenobjektprodukte und den konstanten Koeffizienten. In dem zweiten Zyklus addiert er weitere zwei Matrixkoeffizienten/Datenobjektprodukte zu der Summe des letzten Zyklus.
  • Die Bruchrundungseinrichtung 1625 nimmt Eingaben von dem Großaddierer 1620 über den Bus 1621 an und rundet den Bruchteil der Ausgabe. Die Anzahl von den Bruchteil darstellenden Bits wird durch ein Signal BP auf dem Bus 1605 von der Registerdatei 1472 beschrieben. Die folgende Tabelle zeigt, wie. das Signal BP interpretiert wird. Die gerundete Ausgabe wird auf einem Bus 1626 bereitgestellt.
  • Tabelle 8: Bruchtabelle
    Figure 01500001
  • Figure 01510001
  • Ebenso gut wie den Bruch zu runden tut die Bruchrundungseinrichtung 1625 zwei Dinge:
    • 1) bestimmt, ob der gerundete Wert negativ ist; und
    • 2) bestimmt, ob der Absolutwert des gerundeten Ergebnisses größer als 255 ist.
  • Die Klemm- oder Umbruchseinrichtung 1630 nimmt Eingaben von der Bruchrundungseinrichtung 1625 über den Bus 1626 an und tut das Folgende in der beschriebenen Reihenfolge:
    findet den Absolutwert des gerundeten Ergebnisses, falls eine derartige Option freigegeben ist; und
    klemmt eine Bereichsunterschreitung des Datenobjekts auf den minimalen Wert des Datenobjekts und eine Bereichsüberschreitung des Datenobjekts auf den maximalen Wert des Datenobjekts fest.
  • Der Ausgabemultiplexer 1635 wählt die endgültige Ausgabe aus der Ausgabe des Verarbeitungsblocks B auf dem Bus 1616 und der Ausgabe der Klemm- oder Umbruchseinrichtung auf dem Bus 1631 aus. Er führt auch eine endgültige Verarbeitung bei dem Datenobjekt durch. Die folgende Beschreibung veranschaulicht seinen Betrieb für bezeichnete Bildverarbeitungsoperationen.
  • Bei einer Zusammensetzung mit Nichtplusoperatoren und Entvormultiplikation (un-pre-multiplication) kombiniert der Multiplexer 1635 einige der Ausgaben des Verarbeitungsblocks B 1615 zum Ausbilden des entvormultiplizierten Datenobjekts.
  • Bei einer Zusammensetzung mit Nichtplusoperator und ohne Entvormultiplikation gibt der Multiplexer 1635 die Ausgabe der Klemm- oder Umbruchseinrichtung 1630 weiter.
  • Bei einer Zusammensetzung mit Plusoperator kombiniert der Multiplexer 1635 einige der Ausgaben des Verarbeitungsblocks B 1630 zum Ausbilden eines sich ergebenden Datenobjekts.
  • Bei einer allgemeinen Farbraumwandlung wendet der Multiplexer 1635 die Funktion Übersetzen-und-Klemmen (translate-and-clamp) auf das Ausgabedatenobjekt an.
  • Bei anderen Operationen gibt der Multiplexer 1635 die Ausgabe der Klemm- oder Umbruchseinrichtung 1630 weiter.
  • 133 veranschaulicht einen einzelnen Multifunktionsblock (zum Beispiel 1640) ausführlicher. Der Multifunktionsblock 1640 weist eine Betriebsarterfassungseinrichtung 1710, zwei Additionsoperandenlogikeinheiten 1660 und 1670, drei Multiplexlogikeinheiten 1680, 1685 und 1690, einen Zwei-Eingaben-Addierer 1675, einen Zwei-Eingaben-Multiplizierer mit zwei Addenden 1695 und ein Register 1705 auf.
  • Die Betriebsarterfassungseinrichtung 1710 nimmt eine Eingabe von dem Steuerungssignalregister 1470 in 129, das Signal BETRIEBSART 1711, und zwei Eingaben von der Eingabeschnittstelle 1460 in 129, das Signal SUB 1712 und das Signal WECHSEL 1713, an. Die Betriebsarterfassungseinrichtung 1710 decodiert diese Signale in zu den Additionsoperandenlogikeinheiten 1660 und 1670 und den Multiplexlogikeinheiten 1680, 1685 und 1690 gehende Steuerungssignale, und diese Steuerungssignale konfigurieren den Multifunktionsblock 1640 zum Durchführen verschiedener Operationen. Bei dem Multifunktionsblock 1640 sind 8 Betriebsarten vorhanden:
    • 1) Additions-/Subtraktionsbetriebsart: addiert oder subtrahiert eine Eingabe 1655 gemäß dem Signal SUB 1712 zu/von einer Eingabe 1665. Ferner können die Eingaben gemäß dem Signal WECHSEL 693 gewechselt werden.
    • 2) Umleitungsbetriebsart: leitet die Eingabe 1655 zu der Ausgabe um.
    • 3) Interpolationsbetriebsart: interpoliert unter Verwendung einer Eingabe 1675 als den Interpolationsfaktor zwischen den Eingaben 1655 und 1665. Die Eingaben 1655 und 1665 können gemäß dem Signal WECHSEL 1713 gewechselt werden.
    • 4) Vormultiplikationsbetriebsart: multipliziert die Eingabe 1655 mit der Eingabe 1675 und dividiert sie durch 255. Die Ausgabe des ERH-Registers (INC register) 1708 sagt der nächsten Stufe, ob das Ergebnis dieser Stufe in einem Bus 1707 zu erhöhen ist, um das richtige Ergebnis zu erhalten.
    • 5) Multiplikationsbetriebsart: multipliziert die Eingabe 1655 mit 1675.
    • 6) Additions-/Subtraktions- und Vormultiplikationsbetriebsart: addiert/subtrahiert die Eingabe 1665 zu/von der Eingabe 1655, multipliziert die Summe/Differenz mit der Eingabe 1675 und dividiert daraufhin das Produkt durch 255. Die Ausgabe des ERH-Registers 1708 sagt der nächsten Stufe, ob das Ergebnis dieser Stufe in dem Bus 1707 zu erhöhen ist, um das richtige Ergebnis zu erhalten.
  • Die Additionsoperandenlogikeinheiten 1660 und 1670 finden auf Verlangen das Einserkomplement der Eingabe, so dass der Addierer ebenso eine Subtraktion durchführen kann. Der Addierer 1675 addiert die Ausgaben der Additionsoperandenlogiken 1660 und 1670 in Bussen 1662 und 1672 und gibt die Summe in einem Bus 1677 aus.
  • Die Multiplexlogiken 1680, 1685 und 1690 wählen geeignete Multiplikanden und Addenden zum Realisieren einer gewünschten Funktion aus. Sie werden alle durch Steuerungssignale von der Betriebsarterfassungseinrichtung 1710 auf einem Bus 1714 konfiguriert.
  • Der Multiplizierer mit zwei Addenden 1695 multipliziert eine Eingabe von dem Bus 1677 mit einer Eingabe von einem Bus 1682 und addiert daraufhin das Produkt zu der Summe von Eingaben von Bussen 1687 und 1692.
  • Der Addierer 1700 addiert die niedrigstwertigen 8 Bits der Ausgabe von dem Multiplizierer 1695 zu den höchstwertigen 8 Bits der Ausgabe von dem Multiplizierer 1695. Der Übertrag des Addierers 1700 wird in dem ERH-Register 1701 zwischengespeichert. Das ERH-Register 1701 wird durch ein Signal 1702 freigegeben. Das Register 1705 speichert das Produkt von dem Multiplizierer 1695. Es wird ebenfalls durch das Signal 1702 freigegeben.
  • 134 veranschaulicht ein Blockschaltbild für die Zusammensetzungsoperationen. Die Zusammensetzungsoperation nimmt drei Eingabeströme von Daten an:
    • 1) Die angesammelten Bildelementdaten, die von der gleichen Stelle wie der, wo das Ergebnis bei diesem Ansammlungseinrichtungsmodell gespeichert wird, abgeleitet werden.
    • 2) Ein Zusammensetzungsoperand – der aus Farbe und Opazität besteht. Die Farbe und die Opazität können beide entweder flach (flat), eine Mischung, Bildelemente oder gekachelt (tiled) sein.
    • 3) Dämpfung – die die Operandendaten dämpft. Die Dämpfung kann flach, eine Bitmaske oder eine Bytemaske sein.
  • Bildelementdaten bestehen typischerweise aus vier Kanälen. Drei dieser Kanäle bilden die Farbe des Bildelements. Der verbleibende Kanal ist die Opazität des Bildelements. Bildelementdaten können vormultipliziert oder normal sein. Wenn Bildelementdaten vormultipliziert sind, ist jeder der Farbkanäle mit der Opazität multipliziert. Da Gleichungen für Zusammensetzungsoperatoren mit vormultiplizierten Bildelementen einfach sind, werden üblicherweise die Bildelementdaten vormultipliziert, bevor sie mit einem anderen Bildelement zusammengesetzt werden.
  • Die bei dem bevorzugten Ausführungsbeispielen realisierten Zusammensetzungsoperatoren sind in der Tabelle 1 gezeigt. Jeder Operator arbeitet auf vormultiplizierten Daten. (aCO, aO) bezieht sich auf ein vormultipliziertes Bildelement der Farbe aC und der Opazität aO, r ist der "Offset"-Wert, und wc() ist der Klemm-/Umbruchsoperator, der Umkehrungsoperator jedes der Operatoren over, in, out, atop in der Tabelle 1 ist ebenfalls realisiert, und das Zusammensetzungsmodell weist die Ansammlungseinrichtung auf der linken Seite auf.
  • Ein Zusammensetzungsblock 1760 in 134 umfasst drei Farbunterblöcke und einen Opazitätsunterblock. Jeder Farbunterblock arbeitet auf einem Farbkanal und dem Opazitätskanal der Eingabebildelemente, um die Farbe des Ausgabebildelements zu erhalten. Der folgende Pseudocode zeigt, wie dies getan wird.
  • Figure 01560001
  • Figure 01570001
  • Der vorstehende Pseudocode ist für den Opazitätsunterblock anders, da die Operatoren 'loade' und 'loado' bei dem Opazitätskanal eine andere Bedeutung haben.
  • Ein Block 1765 in 134 ist für ein Klemmen oder Umbrechen der Ausgabe des Blocks 1760 verantwortlich. Wenn der Block 1765 zum Klemmen konfiguriert wird, zwingt er alle Werte kleiner als der minimale zulässige Wert auf den minimalen zulässigen Wert und alle Werte größer als der maximale zulässige Wert auf den maximalen zulässigen Wert. Wenn der Block 1765 zum Umbrechen konfiguriert wird, berechnet er die folgende Gleichung: ((x – min) mod (max – min)) + min,wobei min und max jeweils der minimale und maximale zulässige Wert der Farbe sind. Vorzugsweise ist der minimale Wert für eine Farbe 0, und der maximale Wert ist 255.
  • Ein Block 1770 in 134 ist für ein Entvormultiplizieren (un-pre-multiplying) des Ergebnisses von dem Block 1765 verantwortlich. Er führt eine Entvormultiplikation eines Bildelements durch, indem er den vormultiplizierten Farbwert mit 255/o multipliziert, wobei o die Opazität nach der Zusammensetzung ist. Der Wert 255/o wird von einem ROM innerhalb der Zusammensetzungseinrichtung erhalten. Der in dem ROM gespeicherte Wert liegt in dem Format von 8.8 vor, und der Rest des Bruchs wird gerundet. Das Ergebnis der Multiplikation wird in dem Format von 16.8 gespeichert. Das Ergebnis würde auf 8 Bits gerundet werden, um das entvormultiplizierte Bildelement zu erzeugen.
  • Eine Mischungserzeugungseinrichtung 1721 erzeugt eine Mischung einer bestimmten Länge mit einem bestimmten Start- und Endwert. Die Mischungserzeugung wird in zwei Stufen durchgeführt:
    • 1) Rampenerzeugung, und
    • 2) Interpolation
  • Bei der Rampenerzeugung erzeugt die Zusammensetzungseinrichtung eine linear zunehmende Zahlensequenz von 0 bis 255 über die Länge der Anweisung. Es sind zwei Betriebsarten bei der Rampenerzeugung vorhanden: die "Sprung"-Betriebsart, wenn die Länge kleiner als oder gleich 255 ist, und die "Schritt"-Betriebsart, wenn die Länge größer als 255 ist. Die Betriebsart wird durch ein Untersuchen der 24 höchstwertigen Bits der Länge bestimmt. In der Sprungbetriebsart nimmt der Rampenwert in jeder Taktperiode um mindestens eins zu. In der Schrittbetriebsart nimmt der Rampenwert in jeder Taktperiode um höchstens eins zu.
  • In der Sprungbetriebsart verwendet die Zusammensetzungseinrichtung das ROM zum Herausfinden des Schrittwerts 255/(Länge – 1) in dem Format 8.8. Dieser Wert wird daraufhin zu einer 16-Bit-Ansammlungseinrichtung addiert. Die Ausgabe der Ansammlungseinrichtung wird auf 8 Bits gerundet, um die Zahlensequenz auszubilden. In der Schrittbetriebsart verwendet die Zusammensetzungseinrichtung einen dem Bresenham-Linienzeichnungsalgorithmus ähnlichen Algorithmus, wie er durch den folgenden Pseudocode beschrieben wird.
  • Figure 01590001
  • Danach wird die folgende Gleichung zum Erzeugen der Mischung aus der Rampe berechnet. Mischung = ((Ende – Start) × Rampe/255) + Start
  • Die Division durch 255 wird gerundet. Die vorstehende Gleichung benötigt 2 Addierer und einen Block, der (Ende-Start) mit Rampe "vormultipliziert", für jeden Kanal.
  • Eine andere Bildverarbeitungsoperation, die die Hauptdatenwegeinheit 242 durchführen kann, ist eine allgemeine Farbraumwandlung. Eine verallgemeinerte Farbraumwandlung (GCSC) verwendet eine stückweise trilineare Interpolation zum Herausfinden des Ausgabefarbwerts. Vorzugsweise findet die Wandlung von einem dreidimensionalen Eingaberaum in einen eindimensionalen oder vierdimensionalen Ausgaberaum statt.
  • In einigen Fällen ist ein Problem mit der Genauigkeit der trilinearen Interpolation an den Rändern des Farbumfangs vorhanden. Dieses Problem ist bei Druckvorrichtungen, die nahe an dem Rand des Umfangs eine hohe Empfindlichkeit aufweisen, am auffälligsten. Zum Überwinden dieses Problems kann die GCSC optional in einem erweiterten Ausgabefarbraum berechnet und daraufhin unter Verwendung der Formel in der Gleichung:
    Figure 01600001
    skaliert und auf den passenden Bereich festgeklemmt werden.
  • Noch andere Bildverarbeitungsoperationen, die das bevorzugte Ausführungsbeispiel durchführen kann, sind eine Bildtransformation und Faltung. Bei einer Bildtransformation wird das Quellbild skaliert, gedreht oder schräg gestellt, um das Zielbild auszubilden. Bei einer Faltung werden die Quellbild-Bildelemente mit einer Faltungsmatrix abgetastet, um das Zielbild bereitzustellen. Zum Aufbauen einer Abtastzeile in dem Zielbild sind die folgenden Schritte erforderlich:
    • 1) Eine inverse Transformation der Abtastzeile in dem Zielbild zurück zu dem Quellbild wie in 135 veranschaulicht durchführen. Dies sagt, welche Bildelemente in dem Quellbild zum Aufbauen der Abtastzeile in dem Zielbild benötigt werden.
    • 2) Die notwendigen Abschnitte des Quellbilds dekomprimieren.
    • 3) Die Start-x- und -y-Koordinaten, horizontalen und vertikalen Unterabtastungsabstände in dem Zielbild zurück zu dem Quellbild invers transformieren.
    • 4) Alle diese Informationen zu den Verarbeitungseinheiten leiten, die die notwendige Unterabtastung und/oder Interpolation zum Aufbauen des Ausgabebilds Bildelement für Bildelement durchführen.
  • Die Berechnungen zum Ausrechnen, welche Teile des Quellbilds relevant sind, welche Unterabtastungsfrequenzen zu verwenden sind etc. werden durch die Hostanwendung durchgeführt. Die Unterabtastung, die Interpolation und das Schreiben der Bildelemente in den Zielbildspeicher werden durch die bevorzugten Ausführungsbeispiele durchgeführt.
  • 136 zeigt ein Blockschaltbild der zum Berechnen des Werts für ein Zielbildelement erforderlichen Schritte. Im Allgemeinen ist die bilineare Interpolation der rechenintensive Teil. Das Blockschaltbild in 136 nimmt an, dass alle die notwendigen Quellbild-Bildelemente verfügbar sind.
  • Der letzte Schritt bei dem Berechnen eines Zielbildelements besteht darin, alle die möglicherweise bilinear interpolierten Unterabtastwerte aus dem Quellbild zu addieren. Diesen Werten werden verschiedene Gewichte zugewiesen.
  • 137 veranschaulicht ein Blockschaltbild der Bildtransformationseinrichtung, die aus geeigneten Einstellungen in der Hauptdatenwegeinheit 242 abgeleitet werden kann. Eine Bildtransformationseinrichtung 1830 weist eine Adresserzeugungseinrichtung 1831, einen Vormultiplizierer 1832, eine Interpolationseinrichtung 1833, eine Ansammlungseinrichtung 1834 und eine Logik zum Runden, Klemmen und Finden des Absolutwerts 1835 auf.
  • Die Adresserzeugungseinrichtung 1831 ist für ein Erzeugen von x- und y-Koordinaten des Quellbilds, die zum Aufbauen eines Zielbildelements benötigt werden, verantwortlich. Sie erzeugt auch Adressen zum Erhalten von Indexoffsets aus einer Eingabeindextabelle 1815 und Bildelementen aus einem Bild 1810. Bevor die Adresserzeugungseinrichtung 1831 beginnt, x- und y-Koordinaten in dem Quellbild zu erzeugen, liest sie einen Kerndeskriptor ein. Es sind zwei Formate von Kerndeskriptoren vorhanden. Sie sind in 138 gezeigt. Der Kerndeskriptor beschreibt:
    • 1) Quellbildstartkoordinaten (vorzeichenlose Festpunktwerte, Auflösung 24.24). Die Lage (0, 0) ist an der obersten linken Seite des Bilds.
    • 2) Horizontale und vertikale Unterabtastdeltas (Festpunktzweierkomplement, Auflösung 24.24).
    • 3) Ein 3-Bit-Feld bp, das die Lage des Binärpunkts in den Festpunktmatrixkoeffizienten definiert. Die Definition und Interpretation des Felds bp sind in 150 gezeigt.
    • 4) Ansammlungsmatrixkoeffizienten. Diese weisen eine Auflösung mit "variablem" Punkt von 20 Binärstellen (Zweierkomplement) auf, wobei die Lage des Binärpunkts implizit durch das Feld bp bestimmt wird.
    • 5) Ein Feld rl, das die verbleibende Anzahl von Wörtern in dem Kerndeskriptor angibt. Dieser Wert ist gleich der Anzahl von Zeilen mal der Anzahl von Spalten minus 1.
  • Für den kurzen Kerndeskriptor wird abgesehen von dem Ganzzahlteil der Start-x-Koordinate angenommen, dass die anderen Parameter die folgenden Werte aufweisen:
    Start-x-Koordinate-Bruchteil < –0,
    Start-y-Koordinate < –0,
    horizontales Delta < –1, 0,
    vertikales Delta < –1, 0.
  • Nachdem die Adresserzeugungseinrichtung 1831 konfiguriert ist, berechnet sie die derzeitigen Koordinaten. Sie tut dies abhängig von den Dimensionen der Unterabtastmatrix auf zwei verschiedenen Wegen. Falls die Dimensionen der Unterabtastmatrix 1 × 1 sind, addiert die Adresserzeugungseinrichtung 1831 das horizontale Delta zu den derzeitigen Koordinaten, bis sie genug Koordinaten erzeugt hat.
  • Falls die Dimensionen der Unterabtastmatrix nicht 1 × 1 sind, addiert die Adresserzeugungseinrichtung 1831 das horizontale Delta zu den derzeitigen Koordinaten, bis eine Zeile der Matrix beendet ist. Danach addiert die Adresserzeugungseinrichtung 1831 das vertikale Delta zu den derzeitigen Koordinaten, um die Koordinaten in der nächsten Zeile zu finden. Danach subtrahiert die Adresserzeugungseinrichtung 1831 das horizontale Delta zum Finden der nächsten Koordinaten von den derzeitigen Koordinaten, bis noch eine Zeile beendet ist. Danach addiert die Adresserzeugungseinrichtung 1831 das vertikale Delta zu den derzeitigen Koordinaten, und die Prozedur wird wieder wiederholt. Die oberste graphische Darstellung in 150 veranschaulicht dieses Verfahren zum Zugreifen auf die Matrix. Unter Verwendung dieses Schemas wird die Matrix auf einem Zickzackweg durchlaufen, und weniger Register sind erforderlich, da die derzeitigen x- und y-Koordinaten unter Verwendung des vorstehenden Verfahrens berechnet werden, wobei die Ansammlungsmatrixkoeffizienten in der gleichen Reihenfolge in dem Kerndeskriptor aufgelistet sein müssen.
  • Nach dem Erzeugen der derzeitigen Koordinaten addiert die Adresserzeugungseinrichtung 1831 die y-Koordinate zu der Indextabellenbasisadresse, um die Adresse für die Indextabelle zu bekommen. (In dem Fall, in dem Quellbildelemente interpoliert werden, muss die Adresserzeugungseinrichtung 1831 ebenso den nächsten Indextabelleneintrag erhalten.) Die Indextabellenbasisadresse sollte auf den Indextabelleneintrag für y + 0 zeigen. Nach dem Erhalten des Indexoffsets aus der Indextabelle addiert die Adresserzeugungseinrichtung 1831 ihn zu der x-Koordinate. Die Summe wird zum Bekommen von 1 Bildelement aus dem Quellbild (oder 2 Bildelementen, falls Quellbildelemente interpoliert werden) verwendet. In dem Fall, in dem Quellbildelemente interpoliert werden, addiert die Adresserzeugungseinrichtung 1831 die x-Koordinaten zu dem nächsten Indexoffset, und noch zwei Bildelemente werden erhalten.
  • Eine Faltung verwendet ein ähnliches Verfahren zum Erzeugen von Koordinaten wie eine Bildtransformation. Der einzige Unterschied besteht darin, dass bei der Faltung die Startkoordinaten der Matrix für das nächste Ausgabebildelement ein horizontales Delta von den Startkoordinaten der Matrix für das vorhergehende Bildelement entfernt sind. Bei der Bildtransformation sind die Startkoordinaten der Matrix für das nächste Bildelement ein horizontales Delta von den Koordinaten des obersten rechten Bildelements in der Matrix für das vorhergehende Ausgabebildelement entfernt.
  • Die mittleren graphischen Darstellungen in 139 veranschaulichen diesen Unterschied.
  • Der Vormultiplizierer 1832 multipliziert die Farbkanäle bei Bedarf mit dem Opazitätskanal des Bildelements.
  • Die Interpolationseinrichtung 1832 interpoliert zwischen Quellbildelementen, um die wahre Farbe des erforderlichen Bildelements zu finden. Sie bekommt zu jeder Zeit zwei Bildelemente aus dem Quellbildspeicher. Daraufhin interpoliert sie unter Verwendung des Bruchteils der derzeitigen x-Koordinate zwischen den zwei Bildelementen und legt das Ergebnis in ein Register. Danach erhält sie die zwei Bildelemente in der nächsten Zeile aus dem Quellbildspeicher. Daraufhin interpoliert sie unter Verwendung des gleichen x-Bruchteils zwischen den zwei Bildelementen. Danach verwendet die Interpolationseinrichtung 1833 den Bruchteil der derzeitigen y-Koordinaten zum Interpolieren zwischen diesem interpolierten Ergebnis und dem letzten interpolierten Ergebnis.
  • Die Ansammlungseinrichtung 1834 tut zwei Dinge:
    • 1) sie multipliziert die Matrixkoeffizienten mit dem Bildelement, und
    • 2) sie sammelt das vorstehende Produkt an, bis die ganze Matrix durchlaufen ist. Daraufhin gibt sie einen Wert zu der nächsten Stufe aus.
  • Vorzugsweise kann die Ansammlungseinrichtung 1834 mit 0 oder einem speziellen Wert auf einer Kanal-für-Kanal-Grundlage initialisiert werden.
  • Der Block 1835 rundet die Ausgabe der Ansammlungseinrichtung 1834, klemmt daraufhin bei Bedarf irgendwelche Bereichsunterschreitungen oder Bereichsüberschreitungen auf die maximalen und minimalen Werte fest und findet bei Bedarf den Absolutwert der Ausgabe. Die Lage des Binärpunkts in der Ausgabe der Ansammlungseinrichtung wird durch das Feld bp in dem Kerndeskriptor bestimmt. Das Feld bp gibt die Anzahl von zu verwerfenden führenden Bits in dem angesammelten Ergebnis an. Dies ist in der untersten graphischen Darstellung gemäß 139 gezeigt. Es ist zu beachten, dass der angesammelte Wert als eine vorzeichenbehaftete Zweierkomplementzahl behandelt wird.
  • Noch eine andere Bildverarbeitungsoperation, die die Hauptdatenwegeinheit 242 durchführen kann, ist eine Matrixmultiplikation. Eine Matrixmultiplikation wird zur Farbraumwandlung verwendet, wenn eine affine Beziehung zwischen den zwei Räumen vorhanden ist. Dies ist von der (auf einer trilinearen Interpolation basierenden) allgemeinen Farbraumwandlung verschieden.
  • Das Ergebnis der Matrixmultiplikation wird durch die folgende Gleichung definiert:
    Figure 01660001
    wobei ri das Ergebnisbildelement ist und ai das Operand-A-Bildelement ist. Die Matrix muss 5 Spalten mal 4 Zeilen aufweisen.
  • 140 veranschaulicht ein Blockschaltbild der Multiplizierer-Addierer, die die Matrixmultiplikation in der Hauptdatenwegeinheit 242 durchführen. Es enthält Multiplizierer zum Multiplizieren der Matrixkoeffizienten mit den Bildelementkanälen, Addierer zum Addieren der Produkte und eine Logik zum Klemmen und Finden des Absolutwerts der Ausgabe bei Bedarf.
  • Die vollständige Matrixmultiplikation braucht 2 Taktzyklen zum Abschließen. In jedem Zyklus werden die Multiplexer anders konfiguriert, um die richtigen Daten für die Multiplizierer und Addierer auszuwählen.
  • In einem Zyklus 0 werden die niedrigstwertigen 2 Bytes des Bildelements durch die Multiplexer 1851, 1852 ausgewählt. Sie multiplizieren daraufhin die Koeffizienten in den linken 2 Spalten der Matrix, das heißt die Matrixkoeffizienten in der Zeile 0 in dem Cache. Die Ergebnisse der Multiplikation und der konstante Ausdruck in der Matrix werden daraufhin addiert und gespeichert.
  • In einem Zyklus 1 werden die höherwertigen 2 Bytes des Bildelements durch die obersten Multiplexer ausgewählt. Sie multiplizieren daraufhin die Koeffizienten in den rechten 2 Spalten der Matrix.
  • Das Ergebnis der Multiplikation wird daraufhin zu dem Ergebnis des letzten Zyklus addiert 1854. Die Summe des Addierers wird daraufhin auf 8 Bits gerundet 1855.
  • Die 'Operandenlogik' 1856 ordnet die Ausgaben der Multiplizierer zum Ausbilden von vier der Eingaben des Addierers 1854 neu an. Sie ordnet die Ausgaben der Multiplizierer neu an, so dass sie addiert werden können, um das wahre Produkt des 24-Bit-Koeffizienten und der 8-Bit-Bildelementkomponente auszubilden.
  • Die 'AC-Logik (Absolutwert-Klemm-/Umbruchslogik)' 1855 rundet zuerst die untersten 12 Bits der Addiererausgabe. Sie findet daraufhin den Absolutwert des gerundeten Ergebnisses, falls sie dazu eingestellt ist. Gemäß dem, wie sie eingerichtet ist, klemmt sie danach das Ergebnis oder bricht es um. Falls die 'AC-Logik' zum Klemmen eingestellt ist, zwingt sie alle Werte kleiner als 0 auf 0 und alle Werte größer als 255 auf 255. Falls die 'AC-Logik' zum Umbrechen eingestellt ist, werden die unteren 8 Bits des Ganzzahlteils zu der Ausgabe geleitet.
  • Abgesehen von den vorstehenden Bildverarbeitungsoperationen kann die Hauptdatenwegeinheit 242 zum Durchführen anderer Operationen konfiguriert werden.
  • Die vorhergehende Beschreibung stellt eine Computerarchitektur bereit, die zum Durchführen von verschiedenen Bildverarbeitungsoperationen mit hoher Geschwindigkeit in der Lage ist, während die Kosten durch eine Entwurfswiederverwendung verringert werden. Die Computerarchitektur ist auch sehr flexibel, was es einem externen Programmieragenten mit gründlichen Kenntnissen der Architektur erlaubt, sie zum Durchführen von Bildverarbeitungsoperationen, die anfänglich nicht erwartet wurden, zu konfigurieren. Da der Kern des Entwurfs hauptsächlich eine Anzahl der Multifunktionsblöcke umfasst, wird die Entwurfsmühe deutlich verringert.
  • 3.16.6 Daten-Cache-Steuerungseinrichtung und Cache
  • Die Daten-Cache-Steuerungseinrichtung 240 unterhält einen 4-Kilobyte-Lesedaten-Cache 230 in dem Coprozessor 224. Der Daten-Cache 230 ist als ein direkt abbildender RAM-Cache ausgelegt, wobei jede Zeile einer Gruppe von Zeilen der gleichen Länge in externem Speicher direkt auf die gleiche Zeile der gleichen Länge in dem Cache-Speicher 230 (2) abgebildet werden kann. Auf diese Zeile in dem Cache-Speicher wird gewöhnlich als eine Cache-Zeile Bezug genommen. Der Cache-Speicher umfasst eine Vielzahl von derartigen Cache-Zeilen.
  • Die Daten-Cache-Steuerungseinrichtung 240 arbeitet Datenanforderungen von den zwei Operandenorganisationseinrichtungen 247, 248 ab. Sie überprüft zuerst, um zu sehen, ob sich die Daten in dem Cache 230 befinden. Falls dem nicht so ist, werden Daten aus externem Speicher abgerufen. Die Daten-Cache-Steuerungseinrichtung 240 weist eine programmierbare Adresserzeugungseinrichtung auf, die es der Daten-Cache-Steuerungseinrichtung 240 ermöglicht, in einer Anzahl von verschiedenen Adressierungsbetriebsarten zu arbeiten. Es sind auch spezielle Adressierungsbetriebsarten vorhanden, wo die Adresse der angeforderten Daten durch die Daten-Cache-Steuerungseinrichtung 240 erzeugt wird. Die Betriebsarten können auch ein gleichzeitiges Zuführen von bis zu acht Wörtern (256 Bits) von Daten zu den Operandenorganisationseinrichtungen 247, 248 umfassen.
  • Das Cache-RAM ist als 8 getrennt adressierbare Speicherbänke organisiert. Dies wird für einige der speziellen Adressierungsbetriebsarten benötigt, wo Daten aus jeder Bank (die durch eine andere Zeilenadresse adressiert wird) wiedergewonnen und in 256 Bits gepackt werden. Diese Anordnung erlaubt es auch, bis zu acht 32-Bit-Anforderungen gleichzeitig abzuarbeiten, falls sie von verschiedenen Bänken kommen.
  • Der Cache arbeitet in den folgenden Betriebsarten, die später ausführlicher erörtert werden. Vorzugsweise ist es möglich, den ganzen Cache automatisch zu füllen, falls dies gewünscht ist.
    • 1. Normale Betriebsart
    • 2. Allgemeine Farbraumwandlungsbetriebsart mit Einzelausgabe (Single Output General Color Space Conversion Mode)
    • 3. Allgemeine Farbraumwandlungsbetriebsart mit Mehrfachausgabe (Multiple Output General Color Space Conversion Mode)
    • 4. JPEG-Codierungsbetriebsart
    • 5. Langsame JPEG-Decodierungsbetriebsart
    • 6. Matrixmultiplikationsbetriebsart
    • 7. Gesperrte Betriebsart
    • 8. Für-ungültig-erklären-Betriebsart
  • 141 zeigt den Adress-, Daten- und Steuerungsfluss der Daten-Cache-Steuerungseinrichtung 240 und des Daten-Cache 230, die in der 2 gezeigt sind.
  • Der Daten-Cache 230 besteht aus einem direkt abbildenden Cache des vorher erörterten Typs. Die Daten-Cache-Steuerungseinrichtung 240 besteht aus einem Identifizierungskennzeichenspeicher 1872 mit einem Identifizierungskennzeicheneintrag für jede Cache-Zeile, wobei der Identifizierungskennzeicheneintrag den höchstwertigen Teil der Adresse von externem Speicher, auf den die Cache-Zeile derzeit abgebildet ist, umfasst. Es ist auch ein Zeilengültigkeitsstatusspeicher 1873 zum Angeben, ob die derzeitige Cache-Zeile gültig ist, vorhanden. Alle Cache-Zeilen sind anfänglich ungültig.
  • Die Daten-Cache-Steuerungseinrichtung 240 kann Datenanforderungen von der Operandenorganisationseinrichtung B 247 (2) und der Operandenorganisationseinrichtung C 248 (2) gleichzeitig über die Operandenbusschnittstelle 1875 abfertigen. Im Betrieb führt eine oder führen beide der Operandenorganisationseinrichtungen 247 oder 248 (2) einen Index 1874 zu und macht oder machen ein Datenanforderungssignal 1876 geltend. Die Adresserzeugungseinrichtung 1881 erzeugt im Ansprechen auf den Index 1874 eine vollständige externe Adresse oder mehrere vollständige externe Adressen 1877. Eine Cache-Steuerungseinrichtung 1878 bestimmt, ob die angeforderten Daten in dem Cache 230 vorhanden sind, indem sie die Einträge des Identifizierungskennzeichenspeichers 1872 auf die Identifizierungskennzeichenadressen der erzeugten Adressen 1877 hin überprüft und den Zeilengültigkeitsstatusspeicher 1873 auf die Gültigkeit der relevanten Cache-Zeile (relevanten Cache-Zeilen) hin überprüft. Falls die angeforderten Daten in dem Cache-Speicher 230 vorhanden sind, wird der relevanten Operandenorganisationseinrichtung 247 oder 248 zusammen mit den angeforderten Daten 1880 ein Bestätigungssignal 1879 zugeführt. Falls die angeforderten Daten nicht in dem Cache 230 vorhanden sind, werden die angeforderten Daten 1870 über eine Eingabebusschnittstelle 1871 und den Eingabeschnittstellenschalter 252 (2) aus externem Speicher abgerufen. Die Daten 1870 werden abgerufen, indem ein Anforderungssignal 1882 geltend gemacht wird und die erzeugte Adresse (erzeugten Adressen) 1877 der angeforderten Daten 1870 zugeführt wird (werden). Ein Bestätigungssignal 1883 und die angeforderten Daten 1870 werden daraufhin zu der Cache-Steuerungseinrichtung 1878 bzw. dem Cache-Speicher 230 gesendet. Die relevante Cache-Zeile (relevanten Cache-Zeilen) des Cache-Speichers 230 wird (werden) daraufhin mit den neuen Daten 1870 aktualisiert. Die Identifizierungskennzeichenadressen der neuen Cache-Zeile (neuen Cache-Zeilen) werden auch in den Identifizierungskennzeichenspeicher 1872 geschrieben, und der Zeilengültigkeitsstatus 1873 für die neue Cache-Zeile (neuen Cache-Zeilen) wird geltend gemacht. Daraufhin wird ein Bestätigungssignal 1879 zusammen mit den Daten 1870 zu der relevanten Operandenorganisationseinrichtung 247 oder 248 (2) gesendet.
  • Nachstehend wird sich 142 zugewendet, die die Speicherorganisation des Daten-Caches 230 zeigt. Der Daten-Cache 230 ist als ein direkt abbildender Cache mit 128 Cache-Zeilen C0, ..., C127 und einer Länge der Cache-Zeile von 32 Bytes ausgelegt. Das Cache-RAM besteht aus 8 getrennt adressierbaren Speicherbänken B0, ..., B7, die jeweils 128 Bank-Zeilen von 32 Bits aufweisen, wobei jede Cache-Zeile Ci aus den entsprechenden 8 Bank-Zeilen B0i, ..., B7i der 8 Speicherbänke B0, ..., B7 besteht.
  • Die Zusammensetzung der erzeugten vollständigen Adresse von externem Speicher ist in 143 gezeigt. Die erzeugte Adresse ist ein 32-Bit-Wort mit einer 20-Bit-Identifizierungskennzeichenadresse, einer 7-Bit-Zeilenadresse, einer 3-Bit-Bankadresse und einer 2-Bit-Byteadresse. Die 20-Bit-Identifizierungskennzeichenadresse wird zum Vergleichen der Identifizierungskennzeichenadresse mit dem in dem Identifizierungskennzeichenspeicher 1872 gespeicherten Identifizierungskennzeichen verwendet. Die 7-Bit-Zeilenadresse wird zum Adressieren der relevanten Cache-Zeile in dem Cache-Speicher 1870 verwendet. Die 3-Bit-Bankadresse wird zum Adressieren der relevanten Bank der Speicherbänke des Cache-Speichers 1870 verwendet. Die 2-Bit-Byteadresse wird zum Adressieren des relevanten Bytes in der 32-Bit-Bank-Zeile verwendet.
  • Nachstehend wird sich 144 zugewendet, die ein Blockschaltbild des Aufbaus der Daten-Cache-Steuerungseinrichtung 240 und des Daten-Caches 230 zeigt. Bei diesem Aufbau bildet ein RAM von 128 mal 256 Bits den Cache-Speicher 230 und ist wie vorher besonders erwähnt als 8 getrennt adressierbare Speicherbänke von 128 mal 32 Bits organisiert. Dieses RAM weist einen gemeinsamen Schreibfreigabeanschluss (write), einen gemeinsamen Schreibadressanschluss (write_addr) und einen gemeinsamen Schreibdatenanschluss (write_data) auf. Das RAM weist auch einen Lesefreigabeanschluss (read), acht Leseadressanschlüsse (read_addr) und acht Lesedatenausgabeanschlüsse (read_data) auf. Durch den Cache-Steuerungseinrichtung-Block 1878 wird ein Schreibfreigabesignal zur Zuführung zu dem gemeinsamen Schreibfreigabeanschluss (write) zum gleichzeitigen Freigeben eines Schreibens in alle die Speicherbänke des Cache-Speichers 230 erzeugt. Bei Bedarf wird der Daten-Cache 230 über den gemeinsamen Schreibdatenanschluss (write_data) durch eine Zeile oder mehrere Zeilen von Daten aus externem Speicher aktualisiert. Eine Zeile von Daten wird unter Nutzung des 8:1-Multiplexers MUX geschrieben, der dem Schreibadressanschluss (write_addr) die Zeilenadresse zuführt. Der 8:1-Multiplexer MUX wählt unter der Steuerung der Daten-Cache-Steuerungseinrichtung (addr_select) die Zeilenadresse aus den erzeugten externen Adressen aus. Durch den Cache- Steuerungseinrichtung-Block 1878 wird ein Lesefreigabesignal zur Zuführung zu dem gemeinsamen Leseanschluss (read) zum gleichzeitigen Freigeben eines Lesens aller der Speicherbänke des Cache-Speichers 230 erzeugt. Auf diese Weise können im Ansprechen auf an den acht Leseadressanschlüssen (read_addr) der Speicherbänke des Cache-Speichers 230 zugeführte jeweilige Zeilenadressen acht verschiedene Bank-Zeilen von Daten gleichzeitig aus acht Lesedatenanschlüssen (read_data) gelesen werden.
  • Jede Bank des Cache-Speichers 230 weist ihre eigene programmierbare Adresserzeugungseinrichtung 1881 auf. Dies erlaubt es, gleichzeitig auf acht verschiedene Stellen aus den jeweiligen acht Bänken von Speicher zuzugreifen. Jede Adresserzeugungseinrichtung 1881 weist einen Eingang dcc-mode (dcc-Betriebsart) zum Einstellen der Betriebsart der Adresserzeugungseinrichtung 1881, einen Eingang index-packet (Indexpaket), einen Eingang base-address (Basisadresse) und einen Ausgang address (Adresse) auf. Die Betriebsarten der programmierbaren Adresserzeugungseinrichtung 1881 umfassen
    • (a) Eine Zufallszugriffsbetriebsart, in der ein Signal an dem Eingang dcc-mode jeder Adresserzeugungseinrichtung 1881 auf die Zufallszugriffsbetriebsart eingestellt und eine vollständige Adresse (vollständige Adressen) von externem Speicher an dem Eingang (den Eingängen) index-packet zugeführt und an dem Ausgang address von einer oder mehreren der Adresserzeugungseinrichtungen 1881 ausgegeben wird (werden); und
    • (b) JPEG-Codierungs- und -Decodierungs-, Farbraumwandlungs- und Matrixmultiplikationsbetriebsarten, in denen ein Signal an dem Eingang dcc-mode jede Adresserzeugungseinrichtung 1881 auf die passende Betriebsart einstellt. In diesen Betriebsarten empfängt jede Adresserzeugungseinrichtung 1881 einen Index an dem Eingang index-packet und erzeugt eine Indexadresse. Die Indexadressen werden daraufhin zu einer an dem Eingang base-address zugeführten festen Basisadresse addiert, was zu einer vollständigen Adresse von externem Speicher führt, die daraufhin an dem Ausgang address ausgegeben wird. Abhängig von der Betriebsart können die Adresserzeugungseinrichtungen bis zu acht verschiedene vollständige Adressen von externem Speicher erzeugen.
  • Die acht Adresserzeugungseinrichtungen 1881 bestehen aus acht verschiedenen kombinatorischen Logikschaltungen, die jeweils eine Basisadresse, eine dcc-Betriebsart und einen Index als ihre Eingaben aufweisen und jeweils eine vollständige Adresse von externem Speicher als eine Ausgabe aufweisen.
  • Ein Basisadressregister 1885 speichert die derzeitige Basisadresse, die mit dem Indexpaket kombiniert wird, und ein dcc-Betriebsart-Register 1888 speichert die derzeitige Betriebsart (dcc-Betriebsart) der Daten-Cache-Steuerungseinrichtung 240.
  • Der Identifizierungskennzeichenspeicher 1872 umfasst einen Block von 128 mal 20 Bits von Mehranschluss-RAM. Dieses RAM weist einen Schreibanschluss (update-line-addr), einen Schreibfreigabeanschluss (write), acht Leseanschlüsse (read0line-addr, ...., read7line-addr) und acht Leseausgabeanschlüsse (tag0_data, ..., tag7_data) auf. Dies ermöglicht acht gleichzeitige Nachschlagevorgänge an den Anschlüssen (read0line-addr, ..., read7line-addr) durch die acht Adresserzeugungseinrichtungen 1881 zum Bestimmen der derzeit für die Zeilen gespeicherten Identifizierungskennzeichenadressen für jede Zeilenadresse der einen erzeugten Speicheradresse oder mehreren erzeugten Speicheradressen. Die derzeitigen Identifizierungskennzeichenadressen für die Zeilen werden an den Anschlüssen (tag0-data, ..., tag7-data) zu der Identifizierungskennzeichenvergleichseinrichtung 1886 ausgegeben. Bei Bedarf wird durch den Cache-Steuerungseinrichtung-Block 1878 ein Identifizierungskennzeichenschreibsignal zur Zuführung zu dem Schreibanschluss (write) des Identifizierungskennzeichenspeichers 1872 zum Freigeben eines Schreibens in den Identifizierungskennzeichenspeicher 1872 an dem Anschluss (update-line-addr) erzeugt.
  • Ein 128-Bit-Zeilengültigkeitsspeicher 1873 enthält den Zeilengültigkeitsstatus für jede Cache-Zeile des Cache-Speichers 230. Dies ist ein Speicher von 128 mal 1 Bit mit einem Schreibanschluss (update-line-addr), einem Schreibfreigabeanschluss (update), acht Leseanschlüssen (read0line-addr, ..., read7line-addr) und acht Leseausgabeanschlüssen (linevalid0, ..., linevalid7). In einer ähnlichen Art und Weise wie bei dem Identifizierungskennzeichenspeicher erlaubt dies acht gleichzeitige Nachschlagevorgänge an den Anschlüssen (read0line-addr, ..., read7line-addr) durch die acht Adresserzeugungseinrichtungen 1881 zum Bestimmen der derzeit für die Zeilen gespeicherten Zeilengültigkeitsstatusbits für jede Zeilenadresse der einen erzeugten Speicheradresse oder mehreren erzeugten Speicheradressen. Die derzeitigen Zeilengültigkeitsbits für diese Zeilen werden an den Anschlüssen (linevalid0, ..., linevalid7) zu der Identifizierungskennzeichenvergleichseinrichtung 1886 ausgegeben. Bei Bedarf wird durch den Cache-Steuerungseinrichtung-Block 1878 ein Schreibsignal zur Zuführung zu dem Schreibanschluss (update) des Zeilengültigkeitsstatusspeichers 1873 zum Freigeben eines Schreibens in den Zeilengültigkeitsstatusspeicher 1873 an dem Anschluss (update-line-addr) erzeugt.
  • Der Identifizierungskennzeichenvergleichseinrichtungsblock 1886 besteht aus acht identischen Identifizierungskennzeichenvergleichseinrichtungen mit: Eingängen tag_data zum jeweiligen Empfangen der derzeit bei den Zeilen, auf die durch die Zeilenadressen der derzeit erzeugten vollständigen externen Adressen zugegriffen wird, in dem Identifizierungskennzeichenspeicher 1872 gespeicherten Identifizierungskennzeichenadressen, Eingängen tag_addr zum jeweiligen Empfangen der Identifizierungskennzeichenadressen der derzeit erzeugten vollständigen Adressen von externem Speicher, einem dcc-Eingang zum Empfangen des derzeitigen Betriebsartsignals (dcc_mode) zum Einstellen der zu vergleichenden Teile der Identifizierungskennzeichenadressen und einem Eingang line_valid zum Empfangen der derzeit bei den Zeilen, auf die durch die Zeilenadressen der derzeit erzeugten vollständigen Adressen von externem Speicher zugegriffen wird, in dem Zeilengültigkeitsstatusspeicher 1873 gespeicherten Zeilengültigkeitsstatusbits. Der Vergleichseinrichtungsblock 1886 weist acht Ausgänge hit (Treffer) für jede der acht Adresserzeugungseinrichtungen 1881 auf. Ein Treffersignal wird geltend gemacht, wenn die Identifizierungskennzeichenadresse der erzeugten vollständigen Adresse von externem Speicher zu den Inhalten des Identifizierungskennzeichenspeichers 1872 an der Stelle, auf die durch die Zeilenadresse der erzeugten vollständigen Adresse von externem Speicher zugegriffen wird, passt und das Zeilengültigkeitsstatusbit 1873 für die Zeile geltend gemacht wird. Bei diesem speziellen Ausführungsbeispiel sind die in externem Speicher gespeicherten Datenstrukturen klein, und folglich sind die höchstwertigen Bits der Identifizierungskennzeichenadressen die gleichen. Somit ist es vorzuziehen, nur die niedrigstwertigen Bits der Identifizierungskennzeichen, die variieren können, zu vergleichen. Dies wird durch das derzeitige Betriebsartsignal (dcc_mode) erreicht, das die Identifizierungskennzeichenvergleichseinrichtung 1886 zum Vergleichen der niedrigstwertigen Bits der Identifizierungskennzeichenadressen, die variieren können, einstellt.
  • Die Cache-Steuerungseinrichtung 1878 nimmt eine Anforderung (proc_req) 1876 von dem Operand B 247 oder dem Operand C 248 an und bestätigt (proc_ack) 1879 diese Anforderung, falls die Daten in dem Cache-Speicher 230 verfügbar sind. Abhängig von der Betriebsart können bis zu acht verschieden adressierte Dateneinheiten angefordert werden, eine aus jeder der acht Bänke des Cache-Speichers 230. Die angeforderten Daten sind in dem Cache-Speicher 230 verfügbar, wenn die Identifizierungskennzeichenvergleichseinrichtung 1886 einen Treffer für die Zeile des Speichers geltend macht. Die Cache-Steuerungseinrichtung 1878 erzeugt im Ansprechen auf das geltend gemachte Treffersignal (hit0, ..., hit7) ein Lesefreigabesignal an dem Anschluss (cache_read) zum Freigeben eines Lesens der Cache-Zeilen, für die das Treffersignal geltend gemacht worden ist.
  • Wenn eine Anforderung (proc_req) 1876, aber nicht das Treffersignal (hit0, ..., hit7), geltend gemacht wird, wird eine erzeugte Anforderung (ext_req) 1890 zusammen mit der vollständigen Adresse von externem Speicher für die Cache-Zeile von Daten zu dem externen Speicher gesendet. Diese Cache-Zeile wird über den Eingang (ext_data) in die acht Bänke des Cache-Speichers 230 geschrieben, wenn sie aus dem externen Speicher verfügbar ist. Wenn dies passiert, werden die Identifizierungskennzeicheninformationen ebenfalls bei der Zeilenadresse in den Identifizierungskennzeichenspeicher 1886 geschrieben, und das Zeilenstatusbit 1873 für die Zeile wird geltend gemacht.
  • Daten aus den acht Bänken des Cache-Speichers 230 werden daraufhin durch eine Reihe von Multiplexern in einer Datenorganisationseinrichtung 1892 ausgegeben, so dass Daten in einer vorbestimmten Art und Weise in einem Ausgabedatenpaket 1894 positioniert werden. In einer Betriebsart kann die Datenorganisationseinrichtung 1892 acht 8-Bit-Wörter aus den von den acht Speicherbänken ausgegebenen jeweiligen acht 32-Bit-Wörtern auswählen und ausgeben, indem sie das derzeitige Betriebsartsignal (dcc_mode) und die Byteadressen (byte_addr) der derzeitigen erzeugten vollständigen Adressen von externem Speicher nutzt. In einer anderen Betriebsart gibt die Datenorganisationseinrichtung 1892 die von den acht Speicherbänken ausgegebenen acht 32-Bit-Wörter direkt aus. Wie vorher besonders erwähnt ordnet die Datenorganisationseinrichtung diese Daten zur Ausgabe in einer vorbestimmten Art und Weise an.
  • Eine Anforderung würde die folgenden Schritte umfassen:
    • 1) Die Verarbeitungseinheit fordert ein Paket von Daten an, indem sie der Verarbeitungseinheitsschnittstelle der Cache-Steuerungseinrichtung 1878 eine Adresse zuführt;
    • 2) Jede der acht Adresserzeugungseinrichtungseinheiten 1881 erzeugt daraufhin abhängig von der Betriebsart eine getrennte Adresse für jeden Block des Cache-Speichers;
    • 3) Der Identifizierungskennzeichenabschnitt jeder der erzeugten Adressen wird daraufhin mit der in den vier Blöcken des Dreianschlussidentifizierungskennzeichenspeichers 1886 gespeicherten und durch jede der entsprechenden Zeilen, die Teil der acht erzeugten Adressen ist, adressierten Identifizierungskennzeichenadresse verglichen;
    • 4) Falls sie übereinstimmen und der Zeilengültigkeitsstatus 1873 für die Zeile auch geltend gemacht wird, werden die für den Block des Speichers angeforderten Daten für in dem Cache-Speicher 230 befindlich erachtet;
    • 5) Daten, die sich nicht dort befinden, werden über den externen Bus 1890 abgerufen, und alle acht Blöcke des Cache-Speichers 230 werden mit der Zeile von Daten aus externem Speicher aktualisiert. Die Identifizierungskennzeichenadresse der neuen Daten wird daraufhin bei der Zeilenadresse in den Identifizierungskennzeichenspeicher 1886 geschrieben, und der Zeilengültigkeitsstatus 1873 für die Zeile wird geltend gemacht;
    • 6) Wenn alle angeforderten Dateneinheiten sich in dem Cache-Speicher 230 befinden, werden sie der Verarbeitungseinheit in einem vorbestimmten Paketformat präsentiert.
  • Wie vorher besonders erwähnt weisen alle die Module (2) des Coprozessor 224 eine Standard-cBus-Schnittstelle 303 (20) auf. Die Einstellungen in den Registern der Standard-cBus-Schnittstelle für die Daten-Cache-Steuerungseinrichtung 240 und den Cache 230 steuern den Betrieb der Datensteuerungseinrichtung 240. Der Einfachheit halber sind nur zwei dieser Register in 153 gezeigt, das heißt Basisadresse (base_adress) und dcc-Betriebsart (dcc_mode).
  • Sobald die Daten-Cache-Steuerungseinrichtung 240 und der Daten-Cache 230 freigegeben sind, arbeitet die Daten-Cache-Steuerungseinrichtung anfänglich in der normalen Betriebsart, wobei alle Cache-Zeilen ungültig sind. Bei dem Ende einer Anweisung kehren die Daten-Cache-Steuerungseinrichtung 240 und der Cache 230 immer zu der normalen Betriebsart zurück. Bei allen den folgenden Betriebsarten außer der "Für-ungültig-erklären"-Betriebsart ist eine Option "automatisch füllen und für gültig erklären" vorhanden. Durch ein Einstellen eines Bits in dem Register dcc_cfg2 ist es möglich, den ganzen Cache bei der in dem Basisadressregister gespeicherten Adresse anfangend zu füllen. Während dieser Operation werden die Datenanforderungen von den Operandenorganisationseinrichtungen B und C 247, 248 ausgeschlossen, bis die Operation abgeschlossen ist. Der Cache wird bei dem Ende dieser Operation für gültig erklärt.
  • a. Normale Cache-Betriebsart
  • In dieser Betriebsart führen die zwei Operandenorganisationseinrichtungen die vollständigen Adressen von externem Speicher der angeforderten Daten zu. Die Adresserzeugungseinrichtung 1881 gibt die vollständigen Adressen von externem Speicher aus, die daraufhin unabhängig unter Verwendung des internen Identifizierungskennzeichenspeichers 1872 überprüft werden, um zu sehen, ob die angeforderten Daten sich in dem Speicher-Cache 230 befinden. Falls beide angeforderten Dateneinheiten nicht in dem Cache 230 vorhanden sind, werden Daten von dem Eingabeschnittstellenschalter 252 angefordert. Es wird eine Round-Robin-Planung realisiert, um anhaltende gleichzeitige Anforderungen abzuarbeiten.
  • Falls sich für gleichzeitige Anforderungen eine der Dateneinheiten in dem Cache befindet, wird sie auf die niedrigstwertigen 32 Bits des Datenbusses jedes Anforderers platziert. Die anderen Daten werden über den Eingabeschnittstellenschalter extern angefordert.
  • b. Allgemeine Farbraumwandlungsbetriebsart mit Einzelausgabe
  • In dieser Betriebsart kommt die Anforderung von der Operandenorganisationseinrichtung B in der Form einer 12-Bit-Byteadresse. Die angeforderten Dateneinheiten sind 8-Bit-Farbausgabewerte. Die 12-Bit-Adresse wird den Eingängen index_packet der Adresserzeugungseinrichtungen 1881 zugeführt, und die acht Adresserzeugungseinrichtungen 1881 erzeugen acht verschiedene vollständige 32-Bit-Adressen von externem Speicher des in der 96 gezeigten Formats. Die Adressen von externem Speicher werden als acht 9-Bit-Zeilen- und -Byteadressen interpretiert, die zum Adressieren eines Bytes aus jeder der acht Bänke des RAM verwendet werden. Es wird auf den Cache zugegriffen, um die acht Bytewerte aus jeder Bank zu erhalten, die zur nachfolgenden Interpolation durch den Hauptdatenweg 242 zu den Operandenorganisationseinrichtungen zurückgeführt werden. Da die Einzelausgabefarbwerttabelle ganz in den Cache-Speicher 230 passen kann, ist es vorzuziehen, die ganze Einzelausgabefarbwerttabelle in den Cache-Speicher 230 zu laden, bevor die Einzelfarbwandlungsbetriebsart freigegeben wird.
  • c. Allgemeine Farbraumwandlungsbetriebsart mit Mehrfachausgabe
  • In dieser Betriebsart wird eine 12-Bit-Wortadresse von der Operandenorganisationseinrichtung B 247 empfangen. Die angeforderten Dateneinheiten sind 32-Bit-Farbausgabewerte. Die 12-Bit-Adresse wird den Eingängen index_packet der Adresserzeugungseinrichtungen 1881 zugeführt, und die acht Adresserzeugungseinrichtungen 1881 erzeugen acht verschiedene vollständige 32-Bit-Adressen von externem Speicher des in der 96 gezeigten Formats. Die vollständige Adresse von externem Speicher wird als acht 9-Bit-Adressen interpretiert, wobei die 9-Bit-Adresse in eine 7-Bit-Zeilenadresse und eine 2-Bit-Identifizierungskennzeichenadresse zerlegt wird. Wenn die Identifizierungskennzeichenadresse nicht gefunden wird, ist der Cache im Stillstand, während die passenden Daten von dem Eingabeschnittstellenschalter 252 (2) geladen werden. Wenn die Daten verfügbar sind, werden die Ausgabedaten zu den Operandenorganisationseinrichtungen zurückgeführt.
  • d. JPEG-Codierungsbetriebsart
  • In dieser Betriebsart werden die notwendigen Tabellen für die JPEG-Codierung und andere Betriebsuntersätze in jeder Bank des Cache-RAM gespeichert.
  • e. Langsame JPEG-Decodierungsbetriebsart
  • In dieser Betriebsart wird der Daten-Cache zum Speichern von verschiedenen Huffman-Tabellen genutzt.
  • f. Matrixmultiplikationsbetriebsart
  • In dieser Betriebsart wird der Cache zum Zugreifen auf 256-Byte-Zeilen von Daten genutzt.
  • g. Gesperrte Betriebsart
  • In dieser Betriebsart werden alle Anforderungen zu dem Eingabeschnittstellenschalter 252 durchgeleitet.
  • h. Für-ungültig-erklären-Betriebsart
  • In dieser Betriebsart werden die Inhalte des ganzen Caches für ungültig erklärt, indem alle die Zeilengültigkeitsstatusbits zurückgesetzt werden.
  • 3.16.7 Eingabeschnittstellenschalter
  • Wieder zu 2 zurückkehrend führt der Eingabeschnittstellenschalter 252 die Funktion des Arbitrierens von Datenanforderungen von der Bildelementorganisationseinrichtung 246, der Daten-Cache-Steuerungseinrichtung 240 und der Anweisungssteuerungseinrichtung 235 durch. Ferner überträgt der Eingabeschnittstellenschalter 252 bei Bedarf Adressen und Daten zu der Externe-Schnittstelle-Steuerungseinrichtung 238 und der Lokaler-Speicher-Steuerungseinrichtung 236.
  • Der Eingabeschnittstellenschalter 252 speichert in einem seiner Konfigurationsregister die Basisadresse oder das Speicherobjekt in der Hostspeicherbelegung. Dies ist eine virtuelle Adresse, die an einer Seitengrenze ausgerichtet werden muss, weshalb 20 Adressbits erforderlich sind. Für jede durch die Bildelementorganisationseinrichtung, die Daten-Cache-Steuerungseinrichtung, die Anweisungssteuerungseinrichtung ausgeführte Anforderung subtrahiert der Eingabeschnittstellenschalter 252 zuerst die Basisadressbits des Coprozessors von den höchstwertigen 6 Bits der Startadresse der Daten. Falls das Ergebnis negativ ist oder die höchstwertigen 6 Bits des Ergebnisses nicht null sind, gibt dies an, dass das gewünschte Ziel der PCI-Bus ist.
  • Falls die höchstwertigen 6 Bits des Ergebnisses null sind, gibt dies an, dass die Daten auf eine Speicherstelle des Coprozessors abgebildet werden. Der Eingabeschnittstellenschalter 252 muss daraufhin die nächsten 3 Bits überprüfen, um zu bestimmen, ob die Stelle des Coprozessors zulässig ist oder nicht.
  • Die zulässigen Stellen des Coprozessors, die als eine Quelle von Daten fungieren können, sind:
    • 1) 16 Mbytes, die durch die generische Schnittstelle belegt werden, beginnend bei einem Offset von 0x01000000 von der Basisadresse des Coprozessors.
    • 2) 32 Mbytes, die durch die Lokaler-Speicher-Steuerungseinrichtung (LMC) belegt werden, anfangend bei einem Offset von 0x02000000 von der Basisadresse des Speicherobjekts des Coprozessors.
  • Anforderungen, die auf eine unzulässige Stelle des Coprozessors abgebildet werden, werden durch den Eingabeschnittstellenschalter als Fehler gekennzeichnet.
  • Der PCI-Bus ist die Quelle von irgendwelchen Adressen, die außerhalb des durch das Speicherobjekt des Coprozessors belegten Bereichs abgebildet werden, entsprechenden Daten. Ein Signal i-source wird durch den Eingabeschnittstellenschalter verwendet, um der EIC anzugeben, ob angeforderte Daten von dem PCI-Bus oder der generischen Schnittstelle herrühren sollen.
  • Nach dem Adressdecodierungsprozess werden zulässige Anforderungen zu der passenden IBus-Schnittstelle geleitet, wenn der Bus frei ist. Die EIC oder LMC ist mit einer Datentransaktion zu dem Eingabeschnittstellenschalter beschäftigt, wenn ihr Signal i-ack geltend gemacht wird. Der Eingabeschnittstellenschalter führt jedoch keinen Zählwert für die Anzahl von eingehenden Wörtern und muss so das durch die Bildelementorganisationseinrichtung, die Anweisungssteuerungseinrichtung oder die Daten-Cache-Steuerungseinrichtung gesteuerte Signal i-oe überwachen, um zu bestimmen, wann die derzeitige Datentransaktion abgeschlossen worden ist.
  • Der Eingabeschnittstellenschalter 252 muss zwischen drei Modulen arbitrieren: der Bildelementorganisationseinrichtung, der Daten-Cache-Steuerungseinrichtung und der Anweisungssteuerungseinrichtung. Alle diese Module können Daten gleichzeitig anfordern, aber nicht alle Anforderungen können unmittelbar erfüllt werden, da nur zwei physikalische Betriebsmittel vorhanden sind. Das durch den Eingabeschnittstellenschalter verwendete Arbitrierungsschema ist prioritätsbasiert und programmierbar. Steuerungsbits in einem Konfigurationsregister des Eingabeschnittstellenschalters bestimmen die relativen Prioritäten der Anweisungssteuerungseinrichtung, der Daten-Cache-Steuerungseinrichtung und der Bildelementorganisationseinrichtung. Eine Anforderung von dem Modul mit der niedrigeren Priorität wird bewilligt, wenn keines der anderen zwei Module einen Zugriff auf das gleiche Betriebsmittel wie es ist anfordert. Ein Zuweisen der gleichen Priorität zu zumindest zwei der Anforderer führt zu der Verwendung eines Round-Robin-Schemas zum Ableiten der neuen Gewinner.
  • Da ein unmittelbarer Zugriff auf ein Betriebsmittel nicht möglich sein kann, muss der Eingabeschnittstellenschalter die Adresse, die Burst-Länge und ob Daten vorab abzurufen sind, die durch jeden Anforderer bereitgestellt werden, speichern. Für ein gegebenes Betriebsmittel muss der Arbitrierungsprozess nur einen neuen Gewinner bestimmen, wenn keine IBus-Transaktion im Gang ist.
  • 145 zugewendet ist dort der Eingabeschnittstellenschalter 252 ausführlicher veranschaulicht. Der Schalter 252 weist die Standard-CBus-Schnittstelle und eine Registerdatei 860 zusätzlich zu zwei IBus-Sendern/Empfängern 861 und 862 zwischen einem Adressdecodierer 863 und einer Arbitrierungseinrichtung 864 auf.
  • Der Adressdecodierer 863 führt Adressdecodierungsoperationen für von der Bildelementorganisationseinrichtung, der Daten-Cache-Steuerungseinrichtung und der Anweisungssteuerungseinrichtung empfangene Anforderungen durch. Der Adressdecodierer 863 überprüft, dass die Adresse eine zulässige ist, und führt eine erforderliche Adressneuabbildung durch. Die Arbitrierungseinrichtung 864 entscheidet, welche Anforderungen von einem IBus-Sender/Empfänger 661 zu einem zweiten IBus-Sender/Empfänger 862 zu leiten ist. Vorzugsweise ist das Prioritätssystem programmierbar.
  • Die IBus-Sender/Empfänger 861, 862 enthalten all das notwendige Multiplexen/Demultiplexen und Dreizustandspuffer zum Ermöglichen einer Kommunikation über die verschiedenen Schnittstellen mit dem Eingabeschnittstellenschalter.
  • 3.16.8 Lokaler-Speicher-Steuerungseinrichtung
  • Wieder zu 2 zurückkehrend ist die Lokaler-Speicher-Steuerungseinrichtung 236 für alle Aspekte des Steuerns des lokalen Speichers und Handhabens von Zugriffsanforderungen zwischen dem lokalen Speicher und Modulen in dem Coprozessor verantwortlich. Die Lokaler-Speicher-Steuerungseinrichtung 236 spricht auf Schreibanforderungen von der Ergebnisorganisationseinrichtung 249 und Leseanforderungen von dem Eingabeschnittstellenschalter 252 an. Zusätzlich spricht sie auch auf sowohl Leseanforderungen als auch Schreibanforderungen von der Peripherieschnittstelle-Steuerungseinrichtung 237 und dem üblichen globalen CBus-Eingang an. Die Lokaler-Speicher-Steuerungseinrichtung nutzt ein programmierbares Prioritätssystem und nutzt ferner FIFO-Puffer zum Maximieren des Durchsatzes. Bei dem vorliegenden Ausführungsbeispiel wird eine Dynamischer-Burst-Speicher-Steuerungseinrichtung mit mehreren Anschlüssen zusätzlich zu einem Verwenden von Zuerst-hinein-zuerst-hinaus-Puffern (FIFO-Puffern) zum Entkoppeln der Anschlüsse von einer regelmäßigen Speicheranordnung genutzt.
  • 146 stellt ein Blockschaltbild einer Dynamischer-Burst-Speicher-Steuerungseinrichtung mit vier Anschlüssen gemäß einem ersten Ausführungsbeispiel der vorliegenden Erfindung dar. Die Schaltung weist zwei Schreibanschlüsse (A 1944 und B 1946) und zwei Leseanschlüsse (C 1948 und D 1950) auf, die einen Zugriff auf eine regelmäßige Speicheranordnung 1910 benötigen. Die Datenwege von den zwei Schreibanschlüssen gehen durch zwei getrennte FIFOs 1920, 1922 und über einen Multiplexer 1912 zu der regelmäßigen Speicheranordnung 1910, während die Datenwege der Leseanschlüsse 1948, 1950 über getrennte FIFOs 1936, 1938 aus der regelmäßigen Speicheranordnung 1910 herausgehen. Eine zentrale Steuerungseinrichtung 1932 koordiniert alle Anschlusszugriffe sowie das Ansteuern aller der zum Verbinden mit dem dynamischen Speicher 1910 notwendigen Steuerungssignale. Ein Auffrischungszähler 1934 bestimmt, wann Dynamischer-Speicher-Auffrischungszyklen für die regelmäßige Speicheranordnung 1910 erforderlich sind, und koordiniert diese mit der Steuerungseinrichtung 1932.
  • Die Daten werden vorzugsweise mit der doppelten Rate wie der Rate, mit der Daten von den Schreibanschlüssen 1944, 1946 zu den FIFOs 1920, 1922 oder von den FIFOs 1936, 1938 zu den Leseanschlüssen 1948, 1950 transferiert werden, aus der regelmäßigen Speicheranordnung 1910 gelesen und in sie geschrieben. Dies führt dazu, dass relativ zu der Zeit, die zum Transferieren von Daten durch die Schreib- und Leseanschlüsse 1944, 1946, 1948, 1950 gebraucht wird, so wenig Zeit wie möglich für ein Durchführen von Transfers zu oder von der regelmäßigen Speicheranordnung 1910 (die der Engpass jedes Speichersystems ist) gebraucht wird.
  • Daten werden über einen der Schreibanschlüsse 1944, 1946 in die regelmäßige Speicheranordnung 1910 geschrieben. Die mit den Schreibanschlüssen 1944, 1946 verbundenen Schaltungen sehen nur einen FIFO 1920, 1922, der anfänglich leer ist. Datentransfers über die Schreibanschlüsse 1944, 1946 gehen ungehindert vonstatten, bis der FIFO 1920, 1922 gefüllt ist oder der Burst beendet wird. Wenn Daten zuerst in den FIFO 1920, 1922 geschrieben werden, arbitriert die Steuerungseinrichtung 1932 für den DRAM-Zugriff mit den anderen Anschlüssen. Wenn ein Zugriff bewilligt wird, werden Daten mit der höheren Rate aus dem FIFO 1920, 1922 gelesen und in die regelmäßige Speicheranordnung 1910 geschrieben. Ein Burst-Schreibzyklus in das DRAM 1910 wird nur eingeleitet, wenn eine voreingestellte Anzahl von Datenwörtern in dem FIFO 1920, 1922 gespeichert worden ist oder wenn der Burst von dem Schreibanschluss endet. In jedem Fall geht der Burst zu dem DRAM 1910 bei Bewilligung vonstatten und setzt sich fort, bis der FIFO 1920, 1922 geleert ist oder eine Zyklusanforderung von einem Anschluss mit höherer Priorität vorhanden ist. In jedem Fall wird fortgefahren, Daten von dem Schreibanschluss ohne Hinderung in den FIFO 1920, 1922 zu schreiben, bis der FIFO gefüllt ist oder bis der Burst endet und ein neuer Burst gestartet wird. In dem letzteren Fall kann der neue Burst nicht vonstatten gehen, bis der vorhergehende Burst aus dem FIFO 1920, 1922 geleert und in das DRAM 1910 geschrieben worden ist. In dem ersteren Fall beginnen Datentransfers wieder, sobald das erste Wort aus dem FIFO 1920, 1922 gelesen und in das DRAM 1910 geschrieben ist. Verursacht durch die höhere Rate von Datentransfers aus dem FIFO 1920, 1922 ist es für den Schreibanschluss 1944, 1946 nur möglich, zum Stillstand zu kommen, falls die Steuerungseinrichtung 1832 mit Zyklusanforderungen von den anderen Anschlüssen unterbrochen wird. Eine Unterbrechung bei den Datentransfers von den Schreibanschlüssen 1944, 1946 zu den FIFOs 1920, 1922 wird vorzugsweise minimal gehalten.
  • Die Leseanschlüsse 1948, 1950 arbeiten in einer umgekehrten Art und Weise. Wenn ein Leseanschluss 1948, 1950 eine Leseanforderung einleitet, wird unmittelbar ein DRAM-Zyklus angefordert. Bei Bewilligung wird die regelmäßige Speicheranordnung 1910 gelesen, und Daten werden in den entsprechenden FIFO 1936, 1938 geschrieben. Sobald das erste Datenwort in den FIFO 1936, 1938 geschrieben ist, ist es zum Auslesen durch den Leseanschluss 1948, 1950 verfügbar. Somit ist eine Anfangsverzögerung bei einem Erhalten des ersten Datenworts vorhanden, aber danach ist eine hohe Wahrscheinlichkeit gegeben, dass keine weiteren Verzögerungen bei einem Wiedergewinnen der folgenden Datenwörter vorhanden sind. DRAM-Lesevorgänge werden beendet, wenn eine DRAM-Anforderung mit höherer Priorität empfangen wird oder falls der gelesene FIFO 1936, 1938 voll wird oder wenn der Leseanschluss 1948, 1950 keine Daten mehr benötigt. Sobald der Lesevorgang auf diese Weise beendet worden ist, wird er nicht neu gestartet, bis in dem FIFO 1936, 1938 Platz für eine voreingestellte Anzahl von Datenwörtern ist. Sobald der Leseanschluss den Zyklus beendet, werden irgendwelche in dem FIFO 1936, 1938 verbleibenden Daten verworfen.
  • Um DRAM-Steuerungsoverheads minimal zu halten, ist eine Neuarbitrierung (rearbitration) für den DRAM-Zugriff beschränkt, so dass Bursts nicht unterbrochen werden können, bis eine voreingestellte Anzahl von Datenwörtern transferiert worden ist (oder bis der entsprechende Schreib-FIFO 1920, 1922 geleert ist oder der Lese-FIFO 1936, 1938 gefüllt ist).
  • Jeder der Zugriffsanschlüsse 1944, 1946, 1948, 1950 weist eine zugeordnete Burst-Startadresse auf, die bei dem Start des Bursts in einem Zähler 1942 zwischengespeichert wird. Dieser Zähler hält die derzeitige Adresse für Transaktionen auf dem Anschluss, so dass dann, wenn der Transfer unterbrochen werden sollte, er zu jeder Zeit bei der richtigen Speicheradresse fortgesetzt werden kann. Nur die Adresse für den derzeit aktiven DRAM-Zyklus wird durch einen Multiplexer 1940 ausgewählt und an den Reihenadresszähler 1916 und den Spaltenadresszähler 1918 weitergegeben. Die niederwertigen N Bits der Adresse werden in den Spaltenzähler 1918 eingegeben, während die höherwertigen Adressbits in den Reihenzähler 1916 eingegeben werden. Ein Multiplexer 1914 gibt während der Reihenadresszeit des DRAM Reihenadressen von dem Reihenzähler 1916 zu der regelmäßigen Speicheranordnung 1910 aus und gibt während der Spaltenadresszeit des DRAM Spaltenadressen von dem Spaltenzähler 1918 weiter. Der Reihenadresszähler 1916 und der Spaltenadresszähler 1918 werden bei dem Start eines Bursts in das DRAM der regelmäßigen Speicheranordnung 1910 geladen. Dies trifft sowohl bei dem Start eines Anschlusszyklus als auch bei der Fortsetzung eines unterbrochenen Bursts zu. Der Spaltenadresszähler 1918 wird nach jedem Transfer in den Speicher, der stattgefunden hat, erhöht, während der Reihenadresszähler 1916 erhöht wird, wenn der Spaltenadresszähler 1918 sich zu einem Zählwert von null überschlägt. Wenn das letztere passiert, muss der Burst beendet werden und bei der neuen Reihenadresse neu gestartet werden.
  • Bei dem bevorzugten Ausführungsbeispiel wird es angenommen, dass die regelmäßige Speicheranordnung 1910 4 × 8-Bit-Bytezeilen umfasst, was 32 Bits pro Wort ausmacht. Ferner ist jedem Schreibanschluss 1944, 1946 ein Satz von vier Byteschreibfreigabesignalen 1950, 1952 zugeordnet, die es einzeln erlauben, Daten in jeden 8-Bit-Abschnitt jedes 32-Bit-Datenworts in der regelmäßigen Speicheranordnung 1910 zu schreiben. Da es möglich ist, das Schreiben von Daten in ein Byte in jedem Wort, das in die regelmäßige Speicheranordnung 1910 geschrieben wird, beliebig zu maskieren, ist es notwendig, die Schreibfreigabeinformationen zusammen mit jedem Datenwort in entsprechenden FIFOs 1926, 1928 zu speichern. Diese FIFOs 1926, 1928 werden durch die gleichen Signale gesteuert, die die Schreib-FIFOs 1920, 1922 steuern, aber sind statt der für die Schreibdaten in den FIFOs 1920, 1922 erforderlichen 32 Bits nur 4 Bits breit. In der gleichen Art und Weise wird ein Multiplexer 1930 in der gleichen Art wie der Multiplexer 1912 gesteuert. Die ausgewählten Byteschreibfreigaben werden in die Steuerungseinrichtung 1932 eingegeben, die die Informationen zum selektiven Freigeben oder Sperren eines Schreibens in das adressierte Wort in der regelmäßigen Speicheranordnung 1910 synchron zu den Schreibdaten, die auf dem Weg über den Multiplexer 1912 in die regelmäßige Speicheranordnung 1910 eingegeben werden, verwendet.
  • Der Aufbau gemäß 146 arbeitet unter der Steuerung der Steuerungseinrichtung 1932. 147 zeigt ein Zustandsmaschinendiagramm, das die Einzelheiten des Betriebs der Steuerungseinrichtung 1932 gemäß 146 darstellt. Nach einem Einschalten und bei dem Abschluss eines Rücksetzens wird die Zustandsmaschine in einen Zustand LEERLAUF 100 gezwungen, in dem alle DRAM-Steuerungssignale inaktiv (hoch) angesteuert werden und der Multiplexer 1914 Reihenadressen zu der regelmäßigen DRAM-Anordnung 1910 lenkt. Wenn eine Auffrischung oder eine Zyklusanforderung erfasst wird, wird der Übergang zu einem Zustand RASDEL1 1962 ausgeführt. Bei der nächsten Taktflanke wird der Übergang zu einem Zustand RASDEL2 1964 ausgeführt. Falls bei der nächsten Taktflanke die Zyklusanforderung und die Auffrischung weggegangen sind, kehrt die Zustandsmaschine zu dem Zustand LEERLAUF 1900 zurück, andernfalls wird dann, wenn die DRAM-Periode tRP (RAS-Vorladungszeitverlaufsbeschränkung) erfüllt worden ist, der Übergang zu einem Zustand RASON 1966 ausgeführt, wobei zu dieser Zeit das Reihenadressfreigabesignal, RAS, niedrig geltend gemacht wird. Nachdem tRCD (RAS-zu-CAS-Verzögerungszeitverlaufsbeschränkung) erfüllt worden ist, wird der Übergang zu einem Zustand COL 1968 ausgeführt, in dem der Multiplexer 1914 zu einem Auswählen von Spaltenadressen zum Eingeben in die regelmäßige DRAM-Anordnung 1910 umgeschaltet wird. Bei der nächsten Taktflanke wird der Übergang zu einem Zustand CASON 1970 ausgeführt, und das DRAM-Spaltenadressfreigabesignal (CAS-Signal) wird aktiv niedrig angesteuert. Sobald die tCAS (CAS-Aktivzeitverlaufsbeschränkung) erfüllt worden ist, wird der Übergang zu einem Zustand CASOFF 1972 ausgeführt, in dem die DRAM-Spaltenadressfreigabe (CAS) wieder inaktiv hoch angesteuert wird. Falls an diesem Punkt weitere Datenwörter zu transferieren sind und keine Zyklusanforderung oder Auffrischung mit höherer Priorität ansteht oder falls es ohnehin zu früh ist, neu zu arbitrieren, und sobald die tCP (CAS-Vorladungszeitverlaufsbeschränkung) erfüllt worden ist, wird der Übergang zurück zu dem Zustand CASON 1970 ausgeführt, in dem die DRAM-Spaltenadressfreigabe (CAS) wieder aktiv niedrig angesteuert wird. Wenn keine weiteren Datenwörter zu transferieren sind oder wenn ein Neuarbitrieren stattfindet und eine Zyklusanforderung oder Auffrischung mit höherer Priorität ansteht, dann wird stattdessen der Übergang zu einem Zustand RASOFF 1974 ausgeführt, vorausgesetzt dass tRAS (RAS- Aktivzeitverlaufsbeschränkung) und tCP (CAS-Vorladungszeitverlaufsbeschränkung) beide erfüllt sind. In diesem Zustand wird das DRAM-Reihenadressfreigabesignal (RAS-Signal) inaktiv hoch angesteuert. Bei der nächsten Taktflanke kehrt die Zustandsmaschine bereit, den nächsten Zyklus zu starten, zu dem Zustand LEERLAUF 1860 zurück.
  • Wenn in dem Zustand RASDEL2 1964 eine Auffrischungsanforderung erfasst wird, wird der Übergang zu einem Zustand RCASON 1980 ausgeführt, sobald tRP (RAS-Vorladungszeitverlaufsbeschränkung) erfüllt worden ist. In diesem Zustand wird die DRAM-Spaltenadressfreigabe aktiv niedrig angesteuert, um vor einem RAS-Auffrischungszyklus eine DRAM-CAS zu starten. Bei der nächsten Taktflanke wird der Übergang zu einem Zustand RRASON 1978 ausgeführt, in dem die DRAM-Reihenadressfreigabe (RAS) aktiv niedrig angesteuert wird. Wenn tCAS (CAS-Aktivzeitverlaufsbeschränkung) erfüllt worden ist, wird der Übergang zu einem Zustand RCASOFF 1976 ausgeführt, in dem die DRAM-Spaltenadressfreigabe (CAS) inaktiv hoch angesteuert wird. Sobald tRAS (RAS-Aktivzeitverlaufsbeschränkung) erfüllt worden ist, wird der Übergang zu dem Zustand RASOFF 1974 ausgeführt, in dem die DRAM-Reihenadressfreigabe (RAS) inaktiv hoch angesteuert wird, was den Auffrischungszyklus wirkungsvoll beendet. Die Zustandsmaschine fährt dann wie vorstehend für einen normalen DRAM-Zyklus beschrieben fort, wobei sie den Übergang zurück zu dem Zustand LEERLAUF 1960 ausführt.
  • Der Auffrischungszähler 1934 gemäß 146 ist einfach ein Zähler, der Auffrischungsanforderungssignale mit einer festen Rate von einmal pro 15 Mikrosekunden oder einer anderen Rate wie durch die speziellen Anforderungen des DRAM-Herstellers bestimmt erzeugt. Wenn eine Auffrischungsanforderung geltend gemacht wird, bleibt sie geltend gemacht, bis sie durch die Zustandsmaschine gemäß 147 bestätigt wird. Diese Bestätigung wird ausgeführt, wenn die Zustandsmaschine in den Zustand RCASON 1980 eintritt, und bleibt geltend gemacht, bis die Zustandsmaschine erfasst, dass aufgehört worden ist, die Auffrischungsanforderung geltend zu machen.
  • In 148 ist der Betrieb der Arbitrierungseinrichtung 1924 gemäß 146 in einer Pseudocodeform dargelegt. Sie veranschaulicht das Verfahren zum Bestimmen, welchem von vier Zyklusanforderern ein Zugriff auf die regelmäßige Speicheranordnung 1910 bewilligt wird, und auch einen Mechanismus zum Modifizieren der Zyklusanfordererprioritäten zum Aufrechterhalten einer gerechten Zugriffsordnung. Die in diesem Code verwendeten Symbole sind in 149 erläutert.
  • Jedem Anforderer sind 4 Bits zugeordnet, die die Priorität des Anforderers darstellen. Die zwei höherwertigen Bits werden auf dem Weg über in einem allgemeinen Konfigurationsregister eingestellte Konfigurationswerte auf eine Gesamtpriorität voreingestellt. Die zwei niederwertigen Bits der Priorität werden in einem 2-Bit-Zähler gehalten, der durch die Arbitrierungseinrichtung 24 aktualisiert wird. Wenn sie den Sieger bei einer Arbitrierung bestimmt, vergleicht die Arbitrierungseinrichtung 1924 einfach die 4-Bit-Werte jedes der Anforderer und gewährt dem Anforderer mit dem höchsten Wert Zugriff. Wenn einem Anforderer ein Zyklus bewilligt wird, wird sein niederwertiger 2-Bit-Prioritätszählwert auf null zurückgesetzt, während bei allen anderen Anforderern mit identischen höherwertigen 2-Bit-Prioritätswerten, deren niederwertige 2-Bit-Priorität kleiner als die niederwertige 2-Bit-Priorität des Siegers ist, ihre niederwertigen 2-Bit-Prioritätszählwerte um eins erhöht werden. Dies hat die Wirkung, dass einem Anforderer, dem gerade Zugriff auf die regelmäßige Speicheranordnung 1910 gewährt worden ist, die niedrigste Priorität unter Anforderern mit dem gleichen höherwertigen 2-Bit-Wert der Priorität zugewiesen wird. Der niederwertige 2-Bit-Wert der Priorität von anderen Anforderern mit einem höherwertigen 2-Bit-Wert der Priorität, der von dem des gewinnenden Anforderers verschieden ist, wird nicht beeinflusst. Die höherwertigen zwei Bits der Priorität bestimmen die Gesamtpriorität eines Anforderers, während die niederwertigen zwei Bits ein gerechtes Arbitrierungsschema unter Anforderern mit identischer höherwertiger Priorität einfließen lassen. Dieses Schema erlaubt es, eine Anzahl von Arbitrierungsschemata zu realisieren, die von einer festverdrahteten festen Priorität (höherwertige zwei Bits jedes Anforderers eindeutig) über teilweise rotierend und teilweise festverdrahtet (einige höherwertige 2-Bit-Prioritäten von anderen verschieden, aber nicht alle) zu völlig gerecht und rotierend (alle höherwertigen 2-Bit-Felder der Priorität die gleichen) reichen.
  • 149 stellt die Struktur der jedem Anforderer zugeordneten Prioritätsbits und wie die Bits genutzt werden dar. Sie definiert auch die in 148 verwendeten Symbole.
  • Bei dem bevorzugten Ausführungsbeispiel sind die verschiedenen FIFOs 1920, 1922, 1938 und 1936 32 Bits breit und 32 Wörter tief. Diese spezielle Tiefe stellt einen guten Kompromiss zwischen Effizienz und verbrauchtem Schaltungsbereich bereit. Die Tiefe kann jedoch mit einer entsprechenden Änderung bei der Leistung verändert werden, um dem Bedarf einer speziellen Anwendung zu entsprechen.
  • Ferner ist der gezeigte Aufbau mit vier Anschlüssen lediglich ein bevorzugtes Ausführungsbeispiel. Selbst die Bereitstellung eines einzelnen FIFO-Puffers zwischen der regelmäßigen Speicheranordnung und entweder einem Leseanschluss oder einem Schreibanschluss wird einige Vorteile bereitstellen. Die Verwendung von mehreren Leseanschlüssen und Schreibanschlüssen stellt jedoch die größte potentielle Geschwindigkeitserhöhung bereit.
  • 3.16.9 Sonstiges-Modul
  • Das Sonstiges-Modul 239 stellt eine Takterzeugung und -auswahl für den Betrieb des Coprozessors 224, eine Rücksetzungssynchronisation, ein Multiplexen von Fehler- und Unterbrechungssignalen durch ein Leiten von internen Diagnosesignalen zu externen Pins nach Bedarf, ein Koppeln zwischen der internen und externen Form des CBus und ein Multiplexen von internen und generischen Bussignalen auf Ausgabepins eines generischen/externen CBus bereit. Selbstverständlich variiert der Betrieb des Sonstiges-Moduls 239 gemäß Taktanforderungen und Realisierungseinzelheiten, die von der genutzten ASIC-Technologie abhängen.
  • 3.16.10 Externe-Schnittstelle-Steuerungseinrichtung
  • Die Externe-Schnittstelle-Steuerungseinrichtung (EIC) 238 stellt die Schnittstelle des Coprozessors zu dem PCI-Bus und zu einem generischen Bus bereit. Sie stellt auch eine Speicherverwaltung zum Übersetzen zwischen dem internen virtuellen Adressraum des Coprozessors und dem physikalischen Adressraum des Hostsystems bereit. Die Externe-Schnittstelle-Steuerungseinrichtung 238 fungiert als ein Master auf dem PCI-Bus, wenn sie im Ansprechen auf eine Anforderung von dem Eingabeschnittstellenschalter 252 die Daten aus dem Hostspeicher liest und wenn sie im Ansprechen auf eine Anforderung von der Ergebnisorganisationseinrichtung 249 Daten in den Hostspeicher schreibt. Der PCI-Bus-Zugriff wird gemäß dem allgemein bekannten Standard mit "PCI Local Bus specification, draft 2.1", PCI Special Interest Group, 1994 realisiert.
  • Die Externe-Schnittstelle-Steuerungseinrichtung 238 arbitriert zwischen gleichzeitigen Anforderungen von PCI-Transaktionen von dem Eingabeschnittstellenschalter 252 und der Ergebnisorganisationseinrichtung 249. Die Arbitrierung ist vorzugsweise konfigurierbar. Die Typen von empfangenen Anforderungen schließen Transaktionen zum Lesen von jeweils weniger als einer Cache-Zeile des Hostcoprozessors, Lesen von zwischen einer und zwei Cache-Zeilen des Hosts und Lesen von zwei oder mehr Cache-Zeilen des Hosts ein. Schreibtransaktionen von unbegrenzter Länge werden ebenfalls durch die Externe-Schnittstelle-Steuerungseinrichtung 238 realisiert. Ferner führt die Externe-Schnittstelle-Steuerungseinrichtung 238 optional auch ein Vorababrufen von Daten durch.
  • Die Konstruktion der Externe-Schnittstelle-Steuerungseinrichtung 238 schließt eine Speicherverwaltungseinheit ein, die eine Virtuelle-auf-physikalische-Adresse-Abbildung von Hostspeicherzugriffen für alle die internen Module des Coprozessors bereitstellt. Diese Abbildung ist für das den Zugriff anfordernde Modul vollständig transparent. Wenn die Externe-Schnittstelle-Steuerungseinrichtung 238 eine Anforderung eines Hostspeicherzugriffs empfängt, leitet sie eine Speicherverwaltungseinheitsoperation zum Übersetzen der angeforderten Adresse ein. Wenn die Speicherverwaltungseinheit die Adresse nicht übersetzen kann, führt dies in einigen Fällen zu einer PCI-Bus-Transaktion oder mehreren PCI-Bus-Transaktionen zum Vervollständigen der Adressübersetzung. Dies bedeutet, dass die Speicherverwaltungseinheit selbst eine andere Quelle von Transaktionsanforderungen auf dem PCI-Bus sein kann. Falls ein angeforderter Burst von dem Eingabeschnittstellenschalter 252 oder der Ergebnisorganisationseinrichtung 249 die Grenze einer virtuellen Seite kreuzt, erzeugt die Externe-Schnittstelle-Steuerungseinrichtung 238 automatisch eine Speicherverwaltungseinheitsoperation zum richtigen Abbilden aller virtuellen Adressen.
  • Die Speicherverwaltungseinheit (MMU) (915 gemäß 150) basiert rund um einen Adressübersetzungspuffer (TLB, translation look aside buffer) mit 16 Einträgen. Der TLB fungiert als ein Cache von Virtuelle-auf-physikalische-Adresse-Abbildungen. Die folgenden Operationen sind bei dem TLB möglich:
    • 1) Vergleichen: Eine virtuelle Adresse wird präsentiert, und der TLB gibt entweder die entsprechende physikalische Adresse oder ein TLB-Fehlschlagssignal (falls kein gültiger Eintrag zu der Adresse passt) zurück.
    • 2) Ersetzen: Eine neue Virtuell-auf-physikalisch-Abbildung wird in den TLB geschrieben, die einen vorhandenen Eintrag oder einen ungültigen Eintrag ersetzt.
    • 3) Für ungültig erklären: Eine virtuelle Adresse wird präsentiert; falls sie zu einem TLB-Eintrag passt, wird der Eintrag als ungültig markiert.
    • 4) Alle für ungültig erklären. Alle TLB-Einträge werden als ungültig markiert.
    • 5) Lesen: Die virtuelle oder physikalische Adresse eines TLB-Eintrags wird basierend auf einer 4-Bit-Adresse gelesen. Nur zum Testen verwendet.
    • 6) Schreiben: Die virtuelle und physikalische Adresse eines TLB-Eintrags werden basierend auf einer 4-Bit-Adresse geschrieben.
  • Einträge in dem TLB weisen das in 151 gezeigte Format auf. Jeder gültige Eintrag besteht aus einer virtuellen 20-Bit-Adresse 670, einer physikalischen 20-Bit-Adresse 671 und einem Zustandsmerker, der angibt, ob die entsprechende physikalische Seite schreibbar ist. Die Einträge berücksichtigen Seitengrößen, die so klein wie 4 kB sind. Ein Register in der MMU kann zum Ausmaskieren (mask off) von bis zu 10 Bits der bei dem Vergleich verwendeten Adressen verwendet werden. Dies erlaubt es dem TLB, Seiten von bis zu 4 MB zu unterstützen. Da nur ein Maskenregister vorhanden ist, verweisen alle TLB-Einträge auf Seiten der gleichen Größe.
  • Der TLB verwendet einen Ersetzungsalgorithmus "Am-längsten-nicht-verwendet" (LRU, "least-recently-used"). Ein neuer Eintrag wird über den Eintrag geschrieben, bei dem die längste Zeit verstrichen ist, seit er zuletzt geschrieben oder in einer Vergleichsoperation verglichen wurde. Dies findet nur Anwendung, falls keine ungültigen Einträge vorhanden sind; falls diese vorhanden sind, wird in sie geschrieben, bevor irgendwelche gültigen Einträge überschrieben werden.
  • 152 zeigt den Ablauf einer erfolgreichen TLB-Vergleichsoperation. Die eingehende virtuelle Adresse 880 wird in 3 Teile 881883 aufgeteilt. Die unteren 12 Bits 881 sind immer Teil des Offsets innerhalb einer Seite und werden so direkt an die entsprechenden Bits 885 der physikalischen Adresse weitergegeben. Die nächsten 10 Bits 882 sind abhängig von der Seitengröße wie durch die Maskenbits eingestellt entweder Teil des Offsets oder Teil der Seitenzahl. Eine Null in dem Maskenregister 887 gibt an, dass das Bit Teil des Seitenoffsets ist und nicht für TLB-Vergleiche verwendet werden sollte. Die 10 Adressbits werden logisch mit den 10 Maskenbits "GEUNDET" ("ANDED"), um die unteren 10 Bits der virtuellen Seitenzahl 889 für TLB-Nachschlagevorgänge zu ergeben. Die oberen 10 Bits 883 der virtuellen Adresse werden direkt als die oberen 10 Bits der virtuellen Seitenzahl 889 verwendet.
  • Die so erzeugte virtuelle 20-Bit-Seitenzahl wird in den TLB gelenkt. Falls sie zu einem der Einträge passt, gibt der TLB die entsprechende physikalische Seitenzahl 872 und die Zahl der entsprechenden Stelle zurück. Die physikalische Adresse 873 wird unter erneuter Verwendung des Maskenregisters 887 aus der physikalischen Seitenzahl erzeugt. Die obersten 10 Bits der physikalischen Seitenzahl 872 werden direkt als die obersten 10 Bits der physikalischen Adresse 873 verwendet. Die nächsten 10 Bits der physikalischen Adresse 872 werden aus entweder der physikalischen Seitenzahl (falls das entsprechende Maskenbit 1 ist) oder der virtuellen Adresse (falls das Maskenbit 0 ist) gewählt 875. Die unteren 12 Bits 885 der physikalischen Adresse kommen direkt von der virtuellen Adresse.
  • Schließlich wird einer Entsprechung folgend der LRU-Puffer 876 aktualisiert, um die Verwendung der entsprechenden Adresse widerzuspiegeln.
  • Ein TLB-Fehlschlag tritt auf, wenn der Eingabeschnittstellenschalter 252 oder die Ergebnisorganisationseinrichtung 249 einen Zugriff auf eine virtuelle Adresse anfordert, die nicht in dem TLB 872 vorhanden ist. In diesem Fall muss die MMU die erforderliche Virtuell-zu-physikalisch-Übersetzung aus der Seitentabelle in dem Hostspeicher 230 abrufen und sie in den TLB schreiben, bevor sie mit dem angeforderten Zugriff fortfährt.
  • Die Seitentabelle ist eine Hash-Tabelle in dem Hauptspeicher des Hosts. Jeder Seitentabelleneintrag besteht aus zwei 32-Bit-Wörtern mit dem in 153 gezeigten Format. Das zweite Wort umfasst die oberen 20 Bits für die physikalische Adresse, und die unteren 12 Bits sind reserviert. Die oberen 20 Bits der entsprechenden virtuellen Adresse sind in dem ersten Wort bereitgestellt. Die unteren 12 Bits schließen ein Gültig-Bit (V) und ein Schreibbar- (W) oder "Nur-lesen"-Bit ein, wobei die verbleibenden 10 Bits reserviert sind.
  • Der Seitentabelleneintrag enthält im Wesentlichen die gleichen Informationen wie der TLB-Eintrag. Ferner sind Zustandsmerker in der Seitentabelle reserviert. Die Seitentabelle selbst kann über mehrere Seiten in dem Hauptspeicher 203, die im Allgemeinen im virtuellen Raum, aber nicht im physikalischen Raum, zusammenhängend sind, verteilt sein und ist dies typischerweise.
  • Die MMU enthält einen Satz von 16 durch Software eingerichteten Seitetabellenzeigern, von denen jeder ein 20-Bit-Zeiger auf einen einen Teil der Seitentabelle enthaltenden 4 KB-Speicherbereich ist. Dies bedeutet, dass der Coprozessor 224 eine Seitentabelle der Größe 64 KB unterstützt, die 8k-Seitenabbildungen hält. Für Systeme mit einer Seitengröße von 4 kB bedeutet dies maximal 32 MB von abgebildetem virtuellem Adressraum. Vorzugsweise verweisen die Seitentabellenzeiger ohne Rücksicht auf die in dem TLB verwendete Seitengröße immer auf einen 4 KB-Speicherbereich.
  • Die einem TLB-Fehlschlag folgende Operation der MMU ist in 154 gezeigt 690 wie folgt:
    • 1. Die Hash-Funktion 892 bei der virtuellen Seitenzahl 891 ausführen, die in dem TLB gefehlt hat, um einen 13-Bit-Index in die Seitentabelle zu erzeugen.
    • 2. Die oberen 4 Bits 894 des Seitentabellenindex 894, 896 zum Auswählen eines Seitentabellenzeigers 895 verwenden.
    • 3. Die physikalische Adresse 890 des erforderlichen Seitentabelleneintrags durch ein Verketten des 20-Bit-Seitentabellenzeigers 895 mit den unteren 9 Bits des Seitentabellenindex 896 erzeugen, wobei die untersten 3 Bits auf 000 eingestellt werden (da Seitentabelleneinträge 8 Bytes in dem Hostspeicher belegen).
    • 4. Bei der physikalischen Seitentabelleneintragsadresse 898 anfangend 8 Bytes aus dem Hostspeicher lesen.
    • 5. Wenn der 8-Byte-Seitentabelleneintrag 900 über den PCI-Bus zurückgegeben wird, wird die virtuelle Seitenzahl unter der Voraussetzung, dass das Bit GÜLTIG auf 1 eingestellt ist, mit der ursprünglichen virtuellen Seitenzahl, die den TLB-Fehlschlag verursacht hat, verglichen. Falls sie nicht passt, wird der nächste Seitentabelleneintrag unter Verwendung des vorstehend beschriebenen Prozesses abgerufen (wobei die physikalische Adresse um 8 Bytes erhöht wird). Dies setzt sich fort, bis ein Seitentabelleneintrag mit einer passenden virtuellen Seitenzahl gefunden wird oder ein ungültiger Seitentabelleneintrag gefunden wird. Falls ein ungültiger Seitentabelleneintrag gefunden wird, wird ein Seitenfehler-Fehler signalisiert, und die Verarbeitung stoppt.
    • 6. Wenn ein Seitentabelleneintrag mit einer passenden virtuellen Seitenzahl gefunden wird, wird der vollständige Eintrag unter Verwendung der Ersetzungsoperation in den TLB geschrieben. Der neue Eintrag wird an der TLB-Stelle platziert, auf die durch den LRU-Puffer 876 gezeigt wird.
  • Die TLB-Vergleichsoperation wird daraufhin erneut versucht und wird gelingen, und der ursprünglich angeforderte Hostspeicherzugriff kann weitergehen. Der LRU-Puffer 876 wird aktualisiert, wenn der neue Eintrag in den TLB geschrieben wird.
  • Die in der EIC 238 realisierte Hash-Funktion 892 verwendet die folgende Gleichung bei den 20 Bits der virtuellen Seitenzahl (vpn): index = ((vpn >> S1) XOR (vpn >> S2) XOR (vpn >> S3)) & Ox1fff;wobei S1, S2 und S3 unabhängig programmierbare Verschiebungsausmaße (positiv oder negativ) sind, von denen jedes vier Werte annehmen kann.
  • Falls die lineare Suche durch die Seitentabelle eine 4 kB-Grenze kreuzt, wählt die MMU automatisch den nächsten Seitentabellenzeiger zum Fortsetzen der Suche bei der richtigen physikalischen Speicherstelle aus. Dies schließt ein Umbrechen von dem Ende der Seitentabelle zu dem Anfang ein. Die Seitentabelle enthält immer zumindest einen ungültigen Eintrag (Leereintrag), so dass die Suche immer endet.
  • Wann immer die Software eine Seite in dem Hostspeicher ersetzt, muss sie einen Seitentabelleneintrag für die neue virtuelle Seite hinzufügen und den der Seite, die ersetzt worden ist, entsprechenden Eintrag entfernen. Sie muss auch sicherstellen, dass der alte Seitentabelleneintrag nicht in dem TLB bei dem Coprozessor 224 zwischengespeichert wird. Dies wird erreicht, indem ein TLB-für-ungültig-erklären-Zyklus (TLB invalidation cycle) in der MMU durchgeführt wird.
  • Ein Für-ungültig-erklären-Zyklus wird über ein Registerschreiben in die MMU durchgeführt, wobei die für ungültig zu erklärende virtuelle Seitenzahl zusammen mit einem Bit, das die Durchführung der Für-ungültig-erklären-Operation veranlasst, bestimmt wird. Dieses Registerschreiben kann direkt durch die Software oder über eine durch den Anweisungsdecodierer interpretierte Anweisung durchgeführt werden. Eine Für-ungültig-erklären-Operation wird bei dem TLB für die zugeführte virtuelle Seitenzahl durchgeführt. Falls sie zu einem TLB-Eintrag passt, wird der Eintrag als ungültig markiert und die LRU-Tabelle aktualisiert, so dass die für ungültig erklärte Stelle für die nächste Ersetzungsoperation verwendet wird.
  • Eine anstehende Für-ungültig-erklären-Operation hat Priorität über irgendwelche anstehenden TLB-Vergleichsvorgänge. Wenn die Für-ungültig-erklären-Operation abgeschlossen ist, setzt die MMU das Für-ungültig-erklären-Bit zurück, um zu signalisieren, dass sie einen weiteren Für-ungültig-erklären-Vorgang verarbeiten kann.
  • Falls die MMU es nicht schafft einen gültigen Seitentabelleneintrag für eine angeforderte virtuelle Adresse zu finden, wird dies als ein Seitenfehler (page fault) bezeichnet. Die MMU signalisiert einen Fehler und speichert die virtuelle Adresse, die den Fehler verursacht hat, in einem durch Software zugänglichen Register. Die MMU geht in einen Leerlaufzustand und wartet, bis dieser Fehler zurückgesetzt wird. Wenn die Unterbrechung zurückgesetzt wird, macht die MMU von der nächsten angeforderten Transaktion aus weiter.
  • Es wird auch ein Seitenfehler signalisiert, falls eine Schreiboperation in eine Seite, die (nicht als schreibbar markiert) als nur lesbar markiert ist, versucht wird.
  • Die Externe-Schnittstelle-Steuerungseinrichtung (EIC) 238 kann Transaktionsanforderungen von dem Eingabeschnittstellenschalter 252 und der Ergebnisorganisationseinrichtung 249 abarbeiten, die an den generischen Bus adressiert sind. Jedes der anfordernden Module gibt an, ob die derzeitige Anforderung für den generischen Bus oder den PCI-Bus ist. Abgesehen von einem Verwenden von gemeinsamen Bussen zum Kommunizieren mit dem Eingabeschnittstellenschalter 252 und der Ergebnisorganisationseinrichtung 249 ist die Operation der EIC für Generischer-Bus-Anforderungen vollständig von ihrer Operation für PCI-Anforderungen getrennt. Die EIC 238 kann auch CBus-Transaktionstypen abarbeiten, die den Raum des generischen Busses direkt adressieren.
  • 150 zeigt die Struktur der Externe-Schnittstelle-Steuerungseinrichtung 238. Die IBus-Anforderungen gehen durch einen Multiplexer 910, der die Anforderungen basierend auf dem Ziel der Anforderung (PCI oder generischer Bus) zu dem passenden internen Modul leitet. Anforderungen an den generischen Bus gehen zu der Generischer-Bus-Steuerungseinrichtung 911 weiter, die auch RBus- und CBus-Schnittstellen aufweist. Generischer-Bus- und PCI-Bus-Anforderungen auf dem RBus verwenden verschiedene Steuerungssignale, so dass bei diesem Bus kein Multiplexer erforderlich ist.
  • An den PCI-Bus gerichtete IBus-Anforderungen werden durch eine IBus-Ansteuerungseinrichtung (IBD) 912 gehandhabt. Auf ähnliche Weise handhabt ein RBus-Empfänger (RBR) 914 die RBus-Anforderungen an PCI. Die IBD 912 und der RBR 914 lenken jeweils virtuelle Adressen zu der Speicherverwaltungseinheit (MMU) 915, die im Gegenzug physikalische Adressen bereitstellt. Die IBD, der RBR und die MMU können jeweils PCI-Transaktionen anfordern, die durch die PCI-Masterbetriebsartsteuerungseinrichtung (PMC, PCI master mode controller) 917 erzeugt und gesteuert werden. Die IBD und die MMU fordern nur PCI-Lesetransaktionen an, während der RBR nur PCI-Schreibtransaktionen anfordert.
  • Eine getrennte PCI-Zielbetriebsartsteuerungseinrichtung (PTC, PCI Target Mode Controller) 918 handhabt alle an den Coprozessor als ein Ziel adressierten PCI-Transaktionen. Diese lenkt CBus-Masterbetriebsartsignale zu der Anweisungssteuerungseinrichtung, was es ihr erlaubt, auf alle anderen Module zuzugreifen. Die PTC leitet zu dem PCI-Bus zu lenkende zurückgegebene CBus-Daten über die PMC, so dass die Steuerung der PCI-Datenbus-Pins von einer einzelnen Quelle kommt.
  • Eine Standard-CBus-Schnittstelle 7 befasst sich mit an EIC-Register und Modulspeicher adressierten CBus-Transaktionen. Alle Untermodule empfangen einige Bits aus Steuerungsregistern und geben einige Bits zu Statusregistern zurück, die sich in der Standard-CBus-Schnittstelle befinden.
  • Eine Paritätserzeugung und -überprüfung für PCI-Bus-Transaktionen wird durch das Paritätserzeugungs- und -überprüfungsmodul (PGC-Modul) 921 gehandhabt, das unter der Steuerung der PMC und der PTC arbeitet. Eine erzeugte Parität wird auf den PCI-Bus gelenkt, so wie dies für Paritätsfehlersignale geschieht. Die Ergebnisse der Paritätsüberprüfung werden auch zur Fehlerberichtserstattung zu dem Konfigurationsregisterabschnitt der PTC gesendet.
  • 155 veranschaulicht die Struktur der IBus-Ansteuerungseinrichtung 912 gemäß 150. Eingehende IBus-Adress- und -Steuerungssignale werden bei dem Start eines Zyklus zwischengespeichert 930. Ein ODER-Gatter 931 erfasst den Start des Zyklus und erzeugt ein Startsignal für eine Steuerungslogik 932. Die obersten Adressbits des Haltespeichers 930, die die virtuelle Seitenzahl bilden, werden in einen Zähler 935 geladen. Die virtuelle Seitenzahl wird zu der MMU 915 (150) geleitet, die eine physikalische Seitenzahl zurückgibt, die zwischengespeichert wird 936.
  • Die physikalische Seitenzahl und die unteren Bits der virtuellen Adresse werden gemäß der Maske 937 neu kombiniert und bilden die Adresse 938 für PCI-Anforderungen an die PMC 717 (102). Der Burst-Zählwert für den Zyklus wird ebenfalls in einen Zähler 939 geladen. Vorababrufoperationen verwenden einen anderen Zähler 941 sowie eine Adresshaltespeicher- und -vergleichsschaltung 943.
  • Von der PMC zurückgegebene Daten werden zusammen mit einer Markierung, die angibt, ob die Daten Teil eines Vorababrufs sind, in einen FIFO 944 geladen. Während Daten auf der Vorderseite des FIFO 944 verfügbar werden, werden sie durch die Leselogik über Synchronisationshaltespeicher 945, 946 herausgetaktet (clocked out). Die Leselogik 946 erzeugt auch das IBus-Bestätigungssignal.
  • Ein zentraler Steuerungsblock 932, der Zustandsmaschinen aufweist, steuert die Ablaufsteuerung aller der Adress- und Datenelemente sowie die Schnittstelle zu der PMC.
  • Der Virtuelle-Seitenzahl-Zähler 935 wird bei dem Start einer IBus-Transaktion mit den Seitenzahlbits aus der IBus-Adresse geladen. Die obersten 10 Bits dieses 20-Bit-Zählers kommen immer aus der eingehenden Adresse. Für die unteren 10 Bits wird jedes Bit aus der eingehenden Adresse geladen, falls das entsprechende Maskenbit 937 auf 1 eingestellt ist; andernfalls wird das Zählerbit auf 1 eingestellt. Der 20-Bit-Wert wird zu der MMU-Schnittstelle weitergeleitet.
  • Im normalen Betrieb wird die virtuelle Seitenzahl nach der anfänglichen Adressübersetzung nicht verwendet. Falls die IBD jedoch erfasst, dass der Burst eine Seitengrenze gekreuzt hat, wird der Virtuelle-Seite-Zähler erhöht, und eine weitere Übersetzung wird durchgeführt. Da die niederwertigen Bits, die nicht Teil der virtuellen Seitenzahl sind, auf 1 eingestellt werden, wenn der Zähler geladen wird, veranlasst eine einfache Erhöhung bei dem ganzen 20-Bit-Wert immer eine Erhöhung des tatsächlichen Seitenzahlfelds. Die Maskenbits 937 werden nach einer Erhöhung wieder verwendet, um den Zähler für irgendwelche nachfolgenden Erhöhungen einzurichten.
  • Die physikalische Adresse wird zwischengespeichert 936, wann immer die MMU nach der Übersetzung eine gültige physikalische Seitenzahl zurückgibt. Die Maskenbits werden zum richtigen Kombinieren der zurückgegebenen physikalischen Seitenzahl mit den ursprünglichen Bits der virtuellen Adresse verwendet.
  • Der Physikalische-Adresse-Zähler 938 wird aus dem Physikalische-Adresse-Haltespeicher 936 geladen. Er wird jedes Mal erhöht, wenn ein Wort von der PMC zurückgegeben wird. Der Zählwert wird überwacht, während er zunimmt, um zu bestimmen, ob die Transaktion dabei ist, eine Seitengrenze zu kreuzen. Die Maskenbits werden zum Bestimmen, welche Bits des Zählers für den Vergleich verwendet werden sollten, verwendet. Wenn der Zähler erfasst, dass zwei oder weniger in der Seite verbleibende Wörter vorhanden sind, signalisiert er dies der Steuerungslogik 932, die die derzeitige PCI-Anforderung nach zwei weiteren Datentransfers beendet und bei Bedarf eine neue Adressübersetzung anfordert. Der Zähler wird nach der neuen Adressübersetzung neu geladen, und die PCI-Anforderungen werden fortgesetzt.
  • Der Burst-Zähler 939 ist ein 6-Bit-Rückwärtszähler, der bei dem Beginn einer Transaktion mit dem IBus-Burst-Wert geladen wird. Er wird jedes Mal erniedrigt, wenn ein Wort von der PMC zurückgegeben wird. Wenn der Zählerwert zwei oder weniger beträgt, signalisiert er dies der Steuerungslogik 932, die daraufhin die PCI-Transaktion mit zwei weiteren Datentransfers richtig beenden kann (es sei denn, dass ein Vorababrufen freigegeben ist).
  • Das Vorababrufadressregister 943 wird mit der physikalischen Adresse des ersten Worts eines Vorababrufs geladen. Wenn die nachfolgende IBus-Transaktion startet und der Vorababrufzähler angibt, dass zumindest ein Wort erfolgreich vorab abgerufen wurde, wird die erste physikalische Adresse der Transaktion mit dem Wert in dem Vorababrufadresshaltespeicher verglichen. Falls sie gepasst hat, werden die Vorababrufdaten zum Erfüllen der IBus-Transaktion verwendet, und eine PCI-Transaktion fordert einen Start bei der Adresse nach dem letzten vorab abgerufenen Wort an.
  • Der Vorababrufzähler 941 ist ein 4-Bit-Zähler, der erhöht wird, wann immer während einer Vorababrufoperation ein Wort durch die PMC zurückgegeben wird, bis zu einem maximalen Zählwert gleich der Tiefe des Eingabe-FIFO. Wenn die nachfolgende IBus-Transaktion zu der Vorababrufadresse passt, wird der Vorababrufzählwert zu dem Adresszähler addiert und von dem Burst-Zähler subtrahiert, so dass PCI-Anforderungen an der erforderlichen Stelle starten können. Falls die IBus-Transaktion nur einige der vorab abgerufenen Daten benötigt, wird alternativ die angeforderte Burst-Länge von dem Vorababrufzählwert subtrahiert und zu der zwischengespeicherten Vorababrufadresse addiert, und die verbleibenden Vorababrufdaten werden zum Erfüllen weiterer Anforderungen beibehalten.
  • Der Daten-FIFO 944 ist ein 8 Wörter mal 33 Bits asynchroner Durchfall-FIFO (fall through FIFO). Daten von der PMC werden zusammen mit einem Bit, das angibt, ob die Daten Teil eines Vorababrufs sind, in den FIFO geschrieben. Daten von der Vorderseite des FIFO werden ausgelesen und auf den IBus gelenkt, sobald sie verfügbar werden. Die Logik, die die Datenlesesignale erzeugt, arbeitet synchron zu clk (Takt) und erzeugt die IBus-Bestätigungsausgabe. Falls die Transaktion unter Verwendung von vorab abgerufenen Daten zu erfüllen ist, sagen Signale von der Steuerungslogik der Leselogik, wie viele Wörter von vorab abgerufenen Daten aus dem FIFO gelesen werden sollten.
  • 156 veranschaulicht die Struktur des RBus-Empfängers 1914 gemäß 150. Die Steuerung ist zwischen zwei Zustandsmaschinen 950, 951 aufgeteilt. Die Schreibzustandsmaschine 951 steuert die Schnittstelle zu dem RBus. Die Eingabeadresse 752 wird bei dem Start eine RBus-Bursts zwischengespeichert. Jedes Datenwort des Bursts wird zusammen mit seinen Bytefreigaben in einen FIFO 754 geschrieben. Falls der FIFO 954 voll wird, wird durch die Schreiblogik 951 aufgehört, r-ready geltend zu machen, um die Ergebnisorganisationseinrichtung daran zu hindern, zu versuchen, noch mehr Wörter zu schreiben.
  • Die Schreiblogik 951 setzt die Hauptzustandsmaschine 950 über ein neu synchronisiertes Startsignal von dem Start eines RBus-Bursts in Kenntnis, um die Ergebnisorganisationseinrichtung daran zu hindern, zu versuchen, noch mehr Wörter zu schreiben. Die obersten Adressbits, die die virtuelle Seitenzahl bilden, werden in einen Zähler 957 geladen. Die virtuelle Seitenzahl wird zu der MMU geleitet, die eine physikalische Seitenzahl 958 zurückgibt. Die physikalische Seitenzahl und die unteren Bits der virtuellen Adresse werden gemäß der Maske neu kombiniert und in einen Zähler 960 geladen, um die Adresse für PCI-Anforderungen für die PMC bereitzustellen. Daten und Bytefreigaben für jedes Wort der PCI-Anforderung werden durch die Hauptsteuerungslogik 950, die auch alle PMCM-Schnittstelle-Steuerungssignale handhabt, aus dem FIFO 954 herausgetaktet. Die Hauptzustandsmaschine gibt über ein Beschäftigt-Signal, das neu synchronisiert und zu der Schreibzustandsmaschine zurückgegeben wird, an, dass sie aktiv ist.
  • Die Schreibzustandsmaschine 951 erfasst unter Verwendung von r-final das Ende eines RBus-Bursts. Sie stoppt das Laden von Daten in den FIFO 954 und signalisiert der Hauptzustandsmaschine, dass der RBus-Burst beendet ist. Die Hauptzustandsmaschine setzt die PCI-Anforderungen fort, bis der Daten-FIFO geleert worden ist. Sie hört daraufhin auf, beschäftigt (busy) geltend zu machen, was der Schreibzustandsmaschine erlaubt, den nächsten RBus-Burst zu starten.
  • Zu 150 zurückkehrend ist die Speicherverwaltungseinheit 915 für ein Übersetzen von virtuellen Seitenzahlen in physikalische Seitenzahlen für die IBus-Ansteuerungseinrichtung (IBD) 912 und den RBus-Empfänger (IBR) 914 verantwortlich. 157 zugewendet ist dort die Speicherverwaltungseinheit ausführlicher veranschaulicht. Ein Adressübersetzungspuffer (TLB) mit 16 Einträgen 970 nimmt seine Eingaben von der TLB-Adresslogik 971 und lenkt seine Ausgaben zu ihr. Die TLB-Steuerungslogik 972, die eine Zustandsmaschine enthält, empfängt eine in der TLB-Adresslogik gepufferte Anforderung von dem RBR oder der IBD. Sie wählt die Quelle der Eingaben aus und wählt die durch den TLB durchzuführende Operation aus. Gültige TLB-Operationen sind Vergleichen, für ungültig Erklären, alles für ungültig Erklären, Schreiben und Lesen. Quellen von TLB-Eingabeadressen sind die IBD- und RBR-Schnittstellen (für Vergleichsoperationen), der Seitentabelleneintragspuffer 974 (für TLB-Fehlschlag-Dienste) oder Register in der TLB-Adresslogik. Der TLB gibt den Status jeder Operation zu der TLB-Steuerungslogik zurück. Physikalische Seitenzahlen von erfolgreichen Vergleichsoperationen werden zurück zu der IBD und dem RBR gelenkt. Der TLB unterhält einen Datensatz seiner Am-längsten-nicht-verwendet-Stelle (LRU-Stelle), der zur Verwendung als eine Stelle für Schreiboperationen für die TLB-Adresslogik verfügbar ist.
  • Wenn eine Vergleichsoperation fehlschlägt, signalisiert die TLB-Steuerungslogik 972 der Seitentabellenzugriffssteuerungslogik 976, eine PCI-Anforderung zu starten. Die Seitentabellenadresserzeugungseinrichtung 977 erzeugt die PCI-Adresse unter Verwendung ihrer internen Seitentabellenzeigerregister basierend auf der virtuellen Seitenzahl. Von der PCI-Anforderung zurückgegebene Daten werden in dem Seitentabelleneintragspuffer 974 zwischengespeichert. Wenn ein Seitentabelleneintrag gefunden wird, der zu der erforderlichen virtuellen Adresse passt, wird die physikalische Seitenzahl zu der TLB-Adresslogik 977 gelenkt, und die Seitentabellenzugriffssteuerungslogik 976 signalisiert, dass der Seitentabellenzugriff abgeschlossen ist. Die TLB-Steuerungslogik 972 schreibt daraufhin den neuen Eintrag in den TLB und versucht die Vergleichsoperation erneut.
  • Registersignale zu und von der SCI werden in beiden Richtungen neu synchronisiert 980. Die Signale gehen zu und von allen anderen Untermodulen. Eine Modulspeicherschnittstelle 981 decodiert einen Zugriff von der Standard-CBus-Schnittstelle auf den TLB und Seitentabellenzeigerspeicherelemente. TLB-Zugriffe sind nur zum Lesen und verwenden die TLB-Steuerungslogik zum Erhalten der Daten. Die Seitentabellenzeiger sind zum Lesen/Schreiben, und es wird durch die Modulspeicherschnittstelle direkt auf sie zugegriffen. Diese Wege enthalten auch Synchronisationsschaltungen.
  • 3.16.11 Peripherieschnittstelle-Steuerungseinrichtung
  • Nachstehend 158 zugewendet ist dort eine Form der Peripherieschnittstelle-Steuerungseinrichtung (PIC) 237 gemäß 2 ausführlicher veranschaulicht. Die PIC 237 arbeitet in einer Betriebsart einer Anzahl von Betriebsarten zum Transferieren von Daten zu oder von einer externen Peripherievorrichtung. Die grundlegenden Betriebsarten sind:
    • 1) Videoausgabebetriebsart. In dieser Betriebsart werden Daten unter der Steuerung eines externen Videotakts und von Takt-/Datenfreigaben zu einem Peripheriegerät transferiert. Die PIC 237 steuert einen Ausgabetakt und Taktfreigabezeichen mit dem erforderlichen Zeitverlauf mit Bezug auf die Ausgabedaten an.
    • 2) Videoeingabebetriebsart. In dieser Betriebsart werden Daten unter der Steuerung eines externen Videotakts und einer Datenfreigabe von einem Peripheriegerät transferiert.
    • 3) Centronics-Betriebsart. Diese Betriebsart transferiert Daten gemäß dem in dem Standard IEEE 1284 definierten Standardprotokoll zu und von dem Peripheriegerät.
  • Die PIC 237 entkoppelt das Protokoll der externen Schnittstelle von den internen Datenquellen oder dem internen Ziel gemäß Anforderungen. Interne Datenquellen schreiben Daten in einen einzelnen Strom von Ausgabedaten, der daraufhin gemäß der ausgewählten Betriebsart zu dem externen Peripheriegerät transferiert wird. Auf ähnliche Weise werden alle Daten von einem externen Peripheriegerät in einen einzelnen Eingabedatenstrom geschrieben, der zum Erfüllen einer angeforderten Transaktion zu jedem der möglichen internen Datenziele verfügbar ist.
  • Es sind drei mögliche Quellen von Ausgabedaten vorhanden: die LMC 236 (die den ABus verwendet), die RO 249 (die den RBus verwendet) und der globale CBus. Die PIC 237 spricht auf Transaktionen von diesen Datenquellen einzeln an – eine vollständige Transaktion von einer Quelle wird abgeschlossen, bevor eine andere Quelle berücksichtigt wird. Im Allgemeinen sollte zu jeder Zeit nur eine Quelle von Daten aktiv sein. Falls mehr als eine Quelle aktiv ist, werden sie mit der folgenden Priorität bedient – CBus, daraufhin ABus, daraufhin RBus.
  • Wie üblich arbeiten die Module unter der Steuerung der Standard-CBus-Schnittstelle 990, die die internen Register der PIC enthält.
  • Ferner ist eine CBus-Datenschnittstelle 992 zum Zugreifen auf und Steuern von Peripherievorrichtungen über den Coprozessor 224 bereitgestellt. Eine ABus-Schnittstelle 991 zum Handhaben von Speicherinteraktionen mit der Lokaler-Speicher-Steuerungseinrichtung ist ebenfalls bereitgestellt. Sowohl die ABus-Schnittstelle 991 als auch die CBus-Datenschnittstelle 992 senden zusätzlich zu der Ergebnisorganisationseinrichtung 249 Daten zu einem Ausgabedatenweg 993, der einen ein Byte breiten FIFO aufweist. Ein Zugriff auf den Ausgabedatenweg wird durch eine Arbitrierungseinrichtung gesteuert, die verfolgt, welche Quelle Priorität oder den Besitz des Ausgabestroms hat. Der Ausgabedatenweg koppelt sich dann wieder mit einer Videoausgabesteuerungseinrichtung 994 und einer Centronics-Steuerung 997, abhängig davon, welche von diesen freigegeben ist. Jedes der Module 994, 997 liest jeweils ein Byte aus dem internen FIFO des Ausgabedatenwegs. Die Centronics-Steuerungseinrichtung 997 realisiert den Centronics-Datenkopplungsstandard zum Steuern von Peripherievorrichtungen. Die Videoausgabesteuerungseinrichtung weist eine Logik zum Steuern von Ausgabefeldern (output pads) gemäß den gewünschten Videoausgabeprotokollen auf. Ähnlich weist eine Videoeingabesteuerungseinrichtung 998 eine Logik zum Steuern eines realisierten Videoeingabestandards auf. Die Videoeingabesteuerungseinrichtung 998 gibt zu einer Eingabedatenwegeinheit 999 aus, die wieder einen ein Byte breiten Eingabe-FIFO umfasst, wobei Daten durch entweder die Videoeingabesteuerungseinrichtung 998 oder die Centronics-Steuerungseinrichtung 997 mit jeweils einem Byte asynchron in den FIFO geschrieben werden.
  • Ein Datenzeitgeber 996 enthält verschiedene Zähler, die zum Überwachen des derzeitigen Zustands von FIFOs in den Ausgabedatenwegen 993 und dem Eingabedatenweg 999 genutzt werden.
  • Es ist aus dem Vorhergehenden ersichtlich, dass der Coprozessor zum Ausführen von doppelten Strömen von Anweisungen für die gleichzeitige Erzeugung von mehreren Bildern oder mehreren Abschnitten eines einzelnen Bilds genutzt werden kann. Folglich kann ein primärer Anweisungsstrom zum Ableiten eines Ausgabebilds für eine derzeitige Seite genutzt werden, während ein sekundärer Anweisungsstrom während den Zeiten, in denen der primäre Anweisungsstrom im Leerlauf ist, zum Beginnen des Renderns einer nachfolgenden Seite genutzt werden kann.
  • Folglich wird in einer Standardbetriebsart das Bild für eine derzeitige Seite gerendert und daraufhin unter Nutzung des JPEG-Codierers 241 komprimiert. Wenn es erforderlich ist, das Bild auszudrucken, dekomprimiert der Coprozessor 241 das JPEG-codierte Bild, wobei wieder der JPEG-Codierer 241 genutzt wird. Während den Leerlaufzeiten können dann, wenn durch eine Ausgabevorrichtung keine weiteren Abschnitte des JPEG-decodierten Bilds benötigt werden, Anweisungen für das Zusammensetzen einer nachfolgenden Seite oder eines nachfolgenden Bands ausgeführt werden. Dieser Prozess beschleunigt im Allgemeinen verursacht durch das überlagerte Arbeiten des Coprozessors die Rate, mit der Bilder erzeugt werden. Insbesondere kann der Coprozessor 224 dazu genutzt werden, derart wesentlich von der Beschleunigung von Bildverarbeitungsoperationen zum Ausdrucken durch einen mit dem Coprozessor verbundenen Drucker zu profitieren, dass Rendergeschwindigkeiten wesentlich erhöht werden.
  • Es wird aus dem Vorhergehenden ersichtlich, dass die Erörterung des bevorzugten Ausführungsbeispiels sich nur auf eine Form der Realisierung bezieht und Modifikationen davon ausgebildet werden können.

Claims (22)

  1. Verfahren zum Rendern von Bilddaten, wobei das Verfahren die Schritte umfasst: Erzeugen einer Vielzahl von Anweisungsströmen (270, 271); und Ausführen von Anweisungen (9: 275) eine nach der anderen in einem Graphikcoprozessor (224) durch ein Durchführen von Unterschritten: (a) Bestimmen (9: 276) eines Anweisungsstroms aus der Vielzahl von Anweisungsströmen (270, 271); (b) Abrufen (9: 277) einer nicht vorher abgerufenen Anweisung aus dem bestimmten Anweisungsstrom; (c) Decodieren (9: 278) der abgerufenen Anweisung; (d) Ausführen (9: 278) der decodierten abgerufenen Anweisung; und (e) Wiederholen der Unterschritte (a) bis (d); dadurch gekennzeichnet, dass: der Graphikcoprozessor (224) eine neu konfigurierbare Einheit oder mehrere neu konfigurierbare Einheiten (240243, 246249) zum Ausführen der Anweisungen umfasst; der Ausführungsschritt (9: 275) ferner den Unterschritt des Neukonfigurierens (18: 330) zumindest einer neu konfigurierbaren Einheit der einen neu konfigurierbaren Einheit oder mehreren neu konfigurierbaren Einheiten (240243, 246249) gemäss der decodierten abgerufenen Anweisung umfasst; und in dem Ausführungsunterschritt (9: 278) die decodierte abgerufene Anweisung unter Verwendung der zumindest einen neu konfigurierten neu konfigurierbaren Einheit ausgeführt wird.
  2. Verfahren nach Anspruch 1, ferner mit dem Schritt des Normalisierens der Bilddaten vor dem Ausführungsschritt (9: 275).
  3. Verfahren nach Anspruch 1 oder Anspruch 2, wobei die Vielzahl von Anweisungsströmen (270, 271) sich auf zwei Anweisungsströme beläuft.
  4. Verfahren nach Anspruch 1 oder Anspruch 2, wobei die Vielzahl von Anweisungsströmen (270, 271) sich auf drei Anweisungsströme beläuft.
  5. Verfahren nach einem der vorstehenden Ansprüche, ferner mit dem Schritt des Ausgebens eines sich ergebenden Bilds durch ein Drucken des Bilds auf einem Drucker (226).
  6. Verfahren nach einem der vorstehenden Ansprüche, wobei in dem Bestimmungsunterschritt (9: 276) ein Anweisungsstrom aus der Vielzahl von Anweisungsströmen (270, 271) gemäß einer Priorität und einer vordefinierten Prioritätsregel oder mehreren vordefinierten Prioritätsregeln bestimmt wird.
  7. Verfahren nach Anspruch 6, wobei jeder Anweisungsstrom eine Priorität aufweist und wobei die eine vordefinierte Prioritätsregel oder mehreren vordefinierten Prioritätsregeln eine Regel einschließen, dass ein als eine höchste Priorität aufweisend bezeichneter Anweisungsstrom als ein Anweisungsstrom bestimmt wird, aus dem eine Anweisung abzurufen ist.
  8. Verfahren nach Anspruch 6 oder Anspruch 7, wobei es in dem Bestimmungsunterschritt (9: 276) bestimmt wird, ob eine noch nicht aus der Vielzahl von Anweisungsströmen, die anstehen, abgerufene Anweisung vorhanden ist, und falls dem so ist, der Anweisungsstrom, der eine anstehende Anweisung aufweist und der eine höchste Priorität aufweist, bestimmt wird.
  9. Verfahren nach einem der Ansprüche 6 bis 8, wobei die eine vordefinierte Prioritätsregel oder mehreren vordefinierten Prioritätsregeln eine Regel einschließen, dass jeder der Anweisungsströme, der als eingeschlossen bezeichnet ist, als ein Anweisungsstrom bestimmt wird, aus dem ohne Rücksicht auf eine Verfügbarkeit von Anweisungen in einem anderen Anweisungsstrom eine Anweisung abzurufen ist.
  10. Verfahren nach einem der Ansprüche 6 bis 9 wenn von Anspruch 3 abhängig, wobei die eine vordefinierte Prioritätsregel oder mehreren vordefinierten Prioritätsregeln eine Regel einschließen, dass ein Anweisungsstrom als ein Anweisungsstrom, aus dem eine Anweisung abzurufen ist, bestimmt wird, wenn seine Priorität eine vorbestimmte Priorität ist und eine zuletzt abgerufene vorhergehende Anweisung aus dem anderen Anweisungsstrom war.
  11. Verfahren nach einem der vorstehenden Ansprüche, wobei die Vielzahl von Anweisungsströmen (270, 271) in einem Hostprozessor (202) erzeugt wird und wobei das Verfahren ferner den Schritt umfasst: Puffern der Vielzahl von Anweisungsströmen zum Zugriff durch den Graphikcoprozessor (224).
  12. Gerät zum Rendern von Bilddaten, wobei das Gerät einen Graphikcoprozessor (224) zum Zugreifen auf und Ausführen von Anweisungen aus einer Vielzahl von Anweisungsströmen (270, 271) umfasst, wobei der Graphikcoprozessor (224) umfasst: eine Einrichtung (235) zum Bestimmen eines Anweisungsstroms aus der Vielzahl von Anweisungsströmen (270, 271); eine Einrichtung (235) zum Abrufen einer nicht vorher abgerufenen Anweisung aus dem bestimmten Anweisungsstrom; eine Einrichtung (306) zum Decodieren der abgerufenen Anweisung; und eine Einrichtung zum Ausführen der decodierten abgerufenen Anweisung; dadurch gekennzeichnet, dass: die Einrichtung zum Ausführen der decodierten abgerufenen Anweisung eine neu konfigurierbare Einheit oder mehrere neu konfigurierbare Einheiten (240243, 246249) umfasst; und der Graphikcoprozessor (226) ferner eine Einrichtung (321) zum Neukonfigurieren zumindest einer neu konfigurierbaren Einheit der einen neu konfigurierbaren Einheit oder mehreren neu konfigurierbaren Einheiten (240243, 246249) gemäss der decodierten abgerufenen Anweisung zum Ausführen der Anweisung umfasst.
  13. Gerät nach Anspruch 12, ferner mit einer Datennormalisierungseinrichtung (1062) zum Normalisieren der Vielzahl von Anweisungsströmen vor der Ausführung durch den Graphikcoprozessor (224).
  14. Gerät nach Anspruch 12 oder 13, wobei der Graphikcoprozessor (224) dazu ausgelegt ist, auf Anweisungen aus zwei Anweisungsströmen zuzugreifen und sie auszuführen.
  15. Gerät nach Anspruch 12 oder 13, wobei der Graphikcoprozessor (224) dazu ausgelegt ist, auf Anweisungen aus drei Anweisungsströmen zuzugreifen und sie auszuführen.
  16. Gerät nach einem der Ansprüche 12 bis 14, ferner mit einem Drucker (225), der dazu ausgelegt ist, ein sich ergebendes Bild zu empfangen und zu drucken.
  17. Gerät nach einem der Ansprüche 12 bis 16, wobei die Bestimmungseinrichtung (235) dazu ausgelegt ist, einen Anweisungsstrom aus der Vielzahl von Anweisungsströmen (270, 271) gemäß einer Priorität und einer vordefinierten Prioritätsregel oder mehreren vordefinierten Prioritätsregeln zu bestimmen.
  18. Gerät nach Anspruch 17, wobei jeder Anweisungsstrom eine Priorität aufweist und wobei die Bestimmungseinrichtung dazu ausgelegt ist, einen Anweisungsstrom aus der Vielzahl von Anweisungsströmen gemäß der einen vordefinierten Prioritätsregel oder den mehreren vordefinierten Prioritätsregeln zu bestimmen, die eine Regel einschließen, dass ein als eine höchste Priorität aufweisend bezeichneter Anweisungsstrom als ein Anweisungsstrom zu bestimmen ist, aus dem eine Anweisung abzurufen ist.
  19. Gerät nach Anspruch 17 oder 18, wobei: die Bestimmungseinrichtung (235) bei Verwendung dazu ausgelegt ist, zu bestimmen, ob eine noch nicht aus der Vielzahl von Anweisungsströmen, die anstehen, abgerufene Anweisung vorhanden ist, und falls dem so ist, den Anweisungsstrom, der eine anstehende Anweisung aufweist und der eine höchste Priorität aufweist, zu bestimmen.
  20. Gerät nach einem der Ansprüche 17 bis 19, wobei die Bestimmungseinrichtung dazu ausgelegt ist, einen Anweisungsstrom aus der Vielzahl von Anweisungsströmen gemäß der einen vordefinierten Prioritätsregel oder den mehreren vordefinierten Prioritätsregeln zu bestimmen, die eine Regel einschließen, dass jeder der Anweisungsströme, der als eingeschlossen bezeichnet ist, als ein Anweisungsstrom zu bestimmen ist, aus dem ohne Rücksicht auf eine Verfügbarkeit von Anweisungen in einem anderen Anweisungsstrom eine Anweisung abzurufen ist.
  21. Gerät nach einem der Ansprüche 17 bis 20 wenn von Anspruch 14 abhängig, wobei die Bestimmungseinrichtung dazu ausgelegt ist, einen Anweisungsstrom aus der Vielzahl von Anweisungsströmen gemäß der einen vordefinierten Prioritätsregel oder den mehreren vordefinierten Prioritätsregeln zu bestimmen, die eine Regel einschließen, dass ein Anweisungsstrom als ein Anweisungsstrom, aus dem eine Anweisung abzurufen ist, zu bestimmen ist, wenn seine Priorität eine vorbestimmte Priorität ist und eine zuletzt abgerufene vorhergehende Anweisung aus dem anderen Anweisungsstrom war.
  22. Gerät nach einem der Ansprüche 12 bis 21, wobei der Graphikcoprozessor (225) dazu ausgelegt ist, auf Anweisungen aus einer Vielzahl von Anweisungsströmen (270, 271), die in einem Hostprozessor (202) erzeugt werden, zuzugreifen und sie auszuführen und wobei das Gerät ferner einen Puffer (203) zum Puffern der Vielzahl von durch den Hostprozessor (202) erzeugten Anweisungsströmen zum Zugriff durch den Graphikcoprozessor (224) umfasst.
DE69835392T 1997-04-30 1998-04-29 Graphisches Verarbeitungssystem Expired - Lifetime DE69835392T2 (de)

Applications Claiming Priority (20)

Application Number Priority Date Filing Date Title
AUPO648297 1997-04-30
AUPO6487A AUPO648797A0 (en) 1997-04-30 1997-04-30 Page table pointers for co-processor virtual memory systems
AUPO6482A AUPO648297A0 (en) 1997-04-30 1997-04-30 Reconfigurable data buffer
AUPO648697 1997-04-30
AUPO6486A AUPO648697A0 (en) 1997-04-30 1997-04-30 Decoder of variable length codes
AUPO647997 1997-04-30
AUPO648197 1997-04-30
AUPO648497 1997-04-30
AUPO648597 1997-04-30
AUPO6484A AUPO648497A0 (en) 1997-04-30 1997-04-30 A fast dct apparatus
AUPO6479A AUPO647997A0 (en) 1997-04-30 1997-04-30 Memory controller architecture
AUPO648097 1997-04-30
AUPO6485A AUPO648597A0 (en) 1997-04-30 1997-04-30 Reconfigurable data cache controller
AUPO648797 1997-04-30
AUPO6492A AUPO649297A0 (en) 1997-04-30 1997-04-30 Register setting-micro programming system
AUPO6483A AUPO648397A0 (en) 1997-04-30 1997-04-30 Improvements in multiprocessor architecture operation
AUPO649297 1997-04-30
AUPO6481A AUPO648197A0 (en) 1997-04-30 1997-04-30 Data normalisation circuit
AUPO6480A AUPO648097A0 (en) 1997-04-30 1997-04-30 General image processor
AUPO648397 1997-04-30

Publications (2)

Publication Number Publication Date
DE69835392D1 DE69835392D1 (de) 2006-09-14
DE69835392T2 true DE69835392T2 (de) 2006-12-07

Family

ID=36915010

Family Applications (2)

Application Number Title Priority Date Filing Date
DE69835848T Expired - Lifetime DE69835848D1 (de) 1997-04-30 1998-04-29 Verfahren und Vorrichtung zum Dekodieren von Daten
DE69835392T Expired - Lifetime DE69835392T2 (de) 1997-04-30 1998-04-29 Graphisches Verarbeitungssystem

Family Applications Before (1)

Application Number Title Priority Date Filing Date
DE69835848T Expired - Lifetime DE69835848D1 (de) 1997-04-30 1998-04-29 Verfahren und Vorrichtung zum Dekodieren von Daten

Country Status (1)

Country Link
DE (2) DE69835848D1 (de)

Also Published As

Publication number Publication date
DE69835848D1 (de) 2006-10-26
DE69835392D1 (de) 2006-09-14

Similar Documents

Publication Publication Date Title
US6349379B2 (en) System for executing instructions having flag for indicating direct or indirect specification of a length of operand data
US6674536B2 (en) Multi-instruction stream processor
US6707463B1 (en) Data normalization technique
US6414687B1 (en) Register setting-micro programming system
US6393545B1 (en) Method apparatus and system for managing virtual memory with virtual-physical mapping
US6289138B1 (en) General image processor
DE69728002T2 (de) Steuerprozessor für einen drei-dimensionalen Beschleuniger, der die Fähigkeit geometrischer Dekompression besitzt und Verfahren zur Bearbeitung von geometrischen Daten in diesem Beschleuniger
DE102018132468A1 (de) Multi-gpu-frame-rendern
DE69918022T2 (de) Keine blockierung erforderndes textur-cache-system
DE112017004246T5 (de) Cache- und komprimierungsinteroperabilität in einer grafikprozessorpipeline
DE69736611T2 (de) Reorganisation von Speicherreferenzen für Pixel in einer seitenorientierten Speicherarchitektur
CN103026402B (zh) 显示压缩超级切片图像
DE112017003389T5 (de) Verfahren und vorrichtung für shared virtual memory zum managen von datenkohärenz in einem heterogenen verarbeitungssystem
DE102009047200A1 (de) Ein Komprimierungs-Zustandsbit-Zwischenspeicher und Zusatzspeicher
DE102013017639A1 (de) Zwischenspeicherung von adaptiv dimensionierten Cache-Kacheln in einem vereinheitlichen L2-Cache-Speicher mit Oberflächenkomprimierung
DE19709227A1 (de) Verfahren zum schnellen Herunterladen von Texturen auf eine Hardware für beschleunigte Graphiken und zur Beseitigung von zusätzlichen Softwarekopien von Texeln
DE102019101871A1 (de) Verfahren und Vorrichtung zum Gewinnen von Abtastpositionen von Textuieroperationen
DE112017004077T5 (de) Einrichtung und verfahren für optimiertes kachelbasiertes rendering
EP1255227A1 (de) Vertexindexverarbeitungsgerät
US7336284B2 (en) Two level cache memory architecture
DE112017003838T5 (de) Threadprioritätsmechanismus
DE102019134020A1 (de) Dekompprimierungstechniken zur verarbeitung komprimierter daten, die für künstliche neuronale netzwerke geeignet sind
DE102019115130A1 (de) Vorrichtung und Verfahren für konservatives morphologisches Anti-Aliasing mit Mehrfachabtastung
DE112021001345T5 (de) On-demand speicherzuweisung
DE102020127704A1 (de) Techniken zum effizienten transferieren von daten an einem prozessor

Legal Events

Date Code Title Description
8364 No opposition during term of opposition