(57)【特許請求の範囲】
【請求項１】
複数の中間バッファ制御手段を備えるデータ制御装置であって、
前記中間バッファ制御手段は、
ＤＲＡＭから中間バッファへのデータ転送および前記中間バッファからデータ処理手段へのデータ転送を制御する入力手段と、
前記データ処理手段から前記中間バッファへのデータ転送および前記中間バッファから前記ＤＲＡＭへのデータ転送を制御する出力手段と、
前記入力手段および前記出力手段のバッファ状態情報を各々保持し、前記バッファ状態情報に応じて、前記入力手段および前記出力手段の動作を制御する同期実行手段とを備え、
前記同期実行手段は、
前記入力手段から実行完了通知を受け取ると、前記入力手段のバッファ状態情報を書込状態と設定し、
前記出力手段から実行完了通知を受け取ると、前記出力手段のバッファ状態情報を読出状態と設定し、
他の中間バッファ制御手段と中間バッファを共有する場合には、該他の中間バッファ制御手段の同期実行手段とバッファ状態情報を相互に送信し、
他の中間バッファ制御手段と中間バッファを共有しない場合には、前記入力手段のバッファ状態情報と前記出力手段のバッファ状態情報を相互に送信し、
同期信号によってそれぞれの同期実行手段のバッファ状態情報を更新する
ことを特徴とするデータ制御装置。
【請求項２】
前記入力手段は、前記中間バッファから前記データ処理手段へデータ転送する際、転送開始時に転送開始信号をデータに付加して前記データ処理手段に転送し、所定のデータ量の転送を終えたら転送終了信号をデータに付加して前記データ処理手段に転送し、
前記出力手段は、前記データ処理手段から前記中間バッファ制御手段へデータ転送する際、前記転送開始信号を受信してから前記転送終了信号を受信するまでの間に転送したデータ量から、受信データ量を算出して、前記受信データ量を前記同期実行手段に送信し、
前記同期実行手段は、前記受信データ量に基づいて、前記入力手段がアクセスするＤＲＡＭ上のアドレスを算出する
ことを特徴とする請求項１に記載のデータ制御装置。
【請求項３】
第１の中間バッファ制御手段が、第２の中間バッファ制御手段と中間バッファを共有し、
前記第２の中間バッファ制御手段の同期実行手段は、前記第１の中間バッファ制御手段の出力手段が算出した前記受信データ量に基づいて、前記第２の中間バッファ制御手段の入力手段がアクセスするＤＲＡＭ上のアドレスを算出する
ことを特徴とする請求項２に記載のデータ制御装置。
【請求項４】
前記入力手段が転送するデータ量として、画像データの主走査方向の画素数および副走査方向の画素数が設定され、
前記画像データの転送開始時には前記画像データに転送開始信号とラインスタート信号が付加され、
前記画像データの転送終了時には前記画像データに転送終了信号とラインエンド信号が付加され、
前記画像データの副走査方向における１画素目のデータ転送が行われる際にはラインスタート信号が付加され、
前記画像データの副走査方向における最終画素のデータ転送が行われる際にはラインエンド信号が付加されて、前記データ処理部に転送され、
前記出力手段は前記データ処理手段から転送されるデータに付加された前記ラインスタート信号を検知してから前記ラインエンド信号を検知するまでの画素数を前記受信データ量とする
ことを特徴とする請求項３に記載のデータ制御装置。
【請求項５】
スキャン処理に関わる第１のデータ処理手段とプリント処理に関わる第２のデータ処理手段とを備え、
前記第１の中間バッファ制御手段が第１のデータ処理手段に関わるデータ転送を制御し、
前記第２の中間バッファ制御手段が第２のデータ処理手段に関わるデータ転送を制御する
ことを特徴とする請求項４に記載のデータ制御装置。
【請求項６】
複数の中間バッファ制御手段を備えるデータ制御装置の制御方法であって、
前記中間バッファ制御手段は、
ＤＲＡＭから中間バッファへのデータ転送および前記中間バッファからデータ処理手段へのデータ転送を制御する入力手段と、
前記データ処理手段から前記中間バッファへのデータ転送および前記中間バッファから前記ＤＲＡＭへのデータ転送を制御する出力手段と、
前記入力手段および前記出力手段のバッファ状態情報を各々保持し、前記バッファ状態情報に応じて、前記入力手段および前記出力手段の動作を制御する同期実行手段とを備え、
前記同期実行手段は、
前記入力手段から実行完了通知を受け取ると、前記入力手段のバッファ状態情報を書込状態と設定し、
前記出力手段から実行完了通知を受け取ると、前記出力手段のバッファ状態情報を読出状態と設定し、
他の中間バッファ制御手段と中間バッファを共有する場合には、該他の中間バッファ制御手段の同期実行手段とバッファ状態情報を相互に送信し、
他の中間バッファ制御手段と中間バッファを共有しない場合には、前記入力手段のバッファ状態情報と前記出力手段のバッファ状態情報を相互に送信し、
同期信号によってそれぞれの同期実行手段のバッファ状態情報を更新する
ことを特徴とするデータ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置及びその制御方法に関し、特に、データ処理部へ供給するデータを保持するバッファを、複数のデータ処理部で共有する場合のデータ制御装置、制御方法に関する。
【背景技術】
【０００２】
システムバスにＣＰＵ(Central Processing Unit)、ＤＲＡＭ(Random Access Memory)、データ処理部など様々なモジューが接続されている場合、システムバス上のデータ通信が多くなると、システムバスの帯域が圧迫され、スムーズなデータ通信を阻害してしまう。そこで、例えばシングルコアプロセッサではキャッシュメモリにＤＲＡＭ上のデータを移し、キャッシュメモリとコアの間でデータ通信することでＤＲＡＭとコアの間で行われるデータ通信を低減している。しかし、複数のシングルコアプロセッサがキャッシュ上のデータを共有するにはＤＲＡＭを介して通信する必要がある。
【０００３】
このため、複数のコア間でデータを共有する場合には、ＤＲＡＭとの通信が肥大化してシステムバスの帯域を圧迫してしまう。そこで、マルチコアプロセッサのように複数のコアでキャッシュメモリのデータを共有するコヒーレンシ制御を行い、システムバス上でのデータ通信を低減するといった方法が開発されている（特許文献１）。また、特許文献２に示されるＣＥＬＬプロセッサでもシステムバスとのデータ通信を低減する施策がなされている。
【０００４】
ＣＥＬＬプロセッサは演算部とＬＳ(Local Store)を持つＳＰＥ(Synergistic Processor Element)を複数搭載し、これらはＳＰＥ間で高速なデータ通信を行うＥＩＢ(Element Interconnect Bus)で接続されている。また、ＳＰＥがＤＲＡＭとデータ通信する場合はＥＩＢに接続されるＭＩＣ(Memory Interface Controller)からシステムバスを介して行われる。このような構成であることから、あるＳＰＥのＬＳに保持されているデータを他のＳＰＥのＬＳに受け渡す場合は、ＥＩＢを介して行われる。つまり、ＳＰＥ間ではシステムバスとは独立した高速データ通信バスのＥＩＢが用いられるため、システムバス上のデータ通信を低減する事が出来る。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第３３７８２７０号公報
【特許文献２】特許第４７１９６５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、マルチコアプロセッサではコヒーレンシ制御を行う際、コヒーレンシ制御に数クロックサイクルの制御が必要となり、データ共有のオーバーヘッドとなり得た。また、ＣＥＬＬプロセッサではあるＳＰＥのＬＳで保持しているデータを他のＳＰＥが参照するには、ＥＩＢを介したデータ通信が必要となるため、データ通信制御に多くのクロックサイクルを消費していた。
本発明は、上記のような課題を鑑みて、ローカルメモリを持つ系を複数搭載するシステムでも簡易な構成で高速なデータ共有を行うバッファの制御方法及び制御装置を提供する。
【課題を解決するための手段】
【０００７】
複数の中間バッファ制御手段を備えるデータ制御装置であって、
前記中間バッファ制御手段は、
ＤＲＡＭから中間バッファへのデータ転送および前記中間バッファからデータ処理手段へのデータ転送を制御する入力手段と、
前記データ処理手段から前記中間バッファへのデータ転送および前記中間バッファから前記ＤＲＡＭへのデータ転送を制御する出力手段と、
前記入力手段および前記出力手段のバッファ状態情報を各々保持し、前記バッファ状態情報に応じて、前記入力手段および前記出力手段の動作を制御する同期実行手段とを備え、
前記同期実行手段は、
前記入力手段から実行完了通知を受け取ると、前記入力手段のバッファ状態情報を書込状態と設定し、
前記出力手段から実行完了通知を受け取ると、前記出力手段のバッファ状態情報を読出状態と設定し、
他の中間バッファ制御手段と中間バッファを共有する場合には、該他の中間バッファ制御手段の同期実行手段とバッファ状態情報を相互に送信し、
他の中間バッファ制御手段と中間バッファを共有しない場合には、前記入力手段のバッファ状態情報と前記出力手段のバッファ状態情報を相互に送信し、
同期信号によってそれぞれの同期実行手段のバッファ状態情報を更新する。
【発明の効果】
【０００８】
複数の中間バッファ制御部にて、中間バッファの状態情報を保持し、中間バッファ状態情報の書込状態信号と読出状態信号、同期信号を各中間バッファ制御部で相互に通信し、同期信号を相互に受信したタイミングで中間バッファ状態情報を更新する。これにより、簡易な構成で複数の中間バッファ制御部で１つの中間バッファを共有でき、高速なデータ共有が可能となる。
【図面の簡単な説明】
【０００９】
【図１】本発明における実施例の画像処理装置を示すブロック図である。
【図２】画像データの説明図である。
【図３】画像処理部の詳細な構成を示すブロック図である。
【図４】画像入力部と画像出力部の詳細な構成を示すブロック図である。
【図５】同期実行部の詳細な構成を示すブロック図である。
【図６】同期実行のフローチャートである。
【図７】入力制御のフローチャートである。
【図８】出力制御のフローチャートである。
【図９Ａ】実施例１において中間バッファを共有した場合の動作を示す図である。
【図９Ｂ】実施例１において中間バッファを共有した場合の動作を示す図である。
【図１０Ａ】実施例２において中間バッファを共有した場合の動作を示す図である。
【図１０Ｂ】実施例２において中間バッファを共有した場合の動作を示す図である。
【図１０Ｃ】実施例２において中間バッファを共有した場合の動作を示す図である。
【図１１】実施例３における同期実行部の詳細な構成を示す図である。
【図１２】実施例３における同期実行のフローチャートである。
【図１３】実施例３における入力制御のフローチャートである。
【図１４】実施例３における出力制御のフローチャートである。
【図１５】出力画像が入力画像に比べて画素数が減少する場合に関する図である。
【図１６】複数の中間バッファが並列動作する場合の効果を説明する図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照して本発明の実施形態を説明する。ただし、本発明は以下の実施形態に限定されるものではない。
＜実施例１＞
（画像処理装置）
図１は、本発明の第１の実施形態における画像処理装置の一構成例を示すブロック図である。画像処理装置１００は、システム制御部１１０、スキャナ制御部１２０、画像処理部１３０、プリンタ制御部１４０からなる。
システム制御部１１０は、画像処理装置のシステムバス１７０に接続された各モジュールを制御するＣＰＵ１１１、画像データや各モジュールの設定値など、一時的なデータを保持するＤＲＡＭ１１２、後述する制御用のプログラムを保持するＲＯＭ１１３からなる。
【００１１】
スキャナ制御部１２０は接続されているスキャナ１２１を制御し、得られた画像データをＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送にてＤＲＡＭ１１２に書き出すモジュールである。ＣＰＵ１１１からスキャン開始命令を受けると、スキャナ１２１を起動し、読み取り媒体をスキャンする。スキャナ１２１はスキャンによってＣＣＤセンサなどから得られたアナログ画像信号に対してアナログ／デジタル変換を行い、デジタル画像データ（以下、画像データと記載する。）を生成する。この画像データをスキャナ制御部１２０が受信し、ＤＭＡ転送によってＤＲＡＭ１１２に書き出す。以上のスキャン処理を終えたら、スキャン終了信号をＣＰＵ１１１や画像処理部１３０に送信する。
【００１２】
プリンタ制御部１４０は接続されているプリンタ１４１を制御し、ＤＲＡＭ上の画像データを印刷媒体に記録させるモジュールである。ＣＰＵ１１１からプリント開始命令を受けると、ＤＭＡ転送でＤＲＡＭ１１２からプリント用の画像データを取り出し、プリンタ１４１を起動する。そして、プリンタ１４１が備えるプリントヘッダなどからインクを吐出し、印刷媒体に画像を記録する。以上のプリント処理を終えたらプリント終了信号をＣＰＵ１１１に送信する。
【００１３】
ここで、扱う画像データはＵＳＢメモリやフラッシュカードなどから読み書きされてもよく、図１のようにシステムバス１７０にＵＳＢ制御部１５０やメディア制御部１６０を接続しておき、こちらから画像データをＤＲＡＭ１１２に転送しても良い。いずれにしても、これらのモジュールは色々な形で実現できることは明らかで、図示している構成に限定されるものではない。
【００１４】
画像処理部１３０は本発明の特徴である中間バッファの制御を含む画像処理制御部１３１とスキャナ用画像処理回路群１３２、プリンタ用画像処理回路群１３３で構成されるデータ制御装置である。画像処理部１３０は、ＣＰＵ１１１から画像処理実行開始の命令を受けると、画像処理制御部１３１がＤＭＡ転送によってＤＲＡＭ上の画像データの一部を取得し、後に説明する中間バッファに書きこむ。そして、中間バッファで保持しているデータをスキャナ用画像処理回路群１３２やプリンタ用画像処理回路群１３３に転送して画像処理を実行する。その後、中間バッファに画像処理結果を書き出し、ＤＭＡ転送にて中間バッファに保持されている画像処理結果をＤＲＡＭ１１２に書き戻す。以上の操作を、画像データ全体に適用する事で画像処理を完了する。
【００１５】
ここで、一例としてスキャン処理とプリント処理を連続して実行する際の画像処理装置の動作を簡単に説明する。説明を簡単にするため、ＤＲＡＭ、中間バッファは画像データを保持できるだけ容量があるものとする。まず、ＣＰＵ１１１はＲＯＭ１１３からプログラムを読み出し、実行を開始する。ＣＰＵ１１１はプログラムに従って、スキャナ制御部１２０、画像処理部１３０、プリンタ制御部１４０の設定を行う。
【００１６】
その後、スキャナ制御部１２０を起動し、スキャンした画像データをＤＲＡＭ１１２に書き込む。その後、画像処理部１３０を起動し、ＤＲＡＭ１１２に保持されている画像データに対して適切な画像処理を行わせて、処理結果をＤＲＡＭ１１２に書き出す。最後に、プリンタ制御部１４０を起動し、画像処理されたＤＲＡＭ上の画像データを読み出し、印刷する。
【００１７】
以上のようにしてスキャン処理、プリント処理を実行する。また、システム制御部１１０はプログラムに従って各モジュールを制御するもので、適切なプログラムを用いることで種々の処理を実現する事が出来るものである。
続けて、ＤＲＡＭ１１２や中間バッファの容量が画像データ２００の全体を保持できない容量における動作について説明する。ＤＲＡＭ１１２や中間バッファの容量が少ない場合は、画像データを分割して画像処理を行う。
【００１８】
（バンド処理）
家庭用プリンタのように安価に提供しなければならない機器では、ハードウェアのコストを抑えるため、１枚のデジタル画像データ全体を記憶できるだけの容量のメモリを実装できない場合がある。そのため、１枚のデジタル画像データを複数の短冊状のバンド領域に分割し、逐次的にバンド領域のみをメモリ（以下、バンドメモリと称する）に展開して各種の画像処理を施す、いわゆるバンド処理が行われることがある。
【００１９】
ここでは、ＤＲＡＭは図２に示すバンド領域２１０の全体を保持することができるだけの容量を持つが、中間バッファの容量はバンド領域の一部しか保持できない容量である場合の動作について説明する。
まず、前述と同様にＣＰＵ１１１はＲＯＭ１１３からプログラムを読み出し、スキャナ制御部１２０、画像処理部１３０、プリンタ制御部１４０の設定を行う。その後、スキャナ制御部１２０を起動し、画像データの一部分であるバンド領域２１０をスキャンしてＤＲＡＭ１１２に書き込む。
【００２０】
その後、画像処理部１３０を起動し、バンド領域２１０に対して画像処理を行う。ただし、画像処理部１３０の中間バッファはバンド領域の一部を保持できるだけの容量しか持たないため、バンド領域２１０をバンド分割領域Ａ２３０、バンド分割領域Ｂ２３１及びバンド分割領域Ｃ２３２の３つに分割して画像処理を適用する。（図２（ｈ）〜（ｊ））
【００２１】
まず、画像処理部１３０はバンド分割領域Ａ２３０をＤＲＡＭ１１２から読み出し、画像処理を適用した画像データをＤＲＡＭ１１２に書き出す。
続けて、画像処理部１３０は次のバンド分割領域Ｂ２３１をＤＲＡＭ１１２から読み出し、画像処理を適用した画像データをＤＲＡＭ１１２に書き出す。
これを繰り返すことでバンド領域２１０に対する画像処理を完了する。
その後、プリンタ制御部１４０を起動し、ＤＲＡＭ上の画像処理されたバンド領域を読み出し、印刷する。
【００２２】
このようにしてバンド領域２１０（図２（ａ））の処理が終わったら、続けてバンド領域２１１（図２（ｂ））をスキャナで読み込み、バンド領域２１０の処理と同様にバンド領域２１１を分割して画像処理を行う。
以上の処理を繰り返し、画像全体に適用する事で、ＤＲＡＭ１１２や中間バッファの容量が画像データ２００の全体を保持できない容量の場合でも、画像２００全体に対して画像処理を適用する事が出来る。
【００２３】
（画像処理部）
次に図３を用いて画像処理部１３０の詳細を説明する。
画像処理部１３０は、上述の通り、画像処理制御部１３１と、スキャナ用画像処理回路群１３２と、プリンタ用画像処理回路群１３３とからなるデータ制御装置である。スキャナ用画像処理回路群１３２と、プリンタ用画像処理回路群１３３とは、データ処理部としての役割を担う。
【００２４】
スキャナ用画像処理回路群１３２は、接続するスキャナ１２１ごとのＣＣＤセンサ特性を補正するためのガンマ変換や、スキャン時のノイズを除去するフィルタ等の画像処理回路１３２−１〜１３２−ｎを含む。スキャナ用画像処理回路群１３２は、中間バッファ制御部ａ３２０と接続され、スキャン処理実行時には中間バッファ制御部ａ３２０から、各画像処理回路に画像データが入力され、各画像処理回路で演算した結果を中間バッファ制御部ａ３２０に出力する。
【００２５】
プリンタ用画像処理回路群１３３は、画像データを印刷用インクの色空間に変換する色空間変換や、多階調の画像データを低階調で表現する形に変換するハーフトーン処理などの画像処理回路１３３−１〜１３３−ｎを含む。プリンタ用画像処理回路群１３３は、中間バッファ制御部ｂ３３０と接続され、プリント処理実行時にはスキャナ用画像処理回路群と同様に、中間バッファ制御部ｂ３３０と設定コマンドや画像データの入出力を行う。
【００２６】
画像処理制御部１３１は、内蔵する中間バッファを介して、ＤＲＡＭ１１２と画像処理回路間のデータ通信を制御する回路である。画像処理制御部１３１は、ＤＭＡコントローラ３１０と、中間バッファ制御部ａ３２０と、中間バッファ制御部ｂ３３０と、中間バッファ群３４０とで構成される。
【００２７】
ＤＭＡコントローラ３１０は、中間バッファ制御部ａ、ｂからのリクエストに応じてＤＲＡＭ上のデータを中間バッファに書き込む操作と、中間バッファのデータをＤＲＡＭ１１２に書き出す操作をＤＭＡ転送で行う。ＤＲＡＭ上のどのアドレスにアクセスするか、どの中間バッファにアクセスするかは、中間バッファ制御部ａ、ｂからのリクエストで指定される。
【００２８】
中間バッファ群３４０は、画像データを一時的に保持する複数の中間バッファ３４２−１〜３４２−４と、各バッファへのアクセスリクエストを調停し、アクセス結果をリクエスト発行元へ送信するアービタ３４１とから構成される。
アービタ３４１は、中間バッファ３４２と、中間バッファ３４２へのリクエストを発行するＤＭＡコントローラ３１０と、中間バッファ制御部ａ３２０と、中間バッファ制御部ｂ３３０とに接続される。アービタ３４１はリクエスト発行元からの中間バッファ３４２への書き込み、読み出しリクエストを調停し、実行する。具体的には、複数のモジュールから同時に同じバッファへのアクセス要求があった場合には、優先順位の高いモジュールのアクセスから先に実行して行くといった調停を行う。ただし、調停方法についてはこれを限定するものではない。
【００２９】
中間バッファ制御部ａ３２０は、ＤＲＡＭ１１２と中間バッファとの間の通信、中間バッファ３４２と画像処理回路との間の通信を制御するモジュールである。中間バッファ制御部ａ３２０は、画像入力部３２１と画像出力部３２２と、これらの設定、実行管理を行う同期実行部３３３とから構成される。また、中間バッファ制御部ｂ３３０も同様の構成、動作であるため、以下、中間バッファ制御部ａ３２０を主として説明する。
【００３０】
（画像入力部）
画像入力部３２１は、同期実行部３２３の命令に応じて、中間バッファを操作するリクエストを発行するモジュールである。リクエストには２種類あり、１つはＤＲＡＭ１１２から画像データを取得して中間バッファ３４２へ書き込むリクエストで、ＤＭＡコントローラ３１０に発行するものである。もう一つは、中間バッファ３４２に保持されている画像データを読み出し、画像処理回路１３２に送信するリクエストで、中間バッファ群３４０に発行するものである。
【００３１】
図４（ａ）を用いて画像入力部３２１の詳細について説明する。
画像入力部３２１はＤＭＡ受信部４１１とパケット送信部４１２で構成される。
【００３２】
ＤＭＡ受信部４１１は、ＤＭＡコントローラ３１０へ発行するリクエストの制御を行う。画像処理時には、同期実行部３２３からＤＲＡＭ上の画像データが置かれているアドレスや、どの中間バッファを利用するかが設定される。その後、同期実行部３２３から実行開始命令を受信すると、設定されたＤＲＡＭ１１２のアドレス領域から所定量の画像データを取得し、中間バッファ３４２へ書き込むようＤＭＡコントローラ３１０にリクエストを発行する。ＤＭＡコントローラ３１０からリクエストの実行完了を通知されたら、同期実行部３２３へ実行完了を通知する。
【００３３】
（パケット送信部）
パケット送信部４１２は、中間バッファ群３４０に発行するリクエストと、画像処理回路１３２へのデータ出力を制御するモジュールである。画像処理時には、同期実行部３２３からどのバッファを利用するか、扱う画像フォーマットや画像サイズが設定される。その後、同期実行部３２３からの実行開始命令を受信すると、設定されたいずれかの中間バッファ３４２から画像フォーマットに合わせてデータを取り出すようリクエストを生成し、中間バッファ群３４０に発行する。
【００３４】
同時に中間バッファ群３４０から読み出した画像データに対して、同期実行部３２３から設定された画像サイズに合わせて画素位置を特定するための情報を付加したパケットデータを生成し、画像処理部１３２に送信する。送信を完了したら、同期実行部３２３へ実行完了を通知する。
ここで、パケット送信部４１２が画像データに付加する画素位置を特定するための情報について図２を用いて説明する。
【００３５】
図２（ｋ）は、パケット送信部４１２が画像処理部１３２に送信する画像データ２４０を示している。パケット送信部４１２は転送するデータ量として同期実行部３２３から主走査方向にｖ画素、副走査方向にｈ画素の画像データを扱うように設定される。パケット送信部４１２は画素２４０−１から副走査方向順に画素データを送信する。ｈ画素目を送信したら主走査方向に１画素移動し、副走査方向に１画素目から順に送信する。
【００３６】
転送開始時、１画素目の画素２４０−１のデータを転送する際には、画素位置を特定するための情報として、転送開始信号とラインスタート信号を付加する。
転送終了時、最後の画素２４０−ｎのデータを送信する際には、転送終了信号とラインエンド信号を付加する。
また、副走査方向に見たときに１画素目となる画素のデータを送信する際には、ラインスタート信号のみ付加する。
副走査方向に見た時に最終画素となるｈ画素目の画素のデータを送信する際には、ラインエンド信号のみ付加する。
画素位置を特定するためのこれらの信号は画像処理回路、画像出力部３２２で利用され、画像出力部３２２では画像処理後の画像データのサイズを算出する際に用いる。
【００３７】
（画像出力部）
画像出力部３２２は同期実行部３２３の命令に応じて、中間バッファを操作するリクエストを発行するモジュールである。リクエストには２種類あり、１つは画像処理回路１３２で処理した画像データを受信し、中間バッファ３４２に書き出すリクエストを中間バッファ群３４０に発行するものである。もう一つは、中間バッファ３４２に保持されている処理済みの画像データをＤＲＡＭ１１２に書き出すリクエストをＤＭＡコントローラ３１０に発行するものである。ここで、図４（ｂ）を用いて画像出力部３２２の詳細について説明する。
画像出力部３３２はパケット受信部４２２とＤＭＡ送信部４２１で構成されている。
【００３８】
（パケット受信部）
パケット受信部４２２は、画像処理回路１３２からの画像データを受信し、中間バッファ群３４０に発行するリクエストを制御するモジュールである。画像処理時には、同期実行部３２３から、どの中間バッファ３４２を利用するかといった設定や、扱う画像フォーマットが設定される。
【００３９】
その後、同期実行部３２３から実行開始命令を受信すると、画像処理部１３２からの画像データを受信し、設定された画像フォーマットに合わせて中間バッファ２４３にデータを書き込むようリクエストを生成し、中間バッファ群３４０に発行する。また、画像入力部３２１で付加された転送終了信号を受信したら、同期実行部３２３へ実行完了と出力画像サイズを通知する。ここで、出力画像サイズの算出方法と利用方法について図２を用いて説明する。
【００４０】
図２（ｌ）に示す画像データ２４０´は、図２（ｋ）に示す画像データ２４０を画像処理回路群で処理して得られた画像データであり、パケット受信部で受信される画像データを示している。画像データ２４０´は主走査方向にｖ´画素、副走査方向にｈ´画素の画像データである。パケット受信部４２２は、画素２４０−１´から副走査方向順に画素データ受信する。ｈ´画素目の画素を受信したら副走査方向に１画素移動し、主走査方向に１画素目から順に受信する。
【００４１】
パケット受信部４２２では副走査方向に１画素目の画素を受信する際、画像入力部で付加されたラインスタート信号を検知して、受信画素数のカウントを開始する。
続けて画素２４０−２´、２４０−３´を受信するごとに受信画素数をカウントアップする。
そして、主走査方向にｈ´画素目の画素を受信した際には画像入力部３２１によって付加したラインエンド信号を検知して受信画素数のカウントアップを終了する。
このようにして、パケット受信部４２２は、画像処理回路で処理されて得られた出力画像のサイズとして主走査方向の画素数ｈ´を算出する。
【００４２】
その後、この画素数ｈ´はパケット受信部４２２を含む画像出力部３２２から信号５１１３ａにて実行制御部５１０に送信される。そして、実行制御部５１０にてＤＭＡ受信部４１１が複数のバンド領域を連続して処理する際のＤＲＡＭ上のアドレスを算出する際の受信データ量として用いられる。算出したＤＲＡＭアドレスは実行制御部５１０から信号５１１にてＤＭＡ受信部４１１に設定される。
後で詳細に説明するが、スキャン処理とプリント処理を連続実行する際に、中間バッファ制御部ａ、ｂで中間バッファ３４２を共有する場合における出力画素数の利用方法について説明する。
まず、バンド領域に対して前段のスキャン処理を実行する。
その後、後段のプリント処理を担当する中間バッファ制御部ｂ３３０で出力画像の画素数ｈ´を算出する。
この画素数ｈ´を前段のスキャン処理を担当する中間バッファ制御部ａ３２０の信号線５１１３ｂで受信する。
中間バッファ制御部ａ３２０は、受信した値（画素数ｈ´）を用いて次に取得するバンド領域のＤＲＡＭ上のアドレスを算出する。
【００４３】
具体的には、図２（ｅ）に示すように、副走査方向にｈ画素のバンド領域２１０に対して画像処理をした結果、副走査方向にｈ´画素の出力画像データが得られたとする。この場合、実行制御部５１０は画像出力部４２２によって算出された画素数ｈ´を用いて、次に処理するバンド領域を算出して、バンド領域２２０からｈ´画素分副走査方向に移動したバンド領域２２１を取得するよう制御する。
この仕組みにより、画像処理回路の中にフィルタのように出力画像のサイズが変化する画像処理があった場合においても、画像処理部１３０内で自律的にＤＲＡＭ上のアドレス参照先を切り替えることによって、出力画像の連続性を確保することが出来る。つまり、出力画像の連続性を確保するために、処理するバンド領域を切り替えるごとにＣＰＵ１１１から、実行制御部５１０の設定を切り替える、という必要が無くなり、ＣＰＵ１１１の制御を待つことなく複数のバンド領域を連続して転送する事が可能となる。
この点について以下に詳しく説明する。
【００４４】
図１５（ａ）は、入力画像データ１５００と、画像処理部に入力される１つ目の入力バンド領域１５１１，２つ目の入力バンド領域１５２１を示す。
図１５（ｂ）は、画像処理部から出力される１つ目の出力バンド領域１５１２，２つ目の出力バンド領域１５２２を示す。
入力バンド領域１５１１（のデータ）が処理されて出力バンド領域１５１２（のデータ）が出力され、入力バンド領域１５２１が処理されて出力バンド領域１５２２が出力される。
また、入力バンド領域１５１１が入力されたら、次に入力バンド領域１５２１が入力される。
【００４５】
図１５（ａ）に示すように、入力バンド領域１５１１，１５２１の副走査方向の画素数はそれぞれｈであり、図１５（ｂ）に示すように、出力バンド領域１５１２，１５２２の副走査方向の画素数はそれぞれｈ´であるとする。
図１５（ａ）および（ｂ）に示すように、出力バンド領域１５１２は、入力バンド領域１５１１に比べて副走査方向に上下各｛（ｈ−ｈ´）／２｝画素、この例では１画素、小さいとする。
同様に、出力バンド領域１５２２も、入力バンド領域１５２１に比べて副走査方向に上下各｛（ｈ−ｈ´）／２｝画素、この例では１画素、小さいとする。
【００４６】
このような場合に、
図１５（ｂ）に示すように、出力バンド領域１５１２の下端の画素と出力バンド領域１５２２の上端の画素とが、隙間なく連続するようにするためには、
図１５（ａ）に示すように、入力バンド領域１５１１と入力バンド領域１５２１とを（ｈ−ｈ´）画素、この例では２画素、オーバーラップさせる必要がある。
【００４７】
また、出力画像データサイズの算出方法については上記に限らず、画像処理回路群で算出して実行制御部５１０に設定してもよいし、実行制御部５１０が各画像処理回路の設定を参照して、出力画像サイズを算出するという構成にしても良い。いずれにしても、出力画像データのサイズを同期制御部で自律的に算出する方法を備えていれば良い。
【００４８】
ＤＭＡ送信部４２１は、ＤＭＡコントローラ３１０へ発行するリクエストの制御を行う。画像処理時には、同期実行部３２３から処理した画像データを書きだすＤＲＡＭ上のアドレスや、どの中間バッファを利用するかが設定される。その後、同期実行部３２３からの実行開始命令を受信すると、設定された中間バッファ３４２から所定量の画像データを取得し、ＤＲＡＭ１１２に書き出すようＤＭＡコントローラ３１０にリクエストを発行する。ＤＭＡコントローラ３１０からリクエストの実行完了を通知されたら、同期実行部３２３へ実行完了を通知する。
【００４９】
（同期実行部）
同期実行部３２３は、中間バッファ３４２の管理と、画像入力部３２１及び画像出力部３２２の実行とを制御するモジュールである。同期実行部３２３には、ＣＰＵ１１１と、画像入力部３２１と、画像出力部３２２と、そして他の中間バッファ制御部３３０の同期実行部３３３とが接続される。
ＣＰＵ１１１とは、画像処理実行開始命令の受信と、画像処理実行終了信号の送信とを行う。
画像入力部３２１には、画像入力部が用いるバッファや、アクセスするＤＲＡＭ上のアドレス、画像データのサイズなどを設定するための信号と、画像入力部３２１の動作を制御するための信号とが接続される。
【００５０】
画像出力部３２２も同様に、画像出力部が用いるバッファや、アクセスするＤＲＡＭ上のアドレス、画像データのサイズなどを設定するための信号と、画像出力部３２２の動作を制御するための信号とが接続される。
また、他の中間バッファ制御部３３０には、複数の画像処理回路群で中間バッファを共有するためのバッファ状態情報を更新するための信号と、同期信号とが接続される。
【００５１】
図５を用いて同期実行部３２３の詳細な構成について説明する。
同期実行部３２３は、実行制御部５１０、入力制御部５２０、及び出力制御部５３０から構成される。
【００５２】
実行制御部５１０は、画像入力部３２１及び画像出力部３２２の設定と、入力制御部５２０及び出力制御部５３０の実行制御とを行うモジュールである。
画像入力部３２１の設定を信号５１１（ＤＭＡ受信部の設定）、５１２（パケット送信部の設定）にて行い、画像出力部３２２の設定を信号５１３（ＤＭＡ送信部の設定）、５１４（パケット受信部の設定）にて行う。
【００５３】
入力制御部への実行開始命令は、信号５１５にて送信し、入力制御部からの実行完了通知は信号５１６にて受信する。
出力制御部への実行開始命令は、信号５１７にて送信し、出力制御部からの実行完了通知は、信号５１８にて受信する。
また、ＣＰＵ１１１からの画像処理実行開始信号は信号５１９にて受信し、ＣＰＵ１１１への画像処理終了信号は信号５１１０より送信する。
【００５４】
図６を用いて実行制御部５１０の制御シーケンスを説明する。
Ｓ６０１にてＣＰＵからの画像処理開始の割り込みを待ち、検知するとＳ６０２に遷移する。
Ｓ６０２では入力制御部５２０と出力制御部５３０とに実行開始命令を発行し、Ｓ６０３に遷移する。
Ｓ６０３では入力側制御部５２０と出力側制御部５３０からの実行終了信号を待機し、両方の信号を受信したらＳ６０４に遷移する。
Ｓ６０４では入出力制御を終了し、ＣＰＵ１１１に画像処理終了の割り込みを通知する。
【００５５】
（入力制御部）
入力制御部５２０は、画像入力部３２１のＤＭＡ受信部４１１及びパケット送信部４１２の同期制御と、中間バッファ３４２の管理とを行うモジュールである。ＤＭＡ受信部４１１への実行開始命令は信号５２１にて送信し、ＤＭＡ受信部からの実行終了を信号５２２にて受信する。パケット送信部４１２への実行開始命令は信号５２３にて送信し、パケット送信部からの実行終了は信号５２４にて受信する。
【００５６】
他の中間バッファ制御部３３０と中間バッファ３４２を共有する場合には、信号５１１１にて中間バッファを共有するように設定がなされ、信号５２５にて送信する同期信号と、信号５２６にて受信する同期信号とを用いて同期制御を行う。
同時に、バッファ状態情報を書込状態にする更新情報を信号５２７にて他の中間バッファ制御部３３０へ送信し、バッファ状態情報を読出状態にする更新情報を信号５２８ｂにて他の中間バッファ制御部３３０から受信することでバッファ状態情報の同期も行う。
また、パケット送信部４１２で画像データやバンド領域の送信が完了した場合には、入力制御部５２０の実行を終了させるための信号を信号５２９にて受信する。
【００５７】
図７にて入力制御部の制御シーケンスを説明する。
Ｓ７０１にて実行制御部５１０から実行開始命令５１５を待ち、受信するとＳ７０２に遷移する。
Ｓ７０２にて他の中間バッファ制御部と中間バッファを共有しない設定であればＳ７０３−０に遷移し、共有する設定であればＳ７１０に遷移する。
Ｓ７０３−０では入力制御部５２０のバッファ状態保持部５２０ｂに保持されているバッファの状態情報を参照して、
空であれば信号５２１からＤＭＡ受信部４１１に対して実行開始命令を発行し、
フルであれば信号５２３からパケット送信部４１２に対して実行開始命令を発行し、Ｓ７０４−０に遷移する。
Ｓ７０４−０では実行開始命令を発行したモジュールからの実行終了通知を信号５２２、５２４で受信するまで待機し、終了信号を検知したら、Ｓ７０７−０に遷移する。
Ｓ７０７−０では、実行開始命令を発行したモジュールが用いた、バッファ状態保持部５２０ｂに保持されているバッファ状態情報を更新する。ＤＭＡ受信部４１１がバッファを更新した場合はバッファ状態情報の書込状態信号５２８をアサートしてバッファ状態保持部５２０ｂに保持されているバッファ状態情報をフルとする。パケット送信部４１２がバッファを更新した場合は読出状態信号５２７をアサートしてバッファ状態保持部５２０ｂに保持されているバッファ状態情報を空にする。そして、バッファ状態情報を更新したら、Ｓ７０８に遷移する。
Ｓ７０８では、画像入力部３２１からの処理終了信号５２９が送信されていなかったらＳ７０２に遷移し、送信されていたらＳ７０９に遷移する。
【００５８】
ここでＳ７１０に遷移した場合の説明に戻り、Ｓ７１０に遷移した場合は、入力制御部５２０のバッファ状態保持部５２０ｂに保持されているバッファ状態情報を参照し、フルであればＳ７０３−１に遷移し、空であればＳ７０５−２に遷移する。
Ｓ７０３−１に遷移した場合、入力制御部５２０はパケット送信部４１２に対して信号５２３から実行開始命令を発行し、Ｓ７０４−１に遷移する。
Ｓ７０４−1ではパケット送信部４１２の実行終了信号を信号５２４で受信するまで待機し、終了信号を検知したらＳ７０５−１に遷移する。
Ｓ７０５−１では他の中間バッファ制御部３３０との同期信号５２５とバッファの読出状態信号５２７をアサートし、Ｓ７０６−１に遷移する。
【００５９】
ここで、Ｓ７０５−２に遷移した場合の説明に戻り、Ｓ７０５−２に遷移した場合、他の中間バッファ制御部３３０との同期信号５２５をアサートし、バッファの読出状態信号５２７をネゲートし、Ｓ７０６−１に遷移する。
【００６０】
Ｓ７０６−１では他の中間バッファ制御部３３３からの同期信号５２６を待ち、受信した場合はＳ７０７−１に遷移する。
Ｓ７０７−１では入力同期部５２０ａが発行した読出状態信号５２７と、他の中間バッファ制御部３３０から発行された書込状態信号５２８のうちアサートされている信号を用いてバッファ状態保持部５２０ｂに保持されているバッファ状態情報を更新する。バッファ状態情報を更新したらＳ７０８に遷移する。
Ｓ７０８では実行制御部５１０に信号５１６から実行完了通知を行い、入力制御を終了する。
【００６１】
（出力制御部）
出力制御部５３０は、画像出力部３２２のＤＭＡ送信部４２１及びパケット受信部４２２の同期制御と中間バッファの管理とを行うモジュールである。ＤＭＡ送信部４２１への実行開始命令は信号５３１にて送信し、ＤＭＡ送信部４２１からの実行終了を信号５３２にて受信する。パケット受信部４２２への実行開始命令は信号５３３にて送信し、パケット受信部４２２からの実行終了は信号５３４にて受信する。他の中間バッファ制御部３３０と中間バッファ３４２を共有する場合には、信号５１１２にて中間バッファを共有するように設定がなされ、信号５３６にて送信する同期信号と、信号５３５にて受信する同期信号を用いて同期制御を行う。
【００６２】
同時に、バッファ状態情報を書込状態にする更新情報を信号５３８にて送信し、バッファ状態情報を読出状態にする更新情報を信号５３７ａにて受信することでバッファ状態保持部５３０ｂに保持されているバッファ状態情報の同期も行う。また、パケット受信部４２２で画像データやバンド領域の受信が完了した場合には出力制御部５３０の実行を終了させるための信号を信号５３９にて受信する。この信号は他の中間バッファ制御部３３０と中間バッファ３４２を共有する場合には、他の中間バッファ制御部３３０の画像入力部５２９ｂの終了信号を選択して用いる。
【００６３】
図８を用いて出力制御部５３０の制御シーケンスを説明する。
Ｓ８０１にて実行制御部５１０から実行開始命令５１７を待ち、受信するとＳ８０２に遷移する。
Ｓ８０２にて他の中間バッファ制御部３３０と中間バッファ３４２を共有しない設定であればＳ８０３−０に遷移し、共有する設定であればＳ８１０に遷移する。
【００６４】
Ｓ８０３−０では出力制御部５３０のバッファ状態保持部５３０ｂに保持されているバッファの状態情報を参照し、
空であればパケット受信部４２２に対して信号５３３から実行開始命令を発行し、
フルであればＤＭＡ送信部４２１に対して信号５３１から実行開始命令を発行し、Ｓ８０４−０に遷移する。
【００６５】
Ｓ８０４−０では実行開始命令を発行したモジュールからの実行終了信号を信号５３２、５３４から受信するまで待機し、終了信号を検知したら、Ｓ８０７−０に遷移する。
【００６６】
Ｓ８０７−０では、実行開始命令を発行したモジュールが用いた、バッファ状態保持部５３０ｂに保持されているバッファ状態情報を更新する。
パケット受信部４２２がバッファを更新した場合は、書込状態信号５３８をアサートして、バッファ状態保持部５３０ｂに保持されているバッファ状態情報をフルとする。ＤＭＡ送信部４２１がバッファを更新した場合は、読出状態信号５３７ａをアサートしてバッファ状態保持部５３０ｂに保持されているバッファ状態情報を空にする。
そして、バッファ状態保持部５３０ｂに保持されているバッファ状態情報を更新したら、Ｓ８０８に遷移する。
【００６７】
Ｓ８０８では、パケット受信部４２２からの処理終了信号５３９ａが送信されていなかったらＳ８０２に遷移し、送信されていたらＳ８０９に遷移する。
【００６８】
ここでＳ８１０に遷移した場合の説明に戻り、Ｓ８１０に遷移した場合は、出力制御部５３０のバッファ状態保持部５３０ｂに保持されているバッファ状態情報を参照し、空であればＳ８０３−１に遷移し、フルであればＳ８０５−２に遷移する。
【００６９】
Ｓ８０３−１に遷移した場合、出力制御部５３０はパケット受信部４２２に対して信号５３３から実行開始命令を発行し、Ｓ８０４−１に遷移する。
Ｓ８０４−1ではパケット送信部４２２の実行終了信号を信号５３４で受信するまで待機し、終了信号を検知したらＳ８０５−１に遷移する。
Ｓ８０５−１では他の中間バッファ制御部３３０との同期信号５３６とバッファの書込状態信号５３８をアサートし、Ｓ８０６−１に遷移する。
【００７０】
ここで、Ｓ８０５−２に遷移した場合の説明に戻り、Ｓ８０５−２に遷移した場合、他の中間バッファ制御部３３０との同期信号５３６をアサートし、バッファの書込状態信号５３８をネゲートし、Ｓ８０６−１に遷移する。
【００７１】
Ｓ８０６−１では他の中間バッファ制御部３３０からの同期信号５３５を待ち、受信した場合はＳ８０７−１に遷移する。
Ｓ８０７−１では出力同期部５３０ａが発行した書込状態信号５３８と、他の中間バッファ制御部３３０から発行された読出状態信号５３７のうちアサートされている信号を用いてバッファ状態保持部５３０ｂに保持されているバッファ状態情報を更新する。バッファ状態保持部５３０ｂに保持されているバッファ状態情報を更新したらＳ８０８に遷移する。
Ｓ８０８では実行制御部５１０に信号５１８から実行完了通知を行い、出力制御を終了する。
【００７２】
図９を用いて、スキャナ用画像処理群１３２の出力を中間バッファを介して、プリンタ用画像処理群１３３に送信する動作の例について説明する。図９はスキャナ側の出力同期部５３０とプリンタ側の入力同期部５２０がバッファを共有する場合について説明するため、図５からバッファ共有動作の説明に必要な要素を抽出した簡易的な図を示している。まず、中間バッファ制御部ａ３２０と中間バッファ制御部ｂ３３０がＣＰＵ１１１から画像処理の実行開始の命令を受信すると、出力制御部５３０と入力制御部５２０が起動される。
【００７３】
初めは図９Ａに示すように、中間バッファ３４２にはデータが入っていないため、バッファ状態保持部５３０ｂに保持されているバッファ状態情報、及びバッファ状態保持部５２０ｂに保持されているバッファ状態情報は空となる。
このため、スキャナ側の出力同期部５３０ａはパケット受信部を起動し、パケットの受信が完了したらバッファ状態情報の書込状態信号５３８と同期信号５３６をアサートする。
プリンタ側の入力同期部５２０ａではバッファ状態保持部５２０ｂに保持されているバッファ状態情報が空のため、パケット送信部４１２の起動は行わずに同期信号５２５を出力し、他の中間バッファ制御部３３０からの同期信号５２６を待つ。
相互に同期信号が送られたら、バッファ書込状態信号５３８によってバッファ状態保持部５３０ｂ、５２０ｂのそれぞれに保持されているバッファ状態情報をフルに切り替え、図９Ｂの状態で次の実行を開始する。
【００７４】
図９Ｂでは、バッファ状態保持部５３０ｂ、５２０ｂのそれぞれに保持されているバッファ状態情報はフルであるため、スキャナ側のパケット受信部４２２の起動を行わずに同期信号５３６を出力し、他の中間バッファ制御部からの同期信号５３５を待つ。プリンタ側の入力同期部５２０ではバッファ状態保持部５２０ｂに保持されているバッファ状態情報がフルであるため、パケット送信部４１２を起動し、パケットの送信が完了したらバッファ状態情報の読出状態信号５２７と同期信号５２５をアサートする。相互に同期信号が送られたら、バッファ読出状態信号５２７によってバッファ状態保持部５３０ｂ、５２０ｂのそれぞれに保持されているバッファ状態情報を空に切り替え図９Ａの状態で次の実行を開始する。
以上のように、異なる中間バッファ制御部３２０、３３０でバッファの状態情報をそれぞれ同期して更新することによって、中間バッファ３４２を介して（ＤＲＡＭを介することなく）高速なデータ転送を実現する事が出来る。
【００７５】
＜実施例２＞
実施例１では、スキャナ側の画像出力部３２２と画像入力部３３１が１つの同じバッファ３４２にアクセスする場合を例に説明した。
実施例２では、バッファを効率的に用いて高速なデータ共有を実現するための構成について説明する。実施例２では画像出力部３２２と画像出力部３４２が２つのバッファ（例えば、３４２−１、３４２−２）に交互にアクセスするバッファ構成にし、これを同期制御する。
【００７６】
図１０にて実施例２におけるバッファ構成において、バッファを共有する構成について説明する。実施例２ではバッファ状態情報を、管理するバッファの数だけ配置し、それぞれのバッファ状態情報に対して読み出し、書き出し制御信号を送信する事によって、ダブルバッファ構成を実現する。
以下で具体的な動作について図１０を用いて説明する。図１０に示すバッファ１状態保持部５３０ｂ−１、５２０ｂ−１はバッファ３４２−１の状態情報を保持しており、バッファ２状態保持部５３０ｂ−２、５２０ｂ−２はバッファ３４２−２の状態情報を保持している。
【００７７】
まず、中間バッファ制御部ａ３２０と中間バッファ制御部ｂ３３０がＣＰＵから画像処理の実行開始の命令を受信すると、
中間バッファ制御部ａ３２０の出力制御部５３０と
中間バッファ制御部ｂ３３０の入力制御部５２０が起動される。
図１０Ａのように、初めは中間バッファ１、２共にデータが入っていないため、バッファ１状態保持部５２０ｂ−１，バッファ２状態保持部５２０ｂ−２に保持されている状態情報が共に空となる。
【００７８】
このため、スキャナ側の出力同期部５３０ａでは、パケット受信部４２２を起動し、パケットの受信が完了したらバッファ１状態情報の書込状態信号５３８−１と同期信号５３６をアサートする。
プリンタ側の入力同期部５２０ａでは、バッファ１の状態情報が空のため、パケット送信部４１２の起動は行わず、同期信号５２５を送信し、他の中間バッファ制御部３２０からの同期信号５２６を待つ。
相互に同期信号が送られたら、バッファ書込状態信号５３８−１によってそれぞれのバッファ１の状態情報をフルに切り替え、図１０Ｂの状態で次の実行を開始する。
【００７９】
図１０Ｂでは、出力同期部はバッファ２状態保持部５３０ｂ−２に保持されているバッファ２状態情報を参照する。
バッファ２状態情報は空であるため、スキャナ側のパケット受信部４２２を起動し、パケットの受信が完了したらバッファ２状態情報の書込状態信号５３８−２と同期信号５３６をアサートする。
プリンタ側の入力同期部５２０ではバッファ１状態保持部５２０ｂ−１に保持されているバッファ１状態情報を参照する。バッファ１状態情報はフルであるため、パケット送信部４１２を起動し、パケットの送信が完了したらバッファ１状態情報の読出状態信号５２７−１と同期信号５２５をアサートする。
相互に同期信号が送られたら、バッファ１読み出し信号５２７−１によってバッファ１の状態情報を空にし、バッファ２の書き出し信号５３８−２によって、バッファ２の状態情報をフルにし、図１０Ｃの状態で次の実行を開始する。
【００８０】
図１０Ｃでは出力同期部５３０はバッファ１状態保持部５３０ｂ−１に保持されているバッファ１状態情報を参照する。
バッファ１状態情報は空であるため、スキャナ側のパケット受信部４２２を起動し、パケットの受信が完了したらバッファ１状態情報の書込状態信号と同期信号５３８−１をアサートする。
プリンタ側の入力同期部５２０ではバッファ２状態保持部５２０ｂ−２に保持されているバッファ２状態情報を参照する。バッファ２状態情報はフルであるため、パケット送信部４１２を起動し、パケットの送信が完了したらバッファ２状態情報の読出状態信号５２７−２と同期信号５２５をアサートする。相互に同期信号が送られたら、バッファ２読み出し信号５２７−２によってバッファ２の状態情報を空にし、バッファ１の書込状態信号５３８−１によって、バッファ状態情報１をフルにし、図１０Ｂの状態で次の実行を開始する。
【００８１】
以上のように簡易な構成を追加する事で２つのバッファに交互にアクセスする構成においても、パケットの送信と受信を同時に実行する高速なデータ通信を実現する事が出来る。勿論、複数の中間バッファ制御部で共有するバッファの数は２つに限るものではない。
【００８２】
実施例２における並列動作の効果について説明する。
図１６（ａ）は中間バッファが１つしかない場合（中間バッファ１のみの場合）を示し、図１６（ｂ）は中間バッファが２つある場合（中間バッファ１と２の場合）を示す。
【００８３】
図１６（ａ）に示すように、中間バッファ１しか使用しない場合は、中間バッファ１が空の状態にならなければ出力部からの書込みは開始できない、また、中間バッファ１がフルの状態にならなければ入力部への読出しは開始できない。
【００８４】
具体的には、
中間バッファ１がフルの状態になり、中間バッファ１から入力部への読出しが開始され（Ｔ１１）、
中間バッファ１から入力部への読出しが終了し（Ｔ１２）、
中間バッファ１が空の状態になり、出力部から中間バッファ１への書込みが開始され（Ｔ１３）、
中間バッファ１がフルの状態になると、中間バッファ１から入力部への読出しが開始される（Ｔ１４）。
【００８５】
一方、図１６（ｂ）に示すように、中間バッファ１と中間バッファ２を使用する場合は、中間バッファ２が空の状態にならなくても、中間バッファ１が空の状態になれば、出力部から中間バッファ１への書込みは開始できる。また、中間バッファ１が空の状態にならなくても、中間バッファ２が空の状態になれば、出力部から中間バッファ２への書込みは開始できる。
中間バッファ２がフルの状態にならなくても、中間バッファ１がフルの状態になれば、中間バッファ１から入力部への読出しは開始できる。また、中間バッファ１がフルの状態にならなくても、中間バッファ２がフルの状態になれば、中間バッファ２から入力部への読出しは開始できる。
【００８６】
具体的には、
中間バッファ１がフルの状態になり、中間バッファ１から入力部への読出しが開始され（Ｔ２１）、
出力部から中間バッファ２への書込みが開始され（Ｔ２２）、
中間バッファ１から入力部への読出しが終了し（Ｔ２３）、
中間バッファ２から入力部への読出しが開始され（Ｔ２４）、
出力部から中間バッファ１への書込みが開始され（Ｔ２５）、
中間バッファ２から入力部への読出しが終了し（Ｔ２６）、
中間バッファ１から入力部への読出しが開始される（Ｔ２７）。
【００８７】
中間バッファ１と中間バッファ２を使用することによって、
中間バッファ１から入力部への読出し終了（Ｔ２３）と、
中間バッファ１から入力部への読出し開始（Ｔ２７）との間に、
中間バッファ２から入力部への読出しが開始し（Ｔ２４）、かつ中間バッファ２から入力部への読出しが終了している（Ｔ２６）。
【００８８】
同様に、
出力部から中間バッファ１への書込み終了（Ｔ２１）と、
出力部から中間バッファ１への書込み開始（Ｔ２５）との間に、
出力部から中間バッファ２への書込みが開始し（Ｔ２２）、かつ出力部から中間バッファ２への書込みが終了している（Ｔ２４）。
【００８９】
前記のように、出力部が、中間バッファ１と中間バッファ２を交互に使用し、かつ入力部も、中間バッファ１と中間バッファ２を交互に使用することによって、高速なデータ通信が可能となる。
【００９０】
＜実施例３＞
実施例１ではスキャン処理とプリント処理を連続して実行する場合における中間バッファ３４２の共有方法について説明した。実施例３では、画像データに対してスキャン用画像処理回路群１３２やプリンタ用画像処理回路群１３３に含まれる画像処理機能を複数回適用する場合について説明する。
【００９１】
スキャナ用画像処理回路群１３２では、スキャン時のノイズを低減するためのフィルタ処理を画像データに対して適用している。フィルタ処理はタップ数を大きくするほど空間周波数の低いノイズも除去する事が出来る。しかし、フィルタのタップ数が大きくなるほど回路規模も増大するため、コストとタップ数のバランスをとった構成を検討する必要があった。
【００９２】
そこで、少ないタップ数のフィルタ処理を画像データに複数回適用する事で疑似的に多タップ数のフィルタ処理を行う事が考えられる。実施例３では中間バッファ３４２を効率的に用いてこの処理を実現する構成について説明する。ただし、実施例１と同様の構成である部分については説明を省く。
【００９３】
図１１は実施例３における同期実行部３２３の構成を示した図である。図５で示した実施例１における同期実行部３２３の構成と同等の部分については同じ番号で示し、説明を省く。図１１の同期実行部３２３には実施例１の同期実行部３２３の構成に加えて状態情報交換部５４０を備えている。状態情報交換部５４０は入力制御部５２０のバッファ状態情報５２０ｂと、出力制御部５３０のバッファ状態情報５３０ｂを交換するモジュールである。
【００９４】
具体的には、状態情報交換部５４０は実行制御部５１０から状態情報交換命令を信号５４１から受け取ると、入力制御部５２０のバッファ状態情報５２０ｂと出力制御部５３０のバッファ状態情報５３０ｂを入れ替える制御を行う。バッファ状態情報の交換を完了したら実行制御部５１０に対して信号５４１から完了を通知する。
【００９５】
ここで、図１２を用いて、実行制御部５１０の制御シーケンスについて説明する。
Ｓ１２０１にて実行制御部５１０はフィルタ処理を実行する回数をループ回数としてＣＰＵ１１１から設定され、画像処理実行開始の割り込み信号５１９を待つ。割り込みを検知したらＳ１２０２に遷移する。
Ｓ１２０２ではＣＰＵ１１１から指定された回数の実行開始命令を発行しているかどうか判定し、実行済みもしくはループ実行が不要であればＳ１２０３−１に遷移し、指定された回数の実行をしていない場合はＳ１２０３−０に遷移する。
【００９６】
Ｓ１２０３−０ではループ実行の初回であれば入力側で中間バッファを共有するように設定し、出力側で中間バッファを共有しないように設定する。ループ実行初回以降であれば入力側、出力側ともに中間バッファを共有しないように設定しＳ１２０４−０に遷移する。
Ｓ１２０４−０では入力制御部５２０と出力制御部５３０に実行開始命令を発行し、Ｓ１２０５−０に遷移する。
【００９７】
Ｓ１２０５−０では入力側制御部５２０と出力側制御部５３０からの実行終了信号を待機し、両方の信号を受信したらＳ１２０６に遷移する。
Ｓ１２０６では状態情報交換部５４０にバッファ状態情報の交換を命令すると同時に、画像入力部３２１と画像出力部３２２がどの利用するバッファを利用するかといった設定についても交換する。交換が完了したらＳ１２０２に遷移する。
【００９８】
ここで、Ｓ１２０２にてＳ１２０３−１に遷移した場合について説明する。
Ｓ１２０３−１では入力側で中間バッファを共有しないように設定し、出力側で中間バッファを共有するように設定しＳ１２０４−１に遷移する。
Ｓ１２０４−１はＳ１２０４−０と同様で、Ｓ１２０５−１とＳ１２０５−０も同様の制御を行いＳ１２０７に遷移する。
Ｓ１２０７ではＣＰＵ１１１に画像処理終了の割り込みを通知する。
【００９９】
次に、図１３を用いて、入力制御部５２０の制御シーケンスについて説明する。
Ｓ１３０１にて実行制御部５１０から実行開始命令５１５を待ち、受信するとＳ１３０２に遷移する。
Ｓ１３０２にてループ実行の初回またはループ処理をしない場合であればＳ１３０３−０に遷移し、２回目〜最終回のループ実行であればＳ１３１０に遷移する。
Ｓ１３０３−０では入力共有設定を参照して、中間バッファ３４２を共有するように設定されていればＳ１３１０に、共有しないように設定されていればＳ１３０４−０に遷移する。
Ｓ１３０４−０、Ｓ１３１０以降は図７のＳ７０３−０とＳ７１０と同様の制御であるため説明を省略する。
【０１００】
次に、図１４を用いて、出力制御部５３０の制御シーケンスについて説明する。
Ｓ１４０１にて実行制御部５１０から実行開始命令５１７を待ち、受信するとＳ１４０２に遷移する。
Ｓ１４０２にてループ処理をしない、またはループ処理の最終回を実行する場合はＳ１４０３に遷移し、ループ処理の初回〜最終回の１つ手前を実行する場合はＳ１４１０遷移する。
Ｓ１４０３では出力共有設定を参照して、中間バッファを共有するように設定されていればＳ１４０４−１に、共有しないように設定されていればＳ１４１０に遷移する。
Ｓ１４０４−０、Ｓ１４０１０以降は図８のＳ８０３−０とＳ８１０と同様の制御であるため説明を省略する。
以上のように構成することで中間バッファを効率的に利用しつつ、画像データに対して同様の画像処理を複数回適用する事が出来る。
＜その他の実施例＞
本発明は、上述した実施形態の機能を実現するソフトウェアのコンピュータプログラムコードを記録した記憶媒体を、システム或いは装置に供給することによっても実現できる。この場合、そのシステム或いは装置のコンピュータ（又はＣＰＵやＭＰＵ）が読み取り可能に記憶媒体に格納されたコンピュータプログラムコードを読み出し実行することにより、上述した実施形態の機能を実現する。
【符号の説明】
【０１０１】
１００  画像処理装置
１１０  システム制御部
１２０  スキャナ制御部
１３０  画像処理部
１４０  プリンタ制御部
３１０  ＤＭＡコントローラ
３２０  中間バッファ制御部ａ
３２１  画像入力部
３２２  画像出力部
３２３  同期実行部
【図１】
0006548483.tif 000002
【図２】
0006548483.tif 000003
【図３】
0006548483.tif 000004
【図４】
0006548483.tif 000005
【図５】
0006548483.tif 000006
【図６】
0006548483.tif 000007
【図７】
0006548483.tif 000008
【図８】
0006548483.tif 000009
【図９Ａ】
0006548483.tif 000010
【図９Ｂ】
0006548483.tif 000011
【図１０Ａ】
0006548483.tif 000012
【図１０Ｂ】
0006548483.tif 000013
【図１０Ｃ】
0006548483.tif 000014
【図１１】
0006548483.tif 000015
【図１２】
0006548483.tif 000016
【図１３】
0006548483.tif 000017
【図１４】
0006548483.tif 000018
【図１５】
0006548483.tif 000019
【図１６】
0006548483.tif 000020