Aufgabe der Erfindung ist es, ein
Blockdatenkompressionssystem, bestehend aus einer Kompressionseinrichtung
und einer Dekompressionseinrichtung, und ein Verfahren zur schnellen
Blockdatenkompression mit Multi-Byte-Suche zur optimalen Codierung
während
der Lernphase substitutiver Methoden zu entwickeln, bei dem in der
Länge begrenzte
und relativ kleine Teile der Eingabedatei unabhängig voneinander komprimiert
werden können,
wie dies bei Direktzugriftsspeichergeräten oder Telekommunikationsgeräten gefordert
ist, und die eine hohe Leistungsfähigkeit durch eine Reihe von
beschleunigenden Architekturstrukturen sowie Datenflußprinzipien,
beispielsweise ein hochgradiges Pipelining, erlauben.
Erfindungsgemäß wird die Aufgabe durch ein
Blockdatenkompressionssystem, bestehend aus einer Kompressionseinrichtung
und einer Dekompressionseinrichtung gelöst, wobei die Kompressionseinrichtung
einen Input-FIFO enthält,
um Eingangssymbole nach dem First-in-first-out Prinzip zu puffern,
und dieser Input FIFO mit einer Steuerungskomponente, einer Modellierungseinheit
verbunden ist, wobei diese Modellierungseinheit mit einem Trie-Wörterbuchspeicher,
einer Zero-Finder-Lookup-Tabelle, Suchkomponenten in Form einer
Vergleichseinheit, Speicherkomponenten in Form eines Literal-Wörterbuches und einer Codierungseinheit
verbunden ist. Die Codierungseinheit ist wiederum über eine
Ausrichtungseinheit mit einem Output-FIFO verbunden. Der Trie-Wörterbuchspeicher besteht
aus einer Vielzahl von Speicherstellen, wobei die Modellierungseinheit
parallel auf diesen zugreift, und das Wörterbuch höherer Ordnung bildet, das durch
eine Hash-Funktion adressiert wird, die aus den ersten Zeichen,
die im Input-FIFO enthalten sind, berechnet wird. Die Zero-Finder-Lookup-Tabelle dient
zur Vorausbestimmung ungenutzten Platzes im Wörterbuch höherer Ordnung, wobei die Modellierungseinheit
auf das Wörterbuch
höherer
Ordnung zugreift, um zu bestimmen, ob die im Input FIFO enthaltene
Zeichenkette durch einen beliebigen inneren oder externen Knoten,
der in diesem Wörterbuch existiert,
ersetzt werden kann. Die Vergleichseinheit führt dabei den parallelen Vergleich
mehrerer Zeichen durch, um die maximale Länge der Übereinstimmung zwischen dem
betreffenden Knoten in diesem Wörterbuch
und der Zeichenkette im Input-FIFO zu bestimmen. Das Literal-Wörterbuch bildet das Wörterbuch
niedriger Ordnung, wobei der Inhalt des Literal-Wörterbuches
zur Erzeugung der codierten Form für Zeichenketten der Länge 1 in
der Modellierungseinheit genutzt wird. Die Modellierungseinheit bestimmt,
ob das Ergebnis der parallelen Suche in der Vergleichseinheit oder
der Inhalt des Literal-Wörterbuches
als Ausgangsgröße der Modellierungseinheit
gewählt
wird. Die Modellierungseinheit führt
sowohl eine iterative parallele Suche durch, wenn ein oder mehrere
im Trie-Wörterbuchspeicher
enthaltene Knoten die Übereinstimmungslänge mit
der im Input-FIFO befindlichen Zeichenkette erhöhen, als auch ein Pipelining
der Ergebnisse zur Codierungseinheit, die kompakte Ausgangscodeworte
variabler Länge
erzeugt, die eine relative Darstellung der Ausgangswerte der Modellierungseinheit
verwendet, wobei die Ausgangscodeworte vom aktuellen Zustand der
Codierungseinheit abhängig
sind. Die Codierungseinheit enthält
Komponenten zum Pipelining dieses Ausgangscodewortes variabler Länge zur Ausrichtungseinheit,
die das Ausgangscodewort variabler Länge in ein an Bytegrenzen ausgerichtetes Codewort
umwandelt. Der Output-FIFO enthält
Komponenten zur temporären
Speicherung dieser an Bytegrenzen ausgerichteten Codeworte, bis
die spezifizierte Breite des Ausgangsbusses erreicht wird und ein
geeigneter Ausgabezeitpunkt vorliegt, um auf diese Weise einen Block
von nichtkomprimierten digitalen Eingabedaten mit Hilfe des Kompressionsprozesses
in einen komprimierten Datenstrom zur Ausgabe über den Ausgabebus des Output-FIFO
umzuwandeln.
Nach einer Ausbildung der Erfindung
enthält die
Modellierungseinheit Aktualisierungskomponenten zur Einfügung sowohl
der vorläufigen
als auch der endgültigen
Informationen in das Wörterbuch
höherer
Ordnung, die bewirken, daß die
aktuelle Zeichenkette am Ausgang des Input-FIFO den aktuellen Status
des Trie-Wörterbuchspeichers,
der das Wörterbuch
höherer
Ordnung enthält,
beeinflußt,
wobei die vorläufige
Information den Kompressionsprozeß für den Fall beschleunigt, daß das endgültige Update mit
dem vorläufigen
Update identisch ist und demzufolge dieses endgültige Update vermieden wird.
Es ist aber auch möglich, daß die Modellierungseinheit
Komponenten zur parallelen Aktualisierung des Literal-Wörterbuches
enthält,
wobei diese von einem einzelnen Zeichen am Ausgang des Input-FIFOS
bewirkt wird und dann stattfindet, wenn das Literal-Wörterbuch
nicht in der Lage ist, eine vorangegangene Codierung für das Zeichen
am Ausgang des Input-FIFOs zu finden, und der Trie-Wörterbuchspeicher
keinen Internen Knoten NODE findet, der mit der aus mehreren Zeichen
bestehenden Zeichenkette, die aktuell im Input-FIFO enthalten ist, übereinstimmt.
Sie kann aber auch Komponenten zur
parallelen Aktualisierung des Präfixes
des von der Codierungseinheit verwendeten Codewortes enthalten, wobei
dieses Präfix
durch die Codierungseinheit auf der Grundlage des internen Status
der Modellierungseinheit aktualisiert wird und auf der Anzahl unterschiedlicher
Codeworte beruht, die durch die Modellierungseinheit zur Codierungseinheit übertragen wurden.
Eine weitere Möglichkeit besteht darin, daß sowohl
die Modellierungseinheit als auch die Codierungseinheit Aktualisierungskomponenten
besitzen, die die hochkompakte Codierung von Ausgangscodeworten
durchführen
und in Form von Speicherkomponenten in der Modellierungseinheit
vorhanden sind, die auf den letzten vorhergehenden Internen Knoten
NODE verweisen, der im Trie-Wörterbuchspeicher
benutzt wurde, und daß das
Ausgangscodewort, das zur Codierungseinheit übertragen wurde als Differenz
des letzten vorangehenden genutzten Internen Knotens NODE und des
aktuellen, zu übertragenden
Knotens gebildet wird.
Die Modellierungseinheit, die Codierungseinheit,
die Ausrichtungseinheit und der Output-FIFO können aber auch Komponenten
zur Koordination des Parallelbetriebes mit unterschiedlichen und
unabhängigen
Codeworten enthalten und damit eine Pipeline, beginnend mit der
Modellierungseinheit, bilden, wobei diese Komponenten aus Speichern
in der Modellierungseinheit, der Codierungseinheit, der Ausrichtungseinheit
und dem Output-FIFO bestehen, die das Codewort vom Ausgang des vorangegangenen
Blockes enthalten und die das sich aus der Verarbeitung dieses Codewortes
innerhalb der jeweiligen Einheit ergebende modifizierte Codewort
während
des nächsten
Pipelineschrittes an die nächste Einheit
in der Kompressionskette übertragen.
Diese Pipeline ist dabei dergestalt organisiert, daß ein Stillstand
für die
Modellierungseinheit während
des Kompressionsvorgangs weitestgehend vermieden wird.
Nach einer Ausführungsform der Erfindung enthält die Dekompressionseinheit
zur Dekompression digitaler Datenblöcke als Bestandteil des gesamten
Datenkompressionssystems Komponenten zur Pufferung von Eingabe-Codeworten nach dem First-in-first-out-Verfahren,
wobei diese Eingabe-Codeworte
eine Codierung unterschiedlicher Länge für die ursprünglichen, nichtkomprimierten
Symbole fester Länge
repräsentieren.
Der Trie-Wörterbuchspeicher
und das Literal-Wörterbuch
sind dabei mit einer Modellierungseinheit, die Komponenten für das Zusammenwirken
mit dem aus mehr als einer Speicherposition bestehenden Trie-Wörterbuchspeicher
besitzt, verbunden, die ihrerseits zum einen über einen Output-FIFO, eine
Interface-Einheit,
einen Input-FIFO, eine Ausrichtungseinheit mit einer Decodierungseinheit
und zum anderen mit einem Blockpuffer und direkt mit der Decodierungseinheit
verbunden ist. Die Ausrichtungseinheit, die vom Input-FIFO gelieferte
und an Bytegrenzen ausgerichtete Information in eine Codewortdarstellung
variabler Länge umwandelt,
erzeugt ein Byte-organisiertes Datenformat für die Decodierungseinheit,
wobei sie Komponenten zum Empfang. von Codeworten variabler Länge und
zusätzlich
Komponenten zur Bestimmung der korrekten Länge des Präfixes, der Knotennummer, des
Knotentyps und der relativen Übereinstimmungslänge mit
dem im Trie-Wörterbuchspeicher existierenden
Knoten, der durch das Codewort beschrieben wird, oder umgekehrt
die korrekte Bitlänge des
Präfixes
und die relative Nummer des Einzelsymbols im Literal-Wörterbuch, enthält. Die
Decodierungseinheit enthält
Komponenten zum Zusammenwirken mit der Modellierungseinheit und
ermittelt auf der Basis des Inhaltes der internen Register der Modellierungseinheit,
des aktuellen Zustandes des Trie-Wörterbuchspeichers und aus dem
Codewort die richtige Knotennummer und die Position des ersten Symbols
sowie die absolute Übereinstimmungslänge, falls
das Codewort vom Node-Typ ist. Die Modellierungseinheit ist auch
parallel mit dem Literal-Wörterbuch
verbunden. Die Verbindung ist nötig, um
die durch das Literal-Wörterbuch
definierte Code-Substitution zu überfragen,
falls das Codewort vom Literal-Typ ist und eine Komponente zum Ausführen einer
Multibyte-Kopieroperation enthält,
die entweder ein früher
aufgetretenes Symbol oder eine Zeichenkette aus der ermittelten
Position im Blockpuffer oder Output-FIFO zu der aktuellen Position im Output-FIFO
kopiert, wobei der Output-FIFO Komponenten zur temporären Speicherung
dieser an Bytegrenzen ausgerichteten Codeworte enthält, bis
die spezifizierte Breite des Ausgangsbusses erreicht wird und ein
geeigneter Zeitpunkt vorliegt, um die Ergebnisse der Dekompression über die
Interface-Einheit zum Ausgangsspeicher zu übertragen.
Bei dieser Variante besitzt die Modellierungseinheit
Aktualisierungskomponenten, die sowohl vorläufige als auch endgültige Knoten
in den Trie-Wörterbuchspeicher
einfügen,
wobei die Knoten bewirken, daß die
aktuelle Zeichenkette im Ausgabespeicher oder dem entsprechenden
FIFO, die durch ein Feld Position gekennzeichnet ist, den aktuellen
Status des Trie-Wörterbuchspeichers
beeinflußt,
und wobei die vorläufige
Information, die vorher durch die Modellierungseinheit in den Trie-Wörterbuchspeicher geschrieben
wurde, den Verarbeitungsprozeß für den Fall
beschleunigt, daß die
endgültige
Aktualisierung mit der vorläufigen
identisch ist und demzufolge die endgültige Aktualisierung vermieden
wird.
Es ist aber auch möglich, daß die Modellierungseinheit
Aktualisierungskomponenten für
ein paralleles Update des Literal-Wörterbuches besitzt, das von
einem einzelnen, über
den entsprechenden Input-FIFO adressierten Zeichen ausgelöst wird,
wobei der Aktualisierungsprozeß stattfindet,
wenn die Modellierungseinheit feststellt, daß kein interner Knoten im Trie-Wörterbuchspeicher durch das
aktuelle Codewort genutzt wird, das durch die Decodierungseinheit
geliefert wird.
Weiterhin ist möglich, daß die Modellierungseinheit
Aktualisierungskomponenten für
eine parallele Aktualisierung des Präfixes des von der Decodierungseinheit
verwendeten Codewortes besitzt, wobei das Präfix, das durch die Decodierungseinheit
auf der Grundlage des internen Status der Modellierungseinheit und
der Anzahl der unterschiedlichen Codeworte aktualisiert wurde, durch
die Modellierungseinheit zur Decodierungseinheit übertragen wird,
wobei die Decodierungseinheit einen selbstbalancierenden Präfix-Baum
verwendet und dieser Baum dem am häufigsten verwendeten Typ von
Codeworten das kürzeste
Präfix
zuordnet.
Letztlich ist es aber auch möglich, daß der Input-FIFO,
die Ausrichtungseinheit, die Decodierungseinheit, die Modellierungseinheit
und der Output-FIFO Komponenten zur Koordination des Parallelbetriebes
mit unterschiedlichen und unabhängigen Codeworten
enthalten und damit ein Pipelining, beginnend bei der Ausrichtungseinheit,
ausgeführt
wird, wobei diese Komponenten aus Speichern in der Modellierungseinheit,
der Decodierungseinheit, der Ausrichtungseinheit und dem Output-FIFO
bestehen, die das Codewort vom Ausgang des vorangegangenen Blockes
für den
nächsten
Bearbeitungsschritt speichern. Dabei ist die Pipeline so organisiert,
daß das aus
der Verarbeitung des aktuellen Codewortes innerhalb der jeweiligen
Einheit ergebende modifizierte Codewort während des nächsten Pipelineschrittes an die
nächste
Einheit in der Kompressionskette übertragen wird. Durch diese
Organisation der Pipelinekette wird ein Stillstand für die Modellierungseinheit während des
Dekompressionsvorgangs vermieden.
Das Verfahren zur Wandlung eines
Blocks von Eingabesymbolen in verschlüsselte Ausgabecodeworte variabler
Länge in
einem Datenblock-Kompressionssystem,
wird erfindungsgemäß dadurch
gelöst,
daß die
Eingangssymbole in einen Input-FIFO übertragen werden, daß auf der
Grundlage der ersten beiden Symbole am Ausgang des Input-FIFO eine
Hash-Adresse berechnet wird, die dazu benutzt wird, parallel im
Trie-Wörterbuchspeicher
und in der Zero-Finder-Lookup-Tabelle zu suchen, um schnell feststellen
zu können,
ob ein Interner Knoten oder ein Blattknoten im Trie-Wörterbuchspeicher
existiert. Wenn die Suche im Trie-Wörterbuchspeicher einen Internen
Knoten feststellt, der in mehr als einem Zeichen mit der Zeichenkette
im Input-FIFO übereinstimmt,
wird die Multi-Byte-Suche iterativ fortgesetzt, bis die längste Übereinstimmung
der Eingangszeichenkette im Input-FIFO mit existierenden Knoten des
Trie-Wörterbuchspeichers
gefunden ist. Dieser Prozeß wird
wiederholt, bis kein übereinstimmender Knoten
mehr gefunden wird. Die Knotennummer wird in relativer Form bezüglich des
letzten gebildeten Knotens codiert und das Codewort wird entweder
als Interner Knoten oder als Blattknoten im Trie-Wörterbuchspeicher
identifiziert. Die zur Codierungseinheit übertragene Übereinstimmungslänge wird
in differentieller Form bezüglich
des letzten bei der Suche durchlaufenen Knotens berechnet. Wenn
die Suche im Trie-Wörterbuchspeicher
keinen Internen Knoten feststellt, der in mehr als einem Zeichen
mit der Zeichenkette im Input-FIFO übereinstimmt, wird über das
Literal-Wörterbuch
festgestellt, ob das Codewort durch ein Bekanntes Literal und damit
durch den Code variabler Länge
dargestellt werden kann, der dem Zeichen bei seinem früheren Auftreten
zugewiesen wurde. Anderenfalls wird das Zeichen als Neues Literal
identifiziert und wird in der Originalform dargestellt, wenn es
noch nicht im Literal-Wörterbuch
enthalten ist. Jedem Codewort-Typ wird ein Präfix variabler Länge entsprechend
dem verwendeten Typ des Codeworts zugewiesen, wobei dieses Präfix über einen
selbstbalancierenden Präfix-Baum
auf der Grundlage der kumulierten, aktuellen Zählwerte für die unterschiedlichen Codewort-Typen
ermittelt wird. Dabei wandelt sich das sich ergebende Codewort variabler
Länge über eine
Ausrichtungsoperation in ein an Bytegrenzen ausgerichtetes Ausgabeergebnis um,
die ausgerichteten Ausgabe-Codeworte im Output FIFO werden gespeichert
und dort zu Gruppen zusammenfaßt,
um eine effiziente Schreiboperation auf das endgültige Speichermedium hinsichtlich
Zeitpunkt und Busbreite durchführen
zu können.
Auf diese Weise wird aus einem nicht komprimierten Block von Eingangssymbolen
eine komprimierte Darstellung in Form eines Blocks von Ausgabe-Codeworten erzeugt.
Dabei ist es vorteilhaft, wenn sowohl
für den Trie-Wörterbuchspeicher
als auch für
das Literal-Wörterbuch
dynamische Wörterbücher verwendet werden
und wenn zusätzliche
Schritte zur Aktualisierung des Trie-Wörterbuchspeichers und des Literal-Wörterbuchs
enthalten sind. Es wird eine Datenstruktur im Trie-Wörterbuchspeicher erzeugt, bei
der Interne Knoten und Blattknoten nebeneinander im selben Wörterbuch
existieren. Die Blattknoten beginnen dabei bei 1 und werden aufwärts gezählt, die
Internen Knoten beginnen mit der höchsten Zahl und werden abwärts gezählt, wobei
beide Knotenarten nicht miteinander kollidieren. Wenn die Suche
im Trie-Wörterbuchspeicher
einen Internen Knoten feststellt, der in mehr als einem Zeichen
mit der Zeichenkette im Input-FIFO übereinstimmt, jedoch in der
exakten Länge
mit jedem in dem Suchpfad vorhandenen Knoten nicht übereinstimmt,
wird dieses Wörterbuch
durch Erzeugen eines neuen Internen Knotens aktualisert. Der Zählerstand
für die
Zahl der Internen Knoten wird um 1 erniedrigt, und es wird ein neuer Blattknoten
gebildet. Diesem neuen Blattknoten wird als Tiefe der Wert der Maximallänge dieser
Zeichenkette zugewiesen und es erfolgt abschließend ein Erhöhen des
Endknotenzählers
um 1. Wenn die Suche im Trie-Wörterbuchspeicher
einen Internen Knoten feststellt, der in mehr als einem Zeichen
mit der Zeichenkette im Input-FIFO übereinstimmt und gleichzeitig
in der exakten Länge
mit einem im Suchpfad vorhandenen Knoten übereinstimmt, werden Schritte zur
Aktualisierung des erreichten Knotens durchgeführt, wobei dieser erreichte
Knoten in seinem Positionsfeld den aktuellen Positionszeiger im
Eingabedatenspeicher erhält.
Dieses Verfahren wird ebenfalls ausgeführt wird, wenn es sich bei
dem Internen Knoten nicht um einen Blattknoten handelt und in diesem Fall
Schritte zur Erzeugung eines neuen Blattknotens erfolgen, wobei
dieser neue Blattknoten in seinem Positionsfeld den aktuellen Positionszeiger
im Eingabedatenspeicher erhält,
wobei abschließend
ein Hochzählen
des Endknotenzählers
erfolgt. Wenn die Suche im Trie-Wörterbuchspeicher höherer Ordnung keinen
Internen Knoten feststellt, der in mehr als einem Zeichen mit der
Zeichenkette im Input-FIFO übereinstimmt,
wird ein neuer Blattknoten in diesem Wörterbuch erzeugt, wobei dieser
neue Blattknoten die maximale Länge
erhält.
Abschließend
erfolgt dann ein Hochzählen
des Endknotenzählers.
Das Verfahren wird auch ausgeführt,
wenn das Eingabezeichen am Ausgang des Input-FIFO nicht im Literal-Wörterbuch
enthalten ist, wobei das Verfahren die Schritte zur Aktualisierung
des Literal-Wörterbuches beinhaltet,
indem dem Eintrag, der dem Eingangssymbol entspricht, die Anzahl
der bisher in diesem Block empfangenen neuen Symbole zugewiesen wird.
Schließlich
wird der Zähler
für die
bekannten Symbole um eins erhöht.
Eine Ausbildungsform des Verfahrens
sieht vor, daß zur
Decodierung des ursprünglichen
Datenblocks aus einem codierten Block von Codeworten die in Bytes
ausgerichteten Codeworte in den Input-FIFO eingetragen werden, daß der Input-FIFO diese
byteausgerichteten Codeworte fester Länge in solche variabler Länge rückkonvertiert
und diese als Eingangsgröße für den Decodierungsschritt
zur Verfügung
stellt, indem diese Codeworte auf der Grundlage des in dem betreffenden
Codewort enthaltenen dynamischen Präfixes einem Neuen Literal,
einem Bekannten Literal, einem Internen Knoten oder einem Blattknoten
zugeordnet werden. Dieses Verfahren wird ausgeführt, wenn das Codewort als
Neues Literal erkannt wird und ein einzelnes Symbol im Codewort
vorhanden ist, das direkt dem Output-FIFO zugeleitet wird, oder
wenn das Codewort als Bekanntes Literal erkannt wird und ein einzelnes
Symbol vom Codewort über
das Literal-Wörterbuch
rückübersetzt
und dem Output-FIFO zugeleitet wird, oder wenn das Codewort vom
Typ her entweder ein Interner Knoten oder ein Blattknoten im Trie-Wörterbuchspeicher
ist. Dabei liest das Verfahren aus dem Trie-Wörterbuchspeicher den Vater-Knoten
des betreffenden Internen Knotens, um die frühere Blockposition zu bestimmen,
an der eine ähnliche
Zeichenkette im Output-FIFO existiert sowie die Knotentiefe an den
Decoder zurückliefert,
der die Anzahl der für die
Darstellung der relativen Länge
benötigten
Bits und den eigentlichen relativen Wert selbst berechnet. Die Berechnung
erfolgt, indem diese relative Länge zum
vorbezeichneten Vater-Knoten des Internen Knotens addiert wird,
und auf diese Weise die Parameter für die Durchführung der/des
stattfindenden Kopier-Schrittes) für mehrere Zeichen ermittelt
werden. Dieser Kopiervorgang enthält alle Schritte, um von der
Position, die durch das Positionsfeld dieses decodierten Internen
Knotens beschrieben wird, so viele Symbole in den Output-FIFO zu
kopieren, wie durch die vorbezeichnete absolute Länge der
Kopie bestimmt ist. Dabei werden alle diese Schritte wiederholt,
bis keine weiteren Codeworte zu decodieren sind und auf diese Weise
der ursprüngliche
Symbolblock aus dem komprimierten Block von Codeworten wiederhergestellt
wird.
Es ist aber auch möglich, die
dynamischen Wörterbücher sowohl
für den
Trie-Wörterbuchspeicher
als auch für
das Literal-Wörterbuch
bei der Dekompression zu nutzen, wobei zusätzliche Schritte zur Aktualisierung
des Trie-Wörterbuchspeichers
und des Literal-Wörterbuchs
enthalten sind.
Wenn ein Codewort extrahiert wird,
das einem Einzelzeichen entspricht, das in den Output-FIFO übertragen
werden soll, wird der Trie-Wörterbuchspeicher
höherer
Ordnung durch Bildung eines neuen Blattknoten aktualisiert. Dieser
neue Blattknoten erhält
in seinem Positionsfeld den aktuellen Positionszeiger im Output-FIFO
und im Feld Zählerwert
die maximale Länge.
Abschließend
erfolgt ein Hochzählen
des Endknotenzählers.
Gleichzeitig wird festgestellt, ob das decodierte Symbol nicht bereits im
Literal-Wörterbuch
enthalten ist. In diesem Fall wird zusätzlich ein Aktualisierungsschritt
im Literal-Wörterbuch
durchgeführt,
bei dem dem Symbol an seiner zugehörigen Adresse die Zahl der
bisher im Block neu empfangenen Zeichen entsprechend dem aktuellen
Zählerwert
zugewiesen wird. Schließlich wird
dieser Zähler
um eins erhöht.
Wenn ein Codewort extrahiert wird,
das einem Internen Knoten im Trie-Wörterbuchspeicher entspricht,
aber die absolute Längenübereinstimmung,
berechnet aus der Summe der Länge
dieses Codewortes und der Tiefe des Vater-Knotens, nicht mit der Knotentiefe dieses
Knotens selbst übereinstimmt,
wird der Trie-Wörterbuchspeicher
durch Bildung eines neuen Blattknotens aktualisiert, wobei dieser
neue Blattknoten in seinem Positionsfeld den aktuellen Positionszeiger
im Eingabedatenspeicher erhält.
Abschließend
erfolgt ein Hochzählen
des Endknotenzählers.
Es wird ein neuer Internen Knoten gebildet, wobei dieser neue Interne
Knoten in seinem Positionsfeld den aktuellen Positionszeiger im
Output-FIFO erhält.
Diesem neuen Internen Knoten wird als Tiefe die absolute Übereinstimmungslänge der Zeichenkette
zugewiesen, die beim Decodierungsprozeß berechnet wurde. Abschließend erfolgt
ein Herunterzählen
des Zählers
für die
Zahl der Internen Knoten um eins.
Wenn ein Codewort extrahiert wird,
das einem Internen Knoten im Trie-Wörterbuchspeicher entspricht
und die absolute Längenübereinstimmung, berechnet
aus der Summe der Länge
dieses Codewortes und der Tiefe des Vater-Knotens, mit der Knotentiefe dieses
Knotens selbst übereinstimmt,
wird der Trie-Wörterbuchspeicher
durch Bildung eines neuen Blattknotens aktualisiert, wobei dieser
neue Blattknoten in seinem Positionsfeld den aktuellen Positionszeiger
im Output-FIFO erhält.
Abschließend erfolgt
ein Hochzählen
des Endknotenzählers.
Es gibt verschiedene Ausbildungsformen des
Verfahrens hinsichtlich der Aktualisierung der Präfixe. Unter
Verwendung dynamischer Präfixe
können
sowohl während
der Kompression als auch während
der Dekompression die Präfixe
der Codewort-Typen aktualisiert werden. Die Präfixe können aktualisiert werden, sobald
irgendeiner der zu den Elementen der Paare [Bekanntes Literat, Blattknoten]
und [Neues Literat, Interner Knoten] gehörenden Zähler größer wird als der Zählerstand
des anderen Elementes des Paares und dieses größere Element nun die kürzere für das Paar
zur Verfügung
stehende Codierung erhält
und dieses Element nun mit dem größten Element des anderen Paares
verglichen und wiederum dem größten Element
die kürzere
Codierung zugewiesen wird, wodurch der Präfix-Baum sich selbst ausbalanciert,
um das kürzere
Präfix
dem häufiger
aufgetretenen Codewort-Typ zuzuweisen.
Es ist aber auch möglich, die
Initialwerte für die
Präfixe
Neues Literal => 0
(1 Bit), Bekanntes Literal => 10
(2 Bits), Blattknoten => 110
(3 Bits) und Interner Knoten => 111
(3 Bits) zu definieren, wobei diese Präfixe während des Kompressions- und
Dekompressionsvorgangs dynamisch modifiziert werden, oder die Initialwerte
für die
Präfixe
im statischen Fall wie folgt zu definieren: Neues Literat => 110 (3 Bits), Bekanntes
Literat => 0 (1 Bit),
Blattknoten => 10
(2 Bits, Interner Knoten => 111
(3 Bits).
Das erfindungsgemäße Blockdatenkompressionssystem
beinhaltet zwei Wörterbücher. Das
erste ist ein präfixfreier
Trie-Wörterbuchspeicher,
in dem Interne Knoten NODE sowie Blattknoten LEAF enthalten sind.
Bei dem zweiten Wörterbuch
handelt es sich um ein Literal-Wörterbuch,
das die einzelnen Symbole verarbeitet, die durch Einsatz des ersten Wörterbuchs
nicht codiert wurden. Während
des Kompressionsvorgangs wird eine Suche in einer "Zero Finder Look-Up
Table" durchgeführt um festzustellen,
die aktuelle Teilzeichenkette im lokalen Eingangs-FIFO mit einem
der vorhandenen Zweige des Trie-Wörterbuchspeichers übereinstimmt.
Falls dann durch Multi-Byte-Lesen und spekulatives Aktualisieren
eine Übereinstimmung
gefunden wird, wird der Zweig nach unten verfolgt. Dies erfolgt
mit Hilfe eines parallelen Multi-Byte-Vergleichsmoduls. Hierbei werden alle
mit der Zeichenkette übereinstimmenden
Internen Knoten NODE untersucht bis hin zu dem Blatt, das der maximal
erlaubten Zeichenzahl für
die Ermittlung der Übereinstimmung
entspricht.
Wenn im Gegensatz dazu keine Übereinstimmung
im Trie-Wörterbuchspeicher
gefunden wird, wird das Ergebnis übertragen, das vom Literal-Wörterbuch
geliefert wird. Hierbei kann es sich um das Literat selbst handeln,
sofern es im Literal-Wörterbuch
noch nicht enthalten ist oder um den von diesem Literal-Wörterbuch gelieferten Code, wenn
es bereits zuvor innerhalb des Blocks detektiert wurde. Auf diese
Weise wird die Verschlüsselung
von Datenströmen
mit reduziertem Alphabet optimiert.
Als Ergebnis werden von dieser Datenkompressions-Modellierungseinheit
vier Typen von Codeworten generiert. Das Codewort Neues Literal
NLIT enthält
Zeichen, die im bisherigen Datenstrom nicht vorkommen, das Codewort
Bekanntes Literal KLIT enthält
Zeichen, die bereits im bisherigen Eingangs-Datenstrom vorgekommen sind, jedoch
keine Übereinstimmungen
innerhalb der Zweige des Trie-Wörterbuchspeichers
erzeugen, der Interne Knoten NODE enthält eine Referenz auf die übereinstimmenden
Teilzeichenketten, die an einem internen Zweigknoten des Trie-Wörterbuchspeichers
enden und der Blattknoten LEAF enthält eine Referenz auf die übereinstimmenden
Teilzeichenketten, die an einem Blattknoten eines Zweiges des Trie-Wörterbuchspeichers
enden.
Diese Codeworte werden sodann mit
Hilfe eines selbstbalancierenden Präfix-Baumes mit einem veränderlichen Präfix versehen.
Codeworte mit dem häufigsten
Auftreten erhalten dabei die höhere
Priorität,
so daß eine
höhere Übereinstimmung
mit dem Lernprozeß substitutiver
Verfahren erzielt wird. Gleichzeitig werden während der ersten Phasen der Kompression
kleinere Codeworte erreicht. Das Verfahren liefert generell eine
bessere Adaptierbarkeit an unterschiedliche Datentypen für die limitierte
Größe der Blockkompression.
Die Codierungseinheit der Datenkompressionseinrichtung arbeitet
nach dem Pipelineprinzip und ist dann aktiv, wenn die Modellierungseinheit
ihre Wörterbücher abschließend aktualisiert.
Die Codierungseinheit transformiert nahezu optimal die erhaltenen
Wörterbuchinformationen
durch Anwendung relativer, veränderlicher
Codedarstellungen, die sich aus aktuellen Status der Wörterbücher ergeben.
Dabei wird am Ausgang ein Codewort variabler Länge erzeugt.
Die Ausrichtungseinheit der Kompressionseinrichtung
ist ebenfalls entsprechend einer Pipeline strukturiert und arbeitet
parallel zur Modellierungs- und Codierungseinheit. Sie verwendet
ein Hochgeschwindigkeitsverfahren zur Ausrichtung der vom Codierer
gelieferten Codeworte variabler Länge an die für die endgültige Ausgabe
erforderlichen Bytegrenzen.
Die Endergebnisse der Kompression
werden vorübergehend
in einem First-in-first-out-
(FIFO) Speicher abgelegt, der eine dem jeweiligen angeschlossenen
Bus entsprechende Datenübertragung zum
externen Speicher gestattet und die von der Anordnung geforderte
Spitzenbandbreite minimiert.
Das Blockdatenkompressionssystem
wird nachstehend an einem Ausführungsbeispiel
näher erläutert. Die
dazugehörige
Zeichnung zeigt in
1 ein
Blockschaltbild einer Kompressionseinheit,
2 Datenstrukturen,
die in der bevorzugten Realisierung der vorliegenden Erfindung im Trie-Wörterbuchspeicher 4 implementiert
sind,
3 einen
selbstbalancierenden Präfix-Baum
für die
Vergabe von Präfixen
für die
Ausgabeeinheiten, der in der bevorzugten Realisierung der vorliegenden
Erfindung implementiert ist,
4 ein
Blockschaltbild einer Dekompressionseinheit.
5 ein
Ausführungsbeispiel
für das
Kompressionsverfahren für
eine Eingabezeichenkette
6 Trie-Suffix-Baum
nach 5.
Gegenstand der Erfindung sind ein
Blockdatenkompressionssystem und ein Verfahren zur schnellen Blockdatenkompression
mit Multi-Byte-Suche. Die Einrichtung und die bevorzugte Realisierung der
Erfindung ist im Blockschaltbild,
1,
dargestellt. 1 zeigt
auch die Mittel zur Realisierung der Erfindung auf, die durch jegliche Hardware-Implementierungen,
von der diskreten IC-Anwendung, FPGA-Technologien sowie alle digitalen
Entwurfstechnologien auf der Basis von ASIC's möglich
ist.
Eine Kompressionseinheit 1 besteht
aus einem Trie-Wörterbuchspeicher 4,
der ein Wörterbuch höherer Ordnung
enthält,
sowie einem Literal-Wörterbuch 2.
Die Kompressionseinheit 1 kann prinzipiell vom Trie-Wörterbuchspeicher 4 getrennt
werden. Bei der erfindungsgemäßen Lösung sind
diese jedoch zu einer einzigen Lösung
zusammengefaßt.
Damit werden die Vorteile der Verwendung einer direkten Speicherschnittstelle 103 für den sofortigen
Zugriff auf lange Speicherdatensätze
ausgenutzt. Der Zugriff auf den Trie-Wörterbuchspeicher 4 erfolgt über die Speicherschnittstelle 103, über die
alle elektrischen und zeitsteuerungsspezifischen Signale des Trie-Wörterbuchspeichers 4 übertragen
werden. Während
der Trie-Wörterbuchspeicher 4 in
der umfassenden Ausführung
der vorliegenden Erfindung als RAM ausgeführt ist, können bei speziellen Realisierungen
auch ROM-Lösungen
zum Einsatz gelangen. In diesem Fall müssen die ROM-Wörterbücher im
voraus erstellt und vorprogrammiert werden.
Eine ausführliche Beschreibung der im Trie-Wörterbuchspeicher 4 verwendeten
Datenstruktur ist in 2 dargestellt.
Jede Eingabe in den Trie-Wörterbuchspeicher 4 ist
in Form eines langen Datensatzes organisiert. Jeder Datensatz enthält die folgenden
Felder: Vater 210 (12-bits), Position 211 (12-bits), Zählerwert 212 (8-bits),
Neu 213 (8-bits), Knoten 214 (12-bits). In Klammern
ist beispielhaft die in der bevorzugten Ausführung verwendete Anzahl der
Bits pro Feld angegeben, die für
die maximale interne Blockgröße von 4
kByte gelten. Die Anzahl der erforderlichen Bits verändert sich
dabei proportional zur Vergrößerung oder
Verkleinerung der Blockgröße.
Ein weiteres Funktionsmerkmal des Trie-Wörterbuchspeichers 4 besteht
darin, daß er zum
gleichen Zeitpunkt sowohl Interne Knoten NODE als auch Blattknoten
LEAF enthält.
Dabei werden die Internen Knoten NODE von 1 ab inkrementiert gezählt, während die
Knoten vom Typ Blattknoten LEAF vom Maximalwert (0×Offf für eine Blockgröße von 4
kByte) an dekrementiert gezählt
werden. Die Konstruktionsregeln, die bei der Erzeugung und Aktualisierung
des Trie-Wörterbuchspeichers 4 zur Anwendung
gelangen, verhindern jede Kollision zwischen diesen beiden Knotentypen.
Gleichzeitig besitzt diese Konstruktion erhebliche Vorteile in Bezug auf
Speicherbedarf im Vergleich zu früheren Lösungen.
Jeder Datensatz, der im Trie-Wörterbuchspeicher 4 enthalten
ist, besitzt eine Beschreibung für die
gespeicherten Felder, die wie folgt aussieht, dargestellt in 2: Das Feld Position 211 enthält die Adresse
des Anfangspunktes der Zeichenkette, die vom Knoten beschrieben
wird, im ursprünglichen Eingabeblock.
Das Feld Vater 210 bezeichnet entweder den vorhergehenden
Knoten eines spezifischen Knotens des Trie-Wörterbuchspeichers 4 in
der Top-Down-Suche, sofern dieser existiert, bzw. das erste Symbol
der Teilzeichenkette, die dieser spezifische Knoten repräsentiert
(z.B. 'a' bei Zeichenkette 'abcd'). Die Unterscheidung
erfolgt über
ein Flag im höchstwertigen
Bit. Das Feld Neu 213 enthält das Symbol, das den Weg
vom Vater-Knoten zu dem spezifischen Knoten angibt (z.B. NEU = 'c' für
den Übergang
vom 'ab' repräsentierenden
Knoten zu dem Knoten, der 'abc' repräsentiert).
Das Feld Zählerwert 212 gibt
die Übereinstimmungstiefe
der Symbolstrings an, die den jeweiligen Knoten erzeugen. Das Feld
Knoten 214 gibt die Nummer des Knotens innerhalb des Trie-Wörterbuchspeichers 4 an.
Der Datenfluß, der während der Kompression im System
entsteht, ist in 1 dargestellt
und wird im folgenden beschrieben. Zuerst wird der Inhalt des I/O-Memory-Busses 113 in
den Input-FIFO 8 eingelesen, der bei der bevorzugten Ausführung in
der Lage ist, mindestens 64 Byte zu speichern. Danach werden die
beiden nächsten
auszugebenden Symbole im Input-FIFO 8 benutzt, um eine
Hash-Funktion zu erzeugen, die als Ergebnis eine Adresse sowohl für die Zero-Finder-Lookup-Tabelle 3 als
auch den Trie-Wörterbuchspeicher 4 erzeugt.
Diese Adresse wird verwendet um festzustellen, ob ein Knoten im Trie-Wörterbuchspeicher 4 existiert,
der eine Zeichenkette mit ähnlichen
Startsymbolen wie die derzeit analysierte Zeichenkette repräsentieren
könnte. Wenn
das aus der Zero-Finder-Lookup-Tabelle 3 mittels des ZeroFinder-LUT-Busses 102 gelesene
Bit anzeigt, daß diese
Adresse nicht leer ist, wird von der Modellierungseinheit 6 ein
Schreib-Lese-Vorgang auf die spezifische, durch die Hash-Funktion
berechnete Adresse mittels der Speicherschnittstelle 103 gestartet.
Als Ergebnis dieses Schreib-Lese-Vorgangs wird die Hash-Gültigkeit
bestätigt,
wobei zum selben Zeitpunkt die im Feld Knoten 214 gespeicherte
Knotennummer und alle damit zusammenhängenden Informationen gelesen
werden. Diese gelesene Information enthält Angaben bezüglich des
früheren
Vorkommens der zuletzt gespeicherten Symbolkette, die dasselbe Anfangspaar
von Symbolen enthält,
sowie die Tiefe der zuvor gefundenen Übereinstimmung (in Feld Zählerwert 212).
Wenn die Hash-Gültigkeit auf Grund der Übereinstimmung
des Feldes Vater 210 und des Feldes Neu 213 mit
dem ersten bzw. zweiten Zeichen des Anfangspaares bestätigt ist,
wird ein Lese-Vergleichs-Zyklus gestartet. Dazu wird die Vergleichseinheit 5 über den
FIFO-Vergleichs-Bus 108 mit den Symbolen, die auf das geprüfte Paar
im Input-FIFO 8 folgen, geladen. Diese werden mit den über den
Puffer-Vergleichs-Bus 109 aus dem Blockpuffer 10 gelesenen
Daten verglichen, wobei die Übertragung
ab der durch den Inhalt des Positionsfeldes 211 abgeleiteten
Adresse beginnt.
In der als bevorzugte Ausführung beschriebenen
Einrichtung werden in der Vergleichseinheit 5 gleichzeitig
4 Byte verglichen, so daß durch
Wiederholung der Vergleichsoperation und Übertragung der Ergebnisse über den
Ergebnisvergleichsbus 104 zur Modellierungseinheit 6 übereinstimmende
Zeichenketten in kurzer Zeit bestimmt werden können. Dieser Vergleich wird
solange durchgeführt,
bis eine Nichtübereinstimmung
gefunden wird oder die im Feld Zählerwert 212 definierte
Vergleichstiefe erreicht ist. Als Ergebnis dieses Prozesses enthält die Modellierungseinheit 6 die
maximale Übereinstimmungslänge der
aktuellen Symbolzeichenkette im oberen Bereich des Input-FIFO-Blockes 8 mit
den vorhandenen Wörterbucheintragungen.
Nunmehr sendet die Modellierungseinheit 6 ein Paar [relativer
Knoten, relative Verschiebung] zur Codierungseinheit 7.
Der "relative Knoten" wird aus der Differenz
zwischen dem letzten im Wörterbuch
bestimmten Knoten und dem durch das Feld Knoten 214 bestimmten
abgeleitet. Auf ähnliche
Weise wird die relative Verschiebung als Differenz zwischen aktueller Übereinstimmungstiefe
und der Tiefe des Vater-Knotens berechnet.
Wenn während der oben beschriebenen
Prozedur keine Übereinstimmung
entweder zwischen dem Feld Vater 210 oder dem Feld Neu 213 des
untersuchten Knotens mit den aktuellen Registerwerten gefunden wird
("Hash-Prüfung"), erzeugt die Modellierungseinheit 6 eine
neue Hash-Adresse, wiederholt mit dieser Adresse die Suche im Trie-Wörterbuchspeicher 4 oder
beendet sie. Zur Ermittlung der genannten neuen Hash-Adresse dient
der Inhalt der Zero-Finder-Lookup-Tabelle 3.
Sobald aus der Zero-Finder-Lookup-Tabelle 3 zu erkennen
ist, daß für die erste
Hash-Adresse der ersten beiden Zeichen im Input-FIFO 8 kein
Knoten im Trie-Wörterbuchspeicher 4 vorhanden
ist, wird ein Literal-Codiertyp verwendet. Das erste Zeichen wird
dann verwendet, um das Literal-Wörterbuch 2 über den
Literal-Bus 101 zu adressieren, wobei aus den über den
Literal-Bus 101 zurückgelesenen
Daten erkannt wird, ob das erste Symbol im Input-FIFO 8 im
bisher verarbeiteten Datenstrom schon vorkam. Falls die Antwort
vom Literal-Wörterbuch 2 positiv
ausfällt
(gekennzeichnet durch eine Eins im höchstwertigen Bit der Antwort), wird
die Literalcodierung, die dem betreffenden Symbol bei seinem ersten
Auftreten zugewiesen wurde, gleichzeitig über den Literal-Bus 101 empfangen. Durch
Zuweisung einer variablen Anzahl von Bits für die Literalcodierung der
einzelnen Zeichen verkürzt sich
ihre Codierung im Vergleich zu dem Fall, in dem sie in ihrer ursprünglichen
Form zum Ausgang übertragen
werden. Dabei ist die Anzahl der Bits proportional zur Alphabetgröße des codierten
Datenstroms.
Wenn für das spezifische Literat vom
Literal-Wörterbuch 2 über den
Literal-Bus 101 eine Null im höchstwertigen Bit (MSB) zurückliefert
wird, bedeutet dies, daß das
Literal noch nicht im verarbeiteten Block vorhanden war. Das betreffende
Literal wird sodann in seiner ursprünglichen Form zur Codierungseinheit 7 übertragen.
In diesem Fall wird das Literal-Wörterbuch 2 während des über den
Literal-Bus 101 ablaufenden Schreib-Lese-Zyklusses aktualisiert,
wobei dem betreffenden Zeichen die entsprechende Codierung für "Bekanntes Literat
KLIT" zugeteilt
und das höchstwertige
Bit (MSB) auf den Wert eins gesetzt wird. Danach wird die Codierung
für "Bekanntes Literat
KLIT" um eins erhöht.
Als Ergebnis der oben geschilderten
Operationen können
vier Codetypen von der Modellierungseinheit 6 generiert
und zur Codierungseinheit 7 übertragen werden: Neues Literal
NLIT, Bekanntes Literal KLIT, Interner Knoten NODE, Blattknoten LEAF.
Die ersten beiden Codierungstypen
entsprechen einer Einzelzeichen-Codierung, während die letzten beiden Typen
einer Mehrzeichen-Codierung, ausgedrückt durch den Inhalt des Trie-Wörterbuchspeichers 4,
entsprechen. Da die Anzahl der von der Modellierungseinheit 6 erzeugten
Einheiten größer ist
als bei allen früheren
Lösungen,
sind traditionelle Markierungsverfahren nutzlos. Weiterhin müssen besondere
Maßnahmen
in Betracht gezogen werden, um die Präfixlänge optimal zu halten.
3 zeigt
den selbstbalancierenden Präfix-Baum,
der für
den dynamischen Präfix-Aufbau verwendet
wird. Die Präfixe
sind in zwei Gruppen (I und II) unterteilt, wobei zur Knotengruppe
I (302) die NLIT-Codierung im NLIT-Knoten-Zähler 304 und die LEAF-Codierung
im LEAF-Knoten-Zähler 305 gehören und
zur Knotengruppe II (303) die KLIT-Codierung im KLIT-Knoten-Zähler 306 und
die NODE-Codierung im NODE-Knoten-Zähler 307. Jeder Codierungstyp
besitzt einen Aufwärtszähler, wobei
zu Beginn der Kompression des Datenblocks alle Zähler auf Null gesetzt werden.
3a zeigt
zusätzlich
eine vordefinierte Start-Codierung für jeden Codierungstyp, wobei
NLIT den kürzesten
Code (1 Bit) [0] aufweist, gefolgt von KLIT (2 Bit) [10] sowie von
LEAF und NODE mit jeweils 3 Bit [110 bzw. 111].
Während
des Kompressionsvorganges wird für
jeden neu codierten und zur Codierungseinheit übertragenen Codetyp das entsprechende
Präfix
aus dem Baum zur Markierung dieses Codewortes ausgewählt. Danach
wird der Baum aktualisiert. Während
dieses Aktualisierungsprozesses wird der entsprechende Zähler erhöht und der
Zählerstand
mit dem anderen in der Gruppe befindlichen verglichen. Sobald die
Zählerstände im LEAF-Knoten-Zähler 305 bzw.
im NODE-Knoten-Zähler 307 in 3a größer werden als die Zählerstände im NLIT-Knoten-Zähler 304 bzw.
KLIT-Knoten-Zähler 306 für die linken
Gruppenmitglieder, wird der entsprechende Codetyp zum Führer der
Gruppe und erhält
das Präfix
seines Paares in der entsprechenden Gruppe. Der Führer der
Gruppe wird nun auf Gruppen-Level verglichen. Auch auf diesem Niveau
gelten für
die Ermittlung des kürzesten
Codes (1-Bit), der der Gruppe, die den höchsten Zählerstand besitzt, zugeteilt
wird, dieselben Regeln. Der Führer
der anderen Gruppe erhält
die zweitkürzeste Codierung
(2 Bit).
Ein besseres Verständnis für das Verfahren läßt sich
mit Hilfe des ergänzenden
Diagramms in 3b erreichen.
Hier erhält
jeder Codetyp einen Quadranten innerhalb eines im Uhrzeigersinn
gedrehten Prioritätenkreises 308 zugeordnet.
Weil zu Beginn eines Datenblocks die Wahrscheinlichkeit, ein Neues
Literal NLIT zu finden, weitaus höher ist, als die Wahrscheinlichkeit,
irgendeinen anderen Codetyp zu finden (für das erste Symbol 100 %),
erhält NLIT
das kürzeste
Präfix
und wird dem Quadranten mit der höchsten Priorität zugewiesen.
Sobald sich das Alphabet am Eingang beginnt zu wiederholen (noch
nicht jedoch die Symbolpaare des Trie-Wörterbuchspeichers 4 auftreten),
bewegen sich die Codetypen im Uhrzeigersinn, d.h. KLIT befindet
sich nun im Quadranten mit der höchsten
Wertigkeit.
In der Zwischenzeit füllt sich
der Trie-Wörterbuchspeicher 4 immer
mehr. Sobald die Anzahl gefundener Blätter größer wird als der Inhalt des KLIT-Knoten-Zählers 306,
dreht sich der Kreis erneut, wodurch dem Auftreten eines Blattknotens LEAF
als nächstes
Codewort die höchste
Wertigkeit zugeteilt wird. Dies setzt sich bis zu dem Punkt fort, an
dem der Wörterbuchspeicher 4,
sobald die Daten ausreichend homogen sind, in der Lage ist, auf Grund
der Homogenität
der Daten den größten Teil der
Eingangsdaten mit Hilfe der Internen Knoten NODE auszudrücken. Nun
erhält
das entsprechende Präfix
die kürzeste
Anzahl von Bits.
3b dient
lediglich zur Verdeutlichung; das reale Verhalten des Systems aus 3a unterscheidet sich von
dem oben beschriebenen Verhalten in gewisser Weise. Es ist jedoch
zum besseren Verständnis
des zugrundeliegenden Verfahrens hilfreich.
Der Vorteil dieses Verfahrens gegenüber früheren Lösungen besteht
darin, daß relativ
hohe Kompressionsraten für
sehr kleine Blöcke
bzw. schon für den
Anfang größerer Datenblöcke erzielt
werden können.
Während
bislang der Kompressionsprozess unter der Prämisse zuvor gefüllter Wörterbücher erläutert wurde,
konzentriert sich jetzt die Beschreibung auf den Aktualisierungsprozess
der Wörterbücher, der
im Falle eines selbstadaptierenden, dynamischen Ablaufs unter Verwendung
der Schreib-Lese-Speicher stattfindet, wie dies in der bevorzugten Ausführung der
Fall ist.
Entsprechend dem in 1 dargestellten und für die Kompression typischen
Datenfluß wird der
Trie-Wörterbuchspeicher 4 als
Teil der Kompressionsschritte durch die Modellierungseinheit 6 aktualisiert,
um den Änderungen
Rechnung zu tragen, die durch das verarbeitete Zeichen bzw. die
verarbeitete Zeichenkette bewirkt wurden. Zunächst wird in jedem Fall ein
neuer Blattknoten LEAF erzeugt. Dieser repräsentiert die spezifische Zeichenkette,
die mit den Zeichen am Ausgang des Input-FIFO 8 beginnt.
Daraufhin wird der Blatt-Knotenzähler
um eins erniedrigt.
Wenn der Codierungstyp als Literat
ermittelt wurde, dann ist der Vater-Knoten dieses neuen Blatts das
Originalsymbol selbst. Wenn im Gegensatz dazu ein Zweig innerhalb
des Trie-Wörterbuchspeichers 4 für mindestens
zwei Zeichen am Ausgang des Input-FIFO 8 gefunden wurde,
erhält
das Feld Vater 210 des neu zu erzeugenden Blattes die Knotennummer
des Knotens im Trie-Wörterbuchspeicher 4,
auf den zuletzt zugegriffen wurde. Wenn zusätzlich während des Suchprozesses bei
der schrittweisen Verfolgung eines Zweiges des Trie-Wörterbuchspeichers 4 die
Zielknotentiefe nicht erreicht wird, wird ein neuer interner Knoten
erzeugt, der den gemeinsamen Teil von mindestens zwei existierenden
Zeichenketten im Trie-Wörterbuchspeicher 4 charakterisiert.
Der neue Blattknoten LEAF wird als Zweig, der im soeben erzeugten
Internen Knoten NODE beginnt, angelegt.
Es sei angemerkt, daß der Aktualisierungsvorgang
zur besseren Erklärung
zwar aufgeteilt wurde, diese Erfindung aber in der Lage ist, die
Aktualisierung im Trie-Wörterbuchspeicher 4 gleichzeitig
mit dem Schreib-Lese-Zyklus auf die Adresse des letzten Hash-Kandidaten
durchzuführen,
die durch die Modellierungseinheit 6 berechnet wird. Da
der erste Schreibvorgang erfolgen kann, bevor die Modellierungseinheit 6 endgültige Kenntnis über die
Länge der Übereinstimmung
besitzt, wird der Knoten, auf den gerade zugegriffen wird, in seinem
Feld Position 211 aktualisiert, und ein vorläufiges Blatt
wird im voraus angelegt. Dieser geschwindigkeitserhöhende Vorgang
wird als Spekulative Voraus-Aktualisierung (ASU) bezeichnet. Dieses
vorläufige
Blatt wird in der Annahme erzeugt, daß die Suche im Trie-Wörterbuchspeicher 4 erfolglos
bleibt und das einzelne aktuelle Zeichen, das durch das Feld Vater 210 adressiert
wird, der Vater-Knoten des betreffenden Blattes sein wird. Falls
diese Annahme unzutreffend ist, wird für das betreffende Blatt ein
erneuter Schreibvorgang ausgelöst,
der parallel zur Hinzufügung
neuer Zeichen zum Trie-Wörterbuchspeicher 4 erfolgt
und damit keine Extra-Zeitscheibe erfordert. Das Ergebnis dieser
spekulativen Voraus-Aktualisierung
ist ein reduziertes und ausbalanciertes Zustandsdiagramm für die Modellierungseinheit 6.
Das führt
für die
bevorzugte Ausführung
dieser Erfindung zu einer Leistungssteigerung.
Eine ähnliche spekulative Technik
wird parallel zum oben geschilderten Vorgang auch für die Aktualisierung
des Literal-Wörterbuches 2 eingesetzt. Wenn
ein Neues Literat NLIT als Ergebnis eines Lesevorganges in der Zero-Finder-Lookup-Tabelle 3 in 1 festgestellt wird, wird
eine spekulative Aktualisierung des Literal-Wörterbuches 2 durch
Schreiben des neu zugewiesenen Indexes für das betreffende Eingangssymbol
ausgeführt.
Sobald die Modellierungseinheit 6 die Verarbeitung einer
bestimmten Teilzeichenkette im Zeichen-Eingangsstrom abgeschlossen
hat, überträgt sie die
Codeworte über
den Eingangsbus der Codierungseinheit 105 zur Codierungseinheit 7 in 1. Die Aufgabe der Codierungseinheit 7 besteht
darin, diese Informationen in einen Bitstrom zu wandeln, der später von
der Dekompressionseinheit verstanden werden kann, wobei Bezugnahmen
auf den aktuellen Inhalt aller Wörterbücher und
Zähler
(Blattzähler,
Knotenzähler,...),
die für
den Kompressionsprozeß genutzt
werden, enthalten sind, soweit sie ebenfalls synchron durch die
Decodierungseinheit generiert werden müssen.
Von der Codierungseinheit 7 durchgeführte Bitoperationen
sind überwiegend
direkte logische Transformationen, so daß keine Iterationen erforderlich
sind, wodurch die Geschwindigkeitsanforderungen des Kompressionsverfahrens
erfüllt
werden.
Zur Erreichung dieses Ziels wendet
die Codierungseinheit 7 die folgenden Regeln an, für deren Umsetzung
die entsprechenden Hardware-Implementierungen in der Einrichtung
vorhanden sind:
- – Wenn ein Blattknoten LEAF
zu codieren ist, wird die Blatt-Nummer relativ zum aktuellen Blatt-Zählerstand
unter Nutzung eines Tripel-Präfix-Schemas
(kurz, mittel, lang) ausgedrückt,
wobei die Bitanzahl für
jede Stelle entsprechend dem Blattzählerstand anwachsen kann (entsprechend
der notwendigen Bitanzahl zur Darstellung der Differenz zwischen
dem Startblatt und dem aktuellen Blatt). Die Länge der Symbol- oder Wörterbuchübereinstimmung
wird ebenfalls nicht in absoluter Form ausgedrückt, sondern durch Bezugnahme auf
den Vater-Knoten dieses Blattknotens. Für diese ganzen Zahlen wird
eine Unary-Codierung verwendet, die besonders kurze Codes favorisiert.
- – Wenn
ein Interner Knoten NODE codiert werden muß, wird die Knoten-Nummer zunächst auf
die maximale Anzahl von Bits reduziert, die durch log2 (Knotenzähler) vorgegeben
ist, und schließlich modifiziert,
wenn innerhalb dieses Codierungsraumes (bestimmt durch die Bit-Länge) nicht
alle Codierungsmöglichkeiten
genutzt werden ("sparse
codes"). Dasselbe
Verfahren wird für
die Übereinstimmungstiefe
im Wörterbuch
angewendet, die als Abstand zum Vater-Knoten berechnet wird. Auch
hier wird die minimale, potentiell notwendige Bitanzahl zur Erfassung
dieses Abstandes verwendet, einschließlich der Berücksichtigung
von "Sparse Codes", falls zutreffend.
- – Wenn
ein Bekanntes Literal KLIT zu übertragen ist,
wird anstelle des Codewortes selbst sein Index im Literal-Wörterbuch 2 zur
Decodierungseinheit übertragen.
Die Länge
beträgt
log2 (Literal-Zähler), wobei auch hier "Sparse Codes" verwendet werden,
wenn dies möglich
ist.
- – Ein
Neues Literat NLIT überträgt immer
das Literal in seiner Originaldarstellung.
Als Ergebnis des oben beschriebenen
Codierungsverfahrens wird die Codierung variabler Länge über den
Eingabebus der Ausrichtungseinheit 107 in die Ausrichtungseinheit 9 in 1 übertragen, während die
Codierungseinheit 7 sich selbst für den nächsten von der Modellierungseinheit 6 erzeugten Codierungszyklus
freigibt, der parallel zu den vorangegangenen Zyklen bzw. dem vorangegangenen
Zyklus ablief, und die nächsten
Zeichen im Input-FIFO 8 verarbeitet. Die Funktion der Ausrichtungseinheit 9 besteht
darin, die Ketten codierter Bits in eine an Bytegrenzen ausgerichtete
Form umzuwandeln, die vom Output-FIFO 12 verarbeitet werden
kann. Zu diesem Zweck enthält
die Ausrichtungseinheit 9 eine Vorrichtung zum Anhängen des
neuen bitcodierten Datenstroms, der für das spezielle Codewort codiert wurde,
an den verbliebenen Teil des vorhergehenden Bitstroms. Dabei werden
die Bit-Darstellungen verkettet. Außerdem ist eine weitere Vorrichtung
zur schnellen parallelen Verschiebung des neuen Bitstroms um eine
bestimmte Anzahl von Bits enthalten. Als Ergebnis dieser Operation
erhält
man eine unterschiedliche Anzahl von ausgerichteten Bytes und einen
Bitrest zur Verarbeitung im nächsten
Ausrichtungszyklus.
Diese Ausgabe-Bytes werden dann über den Output-FIFO-Bus 111 zum
Output-FIFO 12 übertragen,
in dem sie solange gepuffert werden, bis die Ausgabe-Busbreite erreicht
ist. Dann wird eine Anforderung (typischerweise eine DMAS-Anforderung) für den Ausgabebus
des Output-FIFO 114 generiert. Auf diese Weise wird die
Gesamt-Bandbreite des Systems optimiert, in der sich die Datenkompressionseinheit
befindet.
Einige Telekommunikationsanwendungen, bei
denen kleine Datenfragmente abwechselnd von unterschiedlichen Quellen
kommen, jedoch zu unterschiedlichen Kontexten gehören, wie
es zum Beispiel bei einem Routen zum Handling mehrerer virtueller Kanäle der Fall
ist, gelten als spezifische Anwendungsfälle.
Auf Grund der hochgradig synchronen
Natur der in dieser Erfindung beschriebenen Kompression und der
sich ergebenden Vorteile bezüglich
der erreichbaren Kompressionsraten für die Fälle, in denen ein Datenblock
ausschließlich
aus homogenen Informationen besteht, ist es in der Regel wünschenswert, diese
getrennten virtuellen Kanäle
als unterschiedliche Kontexte zu verarbeiten, wobei jeder einzelne sein
eigenes Wörterbuch
besitzt.
Zu diesem Zweck wird in einer optionalen Ausführung der
vorliegenden Erfindung zusätzlicher Speicherplatz
zur Speicherung der unterschiedlichen Kontexte im Trie-Wörterbuchspeicher 4 über die Speicherschnittstelle 103 vorgesehen.
Außerdem enthält sie eine
Upload-/Download-Vorrichtung zu/von diesem Speicher zur Übertragung
der Registerinhalte aller internen Einheiten und für die Inhalte sämtlicher
internen Wörterbücher.
Da der Dekompressionsvorgang das
genaue Gegenteil des oben geschilderten Verfahrens darstellt, wird
dieser nur in zusammengefaßter
Form anhand des in 4 gezeigten
Datenflusses behandelt.
Zunächst werden die verschlüsselten
Daten in den Input-FIFO 410 über den Eingabebus der Ausrichtungseinheit 508 übertragen.
Dieser arbeitet jetzt im Umkehrbetrieb und liest nur so viele Bytes
wie erforderlich sind, um ihn gefüllt zu halten. Die im Input-FIFO 410 enthaltenen
Daten werden dann zur Ausrichtungseinheit 407 übertragen,
in der die korrekte Bit-Bedeutung und Bit-Reihenfolge der repräsentierten Codeworte variabler
Länge wiederhergestellt
werden. Dies geschieht in engem Zusammenwirken mit der Decodierungseinheit 405,
die alle Aufgaben übernimmt,
die mit der Ermittlung der Länge aller
Datenfragmente im Zusammenhang stehen, die in dem spezifischen Codewort
enthalten sind. Dies geschieht mit Hilfe der aktuellen Inhalte der
Register, die von der Decodierungseinheit 405 und der Modellierungseinheit 404 gemeinsam
genutzt werden.
Danach prüft die Decoderungseinheit 405 den
Status des selbstbalancierenden Präfix-Baumes in 3a um zu ermitteln, welcher Codewort-Typ
decodiert werden soll und erfaßt
zu diesem Zweck Informationen über
Anzahl und Typ der Codewort-Fragmente, die in ihm enthalten sind.
Wenn die Decodierungseinheit 405 diese Fragmente entschlüsselt hat, werden
die absoluten Werte des ersten Fragments, das auf das Codewort-Präfix folgt,
wiederhergestellt. Dieses Fragment kann entweder einen Knoten im Trie-Wörterbuchspeicher 4 (enthalten
im Trie-Wörterbuchspeicher 403)
repräsentieren,
das durch den Decoder symmetrisch wiederhergestellt werden muß, oder
es repräsentiert
ein Literal-Codewort, das eventuell das symmetrische Literal-Wörterbuch 402 nutzt.
Diese Information wird nun zur Modellierungseinheit 404 zurückübertragen,
die auf das betreffende Wörterbuch
zugreift, um alle noch notwendigen Informationen zu bekommen, die
die Decodierungseinheit 405 benötigt, um die Codewort-Entschlüsselung zu
beenden. Wenn das entschlüsselte
Codewort vom Typ "Literal" ist (KLIT oder NLIT),
existiert kein zweites Fragment, und die Modellierungseinheit 404 überträgt das wiederhergestellte
Literal sowohl in den Blockpuffer 408 als auch zum Output-FIFO 406, der
nun umgekehrt als Zwischenspeicher für den Entschlüsselungsprozess
dient. Wenn im Gegensatz dazu ein Codewort von Typ "NODE" (NODE oder LEAF)
erkannt wird, existiert ein zweites Fragment, das die Verschiebung
bezüglich
des Vater-Knotens im Trie-Wörterbuchspeicher 403 kennzeichnet.
Die Decodierungseinheit 405 verarbeitet die Informationen über die
Knotentiefe des spezifischen Knotens, die über den Ausgangsbus der Decodierungseinheit 504 von
der Modellierungseinheit 404 geliefert wird, und die Verschiebung,
die aus dem Codewort gewonnen wird, das über den Bus 505 von
der Ausrichtungseinheit 407 kommt, um die absolute Tiefe
im Zweig zu erhalten. Sie ist ein Maß für die Länge der übereinstimmenden Zeichenkette.
Diese Tiefe im Trie-Wörterbuchspeicher 403 wird über den
Bus 504 zurück
zur Modellierungseinheit 404 überfragen. Die Modellierungseinheit 404 führt sodann einen
Multi-Byte-Kopiervorgang (beginnend mit der Position in der Zeichenkette,
die durch den Knoten des Trie-Wörterbuchspeichers 403 gekennzeichnet
wird) vom Block-Buffer 408 in das Output-FIFO 406 durch. Gleichzeitig
markiert sie diese neuen Symbole zum Rückschreiben aus dem Output-FIFO 406 zur
neuen Position innerhalb des Block-Buffers 408 im nächsten freien
Zyklus bzw. den nächsten
freien Zyklen. Wie während
des Kompressionsvorgangs übernimmt
der Output-FIFO 406 die Aufgabe, die Ausgabesymbole für eine Schreib-Operation
in den externen E/A-Speicher entsprechend der Busbreite aneinanderzureihen,
die Schreiboperation zu initialisieren und auszuführen. Dazu
wird normalerweise ein DMA-Handshake-Protokoll genutzt, um ein optimales
Timing-Intervall zur Minimierung der Bandbreite zu erhalten, die für diesen
externen Speicher erforderlich ist.
Zusammenfassend sei das Blockdatenkompressionssystem,
bestehend aus einer Kompressionseinrichtung und einer Dekompressionseinrichtung
nochmals dargestellt. Die Kompressionseinrichtung enthält einen
Input-FIFO 8, um Eingangssymbole nach dem First-in-first-out
Prinzip zu puffern. Dieser Input FIFO 8 ist mit einer Steuerungskomponente und
einer Modellierungseinheit 6 verbunden, wobei diese Modellierungseinheit 6 mit
einem Trie-Wörterbuchspeicher 4,
einer Zero-Finder-Lookup-Tabelle 3, Suchkomponenten in
Form einer Vergleichseinheit 5, Speicherkomponenten in
Form eines Literal-Wörterbuches 2 und
einer Codierungseinheit 7 verbunden ist. Die Codierungseinheit 7 ist
wiederum über
eine Ausrichtungseinheit 9 mit einem Output-FIFO 12 verbunden.
Der Trie-Wörterbuchspeicher 4 besteht
aus einer Vielzahl von Speicherstellen, wobei die Modellierungseinheit 6 parallel
auf diesen zugreift, und das Wörterbuch
höherer
Ordnung bildet, das durch eine Hash-Funktion adressiert wird, die aus den
ersten Zeichen, die im Input-FIFO 8 enthalten sind, berechnet
wird. Die Zero-Finder-Lookup-Tabelle 3 dient zur Vorausbestimmung
ungenutzten Platzes im Wörterbuch
höherer
Ordnung, wobei die Modellierungseinheit 6 auf das Wörterbuch
höherer
Ordnung zugreift, um zu bestimmen, ob die im Input FIFO 8 enthaltene Zeichenkette
durch einen beliebigen inneren oder externen Knoten, der in diesem
Wörterbuch
existiert, ersetzt werden kann. Die Vergleichseinheit 5 führt dabei
den parallelen Vergleich mehrerer Zeichen durch, um die maximale
Länge der Übereinstimmung
zwischen dem betreffenden Knoten in diesem Wörterbuch und der Zeichenkette
im Input-FIFO 8 zu
bestimmen. Das Literal-Wörterbuch 2 bildet
das Wörterbuch
niedriger Ordnung, wobei der Inhalt des Literal-Wörterbuches 2 zur
Erzeugung der codierten Form für
Zeichenketten der Länge
1 in der Modellierungseinheit 6 genutzt wird. Die Modellierungseinheit 6 bestimmt,
ob das Ergebnis der parallelen Suche in der Vergleichseinheit 5 oder
der Inhalt des Literal-Wörterbuches 2 als
Ausgangsgröße der Modellierungseinheit 6 gewählt wird.
Die Modellierungseinheit 6 führt sowohl eine iterative parallele
Suche durch, wenn ein oder mehrere im Trie-Wörterbuchspeicher 4 enthaltene
Knoten die Übereinstimmungslänge mit
der im Input-FIFO 8 befindlichen Zeichenkette erhöhen, als
auch ein Pipelining der Ergebnisse zur Codierungseinheit 7,
die kompakte Ausgangscodeworte variabler Länge erzeugt, die eine relative Darstellung
der Ausgangswerte der Modellierungseinheit 6 verwendet,
wobei die Ausgangscodeworte vom aktuellen Zustand der Codierungseinheit 7 abhängig sind.
Die Codierungseinheit 7 enthält Komponenten zum Pipelining
dieses Ausgangscodewortes variabler Länge zur Ausrichtungseinheit 9,
die das Ausgangscodewort variabler Länge in ein an Bytegrenzen ausgerichtetes
Codewort umwandelt. Der Output-FIFO 12 enthält Komponenten
zur temporären
Speicherung dieser an Bytegrenzen ausgerichteten Codeworte, bis
die spezifizierte Breite des Ausgangsbusses erreicht wird und ein
geeigneter Ausgabezeitpunkt vorliegt, um auf diese Weise einen Block von
nichtkomprimierten digitalen Eingabedaten mit Hilfe des Kompressionsprozesses
in einen komprimierten Datenstrom zur Ausgabe über den Ausgabebus 114 des
Output-FIFO 12 umzuwandeln.
Nach einer Ausbildung der Erfindung
enthält die
Modellierungseinheit 6 Aktualisierungskomponenten zur Einfügung sowohl
der vorläufigen
als auch der endgültigen
Informationen in das Wörterbuch
höherer
Ordnung, die bewirken, daß die
aktuelle Zeichenkette am Ausgang des Input-FIFO 8 den aktuellen
Status des Trie-Wörterbuchspeichers 4,
der das Wörterbuch
höherer
Ordnung enthält,
beeinflußt, wobei
die vorläufige
Information den Kompressionsprozeß für den Fall beschleunigt, daß das endgültige Update
mit dem vorläufigen
Update identisch ist und demzufolge dieses endgültige Update vermieden wird.
Es ist aber auch möglich, daß die Modellierungseinheit 6 Komponenten
zur parallelen Aktualisierung des Literal-Wörterbuches 2 enthält, wobei diese
von einem einzelnen Zeichen am Ausgang des Input-FIFO 8 bewirkt
wird und dann stattfindet, wenn das Literal-Wörterbuch 2 nicht in
der Lage ist, eine vorangegangene Codierung für das Zeichen am Ausgang des
Input-FIFO 8 zu finden, und der Trie-Wörterbuchspeicher 4 keinen
Internen Knoten NODE findet, der mit der aus mehreren Zeichen bestehenden Zeichenkette,
die aktuell im Input-FIFO 8 enthalten ist, übereinstimmt.
Sie kann aber auch Komponenten zur
parallelen Aktualisierung des Präfixes
des von der Codierungseinheit 7 verwendeten Codewortes
enthalten, wobei dieses Präfix
durch die Codierungseinheit 7 auf der Grundlage des internen
Status der Modellierungseinheit 6 aktualisiert wird und
auf der Anzahl unterschiedlicher Codeworte beruht, die durch die Modellierungseinheit 6 zur
Codierungseinheit 7 übertragen
wurden.
Eine weitere Möglichkeit besteht darin, daß sowohl
die Modellierungseinheit 6 als auch die Codierungseinheit 7 Aktualisierungskomponenten
besitzen, die die hochkompakte Codierung von Ausgangscodeworten
durchführen
und in Form von Speicherkomponenten in der Modellierungseinheit 6 vorhanden
sind, die auf den letzten vorhergehenden Internen Knoten NODE verweisen,
der im Trie-Wörterbuchspeicher 4 benutzt
wurde, und daß das
Ausgangscodewort, das zur Codierungseinheit 7 übertragen
wurde als Differenz des letzten vorangehenden genutzten Internen
Knotens NODE und des aktuellen, zu übertragenden Knotens gebildet
wird.
Die Modellierungseinheit 6,
die Codierungseinheit 7, die Ausrichtungseinheit 9 und
der Output-FIFO 12 können
aber auch Komponenten zur Koordination des Parallelbetriebes mit
unterschiedlichen und unabhängigen
Codeworten enthalten und damit eine Pipeline, beginnend mit der
Modellierungseinheit 6, bilden, wobei diese Komponenten aus
Speichern in der Modellierungseinheit 6, der Codierungseinheit 7,
der Ausrichtungseinheit 9 und dem Output-FIFO 12 bestehen,
die das Codewort vom Ausgang des vorangegangenen Blockes enthalten und
die das sich aus der Verarbeitung dieses Codewortes innerhalb der
jeweiligen Einheit ergebende modifizierte Codewort während des
nächsten
Pipelineschrittes an die nächste
Einheit in der Kompressionskette übertragen. Diese Pipeline ist
dabei dergestalt organisiert, daß ein Stillstand für die Modellierungseinheit 6 während des
Kompressionsvorgangs weitestgehend vermieden wird.
Nach einer Ausführungsform der Erfindung enthält die Dekompressionseinheit
zur Dekompression digitaler Datenblöcke als Bestandteil des gesamten
Datenkompressionssystems Komponenten zur Pufferung von Eingabe-Codeworten nach dem First-in-first-out-Verfahren,
wobei diese Eingabe-Codeworte
eine Codierung unterschiedlicher Länge für die ursprünglichen, nichtkomprimierten
Symbole fester Länge
repräsentieren.
Der Trie-Wörterbuchspeicher 403 und
das Literal-Wörterbuch 402 sind
dabei mit einer Modellierungseinheit 404, die Komponenten
für das
Zusammenwirken mit dem aus mehr als einer Speicherposition bestehenden
Trie-Wörterbuchspeicher 403 besitzt,
verbunden, die ihrerseits zum einen über einen Output-FIFO 406,
eine Interface-Einheit 409, einen Input-FIFO 410,
eine Ausrichtungseinheit 407 mit einer Decodierungseinheit 405 und
zum anderen mit einem Blockpuffer 408 und direkt mit der
Decodierungseinheit 405 verbunden ist. Die Ausrichtungseinheit 407,
die vom Input-FIFO 410 gelieferte und an Bytegrenzen ausgerichtete
Information in eine Codewortdarstellung variabler Länge umwandelt,
erzeugt ein Byte-organisiertes Datenformat für die Decodierungseinheit 405,
wobei sie Komponenten zum Empfang von Codeworten variabler Länge und
zusätzlich
Komponenten zur Bestimmung der korrekten Länge des Präfixes, der Knotennummer, des
Knotentyps und der relativen Übereinstimmungslänge mit
dem im Trie-Wörterbuchspeicher 403 existierenden
Knoten, der durch das Codewort beschrieben wird, oder umgekehrt
die korrekte Bitlänge
des Präfixes
und die relative Nummer des Einzelsymbols im Literal-Wörterbuch 402,
enthält. Die
Decodierungseinheit 405 enthält Komponenten zum Zusammenwirken
mit der Modellierungseinheit 404 und ermittelt auf der
Basis des Inhaltes der internen Register der Modellierungseinheit 404,
des aktuellen Zustandes des Trie-Wörterbuchspeichers 403 und
aus dem Codewort die richtige Knotennummer und die Position des
ersten Symbols sowie die absolute Übereinstimmungslänge, falls
das Codewort vom Node-Typ ist. Die Modellierungseinheit 404 ist auch
parallel mit dem Literal-Wörterbuch 402 verbunden.
Die Verbindung ist nötig,
um die durch das Literal-Wörterbuch 402 definierte
Code-Substitution zu übertragen,
falls das Codewort vom Literal-Typ ist und eine Komponente zum Ausführen einer
Multibyte-Kopieroperation enthält,
die entweder ein früher aufgetretenes
Symbol oder eine Zeichenkette aus der ermittelten Position im Blockpuffer
oder Output-FIFO 406 zu
der aktuellen Position im Output-FIFO 406 kopiert, wobei
der Output-FIFO 406 Komponenten zur temporären Speicherung
dieser an Bytegrenzen ausgerichteten Codeworte enthält, bis die
spezifizierte Breite des Ausgangsbusses erreicht wird und ein geeigneter
Zeitpunkt vorliegt, um die Ergebnisse der Dekompression über die
Interface-Einheit 409 zum Ausgangsspeicher zu übertragen.
Bei dieser Variante besitzt die Modellierungseinheit 404 Aktualisierungskomponenten,
die sowohl vorläufige
als auch endgültige
Knoten in den Trie-Wörterbuchspeicher 403 einfügen, wobei
die Knoten bewirken, daß die
aktuelle Zeichenkette im Ausgabespeicher oder dem entsprechenden
FIFO, die durch ein Feld Position 211 gekennzeichnet ist, den
aktuellen Status des Trie-Wörterbuchspeichers 403 beeinflußt, und
wobei die vorläufige
Information, die vorher durch die Modellierungseinheit 404 in
den Trie-Wörterbuchspeicher 403 geschrieben
wurde, den Verarbeitungsprozeß für den Fall
beschleunigt, daß die
endgültige
Aktualisierung mit der vorläufigen identisch
ist und demzufolge die endgültige
Aktualisierung vermieden wird.
Es ist aber auch möglich, daß die Modellierungseinheit 404 Aktualisierungskomponenten
für ein
paralleles Update des Literal-Wörterbuches 402 besitzt,
das von einem einzelnen, über
den entsprechenden Input-FIFO 410 adressierten Zeichen
ausgelöst
wird, wobei der Aktualisierungsprozeß stattfindet, wenn die Modellierungseinheit 404 feststellt,
daß kein
interner Knoten im Trie-Wörterbuchspeicher 403 durch
das aktuelle Codewort genutzt wird, das durch die Decodierungseinheit 405 geliefert
wird.
Weiterhin ist möglich, daß die Modellierungseinheit 404 Aktualisierungskomponenten
für eine
parallele Aktualisierung des Präfixes
des von der Decodierungseinheit 405 verwendeten Codewortes
besitzt, wobei das Präfix,
das durch die Decodierungseinheit 405 auf der Grundlage
des internen Status der Modellierungseinheit 404 und der
Anzahl der unterschiedlichen Codeworte aktualisiert wurde, durch die
Modellierungseinheit 404 zur Decodierungseinheit 405 übertragen
wird, wobei die Decodierungseinheit 405 einen selbstbalancierenden
Präfix-Baum verwendet
und dieser Baum dem am häufigsten
verwendeten Typ von Codeworten das kürzeste Präfix zuordnet.
Letztlich ist es aber auch möglich, daß der Input-FIFO 410,
die Ausrichtungseinheit 407, die Decodierungseinheit 405,
die Modellierungseinheit 404 und der Output-FIFO 406 Komponenten
zur Koordination des Parallelbetriebes mit unterschiedlichen und
unabhängigen
Codeworten enthalten und damit ein Pipelining, beginnend bei der
Ausrichtungseinheit 407, ausgeführt wird, wobei diese Komponenten
aus Speichern in der Modellierungseinheit 404, der Decodierungseinheit 405,
der Ausrichtungseinheit 407 und dem Output-FIFO 406 bestehen,
die das Codewort vom Ausgang des vorangegangenen Blockes für den nächsten Bearbeitungsschritt
speichern. Dabei ist die Pipeline so organisiert, daß das aus
der Verarbeitung des aktuellen Codewortes innerhalb der jeweiligen
Einheit ergebende modifizierte Codewort während des nächsten Pipelineschrittes an
die nächste
Einheit in der Kompressionskette übertragen wird. Durch diese
Organisation der Pipelinekette wird ein Stillstand für die Modellierungseinheit 404 während des
Dekompressionsvorgangs vermieden.
Abschließend zeigen 5 und 6 ein praktisches
Ausführungsbeispiel
für das
Kompressionsverfahren, das durch die beschriebene Schaltungsanordnung
ausgeführt
wird, das Kompressionsverfahren für die Eingabezeichenkette "abcabbcaacbcbcaacx".
Es gibt eine Eingabezeichenkette,
wobei die Position jedes Zeichens in dieser Zeichenkette numeriert
ist und die Zählung
mit Null beginnt. Als Startbedingung wird angenommen, daß sowohl
der Trie-Wörterbuchspeicher 4 als
auch das Literal-Wörterbuch 2 leer
sind (Standardbedingung für
die bevorzugte Schaltungslösung). 5 zeigt die schrittweise
Darstellung des Kompressionsprozesses. 6 enthält die äquivalente Zustandsdarstellung
des Trie-Wörterbuchspeichers 4,
die ebenfalls den aktuellen Verarbeitungsstand widerspiegelt.
Zunächst werden die beiden Anfangszeichen
der Kette a [Position 0] und b[1] untersucht (Hash-Funktion) um
zu bestimmen, ob im Trie-Wörterbuchspeicher 4 eine
Zeichenkette existiert, die mit ab beginnt. Während der Trie-Wörterbuchspeicher 4 Fehler
meldet, d.h. eine solche Zeichenkette nicht existiert, ergibt die
Suche nach dem Zeichen a im Literal-Wörterbuch 2, daß ein solches
Literal bisher nicht eingetragen ist. Es wird als Neues Literat
NLIT klassifiziert, mit einem 0-Bit-Präfix versehen und in originaler
Form [H61] übertragen.
Unterdessen wird der Blattknoten LEAF I gebildet und a bekommt das Codewort
0 im Literal-Wörterbuch 2 zugewiesen. Das
gleiche Verfahren wird für
b[1] und c[2] wiederholt, weil für
diese Anfangssymbole keine Übereinstimungen
im Trie-Wörterbuchspeicher 4 gefunden werden.
Für
die ab Position [3] beginnende Zeichenkette abb... wird eine Übereinstimmung
mit I gefunden, sie wird daher mit [0] verglichen. Der Vergleich liefert
als Ergebnis eine Übereinstimmung
von genau zwei Zeichen. Jetzt wird ein Blattknoten LEAF gebildet,
der I als den Zielknoten (2 Terminalknoten vor dem laufenden) und
2 Symbole als die Übereinstimmungslänge beschreibt.
Die Aktualisierung des Trie-Wörterbuchspeichers 4 erfolgt
durch Bildung eines ersten Internen Knotens NODE 1 mit
einer Tiefe von 2 durch Eintragung von 1 als Vater-Knoten von I und
die Bildung des neuen Blattknotens LEAF IV. Das gleiche Verfahren
wiederholt sich für
die Zeichenkette bcaa... auf Position [5], das eine Übereinstimmung
mit Knoten II (2 Terminalknoten zurück) und eine Übereinstimmung
von 3 Symbolen findet; gleichzeitig wird der Trie-Wörterbuchspeicher 4 durch
Bilden der Knoten 2 mit einer Tiefe von 3 sowie Knoten
V aktualisiert.
Für
das Paar a, c ab Position [8] kann keine Übereinstimmung im Trie-Wörterbuchspeicher 4 gefunden
werden. Jedoch ist das Symbol a bereits im Literal-Wörterbuch
gespeichert. Damit wird das Bekannte Literat KLIT 0 zum Decoder übertragen.
Das gleiche trifft auf c[9] zu, das als Bekanntes Literat KLIT 2 codiert
wird, da im Trie-Wörterbuchspeicher 4 keine Übereinstimmung
für die
Zeichenkette cb... gefunden wird.
Das Paar b, c auf Position [10, 11]
findet eine Trie-Übereinstimmung
mit dem Internen Knoten NODE 2, der auf Position [5] verweist,
aber die Übereinstimmung
ist zu kurz, um die Übereinstimmungslänge 3 zu
erreichen, die durch diesen Knoten repräsentiert wird. Folglich wird
ein Interner Knoten NODE 2 ausgegeben, zusammen mit einer
im Vergleich zum Vater-Knoten um 1 erhöhten Übereinstimmungslänge. Weil
der Vater-Knoten in diesem Fall das Symbol b mit einer Tiefe von
1 ist und weiterhin der Interne Knoten NODE nur für Übereinstimmungen
von zwei und mehr Zeichen gilt, wird nur ein Bit verwendet, um die
spezielle Übereinstimmungslänge 2 auszudrücken, und
zwar durch den Wert 0 (ein Wert 1 würde eine Übereinstimmung von 3 bedeuten, d.h.
die Tiefe des Knotens 2 selbst).
Als nächster Schritt wird die Zeichenkette bcaacx
[12] analysiert. Als erstes finden die durchgeführten Suchschritte im Trie-Wörterbuchspeicher 4 den
Knoten 3 und erreichen seine Tiefe von 2, dann den Knoten 2 und
erreichen seine Tiefe von 3, dann den Knoten V, die Suche beendend
mit einer Tiefe von 5. In diesem Fall wird ein Blattknoten LEAF
(–3, 2)
generiert als der Abstand bezüglich
des aktuellen Terminalknotens und einer Tiefendifferenz zum Vater-Knoten
von V (Knoten 2).
Das Beispiel endet mit der Codierung
von x [17] als NLIT und der Übertragung
von"0", [H78] zur Ausrichtungseinheit.
Man beachte, daß das Beispiel keine neue Ausbalancierung
des Präfix-Baumes
liefert und es die gleichen Startwerte für alle einbezogenen Codeworte
verwendet.
Auch das Verfahren zur Wandlung eines Blocks
von Eingabesymbolen in verschlüsselte
Ausgabecodeworte variabler Länge
in einem Datenblock-Kompressionssystem,
soll nochmals zusammenhängend
erklärt
werden. Die Eingangssymbole werden in einen Input-FIFO 8 übertragen.
Auf der Grundlage der ersten beiden Symbole am Ausgang des Input-FIFO 8 wird
eine Hash-Adresse
berechnet, die dazu benutzt wird, parallel im Trie-Wörterbuchspeicher 4 und
in der Zero-Finder-Lookup-Tabelle 3 zu suchen, um schnell
feststellen zu können,
ob ein Interner Knoten NODE oder ein Blattknoten LEAF im Trie-Wörterbuchspeicher 4 existiert.
Wenn die Suche im Trie-Wörterbuchspeicher 4 einen
Internen Knoten NODE feststellt, der in mehr als einem Zeichen mit der
Zeichenkette im Input-FIFO 8 übereinstimmt, wird die Multi-Byte-Suche
iterativ fortgesetzt, bis die längste Übereinstimmung
der Eingangszeichenkette im Input-FIFO 8 mit existierenden Knoten
des Trie-Wörterbuchspeichers 4 gefunden
ist. Dieser Prozeß wird
wiederholt, bis kein übereinstimmender Knoten
mehr gefunden wird. Die Knotennummer wird in relativer Form bezüglich des
letzten gebildeten Knotens codiert und das Codewort wird entweder
als Interner Knoten NODE oder als Blattknoten LEAF im Trie-Wörterbuchspeicher 4 identifiziert.
Die zur Codierungseinheit übertragene Übereinstimmungslänge wird
in differentieller Form bezüglich
des letzten bei der Suche durchlaufenen Knotens berechnet. Wenn
die Suche im Trie-Wörterbuchspeicher 4 keinen
Internen Knoten NODE feststellt, der in mehr als einem Zeichen mit
der Zeichenkette im Input-FIFO 8 übereinstimmt, wird über das
Literal-Wörterbuch 2 festgestellt,
ob das Codewort durch ein Bekanntes Literal KLIT und damit durch
den Code variabler Länge dargestellt
werden kann, der dem Zeichen bei seinem früheren Auftreten zugewiesen
wurde. Anderenfalls wird das Zeichen als Neues Literal NLIT identifiziert
und wird in der Originalform dargestellt, wenn es noch nicht im
Literal-Wörterbuch 2 enthalten
ist. Jedem Codewort-Typ wird ein Präfix variabler Länge entsprechend
dem verwendeten Typ des Codeworts zugewiesen, wobei dieses Präfix über einen
selbstbalancierenden Präfix-Baum
auf der Grundlage der kumulierten, aktuellen Zählwerte für die unterschiedlichen Codewort-Typen ermittelt
wird. Dabei wandelt sich das sich ergebende Codewort variabler Länge über eine
Ausrichtungsoperation in ein an Bytegrenzen ausgerichtetes Ausgabeergebnis
um, die ausgerichteten Ausgabe-Codeworte im Output FIFO 12 werden
gespeichert und dort zu Gruppen zusammenfaßt, um eine effiziente Schreiboperation
auf das endgültige
Speichermedium hinsichtlich Zeitpunkt und Busbreite durchführen zu
können.
Auf diese Weise wird aus einem nicht komprimierten Block von Eingangssymbolen
eine komprimierte Darstellung in Form eines Blocks von Ausgabe-Codeworten
erzeugt.
Dabei ist es vorteilhaft, wenn sowohl
für den Trie-Wörterbuchspeicher 4 als
auch für
das Literal-Wörterbuch 2 dynamische
Wörterbücher verwendet
werden und wenn zusätzliche
Schritte zur Aktualisierung des Trie-Wörterbuchspeichers 4 und
des Literal-Wörterbuchs 2 enthalten
sind. Es wird eine Datenstruktur im Trie-Wörterbuchspeicher 4 erzeugt, bei
der Interne Knoten NODE und Blattknoten LEAF nebeneinander im selben
Wörterbuch
existieren. Die Blattknoten LEAF beginnen dabei bei 1 und werden aufwärts gezählt, die
Internen Knoten NODE beginnen mit der höchsten Zahl und werden abwärts gezählt, wobei
beide Knotenarten nicht miteinander kollidieren. Wenn die Suche
im Trie-Wörterbuchspeicher 4 einen
Internen Knoten NODE feststellt, der in mehr als einem Zeichen mit
der Zeichenkette im Input-FIFO 8 übereinstimmt, jedoch in der
exakten Länge
mit jedem in dem Suchpfad vorhandenen Knoten nicht übereinstimmt,
wird dieses Wörterbuch
durch Erzeugen eines neuen Internen Knotens NODE aktualisert. Der
Zählerstand
für die
Zahl der Internen Knoten NODE wird um 1 erniedrigt, und es wird
ein neuer Blattknoten LEAF gebildet. Diesem neuen Blattknoten LEAF
wird als Tiefe der Wert der Maximallänge dieser Zeichenkette zugewiesen
und es erfolgt abschließend
ein Erhöhen
des Endknotenzählers
um 1. Wenn die Suche im Trie-Wörterbuchspeicher 4 einen Internen
Knoten NODE feststellt, der in mehr als einem Zeichen mit der Zeichenkette
im Input-FIFO 8 übereinstimmt
und gleichzeitig in der exakten Länge mit einem im Suchpfad vorhandenen
Knoten übereinstimmt,
werden Schritte zur Aktualisierung des erreichten Knotens durchgeführt, wobei
dieser erreichte Knoten in seinem Positionsfeld den aktuellen Positionszeiger
im Eingabedatenspeicher erhält.
Dieses Verfahren wird ebenfalls ausgeführt wird, wenn es sich bei
dem Internen Knoten NODE nicht um einen Blattknoten LEAF handelt
und in diesem Fall Schritte zur Erzeugung eines neuen Blattknotens
LEAF erfolgen, wobei dieser neue Blattknoten LEAF in seinem Positionsfeld
den aktuellen Positionszeiger im Eingabedatenspeicher erhält, wobei
abschließend
ein Hochzählen
des Endknotenzählers
erfolgt. Wenn die Suche im Trie-Wörterbuchspeicher 4 höherer Ordnung
keinen Internen Knoten NODE feststellt, der in mehr als einem Zeichen
mit der Zeichenkette im Input-FIFO 8 übereinstimmt, wird ein neuer
Blattknoten LEAF in diesem Wörterbuch
erzeugt, wobei dieser neue Blattknoten LEAF die maximale Länge erhält. Abschließend erfolgt
dann ein Hochzählen
des Endknotenzählers.
Das Verfahren wird auch ausgeführt, wenn
das Eingabezeichen am Ausgang des Input-FIFO 8 nicht im
Literal-Wörterbuch 2 enthalten ist,
wobei das Verfahren die Schritte zur Aktualisierung des Literal-Wörterbuches 2 beinhaltet,
indem dem Eintrag, der dem Eingangssymbol entspricht, die Anzahl
der bisher in diesem Block empfangenen neuen Symbole zugewiesen
wird. Schließlich
wird der Zähler
für die
bekannten Symbole um eins erhöht.
Eine Ausbildungsform des Verfahrens
sieht vor, daß zur
Decodierung des ursprünglichen
Datenblocks aus einem codierten Block von Codeworten die in Bytes
ausgerichteten Codeworte in den Input-FIFO 8 eingetragen
werden, daß der
Input-FIFO 8 diese byteausgerichteten Codeworte fester
Länge in
solche variabler Länge
rückkonvertiert
und diese als Eingangsgröße für den Decodierungsschritt
zur Verfügung
stellt, indem diese Codeworte auf der Grundlage des in dem betreffenden
Codewort enthaltenen dynamischen Präfixes einem Neuen Literal NLIT,
einem Bekannten Literal KLIT, einem Internen Knoten NODE oder einem
Blattknoten LEAF zugeordnet werden. Dieses Verfahren wird ausgeführt, wenn
das Codewort als Neues Literal NLIT erkannt wird und ein einzelnes
Symbol im Codewort vorhanden ist, das direkt dem Output-FIFO 12 zugeleitet wird,
oder wenn das Codewort als Bekanntes Literal KLIT erkannt wird und
ein einzelnes Symbol vom Codewort über das Literal-Wörterbuch 2 rückübersetzt und
dem Output-FIFO 12 zugeleitet wird, oder wenn das Codewort
vom Typ her entweder ein Interner Knoten NODE oder ein Blattknoten
LEAF im Trie-Wörterbuchspeicher 4 ist.
Dabei liest das Verfahren aus dem Trie-Wörterbuchspeicher 4 den
Vater-Knoten des betreffenden Internen Knotens NODE, um die frühere Blockposition
zu bestimmen, an der eine ähnliche
Zeichenkette im Output-FIFO 12 existiert sowie die Knotentiefe
an den Decoder zurückliefert,
der die Anzahl der für
die Darstellung der relativen Länge
benötigten
Bits und den eigentlichen relativen Wert selbst berechnet. Die Berechnung
erfolgt, indem diese relative Länge
zum vorbezeichneten Vater-Knoten
des Internen Knotens NODE addiert wird, und auf diese Weise die
Parameter für
die Durchführung
der/des stattfindenden Kopier-Schrittes) für mehrere Zeichen ermittelt
werden. Dieser Kopiervorgang enthält alle Schritte, um von der
Position, die durch das Positionsfeld dieses decodierten Internen
Knotens NODE beschrieben wird, so viele Symbole in den Output-FIFO 12 zu
kopieren, wie durch die vorbezeichnete absolute Länge der
Kopie bestimmt ist. Dabei werden alle diese Schritte wiederholt,
bis keine weiteren Codeworte zu decodieren sind und auf diese Weise
der ursprüngliche
Symbolblock aus dem komprimierten Block von Codeworten wiederhergestellt
wird.
Es ist aber auch möglich, die
dynamischen Wörterbücher sowohl
für den
Trie-Wörterbuchspeicher 4 als
auch für
das Literal-Wörterbuch 2 bei
der Dekompression zu nutzen, wobei zusätzliche Schritte zur Aktualisierung
des Trie-Wörterbuchspeichers 4 und
des Literal-Wörterbuchs 2 enthalten
sind. Wenn ein Codewort extrahiert wird, das einem Einzelzeichen
entspricht, das in den Output-FIFO 12 übertragen
werden soll, wird der Trie-Wörterbuchspeicher 4 höherer Ordnung
durch Bildung eines neuen Blattknoten LEAF aktualisiert. Dieser
neue Blattknoten LEAF erhält
in seinem Positionsfeld den aktuellen Positionszeiger im Output-FIFO 12 und
im Feld Zählerwert
die maximale Länge.
Abschließend
erfolgt ein Hochzählen
des Endknotenzählers.
Gleichzeitig wird festgestellt, ob das decodierte Symbol nicht bereits im
Literal-Wörterbuch 2 enthalten
ist. In diesem Fall wird zusätzlich
ein Aktualisierungsschritt im Literal-Wörterbuch 2 durchgeführt, bei
dem dem Symbol an seiner zugehörigen
Adresse die Zahl der bisher im Block neu empfangenen Zeichen entsprechend
dem aktuellen Zählerwert
zugewiesen wird. Schließlich wird
dieser Zähler
um eins erhöht.
Wenn ein Codewort extrahiert wird,
das einem Internen Knoten NODE im Trie-Wörterbuchspeicher 4 entspricht,
aber die absolute Längenübereinstimmung,
berechnet aus der Summe der Länge
dieses Codewortes und der Tiefe des Vater-Knotens, nicht mit der Knotentiefe dieses
Knotens selbst übereinstimmt,
wird der Trie-Wörterbuchspeicher 4 durch Bildung
eines neuen Blattknotens LEAF aktualisiert, wobei dieser neue Blattknoten
LEAF in seinem Positionsfeld den aktuellen Positionszeiger im Eingabedatenspeicher
erhält.
Abschließend
erfolgt ein Hochzählen
des Endknotenzählers.
Es wird ein neuer Internen Knoten NODE gebildet, wobei dieser neue
Interne Knoten NODE in seinem Positionsfeld den aktuellen Positionszeiger
im Output-FIFO 12 erhält. Diesem
neuen Internen Knoten NODE wird als Tiefe die absolute Übereinstimmungslänge der
Zeichenkette zugewiesen, die beim Decodierungsprozeß berechnet
wurde. Abschließend
erfolgt ein Herunterzählen
des Zählers
für die
Zahl der Internen Knoten NODE um eins.
Wenn ein Codewort extrahiert wird,
das einem Internen Knoten NODE im Trie-Wörterbuchspeicher 4 entspricht
und die absolute Längenübereinstimmung,
berechnet aus der Summe der Länge
dieses Codewortes und der Tiefe des Vater-Knotens, mit der Knotentiefe dieses
Knotens selbst übereinstimmt,
wird der Trie-Wörterbuchspeicher 4 durch
Bildung eines neuen Blattknotens LEAF aktualisiert, wobei dieser
neue Blattknoten LEAF in seinem Positionsfeld den aktuellen Positionszeiger
im Output-FIFO 12 erhält.
Abschließend
erfolgt ein Hochzählen
des Endknotenzählers.
Es gibt verschiedene Ausbildungsformen des
Verfahrens hinsichtlich der Aktualisierung der Präfixe. Unter
Verwendung dynamischer Präfixe
können
sowohl während
der Kompression als auch während
der Dekompression die Präfixe
der Codewort-Typen aktualisiert werden. Die Präfixe können aktualisiert werden, sobald
irgendeiner der zu den Elementen der Paare [Bekanntes Literal KLIT,
Blattknoten LEAF] und [Neues Literal NLIT, Interner Knoten NODE]
gehörenden
Zähler
größer wird
als der Zählerstand
des anderen Elementes des Paares und dieses größere Element nun die kürzere für das Paar zur
Verfügung
stehende Codierung erhält
und dieses Element nun mit dem größten Element des anderen Paares
verglichen und wiederum dem größten Element
die kürzere
Codierung zugewiesen wird, wodurch der Präfix-Baum sich selbst ausbalanciert,
um das kürzere
Präfix
dem häufiger
aufgetretenen Codewort-Typ zuzuweisen.
Es ist aber auch möglich, die
Initialwerte für die
Präfixe
Neues Literal NLIT => 0
(1 Bit), Bekanntes Literal KLIT => 10
(2 Bits), Blattknoten LEAF => 110 (3
Bits) und Interner Knoten NODE => 111
(3 Bits) zu definieren, wobei diese Präfixe während des Kompressions- und
Dekompressionsvorgangs dynamisch modifiziert werden, oder die Initialwerte
für die
Präfixe
im statischen Fall wie folgt zu definieren: Neues Literat NLIT KLIT
=> 110 (3 Bits), Bekanntes
Literat => 0 (1 Bit),
Blattknoten LEAF => 10
(2 Bits, Interner Knoten NODE => 111
(3 Bits).