(57)【特許請求の範囲】
【請求項１】
複数のフィルタについて、複数の入力データとフィルタを構成する複数のフィルタ係数のそれぞれとをブースアルゴリズムを用いて積和演算するフィルタ処理装置であって、
１又は２以上の部分積を生成する複数の部分積生成ユニットと、
前記複数の部分積生成ユニットにより生成される部分積の総和を生成する加算部と、
前記複数の部分積生成ユニットのいずれかに前記複数の入力データのいずれかを入力する第１の選択部とを有し、
前記複数の部分積生成ユニットは、前記入力データと当該入力データに対応付けられたフィルタ係数との組を入力して部分積を生成するものであって、第１のフィルタ演算及び第２のフィルタ演算において、その少なくとも一部が共通に使用される部分積生成ユニットを含み、
各部分積生成ユニットは、フィルタ係数の所定ビットと前記入力データとの部分積を演算する部分積生成部を少なくとも１以上有するものであって、前記複数のフィルタ係数に応じて演算可能な部分積の個数及び／又は部分積の桁数が異なる構成を有し、
前記第１の選択部は、一のフィルタ毎に当該フィルタを構成する各フィルタ係数の値を演算可能な前記部分積生成ユニットを選択して前記入力データを入力させるフィルタ演算装置。
【請求項２】
前記部分積生成ユニットに２以上の部分積生成部が含まれる場合、当該部分積生成部は異なる桁数の演算を行うものであって、
前記複数の部分積生成ユニットのうち１つは、他と生成可能な部分積のうち最も大きいものの桁数が異なるものを含む
ことを特徴とする請求項１記載のフィルタ処理装置。
【請求項３】
一の部分積生成ユニットに含まれる部分積生成部の個数は、他の部分積生成ユニットに含まれる部分積生成部の個数と異なる
ことを特徴とする請求項１又は２に記載のフィルタ処理装置。
【請求項４】
一のフィルタの演算の際には、一のフィルタ係数から一の部分積生成ユニットにて生成された部分積を選択し、前記加算部の一の入力に入力する第２の選択部を更に有し、
前記第２の選択部は、他のフィルタの演算の際には、他の部分積生成ユニットにて生成された部分積の一部を選択し、前記一の部分積生成ユニットの出力に替えて前記加算器の一の入力へ入力する
ことを特徴とする請求項１乃至３のいずれか１項記載のフィルタ処理装置。
【請求項５】
前記部分積生成ユニットは、２２ｉ（ｉ≧０）のｉに対応する複数の部分積生成部からなる
ことを特徴とする請求項１乃至４のいずれか１項記載のフィルタ処理装置。
【請求項６】
前記複数の前記部分積生成部の一部又は全部について、その出力の替わりに零を選択して前記加算器へ入力する第３の選択部を有する
ことを特徴とする請求項５記載のフィルタ処理装置。
【請求項７】
２２ｉ（ｉ≧０）のｉに対応する複数の部分積生成部の少なくとも一部の部分積生成部は、前記フィルタ係数の所定ビットからブースのアルゴリズムに従ってデコードした符号データを求めるブースデコーダと、前記ブースデコーダと前記入力データとの積を求める乗算部と、前記乗算部の選択結果を前記ｉに応じて所定ビットシフトするビットシフト部とを有する
ことを特徴とする請求項５項記載のフィルタ処理装置。
【請求項８】
前記部分積生成部は、対応付けられるフィルタ係数の所定ビットについて、ブースのアルゴリズムに従ってデコードした符号データがいずれも１である場合、前記入力データをビットシフトするビットシフト部のみから構成される
ことを特徴とする請求項５乃至７のいずれか１項記載のフィルタ処理装置。
【請求項９】
前記一部の部分積生成部は、対応付けられるフィルタ係数の所定ビットについて、ブースのアルゴリズムに従ってデコードした符号データの１以上が−２、−１、２のいずれかである
ことを特徴とする請求項７項記載のフィルタ処理装置。
【請求項１０】
フィルタのうち１つは、６タップフィルタであって、
Ｈ．２６４に準拠した動き補償処理及び／又は画面内予測処理におけるフィルタ演算を実行する
ことを特徴とする請求項１乃至９のいずれか１項記載のフィルタ処理装置。
【請求項１１】
フィルタのうち１つは、６タップフィルタであって、
Ｈ．２６４、又はＨ．２６４及びＶＣ−１に準拠した動き補償処理におけるフィルタ演算を実行するフィルタ演算器である
ことを特徴とする請求項１乃至９のいずれか１項記載のフィルタ処理装置。
【請求項１２】
複数種類の乗数群について、複数の被乗数と乗数群を構成する複数の乗数のそれぞれとブースアルゴリズムを用いて積和演算する乗算器であって、
１又は２以上の部分積を生成する複数の部分積生成ユニットと、
前記複数の部分積生成ユニットにより生成される部分積の総和を生成する加算部と、
前記複数の部分積生成ユニットのいずれかに前記複数の被乗数のいずれかを入力する第１の選択部とを有し、
前記複数の部分積生成ユニットは、前記被乗数と当該被乗数に対応付けられた乗数との組を入力して部分積を生成するものであって、第１の乗数群と前記被乗数との第１の積和演算と、第２の乗数群と前記被乗数との第２の積和演算において、その少なくとも一部が共通に使用される部分積生成ユニットを含み、
各部分積生成ユニットは、フィルタ係数の所定ビットと前記入力データとの部分積を演算する部分積生成部を少なくとも１以上有するものであって、前記複数のフィルタ係数に応じて演算可能な部分積の個数及び／又は部分積の桁数が異なる構成を有し、
前記第１の選択部は、一のフィルタ毎に当該フィルタを構成する各フィルタ係数の値を演算可能な前記部分積生成ユニットを選択して前記入力データを入力させる乗算器。
【請求項１３】
予測画像を生成する動き補償処理装置であって、
垂直方向の入力データに対してフィルタ演算を行なう第１のフィルタ演算部と、
水平方向の入力データに応じてフィルタ演算を行なう第２のフィルタ演算部と、
前記第１及び第２フィルタ演算部の演算結果又は第１及び第２のフィルタ演算に入力する入力データに対して重み付けを行なう重み付け演算部とを有し、
前記第１及び第２フィルタ演算部は、複数のフィルタについて、複数の前記入力データとフィルタを構成する複数のフィルタ係数のそれぞれとをブースアルゴリズムを用いて積和演算するフィルタ演算部であって、
１又は２以上の部分積を生成する複数の部分積生成ユニットと、
前記複数の部分積生成ユニットにより生成される部分積の総和を生成する加算部と、
前記複数の部分積生成ユニットのいずれかに前記複数の入力データのいずれかを入力する第１の選択部とを有し、
前記複数の部分積生成ユニットは、前記入力データと当該入力データに対応付けられたフィルタ係数との組を入力して部分積を生成するものであって、第１の乗数群と前記被乗数との第１の積和演算と、第２の乗数群と前記被乗数との第２の積和演算において、その少なくとも一部が共通に使用される部分積生成ユニットを含み、
各部分積生成ユニットは、フィルタ係数の所定ビットと前記入力データとの部分積を演算する部分積生成部を少なくとも１以上有するものであって、前記複数のフィルタ係数に応じて演算可能な部分積の個数及び／又は部分積の桁数が異なる構成を有し、
前記第１の選択部は、一のフィルタ毎に当該フィルタを構成する各フィルタ係数の値を演算可能な前記部分積生成ユニットを選択して前記入力データを入力させる動き補償処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動画の圧縮符号化復号に使用される動き補償処理におけるフィルタ演算を実行するに好適なフィルタ処理装置及び乗算器、並びにこれらを具備する動き補償処理装置に関する。
【背景技術】
【０００２】
次世代ＤＶＤ（Digital Versatile Disk）やＤＴＶ（デジタルテレビ）に採用が決定しているＨ．２６４／ＡＶＣやＶＣ−１といった新しいコーデックがある。これらの復号装置においては、動き補償部での動き補償予測フィルタのフィルタ演算をブースのアルゴリズムを適用した乗算器で構成される場合がある。
【０００３】
乗算器の演算時間は、部分積加算をするために必要とする時間と桁上げ信号吸収をするために必要な時間の総和であり、演算速度を高速にする上でこれらの処理時間の短縮が問題となる。その対策として加算回路を減らすために部分積の数そのものを削減する必要がある。そのためには乗数の連続する複数ビットを一まとめのグループにして、このグループに対応した部分積を生成すれば部分積を削減することができる。そこで部分積数削減のために用いられるのが２次のブースである。２次のブースとは、乗数を２ビットごとに区切り、各組と下位組の最上位ビットの計３ビットをひとまとめにするというアルゴリズムを適用した部分積削減の手法である。 
【０００４】
しかしながら、上記のようなコーデックのフィルタ演算を行なう際、これをブースのアルゴリズムを適用した乗算器で構成すると、多数の乗算器が必要となり回路規模が増大する。また、同様にＨ．２６４の画面内予測における予測画像の生成に使用されるフィルタ演算をブースのアルゴリズムを適用した乗算器で適用すると回路規模は増大する。
【０００５】
これは、Ｈ．２６４やＶＣ−１といった規格では、従来のＭＰＥＧ（Moving Picture Experts Group）２などに比べて極めて複雑な演算を要求されるからである。下記表１に、ＭＰＥＧ２、Ｈ．２６４、ＶＣ−１の機能比較を示す。
【０００６】
【表１】
0004516051.tif 000002
【０００７】
ところで、従来、動き補償のフィルタ演算回路の規模を縮小させる技術が特許文献１に開示されている。図１３は、特許文献１に記載の画像処理装置における累積加算フィルタ（ディジタルフィルタ）を示すブロック図である。図１３に示すように、従来のディジタルフィルタは、入力画像信号の画素ライン数を計測し、そのカウンタモジューロが拡大縮小率に応じて選択的に切り替えられるカウンタ５０３と、カウンタ５０３の係数値に応じたフィルタ係数を出力する係数メモリ５０２と、入力画像信号に対しフィルタ係数を乗算する乗算器５０１と、乗算器５０１の出力又は累積加算値を保持する累積加算メモリ５０６と、乗算器５０１の出力に累積加算メモリ５０６内の保持内容を加算する加算器５０４と、カウンタ５０３の係数値に従って乗算器５０１又は加算器５０４の出力を選択的に累積加算メモリ５０６に伝達するセレクタ５０５とを有する。乗算器５０１、加算器５０４を１つとし、累積演算によりフィルタ出力を得ることで所要ハードウェア量を削減している。
【特許文献１】特開２００１−１６０１４０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記特許文献１のように、累積演算することでハードウェア量を削減しようとしても、ステップ数が増大し、処理速度が遅くなり現実的ではない。特に、Ｈ．２６４やＶＣ−１といったフィルタのタップ数が多い場合には、演算が複雑になるため、更に処理速度が遅くなるという問題点がある。
【課題を解決するための手段】
【０００９】
本発明にかかるフィルタ処理装置は、複数のフィルタについて、複数の入力データとフィルタを構成する複数のフィルタ係数のそれぞれとをブースアルゴリズムを用いて積和演算するフィルタ処理装置であって、１又は２以上の部分積を生成する複数の部分積生成ユニットと、前記複数の部分積生成ユニットにより生成される部分積の総和を生成する加算部と、前記複数の部分積生成ユニットのいずれかに前記複数の入力データのいずれかを入力する第１の選択部とを有し、前記複数の部分積生成ユニットは、前記入力データと当該入力データに対応付けられたフィルタ係数との組を入力して部分積を生成するものであって、第１のフィルタ演算及び第２のフィルタ演算において、その少なくとも一部が共通に使用される部分積生成ユニットを含み、各部分積生成ユニットは、フィルタ係数の所定ビットと前記入力データとの部分積を演算する部分積生成部を少なくとも１以上有するものであって、前記複数のフィルタ係数に応じて演算可能な部分積の個数及び／又は部分積の桁数が異なる構成を有し、前記第１の選択部は、一のフィルタ毎に当該フィルタを構成する各フィルタ係数の値を演算可能な前記部分積生成ユニットを選択して前記入力データを入力させるものである。
【００１０】
本発明においては、入力データと当該入力データに対応付けられたフィルタ係数との組を部分積生成ユニットに入力する際、各フィルタ係数に応じた部分積生成ユニットを選択して入力可能とする第１の選択部を有する。このため、フィルタ係数に応じた部分積精製ユニットを使用して入力データとの部分積を演算させることができる。
【発明の効果】
【００１１】
本発明によれば、処理速度を低下させることなくハードウェア量を削減することができるブースアルゴリズムを利用したフィルタ処理装置、乗算器、及びこれを利用した動き補償処理装置を提供することができる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。この実施の形態は、本発明を、異なる種類のフィルタ演算を実効させるフィルタ処理器（乗算器）に適用したものである。本実施の形態は、ブースアルゴリズムを利用したフィルタ演算器において、部分積生成ユニットの機能と、乗数となるフィルタ係数とに着目し、冗長な回路を省略することでハードウェア量を削減する。なお、本実施の形態においては、フィルタ演算器として説明するが、複数種類の予め定められた乗数群と任意の被乗数群とを乗算させる乗算器とすることも可能である。
【００１３】
（１）ブースのアルゴリズムを適用した乗算器
本実施の形態にかかるフィルタ演算器は、ブースのアルゴリズムを使用して乗算を行うフィルタ演算器である。ここでは先ず、本発明の理解を容易とするため、２次のブースアルゴリズムを利用した乗算器について説明しておく。
【００１４】
乗数Ｙを符号付き８ビット整数
Ｙ＝−ｙ[７]・２７＋ｙ[６]・２６＋ｙ[５]・２５＋ｙ[４]・２４＋ｙ[３]・２３＋ｙ[２]・２２＋ｙ[１]・２１＋ｙ[０]・２０
とすると、任意整数である被乗数Ｘとの積Ｐ＝Ｘ×Ｙは以下のようになる。
【００１５】
【数１】
0004516051.tif 000003
【００１６】
この（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）を算出するものをブースデコーダ、Ｘ×（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])×２２ｉを部分積という。ここで、本明細書においては、ブースデコーダにより求められるデコード値（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）を符号データということとする。また、Ｘ×（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])×２２ｉ（部分積）を生成する回路を部分積生成ユニット、Ｘ×（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])×２２ｉのうち、各ｉに対応した部分積を生成する回路を部分積生成部、符号データ（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）を求める回路をブースデコーダ、符号データ×被乗数からなる演算を行ない部分積を求める回路を乗算部、部分積のうち、×２２ｉの演算を実行する部分をビットシフト部ということとする。
【００１７】
ここで、下記表２に示すように、符号データ（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）の値の組み合わせは８通りしかなく、０、±１、±２の値のみしかとらない。よって、乗算器は、０、±Ｘ、±２Ｘに２２ｉを乗算した値（部分積）を算出して加算する値の組み合わせの対応（真理値表）として書ける。すなわち、符号データの値は８通りしかないため、ブースデコーダは、単なる組み合わせ論理回路により得ることができる。
【００１８】
【表２】
0004516051.tif 000004
【００１９】
ここで、０、±Ｘ、±２Ｘのうち、２Ｘの生成は１ビットのシフトで行なうことができる。一方、負数の生成は被乗数Ｘが２の補数表現であるのでＸの各ビットを反転させ最下位ビットに１を加えればよい。これを実現するために、例えば、符号データ（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）を生成する回路（ブースデコーダ）は、乗数Ｙの入力に対して部分積の絶対値（０、Ｘ、２Ｘ）を選択するための２つの信号と反転を選択するための１つの信号とからなる３つの信号を生成する。また、乗算部は、この３つの信号を受けて、絶対値が０の場合は０を、Ｘの場合は被乗数Ｘ を、２Ｘの場合は被乗数Ｘを１ビットシフトしたものを選択し、さらに、反転が必要な場合はその値を反転させて部分積を生成することができる。さらに、×２２ｉを実行するビットシフト部は、単純にビット線を２ｉだけシフトさせればよい。
【００２０】
図１は、このような２次のブースのアルゴリズムに従って乗算を実行する乗算器を示すブロック図である。乗算器４００は、被乗数Ｘを出力するレジスタＦ０と、乗数Ｙを出力するレジスタＦ７を有する。更に、乗数Ｙ及び被乗数Ｘが入力され部分積を生成する部分積生成ユニット４０１と、部分積生成ユニット４０１にて生成された部分積を加算する加算器４５０とを有する。部分積生成ユニット４０１は、４つの部分積生成部４１０、４２０、４３０、４４０を有する
【００２１】
各部分積生成部は、上述したように、乗数Ｙのうち所定ビットが入力され、ブースのアルゴリズムに従って符号データ（０、±１、±２）を生成するブースデコーダと、得られた符号データと被乗数Ｘとの乗算結果を出力する乗算部と、乗算部の演算結果のビットシフトを行なうビットシフト部とから構成される。
【００２２】
各部分積生成部は、Ｘ×（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])×２２ｉの"ｉ"に対応したものとなっており、例えば乗数Ｙが８ビット（ｙ０〜ｙ７とする）であれば、ｉ＝０〜３であり、それぞれＸ×（−２・ｙ１＋ｙ０＋０)×２０、Ｘ×（−２・ｙ３＋ｙ２＋ｙ１）×２２、Ｘ×（−２・ｙ５＋ｙ４＋ｙ３）×２４、Ｘ×（−２・ｙ７＋ｙ６＋ｙ５)×２６を求める。図１においては、これらの部分積を求める部分積生成部を、それぞれ４１０、４２０、４３０、４４０としている。なお、本実施の形態においては、ブースデコーダでデコードする乗数Ｘが８ビットを例にとって説明するが、これ未満、又は以上であってもよいことは勿論である。その場合は、部分積生成部の個数を適宜調整すればよい。
【００２３】
次に、実際の演算を例にとって、この乗算器４００の動作について説明する。８ビットの乗数Ｙは、図２（ａ）のように表すことができる。乗数を２ビットごとに区切り、各組と下位組の最上位ビットの計３ビット（ただしｙ−１＝０）のデータから符号データが得られる。これらに被乗数を乗算し、対応するビットシフト（×２ｉ）を演算することで部分積を生成することができる。このため、図２（ｂ）に示すように、レジスタＦ７は８ビットを出力するシフトレジスタからなり、乗数Ｙ｛ｙ０〜ｙ７｝を出力する。このとき部分積生成部４１０には、乗数Ｙのうち下位２ビット{ｙ０、ｙ１}、部分積生成部４２０、４３０、４４０にはそれぞれ、{ｙ１、ｙ２、ｙ３}、{ｙ３、ｙ４、ｙ５}、{ｙ５、ｙ６、ｙ７}を入力する。部分積生成部４１０は、入力されたこれらの所定ビットから符号データを生成するブースデコーダ４１１と、得られた符号データと被乗数Ｘとの乗算を行なう乗算部４１２と、乗算結果を所定ビットシフトするビットシフト部４１３とを有する。他の部分積生成部４２０、４３０、４４０も同様に構成される。ここでは、被乗数Ｘ＝３５８（１６６Ｈ）、乗数Ｙ＝１２３（７ＢＨ）の乗算について説明する。下記表２は、演算工程における各出力値を示す。
【００２４】
【表３】
0004516051.tif 000005
【００２５】
Ｘ×Ｙ＝３５８×１２３＝４４０３４（ＡＣ０２Ｈ）
Ｙ＝１２３（７ＢＨ）
＝(−２・０＋１＋１)・２６
＋（−２・１＋１＋１）・２４
＋（−２・１＋０＋１）・２２
＋（−２・１＋１＋０）・２０
＝２・２６＋０・２４＋（−１）・２２＋（−１）・２０
よって、下記となる。
Ｘ×Ｙ＝{（２×３５８）×２６}    ・・・部分積生成部４１０
＋{（０×３５８）×２４}    ・・・部分積生成部４２０
＋{（−１×３５８）×２２}    ・・・部分積生成部４３０
＋{（−１×３５８）×２０}    ・・・部分積生成部４４０
【００２６】
先ず、被乗数入力部Ｆ０からは"３５８"が各部分積生成部４１０、４２０、４３０、４４０に入力される。乗数入力部Ｆ７からは、各部分積生成部４１０、４２０、４３０、４４０に、それぞれ{ｙ０、ｙ１}＝{１、１}、{ｙ１、ｙ２、ｙ３}＝{１、０、１}、{ｙ３、ｙ４、ｙ５}＝{１、１、１}、{ｙ５、ｙ６、ｙ７}＝{１、１、０}が入力される。ブースデコーダ４１１、４２１、４３１、４４１は入力された所定ビットから、それぞれ（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])＝（−２・ｙ１＋ｙ０＋０)、（−２・ｙ３＋ｙ２＋ｙ１）、（−２・ｙ５＋ｙ４＋ｙ３）、（−２・ｙ７＋ｙ６＋ｙ５)の演算に対応する符号データを出力する。上記の式より本例では、各ブースデコーダ４１１、４２１、４３１、４４１は、それぞれ、"−１"、"−１"、"０"、"２"を出力する。
【００２７】
各乗算部４１２、４２２、４３２、４４２は、上記符号データ×被乗数Ｘを演算して、それぞれビットシフト部４１３、４２３、４３３、４４３へ入力する。ビットシフト部４１３はそのまま加算器４５０へ出力する。なお、本例においては説明の明確のためビットシフト部４１３を設けているが設ける必要はない。ビットシフト部４２３、４３３、４４３は、受け取った結果をそれぞれ２ビット、４ビット、６ビットシフトさせた後、加算器４５０へ入力する。
【００２８】
本例の加算器４５０は、全加算器（フルアダー）４５１、４５２と、半加算器（ハーフアダー）４５３と、結果を受け取るレジスタ４５４とを有する。各ビットシフト部４１３、４２３、４３３、４４３から入力された値は、加算器４５０にて加算され、乗算結果Ｐとして出力される。
【００２９】
このように、２次のブースのアルゴリズムを使用すると、乗数を、０、±１、±２の符号データ×２２ｉとし、被乗数と演算を行なわせるので、部分積の個数が略半分となる。よって加算器にて加算する部分積の個数を略半減させることができるので、乗算器を小型化することができる。
【００３０】
（２）ハードウェア低減の原理
上述したように、本実施の形態にかかるフィルタ演算器は、部分積生成ユニットの機能又は能力（以下、機能という。）とフィルタ係数（乗数）とに着目してハードウェア量を削減する。本実施の形態にかかるフィルタ演算器は、得に、後述するＨ．２６４やＶＣ−１の動き補償処理や、Ｈ．２６４の画面内予測処理等に使用されるフィルタ演算を実行させる演算器に適用することで得にそのハードウェア削減効果が大きくなる。これらはタップ数の多いフィルタの演算であって、極めて複雑であり、非常に大きな演算回路を必要とするからである。なお、上記フィルタ演算に限らず、複数のフィルタ演算を実行させるフィルタ演算器に適用することができる。またフィルタ演算に限らず、予め定められた乗数と任意の被乗数とを乗算する乗算器に適用することも可能である。
【００３１】
先ず、極めて簡単な例を使用して、上記ブースのアルゴリズムを適用したフィルタ演算器のハードウェア削減の原理について説明する。ここでは、２種類の、いずれも２タップフィルタである、フィルタ係数Ａ（Ａ０、Ａ１）、フィルタ係数Ｂ（Ｂ０、Ｂ１）のフィルタ演算を行なう場合を例にとって説明する。また、フィルタ係数Ａ０、Ｂ１の乗算に必要な部分積生成ユニットの機能を機能ｆ０、フィルタ係数Ａ１、Ｂ０の乗算に必要な部分積生成ユニットの機能を機能ｆ１であるとする。この場合、このようなフィルタ演算器は図３のように構成することができる。すなわち、フィルタ演算器３００は、フィルタ係数Ａのフィルタ演算（フィルタ演算Ａという）を実行するフィルタ演算器３１０、フィルタ係数Ｂのフィルタ演算（フィルタ演算Ｂという）を実行するフィルタ演算器３２０、及び被乗数Ｘ（Ｘ０、Ｘ１）のフィルタ演算器３１０、３２０への入力切り替える入力切替部３０１から構成することができる。
【００３２】
フィルタ係数Ａ（Ａ０、Ａ１）のフィルタ演算器３１０は、入力Ｘ（Ｘ０、Ｘ１）に対し、それぞれ機能ｆ０、ｆ１の部分積生成ユニット３１１、３１２を使用して、Ａ０×Ｘ０、Ａ１×Ｘ１を実行する。フィルタ係数Ｂ（Ｂ０、Ｂ１）のフィルタ演算器３２０は、入力Ｘ（Ｘ０、Ｘ１）に対し、それぞれ機能ｆ１、ｆ０の部分積生成ユニット３２１、３２２を使用して、Ｂ０×Ｘ０、Ｂ１×Ｘ１を実行する。なお、上述したように、これらの部分積生成ユニット３１１、３１２、３２１、３２２は、１以上の部分積生成部を有し、各部分積生成部は、ブースデコーダ、乗算部、及びビットシフト部を含み、乗数及び被乗数に基づき部分積を生成する回路とする。
【００３３】
ここで、部分積生成ユニットの機能について説明する。フィルタ演算器を構成する部分積生成ユニットは、複数の部分積生成部を備えるが、その演算能力に応じて当該部分積生成部の構成を異なるもとすることができる。すなわち、図１、２に示す部分積生成ユニットは、４つの部分積生成部を設け、Ｘ×（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])×２２ｉのｉ＝３まで、×６４までの演算能力を有する。一方、乗数Ｘを６ビットで表すことができれば部分積生成部は３つ、すなわち×１６までの演算能力を有すればよく、乗数Ｘを４ビットで表すことができればこれらの組は２つ、すなわち×４の演算能力を有すればよい。
【００３４】
このように部分積生成ユニットは、乗数Ｘに応じて部分積生成部が演算可能な最大の桁数が異なる。よって、生成可能な部分積の数が異なる。また、入力されるフィルタ係数によっては、例えば×１、×４、×１６、×６４のうち、例えば、×１６に対応する部分積生成部４３０にて生成される符号データが常に"０"である場合には、部分積生成部４３０を省略した構成とすることも可能である。すなわち、部分積生成部が３つであっても×６４までの演算を可能な構成とすることもできる。
【００３５】
また、×１に対応する部分積生成部のビットシフト部は省略することが可能である。更に、後述するように、符号データによっても部分積生成部の構成を異ならせることも可能である。つまり、生成される符号データが常に"０、１"であるような部分積生成部には、符号データ"０、１"にのみ対応できればよい。この場合には、少なくとも符号データと入力データを乗算する乗算部は不要である。更にまた、生成される符号データが常に"０"であるような部分積生成部は、符号データ"０"にのみ対応できればよい。この場合は、出力が常に"０"となるため、乗算部及びビットシフト部は不要である。このように、フィルタ演算器に入力されるフィルタ係数が予め定められており、生成される符号データが予め定まる場合には、その符号データに応じた部分積生成部の構成とすることができる。
【００３６】
本明細書においては、当該部分積生成部の個数、演算可能な最大桁数、生成可能な部分積の数、対応可能な符号データの種類を部分積生成ユニットの機能ということとする。例えば機能ｆ０は、×１６までを演算可能、すなわち３つの部分積生成部を備えたものとし、機能ｆ１は、４つの部分積生成部を備えたフィルタ演算器４１０と同様、×６４までを演算可能なもとすることなどができる。
【００３７】
しかしながらこのような構成であると、上述のタップ数の多いフィルタ演算を行なう場合や、複数種類のフィルタ演算を行なう場合には得にフィルタ演算器３００の回路規模及び消費電力が大きくなる。
【００３８】
そこで、本実施の形態においては、各フィルタ演算毎で機能が同等の部分積生成部を共有化することで回路規模を削減する。すなわち、複数種のフィルタ演算を実行可能とされる本実施の形態にかかるフィルタ演算器は、各フィルタ演算において、フィルタの各フィルタ係数は、それに応じた能力の部分積生成ユニットが対応付けられ、当該フィルタ係数と乗算すべき被乗数は、その対応づけにより対応づけられた部分積生成ユニットにて乗算されることで、フィルタ演算器を構成する部分積生成ユニットの個数を最小限にするものである。
【００３９】
図４は、本実施の形態にかかるフィルタ演算器を示すブロック図である。図４に示すように、フィルタ演算器１ａは、被乗数Ｘ（Ｘ０、Ｘ１）を入力するレジスタＦ１０、Ｆ１１と、機能選択部２１と、機能がそれぞれｆ０、ｆ１の部分積生成ユニット１６、１７と、加算器１２ａとを有する。ここで、機能選択部２１は、各部分積生成ユニット１６、１７にフィルタ係数Ａ、Ｂを入力するフィルタ係数入力部の機能を兼ねているものとする。
【００４０】
なお、図１に示す加算器４５０は、１つの部分積生成ユニットから生成された部分積を加算する加算器である。これに対し、図４に示す加算器１２ａは、部分積生成ユニット１６から出力される複数の部分積同士の加算、及び部分積生成ユニットから出力される複数の部分積同士の加算、のみならず、これらの加算結果を加算する役割も果たす。すなわち、乗算器４００において、加算器４５０は、乗数Ｙ×被乗数Ｘを実行する場合は、Ｙ×Ｘの演算途中で生成される部分積を加算する。フィルタ演算器１ａは、フィルタ演算ＸＹ（乗数Ｙ（Ｙ０、Ｙ１）、被乗数Ｘ（Ｘ０、Ｘ１）とする）＝Ｘ０×Ｙ０＋Ｘ１×Ｙ１を実行する際の、各演算"Ｘ０×Ｙ０"、"Ｘ１×Ｙ１"の演算途中で生成される部分積を加算し、さらに、当該乗算結果の加算（（Ｘ０×Ｙ０）＋（Ｘ０×Ｙ０））も合わせて実行するものである。
【００４１】
機能選択部２１は、フィルタ演算Ａを実行する場合には、機能ｆ０の部分積生成ユニット１６に被乗数Ｘ０を入力する。部分積生成ユニット１６は、当該部分積生成ユニットに含まれる１以上のブースデコーダがフィルタ係数Ａ０の該当するビットから符号データを生成し、乗算部による被乗数Ｘ０との乗算結果をビットシフト部にて所定ビットシフトすることで１又は複数の部分積を生成し、加算器１２ａへ入力する。また、機能ｆ１の部分積生成ユニット１７に被乗数Ｘ１を入力する。部分積生成ユニット１７も同様に、当該部分積生成ユニットに含まれる１以上のブースデコーダがフィルタ係数Ａ１の該当するビットから符号データを生成し、乗算部による被乗数Ｘ１との乗算結果をビットシフト部にて所定ビットシフトして１又は複数の部分積を生成し、加算器１２ａへ入力する。
【００４２】
一方、フィルタ演算Ｂを実行する場合には、機能ｆ１の部分積生成ユニット１７に被乗数Ｘ０を入力し、機能ｆ０の部分積生成ユニット１６に被乗数Ｘ１を入力する。部分積生成ユニット１６、１７は、それぞれ被乗数Ｘ０、Ｘ１と、フィルタ係数Ｂ０、Ｂ１を乗算して得られる１以上の部分積を加算器１２ａへ入力する。
【００４３】
ここで、本実施の形態においては、入力データがレジスタＦ１０、Ｆ１１にシリアルに入力する場合について説明している。従って、機能選択部２１は、レジスタＦ１０、Ｆ１１の出力を、該当する機能を備えた部分積生成ユニットへ入力するよう、レジスタＦ１０、Ｆ１１と、部分積生成ユニット１６、１７との間の接続を適宜切り替える。これに対し、レジスタＦ１０、Ｆ１１の出力をそれぞれ部分積生成ユニット１６、１７へ固定入力とし、Ｆ１０、Ｆ１１に入力される値を、部分積生成ユニット１６、１７の機能に応じて並べ替えて入力するようにしてもよい。すなわち、機能選択部２１をレジスタＦ１０、Ｆ１１の前段に配置してもよい。また、乗数であるフィルタ係数Ａ、Ｂも機能選択部２１が振り分けることしているが、この構成に限らず、フィルタ係数が格納されているメモリから該当する部分積生成ユニットに該当するフィルタ係数を供給できればよく、例えばフィルタ係数用の機能選択部を設けてもよい。
【００４４】
すなわち、本実施の形態にかかるフィルタ演算器１ａは、例えばフィルタ演算ＡＸ＝Ａ０×Ｘ０＋Ａ１×Ｘ１や、ＢＸ＝Ｂ０×Ｘ０＋Ｂ１×Ｘ１を実行させるときに、入力データと、当該入力データに対応付けられるフィルタ係数の組、すなわち、"Ａ０×Ｘ０"、"Ａ１×Ｘ１"、"Ｂ０×Ｘ０"、"Ｂ１×Ｘ１"を、その乗数（フィルタ係数）Ａ０、Ａ１、Ｂ０、Ｂ１と、各部分積生成ユニットの機能に応じ、どの部分積生成ユニットで行なわせればよいかを選択する機能選択部を設けるものである。この機能選択部を設けることで、各フィルタ演算にて、演算の順序に拘わらず当該演算が、それに必要な機能を具備する部分積生成ユニットで演算されるよう、乗数・被乗数が振り分けられる。よって、フィルタ演算器は、必要最小限の機能及び個数の部分積生成ユニットから構成することができる。結果、フィルタ演算器における部分積生成ユニットの個数、部分積生成ユニットで生成される部分積の個数を最小限に抑えることができ、後段の加算器へ入力する部分積の数を最小限の個数とすることができるのである。
【００４５】
本実施の形態においては、機能選択部２１を設けることにより、例えば機能ｆ０の部分積生成ユニット１６には、フィルタ演算Ａにおいては乗数Ａ０及び被乗数Ｘ０の演算を実行し、フィルタ演算Ｂにおいては、Ｂ１及び被乗数Ｘ１の演算を実行させることができる。すなわち、フィルタ演算Ａ、Ｂにおいて、入力される被乗数Ｘ０、Ｘ１との演算に必要な機能が同等な部分積生成ユニット１６、１７を共有させることで、本例においては、図３に示す回路に比してハードウェア量を半減させることができる。
【００４６】
ここで、図４においては、フィルタ演算毎に、必要な機能が同等である部分積生成ユニットを共有させることで、ハードウェア量を削減したが、部分積生成ユニットからの加算器１２への入力を共有することで更にハードウェア量を削減することができる。
【００４７】
図５は、本実施の形態にかかるフィルタ演算器の他の例を示す図である。フィルタ演算器１ｂは、被乗数Ｘ（Ｘ０、Ｘ１）を入力するレジスタＦ０、Ｆ１３と、部分積生成ユニット６、８と、加算器１２ｂとを有する。部分積生成ユニット８は、部分積生成部８０ａ、８０ｂ、８０ｃ及びビットシフト部８８のみからなる部分積生成部から構成される。各部分積生成部は、それぞれ、フィルタ係数の所定のビットから符号データを生成して被乗数Ｘと乗算するブースデコーダ（Booth Decoder：ＢＴＤ）・乗算部８１、８３、８５と、それに対応するビットシフト部８２、８４、８６とを有する。部分積生成ユニット６は、セレクタ６及び部分積生成部を構成するビットシフト部６２を有する。
【００４８】
本例にかかるフィルタ演算器もフィルタ演算Ａ、Ｂを行なうものとする。フィルタ演算Ａにおけるフィルタ係数Ａ（Ａ０、Ａ１）＝（１、２０）、フィルタ係数Ｂ（Ｂ０）＝（５３）とする。すなわち、フィルタ演算Ａは２タップのフィルタ演算であるのに対し、フィルタ演算Ｂは、１タップのフィルタ演算とする。なお、図５では、各部分積生成ユニット６、８にフィルタ係数Ａ、Ｂを入力するフィルタ係数入力部は図示を省略している。
【００４９】
フィルタ演算Ａでは、部分積生成ユニット６、８は、それぞれ、乗数である（Ａ０、Ａ１）＝（１、２０）と、被乗数Ｘ（Ｘ０、Ｘ１）との部分積を生成する。フィルタ演算Ｂでは、部分積生成部８が乗数のＢ０と被乗数Ｘ（Ｘ０）との部分積を生成する。ここで、フィルタ演算Ａにおいて、Ａ０＝１＝１×２０であるので、その符号データは＜１＞となる。また、Ａ１＝２０＝１×２４＋１×２２＋０×２０であるので、その符号データは、＜０，１，１＞となる。なお、＜＞内は、左から×１、×４、×１６のビットシフト部に対応する符号データとする。一方、フィルタ演算Ｂでは、Ｂ０＝５３＝１×２６＋０×２４＋１×２２＋１×２０であるので、その符号データは、＜１、１、０、１＞となる。よって、部分積生成ユニット８において、×６４に対応する符号データは"１"であるので、ＢＴＤ・乗算部を省略している。また、部分積生成ユニット６は、×１に対応する部分積生成部のみが必要であって、さらに対応する符号データは"１"であるので、ＢＴＤ・乗算部を省略している。なお、部分積生成ユニット６は、フィルタ演算Ａにおいては、フィルタ係数Ａ０が"１"であり、フィルタ演算Ｂでは乗数が存在しない。よって、ビットシフト部も必要なく、実際はレジスタＦ０からの値をそのまま加算器１２ｂへ入力すればよいが、ここでは説明の明確のため、ビットシフト部６２を図示している。
【００５０】
部分積生成ユニット８は、０ビットシフト部８２、２ビットシフト部８４、４ビットシフト部８６、及び６ビットシフト部８８を有する。ここで、フィルタ演算Ａにおいては、符号データが＜０、１、１＞であり、×１６までの演算能力で演算可能であるが、フィルタ演算Ｂにおいては、符号データが＜１、１、０、１＞であることから×６４までの演算能力が必要である。よって部分積生成ユニット８の６ビットシフト部８８はフィルタ演算Ａでは不要となる。また、フィルタ演算Ｂでは、部分積生成ユニット６は使用されない。すなわち、部分積生成ユニット６から加算器１２ｂへの入力は使用されない。
【００５１】
そこで、本例においては、この６ビットビットシフト結果を、部分積生成ユニット６がフィルタ演算Ａにおいて使用する加算器１２の入力へ出力する。このため、部分積生成部６はセレクタ６０を有し、フィルタ演算Ａの際にはレジスタＦ０の出力を選択し、フィルタ演算Ｂの際には、レジスタＦ１３から６ビットシフト部８８を介した出力を選択し、加算器の入力１０１へ入力する。
【００５２】
なお、本例においては、ビットシフト部８８、ビットシフト部６２に入力される符号データがいずれも１であるので対応するＢＴＤ・乗算部を省略したが、ＢＴＤ・乗算部を設けた場合であっても、加算器１２ｂの入力を共有できることはいうまでもない。本来であれば、部分積生成ユニット８から加算器１２ｂへの出力は４つ必要であり、本例においては、加算器１２ｂへの入力は合計５つ必要となる。この場合、加算器１２ｂを全加算器で構成すると、４つの全加算器が必要となる。これに対し、本例のように、異なるフィルタ演算間で加算器１２ｂの入力を共有することで、加算器１２ｂの入力数が４つ（１０１〜１０４）となり、加算器を構成する全加算器を１つ減らすことができる。
【００５３】
（３）具体例
以上の図４、図５に説明した概念を適用した具体例について説明する。ここでは、Ｈ.２６４及びＶＣ−１の両規格における動き補償処理におけるフィルタ演算を実行するフィルタ演算器に適用した場合について説明する。なお、本発明は、Ｈ．２６４及びＶＣ−１の両規格におけるフィルタ演算が可能な動き補償回路について説明するが、Ｈ．２６４のみのフィルタ演算を行なう動き補償回路、ＶＣ−１のみのフィルタ演算を行なう動き補償回路にも適用可能であることは勿論である。
【００５４】
（３−１）画像復号装置
ここでは先ず、Ｈ.２６４、ＶＣ−１の画像復号装置について説明する。図６及び図７は、それぞれＨ.２６４及びＶＣ−１に準拠して符号化された圧縮画像を復号する復号装置を示すブロック図である。Ｈ．２６４は、ＭＰＥＧ４  ＡＶＣ（Advanced Video Coding）とも呼ばれ、データ圧縮率は、ＭＰＥＧ−２の２倍以上、ＭＰＥＧ−４の１．５倍以上とすることができる圧縮符号化方式である。また、ＶＣ−１（Windows Media Video（ＷＭＶ）９）（登録商標）はマイクロソフト社が開発した動画圧縮技術であり、Ｈ．２６４と同程度のデータ圧縮率を有する。これらのアドバンスドコーデック（高圧縮コーデック）は、ＨＤ  ＤＶＤ（High Definition DVD）、又はブルーレイディスク等の次世代ＤＶＤ規格に適用される。
【００５５】
図６に示すように、Ｈ.２６４の画像復号装置１７０は、可変長復号部１７２、逆量子化部１７３、逆アダマール変換部１７４、加算器１７５、デブロッキングフィルタ１７６、動き補償部１８２、重み付け予測部１８１、画面内予測部１８０及び復号画像１７８を表示するモニタ１７９を有する。
【００５６】
可変長復号部１７２は、圧縮データ１７１が入力され可変長符号化された圧縮データを、変換テーブルに基づき可変長復号する。そして、可変長復号された復号データは、逆量子化部１７３にて逆量子化され、逆アダマール変換部１７４にて逆アダマール変換され加算器１７５へ送られる。加算器１７５の出力は、デブロッキングフィルタ１７６によりブロック歪を除去され、復号画像１７８とされ、モニタ１７９を介して表示される。
【００５７】
ここで、加算器１７５の出力が画面内予測部１８０にも入力され、予測画像１８３が生成される。また、復号画像が動き補償部１８２にて動き補償処理が行なわれ、重み付け予測部１８１にて重み付けされて予測画像１８３が生成される。加算器１７５は、Ｉフレーム処理の際には画面内予測部１８０からの予測画像１８３に予測誤差を加算し出力する。一方、Ｐ、Ｂフレーム処理の際には、切替部１７７にて切り替え、重み付け予測部１８１から送られる予測画像１８３に予測誤差を加算して出力する。
【００５８】
また、図７に示すように、ＶＣ−１の画像復号装置１９０も、画像復号装置１７０とほぼ同様に構成され、可変長復号部１９２、逆量子化部１９３、逆ＤＣＴ変換部１９４、加算器１９５、ループフィルタ１９６、重み付け予測部１９９、動き補償部２００、及び復号画像１９７を表示するモニタ１９８を有する。ＶＣ−１の画像復号装置１９０は、画面内予測を行なわない点、重み付け予測を行なってから動き補償処理を行う点、デブロッキングフィルタ１７６の代わりにループフィルタ１９６が使用される点が異なる。
【００５９】
（３−２）動き補償部
図８は、Ｈ.２６４及びＶＣ−１の規格に準拠したフィルタ演算を含む動き補償処理を実行する動き補償（ＭＣ）部を示すブロック図である。この動き補償部１５０は、Ｈ．２６４及びＶＣ−１のいずれの動き補償部でも使用可能な構成とされている。すなわち、両規格にて共有できる。この動き補償部１５０は、フィルタ演算部１ｃ、１ｄと、セレクタ１５１、１５４、１５７、１６０、１６１と、乗算器１５２、１５９、加算器１５３、１５５、１５８と、ラインメモリ１５６とを有する。
【００６０】
Ｈ．２６４では、フィルタ演算部１ｃ、１ｄにてフィルタ演算施した後、上述した重み付け係数を使用してオフセット付き重み補間信号を求め、予測画像１８３を得る。ここで、入力ＩＮから入力された参照ピクチャＲ０の画素値が、フィルタ演算部１ｃにて垂直方向フィルタによるフィルタ演算が実行され、フィルタ演算部１ｄにて水平方向フィルタによるフィルタ演算が施される。そして、生成されたフィルタ演算済みのデータがラインメモリ１５６に格納される。次に、参照ピクチャＲ１の画素値が入力ＩＮから入力されると、同様に、フィルタ演算部１ｃ、１ｄにてフィルタ演算が施され、フィルタ演算済みのデータに乗算器１５２にて重み係数を乗算し、加算器１５３にてオフセット値を加算する。一方、ラインメモリに格納されているデータがセレクタ１６０を介して乗算器１５９にて重み付き係数と乗算され、これらが加算器１５５にて加算され、オフセット付き重み補間信号Ｗ０Ｘ０＋Ｗ１Ｘ１＋Ｄを生成する。生成されたデータは、ラインメモリ１５６を経て出力ＯＵＴから出力される。
【００６１】
ＶＣ−１の場合は、入力ＩＮからのデータがセレクタ１６０、セレクタ１５７を介し、更にセレクタ１５１から乗算器１５２、加算器１５３をとおり、そしてセレクタ１６１を介してフィルタ演算器１ｃ、１ｄに入力される。フィルタ演算部１ｄの結果は、セレクタ１５１、セレクタ１５４を介してそのままラインメモリ１５６へ格納され、出力ＯＵＴから出力される。乗算器１５９、加算器１５８、乗算器１５２、加算器１５３では、以下の重み付けが実行される。
Ｈ＝（ｉＳｃａｌｅ×Ｆ＋ｉＳｈｉｆｔ＋３２）＞＞６
ここで、Ｆは入力値、ｉＳｃａｌｅ、ｉＳｈｉｆｔは重み係数を示す。
【００６２】
このように構成された動き補償部１５０は、セレクタ１６１、１５１、１５４、１６０にてフィルタ演算部１ｃ、１ｄへの入力、出力を適宜選択するため、重み付けをフィルタ演算後に実行するＨ．２６４であっても、重み付けをフィルタ演算前に実行するＶＣ−１であっても、いずれの演算にも適用可能である。
【００６３】
（３−３）フィルタ処理装置
次に、Ｈ．２６４及びＶＣ−１の両規格のフィルタ演算が可能なフィルタ演算部１ｃ、１ｅについて更に詳細に説明する。図９は、フィルタ演算部１ｃ、１ｅの詳細を示す図であって、本実施の形態にかかるフィルタ演算器を示すブロック図である。また、下記表４は、Ｈ．２６４及びＶＣ−１における輝度信号Ｇｙ、色差信号Ｇｃに対するフィルタ係数を示す。
【００６４】
【表４】
0004516051.tif 000006
【００６５】
この表４に示すように、Ｈ．２６４は、輝度信号Ｇｙが６タップフィルタ、色差信号Ｇｃは２タップフィルタのフィルタ演算となる。また、ＶＣ−１の輝度信号Ｇｙが４タップフィルタ、色差信号Ｇｃは２タップフィルタのフィルタ演算となる。フィルタ演算器１は、これら全てのフィルタ演算を可能としつつ、上述の方法により、ハードウェア資源を削減したものである。
【００６６】
図９に示すように、フィルタ演算器１は、入力される画素値を格納するレジスタＦ０〜Ｆ５と、第１の選択部としてのセレクタ２〜５を有する。更に、部分積生成ユニット６〜１１と、セレクタ６０、１１０と、加算器１２とを有する。
【００６７】
セレクタ２は、Ｆ１又はＦ２からの入力を選択して部分積生成ユニット７へ入力する。セレクタ３は、Ｆ２、Ｆ３、Ｆ４からの入力を選択して部分積生成ユニット８へ入力する。セレクタ４は、Ｆ３、Ｆ４、Ｆ５からの入力を選択して部分積生成ユニット８へ入力する。セレクタ５は、Ｆ４又はＦ５からの入力を選択して部分積生成ユニット１０へ入力する。
【００６８】
部分積生成ユニット７、８、９、１０は、それぞれ、フィルタ係数から符号データを生成し、Ｆ０〜Ｆ５を介して入力される画素値との乗算結果を求めるブースデコーダ及び乗算部の機能を有する回路部（ＢＴＤ・乗算部）７１、７３、８１、８３、８５、９１、９３、９５、１０１、１０３を有する。またこれらのＢＴＤ・乗算部に対応してそれぞれビットシフト部７２、７４、８２、８４、８６、９２、９４、９６、１０２、１０４が設けられている。さらに、部分積生成ユニット８、９は、６ビットシフト部８８、９８を有する。また、Ｆ０、Ｆ５は、ビットシフト部６２、１１２を介してそれぞれ第２の選択部としてのセレクタ６０、１１０に接続されている。なお、上述のように、ビットシフト部６２、７２、８２、９２、１０２、１１２にはビットシフトしないので実際には不要であるが説明の明確のためここでは図示している。
【００６９】
セレクタ６０には、Ｆ０からの入力の他、"０"、及び部分積生成ユニット８を構成するビットシフト部８８の出力が接続され、Ｆ０からの入力、"０"、ビットシフト部８８の出力のいずれかを選択して出力する。同様に、セレクタ１１０には、Ｆ５からの入力の他、"０"、及び部分積生成ユニット９を構成するビットシフト部９８の出力が接続され、Ｆ５からの入力、"０"、ビットシフト部９８の出力のいずれかを選択して出力する。なお、ビットシフト部８８、９８に対応するフィルタ係数から符号データを生成し、当該符号データと画素値との乗算結果を得るためのＢＴＤ・乗算部は省略してあるが、これは、後述するように、この６ビットシフト部８８、９８に対応するＢＴＤ・乗算部で生成すべき符号データがすべて１であり不要のためである。
【００７０】
更に、部分積生成ユニット７、１０は、部分積出力ではなく０を選択して加算器１２へ入力するための、第３の選択部としてのセレクタ７５、７６、１０５、１０６を有している。例えばＨ．２６４の色差信号Ｇｃのときなど当該部分積生成ユニット７、１０を使用しない場合には０を選択出力させる。
【００７１】
次に、このフィルタ演算装置の動作について具体的な数値と共に説明する。図１０にこのフィルタ演算器１に入力される値、Ｈ．２６４の輝度信号Ｇｙのフィルタ演算を実行する場合の各部が演算した値を示す。横軸は時間を示す。Ｆ０〜Ｆ５には６クロックで乗算すべき入力データが格納される。
【００７２】
タイミング６に示すように、レジスタＦ５までにデータがセットされたら、レジスタＦ０、Ｆ５の値はそのままセレクタ６０、１１０を介して入力Ｉ０、Ｉ１１から加算器１２へ入力される。レジスタＦ２〜Ｆ４の値は、それぞれ部分積生成ユニット７〜１０へ入力される。同時に各ＢＴＤ・乗算部には、乗数であるフィルタ係数の所定ビットが入力される。ここで、Ｈ．２６４の輝度信号Ｇｙのフィルタ係数は、{１、−５，２０，２０，−５，１}である。よって、Ｆ０、Ｆ５に対応する部分積生成ユニットに供給すべきフィルタ係数は"１"であるため、符号データを生成する必要はなく、よって上述したようにＦ０、Ｆ５に対応するＢＴＤ・乗算部は省略することができる。"−５"、"２０"、"２０"、"−５"は、Ｆ１〜Ｆ４に対応する部分積生成ユニット７〜１０に入力される。なお、図９ではフィルタ係数入力部及びビット線は図示を省略している（図２（ｂ）参照）。
【００７３】
例えば、フィルタ係数を８ビット｛ｙ０〜ｙ７｝とすると、部分積生成ユニット８のＢＴＤ・乗算部８１、８３、８５には、それぞれ｛ｙ０、ｙ１｝、｛ｙ１、ｙ２、ｙ３｝、｛ｙ３、ｙ４、ｙ５｝が入力され、上述のように（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])を演算して０、±１又は±２の符号データを求める。本例においては、ＢＴＤ・乗算部８１、８３、８５は、それぞれ"０，１，１"の符号データを得る。
【００７４】
そして各ＢＴＤ・乗算部は、得られた符号データとＦ０〜Ｆ５からの入力値とを乗算した結果を対応するビットシフト部へ入力する。各ビットシフト部は、乗算結果を所定ビットだけシフトし、加算器１２の入力Ｉ１〜Ｉ１０へ入力する。加算器１２でこれらの値を加算し、乗算結果として出力する。例えばタイミング６の場合は、加算結果がタイミング７で３２７９と得られる。フィルタ演算部は、これに丸めを考慮したシフト演算（＞＞）を施し、例えば３２７８の場合、その値は１０３として求まる。
【００７５】
次に、ＶＣ−１の輝度信号Ｇｙのフィルタ演算を実施する場合について説明する。ＶＣ−１の輝度信号Ｇｙについては、４タップフィルタであるので、入力データが４つ入力した時点で演算を開始することができるが、Ｈ．２６４と乗算結果の出力タイミングを合わせるため、本例においては、入力データがＦ５に格納された時点でＦ２〜Ｆ５の値を使用してフィルタ演算を実行させる。
【００７６】
ＶＣ−１の輝度信号Ｇｙのフィルタ係数は、例えば{−４、５３、１８、−３}である。ここでは、このフィルタ係数を例にとって具体的に説明する。なお、フィルタ係数−４、５３、１８、−３の符号データは、それぞれ＜−１、０＞、＜１、−１、１、１＞、＜１、１、−２＞、＜−１、１＞である。
【００７７】
ここで、本実施の形態においては、Ｆ０、Ｆ５に対応する部分積生成ユニットを省略した構成となっている。したがって、レジスタＦ５が、入力データをセレクタ１１０へ入力する場合は、入力データの部分積を求めることができず、そのまま加算器１２へ入力されることになる。また、レジスタＦ４に格納される入力データに対応するフィルタ係数"１８"の符号データは、＜１，１，−２＞であり、×１６までの部分積生成部を有している必要があるが、部分積生成ユニット１０は、×４までの演算能力しかない。またＦ３に格納される入力データに対応するフィルタ係数は"５３"の符号データは、＜１，−１，１，１＞であり、×６４までの部分積生成部を有している必要がある。
【００７８】
このように、入力データに対応する符号データから部分積を生成する部分積生成ユニットには、符号データ、すなわちフィルタ係数に応じて異なる機能（部分積の生成数）が求められる。そこで本実施の形態においては、これらのフィルタ係数と入力データとの組から部分積を生成させる部分積生成ユニットを、フィルタ演算器１に含まれる部分積生成ユニットの機能に応じて適切に割り当てる。このため、本実施の形態におけるフィルタ演算装置は、セレクタ２〜５を有している。このセレクタ２〜５により、フィルタ係数及び部分積生成ユニットの機能に応じて最適な部分積生成ユニットへレジスタＦ２〜Ｆ５の出力を選択して入力する。
【００７９】
ここで、上述したように、本実施の形態においては、セレクタ６０は、部分積生成ユニット８の６ビットシフト部８８を選択できるように構成され、セレクタ６０を介してビットシフト部８８とビットシフト部６２とは加算器の入力Ｉ０を共有している。すなわち部分積生成ユニット８は、ビットシフト部８８をセレクタ６０で選択することで実際には６ビットシフトまで可能な部分積生成ユニットとなる。これにより、フィルタ係数"５３"の演算が可能となる。このため、セレクタ３は、Ｆ３の入力を選択し、Ｆ３に格納された入力データを、部分積生成ユニット８へ入力する。このとき、セレクタ６０は、ビットシフト部８８を選択する。部分積生成ユニット８にはまた、図示せぬフィルタ係数入力部からフィルタ係数"５３"が入力される。ここでも、上述のように、フィルタ係数入力部の出力を８ビット｛ｙ０〜ｙ７｝とすると、ＢＴＤ・乗算部８１、８３、８５には、それぞれ｛ｙ０、ｙ１｝、｛ｙ１、ｙ２、ｙ３｝、｛ｙ３、ｙ４、ｙ５｝が入力される。なお、"５３"の｛ｙ５、ｙ６、ｙ７｝の各ビットから得られる符号データは"１"になるので、６ビットシフト部６３に対応するＢＴＤ・乗算部は省略している。
【００８０】
また、Ｆ２に格納されている値と対応するフィルタ係数は"−４"であり、部分積生成ユニットは、×１、×４の演算能力があればよい。よって、部分積生成ユニット７又は部分積生成ユニット１０を使用することができる。本例では、部分積生成ユニット７を使用することとする。このため、セレクタ２は、レジスタＦ２の出力を選択し、これを部分積生成ユニット７へ入力する。同時に対応するフィルタ係数"−４"がフィルタ係数メモリ（不図示）から、所定ビットずつ、部分積生成ユニット７の各ＢＴＤ・乗算部７１、７５へ入力される。各ＢＴＤ・乗算部７１、７５は、符号データ"−１"、"０"を生成し、レジスタＦ２からの入力データと乗算し、その結果を、それぞれビットシフト部７２、７４へ入力する。
【００８１】
同様に、セレクタ４は、レジスタＦ４の出力を選択し、部分積生成ユニット９へ入力する。同時に対応するフィルタ係数"１８"がフィルタ係数メモリ（不図示）から、所定ビットずつ、部分積生成ユニット９の各ＢＴＤ・乗算部９１、９３、９５へ入力される。また、セレクタ５は、レジスタＦ５の出力を選択し、部分積生成ユニット１０へ入力する。同時に対応するフィルタ係数"−３"がフィルタ係数メモリ（不図示）から、所定ビットずつ、部分積生成ユニット１０の各ＢＴＤ・乗算部１０１、１０３へ入力される。このように、セレクタ２〜５は、レジスタＦ２〜Ｆ４の値を、それに対応するフィルタ係数に応じた機能の部分積生成ユニットに選択入力する。
【００８２】
なお、例えば、レジスタＦ２の入力データを部分積生成ユニット１０に入力して部分積を生成させたり、レジスタＦ３の入力データを６ビットシフト部９８を含む部分積生成ユニット９に入力して部分積を生成させたりしてもよいことはいうまでもない。この場合、セレクタ１１０は、ビットシフト部１１２を選択する。また、フィルタ係数メモリ（不図示）は、対応する部分積生成ユニットの各ＢＴＤ・乗算部にフィルタ係数の所定ビットを入力すればよい。
【００８３】
セレクタ２〜５により、入力データに対応するフィルタ係数の部分積を求めることができる最適な機能の部分積生成ユニットを適宜選択することで、新たな部分積生成ユニットを設けることなく最小かつ機能を大幅に省略した部分積生成ユニットにて演算を可能とする。
【００８４】
また、レジスタＦ０、Ｆ５に接続されたセレクタ６０、１１０は、それぞれ加算器１２のそれぞれ入力Ｉ０、Ｉ１１に接続されている。上述したように、この加算器１２の入力Ｉ０、Ｉ１１は、ＶＣ−１の輝度信号Ｇｙのときに使用しないため、Ｆ３に格納される入力データと、これに乗算すべきフィルタ係数"５３"の部分積のうち、６ビットシフト部８８にて演算した値をセレクタ６０で選択可能に構成されている。この構成により、加算器１２の入力Ｉ０をビットシフト部６２とビットシフト部８８とで共有することができ、加算器１２への入力数を増やすことなく、部分積生成ユニット８は６ビットシフトの演算を可能とすることができる。部分積生成ユニット９におけるビットシフト部９８とビットシフト部１１２も同様である。
【００８５】
本実施の形態においては、各フィルタにおいて、フィルタ係数のそれぞれがその値に応じた機能を備える部分積生成ユニットに対応付けられ、セレクタ２〜５により、入力データのそれぞれに乗算すべきフィルタ係数に上記対応付けにより対応付けられた部分積生成ユニットに対して、入力データを入力する。このように機能に応じて適宜選択された部分積生成ユニットを使用してフィルタ演算を実行することで、フィルタ演算器における冗長な部分を削減することができる。すなわち、フィルタ演算器をブースのアルゴリズムを適用した乗算器としたとき、生成する部分積数を低減することができ、よって加算器への入力数が減り、加算器を構成する全加算器の個数（段数）を低減することができる。
【００８６】
更に、レジスタＦ０、Ｆ５の部分積を出力するセレクタ６０、１１０において、これが非活性な場合には、他の部分積生成ユニットで生成された部分積を選択させ出力させることで、ビット数の大きな演算を行なわなければならないときであっても、その部分積生成部のために部分積生成ユニット内に加算器１２への入力を増加させることがない。すなわち、部分積生成ユニット６のビットシフト部６２と部分積生成ユニット８のビットシフト部８８が加算器１２への入力Ｉ０を共有し、部分積生成ユニット１１のビットシフト部１１２と部分積生成ユニット９のビットシフト部９８が加算器１２への入力Ｉ１１を共有することで、加算器１２のへ入力個数を更に低減することができる。また、加算器の段数削減により演算処理速度が向上する。
【００８７】
（３−４）本実施の形態の効果
次に、本実施の形態にかかるフィルタ演算装置の加算器削減の効果について説明する。図１１は、本実施の形態にかかる加算器を示す図、図１２は比較例としての加算器を示す図である。図１１に示すように、本実施の形態にかかる加算器１２は、入力がＩ０〜Ｉ１１の１２個であるので全加算器１２１は１１個で構成することができる。１２２、１２３はレジスタで、前段の全加算器の出力を受け取る。１２４は半加算器で、この半加算器にて総和が演算され出力用のレジスタ１２５に演算結果が格納される。
【００８８】
これに対し、図１２に示す比較例は、本実施の形態とは異なり、セレクタ２〜５を設けて最適な部分積生成ユニットを選択することを行なわず、また、セレクタ６０、１１０を設けて加算器１２への入力の共有化を行なわなかった場合の加算器５００を示す図である。ＶＣ−１の輝度信号Ｇｙのフィルタ演算を行なう場合であって、フィルタ係数{−４，５３，１８，−３}の場合は、Ｆ２〜Ｆ５に対応する部分積生成ユニットは、それぞれ、２、４、３、２個の部分積を生成する。このため、それぞれ２、４、３、２個のブースデコーダ、乗算部及びビットシフト部の組が必要になる。また、フィルタ係数{−３，１８，５３，−４}の場合は、Ｆ２〜Ｆ５に対応する部分積生成ユニットは、それぞれ、２、３、４、２個の部分積を生成する。このため、それぞれ２、３、４、２個のブースデコーダ、乗算部及びビットシフト部の組が必要になる。これを可能に構成すると、図１２に示すように、加算器への入力が１６個必要になる。この加算器５００は、全加算器５０１が１５個必要となる。すなわち、本実施の形態においては、全加算器の個数を３割程度低減することができる。
【００８９】
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。例えば、本実施の形態は、画像復号装置として説明したが、画像符号化の際の動き補償部としても使用可能である。また、上記に例示したフィルタ演算のみならず、予め定められた乗数が入力される乗算器に本発明を適用することで、冗長な回路を削減しハードウェア低減することができる。
【００９０】
また、本実施の形態においては、２次のブースのアルゴリズムを適用した乗算器（フィルタ演算器）について説明したが、これに限るものではない。すなわち、３次以上の高次のブースのアルゴリズムであっても同様に適用することができる。
【図面の簡単な説明】
【００９１】
【図１】２次のブースのアルゴリズムに従って乗算を実行する乗算器を示すブロック図である。
【図２】（ａ）は、ブースのアルゴリズムにより符号データ生成に使用されるビットを説明する図、（ｂ）は、図１に示す乗算器の部分積生成ユニットの詳細を示す図である。
【図３】従来のフィルタ演算器の構成例を示す図できる。
【図４】本発明の実施の形態にかかるフィルタ演算器を示すブロック図である。
【図５】本実施の形態にかかるフィルタ演算器の他の例を示す図である。
【図６】Ｈ.２６４に準拠して符号化された圧縮画像を復号する復号装置を示すブロック図である。
【図７】ＶＣ−１に準拠して符号化された圧縮画像を復号する復号装置を示すブロック図である。
【図８】本発明の実施の形態にかかる動き補償処理を実行する動き補償部を示すブロック図である。
【図９】本発明の実施の形態にかかるフィルタ演算器の具体例を示すブロック図である。
【図１０】同フィルタ演算装置に入力される値、Ｈ．２６４の輝度信号Ｇｙのフィルタ演算を実行する場合の各乗算部、加算器等が演算した値を示す図である。
【図１１】本発明の実施の形態にかかる加算器を示す図である。
【図１２】比較例としての加算器を示す図である。
【図１３】特許文献１に記載の画像処理装置における累積加算フィルタ（ディジタルフィルタ）を示すブロック図である。
【符号の説明】
【００９２】
１，１ａ，１ｂ，１ｃ，１ｄ，２１０，３００，３１０，３２０  フィルタ演算器
２，３，４，５，６０，７５，７６，１０５，１０６，１１０，１５１，１５９，１６０  セレクタ
７，８，９，１０，１６，１７，３１１，３１２，３２１，３２２，４０１  部分積生成ユニット
１２，１２ａ，１２ｂ，２５０，４００，１５３，１５４，１５７  加算器
２１  機能選択部
６２，６３，７２，７４，８２，８４，８６，９２，９４，９６，１０２，１０４，１１２，１１３，２１２，２２２，２３２，２４２  ビットシフト部
７１，７３，８１，８３，８５，９１，９３，９５，１０１，１０３  ＢＴＤ・乗算部
１２１，４５１，４５２，４５３  全加算器
１２５，２５４，４０２，４０３，４０４  レジスタ
１５０  動き補償部
１５２，１５８  乗算器
１５６  ラインメモリ
１７０，１９０  画像復号装置
１７１  圧縮データ
１７２，１９２  可変長復号部
１７３，１９３  逆量子化部
１７４  逆アダマール変換部
１７５，１９５  加算部
１７６  デブロッキングフィルタ
１７７  切替部
１７８，１９７  復号画像
１７９，１９８  モニタ
１８０  画面内予測部
１８１，１９９  重み付け予測部
１８２，２００  動き補償部
１８３，２０１  予測画像
１９４  逆ＤＣＴ変換部
１９６  ループフィルタ
３０１  入力切替部
４１０，４２０，４３０，４４０  部分積生成部
４１１，４２１，４３１，４４１  ブースデコーダ
４１２，４２２，４３２，４４２  乗算部
４１３，４２３，４３３，４４３  ビットシフト部
【図１】
0004516051.tif 000007
【図２】
0004516051.tif 000008
【図３】
0004516051.tif 000009
【図４】
0004516051.tif 000010
【図５】
0004516051.tif 000011
【図６】
0004516051.tif 000012
【図７】
0004516051.tif 000013
【図８】
0004516051.tif 000014
【図９】
0004516051.tif 000015
【図１０】
0004516051.tif 000016
【図１１】
0004516051.tif 000017
【図１２】
0004516051.tif 000018
【図１３】
0004516051.tif 000019