JP2008514095A - 可変長エンコーダ/デコーダのためのプログラム可能データプロセッサ - Google Patents

可変長エンコーダ/デコーダのためのプログラム可能データプロセッサ Download PDF

Info

Publication number
JP2008514095A
JP2008514095A JP2007531935A JP2007531935A JP2008514095A JP 2008514095 A JP2008514095 A JP 2008514095A JP 2007531935 A JP2007531935 A JP 2007531935A JP 2007531935 A JP2007531935 A JP 2007531935A JP 2008514095 A JP2008514095 A JP 2008514095A
Authority
JP
Japan
Prior art keywords
instruction
length
operand
bit
bit string
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2007531935A
Other languages
English (en)
Inventor
メインズ,コルネリス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips NV
Koninklijke Philips Electronics NV
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Koninklijke Philips NV, Koninklijke Philips Electronics NV filed Critical Koninklijke Philips NV
Publication of JP2008514095A publication Critical patent/JP2008514095A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods 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
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods 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/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding

Abstract

データ処理回路は、新しいタイプの命令を有する命令セットをもつプログラム可能プロセッサ(12a、b)を有する。この命令は、ビット列を指す第一のオペランドと、そのビット列の中の位置を指す第二のオペランドとを有する。プログラム可能プロセッサ(12a、b)は、結果として前記ビット列中の前記位置から、前記位置からのビット列が所定のビットパターンから逸脱するまでに生起するビットの数のカウントを示すコードを返すことによって、このタイプの命令を実行するよう構成されている。この命令は、可変長復号および/または復号を実行するプログラムにおける使用のためにとりわけ有用である。

Description

