-
Die
vorliegende Erfindung betrifft einen Decodierer für variable
Wortlänge
(VDL) und insbesondere einen Decodierer für einen Code mit variabler Länge, der
zum Decodieren komprimierter Bilddaten geeignet ist.
-
HINTERGRUND
DER ERFINDUNG
-
In
letzter Zeit sind auf dem Gebiet der Technik der Bilddatenkomprimierung
beträchtliche
Fortschritte erzielt worden. Die Aufgabe dieser Techniken besteht
darin, die Wirksamkeit z. B. der digitalen Übertragung und Aufzeichnung
zu verbessern, indem die Bilddaten bei einer Bitrate codiert werden, die
kleiner ist als jene, die für
nicht codierte Bilddaten erforderlich wäre. Beispielhafte Techniken,
die verwendet worden sind, um die Wirksamkeit der Codierung zu erreichen,
sind die prädiktive
Codierung und die Transformationscodierung.
-
Eine
weitere Bilddaten-Komprimierung kann außerdem erreicht werden, indem
an dem komprimierten Code eine Codierung mit variabler Länge ausgeführt wird.
Die Codierung mit variabler Länge enthält das Ändern der
codierten Bitbreite gemäß der Häufigkeit
des Auftretens des zu codierenden Wertes. Typischerweise werden
Werte, die mit einer größeren Häufigkeit
auftreten, kürzeren
Codes zugewiesen als Werte, die mit einer geringeren Häufigkeit auftreten.
Dadurch kann im Vergleich zur Codierung mit fester Wortlänge eine
kleinere Bitrate erhalten werden. Ein Beispiel eines Codes mit variabler
Länge ist
ein Huffman-Code.
-
Codewörter mit
variabler Länge
(VLCs) werden typischerweise unter Verwendung einer Nachschlagtabelle
(LUT) decodiert. Ein paralleles n-Bit-Datensignal wird zu der LUT
geschaltet. Das n-Bit-Signal enthält ein Codewort mit variabler
Länge (dessen
Länge n
Bits betragen kann), das als eine Adresse für in der LUT gespeicherte Daten
verwendet wird. Die in der LUT gespeicherten Daten entsprechen der
Codelänge
und dem Codewert. Die Codelänge
legt die Länge
des Codeworts mit variabler Länge
fest, das in dem n-Bit-Signal identifiziert wurde. Der Codewert
ist der decodierte Wert (d. h. die feste Länge) des Codes mit variabler
Länge.
Die Ausgangssignale der LUT sind die Codelänge und der Codewert.
-
In
den Vereinigten Staaten ist eine Norm für digital codierte Signale
des hochauflösenden
Fernsehens vorgeschlagen worden. Diese Norm ist im Wesentlichen
gleich der MPEG-2-Norm, die von der Moving Pictures Expert Group
(MPEG) der Internationalen Organisation für Normung (ISO) vorgeschlagen wurde.
Diese Norm wird nachfolgend als die "MPEG-Norm" bezeichnet. Diese Norm ist in einer Veröffentlichung
des Entwurfs einer internationalen Norm (DIS) mit dem Titel "Information Technology-Generic
Coding of Moving Pictures and Associated Audio", Empfehlung N.262 ISO/IEC 13818-2: 1995
(E) beschrieben, die von der ISO zur Verfügung gestellt wird und hier
wegen ihrer Erkenntnisse in Bezug auf die digitale MPEG-2-Videocodiernorm
durch Literaturangabe eingefügt
ist.
-
Als
ein Beispiel, wie die MPEG-Norm die Codierung mit variabler Wortlänge verwendet,
werden die Codetabellen B-14 und B-15, die im Anhang B der MPEG-2-Norm definiert sind,
betrachtet. In dieser Codetabelle sollen Codewörter mit variabler Länge mit
einer maximalen Größe von 17
Bits decodiert werden. Jeder Code entspricht einer entsprechenden unterschiedlichen
Kombination von "Run"- und "Level"-Werten (Lauf- und
Pegel-Werte), wobei der Run-Wert die Anzahl von Nullkoeffizienten,
die einem von null verschiedenen Koeffizienten vorhergehen, in der
Abtastreihenfolge ist und der Level-Wert der absolute Wert des von
null verschiedenen Koeffizienten ist.
-
Videodecodierer
für MPEG-2-Hochauflösungsfernsehen
(NDTV) erfordern eine sehr große Decodierrate.
Obwohl viele Bereiche in dem komprimierten Bitstrom mit variabler
Länge codiert
sind, umfassen etwa 85 % des Bitstroms eine Koeffizientendecodierung
mit diskreter Kosinus-Transformation (DCT). Der HDTV-Bitstrom erfordert
das Decodieren von Codes mit variabler Länge in der Größenordnung von
100 Millionen pro Sekunde. Wird zu einem Zeitpunkt ein einzelner
Code decodiert, wäre
somit ein 100 MHz-Takt erforderlich, der jenseits der praktischen
Einschränkungen
von gegenwärtig
verfügbaren
hochintegrierten ASICs liegen. Die Alternative besteht darin, mehrere
Codes pro Taktzyklus zu decodieren.
-
Ein
Verfahren zum Decodieren von mehreren Codes enthält die Verwendung von zwei
VLDs, die tandemartig betrieben werden. Der Nachteil dieses Lösungsansatzes
besteht darin, dass auf Grund der Tatsache, dass die Daten im Schichtformat
vorliegen, die Länge
jeder Schicht vor dem Decodieren unbekannt ist, wobei die beiden
parallelen Pfade an separaten Schichten arbeiten müssen, was
eine Vorverarbeitung und einen Speicher erfordert, um die Schichten
abwechselnd zu trennen.
-
Die
US-Patentschrift Nr.5.428.356 an Ozaki ist hier ausdrücklich wegen
ihrer Erkenntnisse in Bezug auf einen VLD unter Verwendung einer
vorgegebenen, mit Prioritäten
versehenen Decodieranordnung durch Literaturhinweis eingefügt. Der
VLD von Ozaki enthält
eine erste Decodiererschaltung zum Decodieren eines vorhergehenden
Huffmann-Codes einer Huffmann-Codefolge und eine zweite Decodiererschaltung
zum Decodieren einer fortlaufenden Folge aus zwei vorgegebenen Huffman-Codes
aus dem ersten Abschnitt der Huffman-Codefolge. Der erste Decodierer
verwendet eine LUT, wie oben beschrieben wurde. Der zweite Decodierer
verwendet eine LUT, bei der jedes von einer festen Anzahl von vorgegebenen
Codewortpaaren als eine Adresse für in der LUT gespeicherte Daten
verwendet wird. Die in der LUT gespeicherten Daten entsprechen Paaren
aus Codelängen-
und Codewert-Paaren. Wenn eines der vorgegebenen Codewortpaare in
dem Eingangsstrom auftritt, werden die entsprechenden Codelängenpaare
und Codewertpaare vom zweiten Decodierer ausgegeben. Wenn der zweite
Decodierer zwei decodierte Werte ausgibt, wählt ein Wähler den Ausgang des zweiten
Decodierers. Wenn der zweite Decodierer keine zwei decodierten Werte
erzeugt, wählt der
Wähler
den Ausgang des ersten Decodierers.
-
Der
VLD des Patents an Ozaki ist dahingehend beschränkt, dass der zweite Decodierer
lediglich eine begrenzte Anzahl von vorgegebenen Kombinationen aus
zwei Folgen decodieren kann. Der zweite Decodierer decodiert im
Einzelnen lediglich ausgewählte
Paare von Codes, für
die das Paar eine kurze Gesamtlänge
hat. Mehrere Taktzyklen sind erforderlich, wenn Folgen mit größeren Längen vorkommen.
Da die Huffman-Codes im Allgemeinen so gewählt werden, dass die Codes
mit geringer Häufigkeit
größere Längen haben,
wird der zweite Decodierer von Ozaki keine Codepaare decodieren,
die Codes mit geringerer Häufigkeit
enthalten, und es sind mehrere Taktzyklen erforderlich.
-
Darüber hinaus
benötigt
der VLD von Ozaki einen großen
Speicher, da eine n-Bit-Adresse
als eine Eingabe an die LUT bereitgestellt werden muss. Außerdem speichert
jede Speicherstelle in der LUT eine z Bit-Codelänge und einen v Bit-Codewert. Folglich
werden insgesamt z + v Bits benötigt,
um die Codelänge
und den Codewert zu speichern. Die Gesamtanzahl der für die LUT
benötigten
Bits beträgt 2n*(z + v).
-
Es
sind demzufolge Vorschläge
gemacht worden, um die Größe der Umsetzungstabellen
zu begrenzen, damit die erforderliche Speichergröße für die Umsetzungstabelle verringert
werden kann. Diese Techniken haben jedoch einen langsameren Decodierungsvorgang
zur Folge.
-
Das
Patent
JP 07.249.994 offenbart
eine Huffman-Code-Decodierschaltung, bei der eine 32-Bit-Huffman-Code-Datenfolge
in einen ersten Bitentscheidungsabschnitt eingegeben wird, in dem
der anfängliche
Wert das erste Bit der eingegebenen 32 Bits der Huffman-Code-Datenfolge
ist und die 32 Bits von dem ersten Bit ausgegeben werden. 16 Bits
werden in den Adresseneingang jeder Decodierungstabelle eingegeben.
In der Decodierungstabelle werden die 16 Bit-Datenfolgen von dem
ersten Bit eingegeben. In diesem Fall werden das Decodierungswort und
die Codelänge
als Ausgabe eingestellt und das Signal wird ausgegeben und als ein
Auswahlsignal zu einem Wähler
gesendet. Andererseits werden die 16 Bit-Huffman-Code-Datenfolgen von einer Decodierungstabelle
in eine Tabelle eingegeben und zu dem Wähler gesendet. Die beiden Decodierungswörter werden
durch Wiederholen der Operation decodiert.
-
KURZBESCHREIBUNG
DER FIGUREN
-
1 ist
ein Blockschaltplan eines beispielhaften Decodierers mit Decodierkoeffizienten
mit variabler Länge;
-
2 ist
ein Blockschaltplan der VLD-Längendecodierschleife
des Decodierers mit variabler Länge
von 1;
-
3 ist
ein Blockschaltplan der in 2 gezeigten
Steuerlogik;
-
4 ist
ein Blockschaltplan des in 1 gezeigten
Run/Level-Decodierers (Lauf-/Pegel-Decodierer); und
-
5 ist
ein Blockschaltplan einer zweiten beispielhaften VLD-Längendecodierschleife,
die in dem in 1 gezeigten Decodierer mit variabler Wortlänge verwendet
werden kann.
-
BESCHREIBUNG
DER BEISPIELHAFTEN AUSFÜHRUNGSFORM
-
Übersicht
-
1 ist
ein Blockschaltplan eines beispielhaften Koeffizientendecodierers 100 mit
Decodierer mit variabler Wortlänge
(VLD), bei dem die vorliegende Erfindung verwendet werden kann.
Die vorliegende Erfindung ist eine Längendecodierschleife 110 mit Decodierer
mit variabler Wortlänge
(VLD), der jede mögliche
Kombination aus zwei aufeinanderfolgenden codierten Datenwerten
in einem einzigen Taktzyklus decodieren kann. In dem Beispiel von 1 wird die
Erfindung zum Decodieren der Länge
der DCT-Koeffizienten (die bis zu etwa 85 % des codierten Datenstroms
ausmachen) verwendet. Ein Fachmann wird erkennen, dass die Erfindung
außerdem verwendet
werden kann, um andere mit variabler Länge codierte Datenwerte, wie
etwa die höhere Syntax
oder einen anderen mit variabler Länge codierten Wert, zu decodieren.
-
2 ist
ein Blockschaltplan der VLD-Längendecodierschleife 110,
die in 1 gezeigt ist. Die beispielhafte Vorrichtung 110 der
Längendecodierschleife
enthält
eine Verschiebeeinrichtung 206, um mit variabler Länge codierte
Datenwerte an einen Decodierer 210 der ersten Länge zu übertragen.
Der Decodierer 210 der ersten Länge führt eine Decodieroperation
aus, um eine Länge
211 eines ersten Datenwertes der codierten Datenwerte zu bestimmen.
-
Die
Decodierungsmittel 212 der zweiten Länge sind geschaltet, um codierte
Datenwerte vom Schieber-Multiplexer 206 zu empfangen, um
eine zweite Decodier operation auszuführen, um einzeln eine Länge eines
zweiten codierten Datenwertes zu bestimmen, der dem ersten codierten
Datenwert direkt folgt. Die erste und die zweite Decodieroperation werden
gleichzeitig ausgeführt.
Die Decodierungsmittel 212 der zweiten Länge enthalten
mehrere Decodierer 212a bis 212p, wobei für jede entsprechende
mögliche
Länge des
ersten codierten Datenwertes ein Decodierer vorhanden ist. Alle
Decodierer 212a bis 212p bestimmen gleichzeitig
eine Länge 213a bis 213p des
zweiten codierten Datenwertes, wobei jeweils eine entsprechende
unterschiedliche Länge
des ersten codierten Datenwertes angenommen wird. Dann verwendet
der Decodierer 214 der kombinierten Länge die tatsächliche
decodierte Länge 211 des
ersten Datenwertes, um eine der decodierten Längen 213a bis 213p,
die von den Decodierern 212a bis 212p ausgegeben
werden, auszuwählen
und ein Signal L3 der kombinierten Länge auszugeben.
-
Eine
Verschiebungssteuereinheit, die die Blöcke 218, 222, 234 und 236 enthält, ist
geschaltet, um die kombinierte Länge
von dem Decodierer 214 der kombinierten Länge zu empfangen,
um ein Verschiebungs-Steuersignal 235 zu bilden, das verwendet
wird, um festzulegen, welche der mehreren codierten Datenwerte an
die Decodiermittel der ersten und der zweiten Länge übertragen werden. Das Verschiebungs-Steuersignal 235 wird
an die Verschiebungseinrichtung 206 übertragen.
-
Weitere
Einzelheiten der beispielhaften VLD-Längendecodierschleife 110 werden
später
bei Bezugnahme auf 2 genau dargestellt.
-
Genaue Beschreibung
-
Ausreichende
Kenntnisse der Empfehlung N.262 ISO/IEC 13818-2: 1995 (E) "Information Technology-Generic
Coding of Moving Pictures and Associated Audio Information: Video" (die nachfolgend
als "die MPEG-Norm" bezeichnet wird)
werden vorausgesetzt und werden an dieser Stelle nicht wiederholt.
-
In 1 empfängt eine
VLD-Längendecodierschleife 110 den
komprimierten 48 Bit-Eingangsdatenstrom
DATA_IN 111, der die codierten Daten enthält. Zusätzliche
Eingangssignale (MAKROBLOCK_INTRA, LUMA/CHROMA, INTRA_VLC_FORMAT,
TEST_MODE, HOLD, RESTART und EXTERNAL_MUX_POSITION), die an die VLD-Längendecodierschleife 110 bereitgestellt werden,
werden später
unter Bezugnahme auf 3 genauer beschrieben. Der Merker MAKROBLOCK_INTRA
wird im Abschnitt 6.3.17.1 sowie in den Tabellen B-2 bis B-8 der
MPEG-Norm definiert; der Merker LUMA/CHROMA gibt an, ob der empfangene
Block ein Luminanz- oder Chrominanzblock ist; und der Wert INTRA_VLC_FORMAT
ist in der Bildcodierungserweiterung festgelegt, die im Abschnitt
6.2.3.1 der MPEG-Norm festgelegt ist.
-
Die
VLD-Längendecodierschleife 110 bestimmt
die Längen
von zwei aufeinanderfolgenden Datenwerten während jedes Taktzyklus. Die
Länge des
ersten decodierten Datenwertes wird durch L1 angegeben und die kombinierte
Länge des
ersten und des zweiten Datenwertes wird durch L3 angegeben. Eine
Teilmenge 112 der Eingangsdaten 111 und die decodierten
Längenwerte
L1 und L3 werden an den VLD-Run/Level-Decodierblock 120,
den VLD-Decodierblock 130 für interne DC-Koeffizienten und
den Ausgabesteuerblock 140 übertragen.
-
Die
VLD-Längendecodierschleife 110 liefert Signale
B14 und B15 an die VLD-Run/Level-Decodierfunktion 120,
die festlegen, welche LUT bei der Run/Level-Decodierung zu verwenden sind. Das Signal
B14 gibt an, dass die LUT der DCT-Koeffiziententabelle null (wie in der
MPEG-Norm, Anhang B, Tabelle B-14 festgelegt ist) verwendet wird.
Das Signal B15 gibt an, dass die Informationen der DCT-Koeffiziententabelle
eins (wie in der MPEG-Norm, Anhang B, Tabelle B-15 festgelegt ist)
verwendet wird. Diese zuletzt genannten Tabellen werden nachfolgend
als "Tabelle B-14" bzw. "Tabelle B-15" bezeichnet. Die
Tabellen B14 und B15 legen den Run-Wert und den Level-Wert (Laufwert
und Pegelwert) für
jeden VLC fest (mit Ausnahme für
escape-codierte Werte, für
die Run- und Level-Werte durch die Tabelle B-16 festgelegt werden).
-
Wenn
der decodierte Wert eines Koeffizienten (der in Tabelle B-14 oder
B-15 identifiziert wurde) die Folge "Blockende" ist, gibt es keine weiteren Koeffizienten
in dem Block. Die VLD-Längendecodierschleife 110 erfasst
die Blockende-Folge und liefert ein Signal END_OF_BLOCK an die Ausgabesteuerfunktion 140.
-
Der
VLD-Run/Level-Decodierblock 120 empfängt die Eingangsdaten, die
Längen
L1 und L3, die Tabelle B14 und die Tabelle B15. Der VLD-Run/Level-Decodierblock 120 verwendet
diese Informationen, um decodierte Werte zu bestimmen. Für DCT-Koeffizienten, die
von DC-Intern-Koeffizienten verschieden sind, bestimmt der VLD-Run/Level-Decodierblock 120 den
Run-Wert und den Level-Wert (gemäß Definition
in der MPEG-Norm, Absatz 3.79 und 3.119) für jeden der beiden VLCs in
den Eingangsdaten. Diese Werte werden mit RUN_1, LEVEL_1, RUN_2
bzw. LEVEL_2 bezeichnet. Die Bestimmung der decodierten Werte erfolgt
anhand einer der Tabellen B14 und B15, wobei die anwendbare Tabelle
für einen
vorgegebenen Block in Übereinstimmung
mit der Tabelle 7-3 der MPEG-Norm festgelegt wird.
-
Viele
mögliche
Kombinationen der Werte Run und Level besitzen für ihre Darstellung keinen Code
mit variabler Länge
(VLC). Um diese statistisch seltenen Kombinationen zu codieren,
wird das Verfahren der Escape-Codierung verwendet, das in der MPEG-Norm,
Absatz 7.2.2.3 festgelegt ist. Gemäß diesem Verfahren folgt einem
Escape-VLC ein 6 Bit-Code mit fester Länge, der dem Run-Wert entspricht,
dem dann ein 12 Bit-Code mit fester Länge folgt, der den Wert des
bezeichneten Levels angibt. Wenn der codierte Datenwert den "Escape-Code" enthält, liefert
der VLD-Run/Level-Decodierblock 120 Run-
und Level-Werte gemäß Definition
in der MPEG-Norm,
Anhang B, Tabelle B-16. Die Erfassung eines Escape-Codes wird in 1 durch
die Signale ESC_1 und ESC_2 angegeben und die decodierten Werte
werden durch die Variablen RUN_1_ESC, LEVEL_1_ESC, RUN_2_ESC, LEVEL_2_ESC
angegeben. Es wird angemerkt, dass der Escape-Code trotzdem ein
VLC ist und ein Escape-Code erscheint in jeder der LUTs von B14
und B15, obwohl die Run- und Level-Werte für Werte des Escape-Codes feste Längen besitzen,
ist der Escape-Code,
der den Run- und Level-Werten vorhergeht, ein VLC.
-
Bei
dem beispielhaften Koeffizienten-Decodierer decodierte eine separate
VLD-Intern-DC-Koeffizientendecodierfunktion 130 den
ersten VLC eines intern codierten Blocks (d. h. den DC-Koeffizienten, für den die
Häufigkeit
in beiden Dimensionen null ist). Wenn der erste VLC in einem Block
von der VLD-Längendecodierschleife 110 empfangen
wird, wird das Ausgangssignal COEF_1 eingestellt. Wenn sowohl COEF_1
als auch MACROBLOCK_INTRA eingestellt wurden, wird die VLD-Intern-DC-Koeffizientendecodierfunktion 130 freigegeben.
Die VLD-Intern-DC-Koeffizientendecodierfunktion 130 decodiert den
DC-Koeffizienten unter Verwendung der ausgewählten Daten und der Länge des
ersten decodierten Datenwertes, der durch die Längendecodierschleifen 110 geliefert
wird. Die Werte dct_dc_size, die durch die VLD-Intern-DC-Koeffizientendecodierfunktion 130 decodiert
werden, sind in der MPEG-Norm, Anhang B, Tabelle B-12 und B-13 festgelegt.
Wenn der Block ein Luminanz-Block ist, werden die Werte dct_dc_size
von Tabelle B-12 verwendet. Wenn der Block ein Chrominanz-Block
ist, werden die Werte dct_dc_size von Tabelle B-13 verwendet.
-
Wenn
der decodierte Wert von dct_dc_size nicht null ist, folgt dem VLC
ein Code fester Länge dc_dct_differential.
Die Länge
von dc_dct_differential ist die Bitlänge von dct_dc_size. Ein Differentialwert wird
zuerst aus den codierten Daten wiederhergestellt. Der Differentialwert
wird einer Vorhersageeinrichtung hinzuaddiert, um den endgültigen decodierten
Koeffizienten zu erhalten. Ein Fachmann kann in einfacher Weise
die VLD-Intern-DC-Koeffizientendecodierfunktion 130 realisieren.
-
Eine
Ausgangssteuereinheit 140 empfängt zwei der Bits L3 mit kombinierter
Länge (113)
und die Signale END_OF_BLOCK und ERROR von der VLD-Längendecodierschleife 110.
Die Ausgangssteuereinheit 140 empfängt außerdem das Signal INTRA_VLC_FORMAT.
Die Ausgangssteuereinheit 140 erzeugt zwei Signale ENABLE_1
und ENABLE_2, die angeben, wann die Signale RUN und LEVEL gültige Informationen
enthalten. Die Ausgangssteuereinheit 140 stellt die Signale
ENABLE_1 und ENABLE_2 am Beginn eines Blocks ein und setzt diese
am Ende des Blocks zurück.
In Abhängigkeit
von der verwendeten Tabelle (B14 oder B15) (was durch INTRA_VLC_FORMAT
angegeben wird) und davon, ob L3(0) oder L3(2) gesetzt ist, wenn
das Signal END_OF_BLOCK auftritt, stellt die Ausgangssteuereinheit 140 fest,
ob der letzte Code des Blocks RUN_1/LEVEL_1 oder RUN_2/LEVEL_2 lautet. Wenn
ein Fehler erfasst wird (das Signal ERROR wird auf einen logischen
Hochpegel gesetzt), werden ENABLE_1 und ENABLE_2 zurückgesetzt.
-
Die
Ausgangssignale von dem VLD-Run/Level-Decodierblock 120 und
die Intern-DC-Koeffizientendecodierfunktion 130 werden
an einen Ausgangsmultiplexer 150 bereitgestellt. Der Ausgangsmultiplexer 150 verwendet
das Signal ESC_1, um entweder Werte RUN_1 und LEVEL_1 (121 und 122)
oder Werte RUN_1_ESC und LEVEL_1_ESC (123 und 124)
auszuwählen.
Der Ausgangsmultiplexer 150 verwendet gleichfalls das Signal
ESC_2, um entweder Werte RUN_2 und LEVEL_2 (125 und 126)
oder Werte RUN_2_ESC und LEVEL_2_ESC (127 und 128)
auszuwählen.
Die ausgewählten
Werte werden als Wert RUN_1 151, Wert LEVEL_1 152,
Wert RUN_2 153 und Wert LEVEL_2 154 ausgegeben. Außerdem wählen die
Signale FC_FLAG und MACROBLOCK_INTRA das Signal DC_LEVEL im Fall
des ersten Koeffizienten für
intern codierte Blöcke
(d. h. den DC-Koeffizienten). Der Ausgangsmultiplexer 150 überträgt den DC-Koeffizienten
auf dem Kanal RUN_1/LEVEL_1.
-
2 ist
eine beispielhafte Ausführungsform der
VLD-Längendecodierschleife 110.
-
Ein
Verschiebungsmechanismus ist zum Empfangen des Datenstroms DATA_IN
vorgesehen. In der beispielhaften Ausführungsform enthält der Verschiebungsmechanismus
einen Schieber-Multiplexer 206 und zwei Register 202 und 204.
Der Schieber-Multiplexer 206 spricht auf ein Verschiebungssteuersignal 235 an,
um eine Teilmenge der codierten Datenwerte mit variabler Länge zur
Längendecodierung
zu übertragen.
-
Jedes
Register 202 und 204 ist so bemessen, dass es
zwei VLCs mit der größtmöglichen
Länge speichert.
In der beispielhaften Ausführungsform hat
der längste
VLC eine Länge
von 24 Bits, so dass jedes Register 48 Bits hält. Der Schieber-Multiplexer 206 hält ebenso
viele Bits wie die kombinierten Register 204 und 204 (minus
eins). Das beispielhafte Register 202 empfängt 48 Bits
neue Daten und gibt die empfangenen Daten an das Register 204 und
den Schieber-Multiplexer 206 aus. Daher ist das Register 204 immer
einen Zyklus hinter dem Register 202 zurück. Wenn
die Inhalte der Register 202 und 204 an das Register 206 übertragen
werden, werden die Inhalte des Registers 202 im Register 204 nach
unten verschoben, 48 neue Bits werden an das Register 202 übertragen
und beide werden an den Schieber-Multiplexer 206 übertragen.
Wenn die Register 202 und 204 freigegeben werden,
um ein neues 48 Bit-Wort einzutakten, realisieren sie folglich
eine 48 Bit-Abwärtsverschiebung
der Inhalte des Schieber-Multiplexers 206. Das tritt dann
auf, wenn 48 oder mehr der 95 Bits, die gegenwärtig im Schieber-Multiplexer 206 gespeichert
sind, bereits an die Längendecodierfunktion 208 übertragen
wurden (was die Übertragung
eines Signals 238 "größer als 48" bewirkt, um die
Register 202 und 204 freizugeben, wie später erläutert wird).
Der beispielhafte Schieber-Multiplexer 206 überträgt eine
48 Bit-Teilmenge seines Inhalts an eine Decodierfunktion 208 von
zwei Längen.
-
Die
Längendecodierfunktion 208 enthält Decodiermittel
sowohl der ersten als auch der zweiten Länge. In der beispielhaften
Ausführungsform
sind die Decodiermittel der ersten Länge eine herkömmlichen
Decodierschaltung 210, die so geschaltet ist, dass sie
die Teilmenge der mehreren codierten Datenwerte von dem Schieber-Multiplexer 206 empfängt. Der
Decodierer 210 führt
eine erste Decodieroperation aus, um die Länge des ersten Datenwertes der
codierten Datenwerte in der Teilmenge zu bestimmen.
-
Auf
Grund der Art, wie die Koeffizienten in den Tabelle B-14 und B-15
codiert sind, werden lediglich (mindestens ein und) höchstens
12 Bits benötigt, um
die Länge
des VLC zu bestimmen (selbst bei einem Code der Länge 24 Bits).
Wenn der erste Code ein 24 Bit-Code und der zweite Code ein 17 Bit-Code ist,
ist es daher erforderlich, 36 Bits zu verarbeiten, um beide Längen zu
bestimmen. Dabei kennzeichnen die ersten 6 Bits die Länge des
ersten Codes und die Bits 25 bis 36 kennzeichnen die Länge des
zweiten Codes. In der beispielhaften Ausführungsform werden die Register
so geladen, dass die Codes vom LSB zum MSB decodiert werden; wobei
(höchstens) 12
LSBs jedes VLC verwendet werden, um die Länge des VLC zu kennzeichnen.
-
Die
Decodiererschaltung 210 kann z. B. einen Nur-Lese-Speicher
(ROM), eine programmierbare logische Anordnung (PLA), ein logisches
Gatter oder dergleichen enthalten (nicht gezeigt). Von den m Bits
in der Eingangsfolge, die den ersten codierten Wert bilden, werden
die ersten n Bits (n < m,
wobei n und m ganzzahlig sind) verwendet, um die Länge des Codes
zu bestimmen. Wenn z. B. m gleich 24 und n gleich 12, können die
ersten 12 Bits die Länge
des Codes angeben und die restlichen Bits können den Code und das Vorzeichen
definieren.
-
Der
Decodierer 210 decodiert die Länge sowohl von DC-Koeffizienten
als auch von AC-Koeffizienten. Die Längen von DC-Koeffizienten werden
unter Verwendung der B12-LUT (Luminanz) oder der B13-LUT (Chrominanz)
decodiert und AC-Koeffizienten
werden unter Verwendung der B14-LUT (für nicht intern codierte Blöcke und
für intern
codierte Blöcke mit
intra_vlc_format gleich null) oder der B15-LUT (für intern codierte Blöcke mit
intra_vlc_format gleich eins) decodiert. Deswegen benötigt der
Decodierer 210 die Signale B12, B13, B14, B15, B14–15, COEFF_1
von der Steuerlogik 216, um festzulegen, welche Nachschlagtabelle
für den
Koeffizienten, der gegenwärtig
decodiert wird, zu verwenden ist. Diese Signale konfigurieren den
Decodierer 210, die geeignete LUT zu verwenden.
-
Die
Decodiererschaltung 210 speichert Codes, die den n Bits
entsprechen, die zum Bestimmen der Länge verwendet werden. Wenn
der erste Abschnitt (mit einer Länge
von bis zu n Bits) der Teilmenge der codierten Datenwerte mit einem
Code übereinstimmt,
der in der Decodiererschaltung 210 gespeichert ist, gibt
der Decodierer 210 ein Übereinstimmungssignal 211 aus,
das die Länge
des ersten codierten Wertes kennzeichnet.
-
Der
Decodierer 210 der ersten Länge gibt ein entsprechendes
Bit für
jede mögliche
Länge des
ersten codierten Datenwertes aus. Ein einzelnes Bit der von dem
Längendecodierer 210 ausgegebenen
Bits wird auf einen Wert eins gesetzt. Das gesetzte Bit entspricht
der Länge
des ersten codierten Datenwertes, die durch den Decodierer 210 der
ersten Länge ermittelt
wurde. Das 20 Bit-Signal 211 wird von der VLC-Längendecodierschleife 110 als
das Signal L1 von 2 ausgegeben.
-
In
der beispielhaften Ausführungsform
kann der erste Code mit variabler Länge zwanzig unterschiedliche
Längenwerte
besitzen, die den entsprechenden Werten von zwei bis 20 oder dem
Wert 24 entsprechen. Diese möglichen
Längen
werden durch Tabellen B12 bis B15 der MPEG-Norm bestimmt. Das Längensignal 211 ist
ein 20 Bit-Signal, wobei jedes Bit einer entsprechenden Länge der
zwanzig möglichen
Längen
des codierten Wertes entspricht. 19 Bits von den im Signal 211 vorhandenen
Bits haben einen Wert null und ein Bit der zwanzig Bits, das der
decodierten Länge
des ersten Codes entspricht, ist auf eins gesetzt. Der Vorteil dieser
Form des Ausgangssignals 211 besteht darin, dass das Ausgangssignal 211 keine
Decodierung erfordert. Das einzelne gesetzte Bit des Ausgangssignals 211 kann
ohne weitere Decodierung als ein Freigabesignal verwendet werden,
wie später erläutert wird.
-
In
der beispielhaften Ausführungsform
ist es nicht erforderlich, DC-Koeffizienten mit der Länge von
21 Bits zu decodieren, da die beispielhafte Vorrichtung in einem
Hauptprofil-MPEG-Decodierer verwendet wird und daher in dem Bitstrom
keine Codes der Länge
21 Bits auftreten. Ein Fachmann wird erkennen, dass bei anderen
Typen von Bitströmen
andere Codelängen
auftreten und der Decodierer der ersten Länge auf alle zusätzlichen
Längen
angepasst wäre,
die in der geeigneten LUT erforderlich sind.
-
Die
Decodiermittel 212 der zweiten Länge sind mit dem Schieber-Multiplexer 206 gekoppelt,
um die Teilmenge der mehreren codierten Datenwerte zu empfangen.
Die Decodiermittel 212 der zweiten Länge enthalten jeweils einen
Längendecodierer 212a bis 212p für jede mögliche Länge des
ersten codierten Datenwertes. Alle Längendecodierer 212a bis 212p decodieren
gleichzeitig jeweils einen anderen Abschnitt der Teilmenge der mehreren
codierten Datenwerte. Die Decodiermittel 212 der zweiten
Länge führen eine
zweite Decodierungsoperation aus, um eine Länge eines zweiten Datenwertes
der codierten Datenwerte in der Teilmenge einzeln zu bestimmen, der
dem ersten codierten Datenwert in der Teilmenge direkt folgt. Die
erste und die zweite Decodierungsoperation werden gleichzeitig ausgeführt.
-
Der
hier definierte Ausdruck "einzeln
bestimmen" bedeutet,
dass die Länge
des zweiten Codes bestimmt wird, indem der zweite Code als ein vom ersten
Code separater Code behandelt wird. Die erste Codelänge wird
durch den ersten Decodierer 210 bestimmt und die zweite
Codelänge
wird durch die Decodiermittel 212 der zweiten Länge bestimmt.
Dadurch werden der erste und der zweite Code nicht für Decodierungszwecke
zu einem Code mit doppelter Länge
verbunden, wie in der US-Patentschrift Nr. 5.428.356 beschrieben
ist (bei der jeder Code mit doppelter Länge in einer einzelnen Nachschlagtabellenoperation
durch einen einzelnen Decodierer decodiert wird, um ein vorgegebenes
Paar decodierter Werte zu identifizieren).
-
In
der beispielhaften Ausführungsform
kann der erste Code z. B. eine Länge
von 2 bis 20 oder 24 Bits haben. Die Bits in der Teilmenge werden
gewöhnlich
von 0 bis 47 nummeriert. Der Decodierer 212a versucht,
einen Abschnitt einer Folge zu decodieren, der in der Teilmenge
von Datenwerten mit dem dritten Bit (Bit Nr. 2) beginnt, das das
erste Bit des zweiten codierten Datenwertes ist, jedoch nur dann,
wenn die Länge
des ersten Codes mit variabler Länge
zwei ist. Der Decodierer 212b versucht eine Folge zu decodieren,
die in der Teilmenge von Datenwerten mit dem vierten Bit (Bit Nr.
3) beginnt, das das erste Bit des zweiten codierten Datenwertes
ist, jedoch nur dann, wenn die Länge
des ersten Codes mit variabler Länge
drei ist. Die verschiedenen Decodierer 212c bis 212r entsprechen
aufeinanderfolgenden Abschnitten des ersten codierten Wertes, wie
ein Fachmann leicht erkennt. Der Decodierer 212s versucht
eine Folge zu decodieren, die in der Teilmenge von Datenwerten mit
dem 21. Bit (Bit Nr. 20) beginnt, das das erste Bit des zweiten
codierten Datenwertes ist, jedoch nur dann, wenn die Länge des
ersten Codes mit variabler Länge
20 ist. Schließlich
versucht der Decodierer 212p eine Folge zu decodieren,
die in der Teilmenge von Datenwerten mit dem 25. Bit (Bit Nr. 24)
beginnt, das das erste Bit des zweiten codierten Datenwertes ist,
jedoch nur dann, wenn die Länge
des ersten Codes mit variabler Länge
die maximal mögliche
Länge,
d. h. 24 ist.
-
In
der beispielhaften Ausführungsform
von 2 wird während
des Zyklus, wenn der erste Decodierer 210 einen Intern-DC-Koeffizienten
verarbeitet, lediglich eine Codelänge verarbeitet. Der erste und
der zweite AC-Koeffizient werden in dem Zyklus verarbeitet, der
dem Zyklus folgt, in dem der DC-Koeffizient decodiert wird. Der
Vorteil dieses Entwurfs besteht darin, dass die Längendecodierfunktion 208 während des
gleichen Taktzyklus nicht sowohl einen DC-Koeffizienten als auch
einen AC-Koeffizienten decodieren muss. Deswegen müssen die
Decodiermittel 212 der zweiten Länge lediglich einen entsprechenden
Decodierer 212a bis 212p für jede der 16 möglichen
Längen
der AC-Koeffizienten enthalten. Es ist nicht erforderlich, zusätzliche
Decodierer 212q bis 212t für die vier Längen (12,
18, 19 und 20 Bits) vorzusehen, die bei DC-Koeffizienten, jedoch
nicht bei AC-Koeffizienten vorkommen. Ein Fachmann wird verstehen,
dass in einer alternativen Ausführungsform
(die nachfolgend unter Bezugnahme auf 5 beschrieben
wird) die Decodierfunktion 508 den Intern-DC-Koeffizienten
in dem Längendecodierer 510 zur
gleichen Zeit decodieren kann, wenn der erste AC-Koeffizient in
dem Decodierer 512 der zweiten Länge decodiert wird; wobei jedoch
bei dieser Ausführungsform
in den Decodiermitteln der zweiten Länge zusätzliche Decodierer erforderlich
sind.
-
Nochmals
in 2 müssen
die Decodierer 212a bis 212p lediglich die B14-
und B15-LUTs für AC-Koeffizienten
verwenden, da der zweite codierte Koeffizient für den Block niemals der DC-Koeffizient sein
kann. Die Decodierer 212a bis 212p werden (durch
Anwenden der geeigneten LUT) durch die Signale B14, B15 und B14–B15, die
von der Steuerlogik 216 empfangen werden, konfiguriert.
-
Gemäß einem
Aspekt der Erfindung bestimmt jeder Längendecodierer 212a bis 212p gleichzeitig
einen entsprechenden Wert der Länge
des zweiten codierten Datenwertes anhand einer entsprechenden möglichen
Länge des
ersten codierten Datenwertes. Nur eine dieser Längen, die durch die Decodierer 212a bis 212p bestimmt
werden, ist die korrekte Länge
des zweiten Wertes. Um die Verzögerung
zu eliminieren, die im Stand der Technik auftritt (das Warten auf
die Decodierung der Länge
des ersten codierten Wertes, um festzustellen, wo die Decodierung
des zweiten Wertes beginnt), bestimmt die vorliegende Erfindung
alle möglichen
Längen
des zweiten Wertes zum gleichen Zeitpunkt, gleichzeitig mit der
Decodierung des ersten Wertes (wobei jede mögliche Länge des zweiten Codes auf einer
entsprechenden unterschiedlichen möglichen Länge des ersten Codes basiert).
Dann wird die decodierte Länge
des ersten Wertes verwendet, um den korrekten Längenwert aus den decodierten
Werten der zweiten Länge,
die bereits erzeugt wurden, auszuwählen.
-
Durch
die Verwendung des einzelnen gesetzten Bits des Signals 211 als
ein Freigabebit ermöglicht
der Decodierer der kombinierten Länge eine rasche Übertragung
des Ausgangs eines einzelnen Decodierers der Decodierer 212a bis 212p ohne
jede weitere Decodierung der ersten Länge. Ein Fachmann könnte in
dem Decodierer der kombinierten Länge leicht eine Logik aufbauen,
um einen der Decodierer der zweiten Länge 212a bis 212p auszuwählen.
-
Jeder
der Längendecodierer 212a bis 212p der
Decodiermittel der zweiten Länge
erzeugt ein entsprechendes Ausgangssignal 213a bis 213p,
das eine Länge
des zweiten decodierten Datenwertes darstellt, die durch die Längendecodierer 212a bis 212p bestimmt
wurden. In der beispielhaften Ausführungsform ist jedes der Ausgangssignale 213a bis 213p ein
16 Bit-Signal, das jeweils den 16 möglichen Längen (2 bis 11, 13 bis 17 und
24) des zweiten codierten Wertes entspricht. Die Längen 12
und 18 bis 20 werden nur für
den DC-Koeffizienten verwendet und entsprechen deswegen niemals
der Länge
des zweiten codierten Wertes. Das 16 Bit-Signal enthält fünfzehn Nullen und eine einzige
Eins, ähnlich
wie das 20 Bit-Signal, das von dem ersten Decodierer 210 ausgegeben
wird.
-
Der
Codierer 214 der kombinierten Länge verwendet das einzelne
gesetzte Bit des Signals 211 (das Signal, das die erste
Länge angibt),
um eine Übertragung
von einem der Ausgangssignale 213a bis 213p durch
den entsprechenden der Längendecodierer 212a bis 212p freizugeben.
Das eine freigegebene Ausgangssignal ist das Ausgangssignal des Decodierers,
der der Länge
des ersten codierten Datenwertes entspricht, für den das Bit im Signal 211 gesetzt
ist. Mit anderen Worten, der Decodierer 214 der kombinierten
Länge reagiert
auf das Signal 211 der ersten Länge zum Wählen eines Ausgangssignals
von einem der Längendecodierer 212a bis 212p. Der
Längendecodierer
(einer der Decodierer 212a bis 212p), der das
ausgewählte
Ausgangssignal (eines der Signale 312a bis 312p)
aufweist, ist der Längendecodierer,
der der Länge
des ersten codierten Datenwertes entspricht, die durch das Signal 211 der ersten
Länge angegeben
ist. Das ausgewählte
Ausgangssignal gibt die tatsächliche
Länge des
zweiten codierten Datenwertes an.
-
Es
wird z. B. der Fall betrachtet, bei dem der erste codierte Wert
eine Länge
von 3 Bits hat und der zweite codierte Wert eine Länge von
17 Bits hat. Wenn die Länge
des ersten Codes drei ist, wird der Wert des zweiten Bits des Signals 211 auf
eins gesetzt und alle Bits vom ersten Bit und vom dritten bis zum
zwanzigsten Bit des Signals 211 haben einen Wert null.
Gleichzeitig mit der Decodierung des ersten Wertes versucht der
Decodierer 212a, die Länge des
zweiten codierten Wertes zu decodieren, wobei er (fälschlicherweise)
annimmt wird, dass die Länge des
ersten codierten Wertes zwei ist; der Decodierer 212b decodiert
die Länge
des zweiten codierten Wertes, wobei er (richtigerweise) annimmt,
dass die Länge
des ersten codierten Wertes drei ist, usw. Der Decodierer 214 der
kombinierten Länge
verwendet das gesetzte (zweite) Bit des Signals 211, um
eine Übertragung
des Ausgangssignals des Decodierers 212b (der zweite Decodierer
von den Decodierern 212a bis 212p in den zweiten
Decodiermitteln 212) freizugeben. Das freigebebene Ausgangssignal 213b hat
16 Bits. Wenn die Länge
des zweiten codierten Wertes 17 ist, ist der Wert des 15. Bits des
Ausgangssignals 213b auf eins gesetzt und die Werte der
Bits 1 bis 14 und des 16. Bits des Signals 213b sind auf
null gesetzt.
-
In
der beispielhaften Ausführungsform
gibt der Decodierer 214 der kombinierten Länge ein
40 Bit-Signal 215 aus. Die möglichen Längen des ersten codierten Wertes
(2–11,
13–17
und 24 für
AC-Koeffizienten in der Ausführungsform
von 2) können mit
den möglichen
Längen
des zweiten codierten Wertes (2–11,
13–17
und 24, die in den Tabelle B14 und B15 der MPEG-Norm definiert sind)
kombiniert werden, um 40 unterschiedliche kombinierte Längen zu
erhalten, die den kombinierten Längen
2–35, 37–41 und
48 entsprechen. Eines der 40 Bits ist gesetzt, wodurch es die kombinierte
Länge des
ersten und des zweiten codierten Wertes kennzeichnet. Die Werte
aller anderen 39 Bits des Signals 215 sind auf null gesetzt.
Das 40 Bit-Ausgangssignal L3 kennzeichnet die kombinierte Länge der
beiden codierten Datenwerte. Die Signale L1 und L3 werden an die VLD-Run/Level-Decodierfunktion 120 (die
in 1 gezeigt ist) übertragen.
-
Die
VLD-Run/Level-Decodierschleife enthält außerdem einen Verschiebungssteuermechanismus (der
die Funktionen 218, 222, 234 und 236 enthält), der
geschaltet ist, um die kombinierte Länge 215 des ersten
und des zweiten codierten Datenwertes zu empfangen. Der Verschiebungssteuermechanismus bildet
die Verschiebungssteuersignale 235, um festzulegen, welche
codierten Datenwerte in der Teilmenge enthalten sind, die an die
Längendecodierfunktion 208 übertragen
wird, und sendet die Verschiebungssteuersignale 235 an
den Schieber-Multiplexer 206. Der Verschiebungssteuermechanismus bildet
außerdem
ein Verschiebungsfreigabesignal 238 und sendet dieses an
die Register 202 und 204, um von Zeit zu Zeit
neue Daten in den Schieber-Multiplexer 206 zu laden, um
eine ausreichende Menge codierter Daten "in der Pipeline" des Schieber-Multiplexers 206 aufrechtzuerhalten,
um Unterbrechungen der Längendecodierung
zu vermeiden.
-
Zwei
Register 234 und 236 des Verschiebungssteuermechanismus
werden mit den sechs niederwertigsten Bits (LSBs) einer Speicherstelle
in dem Schieber-Multiplexer 206 versorgt. Diese LSBs geben
eine Bitposition zwischen 1 und 48 an, an der sich das LSB des ersten
codierten Datenwertes befindet.
-
Der
im Register 234 befindliche Wert wird über das Signal 235 an
den Multiplex-Auswahlanschluss 206a des
Schieber-Multiplexers 206 angelegt, um zu bewirken, dass
der Schieber-Multiplexer 206 die 48 Bits, beginnend mit
dem im Signal 235 gekennzeichneten Bit bereitstellt.
-
Der
im Register 236 befindliche Wert wird über das Signal 237 an
den Eingang eines Summengenerationsblocks 218 angelegt.
Der Zweck des Summengenerationsblocks 218 besteht darin,
die nächste
Anfangsbitposition in dem Schieber-Multiplexer 206 für den dritten
und den vierten codierten Datenwert in dem Datenstrom DATA_IN zu
berechnen (d. h. die beiden Werte, die dem ersten und dem zweiten
Datenwert direkt folgen). Diese Berechnung wird parallel mit der
Längendecodieroperation
ausgeführt,
die durch den Längendecodierer 210 und
die Decodiermittel 212 der zweiten Länge ausgeführt wird. Der Summengenerationsblock 218 enthält mehrere
Addierer 2201 bis 22040 . Jeder Addierer 2201 bis 22040 entspricht einem entsprechenden unterschiedlichen
Wert der kombinierten Länge 215 (d.
h. es gibt jeweils einen Addierer für jeden möglichen Wert einer kombinierten
Länge).
Alle Addierer bilden gleichzeitig ein entsprechendes Kandidaten-Verschiebungssteuersignal.
Alle Addierer addieren eine entsprechende unterschiedliche Konstante
zu der Position des ersten codierten Datenwertes während des
gleichen Taktzyklus, in dem die Längendecodierer 212a bis 212p die
Länge des
zweiten codierten Datenwertes decodieren (Demzufolge besitzen die Addierer
eine geringere Komplexität,
da jeder Addierer lediglich eine einzige Konstante addiert.). Somit werden
40 unterschiedliche Kandidatenpositionen, jeweils eine für jede mögliche Länge gleichzeitig
berechnet. Die entsprechende Konstante in jedem Addierer ist die
kombinierte Länge,
die dem Addierer entspricht. Jeder Addierer führt eine Modulo-48-Addition
aus. Der Ausgang jedes Addierers ist ein 7 Bit-Signal 2211 bis 22140 .
Die sechs LSBs des Addierer-Ausgangssignals
identifizieren die Modulo-48-Summe, die durch den Addierer berechnet wird;
wobei das hochwertigste Bit (MSB) ein Merker ist, der gesetzt ist,
wenn die Summe wenigstens 48 beträgt. Die Ausgangssignale 2211 bis 22140 der
Addierer 2201 bis 22040 werden an eine Summenwählerfunktion 222 übertragen.
-
Wenn
das MSB 238 des Ausgangssignals 223 des Summenwählers auf
eins gesetzt ist, befindet sich das MSB des zweiten codierten Datenwertes in
den 48 MSBs des Schieber-Multiplexers 206. Um den Schieber-Multiplexer 206 mit
Daten, die noch nicht decodiert wurden, gefüllt zu halten, wird das MSB 238 des
Ausgangssignals 223 verwendet, um das Laden von neuen Daten
von den Registern 202 und 204 in den Schieber-Multiplexer 206 freizugeben.
Wie oben angemerkt wurde, hat die Ladeoperation eine Abwärtsverschiebung
der Daten in dem Schieber-Multiplexer 206 zur Folge, so
dass die bisherigen 47 MSBs nun die 47 LSBs sind. 48 zusätzliche
Bits neuer Daten werden in die MSB-Positionen des Schieber-Multiplexers 206 verschoben.
-
Der
Summenwähler 222 empfängt die
40 Kandidaten-Verschiebungssteuersignale, die 40 Kandidatenpositionen
darstellen. Der Summenwähler 222 empfängt außerdem die
gegenwärtige
Multiplexerposition 237 vom Register 236 sowie
eine von außen
bereitgestellte Multiplexerposition 240, die beide nachfolgend
erläutert
werden. Das Ausgangssignal 215 des Decodierers 214 der
kombinierten Länge
wird zur Steuerung des Summenwählers 222 verwendet.
Das einzelne gesetzte Bit des Signals 215 der kombinierten
Länge wird
als ein Freigabesignal verwendet, um die Übertragung des Ausgangs von
einem der Addierer 2201 bis 22040 vom Summenwähler 222 freizugeben.
-
Wenn
in der Ausführungsform
von 2 der Intern-DC-Koeffizient in dem Decodierer 210 der
ersten Länge
verarbeitet wird, gibt der Decodierer 214 der kombinierten
Länge eine
kombinierte Länge
aus, die gleich der Länge
des DC-Koeffizienten ist, so dass der erste und der zweite AC-Koeffizient
im nächsten
Zyklus verarbeitet werden. Es ist somit möglich, die Länge des
Intern-DC-Koeffizienten in einem separaten Zyklus zu berechnen,
wobei die Decodiermittel 212 der zweiten Länge mit
lediglich 16 Decodierern 212a bis 212p implementiert
werden.
-
Es
gibt zwei Situationen, in denen keines der 40 Ausgangssignale 2211 bis 22140 durch
den Summenwähler 222 ausgewählt wird.
Erstens gibt die Steuerlogik 216 dann, wenn das System
initialisiert wird, indem das Neustart-Signal an die Steuerlogik 216 übertragen
wird, ein Signal zum externen Laden an den Summenwähler 222 aus,
wodurch bewirkt wird, dass der Summenwähler 222 die extern bereitgestellte
Multiplexerposition 240 ausgibt. Die Steuerlogik 216 wird
später
unter Bezugnahme auf 3 genauer beschrieben.
-
Die
zweite Situation, in der keines der Addierer-Ausgangssignale 2211 bis 22140 verwendet
wird, tritt dann auf, wenn die Verarbeitung des Blocks beendet ist
und das Blockende erfasst wird. Die Steuerlogik 216 gibt
das Bypass-Signal an den Summenwähler 222 aus.
Der Summenwähler 222 wählt die gegenwärtige Multiplexerposition 237,
die an dem Bypass-Eingangsanschluss 222a erfasst wird,
damit sie als Ausgabewert 223 verwendet wird. Dadurch bleibt
der Schieber-Multiplexer 206 ohne weitere Indexierung in
dem gegenwärtigen
Zustand.
-
3 ist
ein Blockschaltplan der beispielhaften Logik für die VLD-Längendecodierung-Steuerlogik 216.
Die Steuerlogik empfängt
mehrere extern festgelegte Parameter, die enthalten: BP_OVRD (HOLD),
RESTART, TEST_MODE, MAC-ROBLOCK_INTRA,
LUMA/CHROMA und INTRA_VLC_FORMAT. Die Decodierfunktion 208 versorgt
die Steuerlogik 216 mit einer Angabe, ob ein Zustand Blockende
oder Fehler erfasst wurde. Die Steuerlogik 216 kennzeichnet
die folgenden Parameter für
die Decodierer 210 und 212a bis 212p:
(1) ob der Koeffizient ein DC-Koeffizient
oder von einem anderen Typ ist; und (2) welche der Koeffiziententabellen
B12 bis B15 für
den ersten und den zweiten codierten Wert verwendet wird.
-
Das
ODER-Gatter 314 setzt den Merker BYPASS auf einen logischen
Hochpegel, wenn das Signal BP_OVRD (HOLD) auf den logischen Hochpegel gesetzt
ist, ein Blockende erfasst wird (END_OF_BLOCK ist auf einem logischen
Hochpegel), ein Fehler erfasst wird (ERR_FLAG ist auf einem logischen
Hochpegel) oder wenn der Merker BYPASS zuvor auf den logischen Hochpegel
gesetzt wurde. Nachdem der Merker BYPASS auf den logischen Hochpegel
gesetzt wurde, bleibt er in dem Zustand, bis das Signal RESTART
auf den logischen Hochpegel gesetzt wird. Der Merker BYPASS wird
zu dem Summenwähler 222 übertragen
(der in 2 gezeigt ist) und bewirkt,
dass der Schieber-Multiplexer 206 in seinem Zustand bleibt,
bis das Signal RESET auf den logischen Hochpegel gesetzt wird.
-
Wenn
das Signal END_OF_BLOCK auf Hochpegel ist, setzt das ODER-Gatter 316 das Flip-Flop 318 (Ausgang
EOB_FLAG) auf Hochpegel und das Flip-Flop 318 bleibt in
diesem Zustand, bis das Signal RESTART auf den logischen Hochpegel gesetzt
wird. Das Signal END_OF_BLOCK wird an die Ausgabesteuereinheit 140 (die
in 1 gezeigt ist) bereitgestellt.
-
Das
ODER-Gatter 324 setzt den D-Anschluss des Flip-Flop 326 auf
logischen Hochpegel (um das Signal ERR_FLAG auf logischen Hochpegel zu
setzen), wenn das Signal ERROR auf dem logischen Hochpegel ist und
weder das Signal END_OF_BLOCK noch der Ausgang BYPASS des Flip-Flop 312 auf
logischem Hochpegel ist. Das Signal ERR_FLAG wird an die Ausgabesteuereinheit 140 (1)
bereitgestellt. Nachdem das Signal ERR_FLAG auf logischen Hochpegel
gesetzt wurde, bleibt es auf Hochpegel, bis das Flip-Flop 326 durch das
Signal RESTART zurückgesetzt
wird.
-
Das
ODER-Gatter 328 gibt ein Signal LOAD_EXTERNAL aus, das
den logischen Hochpegel besitzt, wenn entweder das Signal TEST_MODE oder
das Signal RESTART auf logischem Hochpegel ist. Das Signal LOAD_EXTERNAL
wird an den Summenwähler 222 (der
in 2 gezeigt ist) bereitgestellt. Wenn das Signal
LOAD_EXTERNAL auf dem logischen Hochpegel ist, wird eine extern
festgelegte Multiplexerposition von dem Schieber-Multiplexer 206 (der
in 2 gezeigt ist) verwendet.
-
Der
D-Anschluss des Flip-Flop 330 wird auf den logischen Hochpegel
gesetzt (Setzen des Signals COEFF_1 auf logischen Hochpegel), wenn
das Signal RESTART auf logischem Hochpegel ist. Das Signal COEFF_1
wird somit am Beginn einer Blockverarbeitungsoperation auf logischen
Hochpegel gesetzt, wenn ein DC-Koeffizient
verarbeitet wird. Das Signal COEFF_1 wird an die Längendecodierfunktion 210 gesendet
(um den Decodierer 210 zum Bestimmen der Länge des
DC-Koeffizienten zu konfigurieren) und wird außerdem an die VLD-Intern-DC-Koeffizientendecodierfunktion 130 bereitgestellt.
-
Das
UND-Gatter 332 setzt den D-Anschluss des Flip-Flop 334 auf
den logischen Hochpegel, um das Ausgangssignal B12 auf den logischen
Hochpegel zu setzen, wenn die Signale RESTART und MACROBLOCK_INTRA
auf logischem Hochpegel sind und das Signal LUMA/CHROMA auf logischem Tiefpegel
ist. Das erfolgt dann, wenn der erste (DC-) Koeffizient eines intern
codierten Luminanzblocks verarbeitet wird. Das Signal B12 wird an
den Längendecodierer 210 (2) übertragen.
-
Das
UND-Gatter 336 setzt den D-Anschluss des Flip-Flop 338 auf
den logischen Hochpegel, um den Merker B13 auf den logischen Hochpegel
zu setzen, wenn die Signale RESTART, MACROBLOCK_INTRA und LUMA/CHROMA
auf logischem Hochpegel sind. Das erfolgt dann, wenn der erste (DC-)
Koeffizient eines intern codierten Chrominanzblocks verarbeitet
wird. Das Signal B13 wird an den Längendecodierer 210 (2) übertragen.
-
Die
logischen Komponenten mit den Bezugszeichen 340 bis 354 in 3 realisieren
die "Auswahl von
VLC-Tabellen der DCT-Koeffizienten", die in der Tabelle 7-3 der MPEG-Norm
festgelegt sind. Das ODER-Gatter 342 setzt den D-Anschluss des
Flip-Flop 344 auf
den logischen Hochpegel, um den Merker B14 auf logischen Hochpegel
zu setzen, wenn der Merker MACRO_BLOCK_INTRA auf logischem Tiefpegel
ist oder MACRO_BLOCK_INTRA auf logischem Hochpegel ist und RESTART
und INTRA_VLC_FORMAT auf logischem Tiefpegel sind. Dies setzt den
Merker B14, so dass die Decodierer 212a bis 212p die
B14-Tabelle für
Koeffizienten von Blöcken,
die nicht intern codiert sind, sowie für Koeffizienten von intern
codierten Blöcken,
die von DC-Koeffizienten, für
die der Wert INTRA_VLC_FORMAT null ist, verschieden sind, verwenden.
-
Das
UND-Gatter 346 setzt den D-Anschluss des Flip-Flop 348 auf
logischen Hochpegel, um den Merker B15 auf logischen Hochpegel zu
setzen, wenn der Merker MACRO_BLOCK_INTRA und der Merken INTRA_VLC_FORMAT
auf logischem Hochpegel sind und RESTART auf logischem Tiefpegel
ist. Dies setzt den Merker B15, so dass die Decodierer 212a bis 212p die
Tabellen B15 für
Koeffizienten (die von den DC-Koeffizienten verschieden sind) von
intern codierten Blöcken,
für die
der Wert INTRA_VLC_FORMAT eins ist, verwenden.
-
Das
ODER-Gatter 352 setzt den D-Anschluss des Flip-Flop 354 auf
logischen Hochpegel, um den Merker B14_B15 auf logischen Hochpegel
zu setzen, wenn entweder der Merker MACROBLOCK_INTRA auf logischen
Tiefpegel gesetzt ist oder MACROBLOCK_INTRA auf logischen Hochpegel
gesetzt ist und das Signal RESTART auf logischen Tiefpegel gesetzt
ist. Somit wird der Merker B14_B15 immer dann auf logischen Hochpegel
gesetzt, wenn die Decodierer 212a bis 212p entweder die
Tabelle B14 oder die Tabelle B15 verwenden sollten (d. h. für nicht
intern codierte Makroblöcke
und für die
AC-Koeffizienten von intern codierten Makroblöcken).
-
4 ist
ein Blockschaltplan des beispielhaften VLD-Run/Level-Decodierer 120,
der in 1 gezeigt ist. Da eine separate Funktion (VLD-Intern-DC-Koeffizientendecodierer 130)
für den DC-Koeffizienten
verwendet wird, verarbeitet der Block 120 bei einem intern
codierten Block den DC-Koeffizienten nicht. Die Schaltungsanordnung muss
lediglich Codes verarbeiten, die Längen 2 bis 11, 13 bis 17 und
24 aufweisen. Die entsprechenden Run/Level-Decodierschaltungen für den ersten
und den zweiten codierten Datenwert in der VLD-Run/Level-Decodierfunktion
120 sind sehr ähnlich,
wobei lediglich einige kleinere Unterschiede vorhanden sind, die
nachfolgend erläutert
werden. Deswegen werden lediglich 16 Bits (die Bits 0–9, 11–15 und
19) des Signals L1 (das in 1 gezeigt
ist) verwendet, wobei diese 16 Bits durch L1(15:0) in der oberen
linken Ecke von 4 angegeben sind.
-
Ein
Code 1/Daten 2-Wähler 410 verarbeitet die
Länge L1
des ersten Codes. Wenn die Länge
L1 24 Bits beträgt
(d. h., wenn das letzte Bit des 16 Bit-Signals gesetzt ist), ist
der erste Wert escape-codiert. Das letzte Bit des 16 Bit-Signals
L1 wird als Signal ESC_1 ausgegeben. Bei einem escape-codierten
Wert geben die ersten sechs Bits den Escape-Code an, die nächsten sechs
Bits sind der Run-Wert und die letzten 12 Bits sind der Level-Wert. Wenn
die Länge
24 Bits beträgt,
wird deswegen der Merker ESC_1 auf logischen Hochpegel gesetzt.
Die Bits Nr. 6 bis 11 des Signals DATA_IN (vom siebten Bit bis zum
elften Bit) werden als Wert RUN_1_ESC übertragen, der durch den Ausgangs-Multiplexer 150 (1)
ausgegeben wird, wenn der Merker ESC_1 gesetzt ist. Die Bits Nr.
12 bis 23 des Signals DATA_IN (vom 13. Bit bis zum 24. Bit) werden
als der Wert LEVEL_1_ESC übertragen,
der durch den Ausgangs-Multiplexer 150 (1)
ausgegeben wird, wenn der Merker ESC_1 gesetzt ist.
-
Da
bei allen anderen VLCs (nicht escape-codierte Werte) die Länge des
VLC bereits durch die (höchstens)
12 LSBs gekennzeichnet wird, können die
Werte Run und Level unter Verwendung von höchstens 5 Bits, die in 4 durch
Code_1(4:0) und Code_2(4:0) angegeben sind, bestimmt werden. In Tabelle
B-14 gibt es z. B. 16 VLCs, die eine Länge von 17 Bits aufweisen.
Alle diese 16 VLCs besitzen die gleichen 12 LSBs und die nächsten fünf Bits kennzeichnen
jeweils unterschiedliche Kombinationen von Run- und Level-Werten
für jeden
der 17 Bit-VLCs.
-
Die
5 Bits von Code_1(4:0) werden an den Run-Decodierer 420 und
den Level-Decodierer 430 übertragen.
Die Decodierer 420 und 430 enthalten LUTs, die
die Run- und Level-Werte von den Tabelle B-14 und B-15 speichern.
Wenn das Signal B-14 einen logischen Hochpegel aufweist, sollte
die Tabelle B14 verwendet werden, und wenn das Signal B15 einen
logischen Hochpegel aufweist, sollte die Tabelle B15 verwendet werden
(wie oben unter Bezugnahme auf die 2 und 3 beschrieben
wurde). Wenn die Code_1(4:0)-Bits, L1 und die Signale B14 und B15
vorgegeben sind, bestimmen der Run-Decodierer 420 und der
Level-Decodierer 430 die Werte Run bzw. Level.
-
Der
Code 1/Daten 2-Wähler 410 ermittelt
außerdem
den zweiten codierten Datenwert Data_2 (anhand des Wertes L1) und überträgt:
- (1) die ersten 17 Bits [d. h. Data_2(16:0)]
des zweiten codierten Datenwertes Data_2 an den Code 2-Wähler 450;
- (2) die Bits 7 bis 12 von Data_2[d. h. Data_2(11:6)] an die
Register 480 zur Übertragung
als das Signal RUN_2_ESC; und
- (3) die Bits 13 bis 24 von Data_2[d. h. Data_2(23:12)] an die
Register 480 zur Übertragung
als das Signal LEVEL_2_ESC.
-
Der
VLD-Run/Level-Decodierer 120 enthält einen Decodierer 440 der
Länge 2,
der das Signal L1(15:0) und die kombinierte Länge L3(37:0) verarbeitet, um
die Länge
des zweiten codierten Datenwertes zu bestimmen. Da L1 und L3 jeweils
in Form eines Mehrbitsignals bereitgestellt werden, kann der Decodierer 440 der
Länge 2
eine Schaltung aus Logikgattern verwenden an Stelle einer Subtrahiereinheit,
um die Länge
des zweiten codierten Datenwertes effektiv zu bestimmen und diese
Länge in
Form eines 16 Bit-Wertes auszugeben, bei dem lediglich ein einzelnes
Bit auf den Wert "eins" gesetzt ist. In der
gleichen Weise wie der Code 1/Daten 2-Wähler 410 wird das
16. Bit L2(15) für
einen codierten 24 Bit-Datenwert, der escape-codiert ist, auf den
logischen Tiefpegel gesetzt. Ein Fachmann könnte den Decodierer 440 der
Länge 2
in einfacher Weise aufbauen.
-
Ein
Code 2-Wähler
verarbeitet das Signal L2 in der gleichen Weise wie der Wähler 410,
um die 5 Bits Data_2(4:0) zu bestimmen, die zur Identifizierung
von Run und Level für
nicht escape-codierte Werte benötigt
werden. Der Code2-Wähler
sendet die Werte Code2(4:0) an den Run-Decodierer 460 und
den Level-Decodierer 470 in der gleichen Weise, wie der
Code1-Wähler 410 diese
Informationen an die Decodierer 420 und 430 überträgt. Der
Run-Decodierer 460 und der Level-Decodierer 470 sind
mit dem Run-Decodierer 420 und dem Level-Decodierer 430 identisch,
so dass deren Beschreibung hier nicht wiederholt wird.
-
5 ist
ein Blockschaltplan einer beispielhaften Decodierfunktion 510 der
zweiten Länge. Komponenten
und Signale von 5, die gleich jenen von 2 sind,
besitzen die gleichen Bezugszeichen und werden nicht erneut beschrieben.
-
Die
Längendecodierfunktion 510 kann
die Länge
des Intern-DC-Koeffizienten in dem Decodierer 510 der Länge 1 zum
gleichen Zeitpunkt decodieren, an dem der erste AC-Koeffizient in
den Decodiermitteln 512 der zweiten Länge decodiert wird. Um diese
Möglichkeit
zu schaffen, sind zusätzliche
Decodierer 512q bis 512t vorgesehen, so dass die
Decodiermittel 512 der zweiten Länge jeweils einen Längendecodierer
für jede
mögliche
Länge eines
Intern-DC-Koeffizienten (2–4,
6–20)
oder einen AC-Koeffizienten (2–11,
13–17
oder 24) enthalten. Das heißt,
es gibt 20 Decodierer 512a bis 512t für alle möglichen
Längen
(2–20
oder 24) des ersten codierten Wertes, unabhängig davon, ob der erste Wert
einen DC-Koeffizienten oder einen AC-Koeffizienten darstellt.
-
Bei
dieser Konfiguration kann die kombinierte Länge L3 44 Werte annehmen, die
den kombinierten Längen
2–44 und
48 entsprechen. Deswegen sind 44 Addierer 520 bis 52044 vorgesehen
(an Stelle der 40 Addierer in 2), die
diesen 44 möglichen kombinierten
Längen
entsprechen. Somit muss der Summenwähler 522 einen Wert
aus 46 Werten (44 mögliche
Längen,
Bypass oder extern bereitgestellte Position) auswählen.
-
Der
Decodierer für
variable Länge
wurde hier in Form eines beispielhaften DCT-Koeffizienten-Längendecodierer beschrieben.
Eine (nicht gezeigte) Schaltungskonfiguration, die dem Koeffizientendecodierer 100 (1) ähnlich ist,
kann verwendet werden, um Elemente der höheren Syntax zu decodieren,
wie in den Abschnitten 6.1 bis 6.13 der MPEG-Norm beschrieben ist.
Wenn in dem Koeffizientendecodierer 100 das Blockende erreicht
ist, wird der Merker BYPASS (der oben unter Bezugnahme auf 3 beschrieben
wurde) auf logischen Hochpegel gesetzt und die Steuerung wird zusammen
mit dem Ort des nächsten
Codes an den Decodierer der höheren
Syntax übergeben.
Wenn dann der höhere Code
decodiert wurde, wird das Signal RESTART auf den logischen Hochpegel
gesetzt, um die nächsten beiden
DCT-Koeffizienten zu decodieren.
-
Obwohl
die Erfindung in Bezug auf eine beispielhafte Ausführungsform
unter Verwendung des MPEG-codierten Videodaten-Bitstroms beschrieben wurde,
kann die Erfindung bei anderen Typen von Decodierern mit variabler
Länge ausgeführt werden.