(57)【特許請求の範囲】
【請求項１】
リングバスにデータの入力を行うデータ入力手段と、
前記データ入力手段で入力されたデータの出力を行うデータ出力手段と、
前記リングバスへの前記データ入力手段によるデータの入力を制御するとともに、前記データ出力手段によるデータの出力を制御する第１の通信処理手段と、
データ処理を行う複数のデータ処理手段と、
前記複数のデータ処理手段と前記リングバスとの間のデータの授受を制御する複数の第２の通信処理手段と、
前記リングバスの異常を検出する検出手段と、
前記検出手段によって異常が検出された場合に、前記リングバスを経由することなく、前記複数の第２の通信処理手段又は前記複数のデータ処理手段に、初期化を指示するリセット信号を入力する制御手段と、
を備え、
前記制御手段は、前記検出された異常に該当するデータパスを決定し、前記決定されたデータパスに関連する前記第２の通信処理手段又は前記データ処理手段に、前記リセット信号を入力し、
前記リセット信号を受信した前記第２の通信手段又は前記データ処理手段は、前記リセット信号に基づいて、リセット動作を行うことを特徴とするデータ処理装置。
【請求項２】
前記複数のデータ処理手段は、複数のプロセスを実行することを特徴とする、請求項１記載のデータ処理装置。
【請求項３】
前記複数のデータ処理手段の各々には、互いに異なるＩＤが割り振られていることを特徴とする、請求項１又は２記載のデータ処理装置。
【請求項４】
前記制御手段は、前記初期化を、少なくとも前記リングバスをデータが一周する間、続けることを特徴とする、請求項１乃至３の何れか１項記載のデータ処理装置。
【請求項５】
前記制御手段は、破棄されたプロセスに対する前記リングバスへのデータの入力の数を制限することにより、前記リングバスでのデッドロック状態を防止することを特徴とする、請求項１乃至４の何れか１項記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リングバスを用いたデータ処理装置に関する。
【背景技術】
【０００２】
従来、プリント画像処理のような一連のデータ処理を高速に効率よく実現するため、全体のデータ処理を所定の機能に分割してハード化し、ハード化されたモジュールを処理の流れ順に接続して一連のデータ処理をパイプライン的に実行する方法が知られている。
一方、画像処理においては、一連の処理の順序を変えることで効率的に処理を実現できる。例えば、所定の画素数の出力装置に画像を出力する場合、画素数（解像度）を合わせるために解像度の変換が必要となる。入力画像の画素数が出力装置の画素数よりも多い場合は、処理の上流側で解像度を変換する。画素数を少なくしてから処理を行った方がよいが、入力画像の画素数が出力装置の画素数よりも少ない場合は、解像度の変換を行わずに画素数が少ない状態で処理行い、出力の直前（下流側）で解像度を変換した方がよい。
また、ある空間（例えば、入力デバイス空間）から標準的な空間（例えば、解像度６００ppi、CIELAB色空間等）に変換して処理を行う。別の空間（例えば、出力デバイス空間）に変換する場合、入力側と出力側との空間変換部の処理順（１次元ＬＵＴ、行列演算、３次元ＬＵＴ等の処理の順序）は逆になる。つまり、処理の順序を変えることができれば、同じ処理モジュールを入力側と出力側とで共用することもできる。しかしながら、上記データ処理方法においては、処理の順序を変えることができないため、例えば、上記に示したような場合は、無駄なモジュールを（即ち、同じ機能のモジュールを複数）実装することで対応していた。
上記問題を解決するために、各処理モジュール間をリング状のネットワークで接続する方法が提案されている（例えば、特許文献１、特許文献２を参照）。これらの手法によれば、リング状のネットワークにてデータの接続先を変更することにより、処理順序の変更が可能である。なお、特許文献２に記載の技術おいては、各処理モジュールは、各々プロセッサにて実行されるので、各プロセッサのプログラムを変更することによっても変更可能である。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第２５２２９５２号公報
【特許文献２】特許第２５１８２９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記特許文献１及び特許文献２に記載のリング状のネットワークでは、あるモジュールの出力レートに対し、そのデータを受けるモジュールの処理が遅い。入力レートが相対的に低い場合、データを受けるモジュールは全てのデータを受け取ることができなくなり、リングバス上の有効パケットを格納するスロットが受け取られなかったデータによって占有されてしまう。すなわち、リングバス上にデータを出力することができなくなる現象（デットロック）が発生してしまう。リングバスにおいては、一度デットロックが発生してしまうと、リングバス上の全てのパケットを破棄し、全てのモジュールの初期化を行った後に、デットロックの原因となったモジュールの出力を制限する（或いは入力のレートを抑える）必要があった。このとき、リングバスにて複数のデータパスが形成されていた場合、正常なデータパス（デットロックの原因となったモジュールを使用しないデータパス）についても、やり直しとなる処理が生じ得る問題があった。
【０００５】
本発明はこのような問題点に鑑みなされたもので、リングバスでのデータをより適切に制御することを目的とする。
【課題を解決するための手段】
【０００６】
そこで、本発明は、リングバスにデータの入力を行うデータ入力手段と、前記データ入力手段で入力されたデータの出力を行うデータ出力手段と、前記リングバスへの前記データ入力手段によるデータの入力を制御するとともに、前記データ出力手段によるデータの出力を制御する第１の通信処理手段と、データ処理を行う複数のデータ処理手段と、前記複数のデータ処理手段と前記リングバスとの間のデータの授受を制御する複数の第２の通信処理手段と、前記リングバスの異常を検出する検出手段と、前記検出手段によって異常が検出された場合に、前記リングバスを経由することなく、前記複数の第２の通信処理手段又は前記複数のデータ処理手段に、初期化を指示するリセット信号を入力する制御手段と、を備え、前記制御手段は、前記検出された異常に該当するデータパスを決定し、前記決定されたデータパスに関連する前記第２の通信処理手段又は前記データ処理手段に、前記リセット信号を入力し、前記リセット信号を受信した前記第２の通信手段又は前記データ処理手段は、前記リセット信号に基づいて、リセット動作を行うことを特徴とする。
【発明の効果】
【０００７】
本発明によれば、リングバスでのデータをより適切に制御することができる。
【図面の簡単な説明】
【０００８】
【図１】データ処理装置の構成を示す図である。
【図２】データパケットのフォーマットを示す図である。
【図３】通信処理部の構成を示す図である。
【図４】通信処理部の入力制御部の動作を示すフローチャートである。
【図５】通信処理部の出力制御部の動作を示すフローチャートである。
【図６】通信処理部の構成を示す図である。
【図７】通信処理部の動作を示すフローチャートである。
【図８】通信処理部の構成を示す図である。
【図９】通信処理部の動作を示すフローチャートである。
【図１０】データ入力部の構成を示す図である。
【図１１】データ出力部の構成を示す図である。
【図１２】デッドロック状態からの復帰動作を示すフローチャートである。
【図１３】第２の実施形態に係るデータ処理装置の構成を示す図である。
【図１４】第２の実施形態に係る通信処理部の構成を示す図である。
【図１５】第２の実施形態に係る入力制御部の動作を示すフローチャートである。
【図１６】第２の実施形態に係る出力制御部の動作を示すフローチャートである。
【図１７】第２の実施形態に係る通信処理部の構成を示す図である。
【図１８】第２の実施形態に係るデータ出力部の構成を示す図である。
【発明を実施するための形態】
【０００９】
以下、本発明の実施形態について図面に基づいて説明する。
【００１０】
（第１の実施形態）
図１に、第１の実施形態に係るデータ処理装置の構成を示す。１００は、入力データが格納されるメモリである。１０１は、メモリ１００から入力データを読み出し、読み出した入力データをフォーマット成形した後述するデータパケットを入力するデータ入力部である。１０２から１０５までの各々は、データ処理を行うデータ処理部である。１０６は、データパケットからデータ処理後のデータを抽出してメモリに書き込むデータ出力部である。１０７は、データ処理後のデータが書き込まれるメモリである。
また、１０８から１１３までの各々は、データパケットの流れを制御する通信処理部である。１１４は、リングバスである。１１５は、データ処理装置全体を制御する制御部である。１１６は、制御部１１５からデータ入力部１０１に対して制御を行うための制御信号である。１１７は、制御部１１５から通信処理部１０８に対して制御を行うための制御信号である。１１８は、制御部１１５からデータ出力部１０６に対して制御を行うための制御信号である。１１９は、制御部１１５から通信処理部１１３に対して制御を行うための制御信号である。１２０は、データ処理部１０２及び通信処理部１０９をリセットするためのリセット信号である。１２１は、データ処理部１０３及び通信処理部１１０をリセットするためのリセット信号である。１２２は、データ処理部１０４及び通信処理部１１１をリセットするためのリセット信号である。１２３は、データ処理部１０５及び通信処理部１１２をリセットするためのリセット信号である。
【００１１】
図２に、データ処理装置でのデータ処理で用いられるデータパケットのフォーマットを示す。２００は、データ処理の順序を示す順序カウンタである。２０１は、データパケットが保持しているデータが有効なデータ（有効データ）であることを示すvalidフラグである。validフラグ２０１の値が「１」であるときは有効を示し、「０」であるときは無効を示す。２０２は、データパケットが保持しているデータが何らかの理由で処理すべきデータ処理部で受け取れなかったことを示すstallフラグである。stallフラグ２０２の値が「１」であるときは受け取れなかったことを示し、「０」であるときは受け取れたことを示す。
２０３は、データパケットのデータを最後に処理したデータ処理部のＩＤを示す。後述するように、次に処理を行うデータ処理部に付随する通信処理部は、ＩＤ２０３と後述する待ち受けＩＤとを比較し（詳細は、図３の説明を参照のこと。）、ＩＤが一致したデータに対して処理を行う。なお、データ処理部に付随する通信処理部は、通信処理部１０９から１１２までの通信処理部である。また、通信処理部（１０９，１１０，１１１，１１２）は、複数のデータ処理部（１０２，１０３，１０４，１０５）とリングバス１１４との間のデータの授受を制御する。２０４は、処理データである。
【００１２】
図３に、データ処理部に付随する第２の通信処理手段の一例である通信処理部（１０９，１１０，１１１，１１２）の構成を示す。３００は、データパケットの入力端子である。３０１は、入力制御部である。入力制御部３０１は、データパケット内の順序カウンタ２００の値、validフラグ２０１の値、及びＩＤ２０３の解析、stallフラグ２０２の生成等を行う。また、入力制御部３０１は、後述する出力制御部３０７、データ処理部等にデータパケット又はデータを出力する。３０２は、本通信処理部に接続されるデータ処理部で処理されるべきデータパケットのＩＤ２０３の値を保持する待ち受けＩＤレジスタである。３０３は、本通信処理部に接続されるデータ処理部に入力したデータの個数をカウントする入力カウンタである。
３０４は、データ処理部からのデータ要求信号（enable_in）である。enable_inの値が「１」であるときはデータ処理部へのデータが入力可能であることを示し、「０」であるときはデータ入力が不可能であることを示す。３０５は、データ処理部へのデータ出力が有効であることを示すための有効信号（valid_out）である。valid_outの値が「１」であるときは有効を示し、「０」であるときは無効を示す。３０６は、データ処理部へのデータ出力信号（data_out）である。
【００１３】
また、３０７は、出力制御部である。出力制御部３０７は、入力制御部３０１からのデータパケット内のvalidフラグ２０１の解析、後述するデータ要求信号（enable_out）の生成、出力するデータパケットの生成等を行う。また、出力制御部３０７は、後述するフリップフロップ３１３に出力する。３０８は、本通信処理部のＩＤを格納する出力ＩＤレジスタである。３０９は、本通信処理部に接続されるデータ処理部が出力したデータの個数をカウントする出力カウンタである。
３１０は、データ処理部へのデータ要求信号（enable_out）である。enable_outの値が「１」であるときはデータ処理部からデータを受け取り可能であることを示し、「０」であるときはデータを受け取り不可能であることを示す。３１１は、データ処理部からのデータ入力が有効であることを示すための有効信号（valid_in）である。valid_inの値が「１」であるときは有効を示し、「０」であるときは無効を示す。３１２は、データ処理部からのデータ入力信号（data_in）である。
３１３は、出力制御部３０７からのデータパケットを格納するフリップフロップである。３１４は、データパケット出力端子である。３１５は、リセット信号（reset）である。リセット信号３１５（reset）の値が「１」であるときは有効であり、リセット信号３１５は、入力制御部３０１、入力カウンタ３０３、出力制御部３０７、出力カウンタ３０９に接続されている。
【００１４】
図４及び図５を参照して、通信処理部（１０９，１１０，１１１，１１２）の動作を説明する。初期設定として、制御部１１５により、待ち受けＩＤレジスタ３０２及び出力ＩＤレジスタ３０８が設定され、入力カウンタ３０３及び出力カウンタ３０９が「０」にリセットされているものとする。なお、入力制御部３０１で制御される入力側と、出力制御部３０７で制御される出力側は独立に動作するため、夫々の動作を分けて説明する。
【００１５】
まず、図４を参照して、入力側の動作を説明する。ステップＳ４００では、データパケット入力端子３００からデータパケットが本通信処理部に入力される。このとき、ステップＳ４０１では、リセット信号３１５（reset）の値が「０」である場合は、入力制御部３０１は、通常動作を行うためにステップＳ４０２の処理を行う。他方、リセット信号３１５（reset）の値が「１」である場合は、入力制御部３０１は、リセット動作を行うためにステップＳ４１０の処理を行う。
ステップＳ４０２では、入力制御部３０１は、データパケットのvalidフラグ２０１の評価を行う。validフラグ２０１の値が「１」である場合は、入力制御部３０１は、データパケットのデータが有効であると判断し、ステップＳ４０３の処理を行う。他方、validフラグ２０１の値が「０」である場合は、入力制御部３０１は、データが無効（例えば、データパケットが空）であると判断し、空のデータパケットを出力制御部３０７へ出力する（ステップＳ４０８）。
【００１６】
ステップＳ４０３では、入力制御部３０１は、データパケットのＩＤ２０３と待ち受けＩＤレジスタ３０２の値の比較を行う。すなわち、入力制御部３０１は、自己（入力制御部３０１）に接続されているデータ処理部で処理すべきデータであるか否かを判断する。データパケットのＩＤ２０３と待ち受けＩＤレジスタ３０２の値が一致した場合は、入力制御部３０１は、処理すべきデータであると判断し、ステップＳ４０４の処理を行う。他方、一致しない場合は、入力制御部３０１は、処理すべきデータでないと判断し、データパケットをそのまま出力制御部３０７へ出力する（ステップＳ４０８）。
ステップＳ４０４では、入力制御部３０１は、データパケットの順序カウンタ２００の値と、入力カウンタ３０３の値との比較を行い、値が一致した場合は、処理すべきデータであると判断し、ステップＳ４０５の処理を行う。他方、一致しない場合は、入力制御部３０１は、処理すべきデータではないと判断し、データパケットをそのまま出力制御部３０７へ出力する（ステップＳ４０８）。
【００１７】
ステップＳ４０５では、入力制御部３０１は、データ処理部からのデータ要求信号３０４を評価する。データ要求信号３０４の値が「１」である場合は、データ処理部がデータを受け取れると判断し、ステップＳ４０６の処理を行う。他方、「０」である場合は、データ処理部がデータを受け取れないと判断し、データパケットのstallフラグ２０２を「１」にした後（ステップＳ４０９）、出力制御部３０７へデータパケットを出力する（ステップＳ４０８）。
ステップＳ４０６では、入力制御部３０１は、有効信号３０５（valid_out）の値を「１」として、データ出力信号３０６（data_out）にデータパケットのデータを出力し、データ処理部では処理が行われる。また、入力制御部３０１は、validフラグ２０１及びstallフラグ２０２の値を「０」にして（ステップＳ４０６）、出力制御部３０７に空のデータパケットを出力する（ステップＳ４０８）。このとき、入力制御部３０１は、入力カウンタ３０３のカウントアップを行う。
【００１８】
ステップＳ４１０では、入力制御部３０１は、リセット信号３１５の値が「１」であるので、入力カウンタ３０３の値を「０」に（クリア）する。続いて、ステップＳ４１１では、入力制御部３０１は、データパケットのＩＤ２０３と待ち受けＩＤレジスタ３０２の値とを比較する。一致した場合は、入力制御部３０１は、validフラグ２０１及びstallフラグ２０２を「０」として、空のデータパケットを生成、すなわち、データ処理部が処理すべきデータパケットを無効にして、出力制御部３０７へ出力する（ステップＳ４０８）。他方、一致しない場合は、入力制御部３０１は、データ処理部が処理すべきデータでないので、データパケットをそのまま出力制御部３０７へ出力する（ステップＳ４０８）。
【００１９】
続いて、図５を参照して、出力側の動作を説明する。ステップＳ５００では、データパケット入力端子３００からデータパケットが通信処理部に入力される。このとき、ステップＳ５０１では、出力制御部３０７は、リセット信号３１５（reset）の値が「０」である場合は、通常動作を行うためにステップＳ５０２の処理を行う。他方、リセット信号３１５（reset）の値が「１」である場合は、出力制御部３０７は、リセット動作を行うためにデータ要求信号３１０（enable_out）を「１」に設定して出力カウンタ３０９の値を「０」に（クリア）する（ステップＳ５０８）。続いて、出力制御部３０７は、データパケットをそのまま出力する（ステップＳ５０６）。
ステップＳ５０２では、出力制御部３０７は、データパケットのvalidフラグ２０１の評価を行う。validフラグ２０１の値が「０」である場合は、データパケットが空であると判断し、データ要求信号３１０（enable_out）を「１」に設定した後（ステップＳ５０３）、ステップＳ５０４の処理を行う。他方、validフラグ２０１の値が「１」である場合は、出力制御部３０７は、データパケットが空でないと判断し、データ要求信号３１０（enable_out）を「０」に設定する（ステップＳ５０７）。続いて、出力制御部３０７は、データパケットをそのままフリップフロップ３１３へ出力する（ステップＳ５０６）。
【００２０】
ステップＳ５０４では、出力制御部３０７は、データ処理部からのデータ有効信号３１１（valid_in）の値を評価する。 データ有効信号３１１の値が「１」である場合は、データ入力信号３１２（data_in）の値が有効であると判断し、ステップＳ５０５の処理を行う。他方、「０」である場合は、出力制御部３０７は、データ入力信号３１２（data_in）の値が無効であると判断し、データパケットをそのままフリップフロップ３１３へ出力する（ステップＳ５０６）。
ステップＳ５０５では、出力制御部３０７は、出力するデータパケットの生成を行う。例えば、出力制御部３０７は、出力カウンタ３０９の値を順序カウンタ２００の値として設定し、validフラグ２０１を「１」に設定し、stallフラグ２０２を「０」に設定する。また、出力制御部３０７は、ＩＤ２０３を出力ＩＤレジスタ３０８の値に設定し、データ２０４にデータ入力信号３１２（data_in）の値を設定する。その後、出力制御部３０７は、生成したデータパケットをフリップフロップ３１３へ出力を行うとともに、出力カウンタ３０９の値を「１」カウントアップする（ステップＳ５０６）。
なお、フリップフロップ３１３に入力されたデータパケットは、１クロック遅延した後、データパケット出力端子３１４を介して後段の通信処理部へ出力される。
【００２１】
図６に、第１の通信処理手段の一例である通信処理部１０８の構成を示す。６００は、データパケットの入力端子である。６０１は、データ制御部である。データ制御部６０１は、リングバス１１４とデータ入力部１０１とからのデータパケットの選択を行い、後述するフリップフロップ６０２へ出力する。また、データ制御部６０１は、リングバス１１４から入力されたデータパケットのstallフラグ２０２の値「１」が複数のクロックサイクルの期間続く場合には、後述するstallカウンタ６０６に対してイネーブル信号を「１」として出力する。
さらに、データ制御部６０１は、後述するパケットカウンタ６０９，６１２，６１５，６１８に対して夫々イネーブル信号を「１」として出力する。なお、この出力は、リングバス１１４から入力されたデータパケットのＩＤ２０３が後述する待ち受けＩＤレジスタ６０８，６１１，６１３，６１４に格納されているＩＤの値と等しく、かつstallカウンタ６０６の値が「６」の場合に行われる。ただし、データ制御部６０１は、リングバス１１４から入力されるデータパケットのＩＤ２０３及び順序カウンタ２００の値を常に観測している。よって、データ制御部６０１は、stallカウンタ６０６の値が「６」になったときにデータ制御部６０１に入力されたデータパケットがリングバスを一周して再びデータ制御部６０１に戻ってくる間に関してのみ、イネーブル信号の値「１」を出力する。つまり、２周目以降に関しては、イネーブル信号の値は「０」となる。
【００２２】
６０２は、データ制御部６０１からのデータパケットを格納するフリップフロップである。６０３は、データパケット出力端子である。６０４は、データ入力部１０１へのデータ要求信号（enable_out）である。enable_outの値が「１」であるときはデータ入力部１０１からのデータが入力可能であることを示し、「０」であるときはデータの入力が不可能であることを示す。６０５は、データ入力部１０１からのデータの入力が有効であることを示すための有効信号（valid_in）である。valid_inの値が「１」であるときは有効を示し、「０」であるときは無効を示す。
６０６は、リングバス１１４から入力されたデータパケットのstallフラグ２０２の値「１」が複数のクロックサイクルの間連続している数を数えるためのstallカウンタである。stallカウンタ６０６は、データ制御部６０１からのイネーブル信号の値が「１」である間カウントアップが行われ、イネーブル信号の値が「０」のとき「０」値に（クリア）される。ただし、本実施形態の場合は、図１に示したようにリングバス１１４に格納することができるデータパケットの数は６個であるので、stallカウンタ６０６の値が「６」になった時点でカウントアップが停止される。また、６０７のカウンタ値出力信号を通して制御部１１５からカウンタ値が読み出される。さらに、カウンタ値出力信号６０７は、データ制御部６０１にも入力され、後述するパケットカウンタ６０９，６１２，６１５，６１８に対するイネーブル信号の生成に用いられる。
６０８，６１１，６１４，６１７は、待ち受けＩＤレジスタであり、本実施形態のデータ処理装置のデータ処理部の数だけ設けられる。６０９，６１２，６１５，６１８は、デッドロック時に待ち受けＩＤレジスタ６０８，６１１，６１３，６１４夫々に設定したＩＤと一致したデータパケットの数を数えるためのデータパケットカウンタである。前述したデータ制御部６０１からのイネーブル信号の値が「１」であるときにカウントアップが行われる。また、夫々のカウント値の読み出しは、６１０，６１３，６１６，６１９の制御信号を通して、制御部１１５により行われる。ここで、図１の制御信号１１７は、カウンタ値出力信号６０７、制御信号６１０，６１３，６１６，６１９等の詳細な信号群を簡略化して１本で表現したものである。
【００２３】
図７を参照して、通信処理部１０８の動作を説明する。ステップＳ７００では、データパケット入力端子６００にリングバス１１４からデータパケットが入力される。このとき、ステップＳ７０１では、validフラグ２０１の値が「０」である場合は、データ入力部１０１からのデータパケットの入力が可能である。よって通信処理部１０８は、データ要求信号３１０（enable_out）の値を「１」に設定し（ステップＳ７０２）、フリップフロップ６０２を通してデータパケット出力端子６０３へデータ入力部１０１からのデータパケットを出力する（ステップＳ７０３）。他方、validフラグ２０１の値が「１」である場合は、リングバス１１４からのデータパケットを優先するため、通信処理部１０８は、データ要求信号３１０（enable_out）の値を「０」に設定する（ステップＳ７０４）。そして、通信処理部１０８は、フリップフロップ６０２を通してデータパケット出力端子６０３へリングバス１１４からのデータパケットを出力する（ステップＳ７０５）。その他、stallカウンタ６０６，パケットカウンタ６０９，６１２，６１４，６１５の動作については、前述してあるので、ここでの説明は省略する。
【００２４】
図８に、第１の通信処理手段の一例である通信処理部１１３の構成を示す。８００は、データパケットの入力端子である。８０１は、データ制御部である。データ制御部８０１は、リングバス１１４から入力されたデータパケットを後述するフリップフロップ８０２、又は後述するデータパケット出力端子８０３へ出力する。８０２は、データ制御部８０１からのデータパケットを格納するフリップフロップである。８０３は、リングバス１１４にデータパケットを出力する出力端子である。８０４，８０５は、データ出力部１０６に出力するデータパケットのＩＤ２０３を格納する待ち受けＩＤレジスタである。８０６は、データ出力部１０６へデータパケットを出力するためのデータ出力信号（data_out）である。ここで、待ち受けＩＤレジスタは、データ処理装置で取り扱う最大のプロセス数分設けられる。本実施形態では、最大で２つのプロセスを取り扱うため、データ処理装置は、２個の待ち受けＩＤレジスタを備えている。
【００２５】
図９を参照して、通信処理部１１３の動作を説明する。初期設定として、制御部１１５により、待ち受けＩＤレジスタ８０４，８０５には予めデータフロー（プロセス）に応じた値が設定されているものとする。
ステップＳ９００では、データパケット入力端子８００からデータパケットが入力される。このとき、通信処理部１１３は、データパケットのvalidフラグ２０１の評価を行い（ステップＳ９０１）、validフラグ２０１の値が「１」である場合は、データパケットのデータが有効であると判断し、ステップＳ９０２の処理を行う。また、validフラグ２０１の値が「０」である場合は、通信処理部１１３は、データが無効であると判断し、ステップＳ９０５の処理を行う。ステップＳ９０５では、通信処理部１１３は、フリップフロップ８０２を介してデータパケット出力端子８０３へデータパケット入力端子８００から入力されたデータパケットをそのまま出力する。
ステップＳ９０２では、通信処理部１１３は、データパケットのＩＤ２０３と待ち受けＩＤレジスタ８０４，８０５の値の比較を行い、データパケットをデータパケット出力端子８０３へ出力すべきデータであるか否かを判断する。データパケットのＩＤ２０３と待ち受けＩＤレジスタの値が一致した場合は、通信処理部１１３は、出力すべきデータパケットであると判断し、データパケット出力端子８０３へ出力する（ステップＳ９０３）。また、通信処理部１１３は、データパケットのvalidフラグ２０１とstallフラグ２０２とを「０」に設定し（ステップＳ９０４）、空のデータパケットとしてフリップフロップ８０２を介してデータパケット出力端子８０３へ出力する（ステップＳ９０５）。他方、通信処理部１１３は、データパケットのＩＤ２０３と待ち受けＩＤレジスタとが一致しない場合は、ステップＳ９０５の処理を行う。ステップＳ９０５では、通信処理部１１３は、フリップフロップ８０２を介してデータパケット出力端子８０３へデータパケット入力端子８００から入力されたデータパケットをそのまま出力する。
【００２６】
図１０に、データ入力部１０１の構成を示す。１０００は、メモリ１００から入力データのリードを行うためのメモリ制御信号である。１００１は、メモリ１００の制御を行うメモリ制御部である。１００２は、データパケットを生成するパケット生成部である。１００３は、データパケットを通信処理部１０８に対して出力するデータパケット出力端子である。１００４は、制御部１１５からメモリ制御部１００１に対して制御を行うためのメモリ制御部制御信号である。１００５は、制御部１１５からパケット生成部１００２に対して制御を行うためのパケット生成部制御信号である。ここで、図１の制御信号１１６は、メモリ制御部制御信号１００４、パケット生成部制御信号１００５等の詳細な信号群を簡略化して１本で表現したものである。
【００２７】
ここで、データ入力部１０１の動作を説明する。まず、制御部１１５からの制御により、メモリ制御部１００１に対して、メモリ制御部制御信号１００４を介して、メモリ１００内に本実施形態で扱う２つのプロセス（以下、プロセスａ、プロセスｂと称する。）のデータがどのアドレス領域に格納されているかが設定される。また、パケット生成部１００２に対しては、パケット生成部制御信号１００５を介して、パケット生成時にプロセスａ又はプロセスｂに対応するデータに対して夫々設定するＩＤ２０３が設定される。その後、制御部１１５からメモリ制御部制御信号１００４を介して、メモリ制御部１００１に処理の開始が通知される。メモリ制御部１００１は、メモリ１００の所定のアドレスからのデータを読み出し、そのデータと、アドレスに対応するプロセス名とをパケット生成部１００２に対して出力する。パケット生成部１００２は、プロセス名から所定のＩＤ２０３の設定とデータを設定してデータパケットを生成し、データパケット出力１００３へ出力する。
【００２８】
図１１に、データ出力部１０６の構成を示す。１１００は、通信処理部１１３からのデータパケットの入力端子である。１１０１は、入力されたデータパケットからデータを分離するデータ分離部である。１１０２は、メモリ１０７に対してデータの書き込み制御を行うメモリ制御部である。１１０３は、メモリ１０７へのメモリ制御信号である。１１０４は、制御部１１５からメモリ制御部１１０２に対して制御を行うためのメモリ制御部制御信号である。１１０５は、制御部１１５からデータ分離部１１０１に対して制御を行うためのデータ分離部制御信号である。ここで、図１の制御信号１１８は、メモリ制御部制御信号１１０４、データ分離部制御信号１１０５等の詳細な信号群を簡略化して１本で表現したものである。
【００２９】
ここで、データ出力部１０６の動作を説明する。まず、制御部１１５からの制御により、データ分離部１１０１に対しては、データ分離部制御信号１１０５を介して、プロセスａ又はプロセスｂにおける処理が終了した後のデータパケットのＩＤ２０３が設定される。メモリ制御部１１０２に対しては、メモリ制御部制御信号１１０４を介して、メモリ１０７内にプロセスａ及びプロセスｂのデータがどのアドレス領域に格納されているかが設定される。その後、データパケット入力部１１００が入力される度に、データ分離部１１０１は、データパケットからデータの分離と、データパケットのＩＤ２０３とプロセスａ又はプロセスｂとの対応付けを行う。そして、データ分離部１１０１は、データとプロセス名とをメモリ制御部１１０２へ出力する。メモリ制御部１１０２は、プロセス名に従って、メモリ１０７の所望のアドレス領域にデータを書き込む。
【００３０】
図１２を参照して、データ処理装置のデッドロック状態からの復帰動作を説明する。ステップＳ１２００では、制御部１１５は、デッドロック状態の検出を行う。前述のように、データ入力部１０１のstallカウンタ６０６の値が「６」である場合、制御部１１５は、stallフラグ２０２が「１」であるデータパケットでリングバス１１４が有されているため、デッドロック状態であると判定する。
制御部１１５は、デッドロック状態を検出した場合は、データ入力部１０１からのデータパケットの入力を一旦停止し、プロセスを破棄するためにリセットを行うデータパスを決定する（ステップＳ１２０１）。リセットするデータパスの決定は、制御部１１５が通信処理部１０８のパケットカウンタ６０９，６１２，６１５，６１８の値を、制御信号６１０，６１３，６１６，６１９を介して夫々参照して行う。本実施形態では、制御部１１５は、カウント値が大きいＩＤ２０３に係るデータパケットが、デッドロックの主な要因となっていると判断する。そのＩＤ２０３に係るデータパケットを出力するプロセスを破棄するために該当するデータパスのリセットを行う。
【００３１】
ステップＳ１２０２では、制御部１１５は、ステップＳ１２０１で決定したデータパスのリセットを行う。リセット動作は、制御部１１５からリセット信号（１２０，１２１，１２２，１２３）の所望のリセット信号を値「１」に設定することにより行われる。リセット時の通信処理部（１０９，１１０，１１１，１１２）の動作は、図４及び図５で説明した通りであり、破棄するプロセスに関連するデータパケットが、所望の通信処理部のリセット動作により消去される。このとき、所望の通信処理部に接続されたデータ処理部から出力されるデータは、通信処理部にて破棄される。ただし、破棄するプロセスが拡大処理等、データ処理部から出力されるデータが多くて、そのデータの破棄に多くのクロックサイクルを要する場合は、データ処理部に対してもリセット動作を行うことにより、そのデータが一括して破棄される。なお、リセット信号が入力された通信処理部の入力カウンタ３０３及び出力カウンタ３０９はリセットされるが、待ち受けＩＤレジスタ３０２及び出力ＩＤレジスタ３０８はリセットされずに保持される。
ステップＳ１２０３では、制御部１１５は、リセット動作の解除を行う。ここで、リセット信号のアサートは、リングバス１１４上をデータパケットが１周するクロックサイクル行われ、本実施形態の場合は、６クロックサイクル以上行われる。
【００３２】
ステップＳ１２０４では、制御部１１５から、制御信号６１０，６１３，６１６，６１９を介して通信処理部１０８のパケットカウンタ６０９，６１２，６１５，６１８の値「０」への設定（クリア）を行う。その後、データ処理装置は、データ入力部１０１からのデータパケットの入力を再開する。ただし、データ処理装置は、ステップＳ１２００から１２０３までで破棄されたプロセスを最初からやり直す場合は、データパスの初期設定を行った後、データパケットの入力を再開する。また、破棄していないプロセスのデータパスに関しては、データ処理装置は、データパケットの入力を再開するのみで何も行わない。
また、データパケットの入力を再開した後再びデッドロック状態に陥らないようにするために、制御部１１５は、データ入力部１０１に対してデータ入力部１０１から入力するデータパケットの数を制限する制御をする。また、制御部１１５は、データ入力部１０１に対してデッドロック状態を引き起こしたプロセスのデータパケットの数を制限する制御をしてもよい。
このような構成によれば、リングバス１１４でデッドロック状態が発生したとしても、全ての処理を破棄することなく、通常動作に復帰することが可能となる。また、処理時間のロスを極力（場合によっては最小限に）抑えることが可能となる。また、デッドロック状態の再発を防止することができる。
【００３３】
（第２の実施形態）
図１３に、第２の実施形態に係るデータ処理装置の構成を示す。各部品に関して、第１の実施形態に係るデータ処理装置での機能と機能が同じものは、図１で用いた符号と同一とし、説明を省略する。主な違いは、１３００から１３０４までのデータパケットの流れを制御する通信処理部、１３０５のデータ出力部、及び１３０６から１３０９までのリセット信号である。なお、第１の実施形態では、制御部１１５からのリセット信号が通信処理部にも入力されていたが、本実施形態では、データ処理部のみに入力される。データパケットのフォーマットは、第１の実施形態で示したもの（図２）と同一であるので、説明を省略する。
【００３４】
図１４に、通信処理部１３０１から１３０４までの構成を示す。各部品に関して、第１の実施形態に係るデータ処理装置での機能と機能が同じものは、図３で用いた符号と同一とし、説明を省略する。主な違いは、リセット信号３１５が削除されている点である。本実施形態では、リセット時にデータパケットのデータを消去する動作は、データ処理部で行われるため、入力制御部３０１にはリセット信号が入力されていない。また、デッドロック状態からの復帰動作において、制御部１１５よりデータパスの再設定が行われ、そのときに同時に入力カウンタ３０３及び出力カウンタ３０９も値「０」に初期化されるので、両カウンタに対してリセット信号が入力されていない。
【００３５】
図１５及び１６を参照して、通信処理部（１３０１，１３０２，１３０３，１３０４）の動作を説明する。初期設定として、制御部１１５により、待ち受けＩＤレジスタ３０２及び出力ＩＤレジスタ３０８が設定され、入力カウンタ３０３及び出力カウンタ３０９が「０」に設定（リセット）されているものとする。また、入力制御部３０１で制御される入力側と、出力制御部３０７で制御される出力側は独立に動作するため、夫々の動作を分けて説明する。
【００３６】
まず、図１５を参照して、入力側の動作を説明する。各ステップに関して、図４で説明したものと動作が同じものは、ステップの番号を同一として説明を省略する。主な違いは、リセット時の動作である、ステップＳ４０１，４１０，４１１，４１２が省略されている点である。
ここで、データ処理部のリセット動作時には、入力制御部３０１は、データを消去する動作として、ステップＳ４０５のenable_inが常に「１」としてデータを受け付け、後述するように処理後のデータを通信処理部に出力しない。また、入力制御部３０１は、次にステップＳ４０６の処理を行い、出力制御部３０７に対してvalidフラグ２０１及びstallフラグ２０２が「０」の空のデータパケットを出力して、データパケットの消去を行う。
【００３７】
次に、図１６を参照して、出力側の動作を説明する。各ステップに関して、図５で説明したものと動作が同じものは、ステップの番号を同一として説明を省略する。主な違いは、リセット時の動作である、ステップＳ５０１，５０８が省略されている点である。
ここで、データ処理部のリセット動作時には、出力制御部３０７は、データを消去する動作として、ステップＳ５０４のvalid_inが常に「０」としてデータの出力を行わない。また、出力制御部３０７は、次にステップＳ５０６の処理を行い、前述の入力側の動作とあわせて、validフラグ２０１及びstallフラグ２０２が「０」の空のデータパケットを、フリップフロップ３１３を介してデータパケット出力端子３１４に出力する。
【００３８】
図１７に、通信処理部１３００の構成を示す。各部品に関して、第１の実施形態に係るデータ処理装置での機能と機能が同じものは、図６で用いた符号と同一とし、説明を省略する。動作については、図７で説明したものと同一であるため、説明を省略する。
【００３９】
図１８に、データ出力部１３０５の構成を示す。各部品に関して、第１の実施形態に係るデータ処理装置での機能と機能が同じものは、図１１で用いた符号と同一とし、説明を省略する。主な違いは、１８００，１８０１のカウンタと、１８０２,１８０３の制御信号が追加されている点である。１８００は、入力されたプロセスａのデータパケットを数えるためのカウンタである。１８０１は、入力されたプロセスｂのデータパケットを数えるためのカウンタである。１８０２は、制御部１１５からカウンタ１８００に対して制御を行うためのカウンタ制御信号である。１８０３は、制御部１１５からカウンタ１８０１に対して制御を行うためのカウンタ制御信号である。ここで、カウンタは、データ処理装置で取り扱う最大のプロセス数分設けられている。本実施形態では最大で２つのプロセスを取り扱うため、データ処理装置は、２個のカウンタを備えている。また、図１３に示す制御信号１１８は、データ分離部制御信号１１０５、メモリ制御部制御信号１１０４、カウンタ制御信号１８０２，１８０３等の詳細な信号群を簡略化して１本で表現したものである。
【００４０】
ここで、データ出力部１３０５の動作を説明する。図１１で説明したように、まず、制御部１１５からの制御により、データ分離部１１０１に対しては、データ分離部制御信号１１０５を介して、プロセスａ又はプロセスｂにおける処理が終了した後のデータパケットのＩＤ２０３が設定される。また、メモリ制御部１１０２に対しては、メモリ制御部制御信号１１０４を介して、メモリ１０７内にプロセスａ及びプロセスｂのデータがどのアドレス領域に格納されているかが設定される。
また、カウンタ制御信号１８０２，１８０３を介して、カウンタ１８００，１８０１が夫々値「０」に設定（クリア）される。その後、データ出力部１３０５は、データパケットが入力される度に、データ分離部１１０１で、データパケットからデータの分離と、データパケットのＩＤ２０３とプロセスａ又はプロセスｂとの対応付けを行う。
そして、データ出力部１３０５は、メモリ制御部１１０２にデータとプロセス名とをメモリ制御部１１０２へ出力する。このとき、カウンタ１８００，１８０１は、夫々のプロセスのデータパケットが入力される度にカウントアップが行われる。また、制御部１１５は、カウンタ制御信号１８０２，１８０３を介して、カウンタ１８００，１８０１の夫々の値を読み出すことが可能である。そして、メモリ制御部１１０２は、プロセス名に従って、メモリ１０７の所望のアドレス領域にデータを書き込む。
【００４１】
本実施形態に係るデータ処理装置のデッドロック状態からの復帰動作を説明する。本復帰動作は、第１の実施形態で示した図１２のフローに従うが、以下で、各ステップでの処理が異なる部分を説明する。
まず、ステップＳ１２００では、制御部１１５は、デッドロック状態の検出を行う。検出方法としては、制御部１１５は、データ出力部１３０５のカウンタ１８００，１８０１の値が制御部１１５内の図示していないタイマーで計測して、ある一定期間動かない場合は、デッドロック状態と判定する。
第１の実施形態と同様に、ステップＳ１２００でデッドロック状態が検出された場合は、制御部１１５は、データ入力部１０１からのデータパケットの入力を一旦停止し、ステップＳ１２０１にて、プロセスを破棄するためにリセットを行うデータパスを決定する。
【００４２】
リセットするデータパスの決定は、以下の２つのうちの何れかの方法で行われる。
（１）データ入力部１０１から入力されたデータパケットの数とデータ出力部１３０５で出力されるデータパケットの数とが等しく、データ量の増減が無い場合、制御部１１５は、データ出力部１３０５内のカウンタ１８００，１８０１の値を夫々参照する。そして、制御部１１５は、値の小さい、すなわち最も処理が進んでいないプロセスを破棄するために該当するデータパスの決定（リセット）を行う。なお、制御部１１５は、カウンタ制御信号１８０２，１８０３を介して夫々の値を参照する。
（２）拡大処理等、データ処理部によって前記データ量が増加する処理が含まれるプロセスがある場合は、制御部１１５は、そのプロセスがデッドロックの主な要因となっていると判断する。そして、制御部１１５は、該当する（出力データが増加する割合の最も大きいデータ処理部を含むプロセスの）データパスの決定（リセット）を行う。
【００４３】
次のステップＳ１２０２では、制御部１１５は、ステップＳ１２０１で決定したデータパスのリセットを行う。リセット動作は、制御部１１５からリセット信号（１３０６，１３０７，１３０８，１３０９）の所望のリセット信号を値「１」に設定することにより行われる。リセット時の通信処理部（１３０１，１３０２，１３０３，１３０４）及びデータ処理部（１０２，１０３，１０４，１０５）の動作は、図１５及び図１６で説明した通りである。例えば、破棄するプロセスに関連するデータパケットが、所望のデータ処理部のリセット動作により消去される。
また、ステップＳ１２０３以降の処理に関しては第１の実施形態と同一であるので、説明を省略する。
なお、第１の実施形態及び第２の実施形態で説明した、ステップＳ１２０１のリセットするデータパスの決定方法以外に、制御部１１５が優先度の低いプロセスに該当するデータパスのリセットを行うことにより、デッドロック状態からの復帰動作を行ってもよい。
また、第１の実施形態及び第２の実施形態では、２つのプロセスに関して処理する場合を説明したが、これに限られるものではない。例えば、３つ以上のプロセスに関しても、少なくとも１つのプロセスを破棄することによりデータ処理装置内のデータパケットの空きを生成し、デッドロック状態から復帰させることが可能である。
【００４４】
このように、制御部１１５は、デッドロック状態を引き起こす要因となるプロセス、他のプロセスと比べて処理が進んでいないプロセス、優先順位の低いプロセス等に関係するデータパスのみリセットを行い、リングバス１１４上に空きデータパケットを生成する。この構成によれば、複数のプロセス（データパス）を処理中にリングバス１１４でデッドロック状態が発生したとしても、全ての処理を破棄することなく、所望のプロセスのみキャンセルして通常動作に復帰することが可能となる。また、この構成によれば、処理時間のロスを極力（場合によっては最小限に）抑えることが可能となる。
【００４５】
＜その他の実施形態＞
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。例えば、ＣＰＵが、記憶装置に格納されたプログラムの手順に従って処理を行うことによって、データ処理装置における機能及びフローチャートに係る処理が実現される。
【００４６】
以上、本発明の好ましい実施形態について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【００４７】
１０１  データ入力部、１０２−１０５  データ処理部、１０６  データ出力部、１０８−１１３  通信処理部、１１４  リングバス、１１５  制御部、１１６−１１９  制御信号、１２０−１２３  リセット信号
【図１】
0005460156.tif 000002
【図２】
0005460156.tif 000003
【図３】
0005460156.tif 000004
【図４】
0005460156.tif 000005
【図５】
0005460156.tif 000006
【図６】
0005460156.tif 000007
【図７】
0005460156.tif 000008
【図８】
0005460156.tif 000009
【図９】
0005460156.tif 000010
【図１０】
0005460156.tif 000011
【図１１】
0005460156.tif 000012
【図１２】
0005460156.tif 000013
【図１３】
0005460156.tif 000014
【図１４】
0005460156.tif 000015
【図１５】
0005460156.tif 000016
【図１６】
0005460156.tif 000017
【図１７】
0005460156.tif 000018
【図１８】
0005460156.tif 000019