(57)【要約】      （修正有）【課題】転送経路での要求の順序修正のための回路を転送経路とメモリの間に設けることなく、リード要求とライト要求の順序の入れ替わりの問題の発生を防止する。【解決手段】ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）は、メモリ内のラインバッファに対する１ライン分のリード及びライトのコマンドを内部バス（転送経路）に発行Ｓ１０した後、ラインバッファとは異なるフラグ領域にフラグを書き込むライトコマンドを発行するＳ１２。そして、そのフラグ領域を読み取るリードコマンドを内部バスに発行しＳ１４、これに応じて読み出した値がＳ１２でライトしたフラグと一致するか判定するＳ１６。一致するまでは、仮に上位装置からそのラインバッファへの読み出し要求を受けていても、ラインバッファへのリードコマンドは発行しない。一致した場合、Ｓ１０に戻り、ラインバッファへのリード及びライトのコマンドを発行する。【選択図】図５
2018156428.tif 000002
【特許請求の範囲】
【請求項１】
ライト要求同士の順序及びリード要求同士の順序は維持するがライト要求とリード要求との間の順序は維持しない転送経路に対して、処理単位の最後のデータをメモリに書き込む第１ライト要求を発行した後に、前記メモリ内の前記データが書き込まれる領域とは異なる領域に確認情報を書き込む第２ライト要求を発行するライト発行手段と、
前記第２ライト要求の発行後に、前記確認情報を読み取る第１リード要求を前記転送経路に発行し、前記第１リード要求に対して前記確認情報を読み取った後に、前記メモリに書き込まれた前記処理単位のデータに対する第２リード要求を前記転送経路へ発行するリード発行手段と、
を含む転送制御装置。
【請求項２】
前記ライト発行手段は、前記処理単位についての前記確認情報として、前記処理単位の１つ前の処理単位についての前記確認情報とは異なる値の情報を用いる、ことを特徴とする請求項１に記載の転送制御装置。
【請求項３】
前記ライト発行手段は、前記処理単位についての前記確認情報として、前記処理単位の識別情報を用いる、ことを特徴とする請求項１に記載の転送制御装置。
【請求項４】
第１の処理装置と、
前記第１の処理装置がメモリに書き込んだデータを用いて処理を実行する第２の処理装置と、
前記第１の処理装置と前記第２の処理装置との連携を制御する制御装置と、
を含み、
前記第１の処理装置は、
ライト要求同士の順序及びリード要求同士の順序は維持するがライト要求とリード要求との間の順序は維持しない転送経路に対して、前記データの最後の部分をメモリに書き込む第１ライト要求を発行した後に、前記メモリ内の前記データが書き込まれる領域とは異なる領域に確認情報を書き込む第２ライト要求を発行するライト発行手段と、
前記第２ライト要求の発行後に、前記確認情報を読み取るリード要求を前記転送経路に発行し、前記リード要求に対して前記確認情報が読み取った場合に、前記メモリへの前記データの書き込みが完了したことを示す完了通知を前記制御装置に送信する手段と、
を含み、
前記制御装置は、前記第１の処理装置から前記完了通知を受けると、前記第２の処理装置に前記データを用いた処理の開始を指示する、
ことを特徴とする処理システム。
【請求項５】
前記確認情報は、前記第１の処理装置の識別情報を含む情報である、ことを特徴とする請求項４に記載の処理システム。
【請求項６】
ライト要求同士の順序及びリード要求同士の順序は維持するがライト要求とリード要求との間の順序は維持しない転送経路に対して、データの最後の部分をメモリに書き込む第１ライト要求を発行した後に、前記メモリ内の前記データが書き込まれる領域とは異なる領域に確認情報を書き込む第２ライト要求を発行するライト発行手段と、
前記第２ライト要求の発行後に、前記確認情報を読み取るリード要求を前記転送経路に発行し、前記リード要求に対して前記確認情報が読み取った場合に、前記メモリへの前記データの書き込みが完了したことを示す完了通知を制御装置に送信する手段と、
を含む処理装置。
【請求項７】
第１の処理装置と、
前記第１の処理装置がメモリに書き込んだデータを用いて処理を実行する第２の処理装置と、
を含み、
前記第１の処理装置は、
ライト要求同士の順序及びリード要求同士の順序は維持するがライト要求とリード要求との間の順序は維持しない転送経路に対して、前記データの最後の部分をメモリに書き込む第１ライト要求を発行した後に、前記メモリ内の前記データが書き込まれる領域とは異なる領域に確認情報を書き込む第２ライト要求を発行するライト発行手段、
を含み、
前記第２の処理装置は、
前記メモリ内の前記確認情報を読み取るリード要求を前記転送経路に発行する手段と、
前記リード要求に対して前記確認情報が読み取れた場合に、前記メモリ内の前記データを用いた前記処理を開始する手段と、
を含む処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、転送制御装置、処理システム及び処理装置に関する。
【背景技術】
【０００２】
データの転送経路として、リード要求同士及びライト要求同士の間の順序は維持されるが、リード要求とライト要求との間の順序は維持されない転送経路がある。例えばＡＸＩ（Advanced eXtensible Interface）プロトコルに準拠した転送経路がその一例である。
【０００３】
このような転送経路におけるリード要求とライト要求との間の順序関係を維持する従来技術として、例えば特許文献１及び２に開示された技術が知られている。
【０００４】
特許文献１の技術では、要求の発行に際して、スレーブ側において要求の順番が入れ替わったことを検知するためのコマンド番号を送信し、発行される要求を記憶媒体に一時的に保持し、スレーブにおいて要求の順番が入れ替わったことが検知されることにより再送要求を受けた場合に、一時的に保持している要求を再送する。
【０００５】
特許文献２に開示された信号転送装置は、共有メモリへのアクセスを制御するメモリ制御装置にデータを転送するポステッドライト方式のライトデータプロトコルを持つインターフェースと、共有メモリへインターフェースを介して書き込むライト要求があった場合、ライト要求からライトアドレスを取得し、ライトデータの転送量が共有メモリまでの信号転送経路上のバッファの合計量を上回るまで、アドレスのリードを待機する待機手段と、を備える。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１６−０３１５４７号公報
【特許文献２】特開２０１６−１７７４７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
転送経路によるリード要求とライト要求の順序の入れ替わりを修正するための処理を、要求の発行側に設けた回路と、その要求を受けるメモリ側（すなわちその転送経路とメモリとの間）に設けた回路との協働により実現する方式を用いる場合、要求発行側とメモリ側の両方に順序修正用の回路を設けるためにコストが掛かる。
【０００８】
本発明は、転送経路での要求の順序修正のための回路を転送経路とメモリの間に設けることなく、リード要求とライト要求の順序の入れ替わりの問題の発生を防止することを目的とする。
【課題を解決するための手段】
【０００９】
請求項１に係る発明は、ライト要求同士の順序及びリード要求同士の順序は維持するがライト要求とリード要求との間の順序は維持しない転送経路に対して、処理単位の最後のデータをメモリに書き込む第１ライト要求を発行した後に、前記メモリ内の前記データが書き込まれる領域とは異なる領域に確認情報を書き込む第２ライト要求を発行するライト発行手段と、前記第２ライト要求の発行後に、前記確認情報を読み取る第１リード要求を前記転送経路に発行し、前記第１リード要求に対して前記確認情報を読み取った後に、前記メモリに書き込まれた前記処理単位のデータに対する第２リード要求を前記転送経路へ発行するリード発行手段と、を含む転送制御装置である。
【００１０】
請求項２に係る発明は、前記ライト発行手段は、前記処理単位についての前記確認情報として、前記処理単位の１つ前の処理単位についての前記確認情報とは異なる値の情報を用いる、ことを特徴とする請求項１に記載の転送制御装置である。
【００１１】
請求項３に係る発明は、前記ライト発行手段は、前記処理単位についての前記確認情報として、前記処理単位の識別情報を用いる、ことを特徴とする請求項１に記載の転送制御装置である。
【００１２】
請求項４に係る発明は、第１の処理装置と、前記第１の処理装置がメモリに書き込んだデータを用いて処理を実行する第２の処理装置と、前記第１の処理装置と前記第２の処理装置との連携を制御する制御装置と、を含み、前記第１の処理装置は、ライト要求同士の順序及びリード要求同士の順序は維持するがライト要求とリード要求との間の順序は維持しない転送経路に対して、前記データの最後の部分をメモリに書き込む第１ライト要求を発行した後に、前記メモリ内の前記データが書き込まれる領域とは異なる領域に確認情報を書き込む第２ライト要求を発行するライト発行手段と、前記第２ライト要求の発行後に、前記確認情報を読み取るリード要求を前記転送経路に発行し、前記リード要求に対して前記確認情報が読み取った場合に、前記メモリへの前記データの書き込みが完了したことを示す完了通知を前記制御装置に送信する手段と、を含み、前記制御装置は、前記第１の処理装置から前記完了通知を受けると、前記第２の処理装置に前記データを用いた処理の開始を指示する、ことを特徴とする処理システムである。
【００１３】
請求項５に係る発明は、前記確認情報は、前記第１の処理装置の識別情報を含む情報である、ことを特徴とする請求項４に記載の処理システムである。
【００１４】
請求項６に係る発明は、ライト要求同士の順序及びリード要求同士の順序は維持するがライト要求とリード要求との間の順序は維持しない転送経路に対して、データの最後の部分をメモリに書き込む第１ライト要求を発行した後に、前記メモリ内の前記データが書き込まれる領域とは異なる領域に確認情報を書き込む第２ライト要求を発行するライト発行手段と、前記第２ライト要求の発行後に、前記確認情報を読み取るリード要求を前記転送経路に発行し、前記リード要求に対して前記確認情報が読み取った場合に、前記メモリへの前記データの書き込みが完了したことを示す完了通知を制御装置に送信する手段と、を含む処理装置である。
【００１５】
請求項７に係る発明は、第１の処理装置と、前記第１の処理装置がメモリに書き込んだデータを用いて処理を実行する第２の処理装置と、を含み、前記第１の処理装置は、ライト要求同士の順序及びリード要求同士の順序は維持するがライト要求とリード要求との間の順序は維持しない転送経路に対して、前記データの最後の部分をメモリに書き込む第１ライト要求を発行した後に、前記メモリ内の前記データが書き込まれる領域とは異なる領域に確認情報を書き込む第２ライト要求を発行するライト発行手段、を含み、前記第２の処理装置は、前記メモリ内の前記確認情報を読み取るリード要求を前記転送経路に発行する手段と、前記リード要求に対して前記確認情報が読み取れた場合に、前記メモリ内の前記データを用いた前記処理を開始する手段と、を含む処理システムである。
【発明の効果】
【００１６】
請求項１、４、６又は７に係る発明によれば、転送経路での要求の順序修正のための回路を転送経路とメモリの間に設けることなく、リード要求とライト要求の順序の入れ替わりの問題の発生を防止することができる。
【００１７】
請求項２に係る発明によれば、前記第１リード要求に対して前記確認情報が読み取った後に前記確認情報を消去することで次の処理単位にも同じ値の確認情報を使用可能とする方式と比べて、処理に要する時間を短縮できる。
【００１８】
請求項３に係る発明によれば、転送制御装置の故障時等の動作検証の際に、メモリに書き込まれた確認情報の値からどの処理単位まで処理がなされたかを知ることができる。
【００１９】
請求項５に係る発明によれば、処理システムの故障時等の動作検証の際に、メモリに書き込まれた確認情報の値からどの処理装置まで処理を行ったかを知ることができる。
【図面の簡単な説明】
【００２０】
【図１】実施形態の仕組みが適用されるシステムの一例を示す図である。
【図２】画像処理部の内部構成の例を示す図である。
【図３】ラインバッファを用いた画像処理において起こりえる問題を説明するための図である。
【図４】共有メモリ内にラインバッファとは別にフラグ領域を設けることを説明するための図である。
【図５】ＤＭＡＣの処理の手順の一例を示す図である。
【図６】変形例の処理装置が実行する手順の例を示す図である。
【図７】別の変形例の処理装置が実行する手順の例を示す図である。
【発明を実施するための形態】
【００２１】
以下図面を参照して本発明の実施形態について説明する。
【００２２】
図１は、実施形態の仕組みが適用される画像形成装置１００の情報処理システムの一例を示す。画像形成装置１００は、画像の読取りや出力（印刷、ファクシミリ送信）等のうちの一以上を行う装置であり、例えばプリンタ、スキャナ、複写機、ファクシミリ、又はそれらの機能を兼ね備えた複合機がその例である。
【００２３】
このシステムは、内部バス１１０に接続されたＣＰＵ（中央演算装置）１０２、ＤＳＰ（デジタルシグナルプロセッサ）１０４、画像読取装置（スキャナ）１０６、画像印字部（プリンタ）１１２、及び１以上の画像処理部２００（図では「画像処理ｎ」（ｎは番号）と表記）を有する。また、内部バス１１０には、ＣＰＵ１０２等のそれら各要素により共有される共有メモリ１１４が、メモリコントローラ１１６を介して接続されている。
【００２４】
ＣＰＵ１０２は、画像形成装置１００の動作制御のための制御プログラムや画像処理のためのプログラム等の各種プログラムを実行する。この実行の際、共有メモリ１１４を作業領域として用いる。ＤＳＰ１０４は、画像形成装置１００内で用いられる信号についてのデジタル信号処理を実行する。画像読取装置１０６は、スキャンやコピー等の機能のために原稿の画像を読み取り、その画像を表す画像データを生成する。画像印字部１１２は、印刷やコピー等の機能のために画像データを用紙に印刷する。
【００２５】
各画像処理部２００は、画像形成装置１００が取り扱う画像データ（例えば画像読取装置１０６が読み取った画像や画像印字部１１２が印刷する画像）に対して各種の画像処理を行う。画像処理部２００の行う画像処理については特に限定はない。
【００２６】
メモリコントローラ１１６は、内部バス１１０上の各要素からの共有メモリ１１４に対するリード（読み出し）及びライト（書き込み）の要求を処理する。
【００２７】
内部バス１１０は、組み込みシステム内部のＣＰＵ１０２等の各要素間でのデータ転送のため転送経路である。内部バス１１０は、リード要求同士及びライト要求同士の間の順序は維持するが、転送効率等のためにリード要求とライト要求との間の順序関係は保証しないバスである。内部バス１１０は、例えばＡＸＩプロトコルに準拠したバスである。したがって、同じ画像処理部２００が例えばメモリコントローラ１１６に対してライト、リードの順に要求を発したとしても、それら両要求の発行の時間間隔が短いと、メモリコントローラ１１６がそれら両要求を受け取る順序は逆転する場合がある。
【００２８】
ここで内部バス１１０は、複数のバスがバスブリッジを介して接続されたものであってもよい。ＣＰＵ１０２や画像処理部２００等からメモリコントローラ１１６までに、リード・ライト間の順序関係を保証しないバスが複数介在する場合には、リード要求とライト要求との間の順序の逆転が更に起こりやすくなる。
【００２９】
本実施形態では、共有メモリ１１４に対するリード及びライトの要求を発するＣＰＵ１０２や画像処理部２００等の要素に、リードとライトとの間の順序の入れ替わりを起こさないようにする仕組みを設けている。以下では、画像処理部２００を代表例にとって、この仕組みについて説明する。
【００３０】
図２は、本実施形態の画像処理部２００の内部構成の一例を示す。図２において、画像処理部２００は、画像処理コア部２１０と、１以上のＤＭＡＣ（Direct Memory Access Controller）２２０を有する。
【００３１】
画像処理コア部２１０は、画像処理部２００が担う画像処理を行う要素である。画像処理コア部２１０は、ハードウエア回路として構成されていてもよいし、汎用プロセッサが画像処理のためのプログラムを実行することによりソフトウエア的に構成されていてもよいし、ハードウエア回路とソフトウエアの処理との組合せとして構成されていてもよい。画像処理コア部２１０は、ＤＭＡＣ２２０に対してデータのライト・リードを指示する。
【００３２】
ＤＭＡＣ２２０は、画像処理部２００と内部バス１１０上の他の装置（例えばメモリコントローラ１１６）との間のＤＭＡ転送を制御する。
【００３３】
ＤＭＡＣ２２０において、ライトカウンタ２２２は、画像処理コア部２１０から入力されたライトデータ（共有メモリ１１４に対して書き込むデータ）のデータ量を計数する。計数結果を示すカウンタデータは、ライトコマンド生成部（図では「ライトコマンド生成」と表記）２２４及びライトフラグ生成部（図では「ライトフラグ生成」と表記）２２６に渡される。ライトコマンド生成部２２４は、共有メモリ１１４へデータの書き込みを要求するライトコマンド（ライト要求）を生成する。
【００３４】
ライトフラグ生成部２２６は、本実施形態の制御のためのフラグを生成する。フラグは、所定の（すなわち予め定めた）処理単位分のライトデータの書き込みが終わったことを確認するために用いる確認情報である。ＤＭＡＣ２２０は、処理単位分のデータのライトコマンドを発行する毎に、フラグを書き込むためのライトコマンドを発行する。内部バス１１０は、ライトコマンド同士の順序関係は保証するので、フラグが共有メモリ１１４に書き込まれていることが確認できれば、その直前の処理単位のデータは共有メモリ１１４に書き込み済みであることが分かる。このことを利用して、本実施形態では、処理単位のデータが共有メモリ１１４に書き込まれたことを確認した上で、その処理単位についてのリードコマンド（リード要求）が発行されるように制御する。これにより、その処理単位についてのライトコマンドをリードコマンドが追い越してしまうことを防止する（詳細は後述）。
【００３５】
ここで、処理単位とは、画像処理部２００が共有メモリ１１４を用いて実行する画像処理において、処理の単位となる画像の範囲のことである。処理単位は、例えば画像のライン、バンド（すなわち連続する所定数のライン）、ページ等である。
【００３６】
アドレスサイズ管理部２２８は、ライトコマンドのライト先のアドレス及びライトするデータのサイズ、及びリードコマンドのリード先のアドレス及びリードするデータのサイズを生成し、ライトコマンド生成部２２４及びリードコマンド生成部２３０に渡す。
【００３７】
リードコマンド生成部（図では「リードコマンド生成」と表記）２３０は、共有メモリ１１４からのデータの読み出しを要求するリードコマンド（リード要求）を生成する。
【００３８】
リードフラグ生成部（図では「リードフラグ生成」と表記）２３２は、共有メモリ１１４に書き込まれたフラグを読み出す指示を生成する。この指示（フラグ生成通知）を受けたリードコマンド生成部２３０は、共有メモリ１１４に書き込まれたフラグを読み取るためのリードコマンドを発行する。
【００３９】
データ判定部２３４は、リードフラグ生成部２３２の指示により共有メモリ１１４から読み出されたデータが、ライトフラグ生成部２２６の指示により共有メモリ１１４に書き込まれたフラグと一致するかどうかを判定する。一致すれば、そのフラグが共有メモリに書き込まれたということであり、これはそのフラグの前にライトコマンドが発行された処理単位のデータが共有メモリ１１４に書き込み済みであることを意味する。
【００４０】
読み出したデータが書き込んだフラグに一致した場合、１つの例では、データ判定部２３４は、リードコマンド生成部２３０に処理単位のライトが完了した旨を通知する。リードコマンド生成部２３０は、ライトコマンド生成部２２４が書き込んでいる処理単位に対するリードコマンドの発行は、その通知を受け取るまで発行せずに保留する。そして、その通知を受けると、その処理単位についてのリードコマンドの発行を開始する。
【００４１】
また別の例では、データ判定部２３４は、読み出したデータが書き込んだフラグに一致した場合、画像処理コア部２１０に処理単位のライトが完了した旨を通知する。この通知に応じ、画像処理コア部２１０は、その処理単位のリードを開始する。この例では、画像処理コア部２１０は、その処理単位のライトが完了するまでは、その処理単位についてリードは開始しない。
【００４２】
次に、図３を参照して、画像処理コア部２１０が共有メモリ１１４内に確保したラインバッファ３００を用いて画像処理を行う場合に生じ得る問題について説明する。
【００４３】
この例では、画像処理コア部２１０は、共有メモリ１１４内に保持された入力画像３１０の第ｍライン（ｍは正の整数。図ではＬｍと表記）の第ｍ画素（ｎは正の整数。図ではｐｎと表記）を、ラインバッファ３００内に保持された１つ前のライン（Ｌ（ｎ−１））の画像と組み合わせて処理するものとする（例えば１つ前のラインとの平均をとる等）。この場合の画像処理コア部２１０及びＤＭＡＣ２２０の処理は以下のようになる。ここでは、ＤＭＡＣ２２０は上述したフラグによる処理単位の書き込み確認を行わないものとして、その場合に生じる問題を説明する。図では、入力画像３１０の第３ラインＬ３の第１画素ｐ１を処理する時点の様子を模式的に示している
【００４４】
画像処理コア部２１０は、以下の処理を繰り返す。
（１）入力画像３１０の第ｍライン第ｎ画素のデータをＤＭＡＣ２２０に要求し取得（正確には共有メモリ１１４内のその第ｎ画素のアドレスのデータを要求して取得。以下同じ）
（２）ラインバッファ３００（第ｍ−１ライン）の第ｍ画素のデータをＤＭＡＣ２２０に要求し取得
（３）上記（１）及び（２）で取得した２つの画素のデータを処理
（４）上記（３）の処理結果を共有メモリ１１４内の出力画像の領域（図示省略）の第ｍライン第ｎ画素として出力
（５）上記（１）で読み込んだデータをラインバッファ３００の第ｍ画素に書き込み（ラインバッファ３００の第ｍ画素の値を第ｎラインの当該画素の値に書き換え）
（６）画素番号ｎがラインの最終画素の番号ならライン番号ｍを１増やし、そうでなければ画素番号ｎを１増やして上記（１）に戻る。
【００４５】
ＤＭＡＣ２２０は、画像処理コア部２１０からラインバッファ３００内の画素データの読み出し要求（上述（２））を受けた場合、以下の処理を行う。なお、ＤＭＡＣ２２０は、ＤＭＡのバースト転送１回の転送サイズ（以下「転送単位」とも呼ぶ）例えば４バイト×１バーストあたりの転送サイクル数）の内部バッファをリード用及びライト用にそれぞれ有しているものとする。
（７）画像処理コア部２１０からラインバッファ３００内の第ｍ画素（アドレス）の読み出し要求を取得
（８）その画素のデータがリード用の内部バッファにあれば、そのデータを応答
（９）その画素のデータがリード用の内部バッファになければ、その画素を始点として転送サイズ分のデータをラインバッファ３００から読み込んで（ＤＭＡ転送のリードコマンド））内部バッファにバッファすると共に、その画素のデータを画像処理コア部２１０に応答。
【００４６】
ＤＭＡＣ２２０が画像処理コア部２１０から入力画像の画素の読み出し要求を受けた場合の処理も同様である。
【００４７】
ＤＭＡＣ２２０は、画像処理コア部２１０からラインバッファ３００内の第ｍ画素への書き込み要求（上述（５））を受けた場合、以下の処理を行う。
（１０）画像処理コア部２１０からラインバッファ３００内の第ｍ画素へのデータの書き込み要求を取得
（１１）そのデータをライト用の内部バッファ内の該当画素（アドレス）に書き込み
（１２）ライト用の内部バッファが満杯になった場合、又はラインの最後の画素のデータ（これはライトカウンタ２２２のカウントから判別可能）をその内部バッファに書き込んだ場合、その内部バッファのデータをラインバッファ３００へ書き込む（ＤＭＡ転送のライトコマンド）と共に、その内部バッファをクリア。
【００４８】
ＤＭＡＣ２２０が画像処理コア部２１０から出力画像の画素の書き込み要求を受けた場合の処理も同様である。
【００４９】
さて、図３の例において、画像処理コア部２１０が第２ラインについての処理を進め、ラインバッファ３００に第２ラインの最後の画素を書き込む書き込み要求をＤＭＡＣ２２０に送り、続いて第３ラインの第１画素の処理のためにラインバッファ３００の第１画素（この時点では第２ラインの画素を保持しているはずである）を読み出す読み出し要求をＤＭＡＣ２２０に送ったとする。この場合、上記（１２）及び（９）の説明から分かるように、ＤＭＡＣ２２０は第２ラインの最後の画素のデータの書き込み要求を受けてライト用内部バッファに書き込んだ時点でその内部バッファ内の画素群Ａを書き込むためのライトコマンドを内部バス１１０に発行し、第３ラインの最初の画素の読み込み要求を受けた時点で第１画素から転送単位分の画素群Ｂを読み込むためのリードコマンドを内部バス１１０に発行する。したがって、そのライトコマンドとそのリードコマンドの発行の時間差は、実質１画素分という極めて短い時間である。このため内部バス１１０内でそのリードコマンドがそのライトコマンドを追い越すことが起こりやすい。
【００５０】
ここで、１ラインのデータサイズが小さい場合（例えば、処理する画像の幅が小さい場合や、ファクシミリ画像のように１画素のデータ量が小さい場合）、そのライトコマンドが書き込む画素群Ａとそのリードコマンドが読み込む画素群Ｂとに重なりが生じる。この場合、リードコマンドがライトコマンドを追い越すと、ラインバッファ３００の画素群Ａが書き込まれる前に、ＤＭＡＣ２２０が画素群Ｂをラインバッファ３００から読み出すことになる。このとき、両画素群の重なりの画素については、ＤＭＡＣ２２０は、そのライトコマンドで書き込まれる前の画素値を読み出すことになり、これはリードすべき画素値と異なる不正な値であるため、正しい処理結果が得られなくなる。
【００５１】
また、内部バス１１０が、リードとライトの順序関係を保証しないバスを複数段接続したものである場合、ライトコマンドとリードコマンドの順序は更に入れ替わりやすくなる。例えば第３ラインの先頭の転送単位を読み出すリードコマンドが、第２ラインの最後の転送単位のライトコマンドだけでなく、その１つ前、２つ前のライトコマンドを追い越してしまうことも起こり得る。したがって、第３ラインの先頭のリードコマンドが、ライトコマンドにより書き換えられる前の不正な値を読み出すことがより起こりやすくなる。
【００５２】
このように、ラインバッファ３００を用いる画像処理では、ラインバッファ３００の先頭画素を含む画素群の読み出しのためのリードコマンドが、その前のライトコマンドにより書き換えられる前の画素値を読み込んでしまうという問題が起こることがある。
【００５３】
これに対して本実施形態では、上述したフラグを利用することで、そのような問題の発生を防止する。
【００５４】
すなわち、本実施形態では、図４に示すように、共有メモリ１１４内のラインバッファ３００とは異なるアドレス（例えばラインバッファ３００の次のアドレス）に、フラグ領域３２０を確保する。そして、ＤＭＡＣ２２０は、図５に示す処理を実行する。
【００５５】
図５の手順では、ＤＭＡＣ２２０は、画像の１ライン毎に図示したＳ１０〜Ｓ１８のステップを繰り返す。なお、画像についての処理を開始する前に、その画像の１ラインのデータ量やライン数は、画像処理コア部２１０からＤＭＡＣ２２０に通知されているものとする。
【００５６】
まずＤＭＡＣ２２０のリードコマンド生成部２３０及びライトコマンド生成部２２４は、画像処理コア部２１０からの読み出し要求及び書き込み要求に応じて、ラインバッファ３００に対する１ライン分のリードコマンド及びライトコマンドを順に内部バス１１０に発行する（Ｓ１０）。一般に、１ラインの処理のために、リードコマンド及びライトコマンドはそれぞれ複数回発行される。
【００５７】
ＤＭＡＣ２２０のライトカウンタ２２２は、１ライン分のデータ量についてのライトコマンドを発行し終わったことを検知すると、ライトフラグ生成部２２６にフラグの生成を指示する。この指示に応じ、ライトフラグ生成部２２６は、フラグを生成し、ライトコマンド生成部２２４に対してそのフラグをフラグ領域３２０に書き込むライトコマンドを生成するよう指示する。これに応じライトコマンド生成部２２４は、フラグを書き込むためのライトコマンドを内部バス１１０に発行する（Ｓ１２）。
【００５８】
なお、ライトフラグ生成部２２６は、ライン毎に、少なくとも直前のラインのために生成したフラグとは異なる値のフラグを生成する。直前のラインに用いたフラグと同じフラグを用いると、フラグ領域３２０に書き込んだフラグが直前のラインのものか今回のラインのものかが区別できないからである。ライトフラグ生成部２２６は、そのような条件を満たすフラグとして、例えば対象のラインの番号を含むフラグを生成する。ライン番号をフラグとして用いると、例えば画像処理部２００のデバッグや故障原因究明の際に、フラグ領域３２０のフラグの値を読むことで、どのラインまで処理がなされたかが分かる。
【００５９】
なお、今回のラインについて書き込むフラグの値を、直前のラインに用いたフラグの値と異なる値とすることは必須ではない。例えば、ＤＭＡＣ２２０が、図５のＳ１６でフラグが共有メモリ１１４に書き込まれたことを確認（判定結果Ｙｅｓ）した後、フラグ領域３２０をクリア（データを消去）するステップを設ければ、フラグ領域３２０に書き込むフラグの値は毎回同じであってもよい。ただし、この場合、フラグ領域３２０をクリアするステップの分だけ処理に時間がかかる。
【００６０】
Ｓ１２の後、リードフラグ生成部２３２は、リードコマンド生成部２３０に対して、フラグ領域３２０の読み取りを指示する。これに応じてリードコマンド生成部２３０は、フラグ領域３２０を読み取るリードコマンドを内部バス１１０に発行する（Ｓ１４）。
【００６１】
次にデータ判定部２３４は、Ｓ１４のリードコマンドに応じて共有メモリ１１４から応答されたデータ（フラグ領域３２０から読み出されたもの）が、Ｓ１２でフラグ領域３２０に書き込んだフラグの値と一致するか否かを判定する（Ｓ１６）。この判定の結果がＮｏの場合、Ｓ１２のフラグがまだフラグ領域３２０に書き込まれていない（すなわちＳ１４のリードコマンドがＳ１２のライトコマンドを追い越した）ということなので、Ｓ１４に戻りリードコマンド生成部２３０が再度フラグ領域３２０を読み出すリードコマンドを発行する。Ｓ１６の判定結果がＹｅｓとなるまで、Ｓ１４及びＳ１６が繰り返される。
【００６２】
Ｓ１６の判定結果がＹｅｓになった場合、それは現在のラインの最後の画素までラインバッファ３００への書き込みが完了したことを意味する。この場合、ＤＭＡＣ２２０は、画像の最後のラインまで処理が終わったかどうかを判定し（Ｓ１８）、この判定の結果がＮｏの場合は、Ｓ１０に戻り、次のラインの処理を実行する。Ｓ１８の判定結果がＹｅｓになると、図５の処理は終了する。
【００６３】
図５の処理では、ＤＭＡＣ２２０は、第ｍラインのフラグがフラグ領域３２０に書き込まれたことを確認（Ｓ１６）する前に、画像処理コア部２１０から第（ｍ＋１）ラインの処理のためのラインバッファ３００の読み出し要求を受け取っても、その要求に対応するリードコマンドは発行しない。第（ｍ＋１）ラインの処理のためのリードコマンドは、Ｓ１６でフラグの書き込みが確認されてはじめて発行される
【００６４】
したがって、第（ｍ＋１）ラインのためのリードコマンドが、第ｍラインの最後のライトコマンドを追い越すことは防止される。
【００６５】
メモリに対してデータを書き込んだ場合に、その書き込み先のアドレスからデータを読み取ることで、そのデータが正しくメモリに書き込まれているかを確認するという制御はよく行われている。しかし、この考えを画像処理部２００に適用するとしても、１ラインの全画素についてこのような確認処理を行うと、処理速度の低下を招く。そこで、処理速度の低下を抑制するために、例えば書き込み確認の対象を１ラインの最後の所定数の画素に限定することが考えられる。しかし、この方法は正しく機能しない。最後の所定数の画素の値が、１つ前のラインの最後の所定数の画素値と一致することが起こり得るからである。特に、文書画像の場合、ラインの末尾の画素群は余白すなわち値が０であることが多いので、ラインバッファ３００のライン末尾のアドレスから読み出したデータは、それが１つ前のラインのデータであったとしても、現在のラインの末尾のデータと一致する可能性が高い。このため、ラインバッファ３００の末尾のデータを読み出して確認する方式では、現在のラインが最後まで書き込まれたのかを正しく判定することはできない。
【００６６】
これに対し、本実施形態では、ラインバッファ３００の外にフラグ領域３２０を設け、そこに画像データとは別のフラグを書き込む。したがって、現在のラインについてのフラグの値を１つ前のラインについてのフラグと異なる値とすることで、そのフラグが読み取れれば、現在のラインが最後まで書き込まれたと確認することが可能となる。
【００６７】
また以上に説明した例では、リードコマンドの追い越し防止は、画像処理部２００内のＤＭＡＣ２２０の制御により実現されており、相手方であるメモリコントローラ１１６や共有メモリ１１４には特別の構成は不要である。
【００６８】
以上、ラインバッファ３００を用いたライン単位の画像処理の場合の例を説明したが、ライン以外の処理単位、例えばバンドやページを単位とする画像処理の場合も、同様の仕組みが採用可能である。
【００６９】
また、以上に説明した例は、単一の画像処理部２００内でのリード・ライト間の順序を維持するためのものであったが、内部バス１１０上の異なる装置（ＣＰＵ１０２や各画像処理部２００等）が連携して処理を実行する場合にも同様の仕組みでリード・ライト間の順序維持を行ってもよい。以下、異なる装置間でのリードとライトの順序維持の必要性とそのための実施形態について説明する。
【００７０】
例えば第１の画像処理部２００がある処理単位の画像を処理し、その処理結果の画像を別の第２の画像処理部２００が処理する場合を考える。この場合、ＣＰＵ１０２が実行する全体制御のプログラムが、まず第１の画像処理部２００に入力画像の処理を指示し、その処理が終了すると、共有メモリ１１４に書き込まれたその処理の結果の画像の処理を第２の画像処理部２００に指示することが考えられる。ここで、従来であれば、第１の画像処理部２００は、ある処理単位の画像の処理結果の最後の転送単位を共有メモリ１１４に書き込むライトコマンドを発行した時点で、ＣＰＵ１０２（制御プログラム）に対して処理終了を通知する。これを受けたＣＰＵ１０２は、共有メモリ１０２内のその処理結果に対する処理の開始を第２の画像処理部２００に指示し、これに応じて第２の画像処理部２００が共有メモリ１１４内のその処理結果を読み出すリードコマンドを発行する。
【００７１】
この場合、第１の画像処理部２００が処理単位についての処理終了を通知した時点では、まだその処理単位の処理結果の最後のデータが共有メモリ１１４に書き込まれたかどうかは不明である。第２の画像処理部２００は、その処理終了通知をトリガとして共有メモリ１１４のその処理結果を読みに行く。このため、内部バス１１０内でリードコマンドとライトコマンドの順序の入れ替えが生じると、第１の画像処理部２００の処理結果の書き込みが完了する前に、第２の画像処理部２００が共有メモリ１１４上のその処理結果のアドレスを読み出しに行くことが起こりえる。この場合、読み出したデータは正しくないデータを含むことになるので、第２の画像処理部２００の処理が正しく実行されないことになる。
【００７２】
このような問題に対する解決策として、上述の例と同様のフラグを利用した制御が適用可能である。図６に、この変形例における画像処理部２００の処理手順を例示する。
【００７３】
図６の手順では、画像処理部２００は、まずＣＰＵ１０２からある処理単位についての処理開始指示を受信する（Ｓ２０）。この指示には、例えば共有メモリ１１４内に記憶されたその処理単位の入力データのアドレスやサイズの情報、及び処理結果のデータを書き込むべき出力領域のアドレスやサイズの情報を含む。
【００７４】
次に画像処理部２００は、ＤＭＡＣ２２０により共有メモリ１１４からその処理単位の入力データを読み込んで処理し、処理結果のデータをその共有メモリ１１４の出力領域に書き込む（Ｓ２２）。処理結果の最後のデータの書き込みのためのライトコマンドを発行した後、ＤＭＡＣ２２０は、書き込み完了確認のためのフラグを、共有メモリ１１４内の入力データの領域及び出力領域のいずれとも異なる所定のフラグ領域に書き込むライトコマンドを発行する（Ｓ２４）。
【００７５】
Ｓ２４におけるフラグのライトコマンドの発行の後、ＤＭＡＣ２２０は、そのフラグ領域を読み出すリードコマンドを発行する（Ｓ２６）。そして、ＤＭＡＣ２２０は、そのリードコマンドに対して共有メモリ１１４から返されたデータが、Ｓ２４で書き込んだフラグと一致するか否かを判定し（Ｓ２８）、一致しなければ再度フラグ領域の読み出し（Ｓ２６）と判定（Ｓ２８）を繰り返す。Ｓ２８の判定結果がＹｅｓとなると、画像処理部２００は、ＣＰＵ１０２に対して、処理完了の通知を送信する（Ｓ２９）。ＣＰＵ１０２は、処理完了の通知を受け取ると、共有メモリ１１４内のその処理結果のデータを用いて次に処理を行う別の画像処理部２００に対して、処理の開始を指示する。
【００７６】
この変形例において、ＤＭＡＣ２２０が処理単位の後にフラグ領域に書き込むフラグとして、処理単位の識別情報（例えば処理単位がページの場合はページ番号、バンドの場合はバンド番号）を用いてもよい。処理単位の番号をフラグとして用いると、例えば画像処理部２００のデバッグや故障原因究明の際に、フラグ領域３２０のフラグの値を読むことで、どの処理単位まで処理がなされたかが分かる。
【００７７】
また、フラグとして、画像処理部２００の識別情報と処理単位の識別情報との組合せを用いてもよい。例えば画像処理部２００のデバッグや故障原因究明の際に、フラグ領域３２０のフラグの値を読むことで、どの画像処理部２００がどの処理単位まで処理を進めたかが分かる。
【００７８】
図６は、画像処理部２００の処理手順であったが、ＣＰＵ１０２やＤＳＰ１０４も同様の処理を行ってもよい。例えば、ＣＰＵ１０２がプログラムを実行することで生成したデータをある画像処理部２００が画像処理のために利用する場合を考える。例えば、ＣＰＵ１０２が、その画像処理部２００が処理する画像の各ラインの先頭アドレスの座標の配列を生成し、その画像処理部２００はその配列を参照して共有メモリ１１４上の画像データの各ラインを特定して処理を行う等の場合である。このような場合、ＣＰＵ１０２（プログラム）又はこれに付属したＤＭＡＣ２２０が、図６の手順と同様、そのデータの最後の部分を共有メモリ１１４に書き込むライトコマンドを内部バス１１０に発行（Ｓ２２）した後、フラグ領域にフラグを書き込むライトコマンドを発行する（Ｓ２４）。その後、ＣＰＵ１０２等は、フラグ領域をリードし、Ｓ２４で書き込んだフラグが読み出せれば（Ｓ２８がＹｅｓ）、その画像処理部２００に対してそのデータを用いた処理の開始を指示する。
【００７９】
図６の例では、ＣＰＵ１０２（制御プログラム）が、画像処理部２００からの処理完了通知を受けて、次に処理を行う別の画像処理部２００に処理開始を指示した。これに対する別の例として、ＣＰＵ１０２（制御プログラム）を介在させずに、画像処理部２００と、この画像処理部２００の処理結果を用いて処理を行う別の画像処理部２００を連携させる方式もある。以下、この方式の変形例について説明する。
【００８０】
この変形例では、ＣＰＵ１０２は、複数の画像処理部２００が連携する連携処理を開始する際に、それら複数の画像処理部２００に対して処理開始を指示する。この場合、ＣＰＵ１０２は、連携処理における前の画像処理部２００の処理結果を用いて処理を行う必要がある画像処理部２００に対しては、その処理結果及びフラグがそれぞれ書き込まれるはずの共有メモリ１１４内の領域の情報（アドレス、サイズ等）やフラグ領域に書き込まれるはずのフラグの値を特定するフラグ値情報（例えば処理単位毎のフラグの値を決めるルール）を、処理開始の指示に対応付けて通知する。処理開始の指示を受けた画像処理部２００は、例えば定期的にフラグ領域をリードし、フラグ値情報から特定される値が読み出せれば、前の画像処理部２００の処理結果を用いた処理を開始する。
【００８１】
図７に、この変形例における画像処理部２００の処理手順を例示する。この手順は、画像処理部２００は、ＣＰＵ１０２（制御プログラム）から処理開始の指示を受信する（Ｓ３０）ことで開始する。
【００８２】
その指示には、（ａ）画像処理部２００が実行する処理の対象となる入力データ、（ｂ）その処理の開始のトリガとなる開始フラグ（連携処理の最初の処理の場合は不要）、（ｃ）その処理の結果である出力データ、（ｄ）その出力データの書き込みが完了したことを示す完了フラグ（連携処理の最後の処理の場合は不要）、のそれぞれの項目について、共有メモリ１１４でのそれら各項目の記憶領域を表す情報（アドレス、サイズ等）が含まれる。ここで、ある画像処理部２００の出力データ及び完了フラグは、連携処理における次の画像処理部２００の入力データ及び開始フラグとなる。
【００８３】
また、その処理開始指示には、開始フラグの値を特定する開始フラグ値情報が含まれていてもよい。開始フラグ値情報は、画像処理部２００が読み出す開始フラグの領域に、前の画像処理部２００により書き込まれているべき開始フラグの値を特定する情報である。この情報は、開始フラグの値そのものであってもよいし、開始フラグの値を決めるルールを示す情報であってもよい。このルールの一例としては、例えば処理単位の番号を開始フラグとするというルール、その処理単位についての処理結果（出力データ）を生成した画像処理部２００の識別情報とその処理単位の番号との組合せを開始フラグとするというルール等がある。なお、画像処理部２００に開始フラグ値情報があらかじめ設定されている場合には、ＣＰＵ１０２から指示する必要はない。
【００８４】
また、その処理開始指示には、終了フラグの値を特定する終了フラグ値情報が含まれていてもよい。終了フラグ値情報は、画像処理部２００が処理結果の後に共有メモリ１１４に書き込む終了フラグの値を特定する情報である。ある画像処理部２００に与える終了フラグ値情報と、連携処理においてその画像処理部２００の処理結果を用いて処理を実行する別の画像処理部２００に与える開始フラグ値情報とは、互いに対応している。なお、画像処理部２００に終了フラグ値情報があらかじめ設定されている場合には、ＣＰＵ１０２から指示する必要はない。
【００８５】
Ｓ３０の後、画像処理部２００は、ＣＰＵ１０２からの指示に、開始フラグの領域の情報があるかどうかを判定し（Ｓ３２）、この判定の結果がＹｅｓであれば、その開始フラグ領域に対するリードコマンドを発行し（Ｓ３４）、このリードコマンドに応じて共有メモリ１１４から読み出した値が、開始フラグ値情報により特定される開始フラグと一致するか否かを判定する（Ｓ３６）。一致しない場合、画像処理部２００は、開始フラグ領域のリードを繰り返す（Ｓ３４）。一致した場合は、画像処理部２００は、共有メモリ１１４から入力データをリードして自らの処理を実行し、その処理の結果を、指示された出力データの領域に書き込む（Ｓ３８）。そして、処理結果の最後の部分の書き込み（ライトコマンド発行）が完了した後、画像処理部２００は、完了フラグ値情報により特定される完了フラグを、指定された完了フラグ領域に書き込む（Ｓ３９）。
【００８６】
なお、１回の処理開始指示に応じて画像処理部２００が複数の処理単位を処理するケースでは、画像処理部２００はＳ３２〜Ｓ３９の処理を処理単位毎に繰り返せばよい。この場合、ある処理単位についての開始フラグ及び終了フラグとしては、直前の処理単位についての開始フラグ及び終了フラグとは異なる値としてもよい（例えばそれらフラグに処理単位の番号を含めるなど）。
【符号の説明】
【００８７】
１００  画像形成装置、１０２  共有メモリ、１０６  画像読取装置、１１０  内部バス、１１２  画像印字部、１１４  共有メモリ、１１６  メモリコントローラ、２００  画像処理部、２１０  画像処理コア部、２２０  ＤＭＡＣ、２２２  ライトカウンタ、２２４  ライトコマンド生成部、２２６  ライトフラグ生成部、２２８  アドレスサイズ管理部、２３０  リードコマンド生成部、２３２  リードフラグ生成部、２３４  データ判定部、３００  ラインバッファ、３１０  入力画像、３２０  フラグ領域。
【図１】
2018156428.tif 000003
【図２】
2018156428.tif 000004
【図３】
2018156428.tif 000005
【図４】
2018156428.tif 000006
【図５】
2018156428.tif 000007
【図６】
2018156428.tif 000008
【図７】
2018156428.tif 000009