(57)【要約】【課題】  リングバス上のデータを動作基準信号（クロック）毎に次のモジュールに転送しながらリングバス上を周回させ、単一あるいは複数のモジュールで単一あるいは複数ストリーム処理を行うシステムにおいて、特定の処理モジュールにおけるリングバスの占有率を考慮していなかった。【解決手段】  各処理モジュールの処理コアから出力したデータを格納しているパケットで、出力した処理モジュール以外の処理モジュールに処理されていない可能性のあるパケットの個数を推定し、この推定に基づいて処理コアからの出力を制御する。【選択図】  図２
2010287175.tif 000002
【特許請求の範囲】
【請求項１】
リング状に接続されている複数の処理モジュールの夫々によってデータを処理するデータ処理装置であって、
前記処理モジュールの少なくとも１つは、
他の処理モジュールと通信可能に接続されている記憶手段と、
前記記憶手段からデータを取り込んで処理し、処理したデータを前記記憶手段に出力する処理手段と、
前記処理手段の出力したデータのうち、前記複数の処理モジュールに処理されずに残っているデータの個数を管理する管理手段と、
前記管理手段の管理する個数に応じて、前記処理手段が処理したデータを前記記憶手段に出力することを制御する出力制御手段と
を有することを特徴とするデータ処理装置。
【請求項２】
前記管理手段は、前記複数の処理モジュールについてリング状に接続されているバッファの総数と等しいビット数を有するシフトレジスタを有することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記管理手段の管理する個数は、前記処理手段の処理したデータのうち、前記複数の処理モジュールに処理されずに残っている可能性のあるデータの個数であることを特徴とする請求項１又は２に記載のデータ処理装置。
【請求項４】
前記処理手段は処理したパケットにデータを格納して記憶手段に出力し、当該パケットはパケットの格納するデータの有効フラグ、保留フラグ、格納しているデータを出力した処理手段の識別信号を格納することを特徴とする請求項１乃至３のいずれか１項に記載のデータ処理装置。
【請求項５】
前記管理手段は前記処理手段が処理したデータを前記記憶手段に出力する際に、出力したデータに対応するビットを設定し、当該ビットの合計を前記個数として、前記出力制御手段は当該個数が設定値以下になるように前記処理手段の出力を制御することを特徴とする請求項１乃至４のいずれか１項に記載のデータ処理装置。
【請求項６】
前記管理手段は、前記処理手段の出力したデータが他のモジュールから前記記憶手段に入力される可能性がある場合に、前記処理手段の出力したデータが他の処理モジュールによって処理されていることを検出すると、前記管理手段の対応するビットをリセットすることを特徴とする請求項５に記載のデータ処理装置。
【請求項７】
前記処理モジュールは、入力ＦＩＦＯ及び出力ＦＩＦＯを更に有し、前記処理モジュールが入力データを受け取るサイクル数をＣ、リングバス上のバッファ数をＮとしたとき、入力ＦＩＦＯの段数ＳをＮ／Ｃ以上とすることを特徴とする請求項１乃至６のいずれか１項に記載のデータ処理装置。
【請求項８】
前記処理モジュールがデータを出力するサイクル数をＣ’、リングバス上のバッファ数をＮとしたとき、前記出力ＦＩＦＯの段数Ｓ’をＮ／Ｃ’以上とする請求項７に記載のデータ処理装置。
【請求項９】
リング状に接続されている複数の処理モジュールの夫々によってデータを処理するデータ処理装置を制御するプログラムであって、コンピュータを、
他の処理モジュールと通信する記憶手段と、
前記記憶手段からデータを取り込んで処理し、処理したデータを前記記憶手段に出力する処理手段と、
前記処理手段の処理したデータのうち、前記複数の処理モジュールに処理されずに残っているデータの個数を管理する管理手段と、
前記管理手段の管理する個数に応じて、前記処理手段が処理したデータを前記記憶手段に出力することを制御する出力制御手段として機能させることを特徴とするプログラム。
【請求項１０】
リング状に接続されている複数の処理モジュールの夫々によってデータを処理するデータ処理装置を制御するデータ処理方法であって、
前記処理モジュールの少なくとも１つについて、
他の処理モジュールと通信する通信工程と、
記憶手段からデータを取り込んで処理し、処理したデータを前記記憶手段に出力する処理工程と、
前記処理工程で処理したデータのうち、前記複数の処理モジュールに処理されずに残っているデータの個数を管理する管理工程と、
前記管理工程で管理する個数に応じて、前記処理工程で処理したデータを前記記憶手段に出力することを制御する出力制御工程と
を有することを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は複数の処理モジュールによって一連の処理を行うデータ処理装置、データ処理方法およびプログラムに関する。
【背景技術】
【０００２】
従来、複数のプロセッサで画像処理を並列に処理するため、データに制御コードを付けてリングバスに送出し、制御コードに従ってデータの取り込むことでオーバーラップしているデータを複数のプロセッサで受信する方法がある（特許文献１）。
【０００３】
各プロセッサによる処理の順番の変更を可能にし、バス競合による処理速度の低下を少なくするため、複数画像処理手段と（入出力）制御手段をリング状に接続し、データをパケット化して該リング状に接続したバス上を単方向に転送する方法もある（特許文献２）。
【０００４】
また、処理要素をリングバスで結合し、それぞれの処理要素がクロック信号、タイプ・フィールド信号および情報フィールド信号を一方向に送り、情報準備信号およびビジー信号を逆方向に送ることで通信帯域幅を確保している方法もある。（特許文献３）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開昭６３−２４７８５８号公報
【特許文献２】特許第０３９０７４７１号公報
【特許文献３】特許第０３８８０７２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１−３の方法では、他の処理モジュールによってリングバスが占有されてしまう状況に陥りやすい。この状況になってしまうと、処理モジュールからリングバス上にデータを出力できる場所（以下、空きスロットと記す）がなくなり、データ転送効率が落ちてしまう。特に、画像を拡大する処理のように、１画素の入力から複数の画素を出力するようなモジュールの１つがリングバス上の空きスロットを一度に使い果たしてしまうと、他の処理モジュールがリングバス上にデータを出力できなくなることもある。こうなるとデータ転送ができなくなる状態（デッドロック）が発生してしまう。
【０００７】
そこで、リングバス上のデータ量の管理を行って資源（スロット）を有効活用し、処理の高速化、およびデッドロックの発生を抑制する装置、方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
この課題を解決するために本発明のデータ処理装置は、リング状に接続されている複数の処理モジュールの夫々によってデータを処理するデータ処理装置であって、前記処理モジュールの少なくとも１つは、他の処理モジュールと通信可能に接続されている記憶手段と、前記記憶手段からデータを取り込んで処理し、処理したデータを前記記憶手段に出力する処理手段と、前記処理手段の出力したデータのうち、前記複数の処理モジュールに処理されずに残っているデータの個数を管理する管理手段と、前記管理手段の管理する個数に応じて、前記処理手段が処理したデータを前記記憶手段に出力することを制御する出力制御手段とを有することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、複数の処理モジュールについて、ある処理モジュールの処理したデータが複数の処理モジュールにどれくらい残っているかを推定して、その推定に基づいてこの処理モジュールの出力を調節できる。従って、複数の処理モジュール全体（リングバス）における、自身のモジュールの占有率を推定することができ、スロットの有効利用及びリングバスのデッドロック発生の抑制をすることができる。
【図面の簡単な説明】
【００１０】
【図１】画像処理装置の全体構成を示すブロック図である。
【図２】画像処理部の回路構成を示すブロック図である。
【図３】リングバス制御の動作を示す図である。
【図４】パケットのフォーマットと出力制御部の挙動を示す図である。
【図５】画像処理モジュールＡ２１０の他の構成を示すブロック図である。
【発明を実施するための形態】
【００１１】
＜実施例１＞
本発明の一形態である実施例１の画像処理装置の構成について図１のブロック図を参照して説明する。
【００１２】
画像読取部１２０は、ＣＣＤセンサ１２４、アナログ信号処理部１２６等を有し、レンズ１２２を介しＣＣＤセンサ１２４に結像された原稿１００の画像を、ＣＣＤセンサ１２４によりＲ（Ｒｅｄ），Ｇ（Ｇｒｅｅｎ），Ｂ（Ｂｌｕｅ）のアナログ信号に変換する。変換された画像情報は、アナログ信号処理部１２６に入力され、Ｒ，Ｇ，Ｂの色毎に補正等が行われた後にアナログ・デジタル変換（Ａ／Ｄ変換）される。デジタル化されたフルカラー信号（以下、多値デジタル画像信号という）は、画像処理部１３０に入力される。画像処理部１３０はデジタル画像信号に対し、入力補正処理、空間フィルタ処理、色空間変換、濃度補正処理、中間調処理を施し、画像出力部１４０へ処理後のデジタル画像信号を出力する。画像出力部１４０は、たとえば、インクジェットヘッドやサーマルヘッド等を使用した印刷出力部（図示せず）を有し、入力されたデジタル画像信号により紙上に画像を記録する。
【００１３】
また、システム制御部１１０は、演算制御用のＣＰＵ１１２、固定データやプログラムを格納するＲＯＭ１１４、データの一時保存やプログラムのロードに使用されるＲＡＭ１１６等を有する。そして、画像読取部１２０、画像処理部１３０、画像出力部１４０等を制御し、本装置のシーケンスを統括的に制御する。外部記憶装置１１８は、本装置が使用するパラメータやプログラムを記憶する媒体であり、ＲＡＭ１１６はデータやプログラム等を、ＲＯＭ１１４や外部記憶装置１１８からロードできる構成となっている。
【００１４】
図２は、本実施例の画像処理部１３０の回路構成を示すブロック図である。アナログ信号処理部１２６から送られるデジタル画像信号はバス２０５を経由して画像処理コントローラ２００に入力される。さらに、画像処理コントローラ２００がデータを処理し、処理したデータを、バス２９５を経由して画像出力部１４０へ出力する。
【００１５】
画像処理コントローラ２００は１段以上のバッファと画像処理コアを持つ画像処理モジュールＡ（２１０）〜Ｈ（２８０）を有している。バッファＡ２１１の出力がバッファＢ２２１（他の処理モジュール）の入力に接続され、同様にバッファＢ〜Ｈの間とバッファＨ〜バッファＡの間も接続されることで、各画像処理モジュールはリング状に接続されている。各画像処理モジュール２１０〜２８０はバスからの入力を画像処理コアとバッファの夫々で受信する。また、画像処理コア２１２〜２８２は処理したデータをバッファに出力し、バッファ２１１〜２８１はリングバスからの入力と画像処理コアからの出力を状況に応じて選択的に受信する。
【００１６】
図に示す、モジュールＡとモジュールＨは処理によってデータ数を増加させるモジュール（受け取るデータ数＜出力するデータ数）であり、それぞれ管理レジスタＡ２１３、管理レジスタＨ２６３を有している。管理レジスタＡ２１３と管理レジスタＦ２６３はシフトレジスタであって、リングバスを構成するバッファの総段数と等しい８ビットのビット数を有する。ここでは説明を簡単にするために各モジュールのバッファ段数は１段、リングバスを構成するモジュール数はＡからＨの８個、管理レジスタのビット数は８ビットとしているが、必要に応じてこれらの構成数は変更できる。但し、管理レジスタのビット数をリングバスに接続されるバッファ総段数と一致させる必要がある。
【００１７】
図４（ａ）は本実施例の画像処理部で用いるパケットの構成を示す。図中、フィールド４０１はパケットが有効であることを示す有効フラグ（ｖａｌｉｄフラグ、  “１”で有効  “０”で無効）を格納する。また、フィールド４０２はパケットの格納するデータがある処理モジュールで処理を保留されたことを示す保留フラグ（ｓｔａｌｌフラグ、“１”で保留状態にあり、“０”で保留状態にはないとする）を格納する。フィールド４０３はパケットが格納しているデータを送信元（最も直前にデータに処理を加えたモジュールに相当する）を示す送信元ＩＤ（識別信号）を格納する。フィールド４０４はデータの送信順（１つのモジュールに着目した場合には処理順に相当する）を示すカウント値を格納し、フィールド４０５は送信するデータを格納する。
【００１８】
以下、画像処理モジュールＡ２１０に着目しリングバスとバッファの動作を説明する。リングバスに画像処理コアＡの処理したデータを出力する際は、まずバッファＡ２１１に入力される入力パケットのｖａｌｉｄフラグ４０１を画像処理コアＡが監視し、ｖａｌｉｄフラグ４０１が“０”の無効パケット（空スロット）が格納されているスロットを探す。入力パケットのｖａｌｉｄフラグ４０１が有効を示す“１”の場合、画像処理コアＡはバッファＡ２１１に入力される入力パケットを、次のクロックで画像処理モジュールＢ２２０にそのまま出力するように制御する。ここで、スロットとは一定時間幅（サイクルタイム）で区切られたリングバスの状態を示し、パケットはスロットに載せる（入出力する）データを示す。従って、１つのスロットには１つのパケット（無効パケットを含む）が存在する。
【００１９】
一方、入力パケットのｖａｌｉｄフラグ４０１が無効を示す“０”（以降、０：無効、の様に表記する）の場合（空スロット）、バッファＡ２１１に格納されるパケットの、ｖａｌｉｄフラグ４０１を“１：有効”に変更し、ｓｔａｌｌフラグ４０２を“０：無効”に変更する。更に、画像処理モジュールＡのモジュールＩＤ（送信元ＩＤ）と、出力カウンタ（不図示）の値と、画像処理コアＡの処理したデータとをバッファＡ２１１に格納しパケットを生成する。このように、空スロットにパケットを格納する際、バッファＡのパケットの値を変更したりデータを上書きしたりしてもよいし、画像処理コアＡからのデータと各フィールド値とを有するパケットを生成してパケット単位で上書きしてもよい。なお、画像処理モジュールＡの処理したデータを格納するパケットは、次のクロックで画像処理モジュールＢ２２０に出力するように出力制御Ａ２１４が制御する。この際に、出力カウンタをインクリメントして、次に処理するデータの識別に用いる。
【００２０】
次に画像処理モジュールＨを例に挙げてデータ受信側の挙動を説明する。画像処理コアＨは、バッファＨ２８１に入力される入力パケットのｖａｌｉｄフラグ４０１、送信元ＩＤ４０３、カウント値４０４を監視する。そして、ｖａｌｉｄフラグ４０１が“１：有効”で、送信元ＩＤ４０３が予め画像処理モジュールＨの入力ＩＤ設定レジスタ（不図示）に設定されている入力ＩＤと一致し、カウント値４０４が入力カウンタ値と一致するパケットであるか判定する。これらの条件を満たすパケットは、画像処理モジュールＨが次に処理すべきデータを格納するパケットである。
【００２１】
そして、処理すべきパケットを検出し、画像処理コアがデータを受信可能であるなら、入力パケットからデータを取り込む。データを取り込んだパケットは無効化して空パケットとするために、画像処理コアＡがｖａｌｉｄフラグをクリア（“０：無効”に変更）してバッファＨからバスへ送信させる。また、画像処理コアＨがパケットを取り込み、ｖａｌｉｄフラグ４０１を無効にして次のバッファへ出力してもよい。なお、データをパケットから取り込む際には、入力カウンタ（不図示）をインクリメントし、入力カウンタ値を更新する。
【００２２】
一方、画像処理コアがデータを受信不可能であるなら、画像処理コアＨは入力パケットのｓｔａｌｌフラグ４０２を“１：有効”に変更し（即ち、データの取り込みを保留）次のバッファへ出力する。なお、入力カウンタと出力カウンタは、同期を取るため、データ転送開始前に同じ値に初期化される。
【００２３】
次に本実施例で使用する、出力データ管理方法について図３を用いて説明する。図３はＡ⇒Ｈの順番でパイプライン処理をする場合について、状態（ａ）〜（ｈ）におけるリングバスのバッファＡ〜Ｈと管理レジスタＡ（ＢＩＴ０〜７の８段のレジスタ）の格納する情報を示している。
【００２４】
図３（ａ）に示すように初期状態ではバッファ及び管理レジスタ、入力カウンタ、出力カウンタをクリアする。
【００２５】
図３（ｂ）は、画像処理モジュールＡ２１０に外部入力Ｉ／Ｆ２０５よりデータが入力され画像処理コアＡ２１２にて処理が実行された状態を示す。この時、画像処理モジュールＡ２１０の画像処理コアＡ２１２はバッファＡ２１１へパケット３０１を出力する。これによってバッファＡにパケット３０１がセットされる。同時に、管理レジスタＡ２１３は、最上位ビット（ＢＩＴ：７）に１をセットする。
【００２６】
図３（ｃ）は、図３（ｂ）の状態から次のクロック（又は次のサイクルタイム、以下同様）が入った状態を示す。図に示すように、バッファＡ２１１のパケット３０１はバッファＢに移動し、管理レジスタＡ２１３はパケット３０１に対応するビットを右に１ビットだけシフトする（ＢＩＴ７のビットをＢＩＴ６に移動させる）。また、画像処理コアＡ２１２は次の出力データを出力し、パケット３０２がバッファＡにセットされる。ここで、管理レジスタＡ２１３はパケット３０２に対応するように、最上位ビットに１をセットする。なお、ここでは説明の簡略のため、画像処理モジュールＡ２１０が出力する出力パケットは、リングバス上に同時に２つまで存在するように制限するものとする。
【００２７】
図３（ｄ）は、図３（ｃ）の状態から次のクロックが入った状態を示す。クロックに応じて、パケット３０２とパケット３０１はそれぞれバッファＢ２２１およびバッファＣ２３１（不図示）に移動する。また、クロックに応じて、管理レジスタＡ２１３は管理するビットをリングバスのデータ転送方向と同じ方向に１ビットずつシフトさせる。ここで、画像処理コアＡ２１２からの次のパケットの入力が無かったので（前述の制限によって出力されない場合も同様）、バッファＡ２１１にはバッファＨから移動してきた無効パケットをセットし、管理レジスタＡ２１３の最上位ビットを０とする。
【００２８】
以下同様に処理を繰り返して図３（ｄ）の状態から４クロック後の状態を図３（ｅ）に示す。図３（ｄ）の状態で、バッファＢとバッファＣにあったパケット３０２とパケット３０１は、バッファＦとバッファＧに移動する。さらに、管理レジスタＡ２１３はパケット３０２とパケット３０１に対応するように、ビット２およびビット１にそれぞれ１がセットされた状態となる。
【００２９】
図３（ｆ）は、図３（ｅ）の状態から次のクロックが入った状態を示す。パケット３０１はバッファＨに送られて、画像処理モジュールＨ２８０の画像処理コアＨ２８２に取り込まれる。ここで、データ取り込まれた際にバッファＨ２８１のパケットを無効パケット（入力パケットのｖａｌｉｄフラグ４０１を“０：無効”としたもの）にする。同時に、バッファＦ（不図示）のパケット３０２はバッファＧに移動している。また、管理レジスタＡ２１３はＢＩＴ０〜７に格納している値をリングバスのデータ転送方向と同じ方向に１ビットシフトさせる。これにより管理レジスタＡのＢＩＴ１とＢＩＴ０にそれぞれ１がセットされた状態となっている。ここで管理レジスタＡのＢＩＴ０〜ＢＩＴ７の “１”という情報は、画像処理コアＡが出力したパケットのリングバス上の位置を示している。この“１”の個数の合計は画像処理コアＡの出力したパケットで画像処理モジュールＢ〜Ｈに処理されずに残っている可能性のあるパケットの推定値となる。実際は他の処理モジュールがパケットを受信して処理しているため、消滅している場合もあるが、ＢＩＴ０〜ＢＩＴ７の“１”の数は、実際に画像処理モジュールＡ〜Ｈ（又はリングバス）に処理されずに残っているパケットの総数（真値）を越えない。
【００３０】
このとき、管理レジスタＡ２１３のＢＩＴ０は“１”を格納している。バッファＡ２１１はパケット３０１を格納したスロットが次のクロックでバッファＡに戻ってくる事を検知できる。よって、ＢＩＴ０が“１”の場合は次のクロックが入ったときにバッファＡ２１１に入力されるパケットを調べることで、モジュールＡ２１０の出力したパケットに格納したデータが他のモジュールに受信されたかどうかを検出できる。例えば管理レジスタＡ２１３のＢＩＴ７に対応するパケットが無効パケットとなっている場合や、パケットの送信元ＩＤ４０３が自身の出力したデータに格納されるべきＩＤと異なる場合は、他のモジュールにてパケットの格納するデータが正常に取り込まれたと判断できる。
【００３１】
図３（ｇ）は図３（ｆ）の状態から次のクロックが入った状態を示す。
【００３２】
前述したように、入力されるパケットを調べてモジュールＡ２１０のパケットに格納するデータが他のモジュールに取り込まれたかどうかを判定する。この例では、画像処理モジュールＨ２８０にてパケットが取り込まれバッファＨ２８１からバッファＡ２１１に格納されるパケットは無効パケットとなっているので、パケット３０１のデータは他のモジュールに取り込まれたと判断できる。即ち、リングバス上のデータ数が１つであることが分かる。
【００３３】
また、画像処理コアＡ２１２がデータ出力待ちである場合、バッファＡ２１１には次の出力パケット３０３が格納される。そして、バッファＨ２８１にはバッファＧ２７１のパケット３０２が移動する。さらに、管理レジスタＡ２１３は格納している値を１ビットシフトさせて、最上位ビット（ＢＩＴ７）と最下位ビット（ＢＩＴ０）に１をセットする。なお、ここでは画像処理モジュールＨ２８０は、受信したパケット３０２を処理できない状態（又は、取り込みをしない状態）にあるものとしてパケット３０２のｓｔａｌｌフラグ４０２をセットする（即ち、データの取り込みを保留した状態）。一方で、画像処理コアＡ２１２がデータ出力待ちでない場合は管理レジスタのＢＩＴ７に“０”を格納することで、処理されていないパケットに対応するビットをリセットする。
【００３４】
また、管理レジスタＡ２１３の最下位ビットに“１”が格納されているので、次のクロックで再びモジュールＡ２１０が出力したパケットを格納するスロットがバッファＡに戻ってくることが判る。
【００３５】
図３（ｈ）は図３（ｇ）の状態から次のクロックが入った状態を示す。ここで、バッファＨ２８１でパケット３０２のｓｔａｌｌフラグ４０２には“１：保留有効”がセットされている為、パケット３０２のデータは他のモジュールに取り込まれなかったと判断する。そして、パケット３０２はそのままバッファＡ２１１に移動し、管理レジスタＡ２１３は格納している値を１ビットシフトさせ、ＢＩＴ７とＢＩＴ６に１が格納された状態となる。
【００３６】
以降、このパケット３０２は画像処理モジュールＨ２８０の画像処理コアＨ２８２に取り込まれるまでリングバスを周回する。
【００３７】
そして、パケット３０２が画像処理コアＨ２８２に取り込まれると、次のクロックで、バッファＡの格納するパケットのｖａｌｉｄフラグ４０１が“０：無効”、または、このパケットの送信元ＩＤ４０３がバッファＡの出力するデータに格納されるＩＤと異なることになる。この時、管理レジスタＡ２１３の最下位ビットが１になっているので、これらによってモジュールＡは、パケット３０２の格納するデータが他のモジュールに取り込まれたことを検知できる。よって、リングバスに出力したデータは正常に受信されたと判定できるので、以降、モジュールＡは空スロットにデータを出力できる。
【００３８】
次に図４（ｂ）を用いて出力制御部の動作を説明する。以下、画像処理モジュールＡ２１０を例に説明すると、図４（ｂ）は管理レジスタＡ２１３の最下位ビットが１の場合に、次のクロックでバッファＡに入力されるパケットの各フィールドの値と、それに応じた出力制御部Ａの挙動を示すものとなる。
【００３９】
まず、管理レジスタＡ２１３（例えば、ＢＩＴ０〜７）の“１”が格納されている個数が設定値未満の場合、画像処理モジュールＡ２１０は空スロットにバケットを出力できる。一方、管理レジスタＡ２１３上で“１”が格納されている数が設定値の場合、自身がパケットを出力したスロットが空スロットとなっているか、または、他の画像処理モジュールによってパケットが上書きされている場合のみ、データ出力が可能である。ここで、設定値は、画像処理モジュールＡの出力するパケットがリングバスに同時に存在できる最大数であって、予め管理レジスタを有する各モジュールのレジスタ（不図示）に設定される。
【００４０】
画像処理モジュールＡ２１０は、自身が出力したパケットが取り込まれるタイミングは受け取る画像処理モジュールの状態によるため、通常は知ることはできない。しかしなから、管理レジスタＡを参照すると画像処理モジュールＡがパケットを出力したスロットがバッファＡに戻ってくるタイミングが判定でき、そのスロットに画像処理モジュールＡの出力したパケットがなければ、パケットが受信されたことが推定できる。
【００４１】
つまり、管理レジスタＡ２１３の最下位ビットが１の時は、次のクロックで自身がパケットを出力したスロットがリングバス上を一周してきたことになる。従って、このときの入力パケットのｖａｌｉｄフラグ４０１が無効である（受信され、空スロットとなっている）か、送信元ＩＤ４０３が自身のＩＤでないならば、パケットが受信され、リングバス上から消滅していることが推定できる。
【００４２】
図４（ｂ）では、Ｖの項はｖａｌｉｄフラグ４０１を、Ｓの項はｓｔａｌｌフラグ４０２を、ＩＤの項は送信元ＩＤ４０３の値を示す。各フラグの定義は図４（ａ）で説明したとおりである。
【００４３】
バッファＡに入力されるパケットのｖａｌｉｄフラグ４０１が０なら、パケットの格納するデータは他のモジュールに受信され空スロットとなっているので、正常受信と判定し、この空スロットに画像処理コアＡ２１２のデータを格納して送信可能であると判断する。
【００４４】
また、ｖａｌｉｄフラグ４０１が１であっても、送信元ＩＤ４０３が自身のＩＤでないなら、パケットに格納したデータは他のモジュールに受信され、さらに他のモジュールの出力パケットが上書きされたと推定されるので、正常受信と判定し、送信を可能とする。
【００４５】
また、ｖａｌｉｄフラグ４０１が１で、ｓｔａｌｌフラグが０で、送信元ＩＤ４０３が自身のＩＤの場合は、パケットを受信するモジュールが見つからずにリングバスを１周してきたことになるので、受信なし（エラー）と判定し、送信を可能とする。なお、ｖａｌｉｄフラグ４０１が１で、送信元ＩＤ４０３が自身のＩＤの場合で、該スロットに新たにパケットを出力しない場合は、ｖａｌｉｄフラグ４０１を無効にし空スロットとする。
【００４６】
また、ｖａｌｉｄフラグ４０１が１で、ｓｔａｌｌフラグも１なら、他のモジュールが処理をするデータなので、モジュールＡ２１０によってこのパケットを上書きすることはでき。よって、送信は不可とする。
【００４７】
また、モジュールＡ２１０は管理レジスタＡ２１３上でビット“１”が格納されている数をカウントすることで、リングバスに存在する自身が出力したデータがそのまま処理されずに存在するパケットの数（最大数）を推定できる。また、このカウントした数が設定値以下になるように制御することにより、リングバス上のスロット占有率の最大値を確実に制御できるため、デットロックを抑制することが可能となる。
【００４８】
なお、設定値（自身が出力したパケットがリングバス上に同時に存在できる上限）をリングバスのノード数（モジュールＡ〜Ｈの場合８個）以上にするとデッドロック抑制効果は弱い（但し、各モジュールがパケットを１つ保持する条件下で、他にバッファ等を持たない場合）。従って、各モジュールに設定する設定値は少なくともノード数より小さい値であることが好ましい。
【００４９】
また、管理レジスタは本実施形態のモジュールＡ、Ｈのようなデータ数を増やすモジュール（受け取るデータ数＜出力するデータ数）だけに設けることが好ましい。あるいは、モジュールの処理内容を自由に設定でき、設定によってデータ数の増減が変わるモジュールにも設けるとよい。他に例えば、全てのモジュールに管理レジスタを設けて、データ数を増やす処理内容を割り当てたモジュールの管理レジスタだけ動作させ、他はＯＦＦするようにしてもよい。一方で、パイプライン処理の最終段に該当する事が予め設定されているモジュールは、自身の出力したパケットは順次リングバスから出力されるので、管理レジスタを設ける必要はない。
【００５０】
また、各モジュールの管理レジスタの設定値の総和をモジュール総数（但し、各モジュールがパケットを１つ保持する条件下で、他にバッファ等を持たない場合のみ）以下にすれば、リングバスの各モジュールの占有率の最大値が１００％を越えないので、デッドロックを抑制できる。
【００５１】
以上の説明では画像処理モジュールＡと管理レジスタＡについて説明したが、画像処理モジュールＨと管理レジスタＨの処理も同様である。
【００５２】
以上説明したように、管理レジスタの最下位ビットの値と次のクロックでバッファに入力されるパケットのフラグ及びＩＤ情報を確認しながらデータの出力制御を行うことで、リングバスに出力したデータの数（占有率）を制御することが可能となる。
【００５３】
本実施例では８番目の画像処理モジュールＨが画像処理モジュールＡの出力したデータを処理することとしたが、所望の順番で各モジュールに処理をさせたい場合、各モジュールのＩＤ設定レジスタを調節することで実現できる。また、画像処理モジュールＡの出力したデータを画像処理モジュールＢ２２０が処理する場合、画像処理モジュールＢ２２０が受信して無効パケットとなったスロットに画像処理モジュールＢ２２０自身がそのまま新たなデータを出力することもできる。
【００５４】
また、管理レジスタの最下位ビットで“１”を検出して次のクロックで入力されるパケットの情報（ｖａｌｉｄフラグや接続ＩＤ）を確認する換わりに、クロックが入ってから最上位ビットの“１”を検出すると同時にパケットの情報を確認するようにしてもよい。
【００５５】
また、処理モードに応じて、出力制御部が設定値を変更してもよい。
【００５６】
＜実施例２＞
本実施例は、実施例１で説明した画像処理モジュールの画像処理コアの入出力部にＦＩＦＯをつけ、リングバッファの状態によらず、画像処理コア部が滞りなく動作するようにしたものである。
【００５７】
図５は実施例２における画像処理モジュールＡ２１０の構成を示すブロック図である。図中、実施例１における図２の構成と同じ機能を有するものには同じ符号を付し、詳細な説明は省略する。本実施例では画像処理モジュールは入力ＦＩＦＯ２１５、出力ＦＩＦＯ２１６を有する。
【００５８】
実施例１の構成では、画像処理コアＡ２１２がデータの受信を保留（入力パケットにｓｔａｌｌフラグ“１”を設定）すると、次に同じデータが画像処理コアＡに供給されるのは、リングバスを１周回ってきた時となる。実施例２では、リングバスを１周回ってくる時間、入力ＦＩＦＯにデータをためることができる。また、上記入力ＦＩＦＯをつけた場合、データの受信を保留する（入力パケットにｓｔａｌｌフラグ“１”を設定する）のは、入力ＦＩＦＯの空がなくなった時である。従って、画像処理コアＡ２１２の入力データの消費サイクル数をＣ（Ｃクロックに１回データを消費）、リングバス上のバッファ数をＮとすると、入力ＦＩＦＯの段数Ｓが
Ｓ≧Ｎ／Ｃ                                          （式１）
を満たせば保留したデータがリングバスを１周回ってくる間、画像処理コアＡ２１２に滞りなくデータを供給することができる。同様に、画像処理モジュールＡ２１０の入力パケットが、Ｎ／Ｃ以上の個数だけ、リングバス上に存在していれば、前記入力ＦＩＦＯが空になることはない。つまり、（式１）を満たすＳ段以上のＦＩＦＯを持ち、Ｓ個以上の入力パケットがリングバス上に存在するように制御すれば、画像処理コアＡ２１２に滞りなくデータを供給することができる。
【００５９】
一方、出力ＦＩＦＯにおいては、画像処理コアＡ２１２の出力データのサイクルをＣ’（Ｃ’クロックに１回データを出力）、出力ＦＩＦＯの段数Ｓ’は、
Ｓ’≧Ｎ／Ｃ’                                          （式２）
を満たし、かつ、リングバス上にＮ／Ｃ’以上の個数の空スロットが存在するように制御すれば、画像処理コアＡ２１２の出力データを滞りなく出力可能となる。
【００６０】
また、入力ＦＩＦＯや出力ＦＩＦＯの段数に応じて、リングバス全体のパケットの論理的な総量が変わるため、実施例１で説明した設定値もそれに応じて変えるようにしてもよい。実施例２では、実施例１に比べると各モジュールの設定値をノード総数以下にする必要性は低い。
【００６１】
前述の各実施例で説明した画像処理装置は、画像読取部や画像処理部、又は画像出力部をそれぞれ別の装置で実現してもよいし、いずれかまたは全てが一体となった装置で実現しても良い。また、画像読取部はスキャナ装置であってもよいし、デジタルカメラやデジタルビデオカメラなどの撮像装置であってもよい。さらに画像出力部はプリンタなどの印刷装置であってもよいし、ディスプレイモニタなどの表示装置であってもよい。それぞれ別の装置で構成される場合は、互いに通信可能なようにＬｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＬＡＮ）などで接続されている。また、前述の各実施例では画像処理装置を例に説明しているが、本発明は画像処理に限られるものではない、複数の処理モジュールに処理を分割するようなデータ処理装置で、パイプライン処理などの一連の処理を実行させる際に適用すると好ましい効果が得られる。
【００６２】
また、前述の各実施例の処理は、複数のハードウェアとソフトウエアの協同によって実現するようにしてもよい。この場合、ネットワーク又は各種記憶媒体を介して取得したソフトウエア（プログラム）をコンピュータ等の処理装置（ＣＰＵ、プロセッサ）にて実行することで実現できる。
【００６３】
また、本発明は前述した実施例の機能をコンピュータに実現させるプログラムを記憶した記憶媒体を、システム或いは装置に供給することによって実現してもよい。
【図１】
2010287175.tif 000003
【図２】
2010287175.tif 000004
【図３】
2010287175.tif 000005
【図４】
2010287175.tif 000006
【図５】
2010287175.tif 000007