DE60110493T2 - Entropie Kodierer/Dekodierer zur schnellen Datenkompression und -dekompression - Google Patents

Entropie Kodierer/Dekodierer zur schnellen Datenkompression und -dekompression Download PDF

Info

Publication number
DE60110493T2
DE60110493T2 DE60110493T DE60110493T DE60110493T2 DE 60110493 T2 DE60110493 T2 DE 60110493T2 DE 60110493 T DE60110493 T DE 60110493T DE 60110493 T DE60110493 T DE 60110493T DE 60110493 T2 DE60110493 T2 DE 60110493T2
Authority
DE
Germany
Prior art keywords
register
data
bits
fifo
mode
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE60110493T
Other languages
English (en)
Other versions
DE60110493D1 (de
Inventor
Randy T. Crane
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.)
Hewlett Packard Development Co LP
Original Assignee
Hewlett Packard Development Co LP
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 Hewlett Packard Development Co LP filed Critical Hewlett Packard Development Co LP
Application granted granted Critical
Publication of DE60110493D1 publication Critical patent/DE60110493D1/de
Publication of DE60110493T2 publication Critical patent/DE60110493T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

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

Description

  • Gebiet der Erfindung
  • Die vorliegende Erfindung bezieht sich allgemein auf einen Entropiecodierer/decodierer für eine schnelle Datenkomprimierung und -dekomprimierung. Genauer gesagt bezieht sich die vorliegende Erfindung auf einen Entropiecodierer/decodierer, der mit jedem Komprimierungsschema verwendet werden kann, das einen Entropiecodierungsschritt umfasst.
  • Hintergrund der Erfindung
  • Bei Datenübertragungs- und Verarbeitungsanwendungen ist es üblich, dass Daten vor oder während der Verarbeitung oder Übertragung von Daten gemäß verschiedenen Komprimierungsalgorithmen komprimiert werden. Außerdem ist es üblich, dass komprimierte (codierte) Daten während oder nach der Verarbeitung oder Übertragung decodiert werden, um die codierten Daten zurück zur ursprünglichen Form umzuwandeln.
  • Einige übliche Komprimierungsschemata (oder Algorithmen) umfassen, was als Entropiecodierungsschritt bekannt ist. Beispiele dieser übliche Algorithmen, die einen Entropiecodierungsschritt umfassen, umfassen LZW, verlustfreie JPEG, G3, G4 usw. Komprimierungsschemata, die einen Entropiecodierungsschritt umfassen, erzeugen typischerweise einen Ausgabebitstrom, der eine variable Länge hat. Aufgrund der variablen Länge der codierten Ausgabe erfordert das Verarbeiten dieser Daten eine große Menge an Rechnungsaufwand auf Seiten der Verarbeitungshardware und des zentralen Prozessors oder der zentralen Steuerung.
  • Typische Komprimierungshardware ist typischerweise zweckgebunden zum Verarbeiten/Codieren gemäß nur einem vordefi nierten Komprimierungsalgorithmus. Falls Daten, die unter Verwendung verschiedener Komprimierungsalgorithmen codiert wurden, verarbeitet oder übertragen werden sollen, ist es aufgrund dieser Beschränkung notwendig, dass mehrere Hardwareimplementierungen vorgesehen sind, um jedes der verfügbaren Komprimierungsalgorithmen/-formate unterzubringen. Dies erhöht die Kosten in Zusammenhang mit der Verarbeitung oder Übertragung von Daten, die gemäß mehreren Komprimierungsalgorithmen codiert sind.
  • Beispiele bekannter Systeme und Techniken zum Komprimieren von Daten wurden in dem US Patent 5,499,382 an Nusinov u.a. erörtert, für eine Schaltung und ein Verfahren zum Bit-Verdichten und Bit-Entpacken unter Verwendung eines Barrel-Schiebers, und in dem US-Patent 4,360,840 an Wolrum für ein Echtzeitdaten-Komprimierungs-/Dekomprimierungsschema für Facsimile-Übertragungssysteme.
  • Es ist die Aufgabe der vorliegenden Erfindung, einen Codierer/Decodierer zu schaffen, der mit jedem Komprimierungsschema verwendet werden kann, das einen Entropiecodierungsschritt umfasst.
  • Diese Aufgabe wird durch einen Codierer/Decodierer gemäß Anspruch 1 gelöst.
  • Die vorliegende Erfindung liefert ein System zum Codieren und Decodieren von Informationen.
  • Kurz gesagt kann das System bezüglich der Architektur wie folgt implementiert werden. Es ist ein Codierer zum Codieren von Daten vorgesehen, der ein Datenregister zum Empfangen und Speichern eines Codeworts variabler Länge, ein Bitstromregister zum Empfangen von Daten, einen Multiplexer zum Laden gültiger Bits von dem Steuerregister in die höchstwertigsten Bits, die in dem Bitstromregister verfügbar sind, ein Zuerst-Hinein-Zuerst-Hinaus-(FIFO-)Register zum Empfangen der Inhalte des Bitstromregisters, wenn alle verfügbaren Bits des Bitstromregisters mit gültigen Datenbits geladen sind, und eine Unterbrechungssteuerung zum Erzeugen eines Unterbrechungssignals umfasst, um eine Auslesung von Daten von dem FIFO-Register einzuleiten.
  • Bei einem weiteren Ausführungsbeispiel der vorliegenden Erfindung ist ein Decodierer zum Decodieren von Daten vorgesehen. Dieser Decodierer umfasst ein erstes Register zum Empfangen codierter Datenwortdaten fester Länge, ein Bitstromregister zum Empfangen des codierten Datenworts fester Länge, einen Multiplexer zum Laden Codewortdaten variabler Länge von dem Bitstrompuffer in ein Datenregister, und eine Unterbrechungssteuerung zum Erzeugen eines Unterbrechungssignals zum Einleiten des Schreibens codierter Daten fester Länge in das erste Register.
  • Die vorliegende Erfindung kann auch so gesehen werden, dass sie ein Verfahren zum Codieren liefert. Diesbezüglich kann das Verfahren durch die folgenden Schritte grob zusammengefasst werden: Empfangen von Codewortdaten variabler Länge, Bestimmen der Anzahl gültiger Bits der Codewortdaten, Laden der Codewortdaten in einen Bitstrompuffer, falls alle gültigen Bits passen. Falls nicht alle gültigen Bits in den Bitstrompuffer passen, Laden eines ersten Segments der gültigen Bits in den Bitstrompuffer und dann Laden der Inhalte des Bitstromregisters in ein FIFO-Register, und Laden eines zweiten Segments der teilweise gültigen Bits in den Bitstrompuffer.
  • Ein weiteres Verfahren zum Decodieren von Daten ist vorgesehen, das durch die folgenden Schritte grob zusammengefasst werden kann: Empfangen eines Datenworts, Laden des Datenworts in einen Puffer, Auslesen eines Codeworts variabler Länge von dem Datenwort; und Laden des Codeworts variabler Länge in ein Register fester Länge.
  • Andere Systeme, Verfahren, Merkmale und Vorteile der vorliegenden Erfindung werden für einen Fachmann auf diesem Gebiet bei der Untersuchung der folgenden Zeichnungen und der detaillierten Beschreibung offensichtlich. Es ist beabsichtigt, dass alle zusätzlichen Systeme, Verfahren, Merkmale und Vorteile, die in dieser Beschreibung enthalten sind, innerhalb des Schutzbereichs der vorliegenden Erfindung liegen und durch die angehängten Ansprüche geschützt sind.
  • Kurze Beschreibung der Zeichnungen
  • Die Erfindung ist besser verständlich mit Bezugnahme auf die folgenden Zeichnungen. Die Komponenten in den Zeichnungen sind nicht notwendigerweise maßstabsgerecht, stattdessen wurde der Schwerpunkt darauf gelegt, die Prinzipien der vorliegenden Erfindung deutlich darzustellen. Darüber hinaus bezeichnen in den Zeichnungen gleiche Bezugszeichen entsprechende Teile in den mehreren Ansichten.
  • 1 ist ein Diagramm, das ein System darstellt, das den CODEC der vorliegenden Erfindung umfasst;
  • 2 ist ein Blockdiagramm, das den CODEC der vorliegenden Erfindung näher darstellt;
  • 3 ist ein Diagramm, das ein Steuerregister darstellt;
  • 4 ist ein Diagramm, das ein FIFO-Pegelregister darstellt;
  • 5 ist ein Flussdiagramm, das das Codierverfahren der vorliegenden Erfindung darstellt;
  • 6 ist ein Diagramm, das das Decodierverfahren der vorliegenden Erfindung darstellt; und
  • 7 ist ein Diagramm, das den Prozess des Ladens/Entladens von Datenwörtern variabler Länge in den Bitstrompuffer 150 darstellt.
  • Detaillierte Beschreibung des bevorzugten Ausführungsbeispiels
  • Die vorliegende Erfindung bezieht sich auf einen Codierer und Decodierer (CODEC), der mit im Wesentlichen jedem Komprimierungsschema verwendet werden kann, das einen Entropiecodierungsschritt umfasst. Ferner liefert die vorliegende Erfindung Daten-FIFO und Barrel-Schieber, die verwendet werden können, um Daten entweder während der Codier- oder Decodieroperation zu verarbeiten.
  • 1 stellt ein System dar, dass den Entropie-CODEC der vorliegenden Erfindung umfasst. Eine zentrale Verarbeitungseinheit (CPU) 10 ist vorgesehen, die über eine lokale Schnittstelle 102 eine Schnittstelle mit dem CODEC 1 bildet.
  • Mit Bezugnahme auf 2 ist ein Ausführungsbeispiel des Entropie-CODEC 1 der vorliegenden Erfindung dargestellt. Der CODEC 1 arbeitet auf zwei Weisen: Codiermodus und Decodiermodus. In 2 ist eine Registerschnittstelle 100, ein Registerblock 110 und eine lokale Schnittstelle 120 gezeigt. Die Registerschnittstelle 100 bildet eine Schnittstelle mit der CPU 10 zum Steuern des Eingangs und Lesen von Daten in/von den Registern des Registerblocks 110. Ein Zähler 170 ist vorgesehen zum Zählen des Pegels/der Anzahl von Datenwörtern, die zu einem Zeitpunkt in dem FIFO 160 gespeichert sind. Der Zähler 170 liefert eine Eingabe zu der Unterbrechungssteuerung 180, wenn der Pegel/die Anzahl von Datenwörtern, die in dem FIFO 160 gespeichert sind, einen Wert erreicht, der dem Zähler 170 entspricht.
  • Der Registerblock 110 umfasst ein Bits-Legen-Längen-Register 110A, ein Bits-Legen-Coderegister 110B, ein FIFO-Pegelregister 110C, ein Rücksetzregister 110D, ein Steuerregister 110E, ein Flush-Zuerst-Hinein-Zuerst-Hinaus (FLUSH-FIFO) Register 110F, ein Bits-Holen-Register 110G, ein Bitzeigerregister 110H und ein Gepackte-Ausgabewörter-Register 110I. Außerdem sind eine Steuerung 130, die den Betrieb eines Multiplexers 140 steuert, ein Bitstrompuffer 150 und ein Zuerst-Hinein-Zuerst-Hinaus-Registerblock (FIFO) 160 gezeigt. Die Steuerung 130 arbeitet gemäß Befehlen von der CPU 10. Der FIFO 160 ist beispielsweise ein 32 Bit × 16 Wort FIFO-Registerblock. Der Multiplexer 140 ist mit der lokalen Schnittstelle 120 verbunden, über die Daten zu und von dem Registerblock 110 übertragen werden.
  • Das Rücksetzregister 110D ist ein Nur-Schreibe-Register, das verwendet wird, um die Hardware, einschließlich allen Zeigern und des FIFO 160, der vorliegenden Erfindung 1 zurückzusetzen. Das Steuerregister 110E speichert Daten, die die Steuerbits darstellen, wie es in 3 dargestellt ist. Mit Bezugnahme auf 3 ist ersichtlich, dass das Steuerregister 110E so konfiguriert werden kann, dass beispielsweise die Bits 0–4 einen vordefinierten Wert oder einen FIFO-Unterbrechungspegel darstellen, der einen maximalen oder minimalen Pegel/Anzahl von Datenwörtern darstellt, die in dem FIFO 160 gespeichert werden dürfen, abhängig von der Funktionsweise. Das Bit 5 des Steuerregisters 110E ist das Codier/Decodierbit (EN/DEC). Der Wert des EN/DEC-Bits zeigt an, ob der CODEC 1 Daten von dem FIFO 160 decodiert oder Daten in den FIFO 160 codiert. Wenn das EN/DEC-Bit beispielsweise 0 ist, codiert der CODEC 1. Dies wird auch als Codiermodus bezeichnet. Wenn das EN/DEC-Bit beispielsweise 1 ist, decodiert der CODEC 1. Dies wird auch als Decodiermodus bezeichnet. Das Bit 6 des Steuerregisters 110E stellt das Unterbrechungsfreigabebit dar. Das Unterbrechungsfreigabe-(IE)-Bit kann beispielsweise eine 1 sein (hoch), was es dem CODEC 1 ermöglicht, die CPU 10 zu unterbrechen. Die verbleibenden Bits des Steuerregisters 110E werden verwendet, um Codewortdaten variabler Länge zu sammeln. Diese Codewortdaten werden nachfolgend von dem Steuerregister 110E ausgelesen und über den Multiplexer 140 zu dem Bitstrompuffer 150 geleitet. Alle Bits in dem Steuerre gister 110 sind bei einer Zurücksetzung auf 0 voreingestellt.
  • Ein Bitzeigerregister 110H ist vorgesehen. Das Bitzeigerregister 110H ist vorzugsweise ein Nur-Lese-Register, das während dem Codiermodus Daten speichert, die einen Zeigerwert reflektieren, der das nächst verfügbare höchstwertigste Bit (MSB) in dem Bitstromregister 150 anzeigt, das mit Daten geladen werden kann. Wo der Bitstrompuffer 150 beispielsweise 32 Bits lang ist, kann das Bitstromzeigerregister zu einem von 32 Bits, Bit 0 bis Bit 31, zeigen. Wenn der Bitstrompuffer 150 voll ist, zeigt der Bitstromzeiger zu dem Bit 0, was anzeigt, dass der Bitstrompuffer 150 voll ist. Falls das Bitstromzeigerregister einen Wert zwischen 1 und 31 anzeigt, hat der Bitstrompuffer 150 Bits verfügbar, um eine Dateneingabe anzunehmen. Falls das Bitzeigerregister 110H beispielsweise einen Wert von 28 anzeigt, dann ist es möglich, zusätzliche Daten in den Bitstrompuffer 150 zu laden, beginnend mit dem nächsten MSB 29 des Bitstrompuffers 150. Kurz gesagt, der Wert in dem Bitzeiger 110H spezifiziert das MSB-Bit in dem Bitstrompuffer 150, in das Daten geladen werden können.
  • Das Flush-FIFO-Register 110F kann adressiert werden, um zu bewirken, dass Daten, die in den Bitstrompuffer 150 gespeichert sind, in den FIFO 160 geschrieben werden. Vorzugsweise sollten die Inhalte des Bitzeigerregisters 110H ausgelesen werden, bevor in das FLUSH-FIFO-Register 110F geschrieben wird.
  • Ein Beispiel eines FIFO-Pegelregisters 110C ist in 4 dargestellt. Hier ist ersichtlich, dass die Bits 0–4 verwendet werden, um den FIFO-Pegel zu speichern. Der FIFO-Pegel ist ein Wert, der die Anzahl von Datenwörtern darstellt, die in den FIFO 160 geladen werden können, bevor die Inhalte des FIFO 160 ausgelesen werden, um Platz für zusätzliche Datenwörter zu machen. Der FIFO-Pegelregister 110C kann sowohl während dem Codier- als auch dem Decodier modus gelesen werden. Ein Bits-Legen-Coderegister 110B ist zum Speichern von Daten vorgesehen, die das Codewort der nächsten variablen Bitlänge darstellen, das ausgegeben werden soll oder zu der Ausgabedatenzeichenfolge geschrieben werden soll. Daten, die in das Bits-Legen-Register 110B geschrieben sind, sind vorzugsweise rechts ausgerichtet. Es ist auch ein Bits-Legen-Längenregister 110A vorgesehen, das Daten speichert, die die Anzahl von Bits des Bits-Legen-Coderegisters 110B anzeigt, die in die Ausgabedatenzeichenfolge geschrieben werden soll. Daten, die in das Bits-Legen-Längenregister 110A geschrieben werden, bewirken, dass der CODEC 1 tatsächlich die Codedaten schreibt, die in dem Bits-Legen-Coderegister 110B gespeichert sind. Bei einem bevorzugten Ausführungsbeispiel werden Daten zuerst in das Bits-Legen-Coderegister 110B geschrieben, gefolgt vom Schreiben von Daten in das Bits-Legen-Längenregister 110A.
  • Das Bits-Holen-Register 110G wird während dem Decodiermodus verwendet, um Codes variabler Bitlänge von dem Eingangsdatenstrom zu extrahieren. Wo es beispielsweise gewünscht wird, dass die nächsten fünf Bits von dem Dateneingangsstrom gelesen werden sollen, wird ein Wert von 5 in das Bits-Holen-Register 110G geschrieben. Die fünf niedrigwertigsten Bits des Bits-Holen-Registers 110G enthalten dann das Codewort.
  • Ein Gepacktes-Ausgabewort-Register 110I ist vorgesehen. Das Gepacktes-Ausgabewort-Register 110I kann beispielsweise über einen Blocklesebefehl einer Steuerung oder eines Zentralprozessors (CPU) zugegriffen/adressiert werden. Durch Lesen der Daten, die in den adressierten Räumen des Gepacktes-Ausgabewort-Registers 110I enthalten sind, wird das nächste komprimierte Datenwort von dem FIFO 160 zu der CPU 10 ausgegeben.
  • Es wird angemerkt, dass während dem Codiermodus der Datenfluss im Allgemeinen von dem Multiplexer 140 zu dem Bitstrompuffer 150 zu dem FIFO 160 fließt. In dem Decodiermo dus fließt der Datenfluss im Allgemeinen von dem FIFO 160 zu dem Bitstrompuffer 150 zu dem Multiplexer 140.
  • CODIERMODUS
  • Im Codiermodus werden Daten in das Steuerregister 110E geschrieben, um den FIFO-Unterbrechungspegel und das Unterbrechungs-Freigabebit zu setzen. Das Codier/Decodierbit wird auf Codieren gesetzt. Daten, die zu codieren sind, werden in das Bits-Legen-Coderegister 110B geladen. Diese Daten bestehen aus Datenwörtern variabler Länge. Die Steuerung 130 bewirkt, dass der Multiplexer 140 die gültigen Bits von dem Bits-Legen-Coderegister 110B auswählt, zum Lesen der gültigen Bits von dem Datenwort fester Länge in den Bitstrompuffer 150.
  • Sobald alle Bits des Bitstrompuffers 150 geladen sind, werden die Inhalte derselben in das Zuerst-Hinein-Zuerst-Hinaus-(FIFO)Register 160 verschoben. Der FIFO-Registerblock 160 ist einem Zähler 170 zugeordnet, der die Anzahl von 32 Bitwörtern zählt, die zu jedem bestimmten Zeitpunkt in dem FIFO-Register 160 enthalten sind. Der Zählwert des Zählers 170 wird in dem FIFO-Pegelregister 110C als FIFO-Pegeldaten gespeichert. Diese Daten können durch die CPU 10 verwendet werden, um zu bestimmen, ob die Daten in dem FIFO 160 gelesen oder geschrieben werden oder nicht. Beispielsweise könnte die CPU 10 das FIFO-Pegelregister abfragen, und wenn die FIFO-Pegeldaten, die in dem FIFO-Pegelregister 160 gespeichert sind, den FIFO-Unterbrechungspegeldaten entsprechen, die in dem Steuerregister 110E gespeichert sind, abhängig von der Funktionsweise, könnte die CPU bewirken, dass Daten von dem FIFO 160 gelesen werden oder in denselben geschrieben werden. Daten können auch von dem FIFO 160 gelesen werden oder in denselben geschrieben werden, wo der Wert des Zählers 170 den Inhalten der FIFO-Unterbrechungspegeldaten entspricht, die in dem Steuerregister 110E gespeichert sind. In diesem Fall bewirkt die Unterbrechungssteuerung 180, dass ein Unterbrechungssignal an die CPU 10 gerichtet wird, um anzuzeigen, dass es für die CPU Zeit ist, die Inhalte von/in dem FIFO-Register 160 zu lesen (während dem Codiermodus) oder zu schreiben (während dem Decodiermodus).
  • 5 zeigt ein Flussdiagramm, das das Codierverfahren der vorliegenden Erfindung darstellt. Mit Bezugnahme auf 2 und 5 wird angemerkt, dass das Bits-Legen-Längenregister 110A adressiert wird, um zu bewirken, dass ein Codewort beispielsweise von dem Bits-Legen-Coderegister 110B geladen wird (500). Das Codewort hat eine variable Länge und kann das Ergebnis eines Entropiecodierungsprozesses sein. Das Bits-Legen-Coderegister 110B hat eine feste Anzahl von Bits (Länge). Die Länge des Codeworts variabler Länge ist in dem Bits-Legen-Längenregister 110A gespeichert. Die Daten des Codeworts variabler Länge, die in das Bits-Legen-Coderegister 110B geladen sind, erfordern eventuell nicht alle verfügbaren Speicherbits des Bits-Legen-Coderegisters 110B. Sobald die Daten des Codeworts variabler Länge in das Bits-Legen-Coderegister 110B geladen sind, können dieselben alle verfügbaren Bits des Bits-Legen-Längenregisters 110A besetzen oder nicht. Das Bits-Legen-Coderegister 110B ist beispielsweise 16 Bits lang und ein Codewort variabler Länge von 4 Bits wird in das Bits-Legen-Coderegister 110B geladen. Die 4 Bits des Bits-Legen-Coderegisters 110B, die die Daten des Codeworts variabler Länge tatsächlich speichern, werden als gültige Bits bezeichnet. Die Anzahl von gültigen Bits von dem Bits-Legen-Coderegister 110B wird dann bestimmt (501) durch Bezugnahme auf die Datenwerte, die vorher in dem Bits-Holen-Register 110G gespeichert waren. Diese Bestimmung wird über die Steuerung 130 durchgeführt. Es ist jedoch möglich, dass eine solche Bestimmung durch die CPU 10 ausgeführt wird. Es wird dann bestimmt, ob alle gültigen Bits in verbleibende offene Bits des Bitstrompuffers 150 passen (502). Falls dies der Fall ist, werden diese gültigen Bits in verbleibende offene Bits des Bitstrompuffers 150 geladen (503) und nachfolgend als Datenwörter fester Länge ausgelesen (511).
  • Falls die gültigen Bits nicht in den Bitstrompuffer (150) passen, wird alternativ bestimmt, ob eines der gültigen Bits in den Bitstrompuffer 150 passt (504). Wo einige der gültigen Bits in den Bitstrompuffer 150 passen, werden dieselben (erster Satz von teilweise gültigen Bits) in den Bitstrompuffer 150 geladen (505), um alle verfügbaren Bits des Bitstrompuffers 150 zu füllen. Die Bitstrompufferinhalte werden dann durch ein Zuerst-Hinein-Zuerst-Hinaus-(FIFO)Register 160 (506) ausgelesen. Der Bitstrompuffer 150 ist dann frei von jeglichen Daten und der zweite Satz von teilgültigen Bits wird in den Bitstrompuffer 150 geladen (507). Dieser Prozess ist in 7 dargestellt, der nachfolgend näher erörtert wird.
  • Wo keines der gültigen Bits in den Bitstrompuffer passt, weil derselbe bereits voll mit Daten ist, werden die Inhalte des Bitstrompuffers 150 in den FIFO 160 geladen (508). Falls der FIFO 160 voll ist (509), werden die Inhalte desselben geleert (510). Der FIFO 160 ist einem Zähler 170 zugeordnet. Der Zähler 170 behält einen Zählwert von beispielsweise der Anzahl von 32 Bitwörtern bei, die tatsächlich in dem FIFO 160 geladen sind. Wenn der Zählwert des Zählers 170 dem FIFO-Unterbrechungspegelwert entspricht, der in dem Steuerregister 110C gespeichert ist, bewirkt die Unterbrechungssteuerung 180, dass eine Unterbrechung erzeugt wird und an die CPU 10 gerichtet wird. Die CPU 10 wird wiederum eine vorbestimmte Anzahl von Wörtern von dem FIFO 160 auslesen. Dies macht Raum in dem FIFO 160 verfügbar, zum Aufnehmen zusätzlicher Codewortdaten von dem Bitstrompuffer 150.
  • DECODIERMODUS
  • 6 zeigt ein Flussdiagramm, das das Decodierverfahren der vorliegenden Erfindung darstellt. In dem Decodiermodus werden Daten in das Steuerregister 110E geschrieben, um den FIFO-Unterbrechungspegel und das Unterbrechungsfreigabebit zu setzen. Das Codier/Decodierbit wird auf Decodieren gesetzt. Das Bits-Holen-Register 110G wird adressiert, um zu bewirken, dass ein Datenwort fester Länge beispielsweise in den FIFO 160 geladen wird. Der Bitstrompuffer 150 empfängt ein Datenwort fester Länge von dem FIFO 160. Das Datenwort fester Länge besteht aus mehreren Codewörtern variabler Länge. Ein Codewort variabler Länge wird von dem Bitstrompuffer 150 ausgelesen, gemäß Datenlängeninformationen, die in dem Bits-Holen-Register 110G gespeichert sind. Der Multiplexer 140 leitet dann das Codewort variabler Länge zu dem Bits-Holen-Register 110G, von wo aus es dann als ein Codewort fester Länge ausgelesen wird. Der Betrieb des Multiplexers 140, des Bitstrompuffers 150 und des FIFO 160 werden durch die Steuerung 130 gemäß Daten gesteuert, die in dem Registerblock 110 gespeichert sind. Sobald alle Codewörter variabler Länge von dem Codewort fester Länge, das in den Bitstrompuffer 150 geladen ist, ausgelesen wurden, wird ein weiteres Codewort fester Länge von dem FIFO 160 wiedergewonnen und in den Bitstrompuffer 150 geladen.
  • Der FIFO 160 ist beispielsweise ein 32 Bit mal 16 Wort FIFO-Register. Der Zähler 170 behält einen Zählwert der Anzahl von Datenwörtern bei, die zu einem bestimmten Zeitpunkt in dem FIFO 160 gespeichert sind, und speichert diesen Wert in dem FIFO-Pegelregister 110C. Wenn der Wert, der in dem FIFO-Pegelregister 110C gespeichert ist, einem FIFO-Unterbrechungspegelwert entspricht, der in dem Steuerregister 110 gespeichert ist, erzeugt die Unterbrechungssteuerung 180 ein Unterbrechungssignal. Dieses Unterbrechungssignal wird an die CPU 10 gerichtet, diese antwortet durch Bewirken, dass zusätzliche Daten fester Länge in den FIFO 160 geladen werden.
  • 7 stellt dar, wie gültige Bits von Codewörtern variabler Länge während den Codiermodusoperationen der vorliegenden Erfindung aus dem Bits-Legen-Coderegister 110B ausgelesen und in den Bitstrompuffer 150 geladen werden. 7 zeigt auch, wie Codewörter fester Länge aus dem Bitstrompuffer 150 ausgelesen werden und in das Bits-Legen-Coderegister 110B geladen werden, während den Codiermodus operationen der vorliegenden Erfindung. Der Bitstrompuffer 150A zeigt den Status des Bitstrompuffers 150, nachdem gültige Bits der Codewörter variabler Länge, die einen ersten Teildatensatz umfassen, die verfügbaren Bits des Bitstromregisters 150 vollständig gefüllt haben. Der Bitstrom 150B zeigt den Status des Bitstrompuffers 150, nachdem ein zweiter Teilsatz der Codewörter variabler Länge in den Bitstrompuffer 150 geladen wurde.
  • Der Anfangszustand des Bitstrompuffers 150 ist frei und alle Bits sind verfügbar, um Daten aufzunehmen. Es wird angemerkt, dass die Darstellung in 7 den Bitstrompuffer 150 als ein 16-Bit-Register zeigt. Bei einem bevorzugten Ausführungsbeispiel ist der Bitstrompuffer 150 jedoch 32 Bits lang. Es ist klar, dass der Bitstrompuffer 150 jede Länge aufweisen kann.
  • Bezüglich der Codiermodusoperationen ist ersichtlich, dass die gültigen Bits 701704 eines ersten Codeworts 700 in die höchstwertigsten vier (4) Bits des Bitstrompuffers 150 geladen werden, die verfügbar sind. Nachfolgend werden die gültigen Bits 801806 des Codeworts 800 in die nächsten höchstwertigsten Bits des Bitstrompuffers 150A geladen, die verfügbar sind. Als nächstes werden die gültigen Bits 901903 des Codeworts 900 in die nächsten höchstwertigsten Bits des Bitstrompuffers 150A geladen, die verfügbar sind. Im Fall des Codeworts 1000 gibt es sechs gültige Datenbits 10011007. Der Bitstrompuffer 150A hat jedoch nur drei (3) verfügbare Bits, die zum Aufnehmen von Daten verbleiben. In diesem Fall werden die Bits 10011003 in die verbleibenden verfügbaren Bits des Bitstrompuffers 150 geladen. Nachfolgend werden die Inhalte des Bitstrompuffers 150A ausgelesen und in dem FIFO 160 gespeichert. Der Bitstrompuffer 150 ist dann frei (150B) und offen, um zusätzliche Datenbits aufzunehmen. Die verbleibenden Bits 10041006 werden dann in die höchstwertigsten Bits des Bitstrompuffers 150B geschrieben. Dies wird fortgesetzt, bis alle verfügbaren Bits des Bitstrompuffers 150 mit gültigen Code wortdaten geladen sind, oder es keine weiteren Codewortdaten zum Laden gibt.
  • In dem Fall von Decodieroperationen werden Codewörter variabler Länge 701704 von dem Bitstrompuffer 150A ausgelesen und in das Bits-Legen-Coderegister 110B geladen. Das Bits-Legen-Coderegister 110B wird dann ausgelesen und gelöscht. Die Codewörter variabler Länge 801806 werden dann von dem Bitstrompuffer 150A ausgelesen und in das Bits-Legen-Coderegister 110B geladen. Dies wird fortgesetzt, bis alle Codewörter variabler Länge aus dem Bitstrompuffer 150A ausgelesen sind. Wenn die Codewörter variabler Länge 10011003 ausgelesen sind und in das Bits-Legen-Coderegister 110B geladen sind, wird erkannt, dass diese Bits nur ein Teilsegment des vollen Codeworts sind. In diesem Fall wird das Bits-Legen-Coderegister 110B nicht unmittelbar ausgelesen und gelöscht. Es wird jedoch ein anderes Wort variabler Länge in den Bitstrompuffer 150B geschrieben. Das zweite Segment des Codeworts variabler Länge, die Bits 10041006, werden dann aus dem Bitstrompuffer 150B ausgelesen und in das Bits-Legen-Register 110B geladen, das dann ausgelesen wird und von Daten gelöscht wird.
  • Obwohl das Bitstromregister 150 hierin als 16-Bit-Register dargestellt ist, wird angemerkt, dass es als Register jeder Größe implementiert werden kann, wie es für die spezifischen Zwecke geeignet ist, einschließlich, aber nicht beschränkt auf, beispielsweise ein 8-Bit-Register, ein 32-Bit-Register oder ein 64-Bit-Register. Gleichartig dazu können der Multiplexer 140 und der FIFO 160 in jeder Bitlänge implementiert werden, die gewünscht wird, oder als am geeignetsten für die entsprechende Anwendung bestimmt wird.
  • Das Verfahren der vorliegenden Erfindung kann in Hardware, Software, Firmware oder einer Kombination derselben implementiert werden. Bei den bevorzugten Ausführungsbeispielen ist das Verfahren in Software oder in Firmware implemen tiert, die in einem Speicher gespeichert ist, und die durch ein geeignetes Befehlsausführungssystem ausgeführt wird. Falls dasselbe in Hardware implementiert ist, wie bei einem alternativen Ausführungsbeispiel, kann das Verfahren mit jeder oder einer Kombination der folgenden Technologien implementiert sein, die alle in der Technik gut bekannt sind: eine diskrete Logikschaltung mit Logikdaten zum Implementieren von Logikfunktionen auf Datensignale hin, eine anwendungsspezifische integrierte Schaltung (ASIC) mit entsprechenden Kombinationslogikdaten, ein programmierbares Gatterarray (PGA), ein feldprogrammierbares Gatterarray (FPGA), usw.
  • Die Flussdiagramme von 5 und 6 zeigen die Architektur, Funktionalität und den Betrieb einer möglichen Implementierung des Codierungs- und Decodierungsverfahrens der vorliegenden Erfindung. Diesbezüglich stellt jeder Block ein Modul, ein Segment oder einen Abschnitt des Codes dar, der einen oder mehrere ausführbare Befehle zum Implementieren der spezifizierten logischen Funktion(en) umfasst. Es sollte auch angemerkt werden, dass bei einigen alternativen Ausführungsbeispielen die Funktionen, die in den Blöcken angemerkt werden, außerhalb der Reihenfolge auftreten können, die in 5 oder 6 angemerkt ist. Beispielsweise können zwei Blöcke, die in 5 oder 6 aufeinanderfolgend gezeigt sind, in der Tat im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal in umgekehrter Reihenfolge ausgeführt werden, abhängig von der betreffenden Funktionalität, wie es oben erörtert ist.
  • Es sollte betont werden, dass die oben beschriebenen Ausführungsbeispiele der vorliegenden Erfindung insbesondere jegliche „bevorzugte" Ausführungsbeispiele lediglich mögliche Beispiele von Implementierungen sind und lediglich für ein klares Verständnis der Prinzipien der Erfindung beschrieben sind.

