(57)【要約】【課題】高速なメモリアクセスができるメモリコントローラを得ること。【解決手段】夫々のメモリ領域に対応するアクセス制御ポインタの値を、予め夫々のメモリ領域に対して設定されているアクセスモードに応じて夫々異なるタイミングで単位ＳＩＭＤ分インクリメントするポインタ算出ハードウェア部３２と、メモリ領域のアクセス制御ポインタの値に基づいてメモリ領域におけるアクセス先アドレスを算出し、該算出したアクセス先アドレスへアクセス手段にＳＩＭＤ単位のメモリアクセスを行わせるメモリアクセス制御ハードウェア部３３と、を備える。【選択図】        図１
2010033507.tif 000002
【特許請求の範囲】
【請求項１】
一つ以上のメモリ領域に対してアクセス手段が画素データをＳＩＭＤ単位で読み出す読み出しアクセスまたは画素データをＳＩＭＤ単位で書き込む書き込みアクセスであるメモリアクセスをメモリ領域毎に制御するメモリコントローラであって、
前記夫々のメモリ領域に対応するアクセス制御ポインタの値を、予め夫々のメモリ領域に対して設定されているアクセスモードに応じて夫々異なるタイミングで単位ＳＩＭＤ分インクリメントするポインタ算出ハードウェア部と、
前記メモリ領域のアクセス制御ポインタの値に基づいて前記メモリ領域におけるアクセス先アドレスを算出し、該算出したアクセス先アドレスへ前記アクセス手段にＳＩＭＤ単位のメモリアクセスを行わせるメモリアクセス制御ハードウェア部と、
を備えることを特徴とするメモリコントローラ。
【請求項２】
前記アクセス制御ポインタは、書き込みポインタまたは読み出しポインタであって、
前記アクセスモードは、
書き込みアクセスが行われた後、書き込みポインタをインクリメントし、所定の更新命令が発行された後、読み出しポインタをインクリメントする第１モードと、書き込みアクセスが行われた後、書き込みポインタをインクリメントし、読み出しアクセスが行われた後、読み出しポインタをインクリメントする第２モードと、書き込みアクセスが行われた後、書き込みポインタをインクリメントする第３モードと、
を含み、
前記メモリアクセス制御ハードウェア部は、
アクセス手段から前記第１モード、第２モード、または第３モードに設定されているメモリ領域に対する書き込み要求を受信したとき、該メモリ領域に対応する書き込みポインタの値に基づいて書き込み先アドレスを算出し、該算出した書き込み先アドレスへ書き込み要求送信元のアクセス手段に画素データをＳＩＭＤ単位で書き込ませ、
前記第１モードまたは第２モードに設定されているメモリ領域に対する読み出し要求を受信したとき、該メモリ領域に対応する読み出しポインタの値に基づいて読み出し先アドレスを算出し、該算出した読み出し先アドレスから読み出し要求送信元のアクセス手段に画素データをＳＩＭＤ単位で読み出させる、
ことを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記アクセス手段は、
入力される画素データをＳＩＭＤ単位で第１モードに設定されたメモリ領域である入力用メモリ領域に書き込む書き込みアクセスを行う入力変換器と、
前記入力用メモリ領域に書き込まれた画素データをＳＩＭＤ単位で読み出す読み出しアクセスと、該読み出したＳＩＭＤ単位の画素データに対して画像処理演算処理を行い、画像処理演算処理後のＳＩＭＤ単位の画素データを第１モードに設定されたメモリ領域である出力用メモリ領域に書き込む書き込みアクセスと、前記画像処理演算処理によりＳＩＭＤ単位で発生する一時データを第２モードまたは第３モードに設定された一つ以上のメモリ領域である一時データ記憶用メモリ領域に書き込む書き込みアクセスおよび該一時データを前記一時データ記憶用メモリ領域から読み出す読み出しアクセスと、を行うＳＩＭＤ演算器と、
前記一時データ記憶用メモリ領域に書き込まれたＳＩＭＤ単位の一時データを読み出す読み出しアクセスと、該読み出したＳＩＭＤ単位の一時データに対して画像処理演算処理し、画像処理演算処理後のＳＩＭＤ単位の一時データを前記一時データ記憶用メモリ領域に書き込む書き込みアクセスを行う専用演算器と、
前記出力用メモリ領域から画素データをＳＩＭＤ単位で読み出す読み出しアクセスを行い、該読み出したＳＩＭＤ単位の画素データを出力する出力変換器と、
を含むことを特徴とする請求項２に記載のメモリコントローラ。
【請求項４】
メモリ領域の容量および該メモリ領域のアクセスモードを設定する設定情報をメモリ領域毎に記憶するメモリコントローラ設定レジスタをさらに備えることを特徴とする請求項１〜３の何れか一つに記載のメモリコントローラ。
【請求項５】
請求項２に記載のメモリコントローラと、
入力される画素データをＳＩＭＤ単位で第１モードに設定されたメモリ領域である入力用メモリ領域に書き込む書き込みアクセスを行う入力変換器と、前記入力用メモリ領域に書き込まれた画素データをＳＩＭＤ単位で読み出す読み出しアクセスと、該読み出したＳＩＭＤ単位の画素データに対して画像処理演算処理を行い、画像処理演算処理後のＳＩＭＤ単位の画素データを第１モードに設定されたメモリ領域である出力用メモリ領域に書き込む書き込みアクセスと、前記画像処理演算処理によりＳＩＭＤ単位で発生する一時データを第２モードまたは第３モードに設定された一つ以上のメモリ領域である一時データ記憶用メモリ領域に書き込む書き込みアクセスおよび該一時データを前記一時データ記憶用メモリ領域から読み出す読み出しアクセスと、を行うＳＩＭＤ演算器と、前記一時データ記憶用メモリ領域に書き込まれたＳＩＭＤ単位の一時データを読み出す読み出しアクセスと、該読み出したＳＩＭＤ単位の一時データに対して画像処理演算処理し、画像処理演算処理後のＳＩＭＤ単位の一時データを前記一時データ記憶用メモリ領域に書き込む書き込みアクセスを行う専用演算器と、前記出力用メモリ領域から画素データをＳＩＭＤ単位で読み出す読み出しアクセスを行い、該読み出したＳＩＭＤ単位の画素データを出力する出力変換器と、を含むアクセス手段と、
を有する画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＳＩＭＤ処理を行う画像処理装置に搭載されるメモリコントローラおよび該画像処理装置に関する。
【背景技術】
【０００２】
従来、ビデオカメラやデジタルスチルカメラなどの撮像装置などには、ＣＭＯＳセンサなどから出力された撮像画像に種々の処理を行うために、入出力用に設けられたメモリに記憶される画素のデータに対してＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）型の演算を行う演算器を備える画像処理装置が用いられているものがある。このような画像処理装置においては、画像データを入出力するためのメモリにＳＩＭＤ型の演算器がアクセスする際、ＳＩＭＤ型の演算器はアドレス計算用の信号を付加したアクセス要求を発行し、プログラムが該信号を元にアドレス計算を行い、ＳＩＭＤ型の演算器は、この計算によって求められた物理アドレスにアクセスする。
【０００３】
このような画像処理装置を高性能化する技術として、特許文献１に、Ｒｅａｄ／Ｗｒｉｔｅメモリアドレスを時分割で切り替えることによって、画像処理装置に搭載されるメモリを効率的に使用する技術が開示されている。また、特許文献２には、撮像画像のデータのビット幅に合わせてメモリのライン幅を切り分けるとともに、理論上複数の分割ラインメモリを構成し、設定される画像処理機能情報に従って分割ラインメモリを画像処理回路と対応するように入出力する技術が開示されている。
【０００４】
しかしながら、画像処理装置を高性能化するためには、メモリ使用の効率化だけでなく、メモリに対するメモリアクセスを高速化することが非常に重要である。特許文献１および特許文献２は、メモリアクセスの高速化に関する効果的な技術は開示されていない。
【０００５】
【特許文献１】特開２００５−７８３４４号公報
【特許文献２】特開平１０−３４０３４０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明は、高速なメモリアクセスができるメモリコントローラおよび画像処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本願発明の一態様によれば、一つ以上のメモリ領域に対してアクセス手段が画素データをＳＩＭＤ単位で読み出す読み出しアクセスまたは画素データをＳＩＭＤ単位で書き込む書き込みアクセスであるメモリアクセスをメモリ領域毎に制御するメモリコントローラであって、前記夫々のメモリ領域に対応するアクセス制御ポインタの値を、予め夫々のメモリ領域に対して設定されているアクセスモードに応じて夫々異なるタイミングで単位ＳＩＭＤ分インクリメントするポインタ算出ハードウェア部と、前記メモリ領域のアクセス制御ポインタの値に基づいて前記メモリ領域におけるアクセス先アドレスを算出し、該算出したアクセス先アドレスへ前記アクセス手段にＳＩＭＤ単位のメモリアクセスを行わせるメモリアクセス制御ハードウェア部と、を備えることを特徴とするメモリコントローラが提供される。
【発明の効果】
【０００８】
本発明によれば、ＳＩＭＤ処理を行う際に高速なメモリアクセスが可能となるという効果を奏する。
【発明を実施するための最良の形態】
【０００９】
以下に添付図面を参照して、この発明にかかる画像処理装置の最良な実施の形態を詳細に説明する。
【００１０】
（第１の実施の形態）
図１は、本発明の第１の実施の形態にかかる画像処理装置の構成を示すブロック図である。
【００１１】
図１において、第１の実施の形態の画像処理装置１ａは、データメモリ２と、メモリコントローラ３と、入力Ｓ／Ｐ（シリアルパラレル）変換器４と、出力Ｐ／Ｓ（パラレルシリアル）変換器５と、ＳＩＭＤ演算器６と、を有する。
【００１２】
メモリコントローラ３は、典型的にはＤＲＡＭで構成されるデータメモリ２を仮想的に複数の領域に分割し、分割した夫々の領域（以下、ＭＣ（メモリコントローラ）領域という）に対して、画像処理対象の撮像画像の入出力に関する読み出しおよび書き込みアクセスを行うラインモードか、書き込まれたデータを書き込まれた順番で読み出すアクセスを行うＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）モードか、書き込まれた一時データを書き込まれた順番と関係なく指定されたアドレスを読み出すアクセスを行うＦＩＲＯ（Ｆｉｒｓｔ  Ｉｎ  Ｒａｎｄｏｍ  Ｏｕｔ）モードか、のうちの予め設定されているアクセス制御方法（アクセスモード）でデータメモリ２に対するメモリアクセスの制御を行う。
【００１３】
具体的には、メモリコントローラ３は、各ＭＣ領域についてＭＣ領域の容量および該ＭＣ領域のアクセスモードの設定を定義するメモリコントローラ設定レジスタ３１と、各ＭＣ領域が夫々有するアクセス制御ポインタを夫々のＭＣ領域に設定されているアクセスモードに応じたタイミングでインクリメントするポインタ算出部３２と、入力Ｓ／Ｐ変換器４、出力Ｐ／Ｓ変換器５、およびＳＩＭＤ演算器６から読み出し要求や書き込み要求などのアクセス要求を受信したとき、アクセス先のＭＣ領域のアクセス制御ポインタの値を参照してアクセス先の物理アドレスを算出し、算出した物理アドレスへ要求送信元にアクセスさせるメモリアクセス制御部３３と、を備える。ここで、メモリアクセス制御部３３およびポインタ算出部３２は、ハードウェア回路により構成される。メモリコントローラ設定レジスタ３１に記憶される各ＭＣ領域の容量およびアクセスモードの設定は、例えば初期設定時に外部インターフェースなどからの入力に基づいて設定されるようにするとよい。
【００１４】
データメモリ２は、メモリコントローラ３に接続されており、前記するようにメモリコントローラ３によって仮想的に複数のＭＣ領域に分割され、夫々のＭＣ領域に対するアクセスモードが設定されている。
【００１５】
入力Ｓ／Ｐ変換器４は、メモリコントローラ３に接続されており、画像フレームの横方向のラインを左から右に走査し、１ラインの水平走査が終わったら走査対象ラインを下に一つ移動させる、いわゆるラスタスキャン状に外部から入力される画像フレームのデータを受信し、受信したデータをメモリコントローラ３に書き込む。このとき、入力Ｓ／Ｐ変換器４は、受信するデータが、後述するＳＩＭＤ演算器６が一度に同一の演算処理を行うデータの単位量である単位ＳＩＭＤ分溜まる毎にメモリコントローラ３に書き込み要求を発行し、該溜まったデータを所定のＭＣ領域（以下、入力用ＭＣ領域という）に書き込む。入力用ＭＣ領域は、ラインモードに設定されたＭＣ領域が使用される。
【００１６】
ＳＩＭＤ演算器６は、内部に有するプロセッサの数に等しい数の画素に対して夫々同一の演算を行うことができるプロセッサである。つまり、前述の単位ＳＩＭＤ分のデータは、ＳＩＭＤ演算器６が備えるプロセッサの数と同じ数の画素により構成される。例えばＳＩＭＤ演算器６が８個のプロセッサを備える場合、ＳＩＭＤデータは８個の画素のデータで構成される。そして、一つの画素のデータが１６ビットの幅を持つとすると、単位ＳＩＭＤ分のデータ１６ビットを８個分合算した値である１６バイトのバイト幅を持つこととなる。以降、単位ＳＩＭＤ分の画素からなるデータを、単にＳＩＭＤデータということとする。
【００１７】
ＳＩＭＤ演算器６は、メモリコントローラ３に接続されており、メモリコントローラ３に対して読み出し要求を発行して入力用ＭＣ領域からＳＩＭＤデータを読み出し、該読み出したＳＩＭＤデータに対して演算処理を行い、演算処理後のＳＩＭＤデータをメモリコントローラ３に対して書き込み要求を発行して入力用ＭＣ領域とは異なる所定のＭＣ領域（以降、出力用ＭＣ領域という）に書き込む。出力用ＭＣ領域は、ラインモードに設定されたＭＣ領域が使用される。
【００１８】
ＳＩＭＤ演算器６は、演算途中に発生する一時データの保存先として、ＦＩＦＯモードまたはＦＩＲＯモードに設定されているＭＣ領域を適宜使用する。ＳＩＭＤ演算器６は、ＦＩＦＯモードまたはＦＩＲＯモードに設定されているＭＣ領域に一時データの書き込みや読み出しを行う場合も、ラインモードにアクセスする場合と同様に、書き込み要求や読み出し要求を発行する。ＳＩＭＤ演算器６は、ＳＩＭＤデータに対して演算を行うので、演算途中に発生する一時データもＳＩＭＤデータである。
【００１９】
出力Ｐ／Ｓ変換器５は、メモリコントローラ３に接続されており、メモリコントローラ３に対して読み出し要求を発行して出力用ＭＣ領域に書き込まれたＳＩＭＤデータを読み出し、読み出したＳＩＭＤデータを外部にラスタスキャン状に出力する。
【００２０】
次に、メモリコントローラ３が備える各構成部の機能および動作について、アクセスモード毎に詳細に説明する。
【００２１】
（ラインモード）
画像処理装置１ａは、入力される画像フレームの広い範囲、例えば注目する画素の周辺の３×３のマトリクスに含まれる画素データを使用して該注目する画素に対して画像処理を行うことがある。したがって、外部との入出力用のメモリ領域である当該アクセスモードの夫々のＭＣ領域は、夫々のＭＣ領域が画像フレームにおけるライン単位の容量を持つように設定される。
【００２２】
各ＭＣ領域は、論理アドレスがデータメモリ２の先頭のアドレスから順次連続するように確保される。つまり、各ＭＣ領域の先頭アドレスの値は、一つ前のＭＣ領域の先頭アドレスに該ＭＣ領域の容量を加えることにより算出できる。例えばデータメモリ２の先頭のアドレスから順番にＭＣ領域ａ、ＭＣ領域ｂ、ＭＣ領域ｃをラインモードに設定する場合、データメモリ２の先頭の論理アドレスをＭＴＯＰとすると、ＭＣ領域ａ〜ｃおよびＭＣ領域ｃの次の領域であるＭＣ領域ｄの先頭アドレスは、
ＭＣ領域ａの先頭アドレス＝ＭＴＯＰ、
ＭＣ領域ｂの先頭アドレス＝ＭＴＯＰ＋（ＭＣ領域ａが記憶するライン数）×（単位ラインあたりに含まれる画素数）×（一つの画素のバイト幅）、
ＭＣ領域ｃの先頭アドレス＝（ＭＣ領域ｂの先頭アドレス）＋（ＭＣ領域ｂが記憶するライン数）×（単位ラインあたりに含まれる画素数）×（一つの画素のバイト幅）、
ＭＣ領域ｄの先頭アドレス＝（ＭＣ領域ｃの先頭アドレス）＋（ＭＣ領域ｃが記憶するライン数）×（単位ラインあたりに含まれる画素数）×（一つの画素のバイト幅）
となる。
【００２３】
ラインモードが設定されたＭＣ領域に対しては、アクセス制御ポインタとして書き込みポインタおよび読み出しポインタが用意される。ポインタ算出部３２は、ラインモードで確保されたＭＣ領域において、一つのＳＩＭＤデータが書き込まれる度に、書き込まれたＭＣ領域に用意されているＷｒｉｔｅポインタの値に単位ＳＩＭＤデータあたりのバイト幅分をインクリメント、すなわち
Ｗｒｉｔｅポインタ＋＝（一つの画素のバイト幅）×（単位ＳＩＭＤが含む画素の数）
の演算を行い、書き込みが行われたＭＣ領域のＷｒｉｔｅポインタを変化させる。ポインタ算出部３２は、ＭＣ領域の先頭アドレスをＷｒｉｔｅポインタの初期状態とする。
【００２４】
ポインタ算出部３２は、プログラムから更新命令が発行される度に、該発行されたＭＣ領域に用意されているＲｅａｄポインタに単位ＳＩＭＤデータあたりのバイト幅をインクリメント、すなわち、
Ｒｅａｄポインタ＋＝（一つの画素のバイト幅）×（単位ＳＩＭＤが含む画素の数）
の演算を行い、Ｒｅａｄポインタを変化させる。ポインタ算出部３２は、Ｒｅａｄポインタの初期状態を、
初期Ｒｅａｄポインタ＝Ｗｒｉｔｅポインタ−（一つの画素のバイト幅）×（単位ＳＩＭＤが含む画素の数）−（単位ラインあたりに含まれる画素数）×（一つの画素のバイト幅）×（設定ライン数）／２
とする。ここで、設定ライン数とは、ＲｅａｄポインタとＷｒｉｔｅポインタとの位置関係を決定するためにラインモードのＭＣ領域毎に初期設定時などに入力されて設定される数値であって、通常はＲｅａｄポインタとＷｒｉｔｅポインタとが当該ＭＣ領域において最も遠い位置関係となるように、当該ＭＣ領域が記憶できるライン数が設定される。設定ライン数は、メモリコントローラ設定レジスタ３１に記憶されるようにするとよい。
【００２５】
ポインタ算出部３２は、算出したＲｅａｄポインタおよびＷｒｉｔｅポインタが当該ＭＣ領域の最後尾からオーバーフローする場合、該ポインタの値をラップアラウンドして該ＭＣ領域の先頭のアドレスに移動するようにする。
【００２６】
メモリアクセス制御部３３は、ラインモードに設定されたＭＣ領域に対する書き込み要求を受信したとき、メモリコントローラ設定レジスタ３１を参照してＷｒｉｔｅポインタの値から書き込み先の物理アドレスを算出し、該算出したアドレスへ書き込み要求送信元に書き込み要求されたＳＩＭＤデータを書き込ませる。このとき、前記するポインタ算出部３２の演算動作により、前回ＳＩＭＤデータが書き込まれた位置から単位ＳＩＭＤ分インクリメントされているので、論理アドレス上で前回書き込まれたＳＩＭＤデータに連続するようにＳＩＭＤデータが書き込まれることとなる。
【００２７】
すなわち、例えば入力用ＭＣ領域を例にとると、入力Ｓ／Ｐ変換器４から入力された画像フレームのデータは、該入力用ＭＣ領域において入力された順番に、ラップアラウンドされるまで連続したアドレスに書き込まれるので、書き込まれたＳＩＭＤデータの並びは画像フレームにおけるＳＩＭＤデータの並びに対応したものとなる。ラップアラウンドされた後は、既に書き込まれたＳＩＭＤデータを上書きするように、入力Ｓ／Ｐ変換器４から入力されるデータが入力される順番に入力用ＭＣ領域に連続したアドレスに順次書き込まれる。因みに、入力Ｓ／Ｐ変換器４が入力用ＭＣ領域にＳＩＭＤデータを書き込んだ順番を変えることなく書き込まれる限り、ラインモードに設定された他のＭＣ領域に書き込まれているＳＩＭＤデータの並びにおいても画像フレームにおける位置関係は保存される。
【００２８】
メモリアクセス制御部３３は、ラインモードに設定されたＭＣ領域に対する読み出しに関して、読み出し位置に関する指定がない読み出し要求に対する読み出し方法と、読み出し位置に関する指定がある読み出し方法と、の２種類の読み出し制御を行うことができる。まず、１つ目の読み出し方法を説明する。
【００２９】
メモリアクセス制御部３３は、読み出し位置に関する指定がない読み出し要求を受信したとき、Ｒｅａｄポインタの値から物理アドレスを算出し、該算出したアドレスに書き込まれているＳＩＭＤデータを読み出し要求送信元に読み出させる。このとき、前回読み出されたＳＩＭＤデータに連続するようにＳＩＭＤデータが読み出されることとなる。例えば入力用ＭＣ領域からＳＩＭＤデータを読み出す場合、上述するようにＳＩＭＤデータの並びは画像フレームにおけるデータの並びに対応したものであるので、該入力用ＭＣ領域に入力された順番でＳＩＭＤデータを読み出すことができる。
【００３０】
続いて、２つ目の読み出し方法を説明する。メモリアクセス制御部３３は、Ｒｅａｄポインタの位置を基準とし、入力された撮像画像の画像フレームを、ライン方向をｘ軸方向、ラインの垂直走査方向をｙ軸方向とする座標に見立てた座標系における相対位置を指定した読み出し要求に対応する読み出しを行うことができる。該読み出し要求を受信したとき、指定された相対位置の物理アドレスを算出して、該アドレスからＳＩＭＤデータを読み出させる。以降、このように指定された相対位置からＳＩＭＤデータを読み出す読み出し方をディスプレースメントＲｅａｄという。相対位置の指定方法は、例えばメモリコントローラ設定レジスタ３１に予め記憶しておき、読み出し要求から該記憶された相対位置を指定するようにするとよい。また、このとき、記憶されている相対位置は、メモリコントローラ設定レジスタ３１に記憶されている相対位置を変更する命令によって変更されるようにするとよい。
【００３１】
相対位置として（ｘ、ｙ）を指定するディスプレースメントＲｅａｄの読み出し要求を受信すると、メモリアクセス制御部３３は、Ｒｅａｄポインタの位置からｘ個のＳＩＭＤデータのバイト分だけ前の位置に遡り、さらに該位置からｙ個の単位ラインのバイト分だけ遡るＳＩＭＤデータが書き込まれている位置の物理アドレスを算出する。すなわち、メモリアクセス制御部３３は、
（ディスプレースメントＲｅａｄ位置）＝Ｒｅａｄポインタ−ｘ×（一つの画素のバイト幅）×（単位ＳＩＭＤが含む画素の数）−ｙ×（単位ラインあたりに含まれる画素数）×（一つの画素のバイト幅）
の演算を行ってディスプレースメントＲｅａｄ位置を求め、該位置から物理アドレスを算出し、該アドレスに書き込まれているＳＩＭＤデータを読み出させる。ここで、ｘ、ｙは整数である。
【００３２】
メモリアクセス制御部３３は、ディスプレースメントＲｅａｄ位置を算出する場合に該位置が当該ＭＣ領域が確保されている論理アドレスの先頭アドレスを下回ったり、最後尾のアドレスを上回ったりする場合、ラップアラウンド処理を行う。
【００３３】
したがって、前述の入力用ＭＣ領域のように画像フレームにおける位置関係が保存された形でＳＩＭＤデータが書き込まれているＭＣ領域に対してディスプレースメントＲｅａｄが行われると、ＭＣ領域に書き込まれているライン分の範囲で、実際の画像フレームにおけるＲｅａｄポインタが示すＳＩＭＤデータが示す位置からの相対位置にある画素のデータをＳＩＭＤ幅分読み出すことができる。
【００３４】
図２は、入力用ＭＣ領域として使用されているＭＣ領域ａの状態の一例を説明する図である。データメモリ２に記入されている各数字は、わかり易くするためにデータメモリ２をＳＩＭＤデータサイズ毎に区切り、データメモリ２の先頭の論理アドレスから順番に割り振られた番号（以降、ＳＩＭＤ番号という）である。
【００３５】
図２において、ＭＣ領域ａとして、１ラインあたり１６個のＳＩＭＤデータからなる画像フレームの画素データを４ライン分記憶する容量が確保されている。図示する画像フレームにおける斜線部分に示す４ライン分の画素データがＭＣ領域ａに記憶されている。ＷｒｉｔｅポインタはＳＩＭＤ番号４３の位置を示し、ＲｅａｄポインタはＳＩＭＤ番号１０の位置を示している。Ｗｒｉｔｅポインタが示すＳＩＭＤ番号４３の位置のアドレスに画像フレームにおける符号１０１の位置にあるＳＩＭＤデータが書き込まれると、その瞬間において、ＭＣ領域ａには斜線部分に示す４ライン分の画素データが記憶されていることとなる。
【００３６】
図３は、図２に示す例において、ＳＩＭＤデータの書き込みや読み出しが実行される動作の一例を説明する図である。
【００３７】
入力されてくる画素データを入力Ｓ／Ｐ変換器４がＭＣ領域ａに書き込む処理であるＦｕｎｃｔｉｏｎＡと、ＳＩＭＤ演算器６が行うＭＣ領域ａからＳＩＭＤデータの読み出しを伴う処理であるＦｕｎｃｔｉｏｎＢと、ＳＩＭＤ演算器６が行うＭＣ領域ａから相対位置（３，１）を指定するディスプレースメントＲｅａｄを伴う処理であるＦｕｎｃｔｉｏｎＣと、前述する更新命令であるＳｓｙｎｃ命令が発行される処理と、から構成される１サイクルの処理を考える。
【００３８】
まず、ＦｕｎｃｔｉｏｎＡが実行されると、入力Ｓ／Ｐ変換器４は書き込み要求を発行し、メモリアクセス制御部３３は算出するＷｒｉｔｅポインタが示すＳＩＭＤ番号４３の物理アドレスを算出し、入力Ｓ／Ｐ変換器４は該アドレスにＳＩＭＤデータを書き込む（Ｓ１）。すると、ポインタ算出部３２はＷｒｉｔｅポインタの値をインクリメントして更新する（Ｓ２）。これにより、Ｗｒｉｔｅポインタが示す位置はＳＩＭＤ番号４４に移動される。続いて、ＦｕｎｃｔｉｏｎＢが実行されると、ＳＩＭＤ演算器６は読み出し要求を発行し、メモリアクセス制御部３３はＲｅａｄポインタが示すＳＩＭＤ番号１０の物理アドレスを算出し、ＳＩＭＤ演算器６は該アドレスからＳＩＭＤデータを読み出す（Ｓ３）。
【００３９】
続いて、ＦｕｎｃｔｉｏｎＣが実行されると、ＳＩＭＤ演算器６は相対位置（３，１）を指定して読み出し要求を発行する。メモリアクセス制御部３３は、現在のＲｅａｄポインタが示すＳＩＭＤ番号１０の位置を基準とし、相対位置（３、１）で示される位置の物理アドレスを算出する。
【００４０】
すなわち、メモリアクセス制御部３３は、まず、ＳＩＭＤ番号１０の位置から、ＳＩＭＤデータを３＋１×１６＝１９個分遡る。このとき、メモリアクセス制御部３３は、１０個のＳＩＭＤデータ分を遡るとＭＣ領域ａの先頭であるＳＩＭＤ番号０の位置に至るので、ラップアラウンドし、ＭＣ領域ａの最後尾のＳＩＭＤ番号６３から残りの９個のＳＩＭＤデータ分遡り、ＳＩＭＤ番号５５の位置を得る。そして、メモリアクセス制御部３３は、得たＳＩＭＤ番号５５の位置の物理アドレスを算出する。ＳＩＭＤ演算器６は、算出されたアドレスに書き込まれているＳＩＭＤデータを読み出す（Ｓ４）。
【００４１】
続いて、Ｓｓｙｎｃ命令が発行されると、ポインタ算出部３２はＲｅａｄポインタの値を単位ＳＩＭＤデータ分インクリメントしての更新し（Ｓ５）、Ｒｅａｄポインタが示す位置をＳＩＭＤ番号１１の位置に移動させる。
【００４２】
Ｓ５の処理が終わった瞬間においては、ＳＩＭＤ番号１１の位置には、図２に示す画像フレームにおける符号１０２の位置にあったＳＩＭＤデータが記憶されているが、次のサイクルにおいてＦｕｎｃｔｉｏｎＡが実行されると、入力Ｓ／Ｐ変換器４は外部から次に入力されてくる符号１０３の位置のＳＩＭＤデータを書き込み要求し、ＳＩＭＤ番号１１の位置に書き込まれていた符号１０２の位置にあったＳＩＭＤデータは書き込み要求された符号１０３の位置のＳＩＭＤデータで上書きされることとなる。
【００４３】
このように、メモリコントローラ３は、ラインモードに設定されたＭＣ領域に対し、画像フレームにおけるＳＩＭＤデータの位置関係を考慮した書き込みおよび読み出しができるように、書き込み先および読み出し先のメモリアドレスの管理を行う。
【００４４】
（ＦＩＦＯモード）
ＦＩＦＯモードのアクセスが行われる夫々のＭＣ領域には、ＳＩＭＤ単位の容量が確保される。ここでは、メモリコントローラ設定レジスタ３１の設定時においては、ＦＩＦＯモードに設定されるＭＣ領域は、確保したいＳＩＭＤデータ数に基づいて該ＭＣ領域の容量が設定されることとする。該モードのアクセスが行われるＭＣ領域の先頭アドレスは、例えば、ＭＣ領域ａ〜ｃがＦＩＦＯモードに設定される場合、ＭＣ領域ａ〜ｃおよびＭＣ領域ｃの次の領域であるＭＣ領域ｄの先頭アドレスは、
ＭＣ領域ａの先頭アドレス＝ＭＴＯＰ、
ＭＣ領域ｂの先頭アドレス＝ＭＴＯＰ＋（ＭＣ領域ａが記憶するＳＩＭＤデータ数）×（一つの画素のバイト幅）×（単位ＳＩＭＤが含む画素の数）、
ＭＣ領域ｃの先頭アドレス＝（ＭＣ領域ｂの先頭アドレス）＋（ＭＣ領域ｂが記憶するＳＩＭＤデータ数）×（一つの画素のバイト幅）×（単位ＳＩＭＤが含む画素の数）、
ＭＣ領域ｄの先頭アドレス＝（ＭＣ領域ｃの先頭アドレス）＋（ＭＣ領域ｃが記憶するＳＩＭＤデータ数）×（一つの画素のバイト幅）×（単位ＳＩＭＤが含む画素の数）
となる。
【００４５】
ＦＩＦＯモードに設定されたＭＣ領域に対しては、ラインモードの場合と同様に、アクセス制御ポインタとして書き込みポインタおよび読み出しポインタが用意される。ポインタ算出部３２は、一つのＳＩＭＤデータが書き込まれる度に、
Ｗｒｉｔｅポインタ＋＝（単位ＳＩＭＤデータあたりのバイト数）
の演算を行う。Ｒｅａｄポインタに関しても、同様に、ポインタ算出部３２は、一つのＳＩＭＤデータが読み出される度に、
Ｒｅａｄポインタ＋＝（単位ＳＩＭＤデータあたりのバイト数）
の演算を行う。また、ラインモードの場合と同様に、ポインタ算出部３２は、書き込みポインタおよび読み出しポインタが該当するＭＣ領域からオーバーフローする場合、ラップアラウンド処理を行う。
【００４６】
メモリアクセス制御部３３は、アクセスモードがＦＩＦＯモードに設定されているＭＣ領域に対する書き込み要求を受信したとき、Ｗｒｉｔｅポインタが指す位置の物理アドレスを算出し、該算出したアドレスに書き込み要求送信元に書き込み要求されたＳＩＭＤデータを書き込ませる。また、メモリアクセス制御部３３は、このＭＣ領域に対する読み出し要求を受信したとき、Ｒｅａｄポインタが指す位置の物理アドレスを算出し、該算出したアドレスに書き込まれているＳＩＭＤデータを読み出し要求送信元に読み出させる。
【００４７】
このように、メモリコントローラ３は、ＦＩＦＯモードに設定されたＭＣ領域に対して、ＳＩＭＤデータが書き込まれる毎に、該書き込まれた位置の後ろに連続して書き込めるように次回の書き込み位置を設定し、ＳＩＭＤデータが読み出される毎に、該読み出された位置の後ろに連続して読み出せるように次回の読み出し位置を設定する。このようなメモリコントローラ３の動作により、ＳＩＭＤ演算器６は、ＦＩＦＯモードに設定されたＭＣ領域に対して、アクセス先のアドレスを指定することなくアクセスを行うことができる。
【００４８】
（ＦＩＲＯモード）
ＦＩＲＯモードに設定されたＭＣ領域に対しては、アクセス制御ポインタとして、書き込みポインタだけ用意される。ＦＩＲＯモードのアクセスが行われるＭＣ領域の確保方法、Ｗｒｉｔｅポインタの算出方法、およびメモリアクセス制御部３３による書き込み位置のアドレス算出方法は、ＦＩＦＯモードの場合と同様であるので、ここでは説明を省略する。
【００４９】
ＳＩＭＤ演算器６は、当該領域から一時データを読み出す際は、所望の読み出し位置を指定して一時データを読み出す。例えば、読み出し要求送信元は、Ｗｒｉｔｅポインタからのオフセットを指定することにより読み出し位置を指定するようにするとよい。
【００５０】
このように、ＦＩＲＯモードに設定されたＭＣ領域においては、メモリコントローラ３が書き込み位置を自動的に算出するので、ＳＩＭＤ演算器６は書き込み位置を指定せずとも一時データを当該ＭＣ領域に書き込むことができる。
【００５１】
以上述べたように、第１の実施の形態によれば、ハードウェア回路が自動的にアクセス先のアドレス計算を行うように構成したので、プログラムからアドレス計算を行う場合に比べて高速なメモリアクセスを行うことができるようになるとともに、アクセス要求にアドレス計算用の信号を付加しなくてもよいので、プログラム作成の労力を削減できるようになる。
【００５２】
ところで、一般的に、ＳＩＭＤ演算器による演算処理において発生する一時データの保存にはＳＲＡＭで構成されるベクトルレジスタが使用される。ベクトルレジスタは、ＳＩＭＤエレメント数が増加するに伴って構成の複雑さが増し、ハードウェア的なコストやハードウェアの面積が増大する。以上説明した第１の実施の形態によれば、演算途中に発生する一時データを記憶させるために、仮想的にデータメモリを分割してＦＩＦＯモードおよびＦＩＲＯモードのアクセスを行う領域をデータメモリに設けるように構成したので、ベクトルレジスタの容量を削減することができるようになる。
【００５３】
また、容量およびアクセスモードをメモリコントローラ設定レジスタに設定することにより、データメモリを所望のサイズの複数の領域に分割し、分割された領域に対して夫々ラインモード、ＦＩＦＯモード、ＦＩＲＯモードに設定できるので、効率的かつ柔軟なメモリ使用が可能になる。
【００５４】
ところで、以上の説明において、メモリコントローラ設定レジスタ３１における各ＭＣ領域の容量の設定に関し、ＦＩＦＯおよびＦＩＲＯモードの場合はＳＩＭＤ数単位の容量が設定されるとしたが、ライン単位の容量が設定されるようにしてもよい。
【００５５】
また、以上の説明において、ラインモードのＷｒｉｔｅポインタは書き込みがある度に単位ＳＩＭＤデータあたりのバイト幅分をインクリメントされるとした。一方、例えば画像フレームがＢａｙｅｒ配列である場合、補間処理などのために、入力される一つのＳＩＭＤデータの夫々の画素を連続するアドレスではなく一つ置きのアドレスに入力する必要がある場合がある。すなわち、その場合、入力Ｓ／Ｐ変換部４は、一つのＳＩＭＤデータを２つのＳＩＭＤデータ分のアドレスに書き込むことが必要となる。このようなタイプのＳＩＭＤデータを記憶するＭＣ領域に対しては、書き込みがあったときラインモードのＷｒｉｔｅポインタは２ＳＩＭＤ分のバイト幅のインクリメントが行われるようにするとよい。また、１ＳＩＭＤ分インクリメントするか、または２ＳＩＭＤ分インクリメントするかの設定は、メモリコントローラ設定レジスタ３１においてラインモードの各ＭＣ領域に対して設定できるようにするとよい。
【００５６】
（第２の実施の形態）
本発明の第２の実施の形態の画像処理装置の構成を図４に示す。図４に示すように、第２の実施の形態の画像処理装置１ｂは、第１の実施の形態の構成に複数（ここでは３つ）の専用演算器７を加えた構成となっている。
【００５７】
図４において、専用演算器７は、例えばソート処理などＳＩＭＤ演算器６が苦手とする処理を専用に行う演算器であって、メモリコントローラ３を介してデータメモリ２に接続されている。夫々の専用演算器７は、ＳＩＭＤ演算器６と同様に、メモリコントローラ３に書き込み要求または読み出し要求を発行することにより、ＦＩＦＯモードやＦＩＲＯモードに設定された所望のＭＣ領域にアクセスを行う。すなわち、ＳＩＭＤ演算器６と専用演算器７との間および専用演算器７同士の一時データは、ＦＩＦＯモードやＦＩＲＯモードに設定されたＭＣ領域を介して授受される。
【００５８】
このように、第２の実施の形態によれば、専用演算器を有し、ＳＩＭＤ演算器と専用演算器との間や専用演算器同士のデータの授受をデータメモリ２を介して行うように構成したので、各演算器間のハードウェア通信路を設けることなく画像処理装置の性能向上を図ることができる。
【図面の簡単な説明】
【００５９】
【図１】第１の実施形態に従った画像処理装置の構成を示す図。
【図２】ＭＣ領域ａの状態の一例を説明する図。
【図３】ＳＩＭＤデータの書き込みや読み出しが実行される動作の一例を説明する図。
【図４】第２の実施形態に従った画像処理装置の構成を示す図。
【符号の説明】
【００６０】
１ａ、１ｂ  画像処理装置、２  データメモリ、３  メモリコントローラ、４  入力Ｓ／Ｐ変換器、５  出力Ｐ／Ｓ変換器、６  ＳＩＭＤ演算器、７  専用演算器、３１  メモリコントローラ設定レジスタ、３２  ポインタ算出部、３３  メモリアクセス制御部
【図１】
2010033507.tif 000003
【図２】
2010033507.tif 000004
【図３】
2010033507.tif 000005
【図４】
2010033507.tif 000006