実施形態における課題を更に詳細に述べる。
特に同時両面スキャンのような用途では、スキャナ・センサーの紙面に対する取り付け位置が、紙面の表と裏で異なり、画像処理の読み取り開始位置が表と裏で異なる。また紙面の表と裏で画像の読み取り範囲の指定が異なっても同じことが起きる。また紙面の表と裏で画像処理を施すときの画像形式(点順次形式、面順次形式、色数)が異なる場合には、当然ながら紙面の表と裏に対して、各々適切な設定値で画像処理を実行しなければならない。これらの目的に対して1つの画像処理装置で時分割多重した表と裏の画像処理を実現するには、表と裏の分割領域毎に画像処理を交互に切り替えることが必要になる。一方で、前述のように、任意変倍の画像データの転送に用いられるDMA機能の設定値が分割領域毎に変化してしまい、同じ設定値を使用し続けることができない。そのため、2つの課題を同時に解決することは、さらに難しいと言える。
また、画像処理部は、1つのバンド領域を画像処理するたびに外部装置(CPU、スキャナ装置、プリント装置など)と同期しながら、一連のバンド毎の画像処理を動作させる。
このとき画像処理部は、外部装置からの外部同期信号が入力されて、次のバンド領域に対する画像処理を開始するまで待機状態である。しかしながら、この待機状態のときも、画像処理実行部にはクロックが入力されており、画像処理実行部は無駄な電力を消費してしまう。そして外部装置が例えばスキャナ等のハードウェア・デバイスの場合、これらのバンド間の待機時間は、ファームウェアが介在できないほど短い。そのため、ファームウェアが介在してクロック停止した場合、制御オーバーヘッドが発生し、画像処理(全体)の処理時間は遅くなる。一方、A4サイズ1ページで412回のバンド領域を処理し、ADFスキャナ50ページを連続動作させた場合、20000回を超える待機状態が発生するため、このときの無駄な消費電力は総量では大きくなってしまう。
そして、画像処理のあるバンド領域と次のバンド領域のファームウェアが介在できないほどの短い待機状態のクロック制御については前述の先行技術では何ら開示していない。
上述したように、分割領域毎のDMA機能の設定値をファームウェアで算出する場合、分割領域毎にCPUの処理が必要となるため、画像処理部において複数の分割領域を連続して処理し続けることはできない。
また、ローカルバッファを介してグローバルバッファとのデータ転送を制御して複数ユニットの動作を制御する場合、解像度変換処理のように入/出力の画像の画素数が分割領域毎に変化すると、データ転送が一様に規定できない。従って、分割領域毎にファームウェアで例えば出力の画素数を求め、ファームウェアでバンド毎にDMACの設定を変更して、画像処理部を起動していた。さらに、1バンド分の画像処理が完了すると、画像処理部は割り込み等を用いてCPUに処理完了を通知して、CPUと同期する必要があった。CPUはこの割り込みを受信して割り込み要因を調べて次の動作に戻るために、例えば数msの時間を要する。その結果CPUは、画像処理部の制御と同期(待ち合わせ)のために、ある程度の処理負荷が常にかかっている状態となり、画像処理の間は解放されない。したがって、装置内の各ユニットの同時動作に遅延を要したり、ユニット間の連係動作が連続的に実行できなかったりするという問題があった。
そこで、画像処理のデータフローに合わせた制御点(同期点)でクロックを動的に制御して画像処理装置の消費電力を抑制することを目的とする実施形態についても説明する。
また、画像処理の前後で画素数が変動する場合でも、データ転送を効率化する画像処理装置を提供することを目的とする。また、画像処理方法を提供することを目的とする。例えば、同時両面スキャンのように、処理すべき分割領域の設定が裏と表で切り替わるような場合にもデータ転送を効率化する実施形態についても説明する。
以下、添付図面を参照して実施の形態を詳細に説明する。
<第1実施形態>
●装置構成
図1Aは、本実施形態に係る画像処理装置(コンピュータ)の全体構成例を示すブロック図である。同図に示すように本実施形態の画像処理装置は、CPU回路部100、画像読み取り部120、映像入力部130、画像処理部150、映像表示部160、画像印刷部170、等を備える。以下、これら構成による動作の概要について説明する。
画像読み取り部120は、レンズ124、CCDセンサ126、及びアナログ信号処理部127等を有する。すなわち、レンズ124を介してCCDセンサ126に原稿110の画像情報が結像され、CCDセンサ126によりその画像情報がR(Red)、G(Green)、B(Blue)のアナログ電気信号に変換される。アナログ電気信号に変換された画像情報は、アナログ信号処理部127に入力され、R、G、Bの色毎に補正等が行われた後にアナログ/デジタル変換(A/D変換)されることで、デジタル化されたフルカラーのデジタル画像信号(画素値)が生成される。生成されたデジタル画像信号は映像入力部130へ入力され、その後、DMAC(Direct Memory Access Controller)192へ入力される。
DMAC192は、CPU102によって予め動作が設定されており、入力されたデジタル画像信号を、共有バス190を介してCPU回路部100のRAM106や外部記憶装置108に記憶させる。なお、複数の画素についてのデジタル画像信号を1枚の画像を形成するように集合させたデータを、以下では画像データと呼ぶ。本実施形態では、デジタル画像信号は画像データの形式でRAM106等に記憶されるものとする。画像処理を行う場合、CPU102もしくは後述の画像入出力部152は、DMAC194を起動してRAM106等に記憶された画像データを読み出させ、処理の対象となる画素に対応するデジタル画像信号を画像処理部150に入力させる。
画像処理部150は例えば、入力されたデジタル画像信号に対して、スキャナなどのセンサ・デバイスの読み取り素子の個体差の補正や、入力ガンマ補正などの色補正等を行って画像データを作成する画像データ処理装置である。そしてDMAC196が、これらの画像処理が施された画像データをRAM106や外部記憶装置108に格納する。なお、DMAC196は以下のように制御される。例えばCPU102もしくは後述の画像入出力部152が予めDMAC196の動作を設定し、また、CPU102が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の画像入力部1521、画像出力部1523のそれぞれに含まれるように示している。
まずCPU102もしくは画像入力部1521がDMAC194を起動し、DMAC194はグローバルバッファから画像データを読み出す。この画像データの構造については後述する。読み出された画像データは、入力ポート151を介して、画像処理部150の画像入出力部152へ入力される。画像入出力部152において画像入力部1521は、入力された画像データを取得すると、中間バッファ制御部1522に含まれる一時記憶部(中間バッファ232)に、該取得した画像データを記憶させる。そして画像入力部1521は、中間バッファに一時的に記憶された画像データを読み出しながら画素値を生成し、入力画素値155として画像処理実行部153へ入力する。なお、中間バッファ制御部1522に含まれる一時記憶部(中間バッファ232)は、前述のグローバルバッファに対比してローカルバッファと総称してもよい。
画像処理実行部153は、入力画素値155に対して所定の画像処理を実行し、その結果として得られた出力画素値156を画像入出力部152へ出力する。なお、画像処理実行部153における処理の詳細については後述する。入力画素値155および出力画素値156は1つ以上の画素値であって、複数の画素値が入力画素値155として入力され、それに対して1つの画素値が出力画素値156として出力されてもよい。
画像入出力部152において画像出力部1523は、処理後の出力画素値156から出力画像データを生成して、中間バッファ制御部1522内の記憶部(中間バッファ232)に記憶する。画像出力部1523は、中間バッファ232に一時的に記憶された処理後の画像データを読み出し、出力画像データとして出力ポート154を介してDMAC196から送出する。DMAC196は上述したようにCPU102によって既に起動されており、受け取った出力画像データをRAM106へ書き込む。
このように画像処理部150は、画像入出力部152がDMAC194を介して画像データを取得し、画像処理実行部153で該画像データに対するデータ処理を実行する。そして、データ処理後の画像データを、画像入出力部152がDMAC196を介して出力する。すなわち画像処理部150は、画像処理装置内に含まれる画像データにデータ処理を施し、処理後の画像データを画像処理装置へ戻す役割を担う。また画像入出力部152は、データの入出力の調節を行うデータ入出力制御装置としての役割を有する。また、前述の中間バッファは、画像入力部1521と画像出力部1523から共通された記憶領域(ローカルバッファ)であり、共有メモリ(第1共有メモリ手段)で構成されている。
次に、画像処理部150の画像処理実行部153について、詳細に説明する。画像処理実行部153は、画像処理回路(1)1531〜画像処理回路(P)1537のP個の画像処理回路と、インターコネクト1530とで構成される。P個の画像処理回路とインターコネクト1530とは、入力ポート1532,1535,…,1538、および出力ポート1533,1536,…,1539等のポートを介して互いに接続される。各画像処理回路は、それぞれが1つの画像処理を行う。画像処理とは例えば、入力色補正処理、色空間変換、濃度補正処理、中間調処理、空間フィルタ処理、解像度変換、トリミング処理、端部拡張処理、IP変換、クロマ・アップサンプリング等のいずれかである。各画像処理回路は、パイプライン回路等のハードウェアで実現されてもよいし、プロセッサとプログラム(ソフトウェア)等で実現されてもよい。そして、対応する入力ポートから入力画素値155を受け取り、処理を施した後に、対応する出力ポートから処理後の出力画素値156を出力する。
インターコネクト1530は、クロスバーやリングバス等の接続手段で実現されており、入力ポートと出力ポートの接続先を任意に切り替えることができる。したがって、CPU102がこれらポートの接続先の指定を設定することで、インターコネクト1530は、例えばP個の画像処理回路の実行順序を変更し、または一部の処理をバイパスすることができる。このように画像処理実行部153は、アプリケーションに応じて、各種の処理を取捨選択して組み合せ、所望の画像処理を実現する。また、CPU102は、インターコネクト1530を介して、前述の中間バッファ(ローカルバッファ、第1の共有メモリ)のデータを複数の画像処理回路の何れかに入力したり、複数の画像処理回路の何れかの処理結果のデータを中間バッファに出力したりできる。そのため、中間バッファ(ローカルバッファ、第1共有メモリ手段)は、インターコネクト1530を介して、複数の画像処理回路から共有されていることを意味する。
●バンド処理
以下、本実施形態における画像データの領域分割手法として、画像データを1次元分割したバンド領域ごとに処理を行うバンド処理について説明する。
以下、本実施形態におけるバンド処理について、図3を用いて説明する。バンド処理では、図3(a)に示されるように、1枚の画像データ300を帯状のバンド領域301〜304に分割し、この領域毎に逐次、画像処理を行う。なおバンド領域は、画像データを主走査方向または副走査方向のいずれかに分割したものであるから、バンド領域と画像データとは、主走査方向または副走査方向のいずれかにおいて長さが一致する。図3(a)の例では、画像データは副走査方向に対して分割され、画像データとバンド領域とでは、主走査方向で同一の長さを有し、副走査方向では異なる長さを有する。以下、この分割された細長い領域をバンド領域と呼び、バンド領域が展開される記憶領域をバンドメモリ、画像データを分割する行為をバンド分割と呼ぶ。バンドメモリは、システム上の適切な記憶領域に確保されれば良いが、ここでは説明を簡潔にするために、バンドメモリをRAM106内の記憶領域(グローバルバッファ)として確保するとする。
また以下では、図3(b)に示すように、画像データの座標系(主走査方向−副走査方向)を、長さ方向と高さ方向という座標系(バンド領域座標系)によって定義し、バンド領域を長さ×高さで表現する。バンド領域の長さ、すなわちバンド領域の長さ方向の一辺の大きさは、画像データの主走査方向の長さ、または副走査方向の長さの何れかの値とする。また、バンド領域の高さ、すなわちバンド領域の高さ方向の一辺の大きさは任意の値となる。図3(a)の例では、長さ方向は主走査方向であり、高さ方向は副走査方向である。これに対し、図3(d)に示すように画像データを主走査方向において分割した場合、図3(e)に示すように、長さ方向が副走査方向となり、高さ方向が主走査方向となる。図3(d)のようなバンド分割は、例えば画像データの主走査方向の大きさが副走査方向の大きさより大きい場合に行うようにしてもよい。
図3(a)に示すバンド処理では、まず第1のバンド領域301を、RAM106上のバンドメモリに展開して画像処理を行う。次に第2のバンド領域302を、第1のバンド領域301が展開されたRAM106上のバンドメモリに上書き展開して、画像処理を行なう。さらにその後、第3のバンド領域303を、第2のバンド領域302が展開されたRAM106上のバンドメモリに上書き展開し、画像処理を行なう。そして最後に第4のバンド領域304を、第3のバンド領域303が展開されたRAM106上のバンドメモリに上書き展開して画像処理を行なう。図3(a)からも分かるように、バンド領域301〜304の長さは同じであるが、高さは同じでなくても良い。したがって、バンドメモリの高さは、高さ方向の一辺の大きさが最も大きいバンド領域(図3(a)ではバンド領域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画素を最小単位としても良い。
●コマンドリスト、コマンドのデータ構造
以下、図5Aと図5Bを用いて本実施形態におけるコマンドリスト、コマンドのデータ構造について詳細に説明する。本実施形態では上述したように、コマンドリスト(ディスプレイリスト)、コマンドはRAM106内の記憶領域(グローバルバッファ)に一時的に格納される。
図5AのDPL_AREA_STR_ADDRからDPL_AREA_END_ADDRまでが画像処理に必要な種々の描画コマンドを格納する領域である。図示の例では、この領域にDPL(1)からDPL(2)まで3種のコマンドリスト(ディスプレイリスト)が格納されている状態が示されている。DRAMの性能を落とさずにデータをアクセスできるように、各々格納されるデータの容量の最小単位は、406に示すように32bit×8wordの32Byteとなっている。当然ながら、DPL(1)からDPL(3)までのコマンドリスト(ディスプレイリスト)の格納容量は、32Byteの整数倍となる。CPU102は、選択されたアプリケーションやユーザ操作などによって使用するコマンドリスト(ディスプレイリスト)をDPL(1)からDPL(3)の中から選択して、異なる画像処理を実行する。
さらに図5Bを用いてメインメモリとしてのRAM106へ格納されているコマンドリスト(ディスプレイリスト)に含まれるコマンドのデータ構成例について詳しく説明する。本実施例では、コマンドリスト(ディスプレイリスト)を構成するコマンドは、64bit長のコマンドとなっており、32Byte単位のデータ520に4つのコマンドが格納される。
またコマンドリスト(ディスプレイリスト)を構成するコマンドには、レジスタ制御コマンド540、データ取得コマンド542、終了コマンド546の待機コマンド548、Jumpコマンド550の5種が少なくとも存在する。なお、データ処理コマンド544は画像入力部1521により生成され、画像処理実行部153へ送出されるコマンド(詳細は後述する)である。各コマンドは上位8bitのオペコード(opcode)により識別され、下位56bitは各コマンドにより用途が異なる。これらのコマンドは図1Aに記載の画像処理部150で機能する。以下、画像処理部150の構成例である図1Bを用いて各コマンドの動作について説明する。
まずコマンドリスト(ディスプレイリスト)を構成する各コマンドは、画像処理部150の各種画像処理回路(画像入力部1521、画像処理回路(1)1531、画像処理回路(2)1534〜画像処理回路(P)1537、画像出力部1523)で機能する。画像処理回路(1)1531、画像処理回路(2)1534〜画像処理回路(P)1537は、インターコネクト1530により接続されている。各コマンドは、インターコネクト1530に対して設定された接続順に沿って各画像処理回路を順番に通過する。例えば、画像入力部1521、画像処理回路(1)1531、画像処理回路(2)1534〜画像処理回路(P)1537、画像出力部1523の順に各コマンドが通過する。各コマンドは各画像処理回路により、内部情報を書き換えられることはあるが、コマンド自体が途中で削除されることはない。
レジスタ制御コマンド540は、画像処理部150の各種画像処理回路のレジスタに対して値を読み書きするためのコマンドであり、1bit情報“rw”が“0”のときはレジスタリードコマンド、“rw”が“1”のときはレジスタライトコマンドとなる。7bitの回路識別情報“ip_id”は、上記の各種画像処理回路を区別、特定する情報である。例えば画像入力部1521は“0”、画像処理回路(1)1531は“1”、画像処理回路(2)1534は“2”、画像処理回路(P)1537は“P”、画像出力部1523は“P+1(=30)”であるとする。また16bit情報“address”は、上記の各種画像処理回路ごとの所有するレジスタの番地を示す情報である。例えば、“rw=1、ip_id=1、address=0x0、data=0xF”であるレジスタ制御コマンドについて説明する。このレジスタ制御コマンドはライト動作をするため、便宜上、レジスタライトコマンドと呼ぶことにする。このレジスタライトコマンドは、画像入力部1521では、回路識別情報“ip_id”が異なるので無視され、インターコネクト1530を通って画像処理回路(1)1531に入力される。画像処理回路(1)1531では、回路識別情報“ip_id”が同一であるので、同コマンドが有効となり、画像処理回路(1)1531の“address=0x0”番地のレジスタに、“data=0xF”が書き込まれる。画像処理回路(1)1531は同コマンドを削除せず、そのままインターコネクト1530を介して次の画像処理回路(2)1534へ入力される。画像処理回路(2)1534以降の回路では回路識別情報“ip_id”が異なるため、同コマンドは無視され、最後に画像出力部1523で無視された後、同コマンドは画像出力部1523により削除される。次に“rw=0、ip_id=2、address=0x4、data=0x0”であるレジスタ制御コマンドについて説明する。このレジスタ制御コマンドはリード動作をするため、便宜上、レジスタリードコマンドと呼ぶことにする。前述のレジスタライトコマンド同様、回路識別情報“ip_id=2”である画像処理回路(2)1534以外では無視される。このレジスタリードコマンドは回路識別情報“ip_id”が同一である画像処理回路(2)1534で有効となる。そして、“address=0x4”番地のレジスタ値が読み出され、レジスタリードコマンドの“data”領域がこの読み出された値に置き換わり、インターコネクト1530を介して後段の画像処理回路に送られる。画像出力部1523では、前述のレジスタライトコマンドと異なり、“data”だけが抜き取られるか、レジスタリードコマンドそのものが、CPU102がアクセス可能なメモリ領域に出力(記憶)される。
データ取得コマンド542は、画像入力部1521と画像出力部1523の動作を制御するコマンドである。画像入力部1521は、データ取得コマンドを受け取り、前述のレジスタ制御コマンドにて予め設定されたレジスタ値に従い、DMAC(Read)194を起動してメインメモリからデジタル画像データや補正データを取得する。ここで、DMACに予め設定されたレジスタ値とは、例えば、レジスタ制御コマンドにより設定された読出し開始アドレスと読出し回数である。次に、画像入力部1521は、このデータ取得コマンドを画像処理回路(1)1531、画像処理回路(2)1534〜画像処理回路(P)1537、画像出力部1523へインターコネクト1530を介して送る。このように、データ取得コマンドを下流へ送ることにより、例えば、レジスタ制御と後述のデータ処理を時分割で動作を切り換えるときに、切り替え制御を容易に実現することが可能となる。そして、画像入力部1521は、DMAC194を用いて取得したデジタル画像データや補正データをデータ処理コマンド544の形式に変換する。そして、画像入力部1521は、データ処理コマンド544を画像処理回路(1)1531、画像処理回路(2)1534〜画像処理回路(P)1537、画像出力部1523へ送る。
また画像出力部1523は、データ取得コマンドを受け取り、その後に続くデータ処理コマンドのRGB領域から情報を抜き出し、所定のパッキングを行い、32Byte単位のデータに変換する。そして、画像出力部1523は、レジスタ制御コマンドにて予め設定されたレジスタ値にしたがってDMAC(Write)196を起動して32Byte単位の処理後のデジタル画像データをRAM106へ書き出す。
データ処理コマンド544は、画像処理回路(1)1531、画像処理回路(2)1534〜画像処理回路(P)1537を用いて画像処理を実行するためのコマンドである。画像処理を実行する前に予め画像処理回路(1)1531、画像処理回路(2)1534〜画像処理回路(P)1537には、前述のレジスタライトコマンドにより所定のレジスタ値が設定されている。データ処理コマンド544は、8bitのデータ処理識別情報“step”を含む。また、画像処理回路(1)1531、画像処理回路(2)1534〜画像処理回路(P)1537には、処理すべきデータ処理コマンドを識別するためのデータ処理識別情報“step”が設定されている。そして、各画像処理回路は、入力されたデータ処理コマンドのデータ処理識別情報“step”が自身の同一のデータ処理識別情報と同一のデータ処理コマンドのみ画像処理を行い、それ以外のデータ処理コマンドは無視する。各画像処理回路は、データ処理コマンドの各16bitのR、G、B領域の画像データを抜き出し、所定の画像処理を行い、処理結果をデータ処理コマンドの各16bitのR、G、B領域に格納して内部バスを介して後段の画像処理回路に送る。各画像処理回路(1)1531、画像処理回路(2)1534〜画像処理回路(P)1537が一連の画像処理を行うことで、パイプライン的に並列処理を行う。終了コマンド546は、ディスプレイリストの終了を示すコマンドであり、画像出力部1523は、このコマンドを受け取った後、CPU102に対して終了割り込みを出力する。
次に、図1Bと図8A、図8B、図8Cを用いて画像処理部150の動作とコマンドリスト(ディスプレイリスト)の関係についてさらに詳しく説明する。前述の画像読み取り部120により読み取られた読み取り画像(デジタル画像データ)と補正データは図4で説明したようにRAM106に格納されている。まずCPU102は、RAM106に格納されたデジタル画像データを画像処理するために、図8Aに示すようなコマンドリスト(ディスプレイリスト)を作成する。そして、CPU102は、作成したコマンドリスト(ディスプレイリスト)を、RAM106の図5に記載のディスプレイリスト格納領域DPL(2)に書き込む。次にCPU102は、図2Aの画像処理部150を制御するための専用バス221を介して、コマンドリスト(ディスプレイリスト)の先頭アドレスであるDPL_STR_ADDRと連続転送量であるDPL_DMA_LENGTHとを設定する。さらにCPU102は、専用バス221を介してコマンドリスト(ディスプレイリスト)の読み出し動作を起動するレジスタ(Kickレジスタ)に“0x1”を書き込む。その後、CPU102は、画像出力部1523から画像処理の終了割り込みが入力されるまで解放される。
画像入力部1521は、DMAC(Read)194の設定と起動を行うことにより、ダイレクトメモリアクセスによりコマンドリスト(ディスプレイリスト)を取得する。すなわち、画像入力部1521は、DMAC194を用いてRAM106のDPL_STR_ADDR番地を先頭アドレスとして連続するDPL_DMA_LENGTH(例えが512Byte)分のコマンドリスト(ディスプレイリスト)を読み出す。画像入力部1521は、DMAC194からの入力を受けて、読み出したコマンドリスト(ディスプレイリスト)を画像入出力部152の中間バッファ制御部1522内の中間バッファ232に一旦記憶する。画像入力部1521はバッファ232に記憶されたコマンドリスト(ディスプレイリスト)を先頭から1コマンドずつ取り出して解析する。そして、取り出したコマンドがレジスタ制御コマンドであり回路識別情報“ip_id”が“0”の場合、画像入力部1521は当該レジスタ制御コマンドを処理した後に後段の画像処理回路へ送出する。また、取り出したコマンドがレジスタ制御コマンドであり回路識別情報“ip_id”が“0”でない場合、画像入力部1521は何も処理せずに当該レジスタ制御コマンドを後段の画像処理回路へ送出する。後段の画像処理回路(1)1531から画像処理回路(P)1537においても、回路識別情報“ip_id”によりレジスタ制御コマンドに対応した処理(レジスタライト、レジスタリード)が行われる。そして、画像出力部1523も同様のレジスタ設定処理を行った後に、レジスタリードコマンドに記述されている、読み出されたレジスタ値のみをDMAC(Write)196を用いてRAM106へ書き込む。
図8Aのコマンドリスト(ディスプレイリスト)例の550、552、554はレジスタライトコマンド(rw=1)である。すなわち、画像入力部1521、画像処理回路(1)1531〜画像処理回路(P)1537、画像出力部1523の画像処理時のレジスタ値を設定するためのレジスタライトコマンドがコマンドリスト(ディスプレイリスト)冒頭に並ぶ。このレジスタライトコマンドですべての回路の所望のレジスタ設定が完了すると、データ取得コマンド556が画像入力部1521に取り込まれる。画像入力部1521は解析したコマンドがデータ取得コマンドであった場合は、当該コマンドをそのまま後段の画像処理回路(1)1531へ送る。また、このとき、画像入力部1521は、データ取得コマンド556が記憶されていたバッファ232のアドレスを内部のテンポラリレジスタに退避して、ディスプレイリスト解析を一旦中断する。そして、先に設定されたレジスタ値にしたがってDMAC(Read)194の設定と起動を行い、ダイレクトメモリアクセスにより画像データを取得する。すなわち、DMAC194は、RAM106の先頭アドレスS0_IMG_STR_ADDR番地から後述する所定の連続数で所定の繰り返し回数だけデジタル画像データを読み出す。
画像入力部1521は、DMAC(Read)194からの入力を受けて、読み出したデジタル画像データを画像入出力部152の中間バッファ232に一時的に記憶する。そして、画像入力部1521は、中間バッファ232に記憶されたデジタル画像データを、先頭から所定画素数ずつ取り出して、データ処理コマンド544のコマンド形式に変換して後段の画像処理回路へ送出する。画像入力部1521にコマンドリスト(ディスプレイリスト)が入力されたときの図8Aと、画像入力部1521から出力されたコマンド例である図8Bを比べてみると以下のことがわかる。すなわち、図8Bではデータ取得コマンド556の後にデータ処理コマンド572が挿入されており、これらのコマンドはメモリから読み出されたデジタル画像データ558がコマンドに変換されたものである。なお、図8Bにおいて、step=0,1,2はそれぞれ画像データや参照(補正)データ等のデータの種類を区別するための情報である。また、データ処理コマンド572のstep=Mは、実施したい画像処理には関係ない別種のデータコマンドを表しており、Mとして0,1,2以外の数値が用いられる。
後段の画像処理回路(1)1531から画像処理回路(P)1537は、先に設定されたレジスタ値に従い画像処理を行い、R,G,Bデータを変更して画像出力部1523へ送出する。画像出力部1523は、R,G,Bデータをデータ処理コマンドから抜き出し、所定の形式でパッキングする。そして、パッキングを完了したら、画像出力部1523は、先に設定されたレジスタ値に従いDMAC(Write)196にレジスタ設定と起動を行う。この結果、DMAC196により、画像処理後のデジタル画像データ598(図8C)がRAM106に書き込まれる。
以上のように、コマンドリスト(ディスプレイリスト)のデータ取得コマンドをトリガとして、CPU102の介在なしに、画像入力部1521によって必要な種々のデータがRAM106から取得される。そして、画像処理回路によって処理され、画像出力部1523により処理結果がRAM106へ書き出される。なお、図8A,図8Bでは記載を簡潔にするため、1つのデータ取得コマンドに対して1回のDMAC(Read)と1回のDMAC(Write)の起動となっているが、本発明はこれに限られるものではない。例えば、画像入力部1521と画像出力部1523のレジスタ設定により、一度に取得するデジタル画像データの画素数を少なく指定することができる。このような設定によれば、1つのデータ取得コマンドに対してDMAC194,196を複数回起動し、少量のデジタル画像データずつ、分割してデータ処理を行うことが可能である。このような場合、後述に詳細説明する画像入力部1521と画像出力部1523のバッファ容量を小さくできるという利点がある。
データ取得コマンドに対する種々のデータの取得が終了したら、中断していたディスプレイリストの解析を再開する。図8Aのディスプレイリスト例では、データ取得コマンド556の後に、レジスタリードコマンド558が続いている。これらのコマンドは、画像処理後の画像処理回路(1)1531から(P)1537のStatus値を読み出すためにある。レジスタリードコマンドに対しては、画像出力部1523において、レジスタリードコマンド590の形式のままRAM106へ退避してもよいし、読み出されたレジスタ値だけ抜き出した形式のデータ592をRAM106へ退避してもよい(図8C)。CPU102はRAM106のこれらのデータを参照して画像処理部150の動作状況を知ることができる。
図8Aのディスプレイリスト例の最後に終了コマンドがあり、画像入力部1521はこの終了コマンドを後段の画像処理回路へ送出する。各画像処理回路も終了コマンドを後段に送出し、画像出力部1523は終了コマンドを受け取ると、CPU102へ画像処理の終了割り込みを通知する。CPU102は終了割り込みを受け付けると、本処理を終了する。そして、画像処理部150は、これまで説明したコマンドリスト(ディスプレイリスト)に応じた一連の自律的な動作を行った後、再びCPU102から起動されるまで待機する。
1つのディスプレイリストにデータ取得コマンドが複数回、挿入されている場合、前述のデータ取得コマンドの動作をその回数分繰り返すことで複数バンド領域に対する画像処理を実現できることは言うまでもない。つまり、同時両面スキャンの用途では、表面と裏面のために、各々のデータ取得コマンドを挿入する。またデータ取得コマンドの前後のレジスタ制御コマンドにおいて、表面、もしくは裏面の画像処理に対応するレジスタ値を設定しておけばよい。
先の例では、画像処理のデータを供給するためのデータ取得コマンドについて説明した。この手法を画像処理回路のSRAM等で構成されるテーブルのレジスタ設定に応用して、テーブル設定を高速化できる。例えば、新たにレジスタ取得コマンドを定義し、画像入出力部152がレジスタ取得コマンドをデコードすると、データ取得コマンドと同様にグローバルバッファから画像データ形式のテーブル値(テーブルデータ)を読み出す。そして回路識別情報“ip_id”や“rw”や画像処理回路のテーブルの先頭アドレスを示すレジスタ(不図示)をもとに、画像入出力部152がテーブル値の1つごとにレジスタコマンドを生成する。そして、画像入出力部152は、取得したテーブルデータだけ、生成したレジスタコマンドを画像処理実行部153に送信して画像処理回路にテーブル設定をする。レジスタライトコマンドのみならず、レジスタリードコマンドにも同様の対応ができる。例えば、生成したレジスタリードコマンドを用いて画像処理回路のSRAMからテーブル値を読み出し、画像入出力部152が受信してレジスタリードコマンドを画像データ形式のテーブル値(テーブルデータ)に変換する。そして画像入出力部152は、データ取得コマンドと同様に、レジスタ取得コマンドに同期して、テーブルデータをグローバルバッファに書き込むことができる。CPU102は書き込まれたレジスタリード値やテーブル値をグローバルバッファから参照することができる。
●画像データの入出力
以下、本実施形態における、RAM106から画像入出力部152への、または画像入出力部152からRAM106への画像データの入出力処理について、図2を用いて詳細に説明する。本実施形態の画像処理装置は、図2Aの2001及び2002のように、1つの画像データ300からバンド領域301(幅Bdl×高さBdh)を抜き出し、入力画像データとしてRAM106に格納する。このバンド領域の入力画像データは、図4Aで説明したように、RAM106で取り扱いやすくなるよう、図2Aの2003の210に示す32Byteを単位としたデータ構造からなる。
図2Aにおいて、前述のデータ取得コマンドにより、DMAC194が起動する。するとDMAC194は、このバンド領域の入力画像データ210を、図1に示した共有バス190を介してRAM106から読み出し、画像処理部150へ入力する。入力画像データ210は、上述したデータ構造にしたがって、幅32Byte×高さBdh_inの処理単位で、領域(1)211から領域(M)219までのM個の画素領域(小領域)に分けられる。そして、DMAC194は、このM個の小領域の入力画像データを、小領域(1)211から小領域(M)219まで順次読み出し、画像処理部150に入力する。画像処理部150は、この小領域の入力画像データを受け取り、この小領域単位で画像処理を実行する。なお、画像処理部150における処理単位の大きさに応じて、図2Aの2004のように、バンドの小領域ごとに読出し処理を行ってもよいし、バンドの全部の画素領域を一度に読出してもよい。
DMAC194に指示するためのDMA情報には、例えば、「読み出し先の先頭アドレス」、「連続読み出し量(32Byte単位のデータを連続何回読み出すか)」、「インクリメント・アドレス」および「繰り返し回数」の項目が含まれる。例えば、図4Aに示した点順次形式の画像データであれば、指示信号に含まれる各項目の内容は以下のようになる。
・「先頭アドレス」:S5_IMG_STR_ADDR
・「連続読み出し量」:1回(32Byte)
・「インクリメント・アドレス」:1ラインのデータ量=32Byte×M
・「繰り返し回数」:バンド領域の高さ=Bdh_in回
この指示信号によれば、先頭アドレスS5_IMG_STR_ADDRから、まず32Byteのデータすなわち小領域(1)211の第1行目が読み出される。そして、次のデータを取得するため、アドレスを32Byte×Mだけ増加させることで、小領域(2)〜(M)の1行目のデータの読み出しが飛ばされて、小領域(1)211の第2行目の32Byteのデータを読み出すこととなる。そして、繰返し数Bdh_in回、すなわち、小領域(1)211のBdh_in行分のデータを読み出すことにより、小領域(1)211の全てのデータが読み出される。小領域(2)〜小領域(M)の入力画像データの読み出しでは、「先頭アドレス」を順次32ByteずつずらしてDMAC194を動作させる。このように本実施形態の画像処理装置では、所望する小領域の入力画像データをRAM106からDMA転送で読み出す。
画像入出力部152の画像入力部1521は、DMAC194から入力画像データを受け取りながら、そのデータを中間バッファ制御部1522へ転送する。中間バッファ制御部1522は、図2Aの2005のように、中間バッファ調停回路230と中間バッファ232とで構成される。中間バッファ232は、入力画像データを格納する領域である入力領域234と、後述する出力画像データを格納する領域である出力領域236とで構成される。CPU102は、中間バッファ232の入力領域および出力領域の先頭アドレスを、それぞれ入力領域先頭アドレスおよび出力領域先頭アドレスとして予め設定しておく。なお、画像入力部1521から入力された入力画像データは、まず中間バッファ調停回路230へ入力される。
中間バッファ調停回路230は、受け取った入力画像データを、中間バッファ232の入力領域234へ一時的に格納する。通常、中間バッファ232はSRAM等の記憶装置で実現される。例えば、中間バッファ232の1ワードあたりのビット長が256ビット(32Byte)長であれば、入力領域234で記憶するべきワード数はバンド領域の高さに相当し、DMA転送の繰り返し回数であるBdh_inワードとなる。また、中間バッファ232の1ワードあたりのビット長が64ビット(8Byte)長であれば、32Byte長のデータを受けるのに4ワード必要となる。したがってこの場合、入力領域234で記憶すべきワード数は、バンド領域の高さ(DMA転送の繰り返し回数)Bdh_inを4倍したワード数となる。つまり、入力領域234の容量は、1回のDMA転送の単位である小領域(処理単位)の入力画像データが格納できる容量である。なお、DMAC194は、DMA転送や1つのバンド領域の入力画像データの転送が完了すると、その旨を割り込み信号222を用いてCPU102へ通知してもよい。
その後、画像入力部1521は、中間バッファ調停回路230を介して、一時的に記憶された小領域の入力画像データを読み出し、1画素ずつ入力画素値155を順次生成して、画像処理実行部153へ入力する。なお、画像入力部1521と画像出力部1523とは非同期で動作しても良く、例えば入力画像データにおける小領域(1)211と小領域(2)の一部を用いて、出力画像データの小領域(1)251が生成され、出力されても良い。なお、図2Bの画像入力部1521と画像出力部1523にはそれぞれ、本実施形態の特徴をなすポインタ管理部1542,1544が設けられているが、この動作については後述する。
画像処理実行部153は、入力された1つ以上の画素からなる画素領域に画像処理を施す。具体的な画像処理としては例えば、複数の画素からなる画素領域に対して、所定の重み係数を乗算し、それらの値を全て加算することにより、1つの出力画素を得る。そして、画素領域をバンド領域の高さ方向にスライドさせながらこのような処理を進め、高さ方向に1列分の画素値を出力すると、次の列の画素を出力するための処理を実行する。処理後の画素値は1画素ずつ、画像入出力部152の画像出力部1523へ出力される。
画像出力部1523では、処理後の出力画素値156から出力画像データを生成し、32Byte単位で、中間バッファ調停回路230を介して中間バッファ232の出力領域236へ格納する。ここで、生成済みの出力画像データのデータ構造は図4Aに示す点順次形式のままであるが、図2Aの2006のように、出力画像データ250ではその形式が変わっていてもよい。画像処理実行部153では、入力画素領域のサイズと出力画素領域のサイズが異なる様々な画像処理が実行されるため、入力画像データ210と出力画像データ250の画素数は異なる。したがって、出力画像データ250の出力バンド領域の高さおよび幅は入力画像データ210とは異なり、高さBdh_out、幅8×Nとなる。このように、入力画像データ210と出力画像データ250では、バンド領域の高さが異なるため、処理単位である小領域の容量が異なる。さらにバンド領域の幅も異なるため、小領域の数もM個からN個に変化する。
このように、入力画像データ210と出力画像データ250とでは、バンド領域の高さおよび小領域の個数が異なるものの、データ構造は同一であるため、中間バッファ232の出力領域236の容量は、入力領域234の容量と同様の考え方で設定できる。例えば、中間バッファ232の1ワードあたりのビット長が256ビット(32Byte)長であれば、出力領域236で記憶すべきワード数は、出力バンドの高さと同じBdh_outワードとなる。また、中間バッファ232の1ワードあたりのビット長が64ビット(8Byte)長であれば、出力領域236で記憶すべきワード数は、先の出力バンドの高さであるBdh_outを4倍したワード数となる。
画像出力部1523は、例えば、Bdh_out個の画素が4列分入力され、小領域(1)251の出力画像データが中間バッファ232の出力領域236に揃った時点で、画像処理実行部153からの出力画素値156の受け取りを停止する。そして、出力領域236の出力画像データを順次読み出し、DMAC196へ送出する。そしてDMAC196は、CPU102からの指示信号225に従って、処理後の画像データをRAM106へ書き込む。同様の動作を小領域(2)から小領域(N)まで順次実行し、図2Aの2007の出力バンド領域の出力画像データをすべてRAM106へ書き戻す。
●同期コマンド
データ処理装置では、画像処理のデータフローに適切な位置で制御点(同期点)を設定できるように、図5記載の同期制御コマンド(待機コマンド548とJumpコマンド550)を備える。以下、図7Aを用いて同期制御コマンドの動作について説明する。
同期制御コマンドは、前述のコマンドリストの中で、制御(同期)したいと考える任意の位置に挿入してよい。例えば、前述の図8Aのコマンドリスト(ディスプレイリスト)例では、待機コマンド560が挿入されている。このコマンドの挿入位置は、基本的に1回のDMA転送単位の末尾などに置く必要はない。この位置を画像処理のデータフローの制御点(同期点)と呼称する。
制御点(同期点)は、画像処理の処理内容により決定される。
前述まので説明の通り、コマンドリストの同期制御コマンドは、他のコマンドと同様に画像入力部1521でデコードされた後、画像入力部1521から画像処理実行部153に送信される(S701)。画像入力部1521は同期制御コマンドをデコードし、同期制御コマンドであることを判別すると(S710)、コマンドリストの読み出しと送信を一時停止する(S715)。画像入力部1521は一時停止(ストール)状態になり、図1Bの同期部158に同期制御コマンドのデコードを通知する(S718)。画像入力部1521は一時停止(ストール)状態のまま待機しており、コマンドリストの同期制御コマンドの次に位置するコマンドの中間バッファ232からの読み出しと画像処理実行部153への送信は停止している(S740)。同期制御コマンドは画像処理実行部153の画像処理回路を通過する過程で画像処理のパイプラインを初期化する(S705)。なお、画像処理回路を通過する過程で、初期化以外の特定の処理、例えば、特定のレジスタへの特殊値の設定やステータス値の読み出しなどを実行してもよい。その後、同期制御コマンドは、画像処理実行部153から画像出力部1523に受信される(S731)。以上のような動作により、画像処理実行部153のパイプラインで処理中のコマンドは、画像出力部1523に到達しており、一連の画像処理は完了している。そして画像処理実行部153にはコマンドが存在せず、画像処理が実行されていない状態になっている。この動作を実施形態の画像処理実行部153の内部同期機能もしくはバリア同期機能と呼称する。画像処理実行部153は初期化状態のため、これ以後、画像処理部150の画像処理タスクが切り替わり、データフロー制御や動作が変更されても問題なく動作可能な状態である。そして画像出力部1523は、同期制御コマンドを受信して(S708)デコードし、同期制御コマンドであることを判別する(S730)と、同期部158に同期制御コマンドが画像出力部1523に到達したことを通知する(S738)。
上記の画像入力部1521と同様に画像出力部1523も一時停止(ストール)状態のまま待機する(S742)。
画像処理部の画像入出力部では、入力部と出力部が一体化した構成になっているので、バリア同期機能を高速に実現するのは容易である。
●外部同期機能
同期部158は、同期先である、CPU、映像入力部(カメラ)、画像読み取り部(スキャナ)、映像表示装置(ディスプレイ)や印刷装置(プリンタ)に対して同期割り込みの通知を判断し(S780)、同期割り込みを通知する(S781)。
同期部158は、同期先からの外部同期を受け付ける(S750)。例えば、同期先がCPU102の場合には、図1BのレジスタI/F159を介して、画像処理部150の同期レジスタ1582に所定の値を書き込むといった手法で、外部同期を通知する(S752)。また、その他の同期先では、外部同期信号1301や同期信号1201を用いて、画像処理部150の同期レジスタ1582に所定の値を書き込むことで外部同期を通知する(S752)。
同期部158は、同期レジスタ1582が所定の値になり、外部同期が通知されたかを判別する(S755)。外部同期の通知がないとき(S755のNO)、外部同期受付(S750)を継続する。
外部同期の通知があったとき(S755のYES)、同期部158は待機の解除を画像入力部1521と画像出力部1523に指示する(S760、S762)。そして画像入力部1521は、コマンドの送信(S701)を再開する(S770)。
また画像出力部1523は、コマンドの受信(S708)を再開する(S772)。同期部158は待機の解除を指示したのち、同期レジスタ1582を初期化する。
なお、以上の説明では、外部同期受付(S750)のあとに、外部同期の通知(S752)がある場合を説明した。仮に外部同期受付(S750)の前に、外部同期の通知(S752)があった場合、同期部158は、同期レジスタ1582への所定の値の書き込みは実行しておく。その後、外部同期受付(S750)に移行したら、すぐに同期部158は待機の解除を実行する(S760、S762)。
●本実施形態の効果
以上のように本実施形態の手法では、特許文献3のように同期のためにDMA転送を起動する必要はない。そして同期が完了すると、すぐに画像処理を再開できる。具体的には、画像入出力部152のパイプラインのストールを解除し、中間バッファ232に格納済みのコマンドの読み出しと送信を、すぐさま再開するのである。
<変形例>
本実施形態における中間バッファ232を、2バンク構成の記憶手段に拡張することができる。例えば図2Aに示すように、中間バッファ制御部1522を、記憶領域Aと記憶領域Bからなる2バンク構成とする。このような2バンク構成にすることにより、中間バッファ制御部1522は小領域(処理単位)を同時に2つまで格納できる。そして動作状況に応じて、記憶領域を入れ替える(バンクチェンジ)。上述したように、中間バッファ制御部1522が1バンク構成であれば、入力画像データの読み出し(LOAD)動作と、入力画像データから画素値を生成する送信(SEND)動作とを時分割で行っていた。また、出力画素値から出力画像データを生成する受信(RECV)動作と、出力画像データの書き込み(STORE)動作とを時分割で行っていた。本変形例では中間バッファ制御部1522を2バンク構成とすることで、入力画像データから画素値を生成する間にも、次の小領域(処理単位)の入力画像データを受け取れる。また、出力画素値から出力画像データを生成する間にも、生成済みの出力画像データを出力できる。したがって、DMAC194と送信部1541の処理を並列化でき、またDMAC196と受信部1543の処理を並列化できる。つまり、「読み出し(LOAD)動作」と「送信(SEND)動作」とを同時動作させ、「書き込み(STORE)動作」と「受信(RECV)動作」とを同時動作させることが可能となる。このように中間バファ232を複数バンクにすることで処理を高速化できる。
<第2実施形態>
●Jump機能
本実施形態では複数のコマンドリスト(ディスプレイリスト)を行き来するためのJump機能について説明する。前述の同期制御コマンドには、Jump機能を実現するためJumpコマンド550を備える。
Jumpコマンド550も前述の待機コマンドと同様にコマンドリストの中で、制御(同期)したいと考える任意の位置に挿入してよい。例えば、前述の図8Aのコマンドリスト(ディスプレイリスト)例では、Jumpコマンド564が挿入されている。このコマンドの挿入位置も、待機コマンドと同様に基本的に1回のDMA転送単位の末尾などに置く必要はない。
以下、図8Aと図8Bを用いて動作を説明する。例えばJump機能を用いれば、図5AのDPL(2)のJumpコマンドの挿入位置から、DPL(3)の先頭にコマンドリストを遷移することが可能である。しかしながら、以下の説明では説明を簡潔にするため、DPL(2)のJumpコマンドの挿入位置564からDPL(2)の所定のアドレス“0x2000”へのJump機能について説明する。
画像入出力部152内の同期部158の同時レジスタ1582には、Jump先アドレスとJump回数を指定できる。例えば、画像処理のデータフローから予めCPU102がレジスタI/F159を介して直接設定しておいてもよい。またコマンドリスト内のレジスタライトコマンドを用いて、Jumpコマンドの前に同時レジスタ1582の値を書き換えてもよい。図8A、図8Bの一例では、Jump先アドレスに0x2000、Jump回数1回が設定されている。
まず図8Aの550から562のコマンドに対応して、画像入力部1521は図8Bの550から562を出力している。画像入力部1521はJumpコマンド564をデコードすると、前述の待機コマンドと同様にパイプラインを停止して画像入力部1521を待機状態に移行する。そして前述の内部同期機能(バリア同期機能)の動作を開始する。また画像入力部1521は同期部158にJumpコマンドのデコードを通知する。Jumpコマンドは画像処理実行部153を通過し、画像出力部1523は、Jumpコマンド564をデコードすると、同期部158にJumpコマンドのデコードを通知する。
同期部158は、画像入力部1521と画像出力部1523からJumpコマンドのデコード通知を受けるとJump動作の実行の有無を判断する。具体的には、先の同期レジスタ1582にあるJump回数を参照し、正の数なら、Jump動作の実行を許可し、“0”の値ならJump動作を中止する。
Jump動作が中止の場合は、同期部158は画像入力部1521と画像出力部1523に中止を通知する。中止の場合、画像入力部1521は待機を解除して、中間バッファ232に一時記憶されたJumpコマンドの次にコマンドの処理を再開する。画像出力部1523も同様に待機を解除して処理を再開する。
Jump動作が実行の場合、同期部158は画像入力部1521と画像出力部1523に実行を通知する。そして同期部158は、同期レジスタ1582のJump回数が正の値ならデクリメント(−1)する。
画像出力部1523は、これまで受信して中間バッファ232に一時記憶したコマンドをRAM106の所定のアドレスに書き戻す。例えば、一時記憶したコマンドがレジスタリードコマンドによるリードデータを保持しているなら、必ず書き戻す必要がある。一方、一時記憶したコマンドがリードデータではないときは、必ずしもRAM106に一時記憶したコマンドを書き戻す必要はない。この動作を「出力コマンドのフラッシュ」と呼称する。
「出力コマンドのフラッシュ」動作が完了すると、画像入力部1521はプログラムカウンタ(送信カウンタ)を初期化し、画像出力部1523はプログラムカウンタ(受信カウンタ)を初期化する。そして、コマンドリスト(ディスプレイリスト)の開始アドレスとして同期レジスタ1582のJump先アドレスの0x2000に変更して、コマンドリスト(ディスプレイリスト)の読み出しを開始する。なお、Jump動作の前に中間バッファ232に一時記憶済みのコマンド(RAM106に書き戻す必要がないコマンド)は、この読み出しにより上書きされ、破棄されることとなる。
図8AのJumpコマンド564でJump動作したのち、図8Aの0x2000からコマンド処理が再開するので、コマンド554から562の処理が再度実行される。そのため図8Bでは、図8Aのコマンド554から562までのコマンドが2回展開されている。
そして図8AのJumpコマンド564がもう一度、画像入力部1521によりデコードされて、上記のJumpコマンドの動作を再度行う。しかしながら、同期レジスタ1582のJump回数は先ほどのJump動作により、”1”から”0”にデクリメント(−1)されており、Jump回数は”0”であるため、Jump動作が中止される。そして、図8Aの終了コマンド568がデコードされて、終了割り込みのアサートのあと、画像処理が完了する。
上記の一例では、Jump機能を用いることにより、図8Aのデータ取得コマンド556と待機コマンド560が図8Bでは2回展開されており、2回のバンド処理が実現できる。
<変形例>
図6A、図6Bを用いて、中間バッファ232の挙動について補足する。
図6Aと図6Bでは、前述の中間バッファ232が2バンク構成になっているときの挙動である。また前述の説明では、リードデータを「出力コマンドのフラッシュ」すると説明したが、以下の説明では、違いを分かりやすく説明するために、リードデータ以外のコマンドも「出力コマンドのフラッシュ」する。
待機コマンド548の場合、待機コマンドの後続に位置するコマンド「後続のコマンド」は、待機の解除後に、図6AのPhase_3(時刻S614)で画像出力部により書き出し(STORE)され、時刻S619では、RAM106に書き込まれている。
一方、Jumpコマンド550では、Jump動作の有無により、Jumpコマンドの後続に位置するコマンド「後続のコマンド」の書き出しの有無が変わる。図6Bは図8Aのコマンドリストの動作である。図6Bの時刻S620〜時刻S626までが1回目のJump動作の実行に対する中間バッファ232の挙動を示している。 そして、時刻S626〜時刻S629までが2回目のJump動作の中止に対する中間バッファ232の挙動を示している。1回目のJump動作の実行では、Jump後にコマンドの読み先が変わるので、「後続のコマンド」は処理されない。具体的には、時刻S622のStep_2のように「後続のコマンド」は送信(SEND)されない。そして、Jumpコマンド550が受信(RECV)された時点で、中間バッファ232はバンクチェンジし、時刻S624のPhase_3でRAM106に書き戻される。
2回目のJump動作の中止では、Jumpコマンド550が受信(RECV)までは、Jump動作の実行の動作と同じであるが、その後、「後続のコマンド」も処理され、受信(RECV)される。そして、「後続のコマンド」の受信(RECV)の後、バンクチェンジし、時刻S629のPhase_6で、「後続のコマンド」も含めてRAM106に書き戻される。
●本実施形態の効果
以上のように本実施形態の手法では、同期コマンド(待機コマンド548、Jumpコマンド550)を用いることで例えば、スキャナ等の外部機器による画像データの読み取りと、画像処理部150を1バンド毎に、連動して動作可能である。
つまり、画像データの読み取り後、画像処理部150は1バンドの画像処理を実行し、待機コマンド548を用いて、外部機器の応答を待つ。
外部機器は次の画像データの読み取りが完了したら、外部同期信号1201をアサートし、画像処理部150の待機を解除する。画像処理部150はJumpコマンド550により、コマンドリスト上の必要な開始位置から画像処理を再開する。そして画像処理部150は、次のデータ取得コマンド542により画像処理を実行して次に待機コマンド548で外部機器の応答を待てばよい。
CPU102は、図8Aの短いコマンドリスト(ディスプレイリスト)と、同期レジスタ1582のJump回数を指定するだけで、外部機器と連動させながら、必要な回数のバンド処理を実行できる。CPU102による画像処理部150の起動は1回だけである。画像処理部150が外部機器との待ち合わせを含めて自律動作することでCPU102の制御負荷を軽減している。
<第3実施形態>
●外部同期前の「出力コマンドのフラッシュ」動作
図9Aと図9Bを用いて、待機コマンド548を用いた外部同期中に、レジスタリードコマンドを用いて画像処理150のレジスタ値を読み出す手法について説明する。特にCPU102との外部同期の際に有効である。図9Aの例では、コマンドリストの待機コマンドの前にレジスタリードコマンドが挿入されている。例えば、図8Aのコマンドリストのコマンド558がレジスタリードコマンドである。図9A、図9Bは、前述の中間バッファ232が2バンク構成になっているときの挙動である。
前述のように中間バッファ232が2バンク構成になっているため、先読み(LOAD)と送信(SEND)、書き出し(STORE)と受信(RECV)は並列動作できるが、RAM106に処理後のコマンドが書き戻されるまでには時間を要する。図9Aの時刻S912のStep_3で画像出力部1523が待機コマンド548をデコードしたとき、レジスタリードコマンドは既に中間バッファ232に格納済みである。しかしながら、待機コマンド548が外部同期を待つ(Step_4)ため、中間バッファ232のバンクチェンジは起こらない。
外部同期のアサート(Step_5)のあと、待機が解除され、Step_6にて「後続のコマンド」が受信(RECV)されたのち、ようやくバンクチェンジが起こり、時刻S918でレジスタリードコマンドが書き戻される。そのため、レジスタリードコマンドに対応するデータがRAM106に格納されるのは、時刻S919となる。つまり、外部同期中にCPU102は待機コマンド548の前にあるレジスタリードコマンドに対応するデータを読み出すことはできない。
上記の問題に対処するためには、レジスタリードコマンドと待機コマンド548との間にバッファ分のNOPコマンドを挿入する。そして、待機コマンド548による外部同期の動作の前に、RAM106にレジスタリードコマンドに対応するデータをフラッシュする。本実施形態の一例では、中間バッファ232は2バンク構成のため、図9BのようにNOPコマンドを2バンク分挿入する。Phase_1〜Phase_3のLOAD動作から分かるようにレジスタリードコマンド〜待機コマンドの間にNOPコマンドが挿入されている。実際には外部同期の動作の前に中間バッファをチェンジすることが目的のため、NOPコマンドでなくてもよく、レジスタ設定のためのレジスタライトコマンドでもよい。このようにダブルバッファ、トリプルバッファ、クワッドバッファなどバッファ面数に応じて、NOPコマンドを挿入する。時刻S926のStep_1で待機コマンドがデコードされ、外部同期のための動作に入る前の時刻S924でレジスタリードコマンドはRAM106に書き戻されている。そのため、CPU102は外部同期の待機中の時間にRAM106に書き戻された画像処理部150のリードデータ(Status値)を確認できる。
上記の機能を用いることで、まず同期のタイミングで、CPU102は画像処理部150と同期して、画像処理部150のリードデータ(Status値)を確認する。そして、次の制御を決定して、コマンドリスト(ディスプレイリスト)を選択、もしくは変更する。そしてレジスタI/F159を介して同期レジスタ1582を書き換え、外部同期をアサートする。画像処理部150は、待機を解除してコマンドリスト(ディスプレイリスト)の処理を再開する。
以上のように、同期制御コマンドとその直前のコマンドとの間に、中間バッファ232の大きさ(複数バンク)に応じて別のコマンド(例えばNOPコマンド)を挿入することにより、直前のコマンドのRAM106への書き出しを保証できる。
なお、本実施形態では、中間バッファの設定により、1バンクの出力バッファ容量を変更できる。このような容量変更に際し、出力バッファ容量の変更に応じて、前述のNOPコマンドの挿入数を変更する。またレジスタリードコマンドについて言及したが、前述のレジスタ取得コマンドを用いたテーブルデータのリードにおいても同様である。つまり、レジスタ取得コマンド〜待機コマンドの間にNOPコマンドを挿入すればよい。
●本実施形態の効果
以上のように本実施形態の手法では、CPU102の制御負荷は軽減しつつも、CPU102は待機コマンド548の同期のタイミングで画像処理部150の状態を観測し、画像処理の内容を変更できる。
<第4実施形態>
●動的クロック停止動作
図1Dを用いて、前述の実施形態と図1Bとの違いを説明する。前述の図1Bの画像処理部150に対してクロック供給回路1584と画像処理実行部153に非同期I/F1552と非同期I/F1562が追加されている。
クロック供給回路1584には画像処理装置のクロック生成部(非図示)から基準となる動作周波数のクロック(基準クロックと呼ぶ)が入力されている。またクロック供給回路1584には、基準クロックの動作周波数に対して、1/2周期、1/4周期、1/8周期の動作周波数のクロックも入力されている(1/2周期クロック、1/4周期クロック、1/8周期クロックと呼ぶ)。CPU102は、レジスタI/F159を介して、クロック供給回路1584に関する制御レジスタ(非図示)に値を設定することで、クロック供給回路1584を制御できる。例えば、CPU102は、クロック供給回路1584から画像入出力部152、画像処理実行部153へ出力するクロックを、基準クロック、1/2周期クロック、1/4周期クロック、1/8周期クロックなどから選択できる。またCPU102は、クロック供給回路1584から画像入出力部152、画像処理実行部153へ出力するクロックの何れかを停止することができる。
なお画像入出力部152と画像処理実行部153の間に非同期I/Fを挿入しているため、基本的に両者のクロックを任意の周波数比に切り替えても通信できる。以下では、基準クロック、1/2周期クロック、1/4周期クロック、1/8周期クロックのように周波数比の一例を用いて説明を行う。
前述のようにデータ処理装置では、画像処理のデータフローに適切な位置で制御点(同期点)を設定でき、その制御点(同期点)を基準に画像処理のデータフローを制御できる。本実施形態では図7Bを用いて、この制御点(同期点)で画像処理実行部のクロック供給を一時的に停止する動作について説明する。
基本的な動作は、図7Aを用いた第1実施形態の動作と同様であり、以下では本実施形態の動作について説明する。画像入力部1521は同期制御コマンドをデコードし、同期制御コマンドであることを判別すると(S7710)、コマンドリストの読み出しと送信を一時停止する(S7715)。画像入力部1521は一時停止(ストール)状態になり、図1Dの同期部158に同期制御コマンドのデコードを通知する(S7718)。画像入力部1521は一時停止(ストール)状態のまま待機しており、コマンドリストの同期制御コマンドの次に位置するコマンドの中間バッファ232からの読み出しと画像処理実行部153への送信は停止している(S7740)。同期制御コマンドは画像処理実行部153の画像処理回路を通過する過程で画像処理のパイプラインを初期化する(S7705)。その後、同期制御コマンドは、画像処理実行部153から画像出力部1523に受信される(S7731)。以上のような動作により、画像処理実行部153のパイプラインで処理中のコマンドは、画像出力部1523に到達しており、一連の画像処理は完了している。そして画像処理実行部153にはコマンドが存在せず、画像処理が実行されていない状態になっている。そして画像出力部1523は、同期制御コマンドを受信して(S7708)デコードし、同期制御コマンドであることを判別する(S7730)と、同期部158に同期制御コマンドが画像出力部1523に到達したことを通知する(S7738)。
上記の画像入力部1521と同様に画像出力部1523も一時停止(ストール)状態のまま待機する(S7742)。
同期部158は、同期先である、CPU、映像入力部(カメラ)、画像読み取り部(スキャナ)、映像表示装置(ディスプレイ)や印刷装置(プリンタ)に対して同期割り込みの通知を判断し(S7780)、同期割り込みを通知する(S7781)。次に同期部158は、クロック制御のためのレジスタ(不図示)をもとにクロック制御を行う(S7782)。
具体的には同期部158からクロック供給回路1584に対しクロック制御信号1585で予め定められたクロック動作モードを通知する(S7783)。
そしてクロック供給回路1584はクロック動作モードに従い、動的クロック制御を実施する。
図13Aを用いて具体的な動的クロック制御について説明する。まずクロック供給回路1584には前述の様々な周波数のクロックが入力されている。クロック供給回路1584はクロック制御信号1585のクロック動作モードに従い、画像処理実行部153に入力するクロックを選択したり、停止したりできる。なお、クロック供給回路1584に対して基準クロックだけを入力し、クロック供給回路1584が分周して1/2周波数、1/4周波数、1/8周波数のクロックを生成して選択もしくは停止する実施形態でも構わない。
画像処理実行部153に対する同期コマンドの入出力の後、クロック供給回路1584はクロックAを停止する(S7784)。図13Aのように画像入出力部には有効なクロックが入力されており画像入出力部は動作しているが、画像処理実行部に入力されるクロックAは停止しており、画像処理実行部153は動作していない。
やがて外部の同期先から外部同期S7752が通知(外部同期信号のアサートや同期レジスタの値の変更)され、同期部158が外部同期を受け付ける(S7750)。同期部158は、外部同期の指示を判別し(S7755)、外部同期であれば(S7755のYES)、同期部158はクロック供給の再開のためのクロック制御を行う(S7786)。同期部158はクロック制御信号1585のクロック動作モードを切り替えて、クロック供給回路1584に通知する(S7787)。
クロック供給回路1584はクロック動作モードから次に再開する動作周波数のクロック(クロックBとする)を選択して画像処理実行部153へのクロック供給を再開する(S7788)。図13Aのように画像処理実行部に入力されるクロックBが再開されて、画像処理実行部153は動作し始める。このとき、再開したクロックBは不安定である場合を想定し、同期部158は復帰サイクルレジスタ(不図示)を設け、予め待機の解除をクロック供給の再開から後に遅らせることが可能である。同期部158は復帰サイクルレジスタの値を毎サイクル減算し(S7790)、復帰サイクルレジスタが0値になったとき、復帰サイクルだけ時間が経過し、クロックが安定したと判断する(S7792のYES)。
そして同期部158は待機の解除を画像入力部1521と画像出力部1523に指示する(S7760、S7762)。そして画像入力部1521は、コマンドの送信(S7701)を再開する(S7770)。
また画像出力部1523は、コマンドの受信(S7708)を再開する(S7772)。同期部158は待機の解除を指示したのち、同期レジスタ1582や復帰サイクルレジスタ等を初期化する。
上述の動的クロック制御において、例えば画像入出力部152は、画像処理部150の起動時に使用するクロックの動作周波数を選択する。一方、画像処理実行部153は、画像処理のデータフローの制御点(同期点)の区切りで画像処理の処理内容に応じて適切な動作周波数をその都度、選択できる。このとき選択するクロック動作モードは、予め定められたレジスタ(不図示)により指定し、同期部158がこのレジスタに従いクロック動作モードを切り替えてもよい。また選択するクロック動作モードは、同期コマンドの空いているビット領域に定義して、画像入出力部がコマンドをデコードした際に値を算出して、同期部158がクロック動作モードを切り替えてもよい。
●本実施形態の効果
以上のように本実施形態の手法では、あるバンド領域の画像処理のあと、次のバンド領域の画像処理を開始するまでの間に発生する外部との同期待ちに対して、画像処理実行部(画像処理パイプライン)のクロック供給を一時停止できる。例えば、CPU102は、画像処理部150の制御以外に様々な処理タスクをマルチタスクで実行している。そのため仮に画像処理部150からCPU102に外部同期の割り込み通知を行っても、CPU102の外部同期に対する割り込み応答が、他の処理タスクが原因で遅れる場合がある。通常、CPU102は、画像処理部150からの外部同期の割り込み通知を受信して画像処理部150の制御のための所定の処理を実行して、外部同期として同期部レジスタ1582に所定の値を書き込んで外部同期をアサートする。しかしながら、他の処理タスクが原因でCPU102の割り込み応答が遅れた場合、外部同期のアサートまでの時間は常に一定ではなく変動してしまう。そのため、CPU102との同期待ちの間に画像処理実行部(画像処理パイプライン)のクロック供給を一時停止して無駄な消費電力を削減することは、変動により生じる消費電力の削減に寄与し、画像処理装置の消費電力を一定以下に抑制する効果がある。CPU102による外部同期の応答における変動はソフトウェアの競合動作により起きるため、画像処理LSIの設計時に事前に応答時間を見積もることは難しい。そのため本実施形態の方法は、画像処理LSIの省電力品質を担保する上での難しい課題に対して一定の抑制効果を提供することができる。
また一般には動的なクロック供給をCPU102がレジスタI/F159を介して実現することが多いが、CPU102のソフトウェア動作の変動については対処できないことは言うまでもない。
また逆に、外部同期先がカメラ入力やスキャナ入力のようなハードウェア・デバイスのとき、外部同期先は高速に外部同期に応答することが可能であり、外部同期待ちの時間は非常に短い。このような短い待機時間に対して、CPU102が動的なクロック制御を行うと、上記のソフトウェアの競合動作や割り込み応答により、同期オーバーヘッドが大きく、かえって画像処理(全体)の速度が低下してしまう。
画像入出力部がデータフローの制御点(同期点)で動的にクロック制御することにより、データフローに合わせて、データフロー上の待機時間の消費電力を抑制できる。そして、画像入出力部により、CPU102が動的なクロック制御をする処理負荷をなくし、CPU102の応答時間の変動にも対処できるのである。
<第5実施形態>
●動的クロック切り替え動作
前述の第4実施形態では、動的なクロック停止と停止後のクロック切り替えについて説明した。本実施形態では、図13Bを用いて外部同期の待機中にクロックを切り替える方法について説明する。
本実施形態の基本動作は、前述の図7Bを用いた第4実施形態の動作と基本的には同様である。本実施形態ではクロックを停止する(S7784)タイミングで、同期部158がクロック動作モードを変更してクロックの動作周波数を切り替える。画像処理実行部153に対する同期コマンドの入出力の後、クロック供給回路1584はクロックAをクロックBに切り替える(S7784)。図13Bのように、画像処理実行部に入力されるクロックAはクロックBに変更される。このときクロックAからクロックBに切り替わるときに一時的に周波数が不安定なクロック期間が生じる。しかしながら、画像処理実行部153へのコマンドの入出力は一時停止しており、コマンドの有効信号はディアサートされているため、問題は生じない。
前述の第4実施形態と同様に、同期部158の復帰サイクルレジスタ(不図示)を用いて、予め待機の解除をクロック供給の再開から後に遅らせることができる。
このとき、復帰サイクルが完了する前に外部の同期先から外部同期S7752が通知済み(S7750)の場合、復帰サイクルの完了後に、同期部158は待機の解除を画像入力部1521と画像出力部1523に指示する(S7760、S7762)。
また逆に復帰サイクルが完了した後に、外部同期S7752の通知(S7750)があった場合、復帰サイクルは既に完了しているので、そのまま同期部158は待機の解除を画像入力部1521と画像出力部1523に指示する(S7760、S7762)。
また外部同期先がCPU102の場合、CPU102は同期割り込み通知(S7781)を受けて、CPU102が同期部158のクロック動作モードを変更してクロックの動作周波数を切り替える。そしてCPU102が、クロックが安定するための時間を待って、外部同期S7752の通知(S7750)を行えば、復帰サイクルは不要である。前述のように画像処理(全体)の処理速度は低下する可能性はあるが、画像処理のデータフローの制御点(同期点)において、CPU102が動的なクロック制御をすることができる。
●本実施形態の効果
本実施形態では、画像処理実行部153は、画像処理のデータフローの制御点(同期点)における外部との同期待ちの間に、次の画像処理の処理内容に応じて適切な動作周波数に切り替えることができる。そのため、本実施形態では、前述の第4実施形態のようにクロックを一時停止して消費電力を抑える効果は少ないが、外部との同期待ちの時間を用いて素早くクロックの動作周波数を切り替えることが可能となる。
<変形例>
前述までの説明では、画像入出力部152が行う、画像処理実行部153へのクロックに対する動的クロック停止動作や動的クロック切り替え動作について説明した。前述までの説明の通り、画像処理実行部153は、インターコネクト1530や画像処理回路(1)1531〜(P)1537等で構成される。
そして、これらのモジュールは、大別するとコマンドリスト(ディスプレイリスト)のレジスタコマンドで設定されるレジスタやSRAMなどの記憶素子と、データ処理コマンドで画像処理するための演算回路で構成されている。また画像処理回路はプロセッサで構成することもできるが、このときのプロセッサにおいても大別すると、レジスタアレイ、ワークRAMやキャッシュ等の記憶素子と、演算回路で構成されている。
そこで、前述の動的クロック制御において、これらの回路要素ごとに停止の有無を選択することでさらに消費電力を削減することができる。画像処理装置は、コマンドリスト(ディスプレイリスト)を用いて画像処理のデータフローを制御している。また画像処理装置は、コマンドリスト(ディスプレイリスト)を用いて以下の工程で画像処理を実現している。
・レジスタコマンドを用いたレジスタライト(書き込み)工程(A)
・レジスタ取得コマンドによるレジスタライトコマンドの展開とレジスタライトコマンドを用いたSRAMライト(書き込み)工程(B)
・データ取得コマンドによるデータ処理コマンドの展開と、データ処理コマンドを用いたデータ処理工程(C)
・データ処理後のレジスタを読み出すための、レジスタリードコマンドを用いたレジスタリード(読み出し)工程(D)
・データ処理後のSRAMのデータを読み出すための、レジスタ取得コマンドによるレジスタリードコマンドの展開とレジスタリードコマンドを用いたSRAMリード(読み出し)工程(E)
そこで、例えば、画像処理回路の演算回路はデータ処理中でしか動作しないので、工程(C)のときのみ画像処理回路の演算回路にクロックを供給し、それ以外の工程では演算回路のクロックは停止する。
また工程(B)と工程(E)において読み書きの対象とするSRAMにだけクロックを供給し、それ以外のSRAMのクロック供給を停止し、工程(C)のときは、すべてのSRAMにクロックを供給する。
また基本的にレジスタコマンドやレジスタリードコマンドは、画像処理回路のレジスタとSRAMの両方に値を書き込んだり、値を読み出したりできる。これに対し、SRAMへのアクセスは必ず工程(B)と工程(E)で読み書きする方針に限定すれば、工程(A)と工程(D)のときにSRAMのクロック供給を停止することもできる。
画像入出部152はコマンドリスト(ディスプレイリスト)によって表現される上述の工程を排他で実行して画像処理のデータフローを制御する。そのため各工程の開始と完了を制御する画像入出部152が、前述のように各工程で動作する回路要素ごとに詳細なクロック制御で、必要最小限のクロック供給を行うことで、より効果の高い消費電力削減を実現できる。
また画像入出部152は、内包する複数バンクのSRAMで構成された中間バッファのうち、未使用のSRAMバンクのクロック供給を停止することも可能である。また画像入出部152は、内包するDMACの転送がないときに、DMACへのクロック供給を停止することも可能である。
<第6実施形態>
●複数バンド処理におけるDMA転送の課題
本実施形態の画像処理装置では、前述の通りバンド単位でのデータ処理を行う。しかしながら、このように複数バンドに対するデータ処理を行う際に、DMA転送において以下のような問題が発生する。以下、解像度変換処理を行う場合を例として、複数バンドを処理する際に発生するDMA転送の課題について説明する。なお以下では、DMA転送先をグローバルバッファ(前述のRAM106や外部記憶装置108内の記憶領域)として説明する。
まず画像処理装置は、空間フィルタ処理、解像度変換、トリミング処理、端部拡張処理、IP変換を含め、様々な画像処理を内包している。そして画像処理装置は、それらの内包する処理をアプリケーションに応じて取捨選択して組み合せ、装置全体で所望の高画質化を実現する。図1Bに示す画像処理実行部153には、これらの様々な画像処理が、画像処理回路(1)1531〜画像処理回路(P−1)1537として実装されている。これら複数の画像処理回路を組合せて、複雑な画像処理を上述した領域分割(バンド処理)手法により実現する場合、以下の点に注意する必要がある。
空間フィルタ処理のように二次元領域の処理画素を用いた演算を行う場合、処理後の画像に対しフィルタ径に対応する周辺画素を累積した画像を画像処理回路に入力する必要がある。そしてこのような二次元領域を参照する画像処理が複数回あれば、その都度、周辺画素を累積し、すべての周辺画素を累積した、より広い範囲の画像を入力しなければならない。解像度変換処理も、このような二次元領域を参照する画像処理の1つであり、解像度変換の場合はさらに、処理の前後で出力する画像の大きさが変化する。
また、入力画像のバンド高さを一定にしてバンド分割による解像度変換を行う場合、その変換倍率によって、出力画像のバンド高さはバンド毎に変化する。
さらに同時両面スキャンのように、紙面の表と裏の画像処理を、1つの画像処理装置で時分割多重の画像処理で実現する場合には、表と裏の画像データに対する分割領域(例えばバンド)を交互に処理することが必要になる。このような用途では、前述のDMA機能の設定値は、表の領域の設定値と裏の領域の設定値を交互に算出しなければならない。特に同時両面スキャンのような用途では、スキャナ・センサーの紙面に対する取り付け位置が、紙面の表と裏で異なり、画像処理の読み取り開始位置が紙面の表と裏で異なる。また紙面の表と裏で画像の読み取り範囲の指定が異なっても同様に設定が異なる。また表と裏の画像データが点順次形式の画像データと面順次形式の画像データで異なる場合、DMA機能の設定値は違った計算方法で算出しなければならない。
上述したように、解像度変換の出力画像は小領域ごとにDMA転送されてグローバルバッファに記憶されるが、このDMA転送を行うための設定(「開始アドレス」や「繰り返し回数」)は、解像度変換の倍率によってはバンド毎に一様ではなくなる。そのためDMA転送の設定は困難となり、例えばDMA転送の開始アドレスは、転送毎に固定値を加算する等の単純な演算では算出できない。
さらに同時両面スキャンのように紙面の表と裏の画像処理を、1つの画像処理装置で時分割多重にて画像処理するには、表と裏の分割領域(例えばバンド)に対応するDMA機能の設定を、表と裏に対して交互に算出しなければならない。
このような場合、DMA転送の設定値をバンド毎にファームウェアで計算する必要があり、バンド毎にファームウェアから画像処理の入力/出力DMACにパラメータを逐次設定する必要がある。そして設定後に入力/出力DMACを起動して、画像処理を動作させる。そのため、ファームウェアを動作させるCPU102は、画像処理部150をバンド領域の単位で定期的に算出、設定、起動を行う必要があり、また画像処理部150の画像処理完了の割り込みを待つ必要がある。システム構成にもよるが、CPU102がこのような画像処理完了の割り込みを受信して割り込み要因を調べて次の動作に戻るために数msの時間を要することも珍しくない。その結果CPU102は、画像処理部150の制御と同期(待ち合わせ)のために、ある程度の処理負荷が常にかかっている状態となり、画像処理の間は解放されない。
●コマンドリストに対応したDMA情報の切り替え機能
本実施形態の画像処理装置では、上述したDMA転送の問題を解決するために、図1Bに図示したように、DMA情報を記憶、管理するための、共有メモリ180を画像入出力部152に備える。
以下、図1B、図11、図12を用いて詳細説明する。まず、CPU102は、レジスタバス1021、レジスタI/F159を介して、画像入出力部152の共有メモリ180にDMA転送に用いるパラメータ(DMA情報)を初期設定する(S901)。 例えば、上述の同時両面スキャンの課題においては、以下のDMA情報の初期値を共有メモリ180(第2共有メモリ手段)に設定する(S902)。
・表面の入力画像データに対するDMA情報
・表面の出力画像データに対するDMA情報
・裏面の入力画像データに対するDMA情報
・裏面の出力画像データに対するDMA情報
同時両面スキャンの場合は、先の4つのDMA情報を用いるが、画像データ形式が面順次のときには色数分のDMA情報が必要となる。またN枚の画像データを時分割多重で画像処理するなら、入力と出力について合計N×2個のDMA情報が必要になる。共有メモリ180には、これらのDMA情報をDMAテーブル形式で記憶してもよい。
次にCPU102は画像入出力部152をKickして画像処理を起動する(S910)。前述までの説明の通り、画像入出力部152はDMAC194を用いてコマンドリスト(ディスプレイリスト)をRAM106から取得(LOAD)して、コマンド形式で画像処理実行部153へ送付(SEND)する。そして画像入出力部152は、画像処理実行部153から処理後のコマンドを受信(RECV)して、パッキングしてコマンドリスト(ディスプレイリスト)に戻し、RAM106へ格納(STORE)する(S920、S1101)。
図12のコマンドリスト(ディスプレイリスト)S904は、表面の画像データを処理するためのコマンドである。前述までの説明のようにレジスタ制御コマンド[0]〜[4]で表面の画像処理のレジスタ設定を行う。
レジスタ制御コマンドにより設定されるレジスタ設定の中には、画像処理で必要となるDMA情報のテーブル数Chと共有メモリ180のテーブルの番号が含まれており、テーブル数Chの数だけテーブル番号T[0,1,・・・,Ch−1]が指定されている。例えば、レジスタ制御コマンド[3]〜[4]がこれにあたる。
画像入出力部152は、表面のデータ取得コマンドをデコードする(S1102、YES)。すると、テーブル数Chとテーブル番号[0,1,・・・,Ch−1]に従い(S1103)、共有メモリ180から表面のDMA情報をリロード(再取得/RELOAD)する(S930、S1104)。
DMA情報の詳細は後述するが、「開始アドレス」、「繰り返し回数」、「ラインポインタ」、「連続読み出し量」、「インクリメント・アドレス」等である。
そして、後述のDMA機能を用いて画像データのDMA転送を行い、表の画像データについて前述の動作で画像処理を行う(S934、S1110)。
画像処理が完了すると、画像入出力部152は、処理後のDMA情報を共有メモリ180の所定の位置にDMA情報をリストア(退避/RESTORE)する(S938、S1190)。特に後述のラインポインタ等の情報は、次回、表面の画像データの続きを画像処理する際に必要になる。
データ取得コマンドと関連する画像処理が完了すると、先の説明の通り、コマンドリスト(ディスプレイリスト)からのコマンドの処理を再開する。コマンドリスト(ディスプレイリスト)S904のレジスタ制御コマンド[5]〜[6]は、表面のレジスタリードコマンドであり、表面の画像処理後のStatus値などを読み出し、CPU102が表面の画像処理の結果を利用する。
続いて、画像入出力部152は、コマンドリスト(ディスプレイリスト)S906記載の裏面の画像処理のためのコマンドを処理する(S940)。裏面の画像処理のためのレジスタ設定は、レジスタ制御コマンドを用いて変更される。特に裏面の画像処理で必要となるDMA情報に対するテーブル数Chと、そのテーブル番号T[0,1,・・・,Ch−1]は表面の設定値とは異なる。そこで、必ずこれらのレジスタ設定値は必ず変更する。例えば、コマンドリスト(ディスプレイリスト)S906記載のレジスタ制御コマンド[3]〜[4]が、これにあたる(S1103)。
画像入出力部152は、S906記載の裏面のデータ取得コマンドをデコードする(S1102、YES)。すると、変更されたテーブル数Chとテーブル番号[0,1,・・・,Ch−1]に従い(S1103)、共有メモリ180から裏面のDMA情報をリロード(再取得/RELOAD)する(S950)。
そして、後述のDMA機能を用いて画像データのDMA転送を行い、裏の画像データについて前述の動作で画像処理を行う(S954、S1110)。
画像処理が完了すると、画像入出力部152は、処理後のDMA情報を共有メモリ180の所定の位置にDMA情報をリストア(退避/RESTORE)する(S958、S1190)。特に後述のラインポインタ等の情報は、次回、裏面の画像データの続きを画像処理する際に必要になる。
データ取得コマンドと関連する画像処理が完了すると、先の説明の通り、コマンドリスト(ディスプレイリスト)からのコマンドの処理を再開する。コマンドリスト(ディスプレイリスト)S906のレジスタ制御コマンド[5]〜[6]は、裏面のレジスタリードコマンドであり、裏面の画像処理後のStatus値などを読み出し、CPU102が裏面の画像処理の結果を利用する。
最後に、画像入出力部152は、残りのコマンドリスト(ディスプレイリスト)S908記載のコマンドを処理し、終了コマンドをデコードするとすべての処理を完了する(S960)。そして終了割り込みをCPU102にアサートする(S970)。
またCPU102は、終了割り込みを受信したあと、共有メモリ180の処理後のDMA情報(S992)を、画像処理の結果として、レジスタバス1021とレジスタI/F159を介して取得してもよい(S991)。
本実施形態の画像処理装置では、上記のようなDMA情報のリロードとリストアにより、表と裏の分割領域を、各々続きから再開できるように、入力/出力の画像データを管理するためのラインポインタを導入する。ラインポインタはすなわち、バンド領域の上端ライン位置を示す。本実施形態ではラインポインタを用いることで、以下に説明するような、画像処理に特化したDMA機能を備える。
●第1のDMA機能(「開始アドレス」の自動計算機能)
まず第1のDMA機能として、ラインポインタを用いてDMA転送の「開始アドレス」を自動計算する機能を有する。ここで、グローバルバッファにおける画像データの格納領域とラインポインタの関係について、図10を用いて説明する。1ページ(1画面)分の画像データに相当する記憶領域がグローバルバッファに割り当てられている場合を図10(上の図)に示す。
その先頭アドレスがページ左上の画像データを記憶するように、予め設定されている。図10には、入力画像データを記憶する領域BIと、出力画像データを記憶する領域BOとが別々に用意されており、互いが重ならないように、グローバルバッファに確保されている。上述したようにバンド領域ごとに順次画像処理が繰り返されるため、図10には、時間経過に伴って入力画像データのバンド領域(a)〜(d)と、出力画像データのバンド領域(x)〜(xa)が遷移する旨が示されている。各バンド領域の上端のライン位置を一時的に記憶するため、図2Bに示した画像入力部1521と画像出力部1523のそれぞれが、ポインタ管理部1542と1544を備えている。ポインタ管理部1542と1544はすなわち、ラインポインタを保持するレジスタ(不図示)を有する。
DMA転送を行う際には、DMA転送の開始アドレスを算出する必要がある。本実施形態では、一時的に記憶されたラインポインタを利用して、DMA転送の開始アドレスを下式に従って算出する。
DMA転送の開始アドレス=先頭アドレス+インクリメント・アドレス×ラインポインタ …(1)
ここで図10(上の図)を用いて一連のバンド処理を説明する。まず、第1バンド領域(a)を画像データとして入力する。このときのラインポインタline_v_ptr(a)は“0”である。そのため、画像データ入力のDMA転送の開始アドレスは、式(1)から、図10に示す「入力バッファの先頭アドレス」となる。そして、入力された画像データを処理し、第1バンド領域(x)を画像データとして出力する。このときのラインポインタline_v_ptr(x)も“0”である。この画像データ出力のDMA転送の開始アドレスについても、入力時と同様に、図10に示す「出力バッファの先頭アドレス」となる。
次に、第2バンド領域(b)を画像データとして入力する。このときのラインポインタline_v_ptr(b)は、第1バンド(a)から第2バンド(b)へのラインポインタの変更量(遷移量)を加算した値となる。そのため、画像データ入力のDMA転送の開始アドレスは、式(1)から、「入力バッファの先頭アドレス+「インクリメント・アドレス」×変更量(遷移量)」となる。
一方、画像処理後に出力される第2バンド領域(y)のラインポインタline_v_ptr(y)は、出力バンド領域の高さが加算された値となる。そのため、第2バンド領域を出力する際のDMA転送の開始アドレスは式(1)から、「出力バッファの先頭アドレス+「インクリメント・アドレス」×(出力バンド高さ)」となる。
さらに、第3バンド領域(c)/(z)の画像データを入力/出力するが、画像データ入力に関しては第2バンド領域の動作と同様であるため、説明を割愛する。上述したように、処理後のバンド領域の高さの変動に伴い、ラインポインタも一様な変更量(遷移量)にはならない。ラインポインタの管理の詳細については後述するが、出力時のDMA転送の開始アドレスは、ラインポインタに従い式(1)から自動算出される。
●第2のDMA機能(「繰り返し回数」の自動取得機能)
なお、DMAC194では画像データ転送の「繰り返し回数」は一定であるから初期設定のままでよい。一方、DMAC196では画像データ転送の「繰り返し回数」は一定とは言えない。その場合、例えば、画像出力部1523が、画像処理実行部153から受信した分割領域の小領域のライン数(Bdh_out)を自動取得し、DMAC196の「繰り返し回数」として自動設定すればよい。
その後、画像出力部1523はDMAC196を起動し、中間バッファ制御部1522を介して中間バッファ232の出力領域236から画像データを読み出す(READ)。そして、DMAC196は上記初期設定から開始アドレスを自動算出して、出力バンド領域の画像データをグローバルバッファに書き込む。小領域の画像データをすべて書き込むと、画像処理が完了する。
●第3のDMA機能(ラインポインタ管理機能)
本実施形態の画像処理装置はさらに、第3のDMA機能として、ラインポインタの管理機能を有する。以下、図11を用いて、本実施形態におけるラインポインタ管理を伴うデータ転送処理について説明する。図11に示す処理は、画像入力部1521と画像出力部1523の各々において実行されるが、ここでは、主に画像出力部1523による処理として詳細に説明を行う。
図12のS910に示したような初期設定(S902)を行った後、データ取得コマンドのデコードを起点に1バンドの処理を開始する(S1112)。まず、ポインタ管理部1544に保持されているラインポインタから、上記(1)式により開始アドレスを算出する(S1114)。そして、小領域の画像処理を開始する(S1120)。小領域(処理単位)毎の画像の読み出し、送信、受信、画像の書き出しの各動作は、前述の通りであり、DMAC情報のリロード後に、小領域単位の情報を書き換える(S1130)。小領域単位の情報を書き換えた後、該当する小領域の開始アドレスや繰り返し回数をDMACに設定する(S1134)。該当する小領域はバンドの長さ方向(副走査方向)に走査していくため、まずバンド領域の開始アドレスを算出し、小領域の位置に合わせて「連続読み出し量」から小領域の開始アドレスを算出する。そして求めた開始アドレスをDMAC196に再設定していく。繰り返し回数に関しては上述した通りである。その後、小領域のDMA動作を行って(S1136)、小領域の画像処理を完了する(S1140)。
S1140での小領域の画像処理完了により、1バンド分のすべての小領域の処理が完了するのであれば(S1150のYES)、1バンドの処理が完了したとする。一方、1バンド分のすべての小領域の処理が完了していなければ(S1150のNO)、S1120に戻って次の小領域の処理を繰り返す。
1バンドの処理が完了したならば(S1150のYES)、1バンド単位の情報を書き換える(S1160)。具体的には、ポインタ管理部1542や1544に保持されているラインポインタを更新する。画像入力部1521のポインタ管理部1542では、ラインポインタの値に、予め初期設定で設定された変更量を加算して、ラインポインタを更新する。画像出力部1523のポインタ管理部1544では、ラインポインタの値に、小領域単位の情報の書き換え(S1130)で使用した受信ライン数を加算して、ラインポインタを更新する。これで、1バンドの処理を完了する(S1180)。
次バンドの処理を行う際には、S1160と同様に所定の変更量(遷移量)か受信ライン数によって、ラインポインタが適切に更新されている。そして、更新されたラインポインタを含むDMA情報は共有メモリ180にリストア(S1190)して記憶されている。そして、次回の表面、もしくは裏面の該当するバンド処理の再開時に、バンド先頭の開始アドレスの算出(S1114)により、適切な開始位置からバンド処理を再開できる。
以上のように本実施形態の画像処理装置においては、第1〜第3のDMA機能として、ラインポインタに基づくDMA転送「開始アドレス」の自動計算機能、DMA転送の「繰り返し回数」の自動計算機能、ラインポインタ管理機能、を有する。これにより、画像入力部1521が中間バッファ232を介してLOAD動作と送信動作を連動することができ、画像出力部1523が中間バッファ232を介して受信動作とSTORE動作を連動することができる。これら動作の連動により、画像処理の動作状況に連動しながら、CPU102を介在することなく、複数バンドの画像処理を連続的に実行することができる。
●本実施形態の効果
従来の画像処理装置では、解像度変換によりバンド毎に入力/出力画像の画素数が変わることに対し、ファームウェアでの事前計算によってDMAの設定を行っていた。対して本実施形態では、画像処理の入力/出力DMACが画像処理の結果に追従して動作することができるため、CPUによる画像処理部の設定、起動、同期などの制御が不要となる。また同時両面スキャンのように、表面と裏面の分割領域を時分割多重で交互に処理するときにも、CPUによるDMAの設定の介在は不要である。その結果、CPUと画像処理部との待ち合せ時間が削減でき、画像処理全体を高速化できる。また上述したファームウェアによる一連の制御処理をCPUがバンド毎に実行する必要が無くなるため、CPUの制御負荷を減らすことができる。
以上説明したように本実施形態によれば、画像処理部への画像データの転送を効率化して画像処理全体を高速化し、CPUの処理負荷を軽減することができる。
<変形例>
本実施形態における中間バッファ232を、2バンク構成の記憶手段に拡張することができる。例えば図2Bに示すように、中間バッファ制御部1522を、記憶領域Aと記憶領域Bからなる2バンク構成とする。このような2バンク構成にすることにより、中間バッファ制御部1522は小領域(処理単位)を同時に2つまで格納できる。そして動作状況に応じて、記憶領域を入れ替える(バンクチェンジ)。上述したように、中間バッファ制御部1522が1バンク構成であれば、入力画像データの読み出し(LOAD)動作と、入力画像データから画素値を生成する送信(SEND)動作とを時分割で行っていた。また、出力画素値から出力画像データを生成する受信(RECV)動作と、出力画像データの書き込み(STORE)動作とを時分割で行っていた。本変形例では中間バッファ制御部1522を2バンク構成とすることで、入力画像データから画素値を生成する間にも、次の小領域(処理単位)の入力画像データを受け取れる。また、出力画素値から出力画像データを生成する間にも、生成済みの出力画像データを出力できる。したがって、DMAC194と送信部1541の処理を並列化でき、またDMAC196と受信部1543の処理を並列化できる。つまり、「読み出し(LOAD)動作」と「送信(SEND)動作」とを同時動作させ、「書き込み(STORE)動作」と「受信(RECV)動作」とを同時動作させることが可能となる。
本変形例では、処理前と処理後の2種の画像データを同時に入出力するので、中間バッファ232の入力領域と出力領域がそれぞれのバンク(バンクAとバンクB)に分けられる。したがって、入力領域と出力領域のそれぞれについての先頭アドレスを、CPU102が予め設定しておけばよい。処理を簡単に行うためには、バンクAとバンクBの先頭アドレスは1セットあればよい。そして各バンクの容量は、処理前と処理後の画像データの入力バンド高さと出力バンド高さの最大値をもとに算出すればよい。
このように本変形例によれば、画像処理部で同時に扱う複数種の画像データに対し、各々に中間バッファを割り当てることで、画像処理を高速化することができる。
<第7実施形態>
以下、第7実施形態について説明する。なお、第7実施形態における画像処理装置の構成は上述した第6実施形態と同様であるため、説明を省略する。上述した第6実施形態では、RAM106や外部記憶装置108のグローバルバッファに1ページ(1画面)分の入力/出力の画像データを記憶するための記憶容量を備えていた。しかしながら、製品の製造コストを抑えるためには、RAM106や外部記憶装置108にグローバルバッファとして1ページ分の画像データを記憶するに十分な記憶容量を備えられない場合もある。第7実施形態では、グローバルバッファが1ページ分の容量に満たない場合であっても、グローバルバッファをリング式のバッファ(以下、リングバッファと称する)として使用することで、1ページ分の画像処理を可能とする。
図10(下の図)にリングバッファを用いたバンド処理の例を示す。処理中の画像データのライン位置がバッファの下端(line_v_thr)に到達すると、ライン位置をバッファの上端(“0”)に戻して循環させるように制御する必要がある。このような循環制御を行うことで、1ページ分を処理するために必要となる記憶容量を、1ページの全体分よりも小さく抑えるこができる。図10の例ではグローバルバッファに、入力画像データを記憶する領域BIrと、出力画像データを記憶する領域BOrが、互いに重ならない記憶領域(リングバッファ)としてグローバルバッファに確保されている。図10においてもバンド領域ごとに順次画像処理が繰り返されるため、グローバルバッファの例と同様に、時間の経過に伴って入力画像データのバンド領域(a)〜(d)と出力画像データのバンド領域(x)〜(xa)が遷移する旨が示されている。そして、第6実施形態と同様に、各バンド領域の上端のライン位置を一時的に記憶するため、画像入力部1521と画像出力部1523はそれぞれのポインタ管理部1542,1544でラインポインタを管理している。
図10において、入力画像データのバンド領域(c)と出力画像データのバンド領域(z)は、処理の途中でリングバッファの記憶容量が不足する。あるバンド領域がリングバッファ下端に到達すると、その後のバンド領域はリングバッファ上端からデータ記憶がなされるため、バンド領域(c)は(c−0)と(c−1)に分割され、バンド領域(z)は(z−0)と(z−1)に分割されてしまう。そこで第7実施形態では、データ転送処理の手順が第6実施形態とは変わってくる。
●ラインポインタ管理機能
以下、図11を用いて、第7実施形態においてリングバッファを用いる際の、ラインポインタ管理を伴うデータ転送処理について説明する。なお以下では、リングバッファを用いることによる第6実施形態からの変更点のみを説明し、第6実施形態と同様の処理については説明を省略する。
図11において、小領域単位の情報を書き換えた後(S1130)、該当する小領域の開始アドレスや繰り返し回数をDMACに設定するのに先立ち、ラインポインタがリングバッファの下端に到達するか否かを判定する(S1132)。すなわち、DMA転送の「繰り返し回数」は小領域のバンド高さ(副走査方向のライン長)を示すため、ラインポインタにバンド高さを加算したライン位置が、リングバッファの下端のライン位置(line_v_thr)よりも大きくなるか否かを判定する。加算したライン位置がリングバッファ下端と同じか小さいとき(S1132のNO)、第6実施形態と同様の処理(S1134,S1136)を行う。一方、加算したライン位置がリングバッファ下端より大きいとき(S1132のYES)、DMA転送を2回起動する。
1回目のDMA転送では、「開始アドレス」は第6実施形態と同様に設定するが、「繰り返し回数」はラインポインタからリングバッファ下端のライン位置(line_v_thr)までの値として設定する(S1172)。そして、1回目のDMA転送を行う(S1173)。この1回目のDMA転送により、分割された小領域の上部分(バンド領域(C−0)や(z−0)が転送される。
次に2回目のDMA転送では、ラインポインタをリングバッファ上端のライン位置を示す“0”として、「開始アドレス」を算出する。また、「繰り返し回数」としては、1回目のDMA転送の「繰り返し回数」をバンド高さから差し引いた残りの数を設定する(S1174)。そして2回目のDMA転送を行う(S1175)。この2回目のDMA転送により、分割された小領域の下部分(バンド領域(C−1)や(z−1)が転送される。このように第7実施形態では、リングバッファ境界を跨ぐときにDMA転送が分割されない。
その後、1バンドの処理が完了したならば(S1150のYES)、ポインタ管理部1542や1544に保持されているラインポインタを更新するのに先立ち、ラインポインタがリングバッファ下端に到達するか否かを判定する(S1170)。この判定はS1132と同様である。すなわち、ラインポインタにバンド高さを加算したライン位置が、リングバッファ下端と同じか小さいとき(S1170のNO)、第6実施形態と同様にラインポインタを更新する(S1160)。一方、加算したライン位置がリングバッファ下端より大きいとき(S1170のYES)、リングバッファ上端(ライン位置“0”)からの2回目のDMA転送を実行した際に設定した「繰り返し回数」から1を減じた値に、ラインポインタを更新する(S1178)。そして1バンドの処理を完了する(S1180)。
このようにリングバッファに対し、所定の変更量(遷移量)か受信ライン数に従ってラインポインタが適切に更新されるため、バンド先頭の開始アドレスの算出(S1114)により、適切な開始位置からバンド処理を再開できる。
以上説明したように第7実施形態によれば、リングバッファに対応したラインポインタ管理機能を備えることで、入力/出力画像データを格納するグローバルバッファの記憶容量を削減することができる。同時両面スキャンのように複数の画像データを各々画像処理するときには各々にバッファが必要になるため、記憶容量の削減が大変重要と言える。
<第8実施形態>
以下、第8実施形態について説明する。なお、第8実施形態における画像処理装置の構成は上述した第6実施形態と同様であるため、説明を省略する。上述した第6および第7実施形態では、処理対象である画像データが図4Aに示す点順次形式をなす例を示した。第8実施形態では、さらに異なるデータ形式の画像データを処理する例を示す。
第8実施形態における画像データの構造および格納例を図4Bに示す。図4Bは、面順次形式の画像データの格納例として、RAM(DRAM)106のデータ領域に、S0_IMG420からS3_IMG423までの4種の画像データが格納された例を示している。この4種のデータは、画像読み取り部120で読み取られた画像データに対して色空間変換や濃度補正処理を施した後、第1色K(Black)、第2色M(Magenta)、第3色C(Cyan)、第4色Y(Yellow)のデータに変換したものである。そしてDRAMの性能を落とさずに画像データの読み書きができるように、各々格納される画像データの容量の最小単位を、第6実施形態と同様に、408に示すように32bit×8wordの32Byteとしている。すなわち、画像データS0_IMG420からS3_IMG423の格納容量は32Byteの整数倍となる。
次に、画像データの構造について詳細に説明する。画像データ430は、第1色K(Black)の画像データ(S0_IMG420)を示しており、32M×Nbitのサイズからなる。画像データ430は32Byte単位の領域データからなり、各領域(例えば領域432)は、434で示すように、複数個(この例では8個)の32bit長がパッキングされている。そして、1つの32bit長データには、436で示すようにそれぞれ8bit長のK(Black)の色要素が複数個(この例では4つ)パッキングされている。残りの第2色M〜第4色Yまでの画像データについても、同様の構造からなる。
●画像データの入出力方法
以下、第8実施形態における、グローバルバッファから画像入出力部152への、または画像入出力部152からRAM106への画像データの入出力方法について、第6実施形態と同様に図2を用いて詳細に説明する。第8実施形態では、図4Bに示す面順次形式の画像データを処理する場合、第1色Kから第4色Yの4種の画像データについて、第6実施形態で説明した小領域(処理単位)ごとにグローバルバッファから読み出す。例えば、図2に示す小領域(1)211に対応する画像データついては、DMAC194の先頭アドレスとして、図4Bに示す以下の4種のアドレスを順に切り替えて設定し、DMA転送を4回実行する。これにより、第1色K〜第4色Yの色ごとにDMA転送が行われる。
・先頭アドレス[1回目]:S0_IMG_STR_ADDR
・先頭アドレス[2回目]:S1_IMG_STR_ADDR
・先頭アドレス[3回目]:S2_IMG_STR_ADDR
・先頭アドレス[4回目]:S3_IMG_STR_ADDR
そして、上記4種のアドレスに従って読み出した4種(4色)の画像データの全てを、一旦、中間バッファ232へ格納する。そして、4種の画像データの所定位置(座標)における4つの色要素を読み出し、これらを1つにまとめて点順次形式の画素値(C,M,Y,K)として、画像処理実行部153へ入力すればよい。また、画像処理実行部153による処理後の点順次形式の画素値(C,M,Y,K)から4つの色要素を取り出し、出力領域内の4種の出力画像データの領域に各々格納する。当然ながら、出力画像データのグローバルバッファへの書き出しについても、4回のDMA転送が必要となる。
そのため、共有メモリ180に記憶するDMA情報も4個必要となる。そして画像入出力部152には、テーブル数Ch=4と、それに対応する4このテーブル番号T[0,1,・・・,3]が適切に設定される。
●ラインポインタ管理機能
第8実施形態では、グローバルバッファに対する画像データの入出力の際に、面順次形式の画像データに応じた面数分、すなわち4回のDMA転送が必要となることから、上述した第6および第7実施形態の処理手順に対してDMA動作の回数が変わる。
以下、図11を用いて、第8実施形態において面順次形式の画像データを処理する際の、ラインポインタ管理と伴うデータ転送処理について説明する。図11は、第7実施形態において図11に示した処理手順に対し、面順次形式の画像データを扱う第8実施形態に特有の処理(S1138,S1139)を加えたものである。以下では、第7実施形態からの変更点のみを説明し、第6および第7実施形態と同様の処理については説明を省略する。
図11において、小領域単位のDMA動作(S1136)の後、面順次形式の面数(色数)に応じた回数(以下、DMA面数)分のDMA動作を行う(S1138)。上記の例では4種(4色)の画像データであるため、DMA動作が4回未満のときは(S1138のNO)、所定の回数が完了するまでDMA動作を繰り返し、DMA動作を4回行えばDMA動作を完了とする(S1138のYES)。
なお、ポインタ管理部1542,1544は予め、DMA面数分のラインポインタを備えており、1バンド分の小領域の処理完了に伴い、DMA面数分のラインポインタを更新する(S1139)。
以上説明したように第8実施形態では、入力/出力画像データの面数に対応したラインポインタ管理機能を備えるため、様々な画像データの形式に対応して柔軟に画像処理を実現することができる。
前述の第6〜第8実施形態において、画像処理のデータフローの制御点(同期点)においてデータ取得コマンドを同期コマンドとして設置している。そして画像処理の制御点(同期点)において、必要なDMA情報をリロードして画像処理を実行し、画像処理の完了後に処理結果を反映したDMA情報をリストアする。このようなデータフローの制御点(同期点)を起点としてDMA転送を制御することにより、点順次、面順次、リングバッファ、同時両面や複数面などの多彩な画像処理を柔軟に処理できる。先行技術では、予め定まったDMA転送パターンを定義し、その都度、DMA転送を細切れに起動して画像処理をDMA転送の処理単位で実行していた。実施形態では、画像処理の制御点(同期点)毎にDMA情報の値が更新されており、一連の画像処理そのものは連続動作している。
また、先の第1〜第4実施形態で示したCPU102との外部同期のし方を第6〜第8実施形態に応用することもできる。
つまり、第6〜第8実施形態のデータフローの制御点(同期点)であるデータ取得コマンドをトリガとしてCPU102が共有メモリのDMA情報を読み書きする。その結果、CPU102が自身のソフトウェアと連動してDMA情報を書き換えて、画像処理のDMA転送の読み先をCPU102の処理結果に応じて切り替えたりできる。またCPU102がDMA情報を読み出し、ラインポインタの値から画像処理の実行の進捗を監視することも可能である。
<<その他の実施形態>>
上述した第1〜第8実施形態を応用することによって、さらに多種多様な画像処理に対応することができる。
(画像形式と同期手法について)図4Aのような点順次の画像形式でも、図4Bのような面順次の画像形式でも、データ取得コマンドに対応する画像データのDMA転送の回数が変わるだけである。そして同期方法では、これらの変更に柔軟に対応できる。一般的な画像処理装置ではDMA転送を起点に外部(CPU、スキャナや映像の入力装置)と同期するため、画像形式によってDMA転送の回数が変化すると、外部(CPU、スキャナや映像の入力装置)との制御のし方を変更する必要がある。同期方法では、画像形式の変更による制御変更の影響を軽減できる。
(その他のDMA転送単位について)また画像処理装置を高速化するため、画像処理部に大容量のバッファを設け、1回の画像データのDMA転送単位を大きくする必要がある。同期手法では、またDMA転送を起点に外部(CPU、スキャナや映像の入力装置)と同期するわけではないので、制御点(同期点)は転送単位によらない。その結果、同期方法では、1回のDMA転送単位の変更に柔軟に対応することができる。
また、映像処理などで使用されるIP変換なども、適用対象となる。IP変換とは、副走査方向に画素が間引かれたインターレース画像を、時間軸方向に複数フレームを用いて1フレームの画素が間引かれていないプログレッシブ画像を合成する処理である。例えば、2フレームのインターレース画像から1フレームのプログレッシブ画像を合成する場合、入力画像の総画素数と出力画像の画素数は同じとなる。しかしながら高品位なIP変換では、3〜5フレームのインターレース画像から1フレームのプログレッシブ画像を合成することになるので、入力画像より出力画像の方が画素数は少なくなる。例えばIP変換では、ユーザが選択した動作モード(画質モード)により入力画像と出力画像の画素数の関係が変わるため、入力画像データのDMA面数をインターレース画像のフレーム数とし、出力画像データのDMA面数を1フレームとすればよい。つまり、第6実施形態と第8実施形態とを組み合わせることで対応することができる。
上述したように近年の画像処理装置は、空間フィルタ処理、解像度変換、トリミング処理、端部拡張処理、IP変換を含め、様々な画像処理を内包する。そして画像処理装置は、装置全体で所望の高画質化を実現するために、それら画像処理をアプリケーションに応じて取捨選択し、組み合せて用いることが多い。このような画像処理装置において実施形態の手法を用いることで、入力画像データのラインポインタの変更量(遷移量)を一定にしつつ、出力画像データのDMAC情報については処理後の画像データの大きさに追従して自動設定(変更)できる。そして入力画像と出力画像のDMAC情報を共有メモリに必要な数だけ記憶し、必要なタイミングでリロード/リストアすることで、複数の画像処理を同時に実現できる。
先の例では、表面、裏面を交互に画像処理するような説明をしたが、必要なDMA情報を、適切にリロード/リストアできるなら、画像処理は交互である必要はない。複数の画像処理を任意の順番に必要なだけ画像処理し、途中経過を一時記憶して、再開することを容易に実現できる画像処理装置である。そして、これらの多種多様な画像処理はコマンドリスト(ディスプレイリスト)を書き換えるだけで制御できるのである。その結果、様々な画像処理を組み合せて実行する場合でも、本発明を適用することで、分割された領域ごとにDMAC情報を設定し、DMACを起動し、DMACと同期(待ち合わせ)するCPU102の負荷を軽減できる。
また、上述した第6〜第8実施形態では、画像データに対する領域分割手法として、バンド処理を行う場合を例として説明した。本発明は、他の領域分割手法であるブロック(タイル)処理についても、同様に適用可能である。ブロック処理では、主走査方向と副走査方向に沿って画像データを2次元でタイル領域に分割する。上記各実施形態における小領域(処理単位)が、この2次元分割されたタイル領域に相当し、複数の小領域を順次読み出す手法はブロック処理そのものである。そして、上記各実施形態では、ラインポインタやリングバッファの閾値(下端ライン位置)をバンド高さ方向に沿って備える例を示したが、さらに、バンド長さ方向に沿ったカラムポインタとリングバッファの閾値(例えば右端位置)を備える。そして、1次元的なポインタ管理を2次元的に拡張することで、本発明の手法をバンド処理からタイル処理に拡張することができる。
また、上記各実施形態では画像データの読み書きの単位を32Byteとして説明した。グローバルバッファの構成や、グローバルバッファを実現する記憶装置(DRAM、フラッシュROM、ハードディスク、SSD等)の種類、そして実行する画像処理の種類等によって、この単位は変更可能である。読み書きの単位が変わったとしても、画像データを記憶するローカルバッファ(中間バッファ232)に記憶される画素数が変わるだけであるため、本発明はそのまま適用可能である。
また、画像データにおける32Byte単位のデータ構造を、画像入力部1521と画像出力部1523とで、異なる画像形式として組み合せてもよい。例えば、画像入力部1521と画像出力部1523は、点順次形式(図4A)と面順次形式(図4B)の所望の組合せにおいて動作できる。
以上では、データフローの制御点(同期点)を指示するデータ取得コマンドにより、共有メモリ(第2の共有メモリ手段)のDMA情報を切り替えることについて説明したが、上記以外にも応用することが可能である。例えば、共有メモリ(第2の共有メモリ手段)をパラメータバッファとして考え、CPU102が共有メモリに画像処理のパラメータを保持し、データフローの制御点(同期点)を指示するレジスタ取得コマンドで、共有メモリのパラメータを読み出し、レジスタライトコマンドを生成して画像処理回路の設定値を変更する。また共有メモリのパラメータからデータ取得コマンドで特定のデータ処理コマンドを生成したり、共有メモリのパラメータからJumpコマンドの分岐先や強制的に分岐の実行を抑制したり、待機コマンドの待機条件を変更したりできる。これらの応用により、データフローの制御点(同期点)で、コマンドに従い、共有メモリに保持されたコンテキスト(DMA情報、画像処理パラメータ、分岐先アドレス、制御パラメータなど)を選択して動作やデータフロー制御を切り替えることが可能となる。
以上の実施形態により、設定したデータフローの制御点(同期点)に合わせて画像処理実行部の動的なクロック制御をすることができる。その結果、ファームウェアでは制御できない程の短い待機時間でさえ、画像処理実行部のクロックを一時的に停止し、画像処理の待機時間の消費電力を抑えることができる。そして、動的なクロック制御の際に、ファームウェアは介在しないので画像処理の速度を低下させることはない。
画像処理の前後で画像処理の設定(画素数、処理範囲、画像形式)が変動する場合でも、データ転送を効率化することができる。例えば、同時両面スキャンのように、裏と表で連続する分割領域の設定が関係なく切り替わるような場合にもデータ転送を効率化できる。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。