-
Hintergrund der Erfindung
-
1. Gebiet der Erfindung
-
Die
vorliegende Erfindung bezieht sich allgemein auf Texturabbildung
bei Graphiksystemen und insbesondere auf ein System und ein Verfahren
zum Umsortieren von Pixeln, um Bandbreite und Leistungsfähigkeit
zu verbessern.
-
2. Beschreibung des Stands
der Technik
-
Texturabbildung
ist der Prozeß des
Abbildens eines Bilds auf eine Oberfläche in einem dreidimensionalen
Graphiksystem. Diese Technik ist auf dem Gebiet gut bekannt und
ist beispielsweise in J. Foley et al., Computer Grahpics: Principles
and Practice 2. Ausg., Addison-Wesley,
1990, auf 741-44 beschrieben.
-
Unter
Bezugnahme auf 1 ist dort ein Beispiel einer
Texturabbildung gemäß dem Stand
der Technik gezeigt. Das Bild, das abgebildet werden soll, wird
als eine Texturabbildung 101 bezeichnet und ihre einzelnen Elemente
werden als Texel bezeichnet. Die Texturabbildung 101 ist
typischerweise in einem rechteckigen Koordinatenschema beschrieben,
das mit (u, v) bezeichnet ist, und ist für gewöhnlich in einem bestimmten
Bereich eines herkömmlichen
Speichers gespeichert, wie einem herkömmlichen dynamischen Direktzugriffsspeicher
(DRAM = Dynamic Random-Access Memory) mit Seitenmodus oder einem
anderen Seitenspeicher. Bei dem Beispiel von 1 sind vier
Seiten 110, 111, 112, 113 gezeigt,
wobei jede einem Abschnitt des Bildbereichs entspricht, der einen
entsprechenden Abschnitt der Texturabbildung 101 umfaßt.
-
Eine
Oberfläche 104 in
einem dreidimensionalen Raum hat ihr eigenes Koordinatensystem (s,
t). Bei einem typischen, dreidimensionalen Graphiksystem kann die
Oberfläche 104 ein
Grundelement sein, beispielsweise ein Vieleck; es können viele
solcher Vielecke in einem dreidimensionalen Raum definiert sein,
um ein dreidimensionales Objekt oder eine dreidimensionale Szene
zu bilden. Jedes Vieleck hätte
dann sein eigenes Koordinatensystem (s, t) ähnlich der in 1 angegebenen
Oberfläche 104.
Basierend auf der Ausrichtung der Oberfläche 104 in einem dreidimensionalen
Raum und auf der Position und Ausrichtung der „Kamera" wird die Oberfläche 104 zur Anzeige
durch das Computersystem wiederum auf ein zweidimensionales Anzeigegitter 103 abgebildet,
das in dem Bildpuffer gespeichert ist. Die Abbildung der Oberfläche 104 auf
das Anzeigegitter 103 wird durch Matrixtransformationen
erzielt, die auf dem Gebiet gut bekannt sind. Das Anzeigegitter 103 hat
ein Koordinatensystem (x, y) und ist typischerweise in einem Speicherbereich
implementiert, der für
eine Videoanzeige reserviert ist, wie einem Videodirektzugriffspeicher
(Video RAM), z. B. einem VRAM oder synchronen Graphikdirektzugriffsspeicher
(SGRAM = Synchronous Graphics Random-Access Memory). Das Anzeigegitter 103 umfaßt einzelne
Elemente, die als Pixel bekannt sind und durch gesonderte Speicherpositionen
in dem Video-RAM dargestellt sind.
-
Jedes
Pixel in einer bestimmten Region des Anzeigegitters 103 bildet
auf einen Punkt an der Oberfläche 104 und
wiederum zu einem Punkt in der Texturabbildung 101 ab.
Bei dem Beispiel von 1 bildet somit ein Punkt Axy des Anzeigegitters 103 auf einen
Punkt Ast in den Koordinaten der Oberfläche 102 und
auf einen Punkt Auv in der Texturabbildung 101 oder
eine Gruppe von Punkten ab, die eine Region in der Texturabbildung 101 bilden.
Jede der Abbildungen zwischen dem Anzeigegitter 103, der
Oberfläche 102 und
der Texturabbildung 101 kann von Punkt zu Punkt, von Punkt
zu Region, von Region zu Punkt oder von Region zu Region erfolgen.
Bei herkömmlichen
Implementierungen von Texturabbildungssystemen erzeugt die Abbildung
von dem Anzeigegitter 103 auf die Oberfläche 104 und
wiederum auf die Texturabbildung 101 ferner einen Wert
d, der die Detailebene für
das spezielle Texel darstellt. Typischerweise ist d ein Maß des wahrgenommenen
Abstands des Punkts in der Texturabbildung, wie es durch einen z-Wert
für den
Punkt in dem Bildpuffer bestimmt ist. Punkte, die als weiter weg
wahrgenommen werden, weisen eine niedrigere Detailebene auf, was
eine verringerte Auflösung
darstellt. Beim Wiedererlangen von Texeln aus der Texturabbildung 101 wird
d verwendet, um ein Multum-In-Parvo-Abbildungsschema (MIP-Abbildungsschema)
zu implementieren, bei dem mehrere Texel gemittelt und auf ein Pixel
des Bildpuffers abgebildet werden können. Je höher der Wert von d, desto niedriger
die Detailebene und desto mehr Pixelmittelwertbildung wird durchgeführt. Im
Grenzfall ist eventuell die gesamte Texturabbildung auf ein Pixel
in dem Bildpuffer reduziert.
-
Herkömmliche
Rasterungsmodule („rasterization
engines") ziehen
das Bild durch die bekannte Technik der Abtastumwandlung von Grundelementen,
beispielsweise Vielecken und Linien (siehe beispielsweise Foley
et al.), in den Bildpuffer. Eine Abtastumwandlung nimmt als Eingabe
Grundelemente, die hinsichtlich Scheitelpunkten und Ausrichtungen
definiert sind, und liefert als Ausgabe eine Reihe von Pixeln, die
an dem Bildschirm gezeichnet werden sollen. Wenn jedes Pixel durch
Abtastumwandlung erzeugt wurde, führt ein Rasterungsmodul die
notwendigen Abbildungsberechnungen durch, um zu bestimmen, welches
Texel der Texturabbildubng 101 dem Pixel entspricht. Das
Rasterungsmodul erteilt dann alle erforderlichen Speicherreferenzen,
wie Texturabruf, z-Abruf, z-Einspeicherung, Farbabruf, Farbeinspeicherung,
und dergleichen), um Texelinformationen zum Schreiben zu dem Pixel
wiederzuerlangen, das verarbeitet wird. Somit werden Speicherreferenzen
in der Reihenfolge erteilt, die durch die Abtastumwandlung erzeugt
wird. Herkömmlicherweise
werden derartige Speicherreferenzen gemäß einem FIFO-Schema (FIFO =
First-In First-Out) unter Verwendung einer FIFO-Warteschlange gespeichert
und verwaltet.
-
Es
ist bekannt, daß herkömmliche
Seitenmodus-DRAM-Komponenten Zugriffszeiteinbußen erleiden, wenn sie auf
Speicherpositionen von unterschiedlichen Speicherseiten aus zugreifen.
Bei einigen Speicherarchitekturen beispielsweise, wie etwa SGRAM,
benötigt
ein Zugriff auf eine offene Seite einen Zyklus, ein Lesevorgang
von einer nicht offenen Seite neun Zyklen, ein Schreibvorgang zu
einer nicht offenen Seite sechs Zyklen und ein Zugriff auf eine
offene Seite an einer unterschiedlichen Bank drei Zyklen. Somit
kann das oben beschriebene Schema zum Erteilen von Speicherreferenzen
in der Reihenfolge, die durch die Abtastumwandlung erzeugt wird,
derartige Einbußen
erleiden, wenn die referenzierten Bereiche der Texturabbildung 101 in unterschiedlichen
Seiten liegen. Abhängig
von der Verzerrung der Texturgrenzen, die aus der speziellen verwendeten
Abbildungstransformation resultiert, können Referenzen, die in einer
Abtastumwandlungsreihenfolge erzeugt werden, tatsächlich ein
wiederholtes Hin- und Herschalten einer Seite notwendig machen.
Da die Speicherbandbreite bei einer schnellen Erzeugung dreidimensionaler
Bilder im allgemeinen die Engstelle ist, resultiert ein derartiges
wiederholtes Seitenwechseln in einer verringerten Leistungsfähigkeit.
-
Im
Stand der Technik gab es Versuche, die oben beschriebene Problematik
zu entschärfen.
Ein Beispiel ist die Verwendung eines spezialisierten Speichers
anstelle herkömmlicher
Seitenmodus-Speicherkomponenten. Siehe beispielsweise H. Fuchs und
J. Poulton, „Pixel-Planes: A VLSI-Oriented
Design for a Raster Graphics Engine" in VLSI Design, Bd. 2, Nr. 3, 1981;
M. Deering et al., „FBRAM:
A New Form of Memory Optimized for 3D Graphics" in Computer Graphics, Proceedings of
SIGGRAPH, 1995; A. Schilling et al., „Texram: A Smart Memory for
Texturing" in IEEE
Computer Graphics and Applications, 1996. Solche Systeme verbessern
im allgemeinen die Speicherbandbreite beispielsweise dadurch, daß ein Speicher
direkt einer Verarbeitung an einer anwendungsspezifischen integrierten
Schaltung (ASIC = Application-Specific Integrated Circuit) zugeordnet
wird oder eine Logik auf einem DRAM-Chip direkt einem Speicher zugeordnet
wird. Siehe A. Schilling et al. Solche Techniken benötigen hochspezialisierte
Komponenten, die im allgemeinen teurer als ein herkömmlicher
Seitenmodus-DRAM sind.
-
Ein
weiterer Versuch, die Speicherbandbreite zu reduzieren, ist in K.
Akeley, „Reality
Engine Graphics" in
Computer Graphics, Proceedings of SIGGRAPH 1993, beschrieben. Akeley
beschreibt ein System extremer Speicherverschachtelung. Diese Technik
benötigt
erheblich mehr Speicherchips als herkömmliche Speichersysteme und
ist folglich teurer.
-
Die
EP 0 749 100 A2 offenbart
ein Computergraphiksystem zur Texturabbildung, das einen Hostcomputer
umfaßt,
der einen Systemspeicher aufweist, der Texturdaten speichert. Eine
Graphikhardwarevorrichtung, die mit dem Hostcomputer verbunden ist,
bereitet texturabgebildete Bilder auf und umfaßt einen lokalen Speicher,
der zumindest einen Teil der Texturdaten speichert, die zu jeder
Zeit in dem Systemspeicher gespeichert sind. Eine Software-Hintergrundroutine
läuft auf
dem Prozessor des Hostcomputers und verwaltet das Übertragen
von Texturdaten von dem Systemspeicher zu dem lokalen Speicher,
wenn diese von der Hardwarevorrichtung benötigt werden, um ein Bild aufzubereiten.
Die Software-Hintergrundroutine überwacht
die Verwendung von Texturdatenblöcken,
die in dem lokalen Speicher gespeichert sind, mittels der Hardwarevorrichtung.
Die Hintergrundroutine verfolgt ferner die Prioritäten der
in dem Hauptspeicher gespeicherten Texturen, so daß am weitesten
zurückliegend
verwendete Texturdatenblöcke
mit niedrigster Priorität
in dem lokalen Speicher mit Texturdatenblöcken ersetzt werden, die von
der Hardwarevorrichtung benötigt
werden, um Bilder aufzubereiten.
-
Die
US 5,440,713 bezieht sich
auf ein seitenverschachteltes Speicherzugriffssystem mit M Wegen
und N Ports und umfaßt
einen getrennten, seitenverschachtelten Controller, der jeder der
M Speicherbänke
zugeordnet ist. Jeder der getrennten, verschachtelten Seitencontroller
umfaßt
eine Speicherbankentscheidungseinrichtung und einen Speicherbankcontroller.
Die Bankentscheidungseinrichtung empfängt Anforderungen von den N
Mastern und unterzieht sie einem Anforderungshalteprotokoll („request-halt
protocol"). Das
Anforderungshalteprotokoll, das von jeder Entscheidungseinrichtung
ausgeführt
wird, setzt unter einer Mehrzahl von aktuellen Anforderungen nach
der gleichen Speicherbank durch die Master Prioritäten und
gibt aktuellen Anforderungen, die eine Zeilenadresse spezifizieren,
die gleich einer gültigen
Zeilenadresse der vorhergehenden Anforderung ist, die von der Entscheidungseinrichtung
gewährt
wurde, eine höhere
Priorität.
-
Es
wird ein System zum Reduzieren einer Speicherbandbreite durch Minimieren
eines Seitenumschaltens bei einem herkömmlichen Seitenmodusspeicher
benötigt,
um eine Leistungsfähigkeit
von Graphikmodulen für
einen breiten Bereich von Client-Algorithmen zu verbessern, ohne
die Anzahl von Komponenten oder die Gesamtkosten wesentlich zu erhöhen.
-
Abriß der Erfindung
-
Gemäß der vorliegenden
Erfindung sind ein System und ein Verfahren zum Umsortieren von
Speicherreferenzen vorgesehen, die erforderlich sind, um unabhängige Pixel
in einem Texturabbildungssystem zu verarbeiten, um eine verbesserte
Speicherlokalität
und somit eine verbesserte Graphikleistungsfähigkeit unter Verwendung herkömmlicher
Seitenmodus-Speicherkomponenten
zu erreichen. Da die vorliegende Erfindung nicht erfordert, daß ir gendwelche
Veränderungen
an dem zugrundeliegenden Graphikalgorithmus vorgenommen werden,
kann die Speicherlokalizität
für viele
solcher Algorithmen sofort verbessert werden.
-
Verschiedene
Arten von Lesevorgängen
und Schreibvorgängen
können
in Verbindung mit der Aufbereitung durch ein Graphikmodul durchgeführt werden.
Diese umfassen beispielsweise Lesen und Schreiben für eine Texturwiedererlangung,
eine Wiedererlangung von Daten aus dem Bildpuffer (beispielsweise
Farbwerte, z-Werte und dergleichen), eine Farbeinspeicherung (endgültiger Farbschreibvorgang
zu einem Bildpuffer nach Auflösung
aller anwendbaren Texturen) und dergleichen. Die vorliegende Erfindung
sortiert die den Pixeln zugeordneten Lese- und Schreibvorgänge um,
wenn sie eine solche Verarbeitung durchgeführt wird, so daß Referenzen,
welche die gegenwärtig
offene Seite benötigen,
im allgemeinen vor Referenzen verarbeitet werden, die das Öffnen einer
anderen Seite erfordern, um eine Speicherlokalizität zu verbessern
und ein Seitenumschalten zu minimieren. Die hierin beschriebene
Technik ermöglicht,
daß das
Graphikrasterungsmodul unter Verwendung herkömmlicher Seitenmodus-Speicherkomponenten
und ohne eine übermäßige Speicherverschachtelung
zu erfordern eine bessere Bandbreite erzielen kann.
-
Die
vorliegende Erfindung verwendet ein Pixel-Prioritäts-Heap
(PPH = Pixel-Priority-Heap), um Pixel umzusortieren. Bei einer Ausführung sortiert
das PPH Adressen in einen Texturspeicher um, um mehr Lesevorgänge von
derselben Seite durchzuführen,
bevor diese Seite geschlossen und eine andere geöffnet wird. Bei alternativen
Ausführungen
wird das PPH verwendet, um Lesevorgänge und Schreibvorgänge von/zu
anderen Clients ebenfalls umzusortieren. Das PPH kann beispielsweise
verwendet werden, um Referenzen zu Bestimmungsadressen in dem Bildpuffer
umzusortieren, um eine Lokalizität
zu verbessern; dies ist vorteilhaft, wenn eine Umsortierung von
Texturspeicherreferenzen durch das PPH in Veränderungen an der Reihenfolge von
Bildpufferschreibvorgängen
resultiert, so daß ein
PPH auch günstig
für Bildpufferadressen
ist.
-
Jedes
durch eine Abtastumwandlung erzeugte Pixel wird zu dem PPH geschrieben
(je eines pro Zyklus). Wenn das PPH voll ist, wird das Pixel nicht
geschrieben und das System wartet, bis ein Eintrag in dem PPH verfügbar ist,
bevor zu diesem geschrieben wird.
-
Gleichzeitig
versucht das System, ein Pixel aus dem PPH auszuwählen und
es zu einer FIFO-Warteschlange
einer Speichersteuerung zu schreiben, die texturiert werden soll.
Falls es keine Pixel in dem PPH gibt oder falls die FIFO-Warteschlange
der Speichersteuerung voll ist, wird kein Pixel in die FIFO-Warteschlange der
Speichersteuerung geschrieben. Bei dem Auswählen eines Pixels aus dem PPH,
das in die FIFO-Warteschlange der Speichersteuerung geschrieben
werden soll, versucht das System ein Pixel zu finden, dessen PPH-Adresse
eine Bank- und Zeilenadresse (RAS) umfaßt, die zu der offenen Seite
an dem letzten gelesenen oder geschriebenen Pixel paßt. Wenn
eine solche Übereinstimmung
gefunden wird, kann der Zugriff bei einigen Speichersystemen relativ
schnell (z. B. in einem Zyklus) durchgeführt werden. Falls keine solche Übereinstimmung
gefunden wird, versucht das System ein Pixel zu finden, dessen PPH-Adresse
zu irgendeiner offenen Seite paßt,
wobei so bei einigen Speichersystemen ein Zugriff mit mittlerer
Geschwindigkeit (z. B. drei Zyklen) ermöglicht wird. Falls keine solche Übereinstimmung
gefunden wird, versucht das System, ungeachtet von Bankoder Seitenadresse
irgendein gültiges
Pixel in dem PPH zu finden. Bei einigen Speichersystemen erfolgt
so ein Zugriff relativ langsam (z. B. neun Zyklen für Lesevorgänge oder
sechs Zyklen für
Schreibvorgänge).
Bei einer Ausführung
werden alle derartigen Versuche, Übereinstimmungen zu finden,
für eine
verbesserte Leistungsfähigkeit
gleichzeitig durchgeführt.
-
Das
ausgewählte
Pixel wird zu der FIFO-Warteschlange des Speicher-Controllers geschrieben
und aus dem PPH gelöscht.
Bei nachfolgenden Zyklen erteilt ein Speicher-Controller den Lesevorgang
oder Schreibvorgang entsprechend der PPH-Adresse des Pixels. Falls
der Vorgang ein Schreibvorgang ist, können dann die Daten abhängig von
der Anwendung zu einer nachfolgenden Verarbeitung aus dem Speicher
zurückgegeben
werden.
-
Zusätzlich kann
das PPH eine herkömmliche
FIFO-Funktionalität
implementieren. Eine solche Implementierung kann beispielsweise
nützlich
sein, wenn das PPH in Verbindung mit einer z-Pufferung verwendet wird.
Wie es auf dem Gebiet bekannt ist, ist ein z-Puffer eine Technik,
wodurch jedes Pixel, das in den Bildpuffer geschrieben wird, einen
zugeordneten gespeicherten z-Wert in einem z-Puffer aufweist. Jeder
Schreibvorgang eines eingehenden Pixels hat einen z-Wert, der mit
dem gespeicherten z-Wert für
das passende Pixel verglichen wird, und es wird nur dann geschrieben,
wenn der z-Wert des eingehenden Pixels kleiner als der gespeicherte
z-Wert ist. Wenn der Schreibvorgang des eingehenden Pixels durchgeführt wird,
wird der gespeicherte z-Wert mit dem z-Wert des eingehenden Pixels
aktualisiert. Siehe J. Foley et al.
-
Das
PPH ermöglicht
ferner, daß Schreibvorgänge oder
Lesevorgänge
an einer offenen Seite auf einer gegebenen Bank weitergehen, während an
einer Seite auf einer anderen Bank eine Vorladung vorgenommen wird.
-
Bei
einer bevorzugten Ausführungsform
ist die vorliegende Erfindung auf eine im wesentlichen zustandslose
Weise wirksam. Es basieren keine Entscheidungen explizit auf vorhergehenden
Entscheidungen. Ein solcher im wesentlichen zustandsloser Betrieb
ist vorteilhaft, weil er die Verwendung einfacherer Algorithmen
und einfacherer Hardware ermöglicht.
Die vorliegende Erfindung betont einen korrekten anstelle eines
optimalen Betriebs, indem relativ einfache Entscheidungen vorgenommen
werden, die eventuell nicht optimal sind, aber die in dem Sinn korrekt
sind, daß sie
zu einer Leistungsfähigkeit
führen,
die vorzugsweise nicht schlechter als bei einer herkömmlichen
FIFO-Technik ist.
-
Kurze Beschreibung
der Zeichnungen
-
1 ist
ein Diagramm, das eine Texturabbildung gemäß dem Stand der Technik zeigt.
-
2 ist
ein Blockdiagramm, das eine Gesamtarchitektur einer Ausführung der
vorliegenden Erfindung zeigt.
-
3 ist
ein Blockdiagramm, das eine detaillierte Architektur einer Ausführung der
vorliegenden Erfindung zeigt.
-
4 ist
ein Flußdiagramm
des Verfahrens zum Auswählen
von Pixeln aus dem Pixel-Prioritäts-Heap gemäß der vorliegenden
Erfindung.
-
5 ist
ein Zustandsdiagramm, das Seitenaktualisierungsvorgänge zeigt.
-
6 ist
ein Flußdiagramm
eines Verfahrens zum Auswählen
einer Seite, die vorgeladen werden soll, gemäß einer Ausführung der
vorliegenden Erfindung.
-
7 ist
ein Flußdiagramm
eines Verfahrens zum Lesen aus dem PPH gemäß einer Ausführung der vorliegenden
Erfindung.
-
8 ist
ein Blockdiagramm einer Implementierung eines Heap-Moduls gemäß einer
Ausführung
der vorliegenden Erfindung.
-
Detaillierte Beschreibung
der Erfindung
-
Gesamtbetrieb
-
Die
folgende detaillierte Beschreibung nimmt Bezug auf mehrere Variablen
und Terme, die hier der Zweckmäßigkeit
halber definiert sind:
- • N Anzeiger-Bitlänge bzw.
Index-Bitlänge
(d. h. Adresse von Chip und Bank); die bevorzugte Ausführung verwendet
N = 32;
- • 2N-1 Anzahl von Speicherbänken auf diesem Kanal (0 stellt
einen Wert von Null dar);
- • 2N- 2 Anzahl von Chips
auf diesem Kanal (jeweils zwei Bänke);
- • M
Anzeiger-Bitlänge
eines Pixeleintrags in Pixel-Prioritäts-Heap; die bevorzugte Ausführung verwendet
M = 5;
- • 2M-1 maximale Anzahl von Einträgen in Pixel-Prioritäts-Heap
(0 stellt einen Wert von Null dar).
-
Unter
Bezugnahme auf 2 ist dort ein Blockdiagramm
der Gesamtarchitektur auf hoher Ebene („high-level architecture") einer Ausführung der
vorliegenden Erfindung gezeigt. Ein System 200 umfaßt die folgenden
Elemente. Grundelemente, sog. „primitives", 208 werden
auf herkömmliche
Weise gespeichert und umfassen beispielsweise Definitionen von Vielekken
und Linien. Ein Abtastumwandler 201 wandelt die Grundelemente 208 auf
herkömmliche
Weise in Pixel um. Jedes Pixel ist hinsichtlich Werten für u, v und
d definiert, die u- und v-Koordinaten
in einem Texturraum zusammen mit einem Abstandswert (auch als Kompressionswert
bekannt) zum Bestimmen der Detailebene für das Pixel darstellen. Bei
einer Ausführung
werden die Werte u, v und d für
Pixel mit einer Rate von einem Pixel pro Zyklus in ein Pixel-Prioritäts-Heap
(PPH = Pixel Priority Heap) 202 geschrieben. Bei einer
anderen Ausführung
werden die Werte u, v und d auf Speicherreferenzen abgebildet, die
als Bank, Zeile und Spalte dargestellt sind, und diese Speicherreferenzen
werden in das PPH 202 geschrieben. Bei noch einer anderen
Ausführung
wird eine gewisse Kombination dieser zwei Darstellungen abhängig von
dem durchgeführten
Vorgang verwendet, wie es unten beschrieben wird.
-
Bei
einer Ausführung
ist das PPH 202 auf einem Kanal definiert. Wenn zwei oder
mehr Kanäle
(z. B. ein linker und ein rechter Kanal) verwendet werden, hat vorzugsweise
jeder Kanal ein PPH. Dies dient dazu, Pixel unabhängig für jeden
Kanal in Warteschlange zu stellen, und kann zu einer höheren Gesamttrefferrate führen, weil
der Lokalitätsverbesserungsprozeß für jeden
Kanal getrennt ausgeführt
wird. Bei mehreren PPHs wird ein Selektor verwendet, um Adreßbits von
Pixeln zu prüfen,
um den ordnungsgemäßen PPH
für einen Eintrag
der Pixel zu bestimmen. Bei einer Ausführung bestimmt der Selektor
beispielsweise den ordnungsgemäßen PPH
auf der Basis des letzten Bits der Pixeladresse.
-
Bei
einer Ausführung
ist ein 1MB-Chip (256K × 32)
für jeden
Kanal vorgesehen. Bänke
sind von 1 bis 2N-1 numeriert, wobei es
2N-1 Bänke
gibt (0 ist als ein Wert von Null reserviert).
-
Bei
einer Ausführung
umfaßt
das PPH 202 2M-1 Einträge, wobei
jeder einem Pixel entspricht, das texturiert werden soll. Bei einer
Ausführung
sind zwei Bänke
für jeden
Chip vorgesehen.
-
Es
sind drei Pixeltypen definiert: 1) ein Pixel, das texturiert werden
soll (ein tpixel; 2) ein Pixel, das z-gepuffert werden soll (ein
zpixel); und 3) ein Pixel, das in den Bildpuffer („frame
buffer") geschrieben
(oder von demselben gelesen) werden soll, oder ein Texel, das in
den Texturspeicher geschrieben werden soll (ein cpixel). Jeder Pixeltyp
ist einer Anzahl von Feldern zugeordnet, wie:
- • uv-Adresse:
eine (17 + N)-Bitadresse in die Texturabbildung, wobei N Bits den
Chip und die Bank eindeutig identifizieren, acht Bits die Spaltenadresse
(CAS) identifizieren und neun Bits die Zeilenadresse (RAS) identifizieren;
- • fb-Adresse:
eine (17 + N)-Bitadresse in den Bildpuffer;
- • Farbe:
24 Bits (acht für
Rot, acht für
Grün, acht
für Blau);
- • z-wert:
32 Bits.
-
Cpixel
und tpixel können
gepackt werden, so daß die
24-Bit-Farbe oder der 32-Bit-z-Wert vier, zwei oder eine Farbe oder
z-Werte umfassen können.
Das Packen und/oder Entpacken wird mit herkömmlichen Mitteln erzielt.
-
Bei
einer Ausführung
verwenden die drei Pixeltypen die oben definierten Felder wie folgt:
- • tpixel:
uv-Adresse, fb-Adresse, Farbe;
- • zpixel:
fb-Adresse, z-Wert;
- • cpixel:
fb-Adresse, Farbe.
-
Gemäß einer
Ausführung
der vorliegenden Erfindung verwenden tpixel uv-Adressen als PPH-Adressen in den Bildpuffer 207.
Andere Pixeltypen verwenden fb-Adressen.
-
Aus
dem PPH 202 werden Pixel ausgewählt, die gemäß dem in 4 gezeigten
Verfahren in die FIFO-Warteschlange 203 des Speicher-Controllers
geschrieben werden sollen, wobei das Verfahren Pixel auf offenen
Seiten gegenüber
Pixeln an anderen Speicherpositionen bevorzugt. Die in 4 gezeigten
Schritte werden für
jeden Zyklus durchgeführt.
Das System 200 prüft 401 zuerst,
ob das PPH 202 leer ist; falls ja, endet 402 das
Verfahren und es wird kein Pixel in die Warteschlange 203 geschrieben.
Falls das PPH 202 nicht leer ist, prüft das System 200,
ob die Warteschlange 203 voll ist; falls ja, endet 402 das
Verfahren und es wird kein Pixel in die Warteschlange 203 geschrieben.
Falls die Warteschlange 203 nicht voll ist, sucht 404 das
System 200 nach einem Pixel in dem PPH 202, dessen
PPH-Adresse eine Bank-und
Zeilenadresse (RAS) umfaßt,
die zu der offenen Seite und der Bank des zuletzt gelesenen oder
geschriebenen Pixels paßt.
Wenn ein solches Pixel gefunden wird, schreibt 405 das
System 200 das Pixel in die Warteschlange 203.
Wie vorhergehend erwähnt,
kann ein derartiger Zugriff bei einigen Speichersystemen relativ
schnell (z. B. in einem Zyklus) durchgeführt werden. Falls kein solches
Pixel gefunden wird, sucht 406 das System 200 nach
einem Pixel in dem PPH 202, dessen PPH-Adresse zu irgendeiner
offenen Seite paßt.
Wenn ein derartiges Pixel gefunden wird, schreibt 405 das
System 200 das Pixel in die Warteschlange 203.
Wie oben angegeben, kann ein solcher Zugriff bei einigen Speichersystemen
mit einer mittleren Geschwindigkeit (z. B. in drei Zyklen) durchgeführt werden.
Falls keine derartige Übereinstimmung
gefunden wird, sucht 407 das System 200 nach irgendeinem
gültigen
Pixel in dem PPH 202, ungeachtet einer Bank- oder Seitenadresse.
Wenn ein gültiges
Pixel gefunden wird, schreibt 405 das System 200 das
Pixel in die Warteschlange 203. Wie vorhergehend angegeben,
ist bei herkömmlichen
Speichersystemen ein derartiger Zugriff relativ langsam (z. B. neun
Zyklen für
Lesevorgänge oder
sechs Zyklen für
Schreibvorgänge).
Bei einer Ausführung
werden die Suchvorgänge 404, 406 und 407 für eine verbesserte
Leistungsfähigkeit
gleichzeitig durchgeführt.
-
Der
Speicher-Controller 204 gewinnt Pixel aus der Warteschlange 203 wieder
und führt
basierend auf den Pixeldarstellungen aus der Warteschlange 203 entsprechend
Zugriffe auf einen Texturabbildung-RAM 205 durch. Arbeitsvorgänge 206,
beispielsweise Mischen, z-Vergleichen
und dergleichen, werden an den wiedergewonnen Pixeln je nach Anwendung
für eine
Ausgabe in den Bildpuffer 207 durchgeführt, der herkömmlicherweise
in einem Video-RAM
implementiert ist. Der Bildpuffer 207 wird auf eine Anzeige 209 ausgegeben,
die als eine herkömmliche
Kathodenstrahlröhre
oder eine andere Ausgabevorrichtung implementiert ist.
-
Datenstrukturen
-
Gemäß einer
Ausführung
verwendet das System 200 die folgenden Datenstrukturen,
welche die Felder der Einträge
in einem Heap-Modul 305 und einem Pixelmodul 306 definieren.
Wie es oben dargelegt ist, ist ein Neun-Bit-Komparator, ein N-Bit-Komparator
und ein M-Bit-Komparator
jedem Eintrag des Heap-Moduls 305 zugeordnet. Jeder Eintrag
liefert eine globale Drei-Bit-Ausgabe (d. h. jeder Eintrag liefert
drei Bits einer Ausgabe, die als eine Eingabe zu einem MPE 303 geliefert
werden müssen),
darin den Wert von valid, und das jeweilige Ein-Bit-Ergebnis aus
dem Neun- und dem N-Bit-Komparator.
-
-
-
Implementierung
-
Unter
Bezugnahme auf 3 ist dort ein detailliertes
Blockdiagramm einer Ausführung
der vorliegenden Erfindung gezeigt. 3 umfaßt Komponenten,
die ein Verfügbarkeitsmodul 301,
ein Heap-Modul 305, einen Modifizierte-Priorität-Kodierer
(MPE = Modified Priority Encoder) 303, ein Steuerungsmodul 304 und
ein Pixelmodul 306 sowie Adreßregister 302 genannt
werden. Jede dieser Komponenten wird unten beschrieben. Bei den
Beschreibungen erzeugt jedes Modul zuerst Ausgaben basieren auf
aktuellen Register/Speicher-Einheiten und setzt dann die Register/Speicher-Werte
für den
nächsten
Zyklus.
-
Verfügbarkeitsmodul 301
-
Das
Verfügbarkeitsmodul
301 ist
eine FIFO-Warteschlange, die bis zu 2
M-1 M-Bit-Anzeiger
umfaßt,
die verfügbare
Slots in dem PPH
202 darstellen. Die folgenden Signale
werden von dem Verfügbarkeitsmodul
301 verwendet:
-
Ein
Client (Aufbereitungsmodul) fordert an, daß ein neues Pixel in das PPH 202 eingetragen
wird, indem er renable an dem Verfügbarkeitsmodul 301 erklärt. Das
neue Pixel wird in die Adreßregister 302 plaziert, einschließlich bank,
RAS, CAS und other. Das Verfügbarkeitsmodul 301 gibt
einen gültigen
windex zurück,
der bei dem Heap 202, dem Steuerungsmodul 204 und
dem Pixelmodul 203 eine Schreibfreigabe bewirkt (jeder Wert
außer
Null bewirkt eine Schreibfreigabe bei diesen Modulen). Wenn ein
von Null verschiedener windex erklärt wird, werden bank und RAS
in das Heap 202 geschrieben, wird bank allein in das Steuerungsmodul 204 und
das vollständige
Pixel in das Pixelmodul 204 geschrieben. Um zu bestimmen,
ob das PPH 202 voll ist, liest das Aufbereitungsmodul (nicht
gezeigt) auch den Wert von windex, um auf einen von Null verschiedenen
Wert hin zu prüfen.
Wenn das PPH 202 voll ist, beträgt windex 0. Wenn das Heap-Modul 305 ein
Pixel entfernt, das erfolgreich zu dem Speicher-Controller 204 ausgegeben wurde,
gibt es den o_done_index des Slots, der das Pixel enthielt, an das
Verfügbarkeitsmodul 301 zurück. Immer
wenn o_ done_index nicht Null beträgt, ist ein Schreibvorgang
zu dem Verfügbarkeitsmodul 301 freigegeben
und der Wert von o_done_index wird selbst in die FIFO-Warteschlange
eingetragen. Schließlich
wird das Verfügbarkeitsmodul 301 initialisiert, so
daß es
alle Indizes bzw. Anzeiger in das PPH 202 umfaßt. Da immer
ein Index bzw. Anzeiger aus dem Verfügbarkeitsmodul 301 entfernt
wird, wenn ein neues Pixel in das PPH 202 geschrieben wird,
und da immer der gleiche Index an die FIFO-Warteschlange zurückgegeben
wird, wenn das Pixel aus dem PPH 202 entfernt wird, ist
ein jeglicher windex, der durch das Verfügbarkeitsmodul 301 aktiviert
wird, immer ein gültiger
Index zu einem leeren Slot in dem PPH 202.
-
Weil
somit das Heap-Modul 305 in das Verfügbarkeitsmodul 301 nur
die Indizes jener Pixel schreibt, die aus dem PPH 202 entfernt
wurden, ist garantiert, daß diese
Schreibvorgänge
immer erfolgreich sind. Das Heap-Modul 305 kann keinen
Wert von Null in das Verfügbarkeitsmodul 301 schreiben
(i_done_index = 0 macht nichts) und somit kann auch kein Wert von
0 zurückgegeben
werden, wenn renable aktiviert wird. Bei jedem Zyklus kann ein Index
aus dem Verfügbarkeitsmodul 301 gelesen
und ein anderer Index zu diesem geschrieben werden.
-
Das
PPH 202 ist primär
durch das Heap-Modul 305, den MPE 303 und das
Steuerungsmodul 304 implementiert. Jedes dieser Module
wird nun der Reihe nach beschrieben.
-
Heap-Modul 305
-
Das
Heap-Modul 305 verwendet die folgenden Signale:
-
-
-
Das
Heap-Modul 305 behält
eine Kopie aller gültigen
bank und RAS-Pixeladressen. Jedem Eintrag sind Markierungszeichen
(Tags) zugeordnet, die Informationen liefern, die Seitenumbrüche und
offene Seiten identifizieren, um zu ermöglichen, daß das PPH 202 in einem
Zyklus die beste Adresse bestimmen kann, die zu dem Speicher-Controller
geschrieben werden soll. Dies ist in Form von zwei Komparatoren
(=_open_page() and =_bank()) implementiert. Ein zusätzlicher
Komparator (=_index()) ist vorgesehen, um zu ermöglichen, daß jede Position in dem Heap-Modul 305 ein
Pixel löschen
kann, das in dem vorhergehenden Zyklus an den Speicher-Controller 204 versandt
wurde. Bei jedem Zyklus vergleicht jede Position in dem Heap-Modul 305 die bank-Adresse
jedes Pixels mit der i_last_bank-Adresse des Pixels, das zuletzt
an den Speicher-Controller 204 ausgegeben wurde, und ihre
RAS-Adresse mit der RAS-Adresse der offenen Seite an der Bank, zu
der ihr Pixel geschrieben wird (d. h. sie vergleicht mit i_open_pages[bank]).
In Kombination mit einem gültigen
Bit für
jede Position erzeugen diese zwei Komparatoren ein Ergebnis mit
drei Bits, welches das folgende anzeigt:
- • 111: das
Pixel ist für
eine offene Seite an der zuletzt beschriebenen Bank bestimmt;
- • 011:
das Pixel ist für
eine offene Seite an einer anderen Bank bestimmt;
- • 001
oder 101: das Pixel ist gültig,
aber für
keine offene Seite bestimmt;
- • 000:
das Pixel ist nicht gültig.
-
Jedes
Pixel weist ein solches Ergebnis mit drei Bits auf, so daß bis zu
2M-1 derartiger Ergebnisse erzeugt und als
eine Eingabe (i_pixel_status) zu dem MPE 303 geliefert
werden.
-
Bei
einer Ausführung
sind zusätzliche
Markierungszeichen vorgesehen, um das Grundelement zu identifizieren,
zu dem jedes Pixel gehört.
Dies ist bei reihenfolgeabhängigen
Anwendungen vorteilhaft, d. h. bei Anwendungen, bei denen es bevorzugt
wird, eine relative Reihenfolge der Erzeugung von Grundelementen
zu bewahren. Ein Grundelement-ID-Feld mit beispielsweise zwei Bits
kann für
jedes Pixel vorgesehen sein.
-
Das
Heap-Modul
305 implementiert somit den folgenden Code: Gleichzeitig
bei jedem Zyklus:
-
Gleichzeitig
bei jedem Zyklus führt
jeder Eintrag „this" in dem Heap[] folgendes
durch:
-
Gleichzeitig
bei jedem Zyklus:
-
-
Unter
Bezugnahme auf 8 ist eine Implementierung des
Heap-Moduls 305 gemäß einer
Ausführung
der vorliegenden Erfindung gezeigt. Bei dem gezeigten Beispiel beträgt N = 3
für acht
Speicherbänke
auf jedem Kanal und 8 MB Speicher.
-
Ein
ix-Register 801 stellt my_index dar. ν 802 ist das valid-
Bit, b 803 ist die Bank. b 803 wählt eine
der Bänke
für einen
Vergleich. Ein Komparator 805 vergleicht RAS 804 mit
einer Liste 809 offener Seiten. Ein Komparator 806 vergleicht
die Bank, auf die zuletzt zugegriffen wurde, mit b. Ein Komparator 808 vergleicht
den letzten Index und den aktuellen Index ix 801, um sicherzustellen,
daß ein
echter Eintrag verfügbar
ist. Ein Multiplexer 807 nimmt die Ausgaben 805, 806 und 808,
um ein 3-Bit-Signal zu erzeugen, das zu dem MPE 303 gesendet
werden soll.
-
MPE 303
-
Der
MPE
303 verwendet die folgenden Signale:
-
Der
MPE 303 wählt
ein „bestes" Pixel, das zu dem
Speicher-Controller 204 ausgegeben werden soll, basierend
auf den folgenden Kriterien, was eine Implementierung des oben in
Verbindung mit 4 beschriebenen Verfahrens ist:
- • Den
Index eines Pixels mit i_pixel_status = 111 wählen, falls es ein derartiges
Pixel gibt (gleiche Bank, gleiche Seite) (Schritt 404);
- • den
Index eines Pixels mit i_pixel_status = 011 wählen, falls es ein derartiges
Pixel gibt (offene Seite an anderer Bank) (Schritt 406);
- • den
Index eines Pixels mit i_pixel_status = 001 oder 101 wählen, falls
es ein derartiges Pixel gibt (irgendein gültiges Pixel) (Schritt 407);
- • 0
zurückgeben
(keine gültigen
Pixel) (Schritt 401 oder 407).
-
Der
MPE
303 implementiert den folgenden Code:
-
Steuerungsmodul 304
-
Das
Steuerungsmodul
304 verfolgt mit, welche Seiten in welcher
Bank offen sind. Die folgenden Signale werden von dem Steuerungsmodul
304 verwendet:
-
Das
Steuerungsmodul 304 behält
die_last_bank, zu der geschrieben wurde, und den last_index des Pixels,
das bei dem vorhergehenden Zyklus geschrieben wurde, und hält ferner
eine Ta belle von open_pages[]. Es liefert diese als eine Eingabe
zu dem Heap-Modul 305. Zusätzlich behalten das Steuerungsmodul 304 und
das Heap-Modul 305 zusammen (in einem einfachen Zwei-Zyklus-Protokoll)
eine korrekte Version der open_pages[]-Tabelle bei. Wenn ein Seitenumbruch
auftritt, wird dies von dem MPE 303 signalisiert und zwei
Zyklen lang werden keine Pixel aus dem PPH 202 gelesen
(solange das PPH 202 nicht voll ist, können immer noch Pixel während dieser
zwei Zyklen in das PPH 202 eingegeben werden).
-
Das
Steuerungsmodul 304 implementiert den folgenden Code:
-
Gleichzeitig
bei jedem Zyklus:
-
Pixelmodul 306
-
Das
Pixelmodul
306 ist ein Standard-RAM oder eine Registerdatei
mit einer Steuerung, die Pixeldaten und Farbinformationen umfaßt. Die
folgenden Signale werden von dem Pixelmodul
306 verwendet:
-
Bei
jedem Zyklus wird ein Pixel aus dem Pixelmodul 306 gelesen
und zu dem Speicher-Controller 204 geschrieben.
Der Lesevorgang aus dem Pixelmodul 306 wird mit der Logik
in dem Steuerungsmodul 304, dem Heap-Modul 305 und
dem MPE 303 in Pipelineverarbeitung verarbeitet, so daß das in
dem Zyklus t ausgewählte
Pixel in dem Zyklus t + 1 aus dem Pixelmodul 306 gelesen
und zu dem Speicher-Controller geschrieben wird. Natürlich wird
kein Pixel aus dem Pixelmodul 306 gelesen, wenn das PPH 202 leer
ist.
-
Das
Pixelmodul
306 implementiert den folgenden Code:
-
Lesevorgang
-
Unter
Bezugnahme auf 7 ist dort ein Flußdiagramm
eines Lesevorgangs des PPH 202 basierend auf einer Pipeline
mit zwei Zyklen gezeigt. Die Zeitsteuerung bei dieser Pipeline basiert
auf einer zweiphasigen Taktung. In der ersten Phase verarbeitet
das PPH 202 Signale aus einem Speicher durch eine Kombinationslogik.
In der zweiten Phase wird ein Speicher aktualisiert. Bei einem Zyklus
t treten Schritte 700 bis 704 auf; bei einem Zyklus
t + 1 treten Schritte 705 bis 707 auf.
-
Zyklus
t: Zuerst müssen
die Signale von dem Steuerungsmodul 304 zu dem Heap-Modul 305 gültig sein.
Dann erzeugt 701 das Heap-Modul 305 alle o_pixel_status[]-Bits.
Der MPE 303 wählt
einen Index aus 702 und liefert ihn zu dem Steuerungsmodul 304 und
dem Pixelmodul 306. Das Steuerungsmodul 304 aktualisiert 703 last_bank,
last_index und bank[i_index]. Das Pixelmodul 306 speichert 704 den
bei 702 erhaltenen Index für eine Verwendung bei dem nächsten Zyklus.
-
Zyklus
t + 1: Der Index des Eintrags in dem Heap-Modul 305, der
bei dem letzten Zyklus (falls es irgendwelche gibt) ausgewählt 702 wurde,
wird zu dem Verfügbarkeitsmodul 301 geschrieben 705 (o_done_index).
Das Pixelmodul 306 schreibt 706 das Pixel bei
rindex (i_index des letzten Zyklus) zu dem Speicher-Controller 204.
-
FIFO-Modus
-
Das
PPH 202 kann als eine einfache FIFO-Warteschlange wirksam
sein, wenn i_FIFO gegenüber
dem MPE 303 erklärt
ist. Bei einem derartigen Betrieb behält der MPE 303 den
last_index, der aus dem PPH 202 (dieser ist auf 0 initialisiert)
gelesen wurde, und versucht bei jedem Zyklus ((last_index + 1)mod2M) zurückzugeben.
Genauer gesagt, falls das Pixel bei diesem Folgeindex (mod2M) gültig
ist (was der MPE 303 aus i_pixel_status[] bestimmen kann),
gibt der MPE 303 diesen nächsten Index (o_index) zurück; der
MPE 303 speichert in diesem Fall auch den Index als last_index.
Falls das Pixel bei dem Folgeindex ungültig ist, setzt der MPE 303 o_index
= 0 und modifiziert last_index nicht.
-
Wie
es oben beschrieben ist, ist das Verfügbarkeitsmodul 301 eine
FIFO-Warteschlange und Einträge werden
zu dem Verfügbarkeitsmodul 301 in
der aus dem PPH 202 gelesenen Reihenfolge zurückgegeben. Den
Betrieb des MPE 303 in einem FIFO-Modus, um aufeinanderfolgende
Einträge
zurückzugeben,
solange das Pixel gültig
ist, vorausgesetzt, arbeitet das PPH 202 somit in diesem
Modus als eine FIFO-Warteschlange. Bei einer Ausführung muß der Client
des PPH 202 i_FIFO während
der ganzen Zeit erklären,
in der ein FIFO-Modus erwünscht
ist, und muß ferner
sicherstellen, daß das
PPH 202 leer ist, bevor es dazu gebracht wird, von dem
FIFO-Modus in den PPH-Modus überzugehen.
Irgendein anderer Betrieb ist undefiniert.
-
Seitenaktualisierungsprotokoll
-
Bei
einer Ausführung
werden, wenn ein Seitenumbruch auftritt, zwei Zyklen benötigt, um
die Tabelle offener Seiten zu aktualisieren. Wenn der MPE 303 erfaßt, daß ein Seitenumbruch
infolge einer bank- und RAS-Adresse eines gegebenen Pixels auftreten
wird, signalisiert er dies über
o_pbreak an das Steuerungsmodul 304. Da der Pixelindex
o_index an das Steuerungsmodul 304 und auch an das Pixelmodul 306 geliefert wird,
wird das Pixel bei dem nächsten
Zyklus auch zu dem Speicher-Controller 204 geschrieben.
Immer wenn somit eine Pixeladresse, die einen Seitenumbruch bewirken
wird, zu einem Speicher ausgegeben wird, gibt es bald eine Totzeit
gewisser Länge,
z. B. sechs oder acht Zyklen bei einigen Speichersystemen. Das PPH 202 kann
diese Totzeit verwenden, um bei einem Seitenumbruch Tabellen zu
aktualisieren. Während
der zwei zusätzlichen
Zyklen, die der MPE 303 nach einem Seitenumbruch für eine Seitenaktualisierung
benötigt,
schreibt der MPE 303 keine in Frage kommenden Pixel zu
dem Steuerungsmodul 304 oder Pixelmodul 306.
-
Das
Seitenaktualisierungsprotokoll arbeitet wie folgt. Wenn das Steuerungsmodul
304 von
dem MPE
303 informiert wird, daß ein Seitenumbruch aufgetreten
ist, fragt es das Heap-Modul
305 nach
der RAS-Adresse, die den Seitenumbruch bewirkte. Wenn das Heap-Modul
305 die
RAS-Adresse (o_RAS und o_valid RAS) zurückgibt, aktualisiert das Steuerungsmodul
304 open_pages[]
auf die neue Adresse für
diese Bank. Für
Zyklen, die bei c beginnen, ist das Protokoll wie folgt:
-
Unter
Bezugnahme auf 5 ist ein Zustandsdiagramm von
Seitenaktualisierungsvorgängen
gezeigt. Der MPE 303, das Steuerungsmodul 304 und
das Heap-Modul 305 weisen jeweils zwei Zustände mit
Bezug auf das Seitenaktualisierungsprotokoll auf. Der MPE 303 befindet
sich normalerweise in einem Zustand 505 und geht bei einem
Zyklus c in einen Aktualisierungszustand 506 über, um
das Seitenaktualisierungsprotokoll einzuleiten. Das Steuerungsmodul 304 befindet
sich normalerweise in einem Zustand 503 und geht bei dem Zyklus
c auf ein Empfangen von i_pbreak von dem MPE 303 hin in
einen Aktualisierungszustand 504 über. Das Heap-Modul 501 befindet
sich normalerweise in einem Zustand 501 und geht bei dem
Zyklus c + 1 auf ein Empfangen von i_pbreak von dem Steuerungsmodul 304 hin
in einen Aktualisierungszustand 502 über; zu dieser Zeit speichert
das Heap-Modul 501 auch die RAS des Seitenumbruchs. Bei
dem Zyklus c + 2 erklärt
der MPE 303 i_valid_RAS, sendet das Heap-Modul 305 die
gespeicherte RAS zu dem Steuerungsmodul 304 und aktiviert
o_valid_RAS und aktualisiert das Steuerungsmodul 304 open_pages[]
mit der neuen RAS. Alle drei Module 303, 304 und 305 kehren
dann zu ihren Normalzuständen 505, 503 bzw. 501 zurück.
-
Vorladung
einer anderen Bank
-
Wenn
sich das PPH 202 nicht in einem FIFO-Modus befindet, lädt es bei
einer Ausführung
eine Seite auf irgendeiner „anderen" Bank vor, wenn dies
möglich
ist. Vorladen ist eine Technik, die auf dem Gebiet gut bekannt ist.
Durch Vorladen einer Seite auf einer anderen Bank kann die vorliegende
Erfindung die Vorladeeinbuße
durch ein Verschachteln eines Vorladevorgangs mit einem anderen
Lese- oder Schreibvorgang verstecken. Unter Bezugnahme auf 6 ist
ein Flußdiagramm
eines Verfahrens zum Auswählen
einer Seite gezeigt, die vorgeladen werden soll. Zuerst bestimmt 601 das
PPH 202, ob irgendwelche gültigen Pixel übrig sind.
Eine Bank wird nur dann vorgeladen, wenn es ein gültiges Pixel
gibt, das eine Seite an dieser Bank verwenden kann. Bei einer Ausführung führt das
PPH 202 diese Bestimmung durch ein Überprüfen des gültigen Bits der Pixel durch.
Falls keine gültigen
Pixel übrig
sind, werden keine Seiten vorgeladen. Andernfalls wählt das
PPH 202 ein gültiges
Pixel aus 602.
-
Das
PPH 202 bestimmt 603 dann, ob sich das ausgewählte Pixel
auf der gegenwärtig
verwendeten Bank befindet. Falls dem so ist, wird die Bank nicht
vorgeladen und das PPH 202 kehrt zu 601 zurück, um ein anderes
Pixel auszuwählen.
Bei einer Ausführung
führt das
PPH 202 die Bestimmung bei 603 durch eine Überprüfung durch,
ob der Pixelstatus 0×7
oder 0×5
ist, was anzeigt, daß sich
das Pixel auf der gegenwärtig
verwendeten Bank befindet.
-
Wenn
sich das ausgewählte
Pixel nicht auf der gegenwärtig
verwendeten Bank befindet, bestimmt 604 das PPH 202 dann,
ob sich das Pixel auf einer Bank befindet, für die es eine offene Seite
gibt, die verwendet werden kann. Falls dem so ist, bringt ein Verwenden
dieser offenen Seite keine Einbuße mit sich; deshalb wird die
Bank nicht vorgeladen und das PPH 202 kehrt zu 601 zurück, um ein
anderes Pixel auszuwählen.
Bei einer Ausführung
führt das
PPH 202 die Bestimmung bei 604 durch eine Überprüfung durch,
ob die Bank, die das Pixel umfaßt,
ein anderes Pixel mit einer passenden Bank aufweist; mit anderen
Worten prüft
das PPH 202 die Bank des Pixels gegen die Bänke aller
anderer Pixel mit einem Status 0×3. Alternativ kann der Einfachheit
halber das PPH 202 einfach prüfen, ob es irgendein Pixel
gibt, das immer noch eine andere Bank verwenden kann; d. h. bestimmen,
ob es irgendein Pixel auf der Bank mit dem Status 0×3 gibt.
-
Wenn
sich das ausgewählte
Pixel nicht auf einer Bank befindet, die eine offene Seite aufweist,
die verwendet werden kann, geht das PPH 202 dazu über, die
Seite, die das Pixel umfaßt,
vorzuladen 605, wie es unten ausführlicher beschrieben wird.
Das PPH 202 stellt dann sicher 606, daß Pixel,
die nachfolgend gewählt werden,
um die vorgeladene Bank zu verwenden, die Seite verwenden, die vorgeladen
wurde. Bei einer Ausführung
implementiert das PPH 202 dies durch ein Aktualisieren
der Tabelle offener Seiten, nachdem die Vorladung 605 durchgeführt wurde.
Nachdem das PPH 202 Pixel für die aktuelle Bank und die
offene Seite ausgewählt
hat, wählt
es somit automatisch Pixel für
die eben vorgeladene, offene Seite aus, da das Pixelauswahlverfahren
offene Seiten gegenüber
Seitenumbrüchen
bevorzugt. In der Praxis verwendet das PPH 202 im wesentlichen
das gleiche Seitenaktualisierungsprotokoll, das für Seitenumbrüche verwendet
wird, und benötigt deshalb
typischerweise zusätzlich
zwei Zyklen, bevor die Seitentabellen tatsächlich aktualisiert sind. In
der Zwischenzeit läßt es explizit
nur jene Pixel durch, deren Adressen für die aktuelle Bank und eine
offene Seite vorgesehen sind.
-
Das
Verfahren zum Vorladen einer anderen Bank gemäß einer Ausführung wird
nun beschrieben. Die Vorladung einer anderen Bank wird durch den
MPE 303, das Steuerungsmodul 304 und das Pixelmodul 306 implementiert.
Wenn der MPE 303 erfaßt,
daß eine
andere Bank vorgeladen werden kann (durch das Verfahren von 6),
schreibt er den o_index zu dem Steuerungsmodul 304 und
dem Pixelmodul 306 und erklärt o_precharge. Der MPE 303 setzt
ferner ein einziges Statusbit, in_precharge, das nachfolgende Handlungen leitet.
Immer wenn in_recharge gesetzt ist, veranlaßt der MPE 303 Transaktionen
nur an der aktuellen Bank und einer offenen Seite. Dies steht im
Gegensatz zu seinem Verhalten, wenn ein Seitenumbruch auftritt;
in dem letztgenannten Fall veranlaßt der MPE 303 keine
weiteren Transaktionen, bis das Seitenaktualisierungsprotokoll abgeschlossen
ist.
-
Wenn
das Steuerungsmodul 304 eine Vorladeanforderung empfängt, speichert
es die vorzuladende Bank in einem Register precharge_bank und leitet
bei dem nächsten
Zyklus im wesentlichen das gleiche Seitenaktualisierungsprotokoll
(über o_precharge)
ein, das bei einem Seitenumbruch verwendet wird, wie es oben beschrieben
ist. Es gibt drei Unterschiede: 1) Namen der Signale umfassen precharge
anstelle von pbreak; 2) das Heap-Modul 305 löscht das
Pixel nicht, das die Vorladung bewirkt; und 3) der MPE 303 ermöglicht,
daß Pixel
mit Adressen für
die aktuelle Seite und Bank während
einer Vorladung durchlaufen können.
-
Der
Betrieb des Heap-Moduls 305 bei einem Empfang von i_recharge
ist im wesentlichen der gleiche wie bei dem Empfang von i_pbreak;
das Modul speichert im wesentlichen die RAS, die vorgeladen werden
soll, in saue_RAS. Bei dem darauffolgenden Zyklus wird dem Steuerungsmodul 304 die
RAS über
i_RAS zurückgegeben
und es aktualisiert open_ages[precharge_bank] auf i_RAS. Während der
zwei Zyklen, in denen das Heap-Modul 305 und
das Steuerungsmodul 304 Informationen austauschen, erzeugt
das Heap-Modul 305 weiterhin
in Frage kommende Pixel für
Speicherzugriffe. Falls irgendwelche von diesen für die aktuelle
Bank und eine offene Seite vorgesehen sind, werden sie durch den
MPE 303 zu dem Steuerungsmodul 304 und dem Pixelmodul 306 weitergeleitet
und als Speichertransaktionen zu der FIFO-Warteschlange ausgegeben. Es
werden keine anderen Transaktionen von dem MPE 303 zugelassen,
bis das in_precharge-Bit gelöscht
ist. Dies tritt bei dem letzten Zyklus des Seitenaktualisierungsprotokolls
auf, wenn das Heap-Modul 305 valid RAS gegenüber dem
Steuerungsmodul 304 und dem MPE 303 erklärt.
-
Eine
Vorladeanforderung an das Pixelmodul 306 ist identisch
mit einem Lese- oder Schreibvorgang, außer daß i_precharge erklärt wird;
da das Pixelmodul 306 das Vorladebit mit der Bank-, RAS-
und CAS-Adresse verkettet, wenn es einen Eintrag zu der FIFO-Warteschlange 203 des
Speicher-Controllers schreibt, ist sich das Pixelmodul 306 in
der Tat nicht dessen bewußt,
daß die
Transaktion eine Vorladung und kein Lesevorgang oder Schreibvorgang
ist. Ein Seitenumbruch und eine Vorladung können nicht simultan auftreten;
der MPE 303 behält
einen minimalen Zustand bei, um dies zu verhindern.
-
Aus
der obigen Beschreibung ist ersichtlich, daß die hierin offenbarte Erfindung
ein neuartiges und vorteilhaftes System und Verfahren zum Umsortieren
von Pixeln in Graphiksystemen liefert, um Bandbreite und Leistungsfähigkeit
zu verbessern. Die vorhergehende Erörterung offenbart und beschreibt
lediglich exemplarische Verfahren und Ausführungen der Erfindung.