Claims (4)

  1. Ein Codierer/Decodierer, der konfiguriert ist, um abwechselnd in einem ersten Betriebsmodus und einem zweiten Betriebsmodus zu arbeiten, wobei der Codierer/Decodierer folgende Merkmale aufweist: ein Datenregister (110), das eine vorbestimmte Anzahl von Bits umfasst; ein Bitstromregister (150), das eine vorbestimmte Anzahl von Bits umfasst; einen Multiplexer (140); ein Zuerst-Hinein-Zuerst-Hinaus-(FIFO-)Register (160), das eine Mehrzahl von verfügbaren Mehrbitregistern umfasst; eine Unterbrechungssteuerung (180) zum Erzeugen eines Unterbrechungssignals; wobei das Datenregister (110) konfiguriert ist, um während dem ersten Betriebsmodus ein Codewort variabler Länge zu empfangen und zu speichern, das gültige Datenbits umfasst, die durch einen Entropiecodierungsalgorithmus komprimiert werden, und um während dem zweiten Betriebsmodus Daten, die ein Codewort variabler Länge umfassen, das durch einen Entropiedecodierungsalgorithmus dekomprimiert werden soll, zu empfangen und zu speichern; wobei das Bitstromregister (150) konfiguriert ist, um während dem ersten Betriebsmodus Daten zu empfangen und während dem zweiten Betriebsmodus ein codiertes Datenwort fester Länge von dem FIFO-Register (160) zu empfangen; wobei der Multiplexer konfiguriert ist, um während dem ersten Betriebsmodus zumindest einen Teil der gültigen Bits von dem Datenregister (110) in die höchstwertigsten nichtverwendeten Bits in dem Bitstromregister (150) zu laden, und während dem zweiten Betriebsmodus ein Codewort variabler Länge gemäß einem ausgewählten Wert, der in den Codierer/Decodierer geschrieben ist, von dem Bitstromregister (150) in das Datenregister (110) zu laden; wobei das FIFO-Register (160) während dem ersten Betriebsmodus konfiguriert ist, um den Inhalt des Bitstromregisters (150) zu empfangen, wenn die vorbestimmte Anzahl von Bits des Bitstromregisters (150) mit einem Teil der gültigen Bits von Daten geladen sind und der Rest der gültigen Bits geladen werden muss; wobei das FIFO-Register (160) während dem zweiten Betriebsmodus konfiguriert ist, um Daten zu empfangen, die aus dem codierten Datenwort fester Länge bestehen, wobei das Datenwort das Codewort variabler Länge umfasst; wobei die Unterbrechungssteuerung (180) konfiguriert ist, um während dem ersten Betriebsmodus ein Auslesen von Daten von dem FIFO-Register (160) auszulösen; und wobei die Unterbrechungssteuerung (180) ferner konfiguriert ist, um während dem zweiten Betriebsmodus das Schreiben des codierten Datenworts fester Länge in das FIFO-Register (160) auszulösen.
  2. Ein Codierer/Decodierer gemäß Anspruch 1, bei dem der Multiplexer (140) ein Barrel-Schieberegister umfasst.
  3. Ein Codierer/Decodierer gemäß Anspruch 1, der ferner einen Zähler (170) zum Zählen der Anzahl von Mehrbitwörtern umfasst, die in dem FIFO-Register (160) gespeichert sind.
  4. Ein Codierer/Decodierer gemäß Anspruch 3, bei dem die Unterbrechungssteuerung (180) das Unterbrechungssignal erzeugt, wenn der Zähler (170) einen vorbestimmten Unterbrechungswert erreicht.