本発明は、プログラム可能プロセッサを有するデータ処理回路に関する。本発明はまた、そのようなプログラム可能プロセッサを使う可変長復号を実行する方法および可変長復号を実行するようプログラムされたプログラム可能プロセッサに関する。
テキサス・インスツルメンツによって発表された“Application report SPRA805“(2002年6月)における“Variable Length Decoding on the TMS320C6200 DSP platform”との論題において、プログラム可能信号プロセッサ上での可変長復号の実装が開示されている。
可変長エンコードは典型的には、一般的なMPEGフォーマットにおけるビデオデータのような、データの圧縮されたエンコードのために使用される。可変長エンコードのよく知られた形態は、いわゆるハフマン符号化である。可変長符号においては、符号化される異なる数値は互いに異なるビット数の符号語を使って符号化されるので、最も頻繁に現れる数値が最も短い符号語を使って符号化される。これにより符号化されたデータの保存および/または伝送の際の必要な記憶および/または必要な伝送帯域が削減される。
数値のストリームをエンコードするとき、一連のそのような符号語が連結されてビット列をなす。可変長符号語のそれぞれは、その符号語より長い他のどんな符号語の先頭にも生じないビット値の系列からなる。結果として、符号語の長さは、符号語の先頭からのビット列におけるビットから決定できる。原理的には、復号は、表探索機構によって実装できる。符号語において生じうる最大数のビットを取り、そのビットを表におけるアドレスとして使って、その符号語の符号語長と復号された語とを探索する(実際の符号語が最大長より短かった場合には、表中でその符号語のビットで始まる諸アドレスにあるあらゆる項目が同じ符号語長および復号された符号語を含む)。
実際上の符号については、Application report SPRA805に記載されているように、より小さな探索表を使うことができる。この目的のため、符号語の始まりからの先頭の0または先頭の1の数のカウントを使って、探索表アドレスが形成される。これは、実際上の符号は一般に同じ長さの符号語については同じヘッダ部分を使うという事実に基づいている(ヘッダ部分は論理的な0または1からなる)。この場合、探索動作は、このカウントから構成される探索アドレスを、符号語中、ヘッダ部分から逸脱する最初のビットに続く位置におけるビット値の数と組み合わせて使う。カウントは、先頭の1または先頭の0の数よりも少ないビットで表せるので、これは探索アドレス空間を減らすことになる。
可変長復号にはさまざまな実装が存在する。もちろん、復号過程は、復号機能のみを実行するよう設計された回路を使って実装できるが、典型的には、可変長復号以外の他の機能(たとえばMPEG復号の他の部分)を実行するためのプログラムされた命令をも実行する、好適にプログラムされたプロセッサが使用される。プログラムされたプロセッサを使用することの利点は、こうした他の機能に加えて可変長復号を実行するために追加的な回路がほとんど、あるいは全く必要とされないことである。
Application report SPRA805は、可変長復号を加速するための「NORM」命令の使用を記載している。NORM命令は、浮動小数点演算の背景で知られている。そこでは、この命令は、ある数の先頭における冗長な符号ビット(一連の1または0)のカウントを決定するために使われる。可変長復号の背景では、この命令は、符号語長および復号された語を取得するための探索アドレスを形成するために使うことができる。
可変長復号プログラムは、TMS320C62000 DSPをして、各時に、一連の符号語を含むビット列の次の部分をオペランドレジスタに移させる。そうした部分は、それらが各時に次の符号語のビットで始まるように選択される。プログラムはNORM命令を使うことで、オペランドの先頭からの一連の0または1のカウントを取得し、そのカウントを使って該プログラムは探索表におけるアドレスを形成する。このアドレスを用いた探索により、該プログラムは符号語の長さを決定し、符号語の長さから、ビット列における次の符号語の先頭が決定される。次いで、次の符号語から始まる新たなオペランドがビット列から形成され、その後、前記処理が繰り返される。
TMS320C62000のようなDSP(Digital Signal Processor[デジタル信号プロセッサ])では、プログラムからの命令は、実行を加速するために並列に実行できる。しかし、可変長エンコードの場合には、これは限られた程度までしか使えない。次の符号語が処理できる前にその都度符号語の長さを決定しなければならないからである。改良の余地があることが見出されている。
可変長復号の効率的なプログラミングをサポートするプロセッサを提供することが本発明の一つの目的である。
可変長復号を効率的に実行するようプログラムされたプロセッサを提供することが本発明の一つの目的である。
可変長復号の効率的な実行を行う方法を提供することが本発明の一つの目的である。
本発明に基づくプロセッサが請求項に述べられている。本発明によれば、プロセッサは、その命令セットに、SNORMという命令を含むよう構成される。このSNORM命令は、ビット列を含むビット列オペランドと、そのビット列内での位置を示す位置オペランドとを有する。本プロセッサは、ビット列において指示された位置から、当該ビット列がすべて論理的な1またはすべて論理的な0のパターンといった所定のパターンから逸脱するその後の最初のビット位置になるまでのビット数のカウントを表す長さコードを返す。
よく知られているように、プロセッサの命令セットは、どんなタイプの機能回路がプロセッサ内に含められる必要があるかを当業者に知らせる。命令セットは、プロセッサがプログラムから実行できる異なる命令種別の集合である。通常、命令セットの一部となるよく知られた汎用命令種別としては、ADD、SHIFT、LOAD、STOREなどのような命令が含まれる。本発明によれば、命令セットにSNORM命令を含むプロセッサが提供されるのである。
プロセッサが可変長復号を実行するようプログラムされるとき、SNORM命令を使うことで、符号語の先頭部分の長さコードを得る際に、まず次の符号語から始まるビット列の部分をもつオペランドを形成するための別個の命令を必要とすることなしにできる。その代わり、既存のビット列オペランドにおける符号語の開始を示す位置オペランドが使われ、そのビット列オペランドの選択可能な内部部分についての長さコードが取得される。一連の符号語について、更新される必要があるのは位置オペランドだけである。ビット列のほうは、符号語が、ビット列オペランドにおいてビット列の境界をまたぐまで更新される必要はない。
好ましくは、ビットを数え始める位置を決定するのは位置オペランドのうちある所定数のビットだけで、位置オペランドのそれより上位のビットは無視される。好ましくは、使用される下位ビットの数は、ビット列オペランドのビット長に対応する。このようにして、位置オペランドを提供するのに使われるレジスタは、連結された可変長符号語を含むビットストリーム内における異なる語を指すより上位のビットを含みうる。
好ましくは、SNORM命令は、ビット列の相続く部分を含むビット列オペランドを含む少なくとも二つの別個に選択可能なレジスタを参照する。この場合、プロセッサは好ましくは、符号語の先頭部分の、ビット列が所定のパターンから逸脱するその後の最初の位置までの長さコードを取得するよう構成され、前記パターンが前記ビット列オペランドの一つから別のビット列オペランドに続くときには二つ以上のビット列オペランドから先頭部分における位置を数える。
また、好ましくは、SNORM命令は、ビット列オペランドのうちからの、ビット列が所定のパターンから逸脱する前記最初の位置に対する所定の相対位置から(典型的には前記最初の位置から)始まるビットを含む追加的な結果を返す。可変長復号プログラムは、好ましくは、この追加的な結果を前記長さコードとともに使って探索表アドレスを形成する。あるさらなる実施形態では、プロセッサは、SNORM命令の実行によって、長さコードと追加的結果の所定のビット数との組み合わせが探索表アドレスとして返されるように構成される(この場合、プロセッサは、SNORM命令に反応して長さコードと追加的結果のための別個の結果を返す必要はない)。これは、可変長復号のために実行される必要のある命令数を減らすことになる。しかしながら、SNORM命令が長さコードと追加的結果とのために別個の結果出力を使うことは、復号できる異なる可変長符号に関して本プロセッサがより柔軟になるという利点がある。
これらのことを含む本発明のさまざまな目的および有利な側面について、図面を援用して記載される限定的でない例を使って解説する。
図1は、プログラム可能なプロセッサ回路の例を示している。この回路は命令発行ユニット10、機能ユニット12a、bおよびレジスタファイル14を含む。命令発行ユニットは、コマンドコードおよびレジスタ選択コードを発するための出力120をもつ。レジスタファイル14は、レジスタ選択コードを受信するための入力、選択されたレジスタからのオペランドデータを出力するための出力122および選択されたレジスタに書き込まれる必要のある結果データを受信するための入力124をもつ。機能ユニット12a、bはコマンドコードおよびオペランドデータを受信するための入力ならびに演算結果を出力するための出力をもつ。
動作においては、命令メモリおよびプログラムカウンタ(図示せず)を含んでいることのできる命令発行ユニット10は、逐次に実行される必要のあるプログラムの諸命令を生成する。命令発行ユニットは命令から諸コマンドを導出し、該コマンドからの演算コードを機能ユニット12a、bに、レジスタ選択コードをレジスタファイル14に加える。レジスタ選択コードは、コマンドから導出されるオペランドレジスタ選択コードと、コマンドから導出される結果レジスタ選択コードとを含む。オペランドレジスタ選択コードに反応して、レジスタファイル14は、該オペランドレジスタ選択コードによって選択されているレジスタからオペランドデータを取得し、このデータを機能ユニット12a、bに加える。演算コードは、機能ユニット12a、bによって実行される必要のある演算を選択する。機能ユニット12a、bは、演算コードの制御のもとで、選択された演算を前記オペランドデータを使って実行し、結果データを生成する。レジスタファイル14は機能ユニットから結果データを受信し、結果データを結果レジスタ選択コードによって同定されるレジスタに記憶する。
プログラム可能なプロセッサ回路の個別的な例が示されているが、本発明はこの例に限定されないことは理解しておくべきである。たとえば、レジスタファイル14は、そこからオペランドデータを読み込むことのできる、あるいはそこに結果データを保存できる、複数のレジスタファイルであってもよい。さらに、機能ユニット12a、bは、それぞれ三つ、二つのオペランド入力と、それぞれ二つ、一つの結果出力をもつものとして示されているが、オペランド入力および/または結果出力のこれ以外の数も可能であることは理解しておくべきである。さらに、タイミングについては何ら詳細を示していないが、典型的にはパイプライン処理が使われるであろうことは理解しておくべきである。それにより、ある命令からのオペランドレジスタ選択コードがレジスタファイル14に加えられるのは、機能ユニット12a、bが前の命令によって選択された演算を実行している間になされ、結果レジスタ選択コードはのちになってはじめて加えられうるということになる。しかし、本発明から外れることなく、他の形のタイミングを使うこともできる。
さらに、使用する機能ユニット12a、bはいくつでもよい。たとえば機能ユニット一つだけでもよいし、より多数でもよい。以下では、プログラム可能プロセッサのプログラムは一連の逐次的な命令として記述するが、好ましくは複数の機能ユニット12a、bが使用され、逐次的命令のうちの異なるものが、命令間のデータ依存性によって許される限り、異なる処理ユニット12a、bによって並列で実行できるようにされることは理解しておくべきである。プロセッサに含まれる必要のある機能回路は、プロセッサ回路の命令セットによって決まる。命令セットは、プロセッサがプログラムからのコマンドとして実行できる命令(ここでは「コマンド」とも呼ばれる)の異なる種別の集合である。(ここでの用法では、命令(あるいは同じことだがコマンド)は、機械実行可能なプログラムの不可分な「原子」であり、この意味での命令(あるいはコマンド)は、実行のためにプロセッサに発することのできる下位の命令部分に分割することはできない)。プログラムにおける各命令の命令種別は通例、命令の演算コードフィールドの内容によって表される。これはプロセッサがその演算を制御するために使用するものである。通常、命令セットの一部となるよく知られた汎用命令種別としては、ADD、SHIFT、LOAD、STOREなどのような命令が含まれる。プログラム可能プロセッサにおいては、プログラム中の任意の点において、命令セットからの諸命令は互いに代替として使うことができる。本発明によれば、命令セットにSNORM命令を含むプロセッサが提供される。この命令に対するプロセッサの応答は以下に述べる。
本発明のある側面によれば、機能ユニットの少なくとも一つ12aが、記号的に
SNORM R1, R2, R3, R4, R5
と記されるコマンドをサポートするよう設計される。
このコマンドは、符号R1、R2、R3によって同定される3つのオペランドをもつ。R1、R2、R3はその3つのオペランドが記憶されているレジスタを参照している。このコマンドは、二つの結果を生じる。レジスタ参照R4、R5は、結果が記憶されるべきレジスタへの参照を表している。典型的には、命令メモリに記憶されるコマンドは、命令(SNORM)、オペランドレジスタアドレス(R1〜3)および結果レジスタアドレス(R4〜5)を同定するビットからなる各フィールドを含む。
SNORMコマンドを含むプログラムが実行されると、命令発行ユニット10は、このコマンドを表す命令を取得し(これは並列に取得された複数の命令の一つであることもできる)、応答としてSNORM命令を同定する演算コードを機能ユニット12aに加える。また、命令発行ユニット10は、命令において同定されているレジスタR1〜5に対応するコードをレジスタファイル14に加える。
機能ユニット12aの回路は、機能ユニット12aがSNORM演算コードに反応して長さコードを生成するよう構成されている。長さコードとは、最初の2つのオペランド中のビット列の連結において、第三のオペランドによって指示される位置から始まって互いに同じビット値をもつ一連のビットの数のカウントを表すものである。さらに、命令機能ユニット12aは前記連結のシフトされたバージョンを生じる。シフトとは、前記第三のオペランドに前記一連のビット数のカウントを加えたものに等しい数のビット位置だけシフトしたことを表す。
解説の目的のため、ある例では、オペランドは8ビットの長さをもつことができる。この場合、最初の2つのオペランド(R1、R2で示される)はたとえばビット列
0010 1011 および 1110 0101
を含みうる。
実際上は、各オペランド中にはずっと多数のビットが使われることが好ましいことは理解しておくべきである。たとえば各オペランドに16もしくは32ビットまたは64ビットである。8ビットのオペランドを使ったのは単に解説のためである。上記の例のオペランドを用いると、連結されたビット列は
0010101111100101
となる。
ここで、もし第三のオペランド(R3によって示される)が値6を有していれば、数5という長さコードが(レジスタR4に)返されるであろう。これがこの連結において6番目のビット位置から始まる論理的な1の数である(位置番号は連結における左端の位置における0から始まり、左から右に向けて増加する)。上記の例では、ビット位置は左から始めて、すなわち最上位ビットから数えられることになるが、ビット位置はその代わりに右から、すなわち最下位ビット位置から数えてもよいことは理解しておくべきである。シフトされた出力(レジスタR5中)は値
0010 1000
をもつ。
これらは前記の連結されたビット列の最後の5つのビット値で、右端に3つの0のビット値を代入したものである。
好ましくは、前記の位置が1オペランドの長さを超えることがないよう、この演算の実行に際して、第三のオペランドの上位ビットは無視される。これは、この第三のオペランドを第一のオペランドの長さで割った余りを使うことと同等である(今の例では、第三のオペランドを8で割った余り)。
SNORM命令のオペランドと効果の機能的な記述から、当業者は命令セットにこの命令をもつプロセッサを実装するために使用しうる回路を決定できるであろう。そのようなプロセッサの例について述べる。
図2は、SNORM命令を実行するための演算コードが機能ユニット12aに加えられるときに作動させられる機能ユニット12aの部分の実施例を示している。この部分は第一のバレルシフタ20、符号長計算ユニット22および第二のバレルシフタ24を含んでいる。第一のバレルシフタ20は、機能ユニット12aの2つのオペランドデータ入力に結合されたシフトデータ入力をもつ。これにより、レジスタ参照のうちの二つR1、R2によって参照されているオペランドデータを受け取る。第一のバレルシフタ20は、レジスタ参照のうちの第三R3によって参照されているレジスタファイル14の第三のオペランドデータ入力に結合されたシフト制御入力をもつ。第一のバレルシフタ20は、符号長計算ユニット22の入力に結合された出力をもつ。符号長計算ユニット22は、機能ユニット12aの結果のための第一の出力と、第二のバレルシフタ24のシフト制御入力とに結合された出力をもつ。第二のバレルシフタ24は、第一のバレルシフタ20の出力に結合されたシフトデータ入力と、機能ユニット12aの結果のための第二の出力に結合された出力とをもつ。
示されているのが機能ユニット12aの一部だけであることは理解しておくべきである。実際上は、機能ユニットは他の演算コードに反応して他の演算を実行するためのさらなる回路を含みうるし、あるいはバレルシフタ20、24および/または符号長計算ユニット22は他の演算も実行できるより大きな諸回路の一部であってもよい。さらに、さまざまなデータの供給元および/または供給先を選択するために多重化回路が存在していてもよい。さらに、受け取られたコマンドに依存して、機能ユニットの選択された部分を作動させ、多重化回路を制御するために、復号回路が存在していてもよい。明確のため、SNORM命令の実行に関わる回路部分しか示していない。
第一のバレルシフタ20は、第一および第二のオペランドデータR1、R2を連結したもののビットをシフトさせたバージョンを含んでいる出力ビット列を生成するよう構築されている。上で述べた8ビットオペランドの例では、バレルシフタ20のシフトデータ入力は次のオペランドデータビット列を受け取ることになる。
0010 1011 および 1110 0101
シフトの量は第三のオペランドデータR3によって選択される。今の例では、シフト制御入力は値6を受け取り、第一のバレルシフタ20は出力列
1111 1001 0100 0000
を生成する。
ここで、第一のバレルシフタは連結を左に6位置シフトさせており、右端に6つの0が加えられている。バレルシフタ回路そのものは既知なので、詳細な回路実装は示さない。使用される特定の実装は本発明には重要ではない。
好ましくは、シフトの量が1オペランドの長さを超えることがないよう、この演算の実行に際しては、第三のオペランドの上位ビットは無視される。これは、この第三のオペランドを第一のオペランドの長さで(たとえば16、32または64で)割った余りを使うことと同等である。
符号長計算ユニット22は、その入力列におけるビット列の連結において、入力における最初の位置から始まって互いに同じビット値をもつ一連のビットの数のカウントを決定する。今の例ではこれは5というカウントを与える。入力には5つの相続く論理的な1のビットがあるからである。
使用される符号長計算ユニット22の特定の実装は本発明には重要ではない。実装例は、浮動小数点演算回路に見出すことができる。そこでは、長さ計算を使うことで、算術演算の結果が規格化される(すなわち、符号のビットの最後から始まる結果の一部が所定の位置にシフトされる)。
第二のバレルシフタ24は第一のバレルシフタ20の出力ビット列を、ある追加的なビット位置の数だけ左にシフトさせる。追加的な位置の数は、符号長計算ユニット22によって出力されるカウントによって制御される。この演算の結果の左端の語だけが、機能ユニット12aの出力においてレジスタファイル14に出力される。今の例では、結果は次のようになる。
0010 1000
この例では、語長は8ビットであるが、もちろん、16、32または64といったより大きな語長のオペランドおよび結果が使われる場合には、より多くのビットが出力されうる。
もちろん、同じ効果を実現するために機能ユニット12aの他の実装を使うこともできる。たとえば、第二のバレルシフタ24および符号長計算ユニット22の機能は、組み合わされた回路によって実行されてもよいし、および/または第三のオペランドの制御のもとで機能ユニット12aのオペランドデータに対して直接的に符号長計算ユニット22の機能を実行する回路を使用してもよい。
SNORM命令は、一連の可変長符号語の復号ができる速さを向上させるために使用できる。次は、復号を実行するために使うことのできるプログラムの例である。

