以下、添付図面を参照して本発明に係る実施形態を詳細に説明する。
[第1実施形態]
●装置構成
図1Aは、本実施形態に係る情報処理装置(コンピュータ)としての画像処理装置の全体構成例を示すブロック図である。同図に示すように本実施形態の画像処理装置は、CPU回路部100、画像読み取り部120、映像入力部130、画像処理部150、映像表示部160、画像印刷部170、等を備える。そして、これらがシステムバス(内部バス、共有バス)190に接続されている。
以下、これら構成による動作の概要について説明する。
画像読み取り部120は、レンズ124、CCDセンサ126、及びアナログ信号処理部127等を有する。すなわち、レンズ124を介してCCDセンサ126に原稿110の画像情報が結像され、CCDセンサ126によりその画像情報がR(Red)、G(Green)、B(Blue)のアナログ電気信号に変換される。アナログ電気信号に変換された画像情報は、A/D変換部127に入力され、R、G、Bの色毎に補正等が行われた後にアナログ/デジタル変換(A/D変換)されることで、デジタル化されたフルカラーのデジタル画像信号(画素値)が生成される。生成されたデジタル画像信号は映像入力部130へ供給され、その後、DMAC (Direct Memory Access Controller)192へ入力される。
DMAC192は、CPU102によって予め動作が設定されており、入力されたデジタル画像信号を、システムバス(内部バス、共有バス)190を介してCPU回路部100のRAM106や外部記憶装置108に記憶させる。なお、複数の画素についてのデジタル画像信号を1枚の画像を形成するように集合させたデータを、以下では画像データと呼ぶ。本実施形態では、デジタル画像信号は画像データの形式でRAM106等に記憶されるものとする。画像処理を行う場合、CPU102もしくは後述の画像入出力部230は、DMAC194を起動してRAM106等に記憶された画像データを読み込み、処理の対象となる画素に対応するデジタル画像信号を画像処理部150に供給する。
画像処理部150は、例えば、入力されたデジタル画像信号に対して、スキャナなどのセンサ・デバイスの読み取り素子の個体差の補正や、入力ガンマ補正などの色補正等を行い、処理後の画像データを出力する画像データ処理装置である。そしてDMAC196が、画像処理部150から出力された画像データをRAM106や外部記憶装置108に格納する。なお、DMAC196は以下のように制御される。画像処理部150に含まれる、後述の画像入出力部230がDMAC196の動作を設定し、また、画像入出力部230がDMAC196を起動する。なおDMAC196の動作としては、例えば処理後の画像データをRAM106へ書き込むように設定しておく。このように画像処理部150は、入力されたデジタル画像信号に対し、入力色補正処理、空間フィルタ処理、色空間変換、濃度補正処理、及び中間調処理等、画像を印刷するための画像処理を施す。そして、印刷可能な画像データを作成した後、その画像データをDMAC196によりRAM106等に格納させる。
DMAC198は、RAM106に格納された画像処理済みの画像データを読み込んで、画像印刷部170へ出力する。画像印刷部170は例えばプリンタである。DMAC198の設定は例えばCPU102が行う。画像印刷部170は、インクジェットヘッドやサーマルヘッド等を使用した印刷出力部(不図示)を備え、入力された画像データのデジタル画像信号に基づいて記録紙上に画像を記録する。
なお、ここでは画像読み取り部120で読み取った原稿110の画像データを、画像印刷部170にて印刷出力する例を示したが、これはあくまで例示に過ぎない。例えば、映像入力部130や映像表示部160等を用いることにより、入力された映像に対し所望の画像(映像)処理を施し、処理後の映像をディスプレイなどの映像表示装置(不図示)に表示してもよい。
CPU回路部100は、演算制御用のCPU102、固定データやプログラムを格納するROM104、データの一時保存やプログラムのロードに使用されるRAM106、及び外部記憶装置108等を備える。CPU回路部100は、画像読み取り部120、画像処理部150、及び画像印刷部170等を制御し、本実施形態の画像処理装置のシーケンスを統括的に制御する。外部記憶装置108は、本実施形態の画像処理装置が使用するパラメータやプログラム、補正データを記憶するハードディスク等の記憶装置(もしくは記憶媒体)である。またRAM106のデータやプログラム等は、外部記憶装置108からロードされる構成としてもよい。また本実施形態では、DMAC194,196を介して画像処理部150とのデータ転送を行うが、この転送データの格納先はRAM106に限らず外部記憶装置108であってもよい。そしてRAM106や外部記憶装置108に確保した転送データの格納先などを、以下ではグローバルバッファと総称する。
次に、画像データに画像処理を施す画像処理部150の詳細構成およびその動作について、図1Bを用いて説明する。なお図1Bのようにグローバルバッファからの画像データの読み込みを行うDMAC194と、同じく書き出しを行うDMAC196が、画像処理部150に含まれるように構成しても構わない。
図1Bのように画像処理部150は、共有DMAC部210、共有メモリ部220、画像入出力部230、画像処理実行部240で構成されている。そして、各部は、内部に複数の回路を備えている。例えば、図1Bの例では、共有DMAC部210には、前述のDMAC (Read) 194やDMAC (Write) 196が各々2基ずつ搭載されている。また共有メモリ部220は、メモリ(1) 221〜メモリ (N) 223のような複数個の記憶手段で構成されている。そして、各々のメモリは、一般的には1つもしくは複数のSRAMなどで実現される。この共有メモリ部220を構成する各メモリを、前出のグローバルバッファと対比し、以下ではローカルバッファと総称する。
また同様に画像入出力部230には、複数の画像入出力部(1)231〜(Z)233を備え、画像処理実行部240には同様に複数の画像処理実行部(1)241〜(Z)243を備える。
共有DMAC部210と共有メモリ部220は連結されており、一対の共有DMAC部210と共有メモリ部220を、画像処理のデータ転送部と総称する。また画像入出力部230の1つと画像処理実行部240の1つが一対で連結されており、この一対を画像処理のデータ処理部と総称する。また画像処理実行部は、画像データを扱う画像処理以外の用途でも構わないため、単にデータ処理実行部という呼称でも構わない。なお、データ処理部は最低でも3基搭載することが望まれる。
上記のように画像処理部150には、画像処理のデータ処理部(一対の画像入出力部と画像処理実行部)が(1)〜(Z)として記載した通り複数備えられている。そして、複数のデータ処理部に対して画像処理のデータ転送部(一対の共有DMAC部と共有メモリ部)が1個搭載されており、データ処理部(1)〜(Z)からデータ転送部は共有されている。そしてデータ処理部(1)〜(Z)とデータ転送部は、読み込み(LOAD)ポート251、書き出し(STORE)ポート252、送信ポート(SENDポート)253、受信ポート(RECVポート) 254を介して接続されている。
例えば、CPU102が画像入出力部(1)231をレジスタI/Fを介して起動する。そして画像入出力部(1)231の画像入力部の読み込み(LOAD)部は読み込み(LOAD)ポート251を介してDMAC(Read)194を起動する。そしてDMAC194はグローバルバッファから入力画像データを読み込む。これらの動作を読み込み(LOAD)動作と定義する。なお、このときの画像データの構造については後述する。そして読み込まれた入力画像データは、一旦、ローカルバッファ(共有メモリ部220のメモリ)に一時記憶される。次に画像入出力部(1)231の画像入力部の送信(SEND)部は送信(SEND)ポート253を介してローカルバッファから一時記憶された画像データを読み出す。このとき、送信(SEND)部は送信(SEND)ポート253を介してリード要求を行い、共有メモリ部220からのリード応答で共有メモリ部220のメモリからリード値(画像データ)を受け取る。そして、画像データから画素値を生成して、画像処理実行部241のコマンドに変換して画像処理実行部(1)241に送信する。これらの動作を送信(SEND)動作と定義する。そして画像処理実行部(1)241は、入力画素値に対して所定の画像処理を施し、その結果として得られた出力画素値を画像入出力部(1)231へ出力する。なお、画像処理実行部(1)241における処理の詳細については後述する。なお、このとき入力画素値および出力画素値は1つ以上の画素値であって、複数の画素値が入力画素値として入力され、それに対して1つの画素値が出力画素値として出力されてもよい。
画像入出力部(1)231において画像出力部の受信(RECV)部は、処理後の出力画素値から出力画像データを生成する。このとき、受信(RECV)部は受信(RECV)ポート254を介してライト要求を行い、共有メモリ部220のメモリに対しライト値(出力画素をもとに生成した画像データ)を書き込む。書き込みが完了すると、受信(RECV)部は受信(RECV)ポート254からライト応答を受け取ってライト動作を完了する。そして、受信(RECV)部は受信(RECV)ポート254を介してローカルバッファに出力画像データを一時記憶する。これらの動作を受信(RECV)動作と定義する。
そして、画像出力部の書き出し(STORE)部は、書き出し(STORE)ポート252を介してDMAC(Write)196を起動する。そしてDMAC(Write)196はローカルバッファに一時記憶された出力画像データをグローバルバッファに書き出す。これらの動作を書き出し(STORE)動作と定義する。
そして最後に、一連の画像処理が完了した後、画像入出力部(1)231はCPU102に画像処理の完了割り込み(不図示)をアサートして画像処理を完了する。
このように画像処理部150は、画像入出力部230がDMAC194を介して画像データを取得し、画像処理実行部240で該画像データに対するデータ処理を実行する。そして、データ処理後の画像データを、画像入出力部230がDMAC196を介して出力する。すなわち画像処理部150は、画像処理装置内に含まれる画像データにデータ処理を施し、処理後の画像データを画像処理装置へ戻す役割を担う。また画像入出力部230は、データの入出力の調節を行うデータ入出力制御装置としての役割を有する。
以上では、データ処理部(1)について画像処理の一例を説明したが、データ処理部(2)〜(Z)についても基本動作は同様である。このとき、データ処理部(1)〜(Z)は、データ転送部を共有しているが、データ転送部に搭載された1つのDMACやメモリを時分割多重により排他利用してもよい。 またデータ処理部(1)〜(Z)は、もちろんデータ転送部に複数のDMACやメモリを備えて、複数のハードウェア資源をデータ処理部ごとに分配することにより排他利用してもよい。
次に、画像処理部150の画像処理実行部(1)241〜(Z)243について、図1Cを用いて詳細に説明する。ここでは、簡単のため、画像処理実行部(1)241について説明するが、他の画像処理実行部も実質的に同じであると理解されたい。
画像処理実行部(1)241は、画像処理回路(1)1531〜画像処理回路(P)1537のP個の画像処理回路と、インターコネクト1530とで構成される。P個の画像処理回路とインターコネクト1530とは、入力ポート1532,1535,…,1538、および出力ポート1533,1536,…,1539等のポートを介して互いに接続される。各画像処理回路は、それぞれが1つの画像処理を行う。画像処理とは例えば、入力色補正処理、色空間変換、濃度補正処理、中間調処理、空間フィルタ処理、解像度変換、トリミング処理、端部拡張処理、IP変換、クロマ・アップサンプリング等のいずれかである。各画像処理回路は、パイプライン回路等のハードウェアで実現されてもよいし、プロセッサとプログラム(ソフトウェア)等で実現されてもよい。そして、対応する入力ポート155から入力画素値を含むコマンドを受け取り、処理を施した後に、対応する出力ポート156から処理後の出力画素値を含むコマンドを出力する。
インターコネクト1530は、クロスバーやリングバス等の接続手段で実現されており、入力ポートと出力ポートの接続先を任意に切り替えることができる。したがって、CPU102がこれらポートの接続先の指定を設定することで、インターコネクト1530は、例えばP個の画像処理回路の実行順序を変更し、または一部の処理をバイパスすることができる。このように画像処理実行部(1)241は、アプリケーションに応じて、各種の処理を取捨選択して組み合せ、所望の画像処理を実現する。
また画像処理実行部(1)241の他の実現形態として、図1D、1Eのように、画像入出力部230と共有メモリ1540を介したコプロセッサI/F 1545で接続されてもよい。画像入出力部は共有メモリ1540に複数の入力画素値を書き出し、入力データを有効化する。画像処理実行部(1)241は入力データを受信に応じて、制御シーケンサ1541が起動し、演算器アレイ1542を制御してデータ処理をして、共有メモリ1540に出力データを書き戻す。そして制御シーケンサ1541は出力データを有効化して画像入出力部230にデータ処理の完了を通知する。このとき制御シーケンサ1541と演算器アレイ1542はプロセッサ1543そのものでもよい。また共有メモリ1540を介したコプロセッサI/F 1545が入力FIFOと出力FIFOであっても同様のことを実現することができる。
なお、画像処理実行部(1)241は、画像処理装置内に含まれる画像データ対してデータ処理を施す役割を担うため、データ処理実行部と呼称しても何ら問題はない。
●バンド処理
以下、本実施形態における画像データの領域分割手法として、画像データを1次元分割したバンド領域ごとに処理を行うバンド処理について説明する。
以下、本実施形態におけるバンド処理について、図3を用いて説明する。バンド処理では、図3(a)乃至(d)に示されるように、1枚の画像データ300を帯状のバンド領域301〜304に分割し、この領域毎に逐次、画像処理を行う。なおバンド領域は、画像データを主走査方向または副走査方向のいずれかに分割したものであるから、バンド領域と画像データとは、主走査方向または副走査方向のいずれかにおいて長さが一致する。図3(a)乃至(d)の例では、画像データは副走査方向に対して分割され、画像データとバンド領域とでは、主走査方向で同一の長さを有し、副走査方向では、最後のバンドを除き同じ長さを有する。最後のバンドは、処理対象の画像の垂直方向の画素数が、バンドの垂直方向の長さの整数倍となるとは限らないからである。以下、この分割された細長い領域をバンド領域と呼び、バンド領域が展開される記憶領域をバンドメモリ、画像データを分割する行為をバンド分割と呼ぶ。バンドメモリは、システム上の適切な記憶領域に確保されれば良いが、ここでは説明を簡潔にするために、バンドメモリをRAM106内の記憶領域(グローバルバッファ)として確保するとする。
また以下では、図3(e)に示すように、画像データの座標系(主走査方向-副走査方向)を、長さ方向と高さ方向という座標系(バンド領域座標系)によって定義し、バンド領域を長さ×高さで表現する。バンド領域の長さ、すなわちバンド領域の長さ方向の一辺の大きさは、画像データの主走査方向または副走査方向の長さの何れかの値とする。また、バンド領域の高さ、すなわちバンド領域の高さ方向の一辺の大きさは任意の値となる。図3(e)の例では、長さ方向は主走査方向であり、高さ方向は副走査方向である。
図3(a)乃至(d)に示すバンド処理では、まず第1のバンド領域301を、RAM106上のバンドメモリに展開して画像処理を行う。次に第2のバンド領域302を、第1のバンド領域301が展開されたRAM106上のバンドメモリに上書き展開して、画像処理を行なう。さらにその後、第3のバンド領域303を、第2のバンド領域302が展開されたRAM106上のバンドメモリに上書き展開し、画像処理を行なう。そして最後に第4のバンド領域304を、第3のバンド領域303が展開されたRAM106上のバンドメモリに上書き展開して画像処理を行なう。図3(a)乃至(d)からも分かるように、バンド領域301〜304の長さは同じであるが、高さは同じでなくても良い。したがって、バンドメモリの高さは、高さ方向の一辺の大きさが最も大きいバンド領域(図3(a)乃至(d)ではバンド領域301〜303に応じて決定される。
なお本実施形態のバンド処理では、各バンド領域間で隙間ないものである。しかし、空間フィルタ処理等の局所(近傍)画像処理を行なうために、図3(f)乃至(h)に示すように、各バンド領域が、隣接するバンド領域の一部分に重なり合うように設定されても構わない。
また図3(p)乃至(r)のように、例えば画像データを主走査方向において分割した場合、図3(s)に示すように、長さ方向が副走査方向となり高さ方向が主走査方向となる。図3(p)乃至(r)のようなバンド分割は、例えば画像データの主走査方向の大きさが副走査方向の大きさより大きい場合に行うようにしてもよい。
●画像データ構造
以下、本実施形態における画像データの構造について詳細に説明する。本実施形態では上述したように、画像データはRAM106内の記憶領域(グローバルバッファ)に一時的に格納される。一般的にメインメモリであるRAM106は安価なDRAMで構成されることが多い。したがって、本実施形態のようにDMACを介して画像データを読み書きする場合、DRAMが性能を落とさずに読み書きできる単位で画像データを取り扱うことが望ましい。
図4Aに、DRAMで構成されるRAM106における画像データの格納例、および画像データのデータ構造例を示す。同図の例では、RAM106(DRAM)上にデータ領域(IMG_AREA_STR_ADDRからIMG_AREA_END_ADDRまでの領域)が確保され、ここに画像処理に必要な種々の画像データが格納される。図4Aは、点順次形式の画像データの格納例として、RAM106のデータ領域に、S5_IMG425とS6_IMG426の2種の画像データが格納された例を示している。この例では、DRAMの性能を落とさずに画像データの読み書きができるように、格納される画像データの容量の最小単位を、参照符号408に示すように32bit×8wordの32Byteとしている。すなわち、画像データS5_IMG425とS6_IMG426の格納容量は32Byteの整数倍となる。
次に、画像データの構造について詳細に説明する。画像データ440(S5_IMG425等)は、点順次形式でR(Red),G(Green),B(Blue)の色成分ごとの画素値を有する。画像データ440は32Byte単位の領域データからなり、各領域(例えば領域442)は、参照符号444で示すように、複数個(この例では8個)の画素値がパッキングされている。したがって画像データ440は、8M×N画素のサイズからなる。そして、参照符号444に含まれる8つの画素値のそれぞれには、参照符号446で示すようにそれぞれ10bitのR,G,Bの値がパッキングされている。なお、参照符号446における残りの2bitは、DRAMへのアクセスを簡単にするため(効率よくするため)に、データを格納しない無効データ(ダミーデータ)とする。なお、図4Aでは画像データの最小単位を、データ領域442のように垂直方向1画素、水平方向8画素からなる32Byteとして定めた例を示したが、もちろん最小単位はこの例に限らず、例えば垂直2画素、水平4画素を最小単位としても良い。
●画像データの入出力
以下、本実施形態における、RAM106から画像処理部150への、または画像処理部150からRAM106への画像データの入出力処理について、図2を用いて詳細に説明する。本実施形態の画像処理装置は、1つの画像データ300からバンド領域301(幅Bdl×高さBdh)を抜き出し、入力画像データとしてRAM106に格納する。このバンド領域の入力画像データは、図4Aで説明したように、RAM106で取り扱いやすくなるよう、参照符号280に示す32Byteを単位としたデータ構造からなる。
図2において、前述のようにCPU102がレジスタI/F 2521を介して画像入出力部230を起動する。画像入出力部230の読み込み(LOAD)部は読み込み(LOAD)ポート251を介して共通DMAC部210のDMAC194を起動する。するとDMAC194は、このバンド領域の入力画像データ280を、図1に示したシステムバス(内部バス、共有バス)190を介してRAM106から読み込み、画像処理部150へ供給する。入力画像データ280は、上述したデータ構造にしたがって、幅32Byte×高さBdh_inの処理単位で、領域(1)281から領域(M) 289までのM個の画素領域(小領域)に分けられる。そして、DMAC194は、このM個の小領域の入力画像データを、小領域(1)281から小領域(M)289まで順次読み込み、画像処理部150に供給する。画像処理部150は、この小領域の入力画像データを受け取り、この小領域単位で画像処理を実行する。なお、画像処理部150における処理単位の大きさに応じて、バンドの小領域ごとに読み込んでもよいし、バンドの全部の画素領域を一度に読み込んでもよい。
このとき読み込み(LOAD)ポート251を介してDMAC194に指示するためのDMA情報には、例えば、グローバルバッファ上の読み込み先の「先頭アドレス」、「転送長」、「インクリメント・アドレス」および「繰り返し回数」の項目が含まれる。例えば、図4Aに示した点順次形式の画像データであれば、指示信号に含まれる各項目の内容は以下のようになる。
・先頭アドレス :S5_IMG_STR_ADDR
・転送長(32Byte単位のデータの読出し回数) :1回(32Byte)
・インクリメント・アドレス :1ラインのデータ量=32Byte×M
・繰り返し回数 :バンド領域の高さ=Bdh_in回
この指示信号によれば、先頭アドレスS5_IMG_STR_ADDRから、まず32Byteのデータ、すなわち小領域(1)281の第1行目が読み出される。そして、次のデータを取得するため、アドレスを32Byte×Mだけ増加させることで、小領域(2)〜(M)の1行目のデータの読み込みが飛ばされて、小領域(1)281の第2行目の32Byteのデータを読み出すこととなる。そして、繰返し数Bdh_in回、すなわち、小領域(1)281のBdh_in行分のデータを読み込むことにより、小領域(1)281の全てのデータが読み込まれる。小領域(2)〜小領域(M)の入力画像データの読み込みでは、「先頭アドレス」を順次32ByteずつずらしてDMAC194を動作させる。このように本実施形態の画像処理装置では、所望する小領域の入力画像データをRAM106からDMA転送で読み込む。これらのDMA情報をグローバルバッファへのDMA情報(第1のDMA情報)と呼称する。
また、上記に加え、読み込み(LOAD)ポート251を介して指示するDMA情報には、例えば、共有メモリ部210(ローカルバッファ)上の格納先の「先頭アドレス」、「転送長」、「インクリメント・アドレス」および「繰り返し回数」の項目が含まれる。 例えば、図2(e)のローカルバッファについて以下のようになる。
・先頭アドレス :入力領域の先頭アドレス
・転送長 :32Byte×1回
・インクリメントアドレス :32Byteのワード数
・繰り返し回数 :バンド領域の高さ=Bdh_in回
ローカルバッファは、図2(e)のように入力画像データを格納する領域である入力領域2340と、後述する出力画像データを格納する領域である出力領域2360とで構成される。
DMAC194は入力画像データを受け取りながら、上記のローカルバッファ上のDMA情報に従い、受け取ったデータを共有メモリ部220に転送して、ローカルバッファ上の入力領域2340に格納する。
例えば、ローカルバッファがSRAMで構成される場合、SRAMの1ワードあたりのビット長が256ビット(32Byte)長であれば、「転送長」は32Byteとなり、「インクリメントアドレス」は1ワードとなる。そして、入力領域234で記憶するべきワード数はバンド領域の高さに相当し、「繰り返し回数」はBdh_in回となる。
また、例えば、1ワードあたりのビット長が64ビット(8Byte)長であれば、32Byte長のデータを受けるのに4ワード必要となる。したがって、この場合、「転送長」は8Byte×4回となり、「インクリメント・アドレス」は4ワードとなる。そして、入力領域2340で記憶するべきワード数は、バンド領域の高さ(DMA転送の繰り返し回数)Bdh_in×4回となる。つまり、入力領域2340の容量は、1回のDMA転送の単位である小領域(処理単位)の入力画像データが格納できる容量である。これらのDMA情報をローカルバルバッファへのDMA情報(第2のDMA情報)と呼称する。
なお、DMAC194は、DMA転送や1つの小領域や1つのバンド領域などの入力画像データの転送が完了すると、読み込み(LOAD)ポート251を介して画像入出力部の読み込み(LOAD)部に完了を通知する。
その後、画像入出力部の送信(SEND)部は、ローカルバッファ上の格納先の「先頭アドレス」、「転送長」、「インクリメント・アドレス」および「繰り返し回数」をもとに送信(SEND)ポート253を介して、小領域の入力画像データを読み出す。そして、送信(SEND)部は、1画素ずつ入力画素値155を順次生成して、画像処理実行部240へ入力する。
なお、画像入力部と画像出力部とは非同期で動作しても良く、例えば入力画像データにおける小領域(1)281と小領域(2)の一部を用いて、出力画像データの小領域(1)291が生成され、出力されても良い。
画像処理実行部240は、入力された1つ以上の画素からなる画素領域に画像処理を施す。具体的な画像処理としては例えば、複数の画素からなる画素領域に対して、所定の重み係数を乗算し、それらの値を全て加算することにより、1つの出力画素を得る。そして、画素領域をバンド領域の高さ方向にスライドさせながらこのような処理を進め、高さ方向に1列分の画素値を出力すると、次の列の画素を出力するための処理を実行する。処理後の画素値は1画素ずつ、画像入出力部230の画像出力部へ出力される。
画像出力部の受信(RECV)部では、処理後の出力画素値156から出力画像データを生成する。受信(RECV)部は、ローカルバッファ上の格納先の「先頭アドレス」、「転送長」、「インクリメント・アドレス」および「繰り返し回数」をもとに受信(RECV)ポート254を介して、一時的に小領域の出力画像データをローカルバッファに格納する。このとき、「先頭アドレス」は図2(e)の出力領域の先頭アドレスとなる。
ここで、生成済みの出力画像データのデータ構造は図4Aに示す点順次形式のままであるが、出力画像データ290ではその形式が変わっていてもよい。そのときは、ローカルバッファ上の格納先の「転送長」、「インクリメント・アドレス」を変えればよい。画像処理実行部240では、入力画素領域のサイズと出力画素領域のサイズが異なる様々な画像処理が実行されるため、入力画像データ280と出力画像データ290の画素数は異なる。したがって、出力画像データ290の出力バンド領域の高さおよび幅は入力画像データ210とは異なり、高さBdh_out、幅8×Nとなる。 このように、入力画像データ280と出力画像データ290では、バンド領域の高さが異なるため、処理単位である小領域の容量が異なる。さらにバンド領域の幅も異なるため、小領域の数もM個からN個に変化する。
このように、入力画像データ280と出力画像データ290とでは、バンド領域の高さおよび小領域の個数が異なるものの、データ構造は同一である。それ故、ローカルバッファ2320の出力領域2360の容量は、入力領域2340の容量と同様の考え方で設定できる。例えば、ローカルバッファの1ワードあたりのビット長が256ビット(32Byte)長であれば、出力領域2360で記憶すべきワード数は、出力バンドの高さと同じBdh_outワードであり、「繰り返し回数」もBdh_out回となる。また、ローカルバッファの1ワードあたりのビット長が64ビット(8Byte)長であれば、出力領域2360で記憶すべきワード数は、先の出力バンドの高さであるBdh_outを4倍したワード数となり、「繰り返し回数」もBdh_out×4回となる。
画像出力部は、例えば、Bdh_out個の画素が4列分入力され、小領域(1)291の出力画像データがローカルバッファ2320の出力領域2360に揃った時点で、画像処理実行部240からの出力画素値156の受け取りを停止する。
そして、画像出力部は、書き出し(STORE)ポート252を介して、共通DMAC部210のDMAC196を起動して前述のDMA情報を指示する。DMAC196は、DMA情報をもとに出力領域2360の出力画像データを共有メモリ部220のローカルバッファから順次読み出す。 そしてDMAC196は、DMA情報に従って、処理後の画像データをRAM106へ書き出す。同様の動作を小領域(2)から小領域(N)まで順次実行し、出力バンド領域の出力画像データをすべてRAM106へ書き戻す。
●ダブルバッファ動作
本実施形態におけるローカルバッファ2320を、2バンク構成の記憶手段に拡張することができる。例えば図2(e)に示すように、ローカルバッファを、記憶領域Aと記憶領域Bからなる2バンク構成とする。このような2バンク構成にすることにより、ローカルバッファは小領域(処理単位)を同時に2つまで格納できる。そして動作状況に応じて、記憶領域を入れ替える(バンクチェンジ)。この記憶領域の入れ替えは、ローカルバッファへのDMA情報の先頭アドレスをバンクチェンジの際に変更することで容易に実現できる。
上述したように、ローカルバッファが1バンク構成であれば、入力画像データの読み込み(LOAD)動作と、入力画像データから画素値を生成する送信(SEND)動作とを時分割で行っていた。また、出力画素値から出力画像データを生成する受信(RECV)動作と、出力画像データの書き出し(STORE)動作とを時分割で行っていた。本変形例ではローカルバッファを2バンク構成とすることで、入力画像データから画素値を生成する間にも、次の小領域(処理単位)の入力画像データを受け取れる。また、出力画素値から出力画像データを生成する間にも、生成済みの出力画像データを出力できる。したがって、DMAC194と送信部の処理を並列化でき、またDMAC196と受信部の処理を並列化できる。つまり、「読み込み(LOAD)動作」と「送信(SEND)動作」とを同時動作させ、「書き出し(STORE)動作」と「受信(RECV)動作」とを同時動作させることが可能となる。このようにローカルバッファを複数バンクにすることで処理を高速化できる。
●ローカルバッファの割り当て
本実施形態の画像処理部には、複数のデータ処理部(1)241〜(Z)243を備える一方、画像処理のデータ転送部は複数のデータ処理部(1)241〜(Z)243から共有されている。そのため、複数のデータ処理部(1)241〜(Z)243に対する共有メモリ部(ローカルバッファ)220の割り当てを、画像処理の動作モードにより、適宜、変更することにより、バッファの利用効率を向上できる。
図5を用いて利用のし方を説明する。 例えば、3基のデータ処理部が動作する画像処理の動作モードのとき、[case1]のように、データ処理部(1)、(2)、(3)に対応する 入力バッファ(1)、(2)、(3)と出力バッファ(1)、(2)、(3)をローカルバッファに割り当てる。CPU102によりデータ処理部(1)、(2)、(3)を各々起動することにより、データ処理部(1)、(2)、(3)が各々で前述の「画像データの入出力」動作を行い、画像処理実行部(1)、(2)、(3)が画像処理を実行する。
次に、例えば、1基のデータ処理部が動作する画像処理の動作モードのとき、[case2]のように、データ処理部(1)に対応する 入力バッファ(1)と出力バッファ(1)のみをローカルバッファに割り当てる。この用途では、2基のデータ処理部を動作させることはないため、[case2]では入力バッファ(1)と出力バッファ(1)を広く割り当てることができる。 前述の通り、ローカルバッファには、小領域の単位で画像データを一時記憶するため、「繰り返し回数」である バンド領域の高さ(Bdh_inと、Bdh_out)を[case1]より[case2]の方が大きく設定することができる。 そして、一度にDMA転送する画像データ量を大きくすることができるので、「読み込み(LOAD)動作」と「書き出し(STORE)動作」を効率化できる。 このような切り替えは、前述のグローバルバッファへのDMA情報とローカルバッファへのDMA情報を変更するだけで、容易に切り替えることができる。
また[case1]と[case2]では、前述のダブルバッファ動作で記憶領域Aと記憶領域Bをローカルバッファに割り当てる。そして、「読み込み(LOAD)動作」と「送信(SEND)動作」を同時動作させ、「書き出し(STORE)動作」と「受信(RECV)動作」を同時動作させ、処理を高速化できる。
このとき[case2]は、[case1]よりローカルバッファに割り当てる画像データ量が大きいため、「送信(SEND)動作」と「受信(RECV)動作」で処理する画素数が多い。 そのため画像処理実行部(1)241が、ローカルバッファに一時記憶された小領域の画素数を画像処理する時間は、[case1]より[case2]の方が長い。 一般にシステムバス(内部バス、共有バス)190とRAM106は多くの機能部品と共有されるため、RAM106へのDMA転送は競合する。そのためRAM106へのDMA転送の応答時間は変動する。 仮に[case1]と[case2]でDMACに同じメモリ帯域が割り当てられているなら、バッファに多くの画素数を貯蓄できる[case2]の方が、[case1]より画像処理に要する時間が長い。そして画像処理に要する時間が長い[case2]ではDMA転送の応答時間が一時的に長くなったとしても、画像処理の性能の低下として影響が出にくい。そのため[case1]より[case2]の方が、転送に起因する画像処理の速度変動を吸収しやすいと言える。そのため、ローカルバッファに割り当てる画像データ量を大きくしただけ[case2]の方が[case1]より、画像処理を安定動作させやすい。
また動作モードにより、7基の画像処理のデータ処理部(1)〜(7)を起動する場合、図5の[case3]のようにローカルバッファに入力バッファと出力バッファを割り当てればよい。この一例では、ダブルバッファ動作を利用せずに、シングルバッファ動作を利用し、1基のデータ処理部が必要とする入力バッファと出力バッファの容量を抑える。そして一度に多くのデータ処理部を起動することで、画像処理の実行を並列化できる。
●本実施形態の効果と着眼点
以上のように本実施形態の手法では、画像処理のデータ処理部から、データ転送部を共有することにより、種々の動作モードに応じて、データ転送部のハードウェア資源を有効活用できる。例えば、複数のデータ処理部からDMACを時分割多重で共有することにより、装置全体を、より小さな回路規模で実現することができる。また特に、種々の動作モードに応じて図5のように複数のデータ処理部に対してローカルバッファを最適に割り当てし、画像データ領域を再配置できる。また処理の要求速度に応じてシングルバッファ動作やダブルバッファ動作を選択できる。また画像処理のバンド高さを増減したりできる。その結果、ローカルバッファの使用する容量と処理の要求速度とのトレードオフを選択できる。
複数のデータ処理部から読み書する画像データは、基本的にはDRAM等の外部メモリデバイスで構成されたRAM106(グローバルバッファ)に格納されている。 そのため、複数のデータ処理部からの画像データのアクセスは、メモリコントローラ(不図示)を介して実行される。 つまり、結局のところ複数のデータ処理部からの画像データのアクセスが同時に要求されたとしても、一旦メモリコントローラにより調停されて、RAM106(グローバルバッファ)に対して時分割多重で実行されることになる。その結果、複数のデータ処理部から要求された複数の画像データの読み書きの要求は、装置全体(システム)的にはシーケンシャル(順次)動作で実行されていることになる。そのため複数のデータ処理部から共通DMAC部を共有しても多くの場合、問題にならない。
以上の説明では、RAM106等のメモリについて言及しているが、ハードディスク、フラッシュメモリ、フラッシュROM、エンベデットDRAM (DRAM混載のマルチチップ上のDRAM)等の外部記憶装置上のグローバルバッファについても同様の着眼点でよい。
一方、複数のデータ処理部は、一時停止することなく常に動作して各々の画像処理を並列処理して高速に動作する必要がある。これらを実現するため共有メモリ部(ローカルバッファ)は、複数のSRAM等のメモリにより構成されており、1サイクルで同時に複数の画像データを読み書きすることができる。そのため、複数のデータ処理部は、共有メモリ部(ローカルバッファ)から、分散並列的に画像データを読み書きすることで高速に動作できるのである。
本実施形態の手法では、複数のデータ処理部からの画像データの読み込み(LOAD)要求と書き出し(STORE)要求は、共通DMAC部を介して時分割多重でシーケンシャル(順次)動作させる。 また、複数のデータ処理部からの画像データの送信(SEND)動作と受信(RECV)動作は共有メモリ部(ローカルバッファ)に対して分散並列的に動作させる。これらの構成により画像処理(データ処理)の処理性能を落とすことなく、共有DMAC部や共有メモリ部(ローカルバッファ)は共有により回路規模を削減することができるのである。
そして、それらの制御はグローバルバッファとローカルバッファへのDMA情報の値を変更するだけで容易に実現できるのである。
[第2実施形態]
●画像処理実行部の並列動作
前述までの説明では、複数のデータ処理部(画像処理実行部)の各々は、異なる画像データを入出力(読み書き)して、各々異なる画像処理を実行していた。つまり、複数のデータ処理部(画像処理実行部)により、複数種類の画像処理を同時に実行していた。本実施形態では、複数のデータ処理部(画像処理実行部)を使い、1つの画像データに対して1種類の画像処理を並列動作で高速に実行する例を説明する。
そのため、以下の説明では、複数の画像処理実行部の並列動作(並列機能)について説明する。前述の実施形態に対し、図6に示すように、画像処理のシーケンス制御部(LOAD/STOREシーケンサとSEND/RECVシーケンサ)を、画像処理のデータ転送部とデータ処理部の間に介在する構成とする。
本第2の実施形態は、前述の小領域(図2の参照符号281, 280, 289, 291, 290, 299)を処理単位として画像処理実行部の動作を分散並列化することにより、画像処理の速度を高速化する。そのため、画像処理実行部(1)〜(Z)には、予め同様の画像処理設定がなされており、入力される画素値が同一の値であれば、同一の画素値を出力する動作を行うものとする。
以下、図7Aに示す、記載の並列動作させるためのシーケンスの一例を用いて詳細説明する。 まずCPU102は、挿入した画像処理のシーケンス制御部610に対して並列動作させるための設定を行う(S701)。次にCPU102は画像処理入出力部(1)から(Z)を起動する(S702、S703、S704)。画像処理入出力部(1)から(Z)は起動されると画像処理を開始して、前述の説明のように各々が読み込み(LOAD)を行う(S730、S740、S750)。シーケンス制御部610はこれらの読み込み(LOAD)を受け取ると、並列動作させるための設定に従い、画像処理のデータ転送部に読み込み(LOAD)を読み込み(LOAD)ポートを介して伝達する(S720)。このとき、並列動作では、同一の画像データを複数のデータ処理部で実行するため、シーケンス制御部610は、複数のデータ処理部から受け取った複数の読み込み(LOAD)のうち1つをデータ転送部に伝達して残りは破棄する。 前述の説明の通りデータ転送部は、伝達されたグローバルバッファへのDMA情報をもとに必要な画像データ(小領域)を読み込み(S710)、ローカルバッファに一時記憶する。シーケンス制御部610は、データ転送部からの読み込み(LOAD)応答を受けて、複数のデータ処理部に読み込み(LOAD)応答を返す(S721)。 このときシーケンス制御部610は1つの読み込み(LOAD)応答をもとに複数のデータ処理部に各々、応答を返す。画像入出力部(1)から(Z)は、これらの読み込み(LOAD)応答を受けて(S731、S741、S751)、画像入出力部(1)から(Z)の各々は、画像入出力部の転送(SEND)部と受信(RECV)部を起動する。 そして、これまで説明した一連の画像処理の動作を開始する。つまり、画像入出力部(1)から(Z)の転送(SEND)部は、共有メモリ部に対して送信(SEND)要求(画像データのリード要求)を行う(S732、S742、S752)。 そして、各々の転送(SEND)部は、共有メモリ部から所望の画像データを読み出して画素値を生成してコマンド化し、画像処理実行部に送信する(S733、S743、S753)。また複数の画像入出力部の受信(RECV)部は、複数の画像処理実行部の各々から処理後の画素値を受け取り、出力画像データを生成する。そして、受信(RECV)部は、共有メモリ部に対し受信(RECV)要求(画像データのライト要求)を行う (S734、S744、S754)。受信(RECV)部の各々は、書き込み動作が完了して共有メモリ部からライト応答を受け取ると、一連のデータ処理の実行が完了する。
本第2の実施形態では、1種類の画像処理を並列動作するのであるが、複数の画像入出力部(1)から(Z)は共有メモリ部のローカルバッファから、互いに異なる画像データを読み書きして、画像処理を分散並列処理する必要がある。そのため、複数のデータ処理部(1)から(Z)の各々が用いるローカルバッファへのDMA情報は、グローバルバッファへのDMA情報と異なり、設定を予め変更しておく。複数のデータ処理部がZ基であった場合、具体的には、画像入出力部(1)に対しては、以下の通りである。
・先頭アドレス :入力領域の先頭アドレス
・転送長 :32Byte×1回
・インクリメントアドレス :32Byteのワード数×Z
・繰り返し回数 :バンド領域の高さ(=Bdh_in回)をZで割った数
従って、#i番目の画像入出力部(#i)に対しては、以下の通りとなる。
・先頭アドレス :入力領域の先頭アドレス+(32Byteのワード数)×(#i-1)
・転送長 :32Byte×1回
・インクリメントアドレス :32Byteのワード数×Z
・繰り返し回数 :バンド領域の高さ(=Bdh_in回)をZで割った数
このように複数のデータ処理部(1)から(Z)のローカルバッファへのDMA情報の画像データ上の指し位置を変更することにより、本実施形態の並列動作を容易に実現することができる。
そして小領域の画像データのうち、データ処理部(1)から(Z)の各々が担当する画素に対してデータ処理が完了すると、画像入出力部(1)から(Z)の各々は、各々の書き出し(STORE)部を起動する。そして、各々の書き出し(STORE)部は従来通りに画像データの書き出し(STORE)要求をデータ転送部に要求する(S736、S746、S756)。
シーケンス制御部610はこれらの書き出し(STORE)要求を受け取ると、並列動作させるための設定に従い、画像処理のデータ転送部に書き出し(STORE)を書き出し(STORE)ポートを介して伝達する(S722)。このとき、並列動作では、同一の画像データを複数のデータ処理部で実行する動作であるため、シーケンス制御部610は、複数のデータ処理部から受け取った複数の書き出し(STORE)要求のうち1つをデータ転送部に伝達して残りは破棄する。前述の説明の通りデータ転送部は、伝達されたグローバルバッファへのDMA情報をもとにローカルバッファから必要な画像データ(小領域)をRAM106に書き出す(S719)。
なお、書き出し(STORE)要求のときにローカルバッファから必要な画像データ(小領域)を読み出す際に使用するローカルバッファへのDMA情報は、先ほど並列動作の際に用いたDMA情報を合算した値となるため注意が必要である。例えば、以下のように小領域の画像データをすべて転送する必要がある。
・先頭アドレス :出力領域の先頭アドレス
・転送長 :32Byte×1回
・インクリメントアドレス :32Byteのワード数
・繰り返し回数 :バンド領域の高さ=Bdh_out回
そして、シーケンス制御部610は、データ転送部からの書き出し(STORE)応答を受けて、複数のデータ処理部に書き出し(STORE)応答を返す(S723)。 このときシーケンス制御部610は1つの書き出し(STORE)応答をもとに複数のデータ処理部に各々、応答を返す。画像入出力部(1)から(Z)はこれらの書き出し(STORE)応答を受けて(S737、S747、S757)、画像入出力部(1)から(Z)の各々は、画像処理を完了する(S705、S706、S707)。
なお、以上のシーケンスで説明した画像処理の開始と完了の間で、小領域の処理を必要な回数だけ繰り返せば、1バンドの画像処理を実現できる。また以上の説明では、画像処理を並列動作する際に、複数の画像入出力部(1)から(Z)で使用するローカルバッファへのDMA情報を各々で変更することにより並列動作に対応した。 しかしながら、この方法は一例であり、例えば、複数の画像入出力部(1)から(Z)のすべてが、書き出し(STORE)要求の際に使用したローカルバッファへのDMA情報を用いるものとする。 そして、図6のシーケンス制御部のSEND/RECVシーケンサ614により、#i番目の画像入出力部(#i)からの送信(SEND)要求と受信(RECV)要求に対してローカルバッファへの指し先を自動で変換してもよい。
●本第2実施形態の効果
以上のように本実施形態の手法では、画像処理のシーケンス制御部をデータ転送部とデータ処理部の間に挿入することにより、複数の画像処理入出力部の制御は大きく変更することなく、複数の画像処理実行部を並列動作(並列機能)できた。それにより、複数のデータ処理部(画像処理実行部)を使い、1つの画像データに対して1種類の画像処理を並列動作で高速に実行することができる。
[第3実施形態]
●画像処理実行部の直列動作
前述の複数の画像処理実行部の並列動作(並列機能)の説明に続き、本実施形態では複数の画像処理実行部の直列動作(直結機能)について説明する。 本実施形態では、複数のデータ処理部(画像処理実行部)において異なる画像処理を行い、それらを1つの画像データに対して順番に処理することにより、高機能な画像処理を実行することを目的としている。
第2実施形態と同様に、図6記載の画像処理のシーケンス制御部(LOAD/STOREシーケンサとSEND/RECVシーケンサ)を、画像処理のデータ転送部とデータ処理部の間に介在する構成とする。
また本3実施形態でも、前述の第2実施形態と同様に小領域(同上)を処理単位として画像処理実行部の動作をシーケンシャル(順次)動作させることにより、画像処理を高機能化することを目的とする。このようなシーケンシャル(順次)動作を本発明では直列動作(直列機能)と呼称する。そのため、画像処理実行部(1)〜(Z)には、予め異なる画像処理設定がなされており、基本的に入力される画素値が同一の値である場合、異なる画素値を出力する動作と言える。
以下、直列動作させるためのシーケンスの一例を図7Bに示し、以下同図に従い詳細説明する。なお前述の並列動作させるためのシーケンスと同様の動作については、ここでは説明を割愛する。
まずCPU102は、挿入した画像処理のシーケンス制御部610に対して直列させるための設定を行う(S701)。画像処理入出力部(1)から(Z)は起動されると画像処理を開始して、各々が読み込み(LOAD)を行う(S760、S770、S780)。シーケンス制御部610はこれらの読み込み(LOAD)を受け取ると、直列動作させるための設定に従い、画像処理のデータ転送部に読み込み(LOAD)を読み込み(LOAD)ポートを介して伝達する(S724)。このとき直列動作では、まずデータ処理部(1)が入力する画像データをデータ処理部(1)で実行する動作であるため、シーケンス制御部610は、画像処理入出力部(1)から受け取った読み込み(LOAD)要求をデータ転送部に伝達して残りは待機させる。そしてデータ転送部は、伝達されたグローバルバッファへのDMA情報をもとに必要な画像データ(小領域)を読み込み(S710)、ローカルバッファに一時記憶する。シーケンス制御部610は、データ転送部からの読み込み(LOAD)応答を受けて、画像処理入出力部(1)に読み込み(LOAD)応答を返す(S725)。このときシーケンス制御部610は残りのデータ処理部には読み込み(LOAD)応答を返さない。画像入出力部(1)は読み込み(LOAD)応答を受けて(S761)、画像入出力部(1)は、画像入出力部(1)の転送(SEND)部と受信(RECV)部を起動する。そして、これまで説明した一連の画像処理の動作を開始する。つまり、画像入出力部(1)の転送(SEND)部は、共有メモリ部に対して送信(SEND)要求(画像データのリード要求)を行う(S762)。そして、転送(SEND)部は、共有メモリ部から所望の画像データを読み出して画素値を生成してコマンド化し、画像処理実行部に送信する(S763)。また画像入出力部(1)の受信(RECV)部は、画像処理実行部(1)から処理後の画素値を受け取り、出力画像データを生成する。そして、受信(RECV)部は、共有メモリ部に対し受信(RECV)要求(画像データのライト要求)を行う(S764)。そして受信(RECV)部は、書き込み動作が完了して共有メモリ部からライト応答を受け取ると、データ処理部(1)の実行が完了する(S765)。その後、画像入出力部(1)は書き出し(STORE)部を起動する。そして、書き出し(STORE)部は従来通りに画像データの書き出し(STORE)要求をデータ転送部に要求する(S766)。
シーケンス制御部610は、画像入出力部(1)からの書き出し(STORE)要求を受け取ると、直列動作させるための設定に従い、画像処理のデータ転送部に書き出し(STORE)要求を伝達しない。そしてシーケンス制御部610は、画像入出力部(2)の読み込み(LOAD)部に読み込み(LOAD)応答を返す(S726)。その結果、画像入出力部(2)は読み込み(LOAD)応答を受けて(S771)、画像入出力部(2)は、画像入出力部(2)の転送(SEND)部と受信(RECV)部を起動する。そして、画像入出力部(2)は一連の画像処理を実行する(S772、 S715、S773、S774、S716、S775)。
そして、画像入出力部(2)は書き出し(STORE)部を起動し、書き出し(STORE)部は従来通りに画像データの書き出し(STORE)要求をデータ転送部に要求する(S776)。
シーケンス制御部610は、画像入出力部(2)からの書き出し(STORE)要求を受け取ると、直列動作させるための設定に従い、画像処理のデータ転送部に書き出し(STORE)要求を伝達しない。そしてシーケンス制御部610は、後段の画像入出力部(#i)の読み込み(LOAD)部に読み込み(LOAD)応答を返す(S727)。
以降では画像入出力部(Z)によるデータ処理の実行まで同様の処理を繰り返す(S781、S782、S717、S783、S784、S718、S785)。そして、画像入出力部(Z)は書き出し(STORE)部を起動し、書き出し(STORE)部は従来通りに画像データの書き出し(STORE)要求をデータ転送部に要求する(S786)。
シーケンス制御部610は、最後のデータ処理の実行まで直列動作できたため、書き出し(STORE)要求を書き出し(STORE)ポートを介して伝達する(S728)。 従来通りの方法でデータ転送部は、伝達されたグローバルバッファへのDMA情報をもとにローカルバッファから必要な画像データ(小領域)をRAM106に書き出す(S719)。そして、シーケンス制御部610は、データ転送部からの書き出し(STORE)応答を受けて、複数のデータ処理部に書き出し(STORE)応答を返す(S729)。 このときシーケンス制御部610は1つの書き出し(STORE)応答をもとに複数のデータ処理部に各々、応答を返す。画像入出力部(1)から(Z)はこれらの書き出し(STORE)応答を受けて(S767、S777、S787)、画像入出力部(1)から(Z)の各々は、画像処理を完了する(S705、S706、S707)。
以上の説明の動作を行うことで、画像データの小領域ごとにデータ処理部(1)から(Z)までをシーケンシャル(順番)に処理することにより画像処理を直列的に実行することが可能となる。
●本第3実施形態の効果
以上のように本第3実施形態の手法では、画像処理のシーケンス制御部をデータ転送部とデータ処理部の間に挿入することにより、複数の画像処理入出力部の制御は大きく変更することなく、複数の画像処理実行部を直列動作(直列機能)できた。それにより、1つの画像データに対して、複数のデータ処理部(画像処理実行部)を用いて異なる画像処理を順番に施すことにより、高機能な画像処理を実行することができた。
[第4実施形態]
●中断停止動作
これまで複数の装置や回路に対して画像処理のデータ転送部を共有化して、データ転送に利用するハードウェアリソースの共有による回路規模の削減を実現した。特にローカルバッファを共有できたことにより、多岐にわたる製品動作に対して最適にバッファ容量を活用し、また多様なローカルバッファの利用方法への対応を実現した。
しかしながら、複数の装置や回路が常に一体動作するわけではなく、個別の画像処理を実行しているときに、例えばユーザが一部の装置と回路のみの停止を指示した場合、一部の装置と回路のみを停止させつつ、残りの装置と回路は動作させ続ける必要がある。このとき、複数の装置と回路でデータ転送部(ローカルバッファ含む)を共有するため、動作させ続ける装置と回路の実行を妨げることなく、一部の装置と回路だけを停止させて初期化(リセット)できなければならない。
本実施形態では、上記のような課題に対して図8を用いて動作を説明する。以下の説明では、例えば、画像入出力部(1)231と画像処理実行部(1)241を中断停止させることを、一例として説明するが、画像処理のデータ処理部の何れか、もしくはすべてを同様に中断停止できる。
CPU102は、まず中断停止させたい画像入出力部(1)に対して、レジスタI/Fを介して中断を指示する(S801)。 指示のし方としては、画像入出力部(1)内部の中断レジスタ(不図示)の値を“0”から“1”に書き換える(S802)。その後、CPU102は、画像入出力部(1)から中断停止が完了したことを意味する中断割り込み(不図示)がアサートされる(S804のYES)まで待機する(S803)。
一方、画像入出力部(1)は、中断レジスタの値が”1”に書き変わって中断停止指示を受け付けるまで、初期化(S805)、画像処理(S806)、正常終了(S807)の通常動作として繰り返している。
中断停止指示は、基本的に初期化(S805)、画像処理(S806)、正常終了(S807)の何れの状態でも、受け付けることができる。初期化(S805)や正常終了(S807)の前後では、画像処理のDMA転送は実行されていないため、後述の中断工程はすぐに完了して中断割り込みをアサートできる。また画像処理の送信動作、受信動作もないため後述の遮断工程はすぐに完了し、CPUからすぐに初期化(リセット)することができる。
そのため、図8のフローチャートでは、中断停止の主要な動作を説明するために画像処理(S806)の途中で中断停止指示を受け付ける例で説明する。 画像処理(S806)の中で定期的に中断レジスタの値が“1”にアサートされたかどうかを確認する(S808)。 中断レジスタの値が“0”のままで“1”にアサートされていないとき(S808のNO)、画像処理(S806)に戻り、画像処理を継続する。 中断レジスタの値が “1”にアサートされたとき(S808のYES)、画像処理入出力部(1)は、中断停止処理を開始する(S809)。
まず、画像処理入出力部(1)は、既に発行済みのDMA要求についてはDMA応答を待つが、新たなDMA転送の要求は行わない(S809)。この状態を中断状態と呼称する。前述までの説明の通り、画像処理入出力部は読み込み(LOAD)ポート、もしくは書き出し(STORE)ポートを介してDMA転送を要求すると、DMA転送の実行は、共有DMAC部が実行する。そのため、画像処理入出力部(1)は既に発行済みのDMA要求については共有DMAC部からDMA応答を待つだけでよい(S810)。読み込み(LOAD)ポート、もしくは書き出し(STORE)ポートを介して、発行済みのDMA要求に対するすべての応答を受け取っていなければ(S810のNO)、中断状態を維持して待機する。発行済みのDMA要求に対するすべての応答を受け取ったら(S810のYES)、中断状態を維持したまま、画像処理入出力部(1)からCPUへ中断割り込みをアサートする(S811)。
画像処理入出力部(1)は、発行済みのDMA要求に対するすべての応答を受け取るまでの間、画素値の送信(SEND)部、受信(RECV)部、画像処理実行部(1)の動作は通常動作のままでよい。発行済みのDMA要求に対するすべての応答を受け取ったら、RAM106やシステムバス(内部バス、共有バス)190への要求と応答はすべて完了していることとなる。この状態では、本実施形態の画像処理入出力部(1)の中断停止動作により、上位システムに影響を与えることはない。上記のように上位システムに影響を与えることはない状態に移行するまでの動作を中断動作(中断工程)と呼称する。
画像処理入出力部(1)は、CPUへ中断割り込みをアサートする(S811)と、遮断動作(遮断工程)に移行する。遮断動作(遮断工程)では、画像処理入出力部(1)は、CPUよるリセット(初期化)を待つ。画像処理のデータ転送部は動作中の他の画像入出力部(2)〜(Z)と画像処理実行部(2)〜(Z)と共有されており、画像処理のデータ転送部はリセット(初期化)することはできない。まず画像処理のデータ転送部のうち共有DMAC部は、前述の通り、画像処理入出力部(1)に対応した動作は既に完了しているので、特に問題を生じない。
一方、画像処理のデータ転送部のうち共有メモリ部は、送信(SEND)ポート、受信(RECV)ポートを介してローカルバッファ上に一時記憶された画像データを画像処理入出力部(1)〜(Z)により読み書きされている。画像処理入出力部(1)は、画像処理入出力部(2)〜(Z)の送信(SEND)と受信(RECV)を妨げないように、画像処理入出力部(1)の送信(SEND)と受信(RECV)を停止する必要がある。画像処理入出力部(1)は、遮断動作(遮断工程)において共有メモリ部に新たな送信(SEND)要求と受信(RECV)要求を発行しない。そして共有メモリ部に既に発行済みの送信(SEND)要求と受信(RECV)要求に対する応答を必ず受け取り、画像処理入出力部(1)の内部で破棄する。このとき共有メモリ部に画像処理入出力部(1)の発行済みの送信(SEND)要求と受信(RECV)要求が残存すると、動作中の画像処理入出力部(2)〜(Z)の送信(SEND)と受信(RECV)の妨げになる。そのため、画像処理入出力部(1)は発行済みの送信(SEND)要求と受信(RECV)要求に対する応答をすべて受け取って破棄しなければならない。例えば、送信(SEND)ポートや受信(RECV)ポートが2線(有効信号と停止信号)式ハンドシェークI/Fで通信接続されていると仮定する。そのとき、画像処理入出力部(1)から送信(SEND)ポートへの要求を停止するため、画像処理入出力部(1)は送信(SEND)ポートへの有効信号を常に無効化し、新たな要求を発行しない。また既に発行済みの要求に対して送信(SEND)ポートから入力される応答をすべて受け取るため、画像処理入出力部(1)は送信(SEND)ポートへの停止信号を常に有効にし、応答を受け取った上で破棄する。
受信(RECV)ポートについても同様の動作をする。つまり、画像処理実行部(1)からの画素値は必ず受け取った上で破棄し、画像処理実行部(1)から新たな受信(RECV)要求は発行せず、発行済みの受信(RECV)要求に対する応答は受け取った上で破棄する。このような遮断動作(遮断工程)を画像処理入出力部の入出力の無効化と呼称する。
画像処理入出力部(1)は、入出力の無効化により、共有メモリ部の内部パイプラインにおける画像処理入出力部(1)に関するコマンドはやがてなくなる。そして共有メモリ部の内部パイプラインには、画像処理入出力部(2)〜(Z)のみのコマンドが存在するだけとなる。
このように画像処理入出力部(1)は、接続関係にある、共有メモリ部と画像処理実行部(1)に対して入出力を無効化して遮断状態となっている。
特に共有メモリ部の内部パイプラインはSRAM等のメモリと調停回路で構成されているため、高々、数段から数十段のパイプライン回路である。そのため共有メモリ部は、数サイクルから数十サイクルの時間で、画像処理入出力部(1)に関するコマンドのみパイプラインから無くなる(パイプライン・クリア)。そのため、画像処理入出力部(2)〜(Z)の送信(SEND)と受信(RECV)を妨げることなく、画像処理入出力部(1)の送信(SEND)と受信(RECV)を停止できる。
なお、画像処理実行部(1)の内部パイプラインについても同様に、ある程度の時間が経過すれば、パイプラインから該当するコマンドを無くす(パイプライン・クリアする)ことは可能である。しかしながら、前述までの説明のように画像処理実行部は多数の画像処理回路で構成して実現されることもあるし、プロセッサで構成してソフトウェア処理で実現されることもある。そのため、画像処理実行部は、所定の時間でコマンドを無くせるか(パイプライン・クリアできるか)一概に規定できない。そのため、CPUは前記の中断割り込みのアサートを受け取ると(S804のYES)、画像処理実行部のリセットを行う(S820)。 CPUは割り込みを受け取り、割り込み要因が中断割り込みであると判別するのに数マイクロ秒から数ミリ秒かかる。そのため共有メモリ部の内部パイプラインのパイプライン・クリアには十分であるが、画像処理実行部の内部パイプラインのパイプライン・クリアは保証しにくい。 そこで最後にCPUは、画像処理実行部(1)をリセットする(S820)。画像入出力部(1)の読み込み(LOAD)部、書き出し(STORE)部、送信(SEND)部、受信(RECV)部は、各接続先に対する新規の要求を停止しているため、内部のカウンタなどが途中の状態で停止している。そのため、画像入出力部(1)をリセットして(S822)、画像入出力部(1)を初期化するのが確実な復帰方法である。画像入出力部(1)はリセットされると(S832のYES)、初期化される(S805)。
ただし、画像処理の処理内容に対して十分な時間の経過を待てば、やがて画像処理実行部の内部パイプラインから処理中のコマンドが無くせる(パイプライン・クリアできる)ことは言うまでもない。そして十分な時間の経過を待てば、画像処理実行部のリセット(S820)は必ずしも行う必要はなく、省略することも可能である。
また、CPUからリセットするのではなく、CPUからレジスタI/Fを介して画像入出力部の復帰指示レジスタ(不図示)の値を“0”から”1”に書き換えて、画像入出力部(1)に復帰を指示する。そして、画像入出力部(1)は、画像入出力部(1)内部のレジスタを初期状態に戻し、復帰しても差し支えない。
●本第4実施形態の効果
以上のように本実施形態の手法では、前述までの説明の通り、複数の装置や回路に対して画像処理の転送部(ローカルバッファ含む)を共有化してデータ転送で利用するハードウェアリソースの回路規模を削減できる。そしてそのような削減を行った上で、共有されたデータ転送部と所定の装置と回路はそのまま継続動作させ、一部の装置と回路だけを中断停止させて初期化(リセット)することができる。それにより、複数の装置や回路の各々に対して個別の画像処理を実行しているときに、例えばユーザが中断停止指示を出して一部の装置と回路のみを強制的に中断停止させ、残りの装置と回路は継続動作させることができる。
以上本発明に係る第1乃至第4の実施形態を説明した。上記の通り、実施形態によれは、実施形態で説明したデータ処理装置(図1Bのデータ転送部とデータ処理部で構成される装置)を搭載する情報処理装置の処理を高速化できる。そして多岐に渡る製品の動作モードに応じて、データ処理装置が有するローカルバッファの入出力に適切な記憶容量を割り当てることで、ローカルバッファの利用率を向上し、装置全体のバッファ容量を最適化できる。そして、動作中の装置と回路の実行を妨げることなく、一部の装置と回路のみを正常に停止可能な技術も適用できる。
<<その他の実施形態>>
(ブロック(タイル)処理による実施形態)
また、前述までの説明では、主にバンド処理について説明した。しかしながら、別の領域分割手法であるブロック(タイル)処理についても上述の画像処理方法を適用できる。ブロック(タイル)処理では、主走査方向と副走査方向に沿って画像データを2次元で領域分割する。例えば、前述までに説明した小領域(処理単位)が、この2次元で領域分割された画素領域と考えればよい。小領域(1)から小領域(M)まで順次読み出す手法はブロック(タイル)処理そのものである。そのため、本発明の手法をバンド処理からタイル処理に容易に拡張することができる。
(その他のDMA転送単位について)
また、上述の説明では、画像データの読み書きの単位を32Byteとして説明した。しかしながら、画像処理装置上でのRAM106の構成や、RAM106を実現する記憶装置(DRAM等)の種類、そして実行する画像処理の種類等により、画像データの読み書き単位は必ずしも32Byteでなくてもよい。読み書きの単位が変わったとしても、画像データを記憶する中間バッファに記憶される画素数が変わるだけで、画像処理装置と画像処理方法を適用することができる。
(その他の画像形式について)
先の実施形態では、点順次の画像形式について説明したが、仮に図4Bのような面順次の画像形式に対応する場合も、1回のLOAD要求やSTORE要求に対して、画像データのDMA転送の回数が変わるだけである。そして本発明の手法では、これらの変更に柔軟に対応できる。
また、画像データの32Byte単位のデータ構造を画像入力部と画像出力部で、別々の画像形式を組み合せてもよい。本発明の手法を用いれば、例えば画像入力部と画像出力部は、点順次形式(図4A)と面順次形式(図4B)から、所望の組合せにおいて動作できる。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み込んで実行する処理である。