(本発明の基礎となった知見)
本発明者は、「背景技術」の欄において記載した従来の対称型フィルタ演算装置に関し、以下の課題が生じることを見出した。
図20は、6タップの一次元画像フィルタ演算(フィルタ演算)の内容を示す図である。p0〜p8は、連続する9つの画素の画素値であり、k0〜k5は、フィルタ演算に用いられるフィルタ係数である。
図20の(a)に示す通り、6タップのフィルタ演算では、画素p0〜p5に対してそれぞれフィルタ係数k0〜k5を乗算して、その結果を累積加算してフィルタ結果q0を得る。次に、1画素ずれた画素p1〜p6に対して同様のフィルタ演算を行うことで、フィルタ結果q1が得られ、画素p2〜p7にフィルタ演算を行うとフィルタ結果q2が、画素p3〜p8にフィルタ演算を行うとフィルタ結果q3が得られる。このように、画素を1画素ずつずらしながらフィルタ演算を行うことで、画像全体についてフィルタ演算を行うことができる。
この時、k0とk5が等しく、かつ、k1とk4が等しく、かつ、k2とk3が等しい場合、フィルタ係数が対称であるといい、この場合のフィルタ演算を対称型画像フィルタ演算(対称フィルタ演算)という。対称フィルタ演算では、図20の(b)に示す通り、同じフィルタ係数を乗算する画素を予め加算してからフィルタ係数と乗算することで、乗算の回数を減らして処理を高速化することができる。例えば、特許文献1にはその手法が開示されている。
図21は、特許文献1に開示されている従来の対称型フィルタ演算装置の構成を示す図である。同図に示す対称型フィルタ演算装置20では、バッファ300から画素を読み出し、フィルタ係数が対称となる画素をセレクタ310で選択して、4つのフィルタ演算部321〜324(フィルタ演算部#1〜#4)でフィルタ演算を行う。フィルタ演算部321〜324は全て同じ構成であり、各フィルタ演算部321〜324は、セレクタ310で選択された画素に対して、6タップの対称フィルタ演算を行う。
各フィルタ演算部321〜324では、図20の(b)で示す通り、フィルタ係数が対称となる画素の画素値を予め加算してから乗算し、累積加算する。このフィルタ演算を4つのフィルタ演算部321〜324で同時に行うことで、4つのフィルタ演算結果を得ることができる。
しかしながら、上記従来の構成では、対称フィルタ演算のみを固定的に行う専用演算器になっており、プロセッサで行う場合の動作や構成については言及されていない。また、タップ数が6の対称フィルタ演算に特化した構成になっており、タップ数が6以外の対称フィルタ演算を行う場合についても言及がない。
この課題を解決するために、本発明の一態様にかかる対称型フィルタ演算装置は、左右対称のフィルタ係数を用いて、記憶部に格納されている複数のデータのフィルタ演算を行う対称型フィルタ演算装置であって、前記記憶部から連続する複数のデータである第一データ列を読み出し、前記第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する左側データ列抽出部と、前記記憶部から連続する複数のデータである第二データ列を読み出し、前記第二データ列の中から、中心より右側のフィルタ係数であって前記左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する右側データ列抽出部とを備える。
これによれば、記憶部に格納されている第一データ列の中から左側データ列を抽出し、記憶部に格納されている第二データ列の中から右側データ列を抽出する。つまり、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。このため、タップ数に応じた当該データ列のペアを抽出することで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
また、例えば、さらに、抽出された前記左側データ列と前記右側データ列とを加算して、加算データ列を算出する加算部と、算出された前記加算データ列と前記左側フィルタ係数または前記右側フィルタ係数とを乗算して、乗算データ列を算出する乗算部とを備えることにしてもよい。
これによれば、左側データ列と右側データ列とを加算して、左側フィルタ係数または右側フィルタ係数を乗じる。つまり、同じフィルタ係数に乗算されるデータ列のペアを加算して、当該フィルタ係数を乗じる。このため、タップ数に応じた当該加算及び乗算を行うことで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
また、例えば、前記左側データ列抽出部は、連続する第三データ列と第四データ列とで構成される前記第一データ列を前記記憶部から読み出して、前記左側データ列を抽出し、前記右側データ列抽出部は、(a)前記第三データ列の先頭のデータ及び第五データ列の最終のデータの中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する前記第五データ列と第六データ列とで構成される前記第二データ列を前記記憶部から読み出して、前記右側データ列を抽出する、または、(b)前記第三データ列の先頭のデータ及び第六データ列の先頭のデータの中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する第五データ列と前記第六データ列とで構成される前記第二データ列を前記記憶部から読み出して、前記右側データ列を抽出することにしてもよい。
これによれば、第三データ列の先頭のデータと第五データ列の最終のデータとの中心に配置されるデータが、中心のフィルタ係数に乗算されるデータになるように、連続する第三データ列と第四データ列とで構成される第一データ列の中から左側データ列を抽出し、連続する第五データ列と第六データ列とで構成される第二データ列の中から右側データ列を抽出する。または、第三データ列の先頭のデータと第六データ列の先頭のデータとの中心に配置されるデータが、中心のフィルタ係数に乗算されるデータになるように、当該左側データ列と右側データ列とを抽出する。これにより、第一データ列を一方のバッファに格納し、第二データ列を他方のバッファに格納して、一方のバッファから左側データ列を抽出し、他方のバッファから右側データ列を抽出するというように、一部のデータを2つのバッファに格納することで、左側データ列と右側データ列とを抽出し、対称フィルタ演算を行うことができる。
ここで、図21に示した従来の構成では、フィルタ演算する上で必要となる画素の画素値を全てバッファ300に格納する構成になっており、対称フィルタ演算のタップ数が大きい場合はバッファ300のサイズが大きくなる。そのため、上記従来の構成では、タップ数の大きい対称フィルタ演算に対応しようとした場合、対称型フィルタ演算装置20の回路規模を増大させてしまうという課題があった。
これに対し、本発明にかかる対称型フィルタ演算装置によれば、対称フィルタ演算のタップ数が大きい場合であっても、一部のデータを2つのバッファに分けて格納する。このため、対称フィルタ演算に用いる全てのデータをバッファに格納することなく、タップ数の大きい対称フィルタ演算を行うことができるので、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
また、例えば、前記左側データ列抽出部は、前記データ中心より左側のデータを先頭とする前記左側データ列を抽出し、前記右側データ列抽出部は、前記データ中心より右側のデータであって、前記データ中心に対して前記左側データ列の先頭のデータと対称となるデータを先頭とする前記右側データ列を抽出することにしてもよい。
これによれば、左側データ列の先頭のデータと右側データ列の先頭のデータとがデータ中心に対して左右対称となるように、左側データ列と右側データ列とを抽出する。これにより、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。このため、タップ数に応じた当該データ列のペアを抽出することで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
また、例えば、前記第三データ列及び前記第四データ列、または前記第五データ列及び前記第六データ列は、前記記憶部の連続した領域に記憶されており、前記左側データ列抽出部は、前記記憶部から前記第一データ列を読み出して、前記左側データ列を抽出し、前記右側データ列抽出部は、前記記憶部から前記第二データ列を読み出して、前記右側データ列を抽出することにしてもよい。
これによれば、第三データ列及び第四データ列、または第五データ列及び第六データ列は、連続する番号のレジスタに記憶されている。これにより、対称フィルタ演算を行うための命令コードが単純であり、当該命令コードでのレジスタのビットフィールドを削減することができる。
また、例えば、前記左側データ列抽出部は、連続する第三データ列と第四データ列とで構成される前記第一データ列を前記記憶部から読み出して、前記左側データ列を抽出し、前記右側データ列抽出部は、前記第一データ列を前記第二データ列として前記記憶部から読み出して、前記第三データ列の中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、前記右側データ列を抽出することにしてもよい。
これによれば、第三データ列の中心に配置されるデータが、中心のフィルタ係数に乗算されるデータになるように、連続する第三データ列と第四データ列とで構成される第一データ列の中から左側データ列と右側データ列とを抽出する。つまり、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。特に、対称フィルタ演算のタップ数が小さい場合には、第一データ列を1つのバッファに格納して、当該1つのバッファから左側データ列と右側データ列とを抽出することができ、処理が単純である。このため、タップ数に応じたデータ列のペアを簡易に抽出することができ、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
また、例えば、前記第三データ列の先頭のデータと前記第三データ列の最終のデータとの中心を前記データ中心とし、または、前記第三データ列の先頭のデータと前記第四データ列の先頭のデータとの中心を前記データ中心とし、前記左側データ列抽出部は、前記データ中心より左側のデータを先頭とする前記左側データ列を抽出し、前記右側データ列抽出部は、前記データ中心より右側のデータであって、前記データ中心に対して前記左側データ列の先頭のデータと対称となるデータを先頭とする前記右側データ列を抽出することにしてもよい。
これによれば、第一データ列の先頭のデータと第一データ列の最終のデータとの中心をデータ中心とし、または、第一データ列の先頭のデータと第二データ列の先頭のデータとの中心をデータ中心として、左側データ列の先頭のデータと右側データ列の先頭のデータとがデータ中心に対して左右対称となるように、左側データ列と右側データ列とを抽出する。これにより、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。このため、タップ数に応じた当該データ列のペアを抽出することで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
また、本発明は、このような対称型フィルタ演算装置として実現することができるだけでなく、当該対称型フィルタ演算装置に含まれる処理部が行う特徴的な処理をステップとする対称型フィルタ演算方法として実現することもできる。また、対称型フィルタ演算方法に含まれる特徴的な処理をコンピュータに実行させるプログラムや集積回路として実現したりすることもできる。そして、そのようなプログラムは、CD−ROM等の記録媒体及びインターネット等の伝送媒体を介して流通させることができる。また、これらの装置、方法、集積回路、コンピュータプログラムおよび記録媒体の任意な組み合わせで実現されてもよい。
以下、本発明の実施の形態について、図面を参照しながら説明する。なお、以下で説明する実施の形態は、いずれも本発明の好ましい一具体例を示すものである。以下の実施の形態で示される数値、形状、材料、構成要素、構成要素の配置位置及び接続形態、ステップ、ステップの順序などは、一例であり、本発明を限定する主旨ではない。また、以下の実施の形態における構成要素のうち、本発明の最上位概念を示す独立請求項に記載されていない構成要素については、より好ましい形態を構成する任意の構成要素として説明される。
(実施の形態1)
図1は、本発明の実施の形態1における対称型フィルタ演算装置10(以降、フィルタ演算装置10と呼ぶ)の構成を示す図である。
本フィルタ演算装置10は、左右対称のフィルタ係数を用いて、記憶部に格納されている複数のデータのフィルタ演算を行う装置であり、データシャッフル器160を備えていることを特徴としている。なお、以下では、記憶部は、レジスタファイルであることとして説明を行うが、記憶部はレジスタファイルには限定されない。例えば、データメモリを記憶部としてもよい。
同図に示すように、フィルタ演算装置10は、命令メモリ110、命令フェッチ部120、命令デコーダ130、レジスタファイル140、メモリアクセス部150、データシャッフル器160、加算器170、乗算器180、及びデータメモリ190を備えている。
命令メモリ110は、フィルタ演算装置10の動作を指示する命令を格納するメモリである。命令フェッチ部120は、次の実行する命令を命令メモリ110から取得し、取得した命令を命令デコーダ130に出力する。
命令デコーダ130は、命令フェッチ部120が出力した命令を解析し、命令を実行する演算器を決定し、メモリアクセス部150、データシャッフル器160、加算器170、及び乗算器180のうち、いずれかひとつに実行制御信号を出力する。
メモリアクセス部150は、命令デコーダ130からの実行制御信号に従って、データメモリ190からデータを取得してレジスタファイル140に出力するか、レジスタファイル140からデータを取得してデータメモリ190に出力する。
データシャッフル器160は、レジスタファイル140からデータを取得してデータの並び替えを行い、結果を加算器170に出力する。具体的には、データシャッフル器160は、同じフィルタ係数に乗算されるデータ列のペアとして、左側フィルタ係数に乗算される左側データ列と、左側フィルタ係数と同じ値の右側フィルタ係数に乗算される右側データ列とを抽出する。
なお、ここでは、データシャッフル器160は、対称フィルタ演算を行うためにデータの並び替えを行うこととするが、データシャッフル器160は、対称フィルタ演算以外の目的でデータの並び替えを行う機能を有していてもよい。このデータシャッフル器160の詳細な構成については、後述する。
加算器170は、データシャッフル器160からデータを取得して加算演算を行い、結果をレジスタファイル140に出力する。具体的には、加算器170は、データシャッフル器160が抽出した左側データ列と右側データ列とを加算して、加算データ列を算出する。なお、加算器170は、請求の範囲に記載の「加算部」の機能を有する。
なお、データシャッフル器160と加算器170とが1つの処理部として、データの並び替え及び加算演算を行うとしたが、データシャッフル器160がレジスタファイル140に並び替え後のデータを出力し、加算器170は、当該データをレジスタファイル140から取得して加算演算を行うことにしてもよい。
乗算器180は、レジスタファイル140からデータを取得して乗算演算を行い、結果をレジスタファイル140に出力する。具体的には、乗算器180は、加算器170が算出した加算データ列と左側フィルタ係数または右側フィルタ係数とを乗算して、乗算データ列を算出する。なお、乗算器180は、請求の範囲に記載の「乗算部」の機能を有する。
レジスタファイル140は、演算器群内の各演算器が出力するデータを保持するレジスタで、64ビットのレジスタR0〜R31の32本から構成されている。
データメモリ190は、フィルタ演算装置10での演算に必要なデータを格納するメモリである。なお、命令メモリ110とデータメモリ190とは、それぞれ個別のメモリに実装してもよいし、1つのメモリを共用する形で実装してもよい。
図2は、本発明の実施の形態1におけるデータシャッフル器160の構成を示す図である。
同図に示される通り、データシャッフル器160は、2つの64ビットの入力ポートAとBと、2つの64ビットの出力ポートZ1とZ2とを持ち、第一データシャッフル部161と、第二データシャッフル部162とを備えている。なお、データシャッフル器160の出力ポートZ1とZ2とから出力データが加算器170に出力されているが、当該出力データをレジスタファイル140に出力する構成にしてもよい。
第一データシャッフル部161は、2つの64ビットの入力ポートX1とY1とを持ち、1つの64ビットの出力ポートZ1を持つ。第二データシャッフル部162は、2つの64ビットの入力ポートX2とY2とを持ち、1つの64ビットの出力ポートZ2を持つ。
ただし、データシャッフル器160としては64ビットの入力ポートを2つしか持たないため、第一データシャッフル部161の入力ポートX1と第二データシャッフル部162の入力ポートX2には、データシャッフル器160の入力ポートAからデータが入力される構成になっている。同様に、第一データシャッフル部161の入力ポートY1と第二データシャッフル部162の入力ポートY2には、データシャッフル器160の入力ポートBからのデータが入力される構成になっている。
第一データシャッフル部161は、実行制御信号に従って、2つの64ビットデータを入力ポートX1とY1とを通して読み出し、バイト単位のデータの並び替えを行う。そして、第一データシャッフル部161は、データを並び替えた後は、出力ポートZ1を通して、並び替えた結果の64ビットのデータを出力する。
具体的には、第一データシャッフル部161は、レジスタファイル140から連続する複数のデータである第一データ列を読み出し、第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する。さらに具体的には、第一データシャッフル部161は、連続する第三データ列と第四データ列とで構成される第一データ列をレジスタファイル140から読み出して、当該左側データ列を抽出する。
つまり、第一データシャッフル部161は、入力ポートX1を通して第三データ列を読み出し、入力ポートY1を通して第四データ列を読み出す。そして、第一データシャッフル部161は、出力ポートZ1を通して、左側データ列を加算器170に出力する。この第一データシャッフル部161が行う処理の詳細については、後述する。なお、第一データシャッフル部161は、請求の範囲に記載の「左側データ列抽出部」の機能を有する。
第二データシャッフル部162は、第一データシャッフル部161と同様に、実行制御信号に従って、2つの64ビットデータを入力ポートX2とY2とを通して読み出し、バイト単位のデータの並び替えを行う。そして、第二データシャッフル部162は、データを並び替えた後は、出力ポートZ2を通して、並び替えた結果の64ビットのデータを出力する。
具体的には、第二データシャッフル部162は、レジスタファイル140から連続する複数のデータである第二データ列を読み出し、第二データ列の中から、中心より右側のフィルタ係数であって左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する。さらに具体的には、第二データシャッフル部162は、第一データ列を第二データ列としてレジスタファイル140から読み出して、第三データ列の中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、当該右側データ列を抽出する。
つまり、第二データシャッフル部162は、入力ポートX2を通して第三データ列を読み出し、入力ポートY2を通して第四データ列を読み出す。そして、第二データシャッフル部162は、出力ポートZ2を通して、右側データ列を加算器170に出力する。この第二データシャッフル部162が行う処理の詳細については、後述する。なお、第二データシャッフル部162は、請求の範囲に記載の「右側データ列抽出部」の機能を有する。
次に、データシャッフル器160の動作について、説明する。図3A〜図3Cは、本発明の実施の形態1におけるデータシャッフル器160の動作を説明する図である。具体的には、これらの図は、1要素が8ビットで構成された64ビットのデータを処理する場合のデータシャッフル器160の動作を示す図である。
図3Aは、データシャッフル器160に入力されるデータを示している。同図に示される通り、連続した8ビットの要素8個から構成される64ビットデータ[a0、a1、a2、a3、a4、a5、a6、a7]と[b0、b1、b2、b3、b4、b5、b6、b7]とが、それぞれデータシャッフル器160の入力ポートAとBに入力される。
この場合、図3Bに示される通り、[a0、a1、a2、a3、a4、a5、a6、a7]が第三データ列として、第一データシャッフル部161のポートX1と第二データシャッフル部162のポートX2に入力される。また、[b0、b1、b2、b3、b4、b5、b6、b7]が第四データ列として、第一データシャッフル部161のポートY1と第二データシャッフル部162のポートY2に入力される。
そして、データが入力されると、第一データシャッフル部161と第二データシャッフル部162は、実行制御信号に従ってデータの並び替えを行い、並び替え後のデータを出力する。このデータの並び替えは、図3Cに示す表に従って行われる。
例えば、第一データシャッフル部161は、実行制御信号「0」に従ってデータの並び替えを行い、左側データ列として[a0、a1、a2、a3、a4、a5、a6、a7]を出力する。また、第二データシャッフル部162は、実行制御信号「0」に従ってデータの並び替えを行い、右側データ列として[a7、b0、b1、b2、b3、b4、b5、b6]を出力する。
ここで、対称フィルタ演算のタップ数が偶数の場合には、図3Cに示す「0」〜「3」の実行制御信号に従ってデータの並び替えが行われ、対称フィルタ演算のタップ数が奇数の場合には、「4」〜「7」の実行制御信号に従ってデータの並び替えが行われる。詳細については、後述する。
図4は、本発明の実施の形態1におけるデータシャッフル器160及び加算器170を動作させるためのニーモニックと命令コードを示す図である。
同図の(а−1)及び(a−2)は、2つの入力レジスタRa、Rbを入力として、抽出される左側データ列と右側データ列とを加算して出力レジスタRcを出力するニーモニックを示している。同図の(a−3)は、2つの入力レジスタRa、Rbを入力として、抽出される左側データ列と右側データ列とを加算して2つの出力レジスタRcとRc+1を出力するニーモニックを示している。
具体的には、同図の(a−1)に示すように、valnadd.8では、命令ニーモニックのオペランドは、2つの入力レジスタRa、Rbと、出力レジスタRcと、データ並び替えのシャッフルパターンを示す即値3ビットI3である。ここで、出力レジスタRcは、入力レジスタRa、Rbを入力として左側データ列と右側データ列とを抽出し、抽出した左側データ列と右側データ列とを8ビット単位で加算して得られる結果である。
また、左側データ列のデータ要素と右側データ列のデータ要素との加算結果が8ビットを超える場合は、同図の(a−2)に示されたvalnadd.8sを用いることで、8ビットを超える加算結果の飽和処理を行い、結果を出力レジスタRcとして出力する。より具体的には、データ要素が8ビットの符号なしデータの場合、加算結果が255より大きい時には255に飽和処理を行う。また、データ要素が8ビットの符号ありデータの場合、加算結果が−128より小さい時には−128に飽和処理を行い、加算結果が127より大きい時には127に飽和処理を行う。
また、同図の(a−3)に示されたvalnadd.8lでは、左側データ列のデータ要素と右側データ列のデータ要素との加算結果を16ビットに拡張して、結果を2つの出力レジスタRc、Rc+1として出力する。なお、加算結果は16ビットのデータ要素が8個の128ビットのデータ列となり、出力レジスタが2つ必要になる。
なお、同図の(b)のvaln.8に示すように、2つの入力レジスタRa、Rbを入力とし、抽出された左側データ列と右側データ列とを出力レジスタRc、Rc+1として出力することにしてもよい。ここで、命令ニーモニックのオペランドは、2つの入力レジスタRa、Rbと、2つの出力レジスタRc、Rc+1と、データ並び替えのシャッフルパターンを示す即値3ビットI3である。
64ビットデータを構成する要素のビット幅はオペコードで表しており、本命令の要素幅は8ビットである。なお、本シャッフル演算器のデータシャッフル器160に出力される実行制御信号は、シャッフルパターンの値そのものになっている。
本命令コードは32ビットで構成され、データシャッフル器160を動作させることを示すオペコードのフィールド、シャッフルパターンのフィールド、要素幅のフィールド、及びRaとRbとRcのレジスタ番号のフィールドから構成されている。
各フィールドのビット幅は、オペコードのフィールドが12ビット、シャッフルパターンのフィールドが3ビット、要素幅のフィールドが2ビット、Ra、Rb、Rcのレジスタ番号のフィールドが、それぞれ5ビットである。要素幅との対応は、0b00が8ビット、0b01が16ビット、0b10が32ビットとなる。ここで、同図の(a−3)と(b)では出力レジスタが2つあるが、命令コードでのレジスタのビットフィールドを削減するため、2つの出力レジスタをRcとRc+1として、レジスタ番号は連番であるという制約を設けている。
なお、本実施の形態では、2つの出力レジスタのレジスタ番号は連番であるという制約を設けたが、2つの入力レジスタのレジスタ番号が連番であるという制約にしてもよい。また、2つの出力レジスタのレジスタ番号は連番であるという制約は必ずしも必要ではないため、命令コードにレジスタ番号のフィールドをさらに追加して、2つの出力レジスタのレジスタ番号が連番であるという制約を外してもよい。
次に、図4に示したvalnadd.8命令を使って、フィルタ演算装置10が対称フィルタ演算を行う処理について、図5〜図9を用いて説明する。なお、valn.8命令を用いることもできるし、valnadd.8sまたはvalnadd.8l命令を用いる必要性が生じる可能性もあるが、以下では、一例として、valnadd.8命令を用いることとする。
図5は、本発明の実施の形態1におけるフィルタ演算装置10が対称フィルタ演算を行う動作の一例を示すフローチャートである。図6は、本発明の実施の形態1におけるフィルタ演算装置10が対称フィルタ演算を行うための命令を示す図である。図7〜9Bは、本発明の実施の形態1におけるフィルタ演算装置10が対称フィルタ演算を行う動作を説明する図である。
ここで、フィルタ演算装置10は、図20に示した[p0、p1、p2、p3、p4、p5、p6、p7]の8画素に対して対称フィルタ演算を行うものとする。また、図6に示された「フィルタタップ数」の欄は、対称フィルタ演算を行うフィルタのタップ数を示す。「R0とR1の入力データ」の欄は、valnadd.8命令を行う前にレジスタR0、R1に入力しておく必要がある画素データを示す。図6では、画素データとしてp−1、p−2、p−3というデータがあるが、p−1はp0の左隣接の画素、p−2はp−1の左隣接の画素、p−3はp−2の左隣接の画素を表す。「命令」の欄は、対称フィルタ演算でのフィルタ係数が同じとなるデータ列のペアを生成し、ペアとなるデータ列同士を加算するvalnadd.8命令を示す。
例として、フィルタ演算装置10が図20で示したp0〜p7の8画素に対応する対称6タップフィルタ演算を行って、フィルタ演算結果q0〜q7を得る場合について説明する。まず、ロード命令が発行され、レジスタR0に[p−1、p0、p1、p2、p3、p4、p5、p6]を格納し、レジスタR1に[p7、p8、p9、p10、p11、p12、p13、p14]が格納される。
そして、図5に示すように、第一データシャッフル部161は、レジスタファイル140から連続する第三データ列と第四データ列とで構成される第一データ列を読み出し、左側データ列を抽出する(S102)。
具体的には、図6に示されたフィルタタップ数「6」の場合の命令である「valnadd.8 R2、R0、R1、1」が発行される。この場合、第一データシャッフル部161は、第三データ列としてのレジスタR0の[p−1、p0、p1、p2、p3、p4、p5、p6]と第四データ列としてのレジスタR1の[p7、p8、p9、p10、p11、p12、p13、p14]とで構成される第一データ列を読み出す。そして、第一データシャッフル部161は、図3Cに示された実行制御信号「1」の場合のデータ出力である[p0、p1、p2、p3、p4、p5、p6、p7]を、左側データ列として抽出する。
また、第二データシャッフル部162は、第一データ列を第二データ列としてレジスタファイル140から読み出して、第三データ列の中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、右側データ列を抽出する(S104)。
具体的には、「valnadd.8 R2、R0、R1、1」の命令が発行されているので、第二データシャッフル部162は、第三データ列としてのレジスタR0の[p−1、p0、p1、p2、p3、p4、p5、p6]と第四データ列としてのレジスタR1の[p7、p8、p9、p10、p11、p12、p13、p14]とで構成される第一データ列を第二データ列として読み出す。そして、第二データシャッフル部162は、図3Cに示された実行制御信号「1」の場合のデータ出力である[p5、p6、p7、p8、p9、p10、p11、p12]を、右側データ列として抽出する。
つまり、図7の(a)に示すように、第二データシャッフル部162は、第三データ列[p−1、p0、p1、p2、p3、p4、p5、p6]の中心であるデータ中心Dに配置されるデータ「p2、p3」が、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、右側データ列を抽出する。
具体的には、対称フィルタ演算のタップ数が偶数の場合、第三データ列の先頭のデータ「p−1」と第三データ列の最終のデータ「p6」との中心である「p2、p3」をデータ中心Dとする。そして、第一データシャッフル部161は、データ中心D(p2、p3)より左側のデータを先頭とする左側データ列[p0、p1、p2、p3、p4、p5、p6、p7]を抽出する。そして、第二データシャッフル部162は、データ中心D(p2、p3)より右側のデータであって、データ中心Dに対して左側データ列の先頭のデータ「p0」と対称となるデータ「p5」を先頭とする右側データ列[p5、p6、p7、p8、p9、p10、p11、p12]を抽出する。
このようにして、フィルタ係数k0が乗算される画素データである[p0、p1、p2、p3、p4、p5、p6、p7]及び[p5、p6、p7、p8、p9、p10、p11、p12]が抽出される。
最後に、この2つの画素データを加算して、レジスタR2に格納される[p0+p5、p1+p6、p2+p7、p3+p8、p4+p9、p5+p10、p6+p11、p7p12]を算出する(S106)。以上で、「valnadd.8 R2、R0、R1、1」の命令の動作が完了する。
そして、図6に示されたフィルタタップ数「6」の場合の次の命令である「valnadd.8 R3、R0、R1、2」が発行される。この場合、「valnadd.8 R2、R0、R1、1」の命令の場合と同様にして、第一データシャッフル部161は、図3Cに示された実行制御信号「2」の場合のデータ出力である[p1、p2、p3、p4、p5、p6、p7、p8]を、左側データ列として抽出する。また、第二データシャッフル部162は、[p4、p5、p6、p7、p8、p9、p10、p11]を、右側データ列として抽出する。
つまり、図7の(b)に示すように、第一データシャッフル部161は、データ中心D(p2、p3)より左側のデータを先頭とする左側データ列[p1、p2、p3、p4、p5、p6、p7、p8]を抽出する。そして、第二データシャッフル部162は、データ中心D(p2、p3)より右側のデータであって、データ中心Dに対して左側データ列の先頭のデータ「p1」と対称となるデータ「p4」を先頭とする右側データ列[p4、p5、p6、p7、p8、p9、p10、p11]を抽出する。
このようにして、フィルタ係数k1が乗算される画素データである[p1、p2、p3、p4、p5、p6、p7、p8]及び[p4、p5、p6、p7、p8、p9、p10、p11]が抽出される。
最後に、この2つの画素データを加算して、レジスタR3に格納される[p1+p4、p2+p5、p3+p6、p4+p7、p5+p8、p6+p9、p7+p10、p8+p11]を算出する(S106)。以上で、「valnadd.8 R3、R0、R1、2」の命令の動作が完了する。
最後に、図6に示されたフィルタタップ数「6」の場合の次の命令である「valnadd.8 R4、R0、R1、3」が発行される。この場合も他の命令の場合と同様に、第一データシャッフル部161は、図3Cに示された実行制御信号「3」の場合のデータ出力である[p2、p3、p4、p5、p6、p7、p8、p9]を、左側データ列として抽出する。また、第二データシャッフル部162は、[p3、p4、p5、p6、p7、p8、p9、p10]を、右側データ列として抽出する。
つまり、図7の(c)に示すように、第一データシャッフル部161は、データ中心Dの左側のデータを先頭とする左側データ列[p2、p3、p4、p5、p6、p7、p8、p9]を抽出し、第二データシャッフル部162は、データ中心Dに対して左側データ列の先頭のデータ「p2」と対称となるデータ「p3」を先頭とする右側データ列[p3、p4、p5、p6、p7、p8、p9、p10]を抽出する。
このようにして、フィルタ係数k2が乗算される画素データである[p2、p3、p4、p5、p6、p7、p8、p9]及び[p3、p4、p5、p6、p7、p8、p9、p10]が抽出される。
最後に、この2つの画素データを加算して、レジスタR4に格納される[p2+p3、p3+p4、p4+p5、p5+p6、p6+p7、p7+p8、p8+p9、p9+p10]を算出する(S106)。以上で、「valnadd.8 R4、R0、R1、3」の命令の動作が完了する。これにより、対称フィルタ演算でのフィルタ係数が同じとなる画素データのペアの抽出及び加算が完了となる。
図5に戻り、次に、乗算器180は、加算器170が算出した加算データ列と左側フィルタ係数または右側フィルタ係数とを乗算して、乗算データ列を算出する(S108)。なお、左側フィルタ係数と右側フィルタ係数とは同じ値であるため、乗算器180は、当該加算データ列に左側フィルタ係数を乗じても、当該加算データ列に右側フィルタ係数を乗じても、同じ乗算データ列を算出することができる。
具体的には、図8に示すように、乗算器180は、加算データ列R2にフィルタ係数k0を乗算し、加算データ列R3にフィルタ係数k1を乗算し、加算データ列R4にフィルタ係数k2を乗算する。
そして、図5に戻り、フィルタ演算装置10は、乗算器180が算出した乗算データ列を累積加算することで、対称フィルタ演算の結果を出力する(S110)。具体的には、図8に示すように、フィルタ演算装置は、乗算器180が算出した3つの乗算結果を累積加算することで、フィルタ演算結果[q0、q1、q2、q3、q4、q5、q6、q7]を得ることができる。
このように、図9Aに示すように、レジスタR0の内容を[r00、r01、r02、r03、r04、r05、r06、r07]として表すと、例えばフィルタ演算結果q0を求める場合のフィルタ係数の対称の中心位置の画素が、r03とr04の間となるように、画素が格納されるようにロードすれば、8タップまでの偶数タップの対称フィルタまで対応することができる。
また、奇数タップの対称フィルタでは、図9Bに示すように、例えばフィルタ演算結果q0を求める場合のフィルタ係数の対称の中心位置の画素が、r04(同図に示すデータ中心D)となるように、画素が格納されるようにロードすればよい。つまり、フィルタ演算のタップ数が奇数の場合、第三データ列の先頭のデータ「r00」と第四データ列の先頭のデータ「r08」との中心をデータ中心Dとする。なお、奇数タップの場合、最大9タップまでの対称フィルタにvalnadd.8命令で対応できる。
以上のように、本実施の形態1にかかるフィルタ演算装置10によれば、レジスタファイル140に格納されている第一データ列の中から左側データ列を抽出し、レジスタファイル140に格納されている第二データ列の中から右側データ列を抽出する。つまり、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。このため、タップ数に応じた当該データ列のペアを抽出することで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
また、左側データ列と右側データ列とを加算して、左側フィルタ係数または右側フィルタ係数を乗じる。つまり、同じフィルタ係数に乗算されるデータ列のペアを加算して、当該フィルタ係数を乗じる。このため、タップ数に応じた当該加算及び乗算を行うことで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
また、第三データ列の中心に配置されるデータが、中心のフィルタ係数に乗算されるデータになるように、連続する第三データ列と第四データ列とで構成される第一データ列の中から左側データ列と右側データ列とを抽出する。つまり、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。特に、対称フィルタ演算のタップ数が小さい場合には、第一データ列を1つのバッファに格納して、当該1つのバッファから左側データ列と右側データ列とを抽出することができ、処理が単純である。このため、タップ数に応じたデータ列のペアを簡易に抽出することができ、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
また、フィルタ演算のタップ数が偶数の場合、第一データ列の先頭のデータと第一データ列の最終のデータとの中心をデータ中心とし、フィルタ演算のタップ数が奇数の場合、第一データ列の先頭のデータと第二データ列の先頭のデータとの中心をデータ中心として、左側データ列の先頭のデータと右側データ列の先頭のデータとがデータ中心に対して左右対称となるように、左側データ列と右側データ列とを抽出する。これにより、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。このため、タップ数に応じた当該データ列のペアを抽出することで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
(実施の形態2)
図10は、本発明の実施の形態2における対称型フィルタ演算装置11(以降、フィルタ演算装置11と呼ぶ)の構成を示す図である。本フィルタ演算装置11は、実施の形態1のフィルタ演算装置10のデータシャッフル器160の代わりに、データシャッフル器200を備えていることを特徴としている。
同図に示すように、フィルタ演算装置11は、命令メモリ110、命令フェッチ部120、命令デコーダ130、レジスタファイル140、メモリアクセス部150、データシャッフル器200、加算器170、乗算器180、及びデータメモリ190を備えている。
同図において、図1に示した実施の形態1のフィルタ演算装置10と同じ構成要素については同じ符号を用い、説明を省略する。
データシャッフル器200は、実施の形態1のフィルタ演算装置10のデータシャッフル器160と同じく、レジスタファイル140からデータを取得してデータの並び替えを行い、結果を加算器170に出力する。
なお、実施の形態1と同様、データシャッフル器200と加算器170とが1つの処理部として、データの並び替え及び加算演算を行うとしたが、データシャッフル器200がレジスタファイル140に並び替え後のデータを出力し、加算器170は、当該データをレジスタファイル140から取得して加算演算を行うことにしてもよい。
また、データシャッフル器200は、フィルタ演算以外の目的でデータを並び替える機能を有していてもよい。このデータシャッフル器200のデータシャッフル器160との具体的な違いについては、以降で説明する。
図11は、データシャッフル器200の構成を示す図である。
同図に示される通り、データシャッフル器は、4つの64ビットの入力ポートAとBとCとDと、2つの64ビットの出力ポートZ1とZ2とを持ち、第一データシャッフル部201と、第二データシャッフル部202とを備えている。なお、データシャッフル器200は、入力ポートAとBを合わせて1つの128ビットの入力ポートとし、入力ポートCとDを合わせて1つの128ビットの入力ポートとする構成にしてもよい。
第一データシャッフル部201は、4つの64ビットの入力ポートX10とY10とX11とY11とを持ち、1つの64ビットの出力ポートZ1を持つ。第二データシャッフル部202は、4つの64ビットの入力ポートX20とY20とX21とY21とを持ち、1つの64ビットの出力ポートZ2を持つ。なお、実施の形態1と同様、データシャッフル器200の出力ポートZ1とZ2から出力データが加算器170に出力されているが、当該出力データをレジスタ140に出力する構成にしてもよい。
第一データシャッフル部201の入力ポートX10には、データシャッフル器200の入力ポートAからデータが入力され、第一データシャッフル部201の入力ポートY10には、データシャッフル器200の入力ポートBからデータが入力される構成になっている。同様に、第一データシャッフル部201の入力ポートX11には、データシャッフル器200の入力ポートCからデータが入力され、入力ポートY11には入力ポートDからデータが入力される。なお、第一データシャッフル部201は、入力ポートX10とY10を合わせて1つの入力ポートとし、入力ポートX11とY11を合わせて1つの入力ポートとする構成にしてもよい。
また、第二データシャッフル部202の入力ポートX20には、データシャッフル器200の入力ポートAからデータが入力され、第二データシャッフル部202の入力ポートY20には、データシャッフル器200の入力ポートBからデータが入力される構成になっている。同様に、第二データシャッフル部202の入力ポートX21には、データシャッフル器200の入力ポートCからデータが入力され、入力ポートY21には入力ポートDからデータが入力される。なお、第二データシャッフル部202は、入力ポートX20とY20を合わせて1つの入力ポートとし、入力ポートX21とY21を合わせて1つの入力ポートとする構成にしてもよい。
第一データシャッフル部201は、実行制御信号に従って、4つの64ビットデータを入力ポートX10とY10とX11とY11とを通して読み出し、バイト単位のデータの並び替えを行う。そして、第一データシャッフル部201は、データを並び替えた後は、出力ポートZ1を通して、並び替えた結果の64ビットのデータを出力する。
具体的には、第一データシャッフル部201は、レジスタファイル140から連続する複数のデータである第一データ列を読み出し、第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する。さらに具体的には、第一データシャッフル部201は、連続する第三データ列と第四データ列とで構成される第一データ列をレジスタファイル140から読み出して、当該左側データ列を抽出する。
つまり、第一データシャッフル部201は、入力ポートX10を通して第三データ列を読み出し、入力ポートY10を通して第四データ列を読み出す。そして、第一データシャッフル部201は、出力ポートZ1を通して、左側データ列を加算器170に出力する。ここで、第一データシャッフル部201は、入力ポートX11及びY11を通して読み出した第二データ列も用いてデータ中心を定めることで、左側データ列を抽出する。この第一データシャッフル部201が行う処理の詳細については、後述する。なお、第一データシャッフル部201は、請求の範囲に記載の「左側データ列抽出部」の機能を有する。
第二データシャッフル部202は、第一データシャッフル部201と同様に、実行制御信号に従って、4つの64ビットデータを入力ポートX20とY20とX21とY21とを通して読み出し、バイト単位のデータの並び替えを行う。そして、第二データシャッフル部202は、データを並び替えた後は、出力ポートZ2を通して、並び替えた結果の64ビットのデータを出力する。
具体的には、第二データシャッフル部202は、レジスタファイル140から連続する複数のデータである第二データ列を読み出し、第二データ列の中から、中心より右側のフィルタ係数であって左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する。さらに具体的には、第二データシャッフル部202は、第三データ列の先頭のデータ及び第六データ列の先頭のデータの中心であるデータ中心に配置されるデータが、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する第五データ列と第六データ列とで構成される第二データ列をレジスタファイル140から読み出して、当該右側データ列を抽出する。
つまり、第二データシャッフル部202は、入力ポートX21を通して第五データ列を読み出し、入力ポートY21を通して第六データ列を読み出す。そして、第二データシャッフル部202は、出力ポートZ2を通して、右側データ列を加算器170に出力する。ここで、第二データシャッフル部202は、入力ポートX20及びY20を通して読み出した第一データ列も用いてデータ中心を定めることで、右側データ列を抽出する。この第二データシャッフル部202が行う処理の詳細については、後述する。なお、第二データシャッフル部202は、請求の範囲に記載の「右側データ列抽出部」の機能を有する。
次に、データシャッフル器200の動作について、説明する。本実施の形態のデータシャッフル器200は、実施の形態1のデータシャッフル器160と異なり、実行制御信号によって、レジスタファイル140から読み出すレジスタの数が変わる。データシャッフル器200は、実行制御信号が0〜7の場合は64ビットレジスタを2つ、8〜15の場合は64ビットレジスタ4つ、レジスタファイル140から読み出す。
図12〜図14Bは、本発明の実施の形態2におけるデータシャッフル器200の動作を説明する図である。まず、図12は、実行制御信号が0〜7の場合に、データシャッフル器200に入力されるデータを示している。
図12に示すように、実行制御信号が0〜7の場合は、1つの64ビットレジスタのデータ[a0、a1、a2、a3、a4、a5、a6、a7]がポートAに入力され、もう1つの64ビットレジスタのデータ[b0、b1、b2、b3、b4、b5、b6、b7]がポートBに入力される。なお、ポートCとポートDにはデータは入力されない。
この場合、図3Bに示される通り、実施の形態1のデータシャッフル器160と同様に、[a0、a1、a2、a3、a4、a5、a6、a7]が、第一データシャッフル部201のポートX10と第二データシャッフル部202のポートX20とに入力される。また、[b0、b1、b2、b3、b4、b5、b6、b7]が、第一データシャッフル部201のポートY10と第二データシャッフル部202のポートY20とに入力される。
また、データが入力されると、第一データシャッフル部161と第二データシャッフル部162は、実行制御信号に従ってデータの並び替えを行う。データの並び替えは、実施の形態1のデータシャッフル器160と同様に、図3Cに示す表に従って行われる。
次に、実行制御信号が8〜15の場合について説明する。図13Aは、実行制御信号が8〜15の場合に、データシャッフル器200に入力されるデータを示している。
同図に示される通り、実行制御信号が8〜15の場合は、1つの64ビットレジスタのデータ[a0、a1、a2、a3、a4、a5、a6、a7]がポートAに入力され、別の1つの64ビットレジスタのデータ[b0、b1、b2、b3、b4、b5、b6、b7]がポートBに入力される。また、さらに別の1つの64ビットレジスタのデータ[c0、c1、c2、c3、c4、c5、c6、c7]がポートCに入力され、別の1つの64ビットレジスタのデータ[d0、d1、d2、d3、d4、d5、d6、d7]がポートDに入力される。
この場合、図13Bに示される通り、[a0、a1、a2、a3、a4、a5、a6、a7]が第一データシャッフル部201のポートX10に入力され、[b0、b1、b2、b3、b4、b5、b6、b7]が第一データシャッフル部201のポートY10に入力される。また、[c0、c1、c2、c3、c4、c5、c6、c7]が第一データシャッフル部201のポートX11に、[d0、d1、d2、d3、d4、d5、d6、d7]が第一データシャッフル部201のポートY11に入力される。
また、[a0、a1、a2、a3、a4、a5、a6、a7]が第二データシャッフル部202のポートX20に入力され、[b0、b1、b2、b3、b4、b5、b6、b7]が第二データシャッフル部202のポートY20に入力される。また、[c0、c1、c2、c3、c4、c5、c6、c7]が第二データシャッフル部202のポートX21に、[d0、d1、d2、d3、d4、d5、d6、d7]が第二データシャッフル部202のポートY21に入力される。
そして、データが入力されると、第一データシャッフル部201と第二データシャッフル部202は、実行制御信号に従ってデータの並び替えを行う。データの並び替えは、図13Cに示す表に従って行われる。
具体的には、対称フィルタ演算のタップ数が偶数の場合には、図14Aに示すように、第一データシャッフル部201は、例えば、実行制御信号「8」に従ってデータの並び替えを行い、左側データ列として[a0、a1、a2、a3、a4、a5、a6、a7]を出力する。また、第二データシャッフル部202は、実行制御信号「8」に従ってデータの並び替えを行い、右側データ列として[c7、d0、d1、d2、d3、d4、d5、d6]を出力する。また、第一データシャッフル部201は、実行制御信号「9」に従って、左側データ列として[a1、a2、a3、a4、a5、a6、a7、b0]を出力する。また、第二データシャッフル部202は、実行制御信号「8」に従って、右側データ列として[c6、c7、d0、d1、d2、d3、d4、d5]を出力する。
また、対称フィルタ演算のタップ数が奇数の場合には、図14Bに示すように、第一データシャッフル部201は、例えば、実行制御信号「16」に従ってデータの並び替えを行い、左側データ列として[a0、a1、a2、a3、a4、a5、a6、a7]を出力する。また、第二データシャッフル部202は、実行制御信号「16」に従ってデータの並び替えを行い、右側データ列として[d0、d1、d2、d3、d4、d5、d6、d7]を出力する。また、第一データシャッフル部201は、実行制御信号「17」に従ってデータの並び替えを行い、左側データ列として[a1、a2、a3、a4、a5、a6、a7、b0]を出力する。また、第二データシャッフル部202は、実行制御信号「16」に従って、右側データ列として[c7、d0、d1、d2、d3、d4、d5、d6]を出力する。
このように、対称フィルタ演算のタップ数が偶数の場合には、図13Cに示す「8」〜「15」の実行制御信号に従ってデータの並び替えが行われ、対称フィルタ演算のタップ数が奇数の場合には、「16」〜「23」の実行制御信号に従ってデータの並び替えが行われる。
図15は、本発明の実施の形態2におけるデータシャッフル器200及び加算器170を動作させるためのニーモニックと命令コードを示す図である。なお、図4に示された命令ニーモニックと命令コードについても、実施の形態1のデータシャッフル器160及び加算器170と同様に、データシャッフル器200及び加算器170を動作させるが、実施の形態1のデータシャッフル器160及び加算器170と同じ動作であるため、説明を省略する。
図15の(а−1)及び(a−2)は、4つの入力レジスタRa、Ra+1、Rb、Rb+1を入力として、抽出される左側データ列と右側データ列とを加算して出力レジスタRcを出力するニーモニックを示している。同図の(a−3)は、4つの入力レジスタRa、Ra+1、Rb、Rb+1を入力として、抽出される左側データ列と右側データ列とを加算して2つの出力レジスタRcとRc+1を出力するニーモニックを示している。
具体的には、同図の(a−1)に示すように、valnpadd.8では、命令ニーモニックのオペランドは、4つの入力レジスタRa、Ra+1、Rb、Rb+1と、出力レジスタRcと、データ並び替えのシャッフルパターンを示す即値3ビットI3である。ここで、出力レジスタRcは、入力レジスタRa、Ra+1、Rb、Rb+1を入力として左側データ列と右側データ列とを抽出し、抽出した左側データ列と右側データ列とを8ビット単位で加算して得られる結果である。
また、左側データ列のデータ要素と右側データ列のデータ要素との加算結果が8ビットを超える場合は、同図の(a−2)に示されたvalnpadd.8sを用いることで、8ビットを超える加算結果の飽和処理を行い、結果を出力レジスタRcとして出力する。より具体的には、データ要素が8ビットの符号なしデータの場合、加算結果が255より大きい時には255に飽和処理を行う。また、データ要素が8ビットの符号ありデータの場合、加算結果が−128より小さい時には−128に飽和処理を行い、加算結果が127より大きい時には127に飽和処理を行う。
また、同図の(a−3)に示されたvalnpadd.8lでは、左側データ列のデータ要素と右側データ列のデータ要素との加算結果を16ビットに拡張して、結果を出力レジスタRc、Rc+1として出力する。なお、加算結果は16ビットのデータ要素が8個の128ビットのデータ列となり、出力レジスタが2つ必要になる。
なお、同図の(b)のvalnp.8に示すように、4つの入力レジスタRa、Ra+1、Rb、Rb+1を入力とし、抽出された左側データ列と右側データ列とを出力レジスタRc、Rc+1として出力することにしてもよい。ここで、命令ニーモニックのオペランドは、4つの入力レジスタRa、Ra+1、Rb、Rb+1と、2つの出力レジスタRc、Rc+1と、データ並び替えのシャッフルパターンを示す即値3ビットI3である。
また、命令コードでのレジスタのビットフィールドを削減するため、4つの入力レジスタは、2つずつレジスタ番号は連番であるという制約を設けている。つまり、第三データ列及び第四データ列、または第五データ列及び第六データ列は、連続する番号のレジスタに記憶されている。
また、64ビットデータを構成する要素のビット幅はオペコードで表しており、本命令の要素幅は8ビットである。なお、本シャッフル演算器のデータシャッフル器200に出力される実行制御信号は、シャッフルパターンの値に8を加えた値になっている。
同図に示される命令コードは32ビットで構成され、データシャッフル器200を動作させることを示すオペコードのフィールド、シャッフルパターンのフィールド、要素幅のフィールド、及びRaとRbとRcのレジスタ番号のフィールドから構成されている。
各フィールドのビット幅は、オペコードのフィールドが11ビット、シャッフルパターンのフィールドが4ビット、要素幅のフィールドが2ビット、Ra、Rb、Rcのレジスタ番号のフィールドが、それぞれ5ビットである。ここで、要素幅との対応は、0b00が8ビット、0b01が16ビット、0b10が32ビットとなる。
なお、本実施の形態では、レジスタのレジスタ番号は連番であるという制約は必ずしも必要ではないため、レジスタのレジスタ番号が連番であるという制約を外してもよい。
次に、図4に示したvalnadd.8命令と図15に示したvalnpadd.8命令とを使って、フィルタ演算装置11が対称フィルタ演算を行う処理について、図16及び図17を用いて説明する。なお、valnp.8命令を用いることもできるし、valnpadd.8sまたはvalnpadd.8l命令を用いる必要性が生じる可能性もあるが、以下では、一例として、valnpadd.8命令を用いることとする。また、valnadd.8命令を使う場合は、図6に示されたように、実施の形態1のフィルタ演算装置10と同じ処理になるため、説明を省略する。
図16〜図19は、本発明の実施の形態2におけるフィルタ演算装置11が対称フィルタ演算を行う動作を説明する図である。
ここで、valnpadd.8命令は、valnadd.8命令では対応できない9タップより大きい対称フィルタの場合に使用する。このため、まず、例えば、フィルタ演算装置11が16タップフィルタの対称フィルタを行う場合について、図16及び図17を用いて説明する。図16及び図17は、本発明の実施の形態2におけるフィルタ演算装置11においてタップ数が16の場合の対称フィルタ演算を行う動作を説明する図である。
まず、ロード命令が発行されて、レジスタR0に画素データ[p0、p1、p2、p3、p4、p5、p6、p7]が格納され、レジスタR1に画素データ[p8、p9、p10、p11、p12、p13、p14、p15]が格納され、レジスタR2に画素データ[p8、p9、p10、p11、p12、p13、p14、p15]が格納され、レジスタR3に画素データ[p16、p17、p18、p19、p20、p21、p22、p23]が格納される。
次に、フィルタタップ数「16」の場合の命令として予め定められている「valnpadd.8 R4、R0、R1、R2、R3、0」の命令が発行される。この場合、第一データシャッフル部201は、第三データ列としてのレジスタR0の[p0、p1、p2、p3、p4、p5、p6、p7]と第四データ列としてのレジスタR1の[p8、p9、p10、p11、p12、p13、p14、p15]とで構成される第一データ列を読み出す。そして、第一データシャッフル部201は、図13Cに示された実行制御信号「8」の場合のデータ出力である[p0、p1、p2、p3、p4、p5、p6、p7]を、左側データ列として抽出する(図5のS102)。
また、第二データシャッフル部202は、第五データ列としてのレジスタR2の[p8、p9、p10、p11、p12、p13、p14、p15]と第六データ列としてのレジスタR3の[p16、p17、p18、p19、p20、p21、p22、p23]とで構成される第二データ列を読み出す。そして、第二データシャッフル部202は、図13Cに示された実行制御信号「8」の場合のデータ出力である[p15、p16、p17、p18、p19、p20、p21、p22]を、右側データ列として抽出する(図5のS104)。
つまり、図16の(a)に示すように、第二データシャッフル部202は、フィルタ演算のタップ数が偶数の場合、第三データ列の先頭のデータ「p0」及び第五データ列の最終のデータ「p15」の中心であるデータ中心Dに配置されるデータ「p7、p8」が、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する第五データ列と第六データ列とで構成される第二データ列をレジスタファイル140から読み出して、当該右側データ列を抽出する。
具体的には、第一データシャッフル部201は、データ中心D(p7、p8)より左側のデータ「p0」を先頭とする左側データ列[p0、p1、p2、p3、p4、p5、p6、p7]を抽出する。また、第二データシャッフル部202は、データ中心D(p7、p8)より右側のデータであって、データ中心Dに対して左側データ列の先頭のデータ「p0」と対称となるデータ「p15」を先頭とする右側データ列[p15、p16、p17、p18、p19、p20、p21、p22]を抽出する。
このようにして、フィルタ係数k0が乗算される画素データである[p0、p1、p2、p3、p4、p5、p6、p7]と[p15、p16、p17、p18、p19、p20、p21、p22]が抽出される。
最後に、この抽出された2つの画素データを加算して、レジスタR4に格納される[p0+p15、p1+p16、p2+p17、p3+p18、p4+p19、p5+p20、p6+p21、p7+p22]を算出する。以上で、「valnpadd.8 R4、R0、R1、R2、R3、0」の命令の動作が完了する。
次に、フィルタタップ数「16」の場合の次の命令として予め定められている「valnpadd.8 R5、R0、R1、R2、R3、1」の命令が発行される。この場合、第一データシャッフル部201は、第一データ列を読み出し、図13Cに示された実行制御信号「9」の場合のデータ出力である[p1、p2、p3、p4、p5、p6、p7、p8]を、左側データ列として抽出する。また、第二データシャッフル部202は、第二データ列を読み出し、図13Cに示された実行制御信号「9」の場合のデータ出力である[p14、p15、p16、p17、p18、p19、p20、p21]を、右側データ列として抽出する。
つまり、図16の(b)に示すように、第二データシャッフル部202は、データ中心D(p7、p8)より左側のデータ「p1」を先頭とする左側データ列[p1、p2、p3、p4、p5、p6、p7、p8]を抽出する。また、第二データシャッフル部202は、データ中心D(p7、p8)より右側のデータであって、データ中心Dに対して左側データ列の先頭のデータ「p1」と対称となるデータ「p14」を先頭とする右側データ列[p14、p15、p16、p17、p18、p19、p20、p21]を抽出する。
このようにして、フィルタ係数k1が乗算される画素データである[p1、p2、p3、p4、p5、p6、p7、p8]と[p14、p15、p16、p17、p18、p19、p20、p21]が抽出される。
最後に、この抽出された2つの画素データを加算して、R5に格納される[p1+p14、p2+p15、p3+p16、p4+p17、p5+p18、p6+p19、p7+p20、p8+p21]を算出する。以上で、「valnpadd.8 R5、R0、R1、R2、R3、1」の命令の動作が完了する。
そして、同様にして、次に、「valnpadd.8 R6、R0、R1、R2、R3、2」の命令が発行され、第一データシャッフル部201は、[p2、p3、p4、p5、p6、p7、p8、p9]を、左側データ列として抽出する。また、第二データシャッフル部202は、[p13、p14、p15、p16、p17、p18、p19、p20]を、右側データ列として抽出する。このようにして、フィルタ係数k2が乗算される2つの画素データが抽出される。最後に、この抽出された2つの画素データを加算して、加算結果をレジスタR6に格納する。
次に、「valnpadd.8 R7、R0、R1、R2、R3、3」の命令が発行され、第一データシャッフル部201は、[p3、p4、p5、p6、p7、p8、p9、p10]を、左側データ列として抽出する。また、第二データシャッフル部202は、[p12、p13、p14、p15、p16、p17、p18、p19]を、右側データ列として抽出する。このようにして、フィルタ係数k3が乗算される2つ画素データが抽出される。最後に、この抽出された2つの画素データを加算して、加算結果をレジスタR7に格納する。
次に、「valnpadd.8 R8、R0、R1、R2、R3、4」の命令が発行され、第一データシャッフル部201は、[p4、p5、p6、p7、p8、p9、p10、p11]を、左側データ列として抽出する。また、第二データシャッフル部202は、[p11、p12、p13、p14、p15、p16、p17、p18]を、右側データ列として抽出する。このようにして、フィルタ係数k4が乗算される2つの画素データが抽出される。最後に、この抽出された2つの画素データを加算して、加算結果をレジスタR8に格納する。
次に、「valnpadd.8 R9、R0、R1、R2、R3、5」の命令が発行され、第一データシャッフル部201は、[p5、p6、p7、p8、p9、p10、p11、p12]を、左側データ列として抽出する。また、第二データシャッフル部202は、[p10、p11、p12、p13、p14、p15、p16、p17]を、右側データ列として抽出する。このようにして、フィルタ係数k5が乗算される2つの画素データが抽出される。最後に、この抽出された2つの画素データを加算して、加算結果をレジスタR9に格納する。
次に、「valnpadd.8 R10、R0、R1、R2、R3、6」の命令が発行され、第一データシャッフル部201は、[p6、p7、p8、p9、p10、p11、p12、p13]を、左側データ列として抽出する。また、第二データシャッフル部202は、[p9、p10、p11、p12、p13、p14、p15、p16]を、右側データ列として抽出する。このようにして、フィルタ係数k6が乗算される2つの画素データが抽出される。最後に、この抽出された2つの画素データを加算して、加算結果をレジスタR10に格納する。
次に、「valnpadd.8 R11、R0、R1、R2、R3、7」の命令が発行され、第一データシャッフル部201は、[p7、p8、p9、p10、p11、p12、p13、p14]を、左側データ列として抽出する。また、第二データシャッフル部202は、[p8、p9、p10、p11、p12、p13、p14、p15]を、右側データ列として抽出する。このようにして、フィルタ係数k7が乗算される2つの画素データが抽出される。最後に、この抽出された2つの画素データを加算して、加算結果をレジスタR11に格納する。
これにより、対称フィルタ演算でのフィルタ係数が同じとなるデータのペアの抽出及び加算が完了となる。
次に、乗算器180は、加算器170が算出した加算データ列と左側フィルタ係数または右側フィルタ係数とを乗算して、乗算データ列を算出する(図5のS108)。なお、左側フィルタ係数と右側フィルタ係数とは同じ値であるため、乗算器180は、当該加算データ列に左側フィルタ係数を乗じても、当該加算データ列に右側フィルタ係数を乗じても、同じ乗算データ列を算出することができる。
具体的には、図17に示すように、乗算器180は、加算データ列R4にフィルタ係数k0を乗算し、加算データ列R5にフィルタ係数k1を乗算し、加算データ列R6にフィルタ係数k2を乗算し、加算データ列R7にフィルタ係数k3を乗算し、加算データ列R8にフィルタ係数k4を乗算し、加算データ列R9にフィルタ係数k5を乗算し、加算データ列R10にフィルタ係数k6を乗算し、加算データ列R11にフィルタ係数k7を乗算する。
そして、フィルタ演算装置10は、乗算器180が算出した乗算データ列を累積加算することで、対称フィルタ演算の結果を出力する(図5のS110)。具体的には、図17に示すように、フィルタ演算装置10は、乗算器180が算出した8つの乗算結果を累積加算することで、フィルタ演算結果[q0、q1、q2、q3、q4、q5、q6、q7]を得ることができる。
このように、フィルタ演算のタップ数が偶数の場合、レジスタR0の内容を[r00、r01、r02、r03、r04、r05、r06、r07]として表し、レジスタR2の内容を[r20、r21、r22、r23、r24、r25、r26、r27]として表すと、例えばフィルタ演算結果q0を求める場合のフィルタ係数の対称の中心位置から対称となる位置の画素を、R0とR2に格納されるようにロードすれば、フィルタのタップ数がどれほど大きい対称フィルタであっても対応することができる。
なお、R0とR2へのロードに加えて、R1には、R0に格納されている画素データの右連続データをロードし、R3には、R2に格納されている画像データの右連続データをロードしておく必要がある。フィルタ演算を行う上で必要となる画素がR0、R1、R2、R3の4つに入りきらないほどフィルタのタップ数が大きい場合も、同様の手順でフィルタ係数の対称の中心位置から対称となる位置の画素を順にレジスタにロードしながら、valnpadd.8命令を発行していけば、対応が可能である。
以下に、タップ数が偶数で大きい値の場合のフィルタ演算装置11が行う対称フィルタ演算について、詳細に説明する。図18は、本発明の実施の形態2におけるフィルタ演算装置11においてタップ数が48の場合の対称フィルタ演算を行う動作を説明する図である。
同図に示すように、フィルタ演算のタップ数が偶数である48の場合、フィルタ演算装置11は、第三データ列の先頭のデータと第五データ列の最終のデータとの中心に配置されるデータ(データ列RCの最終のデータとデータ列RDの先頭のデータ)に対して、左右対称のデータを先頭とする2つのデータ列である左側データ列及び右側データ列を抽出する。なお、フィルタ演算のタップ数が偶数であるので、図13Cに示す「8」〜「15」の実行制御信号に従って、データが抽出される。
具体的には、フィルタ演算装置11は、図18の(a)と(b)と(c)の3段階に分けて左側データ列及び右側データ列を抽出し、対称フィルタ演算を行う。
まず同図の(a)では、第一データシャッフル部201は、連続する第三データ列RAと第四データ列RBとで構成される第一データ列をレジスタファイル140から読み出して、データ中心より左側のデータを先頭とする左側データ列を抽出する。例えば、第一データシャッフル部201は、第三データ列RAのデータ「a0」を先頭とする左側データ列[a0、a1、a2、a3、a4、a5、a6、a7]を抽出する。
また、第二データシャッフル部202は、上記の中心に配置されるデータ(データ列RCの最終のデータとデータ列RDの先頭のデータ)が、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する第五データ列RFと第六データ列RGとで構成される第二データ列をレジスタファイル140から読み出して、右側データ列を抽出する。
具体的には、第二データシャッフル部202は、データ中心より右側のデータであって、データ中心に対して左側データ列の先頭のデータと対称となるデータを先頭とする右側データ列を抽出する。例えば、第二データシャッフル部202は、第五データ列RFの最終のデータ「c7」を先頭とする右側データ列[c7、d0、d1、d2、d3、d4、d5、d6]を抽出する。
そして、同様にして、第一データシャッフル部201は、左側データ列[a1、a2、a3、a4、a5、a6、a7、b0]を抽出し、第二データシャッフル部202は、右側データ列[c6、c7、d0、d1、d2、d3、d4、d5]を抽出する。そして、同様に次々とデータの抽出が行われていき、最後に、第一データシャッフル部201は、左側データ列[a7、b0、b1、b2、b3、b4、b5、b6]を抽出し、第二データシャッフル部202は、右側データ列[c0、c1、c2、c3、c4、c5、c6、c7]を抽出する。
次に、同図の(b)で、第一データシャッフル部201は、連続する第三データ列RBと第四データ列RCとで構成される第一データ列をレジスタファイル140から読み出して、例えば、第三データ列RBのデータ「a0」を先頭とする左側データ列[a0、a1、a2、a3、a4、a5、a6、a7]を抽出する。
また、第二データシャッフル部202は、連続する第五データ列REと第六データ列RFとで構成される第二データ列をレジスタファイル140から読み出して、例えば、第五データ列REの最終のデータ「c7」を先頭とする右側データ列[c7、d0、d1、d2、d3、d4、d5、d6]を抽出する。
そして、同様にして、第一データシャッフル部201は、左側データ列[a7、b0、b1、b2、b3、b4、b5、b6]まで抽出し、第二データシャッフル部202は、右側データ列[c0、c1、c2、c3、c4、c5、c6、c7]まで抽出する。
次に、同図の(c)で、第一データシャッフル部201は、連続する第三データ列RCと第四データ列RDとで構成される第一データ列をレジスタファイル140から読み出して、例えば、第三データ列RCのデータ「a0」を先頭とする左側データ列[a0、a1、a2、a3、a4、a5、a6、a7]を抽出する。
また、第二データシャッフル部202は、連続する第五データ列RDと第六データ列REとで構成される第二データ列をレジスタファイル140から読み出して、例えば、第五データ列RDの最終のデータ「c7」を先頭とする右側データ列[c7、d0、d1、d2、d3、d4、d5、d6]を抽出する。
そして、同様にして、第一データシャッフル部201は、左側データ列[a7、b0、b1、b2、b3、b4、b5、b6]まで抽出し、第二データシャッフル部202は、右側データ列[c0、c1、c2、c3、c4、c5、c6、c7]まで抽出する。
以上のようにして、全てのペアになるデータ列が抽出されるため、抽出されたペア同士のデータ列が加算され、フィルタ係数と乗算されて、累積加算される。
次に、タップ数が奇数で大きい値の場合のフィルタ演算装置11が行う対称フィルタ演算について、詳細に説明する。図19は、本発明の実施の形態2におけるフィルタ演算装置11においてタップ数が49の場合の対称フィルタ演算を行う動作を説明する図である。
同図に示すように、フィルタ演算のタップ数が奇数である49の場合、フィルタ演算装置11は、第三データ列の先頭のデータと第六データ列の先頭のデータとの中心に配置されるデータ(データ列RDの先頭のデータ)に対して、左右対称のデータを先頭とする2つのデータ列である左側データ列及び右側データ列を抽出する。なお、フィルタ演算のタップ数が奇数であるので、図13Cに示す「16」〜「23」の実行制御信号に従って、データが抽出される。
具体的には、フィルタ演算装置11は、図18の(a)と(b)と(c)の3段階に分けて左側データ列及び右側データ列を抽出し、対称フィルタ演算を行う。
まず同図の(a)では、第一データシャッフル部201は、連続する第三データ列RAと第四データ列RBとで構成される第一データ列をレジスタファイル140から読み出して、データ中心より左側のデータを先頭とする左側データ列を抽出する。例えば、第一データシャッフル部201は、第三データ列RAのデータ「a0」を先頭とする左側データ列[a0、a1、a2、a3、a4、a5、a6、a7]を抽出する。
また、第二データシャッフル部202は、上記の中心に配置されるデータ(データ列RDの先頭のデータ)が、左右対称のフィルタ係数の中心のフィルタ係数に乗算されるデータになるように、連続する第五データ列RFと第六データ列RGとで構成される第二データ列をレジスタファイル140から読み出して、右側データ列を抽出する。
具体的には、第二データシャッフル部202は、データ中心より右側のデータであって、データ中心に対して左側データ列の先頭のデータと対称となるデータを先頭とする右側データ列を抽出する。例えば、第二データシャッフル部202は、第五データ列RGの先頭のデータ「d0」を先頭とする右側データ列[d0、d1、d2、d3、d4、d5、d6、d7]を抽出する。
そして、同様にして、第一データシャッフル部201は、左側データ列[a1、a2、a3、a4、a5、a6、a7、b0]を抽出し、第二データシャッフル部202は、右側データ列[c7、d0、d1、d2、d3、d4、d5、d6]を抽出する。そして、同様に次々とデータの抽出が行われていき、最後に、第一データシャッフル部201は、左側データ列[a7、b0、b1、b2、b3、b4、b5、b6]を抽出し、第二データシャッフル部202は、右側データ列[c1、c2、c3、c4、c5、c6、c7、d0]を抽出する。
次に、同図の(b)で、第一データシャッフル部201は、連続する第三データ列RBと第四データ列RCとで構成される第一データ列をレジスタファイル140から読み出して、例えば、第三データ列RBのデータ「a0」を先頭とする左側データ列[a0、a1、a2、a3、a4、a5、a6、a7]を抽出する。
また、第二データシャッフル部202は、連続する第五データ列REと第六データ列RFとで構成される第二データ列をレジスタファイル140から読み出して、例えば、第六データ列RFの先頭のデータ「d0」を先頭とする右側データ列[d0、d1、d2、d3、d4、d5、d6、d7]を抽出する。
そして、同様にして、第一データシャッフル部201は、左側データ列[a7、b0、b1、b2、b3、b4、b5、b6]まで抽出し、第二データシャッフル部202は、右側データ列[c1、c2、c3、c4、c5、c6、c7、d0]まで抽出する。
次に、同図の(c)で、第一データシャッフル部201は、連続する第三データ列RCと第四データ列RDとで構成される第一データ列をレジスタファイル140から読み出して、例えば、第三データ列RCのデータ「a0」を先頭とする左側データ列[a0、a1、a2、a3、a4、a5、a6、a7]を抽出する。
また、第二データシャッフル部202は、連続する第五データ列RDと第六データ列REとで構成される第二データ列をレジスタファイル140から読み出して、例えば、第六データ列REの先頭のデータ「d0」を先頭とする右側データ列[d0、d1、d2、d3、d4、d5、d6、d7]を抽出する。
そして、同様にして、第一データシャッフル部201は、左側データ列[a7、b0、b1、b2、b3、b4、b5、b6]まで抽出し、第二データシャッフル部202は、右側データ列[c1、c2、c3、c4、c5、c6、c7、d0]まで抽出する。また、第一データシャッフル部201は、中心のフィルタ係数が乗算されるデータ列[b0、b1、b2、b3、b4、b5、b6、b7]を抽出する。
以上のようにして、全てのペアになるデータ列が抽出されるため、抽出されたペア同士のデータ列が加算され、フィルタ係数と乗算されて、累積加算される。
以上のように、本実施の形態2にかかるフィルタ演算装置11によれば、フィルタ演算のタップ数が偶数の場合、第三データ列の先頭のデータと第五データ列の最終のデータとの中心に配置されるデータが、中心のフィルタ係数に乗算されるデータになるように、連続する第三データ列と第四データ列とで構成される第一データ列の中から左側データ列を抽出し、連続する第五データ列と第六データ列とで構成される第二データ列の中から右側データ列を抽出する。また、フィルタ演算のタップ数が奇数の場合、第三データ列の先頭のデータと第六データ列の先頭のデータとの中心に配置されるデータが、中心のフィルタ係数に乗算されるデータになるように、当該左側データ列と右側データ列とを抽出する。
これにより、第一データ列を一方のバッファに格納し、第二データ列を他方のバッファに格納して、一方のバッファから左側データ列を抽出し、他方のバッファから右側データ列を抽出するというように、一部のデータを2つのバッファに格納することで、左側データ列と右側データ列とを抽出し、対称フィルタ演算を行うことができる。
つまり、対称フィルタ演算のタップ数が大きい場合であっても、一部のデータを2つのバッファに分けて格納する。このため、対称フィルタ演算に用いる全てのデータをバッファに格納することなく、タップ数の大きい対称フィルタ演算を行うことができるので、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。なお、本実施の形態では、バッファは複数のレジスタから構成されているとして、これまで説明を行ってきたが、レジスタには限定されない。例えば、データメモリの一部の領域をバッファとしてもよい。
また、左側データ列の先頭のデータと右側データ列の先頭のデータとがデータ中心に対して左右対称となるように、左側データ列と右側データ列とを抽出する。これにより、同じフィルタ係数に乗算されるデータ列のペアを抽出することができる。このため、タップ数に応じた当該データ列のペアを抽出することで、プロセッサで様々なタップ数に対応した対称フィルタ演算を行うことができる。
また、第三データ列及び第四データ列、または第五データ列及び第六データ列は、連続する番号のレジスタに記憶されている。これにより、対称フィルタ演算を行うための命令コードが単純であり、当該命令コードでのレジスタのビットフィールドを削減することができる。
また、上記各実施の形態において、各構成要素は、専用のハードウェアで構成されてもよいし、各構成要素に適したソフトウェアプログラムを実行することによって実現されてもよい。例えば、各構成要素は、CPUまたはプロセッサなどのプログラム実行部が、ハードディスクまたは半導体メモリなどの記録媒体に記録されたソフトウェアプログラムを読み出して実行することによって実現されてもよい。
つまり、図1または図10に示した対称型フィルタ演算装置の各構成要素は、ソフトウェアによって実現されてもよい。そして、上記各実施の形態の対称型フィルタ演算装置を実現するソフトウェアは、次のような対称型フィルタ演算方法に含まれるステップをコンピュータに実行させるプログラムである。すなわち、この対称型フィルタ演算方法は、左右対称のフィルタ係数を用いて、記憶部に格納されている複数のデータのフィルタ演算を行う対称型フィルタ演算方法であって、前記記憶部から連続する複数のデータである第一データ列を読み出し、前記第一データ列の中から、中心より左側のフィルタ係数である左側フィルタ係数に乗算される連続する複数のデータである左側データ列を抽出する左側データ列抽出ステップと、前記記憶部から連続する複数のデータである第二データ列を読み出し、前記第二データ列の中から、中心より右側のフィルタ係数であって前記左側フィルタ係数と同じ値の右側フィルタ係数に乗算される連続する複数のデータである右側データ列を抽出する右側データ列抽出ステップとを含む。
また、このようなプログラムは、CD−ROM等の記録媒体及びインターネット等の伝送媒体を介して流通させることができる。
また、本発明は、このような対称型フィルタ演算装置が備える特徴的な処理部を備える集積回路(LSI)として実現することもできる。これらは個別に1チップ化されても良いし、一部又は全てを含むように1チップ化されても良い。具体的には、例えば、図1または図10に示された対称型フィルタ演算装置が備える機能ブロックのうちメモリを除いた部分全てが1チップ化されていても良い。
ここでは、LSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
さらには、半導体技術の進歩又は派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適応等が可能性としてありえる。
以上、本発明に係るフィルタ演算装置について、上記実施の形態を用いて説明したが、本発明は、これに限定されるものではない。
つまり、今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
例えば、上記実施の形態1および実施の形態2では、画素データが8ビットである場合を例に説明をしたが、8ビット以外であっても構わない。また、1つのレジスタには8画素データが格納される場合を例に説明したが、8画素以外であっても構わない。実施の形態1および2に記載したように、予めフィルタ係数の対称の中心位置の画素をレジスタ内の所定の位置に格納されるようにすれば、1つのレジスタに格納される画素数が8以外にも対応ができる。
また、上記実施の形態1および実施の形態2では、フィルタ演算装置は、画素データの対称フィルタ演算を行うこととしたが、対称フィルタ演算を行うデータは画素データに限定されず、音声データなど画像データ以外のデータであってもよい。
また、上記実施の形態1および実施の形態2では、対称フィルタ演算を行うための命令のニーモニックで、2つの連続する番号のレジスタを「Rc:Rc+1」、「Ra、Ra+1」、「Rb、Rb+1」と表したが、別名を付けて表しても構わない。例えば、2つの連続する番号のレジスタを1つのレジスタXと別名を付けると、32本の64ビットのレジスタR0〜R31は、16本の128ビットのレジスタX0〜X15と表すことができる。この場合、「Rc:Rc+1」は「Xc」、「Ra、Ra+1」は「Xa」、「Rb、Rb+1」は「Xb」と表すことができる。
また、上記実施の形態2では、valnpadd.8命令を、実施の形態1でのvalnadd.8命令では対応できない9タップより大きい対称フィルタの場合に使用することとした。しかし、valnpadd.8命令は、9タップ以下の対称フィルタの場合でも使用できるため、上記実施の形態2において、タップ数に関わらずvalnpadd.8命令を使用することにしてもよい。