bptr=0;
wptr=0;
word0=buf[wptr];
word1=buf[wptr+1];
while(wptr<end)
{ nrm,sucbits=OP_SNORM(word0,word1,bptr);
index=getIndex(nrm,sucbits);
len=lenTable[index];
dec=codeTable[index];
bptr=bptr+len;
wptr=bptr>>5;
word0=buf[wptr];
word1=buf[wptr+1];
}

このプログラムは、よく知られたC言語の文にほぼ一致する擬似コード文で表している(この言語では、[ ]が配列の添え字を表し、>>が右シフトを表す)。理解されるであろうように、C言語を選んだのは単に対応する一連の機械命令を記述する上での明確のためである。OP_SNORMの機能呼び出しをもつ文は、上記で説明したSNORM命令の実行を指している。
プログラム中、bufはメモリ位置の配列を表しており、ここに、可変長符号からの連結された諸符号語を含むあるビットストリームをなす一連の語(32ビット値)が保存されている。ポインタ変数bptrおよびwptrが使われている。wptrは、現在の符号語の始まりを含む、bufからの語の位置を示す。変数word0およびword1(これらの値はレジスタファイル14においてそれぞれのレジスタ内に保持されている)はそれぞれ、bufからのこの語のコピーおよびbufからの次の語のコピーを含んでいる。bptrの下位ビットは変数word0における現在の符号語の最初のビットの位置を示す。bptrの上位ビットはwptrに対応する。
前記プログラムは明確のためにデータを保持する名前の付いた変数を使用しているが、これらの名前が典型的には、対応するデータが保存されているレジスタを表すことは理解しておくべきである。
前記プログラムは直列の命令として表現されているが、プロセッサが複数の機能ユニットおよび該複数に並列に命令を発することのできる命令発行ユニットを含んでいるときは、データの依存関係によって課される制約の範囲内で可能な限り、前記プログラムの命令のうち異なるものが異なる機能ユニットによって並列に実行されてもよいことは強調しておくべきであろう。また、命令の実行のシーケンスは、データの依存関係と矛盾しないならば、前記プログラムにおけるシーケンスとは異なっていてもよい。
whileループは可変長復号を実行する。しかし、明確のため、復号された語を使用する命令(復号された語を配列に保存する命令など)はループからは省かれている。ループの最初の命令において、SNORM命令が実行される。これは、word0とword1の連結においてbptrによって示される位置からの互いに等しいビット値の数を表す長さコードを決定することを含む。好ましい実施形態では、機能ユニットは、32ビットオペランドが使用される場合ならこの目的のためにbptrの5つの下位ビットだけを使用する(オペランドの長さがより長かったり短かったりする場合にはビット数も多くなったり少なかったりする)。もちろん、これらのビットを、機能ユニットがそうしていなければ、プログラム中の命令によってbptrからマスクで取り出してもよいし、あるいは値が決して31を超えない別個のポインタを使用してもよい。
結果として得られる長さコードは、変数nrmで表されるレジスタに記憶される。さらに、word0およびword1の連結は、nrm+(bprtを32で割った余り)ビットだけシフトされ、その結果が変数sucbitsによって表されるレジスタに記憶される。
whileループの第二の命令では、長さコードおよび変数sucbitsの内容の始まりから添え字の値が形成される。この添え字の値は、長さ表lenTableから符号語の長さを取得し、符号表codeTableから復号された符号語を取得するための添え字として使用される。次に、変数bptrは取得された長さを足してインクリメントされる。また、bptrの新しい値のためのword0およびword1の値が取得される。その後、ループは反復される。
本プログラムは単にSNORM演算の使用を解説するはたらきをするものであることは強調しておくべきであろう。SNORM命令について多くの代替的なバージョンのプログラムが可能である。
記載されている好ましい実施形態では、機能ユニット12aによるSNORM命令の実行は、bptrによってポイントされるビット位置から異なるビット値に遭遇する最初の次のビット位置までの互いに同じビット値をもつ一連のビットの数のカウントを生じる。つまり、一続きの論理的な0または論理的な1のビット数がカウントされるのである。しかしながら、本発明はこの実施形態には限定されない。別の実施形態では、機能ユニット12aは一続きの論理的な1のみのカウントを生じる。さらに別の実施形態では、機能ユニット12aは一続きの論理的な0のみをカウントする。別の実施形態では、機能ユニット12aは、bptrによって選択された位置から、所定のシーケンスから逸脱する最初のビット値が見出されるまでのビット位置の数をカウントする。機能ユニットの好適な実装を用いれば、前記の所定のシーケンスは任意の所定のシーケンスであることができ、単に一連の論理的な1や一連の論理的な0でなくてもよい。そのような別の一連の値を使うことは、その符号語のうちあとに続くのが高々ある所定のビット数であることを示すためにそのようなシーケンスからの逸脱が使われる可変長符号が使用される場合に有用でありうる。したがって、本発明は、すべて1またはすべて0の所定のシーケンスについてのビット位置のカウントには限定されない。
好ましくは、長さコードnrmが返すことのできる最大長は、高々可変長符号語の最大長に限定される。所定数を超える前記所定のパターンに従った一連のビットに遭遇する場合には、所定の最大長符号が返される。
好ましくは、長さコードnrmは、プロセッサがあらゆる数について使う通常の数表現と同じ数表現によって長さを表す。しかし、これは必須ではない。コードを使うのは表lenTable、codeTableにおいて使用するための添え字を形成するためだけなので、前記プログラム例のためには、異なる長さを区別する任意のコードを使うことができる。前記の表の項目は、任意のコードを受け容れるために再配列されてもよい。
しかし、いかなるコードが使われるにしろ、長さコードnrmのビット数Nは、好ましくは長さコードが表す最大長Lよりも著しく短い。このようにして、長さコードnrmを、復号された語および符号語長の表探索のための添え字の一部として使用することは、必要とされる探索表の大きさを著しく縮小する。好ましくは、必要とされる探索表の大きさが最小になるよう、長さコードLは、Lが2のN乗に等しいようエンコードされる。たとえば最大16ビットの長さを表すためには、たった4ビットの長さコードで十分である。
本発明がここまでに述べてきたSNORM命令に限定されないことは理解しておくべきである。たとえば、長さコードnrmを生成するSNORM命令の代わりに、添え字の値を直接生成する命令を使ってもよい。あるいはまた、命令セットのうちに添え字の値を計算するための追加的な命令を含めてもよい。ある実施形態では、添え字の値は長さコードnrmのあとに結果変数sucbitsのある所定の第一のビット数を連結することによって形成されうる。例としては、sucbitsの前記所定数は4であり、添え字の値の計算は(Cのコードで)
index=(nrm<<4)|(sucbits>>(32-4))
に対応する。
もちろん、添え字の値を計算する他の方法を使用してもよい。この例は、異なる符号語を区別するために、所定のビット列からの最初の逸脱後の符号語からの高々4つの追加ビットで十分であるような可変長符号が使われていることを想定している。必要とされる追加ビットがより少なかったりより多かったりする場合、あるいはnrmおよびsucbitsからの情報が別の方法で組み合わされうる場合には、異なる添え字の値を使うこともありうる。
ある実施形態では、命令セットの中に、添え字の値を計算するための命令が含められる。この命令は記号的に
INDX R1, R2, R3, R4
と表すことができる。
ここで、R1〜3は、nrm、sucbitsおよび添え字の値に含められる必要のあるR2からのいくつか(たとえば4)のビットを含むオペランドレジスタを参照している。添え字の値はレジスタR4に書き込まれる。任意的に、第三のオペランドは省略してもよい(たとえば、デフォルト数を使う場合)。
図3は、SNORM命令の結果として出力される添え字の値を出力するよう構成された機能ユニットの例を示している。合成回路30は、符号長計算ユニット22および第二のバレルシフタ24の出力からの長さコードからの添え字の結果を形成するために追加されている。合成回路30が非常に単純であることは理解しておくべきであろう。これは単に、符号長計算ユニット22と第二のバレルシフタ24の出力の所定のビット線を結果出力に接続することに関わるものである。
この機能ユニットを使えば、レジスタファイル14への結果出力接続は一つしか必要なく、命令発行ユニット10からのコマンドは一つの結果レジスタをアドレス指定するだけでよい。合成回路30は、当該機能ユニットの残りの部分のいかなる実装とも容易に組み合わせることができることは理解されるであろう。しかしながら、不都合な点は、当該機能ユニットが可変長符号の特定のクラスに固有になる(結果を形成するのに使用されるバレルシフタの出力の前記所定のビット数のため)ことである。
別の実施形態では、結果として生成されるのが長さ符号nrmだけであるという異なるSNORM命令が使用される。この実施形態の実装では、前記第二のバレルシフタおよびその結果出力は省略してもよい。この場合、前記プログラムは好ましくは、word0、word1、nrmおよびbptrから添え字の値を計算するための一つまたは複数の命令を含む。あるさらなる実施形態では、この目的のためのさらなる専用の命令をサポートする機能ユニットが配置される。第一の実施形態では、このさらなる命令に反応して実行される機能は、たとえば、第一のオペランドおよび第二のオペランド(word0およびword1)を連結したもの(concatenation)から、ある第三のオペランドによって示されるビット位置から始まるある所定の数の相続くビットを選択することを含む。そのような機能の結果は
concatenation(R1,R2)<<R3
に対応する。
この実施形態では、前記第三のオペランドは、bptrとnrmを足し合わせることによって計算される。結果は、先に述べたsucbitsの結果と同等である。
別の実施形態では、専用命令において、word0およびword1に加えてnrmとbptrの両方がオペランドとして使用される。この実施形態では、前記命令の実行は、nrmとbptrを足し合わせてシフト量を決定することに関わり、nrmを使うことでシフト結果と組み合わせた添え字を形成することができる。そのような機能の結果はたとえば(Cコードで)
index=(nrm<<4)|(concatenation(R1,R2)<<(28-(R3+R4)))
に対応する。
ここで、28という数は、語長(32)と添え字において使われている連結のビット数(4)との差に等しい。
ある実施形態では、前記プロセッサは、オペランドが二つだけのSNORM命令をサポートするよう設計される。可変長符号語を含むビット列を与えるのに使われるオペランドは一つだけである。第二のオペランドは、ビット列オペランドにおけるある位置をポイントする。好ましくは、第二のオペランドのうち、ビット列オペランドの半分の中のどこかをポイントする一部だけが使われる。この実施形態では、プロセッサはSNORM命令に反応して、ビット列オペランドの前半の中の、第二のオペランドによって指示される位置から始まる一連のビットの長さコードを返す。
図4は、オペランドが二つだけのSNORM命令のこの実施形態をサポートする機能ユニットの実施形態を示している。この実施形態では、単一長さの第一のバレルシフタ20が使用される。第二のオペランドは、この第一のバレルシフタ20のシフト制御入力に加えられ、好ましくはこのオペランドの値のうち、オペランド半分の中の位置を選択する下位の部分だけが第一のバレルシフタ20を制御するために使用される。
次は、そのようなSNORM命令を利用するプログラムの例である。これは、可変長符号語が決してオペランド半分より長くならない場合についてである。

