(57)【要約】  分岐処理を必要としないで、フィルタ処理のタップ数を変化させるための技術を提供する。  フィルタ処理装置（１５１）は、フィルタリングのための演算処理を行う演算器と、上記演算器での演算処理に供されるデータが保持されるとともに、上記演算器での演算結果が書き戻される内部レジスタと、上記内部レジスタの保持データに基づいて、上記演算器に供給されるデータを生成するためのデータ生成器とを含む。そして、与えられたタップ制御信号に基づいてフィルタリングにおけるタップ数を制御可能なタップ数制御回路（１００）が設けられる。上記タップ数制御回路によるタップ数制御に分岐処理は不要とされる。
2010001562.tif 000002
【特許請求の範囲】
【請求項１】
フィルタリングのための演算処理を行う演算器と、
上記演算器での演算処理に供されるデータが保持されるとともに、上記演算器での演算結果が書き戻される内部レジスタと、
上記内部レジスタの保持データに基づいて、上記演算器に供給されるデータを生成するためのデータ生成器と、を含むフィルタ処理装置であって、
与えられたタップ制御信号に基づいて、フィルタリングにおけるタップ数を制御可能なタップ数制御回路を含むことを特徴とするフィルタ処理装置。
【請求項２】
上記タップ数制御回路は、上記フィルタリングのタップ数を保持するタップ数制御レジスタと、
カウント値を更新する信号に基づいて１タップ分の演算処理が終了される毎にカウント値が更新されるタップ数カウンタと、
上記タップ数制御レジスタの初期値の設定とタップ数カウンタの初期化を行うコントローラと、
上記タップ数制御レジスタが保持するデータと、上記タップ数カウンタの値とを比較し、その比較結果を上記データ生成器へ出力可能な比較器と、を含む請求項１記載のフィルタ処理装置。
【請求項３】
上記制御部は、上記タップ数制御レジスタの更新を指示するための命令を実行可能なＣＰＵを含む請求項１記載のフィルタ処理装置。
【請求項４】
上記フィルタ処理装置は、バスに結合され、
上記タップ数制御レジスタは、上記バスからアクセス可能なメモリマップにマッピングされた請求項１記載のフィルタ処理装置。
【請求項５】
上記コントローラによって上記タップ数カウンタの初期化が行われる場合、上記タップ数制御レジスタが保持するデータを上記タップ数カウンタに設定され、上記コントローラからカウント値を更新する信号を受けてタップ数カウンタの値がデクリメントされ、上記比較器での比較にてゼロになっているか否かが判定される請求項１記載のフィルタ処理装置。
【請求項６】
一つの半導体基板に形成された請求項１記載のフィルタ処理装置。
【請求項７】
上記フィルタ処理装置には、上記バスを介して、符号化された画像データが入力され、
上記符号化された画像データであるストリーム中に、上記タップ数制御レジスタへセットする値が含まれる請求項１記載のフィルタ処理装置。
【請求項８】
入力された命令をデコードする命令デコーダと、
上記命令デコーダを介して与えられたタップ制御信号に基づいてフィルタリングにおけるタップ数を制御可能なタップ数制御回路と、
上記命令デコーダを介して取り込まれたソースインデックスを補正することにより補正ソースインデックスを生成可能なインデックス生成器と、
上記ソースインデックスに対応するデータを出力可能な内部レジスタと、
上記内部レジスタから伝達されたデータのフィルタリングのための演算を行う演算器と、を含む半導体装置であって、
上記演算器は、上記内部レジスタから伝達されたデータをシフト可能なシフトレジスタと、
上記シフトレジスタの出力データの演算処理を行うＳＩＭＤ演算器と、を含み、
上記タップ数制御回路は、水平フィルタ処理のタップ数を保持し更新データにより保持するデータを更新可能な水平タップ数制御レジスタと、
それぞれカウント値を更新する信号に基づいてカウント値を変更する水平用タップ数カウンタ及び垂直用タップ数カウンタと、
垂直フィルタ処理のタップ数を保持し更新データにより保持するデータを更新可能な垂直タップ数制御レジスタと、
水平タップ数制御レジスタと垂直タップ数制御レジスタの初期値の設定と上記水平用タップ数カウンタ及び垂直用タップ数カウンタの初期化を上記命令デコーダから出力された制御信号によって行うコントローラと、
水平タップ数制御レジスタの値と水平用タップ数カウンタの値を比較し、その結果によるシフトレジスタの動作と、垂直用タップ数カウンタの更新を行う第１比較器と、
垂直タップ数制御レジスタの値と垂直用タップ数カウンタの値を比較し、その結果によるフィルタ終了信号を出力する第２比較器と、を含むことを特徴とする半導体装置。
【請求項９】
水平フィルタ1タップ終了毎に上記水平用タップ数カウンタが更新され、水平タップ数制御レジスタが保持するデータと比較され、水平フィルタ処理が終了していなければシフトレジスタを動作させるシフト信号が上記第１比較器によってアサートされ、
垂直フィルタ1タップ終了毎に垂直用タップ数カウンタが更新され、現在のタップ数が内部レジスタの読み出すレジスタ番号を変更するレジスタインデックス変更信号と、上記垂直用タップ数カウンタと垂直タップ数制御レジスタが保持するデータとが比較され、垂直フィルタ処理が終了していれば、終了信号が第２比較器によってアサートされる請求項８記載の半導体装置。
【請求項１０】
上記命令デコーダにより、水平タップ数制御レジスタ、もしくは垂直タップ数制御レジスタ、もしくはその両方を更新する制御信号を受けたコントローラは水平タップ数制御レジスタ、もしくは垂直タップ数制御レジスタ、もしくはその両方を更新データにより更新するイネーブル信号がアサートされ、
上記命令デコーダからフィルタ命令の実行開始を受けたコントローラは、水平用タップ数カウンタと垂直用タップ数カウンタをリセットする信号がアサートされる請求項８記載の半導体装置。
【請求項１１】
上記命令デコーダは、垂直タップ数制御レジスタのみ、もしくは水平タップ数制御レジスタのみ、もしくは垂直タップ数制御レジスタ及び水平タップ数制御レジスタの双方を更新可能な命令をデコードする請求項１０記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フィルタ処理装置及び半導体装置、さらにはフィルタ処理装置や半導体装置におけるフィルタ処理技術に関する。
【背景技術】
【０００２】
動画像では、フレーム中の物体が動いたり、カメラがパンをしたりすることにより、フレーム間で動きがあり、前のフレームと現在のフレームとは全く同じわけではない。しかし、前後の画像での相関は大きい。動き補償とは、フレーム間予測において、前後のフレームの画像と比較してどの方向へどの程度動いているかというベクトルデータを使用し、画像の解析を行う技術を言う。動き補償により、画像データの圧縮度を高めることに成功している。多くの画像フレーム符号化方式では画像フレームを所定のブロックに分割し処理を行う。このブロックサイズを小さくすれば詳細な予測ができる。一方でブロック数が増加し、これにより、動きベクトル情報自体の数が増え符号量が増える傾向にある。結果大きな処理能力がハードウェアに要求される。また、画像を低ビット・レートで符号化する場合、なんらのフィルタリング処理も行わないと復号画像にブロック歪みが生じたままフレームメモリに格納される。この歪みが生じた画像を参照し次のフレームを復号すると、更に画質の劣化が伝播する。この画質劣化の伝播防止のためにフィルタ処理が不可欠とされる。【０００３】
従来、画像のフィルタ処理は、ある決まったタップ数で行われていた。そのため、１フレーム中のフィルタ係数が一定であるため、非特許文献１に示すように画面のどの位置でも同一のフィルタ処理が実行されていた。【０００４】
また、マイクロプログラムにより画像データに対してフィルタ処理を施す方式がある（例えば特許文献１参照）。これはマイクロプログラムに従って、メモリからデータリードを行い、画像処理部へ毎クロックデータを投入することで画像のフィルタ処理を実現している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−８０２５号公報
【非特許文献】
【０００６】
【非特許文献１】ITU-T H.264(03/2005)、”Advanced video coding for generic audiovisual services”
【発明の開示】
【発明が解決しようとする課題】
【０００７】
マイクロプログラムにより画像データに対してフィルタ処理を施す方式について本願発明者が検討したところ、フィルタ処理のタップ数がマクロブロック毎に変わるような場合には、分岐処理により実現するか、フィルタ処理のタップ数を処理しうる最大のタップ数に設定し、不要な係数を０に設定することで実現するため、演算量が増大してしまうことが見い出された。【０００８】
また一般的に、1フレーム中をマクロブロックという画像の処理単位毎にフィルタ処理を行う場合、このマクロブロック全てに対して同じようにフィルタ処理をしていたのでは演算量が増大してしまうため、画像に応じて演算量を制御することが望ましい。【０００９】
動き補償予測を行う際には参照ピクチャの画素値から整数画素以下の画素精度の信号を補間によって生成するのが一般的である。ＭＰＥＧ−２やＭＰＥＧ−４では１／２画素精度までの、Ｈ．２６４／ＡＶＣでは１／４画素精度までの動き補償が可能なように設計されている。このような動き補償予測において、離散コサイン変換後のデータに高周波成分が多い画像の場合、フィルタのタップ数を増やしブロックノイズの軽減を行うが、低周波成分の多い画像では、フィルタタップ数を増やしても得られる結果はほとんど変化しない。このようにフィルタ処理のタップ数を画像に応じて変化させることで総演算量を低減することが可能であるが、そのためにはタップ数に応じた分岐処理が必要になる。そしてタップ数に応じた分岐処理が必要となれば、分岐予測回路が必要となる。また、分岐処理のためのプログラムが必要とされるので、プログラムメモリあるいは命令キャッシュの記憶容量もその分だけ大きくなってしまう。【００１０】
本発明の目的は、分岐処理を必要としないで、フィルタ処理のタップ数を変化させるための技術を提供することである。【００１１】
本発明の上記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１２】
本願において開示される発明のうち代表的なものについて簡単に説明すれば下記のとおりである。【００１３】
すなわち、フィルタ処理装置には、フィルタリングのための演算処理を行う演算器と、上記演算器での演算処理に供されるデータが保持されるとともに、上記演算器での演算結果が書き戻される内部レジスタと、上記内部レジスタの保持データに基づいて、上記演算器に供給されるデータを生成するためのデータ生成器とが設けられる。そして、与えられたタップ制御信号に基づいてフィルタリングにおけるタップ数を制御可能なタップ数制御回路が設けられる。上記タップ数制御回路によるタップ数制御に分岐処理は不要とされる。
【発明の効果】
【００１４】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。【００１５】
すなわち、分岐処理を必要としないで、フィルタ処理のタップ数を変化させることができる。
【図面の簡単な説明】
【００１６】
【図１】本発明にかかるフィルタ処理装置が適用された画像処理装置の構成例ブロック図である。
【図２】上記フィルタ処理装置におけるタップ数制御回路及びフィルタ回路の構成例ブロック図である。
【図３】本発明にかかる半導体装置の一例とされるプロセッサの構成例ブロック図である。
【図４】上記プロセッサにおける演算ユニットの構成例ブロック図である。
【図５】上記演算ユニットにおけるタップ数制御回路の構成例回路図である。
【図６】図１に示されるタップ数制御回路の別の構成例ブロック図である。
【図７】６タップＦＩＲフィルタ処理及び２タップフィルタ処理を説明するための概念図である。
【図８】横方向６タップＦＩＲフィルタ処理を説明するための概念図である。
【図９】縦方向６タップＦＩＲフィルタ処理を説明するための概念図である。
【図１０】斜め方向６タップＦＩＲフィルタ処理を説明するための概念図である。
【図１１】２タップフィルタ処理を説明するための概念図である。
【発明を実施するための最良の形態】
【００１７】
１．代表的な実施の形態
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。【００１８】
〔１〕本発明の代表的な実施の形態に係るフィルタ処理装置（１５１）は、フィルタリングのための演算処理を行う演算器（１１２）と、上記演算器での演算処理に供されるデータが保持されるとともに、上記演算器での演算結果が書き戻される内部レジスタ（１１０）と、上記内部レジスタの保持データに基づいて、上記演算器に供給されるデータを生成するためのデータ生成器（１１１）とが設けられる。そして、与えられたタップ制御信号に基づいてフィルタリングにおけるタップ数を制御可能なタップ数制御回路（１００）を設ける。【００１９】
タップ数制御回路は、与えられたタップ制御信号に基づいてフィルタリングにおけるタップ数を制御する。このタップ数制御では、分岐処理により実現するものではない。このことが、分岐処理を必要としないで、フィルタ処理のタップ数を変化させるための技術の提供を達成する。【００２０】
〔２〕上記〔１〕において、上記タップ数制御回路は、上記フィルタリングのタップ数を保持するタップ数制御レジスタ（１０２）と、カウント値を更新する信号に基づいて１タップ分の演算処理が終了される毎にカウント値が更新されるタップ数カウンタ（１０３）と、上記タップ数制御レジスタの初期値の設定とタップ数カウンタの初期化を行うコントローラ（１０１）と、上記タップ数制御レジスタが保持するデータと、上記タップ数カウンタの値とを比較し、その比較結果を上記データ生成器へ出力可能な比較器（１０４）とを含んで構成することができる。【００２１】
〔３〕上記〔１〕において、上記制御部は、上記タップ数制御レジスタの更新を指示するための命令を実行可能なＣＰＵを含んで構成することができる。【００２２】
〔４〕上記〔１〕において、上記フィルタ処理装置は、バス（１５０）に結合され、上記タップ数制御レジスタ（１０２）は、上記バスからアクセス可能なメモリマップにマッピングされるように構成することができる。【００２３】
〔５〕上記〔１〕において、上記コントローラによって上記タップ数カウンタの初期化が行われる場合、上記タップ数制御レジスタが保持するデータを上記タップ数カウンタに設定され、上記コントローラからカウント値を更新する信号を受けてタップ数カウンタの値がデクリメントされ、上記比較器での比較にてゼロになっているか否かが判定されるように構成することができる。【００２４】
〔６〕上記〔１〕において、上記フィルタ処理装置は一つの半導体基板に形成することができる。【００２５】
〔７〕上記〔１〕において、上記フィルタ処理装置には、上記バスを介して、符号化された画像データが入力され、上記符号化された画像データであるストリーム中に、上記タップ数制御レジスタへセットする値が含まれるように構成することができる。【００２６】
〔８〕入力された命令をデコードする命令デコーダ（１３０）と、上記命令デコーダを介して与えられたタップ制御信号に基づいてフィルタリングにおけるタップ数を制御可能なタップ数制御回路（１００）と、上記命令デコーダを介して取り込まれたソースインデックスを補正することにより補正ソースインデックスを生成可能なインデックス生成器（１３１）と、上記ソースインデックスに対応するデータを出力可能な内部レジスタ（１３２）と、上記内部レジスタから伝達されたデータのフィルタリングのための演算を行う演算器（１１２）とを含んで半導体装置を構成する。このとき、上記演算器は、上記内部レジスタから伝達されたデータをシフト可能なシフトレジスタ（１３４）と、上記シフトレジスタの出力データの演算処理を行うＳＩＭＤ演算器（１３５）とを含んで構成する。また、上記タップ数制御回路は、水平フィルタ処理のタップ数を保持し更新データにより保持するデータを更新可能な水平タップ数制御レジスタ（１２１）と、垂直フィルタ処理のタップ数を保持し更新データにより保持するデータを更新可能な垂直タップ数制御レジスタ（１２０）と、それぞれカウント値を更新する信号に基づいてカウント値を変更する水平用タップ数カウンタ（１２２）及び垂直用タップ数カウンタ（１２４）と、上記水平タップ数制御レジスタと上記垂直タップ数制御レジスタの初期値の設定と上記水平用タップ数カウンタ及び垂直用タップ数カウンタの初期化を上記命令デコーダから出力された制御信号によって行うコントローラ（１０１）と、水平タップ数制御レジスタの値と水平用タップ数カウンタの値を比較し、その結果によるシフトレジスタの動作と、垂直用タップ数カウンタの更新を行う第１比較器（１２３）と、垂直タップ数制御レジスタの値と垂直用タップ数カウンタの値を比較し、その結果によるフィルタ終了信号を出力する第２比較器（１２５）とを含んで構成する。【００２７】
〔９〕上記〔８〕において、水平フィルタ1タップ終了毎に上記水平用タップ数カウンタ（１２２）が更新され、水平タップ数制御レジスタ（１２１）が保持するデータと比較され、水平フィルタ処理が終了していなければシフトレジスタを動作させるシフト信号が上記第１比較器（１２３）によってアサートされ、垂直フィルタ1タップ終了毎に垂直用タップ数カウンタ（１２４）が更新され、現在のタップ数が内部レジスタの読み出すレジスタ番号を変更するレジスタインデックス変更信号と、上記垂直用タップ数カウンタ（１２４）と垂直タップ数制御レジスタ（１２０）が保持するデータとが比較され、垂直フィルタ処理が終了していれば、終了信号が第２比較器（１２５）によってアサートされるように構成することができる。【００２８】
〔１０〕上記〔８〕において、上記命令デコーダ（１３０）により、水平タップ数制御レジスタ（１２１）、もしくは垂直タップ数制御レジスタ（１２０）、もしくはその両方を更新する制御信号を受けたコントローラ（１０１）は、水平タップ数制御レジスタ、もしくは垂直タップ数制御レジスタ、もしくはその両方を更新データにより更新するイネーブル信号がアサートされ、上記命令デコーダ（１３０）からフィルタ命令の実行開始を受けたコントローラ（１０１）は、水平用タップ数カウンタ（１２２）と垂直用タップ数カウンタ（１２４）をリセットする信号がアサートされるように構成することができる。【００２９】
〔１１〕上記〔１０〕において、上記命令デコーダは、垂直タップ数制御レジスタのみ、もしくは水平タップ数制御レジスタのみ、もしくは垂直タップ数制御レジスタ及び水平タップ数制御レジスタの双方を更新可能な命令をデコードするように構成することができる。【００３０】
２．実施の形態の説明
次に、実施の形態について更に詳述する。【００３１】
＜想定する処理について＞
まず本実施の形態が想定する動き補償予測処理について説明する。【００３２】
動き補償予測を行う際には参照ピクチャの画素値から整数画素以下の画素精度の信号を補間によって生成するのが一般的である。ＭＰＥＧ−２やＭＰＥＧ−４では１／２画素精度までの、Ｈ．２６４／ＡＶＣでは１／４画素精度までの動き補償が可能なように設計されている。【００３３】
Ｈ．２６４／ＡＶＣにおいては１／２単位画素（ハーフペル）を導出する際と、１／４単位画素（クォータペル）を導出する際とでは導出手順が２段階に分かれる。まず、最初に参照画像のデータから１／２単位画素のデータを計算式で求める（６タップＦＩＲフィルタ処理）。そして、参照画像及び６タップで導出した１／２単位画素から１／４単位画素及び３／４単位画素を導出する（２タップフィルタ処理）。【００３４】
図７は整数画素から６タップＦＩＲフィルタ処理および２タップフィルタ処理の処理内容を表す概念図である。この図では○で表されたＡ１が導出の対象となる１／２画素であり、□で表されたＢ１、Ｂ２、Ｂ３、Ｂ４、Ｂ５、Ｂ６が参照画素（整数画素）である。【００３５】
ここで、１／２単位画素Ａ１を導出する際には前後する整数画素Ｂ１、Ｂ２、Ｂ３、Ｂ４、Ｂ５、Ｂ６の画素から以下の数式を用いて計算する。【００３６】
Ａ１＝（Ｂ１−５×Ｂ２＋２０×Ｂ３＋２０×Ｂ４−５×Ｂ５＋Ｂ６＋１６）／３２
…（式１）【００３７】
また、２タップ処理では、△で表された1／４単位画素Ｃ１を以下のように導出する。【００３８】
Ｃ１＝（Ａ１＋Ｂ３＋１）／２              …（式２）【００３９】
以上により、横８画素×縦８画素のデータをクォータペル単位で取り扱う際には、参照画像として横１４画素×縦１４画素のデータが処理に必要となる。本発明においてもこれは同様である。【００４０】
ここで、１４画素分のデータを一括してメモリに記憶し、処理できれば問題は無いのだが、１４画素分（本発明では１画素１バイトを想定）の演算器を用意するのは現実には回路実装規模上の問題から困難な場合が多い。【００４１】
図８は横方向（水平方向）の６タップＦＩＲフィルタ処理により、（−１／２、−１）から（７＋１／２、８）までの横９画素、縦１０画素の画像を求めるフィルタ処理を示している。【００４２】
前述の通り、画面全体の動き補償に際しては、横１４画素×縦１４画素のデータを参照画像６００として用意する必要がある。しかし、実際には、これらの領域全てを一度のデータ読み出しで取り扱うようにすると、データバス幅等の兼ね合いで実装上問題を生じる場合もある。これに対し、この横方向の６タップＦＩＲフィルタ処理に際しては、（−３、−１）、（１０、−１）、（１０、８）、（−３、８）で囲まれる横１４画素×縦１０画素を参照する。従って、これらの画像を内部のレジスタ等にいったん読み込む。【００４３】
８個の演算器を用いてこの横９画素、縦１０画素の横方向の１／２単位画素（ハーフペル）画像の計算を行う際に、（０、０）を基点として、（−１／２、−１）、（６＋１／２、−１）、（６＋１／２、６）、（−１／２、６）で囲まれる画像１５００（点線で囲まれた範囲）を求める。画像１５００の導出のためには、入力画像６００の（−３、−１）から（９、−１）、（９、６）、（−３、６）で囲まれた画像範囲の整数画素のデータを用いる。つまり、座標（−１／２、−１）は（−３、−１）から（３、−１）までの６画素を式１に代入して算出する。また、（１／２、−１）から（７＋１／２、−１）、（７＋１／２、６）、（１／２、６）で囲まれた画像範囲１５０１（一点鎖線で囲われた範囲）を求めるためにも、横画素の合計８画素を１ラインとして算出する。【００４４】
同様に、（−１／２、０）を基点とする横８画素×縦８画素の画像１５０２（実線で囲われた範囲）、（１／２、０）を基点とする横８画素×縦８画素の画像１５０３（２点鎖線で囲われた範囲）、（−１／２、１）を基点とする横８画素×縦８画素の画像１５０４（細点線で囲われた範囲）、（１／２、１）を基点とする横８画素×縦８画素の画像１５０５（細実線で囲われた範囲）でも同様の処理を行う。【００４５】
これらの結果から、横９画素、縦１０画素の横方向の１／２単位画素（ハーフペル）のデータを求めることができる。【００４６】
図９は縦方向（垂直方向）の６タップＦＩＲフィルタ処理を説明するための図面である。（−１、−１／２）から横１０画素、縦９画素の画像を求めるフィルタ処理を示している。図８同様に（０、０）を基点とした場合、（−１、−１／２）からの横８画素、縦８画素の画像１５１０（点線で囲われた範囲）を求めるためには、入力画像６００の（−１、−３）から（６、−３）、（６、９）、（−１、９）で囲われた画像範囲の整数画素のデータを用いる。すなわち、縦方向においても（−１、−１／２）導出時には（−１、−３）、（−１、−２）、（−１、−１）、（−１、０）、（−１、１）、（−１、２）の６画素分のデータを式１に対して代入する。この（−１、１／２）を基点とする横１０画素、縦９画素の画像１５１１（実線で囲われた箇所）を導出するために、縦画素は合計で９画素を１ラインとして算出され、この１ラインのデータはプロセッサ内部のレジスタに格納される。【００４７】
併せて、（０、−１／２）を基点とする画像１５１２（一点鎖線で囲われた箇所）、（０、１／２）を基点とする画像１５１３（二点鎖線で囲われた箇所）、（１、−１／２）を基点とする画像１５１４（細線で囲われた範囲）、（１、１／２）を基点とする画像１５１５（細破線で囲われた範囲）も同様の処理で求め、結果として横９画素、縦１０画素の縦方向の１／２単位画素のデータを内部のレジスタに保持する。【００４８】
尚、本例では、後述する斜め方向の１／２単位画素（ハーフペル）をこの縦方向の１／２単位画素（ハーフペル）を用いて導出することから、（−３、−１／２）から（１０、−１／２）、（１０、７＋１／２）、（−３、７＋１／２）の画像１６０１を導出している。【００４９】
これらの導出結果を元に、斜め方向に対する画素を算出する。図１０はこの斜め方向の６タップＦＩＲフィルタ処理を説明するための図である。この斜め方向の画素を求める場合も６タップＦＩＲフィルタ処理を行うが、図８の横方向のフィルタ処理結果もしくは図９の縦方向のフィルタ処理結果を用いて算出する。【００５０】
斜め方向におけるフィルタ処理で求める画像は（−１／２、−１／２）を基点とする画像１５２０（破線で囲われた箇所）、（１／２、−１／２）を基点とする画像１５２１（細破線で囲われた箇所）、（−１／２、１／２）を基点とする画像１５２２（一点鎖線で囲われた範囲）、（１／２、１／２）を基点とする画像１５２３（実線で囲われた範囲）である。これを合成して斜め方向の横９画素、縦９画素の画像を作成する。この際、縦方向のフィルタ処理結果から求めるために必要な参照画素データは（−３、−１／２）から（１０、７＋１／２）の画像１６０１である。この画像１６０１に対して、横方向の６タップＦＩＲフィルタ処理を行うことで、斜め方向の横９画素、縦９画素のフィルタ画像を求めることができ、この結果をプロセッサ内部のレジスタに保管する。【００５１】
算出した縦、横、斜め方向の画像データを用いて、１／４単位画素（クォータペル）の画像を求める。１／４単位画素は式２を用いて算出する。そして動きベクトルによって使用する画像データが決定される。【００５２】
図１１は横４画素、縦４画素の結果を得る２回目のフィルタ処理を示す。１回目のフィルタ処理は６タップＦＩＲフィルタ処理であるのに対し、２回目のフィルタ処理は２タップフィルタ処理である。そのため、４×４画素の画像を求めるために９×９画素のデータを使用する。内部レジスタは９バイト幅のデータを１エントリに格納し、計９エントリの内部レジスタに参照画像６１０を格納する。図１１に示す基準となる座標から（１／２、１／２）の位置の画像を得る方法は、参照画像６１０でエントリ２から５までの画像データ７００を使用し、横方向の６タップフィルタを行い、ハーフペル画像６１１を生成する。また、全てのエントリを使用して縦方向の６タップフィルタを行うが、ハーフペル画像６１２は左からのバイト位置で３バイト目から６バイト目のみを使用する。ハーフペル画像６１１、６１２を使用し、２回目のフィルタ処理である２タップフィルタを行い、クォータペル画像６１３を生成する。このように内部レジスタへ１ラインのデータを保存しているため、読み出しと演算を容易に実行することが可能となる。【００５３】
本実施の形態では、この一連の処理を限られたハードウェア資源を用いて効率よく行うことを考えている。【００５４】
＜実施の形態１＞
図１には、本発明にかかるフィルタ処理装置が適用された画像処理装置が示される。図１に示される画像処理装置１４０は、特に制限されないが、マイクロプロセッサ１４１、記憶装置１４２、及びフィルタ処理装置１５０を含み、それらがバス１５０を介して結合されて成る。マイクロプロセッサ１４１は所定のプログラムを実行することで画像処理装置１４０の全体的な動作制御を行う。記憶装置１４２には、上記マイクロプロセッサ１４１で実行されるプログラムや、各種データが格納されている。フィルタ処理装置１５１は、バス１５０を介して伝達された画像データの２次元フィルタリングが可能とされる。【００５５】
フィルタ処理装置１５１では、上記ＦＩＲフィルタ処理が行われる。このフィルタ処理装置１５１は、特に制限されないが、バスインタフェース１５２、制御部１５３、メモリ１５４、タップ数制御回路１００、及びフィルタ回路１５５を含み、公知の半導体集積回路製造技術により、単結晶シリコン基板などの一つの半導体基板に形成される。上記バスインタフェース１５２は、上記バス１５０に結合されたホストＣＰＵとの間で各種情報のやり取りを可能とする。この各種情報には、フィルタリング前後の画像データや、そのフィルタリングに関する各種制御情報などが含まれる。特に、符号化された画像データが上記バス１５０を介してフィルタ処理装置１５１に入力されるとき、タップ数制御レジスタ１００内にセットされる値は、上記符号化された画像データであるストリーム中に含めてフィルタ処理装置１５１内に取り込むことができる。上記制御部１５３は、例えばバスインタフェース１５２を介して与えられた命令を実行可能なＣＰＵ（中央処理装置）を含んで形成される。タップ制御信号５００やフィルタ制御信号５５０は、制御部１５３によって形成される。上記メモリ１５４は、上記フィルタ回路１５５で行われるフィルタリングのタップ数更新データや、フィルタリングの対象とされるデータ、さらにはフィルタリング後のデータなどを一時的に保存するのに用いられる。上記フィルタ回路１５５は、上記メモリ１５４を介して伝達されたデータ５５２のフィルタリングを行う。このフィルタリング後のデータ５５１は上記メモリ１５４に書き戻され、上記バスインタフェース１５２を介してバス１５０に出力される。上記タップ数制御回路１００は、上記メモリ１５４を介して伝達されたタップ数更新データ５０１に基づいて、上記フィルタ回路１５５でのフィルタリングにおけるタップ数の変更を可能とする。【００５６】
尚、画像データの外部とのやり取りは、バス１５０ではなく、専用線を用いてもよい。【００５７】
上記の構成において、バス１５０を介して伝達された画像データはメモリ１５４に一時的に保存される。フィルタ処理に十分なデータが入力され、マイクロプロセッサ１４１からバス１５０を介して制御部１５３に起動指示が与えられると、フィルタ処理装置１５１でのフィルタ処理が開始される。また、制御部１５３は、タップ制御信号５００により、メモリ１５４に保管されているタップ数更新データ５０１に基づくタップ数をタップ数制御回路に設定する。尚、メモリへ保持せず、フィルタ処理回路１５１を起動する前に予めバス１５０よりタップ数制御回路１００内部のレジスタへ直接書きこんでもよい。タップ数の設定完了後、メモリ１５４に蓄積された画像データを随時フィルタ回路１５５へ入力し、タップ数制御回路１００に設定されたフィルタ処理を行い、メモリ１５４に書き戻しを行う。【００５８】
図２には、上記タップ数制御回路１００と上記フィルタ回路１５５との構成例が示される。【００５９】
上記タップ数制御回路１００は、コントローラ１０１、タップ数制御レジスタ１０２、タップ数カウンタ１０３、及び比較器１０４を含む。上記タップ数制御レジスタ１０２は、フィルタリングのタップ数を保持する。コントローラ１０１は、上記タップ数制御レジスタ１０２の初期値の設定とタップ数カウンタ１０３の初期化を制御信号５０２，５０３によって行う。制御信号５０２，５０３は、制御部１５３からのタップ制御信号５００に基づいてコントローラ１０１によって生成される。
タップ数カウンタ１０３は、上記コントローラ１０１からカウント値を更新する信号を受け、それに基づいて１タップ分の演算処理が終了される毎に上記タップ数カウンタを更新し、保持するカウント値を変更する。比較器１０４は、上記タップ数制御レジスタ１０２によって保持されるデータと、上記タップ数カウンタ１０３の値とを比較する。この比較結果は、フィルタ回路１５５に供給される。【００６０】
上記フィルタ回路１５５は、内部レジスタ１１０、データ生成器１１１、演算器１１２を含む。演算器１１２は、フィルタリングのための演算処理を行う。内部レジスタ１１０は、上記演算器１１２での演算処理に供されるデータが保持される。また、内部レジスタ１１には、上記演算器１１２での演算結果が書き戻される。データ生成器１１１は、上記内部レジスタ１１０の保持データに基づいて、上記演算器１１２に供給されるデータを生成する。【００６１】
タップ数制御回路１００では、制御部１５３よりタップ制御信号５００を受け、まずタップ数制御レジスタ１０２が更新される。更新方法は、タップ数更新信号５０２により更新データ５０１を新しいデータとしてタップ数制御レジスタ１０２を更新する。次に、フィルタ処理を行うため、カウンタリセット信号５０３がタップ数カウンタ１０３に入力され、これまで保持していたデータがリセットされる。1タップのフィルタ処理毎にタップ数カウンタ１０３を“＋１”し、タップ数制御レジスタ１０２の値と同値であるか否かを比較器１０４で判定する。尚、カウンタリセット信号５０３によりタップ数カウンタ１０３をリセットする場合、タップ数制御レジスタ１０２の値をセットしてもよい。この場合、フィルタ処理毎にタップ数カウンタ１０３は“−１”され、比較器１０４では“０”との比較が行われる。【００６２】
比較器１０４での比較の結果、タップ数カウンタ１０３の出力値５０４とタップ数制御レジスタ５０５の出力値とが同値であればフィルタ処理が完了しているため、同値信号５０６が例えば論理値“１”にアサートされ、データ生成器１１１へフィルタ処理の完了が通知される。しかし、タップ数カウンタ１０３の出力値５０４とタップ数制御レジスタ５０５の出力値とが同値でない場合、内部レジスタ１１０から読み出したデータ５０７がデータ生成器１１１で加工され、演算器１１２にて演算処理が行われ、演算結果５０９が内部レジスタ１１０に書き戻される。つまり、タップ数制御レジスタ１０２に設定された値によって、フィルタリングのタップ数が決定される。【００６３】
尚、タップ数制御レジスタ１０２への値の設定は、設定専用の命令によって設定してもよいし、フィルタ命令実行の最初の段階で設定してもよい。【００６４】
上記例によれば以下の作用効果が得られる。【００６５】
タップ数制御レジスタ１０２が搭載され、このタップ数制御レジスタ１０２への情報設定に応じて、フィルタ回路１５５における２次元フィルタのタップ数の変更が可能とされる。これにより、タップ数可変の２次元フィルタ処理装置１５１を得ることができる。そしてそのようなフィルタ処理装置１５１が搭載された画像処理装置１４０においては、タップ数制御レジスタ１０の保持情報の更新によって、タップ数を自由に変更することができる。また、タップ数を自由に変更するのに、タップ数に応じた分岐処理を行う必要がないため、性能を向上することが可能であり、さらに分岐予測回路が不要とされる。分岐が不要であるため、制御部１５３に含まれるＣＰＵのプログラムメモリのサイズ増大を回避することができる。【００６６】
＜実施の形態２＞
図３には、本発明にかかる半導体装置の一例とされるプロセッサが示される。図３に示されるプロセッサは、命令キャッシュ３５１、演算ユニット３５０、データキャッシュ３５２、メモリＩ／Ｆ（インターフェイス）３５３、及びＩ／Ｏ（入出力回路）３５４を含み、公知の半導体集積回路技術により単結晶シリコン基板などのひとつの半導体基板に形成される。演算ユニット３５０は命令キャッシュ３５１を介してフェッチされた命令を実行することで、所定の演算処理を行う。演算した結果をストア命令等により出力する場合、データキャッシュ３５２にいったん送られるか、内部バス３５５、メモリＩ／Ｆ３５３を介して外部メモリ３６０で保持される。また、ビデオやオーディオ等の低速デバイス等とのインターフェイスであるＩ／Ｏ３５４等とのやり取りを内部バス３５５経由で行うこともできる。【００６７】
図４には、上記演算ユニットの３５０の構成例が示される。【００６８】
図４に示される演算ユニット３５０は、上記ＦＩＲフィルタ処理を行うもので、特に制限されないが、タップ数制御回路１００、演算器１１２、命令デコーダ１３０、インデックス生成器１３１、及び内部レジスタ１３２を含む。命令デコーダは、入力された命令をデコードすることによって、タップ制御信号５００、ソースインデックス５３０、及び演算制御信号５３２を形成する。タップ数制御回路１００は、上記命令デコーダ１３０を介して与えられたタップ制御信号５００に基づいてフィルタリングにおけるタップ数の制御を可能とする。インデックス生成器１３１は、上記命令デコーダ１３０を介して取り込まれたソースインデックス５３０を補正することにより補正ソースインデックスを生成する。内部レジスタ１３２は、フィルタリング対象として取り込まれたデータを保持すると共に、上記ソースインデックスに対応するデータを出力する。演算器１１２は、上記内部レジスタから伝達されたデータ５３３のフィルタリングのための演算を行う。この演算器１１２は、特に制限されないが、データのシフトを可能とするシフトレジスタ１３４、上記シフトレジスタ１３４でのデータシフトを制御するためのシフト制御回路１３３、及び上記シフトレジスタ１３４の出力データの演算処理を行うＳＩＭＤ演算器１３５を含む。ここで、ＳＩＭＤとは、Single Instruction/Multiple Data (単一命令/複数データ)の略で、ＳＩＭＤ演算とは、1つの命令で複数のデータに対して処理を行う演算方式を意味する。ＳＩＭＤ演算器１３５での演算結果１３６は、上記内部レジスタ１３２に書き戻される。【００６９】
図５には、図４に示されるタップ数制御回路１００の構成例が示される。【００７０】
図５に示されるタップ数制御回路１００は、特に制限されないが、コントローラ１０１、垂直タップ数制御レジスタ１２０、水平タップ数制御レジスタ１２１、タップ数カウンタ１２２、比較器１２３、タップ数カウンタ１２４、及び比較器１２５を含む。垂直タップ数制御レジスタ１２０には、２次元画像における垂直方向のタップ制御信号を設定することができる。水平タップ数制御レジスタ１２１には、２次元画像における水平方向のタップ制御信号を設定することができる。比較器１２５では、上記垂直タップ数制御レジスタ１２０の出力５２４と、タップ数カウンタ１２４の出力５２３との比較が行われる。比較器１２３では、上記水平タップ数制御レジスタ１２１の出力５２１と、タップ数カウンタ１２２の出力５２０との比較が行われる。比較器１２５での比較結果５２５はフィルタ終了信号として命令デコーダ１３０に供給される。比較器１２３での比較結果５２７は、シフト制御回路１３３に供給される。また、タップ数カウンタ１２４の出力５２６はインデックス生成器１３１に供給される。【００７１】
上記の構成において、命令デコーダ１３０に対するコマンドによってフィルタ処理が指示された場合、まずタップ数制御回路１００内部にあるタップ数制御レジスタを、内部レジスタ１３２を用いて更新する。フィルタ処理は命令デコーダ１３０から内部レジスタから読み出すデータの基点となるソースインデックス５３０と、タップ数制御回路１００から垂直フィルタオフセット信号５２６をインデックス生成器１３１へ入力する。これらの信号を入力とし、インデックス生成器１３１は補正ソースインデックス５３１を内部レジスタ１３２に入力する。内部レジスタ１３２は補正ソースインデックス５３１に対応したレジスタのデータ５３３を演算器１１２のシフトレジスタ１３４へ出力する。シフトレジスタ１３４はシフト制御回路１３３によってデータのシフトを行うか、内部レジスタ１３２からのデータ５３３によりシフトレジスタデータを更新する。シフトレジスタ１３４のデータをシフトする場合は水平フィルタが継続している状態であり、タップ数制御回路１００によって水平フィルタ継続信号５２７がアサートされている。内部レジスタ１３２のデータ５３３での更新は、水平フィルタ継続信号５２７がアサートされていない状態か、シフトレジスタ１３４のデータが不足した場合に行われる。シフトレジスタのデータがＳＩＭＤ演算器１３５へ供給され、その演算結果１３６が内部レジスタ１３２へ書き戻されることで、フィルタ処理が完了される。【００７２】
上記タップ数制御回路１００では、水平フィルタ処理と垂直フィルタ処理とを同時に行うことができる。タップ数制御回路１００は、命令デコーダによりタップ制御信号５００を受け、垂直タップ数制御レジスタ１２０と水平タップ数制御レジスタ１２１を垂直更新データ５２８、水平更新データ５２９により、それぞれ更新する。次に、フィルタ処理を行うために、カウンタのリセット信号５０３をタップ数カウンタ１２２、１２３に入力し、カウンタ値をリセットする。フィルタ処理を開始し、まず水平フィルタのタップ数カウンタ１２２を“＋１”し、水平制御レジスタ１２１とタップ数カウンタ１２２が同値であるかの判定を比較器１２３で行う。同値でない場合は水平フィルタ処理の継続であることを示し、シフトレジスタに対してデータを1バイトシフトして演算処理を行う、水平フィルタ継続信号５２７をシフトレジスタへ出力する。同値であった場合、垂直フィルタのタップ数カウンタ１２４を“＋１”し、水平フィルタのタップ数カウンタ１２２をリセットする。垂直フィルタのタップ数カウンタ１２４は内部レジスタから読み出す位置を補正する垂直フィルタオフセット信号５２６となり、タップ数制御回路１００外部へ出力される。また、垂直タップ数制御レジスタ１２０と垂直フィルタのタップ数カウンタ１２４が同値であるかの判定を比較器１２５で行い、同値であった場合はフィルタ処理終了信号５２５がアサートされる。【００７３】
上記の構成によれば、垂直タップ数制御レジスタ１２０と水平タップ数制御レジスタ１２１を別々に実装することにより水平、垂直それぞれに対してタップ数を設定可能な2次元のフィルタ処理回路を実現する。【００７４】
尚、垂直フィルタのみを行う場合、垂直制御レジスタ１２０のみを実装し、水平タップ数制御レジスタ１２１を削除することで面積を削減することも可能である。【００７５】
また、水平フィルタのみを行う場合、水平制御レジスタ１２１のみを実装し、垂直制御レジスタ１２０を削除することで面積を削減することも可能である。【００７６】
＜実施の形態３＞
図６には、上記タップ数制御回路１００の別の構成例が示される。【００７７】
図６に示されるタップ数制御回路１００が、図２に示されるのと大きく相違するのは、タップ数変更回路１６０が設けられ、マクロブロック情報５６０を用いてタップ数の変更が可能にされている点である。【００７８】
命令デコーダのタップ制御信号５００よりフィルタ処理を開始する。まず、マクロブロック情報５６０によりタップ数変更回路１６０が、フィルタ処理のタップ数を決定する。尚、マクロブロック情報はＤＣＴ係数の高周波成分の割合や、前後左右のマクロブロックと処理中のマクロブロックの量子化係数等を用いて決定してもよい。決定されたタップ数５６１をタップ数制御レジスタ１０２に入力し、更新する。処理開始時にタップ数カウンタ１０３をカウンタリセット信号５０３により初期化する。フィルタ処理中は１タップ毎にタップ数カウンタ１０３を“＋１”し、タップ数制御レジスタ１０２が保持する値と比較器１０４にて同値であるかを判定する。判定した結果は同値信号５０６をデータ生成器１１１に対して出力する。【００７９】
図６に示される回路構成によれば、予め決められた値を設定するのではなく、フィルタ処理回路内で、マクロブロック情報５６０を判定し、タップ数を変更することができるタップ数制御回路１００を得ることが可能となる。【００８０】
以上本発明者によってなされた発明を具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【産業上の利用可能性】
【００８１】
本発明は複数回のフィルタ処理を要するデータ処理を行う際に有効である。本書ではＨ．２６４ＡＶＣ等の画像の復号化、符号化を例として上げたが、必ずしもこれにはこだわらず、音声等の処理であっても適用可能である。
【符号の説明】
【００８２】
１００  タップ数制御回路
１０１  コントローラ
１０２  タップ数制御レジスタ
１０３  タップ数カウンタ
１１２  演算器
１２０  水平タップ数制御レジスタ
１２１  水平タップ数制御レジスタ
１３０  命令デコーダ
１３１  インデックス生成器
１３２  内部レジスタ
１３３  シフト制御回路
１３４  シフトレジスタ
１４０  画像処理装置
１４１  マイクロプロセッサ
１４２  記憶装置
１５０  汎用バス
１５１  フィルタ処理装置
１５２  バスインタフェース
１５３  制御部
１５４  メモリ
１５５  フィルタ回路
３００  データ処理装置
３５０  演算ユニット
３５１  命令キャッシュ
３５２  データキャッシュ
３５３  メモリＩ／Ｆ
３５４  Ｉ／Ｏ
３５５  内部バス
３６０  外部メモリ
【図１】
2010001562.tif 000003
【図２】
2010001562.tif 000004
【図３】
2010001562.tif 000005
【図４】
2010001562.tif 000006
【図５】
2010001562.tif 000007
【図６】
2010001562.tif 000008
【図７】
2010001562.tif 000009
【図８】
2010001562.tif 000010
【図９】
2010001562.tif 000011
【図１０】
2010001562.tif 000012
【図１１】
2010001562.tif 000013
【国際調査報告】
2010001562.tif 000014
2010001562.tif 000015
2010001562.tif 000016