DE102016204602A1 - Huffmann-Paralleldecoder - Google Patents

Huffmann-Paralleldecoder Download PDF

Info

Publication number
DE102016204602A1
DE102016204602A1 DE102016204602.0A DE102016204602A DE102016204602A1 DE 102016204602 A1 DE102016204602 A1 DE 102016204602A1 DE 102016204602 A DE102016204602 A DE 102016204602A DE 102016204602 A1 DE102016204602 A1 DE 102016204602A1
Authority
DE
Germany
Prior art keywords
input
decoder
data
decoders
huffman
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE102016204602.0A
Other languages
English (en)
Other versions
DE102016204602B4 (de
Inventor
Bulent Abali
Bartholomew Blaner
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE102016204602A1 publication Critical patent/DE102016204602A1/de
Application granted granted Critical
Publication of DE102016204602B4 publication Critical patent/DE102016204602B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6005Decoder aspects
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • H03M7/6023Parallelization

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

Ein Halteregister weist einen Hauptdateneingang und einen Lookahead-Eingang auf. Aufeinanderfolgende sich überlappende Abschnitte des Hauptdateneingangs und des Lookahead-Eingangs werden für eine Mehrzahl M von Halbdecodern bereitgestellt, die eine Untergruppe von häufig vorkommenden Codewörtern eines Huffman-Codes enthalten. Wenn kein Codewort angetroffen wird, das nicht in den Halbdecodern verfügbar ist, entschlüsseln die Halbdecoder parallel in einem einzigen Taktzyklus M der häufig vorkommenden Codewörter. Wenn ein Codewort auftritt, das nicht in den Halbdecodern verfügbar ist, wird der Eingang, der für einen entsprechenden einen der Halbdecoder bestimmt ist, dessen Eingang das Codewort enthält, das nicht in dem entsprechenden einen der Halbdecoder verfügbar ist, auf einen Eingang eines Volldecoders angewendet, der in einem ternären inhaltsadressierbaren Arbeitsspeicher umgesetzt ist. Der Volldecoder enthält alle Codewörter des Huffman-Codes.

Description

  • Gebiet der Erfindung
  • Die vorliegende Erfindung betrifft Lichtkunst, Electronic Arts und Computerkunst und insbesondere Systemarchitektur und dergleichen.
  • Hintergrund der Erfindung
  • Ein Huffman-Code ist ein optimaler Präfixcode, der unter Verwendung eines von David A. Huffman entwickelten Algorithmus gefunden wird. Allgemeinere Symbole werden typischerweise mit weniger Bits dargestellt als weniger übliche Symbole. DEFLATE ist ein Algorithmus zur Datenkomprimierung, der eine Kombination des LZ77-Algorithmus und der Huffman-Codierung verwendet und in RFC 1951 spezifiziert ist. Ein beispielhafter Huffman-Decoder ist in der DEFLATE RFC 1951 definiert.
  • Kurzdarstellung der Erfindung
  • Grundgedanken der Erfindung stellen Techniken für einen Huffman-Paralleldecoder bereit. In einem Aspekt enthält ein paralleler Huffman-Datendecoder zum Entschlüsseln von Daten, die gemäß einem Huffman-Code verschlüsselt wurden, ein Halteregister mit einem Hauptabschnitt, der einen Hauptdateneingang enthält, einen Lookahead-Abschnitt, der einen Lookahead-Eingang aufweist, und eine Mehrzahl von Ausgängen; sowie eine Mehrzahl M von Halbdecodern, bei denen jeweils ein Eingang mit einem entsprechenden einen der Mehrzahl von Ausgängen des Halteregisters verbunden ist, und einen Ausgang. Die Eingänge erhalten jeweils von den Ausgängen des Halteregisters aufeinanderfolgende, sich überlappende Abschnitte von Daten in dem Hauptabschnitt und dem Lookahead-Abschnitt des Halteregisters. Außerdem ist ein Volldecoder enthalten, der in einem ternären inhaltsadressierbaren Arbeitsspeicher umgesetzt ist. Der Volldecoder hat einen Eingang, der selektiv verbindbar ist, um einen bestimmten einen der sich überlappenden Datenabschnitte zu erhalten, und einen Ausgang. Ein weiteres Element enthält eine Decoder-Auswahl- und -Sequenzierungseinheit mit einer Mehrzahl von Eingängen, die mit den Ausgängen der Halbdecoder und dem Ausgang des Volldecoders verbunden sind, einen Auswahlausgang, der die selektive Verbindung des Volldecoder-Eingangs steuert, und eine Mehrzahl von Ausgangskanälen. Der Volldecoder enthält alle Codewörter des Huffman-Codes; die Halbdecoder enthalten eine Untergruppe von häufig vorkommenden Codewörtern des Huffman-Codes; und die Halbdecoder entschlüsseln parallel in einem einzigen Taktzyklus M der häufig vorkommenden Codewörter, wenn kein Codewort vorkommt, das nicht in den Halbdecodern verfügbar ist. Wenn ein Codewort vorkommt, das nicht in den Halbdecodern verfügbar ist, veranlasst die Decoder-Auswahl- und Sequenzierungseinheit, dass der Eingang, der für einen entsprechenden einen der Halbdecoder bestimmt ist, dessen Eingang das Codewort enthält, das in dem entsprechenden einen der Halbdecoder nicht verfügbar ist, auf den Eingang des Volldecoders angewendet wird.
  • In einem weiteren Aspekt wird eine Auslegungsstruktur konkret in einem nicht-transitorischen maschinenlesbaren Medium zum Entwickeln, Herstellen oder Testen einer integrierten Schaltung verkörpert, und die Auslegungsstruktur enthält einen parallelen Huffman-Datendecoder wie eben beschrieben,
  • In noch einem weiteren Aspekt enthält ein beispielhaftes Verfahren zum parallelen Entschlüsseln von Daten, die gemäß einem Huffman-Code verschlüsselt wurden, Aufweisen eines Hauptdateneingangs in einem Halteregister und eines Lookahead-Eingangs; und Bereitstellen von aufeinanderfolgenden sich überlappenden Abschnitten des Hautdateneingangs und des Lookahead-Eingangs für eine Mehrzahl M von Halbdecodern. Die Halbdecoder enthalten eine Untergruppe von häufig vorkommenden Codewörtern des Huffman-Codes. Wenn kein Codewort angetroffen wird, das in den Halbdecodern nicht verfügbar ist, enthält ein weiterer Schritt paralleles Entschlüsseln von M der häufig vorkommenden Codewörter in einem einzigen Taktzyklus. Wenn ein Codewort angetroffen wird, das nicht in den Halbdecodern verfügbar ist, enthält ein weiterer Schritt Anwenden eines Eingangs, der für einen entsprechenden einen der Halbdecoder vorgesehen ist, dessen Eingang das Codewort enthält, das nicht in dem entsprechenden einen der Halbdecoder verfügbar ist, auf einen Eingang eines Volldecoders, der in einem ternären inhaltsadressierbaren Arbeitsspeicher umgesetzt ist, wobei der Volldecoder alle Codewörter des Huffman-Codes enthält.
  • Wie hierin verwendet, enthält „Vereinfachen” einer Aktion Ausführen der Aktion, Erleichtern der Aktion, Unterstützen beim Ausführen der Aktion oder Veranlassen, dass die Aktion ausgeführt wird. Somit können zum Beispiel und nicht darauf beschränkt Anweisungen, die auf einem Prozessor ausgeführt werden, eine Aktion vereinfachen, die durch Anweisungen ausgeführt wird, die auf einem entfernt angeordneten Prozessor ausgeführt werden, indem entsprechende Daten oder Befehle gesendet werden, um die Ausführung der Aktion zu veranlassen oder zu unterstützen. Um Zweifel auszuschließen, wird für den Fall, dass ein Aktor eine Aktion durch etwas anderes als durch Ausführen der Aktion vereinfacht, die Aktion trotzdem durch irgendeine Entität oder eine Kombination von Entitäten ausgeführt.
  • Aspekte der Auslegungsstruktur können unter Verwendung eines Computerprogrammprodukts umgesetzt werden, das ein vom Computer lesbares Speichermedium mit vom Computer verwendbarem Programmcode enthält. Ferner können eine Auslegungsstruktur oder ein Entwicklungsprozess über ein System (oder eine Vorrichtung) umgesetzt werden, das (die) einen Arbeitsspeicher und mindestens einen Prozessor enthält, der mit dem Arbeitsspeicher verbunden und wirksam ist, um die Auslegungsstruktur oder den Prozess umzusetzen.
  • Techniken der vorliegenden Erfindung können wesentliche nützliche technische Auswirkungen bereitstellen; zum Beispiel sind aufgrund der Verwendung von Halbdecodern statt Volldecodern weniger Hardware-Ressourcen und/oder geringere Chipfläche als bei vorherigen Techniken erforderlich. Zu beachten ist, dass, wie hierin verwendet, „Halbdecoder” nicht notwendigerweise genau die Hälfte der Größe von Volldecodern haben.
  • Diese und weitere Merkmale und Vorteile der vorliegenden Erfindung werden aus der folgenden ausführlichen Beschreibung von veranschaulichenden Ausführungsformen davon offenkundig, die in Verbindung mit den begleitenden Zeichnungen gelesen werden sollte.
  • Kurzbeschreibung der Zeichnungen
  • 1 zeigt Aspekte einer Huffman-Verschlüsselung, wie sie nach dem Stand der Technik bekannt ist;
  • 2 zeigt einen beispielhaften ternären inhaltsadressierbaren Decoder auf Arbeitsspeicher-Grundlage (TCAM) gemäß einem Aspekt der Erfindung;
  • 3 zeigt eine Ausführungsform eines Huffman-Paralleldecoders gemäß einem Aspekt der Erfindung;
  • 4 zeigt weitere Aspekte eines Huffman-Paralleldecoders gemäß einem Aspekt der Erfindung;
  • 5 und 6 zeigen eine Symbolverteilung gemäß Aspekten der Erfindung;
  • 7 zeigt eine Technik für den Umgang mit Codewörtern, die nicht durch den Halbdecoder bearbeitet werden, gemäß einem Aspekt der Erfindung;
  • 8 zeigt einen weiteren Halbdecoder-Aspekt der Erfindung;
  • 9 zeigt beispielhafte Leistungsdaten gemäß einem Aspekt der Erfindung; und
  • 10 ist ein Ablaufplan eines Entwicklungsprozesses, der in der Entwicklung, Herstellung und/oder zum Testen von Halbleitern verwendet wird.
  • Ausführliche Beschreibung von bevorzugten Ausführungsformen
  • Wie angemerkt ist ein Huffman-Code ein optimaler Präfixcode, der unter Verwendung eines von David. A. Huffman entwickelten Algorithmus gefunden wird. Allgemeinere Symbole werden typischerweise mit weniger Bits dargestellt als weniger übliche Symbole. DEFLATE ist ein Algorithmus zur Datenkomprimierung, der eine Kombination des LZ77-Algorithmus und der Huffman-Codierung verwendet und in RFC 1951 spezifiziert ist. Ein beispielhafter Huffman-Decoder ist in der DEFLATE RFC 1951 definiert.
  • Ferner werden diesbezüglich Daten in Blöcken wie folgt verschlüsselt:
    <Block><Block><Block>...
  • Zum Beispiel kann in jedem Block ein Drei-Bit-Header vorhanden sein. Das erste Bit kann einen Wert „Eins” haben, wenn der bestimmte Block der letzte Block in einer Abfolge von Blöcken ist, oder andernfalls einen Wert „Null” (d. h. wenn mehrere Blöcke erwartet werden). Das zweite und das dritte Bit können die Werte 00 für einen unbearbeiteten Block, 01 für eine festgelegte Huffman-Tabelle (zuvor vereinbart), und 10 für eine dynamische Huffman-Tabelle haben, die in dem Block gespeichert sind.
  • Eine Komprimierung wird durch Eliminierung von doppelten Zeichenfolgen (LZ-Verschlüsselung) und Verwendung eines gewichteten Symbolbaums (Huffman-Verschlüsselung) erreicht. Hinsichtlich der Eliminierung von doppelten Zeichenfolgen ist Folgendes zu beachten:
    Figure DE102016204602A1_0002
  • Wie durch die Pfeile angegeben, werden wiederholte Zeichenfolgen durch einen Zeiger zurück auf das erste Vorkommen der Zeichenfolge ersetzt. Die erste Kopie der Zeichenfolge wird beibehalten. Hier werden nachfolgende Vorkommen von „S” durch einen Zeiger zurück auf das erste Vorkommen von „S” ersetzt, und nachfolgende Vorkommen von „P” werden durch einen Zeiger zurück auf das erste Vorkommen von „P” ersetzt. Der Zeiger würde Informationen enthalten wie „100 Zeichen zurückgehen und 10 Bytes kopieren”. Die Zeiger sind kleiner als die ursprünglichen Daten, und somit kann eine Komprimierung erreicht werden. „Zippen” einer Datei ist ein nicht-einschränkendes Beispiel. Dies ist eine erste Phase; die Huffman-Verschlüsslung wird in einer zweiten Phase ausgeführt.
  • Die verschlüsselten Zeichenfolgen haben eine Länge von 3 bis 258 Byte und eine Distanz von 1 bis 32768 Byte (Gleitfenster).
  • Unter folgender Bezugnahme auf 1 verwendet die Huffman-Verschlüsselung weniger Bits, um allgemeinere Symbole zu verschlüsseln. Die Bit-Folgelänge für Codes ist umgekehrt proportional zur Symbolhäufigkeit. Die Symbole A, B, P und Q können zum Beispiel wie folgt verschlüsselt werden: Symbol:code = A:0, B:10, P:110, Q:111.
  • Die Huffman-Verschlüsselung kommt ohne Präfix aus; d. h. keine Bit-Folge eines Codes ist ein Präfix für einen anderen. Daher ist B:10 ☐t-Folge eines Codes i Ferner besteht hinsichtlich der präfixfreien Eigenschaft, wenn verschlüsselte Bits verkettet sind, keine Mehrdeutigkeit darüber, wann ein Symbol beginnt und endet. Daher sind keine Markierungen erforderlich, die Symbole trennen. Die Folge PABQ kann somit als 110010111 verschlüsselt werden. Dies kompliziert den Aufbau eines Paralleldecoders jedoch, da es sich um einen bitseriellen Prozess handelt.
  • In Bezug auf DEFLATE verschlüsselt die Huffman-Verschlüsselungsvorrichtung ferner Symbole zu Codes. Zweihundertachtundachzig Symbole verschlüsseln Literale und Zeigerlängen wie folgt:
    • 1 0 bis 255: Literale (z. B. unformatiertes ASCII ist hier zu finden)
    • 2 256: Ende eines Komprimierungsblocks (Endsymbol)
    • 3 257 bis 285: Übereinstimmungslänge von 3 bis 258 Byte + Extra-Bits (kein Literal, aber eine Zeichenfolgen-(Übereinstimmungs-)Länge für den Zeiger, der auf dieses Codewort folgt).
  • Die folgende Tabelle zeigt Übereinstimmungslängen von Zeichenfolgen:
    SYMBOL EXTRA-BITS ÜBEREINSTIMMUNGSLÄNGE
    256 0 3
    257 0 4
    ...
    265 1 11 bis 12
    ...
    269 2 19 bis 22
    ...
    284 5 227 bis 257
    285 0 258 (für Lauflängenverschlüsselung)
    286 bis 287 reserviert
  • Es ist zu beachten, dass die Symbole zuerst „Huffman-tauglich” gemacht und anschließend Extra-Bits angehängt werden, um die „MatchLen” (Länge) zu verschlüsseln.
  • Hinsichtlich einer Distanz folgt bei einer Zeigerverschlüsselung nach <Match Length> (Übereinstimmungslänge) immer <Distance> (Distanz). Es gibt 32 Distanzverschlüsselungen wie folgt:
    Symbole Distanzen (Byte)
    0 bis 3 1 bis 4
    4 bis 5 5 bis 8 + 1 Extra-Bit
    6 bis 7 9 bis 16 + 2 Extra-Bits
    ...
    28 bis 29 16385 bis 32768 + 13 Extra-Bits
    30 bis 31 reserviert
  • 2 zeigt einen beispielhaften Decoder auf TCAM-Grundlage. Jede Art von TCAM kann zum Umsetzen von einer oder mehreren Ausführungsformen verwendet werden. Der Eingang ist die Bit-Folge 110010111, deren erste drei Symbole PAB sind. Dies wird als Schlüssel zum Abfragen des inhaltsadressierbaren Arbeitsspeichers (CAM) verwendet. Die CAM-Einträge haben „ternäre Ziffern” mit den Werten Null, Eins oder „Indifferent” (X). Der erste „Treffer” in dem CAM besteht für 110XXX, was dem Symbol P mit einer Drei-Bit-Länge entspricht. Der Eingang wird anschließend um drei Bit nach links verschoben, und der nächste „Treffer” besteht für 0XXXXX, was dem Symbol A mit einer Ein-Bit-Länge entspricht. Der Eingang wird anschließend um ein Bit nach links verschoben, und der nächste „Treffer” besteht für 10XXXX, was dem Symbol 13 mit einer Zwei-Bit-Länge entspricht.
  • Im Folgenden sollen CAM-Array-Breiten untersucht werden. Zu beachten ist, dass ein „Bit” einen Wert von Null oder Eins hat, wogegen eine (ternäre) „Ziffer” in diesem Kontext Werte von Null, Eins oder indifferent (X) haben kann. Die maximale DEFLATE-Bit-Folgelänge ist 15 Bit. Es kann wünschenswert sein, jedem CAM-Wort entweder die Ziffer 0 (was bedeutet, dass es sich um einen „MatchLen”-(Übereinstimmungslängen-)Code” handelt) oder 1 voranzustellen (was bedeutet, dass es sich um einen Distanz-Code handelt) – das heißt, sofern beide Tabellen, „Literal/Länge” und „Distanz” in demselben TCAM gespeichert sind. Daher sollte der TCAM-Teil mindestens 16 Ziffern breit sein, wobei ein Fehlerkorrekturcode (ECC) ausgeschlossen wird.
  • Im Folgenden sollen CAM- und RAM-Array-Längen untersucht werden Mit 288 „Literal/Länge”-Symbolen und 32 „Distanz”-Symbolen, also 288 + 32 = 320 Einträgen, werden 512 TCAM-Einträge impliziert (aufgerundet auf die nächste Zweierpotenz). Zu beachten ist, dass die Aufrundung optional ist; die meisten Technologien werden in Zweierpotenzen angeben, was jedoch nicht erforderlich ist, und dem Fachmann wird klar sein, dass bei verfügbaren Bruchpotenzen keine Aufrundung notwendig ist.
  • Wenn unter folgender Bezugnahme auf die RAM-Array-Breite in einer oder mehreren nicht-einschränkenden Ausführungsformen Symbole und Code-Bit-Längen in dem RAM gespeichert werden, werden 9 Bit für 288 „Literal/Len”-Symbole angenommen („len” wird hierin als Kürzel für „Länge” verwendet), 5 Bit werden für „Distanz”-Symbole angenommen, und das RAM-Wort enthält entweder Literal/Len oder Distanz → max. (9,5) = 9 Bit. Mit einem Ein-Bit-Präfix zum Unterscheiden zwischen „Literal/Len”- und „Distanz”-Symbolen sind daher 10 Bits zum Identifizieren von „Literal/Len”- und „Distanz”-Symbolen” ausreichend. Die Eingangsverschiebungswerte können ebenfalls in dem RAM gespeichert werden. Diesbezüglich ist die maximale Bit-Länge des CAM-Worts (Huffman-Code) = 15, wobei 13 Extra-Bits für Distanz-Codes verwendet werden; also 15 + 13 = 28 Bits. Das heißt, dass der Eingang um 28 Stellen oder weniger verschoben werden kann → log2(28) = 5 Bits (aufgerundet auf die nächste Ganzzahl), um sie in dem RAM-Eintrag zu speichern. Die Summe beträgt somit 10 + 5 = 15 Bits für RAM ausschließlich ECC. In einigen Fällen können zusätzliche RAM-Bits erforderlich sein; zum Beispiel zum Kontrollieren von Decoder-Zustandsmaschinen und dergleichen.
  • Wenn Symbole und Code-Bit-Längen in einem separate SRAM gespeichert werden, muss nur die Adresse des separaten SRAM gespeichert werden, was impliziert, dass log2(512) = 9 Bits der RAM-Abschnitt des TCAM ausschließlich ECC ist. Im Folgenden soll das Problem einer Entschlüsselung einer Bit-Folge wie der folgenden untersucht werden:
    110010101011001100100100100101001111
  • Aufgrund der Codierungen von variabler Länge (VLC) lassen sich Datengrenzen nicht einfach identifizieren. Ein einfacher serieller Decoder entschlüsselt jeweils 1 Bit von links nach rechts, was zu langsam ist. Eine oder mehrere Ausführungsformen entschlüsseln vorteilhafterweise zum Beispiel Zeichenfolgen mit bis zu 128 Bit in einem einzigen Zyklus.
  • Im Folgenden wird auf 3 Bezug genommen. Die Daten 399 sind ein Bit-Strom, der in Huffman-verschlüsselten Symbolen enthalten ist, die von variabler Länge sind (z. B. 1 bis 15 Bit oder eventuell 28 Bit, wenn bestimmte Extra-Bits mit aufgenommen werden). Da die Codes von variabler Länge sind, ist a priori nicht bekannt, wo sich die Grenzen befinden. Es ist nicht bekannt, wo ein Symbol endet und ein anderes beginnt; diese Grenzen zu bestimmen ist Teil des Entschlüsselungsprozesses. Da die Symbole von variabler Länge sind, und da die Symbole in einem Taktzyklus nach dem anderen eingehen, kann ein Symbol eine Taktgrenze überspannen. Ein Symbol kann in einem „Wort” beginnen und in einem anderen „Wort” enden, wobei die Wörter nur Stichproben von Daten sind, die jedem Taktzyklus entnommen werden. Wenn in einem nicht-einschränkenden Beispiel 128 Bit breite Stichproben von Daten 399 entnommen werden (d. h. M = 128), und angenommen (nur zu Veranschaulichungszwecken, da die Symbole von variabler Länge sind), jedes verschlüsselte Symbol 10 Bit breit ist, passt keine Ganzzahl von 10-Bit-Symbolen in den 128-Bit-Sektor von Daten; es gibt 12 Zehn-Bit-Symbole und 8 Bits für das nächste Symbol; die beiden restlichen Bits dieses Symbols kommen mit dem Eingang des nächsten Taktzyklus an. Dies wird in einer oder mehreren Ausführungsformen mittels Lookahead-Abgriff 389 behandelt. Insbesondere soll angenommen werden, dass die maximale Code-Größe N gleich 28 Bit ist. Im schlimmsten Fall kann ein Symbol mit dem letzten Bit der M (z. B. 128) Bits beginnen und mit N – 1 (z. B. 27) Bits in den nächsten Taktzyklus fortfahren. Daher wird ein Lookahead-Abgriff von N – 1 = 27 Bit verwendet. Den Eingangsdaten 399 werden somit in M (z. B. 128) Bit breiten Datenblöcken Stichproben entnommen, wobei die Bits, die von Null bis M – 1 (z. B. 0 bis 127) nummeriert sind, und N – 1 Lookahead-Bits, die von Null bis N – 2 (z. B. 0 bis 26) nummeriert sind, abgegriffen werden.
  • Eine M (z. B. 128) Bit breite Stichprobe von Daten 399 wird dem Lookahead-Register 397 zugeführt, das selbige einen Taktzyklus lang enthält, sodass sie, wenn sie am Halteregister 395 ankommen, dieselbe Zeit wie die Lookahead-Daten aus dem Abgriff 389 haben, der im Lookahead-Register 397 nicht verzögert wurde. Die Daten im Halteregister 395, einschließlich der M (z. B. 128) Bit breiten Stichprobe von Daten 399 mit dem Bezugszeichen 391, und die Daten aus dem Lookahead-Abgriff 389 mit dem Bezugszeichen 393 werden den Halbdecodern 302, 304, 306, ... 308 zugeführt. Im Halteregister 395 werden die Bits in der M (z. B. 128) Bit breiten Stichprobe von Daten 399 mit dem Bezugszeichen 391 von Null bis M – 1 (z. B., 0 bis 127) nummeriert, während die Bits in den Daten aus dem Lookahead-Abgriff 389 mit dem Bezugszeichen 393 von M bis M + N – 1 (z. B. 128 bis 155) nummeriert werden.
  • Die Halbdecoder 302, 304, 306, ... 308 enthalten die verbreitetsten Codewörter (Inhalt wird über alle Decoder übergreifend wiederholt). Der Volldecoder 310 enthält alle Codewörter. Der erste Halbdecoder 302 ist mit Bit 0 bis N – 1 (z. B. 27) des Halteregisters 395 beschaltet, der nächste Halbdecoder 304 ist mit Bit 1 bis N (z. B. 28) des Halteregisters 395 beschaltet usw. Im allgemeinen Fall entschlüsseln alle Halbdecoder ihren Eingangssektor gleichzeitig. Jeder Sektor ist N (z. B. 28) Bit lang, wobei das eine auf der linken Seite um 1 Bit überlappt wird. In einem nichteinschränkenden Beispiel sind 128 Halbdecoder vorhanden. Die Entschlüsselung erfolgt spekulativ, da die Code-Grenzen a priori nicht bekannt sind.
  • SRAMs sind kostengünstiger, kleiner und verbrauchen weniger Energie als TCAMs, wodurch die Verwendung von Halbdecodern auf SRAM-Grundlage vorteilhaft ist. In Anbetracht der Lehren hierin ist der Fachmann in der Lage, Halbdecoder zum Beispiel als SRAM oder dynamischen Arbeitsspeicher (DRAM) sowie Volldecoder in TCAM umzusetzen.
  • Im Folgenden wird auf 9 Bezug genommen. Die Halbdecoder speichern Daten der ersten Ebene (allgemein gefundene Codes). Die seltener gefundenen Codes werden nur in die Daten der zweiten Ebene aufgenommen, die gemäß Ausführungsformen der Erfindung im Volldecoder gespeichert werden. Die Tabellen in 9 zeigen, wie oft ein Code nicht auf der ersten Ebene gefunden wird. Zum Beispiel werden für die Benchmark inp_alice29_txt.gz in 98% der Zeit im Fall der Tabelle (9,6) Codes bei der Längencode-Suche der ersten Ebene gefunden, während nur in 2% der Zeit auf die Suche der zweiten Ebene zurückgegriffen werden muss. 9 zeigt zwei verschiedene Beispiele für drei verschiedene Benchmarks. Im Beispiel von Tabelle (9,6) ist die Tabelle der ersten Ebene SRAM mit 29 Einträgen für Literal/Länge und 26 Einträgen für Distanz, während im Beispiel von Tabelle (10,7) die Tabelle der ersten Ebene SRAM mit 210 Einträgen für Literal/Länge und 27 Eintragen für Distanz ist. Im Beispiel von Tabelle (10,7) bedeutet der Wert von 397 in der zweiten Spalte, zweite Zeile, dass durchschnittlich alle 397 Eingangs-Bytes der Decoder die Literal/Länge-Tabelle der zweiten Ebene abfragen muss. Zu beachten ist, dass „inp_alice29_txt.gz” eine Benchmark ist, die beim Komprimieren von Text allgemein verwendet wird, und die anderen angegebenen .gz-Dateien ebenfalls bekannte Benchmarks sind.
  • Wenn, wie in 4 zu sehen, ein Halbdecoder wie beispielsweise 306 seine Arbeit nicht beenden kann (Fehlentschlüsselung, weil, wie in dem 9 betreffenden Beispiel soeben erörtert, einer der 2% von Codes vorliegt, die nicht auf der ersten Ebene gefunden werden), wird für seinen Eingangssektor ein Multiplexing auf den Volldecoder ausgeführt (siehe „Fehlschlag” bei Zeitpunkt T1). Die restlichen Halbdecoder-Ausgänge auf der rechten Seite (hier 308) werden für ungültig erklärt, weil ihre Start-Bit-Position von dem unvollständigen Decoder-Ausgang abhängt. Der Volldecoder entschlüsselt den fehlentschlüsselten Eingangssektor im nächsten Zyklus.
  • Zu beachten ist, dass für einen Multiplexer 312 nur ein einzelner Eingang gezeigt wird, für den Multiplexer 312 aber tatsächlich die gesamte Ausgangsbreite des Halteregisters einschließlich der Lookahead-Bits verfügbar ist, und die entsprechenden Bits (die dem Halbdecoder des Fehlschlags entsprechen) auf Grundlage eines Auswahlsignals von einer Auswahleinheit 314 ausgewählt und an einen Volldecoder 310 weitergeleitet werden. Am Ende von 4 sind die angegebenen Halbdecoder zum Zeitpunkt T0 erfolgreich („Treffer”), d. h. die Codes wurden gefunden, und der Ausgang ist gültig. Zum Zeitpunkt T1 gibt der Halbdecoder 306, für den der Code nicht gefunden wurde, einen „Fehlschlag” an, der erfordert, dass sein Eingang an den Volldecoder 310 gesendet wird. Die Decoder auf der rechten Seite (z. B. 308) können nicht fortfahren, da die Codegrenzen aufgrund des Fehlschlags des Halbdecoders 306 nicht bekannt sind. Der Volldecoder 310 stellt die Antwort bereit, und anschließend können die restlichen Halbdecoder auf der rechten Seite zum Zeitpunkt T2 fortfahren.
  • Sobald der Volldecoder abschließt, folgen die restlichen Halbdecoder seinem Beispiel (in demselben Zyklus wie der Volldecoder oder in dem folgenden Zyklus).
  • Die Decoder-Auswahleinheit 314 identifiziert von links nach rechts die gültigen Entschlüsselungen von vielen, wobei „falsche” Entschlüsselungen eliminiert werden, die Datengrenzen überqueren.
  • 3 veranschaulicht somit einen beispielhaften parallelen Huffman-Datendecoder, der mehrere (128, in einem nicht-einschränkenden Beispiel) Halbdecoder 302, 304, 306, 308 (davon sind nur einige gezeigt, um Unübersichtlichkeit zu vermeiden), die unter Verwendung eines statischen Arbeitsspeichers (SRAM) konstruiert wurden, und einen Volldecoder 310 enthält, der unter Verwendung eines ternären CAM (TCAM) konstruiert wurde. Der Paralleldecoder von 3 entschlüsselt spekulativ parallel bis zu 128 Codewörter in einem Taktzyklus (im Vergleich zu nur einigen Bits pro Zyklus in gegenwärtigen Systemen). Die Halbdecoder 302, 304, 306, 308 werden mit einem SRAM konstruiert, typischerweise mit 9 bis 10 Adresseingängen unter Verwendung von nur 512 bis 1024 häufigen Codewörtern. Der Codewort-Volldecoder 310 wird unter Verwendung eines ternären CAM (TCAM) konstruiert, der alle Codewörter enthält, sowohl weniger häufige als auch häufige. Zu beachten ist, dass die Gesamtanzahl von Einträgen in einer vollständigen Huffman-Decodertabelle (auf der ersten und der zweiten Ebene) sich wie folgt darstellt (auf Grundlage des zlib-Quellcodes, gefunden unter zlib dot net „.”, wiedergegeben als „Punkt”, um eine Aufnahme von durch einen Browser ausführbaren Code zu vermeiden.
    • 1 Der Fall (9,6): 852 für Länge/Literal + 592 für Distanz = 1444 insgesamt; zum Vergleich mit einem Halbdecoder, der 2**9 + 2**6 = 576 insgesamt benötigt;
    • 2 Der Fall (10,7): 1332 für Länge/Literal + 400 für Distanz = 1732 insgesamt; zum Vergleich mit einem Halbdecoder, der 2**10 + 2**7 = 1152 insgesamt benötigt;
  • Die Halbdecoder 302, 304, 306, 308 haben jeweils 28-Bit-Eingänge, wobei die 128-Bit-Daten in einer Stichprobe in Ein-Bit-Überlappungsintervallen entnommen werden, wodurch Spekulation ermöglicht wird.
  • Der Volldecoder 310 hat einen 28-Bit-Eingang, für den über den Multiplexer 312 von einem der M Intervalle von den M-Bit-Daten eine Multiplexierung vorgenommen wird, während die M-Bit-Daten um 27 Bit durch die Daten aus dem nächsten Datenzyklus erweitert werden, damit 28-Bit-Daten entschlüsselt werden können, die eine M-Bit-Grenze überschreiten. Ein Halbdecoder leitet seinen Eingang effektiv über den Multiplexer 312 an den Volldecoder weiter, wenn er das Codewort nicht entschlüsseln kann; eine Decoder-Auswahleinheit 314 wählt die gültigen entschlüsselten Codewörter aus vielen Entschlüsselungen aus. Wie oben erörtert, steht die gesamte Ausgangsbreite des Halteregisters einschließlich der Lookahead-Bits für den Multiplexer 312 zur Verfügung, und die entsprechenden Bits (die dem Halbdecoder des Fehlschlags entsprechen) werden auf Grundlage eines Auswahlsignals von der Auswahleinheit 314 ausgewählt und an den Volldecoder 310 weitergeleitet.
  • Zu beachten ist, dass die beispielhaften Werte von 128, 28 und 27 im allgemeinen Fall jeweils durch beliebige Werte von M (Breite des Datenblocks von Eingangsdaten), N (Größe des Eingangs für jeden Halbdecoder) und K (N – 1, Anzahl der Lookahead-Bits) ersetzt werden können. Somit werden M Bit eines Eingangsdatenstroms 399, nummeriert von Null bis M – 1, dem Lookahead-Register 397 und anschließend dem Halteregister 395 zugeführt. In dem nichteinschränkenden Beispiel von 3 und 4 ist M = 128. Damit werden N – 1 Bits, Null bis N – 2 (N = 28 in dem nicht-einschränkenden Beispiel von 3 und 4), aus dem Eingangsstrom 399 für einen Lookahead-Abschnitt 393 des Halteregisters 395 abgegriffen. Der Hauptabschnitt 391 des Halteregisters 395 enthält somit die Bits Null bis M – 1 des Eingangsdatenstroms 399, wobei der Lookahead-Abgriff das Lookahead-Register 397 umgangen hat, und der Lookahead-Abschnitt 393 des Halteregisters 395 somit die N – 1 Bits, Null bis N – 2 (N = 28 in dem nichteinschränkenden Beispiel von 3 und 4) enthält, die aus dem nächsten Zyklus stammen, da das Lookahead-Register 397 von dem Abgriff umgangen wurde. Dies sind die Bits M bis M + N – 1, d. h. 129 bis 155 in dem nicht-einschränkenden Beispiel. Zu beachten ist, dass wiederum zum Vermeiden von Verwirrung die Halbdecoder-Sektoren 28 Bit breit sind, aber nur 27 Lookahead-Bits plus ein Überlappungs-Bit vorhanden sind.
  • In einigen Ausführungsformen haben die Halbdecoder jeweils 28-Bit-Eingänge, wobei die 128-Bit-Daten in einer Stichprobe in Ein-Bit-Überlappungsintervallen entnommen werden, wodurch Spekulation ermöglicht wird; und der Volldecoder hat einen 28-Bit-Eingang, für den von einem der M Intervalle von 28 Bit von den M-Bit-Daten eine Multiplexierung vorgenommen wird, während die M-Bit-Daten um 27 Bit durch die Daten aus dem nächsten Datenzyklus erweitert werden, damit 28-Bit-Daten entschlüsselt werden können, die eine M-Bit-Grenze überqueren. Der Halbdecoder leitet seinen Eingang über den Multiplexer an den Volldecoder weiter, wenn er das Codewort nicht entschlüsseln kann. Somit hat in dem nichteinschränkenden Beispiel von 3 der Halbdecoder 302 die Eingangs-Bits Null bis N – 1 (27), der Halbdecoder 304 hat die Eingangs-Bits Eins bis N (28), der Halbdecoder 306 hat die Eingangs-Bits P bis N + P – 1 usw.
  • Die Codewörter mit variabler Länge werden von dem Volldecoder 310 (nach Bedarf) und von den Halbdecodern 302, 304, 306, 308 als Codes mit fester Länge entschlüsselt und zur LZ-Wörterbuchsuche bereit in einzelne Kanäle (hier 16 Kanäle von Null bis 15) platziert.
  • 5 zeigt einen beispielhaften Codierungsbaum. Es gibt insgesamt 16384 + 8192 + ... + 1 + 1 = 32768 Vorkommen; 64 + 32 + ... + 1 + 1 = 128 Codewort-Vorkommen länger als 8 Bit; und 32 + 16 + ... + 1 + 1 = 64 Codewort-Vorkommen länger als 9 Bit. Die Wahrscheinlichkeit von 16 Halbdecodern, die in demselben Zyklus für einen 2^8 SRAM abschließen, beträgt 94%, während die Wahrscheinlichkeit von 16 Halbdecodern, die in demselben Zyklus für einen 2^9 SRAM abschließen, 97% beträgt. Zu beachten ist, dass viele Symbolverteilungen zu einem ausgewogeneren Baum führen können, und ein größerer Anteil von Codewörtern aus dem SRAM des Halbdecoders herausfallen kann. Daher kann ein 2^10 Eintrag oder eine größere Tabelle wünschenswert sein. Da dies alles datenabhängig ist, können in Anbetracht der Lehren hierin Benchmark-Dateien vom Fachmann zum Auswählen der Tabellengröße verwendet werden. Die Codes unterhalb der gestrichelten Linie treten im Vergleich zu den Codes oberhalb der Linie selten auf; die Codes oberhalb der gestrichelten Linie werden in den Halbdecodern gefunden, während diejenigen unterhalb der gestrichelten Linie nur im Volldecoder gefunden werden.
  • 6 zeigt ein Beispiel eines ausgewogeneren Baums. Die Daten enthalten 256 Symbole; 25% der Symbole treten jeweils 400 mal auf; 25% kommen 200 mal vor; und 50% kommen jeweils 100 mal vor. Acht Symbole implizieren eine Tiefe von vier, während 256 Symbole eine Tiefe von neun implizieren. Daher verschlüsseln maximal neun Bits das gesamte Set von 256 Symbolen. Wenn eine Acht-Bit-Tabelle verwendet wird, bleiben (100 + 100)/800 = 25% der Symbole außerhalb der Tabelle. Die Codes unterhalb der gestrichelten Linie treten wiederum im Vergleich zu den Codes oberhalb der Linie selten auf; die Codes oberhalb der gestrichelten Linie werden in den Halbdecodern gefunden, während diejenigen unterhalb der gestrichelten Linie nur im Volldecoder gefunden werden. Hier kann eine Acht-Bit-Tabelle zu viele Fehlschläge ergeben, sodass eine Neun-Bit-Tabelle vorzuziehen ist.
  • Im Folgenden soll der Volldecoder 310 von 3 und 4 untersucht werden, der detaillierter in 2 gezeigt ist. Er enthält die gesamte Huffman-Tabelle mit bis zu 288 Literal/Länge-Symbolen und bis zu 32 Distanz-Symbolen. Jeder Eintrag gibt das entschlüsselte Symbol (9 Bit) an; die Anzahl der Codewort-Bits (1 bis 15) (4 Bit); und die entsprechenden Steuerzeichen (z. B. ungültiges Codewort). Es können bis zu 13 Extra-Bits vorhanden sein, die Argumente des Codes sind; 15 + 13 = 28. Mit wie angemerkt bis zu 288 Literal/Länge-Symbolen und bis zu 32 Distanz-Symbolen ergibt 288 + 32 weniger als 512 (der nächsthöheren Zweierpotenz), was impliziert, dass 512 TCAM-Einträge ausreichend sein sollten. Der Eingang ist die Bit-Folge 110010111, die den Symbolen PABQ entspricht. Dies wird als Schlüssel zum Abfragen des inhaltsadressierbaren Arbeitsspeichers (CAM) verwendet. Die CAM-Einträge (Code-Wörter) können für jede „ternäre Ziffer” die Werte Null, Eins oder „Indifferent” (X) haben. Die entsprechenden RAM-Einträge enthalten das Symbol und seine Länge. Der erste „Treffer” in dem CAM besteht für 110XXX, was dem Symbol P mit einer Drei-Bit-Länge entspricht. Der Eingang wird anschließend um drei Bit nach links verschoben, und der nächste „Treffer” besteht für 0XXXXX, was dem Symbol A mit einer Ein-Bit-Länge entspricht. Der Eingang wird anschließend um ein Bit nach links verschoben, und der nächste „Treffer” besteht für 10XXXX, was dem Symbol B mit einer Zwei-Bit-Länge entspricht.
  • Im Folgenden sollen die Halbdecoder 302, 304, 306, 308 untersucht werden. Jeder der Halbdecoder enthält einen Abschnitt der Huffman-Tabelle und beruht auf SRAM. Jeder der Halbdecoder speichert häufige Länge/Literal-Symbole und speichert häufige Distanz-Symbole. In einer oder mehreren nicht-einschränkenden Ausführungsformen sind die Codewörter, die entschlüsselt werden, 8 bis 10 Bit breit, was zu einem 2^8 bis 2^10 SRAM-Eintrag führt. Jeder Eintrag gibt an:
    • 1 Das Symbol (9 Bit)
    • 2 Anzahl der Codewort-Bits (0 bis 10) (4 Bit)
    • 3 Steuerzeichen (z. B. ungültiges Codewort)
  • Breite SRAMs sind wünschenswert, weil der pro-Bit-Bereich am kleinsten ist. und die Huffman-Tabelle schnell geladen werden kann. Zehn-Bit-Codewörter ergeben weniger als 2^10 Schreibvorgänge aus demselben Grund, aus dem die Huffman-Verschlüsselung gut funktioniert, z. B. können SRAM-Einträge für jede Zeile in einem Zyklus geschrieben werden, wenn die „Indifferent”-Bits in der Zeile gewählt sind. Zum Beispiel enthalten für das Eingangs-Codewort 100000xxx, den SRAM-Speicherort 100000, alle Einträge 0 bis 7 dasselbe Symbol, SymLen.... Im besten Fall laden 128 Schreibvorgänge die Tabelle in den 128 × 144 SRAM.
  • Für Codewörter, die von dem Halbdecoder nicht bearbeitet werden, hat der SRAM-Eintrag, den das lange Codewort indexiert, unter Bezugnahme auf 7 ein Steuerbit, das das System anweist, an anderer Stelle zu suchen (die Bits dieses Halbdecoders werden über den Multiplexer, der durch den Block 314 kontrolliert wird, zum Volldecoder weitergeleitet, wie oben erläutert). Der Halbdecoder kann zum Beispiel 29 oder 210 Einträge haben. Unter Bezugnahme auf 755 sieht sich der Halbdecoder daher nur die ersten 9 oder 10 Bits des Eingangs an. Da die häufigsten Symbole die kleinste Bit-Anzahl verwenden, und weil der Halbdecoder nur häufiger vorkommende Symbole enthält, ist der Halbdecoder in der Lage, die Codewörter zu finden, die zu entziffern er nur durch Ansehen der ersten 9 oder 10 Bits fähig ist. Wenn die ersten 9 oder 10 Bits nicht definiert sind, werden die Bits wie oben erläutert an den Volldecoder weitergeleitet.
  • Unter weiterer Bezugnahme auf die Halbdecoder soll im Folgenden 8 untersucht werden. Wie hierin zu sehen, können Literale und Distanzen in separaten Tabellen 899, 897 gespeichert werden. Von außen erscheinen sie als nur eine einzige Tabelle. Eine Logik (das Auswahlsignal an den Multiplexer 895) wählt die eine oder die andere Tabelle aus. Der Distanz-Code wird durch den Kontext ausgewählt: wenn das vorherige Symbol ”Länge” ist, weist die Logik den Multiplexer an, die Distanztabelle 897 auszuwählen; wenn das vorherige Symbol ”Literal” ist, weist die Logik den Multiplexer an, die Literal/Länge-Tabelle 899 auszuwählen. Der Multiplexer-Ausgang enthält gegebenenfalls Symbol, Symbol Len und irgendwelche Steuerbits.
  • Verschiedene Optimierungen sind möglich. Zum Beispiel kann die Anzahl von Halbdecodern auf Grundlage des erwarteten Komprimierungsverhältnisses reduziert werden. Wenn ein Komprimierungsverhältnis 2:1 erwartet wird, wird der Eingang mit der Hälfte des Ausgangsverhältnisses aufgenommen, somit können halb so viele Halbdecoder notwendig sein; zum Beispiel eine Eingangsbreite von 8 Byte und eine Ausgangsbreite von 16 Byte. Bei nicht komprimierbaren Daten fällt das Ausgangsverhältnis auf das Eingangsverhältnis.
  • 9 zeigt nicht-einschränkende beispielhafte Leistungsdaten, wie oben erläutert.
  • Eine oder mehrere Ausführungsformen entschlüsseln vorteilhafterweise mehrere Codes pro Zyklus unter Verwendung von TCAM und SRAM. Diese Unterscheidung sollte im Hinblick auf Techniken des Stands der Technik getroffen werden, bei denen N Ergebnisse parallel erzielt wurden, aber nur ein Ergebnis ein gültiger Code sein kann, dergestalt, dass in derartigen Systemen nach dem Stand der Technik tatsächlich nur ein Huffman Symbol pro Zyklus entschlüsselt wird.
  • Der DEFLATE-Standard (allgemeiner ausgedrückt dynamische Huffman-Codes auf Baum-Grundlage) müssen auf Tabellen beruhen; daher verwenden eine oder mehrere Ausführungsformen SRAM oder TCAM oder beides.
  • Zu beachten ist, dass eine oder mehrere Ausführungsformen einen einzelnen Strom parallel entschlüsseln im Gegensatz zum Entschlüsseln von mehreren unabhängigen Strömen, für die jeweils 1 Symbol pro Zyklus und Strom entschlüsselt wird.
  • Eine oder mehrere Ausführungsformen stellen daher einen parallelen Huffman-Datendecoder bereit einschließlich mindestens einem Halbdecoder, der unter Verwendung von SRAM konstruiert wurde, und mindestens einem Volldecoder, der unter Verwendung eines ternären CAM (TCAM) konstruiert wurde, sowie eine Decoder-Auswahleinheit, die aus vielen Entschlüsselungen die gültigen entschlüsselten Codewörter auswählt. Die beispielhaften Huffman-Decoderwerte 128, 28, 27 können, wie angemerkt, jeweils durch beliebige Werte von M, N und K ersetzt werden. In einer oder mehreren Ausführungsformen entschlüsselt der Paralleldecoder parallel in einem Taktzyklus spekulativ bis zu 128 Codewörter; die Halbdecoder sind mit SRAM mit typischerweise 9 bis 10 Adresseingängen konstruiert, die nur 512 bis 1024 häufige Codewörter verwenden; und Volldecoder für Codewörter werden unter Verwendung eines ternären CAM (TCAM) konstruiert, der alle Codewörter enthält, einschließlich auch der weniger häufigen.
  • In einigen Ausführungsformen haben die Halbdecoder jeweils 28-Bit-Eingänge, wobei die 128-Bit-Daten in einer Stichprobe in Ein-Bit-Überlappungsintervallen entnommen werden, wodurch Spekulation ermöglicht wird; und der Volldecoder hat einen 28-Bit-Eingang, für den von einem der M Intervalle von 28 Bit von den M-Bit-Daten eine Multiplexierung vorgenommen wird, während die M-Bit-Daten um 27 Bit durch die Daten aus dem nächsten Datenzyklus erweitert werden, damit 28-Bit-Daten entschlüsselt werden können, die eine M-Bit-Grenze überqueren. Der Halbdecoder leitet seinen Eingang über den Multiplexer an den Volldecoder weiter, wenn er das Codewort nicht entschlüsseln kann.
  • Die Elemente in den Figuren werden im Allgemeinen in Hardware umgesetzt. In einer oder mehreren Ausführungsformen sind das Lookahead-Register 397 und Halteregister 395 Hardware-Register, die mit bekannten Techniken umgesetzt werden können; der Volldecoder wird in TCAM umgesetzt; die Halbdecoder werden in SRAM (oder alternativ DRAM) umgesetzt; der Multiplexer 312 wird unter Verwendung von bekannten Multiplexschaltungen umgesetzt; und die Auswahleinheit 314 wird in Hardware-Zustandsmaschinen und zufallsbedingter Logik umgesetzt.
  • Im Hinblick auf die bisherige Erörterung ist klar, dass allgemein ausgedrückt ein beispielhafter paralleler Huffman-Datendecoder zum Entschlüsseln von Daten, die gemäß einem Huffman-Code gemäß einem Aspekt der Erfindung verschlüsselt wurden, ein Halteregister 395 mit einem Hauptabschnitt 391, der einen Hauptdateneingang aufweist, einen Lookahead-Abschnitt 393, der einen Lookahead-Eingang aufweist, und eine Mehrzahl von Ausgängen enthält. Außerdem ist eine Mehrzahl M von Halbdecodern 302, 304, 306, 308, bei denen jeweils ein Eingang mit einer entsprechenden einen der Mehrzahl von Ausgängen des Halteregisters verbunden ist, und ein Ausgang enthalten. Die Eingänge erhalten jeweils von den Ausgängen des Halteregisters aufeinanderfolgende, sich überlappende Abschnitte von Daten in dem Hauptabschnitt und dem Lookahead-Abschnitt des Halteregisters. Ein weiteres Element ist ein Volldecoder 310, der in einem ternären inhaltsadressierbaren Arbeitsspeicher umgesetzt ist. Der Volldecoder weist einen Eingang auf, der selektiv verbindbar ist, um einen bestimmten der sich überlappenden Datenabschnitte und einen Ausgang zu erhalten. Eine Decoder-Auswahl- und Sequenzierungseinheit 314 hat eine Mehrzahl von Eingängen, die mit den Ausgängen der Halbdecoder und dem Ausgang des Volldecoders verbunden sind, einen Auswahlausgang, der die selektive Verbindung des Volldecoder-Eingangs steuert, und eine Mehrzahl von Ausgangskanälen. Der Volldecoder enthält alle Codewörter des Huffman-Codes, während die Halbdecoder eine Untergruppe von häufig vorkommenden Codewörtern des Huffman-Codes enthalten, Wenn kein Codewort angetroffen wird, das nicht in den Halbdecodern verfügbar ist, entschlüsseln die Halbdecoder M der häufig vorkommenden Codewörter parallel in einem einzigen Taktzyklus. Wenn ein Codewort auftritt, das nicht in den Halbdecodern verfügbar ist (siehe 4), veranlasst die Decoder-Auswahl- und Sequenzierungseinheit 314, dass der Eingang, der für einen entsprechenden einen der Halbdecoder (z. B. 306) bestimmt ist, dessen Eingang das Codewort enthält, das nicht in dem entsprechenden einen der Halbdecoder verfügbar ist, auf den Eingang des Volldecoders 310 angewendet wird.
  • In einer oder mehreren Ausführungsformen sind Halbdecoder in einer kostengünstigeren Technologie umgesetzt als der ternäre inhaltsadressierbare Arbeitsspeicher wie beispielsweise SRAM oder DRAM.
  • Einige Ausführungsformen enthalten ferner ein Lookahead-Register 397 mit einem Dateneingang, um einen Datenstrom 399 zu erhalten, und einen Ausgang, der mit dem Hauptabschnitt 391 des Halteregisters 395 verbunden ist. Das Halteregister erhält den Lookahead-Eingang durch Abgreifen des Datenstroms und Umgehen des Lookahead-Registers, wie unter 389 zu sehen.
  • Einige Ausführungsformen enthalten ferner einen Multiplexer 312, der mit einem ersten Eingang mit dem Halteregister 395 verbunden ist, einen Auswahleingang und einen Ausgang, der mit dem Eingang des Volldecoders verbunden ist. Die Decoder-Auswahl- und Sequenzierungseinheit 314 veranlasst, dass der Eingang, der für einen entsprechenden einen der Halbdecoder (z. B. 306) bestimmt ist, dessen Eingang das Codewort enthält, das nicht in dem entsprechenden einen der Halbdecoder verfügbar ist, auf den Eingang des Volldecoders 310 angewendet wird, indem ein Auswahlsignal an den Auswahleingang des Multiplexers 312 gesendet wird.
  • In einer oder mehreren Ausführungsformen überlappen sich die Daten-Überlappungsabschnitte um ein Bit.
  • Ferner wird im Hinblick auf die bisherige Erörterung klar sein, dass ein beispielhaftes Verfahren zum parallelen Entschlüsseln von Daten, die gemäß einem Huffman-Code verschlüsselt wurden, gemäß einem weiteren Aspekt der Erfindung ein Aufweisen eines Hauptdateneingangs 391 in einem Halteregister 395 und eines Lookahead-Eingangs 393; und Bereitstellen von aufeinanderfolgenden sich überlappenden Abschnitten des Hautdateneingangs und des Lookahead-Eingangs für eine Mehrzahl M von Halbdecodern 3023, 304, 306, 308 enthält. Die Halbdecoder enthalten eine Untergruppe von häufig vorkommenden Codewörtern des Huffman-Codes. Wenn kein Codewort angetroffen wird, das nicht in den Halbdecodern verfügbar ist, enthält ein weiterer Schritt ein paralleles Entschlüsseln von M der häufig vorkommenden Codewörtern in einem einzigen Taktzyklus. Wenn anderseits ein Codewort angetroffen wird, das nicht in den Halbdecodern verfügbar ist, enthält ein weiterer Schritt Anwenden des Eingangs, der für einen entsprechenden einen der Halbdecoder (z. B. 306) bestimmt ist, dessen Eingang das Codewort enthält, das nicht in dem entsprechenden einen der Halbdecoder verfügbar ist, auf einen Eingang eines Volldecoders 310, der in einem ternären inhaltsadressierbaren Arbeitsspeicher umgesetzt ist. Der Volldecoder enthält alle Codewörter des Huffman-Codes.
  • Ein weiterer Schritt enthält in einigen Fällen Umsetzen der Halbdecoder in einer kostengünstigeren Technologie als dem ternären inhaltsadressierbaren Arbeitsspeicher wie beispielsweise SRAM oder DRAM.
  • In einigen Ausführungsformen enthält ein weiterer Schritt Aufweisen des Hautdateneingangs in einem Lookahead-Register 397, wobei der Lookahead-Eingang (siehe 389) das Lookahead-Register umgeht.
  • In einigen Ausführungsformen wird das Anwenden des Eingangs, der für den entsprechenden einen der Halbdecoder bestimmt ist, auf den Eingang des Volldecoders mit einem Multiplexer 312 umgesetzt.
  • Details der beispielhaften integrierten Schaltung und Auslegungsstruktur
  • Ein oder mehrere beispielhafte Verfahren, wie hierin beschrieben, können zur Herstellung, zum Testen oder für den Betrieb von integrierten IC-Chips verwendet werden. Die IC-Chips können vom Hersteller in Form von Rohwafern (das heißt als einzelner Wafer mit mehreren nicht verpackten Chips), als Nackt-Chip oder in einer gepackten Form vertrieben werden. In letzterem Fall wird der Chip in einem Einzelchip-Gehäuse (wie beispielsweise einem Kunststoffträger mit Leitungen, die an einer Steuerplatine oder einem anderen übergeordneten Träger befestigt werden) oder in einem Multi-Chip-Paket bereitgestellt (wie beispielsweise einem Keramikträger, der entweder Oberflächenverbindungen oder begrabene Verbindungen oder beides aufweist). In jedem Fall wird der Chip dann mit anderen Chips, diskreten Schaltungselementen und/oder anderen Signalverarbeitungseinheiten integriert als Teil von (a) einem Zwischenprodukt, wie beispielsweise einer Steuerplatine, oder (b) eines Endprodukts. Das Endprodukt kann jedes Produkt sein, das IC-Chips enthält.
  • 10 zeigt ein Blockschaubild eines beispielhaften Entwicklungsablaufs 1900, der zum Beispiel für Entwicklung, Simulation, Test, Layout und Herstellung von Halbleiter-IC-Logik verwendet wird. Der Entwicklungsablauf 1900 enthält Prozesse, Maschinen und/oder Mechanismen zum Verarbeiten von Auslegungsstrukturen oder -einheiten zum logischen oder anderweitigen Generieren von funktional gleichwertigen Darstellungen von oben beschriebenen und in 2, 3, 4, 7 und 8 gezeigten Auslegungsstrukturen und/oder -einheiten. Die Auslegungsstrukturen, die durch den Entwicklungsablauf 1900 verarbeitet und/oder generiert werden, können auf maschinenlesbaren Übertragungs- oder Speichermedien verschlüsselt werden, um Daten und/oder Anweisungen zu enthalten, die beim Ausführen oder anderweitig auf einem Datenverarbeitungssystem verarbeitet eine logisch, strukturell, mechanisch oder anderweitig funktional gleichwertige Darstellung von Hardwarekomponenten, Schaltungen, Einheiten oder Systemen generieren. Maschinen enthalten alle Maschinen, die in einem IC-Entwicklungsprozess wie Entwickeln, Herstellen oder Simulieren einer Schaltung, Komponente, Einheit oder eines Systems verwendet werden, sie sind aber nicht darauf beschränkt. Zu Maschinen können beispielsweise zählen: Lithografiemaschinen, Maschinen und/oder Ausrüstung zum Generieren von Masken (z. B. Elektronenstrahlschreiber), Computer oder Ausrüstung zum Simulieren von Auslegungsstrukturen, alle im Herstellungs- oder Testprozess verwendeten Vorrichtungen oder alle Maschinen zum funktionellen Programmieren von gleichwertigen Darstellungen der Auslegungsstrukturen in jedem Medium (z. B. eine Maschine zum Programmieren eines programmierbaren Gate-Arrays).
  • Der Entwicklungsablauf 1900 kann je nach Typ der entwickelten Darstellung unterschiedlich sein. Zum Beispiel kann ein Entwicklungsablauf 1900 zum Erstellen eines anwendungsspezifischen IC (ASIC) sich von einem Entwicklungsablauf 1900 zum Entwickeln einer Standardkomponente oder von einem Entwicklungsablauf 1900 zum Instanziieren der Auslegung in ein programmierbares Array, zum Beispiel eines programmierbaren Gate-Arrays (PGA) oder eines feldprogrammierbaren Gate-Arrays (FPGA) unterscheiden, die von Altera® Inc. oder Xilinx® Inc. angeboten werden.
  • 10 veranschaulicht mehrere derartige Auslegungsstrukturen einschließlich einer Eingangsauslegungsstruktur 1920, die bevorzugt durch einen Entwicklungsprozess 1910 verarbeitet wird. Die Auslegungsstruktur 1920 kann eine logische Simulations-Auslegungsstruktur sein, die durch den Entwicklungsprozess 1910 generiert und verarbeitet wird, um eine logisch gleichwertige funktionale Darstellung einer Hardware-Einheit zu erzeugen. Die Auslegungsstruktur 1920 kann auch oder alternativ Daten und/oder Programmanweisungen aufweisen, die bei Verarbeitung durch den Entwicklungsprozess 1910 eine funktionale Darstellung der physischen Struktur einer Hardware-Einheit generieren. Die Auslegungsstruktur 1920 kann unter Verwendung von elektronischer computergestützter Entwicklung (ECAD) generiert werden, wie zum Beispiel durch einen Kernentwickler/-designer umgesetzt, gleichgültig, ob funktionale und/oder strukturelle Auslegungsmerkmale dargestellt werden. Wenn die Auslegungsstruktur 1920 auf einem maschinenlesbaren Datenübertragungs-, Gate-Array- oder Speichermedium verschlüsselt wird, können Zugriff und Verarbeitung durch ein oder mehrere Hardware- und/oder Software-Module in dem Entwicklungsprozess 1910 erfolgen, um eine elektronische Komponente, eine Schaltung, ein Elektronik- oder Logik-Modul, eine Vorrichtung, eine Einheit oder ein System zu simulieren oder anderweitig darzustellen, wie in 2, 3, 4, 7 und 8 gezeigt. Daher kann die Auslegungsstruktur 1920 Dateien oder andere Datenstrukturen aufweisen, einschließlich von Menschen und/oder Maschinen lesbarem Quellcode, kompilierte Strukturen und vom Computer ausführbare Code-Strukturen, die bei Verarbeitung durch ein Datenverarbeitungssystem zur Entwicklung oder Simulation Schaltungen oder andere Ebenen von Hardware-Logikauslegungen funktional simulieren oder anderweitig darstellen. Derartige Datenstrukturen können Entwicklungsentitäten oder andere Datenstrukturen in Hardware-Beschreibungssprache (HDL) enthalten, die HDL-Designsprachen einer niedrigeren Ebene wie Verilog und VHDL und/oder Designsprachen höherer Ebene wie C oder C++ entsprechen und/oder damit kompatibel sind.
  • Der Entwicklungsprozess 1910 verwendet und integriert bevorzugt Hardware- und/oder Software-Module zum synthetischen Erstellen, Übersetzen oder anderweitigen Verarbeiten einer funktionalen Entsprechung einer Auslegung/Simulation der Komponenten, Schaltungen, Einheiten oder logischen Strukturen, die in 2, 3, 4, 7 und 8 gezeigt sind, um eine Netzliste 1980 zu generieren, die Auslegungsstrukturen wie die Auslegungsstruktur 1920 enthalten kann. Die Netzliste 1980 kann zum Beispiel kompilierte oder anderweitig verarbeitete Datenstrukturen aufweisen, die eine Liste von Drähten, diskreten Komponenten, Logikgattern, Steuerschaltungen, E/A-Einheiten, Modellen usw. darstellen, die die Verbindungen mit anderen Elementen und Schaltungen in der Auslegung einer integrierten Schaltung beschreibt. Die Netzliste 1980 kann unter Verwendung eines iterativen Prozesses synthetisch erstellt werden, in dem die Netzliste 1980 erneut einmal oder mehrmals synthetisch erstellt wird, abhängig von Auslegungspezifikationen und -parametern für die Einheit. Wie bei anderen hierin beschriebenen Auslegungsstrukturtypen kann die Netzliste 1980 auf einem maschinenlesbaren Datenspeichermedium aufgezeichnet oder in einem programmierbare Gate-Array programmiert werden. Der Datenträger kann ein nicht flüchtiges Speichermedium wie ein Magnetplatten- oder optisches Plattenlaufwerk, ein programmierbares Gate-Array, ein Kompakt-Flash- oder anderer Flashspeicher sein. Außerdem oder alternativ kann der Datenträger ein System- oder Cache-Speicher, Pufferspeicher oder elektrisch oder optisch leitende Einheiten oder Materialien sein, auf denen Datenpakete übertragen und temporär über das Internet oder andere vernetzte geeignete Mittel gespeichert werden können.
  • Der Entwicklungsprozess 1910 kann Hardware- und Software-Module zum Verarbeiten einer Vielfalt von Eingangsdaten-Strukturtypen enthalten, einschließlich der Netzliste 1980. Derartige Datenstrukturtypen können sich zum Beispiel in Bibliothekselementen 1930 befinden und eine Gruppe von allgemein verwendeten Elementen, Schaltungen und Einheiten enthalten, einschließlich Modelle, Layouts und symbolische Darstellungen für eine bestimmte Herstellungstechnologie (z. B. verschiedene Technologieknoten, 32 nm, 45 nm, 90 nm usw.). Die Datenstrukturtypen können ferner Auslegungsspezifikationen 1940, Charakterisierungsdaten 1950, Prüfungsdaten 1960, Entwurfsregeln 1970 und Testdaten-Dateien 1985 enthalten, die Eingangstestmuster, Ausgangstestmuster und weitere Testinformationen enthalten. Der Entwicklungsprozess 1910 kann ferner zum Beispiel standardmäßige mechanische Entwicklungsprozesse wie Belastungsanalyse, thermische Analyse, Simulation von mechanischen Ereignissen, Prozesssimulation für Vorgänge wie Gießen, Ausformen und Formpressen usw. enthalten. Ein Fachmann für mechanische Konstruktion kann den Umfang möglicher mechanischer Konstruktionswerkzeuge und Anwendungen einschätzen, die in dem Entwicklungsprozess 1910 verwendet werden, ohne vom Schutzumfang und dem Erfindungsgedanken der Erfindung abzuweichen. Der Entwicklungsprozess 1910 kann auch Module zum Ausführen von standardmäßigen Schaltungsentwicklungsprozessen enthalten, wie beispielsweise Zeitablaufanalyse, Prüfung, Entwurfsregelüberprüfung, Platzierung und Weiterleitung von Operationen usw.
  • Der Entwicklungsprozess 1910 verwendet und integriert Werkzeuge für Logik- und physische Konstruktion wie HDL, Compiler und Werkzeuge zum Erstellen von Simulationsmodellen zum Verarbeiten der Auslegungsstruktur 1920 zusammen mit einigen oder allen der dargestellten unterstützenden Datenstrukturen in Verbindung mit jeder weiteren mechanischen Konstruktion oder weiteren Daten (sofern zutreffend), um eine zweite Auslegungsstruktur 1990 zu generieren. Die Auslegungsstruktur 1990 befindet sich auf einem Speichermedium oder programmierbaren Gate-Array in einem Datenformat, das für den Datenaustausch von mechanischen Einheiten und Strukturen verwendet wird (z. B. Informationen, die in einem Format IGES, DXF, Parasolid XT, JT, DRG oder irgendeinem geeigneten Format gespeichert sind, um derartige mechanische Auslegungsstrukturen zu speichern oder wiederzugeben). Ähnlich der Auslegungsstruktur 1920 weist die Auslegungsstruktur 1990 bevorzugt eine oder mehrere Dateien, Datenstrukturen oder andere computerverschlüsselte Daten oder Anweisungen auf, die sich in Übertragungs- oder Datenspeichermedien befinden und bei Verarbeitung durch ein ECAD-System eine logische oder anderweitig funktionale Entsprechungsform von einer oder mehreren der Ausführungsformen der Erfindung generieren, wie in 2, 3, 4, 7 und 8 gezeigt. In einer Ausführungsform kann die Auslegungsstruktur 1990 ein kompiliertes ausführbares HDL-Simulationsmodell aufweisen, das die in 2, 3, 4, 7 und 8 gezeigten Einheiten simuliert.
  • Die Auslegungsstruktur 1990 kann auch ein Datenformat verwenden, das für den Austausch von Layout-Daten von integrierten Schaltungen verwendet wird und/oder ein symbolisches Datenformat (z. B. Informationen, die in einem GDSII (GDS1), GL1, OASIS, Map-Dateien oder irgendeinem anderen geeigneten Format gespeichert sind, um derartige Entwurfsdatenstrukturen zu speichern). Die Auslegungsstruktur 1990 kann Informationen aufweisen wie beispielsweise symbolische Daten, Map-Dateien, Testdaten-Dateien, Entwurfsinhaltsdateien, Herstellungsdaten, Layout-Parameter, Drähte, Metallebenen, Bohrungen, Formen, Daten für den Leitweg durch die Fertigungsstraße und alle anderen Daten, die für einen Hersteller oder andere Designer/Entwickler erforderlich sind, um eine Einheit oder Struktur zu erzeugen, wie oben beschrieben und in 2, 3, 4, 7 und 8 gezeigt. Die Auslegungsstruktur 1990 kann dann mit einer Phase 1995 fortfahren, in der die Auslegungsstruktur 1990 zum Beispiel mit dem Tapeout fortfährt, für die Fertigung freigegeben wird, für ein Maskenhaus freigegeben wird, zu einem weiteren Designhaus gesendet wird, zum Kunden zurückgeschickt wird usw.
  • Die hierin verwendete Terminologie dient nur zum Zweck der Beschreibung von besonderen Ausführungsformen und soll die Erfindung keinesfalls einschränken. Die hierin verwendeten Singularformen „ein”, „eine” und „der/die/das” sollen auch die Pluralformen mit einschließen, es sei denn, der Kontext gibt eindeutig anderes vor. Es versteht sich des Weiteren, dass die Begriffe „weist auf” und/oder „aufweisend” bei Verwendung in dieser Patentschrift das Vorhandensein ausgewiesener Funktionen, Ganzzahlen, Schritte, Operationen, Elemente und/oder Komponenten angeben, das Vorhandensein oder die Hinzufügung von einem oder mehreren anderen Funktionen, Ganzzahlen, Schritten, Operationen, Elementen, Komponenten und/oder Gruppen davon aber nicht ausschließen.
  • Die entsprechenden Strukturen, Materialien, Handlungen und Entsprechungen aller Mittel oder Schritt-plus-Funktion-Elemente in den nachstehenden Ansprüchen sollen alle Strukturen, Materialien oder Handlungen zum Ausführen der Funktion in Kombination mit anderen beanspruchten Elementen enthalten, wie speziell beansprucht.
  • Die Beschreibungen der verschiedenen Ausführungsformen der vorliegenden Erfindung wurden zum Zweck der Veranschaulichung erstellt, sie sollen aber keineswegs erschöpfend oder auf die offenbarten Ausführungsformen eingeschränkt sein. Für Fachleute sind viele Modifizierungen und Variationen offenkundig, die nicht von dem Schutzbereich und dem Erfindungsgedanken der beschrieben Ausführungsformen abweichen. Die hierin verwendete Terminologie wurde gewählt, um die Grundgedanken der Ausführungsformen, der praktischen Anwendung oder technischen Verbesserung gegenüber auf dem Markt gefundenen Technologien bestmöglich zu erklären oder anderen Fachleuten das Verständnis der hierin offenbarten Ausführungsformen zu ermöglichen.

Claims (11)

  1. Paralleler Huffman-Datendecoder zum Entschlüsseln von Daten, die gemäß einem Huffman-Code verschlüsselt wurden, wobei der parallele Huffman-Datendecoder aufweist: ein Halteregister mit einem Hauptabschnitt, der einen Hauptdateneingang aufweist, einen Lookahead-Abschnitt, der einen Lookahead-Eingang aufweist, und einer Mehrzahl von Ausgängen; eine Mehrzahl M von Halbdecodern, bei denen jeweils ein Eingang mit einem entsprechenden einen der Mehrzahl von Ausgängen des Halteregisters verbunden ist, und einen Ausgang, wobei die Eingänge jeweils von den Ausgängen des Halteregisters aufeinanderfolgende, sich überlappende Abschnitte von Daten in dem Hauptabschnitt und dem Lookahead-Abschnitt des Halteregisters erhalten; einen Volldecoder, der in einem ternären inhaltsadressierbaren Arbeitsspeicher umgesetzt ist, wobei der Volldecoder einen Eingang aufweist, der selektiv verbindbar ist, um einen vorgegebenen der sich überlappenden Datenabschnitte zu erhalten, und einen Ausgang; eine Decoder-Auswahl- und Sequenzierungseinheit mit einer Mehrzahl von Eingängen, die mit den Ausgängen der Halbdecoder und dem Ausgang des Volldecoders verbunden sind, einem Auswahlausgang, der die selektive Verbindung des Volldecoder-Eingangs steuert, und einer Mehrzahl von Ausgangskanälen; wobei: der Volldecoder alle Codewörter des Huffman-Codes enthält; die Halbdecoder eine Untergruppe von häufig vorkommenden Codewörtern des Huffman-Codes enthalten; die Halbdecoder parallel in einem einzigen Taktzyklus M der häufig vorkommenden Codewörter entschlüsseln, wenn kein Codewort angetroffen wird, das in den Halbdecodern nicht verfügbar ist; und wenn ein Codewort angetroffen wird, das nicht in den Halbdecodern verfügbar ist, die Decoder-Auswahl- und Sequenzierungseinheit veranlasst, dass der Eingang, der für einen entsprechenden einen der Halbdecoder bestimmt ist, dessen Eingang das Codewort enthält, das nicht in dem entsprechenden einen der Halbdecoder verfügbar ist, auf den Eingang des Volldecoders angewendet wird.
  2. Paralleler Huffman-Datendecoder nach Anspruch 1, wobei die Halbdecoder in einer kostengünstigeren Technologie als dem ternären inhaltsadressierbaren Arbeitsspeicher umgesetzt werden.
  3. Paralleler Huffman-Datendecoder nach Anspruch 2, wobei die kostengünstigere Technologie einen statischen Arbeitsspeicher aufweist.
  4. Paralleler Huffman-Datendecoder nach Anspruch 2, wobei die kostengünstigere Technologie einen dynamischen Arbeitsspeicher aufweist.
  5. Paralleler Huffman-Datendecoder nach Anspruch 1, ferner aufweisend ein Lookahead-Register mit einem Dateneingang zum Erhalten eines Datenstroms und mit einem Ausgang, der mit dem Hauptabschnitt des Halteregisters verbunden ist, wobei das Halteregister den Lookahead-Eingang durch Abgreifen des Datenstroms und Umgehen des Lookahead-Registers erhält.
  6. Paralleler Huffman-Datendecoder nach Anspruch 1, ferner aufweisend einen Multiplexer mit einem ersten Eingang, der mit dem Halteregister verbunden ist, einen Auswahleingang, und einen Ausgang, der mit dem Eingang des Volldecoders verbunden ist, wobei die Decoder-Auswahl- und Sequenzierungseinheit veranlasst, dass der Eingang, der für den entsprechenden einen der Halbdecoder bestimmt ist, dessen Eingang das Codewort enthält, das nicht in dem entsprechenden einen der Halbdecoder verfügbar ist, auf den Eingang des Volldecoders angewendet wird, indem ein Auswahlsignal an den Auswahleingang gesendet wird.
  7. Paralleler Huffman-Datendecoder nach Anspruch 1, wobei die Daten-Überlappungsabschnitte sich um ein Bit überlappen.
  8. Auslegungsstruktur, die konkret in einem nicht-transitorischen maschinenlesbaren Medium zum Entwickeln, Herstellen oder Testen einer integrierten Schaltung verkörpert ist, wobei die Auslegungsstruktur einen parallelen Huffman-Datendecoder zum Entschlüsseln von Daten aufweist, die gemäß einem Huffman-Code verschlüsselt wurden, wobei der parallele Huffman-Datendecoder wiederum aufweist: ein Halteregister mit einem Hauptabschnitt, der einen Hauptdateneingang aufweist, einen Lookahead-Abschnitt, der einen Lookahead-Eingang aufweist, und eine Mehrzahl von Ausgängen; eine Mehrzahl M von Halbdecodern mit jeweils einem Eingang, der mit einem entsprechenden einen der Mehrzahl von Ausgängen des Halteregisters verbunden ist, und einem Ausgang, wobei die Eingänge jeweils von den Ausgängen des Halteregisters aufeinanderfolgende, sich überlappende Abschnitte von Daten in dem Hauptabschnitt und dem Lookahead Abschnitt des Halteregisters erhalten; einen Volldecoder, der in einem ternären inhaltsadressierbaren Arbeitsspeicher umgesetzt ist, wobei der Volldecoder einen Eingang, der selektiv verbindbar ist, um einen bestimmten der sich überlappenden Datenabschnitte zu erhalten, und einen Ausgang aufweist; eine Decoder-Auswahl- und Sequenzierungseinheit mit einer Mehrzahl von Eingängen, die mit den Ausgängen der Halbdecoder und dem Ausgang des Volldecoders verbunden sind, einem Auswahlausgang, der die selektive Verbindung des Volldecoder-Eingangs steuert, und einer Mehrzahl von Ausgangskanälen; wobei: der Volldecoder alle Codewörter des Huffman-Codes enthält; die Halbdecoder eine Untergruppe von häufig vorkommenden Codewörtern des Huffman-Codes enthalten; die Halbdecoder parallel in einem einzigen Taktzyklus M der häufig vorkommenden Codewörter entschlüsseln, wenn kein Codewort angetroffen wird, das in den Halbdecodern nicht verfügbar ist; und wenn ein Codewort angetroffen wird, das nicht in den Halbdecodern verfügbar ist, die Decoder-Auswahl- und Sequenzierungseinheit veranlasst, dass der Eingang, der für einen entsprechenden einen der Halbdecoder bestimmt ist, dessen Eingang das Codewort enthält, das nicht in dem entsprechenden einen der Halbdecoder verfügbar ist, auf den Eingang des Volldecoders angewendet wird.
  9. Verfahren zum parallelen Entschlüsseln von Daten, die gemäß einem Huffman-Code verschlüsselt wurden, wobei das Verfahren aufweist: Aufweisen eines Hauptdateneingangs in einem Halteregister und eines Lookahead-Eingangs; Bereitstellen von aufeinanderfolgenden sich überlappenden Abschnitten des Hauptdateneingangs und des Lookahead-Eingangs für eine Mehrzahl M von Halbdecodern, wobei die Halbdecoder eine Untergruppe von häufig vorkommenden Codewörtern des Huffman-Codes enthalten; wenn kein Codewort angetroffen wird, das nicht in den Halbdecodern verfügbar ist, paralleles Entschlüsseln von M der häufig vorkommenden Codewörter in einem einzigen Taktzyklus; wenn ein Codewort angetroffen wird, das nicht in den Halbdecodern verfügbar ist, Anwenden des Eingangs, der für einen entsprechenden einen der Halbdecoder bestimmt ist, dessen Eingang das Codewort enthält, das nicht in dem entsprechenden einen der Halbdecoder verfügbar ist, auf einen Eingang eines Volldecoders, der in einem ternären inhaltsadressierbaren Arbeitsspeicher umgesetzt ist, wobei der Volldecoder alle Codewörter des Huffman-Codes enthält.
  10. Verfahren nach Anspruch 9, ferner aufweisend ein Aufweisen des Hauptdateneingangs in einem Lookahead-Register, wobei der Lookahead-Eingang das Lookahead-Register umgeht.
  11. Verfahren nach Anspruch 9, wobei das Anwenden des Eingangs, der für den entsprechenden einer der Halbdecoder bestimmt ist, auf den Eingang des Volldecoders mit einem Multiplexer umgesetzt wird.
DE102016204602.0A 2015-03-28 2016-03-21 Huffmann-Paralleldecoder Active DE102016204602B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/672,135 US9252805B1 (en) 2015-03-28 2015-03-28 Parallel huffman decoder
US14/672,135 2015-03-28

Publications (2)

Publication Number Publication Date
DE102016204602A1 true DE102016204602A1 (de) 2016-09-29
DE102016204602B4 DE102016204602B4 (de) 2024-05-08

Family

ID=55175063

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102016204602.0A Active DE102016204602B4 (de) 2015-03-28 2016-03-21 Huffmann-Paralleldecoder

Country Status (3)

Country Link
US (1) US9252805B1 (de)
CN (1) CN106027066B (de)
DE (1) DE102016204602B4 (de)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9832287B2 (en) * 2014-03-28 2017-11-28 Comtech Ef Data Corp. System and method for dynamic Huffman decoding
US10034407B2 (en) * 2016-07-22 2018-07-24 Intel Corporation Storage sled for a data center
US9825649B1 (en) * 2016-09-29 2017-11-21 Intel Corporation Efficient huffman decoder improvements
CN106788451B (zh) * 2016-11-30 2021-03-09 苏州浪潮智能科技有限公司 一种哈夫曼解码方法及其装置
CN107294539B (zh) * 2017-05-23 2020-04-28 浙江大学 一种准动态霍夫曼硬件编码器及编码方法
US9906239B1 (en) * 2017-06-28 2018-02-27 Ati Technologies Ulc GPU parallel huffman decoding
CN107404654B (zh) * 2017-08-23 2020-09-18 苏州浪潮智能科技有限公司 一种jpeg图像解压缩方法、装置及平台
US10361715B1 (en) * 2018-06-04 2019-07-23 Amazon Technologies, Inc. Decompression circuit
US10862513B2 (en) * 2019-01-16 2020-12-08 Fungible, Inc. Data processing unit having hardware-based parallel variable-length codeword decoding
US11561797B2 (en) * 2019-08-19 2023-01-24 Ati Technologies Ulc Decompression engine for decompressing compressed input data that includes multiple streams of data
CN113271107B (zh) * 2020-09-30 2024-04-26 北京清微智能科技有限公司 一种Huffman硬件解码方法
CN113839678B (zh) * 2021-08-31 2023-11-03 山东云海国创云计算装备产业创新中心有限公司 一种哈夫曼解码系统、方法、设备及计算机可读存储介质
CN113839679B (zh) * 2021-08-31 2023-09-15 山东云海国创云计算装备产业创新中心有限公司 一种哈夫曼解码系统、方法、设备及计算机可读存储介质
US20230281164A1 (en) * 2022-03-03 2023-09-07 Fotonation Limited Data decompression apparatus

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3136796B2 (ja) * 1992-09-24 2001-02-19 ソニー株式会社 可変長符号デコーダ
US5740460A (en) 1994-07-29 1998-04-14 Discovision Associates Arrangement for processing packetized data
US5663725A (en) * 1995-11-08 1997-09-02 Industrial Technology Research Institute VLC decoder with sign bit masking
US5757295A (en) * 1995-12-28 1998-05-26 Philips Electronics North America Corporation Variable length decoder with enhanced throughput due to parallel processing of contiguous code words of identical type
JP3304745B2 (ja) * 1996-03-11 2002-07-22 富士ゼロックス株式会社 可変長符号復号化器
US5841380A (en) * 1996-03-29 1998-11-24 Matsushita Electric Corporation Of America Variable length decoder and method for decoding two codes per clock cycle
US6311258B1 (en) * 1997-04-03 2001-10-30 Canon Kabushiki Kaisha Data buffer apparatus and method for storing graphical data using data encoders and decoders
US6043765A (en) 1997-09-26 2000-03-28 Silicon Engineering, Inc. Method and apparatus for performing a parallel speculative Huffman decoding using both partial and full decoders
US6636222B1 (en) 1999-11-09 2003-10-21 Broadcom Corporation Video and graphics system with an MPEG video decoder for concurrent multi-row decoding
JP2000323993A (ja) * 1999-05-11 2000-11-24 Mitsubishi Electric Corp Mpeg1オーディオレイヤiii復号処理装置およびコンピュータをmpeg1オーディオレイヤiii復号処理装置として機能させるためのプログラムを記録したコンピュータ読取可能な記録媒体
US6603413B2 (en) * 2001-02-07 2003-08-05 Canon Kabushiki Kaisha Variable-length decoding apparatus and method
US7283591B2 (en) * 2003-03-28 2007-10-16 Tarari, Inc. Parallelized dynamic Huffman decoder
US6975253B1 (en) * 2004-08-06 2005-12-13 Analog Devices, Inc. System and method for static Huffman decoding
US7736946B2 (en) * 2007-02-07 2010-06-15 Honeywell International Inc. System and method for sealing a MEMS device
US7642935B2 (en) * 2008-04-07 2010-01-05 Mediatek Inc. Huffman decoding method and apparatus
CN101729076B (zh) * 2008-10-22 2012-11-21 安凯(广州)微电子技术有限公司 一种基于非完备码表解析码长的哈夫曼解码方法
JP5006990B2 (ja) * 2009-05-20 2012-08-22 日本電信電話株式会社 符号化方法、符号化装置、復号方法、復号装置、プログラム及び記録媒体
KR20100136890A (ko) * 2009-06-19 2010-12-29 삼성전자주식회사 컨텍스트 기반의 산술 부호화 장치 및 방법과 산술 복호화 장치 및 방법
US20130054886A1 (en) 2010-01-25 2013-02-28 Idatamap Pty. Ltd. Content addressable memory (cam)
CN102255617B (zh) * 2010-05-19 2014-02-19 鸿富锦精密工业(深圳)有限公司 哈夫曼树的存储方法及利用数组进行数据解码的方法
US8456331B2 (en) 2011-04-15 2013-06-04 Cavium, Inc. System and method of compression and decompression
CN102780493B (zh) * 2011-05-09 2016-06-29 晨星软件研发(深圳)有限公司 霍夫曼解码器及其解码方法
US9100042B2 (en) * 2013-06-20 2015-08-04 International Business Machines Corporation High throughput decoding of variable length data symbols

Also Published As

Publication number Publication date
CN106027066A (zh) 2016-10-12
DE102016204602B4 (de) 2024-05-08
US9252805B1 (en) 2016-02-02
CN106027066B (zh) 2019-06-04

Similar Documents

Publication Publication Date Title
DE102016204602B4 (de) Huffmann-Paralleldecoder
DE112012004873B4 (de) Hohe Bandbreitendekomprimierung von mit variabler Länge verschlüsselten Datenströmen
DE69838074T2 (de) Verfahren und vorrichtung zur gleichzeitigen verschlüsselung und komprimierung von daten
DE102014012138B4 (de) Verbesserter Decoder für Paritätsprüfcodes mit niedriger Dichte
DE102005028221B4 (de) Vorrichtung und Verfahren zum Schutz der Integrität von Daten
DE19827904C2 (de) Blockchiffrier- oder -dechiffrierverfahren und Blockchiffrier- oder -dechiffriervorrichtung
DE112013006339B4 (de) Kompression hoher Bandbreite um Datenströme zu Verschlüsseln
EP2240848B1 (de) Schaltung und verfahren zur generierung einer echten, schaltungsspezifischen und zeitinvarianten zufallszahl
DE102020110578A1 (de) Selbstprüfungskompression
DE112011101116B4 (de) Two-Level BCH-Codes für Solid-State-Speichereinheiten
DE602004009284T2 (de) Systeme und Verfahren um automatisch generiertes Testmuster zu verarbeiten
EP1588493A2 (de) Blockdatenkompressionssystem, bestehend aus einer kompressionseinrichtung und einer dekompressionseinrichtung, und verfahren zur schnellen blockdatenkompression mit multi-byte-suche
DE112012003503T5 (de) Skalierbares Deduplizierungssystem mit kleinen Blöcken
DE102008016179A1 (de) Automatische Generierung von Kompaktcodetabellen
DE102015110431A1 (de) Kryptografischer Prozessor, Verfahren zum Implementieren eines kryptografischen Prozessors und Schlüsselgenerierungsschaltung
DE112019001438T5 (de) Kryptographisches asic mit kombinierten funktionen
DE102016204792A1 (de) Gleichzeitig ablaufende Fehlererkennung in einer ternären inhaltsadressierbaren Speicher- (TCAM-) Einheit
Singleton Generalized snake-in-the-box codes
DE102012213788A1 (de) Ende-zu-Ende-Datenschutz bei gleichzeitiger Unterstützung mehrerer CRC-Algorithmen
DE112004000140T5 (de) Kodierte Schreibmaske
DE102018116572A1 (de) Schutz gegen seitenkanalangriffe
DE112019001239T5 (de) Kompaktes zeitstempelsystem mit linear rückgekoppelten schieberegistern undverwandte systeme und verfahren
DE102014105218A1 (de) Suchvorrichtung mit Verwendung von endlichen Automaten für Teilworte
DE102018217016A1 (de) Ein-Chip-System und Sicherheitsschaltung mit einem derartigen Ein-Chip-System
DE102014200164A1 (de) Verfahren zum Erzeugen einer Ausgabe einer Zufallsquelle eines Zufallsgenerators

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R016 Response to examination communication
R018 Grant decision by examination section/examining division