bptr=0;
wptr=0;
top0=buf[wptr];
word0=buf[wptr];
word1=buf[wptr+1];
while(wptr<end)
{ nrm,sucbits=OP_SNORM(top0,bptr);
aux=(word0<<16)|((word1>>16)&0xffff);
index=getIndex(nrm,sucbits);
len=lenTable[index];
dec=codeTable[index];
bptr=bptr+len;
wptr=bptr>>5;
word0=buf[wptr];
word1=buf[wptr+1];
if(bptr&31>16) top0=aux; else top0=word0;
}

この場合には、SNORM命令のためのオペランドとしては、ビット列をもつ変数は単一のtop0しか使われていないことを注意しておくべきであろう。SNORM命令のオペランドとして使用されるかもしれない変数auxに、変数word1の半分をシフトさせて入れるシフト演算が加えられている。変数auxからの値は、変数bptrがビット列オペランドの後半をポイントするときに使用される。半語というあらかじめ決まったシフト距離(この例では16)を使っており、そのため必要とされるシフト演算は符号語の長さが知られるより前に(他の演算と並列に)実行できることを注意しておくべきであろう。長さがわかるまで延期する必要があるのは、ビット列オペランドの選択だけである。
これで明らかとなったであろうように、本発明は、可変長復号をサポートするための選択された命令をプロセッサの命令セットに追加することを提供する。該命令への応答の機能的な記述により、当業者は、プロセッサにおいて使う必要のある回路の機能について知るであろう。追加される命令は好ましくは、可変長復号を実行するために必要とされる一連の命令の数を減らし、その一方で好ましくは、追加された命令の追加によって必要になる、該命令を実行するために必要とされる可能性のある追加的ハードウェアは可能な限り少ない。可変長復号のために実行される必要のある一連の命令数が減らず、あるいはせめて必要とされる命令サイクル数が減らず、あるいは必要なレジスタ数が減らないのであれば、汎用の命令型しかもたないプロセッサに対して利点はない。他方、追加的命令が、完全に専用の可変長復号回路を実装するほうが安上がりになるほど多くの追加的ハードウェアを必要とするのであれば、そのような専用の可変長復号回路に対して利点はない。
本発明の可変長復号への応用について述べてきたが、SNORM命令の実施形態は可変長エンコードにも、たとえば、エンコードする必要のある数字の符号のビットの数を決定するために、使いうることは理解しておくべきである。この場合、符号のビットの数を使うことで、符号語の探索を簡略化できる。
プロセッサ回路を示す図である。 機能ユニットの部分を示す図である。 代替的な機能ユニットの部分を示す図である。 さらなる機能ユニットの部分を示す図である。

