(57)【要約】【課題】矩形領域の画像データを扱う際の端拡張処理を効率良く行う。【解決手段】フレームメモリ１４０は入力された画像データをフレーム単位で保持する。ローカルメモリ１６０はＤＳＰにおいて画像処理を行うための作業用メモリである。転送制御部１７６はＤＭＡ転送を行うための制御を行う。制御レジスタ１７１には矩形領域の端拡張を行うための拡張幅などを含むパラメータが保持されている。バス制御部１７２を介してフレームメモリ１４０から読み出された矩形領域の画像データは、制御レジスタ１７１のパラメータに従って上下左右の端の拡張処理がデータ整列部１７４によって行われる。データ制御部１７５は端拡張後の画像データをローカルメモリ１６０に書き込む。これにより、ＤＭＡ転送と並行して端拡張処理が行われる。【選択図】図２
2010009447.tif 000002
【特許請求の範囲】
【請求項１】
矩形領域を保持する転送元メモリから前記矩形領域のデータを読み出して保持するデータ保持部と、
前記矩形領域における端の拡張幅を設定する拡張幅設定部と、
前記設定された拡張幅に応じて前記データ保持部に保持されたデータを整列して前記矩形領域における端の拡張データを生成するデータ整列部と、
前記データ保持部に保持されたデータおよび前記拡張データを転送先メモリに転送するデータ転送部と
を具備するデータ転送装置。
【請求項２】
前記矩形領域は複数の画素に対応する画像データを含み、
前記データ整列部は、画素を単位として前記画像データを整列して前記矩形領域における端の拡張データを生成する請求項１記載のデータ転送装置。
【請求項３】
前記矩形領域は二次元構造のデータを含み、
前記データ整列部は、前記二次元構造のデータの上下左右の端のデータを前記拡張データとして使用する
請求項１記載のデータ転送装置。
【請求項４】
矩形領域を保持する転送元メモリから前記矩形領域のデータを読み出して保持するデータ保持部と、
前記矩形領域における端の拡張幅を設定する拡張幅設定部と、
前記設定された拡張幅に応じてゼロ値データを整列して前記矩形領域における端の拡張データを生成するデータ整列部と、
前記データ保持部に保持されたデータおよび前記拡張データを転送先メモリに転送するデータ転送部と
を具備するデータ転送装置。
【請求項５】
矩形領域を保持する転送元メモリから前記矩形領域のデータを読み出して保持するデータ保持部と、
前記矩形領域における端の拡張幅を設定する拡張幅設定部と、
前記矩形領域における端に拡張される設定データを保持する設定データ保持部と、
前記設定された拡張幅に応じて前記設定データを整列して前記矩形領域における端の拡張データを生成するデータ整列部と、
前記データ保持部に保持されたデータおよび前記拡張データを転送先メモリに転送するデータ転送部と
を具備するデータ転送装置。
【請求項６】
前記矩形領域は複数の画素に対応する画像データを含み、
前記データ整列部は、画素を単位として前記設定データを整列して前記矩形領域における端の拡張データを生成する請求項５記載のデータ転送装置。
【請求項７】
矩形領域を保持する転送元メモリから前記矩形領域のデータを読み出して保持するデータ保持部と、
前記矩形領域における端の拡張幅を設定する拡張幅設定部と、
前記矩形領域における端の拡張モードを設定する拡張モード設定部と、
前記矩形領域における端に拡張される設定データを保持する設定データ保持部と、
前記設定された拡張幅および前記拡張モードに応じて前記データ保持部に保持されたデータ、ゼロ値データまたは前記設定データを整列して前記矩形領域における端の拡張データを生成するデータ整列部と、
前記データ保持部に保持されたデータおよび前記拡張データを転送先メモリに転送するデータ転送部と
を具備するデータ転送装置。
【請求項８】
矩形領域を保持する転送元メモリから前記矩形領域のデータを読み出す際の前記矩形領域における端の拡張幅を設定する拡張幅設定手順と、
前記転送元メモリから前記矩形領域のデータを読み出すデータ読出し手順と、
前記設定された拡張幅に応じて前記読み出されたデータを整列して前記矩形領域における端の拡張データを生成するデータ整列手順と、
前記読み出されたデータおよび前記拡張データを転送先メモリに転送するデータ転送手順と
を具備するデータ転送方法。
【請求項９】
矩形領域を保持する転送元メモリから前記矩形領域のデータを読み出す際の前記矩形領域における端の拡張幅を設定する拡張幅設定手順と、
前記転送元メモリから前記矩形領域のデータを読み出すデータ読出し手順と、
前記設定された拡張幅に応じて前記読み出されたデータを整列して前記矩形領域における端の拡張データを生成するデータ整列手順と、
前記読み出されたデータおよび前記拡張データを転送先メモリに転送するデータ転送手順と
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送装置に関し、特に矩形領域のデータをメモリ間で転送するデータ転送装置、および、その処理方法ならびに当該方法をコンピュータに実行させるプログラムに関する。
【背景技術】
【０００２】
近年、小型カメラの付いた携帯情報端末が市場に浸透し、カメラの高解像度化が進んできた。カメラが高解像度になる程、カメラで撮像した画像データを格納するフレームメモリの容量が大きくなり、また、画像処理に必要な演算量も増大する傾向にある。
【０００３】
画像処理をＬＳＩによって実現する場合、大容量のフレームメモリに保持される画像データを高速のプロセッサで直接処理するとデータ読出しにかかるレイテンシが大きくなるため、一般には階層構造でデータ転送が行われる。例えば、キャッシュメモリを用いる方法が挙げられる。特に画像処理の場合は、処理するデータ領域が予め定まっている場合が多いため、フレームメモリより容量が小さいローカルメモリを用いて、画像の一部をローカルメモリに転送して処理する方法がある。ローカルメモリは、フレームメモリにある画像データのうち一部の矩形画像領域だけを入れ替えて使用するため、ローカルメモリの容量を小さくすることができ、レイテンシを小さくすることができる。
【０００４】
ローカルメモリを用いる場合、ローカルメモリを複数のメモリ領域に分割（例えば、３分割）する方法が知られている（例えば、特許文献１参照。）。この技術は、ローカルメモリの一部をデータの転送用に用い、別の一部の領域をプロセッサの演算に使用し、両方の処理が終わると領域を交換する方式である。多くの場合、ＤＭＡ（Direct Memory Access）転送にかかる時間よりプロセッサの演算時間の方が長いため、データ転送にかかる時間を隠蔽することができる。画像の転送には、ＤＭＡ転送が用いられ、ＤＭＡコントローラ（ＤＭＡＣ）と呼ばれる装置が用いられる。
【０００５】
一般的なＤＭＡＣは、転送用のパラメータとして、開始アドレス、終了アドレスおよび転送サイズを設定し、この設定に従って、連続したメモリ領域のデータを転送する。一方、上に示した矩形画像領域では、メモリ空間上は一部のアドレスが非連続であるが、このような矩形画像領域を転送するＤＭＡ転送装置の技術も開示されている（例えば、特許文献２参照。）。
【０００６】
画像処理ＬＳＩでは、画像処理を高速に行うため、デジタル信号処理に特化したＤＳＰ（Digital Signal Processor）が用いられる。そして、ＤＳＰが一時的にデータを保存するためのローカルメモリが設けられる。ＤＭＡＣは、フレームメモリからデータを読み出して、ローカルメモリに格納する。ローカルメモリは、ＤＳＰおよびＤＭＡＣの２つのマスターからアクセスされる。このローカルメモリは、例えば４Ｋバイトの物理的に分かれた３つのメモリ（領域＃０乃至＃２）から構成され、各マスターが別の領域をアクセスする場合にはストールが発生しないよう構成される。一例として、領域＃０および領域＃１には画像データが格納され、領域＃２にはＤＳＰのプログラムが格納される。
【０００７】
入力画像の形式は、１色のデータだけの場合もあれば、三原色ＲＧＢ（Red, Green, Blue）や、輝度および色差ＹＣｂＣｒ配列のような特殊な配列構造の場合もある。ビット幅も１バイト長の場合や、１０ビットのデータを２バイト長データとして配置して格納している場合もあるが、ここでは説明を簡単にするため、横１９２０画素×縦１０２４ラインの１バイト長の輝度データで説明する。このとき、全画素連続で配置して１９２０Ｋバイト毎に格納することを想定してもよい。また、扱いやすいように画像の右側に１２８バイトのブランク領域を設けて、横サイズの合計を２０４８画素として２０４８Ｋバイト毎に格納するようにしてもよい。
【０００８】
入力画像は一旦フレームメモリに格納され、ＤＭＡＣを介してローカルメモリにＤＭＡ転送される。ローカルメモリの領域の容量は例えば４Ｋバイトとすると、入力データは横６４画素×縦６４ラインの４Ｋバイトの４８０個の矩形画像領域に分けて処理される。このうち最初の矩形画像領域のデータが、領域＃０に転送される。
【０００９】
転送が終了すると、ＤＳＰは領域＃０の画像処理を処理する。これと平行して、ＤＭＡＣは次に処理する矩形画像領域を、領域＃１へ転送する。
【００１０】
ＤＳＰの画像処理とＤＭＡ転送が終了すると、次の演算と転送が開始される。すなわち、ＤＳＰは領域＃１の画像を処理し、これと並列してＤＭＡＣは領域＃０にある処理結果をフレームメモリに転送する。そして、次に処理する矩形画像領域を領域＃０に転送する。処理結果の格納先は、元の矩形画像データがあった領域でもよく、また、元の矩形画像データを残して別の領域に格納してもよい。
【００１１】
以下同様に繰り返し、画像の全ての画素に対して処理が行われる。このように、画像処理とＤＭＡ転送を並列に処理できる方式は、多くの場合ＤＭＡ転送にかかる時間がＤＳＰの演算時間より短いため、ＤＭＡ転送の時間を画像処理時間に隠蔽することができる。最終結果はフレームメモリに１枚の画像データとして形成され、例えば液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）に表示される。
【特許文献１】特開昭６０−２０１４６３号公報（第２図）
【特許文献２】特開２００６−２０９５５２号公報（図４）
【発明の開示】
【発明が解決しようとする課題】
【００１２】
ここまでは、単純な画像処理で、矩形画像領域の大きさが変化しない場合を示した。しかし、画像処理の多くは複数の画素を用いて処理される。例えば、３タップの水平ＬＰＦ（Low Pass Filter）処理を行う場合、横６４画素×縦６４ラインの画像データからは横６２画素×縦６４ラインの演算結果が生成される。また、横１７タップ×縦１７タップの画像処理を行う場合は、横４８画素×縦４８ラインが生成される。
【００１３】
したがって、横１７タップ×縦１７タップの画像処理を行うには、横４８画素×縦４８ラインを有効領域と考え、入力する矩形画像領域は上下左右に８画素を付加した縦６４画素×６４画素の画像を用意する。そして、画像処理後に、横４８画素×縦４８ラインのみフレームメモリに書き込むと考えればよい。この周囲の画素を付加するには、矩形画像領域が画像の端に位置していなければ、単に周囲の上下左右８画素分を用いればよい。しかし、矩形画像領域が入力画像の端に接する場合は、別の値を用意する必要がある。
【００１４】
画像の端の拡張方法はいくつかある。例えば、画像の左上に位置し、左端と上端が画像データの端に接する矩形画像領域では、以下の３通りの端拡張方法が考えられる。
（Ａ）近傍拡張： 拡張部分の値を最近傍の画素の値にする。
（Ｂ）ゼロ拡張： 拡張部分の値をゼロ値にする。
（Ｃ）設定値拡張： 拡張部分の値を設定値（例えば、「１２８」）にする。
多くの場合、画像の端のタップを伴う処理において誤った画像が発生しないように、（Ａ）近傍拡張が行われる。ただし、画像抽出処理などにおいて誤った検出を行いたくない場合に（Ｂ）ゼロ拡張や（Ｃ）設定値拡張が行われる。処理規模の大きなプログラムでは、複数の拡張方法を使い分ける場合もある。
【００１５】
また、端拡張処理をするタイミングは以下の２つが考えられる。
（１）フレームメモリにある画像処理前の画像に対して行う。
（２）ローカルメモリに画像を転送後、画像処理前に拡張を行う。
しかしながら、（１）では端を拡張する分だけフレームメモリに余分なメモリが必要となり、（２）はＤＳＰの処理の場合分けが必要になる。何れの場合も端拡張のプログラムを動作させるため、そのプログラムが動作している時間の分だけ処理時間が増大する。また、何れの場合もプログラムコードが増加するという問題が生じる。ＤＳＰは積和演算などの信号処理に特化しているため、端拡張のような場合分けは苦手であり、処理時間の増加とプログラムの増加を招きやすい。
【００１６】
本発明はこのような状況に鑑みてなされたものであり、矩形画像領域を扱う際の端拡張処理を効率良く行うことを目的とする。
【課題を解決するための手段】
【００１７】
本発明は、上記課題を解決するためになされたものであり、その第１の側面は、矩形領域を保持する転送元メモリから上記矩形領域のデータを読み出して保持するデータ保持部と、上記矩形領域における端の拡張幅を設定する拡張幅設定部と、上記設定された拡張幅に応じて上記データ保持部に保持されたデータを整列して上記矩形領域における端の拡張データを生成するデータ整列部と、上記データ保持部に保持されたデータおよび上記拡張データを転送先メモリに転送するデータ転送部とを具備するデータ転送装置またはその処理方法ならびにプログラムである。これにより、転送元メモリから転送先メモリに転送する際に矩形領域における端の拡張データを生成させるという作用をもたらす。
【００１８】
また、この第１の側面において、上記矩形領域は複数の画素に対応する画像データを含み、上記データ整列部は、画素を単位として上記画像データを整列して上記矩形領域における端の拡張データを生成してもよい。これにより、画素を単位として矩形領域における端の拡張データを生成させるという作用をもたらす。
【００１９】
また、この第１の側面において、上記矩形領域は二次元構造のデータを含み、上記データ整列部は、上記二次元構造のデータの上下左右の端のデータを上記拡張データとして使用してもよい。これにより、二次元構造のデータの上下左右の端のデータを拡張データとして生成させるという作用をもたらす。
【００２０】
また、本発明の第２の側面は、矩形領域を保持する転送元メモリから上記矩形領域のデータを読み出して保持するデータ保持部と、上記矩形領域における端の拡張幅を設定する拡張幅設定部と、上記設定された拡張幅に応じてゼロ値データを整列して上記矩形領域における端の拡張データを生成するデータ整列部と、上記データ保持部に保持されたデータおよび上記拡張データを転送先メモリに転送するデータ転送部とを具備するデータ転送装置またはその処理方法ならびにプログラムである。これにより、転送元メモリから転送先メモリに転送する際に矩形領域における端の拡張データをゼロ値データにより生成させるという作用をもたらす。
【００２１】
また、本発明の第３の側面は、矩形領域を保持する転送元メモリから上記矩形領域のデータを読み出して保持するデータ保持部と、上記矩形領域における端の拡張幅を設定する拡張幅設定部と、上記矩形領域における端に拡張される設定データを保持する設定データ保持部と、上記設定された拡張幅に応じて上記設定データを整列して上記矩形領域における端の拡張データを生成するデータ整列部と、上記データ保持部に保持されたデータおよび上記拡張データを転送先メモリに転送するデータ転送部とを具備するデータ転送装置またはその処理方法ならびにプログラムである。これにより、転送元メモリから転送先メモリに転送する際に矩形領域における端の拡張データを設定データにより生成させるという作用をもたらす。
【００２２】
また、この第３の側面において、上記矩形領域は複数の画素に対応する画像データを含み、上記データ整列部は、画素を単位として上記設定データを整列して上記矩形領域における端の拡張データを生成してもよい。これにより、画素を単位として矩形領域における端の拡張データを生成させるという作用をもたらす。
【００２３】
また、本発明の第４の側面は、矩形領域を保持する転送元メモリから上記矩形領域のデータを読み出して保持するデータ保持部と、上記矩形領域における端の拡張幅を設定する拡張幅設定部と、上記矩形領域における端の拡張モードを設定する拡張モード設定部と、上記矩形領域における端に拡張される設定データを保持する設定データ保持部と、上記設定された拡張幅および上記拡張モードに応じて上記データ保持部に保持されたデータ、ゼロ値データまたは上記設定データを整列して上記矩形領域における端の拡張データを生成するデータ整列部と、上記データ保持部に保持されたデータおよび上記拡張データを転送先メモリに転送するデータ転送部とを具備するデータ転送装置またはその処理方法ならびにプログラムである。これにより、転送元メモリから転送先メモリに転送する際に、設定された拡張モードに応じて矩形領域における端の拡張データを生成させるという作用をもたらす。
【発明の効果】
【００２４】
本発明によれば、矩形画像領域を扱う際の端拡張処理を効率良く行うことができるという優れた効果を奏し得る。すなわち、ＤＭＡ転送時に端拡張処理が行われ、ＣＰＵやＤＳＰが端拡張処理を行う必要がなくなるため、端拡張処理にかかるプログラムの処理時間を隠蔽することができ、画像処理にかかる処理時間を削減することができる。また、本発明は、より簡単なプログラムでタップのある画像処理の端拡張処理を行うことができるため、プログラムコードを削減することができ、プログラムを格納するＲＯＭやＲＡＭなどのメモリ容量を削減することができる。
【発明を実施するための最良の形態】
【００２５】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００２６】
図１は、本発明の実施の形態におけるデータ転送装置の一構成例を示す図である。このデータ転送装置は、フレームメモリ１４０と、ローカルメモリ１６０と、両者間の転送を制御するＤＭＡ制御部１７０とを備える。また、このデータ転送装置は、ＣＰＵ１１０と、ＲＯＭ１２０と、画像信号入出力部１３０と、ＤＳＰ１５０と、バス１９０とを備える。なお、フレームメモリ１４０およびＲＯＭ１２０は、データ転送装置の外部に設けるようにしてもよい。
【００２７】
ＣＰＵ（Central Processing Unit）１１０は、このデータ転送装置の全体的な制御を行うプロセッサである。ＲＯＭ（Read Only Memory）１２０は、ＣＰＵ１１０またはＤＳＰ１５０によって実行されるプログラム等を記憶するメモリである。画像信号入出力部１３０は、データ転送装置の外部との間で画像信号の入出力を行うものである。
【００２８】
フレームメモリ１４０は、画像信号入出力部１３０から入力された画像データをフレーム単位で保持するメモリである。画像データのフレームとしては、例えば、横１９２０画素×縦１０２４ラインを想定する。
【００２９】
ＤＳＰ（Digital Signal Processor）１５０は、画像処理を行うデジタル信号プロセッサである。ローカルメモリ１６０は、ＤＳＰ１５０において画像処理を行うための作業用メモリである。一般に、ローカルメモリ１６０の容量は、フレームメモリ１４０よりも小さい。ここでは、一例として、物理的に別れた４Ｋバイトの３つの領域（領域＃０乃至＃２）を想定し、領域＃０および＃１に画像データを格納し、領域＃２にＤＳＰ１５０のプログラムを格納するものとする。このローカルメモリ１６０は、ＤＳＰ１５０およびＤＭＡ制御部１７０をマスターとし、各マスターが別の領域をアクセスする場合にはストールが発生しないよう構成される。
【００３０】
ＤＭＡ（Direct Memory Access）制御部１７０は、フレームメモリ１４０とローカルメモリ１６０との間のデータ転送を制御するものである。このＤＭＡ制御部１７０の構成については次図を参照して後述する。
【００３１】
バス１９０は、ＣＰＵ１１０、ＲＯＭ１２０、画像信号入出力部１３０、フレームメモリ１４０、および、ＤＭＡ制御部１７０を相互に接続するバスである。
【００３２】
ＣＰＵ１１０は、ＲＯＭ１２０に記憶されているプログラムを読み出して、このプログラムを実行する。また、このＣＰＵ１１０は、画像信号入出力部１３０およびＤＭＡ制御部１７０に対する制御を行う。また、このＣＰＵ１１０は、ＤＳＰ１５０の処理開始および停止などの制御、画像信号入出力部１３０の初期設定、その他リセットなど、データ転送装置全体の挙動を監視して、必要に応じた制御を行う。また、このＣＰＵ１１０は、ＤＳＰ１５０が動作するためのプログラムをローカルメモリ１６０へ転送する際、ＤＭＡ制御部１７０を制御する。さらに、このＣＰＵ１１０は、画像の矩形領域への分割やＤＭＡ制御部１７０に設定するアドレスの計算も行う。
【００３３】
図２は、本発明の実施の形態におけるＤＭＡ制御部１７０の一構成例を示す図である。このＤＭＡ制御部１７０では、４バイト単位でデータ転送を行うものと想定する。したがって、画像データの境界は４バイト境界となる。
【００３４】
このＤＭＡ制御部１７０は、ローカルメモリ１６０とフレームメモリ１４０との間で転送を行うが、転送方向により動作は非対称となる。フレームメモリ１４０からローカルメモリ１６０へのＤＭＡ転送の際、転送元のフレームメモリ１４０では矩形画像領域を指定することができ、転送先のローカルメモリ１６０では連続領域に書き込まれる。一方、ローカルメモリ１６０からフレームメモリ１４０へのＤＭＡ転送の際、転送元のローカルメモリ１６０では画像データは連続領域に格納されており、転送先のフレームメモリ１４０では矩形領域を指定することができる。また、フレームメモリ１４０からローカルメモリ１６０への転送では端拡張処理を行うことを指定できるが、ローカルメモリ１６０からフレームメモリ１４０への転送では端拡張処理を指定することはできない。
【００３５】
このＤＭＡ制御部１７０は、制御レジスタ１７１と、バス制御部１７２と、バッファ１７３と、データ整列部１７４と、データ制御部１７５と、転送制御部１７６とを備える。
【００３６】
制御レジスタ１７１は、このＤＭＡ制御部１７０の動作を制御するパラメータを保持するレジスタである。この制御レジスタ１７１の値は、バス１９０を介してＣＰＵ１１０によって設定されるが、ＤＭＡ転送中は転送制御部１７６が更新することができる。この制御レジスタ１７１については、次図を参照して後述する。
【００３７】
バス制御部１７２は、バス１９０を制御してフレームメモリ１４０とバッファ１７３との間でデータのやりとりを制御するものである。
【００３８】
バッファ１７３は、ＤＭＡ転送中のデータを一旦蓄えるバッファである。このバッファ１７３は、フレームメモリ１４０またはローカルメモリ１６０から４バイトずつ読み出されたデータを保持する。フレームメモリ１４０からローカルメモリ１６０への転送の際には、このバッファ１７３に保持されたデータを利用して端拡張処理が行われる。なお、バッファ１７３は、特許請求の範囲に記載のデータ保持部の一例である。
【００３９】
データ整列部１７４は、フレームメモリ１４０からローカルメモリ１６０への転送に際して、バッファ１７３におけるデータの並びを並び替えてローカルメモリ１６０に出力するものである。このデータ整列部１７４により、必要に応じて矩形画像領域における端拡張処理が行われる。なお、データ整列部１７４は、特許請求の範囲に記載のデータ整列部の一例である。
【００４０】
データ制御部１７５は、信号線１６９を介してローカルメモリ１６０とデータ整列部１７４との間でデータのやりとりを制御するものである。なお、データ制御部１７５は、特許請求の範囲に記載のデータ転送部の一例である。
【００４１】
転送制御部１７６は、ＤＭＡ制御部１７０の各部を制御するものである。この転送制御部１７６は、内部レジスタ１７７を備え、この内部レジスタ１７７を用いてＤＭＡ制御部１７０の各部の制御を行う。内部レジスタ１７７の初期値としては、制御レジスタ１７１の値が用いられる。転送制御部１７６は、ＤＭＡ転送が終了すると、信号線１７９を介してＣＰＵ１１０に割込みを通知する。これにより、ＣＰＵ１１０はＤＭＡ転送の終了を認識する。
【００４２】
図３は、本発明の実施の形態における制御レジスタ１７１のアドレスマップの一例を示す図である。ここでは、制御レジスタ１７１として３２ビットのレジスタを６語保持することを想定している。
【００４３】
制御レジスタ１７１の第０語（レジスタ＃０）は、フレームメモリ開始アドレス（ＡＦ：Address of Frame Memory）６１０を保持する。このフレームメモリ開始アドレス（ＡＦ）６１０は、フレームメモリ１４０における開始アドレスである。
【００４４】
制御レジスタ１７１の第１語（レジスタ＃１）は、ローカルメモリ開始アドレス（ＡＬ：Address of Local Memory）６２０を保持する。このローカルメモリ開始アドレス（ＡＬ）６２０は、ローカルメモリ１６０における開始アドレスである。
【００４５】
制御レジスタ１７１の第２語（レジスタ＃２）は、ＭＳＢ側の１６ビットに矩形領域垂直サイズ（Ｖ：Vertical）６３０を保持し、ＬＳＢ側の１６ビットに矩形領域水平サイズ（Ｈ：Horizontal）６４０を保持する。矩形領域垂直サイズ（Ｖ）６３０は、フレームメモリ１４０における矩形領域の垂直方向のサイズである。矩形領域水平サイズ（Ｈ）６４０は、フレームメモリ１４０における矩形領域の水平方向のサイズである。
【００４６】
制御レジスタ１７１の第３語（レジスタ＃３）は、ＭＳＢ側から４ビットずつの領域に、上タップ（Ｕ：Up）６５１、下タップ（Ｄ：Down）６５２、左タップ（Ｌ：Left）６５３および右タップ（Ｒ：Right）６５４を保持する。また、ＬＳＢ側の１６ビットにフレームメモリ水平サイズ（Ｗ：Width）６６０を保持する。上タップ（Ｕ）６５１は、画像の上側の端拡張の幅を指定するものである。下タップ（Ｄ）６５２は、画像の下側の端拡張の幅を指定するものである。左タップ（Ｌ）６５３は、画像の左側の端拡張の幅を指定するものである。右タップ（Ｒ）６５４は、画像の右側の端拡張の幅を指定するものである。フレームメモリ水平サイズ（Ｗ）６６０は、フレームメモリ１４０における画像の水平方向のサイズである。なお、上タップ（Ｕ）６５１、下タップ（Ｄ）６５２、左タップ（Ｌ）６５３および右タップ（Ｒ）６５４は、特許請求の範囲に記載の拡張幅設定部の一例である。
【００４７】
制御レジスタ１７１の第４語（レジスタ＃４）は、転送制御レジスタ（ＣＴＬ：ConTroL）６７０を保持する。この転送制御レジスタ（ＣＴＬ）６７０は、ＤＭＡ転送の転送方向や、転送サイズなどを保持する。
【００４８】
制御レジスタ１７１の第５語（レジスタ＃５）は、設定値レジスタ（ＰＲ：PReset）６８０を保持する。この設定値レジスタ（ＰＲ）６８０は、端拡張処理として設定値を拡張する際の設定値を保持する。
【００４９】
図４は、本発明の実施の形態における１フレームの画像データを示す図である。ここでは、図４（ａ）に示すように、横１９２０画素×縦１０２４ラインの各画素からなる画像データにより１フレームを構成するものとしている。各画素は８ビットの輝度を表すものとする。画像データは、ライン間に１２８バイトの空き領域が設けられ、ラインの先頭アドレスが２０４８バイト境界に来るようにフレームメモリに格納されているものと想定して説明する。
【００５０】
この例では、ＤＳＰ１５０において、水平方向１７タップ、垂直方向１７タップの画像信号処理を行うことを想定する。すなわち、図４（ｂ）に示すように、左右８タップずつ参照することにより、自身の矩形領域を入れて、水平方向に「８＋１＋８」タップとなる。また、上下８タップずつ参照することにより、自身の矩形領域を入れて、垂直方向に「８＋１＋８」タップとなる。
【００５１】
これにより、フレームメモリ１４０からローカルメモリ１６０へのロード時には縦６４ライン×横６４画素のＤＭＡ転送が行われ、ローカルメモリ１６０からフレームメモリ１４０へのストア時には縦４８ライン×横４８画素のＤＭＡ転送が行われる。すなわち、水平方向に４０ブロック、垂直方向に（２１＋１／３）ブロック分の矩形領域を転送することになる。なお、フレームメモリ１４０の画像データはライン毎に区切られており、２０４８バイト境界に配置されているものとする。
【００５２】
画像の端に接しない矩形領域を転送する場合、フレームメモリ１４０からローカルメモリ１６０へＤＭＡ転送を行う際には、制御レジスタ１７１には以下のように値が設定される。フレームメモリ開始アドレス（ＡＦ）６１０にはフレームメモリ１４０における矩形領域の先頭アドレスが設定される。ローカルメモリ開始アドレス（ＡＬ）６２０にはローカルメモリ１６０における先頭アドレスが設定される。矩形領域垂直サイズ（Ｖ）６３０には矩形領域の垂直サイズ「６４」が設定される。矩形領域水平サイズ（Ｈ）６４０には矩形領域の水平サイズ「６４」が設定される。
【００５３】
また、この例では端拡張をしないため、上タップ（Ｕ）６５１、下タップ（Ｄ）６５２、左タップ（Ｌ）６５３および右タップ（Ｒ）６５４は、何れも「０」に設定される。フレームメモリ水平サイズ（Ｗ）６６０は、「２０４８」に設定される。
【００５４】
そして、転送制御レジスタ（ＣＴＬ）６７０に、フレームメモリ１４０からローカルメモリ１６０への転送コマンドが書き込まれると、フレームメモリ１４０からローカルメモリ１６０へのＤＭＡ転送が開始する。
【００５５】
図５は、本発明の実施の形態における端拡張の指定例を示す図である。この例では、矩形領域は画像データの左上端にあり、上側と左側が画像の端に接している。上述のように水平方向１７タップ、垂直方向１７タップの画像信号処理を行う場合、画像データの左上端の矩形領域をＤＭＡ転送する際には、上および左に８タップずつ端を拡張する。したがって、制御レジスタ１７１において、上タップ（Ｕ）６５１および左タップ（Ｌ）６５３は「８」に設定され、下タップ（Ｄ）６５２および右タップ（Ｒ）６５４は「０」に設定される。
【００５６】
また、矩形領域垂直サイズ（Ｖ）６３０には「６４」から８タップ分を減じた「５６」が設定される。同様に、矩形領域水平サイズ（Ｈ）６４０には「６４」から８タップ分を減じた「５６」が設定される。
【００５７】
それ以外は、図４（ｂ）の例と同様であり、フレームメモリ開始アドレス（ＡＦ）６１０にはフレームメモリ１４０における矩形領域の先頭アドレスが設定される。また、ローカルメモリ開始アドレス（ＡＬ）６２０にはローカルメモリ１６０における先頭アドレスが設定される。さらに、フレームメモリ水平サイズ（Ｗ）６６０は、「２０４８」に設定される。
【００５８】
ここでは、左と上に端を拡張する場合の設定例を示したが、他の端を拡張する場合もタップ数を考慮して同様に設定である。例えば、矩形領域が画像の右端に接している場合には、右タップ（Ｒ）６５４が「８」に設定され、上タップ（Ｕ）６５１、下タップ（Ｄ）６５２および左タップ（Ｌ）６５３は「０」に設定される。また、矩形領域垂直サイズ（Ｖ）６３０には矩形領域の垂直サイズ「６４」が設定される。そして、矩形領域水平サイズ（Ｈ）６４０には「６４」から８タップ分を減じた「５６」が設定される。
【００５９】
また、矩形領域が画像からはみだしている場合も同様に対応できる。例えば、水平６４画素×垂直１６ラインが画像の有効領域にある場合には、下に４８ラインの端拡張を行う。この場合、下タップ（Ｄ）６５２が「４８」に設定され、上タップ（Ｕ）６５１、左タップ（Ｌ）６５３および右タップ（Ｒ）６５４は「０」に設定される。また、矩形領域水平サイズ（Ｈ）６４０には矩形領域の水平サイズ「６４」が設定される。そして、矩形領域垂直サイズ（Ｖ）６３０には有効領域にある「１６」が設定される。
【００６０】
図６は、本発明の実施の形態における端拡張方法の種別を示す図である。ここでは、一例として、矩形領域が画像の左上に位置し、左端と上端が画像データの端に接する場合について示している。
【００６１】
図６（Ａ）は、拡張部分の値を最近傍の画素の値にする近傍拡張の例である。この近傍拡張では、矩形領域の端の画素の値が端拡張の値として用いられる。
【００６２】
図６（Ｂ）は、拡張部分の値をゼロ値にするゼロ拡張の例である。このゼロ拡張では、端拡張の領域には「０」が設定される。
【００６３】
図６（Ｃ）は、拡張部分の値を設定値にする設定値拡張の例である。この設定値拡張では、制御レジスタ１７１の設定値レジスタ（ＰＲ）６８０に設定された値が端拡張の値として用いられる。
【００６４】
一般に、これらの端拡張方法のうち、（Ａ）近傍拡張が用いられることが多い。これは、画像の端のタップを伴う処理において誤った画像が発生しないようにするためである。ただし、画像抽出処理などにおいて誤った検出を行いたくない場合に（Ｂ）ゼロ拡張や（Ｃ）設定値拡張が行われる。（Ｂ）ゼロ拡張ではゼロ値を用いればよいが、色差を扱う場合に「１２８」を用いた方がよい場合や、輝度を扱う場合に黒色を「１６」と定める場合もあり、このような場合には（Ｃ）設定値拡張が用いられる。そこで、本発明の実施の形態では、制御レジスタ１７１の転送制御レジスタ（ＣＴＬ）６７０において端拡張方法を指定できるようにして、（Ｃ）設定値拡張が指定された場合には設定値レジスタ（ＰＲ）６８０の値を設定値として用いるものとする。
【００６５】
図７は、本発明の実施の形態における転送制御レジスタ（ＣＴＬ）６７０のフィールド構成例を示す図である。上述のように、転送制御レジスタ（ＣＴＬ）６７０は制御レジスタ１７１の第４語（レジスタ＃４）として保持されるものである。
【００６６】
この転送制御レジスタ（ＣＴＬ）６７０のＬＳＢ側の２ビット（第０乃至１ビット）は、転送コマンドを示すフィールドである。このフィールドは、「０１」であればフレームメモリ１４０からローカルメモリ１６０への転送を意味し、「１０」であればローカルメモリ１６０からフレームメモリ１４０への転送を意味する。
【００６７】
転送制御レジスタ（ＣＴＬ）６７０の第２乃至３ビットは、転送されるデータのデータ幅を示すフィールドである。このフィールドは、「００」であれば１バイト長を意味し、「０１」であれば２バイト長を意味し、「１０」であれば４バイト長を意味する。このデータ幅に応じて、端拡張のサイズが決定される。これについては、図１４を参照して後述する。
【００６８】
転送制御レジスタ（ＣＴＬ）６７０の第４乃至５ビットは、フレームメモリ１４０からローカルメモリ１６０へのＤＭＡ転送の際の端拡張の拡張方法（拡張モード）を示すフィールドである。このフィールドは、「００」であれば近傍拡張を意味し、「０１」であればゼロ拡張を意味し、「１０」であれば設定値拡張を意味する。なお、このフィールドは、特許請求の範囲に記載の拡張モード設定部の一例である。
【００６９】
図８は、本発明の実施の形態におけるローカルメモリ１６０における画像データの遷移例を示す図である。
【００７０】
図８（ａ）のように、ローカルメモリ１６０に６４画素×６４ラインでＤＭＡ転送された画像データは、ＤＳＰ１５０によって画像処理が行われる。この例では、４バイトを単位として、１６回の転送で１ライン分の画素が転送されることになる。
【００７１】
１７タップの水平ＬＰＦを想定すると、この演算により１ラインは６４画素から４８画素に減少するため、演算結果を詰めてローカルメモリ１６０に格納すると、図８（ｂ）のように、４８画素×６４ラインに減少する。
【００７２】
次に１７タップの垂直ＬＰＦを想定すると、この演算により４８ラインに減少するため、演算結果を詰めて書き込めば、図８（ｃ）のように、４８画素×４８ラインの連続データが得られる。
【００７３】
従来のＤＭＡＣが搭載されている場合は、端拡張は転送と同時には行われないため、矩形領域が画像の端に接しているかに応じて、ＤＳＰにおける処理を切り替える必要がある。本発明の実施の形態のＤＭＡ制御部１７０によれば、ＤＭＡ転送と同時に端拡張が行われるため、矩形領域が画像の端に接しているか否かに関わらず、同じ画像処理を行えば足りる。
【００７４】
また、従来、ＤＳＰで端の拡張処理を行った場合は、画像処理時間以外に端拡張に処理時間を要する。多くの場合において画像処理時間の方がＤＭＡ転送時間より長いため、本発明の実施の形態によれば、端拡張の処理時間をＤＳＰの処理時間中に実行することができ、端拡張に伴う処理時間を隠蔽することができる。本発明の実施の形態では、ＣＰＵ１１０による制御レジスタ１７１の設定を要するが、ＣＰＵ１１０の制御プログラムはＤＭＡ制御部１７０の端拡張の処理のみ増えるだけで済む。したがって、ＤＳＰ１５０で端拡張を行う場合のプログラムの増加と比較してより簡単なものになり、処理時間の増加も抑えることができる。
【００７５】
次に本発明の実施の形態におけるデータ転送装置の動作について図面を参照して説明する。
【００７６】
図９および図１０は、本発明の実施の形態におけるフレームメモリ１４０からローカルメモリ１６０へのＤＭＡ転送の処理手順例を示す図である。
【００７７】
転送の制御は、ＤＭＡ制御部１７０内部の転送制御部１７６によって行われる。制御レジスタ１７１にフレームメモリ１４０からローカルメモリ１６０へのロードを指示する転送コマンド「０１」が書き込まれると、転送制御部１７６は以下の手順により転送を指示する。なお、以下では、全て４バイト単位により処理されるものとする。したがって、フレームメモリ開始アドレス（ＡＦ）６１０、ローカルメモリ開始アドレス（ＡＬ）６２０、矩形領域水平サイズ（Ｈ）６４０、左タップ（Ｌ）６５３、右タップ（Ｒ）６５４、フレームメモリ水平サイズ（Ｗ）６６０は、４の倍数により指定される。また、各データのデータ幅は１バイトを想定している。
【００７８】
まず、１ライン分の転送について説明する。このライン転送は、左右の端拡張処理を伴った転送である。
【００７９】
フレームメモリ１４０からローカルメモリ１６０へのロードが指示されると、転送制御部１７６はＤＭＡ転送を開始する。このＤＭＡ転送が開始する前に、予め制御レジスタ１７１には必要な値が設定される（ステップＳ９１０）。なお、ステップＳ９１０は、特許請求の範囲に記載の拡張幅設定手順の一例である。
【００８０】
まず、制御レジスタ１７１のデータのうち、矩形領域水平サイズ（Ｈ）６４０、左タップ（Ｌ）６５３、右タップ（Ｒ）６５４、および、フレームメモリ開始アドレス（ＡＦ）６１０の各レジスタの値が、内部レジスタ１７７に保持される（ステップＳ９１１）。以下では、内部レジスタ１７７の値を制御レジスタ１７１の値と区別するために、それぞれ、矩形領域水平サイズ（Ｈ０）７４０、左タップ（Ｌ０）７５３、右タップ（Ｒ０）７５４、および、フレームメモリ開始アドレス（ＡＦ０）７１０と記載する。
【００８１】
転送制御部１７６は、矩形領域水平サイズ（Ｈ０）７４０が正か否かを判断する（ステップＳ９１２）。矩形領域水平サイズ（Ｈ０）７４０が正である場合にはステップＳ９１３に進み、それ以外の場合にはステップＳ９２１に進む。矩形領域水平サイズ（Ｈ０）７４０が正である場合には、転送制御部１７６はバス制御部１７２を制御して、フレームメモリ開始アドレス（ＡＦ０）７１０の示すフレームメモリ１４０のアドレスからデータを読み出して、バッファ１７３に一旦蓄える（ステップＳ９１３）。そして、フレームメモリ開始アドレス（ＡＦ０）７１０に「４」が加算される（ステップＳ９１３）。なお、ステップＳ９１３は、特許請求の範囲に記載のデータ読出し手順の一例である。
【００８２】
転送制御部１７６は、次に、左タップ（Ｌ０）７５３が正か否かを判断する（ステップＳ９１４）。左タップ（Ｌ０）７５３が正である場合にはステップＳ９１５に進み、それ以外の場合にはステップＳ９１７に進む。左タップ（Ｌ０）７５３が正である場合には、データ整列部１７４は、バッファ１７３に保持されたデータのうちラインの最初の１バイトデータを４バイトに並び替えて、ローカルメモリ１６０に書込みを行う（ステップＳ９１５）。このとき、ローカルメモリ１６０側のアドレスには、ローカルメモリ開始アドレス（ＡＬ）６２０が用いられる。そして、ローカルメモリ開始アドレス（ＡＬ）６２０に「４」が加算される（ステップＳ９１５）。また、左タップ（Ｌ０）７５３から「４」が減算される（ステップＳ９１６）。そして、左タップ（Ｌ０）７５３が正ではなくなるまで、ステップＳ９１４乃至Ｓ９１６の手順が繰り返されて、左側の端拡張が４バイト単位で行われる。なお、ステップＳ９１５は、特許請求の範囲に記載のデータ整列手順およびデータ転送手順の一例である。
【００８３】
左拡張が終了すると、最初の有効領域のデータ書込みが行われる。 データは既にバッファ１７３に格納されているため、データ整列部１７４において並び替えは行われず、４バイトのデータがローカルメモリ１６０に書き込まれる（ステップＳ９１７）。そして、ローカルメモリ開始アドレス（ＡＬ）６２０に「４」が加算される（ステップＳ９１７）。また、矩形領域水平サイズ（Ｈ０）７４０から「４」が減算される（ステップＳ９１８）。そして、矩形領域水平サイズ（Ｈ０）７４０が正ではなくなるまで、ステップＳ９１２乃至Ｓ９１４、Ｓ９１７、Ｓ９１８の手順が繰り返されて、有効領域の転送が４バイト単位で行われる。なお、ステップＳ９１７は、特許請求の範囲に記載のデータ転送手順の一例である。
【００８４】
有効領域の転送が終了すると、次に右側の端拡張が行われる。転送制御部１７６は、右タップ（Ｒ０）７５４が正か否かを判断する（ステップＳ９２１）。右タップ（Ｒ０）７５４が正である場合にはステップＳ９２２に進み、それ以外の場合にはステップＳ９３１に進む。右タップ（Ｒ０）７５４が正である場合、既にバッファ１７３に有効画素の最後のデータが格納されているため、データ整列部１７４においてラインの最終の１バイトデータを４バイトに並び替えて、ローカルメモリ１６０に書込みを行う（ステップＳ９２２）。このとき、ローカルメモリ１６０側のアドレスには、ローカルメモリ開始アドレス（ＡＬ）６２０が用いられる。そして、ローカルメモリ開始アドレス（ＡＬ）６２０に「４」が加算される（ステップＳ９２２）。また、右タップ（Ｒ０）７５４から「４」が減算される（ステップＳ９２３）。そして、右タップ（Ｒ０）７５４が正ではなくなるまで、ステップＳ９２１乃至Ｓ９２３の手順が繰り返されて、右側の端拡張が４バイト単位で行われる。なお、ステップＳ９２２は、特許請求の範囲に記載のデータ整列手順およびデータ転送手順の一例である。
【００８５】
ライン転送が終了すると、次に上側の端拡張が行われる。転送制御部１７６は、上タップ（Ｕ）６５１が正か否かを判断する（ステップＳ９３１）。上タップ（Ｕ）６５１が正である場合にはステップＳ９３２に進み、それ以外の場合にはステップＳ９３３に進む。上タップ（Ｕ）６５１が正である場合、上タップ（Ｕ）６５１から「１」が減算されて、最初の処理（ステップＳ９１１）に戻る（ステップＳ９３２）。このとき、フレームメモリ開始アドレス（ＡＦ）６１０は更新されないため、次のライン転送でもフレームメモリ１４０の同じラインがローカルメモリ１６０に転送される。このようにして、上タップ（Ｕ）６５１が正ではなくなるまで、ステップＳ９１１乃至Ｓ９３２の手順が繰り返されて、上側の端拡張の領域に１ライン目のデータの複製が転送される。
【００８６】
ライン転送後に上タップ（Ｕ）６５１が正ではなく、矩形領域垂直サイズ（Ｖ）６３０が「１」より大きい場合にはステップＳ９３４に進み、それ以外の場合にはステップＳ９３５に進む。矩形領域垂直サイズ（Ｖ）６３０が「１」より大きい場合、矩形領域垂直サイズ（Ｖ）６３０から「１」が減算される（ステップＳ９３４）。そして、次のフレームメモリ開始アドレス（ＡＦ）６１０にフレームメモリ水平サイズ（Ｗ）６６０が加算されて、最初の処理（ステップＳ９１１）に戻る（ステップＳ９３４）。ただし、最終ラインだけは処理が異なる。矩形領域垂直サイズ（Ｖ）６３０が「１」である場合には（ステップＳ９３５）、矩形領域垂直サイズ（Ｖ）６３０から「１」が減算された後に、フレームメモリ開始アドレス（ＡＦ）６１０の加算は行われずに、最初の処理（ステップＳ９１１）に戻る（ステップＳ９３６）。このようにして、矩形領域垂直サイズ（Ｖ）６３０が正ではなくなるまで、ステップＳ９１１乃至Ｓ９３１、Ｓ９３３乃至Ｓ９３６の手順が繰り返されて、有効ラインの転送が行われる。
【００８７】
最後に有効ライン外の下端のライン転送が行われる。ステップＳ９３５において矩形領域垂直サイズ（Ｖ）６３０が正ではない場合には、転送制御部１７６は、下タップ（Ｄ）６５２が正か否かを判断する（ステップＳ９３７）。下タップ（Ｄ）６５２が正である場合にはステップＳ９３８に進み、それ以外の場合にはＤＭＡ転送処理を終了する。下タップ（Ｄ）６５２が正である場合、下タップ（Ｄ）６５２から「１」が減算された後に、最初の処理（ステップＳ９１１）に戻る（ステップＳ９３８）。このとき、フレームメモリ開始アドレス（ＡＦ）６１０は有効領域の最終ラインの先頭アドレスから更新されていないため、次のライン転送では最終ラインがローカルメモリ１６０に転送される。このようにして、下タップ（Ｄ）６５２が正ではなくなるまで、ステップＳ９１１乃至Ｓ９３２、Ｓ９３３、Ｓ９３５乃至Ｓ９３８の手順が繰り返されて、下側の端拡張の領域に最終ラインのデータの複製が転送される。
【００８８】
下タップ（Ｄ）６５２が正ではなくなれば、全ての転送が終了するため、ＤＭＡ転送処理は終了する。転送の終了は転送制御部１７６からＣＰＵ１１０に割込みとして通知される。
【００８９】
図１１は、本発明の実施の形態におけるフレームメモリ１４０からローカルメモリ１６０へのＤＭＡ転送処理を行うプログラムの一例を示す図である。
【００９０】
第１行目のｗｈｉｌｅ文は、プログラム全体のループを形成するものである。第２行目は、内部レジスタ１７７を初期化するものであり、ステップＳ９１１に対応する。
【００９１】
第３行目のｗｈｉｌｅ文は、矩形領域水平サイズ（Ｈ０）７４０が正である間、第１３行目までのループを形成するものであり、ステップＳ９１２に対応する。第４行目は、フレームメモリ１４０から読み出されたデータを変数ｄａｔａに代入して、フレームメモリ開始アドレス（ＡＦ）６１０を１つ（４バイト分）進めるものであり、ステップＳ９１３に対応する。ここでは、フレームメモリ開始アドレス（ＡＦ）６１０はフレームメモリ１４０のアドレスポインタとして用いられている。第５行目のｗｈｉｌｅ文は、左タップ（Ｌ０）７５３が正である間、第１０行目までのループを形成するものであり、ステップＳ９１４に対応する。
【００９２】
第６行目は、読み出されたデータの下位（左端）１バイトを変数ｔｅｍｐに代入するものである。第７行目は、１バイトデータを保持する変数ｔｅｍｐを４つ接続して４バイトの変数ｗｄａｔａに代入するものである。第８行目は、変数ｗｄａｔａの内容をローカルメモリ１６０に書き込んで、ローカルメモリ開始アドレス（ＡＬ）６２０を１つ（４バイト分）進めるものである。これら第６乃至８行は、ステップＳ９１５に対応する。第９行目は、左タップ（Ｌ０）７５３から「４」を減算するものであり、ステップＳ９１６に対応する。
【００９３】
第１１行目は、変数ｄａｔａの内容をローカルメモリ１６０に書き込んで、ローカルメモリ開始アドレス（ＡＬ）６２０を１つ（４バイト分）進めるものであり、ステップＳ９１７に対応する。ここでは、ローカルメモリ開始アドレス（ＡＬ）６２０は、ローカルメモリ１６０のアドレスポインタとして用いられている。第９行目は、矩形領域水平サイズ（Ｈ０）７４０から「４」を減算するものであり、ステップＳ９１８に対応する。
【００９４】
第１４行目のｗｈｉｌｅ文は、右タップ（Ｒ０）７５４が正である間、第１９行目までのループを形成するものであり、ステップＳ９２１に対応する。第１５行目は、読み出されたデータの上位（右端）１バイトを変数ｔｅｍｐに代入するものである。第１６行目は、１バイトデータを保持する変数ｔｅｍｐを４つ接続して４バイトの変数ｗｄａｔａに代入するものである。第１７行目は、変数ｗｄａｔａの内容をローカルメモリ１６０に書き込んで、ローカルメモリ開始アドレス（ＡＬ）６２０を１つ（４バイト分）進めるものである。これら第１５乃至１７行は、ステップＳ９２２に対応する。第１８行目は、右タップ（Ｒ０）７５４から「４」を減算するものであり、ステップＳ９２３に対応する。
【００９５】
第２０行目は、上タップ（Ｕ）６５１が正である場合に上タップ（Ｕ）６５１から「１」を減算するものであり、ステップＳ９３１およびＳ９３２に対応する。第２１行目は、矩形領域垂直サイズ（Ｖ）６３０が「１」より大きい場合に、次のフレームメモリ開始アドレス（ＡＦ）６１０にフレームメモリ水平サイズ（Ｗ）６６０を加算するものである。また、この第２１行目は、矩形領域垂直サイズ（Ｖ）６３０から「１」を減算するものである。この第２１行目は、ステップＳ９３３およびＳ９３４に対応する。第２２行目は、矩形領域垂直サイズ（Ｖ）６３０が「０」より大きい場合に矩形領域垂直サイズ（Ｖ）６３０から「１」を減算するものであり、ステップＳ９３５およびＳ９３６に対応する。第２３行目は、下タップ（Ｄ）６５２が「０」より大きい場合に下タップ（Ｄ）６５２から「１」を減算するものであり、ステップＳ９３７およびＳ９３８に対応する。第２４行目は、第２０乃至２３行の何れの条件にも合致しなかった場合に、第１行目のｗｈｉｌｅ文によるループを抜けて処理を終了するものである。
【００９６】
なお、このプログラム例では、端拡張方法として近傍拡張を用いる例について説明したが、他の端拡張方法を用いることもできる。ゼロ拡張の場合には、書込みデータを生成する第６乃至７行および第１５乃至１６行目（ステップＳ９１５およびＳ９２２）において、
wdata=0;
とすれば実現することができる。
【００９７】
また、設定値拡張の場合には、まず左右の端を拡張する際は、１バイトの設定値presetを用いて生成された４バイト拡張データが書込みデータwdataとなる。
temp=preset&0xFF;
wdata=(temp<<24)|(temp<<16)|(temp<<8)|temp;
【００９８】
また、近傍拡張の例では第１１行目（ステップＳ９１７）においてバッファ１７３の４バイトデータをローカルメモリ１６０に書込んでいるが、設定値拡張において上下の端の拡張の端を拡張する際は、条件によってはバッファ１７３の値は用いられない。すなわち、上タップ（Ｕ）６５１が「０」より大きい場合、または、上タップ（Ｕ）６５１および矩形領域垂直サイズ（Ｖ）６３０がともに「０」以下の場合には、バッファ１７３の値は用いられず、上述の左右の端拡張と同様に４バイト拡張データが用いられる。
【００９９】
図１２は、本発明の実施の形態におけるローカルメモリ１６０からフレームメモリ１４０へのＤＭＡ転送の処理手順例を示す図である。
【０１００】
この方向の転送は端の拡張を行う必要がないため、上タップ（Ｕ）６５１、下タップ（Ｄ）６５２、左タップ（Ｌ）６５３および右タップ（Ｒ）６５４の設定は無視される。矩形領域垂直サイズ（Ｖ）６３０にはＬＰＦ演算後の矩形領域の垂直サイズ「４８」が設定される。同様に、矩形領域水平サイズ（Ｈ）６４０にはＬＰＦ演算後の矩形領域の水平サイズ「４８」が設定される。さらに、フレームメモリ水平サイズ（Ｗ）６６０には「２０４８」が設定される。
【０１０１】
転送の制御は、ＤＭＡ制御部１７０内部の転送制御部１７６によって行われる。制御レジスタ１７１にローカルメモリ１６０からフレームメモリ１４０へのストアを指示する転送コマンド「１０」が書き込まれると、転送制御部１７６は以下の手順により転送を指示する。
【０１０２】
転送制御部１７６は、まず矩形領域垂直サイズ（Ｖ）６３０が正か否かを判断する（ステップＳ９４１）。矩形領域垂直サイズ（Ｖ）６３０が正である場合にはステップＳ９４２に進み、それ以外の場合にはＤＭＡ転送処理を終了する。
【０１０３】
そして、転送制御部１７６は、制御レジスタ１７１のデータのうち、矩形領域水平サイズ（Ｈ）６４０およびフレームメモリ開始アドレス（ＡＦ）６１０の各レジスタの値を、内部レジスタ１７７に保持する（ステップＳ９４２）。
【０１０４】
ライン転送では、転送制御部１７６は、矩形領域水平サイズ（Ｈ０）７４０が正か否かを判断する（ステップＳ９４３）。矩形領域水平サイズ（Ｈ０）７４０が正である場合にはステップＳ９４４に進み、それ以外の場合にはステップＳ９４７に進む。矩形領域水平サイズ（Ｈ０）７４０が正である場合、ローカルメモリ１６０から４バイトのデータが読み出される（ステップＳ９４４）。このとき、ローカルメモリ１６０側のアドレスには、ローカルメモリ開始アドレス（ＡＬ）６２０が用いられる。そして、ローカルメモリ開始アドレス（ＡＬ）６２０に「４」が加算される（ステップＳ９４４）。この読み出された４バイトのデータは、フレームメモリ１４０に書き込まれる（ステップＳ９４５）。このとき、フレームメモリ１４０側のアドレスには、フレームメモリ開始アドレス（ＡＦ０）７１０が用いられる。そして、フレームメモリ開始アドレス（ＡＦ０）７１０に「４」が加算される（ステップＳ９４５）。また、矩形領域水平サイズ（Ｈ０）７４０から「４」が減算されて（ステップＳ９４６）、ステップＳ９４３に戻る。このように、ステップＳ９４３乃至Ｓ９４６を繰り返すことにより、１ライン分の転送が行われる。
【０１０５】
矩形領域水平サイズ（Ｈ０）７４０正ではなくなると、次のラインの転送のために、矩形領域垂直サイズ（Ｖ）６３０から「１」が減算される（ステップＳ９４７）。そして、フレームメモリ開始アドレス（ＡＦ）６１０にフレームメモリ水平サイズ（Ｗ）６６０が加算されて、最初の処理（ステップＳ９４１）に戻る（ステップＳ９４７）。このように、矩形領域垂直サイズ（Ｖ）６３０が正である間、ステップＳ９４１乃至Ｓ９４７が繰り返されて、最終的には矩形領域のＤＭＡ転送が完了する。転送の終了は転送制御部１７６からＣＰＵ１１０に割込みとして通知される。
【０１０６】
図１３は、本発明の実施の形態におけるローカルメモリ１６０からフレームメモリ１４０へのＤＭＡ転送処理を行うプログラムの一例を示す図である。
【０１０７】
第１行目のｗｈｉｌｅ文は、矩形領域垂直サイズ（Ｖ）６３０が正である間、第８行目までのループを形成するものであり、ステップＳ９４１に対応する。第２行目は、内部レジスタ１７７を初期化するものであり、ステップＳ９４２に対応する。
【０１０８】
第３行目のｗｈｉｌｅ文は、矩形領域水平サイズ（Ｈ０）７４０が正である間、第６行目までのループを形成するものであり、ステップＳ９４３に対応する。第４行目は、ローカルメモリ１６０から読み出されたデータをフレームメモリ１４０に書き込むものである。このとき、ローカルメモリ１６０側のアドレスにはローカルメモリ開始アドレス（ＡＬ）６２０がポインタとして用いられ、フレームメモリ１４０側のアドレスにはフレームメモリ開始アドレス（ＡＦ０）７１０がポインタとして用いられる。そして、ローカルメモリ開始アドレス（ＡＬ）６２０およびフレームメモリ開始アドレス（ＡＦ０）７１０はそれぞれ１つ（４バイト分）進められる。この第４行目は、ステップＳ９４４乃至Ｓ９４５に対応する。第５行目は、矩形領域水平サイズ（Ｈ０）７４０から「４」を減算するものであり、ステップＳ９４６に対応する。
【０１０９】
第７行目は、次のラインの転送のために、フレームメモリ開始アドレス（ＡＦ）６１０にフレームメモリ水平サイズ（Ｗ）６６０を加算するとともに、矩形領域垂直サイズ（Ｖ）６３０から「１」を減算するものであり、ステップＳ９４７に対応する。
【０１１０】
図１４は、本発明の実施の形態における転送されるデータのデータ幅と端拡張との関係例を示す図である。
【０１１１】
図１４（ａ）は、転送されるデータのデータ幅が１バイトの場合に、左端拡張を行う例を示している。この例では、１バイトのデータ「Ｙ０」が左端のデータであるため、「Ｙ０」を４つ接続したものが４バイトの拡張データとなる。画像データが１バイトの輝度のみの場合がこれに該当する。上述の図１１のプログラム例もデータ幅は１バイトであり、プログラム例の第６乃至７行が左端拡張を行っている部分である。
temp=(data&0xFF);
wdata=(temp<<24)|(temp<<16)|(temp<<8)|temp;
【０１１２】
図１４（ｂ）は、転送されるデータのデータ幅が１バイトの場合に、右端拡張を行う例を示している。この例では、１バイトのデータ「Ｙ３」が右端のデータであるため、「Ｙ３」を４つ接続したものが４バイトの拡張データとなる。図１１のプログラム例における第１５乃至１６行が右端拡張を行っている部分である。
temp=(data>>24)&0xFF;
wdata=(temp<<24)|(temp<<16)|(temp<<8)|temp;
【０１１３】
図１４（ｃ）は、転送されるデータのデータ幅が２バイトの場合に、左端拡張を行う例を示している。この例では、２バイトのデータ「Ｙ０ａ」「Ｙ０ｂ」が左端のデータであるため、「Ｙ０ａ」「Ｙ０ｂ」を２つ接続したものが４バイトの拡張データとなる。具体的には、１画素が２バイト長の輝度信号を扱う場合が該当する。また、１バイト長の色差信号ＣｂおよびＣｒが順に並んでいて、ＣｂとＣｒを合わせて２バイトとして扱う場合もこれに該当する。この場合のプログラムは以下のようになる。
temp=(data&0xFFFF);
wdata=(temp<<16)temp;
【０１１４】
図１４（ｄ）は、転送されるデータのデータ幅が２バイトの場合に、右端拡張を行う例を示している。この例では、２バイトのデータ「Ｙ１ａ」「Ｙ１ｂ」が右端のデータであるため、「Ｙ１ａ」「Ｙ１ｂ」を２つ接続したものが４バイトの拡張データとなる。この場合のプログラムは以下のようになる。
temp=(data>>16)&0xFFFF;
wdata=(temp<<16)temp;
【０１１５】
図１４（ｅ）は、転送されるデータのデータ幅が４バイトの場合に、左端拡張を行う例を示している。この例では、４バイトのデータ「Ｙ０ａ」「Ｙ０ｂ」「Ｙ０ｃ」「Ｙ０ｄ」が左端のデータであるため、「Ｙ０ａ」「Ｙ０ｂ」「Ｙ０ｃ」「Ｙ０ｄ」が４バイトの拡張データとなる。具体的には、ＲＧＢの他に透過率を表すαを追加した４つの１バイトデータを１画素に割り当てる場合がこれに該当する。
【０１１６】
図１４（ｆ）は、転送されるデータのデータ幅が４バイトの場合に、右端拡張を行う例を示している。この例では、４バイトのデータ「Ｙ０ａ」「Ｙ０ｂ」「Ｙ０ｃ」「Ｙ０ｄ」が右端のデータであるため、「Ｙ０ａ」「Ｙ０ｂ」「Ｙ０ｃ」「Ｙ０ｄ」が４バイトの拡張データとなる。したがって、これら図１４（ｅ）および（ｆ）の場合のプログラムは何れも以下のようになる。
wdata=data;
【０１１７】
このようなデータ幅に応じたデータの並び替えは、データ整列部１７４において行われる。データ幅の値は、図７に示した制御レジスタ１７１の転送制御レジスタ（ＣＴＬ）６７０のデータ幅に保持されており、この値に応じて転送制御部１７６からデータ整列部１７４に並び替えの指示がされる。
【０１１８】
なお、ここでは、近傍拡張の場合のデータ幅と端拡張との関係例について説明したが、設定値拡張においても同様に適用可能である。例えば、設定値拡張において２バイト長のデータを扱う場合は、設定値presetは２バイト分設定し、以下のように拡張データが生成される。
temp=preset&0xFFFF;
wdata= (temp<<16)|temp;
なお、図１５は、本発明の実施の形態において２バイトの設定値拡張を行った例を示す図である。
【０１１９】
また、設定値拡張において４バイト長のデータを扱う場合は、設定値presetは４バイト分設定し、４バイトデータをそのまま書き込む。
wdata= preset;
【０１２０】
図１６は、本発明の実施の形態における転送されるデータのデータ幅と端拡張との他の関係例を示す図である。
【０１２１】
画像データの端拡張の態様としては、他にも、輝度色差データに対応することが考えられる。輝度色差データ｛Ｙ０、Ｃｂ、Ｙ０、Ｃｒ｝の並びにより、４つの１バイトデータで２画素を表す場合がある。この場合、左端拡張を行う際には、図１６（ａ）のように左端の輝度「Ｙ０」を２画素分拡張して、色差については２画素を代表する「Ｃｂ」「Ｃｒ」を用いることができる。一方、右端拡張を行う際には、図１６（ｂ）のように右端の輝度「Ｙ１」を２画素分拡張して、色差については２画素を代表する「Ｃｂ」「Ｃｒ」を同様に用いることができる。これらの並び替えもデータ整列部１７４において行われる。
【０１２２】
このように、本発明の実施の形態によれば、フレームメモリ１４０からバッファ１７３に転送されたデータをデータ整列部１７４によって並び替えてローカルメモリ１６０に転送することにより、ＤＭＡ転送と並行して端拡張処理を行うことができる。これにより、端拡張処理に要する時間を隠蔽することができ、全体の画像処理時間を短縮することができる。
【０１２３】
また、本発明の実施の形態によれば、より簡単なプログラムによって画像処理の端拡張を行うことができるため、プログラムコードを削減することができる。これにより、プログラムを格納するメモリの使用量を減少させることができる。
【０１２４】
なお、本発明の実施の形態では、説明を簡単にするために最小限の機能のＤＭＡＣを示したが、端拡張が実現できれば一般に広く知られているＤＭＡＣの機能が搭載されていても構わない。
【０１２５】
一般的なＤＭＡＣは、転送を高速に行うためにバースト機能を用いている。本発明の実施の形態では４バイト長の転送のみを示したが、バッファ１７３を、例えば１６バイト幅のバッファにより構成し、バースト転送が可能か否かを転送制御部１７６が判断し、転送可能な場合は４バイトの４バースト転送を発行するように制御すると、より性能の高いＤＭＡＣを実現することができる。
【０１２６】
一般的なＤＭＡＣでは、４バイト単位に限らず１バイト単位や２バイト単位の転送サイズを指定することができ、転送サイズに合わせたアドレスも指定可能である。本発明の実施の形態では４バイト境界のみサポートすることを想定したが、他の単位の転送に対応してもよい。
【０１２７】
一般的なＤＭＡＣは、同一バス間の転送をサポートし、転送の仕様は対称の場合が多い。本発明の実施の形態では、ＤＭＡＣをフレームメモリとローカルメモリとの間の転送のみに用いたが、同一メモリ間の転送に用いるようにしてもよい。また、本発明の実施の形態では、端拡張はフレームメモリからローカルメモリへの転送の場合のみ対応し、矩形領域もフレームメモリだけという非対称な仕様を想定したが、それ以外のメモリ転送でも対応して対称な仕様にしてもよい。例えば、ローカルメモリも矩形領域転送に対応している場合には、フィルタ処理の際に画素を詰める必要がなくなり、処理が平易になる利点がある。本発明の実施の形態では、非対称の仕様としたため、上述のようにフローチャートが２種類存在したが、フレームメモリからローカルメモリへ転送する図９および図１０のフローチャートに合わせて他の転送も制御するようにしてもよい。
【０１２８】
公知のＤＭＡＣの中には、バイトスワップ機能を備えているものもある。例えば、バイト長のデータのエンディアンを切り替える場合、｛Ｙ０、Ｙ１、Ｙ２、Ｙ３｝として転送されたデータを｛Ｙ３、Ｙ２、Ｙ１、Ｙ０｝に並び替える。本発明の実施の形態におけるＤＭＡ制御部１７０もバイトスワップ機能を備えてもよい。その場合、端拡張の並び替えとバイトスワップの並び替えを統合して、回路規模を削減することができる。並び替えの指定は、転送制御部１７６が判断し、データ整列部１７４に指示する。
【０１２９】
公知のＤＭＡＣの中には、ＤＭＡ転送に必要なレジスタ設定をリストとしてメモリ上に生成しておき、そのアドレスを制御レジスタに設定しておき、転送が終わると次のリストを読み出し、自動的に次の転送を開始するリンクリスト機能を備えたものもある。本発明の実施の形態におけるＤＭＡ制御部１７０もリンクリスト機能を備えてもよい。ＤＭＡ転送中にＣＰＵがリンクリストを生成できるため、ＤＭＡ転送の設定にかかる処理時間を裏に隠すことができ、さらに処理を高速に行うことが可能になる。
【０１３０】
なお、本発明の実施の形態では、タップ数として上下左右の４つを想定したが、これに限られるものではない。通常は上下両方に拡張することはないため、例えば垂直タップレジスタを１つだけ用意し、負の値であれば上側の拡張を意味し、正の値であれば下側の拡張を意味し、「０」であれば上下方向には拡張しないことを意味するような仕様にしてもよい。水平の端拡張も同様である。この仕様により、設定すべきレジスタの数を減らすことができる。
【０１３１】
本発明の実施の形態では、端拡張処理を伴う転送の設定の際に、矩形サイズと先頭アドレスは有効画素部分について指定したが、無効部分を合わせた全体に対して矩形サイズを指定する仕様にしてもよい。ここで、図１７に示すように、無効部分を合わせた全体に対して矩形サイズを指定するフレームメモリ開始アドレス（ＡＦ'）６１１、矩形領域垂直サイズ（Ｖ'）６３１および矩形領域水平サイズ（Ｈ'）６４１を想定すると、以下の関係式が成り立つ。
Ｈ＝Ｈ'−（Ｒ＋Ｌ）
Ｖ＝Ｖ'−（Ｕ＋Ｄ）
ＡＦ＝ＡＦ'＋ Ｕ×Ｈ'＋Ｌ
したがって、転送制御部１７６において転送開始時に制御レジスタ１７１の書換えを一度行うように処理すれば、上述の構成によって実現することができる。このような仕様にすることにより、矩形領域が画像の端か否かにかかわらず、矩形領域垂直サイズ（Ｖ'）６３１および矩形領域水平サイズ（Ｈ'）６４１が同じ値になるため、ＤＭＡＣを設定するプログラムをより平易にすることができる。
【０１３２】
本発明の実施の形態のＤＭＡ制御部１７０は、制御レジスタ１７１の値を直接書き換えることにより転送を制御したが、制御レジスタ１７１をもう１セット内部に備えて、ＤＭＡ転送の最初に全レジスタを取り込むようにしてもよい。このように構成することにより、ＣＰＵから認識されるレジスタの値はＤＭＡ転送を行っても値が変化しないため、矩形領域垂直サイズ（Ｖ）６３０および矩形領域水平サイズ（Ｈ）６４０など値を変える必要がない場合には書換えをしなくてもよくなる。これにより、プログラムを削減することができる。また、ＤＭＡ転送中も次のＤＭＡ転送の設定を行うことが可能になる。
【０１３３】
本発明の実施の形態では、プロセッサと並列に動作することができるＤＭＡ転送中に端拡張も同時に行うため、端拡張にかかる処理時間を隠蔽することが可能になる。特に、２次元データを高速に処理する画像処理ＬＳＩに有効であり、画像処理ＬＳＩを搭載した、デジタルカメラやデジタルビデオカメラ、ゲーム機などに応用することができる。
【０１３４】
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、上述のように特許請求の範囲における発明特定事項とそれぞれ対応関係を有する。ただし、本発明は実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変形を施すことができる。
【０１３５】
また、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disk）、メモリカード、ブルーレイディスク（Blu-ray Disc（登録商標））等を用いることができる。
【図面の簡単な説明】
【０１３６】
【図１】本発明の実施の形態におけるデータ転送装置の一構成例を示す図である。
【図２】本発明の実施の形態におけるＤＭＡ制御部１７０の一構成例を示す図である。
【図３】本発明の実施の形態における制御レジスタ１７１のアドレスマップの一例を示す図である。
【図４】本発明の実施の形態における１フレームの画像データを示す図である。
【図５】本発明の実施の形態における端拡張の指定例を示す図である。
【図６】本発明の実施の形態における端拡張方法の種別を示す図である。
【図７】本発明の実施の形態における転送制御レジスタ（ＣＴＬ）６７０のフィールド構成例を示す図である。
【図８】本発明の実施の形態におけるローカルメモリ１６０における画像データの遷移例を示す図である。
【図９】本発明の実施の形態におけるフレームメモリ１４０からローカルメモリ１６０へのＤＭＡ転送の処理手順例の前半を示す図である。
【図１０】本発明の実施の形態におけるフレームメモリ１４０からローカルメモリ１６０へのＤＭＡ転送の処理手順例の後半を示す図である。
【図１１】本発明の実施の形態におけるフレームメモリ１４０からローカルメモリ１６０へのＤＭＡ転送処理を行うプログラムの一例を示す図である。
【図１２】本発明の実施の形態におけるローカルメモリ１６０からフレームメモリ１４０へのＤＭＡ転送の処理手順例を示す図である。
【図１３】本発明の実施の形態におけるローカルメモリ１６０からフレームメモリ１４０へのＤＭＡ転送処理を行うプログラムの一例を示す図である。
【図１４】本発明の実施の形態における転送されるデータのデータ幅と端拡張との関係例を示す図である。
【図１５】本発明の実施の形態において２バイトの設定値拡張を行った例を示す図である。
【図１６】本発明の実施の形態における転送されるデータのデータ幅と端拡張との他の関係例を示す図である。
【図１７】本発明の実施の形態における端拡張の他の指定例を示す図である。
【符号の説明】
【０１３７】
１１０  ＣＰＵ
１２０  ＲＯＭ
１３０  画像信号入出力部
１４０  フレームメモリ
１６０  ローカルメモリ
１７０  ＤＭＡ制御部
１７１  制御レジスタ
１７２  バス制御部
１７３  バッファ
１７４  データ整列部
１７５  データ制御部
１７６  転送制御部
１７７  内部レジスタ
１９０  バス
６１０  フレームメモリ開始アドレス（ＡＦ）
６２０  ローカルメモリ開始アドレス（ＡＬ）
６３０  矩形領域垂直サイズ（Ｖ）
６４０  矩形領域水平サイズ（Ｈ）
６５１  上タップ（Ｕ）
６５２  下タップ（Ｄ）
６５３  左タップ（Ｌ）
６５４  右タップ（Ｒ）
６６０  フレームメモリ水平サイズ（Ｗ）
６７０  転送制御レジスタ（ＣＴＬ）
６８０  設定値レジスタ（ＰＲ）
【図１】
2010009447.tif 000003
【図２】
2010009447.tif 000004
【図３】
2010009447.tif 000005
【図４】
2010009447.tif 000006
【図５】
2010009447.tif 000007
【図６】
2010009447.tif 000008
【図７】
2010009447.tif 000009
【図８】
2010009447.tif 000010
【図９】
2010009447.tif 000011
【図１０】
2010009447.tif 000012
【図１１】
2010009447.tif 000013
【図１２】
2010009447.tif 000014
【図１３】
2010009447.tif 000015
【図１４】
2010009447.tif 000016
【図１５】
2010009447.tif 000017
【図１６】
2010009447.tif 000018
【図１７】
2010009447.tif 000019