DE60110493T 2000-05-04 2001-02-07 Entropie Kodierer/Dekodierer zur schnellen Datenkompression und -dekompression Expired - Lifetime DE60110493T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/565,015 US6621428B1 (en) 2000-05-04 2000-05-04 Entropy codec for fast data compression and decompression
US565015 2000-05-04

Publications (2)

Publication Number Publication Date
DE60110493D1 DE60110493D1 (de) 2005-06-09
DE60110493T2 true DE60110493T2 (de) 2006-01-05

Family

ID=24256852

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60110493T Expired - Lifetime DE60110493T2 (de) 2000-05-04 2001-02-07 Entropie Kodierer/Dekodierer zur schnellen Datenkompression und -dekompression

Country Status (4)

Country Link
US (1) US6621428B1 (de)
EP (1) EP1154575B1 (de)
JP (1) JP2002009625A (de)
DE (1) DE60110493T2 (de)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6781589B2 (en) * 2001-09-06 2004-08-24 Intel Corporation Apparatus and method for extracting and loading data to/from a buffer
WO2004036433A1 (ja) * 2002-10-21 2004-04-29 Renesas Thchnology Corp. 半導体集積回路装置
JP4336678B2 (ja) * 2003-09-04 2009-09-30 株式会社日立超エル・エス・アイ・システムズ 半導体装置
US7161507B2 (en) * 2004-08-20 2007-01-09 1St Works Corporation Fast, practically optimal entropy coding
WO2007002468A2 (en) * 2005-06-23 2007-01-04 1Stworks Corporation Modeling for enumerative encoding
US7728742B2 (en) * 2008-09-30 2010-06-01 Apple Inc. Method and apparatus for compressing and decompressing data
US7800519B2 (en) * 2008-09-30 2010-09-21 Apple Inc. Method and apparatus for compressing and decompressing data
US8194755B2 (en) * 2009-03-06 2012-06-05 Himax Media Solutions, Inc. Bit stream buffer controller and its method
CN104011660B (zh) * 2011-12-22 2017-03-01 英特尔公司 用于处理位流的基于处理器的装置和方法
US9606961B2 (en) * 2012-10-30 2017-03-28 Intel Corporation Instruction and logic to provide vector compress and rotate functionality
EP2940575B1 (de) * 2014-05-02 2018-05-09 Nxp B.V. Steuerungsschaltungen, Datenschnittstellenblöcke und Verfahren zur Übertragung von Daten

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4376933A (en) 1979-02-22 1983-03-15 Xerox Corporation Circuit for compacting data
US4360840A (en) 1980-05-13 1982-11-23 Am International, Inc. Real time data compression/decompression scheme for facsimile transmission system
US4963867A (en) * 1989-03-31 1990-10-16 Ampex Corporation Apparatus for packing parallel data words having a variable width into parallel data words having a fixed width
US5237701A (en) * 1989-03-31 1993-08-17 Ampex Systems Corporation Data unpacker using a pack ratio control signal for unpacked parallel fixed m-bit width into parallel variable n-bit width word
JPH03106127A (ja) 1989-09-20 1991-05-02 Fujitsu Ltd 可変長符号化回路
US5499382A (en) 1993-09-20 1996-03-12 Nusinov; Eugene B. Circuit and method of bit-packing and bit-unpacking using a barrel shifter
JP2715871B2 (ja) * 1993-12-20 1998-02-18 日本電気株式会社 可変長符号化方法