Claims (10)

  1. ビット列を示す第一のオペランドと、そのビット列の中の位置を示す第二のオペランドとをもつ命令を有する命令セットをもったプログラム可能プロセッサを有するデータ処理回路であって、前記プログラム可能プロセッサは、前記命令の実行の結果として、前記ビット列中の前記位置から、前記位置からのビット列が所定のビットパターンから逸脱するまでに生起するビットの数のカウントを示すコードを返すよう構成されている、データ処理回路。
  2. 前記命令が前記ビット列を延長するためのさらなるビット列を示す第三のオペランドをもち、前記位置からのビットが前記ビット列の終わりまで前記パターンから逸脱しない場合には、前記カウントに数えられるビットには、前記位置から始まって、前記ビット列の終わりから前記さらなるビット列の始めに続く諸ビットが含まれる、請求項1記載のデータ処理回路。
  3. 前記プロセッサが、前記命令に反応して後続ビットを含む追加的な結果を返すよう構成されており、該後続ビットは、当該位置に続くビットが前記所定のパターンから逸脱する最初のビット位置に対するある所定の相対位置から始まるビット列からのビットである、請求項1記載のデータ処理回路。
  4. 前記プロセッサが、カウントされるビットが始まる前記位置を制御するために前記第二のオペランドのうちからの所定数の下位ビットだけを使用するよう構成されている、請求項1記載のデータ処理回路。
  5. 可変長の符号語の復号を実行するプログラムであって、前記命令の呼び出しに続いて、前記命令によって生成される長さコードから導出される添え字を使って符号語の長さを探索するさらなる命令を含んでいるプログラム、をプログラムされた請求項1記載のデータ処理回路。
  6. 前記プログラムが、前記命令を複数回呼び出すよう諸命令を含んでおり、回ごとに第一のオペランドは同じであり、回ごとに第二のオペランドは前記ビット列中で逐次的な符号語が始まる逐次的な位置を示す逐次的な値をとる、請求項1記載のデータ処理回路。
  7. 可変長の符号語の復号を実行するプログラムであって、可変長の符号語を含むビットストリームの逐次的な諸部分をそれぞれのレジスタにロードする予備命令を含んでおり、該それぞれのレジスタを第一のオペランドおよび第三のオペランドとして使っての前記命令の呼び出しに続いて、長さコードを使って符号語の長さを探索するさらなる命令を含んでいるプログラム、をプログラムされた、請求項2記載のデータ処理回路。
  8. 可変長の符号語の復号を実行するプログラムであって、前記命令の呼び出しに続いて、長さコードおよび前記命令の前記追加的な結果から導出される添え字を使って符号語の長さを探索するさらなる命令を含んでいるプログラムをプログラムされた、請求項3記載のデータ処理回路。
  9. レジスタを含むプログラム可能プロセッサを使ってビットストリームからの可変長の符号語を復号する方法であって、
    ・前記ビットストリーム中の所定の位置からビット列を前記レジスタの第一のものにロードするための命令を実行し、
    ・前記ビット列の中の現在の符号語の先頭へのポインタを、前記レジスタの第二のものに保持し、
    ・前記レジスタのうちの第一および第二のものをオペランドとする命令を実行し、該命令は前記ビット列中の前記位置から、前記位置からのビット列の先頭部分が所定のビットパターンから逸脱するまでに生起するビットの数のカウントを示すコードを生成するような種類のものであり、
    ・長さコードを探索表の添え字として使って、現在の符号語の長さを探索する、
    ことを含む方法。
  10. 実行されたときにプロセッサをして請求項9記載の方法を実行せしめるプログラムの命令を含む、コンピュータプログラム。
