Die
vorliegende Erfindung betrifft das Gebiet des Datenkodierens und
des Datendekodierens; insbesondere betrifft die vorliegenden Erfindung
Datenkodieren und Datendekodieren mit einem Kodierer mit einem finiten
bzw. endlichen Automaten bzw. mit einem "Finit State Machine"-Kodierer.The
The present invention relates to the field of data coding and
of data decoding; In particular, the present invention relates
Data coding and data decoding with an encoder with a finite
or finite state machine or with a "finite state machine" encoder.
Die
Datenkompression ist ein sehr nützliches
Werkzeug zum Speichern und Übertragen
großer
Datenmengen. Zum Beispiel wird die Zeit, die zur Übertragung
eines Bildes erforderlich ist, wie z.B. einer Faxübertragung
eines Dokuments, drastisch reduziert, wenn eine Kompression verwendet
wird, um die Anzahl der Bits zu reduzieren, die zum neuen Erzeugen
des Bildes erforderlich sind.The
Data compression is a very useful
Tool for saving and transferring
greater
Amounts of data. For example, the time to transfer
an image is required, such as a fax transmission
of a document, drastically reduced when using compression
is used to reduce the number of bits needed to rebuild
of the image are required.
Bei
manchen Kompressionssystemen wird eine Eingabedatei oder ein Datensatz
in eine Abfolge von Entscheidungen übersetzt, und zwar unter der
Maßgabe
eines Entscheidungsmodells. Jede Entscheidung hat eine zugeordnete
Wahrscheinlichkeit und, basierend auf dieser Wahrscheinlichkeit,
wird ein Ausgabekode erzeugt und an die komprimierte Datei angehängt. Um
dieses Kodiersystem zu realisieren, weisen Kompressionssysteme drei
Teile auf: ein Entscheidungsmodell, ein Wahrscheinlichkeitsschätzverfahren
und einen Bitstromgenerator. Das Entscheidungsmodell empfängt die
Ein gangsdaten und übersetzt
die Daten in einen Satz von Entscheidungen, den das Kompressionssystem
nutzt, um die Daten zu kodieren. Das Entscheidungsmodell wird typischerweise
als ein Kontextmodell bezeichnet. Das Wahrscheinlichkeitsschätzverfahren
stellt ein Verfahren dar, um die Wahrscheinlichkeitsschätzung für die Wahrscheinlichkeit
einer jeden Entscheidung zu entwickeln. Der Bitstromgenerator führt das
abschließende
Bitstromkodieren durch, um den Ausgabecode zu erzeugen, der den
komprimierten Datensatz oder die komprimierte Datei darstellt. Eine
Kompression kann wirksam in dem Entscheidungsmodell und/oder dem
Bitgenerator stattfinden.at
Some compression systems use an input file or record
translated into a sequence of decisions, under the
proviso
a decision model. Each decision has an associated one
Probability and, based on this probability,
An output code is generated and attached to the compressed file. Around
To realize this coding system, compression systems have three
Parts: a decision model, a probability estimation method
and a bitstream generator. The decision model receives the
An initial data and translated
the data into a set of decisions made by the compression system
uses to encode the data. The decision model becomes typical
referred to as a context model. The probability estimation method
represents a method to obtain the probability estimate for the probability
to develop each decision. The bitstream generator carries this
final
Bitstream encode to generate the output code that contains the
represents a compressed data set or the compressed file. A
Compression can be effective in the decision model and / or the
Bit generator take place.
Ein
binärer
Kodierer stellt einen Typ eines Kodiersystems dar, das Daten als
eine Sequenz von binären Entscheidungen
kodiert.One
binary
Encoder represents a type of coding system that uses data as
a sequence of binary decisions
coded.
Kodierer
mit finiten Automaten sind binäre
Entropiekodierer, die in der Fachwelt gut bekannt sind. Ein Kodierer
mit einem finiten Automaten (im folgenden "FSM-Kodierer" genannt) ist ein verlustfreier binärer Multikontext-Entropiekodierer.
Finite Automaten werden sowohl zur Biterzeugung (Erzeugung von durch
Bitströmen
sich ergebenden Bits mit bekannten oder angenommenen Wahrscheinlichkeiten)
als auch zur Wahrscheinlichkeitsschätzung (Schätzen von Wahrscheinlichkeiten
basierend auf vergangenen Daten von demselben Kontext) verwendet.
Während
des Kodierens nimmt der FSM-Kodierer eine Reihe von Bits mit zugeordneten
Kontexten und erzeugt einen kodierten Bitstrom, der jene Bits darstellt,
und zwar mit so wenig Daten wie möglich. Während des Dekodierens nimmt
der FSM-Kodierer den kodierten Bitstrom und die Sequenz von Kontexten
und erzeugt die Originalsequenz von Bits. Ein Beispiel hierfür ist im
US-Patent Nr. 5,272,478 A beschrieben, das den Titel trägt "Method and Apparatus
for Entropy Encoding",
und das am 21. Dezember 1993 herausgegeben wurde. Es wird ebenso
auf das US-Patent Nr. 5,475,388 A verwiesen, das den Titel trägt "Method and Apparatus
for Using Finite State Machines to Perform Channel Modulation and
Error Correction and Entropy Coding", das am 12. Dezember 1995 herausgegeben
wurde.encoder
with finite automata are binary
Entropy encoders that are well known in the art. An encoder
with a finite state machine (hereinafter called "FSM encoder") is a lossless binary multicontext entropy coder.
Finite automata are used both for biter production (production of
bitstreams
resulting bits with known or assumed probabilities)
as well as the probability estimate (estimation of probabilities
based on past data from the same context).
While
of coding, the FSM encoder takes a number of bits with associated ones
Contexts and generates a coded bitstream representing those bits
and with as little data as possible. During decoding takes
the FSM encoder the encoded bitstream and the sequence of contexts
and generates the original sequence of bits. An example of this is in
U.S. Patent No. 5,272,478 A, entitled "Method and Apparatus
for Entropy Encoding ",
and that was issued on 21 December 1993. It will as well
See U.S. Patent No. 5,475,388 A, entitled "Method and Apparatus
for Using Finite State Machines to Perform Channel Modulation and
Error Correction and Entropy Coding ", published on December 12, 1995
has been.
Binäre Entropiekodierer
können
als der verlustfreie Kodierabschnitt von Bildkompressionssystemen verwendet
werden. Sie ermöglichen
die bestmögliche
Kompression, indem erlaubt wird, daß Symbole mit einer Wahrscheinlichkeit
größer als
50% kodiert werden, und indem das Ändern von Kontexten (Ändern von
Wahrscheinlichkeitsschätzungen)
erlaubt wird, und zwar unabhängig
für jedes
zu komprimierende Datenbit. Andere binäre Entropiekodierer sind der
IBM-Q-Kodierer, der IBM/Mitsubishi-QM-Kodierer und der ABS-Kodierer, die in
dem US-Patent Nr. 5,381,145 A beschrieben sind, das den Titel trägt "Method and Apparatus
for Parallel Encoding and Decoding of Data" und das am 10. Januar 1995 herausgegeben
wurde, und in dem US-Patent Nr. 5,583,500 A beschrieben sind, das
den Titel trägt "Method and Apparatus
for Parallel Encoding and Decoding of Data" und das am 10. Januar 1996 herausgegeben
wurde.Binary entropy coders
can
is used as the lossless coding section of image compression systems
become. they allow
the best possible
Compression by allowing symbols with a probability
greater than
50%, and by changing contexts (changing
Probability estimates)
is allowed, independently
for each
data bits to be compressed. Other binary entropy coders are the
IBM Q Encoder, the IBM / Mitsubishi QM Encoder, and the ABS Encoder in
U.S. Patent No. 5,381,145 A entitled "Method and Apparatus
for Parallel Encoding and Decoding of Data "and published on 10 January 1995
and U.S. Patent No. 5,583,500 A are described in U.S. Patent No. 5,583,500
the title is "Method and Apparatus
for Parallel Encoding and Decoding of Data "and published on 10 January 1996
has been.
Der
FSM-Kodierer ist relativ schnell und einfach hinsichtlich der Software
zu realisieren. Der FSM-Kodierer wird gegenwärtig bei Bildkompressionssystemen
verwendet, die auf reversiblen Wavelets basieren und die der Anmelder
der vorliegenden Erfindung zur Standardisierung bzw. für eine Norm
vorgeschlagen hat.Of the
FSM encoder is relatively fast and easy in terms of software
to realize. The FSM encoder is currently being used in image compression systems
which are based on reversible wavelets and that of the applicant
the present invention for standardization or for a standard
has proposed.
Es
wird eine FSM-Kodierer-Hardware beschrieben. Bei einer Ausführungsform
stellt die vorliegende Erfindung ein Verfahren zum Kodieren bereit,
das die Erzeugung eines Intervalls enthält, das auf einen FSM-Zustand
bzw. einen Zustand eines finiten Automaten basiert (im folgenden
wird "finiter Automat" auch durch "FSM" abgekürzt). Das
Intervall umfaßt
ein Paar von Unterintervallen, die Endpunkte aufweisen. Das Verfahren
beinhaltet ebenso die Auswahl eines Paar von Unterintervallpaaren,
und zwar basierend darauf, ob das Eingangsbit sich in einem höchstwahrscheinlichen
Zustand befindet, und beinhaltet weiterhin die Ausgabe von 0 oder
mehr Bits, die Bits entsprechen, die zwischen Endpunkten des genannten
einen Unterintervalls übereinstimmen,
die von den höchstsignifikanten
Bits bis zu den ersten nicht übereinstimmenden
Bits zwischen den Endpunkten des genannten einen Unterintervalles,
aber nicht bis einschließlich
des ersten nicht übereinstimmenden
Bits auftreten.An FSM encoder hardware is described. In one embodiment, the present invention provides a method of encoding that includes generating an interval based on a finite state machine (FSM) state (hereinafter "finite state machine") abbreviated by "FSM"). The interval includes a pair of subintervals having endpoints. The method also includes selecting a pair of subinterval pairs based on whether the input bit is in a most probable state, and further including outputting 0 or more bits corresponding to bits that match between endpoints of said one subinterval, which occur from the most significant bits to the first disagreeing bits between the endpoints of said one subinterval, but not up to and including the first disagreeing bit.
Die
vorliegende Erfindung wird im Zusammenhang mit den beigefügten Zeichnungen
beschrieben. Dabei werden verschiedene Ausführungsformen offenbart. Verschiedene
Merkmale unterschiedlicher Ausführungsformen
können
miteinander kombiniert werden.The
The present invention will become more apparent when taken in conjunction with the accompanying drawings
described. In this case, various embodiments are disclosed. Various
Features of different embodiments
can
be combined with each other.
1A ist ein Blockdiagramm einer Ausführungsform
eines Kompressions-/Dekompressionssystems. 1A Figure 10 is a block diagram of one embodiment of a compression / decompression system.
1B zeigt eine alternative Ausführungsform eines Systems, das
auf einem FSM-Kodierer basiert. 1B shows an alternative embodiment of a system based on a FSM encoder.
2 ist
ein Blockdiagramm einer Ausführungsform
eines FSM-Kodierers/-Dekodierers, der eine kombinierte FSM-Kodier-/-Dekodiertabelle
aufweist, die eine separate Wahrscheinlichkeitsschätzung und
Biterzeugungs-Nachschlagetabellen aufweist (eine Nachschlagetabelle
wird im folgenden als "LUT" abgekürzt). 2 Fig. 12 is a block diagram of one embodiment of a FSM encoder / decoder having a combined FSM encoding / decoding table having a separate probability estimate and bitmap lookup tables (a look-up table is hereinafter abbreviated to "LUT").
3 ist
ein Blockdiagramm einer Ausführungsform
eines FSM-Kodierers/-Dekodierers mit einer einzigen LUT, der sowohl
eine Wahrscheinlichkeitsschätzung
als auch eine Biterzeugung durchführt. 3 FIG. 12 is a block diagram of one embodiment of a single LUT FSM encoder / decoder that performs both likelihood estimation and bit generation.
4 ist
ein Blockdiagramm einer Ausführungsform
des FSM-Kodierers der vorliegenden Erfindung. 4 Fig. 10 is a block diagram of one embodiment of the FSM encoder of the present invention.
5 ist
ein Blockdiagramm einer Ausführungsform
der pem_code-Einheit ("pem" steht für "probability estimation
machine", also für "Wahrscheinlichkeitsschätzmaschine"). 5 is a block diagram of one embodiment of the pem_code unit ("pem" stands for "probability estimation machine").
6 ist
ein Blockdiagramm einer Ausführungsform
der pem_expand-Einheit ("expand" steht für "Aufweitung"). 6 FIG. 12 is a block diagram of one embodiment of the pem_expand unit ("expand" stands for "widening").
7 ist
ein Blockdiagramm einer Ausführungsform
der bit_generate-Einheit ("generate" steht für "Erzeugen"). 7 is a block diagram of one embodiment of the bit_generate unit ("generate" means "generate").
8 ist
ein Blockdiagramm einer Ausführungsform
der Biterzeugungslogik. 8th Figure 4 is a block diagram of one embodiment of the bit generation logic.
9 ist
ein Blockdiagramm einer Ausführungsform
der Zustand-Aufweitungslogik. 9 Figure 4 is a block diagram of one embodiment of the state expansion logic.
10 zeigt eine beispielhafte Ausrichtung von Wavelet-Koeffizienten. 10 shows an exemplary alignment of wavelet coefficients.
11 ist ein Blockdiagramm einer Ausführungsform
der Flush-Logik bzw. Räum-Logik
zum Räumen in
einem Zyklus. 11 Figure 10 is a block diagram of one embodiment of flushing logic for scavenging in one cycle.
12 zeigt ein Blockdiagramm einer Flush-Logik zum "Flushen" bzw. "Räumen" in einem Zyklus mit dem Kodewort, das
durch das aktuelle Intervall bestimmt wird. 12 Figure 12 shows a block diagram of a flush logic for "flushing" in a cycle with the codeword determined by the current interval.
13 ist ein Blockdiagramm einer Ausführungsform
der Kodewort-Erzeugungs-Einheit
(cw_gen-Einheit) der Biterzeugungslogik des Kodierers der vorliegenden
Erfindung. 13 Figure 10 is a block diagram of one embodiment of the codeword generation unit (cw_gen unit) of the bit generation logic of the encoder of the present invention.
14 ist ein Blockdiagramm einer Ausführungsform
der Packeinheit des Entropiekodierers der vorliegenden Erfindung. 14 Fig. 12 is a block diagram of one embodiment of the packing unit of the entropy encoder of the present invention.
14A ist ein Blockdiagramm einer alternativen Ausführungsform
der Packlogik. 14A Figure 12 is a block diagram of an alternative embodiment of the packing logic.
15 ist ein Blockdiagramm einer Ausführungsform
der Entpackeinheit ("unpack"-Einheit). 15 Figure 10 is a block diagram of one embodiment of the unpack unit.
16 ist ein Steuer-FluBdiagramm zum Kodieren. 16 is a control flowchart for coding.
17 ist ein Steuer-Flußdiagramm zum Dekodieren. 17 is a control flowchart for decoding.
Ein
Teil der Offenbarung dieses Patentdokuments enthält Material, das unter Urheberrechtsschutz steht.
Der Inhaber des Urheberrechts hat keine Einwände gegen die Faksimilereproduktion
des Patentdokuments oder der Patentveröffentlichung, so wie sie in
der Datei oder der Aufzeichnung des Patent- und Markenamts vorhanden
sind, behält
sich aber ansonsten alle Urheberrechte vor.One
Part of the disclosure of this patent document contains material that is under copyright protection.
The copyright owner has no objection to facsimile reproduction
of the patent document or the patent publication as disclosed in
file or record of the Patent and Trademark Office
are, keep
but otherwise all copyright.
Es
wird ein Apparat und ein Verfahren zum FSM-Kodieren beschrieben.
Bei der folgenden Beschreibung werden zahlreiche Details, wie z.B.
Signalnamen, Nummern der Bits usw. dargelegt. Es ist jedoch für einen
Fachmann offensichtlich, daß die
vorliegende Erfindung ohne dieses spezifischen Details praktiziert
werden kann. In anderen Fällen
werden gut bekannte Strukturen und Geräte in Blockdiagrammform gezeigt,
anstatt im Detail, um eine Verschleierung der vorliegenden Erfindung
zu vermeiden.It
An apparatus and method for FSM coding is described.
In the following description, numerous details, e.g.
Signal names, numbers of bits, etc. set forth. It is, however, for one
Professional obvious that the
present invention practiced without this specific detail
can be. In other cases
well-known structures and devices are shown in block diagram form,
rather than in detail, a concealment of the present invention
to avoid.
Gewisse
Teile der detaillierten Beschreibungen, die unten gegeben werden,
werden durch Algorithmen und symbolische Darstellungen von Operationen
mit Datenbits innerhalb eines Computerspeichers ausgedrückt. Diese
algorithmischen Beschreibungen und Darstellungen stellen die Mittel
dar, die von Fachleuten auf dem Gebiet der Datenverarbeitung verwendet
werden, um das Wesen ihrer Arbeit anderen Fachleuten effektiv zu übermitteln.
Ein Algorithmus wird hier und im allgemeinen als eine selbstkonsistente
Abfolge von Schritten aufgefaßt,
die zu einem gewünschten
Ergebnis führt.
Bei den Schritten handelt es sich um solche, die physikalische Manipulationen
von physikalischen Quantitäten
erforderlich machen. Üblicherweise
aber nicht notwendigerweise nehmen diese Quantitäten die Gestalt von elektrischen
oder magnetischen Signalen ein, die dazu in der Lage sind, gespeichert, übertragen,
kombiniert, verglichen oder sonstwie manipuliert zu werden. Es hat
sich, hauptsächlich
aus Gründen
einer gemeinsamen Verwendung, als zweckmäßig erwiesen, diese Signale
als Bits, Werte, Elemente, Symbole, Zeichen bzw. Charakter, Terme,
Ziffern bzw. Nummern oder dergleichen zu bezeichnen.Certain
Parts of the detailed descriptions given below
be through algorithms and symbolic representations of operations
expressed with data bits within a computer memory. These
algorithmic descriptions and representations represent the means
used by professionals in the field of data processing
to convey the essence of their work to other professionals effectively.
An algorithm is here and in general as a self-consistent
Sequence of steps taken
the one to a desired one
Result leads.
The steps are those that are physical manipulations
of physical quantities
make necessary. Usually
but not necessarily these quantities take the form of electric
or magnetic signals that are capable of, stored, transmitted,
combined, compared or otherwise manipulated. It has
yourself, mainly
for reasons
a common use, these signals have proved expedient
as bits, values, elements, symbols, signs or characters, terms,
To designate numbers or the like.
Man
sollte jedoch im Kopf behalten, daß alle diese oder ähnliche
Ausdrücke
mit passenden physikalischen Quantitäten in Beziehung stehen und
sie lediglich zweckmäßige Bezeichnungen
darstellen, die auf diese Quantitäten angewendet werden. Soweit
es nicht anderswo besonders hervorgehoben wird, wie dies aus der
folgenden Diskussion offensichtlich wird, sind bei der Diskussion
der vorliegenden Erfindung verwendeten Terme, wie z.B. "Verarbeiten" oder "Berechnen" oder "Bestimmen" oder "Darstellen" oder "Anzeigen" oder dergleichen,
so zu verstehen, daß sie
sich auf die Wirkung und die Verarbeitungen eines Computersystems
oder eines ähnlichen
elektronischen Rechengeräts
beziehen können,
das Daten manipuliert und transformiert, die als physikalische (elektronische)
Quantitäten
innerhalb der Register und Speicher des Computersystems dargestellt
werden und die in andere Daten transformiert werden, die in ähnlicher
Weise als physikalische Quantitäten
innerhalb der Speicher oder Register oder anderer Informationsspeicher
des Computersystems oder der Übertragungs-
oder Anzeigevorrichtungen dargestellt werden.you
However, keep in mind that all these or similar
expressions
be related to appropriate physical quantities and
they are merely expedient designations
represent that are applied to these quantities. So far
it is not particularly emphasized elsewhere, as can be seen from the
The following discussion becomes obvious are in the discussion
terms used in the present invention, e.g. "Processing" or "calculating" or "determining" or "displaying" or "displaying" or the like,
to understand that they
on the effect and the processing of a computer system
or a similar one
electronic computing device
can relate
manipulating and transforming data that is considered to be physical (electronic)
quantities
represented within the registers and memory of the computer system
and that are transformed into other data that are similar
Way as physical quantities
within the stores or registers or other information store
of the computer system or the transmission
or display devices.
Wie
im folgenden diskutiert wird, bezieht sich die vorliegende Erfindung
auf einen Apparat, um die Operationen darin durchzuführen. Dieser
Apparat kann für
die erforderlichen Zweck speziell aufgebaut werden oder er kann
einen Allzweck-Computer umfassen, der selektiv durch ein Computerprogramm
aktiviert oder rekonfiguriert wird, das in dem Computer gespeichert
ist. Ein derartiges Computerprogramm kann in einem- computerlesbaren
Speicher gespeichert werden, wie z.B. auf irgendeiner Platte bzw.
Diskette, wie z.B. optische Platten, magnetische Disketten, CD-ROMs,
magneto-optische Disketten, Nur-Lese-Speicher (ROMs), Speicher mit
wahlfreiem Zugriff (RAMs), EPROMs, EEPROMs, magnetische oder optische
Karten oder jeglicher Typ von Medium, der zum Speichern elektronischer
Befehle geeignet ist, wobei das Medium insbesondere mit einem Computersystembus
verbunden ist. Die Algorithmen, die hierin vorgestellt werden, beziehen
sich nicht inhärent
auf irgendeinen bestimmten Computer oder einen anderen Apparat.
Verschiedene Allzweckgeräte können mit
Programmen in Übereinstimmung
mit den hierin'gegebenen
Lehren verwendet werden oder es kann sich als zweckmäßig erweisen,
einen spezialisierteren Apparat zu bauen, der die erforderlichen
Verfahrensschritte durchführt.
Die erforderliche Struktur für
eine Vielfalt dieser Maschinen wird sich aus der folgenden Beschreibung
ergeben. Zusätzlich
ist die vorliegende Erfindung nicht unter Bezugnahme auf irgendeine
bestimmte Programmiersprache beschrieben. Man wird erkennen, daß eine Vielfalt
von Programmiersprachen verwendet werden kann, um die Lehren der
Erfindung, wie sie hierin beschrieben wird, zu realisieren.As
will be discussed below, the present invention relates
on an apparatus to perform the operations in it. This
Apparatus can for
the required purpose can be built up specifically or he can
include a general-purpose computer, selectively by a computer program
is enabled or reconfigured in the computer
is. Such a computer program can be read in a computer
Memory are stored, such. on any record or
Floppy disk, such as optical disks, magnetic disks, CD-ROMs,
magneto-optical disks, read only memories (ROMs), memory with
random access (RAMs), EPROMs, EEPROMs, magnetic or optical
Cards or any type of medium used to store electronic
Commands is suitable, the medium in particular with a computer system bus
connected is. The algorithms presented herein relate
not inherent
on any particular computer or other device.
Various general purpose devices can use
Programs in accordance
with the herein given
Gauges or it may prove useful
to build a more specialized apparatus that required
Performs method steps.
The required structure for
A variety of these machines will become apparent from the following description
result. additionally
the present invention is not with reference to any
certain programming language described. You will realize that a variety
of programming languages can be used to teach the lessons of
To realize the invention as described herein.
Übersicht über die
vorliegende ErfindungOverview of the
present invention
Die
vorliegende Erfindung stellt einen FSM-Kodierer und ein Kodiersystem,
das auf FSM basiert, bereit. Sie sind für eine verbesserte Leistungsfähigkeit
gestaltet. Gewisse Realisierungen sind mehr geeignet für ein Hardware-Realisierung
oder eine Software-Realisierung
oder eine Kombination aus beiden.The
The present invention provides a FSM encoder and a coding system.
based on FSM. They are for improved performance
designed. Certain implementations are more suitable for a hardware implementation
or a software realization
or a combination of both.
Der
FSM-Kodierer der vorliegenden Erfindung kann der Entropiekodierer
sein, der in einem System verwendet wird, das eine Kompression mit
reversiblen Wavelets verwendet.Of the
The FSM encoder of the present invention may be the entropy encoder
which is used in a system that uses compression
reversible wavelets used.
1A ist ein Blockdiagramm einer Ausführungsform
des Kompressions-/Dekompressionssystems der vorliegenden Erfindung.
Nimmt man Bezug auf 1A, so werden Bilddaten 105 in
die Transformationseinrichtung 101 für reversible Wavelets eingegeben
oder davon empfangen. Die Transformationseinrichtung 101 ist
mit dem Kontextmodell 102 verbunden. Das Kontextmodell 102 ist
ebenso mit dem FSM-Kodierer 103 verbunden, der ebenso mit
der Header-Verarbeitungseinheit bzw. Kopf-Verarbeitungseinheit 104 verbunden
ist. Die Header-Verarbeitungseinheit 104 erzeugt oder empfängt kodierte
Daten und eine Signalisierung 108. Bei einer Ausführungsform
umfassen die kodierten Daten und die Signalisierung 108 einen
gekennzeichneten ("tagged") Kodestrom. Somit
sind zusätzlich
zur Kommunikation mit dem Kontextmodell 102 die kodierten
Daten des FSM-Kodierers 103 in einem gekennzeichneten Kodestrom
enthalten, der durch eine Header-Verarbeitungseinheit erzeugt/verwendet
wird. 1A FIG. 12 is a block diagram of one embodiment of the compression / decompression system of the present invention. FIG. If you take reference 1A , so are image data 105 in the transformation facility 101 input or received for reversible wavelets. The transformation device 101 is with the context model 102 connected. The context model 102 is the same with the FSM encoder 103 connected to the header processing unit or header processing unit as well 104 connected is. The header processing unit 104 generates or receives coded data and signaling 108 , In one embodiment, the encoded data and the signaling include 108 a tagged code stream. Thus, in addition to communicating with the context model 102 the coded data of the FSM encoder 103 in a designated code stream generated / used by a header processing unit.
Der
Grundbetrieb des Systems, das auf einem FSM-Kodierer basiert und
in der 1A gezeigt ist, ist wie folgt.
Während
des Kodierens werden die Eingangsdaten (die Bilddaten 105)
in eine Reihe von Koeffizienten, von denen jeder mehrere Bits lang
ist, durch die reversible Vorwärts-Wavelet-Transformation
der Transformationseinrichtung 101 konvertiert. Die Bits
der Koeffizienten von der Transformation 101 werden in
Kontextbins durch das Kontextmodell 102 unterteilt. Eine
Wahrscheinlichkeitsschätzung
wird für
jedes Kontextbin gespeichert und durch eine Wahrscheinlichkeitsschätzmaschine
(PEM) innerhalb des FSM-Kodierers 103 erzeugt. Bei einer
Ausführungsform
ist die Schätzung
ein Zustand, der dem Wert eines Zählers ähnelt. Bei einer Ausführungsform
zeigt ein Bit des Zustands an, ob es für das Kontextbin wahrscheinlicher
ist, daß "0" oder "1" auftritt.
Dies wird das wahrscheinlichere Symbol oder MPS genannt. Die anderen
Bits geben den Versatz ("skew") (PSTATE) des MPS
(im Gegensatz zu dem am wenigsten wahrscheinlichen Symbol (LPS))
an, und zwar von nahe bei 50% bis nahezu 100%. Mit anderen Worten
geben die anderen Bits an, wie wahrscheinlich es ist, daß das MPS
(im Vergleich zu dem LPS) auftritt.The basic operation of the system based on a FSM encoder and in the 1A is shown is as follows. During encoding, the input data (the image data 105 ) into a series of coefficients, each of which is several bits long, by the reversible forward wavelet transform of the transform means 101 converted. The bits of the coefficients of the transformation 101 be in context bins through the context model 102 divided. A probability estimate is stored for each context bin and by a probability estimator (PEM) within the FSM encoder 103 generated. In one embodiment, the estimate is a state that is similar to the value of a counter. In one embodiment, a bit of the state indicates whether the context bin is more likely to experience "0" or "1". This is called the more probable symbol or MPS. The other bits indicate the skew (PSTATE) of the MPS (as opposed to the Least Probable Symbol (LPS)), from near 50% to near 100%. In other words, the other bits indicate how likely it is that the MPS (as compared to the LPS) occurs.
Zustandsmaschinen-Aktualisierungsregeln,
die im folgenden beschrieben werden, spezifizieren, was bei einem
gegebenen Zustand und dem Auftreten einer 0 oder einer 1 zu tun
ist, um den PSTATE und das Bit, das als Kontextbin wahrscheinlicher
auftritt, zu aktualisieren. Bei einer Ausführungsform spezifizieren die
Regeln nur 10 Bits pro Kontext, um dem MPS und dem PSTATE zu folgen
bzw. damit Schritt zu halten. Im allgemeinen bewirken die Regeln,
daß der
PSTATE um einen gewissen Umfang zunimmt, wenn ein MPS auftritt, und
um einen gewissen Umfang abnimmt, wenn ein LPS (wenigst wahrscheinliches
Symbol) auftritt. Bei einer Ausführungsform
wird der Versatz ("skew") in 16 Wahrscheinlichkeitsklassen
(PCLASS) unterteilt. Jede PCLASS wird für einen Bereich von Wahrscheinlichkeiten
verwendet.FSM update rules
which will be described below, specify what happens at a
given condition and the occurrence of a 0 or a 1 do
is more likely to use the PSTATE and the bit as context bin
occurs, update. In one embodiment, the specify
Only control 10 bits per context to follow the MPS and PSTATE
or to keep up with it. In general, the rules
that the
PSTATE increases to some extent when an MPS occurs, and
decreases to some extent when an LPS (least likely
Symbol) occurs. In one embodiment
becomes the skew in 16 probability classes
(PCLASS). Each PCLASS will work for a range of probabilities
used.
Ein
FSM-Kodierer 103 umfaßt
einen finiten Automaten, der Bits für jede PCLASS kodiert. Um Bits
mit Wahrscheinlichkeiten größer als
50 % zu kodieren, werden manchmal keine Bits ausgegeben und die
Information wird temporär
in dem Zustand dieses finiten Automaten gespeichert. Dieser Entropiekodierer-Zustand zeigt
an, welche Bitmuster in der Zukunft ausgegeben werden können, so
daß Bits,
für die
bisher noch keine Ausgabe erfolgte, korrekt von dem Dekodierer verstanden
werden.An FSM encoder 103 includes a finite state machine that encodes bits for each PCLASS. In order to code bits with probabilities greater than 50%, sometimes no bits are output and the information is temporarily stored in the state of this finite state machine. This entropy encoder state indicates which bit patterns can be output in the future so that bits that have not been output yet are correctly understood by the decoder.
Bei
einer alternativen Ausführungsform,
wie z.B. jene, die in 1B gezeigt ist, ist ein System,
das auf einem FSM-Kodierer basiert, zum Handhaben binärer Bilder
gezeigt. Das binäre
Bild kann Pixel enthalten, die in einen von 1024 Kontexten unterteilt
sind, die auf binären
Werten benachbarter Pixel basieren, die bereits kodiert worden sind.
Dies ähnelt
dem JBIG-Standard. 1B beinhaltet ebenso zwei Beispiele
von Kontexten, die auf benachbarten Pixeln basieren.In an alternative embodiment, such as those described in U.S. Pat 1B 3, a system based on an FSM encoder is shown for handling binary images. The binary image may include pixels that are divided into one of 1024 contexts that are based on binary values of adjacent pixels that have already been encoded. This is similar to the JBIG standard. 1B also includes two examples of contexts based on neighboring pixels.
Obwohl
das System in Verbindung mit einem System, das auf reversiblen Wavelets
basiert, und einem Binärbild-Kompressionssystem
beschrieben wird, ist die vorliegende Erfindung auch auf andere
Systeme, wie z.B. Systemen, die nicht auf Wavelet basieren, anwendbar.
Weiter, obwohl die 1A und 1B in
Verbindung mit Bilddaten beschrieben wurden, können andere Datentypen und
Informationen verwendet werden, wie z.B. Ton bzw. Geräusche, Text,
vom Computer ausführbare
Dateien bzw. Programm und Computerdaten-Dateien.Although the system is described in conjunction with a system based on reversible wavelets and a binary image compression system, the present invention is also applicable to other systems, such as non-wavelet-based systems. Next, though the 1A and 1B other data types and information may be used, such as sounds, text, computer-executable files and / or programs, and computer data files.
FSM-Kodierer, der auf
einer Nachschlagtabelle (LUT) basiertFSM encoder, the on
based on a lookup table (LUT)
Die
vorliegende Erfindung stellt einen Software-FSM-Kodierer bereit,
bei dem der Großteil
des FSM-Kodierers als eine Nachschlagtabelle oder als mehrere Nachschlagtabellen
(LUTs) realisiert ist. Der FSM-Kodierer der vorliegenden Erfindung
kann z.B. LUTs mit Adresseneingängen
für das
zu kodierende Bit (MPS oder nicht), den Entropiekodierer-Zustand
und/oder entweder die PCLASS oder den PSTATE verwenden. Bei einer
Ausführungsform
handelt es sich bei der PCLASS um eine Klasse, die eine aktuelle
Wahrscheinlichkeitsschätzung
für eine
binäre
Entscheidung enthält
und die für
einen Bereich von Wahrscheinlichkeiten verwendet wird. Bei einer
Ausführungsform
handelt es sich bei dem PSTATE um einen Wahrscheinlichkeitsschätzzustand
für eine
binäre
Entscheidung. Die PCLASS und der PSTATE können Wahrscheinlichkeiten für andere
Entscheidungen als binären
Entscheidungen entsprechen. Bei einer Ausführungsform umfaßt der Adresseneingang
für das
zu kodierende Bit 1 Bit, für
den Entropiekodierer-Zustand 6 Bits, für die PCLASS 4 Bits und für den PSTATE
9 Bits. Unter Verwendung dieses Adressenschemas ist die gesamte
Adressengröße 11 oder
16 Bits, was 2K oder 64K LUT-Einträge erforderlich macht. Gewisse
Software-Implementationen des Dekodiererabschnittes des FSM-Kodierers
verwenden die kodierten Daten als eine Eingabe zu dem LUT (wobei
das zu kodierende Bit ersetzt wird). Die kodierten Daten können 8 Bit
lang sein. Dies erhöht
die Größe der LUT-Eingabeadresse
von 18 auf 23 Bit, was 256K oder 8M LUT-Einträge erforderlich macht.The present invention provides a software FSM encoder in which most of the FSM encoder is implemented as a lookup table or as multiple lookup tables (LUTs). The FSM encoder of the present invention may include, for example, LUTs with address inputs for the bit to be encoded (MPS or not), use the entropy encoder state and / or either the PCLASS or the PSTATE. In one embodiment, the PCLASS is a class that contains a current probability estimate for a binary decision and that is used for a range of probabilities. In one embodiment, the PSTATE is a probability estimate for a binary decision. The PCLASS and the PSTATE may correspond to probabilities for decisions other than binary decisions. In one embodiment, the address input for the bit to be encoded comprises 1 bit, for the entropy encoder state 6 bits, for the PCLASS 4 bits and for the PSTATE 9 bits. Using this address scheme, the total address size is 11 or 16 bits, which requires 2K or 64K LUT entries. Certain software implementations of the decoder portion of the FSM encoder use the encoded data as an input to the LUT (replacing the bit to be encoded). The encoded data can be 8 bits long. This increases the size of the LUT input address from 18 to 23 bits, which requires 256K or 8M LUT entries.
Bei
einer Ausführungsform
der vorliegenden Erfindung wird eine einzige Tabelle mit ungefähr der Größe der Kodiertabelle,
die oben beschrieben wurde, sowohl für das Kodieren als auch für das Dekodieren
verwendet. Mit anderen Worten werden getrennte Tabellen für das Dekodieren
und das Kodieren nicht benötigt. Durch
Beseitigen des großen
Dekodierers LUT wird ein beträchtliche
Ersparnis erzielt.at
an embodiment
The present invention provides a single table of approximately the size of the coding table,
described above for both coding and decoding
used. In other words, separate tables for decoding
and the coding is not needed. By
Eliminate the big one
Decoder LUT becomes a considerable
Savings achieved.
2 stellt
ein Blockdiagramm eines FSM-Kodierers/-Dekodierers dar, der eine
kombinierte FSM-Kodier-/-Dekodier-Tabelle aufweist, die getrennte
bzw. separate Wahrscheinlichkeitsschätz- und Biterzeugungs-LUTs
verwendet. Nimmt man Bezug auf 2, so
ist ein Kontextspeicher 201 mit einer Wahrscheinlichkeitsschätztabelle 202,
einem Multiplexer (MUX) 203, einer Wahrscheinlichkeitschätzlogik 205 und
einer Bitlogik 204 verbunden. Eine Wahrscheinlichkeitsschätztabelle 202 ist
ebenso mit einem MUX 203 und einer Wahrscheinlichkeitsschätzlogik 205 sowie
mit einer Entropiekodiertabelle 206 verbunden. Die Wahrscheinlichkeitsschätzlogik 205 ist
weiter mit einem MUX 203, einer Bitlogik 204 und
einem MUX 209 verbunden. Die Entropiekodiertabelle 206 ist
mit einem Entropiekodierzustand 207, einer Bitlogik 204 und
MUXs 208 bis 210 verbunden. Die MUXs 208 bis 210 sind
mit einer Bitlogik 204 verbunden. Der MUX 210 ist
ebenso mit einem Entropiekodierzustand 207 verbunden. 2 FIG. 12 illustrates a block diagram of an FSM encoder / decoder having a combined FSM encode / decode table that uses separate and probabilistic estimate and bit generation LUTs, respectively. If you take reference 2 so is a context store 201 with a probability estimation table 202 , a multiplexer (MUX) 203 , a probability estimation logic 205 and a bit logic 204 connected. A probability estimation table 202 is as well with a mux 203 and a probability estimation logic 205 as well as with an entropy coding table 206 connected. The probability estimation logic 205 is on with a mux 203 , a bit logic 204 and a mux 209 connected. The entropy coding table 206 is with an entropy coding state 207 , a bit logic 204 and muxs 208 to 210 connected. The muxs 208 to 210 are with a bit logic 204 connected. The MUX 210 is also with an entropy coding state 207 connected.
Der
Betriebsablauf während
des Kodierens ist wie folgt. Details, wie z.B. die Werte der LUTs
sind und wie die Wahrscheinlichkeitlogik arbeitet, werden detailliert
im folgenden beschrieben. Bitbreitenangaben stellen nur Beispiele
dar; bei einer Software-Realisierung würden diese typischerweise auf
mehrfache von 8 Bits oder auf die Wortgröße des Computers, auf dem die
Software läuft,
aufgerundet werden.Of the
Operation during
of coding is as follows. Details, such as the values of the LUTs
are and how the probability logic works will be detailed
described below. Bit widths are examples only
group; in a software implementation these would typically open
multiple of 8 bits or the word size of the computer on which the
Software is running,
be rounded up.
Als
erstes wird ein Kontext 211 verwendet, um den Kontextspeicher 201 zu
adressieren. In Antwort auf den Kontext 211 gibt ein Kontextspeicher 201 einen
PSTATE (pstate 234) und ein MPS (mps 215) aus.
Die Anzahl der Adressenbits (und Speicherstellen) ist anwendungsabhängig. Bei
einer Ausführungsform
werden 540 Speicherstellen verwendet und der Kontextspeicher 201 gibt
9 Bits für
pstate 234 und 1 Bit für
mps 215 aus. Die 10-Bit-Binär-Schablonen in 1B machen 1024 Speicherstellen erforderlich.First, a context 211 used the context memory 201 to address. In response to the context 211 gives a context memory 201 a PSTATE (pstate 234 ) and an MPS (mps 215 ) out. The number of address bits (and memory locations) is application dependent. In one embodiment, 540 storage locations are used and the context memory 201 gives 9 bits for pstate 234 and 1 bit for mps 215 out. The 10-bit binary templates in 1B make 1024 memory locations necessary.
In
Antwort auf die Eingabe von pstate 234 erzeugt die Wahrscheinlichkeitsschätztabelle 202,
die eine LUT bei einer Ausführungsform
darstellt, eine Anzahl von Ausgaben. Die Wahrscheinlichkeitsschätztabelle 202 gibt
eine Wahrscheinlichkeitsschätzung
(pclass 219) aus. Die Wahrscheinlichkeitsschätztabelle 202 gibt ebenso
den nächsten
Wahrscheinlichkeitsschätzzustand,
PSTATE, aus, falls ein MPS auftrat und eine Aktualisierung des PSTATE
erforderlich ist. Die Wahrscheinlichkeitsschätztabelle 202 gibt
ebenso den nächsten
PSTATE aus und, ob das MPS (von 0 auf 1 oder von 1 auf 0) umgeschaltet
werden sollte, wie durch die Umschaltanzeige 218 angezeigt
ist, falls ein LPS auftrat und eine Aktualisierung auf dem PSTATE
erforderlich ist. Bei einer Ausführungsform
umfaßt
die Umschaltanzeige 218 ein 1-Bit-Signal. Die nächsten Wahrscheirilichkeitsschätzzustände, die
ausgegeben werden, wenn ein MPS auftrat, werden hierin als pstate_mps 216 bezeichnet und,
wenn ein LPS auftrat, als ein pstate_lps 217 bezeichnet.In response to the input of pstate 234 generates the probability estimation table 202 representing an LUT in one embodiment, a number of outputs. The probability estimation table 202 gives a probability estimate (pclass 219 ) out. The probability estimation table 202 Also issues the next Probability Estimate State, PSTATE, if an MPS occurred and an update of the PSTATE is required. The probability estimation table 202 also outputs the next PSTATE and whether the MPS should be toggled (from 0 to 1 or from 1 to 0) as shown by the toggle indication 218 is displayed if an LPS occurred and an update to the PSTATE is required. In one embodiment, the toggle indication includes 218 a 1-bit signal. The next probability estimation states that are output when an MPS occurred are referred to herein as pstate_mps 216 and, if an LPS occurred, as a pstate_lps 217 designated.
Der
pstate_mps 216 und der pstate_lps 217 zusammen
mit dem pstate 234 stellen Eingänge zu dem MUX 203 dar.
Die Wahrscheinlichkeitsschätzlogik 215 gibt
eine Auswahlanzeige (z.B. ein Signal bzw. Signale) 220 aus,
die unter den Wahrscheinlichkeitsschätzzuständen, die zu dem MUX 203 als
der nächste
Wahrscheinlichkeitsschätzzustand
eingegeben werden, der als next_pstate 213 bezeichnet wird.
Bei einer Ausführungsform
wählt,
falls der pstate 234 weniger oder gleich 214 ist,
die Auswahlanzeige 220 entweder einen pstate_mps 216 aus,
wenn das Eingangsbit ein MPS ist, oder einen pstate_lps 217 aus,
wenn das Eingangsbit ein LPS ist; falls der pstate 234 größer als 214 ist
und die Bits ausgegeben werden, dann wählt die Auswahlanzeige 220 einen
pstate_mps 216 aus, wenn das Eingangsbit ein MPS ist, oder
einen pstate_lps 217 aus, wenn das Eingangsbit ein LPS
ist. Auf der anderen Seite, falls der pstate 234 größer als 214 ist
und keine Bits ausgegeben werden (Kodieren) oder verbraucht werden
(Dekodieren), dann wählt
die Auswahlanzeige 220 einen pstate 234 als next_pstate 213 aus.The pstate_mps 216 and the pstate_lps 217 along with the pstate 234 provide inputs to the MUX 203 dar. The probability estimation logic 215 gives a selection display (eg a signal or signals) 220 from among the probability estimation states leading to the MUX 203 are entered as the next probability estimate state, which is next_pstate 213 referred to as. In one embodiment, if the pstate 234 less or equal 214 is, the selection display 220 either a pstate_mps 216 if the input bit is an MPS or a pstate_lps 217 if the input bit is an LPS; if the pstate 234 greater than 214 and the bits are output, then the selection display selects 220 a pstate_mps 216 if the input bit is an MPS or a pstate_lps 217 off if the input bit is an LPS. On the other hand, if the pstate 234 greater than 214 is and not bits are output (coding) or consumed (decoding), then the selection display selects 220 a pstate 234 as next_pstate 213 out.
Eine
Entropiekodiertabelle 206 ist angeschlossen, um eine pclass 219 und
einen FSM_state 236 von dem Entropiekodierzustandsspeicher 207 zu
empfangen. Bei einer Ausführungsform
umfaßt
der Entropiekodierzustand 207 ein Register, einen anderen temporären Puffer,
eine Schlange oder Speichermechanismus. Die Entropiekodiertabelle 206 arbeitet
als eine Biterzeugungs-LUT. Anfänglich
ist der Entropiekodierzustand 0. Die Entropiekodiertabelle 206 gibt
cw(codeword)_mps 227 und cw_lps 228 als Kodewörter (z.B.
Bitmuster, Tokens, Symbole usw.) als den kodierten Datenstrom aus.
cw_mps 227 und cw_lps 228 sind die Kodewörter, die
in Antwort darauf, daß ein
MPS und ein LPS in den Dekoder eingegeben werden, jeweilig ausgegeben
werden. Bei einer Ausführungsform
umfaßt
cw_mps 227 und cw_lps 228 8-Bit-Kodewörter.An entropy coding table 206 is connected to a pclass 219 and a FSM_state 236 from the entropy coding state memory 207 to recieve. In one embodiment, the entropy encoding state comprises 207 a register, another temporary buffer, a queue or storage mechanism. The entropy coding table 206 works as a bit-generating LUT. Initially, the entropy coding state is 0 , The entropy coding table 206 gives cw (codeword) _mps 227 and cw_lps 228 as code words (eg, bit patterns, tokens, symbols, etc.) as the coded data stream. cw_mps 227 and cw_lps 228 are the code words respectively outputted in response to an MPS and an LPS being input to the decoder. In one embodiment, cw_mps 227 and cw_lps 228 8-bit codewords.
Ebenso
in Antwort auf ihre Eingänge
gibt die Entropiekodiertabelle 206 eine Anzeige der Anzahl
von Bits in der Ausgabe aus. Insbesondere gibt die Entropiekodiertabelle 206 size_mps 230 und
size_lps 231 aus, die die Größe der Kodewörter anzeigen,
das heißt
die Anzahl von Bits jeweilig in cw_mps 227 und cw_lps 228, die
das aktuelle Bitmuster enthalten. Bei einer Ausführungsform umfassen jeweils
size_mps 230 und size_lps 231 4 Bits. Die Ausgaben
der Entropiekodierertabelle 206 beinhalten ebenso state_mps 233,
das den nächsten
Entropiekodiererzustand anzeigt, falls MPS ausgegeben wird, und
state_lps 234, das den nächsten Entropiekodiererzustand
anzeigt, falls LPS ausgegeben wird. Bei einer Ausführungsform
umfassen sowohl state_mps 233 als auch state_lps 234 6
Bits.Likewise, in response to their inputs, the entropy coding table returns 206 an indication of the number of bits in the output. In particular, the entropy coding table gives 206 size_mps 230 and size_lps 231 indicating the size of the codewords, that is, the number of bits respectively in cw_mps 227 and cw_lps 228 that contain the current bit pattern. In one embodiment, each size_mps 230 and size_lps 231 4 bits. The outputs of the entropy coder table 206 also include state_mps 233 indicating the next entropy encoder state if MPS is output and state_lps 234 indicating the next entropy encoder state if LPS is output. In one embodiment, both state_mps 233 as well as state_lps 234 6 bits.
Die
Bitlogik 204 vergleicht das zu kodierende Bit bit_in 222 mit
mps 215 und erzeugt eine Wahrscheinlich-Anzeige (z.B. ein
Signal bzw. Signale) 223, falls sie dieselben sind. Auf
der anderen Seite, falls sie nicht dieselben sind, wird die Wahrscheinlich-Anzeige 223 nicht
behauptet bzw. aktiviert.The bit logic 204 compares the bit to be coded bit_in 222 with mps 215 and generates a probable display (eg a signal or signals) 223 if they are the same. On the other hand, if they are not the same, the probability indicator becomes 223 not claimed or activated.
Falls
die Wahrscheinlich-Anzeige 223 wahr ist (das heißt aktiviert),
werden cw_mps 227, size_mps 230 und state_mps 223 von
MUXs 208 bis 210 jeweilig als Ausgabebitstrom
(Ausgabe kodierter Daten 229), die Größe der Ausgabe (Größe 232)
und der nächste
FSM-Zustand 235 (der in das Entropiekodierzustandsregister
geladen wird) ausgegeben. Falls die Wahrscheinlich-Anzeige nicht
wahr ist, werden cw_lps 228, size_lps 231 und
state_lps 234 von MUXs 208 bis 210 jeweilig
ausgegeben.If the probability display 223 true (that is, activated) becomes cw_mps 227 , size_mps 230 and state_mps 223 of muxs 208 to 210 respectively as output bitstream (output coded data 229 ), the size of the output (size 232 ) and the next FSM state 235 (which is loaded into the entropy coding state register). If the probability indicator is not true, cw_lps 228 , size_lps 231 and state_lps 234 of muxs 208 to 210 respectively issued.
Die
Wahrscheinlichkeitsschätzlogik 205 bestimmt
next_mps 212 und steuert, ob der nächste PSTATE (next_pstate 213)
der aktuelle pstate 234 oder einer der aktualisierten Werte
(pstate_mps 216 oder pstate_lps 217) ist. Bei
einer Ausführungsform
bestimmt die Wahrscheinlichkeitsschätzlogik 205 next_mps 212 und
sollte umgeschaltet werden, falls ein LPS auftritt und falls der
PSTATE gleich 4 oder weniger ist oder gleich 262 ist. Die
Steuerung, um next_pstate 213 auszuwählen, beinhaltet eine Logik,
um eine Auswahlanzeige 220 zu erzeugen, um eine Eingabe
des MUX 203 auszuwählen.The probability estimation logic 205 determined next_mps 212 and controls whether the next PSTATE (next_pstate 213 ) the current pstate 234 or one of the updated values (pstate_mps 216 or pstate_lps 217 ). In one embodiment, the probability estimation logic determines 205 next_mps 212 and should be toggled if an LPS occurs and if the PSTATE is 4 or less or equal 262 is. The controller to next_pstate 213 Selecting includes logic to display a selection 220 to generate an input of the MUX 203 select.
Next_mps 212 und
next_pstate 213 werden in die Stelle des Kontextspeichers 201 geschrieben,
der mit einer Adresse adressiert ist, der auf dem Kontext 211 basiert.
Bei einer Ausführungsform
ist die Adresse Kontext 211, wobei es sich bei den zu schreibenden
Daten um next_mps 212 und next-pstate 213 handelt.Next_mps 212 and next_pstate 213 will be in the place of the context memory 201 written addressed with an address based on the context 211 based. In one embodiment, the address is context 211 , where the data to be written is next_mps 212 and next-pstate 213 is.
Somit
führt auf
diese Art und Weise der LUT-basierte Kodierer/Dekodierer mit der
separaten Wahrscheinlichkeitsschätzung
und FSM-Biterzeugung ein Kodieren durch.Consequently
leads up
this way the LUT based encoder / decoder with the
separate probability estimate
and FSM bit generation encoding.
Der
Kodierer/Dekodierer 200 auf LUT-Basis dekodiert in ähnlicher
Art und Weise. Um mit dem Dekodieren zu beginnen, wird der Kontextspeicher 201 durch
den Kontext 211 adressiert. In Antwort auf den Kontext 211 gewinnt
der Kontextspeicher 201 pstate 234 und MPS 215 wieder.
Wiederum hängt
die Anzahl der Adressenbits (und Speicherstellen) von der Anwendung
ab. Bei einer Ausführungsform
gibt der Kontextspeicher 201 9 Bits für pstate 234 und 1
Bit für
MPS 215 aus.The encoder / decoder 200 on LUT basis decoded in a similar way. To begin decoding, the context memory becomes 201 through the context 211 addressed. In response to the context 211 wins the context memory 201 pstate 234 and MPS 215 again. Again, the number of address bits (and memory locations) depends on the application. In one embodiment, the context memory is 201 9 bits for pstate 234 and 1 bit for MPS 215 out.
In
Antwort auf pstate 234 gibt die Wahrscheinlichkeitsschätztabelle 202 eine
Wahrscheinlichkeitsschätzung
(pclass 219) aus. Bei einer Ausführungsform umfaßt pclass 219 4
Bits. Die Wahrscheinlichkeitsschätztabelle 202 gibt
ebenso den nächsten
PSTATE aus, falls ein MPS auftritt und eine PSTATE-Aktualisierung
erforderlich ist. In einem derartigen Fall umfaßt der nächste PSTATE pstate_mps 216.
Bei einer Ausführungsform
ist eine PSTATE-Aktualisierung erforderlich, wenn der pstate 234 gleich 214 oder
weniger ist oder wenn der pstate 234 größer als 214 ist, und
Bits werden verbraucht. Bei einer Ausführungsform umfaßt pstate_mps 216 9
Bits. Die Wahrscheinlichkeitsschätztabelle 202 gibt
ebenso den nächsten
PSTATE und eine Anzeige aus, daß das
MPS (von 0 auf 1 oder von 1 auf 0) umgeschaltet werden sollte, falls
ein LPS auftritt und die PSTATE-Aktualisierung erforderlich ist.
In diesem Fall wird der nächste
PSTATE durch pstate_lps 217 angezeigt und die Anzeige,
ob das MPS umgeschaltet werden sollte, wird durch die Umschaltanzeige
(z.B. ein Signal bzw: Signale) 218 angezeigt. Bei einer
Ausführungsform
umfassen pstate_lps 217 9 Bits und die Umschaltanzeige 218 1
Bit.In response to pstate 234 gives the probability estimation table 202 a probability estimate (pclass 219 ) out. In one embodiment, pclass 219 4 bits. The probability estimation table 202 Also issues the next PSTATE if an MPS occurs and a PSTATE update is required. In such a case, the next PSTATE comprises pstate_mps 216 , In one embodiment, a PSTATE update is required when the pstate 234 equal 214 or less or if the pstate 234 greater than 214 is, and bits are consumed. In one embodiment, pstate_mps 216 9 bits. The probability estimation table 202 also issues the next PSTATE and an indication that the MPS should be switched (from 0 to 1 or from 1 to 0) if an LPS occurs and the PSTATE update is required. In this case, the next PSTATE is pstate_lps 217 at shown and the indication whether the MPS should be switched, is indicated by the switching display (eg a signal or signals) 218 displayed. In one embodiment, pstate_lps 217 9 bits and the shift indicator 218 1 bit.
Die
Entropiekodiertabelle 206 ist angeschlossen, um pclass 219 und
den FSM-Zustand 236 (von dem Entropiekodierzustandsregister 207)
zu empfangen. In Antwort auf diese Eingänge gibt die Entropiekodiertabelle
(Biterzeugungs-LUT) 206 die aktuelle Anzahl von Bits in
cw_mps 227 und cw_lps 228 aus, die das aktuelle
Bitmuster (z.B. Kodewort, Token, Symbol usw.) enthalten, und zwar
zusammen mit size_mps 230 und size_lps 231, die
die Größe der Kodewörter cw_mps 227 und
cw_lps 228 jeweilig darstellen. Cw mps 227 und cw_lps 228 werden
nicht verwendet, wenn dekodiert wird und müssen nicht in einer Umgebung
erzeugt werden, in der nur dekodiert wird. Bei einer Ausführungsform
sind diese Größenanzeigen
4 Bits am Stück,
während
die Kodewörter
8 Bit lang sind. Die Entropiekodiertabelle 206 gibt ebenfalls
einen state-mps 233 und einen state-lps 234 als
die nächsten
Entropiezustände
aus. Hierbei wird bemerkt, daß der
Begriff "state" in dieser Anmeldung
für "Zustand" steht. Bei einer
Ausführungsform
umfassen die nächsten
Entropiekodiererzustände 6
Bits. Bemerkenswert ist, daß anfänglich der
Entropiekodierzustand 0 ist.The entropy coding table 206 is connected to pclass 219 and the FSM state 236 (from the entropy coding state register 207 ) to recieve. In response to these inputs, the entropy coding table (bit generation LUT) 206 the current number of bits in cw_mps 227 and cw_lps 228 which contain the current bit pattern (eg codeword, token, symbol, etc.) along with size_mps 230 and size_lps 231 that is the size of the codewords cw_mps 227 and cw_lps 228 represent respectively. Cw mps 227 and cw_lps 228 are not used when decoded and do not need to be generated in an environment where only decodes are made. In one embodiment, these size indications are 4 bits at a time, while the code words are 8 bits long. The entropy coding table 206 also gives a state-mps 233 and a state-lps 234 as the next entropy states. It should be noted that the term "state" in this application stands for "state". In one embodiment, the next entropy encoder states comprise 6 bits. It is noteworthy that initially the entropy coding state is 0.
Während dieses
Dekodierprozesses gibt die Entropiekodiertabelle 206 ebenso
einen Aufspaltwert 226 aus, der eine Trennung zwischen
dem MPS- und dem LPS-Bitmuster in dem Codestrom anzeigt. Bei einer Ausführungsform
umfaßt
der Aufspaltwert 226 8 Datenbits. Die Entropiekodiertabelle 206 gibt
ebenso eine fps-Anzeige oder einen Wert 225 aus, der anzeigt, ob
Bitmuster auf der "00000000"-Seite des Aufspaltwertes 226 ein
MPS anzeigen oder nicht. Bei einer Ausführungsform umfaßt der fps-Wert 225 einen
1- Bit-Wert. Die Verwendung
eines Aufspaltwertes 226 und eines fps-Wertes 225 wird
detaillierter im folgenden beschrieben.During this decoding process, the entropy coding table returns 206 also a splitting value 226 indicating a separation between the MPS and LPS bit patterns in the code stream. In one embodiment, the split value comprises 226 8 data bits. The entropy coding table 206 Also outputs an fps indication or a value 225 indicating whether bit patterns on the "00000000" side of the split value 226 show an MPS or not. In one embodiment, the fps value includes 225 a 1-bit value. The use of a splitting value 226 and an fps value 225 will be described in more detail below.
Die
Bitlogik 204 ist angeschlossen, um einen fps-Wert 225 und
einen Aufspaltwert 226 sowie mps 215 und kodierte
eingehende Daten 221 zu empfangen. In Antwort auf diese
Eingänge
vergleicht die Bitlogik 204 8 Bits des Bitstroms (kodierte
eingehende Daten 221 bzw. "coded_data_in") mit dem Aufspaltwert 226 und
erzeugt eine Wahrscheinlich-Anzeige
(z.B. ein Signal bzw. Signale) 223, indem die Wahrheitstabelle
verwendet wird, die in Tabelle 1 unten gezeigt ist.The bit logic 204 is connected to an fps value 225 and a split value 226 as well as mps 215 and encoded incoming data 221 to recieve. In response to these inputs, the bit logic compares 204 8 bits of bitstream (coded incoming data 221 or "coded_data_in") with the splitting value 226 and generates a probable display (eg a signal or signals) 223 by using the truth table shown in Table 1 below.
Tabelle 1Table 1
Erzeugung
einer Wahrscheinlich-Anzeige, wenn dekodiert wird Generation of a probable display when decoding
Falls
die Wahrscheinlich-Anzeige 223 wahr ist, wird state_mps 223 des
MUX 210 als nächster FSM-Zustand 235 ausgegeben,
der in das Entropiekodierzustandsregister 207 geladen wird.
Falls ebenso die Wahrscheinlich-Anzeige 223 wahr ist, wird
size_mps 230 von dem MUX 209 ausgegeben, um die
Anzahl der Bits der kodierten Daten zu spezifizieren, die beim Dekodieren
verwendet worden sind und nun nicht mehr benötigt werden. Dies ermöglicht die
Steuerung eines Schieberegisters (nicht gezeigt, um eine Verschleierung der
Erfindung zu vermeiden), das eine Verschiebung bei den eingehenden
kodierten Daten bzw. bei coded_data_in 221 durchzuführen. Falls
ansonsten die Wahrscheinlich-Anzeige 223 nicht wahr ist,
wird size_lps 231 von dem MUX 209 (ungebraucht)
und state_lps 234 von dem MUX 210 ausgegeben.
Bemerkenswert ist, daß die
ausgegebenen kodierten Daten bzw. coded_data_out 229 während des
Dekodierens nicht verwendet werden (das heißt "nicht darum kümmern").If the probability display 223 true is state_mps 223 of the MUX 210 as the next FSM state 235 output to the entropy coding state register 207 is loaded. If so, the probability display 223 true is size_mps 230 from the mux 209 to specify the number of bits of coded data used in decoding that are no longer needed. This allows the control of a shift register (not shown to avoid obfuscation of the invention) that causes a shift in the input coded data or coded_data_in 221 perform. Otherwise, the probability indicator 223 is not true, will size_lps 231 from the mux 209 (unused) and state_lps 234 from the mux 210 output. It is noteworthy that the output coded data or coded_data_out 229 not be used during decoding (that is, "do not worry about it").
Ebenso
bestimmt während
des Dekodierens die Wahrscheinlichkeitsschätzlogik 205 den nächsten MPS-Wert
und gibt ihn als next_mps 212 aus. Bei einer Ausführungsform
umfaßt
next_mps 212 einen 1-Bit-Wert. Bei einer Ausführungsform
wird der MPS-Wert umgeschaltet, falls ein LPS auftritt und falls
der PSTATE gleich oder weniger als 4 oder gleich 262 ist.
Die Wahrscheinlichkeitsschätzlogik 205 steuert
ebenso, ob der nächste
PSTATE der aktuelle PSTATE ist, wie durch pstate 234 oder
einen der aktualisierten PSTATE-Werte angezeigt ist, die durch pstate_mps 216 oder
pstate_lps 217 angezeigt werden. Die Wahrscheinlichkeitsschätzlogik 205 steuert
diese Auswahl durch Verwendung der Auswahlanzeige (z.B. ein Signal
bzw. Signale) 220 zu dem MUX 203, dessen Ausgang
der next_pstate 213 ist.Also, during decoding, the probability estimation logic determines 205 the next MPS value and returns it as next_mps 212 out. In one embodiment, next_mps 212 a 1-bit value. In one embodiment, the MPS value is toggled if an LPS occurs and if the PSTATE is equal to or less than 4 or equal 262 is. The probability estimation logic 205 also controls whether the next PSTATE is the current PSTATE, as by pstate 234 or one of the updated PSTATE values indicated by pstate_mps 216 or pstate_lps 217 are displayed. The probability estimation logic 205 controls this selection by using the selection display (eg a signal or signals) 220 to the mux 203 whose output is the next_pstate 213 is.
Sowohl
der next_mps 212 als auch der next_pstate 213 werden
zu der Stelle des Kontextspeichers 201 geschrieben, die
durch den Kontext 211 adressiert ist.Both the next_mps 212 as well as the next_pstate 213 become the place of the context memory 201 written by the context 211 is addressed.
Bemerkenswert
ist, daß der
Kontextspeicher 201 dieselben Eingaben aufweist, egal ob
kodiert wird oder dekodiert wird. Ebenso bemerkenswert ist, daß die Freigabelogik,
um den Dekodierbetrieb oder den Kodierbetrieb freizugeben, nicht
gezeigt ist, aber für
einen Fachmann offensichtlich sein würde.It is noteworthy that the context memory 201 the same input, whether encoded or decoded. It is equally noteworthy that the enable logic to enable the decode mode or the encoder mode is not shown, but would be apparent to one of ordinary skill in the art.
Bemerkenswert
ist, daß der
Kodierer/Dekodierer der 2, ähnlich wie andere Kodierer,
die hierin beschrieben sind, zwei getrennte Dateneingänge zeigt,
einen für
kodierte Daten und einen anderen für unkodierte Daten. Bei einer
Ausführungsform
kann der Kodierer diese beiden Datentypen auf demselben Eingang
oder Port empfangen und eine gut bekannte Logik und/oder ein oder
mehrere Kodier-/Dekodier-Steuersignale verwenden, um die zugehörigen Teile
des Kodierers oder der Auswahllogik zu benachrichtigen, welcher
Datentyp aktuell von dem Kodierer empfangen wird. Eine derartige
Eingabestruktur kann bei jeder hierin beschriebenen Ausführungsform
eingebaut bzw. realisiert werden.It is noteworthy that the encoder / decoder of the 2 similar to other encoders described herein, showing two separate data inputs, one for encoded data and another for uncoded data. In one embodiment, the encoder may receive these two types of data on the same input or port and use well known logic and / or one or more encode / decode control signals to notify the associated parts of the encoder or select logic which data type is currently from the encoder is received. Such an input structure may be incorporated in any embodiment described herein.
3 zeigt
einen FSM-Kodierer/-Dekodierer mit einer einzelnen bzw. einzigen
LUT, die sowohl eine Wahrscheinlichkeitsschätzung als auch eine Biterzeugung
durchführt.
Durch Verwenden einer einzigen LUT werden bei einer Software-Realisierung
weniger Operationen (Instruktionen bzw. Befehle) zu Kosten einer
größeren LUT
verwendet. 3 shows a FSM coder / decoder with a single LUT that performs both a likelihood estimation and a bit generation. Using a single LUT, in a software implementation, uses fewer operations (instructions) at the cost of a larger LUT.
Während des
Kodierens ist der Betrieb wie folgt. Als erstes wird der Kontext 211 verwendet,
um den Kontextspeicher 201 zu adressieren. In Antwort auf
den Kontext 211 gibt der Kontextspeicher 201 pstate 234 und
mps 215 aus. Die Anzahl der Adressenbits (und Speicherstellen)
ist anwendungsabhängig.
Bei einer Ausführungsform
werden 540 Speicherstellen verwendet und der Kontextspeicher 201 gibt
9 Bits für
pstate 234 und 1 Bit für
mps 215 aus.During encoding, the operation is as follows. First, the context 211 used the context memory 201 to address. In response to the context 211 gives the context memory 201 pstate 234 and mps 215 out. The number of address bits (and memory locations) is application dependent. In one embodiment, 540 storage locations are used and the context memory 201 gives 9 bits for pstate 234 and 1 bit for mps 215 out.
In
Antwort auf die Eingabe von pstate 234 gibt eine kombinierte
Wahrscheinlichkeitsschätzung
und eine FSM-Biterzeugungstabelle 301 den nächsten Wahrscheinlichkeitsschätzzustand
(PSTATE) aus, falls ein MPS auftritt, und eine Aktualisierung des
PSTATE ist erforderlich. Bei einer Ausführungsform ist eine PSTATE-Aktualisierung
erforderlich, wenn pstate 234 gleich oder weniger als 214 ist
oder wenn pstate 234 größer als 214 ist
und beide Bits ausgegeben werden (in dem Fall des Kodierens oder
verbraucht werden in dem Fall des Dekodierens). Bei einer Ausführungsform
umfaßt
pstate_mps 216 9 Bits. Die kombinierte Tabelle 202 gibt ebenso
den nächsten
PSTATE aus und, ob das MPS (von 0 auf 1 oder von 1 auf 0) umgeschaltet
werden sollte, wie durch die Umschaltanzeige 218 angezeigt
wird, falls ein LPS auftritt und eine Aktualisierung des PSTATE erforderlich
ist. Bei einer Ausführungsform
umfaßt
die Umschaltanzeige 218 ein 1-Bit-Signal. Der nächste Wahrscheinlichkeitsschätzzustand
umfaßt,
wenn ein MPS auftritt, ein pstate_mps 216 oder, wenn ein
LPS auftritt, ein pstate_lps 217. Das pstate_mps 216 und
das pstate_lps 217 zusammen mit pstate 234 stellen Eingaben
zum MUX 203 dar. Die Wahrscheinlichkeitsschätzlogik 205 gibt
eine Auswahlanzeige (z.B. ein Signal bzw. Signale) 220 aus,
die unter den Wahrscheinlichkeitsschätzzuständen auf den Eingängen des
MUX 203 als den nächsten
Wahrscheinlichkeitsschätzzustand
next_pstate 213 auswählt.In response to the input of pstate 234 gives a combined probability estimate and a FSM bit generation table 301 the next Probability Estimate State (PSTATE) if an MPS occurs, and an update of the PSTATE is required. In one embodiment, a PSTATE update is required if pstate 234 equal or less than 214 is or if pstate 234 greater than 214 and both bits are output (in the case of encoding or consumed in the case of decoding). In one embodiment, pstate_mps 216 9 bits. The combined table 202 also outputs the next PSTATE and whether the MPS should be toggled (from 0 to 1 or from 1 to 0) as shown by the toggle indication 218 is displayed if an LPS occurs and an update of the PSTATE is required. In one embodiment, the toggle indication includes 218 a 1-bit signal. The next probability estimation state includes a pstate_mps when an MPS occurs 216 or, if an LPS occurs, a pstate_lps 217 , The pstate_mps 216 and the pstate_lps 217 together with pstate 234 make entries to the MUX 203 dar. The probability estimation logic 205 gives a selection display (eg a signal or signals) 220 from among the probability estimation states on the inputs of the MUX 203 as the next probability estimation state next_pstate 213 selects.
Die
kombinierte Tabelle 301 ist angeschlossen, um den FSM-Zustand 236 aus
dem Entropiekodierzustandsspeicher 207 zu empfangen. Bei
einer Ausführungsform
umfaßt
der Entropiekodierzustand 207 ein Register, einen temporären Puffer,
eine Schlange oder einen anderen Speichermechanismus. Die kombinierte Tabelle 301 arbeitet
als eine Biterzeugungs-LTU. Anfänglich
beträgt
der Entropiekodierzustand 0 und die. Entropiekodiertabelle 206 gibt
cw_mps 227 und cw_lps 228 als Kodewörter (Bitmuster)
als den kodierten Datenstrom aus. Bei einer Ausführungsform umfassen cw_mps 227 und
cw_lps 228 8-Bit-Kodewörter.
Die kombinierte Tabelle 301 gibt ebenso eine Anzeige der
Anzahl der Bits in der Ausgabe aus. Insbesondere gibt die kombinierte
Tabelle 301 size_mps 230 aus, das die Größe der Kodewörter anzeigt,
das heißt
die Anzahl der Bits in cw_mps 227, und gibt size_lps 231 aus,
das die Größe der Kodewörter anzeigt,
das heißt
die Anzahl der Bits in cw_lps 228, die jeweils das aktuelle
Bitmuster enthalten. Bei einer Ausführungsform umfaßt sowohl size_mps 230 als
auch size_lps 231 4 Bits. Die Ausgaben der kombinierten
Tabelle 301 beinhalten ebenso state_mps 233 als
auch state_lps 234, die die nächsten Entropiekodiererzustände anzeigen,
falls jeweilig ein MPS oder ein LPS ausgegeben wird. Bei einer Ausführungsform
umfaßt
jeder state_mps 233 und state_lps 234 6 Bits.The combined table 301 is connected to the FSM state 236 from the entropy coding state memory 207 to recieve. In one embodiment, the entropy encoding state comprises 207 a register, temporary buffer, queue, or other storage mechanism. The combined table 301 works as a literacy LTU. Initially, the entropy coding state is 0 and the. Entropiekodiertabelle 206 gives cw_mps 227 and cw_lps 228 as codewords (bit patterns) as the coded data stream. In one embodiment, cw_mps 227 and cw_lps 228 8-bit codewords. The combined table 301 also outputs an indication of the number of bits in the output. In particular, there is the combined table 301 size_mps 230 indicating the size of the codewords, that is, the number of bits in cw_mps 227 , and gives size_lps 231 indicating the size of the codewords, that is, the number of bits in cw_lps 228 , each containing the current bit pattern. In one embodiment, both size_mps 230 as well as size_lps 231 4 bits. The outputs of the combined table 301 also include state_mps 233 as well as state_lps 234 indicating the next entropy encoder states if an MPS or an LPS is output, respectively. In one embodiment, each includes state_mps 233 and state_lps 234 6 bits.
Die
Bitlogik 204 vergleicht das zu kodierende Bit, bit_in 222,
mit mps 215 und aktiviert die Wahrscheinlich-Anzeige 223 (Wahrscheinlich-Anzeige 223 ist
wahr), falls sie gleich sind. Auf der anderen Seite wird, falls sie
nicht gleich sind, die Wahrscheinlich-Anzeige 223 nicht
aktiviert (Wahrscheinlich-Anzeige 223 ist nicht wahr).The bit logic 204 compares the bit to be coded, bit_in 222 , with mps 215 and activates the probability display 223 (Probably display 223 is true), if they are the same. On the other hand, if they are not equal, the probability indicator 223 not activated (Probable display 223 is not true).
Falls
die Wahrscheinlich-Anzeige 223 wahr ist (das heißt aktiviert),
werden jeweilig cw_mps 227, size_mps 230 und state_mps 233 von
den MUXs 208 bis 210 zu dem Bitstrom und next_FSM_state 235 bzw. nächsten FSM-Zustand 235 (der
in dem Entropiekodierzustandsregister 207 geladen ist)
ausgegeben. Ansonsten werden cw_lps 228, size_lps und state_lps 234 von
den MUXs 208 bis 210 jeweilig ausgegeben.If the probability display 223 true (that is, activated) will become respectively cw_mps 227 , size_mps 230 and state_mps 233 from the MUXs 208 to 210 to the bitstream and next_FSM_state 235 or next FSM state 235 (which in the entropy coding state register 207 loaded). Otherwise, cw_lps 228 , size_lps and state_lps 234 from the MUXs 208 to 210 respectively issued.
Die
Wahrscheinlichkeitsschätzlogik 205 bestimmt
next_mps 212 und steuert, ob der nächste PSTATE (next_pstate 213)
der aktuelle pstate ist, wie durch pstate 234 angezeigt
ist, oder einer der aktualisierten Werte pstate_mps 216 oder
pstate_lps 217 ist. Diese Steuerung tritt teilweise auf,
indem eine Auswahlanzeige 220 für MUX 203 erzeugt
wird, wie oben beschrieben wurde.The probability estimation logic 205 determined next_mps 212 and controls whether the next PSTATE (next_pstate 213 ) the current pstate is as through pstate 234 is displayed, or one of the updated pstate_mps values 216 or pstate_lps 217 is. This control partially occurs by a selection display 220 for MUX 203 is generated as described above.
Next_mps 212 und
next-pstate 213 werden ebenso zu der Stelle des Kontextspeichers 201 geschrieben,
der durch den Kontext 211 adressiert ist. Das heißt, die
Adresse umfaßt
Kontext 211 und die zu schreibenden Daten umfassen next_mps 212 und
next_pstate 213.Next_mps 212 and next-pstate 213 become also the place of the context memory 201 written by the context 211 is addressed. That is, the address includes context 211 and the data to be written includes next_mps 212 and next_pstate 213 ,
Der
Dekodierbetrieb der 3 ist ähnlich. Als erstes wird der
Kontext 211 verwendet, um den Kontextspeicher 201 zu
adressieren. In Antwort auf den Kontext 211 gibt der Kontextspeicher 201 pstate 234 und
mps 215 aus. Die Anzahl der Adressenbits (und Speicherstellen)
ist anwendungsabhängig.
Bei einer Ausführungsform
werden 540 Speicherstellen verwendet. Der Kontextspeicher 201 gibt
9 Bits für
pstate 234 und 1 Bit für mps 215 aus.The decoding mode of the 3 is similar. First, the context 211 used the context memory 201 to address. In response to the context 211 gives the context memory 201 pstate 234 and mps 215 out. The number of address bits (and memory locations) is application dependent. In one embodiment 540 Memory locations used. The context memory 201 gives 9 bits for pstate 234 and 1 bit for mps 215 out.
In
Antwort auf die Eingabe von pstate 234 gibt die kombinierte
Tabelle 301 den nächsten
Wahrscheinlichkeitsschätzzustand
PSTATE aus, falls ein MPS auftritt und eine Aktualisierung des PSTATE
erforderlich ist. Die kombinierte Tabelle 301 gibt ebenso den nächsten PSTATE
aus und, ob das MPS (von 0 auf 1 oder 1 auf 0) umgeschaltet werden
sollte, wie durch die Umschaltanzeige 218 angezeigt ist,
falls ein LPS auftrat und eine Aktualisierung des PSTATE erforderlich
ist. Bei einer Ausführungsform
umfaßt
die Umschaltanzeige 218 ein 1-Bit-Signal. Die nächsten Wahrscheinlichkeitsschätzzustände umfassen,
wenn ein MPS auftrat, ein pstate_mps 216, und wenn ein
LPS auftritt, ein pstate_lps 217. Pstate_mps 216 und
pstate_lps 217 werden zusammen mit pstate 234 zu
dem MUX 203 eingegeben. Die Wahrscheinlichkeitsschätzlogik 205 gibt
eine Auswahlanzeige 220 aus, die unter den Wahrscheinlichkeitsschätzzuständen an
den Eingängen
von MUX 203 als dem nächsten
Wahrscheinlichkeitsschätzzustand
next_pstate 213 auswählt.In response to the input of pstate 234 gives the combined table 301 the next probability estimate state PSTATE if an MPS occurs and an update of the PSTATE is required. Combined table 301 also outputs the next PSTATE and whether the MPS should be toggled (from 0 to 1 or 1 to 0), as by the toggle indication 218 is displayed if an LPS occurred and an update of the PSTATE is required. In one embodiment, the toggle indication includes 218 a 1-bit signal. The next probability estimation states include, if an MPS occurred, a pstate_mps 216 and when an LPS occurs, a pstate_lps 217 , Pstate_mps 216 and pstate_lps 217 be together with pstate 234 to the mux 203 entered. The probability estimation logic 205 gives a selection display 220 from among the probability estimation states at the inputs of MUX 203 as the next probability estimation state next_pstate 213 selects.
Der
FSM-Zustand 236 (von dem Entropiekodierzustandsregister 207)
ist ebenso eine Eingabe zu der kombinierten Tabelle (LUT) 301.
Bei einer Ausführungsform
umfaßt
der Entropiekodierzustand 207 ein Register, einen temporären Puffer,
eine Schlange oder einen anderen Speichermechanismus. Die kombinierte
Tabelle 301 arbeitet als eine Biterzeugungs-LUT. Anfänglich ist
der Entropiekodierzustand 0. Die kombinierte Tabelle 301 gibt
cw_mps 227 und cw_lps 228 als Kodewörter (Bitmuster,
Tokens, Symbole usw.) als den kodierten Datenstrom aus, und zwar
in Abhängigkeit
davon, ob eine Wahrscheinlich-Anzeige 223 aktiviert ist.
Bei einer Ausführungsform
umfassen cw_mps 227 und cw_lps 228 8-Bit-Kodewörter. Bei
einer Ausführungsform, die
nur dekodiert, werden cw_mps 227 und cw_lps 228 nicht
benötigt.
Die Entropiekodiertabelle 206 gibt ebenso eine Anzeige
der Anzahl der Bits in der Ausgabe aus. Insbesondere gibt die Entropiekodiertabelle 206 size_mps 230 und
size_lps 231 aus, die die Größe der Kodewörter, das
heißt
jeweilig die Anzahl der Bits in cw_mps 227 und cw_lps 228,
die die aktuellen Bitmuster enthalten. Bei einer Ausführungsform
umfassen sowohl size_mps 230 als auch size_lps 231 4
Bits. Die Ausgaben der kombinierten Tabelle 301 beinhalten
ebenso state_mps 233 und state_lps 234, die die
nächsten
Entropiekodiererzustände
anzeigen, falls ein MPS oder ein LPS jeweilig ausgegeben wird. Bei
einer Ausführungsform
umfassen state_mps 233 und state_lps 234 6 Bits.The FSM state 236 (from the entropy coding state register 207 ) is also an input to the combined table (LUT) 301 , In one embodiment, the entropy encoding state comprises 207 a register, temporary buffer, queue, or other storage mechanism. The combined table 301 works as a bit-generating LUT. Initially, the entropy coding state is 0. The combined table 301 gives cw_mps 227 and cw_lps 228 as codewords (bit patterns, tokens, symbols, etc.) as the coded data stream, depending on whether a probable display 223 is activated. In one embodiment, cw_mps 227 and cw_lps 228 8-bit codewords. In one embodiment that only decodes, cw_mps 227 and cw_lps 228 not required. The entropy coding table 206 also outputs an indication of the number of bits in the output. In particular, the entropy coding table gives 206 size_mps 230 and size_lps 231 which is the size of the codewords, that is, the number of bits in cw_mps 227 and cw_lps 228 containing the current bit patterns. In one embodiment, both size_mps 230 as well as size_lps 231 4 bits. The outputs of the combined table 301 also include state_mps 233 and state_lps 234 indicating the next entropy coder states if an MPS or an LPS is respectively output. In one embodiment, state_mps 233 and state_lps 234 6 bits.
Die
Bitlogik 204 der 3 arbeitet
in derselben Art und Weise, wie oben in Verbindung mit 2 beschrieben
wurde, und zwar einschließlich
der Durchführung
des Dekodierens unter Verwendung eines Aufspaltwertes 226 und
einer fps-Anzeige 225.The bit logic 204 of the 3 works in the same way as above in conjunction with 2 including the performance of decoding using a split value 226 and a fps ad 225 ,
Falls
die Wahrscheinlich-Anzeige 223 wahr ist, wird state_mps 223 von
MUX 210 als nächster FSM-Zustand 235 ausgegeben,
der in das Entropiekodierzustandsregister 207 geladen wird.
Ebenso, falls die Wahrscheinlich-Anzeige 223 wahr ist,
wird size_mps 230 von MUX 209 ausgegeben, um die
Anzahl der Bits der kodierten Daten zu spezifizieren, die beim Dekodieren
verwendet worden sind und nicht mehr benötigt werden. Dies ermöglicht die
Steuerung eines Schieberegisters (nicht gezeigt, um eine Verschleierung
der Erfindung zu vermeiden), das bei coded_data_in 221 eine
Verschiebung durchführt.
Ansonsten werden, falls die Wahrscheinlich-Anzeige 223 nicht
wahr ist, jeweilig size_lps 231 und state_lps 234 von
MUXs 209 und 210 ausgegeben. Bemerkenswert ist,
daß coded_data_out 229 während des
Dekodierens nicht verwendet wird (das heißt "man muß sich nicht darum kümmern").If the probability display 223 true is state_mps 223 from MUX 210 as the next FSM state 235 output to the entropy coding state register 207 is loaded. Likewise, if the probability display 223 true is size_mps 230 from MUX 209 to specify the number of bits of coded data used in decoding and no longer needed the. This allows control of a shift register (not shown to avoid obfuscation of the invention) used in coded_data_in 221 makes a shift. Otherwise, if the probability display 223 is not true, respectively size_lps 231 and state_lps 234 of muxs 209 and 210 output. It is noteworthy that coded_data_out 229 is not used during decoding (that is, "you do not have to worry about it").
Die
Wahrscheinlichkeitsschätzlogik 205 bestimmt
next_mps 212 und steuert, ob der nächste PSTATE next_pstate 213 der
aktuelle PSTATE pstate 234 ist oder einer der aktualisierten
Werte pstate_mps 216 oder pstate_lps 217 ist.
Diese Steuerung tritt teilweise auf, indem eine Auswahlanzeige 220 für MUX 203 erzeugt wird,
wie oben beschrieben wurde.The probability estimation logic 205 determined next_mps 212 and controls if the next PSTATE next_pstate 213 the current PSTATE pstate 234 or one of the updated pstate_mps values 216 or pstate_lps 217 is. This control partially occurs by a selection display 220 for MUX 203 is generated as described above.
Next_mps 212 und
next_pstate 213 werden zu der Stelle des Kontextspeichers 201 geschrieben,
die durch den Kontext 211 adressiert ist. Das heißt, die
Adresse umfaßt
Kontext 211 und die Daten, die zu schreiben sind, umfassen
next_mps 212 und next_pstate 213. Die LUTs, die
als "getrennt" bzw. "separat" bezeichnet sind,
erfordern eine "reine
Wahrscheinlichkeitsschätzungs"-LUT. Die LUTs, die
als "kombiniert" bezeichnet sind,
erfordern keine "reine
Wahrscheinlichkeitsschätzungs"-LUT.Next_mps 212 and next_pstate 213 become the place of the context memory 201 written by the context 211 is addressed. That is, the address includes context 211 and the data to be written includes next_mps 212 and next_pstate 213 , The LUTs, labeled "disconnected" or "separate," require a "pure probability estimate" LUT. The LUTs, referred to as "combined", do not require a "pure probability estimate" LUT.
Die
Tabelle 2 faßt
die Größen der
verschiedenen LUTs zusammen. Diese Tabelle zeigt die signifikanten
Einsparungen bei der Verwendung einer einzigen Kodier-/Dekodiertabelle
mit Aufspaltpunkten zum Kodieren über die Verwendung der Nur-Dekodier-Tabellen, die den
Kodestrom als eine Eingabe verwenden. Nimmt man Bezug auf Tabelle
2, so erfordern LUTs, die mit "separat" bezeichnet sind,
eine "reine Wahrscheinlichkeitsschätzungs"-LUT, während LUTs,
die als "kombiniert" bezeichnet sind,
keine "reine Wahrscheinlichkeitsschätzungs"-LUT benötigen.The
Table 2 summarizes
the sizes of
different LUTs together. This table shows the significant ones
Savings when using a single encoding / decoding table
with splitting points for encoding via the use of the decode-only tables containing the
Use code stream as an input. If one refers to table
2, LUTs labeled "separate" require
a "pure probability estimate" LUT, while LUTs,
which are called "combined",
do not need a "pure probability estimation" LUT.
Tabelle
2 LUT-Größen Table 2 LUT sizes
Logik-basierter FSM-KodiererLogic-based FSM encoder
Bei
einer Ausführungsform
ist der FSM-Kodierer als Hardware realisiert. Die folgende Beschreibung legt
wenigstens eine derartige Ausführungsform
dar.at
an embodiment
the FSM encoder is implemented as hardware. The following description sets
at least one such embodiment
represents.
Ein
gewisser Teil der Beschreibung wird in einer beispielhaften, an
das Verhalten angelehnten Verilog-Hardware-Beschreibungssprache
gegeben ("HDL" steht für "Hardware-Beschreibungssprache").One
some of the description will be given in an exemplary manner
the behavior inspired Verilog hardware description language
("HDL" stands for "hardware description language").
Der
FSM-Kodierer der vorliegenden Erfindung reduziert die Hardwarekosten.
Bei einer Ausführungsform
wird die Größe der Entropiekodierer-(Biterzeugungs-)Nachschlagtabelle
signifikant reduziert und bei manchen Ausführungsformen wird ihre Größe im wesentlichen
auf ein Minimum reduziert, bei dem redundante Einträge nicht
verwendet werden. Die Logik erzeugt die gesamte benötigte Information
von den nicht redundanten LUT-Einträgen. Die
Kodewort-Bitmuster und die Längen
müssen
nicht durch die LUT erzeugt werden; sie werden durch Logik erzeugt.Of the
FSM encoder of the present invention reduces hardware costs.
In one embodiment
becomes the size of the entropy coder (bitmap) lookup table
significantly reduced and in some embodiments, their size becomes substantially
reduced to a minimum, with the redundant entries not
be used. The logic generates all the information needed
from the non-redundant LUT entries. The
Codeword bit pattern and the lengths
have to
not generated by the LUT; they are generated by logic.
4 ist
ein Blockdiagramm einer Ausführungsform
des FSM-Kodierers der vorliegenden Erfindung. Die pem_expand Einheit 401 ist
mit der pem_code-Einheit 402 und der bit_generate_Einheit 403 verbunden. Die
pem_code-Einheit 402 ist ebenso mit der bit_generate-Einheit 403 verbunden.
Die Packeinheit 404 und die Entpackeinheit 405 sind
ebenso mit der bit_generate-Einheit bzw. Biterzeugungseinheit 403 verbunden. 4 Fig. 10 is a block diagram of one embodiment of the FSM encoder of the present invention. The pem_expand unit 401 is with the pem_code unit 402 and the bit_generate_unit 403 connected. The pem_code unit 402 is the same with the bit_generate unit 403 connected. The packing unit 404 and the unpacking unit 405 are also with the bit_generate unit or bit generation unit 403 connected.
Die
pem_code-Einheit 402 enthält den Kontextspeicher und
führt mehrere
Kontextwahrscheinlichkeitsschätzungen
durch. Die pem_expand-Einheit 401 konvertiert einen PSTATE,
wie z.B. einen pstate 234, in die Transformation, die jenen
PSTATE beschreibt. Die bit_generate-Einheit 403 führt die
Konversion zwischen unkodierten Bits und kodierten Bits in Antwort
auf eine PCLASS, wie z.B. pclass 219 durch. Die Packeinheit 404 kombiniert
Kodewörter
variabler Länge
in Bytes, wenn kodiert wird, wäh rend
die Entpackeinheit 405 eine Verschiebung mit variabler
Länge der
Bytes des kodierten Datenstroms während des Dekodierens durchführt.The pem_code unit 402 contains the context memory and performs several context probability estimates. The pem_expand unit 401 converts a PSTATE, such as a pstate 234 into the transformation that describes that PSTATE. The bit_generate unit 403 performs the conversion between uncoded bits and encoded bits in response to a PCLASS, such as pclass 219 by. The packing unit 404 combines codewords of variable length in bytes, when coded, during the unpacking unit 405 performs a variable length shift of the bytes of the coded data stream during decoding.
Die
Eingänge
zu dem FSM-Kodierer 400 sind wie folgt.The inputs to the FSM encoder 400 are as follows.
bit_in 222 bit_in 222
Eingabe
zu der pem_code-Einheit 402, die das während des Kodierens zu kodierende
Bit anzeigt.Input to the pem_code unit 402 which indicates the bit to be coded during encoding.
data_in 221 data_in 221
Eingabe
zu der Entpackeinheit 405, die den kodierten Datenstrom
(Bitstrom während
des Dekodierens) anzeigt. Bei einer Ausführungsform werden die Daten jeweils
als ein Byte pro Zeiteinheit eingegeben, obwohl andere Größen für die Dateneinträge verwendet werden
können.Entry to the unpacking unit 405 indicating the coded data stream (bit stream during decoding). In one embodiment, the data is entered as one byte at a time, although other sizes may be used for the data entries.
Kontext 211 context 211
Das
Kontextbin (Kontextspeicheradresse), das zu der pem_code-Einheit 407,
eingegeben wird.The context bin (context store address) associated with the pem_code unit 407 , is entered.
Takt 410 clock 410
Systemtakteingang
zu der pem_code-Einheit 402, Packeinheit 404,
bit_generate-Einheit 403 und Entpackeinheit 405.
Bei einer Ausführungsform
kann der Takteingang 410 als ein Freigabesignal für den FSM-Kodierer
dienen.System clock input to the pem_code unit 402 , Packing unit 404 , bit_generate unit 403 and unpacking unit 405 , In one embodiment, the clock input 410 serve as an enable signal for the FSM encoder.
Freigabe 414 release 414
Steueranzeige
(z.B. ein Signal bzw. Signale), die angeschlossen ist, um von der
pem_code-Einheit 402, der bit_generate-Einheit 403,
der Packeinheit 404 und der Entpackeinheit 405 empfangen
zu werden, um das Kodieren oder Dekodieren eines Bits in dem aktuellen
Taktzyklus freizugeben.Control indicator (eg a signal or signals) connected to the pem_code unit 402 , the bit_generate unit 403 , the packing unit 404 and the unpacking unit 405 to enable the encoding or decoding of a bit in the current clock cycle.
Kodieren 415 Encode 415
Steueranzeige
(z.B. ein Signal bzw. Signale), um eine Kodieren oder Dekodieren
auszuwählen.control display
(e.g., a signal) to encode or decode
select.
Flush 413 flush 413
Steueranzeige
(z.B. ein Signal bzw. Signale), um ein "Flushen" bzw. Räumen am Ende des Kodierens.
Das Flush-Signal 413 bewirkt, daß eine bit_generate-Einheit 403 geräumt wird.
Das "Flushen" bzw. Räumen bezieht
sich auf die Operation, die am Ende des Kodierens auftritt, wo jegliche
Information, die noch nicht zuControl display (eg a signal or signals) to "Flushen" or spaces at the end of the coding. The flush signal 413 causes a bit_generate unit 403 is vacated. "Flushing" refers to the operation that occurs at the end of the coding, where any information that is not yet available
Rücksetzen 411 reset 411
dem
Kodestrom ausgegeben wurde, ausgegeben wird. Wenn die bit_generate-Einheit 403 das
Räumen vollendet
hat, wird ein bg_done_flush_Signal 416 der Packeinheit 404 aktiv
zugeführt.
In Antwort auf das bg_done_flush_Signal 416 und das Flush-Signal 413 räumt sich
die Packeinheit 404 selbst. Wenn das Räumen bzw. "Flushen" vollendet ist, aktiviert die Packeinheit 404 das
done_flush_Signal 424. Asynchrone Initialisierungsanzeige
(z.B. ein Signal bzw. Signale) für
alle Speicherelemente (z.B. Flip-Flops) in der pem_code-Einheit 402,
Packeinheit 404, bit_generate-Einheit 403 und
Entpackeinheit 405. In Antwort darauf, daß das Rücksetzen 411 deaktiviert wird,
werden die internen Speicher gelöscht,
und zwar einschließlich
der Kontextspeicher in der pem_code-Einheit 402.is outputted from the code stream. If the bit_generate unit 403 which has completed spaces becomes a bg_done_flush_signal 416 the packing unit 404 actively fed. In response to the bg_done_flush_signal 416 and the flush signal 413 The pack unit admits itself 404 itself. When the flushing is completed, the packing unit activates 404 the done_flush_signal 424 , Asynchronous initialization display (eg a signal or signals) for all memory elements (eg flip-flops) in the pem_code unit 402 , Packing unit 404 , bit_generate unit 403 and unpacking unit 405 , In response to that resetting 411 is disabled, the internal memories are cleared, including the context memories in the pem_code unit 402 ,
Die
Ausgaben des FSM-Kodierers lauten wie folgt.The
Issues of the FSM encoder are as follows.
data_out 229 data_out 229
Kodierte
Daten (Bitstrom) während
des Kodierens. Bei einer Ausführungsform
werden die Daten byteweise ausgegeben, obwohl andere Größen für die Datenausgabe
verwendet werden können.coded
Data (bitstream) during
of coding. In one embodiment
the data is output byte by byte, although other sizes are for data output
can be used.
data_out_ready 423 data_out_ready 423
Steueranzeige
(z.B. ein Signal bzw. Signale), um anzuzeigen, daß data_out 229 in
dem aktuellen Taktzyklus gültig
ist. "data_out_ready" steht für "Daten aus fertig".Control indicator (eg a signal or signals) to indicate that data_out 229 is valid in the current clock cycle. "data_out_ready" stands for "data done".
bit_out 224 BIT_Out 224
Dekodiertes
Bit. "bit_out" steht für "Bit aus".decoded
Bit. "bit_out" stands for "bit off".
reset_done 421 reset_done 421
Steueranzeige
(z.B. ein Signal bzw. Signale), um anzuzeigen, daß ein Rücksetzen
vollendet worden ist. Bei einer Ausführungsform zeigt reset_done 421 an, daß alle internen
Speicher infolge einer Entaktivierung von Reset bzw. Rücksetzen
gelöscht
worden sind.Control indicator (eg, a signal) to indicate that a reset has been completed. In one embodiment, reset_done shows 421 indicates that all internal memories have been cleared due to deactivation of Reset.
done_flush 424 done_flush 424
Steueranzeige
(z.B. ein Signal bzw. Signale), um anzuzeigen, daß ein Räumen vollendet
worden ist, nachdem das Flush-Signal 413 aktiviert worden
ist.Control display (eg, a signal) to indicate that a flush has been completed after the flush signal 413 has been activated.
Die
pem_expand-Einheit 401 erzeugt ein pclass 219 in
Antwort auf den pstate 234, der von dem pem_code-Einheit 402 in
Antwort auf den Kontext 211 (dem sie entspricht) ausgegeben
wird. Die pem_expand-Einheit 401 erzeugt ebenso eine Anzeige
des nächsten
PSTATE, falls ein MPS erzeugt wird, der als mps_pstate 216 bezeichnet
wird, und eine Anzeige des nächsten
PSTATE, falls ein MPS erzeugt wird, wie durch lps_pstate 217 angezeigt
wird (wenn das MPS nicht umzuschalten ist). Sowohl mps_pstate 216 als
auch lps_pstate 217 stellen PSTATEs dar, die verwendet
werden, wenn eine PSTATE-Aktualisierung
erforderlich ist. Die pem_expand-Einheit 401 erzeugt ebenso
eine Umschaltanzeige 218, um anzuzeigen, daß das MPS
(von 0 auf 1 oder von 1 auf 0) umgeschaltet werden sollte.The pem_expand unit 401 creates a pclass 219 in response to the pstate 234 that from the pem_code unit 402 in response to the context 211 (which corresponds to it) is issued. The pem_expand unit 401 also generates an indication of the next PSTATE if an MPS is generated, called mps_pstate 216 and an indication of the next PSTATE if an MPS is generated, as by lps_pstate 217 is displayed (if the MPS is not switched). Both mps_pstate 216 as well as lps_pstate 217 represent PSTATEs that are used when a PSTATE update is required. The pem_expand unit 401 also generates a toggle indication 218 to indicate that the MPS should be toggled (from 0 to 1 or from 1 to 0).
Die
pem_expand-Einheit 401 zeigt ebenso an, ob eine Aktualisierung
des PSTATE notwendig ist, wobei eine Aktualisierungsanzeige 412 verwendet
wird. Bei einer Ausführungsform
wird, falls die Aktualisierungsanzeige (z.B. ein Signal bzw. Signale) 412 aktualisiert
wird, der PSTATE aktualisiert, und zwar ungeachtet des MPS-Wertes.
Auf der anderen Seite tritt, falls eine Aktualisierungsanzeige 412 nicht
aktiviert wird (das heißt nicht
wahr ist), eine Aktualisierung nur auf, falls ein Kodewort abgegeben
oder verwendet wird, falls die Größe des Kodewortes größer als
0 ist oder falls die Größe der Ausgabe
kleiner als 0 ist. Die Größe der Ausgabe
wird durch die Größe des ausgegebenen
Kodeworts angezeigt, das wiederum durch die Größe der Anzeige 418 von
der Biterzeugungslogik 403 angezeigt wird.The pem_expand unit 401 Also indicates whether updating the PSTATE is necessary, with an update display 412 is used. In one embodiment, if the update indicator (eg, a signal or signals) 412 is updated, the PSTATE updated, regardless of the MPS value. On the other hand, if an update message occurs 412 is not activated (that is, not true), updating only if a codeword is issued or used if the size of the codeword is greater than 0, or if the size of the output is less than zero. The size of the output is indicated by the size of the output code word, which in turn depends on the size of the display 418 from the biter generation logic 403 is shown.
In
Antwort auf die pclass 219 führt die bit_generate-Einheit 403 eine
Biterzeugung durch und zeigt an, ob das zu kodierende bit_in 222 dasselbe
ist wie das MPS (z.B. MPS 520). Dieser Vergleich tritt
in der pem_code-Einheit 402 auf, die detaillierter in 5 beschrieben
ist (z.B. Vergleicher 512). Falls dem so ist, wird die
Wahrscheinlich-Anzeige 223 aktiviert. In diesem Fall zeigt
die Wahrscheinlich-Anzeige 223 an, daß ein Kodieren wahrscheinlich
ist und sie wird in die pem_code-Einheit 402 eingegeben.
In Antwort auf die Wahrscheinlich-Anzeige 223 setzt die
pem_code-Einheit 402 bit_out 224 auf das MPS,
falls die Wahrscheinlich-Anzeige 223 wahr ist, ansonsten
auf ihr Komplement, und zwar in dem Fall, wo die Wahrscheinlich-Anzeige 223 nicht
wahr ist.In response to the pclass 219 leads the bit_generate unit 403 a bit generation and indicates whether the bit_in to be coded 222 the same as the MPS (eg MPS 520 ). This comparison occurs in the pem_code unit 402 on, the more detailed in 5 is described (eg comparator 512 ). If so, the probable indicator becomes 223 activated. In this case, the probable indicator shows 223 an encoding is likely and it will be in the pem_code unit 402 entered. In response to the probable message 223 sets the pem_code unit 402 BIT_Out 224 on the MPS, in case the probability display 223 true, otherwise on its complement, in the case where the probability indicator 223 is not true.
Basierend
auf den Eingabesignalen erzeugt die pem_code-Einheit 402 den
nächsten
pstate, pstate 234, und gibt ein dekodiertes Bit als bit_out 224 aus,
wenn dekodiert wird. Während
des Dekodierens wird jedoch bit_out 224 ignoriert und die
encode_likely-Anzeige
("Kodier-Wahrscheinlich-Anzeige") 422 wird
aktiviert und durch die bit_generate-Einheit 403 empfangen.
Während
des Dekodierens wird die Kodieranzeige 415 nicht aktiviert
und die Entpackeinheit 405 entpackt die Datenbytes in Kodewörter variabler
Länge,
die als Kodestrom 419 zu der bit_generate-Einheit 403 ausgegeben
werden. Die Entpackeinheit 405 gibt ebenso ein data_in_next-Signal 420 aus,
das anzeigt, daß der
aktuelle Eingang von data_in 221 verbraucht worden ist, und
das nächste
Datenbit anfordert.Based on the input signals, the pem_code unit generates 402 the next pstate, pstate 234 , and returns a decoded bit as bit_out 224 off when decoding. During decoding, however, bit_out becomes 224 ignored and the encode_likely ad ("Coding Probable Display") 422 is activated and by the bit_generate unit 403 receive. During decoding, the coding display becomes 415 not activated and the unpacking unit 405 unpacks the data bytes into variable length codewords, which are code stream 419 to the bit_generate unit 403 be issued. The unpacking unit 405 also gives a data_in_next signal 420 indicating that the current input of data_in 221 has been consumed and is requesting the next data bit.
In
Antwort auf den Kodestrom 419 und die pclass 219 erzeugt
die bit_generate-Einheit 403 ein Kodewort 417 und eine
Größenanzeige 418.
In Antwort auf die Kodewörter 417 und
die Größenanzeige 418 kombiniert
die Packeinheit 404 die Kodewörter variabler Länge in Bytes.In response to the code stream 419 and the pclass 219 bit_generate unit 403 generates a codeword 417 and a size indicator 418 , In response to the code words 417 and the size indicator 418 combines the packing unit 404 the variable length codewords in bytes.
Bei
einer Ausführungsform
kann ein bit_out_Signal 424 verwendet werden, um das Kontextmodell
zu aktualisieren, um das Kodieren und das Dekodieren gleich zu machen.
Die Packeinheit 404 wird nicht verwendet, wenn dekodiert
wird.In one embodiment, a bit_out_signal 424 can be used to update the context model to make coding and decoding equal. The packing unit 404 is not used when decoding.
Jede
dieser Einheiten wird detaillierter im folgenden beschrieben.each
these units will be described in more detail below.
Eine
beispielhafte Verilog-HDL-Beschreibung der 4 lautet
wie folgt. Dabei steht hier und im folgenden "clock" für "Takt"; "reset" für "Rücksetzen"; "bit_in" für "Bit ein"; "context" für "Kontext"; "data_in" für "Daten ein"; "encode" für "kodieren"; "enable" für "freigeben"; "flush" für "räumen"; "reset_done" für "Rücksetzen durchgeführt"; "bit_out" für "Bit aus"; "data_out" für "Daten aus"; "data_out_ready" für "Daten aus fertig"; "data_in next" für "Daten ein nächstes"; "done_flush" für "fertig räumen"; "codeword" für "Kodewort"; "codestream" für "Kodestrom"; "size" für "Größe"; "encode_likely" für "kodieren wahrscheinlich"; "likely" für "wahrscheinlich"; "switch" für "umschalten"; "update" für "aktualisieren"; "in" jeweils für "ein" und "out" jeweils für "aus". Die englischen
Begriffe wurden bei der folgenden Hardware-Beschreibungssprache
im Einklang mit der in der Fachwelt üblichen Verwendung von englischen
Begriffen bei einer Beschreibungssprache beibehalten.
// Copyright
bzw. Urheberrecht 1997 RICOH
// FSM-Entropiekodierer (mit Wahrscheinlichkeitsschätzung und
Kontextspeicher) An exemplary Verilog HDL description of 4 as follows. Here and in the following "clock" stands for "clock";"reset" for "reset";"bit_in" for "bit on";"context" for "context";"data_in" for "data in";"encode" for "encode";"enable" for "enable";"flush" for "clearing";"reset_done" for "reset performed";"bit_out" for "bit off";"data_out" for "data out";"data_out_ready" for "data done";"data_innext" for "data next";"done_flush" for "finish cleaning";"codeword" for "codeword";"codestream" for "code stream";"size" for "size";"encode_likely" for "likely to encode";"likely" for "likely";"switch" for "toggle";"update" for "update";"in" for "on" and "out" for "off" respectively. The English terms have been retained in the following hardware description language in accordance with the usual use of English terms in a description language in the art.
// Copyright or Copyright 1997 RICOH
// FSM entropy coder (with probability estimation and context memory)
Mehrfach-Kontext-WahrscheinlichkeitsschätzungMultiple Context probability estimate
Ein
Blockdiagramm einer Ausführungsform
einer pem_code-Einheit 402, die den Kontextspeicher enthält und eine
Mehrfach-Kontext-Wahrscheinlichkeitsschätzung durchführt, ist
in 5 gezeigt.A block diagram of one embodiment of a pem_code unit 402 that contains the context memory and performs a multi-context probability estimation is in 5 shown.
Nimmt
man Bezug auf 5, so ist die Speicher-Freigabelogik 502 angeschlossen,
um eine Aktualisierungsanzeige 412, eine Größenanzeige 418 und
eine Freigabeanzeige 414 zu empfangen. In Antwort auf diese
Eingaben erzeugt die Speicherfreigabelogik 502 eine Ausgabe,
die mit einem Eingang eines OR- bzw. ODER-Gatters 505 verbunden
ist. Die Rücksetzanzeige 411 ist
mit den Eingängen
des Rücksetzzählers 503 und
der Rücksetzendurchgeführt-Logik
("reset_done"-Logik) 504.
Die Ausgabe des Rücksetzzählers 503 ist ebenso
mit einem anderen Eingang der Rücksetz-durchgeführt-Logik 504 sowie
mit einem Eingang des MUX 507 verbunden. Der Ausgang der
Rücksetz-durchgeführt-Logik 504 ist
ein Auswahlsignal, das mit den MUXs 507 bis 509 verbunden
ist und mit einem negierenden Eingang der ODER-Gatter-Logik 505 verbunden
ist. Der Ausgang der Rücksetz-durchgeführt-Logik 504 wird
ebenso als Rücksetz-durchgeführt-Anzeige 521 ausgegeben.
Der Ausgang des ODER-Gatters 505 ist mit dem Schreiben-Freigabe-Eingang des Kontextspeichers 501 verbunden.If you take reference 5 so is the memory release logic 502 connected to an update screen 412 , a size indicator 418 and a release indicator 414 to recieve. In response to these inputs, the memory enable logic generates 502 an output connected to an input of an OR or OR gate 505 connected is. The reset indicator 411 is with the inputs of the reset counter 503 and the reset-done logic ("reset_done" logic) 504 , The output of the reset counter 503 is also with another input to the reset-performed logic 504 as well as with an input of the MUX 507 connected. The output of the reset performed logic 504 is a selection signal that comes with the MUXs 507 to 509 is connected and with a negating input of the OR gate logic 505 connected is. The output of the reset performed logic 504 is also performed as a reset-done display 521 output. The output of the OR gate 505 is with the write-enable input of the context memory 501 connected.
Die
MUXs 507-509 sind zwei Eingangsmultiplexer. Der
andere Eingang des MUX 507 ist mit dem Kontext 211 verbunden.
Der MUX 508 ist angeschlossen, um einen anfänglichen
pstate und den Ausgang des MUX 506 zu empfangen. Bei einer
Ausführungsform
beträgt
der anfänglich
pstate 262. Andere anfängliche
Pstates können
verwendet werden. Eine Auswahl der anfänglichen pstates ermöglicht eine
schnellere Adaption bzw. Anpassung. Zur weiteren Information über eine
schnellere Anpassung wird auf die US-Patentanmeldung Nr. 08/768,237 verwiesen,
die den Titel trägt "Method and Apparatus
for Encoding and Decoding Data" und
am 17. Dezember 1996 eingereicht wurde und dem Anmelder der vorliegenden
Erfindung übertragen
wurde und hiermit durch Bezugnahme mit aufgenommen wird.The muxs 507 - 509 are two input multiplexers. The other entrance of the MUX 507 is with the context 211 connected. The MUX 508 is connected to an initial pstate and the output of the mux 506 to recieve. In one embodiment, the initial is pstate 262 , Other initial pstates can be used. A selection of the initial pstates allows for faster adaptation. For further information on a more rapid adaptation, reference is made to U.S. Patent Application Serial No. 08 / 768,237, entitled "Method and Apparatus for Encoding and Decoding Data" filed December 17, 1996 and assigned to the assignee of the present invention and incorporated herein by reference.
Die
Eingänge
des MUX 506 sind angeschlossen, um mps_pstate 216 und
lps_pstate 217 zu empfangen, von denen einer in Antwort
auf eine Wahrscheinlich-Anzeige 223 ausgewählt wird,
die an den Auswahleingang MUX 506 angeschlossen ist. Die
Eingänge
von MUX 509 sind an den Initialisierungswert (z.B. 0 bei einer
Ausführungsform)
und den Ausgang der MPS-Aktualisierungslogik 510 angeschlossen.
Die Eingänge der
MPS-Aktualisierungslogik 510 sind
angeschlossen, um eine Wahrscheinlich-Anzeige 223, eine
Umschaltanzeige 218 und ein MPS 520 zu empfangen,
das von dem Kontextspeicher 501 ausgegeben wird. Die Ausgänge eines
jeden MUX 507 bis 509 sind an die Eingänge eines
Kontextspeichers 501 angeschlossen.The inputs of the MUX 506 are connected to mps_pstate 216 and lps_pstate 217 to receive, one of which in response to a probable indication 223 is selected, which is to the selection input MUX 506 connected. The inputs of MUX 509 are at the initialization value (eg 0 in one embodiment) and the output of the MPS update logic 510 connected. The inputs to the MPS update logic 510 are connected to a probable ad 223 , a switchover indicator 218 and an MPS 520 to receive that from the context store 501 is issued. The outputs of each mux 507 to 509 are to the inputs of a context memory 501 connected.
MPS 520,
das von dem Kontextspeicher 501 ausgegeben wird, ist an
einen Eingang des Vergleichers 511 und einen Eingang des
Vergleichers 512 angeschlossen. Der andere Eingang des
Vergleichers 511 umfaßt
eine Wahrscheinlich-Anzeige 223, während der andere Eingang zu
dem Vergleicher 512 ein bit_in 222 umfaßt. Obwohl
es nicht gezeigt ist, um eine Verschleierung der Erfindung zu vermeiden,
ist das Taktsignal 510 an alle Register und Zähler angeschlossen.MPS 520 that from the context store 501 is output to an input of the comparator 511 and an input of the comparator 512 connected. The other input of the comparator 511 includes a probable message 223 while the other input to the comparator 512 a bit_in 222 includes. Although not shown to avoid obscuring the invention, the clock signal 510 is connected to all registers and counters.
Die
Rücksetzanzeige 411 löscht den
reset_counter bzw. Rücksetzzähler 503 auf
0. Nachdem das Rücksetzen
bzw. "reset" deaktiviert ist,
erzeugt der reset_counter bzw. Rücksetzzähler 503 Adressen
für jede Kontextspeicherstelle
in dem Kontextspeicher 501 und ein anfänglicher PSTATE und ein anfängliches
MPS werden zu jeder Kontextspeicherstelle geschrieben. Die Anfangswerte
werden geschrieben, indem MUXs 507 bis 509 in
Verbindung mit dem reset_done_Signal bzw. Rücksetzen-durchgeführt-Signal 421,
das von der Rücksetzen-durchgeführt-Logik 504 ausgegeben
wird, verwendet werden. Das reset_done_Signal 421 wirkt als
ein Auswählsignal
für die
MUXs 507 bis 509, wobei Kontextspeicheradressen
von dem Rücksetzzähler 503 mit
dem MUX 507, ein anfänglicher
pstate mit MUX 508 und ein anfänglicher MPS mit MUX 509 ausgewählt werden.
Bei einer Ausführungsform
werden der anfänglich
PSTATE-Wert 262 und der anfängliche MPS-Wert von 0 in Speicherstellen
im Kontextspeicher 501 geschrieben. Nachdem alle Speicherstellen
initialisiert worden sind, aktiviert die Rücksetzen-durchgeführt-Logik 504 die
reset_done_Anzeige 421.The reset indicator 411 clears the reset_counter or reset counter 503 to 0. After the reset is deactivated, the reset_counter or reset counter is generated 503 Addresses for each context location in the context memory 501 and an initial PSTATE and an initial MPS are written to each context location. The initial values are written by MUXs 507 to 509 in conjunction with the reset_done_signal or reset-performed signal 421 that by the reset-performed logic 504 is spent. The reset_done_signal 421 acts as a selection signal for the MUXs 507 to 509 where context memory addresses from the reset counter 503 with the mux 507 , an initial pstate with mux 508 and an initial MPS with MUX 509 to be selected. In one embodiment, the initially PSTATE value 262 and the initial MPS value of 0 in memory locations in the context memory 501 written. After all memory locations have been initialized, the reset performed logic activates 504 the reset_done_display 421 ,
Während des
Kodierens wird in einen Kontextspeicher 501 geschrieben,
wenn sein Schreib-Freigabe-(WE)-Eingang aktiviert ist. Der WE-Eingang
des Kontextspeichers 501 wird aktiviert, wenn der Ausgang
der ODER-Gatelogik 509 auf hoch ist. Der Ausgang der ODER-Gatelogik 509 ist
auf hoch, wenn der Ausgang der Rücksetzen-durchgeführt-Logik 504 auf
niedrig ist, was anzeigt, daß das
Rücksetzen
nicht vollendet worden ist, oder wenn der Ausgang der Speicherfreigabelogik 502 auf
hoch ist.While coding is in a context memory 501 if its write enable (WE) input is activated. The WE input of the context memory 501 is activated when the output of the OR gate logic 509 is on high. The output of the OR gate logic 509 is high when the output of the reset-performed logic 504 is low, indicating that the reset has not been completed, or if the output of the memory enable logic 502 is on high.
Wenn
in den Kontextspeicher 501 geschrieben wird und nicht in
Rücksetzen
bzw. "reset", wird eine Kontextmodelladresse
vom Kontext 211 über
MUX 507, der nächste
Wahrscheinlichkeitsschätzzustand über MUX 508 und
das MPS über
MUX 509 bereitgestellt. Der Eingang des MUX 508 ist
der Ausgang des MUX 506, bei dem es sich entweder um einen
mps_pstate 216 oder einen lps_pstate 217 handelt,
wobei einer davon basierend auf einer Wahrscheinlich-Anzeige 223 ausgewählt wird.
Der MPS-Wert von der MPS-Aktualisierlogik 510 ist das Komplement
des MPS-Wertes, falls die Umschaltanzeige 218 aktiviert
wird und falls ein LPS auftritt.If in the context memory 501 is written and not in reset, becomes a context model address of the context 211 via MUX 507 , the next probability estimation state via MUX 508 and the MPS via MUX 509 provided. The entrance of the MUX 508 is the output of the MUX 506 which is either a mps_pstate 216 or a lps_pstate 217 one of which is based on a probable indication 223 is selected. The MPS value from the MPS update logic 510 is the complement of the MPS value if the toggle indication 218 is activated and if an LPS occurs.
Bei
den Daten, die in den Kontextspeicher 501 geschrieben werden,
handelt es sich um den PSTATE, der durch die Wahrscheinlich-Anzeige 223 ausgewählt wird,
und um das MPS, das geändert
wird, wenn die Wahrscheinlich-Anzeige 223 0 ist und die
Umschaltanzeige 218 1 ist. Bei einer Ausführungsform
gibt, falls die Wahrscheinlich-Anzeige 223 wahr ist, MUX 506 mps_pstate 216 aus;
ansonsten gibt er lps_pstate 217 aus. Der Ausgang der MPS-Aktualisierlogik 510 umfaßt MPS 520,
das gemäß der XOR-bzw.
gemäß der XODER-Funktion
mit dem Ergebnis eines UNDierens der Umschaltanzeige 218 mit
der Negation der Wahrscheinlich-Anzeige 223 verknüpft wird.For the data stored in the context store 501 written, it is the PSTATE, by the probability display 223 and the MPS that is changed when the Likelihood indicator is selected 223 0 is and the shift indicator 218 1 is. In one embodiment, if the probability indication 223 true is, mux 506 mps_pstate 216 out; otherwise he gives lps_pstate 217 out. The output of the MPS update logic 510 includes MPS 520 , which according to the XOR or. according to the XOR function with the result of ANDing the shift indication 218 with the negation of the probability indicator 223 is linked.
Die
Ausgänge
des Kontextspeichers 501 sind pstate 234 und MPS 520.
Zum Kodieren wird das zu kodierende Bit (bit_in 222) unter
Verwendung des Vergleichers 512 mit MPS 520 verglichen,
um die encode_likely-Anzeige 422 zu erzeugen. Bei einer
Ausführungsform
wird die encode_likely-Anzeige 422 erzeugt, indem MPS 520 gemäß der XNOR-Funktion
mit dem bit_in 222 verknüpft wird, wobei MPS 520 durch ein
Bit des Eintrags im Kontextmodell 501 angezeigt wird. Gemerkenswert
ist, daß die
Logik (nicht gezeigt) zum Rückkoppeln
bzw. Zurückführen eines
encode_likely-Signals 422 zu der Wahrscheinlich-Anzeige 223 verwendet
wird. Dies wird im folgenden detaillierter beschrieben. Zum Dekodieren
wird die Wahrscheinlich-Anzeige 223 unter Verwendung des
Vergleichers 511 mit MPS 520 verglichen, um das
dekodierte Bit (bit_out 224 ) zu erzeugen. Bei einer Ausführungsform
wird bit_out 224 durch eine XNOR-Verknüpfung des MPS 520 mit
der Wahrscheinlich-Anzeige 223 erzeugt. Die XNOR-Funktion
ist einem Abgleichen des MPS 520 mit der Wahrscheinlich-Anzeige 223 äquivalent.The outputs of the context memory 501 are pstate 234 and MPS 520 , For encoding, the bit to be coded (bit_in 222 ) using the comparator 512 with MPS 520 compared to the encode_likely ad 422 to create. In one embodiment, the encode_likely ad becomes 422 generated by MPS 520 according to the XNOR function with the bit_in 222 is linked, where MPS 520 by a bit of the entry in the context model 501 is shown. It is noteworthy that the logic (not shown) for feeding back an encode_likely signal 422 to the probable message 223 is used. This will be described in more detail below. For decoding the probable display 223 using the comparator 511 with MPS 520 compared to the decoded bit (bit_out 224 ) to create. In one embodiment, bit_out becomes 224 through an XNOR link of the MPS 520 with the probability indicator 223 generated. The XNOR function is a synchronization of the MPS 520 with the probability indicator 223 equivalent to.
In 5 wird
ein einzelner Speicher verwendet und der Speicher gibt die Information
für einen
einzelnen Kontext aus. Parallele Speicher können verwendet werden, um die
Geschwindigkeit zu erhöhen.
Häufig beeinflußt das zuvor
dekodierte Bit den Kontext für das
nächste
Bit. Diese Rückkopplung
zu dem Kontextmodell, das hierin als die Bit-zu-Kontext-Verzögerung bezeichnet wird, kann
die Geschwindigkeit beschränken. Eine
Art und Weise, um die Geschwindigkeit zu erhöhen, ist es, mehrere Speicherausgänge zu haben,
die den Kontextbins entsprechen, die für beide Werte des vorhergehenden
Bits verwendet werden. Der Speicherzugriff kann parallel (auf Pipeline-Art
und -Weise) unter Erzeugung des vorhergehenden Bits durchgeführt werden. Das
korrekte Kontextbin der beiden kann gemultiplext werden, wenn das
vorhergehende Bit bekannt ist. Das Multiplexen ist typischerweise
viel schneller als der Speicherzugriff. Es kann entweder ein einzelner
Speicher mit mehreren Ausgängen
oder es können
mehrere Speicher verwendet werden.In 5 a single memory is used and the memory outputs the information for a single context. Parallel memories can be used to increase the speed. Often, the previously decoded bit affects the context for the next bit. This feedback to the context model, referred to herein as the bit-to-context delay, may limit the speed. One way to increase the speed is to have multiple memory outputs that correspond to the context bins used for both values of the previous bit. Memory access can be done in parallel (in a pipelined manner) to generate the previous bit. The correct context bin of the two can be multiplexed if the previous bit is known. Multiplexing is typically much faster than memory access. It can either be a single memory with multiple outputs or multiple memories can be used.
Speicherzugriffe
nach der Art und Weise einer Pipeline machen erforderlich, daß eine verbrauchte
Information nicht verwendet wird, wenn dieselbe Speicherstelle zweimal
in Abfolge verwendet wird (oder innerhalb einer gewissen minimalen
Anzahl aufeinanderfolgender Taktzyklen verwendet wird). Wenn einmal
eine Speicherstelle zum erstenmal gelesen ist, sollte sie nicht
nochmals gelesen werden, bis der aktualisierte Wert zurück in den
Speicher geschrieben ist. Anstatt, daß der Speicher für folgende
Lesevorgänge
gelesen wird, sollte der Wert, der sich bereits außerhalb
des Speichers befindet und eine Verarbeitung durchläuft, verwendet werden.Pipelining memory accesses require that used information not be used when the same memory location is used twice in sequence (or used within a certain minimum number of consecutive clock cycles). If ever a Memory location is read for the first time, it should not be read again until the updated value is written back to memory. Instead of reading the memory for subsequent reads, the value that is already out of memory and undergoing processing should be used.
Eine
beispielhafte Verilog-HDL-Beschreibung, die der 5 entspricht,
lautet wie folgt, dabei gelten die bereits oben gegebenen Erklärungen zu
der Verilog-Beschreibung.
// Copyright bzw. Urheberrecht 1997
RICOH
// Dies ist der Multikontextteil des Entropiekodierers.
//
Er enthält
den Kontextspeicher, der Pstates speichert,
// und unter Verwendung
dieses Speichers handhabt.An exemplary Verilog HDL description that the 5 is as follows, the explanations given above on the Verilog description apply.
// Copyright or Copyright 1997 RICOH
// This is the multicontext part of the entropy coder.
// it contains the context store that stores pstates
// and manages using this store.
Wahrscheinlichkeitszustands-AusdehnungProbability state expansion
6 ist
ein Blockdiagramm einer Ausführungsform
der pem_expand-Einheit 401, die den pstate 234 in
die Information konvertiert, die das PSTATE beschreibt, das durch
seinen Ausgang dargestellt wird. 6 Figure 4 is a block diagram of one embodiment of the pem_expand unit 401 that the pstate 234 converted into the information that describes the PSTATE represented by its output.
Nimmt
man Bezug auf 6, so umfaßt die Wahrscheinlichkeitszustands-Expansionseinheit 401 eine pclass-Einheit 601,
eine mps_pstate 602, eine lps_pstate 603, eine
Umschalteinheit 604 und eine Aktualisierungseinheit 605,
von denen jede angeschlossen ist, um einen pstate 234 zu
empfangen und seinen entsprechenden Ausgang zu erzeugen.If you take reference 6 so includes the probability state expansion unit 401 a pclass unit 601 , a mps_pstate 602 , a lps_pstate 603 , a switching unit 604 and an updating unit 605 , each of which is connected to a pstate 234 to receive and generate its corresponding output.
Die
pclass-Einheit 601 erzeugt pclass 219 in Antwort
auf pstate 234. Bei einer Ausführungsform ist die Wahrscheinlichkeitsschätzung ein
4-Bit-Wert. Bei einer Ausführungsform
reicht pstate 234 von 0 bis 268 und wird in einen pclass
konvertiert, der von O bis 15 reicht. Ein Beispiel eines Kodes,
der für
die Durchführung dieser
Funktion gedacht ist, wird unten gegeben.The pclass unit 601 generates pclass 219 in response to pstate 234 , In one embodiment, the probability estimate is a 4-bit value. In one embodiment, pstate suffices 234 from 0 to 268 and converts to a pclass that ranges from 0 to 15. An example of a code intended to perform this function is given below.
Die
MPS_pstate-Einheit 602 erzeugt einen mps_pstate 216 (in
Antwort auf pstate 234), der der nächste PSTATE ist, falls ein
MPS auftritt und der PSTATE aktualisiert wird. Bei einer Ausführungsform
umfaßt mps_pstate 216 9
Bits. Bei einer Ausführungsform
ist der mps_state 216, der pstate 234 erhöht um eine
ganze Zahl von 0 bis 5 oder erniedrigt um 11 basierend auf dem Wert
des pstate 234.The MPS_pstate unit 602 generates a mps_pstate 216 (in response to pstate 234 ), which is the next PSTATE if an MPS occurs and the PSTATE is updated. In one embodiment, mps_pstate 216 9 bits. In one embodiment, the mps_state 216 who pstate 234 increased by an integer from 0 to 5 or decreased by 11 based on the value of the pstate 234 ,
Die
LPS_pstate-Einheit 603 erzeugt einen lps_pstate 217 (in
Antwort auf den pstate 234), der der nächste PSTATE ist, falls ein
LPS auftritt und der PSTATE aktualisiert wird. Bei einer Ausführungsform
umfaßt lps_pstate 217 9
Bits. Bei einer Ausführungsform
ist lps_state 216 der pstate 234 erhöht um eine
ganze Zahl 1, 3 oder 5 oder erniedrigt um eine ganze Zahl, die von –1 bis –246 reicht,
und zwar basierend auf dem Wert des pstate 234.The LPS_pstate unit 603 generates an lps_pstate 217 (in response to the pstate 234 ), which is the next PSTATE if an LPS occurs and the PSTATE is updated. In one embodiment, lps_pstate 217 9 bits. In one embodiment, lps_state 216 the pstate 234 increased by an integer 1, 3, or 5, or decreased by an integer ranging from -1 to -246, based on the value of the pstate 234 ,
Die
Schalteinheit 604 aktiviert die Umschaltanzeige 218,
falls das MPS umzuschalten ist. Bei einer Ausführungsform wird die Umschaltanzeige 218 aktiviert,
falls pstate 234 weniger oder gleich 4 oder gleich 262 ist;
ansonsten wird die Umschaltanzeige 218 deaktiviert. Die
Umschaltanzeige 218 zeigt an, daß das MPS, das in einem Kontextspeicher
gespeichert ist, wie z.B. dem Kontextspeicher 501, geändert werden
sollte, falls ein Bit auftritt, das nicht wahrscheinlich ist. Bei
einer Ausführungsform
umfaßt
die Anzeige 218 ein Signal.The switching unit 604 activates the switching display 218 if the MPS is to be switched. In one embodiment, the toggle indication becomes 218 activated, if pstate 234 less than or equal to 4 or equal 262 is; otherwise the switchover indicator will be displayed 218 disabled. The switching indicator 218 indicates that the MPS stored in a context memory, such as the context memory 501 , should be changed if a bit occurs that is not likely. In one embodiment, the display includes 218 a signal.
Bei
einer Ausführungsform
aktiviert die Aktualisierungseinheit 605 die Aktualisierungsanzeige 412, falls
der pstate weniger oder gleich 214 ist. Bemerkenswert ist,
daß die
Zustände,
die kleiner als oder gleich 214 sind, für Zustände mit geringem Versatz (nahe
bei 50%) verwendet werden, wo eine gute Wahrscheinlichkeitsschätzung eine
Aktualisierung für
jedes Bit erforderlich macht. Zustände größer als 214 werden
für Zustände mit
einem hohen Versatz verwendet, wo eine gute Wahrscheinlichkeitsschätzung unter Verwendung
einer geringen Anzahl von Zuständen
es nicht erforderlich macht, für
jedes MPS zu aktualisieren. Bei anderen Ausführungsformen kann ein Zustand
anders als 214 verwendet werden, wobei seine Auswahl auf
dem Versatz basiert und darauf, ob die Wahrscheinlichkeitsschätzung derartig
ist, daß sie
eine Aktualisierung für
jedes Bit benötigt.
Dies kann eine datenspezifische Auswahl sein. Die Aktualisierungsanzeige 412 zeigt
an, daß eine Aktualisierung
des Kontextspeichgrs selbst dann durchgeführt werden sollte, falls keine
kodierten Daten erzeugtlverbraucht wurden. Bei einer Ausführungsform
umfaßt
die Aktualisierungsanzeige 412 ein Signal. Die Wahrscheinlichkeitsschätzung kann
bei jedem Bit aktualisiert werden. Bei einer alternativen Ausführungsform wird
die Wahrscheinlichkeitsschätzung
jedesmal aktualisiert, wenn Bits ausgegeben (oder verbraucht) werden.In one embodiment, the update unit activates 605 the update display 412 . if the pstate is less than or equal to 214 is. It is noteworthy that the states are less than or equal to each other 214 are used for low offset (near 50%) states where a good probability estimate requires updating for each bit. States greater than 214 are used for high offset states where a good probability estimation using a small number of states does not require updating for each MPS. In other embodiments, a condition other than 214 its choice is based on the offset and whether the probability estimate is such that it requires an update for each bit. This can be a data-specific selection. The update display 412 indicates that an update of the context memory should be performed even if no coded data has been generated. In one embodiment, the update indicator includes 412 a signal. The probability estimate can be updated every bit. In an alternative embodiment, the probability estimate is updated each time bits are output (or consumed).
Eine
beispielhafte Verilog-HDL, die der 6 entspricht,
wird im folgenden gegeben. Eine Ausführungsform der Wahrscheinlichkeitsschätzregeln
der vorliegenden Erfindung werden durch dieses Verilog beschrieben.
//
Urheberrecht bzw. Copyright 1997 RICOH
// PEM – Wahrscheinlichkeitsschätzung
//
gegebener Pstate, bestimmte Pclass und mögliche nächste pstates An exemplary Verilog HDL, the 6 corresponds, is given below. One embodiment of the probability estimation rules of the present invention will be described by this Verilog.
// Copyright or Copyright 1997 RICOH
// PEM - Probability Estimate
// given pstate, certain pclass and possible next pstates
Biterzeugungbit generation
7 ist
ein Blockdiagramm einer Ausführungsform
der bit_generate-Einheit 403 und führt die Konversion zwischen
unkodierten Bits und kodierten Bits durch. Der Großteil der
Operation wird durch die Biterzeugungslogik 701 durchgeführt. 7 Figure 13 is a block diagram of one embodiment of the bit_generate unit 403, and performs the conversion between uncoded bits and coded bits. The bulk of the operation is through the biter generation logic 701 carried out.
Nimmt
man Bezug auf 7, so ist die Biterzeugungslogik 701 angeschlossen,
um eine likely_in_Anzeige 709, pclass 219, eine
Kodieranzeige (z.B. ein Signal bzw. Signale) 415 und einen
Kodestrom 419 zusammen mit Ausgaben von den Registern 702 bis 704 zu
empfangen, die den fsm_state, einen Startwert und einen Stoppwert
jeweilig enthalten. Jedes Register 702 bis 704 ist
mit dem Takt 410 verbunden.If you take reference 7 that is the logic of generation 701 connected to a likely_in_display 709 , pclass 219 , a coding display (eg a signal or signals) 415 and a code stream 419 along with issues from the registers 702 to 704 Receive the fsm_state, a start value and a stop value, respectively. Each register 702 to 704 is with the clock 410 connected.
Das
fsm_state-Register 702 ist der interne Zustand der FSM-Zustandsmaschine.
Bei einer Ausführungsform
umfaßt
das fsm_state-Register 702 ein 6-Bit-Register und wird
auf einen vorbestimmten Zustand festgelegt, wenn Rücksetzen
aktiviert wird. Bei einer Ausführungsform
ist der vorbestimmte Zustand 0. Der fsm_state-Eingang 702 wird
mit Taktzyklen aktualisiert, wenn Freigabe 415 aktiviert
wird.The fsm_state register 702 is the internal state of the FSM state machine. In one embodiment, the fsm_state register includes 702 a 6-bit register and is set to a predetermined state when reset is activated. In one embodiment, the predetermined state is 0. The fsm_state input 702 is updated with clock cycles when enable 415 is activated.
Das
Startregister 703 enthält
den kleinsten Gültigkeitswert,
der zu dem Kodestrom ausgegeben werden kann. Bei einer Ausführungsform
umfaßt
das Startregister 703 ein 8-Bit-Register. Das Startregister 703 wird
auf einen vorbestimmten Wert gesetzt, wenn Rücksetzen aktiviert wird, und
mit Taktzyklen aktualisiert, wenn die Freigabe-Anzeige 415 aktiviert
ist. Bei einer Ausführungsform
ist der vorbestimmte Wert 0.The start register 703 contains the smallest validity value that can be output to the code stream. In one embodiment, the start register includes 703 an 8-bit register. The start register 703 is set to a predetermined value when reset is activated and updated with clock cycles when the enable indication 415 is activated. In one embodiment, the predetermined value is 0.
Das
Stoppregister 704 enthält
den größten gültigen Wert,
der zu dem Kodestrom ausgegeben werden kann. Bei einer Ausführungsform
umfaßt
das Stoppregister 704 ein 8-Bit-Register. Das Stoppregister 704 wird auf
einen vorbestimmten Wert gesetzt, wenn Rücksetzen aktiviert wird und
mit Taktzyklen aktualisiert, wenn die Freigabe-Anzeige 415 aktiviert
wird. Bei einer Ausführungsform
wird das Stoppregister 704 auf 111111112 gesetzt,
wenn rückgesetzt
wird.The stop register 704 contains the largest valid value that can be output to the code stream. In one embodiment, the stop register comprises 704 an 8-bit register. The stop register 704 is set to a predetermined value when reset is activated and updated with clock cycles when the enable indication 415 is activated. In one embodiment, the stop register becomes 704 set to 11111111 2 when resetting.
In
Antwort auf diese Eingaben erzeugt die Biterzeugungslogik 701 eine
likely_out-Anzeige 223,
eine sz-Anzeige 710, eine cw-Anzeige 711, einen
next_stop-Wert 712, einen next_start-Wert 713 und
einen next_state 714.In response to these inputs, the biter generation logic generates 701 a likely_out ad 223 , a sz ad 710 , a cw ad 711 , a next_stop value 712 , a next_start value 713 and a next_state 714 ,
Die
sz-Anzeige 710 ist mit einem Eingang des MUX 705 verbunden.
Der andere Eingang zu MUX 705 ist mit der flush_sz-Anzeige
(z.B. ein Signal bzw. Signale) 715 verbunden. In ähnlicher
Weise empfängt
MUX 706 cw 711 auf einem Eingang und flush_cw 716 von
der Flush-Logik 707 auf dem anderen Eingang.The sz ad 710 is with an input of the mux 705 connected. The other entrance to MUX 705 is with the flush_sz indicator (eg a signal or signals) 715 connected. Similarly, MUX receives 706 cw 711 on an input and flush_cw 716 from the flush logic 707 on the other entrance.
Bei
einer Ausführungsform
erzeugt die bit_generate-Einheit 403 Kodewörter zum
Räumen
am Ende des Kodierens. Das Flush-Signal 413 ist angeschlossen,
um einen Eingang sowohl für
MUX 705 als auch 706 auszuwählen. Wenn der Bitgenerator
nicht geräumt
wird und somit das Flush-Signal 413 nicht aktiviert wird, geben
die MUXs 705 bis 706 eine sz-Anzeige 710 als
die Größenanzeige 418 und
cw 711 als das Kodewort 417 aus. Auf der anderen
Seite, wenn der Bitgenerator geräumt
wird und das Flush-Signal 413 aktiviert
wird, werden die vordefinierten Kodewörter, die durch flush_cw 716 dargestellt
werden, von MUX 706 als Kodewort 417 mit einer
Größenanzeige
ausgegeben, die durch die flush_sz-Anzeige 715 dargestellt
wird, die als Größe ("size") 418 ausgegeben
wird. Bemerkenswert ist, daß die
Biterzeugungslogik 701 und die Flush-Logik 707 detaillierter im
folgenden beschrieben werden.In one embodiment, the bit_generate unit generates 403 Code words to clear at the end of coding. The flush signal 413 is connected to an input for both MUX 705 as well as 706 select. If the bit generator is not cleared and thus the flush signal 413 does not activate, enter the MUXs 705 to 706 a sz ad 710 as the size indicator 418 and cw 711 as the codeword 417 out. On the other hand, when the bit generator is cleared and the flush signal 413 is activated, the predefined codewords generated by flush_cw 716 be presented by MUX 706 as a codeword 417 with a size indicator output by the flush_sz indicator 715 is displayed as the size ("size") 418 is issued. It is noteworthy that the biter generation logic 701 and the flush logic 707 will be described in more detail below.
8 ist
ein Blockdiagramm einer Ausführungsform
einer Biterzeugungslogik 701. Nimmt man Bezug auf 8,
so umfaßt
die Biterzeugungslogik 701 eine Zustandsausdehneinheit 801,
einen Vergleicher 802, eine Wahrscheinlich-Logik 803,
einen Multiplexer 804 und eine Kodewort-Erzeugungseinheit 805.
Die Zustands-Ausdehnlogik 801 ist angeschlossen, um den
fsm_state von dem Register 702 und pclass 219 zu
empfangen. In Antwort auf diese Eingänge erzeugt die Zustands-Ausdehneinheit 801 die
Anzeige für
das erste wahrscheinliche Symbol (fps bzw. "first probable symbol") 821, split8-Wert 822 bzw.
Aufteil-8-Wert 822 zusammen mit den nächsten Zuständen, für den Fall, wenn ein MPS oder
ein LPS auftritt, die jeweilig als next_state mps 810 und
next_state_lps 811 bezeichnet werden. Eine Ausführungsform
der Zustands-Ausdehnlogik 801 ist in detaillierter in Verbindung
mit 9 beschrieben. 8th Figure 10 is a block diagram of one embodiment of bit generation logic 701 , If you take reference 8th so includes the biter generation logic 701 a state expansion unit 801 , a comparator 802 , a probable logic 803 , a multiplexer 804 and a codeword generation unit 805 , The state expansion logic 801 is connected to the fsm_state from the register 702 and pclass 219 to recieve. In response to these inputs, the state expansion unit generates 801 the first probable icon (fps) 821, split8 value 822 or split-8 value 822 together with the next states, in the case when an MPS or an LPS occurs, respectively as next_state mps 810 and next_state_lps 811 be designated. An embodiment of the state expansion logic 801 is in more detail in conjunction with 9 described.
Der
Vergleicher 802 ist angeschlossen, um split8-Wert 822 und
den Kodestrom 419 zu empfangen, und erzeugt in Antwort
darauf ein top_split-Signal 823. Bei einer Ausführungsform
wird, falls der Kodestrom 419 größer als split8-Wert 822 ist,
das top_split-Signal 823 aktiviert (z.B. 1); auf der anderen
Seite wird, falls der Kodestrom 419 kleiner ist als split8-Wert 822,
das top_split-Signal 823 nicht aktiviert (z.B. 0).The comparator 802 is connected to split8 value 822 and the code stream 419 and, in response, generates a top_split signal 823 , In one embodiment, if the code stream 419 greater than split8 value 822 is the top_split signal 823 activated (eg 1); on the other hand, if the code stream 419 smaller than split8 value 822 , the top_split signal 823 not activated (eg 0).
Die
Wahrscheinlich-Logik 803 ist angeschlossen, um eine likely_in-Anzeige
(z.B. ein Signal bzw. Signale) 709 und eine Kodieranzeige 415,
ein top_split-Signal 223 und eine fps-Anzeige 821 zu
empfangen. In Antwort auf diese Eingangssignale arbeitet die Wahrscheinlich-Logik 803 in
einer Art und Weise, die der Bit-Logik in den 2 und 3 ähnlich ist
und erzeugt eine likely_out-Anzeige 720. Diese ist im wesentlichen äquiva lent
zu der Wahrscheinlich-Anzeige 223. Falls die Anzeige 415 1
beträgt,
ist die Ausgabe der likely_out-Anzeige 720 die likely_in-Anzeige 709;
falls die Kodieranzeige 415 0 ist, dann umfaßt die Ausgabe
der likely_out-Anzeige 720 das XOR des fps-Signals 821 und
des top_split-Signals 823. Die likely_out-Anzeige 720 ist
mit dem Auswahleingang des MUX 804 sowie mit dem Eingang
der Kodewort-Erzeugungseinheit 805 verbunden.The probability logic 803 is connected to a likely_in indicator (eg a signal or signals) 709 and a coding display 415 , a top_split signal 223 and an fps ad 821 to recieve. In response to these input signals, the probable logic operates 803 in a way that the bit logic in the 2 and 3 is similar and generates a likely_out indication 720 , This is essentially equivalent to the probability indicator 223 , If the ad 415 Is 1, the output is the likely_out indicator 720 the likely_in ad 709 ; if the coding display 415 0, then the output includes the likely_out indication 720 the XOR of the fps signal 821 and the top_split signal 823 , The likely_out ad 720 is with the selection input of the MUX 804 as well as with the input of the codeword generation unit 805 connected.
Die
MUX 804 ist angeschlossen, um next_state_mps 810 und
next_state_lps 811 zu empfangen. Bei einer Ausführungsform
umfaßt
next_state 714, next_state_mps 810, falls die
likely_out-Anzeige 720 aktiviert wird; ansonsten wird next_state_lps 811 als
next_state 714 ausgegeben.The mux 804 is connected to next_state_mps 810 and next_state_lps 811 to recieve. In one embodiment, next_state 714 , next_state_mps 810 if the likely_out ad 720 is activated; otherwise it will be next_state_lps 811 as next_state 714 output.
Die
Kodewort-Erzeugungseinheit 805 ist angeschlossen, um ein
fps-Signal 821, einen split8-Wert 822, den Startwert
vom Register 703 und den Stoppwert vom Register 704 zu
empfangen. In Antwort auf diese Eingaben erzeugt die Kodewort-Erzeugungseinheit 805 eine
sz-Anzeige 710, ein cw (Kodewort) 711, einen next_start-Wert 712 und
einen next_stop-Wert 713. Der Kodewort-Erzeugungsblock
wird detaillierter in Verbindung mit 13 beschrieben.The codeword generation unit 805 is connected to a fps signal 821 , a split8 value 822 , the starting value of the register 703 and the stop value from the register 704 to recieve. In response to these inputs, the codeword generation unit generates 805 a sz ad 710 , a cw (codeword) 711 , a next_start value 712 and a next_stop value 713 , The codeword generation block will be described in more detail in connection with 13 described.
Bemerkenswert
ist, daß die
Zustandsausdehneinheit 801 und die Kodewort-Erzeugung (cw_gen) 805 Ausgaben
erzeugt, die Entropiekodiertabelle in 2 ähneln, wobei
Logik verwendet wird, um die Hardwarekosten zu reduzieren.It is noteworthy that the state expansion unit 801 and codeword generation (cw_gen) 805 Outputs generated, the entropy coding table in 2 using logic to reduce hardware costs.
ZustandsausdehnologikZustandsausdehnologik
9 ist
ein Blockdiagramm einer Ausführungsform
einer Zustandsausdehnlogik bzw. Zustandsexpandierlogik 801.
Die Zustandsausdehnlogik 801 verwendet ein mehrstufiges
Nachschlagen bzw. mehrstufige Nachschlagtabellen, um die Hardwarekosten
zu reduzieren, indem redundante LUT-Einträge beseitigt werden. 9 FIG. 10 is a block diagram of one embodiment of a state expansion logic 801 , The state expansion logic 801 uses multi-level lookup tables to reduce hardware costs by eliminating redundant LUT entries.
Nimmt
man Bezug auf 9, so ist pclass 219 mit
dem Eingang der Maskenerzeugungseinheit 901 verbunden.
Der Ausgang der Maskenerzeugungseinheit 901 ist mit einem
Eingang eines UND-Gatters 903 verbunden. Das fsm_state
von dem Register 702 ist mit einem Eingang der Vorwärtseinheit 902 und
einem Eingang der next_state_mps-Einheit 905, next_state_lps-Einheit 906,
fps-Einheit 907 und Aufteileinheit bzw. Spliteinheit 908 verbunden.
Der Ausgang der Vorwärtseinheit 902 ist
an dem anderen Eingang eines UND-Gatters 903 angeschlossen.
Der Ausgang des UND-Gatters 903 ist mit der bits_on-Einheit bzw. Bits-ein-Einheit 904 verbunden.
Der Ausgang der bits_on-Einheit bzw. Bits-ein-Einheit 904 ist
mit dem anderen Eingang der next_state_mps-Einheit 905,
der next_state_lps-Einheit 906, der fps-Einheit 907 und
der Aufteileinheit 908 verbunden.If you take reference 9 so is pclass 219 with the input of the mask generation unit 901 connected. The output of the mask generation unit 901 is with an input of an AND gate 903 connected. The fsm_state from the registry 702 is with an input of the forward unit 902 and an input of the next_state_mps unit 905 , next_state_lps unit 906 , fps unit 907 and split unit or split unit 908 connected. The output of the forward unit 902 is at the other input of an AND gate 903 connected. The output of the AND gate 903 is with the bits_on unit or bits-a-unit 904 connected. The output of the bits_on unit or bits-in unit 904 is with the other Input of the next_state_mps unit 905 , the next_state_lps unit 906 , the fps unit 907 and the allocation unit 908 connected.
In
Antwort auf diese Eingänge
bzw. Eingaben erzeugt die next_state_mps-Einheit ("nächster Zustand, höchstwahrscheinliches
Symbol"-Einheit) 905 den
next_state_mps 810, die next_state_lps-Einheit ("nächster Zustand, niedrigstwahrscheinliches
Symbol"-Einheit) 906 erzeugt
den next_state_lps 811 und die fps-Einheit 907 erzeugt
das fps-Signal 821.
Ebenso in Antwort auf diese Eingaben erzeugt die Aufteileinheit 908 den split8-Wert 822.
Die Aufteileinheit bzw. Spliteinheit umfaßt die split5-Einheit 909,
die angeschlossen ist, um die Eingänge der Aufteileinheit 908 zu
empfangen und erzeugt ein split5-Signal 911 in Antwort
darauf. Das split5-Signal 911 ist angeschlossen an den
Eingang der split5_to_split8-Einheit ("Aufteil-5"-zu-"Aufteil-8"-Einheit) 910,
die den split8-Wert 822 erzeugt.In response to these inputs, the next_state_mps unit ("next state, most likely symbol" unit) generates 905 the next_state_mps 810 , the next_state_lps unit ("next state, least likely symbol" unit) 906 generates the next_state_lps 811 and the fps unit 907 generates the fps signal 821 , Likewise, in response to these inputs, the split unit generates 908 the split8 value 822 , The split unit or split unit comprises the split5 unit 909 which is connected to the inputs of the distribution unit 908 to receive and generates a split5 signal 911 in response. The split5 signal 911 is connected to the input of the split5_to_split8 unit ("split-5" to "split-8" unit) 910 that the split8 value 822 generated.
Die
erste Stufe der LUT wird durch die Vorwärtseinheit 902 durchgeführt. Bei
einer Ausführungsform umfaßt die Vorwärtseinheit
bzw. Vorauseinheit 902 einen Eintrag für jeden FSM-(Entropiekodierer-)Zustand und
gibt den Eintrag in Antwort darauf aus, daß der fsm-Zustand vom Register 702 empfangen
wird. Bei einer Ausführungsform
umfaßt
die Vorwärtseinheit
("Advance"-Einheit) 902 61
Einträge,
die (von links nach rechts) wie folgt lauten: The first stage of the LUT is through the forward unit 902 carried out. In one embodiment, the forward unit comprises 902 an entry for each FSM (Entropy Encoder) state and outputs the entry in response to the fsm state of the register 702 Will be received. In one embodiment, the advance unit ("Advance" unit) comprises 902 61 entries that are (from left to right) as follows:
Bei
einer Ausführungsform
stellt jeder Eintrag einen 15-Bit-Hexadezimalwert dar. Jede Bitposition
entspricht einer PCLASS 1 bis 15 (es gibt kein Bit, das der Wahrscheinlichkeitsklasse
0 entspricht). Ein Bit zeigt an, falls eine PCLASS genauso kodiert
wird wie oder anders als die vorhergehende PCLASS (das heißt, ob die
LUT-Information dieselbe ist oder sich für aufeinanderfolgende PCLASSen
entscheiden). Zum Beispiel hat der Zustand 0 ("state 0") den Eintrag 7ECD16 oder
1111110110011012. Ausgehend von rechts (LSB)
gibt es zwei Nullen in Abschnitten 2, 5, 6 und 9. Dies bedeutet,
daß PCLASS
2 dasselbe ist wie PCLASS 1. In ähnlicher
Weise sind die PCLASSen 4, 5 und 6 dieselben und die PCLASSen 8
und 9 sind dieselben. Ein Zustand ist derselbe für jede PCLASS (vorwärts bzw. "advance" = 000016);
andere weisen eine kleine Anzahl unterschiedlicher PCLASSen auf.
Wenn viele PCLASSen ("P-Klassen") dieselbe LUT-Information haben,
kann die Logik zur Realisierung bzw. Implementation der next_state_mps-Einheit 905,
next_state_lps-Einheit 906, fps-Einheit 907 und
der split5-Einheit 909 reduziert
werden.In one embodiment, each entry represents a 15-bit hexadecimal value. Each bit position corresponds to a PCLASS 1 to 15 (there is no bit corresponding to the 0 probability class). One bit indicates if a PCLASS is encoded as well as or unlike the previous PCLASS (that is, if the LUT information is the same or decides on successive PCLASSs). For example, state 0 ("state 0") has the entry 7ECD 16 or 111111011001101 2 . From the right (LSB) there are two zeros in sections 2, 5, 6 and 9. This means that PCLASS 2 is the same as PCLASS 1. Similarly, PCLASSs 4, 5 and 6 are the same and PCLASSs 8 and 9 are the same. A state is the same for each PCLASS (advance = 0000 16 ); others have a small number of different PCLASSs. If many PCLASSs ("P-classes") have the same LUT information, the logic may be used to implement the next_state_mps unit 905 , next_state_lps unit 906 , fps unit 907 and the split5 unit 909 be reduced.
Die
Maskenerzeugungseinheit 901 erzeugt eine Maske in Antwort
auf pclass 219. Bei einer Ausführungsform lautet die Maske
0000000000000002 für PCLASS 0, 0000000000000012 für
PCLASS 1, 0000000000000112 für PCLASS
2 usw. Die Maske wird durch die UND-Gatterlogik 903 gemäß der UND-Funktion
mit dem Ausgang der Vorwärtseinheit 902 verbunden.The mask generation unit 901 creates a mask in response to pclass 219 , In one embodiment, the mask is 000000000000000 2 for PCLASS 0, 000000000000001 2 for PCLASS 1, 000000000000011 2 for PCLASS 2, etc. The mask is represented by the AND gate logic 903 according to the AND function with the output of the forward unit 902 connected.
Die
Bits-ein-Einheit 904 summiert die Anzahl der 1-Bits, die
von der UND-Gatter-Logik 903 ausgegeben werden, um einen
sel-Wert 912 zu erzeugen. Der sel-Wert 912 wird
als ein Index für
die LUTs der zweiten Stufe verwendet.The bits-a-unit 904 sums up the number of 1-bits used by the AND gate logic 903 be issued to a sel value 912 to create. The sel value 912 is used as an index for the second-stage LUTs.
Die
next_state_mps-Einheit 905, die next_state_lps-Einheit 906 und
die fps-Einheit 907 vervollständigen das Nachschlagen der
entsprechenden Werte.The next_state_mps unit 905 , the next_state_lps unit 906 and the fps unit 907 complete the lookup of the corresponding values.
Bei
einer Ausführungsform
beinhaltet die next_state_mps-Einheit 905 eine LUT mit
den folgenden Einträgen
(in Hexadezimal gezeigt), wobei jede Reihe einem FSM-Zustand (beginnend
mit einem FSM-Zustand 0) entspricht. Bemerkenswert ist, daß die zweite
Spalte unterhalb der ersten Spalte folgt.In one embodiment, the next_state_mps unit includes 905 an LUT with the following entries (shown in hexadecimal), each row corresponding to an FSM state (beginning with a FSM state 0). It is noteworthy that the second column follows below the first column.
Für jeden
der 61 Zustände
gibt es acht Einträge
für bis
zu acht mögliche
Werte eines sel-Wertes 912. Falls
weniger als 8 Werte des sel-Wertes 912 für einen
bestimmten Zustand auftreten (weil viele PCLASSen dieselbe Information
verwenden), werden "nicht
kümmern"-Werte durch "xx" angezeigt. Mehr
als 8 Werte des sel-Wertes treten für den Zustand 0 auf, die ersten
8 Einträge
für den
nächsten
Zustand des MPS sind in der Tabelle oben gezeigt und die verbliebenen
sind 616, 1016,
1B16 und 3816, und
zwar jeweilig.For each of the 61 states, there are eight entries for up to eight possible values of a sel value 912 , If less than 8 values of the sel value 912 for a given state (because many PCLASSs use the same information), "do not care" values are indicated by "xx". More than 8 values of the sel value occur for state 0, the first 8 entries for the next state of the MPS are shown in the table above and the remaining ones are 6 16 , 10 16 , 1B 16 and 38 16 , respectively ,
Bei
einer Ausführungsform
beinhaltet die next_state_lps-Einheit 906 eine LUT mit den folgenden
Einträgen
(in Hexadezimal gezeigt), wobei jede Reihe einem FSM-Zustand entspricht.
Wiederum folgt die zweite Spalte der ersten.at
an embodiment
Next_state_lps unit 906 includes a LUT with the following
entries
(shown in hexadecimal), where each row corresponds to an FSM state.
Again, the second column follows the first one.
Für jeden
der 61 Zustände
gibt es 8 Einträge
für bis
zu 8 möglichen
Werten des sel-Wertes 912.
Falls weniger als 8 Werte des sel-Wertes 912 für einen
bestimmten Zustand auftreten, werden "nicht kümmern"-Werte durch "xx" angezeigt.
Mehr als 8 Werte des sel-Wertes 912 treten für den Zustand
0 auf, die ersten 8 Einträge
für den
nächsten
Zustand auf MPS sind in der obigen Tabelle gezeigt und die verbliebenen
sind alle 0.For each of the 61 states there are 8 entries for up to 8 possible values of the sel value 912 , If less than 8 values of the sel value 912 for a given state, "do not care" values are indicated by "xx". More than 8 values of the sel value 912 occur for state 0, the first 8 entries for the next state on MPS are shown in the table above, and the remaining ones are all 0.
Bei
einer Ausführungsform
enthält
die fps-Einheit 907 eine LUT mit den folgenden Einträgen, wobei die
zweite Spalte der ersten Spalte und die dritte Spalte der zweiten
Spalte folgt. Wiederum entspricht jede Reihe einem anderen FSM-Zustand.In one embodiment, the fps unit contains 907 an LUT with the following entries, with the second column following the first column and the third column following the second column. Again, each row corresponds to a different FSM state.
Für jeden
der 61 Zustände
gibt es 8 Einträge
für bis
zu 8 möglichen
Werten des sel-Wertes 912.
Falls weniger als 8 Werte des sel-Wertes 912 für einen bestimmten Zustand
auftreten, werden "nicht
kümmern"-Werte durch "x" angezeigt. Mehr als 8 Werte des sel-Wertes 912 treten
für den
Zustand 0 auf. Die ersten 8 Einträge für den nächsten Zustand auf MPS sind
in der obigen Tabelle gezeigt und die verbliebenen sind alle 1.For each of the 61 states there are 8 entries for up to 8 possible values of the sel value 912 , If fewer than 8 values of the sel value 912 occur for a particular state, "do not care" values are indicated by "x". More than 8 values of the sel value 912 occur for state 0. The first 8 entries for the next state on MPS are shown in the table above and the remaining ones are all 1.
Die
split5-Einheit 909 führt
ein Nachschlagen durch, das einen 5-Bit-Aufteilindex erzeugt, der
dann durch die split5_to_split8-Logik 910 ausgedehnt bzw.
expandiert wird, um den korrekten 8-Bit-Aufteilwert, den split8-Wert 822 zu
erzeugen. Die split5-Einheit 909 enthält eine LUT mit den folgenden
5-Bit-Einträgen
(gezeigt in Hexadezimal), wobei die zweite Spalte der ersten Spalte
folgt.The split5 unit 909 performs a lookup that generates a 5-bit split index, then through the split5_to_split8 logic 910 is expanded or expanded to the correct 8-bit split value, the split8 value 822 to create. The split5 unit 909 contains an LUT with the following 5-bit entries (shown in hexadecimal), with the second column following the first column.
Für jeden
der 61 Zustände
gibt es 8 Einträge
bis zu 8 möglichen
Werten des sel-Wertes 912. Wenn weniger als 8 Werte des sel-Wertes 912 für einen
bestimmten Zustand auftreten, werden "nicht kümmern"-Werte durch "xx" angezeigt.
Mehr als 8 Werte des sel-Wertes 912 treten für den Zustand
0 auf, die ersten 8 Einträge
für den
nächsten
Zustand auf MPS sind in der Tabelle oben gezeigt und die verbliebenen
sind jeweilig 1C16, 1D16,
1E16 und 1F16.For each of the 61 states there are 8 entries up to 8 possible values of the sel value 912. If less than 8 values of the sel value 912 for a given state, "do not care" values are indicated by "xx". More than 8 values of the sel value 912 occur for state 0, the first 8 entries for the next state on MPS are shown in the table above and the remaining ones are respectively 1C 16 , 1D 16 , 1E 16 and 1F 16 .
Die
5-Bit-Indizes werden in 8-Bit-Splitwerte durch die split5_to_split8-Einheit 910 konvertiert.
Die split5_to_split8-Einheit 910 verwendet die folgende
LUT (mit Einträgen
in Hexadezimal gezeigt). Zum Beispiel ist für den Zustand 0 und sel 0 der
erste Aufteilpunkt-Index 0516, der einem
Wert von 8016 entspricht. Der 0516-Wert erscheint im oberen linken Wert des
split.hex-Wertes oben. Der 8016-Wert wird
von der Position 0516 in der split58.hex-Liste
unten abgeleitet (und zwar ist die sechste Position von dem Start
der Liste, wo "xx" ist, die 0016-Position).
// split58.hex
//
5-Bit-Aufteil-Punkt-Indizes zu wahren 8-Bit-Werten
xx 40 60
64 70 80 84 88 8c 90 98 9c aO a8 ac b0 b8 bc be c0 c8 cc d0 d8 dc
e0 e8 f0 f8 fc fe ffThe 5-bit indexes are divided into 8-bit split values by the split5_to_split8 unit 910 converted. The split5_to_split8 unit 910 uses the following LUT (with entries shown in hexadecimal). For example, for state 0 and sel 0, the first split point index is 05 16 , which corresponds to a value of 80 16 . The 05 16 value appears at the top left of the split.hex value above. The 80 16 value is derived from the 05 16 position in the split58.hex list below (the sixth position from the start of the list where "xx" is the 00 16 position).
// split58.hex
// 5-bit split-point indices to preserve 8-bit values
xx 40 60 64 70 80 84 88 8c 90 98 9c aO a8 ac b0 b8 bc be c0 c8 cc d0 d8 dc e0 e8 f0 f8 fc fe ff
Die
next_state_mps-Einheit 905, die next_state_lps-Einheit 906,
die fps-Einheit 907 und die split5-Einheit 909 können realisiert
werden, und zwar unter der Annahme, daß sowohl der fsm_state vom
Register 702 als auch der sel-Wert 912 zu Beginn
der Operation gültig
sind. In diesem Fall erzeugt jede Einheit eine einzelne Ausgabe.
Alternativ kann die Geschwindigkeit erhöht werden, falls ein zweistufiger
Prozeß für jede Einheit
verwendet wird. Erstens wird der fsm_state verwendet, um die Ausgabe
aller möglichen
Werte des sel-Wertes 912 zu bestimmen. Zweitens wird der
sel-Wert 912 verwendet, um die korrekte mögliche Ausgabe
zu dem Ausgang zu multiplexen. Da fsm_state vor dem sel-Wert 912 gültig sein
wird, kann dies eine höhere
Geschwindigkeit ermöglichen.The next_state_mps unit 905 , the next_state_lps unit 906 , the fps unit 907 and the split5 unit 909 can be realized, assuming that both the fsm_state and register 702 as well as the sel-value 912 are valid at the beginning of the operation. In this case, each unit generates a single output. Alternatively, the speed can be increased if a two-step process is used for each unit. First, the fsm_state is used to output all possible values of the sel value 912 to determine. Second, the sel value 912 used to multiplex the correct possible output to the output. Because fsm_state before the sel value 912 will be valid, this can allow a higher speed.
Das
folgende Beispiel zeigt den Betrieb einer Ausführungsform des FSM-Kodierers.
Die Tabelle 3 summiert die unteren Ergebnisse. Anfänglich startet
der Kodierer im pstate 262 für jeden Kontext mit der PCLASS
gleich 0, dem MPS gleich 1 und dem FSM-Zustand gleich 0. Ein Kontext von 6
und ein Eingangsbit von 0 werden als Eingaben des FSM-Kodierers
empfangen. (Kontexte und Bits in diesem Beispiel werden beliebig
aufgegriffen.) Die PCLASS 0 impliziert, daß der sel-Wert 912 gleich
0 ist. Mit dem sel-Wert 912 gleich
0 und einem FSM-Zustand gleich 0 wird ein 5-Bit-Aufteilindex-Wert
erhalten. Bemerkenswert ist, daß dieser
Wert von der obigen split.hex-Tabelle erhalten wird, wo jede Reihe
bzw. Zeile einem FSM-Zustand entspricht (und zwar beginnend mit
der ersten Zeile, die dem FSM-Zustand 0 entspricht). Unter Verwendung
der split58.hex-Tabelle wird der 5-Bit-Aufteil-Punkt-Index in einen
Aufteilwert bzw. split-Wert
von 80 hex konvertiert. Deshalb wird das Intervall, das von 0-7F
läuft,
bei 80 hex so aufgespalten, daß ein
Intervall von 0-7F festgelegt wird und das andere Intervall von
80-FF. Das fps-Signal zeigt an, welches der Intervalle 0-7F oder
80-FF mit dem Auftreten eines MPS in Zusammenhang steht. Um zu bestimmen,
welche Seite mit dem MPS im Zusammenhang steht bzw. diesem zugeordnet
ist, wird das fps-Signal berechnet. In diesem Fall ist das fps-Signal 0.
Dies wird bestimmt, indem auf first.hex gesehen wird und die erste
Zeile bzw. Reihe untersucht wird, die einem FSM-Zustand gleich 0
entspricht, was eine Auswahl der ersten Reihe bzw. Zeile der Tabelle
und sel 912 gleich 0 verursacht, was die erste Bitposition des ersten
Bits in jener Reihe bzw. Zeile ist. In diesem Fall ist, weil das
fps-Signal 0 ist, das MPS dem oberen Intervall von 80-FF zugeordnet.
Da das Eingangsbit sich in einem Wahrscheinlich-Zustand befindet
(das heißt,
das Eingangsbit ist dasselbe wie MPS), wird das Intervall von 80-FF berechnet. Wenn
die höchstsignifikanten
Bits der Bits der oberen Grenze FF und der unteren Grenze 80 des
Intervalls verglichen werden, ist das erste Bit 1 in beiden Fällen. Deshalb
wird ein 1-Bit ausgegeben.The following example shows the operation of one embodiment of the FSM encoder. Table 3 sums up the lower results. Initially, the encoder starts in the pstate 262 for each context with the PCLASS equal to 0, the MPS equal to 1, and the FSM state equal to 0. A context of 6 and an input bit of 0 are received as inputs to the FSM encoder. (Contexts and bits in this example are arbitrarily taken up.) The PCLASS 0 implies that the sel value 912 is equal to 0. With the sel value 912 equal to 0 and a FSM state equal to 0, a 5-bit split index value is obtained. It is noteworthy that this value is obtained from the above split.hex table, where each row corresponds to a FSM state (beginning with the first line corresponding to FSM state 0). Using the split58.hex table, the 5-bit split point index is converted to a split value of 80 hex. Therefore, the interval running from 0-7F is split at 80 hex so that an interval of 0-7F is set and the other interval is 80-FF. The fps signal indicates which of the 0-7F or 80-FF intervals is related to the occurrence of an MPS. To determine which side is associated with or associated with the MPS, the fps signal is calculated. In this case, the fps signal is 0. This is determined by looking at first.hex and examining the first row corresponding to a FSM state equal to 0, which is a selection of the first row of the Table and sel 912 equal to 0, which is the first bit position of the first bit in that row. In this case, because the fps signal is 0, the MPS is assigned to the upper interval of 80-FF. Since the input bit is in a probable state (that is, the input bit is the same as MPS), the interval of 80-FF is calculated. When the most significant bits of the upper limit bits FF and the lower limit 80 of the interval are compared, the first bit is 1 in both cases. Therefore, a 1-bit is output.
Weil
der pstate größer oder
gleich 214 ist und es ein Ausgangssignal gibt, wird der
PSTATE aktualisiert. Die Aktualisierung basiert auf dem aktuellen
Inhalt der Tabelle und wird auf den Zustand 263 aktualisiert. Was
den FSM-Zustand angeht, so verbleibt er im FSM-Zustand 0, da 0016 in der ersten Position (sel-Wert 912 =
0) der ersten Reihe (FSM-Zustand = 0) der next m.hex-Tabelle ist.Because the pstate is bigger or the same 214 and there is an output, the PSTATE is updated. The update is based on the current contents of the table and is based on the state 263 updated. As far as the FSM state is concerned, it remains in FSM state 0 because 00 16 is in the first position (sel value 912 = 0) of the first row (FSM state = 0) of the next m.hex table.
Als
nächstes
wird das Intervall geändert
und ein neues Intervall wird durch Verschieben der verbliebenen
Bits erzeugt, die nicht von dem Intervall ausgegeben worden sind.
Zum Beispiel werden alle Bits, die den unteren Intervallendpunkt
darstellen, die nicht infolge der Ausgabe der Kodewörter ausgegeben
wurden, nach links verschoben und Null-Bits werden in die niedrigstwertigen
Bits verschoben. Da das erste Null-Bit ausgegeben worden ist und
sieben Null-Bits verbleiben, werden alle sieben niedrigstwertigen
Bits nach links um eine Bitstelle verschoben und 0 wird zu dem LSB
hinzugefügt
In ähnlicher
Weise beinhalten bezüglich
des oberen Endes des Intervalles 7F alle verbliebenen Bits 1111111,
die nach links um ein Bit verschoben sind bzw. werden und ein anderes
Bit wird zu dem niedrigstwertigen Bit des Intervalls hinzugefügt. Dies
führt zu
einem neuen Intervall von 00-FF (der Zustand 0 bedeutet, daß das Intervall
00-FF ist).When
next
the interval is changed
and a new interval is created by moving the remaining ones
Generates bits that have not been output from the interval.
For example, all bits that are the lower interval end point
which are not output as a result of the output of the codewords
were shifted to the left and zero bits are in the least significant
Bits shifted. Since the first zero bit has been issued and
seven zero bits remain, all seven are least significant
Bits are shifted one bit to the left and 0 goes to the LSB
added
In similar
Manner include
the upper end of the interval 7F all remaining bits 1111111,
which are shifted to the left by one bit and / or another
Bit is added to the least significant bit of the interval. This
leads to
a new interval of 00-FF (the state 0 means that the interval
00-FF).
Der
nächste
Kontext ist 6 und das nächste
eingegebene Bit ist 0, während
der PSTATE 263 ist. Ein PSTATE von 263 entspricht einer
PCLASS von 2. In Antwort darauf, daß die pclass 219 2
ist, gibt die Maskenerzeugung 901 einen Maskenwert gleich
000000000000011 aus. In Antwort auf einen FSM-Zustand gleich 0 gibt
die Vorwärtseinheit 902 den
Eintrag aus, der dem FSM-Zustand 0 entspricht, der 7ECD16 oder 1111110110011012 beträgt.
Die Ergebnisse des UNDierens des Ausgangs der Maskenerzeugung 901 und
der Vorwärtseinheit 902 sind
000000000000001. In Antwort auf diesen Wert erzeugt die bit_on-Einheit
bzw. die Bit-Ein-Einheit 904 einen sel-Wert 912 gleich
1. Somit wird mit dem FSM-Zustand gleich 0 und dem sel-Wert 912 gleich
1 ein split-Index bzw. Aufteil-Index von 0C von split.hex erhalten.
Dies entspricht einem 8-Bit-Aufteilwert
von A0. Deshalb laufen die zwei Intervalle von 00-9F und A0-FF.The next context is 6 and the next bit entered is 0, while the PSTATE 263 is. A PSTATE of 263 corresponds to a PCLASS of 2. In response to the pclass 219 2 is gives the mask generation 901 a mask value equal to 000000000000011. In response to a FSM state equal to 0 indicates the forward unit 902 the entry corresponding to the FSM state 0 which is 7ECD 16 or 111111011001101 2 . The results of ANDing the output of the mask generation 901 and the forward unit 902 are 000000000000001. In response to this value, the bit_on unit or bit-in unit generates 904 a sel value 912 equals 1. Thus, with the FSM state equal to 0 and the sel value 912 equal to 1 get a split index of 0C from split.hex. This corresponds to an 8-bit split value of A0. Therefore, the two intervals of 00-9F and A0-FF run.
Mit
einem FSM-Zustand von 0 und einem sel-Wert 912 gleich 1
zeigt die zweite Position der ersten Reihe von first.hex an, daß das fps-Signal 821 gleich
1 ist. Damit, daß das
fps-Signal 821 gleich 1 ist, ist das Intervall, das dem
wahrscheinlicheren Fall zugeordnet ist, das Intervall von 00-BF.
Dieses Intervall wird zur Berechnung ausgewählt, weil das Eingangsbit dasselbe
ist, wie das MPS (das heißt
es ist in seinem wahrscheinlicheren Zustand). Weil das höchstwertige
Bit des Anfangs dieses Intervalls (00) nicht mit dem höchstwertigen Bit
des Endes des Intervalls (A0) übereinstimmt,
gibt es keine Bits, die ausgegeben werden und das System geht zu
einem neuen FSM-Zustand über,
wie durch next.m.hex angezeigt wird (Zustand 3, wie bei der zweiten Position
(sel-Wert 912 = 1) der Reihe 0 (FSM-Zustand = 0) angezeigt
wird), während
der PSTATE derselbe bleibt. Bemerkenwert ist, daß, weil keine Bits ausgegeben
werden, kein Hereinschieben von Bits in die Intervallendpunkte durchgeführt wird.With a FSM state of 0 and a sel value 912 equal to 1, the second position of the first row of first.hex indicates that the fps signal 821 is equal to 1. So that the fps signal 821 is equal to 1, the interval associated with the more probable case is the interval of 00-BF. This interval is chosen for calculation because the input bit is the same as the MPS (that is, it is in its more probable state). Because the most significant bit of the beginning of this interval (00) does not match the most significant bit of the end of the interval (A0), there are no bits that are output and the system transitions to a new FSM state, as by next.m .hex is displayed (state 3, as in the second position (sel value 912 = 1) of row 0 (FSM state = 0) is displayed) while the PSTATE remains the same. It is noteworthy that, because no bits are output, no pushing of bits into the Intervallendpunkte is performed.
Die
nächsten
Eingaben sind ein Kontextbit von 6 und ein Eingangsbit 0. Basierend
auf den Eingaben tritt ein Aufteilwert von 60 hex auf. Dieser Aufteilwert
wird auf das zuvor ausgewählte
Intervall von 00 bis BF angewandt. Deshalb wird das 00-9F-Intervall
zwischen 00-5F und 60-9F aufgeteilt. Das fps-Signal zeigt an, daß der erste
Abschnitt des ersten Intervalls von 0-5F das wahrscheinliche Intervall
ist. Weil ein MPS als das Eingangsbit erhalten wurde, wird dieses
erste Intervall von 0-5F berechnet. In diesem Fall stimmen das erste Bit
der Endpunkte des Intervalls 0 und 5F überein und wird deshalb ausgegeben.
Nach Ausgabe des Bits werden die verbliebenen Bits der Intervallwerte
nach links verschoben und eine 0 wird zu dem tieferen Intervall hinzugefügt (wobei
ein 00-Endpunkt erzeugt wird) und eine 1 wird zu dem oberen Intervall
hinzugefügt
(wobei ein BF-Endpunkt erzeugt wird), so daß das neue Intervall 0-BF wird.The
next
Inputs are a context bit of 6 and an input bit 0. Based
on the entries an allocation value of 60 hex occurs. This split value
will be on the previously selected
Interval from 00 to BF applied. Therefore, the 00-9F interval becomes
divided between 00-5F and 60-9F. The fps signal indicates that the first
Section of the first interval from 0-5F the probable interval
is. Because an MPS was obtained as the input bit, this becomes
calculated first interval from 0-5F. In this case, the first bit is right
the endpoints of the interval 0 and 5F and is therefore output.
After the bit is output, the remaining bits of the interval values become
moved to the left and a 0 is added to the lower interval (where
a 00 end point is generated) and a 1 becomes the upper interval
added
(where a BF endpoint is generated) so that the new interval becomes 0-BF.
Diese
Verarbeitung von Eingangsdaten setzt sich fort, wie in der unteren
Tabelle gezeigt ist. Jedoch tritt ein interessantes Beispiel auf,
wenn der Kontext 6 beträgt
und das Eingangsbit eine 1 ist. In diesem Fall läuft das Intervall von 0-C7
mit einem Aufteilwert von C0 (von split58.hex). Basierend auf dem
fps-Signal läuft das
Wahrscheinlich-Intervall
bzw. das wahrscheinliche Intervall von C0 bis C7. In diesem Fall
stimmen die höchstwertigen
5 Bits sowohl des Anfangs als auch des Endpunkts dieses Intervalls überein und
würden
ausgegeben werden (110002). Nach der Ausgabe
der fünf
Bits werden die verbliebenen Bits sowohl des Anfangs- als auch Stopp-Intervalls
nach links verschoben, wobei die Nullen die Bits tieferer Ordnung
des unteren Endes des Intervalles füllen und die Einsen die Bitstellen
unterer Ordnung des oberen Intervalls füllen. Dies führt zu einem
neuen Intervall von 0-FF.This processing of input data continues as shown in the table below. However, an interesting example occurs when the context is 6 and the input bit is a 1. In this case, the interval from 0-C7 runs with a split value of C0 (from split58.hex). Based on the fps signal, the probable interval, or the probable interval, runs from C0 to C7. In this case, the most significant 5 bits of both the beginning and end points of this interval match and would be output (11000 2 ). After the output of the five bits, the remaining bits of both the start and stop intervals are shifted left, with the zeroes filling the lower order bits of the lower end of the interval and the ones filling the lower order bit positions of the upper interval. This results in a new interval of 0-FF.
Tabelle
3 Beispieldaten
(cw = Kodewort; "size" = Größe) Table 3 Sample Data (cw = codeword; "size" = size)
Soweit
die ausgegebenen Bits 100000011000 sind, so kann das erste Byte
81 in Hexadezimal ausgegeben werden.So far
the output bits are 100000011000, so can the first byte
81 in hexadecimal.
Obwohl
die Ausführungsformen
des Kodierers, der die fps- und Aufteil-Werte verwendet, beschrieben sind,
kann der Kodierer in Software realisiert werden, indem ähnliche
Anzeigen verwendet werden. Während in
Hardware eine XOR-Operation mit dem fps-Signal relativ einfach zu realisieren
ist, gibt es jedoch für
den Fall von Software bei manchen Computer-Architekturen eine Schwierigkeit,
da die Bestimmung, ob eine Zahl größer oder gleich einer anderen
ist, zu der Festlegung eines Statusbits führt, nicht gerade ein Bit,
auf das leicht zugegriffen werden kann. Die Operation der XOR-Verknüpfung oder
des Vergleichens eines Bits mit einem Statusbit wird nur durch Durchführen von
Verzweigungsoperationen durchgeführt,
die zu unterschiedlichen Stellen bzw. Orten verzweigen, und zwar
basierend darauf, ob das Statusbit eine 1 oder eine 0 ist, und dann
wird auf ein Register bei jeder Stelle zugegriffen, das entweder
mit der 1 oder der 0 geladen ist, die die Statusbitanzeige darstellt.
Ein Beispiel für
einen Pseudo-Kode
einer derartigen Software wird im folgenden gegeben:
vergleiche
Kodestrom, split8
verzweige größer als oder gleich Label 1
lade
0 in Register
verzweige Label 2
Label 1: lade 1 in Register
Label
2: vergleiche Register, FPS
verzweige größer oder gleich LPS
;MPSAlthough the embodiments of the encoder using the fps and split values are described, the encoder can be implemented in software using similar displays. However, while in hardware an XOR operation with the fps signal is relatively easy to implement, in some computer architectures there is a difficulty in the case of software because the determination of whether one number is greater than or equal to another is Specifying a status bit, not just a bit that is easy to access. The operation of XORing or comparing a bit with a status bit is performed only by performing branching operations that branch to different locations based on whether the status bit is a 1 or a 0, and then goes on a register is accessed at each location loaded with either 1 or 0 representing the status bit display. An example of a pseudo-code of such software is given below:
compare code stream, split8
branch greater than or equal to label 1
load 0 in register
branching label 2
Label 1: load 1 in register
Label 2: compare registers, FPS
branch greater than or equal to LPS
mps
Dies
stellt eine sehr schwerfällige
Implementation dar.This
represents a very cumbersome
Implementation.
Für den Fall
von Software können,
um diese Schwierigkeiten zu überwinden,
zwei Aufteilwerte für
die Fälle
erzeugt werden, wo fps 0 ist und fps 1 ist. Da das fps-Signal gleich
1 häufig
auftritt bzw. mit einem hohen zeitlichen Prozentsatz auftritt, kann
nur ein Vergleich durchgeführt
werden, um ein Ergebnis zu erhalten, das der XOR-Verknüpfung unterzogen
wurde (anstelle der zwei, die bei der Hardware-Realisierung benötigt wer den).
Jedoch, falls der eine Vergleich nicht die notwendigen Ergebnisse
bereitstellt, dann werden zwei zusätzliche Vergleiche benötigt, was
mehr ist als die zwei, die bei Hardware benötigt werden, wobei ein endgültiger Vergleich
zwischen der Eingabe und dem MPS durchgeführt wird, um zu bestimmen,
ob sie übereinstimmen (wahrscheinlich).
Ein Beispiel eines Pseudo-Kodes für diese Software wird im folgenden
gegeben, wobei zwei Aufteilwerte verwendet werden, davon ist einer
dafür da,
daß die
fps-Anzeige 1 ist (split8_fps1) und einer ist dafür da, daß die fps-Anzeige
0 ist (split8_fps0).
vergleiche Kodestrom, split8_fps1
verzweige
weniger als MPS; höchstwahrscheinlicher
Fall
vergleiche split8_fps1,0
verzweige nicht gleich LPS
vergleiche
Kodestrom, split8_fps0
verzweige größer als oder gleich MPS
;LPSIn the case of software, to overcome these difficulties, two split values may be generated for the cases where fps is 0 and fps is 1. Since the fps signal equal to 1 occurs frequently or with a high percentage of time, only one comparison can be made to obtain a result that has been XORed (rather than the two needed in hardware implementation become). However, if the one comparison does not provide the necessary results, then two additional comparisons are needed, which is more than the two needed in hardware, with a final comparison made between the input and the MPS to determine if they match (probably). An example of a pseudo code for this software is given below, using two split values, one of which is for the fps indicator to be 1 (split8_fps1) and one for the fps indicator to be 0 ( split8_fps0).
compare code stream, split8_fps1
branch less than MPS; most likely case
compare split8_fps1,0
do not branch LPS right away
compare code stream, split8_fps0
branch greater than or equal to MPS
LPS
Räumenclear
Es
gibt verschiedene mögliche
Realisierungen der Flush-Logik bzw. Räum-Logik 707. 11 ist ein Blockdiagramm einer Ausführungsform
der Flush-Logik 707 zur Räumung in einem Zyklus mit dem
Wert 01112. Alternativ kann ein längerer Wert,
wie z.B. 100000002, verwendet werden. Nimmt
man Bezug auf 11, so ist die Verzögerung 1101 angeschlossen,
um das Flush-Signal bzw. Räum-Signal 413 zu
empfangen und die done_ bzw. "Räumen erledigt"-Anzeige 416 auszugeben.
Bei einer Ausführungsform
benötigt
das Räumen
einen Zyklus. Wiederum wird in diesem Fall die flush_sz-Anzeige 715 auf
4 gesetzt und flush_cw 716 wird auf 4 Bits 0111 gesetzt.
Wiederum werden die Start- und Stoppwerte von dem Startregister 703 und
dem Stoppregister 704 nicht verwendet.There are several possible implementations of the flush logic or purging logic 707 , 11 Figure 4 is a block diagram of one embodiment of the flush logic 707 to evacuate in a cycle with the value 0111 2 . Alternatively, a longer value, such as 10,000,000 2 , may be used. If you take reference 11 so is the delay 1101 connected to the flush signal or clearing signal 413 to receive and the done_ or "cleared rooms" display 416 issue. In one embodiment, clearing takes one cycle. Again, in this case, the flush_sz ad will appear 715 set to 4 and flush_cw 716 is set to 4 bits 0111. Again, the start and stop values are from the start register 703 and the stop register 704 not used.
Um
mit der minimalen Anzahl von Bits zu räumen, kann das zum Räumen verwendete
Kodewort durch die Start- und Stoppwerte bestimmt werden, wie in 12 gezeigt ist. Nimmt man Bezug auf 12, so ist die generate_codeword_for_flush-Einheit
("erzeuge Kodewort
zum Räumen"-Einheit) 1201 angeschlossen,
um den Startwert vom Register 703 und den Stoppwert vom
Register 704 zu empfangen. In Antwort auf diese Ausgangssignale
gibt die Einheit 1201 eine flush_sz-Anzeige 715 und
ein flush_cw 716 aus. Ebenso ist die Verzögerungseinheit 1202 angeschlossen,
um ein Flush-Signal 413 zu empfangen und eine done_flush-Anzeige 416 auszugeben.
Die generate_codeword for flush-Einheit 201 arbeitet wie
folgt: Bei einer
alternativen Ausführungsform
kann das Räumen
durch Kodieren von 8 Bits in PCLASS 0 durchgeführt werden. Dies erfordert
keine Logik in dem FSM-Kodierer. Die Kontextmodell-/Wahrscheinlichkeitsschätz-/Systemsteuerung
führt das
Räumen
durch.To clear out with the minimum number of bits, the codeword used for spaces can be determined by the start and stop values, as in 12 is shown. If you take reference 12 so is the generate_codeword_for_flush unit ("generate code word to rooms" unit) 1201 connected to the starting value from the register 703 and the stop value from the register 704 to recieve. In response to these output signals, the unit gives 1201 a flush_sz ad 715 and a flush_cw 716 out. Likewise, the delay unit 1202 connected to a flush signal 413 to receive and a done_flush ad 416 issue. The generate_codeword for flush unit 201 works as follows: In an alternative embodiment, clearing may be performed by encoding 8 bits into PCLASS 0. This does not require logic in the FSM encoder. The context model / probability estimation / system control performs the broaching.
Biterzeugungs-VerilogBiterzeugungs-Verilog
Im
folgenden ist eine beispielhafte Verilog-HDL-Beschreibung für die 8, 9 und 11 dargestellt.The following is an exemplary Verilog HDL description for the 8th . 9 and 11 shown.
Bestimmung der Anzahl
der Ein-BitsDetermination of the number
the one-bit
Die
Bits-ein-Einheit 904 in 9 bestimmt
die Anzahl der 1-Bits mit einem Baum von Addierern. Eine beispielhaft
Verilog-HDL-Beschreibung ist die folgende: The bits-a-unit 904 in 9 determines the number of 1-bits with a tree of adders. An exemplary Verilog HDL description is the following:
Kodewort-ErzeugungCodeword generation
13 ist ein Blockdiagramm einer Ausführungsform
der Kodewort-Erzeugungseinheit (cw_gen) 805 der Bit-Erzeugungslogik 701.
Wie zuvor diskutiert wurde, erzeugt die Kodeworteinheit 805 ein
Kodewort und führt
diese Funktion innerhalb einer Logik anstatt innerhalb einer LUT
durch, wodurch Hardware eingespart werden kann. 13 is a block diagram of one embodiment of the codeword generation unit (cw_gen) 805 the bit generation logic 701 , As previously discussed, the code word engine generates 805 a codeword and performs this function within a logic rather than within a LUT, which can save hardware.
Nimmt
man Bezug auf 13, so umfaßt die Kodeworteinheit 805 MUX 1301,
das angeschlossen ist, um den Startwert von dem Startwertregister 703 und
den split8-Wert 822 zu empfangen. Die MUX 1302 ist angeschlossen,
um die Ausgabe des Subtrahierers 1309 auf seinem ersten
Eingang und den Stoppwert von dem Stoppwertregister 704 auf
den zweiten Eingang zu empfangen. Die Ausgänge der MUXs 1301 und 1302 werden über einen
Auswahl-Signalausgang von dem Vergleicher 1303 ausgewählt, der
angeschlossen ist, um eine Wahrscheinlich-Anzeige 720 und
ein fps-Signal 821 zu empfangen, und das Ausgangssignal
auf dem Auswahlsignal aktiviert bzw. bestätigt, falls die zwei gleich
sind, wodurch der Startwert, der von dem MUX 1301 ausgegeben
werden soll, und der split8-Wert 822 minus 1, der von dem
MUX 1302 ausgegeben werden soll, ausgewählt wird. Falls nicht aktiviert
wird, wird der split8-Wert 822 von dem MUX 1301 ausgegeben
und der Stoppwert wird von dem MUX 1302 ausgegeben.If you take reference 13 so includes the code word unit 805 MUX 1301 that is connected to the seed from the seed register 703 and receive the split8 value 822. The mux 1302 is connected to the output of the subtractor 1309 on its first input and the stop value from the stop value register 704 to receive the second input. The outputs of the MUXs 1301 and 1302 are via a select signal output from the comparator 1303 selected, which is connected to a probable indicator 720 and a fps signal 821 and if the two are equal, the output signal on the selection signal is asserted, thereby reducing the start value provided by the MUX 1301 and the split8 value 822 minus 1, from the mux 1302 is to be output is selected. If not enabled, the split8 value becomes 822 from the mux 1301 output and the stop value is from the MUX 1302 output.
Das
Ausgangssignal von MUX 1301 wird an einen Eingang des XOR-Gatters 1304 an
den Kodewort-Schieber 1306 und den Start-Schieber 1307 angeschlossen.
Der Ausgang des MUX 1302 ist an den anderen Eingang des
XOR 1304 und an einen Eingang des Stoppschiebers 1308 angeschlossen.
Der Ausgang des XOR-Gatters 1304 ist an den Eingang des
Prioritätskodierers 1305 angeschlossen.
Der Ausgang des Prioritätskodierers 1305 ist
eine sz-Anzeige (z.B. ein Signal bzw. Signale) 710, das
von der Kodewort-Erzeugungseinheit 805 ausgegeben
wird. Die sz-Anzeige 710 ist ebenso an den anderen Eingang
eines jeden Kodewort-Schiebers 1306, Start-Schiebers 1307 und
Stopp-Schiebers 1308 angeschlossen. Die Ausgänge des Kodewort-Schiebers 1306,
Start-Schiebers 1307 und Stopp-Schiebers 1308 sind
das cw (Kodewort) 711, der next_start-Wert 712 und
der next_start 713.The output signal of MUX 1301 is applied to an input of the XOR gate 1304 to the codeword slider 1306 and the start slider 1307 connected. The output of the MUX 1302 is at the other input of the XOR 1304 and to an entrance of the stopper 1308 connected. The output of the XOR gate 1304 is at the input of the priority encoder 1305 connected. The output of the priority encoder 1305 is a sz indicator (eg a signal or signals) 710 that from the codeword generation unit 805 is issued. The sz ad 710 is also at the other input of each codeword slider 1306 , Start slider 1307 and stop slider 1308 connected. The outputs of the codeword slider 1306 , Start slider 1307 and stop slider 1308 are the cw (codeword) 711 , of the next_start value 712 and the next_start 713 ,
Das
aktuell gültige
Intervall zwischen den Start- und Stopp-Werten wird unterteilt bei
dem Wert, der durch split8-Wert 822 spezifiziert ist. Der Vergleicher 1303 führt einen
Vergleich zwischen einer Wahrscheinlich-Anzeige 720 und
einem fps 821 durch, um zu bestimmen, ob entweder der Start- oder
Stopp-Wert durch den split-Wert ersetzt wird, der durch den split8-Wert
822 angezeigt ist, um ein neues Intervall (neuer Start- und Stopp-Wert)
zu erzeugen. Bei einer Ausführungsform
wird, falls der Stopp-Wert ersetzt wird, dieser mit dem Stopp-Wert
minus 1 ersetzt. Der neue Start- und Stopp-Wert werden durch das
XOR 1304 gemäß der Exklusiv-ODER-Verknüpfung verknüpft, um
Bits zu lokalisieren, die übereinstimmen.
Die Anzahl der Übereinstimmungsbits
wird beginnend mit dem MSB durch den Prioritätskodierer 1305 bestimmt
und als die Größe des Kodeworts
(sz-Anzeige 710) ausgegeben. Die Größe ("size")
des Kodewortes steuert die Schieber 1306 bis 1308.
Die Übereinstimmungsbits
der neuen Start- und Stopp-Werte werden durch einen cw-Schieber 1306 als
cw 711 ausgegeben. Die Bits, die nicht übereinstimmen, werden durch
den Start-Schieber 1307 und den Stopp-Schieber 1308 als
next_start 712 und next_stop 713 jeweilig ausgegeben.
Der Start-Schieber 1307 füllt die LSB(s) der unteren
und des Intervalls mit Nullen. Der Stopp-Schieber 1308 füllt die
LSB(s) des oberen Endpunkts des Intervalls mit Einsen. Bei manchen
Ausführungsformen
erfordert dies das Verschieben und das ODERn (siehe Verilog).The currently valid interval between the start and stop values is divided into the value specified by split8 value 822. The comparator 1303 performs a comparison between a probable ad 720 and an fps 821 to determine whether either the start or stop value is replaced by the split value indicated by the split8 value 822 at a new interval (new start and stop value). to create. In one embodiment, if the stop value is replaced, it is replaced with the stop value minus 1. The new start and stop values are given by the XOR 1304 according to the exclusive-OR operation to locate bits that match. The number of match bits is started by the priority encoder starting with the MSB 1305 determined and as the size of the codeword (sz display 710 ). The size of the codeword controls the sliders 1306 to 1308 , The match bits of the new start and stop values are given by a cw-slider 1306 as cw 711 output. The bits that do not match are given by the start slider 1307 and the stop slider 1308 as next_start 712 and next_stop 713 respectively issued. The start slider 1307 fills the LSB (s) of the lower and the interval with zeroes. The stop slider 1308 fills the LSB (s) of the upper endpoint of the interval with ones. In some embodiments, this requires the move and the ORn (see Verilog).
Bemerkenswert
ist, daß bei
alternativen Ausführungsformen
zwei oder alle drei dieser Schieber kombiniert werden können. Ebenso
bemerkenswert ist, daß der
cw-Schieber 1306 den neuen Stopp-Wert als eine Eingabe
anstelle des neuen Start-Wertes verwendet.It is noteworthy that in alternative embodiments, two or all three of these slides can be combined. Equally noteworthy is that the cw-slider 1306 used the new stop value as an input instead of the new start value.
Eine
beispielhafte Veriolog-HDL-Beschreibung der 13 wird
im folgenden gegeben:
// Copyright bzw. Urheberrecht 1997 RICOH
//
Erzeuge ein Kodewort An exemplary veriolog-HDL description of 13 is given below:
// Copyright or Copyright 1997 RICOH
// Create a codeword
Tabelle
4 summiert die gültigen
Start- und Stopp-Paare, die die 61 FSM-Zustände darstellen. Diese Start-
und Stopp-Paare und keine anderen werden durch die Operation der
Hardware erzeugt.table
4 sums up the valid ones
Start and stop pairs representing the 61 FSM states. These start
and stop pairs and no others will be through the operation of
Hardware generated.
Tabelle
4 Gültige Start-
und Stopp-Paare (Hexadezimal) Table 4 Valid start and stop pairs (hexadecimal)
Bit-PackenBit-packing
14 ist ein Blockdiagramm einer Ausführungsform
der Packeinheit 404 des Entropiekodierers 400. Die
Packeinheit 404 kombiniert Kodewörter variabler Länge in Bytes,
wenn kodiert wird. Die Takt- und Freigabesignale sind nicht gezeigt,
um eine Verschleierung der Erfindung zu vermeiden. 14 Fig. 10 is a block diagram of one embodiment of the packing unit 404 of the entropy coder 400 , The packing unit 404 combines codewords of variable length in bytes when coded. The clock and enable signals are not shown to avoid obscuring the invention.
Nimmt
man Bezug auf 14, so ist das Kodewort 417 mit
einem Eingang des ODER-Gatters 1402 verbunden,
das es mit dem Ausgang der Schiebeeinrichtung 1401 gemäß der ODER-Verknüpfung verknüpft. Die
Ergebnisse der ODER-Operation werden in dem Pufferregister 1403 gespeichert.
Das Pufferregister (bbuf) 1403 hält die Bits bis sie in Bytes
zusammengefügt
sind und ausgegeben werden. Bei einer Ausführungsform ist das Pufferregister 1403 ein
16-Bit-Puffer. Wenn die Eingangsdaten empfangen werden, werden die
Daten, die sich aktuell im Pufferregister 1403 befinden,
verschoben, indem der Schieber 1401 verwendet wird, um Platz
für die
neuen Daten zu machen und die neuen Daten werden hinzugefügt. Um am
Ende des Dekodierens zu räumen,
werden jegliche Daten, die aktuell im Pufferregister 1403 sind,
verschoben, um ein Byte zu vollenden. Die Daten, die von dem Pufferregister 1403 ausgegeben
werden, werden mit dem Eingangsschieber 1405 verbunden.
Der Schieber 1405 richtet das Dateninhalts-Pufferregister 1403 gemäß dem Wert
des Zählregisters 1406 aus,
um die Datenausgabe data_out 229 zu erzeugen. Zum Beispiel
ist, unter der Annahme, daß es 9
Bits im Pufferregister 1403 in den Positionen 8..0 gibt,
die Zählung
in dem Zählregister 1406 9
und die Bits 8..1 sind für
die Ausgabe bestimmt, die Schiebeeinrichtung 1405 richtet
diese 8 Bits auf die Bits 7..0 von data_out 229 aus. Das
Bit 0 des Pufferregisters 1403 bleibt, bis das nächste Byte
ausgegeben werden kann.If you take reference 14 that's the code word 417 with an input of the OR gate 1402 connected to the output of the sliding device 1401 linked according to the OR link. The results of the OR operation are in the buffer register 1403 saved. The buffer register (bbuf) 1403 Holds the bits until they are put together in bytes and output. In one embodiment, the buffer register is 1403 a 16-bit buffer. When the input data is received, the data that is currently in the buffer register 1403 are moved, moved by the slider 1401 is used to make room for the new data and the new data is added. To clear at the end of decoding, any data that is currently in the buffer register 1403 are moved to complete a byte. The data coming from the buffer register 1403 are output with the input slider 1405 connected. The slider 1405 sets up the data content buffer register 1403 according to the value of the counting register 1406 off to the data output data_out 229 to create. For example, assuming that there are 9 bits in the buffer register 1403 in positions 8..0, the count in the count register 1406 9 and bits 8..1 are for output, the shifter 1405 directs these 8 bits to bits 7..0 of data_out 229 out. Bit 0 of the buffer register 1403 remains until the next byte can be output.
Alternativ
könnte
ein einziger Schieber anstelle von zwei Schiebern verwendet werden.
Der einzige Schieber würde
die Daten am Eingang des Pufferregisters 1403 ausrichten.
Das Pufferregister 1403 würde als zwei 8-Bit-Register
realisiert werden, die um 8 verschieben können, wenn jedes Byte ausgegeben
worden ist. Ein Beispiel einer derartigen Realisierung ist in 14A gezeigt.Alternatively, a single slider could be used instead of two slides. The only slider would be the data at the input of the buffer register 1403 align. The buffer register 1403 would be realized as two 8-bit registers which can shift by 8 when each byte has been issued. An example of such a realization is in 14A shown.
Das
Pufferregister 1403 speichert Daten in Antwort auf die
Ausgabe der Freigabelogik 1408, die angeschlossen ist,
um die Größenanzeige 418 zu
empfangen und eine Anzeige 414 zu ermöglichen. Die Freigabelogik 1408 aktiviert
ihre Freigabe-Ausgabe, wenn die Größe ("size")
größer als
0 in der Freigabe aktiviert ist. Der Freigabeausgang für die Freigabelogik 1408 ist
mit dem Eingang des verwendeten Registers 1409 verbunden,
um anzuzeigen, daß Bits
gesendet worden sind.The buffer register 1403 saves data in response to the output of the release logic 1408 which is connected to the size indicator 418 to receive and an advertisement 414 to enable. The release logic 1408 enables its release output if size (size) greater than 0 is enabled in the share. The release output for the release logic 1408 is with the input of the register used 1409 connected to indicate that bits have been sent.
Die
Ausgabe des Puffenegisters 1403 wird zu dem Schieber 1401 zurückgeführt, um
mit den verschobenen Daten kombiniert zu werden.The output of the buffer register 1403 becomes the slider 1401 returned to be combined with the moved data.
Das
Zählregister
(bcnt) 1406 bleibt mit den Bits in dem Pufferregister 1403 am
laufenden, die darauf warten, ausgegeben zu werden. Das Zählregister 1406 wird
um die Größe der Eingangsdaten
minus einer bestimmten Menge inkrementiert bzw. erhöht, die
darauf basiert, ob das data_in_fertig-Signal 1428 aktiviert
ist. Falls es aktiviert ist, wird der Zähler im Zählregister 1406 um
die Größe der Eingangsdaten
minus 8 erhöht; ansonsten
wird der Zähler
durch die Größe der Eingangsdaten
(minus 0) erhöht.
Die Zähllogik 1404 (die
angeschlossen ist, um die Größenanzeige
bzw. size-Anzeige 418, eine Rückkopplung des data_out_ready_Signals
bzw. data_out_fertig_Signals 423, eine Rückkopplung
vom Zählregister 1406 und das
Ausgangssignal der Räumlogik 1410 zu
empfangen) ist für
das Aktivieren des data_in ready_Signals 1428 verantwortlich.
Bei einer Ausführungsform
umfaßt
das Zählregister 1406 einen
4-Bit-Zähler.The counting register (bcnt) 1406 stays with the bits in the buffer register 1403 ongoing, waiting to be issued. The counting register 1406 is incremented / incremented by the size of the input data minus a certain amount based on whether the data_in_ready signal 1428 is activated. If enabled, the counter will be in the count register 1406 increased by the size of the input data minus 8; otherwise the counter is increased by the size of the input data (minus 0). The counting logic 1404 (which is connected to the size indicator or size indicator 418 , a feedback of the data_out_ready_signal or data_out_fertig_Signals 423 , a feedback from the counting register 1406 and the output signal of the purging logic 1410 to receive) is for activating the data_in ready_signal 1428 responsible. In one embodiment, the count register comprises 1406 a 4-bit counter.
Die
Fertig-Logik 1407 überwacht,
wenn das Ausgangssignal eines Zählregisters 1406 8
oder mehr beträgt
und aktiviert das data_out_ready-Signal 423. Wenn dies
auftritt, erniedrigt die Zähllogik 1404 die
Zählung im
Zählregister 1406 um
8.The finished logic 1407 monitors when the output of a count register 1406 8 or more and activates the data_out_ready signal 423 , When this occurs, the counting logic lowers 1404 the count in the count register 1406 at 8.
Die
Räumlogik 1410 wird
verwendet, um jegliche Daten, die immer noch am Ende der Kodierung
gepuffert werden, zu räumen
oder auszugeben. Bei einer Ausführungsform
räumt die
Räumlogik 1410 die
Zähllogik 1404 und
den Schieber 1401 in Antwort auf das Räumsignal 413 und bg_done_flush-Signal 416.
Die Flush-Logik 1410 ist ebenso angeschlossen, um das Ausgangssignal
des verwendeten Registers (bused) 1409 und das Ausgangssignal
des Zählregisters 1406 zu
empfangen. Das verwendete Register 1409 wird auf 1 gesetzt,
wenn jegliche Daten eingegeben werden. Bei einer Ausführungsform
ist das verwendete Register 1409 ein 1-Bit-Register. Es
wird verwendet, um anzuzeigen, wenn keine Daten eingegeben worden
sind, so daß ein
Räumen
nicht notwendig ist. Die Flush-Logik 1410 führt die
Räumoperation
durch, falls ein Flush-Signal 413 aktiviert wird, der Wert
in dem Zählregister 1406 größer als
0 ist und der Wert im verwendeten Register 1409 größer als
0 ist. Falls das verwendete bzw. gebrauchte Register 1409 anzeigt,
daß keine
Daten eingegeben wurden, zeigt die Flush-Logik 1410 an,
daß das
Räumen
vollendet ist. Zum Räumen
werden, falls data_out_ready 423 nicht aktiviert ist, dann
der Inhalt des Pufferregisters 1403 zu dem MSB(s) bewegt,
indem der Schieber 1401 verwendet wird und der Inhalt des
Zählregisters 1406 gleich
0 gesetzt wird, wenn das data_out_ready-Signal 423 aktiviert
ist oder gleich 8 gesetzt wird, wenn das data_out_ready-Signal 423 nicht aktiviert
ist. Das Räumen
ist in der Fachwelt gut bekannt.The clearing logic 1410 is used to clear or dump any data that is still buffered at the end of the encoding. In one embodiment, the clean-up logic removes 1410 the counting logic 1404 and the slider 1401 in response to the stink signal 413 and bg_done_flush signal 416 , The flush logic 1410 is also connected to the output of the used register (bused) 1409 and the output of the count register 1406 to recieve. The used register 1409 is set to 1 if any data is entered. In one embodiment, the register used is 1409 a 1-bit register. It is used to indicate when no data has been entered, so that space is not necessary. The flush logic 1410 performs the scavenging operation if a flush signal 413 is activated, the value in the count register 1406 is greater than 0 and the value in the register used 1409 is greater than 0. If the used or used register 1409 indicates that no data has been entered, shows the flush logic 1410 that the room is completed. To clean up, if data_out_ready 423 is not activated, then the contents of the buffer register 1403 moved to the MSB (s) by the slider 1401 is used and the contents of the count register 1406 is set equal to 0 if the data_out_ready signal 423 is enabled or set equal to 8 if the data_out_ready signal 423 is not activated. Spaces are well known in the art.
Nachdem
das Räumen
vollendet ist, aktiviert die Flush-Logik 1419 das done_flush-Signal 424.
Mit anderen Worten, falls das Flush-Signal bzw. Räumsignal 415 aktiviert
wird und entweder die Zählung
im Zählregister 1406 0
ist oder der Wert dem verwendeten bzw. gebrauchten Register 1409 0
ist, dann wird das done_flush-Signal 424 aktiviert.After the room is completed, the flush logic activates 1419 the done_flush signal 424 , In other words, if the flush signal 415 is activated and either the count in the count register 1406 0 or the value of the used or used register 1409 0, then the done_flush signal 424 activated.
Falls
der FSM-Kodierer zurückgesetzt
wird, werden das Pufferregister 1403, das Zählregister 1406 und
das gebrauchte Register 1409 initialisiert. Bei einer Ausführungsform
werden sie auf 0 initialisiert.If the FSM encoder is reset, the buffer register will be 1403 , the counting register 1406 and the used register 1409 initialized. In one embodiment, they are initialized to zero.
Eine
beispielhafte Verilog-HDL-Beschreibung für die 14 folgt.An exemplary Verilog HDL description for the 14 follows.
Bit-EntpackenBit unpacking
15 ist ein Blockdiagramm einer Ausführungsform
einer Entpackeinheit 405, die eine Verschiebung variabler
Länge der
Bytes des kodierten Datenstroms in Kodewörter variabler Länge während des
Dekodierens durchführt.
Der Takt 405, das Rücksetzsignal 411 und
das Freigabesignal 414 sind nicht gezeigt, um eine Verschleierung
der vorliegenden Erfindung zu vermeiden. 15 Fig. 10 is a block diagram of one embodiment of an unpacking unit 405 which performs a variable-length shift of the bytes of the coded data stream into variable-length codewords during decoding. The beat 405 , the reset signal 411 and the enable signal 414 are not shown to avoid obscuring the present invention.
Nimmt
man Bezug auf 15, so ist das data_in-Kodewort 221 an
den Eingang des Pufferregisters 1501 und den Schieber 1504 angeschlossen.
Das Pufferregister (ubuf) 1501 hält eine vorherige Anzahl von Bits
der kodierten Daten. Bei einer Ausführungsform ist das Pufferregister 1501 ein
8-Bit-Register, das die vorhergehenden 8 Bits der kodierten Daten
hält.If you take reference 15 so that's the data_in codeword 221 to the input of the buffer register 1501 and the slider 1504 connected. The buffer register (ubuf) 1501 holds a previous number of bits of encoded data. In one embodiment, the buffer register is 1501 an 8-bit register holding the previous 8 bits of encoded data.
Der
Ausgang des Pufferregisters 1501 ist an den Eingang des
Schiebers 1502 angeschlossen, der die Daten in einen Eingang
des ODER-Gatters 1503 in Antwort auf das Ausgangssignal
des Zählregisters 1506 verschiebt.
Der andere Eingang des ODER-Gatters 1503 ist an den Ausgang
des Schiebers 1504 angeschlossen, der data_in 221 in
Antwort auf die Zählung 1509,
die von dem Zählregister 1506 ausgegeben
wird, verschiebt. Der Ausgang des ODER-Gatters 1503 ist
das data_out 1520, bei dem es sich um den Codestrom 419 handelt.The output of the buffer register 1501 is at the entrance of the slider 1502 connected, the data in an input of the OR gate 1503 in response to the output of the count register 1506 shifts. The other input of the OR gate 1503 is at the exit of the slider 1504 connected, the data_in 221 in response to the count 1509 that from the count register 1506 is issued, shifts. The output of the OR gate 1503 is the data_out 1520 which is the code stream 419 is.
Das
Zählregister 1506 gibt
die Zählung 1509 in
Antwort auf eine Eingabe der Zähllogik 1505 aus.
Die Zähllogik 1505 erzeugt
ihr Ausgangssignal in Antwort auf die Zählung 1509, die von
dem Ausgang des Zählregisters 1506 zurückgeführt wird,
die Größenanzeige 418 und
das Ausgangssignal des Vergleichers 1507. Der andere Eingang
des Vergleichers 1507 ist mit der Zählung 1509 verbunden.
Der Ausgang des Vergleichers 1507, das wnext-Signal 1510 ist
an den Eingang des next-Registers bzw. des nächsten Registers 1508 angeschlossen.
Der Ausgang des nächsten
Registers 1508 ist das next_byte-Signal 420.The counting register 1506 gives the count 1509 in response to an input of the count logic 1505 out. The counting logic 1505 generates its output in response to the count 1509 from the output of the count register 1506 is returned, the size indicator 418 and the output of the comparator 1507 , The other input of the comparator 1507 is with the count 1509 connected. The output of the comparator 1507 , the wnext signal 1510 is at the input of the next register or the next register 1508 connected. The output of the next register 1508 is the next_byte signal 420 ,
Das
Zählregister
(ucnt) 1506 hält
die Anzahl der Bits im Pufferregister 1501, die nicht durch
den Dekoder verbraucht worden sind. Das Zählregister 1506 wird über die
Zähllogik 1505 durch
die Größe des Kodewortes
dekrementiert, das durch den Dekoder verbraucht wird, wie durch
die Größenanzeige 418 angezeigt wird.
Wenn der Wert im Zählregister 1506 weniger
als oder gleich der Größe des aktuell
angeforderten Kodeworts ist, wird data_in 221 in das Pufferregister 1501 geladen,
das Zählregister 1506 wird
um 8 inkrementiert und ein wnext-Signal 1510 wird aktiviert.The counting register (ucnt) 1506 Holds the number of bits in the buffer register 1501 that have not been consumed by the decoder. The counting register 1506 is about the counting logic 1505 is decremented by the size of the codeword consumed by the decoder, such as the size indicator 418 is shown. If the value in the count register 1506 is less than or equal to the size of the currently requested code word, data_in 221 in the buffer register 1501 loaded, the counting register 1506 is incremented by 8 and a wnext signal 1510 is activated.
Der
korrekt ausgerichtete Kodestrom data_out 1520 wird erzeugt,
indem die Anzahl der Bits gleich der Zählung 1509 (Zählregister 1506)
von dem Pufferregister 1501 und die Anzahl der Bits gleich
8 minus der Anzahl der Bits gleich der Zählung 1509 von data_in 221 genommen
wird.The correctly aligned code stream data_out 1520 is generated by the number of bits equal to the count 1509 (count register 1506 ) from the buffer register 1501 and the number of bits equals 8 minus the on number of bits equal to the count 1509 from data_in 221 is taken.
Der
Vergleicher 1507 ist ein "weniger als oder gleich"-Vergleicher, der
bestimmt, ob die Zählung 1509 weniger
als oder gleich der Größenanzeige
bzw. size-Anzeige 1418 ist. Falls er dies ist, wird das
wnext-Signal 1510 aktiviert. In Antwort darauf, daß das wnext-Signal 1590 aktiviert
wird, erzeugt das nächste
Register ("next") 1508 die
next_byte-Steueranzeige 420, die anzeigt, daß das nächste Byte
des kodierten Datenstroms bei data_in 221 dargestellt werden
sollte. Bei einer Ausführungsform
ist das Register 1508 ein 1-Bit-Signal. Mit anderen Worten,
wenn die ersten der zwei Bytes verbraucht sind, zeigt die next_byte-Anzeige 420 an,
daß das nächste Byte
von data_in 221 ausgegeben werden sollte.The comparator 1507 is a "less than or equal" comparator that determines whether the count is 1509 less than or equal to the size indicator or size indicator 1418 is. If it is, the wnext signal will be generated 1510 activated. In response to the fact that the wnext signal 1590 is activated, generates the next register ("next") 1508 the next_byte control display 420 indicating that the next byte of the encoded data stream is at data_in 221 should be presented. In one embodiment, the register is 1508 a 1-bit signal. In other words, when the first of the two bytes are consumed, the next_byte display shows 420 that the next byte of data_in 221 should be issued.
Falls
der FSM-Kodierer zurückgesetzt
wird, werden das Pufferregister 1501, das Zählregister 1506 und
das nächste
Register 1508 alle initialisiert. Bei einer Ausführungsform
werden diese Register auf 0 initialisiert. Bemerkenswert ist, daß die Register 1501, 1506 und 1508 als
andere Speichervorrichtungstypen realisiert werden können.If the FSM encoder is reset, the buffer register will be 1501 , the counting register 1506 and the next register 1508 all initialized. In one embodiment, these registers are initialized to zero. It is noteworthy that the registers 1501 . 1506 and 1508 can be realized as other types of storage devices.
Im
folgenden ist eine beispielhafte Verilog-HDL-Beschreibung für 15 gegeben.
// Copyright bzw. Urheberrecht
1997 RICOH
// Entpacken der 8-Bit-Kodestrombytes in Kodewörter variabler
Länge
//
data_in muß direkt
zu data_out ausgegeben werden, so daß es sonstwo
// registriert
werden muß The following is an exemplary Verilog HDL description for 15 given.
// Copyright or Copyright 1997 RICOH
// unpack the 8-bit code stream bytes into variable length codewords
// data_in must be output directly to data_out, so it's elsewhere
// must be registered
FSM-Kodierer-SteuerungFSM encoder control
16 ist ein Steuer-Flußdiagramm zum Kodieren. 17 ist das entsprechende Flußdiagramm zum Dekodieren. Die
Steuerung wird durch eine Verarbeitungslogik durchgeführt, bei
der es sich um eine Hardware-Logik, eine Software-Logik oder eine
Kombination aus beiden handeln kann. Bei einer Ausführungsform umfaßt die Verarbeitungslogik
ein Computersystem mit einem oder mehreren Prozessoren, die Instruktionen ausführen. 16 is a control flowchart for coding. 17 is the corresponding flowchart for decoding. Control is performed by processing logic, which may be hardware logic, software logic, or a combination of both. In one embodiment, the processing logic includes a computer system having one or more processors executing instructions.
Nimmt
man Bezug auf 16, so beginnt das Steuerungs-Flußdiagramm
zum Kodieren, indem eine Logik abgearbeitet bzw. verarbeitet wird,
die ein Rücksetzen
bzw. einen Reset durchführt
(Verarbeitungsblock 1601). Nach dem Durchführen des
Resets testet die Verarbeitungslogik, ob das Bit und der Kontext
zum Kodieren fertig sind (Verarbeitungsblock 1602). Falls
das Bit und der Kontext nicht zum Kodieren fertig sind, schreitet
die Verarbeitung beim Verarbeitungsblock 1603 fort, wo
die Verarbeitungslogik nicht eine Freigabeanzeige aktiviert (z.B.
Signal bzw. Signale) und die Verarbeitung verzweigt in Schleifenform
zurück
zu dem Beginn des Verarbeitungsblockes 1602. Falls das
Bit und der Kontext fertigt sind, schreitet die Verarbeitung zum Verarbeitungsblock 1604 fort,
wo die Verarbeitungslogik die Freigabeanzeige aktiviert, um das
Bit zu kodieren.If you take reference 16 Thus, the control flowchart for coding begins by processing a logic that performs a reset or a reset (processing block 1601 ). After performing the reset, the processing logic tests to see if the bit and context for coding are done (processing block 1602 ). If the bit and the context are not ready for encoding, processing proceeds to the processing block 1603 where the processing logic does not enable a release indication (eg, signals) and the processing loops back to the beginning of the processing block 1602 , If the bit and the context are done, processing proceeds to the processing block 1604 where the processing logic activates the enable indicator to encode the bit.
Nach
dem Aktivieren der Freigabeanzeige, testet die Verarbeitungslogik,
ob die Datenausgabe fertig ist (Verarbeitungsblock 1605).
Falls die Datenausgabe fertig ist, handhabt die Verarbeitungslogik
die Ausgangsdaten beim Verarbeitungsblock 1606 und die
Verarbeitung schreitet zum Verarbeitungsblock 1607 fort. Ein
derartiges Handhaben kann die Bereitstellung von Speicher, eines
Kanals, einer Anzeige, einer Verarbeitung oder was sonst immer die
Daten verwendet, beinhalten. Falls die Verarbeitungslogik bestimmt,
daß die Daten
nicht zum Ausgeben fertigt sind, schreitet die Verarbeitung zum
Verarbeitungsblock 1607 fort, wo die Verarbeitungslogik
bestimmt, falls mehr Daten zu kodieren sind. Falls mehr Daten zu
kodieren sind, verzweigt die Verarbeitung zum Verarbeitungsblock 1602 zurück; ansonsten
schreitet die Verarbeitung zum Verarbeitungsblock 1608 fort.After activating the release indicator, the processing logic tests whether the data output is complete (processing block 1605 ). If the data output is done, the processing logic handles the output data at the processing block 1606 and the processing proceeds to the processing block 1607 continued. Such handling may involve the provision of memory, a channel, a display, processing, or whatever else the data uses. If the processing logic determines that the data is not ready to be output, processing proceeds to the processing block 1607 where the processing logic determines if more data is to be encoded. If more data is to be encoded, processing branches to the processing block 1602 back; otherwise, the processing proceeds to the processing block 1608 continued.
Beim
Verarbeitungsblock 1608 aktiviert die Verarbeitungslogik
die Flush-Anzeige bzw. Räum-Anzeige (z.B.
Signal bzw. Signale). Danach testet die Verarbeitungslogik, ob Daten
zur Ausgabe bereit sind (Verarbeitungsblock 1609). Falls die Daten
zur Ausgabe bereit sind, schreitet die Verarbeitung beim Verarbeitungsblock 1610 fort,
wo die Verarbeitungslogik die ausgegebenen Daten handhabt und die
Verarbeitung schreitet zum Verarbeitungsblock 1611 fort.
Falls die Daten nicht zur Ausgabe fertigt sind, schreitet die Verarbeitung
zum Verarbeitungsblock 1611 genauso fort. Beim Verarbeitungsblock 1611 testet
die Verarbeitungslogik, ob ein Räumen
vollständig
ist. Falls das Räumen
nicht vollständig
ist, verzweigt die Verarbeitungslogik zum Verarbeitungsblock 1608 zurück. Falls
das Räumen
vervollständigt
worden ist, endet der Steuerfluß zum
Kodieren., Nimmt man Bezug auf 17,
so beginnt der Steuerungsfluß zum
Dekodieren beim Verarbeitungsblock 1701, wo die Verarbeitungslogik
den FSM-Kodierer zurücksetzt.
Nach dem Zurücksetzen
des FSM-Kodierers testet die Verarbeitungslogik, ob der Kontext
fertig ist und der Kodierer ist zum Dekodieren fertig (Verarbeitungsblock 1702).
Ein Synchronisationssystem ist immer fertig, während ein asynchrones System
Bits von dekodierten Daten anfordert und/oder das System auf kodierte
Daten wartet. Falls der Kontext nicht fertig ist oder der Kodierer
nicht zum Dekodieren fertig ist, schreitet die Verarbeitung beim
Verarbeitungsblock 1703 fort, wo die Verarbeitungslogik
nicht die Freigabeanzeige aktiviert und die Verarbeitung verzweigt
zum Anfang des Verarbeitungsblocks 1702 zurück. Auf
der anderen Seite, falls der Kontext fertig ist und der Dekoder
zum Dekodieren fertig ist, schreitet die Verarbeitung zum Verarbeitungsblock 1704 fort,
wo eine Verarbeitungslogik die Freigabeanzeige aktiviert, um das
Dekodieren des Bits zu beginnen. Nach der Aktivierung der Freigabeanzeige handhabt
die Verarbeitungslogik das Ausgangsbit (Verarbeitungsblock 1705).
Dieses Handhaben kann das Liefern der dekodierten Daten, was auch
immer zu ihrer Verwendung da ist, wie z.B.At the processing block 1608 The processing logic activates the flush display or the clearing display (eg signal or signals). Thereafter, the processing logic tests whether data is ready for output (processing block 1609). If the data is ready for output, processing proceeds to the processing block 1610 where the processing logic handles the output data and processing proceeds to the processing block 1611 continued. If the data is not ready for output, processing proceeds to the processing block 1611 just like that. At the processing block 1611 Tests the processing logic to determine if a room is complete. If flushing is not complete, the processing logic branches to the processing block 1608 back. If the space has been completed, the control flow for coding ends., Reference is made 17 Thus, the control flow for decoding begins at the processing block 1701 where the processing logic resets the FSM encoder. After resetting the FSM encoder, the processing logic tests whether the context is complete and the encoder is ready for decoding (processing block 1702 ). A synchronization system is always ready while an asynchronous system requests bits of decoded data and / or the system waits for encoded data. If the context is not ready or the encoder is not ready for decoding, processing proceeds to the processing block 1703 where the processing logic does not enable the enable indicator and processing branches to the beginning of the processing block 1702 back. On the other hand, if the context is ready and the decoder is ready for decoding, processing proceeds to the processing block 1704 where processing logic activates the enable indicator to begin decoding the bit. After activating the enable display, the processing logic handles the output bit (processing block 1705 ). This handling may be to provide the decoded data, whatever its use, such as
ein
Speicher, ein Kanal, eine Anzeige, Verarbeitung usw., beinhalten.
Nach dem Handhaben des Ausgangsbits testet die Verarbeitungslogik,
ob mehr kodierte Daten benötigt
werden (Verarbeitungsblock 1706). Falls mehr kodierte Daten
benötigt
werden, gibt die Verarbeitungslogik mehr kodierte Daten zu dem Dekoder (Verarbeitungsblock 1707)
und die Verarbeitung schreitet zum Verarbeitungsblock 1708 fort.
Auf der anderen Seite, falls mehr kodierte Daten nicht benötigt werden,
geht die Verarbeitung direkt zum Verarbeitungsblock 1708 über. Beim
Verarbeitungsblock 1708 testet die Verarbeitungslogik,
ob es mehr Daten zum Dekodieren gibt. Falls es mehr Daten zum Dekodieren
gibt, verzweigt die Verarbeitungslogik zum Verarbeitungsblock 1702 zurück. Falls
es nicht mehr zu kodierende Daten gibt, endet der Steuerungsfluß zum Dekodieren.memory, channel, display, processing, etc. After handling the output bit, the processing logic tests whether more encoded data is needed (processing block 1706 ). If more coded data is needed, the processing logic gives more coded data to the decoder (processing block 1707 ) and the processing proceeds to the processing block 1708 continued. On the other hand, if more coded data is not needed, processing goes directly to the processing block 1708 above. At the processing block 1708 tests the processing logic to see if there is more data to decode. If there is more data for decoding, the processing logic branches to the processing block 1702 back. If there is no data to be encoded, the control flow for decoding ends.
Das
Verilog zeigt die Operationen im Detail und beinhaltet ebenso eine
gewisse Initialisierung, die für die
Simulation spezifisch ist.The
Verilog shows the operations in detail and includes one as well
certain initialization for the
Simulation is specific.
Parallelisierung
und Pipeliningparallelization
and pipelining
Die
vorliegende Erfindung Erfindung kann mit einer Parallelisierung
und einem Pipelining bzw. einer Verarbeitung gemäß einer Pipeline realisiert
werden. Beide Verarbeitungsarten erhöhen die maximale Taktgeschwindigkeit
und ermöglichen
ein Kodieren von mehr als 1 Bit pro Taktzyklus. Jedoch ist das Pipelining
und das Parallelisieren durch den Aufwand an Logik hinsichtlich
Rückkopplungsschleifen
erschwert. Der Kontextspeicher und der fsm_state bzw. fsm-Zustand
zusammen mit den Start- und Stopp-Registern muß für jedes Bit vor dem nächsten Kontext
aktualisiert werden. Zum Dekodieren erfordern viele Kontextmodelle
ebenso den Empfang des zuvor dekodierten Bits vor dem nächsten Kontext,
wodurch eine andere Rückkopplungsschleife erzeugt
wird. Diese Rückkopplungsschleifen
erfordern, daß gewisse
Operationen sequentiell sind, wodurch der Parallelismus verkompliziert
wird.The
The present invention can be used with parallelization
and pipelined or pipelined
become. Both types of processing increase the maximum clock speed
and allow
coding more than 1 bit per clock cycle. However, this is pipelining
and parallelism by the amount of logic involved
Feedback loops
difficult. The context memory and the fsm_state or fsm state
along with the start and stop registers must be for each bit before the next context
to be updated. Many context models are required for decoding
as well as receiving the previously decoded bit before the next context,
thereby generating another feedback loop
becomes. These feedback loops
require that certain
Operations are sequential, which complicates the parallelism
becomes.
Bei
einer Ausführungsform
verarbeitet das oben gegebene Hardwaredesign ein Bit pro Taktzyklus.
Andere Kompressionsanwendungen erfordern, daß viele Bits für jedes
Pixel in einem Bild kodiert werden; somit werden viele Taktzyklen
benötigt.
Die aktuelle Anzahl der Taktzyklen pro Komponente eines jeden Pixels
hängt von
der Tiefe des Bildes und dem Bildinhalt ab. Es ist wünschenswert,
entweder mehr als ein Bit pro Takt zyklus zu verarbeiten und/oder
eine Taktrate zu haben, die wesentlich schneller als der Pixeltakt
ist.at
an embodiment
The hardware design given above processes one bit per clock cycle.
Other compression applications require many bits for each
Pixels in a picture are encoded; thus many clock cycles
needed.
The current number of clock cycles per component of each pixel
depends on
the depth of the picture and the picture content. It is desirable
either more than one bit per clock cycle to process and / or
to have a clock rate that is much faster than the pixel clock
is.
Die
vorliegende Erfindung stellt FSM-Kodierer bereit, die einen wahren
Parallelismus aufweisen. Zum Beispiel können zwei Bits (mit zugeordneten
Kontexten) in einem Zyklus kodiert werden. In einem derartigen Fall
erzeugt das Kontextmodell zwei Kontexte parallel. Der Bitstrom,
der Kontextspeicher und der fsm_state bzw. fsm-Zustand und die Start-
und Stopp-Register werden so aktualisiert als ob die zwei Bits sequentiell
kodiert werden würden.
Die Bit-Erzeugungslogik kann modifiziert werden, um zwei PCLASSen
zu handhaben. Dies würde
eine beträchtliche
Zunahme an einer Hardware-Komplexizität erforderlich
machen. Zum Beispiel müßte die
Kodewort-Erzeugungseinheit zwei Aufspalt-Werte bzw. split-Werte
handhaben, wobei sowohl ein Start als auch ein Stopp bewirkt werden,
und müßte bis
zu 16-Bit-Kodewörter
erzeugen. Das gleichzeitige Handhaben von zwei Bits oder mehr könnte vereinfacht
werden, falls nur spezielle Fälle
gehandhabt werden. Der normale Modus einer "ein Bit zu einer Zeit"-Operation würde verwendet
werden, wenn der Spezielfall nicht anwendbar war. Hier gibt es einige
Beispiele:
- • Kodiere
ein Bit in irgendeiner PCLASS und ein Bit nur in PCLASS 0.
- • Kodiere
zwei Bits, beide in PCLASS 0.
- • Kodiere
vier Bits, alle in PCLASS 0.
- • Kodiere
zwei Bits in irgendeiner PCLASS, aber nur wenn im FSM-Zustand 0
begonnen wird.
The present invention provides FSM encoders that have true parallelism. For example, two bits (with associated contexts) can be encoded in one cycle. In such a case, the context model creates two contexts in parallel. The bitstream, context memory and fsm_state or fsm state and the start and stop registers are updated as if the two bits were being coded sequentially. The bit generation logic can be modified to handle two PCLASSs. This would require a significant increase in hardware complexity. For example, the codeword generator would have to handle two split values, causing both a start and a stop, and would have to generate up to 16-bit codewords. Simultaneously handling two bits or more could be simplified if only special cases are handled. The normal mode of a "one bit at a time" operation would be used if the special case was not applicable. Here are some examples: - • Encode a bit in any PCLASS and a bit only in PCLASS 0.
- • Encode two bits, both in PCLASS 0.
- • Encode four bits, all in PCLASS 0.
- • Encode two bits in any PCLASS, but only when starting in FSM state 0.
Die
Hardwarekosten des wahren Parallelismus oder der Kontextmodelle,
die nicht eine parallele Kontexterzeugung erlauben, können einen
wahren Parallelismus unattraktiv machen.The
Hardware costs of true parallelism or contextual models,
which do not allow a parallel context generation, can one
make true parallelism unattractive.
Eine
Alternative zum wahren Parallelismus ist es, unterschiedliche FSM-Kodierer
zu haben, die unterschiedliche Abschnitte des kodierten Bitstroms
unabhängig
verarbeiten.A
Alternative to true parallelism is different FSM encoders
to have the different sections of the encoded bitstream
independently
to process.
Eine
besonders attraktive Option ist es, einen einzigen physikalischen
FSM-Kodierer gemäß einer Pipeline-Verarbeitung
zu betreiben, so daß er
wie verschiedene unabhängige
virtuelle FSM-Kodierer arbeitet. Wenn einmal die Möglichkeiten
zum Pipelining erschöpft
sind, dann können
die FSM-Kodierer (oder die nicht zur Pipeline-Verarbeitung fähigen Abschnitte
von FSM-Kodierern) zur parallelen Verarbeitung repliziert werden.
Es gibt viele Arten, den Bitstrom in Abschnitte zum parallelen Kodieren
aufzuteilen:
- • Für Video können unterschiedliche Frames
bzw. Vollbilder parallel kodiert werden.
- • Das
Bild kann in Platten bzw. Unterteilungen ("tiles ") aufgeteilt werden und unterschiedliche
Platten bzw. Unterteilungen können
parallel kodiert werden.
- • Falls
das Bild mehrere Komponenten aufweist (wie z.B. RGB, CMYK oder YUV),
können
unterschiedliche Komponenten parallel kodiert werden.
- • Es
kann Orte innerhalb einer Unterteilung/Komponente geben, so der
FSM-Kodierer zurückgesetzt
wird, die hierin als Eintrittspunkte bezeichnet werden. Segmente
kodierter Daten, die bei unterschiedlichen Eintrittspunkten starten,
können
parallel kodiert werden. Hinsichtlich Wavelet-Koeffizienten kann es vorteilhaft sein,
eine übliche
Ausrichtung zu verwenden, wie sie in 10 gezeigt
ist. Koeffizienten werden in vier Gruppen gleicher Größe unterteilt
(da die DS1-, SD1-
und DD1-Frequenzbänder jeweils ein Viertel der
Gesamtzahl der Koeffizienten sind). (Eine gleiche Größe bedeutet
eine gleiche Anzahl von Koeffizienten, wohingegen die Anzahl der
Gesamtbits oder der gesamten binären
Entscheidungen in jeder Gruppe unterschiedlich sein können). Niveaus
anders als 1 können
in einer normalisierten oder pyramidalen Art und Weise ausgerichtet
werden. Falls nur ein paralleles Kodieren gewünscht ist, können Kontexte
parallel erzeugt werden. Zum parallelen Dekodieren benötigt das
Kontextmodell nicht Daten, die noch nicht dekodiert sind. Zur Ausrichtung gemäß 10 kann das Kodieren der Niveau-1-Koeffizienten
ohne Konditionierung der Eltern bzw. der Mütter ("parents") notwendig sein.
A particularly attractive option is to pipeline a single physical FSM encoder so that it operates like several independent FSM virtual encoders. Once the pipelining capabilities are exhausted, then the FSM encoders (or non-pipelined portions of FSM encoders) can be replicated for parallel processing. There are many ways to divide the bitstream into sections for parallel coding: - • For video, different frames or frames can be encoded in parallel.
- • The image can be divided into tiles, and different tiles or partitions can be encoded in parallel.
- • If the image has multiple components (such as RGB, CMYK or YUV), different components can be encoded in parallel.
- • There may be places within a subdivision / component to reset the FSM encoder, referred to herein as entry points. Segments of coded data starting at different entry points can be coded in parallel. With regard to wavelet coefficients, it may be advantageous to use a common orientation, as in 10 is shown. Coefficients are divided into four groups of equal size (since the DS 1 , SD 1 , and DD 1 frequency bands are each one quarter of the total number of coefficients). (An equal size means an equal number of coefficients, whereas the number of total bits or the total binary decisions in each group may be different). Levels other than 1 can be aligned in a normalized or pyramidal manner. If only parallel coding is desired, contexts can be generated in parallel. For parallel decoding, the context model does not need data that has not yet been decoded. For alignment according to 10 coding the level 1 coefficients without parental conditioning may be necessary.
Um
einen hohen Grad an Parallelismus zu erzielen, können verschiedene der obigen
Wege zum Teilen der Daten bei derselben Implementation verwendet
werden. Unglücklicherweise
begrenzen alle diese Wege die Flexibilität in gewisser Weise, um eine
hohe Geschwindigkeit zu erzielen. Ein einzelnes Bild mit einer einzigen
Platte bzw. Unterteilung ("tile"), eine einzige Komponente
und keine Eintrittspunkte (abgesehen von dem Start der kodierten
Daten für
die Unterteilung bzw. die Platte) können nicht parallel kodiert
werden.Around
To achieve a high degree of parallelism, various of the above can be used
Ways to share the data used in the same implementation
become. Unfortunately
all of these ways limit flexibility in some ways to one
to achieve high speed. A single picture with a single one
Plate or subdivision ("tile"), a single component
and no entry points (apart from the start of the coded
Data for
the subdivision or the plate) can not be coded in parallel
become.
Es
gibt verschiedene Stellen, wo der FSM-Kodierer in Pipeline-Stufen
aufgebrochen werden kann, z.B. die folgenden:
- • zwischen
dem Kontextmodell und dem FSM-Kodierer,
- • nach
dem Kontextspeicher,
- • nach
der Wahrscheinlichkeitszustands-Ausdehnung,
- • nach
der Erzeugung des sel-Wertes,
- • nach
der Zustandsausdehnung.
There are several places where the FSM encoder can be broken down into pipeline stages, such as the following: - Between the context model and the FSM encoder,
- • after the context memory,
- • after the probability state expansion,
- After the generation of the sel value,
- • after state expansion.
Um
einen gültigen
Wavelet-Kodestrom zu erzeugen, wenn mehrere unabhängige FSM-Kodierer verwendet
werden, werden die kodierten Daten neu geordnet. Die Ausgabe von
einem jeden Kodierer wird unabhängig
gepuffert, wenn kodiert wird. Nachdem das Kodieren vollendet ist,
werden die Puffer zu dem Kodestrom bei den korrekten Plätzen ausgegeben.
Zum Dekodieren greift jeder Kodierer auf einen unterschiedlichen
Abschnitt des Kodestroms zu.Around
a valid one
Wavelet code stream when using multiple independent FSM encoders
will be rearranged the coded data. The issue of
Each encoder becomes independent
buffered when encoding. After the coding is completed,
the buffers are output to the code stream at the correct locations.
For decoding, each encoder uses a different one
Section of the code stream too.
In
der vorstehenden Beschreibung bedeutet die "variable Längenverschiebung von Bytes" ("variable length shifting
of bytes"), daß die Bits
innerhalb der Bytes verschoben wer den. Dies wird auch manchmal "barrel shifting" bzw. "Multipositionsverschiebung" bzw. "Binärstellenverschiebung" genannt.In
In the foregoing description, the "variable length shifting of bytes" means
of bytes ") that the bits
moved within the bytes who the. This is sometimes called "barrel shifting" or "bin shifting".
Bei
der obigen Beschreibung und in den Ansprüchen umfaßt der Begriff "höchstwertige Bits" die Bits mit höchster Wertigkeit,
beginnend mit dem höchstwertigen
Bit. Bei einem Byte (8 Bits) mit den Bits 7, 6, 5, 4, 3, 2, 1, 0
ist z.B. das höchstwertige
Bit das Bit 7. Die zwei höchstwertigen
Bits sind die Bits 6 und 7. Die drei höchstwertigen Bits sind die
Bits 5, 6, und 7, die vier höchstwertigen
Bits sind die Bits 4, 5, 6 und 7 und die fünf höchstwertigen Bits sind die
Bits 3, 4, 5, 6 und 7 usw.at
In the description above and in the claims, the term "most significant bits" includes the most significant bits,
starting with the highest value
Bit. For one byte (8 bits) with bits 7, 6, 5, 4, 3, 2, 1, 0
is e.g. the most significant
Bit the bit 7. The two most significant ones
Bits are bits 6 and 7. The three most significant bits are the
Bits 5, 6, and 7, the four most significant
Bits are bits 4, 5, 6, and 7, and the five most significant bits are
Bits 3, 4, 5, 6 and 7 etc.
Bei
dem Endpunkt eines Intervalls, wie z.B. im Anspruch 1 beansprucht,
kann es sich um eine Bitfolge, wie z.B. eine binäre Informationseinheit handeln.
Als Beispiel für
eine binäre
Informationseinheit kann man z.B. ein Byte heranziehen. Betrachte
man also z.B. zwei Bytes A und B als Endpunkte eines Unterintervalls
und sei A[7] das Bit 7 von A. Bedeutet "! =",
daß die
Bits nicht übereinstimmen,
wobei ein Bit nur den Wert 1 oder 0 haben kann, so gilt bei dem
Vergleich des Anfangspunktes und des Endpunktes eines Unterintervalls
(insbesondere gemäß Anspruch
1), das folgende:
- Falls A[7] ! = B[7], dann stimmen keine
Bits überein.
- Falls dies nicht gilt und falls A[6] ! = B[6], dann stimmt ein
Bit, nämlich
das Bit 7 überein.
- Falls dies nicht gilt und falls A[5] ! = B[5], dann stimmen
zwei Bits überein,
nämilich
das Bit 6 und das Bit 7.
- Falls dies nicht gilt und falls A[4] ! = B[4], dann stimmen
drei Bits überein,
nämlich
das Bit 5, 6 und 7, usw.
The endpoint of an interval, as claimed in claim 1 for example, may be a bit string, such as a binary information unit. As an example of a binary information unit you can use eg a byte. For example, consider two bytes A and B as endpoints of a subinterval, and let A [7] be the 7th bit of A. If "! =" Means that the bits do not match, and one bit can only have the value 1 or 0, then when comparing the starting point and the end point of a subinterval (in particular according to claim 1), the following applies: - If A [7]! = B [7], then no bits match.
- If not, and if A [6]! = B [6], then one bit, namely bit 7, is the same.
- If this is not true and if A [5]! = B [5], then two bits match, namely bit 6 and bit 7.
- If this is not true and if A [4]! = B [4], then three bits match, namely bits 5, 6 and 7, etc.
Es
erfolgt also ein Vergleich der Bits der Endpunkte A und B in der
Reihenfolge ihrer Wertigkeit, beginnend mit dem höchstwertigen
Bit, wobei eine Übereinstimmung
nur bis zu dem ersten nicht übereinstimmenden
Bit festgestellt wird (siehe auch das Verilog im Zusammenhang mit
der 13).Thus, a comparison is made of the bits of the endpoints A and B in the order of their significance, starting with the most significant bit, where a match is detected only up to the first mismatched bit (see also the Verilog in connection with US Pat 13 ).
Nimmt
man z.B. an, daß A
gleich "10101010" ist und B gleich "10111011" ist, wobei die Reihenfolge "höchstwertiges Bit ... niedrigstwertiges
Bit" lautet, dann
stimmen die drei höchstwertigen
Bits (7, 6, 5) überein. Das
erste nicht übereinstimmende
Bit ist das Bit 4. Die übereinstimmenden
Bits lauten "101", die sowohl mit A[7..5]
als auch mit B [7..5] übereinstimmen,
da sie gleich sind. Die drei übereinstimmenden
Bits "101" werden während des
Kodierens ausgegeben. Die nicht übereinstimmenden
Bits von A lauten "01010" und die nicht übereinstimmenden
Bits von B lauten "11011". Die nicht übereinstimmenden
Bits werden insbesondere verwendet, um neue Endpunkte zu gestalten
(wobei sie zu den höchstwertigen
Bits bewegt werden): "01010" wird zu "01010..." wird zu "01010000"; und "11011" wird zu "11011..." und wird zu "11011111".takes
one e.g. that A
is equal to "10101010" and B is equal to "10111011", where the order is "most significant bit ... least significant
Bit "is, then
agree the three most significant ones
Bits (7, 6, 5) match. The
first mismatched
Bit is the 4th bit. The matching ones
Bits are "101", both with A [7..5]
as well as agree with B [7..5],
since they are the same. The three matching
Bits "101" are used during the
Coding output. The mismatched
Bits of A are "01010" and the mismatches
Bits of B are "11011". The mismatched
In particular, bits are used to create new endpoints
(being among the highest
Bits are moved): "01010" becomes "01010 ..." becomes "01010000"; and "11011" becomes "11011 ..." and becomes "11011111".
Die
Erfindung läßt sich
insbesondere wie folgt zusammenfassen:
Eine FSM-Kodier-Hardware
wird beschrieben. Bei einer Ausführungsform
liefert die vorliegende Erfindung ein Verfahren zum Kodieren, das
die Erzeugung eines Intervalls basierend auf einem Finalautomaten-(FSM)-Zustand
beinhaltet. Das Intervall umfaßt
ein Paar von Unterintervallen, die Endpunkte haben. Das Verfahren
enthält
ebenso das Auswählen
eines der Paare von Unterintervallen basierend. darauf, ob das Eingangsbit
in einem höchstwahrscheinlichen
Zustand ist, und das Ausgeben von null oder mehr Bits, und zwar
entsprechend Bits, die zwischen Endpunkten des einen Unterintervalls übereinstimmen,
die von den höchstwahrscheinlichen Bits
zu und nicht einschließlich
zu den ersten nicht übereinstimmenden
Bits zwischen den Endpunkten des einen Unterintervalles auftreten.The invention can be summarized in particular as follows:
An FSM coding hardware is described. In one embodiment, the present invention provides a method of encoding that allows the generation of an interval based on a Finisher (FSM) approach stand included. The interval includes a pair of subintervals that have endpoints. The method also includes selecting one of the pairs of subintervals based. whether the input bit is in a most probable state, and outputting zero or more bits, corresponding to bits that match between endpoints of the one subinterval, from the most probable bits to, and not including, the first mismatching bits between the two Endpoints of a subinterval occur.
Hiermit
wird der Inhalt der deutschen Anmeldungen 198 44 752.3-31 und 198
19 405.6-31 sowie 196 26 600.9-31 durch Bezugnahme in die vorliegende
Anmeldung mit aufgenommen.Herewith
becomes the content of the German applications 198 44 752.3-31 and 198
19 405.6-31 and 196 26 600.9-31 by reference in the present
Registration included.