(57)【要約】【課題】  リングバスに接続されたデータ処理装置において、複数のデータ処理ストリームを投入した場合や、処理回路内部でデータ量が増減してしまうケースが存在する際に発生し得る、デッドロックや、リングバスの実効効率の低下を軽減する必要がある。【解決手段】  リングバスの動作速度を、データ処理にかかる動作速度よりも早くすることにより、リングバスを周回するデータによるデータ出力抑制の機会を減らし、処理効率の低下を抑制する。【選択図】  図５
2010277429.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理モジュールがバスを介してリング状に接続され、該処理モジュールがパケットをリング上の一方向に転送してデータを処理するデータ処理装置であって、
前記処理モジュールは、
当該処理モジュールの受信するパケットが格納するデータを処理して出力する処理手段と、
前記処理手段の出力したデータを格納するパケットを下流側の処理モジュールに送信する送信手段と、
前記処理手段が１つのパケットを処理して出力するまでに所定長の処理時間を要する際に、当該所定長の処理時間の間に複数のパケットを前記送信手段が送信できるように前記送信手段を制御する制御手段と
を有することを特徴とするデータ処理装置。
【請求項２】
前記制御手段は、前記複数の処理モジュールの夫々の処理時間について、当該処理時間の最大公約数以下の長さの時間に１つのパケットを送信できるように前記送信手段を制御することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記複数の処理手段が行うパイプライン処理の内容に応じて、各処理モジュールに対して当該モジュールが処理すべきパケットのＩＤを設定する設定手段を更に有することを特徴とする請求項１又は２に記載のデータ処理装置。
【請求項４】
前記処理すべきパケットのＩＤを格納するレジスタを有しており、前記パケットのＩＤと当該処理すべきパケットのＩＤとが一致するパケットの格納するデータを前記処理手段へ転送する受信手段を更に有することを特徴とする請求項１乃至３のいずれか１項に記載のデータ処理装置。
【請求項５】
前記受信手段は前記パケットのＩＤと処理すべきパケットのＩＤとが一致しないパケットについては前記バスへそのまま通過させることを特徴とする請求項４に記載のデータ処理装置。
【請求項６】
前記リング状のバスに前記データを入力する入力手段を更に有することを特徴とする請求項１乃至５のいずれか１項に記載のデータ処理装置。
【請求項７】
入力されるパケットのＩＤに応じて、当該パケットをリング状のバスから外手段へ出力する出力手段を更に有することを特徴とする請求項１乃至６のいずれか１項に記載のデータ処理装置。
【請求項８】
前記送信手段は、当該送信手段に固有のＩＤを格納しているレジスタを更に有し、前記処理手段が処理したデータと前記固有のＩＤとを格納するパケットを前記バスへ送信することを特徴とする請求項１乃至７のいずれか１項に記載のデータ処理装置。
【請求項９】
前記送信手段は、前記パケットのＩＤと処理すべきパケットのＩＤとが一致し且つ前記処理手段がデータを受け付けない状態である場合に、前記パケットに保留情報を付加して転送することを特徴とする請求項１乃至８のいずれか１項に記載のデータ処理装置。
【請求項１０】
複数のモジュールがリングバスに接続され、前記複数のモジュールが予め設定された順番でデータ処理を行うデータ処理装置において、
前記モジュールの夫々が、
受信するデータを所定の時間だけ保持する保持手段と、
前記保持手段の保持するデータを他のモジュールに送信する送信手段と
を有することを特徴とするデータ処理装置。
【請求項１１】
複数のモジュールがリングバスに接続され、前記複数のモジュールが予め設定された順番でデータ処理を行うデータ処理装置において、
前記モジュールは、リングバス上のデータの送受信を行う通信手段と、受信されたデータの処理を行う処理手段とを有し、
前記通信手段と前記処理手段の間にあって、受信したデータを一時保持する入力ＦＩＦＯと、前記処理手段にて処理済みの出力データを一時保持する出力ＦＩＦＯと、前記入力ＦＩＦＯから前記出力ＦＩＦＯに処理手段を介さずにデータを送る処理スルー手段と、前記処理スルー手段の動作を切り替える切り替え手段と
を有することを特徴とするデータ処理装置。
【請求項１２】
前記切り替え手段は、
前記リングバス上にあって有効に動作するデータ保持手段の総数をＫ、有効に動作する処理手段の総数をＬ、リングバスに同時に投入するデータ処理ストリームの本数をＳとする場合に、
Ｋ≧Ｌ×Ｓとなるように前記処理スルー手段を切り替えることを特徴とする請求項１１に記載のデータ処理装置。
【請求項１３】
前記送信手段が生成するパケットは、格納するデータが有効であるかどうかを示す情報と、当該パケットが保留状態にあるかどうかを示す情報と、最後に出力したモジュールのＩＤと、リングバスへ入力した順を示し情報とを有することを特徴とする請求項１乃至１２のいずれか１項に記載のデータ処理装置。
【請求項１４】
前記リング状のバスに接続されているデータ保持手段と、
当該データ保持手段の段数を変更する変更手段とを更に備えることを特徴とする請求項１乃至１３のいずれか１項に記載のデータ処理装置。
【請求項１５】
前記送信手段、前記処理手段の少なくとも１つの動作速度を制御する動作速度制御手段を更に備えることを特徴とする請求項１乃至１４のいずれか１項に記載のデータ処理装置。
【請求項１６】
前記動作速度制御手段は、前記リング状のバスに接続されている個々のモジュールの間にそれぞれ挿入されるデータ保持手段のうち有効に動作する段数をＮとし、リング状のバスに接続されているデータ保持手段のうち有効に動作する段数をＭとする場合に、前記送信手段の動作速度を処理手段の動作速度に対して（Ｎ＋Ｍ）の整数倍となるように制御することを特徴とする請求項１５に記載のデータ処理装置。
【請求項１７】
前記動作速度制御手段は、前記リング状のバスに接続され有効に動作するデータ保持手段の総数をＫとし、前記有効に動作する処理手段の総数をＬとする場合に、
前記前記送信手段の動作速度が処理手段の動作速度の（Ｋ／Ｌ）倍になるように制御することを特徴とする請求項１６に記載のデータ処理装置。
【請求項１８】
複数の処理モジュールがバスを介してリング状に接続され、該処理モジュールがパケットをリング上の一方向に転送してデータを処理するデータ処理装置におけるデータ処理方法であって、
前記処理モジュールの受信するパケットが格納するデータを処理して出力する処理工程と、
前記処理工程で出力したデータを格納するパケットを下流側に送信する送信工程と、
前記処理工程で１つのパケットを処理して出力するまでに所定長の処理時間を要する際に、当該所定長の処理時間の間に複数のパケットを送信できるように制御する制御工程と
を有することを特徴とするデータ処理方法。
【請求項１９】
複数の処理モジュールがバスを介してリング状に接続され、該処理モジュールがパケットをリング上の一方向に転送してデータを処理するデータ処理装置を制御するプログラムであって、コンピュータを、
前記処理モジュールの受信するパケットが格納するデータを処理して出力する処理手段と、
前記処理手段の出力したデータを格納するパケットを下流側の処理モジュールに送信する送信手段と、
前記処理手段が１つのパケットを処理して出力するまでに所定長の処理時間を要する際に、当該所定長の処理時間の間に複数のパケットを前記送信手段が送信できるように前記送信手段を制御する制御手段と
して機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はリングバスを用いたデータ処理を行うデータ処理装置、その制御方法およびプログラムに関する。
【背景技術】
【０００２】
処理回路を並列に処理させ効率よくデータ処理を行う方法として、処理回路をリング型のバスで接続する方法（特許文献１）が提案されている。また、画像のフィルタ処理を並列処理するため、データに制御コードを添付し、制御コードに従ってデータをプロセッサに取り込むことでオーバーラップするデータを複数のプロセッサで受信できるようにする方法がある（特許文献２）。
【０００３】
複数の処理回路の処理順番を簡単に変更できるようにしつつ、バスの競合を低減するため、複数の処理回路と（入出力）制御回路をリング状に接続し、リング状に接続した処理回路上にパケット化したデータを周回させる方法もある（特許文献３）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第２５２２９５２号公報
【特許文献２】特開昭６３−２４７８５８号公報
【特許文献３】特許第３９０７４７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１の方法では、入力端において外部メモリがＩ／Ｆなどから入力したデータを、実際に接続された順番で処理回路（以下、モジュール）が処理し、出力端において外部メモリ等へ出力する。そのため、複数のモジュールの処理の順序は、ハードウェアを実装する段階で接続された順序に制限される。ここで、処理回路の順番を任意に入れ替えようとすると、複雑な構成が必要とし回路規模を増大させたり、複雑な処理が増えて処理性能の著しい低下をもたらしたりする。
【０００６】
特許文献２、３の方法では、ある処理モジュールによってリングバス上のパケットが占有されてしまうと、データ転送効率が落ちてしまうことがある。例えば、他の処理モジュールがリングバス上にデータを出力できなくなってデッドロックが発生してしまうこともある。
【０００７】
本発明はリングバス上の複数のモジュールが順番に処理を行うシステムにおいて、処理を効率化できるデータ処理装置、データ処理方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を達成するために、本発明に係る情報処理装置は、処理手段を有する複数の処理モジュールがバスを介してリング状に接続され、該処理モジュールがパケットをリング上の一方向に転送してデータを処理するデータ処理装置であって、
前記処理モジュールは、
当該処理モジュールの受信するパケットが格納するデータを処理して出力する処理手段と、
前記処理手段の出力したデータを格納するパケットを下流側の処理モジュールに送信する送信手段と、
前記処理手段が１つのパケットを処理して出力するまでに所定長の処理時間を要する際に、当該所定長の処理時間の間に複数のパケットを前記送信手段が送信できるように前記送信手段を制御する制御手段とを有することを特徴とする。
【発明の効果】
【０００９】
本発明により、各モジュールが処理済のデータをリングバス上に放出できなくなる可能性を低減し、画像処理装置の処理性能が低下することを抑制することが可能となる。
【図面の簡単な説明】
【００１０】
【図１】バスに接続するモジュールの概略構成を示すブロック図である。
【図２】パケットのフォーマットを示す図である。
【図３】リングバスを有するデータ処理部の概略構成を示すブロック図である。
【図４】データ処理装置の概略構成を示すブロック図である。
【図５】モジュール毎に２つのバッファを備えているデータ処理装置の概略構成を示す図である。
【図６】通信部の動作速度を処理部の２倍に設定した場合の各通信部をパケットが流れる挙動を示す図である。
【図７】データ処理部の起動処理を示すフローチャートである。
【図８】モジュール外にデータ保持部を設ける場合のモジュールの構成を示すブロック図である。
【図９】通信部と処理部の間にＦＩＦＯを設けた場合のモジュールの構成を示すブロック図である。
【図１０】通信部と処理部の間にＦＩＦＯを設けたモジュールを有するデータ処理装置の概略構成を示すブロック図である。
【発明を実施するための形態】
【００１１】
＜実施例１＞
図１は、本発明の一実施例であるデータ処理装置の有する処理モジュール（以下、モジュール）の概略構成を示す図である。モジュール１００は、バス１１０によってリング状に接続されているモジュールの１つである。ここで、リングバスとはバスと複数のノード（モジュール）によって形成されるリング状のネットワーク（データが流れる経路）を示すものであり、以下の説明ではモジュール間を円環状に接続するバスはリングバスと区別して単純にバスと称する。通信部１２０は、モジュール間におけるデータの送受信を行ったり、処理部１３０とデータを送受信したりする。また、クロックが入る度に移動するパケットを一時的に保持する役割も有する。
【００１２】
受信部１２１は、バス１１０から受信するデータパケットのうち、処理部１３０で処理すべきデータパケットを識別して受信し、パケットからデータを抽出し処理部１３０に転送する。処理部１３０は、受信部１２１から転送されるデータを処理する。送信部１２２は、処理部１３０において処理済みのデータ、または、通信部１２０において後述する保留情報等をパケットに格納し、更にセレクタ１２３へ出力する。
【００１３】
セレクタ１２３は、バス１１０より入力されたままのパケット又は送信部１２２で加工されたパケットのいずれかを選択して出力する。ここで、セレクタ１２３の制御は送信部１２２が行う。バッファ１２４は、セレクタ１２４の出力を単位時間だけ一時的に保持する。
【００１４】
また、各モジュールがリングバスの上流から取得するパケットを下流に流すように制御することで、リングバスのリング上では一方向にだけパケットが巡回することになる。
【００１５】
図２にはリングバスを流れるパケット２００のデータ構成を示す図である。
ｖａｌｉｄフラグ２０１はパケットが有効なデータを格納していることを示す。ｓｔａｌｌフラグ２０２（保留情報）はパケットが処理すべきモジュールによって受信されず保留された状態（保留状態）にあることを示す。ＩＤ２０３はデータの送信元（又は最後に処理したモジュール）を示すＩＤであり、カウント２０４はデータの送信順を示すカウント値でモジュールが処理すべきデータの順番を確認するのに用いる。また、データ２０５は各モジュールで処理するべきデータ、もしくは処理したデータを格納する。従ってモジュール１００は各モジュール固有のＩＤと処理すべきパケットを識別するためのＩＤ（以下、待ち受けＩＤと称す）とを格納するレジスタと、一連のデータのどこまで処理したかを示す値（入力・出力カウント値）をカウントするカウンタとを有している。
【００１６】
以下、モジュール１００の動作を説明する。モジュール１００の処理したデータをバスに出力する場合、送信部１２２はバスからモジュールが受信した入力パケットのｖａｌｉｄフラグ２０１を検出し、無効パケット（空きパケット）を探す。ここで、入力パケットのｖａｌｉｄフラグ２０１が有効を示す場合、そのままバッファ１２４に入力パケットを格納し、次のクロックでパケットをバスに出力する。
【００１７】
一方、入力パケットのｖａｌｉｄフラグ２０１が無効を示す場合でかつ、処理部１３０が処理済みで出力可能なデータがある場合、送信部１２２は空パケットに処理済みのデータを格納する。詳細には、送信部１２２は空パケットに処理済のデータを格納し、ｖａｌｉｄフラグ２０１に有効を示す値に設定し、ｓｔａｌｌフラグ２０２に無効を示す値を設定し、自分のモジュールＩＤ（送信元ＩＤ）、出力カウンタ（不図示）の値を付加する。そして、次のクロックでこのパケットをバスに出力する。このとき、出力カウンタをインクリメントして次に処理すべきパケットの識別処理に用いる。
【００１８】
バス１１０からモジュール１００がパケットを受信する場合、受信部１２１は入力パケットのｖａｌｉｄフラグ２０１、送信元ＩＤ２０３、カウント値２０４を監視する。そして受信部１２１が、ｖａｌｉｄフラグ２０１が有効で、送信元ＩＤ２０３がレジスタに設定されている待ち受けＩＤと一致し、カウント値２０４が入力カウンタ値と一致するパケットが入力されたと判定した場合、データの取り込み処理をする。詳細には、受信部１２１は処理部１３０がデータを受信可能である事を確認し、入力パケットのデータを処理部１３０に取り込む。入力パケットは、ｖａｌｉｄフラグ２０１を無効にして次の送信部１２２からバッファ１２４を通ってバスへ出力される。このとき、入力カウンタ（不図示）をインクリメントし、入力カウンタ値を更新する。
【００１９】
この場合、モジュール内の処理部１３０がデータを受信不可能であるなら、入力パケットのｓｔａｌｌフラグ２０２に有効を示す値に設定し（即ち、データの取り込みを保留）、他のフィールドは変更せずにバッファ１２４へ出力する。なお、入力カウンタと出力カウンタは、同期を取るため、データ転送開始前に同じ値に初期化される。
【００２０】
一方で、受信部１２１が入力パケットを監視して、ｖａｌｉｄフラグ２０１が無効、送信元ＩＤ２０３がレジスタの待ち受けＩＤと一致しない、カウント値２０４が入力カウンタ値と一致しない等の条件の１つに相当するパケットは下流側のバスへ通過させる。
【００２１】
以上のように、モジュール固有のＩＤと待ち受けＩＤとを設定することで、複数の処理モジュールに簡易な構成によって所望の順番でデータを処理させることができる。
【００２２】
図３は、モジュールＡ〜Ｄ（３１０，３２０，３３０，３４０）を数珠繋ぎに接続しているリングバス３００を有している画像処理部の概略構成を示す図である。
【００２３】
モジュール３１０は、画像処理部の外部のデータバスとの接続をする外部入力３６０を介して外部からのデータを入力し、処理が終了したデータを外部出力３５０によって外部に出力する機能を持つターミナルモジュールである。モジュール３２０、３３０、３４０は、リングバス３００に接続され固定的な処理を割り当てられている処理モジュールである。
【００２４】
これらのモジュール３１０，３２０，３３０，３４０のそれぞれには、リングバスに接続されデータの送受信を行う通信部３１１，３２１，３３１，３４１と、個別の処理を行う処理部３１２，３２２，３３２，３４２が備えられている。
【００２５】
これらの処理部は、モジュールごとに異なる処理を行ってもよいし、またいくつかのモジュールで同じ処理を複数回行ってもよい。また、図３には４つのモジュールを有する画像処理部を例示しているが、リングバスに接続されるモジュールの数には制約はなく、固定的な処理を割り当てられているモジュールが２つ以上接続されていればよい。
【００２６】
図４は、本発明の画像処理部（データ処理部）を配置するシステムの構成例を示す。システム制御部４００は、演算制御用のＣＰＵ４０１、固定データやプログラムを格納するＲＯＭ４０２、データの一時保存やプログラムのロードに使用されるＲＡＭ４０３および外部データを保持する外部記憶装置４０４を有するシステム制御部である。
【００２７】
データ入力部４１０は、処理すべきデータを取り込む。例えば、イメージスキャナおよびＡ／Ｄ変換器などのデバイスによって構成される画像読み込み装置や、マイクおよびＡ／Ｄ変換などのデバイスによって構成される音声入力装置そのものであってもよいし、入力装置からデータを取得する受信部であってもよい。
【００２８】
画像処理部４２０は、図３に示したバスでデータ処理用のモジュールを数珠繋ぎにしているデータ処理部である。ここでは、画像に限らずパイプライン処理などの一連のデータ処理に適したデータであれば、適用する事が好ましいためデータ処理部と表記している。
【００２９】
データ出力部４３０は、処理済みのデータを外部に出力する。例えば画像データを印字ドットパターンに変換して出力するプリンタデバイスを含む画像出力装置や、音声データをＤ／Ａ変換器等を通して出力する音声出力装置でもよい。もちろん、単に外部装置へデータを送信する送信部であってもよい。
【００３０】
データ入力部４１０において入力されたデータは、システム制御部に送られてＣＰＵ４０１で処理されてもよいし、そのままＲＡＭ４０３や外部記憶装置４０４に一時記録されてもよい。また、データ処理部４２０は、データ入力部４１０からの入力データを直接受け取って処理を行っても、システム制御部４００からの指示ならびにデータ供給によって処理を行ってもよい。
【００３１】
また、データ処理部４２０の出力は、再度システム制御部４００に送られても、また、直接データ出力部４３０に送られてもよい。
【００３２】
データ処理部４２０は、システム制御部４００の処理によって予め個別のデータ処理内容を設定され、供給されるデータに対して設定された処理を施すように動作する。
【００３３】
図７は、システム制御部４００のデータ処理部４２０に対する制御手順を示すフローチャートである。制御処理が開始されると、ステップＳ７００において、データ処理装置のリセットが行われる。ここで、各モジュール１００内の通信部１２０において、入力データカウンタ／出力データカウンタ（不図示）や待ち受けＩＤを保持するレジスタなどが初期化される。また、リングバス上の通信処理部の動作速度や各モジュールが利用可能なバッファの使用数なども初期化される。システム制御部は、動作速度を制御する動作速度制御部や、バッファの使用数（段数）を変更する変更部として機能する。
【００３４】
ステップＳ７１０において、バス上の通信処理部の動作速度などを含むリングバスの設定が行われ、ステップ７２０において各モジュールの通信部１２０に、受信データを識別するための待ち受けＩＤやバッファ１２４の段数などが設定される。
【００３５】
ステップ７３０において処理部に対するパラメータ指定などが行われ、ステップ７４０においてデータ処理の開始指示が行われる。そして、ステップ７５０では、データ処理の終了通知を監視する処理が行われ、これはステップ７６０において、処理終了が検知されたことを判断するまで繰り返される。
【００３６】
ステップ７６０において、データ処理装置の終了通知が確認されると、処理を終了する。
【００３７】
図５は、図３の画像処理部においてのバッファの構成を詳細に示した概略図である。図１に示したバッファ１２４に相当するバッファはバッファ５１２，５２２，５３２，５４２であり、ここではさらにバッファ５１１、５２１，５３１，５４１を追加している。ここで、バッファ５１２，５２２，５３２，５４２は、通常そのそれぞれの直前にあるバッファの内容を次のクロックで保持し、その次のクロック次のモジュールへ送信するように構成してある。またバッファ５１２，５２２，５３２，５４２は、モジュール内の処理部１３０、受信部１２１、送信部１２２３およびセレクタ１２３とは直接接続されていない。
【００３８】
このバッファ５１２，５２２，５３２，５４２が挿入されたことにより、モジュール間のデータ送受信はそれぞれ１サイクルずつ遅れることとなる。図６を用いて、通信部Ａ〜Ｄの動作速度を処理部の動作速度の２倍として動作させた場合のリングバス３００を流れるパケットの挙動について説明する。また、以下の説明では簡略のためデータは所定量毎にパケット化するとする。
【００３９】
図６（ａ）は０サイクル目において、最初のデータ６０１がリングバスに投入され、バッファＡ−１（５１１）に保持された状態を示す。図６（ｂ）は１サイクル目において、先に入力されたデータ６０１がバッファＡ−２（５１２）に移動して保持された状態を示す。この際に、モジュールＡの処理部は、通信部Ａ〜Ｄの半分のサイクルで動作しているため、このタイミングでデータを投入することはできない。同様にして次のサイクルで次のデータ６０２が投入され、さらに次のサイクルで、データ６０１，６０２はそれぞれ右のバッファに移動していくことになる。
【００４０】
図６（ｃ）は動作開始から４サイクル目の状態である。この状態においてすべての処理部は、まだ処理すべきデータを受け取っていない。そして、モジュールＣのバッファＣ−１に到達したデータ６０１はそのままモジュールＣの処理部に取り込まれ、バッファＣ−１には残らない。
【００４１】
図６（ｄ）は、５サイクル目の状態を示す。このとき、処理部Ｃはリングバスの半分の速度で動作していることから、処理の途中であり、スループットが１であったとしても、先ほど入力されたデータを出力することはできず、バッファＣ−１（５３１）は空きの状態となる。
【００４２】
図６（ｅ）は、６サイクル目の状態を示す。このとき、バッファＣ−１（５３１）に接続されているモジュールＣの処理部は、データ６０１の処理を完了している。従って、データ６０１を出力可能であると同時に次のデータ６０２を受信するので、バッファＣ−１（５３１）には、処理済みとなったデータ６０１が格納されつつ、次に処理するデータ６０２は処理部Ｃへと送られる。
【００４３】
図６（ｆ）は、８サイクル目の状態を示す。このとき、再びモジュールＣの処理部は、先ほど入力されたデータ６０２を処理済みであるため、次のデータ６０３を受け取りつつ、バッファＣ−１（５３１）にデータ６０２を出力する。
【００４４】
図６（ｇ）は、１０サイクル目の状態を示す。このとき、モジュールＡの処理部は次のデータ６０６を投入しようとするが、リングバスを周回してきたデータ６０１がバッファＡ−１に存在するため、データ６０６をモジュールＡに取り込まない。
【００４５】
図６（ｈ）は、１１サイクル目の状態を示す。先ほど投入できなかったデータ６０６は、バッファＡ−１が空くために投入可能となり、次のサイクルで、モジュールＡの処理部が次のデータを出力しようとした際には、出力できずに滞っているデータがないことから、次のデータ出力を行うことが可能となる。
【００４６】
このように、本実施例によれば、通信部の動作速度を処理部の動作速度の２倍とすることで、通常通りデータが滞りなく流れている際には自動的に１つ置きのパケットにデータが格納されてリングバスを周回させる様にできる。これにより、通信部においてバスへのデータ送信が競合した際に初めて１つ置きの空きパケットが使用される様にできる。このため、単純に処理部と通信部の動作速度の関係を設定することにより、特別な制御処理なしにデータフローの遅延を最小限にすることが可能となる。
【００４７】
なお、図６では簡略のためにサイクル単位の時間を用いて説明したが、システムクロック等のシステムの基本となるサイクル周期の倍数でなくてもよく、各モジュールの処理部のスループット（例えば、１パケット辺りの処理に要する時間）の整数倍としてもよい。これは、図６において示したように、処理部が入力されたデータを出力するまでの間に少なくとも１つ以上のデータの移動が行われ、空きパケットが生成されればよいからである。このように、本発明の技術は、必ずしも処理部の動作スループットが１サイクルに１データを処理するものでなくても、適用可能である。
【００４８】
また、それぞれのモジュールが同じスループットで動作しない場合などにも適用するためには、基本クロックの整数倍で通信部を動作させることで、いかなるスループットのモジュール群に対しても適応可能な構成とすることも可能である。
【００４９】
例えば、モジュール１〜３があり、基本クロックの周期をＴとして、モジュール１の処理時間は３Ｔ、モジュール２は２Ｔ、モジュール３は５Ｔなどのように表わせるとする。周波数を示すクロックＣは、Ｃ＝１／Ｔと表現できる。そして、通信部をｋＣ（ｋは１以上の整数）のクロックで動作させればモジュール１〜３は１回の処理時間に相当する期間に連続して流れるパケットを占有することが無くなる。また、上記の場合、リングバスの速度（通信部の動作速度）の基準を２Ｔにしてしまうと、３ＴのＰＥとは位相がＴだけずれてしまうために効率が良くない。従って、複数種類の処理速度のモジュールが混在する場合、複数のモジュールの処理時間の最大公約数をベースに、最大公約数以下の長さに１つのパケットを出力するように通信部の動作速度を設定すればよい。もちろん、周期Ｔに基づくと最大公約数なり、クロック周波数に基づくと最小公倍数になるが、これらは同義である。
【００５０】
以上のように制御することは、１つパケットを処理して出力するまでに所定長の処理時間を有する１つの処理モジュールに着目すれば、所定長の処理時間の間に少なくとも２つ以上のパケットを送信部から送信させるように制御することと同義である。  また、挿入したバッファの個数の比率に応じた速度で通信部を動作させたり、処理部が入力されたデータを処理する間にリングバス上のデータの進む量を多くしたりすることで、データとデータの間隔の数を増やすことが可能となる。ここでデータとデータの間隔とは、２つの有効なパケット間の空パケットの数にも相当する。
【００５１】
他にも、複数のデータ処理ストリームを同一のリングバス上に流す際に、同時に流すデータ処理ストリームの数に応じてリングバスの動作速度を速めることは効果的である。例えば二つのデータ処理ストリームを流す際（例えば２系統のパイプライン処理を並行してデータ処理部４２０に流す場合）には、１つのデータストリームを流す場合の２倍のデータがリングバス上を周回する可能性がある。このような場合に、１つのデータ処理ストリームを流した時と同様の挙動を得るためには、リングバス上のバッファの数を２倍とした上で、リングバスの動作速度を２倍にすることが有効である。また、複数のデータ処理ストリームを同一のリングバスで実現するには、各処理部にはデータストリームの数だけの待ち受けＩＤを識別するレジスタが必要になり、データパケットはストリームの種類を識別するための情報を格納する必要がある。
【００５２】
またパケットに送信元のＩＤだけを格納している理由は、送信先の情報を削減することでパケットの情報量を削減できたり、ストールパケットを活用する上で送信元ＩＤを利用する方が効率的であったりするためである。効率的な理由の１つとして、ストールパケットを検知するのに都合のよいモジュールは送信元のＩＤをパケットに付加したモジュールである点などが挙げられる。
【００５３】
また、図８に示すように、モジュール間にバッファ８０１を設けても良い。こうすることで、データパケットを保持可能なバッファの数を増加させやすくなり、リングバスの効率の低下を抑えることが可能となる。
【００５４】
もちろん、バッファ８０１は２段以上のバッファとして構成してもよいし、段数可変のバッファとして構成してもよい。その場合も、その段数に応じてリングバス上の通信部１２０の動作速度を処理部１３０に対して速めることで、リングバスの処理効率を良くすることができる。
【００５５】
＜実施例２＞
図９は、実施例２のモジュールの概略構成を示すブロック図である。なお、以下の実施例２の説明において、実施例１と同一機能を有する構成や工程には同一符号を付すとともに、構成的、機能的にかわらないものについてはその説明を省略する。
【００５６】
さらに、入力ＦＩＦＯ１００１は、通信部において受信されたデータを処理部に渡す際にデータを一時的に保持する。この入力ＦＩＦＯ１００１によって、処理部１３０が処理中であっても、ＦＩＦＯの段数分のデータを一時的に保持することが可能となるため、リングバス上にＳｔａｌｌフラグの立てられたパケットが周回する頻度を下げることが可能である。
【００５７】
出力ＦＩＦＯ１００２は、処理部において処理済のデータを通信部に渡す際に使用される出力ＦＩＦＯである。この出力ＦＩＦＯによって、リングバス上に空きパケットがないために通信部においてデータを出力できない場合にも、処理部の出力データを保持することで処理部を開放し、次のデータの処理に移行することが可能である。
【００５８】
さらに、処理スルー部１００３は、入力ＦＩＦＯ１００１の出力を直接出力ＦＩＦＯ１００２に渡す。この処理スルー部１００３を有効に設定することにより、処理部１３０を介さずに、入力ＦＩＦＯ１００１から出力ＦＩＦＯ１００２に直接データを流すことが出来るため、２つのＦＩＦＯをリングバスに接続された仮想的なバッファとして使用することが可能となる。
【００５９】
例えば、データ処理部４２０に実行させる処理によっては、処理に用いないモジュールが生ずる場合がある。この場合は、図７のシステム制御部４００の設定処理であるステップＳ７３０において、各データ処理部に待ち受けＩＤを設定する際に、待ち受けＩＤを設定しないモジュールについては処理スルー部１００３を有効に設定するようにしてもよい。なお、処理スルー部１００３を有効にする場合は、受信部１２１は全てのパケットを受信するようにしてもよい。
【００６０】
モジュールの性能に差がある場合や、モジュールが特定の処理（画像処理でいうフィルタ類等）に特化している場合は処理に用いないモジュールが生ずる可能性が高まるため、本実施例によって効果を発揮する機会が増える。
【００６１】
一方で、処理スルー部１００３を有効にする場合でも、ステップＳ７３０においてシステム制御部４００は受信部１２１に特定の待ち受けＩＤを設定してもよい。図１０は、図９に示したモジュール構成を使用してリングバスを構成した例である。
【００６２】
入力ＦＩＦＯ１１１１、１１２１、１１３１、１１４１は、各モジュールの中においてリングバス状の通信部で受信されたデータを処理部で処理する際に一時保持する。出力ＦＩＦＯ１１１２，１１２２，１１３２，１１４２は、各モジュールの中にあって、リングバス上の処理部で処理された処理済データを通信部に出力する際に一時保持する。
【００６３】
処理スルー部１１３３は、処理部を介さずに入力ＦＩＦＯ１１３１と出力ＦＩＦＯ１１３２を接続している。この入力ＦＩＦＯ１１３１、処理スルー部１１３３、出力ＦＩＦＯ１１３２を通る経路は、通信部３３１において、予め特定のＩＤを待ち受けＩＤとして指定し、かつ、処理スルー部１１３３をスルーに設定することによって設定できる。こうすることで、一連のデータ処理（パイプライン処理など）において所望の処理と処理の間にバッファとして挿入することができる。
【００６４】
このように、使用しない処理部をリングバス上のデータ保持手段として、所望の処理と処理の間にピンポイントでバッファとして適用できるため、必要最小限の回路構成でリングバスのスループットの向上が図れる。
【００６５】
以上、実施例２によって、特定の一連のデータ処理において作用する仮想的なバッファを用意することが可能となる。このようなに、特定の処理で用いないモジュールをバッファとして扱うことで、回路規模を増大させることなく、リングバス上にあって有効に動作するバッファを配置することが可能となる。また、バッファを挿入することで、Ｓｔａｌｌフラグつきのデータパケットが増える際にも、データの滞留を防ぎ、処理速度の低下を抑えることが可能となる。
【００６６】
処理部をデータが通過するには処理部もクロックが供給される必要があり、スキップすることで処理部をＯＦＦにできるので消費電力を低減できる。
【００６７】
ただし、この実施例２においては、実施例１に示した技術のように、バッファが処理部と処理部の間に均等に配置されない。この場合には、個々のモジュールにおけるバッファの比率ではなく、リングバス上にあって有効に動作するバッファの総数Ｋと、データ処理が有効となっている処理部の総数Ｌとから求められる速度でリングバスを動作させればよい。
【００６８】
この場合、Ｋ／Ｌによって求められる比は、リングバスを処理部の動作速度の何倍で動作させるべきかに関する指標を与えることとなる。
【００６９】
たとえばＫ／Ｌが２となるように特定のデータ処理ストリーム上にバッファを配置した場合には、リングバスの動作速度を処理部の動作速度に対して２倍とすれば、理想的にはリング上のバッファの増加による１週にかかるステップ数を相殺する。そして、リングバス上をデータが１周する時間は変わらず、なおかつ、空きパケットはちょうど１つおきに発生することになる。
【００７０】
ストールパケットが増えた場合や、リングバスの各通信部の保持するデータ量が閾値を超えた場合にだけ、処理に用いないモジュールをバッファとして用いるようにしてもよい。
【００７１】
＜実施例３＞
以下の実施例３の説明において、実施例１や実施例２と同一機能を有する構成や工程には同一符号を付すとともに、構成的、機能的にかわらないものについてはその説明を省略する。
【００７２】
実施例２において開示した例においては、リングバス上の特定のデータ処理ストリームにおいて、ＦＩＦＯの段数の整数倍の制約のもとで、任意の数のバッファを挿入することが可能である。実施例３では、この際に挿入すべきバッファの総数Ｋを、同時に投入するデータ処理ストリームの数Ｓと有効に動作する処理部の数Ｌとから求められるリングバスの動作速度Ｒから、求める。
【００７３】
例えば、同時に投入するデータ処理ストリームが２本ある場合、リングバスの動作速度を２倍にすることで、処理部が１単位のデータ処理を行う間に二つのデータを転送することが可能となる。このような場合に、リングバスに接続されるバッファの容量を増加させない場合、結局リングバス上を流れるデータ量は単純に２倍となり、何らかのデータの滞留によってリングバスがデッドロックする可能性が高まる。
【００７４】
そのため、リングバスの動作速度の増加に応じてリングバス上に保持できるデータ容量を増加させる必要がある。そして、リングバスの動作速度を２倍にするのであれば、リングバス上のバッファの数も２倍以上にする必要がある。
【００７５】
現実的には、動作周波数を任意の整数倍と出来るケースはまれであり、２のべき乗の周波数を選択せざるを得ないことが多い。従って、実際には同時に投入するデータ処理ストリームの本数を超える最も近い２のべき乗倍の周波数を用いることが現実的である。
【００７６】
よって、例えば、リングバス上の有効に動作するバッファ段数の総数Ｋは、同時に投入するデータ処理ストリームの本数を超える最も近い２のべき乗をＳ’とするならば、有効に動作する処理部の総数ＬをもとにＫ＝Ｌ×Ｓ’によってもとめてもよい。
【００７７】
ここで、リングバスの動作速度は、処理部に与えられている動作基準信号（クロック）のＫ／Ｌ倍、または（Ｍ＋Ｎ）倍としてもよい。
【００７８】
また、処理部の動作が遅く、１つのデータを処理するのにＴクロックの時間を要する場合、リングバスの動作速度は、動作基準信号のサイクルをＴで割った値をもとに、Ｋ／Ｌ倍や（Ｍ＋Ｎ）倍としてもよい。たとえば、１００ＭＨｚの動作基準信号が処理部に与えられている場合に、処理部の性能が１０サイクルに１データの処理能力であったとし、かつＫ／Ｌ＝２であった場合には、（１００ＭＨｚ／１０サイクル）×２＝２０ＭＨｚでリングバスを動作させても良い。このように、リングバスの動作周波数は、動作基準信号よりも遅くなることもありうる。
【００７９】
ただし、現実には、リングバスに接続されている各々のモジュールが備える処理部の処理速度は必ずしも全て同じとは限らない。この場合には、これらの処理部のうち、最も遅い処理部が１データを処理するのにかかるサイクル数を基準として、そのＫ／Ｌ倍、または（Ｍ＋Ｎ）倍の動作周波数でリングバスを動作させても良い。
【００８０】
また、前述の各実施例では処理部３１２が外部へのデータの出力と外部からの入力の両方をこなしていたが、入力用の処理部と出力用の処理部を別々に設けてもよいし、夫々の数も複数あってもよい。
【００８１】
また、外部から取得するデータはリングバスで扱うパケットの形式でそのまま入力してもよい。さらに、処理部はパケットを解釈しパケットのまま処理できるようにしてもよい。
【００８２】
また、前述の各実施例の処理は、複数のハードウェアとソフトウエアの協同によって実現するようにしてもよい。この場合、ネットワーク又は各種記憶媒体を介して取得したソフトウエア（プログラム）をコンピュータ等の処理装置（ＣＰＵ、プロセッサ）にて実行することで実現できる。
【００８３】
また、本発明は前述した実施例の機能をコンピュータに実現させるプログラムを記憶した記憶媒体を、システム或いは装置に供給することによって実現してもよい。
【図１】
2010277429.tif 000003
【図２】
2010277429.tif 000004
【図３】
2010277429.tif 000005
【図４】
2010277429.tif 000006
【図５】
2010277429.tif 000007
【図６】
2010277429.tif 000008
【図７】
2010277429.tif 000009
【図８】
2010277429.tif 000010
【図９】
2010277429.tif 000011
【図１０】
2010277429.tif 000012