JP2007531935A 2004-09-20 2005-09-15 可変長エンコーダ/デコーダのためのプログラム可能データプロセッサ Pending JP2008514095A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP04104527 2004-09-20
PCT/IB2005/053033 WO2006033060A1 (en) 2004-09-20 2005-09-15 Programmable data processor for a variable length encoder/decoder

Publications (1)

Publication Number Publication Date
JP2008514095A true JP2008514095A (ja) 2008-05-01

Family

ID=34929591

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007531935A Pending JP2008514095A (ja) 2004-09-20 2005-09-15 可変長エンコーダ/デコーダのためのプログラム可能データプロセッサ

Country Status (7)

Country Link
US (1) US7761695B2 (ja)
EP (1) EP1795014B1 (ja)
JP (1) JP2008514095A (ja)
KR (1) KR101204380B1 (ja)
CN (1) CN101023675A (ja)
AT (1) ATE531200T1 (ja)
WO (1) WO2006033060A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102348114B (zh) * 2010-07-30 2013-12-04 中国科学院微电子研究所 多模视频解码器中帧内预测器结构
CN101950301A (zh) * 2010-09-26 2011-01-19 北京飞天诚信科技有限公司 数据处理的方法及装置
WO2013095529A1 (en) 2011-12-22 2013-06-27 Intel Corporation Addition instructions with independent carry chains
ITTO20120829A1 (it) * 2012-09-25 2014-03-26 Torino Politecnico Method and system for generating channel codes, in particular for a frame-header

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04260926A (ja) * 1991-01-22 1992-09-16 Mitsubishi Electric Corp ビット検索回路及びそれを備えたデータ処理装置
JPH09326707A (ja) * 1996-06-05 1997-12-16 Hitachi Ltd 可変長符号復号化演算処理装置
JP2000207205A (ja) * 1999-01-14 2000-07-28 Sony Corp 演算装置
JP2000252837A (ja) * 1999-02-25 2000-09-14 Matsushita Electric Ind Co Ltd 可変長符号復号プロセッサ

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2630085B2 (ja) * 1991-02-26 1997-07-16 松下電器産業株式会社 記録装置と再生装置
JP3007235B2 (ja) * 1992-11-10 2000-02-07 富士写真フイルム株式会社 可変長符号の伸長装置および圧縮伸長装置
US5668548A (en) * 1995-12-28 1997-09-16 Philips Electronics North America Corp. High performance variable length decoder with enhanced throughput due to tagging of the input bit stream and parallel processing of contiguous code words
US5781134A (en) * 1996-10-18 1998-07-14 Samsung Electronics Company, Ltd. System for variable length code data stream position arrangement
US5821887A (en) * 1996-11-12 1998-10-13 Intel Corporation Method and apparatus for decoding variable length codes
US6246347B1 (en) * 1997-10-27 2001-06-12 Philips Electronics North America Corporation Controller for a variable length decoder
US6182202B1 (en) * 1997-10-31 2001-01-30 Oracle Corporation Generating computer instructions having operand offset length fields for defining the length of variable length operand offsets
JP3570188B2 (ja) * 1997-12-25 2004-09-29 富士通株式会社 可変長符号処理機構を有するデータ処理装置
US6219457B1 (en) * 1998-05-26 2001-04-17 Silicon Graphics, Inc. Method and system for decoding data encoded in a variable length code word
JP3540248B2 (ja) * 2000-06-01 2004-07-07 松下電器産業株式会社 可変長符号復号装置
US6587057B2 (en) * 2001-07-25 2003-07-01 Quicksilver Technology, Inc. High performance memory efficient variable-length coding decoder
US20040120404A1 (en) * 2002-11-27 2004-06-24 Takayuki Sugahara Variable length data encoding method, variable length data encoding apparatus, variable length encoded data decoding method, and variable length encoded data decoding apparatus

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04260926A (ja) * 1991-01-22 1992-09-16 Mitsubishi Electric Corp ビット検索回路及びそれを備えたデータ処理装置
JPH09326707A (ja) * 1996-06-05 1997-12-16 Hitachi Ltd 可変長符号復号化演算処理装置
JP2000207205A (ja) * 1999-01-14 2000-07-28 Sony Corp 演算装置
JP2000252837A (ja) * 1999-02-25 2000-09-14 Matsushita Electric Ind Co Ltd 可変長符号復号プロセッサ

