(57)【要約】【課題】  階層化されたバス構造をもつマルチマスタバスシステムにおいては、データを書き込む経路と読み出す経路によっては、書き込むマスタが共有メモリデバイスからのライト応答を待たずに、もう一方の読み出すマスタに通知し、データを読み出しても、ライトトランザクションとリードトランザクションの実行順序は保証されることがある。それにも関わらず、いつも共有メモリデバイスからのライト応答を待つことは不必要に性能を損なう。【解決手段】  階層化されたバス構造をもつマルチマスタバスシステムにおいて、２つのマスタ間で共有メモリを介してデータの受け渡しを行う際に、データを書き込む経路と読み出す経路に応じて、最適なスレーブがライト応答を生成することで、ライトアクセスとリードアクセスの順序保証をする。【選択図】  図１
2012128520.tif 000002
【特許請求の範囲】
【請求項１】
マスタデバイスと、
前記マスタデバイスが接続されている第１のバスと、
スレーブデバイスが接続されている第２のバスと、
前記第１のバスと前記第２のバスとの間で接続され、前記マスタデバイスから前記スレーブデバイスへのライトトランザクションを受信すると、前記スレーブデバイスからの応答を待たずに前記マスタデバイスに前記ライトトランザクションに対する応答を出力するインターフェースと
を有することを特徴とするデータ処理装置。
【請求項２】
前記インターフェースは、前記マスタデバイスを示すマスタ情報と前記マスタで実行されるスレッドを示すスレッド情報を保持する保持手段を備え、前記ライトトランザクションに付加されているマスタ情報とスレッド情報とが前記保持手段の保持しているマスタ情報とスレッド情報に一致したときにライト応答を出力することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記第１のバス又は前記第２のバスに接続されているバスマスタを更に有し、前記マスタデバイスは前記ライトトランザクションを出力することで前記スレーブデバイスに接続されている共有メモリにデータを書き込み前記バスマスタに前記共有メモリに書き込んだデータを読み出させることで、前記マスタデバイスは前記バスマスタへ通信することを特徴とする請求項１に記載のデータ処理装置。
【請求項４】
前記マスタデバイスは前記ライトトランザクションに対する応答に基づいて前記バスマスタに前記共有メモリからデータを読み出させるために通知をすることを特徴とする請求項３に記載のデータ処理装置。
【請求項５】
前記第１のバス又は前記第２のバスに接続されている複数のバスマスタを更に有し、前記マスタデバイスは、通信相手のバスマスタに応じた固有のスレッド情報をライトトランザクションに付加して前記インターフェースへ出力することを特徴とする請求項３又は４に記載のデータ処理装置。
【請求項６】
前記スレーブデバイスは共有メモリに接続されているメモリ制御手段であることを特徴とする請求項１乃至５のいずれか１項に記載のデータ処理装置。
【請求項７】
前記インターフェースは、前記マスタデバイスを示すマスタ情報と前記マスタデバイスに割り当てられている共有メモリのアドレス情報を保持する保持手段を備え、ライトトランザクションに付加されているマスタ情報とアドレス情報とが前記保持手段の保持しているマスタ情報とアドレス情報とに一致したときに応答を出力することを特徴とする請求項１記載のデータ処理装置。
【請求項８】
マスタデバイスと、
前記マスタデバイスが接続されている第１のバスと、
スレーブデバイスが接続されている第２のバスと、
第３のバスと、
前記第１のバスと前記第３のバスとの間で接続され、前記マスタデバイスから前記スレーブデバイスへのライトトランザクションを受信すると、前記スレーブデバイスからの応答を待たずに前記マスタデバイスに前記ライトトランザクションに対する応答を出力する第１のインターフェースと、
前記第３のバスと前記第２のバスとの間で接続され、前記第１のインターフェースから前記スレーブデバイスへのライトトランザクションを受信すると、前記スレーブデバイスからの応答を待たずに前記第１のインターフェースに前記ライトトランザクションに対する応答を出力する第２のインターフェースと
を有することを特徴とするデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマルチマスタバスを有するデータ処理装置に関する。
【背景技術】
【０００２】
近年、システムオンチップ（ＳＯＣ）では、多様な機能を実現するためにバスに接続するマスタデバイス（以下、マスタ）の数が増加する傾向にある。マスタが増加すると高周波数を達成するための配置や配線が困難になるため、バスを階層化し、１つのバスに接続するマスタ数を減らす手法が取られる。この手法により、バスの階層化が進んでいる。
【０００３】
バスが階層化されたシステムにおいてマスタがスレーブデバイス（以下、スレーブ）にアクセスするとき、マスタが発行したトランザクションがスレーブに到達するまでに階層化された複数のバスを経由してスレーブに到達する。そして、スレーブからの応答も複数のバスを経由してマスタに到達する。そのためマスタがスレーブへのトランザクションを発行してから応答を受信するまでのレイテンシが大きくなり、システム性能が低下するという問題がある。
【０００４】
この問題に対応するため、従来のデータ処理装置は、マスタのライトトランザクションが、スレーブデバイスで実行される前に、ライトの応答を返すポステッドライト方式を採用することがある。例えば特許文献１に、アクセス先のスレーブデバイスによってポステッドライト方式を選択する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−２２７３９３
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、ポステッドライト方式を採用すると、マスタはライトトランザクションがスレーブデバイスで実行されたかどうかを検知できなかった。マルチマスタ構成のシステムにおいて、一般的に２つのマスタ間で共有メモリを介してデータの受け渡しを行う場合、データを書き込むマスタがライトトランザクションを発行した後に、もう一方の読み出すマスタに通知し、データを読み出す。ポステッドライト方式を採用すると、読み出すマスタのリードトランザクションが、書き込むマスタのライトトランザクションより先に実行される可能性があり、その場合正しいデータが読めなくなる可能性がある。
【０００７】
特許文献１に開示された技術においては、共有メモリデバイスを非ポステッド領域にし、書き込むマスタはライトトランザクションの応答を待ってから読み出すマスタに通知することで、正しいデータが読めることを保証している。
【０００８】
これによると、共有メモリデバイスにアクセスするマスタはいつもスレーブデバイスからのライトの応答を待つ。しかし、階層化されたバス構造をもつマルチマスタバスシステムにおいては、データを書き込む経路と読み出す経路によっては、書き込むマスタが共有メモリデバイスからのライト応答を待たずに、もう一方の読み出すマスタに通知し、データを読み出しても、ライトトランザクションとリードトランザクションの実行順序は保証されることがある。
【０００９】
これは、一般的に１つのシステムバスにバスマスタ、バススレーブが接続するバスシステムにおいて、１つのバスマスタがライトトランザクションを発行した後に同一アドレスにリードトランザクションを発行する場合、先に発行されたライトトランザクションと、後に発行されたリードトランザクションの実行される順序が変わらないことが保証されているからである。
【００１０】
図１２（Ａ）に従来の階層化されたバス構造のマルチマスタバスシステムを有するデータ処理装置１２００を示す。１２０１は第一のバスであり、バスマスタとして、マスタＡ１２０２、マスタＢ１２０３、バススレーブとしてブリッジ１２０４が接続されている。１２０５は第二のバスであり、バスマスタとしてブリッジ１２０４、マスタＣ１２０６、バススレーブとしてスレーブデバイス１２０７が接続されている。スレーブデバイス１２０７は共有メモリとする。ブリッジ１２０４は第一のバス１２０１と第二のバス１２０５との間でインターフェースとして機能するブロックで、第一のバス１２０１上ではバススレーブとして動作し、第二のバス１２０５上ではバスマスタとして動作する。
【００１１】
次に、マスタＡ１２０２、マスタＢ１２０３間でスレーブデバイス１２０７を介してデータの受け渡しを行う動作について説明する。図１２（Ｂ）は、マスタＡ１２０２がスレーブデバイス１２０７にデータを書き込み、マスタＢ１２０３がデータを読み出すシーケンスである。
【００１２】
マスタＡ１２０２がスレーブデバイス１２０７へデータを書き込むためのライトトランザクションをブリッジ１２０４に発行する（１２１１）。ブリッジ１２０４はスレーブデバイス１２０７にライトトランザクションを転送する（１２１２）。スレーブデバイス１２０７はライトトランザクションを受け取るとデータ書き込み処理を行い、ライト応答をブリッジ１２０４に返す（１２１３）。ブリッジ１２０４はライト応答をマスタＡ１２０２に返す（１２１４）。マスタＡ１２０２はライト応答を受信すると図示しない割り込み信号を使ってマスタＢ１２０３にライトの完了を通知する（１２１５）。
【００１３】
マスタＢ１２０３はライトの完了通知１２１５を受信するとスレーブデバイスのデータを読み込むためのリードトランザクションをブリッジ１２０４に発行する（１２１６）。ブリッジ１２０４はリードトランザクション１２１６を受信するとスレーブデバイス１２０７にリードトランザクションを転送する（１２１７）。スレーブデバイス１２０７はリード処理を行い、リード応答をブリッジ１２０４に返す（１２１８）。ブリッジ１２０４はリード応答をマスタＢ１２０３に転送する（１２１９）。
【００１４】
上記シーケンスによると、マスタＡ１２０２のスレーブデバイス１２０７へのライトトランザクションとマスタＢ１２０３のスレーブデバイス１２０７へのリードトランザクションは、スレーブデバイス１２０７から見ると第二のバスのバスマスタであるブリッジ１２０４によって発行される。
【００１５】
前述の通り、第二のバス１２０５のバスマスタであるブリッジ１２０４がライトトランザクション１２１２を発行した後に同一アドレスにリードトランザクション１２１７を発行する場合、先に発行されたライトトランザクションと、後に発行されたリードトランザクションの実行される順序が変わらないことが保証されている。そのためマスタＡ１２０２のライトトランザクション１２１１は、ブリッジ１２０４に到達した時点で後から到着するマスタＢ１２０３のリードトランザクション１２１７より先に実行されることが決定する。
【００１６】
また、いつもスレーブデバイス１２０７からのライト応答を待つ必要があるため、システム性能が損なわれてしまう。一方、マスタＡ１２０２、マスタＣ１２０６間で共有メモリを介してデータの受け渡しを行う場合はライトトランザクションとリードトランザクションの実行される順序保証をするためにスレーブデバイス１２０７からの応答を待つ必要がある。
【００１７】
本発明は上記課題に鑑みてなされたものであり、性能を損なうことなく、階層化されたバス構造を持つマルチマスタバスシステムにおけるライトトランザクションとリードトランザクションの順序保証をする。
【課題を解決するための手段】
【００１８】
上記課題を解決するため、本発明に係るデータ処理装置はマスタデバイスと、前記マスタデバイスが接続されている第１のバスと、スレーブデバイスが接続されている第２のバスと、前記第１のバスと前記第２のバスとの間で接続され、前記マスタデバイスから前記スレーブデバイスへのライトトランザクションを受信すると、前記スレーブデバイスからの応答を待たずに前記マスタデバイスに前記ライトトランザクションに対する応答を出力するインターフェースとを有することを特徴とする。
【発明の効果】
【００１９】
本発明によれば階層化されたバス構造を持つマルチマスタバスシステムにおいて、ライトトランザクションとリードトランザクションの実行順序を、システム性能の低下を抑えつつ保証することができる。
【図面の簡単な説明】
【００２０】
【図１】データ処理装置のブロック図である。
【図２】応答生成部の内部構成を示すブロック図である。
【図３】ブリッジの動作を示すフローチャートである。
【図４】ＣＰＵ間で共有メモリを介してデータの受け渡しを行う際のシーケンスを示すチャートである。
【図５】応答生成部の内部構成を示すブロック図である。
【図６】ブリッジの動作を示すフローチャートである。
【図７】ＣＰＵ間で共有メモリを介してデータの受け渡しを行う際のシーケンスを示すチャートである。
【図８】データ処理装置のブロック図である。
【図９】応答生成部の内部構成を示すブロック図である。
【図１０】ブリッジの動作を示すフローチャートである。
【図１１】ＣＰＵ間で共有メモリを介してデータの受け渡しを行う際のシーケンスを示すチャートである。
【図１２】従来のデータ処理装置のブロック図と、ＣＰＵ間で共有メモリを介してデータの受け渡しを行う際のシーケンスを示すチャートである。
【発明を実施するための形態】
【００２１】
（実施形態１）
図１は本発明の一実施形態である実施形態１に係る、データ処理装置１００の概略構成を示すブロック図である。１０１はシステムバス（第２のバス）、１０２はメインＣＰＵ、１０３はサブシステムである。サブシステム１０３の内部はサブシステムバス１０３１（第１のバス）、サブシステムＣＰＵ１０３２（マスタデバイス、以下ＣＰＵ＿Ａと呼ぶ）、サブシステムＣＰＵ１０３３（以下ＣＰＵ＿Ｂと呼ぶ）を有する。システムバス１０１、サブシステムバス１０３１はトランザクション毎にマスタＩＤ、スレッドＩＤ情報が付加されるバスプロトコルである。
【００２２】
ここで、ＣＰＵ＿Ａ１０３２のマスタＩＤを０、ＣＰＵ＿Ｂ１０３３のマスタＩＤを１、メインＣＰＵ１０２のマスタＩＤを２とする。ＣＰＵ＿Ａ１０３２はマルチスレッドプロセッサであり、トランザクション発行時には、トランザクションにスレッドを識別するためのスレッドＩＤ情報を付加する。１０３４はＣＰＵ＿Ａ１０３２からＣＰＵ＿Ｂ１０３３へ割り込みを発生させる割り込み信号である。
【００２３】
１０４はブリッジであり、サブシステムバス１０３１とシステムバス１０１との間でインターフェースとして機能する。ここで、サブシステムバス１０３１をマスタ側のバス（以下、マスタバスと呼ぶ）、システムバス１０１をスレーブ側のバス（以下、スレーブバスと呼ぶ）とする。トランザクションはマスタバスからスレーブバスへ転送され、応答はスレーブバスからマスタバスへ転送される。
【００２４】
１０５はシステムバス１０１に接続する共有メモリコントローラ（メモリ制御部）であり、共有メモリへのアクセス要求を受信したとき、共有メモリへのアクセスを制御し、応答信号を生成して出力する。１０６はＣＰＵ＿Ａ１０３２からメインＣＰＵ１０２への割り込み信号である。
【００２５】
メインＣＰＵ１０２はシステムバス１０１を経由して共有メモリへアクセスすることが可能である。ＣＰＵ＿Ａ１０３１、ＣＰＵ＿Ｂ１０３２もまた、サブシステムバス１０３１、ブリッジ１０４、システムバス１０１を経由して共有メモリへアクセスすることが可能である。ブリッジ１０４はＣＰＵ＿Ａ１０３１、ＣＰＵ＿Ｂ１０３２が発行したトランザクションを、サブシステムバス１０３１を経由して受信し、システムバス１０１へ転送する。また、共有メモリコントローラ１０５が発行した応答を、システムバス１０１を経由して受信し、サブシステムバス１０３１へ転送する。ブリッジ１０４はポステッドライト方式の応答を自動生成する応答生成部１０４１を備える。
【００２６】
図２に応答生成部１０４１の内部構成を示す。２０１はマスタＩＤ保持部、２０２はスレッドＩＤ保持部であり、予めデータ処理装置の外部から値を設定する。２０３はトランザクション比較部であり、マスタバスから受信したトランザクションに付加されたマスタＩＤ情報（マスタ情報）とマスタＩＤ保持部２０１の値、スレッドＩＤ情報（スレッド情報）とスレッドＩＤ保持部２０２の値を比較し、一致、不一致を判定する。２０４は応答比較部であり、スレーブバスから受信した応答に付加されたマスタＩＤ情報とマスタＩＤ保持部２０１の値、スレッドＩＤ情報とスレッドＩＤ保持部２０２の値を比較し、一致、不一致を判定する。２０５はマスタバスインターフェース応答制御部であり、トランザクション比較部２０３が、一致と判定したときにライト応答を生成し、マスタバスに発行する。また、マスタバスインターフェース応答制御部２０５は、応答比較部２０４が不一致と判定したときにスレーブバスから受信した応答をマスタバスに転送する。
【００２７】
図３はブリッジ１０４の動作を示す。図３（Ａ）はマスタバスからのトランザクションを受信した時のブリッジ１０４の動作を示す。図３（Ａ）ではマスタバスからトランザクションを受信すると処理がスタートする。
【００２８】
まず、トランザクション比較部２０３はトランザクションがライトかどうかを判定する（Ｓ３０１）。ステップＳ３０１においてライトと判定すると、トランザクション比較部２０３は、さらにトランザクション情報に付加されたマスタＩＤとスレッドＩＤが保持部２０１、２０２の値と一致しているかを判定する（Ｓ３０２）。ステップＳ３０２において一致と判定すると、マスタバスインターフェース応答制御部２０５はライト応答を生成し、マスタバスに発行する（Ｓ３０３）。トランザクションをスレーブバスへ転送する（Ｓ３０４）。ステップＳ３０１においてトランザクションはライトではないと判定する、あるいは、Ｓ３０２においてマスタＩＤとスレッドＩＤとが保持部の値と一致しないと判定すると、ライト応答を生成することなくトランザクションをスレーブバスへ転送する。
【００２９】
図３（Ｂ）はスレーブバスからの応答受信時のブリッジ１０４の動作を示す。スレーブバスから応答を受信すると処理がスタートする。応答比較部２０４は応答に付加されたマスタＩＤとスレッドＩＤが保持部２０１、２０２の値と一致しているかを判定する（Ｓ３０５）。ステップ３０５で応答に付加されたマスタＩＤとスレッドＩＤが保持部２０１、２０２の値と一致しなければ、マスタバスインターフェース応答制御部２０５は応答をマスタバスへ転送する（Ｓ３０６）。一方ステップＳ３０５において一致していると判定すると、マスタバスへ転送することなく処理を終了する。
【００３０】
図４にこの装置において、ＣＰＵ間で共有メモリを介してデータの受け渡しを伴う通信を行うシーケンスを示す。ＣＰＵ＿Ａ１０３２はデータ転送前に、ブリッジ１０４内部のマスタＩＤ保持部２０１に０、スレッドＩＤ保持部２０２に１を設定する（４０１）。自動応答生成部１４０１への設定は他のマスタが行ってもよい。
【００３１】
４０２はＣＰＵ＿Ａ１０３２がメインＣＰＵ１０２にデータを渡すシーケンスである。ＣＰＵ＿Ａ１０３２が、スレッドＩＤ番号が０のスレッドにて、共有メモリへデータを書き込むためのライトトランザクションを発行する（４０３）。ライトトランザクションには、マスタＩＤは０、スレッドＩＤは０の情報が付加される。なおスレッドＩＤ番号は通信相手となるバスマスタ（サブシステムＣＰＵ、メインＣＰＵなどを含む）に応じて固有の値を設定するものとする。
【００３２】
ブリッジ１０４が、ライトトランザクション４０３を受信すると、内部のトランザクション比較部２０３によってマスタＩＤとスレッドＩＤの情報が、マスタＩＤ保持部２０１、スレッドＩＤ保持部２０２の値と一致しないと判定され、ライトトランザクションを共有メモリコントローラ１０５へ転送する（４０４）。
【００３３】
そして、共有メモリコントローラ１０５は、共有メモリへデータを書いた後にライト応答を発行する（４０５）。ブリッジ１０４はライト応答受信後、内部の応答比較部２０４において、マスタＩＤとスレッドＩＤの情報が、マスタＩＤ保持部２０１、スレッドＩＤ保持部２０２の値と一致しないと判定し、ライト応答をＣＰＵ＿Ａ１０３２へ転送する（４０６）。ＣＰＵ＿Ａ１０３２はライト応答受信後に、メインＣＰＵ１０２に割り込み通知を発行し、データ書き込み完了を知らせる（４０７）。メインＣＰＵ１０２は共有メモリのデータを読み出すためのリードトランザクションを発行する（４０８）。共有メモリコントローラ１０５が、共有メモリのデータ読み出し完了後にリード応答を発行し、メインＣＰＵはデータを受信する（４０９）。
【００３４】
本装置によると、ＣＰＵ＿Ａ１０３２がライト応答４０６を受信した時点で共有メモリへのデータ書き込みは完了しており、４０８にてメインＣＰＵ１０２はＣＰＵ＿Ａ１０３２が書いたデータを読むことが保証できる。
【００３５】
一方、４１０はＣＰＵ＿Ａ１０３２がＣＰＵ＿Ｂ１０３３にデータを渡すシーケンスである。ＣＰＵ＿Ａ１０３２が、スレッドＩＤ番号が１のスレッドにて、共有メモリへデータを書き込むためのライトトランザクションを発行する（４１１）。ライトトランザクションには、マスタＩＤは０、スレッドＩＤは１の情報が付加される。
【００３６】
ブリッジ１０４が、ライトトランザクション４１１を受信すると、内部のトランザクション比較部２０３においてマスタＩＤとスレッドＩＤの情報が、マスタＩＤ保持部２０１、スレッドＩＤ保持部２０２の値と一致すると判定し、ライト応答を生成する（４１２）と共に、ライトトランザクションを共有メモリコントローラ１０５へ転送する（４１３）。
【００３７】
そして、共有メモリコントローラ１０５は、共有メモリへデータを書いた後にライト応答を発行する（４１４）。ブリッジ１０４ではライト応答受信後、内部の応答比較部２０４によって、マスタＩＤとスレッドＩＤの情報が、マスタＩＤ保持部２０１、スレッドＩＤ保持部２０２の値と一致すると判定され、ＣＰＵ＿Ａ１０３２への転送は行わない。
【００３８】
ＣＰＵ＿Ａ１０３２は４１２において発行されたライト応答受信後に、ＣＰＵ＿Ｂ１０３３に割り込み通知を発行し、データ書き込み完了を知らせる（４１５）。ＣＰＵ＿Ｂ１０３３は共有メモリのデータを読み出すためのリードトランザクションを発行する（４１６）。ブリッジ１０４は、リードトランザクション４１６を受信すると、内部のトランザクション比較部２０３においてリードと判定し、リードトランザクションを共有メモリコントローラ１０５へ転送する（４１７）。共有メモリコントローラ１０５は共有メモリへのデータ読み出し完了後にリード応答を発行する（４１８）。ブリッジ１０４はリード応答を受信すると、内部の応答比較部２０４においてリードと判定し、リードトランザクションをＣＰＵ＿Ｂ１０３３へ転送する（４１９）。
【００３９】
本装置によると、ＣＰＵ＿Ａ１０３２がライト応答４１２を受信した時点で必ずしも共有メモリへのデータ書き込みは完了していない。しかし、バスブリッジ１０４が発行するライトトランザクション４１３と、同一アドレスへのリードトランザクション４１７の実行される順序は保証される。さらに、ＣＰＵ＿Ａ１０３２が４１１にて共有メモリ１０５へデータ書き込みを行ってから４１５にてＣＰＵ＿Ｂ１０３２に割り込み通知を発行するまでの待ち時間を削減する。
【００４０】
以上、本実施形態によれば、ＣＰＵ＿Ａ１０３２は同じ領域のスレーブデバイスへのアクセスであっても、メインＣＰＵ１０２にデータを渡すときはスレーブデバイスからのライト応答を、ＣＰＵ＿Ｂ１０３３にデータを渡すときはブリッジ１０４が生成するライト応答を受けて動く為、ライトトランザクションとリードトランザクションの実行順序の保証を、システム性能を損なうことなく可能にする。
【００４１】
（実施形態２）
次に実施形態２について説明する。なお、実施形態１と同一機能を有する構成や工程には同一符号を付すとともに、構成的、機能的にかわらないものについてはその説明を省略する。
【００４２】
図５に実施形態２の応答生成部１０４１の内部構成を示す。５０４は応答比較部であり、マスタバスから受信したトランザクションに付加されたマスタＩＤ情報とマスタＩＤ保持部５０１の値、アドレスを示すアドレス情報（共有メモリアドレスのアドレス全体でもよいし、一部でもよい、又アドレス領域に割り当てた固有の値でもよい、以下、単にアドレスと称す）とアドレス保持部５０２の値を比較する。そして、一致するとき、対応するトランザクションＩＤを内部に備えるキューに保持しておく。応答比較部５０４はスレーブバスから受信した応答に付加されたトランザクションＩＤ情報と、キューに保持しているトランザクションＩＤの値を比較し、一致、不一致を判定する。
【００４３】
図６はブリッジ１０４の動作を示す。図６（Ａ）はマスタバスからのトランザクション受信時のブリッジ１０４の動作を示し、マスタバスからトランザクションを受信すると処理がスタートする。
【００４４】
ステップＳ３０１、Ｓ３０３の処理は実施形態１と同様なので省略する。ステップＳ３０１においてライトと判定されると、トランザクション比較部２０３は、さらにトランザクション情報に付加されたマスタＩＤとアドレスが保持部５０１、５０２の値と一致しているかを判定する（Ｓ６０２）。
【００４５】
また実施形態２では、トランザクションがライトで、トランザクション情報に付加されたマスタＩＤとアドレスが保持部５０１、５０２の値と一致し、ライト応答を生成しマスタバスに発行した後、応答比較部５０４が対応するトランザクションＩＤをキューに保持する（Ｓ６０４）。そして次に、トランザクションをスレーブバスへ転送する（Ｓ６０５）。一方で、ステップＳ３０１においてトランザクションがライトと判定されない場合、あるいは、ステップＳ３０２においてマスタＩＤとアドレスが保持部５０１、５０２の値と一致しない場合、Ｓ６０３、Ｓ６０４は実行されずにトランザクションをスレーブバスへ転送する（Ｓ６０５）。
【００４６】
図６（Ｂ）はスレーブバスからの応答受信時のブリッジ１０４の動作を示す。スレーブバスから応答を受信すると処理がスタートする。応答比較部５０４は応答に付加されたトランザクションＩＤがキューに保持している値の内、どれかと一致しているかを判定する（Ｓ６０６）。応答に付加されたトランザクションＩＤがキューに保持しているどの値とも一致しなければ、マスタバスインターフェース応答制御部５０５は応答をマスタバスへ転送する（Ｓ６０７）。一方で、ステップＳ６０６で一致していると判定すると、キューから一致しているトランザクションＩＤ情報を消去し（Ｓ６０８）、応答をマスタバス１０３１へ転送することなく処理を終了する。
【００４７】
図７は実施形態２において、ＣＰＵ間で共有メモリを介してデータの受け渡しを行うシーケンスを示す。ＣＰＵ＿Ａ１０３２は、メインＣＰＵ１０２とのデータの受け渡しを共有メモリのアドレスＡ０番地で行い、ＣＰＵ＿Ｂ１０３３とのデータの受け渡しをアドレス共有メモリのＡ１番地で行うことを予め決めておく。ＣＰＵ＿Ａ１０３２はデータ転送前に、ブリッジ１０４内部のマスタＩＤ保持部５０１に０、アドレス保持部５０２にＡ１を設定する（７０１）。自動応答生成部１４０１への設定は他のマスタが行ってもよい。
【００４８】
７０２はＣＰＵ＿Ａ１０３２がメインＣＰＵ１０２にデータを渡すシーケンスである。ＣＰＵ＿Ａ１０３２が、共有メモリのＡ０番地へデータを書き込むためのライトトランザクションを発行する（７０３）。
【００４９】
ブリッジ１０４がライトトランザクション７０３を受信すると、内部のトランザクション比較部５０３によってマスタＩＤとアドレスの情報が、マスタＩＤ保持部５０１、アドレス保持部５０２の値と一致しないと判定され、ライトトランザクションを共有メモリコントローラ１０５へ転送する（７０４）。
【００５０】
そして、共有メモリコントローラ１０５は、共有メモリへデータを書いた後にライト応答を発行する（７０５）。ブリッジ１０４はライト応答受信後、内部の応答比較部５０４によって、マスタＩＤとアドレスの情報が、マスタＩＤ保持部５０１、アドレス保持部５０２の値と一致しないと判定され、ライト応答をＣＰＵ＿Ａ１０３２へ転送する（７０６）。ＣＰＵ＿Ａ１０３２はライト応答受信後に、メインＣＰＵ１０２に割り込み通知を発行し、データ書き込み完了を知らせる（７０７）。メインＣＰＵ１０２は共有メモリのデータを読み出すためのＡ０番地へのリードトランザクションを発行する（７０８）。共有メモリコントローラ１０５が、共有メモリのデータ読み出し完了後にリード応答を発行し、メインＣＰＵはデータを受信する（７０９）。
【００５１】
本装置によると、ＣＰＵ＿Ａ１０３２がライト応答７０６を受信した時点で共有メモリへのデータ書き込みは完了しており、７０８にてメインＣＰＵ１０２はＣＰＵ＿Ａ１０３２が書いたデータを読むことを保証できる。
【００５２】
一方、７１０はＣＰＵ＿Ａ１０３２がＣＰＵ＿Ｂ１０３３にデータを渡すシーケンスである。ＣＰＵ＿Ａ１０３２が、共有メモリのＡ１番地へデータを書き込むためのライトトランザクションを発行する（７１１）。ライトトランザクションには、マスタＩＤは０、アドレスはＡ１の情報が付加される。
【００５３】
ブリッジ１０４がライトトランザクション７１１を受信すると、内部のトランザクション比較部５０３によってマスタＩＤとアドレスの情報が、マスタＩＤ保持部５０１、アドレス保持部５０２の値と一致すると判定され、ライト応答を生成する（７１２）と共に、ライトトランザクションを共有メモリコントローラ１０５へ転送する（７１３）。
【００５４】
そして、共有メモリコントローラ１０５は、共有メモリへデータを書いた後にライト応答を発行する（７１４）。ブリッジ１０４ではライト応答受信後、内部の応答比較部５０４によって、マスタＩＤとアドレスの情報が、マスタＩＤ保持部５０１、アドレス保持部５０２の値と一致すると判定され、ＣＰＵ＿Ａ１０３２への転送は行わない。
【００５５】
ＣＰＵ＿Ａ１０３２は７１２において発行されたライト応答受信後に、ＣＰＵ＿Ｂ１０３３に割り込み通知を発行し、データ書き込み完了を知らせる（７１５）。ＣＰＵ＿Ｂ１０３３は共有メモリのデータを読み出すためのリードトランザクションを発行する（７１６）。ブリッジ１０４は、リードトランザクション７１６を受信すると、内部のトランザクション比較部５０３においてリードと判定し、リードトランザクションを共有メモリコントローラ１０５へ転送する（７１７）。共有メモリコントローラ１０５は共有メモリへのデータ読み出し完了後にリード応答を発行する（７１８）。ブリッジ１０４はリード応答を受信すると、内部の応答比較部５０４においてリードと判定し、リードトランザクションをＣＰＵ＿Ｂ１０３３へ転送する（７１９）。
【００５６】
本装置によると、７１５においてＣＰＵ＿Ａ１０３２が割り込み通知を発行した時点で必ずしも共有メモリへのデータ書き込みは完了していない。しかし、バスブリッジ１０４が発行するライトトランザクション７１３と、同一アドレスへのリードトランザクション７１７の実行される順序は保証される。さらに、ＣＰＵ＿Ａ１０３２が７１１にて共有メモリ１０５へデータ書き込みを行ってから７１５にてＣＰＵ＿Ｂ１０３２に割り込み通知を発行するまでの待ち時間を削減する。
【００５７】
以上、本実施形態によれば、複数の応答に関する情報をキューに保持しておくことで、より、トランザクションが同時並行的に複数生じる場合であってもライトトランザクションとリードトランザクションの実行順序を好適に保証できる。
【００５８】
（実施形態３）
本実施形態において、システムバスが更に階層化したデータ処理装置におけるマスタ間のデータ受け渡しについて説明する。なお、実施形態１、２と同一機能を有する構成や工程には同一符号を付すとともに、構成的、機能的にかわらないものについてはその説明を省略する。
【００５９】
図８は本発明の実施形態３に係る、ライト応答を生成する手段を備えたインターフェースブロックを含むデータ処理装置１００のブロック構成図である。８０１は第１のシステムバス（第３のバス）、８０１−２は第二のシステムバス（第２のバス）、８０７は第二のシステムバスに接続するバスマスタである。第一のシステムバス８０１、第二のシステムバス８０１−２、サブシステムバス１０３１（第１のバス）はトランザクション毎にスレッド情報が識別できる情報（例えばスレッドＩＤ情報）が付加されるバスプロトコルである。
【００６０】
８０４は第一のブリッジ（第１のインターフェース）であり、サブシステムバス１０３１と第一のシステムバス８０１との間でインターフェースとして機能する。ここで、サブシステムバス１０３１をマスタバス、第一のシステムバス８０１をスレーブバスとする。また、８０４−２は第二のブリッジ（第２のインターフェース）であり、第一のシステムバス８０１と第二のシステムバス８０１−２との間でインターフェースとして機能する。
【００６１】
８０５はシステムバス８０１に接続する共有メモリコントローラであり、共有メモリへのアクセス要求を受信したとき、メモリへのアクセスを制御し、応答信号を生成する。８０８はＣＰＵ＿Ａ１０３２からバスマスタ８０７への割り込み信号である。
【００６２】
共有メモリコントローラ８０５は第二のシステムバス８０１−２に接続され、バスマスタ８０７は第二のシステムバス８０１−２を経由して共有メモリへアクセスすることが可能である。メインＣＰＵ１０２も、第二のブリッジ８０４−２、第二のシステムバス８０１−２を経由して共有メモリへアクセスすることが可能である。ＣＰＵ＿Ａ１０３１、ＣＰＵ＿Ｂ１０３２も、サブシステムバス１０３１、第一のブリッジ８０４、第一のシステムバス８０１、第二のブリッジ８０４−２、第二のシステムバスを経由して共有メモリへアクセスすることが可能である。
【００６３】
第一のブリッジ８０４はＣＰＵ＿Ａ１０３１、ＣＰＵ＿Ｂ１０３２が発行したトランザクションを、サブシステムバス１０３１を経由して受信し、第一のシステムバス８０１へ転送する。また、第二のブリッジ８０４−２が発行した応答を、第一のシステムバス８０１を経由して受信し、サブシステムバス１０３１へ転送する。
【００６４】
第二のブリッジ８０４−２は、第一のブリッジ８０４、メインＣＰＵ１０２が発行したトランザクションを、第一のシステムバス８０１を経由して受信し、第二のシステムバス８０１−２へ転送する。また、共有メモリコントローラ８０５が発行した応答を、第二のシステムバス８０１−２を経由して受信し、第一のシステムバス８０１へ転送する。第一のブリッジ８０４と第二のブリッジ８０４−２の内部構成は同一で、内部にはポステッドライト方式の応答を自動生成する応答生成部８０４１を備える。
【００６５】
図９に応答生成部８０４１の内部構成を示す。９０１はブリッジＩＤ保持部であり、データ処理装置内の各ブリッジに其々ユニークに与えられるＩＤであり、予め外部から設定する。９０２はトランザクション比較部であり、マスタバスから受信したトランザクションに付加されたスレッドＩＤ情報とブリッジＩＤ保持部９０１の値を比較し、一致、不一致を判定する。９０３は応答比較部であり、スレーブバスから受信した応答に付加されたスレッドＩＤ情報とブリッジＩＤ保持部９０１の値を比較し、一致、不一致を判定する。９０４はマスタバスインターフェース応答制御部であり、トランザクション比較部９０２が、一致と判定したときにライト応答を生成し、マスタバスに発行する。応答比較部９０３が不一致と判定したときにスレーブバスから受信した応答をマスタバスに発行する。
【００６６】
図１０は第一のブリッジ８０４、第二のブリッジ８０４−２の動作を示す。図１０（Ａ）はマスタバスからのトランザクション受信時のブリッジ８０４、第二ブリッジ８０４−２の動作を示す。
【００６７】
マスタバスからトランザクションを受信すると処理がスタートする。以降の処理において、ステップＳ１００２以外は図３（Ａ）と同様なので説明を省略する。ステップＳ３０１においてライトと判定すると、ステップＳ１００２においてトランザクション比較部９０２が、トランザクション情報に付加されたスレッドＩＤが保持部９０１の値と一致しているかどうかを判定する。
【００６８】
図１０（Ｂ）はスレーブバスからの応答受信時のブリッジ８０４、第二のブリッジ８０４−２の動作を示す。スレーブバスから応答を受信すると処理がスタートする。応答比較部９０３は応答に付加されたスレッドＩＤが保持部９０１の値と一致しているかを判定する（Ｓ１００５）。一致していないと判定すると、マスタバスインターフェース応答制御部９０４は応答をマスタバスへ転送する（Ｓ１００６）。Ｓ１００５において一致していると判定すると、マスタバスへ転送することなく処理を終了する。
【００６９】
図１１に実施形態３において、ＣＰＵ間で共有メモリを介してデータの受け渡しを行うシーケンスを示す。ＣＰＵ＿Ａ１０３２はデータ転送前にブリッジ８０４のブリッジＩＤ保持部に０、第二のブリッジ８０４−２のブリッジＩＤ保持部に１を設定する（１１００、１１０１）。第一、第二のブリッジへの設定は他のマスタが行ってもよい。
【００７０】
１１０２はＣＰＵ＿Ａ１０３２がバスマスタ８０７にデータを渡すシーケンスである。ＣＰＵ＿Ａ１０３２が、スレッドＩＤ番号が２のスレッドにて、共有メモリへデータを書き込むためのライトトランザクションを発行する（１１０３）。ライトトランザクションには、スレッドＩＤは２の情報が付加される。
【００７１】
ブリッジ８０４がライトトランザクション１１０３を受信すると、内部のトランザクション比較部９０２によってスレッドＩＤの情報が、ブリッジＩＤ保持部９０１の値と一致しないと判定され、ライトトランザクションを第二のブリッジ８０４−２へ転送する（１１０４）。第二のブリッジ８０４−２がライトトランザクション１１０４を受信すると、内部のトランザクション比較部９０２によってスレッドＩＤの情報が、ブリッジＩＤ保持部９０１の値と一致しないと判定され、ライトトランザクションを共有メモリコントローラ８０５へ転送する（１１０５）。
【００７２】
そして、共有メモリコントローラ８０５は、共有メモリへデータを書いた後にライト応答を発行する（１１０６）。第二のブリッジ８０４−２はライト応答受信後、内部の応答比較部９０３によってスレッドＩＤの情報が、ブリッジＩＤ保持部９０１の値と一致しないと判定され、ライト応答を第一のブリッジ８０４へ転送する（１１０７）。第一のブリッジ８０４はライト応答受信後、内部の応答比較部９０３によってスレッドＩＤの情報が、ブリッジＩＤ保持部９０１の値と一致しないと判定され、ライト応答をＣＰＵ＿Ａ１０３２へ転送する（１１０８）。ＣＰＵ＿Ａ１０３２はライト応答１１０８受信後に、バスマスタ８０７に割り込み通知を発行し、データ書き込み完了を知らせる（１１０９）。バスマスタ８０７は共有メモリのデータを読み出すためのリードトランザクションを発行する（１１１０）。共有メモリコントローラ８０５が、共有メモリのデータ読み出し完了後にリード応答を発行し、バスマスタ８０７はデータを受信する（１１１１）。
【００７３】
本装置によると、１１０９においてＣＰＵ＿Ａ１０３２がライト応答１１０８を受信した時点で共有メモリへのデータ書き込みは完了しており、１１１０にてバスマスタ８０７はＣＰＵ＿Ａ１０３２が書いたデータを読むことを保証できる。
【００７４】
一方、１１１２はＣＰＵ＿Ａ１０３２がメインＣＰＵ１０２にデータを渡すシーケンスである。ＣＰＵ＿Ａ１０３２が、スレッドＩＤ番号が１のスレッドにて、共有メモリへデータを書き込むためのライトトランザクションを発行する（１１１３）。ライトトランザクションには、スレッドＩＤは１の情報が付加される。
【００７５】
第一のブリッジ８０４がライトトランザクション１１１３を受信すると、内部のトランザクション比較部９０２によってスレッドＩＤの情報が、ブリッジＩＤ保持部９０１の値と一致しないと判定され、ライトトランザクションを第二のブリッジ８０４−２へ転送する（１１１４）。第二のブリッジ８０４−２がライトトランザクション１１１４を受信すると、内部のトランザクション比較部９０２によってスレッドＩＤの情報が、ブリッジＩＤ保持部９０１の値と一致すると判定され、ライト応答を生成する（１１１５）と共に、ライトトランザクションを共有メモリコントローラ８０５へ転送する（１１１７）。共有メモリコントローラ８０５は、共有メモリへデータを書いた後にライト応答を発行する（１１１８）。第二のブリッジ８０４−２がライト応答１１１８を受信後、内部の応答比較部９０３によってスレッドＩＤの情報が、ブリッジＩＤ保持部９０１の値と一致すると判定されるので、第一のブリッジ８０４への転送は行わない。
【００７６】
第一のブリッジ８０４がライト応答１１１５を受信後、内部の応答比較部９０３によってスレッドＩＤの情報が、ブリッジＩＤ保持部９０１の値と一致しないと判定され、ライト応答をＣＰＵ＿Ａ１０３２へ転送する（１１１６）。ＣＰＵ＿Ａ１０３２はライト応答１１１６受信後に、メインＣＰＵ１０２に割り込み通知を発行し、データ書き込み完了を知らせる（１１１９）。メインＣＰＵ１０２は共有メモリのデータを読み出すためのリードトランザクションを発行する（１１２０）。第二のブリッジ８０４は、リードトランザクション１１２０を受信すると、内部のトランザクション比較部９０２においてリードと判定し、リードトランザクションを共有メモリコントローラ８０５へ転送する（１１２１）。共有メモリコントローラ８０５は共有メモリのデータ読み出し完了後にリード応答を発行する（１１２２）。第二のブリッジ８０４−２はリード応答を受信すると、内部の応答比較部９０３においてリードと判定し、リードトランザクションをメインＣＰＵ８０２へ転送する（１１２３）。
【００７７】
本装置によると、ＣＰＵ＿Ａ１０３２がライト応答１１１６を受信した時点で必ずしも共有メモリへのデータ書き込みは完了していない。しかし、第二のバスブリッジ８０４−２が発行するライトトランザクション１１１７と、同一アドレスへのリードトランザクション１１２１の実行される順序は保証される。さらに、ＣＰＵ＿Ａ１０３２が１１１３にて共有メモリ８０５へデータ書き込みを行ってから１１１９にてメインＣＰＵ１０２に割り込み通知を発行するまでの待ち時間を削減する。
【００７８】
一方、１１２４はＣＰＵ＿Ａ１０３２がＣＰＵ＿Ｂ１０３３にデータを渡すシーケンスである。ＣＰＵ＿Ａ１０３２が、スレッドＩＤ番号が０のスレッドにて、共有メモリへデータを書き込むためのライトトランザクションを発行する（１１２５）。ライトトランザクションには、スレッドＩＤは０の情報が付加される。第一のブリッジ８０４は、ライトトランザクション１１２５を受信すると、内部のトランザクション比較部９０２においてスレッドＩＤの情報が、ブリッジＩＤ保持部９０１の値と一致すると判定し、ライト応答を生成する（１１２６）。そして、ライトトランザクションを第二のブリッジ８０４−２へ転送する（１１２７）。第二のブリッジ８０４−２は、ライトトランザクション１１２７を受信すると、内部のトランザクション比較部９０２においてスレッドＩＤの情報が、ブリッジＩＤ保持部９０１の値と一致しないと判定し、ライトトランザクションを共有メモリコントローラ８０５へ転送する（１１２８）。
【００７９】
共有メモリコントローラ８０５は、共有メモリへデータを書いた後にライト応答を発行する（１１２９）。第二のブリッジ８０４−５はライト応答１１２９を受信後、内部の応答比較部９０３においてスレッドＩＤの情報が、ブリッジＩＤ保持部９０１の値と一致しないと判定し、ライト応答を第一のブリッジ８０４へ転送する（１１３０）。
【００８０】
第一のブリッジ８０４はライト応答１１３０を受信後、内部の応答比較部９０３においてスレッドＩＤの情報が、ブリッジＩＤ保持部９０１の値と一致すると判定し、ＣＰＵ＿Ａ１０３２への転送は行わない。
【００８１】
ＣＰＵ＿Ａ１０３２はライト応答１１２６受信後に、ＣＰＵ＿Ｂ１０３３に割り込み通知を発行し、データ書き込み完了を知らせる（１１３１）。ＣＰＵ＿Ｂ１０３３は共有メモリのデータを読み出すためのリードトランザクションを発行する（１１３２）。第一のブリッジ８０４はリードトランザクション１１３２を受信すると、内部のトランザクション比較部９０２においてリードと判定し、リードトランザクションを第二のブリッジ８０４−２へ転送する（１１３３）。
【００８２】
第二のブリッジ８０４−２はリードトランザクション１１３３を受信すると、内部のトランザクション比較部９０２においてリードと判定し、リードトランザクションを共有メモリコントローラ８０５へ転送する（１１３４）。共有メモリコントローラ８０５は共有メモリのデータ読み出し完了後にリード応答を発行する（１１３５）。第二のブリッジ８０４−２はリード応答１１３５を受信すると、内部の応答比較部９０３においてリードと判定し、リード応答をブリッジ８０４へ転送する（１１３６）。第一のブリッジ８０４はリード応答１１３６を受信すると、内部の応答比較部９０３においてリードと判定し、リード応答をＣＰＵ＿Ｂ１０３３へ転送する（１１３７）。
【００８３】
本実施形態によると、ＣＰＵ＿Ａ１０３２がライト応答１１３１を受信した時点で必ずしも共有メモリへのデータ書き込みは完了していない。しかし、第一のブリッジ８０４が発行するライトトランザクション１１２７と、同一アドレスへのリードトランザクション１１３３の実行される順序は保証される。さらに、ＣＰＵ＿Ａ１０３２が１１２５にて共有メモリ８０５へデータ書き込みを行ってから１１３１にてメインＣＰＵ１０２に割り込み通知を発行するまでの待ち時間を削減する。
【００８４】
上記動作によれば、ＣＰＵ＿Ａ１０３２は同じ領域のスレーブデバイスへのアクセスであっても、バスマスタ８０７にデータを渡すときはスレーブデバイスからのライト応答を、メインＣＰＵ１０２にデータを渡すときは第二のブリッジ８０４−２が生成するライト応答を、ＣＰＵ＿Ｂ８０３３にデータを渡すときはブリッジ８０４が生成するライト応答を受けて動く為、ライトトランザクションとリードトランザクションの実行順序の保証を、システム性能を損なうことなく可能にする。
【００８５】
なお、上述の実施形態では自動応答生成部１０４１、８０４１の設定（マスタＩＤ、スレッドＩＤ、アドレス）を外部から設定する様に説明しているが、予め共有メモリに設定値を格納しておき、メインＣＰＵ１０２またはサブシステムＣＰＵ＿Ａ、Ｂが共有メモリから値を読み出して設定するようにしてもよい。
【図１】
2012128520.tif 000003
【図２】
2012128520.tif 000004
【図３】
2012128520.tif 000005
【図４】
2012128520.tif 000006
【図５】
2012128520.tif 000007
【図６】
2012128520.tif 000008
【図７】
2012128520.tif 000009
【図８】
2012128520.tif 000010
【図９】
2012128520.tif 000011
【図１０】
2012128520.tif 000012
【図１１】
2012128520.tif 000013
【図１２】
2012128520.tif 000014