-
HINTERGRUND
-
Technisches Gebiet
-
Diese Offenbarung bezieht sich auf eine Datenkomprimierungsschaltlogik.
-
Beschreibung des Stands der Technik
-
Rechenvorrichtungen können verschiedene Arten von Daten komprimieren, z. B. um den Speicher-Footprint oder die Bandbreite zu reduzieren. Komprimierung kann besonders nützlich sein für Multimediendaten wie etwa Pixel, die von einem Grafikprozessor verarbeitet werden. Einige Komprimierungen sind verlustbehaftet, so dass dekomprimierte Daten nicht mit dem Bild vor der Komprimierung übereinstimmen können. Die verlustfreie Komprimierung hingegen stellt die ursprünglichen Daten nach der Dekomprimierung bereit. Unterschiedliche verlustfreie Komprimierungstechniken können unterschiedliche Eigenschaften aufweisen, z. B. Rechenressourcen wie etwa Fläche oder Leistung, die für die Komprimierung erforderlich sind, Komprimierungsgeschwindigkeit, Komprimierungsverhältnisse usw. In ähnlicher Weise können unterschiedliche verlustbehaftete Komprimierungstechniken unterschiedliche Eigenschaften aufweisen, einschließlich Genauigkeit von Daten nach der Dekomprimierung (einige verlustbehaftete Techniken können zu mehr Verlust führen als andere). Die Qualität einer Komprimierungsimplementierung kann erhebliche Auswirkungen auf Leistung, Stromverbrauch oder Schaltungsbereich haben.
-
Figurenliste
-
- 1A ist ein Blockdiagramm, das eine beispielhafte Komprimierungsschaltlogik veranschaulicht, gemäß einigen Ausführungsformen.
- 1B ist ein Blockdiagramm, das eine beispielhafte verlustfreie und verlustbehaftete Komprimierungsschaltlogik veranschaulicht, gemäß einigen Ausführungsformen.
- 2A ist ein Blockdiagramm, das einen beispielhaften Block von Pixeln veranschaulicht, der vier Bereiche einschließt, gemäß einigen Ausführungsformen.
- 2B ist ein Blockdiagramm, das beispielhafte Nachbarbeziehungen für einen Block von Pixeln für einen Nachbarprädiktor veranschaulicht, gemäß einigen Ausführungsformen.
- 3 ist ein Flussdiagramm, das ein beispielhaftes Verfahren zum Auswählen einer verlustbehafteten Komprimierungstechnik veranschaulicht, gemäß einigen Ausführungsformen.
- 4 ist ein Blockdiagramm, das eine beispielhafte Formatierung eines verlustfreien komprimierten Blocks von Pixeln veranschaulicht, gemäß einigen Ausführungsformen.
- 5 ist ein Flussdiagramm, das ein beispielhaftes Verfahren für eine verlustbehaftete Komprimierung veranschaulicht, gemäß einigen Ausführungsformen.
- 6 ist ein Blockdiagramm, das eine beispielhafte Formatierung eines Bereichs eines verlustbehafteten komprimierten Blocks von Pixeln veranschaulicht, gemäß einigen Ausführungsformen.
- 7 ist ein Flussdiagramm, das ein beispielhaftes Verfahren für verlustfreie Komprimierung veranschaulicht, gemäß einigen Ausführungsformen.
- 8 ist ein Flussdiagramm, das ein beispielhaftes Verfahren für verlustbehaftete Komprimierung veranschaulicht, gemäß einigen Ausführungsformen.
- 9 ist ein Blockdiagramm, das ein beispielhaftes Computersystem veranschaulicht, gemäß einigen Ausführungsformen.
- 10 ist ein Blockdiagramm, das ein beispielhaftes computerlesbares Medium veranschaulicht, das Schaltungsdesigninformationen speichert, gemäß einigen Ausführungsformen.
-
Diese Beschreibung schließt Bezugnahmen auf verschiedene Ausführungsformen ein, um anzugeben, dass die vorliegende Offenbarung sich nicht auf eine bestimmte Implementierung beziehen soll, sondern vielmehr auf eine Reihe von Ausführungsformen, die in den Geist der vorliegenden Offenbarung fallen, einschließlich der beigefügten Ansprüche. Besondere Merkmale, Strukturen oder Eigenschaften können auf jegliche geeignete Weise kombiniert werden, die mit dieser Offenbarung im Einklang steht.
-
Innerhalb dieser Offenbarung können unterschiedliche Entitäten (die verschiedentlich als „Einheiten“, „Schaltungen“, andere Komponenten usw. bezeichnet werden können) als „konfiguriert“, um eine oder mehrere Aufgaben oder Operationen durchzuführen, beschrieben oder beansprucht werden. Diese Formulierung - [Entität], die konfiguriert ist, [um eine oder mehrere Aufgaben durchzuführen] - wird hierin verwendet, um sich auf eine Struktur (d. h. etwas Physisches, wie eine elektronische Schaltung) zu beziehen. Insbesondere wird diese Formulierung verwendet, um anzugeben, dass diese Struktur angeordnet ist, um die eine oder die mehreren Aufgaben während des Betriebs durchzuführen. Eine Struktur kann als „konfiguriert, um“ eine Aufgabe durchzuführen, bezeichnet werden, selbst wenn die Struktur aktuell nicht betrieben wird. Eine „Komprimierungsschaltung, die konfiguriert ist, um Blöcke von Pixeldaten zu verarbeiten,“ soll zum Beispiel eine Schaltung abdecken, die diese Funktion während des Betriebs durchführt, selbst wenn die betreffende Schaltung derzeit nicht verwendet wird (z. B. keine Stromversorgung damit verbunden ist). Somit bezieht sich eine Entität, die als „konfiguriert, um“ eine Aufgabe durchzuführen, beschrieben oder angegeben ist, auf etwas Physisches, wie eine Vorrichtung, eine Schaltung, einen Speicher, der Programmanweisungen speichert, die ausführbar sind, um die Aufgabe zu implementieren, usw. Diese Wendung wird hierin nicht verwendet, um auf etwas nicht Greifbares Bezug zu nehmen.
-
Der Begriff „konfiguriert, um“ soll nicht „konfigurierbar, um“ bedeuten. Eine unprogrammierte FPGA würde zum Beispiel nicht angesehen als „konfiguriert, um“ eine bestimmte Funktion auszuführen, obwohl sie „konfigurierbar, um“ diese Funktion auszuführen, sein kann. Nach geeigneter Programmierung kann die FPGA dann konfiguriert werden, um diese Funktion durchzuführen.
-
Das Angeben in den beiliegenden Ansprüchen, dass eine Struktur „konfiguriert ist, um“ eine oder mehrere Aufgaben durchzuführen, ist ausdrücklich nicht dazu gedacht, sich auf 35 U.S.C. § 112(f) für dieses Anspruchselement zu berufen. Dementsprechend soll keiner der Ansprüche in dieser Anmeldung in der eingereichten Fassung so ausgelegt werden, dass er Mittel-plus-Funktion-Elemente aufweist. Wenn sich der Anmelder während des Erteilungsverfahrens auf die Anwendung von Abschnitt 112(f) berufen möchte, gibt er Anspruchselemente unter Verwendung des Konstrukts „Mittel zum“ [Durchführen einer Funktion] an.
-
Wie hierin verwendet, wird der Begriff „basierend auf“ verwendet, um einen oder mehrere Faktoren zu beschreiben, die eine Bestimmung beeinflussen. Dieser Begriff schließt nicht die Möglichkeit aus, dass zusätzliche Faktoren die Bestimmung beeinflussen können. Das heißt, eine Bestimmung kann ausschließlich auf angegebenen Faktoren basieren oder auf den angegebenen Faktoren sowie anderen, nicht angegebenen Faktoren basieren. Man betrachte die Phrase „A basierend auf B bestimmen“. Diese Phrase gibt an, dass B ein Faktor ist, der verwendet wird, um A zu bestimmen, oder der die Bestimmung von A beeinflusst. Diese Phrase schließt nicht aus, dass die Bestimmung von A auch auf einem anderen Faktor, wie C, basieren kann. Diese Phrase soll auch eine Ausführungsform abdecken, in der A ausschließlich basierend auf B bestimmt wird. Wie hierin verwendet, ist die Phrase „basierend auf/auf der Grundlage von“ gleichbedeutend mit der Phrase „basierend mindestens teilweise auf“.
-
Ferner implizieren, wie hierin verwendet, die Begriffe „erst(er, -e, -es)“, „zweit(er, -e, - es)“, „dritt(er, -e, -es)“ usw. nicht notwendigerweise eine Reihenfolge (z. B. zeitlich) zwischen Elementen. Zum Beispiel impliziert eine Bezugnahme auf eine „erste“ Grafikoperation und eine „zweite“ Grafikoperation ohne einen zusätzlichen Sprachgebrauch, der die zeitliche Beziehung zwischen diesen Operationen beschränkt, keine Reihenfolge der Grafikoperation. Kurz gefasst werden Bezugnahmen wie „erst(er, - e, -es)“, „zweit(er, -e, -es)“ usw. als Bezeichnungen zur Vereinfachung der Bezugnahme in der Beschreibung und den beiliegenden Ansprüchen verwendet.
-
DETAILLIERTE BESCHREIBUNG
-
Diese Offenbarung erörtert Ausführungsformen von Techniken sowohl für verlustfreie als auch verlustbehaftete Komprimierung. In einigen Ausführungsformen arbeitet ein Prozessor in einem Modus, in dem eine verlustbehaftete Komprimierung nur für einen gegebenen Block von Pixeln verwendet wird, wenn bestimmt wird, dass die verlustfreie Komprimierung eine Zielausgangsdatengröße nicht erfüllen kann. In verschiedenen offenbarten Ausführungsformen arbeitet die Komprimierung an Blöcken von Pixeldaten, aber diese Beispiele sollen den Schutzumfang der vorliegenden Offenbarung nicht einschränken. Vielmehr können die offenbarten Techniken implementiert werden, um verschiedene Arten von Eingangsdaten zu komprimieren.
-
1A ist ein Blockdiagramm, das eine beispielhafte Komprimierungsschaltlogik 110 veranschaulicht. Wie vorstehend erörtert, können die Eingangsdaten Werte für einen Block von zu komprimierenden Pixeln einschließen (und jedes Pixel kann Werte für mehrere Komponenten oder Kanäle einschließen). Die komprimierten Daten können zum Beispiel Daten, die Pixel nach der Komprimierung darstellen, Header-Informationen, die den Typ der verwendeten Komprimierung angeben, und Metadaten einschließen, welche die Größe des komprimierten Blocks beschreiben.
-
1B ist ein Blockdiagramm, das eine beispielhafte verlustfreie Komprimierungsschaltlogik 120 und verlustbehaftete Komprimierungsschaltlogik 130 veranschaulicht, gemäß einigen Ausführungsformen. In einigen Ausführungsformen ist die verlustbehaftete Komprimierungsschaltlogik 130 nicht konfiguriert, um die Eingangsdaten zu komprimieren, sofern die verlustfreie Komprimierungsschaltlogik 120 bestimmt, dass sie keine Zielkomprimierungsgröße erreichen kann. In einigen Ausführungsformen kann die verlustfreie und verlustbehaftete Komprimierung mindestens teilweise parallel ablaufen. Obwohl offenbarte Ausführungsformen sowohl verlustfreie als auch verlustbehaftete Komprimierung unterstützen, können die offenbarten Techniken auch unabhängig verwendet werden. Zum Beispiel kann ein Prozessor die offenbarten verlustbehafteten Komprimierungstechniken unterstützen, aber nicht die offenbarten verlustfreien Komprimierungstechniken oder umgekehrt. In einigen Ausführungsformen nutzen offenbarte Techniken jedoch die Tatsache, dass die Komprimierungsschaltlogik sowohl eine verlustfreie als auch verlustbehaftete Komprimierung für einen gegebenen Block von Pixeln in Betracht zieht.
-
2A ist ein Blockdiagramm, das einen beispielhaften Block von Pixeln veranschaulicht, gemäß einigen Ausführungsformen. Jedes Pixel kann mehrere entsprechende Datenfelder aufweisen, z. B. Komponenten, die für R, G, B, A-Kanäle oder andere Verwendungen verwendet werden können. Somit kann die Komprimierung des Blocks von Pixeln an mehreren Komponenten für jedes gültige Pixel arbeiten. In der veranschaulichten Ausführungsform schließt der Block MxN Pixel ein, wobei M und N ganze Zahlen sind, die gleich oder unterschiedlich sein können. Zum Beispiel kann der Block 4x4, 4x8, 8x4, 8x8, 8x16 usw. sein. In dem veranschaulichten Beispiel ist der Block durch die stärkeren Linien von 2A in vier Bereiche unterteilt. Ein Block kann in einigen Ausführungsformen in verschiedene geeignete Anzahlen von Bereichen unterteilt werden, die jeweils mehrere Pixel einschließen.
-
In einigen Ausführungsformen bestimmt die Vorrichtung verschiedene verlustfreie Komprimierungsprädiktoren, um eine verlustfreie Komprimierungstechnik auszuwählen, die z. B. zu dem größten Komprimierungsverhältnis unter den verfügbaren Techniken führt. Unterschiedliche Prädiktoren können unterschiedliche Basispixel verwenden, z. B. um Pixel basierend auf ihren Deltawerten relativ zur Basis zu kodieren. Zum Beispiel können offenbarte Techniken Herkunft, Gradient und Nachbarprädiktoren verwenden. In einigen Ausführungsformen verwenden die Basis- und Gradientenprädiktoren Pixel (0,0) als Basispixel, während der Nachbarprädiktor ein anderes Nachbarbasispixel (NB-Pixel) verwendet. In dem veranschaulichten Beispiel befindet sich das NB-Pixel nahe der Mitte des Blocks. In anderen Ausführungsformen können ein oder mehrere Prädiktoren ihren Basisort für einen gegebenen Block von Pixeln dynamisch bestimmen, obwohl dies die Komplexität und den Stromverbrauch erhöhen kann.
-
In einigen Ausführungsformen stellt ein Ursprungsprädiktor jede Pixelkomponente als Deltawert relativ zu derselben Komponente eines Basispixels (z. B. Pixel (0,0)) dar. In einigen Ausführungsformen kann ein Ursprung-mit-Dekorrelationsprädiktor ähnlich dem Ursprungsprädiktor arbeiten, kann aber zuerst Ausgangswerte einer Komponente (z. B. der grünen Komponente) von den anderen entsprechenden Komponenten subtrahieren, was die Korrelation zwischen Komponenten reduzieren und Komprimierungsverhältnisse positiv beeinflussen kann. In einigen Ausführungsformen stellt ein Gradientenprädiktor jede Pixelkomponente als Deltawert relativ zu derselben Komponente eines Basispixels plus einem Gradientenwert dar. In einigen Ausführungsformen stellt ein Nachbarprädiktor jede Pixelkomponente als Deltawert relativ zu derselben Komponente eines Nachbarpixels dar. Ein Nachbar-mit-Dekorrelationsprädiktor kann ähnlich einem Nachbarprädiktor sein, aber mit einer subtrahierten Komponente.
-
2B zeigt ein beispielhaftes Muster für einen Nachbarprädiktor gemäß einigen Ausführungsformen. In 2B zeigt der Pfeil von jedem Pixel das Nachbarpixel an, basierend darauf, welches Delta berechnet wurde. Wie gezeigt, schließt das Muster ein Basispixel ein, das nicht unter Verwendung eines Deltas dargestellt wird und das an verschiedenen Orten in verschiedenen Ausführungsformen angeordnet sein kann. Das offenbarte Muster ist zu Erklärungszwecken eingeschlossen, soll aber den Schutzumfang der vorliegenden Offenbarung nicht einschränken; verschiedene Muster zum Codieren von Beziehungen zwischen Pixeln können für verschiedene Prädiktoren implementiert werden.
-
Beispielhafte verlustfreie Komprimierung unter Verwendung mehrerer Prädiktoren
-
In einigen Ausführungsformen berechnet ein Rechensystem mehrere verlustfreie Prädiktoren für unterschiedliche Komprimierungstechniken mindestens teilweise parallel, um die Leistung mehrerer unterschiedlicher Komprimierungstechniken auf einem Eingangsblock von Pixeldaten zu bestimmen. Nehmen wir zum Beispiel eine Situation, in der ein Ursprungsprädiktor ein Pixel mit einem größten Delta ab dem Ursprungswert von sieben hat, während ein Nachbarprädiktor ein Pixel mit einem größten Delta von drei hat. In einer Implementierung mit nicht vorzeichenbehafteten Deltas t benötigt der Ursprungsprädiktor drei Bits, um jedes Pixel in komprimierter Form darzustellen, während der Nachbarprädiktor nur zwei Bits benötigt, um jedes Pixel in komprimierter Form darzustellen. Der allgemeine beste Prädiktor kann ferner durch zusätzliche Überlegungen beeinflusst werden, wie die benötigte Header-Größe, ob die Verwendung einer Vorspannung die Deltagröße beeinflusst, ob Pixel in verschiedenen Bereichen des Blocks unter Verwendung unterschiedlicher Anzahlen von Bits dargestellt werden können usw., wie nachstehend ausführlicher erörtert. Somit kann das System nach der Berechnung der Größe, die für mehrere Prädiktoren parallel benötigt wird, die Komprimierungstechnik auswählen, welche die kleinste Komprimierungsgröße bereitstellt (z. B. Header-Metadaten plus Bits, die benötigt werden, um alle Pixel in dem Block darzustellen).
-
3 ist ein Flussdiagramm, das eine beispielhafte Technik für eine verlustfreie Komprimierung eines Blocks von Pixeln veranschaulicht, gemäß einigen Ausführungsformen. Das in 3 gezeigte Verfahren kann unter anderem in Verbindung mit beliebigen der hierin offenbarten Computerschaltlogik, Systeme, Vorrichtungen, Elemente oder Komponenten verwendet werden. In verschiedenen Ausführungsformen können einige der gezeigten Verfahrenselemente gleichzeitig, in einer anderen Reihenfolge als gezeigt durchgeführt oder weggelassen werden. Zudem können zusätzliche Verfahrenselemente ebenfalls wie gewünscht durchgeführt werden.
-
Bei 310 bestimmt ein Rechensystem in der veranschaulichten Ausführungsform ein Delta für jede Komponente jedes Pixels unter Verwendung mehrerer Prädiktoren. Beispielhafte Prädiktoren schließen einen Ursprungsprädiktor, einen Ursprung-mit-Dekorrelationsprädiktor, einen Gradientenprädiktor, einen Nachbarprädiktor und einen Nachbar-mit-Dekorrelationsprädiktor ein. Für den Gradientenprädiktor kann das System zunächst für jede Komponente x- und y-Gradienten für das Ursprungspixel (0, 0) bestimmen, z. B. gemäß den Gleichungen:
wobei die component width die Anzahl von Bits angibt, die verwendet wird, um eine Komponente darzustellen, und die ".c"-Schreibweise bezieht sich auf die aktuelle Komponente.
-
Der folgende Pseudocode stellt beispielhafte Techniken dar, um ein Delta für jeden Prädiktor für ein gegebenes Pixel bei der x, y-Position im Block zu bestimmen:
wobei das Pixel (0,0) das Basispixel für den Ursprungsprädiktor ist.
wobei die Dekorrelation durch Subtrahieren der grünen Komponente durchgeführt wird.
wobei das Pixel (0,0) das Basispixel für den Gradientenprädiktor ist.
wobei das Pixel (nx,ny) das Nachbarpixel für Pixel (x,y) gemäß einem Nachbarmuster ist.
-
Bei 312 bestimmt das System in der veranschaulichten Ausführungsform für den gesamten Block die größte Anzahl von Bits, die benötigt wird, um ein Delta für jede Pixelkomponente für jeden Prädiktor darzustellen. Das System kann Deltas als vorzeichenbehaftete Werte mit einer Bitbreite gleich der Komponentenbreite kodieren.
-
Das Folgende stellt eine beispielhafte Technik dar, um die Anzahl der Bits zu bestimmen, die für die Deltas einer gegebenen vorzeichenbehafteten Komponente benötigt wird:
wobei signed_num_bits eine Funktion ist, welche die Anzahl von Bits bestimmt, die benötigt wird, um eine 2-Komplement-Kodierung des Eingangs zu enthalten, max _delta_c der größte Deltawert für die Komponente ist und min _delta _c der kleinste Deltawert für die Komponente ist. In einigen Ausführungsformen ist das System konfiguriert, um die Anzahl von Bits zu bestimmen, die benötigt wird, um alle Deltas in dem Block für jede Komponente zu verpacken.
-
Bei 314 bestimmt das System in der veranschaulichten Ausführungsform auch für jeden Teilbereich des Blocks (z. B. jede der vier in 2A gezeigten Bereiche) eine größte Anzahl von Bits, die benötigt wird, um ein Delta für jede Pixelkomponente für jeden Prädiktor darzustellen. In einigen Ausführungsformen ist das System konfiguriert, um die Anzahl von Bits zu bestimmen, die benötigt wird, um alle Deltas in jedem Teilbereich des Blocks für jede Komponente zu verpacken. In einigen Ausführungsformen kann dies ermöglichen, dass unterschiedliche Bereiche unterschiedliche Anzahlen von Bits für die Deltas verwenden, wenn dies das Gesamtkomprimierungsverhältnis verbessert.
-
Bei 316 bestimmt das System in der veranschaulichten Ausführungsform, ob eine Vorspannung bits_c (z. B. um eins) für den Block reduzieren wird. In einigen Ausführungsformen wird diese Bestimmung für jede Komponente und jeden Prädiktor durchgeführt, wird jedoch nicht separat für jeden Bereich durchgeführt. Der folgende Pseudocode stellt eine beispielhafte Technik dar, um zu bestimmen, ob eine Vorspannung verwendet werden soll und der Vorspannungswert:
-
Bei 318 bestimmt das System in der veranschaulichten Ausführungsform potenzielle Reduktionen in Bitbreiten, um Deltas darzustellen, wenn unterschiedliche Anzahlen von Bits für Deltas in unterschiedlichen Bereichen verwendet werden. Zum Beispiel stellt der folgende Pseudocode eine Technik zum Bestimmen von region_bits _c dar, was die Anzahl von Bits darstellt, die benötigt wird, um ein Delta für eine Komponente für einen bestimmten Bereich darzustellen, wobei N die Anzahl der Bereiche darstellt:
-
Es ist zu beachten, dass in einigen Ausführungsformen eine maximale Reduktion für einen Bereich relativ zum delta_bits_c-Wert vorliegt. In einigen Ausführungsformen wird die reduction _c[] für jeden Bereich in dem Header für komprimierte Daten kodiert, wenn ein beliebiger Bereich eine Nicht-Null-Reduktion aufweist.
-
Bei 320 wählt das System in der veranschaulichten Ausführungsform einen oder mehrere Prädiktoren zur Verwendung beim Komprimieren des Blocks von Pixeln aus. In einigen Ausführungsformen bestimmt das System, welcher Prädiktor die beste Komprimierung durch Berechnen der variablen Größe in Bits ergibt. Der folgende Pseudocode stellt eine Technik zum Bestimmen der Anzahl von Bits dar, die für die Deltas für einen gegebenen Prädiktor benötigt wird:
wobei num_pixels_region für unterschiedliche Bereiche variieren kann, z. B. weil der Bereich mit dem Ursprungspixel möglicherweise kein Delta für dieses Pixel benötigt.
-
Das System kann dann für jeden Prädiktor die Kosten des Headers bestimmen, was basierend darauf variieren kann, ob der Prädiktor Bereiche oder Vorspannung verwendet. Ferner können einige Arten von Prädiktoren, wie Gradienten, zusätzlichen Header-Mehraufwand auf sich ziehen, um den Gradienten darzustellen.
-
Wobei region _code _size bits die Anzahl der Bits darstellt, die zum Festlegen der Größe der Deltas für einen Bereich benötigt wird, region_nonzero als wahr definiert wird, wenn ein beliebiger Bereichs-Reduktionscode (reduction _c[0 .. N-1] oben) nicht null ist, und predictor_c.bias angibt, ob ein Prädiktor Vorspannung verwendet hat.
-
In einigen Ausführungsformen wählt das System den Prädiktor mit der kleineren Größe für jede Komponente aus. Somit kann das Komprimieren des Blocks von Pixeln unterschiedliche Komprimierungstechniken für unterschiedliche Komponenten verwenden. In einigen Ausführungsformen gibt es eine vordefinierte Reihenfolge der Prädiktor-Auswahl, wenn Prädiktoren die gleiche Ausgangsgröße aufweisen. In einigen Ausführungsformen der verlustfreien Komprimierung können die offenbarten Berechnungen separat für unterschiedliche Komponenten durchgeführt werden. Im Gegensatz dazu kann die verlustbehaftete Komprimierung, wie nachstehend erörtert, Bits zwischen Komponenten in bestimmten Situationen teilen.
-
Bei 322 komprimiert das System in der veranschaulichten Ausführungsform den Block basierend auf der Auswahl. Dies kann das Speichern von Deltawerten für jede Komponente jedes Pixels unter Verwendung der bestimmten Parameter einschließen.
-
Bei 324 erzeugt das System in der veranschaulichten Ausführungsform ein Layout für einen Header für den Block und verpackt den Header. Der Header kann den ausgewählten Prädiktor, die Anzahl von Bits pro Delta, Bereichsinformationen, Vorspannungsinformationen usw. angeben. Detaillierte beispielhafte Ausführungsformen eines Headers werden nachstehend unter Bezugnahme auf 4 erörtert.
-
Bei 326 erzeugt das System in der veranschaulichten Ausführungsform Metadaten für den Block. In einigen Ausführungsformen geben die Metadaten die Größe des komprimierten Blocks an. Die Metadaten können die gleiche Größe sowohl für verlustbehaftete als auch verlustfreie Formate aufweisen, z. B. ein Byte. Die Metadaten können angeben, ob ein Block unkomprimiert oder komprimiert ist. Für komprimierte Blöcke können die Metadaten angeben, ob der Block verlustbehaftet oder verlustfrei ist. Für einen verlustfreien Block kann, wenn der Prädiktor für jede Komponente für den Block gleich ist und keine Komponenten Vorspannung oder eine Dekorrelation aktiviert haben, der Block als konstant beschrieben werden. Die Metadaten können gemäß einer Tabellensuche in diesem Szenario für unterschiedliche Komprimierungsbehälterformate eingestellt werden. Wenn der Block nicht konstant ist, kann der Block aufgefüllt werden und die Metadaten können die Blockgröße beschreiben. In einigen Ausführungsformen können, wenn alle Bits der Metadaten nicht benötigt werden, um die Blockgröße zu beschreiben, die Metadaten einen Abschnitt der Modusbits für eine Komponente (z. B. Komponente 0) von dem Header einschließen (was die Größe des komprimierten Blocks weiter reduzieren kann). In einigen Ausführungsformen weist ein Wert eines Werts von 4' b111 für Metadaten[7:4] eine verlustbehaftete Komprimierung auf. In einigen Ausführungsformen wird dieser Wert nie in den Metadaten auftreten, wenn die Größe eines verlustfreien komprimierten Blocks kleiner oder gleich einer Zielgröße ist. Diese Tatsache kann in einigen Ausführungsformen von einer verlustbehafteten Komprimierungstechnik verwendet werden, um die Größe des komprimierten Blocks in den Metadaten explizit zu kodieren. Wenn die Metadaten eine verlustbehaftete Komprimierung anzeigen, impliziert dies vielmehr, dass der komprimierte Block eine Zielblockgröße für die verlustbehaftete Komprimierung aufweist.
-
Bei 328 verpackt in der veranschaulichten Ausführungsform das System den Block. Dies kann das Ausrichten der Header- und Bereichsinformationen einschließen, wie in 4 unten gezeigt. Die Deltas für jeden Bereich können in Twiddle-Reihenfolge verpackt sein. Wenn ein Teil des Headers in den Metadaten für den Block eingeschlossen ist, entfernt das System diese Informationen aus dem Header und die Größe des Headers wird reduziert. Für unkomprimierte Blöcke kann das System die Pixel in einer vorbestimmten Reihenfolge ohne Header anordnen. In einigen Ausführungsformen können mehrere komprimierte Blöcke zum Beispiel in einen Makroblock für einen Schreibvorgang in den Speicher zusammen gepackt werden.
-
In verschiedenen Ausführungsformen können die offenbarten Techniken vorteilhafterweise verbesserte verlustfreie Komprimierungsverhältnisse und eine verbesserte Komprimierungsgeschwindigkeit relativ zu herkömmlichen Techniken bereitstellen. Insbesondere kann das Ermöglichen unterschiedlicher Deltabreiten für unterschiedliche Bereiche eine gute Komprimierung in Bereichen bereitstellen, in denen ein Bereich ein sehr großes maximales Delta mit einer angemessenen Menge von Header-Informationen aufweist, um die Reduktionen für die unterschiedlichen Bereiche zu kodieren.
-
4 ist ein Diagramm, das einen beispielhaften komprimierten Block von Pixeln mit einem Header veranschaulicht, gemäß einigen Ausführungsformen. In der veranschaulichten Ausführungsform schließt der komprimierte Block den Header 410 und Bereichsfelder ein, die Pixeldaten für N Bereiche festlegen.
-
Der Header 410 schließt in der veranschaulichten Ausführungsform ein Modusfeld, ein Bit, Feld und ein Basisfeld ein. Der Header 410 kann optional auch ein Bereichsfeld, ein Vorspannungsfeld oder ein Gradientenfeld (dargestellt unter Verwendung von gestrichelten Linien) einschließen, abhängig von den Komprimierungsparametern, die zum Komprimieren des Blocks verwendet werden. In einigen Ausführungsformen erzeugt das System für jede Komponente einen separaten Header für den Block von Pixeln. In anderen Ausführungsformen wird für den Block ein einzelner Header verwendet, und der Header schließt separate Instanzen von Feldern für verschiedene Komponenten ein.
-
Das Modusfeld beschreibt in einigen Ausführungsformen, wie die Komponente komprimiert wird. In einigen Ausführungsformen gibt dieses Feld den ausgewählten Prädiktor (z. B. Nachbar, Gradient oder Ursprung) an, ob unterschiedliche Anzahlen von Bits pro Delta in unterschiedlichen Bereichen aktiviert werden, ob die Vorspannung aktiviert ist, und ob die Dekorrelation verwendet wird. Für einige Formate, die keine Dekorrelation unterstützen, kann das System ein Dekorrelationsbit weglassen, um die Größe des Modusfeldes zu reduzieren.
-
Das Bitfeld zeigt in einigen Ausführungsformen die Delta-Bitbreite für den Block an. Zum Beispiel kann das System für jede Komponente das Bitfeld als delta_bits _c - 1 kodieren. Die Größe des Bitfelds kann log2(component_width) sein. In einigen Ausführungsformen stellt eine Delta-Bitbreite von 1 Werte von -1 bis 0 dar, eine Breite von 2 stellt Werte von -2 bis 1 dar, eine Breite von 3 stellt Werte von -4 bis 3 dar und so weiter. Es ist zu beachten, dass die Bitbreiten für einen oder mehrere Bereiche von der Bitbreite reduziert werden können, die durch das Bitfeld angegeben wird, wie nachstehend erörtert.
-
Das Basisfeld zeigt in einigen Ausführungsformen den für den ausgewählten Prädiktor verwendeten Basiswert an. Die Größe des Basisfelds kann der Komponentenbreite entsprechen. Wenn eine Dekorrelation aktiviert ist, gibt dieses Feld den dekorrelierten Basiswert an.
-
Das Bereichsfeld beschreibt in einigen Ausführungsformen die Reduktion für jeden Bereich im Block. Es ist zu beachten, dass in einigen Ausführungsformen dieses Feld nur enthalten sein kann, wenn das Modusfeld angibt, dass Bereiche aktiviert sind. In einigen Ausführungsformen schließt dieses Feld ein Unterfeld für jeden Bereich ein, das die Reduzierung des Feldes relativ zu der Bitbreite für den Block angibt. Wenn zum Beispiel die Bitbreite acht und die Reduktion des Bereichs R3 drei beträgt, beträgt die Bitbreite für Deltas im Bereich R3 fünf.
-
Das Vorspannungsfeld zeigt in einigen Ausführungsformen an, dass der Vorspannungswert während der Komprimierung von den Deltas subtrahiert wird. Es ist zu beachten, dass in einigen Ausführungsformen dieses Feld nur enthalten sein kann, wenn das Modusfeld angibt, dass eine Vorspannung aktiviert ist. In einigen Ausführungsformen ist die Größe dieses Feldes delta bits _c.
-
Das Gradientenfeld gibt in einigen Ausführungsformen die Gradienten dcdx und dcdy an. Die Größe dieses Feldes kann component width & ~1 sein. Es ist zu beachten, dass in einigen Ausführungsformen dieses Feld nur enthalten sein kann, wenn das Modusfeld angibt, dass der Gradientenprädiktor ausgewählt wurde.
-
Wie gezeigt, schließt jeder Bereich Deltas für die Pixel in diesem Bereich ein. Während der Dekomprimierung kann die Vorrichtung den Start jedes Bereichs basierend auf dem Header 410 lokalisieren. In dem veranschaulichten Beispiel schließt der Bereich 0 das Basispixel (entweder Pixel 0 oder Pixel M-1 in der veranschaulichten Ausführungsform) ein, wobei M die Anzahl von Pixeln pro Bereich ist. In der veranschaulichten Ausführungsform befindet sich das potenzielle Basispixel, das nicht tatsächlich als die Basis verwendet wird, immer an der letzten Stelle in dem Bereich, was die Dekodierung vereinfachen kann. Somit kann in verschiedenen Ausführungsformen der Bereich, der das Basispixel einschließt, ein Delta weniger als die anderen Bereiche einschließen. In dem veranschaulichten Beispiel werden die Pixel in den anderen Bereichen (z. B. Bereich N-1) in der Reihenfolge von Pixel P0 bis Pixel M-1 gespeichert.
-
In einigen Ausführungsformen ist die Dekompressionsschaltung so konfiguriert, dass sie einen komprimierten Pixelblock dekomprimiert, indem verschiedene Komprimierungsaktionen aufgehoben werden. Zum Beispiel kann die Dekomprimierungsschaltlogik zuerst den Ort eines Blocks von Pixeln bestimmen, z. B. basierend auf den Metadaten für Blöcke in einem größeren Datensatz, der mehrere komprimierte Blöcke einschließt. Die Dekomprimierungsschaltlogik dekodiert dann Metadaten für den Block. Wenn die Metadaten einen konstanten Block angeben, kann die Vorrichtung konstante Daten an jedes Pixel kopieren, wenn der Unterblock eine konstante Farbe einschließt. Wenn die Metadaten einen unkomprimierten Block angeben, kann die Dekomprimierungsschaltlogik einfach Pixeldaten in ein erwartetes Format entpacken.
-
Die Dekomprimierungsschaltlogik entpackt dann in einigen Ausführungsformen den Header, um die Größe der variablen Felder und den Start des verpackten Deltas zu bestimmen. Die Vorrichtung entpackt dann die Deltas unter Verwendung der vom Header festgelegten Bitbreiten. Für Ursprungs- und Gradientenmodi dekomprimiert das System jede Komponente direkt unter Verwendung des Headers durch Hinzufügen der Deltas zu dem Basiswert. Für den Nachbarmodus kann die Vorrichtung anfänglich interne Komponenten dekodieren, gefolgt von Nachbarkomponenten. Das System kehrt eine Dekorrelation, wenn sie während der Komprimierung angewendet wird, um. In einigen Ausführungsformen stellt dieser Dekomprimierungsvorgang die ursprünglichen Pixeldaten ohne Verlust bereit.
-
Beispielhafte verlustbehaftete Komprimierungstechniken
-
In einigen Ausführungsformen fällt das Rechensystem nach einer verlustfreien Technik, wie der Technik von 3, die bestimmt ist, eine komprimierte Zielblockgröße nicht zu erfüllen, auf eine verlustbehaftete Komprimierungstechnik zurück. Die Zielblockgröße kann programmierbar sein oder basierend auf dem Verarbeitungsmodus variieren. Ferner kann das Rechensystem in einigen Ausführungsformen eine verlustbehaftete Komprimierung durchführen, ohne zuerst die Ausgangsgröße für die verlustfreie Komprimierung zu bestimmen.
-
In einigen Ausführungsformen berücksichtigt die offenbarte verlustbehaftete Technik separat verschiedene Bereiche eines Blocks von Pixeln, die komprimiert werden. Ferner kann das System bestimmen, ob Bits über Komponenten geteilt werden sollen, nachdem eine anfängliche Quantisierung ausgewählt wurde, kann die Bitbreiten einstellen, die für Basen und Deltas verwendet werden, und kann bestimmte Fehlerbedingungen oder Rückfallmodi handhaben.
-
5 ist ein Flussdiagramm, das eine beispielhafte Technik für verlustbehaftete Komprimierung eines Blocks von Pixeln veranschaulicht, gemäß einigen Ausführungsformen. Das in 5 gezeigte Verfahren kann unter anderem in Verbindung mit beliebigen der hierin offenbarten Computerschaltlogik, Systeme, Vorrichtungen, Elemente oder Komponenten verwendet werden. In verschiedenen Ausführungsformen können einige der gezeigten Verfahrenselemente gleichzeitig, in einer anderen Reihenfolge als gezeigt durchgeführt oder weggelassen werden. Zudem können zusätzliche Verfahrenselemente ebenfalls wie gewünscht durchgeführt werden.
-
Bei 510 bestimmt das Rechensystem in der veranschaulichten Ausführungsform, dass verlustfreie Prädiktor-Ergebnisse zu groß sind. Zum Beispiel kann keiner der verlustfreien Prädiktoren, die in der Technik von 3 verwendet werden, einen Block von Pixeln auf eine Schwellendatengröße komprimieren. Es ist zu beachten, dass in anderen Ausführungsformen eine verlustbehaftete Komprimierung durchgeführt werden kann, ohne dass die verlustfreien Prädiktoren zuerst durchgeführt werden. In einigen Ausführungsformen kann das Prüfen, ob ein verlustfreier Kompressor verwendet werden kann, bevor auf die verlustbehaftete Komprimierung zurückgegriffen wird, die Gesamtkomprimierungsverhältnisse verbessern.
-
Bei 512 fügt das System in der veranschaulichten Ausführungsform die Vorspannung hinzu und klemmt Pixelkomponentenwerte. Zum Beispiel kann das folgende System bestimmen, ob die Komponente in einem vorzeichenbehafteten Format (z. B. vorzeichenbehaftete ganze Zahl oder vorzeichenbehaftet normalisiert) oder einem anderen Format (z. B. Gleitkomma oder nicht vorzeichenbehaftet) dargestellt ist. Wenn sie für jede Komponente und jeden Bereich vorzeichenbehaftet ist, legt das System durch Umdrehen des Vorzeichenbits die Vorspannung an. Das Ergebnis wird dann gegebenenfalls auf einen minimalen Wert zur Aufrechterhaltung geklemmt.
-
Bei 514 bestimmt das System in der veranschaulichten Ausführungsform minimale und maximale Werte für jede Pixelkomponente in jedem Bereich des Blocks von Pixeln, der komprimiert wird. Dies ist eine Technik zum Bestimmen des oder der wenigsten komprimierbaren Pixel in jedem Bereich. In einigen Ausführungsformen wird der minimale Wert als die Basis verwendet und der maximale Wert wird verwendet, um die Spanne der Komponente zu bestimmen. Die Ausgänge dieser Verarbeitung können der min_value für jede Komponente für jeden Bereich, die min_position (Position des Pixels mit dem min. Wert) für jede Komponente für jeden Bereich und der max_value für jede Komponente für jeden Bereich sein.
-
Bei 516 bestimmt das System in der veranschaulichten Ausführungsform einen verlustbehafteten Quantisierungsmodus. Für eine gegebene Komponentenbreite kann eine Anzahl von Modi verfügbar sein. Die Modi können vorbestimmt und kodiert sein, z. B. in einer Nachschlagetabelle. Jeder Modus kann potenziell unterschiedliche Werte für verschiedene Attribute aufweisen, wie: Spanne, Basisbits, Deltabits, Ebene, freie Ebene, und ob die Basis geschützt ist. Die Basisbits und Deltabits können die Anzahl von Bits angeben, die verwendet wird, um die Basen bzw. die Deltas zu kodieren. Basen können mehr in höheren Modi quantisiert werden, während Deltas mehr mit niedrigeren Modi quantisiert werden können. Die Ebene kann angeben, wie stark ein Modus quantisiert wird (oder nicht). Das System kann auch die Ebene verwenden, um zu bestimmen, ob eine Kreuzkomponentenbitteilung angewendet werden soll. Die Ebene kann vorzeichenbehaftet sein, und Werte für niedrigere Ebene können insgesamt eine größere Quantisierung angeben. Die freie Ebene kann die Anzahl der Ebenen angeben, die einer anderen Komponente zugewiesen werden kann, ohne von den Basis- oder Deltabits der aktuellen Komponente zu subtrahieren. Eine geschützte Basis zeigt an, dass die Basisbits der Komponente nicht dekrementiert werden können, wenn Ebenen einer anderen Komponente zugewiesen werden.
-
Als ein Beispiel schließt die folgende Tabelle Modusinformationen für zwei Modi einer 16-Bit-Komponentenbreite gemäß einigen Ausführungsformen ein (obwohl zu beachten ist, dass verschiedene Kodierungen implementiert sein können). In diesem Beispiel können die anderen nicht gezeigten Modi (z. B. die Modi 1 bis 14) verschiedene Spannen, Basisbits, Deltabits, Ebenen, freie Ebenen und geschützte Werte aufweisen, z. B. in den Spannen zwischen den Werten für Modus 0 und Modus 15:
Modus | Spanne | Basisbits | Deltabits | Ebene | Freie Ebene | Geschützt? |
0 | 2 | 16 | 1 | 5 | 4 | 1 |
15 | 65536 | 8 | 7 | -6 | 0 | 0 |
-
In einigen Ausführungsformen bestimmt das System, um den verlustbehafteten Quantisierungsmodus zu bestimmen, für jeden Bereich zuerst die Anzahl von Bits, die benötigt wird, um alle Deltas zu verpacken, durch Finden der maximalen Deltas für jede Komponente und Bestimmen der Anzahl der nicht vorzeichenbehafteten Bits, die zur Darstellung der Deltas benötigt wird. Dieser Wert kann dann verwendet werden, um einen Quantisierungsmodus für jede Komponente basierend auf diesen Spannen zu erzeugen. Anders ausgedrückt kann jeder Modus einer Spanne zugeordnet sein, und der Modus kann so ausgewählt werden, dass die Differenz zwischen dem maxvalue und dem min_value für eine Komponente in einen Bereich innerhalb dieser Spanne fällt. Sobald der Modus ausgewählt ist, kann die Komprimierungsschaltlogik bestimmen, ob eine Kreuzkomponentenbitteilung basierend auf dem Modus durchzuführen ist.
-
In einigen Ausführungsformen bestimmt das System ferner, ob das Erweitern der Deltaspanne (Reduzieren der Delta-Quantisierung) durch Quantisieren des Basiswerts den Quantisierungsverlust reduziert. Zum Beispiel kann das System eine Maske anwenden, um nach der Quantisierung einen neuen Basiswert zu bestimmen und zu bestimmen, ob dieser Wert einen Übergangsschwellenwert erfüllt. Daher kann das System in einigen Situationen bestimmen, den Basis min_value weiter zu quantisieren, um zusätzliche Bits zur Verwendung für die Delta-Quantisierung bereitzustellen. Dies kann implementiert werden, indem beispielsweise der Quantisierungsmodus um eins erhöht wird. An diesem Punkt hat das System in einigen Ausführungsformen einen Quantisierungsmodus für jede Komponente in jedem Bereich ausgewählt.
-
Bei 518 bestimmt das System in der veranschaulichten Ausführungsform, ob eine Kreuzkomponentenbitteilung verwendet werden soll. Im Allgemeinen können einige Komponenten weniger Basis-/Deltabits (z. B. für konstante Werte oder kleine Deltaspannen) benötigen und können einige ihrer Bits für andere Komponenten abgeben, um Quantisierungsfehler für die anderen Komponenten zu reduzieren.
-
In einigen Ausführungsformen schließt dies für jeden Bereich das Sortieren der Quantisierungsmodi der einzelnen Komponenten ein, z. B. vom kleinsten bis größten. Für ein beispielhaftes Vierkomponentenformat kann das System beispielsweise die Modi so sortieren, dass m0 der Komponente mit dem kleinsten Modus, m3 der Komponente mit dem größten Modus und m1 und m2 den zwei anderen Komponenten in einem beispielhaften Vierkomponentenformat entspricht.
-
Das System kann dann die Unterschiede zwischen den Modi der einzelnen Komponenten bestimmen und die Unterschiede verwenden, um zu bestimmen, welche Komponenten die Quantisierungsebenen erhalten oder verlieren. Der folgende Code zeigt ein nicht einschränkendes Beispiel für eine solche Berechnung, aber es werden verschiedene Techniken betrachtet:
-
Es ist zu beachten, dass es sich bei diesem Code-Beispiel um eine Vierkanal-Bitteilung handelt, aber ähnliche Techniken können mit unterschiedlichen Anzahlen von Kanälen verwendet werden, z. B. in Zweikanalmodi. Zu diesem Zeitpunkt hat das System Quantisierungsebenen über jede Komponente verteilt und start_level und end_level geben an, wie jede Komponente quantisiert wird. Es ist zu beachten, dass, obwohl die vorstehende Beschreibung in Bezug auf Modi und das Teilen von Bits basierend auf Modi zu Zwecken der Erklärung eingeschlossen ist, die vorliegende Offenbarung nicht auf diese spezifischen Techniken beschränkt ist. Vielmehr können offenbarte Systeme verschiedene Techniken implementieren, um zu bestimmen, ob Bits zwischen Komponenten innerhalb eines gegebenen Bereichs geteilt werden sollen.
-
Bei 520 stellt das System in der veranschaulichten Ausführungsform die Basis- und Deltabits ein. In einigen Ausführungsformen verwendet dies die im Element 518 bestimmten Quantisierungsebenen. Zum Beispiel kann der folgende Pseudocode diese Funktionalität implementieren.
-
Zu diesem Zeitpunkt hat das System in einigen Ausführungsformen endgültige base bits_ und delta bits für jede Komponente erzeugt.
-
Bei 522 prüft das System in der veranschaulichten Ausführungsform, ob der Pixelquantisierungsrückfall benötigt wird. In bestimmten Situationen kann es bevorzugt sein, Eingangspixeldaten innerhalb eines Bereichs direkt zu quantisieren, anstatt die Basen und Deltas zu quantisieren. Eine beispielhafte Situation ist, wenn die Ebene der Quantisierung, die für Deltas verwendet wird, die Quantisierungsfehler erzeugt, die eine direkte Quantisierung der Eingabepixeldaten überschreiten. Eine andere solche Situation ist, wenn die Eingangsdaten in einem Gleitkommaformat dargestellt werden und eine Komponente mindestens einen Wert aufwies, der eine spezielle Kodierung (z. B. negative Null, plus oder minus unendlich oder kanonisch nicht eine Zahl (canonical not a number, NaN)) entsprach, wobei der Exponent allen 1ern entspricht und das höchstwertige Bit der Mantisse eingestellt ist. In einigen Ausführungsformen ist das System so konfiguriert, dass es auf die direkte Quantisierung von Pixelwerten für einen Bereich zurückfällt, wenn einer dieser Szenarien für diesen Bereich erfasst wird. Wenn der Rückfall auftritt, kann das System für diesen Bereich zum Element 526 überspringen.
-
Bei 524 berechnet und quantisiert das System in der veranschaulichten Ausführungsform Basen und Deltas gemäß den ausgewählten Parametern. Das System kann das Delta für Pixelkomponenten in einem Bereich bestimmen, indem ihr Wert von dem Basiswert für diesen Bereich subtrahiert wird. Somit können für jeden N-Pixelbereich N-1 Deltawerte für jede Komponente erzeugt werden, da das Basispixel einen impliziten Deltawert von Null aufweist. In einigen Ausführungsformen quantifiziert das System dann die Deltawerte unter Verwendung der bestimmten Anzahlen von Bits für jeden Bereich. Die Quantisierung kann die Einstellung einschließen, um den maximalen Komponentenwert zu bewahren und um die Vorspannung zu reduzieren (z. B. Vorspannung aufgrund der Mittelpunktrekonstruktion während der Dekomprimierung).
-
Bei 526 verpackt das System in der veranschaulichten Ausführungsform die komprimierten Pixelinformationen. Die Verpackung kann in Abhängigkeit davon, ob der Pixelquantisierungsrückfallmodus verwendet wurde, unterschiedlich durchgeführt werden. 6, die nachstehend ausführlicher erörtert wird, stellt beispielhafte Verpackungsformate bereit.
-
Bei 528 erzeugt das System in der veranschaulichten Ausführungsform Metadaten für die komprimierten Daten. In einigen Ausführungsformen weisen die Metadaten die gleiche Größe für alle Formate auf, z. B. ein Byte. In einigen Ausführungsformen weisen Unterblöcke ohne gültige Daten einen Metadatenwert von Null auf. In einigen Ausführungsformen gibt das Einstellen der Metadaten [7:4] auf 4'b 1111 einen verlustbehafteten Modus an, was implizieren kann, dass die Größe des komprimierten Blocks einer verlustbehafteten Zielgröße entspricht (was die explizite Kodierung der Größe des komprimierten Blocks in den Metadaten vermeiden kann). In einigen Ausführungsformen geben die verbleibenden Bits jeweils an, ob der Quantisierungsrückfall für einen bestimmten Bereich (in beispielhaften Vierbereichsausführungsformen) verwendet wurde. In einigen Ausführungsformen wird dann eine Anzahl von komprimierten Blöcken zusammen mit ihren Metadaten verpackt, z. B. für einen kombinierten Schreibvorgang in den Speicher.
-
6 ist ein Blockdiagramm, das ein beispielhaftes Format für einen Bereich eines Blocks von komprimierten Pixeln veranschaulicht, gemäß einigen Ausführungsformen. In der veranschaulichten Ausführungsform schließt das Format einen festen Header 610, einen variablen Header 620, Auffüllbits 630 und gepackte Deltas 640 ein.
-
In dem festen Header 610 und dem variablen Header 620 verschachtelt das System Daten für die verschiedenen Komponenten (z. B. RGBA). Die Daten müssen in einigen Ausführungsformen innerhalb 1/4 der verlustbehafteten Zielgröße passen. In einigen Ausführungsformen wird das Auffüllen 630 derart hinzugefügt, dass der Header auf den Start der Daten für den Bereich ausgerichtet ist und das letzte Delta mit dem Ende der Daten für den Bereich ausgerichtet ist. Der feste Header 610 kodiert in einigen Ausführungsformen den Modus, während der variable Header 620 die Basiswertposition und den quantisierten Basiswert für jede Komponente kodiert.
-
In einigen Ausführungsformen schließen die verpackten Deltas 640 ein Delta für jedes Pixel in dem Bereich für jede Komponente mit Ausnahme der Basis ein. Zum Beispiel schließen in der veranschaulichten Ausführungsform die verpackten Deltas Daten für Pixel P0 bis Pi dort ein, wo i+2 Pixel im Bereich vorhanden sind. In der veranschaulichten Vierkomponentenausführungsform schließt jedes Pixelfeld vier Deltas (eines für jede Komponente) ein und kann bei Bedarf ein Auffüllen einschließen. Es ist zu beachten, dass eine größere oder kleinere Anzahl von Deltas für Ausführungsformen mit unterschiedlicher Anzahl von Komponenten pro Pixel eingeschlossen sein kann. Wenn der Rückfallmodus für einen Bereich verwendet wird, werden in einigen Ausführungsformen alle Komponenten gleich quantisiert und es gibt keine Header-Kodierung.
-
Die Dekomprimierungsschaltlogik ist in einigen Ausführungsformen konfiguriert, um die folgende Prozedur für verlustbehaftete Dekomprimierung durchzuführen. Zunächst kann die Vorrichtung den Ort eines komprimierten Blocks bestimmen, z. B. basierend auf Metadatenwerten von vorherigen Blöcken. Zweitens kann die Dekomprimierungsschaltlogik die Metadaten für den Block dekodieren. Wenn die Metadaten einen konstanten Block angeben, kann die Dekomprimierungsschaltlogik die Farbe zu jedem Pixel kopieren. Wenn die Metadaten einen verlustfreien Block angeben, der in die Zielgröße passt, dekodiert die verlustfreie Dekomprimierungsschaltlogik den Block, wie vorstehend unter Bezugnahme auf verlustfreie Techniken beschrieben. Wenn die Metadaten einen verlustbehafteten Block angeben, der eine Quantisierung erforderte, dekodiert die verlustbehaftete Dekomprimierungsschaltlogik den Block.
-
Die Dekomprimierungsschaltlogik bestimmt für jeden Bereich in dem verpackten Block die Bereichskodierung. Wenn die Rückfallkodierung verwendet wurde, entpackt sie den Bereich und führt die Mittelpunktrekonstruktion durch, um jedes Pixel zu dequantisieren. Die Dekomprimierung dieses Bereichs kann zu diesem Zeitpunkt beendet werden. Wenn keine Rückfallkodierung verwendet wurde, entpackt und dekodiert die Dekomprimierungsschaltlogik basierend auf dem extrahierten Modus. In einigen Ausführungsformen schließt dies das Bestimmen von Basis- und Deltabitbreiten basierend auf dem Modus und das Anpassen gemäß der Kreuzkomponentenbitteilung ein (die Dekomprimierungsschaltlogik kann die gleiche Berechnung wie die Komprimierungsschaltlogik durchführen, um eine Kreuzkomponentenbitteilung basierend auf Modi für jede Komponente zu bestimmen). Die Dekomprimierungsschaltlogik kann dann das Entpacken der Basis und Basisposition und das Entpacken der quantisierten Deltas bestimmen. Die Dekomprimierungsschaltlogik kann dann die Deltas dequantisieren und Pixelwerte rekonstruieren. Für verlustbehaftete Komprimierung können die Ausgangspixelkomponentenwerte aufgrund der Quantisierung nicht den Eingangspixelkomponentenwerten entsprechen.
-
Die offenbarten Techniken können vorteilhafterweise gute Komprimierungsverhältnisse, einen geringen Stromverbrauch und eine verbesserte Genauigkeit für verlustbehaftete Komprimierung relativ zu herkömmlichen Techniken bereitstellen.
-
Beispielhafte Verfahren
-
7 ist ein Flussdiagramm, das ein beispielhaftes Verfahren für verlustfreie Komprimierung veranschaulicht, gemäß einigen Ausführungsformen. Das in 7 gezeigte Verfahren kann unter anderem in Verbindung mit beliebigen der hierin offenbarten Computerschaltlogik, Systeme, Vorrichtungen, Elemente oder Komponenten verwendet werden. In verschiedenen Ausführungsformen können einige der gezeigten Verfahrenselemente gleichzeitig, in einer anderen Reihenfolge als gezeigt durchgeführt oder weggelassen werden. Zudem können zusätzliche Verfahrenselemente ebenfalls wie gewünscht durchgeführt werden.
-
Bei 710 bestimmt die Komprimierungsschaltlogik in der veranschaulichten Ausführungsform mindestens teilweise parallel für mehrere verschiedene verlustfreie Komprimierungstechniken eine Anzahl von Bits, die benötigt wird, um ein niedrigstkomprimierbares Pixel unter Verwendung dieser Technik in einem Satz von Pixeln darzustellen, die komprimiert werden. Ein „niedrigstkomprimierbares Pixel“ in einem Satz von Pixeln bezieht sich auf ein Pixel, das die größte Datenmenge erfordert, um es in einer gegebenen Komprimierungstechnik darzustellen. Zum Beispiel ist für einen Satz von vier Pixeln und einen Ursprungsprädiktor eine Situation zu berücksichtigen, in der die Pixel jeweilige Deltas von ein, zwei, vier und einunddreißig aufweisen. Das Pixel mit dem Delta von einunddreißig ist das niedrigstkomprimierbare Pixel, da es die meisten Bits erfordert, um sein Delta für eine Ursprungskomprimierungstechnik darzustellen. Es ist zu beachten, dass mehrere Pixel in einem Satz die „niedrigstkomprimierbaren Pixel“ sein können, z. B. wenn mehrere Pixel dieselbe größte Anzahl von Bits erfordern. In einigen Ausführungsformen werden die Elemente von 7 separat für verschiedene Komponenten der Pixel in dem Satz von Pixeln durchgeführt.
-
In einigen Ausführungsformen bestimmt die Komprimierungsschaltlogik für mehrere Bereiche von Pixeln in dem Satz von Pixeln für eine der Komprimierungstechniken eine Bereichsanzahl von Bits, die zum Darstellen eines niedrigstkomprimierbaren Pixels benötigt werden, unter Verwendung dieser Technik. In einigen Ausführungsformen schließen Header-Informationen für eine oder mehrere der Techniken Felder ein, die Unterschiede zwischen jeweiligen Bereichanzahlen von Bits und der Anzahl von Bits angeben. Dies kann bessere Komprimierungsverhältnisse bereitstellen, z. B. in Szenarien, in denen ein Bereich ein besonders schwieriges Pixel aufweist, aber andere Bereiche nicht.
-
In einigen Ausführungsformen schließen die Komprimierungstechniken eine Ursprungstechnik, die Deltas zwischen Werten für Pixel in dem Satz von Pixeln und einem Wert eines Ursprungspixels in dem Satz von Pixeln bestimmt, eine Nachbartechnik, die Deltas zwischen Werten für benachbarte Pixel in dem Satz von Pixeln bestimmt, und eine Gradiententechnik ein, die Deltas zwischen Werten für Pixel in dem Satz von Pixeln und einem Wert eines Ursprungspixels in dem Satz von Pixeln bestimmt, die einem Gradientenwert hinzugefügt werden, der auf einem oder mehreren Pixeln basiert, die an das Ursprungspixel angrenzen. In einigen Ausführungsformen schließen die Pixeldaten mehrere Komponenten pro Pixel ein und die Komprimierungstechniken schließen eine oder mehrere Dekorrelationstechniken ein, die Werte von einer Komponente (z. B. einer grünen Komponente) von einer oder mehreren anderen Komponenten subtrahieren. Eine der mehreren Komprimierungstechniken kann feste Basis-Pixelorte aufweisen, die für verschiedene Techniken unterschiedlich sein können.
-
Bei 720 wählt die Komprimierungsschaltlogik in der veranschaulichten Ausführungsform eine der Komprimierungstechniken basierend auf den bestimmten Anzahlen von Bits für und Header-Größen aus, die benötigt werden, um Komprimierungsinformationen für die mehreren Komprimierungstechniken zu speichern. In einigen Ausführungsformen kann die Auswahl der Komprimierungstechnik ferner auf bestimmten Bereichanzahlen von Bits basieren.
-
Bei 730 speichert die Komprimierungsschaltlogik in der veranschaulichten Ausführungsform Informationen, die Werte für den Satz von Pixeln unter Verwendung der ausgewählten Komprimierungstechnik kodieren. Zum Beispiel kann die Komprimierungsschaltlogik ein Delta für jede Komponente für jedes Pixel gemäß der ausgewählten Technik speichern und Header-Informationen erzeugen, welche die ausgewählte Technik und die Größe der Deltas angeben.
-
In einigen Ausführungsformen erzeugt die Komprimierungsschaltlogik Metadaten, welche die Größe des komprimierten Satzes von Pixeln angeben. In einigen Ausführungsformen weisen die Metadaten eine feste Größe auf und die Komprimierungsschaltung schließt, als Reaktion auf das Bestimmen, dass alle Bits der Metadaten nicht benötigt werden, um die Größe des komprimierten Satzes von Pixeln darzustellen, ein oder mehrere Bits der Header-Informationen in den Metadaten ein. Dies kann ferner die Gesamtgröße des komprimierten Blocks von Pixeln reduzieren.
-
8 ist ein Flussdiagramm, das ein beispielhaftes Verfahren für verlustbehaftete Komprimierung veranschaulicht, gemäß einigen Ausführungsformen. Das in 7 gezeigte Verfahren kann unter anderem in Verbindung mit beliebigen der hierin offenbarten Computerschaltlogik, Systeme, Vorrichtungen, Elemente oder Komponenten verwendet werden. In verschiedenen Ausführungsformen können einige der gezeigten Verfahrenselemente gleichzeitig, in einer anderen Reihenfolge als gezeigt durchgeführt oder weggelassen werden. Zudem können zusätzliche Verfahrenselemente ebenfalls wie gewünscht durchgeführt werden.
-
Bei 810 greift in der veranschaulichten Ausführungsform die Komprimierungsschaltlogik auf Pixeldaten für einen Block von Pixeln zu, die komprimiert werden. Die Pixeldaten können Werte für mehrere Komponenten für jedes Pixel einschließen. Die Komponentenwerte können unterschiedliche Breiten für verschiedene Blöcke von Pixeln aufweisen und die Breiten können programmierbar sein. In einigen Ausführungsformen bestimmt die Komprimierungsschaltlogik, ob eine Vorspannung an einen oder mehrere Komponentenwerte angelegt werden soll, die in einem vorzeichenbehafteten Format dargestellt werden.
-
Bei 820 bestimmt die Komprimierungsschaltlogik in der veranschaulichten Ausführungsform für mehrere Komponenten, die in Pixeln des Blocks von Pixeln enthalten sind, jeweilige kleinste und größte Komponentenwerte in jeweiligen unterschiedlichen Bereichen des Blocks von Pixeln.
-
Bei 830 bestimmt die Komprimierungsschaltlogik in der veranschaulichten Ausführungsform, basierend auf den bestimmten kleinsten und größten Komponentenwerte, eine erste Anzahl von Bits zu verwenden, um Deltawerte relativ zu einem Basiswert für eine erste Komponente in einem ersten Bereich darzustellen und eine zweite, unterschiedliche Anzahl von Bits, um Deltawerte relativ zu einem Basiswert für eine zweite Komponente in dem ersten Bereich darzustellen.
-
In einigen Ausführungsformen bestimmt die Komprimierungsschaltlogik, um die erste und zweite Anzahl von Bits zu bestimmen, eine erste anfängliche Anzahl von Bits, um Deltawerte in dem ersten Bereich für die erste Komponente basierend auf einer Differenz zwischen entsprechenden kleinsten und größten Komponentenwerten darzustellen und eine zweite anfänglichen Anzahl von Bits, um Deltawerte in dem ersten Bereich für die zweite Komponente basierend auf einer Differenz zwischen entsprechenden kleinsten und größten Komponentenwerten darzustellen. Die Komprimierungsschaltlogik wählt dann die erste und die zweite Anzahl von Bits als Reaktion auf das Bestimmen aus, die erste anfängliche Anzahl von Bits zu reduzieren, um Deltabits mit der zweiten Komponente zu teilen.
-
In einigen Ausführungsformen verwendet die Komprimierungsschaltlogik eine modusbasierte Nachschlagetechnik, um zu bestimmen, ob eine Kreuzkomponentenbitteilung angewendet werden soll. Zum Beispiel kann die Komprimierungsschaltlogik einen Komprimierungsmodus für die erste Komponente basierend auf einer Differenz zwischen kleinsten und größten Komponentenwerten in dem ersten Bereich für die erste Komponente bestimmen. Die Komprimierungsschaltlogik kann dann bestimmen, ob Bits basierend auf Modi der verschiedenen Komponenten geteilt werden sollen. Zum Beispiel kann jeder Modus eines oder mehreres von Folgendem anzeigen: eine anfängliche Anzahl von Basisbits, eine anfängliche Anzahl von Deltabits, eine Komprimierungsebene, einen freien Ebenenwert, der eine Anzahl von Ebenen angibt, die einer anderen Komponente zugewiesen werden können, ohne von den Basis- oder Deltabits der Komponente zu subtrahieren, und einen geschützten Basiswert, der angibt, ob die Basisbits der Komponente vermindert werden können, wenn eine oder mehrere Ebenen einer anderen Komponente zugewiesen werden. Basierend auf diesen Feldern für jede Komponente in einem Bereich kann die Kreuzkomponentenbitteilungslogik das Ausmaß der Bitteilung bestimmen, z. B. um die Gesamtquantisierung zu reduzieren.
-
Bei 840 quantisiert die Komprimierungsschaltlogik in der veranschaulichten Ausführungsform Deltawerte für die erste und die zweite Komponente von Pixeln im ersten Bereich des Blocks von Pixeln unter Verwendung der bestimmten ersten und zweiten Anzahl von Bits. Die Deltas können relativ zu einem Basispixelwert bestimmt werden. Die Quantisierung kann zu einer verlustbehafteten Komprimierung führen. In einigen Ausführungsformen quantisiert die Komprimierungsschaltlogik Deltawerte für die erste Komponente von Pixeln in einem zweiten Bereich des Blocks von Pixeln unter Verwendung einer dritten, unterschiedlichen bestimmten Anzahl von Bits. Anders ausgedrückt kann die Komprimierungsschaltlogik Deltawerte für dieselbe Komponente unter Verwendung unterschiedlicher Anzahlen von Bits in unterschiedlichen Bereichen quantisieren.
-
In einigen Ausführungsformen ist die Komprimierungsschaltlogik konfiguriert, um eine direkte Quantisierung von Pixelkomponentenwerten für einen zweiten Bereich des Blocks von Pixeln auszuwählen und anzuwenden. Die Komprimierungsschaltlogik kann eine direkte Quantisierung anwenden (z. B. im Gegensatz zu Basis- und Deltawerten) als Reaktion auf das Bestimmen: dass eine Ebene der Quantisierung, die für Deltawerte für den zweiten Bereich verwendet wird, Quantisierungsfehler erzeugt, die eine direkte Quantisierung der Eingangspixeldaten überschreiten oder dass ein Gleitkommawert einer Komponente in dem zweiten Bereich in einem Satz von speziellen Gleitkommawerten eingeschlossen ist.
-
Bei 850 speichert die Komprimierungsschaltlogik in der veranschaulichten Ausführungsform eine komprimierte Version des Blocks von Pixeln unter Verwendung der quantisierten Deltas. Zum Beispiel kann die Komprimierungsschaltlogik den komprimierten Block von Pixeln auf eine Ebene in einer Cache-/Speicherhierarchie schreiben. Der Block kann später zur Verwendung beim Erzeugen von Grafikbildern abgerufen und dekomprimiert werden.
-
Wie hierin verwendet, wird der Begriff „jedes“ verwendet, um auf jedes Element in einem Satz von mehreren Elementen Bezug zu nehmen, es können aber andere Elemente vorhanden sein, die der Einrichtung oder dem Verfahren zugeordnet sind, auf die nicht Bezug genommen wird. Anders ausgedrückt, dort wo „jedes“ in Bezug auf eine Ausführungsform verwendet wird, um eine Eigenschaft oder Aktion zu jedem Element einer Vielzahl von Elementen zu zuordnen, ist es nicht beabsichtigt, die Möglichkeit auszuschließen, dass die Ausführungsform andere Instanzen des Elements einschließen kann, an denen die Eigenschaft oder Aktion nicht angewendet wird. Wenn zum Beispiel eine Einrichtung Komprimierungstechniken A-F unterstützt, kann der Ausdruck „Bestimmen, für jede Technik in einem Satz von mehreren Komprimierungstechniken, ...“ sich auf jede Technik in verschiedenen Teilsätzen aller unterstützten Techniken beziehen (z. B. Teilsatz A-B, B-E, D und F usw.). In ähnlicher Weise kann sich bei der Durchführung eines Vorgangs für „jede Komponente“ von Pixeln in einem Block von Pixeln dieser Ausdruck auf manchen Teilsatz aller potenziellen Komponenten beziehen (z. B. wenn eine oder mehrere der Komponenten nicht zum Speichern von Pixelinformationen verwendet werden).
-
Die folgenden nummerierten Klauseln stellen verschiedene nicht einschränkende Ausführungsformen dar, die hierin offenbart sind:
-
Satz A
-
- A1. Einrichtung, umfassend:
- Komprimierungsschaltlogik, konfiguriert zum:
- Bestimmen, mindestens teilweise parallel für mehrere verschiedene verlustfreie Komprimierungstechniken, einer Anzahl von Bits, die benötigt wird, um ein niedrigstkomprimierbares Pixel unter Verwendung dieser Technik in einem Satz von Pixeln, die komprimiert werden, darzustellen;
- Auswählen einer der Komprimierungstechniken basierend auf den bestimmten Anzahlen von Bits und Header-Größen, die benötigt werden, um Komprimierungsinformationen für die mehreren Komprimierungstechniken zu speichern; und
- Speichern von Informationen, die Werte für den Satz von Pixeln unter Verwendung der ausgewählten Komprimierungstechnik kodieren.
- A2. Einrichtung nach einer vorstehenden Klausel innerhalb Satz A, wobei die Komprimierungsschaltlogik ferner konfiguriert ist zum:
- Bestimmen, für mehrere Bereiche von Pixeln in dem Satz von Pixeln, für eine der Komprimierungstechniken, einer Bereichsanzahl von Bits, die zum Darstellen eines niedrigstkomprimierbaren Pixels benötigt werden, unter Verwendung dieser Technik;
- wobei die Auswahl der einen der Komprimierungstechniken ferner auf der bestimmten Bereichsanzahl von Bits basiert.
- A3. Einrichtung nach einer vorstehenden Klausel innerhalb Satz A, wobei Header-Informationen für eine oder mehrere der Techniken Felder einschließen, die Unterschiede zwischen jeweiligen Bereichanzahlen von Bits und der Anzahl von Bits angeben.
- A4. Einrichtung nach einer vorstehenden Klausel innerhalb Satz A, wobei die Header-Informationen ferner die ausgewählte Komprimierungstechnik, die Anzahl von Bits, die verwendet werden, um Deltas für Komponenten von Pixeln in dem Satz von Pixeln darzustellen, und einen Basispixelwert angeben.
- A5. Einrichtung nach einer vorstehenden Klausel innerhalb Satz A, wobei die mehreren unterschiedlichen verlustfreien Komprimierungstechniken Folgendes einschließen:
- eine Ursprungstechnik, die Deltas zwischen Werten für Pixel in dem Satz von Pixeln und einem Wert eines Ursprungspixels in dem Satz von Pixeln bestimmt;
- eine Nachbartechnik, die Deltas zwischen Werten für benachbarte Pixel in dem Satz von Pixeln bestimmt;
- eine Gradiententechnik, die Deltas zwischen Werten für Pixel in dem Satz von Pixeln und einem Wert eines Ursprungspixels in dem Satz von Pixeln bestimmt, die einem Gradientenwert hinzugefügt werden, der auf einem oder mehreren Pixeln basiert, die an das Ursprungspixel angrenzen.
- A6. Einrichtung nach einer vorstehenden Klausel innerhalb Satz A, wobei für die Gradiententechnik die Komprimierungsschaltlogik konfiguriert ist, um einen Gradientenwert in einem Header für den Satz von Pixeln zu speichern.
- A7. Einrichtung nach einer vorstehenden Klausel innerhalb Satz A, wobei die Pixeldaten mehrere Komponenten pro Pixel einschließen und wobei die mehreren unterschiedlichen verlustfreien Komprimierungstechniken eine oder mehrere Dekorrelationstechniken einschließen, die Werte von einer Komponente von einer oder mehreren anderen Komponenten subtrahieren.
- A8. Einrichtung nach einer vorstehenden Klausel innerhalb Satz A, wobei die Komprimierungsschaltlogik ferner konfiguriert ist, um Metadaten zu erzeugen, welche die Größe des komprimierten Satzes von Pixeln angeben.
- A9. Einrichtung nach einer vorstehenden Klausel innerhalb Satz A, wobei die Metadaten eine feste Größe aufweisen und wobei die Komprimierungsschaltlogik ferner konfiguriert ist, um als Reaktion auf das Bestimmen, dass alle Bits der Metadaten nicht benötigt werden, um die Größe des komprimierten Satzes von Pixeln darzustellen, ein oder mehrere Bits von Header-Informationen in den Metadaten einzuschließen.
- A10. Einrichtung nach einer vorstehenden Klausel innerhalb Satz A, wobei die Komprimierungsschaltlogik ferner konfiguriert ist, um zu bestimmen, ob eine Vorspannung auf Pixelwerte in dem Satz von Pixeln angewendet werden soll.
- A11. Einrichtung nach einer vorstehenden Klausel innerhalb Satz A, wobei eine oder mehrere der Komprimierungstechniken einen festen Basispixelort aufweisen und unterschiedliche Komprimierungstechniken unterschiedliche Basispixelorte verwenden.
- A12. Einrichtung nach einer vorstehenden Klausel innerhalb Satz A, wobei die Komprimierungsschaltlogik konfiguriert ist, um ein niedrigstkomprimierbares Pixel separat zu bestimmen und eine Komprimierungstechnik für mehrere Komponenten auszuwählen, die in Pixeln in dem Satz von Pixeln enthalten sind.
- A13. Verfahren, umfassend eine beliebige Kombination der Vorgänge, die von der Einrichtung nach einer vorstehenden Klausel innerhalb Satz A durchgeführt werden.
- A14. Nicht-transitorisches computerlesbares Speichermedium mit darauf gespeicherten Designinformationen, die ein Design zumindest eines Abschnitts einer hardwareintegrierten Schaltung in einem Format angeben, das durch ein Halbleiterproduktionssystem erkannt wird, das konfiguriert ist, um die Designinformationen zum Produzieren der Schaltung gemäß dem Design zu verwenden, wobei die Designinformationen angeben, dass die Schaltung Folgendes einschließt:
- jede Kombination der Elemente, die in einer vorstehenden Klausel innerhalb Satz A angegeben sind.
-
Beispielvorrichtung
-
Unter Bezugnahme nun auf 9 ist ein Blockdiagramm gezeigt, das eine beispielhafte Ausführungsform einer Vorrichtung 900 veranschaulicht. In einigen Ausführungsformen können Elemente der Vorrichtung 900 innerhalb eines System-on-a-Chip eingeschlossen sein. In einigen Ausführungsformen kann die Vorrichtung 900 in einer mobilen Vorrichtung eingeschlossen sein, die batteriebetrieben sein kann. Daher kann der Stromverbrauch durch die Vorrichtung 900 eine wichtige Designüberlegung sein. In der veranschaulichten Ausführungsform schließt die Vorrichtung 900 ein Fabric 910, einen Rechenkomplex 920, eine Eingabe/Ausgabe-Brücke (E/A-Brücke) 950, eine Cache-/Speichersteuerung 945, die Grafikeinheit 970 und eine Anzeigeeinheit 965 ein. In einigen Ausführungsformen kann die Vorrichtung 900 andere Komponenten (nicht gezeigt) zusätzlich zu den und/oder anstelle der veranschaulichten Komponenten einschließen, wie Videoprozessorkodierer und -dekodierer, Bildverarbeitungs- oder - erkennungselemente, Computer Vision-Elemente usw.
-
Das Fabric 910 kann verschiedene Verschaltungen, Busse, MUX, Steuerungen usw. einschließen und kann konfiguriert sein, um die Kommunikation zwischen verschiedenen Elementen der Vorrichtung 900 zu unterstützen. In einigen Ausführungsformen können Abschnitte des Fabrics 910 konfiguriert sein, um verschiedene unterschiedliche Kommunikationsprotokolle zu implementieren. In anderen Ausführungsformen kann das Fabric 910 ein einziges Kommunikationsprotokoll implementierten und mit dem Fabric 910 gekoppelte Elemente können von dem einzigen Kommunikationsprotokoll auf andere Kommunikationsprotokolle intern konvertieren.
-
In der veranschaulichten Ausführungsform schließt der Rechenkomplex 920 eine Busschnittstelleneinheit (BIU) 925, einen Cache 930 und Kerne 935 und 940 ein. In verschiedenen Ausführungsformen kann der Rechenkomplex 920 verschiedene Anzahlen von Prozessoren, Prozessorkernen und/oder Caches einschließen. Zum Beispiel kann der Rechenkomplex 920 1, 2 oder 4 Prozessorkerne oder eine beliebige andere geeignete Anzahl einschließen. In einer Ausführungsform ist der Cache 930 ein Satz-assoziativer L2-Cache. In einigen Ausführungsformen können die Kerne 935 und/oder 940 interne Anweisungs- und/oder Daten-Caches einschließen. In einigen Ausführungsformen kann eine Kohärenzeinheit (nicht gezeigt) in dem Fabric 910, dem Cache 930 oder an anderer Stelle in der Vorrichtung 900 konfiguriert sein, um die Kohärenz zwischen verschiedenen Caches der Vorrichtung 900 beizubehalten. BIU 925 kann konfiguriert sein, um die Kommunikation zwischen dem Rechenkomplex 920 und anderen Elementen der Vorrichtung 900 zu verwalten. Prozessorkerne, wie die Kerne 935 und 940, können konfiguriert sein, um Anweisungen einer bestimmten Anweisungssatzarchitektur (ISA) auszuführen, die Betriebssystemanweisungen und Benutzeranwendungsanweisungen einschließen kann.
-
Die Cache-/Speichersteuerung 945 kann konfiguriert sein, um die Übertragung von Daten zwischen dem Fabric 910 und einem oder mehreren Caches und/oder Speichern zu verwalten. Zum Beispiel kann die Cache-/Speichersteuerung 945 mit einem L3-Cache gekoppelt sein, der wiederum mit einem Systemspeicher gekoppelt sein kann. In anderen Ausführungsformen kann die Cache-/Speichersteuerung 945 direkt mit einem Speicher gekoppelt sein. In einigen Ausführungsformen kann die Cache-/Speichersteuerung 945 einen oder mehrere interne Caches einschließen.
-
Wie hierin verwendet, kann der Begriff „gekoppelt mit“ eine oder mehrere Verbindungen zwischen Elementen angeben, und eine Kopplung kann dazwischenliegende Elemente einschließen. Zum Beispiel kann in 9 die Grafikeinheit 970 als „gekoppelt mit“ einem Speicher über den Fabric 910 und die Cache-/Speichersteuerung 945 beschrieben werden. Dagegen ist in der veranschaulichten Ausführungsform von 9 die Grafikeinheit 970 mit dem Fabric 910 „direkt gekoppelt“, weil keine dazwischenliegenden Elemente vorhanden sind.
-
Die Grafikeinheit 970 kann einen oder mehrere Prozessoren und/oder eine oder mehrere Grafikverarbeitungseinheiten (GPUs) einschließen. Die Grafikeinheit 970 kann grafikorientierte Anweisungen, wie zum Beispiel OPENGL®-, Metal- oder DIRECT3D®-Anweisungen, empfangen. Die Grafikeinheit 970 kann spezialisierte GPU-Anweisungen ausführen oder andere Operationen basierend auf den empfangenen grafikorientierten Anweisungen durchführen. Die Grafikeinheit 970 kann allgemein konfiguriert sein, um große Datenblöcke parallel zu verarbeiten, und kann Bilder in einem Bildspeicher zur Ausgabe an eine Anzeige erstellen. Die Grafikeinheit 970 kann Transformations-, Beleuchtungs-, Dreieck- und/oder Rendering-Engines in einer oder mehreren Grafikverarbeitungs-Pipelines einschließen. Die Grafikeinheit 970 kann Pixelinformationen für Anzeigebilder ausgeben. Der programmierbare Shader 975 kann in verschiedenen Ausführungsformen hochparallele Ausführungskerne einschließen, die konfiguriert sind, um Grafikprogramme auszuführen, die Pixelaufgaben, Eckpunktaufgaben und Rechenaufgaben (die grafikbezogen sein können oder nicht) einschließen können.
-
In einigen Ausführungsformen schließt der programmierbare Shader 975 die offenbarte Komprimierungsschaltlogik ein.
-
Die Anzeigeeinheit 965 kann konfiguriert sein, um Daten aus einem Bildpuffer zu lesen und einen Strom von Pixelwerten zur Anzeige bereitzustellen. In einigen Ausführungsformen kann die Anzeigeeinheit 965 als eine Anzeige-Pipeline konfiguriert sein. Außerdem kann die Anzeigeeinheit 965 konfiguriert sein, um mehrere Bilder zum Erzeugen eines Ausgabebildes zu mischen. Ferner kann die Anzeigeeinheit 965 eine oder mehrere Schnittstellen (z. B. MIPI® oder embedded Display Port (eDP)) zum Koppeln an eine Benutzeranzeige (z. B. einen Touchscreen oder eine externe Anzeige) einschließen.
-
Die E/A-Brücke 950 kann verschiedene Elemente einschließen, die konfiguriert sind, um zum Beispiel Folgendes zu implementieren: Universal Serial Bus-Kommunikationen (USB-Kommunikationen), Sicherheits-, Audio- und/oder leistungsarme Dauereinschaltfunktionalität. Die E/A-Brücke 950 kann auch Schnittstellen, wie zum Beispiel Pulsweitenmodulation (PBM), General-Purpose Input/Output (GPIO), Serial Peripheral Interface (SPI) und/oder Inter-Integrated Circuit (I2C), einschließen. Verschiedene Arten von Peripheriegeräten und Vorrichtungen können mit der Vorrichtung 900 über die E/A-Brücke 950 gekoppelt sein.
-
Beispielhaftes computerlesbares Medium
-
In der vorliegenden Offenbarung wurden oben verschiedene beispielhafte Schaltungen ausführlich beschrieben. Es ist beabsichtigt, dass die vorliegende Offenbarung nicht nur Ausführungsformen abdeckt, die eine derartige Schaltlogik einschließen, sondern auch ein computerlesbares Speichermedium, das Designinformationen einschließt, die eine derartige Schaltlogik spezifizieren. Dementsprechend soll die vorliegende Offenbarung Ansprüche unterstützen, die nicht nur eine Einrichtung abdecken, die die offenbarten Schaltlogiken einschließt, sondern auch ein Speichermedium, das die Schaltlogik in einem Format spezifiziert, das von einem Produktionssystem erkannt wird, das zur Herstellung von Hardware konfiguriert ist (z. B. eine integrierte Schaltung), die die offenbarte Schaltlogik einschließt. Ansprüche auf ein derartiges Speichermedium sollen zum Beispiel eine Entität abdecken, die ein Schaltungsdesign erzeugt, jedoch das Design nicht selbst produziert.
-
8 ist ein Blockdiagramm, das ein beispielhaftes nicht-transitorisches computerlesbares Speichermedium, das Schaltungsdesigninformationen speichert, gemäß einigen Ausführungsformen veranschaulicht. In der veranschaulichten Ausführungsform ist das Halbleiterproduktionssystem 820 konfiguriert, um die auf dem nicht-transitorischen computerlesbaren Medium 810 gespeicherten Designinformationen 815 zu verarbeiten und die integrierte Schaltung 830 basierend auf den Designinformationen 815 zu produzieren.
-
Das nicht-transitorische computerlesbare Speichermedium 810 kann einen beliebigen von verschiedenen geeigneten Typen von Speichervorrichtungen oder Speicherungsvorrichtungen umfassen. Bei dem nicht-transitorischen computerlesbaren Speichermedium 810 kann es sich um ein Installationsmedium, z. B. eine CD-ROM, Disketten oder eine Bandvorrichtung; einen Computersystemspeicher oder Direktzugriffsspeicher, wie DRAM, DDR-RAM, SRAM, EDO-RAM, Rambus-RAM usw.; einen nichtflüchtigen Speicher, wie einen Flash-Speicher, Magnetmedien, z. B. eine Festplatte oder einen optischen Speicher; Register oder andere ähnliche Typen von Speicherelementen usw. handeln. Das nicht-transitorische computerlesbare Speichermedium 810 kann auch andere Typen von nicht-transitorischem Speicher sowie Kombinationen davon einschließen. Das nicht-transitorische computerlesbare Speichermedium 810 kann zwei oder mehr Speichermedien einschließen, die sich an unterschiedlichen Orten befinden können, z. B. in unterschiedlichen Computersystemen, die über ein Netzwerk verbunden sind.
-
Die Designinformationen 815 können unter Verwendung von beliebigen von verschiedenen geeigneten Computersprachen festgelegt werden, einschließlich Hardwarebeschreibungssprachen, wie, ohne Einschränkung: VHDL, Verilog, SystemC, SystemVerilog, RHDL, M, MyHDL usw. Die Designinformationen 815 können durch das Halbleiterproduktionssystem 820 verwendbar sein, um zumindest einen Abschnitt der integrierten Schaltung 830 zu produzieren. Das Format der Designinformationen 815 kann durch mindestens ein Halbleiterproduktionssystem 820 erkannt werden. In einigen Ausführungsformen können die Designinformationen 815 auch eine oder mehrere Zellbibliotheken einschließen, welche die Synthese und/oder das Layout der integrierten Schaltung 830 spezifizieren. In einigen Ausführungsformen sind die Designinformationen ganz oder teilweise in der Form einer Netzliste spezifiziert, die die Zellbibliothekelemente und deren Konnektivität spezifiziert. Die Designinformationen 815 können, allein genommen, ausreichend Informationen zur Produktion einer entsprechenden integrierten Schaltung einschließen oder nicht. Zum Beispiel können die Designinformationen 815 die zu produzierenden Schaltungselemente, jedoch nicht deren physisches Layout, vorgeben. In diesem Fall müssen die Designinformationen 815 möglicherweise mit Layoutinformationen kombiniert werden, um die vorgegebene Schaltlogik tatsächlich zu produzieren.
-
Die integrierte Schaltung 830 kann in verschiedenen Ausführungsformen eine oder mehrere benutzerdefinierte Makrozellen, wie Speicher, Analog- oder Mischsignalschaltungen und dergleichen, einschließen. In solchen Fällen können die Designinformationen 815 Informationen in Bezug auf enthaltene Makrozellen einschließen. Solche Informationen können, ohne darauf beschränkt zu sein, eine Schemaerfassungsdatenbank, Maskendesigndaten, Verhaltensmodelle und Netzlisten auf Vorrichtungs- oder Transistorebene einschließen. Wie hierin verwendet, können Maskendesigndaten gemäß dem Grafikdatensystem (GDSII) oder einem beliebigen anderen geeigneten Format formatiert werden.
-
Das Halbleiterproduktionssystem 820 kann ein beliebiges von verschiedenen geeigneten Elementen einschließen, die dazu konfiguriert sind, integrierte Schaltungen zu produzieren. Dies kann zum Beispiel Elemente zum Abscheiden von Halbleitermaterialien (z. B. auf einem Wafer, was eine Maskierung einschließen kann), Entfernen von Materialien, Ändern der Form von abgeschiedenen Materialien, Modifizieren von Materialien (z. B. durch Dotieren von Materialien oder Modifizieren dielektrischer Konstanten unter Verwendung von ultravioletter Bearbeitung) usw. einschließen. Das Halbleiterproduktionssystem 820 kann auch konfiguriert sein, um verschiedene Tests von produzierten Schaltungen auf korrekten Betrieb durchzuführen.
-
In verschiedenen Ausführungsformen ist die integrierte Schaltung 830 konfiguriert, um gemäß einem durch die Designinformationen 815 vorgegebenen Schaltungsdesign zu arbeiten, was die Durchführung einer beliebigen der hierin beschriebenen Funktionalitäten einschließen kann. Zum Beispiel kann die integrierte Schaltung 830 beliebige von verschiedenen in 1A-1B gezeigten Elementen einschließen. Ferner kann die integrierte Schaltung 830 konfiguriert sein, um verschiedene hierin beschriebene Funktionen in Verbindung mit anderen Komponenten durchzuführen. Ferner kann die hierin beschriebene Funktionalität durch mehrere verbundene integrierte Schaltungen durchgeführt werden.
-
Wie hierin verwendet, impliziert ein Ausdruck der Form „Designinformationen, die ein Design einer Schaltung spezifizieren, die konfiguriert ist, um zu ...“ nicht, dass die betreffende Schaltung hergestellt werden muss, damit das Element erfüllt wird. Vielmehr gibt dieser Ausdruck an, dass die Designinformationen eine Schaltung beschreiben, die nach der Fertigung dazu konfiguriert wird, die angegebenen Aktionen auszuführen, oder die spezifizierten Komponenten einzuschließen.
-
Auch wenn vorstehend spezifische Ausführungsformen beschrieben wurden, ist nicht beabsichtigt, diese Ausführungsformen auf den Umfang der vorliegenden Offenbarung einzuschränken, selbst wenn nur eine einzige Ausführungsform in Hinblick auf ein bestimmtes Merkmal beschrieben ist. Beispiele von in der Offenbarung bereitgestellten Merkmalen sind als veranschaulichend und nicht als einschränkend beabsichtigt, sofern nicht anders angegeben. Die obige Beschreibung soll Alternativen, Änderungen und Äquivalente umfassen, die für Fachleute, denen diese Offenbarung zugutekommt, offensichtlich sind.
-
Der Schutzumfang der vorliegenden Offenbarung schließt jedes hierin (sowohl explizit als auch implizit) offenbarte Merkmal oder jede Kombination von Merkmalen oder jede Verallgemeinerung davon ein, ungeachtet der Tatsache, ob sie irgendeines der oder alle hierin angesprochenen Probleme abschwächt. Dementsprechend können während der Weiterverfolgung dieser Anwendung (oder einer Anwendung, welche die Priorität dieser beansprucht) neue Ansprüche auf eine beliebige solche Kombination von Merkmalen formuliert werden. Insbesondere können mit Bezug auf die angehängten Ansprüche Merkmale von abhängigen Ansprüchen mit denen der unabhängigen Ansprüche kombiniert werden, und Merkmale der jeweiligen unabhängigen Ansprüche können in jeder geeigneten Weise und nicht nur in den in den angehängten Ansprüchen aufgeführten spezifischen Kombinationen kombiniert werden.