Also Published As

Publication number Publication date
KR101204380B1 (ko) 2012-11-26
KR20070065323A (ko) 2007-06-22
CN101023675A (zh) 2007-08-22
US20080320283A1 (en) 2008-12-25
EP1795014A1 (en) 2007-06-13
WO2006033060A1 (en) 2006-03-30
EP1795014B1 (en) 2011-10-26
ATE531200T1 (de) 2011-11-15
US7761695B2 (en) 2010-07-20

Similar Documents

Publication Publication Date Title
US7823142B2 (en) Processor for executing instructions in units that are unrelated to the units in which instructions are read, and a compiler, an optimization apparatus, an assembler, a linker, a debugger and a disassembler for such processor
KR101026821B1 (ko) 단정밀도 부동 소수점 데이터의 저장 방법 및 프로세서
US5087913A (en) Short-record data compression and decompression system
KR960012741A (ko) 데이타를 부호화 및 복호화하는 장치 및 방법
JPH07297728A (ja) パターン一致を探索するための方法およびシステム
KR101401244B1 (ko) 방법 및 장치 및 기록 매체
KR20120115244A (ko) 데이터 압축 동안의 대안적 인코딩 솔루션들 평가
JP2682264B2 (ja) プログラムカウンタ装置
JP2008514095A (ja) 可変長エンコーダ/デコーダのためのプログラム可能データプロセッサ
KR20130111170A (ko) 압축 및 신장 시스템, 압축 장치, 신장 장치, 압축 및 신장 방법, 압축 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체, 및 신장 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체
US7523294B2 (en) Maintaining original per-block number of instructions by inserting NOPs among compressed instructions in compressed block of length compressed by predetermined ratio
JP4930435B2 (ja) 可変長符号復号装置、可変長符号復号方法およびプログラム
JP5853177B2 (ja) データ処理装置、及びデータ処理方法
US7668381B2 (en) Decoding apparatus and encoding apparatus with specific bit sequence deletion and insertion
JP2012098893A (ja) 圧縮命令処理装置及び圧縮命令生成装置
US7484077B2 (en) Skipping unnecessary instruction by multiplex selector using next instruction offset stride signal generated from instructions comparison results
US6765513B2 (en) Decoding bit streams compressed with compression techniques employing variable length codes
JP4479370B2 (ja) プロセッサ
JP4862894B2 (ja) 符号化装置と方法及びプロセッサ
JP2529465B2 (ja) 可変長符号復号装置
JP2010258927A (ja) 符号データ処理装置、方法及びプログラム
KR970032145A (ko) 가변장 복호기 제어회로
KR970012149A (ko) 연집오류정정 복호화기
KR950009473A (ko) 디지탈신호처리프로세서 및 그것을 사용해서 명령을 페치하여 복호하는 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080826

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100820

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20101117

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20101125

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101208

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110111

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20110419

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110511

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20110628

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20110722