(57)【要約】【課題】ハードウェア量及び消費電力を削減することができるブースアルゴリズムを利用したフィルタ演算器及び動き補償装置を提供すること。【解決手段】フィルタ演算器は、フィルタ係数と入力画素値とをブースアルゴリズムを用いて積和演算する。このため、画素値が入力される入力部と、ブースアルゴリズムに従って入力部からの出力をデコードして１又は複数の符号データを求め、対応するフィルタ係数と当該１又は複数の符号データのそれぞれとの積を求める繰り返し演算を行う２以上の演算部１０ｊと、入力部からの出力を選択して演算部１０ｊのいずれかに入力する入力選択セレクタ１３ｊと、入力部からの出力に基づき各演算部１０ｊにおける繰り返し演算回数及び繰り返し演算タイミングを決定し、この決定結果に基づき前記入力選択セレクタ１３ｊを制御する制御部３１とを有する。【選択図】図４
2008242594.tif 000002
【特許請求の範囲】
【請求項１】
乗数と被乗数とをブースアルゴリズムを用いて積和演算するフィルタ演算器であって、
前記乗数が入力される入力部と、
前記ブースアルゴリズムに従って前記入力部からの出力をデコードして１又は複数の符号データを求め、対応する被乗数と当該１又は複数の符号データのそれぞれとの積を求める繰り返し演算を行う２以上の演算部と、
前記入力部からの出力を選択して前記演算部のいずれかに入力する入力選択セレクタと、
前記入力部からの出力に基づき前記各演算部における繰り返し演算回数及び繰り返し演算タイミングを決定し、この決定結果に基づき前記入力選択セレクタを制御する制御部とを有するフィルタ演算器
【請求項２】
前記入力部は、現在の入力データと前回の入力データとの差分を求める減算器を有し、当該減算結果を出力する
ことを特徴とする請求項１記載のフィルタ演算器。
【請求項３】
前記各演算部の出力結果を加算する一の加算器を有し、
前記入力部は、現在の入力データと前回の入力データとの差分を求める減算器を有し、当該減算結果を出力し、
前記加算器は、前記前回の入力データの入力分までから求めた累積結果に、前記減算結果から前記演算部で求めた乗算結果を累積加算する
ことを特徴とする請求項１記載のフィルタ演算器。
【請求項４】
前記入力部は、前記演算部毎に対応して設けられ、
前記入力選択セレクタは、前記演算部毎に対応して設けられ、自己に対応する入力部、及び水平方向に隣接する画素値が入力される前記入力部からの出力のいずれかを選択して自己に対応する前記演算部に入力する
ことを特徴とする請求項１乃至３のいずれか１項記載のフィルタ演算器。
【請求項５】
前記入力部は、前記演算部毎に対応して設けられ、
前記入力選択セレクタは、前記演算部毎に対応して設けられ、自己に対応する入力部からの出力、及び垂直方向に隣接する画素値が入力される入力部からの出力のいずれかを選択して自己に対応する演算部に入力する
ことを特徴とする請求項１乃至３のいずれか１項記載のフィルタ演算器。
【請求項６】
前記入力部は、前記演算部毎に対応して設けられ、
前記入力選択セレクタは、前記演算部毎に対応して設けられ、自己に対応する入力部の出力、並びに水平及び垂直方向に隣接する画素値が入力される入力部からの出力のいずれかを選択して自己に対応する演算部に入力する
ことを特徴とする請求項１又は２記載のフィルタ演算器。
【請求項７】
一の水平方向の画素値に基づき前記各演算部で得られた出力結果を加算する、水平方向毎に対応して設けられた加算器と、
一の水平方向の画素値に基づき前記演算部で得られた出力結果を、当該水平方向に対応して設けられた前記加算器にて加算するよう選択する出力選択セレクタとを有し、
前記入力部は、現在の入力データと前回の入力データとの差分を求める減算器を有し、当該減算結果を出力し、
前記加算器は、前記出力選択セレクタから選択入力される値に基づいて、一の水平方向における前回の入力データの入力分までから求めた累積結果に、当該水平方向の画素値の減算結果から前記演算部で求めた乗算結果を累積加算する
ことを特徴とする請求項５又は６記載のフィルタ演算器。
【請求項８】
前記演算部は、
前記入力部から出力される出力データを下位から２ビット毎に区切り、各組のいずれかとその下位組の最上位ビットの計３ビットを選択する選択部と、
前記選択部から出力される３ビットのデータをブースアルゴリズムに従ってデコードして前記符号データを生成するブースデコーダと、
前記符号データと前記被乗数との積を求める乗算器と、
前記乗算器からの出力結果を所定ビットシフトするビットシフト部とを有する
ことを特徴とする請求項１乃至７のいずれか１項記載のフィルタ演算器。
【請求項９】
前記制御部は、前記減算結果の上位ビットから順に、ビットの値に変化がある位置をサーチし、当該サーチ結果に基づき前記繰り返し演算回数及び繰り返し演算タイミングを決定する
ことを特徴とする請求項１乃至８のいずれか１項記載のフィルタ演算器。
【請求項１０】
前記制御部は、前記減算結果の下位ビットから上位ビットまでの全ビットについて、ビットの値に変化がある位置をサーチし、当該サーチ結果に基づき前記繰り返し演算回数及び繰り返し演算タイミングを決定する
ことを特徴とする請求項１乃至８のいずれか１項記載のフィルタ演算器。
【請求項１１】
前記制御部は、前記減算結果を下位から２ビットごとに区切り、各組と下位組の最上位ビットの計３ビット毎のグループとし、各グループについて、全てのビットの値が同一か否かを判定し、当該判定結果に基づき前記繰り返し演算回数及び繰り返し演算タイミングを決定する
ことを特徴とする請求項１乃至８のいずれか１項記載のフィルタ演算器。
【請求項１２】
予測画像を生成する動き補償処理装置であって、
垂直方向の入力データに対してフィルタ演算を行なう第１フィルタ演算器と、
水平方向の入力データに応じてフィルタ演算を行なう第２フィルタ演算器と、
前記第１及び第２フィルタ演算器の演算結果又は第１及び第２のフィルタ演算に入力する入力データに対して重み付けを行なう重み付け演算部とを備え、
前記第１及び第２フィルタ演算器は、入力データとフィルタ係数とをブースアルゴリズムを用いて積和演算するフィルタ演算器であって、
乗数と被乗数とをブースアルゴリズムを用いて積和演算するフィルタ演算器であって、
前記乗数が入力される入力部と、
前記ブースアルゴリズムに従って前記入力部からの出力をデコードして１又は複数の符号データを求め、対応する被乗数と当該１又は複数の符号データのそれぞれとの積を求める繰り返し演算を行う２以上の演算部と、
前記入力部からの出力を選択して前記演算部のいずれかに入力する入力選択セレクタと、
前記入力部からの出力に基づき前記各演算部における繰り返し演算回数及び繰り返し演算タイミングを決定し、この決定結果に基づき前記入力選択セレクタを制御する制御部とを有する動き補償処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動画の圧縮符号化復号に使用される動き補償処理におけるフィルタ演算を実行するために好適なフィルタ処理装置及びこれを具備する動き補償処理装置に関する。
【背景技術】
【０００２】
次世代ＤＶＤ（Digital Versatile Disk）やＤＴＶ（デジタルテレビ）に採用が決定しているＨ．２６４／ＡＶＣやＶＣ−１といった新しいコーデックがある。これらの復号装置においては、動き補償部での動き補償予測フィルタのフィルタ演算をブースのアルゴリズムを適用した乗算器で構成される場合がある。
【０００３】
乗算器の演算時間は、部分積加算をするために必要とする時間と桁上げ信号吸収をするために必要な時間の総和であり、演算速度を高速にする上でこれらの処理時間の短縮が問題となる。その対策として加算回路を減らすために部分積の数そのものを削減する必要がある。そのためには乗数の連続する複数ビットを一まとめのグループにして、このグループに対応した部分積を生成すれば部分積を削減することができる。そこで部分積数削減のために用いられるのが２次のブースである。２次のブースとは、乗数を２ビットごとに区切り、各組と下位組の最上位ビットの計３ビットをひとまとめにするというアルゴリズムを適用した部分積削減の手法である。
【０００４】
しかしながら、上記のようなコーデックのフィルタ演算を行なう際、これをブースのアルゴリズムを適用した乗算器で構成すると、多数の乗算器が必要となり回路規模が増大する。また、同様にＨ．２６４の画面内予測における予測画像の生成に使用されるフィルタ演算をブースのアルゴリズムを適用した乗算器で適用すると回路規模は増大する。
【０００５】
ところで、特許文献１には、乗算器の数を極力少なくし、回路規模を小さくした離散コサイン変換器が開示されている。図１３は、特許文献１に記載の離散コサイン変換器を示す図である。この離散コサイン変換器は、加算器６１２、６４０、６４２、差分器６１０、レジスタ６１４、マルチプレクサ６１６、６５２、マルチプレクサ乗算器６１８、６２０、６２２、６３４、バタフライ加算器６２６、６２８、６３０、６３２、６４４、６４６、６４８、６５０、乗算器６２４、６３６、６３８、及び量子化器６５４を有する。画像データの交流成分として差分器６１０による差分データを得て、これに対しＤＣＴを行う。そして、差分についてのＤＣＴとすることによって、必要な係数の数が少なくなるため、乗算器の数を減少できる。さらに、同一の係数を異なるデータに対し乗算する場合にはマルチプレクサ乗算器６１８、６２０、６２２、６３４を用い、時分割で乗算を行う。このため、乗算器の数をさらに減少することができる。また、乗算すべき係数を量子化器６５４の量子化テーブルに対し予め乗算しておくため、乗算回数を減少することができる。このように、特許文献１に記載の離散コサイン変換器は、離散コサイン変換の特性を利用し、乗算とバタフライ演算を利用して高速に同演算を実行するものである。
【０００６】
また、特許文献２には、空間フィルタリング等の画像信号処理を時系列的に行なう信号処理装置が開示されている。この信号処理装置は、同じ部分積乗算器を繰り返し用いることで乗算器の回路規模を削減するものである。図１４は、特許文献２に記載の情報処理装置におけるプロセッサ、レジスタ回路及び係数レジスタを示す図である。情報処理装置は、入出力バッファ回路７４０、５個の係数Ｗ１〜Ｗ５を保持する係数レジスタ７１１、及びプロセッサ７１０を有する。入出力バッファ回路７４０は、バス８２０に、５行分の画素データを保持するＲＡＭ７４６、及び画素データＤ１〜Ｄ５をそれぞれ保持する５個のレジスタ７４１〜７４５を有する。プロセッサ７１０は、２個の乗算器７１０ａ、７１０ｂ、加算器７１０ｃ、レジスタ７１０ｄ、ゲート回路７１０ｅ、データ入力側のマルチプレクサ７１０ｆ、７１０ｇ、及び係数入力側のマルチプレクサ７１０ｈ、７１０ｉを有する。
【０００７】
この情報処理装置においては、乗算器７１０ａ、７１０ｂにてそれぞれ部分積Ｐ１＝Ｗ１×Ｄ１、Ｐ２＝Ｗ２×Ｄ２を計算する。部分積Ｐ１、Ｐ２及びレジスタ７１０ｄの値がゲート回路７１０ｅを解して加算器７１０ｃに入力され、和が求められ、その結果がレジスタ７１０ｄに保持される。ゲート回路７１０ｅには図示しない制御回路からゲート信号が印加されレジスタ７１０ｄの値が部分積と加算される。次に乗算器７１０ａ、７１０ｂにてそれぞれ部分積Ｐ３＝Ｗ３×Ｄ３、Ｐ４＝Ｗ４×Ｄ４を計算し、前回の部分積の和に加算される。さらに、乗算器７１０ａにて部分積Ｐ５＝Ｗ５×Ｄ５が計算され、乗算器７１０ｂには零が入力される。よって、Ｐ５のみ前回までの部分積の和に加算され、レジスタ７１０ｄに保持される。レジスタ７１０ｄの内容をゲート７１７及びバス８１０を解して図示せぬメモリセル部に保存する。こうして注目データＤ３について隣接するデータＤ２、Ｄ１、Ｄ４、Ｄ５についての５次のベクトルコンボリューションインテグラルを得ることができる。このように、特許文献２に記載の情報処理装置においては、ベクトルコンボリューションの次数５に対し２個の乗算器７１０ａ、７１０ｂとすることができる。
【特許文献１】特開平６−４４２９１号公報
【特許文献２】特開昭６２−１０５２８７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１に記載の離散コサイン変換器においては、高速に乗算を実施するために、大規模な乗算器を使用するため回路規模が大きいという問題点がある。また汎用的に処理させるために、特に画像の性質を利用するものではないため、演算精度が求められる場合には、その分だけ演算器も演算精度分だけ回路規模も大きくなり、消費電力増大につながる。
【０００９】
また、特許文献２に記載の情報処理装置においては、プロセッサ内においては、乗算器を５つ設ける場合に比して演算時間が３倍となってしまうという問題点がある。
【課題を解決するための手段】
【００１０】
本発明に係るフィルタ演算器は、乗数と被乗数とをブースアルゴリズムを用いて積和演算するフィルタ演算器であって、前記乗数が入力される入力部と、前記ブースアルゴリズムに従って前記入力部からの出力をデコードして１又は複数の符号データを求め、対応する被乗数と当該１又は複数の符号データのそれぞれとの積を求める繰り返し演算を行う２以上の演算部と、前記入力部からの出力を選択して前記演算部のいずれかに入力する入力選択セレクタと、前記入力部からの出力に基づき前記各演算部における繰り返し演算回数及び繰り返し演算タイミングを決定し、この決定結果に基づき前記入力選択セレクタを制御する制御部とを有するものである。
【００１１】
本発明にかかる動き補償処理装置は、予測画像を生成する動き補償処理装置であって、垂直方向の入力データに対してフィルタ演算を行なう第１フィルタ演算器と、水平方向の入力データに応じてフィルタ演算を行なう第２フィルタ演算器と、前記第１及び第２フィルタ演算器の演算結果又は第１及び第２のフィルタ演算に入力する入力データに対して重み付けを行なう重み付け演算部とを備え、前記第１及び第２フィルタ演算器は、入力データとフィルタ係数とをブースアルゴリズムを用いて積和演算するフィルタ演算器であって、乗数と被乗数とをブースアルゴリズムを用いて積和演算するフィルタ演算器であって、前記乗数が入力される入力部と、前記ブースアルゴリズムに従って前記入力部からの出力をデコードして１又は複数の符号データを求め、対応する被乗数と当該１又は複数の符号データのそれぞれとの積を求める繰り返し演算を行う２以上の演算部と、前記入力部からの出力を選択して前記演算部のいずれかに入力する入力選択セレクタと、前記入力部からの出力に基づき前記各演算部における繰り返し演算回数及び繰り返し演算タイミングを決定し、この決定結果に基づき前記入力選択セレクタを制御する制御部とを有するものである。
【００１２】
本発明においては、入力部からの出力に基づき各演算部における繰り返し演算回数及び繰り返し演算タイミングを決定し、この決定結果に基づき入力選択セレクタを制御し、入力部からの出力を選択して演算部のいずれかに入力することにより、一の入力部からの出力に対し、複数の演算部を共有化することができ、ハードウェアを削減しつつ繰り返し演算回数を最小限として演算処理時間の短縮化を図ることができる。
【発明の効果】
【００１３】
本発明によれば、ハードウェア量及び消費電力を削減することができるブースアルゴリズムを利用したフィルタ演算器及び動き補償装置を提供することができる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。本実施の形態は、ブースアルゴリズムを利用したフィルタ演算器において、演算器を有効利用することで、繰り返し演算回数を減少して処理速度を向上させるものである。
【００１５】
先ず、本実施の形態にかかるフィルタ演算器を適用することができる画像復号装置について説明する。ここでは、一例として、Ｈ.２６４及びＶＣ−１における動き補償処理におけるフィルタ演算を実行するフィルタ演算器に適用した場合について説明する。なお、本発明は、Ｈ．２６４及びＶＣ−１の両規格におけるフィルタ演算が可能な動き補償回路について説明するが、Ｈ．２６４のみのフィルタ演算を行なう動き補償回路、ＶＣ−１のみのフィルタ演算を行なう動き補償回路、又はその他ＭＰＥＧ（Moving Picture Experts Group）２、４等のフィルタ演算器にも適用可能であることは勿論である。
【００１６】
先ず、Ｈ.２６４、ＶＣ−１の画像復号装置について説明する。図１及び図２は、それぞれＨ.２６４及びＶＣ−１に準拠して符号化された圧縮画像を復号する復号装置を示すブロック図である。Ｈ．２６４は、ＭＰＥＧ４  ＡＶＣ（Advanced Video Coding）とも呼ばれ、データ圧縮率は、ＭＰＥＧ−２の２倍以上、ＭＰＥＧ−４の１．５倍以上とすることができる圧縮符号化方式である。また、ＶＣ−１（Windows Media Video（ＷＭＶ）９）（登録商標）はマイクロソフト社が開発した動画圧縮技術であり、Ｈ．２６４と同程度のデータ圧縮率を有する。これらのアドバンスドコーデック（高圧縮コーデック）は、ＨＤ  ＤＶＤ（High Definition DVD）、又はブルーレイディスク等の次世代ＤＶＤ規格に適用される。
【００１７】
図１に示すように、Ｈ.２６４の画像復号装置２００は、可変長復号部２０２と、逆量子化部２０３と、逆アダマール変換部２０４と、加算器２０５と、デブロッキングフィルタ２０６と、動き補償部２１２と、重み付け予測部２１１と、画面内予測部２１０と、復号画像２０８を表示するモニタ２０９を有する。
【００１８】
可変長復号部２０２は、圧縮データ２０１が入力され可変長符号化された圧縮データを、変換テーブルに基づき可変長復号する。そして、可変長復号された復号データは、逆量子化部２０３にて逆量子化され、逆アダマール変換部２０４にて逆アダマール変換され加算器２０５へ送られる。加算器２０５の出力は、デブロッキングフィルタ２０６によりブロック歪を除去されて復号画像２０８とされ、モニタ２０９を介して表示される。
【００１９】
ここで、加算器２０５の出力が画面内予測部２１０にも入力され、予測画像２１３が生成される。また、復号画像が動き補償部２１２にて動き補償処理が行なわれ、重み付け予測部２１１にて重み付けされて予測画像２１３が生成される。加算器２０５は、Ｉフレーム処理の際には画面内予測部２１０からの予測画像２１３に予測誤差を加算し出力する。一方、Ｐ、Ｂフレーム処理の際には、切替部２０７にて切り替え、重み付け予測部２１１から送られる予測画像２１３に予測誤差を加算して出力する。
【００２０】
また、図２に示すように、ＶＣ−１の画像復号装置２２０も、画像復号装置２００とほぼ同様に構成され、可変長復号部２２２、逆量子化部２２３、逆ＤＣＴ変換部２２４、加算器２２５、ループフィルタ２２６、重み付け予測部２２９、動き補償部２３０、及び復号画像２２７を表示するモニタ２２８を有する。ＶＣ−１の画像復号装置２２０は、画面内予測を行なわない点、重み付け予測を行なってから動き補償処理を行う点、デブロッキングフィルタ２０６の代わりにループフィルタ２２６が使用される点が異なる。
（３−２）動き補償部
【００２１】
図３は、Ｈ.２６４及びＶＣ−１の規格に準拠したフィルタ演算を含む動き補償処理を実行する動き補償（ＭＣ）部を示すブロック図である。この動き補償部３００は、Ｈ．２６４及びＶＣ−１のいずれの動き補償部でも使用可能な構成とされている。すなわち、両規格にて共有できる。この動き補償部３００は、フィルタ演算器３０２、３０３と、セレクタ３０１、３０４、３０７、３１０、３１３と、乗算器３０４、３１２、加算器３０６、３０８、３１１と、ラインメモリ３０９とを有する。
【００２２】
Ｈ．２６４では、フィルタ演算器３０２、３０３にてフィルタ演算施した後、上述した重み付け係数を使用してオフセット付き重み補間信号を求め、予測画像２１３を得る。ここで、入力ＩＮから入力された参照ピクチャＲ０の画素値が、フィルタ演算器３０２にて垂直方向フィルタによるフィルタ演算が実行され、フィルタ演算器３０３にて水平方向フィルタによるフィルタ演算が施される。そして、生成されたフィルタ演算済みのデータがラインメモリ３０９に格納される。次に、参照ピクチャＲ１の画素値が入力ＩＮから入力されると、同様に、フィルタ演算器３０２、３０３にてフィルタ演算が施され、フィルタ演算済みのデータに乗算器３０５にて重み係数を乗算し、加算器３０６にてオフセット値を加算する。一方、ラインメモリに格納されているデータがセレクタ３１３を介して乗算器３１２にて重み付き係数と乗算され、これらが加算器３０８にて加算され、オフセット付き重み補間信号Ｗ０Ｘ０＋Ｗ１Ｘ１＋Ｄを生成する。生成されたデータは、ラインメモリ３０９を経て出力ＯＵＴから出力される。
【００２３】
ＶＣ−１の場合は、入力ＩＮからのデータがセレクタ３１３、セレクタ３１０を介し、更にセレクタ３０４から乗算器３０５、加算器３０６を介し、そしてセレクタ３０１を介してフィルタ演算器３０２、３０３に入力される。フィルタ演算器３０３の結果は、セレクタ３０４、セレクタ３０７を介してそのままラインメモリ３０９へ格納され、出力ＯＵＴから出力される。乗算器３１２、加算器３１１、乗算器３０５、加算器３０６では、以下の重み付けが実行される。
Ｈ＝（ｉＳｃａｌｅ×Ｆ＋ｉＳｈｉｆｔ＋３２）＞＞６
ここで、Ｆは入力値、ｉＳｃａｌｅ、ｉＳｈｉｆｔは重み係数を示す。
【００２４】
このように構成された動き補償部３００は、セレクタ３０１、３０４、３０７、３１０、３１３にてフィルタ演算器３０２、３０３への入力、出力を適宜選択するため、重み付けをフィルタ演算後に実行するＨ．２６４であっても、重み付けをフィルタ演算前に実行するＶＣ−１であっても、いずれの演算にも適用可能である。
【００２５】
次に、このような動き補償部等に使用することができるフィルタ演算器について詳細に説明する。なお、本実施の形態においては、Ｈ．２６４やＶＣ−１を例にとって説明するが、本フィルタ演算器は、ＭＰＥＧ４、２などにおけるフィルタ演算器としても使用することが可能である。
【００２６】
図４は、フィルタ演算器３０２、３０３の詳細を示す図であって、本実施の形態にかかるフィルタ演算器を示すブロック図である。フィルタ演算器３０２、３０３は同様の構成のため、ここではフィルタ演算器１として説明する。また、本実施の形態においては、５つのフィルタ係数を有し、５つの画素値から一の演算結果を求めるフィルタ演算を実行する場合について説明するため、５つの演算部１０１〜１０５を有する。ただし、例えば、Ｈ．２６４であれば、輝度信号Ｇｙが６タップフィルタ、色差信号Ｇｃは２タップフィルタのフィルタ演算であり、ＶＣ−１であれば輝度信号Ｇｙが４タップフィルタ、色差信号Ｇｃは２タップフィルタのフィルタ演算となり、それぞれフィルタ係数に対応するフィルタ演算器を用いる。なお、フィルタ演算器を１又はフィルタ係数未満の数のみ用意して、フィルタ演算器を繰り返し使用して演算を行なうようにしてもよい。
【００２７】
本実施の形態にかかるフィルタ演算器１は、ブースデコーダ及び部分積生成部からなり、繰り返し演算を行う演算部１０１〜１０５を共有することでフィルタ演算器の規模を大幅に小さくしつつ、演算部１０１〜１０５を高効率に利用することで演算処理速度を向上するものである。また、減算器１２１〜１２５により、現在の画像データと１つ前の画像データとの差分をとってフィルタ演算することで演算量を低減し、これにより、演算時間を短縮化する。さらに、演算部１０１〜１０５の各演算結果を一の加算器２１にて加算することで、隣接する演算部を利用した場合であっても演算結果を元に戻すことなく加算処理を行なうことができる。
【００２８】
ここで、本実施の形態にかかるフィルタ演算器は、ブースのアルゴリズムを使用して乗算を行うフィルタ演算器である。そこで、本実施の形態にかかるフィルタ演算器の理解を容易とするため、先ず、２次のブースアルゴリズムを利用した乗算器について説明する。
【００２９】
乗数Ｙを符号付き８ビット整数
Ｙ＝−ｙ[７]・２７＋ｙ[６]・２６＋ｙ[５]・２５＋ｙ[４]・２４＋ｙ[３]・２３＋ｙ[２]・２２＋ｙ[１]・２１＋ｙ[０]・２０
とすると、任意整数である被乗数Ｘとの積Ｐ＝Ｘ×Ｙは以下のようになる。
【００３０】
【数１】
2008242594.tif 000003
【００３１】
この（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）を算出するものをブースデコーダ、Ｘ×（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])×２２ｉを部分積という。ここで、本明細書においては、ブースデコーダにより求められるデコード値（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）を符号データということとする。また、Ｘ×（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])×２２ｉ（部分積）を生成する回路を部分積生成ユニット、Ｘ×（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])×２２ｉのうち、各ｉに対応した部分積を生成する回路を部分積生成部、符号データ（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）を求める回路をブースデコーダ、符号データ×被乗数からなる演算を行ない部分積を求める回路を乗算部、部分積のうち、×２２ｉの演算を実行する部分をビットシフト部ということとする。
【００３２】
ここで、下記表１に示すように、符号データ（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）の値の組み合わせは８通りしかなく、０、±１、±２の値のみしかとらない。よって、乗算器は、０、±Ｘ、±２Ｘに２２ｉを乗算した値（部分積）を算出して加算する値の組み合わせの対応（真理値表）として書ける。また、符号データの値は８通りしかないため、ブースデコーダは、単なる組み合わせ論理回路により得ることができる。
【００３３】
【表１】
2008242594.tif 000004
【００３４】
０、±Ｘ、±２Ｘのうち、２Ｘの生成は１ビットのシフトで行なうことができる。一方、負数の生成は被乗数Ｘが２の補数表現であるのでＸの各ビットを反転させ最下位ビットに１を加えればよい。これを実現するために、例えば、符号データ（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）を生成する回路（ブースデコーダ）は、乗数Ｙの入力に対して部分積の絶対値（０、Ｘ、２Ｘ）を選択するための２つの信号と反転を選択するための１つの信号とからなる３つの信号を生成する。また、乗算部は、この３つの信号を受けて、絶対値が０の場合は０を、Ｘの場合は被乗数Ｘ を、２Ｘの場合は被乗数Ｘを１ビットシフトしたものを選択し、さらに、反転が必要な場合はその値を反転させて部分積を生成することができる。さらに、×２２ｉを実行するビットシフト部は、単純にビット線を２ｉだけシフトさせればよい。
【００３５】
図５は、このような２次のブースのアルゴリズムに従って乗算を実行する乗算器を示すブロック図である。乗算器４００は、被乗数Ｘを出力するレジスタＦ０と、乗数Ｙを出力するレジスタＦ７を有する。更に、乗数Ｙ及び被乗数Ｘが入力され部分積を生成する部分積生成ユニット４０１と、部分積生成ユニット４０１にて生成された部分積を加算する加算器４５０とを有する。部分積生成ユニット４０１は、４つの部分積生成部４１０、４２０、４３０、４４０を有する。
【００３６】
各部分積生成部は、上述したように、乗数Ｙのうち所定ビットが入力され、ブースのアルゴリズムに従って符号データ（０、±１、±２）を生成するブースデコーダと、得られた符号データと被乗数Ｘとの乗算結果を出力する乗算部と、乗算部の演算結果のビットシフトを行なうビットシフト部とから構成されるものとする。
【００３７】
各部分積生成部は、Ｘ×（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])×２２ｉの"ｉ"に対応したものとなっており、例えば乗数Ｙが８ビット（ｙ０〜ｙ７とする）であれば、ｉ＝０〜３であり、それぞれＸ×（−２・ｙ１＋ｙ０＋０)×２０、Ｘ×（−２・ｙ３＋ｙ２＋ｙ１）×２２、Ｘ×（−２・ｙ５＋ｙ４＋ｙ３）×２４、Ｘ×（−２・ｙ７＋ｙ６＋ｙ５)×２６を求める。図５においては、これらの部分積を求める部分積生成部を、それぞれ４１０、４２０、４３０、４４０としている。なお、本実施の形態においては、ブースデコーダでデコードする乗数Ｙが８ビットを例にとって説明するが、これ未満、又は以上であってもよいことは勿論である。その場合は、部分積生成部の個数を適宜調整すればよい。
【００３８】
次に、実際の演算を例にとって、この乗算器４００の動作について説明する。８ビットの乗数Ｙは、図６（ａ）のように表すことができる。乗数を２ビットごとに区切り、各組と下位組の最上位ビットの計３ビット（ただしｙ−１＝０）のデータから符号データが得られる。これらに被乗数Ｘを乗算し、対応するビットシフト（×２ｉ）を演算することで部分積を生成することができる。このため、図６（ｂ）に示すように、レジスタＦ７は８ビットを出力するシフトレジスタからなり、乗数Ｙ｛ｙ０〜ｙ７｝を出力する。このとき部分積生成部４１０には、乗数Ｙのうち下位２ビット{ｙ０、ｙ１}、部分積生成部４２０、４３０、４４０にはそれぞれ、{ｙ１、ｙ２、ｙ３}、{ｙ３、ｙ４、ｙ５}、{ｙ５、ｙ６、ｙ７}を入力する。部分積生成部４１０は、入力されたこれらの所定ビットから符号データを生成するブースデコーダ４１１と、得られた符号データと被乗数Ｘとの乗算を行なう乗算部４１２と、乗算結果を所定ビットシフトするビットシフト部４１３とを有する。他の部分積生成部４２０、４３０、４４０も同様に構成される。ここでは、被乗数Ｘ＝３５８（１６６Ｈ）、乗数Ｙ＝１２３（７ＢＨ）の乗算について説明する。下記表２は、演算工程における各出力値を示す。
【００３９】
【表２】
2008242594.tif 000005
Ｘ×Ｙ＝３５８×１２３＝４４０３４（ＡＣ０２Ｈ）
Ｙ＝１２３（７ＢＨ）
＝(−２・０＋１＋１)・２６
＋（−２・１＋１＋１）・２４
＋（−２・１＋０＋１）・２２
＋（−２・１＋１＋０）・２０
＝２・２６＋０・２４＋（−１）・２２＋（−１）・２０
よって、下記となる。
Ｘ×Ｙ＝{（２×３５８）×２６}    ・・・部分積生成部４１０にて演算
＋{（０×３５８）×２４}    ・・・部分積生成部４２０にて演算
＋{（−１×３５８）×２２}    ・・・部分積生成部４３０にて演算
＋{（−１×３５８）×２０}    ・・・部分積生成部４４０にて演算
【００４０】
先ず、被乗数入力部Ｆ０からは"３５８"が各部分積生成部４１０、４２０、４３０、４４０に入力される。乗数入力部Ｆ７からは、各部分積生成部４１０、４２０、４３０、４４０に、それぞれ{ｙ０、ｙ１}＝{１、１}、{ｙ１、ｙ２、ｙ３}＝{１、０、１}、{ｙ３、ｙ４、ｙ５}＝{１、１、１}、{ｙ５、ｙ６、ｙ７}＝{１、１、０}が入力される。ブースデコーダ４１１、４２１、４３１、４４１は入力された所定ビットから、それぞれ（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])＝（−２・ｙ１＋ｙ０＋０)、（−２・ｙ３＋ｙ２＋ｙ１）、（−２・ｙ５＋ｙ４＋ｙ３）、（−２・ｙ７＋ｙ６＋ｙ５)の演算に対応する符号データを出力する。上記の式より本例では、各ブースデコーダ４１１、４２１、４３１、４４１は、それぞれ、"−１"、"−１"、"０"、"２"を出力する。
【００４１】
各乗算部４１２、４２２、４３２、４４２は、上記符号データ×被乗数Ｘを演算して、それぞれビットシフト部４１３、４２３、４３３、４４３へ入力する。ビットシフト部４１３はそのまま加算器４５０へ出力する。なお、本例においては説明の明確のためビットシフト部４１３を設けているが設ける必要はない。ビットシフト部４２３、４３３、４４３は、受け取った結果をそれぞれ２ビット、４ビット、６ビットシフトさせた後、加算器４５０へ入力する。
【００４２】
本例の加算器４５０は、全加算器（フルアダー）４５１、４５２と、半加算器（ハーフアダー）４５３と、結果を受け取るレジスタ４５４とを有する。各ビットシフト部４１３、４２３、４３３、４４３から入力された値は、加算器４５０にて加算され、乗算結果Ｐとして出力される。
【００４３】
このように、２次のブースのアルゴリズムを使用すると、乗数を、０、±１、±２の符号データ×２２ｉとし、被乗数と演算を行なわせるので、部分積の個数が略半分となる。よって加算器にて加算する部分積の個数を略半減させることができるので、乗算器を小型化することができる。
【００４４】
このような部分積生成ユニットを使用すると図５に示すフィルタ演算器は図７に示すような演算回路となる。図７は、従来の構成のフィルタ演算器を示す図である。すなわち上述したように、例えば８ビットであれば４つの部分積生成部を要し、例えば１０ビットであれば５つの部分積生成部を要する。なお、図７には簡単のため３つの部分積生成部のみを示している。
【００４５】
図７を簡単に説明すると、フィルタ演算器５０１はレジスタ（フリップフロップ：ＦＦ）５０２、５１０、５１１、５１３、５１６、部分積生成部５０３〜５０５、加算器５０９、加算器５１２、５１４、リミッタ回路５１５を有する。部分積生成部５０３〜５０５はそれぞれブースデコーダ５０６〜５０８を有する。画素データが乗数Ｙとして入力されＦＦ５０２に保持される。ＦＦ５０２から、各ビットに応じた部分積生成部５０３〜５０５へ値が入力され部分積が生成される。加算器５０９はそれを加算し、上位ビットと下位ビットをそれぞれＦＦ５１２、５１１に入力する。加算器５１２はＦＦ５１０及びＦＦ５１１からの値を加算してＦＦ５１３に出力する加算器５１４はＦＦ５１３からの値とフィルタ係数Ｂとを加算し、リミッタ回路５１５は加算器５１４の値を例えば０〜２５５の範囲に制限してＦＦ５１６へ出力する。
【００４６】
このフィルタ演算器は、
[出力画素]＝Ｌｉｍ（[入力画素]×Ａ＋Ｂ）
の演算を実行する。ここで、Ａはフィルタ係数を示す。Ｂは各フィルタ演算において必要に応じて加算される所定の定数である。従来のフィルタ演算器においては、外部のメモリ等から読み出したデータは、バースト的に読み出される。この際、通常、高速演算する場合は、大規模な乗算器によりパイプライン処理する方式になっている。このため、例えば入力画素データが１０ビットであれば部分積生成部が５つ必要となり、回路規模が大きく、よって消費電力も大きい。
【００４７】
そこで、本実施の形態においては、図７示す部分積生成部５０３〜５０５を１つの部分積生成部とし、１つの部分積生成部を繰り返し使用することで回路規模を縮小し、消費電力を削減する。なお、本実施の形態においては、後述するように、５タップのフィルタ演算を行うため、繰り返し演算を行う演算部を５つ有している。したがって、図７に示す例であれば、演算部は１つでよい。また、上述したように、各演算部１０１〜１０５を有効利用することで演算時間の短縮化を図る。さらに、隣接する画素値の差分データを用いることで演算値を小さい値とすることができ、演算処理時間の更なる短縮化を図る。
【００４８】
図４に戻って、フィルタ演算器１は、乗数となる画素値と被乗数となるフィルタ係数とをブースアルゴリズムを用いて積和演算するフィルタ演算器であって、画素値が入力される入力部と、ブースアルゴリズムに従って入力部からの出力をデコードして１又は複数の符号データを求め、対応するフィルタ係数と当該１又は複数の符号データのそれぞれとの積を求める繰り返し演算を行う２以上の演算部１０ｊと、入力部からの出力を選択して演算部のいずれかに入力する入力選択セレクタ１３ｊと、入力部からの出力に基づき各演算部１０ｊにおける繰り返し演算回数及び繰り返し演算タイミングを決定し、この決定結果に基づき入力選択セレクタ１３ｊを制御する制御部３１とを有する。さらに、各演算部１０ｊからの出力を全て加算する加算器２１と、加算器２１の値を保持するレジスタ２２と、レジスタ２２の値を制限するリミッタ回路２３と、リミッタ回路２３からの出力を保持するレジスタ２４と、レジスタ２２の出力又は０を選択出力するセレクタ２５とを有する。
【００４９】
入力部は、現在の画素値を格納するレジスタＦ００〜Ｆ０４とそれぞれこれに対応する前回の画素値を格納するレジスタＦ０１〜Ｆ０５と、これらの差分データを取る減算器１２ｊ（１２１〜１２５）と、Ｆ０１〜Ｆ０５の画素値又は０を選択出力するセレクタ１１１〜１１５と、減算結果を格納するレジスタＦ０６〜Ｆ０９、Ｆ０Ａとを有する。演算部１０１〜１０５は、同様の構成であるため、演算部１０１について説明すると、演算部１０１は、レジスタＦ０６に格納された値のうち後述する繰り返し演算回数に応じた３ビットの値を選択して出力する選択器１４１、選択器１４１が選択出力した値をブースのアルゴリズムに従ってデコードして符号データを生成するブースデコーダ１５１、当該符号データとある係数（フィルタ係数Ａ）とを乗算する乗算部１６１、繰り返し演算回数に応じてビットシフトするビットシフト部１７１、乗算部１６１による乗算回数を決定する繰り返し回数決定部１８１を有する。ブースデコーダ１５１、乗算部１６１、及びビットシフト部１７１により部分積生成部を構成する。なお、繰り返し回数決定部１８１は選択部１４１、ビットシフト部１７１を繰り返し演算回数及びそのタイミングに基づき制御するものであるが、制御部３１によりこれらの制御を行なってもよい。
【００５０】
ここで、本フィルタ演算器１では、Ａ乃至Ｅをフィルタ係数とすると、以下演算を行うものとして説明する。
[出力画素]＝Ｌｉｍ（Ａ＊Ｆ１＋Ｂ＊Ｆ２＋Ｃ＊Ｆ３＋Ｄ＊Ｆ４＋Ｅ＊Ｆ５）
【００５１】
このフィルタ演算器１は、通常外部メモリからのデータはバースト的に転送されてくるため、必ずしも常に連続にデータが入力されるとは限らない。また画像データは隣同士の画素同士には比較的相関関係があるため、画素同士の差分は比較的小さい。以上の特徴を利用することで、小規模な部分積生成部を使用し回路規模を大幅に削減させることができる。同時に前データとの差分が少ない場合にはほぼ連続的にデータを出力させ、例外的に差分が大きくなり乗算時間が伸びてもバーストデータ間に若干の時間があるため、それほどの性能劣化を伴わずに処理を可能にすることができる。更に、回路規模削減により消費電力を削減することも可能である。
【００５２】
さらに、本実施の形態のように、５つのフィルタ係数からなるフィルタ演算を行なう場合、各フィルタ係数に対する演算を並列に高速処理させようとすると演算効率が低下することがあり、所望の高速処理が得られない場合がある。または、制御が複雑になるとい場合がある。そこで、本実施の形態においては、演算部１０１〜１０５の前段に入力選択セレクタ１３１〜１３５を設け、演算処理を行なっていない（演算が終了した）演算部を利用して演算効率を向上し、演算処理を高速化する。
【００５３】
以下、本実施の形態にかかるフィルタ演算器１について更に詳細に説明する。減算器１２１〜１２５は、レジスタＦ０１〜Ｆ０５に保持されている１つ前の画像値からレジスタＦ００〜Ｆ０４に保持されている現在の画像値を減算して差分データを求める。この理由について説明する。図８は、画像について水平方向の隣り合った画素間の差信号の振幅分布を示す図である（画像情報圧縮、テレビジョン学会偏、Ｐ７１）。横軸は振幅、縦軸は周波数を示す。差信号は０近傍の狭い範囲に集中する。よって、減算器１２１〜１２５により差信号を求めることで、０に近い値とすることができる。差分データとして入力を０に近い値とすることで、後述する繰り返し演算回数を最小限とすることができ、演算処理時間を短縮化することができる。この値はＦ０６〜Ｆ０９、Ｆ０Ａに保持される。なお、本実施の形態においては、画素値は８ビット、減算後の値は符号ビットを含めて９ビットとする。
【００５４】
次に、レジスタＦ０６〜Ｆ０９、Ｆ０Ａの減算結果に基づき制御部３１が演算部での繰り返し演算回数及びそのタイミングを求め、これに基づき各演算部１０１〜１０５での繰り返し演算回数及び繰り返し演算タイミングを決定する。すなわち、例えば、レジスタＦ０７からの出力は、演算部１０２のみならず、必要に応じて演算部１０１、１０３でも行なう。
【００５５】
以下では具体的な数値を例に説明する。Ｆ００〜Ｆ０５まで、下記表３のように、１０、１１、６、３９、３４、３５という値が入力されることとする。この場合、各画素値の差分は、１、−５、３３、−５、１となり、各乗算部（×２０、×２２、×２４、×２６）で使用される符号データは下記表のようになって、演算部１０１〜１０５の繰り返し演算回数は、それぞれ、１、２、４、２、１回となる。ここで、レジスタＦ０６〜Ｆ０９、Ｆ０Ａの出力結果をそれぞれ対応する演算部１０１〜１０５で行なう場合、自身の演算ということとする。
【００５６】
制御部３１は、これらの各演算部１０１〜１０５における繰り返し演算回数がなるべく均一になるようセレクタ１３１〜１３５を制御する。すなわち、繰り返し演算回数が多い演算部は繰り返し演算回数が少ない演算部も使用して演算を行なうようにする。本例においては、演算部１０１が自身の演算と演算部１０２の演算を１回、演算部１０２は自身の演算１回と演算部１０３の演算を１回、演算部１０４は、自身の演算１回と演算部１０３の演算を１回行うことで、各演算部１０１〜１０５が２回ずつ演算を行うこととなる。演算部１０１〜１０５を各演算部で共有しない場合は、繰り返し演算回数が最も多い４回分の演算時間が必要であるが、本実施の形態のように、セレクタ１３１〜１３５を設けて隣り合う演算部１０１〜１０５を共有することで、繰り返し演算回数を半分に減らし、演算処理の高速化を図ることができる。
【００５７】
なお、本実施の形態においては、演算部１０１〜１０５で乗算される被乗数をフィルタ係数Ａ〜Ｅとして説明しているが、被乗数が画素値であって、乗数がフィルタ係数の場合、すなわち、乗数がある定められた値である場合は、予め演算回数がわかっている。そのような場合は、制御部３１を設けることなく、予め演算部１０１〜１０５の演算回数が均一となるようレジスタＦ０６〜Ｆ０９、Ｆ０Ａの出力を振り分けるようにすればよい。
【００５８】
【表３】
2008242594.tif 000006
【００５９】
次に、制御部３１における繰り返し演算回数及び繰り返し演算タイミング決定方法について説明する。表３に示すように、各演算部１０１〜１０５の繰り返し演算回数を加算すると合計１０回であり、各演算部１０１〜１０５がそれぞれ２回ずつ繰り返し演算を行えばよいことがわかる。そこで、制御部３１は、各演算部１０１〜１０５の繰り返し演算回数が２回ずつとなるように、セレクタ１３１〜１３５を切替制御する。これにより、例えば、演算部１０１は自身の第１回繰り返し演算と、演算部１０２の第２回繰り返し演算を行う。演算部１０２は、自身の第１回繰り返し演算と、演算部１０３の第３回繰り返し演算を行う演算部１０３は、自身の第１、２回繰り返し演算を行う。演算部１０４は、自身の第１繰り返し演算と、演算部１０３の第４回繰り返し演算を行う。演算部１０５は自身の第１回繰り返し演算と演算部１０４の第２回繰り返し演算を行う。
【００６０】
【表４】
2008242594.tif 000007
【００６１】
一方、従来方法の場合、表４に示すように、演算部単独の繰り返し演算回数は最大４回となる。更に、合計の繰り返し演算回数は１７回となる。従って、本例の場合は、隣合う演算部を共有しても全体の繰り返し演算回数は４回のままとなる。これに対し、隣合う画素の差分を取る場合は、演算部単独の繰り返し演算回数は最大４回となり従来と同様となるが、更に隣合う演算部を共有することで上述のように繰り返し演算回数が２回と大幅に減らすことができる。なお、本例の場合、差分をとらないと繰り返し演算回数が減少しないが、本例のように水平方向に隣接する演算部のみならず、後述するように、垂直方向に隣接する演算部同士を共有することで、演算回数を減少さる能力を向上することができる。
【００６２】
図９は、本実施の形態と参考例との比較により、隣接画素の差分を取り、かつ隣合う演算部を共有した場合の効果を示す図である。参考例は、隣接画素の差分を取るのみで、隣り合う演算部を共有しない場合を示す。図９に示すように、本来ならば、最大４回の繰り返し演算を必要とするが、本実施の形態においては、２回の繰り返し演算で全ての演算を終了することができる。すなわち、演算速度を２倍とすることができる。
【００６３】
ここで、セレクタ１３ｊの具体的な制御方法としては、以下に説明する方法がある。制御部３１は、全演算部１０ｊの繰り返し演算回数の総数を求め、各演算部１０ｊにおける平均繰り返し演算回数を算出する。平均繰り返し演算回数は小数点切り上げの整数とし、当該整数回分繰り返し演算を行うよう、セレクタ１３ｊを制御する。この場合、例えば、繰り返し演算回数は９ビットの並びに応じてカウントするが、予め９ビットの並びに応じた繰り返し演算回数が対応付けられたテーブルを用意し、図１０（ａ）に示すように、このテーブル４１を参照して各演算部１０ｋの繰り返し演算回数をカウントし、この繰り返し演算回数の総数に応じてセレクタ１３ｊを制御する方法がある。
【００６４】
また、繰り返し演算回数の総数を求める他の方法としては、各レジスタＦ０６〜Ｆ０９、Ｆ０Ａに格納される９ビットの上位ビットから符号を判定していき、符号の変化点を検出する方法がある。（ｙ−１、ｙ０、ｙ１）＝データ群Ｓ０、（ｙ１、ｙ２、ｙ３）＝データ群Ｓ１、（ｙ３、ｙ４、ｙ５）＝データ群Ｓ２、（ｙ５、ｙ６、ｙ７）＝データ群Ｓ３、（ｙ７、ｙ８、ｙ８）＝データ群Ｓ４、としたとき、例えば、−５であれば、上位ビットｙ８から検査していくとビットｙ３までは全て１であり、ビットｙ２で０となるため、変化点はデータ群Ｓ１に含まれる。この場合は、データ群Ｓ０、Ｓ１の演算のみを行なえばよく、繰り返し演算回数は２回である。すなわち、変化点が出現する以降のデータ群の演算のみを行えばよい。３３であれば、変化点はデータ群Ｓ３に含まれ、この場合は、データ群Ｓ０からデータ群Ｓ３までの４グループの演算を行えばよく、繰り返し演算回数は４回である。このようにして求めた繰り返し演算回数を加算することで、繰り返し演算総数を求め、演算部１０１〜１０５の総数で除して平均繰り返し演算回数を求めることができる。
【００６５】
さらに、繰り返し演算回数の総数を求める他の方法としては、データ群毎に、データ群が（０００）又は（１１１）であるか否かを検出するようにしてもよい。データ群が（０００）又は（１１１）である場合は、２次のブースデコード結果が０になるため、演算する必要がない。この場合は、上位ビット側からであっても下位ビット側からであっても、又は全ビット同時に行なうようにしてもよい。例えば３３であれば、データ群Ｓ０、Ｓ２、Ｓ３が演算対象であり繰り返し演算回数は３回である。このように、単純に「３３」は６ビットで表せるから、演算回数が４回とするよりも繰り返し演算回数を減らすことができる。
【００６６】
図１０（ｂ）は、データ群毎に（０００）又は（１１１）であるか否かを検出する回路の一例を示す図である。９ビットのデータをデータ群Ｓ０〜Ｓ４に分け、それぞれ判定部５１〜５５に入力し、（０００）又は（１１１）であるか否かを判定する。例えば、（０００）又は（１１１）であれば０を、そうでなければ１を出力する。テーブル５６は判定部５１〜５５の出力に応じて繰り返し演算回数を出力する。このとき、どのデータ群の演算を行なうかの情報、すなわち繰り返し演算タイミングを示す情報（以下データ群情報という。）を一緒に出力する。
【００６７】
図１０（ｃ）は、変化点がどの位置にあるかを検出することで繰り返し演算回数を決定する具体的な回路の一例を示す図である。上位ビットからＦＦ６１に画像データを入力する。ＦＦ６１に保持された上位のビットと次に入力されるそれより下位のビットとを比較器６２で比較し、一致であれば例えば"０"、不一致であれば例えば"１"を出力する。カウンタ６３はダウンカウンタでありカウント値を９から０までカウントする。回数決定部６４は、"１"が入力されたときのカウンタ値に基づき、繰り返し演算回数を選択部１４、ビットシフト部１７へ出力する。以上のようにして、制御部３１は、繰り返し演算回数と、どのデータ群で演算が必要かを示すデータ群情報とを求める。なお、繰り返し演算回数及びデータ群情報を繰り返し回数決定部１８１〜１８５で決定し、これらのデータを基に制御部３１が各演算部１０１〜１０５で実行する演算を決定してもよい。
【００６８】
選択部１３１〜１３５は、繰り返し演算回数及びデータ群情報に応じてレジスタＦ０６〜Ｆ０９、Ｆ０Ａからの入力を選択する。すなわち、本例においては、選択部１３１は、繰り返し演算回数１回目のときは、レジスタＦ０６の値（ｙ１，ｙ０，０）＝（０，１，０）を選択し、２回目のときは、レジスタＦ０７の値（ｙ３，ｙ２，ｙ１）＝（１，０，１）を選択する。同様に、選択部１３２は、１回目の演算の際はレジスタＦ０７の値（ｙ１，ｙ０，０）＝（１，１，０）を選択し、２回目はレジスタＦ０８の値（ｙ５，ｙ４，ｙ３）＝（１，０，０）を選択する。選択部１３３は、繰り返し演算回数１回目のときは、レジスタＦ０８の値（ｙ１，ｙ０，０）＝（０，１，０）を選択し、２回目のときもレジスタＦ０８の値（ｙ３，ｙ２，ｙ１）＝（０，０，０）を選択する。選択部１３４は、繰り返し演算回数１回目のときは、レジスタＦ０９の値（ｙ１，ｙ０，０）＝（１，１，０）を選択し、２回目のときはレジスタＦ０８の値（ｙ７，ｙ６，ｙ５）＝（０，０，１）を選択する。選択部１３５は、繰り返し演算回数１回目のときは、レジスタＦ０Ａの値（ｙ１，ｙ０，０）＝（０，１，０）を選択し、２回目のときはレジスタＦ０９の値（ｙ３，ｙ２，ｙ１）＝（１，０，１）を選択する。
【００６９】
なお、本実施の形態においては、隣接する演算部同士のみ共有することができることとして説明するが、演算部１０１と１０５とを共有してもよい。または、例えば演算部１０１と演算部１０４など、いずれの演算部とも共有できるようにしてもよい。
【００７０】
ブースデコーダ１５ｋは、上述したように、各３ビットのデータ群から表３に示す符号データを求める。乗算部１６ｋは上述したように、符号データにフィルタ係数Ａを乗算してビットシフト部１７ｋへ出力する。
【００７１】
データ群情報はビットシフト部１７１〜１７５へ入力されており、データ群情報（繰り返し演算タイミング）に基づき、０ビットシフト（×２０、１ビットシフト（×２２）、２ビットシフト（×２４）、３ビットシフト（×２６）を適切に行なう。さらに、本実施の形態においては、ビットシフト部１７１〜１７５の後段に、全演算部１０１〜１０５の演算結果を全て加算する一の加算器２１が設けられているため、例えばＦ０２からの出力データは、隣の演算部１０１で演算されるが、もとの演算部１０２に戻さず、そのまま加算器２１に入力して加算することができる。
【００７２】
加算器２１は、本例においては、上述したように２回ですべての演算が終了するため、レジスタ２２に保存されている前回の演算値に対し、２回分の演算値を加算しこれを出力する。この加算器２１は、各データ群Ｓ０〜Ｓ４から得られた部分積を加算すると共に、前回の加算結果に今回の加算結果を加算することで、現在の画素データのフィルタ演算結果を得ることができる。すなわち、前回の加算結果及び今回の加算結果はいずれも差分データにフィルタ係数Ａを乗算した部分積和からなるため、これらを加算することで、差分データではない画素データのフィルタ演算結果を求めることができる。
【００７３】
なお、加算器２１は、必要であれば係数ａ等を加算処理し、演算結果をリミッタ回路２３へ出力する。リミッタ回路２３は、例えば０〜２５５までの間に演算結果がおさまるよう制限して結果をレジスタ２４に出力する。セレクタ２５は、初回の繰り返し演算の際には０を選択し、その他レジスタ２２の値を選択出力する。
【００７４】
本実施の形態においては、符号データ×フィルタ係数を行なう演算部１０ｊ（ブースデコーダ１５ｊ及び乗算部１６ｊ）を備え、演算部１０ｊを繰り返し使用することで演算規模を縮小したフィルタ演算器において、隣合う演算部１０ｊを共有化することで各演算部１０ｊを使用する繰り返し演算回数を平準化する。このことにより、例えば、ある一の演算部の繰り返し演算回数が４回で、これに隣接する演算部の繰り返し演算回数が２回である場合、一の演算部の演算１回分を隣接する演算部で行わせることにより両者の演算回数を３回とし、最大繰り返し演算回数を減らすことができる。
【００７５】
さらに、画像データは隣同士の画素同士には比較的相関関係があるため、画素同士の差分も比較的小さことを利用し、入力画像データについて現在のデータと次のデータとの差分をとってフィルタ係数と乗算し、それを加算してフィルタ演算を行なう。このとき、差分をとった入力データは０近傍の値となるため、繰り返し演算回数を大幅に減少させることができる。なお、通常外部メモリからのデータはバースト的に転送されてくるため、常に連続にデータが入力されるわけではない。すなわち、データ入力の待ち時間があるため、たとえ繰り返し演算が含まれても待ち時間の間に行なうことができる。
【００７６】
以上のように演算部を繰り返し且つ共有して使用することで、回路規模を大幅に削減させることができると共に、各演算部で実行する繰り返し演算回数平均化し、処理時間を大幅に減少することができる。また、隣接画素間の値を演算に利用することで更に繰り返し演算回数を減少させて消費電力を削減することができる。
【００７７】
次に、本実施の形態における変形例について説明する。図１１及び図１２は、本実施の形態にかかる変形例を示す図である。上述の実施の形態においては、水平方向で隣り合う演算部１０ｊを共有することで繰り返し演算回数を減少させるものとして説明したが、本変形例においては、垂直方向で隣合う演算部も共有することで、更に繰り返し演算回数を減少させるものである。なお、上述の実施の形態と同様、垂直方向の演算部のみを共有するようにしてもよいことは勿論である。
【００７８】
図１１に示すフィルタ演算器１００は、図４に示すフィルタ演算器１が５つ集まったものであり、これらのフィルタ演算器を１１、１２、１３、１４、１５とし、特に区別する必要がない場合は、フィルタ演算器１ということとする。本フィルタ演算器１００は、フィルタ演算器１を５つ並列に接続することで、垂直方向に５画素同時に演算することができる。そして、垂直方向に隣接するフィルタ演算器１の演算部を共有する。なお、本変形例では、フィルタ演算器１に水平方向に連続する５つの画素値が入力され、フィルタ演算器１１、１２、１３、１４、１５には垂直方向に連続する５つの画素値が入力されるものとして説明するが、垂直フィルタの場合には、フィルタ演算器１に垂直方向に連続する５つの画素値が入力され、フィルタ演算器１１、１２、１３、１４、１５には水平方向に連続する５つの画素値が入力される。
【００７９】
フィルタ演算器１１は演算部１０ｊ（１０１〜１０５）を有し、フィルタ演算器１２は演算部１０ｋ（１０６〜１０１０）を有し、フィルタ演算器１３は演算部１０ｌ（１０１１〜１０１５）を有し、フィルタ演算器１４は演算部１０ｍ（１０１６〜１０２０）を有し、フィルタ演算器１５は演算部１０ｎ（１０２１〜１０２５）を有する。図１２は、演算部１０１〜１０２５の詳細を示すブロック図である。演算部１０１〜１０２５は基本的には同様の構成を有するため、ここでは、フィルタ演算器１２の演算部１０７について説明する。
【００８０】
図１２に示すように、演算部１０７は、水平方向には演算部１０６、１０８と隣接し、演算部を相互に共有する。このため、セレクタ１１３には、演算部１０６、１０８のそれぞれレジスタＦ０６、Ｆ０８の値が入力される。また、これら２５個の演算部１０１〜１０２５において、セレクタ１１３がどのレジスタからのデータを選択して繰り返し演算を行うかは、図示せぬ制御部によって制御されているものとする。
【００８１】
この演算部１０７は、垂直方向には、演算部１０２、１０１２と隣接し、これらの演算部とも演算部を共有する。したがって、セレクタ１１３には、演算部１０２、１０１２のそれぞれレジスタＦ０２、Ｆ１２の値が入力される。セレクタ１１３は、図示せぬ制御部の制御のもと、隣接する演算部１０６、１０８、１０２、１０１２と演算部１０７の繰り返し演算回数が平準化するよう各演算部の繰り返し演算回数を割り当て、これに応じてセレクタ１１１３にその演算に応じた入力を選択させる。
【００８２】
さらに、本変形例においては、垂直方向の演算も実施することから、繰り返し演算後のデータを元のフィルタ演算器１に戻す必要がある。このため、水平方向においては、出力側も隣接演算部１０２、１０１２と接続されており、セレクタ１１３が演算部１０２、１０１２のレジスタＦ０２、Ｆ１２の値を選択した場合は、それぞれ演算結果を元の演算部１１、１３へ出力する。このため、隣接水平画素の演算部１０２、１０１２の出力が入力される出力選択セレクタ１１４を有している。この出力選択セレクタ１１４も、図示せぬ制御部の制御のもと、自身の演算結果又は水平隣接演算部の演算結果、具体的には、演算部１０７であれば、ビットシフト部１０７の出力、シフトレジスタ１０２の出力、又はビットシフト部１０１２の出力を選択し、加算器２１に出力する。また、演算部１０７の出力は、演算部１０２、１０１２の出力に接続された出力選択セレクタに入力される。
【００８３】
なお、垂直方向、水平方向で制御部を物理的に別途設けてもよいことは勿論である。また、水平方向及び垂直方向のいずれにおいても演算部１０７を使用したい場合は、例えば水平方向の演算部の使用を優先するなど、各繰り返し演算は優先度を有していてもよい。さらに、水平方向においてもフィルタ演算器１１とフィルタ演算器１５とを接続し、両者で演算部を共有するようにしてもよい。さらにまた、水平、垂直方向に隣接する演算部のみならず、斜め方向、すなわち、演算部１０７であれば、演算部１０１、１０３、１０１１、１０１３とも演算部を共有してもよい。
【００８４】
本変形例においても、上述したように、演算部を共有することで、繰り返し演算回数の最大数を低減することができ、演算処理速度を高速化する。特に、水平方向のみならず、垂直方向の演算部も共有することで、一の演算部は、共有できる演算部を例えば隣接８近傍の演算部とすることができ、より効率よく演算回数を平均化することができる。
【００８５】
また、本変形例においては、上述の実施の形態と同様に、小規模なセレクタと加算器（Ｆｕｌｌ  ＡＤＤＥＲ）を追加した簡易な制御により、稼働率が高い演算部への演算を稼働率が低い演算部に分担させ（融通し合い）、複数サイクル時間を削減するものであるが、垂直方向のデータ相関性が高い場合は、垂直方向のフィルタ演算器の演算部に負荷が集中するのを防ぐために、入力されるデータを例えば１サイクルずつずらす。このように、タイミングずらすことにより、更に処理速度の低下することなく、高速に演算することが可能になる。
【００８６】
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。例えば、上述の実施の形態では、ハードウェアの構成として説明したが、これに限定されるものではなく、任意の処理を、ＣＰＵ（Central Processing Unit）にコンピュータプログラムを実行させることにより実現することも可能である。この場合、コンピュータプログラムは、記録媒体に記録して提供することも可能であり、また、インターネットその他の伝送媒体を介して伝送することにより提供することも可能である。
【図面の簡単な説明】
【００８７】
【図１】Ｈ.２６４に準拠して符号化された圧縮画像を復号する復号装置を示すブロック図である。
【図２】ＶＣ−１に準拠して符号化された圧縮画像を復号する復号装置を示すブロック図である。
【図３】Ｈ.２６４及びＶＣ−１の規格に準拠したフィルタ演算を含む動き補償処理を実行する動き補償（ＭＣ）部を示すブロック図である。
【図４】本発明の実施の形態にかかるフィルタ演算器を示すブロック図である。
【図５】２次のブースのアルゴリズムに従って乗算を実行する乗算器を示すブロック図である。
【図６】（ａ）は、ブースのアルゴリズムにより符号データ生成に使用されるビットを説明する図、（ｂ）は、図１に示す乗算器の部分積生成ユニットの詳細を示す図である。
【図７】従来のフィルタ演算器を示す図である。
【図８】画像について水平方向の隣り合った画素間の差信号の振幅分布を示す図である。
【図９】本発明の実施の形態にかかるフィルタ演算器の制御部における繰り返し演算総数のカウントする具体例を示す図である。
【図１０】（ａ）は、本実施の形態にかかるフィルタ演算器の演算タイミングを示す図、（ｂ）は、図８に示す従来のフィルタ演算器の演算タイミングを示す図である。
【図１１】本発明の実施の形態における変形例にかかるフィルタ演算器を示す図である。
【図１２】本発明の実施の形態における変形例にかかるフィルタ演算器の演算部の詳細を示す図である。
【図１３】特許文献１に記載の離散コサイン変換器を示す図である。
【図１４】特許文献２に記載の情報処理装置におけるプロセッサ、レジスタ回路及び係数レジスタを示す図である。
【符号の説明】
【００８８】
１、１１、１２、１３、１４、１５、１００、３０２、３０３、５０１  フィルタ演算器
１０１〜１０２５、１０ｊ、１０ｋ、１０ｌ、１０ｍ、１０ｎ演算部
１１、１１１〜１１５、２５、３０１、３０４、３０７、３１０、３１３  セレクタ
１２ｊ、１２１〜１２５  減算器
１３、１３１〜１３５、１１３入力選択セレクタ
１４、１４１〜１４５  選択部
１５ｊ、１５１〜１５５、５０６〜５０８  ブースデコーダ
１６ｊ、１６１〜１６５、５０３〜５０５  部分積生成部
１７、１７１〜１７５、４１３、４２３、４３３、４４３  ビットシフト部
１８１〜１８５  繰り返し回数決定部
２１  加算器
２２、２４  レジスタ
２３  リミッタ回路
３１  制御部
４１、５６  テーブル
５１〜５５  判定部
６２  比較器
６３  カウンタ
６４  回数決定部
２００、２２０  画像復号装置
２０１、２２１  圧縮データ
２０２、２２２  可変長復号部
２０３、２２３  逆量子化部
２０４  逆アダマール変換部
２０５、２２５  加算器
２０６  デブロッキングフィルタ
２０７  切替部
２０８、２２７  復号画像
２０９、２２８  モニタ
２１０  画面内予測部
２１１、２２９  重み付け予測部
２１２、２３０、３００  動き補償部
２１３、２３３  予測画像
２２４  逆ＤＣＴ変換部
２２６  ループフィルタ
３０４、３０５、３１２、４００、４１２、４２２、４３２、４４２  乗算器
３０６、３０８、３１１、４５０、６１２  加算器
３０９  ラインメモリ
４０１  部分積生成ユニット
【図１】
2008242594.tif 000008
【図２】
2008242594.tif 000009
【図３】
2008242594.tif 000010
【図４】
2008242594.tif 000011
【図５】
2008242594.tif 000012
【図６】
2008242594.tif 000013
【図７】
2008242594.tif 000014
【図８】
2008242594.tif 000015
【図９】
2008242594.tif 000016
【図１０】
2008242594.tif 000017
【図１１】
2008242594.tif 000018
【図１２】
2008242594.tif 000019
【図１３】
2008242594.tif 000020
【図１４】
2008242594.tif 000021