(57)【要約】      （修正有）【課題】リング状シリアル通信システムにおいて、通信エラーが発生した場合に、システムの初期化を行うことなくエラー状態からの復帰処理を行うことを可能とする。【解決手段】マスタモジュール及びスレーブモジュールはそれぞれ通信エラーを検出するエラー検出手段を有し、またマスタモジュールは更に外部に対してエラー状態を通知するためのエラー通知手段を有し、スレーブモジュールはエラーを検出した場合に、該エラーが検出されたトランザクションについてはモジュール内部への処理を行わず、下流モジュールに対して該エラーが検出されたトランザクションをそのまま転送し、マスタモジュールはリングを１周して戻ってきたトランザクションにエラーを検出した場合に前記エラー通知手段により外部にエラー発生を通知するようにしたことによってシステムの初期化を行うことなくエラー状態からの復帰処理を行う。【選択図】        図１
2006148796.tif 000002
【特許請求の範囲】
【請求項１】
情報処理システムに上に存在する、リング状に接続された複数のモジュール間の通信方法であって、
前記複数のモジュールは、該モジュールを識別するためのアドレス情報と転送する情報の種類や形式を表すコマンド情報、及び転送データ情報を１ビットあるいは２ビット以上の複数ビットにシリアライズされた情報転送信号と、同期をとるためのクロック信号によって信号が一方向に流れるようにリング状に接続され、このリングのマスタとなるマスタモジュールが１つ存在し、リングに接続される他のモジュールはスレーブモジュールとして動作し、前記マスタモジュールはリングに接続されているスレーブモジュールに対してライトアクセス或いはリードアクセスを行うためのトランザクションを発行する手段を持ち、前記スレーブモジュールは上流のモジュールから送られてきたトランザクションを下流のモジュールに対して転送する手段と、前記トランザクションを処理する手段とを持つように構成された通信方法において、
前記マスタモジュール及びスレーブモジュールはそれぞれ通信エラーを検出するエラー検出手段を有し、
また前記マスタモジュールは更に外部に対してエラー状態を通知するためのエラー通知手段を有し、
前記スレーブモジュールはエラーを検出した場合に、該エラーが検出されたトランザクションについてはモジュール内部への処理を行わず、下流モジュールに対して該エラーが検出されたトランザクションをそのまま転送し、
前記マスタモジュールはリングを１周して戻ってきたトランザクションにエラーを検出した場合に前記エラー通知手段により外部にエラー発生を通知するようにしたことを特徴とする通信方法。
【請求項２】
前記マスタモジュールが発行するトランザクションには通信エラーを検出するための情報を含むことを特徴とする請求項１に記載の通信方法。
【請求項３】
前記マスタモジュールが発行するトランザクションにはスレーブモジュールを初期化するための初期化トランザクションを含み、
スレーブモジュールはハードリセット中を除くいかなる状態にあっても前記初期化トランザクションを最優先で受け付けるように構成したことを特徴とする請求項１に記載の通信方法。
【請求項４】
情報処理システムに上に存在する、リング状に接続された複数のモジュール間の通信装置であって、
前記複数のモジュールは、該モジュールを識別するためのアドレス情報と転送する情報の種類や形式を表すコマンド情報、及び転送データ情報を１ビットあるいは２ビット以上の複数ビットにシリアライズされた情報転送信号と、同期をとるためのクロック信号によって信号が一方向に流れるようにリング状に接続され、このリングのマスタとなるマスタモジュールが１つ存在し、リングに接続される他のモジュールはスレーブモジュールとして動作し、前記マスタモジュールはリングに接続されているスレーブモジュールに対してライトアクセス或いはリードアクセスを行うためのトランザクションを発行する手段を持ち、前記スレーブモジュールは上流のモジュールから送られてきたトランザクションを下流のモジュールに対して転送する手段と、前記トランザクションを処理する手段とを持つように構成された通信装置において、
前記マスタモジュール及びスレーブモジュールはそれぞれ通信エラーを検出するエラー検出手段を有し、
また前記マスタモジュールは更に外部に対してエラー状態を通知するためのエラー通知手段を有し、
前記スレーブモジュールはエラーを検出した場合に、該エラーが検出されたトランザクションについてはモジュール内部への処理を行わず、下流モジュールに対して該エラーが検出されたトランザクションをそのまま転送し、
前記マスタモジュールはリングを１周して戻ってきたトランザクションにエラーを検出した場合に前記エラー通知手段により外部にエラー発生を通知するようにしたことを特徴とする通信装置。
【請求項５】
前記マスタモジュールが発行するトランザクションには通信エラーを検出するための情報を含むことを特徴とする請求項４に記載の通信装置。
【請求項６】
前記マスタモジュールが発行するトランザクションにはスレーブモジュールを初期化するための初期化トランザクションを含み、
スレーブモジュールはハードリセット中を除くいかなる状態にあっても前記初期化トランザクションを最優先で受け付けるように構成したことを特徴とする請求項４に記載の通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置の各モジュール間の通信に関し、より詳細には、各モジュールをリング状に接続しての通信方法および通信装置に関するものである。
【背景技術】
【０００２】
従来、複数のモジュール間をリング状に接続して通信を行う技術としては、特許文献１のようなものがあった。このような方法では、モジュールに対して送られてきた命令をそのモジュールが解析を行い、自分に対する命令であると判断した場合はその命令を行い、その命令を次のモジュールに転送する。また、自分に対する命令でないと判断した場合はその命令を行わずに次のモジュールに転送する。ここで、自分に対する命令である場合には、その命令を次のモジュールに対して転送しないものや、命令を加工して転送するといった技術もある。
【特許文献１】特開平６−７７９７３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来このような各モジュールがリング状に接続されたシリアル通信システムにおいては、なんらかの原因により通信エラーが発生した場合に、システムの初期化を行うことなくエラー状態からの復帰を行うための仕組みがなかった。
【０００４】
本発明は、以上の点に着目して成されたもので、システムの初期化を行うことなくエラー状態からの復帰処理を行うことを可能とする通信方法および通信装置を提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記問題点を解決するために本出願に係る発明は、情報処理システムに上に存在する、リング状に接続された複数のモジュール間の通信方法および装置であって、前記複数のモジュールは、該モジュールを識別するためのアドレス情報と転送する情報の種類や形式を表すコマンド情報、及び転送データ情報を１ビットあるいは２ビット以上の複数ビットにシリアライズされた情報転送信号と、同期をとるためのクロック信号によって信号が一方向に流れるようにリング状に接続され、このリングのマスタとなるマスタモジュールが１つ存在し、リングに接続される他のモジュールはスレーブモジュールとして動作し、前記マスタモジュールはリングに接続されているスレーブモジュールに対してライトアクセス或いはリードアクセスを行うためのトランザクションを発行する手段を持ち、前記スレーブモジュールは上流のモジュールから送られてきたトランザクションを下流のモジュールに対して転送する手段と、前記トランザクションを処理する手段とを持つように構成された通信方法および装置において、前記マスタモジュール及びスレーブモジュールはそれぞれ通信エラーを検出するエラー検出手段を有し、また前記マスタモジュールは更に外部に対してエラー状態を通知するためのエラー通知手段を有し、前記スレーブモジュールはエラーを検出した場合に、該エラーが検出されたトランザクションについてはモジュール内部への処理を行わず、下流モジュールに対して該エラーが検出されたトランザクションをそのまま転送し、前記マスタモジュールはリングを１周して戻ってきたトランザクションにエラーを検出した場合に前記エラー通知手段により外部にエラー発生を通知するようにしたことを特徴とする。
【発明の効果】
【０００６】
本発明によれば、シリアライズされた情報転送信号と、同期をとるためのクロック信号によって信号が一方向に流れるようにリング状に接続され、このリングのマスタとなるマスタモジュールが１つ存在し、リングに接続される他のモジュールはスレーブモジュールとして動作するように構成された通信方法および装置において、前記マスタモジュール及びスレーブモジュールはそれぞれ通信エラーを検出するエラー検出手段を有し、また前記マスタモジュールは更に外部に対してエラー状態を通知するためのエラー通知手段を有し、前記スレーブモジュールはエラーを検出した場合に、該エラーが検出されたトランザクションについてはモジュール内部への処理を行わず、下流モジュールに対して該エラーが検出されたトランザクションをそのまま転送し、前記マスタモジュールはリングを１周して戻ってきたトランザクションにエラーを検出した場合に前記エラー通知手段により外部にエラー発生を通知するようにしたことによってシステムの初期化を行うことなくエラー状態からの復帰処理を行うことが可能となった。
【発明を実施するための最良の形態】
【０００７】
以下本発明を実施するための最良の形態について図面を参照して実施例により詳しく説明する。
【０００８】
図１は、本発明の実施の形態の構成を示すブロック図である。図１では、各モジュールが第１のリング経路１１１、第２のリング経路１１２、第３のリング経路１１３、第４のリング経路１１４によってリング状に接続されている。１００はマスタモジュール（以下、単に「マスタ」と記載することがある）であり、リング内で唯一コマンドトランザクションを発行することができる。１０１〜１０３はマスタモジュール１００からアクセスされる対象であるスレーブモジュール（以下、単に「スレーブ」と記載することがある）１０１〜１０３である。マスタモジュール１００はリングに対してコマンドトランザクションやデータトランザクション（トランザクションの詳細については後述する）を発行する役割と、マスタモジュール１００が発行し、最終的に戻ってくるコマンド／データトランザクション、およびスレーブモジュール１０１〜１０３が発行するリードデータトランザクションを受け取る役割を担っている。
【０００９】
スレーブモジュール１０１〜１０３は上位のリング経路から送られてくるトランザクションを下位のリング経路にフォワードすると共に、自分に対するリードコマンドを受け取った時には、リードデータトランザクションを発行する。
【００１０】
なお、この例ではリング経路上にスレーブモジュールが３個存在しているが、後述するスレーブＩＤとして４ビットの信号を使用することにより、一つのリング経路上に最大１５個のスレーブモジュールを接続することが可能である。
【実施例】
【００１１】
上記した本発明の実施の形態について更に詳細に説明すべく、本発明の一実施例について、図面を参照して詳細に説明する。
【００１２】
各モジュールはモジュール間で通信するための出力ポートと入力ポートを持っている。
【００１３】
マスタモジュール１００の出力ポートと第１のスレーブモジュール１０１の入力ポートは第１のリング経路１１１で接続されている。また、第１のスレーブモジュール１０１の出力ポートと第２のスレーブモジュール１０２の入力ポートは第２のリング経路１１２で接続されており、第２のスレーブモジュール１０２の出力ポートと第３のスレーブモジュール１０３の入力ポートは第３のリング経路１１３、第３のスレーブモジュール１０３の出力ポートとマスタモジュール１００の入力ポートはリング経路１１４でそれぞれ接続されている。
【００１４】
このように構成されるリングでは、コマンド／データトランザクションが転送される方向は決まっており、マスタモジュール１００→第１のスレーブモジュール１０１→第２のスレーブモジュール１０２→第３のスレーブモジュール１０３→マスタモジュール１００という方向にのみ転送が可能である。
【００１５】
マスタモジュール１００はＣＰＵなどの上位モジュール（図示せず）とシステムバス（図示せず）によって接続され、前記上位モジュールから各種設定やトランザクションの発行要求がなされる。
【００１６】
各リング経路は以下に示す２本の信号線によって構成されている。
【００１７】
ｃｌｋ          クロック信号
リングにおけるデータ転送はこのクロック信号に同期して行われる。
【００１８】
ｓｒｄ          シリアルリングデータ信号
コマンドトランザクション、データトランザクションが本信号線にシリアライズして送られる。
【００１９】
リングに流れるトランザクションの種類は以下の６種類である。
【００２０】
コンフィギュレーショントランザクション：
マスタモジュールが、リング上に何個のスレーブモジュールが接続されているか認証を行うためのトランザクションである。マスタは、スレーブの数を表す情報（スレーブＩＤ）を０の状態でリング経路に対してトランザクションを発行する。各スレーブは、コンフィギュレーショントランザクションを受け取ると、上流から転送されてきたスレーブＩＤに＋１した値を内部のレジスタに格納すると共に、次段に転送する。このようにしてトランザクションがマスタに戻ってくると、マスタはリング上に接続されているスレーブの個数を知ることが出来る。マスタは初期化後は他のトランザクションに先んじて、まず最初にコンフィギュレーショントランザクションを発行する必要がある。
【００２１】
ライトコマンドトランザクション：
マスタがスレーブに対してライトを行うコマンドトランザクションであり、ライトアドレスデータを含む。
【００２２】
ライトデータトランザクション：
ライトコマンドトランザクションで指定されたアドレスに書き込むライトデータを転送するデータトランザクションであり、アクセスタイプとして、３２ｂｉｔ、１６ｂｉｔ、８ｂｉｔがある。
【００２３】
リードコマンドトランザクション：
マスタがスレーブからのリードを行うコマンドトランザクションであり、リードアドレスデータを含む。
【００２４】
リードデータトランザクション：
リードコマンドトランザクションで指定されたアドレスからのリードデータを転送するデータトランザクションであり、アクセスタイプとして、３２ｂｉｔ、１６ｂｉｔ、８ｂｉｔがある。
【００２５】
リセットトランザクション：
マスタからスレーブに対してリセットを行うためのトランザクションである。マスタは一度のリセットトランザクションにより全てのスレーブをリセットすることができ、また設定に応じて特定のスレーブのみをリセットをすることも可能である。
【００２６】
各トランザクションに含まれる情報は以下のようなものがある。
【００２７】
［全トランザクション共通（ヘッダ）］
トランザクションタイプ  ２ｂｉｔ
（トランザクションの種類を示す）
１１：リセット
１０：コマンドまたはデータ
０１：リザーブ
００：コンフィギュレーション
ライト／リード          １ｂｉｔ
（コマンド／データトランザクションがライトであるかリードであるかを示す）
１：ライト
０：リード
コマンド／データ        １ｂｉｔ
（トランザクションがコマンドであるかデータであるかを示す）
１：コマンド
０：データ
アクセスタイプ          ２ｂｉｔ
（トランザクションのアクセス単位（データビット幅）を示す）
１１：３２ｂｉｔ
１０：１６ｂｉｔ
０１：８ｂｉｔ
００：リザーブ
リザーブビット          ２ｂｉｔ
［コンフィギュレーショントランザクション］
ヘッダ                  ８ｂｉｔ
スレーブＩＤ            ４ｂｉｔ（マスタからの出力値は  ”０”  に固定）
リザーブ                ４ｂｉｔ
［コマンドトランザクション］
ヘッダ                  ８ｂｉｔ
スレーブＩＤ            ４ｂｉｔ
（スレーブＩＤを示す（１〜Ｆ））
アドレス              ２８ｂｉｔ
（トランザクションのアドレス）
［データトランザクション］
ヘッダ                  ８ｂｉｔ
データ      ８／１６／３２ｂｉｔ
（トランザクションのデータ。アクセスタイプにより、ビット数が変化する）
［リセットトランザクション］
ヘッダ                  ８ｂｉｔ
スレーブＩＤ            ４ｂｉｔ
リザーブ                ４ｂｉｔ
以上の各トランザクションは１ｂｉｔにシリアライズされて送られるが、その際に図２に示すように８ｂｉｔ毎に分割され、付加ビット（ｓｔｕｆｆｅｄ  ｂｉｔ）として“１”が前記８ｂｉｔの前に、またパリティビット（ｐａｒｉｔｙ  ｂｉｔ）が前記８ｂｉｔの後に付加され、この連続する合計１０ｂｉｔがリングを流れるシリアル信号の単位となり、これら１０ｂｉｔのデータ列を２〜５つ組み合せることにより１つのトランザクションを形成する。各トランザクションの最初の１０ｂｉｔがそのトランザクションのヘッダ情報であり、スレーブモジュールはこのヘッダ情報を解析することによりトランザクションの内容を知ることができる。
【００２８】
以上説明したリングを流れる各トランザクションのフォーマットを図３〜図６に示す。
【００２９】
図３はコンフィギュレーショントランザクション、図４はライトまたはリードコマンドトランザクション、図５はライトまたはリードデータトランザクションで、同図（ａ）がアクセスタイプ３２ビットの場合、（ｂ）がアクセスタイプ１６ビットの場合、（ｃ）がアクセスタイプ８ビットの場合を示している。また、図６はリセットトランザクションである。
【００３０】
上記リングでは、トランザクションが送られていない時は各モジュールから“０”が出力されている。
【００３１】
スレーブモジュールは、リング上を流れる情報をパターン認識することによりヘッダのデータ列を検出する。そして検出したヘッダを解析し、ライトコマンド／データトランザクションにおいては、トランザクションを最後まで受け取ってから下位のリング経路にフォワードするのではなく、サイクル毎に無条件で下位のリング経路にフォワードしていく。つまり、トランザクションを上位のリングから受け取りながらその一方で下位のリングにフォワードする。これによりライトの動作を高速に行うことができる。
【００３２】
一旦マスタモジュール１００から発行されたトランザクションは各スレーブモジュールを経由し、最終的にマスタモジュール１００に戻ってくる。
【００３３】
前記各トランザクションは、ＣＰＵなどの上位のモジュール（図示せず）からマスタモジュール１００が持つ所定の内部レジスタに書き込みを行うと、マスタモジュール１００により発行される。
【００３４】
以下、マスタモジュール１００が持つレジスタの説明をする。
【００３５】
［Ｅｎａｂｌｅ＿ｒｅｇ］  ｗｒｉｔｅ／ｒｅａｄ
マスタモジュールのイネーブルレジスタ。マスタの動作を有効にするためには“１”に設定する。
【００３６】
［ＩｎｔＳｔａｔ＿ｒｅｇ］  ｗｒｉｔｅ（ｃｌｅａｒ）／ｒｅａｄ
割り込み要因を示すレジスタ。パリティエラー発生時に“１”となる。本レジスタに“１”を書き込むことによりクリアされる。
【００３７】
［ＷｒｉｔｅＡｃｃｅｓｓＴｙｐｅ＿ｒｅｇ］  ｗｒｉｔｅ／ｒｅａｄ
ライト時のアクセスタイプ（データビット幅）を３２，１６，８ビットから指定する。
【００３８】
［ＷｒｉｔｅＡｄｄ＿ｒｅｇ］  ｗｒｉｔｅ／ｒｅａｄ
ライトアドレスを指定する。
【００３９】
［ＷｒｉｔｅＤａｔａ＿ｒｅｇ］  ｗｒｉｔｅ／ｒｅａｄ
ライトデータを指定する。
【００４０】
［ＲｅａｄＡｃｃｅｓｓＴｙｐｅ＿ｒｅｇ］  ｗｒｉｔｅ／ｒｅａｄ
リード時のアクセスタイプ（データビット幅）を３２，１６，８ビットから指定する。
【００４１】
［ＲｅａｄＡｄｄ＿ｒｅｇ］  ｗｒｉｔｅ／ｒｅａｄ
リードアドレスを指定する。
【００４２】
［ＲｅａｄＤａｔａ＿ｒｅｇ］  ｒｅａｄ
リードデータが格納される。
【００４３】
［ＣｏｎｆｉｇＳｔａｒｔ＿ｒｅｇ］  ｗｒｉｔｅ／ｒｅａｄ
マスタにコンフィギュレーショントランザクションの開始を指示する。
【００４４】
［ＣｏｎｆｉｇＮｕｍ＿ｒｅｇ］  ｒｅａｄ
コンフィギュレーション結果が格納されている。
【００４５】
［ＲｅｓｅｔＣｍｄ＿ｒｅｇ］  ｗｒｉｔｅ／ｒｅａｄ
マスタにリセットトランザクションの発行を指示する。
【００４６】
［ＲｅｓｅｔＩＤ＿ｒｅｇ］  ｗｒｉｔｅ／ｒｅａｄ
リセットトランザクションによってリセットを行うスレーブモジュールを指定する。
【００４７】
“０”で全てのスレーブモジュールを初期化、“１”〜“Ｆ”は該当する順番のスレーブのみが初期化される。
【００４８】
次に、各トランザクションにおける前記上位モジュール、マスタ及びスレーブモジュールの動作を説明する。
【００４９】
１．コンフィギュレーショントランザクション
システム初期化後、まず最初にこのリング経路を使用したライトやリード動作を可能にするために、マスタモジュール１００はまず最初に前記コンフィギュレーショントランザクションを発行してスレーブの数を知る必要がある。
【００５０】
図７にコンフィギュレーショントランザクションのフローを示す。ここではリング上にスレーブモジュールが３個接続されている例を示す。
【００５１】
最初に前記上位モジュールがマスタモジュール内のレジスタＣｏｎｆｉｇＳｔａｒｔ＿ｒｅｇに“１”を書き込み、マスタにコンフィギュレーショントランザクションの発行を要求する（ステップ７０１）。
【００５２】
これを受け、マスタモジュールはリング経路にコンフィギュレーショントランザクションを発行する。この時のスレーブＩＤは“０”である（ステップ７０２）。
【００５３】
次にリング経路上にある最初のスレーブモジュール（スレーブ＃１）はコンフィギュレーショントランザクションを受け取ると、受信したスレーブＩＤ（＝０）を“１”を加算した値に書き換え、下位のリングに転送する（ステップ７０３〜７０５）。
【００５４】
同様にして、第２のスレーブモジュール（スレーブ＃２）、第３のスレーブモジュール（スレーブ＃３）においてもスレーブＩＤに“１”が加算され（ステップ７０６〜７１１）、マスタモジュールにトランザクションが帰ってくる。この時のスレーブＩＤの値は“３”となっている（ステップ７１２）。マスタモジュールはこの結果を内部のレジスタＣｏｎｆｉｇＮｕｍ＿ｒｅｇに書き込む（ステップ７１３）。ここまででコンフィギュレーショントランザクションが完了したことになる。
【００５５】
一方、前記上位モジュールはこのＣｏｎｆｉｇＮｕｍ＿ｒｅｇの値を読むことにより、コンフィギュレーショントランザクションが完了したかどうかを知ることができる。この値が“０”であれば、マスタにトランザクションが戻ってきてないことを示しており、“０”以外の値が読めた時がコンフィギュレーショントランザクションが完了したと見なすことができ、ここで読めた値がリング上に接続されているスレーブモジュールの数を表している（ステップ７１４〜７１６）。
【００５６】
２．ライトコマンド／データトランザクション
ライトおよびリードはコマンドトランザクションとデータトランザクションに分かれている。
【００５７】
ライト時のフローを図８に示す。
【００５８】
ライトを行う場合、上位モジュールはまず前記マスタモジュールのレジスタＷｒｉｔｅＡｃｃｅｓｓＴｙｐｅ＿ｒｅｇでライト時のアクセスタイプを指定する（ステップ８０１）。次にＷｒｉｔｅＡｄｄ＿ｒｅｇにライトアドレスを書き込むと（ステップ８０２）、マスタモジュールはライトコマンドトランザクションを発行する（ステップ８０３）。スレーブモジュールは前記ライトコマンドトランザクションで指定されるアドレスが自分宛であれば次のライトデータトランザクションに備える（ステップ８０４）。
【００５９】
一方、前記上位モジュールはライトアドレスに続いてライトデータをＷｒｉｔｅＤａｔａ＿ｒｅｇに書き込むと（ステップ８０５）、マスタモジュールはライトデータトランザクションを発行する（ステップ８０６）。前記ライトコマンドトランザクションでアドレスが指定されたスレーブモジュールはこのライトデータトランザクションを受け付け（ステップ８０７）、内部ロジックに書き込んで（ステップ８０８）ライト動作が完了する。
【００６０】
ライト動作においては、マスタモジュールは自らの発行したトランザクションが戻ってくるのを待たずに次のトランザクションを発行することができ、またスレーブモジュールは内部ロジックの書き込みが完了しなくても下位のリングにトランザクションを転送するため、上位モジュールは最終的にスレーブの内部ロジックにライトが完了したことを知ることはできない。確認のためには次に述べるリードトランザクションにより当該アドレスからのリードを行う必要がある。
【００６１】
また、連続したアドレスに続けて複数のデータをライトする場合は、ライトコマンドトランザクションを送る必要がなく、最初にスタートアドレスとなるライトコマンドトランザクションを送った後、連続してライトデータトランザクションを送ることが出来る。この場合、上位モジュールはステップ８０２のＷｒｉｔｅＡｄｄ＿ｒｅｇへのスタートアドレスの書き込みを一度行った後、ステップ８０５のＷｒｉｔｅＤａｔａ＿ｒｅｇへのライトデータの書き込みを必要な回数だけ繰り返せばよい。
【００６２】
３．リードコマンド／データトランザクション
リード時のフローを図９に示す。
【００６３】
リードの場合もライト時と同様に、上位モジュールはまずマスタモジュールのレジスタＲｅａｄＡｃｃｅｓｓＴｙｐｅ＿ｒｅｇでリード時のアクセスタイプを指定する（ステップ９０１）。次にＲｅａｄＡｄｄ＿ｒｅｇにリードアドレスを書き込むと（ステップ９０２）、マスタモジュールはリードコマンドトランザクションを発行する（ステップ９０３）。スレーブモジュールは前記リードコマンドトランザクションで指定されるアドレスが自分宛であれば次のリードデータトランザクションに備える（ステップ９０４）。
【００６４】
一方、前記上位モジュールがリードアドレスの書き込みに続いてＲｅａｄＤａｔａ＿ｒｅｇを読み出すと（ステップ９０５）、マスタモジュールはリードデータトランザクションを発行する（ステップ９０６）。前記リードコマンドトランザクションでアドレスが指定されたスレーブモジュールはこのリードデータトランザクションを受け付け（ステップ９０７）、内部ロジックからデータの読み出しを行い、前記リードデータトランザクションにデータを乗せて下位のリング経路に発行する（ステップ９０８）。マスタモジュールは以上のようにして前記リング経路を１周して戻ってきたリードデータトランザクションのリードデータを内部のＲｅａｄＤａｔａ＿ｒｅｇに格納し（ステップ９０９）、この値が前記上位モジュールからのリード動作に対する確定値となり（ステップ９１０）、これをもってリードが完了する。
【００６５】
尚、マスタモジュールはリードデータトランザクションを発行した後、スレーブモジュールからのリードデータトランザクションを受け取るまでは次のトランザクションを発行することは出来ない。
【００６６】
また、連続したアドレスから続けて複数のデータをリードする場合は、リードコマンドトランザクションを送る必要がなく、最初にスタートアドレスとなるリードコマンドトランザクションを送った後、連続してデータトランザクションを送ることが出来る。この場合、上位モジュールはステップ９０２のＲｅａｄＡｄｄ＿ｒｅｇへのスタートアドレスの書き込みを一度行った後、ステップ９０５のＲｅａｄＤａｔａ＿ｒｅｇからの読み出し動作を必要な回数だけ繰り返せばよい。
【００６７】
４．リセットトランザクション
リセット時のフローを図１０に示す。
【００６８】
スレーブのリセットを行う場合、前記上位モジュールはまず最初にマスタ内のレジスタＲｅｓｅｔＩＤ＿ｒｅｇでリセットを行うスレーブを指定する（ステップ１００１）。
【００６９】
次にマスタモジュール内のレジスタＲｅｓｅｔＣｍｄ＿ｒｅｇに“１”を書き込み、マスタにリセットトランザクションの発行を要求する（ステップ１００２）。
【００７０】
これを受け、マスタモジュールは前記リング経路に向けてリセットトランザクションを発行する（ステップ１００３）。
【００７１】
リング上の最初のスレーブモジュールは前記リセットトランザクションを受信すると（ステップ１００４）、リセットＩＤが自分に該当するか否かをチェックし（ステップ１００５）、該当であれば内部ロジックの初期化を行いつつ（ステップ１００６）、リセットトランザクションには変更を加えずにそのまま下位のリングに転送する。また、ステップ１００５でリセットＩＤが自分に該当しなければ何もせずにそのままトランザクションを下位のリングに転送する（ステップ１００７）。同様な処理がリング上に接続されている全てのスレーブモジュールで順に行われ、最後に前記マスタモジュールにリセットトランザクションが戻ってくると（ステップ１００８）、マスタモジュールはレジスタＲｅｓｅｔＣｍｄ＿ｒｅｇを“０”に書き換えてリセットトランザクションが完了する（ステップ１００９）。
【００７２】
上位モジュールはこのＲｅｓｅｔＣｍｄ＿ｒｅｇの内容をリードすることでリセットトランザクションが完了したことを知ることができる。
【００７３】
以上説明した各トランザクションは前述した通り８ビット単位に分割され、前後に付加ビット及びパリティビットが加えられた１０ビットのシリアル信号としてリング経路上を流れる。
【００７４】
次に前記パリティビットによるエラー検出及びエラー時とエラー状態からの復帰処理について説明する。
【００７５】
パリティビットは前記１０ビットの信号中、“１”である数が偶数になるようにトランザクション出力時に出力モジュール（マスタまたはスレーブ）が付加するビットである。一方、トランザクションを受信するモジュールは常に１０ビットの信号中、“１”であるビットの数を監視し、これが偶数でない時にはパリティエラーとしてエラー処理の動作を行う。
【００７６】
１．スレーブモジュールがパリティエラーを検出した場合
スレーブモジュールが上位リングからのトランザクションにパリティエラーを検出した時は、その内容に係わらずそのトランザクションに変更を加えずそのまま下位リングに転送する。また、内部ロジックに対しては何もアクションを起こさない。従って、リング経路の途中で外部ノイズ等の何らかの原因によりパリティエラーを起こしたトランザクションは、その時の状態のままマスタモジュールに戻ることになる。
【００７７】
２．マスタモジュールがパリティエラーを検出した場合
マスタモジュールがリング経路を経由して戻ってきたトランザクションにパリティエラーを検出した場合、マスタモジュールは前記上位モジュールに対して割り込み信号を出力すると共に、内部のレジスタＩｎｔＳｔａｔ＿ｒｅｇに“１”を立てる。
【００７８】
以上のようにして上位モジュールは前記割込み信号によりパリティエラーの発生を知ることができる。また、この状態からシステム全体を初期化することなくエラーからの復帰動作を行うことができる。以下その手順を図１１のフローチャートを参照しながら説明する。
【００７９】
まず始めに上位モジュールはパリティエラーによる割り込みを検出すると（ステップ１１０１）、マスタモジュールの割り込み要因レジスタＩｎｔＳｔａｔ＿ｒｅｇに“１”を書き込む。これによりレジスタはクリアされ、値は“０”となる（ライトクリア）（ステップ１１０２）。
【００８０】
次に上位モジュールはマスタモジュールのレジスタＲｅｓｅｔＣｍｄ＿ｒｅｇに“１”を書き込み（ステップ１１０３）、マスタは前述のように全てのスレーブに対してリセットトランザクションを発行する。リセットトランザクションを受け付けたスレーブモジュールは前述のように自らの内部ロジックを初期化すると共にトランザクションを下位リングに転送し、マスタモジュールにトランザクションが戻るとマスタモジュールはレジスタＲｅｓｅｔＣｍｄ＿ｒｅｇを“０”に書き換えてリセットトランザクションが完了する（ステップ１１０４）。ここでリセットトランザクションが必要となるのは、各スレーブモジュールは、パリティエラーを検出すると、その時の状態によっては、エラー発生後、次に来るトランザクションを正しく受け付けられないことがあるからである。例えば、ライトコマンドトランザクションを受け付けた直後のライトデータトランザクションがパリティエラーとなった場合はそのデータトランザクションはエラーとして無視され、スレーブの状態としては引き続き次に来るべきライトデータトランザクション待ちの状態となっているため、他のトランザクションを正しく受け付けることができない。この状態を初期化するためにリセットトランザクションが必要となる。このため、スレーブモジュールは自らがどのような状態であってもリセットトランザクションのみは正しく受け付けるように設計されている。
【００８１】
次に上位モジュールはマスタモジュールのレジスタＣｏｎｆｉｇＳｔａｒｔ＿ｒｅｇに“１”を書き込むことにより（１１０５）、マスタは前述のようにコンフィグレーショントランザクションを発行し、各スレーブを通過しながらでコンフィグレーション動作が行われる（１１０６）。これは前記リセットトランザクションにより初期化された各スレーブモジュールに自らのスレーブＩＤを再認識させるためである。
【００８２】
以上でパリティエラーからの復帰処理は完了し、通常のライトやリードが行える状態になる。
【００８３】
以上、本発明の特定の実施例について説明したが、さらに他の修正および改善が可能であろう。例えば、ここに述べた通信経路の信号は、他の名称を持つが同じ基本的な機能を果すものとすることができる。アドレスおよびデータのビット幅、および他の値は設計に応じて変えることができる。また、本実施例では信号線を１本にシリアライズしているが、これを増やすことにより、転送のバンド幅を向上させることができる。したがって、本発明は示された特定の形式に限定されるものではなく、かつ添付の特許請求の範囲において本発明の精神および範囲から離れることのない全ての修正をカバーすることを考えていることが理解されるべきである。
【図面の簡単な説明】
【００８４】
【図１】本発明の実施の形態の構成を示すブロック図
【図２】リングを流れるトランザクションのフォーマットを示す図
【図３】コンフィギュレーショントランザクションのフォーマットを示す図
【図４】ライトまたはリードコマンドトランザクションのフォーマットを示す図
【図５】ライトまたはリードデータトランザクションのフォーマットを示す図
【図６】リセットトランザクションのフォーマットを示す図
【図７】コンフィギュレーショントランザクションのフローチャート
【図８】ライト時のフローチャート
【図９】リード時のフローチャート
【図１０】リセットトランザクションのフローチャート
【図１１】パリティエラーからの復帰処理のフローチャート
【符号の説明】
【００８５】
１００  マスタモジュール
１０１  第１のスレーブモジュール
１０２  第２のスレーブモジュール
１０３  第３のスレーブモジュール
１１１  第１のリング経路
１１２  第２のリング経路
１１３  第３のリング経路
１１４  第４のリング経路
【図１】
2006148796.tif 000003
【図７】
2006148796.tif 000004
【図８】
2006148796.tif 000005
【図９】
2006148796.tif 000006
【図１０】
2006148796.tif 000007
【図１１】
2006148796.tif 000008
【図２】
2006148796.tif 000009
【図３】
2006148796.tif 000010
【図４】
2006148796.tif 000011
【図５】
2006148796.tif 000012
【図６】
2006148796.tif 000013