(57)【特許請求の範囲】
【請求項１】
可変長符号の符号語が連続するビットストリームを順次復号化して出力する可変長復号化回路であって、
復号化した符号語の符号長の累積値を求め、ビットストリームの連続する長さ２Ｎ又は２Ｎ−１ビット（Ｎは可変長符号の最長符号長）のデータから、前記累積値に応じて連続する長さＮビットのデータを取り出して出力するインタフェース部と、
前記インタフェース部の出力を入力とし、これとこれよりも前に入力された前記インタフェース部の出力とに含まれる符号語に対してルックアップテーブルを用いて復号化を行い、復号結果を出力するとともに、復号化された符号語の符号長を前記インタフェース部に出力する復号化部とを備え、
前記インタフェース部は、
前記累積値に応じて得られた剰余を格納し、出力する累算レジスタと、
前記復号化部が出力する符号長と前記累算レジスタが出力する剰余とを加算して、前記累積値に対応した加算結果を求め、当該加算結果をＮで割った商及び余りをそれぞれ桁上げ信号及び新たな剰余として出力する加算器と、
前記桁上げ信号の値が１である場合に、ビットストリームの連続する長さＮ又はＮ−１ビットのデータを格納し、出力する入力レジスタと、
前記入力レジスタの出力と、これに続くビットストリームの連続する長さＮビットのデータとを、各ビットの順がビットストリームにおける順となるように連結し、前記累算レジスタが出力する剰余をシフト入力の値として用い、連結して得られたデータのうち、このシフト入力の値に応じたビットから連続する長さＮビットのデータを取り出して前記復号化部に出力するバレルシフタとを備えた
ことを特徴とする可変長復号化回路。
【請求項２】
請求項１に記載の可変長復号化回路において、
前記バレルシフタは、
入力されたデータの先頭のビットから数えて、（Ｍ＋２）番目（Ｍは前記シフト入力の値）のビットから連続する長さＮビットのデータを出力する
ことを特徴とする可変長復号化回路。
【請求項３】
請求項１に記載の可変長復号化回路において、
前記復号化部は、
バレルシフタと、バレルシフタレジスタと、ルックアップテーブルとを備え、
前記復号化部のバレルシフタは、
前記バレルシフタレジスタが出力するデータと、前記インタフェース部が出力するデータとを、各ビットの順がビットストリームにおける順となるように連結し、前記ルックアップテーブルが出力する符号長をシフト入力の値として用い、連結して得られたデータのうち、このシフト入力の値に応じたビットから連続する長さＮビットのデータを取り出して出力するものであり、
前記バレルシフタレジスタは、
前記復号化部のバレルシフタの出力を格納し、出力するものであり、
前記ルックアップテーブルは、
前記バレルシフタレジスタの出力に含まれる符号語に対応した復号結果を出力するとともに、当該符号語の符号長を出力するものである
ことを特徴とする可変長復号化回路。
【請求項４】
請求項３に記載の可変長復号化回路において、
前記復号化部のバレルシフタは、
入力されたデータの先頭のビットから数えて、（Ｌ＋１）番目（Ｌは前記シフト入力の値）のビットから連続する長さＮビットのデータを出力する
ことを特徴とする可変長復号化回路。
【請求項５】
請求項３に記載の可変長復号化回路において、
前記復号化部は、
前記符号長から１を減じて出力する符号長変換回路を更に備え、
前記復号化部のバレルシフタは、
前記符号長の代わりに前記符号長変換回路の出力を前記シフト入力の値として用い、
入力されたデータの先頭のビットから数えて、（Ｌ＋２）番目のビットから連続する長さＮビットのデータを出力する
ことを特徴とする可変長復号化回路。
【請求項６】
請求項１に記載の可変長復号化回路において、
前記復号化部は、
バレルシフタと、第１及び第２のバレルシフタレジスタと、ルックアップテーブルと、シフト量レジスタとを備え、
前記復号化部のバレルシフタは、
前記第１及び第２のバレルシフタレジスタが出力するデータを、各ビットの順がビットストリームにおける順となるように連結し、前記シフト量レジスタの出力に応じた値をシフト入力の値として用い、連結して得られたデータのうち、このシフト入力の値に応じたビットから連続する長さＮビットのデータを取り出して出力するものであり、
前記第１のバレルシフタレジスタは、
前記インタフェース部の出力を格納し、出力するものであり、
前記第２のバレルシフタレジスタは、
前記復号化部のバレルシフタの出力を格納し、出力するものであり、
前記ルックアップテーブルは、
前記復号化部のバレルシフタの出力に含まれる符号語に対応した復号結果を出力するとともに、当該符号語の符号長を出力するものであり、
前記シフト量レジスタは、
前記符号長に応じた値を格納し、出力するものである
ことを特徴とする可変長復号化回路。
【請求項７】
請求項６に記載の可変長復号化回路において、
前記シフト量レジスタは、
前記符号長を格納し、出力するものであり、
前記復号化部のバレルシフタは、
前記シフト量レジスタの出力をシフト入力の値として用い、
入力されたデータの先頭のビットから数えて、（Ｌ＋１）番目（Ｌは前記シフト入力の値）のビットから連続する長さＮビットのデータを出力する
ことを特徴とする可変長復号化回路。
【請求項８】
請求項６に記載の可変長復号化回路において、
前記復号化部は、
前記符号長から１を減じて出力する符号長変換回路を更に備え、
前記復号化部のバレルシフタは、
前記符号長変換回路及び前記シフト量レジスタを介して入力された、１を減じられた符号長を前記シフト入力の値として用い、
入力されたデータの先頭のビットから数えて、（Ｌ＋２）番目のビットから連続する長さＮビットのデータを出力する
ことを特徴とする可変長復号化回路。
【請求項９】
請求項３又は６に記載の可変長復号化回路において、
前記加算器は、
前記復号化部が出力する符号長と前記累算レジスタが出力する剰余とを加算した値に１を加えた値を前記加算結果として求めるものであり、
前記ルックアップテーブルは、
前記符号長として、当該符号語の符号長から１を減じた値を出力するものである
ことを特徴とする可変長復号化回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、可変長符号の復号化回路に関する。
【０００２】
【従来の技術】
動画像を通信又は記録する際に、通信手段の帯域幅や記録媒体の容量を削減するために、画像を圧縮符号化することが行われている。国際標準の動画像の符号化方式として、Ｈ．２６１、ＭＰＥＧ（moving picture experts group）１、ＭＰＥＧ２などがある。
【０００３】
これらの符号化方式は、動きベクトル検出及び動き補償、ＤＣＴ（discrete cosine transform）、量子化、ジグザグスキャン、可変長符号化などを組合わせた方法である。可変長符号化は、量子化された固定長の符号語を、統計的性質に従った可変長の符号語のビットストリームに変換して平均的な符号量を減らす符号化方法である。このようなビットストリームを復号化し、動画像再生を行うには、可変長の符号語を元の固定長のデータに変換する可変長復号化を行うことが必要となる。可変長復号化では、符号語の長さが一定ではなく、ビットストリームにおける各可変長符号語の先頭位置が特定できないため、ビットストリーム内の順番に従って符号語を復号化する必要がある。
【０００４】
この可変長復号化を高速に実現するために、種々の可変長復号化回路が考えられている。従来の可変長復号化回路の例として、米国特許５，２４５，３３８号公報に開示されたものがある。図１１は、このような従来の可変長復号化回路の例のブロック図である。図１１の可変長復号化回路は、最長符号長が１６ビットの可変長符号を復号化するものである。
【０００５】
バッファ９０１は、入力されたビットストリームを格納し、読み出し信号ＲＤが“１”の場合には、その次のサイクルにおいて、格納しているビットストリームを１６ビット単位で第１のバレルシフタ９１１及び第１の入力レジスタ９１２に出力する。バッファ９０１は、その出力を１サイクルの間保持する。
【０００６】
第１の入力レジスタ９１２及び第２の入力レジスタ９１３は１６ビット構成であり、更新信号が“１”の場合に次のサイクルで入力データを取り込む。
【０００７】
第１のバレルシフタ９１１は、加算器９１４の加算結果ＳＭ（値：０〜３１）をシフト量（値：１〜３２）として用い、第２の入力レジスタ９１３の出力を上位１６ビットとして、第１の入力レジスタ９１２の出力を中位１６ビットとして、バッファ９０１の出力を下位１６ビットとして連結した４８ビットのデータのうち、最上位から（シフト量＋１）ビット目〜(シフト量＋１６)ビット目の１６ビットのデータを出力し、これを第１のバレルシフタレジスタ９２２に書き込む。ここで、連結して得られた４８ビットのデータの最上位ビットを１ビット目としている。
【０００８】
第２のバレルシフタ９２１は、シフト量レジスタ９２５の出力をシフト量（値：１〜１６）として用い、第２のバレルシフタレジスタ９２３の出力を上位１６ビットとして、第１のバレルシフタレジスタ９２２の出力を下位１６ビットとして連結した３２ビットのデータのうち、最上位から（シフト量＋１）ビット目〜(シフト量＋１６)ビット目の１６ビットのデータを出力し、これを第２のバレルシフタレジスタ９２３に書き込む。
【０００９】
ルックアップテーブル９２４は、第２のバレルシフタ９２１の出力に対して可変長復号化を行い、復号結果ＤＣと符号長ＣＬ（値：１〜１６）とを出力し、この符号長をシフト量レジスタ９２５に書き込む。ルックアップテーブル９２４は、可変長の各符号語に対応して、その復号結果と符号長とを出力することができるように構成されたテーブルである。ルックアップテーブル９２４には、符号語の先頭のビットが最上位のビットとして入力されるようになっている。
【００１０】
加算器９１４は、シフト量レジスタ９２５の出力（値：１〜１６）と累算レジスタ９１５の出力（値：０〜１５）とを加算し、加算結果ＳＭを出力する。加算器９１４は、加算結果ＳＭが１６〜３１の場合１となる桁上げ信号ＣＲをホールドレジスタ９１６に書き込み、加算結果ＳＭの１６を法とする剰余ＲＭ（値：０〜１５）を累算レジスタ９１５に書き込む。すなわち、５ビットのシフト量レジスタ９２５の出力と４ビットの累算レジスタ９１５の出力との加算によって得られた５ビットの加算結果ＳＭのうち、最上位ビットが桁上げ信号ＣＲとなり、残り４ビットが加算結果ＳＭの１６を法とする剰余ＲＭとなる。桁上げ信号ＣＲを第１の入力レジスタ９１２、第２の入力レジスタ９１３の更新信号とし、ホールドレジスタ９１６の出力である読み出し信号ＲＤをバッファ９０１の読み出し信号とする。
【００１１】
図１２は、図１１の可変長復号化回路におけるサイクル毎のデータフローの例を示す説明図である。例えば“ａ１−ａ８”は、ａ１，ａ２，ａ３，ａ４，ａ５，ａ６，ａ７，ａ８と連なる８ビットデータを表すものとする。図１２において、例えば第０サイクルのバッファ出力が“ａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２”という表示は、ａ１−ａ８、ｂ１−ｂ６、ｃ１−ｃ２が順に連なる１６ビットのデータを表す。
【００１２】
図１２において、第０〜第２サイクルの更新信号、読み出し信号、第１のバレルシフタのシフト量、及び第２のバレルシフタのシフト量は、初期状態としてのデータを各レジスタに設定するために、それぞれ、“１”，“１”，“１６”，及び“１６”を用いる。第３サイクル以降は、処理の結果得られた桁上げ信号、読み出し信号、累算レジスタ、シフト量レジスタの値を用いて処理を繰り返す。
【００１３】
このように、復号結果の出力が毎サイクル得られる。復号化開始時において、入力バッファ９０１が最初にデータを出力する第０サイクルから２サイクル後の第２サイクルで、最初の復号化出力が得られる。
【００１４】
【発明が解決しようとする課題】
ところが、図１１のような従来の可変長復号化回路では、入力レジスタを２個必要とし、第１のバレルシフタとして４８ビット入力で１６ビット出力の回路が必要である。このため、回路規模が大きくなり、ＬＳＩなどで実現する場合に回路が広いレイアウト面積を必要としてしまう。
【００１５】
また、図１１のような従来の可変長復号化回路では、復号化開始時には、入力バッファのデータが出力されてから２サイクル後に初めて復号化出力が得られる。ビットストリームには、可変長符号のストリームが複数含まれる場合においては、それぞれの可変長符号のストリームの間に、ヘッダ等の可変長符号以外の情報が含まれている。このような場合には、これらの可変長符号のストリームが連続しておらず、可変長復号化を連続して行うことができない。このため、可変長復号化を連続して行えない場合には、それぞれの可変長符号ストリームの復号化開始時に２サイクルの遅延が生じ、ビットストリーム全体の復号化に多くのサイクル数を必要としてしまう。
【００１６】
本発明はこのような課題を解決するためのものであり、可変長復号化回路において、回路規模及びレイアウト面積を削減し、復号化出力の遅延を少なくすることを目的とする。
【００１７】
【課題を解決するための手段】
前記課題を解決するため、請求項１の発明が講じた手段は、可変長符号の符号語が連続するビットストリームを順次復号化して出力する可変長復号化回路であって、復号化した可変長符号の符号語の符号長の累積値を求め、ビットストリームの連続する長さ２Ｎ又は２Ｎ−１ビット（Ｎは可変長符号の最長符号長）のデータから、前記累積値に応じて連続する長さＮビットのデータを取り出して出力するインタフェース部と、前記インタフェース部の出力を入力とし、これとこれよりも前に入力された前記インタフェース部の出力とに含まれる符号語に対してルックアップテーブルを用いて復号化を行い、復号結果を出力するとともに、復号化された符号語の符号長を前記インタフェース部に出力する復号化部とを備え、前記インタフェース部は、前記累積値に応じて得られた剰余を格納し、出力する累算レジスタと、前記復号化部が出力する符号長と前記累算レジスタが出力する剰余とを加算して、前記累積値に対応した加算結果を求め、当該加算結果をＮで割った商及び余りをそれぞれ桁上げ信号及び新たな剰余として出力する加算器と、前記桁上げ信号の値が１である場合に、ビットストリームの連続する長さＮ又はＮ−１ビットのデータを格納し、出力する入力レジスタと、前記入力レジスタの出力と、これに続くビットストリームの連続する長さＮビットのデータとを、各ビットの順がビットストリームにおける順となるように連結し、前記累算レジスタが出力する剰余をシフト入力の値として用い、連結して得られたデータのうち、このシフト入力の値に応じたビットから連続する長さＮビットのデータを取り出して前記復号化部に出力するバレルシフタとを備えたものである。
【００１８】
請求項１の発明によると、ビットストリームの連続する長さ２Ｎ又は２Ｎ−１ビットのデータから、復号化部で必要な長さＮビットのデータを取り出すので、回路の規模を小さくすることができる。桁上げ信号が入力レジスタの格納データの更新に用いられ、また、加算結果の剰余を累算レジスタに書き込むので、その１サイクル後に剰余がバレルシフタのシフト量として用いられる。このため、符号長の累積値が最長符号長を超え、最長符号長を超えるシフト量のシフトを行う必要がある場合に、バレルシフタで行うシフトは小さいシフト量で済む。入力レジスタを更新することにより最長符号長に等しいシフト量のシフトを行い、次のサイクルで残りのシフト量のシフトをバレルシフタにより実現することになるからである。したがって、バレルシフタのビット幅を小さくすることができる。また、入力レジスタが１個で済むので、初期設定のためのサイクル数が１サイクルで済む。
【００１９】
また、請求項２の発明では、請求項１に記載の可変長復号化回路において、前記バレルシフタは、入力されたデータの先頭のビットから数えて、（Ｍ＋２）番目（Ｍは前記シフト入力の値）のビットから連続する長さＮビットのデータを出力することを特徴とする。
【００２０】
請求項２の発明によると、インタフェース部は、シフト入力の値に応じて、復号化部が必要とするＮビットのデータを選択して出力することができる。
【００２１】
また、請求項３の発明では、請求項１に記載の可変長復号化回路において、前記復号化部は、バレルシフタと、バレルシフタレジスタと、ルックアップテーブルとを備え、前記復号化部のバレルシフタは、前記バレルシフタレジスタが出力するデータと、前記インタフェース部が出力するデータとを、各ビットの順がビットストリームにおける順となるように連結し、前記ルックアップテーブルが出力する符号長をシフト入力の値として用い、連結して得られたデータのうち、このシフト入力の値に応じたビットから連続する長さＮビットのデータを取り出して出力するものであり、前記バレルシフタレジスタは、前記復号化部のバレルシフタの出力を格納し、出力するものであり、前記ルックアップテーブルは、前記バレルシフタレジスタの出力に含まれる符号語に対応した復号結果を出力するとともに、当該符号語の符号長を出力するものである。
【００２２】
請求項３の発明によると、インタフェース部の出力を復号化部のバレルシフタに直結し、このバレルシフタの出力をバレルシフタレジスタに書き込むので、バレルシフタレジスタの数を削減することができる。
【００２３】
また、請求項４の発明では、請求項３に記載の可変長復号化回路において、前記復号化部のバレルシフタは、入力されたデータの先頭のビットから数えて、（Ｌ＋１）番目（Ｌは前記シフト入力の値）のビットから連続する長さＮビットのデータを出力することを特徴とする。
【００２４】
請求項４の発明によると、次に復号化すべき符号語を先頭とするＮビットのデータをルックアップテーブルの入力とすることができる。
【００２５】
また、請求項５の発明では、請求項３に記載の可変長復号化回路において、前記復号化部は、前記符号長から１を減じて出力する符号長変換回路を更に備え、前記復号化部のバレルシフタは、前記符号長の代わりに前記符号長変換回路の出力を前記シフト入力の値として用い、入力されたデータの先頭のビットから数えて、（Ｌ＋２）番目のビットから連続する長さＮビットのデータを出力することを特徴とする。
【００２６】
請求項５の発明によると、バレルシフタへのシフト入力の値が小さくなる。特に、最長符号長が２のべきである場合には、シフト入力の値を表すためのビット数が小さくなり、バレルシフタへのシフト入力のビット幅を小さくすることができる。
【００２７】
また、請求項６の発明では、請求項１に記載の可変長復号化回路において、前記復号化部は、バレルシフタと、第１及び第２のバレルシフタレジスタと、ルックアップテーブルと、シフト量レジスタとを備え、前記復号化部のバレルシフタは、前記第１及び第２のバレルシフタレジスタが出力するデータを、各ビットの順がビットストリームにおける順となるように連結し、前記シフト量レジスタの出力に応じた値をシフト入力の値として用い、連結して得られたデータのうち、このシフト入力の値に応じたビットから連続する長さＮビットのデータを取り出して出力するものであり、前記第１のバレルシフタレジスタは、前記インタフェース部の出力を格納し、出力するものであり、前記第２のバレルシフタレジスタは、前記復号化部のバレルシフタの出力を格納し、出力するものであり、前記ルックアップテーブルは、前記復号化部のバレルシフタの出力に含まれる符号語に対応した復号結果を出力するとともに、当該符号語の符号長を出力するものであり、前記シフト量レジスタは、前記符号長に応じた値を格納し、出力するものである。
【００２８】
請求項６の発明によると、インタフェース部が出力したデータから、復号化すべき可変長符号の符号語を含むＮビットのデータを取り出し、順次復号化することができる。
【００２９】
また、請求項７の発明では、請求項６に記載の可変長復号化回路において、前記シフト量レジスタは、前記符号長を格納し、出力するものであり、前記復号化部のバレルシフタは、前記シフト量レジスタの出力をシフト入力の値として用い、入力されたデータの先頭のビットから数えて、（Ｌ＋１）番目（Ｌは前記シフト入力の値）のビットから連続する長さＮビットのデータを出力することを特徴とする。
【００３０】
請求項７の発明によると、次に復号化すべき符号語を先頭とするＮビットのデータをルックアップテーブルの入力とすることができる。
【００３１】
また、請求項８の発明では、請求項６に記載の可変長復号化回路において、前記復号化部は、前記符号長から１を減じて出力する符号長変換回路を更に備え、前記復号化部のバレルシフタは、前記符号長変換回路及び前記シフト量レジスタを介して入力された、１を減じられた符号長を前記シフト入力の値として用い、入力されたデータの先頭のビットから数えて、（Ｌ＋２）番目のビットから連続する長さＮビットのデータを出力することを特徴とする。
【００３２】
請求項８の発明によると、バレルシフタへのシフト入力の値が小さくなる。特に、最長符号長が２のべきである場合には、シフト入力の値を表すためのビット数が小さくなり、バレルシフタへのシフト入力のビット幅を小さくすることができる。
【００３３】
また、請求項９の発明は、請求項３又は６に記載の可変長復号化回路において、前記加算器は、前記復号化部が出力する符号長と前記累算レジスタが出力する剰余とを加算した値に１を加えた値を前記加算結果として求めるものであり、前記ルックアップテーブルは、前記符号長として、当該符号語の符号長から１を減じた値を出力するものである。
【００３４】
請求項９の発明によると、バレルシフタへのシフト入力の値が小さくなる。特に、最長符号長が２のべきである場合には、シフト入力の値を表すためのビット数が小さくなり、バレルシフタへのシフト入力のビット幅を小さくすることができる。また、符号長を変換する回路を備える必要がない。
【００３５】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照して説明する。
【００３６】
（第１の実施形態）
図１は、本発明の第１の実施形態に係る可変長復号化回路のブロック図である。この可変長復号化回路は最長符号長Ｎが１６ビットの可変長符号を復号化するものであるとして説明する。図１の可変長復号化回路は、インタフェース部１１０と、復号化部１２０とを備えている。インタフェース部１１０は、バレルシフタ１１１と、入力レジスタ１１２と、加算器１１４と、累算レジスタ１１５とを備えている。復号化部１２０は、バレルシフタ１２１と、バレルシフタレジスタ１２２と、ルックアップテーブル（以下では、ＬＵＴと称する）１２４とを備えている。
【００３７】
図２は、入力ビットストリームの例を示す説明図である。ここで、ａ１等は１ビットデータを表し、例えば“ａ１−ａ８”は、ａ１，ａ２，ａ３，ａ４，ａ５，ａ６，ａ７，ａ８の８ビットのデータがこの順で連なっていることを表している。また、８ビットデータ“ａ１−ａ８”，６ビットデータ“ｂ１−ｂ６”，５ビットデータ“ｃ１−ｃ５”及び１５ビットデータ“ｄ１−ｄ１５”は、それぞれデータ“Ａ”，“Ｂ”，“Ｃ”及び“Ｄ”に対応した、可変長の符号語であるとする。同様に、１２ビットデータ“ｅ１−ｅ１２”，１０ビットデータ“ｆ１−ｆ１０”，９ビットデータ“ｇ１−ｇ９”及び１６ビットデータ“ｈ１−ｈ１６”は、それぞれデータ“Ｅ”，“Ｆ”，“Ｇ”及び“Ｈ”に対応した、可変長の符号語であるとする。
【００３８】
以下では、図２のように、データ“Ａ”〜“Ｈ”に対応した、最長符号長が１６ビットの可変長符号の符号語が連続しているビットストリームが入力されるものとして説明する。また、例えば“ａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２”という表示は、ａ１−ａ８、ｂ１−ｂ６、ｃ１−ｃ２が順に連なる１６ビットのデータを表す。
【００３９】
図１において、バッファ１０１には、ビットストリームと、加算器１１４が出力する桁上げ信号ＣＲとが入力されている。入力レジスタ１１２は、最長符号長に対応した１６ビット構成であり、桁上げ信号ＣＲが“１”の場合に、バッファ１０１が出力している１６ビットの入力データをその次のサイクルで取り込む。
【００４０】
バッファ１０１は、入力されたビットストリームを格納し、桁上げ信号ＣＲが“１”の場合には、その次のサイクルにおいて、格納しているビットストリームを１６ビット単位でバレルシフタ１１１及び入力レジスタ１１２に出力する。バッファ１０１は、その出力を１サイクルの間保持する。
【００４１】
バレルシフタ１１１には、累算レジスタ１１５が出力する剰余ＲＭ（値：０〜１５）（剰余ＲＭが取り得る値を示す、以下同様）がシフト入力の値として入力されている。バレルシフタ１１１は、このシフト入力の値に１を加えた値をシフト量ＳＨ１（値：１〜１６）として用い、入力レジスタ１１２の出力を上位１６ビットとして、バッファ１０１の出力を下位１６ビットとして連結した３２ビットのデータのうち、（ＳＨ１＋１）ビット目〜（ＳＨ１＋１６）ビット目の１６ビットのデータをバレルシフタ１２１に出力する。ここで、連結して得られた３２ビットのデータの最上位ビットを１ビット目としている。したがって、バレルシフタ１１１は、ビットストリームの連続する長さ３２ビット（２Ｎビット）のデータのうち、シフト入力の値Ｍに応じて（Ｍ＋２）番目のビットから連続する長さ１６ビット（Ｎビット）のデータを取り出して出力することになる。
【００４２】
バレルシフタレジスタ１２２は、最長符号長に対応して１６ビットのデータを格納することができるようになっており、格納しているデータをバレルシフタ１２１及びＬＵＴ１２４に出力する。
【００４３】
ＬＵＴ１２４は、バレルシフタレジスタ１２２の出力に対して復号化を行い、得られた復号結果ＤＣを出力するとともに、復号化された符号語の符号長ＣＬ（値：１〜１６）をバレルシフタ１２１及び加算器１１４に出力する。ＬＵＴ１２４には、符号語の先頭のビットが最上位のビットとして入力されるようになっている。ＬＵＴ１２４は、可変長の各符号語に対応した、復号結果及び符号長を有するテーブルであり、入力された符号語とテーブル内の符号語とを上位のビットから順に照合し、一致するパターンがある場合に、その符号語に対応する復号結果ＤＣ及び符号長ＣＬを出力する。ＬＵＴ１２４は、例えばＲＯＭ（read-only memory）や論理回路で構成することができる。
【００４４】
バレルシフタ１２１には、ＬＵＴ１２４が出力する符号長ＣＬ（値：１〜１６）がシフト入力の値として入力されている。バレルシフタ１２１は、このシフト入力の値をシフト量ＳＨ２（値：１〜１６）として用い、バレルシフタレジスタ１２２の出力を上位１６ビットとして、バレルシフタ１１１の出力を下位１６ビットとして連結した３２ビットのデータのうち、（ＳＨ２＋１）ビット目〜（ＳＨ２＋１６）ビット目までの１６ビットのデータをシフト結果として出力する。ここで、連結して得られた３２ビットのデータの最上位ビットを１ビット目としている。したがって、バレルシフタ１２１は、ビットストリームの連続する長さ３２ビット（２Ｎビット）のデータのうち、シフト入力の値Ｌに応じて（Ｌ＋１）番目のビットから連続する長さ１６ビット（Ｎビット）のデータを取り出して出力することになる。バレルシフタ１２１は、このシフト結果をバレルシフタレジスタ１２２に書き込む。
【００４５】
加算器１１４は、ＬＵＴ１２４が出力する符号長ＣＬ（値：１〜１６）と累算レジスタ１１５が出力する剰余ＲＭ（値：０〜１５）とを加算し、加算結果ＳＭを出力する。加算器１１４は、加算結果ＳＭのうち、桁上げ信号ＣＲをバッファ１０１及び入力レジスタ１１２に出力し、剰余ＲＭ（値：０〜１５）を累算レジスタ１１５に書き込む。
【００４６】
桁上げ信号ＣＲは、加算結果ＳＭが１６〜３１の場合に１となる信号（加算結果ＳＭを最長符号長１６で割った商）である。剰余ＲＭは、加算結果ＳＭを最長符号長１６で割った余り（加算結果ＳＭの最長符号長１６を法とする剰余）である。したがって、剰余ＲＭは、復号化した符号語の符号長の累積値を、最長符号長で割って得られる剰余に等しい。
【００４７】
より具体的には、５ビットで表された符号長ＣＬと、累算レジスタ１１５の出力である４ビットで表された剰余ＲＭとの加算によって得られた５ビットの加算結果ＳＭのうち、最上位ビットが桁上げ信号ＣＲとなり、残り４ビットが加算結果ＳＭの１６を法とする新たな剰余ＲＭとなる。
【００４８】
図３は、図１の可変長復号化回路におけるサイクル毎のデータフローの例を示す説明図である。入力ビットストリームは、図２のように連なったものであるとする。
【００４９】
図３において、初期状態としてのデータを各レジスタに設定するために、次のように初期条件が設定されている。すなわち、第０〜第１サイクルの桁上げ信号ＣＲ、第０〜第１サイクルのバレルシフタ１１１のシフト量ＳＨ１、及び第０サイクルのバレルシフタ１２１のシフト量ＳＨ２としては、それぞれ、“１”，“１６”及び“１６”を用いる。また、第０サイクルでバッファ１０１は出力を行い、第０〜１サイクルにおける累算レジスタ１１５の出力は“１５”であるとする。以下、図３等において、データ“ｘ”はどのようなデータであってもよいことを示す。以下、図３に基づいて図１の可変長復号化回路の動作を説明する。
【００５０】
＜第０サイクル＞
初期条件により、バッファ１０１の出力はａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２となる。初期条件のバレルシフタ１１１のシフト量ＳＨ１の値“１６”、バレルシフタ１２１のシフト量ＳＨ２の値“１６”に従って、バレルシフタ１１１の出力はａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２となり、バレルシフタ１２１の出力もａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２となる。桁上げ信号ＣＲの値は、初期条件から“１”とされる。
【００５１】
＜第１サイクル＞
第０サイクルにおける桁上げ信号ＣＲの値“１”に従って、入力レジスタ１１２はバッファ１０１の出力ａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２を取り込み、バッファ１０１の出力はｃ３−ｃ５ｄ１−ｄ１３となる。
【００５２】
バレルシフタレジスタ１２２は、バレルシフタ１２１が出力するａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２を取り込む。初期条件であるバレルシフタ１１１のシフト量ＳＨ１の値“１６”に従って、バレルシフタ１１１はｃ３−ｃ５ｄ１−ｄ１３を出力する。バレルシフタレジスタ１２２の出力ａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２に従って、ＬＵＴ１２４の復号結果は“Ａ”となり、ＬＵＴ１２４が出力する符号長ＣＬは“８”となる。符号長ＣＬの値“８”に従って、バレルシフタ１２１はｂ１−ｂ６ｃ１−ｃ５ｄ１−ｄ５を出力する。
【００５３】
初期条件により、加算器１１４は符号長ＣＬの値“８”と累算レジスタ１１５の出力“１５”との加算結果ＳＭの値“２３”を出力する。桁上げ信号ＣＲの値は“１”、剰余ＲＭは“７”となる。
【００５４】
＜第２サイクル＞
第１サイクルにおける桁上げ信号ＣＲの値“１”に従って、入力レジスタ１１２はバッファ１０１の出力ｃ３−ｃ５ｄ１−ｄ１３を取り込み、バッファ１０１の出力はｄ１４−ｄ１５ｅ１−ｅ１２ｆ１−ｆ２となる。
【００５５】
バレルシフタレジスタ１２２は、バレルシフタ１２１が出力するｂ１−ｂ６ｃ１−ｃ５ｄ１−ｄ５を取り込み、累算レジスタ１１５は、剰余ＲＭの値“７”を取り込む。バレルシフタ１１１のシフト量ＳＨ１の値“８”に従って、バレルシフタ１１１はｄ６−ｄ１５ｅ１−ｅ６を出力する。バレルシフタレジスタ１２２の出力ｂ１−ｂ６ｃ１−ｃ５ｄ１−ｄ５に従って、ＬＵＴ１２４の復号結果は“Ｂ”となり、ＬＵＴ１２４が出力する符号長ＣＬは“６”となる。符号長ＣＬの値“６”に従って、バレルシフタ１２１はｃ１−ｃ５ｄ１−ｄ１１を出力する。
【００５６】
加算器１１４は、符号長ＣＬの値“６”と累算レジスタ１１５の出力“７”との加算結果ＳＭの値“１３”を出力し、桁上げ信号ＣＲは“０”、剰余ＲＭは“１３”となる。
【００５７】
＜第３サイクル＞
第３サイクルでは、第２サイクルで得られた桁上げ信号ＣＲの値“０”に従って、入力レジスタ１１２、及びバッファ１０１の出力は更新されない。
【００５８】
バレルシフタレジスタ１２２は、バレルシフタ１２１が出力するｃ１−ｃ５ｄ１−ｄ１１を取り込み、累算レジスタ１１５は、剰余ＲＭの値“１３”を取り込む。バレルシフタ１１１のシフト量ＳＨ１の値“１４”に従って、バレルシフタ１１１はｄ１２−ｄ１５ｅ１−ｅ１２を出力する。バレルシフタレジスタ１２２の出力ｃ１−ｃ５ｄ１−ｄ１１に従って、ＬＵＴ１２４の復号結果は“Ｃ”となり、ＬＵＴ１２４が出力する符号長ＣＬは“５”となる。
【００５９】
符号長ＣＬの値“５”に従って、バレルシフタ１２１はｄ１−ｄ１５ｅ１を出力する。加算器１１４は、符号長ＣＬの値“５”と累算レジスタ１１５の出力“１３”との加算結果ＳＭの値“１８”を出力し、桁上げ信号ＣＲは“１”、剰余は“２”となる。
【００６０】
次の第４サイクルにおいて、第３サイクルで得られた桁上げ信号ＣＲの値“１”に従って、入力レジスタ１１２はｄ１４−ｄ１５ｅ１−ｅ１２ｆ１−ｆ２を取り込み、バッファ１０１の出力はｆ３−ｆ１０ｇ１−ｇ８となる。
【００６１】
以降、図１の可変長復号化回路は、第２サイクル及び第３サイクルと同様に動作する。ただし、バッファ出力及び入力レジスタは、前のサイクルで得られた桁上げ信号ＣＲが“１”となる場合は更新され、“０”となる場合は更新されない。
【００６２】
このようにして第１サイクル以降、可変長復号した結果を毎サイクル出力することができる。特に復号化開始時において、入力バッファ１０１が最初にデータを出力する第０サイクルから１サイクル後の第１サイクルで、最初の復号化出力が得られる。
【００６３】
以上のように、第１の実施形態によると、図１１の従来の回路と比べて、１６ビットの入力レジスタの数を２個から１個に削減でき、４８ビット入力１６ビット出力のバレルシフタの代わりに３２ビット入力１６ビット出力のバレルシフタを備えれば済む。また、復号化開始時に、入力バッファがデータを出力してから復号化出力が得られるまでに必要なサイクル数が、２サイクルであったのが１サイクルとなる。
【００６４】
また、図１１の従来の回路では２個のバレルシフタレジスタ及びシフト量レジスタが必要であったが、第１の実施形態によると、これらのレジスタの代わりにバレルシフタレジスタ１個を備えればよく、レジスタ数を削減することができる。
【００６５】
（第１の実施形態の変形例）
図４は、第１の実施形態の変形例に係る可変長復号化回路のブロック図である。図４の可変長復号化回路は、図１の可変長復号化回路において、復号化部１２０の代わりに復号化部１４０を備えている。復号化部１４０は、復号化部１２０において、バレルシフタ１２１の代わりにバレルシフタ１４１を備えている。また、復号化部１４０は、符号長ＣＬを入力とし、これを変換した値を符号長ＣＬの代わりにバレルシフタ１４１に出力する符号長変換回路１４６を更に備えている。その他の構成要素については、図１を参照して説明したものと同じなので、その説明を省略する。
【００６６】
図５は、符号長変換回路１４６についての説明図である。符号長変換回路１４６は、ＬＵＴ１２４が出力する５ビットで表される符号長ＣＬ（値：１〜１６）を入力とし、これから１を減じた値（値：０〜１５）を出力する回路である。符号長変換回路１４６は、具体的には、値“１”を減算する回路やＲＯＭなどで実現することができる。
【００６７】
バレルシフタ１４１は、符号長変換回路１４６が出力する４ビットで表される値（０〜１５）をシフト入力とし、このシフト入力の値に１を加算した値をシフト量とするビットシフトを行い、シフト結果を出力する。したがって、バレルシフタ１４１は、ビットストリームの連続する長さ３２ビット（２Ｎビット）のデータのうち、シフト入力の値Ｌに応じて（Ｌ＋２）番目のビットから連続する長さ１６ビット（Ｎビット）のデータを取り出して出力することになる。
【００６８】
バレルシフタ１１１とバレルシフタ１４１とは、いずれも４ビットの値をシフト入力とし、１６通りのビットシフトを行うことができるバレルシフタであり、同じものを用いることができる。したがって、図１の回路と比べると、回路の規則性が向上し、回路面積を縮小することができる。
【００６９】
（第２の実施形態）
図６は、本発明の第２の実施形態に係る可変長復号化回路のブロック図である。この可変長復号化回路は最長符号長が１６ビットの可変長符号を復号化するものであるとして説明する。図６の可変長復号化回路は、インタフェース部１１０と、復号化部２２０とを備えている。復号化部２２０は、バレルシフタ２２１と、第１のバレルシフタレジスタ２２２と、第２のバレルシフタレジスタ２２３と、ＬＵＴ２２４と、シフト量レジスタ２２５とを備えている。バッファ１０１及びインタフェース部１１０は、図１を参照して説明したものと同じであるので、その説明を省略する。
【００７０】
第１のバレルシフタレジスタ２２２及び第２のバレルシフタレジスタ２２３は、最長符号長に対応して１６ビットのデータを格納することができるようになっている。第１のバレルシフタレジスタ２２２は、バレルシフタ１１１が出力する１６ビットのデータを格納する。第１のバレルシフタレジスタ２２２及び第２のバレルシフタレジスタ２２３は、格納しているデータをバレルシフタ２２１に出力する。
【００７１】
バレルシフタ２２１には、シフト量レジスタ２２５の出力（値：１〜１６）がシフト入力の値として入力されている。バレルシフタ２２１は、このシフト入力の値をシフト量ＳＨ３（値：１〜１６）として用い、第２のバレルシフタレジスタ２２３の出力を上位１６ビットとして、第１のバレルシフタレジスタ２２２の出力を下位１６ビットとして連結した３２ビットのデータのうち、（ＳＨ３＋１）ビット目〜（ＳＨ３＋１６）ビット目までの１６ビットのデータをシフト結果として出力する。ここで、連結して得られた３２ビットのデータの最上位ビットを１ビット目としている。
【００７２】
したがって、バレルシフタ２２１は、ビットストリームの連続する長さ３２ビット（２Ｎビット）のデータのうち、シフト入力の値Ｌに応じて（Ｌ＋１）番目のビットから連続する長さ１６ビット（Ｎビット）のデータを取り出して出力することになる。バレルシフタ２２１は、このシフト結果を第２のバレルシフタレジスタ２２３に書き込むとともに、ＬＵＴ２２４に出力する。
【００７３】
ＬＵＴ２２４は、バレルシフタ２２１の出力に対して復号化を行い、得られた復号結果ＤＣを出力し、復号化された符号語の符号長ＣＬ（値：１〜１６）をシフト量レジスタ２２５に書き込むとともに、加算器１１４に出力する。ＬＵＴ２２４は、可変長の各符号語に対応した、復号結果及び符号長を有するテーブルである。ＬＵＴ２２４は、図１のＬＵＴ１２４と同様のものである。
【００７４】
図７は、図６の可変長復号化回路におけるサイクル毎のデータフローの例を示す説明図である。入力ビットストリームは、第１の実施形態で説明したものと同様であり、図２のように連なったものであるとする。
【００７５】
図７において、初期状態としてのデータを各レジスタに設定するために、次のように初期条件が設定されている。すなわち、第０〜第１サイクルの桁上げ信号ＣＲ、第０〜第１サイクルのバレルシフタ１１１のシフト量ＳＨ１、及び第１サイクルのバレルシフタ２２１のシフト量ＳＨ３としては、それぞれ、“１”，“１６”及び“１６”を用いる。また、第０サイクルでバッファ１０１は出力を行い、第０〜１サイクルにおける累算レジスタ１１５の出力は“１５”であるとする。以下、図７に基づいて図６の可変長復号化回路の動作を説明する。
【００７６】
＜第０サイクル＞
初期条件により、バッファ１０１の出力はａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２となる。初期条件のバレルシフタ１１１のシフト量ＳＨ１の値“１６”に従って、バレルシフタ１１１の出力はａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２となる。桁上げ信号ＣＲの値は、初期条件から“１”とされる。
【００７７】
＜第１サイクル＞
第０サイクルにおける桁上げ信号ＣＲの値“１”に従って、入力レジスタ１１２はバッファ１０１の出力ａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２を取り込み、バッファ１０１の出力はｃ３−ｃ５ｄ１−ｄ１３となる。
【００７８】
第１のバレルシフタレジスタ２２２は、バレルシフタ１１１が出力するａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２を取り込む。初期条件であるバレルシフタ１１１のシフト量ＳＨ１の値“１６”に従って、バレルシフタ１１１はｃ３−ｃ５ｄ１−ｄ１３を出力する。初期条件であるバレルシフタ２２１のシフト量ＳＨ３の値“１６”に従って、バレルシフタ２２１はａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２を出力する。バレルシフタ２２１の出力ａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２に従って、ＬＵＴ２２４の復号結果は“Ａ”となり、ＬＵＴ２２４が出力する符号長ＣＬは“８”となる。
【００７９】
初期条件により、加算器１１４は符号長ＣＬの値“８”と累算レジスタ１１５の出力“１５”との加算結果ＳＭの値“２３”を出力する。桁上げ信号ＣＲの値は“１”、剰余ＲＭは“７”となる。
【００８０】
＜第２サイクル＞
第１サイクルにおける桁上げ信号ＣＲの値“１”に従って、入力レジスタ１１２はバッファ１０１の出力ｃ３−ｃ５ｄ１−ｄ１３を取り込み、バッファ１０１の出力はｄ１４−ｄ１５ｅ１−ｅ１２ｆ１−ｆ２となる。
【００８１】
第１のバレルシフタレジスタ２２２は、バレルシフタ１１１が出力するｃ３−ｃ５ｄ１−ｄ１３を取り込み、第２のバレルシフタレジスタ２２３は、バレルシフタ２２１が出力するａ１−ａ８ｂ１−ｂ６ｃ１−ｃ２を取り込む。シフト量レジスタ２２５は符号長ＣＬの値“８”を取り込み、累算レジスタ１１５は剰余ＲＭの値“７”を取り込む。
【００８２】
バレルシフタ１１１のシフト量ＳＨ１の値“８”に従って、バレルシフタ１１１はｄ６−ｄ１５ｅ１−ｅ６を出力する。シフト量レジスタ２２５が出力するシフト量ＳＨ３の値“８”に従って、バレルシフタ２２１はｂ１−ｂ６ｃ１−ｃ５ｄ１−ｄ５を出力する。バレルシフタ２２１の出力ｂ１−ｂ６ｃ１−ｃ５ｄ１−ｄ５に従って、ＬＵＴ２２４の復号結果は“Ｂ”となり、ＬＵＴ２２４が出力する符号長ＣＬは“６”となる。
【００８３】
加算器１１４は、符号長ＣＬの値“６”と累算レジスタ１１５の出力“７”との加算結果ＳＭの値“１３”を出力し、桁上げ信号ＣＲは“０”、剰余ＲＭは“１３”となる。
【００８４】
＜第３サイクル＞
第３サイクルでは、第２サイクルで得られた桁上げ信号ＣＲの値“０”に従って、入力レジスタ１１２、及びバッファ１０１の出力は更新されない。
【００８５】
第１のバレルシフタレジスタ２２２は、バレルシフタ１１１が出力するｄ６−ｄ１５ｅ１−ｅ６を取り込み、第２のバレルシフタレジスタ２２３は、バレルシフタ２２１が出力するｂ１−ｂ６ｃ１−ｃ５ｄ１−ｄ５を取り込む。シフト量レジスタ２２５は符号長ＣＬの値“６”を取り込み、累算レジスタ１１５は剰余ＲＭの値“１３”を取り込む。
【００８６】
バレルシフタ１１１のシフト量ＳＨ１の値“１４”に従って、バレルシフタ１１１はｄ１２−ｄ１５ｅ１−ｅ１２を出力する。シフト量レジスタ２２５が出力するシフト量ＳＨ３の値“６”に従って、バレルシフタ２２１はｃ１−ｃ５１−ｄ１１を出力する。バレルシフタ２２１の出力ｃ１−ｃ５ｄ１−ｄ１１に従って、ＬＵＴ２２４の復号結果は“Ｃ”となり、ＬＵＴ２２４が出力する符号長ＣＬは“５”となる。
【００８７】
加算器１１４は、符号長ＣＬの値“５”と累算レジスタ１１５の出力“１３”との加算結果ＳＭの値“１８”を出力し、桁上げ信号ＣＲは“１”、剰余ＲＭは“２”となる。
【００８８】
次の第４サイクルにおいて、第３サイクルで得られた桁上げ信号ＣＲの値“１”に従って、入力レジスタ１１２はｄ１４−ｄ１５ｅ１−ｅ１２ｆ１−ｆ２を取り込み、バッファ１０１の出力はｆ３−ｆ１０ｇ１−ｇ８となる。
【００８９】
以降、図６の可変長復号化回路は、第２サイクル及び第３サイクルと同様に動作する。ただし、バッファ出力及び入力レジスタは、前のサイクルで得られた桁上げ信号ＣＲが“１”となる場合は更新され、“０”となる場合は更新されない。
【００９０】
このようにして第１サイクル以降、可変長復号した結果を毎サイクル出力することができる。特に復号化開始時において、入力バッファ１０１が最初にデータを出力する第０サイクルから１サイクル後の第１サイクルで、最初の復号化出力が得られる。
【００９１】
（第２の実施形態の変形例）
図８は、第２実施形態の変形例に係る可変長復号化回路のブロック図である。図８の可変長復号化回路は、図６の可変長復号化回路において、復号化部２２０の代わりに復号化部２４０を備えている。復号化部２４０は、復号化部２２０において、バレルシフタ２２１の代わりにバレルシフタ２４１を備えている。また、復号化部２４０は、符号長ＣＬを入力とし、これを変換した値を符号長ＣＬの代わりにシフト量レジスタ２２５に出力する符号長変換回路１４６を更に備えている。その他の構成要素については、図６を参照して説明したものと同じであり、符号長変換回路１４６は、図５を参照して説明したものと同じであるので、その説明を省略する。
【００９２】
バレルシフタ２４１は、符号長変換回路１４６が符号長ＣＬを変換して生成した４ビットで表される値（０〜１５）をシフト入力とし、このシフト入力の値に１を加算した値をシフト量とするビットシフトを行い、シフト結果を出力する。したがって、バレルシフタ２４１は、ビットストリームの連続する長さ３２ビット（２Ｎビット）のデータのうち、シフト入力の値Ｌに応じて（Ｌ＋２）番目のビットから連続する長さ１６ビット（Ｎビット）のデータを取り出して出力することになる。
【００９３】
バレルシフタ１１１とバレルシフタ２４１とは、いずれも４ビットの値をシフト入力とし、１６通りのビットシフトを行うことができるバレルシフタであり、同じものを用いることができる。したがって、図６の回路と比べると、回路の規則性が向上し、回路面積を縮小することができる。
【００９４】
なお、図８の回路では、符号長変換回路１４６に符号長ＣＬを出力し、符号長変換回路１４６の出力をシフト量レジスタ２２５に与えるようにしているが、符号長変換回路１４６をシフト量レジスタ２２５とバレルシフタ２４１との間に備えるようにしてもよい。
【００９５】
（第３の実施形態）
図９は、本発明の第３の実施形態に係る可変長復号化回路のブロック図である。図９の可変長復号化回路は、インタフェース部３１０と、復号化部３２０とを備えている。インタフェース部３１０は、バレルシフタ３１１と、入力レジスタ３１２と、加算器３１４と、累算レジスタ３１５とを備えている。復号化部３２０は、バレルシフタ３２１と、バレルシフタレジスタ３２２と、ＬＵＴ３２４とを備えている。
【００９６】
図９の可変長復号化回路は、図１の可変長復号化回路において、加算器１１４、バレルシフタ１２１及びＬＵＴ１２４の代わりに、加算器３１４、バレルシフタ３２１及びＬＵＴ３２４を備えたものである。図９の可変長復号化回路は、復号化した符号語の実際の符号長（１〜１６）を、これから１を減じた値（０〜１５）で表現する点に特徴がある。
【００９７】
図９において、バッファ１０１には、ビットストリームと、加算器３１４が出力する桁上げ信号ＣＲとが入力されている。入力レジスタ３１２は、最長符号長に対応した１６ビット構成であり、桁上げ信号ＣＲが“１”の場合に、バッファ１０１が出力している１６ビットの入力データをその次のサイクルで取り込む。
【００９８】
バッファ１０１は、入力されたビットストリームを格納し、桁上げ信号ＣＲが“１”の場合に、その次のサイクルにおいて、格納しているビットストリームを１６ビット単位でバレルシフタ３１１及び入力レジスタ３１２に出力する。バッファ１０１は、その出力を１サイクルの間保持する。
【００９９】
バレルシフタ３１１には、累算レジスタ３１５が出力する剰余ＲＭ（値：０〜１５）がシフト入力の値として入力されている。バレルシフタ３１１は、このシフト入力の値に１を加えた値をシフト量ＳＨ４（値：１〜１６）として用い、入力レジスタ３１２の出力を上位１６ビットとして、バッファ１０１の出力を下位１６ビットとして連結した３２ビットのデータのうち、（ＳＨ４＋１）ビット目〜（ＳＨ４＋１６）ビット目の１６ビットのデータをバレルシフタ３２１に出力する。ここで、連結して得られた３２ビットのデータの最上位ビットを１ビット目としている。
【０１００】
バレルシフタレジスタ３２２は、最長符号長に対応して１６ビットのデータを格納することができるようになっており、格納しているデータをバレルシフタ３２１及びＬＵＴ３２４に出力する。
【０１０１】
ＬＵＴ３２４は、バレルシフタレジスタ３２２の出力に対して復号化を行い、得られた復号結果ＤＣを出力するとともに、復号化された符号語の実際の符号長から１を減じた数を符号長ＣＬ（値：０〜１５）としてバレルシフタ３２１及び加算器３１４に出力する。ＬＵＴ３２４は例えば、可変長の各符号語に対応した、復号結果及び符号長から１を減じた数を有するテーブルである。ＬＵＴ３２４は、図１のＬＵＴ１２４とは、実際の符号長から１を減じた数を出力する点が異なり、その他の点は同様である。
【０１０２】
バレルシフタ３２１には、ＬＵＴ３２４が出力する符号長ＣＬ（値：０〜１５）がシフト入力として入力されている。バレルシフタ３２１は、このシフト入力の値に１を加えた値をシフト量ＳＨ５（値：１〜１６）として用い、バレルシフタレジスタ３２２の出力を上位１６ビットとして、バレルシフタ３１１の出力を下位１６ビットとして連結した３２ビットのデータのうち、（ＳＨ５＋１）ビット目〜（ＳＨ５＋１６）ビット目までの１６ビットのデータをシフト結果として出力する。ここで、連結して得られた３２ビットのデータの最上位ビットを１ビット目としている。バレルシフタ３２１は、このシフト結果をバレルシフタレジスタ３２２に書き込む。
【０１０３】
加算器３１４は、ＬＵＴ３２４が出力する符号長ＣＬ（値：０〜１５）と、累算レジスタ３１５が出力する剰余ＲＭ（値：０〜１５）と、定数“１”とを加算し、加算結果ＳＭを出力する。加算器３１４は、加算結果ＳＭのうち、桁上げ信号ＣＲをバッファ１０１及び入力レジスタ３１２に出力し、剰余ＲＭ（値：０〜１５）を累算レジスタ３１５に書き込む。
【０１０４】
すなわち、４ビットで表された符号長ＣＬと、累算レジスタ３１５の出力である４ビットで表された剰余ＲＭと、定数“１”との加算によって得られた５ビットの加算結果ＳＭのうち、最上位ビットが桁上げ信号ＣＲとなり、残り４ビットが加算結果ＳＭの１６を法とする新たな剰余ＲＭとなる。
【０１０５】
以上のように、図９の可変長復号化回路においては、ＬＵＴ３２４は、復号化した符号語の符号長から１を減じた値を符号長として出力する。すなわち、符号長“１”〜“１６”の符号語に対応して、符号長ＣＬの値をそれぞれ“０”〜“１５”として出力する。バレルシフタ３２１は、シフト量として値（０〜１５）が入力された場合に、この値に１を加えた数（１〜１６）のビット数のシフトを実行する。また、加算器３１４は、ＬＵＴ３２４が出力する符号長（０〜１５）と累算レジスタ３１５の出力（０〜１５）と定数“１”とを加算する。これらの点を除くと、図９の可変長復号化回路の動作は、第１の実施形態において図３を参照して説明したものと同様であるので、その説明を省略する。
【０１０６】
以上のように構成された図９の可変長復号化回路によると、バレルシフタ３１１とバレルシフタ３２１とは、いずれも４ビットの値（０〜１５）をシフト入力とし、１６通りのビットシフトを行うことができるバレルシフタであり、同じものを用いることができる。したがって、回路の規則性向上による回路面積の削減を図ることができる。また、図４の回路のように、符号長変換回路１４６を備える必要がない。
【０１０７】
（第４の実施形態）
図１０は、本発明の第４の実施形態に係る可変長復号化回路のブロック図である。図１０の可変長復号化回路は、インタフェース部３１０と、復号化部４２０とを備えている。復号化部４２０は、バレルシフタ４２１と、第１のバレルシフタレジスタ４２２と、第２のバレルシフタレジスタ４２３と、ＬＵＴ４２４と、シフト量レジスタ４２５とを備えている。バッファ１０１及びインタフェース部３１０は、図９を参照して説明したものと同じであるので、その説明を省略する。
【０１０８】
図１０の可変長復号化回路は、図６の可変長復号化回路において、加算器１１４、バレルシフタ２２１及びＬＵＴ２２４の代わりに、加算器３１４、バレルシフタ４２１及びＬＵＴ４２４を備えたものである。図１０の可変長復号化回路は、図９の回路と同様に、復号化した符号語の実際の符号長（１〜１６）を、これから１を減じた値（０〜１５）で表現する点に特徴がある。
【０１０９】
第１のバレルシフタレジスタ４２２及び第２のバレルシフタレジスタ４２３は、最長符号長に対応して１６ビットのデータを格納することができるようになっている。第１のバレルシフタレジスタ４２２は、バレルシフタ３１１が出力する１６ビットのデータを格納する。第１のバレルシフタレジスタ４２２及び第２のバレルシフタレジスタ４２３は、格納しているデータをバレルシフタ４２１に出力する。
【０１１０】
バレルシフタ４２１には、シフト量レジスタ４２５の出力（値：０〜１５）がシフト入力の値として入力されている。バレルシフタ４２１は、このシフト入力の値に１を加えた値をシフト量ＳＨ６（値：１〜１６）として用い、第２のバレルシフタレジスタ４２３の出力を上位１６ビットとして、第１のバレルシフタレジスタ４２２の出力を下位１６ビットとして連結した３２ビットのデータのうち、（ＳＨ６＋１）ビット目〜（ＳＨ６＋１６）ビット目までの１６ビットのデータをシフト結果として出力する。ここで、連結して得られた３２ビットのデータの最上位ビットを１ビット目としている。バレルシフタ４２１は、このシフト結果を第２のバレルシフタレジスタ４２３に書き込むとともに、ＬＵＴ４２４に出力する。
【０１１１】
ＬＵＴ４２４は、バレルシフタ４２１の出力に対して復号化を行い、得られた復号結果ＤＣを出力し、復号化された符号語の実際の符号長から１を減じた数を符号長ＣＬ（値：０〜１５）としてシフト量レジスタ４２５に書き込むとともに、加算器３１４に出力する。ＬＵＴ４２４は、図９のＬＵＴ３２４と同様のものである。
【０１１２】
このように、図１０の可変長復号化回路においては、ＬＵＴ４２４は、復号化した符号語の符号長から１を減じた値を符号長として出力する。すなわち、符号長“１”〜“１６”の符号語に対応して、符号長ＣＬの値をそれぞれ“０”〜“１５”として出力する。バレルシフタ４２１は、シフト量として値（０〜１５）が入力された場合に、それぞれの値に１を加えた数（１〜１６）のビット数のシフトを実行する。また、加算器３１４は、ＬＵＴ４２４が出力する符号長（０〜１５）と累算レジスタ３１５の出力（０〜１５）と定数“１”とを加算する。これらの点を除くと、図１０の可変長復号化回路の動作は、第２の実施形態において図７を参照して説明したものと同様であるので、その説明を省略する。
【０１１３】
以上のように構成された図１０の可変長復号化回路によると、バレルシフタ３１１とバレルシフタ４２１とは、いずれも４ビットの値（０〜１５）をシフト入力とし、１６通りのビットシフトを行うことができるバレルシフタであり、同じものを用いることができる。したがって、回路の規則性向上による回路面積の削減を図ることができる。また、図８の回路のように、符号長変換回路１４６を備える必要がない。
【０１１４】
なお、以上の第１〜第４の実施形態においては、説明の簡便化のために各レジスタ幅は最長符号長Ｎに等しいとした。しかし、入力レジスタ、並びに第２及び第４の実施形態における第２のバレルシフタレジスタが出力したデータは、バレルシフタにおいて必ず１ビット以上シフトされるので、バレルシフタはこれらのレジスタが出力するデータの最上位ビットを出力することがない。したがって、これらのレジスタは、最上位ビットが不要であり、レジスタ幅を（Ｎ−１）ビットとしてもよい。すると、さらに回路規模を小さくし、回路面積を減らすことができる。この場合、バレルシフタには、最上位ビット以外のビットにデータが入力されるようにすればよい。
【０１１５】
また、以上の実施形態では、最長符号長が１６であるとして説明したが、最長符号長は他の値であってもよい。最長符号長が１６のような２のべきでない場合は、最長符号長以上の２のべきの値を仮の最長符号長として用いることとすればよい。このとき、入力レジスタ及びバレルシフタレジスタのレジスタ幅は仮の最長符号長に対応させる必要がある。また、加算器が、最長符号長を法とした加算結果に対する剰余を出力する機能を有するようにしてもよい。このとき、累算レジスタのレジスタ幅はこの剰余を格納できるようなものにする必要がある。
【０１１６】
【発明の効果】
以上説明したように、本発明によると、可変長復号化回路においてレジスタ数を削減し、バレルシフタの規模を小さくすることができる。したがって、可変長復号化回路の規模を小さくし、回路のレイアウト面積を小さくすることができる。また、復号化開始時に、ビットストリームが入力されてから最初に復号化出力を得るまでのサイクル数を削減することができる。
【図面の簡単な説明】
【図１】  本発明の第１の実施形態に係る可変長復号化回路のブロック図である。
【図２】  入力ビットストリームの例を示す説明図である。
【図３】  図１の可変長復号化回路におけるサイクル毎のデータフローの例を示す説明図である。
【図４】  第１の実施形態の変形例に係る可変長復号化回路のブロック図である。
【図５】  符号長変換回路についての説明図である。
【図６】  本発明の第２の実施形態に係る可変長復号化回路のブロック図である。
【図７】  図６の可変長復号化回路におけるサイクル毎のデータフローの例を示す説明図である。
【図８】  第２実施形態の変形例に係る可変長復号化回路のブロック図である。
【図９】  本発明の第３の実施形態に係る可変長復号化回路のブロック図である。
【図１０】  本発明の第４の実施形態に係る可変長復号化回路のブロック図である。
【図１１】  従来の可変長復号化回路の例のブロック図である。
【図１２】  図１１の可変長復号化回路におけるサイクル毎のデータフローの例を示す説明図である。
【符号の説明】
１０１  バッファ
１１０，３１０  インタフェース部
１２０，１４０，２２０，２４０，３２０，４２０  復号化部
１１１，１２１，１４１，２２１，２４１，３１１，３２１，４２１  バレルシフタ
１１２，３１２  入力レジスタ
１１４，３１４  加算器
１１５，３１５  累算レジスタ
１２２，３２２  バレルシフタレジスタ
１２４，２２４，３２４，４２４  ルックアップテーブル（ＬＵＴ）
１４６  符号長変換回路
２２２，４２２  第１のバレルシフタレジスタ
２２３，４２３  第２のバレルシフタレジスタ
２２５，４２５  シフト量レジスタ
ＤＣ  復号結果
ＣＬ  符号長
ＳＭ  加算結果
ＣＲ  桁上げ信号
ＲＭ  剰余
【図１】
0004559652.tif 000002
【図２】
0004559652.tif 000003
【図３】
0004559652.tif 000004
【図４】
0004559652.tif 000005
【図５】
0004559652.tif 000006
【図６】
0004559652.tif 000007
【図７】
0004559652.tif 000008
【図８】
0004559652.tif 000009
【図９】
0004559652.tif 000010
【図１０】
0004559652.tif 000011
【図１１】
0004559652.tif 000012
【図１２】
0004559652.tif 000013