(57)【特許請求の範囲】
【請求項１】
記憶部と、
前記少なくとも１つの記憶部のうちいずれか所定の１つの記憶部へのデータの読み出し及び／または書き込みを制御する入出力データ制御部（ＳＣＵ）と、
前記入出力データ処理部が読み出したデータに対して所定の信号処理を行う信号処理部（ＰＵアレイ或いはＰＵ＿ＳＩＭＤ）と、
を有する信号処理装置であって、
前記入出力データ制御部と、前記信号処理部とは別のスレッドに基づいて動作する
信号処理装置。
【請求項２】
前記信号処理部は、ＳＩＭＤ（Single Instruction Multiple Data）方式の信号処理回路（ＰＵ）を複数有し、
前記複数の信号処理回路は互いに直列に接続されており、
前記複数の信号処理回路の１は、前記入出力データ制御部が前記記憶部から読み出し前記信号処理部に入力したデータを基に前記所定の処理を行うとともに、隣接する他の信号処理回路との間でデータのやり取りを行う
請求項１に記載の信号処理装置。
【請求項３】
前記入出力データ制御部は、前記複数の信号処理回路のうち任意の少なくとも１つの信号処理回路を、直列或いは並列のいずれか一方で選択的に接続可能である
請求項２に記載の信号処理装置。
【請求項４】
前記信号処理部を所定数有する信号処理装置であって、
前記信号処理部と同数の前記入出力データ処理部を有する
請求項２に記載の信号処理装置。
【請求項５】
前記入出力データ制御部は、内蔵メモリを有し、
前記入出力データ制御部は、前記複数の信号処理回路のうち１の処理回路が他の処理回路の結果を用いる場合に、前記他の処理回路の処理の結果を前記内蔵メモリに書き込み、当該内蔵メモリから当該結果を前記処理回路に読み出す
請求項２に記載の信号処理装置。
【請求項６】
前記複数の信号処理回路は、それぞれ所定の数の信号処理エレメント（ＰＥ）を有し、
前記所定の数の信号処理エレメントは互いに直列に接続されており、
前記複数の信号処理エレメントの１は、前記入出力データ制御部が前記記憶部から読み出し前記信号処理部に入力したデータを基に前記所定の処理を行うとともに、隣接する他の信号処理回路との間でデータのやり取りを行う
請求項２に記載の信号処理装置。
【請求項７】
前記データは画像データであり、
前記複数の信号処理回路は、画像データを処理する回路であり、
前記入出力データ制御部は、前記記憶部内に階層的に矩形の画像データ記憶領域を規定し、
前記矩形の画像データ記憶領域内のアドレスを当該矩形の画像データ記憶領域にローカルな２次元アドレスで管理し、
前記記憶領域内における前記矩形の画像データ記憶領域の位置を示す基準アドレスと前記２次元アドレスとを基に、１次元アドレスを生成し、
前記１次元アドレスを基に前記記憶部に記憶された画像データにアクセスする
請求項２に記載の信号処理装置。
【請求項８】
前記データは画像データであり、
前記複数の信号処理回路は、画像データを処理する回路であり、
前記入出力データ制御部は、
前記記憶部から画像データを読み出して前記信号処理部に出力できる形式に変換し、及び／または前記信号処理部から入力された画像データを前記記憶部に記憶できる形式に変換する変換部（制御部）と、
前記記憶手段から読み出され前記変換部が変換した画像データを、前記信号処理部に出力する前に一時保持する第１のバッファと、
前記信号処理部から入力され前記変換部が変換した画像データを、前記記憶部に書き込まれるまで一時保持する第２のバッファと、
を有する
請求項１に記載の信号処理装置。
【請求項９】
前記データは画像データであり、
前記複数の信号処理回路は、画像データを処理する回路であり、
前記入出力データ制御部は、前記記憶部から読み出した画像データを構成する複数の部分画像データを対応する前記複数の信号処理エレメントに出力する
請求項６に記載の信号処理装置。
【請求項１０】
前記入出力データ制御部は、
前記矩形の画像データ記憶領域内のあらかじめ決められた複数の基準アドレスの中から選択した基準アドレスを前記複数の処理回路に出力する
請求項７に記載の信号処理装置。
【請求項１１】
前記入出力データ制御部は、
前記記憶部から前記基準アドレスを読み出し、
当該読み出した基準アドレスを基に、前記矩形の画像データ記憶領域へのアクセスを管理する
請求項７に記載の信号処理装置。
【請求項１２】
前記入出力データ制御部は、前記複数の信号処理回路の各々に対応して前記第１及び第２のバッファをそれぞれ有し、
任意の前記信号処理回路に対応付けられた前記第２のバッファから当該任意の信号処理回路が出力したデータを読み出して、他の信号処理回路に対応付けられた前記第１のバッファに書き込む
請求項８に記載の信号処理装置。
【請求項１３】
前記入出力データ制御部は、前記複数の信号処理回路における共通の第１のスレッドの実行開始を指示する
請求項１に記載の信号処理装置。
【請求項１４】
前記信号処理エレメントは、
算術演算および／または論理演算を行う演算論理回路と、
当該信号処理エレメントが直列に接続された他の２つの前記信号処理エレメントと前記入出力データ制御部とから入力したデータを記憶する第１のレジスタと、
前記第１のレジスタから読み出され、前記他の２つの信号処理エレメント、前記演算論理回路および前記入出力データ制御部の何れかに選択的に出力されるデータを記憶する第２のレジスタと
を有する、
請求項１３に記載の信号処理装置。
【請求項１５】
前記第１のレジスタは、ポインタアクセス型のレジスタである
請求項１４に記載の信号処理装置。
【請求項１６】
前記演算論理回路における演算処理と、前記第１のレジスタおよび前記第２のレジスタに対するロードおよびストア処理は並列に実行可能である
請求項１５に記載の信号処理装置。
【請求項１７】
複数の前記第１のレジスタのうち少なくとも一つの前記第１のレジスタは、前記演算手段による前記演算処理を制御する制御フラグを設定するためのレジスタである
請求項１６に記載の信号処理装置。
【請求項１８】
ホスト処理回路と、
記憶部と、
前記少なくとも１つの記憶部のうちいずれか所定の１つの記憶部へのデータの読み出し及び／または書き込みを制御する入出力データ制御部（ＳＣＵ）と、
前記入出力データ処理部が読み出したデータに対して所定の信号処理を行う信号処理部（ＰＵアレイ或いはＰＵ＿ＳＩＭＤ）と、
を有する信号処理装置であって、
前記信号処理部は、前記ホスト処理回路あるいは前記入出力データ制御部の制御により、共通の第１のスレッドに基づいて動作し、
前記入出力データ制御部は、前記ホスト処理回路の制御により、前記第１のスレッドとは別の第２のスレッドに基づいて動作する
信号処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、信号処理装置に関する。
本発明は、特に、画像処理に好適な、信号処理装置に関する。
【背景技術】
【０００２】
たとえば、特開平０６−４６９０号公報は、CCD(Charge Coupled Device)やCMOS（Complementary Metal Oxide Semiconductor ）等の撮像素子から入力した動画あるいは静止画の撮像情報を処理し、表示あるいは記録を行うための画像処理装置を開示している。
この画像処理装置は、例えば、撮像情報を構成する画素データを並列に演算処理することで、処理時間の短縮を図っている。
また、この画像処理装置では、メモリに対する画素データの読み出しおよび書き込み処理（メモリアクセス）と、画素データを用いた演算処理とを同じスレッドに基づいて同期して行っている。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
画像処理装置の処理能力をさらに向上したいという要請がある。
同様な要請は画像処理以外の処理においてもある。【０００４】
本発明の目的は、記憶手段へのアクセスを向上させて信号処理能力を向上させる信号処理装置を提供することにある。
【課題を解決するための手段】
【０００５】
本発明によれば、記憶部と、前記少なくとも１つの記憶部のうちいずれか所定の１つの記憶部へのデータの読み出し及び／または書き込みを制御する入出力データ制御部（ＳＣＵ）と、前記入出力データ処理部が読み出したデータに対して所定の信号処理を行う信号処理部（ＰＵアレイ或いはＰＵ＿ＳＩＭＤ）と、を有する信号処理装置であって、前記入出力データ制御部と、前記信号処理部とは別のスレッドに基づいて動作する信号処理装置が提供される。
【発明の効果】
【０００６】
本発明によれば、記憶手段へのアクセスを伴う処理において、異なるスレッドを用いることにより、画像処理能力をさらに高めることができる信号処理装置が提供できた。
【図面の簡単な説明】
【０００７】
【図１】図１は本発明の信号処理装置の実施形態に係わる画像処理装置の全体構成図である。
【図２】図２は図１に示す画像処理エンジンの構成図である。
【図３】図３は図２に示すプロセッサユニット（ＰＵ）アレイの構成図である。
【図４】図４は図３に示すＰＵの構成図である。
【図５】図５はＰＵアレイに割り当てる画像領域を説明するための図である。
【図６】図６は複数のプロセッサエレメント（ＰＥ）に処理を割り当てる画素データを説明するための図である。
【図７】図７はフィルタ処理における複数のＰＥの割り当てを説明するための第１部分図である。
【図８】図８はフィルタ処理における複数のＰＥの割り当てを説明するための第２分図である。
【図９】図９はフィルタ処理における複数のＰＥの割り当てを説明するための第３部分図である。
【図１０】図１０はフィルタ処理における複数のＰＥの割り当てを説明するための第４部分図である。
【図１１】図１１は図４に示すＰＥの構成図である。
【図１２】図１２は複数のＰＥにおいて行うフィルタ処理を説明するための第１部分図である。
【図１３】図１３は複数のＰＥにおいて行うフィルタ処理を説明するための第２部分図である。
【図１４】図１４は図１３に示すフィルタ処理における各ＰＥのストリームレジスタの動作を説明するための第１部分図である。
【図１５】図１５は図１３に示すフィルタ処理における各ＰＥのストリームレジスタの動作を説明するための第２部分図である。
【図１６】図１６は図１３に示すフィルタ処理における各ＰＥのストリームレジスタの動作を説明するための第３部分図である。
【図１７】図１７は図１３に示すフィルタ処理における各ＰＥのストリームレジスタの動作を説明するための第４部分図である。
【図１８】図１８は図１３に示すフィルタ処理における各ＰＥのストリームレジスタの動作を説明するための第５部分図である。
【図１９】図１９は図１３に示すフィルタ処理における各ＰＥのストリームレジスタの動作を説明するための第６部分図である。
【図２０】図２０は図１３に示すフィルタ処理における各ＰＥのストリームレジスタの動作を説明するための第７部分図である。
【図２１】図２１は図１３に示すフィルタ処理における各ＰＥのストリームレジスタの動作を説明するための第８部分図である。
【図２２】図２２は図１３に示すフィルタ処理における各ＰＥのストリームレジスタの動作を説明するための第９部分図である。
【図２３】図２３は図１３に示すフィルタ処理における各ＰＥのストリームレジスタの動作を説明するための第１０部分図である。
【図２４】図２４は図１３に示すフィルタ処理における各ＰＥのストリームレジスタの動作を説明するための第１１部分図である。
【図２５】図２５はＰＵ内の共有機能ユニットを説明するための図である。
【図２６】図２６は図３等に示すストリーム制御ユニット（ＳＣＵ： Stream Control Unit)による記憶領域の管理方法を説明するための第１部分図である。
【図２７】図２７は図３等に示すＳＣＵによる記憶領域の管理方法を説明するための第２部分図である。
【図２８】図２８は図３等に示すＳＣＵによる記憶領域の管理方法を説明するための第３部分図である。
【図２９】図２９は図３等に示すＳＣＵによる記憶領域の管理方法を説明するための第４部分図である。
【図３０】図３０は図３等に示すＳＣＵによる記憶領域の管理方法を説明するための第５部分図である。
【図３１】図３１は図３等に示すＳＣＵによる記憶領域の管理方法を説明するための第６部分図である。
【図３２】図３２は図３等に示すＳＣＵによる記憶領域の管理方法を説明するための第７部分図である。
【図３３】図３３は図３等に示すＳＣＵによる記憶領域の管理方法を説明するための第８部分図である。
【図３４】図３４は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿ＢＲ＿ｌｏｆ４ｘ４＿ｓａｍ」の実行処理を説明するための図である。
【図３５】図３５は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿ｂｘｙ」の実行処理を説明するための図である。
【図３６】図３６は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿ＢＲ＿8x1#to#bxy」の実行処理を説明するための図である。
【図３７】図３７は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿ＢＲ4567#lof4x4」の実行処理を説明するための図である。
【図３８】図３８は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿in#buf#straight」の実行処理を説明するための図である。
【図３９】図３９は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿in#buf#with#BR#2x1」の実行処理を説明するための図である。
【図４０】図４０は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿in#buf#with#BR#4x1」の実行処理を説明するための図である。
【図４１】図４１は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿BR#16x1」の実行処理を説明するための図である。
【図４２】図４２は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿BR#32x1」の実行処理を説明するための図である。
【図４３】図４３は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿BR#64x1」の実行処理を説明するための図である。
【図４４】図４４は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿BR#64x2」の実行処理を説明するための図である。
【図４５】図４５は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿BR#64x2x2」の実行処理を説明するための図である。
【図４６】図４６は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿BR#64x3」の実行処理を説明するための図である。
【図４７】図４７は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿BR#64x3x3」の実行処理を説明するための図である。
【図４８】図４８は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿BR#64x4」の実行処理を説明するための図である。
【図４９】図４９は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿BR#64x4x4」の実行処理を説明するための図である。
【図５０】図５０は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿BR#64x9」の実行処理を説明するための図である。
【図５１】図５１は図３等に示すＳＣＵによるコマンド「ｓｅｔ＿BR#64x9x3」の実行処理を説明するための図である。
【図５２】図５２は図３等に示すＳＣＵによる記憶領域の管理方法を説明するための図である。
【図５３】図５３は図３等に示すＳＣＵによる記憶領域の管理方法を説明するための図である。
【図５４】図５４は図３等に示すＳＣＵによる記憶領域の管理方法を説明するための図である。
【図５５】図５５は図３等に示すＳＣＵによるコマンド「set#DR#mask#64x1」の実行処理を説明するための図である。
【図５６】図５６は図３等に示すＳＣＵによるコマンド「set#DR#packed#64x1」の実行処理を説明するための図である。
【図５７】図５７は図３等に示すＳＣＵによるコマンド「set#DR#64x1」の実行処理を説明するための図である。
【図５８】図５８は図３等に示すＳＣＵによるコマンド「set#DR#128x1」の実行処理を説明するための図である。
【図５９】図５９は図３等に示すＳＣＵによるコマンド「set#DR#192x1」の実行処理を説明するための図である。
【図６０】図６０は図３等に示すＳＣＵによるコマンド「set#DR#256x1」の実行処理を説明するための図である。
【図６１】図６１はＳＣＵが実行するコマンド「ｅｘｅｃ」を説明するための図である。
【図６２】図６２はＳＣＵが実行するコマンド「Ｂｒａｎｃｈ」を説明するための図である。
【図６３】図６３はＳＣＵが実行するコマンド「ｓｅｔ」を説明するための図である。
【図６４】図６４はＳＣＵが実行するコマンド「ａｄｄｉｔｉｏｎ」を説明するための図である。
【図６５】図６５はＳＣＵが実行する特殊コマンド、並びにパラメータを説明するための図である。
【図６６】図６６はＳＣＵと、プロセッサユニットとの処理の関係を説明するための図である。
【図６７】図６７はＳＣＵにおけるコマンドおよびデータのキュー処理を説明するための図である。
【図６８】図６８は図２に示す画像処理エンジンのその他の構成図である。
【図６９】図６９は、第２実施形態の画像処理エンジン１０２の全体構成図である。
【図７０】図７０は、図６９に示すＰＵアレイ２０２＿０の構成図である。
【図７１】図７１は、第２実施形態におけるＰＥｎの構成図である。
【図７２】図７２は、ＳＣＵ＃１０の構造を示すブロック図である。
【図７３】図７３は、第２実施形態において、ストリーム制御ユニット（ＳＣＵ： Stream Control Unit)による記憶領域の管理方法を説明するための部分図である。
【図７４】図７４は、ＳＣＵ＃１０内部に設定される多重矩形画像領域に関する処理を行う機能を説明するための図である。
【図７５】図７５は、第２実施形態における記憶領域内の矩形画像領域ＷＩＲ内の矩形画像領域ＢＲの規定方法の一例を示す図である。
【図７６】図７６は、第２実施形態における記憶領域内の矩形画像領域ＷＯＲ内の矩形画像領域ＤＲの規定方法を一例を示す図である。
【符号の説明】
【０００８】
１００…画像処理装置、１０１…ホストプロセッサ、１０２…画像処理エンジン、１０３…コーデックエンジン、１０４…メモリＩ／Ｆ、１０５…メモリシステム、１０６…センサＩ／Ｆ、１０７…カメラモジュール、１０８…記録媒体Ｉ／Ｆ、１０９…記録媒体、１１０…内蔵表示装置Ｉ／Ｆ、１１１…内蔵表示装置、１１２…ビデオＩ／Ｆ、２０１…制御プロセッサ、２０２＿０〜３…プロセッサユニット（ＰＵ）アレイ、２０３＿０〜３…ＳＣＵ、２０４＿０〜３…ローカルメモリ、ＰＵ…プロセッサユニット、４０１…入力ラインバッファ、４０３…共有機能ユニット、４０４…出力ラインバッファ、ＰＥ…プロセッサエレメント、ＳＲ０〜２…ストリームレジスタ、ＡＬＵ…演算論理ユニット
【発明を実施するための最良の形態】
【０００９】
＜第１実施形態＞
以下、本発明の信号処理装置の実施の形態について、画像データの処理を例示して述べる。
先ず、本実施形態の構成要素と、本発明の構成要素との対応関係を説明する。
図２等に示すストリーム制御ユニット（ＳＣＵ：Stream Control Unit) ２０３＿０〜３が本発明の入出力データ制御部の一例である。
図３等に示すプロセッサユニットＰＵが本発明の信号処理回路の一例である。
図４等に示すＰＥが本発明の信号処理エレメントの一例である。
図１に示すホストプロセッサ１０１が本発明のホスト処理回路の一例である。
図１等に示すメモリシステム１０５あるいは図２等に示すローカルメモリ２０４＿０〜３が本発明の記憶部の一例である。
本発明の記録媒体は、半導体メモリ、磁気ディスク、光ディスク、光磁気ディスクなどの任意の記録媒体を適用することができる。【００１０】
図１は、本発明の信号処理装置の１実施形態に係わる画像処理装置１００の全体構成図である。
画像処理装置１００は、例えば、ホストプロセッサ（Host CPU）１０１、画像処理エンジン１０２、コーデック(CODEC）エンジン１０３、メモリインターフェース（Ｉ／Ｆ）１０４、メモリシステム１０５、センサＩ／Ｆ１０６、カメラモジュール１０７、記憶媒体Ｉ／Ｆ１０８、記憶媒体１０９、内蔵表示装置Ｉ／Ｆ１１０、内蔵表示装置１１１、並びにビデオＩ／Ｆ１１２を有する。【００１１】
画像処理装置１００は、ホストプロセッサ１０１による画像処理エンジン１０２内の処理のスレッドの制御に特徴を有している。【００１２】
［ホストプロセッサ１０１］
ホストプロセッサ１０１は、画像処理装置１００全体を制御するプロセッサであって、例えば、実時間オペレーティングシステム（ＯＳ）を動作させ、画像処理装置１００で実行される各種タスクのスケジューリング、記憶媒体１０９を用いたファイルシステムの実現、データ入出力制御などを行う。【００１３】
［画像処理エンジン１０２］
画像処理エンジン１０２は、プログラマブルな画像プロセッサであって、画像処理装置１００で実行されるアプリケーションプログラムに応じてホストプロセッサ１０１が指示する画像処理を実行する。
画像処理の対象となる画像データとしては、センサＩ／Ｆ１０６を介して入力されるカメラモジュール１０７で撮影されたデータ、メモリＩ／Ｆ１０４を介して入力されるメモリシステム１０５に格納されたデータ、記憶媒体Ｉ／Ｆ１０８を介して入力される記憶媒体１０９に格納されたデータ、あるいはコーデックエンジン１０３から与えられるデータ、コーデックエンジン１０３で処理されたデータがある。
画像処理エンジン１０２は、自らの処理結果を、メモリＩ／Ｆ１０４を介してメモリシステム１０５に格納し、記憶媒体Ｉ／Ｆ１０８を介して記憶媒体１０９に格納し、コーデックエンジン１０３に出力し、内蔵表示装置Ｉ／Ｆ１１０を介して内蔵表示装置１１１に表示し、あるいはビデオＩ／Ｆ１１２を介して外部の装置に出力する。【００１４】
［コーデックエンジン１０３］
コーデックエンジン１０３は、画像および／または音声の圧縮伸長を行うユニットであり、例えばＭＰＥＧ(Motion Picture Experts Group)−２，ＭＰＥＧ−４，Ｈ．２６４などの動画像用コーデックや、ＪＰＥＧ(Joint Photographic Coding Experts Group)やＪＰＥＧ２０００といった主に静止画に用いられるコーデックなどを実現する。【００１５】
［メモリシステム１０５］
メモリシステム１０５は、ホストプロセッサ１０１、画像処理エンジン１０２、コーデックエンジン１０３で処理されるデータ、およびホストプロセッサ１０１、画像処理エンジン１０２、コーデックエンジン１０３で実行されるプログラムＰＲＧを格納するメモリであり、例えばＤＲＡＭを用いる。
メモリＩ／Ｆ１０４は、上記メモリシステム１０５とシステムバス１１３を結ぶインターフェースである。【００１６】
［カメラモジュール１０７］
カメラモジュール１０７は、レンズ、絞り、シャッターなどの光学系装置、ＣＣＤイメージセンサあるいはＣＭＯＳイメージセンサなどの撮像素子、それらを制御するコントロールユニットを含む装置である。
カメラモジュール１０７は、その撮像結果をデジタル信号に変換された後、センサＩ／Ｆ１０６を介して、画像処理エンジン１０２、または、メモリシステム１０５に出力する。
ホストプロセッサ１０１あるいは画像処理エンジン１０２は、センサＩ／Ｆ１０６を介して、カメラモジュール１０７に対して制御信号を出力する。【００１７】
［記録媒体１０９］
記憶媒体１０９は、例えばハードディスク、フラッシュメモリなどの不揮発性メモリ、ＤＶＤ(Digital Versatile Disk)などの光ディスク、あるいはテープ型の記憶媒体であって、記憶媒体Ｉ／Ｆ１０８を介して読み出し書き込みが行われる。【００１８】
［内蔵表示装置１１１］
内蔵表示装置１１１は、カメラモジュール１０７で撮像された画像を画像処理エンジン１０２で処理した結果、あるいは記憶媒体１０９に格納されている画像データを表示する。
内蔵表示装置１１１は、内蔵表示装置Ｉ／Ｆ１１０を介して入力した画像データに応じた画像を表示する。【００１９】
［ビデオインターフェース１１２］
ビデオＩ／Ｆ１１２は、外部の画像表示装置や画像記録装置に対して画像データを供給するためのインターフェースである。【００２０】
［画像処理エンジン１０２］
図２は、図１に示す画像処理エンジン１０２の構成図である。
画像処理エンジン１０２は、制御プロセッサ（ＣＰＵ）２０１、ＰＵ（プロセッサ・ユニット) アレイ２０２＿０〜２０２＿３、ストリーム制御ユニット（ＳＣＵ：Stream Control Unit) ２０３＿０〜２０３＿３、並びにローカルメモリ２０４＿０〜２０４＿３を有する。【００２１】
画像処理エンジン１０２では、ＳＣＵ２０３＿０〜３と、ＰＵアレイ２０２＿０〜２０２＿３内のＰＥとが異なるスレッドで動作する。【００２２】
制御プロセッサ２０１は、画像処理エンジン１０２全体を制御するプロセッサであって、ＰＵアレイ２０２＿０〜２０２＿３およびＳＣＵ２０３＿０〜２０３＿３に対する設定や起動、およびＳＩＭＤ(Single Instruction Multiple Data)型プロセッサアレイであるＰＵアレイ２０２での並列化が困難な処理の実行を担う。【００２３】
ＰＵアレイ２０２＿０〜２０２＿３は、プログラマブルな演算部であって、後述するように複数のSIMD型プロセッサアレイから構成される。【００２４】
ＳＣＵ２０３＿０〜２０３＿３は、ＰＵアレイ２０２＿０〜２０２＿３が必要とするデータを内部バスを介してメモリシステム１０５から読み出す場合、あるいはPUアレイ２０２＿０〜２０２＿３が処理した結果を内部バスを介してメモリシステム１０５に書き込む場合のデータ入出力を制御する。【００２５】
ローカルメモリ２０４＿０〜２０４＿３は、画像処理エンジン１０２のワーキングメモリであって、メモリシステム１０５に格納された画像データの一部の保持、それぞれＰＵアレイ２０２＿０〜２０２＿３で処理された中間結果の格納、それぞれＰＵアレイ２０２＿０〜２０２＿３で実行されるプログラムや各種パラメータの格納などを行う。【００２６】
画像処理エンジン１０２は、ホストプロセッサ１０１の制御により、例えば、図２に示すＰＵアレイ２０２＿０〜２０２＿３を共通のスレッドで動作させる。
共通のスレッドとは、例えば、共通のプログラムに基づいて処理を進めることを意味する。
ホストプロセッサ１０１の制御により、ＳＣＵ２０３＿０〜２０３＿３は、ＰＵアレイ２０２＿０〜２０２＿３とは別のスレッドで動作させる。【００２７】
［ＰＵアレイ２０２＿０〜２０２＿３］
ＰＵアレイ２０２＿０について説明する。
ＰＵアレイ２０２＿１〜２０２＿３は、ＰＵアレイ２０２＿０と同様の構成を有している。
図３は、図２に示すＰＵアレイ２０２＿０の構成図である。
ＰＵアレイ２０２＿０は、４つのＰＵ＿ＳＩＭＤ(Single Instruction Multiple Data)処理回路＃０〜＃３を有する。
ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３は、ＳＣＵ(Stream Control Unit)２０３＿０に対して並列に接続されている。
ＰＵ＿ＳＩＭＤ処理回路＃０は、コントロールユニット３０３＿０と、４つのプロセッサユニットＰＵ＃００〜＃０３を有する。
４つのプロセッサユニットＰＵ＃００〜＃０３は、同一命令で動作するSIMD型プロセッサを構成する。
４つのプロセッサユニットＰＵ＃００〜＃０３は、一次元状に横接続されている。
プロセッサユニットＰＵ＃００〜＃０３間の接続を隣接するプロセッサユニット間に限定するとともに、ＳＣＵ２０３＿０からのデータ供給に用いるＩ＿ＢＵＳ０を４つのプロセッサユニットで共有することで、配線を少なく出来るとともに、バス制御を簡単にできる。
プロセッサユニットＰＵ＃００〜＃０３は、シリアルに接続したことで、隣接画素データを頻繁に使用する画像処理において、ＳＣＵ２０３＿０を介さずに画素データを直接的に、隣接するプロセッサユニットに出力でき、処理時間を短縮できる。
ＰＵ＿ＳＩＭＤ処理回路＃１〜＃３は、ＰＵ＿ＳＩＭＤ処理回路＃０と同様の構成を有している。【００２８】
［プロセッサユニットＰＵ＃００］
図４は図３に示すプロセッサユニットＰＵ＃００の構成図である。
プロセッサユニットＰＵ＃００は、例えば、入力ラインバッファ(In Line Buffer)４０１、複数個のプロセッサエレメントＰＥ０〜１５、ＰＥ間で共有する共用機能ユニット(Shared Function Unit)４０３、出力ラインバッファ４０４を有する。【００２９】
図４に示す入力ラインバッファ４０１は、図３に示す入力データバスＩ＿ＢＵＳ０に接続されている。
出力ラインバッファ４０４は、３４に示す出力データバスＯ＿ＢＵＳ０に接続されている。【００３０】
共有機能ユニット４０３およびＰＥ０〜１５は、入力ラインバッファ４０１と出力ラインバッファ４０４との間に並列に接続されている。
ＰＥ０〜１５は、図中左右に隣接するＰＥ間で接続を有し、隣接するＰＥ間でデータの受け渡しを行うことができる。
図３および図４で示した例では、一つのプロセッサユニットＰＵあたり１６個のプロセッサエレメントＰＥを有し、一つのＰＵ＿ＳＩＭＤ処理回路あたり４個のプロセッサユニットＰＵを有するので、合計６４個のＰＥでＰＵアレイ２０２＿０〜２０２＿３の各々が構成されている。【００３１】
図３に示すように、プロセッサユニットＰＵ間は、図４におけるプロセッサエレメントＰＥ間と同様の接続を有する。
すなわち、あるプロセッサユニットＰＵにおける右端のＰＥ１５は、その右側のプロセッシングユニットにおける左端のＰＥ０と接続する。
具体的には、図３に示すプロセッサユニットＰＵ＃０１の図４に示すＰＥ１５は、図３に示すプロセッサユニットＰＵ＃０２の図４に示すＰＥ０と接続されている。【００３２】
図４に示すように、プロセッサエレメントＰＥ０〜１５が、隣接する両側のＰＥ間でのみ直接データ入出力をできるように構成したことで、配線構造を非常に簡単にできる。また、隣接するＰＥ０〜１５間で画素データを入出力して共用することで、記憶領域へのアクセス回数を低減することができる。【００３３】
ＳＣＵ(Stream Control Unit)２０３＿０から入力データバスＩ＿ＢＵＳ０を介してプロセッサユニットＰＵ＃００に入力したデータは、ＰＵ＃００内の入力ラインバッファ４０１に書き込まれる。
プロセッサエレメントＰＥ０〜１５の各々は、入力ラインバッファ４０１から読み出したデータを用いて演算を行い、その演算結果を出力ラインバッファ４０４に書き込む。
ＳＣＵ２０３＿０は、出力ラインバッファ４０４から演算結果を読み出す。【００３４】
図３に示すように、ＰＵアレイ２０２＿０は、４つのＰＵ＿ＳＩＭＤ処理回路＃０〜＃３を独立して並列に動作させることも、直列動作させることもできる。当該動作制御は、ＳＣＵ２０３＿０が、入力データバスＩ＿ＢＵＳ０〜３および出力データバスＯ＿ＢＵＳ０〜３を切り換えることで実現される。【００３５】
図３に示すコントロールユニット３０３＿０は、図示されない命令格納用メモリを有し、当該命令格納用メモリから読み出した命令をデコードして得た制御信号を、ＰＵ＿ＳＩＭＤ＃０内の全てのＰＥに出力する。
コントロールユニット３０３＿０内には、ここには図示されないプログラムフロー制御用ループレジスタや、後述するＰＥ内のストリームレジスタにアクセスするためのポインタレジスタが含まれる。
ループレジスタは、プログラム中のループ回数を制御するレジスタであり、制御プロセッサ２０１が設定するか、あるいはプログラム実行時に命令により設定することができる。
命令によりループレジスタを設定する場合に、ＰＥ内のレジスタ値をソースオペランドとして指定することができる。その際には複数のＰＥのうち、予め決められたＰＥ、例えば図中左端のＰＥ、例えば、プロセッサユニットＰＵ＃００のＰＥ０、のレジスタ値を使用する。
ポインタレジスタについても、ＰＥ内のレジスタ値をソースオペランドとして指定することができるが、ループレジスタの場合と同様特定のＰＥのレジスタ値を使用する。
コントロールユニット３０３＿１から３０３＿３についても同様である。【００３６】
カメラモジュール１０７を用いて撮像された静止画像を記録する場合を例に取り上げ、画像処理装置１００における処理手順ならびに処理分配を説明する。【００３７】
カメラモジュール１０７内の撮像素子で撮影されたデータは、水平スキャンラインごとにセンサＩ／Ｆ１０６を介して読み出され、画像処理エンジン１０２に出力されると共に、メモリシステム１０５に格納される。この際、画像処理エンジン１０２では、検波処理の一部が実行される。
メモリシステム１０５に１フレーム分の画像データが格納されると、画像処理エンジン１０２は、内部のＰＵ＿ＳＩＭＤ処理回路を効率よく並列動作させるため、１フレーム分の画像データのうち、必要な矩形画像領域を読み出しながら検波処理の残りや各種カメラ信号処理、ならびに各種画像処理を実行する。
画像処理エンジン１０２の処理結果は、メモリシステム１０５に格納される。
画像処理エンジン１０２は、解像度変換も行う。解像度変換された画像データは、内蔵表示装置Ｉ／Ｆ１１０を介して内蔵表示装置１１１に表示される。
コーデックエンジン１０３は、メモリシステム１０５に格納されている画像処理エンジン１０２により処理された複数フレームの画像データを用いて画像圧縮を行う。圧縮された画像データは、記憶媒体Ｉ／Ｆ１０８を介して記憶媒体１０９に記録される。【００３８】
画像処理エンジン１０２は、複数個のＰＵアレイ２０２＿０〜２０２＿３で構成されるが、ぞれぞれのＰＵアレイ２０２＿０〜２０２＿３は、フレーム内の異なる領域を処理する。
本実施形態のように４つのＰＵアレイ２０２＿０〜２０２＿３で構成する場合、例えば図５に示すように各ＰＵアレイ２０２＿０〜２０２＿３に領域を割り当てることができる。
ＰＵアレイ２０２＿０〜２０２＿３の各々は、前述したように６４個のＰＥから成るＰＵ  ＳＩＭＤ処理回路を複数個有し、例えば図６に示すように、各ＰＵアレイ２０２＿０〜２０２＿３に割り当てた領域を、さらに横６４ピクセル幅の矩形画像領域に分割し、各ピクセルを１つのＰＥに割り当てることができる。
この時、各ＰＥは、図７に示すように、自らの割り当てられた縦方向のピクセル列を順に処理する。【００３９】
例えば、ＰＵアレイ２０２＿０が図８に示すように、５×５画素のフィルタ処理を行う場合を考える。
この時、ＰＵアレイ２０２＿０内の各ＰＥは、図８に示すように、処理対象の画素位置Ｐｉｘｅｌの画素データのフィルタ処理を行うために、画素位置Ｐｉｘｅｌを中心とした５×５の画素位置の画素データを用いる。
ＰＵアレイ２０２＿０内の各ＰＥは、図８に示す矢印（図中下向き）に順に処理対象の画素位置を移動させる。
ＰＵアレイ２０２＿０内の各ＰＥが画素位置Ｐｉｘｅｌの上記５×５画素のフィルタ処理を終了すると、ＳＣＵ２０３＿０は、図９に示すように、次の１ライン分の画素位置の画素データをローカルメモリ２０４＿０あるいはメモリシステム１０５から読み出して図４に示すＰＵアレイ２０２＿０内のプロセッサユニットＰＵの入力ラインバッファ４０１に書き込む。
そして、ＰＵアレイ２０２＿０内の各ＰＥは、図１０に示すように、次の画素位置Ｐｉｘｅｌ＿ｎｅｘｔの画素データの５×５画素のフィルタ処理を行う。【００４０】
図３に示すＰＵ＿ＳＩＭＤ＃０を中心に説明したが、ＰＵ＿ＳＩＭＤ＃１〜＃３はＰＵ＿ＳＩＭＤ＃０と同様である。
ＰＵアレイ２０２＿１〜２０２＿３は、ＰＵアレイ２０２＿０と同様である。【００４１】
［プロセッサエレメントＰＥ］
図４に示すＰＥｎ（ｎ＝１〜１４）を説明する。
なお、ＰＥ０はＰＥ間ではＰＥ１との間でのみデータ入出力を行い、ＰＥ１５はＰＥ１４との間でのみデータ入出力を行う点を除いてＰＥｎと同一である。
図１１は、図４に示すＰＥｎの構成図である。
ＰＥｎは、マルチプレクサＭＵＸ１０００〜１００５、ストリームレジスタＳＲ０，ＳＲ１，ＳＲ２、レジスタｉｎ０，ｉｎ１などの各種レジスタ、演算論理ユニットＡＬＵを有する。【００４２】
ＰＥｎは、入力ラインバッファ４０１からストリームレジスタＳＲ０，ＳＲ１，ＳＲ２にデータ、または、制御フラグが転送され、ストリームレジスタＳＲ０，ＳＲ１，ＳＲ２から演算論理ユニット用レジスタ群の一部にデータ、または、制御フラグが取り込まれる。
演算論理ユニットＡＬＵでは、演算論理ユニット用レジスタ群を一時格納先として用いながら演算が行なわれ、演算結果は出力ラインバッファ４０４に書き込まれる。これらの一連の動作は、内容が個別に定められた命令の同時、あるいは、順次実行により行われる。【００４３】
入力ラインバッファ４０１には、データ用と制御フラグ用があり、それぞれ１つのＰＥあたり１６ビットと４ビットである。
出力ラインバッファ４０４にも、入力ラインバッファ４０１と同じく、データ用と制御フラグ用があり、それぞれ１つのＰＥあたり１６ビットと４ビットである。【００４４】
ストリームレジスタＳＲ０，ＳＲ１，ＳＲ２のエントリ数は、それぞれ１６である。
ストリームレジスタＳＲ０，ＳＲ１のデータ長は１６ビットであり、ストリームレジスタＳＲ２のデータ長は４ビットである。
ここで、ストリームレジスタＳＲ２が４ビットであるのは、ストリームレジスタＳＲ２が主に制御フラグの格納に用いられるためであり、演算論理ユニット用レジスタ群のｃｏｎｄレジスタのデータ長と同じである。
ストリームレジスタＳＲ０，ＳＲ１，ＳＲ２は、主にＳＣＵ２０３＿０から入力ラインバッファ４０１を通して供給される演算に必要なデータの格納や、演算結果の一時待避を行う際に使用され、直接参照の他にポインタによる参照が可能である。
なお、各ストリームレジスタＳＲ０，ＳＲ１，ＳＲ２毎に最大４つのポインタを定義可能であり、各ポインタは、ポインタ定義領域の始点を示すStart値、ポインタ定義領域の終点を示すEnd値、現在のポインタ位置を示すCurrent値の３つの値を有する。【００４５】
ポインタの操作については、下記（１）〜（５）に示すようなポインタ操作を実現する命令がある。
（１）前述の４つのポインタ中から選択した１つのポインタが持つ３つの値から選択した１つの値を即値で書き換える命令。
（２）前述の４つのポインタ中から選択した１つのポインタが持つ３つの値から選択した１つの値をＰＥ０内の一時退避用レジスタｔｅｍｐ０〜３、ｔｅｍｐｓの任意の１つの値で書き換える命令。ただし、指定した値が反映されるには所定のレイテンシがかかる。
（３）前述の４つのポインタ中から選択した１つのポインタが持つCurrent値に正負の即値を加算して書き換える命令。
（４）前述の４つのポインタ中から選択した１つのポインタが持つCurrent値を同じポインタのStart値に書き換える命令。
（５）前述の４つのポインタ中から選択した１つのポインタが持つ3つの値から選択した1つの値を読み出し、その値でＰＵ＿ＳＩＭＤ内の全ＰＥにおいて一時退避用レジスタｔｅｍｐ０〜３、ｔｅｍｐｓの任意の1つを書き換える命令。【００４６】
以上のような構成によるストリームレジスタＳＲ０，ＳＲ１，ＳＲ２は、例えば、２種類のポインタを用い、第１のポインタをライト（ＷＲite)ポインタ、第２のポインタをリード(read)ポインタとし、データの書き込みとライトポインタのインクリメントを繰り返し、書き込みが済んだエントリのデータの読み出しとリードポインタのインクリメントを繰り返すことにより、ストリームレジスタをＦＩＦＯ(First-In First-Out)として使用可能である。
ストリームレジスタＳＲ０，ＳＲ１，ＳＲ２のエントリ数は１６であるが、３本あるストリームレジスタのうち、ストリームレジスタＳＲ０とＳＲ１とを連結し、３２エントリのストリームレジスタとして使用することもできるが、連結モード時には、３２エントリのストリームレジスタＳＲ０として動作するため、ストリームレジスタＳＲ０のポインタのみ使用可能で、ストリームレジスタＳＲ１は参照できない。
通常モードと連結モードは、すべての命令の実行前に所定の方法により設定し、命令の順次実行中には変更できない。【００４７】
ストリームレジスタＳＲ０，ＳＲ１，ＳＲ２の参照やポインタ操作を行った際に、[Start, End]で定義される領域、または、[0, EN−1]の領域を超えることがある。ここで、ENは、ストリームレジスタＳＲ０，ＳＲ１，ＳＲ２のエントリ数(通常モード時１６、連結モード時３２)とする。この場合には、ポインタの値が存在するエントリになるように以下のような回り込み処理が行われる。
ストリームレジスタＳＲ０，ＳＲ１，ＳＲ２のエントリへの回り込み処理前と後のindexをそれぞれidx、idxwとする。なお、２種類の回り込み処理の方式は、ストリームレジスタ参照命令に付加して指定する。【００４８】
[Start, End]で定義される領域で回り込み処理する場合
if(idx > End) idxw = Start＋ (idx−End−1) % (End−Start＋1);
else if (idx < Start) idxw =End − (Start−idx−1) % (End−Start＋1);
else idxw = idx;【００４９】
[0, EN−１]の領域で回り込み処理する場合
if(idx≧ EN) idxw = idx % EN;
else if (idx≦ 0) idxw = (EN×(1−idx／EN) ＋ idx) % EN;
else idxw = idx;【００５０】
演算論理ユニット用レジスタ群に属するレジスタは、ＰＥ０において行われる演算のソースオペランド、あるいは、デスティネーションオペランドに指定可能なレジスタである。図１１のレジスタin０、in１、temp０〜３、 temps、acc.H／L、cond、penum、constがそれにあたる。
レジスタin０およびin１、はデータ長が１６ビットの入力レジスタであり、ストリームレジスタから読み出した内容を格納する。算術論理演算命令のソースオペランドとして指定できるが、デスティネーションオペランドには指定できない。
レジスタtemp０〜３ならびにtempsはデータ長が１６ビットの一時退避用レジスタである。
このうち、レジスタtempsは、後述する共有機能ユニット４０３を利用する際に用いられるレジスタであり、共有機能ユニット４０３へのアクセス以外の場合では、レジスタtemp０〜３と全く同様にワーキングレジスタとして使用できる。これらのレジスタは、算術論理演算命令のソースオペランドとデスティネーションオペランドの両方に指定できる。
レジスタacc.H／Lは主に累積加算命令で用いられ、データ長が合わせて３２ビットの累積加算用レジスタであり、算術論理演算命令のソースオペランドとデスティネーションオペランドの両方に指定できる。３２ビットのうち、上位１６ビットをレジスタacc.Hとし、下位１６ビットをレジスタacc.Lとし、ソースオペランドとして用いる際に上位か下位かの指定を行う。【００５１】
レジスタcondは、主に条件実行を行う際に用いられるデータ長が４ビットのコンディションレジスタである。算術論理演算のデスティネーションオペランドとして指定可能で、その際には、演算結果のうちの任意の１ビット、演算論理ユニットＡＬＵにおける演算の結果、キャリーが立った事を示すキャリーフラグ、あるいは演算結果が０であることを示すゼロフラグのどれかの選択とコンディションレジスタのどのビットに反映させるかを指定する。
レジスタpenumは、自身のプロセッシングエレメント番号(0〜63)が格納されているデータ長が６ビットのプロセッサ番号レジスタであり、読み出し専用である。
レジスタconstは、定数値を格納するデータ長が１６ビットの定数レジスタであり、エントリ数は６４である。定数レジスタは、各プロセッシングエレメント毎に持つわけではなく、共有機能ユニット４０３内に持つ。【００５２】
ＰＵ＿ＳＩＭＤ処理回路内の全ＰＥ共通で１つのエントリを指定して使用するが、算術論理演算のソースオペランドとして直接指定可能なので、演算論理ユニット用レジスタ群に含めている。
演算論理ユニット用レジスタ群の中には、隣接ＰＥから参照可能なレジスタも用意されている。ＰＵ＿ＳＩＭＤ処理回路内のｎ番目のＰＥ＃ｎに注目する。
この場合、当該ＰＥ＃ｎは、演算を行う際、当該ＰＥ＃ｎ内のレジスタだけでなく、隣接ＰＥ＃ｎ−１，＃ｎ＋１のレジスタin0、in1、acc.H、acc.Lを参照可能である。
ＰＥ＃ｎのレジスタcond、acc.H、acc.L、並びに隣接ＰＥ＃ｎ−１，＃ｎ＋１のレジスタin0、in1、acc.H、acc.Lについては、その値をＰＥ＃ｎのストリームレジスタＳＲ０，ＳＲ１，ＳＲ２に書き戻すことができる。【００５３】
ＰＥ＃ｎにおいては、演算論理ユニットＡＬＵにおける演算効率を高めるために、演算論理ユニットＡＬＵにおける演算処理と複数のレジスタへのロード、または、ストアが同時に実行可能となっている。
同時実行可能なオペレーションは下記のＡ〜Ｊである。なお、Ａ〜Ｉについては、命令の条件実行が可能である。命令の条件実行とは、主に制御フラグが格納されているレジスタcondの任意のビットを指定し、その値が１の時に命令を実行し、０の時に命令を実行しないという動作である。【００５４】
A:ストリームレジスタＳＲ０への書き込み
B:ストリームレジスタＳＲ１への書き込み
C:ストリームレジスタＳＲ２への書き込み
D:レジスタｉｎ０の書き込み
E:レジスタｉｎ１への書き込み
F:ストリームレジスタＳＲ２からレジスタcondへの書き込み
G:共有機能ユニット４０３へのファンクション呼び出し
H:出力ラインバッファ４０４への書き込み
I:算術論理演算
J:フロー制御命令【００５５】
ＰＥ＃ｎ内の演算論理ユニットＡＬＵで実行可能な算術論理演算を下記表１に示す。逆数は後述の共有機能ユニット４０３のルックアップテーブル機能を用いて実現する。
表１中、ビット番号命令とは、ソースの１６ビットの最上位ビットから数えて最初に１が現れたビット番号を返す命令である。【００５６】
【表１】
0004893621.tif 000002
【００５７】
以下、５ｘ３画素データのフィルタ処理を例に、プロセッサユニットＰＵおよびＰＥの動作例を、図１１に示すストリームレジスタＳＲ０，ＳＲ１に着目して説明する。
図１２に示すように、各ＰＥは縦の画素データ列を担当し、近傍の画素データに対して重み付け加算を行った結果をローカルメモリ２０４あるいはメモリシステム１０５に書き戻す。
例えば５ｘ３のフィルタ処理を行う場合、図１３に示すように、８０１の領域にある画素データ００、０１、０２、１０、１１、１２、２０、２１、２２、３０、３1、３２、４０、４１、４２の１５個の画素データに対して重み付け加算を行い、８０２の位置の画素データを算出する。【００５８】
以下、隣接するＰＥ間でどのようにデータの受け渡しが行われるか図を用いて説明する。以下で用いる図は、データの受け渡しに注目するため模式的に示している。
図１３に示す８０２の位置の画素データを含む縦の画素データ列を担当するＰＥがＰＥ#nだとすると、図１４に示すように、画素データ２０、２１、２２の縦３画素データがＰＥ＃ｎのストリームレジスタＳＲ０保持され、画素データ１０、１１、１２は隣接するプロセッサエレメントPE #(n-1)、画素データ００、０１、０２はさらにその隣のプロセッサエレメントPE #(n-2)のストリームレジスタＳＲ０に保持されている。
同様に、画素データ３０、３１、３２はＰＥ #(n+1)、画素データ４０、４１、４２はＰＥ #(n+2)のストリームレジスタＳＲ０保持されている。【００５９】
本実施形態では、ストリームレジスタごとに最大４つのポインタを定義可能である。ただし、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３内の全ＰＥに共通であり、コントロールユニット３０３＿０内に含まれる。以下の例では、ストリームレジスタＳＲ０、ＳＲ１それぞれ一つのポインタをリードポインタ、一つのポインタをライトポインタとして定義し、ストリームレジスタをＦＩＦＯとして利用している。図では、リードポインタの位置が最下段になるように模式的に示している。
本実施例では、レジスタｉｎ０にはストリームレジスタＳＲ０，ＳＲ１の両方からデータのロードが可能である。同様にレジスタｉｎ１にもストリームレジスタＳＲ０、ＳＲ１の両方からデータのロードが可能である。一方、ストリームレジスタＳＲ０，ＳＲ１，ＳＲ２には、隣接するＰＥのレジスタｉｎ０，ｉｎ１，acc.H／Lからのデータを書き込むことができるが、レジスタｉｎ０はストリームレジスタＳＲ０、レジスタｉｎ１はストリームレジスタＳＲ１にのみ書き込むことができる。しかし、回路規模は増えるが両方から書き込み可能としてもよい。【００６０】
第１のサイクルでは、図１５に示すように、ストリームレジスタＳＲ０におけるリードポインタのCurrent値にある画素データがレジスタｉｎ１に書き込まれる。すなわち、PE #nの場合には、画素データ２０がレジスタｉｎ１書き込まれる。演算論理ユニットＡＬＵでは、レジスタｉｎ１に書き込まれた画素データ値をソースオペランドとして読み出し、係数を乗算する。演算に必要な係数は、定数レジスタであるレジスタconstに格納されている。【００６１】
ストリームレジスタＳＲ０，ＳＲ１，ＳＲ２にアクセスする場合、ポインタレジスタのCurrent値の位置だけでなくCurrent置からのオフセットを指定してアクセスすることができる。第２のサイクルでは、図１６に示すように、ストリームレジスタＳＲ０におけるリードポインタのCurrent値にオフセット１を加えた位置にある画素データがレジスタｉｎ１に書き込まれる。すなわち、ＰＥ #nの場合には、画素データ２１がレジスタｉｎ１に書き込まれる。演算論理ユニットＡＬＵでは、in1(１１０２)に書き込まれた画素データ値をソースオペランドとして読み出し、係数を乗算する。また、前サイクルでレジスタｉｎ１に格納された画素データは、右隣りのＰＥのストリームレジスタＳＲ１に書き込まれる。【００６２】
以後同様の動作を続けることにより、図１７に示す状態となる。この時点で、自身のストリームレジスタＳＲ０に格納している縦３画素データ分の処理が完了する。
さらに次サイクル以降は、図１８に示すように、ストリームレジスタＳＲ１に格納された画素データを順次処理していく。この際、ストリームレジスタＳＲ１からの読み出し時に、リードポインタをインクリメントする。
以降同様の動作を続けることにより、図１９に示す状態となる。この時点で、もともと左隣のプロセッサエレメント（ＰＥ）４０２が持つストリームレジスタＳＲ０に格納されていた縦３画素データ分の処理が完了する。【００６３】
次サイクル以降も同様の動作を繰り返すが、先に述べたように、ストリームレジスタＳＲ１には、レジスタｉｎ０から書き込むことができない。従って、ストリームレジスタＳＲ１に格納された画素データの処理を行いながら、ストリームレジスタＳＲ０に格納された自身の画素データを左隣のＰＥが持つストリームレジスタＳＲ１に渡していくため、図２０に示すように、ストリームレジスタＳＲ０の画素データをレジスタｉｎ１に、ストリームレジスタＳＲ１の画素データをレジスタｉｎ０に書き込む。この際、ストリームレジスタＳＲ０とＳＲ１の両方のリードポインタをインクリメントする。演算論理ユニットＡＬＵでは、レジスタｉｎ０に書き込まれた画素データ値をソースオペランドとして読み出し、係数を乗算する。【００６４】
以降同様の動作を続けることにより、図２１に示す状態となる。この時点で、二つ左隣縦３画素データ分の処理が完了する。また、ストリームレジスタＳＲ１には、右隣のＰＥが持つストリームレジスタＳＲ０に格納されていた画素データが格納されている。
以降は、図２２に示すように、再びストリームレジスタＳＲ１からレジスタｉｎ１への書き込み、レジスタｉｎ１に書き込まれた画素データ値と係数の乗算、レジスタｉｎ１から左隣のＰＥが持つストリームレジスタＳＲ１への書き込みを並行して行っていく。
以降同様の動作を続けることにより、図２３に示す状態となる。この時点で、図１３の８０１で示した５ｘ３の領域に含まれる画素データのフィルタ処理が完了する。また、この時点までに、入力ラインバッファ４０１には、ＳＣＵ２０３＿０から次のラインの画素データデータが書き込まれている。【００６５】
最後に、入力ラインバッファ４０１からストリームレジスタＳＲ０に次ラインの画素データをロードするとともに、フィルタ処理の結果を出力ラインバッファ４０４に書き込む。ＳＣＵ２０３＿０は、出力ラインバッファ４０４に書き込まれた演算結果を読み出し、ローカルメモリ２０４あるいはメモリシステム１０５に書き戻す。
以上のように、本実施形態によれば、演算論理ユニットＡＬＵの演算処理と並行して、ストリームレジスタＳＲ０，ＳＲ１を用いた隣接ＰＥ間のデータの受け渡しを効率よく行うことができ、演算論理ユニットＡＬＵに対して間断なくデータを供給することが可能であり、かつ隣接ＰＥ間でデータを共用することにより、ローカルメモリ２０４＿０からの読み出し頻度を低減している。【００６６】
［共有機能ユニット４０３］
図４を参照して説明したように、プロセッサユニットＰＵ＃００は、共有機能ユニット４０３を有する。
共有機能ユニット４０３は、図４に示すＰＥ＃０〜１５の図１１に示す演算論理ユニットＡＬＵで実行可能な演算命令以外の演算のために用いられる。
プロセッサエレメントＰＥ＃０〜１５は、共有機能ユニット４０３を利用するために、ファンクション呼び出し命令を使用する。その際、ＰＥ＃０〜１５は、後述の利用可能な機能との対応を予め定めた機能識別番号を命令に付加して指定した要求を共有機能ユニット４０３に出力する。
ＰＥ＃０〜１５は、ソースオペランドに指定するレジスタに必要なデータをセットしてファンクション呼び出し命令を実行すると、所定のレイテンシ後に結果がレジスタtempsに返される。なお、ソースオペランドに指定したレジスタは、参照結果が書き戻されるまで書き換え不可である。【００６７】
共有機能ユニット４０３が利用可能な機能を以下に示す。
共有機能ユニット４０３は、例えば、図２５に示すように、ルックアップテーブル１２０２、加算演算器１２０３、最大最小値演算器１２０４およびベクタ演算ユニット１２０５などの機能を有する。
ルックアップテーブル１２０２は、複数のプロセッサエレメント（ＰＥ）間で共用し、エントリ数に依存してレイテンシが可変な機能である。
加算演算器１２０３は、複数のＰＥからのデータを入力とし、データ数に依存してレイテンシが可変な機能である。
最大最小値演算器１２０４は、複数のＰＥからのデータを入力とし、データ数に依存してレイテンシが可変な機能である。
ベクタ演算ユニット１２０５は、次元に依存してレイテンシが可変な機能である。【００６８】
共有機能ユニット４０３のルックアップテーブル１２０２としての機能を説明する。
ルックアップテーブル１２０２は１０２４エントリの単一テーブルとしての利用だけでなく、５１２エントリや２５６エントリなど、エントリ数を変えて使用することができる。
また、ルックアップテーブル１２０２は、１種類だけではなく、複数の種類のテーブルを保持することもできる。例えば、ルックアップテーブル１２０２は、逆数テーブルと対数テーブルを１０２４エントリ中の異なる領域に格納することができる。
ルックアップテーブル１２０２は、１６個のＰＥで共有しているので、１０２４エントリを単一テーブルとして使用した場合には、参照に要するサイクル数は１６となる。
これに１サイクルのアクセス遅延を加えた１７が１０２４エントリのルックアップテーブル１２０２のレイテンシである。
エントリ数を少なくし、同一種類のテーブルを複数個格納した場合には、１個のテーブルを共有するＰＥの数が減る為、参照に要するサイクル数も減少する。例えば、２５６エントリのテーブルとした場合には、４個ずつのＰＥで共有することになる為、参照に要するサイクル数は４、レイテンシは５となる。なお、ルックアップテーブル１２０２の構成は、共有機能ユニット４０３がプログラム実行前に設定する。【００６９】
共有機能ユニット４０３の加算演算器１２０３としての機能について説明する。
加算演算器１２０３は、複数個のＰＥからデータを入力すると、そのデータの合計値を所定のレイテンシ後にデータを出力したＰＥに出力する。
共有機能ユニット４０３に１つの加算演算器１２０３があり、これを１６個のＰＥで共有する場合は、演算に要するサイクル数は１６となる。これに１サイクルのアクセス遅延を加えた17が加算演算器１２０３のレイテンシである。
共有機能ユニット４０３に2つの加算演算器１２０３があり、それぞれを８個のＰＥで共有する場合は、演算に要するサイクル数は８である。これに１サイクルのアクセス遅延を加えた９が加算演算器１２０３のレイテンシである。なお、複数の加算演算器１２０３の構成は、共有機能ユニット４０３がプログラム実行前に設定する。【００７０】
共有機能ユニット４０３の最大最小値演算器１２０４としての機能について説明する。
最大最小値演算器１２０４は、複数個のＰＥからデータを入力すると、それらのデータの最大値、最小値が所定のレイテンシ後に、データを出力したＰＥに出力される。
共有機能ユニット４０３に１つの最大最小値演算器１２０４があり、これを１６個のＰＥで共有する場合は、演算に要するサイクル数は１６となる。これに１サイクルのアクセス遅延を加えた１７が最大最小値演算器１２０４のレイテンシである。
共有機能ユニット４０３に２つの最大最小値演算器１２０４があり、それぞれを８個のＰＥで共有する場合は、演算に要するサイクル数は８となる。これに１サイクルのアクセス遅延を加えた９が最大最小値演算器１２０４のレイテンシである。なお、複数の最大最小値演算器１２０４の構成は、共有機能ユニット４０３がプログラム実行前に設定する。【００７１】
共有機能ユニット４０３のベクタ演算ユニット１２０５の機能について説明する。
ベクタ演算ユニット１２０５は、複数個のＰＥから入力したデータ数を次元とするベクタ演算を行い、結果が所定のレイテンシ後に、データを出力したＰＥに出力する。
以下の式（１）は２個のＰＥによる２次元のベクタ演算であるから演算に要するサイクル数は３である。これに１サイクルのアクセス遅延を加えた３がベクタ演算ユニット１２０５のレイテンシである。【００７２】
【数１】
0004893621.tif 000003
【００７３】
同様に以下の式（２）の４個のＰＥによる４次元のベクタ演算であるから演算に要するサイクル数は４である。これに１サイクルのアクセス遅延を加えた５がベクタ演算ユニット１２０５のレイテンシである。【００７４】
【数２】
0004893621.tif 000004
【００７５】
どちらの場合も係数となる行列の各要素の値は、あらかじめ保持しておく。【００７６】
［ＳＣＵ(Stream Control Unit)２０３＿０〜２０３＿３］
以下、ＳＣＵ２０３＿０について説明する。
ＳＣＵ２０３＿１〜２０３＿３は、ＳＣＵ２０３＿０と同じである。【００７７】
ＳＣＵ２０３＿０は、図３等に示すように、複数のＰＵ＿ＳＩＭＤ（Single Instruction Multiple Data) 処理回路＃０〜＃３に対して、それを構成する個々のプロセッサエレメントＰＥの処理に必要なデータを効率よくデータを入出力するための制御を行う。
ＳＣＵ２０３＿０は、処理に必要なデータを半導体メモリなどに代表される記憶装置に収納する。
ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３は、ＳＩＭＤ型プロセッサであるため、すべてのＰＥに対する入出力は時間的に同時に行われる。従って、ＳＣＵ２０３＿０によるＰＵ＿ＳＩＭＤ＃０〜＃３に対する入出力は、ＰＥの個数分の入出力データを同時に入出力することになる。以下同時に入出力されるデータを、ストリームデータと呼ぶことにする。【００７８】
一方、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３は画像情報の処理を主に行うが、処理対象である画像情報は、メモリなどの記憶装置において、物理的な１次元のアドレスで管理された記憶領域内に、論理的な２次元記憶領域を確保して記憶されている。その画像データの基本単位は画素データと呼ばれる。
ＳＣＵ２０３＿０は、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３と、メモリシステム１０５およびローカルメモリ２０４＿０との間に位置し、複数の画素データをストリームデータに変換して入出力を行う機能を持っている。【００７９】
ＳＣＵ２０３＿０の機能を具体的に示す。
（１）ＳＣＵ２０３＿０は、ローカルメモリ２０４＿０またはメモリシステム１０５（以下、記憶領域とも記す）からデータ群を読み出し、そのデータをＰＵ＿ＳＩＭＤ＃０〜＃３で必要とされるストリームデータに変換し、ＰＵ＿ＳＩＭＤ＃０〜＃３に出力する。
（２）ＳＣＵ２０３＿０は、ＰＵ＿ＳＩＭＤ＃０〜＃３が出力する出力ストリームデータを、記憶領域内部で必要とされるデータ形式に変換し、記憶領域へ書き込み転送する。
（３）ＳＣＵ２０３＿０の記憶領域は、作業領域として使用する半導体メモリであり、記憶領域はＳＣＵ２０３＿０と共にＳＯＣ(System On Chip) に含まれる場合や、ＳＯＣの外部に含まれる場合などのバリエーションが想定できる。
（４）ＳＣＵ２０３＿０が上記記憶領域をアクセスする場合は、ＳＣＵ２０３＿０からは１次元の物理アドレスとしてアクセスできる。
（５）ＳＣＵ２０３＿０内部において、記憶領域上のデータは、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３でのプログラム開発の容易さと画像情報の取り扱いの容易さのため、論理的な２次元座標で配列された画素データを単位として扱うことが可能である。
（６）記憶領域上では、複数の画素データから構成された１ワードデータが、１次元物理アドレスによるアクセス単位となる。
（７）１ワードデータ内の画素データ個数及び２次元座標で見た場合の画素データ配列は、使用するメモリ種類に応じて可変であり、ＳＣＵ２０３＿０は複数の画素データ配列に対処可能である。
（８）ＳＣＵ２０３＿０の記憶領域は、ＳＣＵ２０３＿０に接続されるＰＵ＿ＳＩＭＤ処理回路＃０〜＃３単位に、記憶領域へのreadアクセスとデータ変換を行うための設定を必要とし、その設定をＳＣＵ２０３＿０内部のレジスタにホストプロセッサ１０１から書き込むことで可能となる。
（９）ＳＣＵ２０３＿０は、記憶領域へのreadアクセスを行うために以下の事項を設定する。
ａ．記憶領域に含まれる複数の矩形画像領域を指定する第１の開始アドレス。
ｂ．第１の開始アドレスから始まる記憶領域中に含まれ、２次元論理座標で指定される、第２の複数の矩形画像領域の幅高さ。
ｃ．第２の矩形画像領域中に、階層的に含まれる２次元論理座標で指定される第３の矩形画像領域の幅高さ。
ｄ．第３の矩形画像領域内部のデータに対して、選択的にデータを読み出し、並べ替えや演算などの処理を施し、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３が必要とするストリームデータへ変換する方式の指定。
（１０）ＳＣＵ２０３＿０は、記憶領域へのＷＲiteアクセスを行うために以下の実行を設定する。
ｅ．記憶領域に含まれると複数の矩形画像領域を指定する第４の開始アドレス。
ｆ．第４の開始アドレスから始まる記憶領域中に含まれ、２次元論理座標で指定される、第５の複数の矩形画像領域の幅高さ。
ｇ．第５の矩形画像領域中に、階層的に含まれる２次元論理座標で指定される第６の矩形画像領域の幅高さ。
ｈ．第６の矩形画像領域内部のデータに対して、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３が出力するストリームデータから択的にデータを読み出し、並べ替えや演算などの処理を施し、第６の矩形画像領域内部のデータ形に書き込む方式の指定。
ｉ．ＳＣＵ２０３＿０は複数の記憶領域間のデータ転送を実現する。
ｊ．ＳＣＵ２０３＿０を制御可能するコントローラであるホストプロセッサ１０１との間で、通信を行うためのインターフェースを介して接続する。【００８０】
ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３が、ストリームデータを処理する場合、記憶領域上に矩形画像領域を多重（階層）指定し、それぞれの矩形画像領域を移動させながら、データのRead/ＷＲite処理を行うことで効率よく処理を行う。
そのため、ＳＣＵ２０３＿０内部に多重構造の矩形画像領域を定義する。
図２６は、記憶領域上の多重矩形画像領域から、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３へストリームデータをＷＲiteする場合及び、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３から記憶領域上の多重矩形画像領域へ、ストリームデータをＷＲiteする場合の動作を示している。【００８１】
ＳＣＵ２０３＿０が扱う記憶領域内の矩形画像領域の階層構成を、図２６を参照して説明する。
ＳＣＵ２０３＿０は、記憶領域中に、作業領域として矩形画像領域ＷＲを指定する。
また、ＳＣＵ２０３＿０は、矩形画像領域ＷＲを、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３毎に指定する。
ＳＣＵ２０３＿０は、矩形画像領域ＷＲ内に、画素データの読み出し元である矩形画像領域ＡＲを指定する。
ＳＣＵ２０３＿０は、矩形画像領域ＡＲ内に、矩形画像領域ＢＲを指定する。
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力したプログラムに基づいて、矩形画像領域ＢＲから読み出した画素データを、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３が必要とするストリームデータに変換するデータ変換コマンドWI#data#opを実行（指定）する。
ＳＣＵ２０３＿０は、後述するように矩形画像領域ＡＲ，ＢＲ，ＷＩ＿ｄａｔａ＿ｏｐ指定の一連の繰り返し処理をプログラム可能である。【００８２】
ＳＣＵ２０３＿０は、矩形画像領域ＷＲ内に、画素データの書き込み先である矩形画像領域ＣＲを指定する。
ＳＣＵ２０３＿０は、矩形画像領域ＣＲ内に、矩形画像領域ＤＲを指定する。
ＳＣＵ２０３＿０は、ＰＵ＿ＳＩＭＤ＃０〜＃３の出力ストリームデータから、矩形画像領域ＤＲへのデータ変換コマンドWO#data#opを実行する。
ＳＣＵ２０３＿０は、後述するように矩形画像領域ＣＲ、ＤＲ、ＷＯ＿ｄａｔａ＿ｏｐ指定は、一連の繰り返し処理をプログラム可能である。
ＳＣＵ２０３＿０は、矩形画像領域ＡＲ、ＢＲ、ＣＲ、ＤＲは矩形画像領域ＷＲ内の任意の位置への配置と移動可能である。
ＳＣＵ２０３＿０は、矩形画像領域ＷＲ内において、矩形画像領域ＡＲ、ＢＲ、ＣＲ、ＤＲを、２次元論理座標で指定が可能である。
ＳＣＵ２０３＿０は、記憶領域に対して矩形画像領域ＷＲを物理アドレスで指定できる。
ＳＣＵ２０３＿０は、矩形画像領域ＷＲ,ＡＲ,ＤＲ,ＣＲ.ＤＲ内部の画素データがアクセスされた場合には、記憶領域へアクセスが必要になるため、論理アドレスから物理アドレスへの変換を行って記憶領域にアクセスする。【００８３】
図２７は、ＳＣＵ２０３＿０内部に設定される多重矩形画像領域に関する処理を行う機能を説明するための図である。
図２７に示すように、ＳＣＵ２０３＿０は、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３の各々に、記憶領域内の矩形画像領域ＷＲ０〜３の各々を割り当てる。
矩形画像領域ＷＲ０〜３は、メモリシステム１０５やローカルメモリ２０４＿０などの記憶領域内に規定される。
矩形画像領域ＷＲ０〜３の各々に、矩形画像領域ＡＲ０〜７，ＢＲ０〜７，ＣＲ０〜３，ＤＲ０〜３が規定される。【００８４】
図２７に示すＳＣＵ２０３＿０は、ＷＩ＿ｄａｔａ＿ｏｐにより、矩形画像領域ＢＲ内のデータをストリームデータへ変換して、出力バッファｏｕｔ＿ｂｕｆにＷＲiteする。
また、ＳＣＵ２０３＿０は、データ変換コマンドWO#data#opにより、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３から入力して入力バッファin#bufに収納されているストリームデータをデータ変換して矩形画像領域ＤＲにＷＲiteする。【００８５】
図２６を参照して上述したように、矩形画像領域ＷＲ内に、矩形画像領域ＡＲ，ＢＲ，ＣＲ，ＤＲを階層構造で規定することで、例えば、矩形画像領域ＡＲ，ＣＲ内で矩形画像領域ＢＲ，ＤＲを相対的に移動させる場合に、基準座標を矩形画像領域ＡＲ，ＢＲ，ＣＲ，ＤＲ内のローカルな座標に加算する形式でのアドレス表現が可能になり、プログラミングが簡単になる。
本実施形態では、矩形画像領域の個数や多重指定の階層数などを具体的な数字で表現しているが、その構成や数量は組み合わせ自由であり、幅広い画像処理の必要性に応じて構成を変えることが可能である。【００８６】
ＳＣＵ２０３＿０がデータ転送のために行う接続を説明する。
［システムバス接続］
図１に示すシステムバス１１３は、ＳＣＵ２０３＿０を、ホストプロセッサ１０１およびメモリシステム１０５などの他の処理モジュールを接続するバスであり、以下の特徴を有する。
（１）システムバス１１３は、ＬＳＩやＳＯＣ内部で標準化されたバス規格を採用することが可能である。
（２）システムバス１１３のバス幅は１２８ビットであり、連続データ転送(バースト転送)が可能な構成とすることで、バス使用効率を向上できる。
（３）システムバス１１３上の記憶装置（例えば、メモリシステム１０５）に対して、ＳＣＵ２０３＿０はバスマスタとしてアクセスする。
（４）システムバス１１３上のＳＣＵ２０３＿０以外のバスマスタから、ＳＣＵ２０３＿０の内部レジスタやSCU専用記憶装置（例えば、、ローカルメモリ２０４＿０）へのアクセスを行う。
（５）システムバス１１３は、データ転送効率や機能が満足されるのであれば、バス規格にはこだわらない選択が可能である。【００８７】
［ＳＣＵ２０３＿０の専用記憶領域接続］
ＳＣＵ２０３＿０は、専用記憶領域として専用記憶装置を接続することが可能である。
専用記憶装置はＳＲＡＭやＤＲＡＭなどの半導体メモリがＳＯＣ内部外部にのどちらにあろうとも選択可能である。
上記専用記憶装置は、システムバス１１３より広帯域なバスに接続される。
上記専用記憶装置は、１つのＳＣＵ２０３＿０が占有して使用する目的で用意されている。
システムバス１１３上のバスマスタから、上記専用記憶装置へのアクセスが可能である。【００８８】
［ＰＵ＿ＳＩＭＤ＃０〜＃３接続］
ＳＣＵ２０３＿０には、４つのＰＵ＿ＳＩＭＤ処理回路＃０〜＃３がバス接続される。
ＳＣＵ２０３＿０からＰＵ＿ＳＩＭＤ処理回路＃０〜＃３へのストリームデータ入力は、各ＰＵ＿ＳＩＭＤ処理回路に２５６ビットの単方向バスを使用し、転送効率は２５６bit/clockである。
data/転送プロトコルとして２線式のハンドシェークを採用する。
ＳＣＵ２０３＿０内部には出力バッファｏｕｔ＿ｂｕｆを用意する。
ＳＣＵ２０３＿０から出力を行う場合は、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３に対してアドレスを指定することでＰＵ＿ＳＩＭＤ処理回路内部レジスタを識別する。
ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３からＳＣＵ２０３＿０へのストリームデータ入力は、各ＰＵ＿ＳＩＭＤの２５６ビットの単方向バスを使用し、転送効率は２５６bit/clockである。
また、データ転送プロトコルとして２線式のハンドシェークを採用する。
ＳＣＵ２０３＿０内部には入力用の入力バッファｉｎ＿ｂｕｆを用意する。
ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３からＳＣＵ２０３＿０へ入力を行う場合は、ＰＵ＿ＳＩＭＤに対してアドレスを指定することでＰＵ＿ＳＩＭＤ処理回路内部レジスタを識別する。【００８９】
［ＳＣＵ２０３＿０の物理論理アドレス変換］
ＳＣＵ２０３＿０がアクセスする図２６および図２７を用いて説明した記憶領域内の矩形画像領域ＷＲ内部の画素対応位置Ｐｉｘｅｌは２次元論理アドレスで表現されているが、メモリシステム１０５およびローカルメモリ２０４＿０は物理アドレスで表現されている。従って、ＳＣＵ２０３＿０は、矩形画像領域ＷＲ内の矩形画像領域ＡＲ，ＢＲ，ＣＲ，ＤＲ内部に指定された画素対応位置Ｐｉｘｅｌに対してReadまたはＷＲiteを行う場合は、２次元論理アドレスから物理アドレスへのアドレス変換を行う。
ここで、矩形画像領域ＷＲ内の任意の画素対応位置をpixel(x,y)とする。ただしx,yは２次元論理アドレスである。
画素対応位置Ｌ＿Ｐｉｘｅｌ（ｘ、ｙ）の物理アドレス(adrs)は以下の様に計算される。
また、アドレス指定されるwordの中で、画素対応位置Ｌ＿Ｐｉｘｅｌ（ｘ、ｙ）が占めるビット位置をWord[a:b]と表現する。(ただしa,bはword内でpixelを構成するビット範囲とする。)【００９０】
下記式（３）〜（４）において、wwは画素位置単位の矩形画像領域ＷＲの幅(Ｘ方向)である。
なお、１ワードデータ（1word）中のｘ方向Ｐｉｘｅｌ数をpwとする。
phは、1word中のｙ方向Ｐｉｘｅｌ数である。
nは、1word中のビット位置を計算するための値である。
ＷＲ#bpは、記憶領域内部での矩形画像領域ＷＲの開始を示すアドレスである。
１つのＰｉｘｅｌ＝１６ビットで表現しているがビット長としては他の値を採用することも可能である。
Int（）はカッコ内の値を超えない整数を示す。
X mod yは整数ｘを整数ｙで割った剰余である。【００９１】
［数３］
adres=ＷＲ#bp+int〔y/ph〕*ww/pw+int(x/pw)            …（３）【００９２】
［数４］
n=(y mod ph)*pw+(x mod pw)                        …（４）【００９３】
［数５］
L#pixel(x,y)[15:0]=word[16*(n+1)-1:16*n]          …（５）【００９４】
図２８は、ＳＣＵ２０３＿０による物理論理アドレス変換を説明するための図である。
図２８に示すように、メモリシステム１０５およびローカルメモリ２０４＿０の物理的なアドレス空間ＡＤＲＳ内に矩形画像領域ＷＲが規定される。
ＳＣＵ２０３＿０は、１つの物理アドレスによるアクセス単位を1wordとする。
ＷＲ#bp+は、矩形画像領域ＷＲの開始アドレスである。
wwは、矩形画像領域ＷＲの幅であり、画素対応位置Ｐｉｘｅｌ単位かつpwの倍数である。
図２８に示すように、アドレス空間ＡＤＲＳの画素対応位置Ｌ＿Ｐｉｘｅｌは、2次元論理アドレスによってで指定可能である。
図２８に示すpwは、1word内のｘ方向のpixel数（画素データ数）を示す。
図２８に示すphは、1word内のｙ方向のpixel数を示す。
1pixelに含まれる情報量をnビットとし、1wordに含まれる総ビット容量をwordsizeとすると以下の関係式が成立する。【００９５】
［数６］
wordsize=n*pw*ph                                      …（６）【００９６】
本実施形態では、上述したように記憶領域を２次元論理アドレスで管理することで、記憶領域内の任意の矩形画像領域にアクセスする場合に、従来のスキャンライン方式のようにカウント処理（デットラインの検出処理）などが不要になり、プログラミングが簡単になる。
本実施形態では1pixel=16bビットの構成で説明を行っているが、1pixelの情報量は特に限定されず、８ビットや３２ビットなどでもよい。【００９７】
［ＳＣＵ２０３＿０による記憶領域へのアクセス］
ＳＣＵ２０３＿０は、上述したように、記憶領域として、システムバス１１３に接続された大規模外部記憶装置であるメモリシステム１０５と、小規模な専用記憶装置であるローカルメモリ２０４＿０を使用することができる。
メモリシステム１０５は、例えば、ＳＣＵ２０３＿０が含まれるSOCの外部に接続されるDRAM-CHIPであり、一般的なDDRやRAMBUSなどのメモリchipなどである。
ローカルメモリ２０４＿０は、例えば、ＳＣＵ２０３＿０が含まれるSOC内部のSRAMやeDRAM (Embedede-DRAM:SCUと同じSOCに含まれるOn-chip DRAM)などである。【００９８】
一般的に、ＤＲＡＭは、Raw/Column/bankといったアドレスの階層構造があり、同一のRawに含まれる連続データアクセスは高速であるが、Raw境界をまたがった連続データアクセスや、遠隔のRaw同士の連続アクセスは、ページプリチャージなどの処置を必要とするため、低速となるという特徴がある。
本実施形態では、ＳＣＵ２０３＿０は、例えば、メモリシステム１０５やローカルメモリ２０４＿０として、DRAMを使用しているが、SRAMであっても問題はない。また、DRAMを使用する場合、上記アクセス性能の不連続性を可能な限り避ける目的で、記憶領域内の画素データの矩形画像配列を、ストリームデータ生成時には可能な限り同一ページに配置する工夫をすることで、DRAMアクセスの不連続性を可能な限り低減する処置をとることができる。
この工夫は、たとえば先にのべた物理論理アドレス変換におけるbpとwwの値に、以下に示すような制約を与えるなどで容易に実現可能である。【００９９】
（制約例1）  wwはDRAMのcolumnの倍数であり、かつpwの倍数である。
（制約例2）  ＷＲ#bpの値はDRAMのRaw単位である。【０１００】
［ＳＣＵ２０３＿０による多重矩形画像領域定義（読み出し時）］
ＳＣＵ２０３＿０は、上述したように、記憶領域内の矩形画像領域ＷＲ内に、図２９に示すように、２次元論理アドレス表現で多重矩形画像領域として、矩形画像領域ＡＲ，ＢＲを規定できる。
それぞれの位置関係を示す値として以下の座標値が使われる。
wwは、矩形画像領域ＷＲのx方向矩形画像領域幅。
ax,ayは、矩形画像領域ＷＲ内の矩形画像領域ＡＲの２次元座標を示す。これは、矩形画像領域ＷＲの左上を原点(0,0)とした座標系で、矩形画像領域ＡＲの左上の画素対応位置Ｐｉｘｅｌの座標を示す。
aw及びahは、矩形画像領域ＡＲの幅と高さを示す。
bx及びbyは、矩形画像領域ＡＲ内の矩形画像領域ＢＲの２次元座標を示す。矩形画像領域ＡＲの左上を原点(0,0)とした座標系で、矩形画像領域ＢＲの左上の画素対応位置Ｐｉｘｅｌの座標を示す。
bw及びbhは、矩形画像領域ＢＲの幅と高さを示す。
x及びyは、矩形画像領域ＢＲ内の画素対応位置Ｐｉｘｅｌの２次元座標を示す。矩形画像領域ＢＲの左上を原点(0,0)とした座標系である。【０１０１】
［ＳＣＵ２０３＿０による矩形画像領域ＢＲの定義モード］
ＳＣＵ２０３＿０は、bx,by及びbw,bhの値を調整することで、図３０に示すように、矩形画像領域ＡＲを逸脱するように矩形画像領域ＢＲを指定できる。
これにより、ＳＣＵ２０３＿０は、多様な形態でＰＵ＿ＳＩＭＤ処理回路＃０〜＃３にストリームデータを出力できる。
以下、ＳＣＵ２０３＿０による矩形画像領域ＢＲの指定の形態を示す各種のＢＲモードを説明する。
（矩形画像領域）ＢＲモード１：
ＳＣＵ２０３＿０は、ＢＲモード１に設定されている場合に、矩形画像領域ＡＲから逸脱して矩形画像領域ＢＲを設定可能である。
ＳＣＵ２０３＿０は、矩形画像領域ＢＲが矩形画像領域ＡＲから逸脱した場合に、逸脱した領域に対応した画素データＰｉｘｅｌの値を予め設定された値(COL)にする。
ＳＣＵ２０３＿０は、矩形画像領域ＢＲ内の画素データＰｉｘｅｌ（ｘ，ｙ）を、矩形画像領域ＡＲ内の画素データＡＲ（）を用いて下記式（７）のように決定する。【０１０２】
［数７］
if((x+bx >= aw )|(y+by  > ah ))  pixel(x,y)=COL
else                  pixel(x,y)=AR(x+bx,y+by)              …（７）【０１０３】
（矩形画像領域）ＢＲモード２：
ＳＣＵ２０３＿０は、ＢＲモード２に設定されている場合に、矩形画像領域ＡＲから逸脱して矩形画像領域ＢＲを設定可能である。
ＳＣＵ２０３＿０は、図３１に示すように、矩形画像領域ＢＲがＸ方向に矩形画像領域ＡＲから逸脱した場合、逸脱領域を矩形画像領域ＡＲ内部に折り返すように制御する。
ＳＣＵ２０３＿０は、図３１に示すように、矩形画像領域ＢＲがＸ方向とＹ方向とに矩形画像領域ＡＲから逸脱した場合、矩形画像領域ＡＲには折り返されないこととし、画素データPixelの値を（COL）とする。
ＳＣＵ２０３＿０は、矩形画像領域ＢＲ内の画素データＰｉｘｅｌ（ｘ，ｙ）を、矩形画像領域ＡＲ内の画素データＡＲ（）を用いて下記式（８）のように決定する。【０１０４】
［数８］
if(aw <= x+bx) & (y+by <= ah-bh)  pixel(x,y)=AR(x+bx-aw, y+by+bh)
else if (aw <= x+bx) & (ah-bh < y+by)  pixel(x,y)=COL
else if(ah < y+bx)               pixel(x,y)=COL
else                         pixel(x,y)=AR(x+bx, y+by)
…（８）【０１０５】
（矩形画像領域）ＢＲモード３：
ＳＣＵ２０３＿０は、ＢＲモード３に設定されている場合に、矩形画像領域ＡＲから逸脱して矩形画像領域ＢＲを設定できない。
ＳＣＵ２０３＿０は、矩形画像領域ＡＲから逸脱した矩形画像領域ＢＲを指定した場合には、逸脱した領域の画素データＰｉｘｅｌ（ｘ，ｙ）はその値を保障しない。
ＳＣＵ２０３＿０は、図３２に示すように、矩形画像領域ＡＲの外周から２画素対応位置の領域に、矩形画像領域ＢＲが設定された場合に、矩形画像領域ＡＲの外周から内側３画素対応位置の矩形画像領域ＢＲ内の画素対応位置の画素データＰｉｘｅｌ（ｘ，ｙ）を、矩形画像領域ＢＲの外周から２画素対応位置の画素データＰｉｘｅｌ（ｘ，ｙ）として設定するクランプ(Clamp)動作を行う。
矩形画像領域ＢＲ内の画素データＰｉｘｅｌ（ｘ，ｙ）は、下記式（９）で規定される。
簡略化のためにxp=x+bx; yp=y+by;としている。【０１０６】
［数９］
if ((xp < 2) & (yp < 2))               pixel(x,y)=AR(2,2)
else if((2<= xp <aw-2)&(yp < 2)  pixel(x,y)=AR(xp,2)
else if((aw-2 <= xp)&(yp <2)           pixel(x,y)=AR(aw-3,2)
else if((xp < 2)&( 2 <= yp <ah-2)      pixel(x,y)=AR(2,yp)
else if ((aw-2 < xp)&(2 <= yp <ah-2)   pixel(x,y)=AR(aw-3,yp)
else if ((xp < 2)&(ah-2 <= yp)                       pixel(x,y)=AR(2,ah-3)
else if ((2 <= xp <aw-2)&(ah-2 <= yp)  pixel(x,y)=AR(xp,ah-3)
else if ((aw-2 <= xp)&(ah-2 <= yp)    pixel(x,y)=AR(aw-3,ah-3)
else                      pixel(x,y) = AR(xp,yp)
…（９）【０１０７】
矩形画像領域ＢＲが、矩形画像領域ＡＲの外周から１画素対応位置だけ内側に位置する場合には、ＳＣＵ２０３＿０は、図３３に示すように、クランプ動作を行う。
本実施形態では、上述したようにクランプ動作（処理）を行うことで、任意の矩形画像領域のフィルタ処理などを行う場合に、矩形画像領域の外周において当該矩形画像領域外の画素データを適切に代用することができる。【０１０８】
［ＳＣＵ２０３＿０によるＰＵ＿ＳＩＭＤへのデータ入力処理］
ＳＣＵ２０３＿０は、矩形画像領域ＢＲから画素データＰｉｘｅｌ（ｘ，ｙ）を読み出し、これをデータストリームへデータに変換して（入力データ変換処理を行って）図３に示すＰＵ＿ＳＩＭＤ処理回路＃０〜＃３に入力させる。
ここで、ＳＣＵ２０３＿０は、ＰＵ＿ＳＩＭＤ＃０〜＃３の各々について、上記変換の内容を指定できる。
ＳＣＵ２０３＿０は、各ＰＵ＿ＳＩＭＤ＃０〜＃３に対応した出力バッファｏｕｔ＿ｂｕｆを備えている。
ＳＣＵ２０３＿０は、矩形画像領域ＢＲを指定するレジスタを備えている。
ＳＣＵ２０３＿０は、各ＰＵ＿ＳＩＭＤ＃０〜＃３に対応した入力バッファｉｎ＿ｂｕｆを備えている。
ＳＣＵ２０３＿０は、矩形画像領域ＢＲから画素データＰｉｘｅｌ（ｘ，ｙ）を読み出し、並べ替えなどのデータ変換処理を施した後に、ストリームデータとして図２７に示す出力バッファｏｕｔ＿ｂｕｆに書き込む。
ＳＣＵ２０３＿０は、矩形画像領域ＢＲを指定するレジスタ値を、ストリームデータとして出力バッファｏｕｔ＿ｂｕｆに書き込む。
ＳＣＵ２０３＿０は、矩形画像領域ＢＲから画素データＰｉｘｅｌ（ｘ，ｙ）を読み出し、並べ替えなどのデータ変換処理を施した後に、ＳＣＵ２０３＿０内にある矩形画像領域ＢＲを指定するレジスタに書き込む。
ＳＣＵ２０３＿０は、入力バッファｉｎ＿ｂｕｆから読み出したデータを、データ変換処理を施した後に、ストリームデータとして出力バッファｏｕｔ＿ｂｕｆに書き込む。【０１０９】
ＳＣＵ２０３＿０は、上述した入力データ変換処理、すなわちＰＵ＿ＳＩＭＤ＃０〜＃３に書き込むためのデータストリームへの変換処理として、例えば、下記表２に示す入力データ変換コマンドに応じて入力データ変換処理を行う。
ＳＣＵ２０３＿０は、図１に示すホストプロセッサ１０１から入力データ変換コマンドを入力して実行する。
ＳＣＵ２０３＿０は、表２に示す各入力データ変換コマンドにおいて、表３に示す従属パラメータを指定できる。【０１１０】
【表２】
0004893621.tif 000005
【０１１１】
【表３】
0004893621.tif 000006
【０１１２】
表２に示したデータ変換コマンドに基づく入力データ変換処理のそれぞれを説明する。
［set#BR#1of4x4#same］
ＳＣＵ２０３＿０は、例えば、ホストプロセッサ１０１から入力データ変換コマンド「set#BR#1of4x4#same」を実行すると、図３４に示すように、その従属パラメータで指定された矩形画像領域ＢＲ内の１画素対応位置から画素データＰｉｘｅｌを読み出し、それを６４個複製して画素データＰｉｘｅｌ（０，．．．６３）を生成し、これを画素データ内部のビット選択の後に、出力バッファｏｕｔ＿ｂｕｆを介してＰＵ＿ＳＩＭＤ処理回路＃０〜＃３に入力される。
ＳＣＵ２０３＿０は、従属パラメータBR#numにより、４ｘ４画素対応位置の矩形画像領域ＢＲを特定する。
ＳＣＵ２０３＿０は、マルチプレクサＭＵＸ１，ＭＵＸ２および論理回路ＬＯＧ１を有する。
マルチプレクサＭＵＸ１は、上記特定した矩形画像領域ＢＲから、従属パラメータyselにより、ｘ方向の４画素対応位置の画素データＰｉｘｅｌを読み出す。
そして、マルチプレクサＭＵＸ２は、上記読み出したｘ方向の４つの画素データＰｉｘｅｌのなかから、従属パラメータxselにより、１つの画素データＰｉｘｅｌを選択して論理回路ＬＯＧ１に出力する。
論理回路ＬＯＧ１は、従属パラメータwselにより、上記選択した１つの画素データＰｉｘｅｌを各々が示す６４個の画素データＰｉｘｅｌを、出力バッファｏｕｔ＿ｂｕｆに書き込む。
論理回路ＬＯＧ１は、従属パラメータwselにより、６４個の画素データＰｉｘｅｌをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、従属パラメータｌｄにより、４画素データＰｉｘｅｌ毎にｌｏａｄ制御を行う。【０１１３】
［set#bxy］
ＳＣＵ２０３＿０は、例えば、ホストプロセッサ１０１から入力データ変換コマンド「set# bxy」を実行すると、図３５に示すように、従属パラメータxsel,yselで選択された矩形画像領域ＢＲの左端座標(bx,by)を32個ずつ複製して６４個の画素データのストリームデータを生成し、従属パラメータwselによる画素データ内部のビット選択の後に、従属パラメータldにより出力バッファｏｕｔ＿ｂｕｆに設定する。
本実施形態では、矩形画像領域ＢＲとして左端座標が異なる８種類が用意されている。
ＳＣＵ２０３＿０は、矩形画像領域ＢＲのｙ方向の値を指定するレジスタｂｙ０〜７と、ｘ方向の値を指定するレジスタｂｘ０〜７とを備えている。
ＳＣＵ２０３＿０は、８個のマルチプレクサＭＵＸ１１を有する。
マルチプレクサＭＵＸ１１の各々は、それぞれ対応するレジスタｂｙの値とレジスタｘｙの値とのうち一方を、従属パラメータyselにより選択して、マルチプレクサＭＵＸ１２に出力する。
ＳＣＵ２０３＿０は、２つのマルチプレクサＭＵＸ１２を備えている。
マルチプレクサＭＵＸ１２は、それぞれ４つのマルチプレクサＭＵＸ１１から入力した値のうち１つを、従属パラメータxselにより選択して論理回路ＬＯＧ３１に出力する。
論理回路ＬＯＧ３１は、従属パラメータwselにより、６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ＃０〜＃３へのｌｏａｄ制御を、従属パラメータｌｄにより、４画素データＰｉｘｅｌ毎に行う。
このように、矩形画像領域ＢＲの左端座標をＰＵ＿ＳＩＭＤ処理回路＃０〜＃３に出力するのは、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３のＰＥにおいて、フィルタ処理などにおいて、当該座標を処理に用いるためである。【０１１４】
［set#BR#8x1#to#bxy］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#BR#8x1#to#bxy 」を実行すると、例えば、図３６に示すように、矩形画像領域ＢＲ内にx方向に連続する2pixelを座標として扱うため、BR#numで選択された矩形画像領域ＢＲ４〜７から８画素データＰｉｘｅｌを選択し、矩形画像領域ＢＲの左端座標(bx,by)に設定する。
このことは、後述する入力データ変換コマンド「WI#data#op=set#BR4567#1of4x4」と組み合わせて指定することで、メモリ間接アドレスを実現する。
すなわち、この例では、矩形画像領域ＢＲ内に、矩形画像領域ＢＲの左端座標が、画素データとして記憶されている。【０１１５】
［set#BR4567#1of4x4］
ＳＣＵ(Stream Control Unit)２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#BR4567#1of4x4」を実行すると、例えば、図３７に示すように、従属パラメータxsel,yselにより、マルチプレクサＭＵＸ１，ＭＵＸ２で４つの矩形画像領域ＢＲからそれぞれ１画素データを読み出し、これを論理回路ＬＯＧ５１に出力する。
論理回路ＬＯＧ５１は、ＳＣＵ２０３＿０から入力した画素データを、従属パラメータwselにより、出力バッファｏｕｔ＿ｂｕｆの所定のビット位置に書き込む。
論理回路ＬＯＧ５１は、従属パラメータwselにより、６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。
この例では、上記４つの矩形画像領域ＢＲの左端座標として、上記「set#BR#8x1#to#bxy」によって設定されたものを用いることで、上記メモリ間接アドレスを実現する。【０１１６】
［set#in#buf#straight］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#in#buf#straight」を実行すると、例えば、図３８に示すように、ＰＵ＿ＳＩＭＤ＃０〜＃３毎に備えられた４本の入力バッファｉｎ＿ｂｕｆのなかから、２本の入力バッファｉｎ＿ｂｕｆ（ｎ），（ｎ−１）を選択する。
入力バッファｉｎ＿ｂｕｆ（ｎ），（ｎ−１）の各々は、１（高さ）×６４（幅）画素データのサイズを有している。
ＳＣＵ２０３＿０は、６４個のマルチプレクサＭＵＸ１を備えている。
６４個のマルチプレクサＭＵＸ１の各々は、入力バッファｉｎ＿ｂｕｆ（ｎ），（ｎ−１）の対応する２つの画素データのうち、一つを従属パラメータyselにより選択して論理回路ＬＯＧ６１に出力する。
論理回路ＬＯＧ６１は、従属パラメータwselにより、６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ処理回路＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。
入力データ変換コマンド「set#in#buf#straight」により、図３に示すＰＵ＿ＳＩＭＤ処理回路＃０〜＃３間でのデータの入出力が可能になる。また、当該入力データ変換コマンド「set#in#buf#straight」によって、ＰＵ＿ＳＩＭＤ＃０〜＃３を直列および並列の何れで接続するかをプログラミング（規定）できる。【０１１７】
［set#in#buf#with#BR#2x1］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#in#buf#with#BR#2x1」を実行すると、例えば、図３９に示すように、ＰＵ＿ＳＩＭＤ＃０〜＃３毎に備えられた４本の入力バッファｉｎ＿ｂｕｆのなかから、２本の入力バッファｉｎ＿ｂｕｆ（ｎ），（ｎ−１）を選択する。
入力バッファｉｎ＿ｂｕｆ（ｎ），（ｎ−１）の各々は、１（高さ）×６４（幅）画素データのサイズを有している。
ＳＣＵ２０３＿０は、６２個のマルチプレクサＭＵＸ１を備えている。
６２個のマルチプレクサＭＵＸ１の各々は、入力バッファｉｎ＿ｂｕｆ（ｎ），（ｎ−１）の対応する２つの画素データのうち、一つを従属パラメータyselにより選択して論理回路ＬＯＧ７１に出力する。
論理回路ＬＯＧ７１は、従属パラメータwselにより、６２画素データと、従属パラメータBR#numで選択された矩形画像領域ＢＲから読み出した２画素データの合計６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ処理回路＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。【０１１８】
［set#in#buf#with#BR#4x1］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#in#buf#with#BR#4x1」を実行すると、例えば、図４０に示すように、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３毎に備えられた４本の入力バッファｉｎ＿ｂｕｆのなかから、２本の入力バッファｉｎ＿ｂｕｆ（ｎ），（ｎ−１）を選択する。
入力バッファｉｎ＿ｂｕｆ（ｎ），（ｎ−１）の各々は、１（高さ）×６４（幅）画素データのサイズを有している。
ＳＣＵ２０３＿０は、６０個のマルチプレクサＭＵＸ１を備えている。
６０個のマルチプレクサＭＵＸ１の各々は、入力バッファｉｎ＿ｂｕｆ（ｎ），（ｎ−１）の対応する２つの画素データのうち、一つを従属パラメータyselにより選択して論理回路ＬＯＧ８１に出力する。
論理回路ＬＯＧ８１は、従属パラメータwselにより、６０画素データと、従属パラメータBR#numで選択された矩形画像領域ＢＲから読み出した４画素データの合計６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ処理回路＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。【０１１９】
［set#BR#16x1］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#BR#16x1」を実行すると、例えば、図４１に示すように、従属パラメータBR#numで選択された矩形画像領域ＢＲ内の１６画素データを４倍に複製して６４画素データのストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファｏｕｔ＿ｂｕｆに書き込む。
論理回路ＬＯＧ９１は、従属パラメータBR#numで選択された矩形画像領域ＢＲ内の１６画素データを４倍に複製して得られた６４画素データを入力し、これら６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ処理回路＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。従って４倍に複製したデータをout#bufに対して１６pixelごとに書き込むことも可能である。【０１２０】
［set#BR#32x1］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#BR#32x1」を実行すると、例えば、図４２に示すように、従属パラメータBR#numで選択された矩形画像領域ＢＲ内の３２画素データを２倍に複製して６４画素データのストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファｏｕｔ＿ｂｕｆに書き込む。
論理回路ＬＯＧ１０１は、従属パラメータBR#numで選択された矩形画像領域ＢＲ内の３２画素データを２倍に複製して得られた６４画素データを入力し、これら６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ処理回路＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。従って２倍に複製したデータをout#bufに対して３２pixelごとに書き込むことも可能である。【０１２１】
［set#BR#64x1］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#BR#64x1」を実行すると、例えば、図４３に示すように、従属パラメータBR#numで選択された矩形画像領域ＢＲ内の６４画素データのストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファｏｕｔ＿ｂｕｆに書き込む。
論理回路ＬＯＧ１１１は、従属パラメータBR#numで選択された矩形画像領域ＢＲ内の６４画素データを入力し、これら６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ処理回路＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。【０１２２】
［set#BR#64x2］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#BR#64x2」を実行すると、例えば、図４４に示すように、従属パラメータBR#numで選択された矩形画像領域ＢＲ内の１２８×１画素データのなかから、従属パラメータxselにより、６４画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファｏｕｔ＿ｂｕｆに書き込む。
６４個のマルチプレクサＭＵＸ２の各々は、従属パラメータBR#numで選択された矩形画像領域ＢＲ内のｘ方向に隣接した２画素データを入力し、従属パラメータxselにより、１画素データを選択して論理回路ＬＯＧ１２１に出力する。
論理回路ＬＯＧ１２１は、従属パラメータwselにより、６４個のマルチプレクサＭＵＸ２から入力した６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。【０１２３】
［set#BR#64x2x2］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#BR#64x2x2」を実行すると、例えば、図４５に示すように、従属パラメータBR#numで選択された矩形画像領域ＢＲ内の１２８×２画素データのなかから、従属パラメータxselにより、６４画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファｏｕｔ＿ｂｕｆに書き込む。
１２８個のマルチプレクサＭＵＸ１の各々は、従属パラメータBR#numで選択された矩形画像領域ＢＲ内のｙ方向に隣接した２画素データを入力し、従属パラメータyselにより、１画素データを選択して、６４個のマルチプレクサＭＵＸ２に出力する。
６４個のマルチプレクサＭＵＸ２は、ｘ方向に隣接する２つの画素データのうち、１の画素データを、従属パラメータxselにより選択して論理回路ＬＯＧ１３１に出力する。
論理回路ＬＯＧ１３１は、従属パラメータwselにより、６４個のマルチプレクサＭＵＸ２から入力した６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ処理回路＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。【０１２４】
［set#BR#64x3］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#BR#64x3」を実行すると、例えば、図４６に示すように、従属パラメータBR#numで選択された矩形画像領域ＢＲ内の１９２×１画素データのなかから、従属パラメータxselにより、６４画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファｏｕｔ＿ｂｕｆに書き込む。
６４個のマルチプレクサＭＵＸ３の各々は、従属パラメータBR#numで選択された矩形画像領域ＢＲ内のｘ方向に隣接した３画素データを入力し、従属パラメータxselにより、１画素データを選択して論理回路ＬＯＧ１４１に出力する。
論理回路ＬＯＧ１４１は、従属パラメータwselにより、６４個のマルチプレクサＭＵＸ３から入力した６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。【０１２５】
［set#BR#64x3x3］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#BR#64x3x3」を実行すると、例えば、図４７に示すように、従属パラメータBR#numで選択された矩形画像領域ＢＲ内の１９２×３画素データのなかから、従属パラメータxselにより、６４画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファｏｕｔ＿ｂｕｆに書き込む。
１９２個のマルチプレクサＭＵＸ４の各々は、従属パラメータBR#numで選択された矩形画像領域ＢＲ内のｙ方向に隣接した３画素データを入力し、従属パラメータyselにより、１画素データを選択して、６４個のマルチプレクサＭＵＸ３に出力する。
６４個のマルチプレクサＭＵＸ３は、マルチプレクサＭＵＸ４から入力したｘ方向に隣接する３つの画素データのうち、１の画素データを、従属パラメータxselにより選択して論理回路ＬＯＧ１５１に出力する。
論理回路ＬＯＧ１５１は、従属パラメータwselにより、６４個のマルチプレクサＭＵＸ３から入力した６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ処理回路＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。【０１２６】
［set#BR#64x4］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#BR#64x4」を実行すると、例えば、図４８に示すように、従属パラメータBR#numで選択された矩形画像領域ＢＲ内の２５６×１画素データのなかから、従属パラメータxselにより、６４画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファｏｕｔ＿ｂｕｆに書き込む。
６４個のマルチプレクサＭＵＸ５の各々は、従属パラメータBR#numで選択された矩形画像領域ＢＲ内のｘ方向に隣接した４画素データを入力し、従属パラメータxselにより、１画素データを選択して論理回路ＬＯＧ１６１に出力する。
論理回路ＬＯＧ１６１は、従属パラメータwselにより、６４個のマルチプレクサＭＵＸ５から入力した６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ処理回路＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。【０１２７】
［set#BR#64x4x4］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#BR#64x4x4」を実行すると、例えば、図４９に示すように、従属パラメータBR#numで選択された矩形画像領域ＢＲ内の２５６×４画素データのなかから、従属パラメータxselにより、６４画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファｏｕｔ＿ｂｕｆに書き込む。
２５６個のマルチプレクサＭＵＸ６の各々は、従属パラメータBR#numで選択された矩形画像領域ＢＲ内のｙ方向に隣接した４画素データを入力し、従属パラメータyselにより、１画素データを選択して、６４個のマルチプレクサＭＵＸ５に出力する。
６４個のマルチプレクサＭＵＸ５は、マルチプレクサＭＵＸ４から入力したｘ方向に隣接する４つの画素データのうち、１の画素データを、従属パラメータxselにより選択して論理回路ＬＯＧ１６１に出力する。
論理回路ＬＯＧ１６１は、従属パラメータwselにより、６４個のマルチプレクサＭＵＸ５から入力した６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ処理回路＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。【０１２８】
［set#BR#64x9］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#BR#64x9」を実行すると、例えば、図５０に示すように、従属パラメータBR#numで選択された矩形画像領域ＢＲ内の５７６×１画素データのなかから、従属パラメータxselにより、６４画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファｏｕｔ＿ｂｕｆに書き込む。
６４個のマルチプレクサＭＵＸ７の各々は、従属パラメータBR#numで選択された矩形画像領域ＢＲ内のｘ方向に隣接した９画素データを入力し、従属パラメータxselにより、１画素データを選択して論理回路ＬＯＧ１７１に出力する。
論理回路ＬＯＧ１７１は、従属パラメータwselにより、６４個のマルチプレクサＭＵＸ７から入力した６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ処理回路＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。【０１２９】
［set#BR#64x9x3］
ＳＣＵ２０３＿０は、ホストプロセッサ１０１から入力データ変換コマンド「set#BR#64x9x3」を実行すると、例えば、図５１に示すように、従属パラメータBR#numで選択された矩形画像領域ＢＲ内の５７６×３画素データのなかから、従属パラメータxselにより、６４画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファｏｕｔ＿ｂｕｆに書き込む。
５７６個のマルチプレクサＭＵＸ８の各々は、従属パラメータBR#numで選択された矩形画像領域ＢＲ内のｙ方向に隣接した３画素データを入力し、従属パラメータyselにより、１画素データを選択して、６４個のマルチプレクサＭＵＸ７に出力する。
６４個のマルチプレクサＭＵＸ７は、マルチプレクサＭＵＸ８から入力したｘ方向に隣接する９つの画素データのうち、１の画素データを、従属パラメータxselにより選択して論理回路ＬＯＧ１８１に出力する。
論理回路ＬＯＧ１８１は、従属パラメータwselにより、６４個のマルチプレクサＭＵＸ７から入力した６４画素データをそのまま出力バッファｏｕｔ＿ｂｕｆに書き込むか、あるいは各画素データＰｉｘｅｌのＬＳＢから４ビットをパックして１６個の画素データＰｉｘｅｌに収納するかを決定する。
ＳＣＵ２０３＿０は、出力バッファｏｕｔ＿ｂｕｆからＰＵ＿ＳＩＭＤ処理回路＃０〜＃３へのｌｏａｄ制御を、４画素データ毎に、従属パラメータｌｄにより行う。【０１３０】
［ＳＣＵ２０３＿０による多重矩形画像領域定義（書き込み時）］
ＳＣＵ２０３＿０は、記憶領域内の矩形画像領域ＷＲ内に、図５２に示すように、２次元論理アドレス表現で多重矩形画像領域として、矩形画像領域ＣＲ，ＤＲを規定できる。
それぞれの位置関係を示す値として以下の座標値が使われる。
wwは、矩形画像領域ＷＲのx方向矩形画像領域幅を示す。
cx,cyは、矩形画像領域ＷＲ内の矩形画像領域ＣＲの２次元座標を示す。これは、矩形画像領域ＷＲの左上を原点(0,0)とした座標系で、矩形画像領域ＣＲの左上の座標を示す。
cw及びchは、矩形画像領域ＣＲの幅と高さを示す。
dx及びdyは、矩形画像領域ＣＲ内の矩形画像領域ＤＲの２次元座標を示す。矩形画像領域ＣＲの左上を原点(0,0)とした座標系で、矩形画像領域ＤＲの左上の座標を示す。
dw及びdhは、矩形画像領域ＤＲの幅と高さを示す。【０１３１】
［ＳＣＵ２０３＿０による矩形画像領域ＤＲの定義モード］
ＳＣＵ２０３＿０は、dx,dy及びdw,dhの値を調整することで、図５３に示すように、矩形画像領域ＣＲを逸脱するように矩形画像領域ＤＲを指定できる。
これにより、ＳＣＵ２０３＿０は、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３からの多様な形態のストリームデータを入力できる。【０１３２】
以下、ＳＣＵ２０３＿０による矩形画像領域ＤＲの指定の形態を示す各種のＤＲモードを説明する。
ＤＲモード１：
ＳＣＵ２０３＿０は、ＤＲモード１に設定されている場合に、矩形画像領域ＣＲから逸脱して矩形画像領域ＤＲを設定可能である。
ＳＣＵ２０３＿０は、矩形画像領域ＤＲが矩形画像領域ＣＲから逸脱した場合に、逸脱した領域に含まれる画素対応位置の画素データの値を矩形画像領域ＣＲに書き込まない。
矩形画像領域ＤＲ内の画素データは、矩形画像領域ＣＲ内では下記式（１０）で規定される。【０１３３】
［数１０］
if((x+dx >= cw )|(y+dy  > ch ))     pixel(x,y)はCRにＷＲiteされない
else    CR(x+dx,y+dy)=pixel(x,y)
…（１０）【０１３４】
ＤＲモード２：
ＳＣＵ２０３＿０は、ＤＲモード２に設定されている場合に、矩形画像領域ＣＲから逸脱して矩形画像領域ＤＲを設定可能である。
ＳＣＵ２０３＿０は、図５４に示すように、矩形画像領域ＤＲがｘ方向に矩形画像領域ＣＲから逸脱した場合、逸脱領域を矩形画像領域ＣＲ内部に折り返すように制御する。
また、ＳＣＵ２０３＿０は、図５４に示すように、矩形画像領域ＤＲがｘ方向とｙ方向とに矩形画像領域ＣＲから逸脱した場合、矩形画像領域ＤＲ内の画素データを矩形画像領域ＣＲ内に書き込まない。
矩形画像領域ＤＲ内の画素データは、矩形画像領域ＣＲ内において、下記式（１１）のように規定される。【０１３５】
［数１１］
if(cw <= x+dx) & (y+dy <= ch-dh)            CR(x+dx-cw, y+dy+dh)=pixel(x,y)
else if (cw <= x+dx) & (ch-dh < y+dy)   pixel(x,y)はCRにＷＲiteされない
else if(ch < y+dx)                      pixel(x,y)はCRにＷＲiteされない
else                               CR(x+dx, y+dy)=pixel(x,y)
…（１１）【０１３６】
［ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３の出力データ変換処理］
ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３が出力したストリームデータは、入力バッファｉｎ＿ｂｕｆに書き込まれる。
ＳＣＵ２０３＿０は、入力バッファｉｎ＿ｂｕｆからデータを読み出し、並べ替えなどのデータ変換処理を施した後に、矩形画像領域ＤＲに書き込む。
また、ＳＣＵ２０３＿０は、必要に応じて、入力バッファｉｎ＿ｂｕｆからデータを読み出し、マスクデータDR#maskに従った並べ替えなどのデータ変換処理を施した後に、矩形画像領域ＤＲに書き込む。
ＳＣＵ２０３＿０は、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３の各々について、上記変換処理を指定できる。
ＳＣＵ２０３＿０は、マスクデータDR#mask を記録するレジスタを備えている。
ＳＣＵ２０３＿０は、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３の各々に対応した入力バッファｉｎ＿ｂｕｆを備えている。【０１３７】
ＳＣＵ２０３＿０は、上述した出力データ変換処理、すなわちＰＵ＿ＳＩＭＤ処理回路＃０〜＃３が出力したストリームを矩形画像領域ＤＲに書き込む処理を、例えば、下記表４に示す出力データ変換コマンドWO#data#opに応じて行う。
ＳＣＵ２０３＿０は、図１に示すホストプロセッサ１０１から出力データ変換コマンドを入力して実行する。
ＳＣＵ２０３＿０は、表４に示す各出力データ変換コマンドにおいて、表５に示す従属パラメータを指定できる。【０１３８】
【表４】
0004893621.tif 000007
【０１３９】
【表５】
0004893621.tif 000008
【０１４０】
以下、上記表４に示した出力データ変換処理のそれぞれを説明する。
［set#DR#mask#64x1］
入力バッファｉｎ＿ｂｕｆ(0-15)の各々には、ＰＵ＿ＳＩＭＤ＃０〜＃３から入力された６４画素データが書き込まれる。なお、１画素データは、４ビットで表現されている。
ここで、例えば、各出力バッファｏｕｔ＿ｂｕｆは、それぞれ図３に示す一つのプロセッサユニットＰＵに予め対応付けられている。
ＳＣＵ２０３＿０は、図５５に示すように、各画素データを構成する４ビットから１ビットを選択し、６４ビットのマスクデータDR#maskとして、マスクレジスタＭＲ１１に書き込む。
マスクデータDR#maskを構成する各ビットは、プロセッサユニットＰＵの出力を、矩形画像領域ＤＲに書き込む場合に、画素データ単位のマスク情報として用いられる。
たとえばマスクデータDR#maskのビットが「１」の場合は画素データを矩形画像領域ＤＲに書き込むことを意味し、「０」の場合には書き込まないことを意味する。
ＳＣＵ２０３＿０が、矩形画像領域ＤＲに実際に画素データを書き込むのは、後述する出力データ変換処理コマンドがset#DR#packed=64x1の場合である。【０１４１】
ＳＣＵ２０３＿０は、従属パラメータDR#numで選択された６４ビット構成のマスクレジスタＭＲ１に１に６４ビットのマスクデータDR#maskを書き込む。
また、ＳＣＵ２０３＿０は、従属パラメータDR#numで選択されたマスクサイズレジスタＭＳＲ１１には６４ビットのマスクデータDR#maskのなかで「１」となっているビット数を書き込む。
従って、マスクサイズレジスタＭＳＲ１１に記憶される値は、０〜６４のいずれかである。【０１４２】
図５５に示すように入力バッファｉｎ＿ｂｕｆ(0-15)の各々には、対応するプロセッサユニットＰＵから入力された６４画素データが書き込まれる。
ビット選択器ＳＥＬ１１は、入力バッファｉｎ＿ｂｕｆ(0-15)に格納されている６４画素データを構成する各４〜１ビットを従属パラメータbselにより選択する。選択は４種類であり各画素データで同じbitが選択される。
ＳＣＵ２０３＿０は、従属パラメータDR#numで選択したマスクレジスタＭＲ１１に、ビット選択器ＳＥＬ１１で選択されたデータをマスクデータDR#maskとして格納する。【０１４３】
［set#DR#packed#64x1］
図５６に示す入力バッファｉｎ＿ｂｕｆ(0-63)の各々には、対応するプロセッサユニットＰＵから入力された６４画素データが書き込まれている。
ＳＣＵ２０３＿０の書き込み制御回路ＷＣ１１は、従属パラメータDR#numで選択された６４ビット構成のマスクレジスタＭＲ１１に記憶されているマスクデータDR#maskに従い、入力バッファｉｎ＿ｂｕｆに記憶されている画素データを、従属パラメータDR#numで選択された矩形画像領域ＤＲに書き込む。
このとき、書き込み制御回路ＷＣ１１は、マスクデータDR#maskの「１」を示すビットに対応する画素データを、矩形画像領域ＤＲのｘ座標の小さいほうから順に詰め合わせて(packして)書き込む。
矩形画像領域ＤＲの幅は、６４画素データで高さは、１画素データであるが、マスクデータDR#maskに応じて画素データをパック（pack）して矩形画像領域ＤＲに書き込むため、矩形画像領域ＤＲ全体に画素データが書き込まれるとは限らない。【０１４４】
［set#DR#64x1］
図５７に示す入力バッファｉｎ＿ｂｕｆ(0-63)の各々には、対応するプロセッサユニットＰＵから入力された６４画素データが書き込まれている。
ＳＣＵ２０３＿０は、入力バッファｉｎ＿ｂｕｆから読み出した６４画素データを、従属パラメータDR#numで選択された矩形画像領域ＤＲ内に書き込む。
本実施形態では、上記矩形画像領域ＤＲのサイズは、６４×１画素データである。【０１４５】
［set#DR#128x1］
図５８に示す入力バッファｉｎ＿ｂｕｆ(0-63)の各々には、対応するプロセッサユニットＰＵから入力された６４画素データが書き込まれている。
ＳＣＵ２０３＿０は、従属パラメータselに従って、入力バッファｉｎ＿ｂｕｆから読み出した６４画素データを、従属パラメータDR#numで選択された矩形画像領域ＤＲ内に書き込む。
本実施形態では、上記矩形画像領域ＤＲのサイズは、１２８×１画素データである。
ＳＣＵ２０３＿０は、従属パラメータpsel=0の場合は矩形画像領域ＤＲのx座標が2の倍数の座標（画素対応位置）に画素データを書き込む。
ＳＣＵ２０３＿０は、従属パラメータpsel=1の場合は、矩形画像領域ＤＲのx座標が２の倍数＋１の座標に画素データを書き込む。【０１４６】
［set#DR#192x1］
図５９に示す入力バッファｉｎ＿ｂｕｆ(0-63)の各々には、対応するプロセッサユニットＰＵから入力された６４画素データが書き込まれている。
ＳＣＵ２０３＿０は、従属パラメータselに従って、入力バッファｉｎ＿ｂｕｆから読み出した６４画素データを、従属パラメータDR#numで選択された矩形画像領域ＤＲ内に書き込む。
本実施形態では、上記矩形画像領域ＤＲのサイズは、１９２×１画素データである。
ＳＣＵ２０３＿０は、従属パラメータpsel=0の場合は矩形画像領域ＤＲのx座標が３の倍数の座標（画素対応位置）に画素データを書き込む。
ＳＣＵ２０３＿０は、従属パラメータpsel=1の場合は、矩形画像領域ＤＲのx座標が３の倍数+1の座標に画素データを書き込む。
ＳＣＵ２０３＿０は、従属パラメータpsel=2の場合は、矩形画像領域ＤＲのx座標が３の倍数+2の座標に画素データを書き込む。【０１４７】
［set#DR#256x1］
図６０に示す入力バッファｉｎ＿ｂｕｆ(0-63)の各々には、対応するプロセッサユニットＰＵから入力された６４画素データが書き込まれている。
ＳＣＵ２０３＿０は、従属パラメータselに従って、入力バッファｉｎ＿ｂｕｆから読み出した６４画素データを、従属パラメータDR#numで選択された矩形画像領域ＤＲ内に書き込む。
本実施形態では、上記矩形画像領域ＤＲのサイズは、２５６×１画素データである。
ＳＣＵ２０３＿０は、従属パラメータpsel=0の場合は矩形画像領域ＤＲのx座標が４の倍数の座標（画素対応位置）に画素データを書き込む。
ＳＣＵ２０３＿０は、従属パラメータpsel=1の場合は、矩形画像領域ＤＲのx座標が４の倍数+1の座標に画素データを書き込む。
ＳＣＵ２０３＿０は、従属パラメータpsel=2の場合は、矩形画像領域ＤＲのx座標が４の倍数+2の座標に画素データを書き込む。
ＳＣＵ２０３＿０は、従属パラメータpsel=3の場合は、矩形画像領域ＤＲのx座標が４の倍数+3の座標に画素データを書き込む。【０１４８】
［ＳＣＵ２０３＿０の動作シーケンス］
図２、図３、図２７に示すＳＣＵ２０３＿０の動作シーケンスについて説明する。
なお、ＳＣＵ２０３＿１〜３は、ＳＣＵ２０３＿０と基本的に同じである。【０１４９】
ＳＣＵ２０３＿０は、４組の内蔵プロセッサ、４組のプログラムメモリ、４組のプログラムカウンタを備えている。
ＳＣＵ２０３＿０は、図１に示すホストプロセッサ１０１から入力したプログラムをプログラムメモリに格納する。
ＳＣＵ２０３＿０の内蔵プロセッサは、プログラムカウンタに従って、上記プログラムメモリからプログラムを読み出して実行する。当該プログラムには、前述したデータ変換コマンドWI#data#op，WO＿data＿opが含まれる。
上記内蔵プロセッサは、例えば、ＲＩＳＣプロセッサである。
上記内蔵プロセッサは、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３の処理開始を指示する。
上記内蔵プロセッサは、矩形画像領域ＷＲ/AR/BR/CR/DRのアドレス、サイズを指定すると共に、アドレスを即値加算、条件分岐などを行う。
上記内蔵プロセッサが実行するコマンド（命令）は、instruction,operand0,displacementからなる。
上記内蔵プロセッサは、finish命令を実行すると、ホストプロセッサ１０１に割り込み信号を出力してプログラムの実行を終了する。【０１５０】
ＳＣＵ２０３＿０の内蔵プロセッサが実行するコマンド（命令）について説明する。
図６１に示すように、上記内蔵プロセッサは、コマンド「ｅｘｅｃ」を実行する。
コマンド「ｅｘｅｃ」は、データ変換コマンドWI#data#op,WO#data#op、並びにそのパラメータであるWI#data#op#param,WO#data#op#paramを指定する。
コマンド「ｅｘｅｃ」は、ＤＭＡ転送を指定するために用いられる。【０１５１】
図６２に示すように、上記内蔵プロセッサは、コマンド「ｂｒａｎｃｈ」を実行する。
コマンド「Ｂｒａｎｃｈ」には、条件なしの静的ループ処理と、条件付の処理とがある。
当該条件付の処理では、矩形画像領域の座標ax,ay,bx,by,cx,cy,dx,dyと即値との比較結果を基に条件を判断する。【０１５２】
図６３に示すように、上記内蔵プロセッサは、コマンド「Ｓｅｔ」を実行する。
コマンド「Ｓｅｔ」は、矩形画像領域ax,ay,aw,ah,bx,by,bw,bhなど座標指定、矩形画像領域cx,cy,cw,ch,dx,dy,dw,dhなどの座標指定などを規定する。
コマンド「Ｓｅｔ」は、矩形画像領域ＷＲを規定するbp,wwを指定する。
コマンド「Ｓｅｔ」は、DMA領域を規定する転送元開始アドレス、転送先開始アドレス、転送サイズを指定する。【０１５３】
図６４に示すように、上記内蔵プロセッサは、コマンド「ａｄｄ／ｓｕｂ」を実行する。
コマンド「ａｄｄ／ｓｕｂ」は、矩形画像領域ax,ay,aw,ah,bx.by,bw,bhなどの座標の加減算、並びに矩形画像領域cx,cy,cw,ch,dx,dy,dw,dhなどの座標の加減算を行う。
また、コマンド「ａｄｄ／ｓｕｂ」は、dxにおいてのみ、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３から設定可能な値を加算可能である。【０１５４】
図６５（Ａ）に示すように、上記内蔵プロセッサは、特別な命令としてプログラムカウンタのみ増加させる「ｎｏ  ｏｐｅｒａｔｉｏｎ」や、プログラム終了を指示する「ｆｉｎｉｓｈ  ｐｒｏｇｒａｍ」などを実行できる。【０１５５】
データ変換コマンドの従属パラメータであるWI#data#op#param,WO#data#op#paramは、例えば、図６５（Ｂ）に示すように規定される。
当該従属パラメータは、データ変換コマンドと対応付けて、ＳＣＵ２０３＿０のメモリに格納される。【０１５６】
図６６に示すように、ＳＣＵ２０３＿０は、コマンド「ｓｔａｒｔ  ＰＵ＿ＳＩＭＤ」を実行することで、ＰＵ＿ＳＩＭＤ＃０〜＃３に処理を開始させる。
ＳＣＵ２０３＿０は、データ変換コマンドWI#data#opを実行することで、矩形画像領域ＷＲから読み出したデータを変換してＰＵ＿ＳＩＭＤ処理回路＃０〜＃３に出力する。
ＳＣＵ２０３＿０は、データ変換コマンドWO＿data＿opを実行することで、ＰＵ＿ＳＩＭＤ＃０〜＃３から入力したデータを変換して矩形画像領域ＷＲに書き込む。
本実施形態では、ＳＣＵ２０３＿０の処理（スレッド）は、図１に示すホストプロセッサ１０１が開始指示する。
ＰＵ＿ＳＩＭＤ(Single Instruction Multiple Data)処理回路＃０〜＃３は各ＰＵ＿ＳＩＭＤ処理に対応した個別のスレッドで動作し、当該スレッドは、ＳＣＵ２０３＿０あるいはホストプロセッサ１０１によって開始指示される。【０１５７】
データ変換コマンドWI#data#op，WO＿data＿opのコマンド、並びに当該コマンドによって入出力されるデータは、図６７に示すように、ＳＣＵ２０３＿０内のキューに蓄えられ、順次実行、並びに処理される。
すなわち、内蔵プロセッサは、記憶領域のリード／ライト共に、コマンドを先行発行して実行する。
そして、内蔵プロセッサは、データ変換コマンドWI#data#op, WO#data#opの実行でアドレス計算を行い、そのアドレスをリードおよびライト別にキューに蓄える。
また、リードおよびライトに伴うデータもキューに蓄える。【０１５８】
［画像処理装置１００の全体動作例］
図１に示すホストプロセッサ１０１はプログラムＰＲＧを実行し、これにより図２に示すＳＣＵ２０３＿０〜３にプログラムを指定する。
ＳＣＵ２０３＿０〜３は、ホストプロセッサ１０１によって指定されたプログラムを実行して得たそれぞれ４本ずつの所定のスレッドに基づいて、それぞれＰＵアレイ２０２＿０〜２０２＿３内のＰＥの処理進行に応じてメモリシステム１０５あるいはローカルメモリ２０４＿０〜３に対するアクセスを実行する。
ＰＵアレイ２０２＿０〜２０２＿３内の図３および図４に示すＰＥは、ＳＣＵ２０３＿０〜３あるいはホストプロセッサ１０１の制御に従って、ＳＣＵ２０３＿０〜３によるメモリアクセス結果を利用しながら、ＳＣＵ２０３＿０〜３とは別のスレッドで動作する。【０１５９】
各ＰＵアレイ２０２＿０〜２０２＿３内では、ＳＣＵ２０３＿０〜２０３＿３によって、ＰＵ＿ＳＩＭＤ＃０〜＃３が並列あるいは直列に選択的に接続されて動作する。
ＰＵ＿ＳＩＭＤ＃０〜＃３内では、図４に示すように、１６個のＰＥ０〜１５がシリアルに接続され、隣接するＰＥ間で必要に応じて画素データの入出力が行われる。【０１６０】
以上説明したように、本実施の形態の画像処理装置１００によれば、画像処理エンジン１０２において、ＰＵアレイ２０２＿０〜２０２＿３内のＰＵ＿ＳＩＭＤ(Single Instruction Multiple Data)単位を共通のスレッドで動作させ、当該スレッドとは別のスレッドでＳＣＵ２０３＿０〜３を動作させる。
これにより、膨大な画素データについて、それに対する処理が予め特定でき、且つ相互に独立であることを利用して、複数のプロセッサエレメント（ＰＥ）において共通のスレッドを基に並列的に実行できる。
ＳＣＵ２０３＿０〜３のスレッドを、ＰＵアレイ２０２＿０〜２０２＿３のスレッドとは別にすることで、ＰＥの処理のバックエンドで、当該ＰＥの処理に係わるデータに関する記憶領域に対してのアクセスを効率的に実現できる。【０１６１】
画像処理エンジン１０２によれば、ＰＵアレイ２０２＿０〜２０２＿３の処理に係わるデータについての記憶領域へのアクセスをＳＣＵ２０３＿０〜３が行うことで、ＰＵアレイ２０２＿０〜２０２＿３のＰＥは記憶領域へのアクセス処理を行う必要がなく、画像処理を効率的に行うことができる。【０１６２】
画像処理エンジン１０２によれば、図３に示すようにプロセッサユニットＰＵがシリアル接続された両側のプロセッサユニットＰＵに画素データを入出力できると共に、図４に示すようにプロセッサユニットＰＵ内でシリアル接続されたＰＥが両側のＰＥに画素データを入出力できる。これにより、各ＰＥが独立してメモリアクセスする場合に比べて、メモリアクセス回数を大幅に削減できる。【０１６３】
本発明は上述した実施形態には限定されない。
すなわち、本発明の技術的範囲またはその均等の範囲内において、上述した実施形態の構成要素に関し、様々な変更、並びに代替を行っても本発明は適用される。
例えば、図２に示す例では、制御プロセッサ２０１によって、複数のＳＣＵ２０３＿０〜３を統括して制御する例を説明したが、図６８に示すように、ＳＣＵ２０３＿０〜３の各々を制御する制御プロセッサ２０１＿０〜２０１＿３を個別に設けてもよい。【０１６４】
＜第２実施形態＞
本第２実施形態の画像処理装置１００は、図１に示すような第１実施形態と同様の構成を有するが、画像処理エンジン１０２の構成が第１実施形態と異なる。画像処理エンジン１０２以外の画像処理装置１００の構成は、第１実施形態と同様であるので、ここでは説明を省略する。
以下、第２実施形態の画像処理エンジン１０２の構成について説明する。【０１６５】
［画像処理エンジン１０２］
第１実施形態と同様、画像処理エンジン１０２は、プログラマブルな画像プロセッサであって、画像処理装置１００で実行されるアプリケーションプログラムに応じてホストプロセッサ１０１が指示する画像処理を実行する。
画像処理の対象となる画像データとしては、センサＩ／Ｆ１０６を介して入力されるカメラモジュール１０７で撮影されたデータ、メモリＩ／Ｆ１０４を介して入力されるメモリシステム１０５に格納されたデータ、記憶媒体Ｉ／Ｆ１０８を介して入力される記憶媒体１０９に格納されたデータ、あるいはコーデックエンジン１０３から与えられるデータ、コーデックエンジン１０３で処理されたデータがある。
画像処理エンジン１０２は、自らの処理結果を、メモリＩ／Ｆ１０４を介してメモリシステム１０５に格納し、記憶媒体Ｉ／Ｆ１０８を介して記憶媒体１０９に格納し、コーデックエンジン１０３に出力し、内蔵表示装置Ｉ／Ｆ１１０を介して内蔵表示装置１１１に表示し、あるいはビデオＩ／Ｆ１１２を介して外部の装置に出力する。【０１６６】
図６９は、第２実施形態の画像処理エンジン１０２の全体構成図である。
図６９に示すように、画像処理エンジン１０２は、制御プロセッサ（ＣＰＵ）２０１、ＰＵ（プロセッサ・ユニット）アレイ２０２＿０〜２０２＿３、並びにローカルメモリ２０４＿０〜２０４＿３を有する。【０１６７】
制御プロセッサ２０１は、画像処理エンジン１０２全体を制御するプロセッサであって、画像処理エンジン１０２の各構成要素に対する設定や起動、およびＳＩＭＤ（Single Instruction Multiple Data）型プロセッサアレイであるＰＵアレイ２０２での並列化が困難な処理の実行を担う。【０１６８】
ＰＵアレイ２０２＿０〜２０２＿３は、プログラマブルな演算部であって、後述するように複数のＳＩＭＤ型プロセッサアレイから構成される。
また、本実施形態のＰＵアレイ２０２＿０〜２０３＿０は、後述するようにＳＣＵ（Stream Control Unit）をその内部に有する点が第１実施形態と異なる。【０１６９】
ローカルメモリ２０４＿０〜２０４＿３は、画像処理エンジン１０２のワーキングメモリであって、メモリシステム１０５に格納された画像データの一部の保持、それぞれＰＵアレイ２０２＿０〜２０２＿３で処理された中間結果の格納、それぞれＰＵアレイ２０２＿０〜２０２＿３で実行されるプログラムや各種パラメータの格納などを行う。【０１７０】
画像処理エンジン１０２は、ホストプロセッサ１０１の制御により、例えば、図６９に示すＰＵアレイ２０２＿０〜２０２＿３を共通のスレッドで動作させる。
共通のスレッドとは、例えば、共通のプログラムに基づいて処理を進めることを意味する。【０１７１】
［ＰＵアレイ２０２＿０〜２０２＿３］
ＰＵアレイ２０２＿０について説明する。
ＰＵアレイ２０２＿１〜２０２＿３は、ＰＵアレイ２０２＿０と同様の構成を有している。
図７０は、図６９に示すＰＵアレイ２０２＿０の構成図である。
図７０に示すように、ＰＵアレイ２０２＿０は、４つのＰＵ＿ＳＩＭＤ（Single Instruction Multiple Data）処理回路＃０〜＃３と、それぞれのＰＵ＿ＳＩＭＤに対応して接続されたＳＣＵ＃１０〜＃１３を有する。【０１７２】
ＰＵ＿ＳＩＭＤ処理回路＃０は、コントロールユニット３０３＿０と、４つのプロセッサユニットＰＵ＃００〜＃０３を有する。
４つのプロセッサユニットＰＵ＃００〜＃０３は、同一命令で動作するSIMD型プロセッサを構成する。
４つのプロセッサユニットＰＵ＃００〜＃０３は、一次元状に横接続されている。
プロセッサユニットＰＵ＃００〜＃０３間の接続を隣接するプロセッサユニット間に限定するとともに、ＳＣＵからのデータ供給に用いるI#BUSを４つのプロセッサユニットで共有することで、配線を少なく出来るとともに、バス制御を簡単にできる。
プロセッサユニットＰＵ＃００〜＃０３は、シリアルに接続したことで、隣接画素データを頻繁に使用する画像処理において、ローカルメモリを介さずに画素データを直接的に、隣接するプロセッサユニットに出力でき、処理時間を短縮できる。
ＰＵ＿ＳＩＭＤ処理回路＃１〜＃３は、ＰＵ＿ＳＩＭＤ処理回路＃０と同様の構成を有している。【０１７３】
［プロセッサユニットＰＵ＃００］
プロセッサユニットＰＵ＃００の構成については、第１実施形態において図４と関連付けて行った説明と同様であるため、ここでは説明を省略する。【０１７４】
ＳＣＵ(Stream Control Unit)＃１０から入力データバスＩ＿ＢＵＳ０を介してプロセッサユニットＰＵ＃００に入力したデータは、ＰＵ＃００内の入力ラインバッファ４０１に書き込まれる。
プロセッサエレメントＰＥ０〜１５の各々は、入力ラインバッファ４０１から読み出したデータを用いて演算を行い、その演算結果を出力ラインバッファ４０４に書き込む。
ＳＣＵ＃１０は、出力ラインバッファ４０４から演算結果を読み出す。【０１７５】
図７０に示すように、ＰＵアレイ２０２＿０は、４つのＰＵ＿ＳＩＭＤ処理回路＃０〜＃３を独立して並列に動作させることも、直列動作させることもできる。直列に動作させる場合には、ＳＣＵ間の接続を利用して接続される。【０１７６】
図７０に示すコントロールユニット３０３＿０は、図示されない命令格納用メモリを有し、当該命令格納用メモリから読み出した命令をデコードして得た制御信号を、ＰＵ＿ＳＩＭＤ＃０内の全てのＰＥに出力する。
コントロールユニット３０３＿０内には、ここには図示されないプログラムフロー制御用ループレジスタや、ＰＥ内のストリームレジスタにアクセスするためのポインタレジスタが含まれる。
ループレジスタは、プログラム中のループ回数を制御するレジスタであり、制御プロセッサ２０１が設定するか、あるいはプログラム実行時に命令により設定することができる。
命令によりループレジスタを設定する場合に、ＰＥ内のレジスタ値をソースオペランドとして指定することができる。その際には複数のＰＥのうち、予め決められたＰＥ、例えば図中左端のＰＥ、例えば、プロセッサユニットＰＵ＃００のＰＥ０、のレジスタ値を使用する。
ポインタレジスタについても、ＰＥ内のレジスタ値をソースオペランドとして指定することができるが、ループレジスタの場合と同様特定のＰＥのレジスタ値を使用する。
コントロールユニット３０３＿１から３０３＿３についても同様である。【０１７７】
以下、カメラモジュール１０７を用いて撮像された静止画像を記録する場合を例に取り上げ、画像処理装置１００における処理手順ならびに処理分配を説明する。【０１７８】
カメラモジュール１０７内の撮像素子で撮影されたデータは、水平スキャンラインごとにセンサＩ／Ｆ１０６を介して読み出され、画像処理エンジン１０２に出力されると共に、メモリシステム１０５に格納される。この際、画像処理エンジン１０２では、検波処理の一部が実行される。
メモリシステム１０５に１フレーム分の画像データが格納されると、画像処理エンジン１０２は、内部のＰＵ＿ＳＩＭＤ処理回路を効率よく並列動作させるため、１フレーム分の画像データのうち、必要な矩形画像領域を読み出しながら検波処理の残りや各種カメラ信号処理、ならびに各種画像処理を実行する。
画像処理エンジン１０２の処理結果は、メモリシステム１０５に格納される。
画像処理エンジン１０２は、解像度変換も行う。解像度変換された画像データは、内蔵表示装置Ｉ／Ｆ１１０を介して内蔵表示装置１１１に表示される。
コーデックエンジン１０３は、メモリシステム１０５に格納されている画像処理エンジン１０２により処理された複数フレームの画像データを用いて画像圧縮を行う。圧縮された画像データは、記憶媒体Ｉ／Ｆ１０８を介して記憶媒体１０９に記録される。【０１７９】
画像処理エンジン１０２は、複数個のＰＵアレイ２０２＿０〜２０２＿３で構成されるが、ぞれぞれのＰＵアレイ２０２＿０〜２０２＿３は、フレーム内の異なる領域を処理する。
本第２実施形態のように４つのＰＵアレイ２０２＿０〜２０２＿３で構成する場合、例えば第１実施形態において図５に関連付けて説明したように、各ＰＵアレイ２０２＿０〜２０２＿３に領域を割り当てることができる。
ＰＵアレイ２０２＿０〜２０２＿３の各々は、前述したように６４個のＰＥから成るＰＵ  ＳＩＭＤ処理回路を複数個有し、例えば第１実施形態において図６に関連付けて説明したように、各ＰＵアレイ２０２＿０〜２０２＿３に割り当てた領域を、さらに横６４ピクセル幅の矩形画像領域に分割し、各ピクセルを１つのＰＥに割り当てることができる。
この時、各ＰＥは、第１実施形態において図７に関連付けて説明したように、自らの割り当てられた縦方向のピクセル列を順に処理する。【０１８０】
例えば、ＰＵアレイ２０２＿０が第１実施形態の図８に示すように、５×５画素のフィルタ処理を行う場合を考える。
この時、ＰＵアレイ２０２＿０内の各ＰＥは、第１実施形態の図８に示すように、処理対象の画素位置Ｐｉｘｅｌの画素データのフィルタ処理を行うために、画素位置Ｐｉｘｅｌを中心とした５×５の画素位置の画素データを用いる。
ＰＵアレイ２０２＿０内の各ＰＥは、図８に示す矢印（図中下向き）に順に処理対象の画素位置を移動させる。
ＰＵアレイ２０２＿０内の各ＰＥが画素位置Ｐｉｘｅｌの上記５×５画素のフィルタ処理を終了すると、は、第１実施形態の図９に示すように、次の１ライン分の画素位置の画素データをローカルメモリ２０４＿０あるいはメモリシステム１０５から読み出してＰＵアレイ２０２＿０内のプロセッサユニットＰＵの入力ラインバッファ４０１に書き込む。
そして、ＰＵアレイ２０２＿０内の各ＰＥは、第１実施形態の図１０に示すように、次の画素位置Ｐｉｘｅｌ＿ｎｅｘｔの画素データの５×５画素のフィルタ処理を行う。【０１８１】
なお、以上の説明では図７０に示すＰＵ＿ＳＩＭＤ＃０を中心に説明したが、ＰＵ＿ＳＩＭＤ＃１〜＃３はＰＵ＿ＳＩＭＤ＃０と同様である。
ＰＵアレイ２０２＿１〜２０２＿３は、ＰＵアレイ２０２＿０と同様である。【０１８２】
［プロセッサエレメントＰＥ］
次に、ＰＥｎ（ｎ＝１〜１４）について説明する。
なお、ＰＥ０はＰＥ間ではＰＥ１との間でのみデータ入出力を行い、ＰＥ１５はＰＥ１４との間でのみデータ入出力を行う点を除いてＰＥｎと同一である。
図７１は、第２実施形態におけるＰＥｎの構成図である。
図７１に示すように、ＰＥｎは、マルチプレクサＭＵＸ１０００、１００１、ストリームレジスタＳＲ０〜ＳＲ３等の各種レジスタ、演算論理ユニットＡＬＵを有する。【０１８３】
入力ラインバッファ４０１は、ＳＣＵ（Stream Control Unit）から送られる入力データを受け取るためのバッファである。１つのＰＥあたり１６ｂｉｔのデータを一段分保持することができる。
出力ラインバッファ４０４は、ＰＥでの演算結果をＳＣＵへ送るためのバッファである。１つのＰＥあたり１６ｂｉｔのデータを一段分保持することができる。【０１８４】
ストリームレジスタＳＲ０〜３は、１６ｂｉｔ幅、エントリ数１６のレジスタファイルであり、各ＰＥは合計４本のＳＲを有する。
ストリームレジスタＳＲ０〜３は、主に、ＳＣＵから供給される演算に必要なデータの格納や、演算結果の一時待避を行うためのレジスタで、直接アドレス指定による参照による参照が可能である。各ストリームレジスタごとに最大４つのポインタを定義できる。各ポインタは、以下の３つの値を持つ。すなわち、ポインタ定義領域の始点である「Start」と、ポインタ定義領域の終点である「End」と、現在のポインタ位置である「Current」である。ただし、End ≧ Startでなければならない。２つのポインタのStartとEndを同一にし、一つをReadポインタ、他方をWriteポインタとして使用することにより、ＦＩＦＯとして機能させることができる。また、ポインタごとにStartとEndを変えてもよい。
また、同一ストリームレジスタ内の全く独立したポインタについて、StartとEndで指定する領域が互いに重複することを禁止はしない。【０１８５】
以下、ストリームレジスタＳＲ０〜３に関連する機能について述べる。
１）ストリームレジスタＳＲ０〜３の参照
ストリームレジスタＳＲ０〜３に対して書き込みあるいは読み出しを行う際の参照方法としては、ポインタ参照と直接参照の２種類がある。
ポインタ参照は、指定したポインタのCurrentからのオフセットで参照する。オフセット値は、読み出しの場合には０〜１５の範囲の正の整数、書き込みの場合は０〜３の範囲の正の整数である。
直接参照は、ストリームレジスタＳＲ０〜３内のエントリを即値で指定する。即値は、０〜１５の範囲の正の整数である。【０１８６】
２）ポインタ操作
以下に示すようなポインタ操作を実現する命令が用意されている。
ａ）ポインタが持つ値の即値指定
Start、Endの各値を即値により指定する。
ｂ）Current値に対する即値加算
加算する即値は、−８〜７の範囲の整数である。
ｃ）ポインタが持つ値の初期化
Start、End、Currentの各値は、リセット後に、それぞれ、０、１５、０に初期化される。また、Current値をStart値に初期化する命令も用意されている。【０１８７】
３）Wraparound
ストリームレジスタＳＲ０〜３に対するポインタ参照やポインタ操作を行った際に、<Start,End>で定義される領域を超えることがある。この場合には、以下のようなWraparoundが行われる。ここで、ストリームレジスタＳＲ０〜ＳＲ３のエントリへのWraparound前と後のindexをそれぞれidxbw、idxawとすると、
idxaw = (idxbw > End)?
Start + (idxbw-End-1) % (End-Start+1) : idxbw
idxaw = (idxbw < Start)?
End - (Start-idxbw-1) % (End-Start+1) : idxbw
である。【０１８８】
４）連結モード
４つあるストリームレジスタＳＲ０〜３のうち、ＳＲ０とＳＲ１あるいはＳＲ２とＳＲ３の組み合わせについて、同一ポインタで指定されるポインタ定義領域どうしを連結して使用することができる。例えば、ＳＲ０とＳＲ１の組み合わせについて、ポインタ０を連結した場合には、ＳＲ０用ポインタ０のStartとEndで定義される領域とＳＲ１用ポインタ０のStartとEndで定義される領域が連結される。あるポインタについて連結モードを指定すると、ストリームレジスタペアのうち偶数側のポインタのみ有効となる。偶数側のポインタ値がEndを超えると、自動的に奇数側のポインタ領域にポインタ値が変更され、あたかも両領域が連続しているように使用することができる。また、奇数側のポインタ領域のEndを超えると、自動的に偶数側のStart値に変更されるWraparoud機能も実現する。この機能により、２つのストリームレジスタの空き領域を有効利用したり、１６エントリを超えるポインタ領域を定義したりすることができる。ポインタの動作モードとして連結モードが設定された場合には、偶数側のポインタのみ使用できる。連結モードの設定は、ストリームレジスタ単位ではなく、ポインタ単位で設定する。したがって、各ポインタに対する連結モードの設定は互いに独立している。【０１８９】
ＰＥが有する他のレジスタ群について簡単に説明する。
レジスタＳ０〜Ｓ３は、４個の汎用レジスタであり、それぞれ１６ｂｉｔ長である。３２ｂｉｔデータを扱う演算を行う場合には、連続する２つのレジスタ、すなわちＳ０とＳ１あるいはＳ２とＳ３をレジスタ・ペアとしてオペランド指定することができる。
レジスタＴＥＭＰＳはデータ長が１６ビットの一時退避用レジスタである。
レジスタＴＥＭＰＳは、共有機能ユニット４０３を利用する際に用いられるレジスタであり、共有機能ユニット４０３へのアクセス以外の場合では、ワーキングレジスタとして使用できる。これらのレジスタは、算術論理演算命令のソースオペランドとデスティネーションオペランドの両方に指定できる。【０１９０】
レジスタＣＯＮＤは、主に条件実行を行う際に用いられるデータ長が４ビットのコンディションレジスタである。算術論理演算のデスティネーションオペランドとして指定可能で、その際には、演算結果のうちの任意の１ビット、演算論理ユニットＡＬＵにおける演算の結果、キャリーが立った事を示すキャリーフラグ、あるいは演算結果が０であることを示すゼロフラグのどれかの選択とコンディションレジスタのどのビットに反映させるかを指定する。
レジスタＰＥＮＵＭは、自身のプロセッシングエレメント番号（０〜６３)が格納されているデータ長が６ビットのプロセッサ番号レジスタであり、読み出し専用である。
図７１においてＣｏｎｓｔと記載されたパスは、レジスタＣＯＮＳＴＡＮＴをソースオペランドとして指定した場合に定数値を渡すパスであり、１６ｂｉｔ幅である。レジスタＣＯＮＳＴＡＮＴは、複数のレジスタで構成される。レジスタＣＯＮＳＴＡＮＴは、ＰＥ毎に持つわけではなく、ＳＣＵ内に持たれる。【０１９１】
ＰＥでは、演算を行う際に、自身のレジスタだけでなく、隣接するＰＥのレジスタを参照することができる。すなわち、ＰＥ１はＰＥ０とＰＥ２のレジスタを参照できる。ただし、隣接ＰＥ間で参照できるのは、汎用レジスタＳ０〜Ｓ３のみである。図７１において、To Left PE、To Right PE と記載したパスが、それぞれ左隣接ＰＥ、右隣接ＰＥに汎用レジスタＳ０〜Ｓ３の値を渡すパスである。また、From Left PE、From Right PE と記載したパスが、それぞれ左隣接ＰＥ、右隣接ＰＥから選択されたレジスタの値を受け取るパスである。本第２実施形態のＰＥは、左隣接ＰＥ用と右隣接ＰＥ用とに別々のマルチプレクサを用意しているので、左右それぞれ異なる汎用レジスタ参照を同一サイクルで行うことができるので、処理を早く行うことができる。なお、ＰＥ０及びＰＥ１５が参照できるのは、左右いずれかのＰＥのレジスタのみとなる。【０１９２】
次に演算論理ユニットＡＬＵについて説明する。
図７１に示すように、ＰＥは３種類の演算論理ユニットを持ち、これら３つの演算論理ユニットを用いた演算を同時実行可能である。３種類の演算論理ユニットは、乗算を行うユニットであるOperator Resource Mと、主に加減算や比較演算を行うユニットであるOperator Resource A/Bと、主に論理演算やシフトを行うユニットであるOperator Resource Lである。【０１９３】
ＰＥでの演算に必要なデータは、ＳＣＵによって入力ラインバッファ４０１に書き込まれる。入力ラインバッファ４０１の容量は、１ＰＥあたり１６ｂｉｔ幅１段分である。また、ＰＥで演算された結果は出力ラインバッファ４０４に書き込まれる。入力ラインバッファ４０１と同じく、その容量は、１ＰＥあたり１６ｂｉｔ幅１段分である。
ＰＥは、ロード命令により入力ラインバッファ４０１に書き込まれたデータをストリームレジスタＳＲ０〜ＳＲ３に転送する。ストリームレジスタＳＲ０〜ＳＲ３へは、入力ラインバッファの他に、レジスタＣＯＮＤからのロードも可能である。逆に、ストリームレジスタＳＲ０〜ＳＲ３からレジスタＣＯＮＤへデータを移動する命令も用意されている。
出力ラインバッファ４０４への書き込みは、通常は演算命令のデスティネーションオペランドに直接指定することにより行うが、レジスタＣＯＮＤから出力ラインバッファ４０４へデータを移動する命令も用意されている。
これらデータ転送は、演算論理ユニットＡＬＵが行う演算と並行して行われる。
すなわち、第２実施形態のＰＥでは、同時に複数の演算を行うことができる。
共有機能ユニット４０３については、第１実施形態において行った説明と同様であるため、説明を省略する。【０１９４】
［ＳＣＵ（Stream Control Unit）＃１０〜＃１３］
以下、ＳＣＵ＃１０について説明する。
ＳＣＵ＃１１〜＃１３は、ＳＣＵ＃１０と同じである。【０１９５】
ＳＣＵ＃１０は、図７０等に示すように、複数のＰＵ＿ＳＩＭＤ（Single Instruction Multiple Data）処理回路＃０に対して、それを構成する個々のプロセッサエレメントＰＥの処理に必要なデータを効率よくデータを入出力するための制御を行う。
同様に、ＳＣＵ＃１１はＰＵ＿ＳＩＭＤ処理回路＃１に対して、ＳＣＵ＃１２はＰＵ＿ＳＩＭＤ処理回路＃２に対して、ＳＣＵ＃１３はＰＵ＿ＳＩＭＤ処理回路＃３に対して、それを構成する個々のプロセッサエレメントＰＥの処理に必要なデータを効率よくデータを入出力するための制御を行う。【０１９６】
ＳＣＵ＃１０は、処理に必要なデータを半導体メモリなどに代表される記憶装置に収納する。
ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３は、ＳＩＭＤ型プロセッサであるため、すべてのＰＥに対する入出力は時間的に同時に行われる。従って、ＳＣＵ＃１０によるＰＵ＿ＳＩＭＤ＃０に対する入出力は、ＰＥの個数分の入出力データを同時に入出力することになる。以下同時に入出力されるデータを、ストリームデータと呼ぶことにする。【０１９７】
一方、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３は画像情報の処理を主に行うが、処理対象である画像情報は、メモリなどの記憶装置において、物理的な１次元のアドレスで管理された記憶領域内に、論理的な２次元記憶領域を確保して記憶されている。その画像データの基本単位は画素データと呼ばれる。
ＳＣＵ＃１０は、ＰＵ＿ＳＩＭＤ処理回路＃０と、メモリシステム１０５およびローカルメモリ２０４＿０との間に位置し、複数の画素データをストリームデータに変換して入出力を行う機能を持っている。【０１９８】
次に、ＳＣＵ＃１０の構造について説明する。
図７２は、ＳＣＵ＃１０の構造を示すブロック図である。
図７２に示すように、ＳＣＵ＃１０は、書き込み部＃１０１と、読み込み部＃１０２と、制御部＃１０３とからなる。【０１９９】
書き込み部＃１０１は、ローカルメモリ２０４＿０またはメモリシステム１０５（以下記憶領域）への書き込みを行う。
読み込み部＃１０２は、記憶領域からの読み込みを行う。
制御部＃１０３は、ＳＣＵ＃１０の全体的な制御を行うＣＰＵ等の制御装置であり、データ処理やＰＵ＿ＳＩＭＤ処理回路＃０へのデータ供給を行う。【０２００】
以下、ＳＣＵ＃１０が記憶領域内に定義する矩形画像領域について説明する。
ＳＣＵ＃１０が扱う記憶領域内の矩形画像領域の階層構成を、図７３を参照して説明する。
図７３に示すように、ＳＣＵ＃１０は、記憶領域中に、入力作業領域として矩形画像領域ＷＩＲを指定する。
ＳＣＵ＃１０は、矩形画像領域ＷＩＲ内に、画素データの読み出し元である矩形画像領域ＢＲを指定する。
ＳＣＵ＃１０は、ホストプロセッサ１０１から入力したプログラムに基づいて、矩形画像領域ＢＲから読み出した画素データを、ＰＵ＿ＳＩＭＤ処理回路＃０〜＃３が必要とするストリームデータに変換するデータ変換コマンドWI#data#opを実行（指定）する。
ＳＣＵ＃１０は、後述するように矩形画像領域ＢＲ及びＷＩ＿ｄａｔａ＿ｏｐ指定の一連の繰り返し処理をプログラム可能である。【０２０１】
図７３に示すように、ＳＣＵ＃１０は、記憶領域中に、出力作業領域として矩形画像領域ＷＯＲを指定する。
ＳＣＵ＃１０は、矩形画像領域ＷＯＲ内に、画素データの書き込み先である矩形画像領域ＤＲを指定する。
ＳＣＵ＃１０は、ＰＵ＿ＳＩＭＤ＃０の出力ストリームデータから、矩形画像領域ＤＲへのデータ変換コマンドWO#data#opを実行する。
ＳＣＵ＃１０は、後述するように矩形画像領域ＤＲ、ＷＯ＿ｄａｔａ＿ｏｐ指定は、一連の繰り返し処理をプログラム可能である。
ＳＣＵ＃１０は、矩形画像領域ＢＲは矩形画像領域ＷＩＲ内の、矩形画像領域ＤＲは矩形画像領域ＷＯＲ内の、任意の位置への配置と移動可能である。
ＳＣＵ＃１０は、矩形画像領域ＷＩＲ或いはＷＯＲ内において、矩形画像領域ＢＲ或いはＤＲを、２次元論理座標で指定が可能である。
ＳＣＵ＃１０は、記憶領域に対して矩形画像領域ＷＩＲ或いはＷＯＲを物理アドレスで指定できる。
ＳＣＵ＃１０は、矩形画像領域ＷＩＲ、ＷＯＲ、ＢＲ、ＤＲ内部の画素データがアクセスされた場合には、記憶領域へアクセスが必要になるため、論理アドレスから物理アドレスへの変換を行って記憶領域にアクセスする。【０２０２】
図７４は、ＳＣＵ＃１０内部に設定される多重矩形画像領域に関する処理を行う機能を説明するための図である。
図７４に示すように、ＳＣＵ＃１０は、ＰＵ＿ＳＩＭＤ処理回路＃０に、記憶領域内の矩形画像領域ＷＩＲ０及びＷＯＲ０を割り当てる。
矩形画像領域ＷＩＲ０及びＷＯＲ０は、メモリシステム１０５やローカルメモリ２０４＿０などの記憶領域内に規定される。
また、本実施形態のＳＣＵ＃１０は、記憶領域中にＷＩＲ０〜ＷＩＲ７の８種類のＷＩＲと、ＷＯＲ０〜ＷＯＲ７までの８種類のＷＯＲを定義することが可能である。更に、それぞれの矩形画像領域ＷＩＲ０〜ＷＩＲ７に矩形画像領域ＢＲ０〜ＢＲ７が、ＷＯＲ０〜ＷＯＲ７にＤＲ０〜ＤＲ７が、それぞれ１つずつ規定される。【０２０３】
図７２に示すＳＣＵ＃１０は、データ変換コマンドＷＩ＿ｄａｔａ＿ｏｐにより、矩形画像領域ＢＲ内のデータをストリームデータへ変換して、出力バッファｏｕｔ＿ｂｕｆにWriteする。
また、ＳＣＵ＃１０は、データ変換コマンドWO#data#opにより、ＰＵ＿ＳＩＭＤ処理回路＃０から入力して入力バッファin#bufに収納されているストリームデータをデータ変換して矩形画像領域ＤＲにWriteする。【０２０４】
図７２を参照して上述したように、矩形画像領域ＷＩＲ内に矩形画像領域ＢＲ、ＷＯＲ内にＤＲを階層構造で規定することで、例えば、矩形画像領域ＷＩＲ内で矩形画像領域ＢＲを、ＷＯＲ内でＤＲを相対的に移動させる場合に、基準座標を矩形画像領域ＢＲ、ＤＲ内のローカルな座標に加算する形式でのアドレス表現が可能になり、プログラミングが簡単になる。
本実施形態では、矩形画像領域の個数や多重指定の階層数などを具体的な数字で表現しているが、その構成や数量は組み合わせ自由であり、幅広い画像処理の必要性に応じて構成を変えることが可能である。
すなわち、第１実施形態のＳＣＵ２０３＿０が矩形画像領域内にＡＲ或いはＣＲを設定し、さらにその中にＢＲ或いはＤＲを設定していたが、本第２実施形態のＳＣＵ＃１０によれば、ＷＲの中にＡＲ及びＣＲを設定せずにＢＲ及びＤＲを設定しているので、ＳＣＵ＃１０の動作は簡略化され、動作速度が速くなる。【０２０５】
次に、ＳＣＵ＃１０がデータ転送のために行う接続を説明する。
［システムバス接続］
図１に示すシステムバス１１３は、ＳＣＵ＃１０を、ホストプロセッサ１０１およびメモリシステム１０５などの他の処理モジュールを接続するバスであり、以下の特徴を有する。
（１）システムバス１１３は、ＬＳＩやＳＯＣ内部で標準化されたバス規格を採用することが可能である。
（２）システムバス１１３のバス幅は１２８ビットであり、連続データ転送(バースト転送)が可能な構成とすることで、バス使用効率を向上できる。
（３）システムバス１１３上の記憶装置（例えば、メモリシステム１０５）に対して、ＳＣＵ＃１０はバスマスタとしてアクセスする。
（４）システムバス１１３上のＳＣＵ＃１０以外のバスマスタから、ＳＣＵ＃１０の内部レジスタやＳＣＵ専用記憶装置（例えば、、ローカルメモリ２０４＿０）へのアクセスを行う。
（５）システムバス１１３は、データ転送効率や機能が満足されるのであれば、バス規格にはこだわらない選択が可能である。【０２０６】
［ＳＣＵ＃１０の専用記憶領域接続］
ＳＣＵ＃１０は、専用記憶領域として専用記憶装置を接続することが可能である。
専用記憶装置はＳＲＡＭやＤＲＡＭなどの半導体メモリがＳＯＣ内部と外部のどちらにあろうとも選択可能である。
上記専用記憶装置は、システムバス１１３より広帯域なバスに接続される。
上記専用記憶装置は、１つのＳＣＵ＃１０が占有して使用する目的で用意されている。
システムバス１１３上のバスマスタから、上記専用記憶装置へのアクセスが可能である。【０２０７】
［ＰＵ＿ＳＩＭＤ接続］
ＳＣＵ＃１０には、ＰＵ＿ＳＩＭＤ処理回路＃０がバス接続される。
同様に、ＳＣＵ＃１１にはＰＵ＿ＳＩＭＤ処理回路＃１が、ＳＣＵ＃１２にはＰＵ＿ＳＩＭＤ処理回路＃２が、ＳＣＵ＃１３にはＰＵ＿ＳＩＭＤ処理回路＃３がバス接続される。
ＳＣＵ＃１０からＰＵ＿ＳＩＭＤ処理回路＃０へのストリームデータ入力は、ＰＵ＿ＳＩＭＤ処理回路＃０に２５６ビットの単方向バスを使用する。転送効率は２５６bit/clockである。
data/転送プロトコルとして２線式のハンドシェークを採用する。
ＳＣＵ＃１０内部には出力バッファｏｕｔ＿ｂｕｆを用意する。
ＳＣＵ＃１０から出力を行う場合は、ＰＵ＿ＳＩＭＤ処理回路＃０に対してアドレスを指定することでＰＵ＿ＳＩＭＤ処理回路内部レジスタを識別する。
ＰＵ＿ＳＩＭＤ処理回路＃０からＳＣＵ＃１０へのストリームデータ入力は、各ＰＵ＿ＳＩＭＤの２５６ビットの単方向バスを使用し、転送効率は２５６bit/clockである。
また、データ転送プロトコルとして２線式のハンドシェークを採用する。
ＳＣＵ＃１０内部には入力用の入力バッファｉｎ＿ｂｕｆを用意する。
ＰＵ＿ＳＩＭＤ処理回路＃０からＳＣＵ＃１０へ入力を行う場合は、ＰＵ＿ＳＩＭＤに対してアドレスを指定することでＰＵ＿ＳＩＭＤ処理回路内部レジスタを識別する。【０２０８】
［ＳＣＵ＃１０の物理論理アドレス変換］
ＳＣＵ＃１０がアクセスする図７３および図７４を用いて説明した記憶領域内の矩形画像領域ＷＲ内部の画素対応位置Ｐｉｘｅｌは２次元論理アドレスで表現されているが、メモリシステム１０５およびローカルメモリ２０４＿０は物理アドレスで表現されている。従って、ＳＣＵ＃１０は、矩形画像領域ＷＲ内の矩形画像領域ＡＲ，ＢＲ，ＣＲ，ＤＲ内部に指定された画素対応位置Ｐｉｘｅｌに対してReadまたはＷＲiteを行う場合は、２次元論理アドレスから物理アドレスへのアドレス変換を行う。
アドレス変換の方法については、第１実施形態と同様であるためここでは説明を省略する。【０２０９】
［ＳＣＵ＃１０による記憶領域へのアクセス］
ＳＣＵ＃１０は、上述したように、記憶領域として、システムバス１１３に接続された大規模外部記憶装置であるメモリシステム１０５と、小規模な専用記憶装置であるローカルメモリ２０４＿０を使用することができる。
メモリシステム１０５は、例えば、ＳＣＵ＃１０が含まれるSOCの外部に接続されるDRAM-CHIPであり、一般的なDDRやRAMBUSなどのメモリchipなどである。
ローカルメモリ２０４＿０は、例えば、ＳＣＵ＃１０が含まれるSOC内部のSRAMやeDRAM (Embedede-DRAM:SCUと同じSOCに含まれるOn-chip DRAM)などである。【０２１０】
一般的に、ＤＲＡＭは、Raw/Column/bankといったアドレスの階層構造があり、同一のRawに含まれる連続データアクセスは高速であるが、Raw境界をまたがった連続データアクセスや、遠隔のRaw同士の連続アクセスは、ページプリチャージなどの処置を必要とするため、低速となるという特徴がある。
本実施形態では、ＳＣＵ＃１０は、例えば、メモリシステム１０５やローカルメモリ２０４＿０として、DRAMを使用しているが、SRAMであっても問題はない。また、DRAMを使用する場合、上記アクセス性能の不連続性を可能な限り避ける目的で、記憶領域内の画素データの矩形画像配列を、ストリームデータ生成時には可能な限り同一ページに配置する工夫をすることで、DRAMアクセスの不連続性を可能な限り低減する処置をとることができる。
この工夫は、たとえば第１実施形態で説明した方法等により実現することができる。【０２１１】
［ＳＣＵ＃１０による多重矩形画像領域定義（読み出し時）］
ＳＣＵ＃１０は、上述したように、記憶領域内の矩形画像領域ＷＩＲ内に、図７５に示すように、２次元論理アドレス表現で多重矩形画像領域として、矩形画像領域ＢＲを規定できる。
ＷＩＲは、記憶領域中に物理アドレッシング可能な連続領域として定義される。
また、ＷＩＲ内部のｐｉｘｅｌの指定は、ＳＣＵによって論理アドレッシングにより定義される。
ここでｐｉｘｅｌは１６ｂｉｔ固定サイズで論理アドレッシングされる。ただし、記憶領域の情報量削減のために、１ｐｉｘｅｌを１２ｂｉｔ或いは８ｂｉｔで表現することもでき、この場合は、記憶領域内部とＳＣＵでのｐｉｘｅｌ表現の違い（例えば、記憶領域内では８ｂｉｔ／ｐｉｘｅｌの場合、ＳＣＵ内部の１ｐｉｘｅｌが記憶領域内の２ｐｉｘｅｌと等価）に留意する必要がある。【０２１２】
また、ＷＩＲ内にはＢＲを定義することができる。
ＢＲは、ＷＩＲ内に論理アドレス空間で定義される。
ＢＲは、ＷＩＲの部分コピーではなくアドレスマッピング変換でアクセスする。
ＢＲを定義する際には、ＷＩＲを逸脱して定義することもできるが、逸脱した場合のｐｉｘｅｌ値は保障されない。
ＢＲは、ＢＲ０〜ＢＲ７の８種類存在する。
ＢＲ領域は、ＢＲｎ（ｎ＝０〜７）ごとに矩形の左端座標（図７５におけるｂｘ、ｂｙ）を指定できる。
ＢＲ領域の矩形サイズは、以下の８種類の中からｗｉ＿ｄａｔａ＿ｏｐによって指定される。すなわち、水平方向１６、３２、４８、６４ｐｉｘｅｌで垂直方向に１ｐｉｘｅｌの領域、あるいは水平方向に１ｐｉｘｅｌで垂直方向に１６、３２、４８、６４ｐｉｘｅｌの領域のいずれかである。【０２１３】
それぞれの位置関係を示す値として以下の座標値が使われる。
wirwは、矩形画像領域ＷＩＲのx方向矩形画像領域幅である。
bx及びbyは、矩形画像領域ＷＩＲ内の矩形画像領域ＢＲの２次元座標を示す。矩形画像領域ＷＩＲの左上を原点(0,0)とした座標系で、矩形画像領域ＢＲの左上の画素対応位置Ｐｉｘｅｌの座標を示す。
bw及びbhは、矩形画像領域ＢＲの幅と高さを示す。
x及びyは、矩形画像領域ＢＲ内の画素対応位置Ｐｉｘｅｌの２次元座標を示す。矩形画像領域ＢＲの左上を原点(0,0)とした座標系である。【０２１４】
［ＳＣＵ＃１０によるＰＵ＿ＳＩＭＤ＃０へのデータ入力処理］
ＳＣＵ＃１０は、矩形画像領域ＢＲから画素データＰｉｘｅｌ（ｂｘ，ｂｙ）を読み出し、これをデータストリームへデータに変換して（入力データ変換処理を行って）ＰＵ＿ＳＩＭＤ処理回路＃０に入力させる。この処理は、第１実施形態において説明した処理と同様であるため、説明を省略する。【０２１５】
［ＳＣＵ＃１０による多重矩形画像領域定義（書き込み時）］
ＳＣＵ＃１０は、記憶領域内の矩形画像領域ＷＯＲ内に、図７６に示すように、２次元論理アドレス表現で多重矩形画像領域として、矩形画像領域ＤＲを規定できる。
ＷＯＲは、記憶領域中に物理アドレッシング可能な連続領域として定義される。
また、ＷＯＲ内部のｐｉｘｅｌの指定は、ＳＣＵによって論理アドレッシングにより定義される。
ここでｐｉｘｅｌは１６ｂｉｔ固定サイズで論理アドレッシングされる。ただし、記憶領域の情報量削減のために、１ｐｉｘｅｌを１２ｂｉｔ或いは８ｂｉｔで表現することもでき、この場合は、記憶領域内部とＳＣＵでのｐｉｘｅｌ表現の違い（例えば、記憶領域内では８ｂｉｔ／ｐｉｘｅｌの場合、ＳＣＵ内部の１ｐｉｘｅｌが記憶領域内の２ｐｉｘｅｌと等価）に留意する必要がある。【０２１６】
また、ＷＯＲ内にはＤＲを定義することができる。
ＤＲは、ＷＯＲ内に論理アドレス空間で定義される。
ＤＲは、ＷＯＲの部分コピーではなくアドレスマッピング変換でアクセスする。
ＤＲを定義する際には、ＷＯＲを逸脱して定義することもできるが、逸脱した場合のｐｉｘｅｌ値は保障されない。
ＤＲは、ＤＲ０〜ＤＲ７の８種類存在する。
ＤＲ領域は、ＤＲｎ（ｎ＝０〜７）ごとに矩形の左端座標（図７６におけるｄｘ、ｄｙ）を指定できる。
ＤＲ領域の矩形サイズは、以下の８種類の中からｗｏ＿ｄａｔａ＿ｏｐによって指定される。すなわち、水平方向１６、３２、４８、６４ｐｉｘｅｌで垂直方向に１ｐｉｘｅｌの領域、あるいは水平方向に１ｐｉｘｅｌで垂直方向に１６、３２、４８、６４ｐｉｘｅｌの領域のいずれかである。
それぞれの位置関係を示す値として以下の座標値が使われる。
worwは、矩形画像領域ＷＯＲのx方向矩形画像領域幅を示す。
dx及びdyは、矩形画像領域ＷＯＲ内の矩形画像領域ＤＲの２次元座標を示す。矩形画像領域ＷＲの左上を原点(0,0)とした座標系で、矩形画像領域ＤＲの左上の座標を示す。
dw及びdhは、矩形画像領域ＤＲの幅と高さを示す。【０２１７】
［ＰＵ＿ＳＩＭＤ処理回路＃０の出力データ変換処理］
ＰＵ＿ＳＩＭＤ処理回路＃０が出力したストリームデータは、入力バッファｉｎ＿ｂｕｆに書き込まれる。
ＳＣＵ＃１０は、入力バッファｉｎ＿ｂｕｆからデータを読み出し、並べ替えなどのデータ変換処理を施した後に、矩形画像領域ＤＲに書き込む。
また、ＳＣＵ＃１０は、必要に応じて、入力バッファｉｎ＿ｂｕｆからデータを読み出し、マスクデータDR#maskに従った並べ替えなどのデータ変換処理を施した後に、矩形画像領域ＤＲに書き込む。
これらの処理に関しては、第１実施形態においてＳＣＵ２０３＿０が行う処理と同様であるため、説明を省略する。【０２１８】
［画像処理装置１００の全体動作例］
図１に示すホストプロセッサ１０１はプログラムＰＲＧを実行し、これにより図７０に示すＳＣＵ＃１０〜＃１３にプログラムを指定する。
ＳＣＵ＃１０〜＃１３は、ホストプロセッサ１０１によって指定されたプログラムを実行して得たそれぞれ４本ずつの所定のスレッドに基づいて、それぞれＰＵアレイ２０２＿０〜２０２＿３内のＰＥの処理進行に応じてメモリシステム１０５あるいはローカルメモリ２０４＿０〜３に対するアクセスを実行する。
ＰＵアレイ２０２＿０〜２０２＿３内のＰＥは、ＳＣＵ２０３＿０〜３あるいはホストプロセッサ１０１の制御に従って、ＳＣＵ＃１０〜＃１３によるメモリアクセス結果を利用しながら、ＳＣＵ＃１０〜＃１３とは別のスレッドで動作する。【０２１９】
各ＰＵアレイ２０２＿０〜２０２＿３内では、ＳＣＵ＃１０〜＃１３とＰＵ＿ＳＩＭＤ＃０〜＃３とがそれぞれ接続されて動作する。
ＰＵ＿ＳＩＭＤ＃０〜＃３内では、１６個のＰＥ０〜１５がシリアルに接続され、隣接するＰＥ間で必要に応じて画素データの入出力が行われる。【０２２０】
以上説明したように、本第２実施形態の画像処理装置１００によれば、画像処理エンジン１０２において、ＰＵアレイ２０２＿０〜２０２＿３内のＰＵ＿ＳＩＭＤ(Single Instruction Multiple Data)単位を共通のスレッドで動作させ、当該スレッドとは別のスレッドでＳＣＵ＃１０〜＃１３を動作させる。
これにより、膨大な画素データについて、それに対する処理が予め特定でき、且つ相互に独立であることを利用して、複数のプロセッサエレメント（ＰＥ）において共通のスレッドを基に並列的に実行できる。更に、第２実施形態のＰＥでは、同時に複数の演算を行うことができるため、装置全体の処理速度が向上する。
また、ＳＣＵ＃１０〜＃１３のスレッドを、ＰＵアレイ２０２＿０〜２０２＿３のスレッドとは別にすることで、ＰＥの処理のバックエンドで、当該ＰＥの処理に係わるデータに関する記憶領域に対してのアクセスを効率的に実現できる。【０２２１】
画像処理エンジン１０２によれば、ＰＵアレイ２０２＿０〜２０２＿３の処理に係わるデータについての記憶領域へのアクセスをＳＣＵ＃１０〜＃１３行うことで、ＰＵアレイ２０２＿０〜２０２＿３のＰＥは大規模な記憶領域へのアクセス処理を行う必要がなく、画像処理を効率的に行うことができる。【０２２２】
画像処理エンジン１０２によれば、プロセッサユニットＰＵがシリアル接続された両側のプロセッサユニットＰＵに画素データを入出力できると共に、プロセッサユニットＰＵ内でシリアル接続されたＰＥが両側のＰＥに画素データを入出力できる。これにより、各ＰＥが独立してメモリアクセスする場合に比べて、メモリアクセス回数を大幅に削減できる。【０２２３】
更に、本第２実施形態の画像処理装置１００によれば、ＰＵ＿ＳＩＭＤ毎にＳＣＵを割り当て個別に処理を行うので、ＳＣＵにかかる負荷が軽減され、画像処理に要する時間が短縮される。
更に、本第２実施形態の画像処理装置１００によれば、ＳＣＵ＃１０〜＃１３の記憶領域内に定義する多重矩形画像領域がＷＲとＢＲ（或いはＤＲ）の２重のみであるので、処理が簡略化され、画像処理装置１００全体にかかる負荷が軽減され、処理に要する時間が短縮される。【０２２４】
本発明は上述した実施形態には限定されない。
すなわち、本発明の技術的範囲またはその均等の範囲内において、上述した実施形態の構成要素に関し、様々な変更、並びに代替を行っても本発明は適用される。【０２２５】
上述した実施形態では、多量のデータを扱う画像処理を例示したが、画像処理以外に各種のデータ処理についても本発明を適用可能である。
すなわち、本発明は、ＰＵ＿ＳＩＭＤ処理回路のように、それぞれ複数のプロセッサエレメントＰＥを有する複数のプロセッサユニットＰＵを用いて信号処理を分散処理する場合に、各プロセッサユニットＰＵ内の対応する各プロセッサエレメントＰＥに記憶手段からいかに効率よく対応するデータを提供する、あるいは、逆の各プロセッサエレメントＰＥからのデータを整合性を保って記憶手段に書き込むという処理を行う、各種の信号処理に適用できる。【０２２６】
本実施形態で説明したＰＵアレイ２０２＿０〜２０２＿３、ＳＣＵ２０３＿０〜２０３＿３、プロセッサユニットＰＵ、プロセッサエレメントＰＥの数は任意である。
【図１】
0004893621.tif 000009
【図２】
0004893621.tif 000010
【図３】
0004893621.tif 000011
【図４】
0004893621.tif 000012
【図５】
0004893621.tif 000013
【図６】
0004893621.tif 000014
【図７】
0004893621.tif 000015
【図８】
0004893621.tif 000016
【図９】
0004893621.tif 000017
【図１０】
0004893621.tif 000018
【図１１】
0004893621.tif 000019
【図１２】
0004893621.tif 000020
【図１３】
0004893621.tif 000021
【図１４】
0004893621.tif 000022
【図１５】
0004893621.tif 000023
【図１６】
0004893621.tif 000024
【図１７】
0004893621.tif 000025
【図１８】
0004893621.tif 000026
【図１９】
0004893621.tif 000027
【図２０】
0004893621.tif 000028
【図２１】
0004893621.tif 000029
【図２２】
0004893621.tif 000030
【図２３】
0004893621.tif 000031
【図２４】
0004893621.tif 000032
【図２５】
0004893621.tif 000033
【図２６】
0004893621.tif 000034
【図２７】
0004893621.tif 000035
【図２８】
0004893621.tif 000036
【図２９】
0004893621.tif 000037
【図３０】
0004893621.tif 000038
【図３１】
0004893621.tif 000039
【図３２】
0004893621.tif 000040
【図３３】
0004893621.tif 000041
【図３４】
0004893621.tif 000042
【図３５】
0004893621.tif 000043
【図３６】
0004893621.tif 000044
【図３７】
0004893621.tif 000045
【図３８】
0004893621.tif 000046
【図３９】
0004893621.tif 000047
【図４０】
0004893621.tif 000048
【図４１】
0004893621.tif 000049
【図４２】
0004893621.tif 000050
【図４３】
0004893621.tif 000051
【図４４】
0004893621.tif 000052
【図４５】
0004893621.tif 000053
【図４６】
0004893621.tif 000054
【図４７】
0004893621.tif 000055
【図４８】
0004893621.tif 000056
【図４９】
0004893621.tif 000057
【図５０】
0004893621.tif 000058
【図５１】
0004893621.tif 000059
【図５２】
0004893621.tif 000060
【図５３】
0004893621.tif 000061
【図５４】
0004893621.tif 000062
【図５５】
0004893621.tif 000063
【図５６】
0004893621.tif 000064
【図５７】
0004893621.tif 000065
【図５８】
0004893621.tif 000066
【図５９】
0004893621.tif 000067
【図６０】
0004893621.tif 000068
【図６１】
0004893621.tif 000069
【図６２】
0004893621.tif 000070
【図６３】
0004893621.tif 000071
【図６４】
0004893621.tif 000072
【図６５】
0004893621.tif 000073
【図６６】
0004893621.tif 000074
【図６７】
0004893621.tif 000075
【図６８】
0004893621.tif 000076
【図６９】
0004893621.tif 000077
【図７０】
0004893621.tif 000078
【図７１】
0004893621.tif 000079
【図７２】
0004893621.tif 000080
【図７３】
0004893621.tif 000081
【図７４】
0004893621.tif 000082
【図７５】
0004893621.tif 000083
【図７６】
0004893621.tif 000084