(57)【特許請求の範囲】
【請求項１】
左右対称のフィルタ係数を用いて、記憶部に格納されている複数のデータのフィルタ演算を行う対称型フィルタ演算装置であって、
前記記憶部から連続する複数のデータである第一データ列を読み出し、前記第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する左側データ列抽出部と、
前記記憶部から連続する複数のデータである第二データ列を読み出し、前記第二データ列の中から、中心より右側のフィルタ係数であって前記左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する右側データ列抽出部とを備え、
前記左側データ列抽出部は、連続する第三データ列と第四データ列とで構成される前記第一データ列を前記記憶部から読み出して、前記左側データ列を抽出し、
前記右側データ列抽出部は、
（ａ）前記第三データ列の先頭のデータ及び第五データ列の最終のデータの中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する前記第五データ列と第六データ列とで構成される前記第二データ列を前記記憶部から読み出して、前記右側データ列を抽出する、または、
（ｂ）前記第三データ列の先頭のデータ及び第六データ列の先頭のデータの中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する第五データ列と前記第六データ列とで構成される前記第二データ列を前記記憶部から読み出して、前記右側データ列を抽出する
対称型フィルタ演算装置。
【請求項２】
さらに、
抽出された前記左側データ列と前記右側データ列とを加算して、加算データ列を算出する加算部と、
算出された前記加算データ列と前記左側フィルタ係数または前記右側フィルタ係数とを乗算して、乗算データ列を算出する乗算部とを備える
請求項１に記載の対称型フィルタ演算装置。
【請求項３】
前記左側データ列抽出部は、前記データ中心より左側のデータを先頭とする前記左側データ列を抽出し、
前記右側データ列抽出部は、前記データ中心より右側のデータであって、前記データ中心に対して前記左側データ列の先頭のデータと対称となるデータを先頭とする前記右側データ列を抽出する
請求項１または２に記載の対称型フィルタ演算装置。
【請求項４】
前記第三データ列及び前記第四データ列、または前記第五データ列及び前記第六データ列は、前記記憶部の連続した領域に記憶されており、
前記左側データ列抽出部は、前記記憶部から前記第一データ列を読み出して、前記左側データ列を抽出し、
前記右側データ列抽出部は、前記記憶部から前記第二データ列を読み出して、前記右側データ列を抽出する
請求項１〜３のいずれか１項に記載の対称型フィルタ演算装置。
【請求項５】
左右対称のフィルタ係数を用いて、記憶部に格納されている複数のデータのフィルタ演算を行う対称型フィルタ演算装置であって、
前記記憶部から連続する複数のデータである第一データ列を読み出し、前記第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する左側データ列抽出部と、
前記記憶部から連続する複数のデータである第二データ列を読み出し、前記第二データ列の中から、中心より右側のフィルタ係数であって前記左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する右側データ列抽出部とを備え、
前記左側データ列抽出部は、連続する第三データ列と第四データ列とで構成される前記第一データ列を前記記憶部から読み出して、前記左側データ列を抽出し、
前記右側データ列抽出部は、前記第一データ列を前記第二データ列として前記記憶部から読み出して、前記第三データ列の中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、前記右側データ列を抽出する
対称型フィルタ演算装置。
【請求項６】
前記第三データ列の先頭のデータと前記第三データ列の最終のデータとの中心を前記データ中心とし、または、前記第三データ列の先頭のデータと前記第四データ列の先頭のデータとの中心を前記データ中心とし、
前記左側データ列抽出部は、前記データ中心より左側のデータを先頭とする前記左側データ列を抽出し、
前記右側データ列抽出部は、前記データ中心より右側のデータであって、前記データ中心に対して前記左側データ列の先頭のデータと対称となるデータを先頭とする前記右側データ列を抽出する
請求項５に記載の対称型フィルタ演算装置。
【請求項７】
左右対称のフィルタ係数を用いて、記憶部に格納されている複数のデータのフィルタ演算を行う対称型フィルタ演算方法であって、
前記記憶部から連続する複数のデータである第一データ列を読み出し、前記第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する左側データ列抽出ステップと、
前記記憶部から連続する複数のデータである第二データ列を読み出し、前記第二データ列の中から、中心より右側のフィルタ係数であって前記左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する右側データ列抽出ステップとを含み、
前記左側データ列抽出ステップでは、連続する第三データ列と第四データ列とで構成される前記第一データ列を前記記憶部から読み出して、前記左側データ列を抽出し、
前記右側データ列抽出ステップでは、
（ａ）前記第三データ列の先頭のデータ及び第五データ列の最終のデータの中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する前記第五データ列と第六データ列とで構成される前記第二データ列を前記記憶部から読み出して、前記右側データ列を抽出する、または、
（ｂ）前記第三データ列の先頭のデータ及び第六データ列の先頭のデータの中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する第五データ列と前記第六データ列とで構成される前記第二データ列を前記記憶部から読み出して、前記右側データ列を抽出する
対称型フィルタ演算方法。
【請求項８】
左右対称のフィルタ係数を用いて、記憶部に格納されている複数のデータのフィルタ演算を行う対称型フィルタ演算方法であって、
前記記憶部から連続する複数のデータである第一データ列を読み出し、前記第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する左側データ列抽出ステップと、
前記記憶部から連続する複数のデータである第二データ列を読み出し、前記第二データ列の中から、中心より右側のフィルタ係数であって前記左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する右側データ列抽出ステップとを含み、
前記左側データ列抽出ステップでは、連続する第三データ列と第四データ列とで構成される前記第一データ列を前記記憶部から読み出して、前記左側データ列を抽出し、
前記右側データ列抽出ステップでは、前記第一データ列を前記第二データ列として前記記憶部から読み出して、前記第三データ列の中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、前記右側データ列を抽出する
対称型フィルタ演算方法。
【請求項９】
左右対称のフィルタ係数を用いて、記憶部に格納されている複数のデータのフィルタ演算を行うためのプログラムであって、
前記記憶部から連続する複数のデータである第一データ列を読み出し、前記第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する左側データ列抽出ステップと、
前記記憶部から連続する複数のデータである第二データ列を読み出し、前記第二データ列の中から、中心より右側のフィルタ係数であって前記左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する右側データ列抽出ステップとをコンピュータに実行させ、
前記左側データ列抽出ステップでは、連続する第三データ列と第四データ列とで構成される前記第一データ列を前記記憶部から読み出して、前記左側データ列を抽出し、
前記右側データ列抽出ステップでは、
（ａ）前記第三データ列の先頭のデータ及び第五データ列の最終のデータの中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する前記第五データ列と第六データ列とで構成される前記第二データ列を前記記憶部から読み出して、前記右側データ列を抽出する、または、
（ｂ）前記第三データ列の先頭のデータ及び第六データ列の先頭のデータの中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する第五データ列と前記第六データ列とで構成される前記第二データ列を前記記憶部から読み出して、前記右側データ列を抽出する
プログラム。
【請求項１０】
左右対称のフィルタ係数を用いて、記憶部に格納されている複数のデータのフィルタ演算を行うためのプログラムであって、
前記記憶部から連続する複数のデータである第一データ列を読み出し、前記第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する左側データ列抽出ステップと、
前記記憶部から連続する複数のデータである第二データ列を読み出し、前記第二データ列の中から、中心より右側のフィルタ係数であって前記左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する右側データ列抽出ステップとをコンピュータに実行させ、
前記左側データ列抽出ステップでは、連続する第三データ列と第四データ列とで構成される前記第一データ列を前記記憶部から読み出して、前記左側データ列を抽出し、
前記右側データ列抽出ステップでは、前記第一データ列を前記第二データ列として前記記憶部から読み出して、前記第三データ列の中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、前記右側データ列を抽出する
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、左右対称のフィルタ係数を用いてフィルタ演算を行う対称型フィルタ演算装置及び対称型フィルタ演算方法に関するものである。
【背景技術】
【０００２】
フィルタ演算は、例えば画像データのフィルタ演算の場合、画像データの画素値にフィルタ係数を乗算し、その結果を累積加算する演算であり、様々な画像処理に用いられる演算のひとつである。ここで、従来、フィルタ係数が対称の場合のフィルタ演算である対称型画像フィルタ演算（以降、対称フィルタ演算という）を行う対称型フィルタ演算装置が提案されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２００７／０７２６４４号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記従来の対称型フィルタ演算装置の構成では、対称フィルタ演算のみを固定的に行う専用演算器になっており、プロセッサで行う場合の動作や構成については言及されていない。また、タップ数が６の対称フィルタ演算に特化した構成になっており、タップ数が６以外の対称フィルタ演算を行う場合についても言及がない。【０００５】
本発明は、上記従来の課題を解決するものであり、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる対称型フィルタ演算装置及び対称型フィルタ演算方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するために、本発明の一態様にかかる対称型フィルタ演算装置は、左右対称のフィルタ係数を用いて、記憶部に格納されている複数のデータのフィルタ演算を行う対称型フィルタ演算装置であって、前記記憶部から連続する複数のデータである第一データ列を読み出し、前記第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する左側データ列抽出部と、前記記憶部から連続する複数のデータである第二データ列を読み出し、前記第二データ列の中から、中心より右側のフィルタ係数であって前記左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する右側データ列抽出部とを備える。【０００７】
なお、これらの全般的または具体的な態様は、システム、方法、集積回路、コンピュータプログラムまたはコンピュータ読み取り可能なＣＤ−ＲＯＭ等の記録媒体で実現されてもよく、装置、システム、方法、集積回路、コンピュータプログラムおよび記録媒体の任意な組み合わせで実現されてもよい。
【発明の効果】
【０００８】
本発明にかかる対称型フィルタ演算装置によれば、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、本発明の実施の形態１におけるフィルタ演算装置の構成を示す図である。
【図２】図２は、本発明の実施の形態１におけるデータシャッフル器の構成を示す図である。
【図３Ａ】図３Ａは、本発明の実施の形態１におけるデータシャッフル器の動作を説明する図である。
【図３Ｂ】図３Ｂは、本発明の実施の形態１におけるデータシャッフル器の動作を説明する図である。
【図３Ｃ】図３Ｃは、本発明の実施の形態１におけるデータシャッフル器の動作を説明する図である。
【図４】図４は、本発明の実施の形態１におけるデータシャッフル器を動作させるためのニーモニックと命令コードを示す図である。
【図５】図５は、本発明の実施の形態１におけるフィルタ演算装置が対称フィルタ演算を行う動作の一例を示すフローチャートである。
【図６】図６は、本発明の実施の形態１におけるフィルタ演算装置が対称フィルタ演算を行うための命令を示す図である。
【図７】図７は、本発明の実施の形態１におけるフィルタ演算装置が対称フィルタ演算を行う動作を説明する図である。
【図８】図８は、本発明の実施の形態１におけるフィルタ演算装置が対称フィルタ演算を行う動作を説明する図である。
【図９Ａ】図９Ａは、本発明の実施の形態１におけるフィルタ演算装置が対称フィルタ演算を行う動作を説明する図である。
【図９Ｂ】図９Ｂは、本発明の実施の形態１におけるフィルタ演算装置が対称フィルタ演算を行う動作を説明する図である。
【図１０】図１０は、本発明の実施の形態２におけるフィルタ演算装置の構成を示す図である。
【図１１】図１１は、本発明の実施の形態２におけるデータシャッフル器の構成を示す図である。
【図１２】図１２は、本発明の実施の形態２におけるデータシャッフル器の動作を説明する図である。
【図１３Ａ】図１３Ａは、本発明の実施の形態２におけるデータシャッフル器の動作を説明する図である。
【図１３Ｂ】図１３Ｂは、本発明の実施の形態２におけるデータシャッフル器の動作を説明する図である。
【図１３Ｃ】図１３Ｃは、本発明の実施の形態２におけるデータシャッフル器の動作を説明する図である。
【図１４Ａ】図１４Ａは、本発明の実施の形態２におけるデータシャッフル器の動作を説明する図である。
【図１４Ｂ】図１４Ｂは、本発明の実施の形態２におけるデータシャッフル器の動作を説明する図である。
【図１５】図１５は、本発明の実施の形態２におけるデータシャッフル器を動作させるためのニーモニックと命令コードを示す図である。
【図１６】図１６は、本発明の実施の形態２におけるフィルタ演算装置が対称フィルタ演算を行う動作を説明する図である。
【図１７】図１７は、本発明の実施の形態２におけるフィルタ演算装置が対称フィルタ演算を行う動作を説明する図である。
【図１８】図１８は、本発明の実施の形態２におけるフィルタ演算装置においてタップ数が４８の場合の対称フィルタ演算を行う動作を説明する図である。
【図１９】図１９は、本発明の実施の形態２におけるフィルタ演算装置においてタップ数が４９の場合の対称フィルタ演算を行う動作を説明する図である。
【図２０】図２０は、６タップの一次元画像フィルタ演算の内容を示す図である。
【図２１】図２１は、従来の対称型フィルタ演算装置の構成を示す図である。
【発明を実施するための形態】
【００１０】
（本発明の基礎となった知見）
本発明者は、「背景技術」の欄において記載した従来の対称型フィルタ演算装置に関し、以下の課題が生じることを見出した。
【００１１】
図２０は、６タップの一次元画像フィルタ演算（フィルタ演算）の内容を示す図である。ｐ０〜ｐ８は、連続する９つの画素の画素値であり、ｋ０〜ｋ５は、フィルタ演算に用いられるフィルタ係数である。
【００１２】
図２０の（ａ）に示す通り、６タップのフィルタ演算では、画素ｐ０〜ｐ５に対してそれぞれフィルタ係数ｋ０〜ｋ５を乗算して、その結果を累積加算してフィルタ結果ｑ０を得る。次に、１画素ずれた画素ｐ１〜ｐ６に対して同様のフィルタ演算を行うことで、フィルタ結果ｑ１が得られ、画素ｐ２〜ｐ７にフィルタ演算を行うとフィルタ結果ｑ２が、画素ｐ３〜ｐ８にフィルタ演算を行うとフィルタ結果ｑ３が得られる。このように、画素を１画素ずつずらしながらフィルタ演算を行うことで、画像全体についてフィルタ演算を行うことができる。
【００１３】
この時、ｋ０とｋ５が等しく、かつ、ｋ１とｋ４が等しく、かつ、ｋ２とｋ３が等しい場合、フィルタ係数が対称であるといい、この場合のフィルタ演算を対称型画像フィルタ演算（対称フィルタ演算）という。対称フィルタ演算では、図２０の（ｂ）に示す通り、同じフィルタ係数を乗算する画素を予め加算してからフィルタ係数と乗算することで、乗算の回数を減らして処理を高速化することができる。例えば、特許文献１にはその手法が開示されている。
【００１４】
図２１は、特許文献１に開示されている従来の対称型フィルタ演算装置の構成を示す図である。同図に示す対称型フィルタ演算装置２０では、バッファ３００から画素を読み出し、フィルタ係数が対称となる画素をセレクタ３１０で選択して、４つのフィルタ演算部３２１〜３２４（フィルタ演算部＃１〜＃４）でフィルタ演算を行う。フィルタ演算部３２１〜３２４は全て同じ構成であり、各フィルタ演算部３２１〜３２４は、セレクタ３１０で選択された画素に対して、６タップの対称フィルタ演算を行う。
【００１５】
各フィルタ演算部３２１〜３２４では、図２０の（ｂ）で示す通り、フィルタ係数が対称となる画素の画素値を予め加算してから乗算し、累積加算する。このフィルタ演算を４つのフィルタ演算部３２１〜３２４で同時に行うことで、４つのフィルタ演算結果を得ることができる。
【００１６】
しかしながら、上記従来の構成では、対称フィルタ演算のみを固定的に行う専用演算器になっており、プロセッサで行う場合の動作や構成については言及されていない。また、タップ数が６の対称フィルタ演算に特化した構成になっており、タップ数が６以外の対称フィルタ演算を行う場合についても言及がない。
【００１７】
この課題を解決するために、本発明の一態様にかかる対称型フィルタ演算装置は、左右対称のフィルタ係数を用いて、記憶部に格納されている複数のデータのフィルタ演算を行う対称型フィルタ演算装置であって、前記記憶部から連続する複数のデータである第一データ列を読み出し、前記第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する左側データ列抽出部と、前記記憶部から連続する複数のデータである第二データ列を読み出し、前記第二データ列の中から、中心より右側のフィルタ係数であって前記左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する右側データ列抽出部とを備える。
【００１８】
これによれば、記憶部に格納されている第一データ列の中から左側データ列を抽出し、記憶部に格納されている第二データ列の中から右側データ列を抽出する。つまり、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。このため、タップ数に応じた当該データ列のペアを抽出することで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
【００１９】
また、例えば、さらに、抽出された前記左側データ列と前記右側データ列とを加算して、加算データ列を算出する加算部と、算出された前記加算データ列と前記左側フィルタ係数または前記右側フィルタ係数とを乗算して、乗算データ列を算出する乗算部とを備えることにしてもよい。
【００２０】
これによれば、左側データ列と右側データ列とを加算して、左側フィルタ係数または右側フィルタ係数を乗じる。つまり、同じフィルタ係数に乗算されるデータ列のペアを加算して、当該フィルタ係数を乗じる。このため、タップ数に応じた当該加算及び乗算を行うことで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
【００２１】
また、例えば、前記左側データ列抽出部は、連続する第三データ列と第四データ列とで構成される前記第一データ列を前記記憶部から読み出して、前記左側データ列を抽出し、前記右側データ列抽出部は、（ａ）前記第三データ列の先頭のデータ及び第五データ列の最終のデータの中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する前記第五データ列と第六データ列とで構成される前記第二データ列を前記記憶部から読み出して、前記右側データ列を抽出する、または、（ｂ）前記第三データ列の先頭のデータ及び第六データ列の先頭のデータの中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する第五データ列と前記第六データ列とで構成される前記第二データ列を前記記憶部から読み出して、前記右側データ列を抽出することにしてもよい。
【００２２】
これによれば、第三データ列の先頭のデータと第五データ列の最終のデータとの中心に配置されるデータが、中心のフィルタ係数に乗算されるデータになるように、連続する第三データ列と第四データ列とで構成される第一データ列の中から左側データ列を抽出し、連続する第五データ列と第六データ列とで構成される第二データ列の中から右側データ列を抽出する。または、第三データ列の先頭のデータと第六データ列の先頭のデータとの中心に配置されるデータが、中心のフィルタ係数に乗算されるデータになるように、当該左側データ列と右側データ列とを抽出する。これにより、第一データ列を一方のバッファに格納し、第二データ列を他方のバッファに格納して、一方のバッファから左側データ列を抽出し、他方のバッファから右側データ列を抽出するというように、一部のデータを２つのバッファに格納することで、左側データ列と右側データ列とを抽出し、対称フィルタ演算を行うことができる。
【００２３】
ここで、図２１に示した従来の構成では、フィルタ演算する上で必要となる画素の画素値を全てバッファ３００に格納する構成になっており、対称フィルタ演算のタップ数が大きい場合はバッファ３００のサイズが大きくなる。そのため、上記従来の構成では、タップ数の大きい対称フィルタ演算に対応しようとした場合、対称型フィルタ演算装置２０の回路規模を増大させてしまうという課題があった。
【００２４】
これに対し、本発明にかかる対称型フィルタ演算装置によれば、対称フィルタ演算のタップ数が大きい場合であっても、一部のデータを２つのバッファに分けて格納する。このため、対称フィルタ演算に用いる全てのデータをバッファに格納することなく、タップ数の大きい対称フィルタ演算を行うことができるので、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
【００２５】
また、例えば、前記左側データ列抽出部は、前記データ中心より左側のデータを先頭とする前記左側データ列を抽出し、前記右側データ列抽出部は、前記データ中心より右側のデータであって、前記データ中心に対して前記左側データ列の先頭のデータと対称となるデータを先頭とする前記右側データ列を抽出することにしてもよい。
【００２６】
これによれば、左側データ列の先頭のデータと右側データ列の先頭のデータとがデータ中心に対して左右対称となるように、左側データ列と右側データ列とを抽出する。これにより、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。このため、タップ数に応じた当該データ列のペアを抽出することで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
【００２７】
また、例えば、前記第三データ列及び前記第四データ列、または前記第五データ列及び前記第六データ列は、前記記憶部の連続した領域に記憶されており、前記左側データ列抽出部は、前記記憶部から前記第一データ列を読み出して、前記左側データ列を抽出し、前記右側データ列抽出部は、前記記憶部から前記第二データ列を読み出して、前記右側データ列を抽出することにしてもよい。
【００２８】
これによれば、第三データ列及び第四データ列、または第五データ列及び第六データ列は、連続する番号のレジスタに記憶されている。これにより、対称フィルタ演算を行うための命令コードが単純であり、当該命令コードでのレジスタのビットフィールドを削減することができる。
【００２９】
また、例えば、前記左側データ列抽出部は、連続する第三データ列と第四データ列とで構成される前記第一データ列を前記記憶部から読み出して、前記左側データ列を抽出し、前記右側データ列抽出部は、前記第一データ列を前記第二データ列として前記記憶部から読み出して、前記第三データ列の中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、前記右側データ列を抽出することにしてもよい。
【００３０】
これによれば、第三データ列の中心に配置されるデータが、中心のフィルタ係数に乗算されるデータになるように、連続する第三データ列と第四データ列とで構成される第一データ列の中から左側データ列と右側データ列とを抽出する。つまり、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。特に、対称フィルタ演算のタップ数が小さい場合には、第一データ列を１つのバッファに格納して、当該１つのバッファから左側データ列と右側データ列とを抽出することができ、処理が単純である。このため、タップ数に応じたデータ列のペアを簡易に抽出することができ、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
【００３１】
また、例えば、前記第三データ列の先頭のデータと前記第三データ列の最終のデータとの中心を前記データ中心とし、または、前記第三データ列の先頭のデータと前記第四データ列の先頭のデータとの中心を前記データ中心とし、前記左側データ列抽出部は、前記データ中心より左側のデータを先頭とする前記左側データ列を抽出し、前記右側データ列抽出部は、前記データ中心より右側のデータであって、前記データ中心に対して前記左側データ列の先頭のデータと対称となるデータを先頭とする前記右側データ列を抽出することにしてもよい。
【００３２】
これによれば、第一データ列の先頭のデータと第一データ列の最終のデータとの中心をデータ中心とし、または、第一データ列の先頭のデータと第二データ列の先頭のデータとの中心をデータ中心として、左側データ列の先頭のデータと右側データ列の先頭のデータとがデータ中心に対して左右対称となるように、左側データ列と右側データ列とを抽出する。これにより、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。このため、タップ数に応じた当該データ列のペアを抽出することで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
【００３３】
また、本発明は、このような対称型フィルタ演算装置として実現することができるだけでなく、当該対称型フィルタ演算装置に含まれる処理部が行う特徴的な処理をステップとする対称型フィルタ演算方法として実現することもできる。また、対称型フィルタ演算方法に含まれる特徴的な処理をコンピュータに実行させるプログラムや集積回路として実現したりすることもできる。そして、そのようなプログラムは、ＣＤ−ＲＯＭ等の記録媒体及びインターネット等の伝送媒体を介して流通させることができる。また、これらの装置、方法、集積回路、コンピュータプログラムおよび記録媒体の任意な組み合わせで実現されてもよい。
【００３４】
以下、本発明の実施の形態について、図面を参照しながら説明する。なお、以下で説明する実施の形態は、いずれも本発明の好ましい一具体例を示すものである。以下の実施の形態で示される数値、形状、材料、構成要素、構成要素の配置位置及び接続形態、ステップ、ステップの順序などは、一例であり、本発明を限定する主旨ではない。また、以下の実施の形態における構成要素のうち、本発明の最上位概念を示す独立請求項に記載されていない構成要素については、より好ましい形態を構成する任意の構成要素として説明される。
【００３５】
（実施の形態１）
図１は、本発明の実施の形態１における対称型フィルタ演算装置１０（以降、フィルタ演算装置１０と呼ぶ）の構成を示す図である。
【００３６】
本フィルタ演算装置１０は、左右対称のフィルタ係数を用いて、記憶部に格納されている複数のデータのフィルタ演算を行う装置であり、データシャッフル器１６０を備えていることを特徴としている。なお、以下では、記憶部は、レジスタファイルであることとして説明を行うが、記憶部はレジスタファイルには限定されない。例えば、データメモリを記憶部としてもよい。
【００３７】
同図に示すように、フィルタ演算装置１０は、命令メモリ１１０、命令フェッチ部１２０、命令デコーダ１３０、レジスタファイル１４０、メモリアクセス部１５０、データシャッフル器１６０、加算器１７０、乗算器１８０、及びデータメモリ１９０を備えている。
【００３８】
命令メモリ１１０は、フィルタ演算装置１０の動作を指示する命令を格納するメモリである。命令フェッチ部１２０は、次の実行する命令を命令メモリ１１０から取得し、取得した命令を命令デコーダ１３０に出力する。
【００３９】
命令デコーダ１３０は、命令フェッチ部１２０が出力した命令を解析し、命令を実行する演算器を決定し、メモリアクセス部１５０、データシャッフル器１６０、加算器１７０、及び乗算器１８０のうち、いずれかひとつに実行制御信号を出力する。
【００４０】
メモリアクセス部１５０は、命令デコーダ１３０からの実行制御信号に従って、データメモリ１９０からデータを取得してレジスタファイル１４０に出力するか、レジスタファイル１４０からデータを取得してデータメモリ１９０に出力する。
【００４１】
データシャッフル器１６０は、レジスタファイル１４０からデータを取得してデータの並び替えを行い、結果を加算器１７０に出力する。具体的には、データシャッフル器１６０は、同じフィルタ係数に乗算されるデータ列のペアとして、左側フィルタ係数に乗算される左側データ列と、左側フィルタ係数と同じ値の右側フィルタ係数に乗算される右側データ列とを抽出する。
【００４２】
なお、ここでは、データシャッフル器１６０は、対称フィルタ演算を行うためにデータの並び替えを行うこととするが、データシャッフル器１６０は、対称フィルタ演算以外の目的でデータの並び替えを行う機能を有していてもよい。このデータシャッフル器１６０の詳細な構成については、後述する。
【００４３】
加算器１７０は、データシャッフル器１６０からデータを取得して加算演算を行い、結果をレジスタファイル１４０に出力する。具体的には、加算器１７０は、データシャッフル器１６０が抽出した左側データ列と右側データ列とを加算して、加算データ列を算出する。なお、加算器１７０は、請求の範囲に記載の「加算部」の機能を有する。
【００４４】
なお、データシャッフル器１６０と加算器１７０とが１つの処理部として、データの並び替え及び加算演算を行うとしたが、データシャッフル器１６０がレジスタファイル１４０に並び替え後のデータを出力し、加算器１７０は、当該データをレジスタファイル１４０から取得して加算演算を行うことにしてもよい。
【００４５】
乗算器１８０は、レジスタファイル１４０からデータを取得して乗算演算を行い、結果をレジスタファイル１４０に出力する。具体的には、乗算器１８０は、加算器１７０が算出した加算データ列と左側フィルタ係数または右側フィルタ係数とを乗算して、乗算データ列を算出する。なお、乗算器１８０は、請求の範囲に記載の「乗算部」の機能を有する。
【００４６】
レジスタファイル１４０は、演算器群内の各演算器が出力するデータを保持するレジスタで、６４ビットのレジスタＲ０〜Ｒ３１の３２本から構成されている。
【００４７】
データメモリ１９０は、フィルタ演算装置１０での演算に必要なデータを格納するメモリである。なお、命令メモリ１１０とデータメモリ１９０とは、それぞれ個別のメモリに実装してもよいし、１つのメモリを共用する形で実装してもよい。
【００４８】
図２は、本発明の実施の形態１におけるデータシャッフル器１６０の構成を示す図である。
【００４９】
同図に示される通り、データシャッフル器１６０は、２つの６４ビットの入力ポートＡとＢと、２つの６４ビットの出力ポートＺ１とＺ２とを持ち、第一データシャッフル部１６１と、第二データシャッフル部１６２とを備えている。なお、データシャッフル器１６０の出力ポートＺ１とＺ２とから出力データが加算器１７０に出力されているが、当該出力データをレジスタファイル１４０に出力する構成にしてもよい。
【００５０】
第一データシャッフル部１６１は、２つの６４ビットの入力ポートＸ１とＹ１とを持ち、１つの６４ビットの出力ポートＺ１を持つ。第二データシャッフル部１６２は、２つの６４ビットの入力ポートＸ２とＹ２とを持ち、１つの６４ビットの出力ポートＺ２を持つ。
【００５１】
ただし、データシャッフル器１６０としては６４ビットの入力ポートを２つしか持たないため、第一データシャッフル部１６１の入力ポートＸ１と第二データシャッフル部１６２の入力ポートＸ２には、データシャッフル器１６０の入力ポートＡからデータが入力される構成になっている。同様に、第一データシャッフル部１６１の入力ポートＹ１と第二データシャッフル部１６２の入力ポートＹ２には、データシャッフル器１６０の入力ポートＢからのデータが入力される構成になっている。
【００５２】
第一データシャッフル部１６１は、実行制御信号に従って、２つの６４ビットデータを入力ポートＸ１とＹ１とを通して読み出し、バイト単位のデータの並び替えを行う。そして、第一データシャッフル部１６１は、データを並び替えた後は、出力ポートＺ１を通して、並び替えた結果の６４ビットのデータを出力する。
【００５３】
具体的には、第一データシャッフル部１６１は、レジスタファイル１４０から連続する複数のデータである第一データ列を読み出し、第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する。さらに具体的には、第一データシャッフル部１６１は、連続する第三データ列と第四データ列とで構成される第一データ列をレジスタファイル１４０から読み出して、当該左側データ列を抽出する。
【００５４】
つまり、第一データシャッフル部１６１は、入力ポートＸ１を通して第三データ列を読み出し、入力ポートＹ１を通して第四データ列を読み出す。そして、第一データシャッフル部１６１は、出力ポートＺ１を通して、左側データ列を加算器１７０に出力する。この第一データシャッフル部１６１が行う処理の詳細については、後述する。なお、第一データシャッフル部１６１は、請求の範囲に記載の「左側データ列抽出部」の機能を有する。
【００５５】
第二データシャッフル部１６２は、第一データシャッフル部１６１と同様に、実行制御信号に従って、２つの６４ビットデータを入力ポートＸ２とＹ２とを通して読み出し、バイト単位のデータの並び替えを行う。そして、第二データシャッフル部１６２は、データを並び替えた後は、出力ポートＺ２を通して、並び替えた結果の６４ビットのデータを出力する。
【００５６】
具体的には、第二データシャッフル部１６２は、レジスタファイル１４０から連続する複数のデータである第二データ列を読み出し、第二データ列の中から、中心より右側のフィルタ係数であって左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する。さらに具体的には、第二データシャッフル部１６２は、第一データ列を第二データ列としてレジスタファイル１４０から読み出して、第三データ列の中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、当該右側データ列を抽出する。
【００５７】
つまり、第二データシャッフル部１６２は、入力ポートＸ２を通して第三データ列を読み出し、入力ポートＹ２を通して第四データ列を読み出す。そして、第二データシャッフル部１６２は、出力ポートＺ２を通して、右側データ列を加算器１７０に出力する。この第二データシャッフル部１６２が行う処理の詳細については、後述する。なお、第二データシャッフル部１６２は、請求の範囲に記載の「右側データ列抽出部」の機能を有する。
【００５８】
次に、データシャッフル器１６０の動作について、説明する。図３Ａ〜図３Ｃは、本発明の実施の形態１におけるデータシャッフル器１６０の動作を説明する図である。具体的には、これらの図は、１要素が８ビットで構成された６４ビットのデータを処理する場合のデータシャッフル器１６０の動作を示す図である。
【００５９】
図３Ａは、データシャッフル器１６０に入力されるデータを示している。同図に示される通り、連続した８ビットの要素８個から構成される６４ビットデータ［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］と［ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６、ｂ７］とが、それぞれデータシャッフル器１６０の入力ポートＡとＢに入力される。
【００６０】
この場合、図３Ｂに示される通り、［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］が第三データ列として、第一データシャッフル部１６１のポートＸ１と第二データシャッフル部１６２のポートＸ２に入力される。また、［ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６、ｂ７］が第四データ列として、第一データシャッフル部１６１のポートＹ１と第二データシャッフル部１６２のポートＹ２に入力される。
【００６１】
そして、データが入力されると、第一データシャッフル部１６１と第二データシャッフル部１６２は、実行制御信号に従ってデータの並び替えを行い、並び替え後のデータを出力する。このデータの並び替えは、図３Ｃに示す表に従って行われる。
【００６２】
例えば、第一データシャッフル部１６１は、実行制御信号「０」に従ってデータの並び替えを行い、左側データ列として［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］を出力する。また、第二データシャッフル部１６２は、実行制御信号「０」に従ってデータの並び替えを行い、右側データ列として［ａ７、ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６］を出力する。
【００６３】
ここで、対称フィルタ演算のタップ数が偶数の場合には、図３Ｃに示す「０」〜「３」の実行制御信号に従ってデータの並び替えが行われ、対称フィルタ演算のタップ数が奇数の場合には、「４」〜「７」の実行制御信号に従ってデータの並び替えが行われる。詳細については、後述する。
【００６４】
図４は、本発明の実施の形態１におけるデータシャッフル器１６０及び加算器１７０を動作させるためのニーモニックと命令コードを示す図である。
【００６５】
同図の（а−１）及び（ａ−２）は、２つの入力レジスタＲａ、Ｒｂを入力として、抽出される左側データ列と右側データ列とを加算して出力レジスタＲｃを出力するニーモニックを示している。同図の（ａ−３）は、２つの入力レジスタＲａ、Ｒｂを入力として、抽出される左側データ列と右側データ列とを加算して２つの出力レジスタＲｃとＲｃ＋１を出力するニーモニックを示している。
【００６６】
具体的には、同図の（ａ−１）に示すように、ｖａｌｎａｄｄ．８では、命令ニーモニックのオペランドは、２つの入力レジスタＲａ、Ｒｂと、出力レジスタＲｃと、データ並び替えのシャッフルパターンを示す即値３ビットＩ３である。ここで、出力レジスタＲｃは、入力レジスタＲａ、Ｒｂを入力として左側データ列と右側データ列とを抽出し、抽出した左側データ列と右側データ列とを８ビット単位で加算して得られる結果である。
【００６７】
また、左側データ列のデータ要素と右側データ列のデータ要素との加算結果が８ビットを超える場合は、同図の（ａ−２）に示されたｖａｌｎａｄｄ．８ｓを用いることで、８ビットを超える加算結果の飽和処理を行い、結果を出力レジスタＲｃとして出力する。より具体的には、データ要素が８ビットの符号なしデータの場合、加算結果が２５５より大きい時には２５５に飽和処理を行う。また、データ要素が８ビットの符号ありデータの場合、加算結果が−１２８より小さい時には−１２８に飽和処理を行い、加算結果が１２７より大きい時には１２７に飽和処理を行う。
【００６８】
また、同図の（ａ−３）に示されたｖａｌｎａｄｄ．８ｌでは、左側データ列のデータ要素と右側データ列のデータ要素との加算結果を１６ビットに拡張して、結果を２つの出力レジスタＲｃ、Ｒｃ＋１として出力する。なお、加算結果は１６ビットのデータ要素が８個の１２８ビットのデータ列となり、出力レジスタが２つ必要になる。
【００６９】
なお、同図の（ｂ）のｖａｌｎ．８に示すように、２つの入力レジスタＲａ、Ｒｂを入力とし、抽出された左側データ列と右側データ列とを出力レジスタＲｃ、Ｒｃ＋１として出力することにしてもよい。ここで、命令ニーモニックのオペランドは、２つの入力レジスタＲａ、Ｒｂと、２つの出力レジスタＲｃ、Ｒｃ＋１と、データ並び替えのシャッフルパターンを示す即値３ビットＩ３である。
【００７０】
６４ビットデータを構成する要素のビット幅はオペコードで表しており、本命令の要素幅は８ビットである。なお、本シャッフル演算器のデータシャッフル器１６０に出力される実行制御信号は、シャッフルパターンの値そのものになっている。
【００７１】
本命令コードは３２ビットで構成され、データシャッフル器１６０を動作させることを示すオペコードのフィールド、シャッフルパターンのフィールド、要素幅のフィールド、及びＲａとＲｂとＲｃのレジスタ番号のフィールドから構成されている。
【００７２】
各フィールドのビット幅は、オペコードのフィールドが１２ビット、シャッフルパターンのフィールドが３ビット、要素幅のフィールドが２ビット、Ｒａ、Ｒｂ、Ｒｃのレジスタ番号のフィールドが、それぞれ５ビットである。要素幅との対応は、０ｂ００が８ビット、０ｂ０１が１６ビット、０ｂ１０が３２ビットとなる。ここで、同図の（ａ−３）と（ｂ）では出力レジスタが２つあるが、命令コードでのレジスタのビットフィールドを削減するため、２つの出力レジスタをＲｃとＲｃ＋１として、レジスタ番号は連番であるという制約を設けている。
【００７３】
なお、本実施の形態では、２つの出力レジスタのレジスタ番号は連番であるという制約を設けたが、２つの入力レジスタのレジスタ番号が連番であるという制約にしてもよい。また、２つの出力レジスタのレジスタ番号は連番であるという制約は必ずしも必要ではないため、命令コードにレジスタ番号のフィールドをさらに追加して、２つの出力レジスタのレジスタ番号が連番であるという制約を外してもよい。
【００７４】
次に、図４に示したｖａｌｎａｄｄ．８命令を使って、フィルタ演算装置１０が対称フィルタ演算を行う処理について、図５〜図９を用いて説明する。なお、ｖａｌｎ．８命令を用いることもできるし、ｖａｌｎａｄｄ．８ｓまたはｖａｌｎａｄｄ．８ｌ命令を用いる必要性が生じる可能性もあるが、以下では、一例として、ｖａｌｎａｄｄ．８命令を用いることとする。
【００７５】
図５は、本発明の実施の形態１におけるフィルタ演算装置１０が対称フィルタ演算を行う動作の一例を示すフローチャートである。図６は、本発明の実施の形態１におけるフィルタ演算装置１０が対称フィルタ演算を行うための命令を示す図である。図７〜９Ｂは、本発明の実施の形態１におけるフィルタ演算装置１０が対称フィルタ演算を行う動作を説明する図である。
【００７６】
ここで、フィルタ演算装置１０は、図２０に示した［ｐ０、ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７］の８画素に対して対称フィルタ演算を行うものとする。また、図６に示された「フィルタタップ数」の欄は、対称フィルタ演算を行うフィルタのタップ数を示す。「Ｒ０とＲ１の入力データ」の欄は、ｖａｌｎａｄｄ．８命令を行う前にレジスタＲ０、Ｒ１に入力しておく必要がある画素データを示す。図６では、画素データとしてｐ−１、ｐ−２、ｐ−３というデータがあるが、ｐ−１はｐ０の左隣接の画素、ｐ−２はｐ−１の左隣接の画素、ｐ−３はｐ−２の左隣接の画素を表す。「命令」の欄は、対称フィルタ演算でのフィルタ係数が同じとなるデータ列のペアを生成し、ペアとなるデータ列同士を加算するｖａｌｎａｄｄ．８命令を示す。
【００７７】
例として、フィルタ演算装置１０が図２０で示したｐ０〜ｐ７の８画素に対応する対称６タップフィルタ演算を行って、フィルタ演算結果ｑ０〜ｑ７を得る場合について説明する。まず、ロード命令が発行され、レジスタＲ０に［ｐ−１、ｐ０、ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６］を格納し、レジスタＲ１に［ｐ７、ｐ８、ｐ９、ｐ１０、ｐ１１、ｐ１２、ｐ１３、ｐ１４］が格納される。
【００７８】
そして、図５に示すように、第一データシャッフル部１６１は、レジスタファイル１４０から連続する第三データ列と第四データ列とで構成される第一データ列を読み出し、左側データ列を抽出する（Ｓ１０２）。
【００７９】
具体的には、図６に示されたフィルタタップ数「６」の場合の命令である「ｖａｌｎａｄｄ．８  Ｒ２、Ｒ０、Ｒ１、１」が発行される。この場合、第一データシャッフル部１６１は、第三データ列としてのレジスタＲ０の［ｐ−１、ｐ０、ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６］と第四データ列としてのレジスタＲ１の［ｐ７、ｐ８、ｐ９、ｐ１０、ｐ１１、ｐ１２、ｐ１３、ｐ１４］とで構成される第一データ列を読み出す。そして、第一データシャッフル部１６１は、図３Ｃに示された実行制御信号「１」の場合のデータ出力である［ｐ０、ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７］を、左側データ列として抽出する。
【００８０】
また、第二データシャッフル部１６２は、第一データ列を第二データ列としてレジスタファイル１４０から読み出して、第三データ列の中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、右側データ列を抽出する（Ｓ１０４）。
【００８１】
具体的には、「ｖａｌｎａｄｄ．８  Ｒ２、Ｒ０、Ｒ１、１」の命令が発行されているので、第二データシャッフル部１６２は、第三データ列としてのレジスタＲ０の［ｐ−１、ｐ０、ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６］と第四データ列としてのレジスタＲ１の［ｐ７、ｐ８、ｐ９、ｐ１０、ｐ１１、ｐ１２、ｐ１３、ｐ１４］とで構成される第一データ列を第二データ列として読み出す。そして、第二データシャッフル部１６２は、図３Ｃに示された実行制御信号「１」の場合のデータ出力である［ｐ５、ｐ６、ｐ７、ｐ８、ｐ９、ｐ１０、ｐ１１、ｐ１２］を、右側データ列として抽出する。
【００８２】
つまり、図７の（ａ）に示すように、第二データシャッフル部１６２は、第三データ列［ｐ−１、ｐ０、ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６］の中心であるデータ中心Ｄに配置されるデータ「ｐ２、ｐ３」が、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、右側データ列を抽出する。
【００８３】
具体的には、対称フィルタ演算のタップ数が偶数の場合、第三データ列の先頭のデータ「ｐ−１」と第三データ列の最終のデータ「ｐ６」との中心である「ｐ２、ｐ３」をデータ中心Ｄとする。そして、第一データシャッフル部１６１は、データ中心Ｄ（ｐ２、ｐ３）より左側のデータを先頭とする左側データ列［ｐ０、ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７］を抽出する。そして、第二データシャッフル部１６２は、データ中心Ｄ（ｐ２、ｐ３）より右側のデータであって、データ中心Ｄに対して左側データ列の先頭のデータ「ｐ０」と対称となるデータ「ｐ５」を先頭とする右側データ列［ｐ５、ｐ６、ｐ７、ｐ８、ｐ９、ｐ１０、ｐ１１、ｐ１２］を抽出する。
【００８４】
このようにして、フィルタ係数ｋ０が乗算される画素データである［ｐ０、ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７］及び［ｐ５、ｐ６、ｐ７、ｐ８、ｐ９、ｐ１０、ｐ１１、ｐ１２］が抽出される。
【００８５】
最後に、この２つの画素データを加算して、レジスタＲ２に格納される［ｐ０＋ｐ５、ｐ１＋ｐ６、ｐ２＋ｐ７、ｐ３＋ｐ８、ｐ４＋ｐ９、ｐ５＋ｐ１０、ｐ６＋ｐ１１、ｐ７ｐ１２］を算出する（Ｓ１０６）。以上で、「ｖａｌｎａｄｄ．８  Ｒ２、Ｒ０、Ｒ１、１」の命令の動作が完了する。
【００８６】
そして、図６に示されたフィルタタップ数「６」の場合の次の命令である「ｖａｌｎａｄｄ．８  Ｒ３、Ｒ０、Ｒ１、２」が発行される。この場合、「ｖａｌｎａｄｄ．８  Ｒ２、Ｒ０、Ｒ１、１」の命令の場合と同様にして、第一データシャッフル部１６１は、図３Ｃに示された実行制御信号「２」の場合のデータ出力である［ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７、ｐ８］を、左側データ列として抽出する。また、第二データシャッフル部１６２は、［ｐ４、ｐ５、ｐ６、ｐ７、ｐ８、ｐ９、ｐ１０、ｐ１１］を、右側データ列として抽出する。
【００８７】
つまり、図７の（ｂ）に示すように、第一データシャッフル部１６１は、データ中心Ｄ（ｐ２、ｐ３）より左側のデータを先頭とする左側データ列［ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７、ｐ８］を抽出する。そして、第二データシャッフル部１６２は、データ中心Ｄ（ｐ２、ｐ３）より右側のデータであって、データ中心Ｄに対して左側データ列の先頭のデータ「ｐ１」と対称となるデータ「ｐ４」を先頭とする右側データ列［ｐ４、ｐ５、ｐ６、ｐ７、ｐ８、ｐ９、ｐ１０、ｐ１１］を抽出する。
【００８８】
このようにして、フィルタ係数ｋ１が乗算される画素データである［ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７、ｐ８］及び［ｐ４、ｐ５、ｐ６、ｐ７、ｐ８、ｐ９、ｐ１０、ｐ１１］が抽出される。
【００８９】
最後に、この２つの画素データを加算して、レジスタＲ３に格納される［ｐ１＋ｐ４、ｐ２＋ｐ５、ｐ３＋ｐ６、ｐ４＋ｐ７、ｐ５＋ｐ８、ｐ６＋ｐ９、ｐ７＋ｐ１０、ｐ８＋ｐ１１］を算出する（Ｓ１０６）。以上で、「ｖａｌｎａｄｄ．８  Ｒ３、Ｒ０、Ｒ１、２」の命令の動作が完了する。
【００９０】
最後に、図６に示されたフィルタタップ数「６」の場合の次の命令である「ｖａｌｎａｄｄ．８  Ｒ４、Ｒ０、Ｒ１、３」が発行される。この場合も他の命令の場合と同様に、第一データシャッフル部１６１は、図３Ｃに示された実行制御信号「３」の場合のデータ出力である［ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７、ｐ８、ｐ９］を、左側データ列として抽出する。また、第二データシャッフル部１６２は、［ｐ３、ｐ４、ｐ５、ｐ６、ｐ７、ｐ８、ｐ９、ｐ１０］を、右側データ列として抽出する。
【００９１】
つまり、図７の（ｃ）に示すように、第一データシャッフル部１６１は、データ中心Ｄの左側のデータを先頭とする左側データ列［ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７、ｐ８、ｐ９］を抽出し、第二データシャッフル部１６２は、データ中心Ｄに対して左側データ列の先頭のデータ「ｐ２」と対称となるデータ「ｐ３」を先頭とする右側データ列［ｐ３、ｐ４、ｐ５、ｐ６、ｐ７、ｐ８、ｐ９、ｐ１０］を抽出する。
【００９２】
このようにして、フィルタ係数ｋ２が乗算される画素データである［ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７、ｐ８、ｐ９］及び［ｐ３、ｐ４、ｐ５、ｐ６、ｐ７、ｐ８、ｐ９、ｐ１０］が抽出される。
【００９３】
最後に、この２つの画素データを加算して、レジスタＲ４に格納される［ｐ２＋ｐ３、ｐ３＋ｐ４、ｐ４＋ｐ５、ｐ５＋ｐ６、ｐ６＋ｐ７、ｐ７＋ｐ８、ｐ８＋ｐ９、ｐ９＋ｐ１０］を算出する（Ｓ１０６）。以上で、「ｖａｌｎａｄｄ．８  Ｒ４、Ｒ０、Ｒ１、３」の命令の動作が完了する。これにより、対称フィルタ演算でのフィルタ係数が同じとなる画素データのペアの抽出及び加算が完了となる。
【００９４】
図５に戻り、次に、乗算器１８０は、加算器１７０が算出した加算データ列と左側フィルタ係数または右側フィルタ係数とを乗算して、乗算データ列を算出する（Ｓ１０８）。なお、左側フィルタ係数と右側フィルタ係数とは同じ値であるため、乗算器１８０は、当該加算データ列に左側フィルタ係数を乗じても、当該加算データ列に右側フィルタ係数を乗じても、同じ乗算データ列を算出することができる。
【００９５】
具体的には、図８に示すように、乗算器１８０は、加算データ列Ｒ２にフィルタ係数ｋ０を乗算し、加算データ列Ｒ３にフィルタ係数ｋ１を乗算し、加算データ列Ｒ４にフィルタ係数ｋ２を乗算する。
【００９６】
そして、図５に戻り、フィルタ演算装置１０は、乗算器１８０が算出した乗算データ列を累積加算することで、対称フィルタ演算の結果を出力する（Ｓ１１０）。具体的には、図８に示すように、フィルタ演算装置は、乗算器１８０が算出した３つの乗算結果を累積加算することで、フィルタ演算結果［ｑ０、ｑ１、ｑ２、ｑ３、ｑ４、ｑ５、ｑ６、ｑ７］を得ることができる。
【００９７】
このように、図９Ａに示すように、レジスタＲ０の内容を［ｒ００、ｒ０１、ｒ０２、ｒ０３、ｒ０４、ｒ０５、ｒ０６、ｒ０７］として表すと、例えばフィルタ演算結果ｑ０を求める場合のフィルタ係数の対称の中心位置の画素が、ｒ０３とｒ０４の間となるように、画素が格納されるようにロードすれば、８タップまでの偶数タップの対称フィルタまで対応することができる。
【００９８】
また、奇数タップの対称フィルタでは、図９Ｂに示すように、例えばフィルタ演算結果ｑ０を求める場合のフィルタ係数の対称の中心位置の画素が、ｒ０４（同図に示すデータ中心Ｄ）となるように、画素が格納されるようにロードすればよい。つまり、フィルタ演算のタップ数が奇数の場合、第三データ列の先頭のデータ「ｒ００」と第四データ列の先頭のデータ「ｒ０８」との中心をデータ中心Ｄとする。なお、奇数タップの場合、最大９タップまでの対称フィルタにｖａｌｎａｄｄ．８命令で対応できる。
【００９９】
以上のように、本実施の形態１にかかるフィルタ演算装置１０によれば、レジスタファイル１４０に格納されている第一データ列の中から左側データ列を抽出し、レジスタファイル１４０に格納されている第二データ列の中から右側データ列を抽出する。つまり、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。このため、タップ数に応じた当該データ列のペアを抽出することで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
【０１００】
また、左側データ列と右側データ列とを加算して、左側フィルタ係数または右側フィルタ係数を乗じる。つまり、同じフィルタ係数に乗算されるデータ列のペアを加算して、当該フィルタ係数を乗じる。このため、タップ数に応じた当該加算及び乗算を行うことで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
【０１０１】
また、第三データ列の中心に配置されるデータが、中心のフィルタ係数に乗算されるデータになるように、連続する第三データ列と第四データ列とで構成される第一データ列の中から左側データ列と右側データ列とを抽出する。つまり、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。特に、対称フィルタ演算のタップ数が小さい場合には、第一データ列を１つのバッファに格納して、当該１つのバッファから左側データ列と右側データ列とを抽出することができ、処理が単純である。このため、タップ数に応じたデータ列のペアを簡易に抽出することができ、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
【０１０２】
また、フィルタ演算のタップ数が偶数の場合、第一データ列の先頭のデータと第一データ列の最終のデータとの中心をデータ中心とし、フィルタ演算のタップ数が奇数の場合、第一データ列の先頭のデータと第二データ列の先頭のデータとの中心をデータ中心として、左側データ列の先頭のデータと右側データ列の先頭のデータとがデータ中心に対して左右対称となるように、左側データ列と右側データ列とを抽出する。これにより、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。このため、タップ数に応じた当該データ列のペアを抽出することで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
【０１０３】
（実施の形態２）
図１０は、本発明の実施の形態２における対称型フィルタ演算装置１１（以降、フィルタ演算装置１１と呼ぶ）の構成を示す図である。本フィルタ演算装置１１は、実施の形態１のフィルタ演算装置１０のデータシャッフル器１６０の代わりに、データシャッフル器２００を備えていることを特徴としている。
【０１０４】
同図に示すように、フィルタ演算装置１１は、命令メモリ１１０、命令フェッチ部１２０、命令デコーダ１３０、レジスタファイル１４０、メモリアクセス部１５０、データシャッフル器２００、加算器１７０、乗算器１８０、及びデータメモリ１９０を備えている。
【０１０５】
同図において、図１に示した実施の形態１のフィルタ演算装置１０と同じ構成要素については同じ符号を用い、説明を省略する。
【０１０６】
データシャッフル器２００は、実施の形態１のフィルタ演算装置１０のデータシャッフル器１６０と同じく、レジスタファイル１４０からデータを取得してデータの並び替えを行い、結果を加算器１７０に出力する。
【０１０７】
なお、実施の形態１と同様、データシャッフル器２００と加算器１７０とが１つの処理部として、データの並び替え及び加算演算を行うとしたが、データシャッフル器２００がレジスタファイル１４０に並び替え後のデータを出力し、加算器１７０は、当該データをレジスタファイル１４０から取得して加算演算を行うことにしてもよい。
【０１０８】
また、データシャッフル器２００は、フィルタ演算以外の目的でデータを並び替える機能を有していてもよい。このデータシャッフル器２００のデータシャッフル器１６０との具体的な違いについては、以降で説明する。
【０１０９】
図１１は、データシャッフル器２００の構成を示す図である。
【０１１０】
同図に示される通り、データシャッフル器は、４つの６４ビットの入力ポートＡとＢとＣとＤと、２つの６４ビットの出力ポートＺ１とＺ２とを持ち、第一データシャッフル部２０１と、第二データシャッフル部２０２とを備えている。なお、データシャッフル器２００は、入力ポートＡとＢを合わせて１つの１２８ビットの入力ポートとし、入力ポートＣとＤを合わせて１つの１２８ビットの入力ポートとする構成にしてもよい。
【０１１１】
第一データシャッフル部２０１は、４つの６４ビットの入力ポートＸ１０とＹ１０とＸ１１とＹ１１とを持ち、１つの６４ビットの出力ポートＺ１を持つ。第二データシャッフル部２０２は、４つの６４ビットの入力ポートＸ２０とＹ２０とＸ２１とＹ２１とを持ち、１つの６４ビットの出力ポートＺ２を持つ。なお、実施の形態１と同様、データシャッフル器２００の出力ポートＺ１とＺ２から出力データが加算器１７０に出力されているが、当該出力データをレジスタ１４０に出力する構成にしてもよい。
【０１１２】
第一データシャッフル部２０１の入力ポートＸ１０には、データシャッフル器２００の入力ポートＡからデータが入力され、第一データシャッフル部２０１の入力ポートＹ１０には、データシャッフル器２００の入力ポートＢからデータが入力される構成になっている。同様に、第一データシャッフル部２０１の入力ポートＸ１１には、データシャッフル器２００の入力ポートＣからデータが入力され、入力ポートＹ１１には入力ポートＤからデータが入力される。なお、第一データシャッフル部２０１は、入力ポートＸ１０とＹ１０を合わせて１つの入力ポートとし、入力ポートＸ１１とＹ１１を合わせて１つの入力ポートとする構成にしてもよい。
【０１１３】
また、第二データシャッフル部２０２の入力ポートＸ２０には、データシャッフル器２００の入力ポートＡからデータが入力され、第二データシャッフル部２０２の入力ポートＹ２０には、データシャッフル器２００の入力ポートＢからデータが入力される構成になっている。同様に、第二データシャッフル部２０２の入力ポートＸ２１には、データシャッフル器２００の入力ポートＣからデータが入力され、入力ポートＹ２１には入力ポートＤからデータが入力される。なお、第二データシャッフル部２０２は、入力ポートＸ２０とＹ２０を合わせて１つの入力ポートとし、入力ポートＸ２１とＹ２１を合わせて１つの入力ポートとする構成にしてもよい。
【０１１４】
第一データシャッフル部２０１は、実行制御信号に従って、４つの６４ビットデータを入力ポートＸ１０とＹ１０とＸ１１とＹ１１とを通して読み出し、バイト単位のデータの並び替えを行う。そして、第一データシャッフル部２０１は、データを並び替えた後は、出力ポートＺ１を通して、並び替えた結果の６４ビットのデータを出力する。
【０１１５】
具体的には、第一データシャッフル部２０１は、レジスタファイル１４０から連続する複数のデータである第一データ列を読み出し、第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する。さらに具体的には、第一データシャッフル部２０１は、連続する第三データ列と第四データ列とで構成される第一データ列をレジスタファイル１４０から読み出して、当該左側データ列を抽出する。
【０１１６】
つまり、第一データシャッフル部２０１は、入力ポートＸ１０を通して第三データ列を読み出し、入力ポートＹ１０を通して第四データ列を読み出す。そして、第一データシャッフル部２０１は、出力ポートＺ１を通して、左側データ列を加算器１７０に出力する。ここで、第一データシャッフル部２０１は、入力ポートＸ１１及びＹ１１を通して読み出した第二データ列も用いてデータ中心を定めることで、左側データ列を抽出する。この第一データシャッフル部２０１が行う処理の詳細については、後述する。なお、第一データシャッフル部２０１は、請求の範囲に記載の「左側データ列抽出部」の機能を有する。
【０１１７】
第二データシャッフル部２０２は、第一データシャッフル部２０１と同様に、実行制御信号に従って、４つの６４ビットデータを入力ポートＸ２０とＹ２０とＸ２１とＹ２１とを通して読み出し、バイト単位のデータの並び替えを行う。そして、第二データシャッフル部２０２は、データを並び替えた後は、出力ポートＺ２を通して、並び替えた結果の６４ビットのデータを出力する。
【０１１８】
具体的には、第二データシャッフル部２０２は、レジスタファイル１４０から連続する複数のデータである第二データ列を読み出し、第二データ列の中から、中心より右側のフィルタ係数であって左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する。さらに具体的には、第二データシャッフル部２０２は、第三データ列の先頭のデータ及び第六データ列の先頭のデータの中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する第五データ列と第六データ列とで構成される第二データ列をレジスタファイル１４０から読み出して、当該右側データ列を抽出する。
【０１１９】
つまり、第二データシャッフル部２０２は、入力ポートＸ２１を通して第五データ列を読み出し、入力ポートＹ２１を通して第六データ列を読み出す。そして、第二データシャッフル部２０２は、出力ポートＺ２を通して、右側データ列を加算器１７０に出力する。ここで、第二データシャッフル部２０２は、入力ポートＸ２０及びＹ２０を通して読み出した第一データ列も用いてデータ中心を定めることで、右側データ列を抽出する。この第二データシャッフル部２０２が行う処理の詳細については、後述する。なお、第二データシャッフル部２０２は、請求の範囲に記載の「右側データ列抽出部」の機能を有する。
【０１２０】
次に、データシャッフル器２００の動作について、説明する。本実施の形態のデータシャッフル器２００は、実施の形態１のデータシャッフル器１６０と異なり、実行制御信号によって、レジスタファイル１４０から読み出すレジスタの数が変わる。データシャッフル器２００は、実行制御信号が０〜７の場合は６４ビットレジスタを２つ、８〜１５の場合は６４ビットレジスタ４つ、レジスタファイル１４０から読み出す。
【０１２１】
図１２〜図１４Ｂは、本発明の実施の形態２におけるデータシャッフル器２００の動作を説明する図である。まず、図１２は、実行制御信号が０〜７の場合に、データシャッフル器２００に入力されるデータを示している。
【０１２２】
図１２に示すように、実行制御信号が０〜７の場合は、１つの６４ビットレジスタのデータ［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］がポートＡに入力され、もう１つの６４ビットレジスタのデータ［ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６、ｂ７］がポートＢに入力される。なお、ポートＣとポートＤにはデータは入力されない。
【０１２３】
この場合、図３Ｂに示される通り、実施の形態１のデータシャッフル器１６０と同様に、［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］が、第一データシャッフル部２０１のポートＸ１０と第二データシャッフル部２０２のポートＸ２０とに入力される。また、［ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６、ｂ７］が、第一データシャッフル部２０１のポートＹ１０と第二データシャッフル部２０２のポートＹ２０とに入力される。
【０１２４】
また、データが入力されると、第一データシャッフル部１６１と第二データシャッフル部１６２は、実行制御信号に従ってデータの並び替えを行う。データの並び替えは、実施の形態１のデータシャッフル器１６０と同様に、図３Ｃに示す表に従って行われる。
【０１２５】
次に、実行制御信号が８〜１５の場合について説明する。図１３Ａは、実行制御信号が８〜１５の場合に、データシャッフル器２００に入力されるデータを示している。
【０１２６】
同図に示される通り、実行制御信号が８〜１５の場合は、１つの６４ビットレジスタのデータ［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］がポートＡに入力され、別の１つの６４ビットレジスタのデータ［ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６、ｂ７］がポートＢに入力される。また、さらに別の１つの６４ビットレジスタのデータ［ｃ０、ｃ１、ｃ２、ｃ３、ｃ４、ｃ５、ｃ６、ｃ７］がポートＣに入力され、別の１つの６４ビットレジスタのデータ［ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５、ｄ６、ｄ７］がポートＤに入力される。
【０１２７】
この場合、図１３Ｂに示される通り、［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］が第一データシャッフル部２０１のポートＸ１０に入力され、［ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６、ｂ７］が第一データシャッフル部２０１のポートＹ１０に入力される。また、［ｃ０、ｃ１、ｃ２、ｃ３、ｃ４、ｃ５、ｃ６、ｃ７］が第一データシャッフル部２０１のポートＸ１１に、［ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５、ｄ６、ｄ７］が第一データシャッフル部２０１のポートＹ１１に入力される。
【０１２８】
また、［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］が第二データシャッフル部２０２のポートＸ２０に入力され、［ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６、ｂ７］が第二データシャッフル部２０２のポートＹ２０に入力される。また、［ｃ０、ｃ１、ｃ２、ｃ３、ｃ４、ｃ５、ｃ６、ｃ７］が第二データシャッフル部２０２のポートＸ２１に、［ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５、ｄ６、ｄ７］が第二データシャッフル部２０２のポートＹ２１に入力される。
【０１２９】
そして、データが入力されると、第一データシャッフル部２０１と第二データシャッフル部２０２は、実行制御信号に従ってデータの並び替えを行う。データの並び替えは、図１３Ｃに示す表に従って行われる。
【０１３０】
具体的には、対称フィルタ演算のタップ数が偶数の場合には、図１４Ａに示すように、第一データシャッフル部２０１は、例えば、実行制御信号「８」に従ってデータの並び替えを行い、左側データ列として［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］を出力する。また、第二データシャッフル部２０２は、実行制御信号「８」に従ってデータの並び替えを行い、右側データ列として［ｃ７、ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５、ｄ６］を出力する。また、第一データシャッフル部２０１は、実行制御信号「９」に従って、左側データ列として［ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７、ｂ０］を出力する。また、第二データシャッフル部２０２は、実行制御信号「８」に従って、右側データ列として［ｃ６、ｃ７、ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５］を出力する。
【０１３１】
また、対称フィルタ演算のタップ数が奇数の場合には、図１４Ｂに示すように、第一データシャッフル部２０１は、例えば、実行制御信号「１６」に従ってデータの並び替えを行い、左側データ列として［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］を出力する。また、第二データシャッフル部２０２は、実行制御信号「１６」に従ってデータの並び替えを行い、右側データ列として［ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５、ｄ６、ｄ７］を出力する。また、第一データシャッフル部２０１は、実行制御信号「１７」に従ってデータの並び替えを行い、左側データ列として［ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７、ｂ０］を出力する。また、第二データシャッフル部２０２は、実行制御信号「１６」に従って、右側データ列として［ｃ７、ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５、ｄ６］を出力する。
【０１３２】
このように、対称フィルタ演算のタップ数が偶数の場合には、図１３Ｃに示す「８」〜「１５」の実行制御信号に従ってデータの並び替えが行われ、対称フィルタ演算のタップ数が奇数の場合には、「１６」〜「２３」の実行制御信号に従ってデータの並び替えが行われる。
【０１３３】
図１５は、本発明の実施の形態２におけるデータシャッフル器２００及び加算器１７０を動作させるためのニーモニックと命令コードを示す図である。なお、図４に示された命令ニーモニックと命令コードについても、実施の形態１のデータシャッフル器１６０及び加算器１７０と同様に、データシャッフル器２００及び加算器１７０を動作させるが、実施の形態１のデータシャッフル器１６０及び加算器１７０と同じ動作であるため、説明を省略する。
【０１３４】
図１５の（а−１）及び（ａ−２）は、４つの入力レジスタＲａ、Ｒａ＋１、Ｒｂ、Ｒｂ＋１を入力として、抽出される左側データ列と右側データ列とを加算して出力レジスタＲｃを出力するニーモニックを示している。同図の（ａ−３）は、４つの入力レジスタＲａ、Ｒａ＋１、Ｒｂ、Ｒｂ＋１を入力として、抽出される左側データ列と右側データ列とを加算して２つの出力レジスタＲｃとＲｃ＋１を出力するニーモニックを示している。
【０１３５】
具体的には、同図の（ａ−１）に示すように、ｖａｌｎｐａｄｄ．８では、命令ニーモニックのオペランドは、４つの入力レジスタＲａ、Ｒａ＋１、Ｒｂ、Ｒｂ＋１と、出力レジスタＲｃと、データ並び替えのシャッフルパターンを示す即値３ビットＩ３である。ここで、出力レジスタＲｃは、入力レジスタＲａ、Ｒａ＋１、Ｒｂ、Ｒｂ＋１を入力として左側データ列と右側データ列とを抽出し、抽出した左側データ列と右側データ列とを８ビット単位で加算して得られる結果である。
【０１３６】
また、左側データ列のデータ要素と右側データ列のデータ要素との加算結果が８ビットを超える場合は、同図の（ａ−２）に示されたｖａｌｎｐａｄｄ．８ｓを用いることで、８ビットを超える加算結果の飽和処理を行い、結果を出力レジスタＲｃとして出力する。より具体的には、データ要素が８ビットの符号なしデータの場合、加算結果が２５５より大きい時には２５５に飽和処理を行う。また、データ要素が８ビットの符号ありデータの場合、加算結果が−１２８より小さい時には−１２８に飽和処理を行い、加算結果が１２７より大きい時には１２７に飽和処理を行う。
【０１３７】
また、同図の（ａ−３）に示されたｖａｌｎｐａｄｄ．８ｌでは、左側データ列のデータ要素と右側データ列のデータ要素との加算結果を１６ビットに拡張して、結果を出力レジスタＲｃ、Ｒｃ＋１として出力する。なお、加算結果は１６ビットのデータ要素が８個の１２８ビットのデータ列となり、出力レジスタが２つ必要になる。
【０１３８】
なお、同図の（ｂ）のｖａｌｎｐ．８に示すように、４つの入力レジスタＲａ、Ｒａ＋１、Ｒｂ、Ｒｂ＋１を入力とし、抽出された左側データ列と右側データ列とを出力レジスタＲｃ、Ｒｃ＋１として出力することにしてもよい。ここで、命令ニーモニックのオペランドは、４つの入力レジスタＲａ、Ｒａ＋１、Ｒｂ、Ｒｂ＋１と、２つの出力レジスタＲｃ、Ｒｃ＋１と、データ並び替えのシャッフルパターンを示す即値３ビットＩ３である。
【０１３９】
また、命令コードでのレジスタのビットフィールドを削減するため、４つの入力レジスタは、２つずつレジスタ番号は連番であるという制約を設けている。つまり、第三データ列及び第四データ列、または第五データ列及び第六データ列は、連続する番号のレジスタに記憶されている。
【０１４０】
また、６４ビットデータを構成する要素のビット幅はオペコードで表しており、本命令の要素幅は８ビットである。なお、本シャッフル演算器のデータシャッフル器２００に出力される実行制御信号は、シャッフルパターンの値に８を加えた値になっている。
【０１４１】
同図に示される命令コードは３２ビットで構成され、データシャッフル器２００を動作させることを示すオペコードのフィールド、シャッフルパターンのフィールド、要素幅のフィールド、及びＲａとＲｂとＲｃのレジスタ番号のフィールドから構成されている。
【０１４２】
各フィールドのビット幅は、オペコードのフィールドが１１ビット、シャッフルパターンのフィールドが４ビット、要素幅のフィールドが２ビット、Ｒａ、Ｒｂ、Ｒｃのレジスタ番号のフィールドが、それぞれ５ビットである。ここで、要素幅との対応は、０ｂ００が８ビット、０ｂ０１が１６ビット、０ｂ１０が３２ビットとなる。
【０１４３】
なお、本実施の形態では、レジスタのレジスタ番号は連番であるという制約は必ずしも必要ではないため、レジスタのレジスタ番号が連番であるという制約を外してもよい。
【０１４４】
次に、図４に示したｖａｌｎａｄｄ．８命令と図１５に示したｖａｌｎｐａｄｄ．８命令とを使って、フィルタ演算装置１１が対称フィルタ演算を行う処理について、図１６及び図１７を用いて説明する。なお、ｖａｌｎｐ．８命令を用いることもできるし、ｖａｌｎｐａｄｄ．８ｓまたはｖａｌｎｐａｄｄ．８ｌ命令を用いる必要性が生じる可能性もあるが、以下では、一例として、ｖａｌｎｐａｄｄ．８命令を用いることとする。また、ｖａｌｎａｄｄ．８命令を使う場合は、図６に示されたように、実施の形態１のフィルタ演算装置１０と同じ処理になるため、説明を省略する。
【０１４５】
図１６〜図１９は、本発明の実施の形態２におけるフィルタ演算装置１１が対称フィルタ演算を行う動作を説明する図である。
【０１４６】
ここで、ｖａｌｎｐａｄｄ．８命令は、ｖａｌｎａｄｄ．８命令では対応できない９タップより大きい対称フィルタの場合に使用する。このため、まず、例えば、フィルタ演算装置１１が１６タップフィルタの対称フィルタを行う場合について、図１６及び図１７を用いて説明する。図１６及び図１７は、本発明の実施の形態２におけるフィルタ演算装置１１においてタップ数が１６の場合の対称フィルタ演算を行う動作を説明する図である。
【０１４７】
まず、ロード命令が発行されて、レジスタＲ０に画素データ［ｐ０、ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７］が格納され、レジスタＲ１に画素データ［ｐ８、ｐ９、ｐ１０、ｐ１１、ｐ１２、ｐ１３、ｐ１４、ｐ１５］が格納され、レジスタＲ２に画素データ［ｐ８、ｐ９、ｐ１０、ｐ１１、ｐ１２、ｐ１３、ｐ１４、ｐ１５］が格納され、レジスタＲ３に画素データ［ｐ１６、ｐ１７、ｐ１８、ｐ１９、ｐ２０、ｐ２１、ｐ２２、ｐ２３］が格納される。
【０１４８】
次に、フィルタタップ数「１６」の場合の命令として予め定められている「ｖａｌｎｐａｄｄ．８  Ｒ４、Ｒ０、Ｒ１、Ｒ２、Ｒ３、０」の命令が発行される。この場合、第一データシャッフル部２０１は、第三データ列としてのレジスタＲ０の［ｐ０、ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７］と第四データ列としてのレジスタＲ１の［ｐ８、ｐ９、ｐ１０、ｐ１１、ｐ１２、ｐ１３、ｐ１４、ｐ１５］とで構成される第一データ列を読み出す。そして、第一データシャッフル部２０１は、図１３Ｃに示された実行制御信号「８」の場合のデータ出力である［ｐ０、ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７］を、左側データ列として抽出する（図５のＳ１０２）。
【０１４９】
また、第二データシャッフル部２０２は、第五データ列としてのレジスタＲ２の［ｐ８、ｐ９、ｐ１０、ｐ１１、ｐ１２、ｐ１３、ｐ１４、ｐ１５］と第六データ列としてのレジスタＲ３の［ｐ１６、ｐ１７、ｐ１８、ｐ１９、ｐ２０、ｐ２１、ｐ２２、ｐ２３］とで構成される第二データ列を読み出す。そして、第二データシャッフル部２０２は、図１３Ｃに示された実行制御信号「８」の場合のデータ出力である［ｐ１５、ｐ１６、ｐ１７、ｐ１８、ｐ１９、ｐ２０、ｐ２１、ｐ２２］を、右側データ列として抽出する（図５のＳ１０４）。
【０１５０】
つまり、図１６の（ａ）に示すように、第二データシャッフル部２０２は、フィルタ演算のタップ数が偶数の場合、第三データ列の先頭のデータ「ｐ０」及び第五データ列の最終のデータ「ｐ１５」の中心であるデータ中心Ｄに配置されるデータ「ｐ７、ｐ８」が、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する第五データ列と第六データ列とで構成される第二データ列をレジスタファイル１４０から読み出して、当該右側データ列を抽出する。
【０１５１】
具体的には、第一データシャッフル部２０１は、データ中心Ｄ（ｐ７、ｐ８）より左側のデータ「ｐ０」を先頭とする左側データ列［ｐ０、ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７］を抽出する。また、第二データシャッフル部２０２は、データ中心Ｄ（ｐ７、ｐ８）より右側のデータであって、データ中心Ｄに対して左側データ列の先頭のデータ「ｐ０」と対称となるデータ「ｐ１５」を先頭とする右側データ列［ｐ１５、ｐ１６、ｐ１７、ｐ１８、ｐ１９、ｐ２０、ｐ２１、ｐ２２］を抽出する。
【０１５２】
このようにして、フィルタ係数ｋ０が乗算される画素データである［ｐ０、ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７］と［ｐ１５、ｐ１６、ｐ１７、ｐ１８、ｐ１９、ｐ２０、ｐ２１、ｐ２２］が抽出される。
【０１５３】
最後に、この抽出された２つの画素データを加算して、レジスタＲ４に格納される［ｐ０＋ｐ１５、ｐ１＋ｐ１６、ｐ２＋ｐ１７、ｐ３＋ｐ１８、ｐ４＋ｐ１９、ｐ５＋ｐ２０、ｐ６＋ｐ２１、ｐ７＋ｐ２２］を算出する。以上で、「ｖａｌｎｐａｄｄ．８  Ｒ４、Ｒ０、Ｒ１、Ｒ２、Ｒ３、０」の命令の動作が完了する。
【０１５４】
次に、フィルタタップ数「１６」の場合の次の命令として予め定められている「ｖａｌｎｐａｄｄ．８  Ｒ５、Ｒ０、Ｒ１、Ｒ２、Ｒ３、１」の命令が発行される。この場合、第一データシャッフル部２０１は、第一データ列を読み出し、図１３Ｃに示された実行制御信号「９」の場合のデータ出力である［ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７、ｐ８］を、左側データ列として抽出する。また、第二データシャッフル部２０２は、第二データ列を読み出し、図１３Ｃに示された実行制御信号「９」の場合のデータ出力である［ｐ１４、ｐ１５、ｐ１６、ｐ１７、ｐ１８、ｐ１９、ｐ２０、ｐ２１］を、右側データ列として抽出する。
【０１５５】
つまり、図１６の（ｂ）に示すように、第二データシャッフル部２０２は、データ中心Ｄ（ｐ７、ｐ８）より左側のデータ「ｐ１」を先頭とする左側データ列［ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７、ｐ８］を抽出する。また、第二データシャッフル部２０２は、データ中心Ｄ（ｐ７、ｐ８）より右側のデータであって、データ中心Ｄに対して左側データ列の先頭のデータ「ｐ１」と対称となるデータ「ｐ１４」を先頭とする右側データ列［ｐ１４、ｐ１５、ｐ１６、ｐ１７、ｐ１８、ｐ１９、ｐ２０、ｐ２１］を抽出する。
【０１５６】
このようにして、フィルタ係数ｋ１が乗算される画素データである［ｐ１、ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７、ｐ８］と［ｐ１４、ｐ１５、ｐ１６、ｐ１７、ｐ１８、ｐ１９、ｐ２０、ｐ２１］が抽出される。
【０１５７】
最後に、この抽出された２つの画素データを加算して、Ｒ５に格納される［ｐ１＋ｐ１４、ｐ２＋ｐ１５、ｐ３＋ｐ１６、ｐ４＋ｐ１７、ｐ５＋ｐ１８、ｐ６＋ｐ１９、ｐ７＋ｐ２０、ｐ８＋ｐ２１］を算出する。以上で、「ｖａｌｎｐａｄｄ．８  Ｒ５、Ｒ０、Ｒ１、Ｒ２、Ｒ３、１」の命令の動作が完了する。
【０１５８】
そして、同様にして、次に、「ｖａｌｎｐａｄｄ．８  Ｒ６、Ｒ０、Ｒ１、Ｒ２、Ｒ３、２」の命令が発行され、第一データシャッフル部２０１は、［ｐ２、ｐ３、ｐ４、ｐ５、ｐ６、ｐ７、ｐ８、ｐ９］を、左側データ列として抽出する。また、第二データシャッフル部２０２は、［ｐ１３、ｐ１４、ｐ１５、ｐ１６、ｐ１７、ｐ１８、ｐ１９、ｐ２０］を、右側データ列として抽出する。このようにして、フィルタ係数ｋ２が乗算される２つの画素データが抽出される。最後に、この抽出された２つの画素データを加算して、加算結果をレジスタＲ６に格納する。
【０１５９】
次に、「ｖａｌｎｐａｄｄ．８  Ｒ７、Ｒ０、Ｒ１、Ｒ２、Ｒ３、３」の命令が発行され、第一データシャッフル部２０１は、［ｐ３、ｐ４、ｐ５、ｐ６、ｐ７、ｐ８、ｐ９、ｐ１０］を、左側データ列として抽出する。また、第二データシャッフル部２０２は、［ｐ１２、ｐ１３、ｐ１４、ｐ１５、ｐ１６、ｐ１７、ｐ１８、ｐ１９］を、右側データ列として抽出する。このようにして、フィルタ係数ｋ３が乗算される２つ画素データが抽出される。最後に、この抽出された２つの画素データを加算して、加算結果をレジスタＲ７に格納する。
【０１６０】
次に、「ｖａｌｎｐａｄｄ．８  Ｒ８、Ｒ０、Ｒ１、Ｒ２、Ｒ３、４」の命令が発行され、第一データシャッフル部２０１は、［ｐ４、ｐ５、ｐ６、ｐ７、ｐ８、ｐ９、ｐ１０、ｐ１１］を、左側データ列として抽出する。また、第二データシャッフル部２０２は、［ｐ１１、ｐ１２、ｐ１３、ｐ１４、ｐ１５、ｐ１６、ｐ１７、ｐ１８］を、右側データ列として抽出する。このようにして、フィルタ係数ｋ４が乗算される２つの画素データが抽出される。最後に、この抽出された２つの画素データを加算して、加算結果をレジスタＲ８に格納する。
【０１６１】
次に、「ｖａｌｎｐａｄｄ．８  Ｒ９、Ｒ０、Ｒ１、Ｒ２、Ｒ３、５」の命令が発行され、第一データシャッフル部２０１は、［ｐ５、ｐ６、ｐ７、ｐ８、ｐ９、ｐ１０、ｐ１１、ｐ１２］を、左側データ列として抽出する。また、第二データシャッフル部２０２は、［ｐ１０、ｐ１１、ｐ１２、ｐ１３、ｐ１４、ｐ１５、ｐ１６、ｐ１７］を、右側データ列として抽出する。このようにして、フィルタ係数ｋ５が乗算される２つの画素データが抽出される。最後に、この抽出された２つの画素データを加算して、加算結果をレジスタＲ９に格納する。
【０１６２】
次に、「ｖａｌｎｐａｄｄ．８  Ｒ１０、Ｒ０、Ｒ１、Ｒ２、Ｒ３、６」の命令が発行され、第一データシャッフル部２０１は、［ｐ６、ｐ７、ｐ８、ｐ９、ｐ１０、ｐ１１、ｐ１２、ｐ１３］を、左側データ列として抽出する。また、第二データシャッフル部２０２は、［ｐ９、ｐ１０、ｐ１１、ｐ１２、ｐ１３、ｐ１４、ｐ１５、ｐ１６］を、右側データ列として抽出する。このようにして、フィルタ係数ｋ６が乗算される２つの画素データが抽出される。最後に、この抽出された２つの画素データを加算して、加算結果をレジスタＲ１０に格納する。
【０１６３】
次に、「ｖａｌｎｐａｄｄ．８  Ｒ１１、Ｒ０、Ｒ１、Ｒ２、Ｒ３、７」の命令が発行され、第一データシャッフル部２０１は、［ｐ７、ｐ８、ｐ９、ｐ１０、ｐ１１、ｐ１２、ｐ１３、ｐ１４］を、左側データ列として抽出する。また、第二データシャッフル部２０２は、［ｐ８、ｐ９、ｐ１０、ｐ１１、ｐ１２、ｐ１３、ｐ１４、ｐ１５］を、右側データ列として抽出する。このようにして、フィルタ係数ｋ７が乗算される２つの画素データが抽出される。最後に、この抽出された２つの画素データを加算して、加算結果をレジスタＲ１１に格納する。
【０１６４】
これにより、対称フィルタ演算でのフィルタ係数が同じとなるデータのペアの抽出及び加算が完了となる。
【０１６５】
次に、乗算器１８０は、加算器１７０が算出した加算データ列と左側フィルタ係数または右側フィルタ係数とを乗算して、乗算データ列を算出する（図５のＳ１０８）。なお、左側フィルタ係数と右側フィルタ係数とは同じ値であるため、乗算器１８０は、当該加算データ列に左側フィルタ係数を乗じても、当該加算データ列に右側フィルタ係数を乗じても、同じ乗算データ列を算出することができる。
【０１６６】
具体的には、図１７に示すように、乗算器１８０は、加算データ列Ｒ４にフィルタ係数ｋ０を乗算し、加算データ列Ｒ５にフィルタ係数ｋ１を乗算し、加算データ列Ｒ６にフィルタ係数ｋ２を乗算し、加算データ列Ｒ７にフィルタ係数ｋ３を乗算し、加算データ列Ｒ８にフィルタ係数ｋ４を乗算し、加算データ列Ｒ９にフィルタ係数ｋ５を乗算し、加算データ列Ｒ１０にフィルタ係数ｋ６を乗算し、加算データ列Ｒ１１にフィルタ係数ｋ７を乗算する。
【０１６７】
そして、フィルタ演算装置１０は、乗算器１８０が算出した乗算データ列を累積加算することで、対称フィルタ演算の結果を出力する（図５のＳ１１０）。具体的には、図１７に示すように、フィルタ演算装置１０は、乗算器１８０が算出した８つの乗算結果を累積加算することで、フィルタ演算結果［ｑ０、ｑ１、ｑ２、ｑ３、ｑ４、ｑ５、ｑ６、ｑ７］を得ることができる。
【０１６８】
このように、フィルタ演算のタップ数が偶数の場合、レジスタＲ０の内容を［ｒ００、ｒ０１、ｒ０２、ｒ０３、ｒ０４、ｒ０５、ｒ０６、ｒ０７］として表し、レジスタＲ２の内容を［ｒ２０、ｒ２１、ｒ２２、ｒ２３、ｒ２４、ｒ２５、ｒ２６、ｒ２７］として表すと、例えばフィルタ演算結果ｑ０を求める場合のフィルタ係数の対称の中心位置から対称となる位置の画素を、Ｒ０とＲ２に格納されるようにロードすれば、フィルタのタップ数がどれほど大きい対称フィルタであっても対応することができる。
【０１６９】
なお、Ｒ０とＲ２へのロードに加えて、Ｒ１には、Ｒ０に格納されている画素データの右連続データをロードし、Ｒ３には、Ｒ２に格納されている画像データの右連続データをロードしておく必要がある。フィルタ演算を行う上で必要となる画素がＲ０、Ｒ１、Ｒ２、Ｒ３の４つに入りきらないほどフィルタのタップ数が大きい場合も、同様の手順でフィルタ係数の対称の中心位置から対称となる位置の画素を順にレジスタにロードしながら、ｖａｌｎｐａｄｄ．８命令を発行していけば、対応が可能である。
【０１７０】
以下に、タップ数が偶数で大きい値の場合のフィルタ演算装置１１が行う対称フィルタ演算について、詳細に説明する。図１８は、本発明の実施の形態２におけるフィルタ演算装置１１においてタップ数が４８の場合の対称フィルタ演算を行う動作を説明する図である。
【０１７１】
同図に示すように、フィルタ演算のタップ数が偶数である４８の場合、フィルタ演算装置１１は、第三データ列の先頭のデータと第五データ列の最終のデータとの中心に配置されるデータ（データ列ＲＣの最終のデータとデータ列ＲＤの先頭のデータ）に対して、左右対称のデータを先頭とする２つのデータ列である左側データ列及び右側データ列を抽出する。なお、フィルタ演算のタップ数が偶数であるので、図１３Ｃに示す「８」〜「１５」の実行制御信号に従って、データが抽出される。
【０１７２】
具体的には、フィルタ演算装置１１は、図１８の（ａ）と（ｂ）と（ｃ）の３段階に分けて左側データ列及び右側データ列を抽出し、対称フィルタ演算を行う。
【０１７３】
まず同図の（ａ）では、第一データシャッフル部２０１は、連続する第三データ列ＲＡと第四データ列ＲＢとで構成される第一データ列をレジスタファイル１４０から読み出して、データ中心より左側のデータを先頭とする左側データ列を抽出する。例えば、第一データシャッフル部２０１は、第三データ列ＲＡのデータ「ａ０」を先頭とする左側データ列［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］を抽出する。
【０１７４】
また、第二データシャッフル部２０２は、上記の中心に配置されるデータ（データ列ＲＣの最終のデータとデータ列ＲＤの先頭のデータ）が、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する第五データ列ＲＦと第六データ列ＲＧとで構成される第二データ列をレジスタファイル１４０から読み出して、右側データ列を抽出する。
【０１７５】
具体的には、第二データシャッフル部２０２は、データ中心より右側のデータであって、データ中心に対して左側データ列の先頭のデータと対称となるデータを先頭とする右側データ列を抽出する。例えば、第二データシャッフル部２０２は、第五データ列ＲＦの最終のデータ「ｃ７」を先頭とする右側データ列［ｃ７、ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５、ｄ６］を抽出する。
【０１７６】
そして、同様にして、第一データシャッフル部２０１は、左側データ列［ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７、ｂ０］を抽出し、第二データシャッフル部２０２は、右側データ列［ｃ６、ｃ７、ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５］を抽出する。そして、同様に次々とデータの抽出が行われていき、最後に、第一データシャッフル部２０１は、左側データ列［ａ７、ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６］を抽出し、第二データシャッフル部２０２は、右側データ列［ｃ０、ｃ１、ｃ２、ｃ３、ｃ４、ｃ５、ｃ６、ｃ７］を抽出する。
【０１７７】
次に、同図の（ｂ）で、第一データシャッフル部２０１は、連続する第三データ列ＲＢと第四データ列ＲＣとで構成される第一データ列をレジスタファイル１４０から読み出して、例えば、第三データ列ＲＢのデータ「ａ０」を先頭とする左側データ列［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］を抽出する。
【０１７８】
また、第二データシャッフル部２０２は、連続する第五データ列ＲＥと第六データ列ＲＦとで構成される第二データ列をレジスタファイル１４０から読み出して、例えば、第五データ列ＲＥの最終のデータ「ｃ７」を先頭とする右側データ列［ｃ７、ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５、ｄ６］を抽出する。
【０１７９】
そして、同様にして、第一データシャッフル部２０１は、左側データ列［ａ７、ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６］まで抽出し、第二データシャッフル部２０２は、右側データ列［ｃ０、ｃ１、ｃ２、ｃ３、ｃ４、ｃ５、ｃ６、ｃ７］まで抽出する。
【０１８０】
次に、同図の（ｃ）で、第一データシャッフル部２０１は、連続する第三データ列ＲＣと第四データ列ＲＤとで構成される第一データ列をレジスタファイル１４０から読み出して、例えば、第三データ列ＲＣのデータ「ａ０」を先頭とする左側データ列［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］を抽出する。
【０１８１】
また、第二データシャッフル部２０２は、連続する第五データ列ＲＤと第六データ列ＲＥとで構成される第二データ列をレジスタファイル１４０から読み出して、例えば、第五データ列ＲＤの最終のデータ「ｃ７」を先頭とする右側データ列［ｃ７、ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５、ｄ６］を抽出する。
【０１８２】
そして、同様にして、第一データシャッフル部２０１は、左側データ列［ａ７、ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６］まで抽出し、第二データシャッフル部２０２は、右側データ列［ｃ０、ｃ１、ｃ２、ｃ３、ｃ４、ｃ５、ｃ６、ｃ７］まで抽出する。
【０１８３】
以上のようにして、全てのペアになるデータ列が抽出されるため、抽出されたペア同士のデータ列が加算され、フィルタ係数と乗算されて、累積加算される。
【０１８４】
次に、タップ数が奇数で大きい値の場合のフィルタ演算装置１１が行う対称フィルタ演算について、詳細に説明する。図１９は、本発明の実施の形態２におけるフィルタ演算装置１１においてタップ数が４９の場合の対称フィルタ演算を行う動作を説明する図である。
【０１８５】
同図に示すように、フィルタ演算のタップ数が奇数である４９の場合、フィルタ演算装置１１は、第三データ列の先頭のデータと第六データ列の先頭のデータとの中心に配置されるデータ（データ列ＲＤの先頭のデータ）に対して、左右対称のデータを先頭とする２つのデータ列である左側データ列及び右側データ列を抽出する。なお、フィルタ演算のタップ数が奇数であるので、図１３Ｃに示す「１６」〜「２３」の実行制御信号に従って、データが抽出される。
【０１８６】
具体的には、フィルタ演算装置１１は、図１８の（ａ）と（ｂ）と（ｃ）の３段階に分けて左側データ列及び右側データ列を抽出し、対称フィルタ演算を行う。
【０１８７】
まず同図の（ａ）では、第一データシャッフル部２０１は、連続する第三データ列ＲＡと第四データ列ＲＢとで構成される第一データ列をレジスタファイル１４０から読み出して、データ中心より左側のデータを先頭とする左側データ列を抽出する。例えば、第一データシャッフル部２０１は、第三データ列ＲＡのデータ「ａ０」を先頭とする左側データ列［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］を抽出する。
【０１８８】
また、第二データシャッフル部２０２は、上記の中心に配置されるデータ（データ列ＲＤの先頭のデータ）が、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する第五データ列ＲＦと第六データ列ＲＧとで構成される第二データ列をレジスタファイル１４０から読み出して、右側データ列を抽出する。
【０１８９】
具体的には、第二データシャッフル部２０２は、データ中心より右側のデータであって、データ中心に対して左側データ列の先頭のデータと対称となるデータを先頭とする右側データ列を抽出する。例えば、第二データシャッフル部２０２は、第五データ列ＲＧの先頭のデータ「ｄ０」を先頭とする右側データ列［ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５、ｄ６、ｄ７］を抽出する。
【０１９０】
そして、同様にして、第一データシャッフル部２０１は、左側データ列［ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７、ｂ０］を抽出し、第二データシャッフル部２０２は、右側データ列［ｃ７、ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５、ｄ６］を抽出する。そして、同様に次々とデータの抽出が行われていき、最後に、第一データシャッフル部２０１は、左側データ列［ａ７、ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６］を抽出し、第二データシャッフル部２０２は、右側データ列［ｃ１、ｃ２、ｃ３、ｃ４、ｃ５、ｃ６、ｃ７、ｄ０］を抽出する。
【０１９１】
次に、同図の（ｂ）で、第一データシャッフル部２０１は、連続する第三データ列ＲＢと第四データ列ＲＣとで構成される第一データ列をレジスタファイル１４０から読み出して、例えば、第三データ列ＲＢのデータ「ａ０」を先頭とする左側データ列［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］を抽出する。
【０１９２】
また、第二データシャッフル部２０２は、連続する第五データ列ＲＥと第六データ列ＲＦとで構成される第二データ列をレジスタファイル１４０から読み出して、例えば、第六データ列ＲＦの先頭のデータ「ｄ０」を先頭とする右側データ列［ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５、ｄ６、ｄ７］を抽出する。
【０１９３】
そして、同様にして、第一データシャッフル部２０１は、左側データ列［ａ７、ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６］まで抽出し、第二データシャッフル部２０２は、右側データ列［ｃ１、ｃ２、ｃ３、ｃ４、ｃ５、ｃ６、ｃ７、ｄ０］まで抽出する。
【０１９４】
次に、同図の（ｃ）で、第一データシャッフル部２０１は、連続する第三データ列ＲＣと第四データ列ＲＤとで構成される第一データ列をレジスタファイル１４０から読み出して、例えば、第三データ列ＲＣのデータ「ａ０」を先頭とする左側データ列［ａ０、ａ１、ａ２、ａ３、ａ４、ａ５、ａ６、ａ７］を抽出する。
【０１９５】
また、第二データシャッフル部２０２は、連続する第五データ列ＲＤと第六データ列ＲＥとで構成される第二データ列をレジスタファイル１４０から読み出して、例えば、第六データ列ＲＥの先頭のデータ「ｄ０」を先頭とする右側データ列［ｄ０、ｄ１、ｄ２、ｄ３、ｄ４、ｄ５、ｄ６、ｄ７］を抽出する。
【０１９６】
そして、同様にして、第一データシャッフル部２０１は、左側データ列［ａ７、ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６］まで抽出し、第二データシャッフル部２０２は、右側データ列［ｃ１、ｃ２、ｃ３、ｃ４、ｃ５、ｃ６、ｃ７、ｄ０］まで抽出する。また、第一データシャッフル部２０１は、中心のフィルタ係数が乗算されるデータ列［ｂ０、ｂ１、ｂ２、ｂ３、ｂ４、ｂ５、ｂ６、ｂ７］を抽出する。
【０１９７】
以上のようにして、全てのペアになるデータ列が抽出されるため、抽出されたペア同士のデータ列が加算され、フィルタ係数と乗算されて、累積加算される。
【０１９８】
以上のように、本実施の形態２にかかるフィルタ演算装置１１によれば、フィルタ演算のタップ数が偶数の場合、第三データ列の先頭のデータと第五データ列の最終のデータとの中心に配置されるデータが、中心のフィルタ係数に乗算されるデータになるように、連続する第三データ列と第四データ列とで構成される第一データ列の中から左側データ列を抽出し、連続する第五データ列と第六データ列とで構成される第二データ列の中から右側データ列を抽出する。また、フィルタ演算のタップ数が奇数の場合、第三データ列の先頭のデータと第六データ列の先頭のデータとの中心に配置されるデータが、中心のフィルタ係数に乗算されるデータになるように、当該左側データ列と右側データ列とを抽出する。
【０１９９】
これにより、第一データ列を一方のバッファに格納し、第二データ列を他方のバッファに格納して、一方のバッファから左側データ列を抽出し、他方のバッファから右側データ列を抽出するというように、一部のデータを２つのバッファに格納することで、左側データ列と右側データ列とを抽出し、対称フィルタ演算を行うことができる。
【０２００】
つまり、対称フィルタ演算のタップ数が大きい場合であっても、一部のデータを２つのバッファに分けて格納する。このため、対称フィルタ演算に用いる全てのデータをバッファに格納することなく、タップ数の大きい対称フィルタ演算を行うことができるので、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。なお、本実施の形態では、バッファは複数のレジスタから構成されているとして、これまで説明を行ってきたが、レジスタには限定されない。例えば、データメモリの一部の領域をバッファとしてもよい。
【０２０１】
また、左側データ列の先頭のデータと右側データ列の先頭のデータとがデータ中心に対して左右対称となるように、左側データ列と右側データ列とを抽出する。これにより、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。このため、タップ数に応じた当該データ列のペアを抽出することで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
【０２０２】
また、第三データ列及び第四データ列、または第五データ列及び第六データ列は、連続する番号のレジスタに記憶されている。これにより、対称フィルタ演算を行うための命令コードが単純であり、当該命令コードでのレジスタのビットフィールドを削減することができる。
【０２０３】
また、上記各実施の形態において、各構成要素は、専用のハードウェアで構成されてもよいし、各構成要素に適したソフトウェアプログラムを実行することによって実現されてもよい。例えば、各構成要素は、ＣＰＵまたはプロセッサなどのプログラム実行部が、ハードディスクまたは半導体メモリなどの記録媒体に記録されたソフトウェアプログラムを読み出して実行することによって実現されてもよい。
【０２０４】
つまり、図１または図１０に示した対称型フィルタ演算装置の各構成要素は、ソフトウェアによって実現されてもよい。そして、上記各実施の形態の対称型フィルタ演算装置を実現するソフトウェアは、次のような対称型フィルタ演算方法に含まれるステップをコンピュータに実行させるプログラムである。すなわち、この対称型フィルタ演算方法は、左右対称のフィルタ係数を用いて、記憶部に格納されている複数のデータのフィルタ演算を行う対称型フィルタ演算方法であって、前記記憶部から連続する複数のデータである第一データ列を読み出し、前記第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する左側データ列抽出ステップと、前記記憶部から連続する複数のデータである第二データ列を読み出し、前記第二データ列の中から、中心より右側のフィルタ係数であって前記左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する右側データ列抽出ステップとを含む。
【０２０５】
また、このようなプログラムは、ＣＤ−ＲＯＭ等の記録媒体及びインターネット等の伝送媒体を介して流通させることができる。
【０２０６】
また、本発明は、このような対称型フィルタ演算装置が備える特徴的な処理部を備える集積回路（ＬＳＩ）として実現することもできる。これらは個別に１チップ化されても良いし、一部又は全てを含むように１チップ化されても良い。具体的には、例えば、図１または図１０に示された対称型フィルタ演算装置が備える機能ブロックのうちメモリを除いた部分全てが１チップ化されていても良い。
【０２０７】
ここでは、ＬＳＩとしたが、集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。
【０２０８】
また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
【０２０９】
さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適応等が可能性としてありえる。
【０２１０】
以上、本発明に係るフィルタ演算装置について、上記実施の形態を用いて説明したが、本発明は、これに限定されるものではない。
【０２１１】
つまり、今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
【０２１２】
例えば、上記実施の形態１および実施の形態２では、画素データが８ビットである場合を例に説明をしたが、８ビット以外であっても構わない。また、１つのレジスタには８画素データが格納される場合を例に説明したが、８画素以外であっても構わない。実施の形態１および２に記載したように、予めフィルタ係数の対称の中心位置の画素をレジスタ内の所定の位置に格納されるようにすれば、１つのレジスタに格納される画素数が８以外にも対応ができる。
【０２１３】
また、上記実施の形態１および実施の形態２では、フィルタ演算装置は、画素データの対称フィルタ演算を行うこととしたが、対称フィルタ演算を行うデータは画素データに限定されず、音声データなど画像データ以外のデータであってもよい。
【０２１４】
また、上記実施の形態１および実施の形態２では、対称フィルタ演算を行うための命令のニーモニックで、２つの連続する番号のレジスタを「Ｒｃ：Ｒｃ＋１」、「Ｒａ、Ｒａ＋１」、「Ｒｂ、Ｒｂ＋１」と表したが、別名を付けて表しても構わない。例えば、２つの連続する番号のレジスタを１つのレジスタＸと別名を付けると、３２本の６４ビットのレジスタＲ０〜Ｒ３１は、１６本の１２８ビットのレジスタＸ０〜Ｘ１５と表すことができる。この場合、「Ｒｃ：Ｒｃ＋１」は「Ｘｃ」、「Ｒａ、Ｒａ＋１」は「Ｘａ」、「Ｒｂ、Ｒｂ＋１」は「Ｘｂ」と表すことができる。
【０２１５】
また、上記実施の形態２では、ｖａｌｎｐａｄｄ．８命令を、実施の形態１でのｖａｌｎａｄｄ．８命令では対応できない９タップより大きい対称フィルタの場合に使用することとした。しかし、ｖａｌｎｐａｄｄ．８命令は、９タップ以下の対称フィルタの場合でも使用できるため、上記実施の形態２において、タップ数に関わらずｖａｌｎｐａｄｄ．８命令を使用することにしてもよい。
【産業上の利用可能性】
【０２１６】
本発明にかかる対称型フィルタ演算装置は、対称型フィルタ演算処理行う上で有用である。画像データのフィルタ演算は、画像処理の基本的演算の一つで、本発明は画像処理を行う様々な機器で利用可能である。例えば、テレビ、デジタルビデオレコーダー、カーナビゲーション、携帯電話、デジタルカメラ、デジタルビデオカメラ等の情報表示機器や撮像機器に利用可能である。
【符号の説明】
【０２１７】
１０、１１、２０  フィルタ演算装置（対称型フィルタ演算装置）
１１０  命令メモリ
１２０  命令フェッチ部
１３０  命令デコーダ
１４０  レジスタファイル
１５０  メモリアクセス部
１６０  データシャッフル器
１６１  第一データシャッフル部
１６２  第二データシャッフル部
１７０  加算器
１８０  乗算器
１９０  データメモリ
２００  データシャッフル器
２０１  第一データシャッフル部
２０２  第二データシャッフル部
３００  バッファ
３１０  セレクタ
３２１〜３２４  フィルタ演算部
【図１】
0005903598.tif 000002
【図２】
0005903598.tif 000003
【図３Ａ】
0005903598.tif 000004
【図３Ｂ】
0005903598.tif 000005
【図３Ｃ】
0005903598.tif 000006
【図４】
0005903598.tif 000007
【図５】
0005903598.tif 000008
【図６】
0005903598.tif 000009
【図７】
0005903598.tif 000010
【図８】
0005903598.tif 000011
【図９Ａ】
0005903598.tif 000012
【図９Ｂ】
0005903598.tif 000013
【図１０】
0005903598.tif 000014
【図１１】
0005903598.tif 000015
【図１２】
0005903598.tif 000016
【図１３Ａ】
0005903598.tif 000017
【図１３Ｂ】
0005903598.tif 000018
【図１３Ｃ】
0005903598.tif 000019
【図１４Ａ】
0005903598.tif 000020
【図１４Ｂ】
0005903598.tif 000021
【図１５】
0005903598.tif 000022
【図１６】
0005903598.tif 000023
【図１７】
0005903598.tif 000024
【図１８】
0005903598.tif 000025
【図１９】
0005903598.tif 000026
【図２０】
0005903598.tif 000027
【図２１】
0005903598.tif 000028