Also Published As

Publication number Publication date
EP1154575A1 (de) 2001-11-14
JP2002009625A (ja) 2002-01-11
EP1154575B1 (de) 2005-05-04
US6621428B1 (en) 2003-09-16
DE60110493D1 (de) 2005-06-09

Similar Documents

Publication Publication Date Title
DE19635251C2 (de) Verfahren und Apparat zur Komprimierung beliebiger Daten
DE4437790B4 (de) Verfahren und Vorrichtung zur Verwendung von endlichen Automaten zur Durchführung einer Kanalmodulation und einer Fehlerkorrektur und einer Entropie-Kodierung
DE3606869C2 (de) Vorrichtung zur Datenkompression
DE69932959T2 (de) Verlustfreies Kodierungs- und Dekodierungsverfahren
DE60035171T2 (de) Verfahren und Schaltungen zum schnellen Auffinden des minimalen / maximalen Wertes in einer Menge von Zahlen
DE2264090C3 (de) Datenverdichtung
DE69735680T2 (de) Verfahren zur Bilddecodierung
DE60110493T2 (de) Entropie Kodierer/Dekodierer zur schnellen Datenkompression und -dekompression
DE2614916C2 (de) Konverter zur Codeumwandlung
DE69925189T2 (de) Vorrichtung zur Dekodierung eines Mehrkanalaudiobitstroms
DE102011056563A1 (de) Datenkompressionsvorrichtungen, Betriebsverfahren dafür und Datenverarbeitungsgeräte einschließlich derselben
DE19521643A1 (de) Bildsichtsystem mit einem Niedrigenergie-Datenspeicher-Teilsystem mit Datenkomprimierungsfähigkeit und Verfahren zu dessen Betrieb
DE3800634A1 (de) Bildinformation-kompressionsvorrichtung
EP2068448B1 (de) Verfahren und Anordnung zur arithmetischen Enkodierung und Dekodierung mit Verwendung mehrerer Tabellen
DE4314741A1 (de) Dekodierer-Architektur nach Huffman für eine höhere Betriebsgeschwindigkeit und reduzierten Speicherbedarf
DE19821727B4 (de) Vorrichtung und Verfahren zur Codierung mit variabler Länge
DE4429017A1 (de) Verfahren zum Codieren von Daten in einem Datenkompressionssystem, Kompressions/Dekompressionsverfahren sowie Dekompressionssystem zum Dekomprimieren von komprimierten Daten
DE19634600A1 (de) Bildsignalkodiervorrichtung und zugehöriges Verfahren
DE69535392T2 (de) Vorrichtung zur Dekodierung von Codes mit variablen Lauflängen unter Verwendung einer relativen Adressierung
EP3624456A1 (de) Verfahren zur kompression und dekompression von bilddaten
DE69826971T2 (de) Übertragungssystem mit kodierer variabler länge
DE10024959B4 (de) Vorrichtung zum unidirektionalen oder bidirektionalen Austausch von Daten
DE69725280T2 (de) Kompressionsgerät mit arithmetischer Kodierung unter Verwendung eines kontextualen Models, das zu variablen Musterlängen in binären Bilddaten adaptiv ist
DE69737304T2 (de) Dekoder für Kodes variabler Länge
EP0752788A2 (de) Videocoder und -decoder

Legal Events

Date Code Title Description
8327 Change in the person/name/address of the patent owner

Owner name: HEWLETT-PACKARD DEVELOPMENT CO., L.P., HOUSTON, TE

8364 No opposition during term of opposition