(57)【特許請求の範囲】
【請求項１】
順序付けられた複数のプロセッサエレメントで構成されたプロセッサアレイと、
１サイクル毎に、1個の命令を取得する命令取得手段と、
１サイクル毎に、第１順位のプロセッサエレメントの動作を制御する為の動作制御情報を作成し、作成した動作制御情報と前記命令取得手段で取得した1個の命令とに基づき、第１順位のプロセッサエレメントに対する命令を生成する手段と、
１サイクル毎に、次順位以降のプロセッサエレメントの動作を制御する為の動作制御情報を、前順位のプロセッサエレメントの動作を制御する為に作成した動作制御情報を基に作成し、作成した動作制御情報と前記命令取得手段で取得した1個の命令とに基づき、前記次順位以降のプロセッサエレメントに対する命令を生成する手段と
を備えることを特徴とするアレイ型演算装置。
【請求項２】
前記プロセッサアレイは、信号線で連結された複数のプロセッサエレメントで構成され、
１サイクル毎に、各プロセッサエレメントの演算結果を、前記信号線を介して次順位のプロセッサエレメントに伝達する
ことを特徴とする請求項１記載のアレイ型演算装置。
【請求項３】
前記アレイ型演算装置は、更に、１サイクル毎に、基本制御情報を生成する基本制御情報生成手段を備え、
第１順位のプロセッサエレメントの動作を制御する為の動作制御情報は、前記基本制御情報生成手段で生成された基本制御情報を基に作成される
ことを特徴とする請求項１記載のアレイ型演算装置。
【請求項４】
前記プロセッサエレメントは、それぞれ、複数種類のデータを取得するデータ取得手段を備え、
前記動作制御情報は、各プロセッサエレメントが命令を実行する際に使用するデータの種類を指定する指定情報を含み、
前記各プロセッサエレメントは、実行に際して、前記指定情報に応じて取得したデータを使用する
ことを特徴とする請求項１記載のアレイ型演算装置。
【請求項５】
前記動作制御情報は、前記命令取得手段で取得した１個の命令を実行するか否かを指定する情報であって、
前記動作制御情報が実行する旨の指示である場合には、前記プロセッサエレメントは前記命令を実行し、前記動作制御情報が実行しない旨の指示である場合には、該当するプロセッサエレメントへの電力供給を抑止する
ことを特徴とする請求項１記載のアレイ型演算装置。
【請求項６】
信号線で連結されたＮ個のプロセッサエレメントをＭ行有した、Ｍ行×Ｎ列の２次元アレイ構造のプロセッサアレイであって、各プロセッサエレメントの演算結果を、次行のプロセッサエレメントに伝達可能に接続されたプロセッサアレイと、
１サイクル毎に、基本制御情報を生成する基本制御情報生成手段と、
１サイクル毎に、1個の命令を取得する命令取得手段と、
１サイクル毎に、最初の行のプロセッサエレメントの動作を制御する為の動作制御情報を前記基本制御情報生成手段で生成された基本制御情報を基に作成し、作成した動作制御情報と前記命令取得手段で取得した1個の命令とに基づき、最初の行に対する命令を生成する手段と、
１サイクル毎に、２〜Ｍ行のプロセッサエレメントの動作を制御する為の動作制御情報を前行のプロセッサエレメントの動作を制御する為に作成した動作制御情報を基に作成し、作成した動作制御情報と前記命令取得手段で取得した1個の命令とに基づき、前記２〜Ｍ行のプロセッサエレメントに対する命令を生成する手段とを備え、
前記プロセッサアレイのそれぞれの行に配列されているＮ個の前記プロセッサエレメントは、当該行に対する命令を実行する
ことを特徴とするアレイ型演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はＤＶＤレコーダやデジタルＴＶ等、デジタル信号を用いた映像、音響機器に用いる信号処理ＬＳＩに関するものであり、特に、画像信号処理ＬＳＩに関する。
【背景技術】
【０００２】
近年、地上波デジタル放送などに代表されるように、動画像のデジタル化が進んでいる。
それに伴い動画像の圧縮化の技術が開発され、ＭＰＥＧ（Moving Picture Experts Group）符号化は、画像の中の動く部分だけを検出して保存することにより高効率圧縮を実現している。
【０００３】
さらに、近年のデジタルＡＶ機器等の多様化により、様々な機器にＭＰＥＧ符号化ＬＳＩが搭載されるに至っており、例えば、据え置き機器であるＤＶＤレコーダとモバイル機器であるカムコーダとでは、ＭＰＥＧ２エンコードというアプリケーションが動作する。
この場合、同じＭＰＥＧ２エンコーダというアプリケーションであっても、据え置き機器であるＤＶＤレコーダでは、モバイル機器であるカムコーダに比べ、より高画質を保障するアルゴリズムの実行が要求される。
【０００４】
この要求に対応するためには、共通のハードウェア上で、ソフトウェアにより用途に応じた柔軟な処理を実現することが望ましい。
ここで、ＭＰＥＧ符号化について簡単に説明すると、この方式では、現フレームの被写体が過去又は未来のフレームでどの方向にどの程度動いたかを表す動きベクトルと、動きベクトルだけでは表せなかった輝度と色差の変化量とを保存している。
【０００５】
この動きベクトルを求める処理を動きベクトル探索処理（図１参照）といい、この処理は、一般的なリサイズフィルタや動き補償等の画像処理に比べて処理量が非常に大きくなるという特徴がある。
というのは、通常、例えば１６×１６ピクセルのマクロブロックと呼ばれる単位（図１：対象画像２００）で、そのブロックが過去又は未来のフレーム（図１：参照画像１００）のどこに移動したのかを１ピクセルずつずらしながら検索し、最も類似度が高い部分を見つけ、動きベクトルを求めるからである。このマクロブロックは、例えば、７２０×４８０ドットのフレームの場合１３５０個となり、そのすべてについて、検索がなされる。
【０００６】
従って、ＭＰＥＧ符号化においては、動きベクトル探索処理の性能が重要になる。
この動きベクトル探索処理は、同様な処理の繰り返しであることから、複数の演算器を1次元方向又は２次元方向に展開した演算装置を使用して処理性能を向上させる技術が開発されている。
現在、一般的な画像処理では１次元方向に展開した演算装置が使用されているが、これは、並列使用できる演算器の個数が少なく、動作周波数の低減、すなわち電圧の低下が充分には実現できない場合が多い。従って、熱及び消費電力の問題から、モバイル機器や家電機器への適用は、並列使用できる演算器の個数がより多く、動作周波数の低減をより図ることができる２次元方向に展開した演算装置（以下、「２次元アレイ型演算装置」という。）を使用する方が望ましい。
【０００７】
この２次元アレイ型演算装置の性能向上技術として、複数の演算器間のデータ通信の際に発生する待ち時間の低減を図る技術が開示されている（特許文献１参照）。
【特許文献１】特開平０９−０２２４０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかし、２次元アレイ型演算装置は、制御する演算器の数が格段に増えることから、これらの演算器をソフトウェアで制御し、機器に応じて異なるアルゴリズムを実現させるためには、ソフトウェアの命令長が伸びることは必然である。
その結果、それらの命令をフェッチする先の命令メモリ、及びその命令を解読する為の命令デコーダの規模が大きくなり、ハードウェアの面積増加となり、結果的にＬＳＩのコスト増につながり妥当ではない。
【０００９】
そこで、本発明は、ソフトウェアによって、２次元アレイ型演算装置をより柔軟に制御して効率的な並列処理を実現し、かつ、ハードウェアの面積が大きくならないような２次元アレイ型演算装置の提供を目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決する為に、本発明のアレイ型演算装置は、順序付けられた複数のプロセッサエレメントで構成されたプロセッサアレイと、１サイクル毎に、1個の命令を取得する命令取得手段と、１サイクル毎に、第１順位のプロセッサエレメントの動作を制御する為の動作制御情報を作成し、作成した動作制御情報と前記命令取得手段で取得した1個の命令とに基づき、第１順位のプロセッサエレメントに対する命令を生成する手段と、１サイクル毎に、次順位以降のプロセッサエレメントの動作を制御する為の動作制御情報を、前順位のプロセッサエレメントの動作を制御する為に作成した動作制御情報を基に作成し、作成した動作制御情報と前記命令取得手段で取得した1個の命令とに基づき、前記次順位以降のプロセッサエレメントに対する命令を生成する手段とを備えることを特徴とする。
【発明の効果】
【００１１】
本発明に係るアレイ型演算装置は、上述の構成を備えることにより、１つの命令によって、複数のプロセッサエレメント（Processor Element、以下、「ＰＥ」という。）に異なる動作をさせることができるようになるので、複数のＰＥを使用して柔軟な処理を行うことができるようになる。
また、命令数が少なくなることにより、実行に必要なハードウェア資源も少なくて済むようになる。
【００１２】
また、前記プロセッサアレイは、信号線で連結された複数のプロセッサエレメントで構成され、１サイクル毎に、各プロセッサエレメントの演算結果を、前記信号線を介して次順位のプロセッサエレメントに伝達することとしてもよい。
これによりアレイ型演算装置は、ＰＥの演算結果を後続のＰＥに伝達することができ、複数ＰＥの演算結果を用いた処理を一度に行うことが出来るので、処理速度を改善することが出来るようになる。
【００１３】
また、前記アレイ型演算装置は、更に、１サイクル毎に、基本制御情報を生成する基本制御情報生成手段を備え、第１順位のプロセッサエレメントの動作を制御する為の動作制御情報は、前記基本制御情報生成手段で生成された基本制御情報を基に作成されることとしてもよい。
これにより、１つの制御情報を生成することで、全てのＰＥの動作に影響を与えることが出来るので、同じＰＥアレイを使用して、様々な処理を行うことが出来るようになる。
【００１４】
また、前記プロセッサエレメントは、それぞれ、複数種類のデータを取得するデータ取得手段を備え、前記動作制御情報は、各プロセッサエレメントが命令を実行する際に使用するデータの種類を指定する指定情報を含み、前記各プロセッサエレメントは、実行に際して、前記指定情報に応じて取得したデータを使用することとしてもよい。
これにより、ＰＥごとに実行する際に使用するデータを変更することが出来るので、より柔軟な処理を行うことが出来るようになる。
【００１５】
また、前記動作制御情報は、前記命令取得手段で取得した１個の命令を実行するか否かを指定する情報であって、前記動作制御情報が実行する旨の指示である場合には、前記プロセッサエレメントは前記命令を実行し、前記動作制御情報が実行しない旨の指示である場合には、該当するプロセッサエレメントへの電力供給を抑止することとしてもよい。
これにより、演算を実行しないＰＥへの電源供給を行なわないようにすることが出来るので、消費電力を減らすことが出来るようになる。
【００１６】
また、本発明のアレイ型演算装置は、信号線で連結されたＮ個のプロセッサエレメントをＭ行有した、Ｍ行×Ｎ列の２次元アレイ構造のプロセッサアレイであって、各プロセッサエレメントの演算結果を、次行のプロセッサエレメントに伝達可能に接続されたプロセッサアレイと、１サイクル毎に、基本制御情報を生成する基本制御情報生成手段と、１サイクル毎に、1個の命令を取得する命令取得手段と、１サイクル毎に、最初の行のプロセッサエレメントの動作を制御する為の動作制御情報を前記基本制御情報生成手段で生成された基本制御情報を基に作成し、作成した動作制御情報と前記命令取得手段で取得した1個の命令とに基づき、最初の行に対する命令を生成する手段と、１サイクル毎に、２〜Ｍ行のプロセッサエレメントの動作を制御する為の動作制御情報を前行のプロセッサエレメントの動作を制御する為に作成した動作制御情報を基に作成し、作成した動作制御情報と前記命令取得手段で取得した1個の命令とに基づき、前記２〜Ｍ行のプロセッサエレメントに対する命令を生成する手段とを備え、前記プロセッサアレイのそれぞれの行に配列されているＮ個の前記プロセッサエレメントは、当該行に対する命令を実行することを特徴とすることとしてもよい。
【００１７】
これにより、2次元アレイ型の演算装置に対して、１つの命令を発行することで、複数のＰＥに異なる動作をさせることができるようになるので、より柔軟な処理を行うことができるようになる。
【発明を実施するための最良の形態】
【００１８】
＜実施形態１＞
＜概要＞
本発明に係るアレイ型演算装置は、２次元アレイ型演算装置であり、命令メモリ、及び命令デコーダの数は減らした上で、アレイ型に配列された演算器を制御等するソフトウェアの命令長を抑えることにより、命令メモリ、及び命令デコーダの規模の拡大を抑えようとするものである。
【００１９】
例えば、図３（ａ）で示すように、演算器アレイを構成するそれぞれのＰＥに独立の演算命令を発行した場合、ＰＥ数分の命令が必要となる。この場合、基本的に、ＰＥ数分の命令デコーダと命令メモリが必要となる。
また、図３（ｂ）に示すような１次元アレイ型演算装置においても、同様の課題が発生する。
【００２０】
その解決法として、ＳＩＭＤ（Single Instruction Multi Data）という方式が広く知られており、これは、展開した方向の演算器には共通の命令を発行することで、ソフトウェア制御のために必要となるコストを削減するというものである。この方法は、各ＰＥが同様の動作を行うような画素処理に特に適している。
しかし、この方法であっても、全てのＰＥに対して１つの命令で指示を出すには、命令長が長くなりすぎ現実的ではないため、例えば、図３（ｂ）に示すように行（又は列）単位で命令を発行している。
【００２１】
ＳＩＭＤ方式を採用することによって、各ＰＥに独立の演算命令を発行する場合に比べて命令数は格段に減ったものの、前述した動きベクトル探索処理や画像認識処理に用いられるアレイは大規模なものであり、行（又は列）数分の命令であっても、命令メモリサイズや命令デコーダに対する影響は大きい。基本的に、行数分の命令メモリと命令デコーダが必要となる。
【００２２】
本発明に係る２次元アレイ型演算装置では、命令メモリ及び命令デコーダをそれぞれ１つとした上で、さらに命令長を削減することにより命令メモリサイズ等を小さくし、結果的にＬＳＩの面積の増加を抑えようとしている。
それとともに、例えばＭＰＥＧ符号化処理のアルゴリズムの変更などが容易に出来る柔軟性をも実現する。
【００２３】
以下、本発明の実施形態の２次元アレイ型演算装置について説明する。
本実施形態の２次元アレイ型演算装置は、ＭＰＥＧ符号化処理における動きベクトル探索処理を行うものである。
＜動きベクトル探索＞
図１を用いて、動きベクトル探索処理について簡単に説明する。
【００２４】
図１は、動きベクトル探索処理の探索方法を示す図である。
対象画面２０は、現在の符号化対象フレームであり、対象画像２００は、いわゆるマクロブロックである。
また、参照画面１０は、動きベクトルを算出するための過去又は未来のフレームであり、参照画像１００は、対象画像２００の類似部分を検索する範囲である。
【００２５】
参照画像１００の中で、左上から右下まで、マクロブロックと最も類似度が高い部分を、１ピクセルずつずらして検索する（参照画像１００−１、参照画像１００−２）。
図２は、参照画像１００と対象画像２００との構成を表す図である。
図２（ａ）は、参照画像１００であり、左上のピクセルを「R(0,0)」とし、ｘｙ座標系でピクセルの位置を表すものとする。また、図２（ｂ）は、対象画像２００であり、図２（ａ）と同様に、左上のピクセルを「T(0,0)」と表すものとする。
【００２６】
以下の説明で、「R(x,y)」又は「Rxy」は参照画像１００のピクセルを表し、「T(x,y)」又は「Txy」は対象画像２００のピクセルを表すものとする。また、図面において、□は参照画像１００のピクセルを、○は対象画像２００のピクセルを表すものとする。
＜構成＞
以下、図４及び図５を用いて、本発明にかかる２次元のアレイ型演算装置１０００の構成を説明する。
【００２７】
図４は、アレイ型演算装置１０００と関連する周辺部の構成を表す図である。
この図４では、アレイ型演算装置１０００のほかに、プログラムカウンタ１００１、命令メモリ１００２、命令発行部１００３、プログラム記憶部１００４及びメモリキャッシュ１００５を記載している。
これらの各機能部及び各ＰＥ等は、伝送するビット数に応じた本数のデータ信号線で接続されているものとする。
【００２８】
プログラム記憶部１００４は、演算器の動作を示す命令ストリームからなるソフトウェアプログラムを記憶しており、プログラムカウンタ１００１は、プログラム記憶部１００４に記憶されている次に実行する命令を指している。
プログラムカウンタ１００１が指す命令を、命令メモリ１００２にフェッチし、命令発行部１００３は、命令メモリ１００２の命令をデコードし、アレイ型演算装置１０００全体に共通の命令である制御信号を発行する。
【００２９】
メモリキャッシュ１００５は、アレイ型演算装置１０００で使用するデータを記憶する。
次に、アレイ型演算装置１０００の構成について説明する。
このアレイ型演算装置１０００は、５行×６列の２次元に配列された３０個のＰＥ（PE00等）で成るＰＥアレイ１１００と、制御情報生成部３０００及び命令生成部（３１００〜３５００）で構成される。
【００３０】
各ＰＥ及び各生成部はそれぞれバスで連結され、信号を伝達できるようになっている。また各生成部は論理回路で構成されているものとする。
ここで、本アレイ型演算装置１０００の特徴は２つある。１つは、外部の命令発行部１００３から入力される１つの命令（Inst0）で３０個のＰＥを制御するために、以下に説明する制御情報生成部３０００と各行への命令（Inst00〜Inst40）を生成する命令生成部（３１００等）を有する点である。また、もう１つは、各ＰＥが行方向だけでなく、列方向にもバス１００９で連結されデータを送受信できるようになっている点である。
【００３１】
次に、図５を用いて、各機能部について説明する。
図５は、アレイ型演算装置１０００の構成の詳細を表す図である。ここでは、説明の便宜上、一部のＰＥ等のみを記載している。
アレイ型演算装置１０００は、複数のＰＥ２０００、制御情報生成部３０００、複数の命令生成部（３１００等）及び加算部１２００で構成される。
【００３２】
まず、1サイクルごとに、制御情報生成部３０００は制御情報を、命令発行部１００３は命令情報を発行する。ここで、サイクルとは、処理の基準となる一定のクロックサイクルである（以下、同様。）。
制御情報生成部３０００は、カウンタ記憶部３０１０を有し、ここには、カウンタを記憶しておく。このカウンタの値に応じて制御情報を生成する。このカウンタ記憶部３０１０には、生成した最新の制御情報も記憶しておくものとする。
【００３３】
ここで生成する制御情報は、各ＰＥの動作を制御する基本となるものといえる。
命令生成部３１００は、命令発行部１００３から発行された命令情報と、制御情報生成部３０００から発行された制御情報とを受け取り、ＰＥアレイ１１００の１行分のＰＥ（ＰＥ００〜ＰＥ０５）の演算処理を制御する命令を生成する。
ここで命令を生成する際には、制御情報生成部３０００から受取った制御情報を基に自分用の制御情報を作成し、作成した制御情報を基にＰＥ用の命令を作成する。または、制御情報を送り出す前に作成する。つまり、受取った制御情報と送り出す制御情報とが、異なるということである。
【００３４】
但し、受取った制御情報と送り出す制御情報とが同じでよい場合も動作目的によっては当然ある。例えば、本実施形態１では、制御情報はそのまま使用するが、後で説明する実施形態４では受取った制御情報を加工して次の命令生成部に送り出している。
またさらに、命令生成部３１００は制御情報記憶部３１１０を有し、制御情報生成部３０００から受信した制御情報を記憶する。新たな制御情報を記憶する前に、ここに記憶しておいた制御情報を命令生成部３２００に送信し、命令生成部３２００は、受取った制御情報を基に命令を生成することになる。
【００３５】
命令生成部（３２００、３３００、３４００、３５００）は、命令生成部３１００と同様の機能を有するが、制御情報生成部３０００から発行された制御情報ではなく、1つ前の命令生成部から受取った制御情報を使用して各行の演算器（PE10〜PE15等）の演算処理を制御する命令を生成する点が異なる。
また、命令生成部（３２００〜３５００）は、命令生成部３１００と同様に、各制御情報記憶部（３２１０、３３１０等）に制御情報を記憶し、順次記憶する制御情報を送っていく。
【００３６】
次に、ＰＥについて説明する。これらはすべて同じ構成をとるため、ＰＥ００（２０００）のみを説明する。
ＰＥ００（２０００）は、演算部２１００、対象データ記憶部２２００、参照データ記憶部２３００及び相関記憶部２４００で構成される。
対象データ記憶部２２００は、対象画像２００の１ピクセルのデータを記憶する。具体的には、３０個のＰＥ（図４参照）はそれぞれ、対象画像２００の３０個のピクセル（図２（ｂ）参照）のデータを記憶する。
【００３７】
例えば、ＰＥ００の対象データ記憶部２２００は、ピクセル「T(0,0)」のデータを記憶し、ＰＥ１０の対象データ記憶部２２００は、ピクセル「T(1,0)」のデータを記憶する。
参照データ記憶部２３００は、参照画像１００の１ピクセル（図２（ａ）参照）のデータを記憶する。
但し、対象データ記憶部２２００はＰＥごとに異なるピクセルのデータを記憶していたが、参照データ記憶部２３００はＰＥの列ごとに異なる点で相違する。すなわち、同じ列のＰＥの参照データ記憶部２３００は同じデータを記憶している。
【００３８】
この参照データ記憶部２３００には、メモリキャッシュ１００５に記憶されている参照データを読み込み記憶する。
例えば、ＰＥ００とＰＥ１０の参照データ記憶部２３００は、ピクセル「R00」のデータを記憶するが、ＰＥ０１とＰＥ１１の参照データ記憶部２３００は、ピクセル「R10」のデータを記憶する。
【００３９】
演算部２１００は、対象データ記憶部２２００に記憶されている対象データと参照データ記憶部２３００に記憶されている参照データとの相関の強さを計算し、相関記憶部２４００に記憶する。相関の強さは、ＳＡＤ（Sumof Absolute Difference）を用いて判断するものとする。
相関記憶部２４００は、自ＰＥの演算部２１００の結果データのほか、1つ前の行のＰＥから渡された受信データを記憶する。また、記憶しているデータを次の行のＰＥに送信する機能も有する（バス１００９参照）。この詳細は、図８を用いて、後で説明する。
【００４０】
加算部１２００は、最終行のＰＥからの出力を加算した値を、アレイ型演算装置１０００から出力する。この値は、対象画像２００と参照画像１００の相関値となり、最も相関が強い、すなわち最も差分絶対値の合計が小さい参照画像の位置から動画ベクトルを求めることになる。
次に、本アレイ型演算装置１０００での、相関値を求める方法を、制御情報等の各データの流れを示して説明し、その後、アレイ型演算装置１０００処理の流れを説明する。
【００４１】
＜相関の求め方＞
次に、図６〜図８を用いて、アレイ型演算装置１０００が対象画像２００と参照画像１００との相関を求める手順について説明する。図では、便宜上、「T(0,0)」は「T00」等と記載している（以下の図で、同様）。
ここでは、ＰＥアレイ１１００への参照画像１００の供給の方法、制御情報の伝達方法及び相関記憶部２４００の内容の遷移のそれぞれについて、図を用いて説明する。
【００４２】
＜ＰＥアレイへの参照画像１００の供給の方法＞
図６は、参照画像１００をＰＥアレイ１１００へ供給する方法を示す図である。
ＰＥアレイ１１００は、図２（ｂ）の対象画像２００をアレイ型演算装置１０００のＰＥアレイ上に配置したものである。具体的には、対象データ記憶部２２００に記憶している（図５参照）。
【００４３】
対象画像２００をアレイ型演算装置１０００のＰＥアレイ上に保持し、参照画像１００を横６画素の１ラインずつ供給する。
例えば、サイクル「Cyc 0」１０１に参照画像１００の最初のライン（R00〜R50）を供給した場合、ＰＥアレイ１１００に列単位で同じ参照データが供給される。具体的には、参照データ記憶部２３００に記憶される（図５及び図７参照）。
【００４４】
続くサイクル「Cyc 1」１０２に参照画像１００の２行目のライン（R01〜R51）を供給した場合も同様に、行単位で同じ参照画像が供給され、サイクル「Cycy」１０３に最後の行のライン（R0y〜R5y）を供給した場合まで、同様の供給が成される。
＜制御情報の伝達方法＞
図７は、制御情報を命令生成部（３１００等）に供給する方法を示す図である。
【００４５】
図７では、「Cycle 0」から「Cycle 3」まで時系列に、アレイ型演算装置１０００で制御情報が供給されていく様子を記載している。
図では、制御情報生成部３０００が生成する制御情報を「token0」「token1」等と表し、ＰＥ及び命令生成部（３１００等）では、各記憶部と、その内容を表しているものとする。また、点線矢印は、記憶部の内容の送出を示している。
【００４６】
まず、「Cycle 0」では、制御情報生成部３０００で生成された制御情報「token0」が、命令生成部３１００の制御情報記憶部３１１０に記憶されている。実際には、制御情報生成部３０００で制御情報が生成されるのは、１つ前のサイクルであり、カウンタ記憶部３０１０には「token1」が記憶されているが、ここでは説明の便宜上「token0」と記載する。
【００４７】
このサイクルで、ＰＥ００とＰＥ０１は、演算を行ない、その結果を相関記憶部２４００に記憶する。
次に、「Cycle 1」では、制御情報生成部３０００で生成された制御情報「token1」が、命令生成部３１００の制御情報記憶部３１１０に記憶され、命令生成部３２００の制御情報記憶部３１２０には、命令生成部３１００の制御情報記憶部３１１０に記憶されていた制御情報「token0」が記憶される。
【００４８】
このように、「Cycle 3」「Cycle 4」と順次「token0」が送られていく。
この制御情報「token0」等と命令発行部１００３が発行した命令「Inst0」等とを基に、命令生成部（３１００等）はＰＥアレイの各行に送る命令を生成することになる。
尚、ＰＥの相関記憶部２４００の「result」は、演算結果を表し、詳細は以下に説明する。
【００４９】
＜相関記憶部２４００の内容の遷移＞
図８は各ＰＥの相関記憶部２４００に記憶されている内容の遷移を示す図である。
ここでは、各ＰＥの相関記憶部２４００に記憶されている内容を、時系列に順次、次の行のＰＥの相関記憶部２４００に送出していく様子を記載している。
また、１列のＰＥの相関記憶部２４００のみを記載している。各列ごとの動作は同じだからである。また、図７のＰＥアレイの１列目のＰＥの相関記憶部２４００の内容を記載している。
【００５０】
ここでは、説明の便宜上、対象画像２００のうち「T(0,0)」「T(0,1)」「T(0,2)」の３ピクセルを対象画像とし、参照画像１００のうち「R(0,0)」「R(0,1)」「R(0,2)」「R(0,3)」の４ピクセルを参照画像として説明する。従って、ＰＥアレイも「PE00」「PE10」「PE20」の３つとして説明する。
相関記憶部２４００の内容は、２種類のデータが含まれている。1つは自ＰＥの演算部２１００の演算結果データ２４１０であり、もう1つは、１つ前の行のＰＥから送られた受信データ２４２０である。
【００５１】
実際には、対象データと参照データの相関値の合計を記憶しているが、ここでは内容を明確にするために相関を取ったピクセルを表している。例えば、「T(0,0)+R(0,0)」は、「T(0,0)」と「R(0,0)」の相関値を表し、「T(0,0)+R(0,0)T(0,1)+R(0,1)」は、「T(0,0)」と「R(0,0)」の相関値と「T(0,1)」と「R(0,1)」の相関値との合計値を表す。
「Cycle 0」において、「PE00」の相関記憶部２４００の演算結果データ２４１０には「T(0,0)+R(0,0)」が記憶され、受信データ２４２０には何も記憶されていない。前行のＰＥは存在しないからである。
【００５２】
次に、「Cycle 1」では、「PE00」の演算結果データ２４１０には「T(0,0)+R(0,1)」が記憶され、受信データ２４２０には何も記憶されていない。
また、「PE01」の相関記憶部２４００の演算結果データ２４１０には「T(0,1)+R(0,1)」が記憶され、受信データ２４２０には「Cycle 0」時の「PE00」の相関記憶部２４００の演算結果データ２４１０と受信データ２４２０との合計が記憶される。
【００５３】
このように、順次、演算結果データ２４１０と受信データ２４２０との合計を次行のＰＥに送っていく。
すると、最後の行のＰＥ、ここではＰＥ２０、から送出される演算結果データ２４１０と受信データ２４２０との合計は、対象画像と参照画像の1行分の相関値２４０１となる。
【００５４】
具体的には、「T(0,0)」「T(0,1)」「T(0,2)」と「R(0,0)」「R(0,1)」「R(0,2)」との相関値である。
その次のサイクルで最後の行のＰＥから送出される相関値の合計は、対象画像と１ピクセルずれた参照画像の相関値２４０２となる。
具体的には、「T(0,0)」「T(0,1)」「T(0,2)」と「R(0,1)」「R(0,2)」「R(0,3)」との相関値である。
【００５５】
このように、順次、１ピクセルずつＹ方向にずらした参照画像１００と対象画像２００との１行分の相関値が出力されることになる。
本説明では、１列分について説明したが、各行の出力を合計することにより対象画面と参照画面の相関値が求まる。
＜アレイ型演算装置の処理の流れ＞
図９〜図１３を用いて、アレイ型演算装置１０００の動作について説明する。
【００５６】
これらの処理を実行する機能部は組合せ順序回路で構成され、以下の処理を実行している（図１８等も同様）。
まず、図９は、アレイ型演算装置１０００で対象画像２００と参照画像１００との相関を求める処理を示すフローチャートである。参照画像１００の中で、１つのマクロブロック、すなわち対象画像２００と最も相関の高い位置を、参照画像１００を１ピクセルずつずらしながら求める。
【００５７】
最初に、対象画像２００から、各ＰＥの対象データ記憶部２２００にそれぞれの対象データを読込む（ステップＳ１００、図６参照）。
制御情報生成部３０００のカウンタ記憶部３０１０に値をセットする（ステップＳ１１０）。ここでセットする値は、参照画像１００の行数である。例えば、「８」をセットする。
【００５８】
次に、参照画像１００のうち、アレイ型演算装置１０００に供給する１行分の先頭アドレスをレジスタ０にロードする（ステップＳ１２０）。尚、ロード先はレジスタ０に限られず、システムに依存する。
例えば、「R00」「R10」〜「R50」を供給する場合には（図６参照）、メモリキャッシュ１００５に記憶されている「R00」のピクセルデータのアドレスをロードする。記憶されていない場合は、メモリキャッシュに読込む処理を行う。
【００５９】
レジスタ０に参照画像のアドレスがロードされたら、対象画像２００との相関を取る処理を実行する（ステップＳ１３０）。この処理は、命令発行部１００３が、命令として「exec_array」を発行することで実行される。
この「exec_array」の実行で、参照画像１００の１行と対象画像２００の全行との相関が取られることになる。例えば、図６の第０サイクル１０１で供給される参照データとＰＥアレイ１１００上の対象画像２００とが演算される。
【００６０】
「exec_array」の処理が終了したら、ＰＥアレイ１１００の最終行のＰＥからの出力を加算部１２００で合計した値を出力する（ステップＳ１４０）。
参照画像１００の最終行まで演算していなければ（ステップＳ１５０：ＮＯ）、レジスタ０に次の行のアドレス、例えば、「R01」のピクセルデータのアドレスをセットして、処理を繰り返す（ステップＳ１２０からステップＳ１４０）。
【００６１】
ここで、参照画像１００の最終行まで演算するとは、対象画像T(x,0)と参照画像R(x,8)との演算が終了するまでをいい、具体的には、参照画像の行数と対象画像の行数とを足した回数、１３回「exec_array」の処理を行う。
参照画像１００の最終行まで演算を終了したら（ステップＳ１５０：ＹＥＳ）、次列に移り、演算を行なう（ステップＳ１１０〜ステップＳ１５０）。
【００６２】
参照画像を１ピクセル右にずらした６ピクセル分のデータ、「R10」「R20」〜「R60」の「R10」のピクセルデータのアドレスをレジスタ０にロードし（ステップ１２０）処理を行う。
参照画像１００の最終列まで演算したら（ステップＳ１６０）処理を終了する。
これで、１マイクロブロックである対象画像２００の演算が終了することになり、演算結果の出力（ステップＳ１４０）で出力された相関が最も強い場所から動きベクトルを算出する。
【００６３】
次に、図１０を用いて、「exec_array」の処理について説明する。
図１０は、「exec_array」の処理を示すフローチャートである。
まず、制御情報生成部３０００は、新しい制御情報（トークン）を生成し、命令生成部（３１００等）は記憶している制御情報を次の命令生成部に送る（ステップＳ２１０）。
制御情報を受取った命令生成部は、命令発行部１００３から発行された「exec_array」命令と、制御情報記憶部（３１１０等）に記憶する制御情報とから、命令を生成し、該当する行のＰＥに送信する（ステップＳ２２０）。
【００６４】
生成された命令を受取った各ＰＥは、演算処理を行う（ステップＳ２４０）。
これらの３つの処理は、１サイクルずつずれながら並行して行われる。
図１１を用いて、ＰＥの処理について説明する。
ステップＳ２１０の制御情報生成部３０００の処理と、ステップ２３０の命令生成部（３１００等）の詳細は、図１２を用いて、後で説明する。
【００６５】
図１１は、ＰＥの処理を示すフローチャートである。
命令生成部（３１００等）から送られた命令が、実行するという命令であれば（ステップＳ３００：実行）、メモリキャッシュ１００５から、レジスタ０の指す先を参照して各ＰＥの参照データ記憶部２３００に該当する参照データを読込む（ステップＳ３０５）。具体的には、命令発行部１００３が命令デコード時に該当するデータを書き込んでおいたＰＥアレイの各列に対応したメモリから、データが読込まれる。
【００６６】
次に、演算部２１００は、対象データ記憶部２２００の対象データと参照データ記憶部２３００の参照データとの差分絶対値を求め（ステップＳ３１０）、演算結果を、相関記憶部２４００の演算結果データ２４１０に記憶する（ステップＳ３２０、図８参照）。
その後、演算結果データと受信データ２４２０を加算して次行のＰＥに送り、データを受取った次行のＰＥは、自ＰＥ内の受信データ２４２０に記憶する。
【００６７】
一方、命令生成部（３１００等）から送られた命令が、キャンセルという命令であれば（ステップＳ３００：キャンセル）、何もしないで終了する。
次に、図１２を用いて、制御情報生成部３０００の処理と、命令生成部（３１００等）の処理について説明する。これらの処理は、同じサイクルで実行される。
まず、図１２（ａ）を用いて、制御情報生成部３０００の処理について説明する。図１２（ａ）は、制御情報生成部の処理を示すフローチャートである。
【００６８】
生成される制御情報は、「Valid」「Invalid」のうちのいずれかが生成されるものとする。
カウンタ記憶部３０１０に記憶されているカウンタ「Counter」（図９：ステップＳ１１０参照）の値が「０」の場合（ステップＳ４１０：==0）には、「Invalid」トークンを生成し（ステップＳ４１２）、カウンタ「Counter」の値が「０」でないの場合（ステップＳ４１０：≠0）には、「Valid」トークンを生成する（ステップＳ４１１）。生成したトークンは、命令生成部３１００に送り、制御情報記憶部３１１０に記憶させる。
【００６９】
また、トークンを生成後、カウンタ「Counter」の値から「１」を減算する。この場合、０以下になる場合は「０」とする。
次に、図１２（ｂ）を用いて、命令生成部（３１００等）の処理について説明する。命令生成部（３１００等）のそれぞれは、以下説明する処理と同様の処理を行う。
図１２（ｂ）は、命令生成部の処理を示すフローチャートである。
【００７０】
まず、制御情報記憶部３１１０に記憶しているトークンを次の命令生成部に送信し（ステップＳ４５０）、前の命令生成部又は制御情報生成部からトークンを受信する（ステップＳ４６０）。
受信したトークンを基に、ＰＥに実行させる命令を生成する。
トークンが「Valid」の場合（ステップＳ４７０：Valid）は「exec_array」命令を実行する命令を生成し（ステップＳ４７１）、「Invalid」の場合（ステップＳ４７０：Invalid）は「exec_array」命令を実行しないキャンセル命令を生成する（ステップＳ４７２）。
【００７１】
すなわち、トークンの値に応じて、ＰＥアレイの行単位で、実行するか否かを制御することができる。
生成した演算命令は、各ＰＥに送られ、トークンは制御情報記憶部３１１０に記憶する。
以下に、制御情報生成部３０００が作成したトークンとＰＥの実行の関係について説明する。
【００７２】
図１３は、トークンとＰＥの動作を時間軸上にあらわした図である。
横軸に時間軸をサイクル単位で示しており、制御情報生成部３０００の動作、及びＰＥアレイ１１００の第１行〜第５行の動作を示している。
ここで、○は、命令の基となったトークンであり、ここではカウンタ記憶部３０１０又は各制御情報記憶部（３１１０等）が記憶しているトークンを表し、「val」はValidを、「Iv」はInvalidをあらわすものとする。すなわち、「val」の行のＰＥは演算を実行し、「Iv」の行のＰＥは演算を実行しない。
【００７３】
また、ここでは、第１列のＰＥの動作のみを示している。各列の動作は同じだからである。
下部の表は、演算結果（５２００、５２１０）であり、対象画像と参照画像の相関を取ったピクセルを示している。
サイクル「Cyc=-1」の時、Counter５１００は「８」であることから、「Value」トークンが作成される。このとき、ＰＥは、何も行わない。
【００７４】
サイクル「Cyc=0」の時は、Counter５１００は「７」であり、「Value」トークンが作成され、サイクル「Cyc=-1」の時作成されたトークンはＰＥアレイ第1行のＰＥに移動している。従って、ＰＥアレイの第１行のＰＥのみが実行される。
すなわち、ＰＥアレイ１１００の第１行に配置された対象画像２００の第１行のデータ「T00」「T10」「T20」「T30」「T40」「T50」と、ＰＥアレイに対して供給された参照画像１００の第１行のデータ「R00」「R10」「R20」「R30」「R40」「R50」との間で差分絶対値を求める演算が行われ、その結果は、バスを通じて、第２行の演算要素に受け渡される（図６、図７参照）。
【００７５】
ＰＥアレイの第２行〜第５行までも、参照画像１００の第１行のデータＲ００〜Ｒ５０は供給されているが、演算は行なわない。
同様に、サイクル「Cyc=1」の時は、ＰＥアレイの第１行のＰＥと第２行のＰＥとが実行される。
すなわち、ＰＥアレイの第１行に配置された、対象画像の第１行のデータ「T00」「T10」「T20」「T30」「T40」「T50」と、参照画像の第２行のデータ「R01」「R11」「R21」「R31」「R41」「R51」との間で差分絶対値を求める演算が行われ、その結果は、演算要素からの出力バスを通じて、第２行のＰＥに受け渡される。同サイクルにおいて、ＰＥアレイの第２行に配置された、対象画像の第２行のデータ「T01」「T11」「T21」「T31」「T41」「T51」と、参照画像の第２行の画像データ「R01」「R11」「R21」「R31」「R41」「R51」との間で差分絶対値を求める演算が行われ、その結果と、前サイクルの前行の演算結果の和が、演算要素からの出力バスを通じて、第３行のＰＥに受け渡される。
【００７６】
同様の演算動作を繰り返すと、サイクル「Cyc=5」の時には、｜Ｔ００〜Ｔ５０−Ｒ００〜Ｒ５０｜＋｜Ｔ０１〜Ｔ５１−Ｒ０１〜Ｒ５１｜＋｜Ｔ０２〜Ｔ５２−Ｒ０２〜Ｒ５２｜＋｜Ｔ０３〜Ｔ５３−Ｒ０３〜Ｒ５３｜＋｜Ｔ０４〜Ｔ５４−Ｒ０４〜Ｒ５４｜の演算結果５２０１が、第５行のＰＥ出力として得られ、これを水平方向に加算したものが、相関の強さの評価値となる。
【００７７】
また同様に、サイクル「Cyc=6」の時には、｜Ｔ００〜Ｔ５０−Ｒ０１〜Ｒ５１｜＋｜Ｔ０１〜Ｔ５１−Ｒ０２〜Ｒ５２｜＋｜Ｔ０２〜Ｔ５２−Ｒ０３〜Ｒ５３｜＋｜Ｔ０３〜Ｔ５３−Ｒ０４〜Ｒ５４｜＋｜Ｔ０４〜Ｔ５４−Ｒ０５〜Ｒ５５｜の演算結果が出力として得られ、以後次々と、垂直方向にずらした位置の相関の強さの評価値が求められる。
また、サイクル「Cyc=7」以降は、Counter５１００は「０」であり、「Invalid」トークンが作成される。サイクル「Cyc=8」の時は、「Invalid」トークンがＰＥアレイ第1行のＰＥに移動している。従って、ＰＥアレイの第２行〜第５行のＰＥのみが実行される。
【００７８】
制御情報生成部３０００は、Counterに「８」をセットしてから、参照画像の行数「８」と対象画像の行数「５」と区切り「１」を加算した分の制御情報を生成して、参照画像１列の処理が終了したことになる。従って、サイクル「Cyc=13」から参照画像の２列目のピクセル「R10」〜「R15」との相関を求める処理が始まり、サイクル「Cyc=19」で、演算結果５２１１が、第５行のＰＥ出力として得られる。
【００７９】
演算結果の動きにあわせて、演算必要な期間のみＰＥを実行させることで、不要な演算を停止することができ、消費電力の削減が実現できる。図１３では、斜線の引かれた「Iv」のトークンに対応する行のＰＥの電源の供給を抑止することで、消費電力を削減できる。
次に、図１４は、プログラムの例を示す図である。
【００８０】
プログラム命令リスト５３００には、プログラム命令５３０１ごとの動作５３０２について記載している。また、制御情報（トークン）の値に応じての動作を示している。この図１４では、「Invalid」を「inval」、「Valid」を「val」と記載している（図１６、図２３、図３０で同様）。
例えば、トークン「Invalid」の場合は、「exec_array」は「nop」、すなわち実行は行なわず、「Valid」の場合は「exec」、すなわち実行するを示している。
【００８１】
「ld[addr],r0」５４００は、レジスタ０に参照データのアドレスをロードする指示である。
また、「exec_array r0」は、レジスタ０の指す先の参照データで演算を行なう指示である。
＜実施形態２＞
本実施形態は、あるタイミングの相関の強さの評価値が所定値以上であった場合、以後の演算を不要なものとしてキャンセルする点が、実施形態１と異なる。
【００８２】
図１５は、トークンとＰＥの動作を時間軸上にあらわした図である。
具体的には、演算結果６１００が、ある値以上の相関の強さを持っていると判定された場合、実際にはＳＡＤの値がある一定値以下であった場合には、「Cyc 6」以降の演算をキャンセルする。
「Cyc ｎ」からは、別の対象画像の演算が始まる。
【００８３】
キャンセルの方法は、例えば、ＳＡＤの値を評価する回路から、命令生成部（３１００等）に対して信号を出力し、演算停止を示すキャンセル命令を生成させる。これにより不要な演算部分６２００を停止することができ、消費電力の削減が実現できる。
次に、図１６は、プログラムの例を示す図である。
プログラム命令リスト５３００などは、実施形態１と同じもので実行が可能である（図１４参照）。
＜実施形態３＞
＜概要＞
本実施形態は、実施形態１と同じ演算を行なうが、実行速度を速めたものである点が異なる。
【００８４】
実施形態１のトークンとＰＥの動作を時間軸上にあらわした図である図１３において、対象画像と参照画像の１列目との演算は、サイクル「Cyc ‐1」〜「Cyc 12」までであり、２列目との演算はサイクル「Cyc13」から始まる。この場合、サイクル「Cyc 7」〜「Cyc 17」までは、演算を行なっていないＰＥが存在する。
本実施形態は、この演算を行なっていないＰＥにも演算を行なわせようとするものである。
【００８５】
図２２は、実施形態３のトークンとＰＥの動作を時間軸上にあらわした図である。
図に示すように、参照画像の１列目との演算はサイクル「Cyc ‐1」〜「Cyc 12」に行われる点は実施形態１（図１３参照）と同じであるが、２行目との演算はサイクル「Cyc8」から始まる点が異なる。
このような動作を実施させるためには、「Cyc 9」から「Cyc 11」までは、参照画像の1行目と２行目のデータをえり分けて各ＰＥの参照データ記憶部に読込む必要がある。
【００８６】
すなわち、実施形態１では、ＰＥへの命令は演算実行かキャンセルの２種類であったが、本実施形態では、「1行目のデータで実行」、「2行目のデータで実行」及び「キャンセル」の３種類の命令を生成できる点が異なる。
以下、本実施形態３の構成等を説明する。
＜構成＞
図１７は、実施形態３のアレイ型演算装置１０００の構成の詳細を表す図である。
【００８７】
実施形態１の構成（図５参照）との違いは、メモリキャッシュを２つ使用する点である。もちろん、物理的に２つである必要はない。
メモリキャッシュ０（１００６）とメモリキャッシュ１（１００７）は、両方とも参照データ記憶部２３００につながっており、各ＰＥは、どちらからデータを読込むかを選択できるものとする。
【００８８】
＜動作＞
次に、図１８〜図２１を用いて、本実施形態のアレイ型演算装置１０００の処理について説明する。基本的な処理の流れは実施形態１（図９〜図１２）と同じであるので、相違点を中心に説明する。
図１８は、アレイ型演算装置１０００で対象画像２００と参照画像１００との相関を求める処理を示すフローチャートである。この処理において、実施形態１での処理（図９参照）と異なる点は、２つのカウンタをセットする点と、参照画像のデータを２行分使用する点である。
【００８９】
最初に、対象画像２００から、各ＰＥの対象データ記憶部２２００にそれぞれの対象データを読込む（ステップＳ１００、図６参照）。
制御情報生成部３０００のカウンタ記憶部３０１０に値をセットする（ステップＳ５０１）。ここでは、「Counter0」に参照画像１００の行数「８」をセットし、「Counter1」の「０」をセットする。この場合、「Counter0」がアクティブカウンタとなる。尚、「Counter1」に「８」がセットされた場合は、「Counter1」がアクティブカウンタとなる。
【００９０】
次に、参照画像１００のうち、アレイ型演算装置１０００に供給する２行分の先頭アドレスをレジスタ０及びレジスタ１にロードする（ステップＳ５０２）。
同時に２行分のデータを必要とする場合があるからであり、一方の行を演算している途中で他方の行のロードを開始する、という処理を交互に繰り返すことになる（図２２参照）。
【００９１】
その後、「exec_array」の実行を行い（ステップＳ１３０）、演算結果を出力する（ステップＳ１４０）。  参照画像１００の最終行まで演算処理を繰り返す（ステップＳ１２０からステップＳ１５０）。
参照画像１００の最終列まで演算したら（ステップＳ１６０）処理を終了する。
図１９は、「exec_array」の処理を示すフローチャートであり、処理内容は、実施形態１とほぼ同じである（図１０参照）が、ＰＥの処理（ステップＳ５０３）が異なる。
【００９２】
図２０を用いて、ＰＥの処理について説明する。図２０は、ＰＥの処理を示すフローチャートである。
この処理で、実施形態１での処理（図１１参照）と異なる点は、各ＰＥの参照データ記憶部２３００に参照データを読込む場合に、メモリキャッシュ０またはメモリキャッシュ１から読込む点である。例えば、図２２で、サイクル「Cyc9」〜「Cyc 11」までは、参照画像２行分のデータが必要となり、ＰＥアレイの各行ごとにどちらのデータを読込むかを指定する必要がある。
【００９３】
命令生成部（３１００等）から送られた命令が、実行するという命令であれば（ステップＳ３００：実行）、レジスタ０の指すメモリキャッシュ０（１００６）又はレジスタ１の指すメモリキャッシュ１（１００７）から、各ＰＥの参照データ記憶部２３００に参照画像を読込む（ステップＳ５０４）。
どちらのメモリキャッシュからデータを読むかは、命令生成部から渡される命令で指示されている。この命令については、図２１を用いて後で説明する。
【００９４】
次に、演算部２１００は、対象データ記憶部２２００の対象データと参照データ記憶部２３００の参照データとの差分絶対値を求め（ステップＳ３１０）、演算結果を、相関記憶部２４００の演算結果データ２４１０に記憶する（ステップＳ３２０）。その後、演算結果データと受信データ２４２０を加算して次行のＰＥに送り、データを受取った次行のＰＥは、自ＰＥ内の受信データ２４２０に記憶する。
【００９５】
一方、命令生成部（３１００等）から送られた命令が、キャンセルという命令であれば（ステップＳ３００：キャンセル）、何もしないで終了する。
図２１は、制御情報生成部３０００の処理と、命令生成部（３１００等）の処理について説明する。
まず、図２１（ａ）を用いて、制御情報生成部３０００の処理について説明する。図２１（ａ）は、実施形態３の制御情報生成部３０００の処理を示すフローチャートである。
【００９６】
本実施形態では、上述のように３種類の制御情報で、３種類の命令を生成する。
制御情報生成部３０００は、２つのカウンタを使用して制御情報であるトークンの生成を行う。
ここでは、制御情報生成部３０００でのトークンの生成について説明する。
「Counter0」と「Counter1」の２つのカウンタの値によって、トークンを生成する（ステップＳ５１０）。
【００９７】
制御情報生成部３０００では、「Counter0」＞０または、「Counter1」＞０の期間、演算実行を示す制御情報を発生する。ここでは、どちらか一方のカウンタがアクティブであるものとする。アクティブなカウンタを決定する手段は、命令発行部１００３からの信号であってもよいし、一方のカウンタがカウント完了になった時点で、自身がアクティブ状態でなくなり、他方がアクティブになるというものでもよい。ここでは、後者の方法を取っている。
【００９８】
「Counter0」と「Counter1」とが共に「０」の場合には、「Invalid」トークンを生成する（ステップＳ５１１）。
「Counter0」が「≠０」の場合には、「Valid,sel0」トークンを（ステップＳ５１２）、「Counter1」が「≠０」の場合には、「Valid,sel1」トークンを生成する（ステップＳ５１３）。尚、「Counter0」と「Counter1」とが共に「≠０」の場合は、エラーとする。
【００９９】
「sel0」とは、レジスタ０の指す先のデータを使用する旨の指示であり、「sel1」は、レジスタ１の指す先のデータを使用する旨の指示である。ＰＥは、この指示により、メモリキャッシュ０とメモリキャッシュ１のどちらからデータを読込むかを決定することになる。
トークン作成後に、「≠０」であったカウンタ、すなわちアクティブカウンタの値を１減算する（ステップＳ５２０）。
【０１００】
次に、図２１（ｂ）を用いて、命令生成部（３１００等）の処理について説明する。図２１（ｂ）は、命令生成部（３１００等）の処理を示すフローチャートである。
命令生成部（３１００等）は、実施形態１と同様、それぞれは同様の処理を行う。
まず、制御情報記憶部３１１０に記憶しているトークンを次の命令生成部に送信し（ステップＳ５５０）、前の命令生成部又は制御情報生成部からトークンを受信する（ステップＳ５６０）。
【０１０１】
受信したトークンを基に（ステップＳ５７０）、ＰＥに実行させる命令を生成する。
トークンが「Invalid」の場合は「exec_array」命令を実行しない命令を生成し（ステップＳ５７１）、「Valid,sel0」の場合は「data_sel0」を使用して「exec_array」命令を実行する命令を生成し（ステップＳ５７２）、「Valid,sel1」の場合は「data_sel1」を使用して「exec_array」命令を実行する命令を生成する（ステップＳ５７３）。
【０１０２】
生成した演算命令は、各ＰＥに送られ（ステップＳ５７５）、トークンは制御情報記憶部３１１０に記憶する（ステップＳ５８０）。
以下に、制御情報生成部３０００が作成したトークンとＰＥの実行の関係について説明する。
図２２は、トークンとＰＥの動作を時間軸上にあらわした図である。
【０１０３】
「Counter0」＞０の場合に発行されたトークンは「Valid,sel0」であり、「Counter1」＞０の場合に発行されたトークンは「Valid,sel1」である。
従って、例えば、サイクル「Cyc 10」では、１行目と２行目のＰＥは、「Valid,sel1」トークンで生成された命令を実行し、４行目と５行目のＰＥは、「Valid,sel0」トークンで生成された命令を実行する。尚、３行目のＰＥは実行を行なわず、各ＰＥの相関記憶部２４００がクリアされる。順次、ＰＥがキャンセルされることで（７１００）、参照画像の列の区切りとなる。
【０１０４】
次に、図２３は、実施形態３のプログラムの例を示す図である。
プログラム命令リスト７３００には、プログラム命令７３０１ごとの動作７３０２について記載している。また、制御情報（トークン）の値に応じての動作を示している。
例えば、トークン「Invalid」７３０３の場合は、「exec_array」は「nop」、すなわち実行は行なわず、「Valid,sel0」７３０４の場合は「data_sel0を使用して実行」することを示し、「Valid,sel1」７３０５の場合は「data_sel1を使用して実行」することを示している。
【０１０５】
「ldp[addr],r0,r1」７４００は、レジスタ０及びレジスタ１に、参照画像行のアドレスをロードする指示である。
具体的には、レジスタ０に[addr]が示すアドレスをロードし、レジスタ１には[addr］＋offset  が示すアドレスを同時にロードする。このoffsetは、ある行データのアドレスとの差分値であり、予め与えられているものであっても、適時生成するものであってもよい。予め与えられている例として、参照画像において、ある列の最後の行データと、次列の最初の行データとのアドレスの差がある。
【０１０６】
また、「exec_array r0 r1」７４０１は、レジスタ０及びレジスタ１の指す先の参照画像２行分を用いて演算を行なう指示である。
＜実施形態４＞
＜概要＞
本実施形態は、対象画像２００の全てのピクセルを用いて参照画像との相関を求めるのではなく、一定の間引きをして評価を行うものである。
【０１０７】
この方法は、演算量を削減するために有効であり、電力が有限であるバッテリ駆動のモバイル機器などにおいて特に有効である。
ピクセルを間引く際の有効な間引き方として、市松模様に間引く手法が知られている。
本実施形態では、対象画像を市松模様に間引いて、すなわち、格子状に1つおきのピクセルを用いて相関を求める。
【０１０８】
図２４は、実施形態４の対象画像及びＰＥアレイに供給する参照画像の例を示す図である。
本実施形態では、対象画像８２００と対象画像８２１０との2つを、ＰＥアレイ１１００上に配置、すなわち、ＰＥの対象データ記憶部２２００に記憶する。この対象画像８２００と対象画像８２１０は、同じものである。
【０１０９】
２つの対象画像（８２００、８２１０）のうち、演算対象のピクセルのデータのみを配置して、ＰＥアレイ１１００上に対象画像（８２０１、８０１１）を作成する。
市松模様型に間引くことによって、２つの横６画素、縦５画素を同時にマッピングすることができる。
一方、参照画像１００の方は、２行分（８０１０、８０２０）を、それぞれ奇数番目と偶数番目の参照データをまとめて、２つの参照画像（８０１１、８０２１）を作成する。
【０１１０】
すなわち、参照画像を供給する場合に、７画素からなる１行を、６画素からなる1行８０１０と、１画素ずれた６画素からなる１行８０２０として供給する。これにより、同時に２位置の水平方向位置を探索することができるようになる。
参照データ８０１０からは２段の参照データ８０１１が、参照データ８０２０からは２段の参照データ８０２１が作成され、それぞれ合わせて、奇数番目の参照データ８１００と偶数番目の参照データ８１０１を作成する。
【０１１１】
ここで作成したようなＰＥアレイ１１００上の対象画像（８２０１、８０１１）と参照データ（８０１１、８０２１）とで演算を行なう。
従って、参照データ２つ分を一度に演算するので、簡易な制御回路によって、処理時間および消費電力を大幅に削減できることになる。
尚、本実施形態のアレイ型演算装置１０００の構成は、実施形態３のものと同じである（図１７参照）。
【０１１２】
＜動作＞
次に、図２５〜図２８を用いて、本実施形態のアレイ型演算装置１０００の処理について説明する。基本的な処理の流れは実施形態１（図９〜図１１）と同じであるので、相違点を中心に説明する。
図２５は、アレイ型演算装置１０００で対象画像２００と参照画像１００との相関を求める処理を示すフローチャートである。この処理において、実施形態１での処理（図９参照）と異なる点は、ＰＥにセットする対象データが間引いたものである点と、参照データ２行分を奇数番目と偶数番目とに分けてメモリキャッシュ０とメモリキャッシュ１との２つにセットする点である。
【０１１３】
参照データを２行分使用する点で実施形態３と共通する。しかし、実施形態３では２行分のデータを同時に使用する期間があるために、１行目を使用している途中で２行目を別のメモリキャッシュにセットするが、実施形態４では２つのメモリキャッシュのデータは同じ期間で使用するため、同時にセットする点が異なる。また、実施形態４では、メモリキャッシュのデータを交互に使用する。
【０１１４】
最初に、対象画像２００から、各ＰＥの対象データ記憶部２２００にそれぞれの対象データを読込む（ステップＳ６０１）。
例えば、対象画像２００を市松模様状に間引いた対象画像である図２４の対象画像（８２０１、８０１１）をセットする。
制御情報生成部３０００のカウンタ記憶部３０１０に値をセットする（ステップＳ１１０）。例えば、「Counter」に「８」をセットする。
【０１１５】
次に、参照画像１００のうち、アレイ型演算装置１０００に供給する２行分データのアドレスをレジスタ０及びレジスタ１にロードする（ステップＳ６０２）。
例えば、図２４の参照データ８１００のアドレスをレジスタ０に、参照データ８１０１のアドレスをレジスタ１にロードする。
その後、「exec_array」の実行を行い（ステップＳ１３０）、演算結果を出力する（ステップＳ１４０）。  参照画像１００の最終行まで演算処理を繰り返す（ステップＳ１２０からステップＳ１５０）。
【０１１６】
参照画像１００の最終列まで演算したら（ステップＳ１６０）処理を終了する。
図２６は、「exec_array」の処理を示すフローチャートであり、処理内容は、実施形態１とほぼ同じである（図１０参照）が、ＰＥの処理（ステップＳ６０３）が異なる。
図２７を用いて、ＰＥの処理について説明する。図２７は、ＰＥの処理を示すフローチャートである。
【０１１７】
この処理は、実施形態１での処理（図１１参照）と異なる点は、各ＰＥの参照データ記憶部２３００に参照データを読込む場合に、メモリキャッシュ０とメモリキャッシュ１とから交互に読込む点である。
例えば、図２９で、ＰＥアレイ１１００の１行目のＰＥには、「T01」「T20」「T40」〜の対象データがセットされているので、「R0y」「R2y」「R4y」〜の参照データと演算し、ＰＥアレイ１１００の２行目のＰＥには、「T11」「T31」「T51」〜の対象データがセットされているので、「R1y」「R3y」「R5y」〜の参照データと演算をする必要があるからである。
【０１１８】
命令生成部（３１００等）から送られた命令が、実行するという命令であれば（ステップＳ３００：実行）、レジスタ０の指すメモリキャッシュ０（１００６）又はレジスタ１の指すメモリキャッシュ１（１００７）から、各ＰＥの参照データ記憶部２３００に参照データを読込む（ステップＳ６０４）。
どちらのメモリキャッシュからデータを読むかは、命令生成部から渡される命令で指示されている。この命令については、図２８を用いて後で説明する。
【０１１９】
次に、演算部２１００は、対象データ記憶部２２００の対象データと参照データ記憶部２３００の参照データとの差分絶対値を求め（ステップＳ３１０）、演算結果を、相関記憶部２４００の演算結果データ２４１０に記憶する（ステップＳ３２０）。その後、演算結果データと受信データ２４２０を加算して次行のＰＥに送り、データを受取った次行のＰＥは、自ＰＥ内の受信データ２４２０に記憶する。
【０１２０】
一方、命令生成部（３１００等）から送られた命令が、キャンセルという命令であれば（ステップＳ３００：キャンセル）、何もしないで終了する。
図２８は、制御情報生成部３０００の処理と、命令生成部（３１００等）の処理について説明する。
まず、図２８（ａ）を用いて、制御情報生成部３０００の処理について説明する。図２８（ａ）は、実施形態４の制御情報生成部３０００の処理を示すフローチャートである。
【０１２１】
ここでは、制御情報生成部３０００でのトークンの生成について説明する。
カウンタ「Counter」の値によって、トークンを生成する（ステップＳ６１０）。
制御情報生成部３０００では、「Counter」が「==0」の場合には、「Invalid」トークンを生成し（ステップＳ６１１）、「Counter」が「≠0」の場合には、「Valid,sel0」トークンを生成する（ステップＳ６１２）。
【０１２２】
「sel0」とは、レジスタ０の指す先のデータを使用する旨の指示である。
トークン作成後に、「Counter」の値を１減算する（ステップＳ６２０）。
次に、図２８（ｂ）を用いて、命令生成部（３１００等）の処理について説明する。図２８（ｂ）は、命令生成部（３１００等）の処理を示すフローチャートである。
命令生成部（３１００等）は、実施形態１と同様、それぞれは同様の処理を行う。
【０１２３】
まず、制御情報記憶部３１１０に記憶しているトークンを次の命令生成部に送信し（ステップＳ６５０）、前の命令生成部又は制御情報生成部からトークンを受信する（ステップＳ６６０）。
受信したトークンを基に、ＰＥに実行させる命令を生成する。
トークンが「Invalid」の場合（ステップＳ６７０）は「exec_array」命令を実行しない命令を生成し（ステップＳ６７１）、「Valid,sel0」の場合は「data_sel0」を使用して「exec_array」命令を実行する命令を生成し（ステップＳ６７２）、「Valid,sel1」の場合は「data_sel1」を使用して「exec_array」命令を実行する命令を生成する（ステップＳ６７３）。
【０１２４】
その後、トークンを反転させて、「sel0」であった場合には「sel1」に、「sel1」であった場合には「sel0」にする（ステップＳ６８０）。すなわち、次の行のＰＥで読むメモリキャッシュを換えるためである。
生成した演算命令は、各ＰＥに送られ（ステップＳ６８５）、トークンは制御情報記憶部３１１０に記憶する（ステップＳ６９０）。
【０１２５】
以下に、制御情報生成部３０００が作成したトークンとＰＥの実行の関係について説明する。
図２９は、トークンとＰＥの動作を時間軸上にあらわした図である。
制御情報生成部３０００で発行されるValidトークンは、「Valid,sel0」であるが、ＰＥアレイの各行のＰＥでは、「Valid,sel0」と「Valid,sel1」とのどちらかを基に生成された命令が渡ることになる。
【０１２６】
従って、例えば、サイクル「Cyc 0」では、ＰＥアレイ１行目のトークンは「Valid,sel0」である。サイクル「Cyc 0」では、２行目のトークンは1行目のトークンを反転した「Valid,sel1」で、１行目のトークンは「Valid,sel0」である。
すなわち、1行目のＰＥと3行目のＰＥと5行目のＰＥには「Valid,sel0」、2行目のＰＥと4行目のＰＥには「Valid,sel1」トークンで生成された命令を実行する。
【０１２７】
次に、図３０は、実施形態４のプログラムの例を示す図である。
プログラム命令リスト８６００には、プログラム命令８６０１ごとの動作８６０２について記載している。また、制御情報（トークン）の値に応じての動作を示している。
例えば、トークン「Invalid」８６０３の場合は、「exec_array」は「nop」、すなわち実行は行なわず、「Valid,sel0」８６０４の場合は「data_sel0を使用して実行」することを示し、「Valid,sel1」８６０５の場合は「data_sel1を使用して実行」することを示している。
【０１２８】
「ld[addr],r0,r1」８７００は、レジスタ０とレジスタ１に、次の参照画像のアドレスをロードする指示である。具体的には、レジスタ０に[addr]が示すアドレスをロードし、レジスタ１には[addr］＋offset  が示すアドレスを同時にロードする。例えば、図２４の参照データ８１００と参照データ８１０１が連続してメモリに存在する場合に、[addr]は参照データ８１００のアドレスであり、offsetは、参照データ８１００の長さとなる。
【０１２９】
また、「exec_array r0 r1」８７０１は、レジスタ０又はレジスタ１の指す先の参照データを用いて演算を行なう指示である。
「exec_array r0 r1」８７０１と「exec_array r0 r1」８７０２は、命令は同じであるが、どちらのレジスタを使用するかは、トークンによる。
＜補足＞
以上、本発明に係るアレイ型演算装置について実施形態に基づいて説明したが、この実行装置を部分的に変形することもでき、本発明は上述の実施形態に限られないことは勿論である。即ち、
（１）実施形態では、ＰＥアレイの各ＰＥは、行方向に隣接され、行単位に命令生成部を設けて動作させることとしているが、行方向だけでなく、列方向、斜めを含め隣接する各ＰＥを接続して命令生成部を設けてもよい。
【０１３０】
この構成においては、トークンを元に生成される命令は、ＰＥアレイの任意のＰＥに送ることができる。その場合、レジスタ設定やトークンにより各ＰＥが使用するデータの入力先を動的に変更したり、また、命令を実行するＰＥを定める、すなわち、命令の適用範囲を定めることにより、より柔軟な実行が可能となる。  
（２）実施形態では、ＰＥアレイはハードウェアで実現しているが、動的に再構成可能なハードウェアを用いて実現してもよい。ここで動的に再構成可能なハードウェアとは、ハードウェアの各ロジックを接続するプログラム可能な配線に、  構成情報を与えることで，ハードウェアの論理構造を動的に変更可能なものとする。
（３）実施形態４では、参照データの変換は、トークンを反転させることで行っているが、固定的に、変換回路が偶数位置か奇数位置かを示す情報を持ってもよい。すなわち、ＰＥアレイの行ごとに読込むレジスタを固定しておく。
【産業上の利用可能性】
【０１３１】
本発明にかかるアレイ型演算装置は、簡易な装置で柔軟かつ高性能な処理を実現することが可能であるため、画像処理ＬＳＩの演算器等として特に有用である。
【図面の簡単な説明】
【０１３２】
【図１】動きベクトル探索処理の探索方法を示す図である。
【図２】図２（ａ）は、参照画像１００の構成を表し、図２（ｂ）は、対象画像２００の構成を表す図である。
【図３】従来のアレイプロセッサの例を示す図である。
【図４】アレイ型演算装置１０００と関連する周辺部の構成を表す図である。
【図５】アレイ型演算装置１０００の構成の詳細を表す図である。
【図６】参照画像１００をＰＥアレイ１１００へ供給する方法を示す図である。
【図７】制御情報（トークン）を命令生成部（３１００等）に供給する方法を示す図である。
【図８】各ＰＥの相関記憶部２４００に記憶されている内容の遷移を示す図である。
【図９】実施形態１のアレイ型演算装置１０００で対象画像２００と参照画像１００との相関を求める処理を示すフローチャートである。
【図１０】実施形態１の「exec_array」の処理を示すフローチャートである。
【図１１】実施形態１のＰＥの処理を示すフローチャートである。
【図１２】図１２（ａ）は、実施形態１の制御情報生成部の処理を示すフローチャートであり、図１２（ｂ）は、実施形態１の命令生成部の処理を示すフローチャートである。
【図１３】実施形態１のトークンとＰＥの動作を時間軸上にあらわした図である。
【図１４】実施形態１のプログラムの例を示す図である。
【図１５】実施形態２のトークンとＰＥの動作を時間軸上にあらわした図である。
【図１６】実施形態２のプログラムの例を示す図である。
【図１７】実施形態３のアレイ型演算装置１０００の構成の詳細を表す図である。
【図１８】実施形態３のアレイ型演算装置１０００で対象画像２００と参照画像１００との相関を求める処理を示すフローチャートである。
【図１９】実施形態３の「exec_array」の処理を示すフローチャートである。
【図２０】実施形態３のＰＥの処理を示すフローチャートである。
【図２１】図２１（ａ）は、実施形態３の制御情報生成部３０００の処理を示すフローチャートであり、図２１（ｂ）は、実施形態３の命令生成部（３１００等）の処理を示すフローチャートである。
【図２２】実施形態３のトークンとＰＥの動作を時間軸上にあらわした図である。
【図２３】実施形態３のプログラムの例を示す図である。
【図２４】実施形態４の対象画像及びＰＥアレイに供給する参照画像の例を示す図である。
【図２５】実施形態４のアレイ型演算装置１０００で対象画像２００と参照画像１００との相関を求める処理を示すフローチャートである。
【図２６】実施形態４の「exec_array」の処理を示すフローチャートである。
【図２７】実施形態４のＰＥの処理を示すフローチャートである。
【図２８】図２８（ａ）は、実施形態４の制御情報生成部３０００の処理を示すフローチャートであり、図２８（ｂ）は、実施形態４の命令生成部（３１００等）の処理を示すフローチャートである。
【図２９】実施形態４のトークンとＰＥの動作を時間軸上にあらわした図である。
【図３０】実施形態４のプログラムの例を示す図である。
【符号の説明】
【０１３３】
１００    参照画像
２００    対象画像
１０００    アレイ型演算装置
１００１    プログラムカウンタ
１００２    命令メモリ
１００３    命令発行部
１００４    プログラム記憶部
１００５    メモリキャッシュ
１００６    メモリキャッシュ０
１００７    メモリキャッシュ１
１００９    バス
１１００    ＰＥアレイ
１２００    加算部
２０００    ＰＥ
２１００    演算部
２２００    対象データ記憶部
２３００    参照データ記憶部
２４００    相関記憶部
２４１０    演算結果データ
２４２０    受信データ
３０００    制御情報生成部
３０１０    カウンタ記憶部
３１１０、３２１０、３３１０    制御情報記憶部
５２０１、５２１１、６１００    演算結果
５３００、７３００、８６００    プログラム命令リスト
【図１】
0004213750.tif 000002
【図２】
0004213750.tif 000003
【図３】
0004213750.tif 000004
【図４】
0004213750.tif 000005
【図５】
0004213750.tif 000006
【図６】
0004213750.tif 000007
【図７】
0004213750.tif 000008
【図８】
0004213750.tif 000009
【図９】
0004213750.tif 000010
【図１０】
0004213750.tif 000011
【図１１】
0004213750.tif 000012
【図１２】
0004213750.tif 000013
【図１３】
0004213750.tif 000014
【図１４】
0004213750.tif 000015
【図１５】
0004213750.tif 000016
【図１６】
0004213750.tif 000017
【図１７】
0004213750.tif 000018
【図１８】
0004213750.tif 000019
【図１９】
0004213750.tif 000020
【図２０】
0004213750.tif 000021
【図２１】
0004213750.tif 000022
【図２２】
0004213750.tif 000023
【図２３】
0004213750.tif 000024
【図２４】
0004213750.tif 000025
【図２５】
0004213750.tif 000026
【図２６】
0004213750.tif 000027
【図２７】
0004213750.tif 000028
【図２８】
0004213750.tif 000029
【図２９】
0004213750.tif 000030
【図３０】
0004213750.tif 000031