NL1001317C2 - Method and device for encoding and decoding data. - Google Patents
Method and device for encoding and decoding data. Download PDFInfo
- Publication number
- NL1001317C2 NL1001317C2 NL1001317A NL1001317A NL1001317C2 NL 1001317 C2 NL1001317 C2 NL 1001317C2 NL 1001317 A NL1001317 A NL 1001317A NL 1001317 A NL1001317 A NL 1001317A NL 1001317 C2 NL1001317 C2 NL 1001317C2
- Authority
- NL
- Netherlands
- Prior art keywords
- data
- memory
- codeword
- code
- bit
- Prior art date
Links
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4006—Conversion to or from arithmetic code
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
- H04N19/436—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/13—Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/60—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
- H04N19/91—Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Image Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Compression Of Band Width Or Redundancy In Fax (AREA)
Description
Werkwijze en inrichting voor het coderen en decoderen van data.Method and device for encoding and decoding data.
Terrein van de uitvindingField of the invention
De onderhavige uitvinding heeft betrekking op het terrein van de 5 datacompressie- en -decompressiestelsels en in het bijzonder heeft de onderhavige uitvinding betrekking op een werkwijze en inrichting voor het parallel coderen en decoderen van data in compressie/decompressie-stelsels.The present invention relates to the field of the data compression and decompression systems and in particular the present invention relates to a method and apparatus for encoding and decoding data in compression / decompression systems in parallel.
10 Achtergrond van de uitvindingBackground of the invention
Op dit moment wordt datacompressie algemeen gebruikt, in het bijzonder voor het opslaan en overdragen van grote hoeveelheden data. In de stand der techniek bestaan er vele verschillende datacompressie-technieken. Compressietechnieken kunnen worden verdeeld in twee brede 15 categorieën, niet-verliesvrije codering en verliesvrije codering.Currently, data compression is widely used, especially for storing and transferring large amounts of data. In the prior art, many different data compression techniques exist. Compression techniques can be divided into two broad 15 categories, lossless encoding and lossless encoding.
Niet-verliesvrije codering heeft betrekking op codering die resulteert in het verlies van informatie, zodat er geen garantie is op een perfecte reconstructie van de oorspronkelijke data. In verliesvrije compressie wordt alle informatie behouden en wordt de data gecomprimeerd 20 op een wijze die een perfecte reconstructie mogelijk maakt.Non-lossless encoding refers to encoding that results in the loss of information, so there is no guarantee of a perfect reconstruction of the original data. In lossless compression, all information is retained and the data is compressed in a manner that allows perfect reconstruction.
In verliesvrije compressie worden ingangssymbolen geconverteerd naar uitgangscodewoorden. Als de compressie succesvol is dan worden de codewoorden vertegenwoordigd door minder bits dan het aantal ingangssymbolen. Verliesvrije codeerwerkwijzen zijn onder andere dictionair-25 codeerwerkwijzen (bijvoorbeeld Lempel-Ziv), runlengtecodering, enume-ratieve codering en entropiecodering.In lossless compression, input symbols are converted to output codewords. If the compression is successful, the code words are represented by fewer bits than the number of input symbols. Lossless encoding methods include dictionary-encoding methods (eg, Lempel-Ziv), run-length encoding, numeric encoding, and entropy encoding.
Amerikaans octrooischrift US-A-5.138-315 openbaart een inrichting voor het coderen van digitale signalen in codewoorden van variabele lengte, waarbij de originele datastroom opgedeeld wordt in N parallel-30 le paden. Door de parallellisatie kan gebruik worden gemaakt van verschillende coderingsschakelingen die parallel aan elkaar werken, waardoor de codering sneller plaats kan vinden.United States Patent US-A-5,138-315 discloses an apparatus for encoding digital signals into variable length codewords, dividing the original data stream into N parallel-30 paths. The parallelization makes it possible to use different encoding circuits that operate in parallel, so that encoding can take place faster.
Entropiecodering bestaat uit een willekeurige verliesvrije codeer-werkwijze dïe poogt data dicht bij de entropie-grens te comprimeren, 35 gebruikmakend van bekende of geschatte symboolwaarschijnlijkheden. Entropiecodes zijn onder andere de Huffman-codes, aritmetische codes en binaire entropiecodes. Binaire entropiecodeereenheden zijn verliesvrije codeereenheden die alleen werken op binaire (ja/nee) beslissin-Entropy coding consists of an arbitrary lossless coding method which attempts to compress data close to the entropy boundary using known or estimated symbol probabilities. Entropy codes include the Huffman codes, arithmetic codes, and binary entropy codes. Binary entropy encoders are lossless encoders that only work on binary (yes / no) decisions.
1 OU 13 1 7 I1 OU 13 1 7 I
2 gen, dikwijls uitgedrukt· als het meest waarschijnlijke symbool (MPS) en het minst waarschijnlijke symbool (LPS). Voorbeelden van binaire entropiecodeereenheden zijn onder andere de Q-codeereenheid van IBM en een codeereenheid die bekend staat als de B-codeereenheid. Voor meer 5 informatie omtrent de B-codeereenheid wordt verwezen naar het US-oc-trooi 5.272.478, getiteld "Method and Apparatus for Entropy Coding", (J.D. Allen), verleend op 21 december 1993 en overgedragen aan de houder van de onderhavige aanvrage. Ook wordt verwezen naar M.J. Gormish en J.D. Allen, "Finite State Machine Binary Entropy Coding", 10 abstract in Proc. Data Compression Conference, 30 maart 1993. Snowbird, UT, biz. 449· De B-codeereenheid is een binaire entropie-codeereenheid die voor de compressie gebruik maakt van een eindige toestandenmachine.2 gene, often expressed as the most likely symbol (MPS) and the least likely symbol (LPS). Examples of binary entropy encoders include IBM's Q encoder and an encoder known as the B encoder. For more information regarding the B encoder, reference is made to US Patent 5,272,478 entitled "Method and Apparatus for Entropy Coding" (JD Allen), issued December 21, 1993 and assigned to the holder of the present application. Reference is also made to M.J. Gormish and J.D. Allen, "Finite State Machine Binary Entropy Coding", 10 abstract in Proc. Data Compression Conference, March 30, 1993. Snowbird, UT, biz. 449 · The B encoder is a binary entropy encoder that uses a finite state machine for compression.
Figuur 1 toont een blokdiagram van een bekend compressie- en 15 decompressiestelsel gebruikmakend van een binaire entropiecodeereen-heid. Voor het coderen wordt data ingevoerd in het contextmodel (CM) 101. CM 101 vertaalt de ingangsdata in een groep of reeks van binaire beslissingen en levert de context-bin voor elke beslissing. Zowel de reeks van binaire beslissingen als de bijbehorende context-bins worden 20 afgegeven vanaf de uitgang van de CM 101 naar de waarschijnlijkheid-schattingsmodule (PEM) 102. PEM 102 ontvangt elke context-bin en genereert een waarschijnlijkheidsschatting voor elke binaire beslissing. De actuele waarschijnlijkheidsschatting wordt kenmerkend vertegenwoordigd door een klasse, aangeduid als de P-klasse. Elke P-klasse wordt 25 gebruikt voor een reeks van waarschijnlijkheden. PEM 102 bepaalt ook of de binaire beslissing (resultaat) al of niet in zijn meest waarschijnlijke toestand verkeert (d.w.z. of de beslissing correspondeert met de MPS). De bitstroomgenerator (BG) module 103 ontvangt de waarschi jnlijkheidsschatting (d.w.z. de P-klasse) en de vaststelling of de 30 binaire beslissing al dan niet aannemelijk was als ingangssignaal. In responsie daarop produceert de BG-module 103 een gecomprimeerde data-stroom door nul of meer bits af te geven aan de uitgang als representatie van de oorspronkelijke ingangsdata.Figure 1 shows a block diagram of a known compression and decompression system using a binary entropy coding unit. For encoding, data is input into the context model (CM) 101. CM 101 translates the input data into a group or series of binary decisions and provides the context bin for each decision. Both the sequence of binary decisions and the associated context bins are output from the output of the CM 101 to the probability estimation module (PEM) 102. PEM 102 receives each context bin and generates a probability estimate for each binary decision. The current probability estimate is typically represented by a class, referred to as the P class. Each P class is used for a range of probabilities. PEM 102 also determines whether or not the binary decision (result) is in its most likely state (i.e., whether the decision corresponds to the MPS). The bitstream generator (BG) module 103 receives the probability estimate (ie the P class) and the determination whether or not the binary decision was plausible as an input signal. In response, the BG module 103 produces a compressed data stream by delivering zero or more bits to the output as a representation of the original input data.
Voor het decoderen levert CM 104 een context-bin aan PEM 105 en 35 PEM IO5 levert de waarschijnlijkheidsklasse (P-klasse) aan de BG-module 106 gebaseerd op de context-bin. BG-module 106 is aangesloten voor ontvangst van de waarschijnlijkheidsklasse. In responsie op de waarschijnlijkheidsklasse en de gecomprimeerde data stuurt de BG-module mni3l7 ' 3 106 een bit terug dat aangeeft of de binaire beslissing (d.w.z. de gebeurtenis) in zijn meest waarschijnlijke toestand verkeert. PEM 105 ontvangt dit bit, update de waarschijnlijkheidsschatting gebaseerd op het ontvangen bit en stuurt het resultaat terug naar CM 10¾. CM 10¾ 5 ontvangt het terugkerende bit en gebruikt het teruggekeerde bit om de oorspronkelijke data te genereren en de context-bin te updaten voor de eerstvolgende binaire beslissing.For decoding, CM 104 supplies a context bin to PEM 105 and 35 PEM IO5 supplies the probability class (P class) to the BG module 106 based on the context bin. BG module 106 is connected to receive the probability class. In response to the probability class and the compressed data, the BG module mni3l7 '3 106 returns a bit indicating whether the binary decision (i.e. the event) is in its most probable state. PEM 105 receives this bit, updates the probability estimate based on the received bit and returns the result to CM 10¾. CM 10¾ 5 receives the return bit and uses the return bit to generate the original data and update the context bin for the next binary decision.
Een probleem met decoders die gebruik maken van binaire entropie-codes, zoals de Q-codeereenheid van IBM en de B-codeereenheid, is dat 10 ze langzaam zijn, zelfs wanneer ze in hardware worden geïmplementeerd.One problem with decoders using binary entropy codes, such as IBM's Q encoder and B encoder, is that they are slow even when implemented in hardware.
Hun werking vereist een enkele grote langzame teruggekoppelde lus. Om het decodeerproces te herformuleren maakt het contextmodel gebruik vein eerdere gedecodeerde data teneinde een context te produceren. De waar-schijnlijkheid-schattingmodule gebruikt de context voor het produceren 15 van een waarschijnlijkheidsklasse. De bitstroomgenerator gebruikt de waarschijnlijkheidsklasse en de gecomprimeerde data om vast te stellen of het volgende bit het aannemelijke of niet aannemelijke resultaat is. De waarschijnlijkheid-schattingsmodule gebruikt het aanneme-lijk/niet-aannemelijk resultaat om een resultaatbit te produceren (en 20 de waarschijnlijkheidsschatting voor de context te updaten). Het re sultaatbit wordt door het contextmodel gebruikt om zijn geschiedenis van eerdere data te updaten. Al deze stappen zijn nodig voor het decoderen van één enkel bit. Hoewel het contextmodel moet wachten totdat het resultaatbit zijn geschiedenis heeft ge-updated voordat het de 25 volgende context kan verschaffen moet de decodering van het volgende bit wachten. Het is wenselijk om de noodzaak, te moeten wachten op de voltooiing van de teruggekoppelde lus vóór het decoderen van het volgende bit te vermijden. Met andere woorden, het is wenselijk om meer dan één bit of codewoord per keer te decoderen teneinde de snelheid 30 waarmee gecomprimeerde data wordt gedecodeerd te verhogen.Their operation requires a single large slow feedback loop. To reformulate the decoding process, the context model uses previous decoded data to produce a context. The probability estimation module uses the context to produce a probability class. The bitstream generator uses the probability class and the compressed data to determine whether the next bit is the plausible or not plausible result. The probability estimation module uses the plausible / implausible result to produce a result bit (and update the probability estimate for the context). The result bit is used by the context model to update its history of previous data. All of these steps are required to decode a single bit. Although the context model must wait until the result bit has updated its history before it can provide the next context, the decoding of the next bit must wait. It is desirable to avoid the need to wait for the feedback loop to complete before decoding the next bit. In other words, it is desirable to decode more than one bit or codeword at a time to increase the rate at which compressed data is decoded.
Een ander probleem met decodeereenheden die gebruik maken van binaire entropiecodes is dat data met variabele lengte moet worden verwerkt. In de meeste stelsels 'hebben de te decoderen codewoorden variabele lengten. Als alternatief coderen andere stelsels symbolen 35 met variabele lengte (niet-gecodeerde data). Bij het verwerken van data met variabele lengte is het noodzakelijk om de data op het bit-niveau door te schuiven teneinde de correcte volgende data te verschaffen voor de decodeer- of codeeroperatie. Deze bitniveau-manipula- 1001317 i it ties op de datestroom kunnen kostbare en/of langzame hardware en/of software vereisen. Verder vereisen de stelsels uit de stand der techniek dat dit doorschuiven wordt uitgevoerd in tijd-kritische terugkoppellussen die de prestaties van de decodeereenheid beperken. Het zou 5 eveneens van voordeel zijn de bitniveau-manipulatie van de datastroom uit de tijd-kritische terugkoppellussen weg te nemen, zodat parallellisatie kan worden gebruikt voor het verhogen van de snelheid.Another problem with decoders using binary entropy codes is that variable length data must be processed. In most systems, the codewords to be decoded have variable lengths. Alternatively, other systems encode variable length symbols (unencoded data). When processing variable length data, it is necessary to pass the data at the bit level to provide the correct subsequent data for the decoding or encoding operation. These bit level manipulations on the data stream may require expensive and / or slow hardware and / or software. Furthermore, prior art systems require this pass-through to be performed in time-critical feedback loops that limit the performance of the decoder. It would also be advantageous to remove the bit level manipulation of the data stream from the time critical feedback loops so that parallelization can be used to increase the speed.
De onderhavige uitvinding verschaft een verliesvrij compressie- en decompressiestelsel. De onderhavige uitvinding verschaft ook een in 10 werkelijke tijd functionerende codeereenheid en een in werkelijke tijd functionerende decodeereenheid die parallel de data coderen respectievelijk decoderen. De codeereenheid en decodeereenheid volgens de onderhavige uitvinding creëren een gebalanceerd parallel entropiestelsel dat zowel codering in werkelijke tijd als decodering in werkelijke 15 tijd uitvoert in hardware die werkt met hoge snelheid en weinig kost.The present invention provides a lossless compression and decompression system. The present invention also provides a real-time encoding unit and a real-time decoding unit which encode and decode the data in parallel. The encoder and decoder of the present invention create a balanced parallel entropy system that performs both real-time and real-time decoding in high-speed, low-cost hardware.
Beknopte beschrijving van de uitvindingBrief description of the invention
De uitvinding betreft in één aspect een werkwijze voor het coderen van een datastroom omvattende de volgende stappen: het genereren van 20 codewoord-informatie als representatie van de datastroom in responsie op de datastroom, waarin de codewoord-informatie een aantal codewoorden omvat en waarin verder meerdere- codewoorden worden gegenereerd uit de data van de datastroom die parallel wordt verwerkt; het genereren van gecodeerde data in responsie op de codewoord-informatie, geken-25 merkt doordat de stap voor het genereren van de gecodeerde data inhoudt dat elk van het aantal codewoorden in de codewoord-informatie zodanig wordt afgegeven dat de volgorde van codewoorden aan de uitgang gebaseerd is op het begin van het gedeelte van de datastroom die door elke codewoord wordt gerepresenteerd.The invention relates in one aspect to a method for encoding a data stream comprising the following steps: generating codeword information as a representation of the data stream in response to the data stream, wherein the codeword information comprises a number of codewords and in which further several code words are generated from the data of the data stream which is processed in parallel; generating coded data in response to the codeword information, characterized in that the coded data generating step means that each of the plurality of codewords in the codeword information is output such that the sequence of codewords is output is based on the beginning of the portion of the data stream represented by each codeword.
30 In een ander aspect betreft de uitvinding een codeerstelsel voor het coderen van een datastroom, welke codeerstelsel omvat een codeereenheid aangesloten voor ontvangst van de datastroom teneinde codewoord-informatie met inbegrip van· codewoorden te genereren en waarin verder meerdere codewoorden door de codeereenheid worden gegenereerd 35 uit data die parallel wordt verwerkt; en een herschikkingseenheid gekoppeld met de codeereenheid voor het genereren van gecodeerde data in responsie op de codewoord-informatie, met het kenmerk dat de herschikkingseenheid de door de codeereenheid gegenereerde codewoordenIn another aspect, the invention relates to an encoding system for encoding a data stream, the encoding system comprising an encoder connected to receive the data stream in order to generate codeword information including codewords and wherein further codewords are generated by the encoder. from data that is processed in parallel; and a rearrangement unit coupled to the encoder to generate coded data in response to the codeword information, characterized in that the rearrangement unit is the codewords generated by the encoder
10 0 13 1 T10 0 13 1 T
5 herschikt in een decodeervolgorde zodanig dat de volgorde van de codewoorden aan de uitgang gebaseerd is op het begin van het gedeelte van de datestroom dat door elk codewoord wordt gerepresenteerd.5 rearranged in a decoding order such that the order of the output codewords is based on the beginning of the portion of the data stream represented by each codeword.
Een verder aspect van de uitvinding betreft een decodeerstelsel 5 voor decodering van een datastroom met een aantal codewoorden, die gegenereerd is door een codeerstelsel volgens de uitvinding, waarbij het decodeerstelsel een entropie-decoder is, omvattende: een aantal bitstroomgeneratoren voor het ontvangen van de datastroom; en een toestandstabel die gekoppeld is met het aantal bitstroomgenerato-10 ren teneinde een waarschijnlijkheidsschatting te verschaffen aan het aantal bitstroomgeneratoren, waarbij het aantal bitstroomgeneratoren een gedecodeerd resultaat genereert voor elk codewoord in de datastroom in responsie op de waarschijnlijkheidsschatting gebruikmakend van een Rn(k) code voor meerdere waarden van n, en waarin verder de 15 toestandstabel voorzien is van een eerste aantal toestemden en een tweede aantal toestanden, waarbij overgangen tussen verschillende codes in het eerste aantal toestanden sneller zijn bij overgemgen in het eerste aantal toestanden dan overgangen tussen codes bij overgang in het tweede aantal toestanden.A further aspect of the invention relates to a decoding system 5 for decoding a data stream with a number of codewords generated by an encoding system according to the invention, the decoding system being an entropy decoder, comprising: a number of bitstream generators for receiving the data stream ; and a state table coupled to the number of bitstream generators to provide a probability estimate to the number of bitstream generators, the number of bitstream generators generating a decoded result for each code word in the data stream in response to the probability estimate using an Rn (k) code for multiple values of n, and wherein the state table further includes a first number of permissions and a second number of states, with transitions between different codes in the first number of states being faster when merged into the first number of states than transitions between codes on transition in the second number of states.
20 In een i/erder aspect betreft de uitvinding een decodeerstelsel voor decodering van een datastroom met een aantal codewoorden, die gegenereerd is door een codeerstelsel volgens de uitvinding, waarbij het decodeerstelsel omvat: een verschuiver voor ontvangst van de datastroom en voor het afgeven van correct uitgelijnde gecodeerde data; 25 een runlengte-decoder gekoppeld met de verschuiver voor ontvangst van de correct uitgelijnde gecodeerde data als codewoorden voor het vaststellen van het codewoordtype; een waarschijnlijkheid-schattingsma-chine gekoppeld met de runlengte-decoder teneinde de code voor de runlengte-decoder vast te stellen zodanig dat de runlengte-decoder een 30 runlengte genereert alsmede een indicatie of de LPS in responsie op elk codewoord is opgetreden; waarbij de verschuiver een ver-schuivingsmechanisme met variabele lengte omvat voor het verschuiven van codewoorden uit de datastroom;* en een aantal registers aangesloten voor ontvangst van codewoorden uit de datastroom in responsie op het 35 verschuivingsmechanisme zodanig dat de uitgelijnde gecodeerde data wordt afgegeven als een reeks van codewoorden.In a further aspect, the invention relates to a decoding system for decoding a data stream with a number of codewords, which is generated by an encoding system according to the invention, the decoding system comprising: a shifter for receiving the data stream and for delivering correct aligned coded data; 25 a run-length decoder coupled to the shifter for receiving the properly aligned coded data as codewords for determining the codeword type; a probability estimator coupled to the run-length decoder to determine the run-length decoder code such that the run-length decoder generates a run-length and an indication as to whether the LPS has occurred in response to each code word; the shifter comprising a variable-length shift mechanism for shifting codewords from the data stream; * and a plurality of registers connected for receiving codewords from the data stream in response to the shift mechanism such that the aligned coded data is output as a sequence of code words.
Een verder aspect van de uitvinding betreft een decodeerstelsel voor decodering van een datastroom met een aantal codewoorden, die 1001317 6 gegenereerd is door een codeerstelsel volgens één van de conclusies 28 tot en met 52, waarbij het decodeerstelsel omvat: een FIFO-structuur bestemd voor ontvangst van de data; een contextmodel voor het leveren van contexten; een geheugen gekoppeld met het contextmodel voor opslag 5 van status-informatie, waarbij het geheugen status-informatie verschaft in responsie op elke context die door het contextmodel wordt geleverd; een aantal decoders bestemd voor ontvangst van gecodeerde data uit de FIFO-structuur en het geheugen voor het decoderen van door de FIFO-structuur geleverde codewoorden gebruikmakend van status-in-10 formatie uit het geheugen, waarbij het aantal decoders runtellingen verschaft die gegenereerd kunnen worden voor een aantal codes.A further aspect of the invention relates to a decoding system for decoding a data stream with a number of codewords, which is generated by a coding system according to any one of claims 28 to 52, wherein the decoding system comprises: a FIFO structure intended for reception of the data; a context model for delivering contexts; a memory coupled to the context model for storing status information 5, the memory providing status information in response to each context provided by the context model; a number of decoders intended to receive coded data from the FIFO structure and the memory for decoding codewords supplied by the FIFO structure using status-in-10 formation from the memory, the number of decoders providing run counts that can be generated for some codes.
Een verder aspect van de uitvinding betreft een decodeerstelsel voor decodering van een datastroom met een aantal codewoorden, die gegenereerd is door een codeerstelsel volgens één van de conclusies 78 15 tot en met 8l, waarbij het decodeerstelsel omvat: een contextmodel voor het verschaffen van een context-bin; een geheugen gekoppeld met het contextmodel teneinde een waarschijnlijkheidsstatus te verschaffen gebaseerd op de context-bin; een met het geheugen gekoppelde logica voor het genereren van een waarschijnlijkheidsklasse gebaseerd op de 20 waarschijnlijkheidstoestand; een decoder gekoppeld met de logica voor het genereren van een vrijgeefsignaal gebaseerd op de waarschijnlijkheidsklasse; een aantal bitgeneratoren gekoppeld met de decoder en aangesloten voor ontvangst van de gecodeerde data waarbij elk van het aantal bitgeneratoren bestemd is voor ten minste één onderscheiden 25 code, waarin de decoder één van het aantal bitgeneratoren vrijgeeft gebaseerd op de waarschijnlijkheidsklasse zodanig dat de genoemde ene van het aantal bitstroomgeneratoren de gecodeerde data decodeert.A further aspect of the invention relates to a decoding system for decoding a data stream with a number of codewords, generated by an encoding system according to any one of claims 78 to 8l, wherein the decoding system comprises: a context model for providing a context -bin; a memory coupled to the context model to provide a probability status based on the context bin; a memory coupled logic for generating a probability class based on the probability state; a decoder coupled to the logic for generating a release signal based on the probability class; a plurality of bit generators coupled to the decoder and connected to receive the encoded data, each of the plurality of bit generators being for at least one distinct code, wherein the decoder releases one of the plurality of bit generators based on the probability class such that said one of the number of bitstream generators decode the encoded data.
Een verder aspect van de uitvinding betreft een werkwijze voor het decoderen van ingangsdata, die gecodeerd is met de werkwijze volgens 30 conclusie 82, omvattende de volgende stappen: het verschaffen van een context-bin; het aanspreken van een geheugen gebruikmakend van de context-bin teneinde een waarschijnlijkheidstoestand te verkrijgen; het genereren van een waarschijnlijkheidsklasse gebaseerd op de waarschi jnlijkheidstoestand; het vrijgeven van één van een aantal bitgene-35 retoren, waarbij elk van het aantal bitgeneratoren is toegewezen aan ten minste één onderscheiden code zodanig dat alleen deze ene onderscheiden code wordt gebruikt voor decodering en zodanig dat de genoemde ene uit het aantal bitstroomgeneratoren de gecodeerde data deco- 10013Π 7 deert.A further aspect of the invention relates to a method of decoding input data encoded with the method of claim 82, comprising the steps of: providing a context bin; accessing a memory using the context bin to obtain a probability state; generating a probability class based on the probability state; releasing one of a plurality of bitgenic retors, each of the plurality of bit generators being allocated to at least one distinct code such that only this one distinct code is used for decoding and such that said one from the number of bitstream generators uses the coded data deco 10013Π 7th.
Een verder aspect van de uitvinding betreft een werkwijze voor het decoderen van data gecodeerd met de werkwijze volgens een van de conclusies 1 tot en met 7. welke werkwijze de volgende stappen omvat: 5 het laden van een tellerwaarde in een teller die bij elke runteller behoort, waarbij de tellerwaarde correspondeert met de afmetingen van een codewoordgeheugen dat gebruikt wordt tijdens de codering indien een nieuwe run wordt gestart, welke tellerwaarde wordt geladen indien een nieuw codewoord voor elke runteller wordt opgehaald; het decremen-10 teren van de tellerwaarde telkens wanneer een codewoord is opgehaald; en het terugstellen van de bitgeneratortoestand die behoort bij elk nieuw codewoord indien de teller tot nul is gedecrementeerd.A further aspect of the invention relates to a method of decoding data encoded with the method of any one of claims 1 to 7. which method comprises the following steps: loading a counter value into a counter associated with each run counter the counter value corresponding to the dimensions of a codeword memory used during encoding when a new run is started, said counter value being loaded when a new codeword is retrieved for each run counter; deciding the counter value every time a code word is retrieved; and resetting the bit generator state associated with each new codeword if the counter is decremented to zero.
Een verder aspect van de uitvinding betreft een werkwijze voor het decoderen van data gecodeerd met de werkwijze volgens een van de con-15 clusies 1 tot en met 7, welke werkwijze de volgende stappen omvat: incrementeren van een tellerwaarde telkens wanneer een codewoord gevraagd wordt, waarbij de tellerwaarde een huidige tijdindicatie bevat; opslaan van de tellerwaarde als opgeslagen tijdindicatie indien een eerste codewoord gestart wordt; vergelijken vein de opgeslagen tijdin-20 dicatie plus de afmeting van oen codeergeheugen met de huidige tijdin-dicatie; waarbij de bitgeneratortoestand voor het eerste codewoord wordt teruggesteld en een tweede codewoord gevraagd wordt indien de huidige tijdindicatie groter is dan de opgeslagen tijdindicatie plus de afmeting van het codeergeheugen.A further aspect of the invention relates to a method of decoding data encoded by the method of any one of claims 1 to 7, the method comprising the steps of incrementing a counter value whenever a code word is requested, the counter value containing a current time indication; storing the counter value as a stored time indication if a first code word is started; compare the stored time indication plus the size of an encoding memory with the current time indication; wherein the bit generator state is reset for the first codeword and a second codeword is requested if the current time indication is larger than the stored time indication plus the size of the coding memory.
25 Een verder aspect van de uitvinding betreft een werkwijze voor het decoderen van data gecodeerd met de werkwijze volgens een van de conclusies 1 tot en met 7, welke werkwijze de volgende stappen omvat: opslaan van een index corresponderend met een codewoord, waarbij de index opgeslagen wordt in een wachtrij en de index wordt opgeslagen 30 indien het codewoord gevraagd wordt; markeren van de ingang van de index in de wachtrij als ongeldig; opslaan van het codewoord in de ingang en markeren van de ingang als geldig indien het codewoord voltooid is; afgeven van data uit de te decoderen wachtrij, waarbij het codewoord ter decodering wordt afgegeven indien de wachtrij-ingang 35 geldig is; en afgeven van data uit de wachtrij-ingang en aan de decoder indiceren dat de data geldig is indien de wachtrij-ingang als ongeldig is gemarkeerd bij afgifte van data uit de wachtrij, waarbij de bitgenerator-statusinformatie wordt teruggesteld door de decoder in 1001317 8 responsie op de ontvangst van data indien de wachtrij als ongeldig is gemarkeerd.A further aspect of the invention relates to a method for decoding data encoded with the method according to any one of claims 1 to 7, which method comprises the following steps: storing an index corresponding to a codeword, the index being stored is queued and the index is stored if the codeword is requested; mark the entry of the queued index as invalid; storing the codeword in the entry and marking the entry as valid when the codeword is completed; outputting data from the queue to be decoded, the codeword being output for decoding if the queue input 35 is valid; and outputting data from the queue input and indicating to the decoder that the data is valid if the queue input is marked invalid when outputting data from the queue, the bit generator status information being reset by the decoder in 1001317 8 response on the receipt of data if the queue is marked as invalid.
Een laatste aspect van de uitvinding betreft een decoder voor decodering van een datastroom met een aantal codewoorden, die gegene-5 reerd is door een codeerstelsel volgens één van de conclusies 28 tot en met 52 welke decoder omvat: een contextmodelleermechanisme voor het verschaffen van contexten; een geheugen gekoppeld met het contextmodel voor opslag van statusinformatie waarbij het geheugen statusinformatie verschaft in responsie op elke context die door het contextmodel wordt 10 geleverd; en een aantal decoders gekoppeld met het geheugen voor het decoderen van codewoorden gebruikmakend van statusinformatie uit het geheugen.A final aspect of the invention relates to a decoder for decoding a data stream with a number of codewords, which is generated by an encoding system according to any one of claims 28 to 52, which comprises decoder: a context modeling mechanism for providing contexts; a memory coupled to the context model for storing status information, the memory providing status information in response to each context provided by the context model; and a number of decoders coupled to the memory for decoding codewords using status information from the memory.
Korte beschrijving van de tekeningen 15 De onderhavige uitvinding zal meer volledig worden begrepen uit de onderstaande gedetailleerde beschrijving en uit de begeleidende tekeningen van diverse uitvoeringsvormen van de uitvinding die echter niet moeten worden gezien als beperking van de uitvinding tot specifieke uitvoeringsvormen, maar alleen dienen voor verklaring en een beter 20 begrip.Brief Description of the Drawings The present invention will be more fully understood from the detailed description below and from the accompanying drawings of various embodiments of the invention which, however, are not to be construed as limiting the invention to specific embodiments, but serve only for explanation and a better understanding.
Fig. 1 toont een blokschema van een binaire entropiecodeer- en decodeereenheid uit de stand der techniek.Fig. 1 shows a block diagram of a prior art binary entropy encoding and decoding unit.
Fig. 2A is een blokschema van het decodeerstelsel volgens de onderhavige uitvinding.Fig. 2A is a block diagram of the decoding system of the present invention.
25 Fig. 2B is een blokschema van een uitvoeringsvorm van het codeer stelsel van de onderhavige uitvinding.FIG. 2B is a block diagram of an embodiment of the coding system of the present invention.
Fig. 2C is een blokschema van een uitvoeringsvorm van het decodeerstelsel van de onderhavige uitvinding waarin context-bins parallel worden verwerkt.Fig. 2C is a block diagram of an embodiment of the decoding system of the present invention in which context bins are processed in parallel.
30 Fig. 2D is een blokschema van een uitvoeringsvorm van het deco deerstelsel volgens de onderhavige uitvinding waarmee waarschijnlijk-heidsklassen parallel worden verwerkt.FIG. 2D is a block diagram of an embodiment of the deco system of the present invention with which probability classes are processed in parallel.
Fig. 3 illustreert een niet-ineengeschoven codestroom volgens de onderhavige uitvinding.Fig. 3 illustrates a non-collapsed code stream of the present invention.
35 Fig. 4 illustreert een uitvoeringsvorm van de ineengeschoven code stroom afgeleid uit een voorbeeld-dataset.FIG. 4 illustrates an embodiment of the collapsed code stream derived from an example data set.
Fig. 5 toont een voorbeeld van een waarschijnlijkheid-schattings-tabel en bitstroomgenerator voor de R-codeereenheid volgens de onder- 1001317 9 havige uitvinding.Fig. 5 shows an example of a probability estimation table and bitstream generator for the R encoder according to the present invention.
Fig. 6 is een blokschema van een uitvoeringsvorm van een codeer-eenheid volgens de onderhavige uitvinding.Fig. 6 is a block diagram of an embodiment of an encoder according to the present invention.
Fig. 7 is een blokschema van een uitvoeringsvorm van een bitgene-5 retor volgens de onderhavige uitvinding.Fig. 7 is a block diagram of an embodiment of a bitgenic retor according to the present invention.
Fig. 8 is een blokschema van een uitvoeringsvorm van de herschik-kingseenheid volgens de onderhavige uitvinding.Fig. 8 is a block diagram of an embodiment of the rearrangement unit of the present invention.
Fig. 9 is een blokschema van een uitvoeringsvorm van de runtel-ling-herschikkingseenheid volgens de onderhavige uitvinding.Fig. 9 is a block diagram of an embodiment of the runteling rearrangement unit of the present invention.
10 Fig. 10 is een blokschema van een andere uitvoeringsvorm van de runtelling-herschikkingseenheid volgens de onderhavige uitvinding.FIG. 10 is a block diagram of another embodiment of the run count rearrangement unit of the present invention.
Fig. 11 is een blokschema van een uitvoeringsvorm van de bitpak-eenheid volgens de onderhavige uitvinding.Fig. 11 is a block diagram of an embodiment of the bit pack unit of the present invention.
Fig. 12 is een blokschema van een uitvoeringsvorm van de pakkings-15 logica volgens de onderhavige uitvinding.Fig. 12 is a block diagram of an embodiment of the packing logic of the present invention.
Fig. 13 is een blokschema van een uitvoeringsvorm van de codeer-bitgenerator volgens de onderhavige uitvinding.Fig. 13 is a block diagram of an embodiment of the encoding bit generator of the present invention.
Fig. 14A is een blokschema van een uitvoeringsvorm van het deco-deerstelsel volgens de onderhavige uitvinding.Fig. 14A is a block diagram of an embodiment of the decoding system of the present invention.
20 Fig. l^B is een blokschema van de decodetreenheid volgens de on derhavige uitvinding.FIG. 11B is a block diagram of the decodetronity of the present invention.
Fig. l^C is een blokschema van een uitvoeringsvorm van de FIF0-structuur van de onderhavige uitvinding.Fig. 1C is a block diagram of an embodiment of the FIF0 structure of the present invention.
Fig. 15A illustreert een uitvoeringsvorm van de decodeerpijplijn 25 volgens de onderhavige uitvinding.Fig. 15A illustrates an embodiment of the decoding pipeline 25 of the present invention.
Fig. 15B illustreert een uitvoeringsvorm van de decodeereenheid volgens de onderhavige uitvinding.Fig. 15B illustrates an embodiment of the decoder of the present invention.
Fig. 16a is een blokschema van een uitvoeringsvorm van de door-schuifeenheid volgens de onderhavige uitvinding.Fig. 16a is a block diagram of an embodiment of the slip-through unit of the present invention.
30 Fig. 16B is een blokschema van een andere uitvoeringsvorm van de doorschuifeenheid volgens de onderhavige uitvinding.FIG. 16B is a block diagram of another embodiment of the pass-through unit of the present invention.
Fig. 17 is een blokschema van een stelsel dat een extern context-model heeft.Fig. 17 is a block diagram of a system that has an external context model.
Fig. l8 is een blokschema van een ander stelsel dat een extern 35 contextmodel heeft.Fig. 18 is a block diagram of another system that has an external context model.
Fig. 19 is een blokschema van een uitvoeringsvorm van een decodeereenheid volgens de onderhavige uitvinding.Fig. 19 is a block diagram of an embodiment of a decoder according to the present invention.
Fig. 20 is een blokschema van een uitvoeringsvorm van een deco- 1001317 10 deereenheid met gescheiden bitgeneratoren.Fig. 20 is a block diagram of an embodiment of a decoder 1001317 10 unit with separate bit generators.
Fig. 21 is een blokschema van een uitvoeringsvorm van een bitgene-rator volgens de onderhavige uitvinding.Fig. 21 is a block diagram of an embodiment of a bit generator according to the present invention.
Fig. 22 is een blokschema van een uitvoeringsvorm van de lange 5 run-eenheid volgens de onderhavige uitvinding.Fig. 22 is a block diagram of an embodiment of the long run unit of the present invention.
Fig. 23 is een blokschema van een uitvoeringsvorm van de korte run-eenheid volgens de onderhavige uitvinding.Fig. 23 is a block diagram of an embodiment of the short run unit of the present invention.
Fig. 24 is een blokschema van een uitvoeringsvorm van de initialisatie- en stuurlogica volgens de onderhavige uitvinding.Fig. 24 is a block diagram of an embodiment of the initialization and control logic of the present invention.
10 Fig. 25 is een blokschema van een uitvoeringsvorm voor het her schikken van data gebruikmakend van een speurende decodeereenheid.FIG. 25 is a block diagram of an embodiment for rearranging data using a tracking decoder.
Fig. 26 is een blokschema van een andere uitvoeringsvorm van een herschikkingseenheid.Fig. 26 is a block diagram of another embodiment of a rearrangement unit.
Fig. 27 is een blokschema van een andere uitvoeringsvorm vein een 15 herschikkingseenheid die gebruik maakt van een gecombineerde wachtrij.Fig. 27 is a block diagram of another embodiment of a rearrangement unit using a combined queue.
Fig. 28 is een blokschema vein een stelsel met grote bandbreedte waarin de onderhavige uitvinding wordt toegepast.Fig. 28 is a block diagram of a high bandwidth system in which the present invention is applied.
Fig. 29 is een blokschema van een stelsel met aangepaste bandbreedte waarin de onderhavige uitvinding wordt toegepast.Fig. 29 is a block diagram of an adjusted bandwidth system employing the present invention.
20 Fig. 30 is een blokschema van een in werkelijke tijd Functionerend videostelsel gebruikmakend van de onderhavige uitvinding.FIG. 30 is a block diagram of a real-time Functioning video system using the present invention.
Fig. 31 illustreert een uitvoeringsvorm van het gecodeerde data-geheugen volgens de onderhavige uitvinding.Fig. 31 illustrates an embodiment of the encrypted data memory according to the present invention.
Fig. 32 is een tijddiagram van de decodering volgens de onderhavi-25 ge uitvinding.Fig. 32 is a timing chart of the decoding according to the present invention.
Gedetailleerde beschrijving van de uitvindingDetailed description of the invention
Een werkwijze en inrichting voor het parallel coderen en decoderen van data wordt beschreven. In de navolgende beschrijving zullen tal-30 rijke specifieke details worden uiteengezet, zoals specifieke aantallen bits, aantallen codeereenheden, specifieke waarschijnlijkheden, datatypen enz., teneinde een diepgaand inzicht te verschaffen in de voorkeursuitvoeringsvormen van de «onderhavige uitvinding. Het zal voor de deskundige duidelijk zijn dat de onderhavige uitvinding ook zonder 35 deze specifieke details in praktijk kan worden gebracht. Ook zijn op zichzelf bekende schakelingen in blokschemavorm getoond en niet in detail teneinde een onnodige detaillering van de onderhavige uitvinding te vermijden.A method and apparatus for encoding and decoding data in parallel is described. Numerous specific details will be set forth in the following description, such as specific numbers of bits, numbers of coders, specific probabilities, data types, etc., to provide an in-depth understanding of the preferred embodiments of the present invention. It will be clear to the skilled person that the present invention can also be practiced without these specific details. Also known per se circuits are shown in block diagram form and not in detail in order to avoid unnecessary detailing of the present invention.
1001317 111001317 11
Sommige gedeelten van de hiernavolgende gedetailleerde beschrijvingen zijn gepresenteerd in de vorm van algoritmen en symbolische representaties van operaties op databits in een computergeheugen. Deze algoritmische beschrijvingen en representaties vormen de middelen die 5 door de deskundigen op het gebied van de dataverwerkingstechnieken worden gebruikt om op de meest effectieve wijze het wezen van hun werk over te dragen aan andere deskundigen. Een algoritme wordt hier, en in het algemeen, begrepen als een zelf-samenhangende reeks van stappen die tot een gewenst resultaat leidt. Deze stappen vereisen fysieke 10 manipulaties of fysieke kwantiteiten. Over het algemeen, maar niet noodzakelijk, nemen deze kwantiteiten de vorm aan van elektrische of magnetische signalen die kunnen worden opgeslagen, overgedragen, gecombineerd, vergeleken en op andere wijze kunnen worden gemanipuleerd. Het is soms gemakkelijke gebleken, in hoofdzaak terwille van een ge-15 meenschappelijk gebruik, om naar deze signalen te verwijzen als bits, waarden, elementen, symbolen, karakters, termen, nummers of dergelijke.Some portions of the following detailed descriptions are presented in the form of algorithms and symbolic representations of operations on data bits in a computer memory. These algorithmic descriptions and representations are the means used by those skilled in the data processing techniques to most effectively convey the nature of their work to other experts. An algorithm is here, and generally understood, as a self-coherent series of steps leading to a desired result. These steps require physical manipulations or physical quantities. Generally, but not necessarily, these quantities take the form of electrical or magnetic signals that can be stored, transferred, combined, compared, and otherwise manipulated. It has sometimes proved easy, mainly for the sake of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers or the like.
Men moet er echter aan denken dat al deze en soortgelijke termen moeten worden geassocieerd met de geschikte fysieke kwantiteiten en 20 slechts dienst doen als geschikte etiketten die op deze kwant, teiten worden geplakt. Tenzij specifiek anders aangegeven in de navolgende besprekingen zal het duidelijk zijn dat binnen de onderhavige uitvinding de besprekingen waarin termen worden gebruikt als "verwerking" of "computing" of "berekening" of "bepaling" of "weergave" of dergelijke 25 verwijzen naar de akties en processen van een computerstelsel of een soortgelijke elektronische computereenheid, welke data, vertegenwoordigd als fysieke (elektronische) kwantiteiten binnen de registers en geheugens van het computerstelsel manipuleert en transformeert tot andere data die op soortgelijke wijze worden vertegenwoordigd door 30 fysieke kwantiteiten binnen de geheugens of registers of andere infor-matie-opslag, -transmissie of -weergeefeenheden van het computerstel-sel.However, it should be remembered that all these and similar terms must be associated with the appropriate physical quantities and serve only as suitable labels to be affixed to this quantity. Unless specifically stated otherwise in the following discussions, it will be understood that within the present invention, the discussions in which terms such as "processing" or "computing" or "computation" or "determination" or "display" or the like refer to the actions and processes of a computer system or a similar electronic computer unit, which manipulates and transforms data, represented as physical (electronic) quantities within the registers and memories of the computer system, into other data similarly represented by physical quantities within the memories or registers or other computer system information storage, transmission, or display units.
De onderhavige uitvinding heeft ook betrekking op apparatuur voor het uitvoeren van de operaties. Deze apparatuur kan speciaal gecon-35 strueerd zijn voor de vereiste doeleinden, of kan bestaan uit een general purpose computer die selectief wordt geactiveerd of gehercon-figureerd door een in de computer opgeslagen computerprogramma. De in deze beschrijving gepresenteerde algoritmen en afbeeldingen zijn niet 1001317 1 12 inherent gerelateerd aan een bepaalde computer of ander apparaat. Diverse general purpose machines kunnen worden gebruikt met programma’s die in overeenstemming zijn met het hierin besprokene, maar het kan ook geschikt zijn om meer gespecialiseerde apparatuur te construe-5 ren voor het uitvoeren van de vereiste werkwijzestappen. De vereiste structuur voor verschillende van deze machines zal uit de onderstaande beschrijving blijken. Bovendien wordt de onderhavige uitvinding niet besproken in samenhang met een bepaalde programmeertaal. Het zal duidelijk zijn dat een groot aantal programmeertalen kan worden gebruikt 10 om de leer van de uitvinding, als hierin besproken, te implementeren.The present invention also relates to equipment for performing the operations. This equipment may be specially constructed for the required purposes, or it may consist of a general purpose computer selectively activated or reconfigured by a computer program stored in the computer. The algorithms and graphics presented in this description are not inherently related to a particular computer or other device. Various general purpose machines can be used with programs in accordance with what is discussed herein, but it may also be suitable to construct more specialized equipment to perform the required method steps. The required structure for several of these machines will be apparent from the description below. In addition, the present invention is not discussed in connection with a particular programming language. It will be appreciated that a wide variety of programming languages can be used to implement the teachings of the invention discussed herein.
Parallelle entropiecoderingParallel entropy coding
De onderhavige uitvinding verschaft een parallel entropiecode-ringsstelsel. Het stelsel omvat een codeereenheid en een decodeereen-15 heid. In een uitvoeringsvorm voert de codeereenheid een codering op data in werkelijke tijd uit. Tegelijkertijd voert een uitvoeringsvorm van de decodeereenheid volgens de onderhavige uitvinding een decodering van data uit in werkelijke tijd. Tezamen vormen de in werkelijke tijd functionerende codeereenheid en decodeereenheid een gebalanceerd 20 codeerstelsel.The present invention provides a parallel entropy coding system. The system includes an encoder and a decoder. In one embodiment, the encoder performs real-time data encoding. At the same time, an embodiment of the decoding unit according to the present invention performs decoding of data in real time. Together, the real-time encoder and decoder form a balanced encoder.
De onderhavige uitvinding verschaft een stelsel dat verliesvrij gecodeerde data parallel decodeert.. De data wordt parallel gedecodeerd gebruikmakend van meerdere decodeerhulpbronnen. Elk van de meerdere decodeerhulpbronnen krijgt data (bijvoorbeeld codewoorden) uit de 25 datastroom toegewezen ter decodering. De toewijzing van de datastroom gebeurt terwijl de decodeerhulpbronnen tegelijkertijd data decoderen, waardoor de datastroom parallel wordt gedecodeerd. Teneinde de toewijzing van data op zodanige wijze mogelijk te maken dat efficiënt gebruik wordt gemaakt van de decodeerhulpbronnen wordt de datastroom 30 geordend. Dit wordt aangeduid als het parallelliseren van de datastroom. De ordening van data maakt het mogelijk dat elke decodeerhulp-bron sommige of alle gecodeerde data decodeert zonder te wachten op terugkoppeling uit het contextmodel.The present invention provides a system that decodes losslessly encoded data in parallel. The data is decoded in parallel using multiple decoding resources. Each of the multiple decoding resources is allocated data (for example, codewords) from the data stream for decoding. The allocation of the data stream is done while the decoding resources simultaneously decode data, thereby decoding the data stream in parallel. In order to allow the allocation of data in such a way that efficient use is made of the decoding resources, the data stream 30 is ordered. This is referred to as parallelizing the data stream. The ordering of data allows each decoding resource to decode some or all of the encoded data without waiting for feedback from the context model.
Fig. 2A illustreert het decodeerstelsel volgens de onderhavige 35 uitvinding zonder de langzame terugkoppellus uit de stand der techniek. Een ingangsbuffer 204 ontvangt gecodeerde data (d.w.z. codewoorden) en een terugkoppelsignaal van decodeereenheid 205 en levert gecodeerde data in vooraf bepaalde volgorde (bijvoorbeeld context-bin 1001317 13 volgorde) aan decodeereenheid 205 volgens de onderhavige uitvinding, welke de gecodeerde data decodeert. Decodeereenheid 205 omvat meerdere decodeereenheden (bijvoorbeeld 205A, 205B, 205C, enz.).Fig. 2A illustrates the decoding system of the present invention without the slow feedback loop of the prior art. An input buffer 204 receives coded data (i.e., codewords) and a feedback signal from decoder 205 and supplies coded data in predetermined order (e.g. context bin 1001317 13 order) to decoder 205 of the present invention which decodes the coded data. Decoder 205 includes multiple decoders (e.g., 205A, 205B, 205C, etc.).
In een uitvoeringsvorm krijgt elk van de decodeereenheden 205A, 5 205B, 205C, enz. data geleverd voor een groep van contexten. Elk van de decodeereenheden in de decoder 205 krijgt gecodeerde data geleverd voor iedere context-bin in zijn groep van contexten uit de ingangsbuf-fer 204. Gebruikmakend van deze data produceert elke decodeereenheid 205A, 205B, 205C, enz. de gedecodeerde data voor zijn groep van con-10 text-bins. Het contextmodel is niet vereist om de gecodeerde data te associëren met een bepaalde groep van context-bins.In one embodiment, each of the decoders 205A, 205B, 205C, etc. is supplied with data for a group of contexts. Each of the decoders in the decoder 205 is provided with encoded data for each context bin in its group of contexts from the input buffer 204. Using this data, each decoder 205A, 205B, 205C, etc. produces the decoded data for its group from con-10 text-bins. The context model is not required to associate the encoded data with a particular group of context bins.
De gedecodeerde data wordt door de decoder 205 toegezonden uit gedecodeerde data-opslagcircuit 207 (bijvoorbeeld 207A, 207B, 207C, enz.). Opgemerkt wordt dat het gedecodeerde data-opslagcircuit 207 ook 15 tussentijdse data kan opslaan die noch gecodeerd noch gedecodeerd is, zoals runtellingen. In dit geval wordt de data in het gedecodeerde data-opslagcircuit 207 opgeslagen in een compacte, maar niet entropie-gecodeerde vorm.The decoded data is sent from the decoder 205 from decoded data storage circuit 207 (e.g., 207A, 207B, 207C, etc.). It is noted that the decoded data storage circuit 207 can also store intermediate data that is neither encoded nor decoded, such as run counts. In this case, the data in the decoded data storage circuit 207 is stored in a compact but not entropy encoded form.
Het onafhankelijk daarvan werkende contextmodel 206 is aangesloten 20 voor het ontvangen van eerder gedecodeerde data uit het gedecodeerde data-opslagcircuit 207 (d.w.z. 207A, 207B, 207C, enz.) in responsie op een terugkoppelsignaal dat het zendt naar het gedecodeerde data-opslagcircuit 207. Er bestaan derhalve twee onafhankelijke terugkoppellussen, één tussen de decoder 205 en de ingangsbuffer 204 en een twee-25 de tussen het contextmodel 206 en het gedecodeerde data-opslagcircuit 207. Omdat de grote terugkoppellus is geëlimineerd, zijn de decodeereenheden in de decoder 205 (bijvoorbeeld 205A, 205B, 205C, enz.) in staat om hun geassocieerde codewoorden te decoderen zodra ze vanaf de ingangsbuffer 204 worden ontvangen.The independently operating context model 206 is connected to receive previously decoded data from the decoded data storage circuit 207 (ie, 207A, 207B, 207C, etc.) in response to a feedback signal it sends to the decoded data storage circuit 207. Therefore, there are two independent feedback loops, one between the decoder 205 and the input buffer 204 and a second-25th between the context model 206 and the decoded data storage circuit 207. Since the large feedback loop is eliminated, the decoders in the decoder 205 (e.g. 205A, 205B, 205C, etc.) are able to decode their associated codewords as soon as they are received from the input buffer 204.
30 Het contextmodel levert het geheugendeel van het codeerstelsel en verdeelt een dataset (bijvoorbeeld een plaatje) in verschillende categorieën (bijvoorbeeld context-bins) gebaseerd op het geheugen. In de onderhavige uitvinding worden de eontext-bins beschouwd als onafhankelijk geordende datasets. In één uitvoeringsvorm heeft elke groep van 35 context-bins zijn eigen waarschijnlijkheid-schattingsmodel en elke context-bin heeft zijn eigen toestand (waar waarschijnlijkheid-schat-tingsmodellen gemeenschappelijk zijn). Elke context-bin kan derhalve een verschillend waarschijnlijkheid-schattingsmodel en/of bitstroom- 1001317' 1*4 generator gebruiken.The context model provides the memory part of the coding system and divides a data set (eg an image) into different categories (eg context bins) based on the memory. In the present invention, the eontext bins are considered independently ordered datasets. In one embodiment, each group of 35 context bins has its own probability estimation model, and each context bin has its own state (where probability estimation models are common). Each context bin can therefore use a different probability estimation model and / or bitstream 1001317 '1 * 4 generator.
De data wordt derhalve geordend, of geparallelliseerd, en data van de datastroom wordt toegewezen aan individuele codeereenheden ter decodering.The data is thus ordered, or parallelized, and data from the data stream is allocated to individual encoders for decoding.
55
Toevoegen van parallellisatie aan het klassieke entropiecodeermodelAdding parallelization to the classic entropy coding model
Voor het parallelliseren van de datastroom kan de data worden verdeeld afhankelijk van hun context, waarschijnlijkheid, bedekking, codewoordsequentie (gebaseerd op codewoorden), enz. Het herschikken 10 van de gecodeerde datastroom is onafhankelijk van de parallellisatie, een werkwijze die gebruikt wordt voor het parallelliseren van data of de waarschijnlijkheid op enig ander punt. Een parallel codeergedeelte van een codeerstelsel volgens de onderhavige uitvinding, gevoed door data die gedifferentieerd is door het contextmodel (CM) is getoond in 15 fig. 2B.For the parallelization of the data stream, the data can be divided depending on their context, probability, coverage, codeword sequence (based on codewords), etc. Rearranging the encoded data stream is independent of the parallelization, a method used for parallelizing of data or probability at any other point. A parallel coding portion of an encoding system according to the present invention, fed by data differentiated by the context model (CM) is shown in Fig. 2B.
In fig. 2B omvat het context-afhankelijke parallelle codeergedeelte het contextmodel (CM) 2lk, waarschijnlijkheid-schattingsmodules (PEM's) 215-217 en bitstroomgeneratoren (BG’s) 218-220. CM 2lk is aangesloten voor ontvangst van gecodeerde ingangsdata. CM 21*4 is ook 20 gekoppeld met de PEM's 215-217. PEM's 215-217 zijn respectievelijk verbonden met de BG's 218-220 die aan de uitgang de respectievelijke codes tromen 1, 2 en 3 af geven. Elk paar van een PEM en een BG vormt een codeereenheid. Het getoonde parallelle codeercircuit omvat derhalve drie codeereenheden. Alhoewel slechts drie parallelle codeereenhe-25 den zijn getoond, kan willekeurig elk aantal codeereenheden worden gebruikt.In Fig. 2B, the context-dependent parallel coding portion includes the context model (CM) 2lk, probability estimation modules (PEMs) 215-217 and bitstream generators (BGs) 218-220. CM 2lk is connected to receive coded input data. CM 21 * 4 is also paired 20 with the PEMs 215-217. PEMs 215-217 are respectively connected to BGs 218-220 which output currents 1, 2 and 3, respectively, at the output. Each pair of a PEM and a BG forms an encoder. The parallel encoding circuit shown therefore comprises three encoders. Although only three parallel encoders are shown, any number of encoders can be used.
CM 21*4 verdeelt de datastroom in verschillende contexten op dezelfde wijze als een conventionele CM en zendt de meervoudige stromen naar de parallelle hardware codeerhulpbronnen. Individuele contexten 30 of groepen van contexten worden geleid naar gescheiden waarschijnlijk-heid-schattingseenheden (PEM's) 215-217 en bitgeneratoren (BG's) 218-219. Elk van de BG's 218-220 geeft aan zijn uitgang een gecodeerde datastroom af.CM 21 * 4 divides the data stream into different contexts in the same way as a conventional CM and sends the multiple streams to the parallel hardware encoding resources. Individual contexts or groups of contexts are directed to separate probability estimation units (PEMs) 215-217 and bit generators (BGs) 218-219. Each of the BGs 218-220 outputs an encoded data stream at its output.
Fig. 2b is een blokschema van een uitvoeringsvorm van het deco-35 deergedeelte van het decodeerstelsel volgens de onderhavige uitvinding. Fig. 2C toont een context-afhankelijke parallelle decodeereen-heid voorzien van de BG’s 221-223, de PEM's 22*4-226 en de CM 227. De codestromen 1-3 zijn gekoppeld met de respectieve BG's 221-223. De 10013171 15 BG's 221-223 zijn ook gekoppeld met de respectieve PEM's 224-226. De PEM's 224-226 zijn verbonden met de CM 227 die de gereconstrueerde ingangsdata aan zijn uitgang afgeeft. Aan de ingangen staan diverse codestromen, getoond als de codestromen 1-3· Eén codestroom is toege-5 wezen asm elk een PEM en een BG. Elk van de BG 221-223 geeft een bit af dat aangeeft of de binaire beslissing in zijn meer waarschijnlijke toestand verkeert, welk bit in de PEM's 224-226 wordt gebruikt voor het afgeven van gecodeerde bits (bijvoorbeeld de binaire beslissing). Elk van de PEM's 224-226 is geassocieerd met een van de BG's 221-223, 10 aangevende welke code moet worden gebruikt voor het produceren van datastroom op grond van zijn ingangscodestroom. CM 227 produceert een gedecodeerde datastroom door het selecteren van de gedecodeerde bits van de bitstroomgeneratoren in de juiste volgorde, waardoor de oorspronkelijke data opnieuw wordt gecreëerd. De CM 227 verkrijgt derhal-15 ve het gedecomprimeerde databit van de geschikte PEM en BG door in feite de data in de oorspronkelijke volgorde te herschikken. Opgemerkt wordt dat de stuurstroom voor dit ontwerp loopt in de omgekeerde richting ten opzichte van de datastroom. De BG en PEM kunnen data decoderen voordat de CM 227 ze nodig heeft en blijven daardoor een of meer 20 bits voor. Als alternatief kan de CM 227 een bit van een BG en PEM vragen (maar niet ontvangen) en vervolgens een of meer bits vragen van andere BG's en PEM's voorafgaande aan het gebruik van het oorspronkelijk gevraagde bit.Fig. 2b is a block diagram of an embodiment of the deco-35 portion of the decoding system of the present invention. Fig. 2C shows a context-dependent parallel decoding unit provided with the BGs 221-223, the PEMs 22 * 4-226 and the CM 227. The code streams 1-3 are coupled to the respective BGs 221-223. The 10013171 15 BG's 221-223 are also paired with the respective PEM's 224-226. The PEMs 224-226 are connected to the CM 227 which outputs the reconstructed input data. At the inputs are various code streams, shown as the code streams 1-3 · One code stream is assigned asm each a PEM and a BG. Each of the BG 221-223 issues a bit indicating whether the binary decision is in its more likely state, which bit in the PEMs 224-226 is used to output coded bits (e.g., the binary decision). Each of the PEMs 224-226 is associated with one of the BGs 221-223, 10 indicating which code to use to generate data stream based on its input code stream. CM 227 produces a decoded data stream by selecting the decoded bits from the bitstream generators in the correct order, recreating the original data. The CM 227 therefore obtains the decompressed data bit from the appropriate PEM and BG by basically rearranging the data in the original order. It should be noted that the control current for this design runs in the opposite direction to the data flow. The BG and PEM can decode data before the CM 227 needs it and are therefore one or more 20 bits ahead. Alternatively, the CM 227 may request (but not receive) a bit from a BG and PEM and then request one or more bits from other BGs and PEMs prior to using the originally requested bit.
De in fig. 2C getoonde configuratie is ontworpen om de PEM en BG 25 vast met elkaar te koppelen. Het Q-codeercircuit van IBM is een goed voorbeeld van een codeercircuit met vastgekoppelde PEM en BG. Lokale terugkoppellussen tussen deze twee vormen geen fundamentele begrenzing aan de gedragingen van het stelsel.The configuration shown in Figure 2C is designed to permanently couple the PEM and BG 25 together. IBM's Q encoding circuit is a good example of an encoding circuit with PEM and BG coupled. Local feedback loops between the two do not fundamentally limit the behavior of the system.
In een ander ontwerp kan de PEM de data differentiëren en deze 30 naar parallelle BG-eenheden zenden. Er zou dan slechts één CM en PEM zijn en wel een aantal BG. Adaptieve Huffman-codering en codering met een eindige toestandsmachine kunnen op deze wijze worden gebruikt.In another design, the PEM can differentiate the data and send it to parallel BG units. There would then be only one CM and PEM and a number of BG. Haptman adaptive coding and finite state coding can be used in this manner.
Een soortgelijk decodeerstelsel dat de PEM gebruikt voor het differentiëren van data en het parallel toezenden daarvan aan BG's is 35 getoond in fig. 2D. In dit geval worden de waarschijnlijkheidsklassen parallel behandeld en elke bitstroomgenerator is toegewezen aan een specifieke waarschijnlijkheidsklasse en ontvangt kennis omtrent het resultaat. Verwijzend naar fig. 2D zijn de gecodeerde datastromen 1-3 1001317 » 16 verbonden met één uit een aantal bitstroomgeneratoren (b.v. BG 232, BG 233. BG 234, enz.) die aangesloten zijn voor ontvangst ervan. Elk van de bitstroomgeneratoren is gekoppeld met de PEM 235· PEM 235 is ook gekoppeld met CM 236. In deze configuratie decodeert elk van de bit-5 stroomgeneratoren gecodeerde data en de decodeerresultaten worden geselecteerd door PEM 235 (in plaats van CM 236). Elk van de bitstroomgeneratoren ontvangt gecodeerde data uit een bron die geassocieerd is met een waarschijnlijkheidsklasse (d.w.z. waar de gecodeerde data van iedere willekeurige context-bin kan zijn). De PEM 235 selec-10 teert de bitstroomgeneratoren gebruikmakend van een waarschijnlijkheidsklasse. De waarschijnlijkheidsklasse wordt gedicteerd door het context-bin dat daaraan geleverd is door de CM 236. Op deze wijze wordt gedecodeerde data geproduceerd door het parallel verwerken van waarschijnlijkheidsklassen.A similar decoding scheme using the PEM to differentiate data and send it in parallel to BGs is shown in Figure 2D. In this case, the probability classes are handled in parallel and each bit stream generator is assigned to a specific probability class and receives knowledge of the result. Referring to Fig. 2D, the coded data streams 1-3 1001317 »16 are connected to one of a number of bitstream generators (e.g., BG 232, BG 233, BG 234, etc.) connected for reception. Each of the bitstream generators are coupled to the PEM 235 · PEM 235 is also coupled to CM 236. In this configuration, each of the bit-5 stream generators decodes encoded data and the decoding results are selected by PEM 235 (instead of CM 236). Each of the bitstream generators receives coded data from a source associated with a probability class (i.e., where the coded data can be from any context bin). The PEM 235 selects the bitstream generators using a probability class. The probability class is dictated by the context bin provided to it by the CM 236. In this way, decoded data is produced by processing probability classes in parallel.
15 Er bestaan talrijke implementaties voor parallelle codeerstelsels volgens de uitvinding. In één uitvoeringsvorm kunnen de gecodeerde datastromen corresponderend met de meervoudige context-bins worden ineengeschoven tot één stroom die geordend is door de vragen van de diverse codeereenheden. In een uitvoeringsvorm van de onderhavige 20 uitvinding is de gecodeerde data zodanig geordend dat elke codeereen-heid constant wordt gevoed met data zelfs als de gecodeerde data wordt geleverd in één stroom aan de decodeereenheid. Opgemerkt wordt dat de onderhavige uitvinding functioneert met alle typen data, met inbegrip van beelddata.Numerous implementations for parallel coding systems according to the invention exist. In one embodiment, the encoded data streams corresponding to the multiple context bins can be collapsed into one stream ordered by the questions of the various encoders. In an embodiment of the present invention, the encoded data is arranged such that each encoder is constantly fed data even if the encoded data is supplied in one stream to the decoder. It is noted that the present invention functions with all types of data, including image data.
25 Door gebruik te maken van kleine eenvoudige codeereenheden die goedkoop kunnen worden vermenigvuldigd in geïntegreerde schakelingen, kan de gecodeerde data snel parallel worden gedecodeerd. In één uitvoeringsvorm zijn de codeereenheden geïmplementeerd in hardware gebruikmakend van chips met een veld-programmeerbare array van poorten 30 (FPGA) of een als standaardcel uitgevoerde toepassings-specifieke geïntegreerde schakelings-chip (ASIC). De combinatie van parallellise-ring en eenvoudige bitstroomgeneratoren maakt het mogelijk de gecodeerde data te decoderen met snelheden die hoger zijn dan bij de deco-deereenheden uit de stand der techniek terwijl de compressie-efficiën-35 tie van de decodeerstelsels uit de stand der techniek wordt gehandhaafd of zelfs verbeterd.By using small simple encoders that can be cheaply multiplied in integrated circuits, the encoded data can be quickly decoded in parallel. In one embodiment, the encoders are implemented in hardware using chips with a field-programmable array of ports 30 (FPGA) or an application-specific integrated circuit chip (ASIC) configured as a standard cell. The combination of parallelization and simple bitstream generators makes it possible to decode the encoded data at rates higher than the prior art decoding units while increasing the compression efficiency of the prior art decoding systems. maintained or even improved.
1001317 ' 171001317 '17
Kanaalordening van meervoudige datastromenChannel arrangement of multiple data streams
Er zijn veel verschillende ontwerppunten en problemen die invloed hebben op de gedragingen van het stelsel. Een paar daarvan zullen in het onderstaande worden genoemd. De uitvoeringsvormen getoond in fig.There are many different design points and problems that affect the behavior of the system. A few of them will be mentioned below. The embodiments shown in fig.
5 2B en 2C (en 2D) gebruiken echter meervoudige codestromen. Stelsels met parallelle kanalen waarin een dergelijke uitvoeringsvorm kan worden ondergebracht zijn denkbaar: meervoudige telefoonlijnen, meervoudige koppen op een disk drive, enz. In sommige toepassingen is slechts één kanaal beschikbaar of gemakkelijk. Als meerdere kanalen zijn ver-10 eist kan er sprake zijn van een slecht gebruik van de bandbreedte vanwege het burst-achtige karakter van de individuele codestromen.However, 2B and 2C (and 2D) use multiple code streams. Parallel channel systems that can accommodate such an embodiment are conceivable: multiple phone lines, multiple heads on a disk drive, etc. In some applications, only one channel is available or convenient. If multiple channels are required, the bandwidth may be misused due to the burst-like nature of the individual code streams.
In één uitvoeringsvorm worden de codestromen samengevoegd en samenhangend naar de decodeereenheid gezonden. Een inleidende kop bevat wijzers naar de beginbitlokatie van elke stroom. Fig. 3 illustreert 15 een uitvoeringsvorm met deze rangschikking van data. De drie wijzers l 3OI-303 in fig. 3 wijzen naar de startlokatie in de samengevoegde code van de respectieve codestromen 1, 2 en 3· Het complete gecomprimeerde databestand is beschikbaar in een buffer van de decodeereenheid. Indien nodig worden de codewoorden van de geschikte lokatie opgehaald 20 via de geschikte aanwijzer. De aanwijzer wordt dan ge-updated naar het eerstvolgende codewoord in de codestroom.In one embodiment, the code streams are merged and sent coherently to the decoder. An introductory heading contains pointers to the starting bit location of each stream. Fig. 3 illustrates an embodiment with this arrangement of data. The three pointers 1310-303 in Fig. 3 point to the start location in the merged code of the respective code streams 1, 2 and 3. The complete compressed data file is available in a buffer of the decoder. If necessary, the codewords of the appropriate location are retrieved via the appropriate pointer. The pointer is then updated to the next code word in the code stream.
Er wordt op gewezen dat deze werkwijze vereist dat een volledig gecodeerd frame wordt opgeborgen in de decodeereenheid en, voor praktische doeleinden, in de codeereenheid. Als een in werkelijke tijd 25 functionerend stelsel, of een stroom met minder burst-achtige data, gevraagd is dan kunnen twee framebuffers worden gebruikt voor opslag in zowel de codeereenheid als de decodeereenheid.It is noted that this method requires that a fully encoded frame be stored in the decoder and, for practical purposes, in the encoder. If a real-time operating system, or a stream with less burst-like data, is requested, two frame buffers can be used for storage in both the encoder and the decoder.
Datavolgorde naar codewoordvoleorde 30 Opgemerkt wordt dat een decoder codewoorden decodeert in een be paalde deterministische volgorde. Met parallelle codering is de volgorde van de vragen aan de codestroom deterministisch. Als dus de codewoorden van parallelle codestromen kunnen worden ineengeschoven in de juiste volgorde bij de codeereenheid, dan zal een enkele codestroom 35 voldoende zijn. De codewoorden worden geleverd aan de decoder in dezelfde volgorde op een "just-in-time" basis. Bij de codeereenheid bepaalt een model van de decoder de codewoordvolgorde en verpakt de codewoorden in een enkele stroom. Dit model kan een feitelijke decoder 1001317 18 zijn.Data order by codeword order It is noted that a decoder decodes codewords in a certain deterministic order. With parallel coding, the order of the questions to the code stream is deterministic. Thus, if the code words of parallel code streams can be interleaved in the correct order at the encoder, a single code stream will suffice. The codewords are delivered to the decoder in the same order on a "just-in-time" basis. At the encoder, a model of the decoder determines the codeword order and packs the codewords in a single stream. This model can be an actual decoder 1001317 18.
Een probleem bij het afleveren van data aan de parallelle deco-deerelementen ontstaat indien de datalengte variabel is. Het ontpakken van een stroom met codewoorden van variabele lengte vereist het ge-5 bruik van een bitverschuiver om de codewoorden uit te lijnen. Bitver-schuivers zijn dikwijls kostbaar en/of langzaam wanneer ze in hardware worden geïmplementeerd. De besturing van de bitverschuiver hangt af vein de afmetingen van het bepaalde codewoord. Deze besturingsterugkoppellus voorkomt dat variabele lengteverschuiving te snel wordt uitge-10 voerd. De voordelen van het voeden vein meerdere decoders met een enkele stroom kunnen niet worden gerealiseerd als het proces vein het ont-pakken van de stroom wordt uitgevoerd in een enkele bitverschuiver die niet snel genoeg is om het aantal decoders bij te houden.A problem in delivering data to the parallel decoder elements arises if the data length is variable. Unpacking a stream of variable length code words requires using a bit shifter to align the code words. Bitver sliders are often expensive and / or slow when implemented in hardware. The control of the bit shifter depends on the dimensions of the particular codeword. This control feedback loop prevents variable length shift from being performed too quickly. The advantages of feeding multiple decoders with a single stream cannot be realized if the process of extracting the stream is performed in a single bit shifter that is not fast enough to keep track of the number of decoders.
De oplossing die in deze uitvinding wordt voorgesteld maakt een 15 scheiding tussen het probleem van het distribueren van de gecodeerdeThe solution proposed in this invention separates the problem of distributing the encrypted
VV
data aan de parallelle codeereenheden en de uitlijning van de codewoorden met variabele lengte voor het decoderen. De codewoorden in elke onafhankelijke codestroom worden verpakt in woorden met een vaste lengte, aangeduid als ineengeschoven woorden. Aan het decodereinde van 20 het kanaal kunnen deze ineengeschoven woorden worden gedistribueerd over de parallelle decodeereenheden met snelle vastbedrade datalijnen en een eenvoudige stuurschakeling. .data to the parallel encoders and the alignment of the variable length codewords for decoding. The code words in each independent code stream are packaged in fixed length words, referred to as concatenated words. At the decoder end of the channel, these collapsed words can be distributed over the parallel decoders with fast hardwired data lines and a simple control circuit. .
Het is geschikt als de ineengeschoven woordlengte groter is dan de maximale codewoordlengte, zodat er in elk ineengeschoven codewoord ten 25 minste voldoende bits zijn om één codewoord te completeren. De ineengeschoven woorden kunnen meerdere codewoorden en delen van codewoorden bevatten. Fig. H illustreert het ineenschuiven van een voorbeeldgroep van parallelle codestromen.It is convenient if the collapsed word length is greater than the maximum codeword length, so that in each collapsed codeword there are at least enough bits to complete one codeword. The interleaved words can contain multiple code words and parts of code words. Fig. H illustrates the collapse of an example group of parallel code streams.
Deze woorden worden ineengeschoven afhankelijk van de behoefte bij 30 de decoder. Elke onafhankelijke decoder ontvangt een geheel ineengeschoven woord. De bitverschuivingsoperatie wordt nu lokaal uitgevoerd bij elke decoder waardoor de parallellisatie in het systeem wordt gehandhaafd. Opgemerkt wordt in fig. 4 dat het eerste codewoord in elk ineengeschoven woord het laagste overgebleven codewoord in de groep 35 Is. De eerste ineengeschoven woorden zijn bijvoorbeeld afkomstig van codestroom 1, beginnend met het laagste codewoord (d.w.z. #1). Dit wordt gevolgd door het eerste ineengeschoven woord in codestroom 2 en dan door het eerste ineengeschoven woord in codestroom 3· Het eerst- 1001317 19 volgend laagste codewoord dat niet geheel opgenomen is in een al reeds geordend ineengeschoven woord is #7- Daarom is het volgende woord in de stroom het tweede ineengeschoven woord van codestroom 2.These words are collapsed depending on the need at the decoder. Each independent decoder receives a fully interlocked word. The bit shift operation is now performed locally at each decoder, thereby maintaining parallelization in the system. It is noted in Fig. 4 that the first codeword in each interleaved word is the lowest remaining codeword in the group 35. For example, the first interleaved words come from code stream 1, starting with the lowest code word (i.e. # 1). This is followed by the first interleaved word in code stream 2 and then by the first interleaved word in code stream 3 · The first 1001317 19 next lowest code word that is not entirely contained in an already ordered interleaved word is # 7- Therefore, the following word in the stream the second word of codestream 2 interlocked.
In een andere uitvoeringsvorm is de volgorde waarin de opvolgende 5 groep van ineengeschoven woorden (b.v. het codewoord beginnend met codewoord #8 in stroom 1, het codewoord beginnend met codewoord #7 in stroom 2, het codewoord beginnend met codewoord #11 in stroom 3) worden opgenomen in de ineengeschoven codestroom gebaseerd op het eerste codewoord van de voorafgaande set van ineengeschoven woorden (b.v. het 10 codewoord beginnend met codewoord #1 in stroom 1, het codewoord beginnend met codewoord #2 in stroom 2, het codewoord beginnend met codewoord #4 in stroom 3) en geordend vanaf het ineengeschoven woord met het eerste codewoord met het laagste nummer tot aan het ineengeschoven woord met het eerste codewoord met het hoogste nummer. Omdat in dit 15 geval het ineengeschoven woord beginnend met codewoord #1 het eerste was, is derhalve het volgende ineengeschoven woord in stroom 1 het eerste van de tweede groep van ineengeschoven woorden dat ingeschoven moet worden in de ineengeschoven stroom, gevolgd door het volgende ineengeschoven woord in stroom 2 en daarna het volgende ineengeschoven 20 woord in stroom 3· Opgemerkt wordt dat, nadat de tweede groep van ineengeschoven woorden is ingebracht in de ineengeschoven stroom, het volgende ineengeschoven woord in stroom 2 het volgende ineengeschoven woord zal zijn dat moet worden ingébracht in de stroom omdat codewoord #7 het laagste codewoord is vein de tweede groep van ineengeschoven 25 woorden (gevolgd door codewoord #8 in stroom 1 en dan codewoord #11 in stroom 3)·In another embodiment, the order in which the consecutive 5 group of interleaved words is (eg the codeword starting with codeword # 8 in stream 1, the codeword starting with codeword # 7 in stream 2, the codeword starting with codeword # 11 in stream 3) are included in the interleaved code stream based on the first codeword of the preceding set of interleaved words (eg the 10 codeword starting with codeword # 1 in stream 1, the codeword starting with codeword # 2 in stream 2, the codeword starting with codeword # 4 in stream 3) and ordered from the collapsed word with the first codeword with the lowest number to the collapsed word with the first codeword with the highest number. Therefore, since in this case the interleaved word starting with codeword # 1 was the first, the next interleaved word in stream 1 is the first of the second group of interleaved words to be interleaved in the interleaved stream, followed by the next interleaved word in stream 2 and then the next interleaved word in stream 3 · It should be noted that after the second group of interleaved words has been inserted into the interleaved stream, the next interleaved word in stream 2 will be the next interleaved word to be inserted in the stream because codeword # 7 is the lowest codeword in the second group of 25 words collapsed (followed by codeword # 8 in stream 1 and then codeword # 11 in stream 3)
Het gebruik vem de feitelijke decoder als model-eenheid voor de datastroom vormt een oplossing voor alle ontwerpkeuzen en vertragingen voor het creëren van de ineengeschoven stroom. Dit vormt geen grote 30 kostenpost voor duplexsysternen die toch al voorzien zijn van zowel codeereenheden als decodeereenheden. Opgemerkt wordt dat dit veralgemeniseerd kan worden tot iedere willekeurige parallelle groep van datawoorden met variabele lengte· (of verschillende afmetingen) die opgenomen worden in een deterministische volgorde.Using the actual decoder as a data stream model unit solves all design choices and delays in creating the collapsed stream. This is not a major cost for duplex systems that already have both encoders and decoders. It should be noted that this can be generalized to any parallel group of variable length data words (or different sizes) that are included in a deterministic order.
3535
Soorten codes en bitstroomgeneratoren voor parallelle decoderingTypes of codes and bitstream generators for parallel decoding
De onderhavige uitvinding zou bestaande codeereenheden kunnen toepassen, zoals Q-codeereenheden of B-codeereenheden, als bitstroom 1001317 20 genererende elementen die parallel worden gerepliceerd. Er kunnen echter ook andere codeereenheden en codes worden toegepast. De codeer-eenheden en hun bijbehorende codes, die binnen het kader van de uitvinding worden gebruikt, zijn eenvoudige codeereenheden.The present invention may employ existing encoders, such as Q encoders or B encoders, as bitstream 1001317 generating elements that are replicated in parallel. However, other encoders and codes can also be used. The encoders and their associated codes used within the scope of the invention are simple encoders.
5 In de onderhavige uitvinding biedt het gebruik van een bitstroom- generator met een eenvoudige code in plaats van een complexe code, zoals de aritmetische code die gebruikt wordt door de Q-codeereenheid of de multi-toestand codes die gebruikt worden door de B-codeereen-heid, voordelen. Een eenvoudige code is van voordeel omdat de hard-10 ware-implementatie veel sneller en eenvoudiger is en minder silicium vergt dan een complexe code.In the present invention, using a bitstream generator with a simple code instead of a complex code, such as the arithmetic code used by the Q encoder or the multi-state codes used by the B encoder -ness, benefits. A simple code is advantageous because the hard-10 ware implementation is much faster and easier and requires less silicon than a complex code.
Een ander voordeel van de onderhavige uitvinding is dat de code-ringsefficiëntie kan worden verbeterd. Een code die gebruik maakt van een eindige hoeveelheid toestandsinformatie kan niet perfect voldoen 15 aan de entropie-grens volgens Shannon voor iedere waarschijnlijkheid.Another advantage of the present invention is that the coding efficiency can be improved. A code using a finite amount of state information cannot perfectly meet the Shannon entropy limit for any probability.
VV
In hardware geïmplementeerde codes, die bekend zijn uit de stand der techniek, en die het mogelijk maken om met een enkele bitstroomgenera-tor meerdere waarschijnlijkheden of contexten te behandelen, hebben beperkingen die de codeerefficiëntie reduceren. Het verwijderen van de 20 beperkingen noodzakelijk voor meerdere contexten of waarschijnlijk-heidsklassen, maakt het gebruik mogelijk van codes die dichter in de buurt komen bij de entropie-grens volgens Shannon.Hardware-implemented codes, known in the art, that allow multiple probabilities or contexts to be handled with a single bitstream generator, have limitations that reduce coding efficiency. Removing the constraints necessary for multiple contexts or probability classes allows the use of codes closer to the Shannon entropy boundary.
R-codes 25 De code (en codeereenheid) gebruikt in een uitvoeringsvorm van de onderhavige uitvinding wordt aangeduid als de R-code. R-codes zijn adaptieve codes die een varieerbaar aantal identieke ingangssymbolen omvormen in een codewoord. In een uitvoeringsvorm zijn de R-codes geparameteriseerd, zodat veel verschillende waarschijnlijkheden kunnen 30 worden behandeld door een enkel decoder-ontwerp. Bovendien kunnen de R-codes volgens de onderhavige uitvinding worden gedecodeerd door eenvoudige en met hoge snelheid werkende hardware.R codes The code (and encoder) used in an embodiment of the present invention is referred to as the R code. R codes are adaptive codes that convert a variable number of identical input symbols into a code word. In one embodiment, the R codes are parameterized so that many different probabilities can be handled by a single decoder design. In addition, the R codes of the present invention can be decoded by simple and high speed hardware.
Volgens de onderhavige uitvinding worden R-codes gebruikt door een R-codeereenheid voor het uitvoeren van codering of decodering. In een 35 uitvoeringsvorm bestaat de R-codeereenheid uit een gecombineerde bit-stroomgenerator en waarschijnlijkheid-schattingsmodule. In fig. 1 bijvoorbeeld zou een R-codeereenheid de combinatie kunnen omvatten van de waarschijnlijkheid-schattingsmodule 102 en bitstroomgenerator 103 1001317 l 21 en de combinatie van de waarschijnlijkheid-schattingsmodule 105 “et bitstroomgenerator 106.According to the present invention, R codes are used by an R encoder to perform encoding or decoding. In an embodiment, the R encoder consists of a combined bitstream generator and probability estimation module. For example, in Fig. 1, an R encoder may comprise the combination of the probability estimation module 102 and bitstream generator 103 1001317-121 and the combination of the probability estimation module 105 and bitstream generator 106.
Codewoorden vertegenwoordigen runs van het meest waarschijnlijke symbool (MPS). Een MPS vertegenwoordigt de uitkomst van een binaire 5 beslissing met een waarschijnlijkheid van meer dan 50%. Anderzijds vertegenwoordigt het minst waarschijnlijke symbool (LPS) de uitkomst van een binaire beslissing met een waarschijnlijkheid van minder dan 50%. Opgemerkt wordt dat de twee uitkomsten even waarschijnlijk zijn en het niet belangrijk is of MPS of LPS wordt afgegeven zolang zowel 10 de codeereenheid als de decodeereenheid maar dezelfde beslissing nemen. De resulterende bitsequentie in het gecomprimeerde bestand is getoond in tabel A voor een gegeven parameter die aangeduid is als MAXRUN.Code words represent runs of the most likely symbol (MPS). An MPS represents the outcome of a binary decision with a probability of more than 50%. On the other hand, the least likely symbol (LPS) represents the outcome of a binary decision with a probability of less than 50%. It is noted that the two outcomes are equally likely and it is not important whether MPS or LPS is issued as long as both the encoder and the decoder make the same decision. The resulting bit sequence in the compressed file is shown in Table A for a given parameter designated MAXRUN.
15 Tabel A - Bitgeneratiecodering15 Table A - Bit Generation Coding
Codewoord Betekenis 0 MAXRUN vein opeenvolgende MPS'en IN N opeenvolgende MPS'en gevolgd door LPS,Code word Meaning 0 MAXRUN vein consecutive MPSs IN N consecutive MPSs followed by LPS,
N < MAXRUNN <MAXRUN
20 Voor de codering wordt het aantal MPS’en in een run geteld door een eenvoudige teller. Als deze teller gelijk is aan de MAXRUN-teller-waarde, dan wordt een 0 codewoord in de codestroom geëmitteerd en wordt de teller teruggesteld. Treedt er een LPS op dan wordt een 1 gevolgd door de bits N, die uniek het aantal MPS-symbolen vóór de LPS 25 beschrijven, geëmitteerd in de codestroom. (Opgemerkt wordt dat er meerdere meinieren zijn voor het toewijzen van de N bits die de run-lengte beschrijven). Opnieuw wordt de teller teruggesteld. Opgemerkt wordt dat het aantal bits dat nodig is voor N afhankelijk is van de waarde van MAXRUN. Opgemerkt wordt verder dat het 1-complement van de 30 codewoorden kan worden gebruikt.20 For coding, the number of MPSs in a run is counted by a simple counter. If this counter is equal to the MAXRUN counter value, a 0 code word is emitted into the code stream and the counter is reset. If an LPS occurs, a 1 followed by the bits N, which uniquely describe the number of MPS symbols before the LPS 25, is emitted into the code stream. (It should be noted that there are multiple rules for assigning the N bits describing the run length). The counter is reset again. It should be noted that the number of bits required for N depends on the value of MAXRUN. It is further noted that the 1's complement of the 30 codewords can be used.
Als het eerste bit in de codestroom 0 is, dan wordt voor het decoderen de waarde van MAXRUN ingebracht in de MPS-teller en wordt de LPS-indicatie gewist. Het 0 bit wordt vervolgens overgeslagen. Als het eerste bit een 1 is dan worden de volgende bits onderzocht om de bits 35 N op te sporen en de juiste tellerstand (N) wordt ingebracht in de MPS-teller en de LPS-indicator wordt ingesteld. Vervolgens worden de 1001317 22 codestroombits die het IN- codewoord bevatten overgeslagen.If the first bit in the code stream is 0, then the value of MAXRUN is input to the MPS counter for decoding and the LPS indication is cleared. The 0 bit is then skipped. If the first bit is 1, then the next bits are examined to find bits 35 N and the correct counter reading (N) is inserted into the MPS counter and the LPS indicator is set. Then, the 1001317 22 code stream bits containing the IN code word are skipped.
R-codes worden gegenereerd volgens de regels in tabel A. Opgemerkt wordt dat de definitie van een bepaalde R-code Rx(k) wordt gedefinieerd door MAXRUN. Bijvoorbeeld: 5 MAXRUN voor Rx(k) = x * 2*'1, dus 10 MAXRUN voor R2(k) = 2 * 2k*\ MAXRUN voor R3(k) = 3 * 2*'1, enz....R codes are generated according to the rules in Table A. It is noted that the definition of a given R code Rx (k) is defined by MAXRUN. For example: 5 MAXRUN for Rx (k) = x * 2 * '1, so 10 MAXRUN for R2 (k) = 2 * 2k * \ MAXRUN for R3 (k) = 3 * 2 *' 1, etc ...
Opgemerkt wordt dat R-codes een subset zijn van de Golomb-codes. 15 Opgemerkt wordt bovendien dat Rice-codes alleen R2(·) codes gebruiken. De R-codes maken het gebruik mogelijk van zowel R2(k) en R3(k) codes en andere Rn(k) codes indien gewenst. In een uitvoeringsvorm worden R2(k) en R3(k) codes gebruikt. Opgemerkt wordt dat Rn bestaat voor n = 2 en n is gelijk aan een willekeurig oneven getal (b.v. R2, R3, R5. 20 R7, R9. RH, R13. R15) · In een uitvoeringsvorm wordt voor de R2(k) code de runtelling r gecodeerd in N; de runtelling r wordt beschreven in k bits zodat IN wordt vertegenwoordigd door k+1 bits. Ook kunnen in een uitvoeringsvorm voor een R3(k) Code de bits N 1 bit bevatten waarmee aangegeven wordt of n<2(><‘1> of n^**"1 * en ofwel k-1 danwel k 25 bits om de runtelling r aan te geven, zodat de variabel N wordt uitgedrukt door een totaal van k respectievelijk k+1 bits. In andere uitvoeringsvormen kan het 1-complement van N worden gebruikt in het codewoord. In dit geval heeft het MPS de neiging om codestromen te produceren met veel nullen en LPS de neiging om codestromen te produceren 30 met veel enen.It is noted that R codes are a subset of the Golomb codes. 15 It should also be noted that Rice codes only use R2 (·) codes. The R codes allow the use of both R2 (k) and R3 (k) codes and other Rn (k) codes if desired. In one embodiment, R2 (k) and R3 (k) codes are used. It is noted that Rn exists for n = 2 and n is equal to any odd number (eg R2, R3, R5. 20 R7, R9. RH, R13. R15) · In one embodiment, for the R2 (k) code the run count r encoded in N; the run count r is described in k bits so that IN is represented by k + 1 bits. Also, in an embodiment for an R3 (k) Code, the bits may contain N 1 bit indicating whether n <2 (> <'1> or n ^ ** "1 * and either k-1 or k 25 bits to represent the to indicate run count r so that the variable N is expressed by a total of k and k + 1 bits In other embodiments, the 1's complement of N can be used in the codeword In this case, the MPS tends to with many zeros and LPS tend to produce code streams with many ones.
De tabel B, C, D en E tonen enkele efficiënte R-codes die gebruikt worden in een uitvoeringsvorm van de onderhavige uitvinding. Er wordt op gewezen dat andere runlengtecodes kunnen worden gebruikt binnen het kader van dé uitvinding. Een voorbeeld van een alternatieve runlengte-35 code voor R2(2) is getoond in tabel F. De tabellen G en H tonen voorbeelden van de in een uitvoeringsvorm gebruikte codes.Table B, C, D and E show some efficient R codes used in an embodiment of the present invention. It is pointed out that other run length codes can be used within the scope of the invention. An example of an alternative run length-35 code for R2 (2) is shown in Table F. Tables G and H show examples of the codes used in one embodiment.
1001317 231001317 23
Tabel B - R2(0) Tabel C - R2(l)Table B - R2 (0) Table C - R2 (1)
Ongecodeerde Codewoord Ongecodeerde Codewoord data data ^9 sesse aaacsBssm 0 0 00 o 5 11 01 10 1 11Uncoded Codeword Uncoded Codeword data data ^ 9 sesse aaacsBssm 0 0 00 o 5 11 01 10 1 11
Tabel D - R3(l) Tabel E - R2(2)Table D - R3 (l) Table E - R2 (2)
Ongecodeerde Codewoord Ongecodeerde Codewoord 10 data dataUncoded Codeword Uncoded Codeword 10 data data
SSS&SS^S^^^^^^SSSSS OBBEBSTOnaBSSSSSS^BSSS & SS ^ S ^^^^^^ SSSSS OBBEBSTOnaBSSSSSS ^ B
000 0 0000 o 001 100 0001 100 01 101 001 101 1 11 01 110 15 1 111000 0 0000 o 001 100 0001 100 01 101 001 101 1 11 01 110 15 1 111
Tabel F - Alternatief R2(2) , Tabel G - Alternatief R3(2) CodeTable F - Alternative R2 (2), Table G - Alternative R3 (2) Code
Alternatief R2(2) Voorkeur R3(2) 0000 0 000000 0 20 0001 111 000001 1000 001 101 00001 1010 01 110 0001 1001 1 100 001 1011 01 110 25 . 1 111 1001317 24Alternative R2 (2) Preferred R3 (2) 0000 0 000000 0 20 0001 111 000001 1000 001 101 00001 1010 01 110 0001 1001 1 100 001 1011 01 110 25. 1 111 1001317 24
Tabel Η - Ander alternatief R2(2) CodeTable Η - Other alternative R2 (2) Code
Voorkeur R2 (2} 0000 0 5 0001 100 001 110 01 101 1 111 10 Waarschi.inli.ikheid-schattingsmodel voor R-codesPreference R2 (2} 0000 0 5 0001 100 001 110 01 101 1 111 10 Alertness estimation model for R codes
In een uitvoeringsvorm voert de R2(0) code geen codering uit: een 0 aan de ingang wordt gecodeerd in een 0 en een cijfer 1 aan de ingang wordt gecodeerd in een 1 (of andersom) en is optimaal voor waarschijnlijkheden gelijk aan 50%. De R2(l) code van de voorkeursuitvoerings-15 vorm is optimaal voor waarschijnlijkheden dicht bij 0,707 (d.w.z.In one embodiment, the R2 (0) code does not encode: a 0 at the input is encoded at 0 and a digit 1 at the input is encoded at 1 (or vice versa) and is optimal for probabilities equal to 50%. The R2 (1) code of the preferred embodiment 15 is optimal for probabilities close to 0.707 (i.e.
70,7%) en de R3(l) is optimaal voor een 0,794 waarschijnlijkheid (79.4%). -De R2(2) code is optimaal voor de 0,84l waarschijnlijkheid (84,1%). De onderstaande tabel I toont de nagenoeg optimale runlengte-code waarbij de waarschijnlijkheidsafwijking wordt gedefinieerd door 20 de volgende formule:70.7%) and the R3 (l) is optimal for a .794 probability (79.4%). -The R2 (2) code is optimal for the 0.84l probability (84.1%). Table I below shows the nearly optimal run length code where the probability deviation is defined by the following formula:
Waarschijnlijkheidsafwijking = -1og2 (LPS).Probability deviation = -1og2 (LPS).
1001317 251001317 25
Tabel ITable I
Waarschijnlijkheid Waarschijnlijkheids- Beste Golomb-code afwijking 0,500 1,00 R2(0) 0,707 1,77 R2(l) 5 Ο,Μΐ 2,65 R2(2) 0,917 3.59 R2(3) 0,958 4,56 R2(4) 0,979 5.54 R2(5) 0,989 6.54 R2(6) 10 0,995 7.53 R2(7) 0.997 8,53 R2(8) 0.999 9.53 R2(9)Probability Probability Best Golomb Code Deviation 0.500 1.00 R2 (0) 0.707 1.77 R2 (L) 5 Ο, Μΐ 2.65 R2 (2) 0.917 3.59 R2 (3) 0.958 4.56 R2 (4) 0.979 5.54 R2 (5) 0.989 6.54 R2 (6) 10 0.995 7.53 R2 (7) 0.997 8.53 R2 (8) 0.999 9.53 R2 (9)
Opgemerkt wordt dat de codes nagenoeg optimaal zijn omdat het waar-15 schijnlijkheidstraject, aangegeven door de waarschijnlijkheidsafwij-king, de ruimte relatief gelijkmatig inneemt zelfs alhoewel de optimale waarschijnlijkheden in de hogere k waarden niet zoveel verschillen als in de lagere k waarden.It should be noted that the codes are nearly optimal because the probability range, indicated by the probability deviation, occupies the space relatively evenly, although the optimal probabilities in the higher k values do not differ as much as in the lower k values.
Verwezen wordt naar de waarschijnlijkheid waarbij een R-code opti-20 maal is. In feite voldoet alleen R2(2) aan de entropiecurve. De echte overweging is voor welke reeks van waarschijnlijkheden is een bepaalde R-codeereenheid beter dan alle andere R-codes in een bepaalde klasse. De navolgende tabellen verschaffen de waarschijnlijkheidstrajecten voor de klasse van R2-codes en de klasse van R2- en R3~codes.Reference is made to the probability where an R code is optimum 20 times. In fact, only R2 (2) satisfies the entropy curve. The real consideration is for what range of probabilities a given R encoder is better than any other R codes in a given class. The following tables provide the probability ranges for the class of R2 codes and the class of R2 and R3 codes.
25 Voor de klasse van R2-codes van 0 tot 12 zijn de trajecten te vinden in de onderstaande tabel J. Wanneer alleen R2-codes worden gebruikt is bijvoorbeeld R2(0) het beste indien 0,50 £ waarschijnlijkheid £ 0,6l80. Soortgelijk is R2(l) het beste wanneer 0,6l80 £ waarschijnlijkheid £ 0,7862.For the class of R2 codes from 0 to 12 the ranges can be found in table J below. When only R2 codes are used, for example R2 (0) is best if 0.50 £ probability £ 0.6l80. Similarly, R2 (l) is best when 0.6l80 £ probability £ 0.7862.
30 10 U 13 1 7 2630 10 U 13 1 7 26
Tabel· J - R2 codes van 0 tot 12 Code Waarschijnlijkheden R2(0) 0,6180 R2(l) 0,7862 5 R2(2) 0,8867 R2(3) 0,9416 R2(4) 0,9704 R2(5) 0.9851 R2(6) 0.9925 10 R2(7) 0,9962 R2(8) 0,9981 R2(9) 0,9991 R2(10) 0,9995 R2(ll) 0.9998 15 R2(12)Table · J - R2 codes from 0 to 12 Code Probabilities R2 (0) 0.6180 R2 (l) 0.7862 5 R2 (2) 0.8867 R2 (3) 0.9416 R2 (4) 0.9704 R2 ( 5) 0.9851 R2 (6) 0.9925 10 R2 (7) 0.9962 R2 (8) 0.9981 R2 (9) 0.9991 R2 (10) 0.9995 R2 (ll) 0.9998 15 R2 (12)
Voor de klasse van R2- en R3~codes zijn de oplossingen aangegeven in de onderstaande tabel K. Wanneer bijvoorbeeld R2- en R3~codes worden gebruikt, is R2(l) het best indien 0,6l80 s waarschijnlijkheid £ 20 0,7549.For the class of R2 and R3 codes, the solutions are shown in Table K below. For example, when R2 and R3 codes are used, R2 (1) is best if 0.6l80 s probability £ 20 0.7549.
1001317 271001317 27
Tabel K - R2 en R3 codes lengten kleiner dan of gelijk aan 13 bitsTable K - R2 and R3 codes lengths less than or equal to 13 bits
Code Waarschijnlijkheden R2(0) 0,6180 5 R2(l) 0,75*19 R3(l) 0,8192 R2(2) 0,8688 R3(2) 0,9051 R2(3) 0,9321 10 R3(3) 0,951*1 R2(4) 0,9655 R3(*0 0.975*1 R2(5) 0,9826 R3(5) 0,9876 15 R2(6) 0,9913 R3(6) 0,9938 R2(7) 0,9956 R3(7) 0,9969 R2(8) 0,9978 20 R3(8) 0,998*1 R2(9) 0,9989 R3(9) 0,9992 R2(10) 0,9995 R3dO) 0,9996 25 R2(ll) 0,9997 R3(ll) 0,9998 R2(12) 100 1317 28Code Probabilities R2 (0) 0.6180 5 R2 (l) 0.75 * 19 R3 (l) 0.8192 R2 (2) 0.8688 R3 (2) 0.9051 R2 (3) 0.9321 10 R3 ( 3) 0.951 * 1 R2 (4) 0.9655 R3 (* 0 0.975 * 1 R2 (5) 0.9826 R3 (5) 0.9876 15 R2 (6) 0.9913 R3 (6) 0.9938 R2 ( 7) 0.9956 R3 (7) 0.9969 R2 (8) 0.9978 20 R3 (8) 0.998 * 1 R2 (9) 0.9989 R3 (9) 0.9992 R2 (10) 0.9995 R3dO) 0.9996 25 R2 (ll) 0.9997 R3 (ll) 0.9998 R2 (12) 100 1317 28
Een R2(k) voor een vaste k wordt een runlengtecode genoemd. Een vaste k is echter alleen goed voor een reeks van waarschijnlijkheden. Opgemerkt wordt dat indien de code dicht bij een optimale waarschijnlijkheid is, een R-code volgens de onderhavige uitvinding een 0 ge-5 bruikt en IN codewoorden met ruwweg gelijke frequentie. Met andere woorden, de helft van de tijd geeft de R-codeereenheid volgens de onderhavige uitvinding aan de uitgang de ene code af en de andere helft van de tijd geeft de R-codeereenheid een andere code af. Door het aantal van 0 en IN codewoorden te onderzoeken kan vastgesteld 10 worden of de beste code wordt gebruikt. Dat wil zeggen, als er teveel IN codewoorden aan de uitgang worden afgegeven dan is de runlengte te Icing; als er anderzijds teveel 0 codewoorden worden afgegeven dan is de runlengte te kort.An R2 (k) for a fixed k is called a run length code. However, a solid k is only good for a range of probabilities. It is noted that if the code is close to an optimal probability, an R code of the present invention uses a 0 -5 and IN code words of roughly equal frequency. In other words, half of the time, the R encoder of the present invention outputs one code at the output and the other half of the time, the R encoder issues another code. By examining the number of 0 and IN code words, it can be determined whether the best code is used. That is, if too many IN code words are output at the output, the run length is Icing; on the other hand, if too many 0 code words are output, the run length is too short.
Het waarschijnlijkheid-schattingsmodel dat door Langdon wordt 15 gebruikt onderzoekt het eerste bit van elk codewoord om vast te stellen of de bronwaarschijnlijkheid boven of onder de huidige schatting ligt. Zie G.G. Langdon, "An Adaptive Run-Length Coding Algorithm", IBM Technical Disclosure Bulletin, Vol. 26, nr. 7B, december 1983· Gebaseerd op deze vaststelling wordt k verhoogd of verlaagd. Als bijvoor-20 beeld een codewoord, dat MPS aangeeft, wordt aangetroffen dan is de waarschijnlijkheidsschatting te laag. Volgens Langdon wordt derhalve k verhoogd met 1 voor elk 0 codewoord. Als een codewoord, dat minder dan MAXRUN MPS aangeeft, gevolgd door een LPS (b.v. IN codewoord) wordt aangetroffen dan is de waarschijnlijkheidsschatting te hoog. Volgens 25 Langdon wordt dan k met 1 verminderd voor elk IN codewoord.The probability estimation model used by Langdon examines the first bit of each codeword to determine if the source probability is above or below the current estimate. See G.G. Langdon, "An Adaptive Run-Length Coding Algorithm," IBM Technical Disclosure Bulletin, Vol. 26, No. 7B, December 1983 · Based on this finding, k is increased or decreased. For example, if a code word indicating MPS is found, the probability estimate is too low. According to Langdon, therefore, k is increased by 1 for every 0 codeword. If a code word indicating less than MAXRUN MPS followed by an LPS (e.g. IN code word) is found, the probability estimate is too high. According to Langdon, k is then reduced by 1 for each IN codeword.
De onderhavige uitvinding maakt een meer complexe waarschijnlijkheidsschatting mogelijk dan een eenvoudige toename of afname van k met 1 bij elk codewoord. De onderhavige uitvinding omvat een waarschijn-lijkheid-schattingsmoduletoestand die de te gebruiken code bepaalt. 30 Veel toestanden kunnen dezelfde code gebruiken. Codes worden toegewezen aan toestanden gebruikmakend van een toestandstabel of toestands-machine.The present invention allows for a more complex probability estimate than a simple increase or decrease of k by 1 with each codeword. The present invention includes a probability estimation module state that determines the code to be used. 30 Many states can use the same code. Codes are assigned to states using a state table or state machine.
In een uitvoeringsvorm van de onderhavige uitvinding wisselt de waarschijnlijkheidsschatting van toestand bij elk codewoord aan de 35 uitgang. De waarschijnlijkheid-schattingsmodule verhoogt of verlaagt derhalve de waarschijnlijkheidsschatting afhankelijk van het feit of een codewoord begint met een 0 of een 1. Als bijvoorbeeld een "0" codewoord aan de uitgang wordt afgegeven dan vindt een toename van de 1001317 1 29 schatting van de MPS-waarschijnlijkheid plaats. Als anderzijds een "1" codewoord aan de uitgang wordt afgegeven dan wordt de schatting van de MPS-waarschijnlijkheid verlaagd.In one embodiment of the present invention, the likelihood estimate changes state with each codeword at the output. The probability estimation module therefore increases or decreases the probability estimate depending on whether a codeword starts with a 0 or a 1. For example, if a "0" codeword is output, an increase in the 1001317 1 29 estimate of the MPS -likely place. On the other hand, if a "1" codeword is output, the MPS probability estimate is decreased.
De Langdon-codeereenheid volgens de stand der techniek gebruikt 5 alleen R2(k) codes en verhoogt of verlaagt k voor elk codewoord. De onderhavige uitvinding gebruikt afwisselend R2(k) en R3(k) codes in samenhang met de toestandstabel of toestandsmachine zodat de aanpas-singssnelheid kan worden toegesneden op de applicatie. Dat wil zeggen, als er een kleine hoeveelheid stationaire data is, dan moet de aanpas-10 sing sneller plaatsvinden resulterend in een meer optimale codering, en indien er een grotere hoeveelheid stationaire data aanwezig is dan kan de aanpassingstijd langer zijn zodat de codering gekozen kan worden om een betere compressie van de rest van de data te bereiken. Opgemerkt wordt dat indien variabele aantallen toestandsveranderingen 15 kunnen optreden ook applicatie-specifieke kenmerken de aanpassings-snelheid kunnen beïnvloeden. Vanwege de aard van de R-codes is de schatting voor de R-codes eenvoudig en vereist weinig hardware, alhoewel het zeer krachtig is. Fig. 33 illustreert de grafiek van de co-deer-efficiëntie (codelengte genormaliseerd met betrekking tot de 20 entropie) als functie van de MPS-waarschijnlijkheid. Fig. 33 toont hoe sommige van de R-codes volgens de onderhavige uitvinding de waar-schijnlijkheidsruimte bedekken. Als voorbeeld toont fig. 33 dat voor een MPS-waarschijnlijkheid van ongeveer 0,55 de efficiëntie van de R2(0) code gelijk is aan 1,01 (of 1% slechter dan) de entropiegrens. 25 In tegenstelling daarmee heeft de R2(l) code een efficiëntie van 1,09 (of 3% slechter dein) de entropiegrens. Dit voorbeeld toont dat het gebruik van de verkeerde code voor dit bepaalde geval met lage waarschijnlijkheid een &% verlies in codeer-efficiëntie veroorzaakt.The prior art Langdon encoder uses only R2 (k) codes and increases or decreases k for each code word. The present invention alternately uses R2 (k) and R3 (k) codes in conjunction with the state table or state machine so that the rate of adaptation can be tailored to the application. That is, if there is a small amount of stationary data, then the adaptation must be faster resulting in more optimal encoding, and if there is a larger amount of stationary data present then the adaptation time may be longer so that the encoding can be chosen to achieve better compression of the rest of the data. It is noted that if variable numbers of state changes can occur, application-specific features can also influence the rate of adaptation. Due to the nature of the R codes, the estimate for the R codes is simple and requires little hardware, although it is very powerful. Fig. 33 illustrates the plot of coding efficiency (code length normalized with respect to entropy) as a function of MPS probability. Fig. 33 shows how some of the R codes of the present invention cover the probability space. As an example, Figure 33 shows that for an MPS probability of about 0.55, the efficiency of the R2 (0) code equals 1.01 (or 1% worse than) the entropy limit. In contrast, the R2 (l) code has an efficiency of 1.09 (or 3% worse than) the entropy limit. This example shows that using the wrong code for this particular low probability case causes a &% loss in coding efficiency.
Het opnemen van de R3(k) codes maakt het mogelijk een grotere 30 waarschijnlijkheidsruimte te bedekken met een grotere efficiëntie. Een voorbeeld van een waarschijnlijkheid-schattingstoestandstabel volgens de onderhavige uitvinding is getoond in fig. 5. De waarschijnlijkheid-schattingstoestandstabel uit fig» 5 toont zowel een toestandsteller alsook de code die geassocieerd is met elk van de afzonderlijke toe-35 standen in de tabel. Opgemerkt wordt dat de tabel zowel positieve als negatieve toestanden kent. Zoals getoond heeft de tabel 37 positieve toestanden en 37 negatieve toestanden, met inbegrip van nultoestanden. De negatieve toestanden duiden op een andere MPS dan de positieve 10013Π 30 toestemden. In een uitvoeringsvorm kunnen de negatieve toestanden worden gebruikt indien de MPS gelijk is aem 1 en de positieve toestanden kunnen worden gebruikt indien de HPS gelijk is aan 0 of omgekeerd. Opgemerkt wordt dat de in fig. 5 getoonde tabel slechts een voorbeeld 5 vormt en dat andere tabellen meer of minder toestanden kunnen hebben met een verschillende toestandstoewijzing.The inclusion of the R3 (k) codes makes it possible to cover a larger probability space with greater efficiency. An example of a probability estimate state table of the present invention is shown in Fig. 5. The probability estimate state table of Fig. 5 shows both a state counter and the code associated with each of the individual states in the table. It is noted that the table has both positive and negative states. As shown, the table has 37 positive states and 37 negative states, including zero states. The negative states indicate a different MPS from the positive 10013Π30 consents. In one embodiment, the negative states can be used if the MPS is equal to 1 and the positive states can be used if the HPS is equal to 0 or vice versa. It is noted that the table shown in Fig. 5 is only an example 5 and that other tables may have more or less states with different state assignment.
Aanvankelijk bevindt de codeereenheid zich in toestand 0 hetgeen de R2(0) code (d.w.z. geen code) is voor een waarschijnlijkheidsschat-ting gelijk aan 0,50. Na verwerking van elk codewoord wordt de toe-10 standsteller verhoogd of verlaagd afhankelijk van het eerste bit van het codewoord. In een uitvoeringsvorm wordt bij een codewoord 0 de waarde van de toestandstelIer opgehoogd; een codewoord beginnend met 1 leidt tot vermindering van de waarde van de toestandsteller. Elk codewoord veroorzaakt derhalve een verandering van de toestand van de 15 toestandsteller. Met andere woorden, de toestand van de waarschijn-lijkheid-schattingsmodule verandert. De opeenvolgende toestanden kunnen echter geassocieerd zijn met dezelfde code. In dat geval wordt de waarschijnlijkheidsschatting verkregen zonder dat de codes bij elk codewoord veranderen. Met andere woorden, de toestand wordt veranderd 20 voor elk codewoord; de toestand wordt echter afgebeeld in dezelfde waarschijnlijkheden op bepaalde tijdstippen. De toestanden 5 t/m -5 gebruiken bijvoorbeeld allemaal de-R2(0) code, terwijl de toestanden 6 t/m 11 en -6 t/m -11 de R2(l) code gebruiken. Gebruikmakend van de toestandstabel volgens de onderhavige uitvinding kan de waarschijn-25 lijkheidsschatting blijven met dezelfde codeereenheid op een niet-lineaire wijze.Initially, the encoder is in state 0 which is the R2 (0) code (i.e. no code) for a probability estimate equal to 0.50. After processing each codeword, the operator is increased or decreased depending on the first bit of the codeword. In one embodiment, at a code word 0, the value of the state counter is increased; a code word starting with 1 decreases the value of the state counter. Each codeword therefore causes a change in the state of the state counter. In other words, the state of the probability estimation module changes. However, the successive states can be associated with the same code. In that case, the probability estimate is obtained without the codes changing with each code word. In other words, the state is changed for each codeword; however, the condition is depicted in the same probabilities at certain times. For example, states 5 through -5 all use the -R2 (0) code, while states 6 through 11 and -6 through -11 use the R2 (1) code. Using the state table of the present invention, the probability estimate can remain with the same encoder in a non-linear fashion.
Er wordt op gewezen dat meer toestanden met dezelfde R-code zijn opgenomen voor de lagere waarschijnlijkheden. Dat is gedaan omdat het verlies aem efficiëntie, indien de verkeerde code wordt gebruikt bij 30 lagere waarschijnlijkheden groot is. De aard van de runlengtecodes-toestandstabel is een overgang tussen de toestanden na elk codewoord. Wanneer in een toestandstabel die ontworpen is om codes te veranderen bij elke toestandsverandering wordt omgeschakeld tussen toestanden met lagere waarschijnlijkheden dan schakelt de code tussen een code die 35 zeer dicht ligt bij de entropie-efficiëntiegrens en een code die ver van de entropie-efficiëntiegrens verwijderd is. Een toestandsovergang kern dus resulteren in een straf (in termen van het aantal gecodeerde databits). Uit de stand der techniek bekende waarschijnlijkheid-schat- 1001317 \ 31 tingsmodules, zoals de waarschijnlijkheid-schattingsmodule volgens Langdon, verliezen prestaties vanwege deze straf.It is noted that more states with the same R code are included for the lower probabilities. This has been done because the loss of efficiency if the wrong code is used at 30 lower probabilities is great. The nature of the run-length codes state table is a transition between the states after each code word. When a state table designed to change codes with each state change switches between states with lower probabilities, the code switches between a code very close to the entropy efficiency limit and a code far from the entropy efficiency limit . A state transition core thus result in a penalty (in terms of the number of encrypted data bits). Prior art probability modules, such as the Langdon probability module, lose performance because of this penalty.
In de runlengtecodes met hogere waarschijnlijkheid is de straf voor het blijven in een verkeerde code niet zo groot. Derhalve worden 5 volgens de uitvinding extra toestanden toegevoegd bij de lagere waarschijnlijkheden, zodat het veranderen of schakelen tussen twee correcte toestanden wordt verhoogd en daardoor de codeer-inefficiëntie wordt verlaagd.In the higher probability run length codes, the penalty for staying in the wrong code isn't that great. Therefore, according to the invention, additional states are added at the lower probabilities, so that changing or switching between two correct states is increased and thereby the coding inefficiency is reduced.
Opgemerkt wordt dat in bepaalde uitvoeringsvormen de codeereenheid 10 een initiële waarschijnlijkheid-schattingstoestand kan hebben. Met andere woorden, de codeereenheid kan in een vooraf bepaalde toestand starten, bijvoorbeeld toestand 18. In een uitvoeringsvorm kan een andere toestendstabel worden gebruikt zodat sommige toestanden zullen worden gebruikt voor de eerste symbolen teneinde een snelle aanpassing 15 mogelijk te maken, en een tweede toestandstabel kan worden gebruikt voor de resterende symbolen waarbij een langzame adaptatie plaatsvindt teneinde een fijn-afstemming van de waarschijnlijkheidsschatting mogelijk te maken. Op deze wijze is de codeereenheid in staat om sneller in het codeerproces een meer efficiënte code te gebruiken. In een 20 andere uitvoeringsvorm zou de codestroom een initiële waarschijnlijkheidsschatting voor elke context kunnen specificeren. In een uitvoeringsvorm worden de verhogingen en. verlagingen niet uitgevoerd aan de hand van een vast aantal (b.v. 1). In plaats daarvan kan de waar schi jnli jkheid-schattingstoestand worden bijgewerkt met een variabel 25 bedrag afhankelijk van de waarde van de alreeds verwerkte data of de veranderingshoeveelheid in de data (stabiliteit). Voorbeelden van dergelijke tabellen zijn de in het onderstaande beschreven tabellen U-Y.It is noted that in certain embodiments, the encoder 10 may have an initial probability estimation state. In other words, the encoder can start in a predetermined state, for example state 18. In one embodiment, a different state table may be used so that some states will be used for the first symbols to allow for quick adjustment, and a second state table can be used for the remaining symbols with a slow adaptation to allow fine tuning of the probability estimate. In this way, the encoder is able to use a more efficient code faster in the encoding process. In another embodiment, the code stream could specify an initial probability estimate for each context. In one embodiment, the increases and. reductions not made by a fixed number (e.g. 1). Instead, the probability estimate state can be updated with a variable amount depending on the value of the data already processed or the amount of change in the data (stability). Examples of such tables are Tables U-Y described below.
Als de toestandstabel symmetrisch is, zoals het in fig. 5 getoonde 30 voorbeeld, dan behoeft slechts de helft ervan (met inbegrip van de nultoestand) te worden opgeslagen of in hardware geïmplementeerd. In een uitvoeringsvorm wordt het toestandsnummer opgeslagen in comple-mentvorm (l'en) teneinde voordeel»te halen uit deze symmetrie. Op deze wijze kan ‘de tabel worden gebruikt door de absolute waarde te nemen 35 van het enen-complementaantal teneinde de toestand te bepalen en het teken te onderzoeken om vast te stellen of het MPS een 1 of 0 is. Dit laat een reductie van de hardware, nodig voor het verhogen of verlagen van de toestand, toe omdat de absolute waarde van de toestand wordt 100131T ' 32 gebruikt voor het indexeren van de tabel en de berekening van de absolute waarde van het enen-complementgetal triviaal is. In een andere uitvoeringsvorm kan voor een grotere efficiëntie van de hardware een toestendstabel worden vervangen door een bedrade schakeling of een 5 programmeerbare toestandsmachine. Een bedrade schakeling naar de code-omvormer is één implementatie van de toestandstabel.If the state table is symmetrical, such as the example shown in Fig. 5, then only half of it (including the zero state) needs to be stored or implemented in hardware. In one embodiment, the state number is stored in complement form (s) to take advantage of this symmetry. In this way, the table can be used by taking the absolute value of the ones complement number to determine the state and examine the sign to determine whether the MPS is a 1 or 0. This allows a reduction of the hardware needed to raise or lower the state, because the absolute value of the state is used 100131T '32 for indexing the table and calculating the absolute value of the ones complement number trivially is. In another embodiment, for greater hardware efficiency, a power table can be replaced with a wired circuit or a programmable state machine. A wired switch to the code converter is one implementation of the state table.
Overzicht van het gebalanceerde parallelle entropie-codeerstelselOverview of the balanced parallel entropy coding system
De onderhavige verschaft een gebalanceerd parallel entropie-co-10 deerstelsel. Het parallelle entropie-codeerstelsel omvat zowel codering als decodering in echte tijd uitgevoerd met in hoge snelheid en tegen lage kosten werkende hardware. De onderhavige uitvinding kan worden gebruikt in talrijke verliesvrije codeertoepassingen, met inbegrip van, maar niet daartoe begrensd, in werkelijke tijd werkende 15 compressie/decompressie van data op beschrijfbare optische of magnetische schijven, in werkelijke tijd uitgevoerde compressie/decompressie van data in computernetwerken, in werkelijke tijd uitgevoerde compressie/decompressie vein beelddata in een gecomprimeerd framegeheugen in een multifunctiemachine (b.v. kopieermachine, facsimilé-machine, scan-20 ner, printer, enz.) en in werkelijke tijd uitgevoerde compressie/decompressie van audiodata.The present provides a balanced parallel entropy coding system. The parallel entropy coding system includes both real time coding and decoding with high speed and low cost hardware. The present invention can be used in numerous lossless encoding applications, including, but not limited to, real-time compression / decompression of data on recordable optical or magnetic disks, real-time compression / decompression of data in computer networks, in real-time compression / decompression vein image data in a compressed frame memory in a multifunction machine (eg copier, facsimile machine, scaner, printer, etc.) and real-time compression / decompression of audio data.
Het specificeren van de prestaties van een codeereenheid vereist enige aandacht. In een rechttoe rechtaan ontwerp wordt een codeereenheid ontworpen die een bepaalde snelheid bereikt voor de oorspronke-25 lijke data uitgaande van een voldoende snel gecodeerd datakanaal. In veel toepassingen echter heeft de codeereenheid ten doel het gecodeerde datakanaal efficiënt te gebruiken. Het gebruik van het gecodeerde datakanaal wordt beïnvloed door de maximale burstsnelheid van de oorspronkelijke data-interface, de codeersnelheid en de compressie die op 30 de data wordt uitgevoerd. De invloed van deze effecten moet worden beschouwd over een plaatselijke hoeveelheid data die afhangt van de buffercapaciteit in de codeereenheid. Het is wenselijk om te beschikken over een codeereenheid die Jiet gecodeerde datakanaal efficiënt gebruikt en’ nochtans de codeersnelheid en een hoge mate van compressie 35 handhaaft en tevens geschikt is voor de maximale burstsnelheid.Specifying the performance of an encoder requires some attention. In a straightforward design, an encoder is designed that achieves a certain speed for the original data from a sufficiently fast coded data channel. In many applications, however, the encoder aims to use the encrypted data channel efficiently. The use of the encoded data channel is affected by the maximum burst rate of the original data interface, the encoding rate and the compression performed on the data. The influence of these effects must be considered on a local amount of data depending on the buffer capacity in the encoder. It is desirable to have an encoder that utilizes your encoded data channel efficiently and yet maintains the encoding rate and a high degree of compression and is also capable of the maximum burst rate.
In het navolgende wordt een codeereenheid volgens de onderhavige uitvinding beschreven. Ook een decodeereenheid die gebruikt wordt samen met de codeereenheid wordt beschreven.An encoder according to the present invention is described below. A decoder used in conjunction with the encoder is also described.
1001317 331001317 33
Codering In werkeli jke ti.ld volgens de onderhavige uitvindingCoding Actually according to the present invention
Fig. 6 is een blokschema van het codeerstelsel volgens de onderhavige uitvinding. In een uitvoeringsvorm voert de codeereenheid een codering in werkelijke tijd uit. Verwijzend naar fig. 6 is het codeer-5 stelsel 600 voorzien van een codeereenheid 602 die gekoppeld is met een contextmodel (CM) & toestandsgeheugen 603 voor het genereren van gecodeerde informatie in de vorm van codewoord-informatie 604 in responsie op de oorspronkelijke data 601. De codewoord-informatie 60*1 wordt ontvangen door een herschikkingseenheid 606 die gekoppeld is met 10 een herschikkingsgeheugen 607· In responsie op de codewoord-informatie 604 genereert de herschikkingseenheid 6θ6 in samenwerking met het herschikkingsgeheugen 607 een gecodeerde datastroom 608. Er wordt op gewezen dat het codeerstelsel 600 niet beperkt is tot operaties op codewoorden en in andere uitvoeringsvormen kan werken op discrete 15 analoge golfvormen, bitpatronen met variabele lengte, kanaalsymbolen, alfabetten, gebeurtenissen, enz. binnen het kader van de onderhavige uitvinding.Fig. 6 is a block diagram of the coding system of the present invention. In one embodiment, the encoder performs real-time encoding. Referring to FIG. 6, the encoding system 600 includes an encoding unit 602 coupled to a context model (CM) & state memory 603 for generating encoded information in the form of codeword information 604 in response to the original data 601. The codeword information 60 * 1 is received by a rearrangement unit 606 coupled to a rearrangement memory 607 · In response to the codeword information 604, the rearrangement unit 6θ6 in conjunction with the rearrangement memory 607 generates an encoded data stream 608. coding system 600 is not limited to operations on codewords and in other embodiments may operate on discrete analog waveforms, variable length bit patterns, channel symbols, alphabets, events, etc. within the scope of the present invention.
De codeereenheid 602 is voorzien van een contextmodel (CM), een waarschijnlijkheid-schattingsmachine (PEM) en een bitstroomgenerator 20 (BG). Het contextmodel en de PEM {waarschijnlijkheid-schattingsmachi-ne) in de codeereenheid 602 zijn in hoofdzaak identiek aan die in de decodeereenheid (met uitzondering van de datastroomrichting). De bit-generator van de codeereenheid 602 is soortgelijk aan de decodeer-bitgenerator en wordt in het volgende beschreven. Het resultaat van de 25 codering door de codeereenheid 602 is een uitgangssignaal van nul of meer bits dat de oorspronkelijke data vertegenwoordigt. In een uitvoeringsvorm omvat het uitgangssignaal van de bitstroomgenerator ook een of meer stuursignalen. Deze stuursignalen leveren een stuurweg voor de data in de bitstroom. In een uitvoeringsvorm kan de codewoord-informa-30 tie een runstart-indicatie, een runeinde-indicatie, een codewoord en een index die de runtelling (op grond vein context danwel waarschijn-lijkheidsklasse) voor het codewoord identificeert, omvatten. Een uitvoeringsvorm vem de bitstroomgenerator volgens de onderhavige uitvinding wordt ïn het volgende beschreven.The encoder 602 includes a context model (CM), a probability estimator (PEM) and a bit stream generator 20 (BG). The context model and the PEM (probability estimator) in the encoder 602 are substantially identical to those in the decoder (except for the data flow direction). The bit generator of the encoder 602 is similar to the decoder bit generator and is described in the following. The result of the encoding by the encoder 602 is an output of zero or more bits representing the original data. In one embodiment, the output from the bitstream generator also includes one or more control signals. These control signals provide a control path for the data in the bitstream. In one embodiment, the codeword information may include a run-start indication, a run-end indication, a codeword, and an index identifying the run count (by context or probability class) for the codeword. An embodiment of the bitstream generator of the present invention is described below.
35 De herschikkingseenheid 606 ontvangt de bits en de stuursignalen gegenereerd door de bitstroomgenerator (indien aanwezig) van de codeereenheid 602 en genereert gecodeerde data. In een uitvoeringsvorm omvat de gecodeerde data aan de uitgang van de herschikkingseenheid 1001317 34 606 een reeks van ineengeschoven woorden.The rearrangement unit 606 receives the bits and the control signals generated by the bitstream generator (if any) from the encoder 602 and generates encoded data. In one embodiment, the coded data at the output of the rearrangement unit 1001317 34 606 includes a string of interleaved words.
In een uitvoeringsvorm voert de herschikkingseenheid 606 twee functies uit. De herschikkingseenheid 606 verplaatst codewoorden van het einde van runs, gecreëerd door de codeereenheid naar het begin van 5 de runs zoals nodig bij de decodeereenheid en combineert codewoorden met variabele lengte tot ineengeschoven woorden met een vaste lengte en geeft deze aan de uitgang af in de juiste volgorde zoals vereist door de decodeereenheid.In one embodiment, the rearrangement unit 606 performs two functions. The rearrangement unit 606 moves codewords from the end of runs created by the encoder to the beginning of 5 runs as needed at the decoder and combines variable length codewords into fixed length interleaved words and outputs them in the correct order as required by the decoder.
De herschikkingseenheid 606 gebruikt een tijdelijk herschikkings-10 geheugen 607. In een uitvoeringsvorm waarin de codering wordt uitgevoerd in een werkstation kan het tijdelijke herschikkingsgeheugen 607 meer dan 100 megabyte groot zijn. In het gebalanceerde stelsel volgens de uitvinding is het tijdelijke opslaggeheugen 607 veel kleiner (b.v. ongeveer 1 Kbyte) en vast. In een uitvoeringsvorm wordt dus de code-15 ring in werkelijke tijd uitgevoerd gebruikmakend van een vaste hoe- l veelheid geheugen, zelfs indien daarmee het door de decodeereenheid vereiste geheugen of de bitsnelheid wordt verhoogd (zoals het geval is wanneer een uitgangssignaal wordt afgegeven voorafgaand aan de voltooiing van een run). De decodeereenheid volgens de uitvinding is in 20 staat om de invloeden van het beperkte geheugen van de herschikkingseenheid te bepalen gebruikmakend van bijvoorbeeld impliciete of expliciete signalering of signalering in de stroom (zoals in het volgende zal worden beschreven). De herschikkingseenheid 6Ο6 heeft voor de herschikking een eindig geheugen beschikbaar, maar het "benodigde" 25 geheugen is onbegrensd. Zowel de invloed van het begrensde geheugen voor de einde-run-wachtri j naar de begin-run-wachtri j en voor het herschikken van de ineengeschoven woorden moet in de beschouwing worden betrokken.The rearrangement unit 606 uses a temporary rearrangement memory 607. In an embodiment in which the encoding is performed in a workstation, the temporary rearrangement memory 607 may be more than 100 megabytes in size. In the balanced system of the invention, the temporary storage memory 607 is much smaller (e.g., about 1 Kbyte) and fixed. Thus, in one embodiment, the real-time encoding is performed using a fixed amount of memory, even if it increases the memory required by the decoder or the bit rate (as is the case when an output is output before the completion of a run). The decoder according to the invention is able to determine the influences of the limited memory of the rearrangement unit using, for example, implicit or explicit signaling or signaling in the stream (as will be described below). The rearrangement unit 6Ο6 has a finite memory available for the rearrangement, but the "required" memory is unlimited. Both the influence of the limited memory for the end-run queue to the start-run queue and for rearranging the interleaved words should be considered.
In een uitvoeringsvorm van de uitvinding voert het codeerstelsel 30 (en corresponderend daarmee ook het decodeerstelsel) een codering (of decodering) uit gebruikmakend van één enkele geïntegreerde schake-lings-chip. In een andere uitvoeringsvorm bevat één enkele geïntegreerde schakeling het codeerstelsel volgens de uitvinding met inbegrip van codeereenheid en decodeereenheid en geheugen. Een afzonder-35 lijk extern geheugen kan worden toegevoegd om te helpen bij de codering. Een uit meerdere chips bestaande module of geïntegreerde schakeling kan zowel de codeer/decodeer-hardware alsook het geheugen omvatten.In an embodiment of the invention, the encoding system 30 (and correspondingly also the decoding system) performs an encoding (or decoding) using a single integrated circuit chip. In another embodiment, a single integrated circuit includes the encoding system of the invention including encoder and decoder and memory. A separate external memory can be added to aid encoding. A multi-chip module or integrated circuit may include both the encoding / decoding hardware and the memory.
10013 Vï 3510013 Vi 35
Het codeerstelsel volgens de uitvinding kan pogen de effectieve bandbreedte te vergroten met een factor N. Indien de bereikte compressie kleiner is dan N:l, dan zal het gecodeerde datakanaal geheel worden gebruikt maar de gerealiseerde effectieve handbreedtetoename is 5 slechts gelijk aan de compressieverhouding. Als de bereikte compressie groter is dan N:l, dan is de effectieve bandbreedte bereikt met een beschrijfbare extra biindbreedte. In beide gevallen moet de bereikte compressie zich uitstrekken over een lokaal gebied van data gedefinieerd door de in het codeerstelsel aanwezige buffercapaciteit.The coding system according to the invention may attempt to increase the effective bandwidth by a factor of N. If the compression achieved is less than N: 1, the encrypted data channel will be used in its entirety, but the realized effective handwidth increase is only equal to the compression ratio. If the compression achieved is greater than N: 1, then the effective bandwidth is achieved with a writeable extra biindwidth. In either case, the compression achieved must extend over a local area of data defined by the buffer capacity present in the encoding system.
1010
De bitgenerator voor de codeereenheid volgens de uitvindingThe bit generator for the encoder according to the invention
Fig. 7 toont een uitvoeringsvorm van de codeereenheid-bitgenerator volgens de uitvinding. Bitgenerator 701 is aangesloten voor ontvangst van een waarschijnlijkheidsklasse en een ongecodeerd bit {b.v. een 15 MPS- of LPS-indicatie) als ingangssignalen. In responsie op de ingangssignalen geeft de bitgenerator 701 aan zijn uitgang meerdere signalen af. Twee van de uitgangssignalen zijn stuursignalen die het begin en het einde vein een run (elk codewoord vertegenwoordigt een run) indiceren, respectievelijk een startsignaal 7H en het eindsig-20 naai 712. Het is mogeLijk voor een run om op hetzelfde tijdstip te starten en te eindigen. Als een run start of eindigt dan bevat een "index"-uitgangssignaal 713 een indicatie van de waarschijnlijkheidsklasse (of context) voor het niet-gecodeerde bit. In een uitvoeringsvorm vertegenwoordigt het index-uitgangssignaal 713 een combinatie van 25 de waarschijnlijkheidsklasse voor het bit en een bankidentificatie voor stelsels waarin elke waarschijnlijkheidsklasse in diverse geheugenbanken is gerepliceerd. Het codewoord-uitgangssignaal 71^ wordt gebruikt voor het afgeven van een codewoord door de bitgenerator 701 bij beëindiging van een run.Fig. 7 shows an embodiment of the encoder bit generator according to the invention. Bit generator 701 is connected to receive a probability class and an uncoded bit {e.g. a 15 MPS or LPS indication) as input signals. In response to the input signals, the bit generator 701 outputs multiple signals at its output. Two of the output signals are control signals indicating the beginning and the end of a run (each codeword represents a run), a start signal 7H and the end-sew 712, respectively. It is possible for a run to start at the same time and end. When a run starts or ends, an "index" output signal 713 contains an indication of the probability class (or context) for the uncoded bit. In one embodiment, the index output signal 713 represents a combination of the bit probability class and a bank identifier for systems in which each probability class is replicated in various memory banks. The codeword output signal 71 ^ is used for outputting a codeword by the bit generator 701 upon termination of a run.
30 Een geheugen 702 is gekoppeld met de bitgenerator 701 en bevat de runtelling voor een bepaalde waarschijnlijkheidsklasse. Tijdens de bitgeneratie leest de bitgenerator 701 het geheugen 702 gebruikmakend van de index (b.v. waarschijnlijkheidsklasse). Na het lezen van het geheugen 7Ö2 voert de bitgenerator 701 een bitgeneratie uit op de 35 volgende wijze. Als de runtelling gelijk is aan nul dan wordt allereerst het startsignaal 711 ingesteld waarmee de start van een run wordt geïndiceerd. Als het ongecodeerde bit gelijk is aan de LPS dan wordt het eindsignaal 712 bekrachtigd waarmee het einde van de run 10013Π 36 wordt geïndiceerd. Ook als het niet-gecodeerde bit gelijk is aan een LPS, dan wordt het codewoord-uitgangssignaal 71** ingesteld om aan te geven dat het codewoord een IN codewoord is en wordt de runtellerstand gewist, bijvoorbeeld teruggesteld op nul (omdat het het einde is van 5 de run). Als het niet-gecodeerde bit gelijk is aan het LPS, dan wordt de runtellerstand verhoogd en een test stelt vast of de runtellerstand gelijk is aan de maximum runtellerstand voor de code. Als dit zo is dan wordt het eindsignaal 712 bekrachtigd, het codewoord-uitgangssignaal 71** wordt op nul gesteld en de runtellerstand wordt gewist (b.v. 10 de runtellerstand wordt op nul gesteld). Als de test aangeeft dat de runtellerstand niet gelijk is aan het maximum voor de code, dan wordt de runteller opgehoogd. Opgemerkt wordt dat het indexsignaal 713 de waarschijnlijkheidsklasse vertegenwoordigt die als ingangssignaal werd ontvangen.A memory 702 is coupled to the bit generator 701 and contains the run count for a given probability class. During bit generation, bit generator 701 reads memory 702 using the index (e.g. probability class). After reading the memory 702, the bit generator 701 performs a bit generation in the following manner. If the run count is equal to zero, the start signal 711 is first set, indicating the start of a run. If the uncoded bit is equal to the LPS then the end signal 712 is energized indicating the end of the run 10013Π36. Even if the uncoded bit is equal to an LPS, the codeword output signal 71 ** is set to indicate that the codeword is an IN codeword and the run counter reading is cleared, for example reset to zero (because it is the end from 5 th run). If the uncoded bit is equal to the LPS, the run counter is incremented and a test determines if the run counter is equal to the maximum run counter for the code. If so, the final signal 712 is energized, the codeword output signal 71 ** is zeroed and the run counter reading is cleared (e.g., 10 the run counter reading is zeroed). If the test indicates that the run counter reading is not equal to the maximum for the code, the run counter is incremented. It is noted that the index signal 713 represents the probability class received as an input signal.
15 Volgens de onderhavige uitvinding wordt het genereren van IN code woorden zodanig uitgevoerd dat de lengte ervan kan worden vastgesteld zonder enige verdere informatie. Tabel L illustreert IN codewoord-representaties van R3(2) codewoorden voor de codeer- en decodeereen-heid. De decodeereenheid verwacht dat het "1" bit in een "IN” code-20 woord gelijk is aan het LSB en dat het "N" tellerstandgedeelte zich bevindt in de juiste MSB ... LSB volgorde. In decodeervolgorde kan een codewoord met variabele lengte worden onderscheiden van voorloopnullen zonder te weten welke bepaalde code wordt gebruikt. In de codeervolg-orde wordt het codewoord omgekeerd en geeft de positie van het meest 25 significante "1" bit de lengte van de "IN" codewoorden aan. Voor het genereren van codewoorden in de codeervolgorde moet het complement van de tellerwaarde worden omgekeerd. Dit kan worden gerealiseerd door het omkeren van de 13~bit tellerstand en deze vervolgens te verschuiven zodanig dat ze uitgelijnd is op de LSB. Zoals in detail in het onder-30 staand is beschreven, doet de bitpak-eenheid de codewoorden weer terug omkeren in de decodeervolgorde. Deze omkering van codewoorden veroorzaakt geen toenemende complexiteit van de bitpak-eenheid 606 omdat de schuifoperatie sowieso moet wordei> uitgevoerd.According to the present invention, the generation of IN code words is performed such that their length can be determined without any further information. Table L illustrates IN codeword representations of R3 (2) codewords for the encoding and decoding unit. The decoder expects the "1" bit in an "IN" code-20 word to be equal to the LSB and the "N" counter position portion to be in the correct MSB ... LSB order. In decoding order, a variable length code word are distinguished from leading zeros without knowing which particular code is used In the coding order, the codeword is inverted and the position of the most significant "1" bit indicates the length of the "IN" codewords. in the coding order, the complement of the counter value must be inverted, this can be accomplished by inverting the 13 ~ bit counter position and then shifting it so that it is aligned with the LSB As described in detail below-30 , the bitpack unit reverses the codewords back into the decoding order This reversal of codewords does not cause increasing complexity of the bitpack unit 606 because the shift operation is anyway must be executed.
*001317 ! 37* 001317! 37
Tabel L - "IN" codewoordrepresentaties voor R3(2) codewoordenTable L - "IN" codeword representations for R3 (2) codewords
Niet-geco- Code- Omkering van Decodeervolgorde Codeervolgorde deerde woord tellerwaarde -1-- (tellerwaarde is onderstreept)Uncoded Code Reversal of Decoding Order Encoding Order Third Word Counter Value -1-- (Counter Value is Underlined)
5 000000 0 0000000000000 0000000000000 000001 1000 00 OOOOOOOOOQQOl 00000000010QQ5 000000 0 0000000000000 0000000000000 000001 1000 00 OOOOOOOOOQQOl 00000000010QQ
00001 1010 01 000000000Q101 00000000010IQ00001 1010 01 000000000Q101 00000000010IQ
0001 1001 10 0000000001Q01 00000000010Q1 001 1011 11 0000000001101 00000000010110001 1001 10 0000000001Q01 00000000010Q1 001 1011 11 0000000001101 0000000001011
10 01 110 0 OOOOOOOOOOQll 00000000001IQ10 01 110 0 OOOOOOOOOOQll 00000000001IQ
1 111 1 0000000000111 00000000001111 111 1 0000000000111 0000000000111
Voor R3~codes vergt het genereren van "N" codewoorden ook dat het bit volgend op de "1" aangeeft of sprake is van een korte of lange tel-15 ling.For R3 codes, generating "N" code words also requires the bit following the "1" to indicate whether there is a short or long count.
Gebruikmakend van meerdere geheugei ianken maakt de uitvinding ook pijplijnmethoden mogelijk. In het geval van een geheugen met meerdere toegangspoorten kan een leesoperatie op het geheugen plaatsvinden voor een niet-gecodeerd bit terwijl een schrijfoperatie plaatsvindt in het 20 geheugen voor het voorafgaande niet-gecodeerde bit.Using multiple memory devices, the invention also enables pipeline methods. In the case of a memory with multiple access ports, a read operation can be performed on the memory for an unencrypted bit while a write operation takes place in the memory for the previous unencrypted bit.
Een Altera AHDL voorbeeldontwerpAn Altera AHDL sample design
Een uitvoeringsvorm van de codeereenheid-bitgenerator volgens de uitvinding omvat een FPGA. Het ontwerp behandelt alle R2- en R3~codes 25 tot R2(12). De AHDL (Altera Hardware beschrijvingstaal) source-code is in het onderstaande aangegeven.An embodiment of the encoder bit generator according to the invention includes an FPGA. The design covers all R2 and R3 ~ codes 25 to R2 (12). The AHDL (Altera Hardware description language) source code is indicated below.
Het ontwerp omvat meerdere delen zoals getoond in fig. 13. Om te beginnen vormt de "ENCBG" 1301 het belangrijkste deel van het ontwerp waarbinnen de logica aanwezig is voor het behandelen van de start, het 30 einde en de voortgang van runs. In de tweede plaats wordt "KEXPAND" I302 gebruikt voor het expanderen van de waarschijnlijkheidsklasse in de maximale runlengte, een variabel lengtemasker, en de lengte van het eerste lange codewoord voor R3-codes. "KEXPAND" 1302 is identiek aan de decodeerfunctie met dezelfde naam. In de derde plaats neemt de 10013Π 38 "LPSCW" 1303 een tellerwaarde en informatie omtrekt de waarschijnlijk-heidsklasse als ingangssignalen en genereert het juiste "IN" codewoord .The design includes multiple parts as shown in Fig. 13. To begin with, the "ENCBG" 1301 is the major part of the design within which there is logic for handling the start, end and progress of runs. Second, "KEXPAND" I302 is used to expand the probability class in the maximum run length, a variable length mask, and the length of the first long codeword for R3 codes. "KEXPAND" 1302 is identical to the decoding function of the same name. Third, the 10013Π38 "LPSCW" 1303 takes a counter value and information surrounds the probability class as input signals and generates the correct "IN" codeword.
Het ontwerp maakt gebruik van twee pijplijnfasen. Gedurende de 5 eerste pijplijnfase wordt de tel'lerstand opgehoogd, de waarschi jnli jk-heidsklasse wordt geëxpandeerd en er wordt een aftrekbewerking en vergelijking uitgevoerd voor lange R3~codewoorden. Alle andere operaties worden uitgevoerd gedurende de tweede pijplijnfase.The design uses two pipeline stages. During the first pipeline phase, the count is increased, the probability class is expanded, and a subtract and compare is performed for long R3 codewords. All other operations are performed during the second pipeline phase.
10 encbg.tdf TITLE "Bit Generator for the encoder"; INCLUDE "kexpand.inc"; INCLUDE "Ipscw.inc"; 15 SUBDESIGN encbg ( k[3..0], r3, bit, count_in[12..0], elk 100 131 7 39 : INPUT; start_run, end_run, index[4..0], 5 count_out[12..0], codeword [12..0] : OUTPUT; )10 encbg.tdf TITLE "Bit Generator for the encoder"; INCLUDE "kexpand.inc"; INCLUDE "Ipscw.inc"; 15 SUBDESIGN encbg (k [3..0], r3, bit, count_in [12..0], 100 131 7 39 each: INPUT; start_run, end_run, index [4..0], 5 count_out [12 .. 0], codeword [12..0]: OUTPUT;)
10 VARIABLE10 VARIABLE
k_q[3..0], r3_q, k_qq[3..0], r3qq, 15 bit_q, bit_q, count_in_q[12..0], start_run, end_run, 20 start_run_q, index[4..0), count_out[12..0], count_plus[l 2..0], max_rl[12..0], 25 codeword[ 12..0] : DFF; kexpand_ ^ : kexpand; .k_q [3..0], r3_q, k_qq [3..0], r3qq, 15 bit_q, bit_q, count_in_q [12..0], start_run, end_run, 20 start_run_q, index [4..0), count_out [ 12..0], count_plus [1 2..0], max_rl [12..0], 25 codeword [12..0]: DFF; kexpand_ ^: kexpand; .
lp$cw_ : lpscw;lp $ cw_: lpscw;
30 BEGIN30 START
lpscw_.clk = elk; k_q[].clk - elk; r3_q.clk = elk; k_qqQ.dk = elk; 35 r3_qq.dk ** elk; bit_q.dk = elk; bit_qq.dk «= elk; count_in_qQ.dk ‘ = elk; start_run.dk »= elk; 40 end_run.dk - elk; start_run_q.dk «elk; indexQ.dk = elk; count_outQ,clk = elk; count_plusQ.dk « elk; 45 max_rlQ.dk = elk; codewordQ.dk - elk; 1001311 ΊΟ k_qf) * ^Π; r3_q β r3; k_qqü r3_qq " r3_q; 5 t>it_q -bit; bit_qq - bit_q; count_in_qD count_inQ; countjplusO « count_in_q[] + 1; start run - start run q; 10 stat_run_q = (count_in_qQ — 0); index[0] - r3_qq; index[4..1] - k_qq[]; 15 kexpand_.k_reg[] *= k_q[]; kexpand_.r3_reg *=* r3_q; lpscw_.r3 «r3_q;lpscw_.clk = each; k_q []. clk - any; r3_q.clk = each; k_qqQ.dk = each; 35 r3_qq.dk ** each; bit_q.dk = each; bit_qq.dk «= each; count_in_qQ.dk "= each; start_run.dk »= each; 40 end_run.dk - each; start_run_q.dk «each; indexQ.dk = each; count_outQ, clk = each; count_plusQ.dk «each; 45 max_rlQ.dk = each; codewordQ.dk - each; 1001311 ΊΟ k_qf) * ^ Π; r3_q β r3; k_qqü r3_qq "r3_q; 5 t> it_q -bit; bit_qq - bit_q; count_in_qD count_inQ; countjplusO« count_in_q [] + 1; start run - start run q; 10 stat_run_q = (count_in_qQ - 0); index [0] - r3_qq; index [4..1] - k_qq []; 15 kexpand_.k_reg [] * = k_q []; kexpand_.r3_reg * = * r3_q; lpscw_.r3 «r3_q;
Ipscw .k qD - k_q[j ; lpscw_.r3_q *= r3_qq; 20 lpscw_.count[] - count_in_q[]; lpscw_.mask[] « kexpand_.mask[]; lpscw_.r3_splitn « kexpand_.r3split[] ; lpscw_.maxrl_q[] - max_rl[] ; inax_rlG “ kcxpand .maxrl[] ; 25 IF (bit_qq) THEN % LPS % end_run - VCC; \ · count_out[] =0; codeword[] ~ lpscw .cwQ; 30Ipscw .k qD - k_q [j; lpscw_.r3_q * = r3_qq; 20 lpscw_.count [] - count_in_q []; lpscw_.mask [] «kexpand_.mask []; lpscw_.r3_splitn «kexpand_.r3split []; lpscw_.maxrl_q [] - max_rl []; inax_rlG “kcxpand .maxrl []; IF (bit_qq) THEN% LPS% end_run - VCC; \ · Count_out [] = 0; codeword [] ~ lpscw .cwQ; 30
ELS1F (count_pIus[] *== max_rl[J) THENELS1F (count_pIus [] * == max_rl [J) THEN
end_run VCC; count_out[] *= 0; codeword [] = 0;end_run VCC; count_out [] * = 0; codeword [] = 0;
35 ELSE35 ELSE
end_run = GND; count_outQ “ count_plus[]; codeword [] ~ 0; END IF; 40 END;end_run = GND; count_outQ “count_plus []; codeword [] ~ 0; END IF; 40 END;
Jpscw.tdf 45 SUBDESIGN lpscw ( 1001317 'u r3, k_q[3..0], r3_q, count[12..0], 5 mask[11..0], r3_split[10..0], maxrl q[12..0], elk : input; 10 cw[12..0] : output; )Jpscw.tdf 45 SUBDESIGN lpscw (1001317 'u r3, k_q [3..0], r3_q, count [12..0], 5 mask [11..0], r3_split [10..0], maxrl q [ 12..0], each: input; 10 cw [12..0]: output;)
VARIABLEVARIABLE
temp[ 12..0] : NODE; 15 temp rev[12..0] : NODE; temp~sh[12..0] : NODE; split[l 1..0] : NODE; r3_long : DFF; count_minus[l 1..0] : DFF; 20 maskjq[11..0] : DFF; count_q[12..0J : DFF;temp [12..0]: NODE; Temp rev [12..0]: NODE; temp ~ sh [12..0]: NODE; split [1 1..0]: NODE; r3_long: DFF; count_minus [1 1..0]: DFF; Maskjq [11..0]: DFF; count_q [12..0J: DFF;
BEGINGET STARTED
r3 _long.dk = elk; count_minus[].clk - elk; 25 mask_q[].clk *= elk; count_q[].clk « elk; splitflü..O] -r3_splii[]; splitlll] = GND; r3_long - (r3) AND (count[l 1..0] .« split[]); 30 count_minusQ «= countfl 1..0] - split!]; mask_q[] *= mask[] ; count_q[] ~ count[] ; %-pipeline stage---% 35r3 _long.dk = each; count_minus []. clk - any; 25 mask_q []. Clk * = each; count_q []. clk «each; splitflü..O] -r3_splii []; splitlll] = GND; r3_long - (r3) AND (count [1 1..0]. «split []); 30 count_minusQ «= countfl 1..0] - split!]; mask_q [] * = mask []; count_q [] ~ count []; % pipeline internship ---% 35
IF (r3 Jong) THENIF (r3 Young) THEN
temp[11..0] - (count_minus[]) XOR mask q[);temp [11..0] - (count_minus []) XOR mask q [);
ELSEELSE
tempfl 1..0] => count q[l 1..0] XOR mask q[] ; 40 END IF; temp[12]« GND; temp_rev[0] « tempt 12]; temp_revll) = temp[ll] ; 45 temp_revI2) » tempt 10] ; temp_rev[3] - templ9]; temp_rev[4] « temp [8] ; .1001311 42 teinp__rev[5] « temp[7]; temp_rev[6] - iemp[6]; temp_rev[7]»temp[5]; tempjrev[8] - temp[4]; 5 tempjrev[9] · temp[3]; temp_rev[10] - iemp[2]; temp_rev[ll] - templlj; tempjrev[12] - temp [0];tempfl 1..0] => count q [l 1..0] XOR mask q []; 40 END IF; temp [12] «GND; temp_rev [0] «tempt 12]; temp_revll) = temp [11]; 45 temp_revI2) »temp 10]; temp_rev [3] - templ9]; temp_rev [4] «temp [8]; .1001311 42 teinp__rev [5] «temp [7]; temp_rev [6] - iemp [6]; temp_rev [7] »temp [5]; tempjrev [8] - temp [4]; 5 tempjrev [9] temp [3]; temp_rev [10] - iemp [2]; temp_rev [ll] - templlj; tempjrev [12] - temp [0];
10 CASE k_q[] IS10 CASE k_q [] IS
WHEN 0 -> temp_sh[] *= 0; WHEN 1 => temp_sh[0] « temp_rev[12] ; temp_sh[ 12..1] « 0; 15 WHEN 2 -> temp_sh[1..0] « temp_rev[l2..11] ; temp_sh[12..2] - 0; WHEN 3 ·=> tempr_sh[2..0] - temp_jev[l 2..10] ; temp^sh[ 12..3] = 0; ^ WHEN 4 «> temp_sh[3..0] = temp_revl 12..9]; 20 temp_sh[ 12..4] - 0; WHEN 5 *=> temp_sh[4..0] - temp_rev[12..8] ; temp_sh[12..5] - 0; WHEN 6 «=> temp_sh(5..0] » temp_rev[ 12..7] ; temp_sh[l 2..6] - 0; 25 WHEN 7 -> temp_sh[6..0] - temp_rev[ 12..6] ; temp_sh[l 2..77] -» 0; • WHEN 8·.-> temp_sh[7..0] = temp_rev[ 12..5] ; temp_sh[ 12..8] - 0; WHEN 9 *=> temp_sh[8..0] temp_rev[ 12..4]; 30 temp_sh[ 12..9] - 0; WHEN 10 »> temp-sh[12..10] = 0; temp_sh[12..10] - 0; WHEN 11 => temp_sh[ 10..0] - temp_rev[ 12..2]; temp_sh[ 12.. 11 ] - 0; 35 WHEN 12 -> temp_sh[l 1..0] “ temp_rev[ 12..1) ; temp sh[12] - GND; END CASE; IF (NOT r3_q) THEN % R2 % 40 cwf] - temp sh[] OR maxrl qQ ; ELSIF (NOT r3 Jong)" THEN 96 R3 SHORT 96 cw[l 1..0] - temp sh[12..f] OR maxrl q[11..0]; cw[12] -GND; ELSE 96 R3 LONG 96WHEN 0 -> temp_sh [] * = 0; WHEN 1 => temp_sh [0] «temp_rev [12]; temp_sh [12..1] «0; 15 WHEN 2 -> temp_sh [1..0] «temp_rev [l2..11]; temp_sh [12..2] -0; WHEN 3 = = tempr_sh [2..0] - temp_jev [1 2..10]; temp ^ sh [12..3] = 0; ^ WHEN 4 «> temp_sh [3..0] = temp_revl 12..9]; Temp_sh [12..4] -0; WHEN 5 * => temp_sh [4..0] - temp_rev [12..8]; temp_sh [12..5] - 0; WHEN 6 «=> temp_sh (5..0]» temp_rev [12..7]; temp_sh [1 2..6] - 0; 25 WHEN 7 -> temp_sh [6..0] - temp_rev [12 .. 6]; temp_sh [1 2..77] - »0; • WHEN 8 · .-> temp_sh [7..0] = temp_rev [12..5]; temp_sh [12..8] - 0; WHEN 9 * => temp_sh [8..0] temp_rev [12..4]; 30 temp_sh [12..9] - 0; WHEN 10 »> temp-sh [12..10] = 0; temp_sh [12 .. 10] - 0; WHEN 11 => temp_sh [10..0] - temp_rev [12..2]; temp_sh [12 .. 11] - 0; 35 WHEN 12 -> temp_sh [l 1..0] “temp_rev [12..1); temp sh [12] - GND; END CASE; IF (NOT r3_q) THEN% R2% 40 cwf] - temp sh [] OR maxrl qQ; ELSIF (NOT r3 Young) "THEN 96 R3 SHORT 96 cw [l 1..0] - temp sh [12..f] OR maxrl q [11..0]; cw [12] -GND; ELSE 96 R3 LONG 96
45 cw[l 2..1 ]- temp sh[l 2..1] OR45 cw [1 2..1] - temp sh [1 2..1] OR
(ma>rl_q[l 1..0] AND NOT mask_q[l 1..0]) ; 1001317' cw[0] = temp sh[0] ; END IF; END; 5 kexpand.tdf TITLE "decoder, k expand logic" ; 10 SUBDESIGN kexpand ( k_regl3..0] , r3_reg 15 ; input; maxrl[ 12..0] , mask[l 1..0] , r3split[ 10..0] 20 : output;(ma> rl_q [l 1..0] AND NOT mask_q [l 1..0]); 1001317 'cw [0] = temp sh [0]; END IF; END; 5 kexpand.tdf TITLE "decoder, k expand logic"; 10 SUBDESIGN kexpand (k_regl3..0], r3_reg 15; input; maxrl [12..0], mask [l 1..0], r3split [10..0] 20: output;
BEGINGET STARTED
25 TABLE25 TABLE
k_reg[],r3_reg = > maxrl[], mask[], r3split[]; 0, 0 - > 1, ' - 0, X;k_reg [], r3_reg => maxrl [], mask [], r3split []; 0 -> 1, - - 0, X;
Qn · ' 1. 0 = > 2, 1. X; 30 1,1 - > 3, 1, 1; 2, 0 = > 4, 3, X; 2, 1 = > 6, 3, 2; 3, 0 - > 8, 7, X; _ 3, 1 - > 12, 7, 4; 35 4, 0 = > 16, 15, X; 4, 1 - > 24, 15, 8; 5, 0 - > 32, 31, X; 5, 1 = > 48, 31, 16; 6, 0 - > 64, 63, X; 40 6, 1 - > 96, 63, 32; 7, 0 = > 128, 127, X; 7, 1 - > 192, 127, 64; 8, 0 = > 256.·, 255, X; 8, 1 -> 384,' 255, 128; 45 9, 0 - > 512, 511, X; 9, 1 - > 768, 511, 256; 10, 0 - > 1024, 1023, X; 10, 1 - > 1536, 1023, 512; 11, 0 - > 2048, 2047, X; 1001317 44 11, 1 - > 3072, 2047, 1024; 12, 0 - > 4096, 4095, X; END TABLE; 5 END;Qn · 1.0 => 2.1 X; 30 1.1 -> 3.1, 1; 2.0 => 4.3, X; 2.1 => 6.3, 2; 3.0 -> 8.7, X; 3.1 -> 12.7, 4; 35 4.0 => 16.15, X; 4.1 -> 24, 15, 8; 5.0 -> 32.31, X; 5.1 => 48.31.16; 6.0 -> 64.63, X; 40 6.1 -> 96.63, 32; 7.0 => 128, 127, X; 7.1 -> 192, 127, 64; 8.0 => 256., 255, X; 8.1 -> 384, 255, 128; 45 9.0 -> 512.511, X; 9.1 -> 768, 511, 256; 10.0 -> 1024, 1023, X; 10, 1 -> 1536, 1023, 512; 11.0 -> 2048, 2047, X; 1001317 44 11, 1 -> 3072, 2047, 1024; 12.0 -> 4096, 4095, X; END TABLE; 5 END;
De herschikkingseenheid volgens de uitvindingThe rearrangement unit according to the invention
Fig. 8 is een blokschema van een uitvoeringsvorm van de herschikkingseenheid. In fig. 8 omvat de herschikkingseenheid 606 een runtel-10 ling-herschikkingseenheid 801 en een bitpak-eenheid 802. De runtel-ling-herschikkingseenheid 801 verplaatst codewoorden van het einde van een run, gecreëerd door de codeereenheid, naar het begin van een run als gevraagd door de decodeereenheid, terwijl de bitpak-eenheid 802 codewoorden met variabele lengte combineert in ineengeschoven woorden 15 met vaste lengte en deze in de juiste volgorde, gevraagd door de deco- * v deereenheid, afgeeft aan de uitgang.Fig. 8 is a block diagram of an embodiment of the rearrangement unit. In Fig. 8, the rearrangement unit 606 includes a runtle-10 rearrangement unit 801 and a bitpack unit 802. The runtle-rearrangement unit 801 moves code words from the end of a run created by the encoder to the beginning of a run. as requested by the decoder, while the bit pack unit 802 combines variable length codewords into interleaved fixed length words and outputs them in the correct order requested by the decoder at the output.
Een "speurende" decodeereenheid kan worden gebruikt voor herschikking bij elke decodeereenheid, waarin een decodeereenheid wordt gebruikt in de codeereenheid en dataverzoeken afgeeft in een volgorde 20 waarin de codewoorden nodig zullen zijn bij de werkelijke decodeereenheid. Voor het ondersteunen van een speurende decodeereenheid kan het nodig zijn de runtellingen te herschikken onafhankelijk van elke stroom. Voor decoders die gemakkelijk kunnen worden gemodelleerd kunnen meervoudige, in de tijd vastgelegde wachtrijen of één enkele ge-25 mengde wachtrij worden gebruikt om de herschikking mogelijk te maken. In een uitvoeringsvorm kan het herschikken van elk codewoord gerealiseerd worden gebruikmakend van een wachtrij-achtige datastructuur onafhankelijk van het gebruik van een aantal gecodeerde datastromen. Een beschrijving hoe de herschikking kan worden uitgevoerd wordt in 30 het onderstaande gegeven.A "tracking" decoder can be used for rearrangement at any decoder, in which a decoder is used in the encoder and issues data requests in an order in which the code words will be needed at the actual decoder. To support a tracking decoder, it may be necessary to rearrange the run counts independently of each stream. For easy-to-model decoders, multiple time-queues or a single mixed queue can be used to allow the rearrangement. In one embodiment, the rearrangement of each codeword can be accomplished using a queue-like data structure independent of the use of a number of encoded data streams. A description of how the rearrangement can be carried out is given below.
De eerste herschikkingsoperatie die in de codeereenheid uitgevoerd wordt, is het herschikken van elk van de runtellingen zodat de runtel-ling wordt gespecificeerd aan het· begin van de run (hetgeen de decodeereenheid voor decodering nodig heeft). Deze herschikking is nodig 35 omdat de codeereenheid niet vaststelt wat een runtelling (en codewoord) is tot aan het einde van een run. De resulterende runtelling, geproduceerd uit de codering van de data, wordt derhalve geherschikt zodat de decodeereenheid in staat is om de runtellingen terug in de 1001317 45 datastroom op de juiste wijze te decoderen.The first rearrangement operation performed in the encoder is to rearrange each of the run counts so that the run count is specified at the beginning of the run (which the decoder requires for decoding). This rearrangement is necessary because the encoder does not determine what a run count (and codeword) is until the end of a run. The resulting run count, produced from the encoding of the data, is thus rearranged so that the decoder is able to properly decode the run counts back into the 1001317 45 data stream.
Verwijzend naar fig. 8 omvat de herschikkingseenheid 606 volgens de onderhavige uitvinding een runtelling-herschikkingseenheid 801 en een bitpak-eenheid 802. De runtelling-herschikkingseenheid 801 is 5 aangesloten voor ontvangst van een aantal ingangssignalen waaronder een startsignaal 711. een eindsignaal 712, een indexsignaal 713 en een codewoord 714. Deze signalen zullen in meer detail worden beschreven in samenhang met de runtelling-herschikkingseenheid van fig. 9· In respons op de ingangssignalen genereert de runtelling-herschikkings-10 eenheid 801 het codewoord 803 en het signaal 8θ4. Het signaal 804 geeft aan wanneer de runtelling moet worden teruggesteld. Het codewoord 803 wordt ontvangen door de bitpak-eenheid 802. In responsie op het codewoord 803 genereert de bitpak-eenheid 802 de ineengeschoven woorden 8θ5· 15 De runtelling-herschikkingseenheid 801 en de bitpak-eenheid 802 worden in het volgende in detail beschreven.Referring to Fig. 8, the rearrangement unit 606 of the present invention includes a run count rearrangement unit 801 and a bit pack unit 802. The run count rearrangement unit 801 is connected to receive a plurality of input signals including a start signal 711. an end signal 712, an index signal 713 and a codeword 714. These signals will be described in more detail in connection with the run count rearrangement unit of FIG. 9. In response to the input signals, the run count rearrangement unit 801 generates the codeword 803 and the signal 8θ4. The signal 804 indicates when the run count should be reset. The codeword 803 is received by the bitpack unit 802. In response to the codeword 803, the bitpack unit 802 generates the interleaved words 8515. The run count rearrangement unit 801 and the bitpack unit 802 are described in detail below.
Runtelling-herschikkingseenheidRun count rearrangement unit
Zoals in het bovenstaande is besproken ontvangt de codeereenheid 20 codewoorden op het moment dat het begin van de data, gecodeerd door het codewoord, nodig is. De codeereenheid kent echter de identiteit van het codewoord niet totdat het · einde van de data, gecodeerd door het codewoord, is bereikt.As discussed above, the encoder 20 receives codewords when the beginning of the data encoded by the codeword is needed. However, the encoder does not know the identity of the codeword until the end of the data encoded by the codeword is reached.
Een blokschema van een uitvoeringsvorm van de runtelling-herschik-25 kingseenheid 801 is beschreven in fig. 9· De beschreven uitvoeringsvorm is geschikt voor vier ineengeschoven stromen, waarbij elk ineengeschoven woord 16 bits omvat en de codewoorden in lengte variëren tussen één en dertien bits. In een dergelijk geval kan de herschikkingseenheid 300 volgens een pijplijnmethode functioneren om alle 30 stromen te hanteren. Verder wordt een codeereenheid, die runtellingen associeert met waarschijnlijkheidsklassen, gebruikt zodanig dat het maximum aantal runtellingen dat op een willekeurig moment kan worden geactiveerd klein is, in deze uitvoeringsvorm wordt uitgegaan van 25. Opgemerkt wordt dat de uitvinding niet beperkt is tot vier ineenge-35 schoven stromen, ineengeschoven woorden van 16 bits of codewoordeleng-tes tussen 1 en 13 bits, maar kan worden gebruikt voor meer of minder stromen met ineengeschoven woorden van meer of minder dan 16 bits en codewoordlengtes die liggen buiten de range van 1 tot 13 bits.A block diagram of an embodiment of the run count rearrangement unit 801 is described in Fig. 9. The described embodiment is suitable for four interleaved streams, each interleaved word comprising 16 bits and the code words ranging in length between one and thirteen bits. In such a case, the rearrangement unit 300 can function by a pipeline method to handle all 30 streams. Furthermore, an encoder that associates run counts with probability classes is used such that the maximum number of run counts that can be activated at any one time is small, in this embodiment it is assumed that 25. The invention is not limited to four consecutive scrolled streams, 16-bit scrambled words or code word lengths between 1 and 13 bits, but can be used for more or fewer streams with scrambled words of more or less than 16 bits and code word lengths outside the range of 1 to 13 bits.
1001317 ke1001317 ke
Volgens fig. 9 is een aanwijzergeheugen 901 aangesloten voor ontvangst van een index-ingangssignaal 713 en produceert een adresuitgangssignaal dat toegevoerd wordt aan één ingang van multiplexer (MUX) 902. De twee andere ingangen van de MUX 902 zijn aangesloten voor het 5 ontvangen van een adres in de vorm van een kopaanwijzer van de kopteller 903 ©n een adres in de vorm van een staartaanwijzer van de staart-teller 901». Het uitgangssignaal van de MUX 902 is een adres dat wordt toegevoerd aan en wordt gebruikt voor het benaderen van een codewoord-geheugen 908.Referring to FIG. 9, a pointer memory 901 is connected to receive an index input signal 713 and produces an address output signal applied to one input of multiplexer (MUX) 902. The other two inputs of the MUX 902 are connected to receive an address in the form of a head pointer of the head counter 903 © n an address in the form of a tail pointer of the tail counter 901 ». The output of the MUX 902 is an address applied to and used to access a codeword memory 908.
10 Het index-ingangssignaal 713 wordt ook toegevoerd als ingangssig naal aan de MUX 905. Een andere ingang van de MUX 905 is aangesloten voor ontvangst van het codewoord-ingangssignaal 71*1. De uitgang van de MUX 905 is gekoppeld met een ingang van een geldig detectiemodule 906 en met een databus 907· De databus 907 is gekoppeld met het codewoord-15 geheugen 908 en met een ingang van de MUX 905. Ook gekoppeld met de databus 907 is een uitgang van de stuurmodule 909. Het start-ingangssignaal 711 en het eind-ingangssignaal 712 worden toegevoerd aan de afzonderlijke ingangen van de stuurmodule 909· De uitgangssignalen van de geldige detectiemodule 906 besteem uit het uitgangscodewoord 803 en 20 het signaal 80U (fig. 8). De runtelling-herschikkingseenheid 801 bevat ook stuurlogica (niet getoond om verwarring te voorkomen) voor het coördineren van de operaties van de diverse componenten van de runtel-ling-herschikkingseenheid 801.The index input signal 713 is also supplied as an input signal to the MUX 905. Another input of the MUX 905 is connected to receive the codeword input signal 71 * 1. The output of the MUX 905 is coupled to an input of a valid detection module 906 and to a data bus 907 · The data bus 907 is coupled to the codeword memory 908 and to an input of the MUX 905. Also coupled to the data bus 907 an output of the control module 909. The start input signal 711 and the end input signal 712 are applied to the separate inputs of the control module 909 · The output signals of the valid detection module 906 are output from the output code word 803 and the signal 80U (fig. 8 ). The run count rearrangement unit 801 also includes control logic (not shown to avoid confusion) for coordinating the operations of the various components of the run count rearrangement unit 801.
Voor her-itteratie identificeert de index-ingang 713 een run. In 25 één uitvoeringsvorm indiceert de index een van de 25 waarschijnlijk-heidsklassen. In een dergelijk geval zijn vijf bit nodig om de index te vertegenwoordigen. Opgemerkt wordt dat, indien meerdere banken van waarschijnlijkheidsklassen worden gebruikt, extra bits nodig kunnen zijn om de betreffende bank te specificeren. In een uitvoeringsvorm 30 identificeert de index-ingang de waarschijnlijkheidsklasse voor de runtelling. De codewoord-ingang 71^ voert het codewoord indien het einde van een run optreedt en voert anders een "don't care” toestand. Het start-ingangssignaal 711 en* het einde-ingangssignaal 712 zijn stuursignalen die aangeven wanneer een run begint, eindigt of beide. 35 Ee° run begint en eindigt op hetzelfde tijdstip indien de run bestaat uit één enkel ongecodeerd bit.For re-iteration, index entry 713 identifies a run. In one embodiment, the index indicates one of the 25 probability classes. In such a case, five bits are required to represent the index. It should be noted that if multiple banks of probability classes are used, additional bits may be required to specify the particular bank. In one embodiment, the index entry identifies the run count probability class. The codeword input 71 ^ enters the codeword when the end of a run occurs and otherwise enters a "don't care" state. The start input signal 711 and * the end input signal 712 are control signals indicating when a run starts, ends or both 35th Run starts and ends at the same time if the run consists of a single uncoded bit.
De runtelling-herschikklngseenheid 801 herschikt de runtellingen gegenereerd door de bitgenerator in responsie op zijn ingangssignalen.The run count rearrangement unit 801 rearranges the run counts generated by the bit generator in response to its input signals.
1001317 471001317 47
Het codewoordgeheugen 908 bergt de codewoorden op tijdens de herschikking. In een uitvoeringsvorm is het codewoordgeheugen 908 groter dan het aantal runtellingen dat per keer kan worden geactiveerd. Dit leidt tot een betere compressie. Als het codewoordgeheugen kleiner is dan 5 het aantal runtellingen dat per keer kan worden geactiveerd, dan zou dit feitelijk het aantal actieve runtellingen beperken tot het aantal dat in het geheugen kan worden vastgehouden. In een stelsel dat een goede compressie verschaft gebeurt het vaak dat, terwijl data voor het ene woord met een lange runtelling wordt geaccumuleerd, veel codewoor-10 den met korte runtellingen zullen starten (en wellicht ook eindigen). Dit vergt toepassing van een groot geheugen om te voorkomen dat de lange run wordt weggedrukt voordat ze beëindigd is.The codeword memory 908 stores the codewords during the rearrangement. In one embodiment, the codeword memory 908 is greater than the number of run counts that can be activated at a time. This leads to better compression. If the codeword memory is less than 5 the number of run counts that can be activated at a time, this would actually limit the number of active run counts to the number that can be held in memory. In a system that provides good compression, it often happens that, while data for one word is accumulated with a long run count, many codewords will start (and perhaps also end) with short run counts. This requires the use of a large memory to prevent the long run from being pushed out before it has ended.
Het aanwijzergeheugen 901 bergt adressen voor codewoordgeheugenlo-katies voor waarschijnlijkheidsklassen die zich bevinden in het midden 15 van een run en adresseren het codewoordgeheugen 908 op een random-wijze. Het aanwijzergeheugen 901 heeft een opslaglokatie voor het adres in het codewoordgeheugen 908 voor elke waarschijnlijkheidsklasse die zich in het midden van een run kan bevinden. Zodra een run voor een bepaalde waarschijnlijkheidsklasse is voltooid, wordt het adres, 20 dtj voor deze waarschijnlijkheidsklasse in het aanwijzergeheugen 901 is opgeslagen, gebruikt voor het aanspreken van het codewoordgeheugen 908 en het voltooide codewoord wordt ingeschreven op die lokatie in het codewoordgeheugen 908. Tot dat tijdstip bevatte deze lokatie in het codewoordgeheugen 908 een niet-geldig gegeven. Het aanwijzergeheu-25 gen 901 bevat voor elke runtelling de plaats van het ongeldige codewoord .The pointer memory 901 stores codeword memory locations for probability classes that are in the middle of a run and address the codeword memory 908 in a random manner. The pointer memory 901 has a storage location for the address in the codeword memory 908 for any probability class that may be in the middle of a run. Once a run for a given probability class has been completed, the address, 20 dtj for this probability class, is stored in the pointer memory 901, is used to access the codeword memory 908, and the completed codeword is written to that location in the codeword memory 908. Until that time, this location in the codeword memory 908 contained an invalid data. The pointer memory 901 contains the location of the invalid codeword for each run count.
De kopteller 903 en de staartteller 904 leveren ook adressen voor het aanspreken van het codewoordgeheugen 908. Het gebruik van de kopteller 903 en 8e staartteller 904 maakt het mogelijk het codewoordge-30 heugen 908 te adresseren als een wachtrij of circulaire buffer (d.w.z. eerste in, eerste uit [FIFO] geheugen). De staartaanwijzer 904 bevat het adres van de eerstvolgend beschikbare lokatie in het codewoordgeheugen 908 teneinde het inbrengen, van een codewoord in het codewoordgeheugen 908 mogelijk te maken. De kopteller 903 bevat het adres in 35 het codewoordgeheugen 908 van het volgende aan de uitgang af te geven codewoord. Met andere woorden, de kopteller 903 bevat het codewoordge-heugenadres van het volgende codewoord dat uit het codewoordgeheugen 9Ο8 moet worden verwijderd. Een lokatie voor elke mogelijke index 1001317 48 (d.w.z. waarschijnlijkheidsklasse) in het aanwijzergeheugen 901 wordt gebruikt om vast te houden waar de staartaanwijzer 904 was bij het begin van de run, zodat het juiste codewoord kan worden geplaatst in die lokatie van het codewoordgeheugen 908 bij het beëindigen van de 5 run.The header counter 903 and the tail counter 904 also provide addresses for accessing the codeword memory 908. The use of the header counter 903 and 8th tail counter 904 makes it possible to address the codeword memory 908 as a queue or circular buffer (ie first in, first from [FIFO] memory). The tail pointer 904 contains the address of the next available location in the codeword memory 908 to allow the insertion of a codeword into the codeword memory 908. The header counter 903 contains the address in the codeword memory 908 of the next codeword to be output. In other words, the header 903 contains the codeword memory address of the next codeword to be removed from the codeword memory 91-8. A location for each possible index 1001317 48 (ie probability class) in the pointer memory 901 is used to hold where the tail pointer 904 was at the start of the run, so that the correct codeword can be placed in that location of the codeword memory 908 at the ending the 5 run.
De stuurmodule 909 genereert een geldig signaal als deel van de data die in het codewoordgeheugen 908 is opgeslagen om aan te geven of er al dan niet informatie is opgeslagen die geldige codewoorddata bevat. Als bijvoorbeeld het geldig bit zich in de logische 1 toestand 10 bevindt, dan bevat de codewoordgeheugenlokatie geldige data. Als echter het geldig bit zich in de 0 toestand bevindt, dan bevat de codewoordgeheugenlokatie alleen ongeldige data. De geldigheiddetectiemodu-le 907 stelt vast of een geheugenlokatie een geldig codewoord bevat telkens wanneer een codewoord uitgelezen wordt uit het codewoordgeheu-15 gen 809. In een uitvoeringsvorm detecteert de geldigheiddetectiemodule 907 of de geheugenlokatie een geldig codewoord heeft of een speciale ongeldig code.The control module 909 generates a valid signal as part of the data stored in the codeword memory 908 to indicate whether or not information containing valid codeword data is stored. For example, if the valid bit is in the logic 1 state 10, the codeword memory location contains valid data. However, if the valid bit is in the 0 state, then the codeword memory location contains only invalid data. The validation module 907 determines whether a memory location contains a valid codeword each time a codeword is read from the codeword memory 809. In one embodiment, the validation module 907 detects whether the memory location has a valid codeword or a special invalid code.
Bij het begin van een nieuwe run wordt ongeldige data ingevoerd in het codewoordgeheugen 908. De ingevoerde ongeldige data doet dienst 20 als ruimteblokkering in de stroom van data die opgeslagen wordt in het codewoordgeheugen 908, zodat het codewoord voor de run in het geheugen kan worden opgeborgen op de correGte lokatie (om een juiste ordening voor het modelleren vein de decoder te verzekeren) zodra de run is voltooid. In een uitvoeringsvorm omvat de ingevoerde ongeldige data de 25 index via MUX 905 en een ongeldige indicatie (d.w.z. een ongeldig bit) van de stuurmodule 909. Het adres in codewoordgeheugen 908 waar de ingevoerde ongeldige data is opgeslagen wordt gegeven door de staartaanwi jzer 904, en vervolgens opgeslagen in het aanwijzergeheugen 901 als een herinnering aan de lokatie van de runtelling in codewoordge- 30 heugen 908. De rest van de data die verschijnt tussen de kopaanwijzer 903 en de staartaanwijzer 904 in het codewoordgeheugen 908 als voltooide runtellingen (d.w.z. herschikte runtellingen). Het maximum aantal ongeldige geheugenlokaties»loopt tussen 0 en 1-1 waarbij 1 het aantal runtellingen is. Indien een codewoord voltooid is aan het einde 35 van een run dan wordt de run tel ling opgeslagen in het codewoordgeheugen 908 gebruikmakend van het adres dat opgeslagen is in het aanwij zergeheugen 901.At the beginning of a new run, invalid data is entered into the codeword memory 908. The invalid data entered serves as a space block in the stream of data stored in the codeword memory 908, so that the codeword for the run can be stored in memory at the correct location (to ensure proper ordering for the modeling of the decoder) once the run is complete. In one embodiment, the invalid data entered includes the index via MUX 905 and an invalid indication (ie an invalid bit) from the control module 909. The address in codeword memory 908 where the invalid data is stored is given by the tail pointer 904, and then stored in the pointer memory 901 as a reminder of the location of the run count in codeword memory 908. The rest of the data appearing between the head pointer 903 and the tail pointer 904 in the codeword memory 908 as completed run counts (ie, rearranged run counts). The maximum number of invalid memory locations is between 0 and 1-1, where 1 is the number of run counts. If a codeword is completed at the end of a run, the run count is stored in the codeword memory 908 using the address stored in the pointer memory 901.
Indien een run start, dan wordt de index voor deze run opgeslagen <1 49 in codewoordgeheugen 908·, zodat indien het codewoordgeheugen 908 vol is maar de run nog niet is voltooid de index wordt gebruikt in samenhang met het signaal 804 voor het terugstellen vein de corresponderende runteller. Naast het opbergen van codewoorden of indices in het code-5 woordgeheugen 908 wordt één bit, aangeduid als het "geldig" bit, gebruikt om aein te geven welk van de twee typen data is opgeslagen.If a run starts, the index for this run is stored <1 49 in codeword memory 908, so that if the codeword memory 908 is full but the run has not yet been completed, the index is used in conjunction with the signal 804 to reset the corresponding run counter. In addition to storing code words or indices in the code 5 word memory 908, one bit, referred to as the "valid" bit, is used to indicate which of the two types of data is stored.
Als er geen run wordt gestart of beëindigd dan is de runtelling-herschikkingseenheid onwerkzaam. Als een run wordt gestart en er geen run wordt beëindigd en indien het geheugen vol is, dan wordt een code-10 woord afgegeven aan de uitgang van het codewoordgeheugen 908. Het codewoord dat afgegeven wordt is het codewoord dat opgeslagen is in het adres aanwezig in de kopteller 903 voor deze waarschijnlijkheids-klasse. Als een run wordt gestart en er geen run wordt beëindigd (ongeacht het feit of het geheugen vol is) dan wordt een index-ingangs-15 signaal 713 ingeschreven in het codewoordgeheugen 908 via de MUX 905 op het adres dat aangegeven wordt door de staartaanwijzer 904. De staartaanwijzer 904 wordt dan ingeschreven in het aanwijzergeheugen 901 op een adres aangewezen door de data op de index-ingang 713 (d.w.z. op de lokatie in het aanwijzergeheugen 901 voor de waarschijn-20 lijkheidsklasse). Na inschrijven in de staartaanwijzer 904 wordt de staartaanwijzer 904 opgehoogd.If no run is started or ended then the run count rearrangement unit is inactive. If a run is started and no run is ended and if the memory is full, a code-10 word is output at the output of the codeword memory 908. The code word that is output is the code word stored in the address contained in the header 903 for this probability class. If a run is started and no run is ended (regardless of whether the memory is full), an index input signal 713 is written into the codeword memory 908 via the MUX 905 at the address indicated by the tail pointer 904 The tail pointer 904 is then written into the pointer memory 901 at an address designated by the data at the index input 713 (ie, at the location in the pointer memory 901 for the probability class). After writing in the tail pointer 904, the tail pointer 904 is raised.
Als een run wordt beëindigd en er geen run start, dan wordt het adres, opgeslagen in het aanwijzergeheugen 901 corresponderend met de index (waarschijnlijkheidsklasse) uitgelezen en gebruikt als de loka-25 tie in het codewoordgeheugen voor opslag van het voltooide codewoord via de codewoord-ingang 714.When a run is terminated and no run starts, the address stored in the pointer memory 901 corresponding to the index (probability class) is read and used as the location in the codeword memory for storing the completed codeword through the codeword. entrance 714.
Als een run wordt gestart en een run wordt beëindigd (d.w.z. een run begint en eindigt op hetzelfde tijdstip), en het geheugen is vol, dein wordt een codewoord afgegeven door het codewoordgeheugen 908. Als 30 dan een run wordt gestart en beëindigd (ongeacht het feit of het geheugen vol is), dan wordt een codewoord op ingang 714 ingeschreven in het codewoordgeheugen 908 op het adres aangegeven door de staartaanwijzer 904. Daarna wordt de staartaanwijzer 904 opgehoogd zodat deze nu de volgende beschikbare lokatie bevat (bijvoorbeeld ophogen met 1). 35 Volgens de uitvinding kan de runtelling-herschikkingseenheid 801 codewoorden afgeven op verschillende tijdstippen. In een uitvoerings-voorbeeld kunnen codewoorden afgegeven worden die ofwel geldig danwel ongeldig zijn. Codewoorden die ongeldig zijn kunnen uitgegeven worden 10013Π 50 indien een geheugen vol-toestand bestaat en een run nog niet voltooid is. Ongeldige codewoorden kunnen ook worden afgegeven voor het handhaven van een minimum snelheid (d.w.z. voor snelheidsregeling). Ook kunnen ongeldige codewoorden afgegeven worden voor het doorspoelen van 5 het codewoordgeheugen 908 indien alle data een runlengtetelling-her-schikking heeft ondergaan of indien de runlengtetelling-herschikkings-eenheid springt naar het midden van het codewoordgeheugen 908 als resultaat van een terugstel-operatie. Opgemerkt wordt dat in een zodanig geval de decoder moet weten dat de codeereenheid op deze wijze 10 functioneert.If a run is started and a run is ended (ie a run starts and ends at the same time), and the memory is full, a codeword is output from the codeword memory 908. If then a run is started and ended (regardless of the whether the memory is full), a codeword at input 714 is written into the codeword memory 908 at the address indicated by the tail pointer 904. Thereafter, the tail pointer 904 is incremented so that it now contains the next available location (e.g. increment by 1). According to the invention, the run count rearrangement unit 801 can output code words at different times. In an exemplary embodiment, code words can be issued that are either valid or invalid. Code words that are invalid can be issued 10013Π 50 if a memory full state exists and a run has not yet been completed. Invalid codewords can also be issued to maintain a minimum speed (i.e. for speed control). Also, invalid codewords can be output for flushing the codeword memory 908 if all data has undergone a run-length count rearrangement or if the run-length count rearrangement unit jumps to the center of the codeword memory 908 as a result of a reset operation. It is noted that in such a case the decoder must know that the encoder functions in this way.
Zoals in het bovenstaande is beschreven wordt een codewoord afge-geven indien het codewoordgeheugen 908 vol is. Zodra het geheugen vol is wordt, wanneer een ingangssignaal wordt afgegeven naar het codewoordgeheugen 908 (d.w.z. een nieuw codewoord wordt gestart) een uit-15 gangssignaal door het codewoordgeheugen 908 afgegeven. Opgemerkt wordt dat een update van een ingevoerd gegeven geen afgifte van uitgangsge-gevens veroorzaakt uit het codewoordgeheugen 908 indien er een geheugen vol-toestand bestaat. Dat wil zeggen, de voltooiing van een run gevolgd door het schrijven van het resulterende codewoord in zijn 20 eerder toegewezen geheugenlokatie veroorzaakt geen geheugen vol-sig-naal aan de uitgang. Wanneer op soortgelijke wijze een run eindigt en het corresponderende adres in het -aanwijzergeheugen 901 en het adres in de kopteller 903 identiek zijn, dan kan het codewoord direct worden afgegeven en kan de kopteller 903 worden opgehoogd zonder het code-25 woordgeheugen 908 aan te spreken. In een uitvoeringsvorm treedt een geheugen vol-toestand op indien de staartaanwijzer 90^ gelijk is aan de kopaanwijzer 903 nadat de staartteller is geïncrementeerd. Zodra derhalve de staartteller 90^ is geïncrementeerd, vergelijkt de stuur-logica in de runtelling-herschikkingseenheid 801 de staartaanwijzer 30 904 met de kopaanwijzer 903 en indien deze gelijk zijn, dan stelt de besturingslogica vast dat het codewoordgeheugen 908 vol is en dat er een codewoord aan de uitgang moet worden afgegeven. In een andere uitvoeringsvorm kunnen codewoorden aan de uitgang worden afgegeven voordat het geheugen vol is. Als bijvoorbeeld het gedeelte van de 35 wachtrij dat geadresseerd wordt door de kop geldige codewoorden bevat dan kan dit deel aan de uitgang worden afgegeven. Dit vereist dat het begin van de wachtrij herhaaldelijk wordt onderzocht om de status van de daarin aanwezige codewoorden vast te stellen. Opgemerkt wordt dat 1001311 51 het codewoordgeheugen 908 wordt geleegd aan het einde van de bestands-codering.As described above, a codeword is output if the codeword memory 908 is full. As soon as the memory is full, when an input signal is output to the codeword memory 908 (i.e. a new codeword is started), an output signal is output from the codeword memory 908. It is noted that an update of an input data does not cause output of output data from the codeword memory 908 if a memory full state exists. That is, the completion of a run followed by writing the resulting codeword into its previously allocated memory location does not cause a memory full signal at the output. Similarly, when a run ends and the corresponding address in the pointer memory 901 and the address in the header 903 are identical, the code word can be output immediately and the header 903 can be incremented without accessing the code word memory 908 . In one embodiment, a memory full state occurs if the tail pointer 90 ^ is equal to the head pointer 903 after the tail counter is incremented. Therefore, once the tail counter 90 ^ is incremented, the control logic in the run count rearrangement unit 801 compares the tail pointer 30 904 with the head pointer 903 and if they are equal, the control logic determines that the codeword memory 908 is full and that a codeword is must be delivered at the exit. In another embodiment, code words can be delivered to the output before the memory is full. For example, if the portion of the queue addressed by the header contains valid code words, this portion can be output. This requires that the beginning of the queue be examined repeatedly to determine the status of the code words contained therein. It is noted that 1001311 51 the codeword memory 908 is emptied at the end of the file encoding.
Gebruikmakend van een runtelling-herschikkingseenheid 801 wordt een codewoord aan de uitgang afgegeven door allereerst een waarde 5 (d.w.z. data) uit het codewoordgeheugen 908 te lezen op een adres gespecificeerd door de kopaanwijzer 903· Het af geven vein codewoorden wordt bestuurd en gecoördineerd door de besturingslogica. Een geldig detectiemodule 906 voert een test uit om vast te stellen of de waarde een codewoord is. Met andere woorden, de geldig detectiemodule 906 10 stelt vast of het codewoord geldig is. In een uitvoeringsvorm bepaalt de geldig detectiemodule 906 de waarde van ieder ingevoerd gegeven door het bij ieder ingevoerd gegeven opgeslagen geldigheidsbit te testen. Als de waarde een codewoord is (d.w.z. het codewoord is geldig) dan wordt de waarde als codewoord afgegeven. Als anderzijds de 15 waarde geen codewoord is (d.w.z. het codewoord is ongeldig) dan kan aan de uitgang ieder willekeurig codewoord afgegeven worden dat een run van MPS'en heeft tenminste zo lang als de huidige runtelling. Het ”0" codewoord is een codewoord dat correct de runtelling tot dusverre vertegenwoordigt en kan aan de uitgang worden afgegeven. Nadat het 20 uitgangssignaal is afgegeven wordt de kopaanwijzer 903 geïncrementeerd naar de volgende lokatie in het codewoordgeheugen 908· Als alternatief maakt het gebruik van de "IN" met de kortst toegestane runlengten het mogelijk voor de decoder om alleen te controleren of een codewoord afgegeven is vóór afgifte van een LPS.Using a run count rearrangement unit 801, a codeword is output to the output by first reading a value 5 (ie data) from the codeword memory 908 at an address specified by the header pointer 903 · The output of codewords is controlled and coordinated by the control logic . A valid detection module 906 performs a test to determine whether the value is a codeword. In other words, the valid detection module 906 10 determines whether the codeword is valid. In one embodiment, the valid detection module 906 determines the value of each data entry by testing the stored validity bit with each data entry. If the value is a codeword (i.e. the codeword is valid) then the value is output as a codeword. On the other hand, if the value is not a codeword (i.e., the codeword is invalid) then any arbitrary codeword having a run of MPSs can be output at least as long as the current run count. The "0" codeword is a codeword that correctly represents the run count so far and can be output at the output. After the output signal has been output, the head pointer 903 is incremented to the next location in the codeword memory 908 · Alternatively, using the "IN" with the shortest allowable run lengths allows the decoder to check only if a codeword has been issued before issuing an LPS.
25 In een uitvoeringsvorm functioneert de runlengte-herschikkingseen- heid 801 met een dubbele klokcyclusperiode. In de eerste klokcyclus worden ingangssignalen ontvangen in de runtelling-herschikkingseenheid 801. In de tweede klokcyclus vindt de afgifte van het codewoord uit het geheugen 908 plaats.In one embodiment, the run-length rearrangement unit 801 operates with a double clock cycle period. In the first clock cycle, input signals are received in the run count rearrangement unit 801. In the second clock cycle, the codeword is output from the memory 908.
30 Alhoewel codewoorden aan de uitgang kunnen worden afgegeven zodra de kopaanwijzer 903 een geldig codewoord adresseert, kan het in sommige implementaties wenselijk zijn om alleen een codewoord aan de uitgang af te geven indien de buffer vol is. Dit zorgt ervoor dat het stelsel een vaste vertraging heeft uitgedrukt in aantallen codewoor-35 den, in plaats van een variabele vertraging. Indien het geheugen 908 in staat is om een vooraf bepaald aantal codewoorden vast te houden tussen het tijdstip waarop de run werd gestart en werd ingevoerd en het tijdstip waarop de afgifte plaatsvindt dan is de vertraging dat >1001311 52 aantal codewoorden sinds het niet uitvoeren van een uitgangssignaal totdat het vol is. Er is derhalve een constante vertraging in codewoorden. Opgemerkt wordt dat de herschikkingsvertraging nog steeds variabel is in andere opzichten, bijvoorbeeld de hoeveelheid gecodeer-5 de of oorspronkelijke data. Door toe te staan dat het geheugen 908 wordt gevuld voorafgaand aan het produceren van een uitgangswaarde genereert de uitgang een codewoord per cyclus.Although codewords can be delivered to the output as soon as the head pointer 903 addresses a valid codeword, in some implementations it may be desirable to deliver a codeword to the output only if the buffer is full. This ensures that the system has a fixed delay expressed in numbers of code words, rather than a variable delay. If the memory 908 is able to hold a predetermined number of code words between the time the run was started and entered and the time the output takes place, then the delay is> 1001311 52 number of code words since not executing a output signal until it is full. Therefore, there is a constant delay in codewords. It is noted that the rearrangement delay is still variable in other respects, for example the amount of encoded or original data. By allowing the memory 908 to be filled prior to producing an output value, the output generates a code word per cycle.
Opgemerkt wordt dat, indien een codewoordgeheugenlokatie als ongeldig is gemarkeerd, de niet gebruikte bits kunnen worden gebruikt 10 voor het opslaan van een identificatie die aangeeft bij wat voor run-telling het behoort (d.w.z. de contextbin of waarschijnlijkheidsklasse die de lokatie moet vullen is hierin opgeslagen). Deze informatie is bruikbaar bij de behandeling van het geval waarin het geheugen vol is. In het bijzonder kan de informatie worden gebruikt om aan te geven aan 15 de bitgenerator dat een codewoord voor een bepaalde runlengte niet l werd beëindigd en dat het nu moet worden beëindigd. In een dergelijk geval moet een beslissing worden genomen om een ongeldig codewoord aan de uitgang af te geven hetgeen plaats kan vinden als gevolg van een geheugen vol-toestand. Als dus het stelsel de runteller terugstelt dan 20 geeft deze informatie aan wanneer, in termen van bitgenerators en runtellers, het stelsel opnieuw moet beginnen.It is noted that if a codeword memory location is marked invalid, the unused bits can be used to store an identifier indicating what run count it belongs to (ie the context bin or probability class that the location must fill is stored therein) ). This information is useful in handling the case when the memory is full. In particular, the information can be used to indicate to the bit generator that a code word for a given run length has not been terminated and that it must now be terminated. In such a case, a decision must be made to deliver an invalid code word to the output which may occur due to a memory full state. Thus, if the system resets the run counter then 20 this indicates when, in terms of bit generators and run counters, the system is to restart.
Met betrekking tot de ingangsindex kan, indien om pijplijnredenen banken van waarschijnlijkheidsklassen worden gebruikt, de index een bank-identificatie omvatten. Dat wil zeggen, er kunnen meerdere run-25 tellingen zijn voor een bepaalde waarschijnlijkheidsklasse. Twee run-tellingen kunnen worden gebruikt voor de 80%-code waarbij eerst de één wordt gebruikt en dan de ander.With respect to the input index, if banks of probability classes are used for pipeline reasons, the index may include a bank identifier. That is, there can be multiple run-25 counts for a given probability class. Two run counts can be used for the 80% code using one first and then the other.
Omdat de codewoorden een variabele lengte hebben moeten ze worden opgeslagen in het codewoordgeheugen 908 op een manier die toestaat dat 30 hun lengte wordt vastgesteld. Alhoewel het mogelijk is om de afmeting expliciet op te slaan, wordt daarmee het geheugengebruik niet geminimaliseerd. Voor R-codes kan het opslaan van een nul in het geheugen een één bit ”0" codewoord indiceren en de "IN” codewoorden kunnen zodanig worden opgeslagen dat een prioriteitscodeereenheid kan worden 35 gebruikt om de lengte vanaf het eerste "l"-bit vast te stellen.Since the codewords have a variable length, they must be stored in the codeword memory 908 in a manner that allows their length to be determined. Although it is possible to explicitly save the size, it does not minimize memory usage. For R codes, storing a zero in memory may indicate a one bit "0" codeword and the "IN" codewords can be stored such that a priority encoder can be used to fix the length from the first "1" bit to set.
Indien het codewoordgeheugen 908 meerdere poorten heeft (b.v. twee poorten), dan kan dit ontwerp in een pijplijnstructuur worden uitgevoerd om één codewoord per klokcyclus te behandelen. Omdat iedere 1001317 53 willekeurige lokatie in · het codewoordgeheugen 908 kan worden aangesproken vanuit de meervoudige poorten, kan een lokatie in het codewoordgeheugen 908 worden beschreven zoals bij opslag van een ongeldig woord of codewoord, terwijl een ander woord kan worden gelezen, zoals 5 bij afgifte van een codewoord. Opgemerkt wordt dat in een dergelijk geval de multiplexers gemodificeerd kunnen zijn voor het ondersteunen van de meervoudige data- en adresbussen.If the codeword memory 908 has multiple ports (e.g. two ports), this design can be pipelined to handle one codeword per clock cycle. Since any 1001317 53 arbitrary location in the codeword memory 908 can be addressed from the multiple ports, a location in the codeword memory 908 can be described as when storing an invalid word or codeword, while another word can be read, such as 5 on output of a codeword. It is noted that in such a case, the multiplexers may be modified to support the multiple data and address buses.
Wanneer de codeereenheid een "0" codewoord afgeeft en een runtel-ler terugstelt omdat het codewoordgeheugen vol is, dan moet de deco-10 deereenheid hetzelfde doen. Dit vereist dat de decodeereenheid de codewoord-wachtrij in de codeereenheid modelleert. Hoe dit wordt gerealiseerd wordt in het volgende besproken.When the encoder outputs a "0" codeword and resets a runteller because the codeword memory is full, the decoder must do the same. This requires the decoder to model the codeword queue in the encoder. How this is achieved is discussed in the following.
Opgemerkt wordt dat voor het besparen van vermogen in CMOS-imple-mentaties tellers bij "IN" codewoorden kunnen worden gedeactiveerd 15 indien "0" codewoorden voor ongeldige runs worden afgegeven. De oorzaak daarvan is dat een gedecodeerd "IN" codewoord geldig is terwijl alleen een "0" codewoord ongeldig kan zijn.It is noted that to save power in CMOS implementations, counters at "IN" code words can be deactivated if "0" code words are output for invalid runs. The reason for this is that a decoded "IN" codeword is valid while only a "0" codeword can be invalid.
Alternatieve uitvoeringsvorm gebaseerd op context 20 Fig. 10 is een blokschema van een andere uitvoe. ingsvorm van een runtelling-herschikkingseenheid die ontvangen data herschikt in overeenstemming met de context (dit in tegenstelling met de waarschijn-lijkheidsklasse). De runtelling-herschikkingseenheid 1000 voert een herschikking uit gebruikmakend van de R-codes. Verwijzend naar fig. 10 25 omvat de herschikkingseenheid 1000 een aanwijzergeheugen 1001, een kopteller 1002, een staartteller 1003, een datamultiplexer (MUX) ÏOOU, een adres MUX 1005, een lengteberekeningsblok 1006, een geldig detec-tieblok 1007 en een codewoordgeheugen 1008. Het codewoordgeheugen 1008 bevat de codewoorden tijdens de herschikking. Het aanwijzergeheugen 30 1001 bevat adressen voor codewoordgeheugenlokaties voor contextbins die zich midden in een run bevinden. De kopteller 1002 en de staartteller 1003 maken het mogelijk het codewoordgeheugen 1008 te adresseren als een wachtrij of circulaire buffer naast een adressering op een random-wijze door het aanwijzergeheugen 1001. Voor R-codes kan het 35 opslaan van een nulwaarde in het geheugen een één bit "0" codewoord indiceren en "IN" codewoorden kunnen zodanig opgeslagen worden dat een prioriteitscodeereenheid kan worden gebruikt om de lengte ervan vanaf het eerste "1" bit vast te stellen. De lengteberekeningsmodule 1006 10013Π 54 werkt zoals een prioriteitscodeereenheid. (Als andere codes met variabele lengte worden gebruikt kan het meer geheugen-efficiënt zijn om een ”1" bit toe te voegen om de start van een codewoord te markeren in plaats van toevoeging van log2 bits voor het expliciet opslaan van de 5 lengte.) De runtelling-herschikkingseenheid 1000 omvat ook in de achtergrond werkende stuurlogica voor het coördineren en besturen van de werking van de componenten 1001-1008.Alternative embodiment based on context 20 FIG. 10 is a block diagram of another embodiment. Form of a run count rearrangement unit that rearranges received data in accordance with the context (as opposed to the probability class). The run count rearrangement unit 1000 performs a rearrangement using the R codes. Referring to FIG. 10, the rearrangement unit 1000 includes a pointer memory 1001, a head counter 1002, a tail counter 1003, a data multiplexer (MUX) 100, an address MUX 1005, a length calculation block 1006, a valid detection block 1007, and a code word memory 1008. codeword memory 1008 contains the codewords during the rearrangement. The pointer memory 30 1001 contains addresses for codeword memory locations for context bins that are in the middle of a run. The header counter 1002 and the tail counter 1003 allow the codeword memory 1008 to be addressed as a queue or circular buffer in addition to addressing randomly by the pointer memory 1001. For R codes, storing a zero value in the memory can be one indicate bit "0" codeword and "IN" codewords can be stored such that a priority encoder can be used to determine its length from the first "1" bit. The length calculator 1006 10013Π 54 works like a priority encoder. (If other variable length codes are used, it may be more memory efficient to add a ”1” bit to mark the start of a codeword rather than adding log2 bits for explicitly storing the length.) The run count rearrangement unit 1000 also includes background control logic for coordinating and controlling the operation of components 1001-1008.
De werking van de runtelling-herschikkingseenheid 1000 is soortgelijk aan die van de runtelling-herschikkingseenheid die gebaseerd was 10 op waarschijnlijkheidsschattingen. Bij de start van een nieuwe run wordt een ongeldig ingangsgegeven met inbegrip van de contextbin ingeschreven in het codewoordgeheugen 1008 op het adres dat aangegeven wordt door de staartaanwijzer 1003· Het adres van de staartaanwijzer 1003 wordt dan opgeslagen in het aanwijzergeheugen 1001 op het adres 15 van de contextbin van de huidige telling. Daarna wordt de staartaan-wijzer 1003 geïncrementeerd. Bij voltooiing van een run wordt de aanwijzer in het aanwijzergeheugen 1001 corresponderend met de runteller uitgelezen uit het aanwijzergeheugen 1001 en het codewoord wordt parallel ingeschreven in het codewoordgeheugen 1008 op de door deze 20 aanwijzer aangewezen lokatie. Als een run niet start en ook niet eindigt en als een lokatie in het codewoordgeheugen 1008, die aangewezen wordt door het adres van de kopaanwijzer 1002 geen geldige data bevat, dan wordt het codewoord, dat geadresseerd wordt door de kopaanwijzer gelezen en aan de uitgang afgegeven. Daarna wordt de kopaanwijzer 1002 25 geïncrementeerd. Als een run begint en eindigt op hetzelfde tijdstip dan wordt het codewoord ingeschreven in het codewoordgeheugen 1008 op het adres dat aangegeven wordt door staartaanwijzer 1003 en daarna wordt de staartaanwijzer 1003 geïncrementeerd.The operation of the run count rearrangement unit 1000 is similar to that of the run count rearrangement unit which was based on probability estimates. At the start of a new run, an invalid input data including the context bin is written into the codeword memory 1008 at the address indicated by the tail pointer 1003. The address of the tail pointer 1003 is then stored in the pointer memory 1001 at the address 15 of the context bin of the current count. Then, the tail pointer 1003 is incremented. Upon completion of a run, the pointer in the pointer memory 1001 corresponding to the run counter is read from the pointer memory 1001 and the codeword is written in parallel in the codeword memory 1008 at the location indicated by this pointer. If a run does not start and also does not end and if a location in the codeword memory 1008 designated by the address of the head pointer 1002 does not contain valid data, then the codeword addressed by the head pointer is read and output . The head pointer 1002 is then incremented. If a run starts and ends at the same time, the codeword is written into the codeword memory 1008 at the address indicated by tail pointer 1003 and then tail pointer 1003 is incremented.
Als op soortgelijke wijze een run eindigt en het corresponderende 30 adres in het aanwi jzergeheugen 1001 en het adres in de kopteller 1002 zijn gelijk, dan kan het codewoord onmiddellijk worden afgegeven en kan de waarde in de kopteller 1002 worden geïncrementeerd zonder het codewoordgeheugen 1008 aan te spreken.Similarly, if a run ends and the corresponding address in the pointer memory 1001 and the address in the header 1002 are equal, then the code word can be output immediately and the value in the header 1002 can be incremented without affecting the code word memory 1008 to speak.
Voor stelsels met een runtelling "via context" vereist elke con-35 text een geheugenlokatie in het aanwijzergeheugen 1001, zodat de breedte van het BG- en PEM-toestandsgeheugen groter kan zijn om dit geheugen te implementeren. De breedte van het aanwijzergeheugen 1001 is gelijk aan de afmetingen nodig voor een codewoordgeheugenadres.For systems with run count "via context", each context requires a memory location in the pointer memory 1001, so that the width of the BG and PEM state memory may be larger to implement this memory. The width of the pointer memory 1001 is equal to the dimensions required for a codeword memory address.
1001317 4 551001317 4 55
Het aantal lokaties in het codewoordgeheugen 1008 kan door de ontwerper worden gekozen afhankelijk van een bepaalde toepassing. De beperkte afmetingen van dit geheugen reduceren de compressie-efficien-cy, zodat een compromis bestaat tussen kosten en compressie. De breed-5 te van het codewoordgeheugen is gelijk aan de afmeting van het grootste codewoord plus één bit voor de geldig/ongeldig-indicatie.The number of locations in the codeword memory 1008 can be chosen by the designer depending on a particular application. The limited size of this memory reduces compression efficiency, so there is a tradeoff between cost and compression. The width of the codeword memory is equal to the size of the largest codeword plus one bit for the valid / invalid indication.
Een voorbeeld van het gebruik van de R2(2) code, getoond in de onderstaande tabel M, zal worden gebruikt om de herordening te illustreren. Tabel N toont de data die geherordend moet worden (0 = MPS, 10 meer waarschijnlijke symbool; 1 = LPS, minder waarschijnlijke symbool), gemarkeerd op context. Er zijn slechts twee contexten. Het niet-gecodeerde bitnummer geeft de tijd in niet-gecodeerde bitklokcy-clussen aan. Start en einde van runs zijn geïndiceerd en codewoorden zijn getoond aan het einde van de runs.An example of using the R2 (2) code, shown in Table M below, will be used to illustrate the rearrangement. Table N shows the data to be reordered (0 = MPS, 10 more likely symbol; 1 = LPS, less likely symbol), highlighted by context. There are only two contexts. The unencrypted bit number indicates the time in unencrypted bit clock cycles. Start and end of runs are indicated and codewords are shown at the end of the runs.
1515
Tabel M - R2(2) code Origineel Codewoord 0000 0 0001 100 20 001 . 110 01 101 1 111 )001317 56Table M - R2 (2) code Original Code word 0000 0 0001 100 20 001. 110 01 101 1 111) 001 317 56
Tabel N - Voorbeeld van te coderen dataTable N - Example of data to be encoded
Niet-gecodeerd Data Context Start/einde Codewoord bitgetal van runUncoded Data Context Start / End Codeword bit number of run
I 0 0 SI 0 0 S
5 2 0 1 S5 2 0 1 S
3 0 0 4 1 1 E 101 5 0 03 0 0 4 1 1 E 101 5 0 0
6 0 1 S6 0 1 S
10 7 0 0 E 0 8 1 1 E 10110 7 0 0 E 0 8 1 1 E 101
9 0 0 S9 0 0 S
10 0 1 S10 0 1 S
II 0 0 15 12 I 0 1 13 0 0 14 0 1 15 1 0 E 100 16 0 1 E 0 20II 0 0 15 12 I 0 1 13 0 0 14 0 1 15 1 0 E 100 16 0 1 E 0 20
De herorderingsoperatie voor de voorbeelddata is getoond in tabel 0. Een codewoordgeheugen met vier lokaties 0-3 wordt gebruikt, hetgeen groot genoeg is om in dit voorbeeld geen overloop te veroorzaken. Elke rij toont de toestand van het systeem na een operatie hetgeen ofwel de 25 start of het einde van een run is voor een bepaalde context ofwel de afgifte van een codewoord. Een ”x" is gebruikt als aanduiding voor geheugenlokaties die "don't care" zijn. Voor sommige niet-gecodeerde bits heeft een run geen begin noch einde zodat de runteller-herorde-ningseenheid vrijloopt. Voor gecodeerde bits die een run eindigen, 30 kunnen een of meer codewoorden afgegeven worden, waardoor diverse wijzigingen in de systeemtoestand kunnen optreden.The reorder operation for the example data is shown in Table 0. A codeword memory with four locations 0-3 is used, which is large enough not to cause overflow in this example. Each row shows the state of the system after an operation, which is either the start or end of a run for a given context or the delivery of a codeword. An ”x” is used to indicate memory locations that are “don't care.” For some unencrypted bits, a run has no beginning or end so that the run counter reorder unit is free. For coded bits that end a run, 30 one or more codewords can be issued, causing various system state changes.
10013Π10013Π
U) IU) I
s Is I
bo Ibo I
4J I rH rH O4J I rH rHO
•H o o o _• H o o o _
ZD O rH rH rH OZD O rH rH rHO
hi hi •H *r- Ό Ό ι-H I— 0) 0)hi hi • H * r- Ό Ό ι-H I— 0) 0)
hl hl Ohl hl O
c c oc c o
o” X X x XXXXXXOO tHXXXo ”X X x XXXXXXOO tHXXX
____________ ____ hi hi hi hi •Η ·Η ·Η τ- Ό Ό Ό Ό i—I F—1 I—I 1— φ φ φ φ hi hi hi hi Ή____________ ____ hi hi hi hi • Η · Η · Η τ- Ό Ό Ό Ό i — I F — 1 I — I 1— φ φ φ φ hi hi hi hi Ή
C C C C OC C C C O
CM X X X OOOOrHXXX X X X XCM X X X OOOOrHXXX X X X X
hi C ·Η w φ Ό CD hi r—1 .—. .—. ^hi C Η w φ Ό CD hi r — 1. .—. ^
Ti 3 <D Ό Ό Ό 4H φ hl C3 ’—1 C '—I tH rH φ «XI c <1)0 53 ο ο o a> *h φτηχοο’-'Ο'-'^'-'Χχχχχ a. x x x x £ hi___O_ O________ O ____Ti 3 <D Ό Ό Ό 4H φ hl C3 '—1 C' —I tH rH φ «XI c <1) 0 53 ο ο oa> * h φτηχοο '-' Ο '-' ^ '-' Χχχχχ a. xxxx £ hi___O_ O________ O ____
9* Ό rH rH H9 * Ό rH rH H
Ος, hl hl hl 'i- hi hi ·--> hi hi $2- Ο ·Η *H *H *rH ·Η *H *H *H ·Η ·Η Ο Ό Ό tj Ό £j Ό Ό U Ό ΌΟς, hl hl hl 'i- hi hi · -> hi hi $ 2- Ο · Η * H * H * rH · Η * H * H * H · Η · Η Ο Ό Ό tj Ό £ j Ό Ό U Ό Ό
ζ 5 ι-Η Γ—I > ι—1 ^ ι—I pH > f—( rHζ 5 ι-Η Γ — I> ι — 1 ^ ι — I pH> f— (rH
)Η φ φ φ φ φ φ φφ £ Ό hl hl Ό hl Ό hl hl Τ) hlhl) Η φ φ φ φ φ φ φφ £ Ό hl hl Ό hl Ό hl hl Τ) hlhl
« Ο C G ·Η C ·Η C C *H CC«Ο C G · Η C · Η C C * H CC
P οοοοφοφοοχχχχχο a> o o o x 0 -----g— -g-------- -g ---- r. φ φ cd £ c <d <d <d *“5 (OW cn r- - δ hi hi hoP οοοοφοφοοχχχχχο a> o o o x 0 ----- g— -g -------- -g ---- r. φ φ cd £ c <d <d <d * “5 (OW cn r- - δ hi hi ho
in 5 3 cc Cin 5.3 cc
? φ -Η -Η -H? φ -Η -Η -H
> x CC C> x CC C
— φρπ Χρ-ι^χφγμιμιμιμχχχο cd ooxx s g---t— Ϊ-------- Έ ---- J si ε s s 1 :h 5 n 5 O * -- > a- φρπ Χρ-ι ^ χφγμιμιμιμχχχο cd ooxx s g --- t— Ϊ -------- Έ ---- J si ε s s 1: h 5 n 5 O * -> a
ι < O O O O OXXXXX-O-rr X X X Xι <O O O O OXXXXX-O-rr X X X X
o iH ^ φ co iH ^ φ c
x COx CO
(0 « H 4->(0 «H 4->
IQ W rH CM <M (VrriH-crri'lVO'-H rH rH rH rHIQ W rH CM <M (VrriH-crri'lVO'-H rH rH rH rH
c Φ -------- ----c Φ -------- ----
NN
1 §1 §
CJrfOO O OOrHCMlMCTfVCV Ο O rHCJrfOO O ORHCMlMCTfVCV Ο O rH
rH tH ο „ o o orH tH ο „o o o
. O rH rH rH O rH O rH rH O. O rH rH rH O rH O rH rH O
ho . .ho. .
S4-> 4-> rH 4-> O rH 4-> 4-> o rHS4-> 4-> rH 4-> O rH 4-> 4-> o rH
CCOIhO Ό U U Ό ΌCCOIhO Ό U U Ό Ό
SpcOcOCcOC C CJ Cfl CCSpcOcOCcOC C CJ Cfl CC
C 4J +J ·Η 4J ·Η « ·Η *j *j ·Η -rHC 4J + J · Η 4J · Η «· Η * j * j · Η -rH
m co in φ to φ φ cn tn α>Φm co in φ to φ φ cn tn α> Φ
Hmm "' >111 mn imb mm *' — ·ιι··1 — n mm ——y· . ,, .. . —Hmm "'> 111 mn imb mm *' - · ιι ·· 1 - n mm ——y ·. ,, ... -
I rHI rH
ΦΟ «0 ho c 4-> 0) a> 4-> Φ hi ΦΤ3 4-> hho-h OrHiMrc'^rm'X)ΦΟ «0 ho c 4-> 0) a> 4-> Φ hi ΦΤ3 4-> hho-h OrHiMrc '^ rm'X)
Z OJD rH CM O' -=J- IT VO Γ— OO O' rH rH rH rH rH rH rHZ OJD rH CM O '- = J- IT VO Γ— OO O' rH rH rH rH rH rH rH
10013*1 7 5810013 * 1 7 58
In tabel O zijn de kop- en staartwijzers op nul geïnitialiseerd, aangevende dat er niets in het codewoordgeheugen (bijvoorbeeld een wachtrij) aanwezig is. Zoals getoond heeft het wijzergeheugen twee opslaglokaties, één voor elke context. Elke lokatie heeft "don't care" 5 waarden voorafgaand aan bit nummer één. Het codewoordgeheugen is getoond met een diepte van vier codewoorden, die allemaal initieel "don't care" waarden bevatten.In Table O, the heading and tail pointers are initialized to zero, indicating that there is nothing in the codeword memory (e.g., a queue). As shown, the pointer memory has two storage locations, one for each context. Each location has "don't care" 5 values prior to bit number one. The codeword memory is shown with a depth of four codewords, all of which initially contain "don't care" values.
In responsie op de ontvangen data voor bit nummer 1 blijft de kopwijzer wijzen naar de codewoordgeheugenlokatie 0. Omdat de decoder 10 data verwacht, wordt de eerstvolgend beschikbare codewoordgeheugenlokatie 0 toegewezen aan het codewoord en een ongeldige waarde wordt in de geheugenlokatie 0 ingeschreven. Omdat de context nul is, wordt het adres van de codewoordgeheugenlokatie, toegewezen aan het codewoord, opgeslagen in de wijzergeheugenlokatie voor de nul-context (wijzerge-15 heugenlokatie 0) . Er wordt dus een "0" opgeslagen in de wijzergeheugenlokatie 0. De staartwijzer wordt geïncrementeerd op de eerstvolgende codewoordgeheugenlokatie 1.In response to the received data for bit number 1, the header pointer continues to point to the codeword memory location 0. Since the decoder 10 expects data, the next available codeword memory location 0 is assigned to the codeword and an invalid value is written into the memory location 0. Since the context is zero, the address of the codeword memory location assigned to the codeword is stored in the pointer memory location for the zero context (pointer memory location 0). Thus, a "0" is stored in the pointer memory location 0. The tail pointer is incremented at the next codeword memory location 1.
In responsie op de data corresponderend met bit nummer 2 blijft de kopteller wijzen naar de eerste geheugenlokatie (omdat er geen uit-20 gangssignaal was dat een increment heeft veroorzaakt). Omdat de data correspondeert met de tweede context, context 1, wordt de volgende codewoordgeheugenlokatie aan het codewoord toegewezen als codewoordgeheugenlokatie 1 aangeduid door de staartwijzer en in deze lokatie wordt een ongeldige waarde ingeschreven. Het adres, codewoordlokatie 25 1, wordt ingeschreven in de wijzergeheugenlokatie corresponderend met context 1. Dat wil zeggen, het adres van de tweede codewoordgeheugenlokatie wordt ingeschreven in de wijzergeheugenlokatie 1. Daarna wordt de staartwijzer geïncrementeerd.In response to the data corresponding to bit number 2, the header continues to point to the first memory location (because there was no output signal causing an increment). Since the data corresponds to the second context, context 1, the next codeword memory location is assigned to the codeword as codeword memory location 1 indicated by the tail pointer and an invalid value is written in this location. The address, codeword location 25 1, is written in the pointer memory location corresponding to context 1. That is, the address of the second codeword memory location is written in the pointer memory location 1. Then the tail pointer is incremented.
In responsie op de data corresponderend met bit nummer 3 is de 30 herordeningseenheid vrijlopend omdat er geen run wordt gestart of beëindigd.In response to the data corresponding to bit number 3, the rearrangement unit is idle because no run is started or ended.
In responsie op de data corresponderend met bit nummer k wordt voor context 1 een einde van een· run geïndiceerd. Derhalve wordt het codewoord *f101" ingeschreven in de codewoordgeheugenlokatie toegewezen 35 aan context 1 (codewoordgeheugenlokatie 1) zoals aangegeven door de aanwijzergeheugenlokatie voor context 1. De kop- en staartwijzers blijven hetzelfde en de waarde in de wijzergeheugenlokatie voor context 1 zal niet opnieuw worden gebruikt, en is derhalve "don't care".In response to the data corresponding to bit number k, an end of a run is indicated for context 1. Therefore, the codeword * f101 "inscribed in the codeword memory location is assigned to context 1 (codeword memory location 1) as indicated by the pointer memory location for context 1. The head and tail pointers remain the same and the value in the pointer memory location for context 1 will not be reused , and is therefore "don't care".
1001317 591001317 59
In responsie op de data corresponderend met bit nummer 5 loopt de herordeningseenheid vrij omdat er geen run wordt gestart of beëindigd.In response to the data corresponding to bit number 5, the reorder unit is free because no run is started or ended.
In responsie op de data corresponderend met bit nummer 6 worden operaties van hetzelfde type als boven beschreven voor bit 2 uitge-5 voerd.In response to the data corresponding to bit number 6, operations of the same type as described above are performed for bit 2.
In responsie op de data corresponderend met bit nummer 7 treedt het einde van de run voor het codewoord voor context 0 op. In dit geval wordt het codewoord "0" ingeschreven in de codewoordgeheugenlo-katie (codewoordgeheugenlokatie 0) zoals aangegeven door de wijzerge-10 heugenlokatie voor context 0 (wijzergeheugenlokatie 0). Daarna zal de waarde van de wijzergeheugenlokatie weer opnieuw worden gebruikt en deze is dus "don't care". Ook de codewoordgeheugenlokatie die aangeduid wordt door de kopwijzer bevat geldige data. De geldige data wordt derhalve afgegeven aan de uitgang en de kopwijzer wordt geïncremen-15 teerd. Het incrementeren van de kopwijzer zorgt ervoor dat deze wijst naar een andere codewoordgeheugenlokatie die een geldig codewoord bevat. Dit codewoord wordt derhalve afgegeven aan de uitgang en de kopwijzer wordt opnieuw geïncrementeerd. Opgemerkt wordt in dit voorbeeld dat codewoorden worden afgegeven wanneer het kan, en niet wan-20 neer het codewoordgeheugen geheel vol is.In response to the data corresponding to bit number 7, the end of the run for the codeword for context 0 occurs. In this case, the codeword "0" is written into the codeword memory location (codeword memory location 0) as indicated by the pointer memory location for context 0 (pointer memory location 0). After that, the value of the pointer memory location will be reused again and so it is "don't care". The codeword memory location indicated by the head pointer also contains valid data. The valid data is therefore output at the output and the header pointer is cremated. Incrementing the heading pointer causes it to point to another codeword memory location containing a valid codeword. This codeword is therefore output at the output and the header pointer is incremented again. It is noted in this example that code words are output when possible, and not when the code word memory is completely full.
De verwerking door de niet-gecodeerde bits gaat door in overeenstemming met het boven beschrevene. Opgemerkt wordt dat de codewoord-geheugenlokaties niet voorbehouden zijn voor gebruik met bepaalde contexten zodat codewoorden voor willekeurige contexten kunnen worden 25 opgeslagen in een bepaalde codewoordgeheugenlokatie binnen de codering van een databestand.The processing by the unencrypted bits continues in accordance with the above described. It is noted that the codeword memory locations are not reserved for use with certain contexts so that codewords for arbitrary contexts can be stored in a given codeword memory location within the encoding of a data file.
De bitpak-eenheidThe bit pack unit
Het bitpakken is geïllustreerd in fig. 4 waarin data verwerkt door 30 de herordeningseenheid vóór en na het bitpakken is getoond. Opnieuw verwijzend naar fig. 4 zijn zestien codewoorden met variabele lengte getoond genummerd van 1 t/m 16 om de gebruiksvolgorde van de decoder te indiceren. Elk codewoord is toegewezen aan één van drie gecodeerde stromen. Dé data in elke gecodeerde stroom wordt afgebroken in woorden 35 ®et vaste lengte, die aangeduid zijn als de ineengeschoven woorden. (Opgemerkt wordt dat één enkel codewoord met variabele lengte kern worden verdeeld in twee ineengeschoven woorden). In dit voorbeeld zijn de ineengeschoven woorden geordend in één enkele ineengeschoven stroom 1001317 i 60 zodat de orde van het eerste codewoord met variabele lengte (of deel-codewoord) in een bepaald ineengeschoven woord de orde van het ineengeschoven woord bepaalt. Andere soorten ordeningscriteria kunnen worden gehanteerd. Het voordeel van de ineenschuiving van de meerdere 5 codestromen is dat één enkel gecodeerd datakanaal voor de overdracht van data kan worden gebruikt en dat variabele lengteverschuiving kan worden uitgevoerd voor elke stroom parallel of in een pijplijn.The bit packing is illustrated in Fig. 4 showing data processed by the reorder unit before and after bit packing. Referring again to Fig. 4, sixteen variable length codewords are shown numbered 1 through 16 to indicate the decoder usage order. Each codeword is assigned to one of three coded streams. The data in each encoded stream is truncated into fixed length words 35 which are referred to as the interleaved words. (It should be noted that a single variable-length core code word is divided into two interleaved words). In this example, the interleaved words are arranged in a single interleaved stream 1001317-160 so that the order of the first variable length codeword (or partial codeword) in a particular interleaved word determines the order of the interleaved word. Other types of classification criteria can be used. The advantage of collapsing the multiple code streams is that a single coded data channel can be used for data transfer and variable length shift can be performed for each stream in parallel or in a pipeline.
De bitpak-eenheid 802 volgens de onderhavige uitvinding ontvangt de codewoorden met variabele lengte van de runtelling-herordeningseen-10 heid 801 en verpakt ze tot ineengeschoven woorden. De bitpak-eenheid 802 omvat logica voor het uitvoeren van de behandeling van de codewoorden met variabele lengte en een herordeningseenheid van het gemengde wachtrij-type teneinde ineengeschoven woorden met een vaste lengte in de correcte volgorde aan de uitgang af te geven. In een 15 uitvoeringsvorm worden de codewoorden ontvangen van de runtelling-herordeningseenheid met een snelheid van maximaal één codewoord per klokcyclus. Een blokdiagram van een uitvoeringsvorm van de bitpak-eenheid 802 is getoond in fig. 11. In de volgende uitvoeringsvorm worden vier ineengeschoven stromen gebruikt, elk ineengeschoven woord 20 heeft 16 bits, en de codewoorden variëren in lengte van één tot dertien bits. In een uitvoeringsvorm wordt één enkele bitpak-eenheid in pijplijnconfiguratie gebruikt om alle stromen te behandelen. Als de bitpak-eenheid 802 volgens de onderhavige uitvinding een geheugen met twee poorten (of registerbestand) gebruikt dan kan dit één ineenge-25 schoven woord per klokcyclus aan de uitgang afgeven. Dit kan sneller zijn dan nodig is om de rest van de codeereenheid bij te houden.The bit pack unit 802 of the present invention receives the variable length code words from the run count reorder unit 801 and packs them into interleaved words. The bit pack unit 802 includes logic to perform the treatment of the variable length code words and a mixed queue type reorder unit to output fixed length interleaved words in the correct order. In an embodiment, the codewords are received from the run count reorder at a rate of up to one codeword per clock cycle. A block diagram of an embodiment of the bit pack unit 802 is shown in Fig. 11. In the following embodiment, four interleaved streams are used, each interleaved word 20 has 16 bits, and the code words range in length from one to thirteen bits. In one embodiment, a single bit pack unit in pipeline configuration is used to handle all flows. If the bit pack unit 802 of the present invention uses a two port memory (or register file), it may output one interleaved word per clock cycle. This may be faster than necessary to keep up with the rest of the encoder.
Opnieuw verwijzend naar fig. 11 omvat de bitpak-eenheid 802 de paklogica 1101, een stroomteller 1102, een geheugen 1103, staartwij-zers 1104 en een kopteller 1105· De paklogica 1101 is aangesloten voor 30 ontvangst van de codewoorden en is verbonden met de stroomteller 1102. De stroomteller 1102 is verder verbonden met het geheugen 1103· Met het geheugen 1103 zijn ook de staartwijzers 1104 en de kopteller 1105 verbonden. .Referring again to Fig. 11, the bit pack unit 802 includes the pack logic 1101, a flow counter 1102, a memory 1103, tail pointers 1104, and a header counter 1105. The pack logic 1101 is connected to receive the code words and is connected to the flow counter. 1102. The current counter 1102 is further connected to the memory 1103 · The memory 1103 also connects the tail hands 1104 and the head counter 1105. .
De stroomteller 1102 houdt bij met welke ineengeschoven stroom het 35 huidige ingangscodewoord is geassocieerd. In een uitvoeringsvorm telt de stroomteller 1102 repeterend de stromen van 0 tot N-l, waarbij N het aantal stromen aangeeft. Zodra de stroomteller 1102 de stand N-l bereikt, begint ze opnieuw bij 0 te tellen. In een uitvoeringsvorm is jocmn 1 t 61 de stroomteller 1102 een twee-bit teller en telt van 0 naar 3 (voor vier ineengeschoven stromen). In een uitvoeringsvorm wordt de teller 1102 geïnitialiseerd op nul (via een algemene reset).The flow counter 1102 keeps track of which interleaved current the current input codeword is associated with. In one embodiment, the flow counter 1102 repetitively counts the currents from 0 to N-1, where N indicates the number of currents. As soon as the current counter 1102 reaches position N-1, it starts counting again at 0. In one embodiment, the current counter 1102 is a two-bit counter and counts from 0 to 3 (for four interleaved flows). In one embodiment, counter 1102 is initialized to zero (via a general reset).
De paklogica 1101 mengt het huidige ingangscodewoord met vooraf-5 gaande ingangscodewoorden teneinde ineengeschoven codewoorden te vormen. De lengte van elk van de codewoorden kan variëren. De paklogica 1101 verpakt derhalve deze codewoorden met variabele lengte tot woorden met vaste lengte. De ineengeschoven codewoorden, gecreëerd door de paklogica 1101, worden afgegeven aan het geheugen 1103 in de juiste 10 volgorde en in dit geheugen 1103 opgeslagen tot het juiste tijdstip om ze weer af te geven. In een uitvoeringsvorm is het geheugen 1103 een statisch willekeurig toegankelijk geheugen (SRAM) of een registerbe-stand met vierenzestig woorden van 16 bit.The pack logic 1101 mixes the current input codeword with previous input codewords to form interleaved codewords. The length of each of the code words can vary. The packing logic 1101 therefore packs these variable length code words into fixed length words. The interleaved code words, created by the pack logic 1101, are delivered to memory 1103 in the correct order and stored in this memory 1103 until the correct time to output them again. In one embodiment, memory 1103 is a static random access memory (SRAM) or a sixty-four-word, 16-bit register file.
De ineengeschoven woorden zijn opgeslagen in het geheugen 1103· 15 Volgens de onderhavige uitvinding is de afmeting van het geheugen 1103 groot genoeg om twee gevallen te behandelen. Eén geval is het normale bedrijfsgeval waarin een ineengeschoven stroom codewoorden met minimale lengte heeft en de andere ineengeschoven stromen codewoorden met maximale lengte. Dit eerste geval vereist 3 x 13 = 39 geheugenloka-20 ties. Het andere geval is het initialisatiegeval waarin opnieuw één stroom codewoorden van minimale of korte lengte heeft en de andere codewoorden met maximale of lange lengte. Omdat voor het tweede geval 2 x 3 x 13 = 78 geheugenlokaties voldoende zijn, maakt de werking van de PEM een hechtere binding van 56 mogelijk.The interleaved words are stored in memory 1103-15. According to the present invention, the size of memory 1103 is large enough to handle two cases. One case is the normal operating case where one collapsed stream has minimum length codewords and the other collapsed streams have maximum length codewords. This first case requires 3 x 13 = 39 memory locations. The other case is the initialization case where again one stream has code words of minimum or short length and the other code words of maximum or long length. Since 2 x 3 x 13 = 78 memory locations are sufficient for the second case, the action of the PEM allows a more tight bond of 56.
25 Het geheugen 1103 voert in samenwerking met de stroomteller 1102 en de staartaanwijzers 1104 de herordening uit. De stroomteller 1102 indiceert de huidige stroom van een codewoord dat wordt ontvangen door het geheugen 1103· Elke ineengeschoven stroom is geassocieerd met ten minste één staartwijzer. De staartwijzers 1104 en de kopteller 1105 30 voeren een herordening van de codewoorden uit. De reden voor het hebben van twee staartwijzers per stroom volgt uit het feit dat het ineengeschoven woord N wordt gevraagd door de decoder indien de data in het ineengeschoven woord N-l de start van het volgende codewoord bevat. Eén st'aartwijzer bepaalt de lokatie in het geheugen 1103 voor het 35 opslaan van het eerstvolgende ineengeschoven woord uit een bepaalde ineengeschoven stroom. De andere staartwijzer bepaalt de lokatie in het geheugen voor de opslag van het ineengeschoven woord na het volgende woord. Dit maakt het mogelijk om de lokatie van het ineengescho- 1001317 62 ven woord N te specificeren zodra het vraagmoment van de decoder voor het ineengeschoven woord N-l bekend is. In een uitvoeringsvorm bestaan de wijzers uit acht registers van 6 bit (twee staartwijzers per stroom).Memory 1103, in conjunction with current counter 1102 and tail pointers 1104, performs the rearrangement. The flow counter 1102 indicates the current flow of a codeword received by the memory 1103. Each interleaved flow is associated with at least one tail pointer. The tail hands 1104 and the head counter 1105 30 rearrange the codewords. The reason for having two tail pointers per stream follows from the fact that the interleaved word N is requested by the decoder if the data in the interleaved word N-1 contains the start of the next codeword. One tail pointer determines the location in memory 1103 for storing the next interleaved word from a given interleaved stream. The other tail pointer determines the location in memory for storing the collapsed word after the next word. This makes it possible to specify the location of the interlocked word N as soon as the decoder interrogation time for the interleaved word N-1 is known. In one embodiment, the pointers consist of eight 6-bit registers (two tail pointers per stream).
5 In een uitvoeringsvorm zijn de staartwijzers 110^ bij de start van het coderen zodanig ingesteld dat de eerste acht ineengeschoven woorden (twee uit elke stroom) in het geheugen 1103 zijn opgeslagen in een reeks, één voor elke stroom. Wanneer de paklogica 1101 na initialisatie begint met een nieuw ineengeschoven woord voor een bepaalde code-10 stroom dan wordt de "volgende" staartwijzer ingesteld op de waarde van de "navolgende" staartwijzer, en de "navolgende" staartwijzer voor de codestroom wordt ingesteld op de volgende beschikbare geheugenlokatie. Er zijn derhalve twee staartwijzers voor elke stroom. In een andere uitvoeringsvorm wordt slechts één staartwijzer gebruikt voor elke 15 stroom die aangeeft waar het eerstvolgende ineengeschoven woord in het geheugen 1103 moet worden opgeslagen.In one embodiment, the tail pointers 110 ^ at the start of encoding are set such that the first eight interleaved words (two from each stream) are stored in memory 1103 in a sequence, one for each stream. When the pack logic 1101 after initialization starts with a new collapsed word for a given code-10 stream, the "next" tail pointer is set to the value of the "next" tail pointer, and the "next" tail pointer for the code stream is set to the next available memory location. Therefore, there are two tail pointers for each stream. In another embodiment, only one tail pointer is used for every stream indicating where the next collapsed word is to be stored in memory 1103.
De kopteller 1105 wordt gebruikt om de geheugenlokatie vast te stellen van het volgende ineengeschoven woord dat door de bitpak-een-heid 802 moet worden afgegeven. In de beschreven uitvoeringsvorm bevat 20 de kopteller 1105 een 6-bit teller die geïncrementeerd wordt teneinde per keer een volledig ineengeschoven woord af te geven.The header counter 1105 is used to determine the memory location of the next interleaved word to be output by the bit pack unit 802. In the described embodiment, the header counter 1105 includes a 6-bit counter which is incremented to deliver a fully collapsed word at a time.
Naast het gebruik voor de herordening kan het geheugen 1103 ook als FIFO-buffer worden gebruikt tussen de codeereenheid en het kanaal. Het kan wenselijk zijn om dit geheugen groter uit te voeren dan voor 25 de herordening nodig is zodat een FIFO-nagenoeg-vol signaal kan worden gebruikt om de codeereenheid tijdelijk te stoppen indien het kanaal de codeereenheid niet kan bijhouden. Een één-bit-per-cyclus kan per cyclus niet één ineengeschoven woord genereren. Indien een codeereenheid goed is aangepast aan een kanaal dan zal het kanaal niet elke cyclus 30 één ineengeschoven woord accepteren en is er geen FIFO-buffering noodzakelijk. Een kanaal dat per 32 klokcyclussen één ineengeschoven woord van 16 bit kan accepteren, kan een goed aangepast ontwerp opleveren voor een 2:1 effectieve bandbreedte-expansie indien de compressie 2:1 of groter was.In addition to being used for rearrangement, memory 1103 can also be used as a FIFO buffer between the encoder and the channel. It may be desirable to make this memory larger than is needed for the reordering so that a FIFO substantially full signal can be used to temporarily stop the encoder if the channel cannot keep up with the encoder. A one-bit-per-cycle cannot generate one interleaved word per cycle. If an encoder is well matched to a channel, the channel will not accept one word interleaved every cycle and no FIFO buffering is necessary. A channel that can accept one 16 bit interleaved word per 32 clock cycles can provide a well-adapted design for a 2: 1 effective bandwidth expansion if the compression was 2: 1 or greater.
3535
De paklogica volgens de onderhavige uitvindingThe packing logic of the present invention
Een blokschema van de paklogica is getoond in fig. 12. De paklogica 1101 in fig. 12 omvat een afmetingseenheid 1201, een groep van n 0)3^7 1.A block diagram of the packing logic is shown in Fig. 12. The packing logic 1101 in Fig. 12 comprises a dimension unit 1201, a group of n 0) 3 ^ 7 1.
63 accumulators 1202, een verschuiver 1203, een multiplexer MUX 1204, een groep van registers 1205, en een logische OF-poort 1206. De afmetings-eenheid 1201 is aangesloten voor ontvangst yan de codewoorden en is verbonden met de accumulators 1202. Zowel de accumulators alsook de 5 codewoorden zijn verbonden met de verschuiver 1203· De verschuiver 1203 is gekoppeld met de multiplexer MUX 1204 en met de logische OF-poort 1206. De multiplexer MUX 1204 is eveneens gekoppeld met de registers 1205 en met de uitgang van de logische OF-poort 1206. De registers zijn ook gekoppeld met de logische OF-poort 1206.63 accumulators 1202, a shifter 1203, a multiplexer MUX 1204, a group of registers 1205, and a logic OR gate 1206. The dimension unit 1201 is connected to receive the code words and is connected to the accumulators 1202. Both the accumulators the 5 codewords are also connected to the shifter 1203 · The shifter 1203 is coupled to the multiplexer MUX 1204 and to the logic OR gate 1206. The multiplexer MUX 1204 is also coupled to the registers 1205 and to the output of the logic OR gate 1206. The registers are also coupled to the logic OR gate 1206.
10 In een uitvoeringsvorm worden de codewoorden ingevoerd op een 13~ bit bus waarbij de niet-gebruikte bits op nul worden gesteld. Deze op nul gestelde niet-gebruikte bits zijn aangrenzend aan de "1" in "IN" codewoorden en derhalve kan de prioriteitscodeereenheid in de afme-tingseenheid 1201 worden gebruikt om de lengte van de "IN" codewoorden 15 te bepalen en een maat voor de "0" codewoorden te genereren.In one embodiment, the code words are input on a 13-bit bus with the unused bits set to zero. These zero unused bits are adjacent to the "1" in "IN" codewords and therefore the priority encoder in the dimension unit 1201 can be used to determine the length of the "IN" codewords 15 and a measure of the Generate "0" code words.
De accumulators 1202 omvatten een aantal accumulators, één voor elke ineengeschoven stroom. De accumulator voor elke ineengeschoven stroom houdt bij hoeveel bits er al reeds in het huidige ineengeschoven woord aanwezig zijn. In een uitvoeringsvorm omvat elke accumulator 20 een 4-bit optelier (met carry-uitgang) en een 4-bit register voor elke stroom. In één uitvoeringsvorm is de uitgang van de opteller ook de uitgang vein de accumulator. In een andere uitvoeringsvorm vormt de uitgang van het register de uitgang vein de accumulator. Gebruikmeikend vein de afmetingen van de codewoorden, ontvangen van de afmetingseen-25 heid 1201, bepalen de accumulators het aantal bits dat verschoven moet worden om het huidige codewoord aan te koppelen in het register dat het huidige ineengeschoven woord voor de betreffende stroom bevat.The accumulators 1202 include a number of accumulators, one for each collapsed current. The accumulator for each interleaved stream keeps track of how many bits are already present in the current interleaved word. In one embodiment, each accumulator 20 includes a 4-bit adder (with carry output) and a 4-bit register for each stream. In one embodiment, the adder's output is also the accumulator's output. In another embodiment, the output of the register forms the output of the accumulator. Using the dimensions of the codewords received from the dimension unit 1201, the accumulators determine the number of bits to be shifted to couple the current codeword in the register containing the current collapsed word for that stream.
Gebaseerd op de tellerwaarde van de accumulator zorgt de verschuiver 1203 voor het uitlijnen van het huidige codewoord zodat het cor-30 reet volgt op eventuele voorafgaande codewoorden in het ineengeschoven woord. De data in de codeereenheid wordt dus ingeschoven in de deco-deervolgorde. Het uitgangssignaal van de verschuiver 1203 omvat 28 bits, hetgeen slaat op het geval waarbij een 13-bit codewoord moet worden aangehangen aan 15 bits in het huidige ineengeschoven woord, 35 zodat bits van het huidige codewoord terechtkomen in de hogere 12 bits van de 28 bits die aan de uitgang worden af gegeven. Opgemerkt wordt dat de verschuiver 1203 zonder terugkoppeling werkt en dus in een pijplijn-operatie kan worden gebruikt. In een uitvoeringsvorm omvat deBased on the counter value of the accumulator, the shifter 1203 aligns the current codeword so that the correct follows any preceding codewords in the collapsed word. The data in the encoder is thus retracted in the decoder order. The output of the shifter 1203 is 28 bits, which refers to the case where a 13-bit codeword must be appended to 15 bits in the current collapsed word, so that bits of the current codeword end up in the higher 12 bits of the 28 bits. that are delivered at the exit. It is noted that the shifter 1203 operates without feedback and thus can be used in a pipeline operation. In one embodiment, the
1001317I1001317I
64 verschuiver 1203 een trommelverschuiver.64 slider 1203 a drum slider.
De registers 1205 bevatten de bits in de huidige ineengeschoven woorden. In een uitvoeringsvorm bevat een 16 bit register voor elke ineengeschoven stroom de voorafgaande bits in het huidige ineengescho-5 ven woord.Registers 1205 contain the bits in the current interleaved words. In one embodiment, a 16 bit register for each interleaved stream contains the previous bits in the current interleaved word.
Aanvankelijk wordt een codewoord van een stroom ontvangen door de verschuiver 1203« waarbij de afmetingseenheid 1201 de afmeting van het codewoord doorgeeft aan de accumulator corresponderend met de stroom. De accumulator heeft een initiële waarde van nul die ingesteld is via 10 de algemene reset. Omdat de accumulatorwaarde nul is, wordt het codewoord niet verschoven en vervolgens aan een 0F-bewerking onderworpen gebruikmakend van de 0F-logica 1206 met de inhoud van het register corresponderend met de stroom. In sommige uitvoeringsvormen echter moeten IN codewoorden worden verschoven om correct te worden uitge-15 üjnd zelfs bij het begin van een ineengeschoven woord. Dit register is op nul geïnitialiseerd en het resultaat van de 0F-operatie is het invoeren van het codewoord in de meest rechter bitposities van de uitgang van de 0F-logica 1206 en het terugkoppelen ervan via de multiplexer MUX 1204 naar het register om daarin te worden opgeslagen tot 20 het volgende codewoord voor de stroom. De verschuiver 1203 werkt dus aanvankelijk als een doorgangseenheid. Opgemerkt wordt dat het aantal bits in het eerste codewoord nu opgeslagen is in de accumulator. Bij ontvangst van het volgende codewoord voor.deze stroom wordt de waarde in de accumulator toegezonden aan de verschuiver 1203 en het codewoord 25 wordt naar links verschoven over dat aantal bits ter combinatie met eventuele eerdere ingangsbits in het ineengeschoven woord. Nullen worden geplaatst in de andere bitposities in het verschoven woord. Bits van het register corresponderend met de stroom worden gecombineerd met bits van de verschuiver 1203 gebruikmakend van de 0F-logica 30 1206. Als de accumulator geen uitgangs-carry-indicatie produceert (bijvoorbeeld een signaal) dan zijn er meer bits nodig om het huidige ineengeschoven woord te completeren en wordt de data resulterend uit de 0F-operatie opnieuw via de MUX 1204 teruggevoerd in het register. In een uitvoeringsvorm omvat de MUX 1204 een 2:1 multiplexer. Als de 35 accumulator een uitgangs-carry genereert dan vormen de 16 bits van de data aan de uitgang van de OF-logica 1206 een compleet ineengeschoven woord en dit wordt vervolgens afgegeven. De MUX 1204 zorgt voor het laden van het register met eventuele verdere bits (bijvoorbeeld de 12 1001317 65 hoogste bits van de 28 bits aan de uitgang van de verschuiver 1203) na de eerste 16 en vult de rest met nullen.Initially, a code word of a current is received by the shifter 1203, with the dimension unit 1201 communicating the size of the code word to the accumulator corresponding to the current. The accumulator has an initial value of zero that is set through the general reset. Since the accumulator value is zero, the code word is not shifted and then 0F processed using the 0F logic 1206 with the contents of the register corresponding to the stream. In some embodiments, however, IN codewords must be shifted to be correctly extended even at the beginning of a collapsed word. This register is initialized to zero and the result of the 0F operation is inputting the codeword into the rightmost bit positions of the output of 0F logic 1206 and feeding it back through the multiplexer MUX 1204 to become therein stored up to 20 the next code word for the stream. Thus, the shifter 1203 initially functions as a passage unit. It is noted that the number of bits in the first codeword is now stored in the accumulator. Upon receipt of the next codeword for this stream, the value in the accumulator is sent to the shifter 1203 and the codeword 25 is shifted left by that number of bits in combination with any previous input bits in the collapsed word. Zeros are placed in the other bit positions in the shifted word. Bits of the register corresponding to the current are combined with bits of the shifter 1203 using the 0F logic 30 1206. If the accumulator does not produce an output carry indication (for example, a signal), more bits are needed to make the current collapse word and the data resulting from the 0F operation is fed back into the register via the MUX 1204. In one embodiment, the MUX 1204 includes a 2: 1 multiplexer. If the accumulator generates an output carry, the 16 bits of the data at the output of OR logic 1206 form a complete interleaved word and it is then output. The MUX 1204 loads the register with any further bits (e.g. the 12 1001317 65 highest bits of the 28 bits at the output of the shifter 1203) after the first 16 and fills the remainder with zeros.
De besturing voor zowel de MUX 120¾ en de afgifte van het ineengeschoven woord omvat het uitgangs-carry-signaal van de accumulator. In 5 een uitvoeringsvorm omvat de multiplexer 120¾ zestien 2:1 multiplexers waarvan er ¾ een ingang hebben die altijd nul is.The control for both the MUX 120¾ and the interleaved word output includes the accumulator output carry signal. In an embodiment, the multiplexer 120¾ comprises sixteen 2: 1 multiplexers, of which ¾ have an input that is always zero.
HerordeningsoptiesReorder options
De onderhavige uitvinding verschaft meerdere opties voor het uit-10 voeren van de herordening op de data. In een stelsel met meerdere codestromen moeten de codestromen bijvoorbeeld worden geherordend in ineengeschoven woorden als getoond in fig. k. De onderhavige uitvinding verschaft een aantal manieren om deze herordening in ineengeschoven woorden te realiseren.The present invention provides multiple options for performing the rearrangement on the data. For example, in a multiple code stream system, the code streams must be rearranged into interleaved words as shown in Fig. K. The present invention provides a number of ways to accomplish this rearrangement.
15 Een werkwijze voor het herordenen van data in ineengeschoven woor- den is het gebruik vein een speurende decoder als getoond in fig. 25. De meerdere runtelling-herordeningseenheden 2501A...N zijn in fig. 25 aangesloten voor ontvangst vein de codewoord-informatie samen met de codewoordstroom. Elk genereert een uitgangscodewoord en een uitgangs-20 maat. Een afzonderlijke logische bitpak-eenheid (1101), zoals de bit-pak-eenheden 2502A...N is aangesloten voor ontvangst van de uitgangs-codewoorden en uitgangsmaten van een van de runtelling-herordenings-eenheden 2501A...N. De logische bitpak-eenheden 2502A...N geven aan de uitgang ineengeschoven woorden af die toegevoerd worden aan zowel de 25 MUX 2503 als aan de speurende decoder 250¾. De decoder 250¾ levert een keuzestuursignaal dat wordt ontvangen door de MUX 2503 en aan de MUX 2503 aangeeft welk ineengeschoven woord aan de uitgang in de code-stroom moet worden afgegeven.One method of rearranging data in collapsed words is to use a tracking decoder as shown in Fig. 25. The multiple run count reorder units 2501A ... N are connected in Fig. 25 to receive the codeword information. along with the code word flow. Each generates an output codeword and an output 20 measure. A separate bit pack logic unit (1101), such as bit pack units 2502A ... N, is connected to receive the output codewords and measures of one of the run count reorder units 2501A ... N. The bitpack logic units 2502A ... N output interleaved words applied to both the MUX 2503 and the tracking decoder 250¾. The decoder 250¾ provides a selection control signal which is received by the MUX 2503 and indicates to the MUX 2503 which word is to be output at the output in the code stream.
Elke gecodeerde datastroom heeft een runtelling-herordeningseen-30 heid, omvattende de runtelling-herordeningseenheid 801 in fig. 8. Elke bitpak-eenheid combineert codewoorden met variabele lengte tot ineengeschoven woorden met vaste afmetingen, bijvoorbeeld 8, 16 of 32 bits per woord. Elke bitpak-eenheid bevat registers en verschuivingsscha-kelingen zoals boven aangegeven. De decoder 250¾ omvat een volledig 35 operationele decodeereenheid (met inbegrip van BG, PEM en CM) die toegang heeft tot de ineengeschoven woorden vanuit alle bitpak-eenheden (ofwel op afzonderlijke bussen zoals getoond in fig. 25 danwel via een gemeenschappelijke bus). Indien de decoder 250¾ een ineengeschoven 1001317 66 woord heeft geselecteerd van een van de bitpak-eenheden dan wordt dat woord uitgezonden in de codestroom. Omdat de decoder aan de ontvangst-zijde de data in dezelfde orde zal afvragen als de identieke speurende decoder worden de ineengeschoven woorden in de juiste volgorde uitge-5 zonden.Each encoded data stream has a run count reorder unit comprising the run count reorder unit 801 in Fig. 8. Each bit pack unit combines variable length code words into fixed size interleaved words, for example, 8, 16 or 32 bits per word. Each bit pack unit contains registers and shift circuits as indicated above. The decoder 250¾ includes a fully operational decoder (including BG, PEM and CM) that can access the interleaved words from all bitpack units (either on separate buses as shown in Fig. 25 or via a common bus). If the decoder 250¾ has selected an interleaved 1001317 66 word from one of the bit pack units, that word is broadcast in the code stream. Because the decoder on the receive side will poll the data in the same order as the identical tracking decoder, the interleaved words are transmitted in the correct order.
Een codeereenheid met een speurende decoder kan attractief zijn in een half duplexstelsel omdat de speurende decoder ook kan worden gebruikt als een normale decoder. Een voordeel van de speurende decoder-benadering is zijn toepasbaarheid voor iedere willekeurige determinis-10 tische decoder. Andere oplossingen, die in het onderstaande worden besproken en die niet afhankelijk zijn van een speurende decoder maken gebruik vein eenvoudiger modellen van de decoder teneinde de hardware-kosten te reduceren. Voor de decoders die meerdere codewoorden in dezelfde klokcyclus decoderen kan het modelleren van de decoder met 15 minder hardware dan een decoder zelf onmogelijk zijn en kan het ge-An encoder with a tracking decoder can be attractive in a half duplex system because the tracking decoder can also be used as a normal decoder. An advantage of the tracking decoder approach is its applicability to any deterministic decoder. Other solutions discussed below that do not rely on a tracking decoder use simpler models of the decoder to reduce hardware costs. For the decoders that decode multiple codewords in the same clock cycle, modeling the decoder with 15 less hardware than a decoder itself may be impossible and may not
VV
bruik van een speurende decoder noodzakelijk zijn. Zoals in het onderstaande zal worden beschreven bestaan er voor decoders die slechts maximaal één codewoord per cyclus decoderen eenvoudiger modellen.use of a tracking decoder are necessary. As will be described below, simpler models exist for decoders that decode only a maximum of one codeword per cycle.
Een andere techniek voor het herschikken van de data in pijplijn-20 decodeerstelsels, die maximaal één codewoord per klokcyclus decoderen, is gebaseerd op het feit dat de enige informatie die nodig is voor het modelleren van de verzoeken voor gecodeerde data van de decoder de orde van de codewoorden (waarbij alle codewoorden worden beschouwd en niet de codewoorden voor elke codestroom afzonderlijk). Indien een 25 tijdmarkering geassocieerd is met elk codewoord dat de runtelling-herschikkingseenheid binnenkomt, dan is dat via het bitpakproces verkregen ineengeschoven woord met de oudste geassocieerde tijdmarkering het volgende ineengeschoven woord dat afgegeven moet worden.Another technique for rearranging the data in pipeline-20 decoding systems, which decode a maximum of one codeword per clock cycle, is based on the fact that the only information required to model the decoder encoded data requests is of the order of the code words (considering all code words and not the code words for each code stream separately). If a time marker is associated with each code word entering the run count rearrangement unit, that interleaved word obtained with the bitpacking process with the oldest associated time marker is the next interleaved word to be output.
Een als voorbeeld dienende herschikkingseenheid voor een codeer-30 eenheid is in blokdiagramvorm getoond in fig. 26. In fig. 26 is het codeerstelsel hetzelfde als beschreven in fig. 25 met uitzondering van de tijdmarkeringsinformatie die door elke runtelling-herschikkingseen-heid 2501A...N wordt ontvangen. 'Deze tijdmarkeringsinformatie wordt ook doorgegeven aan de bitpak-eenheden 2502A...N. De bitpak-eenheden 35 2502A...N leveren de ineengeschoven woorden aan de MUX 2503 en de daarbij behorende tijdmarkeringen aan de logische schakeling 2601. De logische schakeling 2601 verschaft een stuursignaal aan de MUX 2503 om het ineengeschoven woord te selecteren dat aan de codestroom moet 10 01317 67 worden afgegeven.An exemplary encoding unit for an encoding unit is shown in block diagram form in Fig. 26. In Fig. 26, the encoding system is the same as described in Fig. 25 with the exception of the time marker information provided by each run counting rearrangement unit 2501A. .N is received. This time marking information is also passed on to the bit pack units 2502A ... N. The bit pack units 35 2502A ... N supply the interleaved words to the MUX 2503 and the associated time markers to the logic circuit 2601. The logic circuit 2601 provides a control signal to the MUX 2503 to select the interleaved word to be supplied to the code stream. 10 01 317 67 must be issued.
In deze uitvoeringsvorm is de speurende decoder vervangen door een eenvoudige comparator-operatie die bepaalt welk van de bitpak-eenheden 2502A...N een codewoord (of deel van een codewoord) bezit met de oud-5 ste tijdmarkering. Een dergelijk stelsel doet zich voor de MUX 2503 voor als een aantal wachtrijen met tijdmarkeringen. De logische schakeling 26OI selecteert eenvoudig uit de diverse wachtrijen. De logica van elk van de runtelling-herschikkingseenheden 2503A...N wijzigt slechts weinig (ten opzichte van de runtelling-herschikkingseenheid 10 801) teneinde een tijdmarkering te schrijven wanneer een run wordt gestart. Elke runtelling-herschikkingseenheid 2501A...N is geschikt voor het opslaan van de tijdmarkering in het codewoordgeheugen. Het opslaan van ti jdmarkeringen met voldoende bits om elk codewoord op te nemen in de gecodeerde datastroom is voldoende, maar in sommige uit-15 voeringsvormen kan met minder bits worden volstasm.In this embodiment, the tracking decoder is replaced by a simple comparator operation that determines which of the bitpack units 2502A ... N has a codeword (or part of a codeword) with the oldest time marker. For the MUX 2503 such a system arises as a number of queues with time markers. The logic circuit 26OI simply selects from the various queues. The logic of each of the run count rearrangement units 2503A ... N changes only slightly (relative to the run count rearrangement unit 801) to write a time marker when a run is started. Each run count rearrangement unit 2501A ... N is capable of storing the time marker in the codeword memory. Storing time markers with enough bits to include each codeword in the encoded data stream is sufficient, but in some embodiments less bits can be packed.
Een korte beschrijving van de stappen die gebruikt worden bij meerdere wachtrijen met tijdmarkeringen wordt in het volgende gegeven. De beschrijving is begrijpelijk voor de deskundige op dit gebied. Het gaat hier om codeeroperaties. Er zijn geen vereenvoudigingen uitge-20 voerd voor gevallen waarin een run zowel start e s eindigt bij hetzelfde codewoord. De operaties kunnen worden gecontroleerd voor elk gecodeerd symbool (alhoewel in de praktijk niet alle controles worden uitgevoerd). Verondersteld is dat de ineengeschoven woorden 32 bits Icing zijn.A brief description of the steps used for multiple queues with time markers is given below. The description is understandable to those skilled in the art. These are coding operations. No simplifications have been made for cases where a run both starts and ends with the same codeword. Operations can be checked for any encoded symbol (although in practice not all checks are performed). It is assumed that the interleaved words are 32 bits Icing.
25 als (geen momentaan codewoord voor context) { plaats tijdmarkering In wachtrij (gebruikt voor vaststellen volgende wachtrlj) plaats contextwijzer in wachtrij plaats ongeldige data in wachtrij 30 wijs context toe aan wachtrij-invoer increment wachtrij-staart ) als (alreeds een codewoord en MPS) ( increment context-runtel1ing 35 ) als (MAXRUN of LPS) ( plaats correcte data in wachtrij (contextwijzer niet nodig) nulwijzer fc runtelling in contextgeheugen 40 updaten waarschijnlijkheldsschatting in contextgeheugen } als (geldige data aan de kop van volgende wachtYiJ) ( .plaats 32 bits van de data op de uitgang wis wachtrij-invoer 45 lncrementeer wachtrij-kop ) indien (een willekeurige wachtrij is nagenoeg vol) ( vind de volgende wachtrij die data op de uitgang moet plaatsen indien (minder dan 32 bits geldige data) ( 5O gebruik contextwiJzer voor het vinden van de context nulwijzer I, runtelling in contextgeheugen plaats MAXRUN codewoord in wachtriJ-data ) } 1001317 6825 if (no current codeword for context) {queue time mark Queue (used to determine next queue) queue context pointer queue invalid data 30 assign context to queue input increment queue tail) if (already codeword and MPS ) (increment context-runtel1ing 35) as (MAXRUN or LPS) (queue correct data (context pointer not needed) null pointer fc run count in context memory 40 update probability hero estimate in context memory} as (valid data at the head of next queue YiJ) (.place 32 bits of data on output clear queue input 45 increment queue header) if (any queue is nearly full) (find next queue to put data on output if (less than 32 bits valid data) (5O use context pointer to find the context null pointer I, run count in context memory place MAXRUN codeword in queue data)} 1001317 68
De decodeeroperaties·zijn soortgelijk alhoewel de codewoorden niet in een wachtrij behoeven te worden opgeslagen. Het is nog steeds noodzakelijk om de tijdmarkering van de codewoorden in de wachtrij op te slaan.The decoding operations are similar although the codewords do not have to be queued. It is still necessary to save the time mark of the codewords in the queue.
5 De functie van de boven besproken tijdmarkeringen wordt gebruikt voor het opslaan van de ordeningsinformatie vein de codewoorden. Een equivalente wijze om hetzelfde concept tot uitdrukking te brengen is via het gebruik vein één enkele wachtrij voor alle codewoorden, d.w.z. een gemengde wachtrij. In een gemengd wachtrij-stelsel, zoals getoond 10 in fig. 27, wordt één enkele runtelling-herschikkingseenheid 2701 gebruikt voor alle Ineengeschoven stromen. De runtelling-herschik-kingseenheid 2701 genereert codewoord-, maat- en stroomuitgangsinfor-matie naar de bitpak-eenheden 2502A...N die de ineengeschoven woorden afgeven aan de MUX 2503 en de positie-informatie afgeven aan de logi-15 sche schakeling 2702, die signalen stuurt naar de MUX 2503 voor het afgeven van ineengeschoven woorden als deel van de codestroom.The function of the time markers discussed above is used to store the ordering information of the codewords. An equivalent way to express the same concept is through the use of a single queue for all codewords, i.e. a mixed queue. In a mixed queue system, as shown in Fig. 27, a single run count rearrangement unit 2701 is used for all of the Interleaved flows. The run count rearrangement unit 2701 generates codeword, measure and current output information to the bit pack units 2502A ... N which supply the interleaved words to the MUX 2503 and deliver the position information to the logic circuit 2702 , which sends signals to the MUX 2503 to output interleaved words as part of the code stream.
Voor arbitraire stromen bevat het runtelling-herschikkingsgeheugen een ineengeschoven stroom ID voor elk codewoord. Elke ineengeschoven stroom heeft zijn eigen kopwijzer. Indien een bitpak-eenheid meer data 20 nodig heeft Jan wordt de corresponderende kopwijzer gebruikt voor het ophalen van zoveel codewoorden als nodig is om een nieuw ineengeschoven woord te vormen. Dit kan betekenen het bekijken van veel code-woordgeheugenlokaties teneinde vast te stellen welke deel uitmaken van de juiste stroom. Dit kan ook betekenen het kijken naar het codewoord-25 geheugen voor extra velden teneinde een gekoppelde lijst te implementeren.For arbitrary flows, the run count rearrangement memory contains a collapsed flow ID for each codeword. Each collapsed stream has its own heading pointer. If a bit pack unit needs more data 20, the corresponding header is used to retrieve as many code words as necessary to form a new interleaved word. This can mean viewing many code word memory locations to determine which are part of the correct stream. This can also mean looking at the codeword memory for additional fields in order to implement a linked list.
Een andere werkwijze voor ineengeschoven stromen volgens de uitvinding maakt gebruik van een gemengde wachtrij met een vaste stroom-toewijzing. Deze werkwijze gebruikt één enkele staartwijzer zoals in 30 het geval van de gemengde wachtrij, zodat er geen tijdmarkeringen nodig zijn. Ook worden meerdere kopwijzers gebruikt evenals in het voorgaande geval en er is derhalve geen overhead bij het afgeven vein data aan een bepaalde stroom. Om«dit te bereiken wordt de toewijzing van codewoorden aan ineengeschoven stromen uitgevoerd volgens de vol-35 gende regel die geldt voor N stromen: codewoord M wordt toegewezen aan stroom M modulo (mod) N. Opgemerkt wordt dat ineengeschoven stromen codewoorden kunnen hebben vanuit elke context-bin of waarschijnlijk-heidsklasse in overeenstemming met deze werkwijze. Als het aantal 1001317 69 stromen een macht van twee is, dan kern M mod N worden berekend door sommige van de meer significante bits weg te laten. Als voorbeeld wordt verondersteld dat het codewoord-herschikkingsgeheugen wordt geadresseerd met 12 bits en dat vier ineengeschoven stromen worden 5 gebruikt. De staartwijzer is 12 bit lang en de twee minst significante bits identificeren de codestroom voor het volgende codewoord. Vier kopwijzers met 10 bits zijn elk impliciet toegewezen aan elk van de vier mogelijke combinaties van de twee minst significante bits. Zowel de kop- als de staartwijzers worden geïncrementeerd als normale binai-10 re tellers.Another collapsed stream method of the invention utilizes a fixed queue mixed queue. This method uses a single tail pointer as in the case of the mixed queue, so that no time markers are required. Also, multiple headers are used as in the previous case, and therefore there is no overhead in delivering data to a given stream. To achieve this, the assignment of codewords to interleaved streams is performed according to the following rule that applies to N streams: codeword M is assigned to stream M modulo (mod) N. Note that interleaved streams can have codewords from any context bin or probability class in accordance with this method. If the number of 1001317 69 currents is a power of two, then core M mod N are calculated by omitting some of the more significant bits. As an example, it is assumed that the codeword rearrangement memory is addressed with 12 bits and that four interleaved streams are used. The tail pointer is 12 bit long and the two least significant bits identify the code stream for the next codeword. Four 10-bit headers are each implicitly assigned to each of the four possible combinations of the two least significant bits. Both the head and tail hands are incremented as normal binai-10 counters.
In de decoder is de verschuiver voorzien van registers die de ineengeschoven woorden opslaan. De verschuiver presenteert correct uitgelijnde gecodeerde data aan de bitgenerator. Als de bitgenerator een deel van de gecodeerde data gebruikt dan wordt de verschuiver 15 geïnformeerd. De verschuiver presenteert correct uitgelijnde data uit de volgende ineengeschoven stroom. Als het aantal gecodeerde datastro-men gelijk is aan N dan heeft de verschuiver N-l klokcyclussen voor het uitschuiven van de gebruikte data en het wellicht vragen om een ander ineengeschoven codewoord voordat de bepaalde ineengeschoven 20 stroom opnieuw wordt gebruikt.In the decoder, the slider is provided with registers that store the interleaved words. The shifter presents correctly aligned coded data to the bit generator. If the bit generator uses part of the encoded data, the shifter 15 is informed. The shifter presents correctly aligned data from the next collapsed stream. If the number of encoded data streams is equal to N, then the shifter N-1 has clock cycles for extending the used data and perhaps requesting another interleaved code word before the particular interleaved stream is reused.
De decoder volgens de onderhavige uitvindingThe decoder of the present invention
De onderhavige uitvinding omvat een decoder die de in werkelijke tijd functionerende codeereenheid met begrensd herschikkingsgeheugen 25 ondersteunt. In een uitvoeringsvorm heeft ook de decoder gereduceerde geheugenbehoeften en -complexiteit voor het handhaven van een runtel-ling voor elke waarschijnlijkheidsklasse in plaats van elke context-bin.The present invention includes a decoder that supports the real-time encoder with limited rearrangement memory 25. In one embodiment, the decoder also has reduced memory needs and complexity to maintain a runtime for each probability class instead of each context bin.
30 Een uitvoeringsvorm van het decodeerstelsel volgens de onderhavige uitvindingAn embodiment of the decoding system of the present invention
Pig. 1*1A illustreert een blokschema van een uitvoeringsvorm van de decodeer-hardware volgens de onderhavige uitvinding. In fig. 1*1A omvat het decodeerstelsel 1*100 een eerste-in/eerste-uit (FIFO) structuur 35 1*101, decodeereenheden 1*102, een geheugen 1*103 en een contextmodel 1*10*1. De decodeereenheden 602 omvatten meerdere decoders. De gecodeerde data 1*110 wordt ontvangen door de FIFO-structuur 1*101. De FIF0-structuur 1*101 is aangesloten voor het leveren van de gecodeerde data 1001317 70 aan de decoder 1*402. De decoders 1*102 zijn verbonden met het geheugen 1*403 en met het contextmodel 1*40*4. Het contextmodel 1*40*1 is ook gekoppeld met het geheugen 1*403· Een uitgang van het contextmodel 60*4 omvat de gedecodeerde data 1*411.Pig. 1 * 1A illustrates a block diagram of an embodiment of the decoding hardware of the present invention. In Fig. 1 * 1A, the decoding system 1 * 100 includes a first-in / first-out (FIFO) structure 35 1 * 101, decoding units 1 * 102, a memory 1 * 103 and a context model 1 * 10 * 1. The decoding units 602 comprise a plurality of decoders. The coded data 1 * 110 is received by the FIFO structure 1 * 101. The FIF0 structure 1 * 101 is connected to supply the encoded data 1001317 70 to the decoder 1 * 402. The decoders 1 * 102 are connected to the memory 1 * 403 and to the context model 1 * 40 * 4. The context model 1 * 40 * 1 is also coupled to the memory 1 * 403 · An output of the context model 60 * 4 includes the decoded data 1 * 411.
5 In het stelsel 1*400 is de gecodeerde data 1*410 die ingevoerd wordt in de FIFO-structuur 1*101 geordend en ineengeschoven. De FIFO-struc-tuur 1*401 bevat de data in de correcte volgorde. De stromen worden geleverd aan de decoders 1*402. De decoders 1*402 vragen de data uit deze stromen in een seriële en deterministische volgorde. Alhoewel de 10 volgorde waarin de decoders 1*402 de gecodeerde data vereisen niet-triviaal is, is ze niet willekeurig. Door het ordenen van de codewoorden in deze volgorde in de codeereenheid in plaats van de decodeereen-heid kan de gecodeerde data ineengeschoven worden tot één enkele stroom. In een andere uitvoeringsvorm kan de gecodeerde data 1*410 één 15 enkele stroom van niet-ineengeschoven data bevatten, waarbij data voor l elke context-bin, contextklasse of waarschijnlijkheidsklasse aan de datastroom is toegevoegd. In dit geval wordt de FIFO 1*410 vervangen door een opslagmedium 1*410 voor het ontvangen van alle gecodeerde data voorafgaand aan de toevoer van data naar de decoders 1*402 zodat de 20 data correct kan worden gesegmenteerd.In the system 1 * 400, the coded data 1 * 410 inputted into the FIFO structure 1 * 101 is arranged and collapsed. The FIFO structure 1 * 401 contains the data in the correct order. The currents are supplied to the decoders 1 * 402. Decoders 1 * 402 request the data from these flows in a serial and deterministic order. Although the order in which decoders 1 * 402 require the encoded data is non-trivial, it is not arbitrary. By ordering the codewords in this order in the encoder instead of the decoder, the encoded data can be collapsed into a single stream. In another embodiment, the encoded data 1 * 410 may contain a single stream of non-collapsed data, with data for 1 each context bin, context class, or probability class added to the data stream. In this case, the FIFO 1 * 410 is replaced by a storage medium 1 * 410 for receiving all the encoded data prior to supplying data to the decoders 1 * 402 so that the data can be correctly segmented.
Als de gecodeerde data 1*410 is ontvangen door de FIFO 1*401 dan bepaalt het contextmodel 1*40*4 de huidige context-bin. In een uitvoeringsvorm bepaalt het contextmodel 1*40*4 de huidige context-bin gebaseerd op eerdere pixels en/of bits. Alhoewel niet getoond kan het 25 contextmodel 1*40*4 een vorm van lijnbuffering gebruiken. De lijnbuffe-ring verschaft de noodzakelijke data, of sjabloon, waarmee het contextmodel 1*40*4 de huidige context-bin bepaalt. Als bijvoorbeeld de context gebaseerd is op pixelwaarden in de nabijheid van de huidige pixel, dan kan de lijnbuffer worden gebruikt voor het opslaan van de 30 pixelwaarden van die pixels in de nabijheid die gebruikt worden voor het verschaffen van de specifieke context.If the coded data 1 * 410 has been received by the FIFO 1 * 401, the context model 1 * 40 * 4 determines the current context bin. In one embodiment, the context model 1 * 40 * 4 determines the current context bin based on previous pixels and / or bits. Although not shown, the context model 1 * 40 * 4 can use some form of line buffering. The line buffering provides the necessary data, or template, with which the context model 1 * 40 * 4 determines the current context bin. For example, if the context is based on pixel values in the vicinity of the current pixel, the line buffer can be used to store the 30 pixel values of those pixels in the vicinity used to provide the specific context.
In responsie op de context-bin haalt de decoder 1*400 de decoder-toestand uit het geheugen 1*403 voor de huidige context-bin. In een uitvoeringsvorm omvat de decodertoestand de toestemden van de waar-35 schijnlijkheid-schattingsmodule (PEM) en vem de bitgenerator. De PEM-toestand bepaalt welke code gebruikt moet worden voor het decoderen van nieuwe codewoorden. De bitgeneratortoestemd bevat een registratie van de bits in de huidige run. De toestand wordt verschaft aan de 1001317 71 decoders 1*102 uit het geheugen 1*103 in responsie op een adres dat geleverd wordt door contextmodel 1*10*1. Het adres spreekt een lokatie aan in het geheugen 1*103 waarin informatie is opgeslagen die correspondeert met de context-bin.In response to the context bin, the decoder 1 * 400 retrieves the decoder state from memory 1 * 403 for the current context bin. In one embodiment, the decoder state includes the probabilities of the probability estimation module (PEM) and the bit generator. The PEM state determines which code to use for decoding new code words. The bit generator permission contains a registration of the bits in the current run. The state is provided to the 1001317 71 decoders 1 * 102 from the memory 1 * 103 in response to an address provided by context model 1 * 10 * 1. The address addresses a location in memory 1 * 103 in which information corresponding to the context bin is stored.
5 Zodra de decodertoestand voor de huidige context-bin is opgehaald uit het geheugen 1*103 bepaalt het stelsel 1*100 het volgende niet-ge-comprimeerde bit en verwerkt de decodertoestand. De decoders 1*102 decoderen dan het nieuwe codewoord indien nodig en/of updaten de run-telling. De PEM-toestand wordt indien nodig ge-updated evenals de 10 bitgeneratietoestand. De decoders 1*102 schrijven dan de nieuwe coder-toestand in het geheugen 1*103.5 Once the decoder state for the current context bin is retrieved from memory 1 * 103, system 1 * 100 determines the next uncompressed bit and processes the decoder state. The decoders 1 * 102 then decode the new codeword if necessary and / or update the run count. The PEM state is updated as necessary as well as the 10 bit generation state. Decoders 1 * 102 then write the new coder state into memory 1 * 103.
Fig. 1*1B illustreert een uitvoeringsvorm van een decoder volgens de onderhavige uitvinding. De decoder volgens fig. 1*1B omvat verschui-vingslogica 1*131. bitgeneratorlogica 1*132, "nieuwe k" logica 1*133. PEM 15 update-logica 1*13*1, nieuwe codewoordlogica 1*135. PEM-toestand naarFig. 1 * 1B illustrates an embodiment of a decoder according to the present invention. The decoder of Fig. 1 * 1B includes shift logic 1 * 131. bit generator logic 1 * 132, "new k" logic 1 * 133. PEM 15 update logic 1 * 13 * 1, new codeword logic 1 * 135. PEM state to
VV
cache-logica 1*136, code-naar-masker-logica 1*137. code-naar-MaxPL, masker, en R3 splitsingsexpansielogica 1*138. decodeerlogica 1*139. multiplexer 1*1*10, en runtelling-update-logica 1*1*11. De verschuivings-logica 1*131 is aangesloten voor ontvangst van gecodeerde ingangsdata 20 1*1*13 alsmede de status-invoer 1*1*12 (uit het geheugen). De uitgang van de verschuivingslogica 1*131 is verder gekoppeld met een ingang van de bitgeneratielogica 1*132, "nieuwe-k." generatielogica 1*133 en de PEM update-logica 1*13*·. De bitgeneratielogica 1*132 is verder aangesloten voor ontvangst van de status-invoer 1*1*12 en genereert de gedecodeerde 25 data aan de uitgang naar het contextmodel. De nieuwe-k logica 1*133 genereert een uitgangssignaal dat toegevoerd wordt aan een ingang van de code-naar-masker-logica 1*137· De PEM update-logica 1*13*1 is ook aangesloten op de status-invoer 1*1*12 en genereert de status-uitvoer (naar het geheugen). De status-invoer 1*1*12 is ook gekoppeld met de 30 ingangen van de nieuwe-codewoord-logica 1*135 en de PEM status-naar-code-logica 1*136. De uitgang vein de PEM status-naar-code-logica 1*136 is aeuigesloten voor ontvangst door de expansielogica 1*138. De uitgang van de expemsielogica 1*138 is verbonden met de decodeerlogica 1*139 en met de runtelling-update-logica 1*1*11. Een euidere ingang van de deco-35 deerlogica is verbonden met de uitgang vein de code-naar-masker-logica 1*137· De uitgang vein de decodeerlogica 1*139 is verbonden met een ingang vein de MUX 1*1*10. De emdere ingang van de MUX 1*1*10 is verbonden met de status-invoer 1*1*12. De selectie-ingang van de MUX 1*1*10 is aan- 1001317 72 gesloten op de uitgang van de nieuwe codewoord-logica 1435* De uitgang van de MUX 1440 en van de expansielogica 1438 zijn gekoppeld met twee ingangen van de runtelling-update-logica l44l tezamen met de uitgang van de code-naar-masker-logica 1437· Het uitgangssignaal van de run-5 telling-update-logica l44l is opgenomen in de status-uitvoer naar het geheugen.cache logic 1 * 136, code-to-mask logic 1 * 137. code-to-MaxPL, mask, and R3 split expansion logic 1 * 138. decoding logic 1 * 139. multiplexer 1 * 1 * 10, and run count update logic 1 * 1 * 11. The shift logic 1 * 131 is connected to receive coded input data 20 1 * 1 * 13 as well as status input 1 * 1 * 12 (from memory). The output of the shift logic 1 * 131 is further coupled to an input of the bit generation logic 1 * 132, "new-k." generation logic 1 * 133 and the PEM update logic 1 * 13 *. The bit generation logic 1 * 132 is further connected to receive the status input 1 * 1 * 12 and generates the decoded data at the output to the context model. The new-k logic 1 * 133 generates an output signal which is applied to an input of the code-to-mask logic 1 * 137 · The PEM update logic 1 * 13 * 1 is also connected to the status input 1 * 1 * 12 and generates the status output (to memory). The status input 1 * 1 * 12 is also coupled to the 30 inputs of the new codeword logic 1 * 135 and the PEM status to code logic 1 * 136. The output of the PEM status-to-code logic 1 * 136 is closed for reception by the expansion logic 1 * 138. The output of the expansion logic 1 * 138 is connected to the decoding logic 1 * 139 and to the run count update logic 1 * 1 * 11. A clearer input of the deco-35 logic is connected to the output vein the code-to-mask logic 1 * 137 · The output ve decode logic 1 * 139 is connected to an input vein the MUX 1 * 1 * 10. The lower input of the MUX 1 * 1 * 10 is connected to the status input 1 * 1 * 12. The selection input of the MUX 1 * 1 * 10 is connected to 1001 317 72 connected to the output of the new codeword logic 1435 * The output of the MUX 1440 and of the expansion logic 1438 are coupled to two inputs of the run count update logic l44l along with the output of the code-to-mask logic 1437 · The output of the run-5 count update logic l44l is included in the status output to memory.
De verschuivingslogica 1431 schuift data in vanuit de gecodeerde datastroom. Gebaseerd op de gecodeerde datastroom-invoer en de status-invoer genereert de bitgeneratielogica 1432 gedecodeerde data naar het 10 contextmodel. Nieuwe-k logica 1433 maakt ook gebruik van de ingeschoven data en de status-invoer voor het genereren van een nieuwe waarde van k. In een uitvoeringsvorm gebruikt de nieuwe-k logica 1433 de PEM-toestand en de eerste bit van de gecodeerde data teneinde een nieuwe waarde van k te genereren. Gebaseerd op de nieuwe k-waarde genereert 15 de code-naar-masker-logica 1437 een RLZ-masker voor het volgende codewoord. Het RLZ-masker voor het volgende codewoord wordt toegezonden aan de decodeerlogica 709 en aan de runtelling-update-logica l44l.The shift logic 1431 inserts data from the encoded data stream. Based on the encoded data stream input and the status input, the bit generation logic 1432 generates decoded data to the context model. New-k logic 1433 also uses the retracted data and the status input to generate a new value of k. In one embodiment, new k logic 1433 uses the PEM state and the first bit of the encoded data to generate a new value of k. Based on the new k value, the code-to-mask logic 1437 generates an RLZ mask for the next code word. The RLZ mask for the next codeword is sent to decoding logic 709 and run count update logic 144l.
De PEM update-logica 1434 zorgt voor het updaten van de PEM-toe-stand, In een uitvoeringsvorm wordt de PEM-toestand ge-updated ge-20 bruikmakend van de huidige toestand. De ge-update toestand wordt aan het geheugen toegevoerd. De nieuwe codewoordlogica 1435 stelt vast of een nieuw codewoord nodig is. De ;PEM toestand-naar-code-logica 1436 bepaalt de code voor het decoderen gebruikmakend van de status-invoer 1442. De code wordt ingevoerd in de expansielogica 1438 voor het gene-25 reren van de maximale runlengte, het huidige masker en een R3 split-singswaarde. De decodeerlogica 1439 decodeert het codewoord teneinde een runtelling-uitgangswaarde te produceren. MUX 1440 selecteert ofwel de uitgang van de decodeerlogica 1439 danwel de status-invoer 1442 naar de runtelling-update-logica l44l. De runtelling-update-logica 30 1441 zorgt voor het updaten van de runtelling.The PEM update logic 1434 provides for updating the PEM state. In one embodiment, the PEM state is updated using the current state. The updated state is supplied to the memory. The new codeword logic 1435 determines whether a new codeword is needed. The PEM state-to-code logic 1436 determines the code for decoding using the status input 1442. The code is input to the expansion logic 1438 to generate the maximum run length, the current mask and an R3 split value. Decoding logic 1439 decodes the codeword to produce a run count output value. MUX 1440 selects either the output from the decoding logic 1439 or the status input 1442 to the run count update logic 1444l. The run count update logic 30 1441 updates the run count.
Het decodeerstelsel 1400 omvat een decoder 1430 die volgens de uitvinding op een pijplijnwijze functioneert. In een uitvoeringsvorm bepaalt het decodeerstelsel 600 volgens de uitvinding context-bins, schat waarschijnlijkheden, decodeert codewoorden en genereert bits uit 35 runtellingen allemaal op een pijplijnwijze. Een uitvoeringsvorm van de pijplijnstructuur voor het decodeerstelsel is aangeduid in fig. 15A. De uitvoeringsvorm van het pijplijndecodeerproces volgens de uitvinding is in fig. 15A getoond in zes trappen genummers 1-6.The decoding system 1400 includes a decoder 1430 which operates according to the invention in a pipeline manner. In one embodiment, the decoding system 600 of the invention determines context bins, estimates probabilities, decodes codewords, and generates bits from 35 run counts all in a pipeline fashion. An embodiment of the pipeline structure for the decoding system is shown in Fig. 15A. The embodiment of the pipeline decoding process according to the invention is shown in six steps numbers 1-6 in Fig. 15A.
1001317 .1001317.
7373
In de eerste trap · wordt het huidige context-bin vastgesteld (1501). In de tweede trap wordt, nadat de context-bin is vastgesteld, een geheugen uitgelezen (1502) waarbij de huidige decoderstatus voor het context-bin uit het geheugen wordt gehaald. Zoals boven aangegeven 5 omvat de decoderstatus de PEM-status en de bitgeneratorstatus.In the first stage, the current context bin is determined (1501). In the second stage, after the context bin has been determined, a memory is read (1502) extracting the current context bin decoder status from the memory. As indicated above, the decoder status includes the PEM status and the bit generator status.
In de derde trap van het pijplijndecodeerproces volgens de uitvinding wordt een gedecomprimeerd bit gegenereerd (1503). Dit maakt het mogelijk dat een bit beschikbaar is voor het contextmodel. Twee andere operaties vinden plaats gedurende de derde trap. De PEM-status wordt 10 omgevormd in een codetype (1504) en in de derde trap vindt ook de bepaling plaats of een nieuwe codewoord moet worden gedecodeerd (1505).In the third stage of the pipeline decoding process according to the invention, a decompressed bit is generated (1503). This allows a bit to be available for the context model. Two other operations take place during the third stage. The PEM status is converted into a code type (1504) and in the third stage also the determination is made whether a new code word is to be decoded (1505).
Gedurende de vierde trap verwerkt het decodeerstelsel een codewoord en/of update de runtelling (1506). Er zijn diverse sub-operaties 15 betrokken bij het verwerken van een codewoord en het updaten van deDuring the fourth stage, the decoding system processes a codeword and / or updates the run count (1506). Several sub-operations 15 are involved in processing a codeword and updating the
VV
runtelling. Een codewoord wordt bijvoorbeeld gedecodeerd om de volgende runtelling vast te stellen of de runtelling wordt ge-updated voor het huidige codewoord (1506). Indien nodig wordt bij het decoderen van nieuwe codewoorden meer gecodeerde data opgehaald uit de ingangs-FIFO. 20 Een andere sub-operatie die in de vierde trap plaatsvindt is het updaten van de PEM-status (1507)- Tenslotte wordt in de vierde trap van de decodeerpijplijn de nieuwe PEM-status gebruikt om vast te stellen wat het runlengte-nulcodewoord (wordt nog beschreven) is voor de volgende code indien de runtelling van het huidige codewoord nul is 25 (1508).run count. For example, a codeword is decoded to determine the next run count or the run count is updated for the current codeword (1506). If necessary, more coded data is retrieved from the input FIFO when decoding new codewords. Another sub-operation that takes place in the fourth stage is updating the PEM status (1507) - Finally, in the fourth stage of the decoding pipeline, the new PEM status is used to determine what the runlength zero code word (is as described) is for the next code if the run count of the current codeword is zero 25 (1508).
Gedurende de vijfde trap van de decodeerpijplijn volgens de uitvinding wordt de decodeerstatus met een ge-update PEM-status ingeschreven in het geheugen (1509) en begint de verschuiving voor het volgende codewoord (1510). In de zesde trap is de verschuiving naar 30 het volgende codewoord voltooid (1510).During the fifth stage of the decoding pipeline according to the invention, the decoding status with an updated PEM status is written into the memory (1509) and the shift for the next codeword (1510) begins. In the sixth stage, the shift to the next codeword is completed (1510).
De pijplijndecodering volgens de uitvinding begint feitelijk met een beslissing of het decodeerproces al dan niet moet worden gestart. Deze beslissing is gebaseerd op het feit of er genoeg data aanwezig is voor de decoder volgens de onderhavige uitvinding. Indien er niet 35 genoeg data van de FIFO is, wordt het decodeerstelsel gestopt. In een ander geval kan het decodeerstelsel worden gestopt indien de gedecodeerde data wordt afgegeven aan een perifere inrichting die niet in staat is om alle data aan de uitgang van de decoder tijdens de genera- 1001317 74 tie daarvan te ontvangen.· Als de decoder bijvoorbeeld een uitgangssignaal verschaft aan de interface van een videoweergeefeenheid met zijn bijbehorende videoschakelingen dan kan de video te langzaam zijn zodat de decoder moet worden gestopt om de video de gelegenheid te geven om 5 bij te komen.The pipeline decoding according to the invention actually starts with a decision whether or not to start the decoding process. This decision is based on whether there is enough data for the decoder of the present invention. If there is not enough FIFO data, the decoding system is stopped. In another case, the decoding system can be stopped if the decoded data is delivered to a peripheral device that is unable to receive all the data at the decoder output during its generation. output signal to the interface of a video display unit with its associated video circuitry, then the video may be too slow so that the decoder must be stopped to allow the video to join.
Zodra de beslissing is genomen om het decodeerproces te starten, wordt de huidige context-bin door het contextmodel vastgesteld. Volgens de onderhavige uitvinding wordt de context-bin bepaald door het onderzoeken van voorafgaande data. Deze voorafgaande data kan opgesla-10 gen worden in lijnbuffers en kan data bevatten uit de huidige lijn en/of voorafgaande lijnen. Bijvoorbeeld in een context-sjabloon voor een bepaald bit. Bits uit de lijnbuffer(s) kunnen worden ontworpen gebruikmakend van een sjabloon met betrekking tot de voorafgaande data zodat de context-bin voor de huidige data geselecteerd wordt afhanke-15 lijk van het feit of de onderzochte voorafgaande data overeenstemt met l de sjabloon. Deze lijnbuffers kunnen voorzien zijn van bit-schuifre-gisters. Een sjabloon kan worden gebruikt voor elk bitvlak van een n-bit-afbeelding.Once the decision has been made to start the decoding process, the current context bin is determined by the context model. According to the present invention, the context bin is determined by examining previous data. This preliminary data can be stored in line buffers and can contain data from the current line and / or previous lines. For example in a context template for a certain bit. Bits from the line buffer (s) can be designed using a template with respect to the previous data so that the context bin for the current data is selected depending on whether the examined previous data matches the template. These line buffers can be provided with bit shift registers. A template can be used for any bit plane of an n-bit image.
In een uitvoeringsvorm wordt de context-bin geselecteerd door het 20 afgeven van een adres aan het geheugen gedurende de volgende pijplijn-trap. Het adres kan een voorafbepaald aantal bits omvatten, bijvoorbeeld drie bits, teneinde het bitvlak te identificeren. Door het gebruik van drie bits kan de bitpositie in de pixeldata worden geïdentificeerd. De sjabloon die gebruikt wordt voor het vaststellen van de 25 context kan ook worden vertegenwoordigd als deel van het adres. De bits die gebruikt worden voor het identificeren van het bitvlak en de bits die de sjabloon identificeren kunnen worden gecombineerd teneinde een adres te creëren voor een specifieke lokatie in het geheugen die de toestand-informatie bevat voor de door deze bits gedefinieerde 30 context-bin. Door gebruik te maken van drie bits voor het vaststellen van de bitpositie in een bepaalde pixel en de tien voorafgaande bits in dezelfde positie in elk van de voorafgaande pixels in de sjabloon kan een 13 bit context-adres worden gegenereerd.In one embodiment, the context bin is selected by outputting an address to the memory during the next pipeline stage. The address can include a predetermined number of bits, for example three bits, to identify the bit plane. By using three bits, the bit position in the pixel data can be identified. The template used to determine the context can also be represented as part of the address. The bits used to identify the bit plane and the bits identifying the template can be combined to create an address for a specific location in memory that contains the state information for the context bin defined by these bits. By using three bits to determine the bit position in a given pixel and the ten preceding bits in the same position in each of the preceding pixels in the template, a 13 bit context address can be generated.
Gebruikmakend van het door het contextmodel gecreëerde adres wordt 35 het geheugen (b.v. een RAM) aangesproken teneinde status-informatie te verkrijgen. De status omvat de PEM-status. De PEM-status omvat de huidige waarschijnlijkheidsschatting. Omdat meer dan één status gebruik maakt van dezelfde code bevat de PEM-status geen waarschijnlijk- 100 73 J 7 , 75 heidsklasse of code-designatie, maar in plaats daarvan een index met een tabel, zoals de tabel die getoond is in fig. 5· Wanneer een tabel zoals getoond in fig. 5 wordt gebruikt dan verschaft de PEM-status ook het meest waarschijnlijke symbool (MPS) als middel voor het identifi-5 ceren of de huidige PEM-status gelokaliseerd is aan de positieve of negatieve zijde van de tabel. De bitgeneratiestatus kan de tellerwaar-de en een indicatie of een LPS al dan niet aanwezig is omvatten. In een uitvoeringsvorm is ook de MPS-waarde voor de huidige run opgenomen voor het decoderen van het volgende codewoord. Volgens de onderhavige 10 uitvinding is de bitgeneratorstatus opgeslagen in het geheugen teneinde de ruimte die nodig is voor de run tellers te reduceren. Als de kosten van ruimte in het stelsel voor de tellers voor elke context laag is, behoeft de bitgeneratiestatus niet in een geheugen te worden opgeslagen.Using the address created by the context model, the memory (e.g., a RAM) is accessed to obtain status information. The status includes the PEM status. PEM status includes the current probability estimate. Since more than one state uses the same code, the PEM state does not contain a probability class or code designation, but instead an index with a table, such as the table shown in Fig. 5 When using a table as shown in Fig. 5, the PEM status also provides the most likely symbol (MPS) as a means of identifying whether the current PEM status is located on the positive or negative side of the table. The bit generation status may include the counter value and an indication of whether or not an LPS is present. In one embodiment, the MPS value for the current run is also included for decoding the next codeword. According to the present invention, the bit generator status is stored in memory in order to reduce the space required for the run counters. If the cost of space in the system for the counters for each context is low, the bit generation status need not be stored in a memory.
15 Zodra de vierde trap voltooid is, wordt de nieuwe bitgeneratorsta- tus en de PEM-status ingeschreven in het geheugen. Ook in de vijfde trap wordt de gecodeerde datastroom verschoven naar het volgende codewoord. De verschuivingsoperatie wordt in de zesde trap voltooid.As soon as the fourth stage is completed, the new bit generator status and the PEM status are written into memory. Also in the fifth stage, the coded data stream is shifted to the next codeword. The shift operation is completed in the sixth stage.
Fig. l4C is een blokschema van een uitvoeringsvorm van de F1F0-20 structuur 1401 volgens de uitvinding en illustreert het bufferen van ineengeschoven woorden voor twee decoders. Opgemerkt wordt dat een willekeurig aantal decoders kan worden ondersteund gebruikmakend van hetgeen hierin is beschreven. Zoals getoond zijn de ingangsdata en de FIFO breed genoeg om twee ineengeschoven woorden te bevatten. De FIFO 25 l401 omvat de FIFO 1460, de registers 1461-62, de MUX-en 1463-1464 en het besturingsblok 1465· De twee ingangscodewoorden worden toegevoerd als ineengeschoven ingangswoorden. De uitgangen van de FIFO 1460 zijn gekoppeld met de ingangen van de registers 1461-1462. De ingangen van de MUX 1463 zijn gekoppeld met de uitgangen van de registers 1461 en 30 1462. Het besturingsblok 1465 is aangesloten voor het leveren van stuursignalen aan de FIFO 1460, registers 1461 en 1462 en MUX-en 1463 en 1464. Ineengeschoven woorden vormen de uitgangsdata (uitgangsdata 1 en 2) die geleverd worden aan twee decoders. Elke decoder gebruikt een verzoeksignaal om aan te geven dat het huidige woord gebruikt is en 35 vervolgens een nieuw woord nodig is. De verzoeksignalen van de decoders worden toegevoerd aan de ingangen van het stuurblok 1465· Het stuurblok 1465 geeft ook een FIFO-verzoeksignaal af om meer data uit het geheugen op te vragen.Fig. 14C is a block diagram of an embodiment of the F1F0-20 structure 1401 of the invention and illustrates buffered words for two decoders. It is noted that any number of decoders can be supported using what is described herein. As shown, the input data and FIFO are wide enough to contain two words interleaved. The FIFO 251401 includes the FIFO 1460, the registers 1461-62, the MUX and 1463-1464 and the control block 1465. The two input code words are supplied as input words interleaved. The outputs of the FIFO 1460 are linked to the inputs of registers 1461-1462. The inputs of the MUX 1463 are coupled to the outputs of the registers 1461 and 1462. The control block 1465 is connected to supply control signals to the FIFO 1460, registers 1461 and 1462 and MUX-en 1463 and 1464. Interleaved words form the output data (output data 1 and 2) that are supplied to two decoders. Each decoder uses a request signal to indicate that the current word has been used and then a new word is needed. The decoder request signals are applied to the inputs of control block 1465. Control block 1465 also outputs a FIFO request signal to request more data from the memory.
1001317 V1001317 V
7676
Aanvankelijk zijn de· FIFO en de registers 1461 en 1462 gevuld met data en is een geldig-flipflop in de stuureenheid 1465 ingesteld. Zodra een verzoek optreedt levert het stuurblok 1465 data volgens de logica die getoond is in tabel P.Initially, the FIFO and registers 1461 and 1462 are filled with data and a valid flip-flop is set in the controller 1465. As soon as a request occurs, the control block 1465 provides data according to the logic shown in Table P.
55
Tabel PTable P
Beide Verzoek Verzoek Multi- Multi- Volgende FIFO en geldig 1 2 plexer 1 plexer 2 beide register geldig vrijgave KKBsunsas Kssansssc ssbhbbmkmk ^^^^^^b^bb o o o I x* X o o 10 0 0 1 X REG 1462 1 1 0 1 0 REG 1462 X 1 1 0 11 REG 1462 FIFO v 0 1 1 0 0 X X 1 0 1 0 1 X REG 1461 0 0 15 1 1 o REG 1461 X 0 0 1 1 1 REG 1461 REG 1462 1 1 *X betekent "don't care" 20 Fig. 15B illustreert een ander conceptueel aanzicht van de decoder volgens de uitvinding. Volgens fig. 15B wordt (gecodeerde) data met variabele lengte ingevoerd in een decoder. De decoder geeft (gedecodeerde) data met vaste lengte af. Het uitgangssignaal wordt teruggevoerd als een vertraagd terugkoppelsignaal dat ontvangen wordt als 25 ingangssignaal in de decoder. In de decoder volgens de uitvinding wordt een verschuiving met variabele lengte gebruikt in het decodeer-proces gebaseerd op de gedecodeerde data die na een zekere vertraging beschikbaar is. De terugkoppelverfraging reduceert niet de doorvoer in de vertraging-tolerante decoder.Both Request Request Multi- Multi- Next FIFO and valid 1 2 plexer 1 plexer 2 both register valid release KKBsunsas Kssansssc ssbhbbmkmk ^^^^^^ b ^ bb ooo I x * X oo 10 0 0 1 X REG 1462 1 1 0 1 0 REG 1462 X 1 1 0 11 REG 1462 FIFO v 0 1 1 0 0 XX 1 0 1 0 1 X REG 1461 0 0 15 1 1 o REG 1461 X 0 0 1 1 1 REG 1461 REG 1462 1 1 * X means " don't care "20 Fig. 15B illustrates another conceptual view of the decoder of the invention. According to Fig. 15B, (coded) variable length data is input into a decoder. The decoder outputs fixed-length (decoded) data. The output signal is fed back as a delayed feedback signal which is received as an input signal in the decoder. In the decoder according to the invention, a variable length shift is used in the decoding process based on the decoded data available after a certain delay. The feedback delay does not reduce the throughput in the delay-tolerant decoder.
30 De ingangsdata met variabele lengte wordt verdeeld in ineengescho ven woorden met vaste lengte zoals beschreven in samenhang met fig. 4.The variable length input data is divided into fixed length interleaved words as described in conjunction with Fig. 4.
De decoder gebruikt de vaste lengte woorden als beschreven in het onderstaande met verwijzing naar fig. 16A. De decoder en de vertraging 1001317 77 modelleren een pijplijndecoder als beschreven in samenhang met de fig. 15 en 32 of een aantal parallelle decoders als beschreven in samenhang met de fig. 2A-2D. De onderhavige uitvinding verschaft derhalve een vertraging-tolerante decoder. De vertraging-tolerante decoders volgens 5 de uitvinding maken een parallelle behandeling van data met variabele lengte mogelijk.The decoder uses the fixed length words as described below with reference to Fig. 16A. The decoder and delay 1001317 77 model a pipeline decoder as described in connection with Figures 15 and 32 or a number of parallel decoders as described in connection with Figures 2A-2D. The present invention therefore provides a delay tolerant decoder. The delay-tolerant decoders of the invention allow for parallel processing of variable length data.
bekende decoders (b.v. de Huffman-decoders) zijn niet vertraging-tolerant. Informatie die afkomstig is uit de decodering van alle voorafgaande codewoorden is nodig om een variabele lengte verschuiving uit 10 te voeren die nodig is voor het decoderen van het volgende codewoord. Anderzijds verschaft de onderhavige uitvinding vertraging-tolerante decoders.known decoders (e.g. the Huffman decoders) are not delay tolerant. Information from the decoding of all previous codewords is required to perform a variable length shift needed to decode the next codeword. On the other hand, the present invention provides delay tolerant decoders.
Verschuiving in het decodeerstelsel 15 De decoder volgens de onderhavige uitvinding verschaft een ver-Shift in the decoding system. The decoder according to the present invention provides an
VV
schuivingslogica voor het verschuiven van de ineengeschoven woorden naar de juiste bitgenerator ter decodering. De verschuiver volgens de uitvinding heeft geen bepaald type "via context" of "via waarschijnlijkheid" parallel mechanisme nodig. Er wordt een codeereenheid veron-20 derstold die codewoord M toewijst aan stroom M mod N (MJ£N in de C taal), waarbij N het aantal stromen is. In de onderhavige uitvinding wordt gecodeerde data uit de huidige stroom gepresenteerd totdat een codewoord wordt gevraagd. Pas dein wordt de data overgescheikeld naar de volgende stroom.shift logic for shifting the interleaved words to the appropriate bit generator for decoding. The shifter according to the invention does not require a particular type of "via context" or "via probability" parallel mechanism. An encoder is set which assigns code word M to stream M mod N (MJ N N in the C language), where N is the number of streams. In the present invention, coded data from the current stream is presented until a codeword is requested. Only then is the data transferred to the next stream.
25 Fig. 16 illustreert een uitvoeringsvorm van de verschuiver voor de decoder volgens de uitvinding. De verschuiver 1600 is ontworpen voor vier datastromen. Daarmee zijn vier klokcyclussen voor elke verschui-vingsoperatie mogelijk. De ineengeschoven woorden zijn 16 bits en het langste codewoord is 13 bits. Volgens fig. 16 omvat de verschuiver 30 1600 vier registers 1601-1604 aangesloten voor ontvangst van ingangs signalen uit de ineengeschoven gecodeerde data. De uitgangen van elk van de registers I601-l604 zijn verbonden met ingangen van een MUX I605. De uitgang van de MUX 1605· is gekoppeld met de ingang van een trommelverschuiver 1606. De uitgang van de trommelverschuiver 1606 is 35 verbonden met de ingangen van een register 1607, een MUX & registers I6O8-I6IO en een maateenheid l6ll. De uitgang van de maateenheid 1611 is gekoppeld met een accumulator 1612. De uitgang van de accumulator I6l2 is teruggekoppeld en verbonden met de trommelverschuiver I6O6.FIG. 16 illustrates an embodiment of the decoder shifter of the invention. The 1600 shifter is designed for four data streams. This allows four clock cycles for each shift operation. The interleaved words are 16 bits and the longest codeword is 13 bits. In FIG. 16, the shifter 1600 includes four registers 1601-1604 connected to receive input signals from the interleaved coded data. The outputs of each of registers I601-1604 are connected to inputs of a MUX I605. The output of the MUX 1605 is coupled to the input of a drum shifter 1606. The output of the drum shifter 1606 is connected to the inputs of a register 1607, a MUX & registers I6O8-I6IO and a unit of measure l6ll. The output of the measuring unit 1611 is coupled to an accumulator 1612. The output of the accumulator I6l2 is fed back and connected to the drum shifter I6O6.
10013Π 7810013Π 78
Een uitgang van het register 1607 is verbonden met een ingang van de MUX & register I6O8. Een uitgang van de MUX & register I6O8 is verbonden met een ingang van de MUX & register 1609· Een uitgang van de MUX & register 1609 is verbonden met een ingang van de MUX ί. register 5 I6l0. De uitgang van de MUX & register l6l0 voert de uitgelijnde geco deerde data. In een uitvoeringsvorm zijn de registers 1601-1604 allemaal 16-bit registers, is de trommelverschuiver I6O6 een 32-bit naar 13~bit trommelverschuiver en is de accumulator 1612 een 4-bit accumulator.An output of the register 1607 is connected to an input of the MUX & register I6O8. An output of the MUX & register I6O8 is connected to an input of the MUX & register 1609 · An output of the MUX & register 1609 is connected to an input of the MUX ί. register 5 I610. The output of the MUX & register 1610 carries the aligned encoded data. In one embodiment, registers 1601-1604 are all 16-bit registers, drum shifter I6O6 is a 32-bit to 13-bit drum shifter, and accumulator 1612 is a 4-bit accumulator.
10 De registers 1601-160*1 accepteren 16-bit woorden van de FIFO en voeren deze toe aan de trommelverschuiver l606. Ten minste 32 bits van niet-gecodeerde data wordt telkens geleverd aan de trommelverschuiver 1606. De vier registers 1601-1604 zijn geïnitialiseerd met twee 16-bit woorden van gecodeerde data om te beginnen. Dit maakt het mogelijk dat 15 er ten minste één nieuw codewoord beschikbaar is voor elke stroom.The registers 1601-160 * 1 accept 16-bit words from the FIFO and feed them to the drum shifter l606. At least 32 bits of unencrypted data are each supplied to the drum shifter 1606. The four registers 1601-1604 are initialized with two 16-bit words of encoded data to start. This allows at least one new codeword to be available for each stream.
Voor R-codes bepaalt de codewoord-maateenheid 1611 of een "0" of "IN" codewoord aanwezig is en indien het een "IN" codewoord is, hoeveel bits na de "1" deel uitmaken van het huidige codewoord. De maateenheid, die dezelfde functie uitvoert, was al beschreven aan de hand 20 van fig. 12. Voor andere codes behoort het vaststellen van de maat van een codewoord tot de stand der techniek.For R codes, the codeword measure 1611 determines whether an "0" or "IN" codeword is present and if it is an "IN" codeword, how many bits after the "1" are part of the current codeword. The unit of measure, which performs the same function, has already been described with reference to Fig. 12. For other codes, determining the size of a codeword is known in the art.
De verschuiver 1600 omvat een FIFO met vier registers, waarvan er drie gemultiplexde ingangen hebben. Elk register van de registergroep I6O7-I6IO bevat ten minste één codewoord en de breedte van de regis-25 ters en de multiplexers is derhalve 13 bits hetgeen overeenstemt met het langst mogelijke codewoord. Elk register heeft ook een bijbehorende stuur-flipflop (niet getoond om verwarring te voorkomen) die aangeeft of een bepaald register een codewoord bevat danwel wacht totdat de trommelverschuiver I606 een codewoord levert.The shifter 1600 includes a four register FIFO, three of which have multiplexed inputs. Each register of the register group I6O7-I6IO contains at least one codeword and the width of the registers and multiplexers is therefore 13 bits, which corresponds to the longest possible codeword. Each register also has an associated control flip-flop (not shown to avoid confusion) that indicates whether a particular register contains a codeword or waits for the drum shifter I606 to provide a codeword.
30 De FIFO zal nooit leeg zijn. Slechts één codewoord kan per klokcy clus worden gebruikt en één codewoord kan per klokcyclus worden verschoven. De vertraging voor het uitvoeren van de verschuiving wordt gecompenseerd omdat het stelsel «tart met vier codewoorden. Terwijl elk codewoord wordt verschoven om de uitgelijnde gecodeerde uitgangs-35 data te verkrijgen worden de andere codewoorden in de registers I6O7-I6IO neerwaarts geschoven. Als het in de FIFO achtergebleven codewoord opgeslagen wordt in het register 1620 dan zorgt de trommelverschuiver 1606 voor het uitlezen van codewoorden uit de registers30 FIFO will never be empty. Only one codeword can be used per clock cycle and one codeword can be shifted per clock cycle. The delay for performing the shift is compensated because the system defies with four code words. As each codeword is shifted to obtain the aligned coded output 35 data, the other codewords in the registers I6O7-I6IO are shifted down. If the codeword left in the FIFO is stored in the register 1620, the drum shifter 1606 reads codewords from the registers
1001317 A1001317 A
79 I601-l604 via de MUX 1605 teneinde de registers I6O7-I6O9 te vullen. Opgemerkt wordt dat de FIFO zodanig uitgevoerd kan zijn dat het register I6O7 opnieuw wordt gevuld met het volgende codewoord zodra zijn codewoord naar register I6O8 is verschoven.79 I601-1604 via the MUX 1605 to fill the registers I6O7-I6O9. It is noted that the FIFO may be configured such that the register I6O7 is refilled with the next codeword once its codeword has been shifted to register I6O8.
5 De trommelverschuiver I606, de codewoord-maatcalculator l6ll en de accumulator 1612 behandelen de variabele lengteverschuiving. De accumulator I6l2 heeft vier registers, één voor elke gecodeerde data-stroom, die de uitrichting bevatten van het huidige codewoord voor elke datastroom. De accumulator 1612 is een vier bit-accumulator die 10 gebruikt wordt voor het besturen van de trommelverschuiver 1606. De accumulator 1612 verhoogt zijn waarde met de waarde die aan de ingang wordt ontvangen van de codewoord-maateenheid 1611. Als de accumulator l6l2 een overloop vertoont (d.w.z. telkens wanneer de verschuivings-telling 16 of meer is) dan worden de registers 1601-1604 geklokt om te 15 verschuiven. Om de andere 16 bit verschuiving wordt een nieuw 32 bit woord gevraagd uit de FIFO. Het ingangssignaal naar de accumulator l6ll is de maat van een codewoord, hetgeen vastgesteld wordt door de huidige code en de eerste één of twee bits van het huidige codewoord. Opgemerkt wordt dat in sommige uitvoeringsvormen de registers 20 1601-1604 geïnitialise; rd moeten worden met gecodeerde data voordat de decodering kan beginnen.The drum shifter I606, the codeword size calculator 1611 and the accumulator 1612 handle the variable length shift. The accumulator I6l2 has four registers, one for each encoded data stream, containing the alignment of the current codeword for each data stream. The accumulator 1612 is a four bit accumulator used to control the drum shifter 1606. The accumulator 1612 increases its value by the value received at the input from the codeword measure 1611. If the accumulator 1612 has an overflow (ie, whenever the shift count is 16 or more), registers 1601-1604 are clocked to shift. For the other 16 bit shift, a new 32 bit word is requested from FIFO. The input to the accumulator 1611 is the measure of a codeword, which is determined by the current code and the first one or two bits of the current codeword. It is noted that in some embodiments, registers 20 1601-1604 initialize; rd must be encoded with data before decoding can begin.
Als een codewoord door het systeem wordt gevraagd dein worden de V, registers in de FIFO geklokt zodat de codewoorden naar de uitgang bewegen. Als de trommelverschuiver I6O6 gereed is om een nieuw code-25 woord af te geven dan wordt dit gemultiplexed in het eerste lege register in de FIFO.When a code word is requested by the system, the V registers are clocked into the FIFO so that the code words move to the output. When the drum shifter I6O6 is ready to issue a new code 25 word, it is multiplexed into the first empty register in FIFO.
In deze uitvoeringsvorm wordt het volgende codewoordsignaal van de bitgenerator ontvangen voordat de beslissing voor het omschakelen van stromen wordt genomen.In this embodiment, the following code word signal is received from the bit generator before the decision to switch flows is made.
30 Als het volgende codewoordsignaal uit de bitgenerator niet gega randeerd wordt ontvangen voorafgaand aan de beslissing om vein stroom te wisselen, kan een naar voren kijkend stelsel, zoals het stelsel getoond in fig. 16B worden gebruikt. In fig. 16B is een naar voren kijkende schuifeenheid 1620 in blokschemavorm getoond. De schuifeen-35 heid I62O omvat een verschuiver 1600 die aan zijn uitgang de huidige gecodeerde data en de volgende gecodeerde data levert. De huidige gecodeerde data wordt toegevoerd aan een ingang van een logische code-woord-voorverwerkingseenheid 1621 en een ingang vein een codewoordver- 1001317< 80 werkingseenheid 1624. De volgende gecodeerde data wordt toegevoerd aan een Ingang van een logische codewoord-voorverwerkingseenheid 1622. De uitgangen van de beide logische voorverwerkingseenheden 1621 en 1622 zijn verbonden met de ingangen van een MUX 1623. De uitgang van de MUX 5 1623 is gekoppeld met een andere ingang van de codewoordverwerkingslo- gica 1624.If the next codeword signal from the bit generator is not guaranteedly received prior to the decision to switch vein current, a forward looking system such as the system shown in Fig. 16B may be used. In Fig. 16B, a forward looking sliding unit 1620 is shown in block diagram form. The shift unit I62O includes a shifter 1600 which outputs the currently encoded data and the next encoded data. The current coded data is supplied to an input of a logical code word preprocessing unit 1621 and an input to a codeword processor 1001317 <80 operating unit 1624. The following coded data is supplied to an input of a logical codeword preprocessing unit 1622. The outputs of the two logical preprocessing units 1621 and 1622 are connected to the inputs of a MUX 1623. The output of the MUX 5 1623 is coupled to another input of the codeword processing logic 1624.
De logica die het codewoord gebruikt is verdeeld in twee delen, de codewoordvoorverwerkingslogica en de codewoordverwerkingslogica. Twee identieke in pijplijn werkende voorverwerkingseenheden 1621-1622 func-10 tioneren voordat de ineengeschoven stroom kan worden verschoven. Een van de voorwerkingseenheden 1621-1622 genereert de juiste informatie indien van stroom wordt omgeschakeld en de andere genereert de informatie indien niet van stroom wordt omgeschakeld. Als de stroom wordt omgeschakeld, wordt de uitgang van de juiste codewoordvoorverwerkings-15 eenheid gemultiplexed door de MUX 1623 naar de codewoordverwerkingslo-gica 1624 die de operatie op het juiste codewoord voltooit.The logic using the codeword is divided into two parts, the codeword preprocessing logic and the codeword processing logic. Two identical pipeline preprocessing units 1621-1622 operate before the interleaved stream can be shifted. One of the pre-processing units 1621-1622 generates the correct information when power is switched and the other generates the information when power is not switched. When the power is switched, the output of the correct codeword preprocessing unit is multiplexed by the MUX 1623 to the codeword processing logic 1624 which completes the operation on the correct codeword.
Niet op de chip gelegen geheugen en contextmodellenNon-chip memory and context models
Het kan in een uitvoeringsvorm wenselijk zijn om meerdere chips 20 voor externe geheugens of externe contextmodellen te gebruiken. In deze uitvoeringsvormen is het wenselijk om de vertraging tussen het genereren van een bit en het beschikbaar hebben van het bit in het contextmodel te reduceren indien er meerdere geïntegreerde schakelingen worden gebruikt.In one embodiment, it may be desirable to use multiple chips 20 for external memories or external context models. In these embodiments, it is desirable to reduce the delay between generating a bit and having the bit available in the context model if multiple integrated circuits are used.
25 Fig. 17 illustreert een blokschema van een uitvoeringsvorm van een stelsel met zowel een externe contextmodelchip 1701 en een codeerchip 1702 met geheugen voor elke context. Opgemerkt wordt dat alleen de eenheden die relevant zijn voor het contextmodel in de codeerchip zijn getoond; het zal voor de deskundigen duidelijk zijn dat de codeerchip 30 1702 zorgt voor bitgeneratie, waarschijnlijkheidsschatting, enz. De codeerchip 1702 volgens fig. 17 omvat een nulde orde contextmodel 1703. contextmodellen 1704 en 1705, selectielogica 1706, een geheugen-stuureenheid 1707 en een geheugen 1708. Het nulde orde contextmodel 1703 en de 'contextmodellen 1704 en 1705 genereren uitgangssignalen die 35 toegevoerd worden aan de ingangen van de selectielogica 1706. De andere ingang van de selectielogica 1706 is verbonden met een uitgang van de externe contextmodelchip 1701. De uitgang van de selectielogica 1706 is verbonden met een ingang van een geheugen 1708. Ook gekoppeld 1001317 81 met een ingang van het geheugen 1708 is een uitgang van de geheugen-stuureenheid 1707·FIG. 17 illustrates a block diagram of an embodiment of a system with both an external context model chip 1701 and an encoding chip 1702 with memory for each context. It is noted that only the units relevant to the context model are shown in the coding chip; It will be apparent to those skilled in the art that the encoding chip 1702 provides bit generation, probability estimation, etc. The encoding chip 1702 of Figure 17 includes a zero order context model 1703. context models 1704 and 1705, selection logic 1706, a memory controller 1707, and a memory 1708. The zero order context model 1703 and the context models 1704 and 1705 generate output signals applied to the inputs of the selection logic 1706. The other input of the selection logic 1706 is connected to an output of the external context model chip 1701. The output of the selection logic 1706 is connected to an input of a memory 1708. Also coupled 1001317 81 to an input of the memory 1708 is an output of the memory controller 1707 ·
De selectielogica 1706 maakt het mogelijk gebruik te maken van ofwel een extern contextmodel of een intern contextmodel (b.v. het 5 nulde orde contextmodel 1703. contextmodel 1704, contextmodel 1705). De selectielogica 1706 maakt het mogelijk om het interne nulde orde deel van contextmodel 1703 te gebruiker, zelfs indien het externe contextmodel I7OI wordt gebruikt. Het nulde orde contextmodel 1703 verschaft een of meer bits terwijl de externe contextmodelchip 1701 de 10 rest verschaft. De direct voorafgaande bits kunnen bijvoorbeeld worden teruggekoppeld en worden opgehaald uit het nulde orde contextmodel 1703 terwijl de voorafgaande bits naar het externe contextmodel 1701 gaan. Op deze wijze blijft de tijd-kritische informatie op de chip zelf. Dit elimineert de off-chip communicatievertraging voor recent 15 gegenereerde bits.The selection logic 1706 allows to use either an external context model or an internal context model (e.g., the 5 zero order context model 1703. context model 1704, context model 1705). The selection logic 1706 makes it possible to use the internal zero order portion of context model 1703 even if the external context model I7OI is used. The zero order context model 1703 provides one or more bits while the external context model chip 1701 provides the remainder. For example, the immediately preceding bits can be fed back and retrieved from the zero order context model 1703 while the preceding bits go to the external context model 1701. In this way, the time-critical information remains on the chip itself. This eliminates the off-chip communication delay for recently generated 15 bits.
Fig. 18 is een blokschema van een stelsel met een extern contextmodel 1801, een extern geheugen 1803 en een codeerchip 1802. Volgens fig. 18 worden sommige geheugenadreslijnen gestuurd door het externe contextmodel 1801 terwijl andere worden gestuurd door het "nulde orde" 20 contextmodel in de decodeerchip 1802. Dat wil zeggen dat de context van de direct voorafgaande decodeercyclus wordt gestuurd door het nulde orde contextmodel. Dit maakt bet mogelijk dat de decodeerchip de context-informatie uit het directe verleden verschaft met een minimale communicatievertraging. De contextmodelchip 1802 gaat aan de rest van 25 de context-informatie vooraf door gebruik te maken van bits die verder in het verleden zijn gedecodeerd waardoor de communicatievertraging mogelijk wordt. In veel gevallen is de context-informatie uit het directe verleden een nulde orde Markov-toestand, en is de context-informatie uit het verdere verleden een hogere orde Markov-toestand. 30 De uitvoeringsvorm die getoond is in fig. 18 elimineert de communicatievertraging die inherent is aan het implementeren van een nulde orde model in de externe contextmodelchip 1802. Er kan echter nog steeds een vertraging zijn van context-binbepaling naar bit als gevolg van de decodeerchip 1802 en het geheugen 1803.Fig. 18 is a block diagram of a system with an external context model 1801, an external memory 1803 and an encoding chip 1802. According to FIG. 18, some memory address lines are driven by the external context model 1801 while others are driven by the "zero order" 20 context model in the decoding chip. 1802. That is, the context of the immediately preceding decoding cycle is controlled by the zero order context model. This allows the decoding chip to provide immediate past context information with minimal communication delay. The context model chip 1802 precedes the rest of the context information by using bits decoded further in the past to allow the communication delay. In many cases, the contextual information from the immediate past is a zero-order Markov state, and the contextual information from the further past is a higher-order Markov state. The embodiment shown in Fig. 18 eliminates the communication delay inherent in implementing a zero-order model in the external context model chip 1802. However, there may still be a delay from context bin determination to bit due to the decoding chip 1802. and the memory 1803.
35 Er wordt opgemerkt dat een andere geheugenarchitectuur kan worden gebruikt. Er keu» bijvoorbeeld een stelsel worden gebruikt met het contextmodel en het geheugen in één chip en de codeereenheid in een andere chip. Ook kan het stelsel voorzien zijn van een codeerchip met 1001317 een intern geheugen dat - voor sommige contexts wordt gebruikt en een extern geheugen dat met andere contexts wordt gebruikt.It is noted that a different memory architecture can be used. For example, a system is used with the context model and the memory in one chip and the encoder in another chip. The system may also include an encoding chip with 1001317 an internal memory used for some contexts and an external memory used with other contexts.
8282
Bitgenerators gebruikmakend van een geheugen 5 Fig. 19 toont een decoder met een pijplijnbitgenerator gebruikma kend van een geheugen. Volgens fig. 19 omvat de decoder 1900 een con-textmodel 1901, geheugen 1902, PEM status-naar-codeblok 1903. pijplijnbitgenerator 1905. geheugen 1904 en verschuiver 1906. De gedecodeerde data uit de pijplijnbitstroomgenerator 1905 wordt toegevoerd 10 aan de ingang van contextmodel 1901. De ingangen van de verschuiver I9O6 zijn aangesloten voor ontvangst van de gecodeerde data. De uitgang van het contextmodel 1901 is verbonden met een ingang van het geheugen 1902. De uitgang van het geheugen 1902 is verbonden met de PEM status-naar-code 1903. De uitgang van de PEM status-naar-code 1903 15 en de uitgelijnde gecodeerde uitgangsdata van de verschuiver 1906 worden toegevoerd aan de ingangen van de bitgenerator 1905· Het geheugen 1904 is ook gekoppeld met de bitgenerator 1905 gebruikmakend van een bidirectionele bus. Aan de uitgang vein de bitgenerator 1905 bevindt zich de gedecodeerde data.Bit generators using a memory 5 19 shows a decoder with a pipeline bit generator using a memory. In Fig. 19, the decoder 1900 includes a context model 1901, memory 1902, PEM status-to-code block 1903. pipeline bit generator 1905. memory 1904 and shifter 1906. The decoded data from the pipeline bit generator 1905 is supplied to the input of context model 1901. The inputs of the shifter I9O6 are connected to receive the encoded data. The output of the context model 1901 is connected to an input of the memory 1902. The output of the memory 1902 is connected to the PEM status-to-code 1903. The output of the PEM status-to-code 1903 and the aligned coded output data from the shifter 1906 is applied to the inputs of the bit generator 1905 · The memory 1904 is also coupled to the bit generator 1905 using a bidirectional bus. The decoded data is at the output of the bit generator 1905.
20 Het contextmodel 1901 geeft aan de uitgang een context-bin af in responsie op de gecodeerde data op zijn ingangen. De context-bin wordt gebruikt als adres voor het aanspreken van het geheugen 1902 gebaseerd op de context-bin teneinde een waarschijnlijkheidsstatus te verkrijgen. De waarschijnlijkheidsstatus wordt ontvangen door de PEM status-25 naar-code-module 1903 die de waarschijnlijkheidsklasse genereert in responsie op de waarschijnlijkheidsstatus. Daarna wordt de waarschijn-lijkheidsklasse gebruikt als adres om het geheugen 1904 aan te spreken om de runtelling te verkrijgen. De runtelling wordt dan gebruikt door de bitgenerator 1905 voor het produceren van de gedecodeerde data.The context model 1901 outputs a context bin at the output in response to the encoded data at its inputs. The context bin is used as the address for addressing the memory 1902 based on the context bin to obtain a probability status. The probability status is received by the PEM status-25 to code module 1903 which generates the probability class in response to the probability status. Then, the probability class is used as the address to access memory 1904 to obtain the run count. The run count is then used by the bit generator 1905 to produce the decoded data.
30 In een uitvoeringsvorm omvat het geheugen 1902 een 1024 x 7 bitge- heugen (waarbij 1024 het aantal verschillende contexts is) terwijl geheugen 1904 een 25 x 14 bitgeheugen omvat (waarbij 25 het aantal verschillende runtellingen is).In one embodiment, memory 1902 includes a 1024 x 7 bit memory (where 1024 is the number of different contexts) while memory 1904 includes a 25 x 14 bit memory (where 25 is the number of different run counts).
Omdat 'de bitgeneratorstatussen (runtellingen, enz.) geassocieerd 35 zijn met waarschijnlijkheidsklassen, niet met context-bins, bestaat er een verdere pijplijnvertraging voordat een bit beschikbaar is bij het contextmodel. Omdat het updaten van een bitgeneratorstatus meerdere klokcyclussen vergt (de vertraging door het herhaald aanspreken van *1001311 83 het bitgeneratorstatusgeheugen) zullen meerdere bltgeneratorstatussen worden gebruikt voor elke waarschijnlijkheidsklasse. Als bijvoorbeeld de pijplijn zes klokcyclussen is, dan zal het bitgeneratorstatusgeheugen zes ingevoerde gegevens per waarschijnlijkheidsklasse hebben. Er 5 wordt een teller gebruikt om de juiste geheugenlokatie te selecteren. Zelfs met meerdere ingevoerde gegevens per waarschijnlijkheidsklasse zal de afmeting van het geheugen in het algemeen kleiner zijn dan het aantal contexts. Het geheugen kan worden geïmplementeerd met ofwel meervoudige SRAM-banken of een registerbestand met meerdere ingangs-10 poorten.Since the bit generator states (run counts, etc.) are associated with probability classes, not context bins, there is a further pipeline delay before a bit is available with the context model. Since updating a bit generator status requires multiple clock cycles (the delay due to repeated access to * 1001311 83 the bit generator status memory), multiple blt generator states will be used for each probability class. For example, if the pipeline is six clock cycles, the bit generator status memory will have six entries per probability class. A counter is used to select the correct memory location. Even with multiple data entries per probability class, the size of the memory will generally be smaller than the number of contexts. The memory can be implemented with either multiple SRAM banks or a multiple input 10 port register file.
Omdat één runtelling geassocieerd kan zijn met een aantal contexten moet een uitvoeringsvorm de waarschijnlijkheidsschattingstoestand van een of meer contexten upgraden. In een uitvoeringsvorm wordt de PEM-toestand van de context, die het einde van een run veroorzaakt. 15 ge-updated.Because one run count may be associated with a number of contexts, an embodiment must upgrade the probability estimate of one or more contexts. In one embodiment, the PEM state of the context causes the end of a run. Updated 15.
VV
In plaats van de operaties lezen, modificeren en schrijven van een runtelling voordat opnieuw kan worden gelezen, kan een runtelling worden gebruikt zodra de modificatie voltooid is.Instead of reading, modifying and writing a run count before it can be read again, a run count can be used once the modification is complete.
Fig. 32 illustreert een tijddiagram van de decodeeroperatie in een 20 uitvoeringsvorm van de uitvinding. In fig. 32 is een de;, odeeroperatie met drie cyclussen getoond. De signaalnamen zijn opgesomd in de linker kolom vein het tijddiagram. De geldigheid van het signaal wordt aangegeven met een band gedurende de cyclus (of een deel daarvein). In bepaalde gevallen is de eenheid of de logica die verantwoordelijk is 25 voor het genereren van het signaal of voor het leveren van het geldig-signaal getoond aangrenzend aan de geldig-signaalindicatie in een door stippellijnen omgeven blok. Op een aantal punten zijn bovendien voorbeelden van specifieke elementen en eenheden aangeduid. Opgeeerkt wordt dat ieder deel van het signaal dat zich uitstrekt tot in een 30 andere cyclus alleen de geldigheid van dat signaal aangeeft voor die tijdsperiode waarin het getoonde signaal zich uitstrekt in de andere cyclus. Ook zijn bepaalde signalen getoond als zijnde afzonderlijk geldig voor meer dan één cyclus.»Een voorbeeld daarvan is het tijdelijke runtellingsignaal dat geldig is op een punt aan het einde van de 35 tweede cyclus en dan opnieuw gedurende de derde cyclus. Opgemerkt wordt dat dit aangeeft dat het signaal slechts geregistreerd is aan het einde van de cyclus. Een lijst van afhankelijkheden is verder getoond in de onderstaande tabel Q welke tabel de afhankelijkheden *2 0 u ‘i ώ 1 7 84 toont tussen dezelfde of· voorafgaande klokcyclus en het huidige tijdstip waarop het signaal als geldig is gespecificeerd.Fig. 32 illustrates a time chart of the decoding operation in an embodiment of the invention. In Fig. 32, a three cycle deodorizing operation is shown. The signal names are listed in the left column of the time diagram. The validity of the signal is indicated by a band during the cycle (or part thereof). In some instances, the unit or logic responsible for generating the signal or delivering the valid signal is shown adjacent to the valid signal indication in a dotted line. In addition, examples of specific elements and units are indicated on a number of points. It is noted that each part of the signal extending into another cycle only indicates the validity of that signal for that period of time in which the signal shown extends into the other cycle. Also, certain signals are shown as being individually valid for more than one cycle. ”An example of this is the temporary runtime signal valid at a point at the end of the second cycle and then again during the third cycle. It is noted that this indicates that the signal is only recorded at the end of the cycle. A list of dependencies is further shown in Table Q below, which table shows the dependencies * 2 0 u "i" 1 7 84 between the same or previous clock cycle and the current time at which the signal is specified as valid.
Tabel QTable Q
5 Naam__Eenheid* Afhankelijkheden** registerbestand 1__CM__{voorafgaand bit, CM schuif register) status naar code__CM__registerbestand 1_ trommelverschuiving SH {accumulatorregister, niet-uitgelijnde ___gecodeerde datareglsters}_ maat SH uitgang trommelverschuiver (uitgelijn- ___de gecodeerde data) {K, R3}_ 10 accumulator SH maat {voorafgaande accumulatorregister- ___waarde}_ registerbestand 2 BG__{K, R3 geregistreerd}_ q (codewoord nodig) BG__registerbestand 2 code naar {masker, BG (X, R3 geregistreerd} maxRL, R3split)___ 15 generatorbit BG registerbestand 2 trommelverschuiver-uitgang (uitgelijnde gecodeerde data) code naar (masker, maxRL, R3split) _________________{registerbestand 1, geregistreerde MPS} decoderen BG trömmelverschuiver-uitgang (uitgelijn de gecodeerde data) ___code naar (masker, maxRL, R3split)_ PEM-tabel__PEM__(X, R3 geregistreerd}_ β (PEM update)** PEM {geregistreerd: PEH tabeluitgang, hui- ___dige LPS, verdergaan}_ -1 (runtelling BG {geregistreerd: benodigd codewoord ge- 20 update) registreerd, Tcuntelling, huidige LPS, ___doorgaan}_ γ (doorgaan, update BG {geregistreerd: benodigd codewoord, van huidige LPS___runtelling, huidige LPS, doorgaan}_5 Name__ Unit * Dependencies ** register file 1__CM __ {previous bit, CM shift register) status to code__CM__ register file 1_ drum shift SH {accumulator register, unaligned ___ coded data registers} _ measure SH output drum shifter (aligned ___ coded data) {K, R3} _ 10 accumulator SH size {previous accumulator register ___ value} _ register file 2 BG __ {K, R3 registered} _ q (codeword required) BG__ register file 2 code to {mask, BG (X, R3 registered} maxRL, R3split) ___ 15 generator bit BG register file 2 drum shifter -output (aligned coded data) code to (mask, maxRL, R3split) _________________ {register file 1, registered MPS} decode BG drum shifter output (align the coded data) ___code to (mask, maxRL, R3split) _ PEM table__PEM __ (X , R3 registered} _ β (PEM update) ** PEM {registered: PEH table output, current LPS, continue} _ -1 (run count BG {registered: codew required last updated) registered, Tcun count, current LPS, ___ continue} _ γ (continue, update BG {registered: required codeword, of current LPS___runtelling, current LPS, continue} _
* CM = contextmodel, SH = verschuiver, BG = bitgenerator, PEM* CM = context model, SH = shifter, BG = bit generator, PEM
25 = waarschijnlijkheidsschattingsmachine.25 = probability estimation machine.
** ’ {schuin schrift} duidt op de afhankelijkheden van de voor afgaande klokcyclus.** '{italic} indicates the dependencies of the previous clock cycle.
in een uitvoeringsvorm wordt de meeste combinatorieke logica voor het updaten van de PEM-status uitgevoerd in de "PEM 30 tabel" stap, "PEM update" is eenvoudig een multiplex-opera- tie.in one embodiment, most combinatorial logic for updating the PEM status is performed in the "PEM 30 table" step, "PEM update" is simply a multiplex operation.
mni3l7 85mni3l7 85
Impliciete signaleringImplicit signaling
In bepaalde uitvoeringsvormen moet de decoder de eindige registra-tiebuffer van de codeereenheid modelleren. In een uitvoeringsvorm wordt dit modelleren bereikt met impliciete signalering.In certain embodiments, the decoder must model the encoder finite registration buffer. In one embodiment, this modeling is accomplished with implicit signaling.
5 Zoals eerder werd verklaard met betrekking tot de codeereenheid wordt, wanneer een codewoord in de codeereenheid wordt gestart, ruimte is gereserveerd in de geschikte buffer voor het codewoord in de volgorde waarin de codewoorden op het kanaal moeten worden geplaatst. Wanneer de laatste ruimte in de buffer voor een nieuw codewoord is 10 gereserveerd dan worden sommige codewoorden in de gecomprimeerde bit-stroom geplaatst onafhankelijk van het feit of ze al dan niet volledig bepaald zijn.As previously stated with respect to the encoder, when a codeword is started in the encoder, space is reserved in the appropriate codeword buffer in the order in which the codewords are to be placed on the channel. When the last space in the buffer is reserved for a new codeword, some codewords are placed in the compressed bitstream regardless of whether or not they are fully determined.
Als een partieel codewoord moet worden voltooid dan kan een codewoord worden gekozen dat kort is en correct de tot dusver ontvangen 15 symbolen specificeert. Als het bijvoorbeeld in een R-codeerstelsel l nodig is om een codewoord voor een reeks van 100 MPS'en in een runcode met een maximale runlengte van 128 prematuur te voltooien dein kern het codewoord voor de 128 MPS'en worden gebruikt omdat dit correct de eerste 100 symbolen specificeert.If a partial codeword is to be completed then a codeword can be chosen that is short and correctly specifies the 15 symbols received so far. For example, if in an R coding scheme 1 it is necessary to complete a codeword for a series of 100 MPSs in a runcode with a maximum run length of 128 premature, the codeword for the 128 MPSs is used at core because this correctly specifies first 100 symbols.
20 Anderzijds kan een codewoord dat de 100 MPS'en specificeert ge volgd door een LPS worden gebruikt. Als het codewoord voltooid is kern het uit de herschikkingsbuffer worden verwijderd en aan de codestroom worden toegevoegd. Dit maakt het mogelijk om eerder voltooide codewoorden ook in de codestroom te plaatsen. Als de gedwongen voltooiing 25 van een partieel codewoord resulteert in het verwijderen van een codewoord uit de volle buffer dan kan de codering verdergaan. Als een buffer nog steeds vol is dein moet het volgende codewoord opnieuw worden voltooid en aan de codestroom worden toegevoegd. Dit proces gaat verder totdat de buffer die vol was niet langer vol is. De decoder kan 30 de codeereenheid modelleren voor impliciete signalering gebruikmakend van een teller voor elke geheugenlokatie met bitgenerator-statusinfor-matie.On the other hand, a codeword specifying the 100 MPSs followed by an LPS can be used. When the code word is complete, it is removed from the rearrangement buffer and added to the code stream. This makes it possible to place previously completed code words in the code stream. If the forced completion of a partial codeword results in the removal of a codeword from the full buffer, then the encoding can proceed. If a buffer is still full, the next code word must be completed again and added to the code stream. This process continues until the buffer that was full is no longer full. The decoder can model the encoder for implicit signaling using a counter for each memory location with bit generator status information.
In een uitvoeringsvorm heeft elke runteller (in dit voorbeeld waarschijnl’ijkheidsklasse) een teller met dezelfde afmeting als de 35 kop- of staarttellers in de codeereenheden (b.v. 6 bits). Telkens als een nieuwe run wordt gestart (een nieuw codewoord wordt opgehaald) wordt de corresponderende teller geladen met de maat van het code-woordgeheugen. Telkens als een run is gestart (een nieuw codewoord is 1001317 86 opgehaald) worden alle tellers gedecrementeerd. Elke teller die de nulstand bereikt zorgt ervoor dat de corresponderende runteller wordt gewist (en de LPS-aanwezig vlag wordt teruggesteld).In one embodiment, each run counter (probability class in this example) has a counter the same size as the 35 head or tail counters in the encoders (e.g., 6 bits). Each time a new run is started (a new codeword is fetched), the corresponding counter is loaded with the code word memory size. All counters are decremented each time a run is started (a new codeword is retrieved 1001 317 86). Any counter that reaches zero will clear the corresponding run counter (and reset the LPS flag present).
5 Opties bi-1 signalering voor eindig geheugen5 Options bi-1 signaling for finite memory
De codering in werkelijke tijd volgens de uitvinding vereist dat de decoder runs van MPS'en behandelt die niet worden gevolgd door een LPS en niet de maximale runlengte hebben. Dit gebeurt wanneer de co-deereenheid begint met een run van MPS'en maar niet voldoende beperkt 10 herschikkingsgeheugen heeft om te wachten totdat de run voltooid is. Deze toestand vereist dat een nieuw codewoord wordt gedecodeerd de volgende keer dat deze context-bin wordt gebruikt en deze toestand moet aan de decoder worden gesignaleerd. In het onderstaande worden drie potentiële manieren voor het modificeren van de decoder beschre-15 ven.The real time encoding of the invention requires the decoder to handle runs of MPSs that are not followed by an LPS and do not have the maximum run length. This happens when the coding unit starts a run of MPSs but does not have sufficiently limited rearrangement memory to wait until the run is complete. This state requires a new codeword to be decoded the next time this context bin is used and this state must be signaled to the decoder. Three potential ways of modifying the decoder are described below.
Als de buffer vol is moet de runtelling voor de context-bin of waarschijnlijkheidsklasse die gedwongen wordt afgegeven, worden teruggesteld. Om dit efficiënt uit te voeren is het handig om de context-bin of waarschijnlijkheidsklasse op te bergen in het codewoordgeheu-20 gen. Omdat dit alleen nodig is voor runs die nog geen bijbehorend codewoord hebben, kan het geheugen dat gebruikt wordt voor het opslaan van het codewoord gedeeld worden. In plaats van het gedwongen afgeven van een incompleet codewoord kunnen in sommige stelsels bits gedwongen worden ingevoerd in de context/waarschijnlijkheidsklasse van het (of 25 enig) codewoord dat in de buffer aanwezig is wanneer de buffer vol is. De decoder detecteert dit en gebruikt de corresponderende (verkeerde) context-bin of waarschijnlijkheidsklasse.If the buffer is full, the run count for the context bin or probability class that is forced to be issued must be reset. To perform this efficiently, it is useful to store the context bin or probability class in the codeword memory. Since this is only necessary for runs that do not yet have an associated codeword, the memory used to store the codeword can be shared. Instead of forcibly delivering an incomplete code word, in some systems bits can be forcibly entered in the context / probability class of the (or any) code word present in the buffer when the buffer is full. The decoder detects this and uses the corresponding (wrong) context bin or probability class.
Signalering in de stroom maakt gebruik van codewoorden om de decoder te signaleren. In een uitvoeringsvorm worden de R2(k) en R3(k) 30 codedefinities zodanig gewijzigd dat ze de niet-maximale lengteruns van MPS, die niet worden gevolgd door een LPS, bevatten. Dit kan worden geïmplementeerd door aan het codewoord één bit toe te voegen dat op moet treden bij de laagste waarschijnlijkheid. Dit maakt een uniek decodeerbaar voorzetsel mogelijk voor niet-maximale lengte runtellin-35 gen. Tabel R toont een vervanging voor de R2(2) codes die een signalering in de stroom mogelijk maken. De nadelen van deze methode zijn dat de decodeerlogica voor de R-code moet worden gewijzigd en dat dit ten nadele gaat van de compressie telkens wanneer een codewoord met de 1001317 87 laagste waarschijnlijkheid optreedt.Signaling in the stream uses codewords to signal the decoder. In one embodiment, the R2 (k) and R3 (k) 30 code definitions are modified to include the non-maximum length runs of MPS, which are not followed by an LPS. This can be implemented by adding one bit to the codeword to occur at the lowest probability. This allows a unique decodable preposition for non-maximal length run-counts. Table R shows a replacement for the R2 (2) codes that allow signaling in the flow. The drawbacks of this method are that the decoding logic for the R code has to be changed, and this decreases the compression every time a code word with the lowest probability 1001317 87 occurs.
Tabel RTable R
Oorspronkelijke data Codewoord 5 0000 0 0001 1000 001 101 01 110 1 111 10 000 100100 00 100101 0 10011Original data Code word 5 0000 0 0001 1000 001 101 01 110 1 111 10 000 100 100 00 100 101 0 10011
In sommige uitvoeringsvormen voert de decoder een impliciete sig-15 nalering uit gebruikmakend van tijdmarkeringen. Een teller houdt het huidige "tijdstip" bij door incrementatie telkens wanneer een codewoord gevraagd wordt. Ook wanneer een codewoord wordt gestart, wordt het huidige "tijdstip" opgeslagen ih een geheugen geassocieerd met het codewoord. Telkens wanneer na de eerste keer een codewoord gebruikt 20 wordt, wordt de corresponderende opgeslagen "tijd"-waarde plus de maat van de herschikkingsbuffer van de codeereenheid vergeleken met het huidige "tijdstip". Als het huidige "tijdstip" groter is, wordt een impliciet signaal gegenereerd zodat een nieuw codewoord opgevraagd wordt. Op deze wijze wordt het beperkte herschikkingsgeheugen in de 25 codeereenheid gesimuleerd. In een uitvoeringsvorm worden genoeg bits voor "tijd"-waarden gebruikt om alle codewoorden te kunnen nummeren.In some embodiments, the decoder performs an implicit signaling using time markers. A counter keeps the current "time" by incrementation each time a codeword is requested. Also, when a codeword is started, the current "time" is stored in a memory associated with the codeword. Whenever a codeword is used after the first time, the corresponding stored "time" value plus the encoder rearrange buffer measure is compared to the current "time". If the current "time" is greater, an implicit signal is generated so that a new code word is requested. In this way, the limited rearrangement memory in the encoder is simulated. In one embodiment, enough bits for "time" values are used to number all code words.
Voor het reduceren van het vereiste geheugen wordt het aantal bits dat wordt gebruikt voor de tijdmarkeringen op een minimum gehouden. Als de tijdmarkeringen een klein aantal bits gebruiken, zodat de tijd-30 waarden opnieuw kunnen worden gebruikt, moet ervoor gezorgd worden dat alle oude tijdmarkeringen worden opgemerkt voordat de teller start met het opnieuw gebruiken van tijdstippen. Stel dat N de grootste is van het aantal adresbits voor de wachtrij of het bitgeneratorstatusgeheu-gen. Tijdmarkeringen met N+l bits kunnen worden gebruikt. Het bitgene- 1001317 88 ratorstatusgeheugen moet·meervoudige toegangen ondersteunen, bijvoorbeeld twee lees- en twee schrijfoperaties per gedecodeerd bit. Een teller wordt gebruikt om cyclisch door het bitgeneratortoestandsgeheu-gen te lopen, welke teller voor elk gedecodeerd bit eenmaal wordt 5 geïncrementeerd. Iedere geheugenlokatie die te oud is wordt gewist en dus wordt een nieuw codewoord opgehaald wanneer het in de toekomst nodig is. Dit garandeert dat alle tijdmarkeringen worden gecontroleerd voordat een tijdwaarde opnieuw wordt gebruikt.To reduce the required memory, the number of bits used for the time marks is kept to a minimum. If the time markers use a small number of bits so that the time-30 values can be reused, ensure that all old time markers are noted before the counter starts reusing times. Suppose N is the largest of the number of address bits for the queue or bit generator status memories. Time markers with N + 1 bits can be used. The bitgener 1001317 88 rator status memory must support multiple accesses, for example, two read and two write operations per decoded bit. A counter is used to cycle cyclically through the bit generator state memories, which counter is incremented once for each decoded bit. Any memory location that is too old is cleared, so a new codeword is retrieved when needed in the future. This guarantees that all time markers are checked before a time value is reused.
Als het bitgeneratorstatusgeheugen kleiner is dan de wachtrij kan 10 de telsnelheid (dé tijdmarkeringteller) en de benodigde geheugenband-breedte worden gereduceerd. Dat komt omdat elke tijdmarkering (één per bitgeneratorstatusgeheugen) slechts eenmaal moet worden gecontroleerd per aantal cyclussen nodig voor gebruik van de gehele wachtrij. Ook het opbergen van tijdmarkeringen in verschillende geheugens kan de 15 benodigde geheugenbandbreedte reduceren. In een stelsel dat gebruik maakt van "0" codewoorden voor partiële runs behoeven de tijdmarkerin- gen niet te worden gecontroleerd voor "IN" codewoorden. In een stelsel dat gebruik maakt van "IN" codewoorden voor partiële runs moet de tijdmarkering alleen worden gecontroleerd voorafgaand aan het genere-20 ren vein een LPS.If the bit generator status memory is smaller than the queue, the counting speed (the time marker counter) and the required memory bandwidth can be reduced. That's because each time marker (one per bit generator status memory) only needs to be checked once per number of cycles required to use the entire queue. Storing time markers in different memories can also reduce the required memory bandwidth. In a system using "0" code words for partial runs, the time markers need not be checked for "IN" code words. In a scheme using "IN" codewords for partial runs, the time marker should only be checked prior to generation of an LPS.
In sommige uitvoeringsvormen wordt de impliciete signalering geïmplementeerd met een wachtrij tijdens de decodering. Deze werkwijze kan bruikbaar zijn in een half duplexstelsel waarin de codeer-hardware gedurende de decodering beschikbaar is. De werking vein de wachtrij is 25 nagenoeg hetzelfde als tijdens de codering. Als een nieuw codewoord gevraagd wordt dan wordt de index ervem in de wachtrij geplaatst en als ongeldig gemarkeerd. Als de data vein een codewoord voltooid is, wordt zijn invoergegeven in de wachtrij als geldig gemarkeerd. Terwijl data uit de wachtrij wordt gehaald om plaats te maken voor nieuwe 30 codewoorden wordt, indien de uitgenomen data als ongeldig is gemarkeerd, de bitgeneratorstatusinformatie voor deze index gewist. Deze wis-operatie kan vereisen dat het bitgeneratorstatusgeheugen in staat is om een extra schrijfoperatie te ondersteunen.In some embodiments, the implicit signaling is implemented with a queue during the decoding. This method can be useful in a half duplex system in which the encoding hardware is available during decoding. Queue operation is substantially the same as during encoding. When a new codeword is requested, the index is queued and marked as invalid. When the data vein a codeword is completed, its input in the queue is marked as valid. While data is being queued to make way for new 30 code words, if the extracted data is marked invalid, the bit generator status information for this index is cleared. This erase operation may require the bit generator status memory to be able to support an additional write operation.
In contrast daarmee communiceert expliciete signalering een buf-35 feroverloop als gecomprimeerde data. Een voorbeeld is het hebben vein een hulp-context-bin dat eenmaal voor iedere normale context-bin-deco-dering wordt gebruikt of tweemaal voor elk codewoord dat gedecodeerd wordt. Bits die gedecodeerd worden uit het hulp-context-bin geven aan 1001317 δ9 of de nieuwe-codewoord-nodig toestand optreedt en een nieuw codewoord gedecodeerd moet worden voor de corresponderende normale context-bin. In dit geval moeten de codewoorden voor deze speciale context correct worden herschikt. Omdat het gebruik van deze context een functie is 5 van iets dat bekend is aan de herschikkingseenheid (kenmerkend wordt het eenmaal voor elk codewoord gebruikt) kan het geheugen dat nodig is voor het herschikken van de hulp-context worden begrensd of impliciet gemodelleerd. Ook de mogelijke codes die voor deze hulp-context toegestaan zijn, kunnen worden beperkt.In contrast, explicit signaling communicates a buf-35 ferrite overflow as compressed data. An example is having a helper context bin used once for each normal context bin decoding or twice for each codeword to be decoded. Bits decoded from the auxiliary context bin indicate 1001317 δ9 whether the new codeword-needed state occurs and a new codeword to be decoded for the corresponding normal context bin. In this case, the code words for this special context must be correctly rearranged. Since the use of this context is a function of something known to the rearrangement unit (typically it is used once for each codeword), the memory required to rearrange the auxiliary context can be limited or implicitly modeled. The possible codes allowed for this help context can also be limited.
10 Impliciete signalering modelleert de begrensde buffer van de co- deereenheid wanneer de decodering voor het genereren van een signaal indiceert dat een nieuw codewoord moet worden gedecodeerd. In een uitvoeringsvorm wordt de tijdmarkering voor elke context gehandhaafd. In een uitvoeringsvorm wordt de herschikkingsbuffer met beperkte afme-15 tingen van de codeereenheid direct gemodelleerd. Omdat in een half duplexstelsel de herschikkingsschakelingen in de codeereenheid tijdens de decodering beschikbaar zijn kunnen deze worden gebruikt voor het genereren van signalen voor de decodeereenheid.10 Implicit signaling models the coded unit's bounded buffer when the decoding for generating a signal indicates that a new codeword is to be decoded. In one embodiment, the time marker is maintained for each context. In one embodiment, the encoder rearrange buffer with limited dimensions of the encoder is modeled directly. Since in a half duplex system the rearrangement circuits in the encoder are available during decoding, they can be used to generate signals for the decoder.
Hoe impliciete signalering exact wordt verkregen hangt af van de 20 details omtrent de wijze waarop de codeereenheid een volle buffertoe-stand herkent en behandelt. Voor een stelsel dat gebruik maakt van een gemengde wachtrij met vaste toewijzing geeft het gebruik van meerdere v kopwijzers keuzes voor wat "buffer vol" betekent. Uitgaande van een bepaald ontwerp voor de codeereenheid kan een geschikt model worden 25 ontworpen.Exactly how implicit signaling is obtained depends on the details of how the encoder recognizes and treats a full buffer state. For a system using a fixed-allocation mixed queue, using multiple v headers gives choices for what "buffer full" means. Based on a particular design for the encoder, a suitable model can be designed.
Het volgende heeft betrekking op de codeeroperatie en een model voor gebruik door de decoder bij een gemengde wachtrij met vaste stroomtoewijzing, parallel per waarschijnlijkheidsstelsel. Aangenomen wordt bijvoorbeeld dat de herschikkingsbuffer 256 lokaties heeft, dat 30 4 ineengeschoven stromen worden gebruikt en elk ineengeschoven woord 16 bits bevat. Als de buffer 256 ingevoerde gegevens bevat, moet een ingevoerd gegeven worden afgegeven aan een bitpakker (bijvoorbeeld een bitpak-eenheid) voordat het invoergegeven voor het 257ste codewoord in de wachtrij' kan worden geplaatst. Indien nodig kunnen ingevoerde gege-35 vens gedwongen eerder worden afgegeven.The following relates to the encoding operation and a model for use by the decoder in a mixed queue with fixed current allocation, in parallel per probability system. For example, it is assumed that the rearrangement buffer has 256 locations, that 4 interleaved streams are used, and each interleaved word contains 16 bits. If the buffer 256 contains input data, an input data must be output to a bit packer (e.g. a bit pack unit) before the input data for the 257th code word can be queued. If necessary, data entered can be compulsorily released earlier.
In sommige stelsels vereist het verwijderen van het eerste ingevoerde gegeven in de buffer het verwijderen van voldoende bits om een volledig ineengeschoven woord te completeren. Als derhalve 1-bit code- 1 (j 0 i Ö i 7 90 woorden mogelijk zijn dan kan het verwijderen van codewoord 0 ook het verwijderen van de codewoorden 4, 8, 12.....52, 56, 60 vereisen voor 16-bit ineengeschoven woorden. Om te verzekeren dat al deze buffer-ingangen voorzien zijn van geldige ingevoerde gegevens kan invoer, die 5 nodig is omdat het geheugen vol is, uitgevoerd worden op adres 64, 192 plaatsen vanaf de lokatie waar een nieuw codewoord wordt ingevoerd (256 - 16 x 4 = 192).In some systems, removing the first data entry in the buffer requires removing enough bits to complete a fully collapsed word. Therefore, if 1-bit code 1 (j 0 i Ö i 7 90 words are possible), the removal of the codeword 0 may also require the removal of the codewords 4, 8, 12 ..... 52, 56, 60 for 16 bit interleaved To ensure that all these buffer inputs have valid input data, input required 5 because the memory is full can be performed at address 64, 192 places from the location where a new code word is entered (256 - 16 x 4 = 192).
In de decoder is een teller aanwezig voor elke waarschijnlijkheid. Indien een nieuw codewoord gebruikt wordt om een run te starten wordt 10 de teller geladen met 192. Telkens wanneer een nieuw codewoord gebruikt wordt per willekeurige waarschijnlijkheid worden alle tellers gedecrementeerd. Als een teller de nulstand bereikt dan wordt de run-lengte voor die waarschijnlijkheid op nul gesteld (en de LPS-aanwezig-vlag wordt teruggesteld).There is a counter in the decoder for every probability. If a new codeword is used to start a run, the counter is loaded with 192. Each time a new codeword is used at any probability, all counters are decremented. When a counter reaches zero, the run length is reset to zero for that probability (and the LPS present flag is reset).
15 Het kan handig zijn om meerdere RAM-banken (geheugen met meerdere poorten, simulatie met snel geheugen, enz.) te gebruiken, één bank per gecodeerde datastroom. Dit maakt het mogelijk dat alle bitpak-eenheden simultaan data ontvangen zodat het lezen van meerdere codewoorden voor een bepaalde stroom het lezen door andere stromen niet in de weg 20 staat.15 It may be useful to use multiple RAM banks (multi-port memory, fast memory simulation, etc.), one bank per encrypted data stream. This allows all bit pack units to receive data simultaneously so that reading multiple code words for a given stream does not interfere with reading by other streams.
In andere stelsels moeten meerdere bitpak-eenheden arbitreren omtrent één enkel geheugen gebaseerd op de codewoordvolgorde zoals opgeslagen in de buffer. In deze stelsels behoeft het verwijderen van een buffer niet de voltooiing van een ineengeschoven woord te beteke-25 nen. Elke bitpak-eenheid ontvangt kenmerkend achtereenvolgens een fractie van een ineengeschoven woord. Elke bitpak-eenheid ontvangt ten minste een aantal bits dat gelijk is aan de kortste codewoordlengte (b.v. 1 bit) en maximaal een aantal bits dat gelijk is aan de langste codewoordlengte (b.v. 13 bits). Ineengeschoven woorden kunnen niet 30 worden afgegeven totdat ze voltooid zijn en moeten worden afgegeven in de volgorde van initialisatie. In dit voorbeeld kan het nodig zijn dat een bitpak-eenheid 13 ineengeschoven woorden buffert, dit is het maximum aantal ineengeschoven woorden dat voltooid kan worden met codewoorden van' maximale lengte terwijl een andere stroom bezig is met een 35 ineengeschoven woord dat codewoorden van minimale lengte ontvangt.In other systems, multiple bit pack units must arbitrate about a single memory based on the codeword order stored in the buffer. In these systems, the removal of a buffer does not have to mean the completion of a collapsed word. Each bit pack unit typically receives a fraction of a collapsed word successively. Each bit pack unit receives at least a number of bits equal to the shortest codeword length (e.g. 1 bit) and a maximum number of bits equal to the longest codeword length (e.g. 13 bits). Interleaved words cannot be issued until they are completed and must be issued in the order of initialization. In this example, a bit pack unit may need to buffer 13 interleaved words, this is the maximum number of interleaved words that can be completed with maximum length code words while another stream is busy with an interleaved word containing minimum length code words receive.
Een stelsel waarbij elk codewoord twee schrijfoperaties en één leesoperatie in het geheugen vereist kan minder wenselijk zijn voor een hardware-implementatie dan een stelsel dat twee schrijfoperatiesA system where each code word requires two write operations and one memory read operation may be less desirable for a hardware implementation than a system that requires two write operations
1001317 I1001317 I
91 en twee leesoperaties uitvoert. Als dit gewenst was in het voorbeeld-stelsel met vier stromen dan zouden de bitpak-eenheden 1 en 2 een geheugenleescyclus kunnen delen en de bitpak-eenheden 1 en 3 de andere leescyclus kunnen delen (of enige andere arbitraire combinatie). Omdat 5 dit de afmetingen van de benodigde buffer niet zouden reduceren wordt daarmee een hoge overdrachtssnelheid in de bitpak-eenheid mogelijk. Dit maakt het voor de bitpak-eenheden mogelijk de capaciteit van het gecodeerde datakanaal beter te benutten.91 and perform two reading operations. If desired in the four stream example system, bit pack units 1 and 2 could share a memory read cycle and bit pack units 1 and 3 could share the other read cycle (or any other arbitrary combination). Since this would not reduce the dimensions of the required buffer, a high transfer rate in the bitpack unit is thereby possible. This makes it possible for the bitpack units to make better use of the capacity of the encrypted data channel.
10 Stelsels met geheugen met vaste afmetingen10 Fixed size memory systems
Een voordeel van een stelsel dat meerdere bitgeneratorstatussen per waarschijnlijkheidsklasse heeft, is dat het stelsel een codering met verlies kan ondersteunen wanneer het geheugen met vaste afmetingen een overloop vertoont. Dit kan bruikbaar zijn voor beeldcompressie 15 voor een framebuffer en andere toepassingen die slechts een beperkte hoeveelheid gecodeerde data kunnen opslaan.An advantage of a system that has multiple bit generator states per probability class is that the system can support lossy encoding when the fixed size memory has an overflow. This can be useful for frame compression image compression 15 and other applications that can only store a limited amount of encoded data.
Voor stelsels met een geheugen met vaste afmetingen worden de meerdere bitgeneratorstatussen voor elke waarschijnlijkheid toegewezen aan een deel van de data. Elk van de acht statussen kan bijvoorbeeld 20 worden toegewezen aan een bepaald bitvlak voor acht bit data. In dit geval wordt ook een verschuiver toegewezen aan elk deel van de data in tegenstelling tot verschuivers die-sequentieel het volgende codewoord verschaffen. Opgemerkt wordt dat de data niet per bitvlak behoeft te worden verdeeld. Ook wordt in de codeereenheid geen ineenschuiving 25 uitgevoerd, elk deel van de data wordt eenvoudig aan een bitpak-opera-tie onderworpen. Geheugen wordt toegewezen aan elk deel van de data.For fixed size memory systems, the multiple bit generator states are assigned to a portion of the data for each probability. For example, each of the eight states can be assigned 20 to a particular bit plane for eight bit data. In this case, a shifter is also assigned to each part of the data as opposed to shifters that sequentially provide the next codeword. It is noted that the data need not be divided per bit plane. Also, no encoding 25 is performed in the encoder, each part of the data is simply subjected to a bit pack operation. Memory is allocated to each part of the data.
Geheugenmanagement voor gecodeerde data wordt gepresenteerd voor stelsels die alle data opslaan in een geheugen met vaste afmetingen en voor stelsels die data overdragen in een kanaal met een maximaal toe-30 laatbare bandbreedte. In deze beide stelsels is een elegante degradatie naar een stelsel met verlies gewenst. Verschillende datastromen worden gebruikt voor data met verschillende importantie, zodat minder importante datastromen kunnen worden opgeslagen of niet worden uitgezonden indièn er niet voldoende opslag of bandbreedte beschikbaar is.Encrypted data memory management is presented for systems that store all data in fixed size memory and for systems that transfer data in a channel with a maximum allowable bandwidth. In both systems, an elegant relegation to a system with loss is desirable. Different data streams are used for data with different importance, so that less importing data streams can be stored or not broadcast if there is not enough storage or bandwidth available.
35 Indien geheugen wordt gebruikt moet de gecodeerde data zodanig worden opgeslagen dat ze zodanig toegankelijk is dat de minder importante datastromen buiten beschouwing kunnen blijven zonder de mogelijkheid te verliezen om de wel belangrijke datastromen te decoderen.If memory is used, the encoded data must be stored in such a way that it is accessible in such a way that the less importing data streams can be disregarded without losing the possibility of decoding the important data streams.
100Ί3Π * 92100Ί3Π * 92
Omdat de gecodeerde data-een variabele lengte heeft kan een dynamische geheugentoewijzing worden toegepast. Fig. 31 toont een voorbeeld van een dynamische geheugentoewijzingseenheid voor drie gecodeerde data-stromen. Een registerbestand 3100 (of een ander opslagmedium) bevat 5 een aanwijzer voor elke datastroom plus een andere aanwijzer voor het indiceren van de eerstvolgende vrije geheugenlokatie. Geheugen 3101 is verdeeld in pagina's met vaste afmetingen.Because the encoded data has a variable length, a dynamic memory allocation can be applied. Fig. 31 shows an example of a dynamic memory allocation unit for three encrypted data streams. A register file 3100 (or other storage medium) contains a pointer for each data stream plus another pointer for indicating the next free memory location. Memory 3101 is divided into fixed size pages.
Aanvankelijk wijst elke aan een stroom toegewezen wijzer op de start van een geheugenpagina en de vrije wijzer wijst op de eerstvol-10 gende beschikbare geheugenpagina. Gecodeerde data uit een bepaalde stroom wordt opgeslagen in de geheugenlokatie die door de corresponderende wijzer wordt geadresseerd. De wijzer wordt dan geïncrementeerd naar de eerstvolgende geheugenlokatie.Initially, each pointer assigned to a stream indicates the start of a memory page, and the free pointer indicates the next available memory page. Encrypted data from a particular stream is stored in the memory location addressed by the corresponding pointer. The pointer is then incremented to the next memory location.
Als de wijzer het maximum voor de hudige pagina bereikt dan ge-15 beurt het volgende. Het adres van het begin van de eerste vrije pagina (opgeslagen in de vrije wijzer) wordt opgeslagen bij de huidige pagina (ofwel als deel van het gecodeerde datageheugen of er wordt een afzonderlijk geheugen of registerbestand gebruikt). De huidige wijzer wordt ingesteld op de volgende vrije pagina. De vrije wijzer wordt geïncre-20 menteerd. Deze acties wijzen een nieuwe geheugenpagina toe aan een bepaalde stroom en verschaffen koppelingen zodanig dat de toewijzings-volgorde tijdens het decoderen kan worden vastgesteld.When the pointer reaches the maximum for the current page, the following occurs. The address of the beginning of the first free page (stored in the free pointer) is stored with the current page (either as part of the encrypted data memory or a separate memory or register file is used). The current pointer is set on the next free page. The free hand is incremented. These actions assign a new memory page to a particular stream and provide links so that the allocation order can be determined during decoding.
Als alle pagina's in het geheugen in gebruik zijn en er meer data uit de stroom komt die belangrijker is dan de minst belangrijke data 25 in het geheugen dan kan er één van drie dingen gebeuren. In alle drie de gevallen wordt het geheugen dat toegewezen is aan de minst belangrijke datastroom opnieuw toegewezen aan de meer belangrijke datastroom en er wordt geen data van de minder belangrijke datastroom meer opgeslagen.If all pages in memory are in use and more data is coming out of the stream that is more important than the least important data in memory, one of three things can happen. In all three cases, the memory allocated to the least important data stream is reassigned to the more important data stream and no data from the less important data stream is stored.
30 Als eerste wordt de pagina die nu wordt gebruikt door de minst belangrijke datastroom eenvoudig toegewezen aan de meer belangrijke data. Omdat de meeste kenmerkende entropie-codeereenheden gebruik maken van interne status-informatie gaat al de minst belangrijke data die eerder bp die pagina opgeslagen was, verloren.30 First, the page currently used by the least important data stream is simply assigned to the more important data. Since most typical entropy encoders use internal status information, all the least important data previously stored on that page is lost.
35 Als tweede wordt de pagina, die nu in gebruik is door de minst belangrijke stroom, eenvoudig toegewezen aan de meer belangrijke datastroom. In tegenstelling met het voorafgaande geval wordt de wijzer ingesteld op het einde van de pagina en terwijl de meer belangrijke 100131" 93 data worden geschreven in de pagina wordt de corresponderende wijzer gedecrementeerd. Dit heeft het voordeel dat de minst belangrijke data aan het begin van de pagina wordt behouden indien de meer belangrijke datastroom niet de gehele pagina nodig heeft.Second, the page now in use by the least important stream is simply assigned to the more important data stream. In contrast to the previous case, the pointer is set at the end of the page, and while the more important 100131 "93 data is written into the page, the corresponding pointer is decremented. This has the advantage that the least important data is at the beginning of the page. page is kept if the more important data stream does not need the entire page.
5 Als derde kan in plaats van de huidige pagina met de minst belang rijke data een willekeurige andere pagina met minder belangrijke data opnieuw worden toegewezen. Dit vereist dat de gecodeerde data voor alle pagina's onafhankelijk wordt gecodeerd, hetgeen de bereikbare compressie kan reduceren. Het is ook nodig dat de niet-gecodeerde data 10 corresponderend mét het begin van alle pagina's wordt geïdentificeerd. Omdat iedere pagina met minder belangrijke data buiten beschouwing kan worden gelaten, is wel een grotere flexibiliteit in de elegante degradatie van de codering met verlies mogelijk.5 Third, instead of the current page with the least important data, any other page with less important data can be reassigned. This requires that the encoded data for all pages be encoded independently, which can reduce the achievable compression. It is also necessary that the unencoded data 10 be identified corresponding to the beginning of all pages. Because any page with less important data can be disregarded, greater flexibility in elegant encoding degradation at a loss is possible.
Het derde alternatief kan speciaal attractief zijn in een stelsel 15 dat een vaste compressiesnelheid bereikt over gebieden van de afbeel- l ding. Een gespecificeerd aantal pagina's kan worden toegewezen aan een gebied van de afbeelding. Of er minder belangrijke data wordt vastgehouden of niet kan afhangen van de in een bepaald gebied bereikte compressie (het geheugen toegewezen aan een gebied mag niet volledig 20 worden gebruikt ir iien de verliesvrije compressie minder dan de hoeveelheid toegewezen geheugen nodig had). Het bereiken van een vaste mate van compressie op een gebied van de afbeelding kan een willekeurige toegang tot de afbeeldingsgebieden ondersteunen.The third alternative may be especially attractive in a system 15 that achieves a fixed compression rate over areas of the image. A specified number of pages can be assigned to an area of the image. Whether or not less important data is retained depends on the compression achieved in a particular area (the memory allocated to an area should not be fully utilized if the lossless compression required less than the amount of allocated memory). Achieving a fixed amount of compression on an area of the image can support arbitrary access to the image areas.
De mogelijkheid om data in te schrijven in elke pagina vanaf beide 25 uiteinden kan worden gebruikt om de totale hoeveelheid beschikbaar geheugen in het stelsel beter te benutten. Als alle pagina's zijn toegewezen dan kan iedere pagina die voldoende vrije ruimte aan het einde heeft worden toegewezen voor gebruik vanaf dat einde. De mogelijkheid om de beide einden van een pagina te gebruiken moet worden 30 afgewogen tegen de kosten van het bijhouden van de lokatie waar de twee typen data elkaar ontmoeten (dit is verschillend van het geval waar één van de datatypen niet belangrijk was en eenvoudigweg kon worden overschreven).The ability to write data into each page from both ends can be used to better utilize the total amount of available memory in the system. If all pages are assigned then any page that has enough free space at the end can be allocated for use from that end. The ability to use both ends of a page must be weighed against the cost of tracking the location where the two types of data meet (this is different from the case where one of the data types was not important and could simply be overwritten).
Beschouwd wordt nu een systeem waarin data wordt overgedragen in 35 een kanaal in plaats van opgeslagen te worden in een geheugen. Er worden geheugenpagina's met vaste afmetingen gebruikt maar er is slechts één pagina per stroom nodig. (Wellicht twee indien ping-pong-operaties nodig zijn om een buffer voor het kanaal te verschaffen 1001317 94 zodat tijdens het schrijven van de ene pagina de andere kan worden uitgelezen). Als een geheugenpagina vol is wordt ze overgedragen in het kanaal en kan de geheugenlokatie opnieuw worden gebruikt zodra de pagina overgedragen is. In sommige toepassingen kan de paginagrootte 5 van het geheugen gelijk zijn aan de grootte van de datapakketten die in het kanaal worden gebruikt of een veelvoud van de pakket-afmetin-gen.We now consider a system in which data is transferred in a channel instead of being stored in a memory. Fixed size memory pages are used but only one page is required per stream. (Perhaps two if ping-pong operations are required to provide a buffer for the channel 1001317 94 so that one page can read the other while writing). When a memory page is full, it is transferred in the channel and the memory location can be reused once the page has been transferred. In some applications, the page size of the memory may be equal to the size of the data packets used in the channel or a multiple of the packet dimensions.
In sommige communicatiesystemen, bijvoorbeeld ATM (asynchrone transfer modus) kunnen aan de pakketten prioriteiten worden toegewe-10 zen. ATM heeft twee prioriteitniveaus, een primair en een secundair niveau. Secundaire pakketten worden alleen overgedragen indien er voldoende bandbreedte beschikbaar is. Een drempel kan worden gebruikt om vast te stellen welke stromen primair zijn en welke secundair. Een andere werkwijze zou zijn het gebruik van een drempel in de codeereen-15 heid zodat geen stromen worden uitgezonden die minder belangrijk zijn dan een drempel.In some communication systems, for example ATM (asynchronous transfer mode), the packets can be assigned priorities. ATM has two priority levels, a primary and a secondary level. Secondary packets are only transferred if sufficient bandwidth is available. A threshold can be used to determine which flows are primary and which are secondary. Another method would be to use a threshold in the encoder so that no streams less important than a threshold are emitted.
Afzonderlijke bitgeneratoren voor elke codeSeparate bit generators for each code
Fig. 20 is een blokschema van een stelsel met afzonderlijke bit-20 generatoren voor elke code. Het decodeerstelsel 2000 volgens fig. 20 omvat het contextmodel 2001, geheugen 2002, PEM status-naar-code-blok 2003. decoder 2004, bitgeneratoren.2005A...N, en verschuiver 2006. De uitgang van contextmodel 2001 is verbonden met een ingang van geheugen 2002. De uitgang van geheugen 2002 is verbonden met een ingang van PEM 25 status-naar-code-blok 2003· De uitgang van PEM status-naar-code-blok 2003 is gekoppeld met een ingang van de decoder 2004. De uitgang van decoder 2004 is gekoppeld met de vrijgeef-ingang van de bitgeneratoren 2005A...N. De bitgeneratoren 2005A...N zijn aangesloten voor ontvangst van gecodeerde data-uitgangssignalen van de verschuiver 2006.Fig. 20 is a block diagram of a system with separate bit-20 generators for each code. The decoding system 2000 of FIG. 20 includes the context model 2001, memory 2002, PEM status-to-code block 2003. decoder 2004, bit generators.2005A ... N, and shifter 2006. The output of context model 2001 is connected to an input from memory 2002. The output from memory 2002 is connected to an input of PEM 25 status-to-code block 2003 · The output of PEM status-to-code block 2003 is coupled to an input of the decoder 2004. The output of decoder 2004 is coupled to the enable input of the bit generators 2005A ... N. The bit generators 2005A ... N are connected to receive coded data output signals from the 2006 shifter.
30 Contextmodel 2001, geheugen 2002 en PEM status-naar-code-blok 2003 werken als hun tegenhangers in fig. 19. Contextmodel 2001 genereert een context-bin. Het geheugen 2002 geeft een waarschijnlijkheidsstatus af gebaseerd op de context-bin.» De waarschijnlijkheidsstatus wordt ontvangen door het PEM status-naar-code-blok 2003 die een waarschijn-35 lijkheidsklasse voor elke waarschijnlijkheidstoestand genereert. Decoder 2004 geeft een van de bitgeneratoren 2005A...N vrij bij decodering van de waarschijnlijkheidsklasse. (Opgemerkt wordt dat decoder 2004 een M naar 2M decoderschakeling is soortgelijk aan een op zichzelf 10013Π 95 bekende 7*1x138 3^8 decoder, niet zijnde een decoder voor entropie-codering). Omdat elke code een afzonderlijke bitgenerator heeft kunnen sommige bitgeneratoren andere dan R-codes gebruiken. In het bijzonder een code voor waarschijnlijkheden nabij 60% kan worden gebruikt om de 5 waarschijnlijkheidsruimte tussen R2(0) en R2(l) beter in te rasteren. Tabel S geeft bijvoorbeeld een dergelijke code.Context model 2001, memory 2002 and PEM status-to-code block 2003 act as their counterparts in fig. 19. Context model 2001 generates a context bin. Memory 2002 issues a probability status based on the context bin. ” The probability status is received by the PEM status-to-code block 2003 which generates a probability class for each probability condition. Decoder 2004 releases one of the bit generators 2005A ... N when decoding the probability class. (It should be noted that the 2004 decoder is an M to 2M decoder circuit similar to a 7 * 1x138 3 ^ 8 decoder known per se 10013Π 95, not being an entropy coding decoder). Because each code has a separate bit generator, some bit generators can use other than R codes. In particular, a code for probabilities near 60% can be used to better frame the probability space between R2 (0) and R2 (1). Table S, for example, gives such a code.
Tabel STable S
Niet-gecodeerde data Codewoord ΒΗΗΜΜΗΗη············· Η·Β^^Μ·Β··^Η····Μ··· 10 0 0 0 0 0 0 0 1 0 1 0 1 10 1 11, 15 Indien nodig voor het bereiken van de gewenste snelheid kan een voordecodering van een of meer bits uitgevoerd worden om te garanderen dat de gedecodeerde data snel beschikbaar is. Teneinde de noodzaak om een grote runtelling te moeten updaten bij elke klokcyclus te vermijden, worden in sommige uitvoeringsvormen zowel de codewoord-decodering 20 als de runtelling voor lange codes gepartitioneerd.Uncoded data Code word ΒΗΗΜΜΗΗη ············· Η · Β ^^ Μ · Β ·· ^ Η ···· Μ ··· 10 0 0 0 0 0 0 0 1 0 1 0 1 10 1 11, 15 If necessary to achieve the desired rate, pre-decoding of one or more bits can be performed to ensure that the decoded data is available quickly. In order to avoid the need to update a large run count with each clock cycle, in some embodiments both the codeword decoding 20 and the long code run count are partitioned.
De bitgenerator voor R2(0) codes is niet-gecompliceerd. Een codewoord wordt gevraagd telkens als een bit wordt gevraagd. Het gegenereerde bit is eenvoudig het codewoord {via een exclusieve 0F-functie gecombineerd met de MPS).The bit generator for R2 (0) codes is straightforward. A codeword is requested every time a bit is requested. The generated bit is simply the codeword {via an exclusive 0F function combined with the MPS).
25 Codes voor korte runlengten, bijvoorbeeld R2(l), R3(l), R2(2) en R3(2) worden op de volgende wijze behandeld. Alle bits in een codewoord worden gedecodeerd en opgeslagen in een toestandsmachine die een kleine teller (respectievelijk 1, 2 of 3 bits) en een LPS-aanwezig bit bevat. De teller en het LPS-aanwezig bit werken als een R-code-deco- 30 der.Short run length codes, for example R2 (1), R3 (1), R2 (2) and R3 (2) are treated in the following manner. All bits in a codeword are decoded and stored in a state machine containing a small counter (1, 2 or 3 bits, respectively) and an LPS bit present. The counter and the LPS present bit act as an R-code decoder.
%%
Voor lange codes zoals R2(k) en R3(k) voor k > 2 worden de bitgeneratoren gepartitioneerd in twee eenheden als getoond in fig. 21. In fig. 21 is een bitgeneratorstructuur voor R2(k) codes met k > 2 getoond met een korte run-eenheid 2101 en een lange run-eenheid 2102.For long codes such as R2 (k) and R3 (k) for k> 2, the bit generators are partitioned into two units as shown in Fig. 21. In Fig. 21, a bit generator structure for R2 (k) codes with k> 2 is shown with a short run unit 2101 and a long run unit 2102.
35 Alhoewel de structuur bestemd is voor gebruik met R2 (k > 2) codes is de werking ervan soortgelijk voor R3 (k > 2) codes (zoals voor de 1001317 * 96 deskundige duidelijk zal -zijn).Although the structure is intended for use with R2 (k> 2) codes, its operation is similar for R3 (k> 2) codes (as will be apparent to those skilled in the art.
De korte run-eenheid 2101 is aangesloten voor het ontvangen van een vrijgeefsignaal en een codewoord [0...2] als ingangen in de bitge-nerator en een uit allemaal nullen bestaand signaal en een "nul tel-5 ling" signaal (aangevende een nul tellerstand) beide van de lange run-eenheid 2102. In responsie op deze ingangssignalen geeft de korte run-eenheid 2101 een gedecodeerd bit aan de uitgang af alsmede een volgend signaal-indicatie, welke signaleren dat een nieuw codewoord nodig is. De korte run-eenheid 2101 genereert ook een tellervrijgeefsignaal, een 10 tellerlaadsignaal en een tellermaxsignaal aan de lange run-eenheid 2102. De lange run-eenheid 2102 is ook zodanig aangesloten dat het codewoord [k...3] als ingang naar de bitgenerator wordt ontvangen.The short run unit 2101 is connected to receive a release signal and a codeword [0 ... 2] as inputs in the bit generator and an all zero signal and a "zero count" signal (indicating a zero counter position) both of the long run unit 2102. In response to these input signals, the short run unit 2101 outputs a decoded bit at the output as well as a subsequent signal indication, signaling that a new code word is needed. The short run unit 2101 also generates a counter enable signal, a counter load signal and a counter max signal to the long run unit 2102. The long run unit 2102 is also connected such that the code word [k ... 3] is input to the bit generator. being received.
De korte run-eenheid 2101 behandelt runs met een lengte van maximaal 4 en is soortgelijk aan een R2(2) bitgenerator. In een uitvoe-15 ringsvorm is de korte run-eenheid 2101 gelijk voor alle R2 (k > 2)The short run unit 2101 handles runs up to 4 in length and is similar to an R2 (2) bit generator. In one embodiment, the short run unit 2101 is equal for all R2 (k> 2)
VV
codes. Het doel van de lange runteller 2102 is het vaststellen wanneer de laatste 1-4 bits van de run worden afgegeven aan de uitgang. De lange run-eenheid 2102 heeft ingangen, EN-logica en een teller die in grootte varieert met k.codes. The purpose of the long run counter 2102 is to determine when the last 1-4 bits of the run are delivered to the output. The long run unit 2102 has inputs, AND logic, and a counter that varies in size by k.
20 Een uitvoeringsvorm van de lange runteller-eenheid 2102 is getoond in fig. 22. De in deze figuur getoonde lange run-eenheid 2102 omvat de EN-logica 2201 die aangesloten is. voor ontvangst van het codewoord [k — 3] en die een uit allemaal enen bestaand signaal afgeeft als logische 1 indien alle bits in het codewoord gelijk zijn aan 1, daar-25 bij aangevende dat het huidige codewoord een IN codewoord is en dat de runtelling kleiner is dan 4. De NIET-logica 2202 is zodanig aangesloten dat daarin het codewoord wordt ontvangen en geïnverteerd. De uitgang van de NIET-logica 2202 is verbonden met een ingang van een bit-teller 2203· De bitteller 2203 ontvangt bovendien een tellervrijgeef-30 signaal, een tellerlaadsignaal en een tellermaxsignaal. In responsie op de ingangssignalen genereert de bitteller 2203 een tellernulsig-naal.An embodiment of the long run counter unit 2102 is shown in Fig. 22. The long run unit 2102 shown in this figure includes the EN logic 2201 which is connected. for receiving the codeword [k - 3] and outputting a all-one signal as logic 1 if all bits in the codeword are equal to 1, indicating that the current codeword is an IN codeword and that the run count is less than 4. The NON logic 2202 is connected such that it receives and inverts the codeword. The output of NON logic 2202 is connected to an input of a bit counter 2203. The bit counter 2203 additionally receives a counter enable 30 signal, a counter load signal and a counter max signal. In response to the input signals, the bit counter 2203 generates a counter zero signal.
In een uitvoeringsvorm is de teller 2203 een k-2 bitteller en wordt gebruikt om lange runtellingen af te breken tot runs van vier 35 MPS'en en een mogelijk restant. Het tellervrijgeefsignaal geeft aan dat vier MPS'en aan de uitgang zijn afgegeven en de teller moet worden gedecrementeerd. Het tellerlaadsignaal wordt gebruikt bij het decoderen van "IN" codewoorden en zorgt ervoor dat de teller wordt geladen 1001317 - 97 met het complement van de codewoordbits k t/m 3· Het tellermaxsignaal wordt gebruikt bij het decoderen van "0" codewoorden en laadt de teller met zijn maximale waarde. Een tellernul-uitgangssignaal geeft dat de teller op nul staat.In one embodiment, counter 2203 is a k-2 bit counter and is used to break down long run counts into runs of four 35 MPSs and a possible remainder. The counter enable signal indicates that four MPSs have been output and the counter is to be decremented. The counter load signal is used in decoding "IN" codewords and causes the counter to be loaded 1001317 - 97 with the complement of the codeword bits kt / m · The counter max signal is used in decoding "0" codewords and loads the counter with its maximum value. A counter zero output signal indicates that the counter is at zero.
5 Een uitvoeringsvorm van de korte runteller-eenheid 2101 is getoond in fig. 23. In fig. 23 omvat de korte runteller-eenheid een bestu-ringsmodule 2301, een twee-bit teller 2302 en een drie-bit teller 2303· De besturingsmodule 2301 ontvangt een vrijgeefsignaal, het codewoord [0...2] en het uit allemaal enen bestaande signaal alsmede het 10 tellernulsignaal van de lange runteller-eenheid. De twee-bit teller wordt gebruikt voor het tellen vein vier bit-runs vein MPS'en die deel uitmaken van langere runs. Een R2(2) teller en een LPS-bit (drie bits in totaal) 2303 wordt gebruikt voor het genereren van de 1-4 bits aan het einde van een run. De vrij geef-ingang geeft aan dat een bit moet 15 worden gegenereerd op de bit-uitgang. De tellernul-ingang geeft, als ze niet is ingesteld, aan dat een run van vier MPS'en aan de uitgang moet worden afgegeven. Zodra de MPS-teller 2302 de nulstand bereikt wordt de tellervrijgeef-uitgang ingesteld. Als de tellernul-ingang wordt ingesteld wordt ofwel de R2(2) teller met de LPS gebruikt of een 20 nieuw codewoord wordt gedecodeerd en de volgende ujtgang wordt ingesteld.An embodiment of the short run counter unit 2101 is shown in Fig. 23. In Fig. 23, the short run counter unit includes a control module 2301, a two-bit counter 2302 and a three-bit counter 2303. The control module 2301. receives a release signal, the code word [0 ... 2] and the all-one signal as well as the counter zero signal from the long run counter unit. The two-bit counter is used for counting four bit-runs for MPSs that are part of longer runs. An R2 (2) counter and an LPS bit (three bits in total) 2303 is used to generate the 1-4 bits at the end of a run. The enable input indicates that a bit must be generated on the bit output. The counter zero input, if not set, indicates that a run of four MPSs should be output. As soon as the MPS counter 2302 reaches zero, the counter enable output is set. When the counter zero input is set, either the R2 (2) counter is used with the LPS or a new code word is decoded and the next output is set.
Indien het nieuwe codewoord gedecodeerd wordt, dan worden de uitgevoerde acties bepaald door het codewoord aan de ingang. Als op de ingang een "0" codewoord staat dan wordt de MPS-teller 2302 gebruikt 25 en wordt de tellermax-uitgang bekrachtigd. Voor "IN" codewoorden worden de eerste drie bits van het codewoord geladen in de R2(2) teller en LPS 2303 en wordt de tellerlaad-uitgang bekrachtigd. Als het uit allemaal enen bestaande ingangssignaal optreedt dan worden de R2(2) teller en LPS 2303 gebruikt voor het genereren van bits; in andere 30 gevallen wordt de MPS-teller gebruikt totdat een tellernul-ingangssig-naal optreedt.If the new codeword is decoded, the actions performed are determined by the codeword at the input. If the input has a "0" codeword, the MPS counter 2302 is used and the counter max output is energized. For "IN" codewords, the first three bits of the codeword are loaded into the R2 (2) counter and LPS 2303 and the counter load output is energized. When the all-one input signal occurs, the R2 (2) counter and LPS 2303 are used to generate bits; in other cases, the MPS counter is used until a counter zero input occurs.
Vanuit systeemperspectief moet het aantal codes klein zijn om het systeem goed te laten werken, kenmerkend 25 of minder. De afmetingen van de multiplexer nodig voor de bit-uitgangssignalen en volgende 35 codewoord-uitgangssignalen en de decoder voor het vrijgeven van een bepaalde bitgenerator moeten voor een snelle functionering begrensd zijn. Ook de fan-out van het codewoord van de verschuiver moet voor een snelle bedrijfssnelheid niet te hoog zijn.From a system perspective, the number of codes must be small for the system to function properly, typically 25 or less. The dimensions of the multiplexer required for the bit output signals and subsequent codeword output signals and the decoder for releasing a particular bit generator must be limited for fast operation. Also, the fan-out of the shifter's codeword should not be too high for a fast operating speed.
100131771 98100131771 98
Afzonderlijke bitgeneratoren voor elke code maken een pijplijnbe-drijf mogelijk. Als alle codewoorden resulteerden in ten minste twee bits dan zou de verwerking van de codewoorden in pijplijnbedrijf kunnen worden uitgevoerd in twee cyclussen in plaats van één. Daarmee kan 5 de snelheid van de decoder worden verdubbeld als de bitgeneratoren de begrenzende delen van het stelsel zouden vormen. Een manier om dit te bereiken is het runlengte-nulcodewoord (het codewoord dat alleen een LPS aangeeft) te laten volgen door één bit, hetgeen het volgende niet-gecodeerde bit is. Dit kan worden aangeduid als een RN(k)+l code en 10 codeert altijd ten minste twee bits. R2(0) codewoorden en wellicht sommige van de andere korte codewoorden behoeven niet in pijplijnbedrijf te functioneren terwille van de snelheid.Separate bit generators for each code allow for pipeline operation. If all code words resulted in at least two bits, the processing of the code words in pipeline operation could be performed in two cycles instead of one. This makes it possible to double the speed of the decoder if the bit generators form the limiting parts of the system. One way to achieve this is to have the run-length zero codeword (the codeword that only indicates an LPS) followed by one bit, which is the next unencrypted bit. This can be referred to as an RN (k) + 1 code and always encodes at least two bits. R2 (0) codewords and perhaps some of the other short codewords may not need to be pipelined for speed reasons.
Afzonderlijke bitgeneratoren lenen zich voor gebruik met impliciete signalering. Impliciete signalering voor het coderen met een eindig 15 geheugen kan worden gerealiseerd op de volgende wijze. Elke bitgenera-tor heeft een teller die de afmetingen heeft van een wachtrij-adres, bijvoorbeeld 9 bits bij een wachtrij met een afmeting van 512. Telkens wanneer een nieuw codewoord wordt gebruikt door een bitgenerator wordt de teller geladen met de maximale waarde. Telkens wanneer een wille-20 keurige bitgenerator een codewoord vraagt worden de tellers van alle bitgeneratoren gedecrementeerd. Telkens wanneer een teller de nulstand bereikt wordt de status van de corresponderende bitgenerator gewist (bijvoorbeeld de MPS-teller, de R2(2) teller en de LPS en de lange runlengte-teller worden gewist). Omdat dit wissen kan plaatsvinden 25 zelfs indien een bepaalde bitgenerator niet is vrijgegeven is er geen probleem met verouderde telIerstanden.Individual bit generators lend themselves for use with implicit signaling. Implicit signaling for finite memory encoding can be accomplished in the following manner. Each bit generator has a counter that is the size of a queue address, for example 9 bits for a queue with a size of 512. Whenever a new code word is used by a bit generator, the counter is loaded with the maximum value. Whenever a random bit generator requests a codeword, the counters of all bit generators are decremented. Each time a counter reaches zero, the status of the corresponding bit generator is cleared (for example, the MPS counter, the R2 (2) counter and the LPS and the long run length counter are cleared). Since this erasure can take place even if a certain bit generator is not enabled, there is no problem with outdated counters.
Initialisatie van het geheugen voor elke context-binMemory initialization for each context bin
In gevallen waarin het geheugen voor elke context-bin waarschijn-30 lijkheidsschattingsinformatie bevat, kan extra geheugenbandbreedte nodig zijn om de decoder (bijvoorbeeld het geheugen) zeer snel te initialiseren. Het snel initialiseren van de decoder kan een probleem zijn indien de decoder veel contexten heeft en ze allemaal in de be-ginstand móeten worden gebracht. Als de decoder veel contexten (IK of 35 meer) ondersteunt en het geheugen niet in zijn algemeenheid wordt teruggesteld dan kan een onacceptabel groot aantal klokpulscyclussen nodig zijn voor het terugstellen van het geheugen.In cases where the memory for each context bin contains probability estimation information, additional memory bandwidth may be required to initialize the decoder (eg, the memory) very quickly. Rapid initialization of the decoder can be a problem if the decoder has many contexts and they all have to be brought into the initial state. If the decoder supports many contexts (IK or more 35) and the memory is not generally reset, an unacceptably large number of clock pulse cycles may be required to reset the memory.
Teneinde de contexten snel terug te stellen maken sommige uitvoe- 100^317 99 ringsvormen vein de onderhavige uitvinding gebruik vein een extra bit, dat hierin wordt aangeduid als het geïnitialiseerde status-bit, en dat bij elke context wordt opgeslagen. Er wordt dus een extra bit opgeslagen met de PEM-status (b.v. 8 bits) voor elke context.In order to quickly reset the contexts, some embodiments of the present invention use an additional bit, referred to herein as the initialized status bit, and stored with each context. Thus, an extra bit is stored with the PEM status (e.g. 8 bits) for each context.
5 Het geheugen voor elke context-bin en de initialisatiebesturings- logica zijn getoond in fig. 24. Het contextgeheugen 2401 in fig. 24 is gekoppeld met een register 2402. In een uitvoeringsvorm omvat het register 2402 een één bit register dat de correcte huidige status voor de geïnitialiseerde status-bin aangeeft. Het register 2402 is verbon-10 den met één ingang van de exclusieve OF-logica 2403· Hen andere ingang van de exclusieve 0F-logica 2403 is gekoppeld met een uitgang van het geheugen 2401. Het uitgangssignaal van de exclusieve 0F-logica 2403 is een geldig signaal en wordt toegevoerd aan één ingang van de bestu-ringslogica 2404. Andere ingangen van de besturingslogica 2404 ontvan-15 gen het uitgangssignaal van de teller 2405 en het context-binsignaal.The memory for each context bin and the initialization control logic are shown in Fig. 24. The context memory 2401 in Fig. 24 is coupled to a register 2402. In one embodiment, register 2402 includes a one bit register that has the correct current status. for the initialized status bin. The register 2402 is connected to one input of the exclusive OR logic 2403. The other input of the exclusive 0F logic 2403 is coupled to an output of the memory 2401. The output of the exclusive 0F logic 2403 is a valid signal and is applied to one input of control logic 2404. Other inputs of control logic 2404 receive the output from counter 2405 and the context bins signal.
tt
Een uitgangssignaal van de besturingslogica 2404 wordt toegevoerd aan de selectie-ingangen van de MUX'en 2406-2407 en een ingang van de teller 2405· Een andere uitgang van de besturingslogica 2404 is gekoppeld met de selectie-ingang van MUX 2408. De ingangen van de MUX 2406 20 zijn gekoppeld met de uitgang van de teller 2405 en de context-bir indicatie. De uitgang van MUX 2406 is gekoppeld met het geheugen 2401. De ingangen van MUX 2407 ontvangen de nieuwe PEM-status en nul. De uitgang van de MUX 2407 is gekoppeld met één ingang van het geheugen 2401. Het uitgangssignaal van het geheugen 2401 en de initiële PEM-25 status worden toegevoerd aan de ingang van MUX 2408. De uitgang van MUX 2408 voert het PEM-status-uitgangssignaal.An output of control logic 2404 is applied to the selection inputs of MUXs 2406-2407 and an input of counter 2405 · Another output of control logic 2404 is coupled to the selection input of MUX 2408. The inputs of the MUX 2406 20 are coupled to the output of the counter 2405 and the context-bir indication. The output of MUX 2406 is coupled to memory 2401. The inputs of MUX 2407 receive the new PEM status and zero. The output of the MUX 2407 is coupled to one input of the memory 2401. The output of the memory 2401 and the initial PEM-25 status are applied to the input of MUX 2408. The output of MUX 2408 carries the PEM status output signal .
De waarde in het register 2402 wordt bij elk optreden van een decodeer-operatie (d.w.z. elke data-set, niet elk gedecodeerd bit) gecomplementeerd. De exclusieve 0F-logica 2403 vergelijkt de geldig-30 heid van de aangesproken geheugenlokatie met de registerwaarde om vast te stellen of de aangesproken geheugenlokatie geldig is voor deze decodeer-operatie. Dit wordt uitgevoerd gebruikmakend van de exclusieve 0F-logica 2403 om te controleren of het geïnitialiseerde statusbit past bij dé correcte toestand in het register 2402. Als de data in het 35 geheugen 2401 niet geldig is dan zorgt de besturingslogica 2404 ervoor dat de data door de status-naar-code-logica wordt genegeerd en in plaats daarvan de initiële PEM-toestand wordt gebruikt. Dat wordt gerealiseerd gebruikmakend van de MUX 2408. Als een nieuwe PEM-status 4001317 100 wordt ingeschreven in het geheugen wordt het geïnitialiseerde bit ingesteld op de huidige waarde van het register zodat het als geldig beschouwd zal worden wanneer het opnieuw wordt aangesproken.The value in register 2402 is complemented every time a decoding operation (i.e. every data set, not every decoded bit) occurs. The exclusive 0F logic 2403 compares the validity of the addressed memory location with the register value to determine whether the addressed memory location is valid for this decoding operation. This is performed using the exclusive 0F logic 2403 to check whether the initialized status bit matches the correct state in register 2402. If the data in memory 2401 is not valid, control logic 2404 causes the data to pass through the status-to-code logic is ignored and the initial PEM state is used instead. This is accomplished using the MUX 2408. When a new PEM status 4001317 100 is written into memory, the initialized bit is set to the current value of the register so that it will be considered valid when it is accessed again.
Elk ingangsgegeven in het context-bin-geheugen moet een geïnitia-5 liseerd statusbit hebben dat ingesteld is op de huidige waarde van het register voordat een andere decodeer-operatie kan beginnen. De teller 2*105 stapt door alle geheugenlokaties om te verzekeren dat ze geïni-tialiseerd zijn. Wanneer een context-bin wordt gebruikt maar zijn PEM-status is niet ge-updated dan kan een niet-gebruikte schrijfcyclus 10 worden gebruikt om de geheugenlokatie die wijst naar de teller 2*105 te testen of te updaten. Als na voltooiing van een decodeer-operatie de teller 2*105 geen maximale waarde heeft bereikt dan worden de resterende contexten geïnitialiseerd voor het begin van de volgende operatie. De volgende logica wordt gebruikt voor het besturen van de operatie.Each entry in the context bin memory must have an initialized status bit set to the current value of the register before another decoding operation can begin. The counter 2 * 105 steps through all memory locations to ensure that they are initialized. When a context bin is used but its PEM status is not updated, an unused write cycle 10 can be used to test or update the memory location pointing to the counter 2 * 105. If, after completion of a decoding operation, the counter 2 * 105 has not reached a maximum value, the remaining contexts are initialized before the start of the next operation. The following logic is used to control the operation.
writeJt - false; counter - 0; alljnitiallzed - false; while (counter < maximum context bln+1) read PEM state trom conlext memory H ((counter -« context bin read) and (writeJl)) writejt - talse 20 counter - counter + 1writeJt - false; counter - 0; alljnitiallzed - false; while (counter <maximum context bln + 1) read PEM state trom conlext memory H ((counter - «context bin read) and (writeJl)) writejt - talse 20 counter - counter + 1
If ((PEM state changed) write new PEM state else If (writejt) write initial PEM state to mefnpry location "counter counter - counter + 1 else read memory location "counter 25 K (initialized bit in read location Is in wrong state) writejt true else counter - counter + 1 alljnitiallzed - true; while (decoding) read PEM state from context memory 3° if (PEM state changed) . write new PEM state PEM wet snelle adaptatieIf ((PEM state changed) write new PEM state else If (writejt) write initial PEM state to mefnpry location "counter counter - counter + 1 else read memory location" counter 25 K (initialized bit in read location Is in wrong state) writejt true else counter - counter + 1 alljnitiallzed - true; while (decoding) read PEM state from context memory 3 ° if (PEM state changed) .write new PEM state PEM wet fast adaptation
De volgens de uitvinding gebruikte PEM kan een adaptatleschema 35 bevatten om een snelle adaptatie mogelijk te maken ongeacht de hoeveelheid beschikbare data. Door dit te doen maakt de uitvinding het mogelijk de decodering aanvankelijk sneller de adapteren of langzamer te adapteren naarmate meer data beschikbaar is, dit als middel voor 1ÖO1317 4 101 het verschaffen van een meer nauwkeurige schatting. Verder kan de PEM gefixeerd zijn In een veld-programmeerbare array van poorten (FPGA) of In een ASIC-implementatie van een PEM-status tabel/machine.The PEM used in accordance with the invention may include an adaptation scheme 35 to allow rapid adaptation regardless of the amount of data available. By doing this, the invention initially allows the decoding to adapt faster or the slower to adapt as more data is available, this as a means of providing a more accurate estimate. Furthermore, the PEM can be fixed In a field-programmable array of ports (FPGA) or In an ASIC implementation of a PEM status table / machine.
De onderstaande tabellen T-Y beschrijven een aantal waarschijn-5 lijkheidsschattingtoestand-machines. Sommige tabellen gebruiken niet de R3 codes of gebruiken geen lange codes ter reducering van de hard-ware-kosten. Alle tabellen met uitzondering van tabel T gebruiken "snel adapterende" speciale statussen voor het snel adapteren bij de start van een codering totdat de eerste LPS optreedt. Deze snelle 10 adaptatie-statussen zijn in de tabellen cursief getoond. Als, bijvoorbeeld verwijzend naar tabel U, de decodering begint dan is de huidige status de 0 status. Als een MPS optreedt dan gaat de decoder over naar status 35· Zolang als MPS'en optreden gaat de decoder verder opwaarts vanaf status 35. met een eventuele overgang naar status 28. Als op een 15 willekeurig tijdstip een LPS optreedt dan gaat de decoder van de oplopende snel adapterende statussen over naar een status die de correcte waarschijnlijkheidstoestand vertegenwoordigt voor de data die tot dusverre is ontvangen.The tables T-Y below describe a number of probability estimation machines. Some tables do not use the R3 codes or use long codes to reduce hardware costs. All tables except Table T use "fast adaptive" special states for fast adaptation at the start of encoding until the first LPS occurs. These quick 10 adaptation states are shown in italics in the tables. If, for example, referring to table U, the decoding starts then the current state is the 0 state. If an MPS occurs, the decoder switches to state 35 · As long as MPSs occur, the decoder continues upward from state 35. with a possible transition to state 28. If an LPS occurs at any 15 time, the decoder goes from the ascending fast adaptive states to a state that represents the correct probability state for the data received so far.
Opgemerkt wordt dat, nadat een bepaald aantal MPS'en is ontvangen, 20 voor elke tabel de decoder de snel adapterende statussen verlaat. In de gewenste uitvoeringsvorm is er, zodra de snel adapterende statussen zijn verlaten, geen terugkeer mogelijk, afgezien van het herstarten van het decodeerproces. In andere uitvoeringsvormen kan de statustabel ontworpen zijn om opnieuw terecht te komen bij deze snel adapterende 25 statussen teneinde een snellere adaptatie mogelijk te maken. De uitvinding maakt het voor de decoder mogelijk om sneller bij meer "schuinstaande" codes terecht te komen waardoor meer voordeel wordt getrokken uit de verbeterde compressie. Opgemerkt wordt dat de snelle adaptatie kan worden geëlimineerd voor een bepaalde tabel door de 30 tabel-ingangsgegevens voor de huidige toestand 0 zodanig te veranderen dat de tabel slechts overgangen vertoont over één toestand omhoog of omlaag afhankelijk van de data-invoer.It is noted that, after a certain number of MPSs have been received, for each table the decoder leaves the fast adaptive states. In the desired embodiment, once the fast adaptive states have been exited, no return is possible apart from restarting the decoding process. In other embodiments, the status table may be designed to re-enter these rapidly adapting states to allow for faster adaptation. The invention allows the decoder to access more "skewed" codes more quickly, taking more advantage of the improved compression. It is noted that the quick adaptation can be eliminated for a given table by changing the table input data for the current state 0 such that the table has only transitions over one state up or down depending on the data input.
Voor alle tabellen is de data voor elke status de code voor die status, de volgende status bij een positieve update (op) en de volgen-35 de status bij een negatieve update (neer). Asterixen geven die toestanden aan waarin de MPS moet worden gewijzigd bij een negatieve update.For all tables, the data for each status is the code for that status, the next status for a positive update (up), and the next-35 status for a negative update (down). Asterixes indicate those states in which the MPS should be changed in a negative update.
1001317 1021001317 102
Tabel TTable T
Hui- I Code Op Neer Hui- Code Op Neer dige I vol- vol- dige vol- vol- toe- I gende gende toe- gende gende 5 stand toe- tóe- stand toe- toestand stand stand stand 0 r2(0) 1 0* 18 r3(3) 19 17 1 r2(0) 2 0 19 r2(4) 20 18 2 r2(0) 3 1 20 r3 (4) 21 19 3 r2(0) 4 2 21 r2(5) 22 20 10 4 r2(0) 5 3 22 r3(5) 23 21 5 r2(0) 6 4 23 r2(6) 24 22 6 r2(l) 7 5 24 r3(6) 25 23 7 r2(l) 8 6 25 r2 (7) 26 24 8 r2 (1) 9 7 26 r3(7) 27 25 15 9 r2(l) 10 8 27 r2(8) 28 26 10 r2(l) 11 9 28 r3(8) 29 27 11 r2(l) 12 10 . 29 r2(9) 30 28 12 r3(l) 13 11 30 r3(9) 31 29 13 r3(l) 14 12 31 r2 (10) 32 30 20 14 r3(i) 15 13 32 r3(io) 33 31 15 r2(2) 16 14 33 r2 (11) 34 32 16 γ3(2) 17 15 34 I Γ3(11) 34 33 17 γ2(3) 18 16House I Code Op Neer House Code Op Neerige I full full- full next- next next next 5th state state state state state position 0 r2 (0) 1 0 * 18 r3 (3) 19 17 1 r2 (0) 2 0 19 r2 (4) 20 18 2 r2 (0) 3 1 20 r3 (4) 21 19 3 r2 (0) 4 2 21 r2 (5) 22 20 10 4 r2 (0) 5 3 22 r3 (5) 23 21 5 r2 (0) 6 4 23 r2 (6) 24 22 6 r2 (l) 7 5 24 r3 (6) 25 23 7 r2 (l) 8 6 25 r2 (7) 26 24 8 r2 (1) 9 7 26 r3 (7) 27 25 15 9 r2 (l) 10 8 27 r2 (8) 28 26 10 r2 (l) 11 9 28 r3 (8) 29 27 11 r2 (l) 12 10. 29 r2 (9) 30 28 12 r3 (l) 13 11 30 r3 (9) 31 29 13 r3 (l) 14 12 31 r2 (10) 32 30 20 14 r3 (i) 15 13 32 r3 (io) 33 31 15 r2 (2) 16 14 33 r2 (11) 34 32 16 γ3 (2) 17 15 34 I Γ3 (11) 34 33 17 γ2 (3) 18 16
25 * schakelen naar MPS25 * switch to MPS
**
10013Π I10013Π I
Tabel UTable U
103103
Hui- Code Op Neer Hui- Code Op Neer dige vol- vol- dige vol- vol- toe- gende gende toe- gende gende 5 stand toe- toe- stand toe- toestand stand stand stand 0 I r2(0) 35 35* 22 r3(5) 23 21_ 1 I r2(0) 2 1* 23 r2(6) 24 22 2 r2 (0) 3 1 24 r3(6) 25 23 -------- 3 r2(0) 4 2 25 r2(7) 26 24 10 4 r2 (0) 5 3 26 r3(7) 27 25 5 r2(0) 6 4 27 r2(8) 28 26 -------- 6 r2(l) 7 5 28 r3(8) 29 27 7 r2 (1) 8 6 29 r2 (9) 30 28 _8__r2 (1) 9 7 30 r3(9) 31 29 15 9 r2( 1) 10 8 31 r2(10) 32 30 10 r2(l) 11 9 32 | r3(10) 33 31 11 r2(D 12 10 33 | r2(ll) 34 32 12 __r3 (1) 13 11 34 r3(ll) 34 33 13 r3(l) 14 12 35 r2(0) 36 1* 20 14 r3(l) 15 13 36 r2(l) 37 2 15 r2(2) 16 14 37 r 2(2) 38 4 16 r3(2) 17 15 38 r2(3) 39 6 17 r2(3) 18 16 39 r2(4) 40 10 18 r3(3) 19 17 40 r2(5) 4l 16 25 19 r2(4) 20 18 41 r2(6) 42 19 20 r3(4) 21 19 42 r2(7) 43 22 21 r2(5) 22 20 43 r2(8) 28 25 11317Hui- Code Op Neer Hui-Code Op Neerige full full full- full next- next next- 5th state- state state- state state state 0 I r2 (0) 35 35 * 22 r3 (5) 23 21_ 1 I r2 (0) 2 1 * 23 r2 (6) 24 22 2 r2 (0) 3 1 24 r3 (6) 25 23 -------- 3 r2 (0) 4 2 25 r2 (7) 26 24 10 4 r2 (0) 5 3 26 r3 (7) 27 25 5 r2 (0) 6 4 27 r2 (8) 28 26 -------- 6 r2 (l ) 7 5 28 r3 (8) 29 27 7 r2 (1) 8 6 29 r2 (9) 30 28 _8__r2 (1) 9 7 30 r3 (9) 31 29 15 9 r2 (1) 10 8 31 r2 (10) 32 30 10 r2 (l) 11 9 32 | r3 (10) 33 31 11 r2 (D 12 10 33 | r2 (ll) 34 32 12 __r3 (1) 13 11 34 r3 (ll) 34 33 13 r3 (l) 14 12 35 r2 (0) 36 1 * 20 14 r3 (l) 15 13 36 r2 (l) 37 2 15 r2 (2) 16 14 37 r 2 (2) 38 4 16 r3 (2) 17 15 38 r2 (3) 39 6 17 r2 (3) 18 16 39 r2 (4) 40 10 18 r3 (3) 19 17 40 r2 (5) 4l 16 25 19 r2 (4) 20 18 41 r2 (6) 42 19 20 r3 (4) 21 19 42 r2 (7) 43 22 21 r2 (5) 22 20 43 r2 (8) 28 25 11317
* schakelen naar MPS* switch to MPS
Tabel VTable V
104104
Hui- Code Op Neer Hui- Code Op Neer dige vol- vol- dige vol- vol- toe- gende gende toe- gende gende 5 stand toe- toe- stand toe- toestand stand stand standHui- Code Op Neer Hui-Code Op Neerige full- full- full- next- next next- next 5 state state state state state state
mm/tmMMBmm / tmMMB
0 r2(0) 35 35* 22 r2(5) 23 21 1 r2(0) 2 1* 23 r2(6) 24 22 2 r2(0) 3 1 24 r2(6) 25 23 -------- 3 r2(0) 4 2 25 r2(7) 26 24 10 4 r2(0) 5 3 26 r2(7) 27 25 5 r2 (0) 6 4 27 r2(8) 28 26 6 r2 (1) 7 5 28 r2 (8) 29 27 7 r2 (1) 8 6 29 r2(9) 30 28 8 r2(l) 9 7 30 r2(9) 31 29 15 9 r2(l) 10 8 31 r2(10) 32 30 10 r2 (1) 11 9 32 r2(10) 33 31 11 r2(l) 12 10 , 33 g r2(ll) 33 32 12 r2(l) 13 11 13 r2(2) 14 12 35 r2(0) 36 1# 20 14 r2(2) 15 13 36 r2(l) 37 2 15 r2{2) 16 14 37 r 2(2) 38 4 16 r2(2) 17 15 3Ö r2(3) 39 6 17 r2(3) 18 16 39 r2{4) 40 10 18 r2(3) 19 17 40 r2(5) 4l 16 25 19 r2(4) 20 18 41 r2(6) 42 19 20 r2(4) 21 19 42 r2{7) 43 22 21 r2(5) 22 20 43 r2(8) 28 250 r2 (0) 35 35 * 22 r2 (5) 23 21 1 r2 (0) 2 1 * 23 r2 (6) 24 22 2 r2 (0) 3 1 24 r2 (6) 25 23 ------ - 3 r2 (0) 4 2 25 r2 (7) 26 24 10 4 r2 (0) 5 3 26 r2 (7) 27 25 5 r2 (0) 6 4 27 r2 (8) 28 26 6 r2 (1) 7 5 28 r2 (8) 29 27 7 r2 (1) 8 6 29 r2 (9) 30 28 8 r2 (l) 9 7 30 r2 (9) 31 29 15 9 r2 (l) 10 8 31 r2 (10) 32 30 10 r2 (1) 11 9 32 r2 (10) 33 31 11 r2 (l) 12 10, 33 g r2 (ll) 33 32 12 r2 (l) 13 11 13 r2 (2) 14 12 35 r2 (0 ) 36 1 # 20 14 r2 (2) 15 13 36 r2 (l) 37 2 15 r2 {2) 16 14 37 r 2 (2) 38 4 16 r2 (2) 17 15 3Ö r2 (3) 39 6 17 r2 (3) 18 16 39 r2 {4) 40 10 18 r2 (3) 19 17 40 r2 (5) 4l 16 25 19 r2 (4) 20 18 41 r2 (6) 42 19 20 r2 (4) 21 19 42 r2 {7) 43 22 21 r2 (5) 22 20 43 r2 (8) 28 25
1001317 A1001317 A
* schakelen naar MPS* switch to MPS
105105
Tabel WTable W
Hui- Code Op Neer Hui- I Code Op Neer dige vol- vol- dige vol- vol- toe- gende gende toe- gende gende 5 stand toe- toe- stand toe- toestand stand stand stand 0 r2(0) 35 35* 22 r2(5) 23 21 1 r2(0) 2 1* 23 r2(6) 24 22 2 r2(0) 3 1 24 r2(6) 25 23 3 r2(0) 4 2 25 r2 (7) 26 24 10 4 r2 (0) 5 3 26 r2(7) 27 25 5 r2(0) 6 4 27 r2 (8) 28 26 6 r2( 1) 7 5 28 r2 (8) 29 27 7 r2( 1) 8 6 29 r2(9) 30 28 _8__r2( 1) 9 7 30 r2(9) 31 29 15 9 r2 (1) 10 8 31 r2 (10) 32 30 10 r2( 1) 11 9 32 r2(10) 33 31 11 __r2(l) 12 10 33 | r2(ll) 34 32 12 r3(l) 13 U 34 r2 (11) 34 33 13 r3(l) 14 12 35 r2(0) 36 1* 20 14 r3(l) 15 13 36 r2(l) 37 2 15 r2 (2) 16 14 37 r 2(2) 38 4 16 r3(2) 17 15 38 r2(3) 39 6 -------- 17 r2(3) 18 16 39 r2(4) 40 10 18 r3(3) 19 17 40 r2(5) 4l 16 25 19 r2(4) 20 18 41 r2(6) 42 19 20 r3(4) 21 19 42 r2(7) 43 22 21 r2(5) 22 20 43 | r2(8) 28 25House Code Op Neer House I Code Op Neerige full- full- full- next- next- next- next 5- state- state state- state stand 0 r2 (0) 35 35 * 22 r2 (5) 23 21 1 r2 (0) 2 1 * 23 r2 (6) 24 22 2 r2 (0) 3 1 24 r2 (6) 25 23 3 r2 (0) 4 2 25 r2 (7) 26 24 10 4 r2 (0) 5 3 26 r2 (7) 27 25 5 r2 (0) 6 4 27 r2 (8) 28 26 6 r2 (1) 7 5 28 r2 (8) 29 27 7 r2 (1) 8 6 29 r2 (9) 30 28 _8__r2 (1) 9 7 30 r2 (9) 31 29 15 9 r2 (1) 10 8 31 r2 (10) 32 30 10 r2 (1) 11 9 32 r2 (10) 33 31 11 __r2 (l) 12 10 33 | r2 (ll) 34 32 12 r3 (l) 13 U 34 r2 (11) 34 33 13 r3 (l) 14 12 35 r2 (0) 36 1 * 20 14 r3 (l) 15 13 36 r2 (l) 37 2 15 r2 (2) 16 14 37 r 2 (2) 38 4 16 r3 (2) 17 15 38 r2 (3) 39 6 -------- 17 r2 (3) 18 16 39 r2 (4) 40 10 18 r3 (3) 19 17 40 r2 (5) 4l 16 25 19 r2 (4) 20 18 41 r2 (6) 42 19 20 r3 (4) 21 19 42 r2 (7) 43 22 21 r2 (5) 22 20 43 | r2 (8) 28 25
* schakelen naar MPS* switch to MPS
10013171001317
Tabel XTable X.
106 ---- ----106 ---- ----
Hui- Code Op Neer Hui- Code Op Neer dige vol- vol- dige vol- vol- toe- gende gende toe- gende gende 5 stand toe- toe- stand toe- toestand stand stand stand 0 r2(0) 35 35* 22 r3(5) 23 21 1 r2 (0) 2 1* 23 r2(6) 24 22 2 r2(0) 3 1 24 r3(6) 25 23 3 I r2(0) 4 2 25 | r2(7) 26 24 10 4 r2(0) 5 3 26 I r2(7) 27 25 5 r2(0) 6 4 27 I r2(7) 27 26 _6__r2(l) 7 5 7 r2 (1) 8 6 _8__r2(l) 9 7 15 9 r2(l) 10 8 10 r2(l) 11 9 11 r2(l) 12 10 12 r3(l) 13 11 13 r3(l) 14 12 35 r2(0) 36 1* 20 14 r3(l) 15 13 36 r2(l) 37 2 15 r2(2) 16 14 37 r 2(2) 38 4 16 r3(2) 17 15 36 r2(3) 39 6 17 r2(3) 18 16 39 r2(4) 40 10 18 r3(3) 19 17 40 r2(5) 4l 16 25 19 r2(4) 20 18 41 r2(6) 42 19 20 r3(4) 21 19 42 r2(7) 25 22 21 r2 (5) 22 20 _j_Hui- Code Op Neer Hui-Code Op Neerige full full full- full next- next next- 5th state- state state- state state stand 0 r2 (0) 35 35 * 22 r3 (5) 23 21 1 r2 (0) 2 1 * 23 r2 (6) 24 22 2 r2 (0) 3 1 24 r3 (6) 25 23 3 I r2 (0) 4 2 25 | r2 (7) 26 24 10 4 r2 (0) 5 3 26 I r2 (7) 27 25 5 r2 (0) 6 4 27 I r2 (7) 27 26 _6__r2 (l) 7 5 7 r2 (1) 8 6 _8__r2 (l) 9 7 15 9 r2 (l) 10 8 10 r2 (l) 11 9 11 r2 (l) 12 10 12 r3 (l) 13 11 13 r3 (l) 14 12 35 r2 (0) 36 1 * 20 14 r3 (l) 15 13 36 r2 (l) 37 2 15 r2 (2) 16 14 37 r 2 (2) 38 4 16 r3 (2) 17 15 36 r2 (3) 39 6 17 r2 (3) 18 16 39 r2 (4) 40 10 18 r3 (3) 19 17 40 r2 (5) 4l 16 25 19 r2 (4) 20 18 41 r2 (6) 42 19 20 r3 (4) 21 19 42 r2 (7) 25 22 21 r2 (5) 22 20 _j_
* schakelen naar MPS* switch to MPS
107107
Tabel YTable Y.
Hui- Code Op Neer Hui- I Code Op Neer dige vol- vol- dige I vol- vol- toe- gende gende toe- I gende gende 5 stand toe- toe- stand I toe- toestand stand I stand stand 0 r2(0) 35 35* 22 r2(5) 23 21 1 r2(0) 2 1* 23 r2{6) 24 22 2 r2(0) 3 1 24 r2(6) 25 23 3 r2(0) 4 2 25 | r2(7) 26 24 10 4 r2(0) 5 3 26 r2(7) 27 25 5 r2(0) 6 4 27 r2(7) 28 26 6 r2 (1) 7 5 28 r2(7) 28 27 7 r2(1) 8 6 _8__r2(l) 9__7_ 15 9 r2(l) 10 8 10 r2( 1) 11 9 11 r2(l) 12 10 12 r2(l) 13 11 13 r2(2) 14 12 35 | r2(0) 36 1* 20 14 r2(2) 15 13 36 I r2{l) 37 2 15 r2{2) 16 14 37 r 2(2) 38 4 16 r2(2) 17 15 38 r2(3) 39 6 17 r2(3) 18 16 39 r2{4) 40 10 18 r2(3) 19 17 40 r2(5) 4l 16 25 19 r2(4) 20 18 41 r2(6) 42 19 20 r2(4) 21 19 42 r2(7) 25 22 21 r2(5) 22 20 43 r2(8) 28 25House Code Op Neer House I Code Op Neerige next full I next full next next I next state 5 state I state state I state state 0 r2 (0 ) 35 35 * 22 r2 (5) 23 21 1 r2 (0) 2 1 * 23 r2 {6) 24 22 2 r2 (0) 3 1 24 r2 (6) 25 23 3 r2 (0) 4 2 25 | r2 (7) 26 24 10 4 r2 (0) 5 3 26 r2 (7) 27 25 5 r2 (0) 6 4 27 r2 (7) 28 26 6 r2 (1) 7 5 28 r2 (7) 28 27 7 r2 (1) 8 6 _8__r2 (l) 9__7_ 15 9 r2 (l) 10 8 10 r2 (1) 11 9 11 r2 (l) 12 10 12 r2 (l) 13 11 13 r2 (2) 14 12 35 | r2 (0) 36 1 * 20 14 r2 (2) 15 13 36 I r2 {l) 37 2 15 r2 {2) 16 14 37 r 2 (2) 38 4 16 r2 (2) 17 15 38 r2 (3) 39 6 17 r2 (3) 18 16 39 r2 {4) 40 10 18 r2 (3) 19 17 40 r2 (5) 4l 16 25 19 r2 (4) 20 18 41 r2 (6) 42 19 20 r2 (4) 21 19 42 r2 (7) 25 22 21 r2 (5) 22 20 43 r2 (8) 28 25
* schakelen naar MPS* switch to MPS
1001317 1081001317 108
Het toevoegen van een snelle adaptatie aan de waarschijnlijkheids-schattlng helpt alleen bij het begin van het codeerproces. Andere werkwijzen kunnen worden gebruikt voor het verbeteren van de adaptatie gedurende de codering indien de statistieken van een context-bin snel-5 Ier wijzigen dan door de eerder beschreven PEM-toestandstabellen kan worden bijgehouden.Adding a quick adaptation to the probability estimate only helps at the beginning of the encoding process. Other methods can be used to improve adaptation during encoding if the context bin statistics change faster than what can be maintained by the previously described PEM state tables.
Een werkwijze voor het handhaven van een snelle adaptatie door de hele codering heen is het toevoegen van een versnellingsterm aan de update van de PEM-toestand. Deze versnelling kan worden geïncorporeerd 10 in een PEM-toestahdstabel door elke code een constant aantal keren (b.v. 8) te herhalen. Dan kan een versnellingsterm M (b.v. een positief geheel getal) worden toegevoegd of afgetrokken van de huidige toestand tijdens het updaten. Indien M gelijk is aan 1 werkt het stelsel hetzelfde als zonder versnelling en vindt de langzaamste adaptatie 15 plaats. Indien M groter is dan 1 vindt een snellere adaptatie plaats. Aanvankelijk kan M ingesteld worden op een waarde groter dan 1 teneinde een initiële snelle adaptatie te verschaffen.One method of maintaining rapid adaptation throughout the encoding is to add an acceleration term to the PEM state update. This acceleration can be incorporated into a PEM state table by repeating each code a constant number of times (e.g. 8). Then an acceleration term M (e.g., a positive integer) can be added or subtracted from the current state during the update. If M is equal to 1, the system works the same as without acceleration and the slowest adaptation 15 takes place. If M is greater than 1, a faster adaptation takes place. Initially, M can be set to a value greater than 1 to provide an initial fast adaptation.
Een werkwijze volgens de uitvinding voor het updaten van de waarde van M is gebaseerd op het aantal opeenvolgende codewoorden. Als bij-20 voorbeeld een vooraf bepaald aantal codewoorden opeenvolgend optreedt dan wordt de waarde van M verhoogd. Als bijvoorbeeld vier opeenvolgende codewoorden zijn "0""0"”0’”,0" of "1N""1N""1N""1N" dan is de waarde van M verhoogd. Anderzijds kan een wisselend codepatroon tussen ”0" en "IN" codewoorden gebruikt worden voor het verminderen van de waarde 25 van M. Als bijvoorbeeld vier opeenvolgende codewoorden zijn "0""1N""0""1N" of "IN""0""IN""0" dan is de waarde van M verminderd.A method according to the invention for updating the value of M is based on the number of consecutive code words. For example, if a predetermined number of code words occur sequentially, the value of M is increased. For example, if four consecutive code words are "0" "0" "0 '", 0 "or" 1N "" 1N "" 1N "" 1N "then the value of M is increased. On the other hand, an alternating code pattern can be between" 0 "and "IN" codewords are used to decrease the value of M. If, for example, four consecutive codewords are "0" "1N" "0" "1N" or "IN" "0" "IN" "0" then the value of M. decreased.
Een andere wijze van versnellen maakt gebruik van toestemdetabellen waarin elke code S keer wordt herhaald waarbij S een positief geheel getal is. S is een inverse versnellingsparameter. Indien S 30 gelijk is aan 1 dan is de adaptatie sneller en indien S groter is dan is de adaptatie langzamer. De waarde van S kan initieel op 1 worden gesteld om een snelle initiële adaptatie te verkrijgen. Gebruikmakend van een soortgelijke werkwijze als boven beschreven kan de waarde van S worden ‘ge-updated indien vier opeenvolgende codewoorden zijn 35 "0""0""0""0" of "IN""IN""IN""IN". In een dergelijk geval wordt de waarde van S verminderd. Indien in tegenstelling daarmee de vier opeenvolgende codewoorden zijn "0""1N""0""1N" of "1N""0""1N""0" dan wordt de waarde van S vergroot.Another method of acceleration uses permission tables in which each code is repeated S times where S is a positive integer. S is an inverse acceleration parameter. If S 30 is equal to 1, the adaptation is faster and if S is greater than, the adaptation is slower. The value of S can initially be set to 1 to obtain a quick initial adaptation. Using a similar method as described above, the value of S can be "updated if four consecutive code words are 35" 0 "" 0 "" 0 "" 0 "or" IN "" IN "" IN "" IN ". In such a case, the value of S is reduced. In contrast, if the four consecutive code words are "0" "1N" "0" "1N" or "1N" "0" "1N" "0" then the value of S is increased.
10 o 131 7 Ί 10910 o 131 7 Ί 109
De definitie van opeenvolgende codewoorden kan diverse betekenissen hebben. In een "per context" stelsel kunnen de opeenvolgende codewoorden verwijzen naar opeenvolgende codewoorden in een context-bin. In een "per waarschijnlijkheid" stelsel kunnen opeenvolgende codewoor-5 den verwijzen naar opeenvolgende codewoorden in een waarschijnlijk-heidsklasse. Als alternatief kunnen in beide stelsels opeenvolgende codewoorden in het algemeen verwijzen naar opeenvolgende codewoorden (zonder referentie naar context-bin of waarschijnlijkheidsklasse). Voor deze drie voorbeelden is het aantal geheugenbits nodig voor het 10 handhaven van een historie van codewoorden gelijk aan 3 x aantalcon-text-bins, 3 x aantal_waarschijnlijkheidsklassen respectievelijk 3· Het handhaven van een versnelling voor elke context-bin kern de beste adaptatie opleveren. Omdat een slecht volgproces vaak het gevolg is van een globale wijziging in de niet-gecodeerde data kan het bepalen 15 van een globale versnelling ook een goede adaptatie opleveren.The definition of consecutive code words can have various meanings. In a "per context" system, the consecutive code words can refer to consecutive code words in a context bin. In a "per probability" system, consecutive code words can refer to consecutive code words in a probability class. Alternatively, in both systems, consecutive code words can generally refer to consecutive code words (with no reference to context bin or probability class). For these three examples, the number of memory bits required to maintain a codewords history equal to 3 x number con text bins, 3 x number probability classes, respectively 3 · Maintaining an acceleration for each context bin core provides the best adaptation. Because a poor tracking process is often the result of a global change in the unencoded data, determining a global acceleration can also provide good adaptation.
Svsteem-applicatiesSvsteem applications
Een voordeel van elk compressiestelsel is het reduceren vein de opslagvereisten voor een set data. Het parallelle stelsel volgens de 20 uitvinding kan in de plaats treden voor iedere applicatie die op dit moment wordt uitgevoerd met een verliesvrij codeerstelsel en kan worden toegepast bij stelsels die werken op audio, tekst, databases, door computers uitvoerbare programmatuur of andere digitale data, signalen of symbolen. Voorbeelden van verliesvrije codeerstelsels omvatten 25 facsimile-compressie, database-compressie, compressie van grafische bitmap-afbeeldingen en compressie van transformatiecoëfficiënten in beeldcompressiestandaards zoals JPEG en MPEG. De onderhavige uitvinding maakt een kleine efficiënte hardware-implementatie mogelijk en relatief snelle software-implementaties waardoor het een goede keus is 30 zelfs voor applicaties die geen hoge snelheid vereisen.An advantage of any compression system is to reduce the storage requirements for a set of data. The parallel system according to the invention can replace any application currently running with a lossless coding system and can be applied to systems operating on audio, text, databases, computer executable software or other digital data, signals or symbols. Examples of lossless encoding systems include facsimile compression, database compression, bitmap graphics compression, and transformation coefficient compression in image compression standards such as JPEG and MPEG. The present invention allows for a small efficient hardware implementation and relatively fast software implementations making it a good choice even for applications that do not require high speed.
Het werkelijke voordeel dat de uitvinding heeft ten opzichte van de stand der techniek is de mogelijkheid om met zeer hoge snelheden te werken speciaal bij het decoderen. Op deze wijze kan de uitvinding volledig gébruik maken van zeer hoge snelheidskanalen, zoals computer-35 netwerken die met hoge snelheden werken, satellieten en aardgebonden omroepkanalen. Fig. 28 illustreert een dergelijk stelsel waarin om-roepdata of een met hoge snelheid werkend computernetwerk data levert aan het decodeerstelsel 2801 dat de data parallel decodeert teneinde 1001317* 110 uitgangsdata te produceren. De huidige hardware-entropie (zoals de Q-codeereenheid) zou de doorvoer door deze stelsels vertragen. Al deze systemen zijn tegen grote kosten zodanig ontworpen dat ze een grote bandbreedte hebben. Het is antiproduktief om dan een decoder met een 5 lage doorvoersnelheid te gebruiken. Het parallelle stelsel volgens de uitvinding past niet alleen bij deze hoge bandbreedten maar verhoogt in feite de effectieve bandbreedte omdat de data in gecomprimeerde vorm kan worden overgedragen.The real advantage that the invention has over the prior art is the ability to operate at very high speeds especially in decoding. In this way, the invention can make full use of very high-speed channels, such as high-speed computer networks, satellites and terrestrial broadcasting channels. Fig. 28 illustrates such a system in which broadcast data or a high-speed computer network supplies data to the decoding system 2801 which decodes the data in parallel to produce 1001317 * 110 output data. Current hardware entropy (such as the Q encoder) would slow throughput through these systems. All these systems are designed at great cost to have a wide bandwidth. It is anti-productive to use a decoder with a low throughput speed. The parallel system of the invention not only suits these high bandwidths, but actually increases the effective bandwidth because the data can be transferred in compressed form.
Het parallelle stelsel volgens de uitvinding is ook toepasbaar 10 voor het verkrijgen van een meer effectieve bandbreedte uit kanalen met een gemiddelde snelheid zoals ISDN, CD-ROM en SCSI. Een dergelijk bandbreedte-aanpassingsstelsel is getoond in fig. 29, terwijl data van bronnen zoals CD-ROM, Ethernet, SCSI (Small Computer Standard Interface) of andere soortgelijke bronnen wordt toegevoerd aan het deco-15 deerstelsel 2901, die de data ontvangt en decodeert teneinde een uit-gangssignaal te verschaffen. Deze kanalen zijn nog steeds sneller dan sommige huidige codeereenheden. Dikwijls worden deze kanalen gebruikt voor het bedienen vein een databron die meer bandbreedte nodig heeft dan het kanaal heeft, zoals in werkelijke tijd functionerende video of 20 op computers gebaseerde multimedia. Het stelsel volgens de onderhavige uitvinding kan de rol van handbreedte-aanpasser vervullen.The parallel system of the invention is also applicable to obtain a more effective bandwidth from medium speed channels such as ISDN, CD-ROM and SCSI. Such a bandwidth adjustment scheme is shown in Fig. 29, while data from sources such as CD-ROM, Ethernet, SCSI (Small Computer Standard Interface) or other similar sources is fed to the decoding system 2901, which receives and decodes the data to provide an output signal. These channels are still faster than some current encoders. Often these channels are used to operate a data source that requires more bandwidth than the channel has, such as real-time video or computer-based multimedia. The system of the present invention can fulfill the role of hand width adjuster.
Het stelsel volgens de uitvinding is een uitstekende keuze voor een entropie-codeereenheid die deel uitmaakt van een in werkelijke tijd functionerend videostelsel zoals de HDTV (High Definition Tele-25 vision) standaard en de MPEG videostandaard. Een dergelijk stelsel is getoond in fig. 30. Volgens fig. 30 omvat het in werkelijke tijd functionerende videostelsel een decodeerstelsel 3001 dat de gecomprimeerde beelddata ontvangt. Het stelsel 3001 decodeert de data en geeft zijn uitgangssignalen af aan een met verlies werkende decoder 3002. De met 30 verlies werkende decoder 3002 kan de getransformeerde kleurconversie en subbemonsteringsdeel van HDTV of MPEG decoder zijn. De monitor 3003 kan een televisie-ontvanger of een video-monitor zijn.The system of the invention is an excellent choice for an entropy encoder that is part of a real-time video system such as the HDTV (High Definition Tele-25 vision) standard and the MPEG video standard. Such a system is shown in Fig. 30. In Fig. 30, the real-time video system includes a decoding system 3001 that receives the compressed image data. The system 3001 decodes the data and outputs its output to a lossy decoder 3002. The lossy decoder 3002 may be the transformed color conversion and sub-sampling portion of HDTV or MPEG decoder. The monitor 3003 can be a television receiver or a video monitor.
Alhoewel diverse wijzigingen en modificaties in de uitvinding mogelijk zi'jn zal het voor de deskundige op dit terrein duidelijk zijn 35 na het lezen van de bovenstaande beschrijving dat de bij wijze vein voorbeeld getoonde uitvoeringsvormen slechts een illustratie vormen waardoor de uitvinding op generlei wijze wordt beperkt. De verwijzingen naar details van de uitvinding beperken derhalve niet de omvang 10013)7Although various changes and modifications are possible in the invention, it will be apparent to those skilled in the art after reading the above description that the embodiments shown by way of example are merely illustrative of the invention in no way limiting the invention. . Therefore, the references to details of the invention do not limit the scope 10013) 7
Ill van de conclusies waarin- alleen die kenmerken worden opgesomd die als essentieel voor de uitvinding worden beschouwd.Ill of claims claiming only those features which are considered essential to the invention.
% 1001317% 1001317
Claims (101)
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US31611694A | 1994-09-30 | 1994-09-30 | |
US31611694 | 1994-09-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
NL1001317A1 NL1001317A1 (en) | 1996-04-01 |
NL1001317C2 true NL1001317C2 (en) | 1998-01-21 |
Family
ID=23227538
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
NL1001317A NL1001317C2 (en) | 1994-09-30 | 1995-09-29 | Method and device for encoding and decoding data. |
Country Status (10)
Country | Link |
---|---|
JP (1) | JP3272580B2 (en) |
KR (1) | KR100240372B1 (en) |
CN (1) | CN1136659C (en) |
CA (1) | CA2156889C (en) |
DE (1) | DE19536401B4 (en) |
FR (1) | FR2725330B1 (en) |
GB (1) | GB2293735B (en) |
NL (1) | NL1001317C2 (en) |
RU (1) | RU2117388C1 (en) |
TW (1) | TW410311B (en) |
Families Citing this family (54)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2311705B (en) * | 1995-08-31 | 1998-04-15 | Ricoh Kk | Method and apparatus for compressing arbitrary data |
US5654703A (en) * | 1996-06-17 | 1997-08-05 | Hewlett-Packard Company | Parallel data compression and decompression |
US5963716A (en) * | 1996-12-02 | 1999-10-05 | Hewlett-Packard Company | Bi-directional data stream decompression |
US6222468B1 (en) * | 1998-06-04 | 2001-04-24 | Ricoh Company, Ltd. | Adaptive coding with adaptive speed |
KR100992246B1 (en) | 2001-11-22 | 2010-11-05 | 파나소닉 주식회사 | Coding method and coding apparatus |
ATE456901T1 (en) * | 2002-04-08 | 2010-02-15 | Eighting Kk | NETWORK GAMING METHOD, NETWORK GAMING DEVICE AND SERVER |
US7555540B2 (en) * | 2003-06-25 | 2009-06-30 | Microsoft Corporation | Media foundation media processor |
US7395490B2 (en) * | 2004-07-21 | 2008-07-01 | Qualcomm Incorporated | LDPC decoding methods and apparatus |
US7346832B2 (en) * | 2004-07-21 | 2008-03-18 | Qualcomm Incorporated | LDPC encoding methods and apparatus |
US7991610B2 (en) | 2005-04-13 | 2011-08-02 | Fraunhofer-Gesellschaft Zur Foerderung Der Angewandten Forschung E.V. | Adaptive grouping of parameters for enhanced coding efficiency |
US7788106B2 (en) | 2005-04-13 | 2010-08-31 | Fraunhofer-Gesellschaft Zur Foerderung Der Angewandten Forschung E.V. | Entropy coding with compact codebooks |
KR100818268B1 (en) * | 2005-04-14 | 2008-04-02 | 삼성전자주식회사 | Apparatus and method for audio encoding/decoding with scalability |
US7716551B2 (en) * | 2005-12-07 | 2010-05-11 | Microsoft Corporation | Feedback and frame synchronization between media encoders and decoders |
KR100717587B1 (en) * | 2006-07-05 | 2007-05-15 | 주식회사 대우일렉트로닉스 | Method and apparatus for detecting optical information and optical information processing apparatus |
US8325819B2 (en) | 2006-10-12 | 2012-12-04 | Qualcomm Incorporated | Variable length coding table selection based on video block type for refinement coefficient coding |
US9319700B2 (en) | 2006-10-12 | 2016-04-19 | Qualcomm Incorporated | Refinement coefficient coding based on history of corresponding transform coefficient values |
US8599926B2 (en) | 2006-10-12 | 2013-12-03 | Qualcomm Incorporated | Combined run-length coding of refinement and significant coefficients in scalable video coding enhancement layers |
US8565314B2 (en) | 2006-10-12 | 2013-10-22 | Qualcomm Incorporated | Variable length coding table selection based on block type statistics for refinement coefficient coding |
CN101536484B (en) | 2006-11-14 | 2011-10-05 | 日本电信电话株式会社 | Image signal coding method and decoding method, information source coding method and decoding mehod and devices for them |
CN101247496B (en) * | 2007-02-13 | 2012-10-10 | 华晶科技股份有限公司 | Method for dynamically regulating image frame |
KR100842042B1 (en) | 2007-07-16 | 2008-06-30 | 충남대학교산학협력단 | A method for code-blocks encryption which enables dynamic decryption of encrypted executable code |
KR101226566B1 (en) * | 2008-07-11 | 2013-01-28 | 프라운호퍼 게젤샤프트 쭈르 푀르데룽 데어 안겐반텐 포르슝 에. 베. | Method for encoding a symbol, method for decoding a symbol, method for transmitting a symbol from a transmitter to a receiver, encoder, decoder and system for transmitting a symbol from a transmitter to a receiver |
EP3998776B1 (en) * | 2009-05-29 | 2023-08-30 | Mitsubishi Electric Corporation | Image encoding device, image decoding device, image encoding method, and image decoding method |
CN102055483B (en) * | 2009-10-29 | 2013-05-08 | 鸿富锦精密工业(深圳)有限公司 | Entropy decoding device |
KR101631944B1 (en) | 2009-10-30 | 2016-06-20 | 삼성전자주식회사 | Method and apparatus for entropy encoding and entropy decoding for accelarting video decoding |
EP2362657B1 (en) * | 2010-02-18 | 2013-04-24 | Research In Motion Limited | Parallel entropy coding and decoding methods and devices |
US8769686B2 (en) | 2010-02-26 | 2014-07-01 | Futurewei Technologies, Inc. | System and method for securing wireless transmissions |
EP2559166B1 (en) | 2010-04-13 | 2017-11-01 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. | Probability interval partioning encoder and decoder |
CA2799763A1 (en) * | 2010-07-13 | 2012-01-19 | Research In Motion Limited | Methods and devices for data compression using context-based coding order |
KR101676477B1 (en) * | 2010-07-21 | 2016-11-15 | 삼성전자주식회사 | Method and apparatus lossless encoding and decoding based on context |
US8650456B2 (en) * | 2010-09-08 | 2014-02-11 | Marvell World Trade Ltd. | Decoder based data recovery |
US8913666B2 (en) * | 2010-10-01 | 2014-12-16 | Qualcomm Incorporated | Entropy coding coefficients using a joint context model |
CN102457284B (en) * | 2010-10-29 | 2014-09-03 | 池勇潮 | Digital data compression/decompression method and system |
JP5570437B2 (en) * | 2011-01-12 | 2014-08-13 | 三菱電機株式会社 | Entropy encoding device, entropy decoding device, entropy encoding method, and entropy decoding method |
HUE028417T2 (en) | 2011-01-14 | 2016-12-28 | Ge Video Compression Llc | Entropy encoding and decoding scheme |
US8995523B2 (en) * | 2011-06-03 | 2015-03-31 | Qualcomm Incorporated | Memory efficient context modeling |
JP6130839B2 (en) * | 2011-10-06 | 2017-05-17 | フラウンホーファー−ゲゼルシャフト・ツール・フェルデルング・デル・アンゲヴァンテン・フォルシュング・アインゲトラーゲネル・フェライン | Entropy coding |
JP2013214832A (en) * | 2012-03-30 | 2013-10-17 | Fujitsu Ltd | Compression and decompression system, compression device, decompression device, compression and decompression method, and compression program and decompression program |
US9870502B2 (en) | 2012-09-28 | 2018-01-16 | Telefonaktiebolaget Lm Ericsson (Publ) | Apparatus for, a method of, and a network server for detecting data patterns in a data stream |
US9990202B2 (en) | 2013-06-28 | 2018-06-05 | Intel Corporation | Packed data element predication processors, methods, systems, and instructions |
US9516345B2 (en) | 2014-03-17 | 2016-12-06 | Qualcomm Incorporated | Systems and methods for low complexity forward transforms using mesh-based calculations |
US9432696B2 (en) | 2014-03-17 | 2016-08-30 | Qualcomm Incorporated | Systems and methods for low complexity forward transforms using zeroed-out coefficients |
CN105828083A (en) * | 2015-01-06 | 2016-08-03 | 中兴通讯股份有限公司 | Method and device for decoding data streams |
GB2539239B (en) * | 2015-06-10 | 2017-10-04 | Gurulogic Microsystems Oy | Encoders, decoders and methods utilizing mode symbols |
WO2017193281A1 (en) | 2016-05-10 | 2017-11-16 | 华为技术有限公司 | Data transmission method, data receiving method, transmission apparatus, and receiving apparatus |
WO2017197358A1 (en) * | 2016-05-13 | 2017-11-16 | Intel Corporation | Polar code construction and encoding |
JP7027706B2 (en) * | 2017-06-15 | 2022-03-02 | ソニーグループ株式会社 | Transmitter, receiver, transmission method, reception method and recording medium |
CN107623524B (en) * | 2017-07-01 | 2020-07-31 | 中山大学 | Hardware-based Huffman coding method and system |
CN111384963B (en) * | 2018-12-28 | 2022-07-12 | 上海寒武纪信息科技有限公司 | Data compression/decompression device and data decompression method |
US11184021B2 (en) | 2019-03-15 | 2021-11-23 | Samsung Electronics Co., Ltd. | Using predicates in conditional transcoder for column store |
TWI825305B (en) * | 2019-04-16 | 2023-12-11 | 南韓商三星電子股份有限公司 | Transcoder and method and article for transcoding |
CN110635807B (en) * | 2019-08-05 | 2022-10-21 | 湖南遥昇通信技术有限公司 | Data coding method and decoding method |
US11146433B2 (en) * | 2020-03-11 | 2021-10-12 | Nxp B.V. | High data rate transmission using minimum energy coding with ultra wide band modulation |
CN112383313B (en) * | 2020-10-10 | 2023-08-04 | 中科驭数(北京)科技有限公司 | Parallel data decoding device and method |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5097261A (en) * | 1989-11-22 | 1992-03-17 | International Business Machines Corporation | Data compression for recording on a record medium |
US5138315A (en) * | 1990-01-30 | 1992-08-11 | U.S. Philips Corporation | Arrangements for variable-length encoding and decoding of digital signals |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3394352A (en) * | 1965-07-22 | 1968-07-23 | Electronic Image Systems Corp | Method of and apparatus for code communication |
CA1291820C (en) * | 1986-09-15 | 1991-11-05 | William B. Pennebaker | Probability estimation based on decision history |
CA1291821C (en) * | 1986-09-15 | 1991-11-05 | Glen G. Langdon, Jr. | Arithmetic coding encoder and decoder system |
US5045852A (en) * | 1990-03-30 | 1991-09-03 | International Business Machines Corporation | Dynamic model selection during data compression |
KR950000286B1 (en) * | 1992-05-28 | 1995-01-12 | 삼성전자 주식회사 | Coding device and method for fax |
US5475388A (en) * | 1992-08-17 | 1995-12-12 | Ricoh Corporation | Method and apparatus for using finite state machines to perform channel modulation and error correction and entropy coding |
US5272478A (en) * | 1992-08-17 | 1993-12-21 | Ricoh Corporation | Method and apparatus for entropy coding |
GB2272612B (en) * | 1992-11-06 | 1996-05-01 | Roke Manor Research | Improvements in or relating to ATM signal processors |
KR0134166B1 (en) * | 1992-11-24 | 1998-04-22 | 모리시타 요이찌 | Video signal recording apparatus and method thereof |
US5381145A (en) * | 1993-02-10 | 1995-01-10 | Ricoh Corporation | Method and apparatus for parallel decoding and encoding of data |
US5583500A (en) * | 1993-02-10 | 1996-12-10 | Ricoh Corporation | Method and apparatus for parallel encoding and decoding of data |
US5414423A (en) * | 1993-04-29 | 1995-05-09 | International Business Machines Corporation | Stabilization of probability estimates by conditioning on prior decisions of a given context |
-
1995
- 1995-08-24 CA CA002156889A patent/CA2156889C/en not_active Expired - Fee Related
- 1995-09-07 TW TW084109370A patent/TW410311B/en not_active IP Right Cessation
- 1995-09-07 GB GB9518375A patent/GB2293735B/en not_active Expired - Fee Related
- 1995-09-29 FR FR9511521A patent/FR2725330B1/en not_active Expired - Fee Related
- 1995-09-29 NL NL1001317A patent/NL1001317C2/en not_active IP Right Cessation
- 1995-09-29 DE DE19536401A patent/DE19536401B4/en not_active Expired - Fee Related
- 1995-09-29 JP JP25379295A patent/JP3272580B2/en not_active Expired - Fee Related
- 1995-09-29 RU RU95116587A patent/RU2117388C1/en not_active IP Right Cessation
- 1995-09-29 CN CNB951172328A patent/CN1136659C/en not_active Expired - Fee Related
- 1995-09-30 KR KR1019950033942A patent/KR100240372B1/en not_active IP Right Cessation
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5097261A (en) * | 1989-11-22 | 1992-03-17 | International Business Machines Corporation | Data compression for recording on a record medium |
US5138315A (en) * | 1990-01-30 | 1992-08-11 | U.S. Philips Corporation | Arrangements for variable-length encoding and decoding of digital signals |
Non-Patent Citations (1)
Title |
---|
BIOLEK ET AL: "very high speed entropy coding", PROCEEDINGS ICIP-94 : INT. CONF. ON IMAGE PROCESSING, vol. 3, October 1994 (1994-10-01), NEW YORK,USA, pages 625 - 629, XP002038678 * |
Also Published As
Publication number | Publication date |
---|---|
CN1133512A (en) | 1996-10-16 |
NL1001317A1 (en) | 1996-04-01 |
JPH08116266A (en) | 1996-05-07 |
CA2156889C (en) | 1999-11-02 |
CA2156889A1 (en) | 1996-03-31 |
CN1136659C (en) | 2004-01-28 |
GB2293735A (en) | 1996-04-03 |
FR2725330A1 (en) | 1996-04-05 |
FR2725330B1 (en) | 1999-01-22 |
GB9518375D0 (en) | 1995-11-08 |
DE19536401A1 (en) | 1996-04-04 |
TW410311B (en) | 2000-11-01 |
KR960012741A (en) | 1996-04-20 |
DE19536401B4 (en) | 2006-07-20 |
RU2117388C1 (en) | 1998-08-10 |
JP3272580B2 (en) | 2002-04-08 |
GB2293735B (en) | 1997-10-22 |
KR100240372B1 (en) | 2000-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
NL1001317C2 (en) | Method and device for encoding and decoding data. | |
US5717394A (en) | Method and apparatus for encoding and decoding data | |
US6819271B2 (en) | Parallel compression and decompression system and method having multiple parallel compression and decompression engines | |
US6285790B1 (en) | Data compression for indexed color image data | |
US5381145A (en) | Method and apparatus for parallel decoding and encoding of data | |
JPH06348492A (en) | Data pipeline device and data encoding method | |
US7129860B2 (en) | System and method for performing scalable embedded parallel data decompression | |
US6378030B1 (en) | Method and apparatus for processing video data | |
CN114556956A (en) | Low latency encoding using bypass sub-streams and entropy encoded sub-streams | |
US20010054131A1 (en) | System and method for perfoming scalable embedded parallel data compression | |
US4563671A (en) | Coding technique | |
GB2306279A (en) | Apparatus for decoding data | |
US6865668B1 (en) | Variable-length, high-speed asynchronous decoder circuit | |
KR100304511B1 (en) | Video restoration and decoding system | |
EP0895166A2 (en) | Method and apparatus for interfacing with ram | |
JPH0865171A (en) | Data expansion device, data expansion method, decoder, decoding method, real time video equipment, encoder and entropy decoder | |
JP3032161B2 (en) | Memory interface circuit of variable length decoder | |
US20040028140A1 (en) | Speeding up variable length code decoding on general purpose processors | |
CA2273144C (en) | Apparatus and system for decoding data | |
EP0629050B1 (en) | High-throughput variable length decoder and apparatus comprising such decoder | |
JP2021129143A (en) | Decoding device | |
JP3293382B2 (en) | Data compression device and data decompression device | |
CN118400094A (en) | Ciphertext computing accelerator, ciphertext computing instruction processing method, ciphertext computing accelerator device and ciphertext computing instruction processing medium | |
KR100192960B1 (en) | Dma interface having channel link function | |
JP2000011638A (en) | Semiconductor storage and memory access method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AD1A | A request for search or an international type search has been filed | ||
PD2B | A search report has been drawn up | ||
VD1 | Lapsed due to non-payment of the annual fee |
Effective date: 20080401 |