(57)【特許請求の範囲】
【請求項１】
パイプライン処理が実行されるバスシステムであって、
バススレーブと、
前記バススレーブへのアクセス要求を前記バススレーブに対して出力するバスマスタと、
前記アクセス要求に対して前記バスマスタにウエイト動作をさせるウエイト応答を出す際に、前記バスマスタにブロッキングウエイト動作をさせるブロッキングウエイト応答とノンブロッキングウエイト動作をさせるノンブロッキングウエイト応答のいずれかを前記バスマスタに対して出力する応答手段とを備え、
前記バスマスタは、
前記ノンブロッキングウエイト応答を受けた場合に、前記アクセス要求に対応する命令の実行をウエイトが解除されるまで保留する一方、該命令の後続の他の命令を保留せずに実行し、
前記ブロッキングウエイト応答を受けた場合に、前記アクセス要求に対応する命令の実行をウエイトが解除されるまで保留すると共に、該命令の後続の他の命令も保留することを特徴とするバスシステム。
【請求項２】
前記アクセス要求は、前記バススレーブ内のリソースへのアクセス要求であることを特徴とする請求項１に記載のバスシステム。
【請求項３】
前記応答手段は、前記アクセス要求がなされた前記リソースがブロッキングウエイト動作とノンブロッキングウエイト動作のいずれのウエイト動作を必要とするリソースであるかに応じて前記ウエイト応答を出力することを特徴とする請求項２に記載のバスシステム。
【請求項４】
前記応答手段は、前記アクセス要求がなされた前記リソースがブロッキングウエイト動作とノンブロッキングウエイト動作のいずれのウエイト動作を必要とするリソースであるかの判定を行うレスポンス生成部と、
該レスポンス生成部から出力された前記判定の結果に基づいて前記ウエイト応答を出力する制御部とを備えることを特徴とする請求項３に記載のバスシステム。
【請求項５】
前記バススレーブは複数あり、
前記応答手段は、前記バススレーブ毎に設けられていることを特徴とする請求項１から４のいずれか１項に記載のバスシステム。
【請求項６】
前記応答手段は、前記バススレーブ内に設けられていることを特徴とする請求項５に記載のバスシステム。
【請求項７】
前記応答手段は、前記バススレーブの外部に設けられていることを特徴とする請求項５に記載のバスシステム。
【請求項８】
前記バススレーブは複数あり、
前記応答手段は、複数の前記バススレーブに対して共通に設けられたものであり、該複数のバススレーブのうちの、前記アクセス要求がなされたバススレーブが前記バスマスタにウエイト動作をさせる状態にあるときに、前記ウエイト応答を出力することを特徴とする請求項１から４のいずれか１項に記載のバスシステム。
【請求項９】
パイプライン処理が実行されるバスシステムにおけるバススレーブであって、
１つ以上のリソースと、
バスマスタからいずれかの前記リソースにアクセス要求がなされたときに、前記バスマスタにブロッキングウエイト動作をさせるブロッキングウエイト応答とノンブロッキングウエイト動作をさせるノンブロッキングウエイト応答のいずれかであるウエイト応答を前記バスマスタに出力する応答手段を備え、
前記ノンブロッキングウエイト動作は、前記アクセス要求に対応する命令の実行をウエイトが解除されるまで保留する一方、該命令の後続の他の命令を保留せずに実行することであり、
前記ブロッキングウエイト動作は、前記アクセス要求に対応する命令の実行をウエイトが解除されるまで保留すると共に、該命令の後続の他の命令も保留することであることを特徴とするバススレーブ。
【請求項１０】
前記応答手段は、アクセス要求がなされた前記リソースがブロッキングウエイト動作とノンブロッキングウエイト動作のいずれのウエイト動作を必要とするリソースであるかに応じて前記ウエイト応答を出力することを特徴とする請求項９に記載のバススレーブ。
【請求項１１】
パイプライン処理が実行されるバスシステムにおいて、
バスマスタからバススレーブのリソースへのアクセス要求に対してウエイト応答を出す際に、前記バスマスタにブロッキングウエイト動作をさせるブロッキングウエイト応答とノンブロッキングウエイト動作をさせるノンブロッキングウエイト応答のいずれかを出し、
前記ノンブロッキングウエイト動作は、前記アクセス要求に対応する命令の実行をウエイトが解除されるまで保留する一方、該命令の後続の他の命令を保留せずに実行することであり、
前記ブロッキングウエイト動作は、前記アクセス要求に対応する命令の実行をウエイトが解除されるまで保留すると共に、該命令の後続の他の命令も保留することであることを特徴とするバス制御方法。
【請求項１２】
アクセス要求がなされた前記リソースがブロッキングウエイト動作とノンブロッキングウエイト動作のいずれのウエイト動作を必要とするリソースであるかに応じて前記ウエイト応答を出すことを特徴とする請求項１１に記載のバス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はバスシステム、具体的にはバスマスタのウエイト動作を制御する技術に関する。
【背景技術】
【０００２】
コンピュータの性能を向上させる方法については、いろいろ考案されている。複数の命令処理を並列化して性能を向上させるための１つの手法としてパイプラインが用いられている。具体的には、１つの命令処理を２つ以上のステージに分け、複数命令の各ステージが並列に処理できるようにする。
【０００３】
パイプラインが適用されたバスシステムにおいて、プロセッサやＤＭＡＣ（ダイレクト・メモリ・アクセス・コントローラ）などのバスマスタからバススレーブのリソースへのアクセス処理も複数のステージから構成される。図６は、バスマスタがバススレーブのレジスタから読出し（ロード）を行う処理を構成するステージの例を示している。なお、例としてバスマスタをＣＰＵとする。
【０００４】
図６の例に示すように、ＣＰＵがバススレーブからデータをロードする命令を実行する処理がＩＦ、ＩＤ、ＥＸ、ＤＦ、ＣＭ、ＷＢの６つのステージから構成される。これらのステージは、それぞれ命令をＣＰＵに読み込むステージ、命令を解読するステージ、命令を実行する（この例ではバススレーブにアクセス要求すなわちデータをロードする要求を出す）ステージ、演算結果を取得する（この例ではバススレーブから応答を取得する）ステージ、実行を完了するステージ、ライトバックすなわちＣＰＵ自身のリソースたとえばレジスタを更新するステージである。
【０００５】
ところで、バススレーブが何時でもバスマスタからのアクセス要求に応じた処理を行うことがきるわけではない。そのため、バススレーブから応答を取得するＤＦステージでは、ＣＰＵが取得可能な応答は、バススレーブが要求された処理が可能である状態を示すｒｅａｄｙ応答以外に、処理が不可能である状態を示すｗａｉｔ応答（以下ウエイト応答ともいう）がある。ウエイト応答がされたＣＰＵは、バススレーブの状態がｒｅａｄｙになるまで命令の実行を保留する。
【０００６】
なお、バススレーブが出しうる応答は上記２つ以外に、例外の発生を示す応答もあり、実行を完了するステージ（ＣＭ）において、この例外が検出された場合には、ＣＰＵはＣＭステージより前のステージの処理を中断して、例外処理を行う。また、ライトバックであるＷＢステージでは命令が実行することが確定されているので、処理が中断されることがない。
【０００７】
ウエイト応答がされたときに、バススレーブの状態がｒｅａｄｙになるまでのＣＰＵの動作はノンブロッキングウエイト動作と、ブロッキングウエイト動作の２つに分けられることができる。この２つの詳細について図７、図８を用いて説明する。
【０００８】
ノンブロッキングウエイト動作の場合、ウエイト応答がなされた命令の実行はウエイトが解除されるまで保留されるが、この命令の後続の他の命令は保留されずに実行される。図７は、命令１〜命令５のうち、命令１と命令４のＤＦステージにおいてウエイト応答がされ、それに対してＣＰＵがノンブロッキングウエイト動作をした例である。なお、以下、説明上の便宜のため、ノンブロッキングウエイト動作とブロッキングウエイト動作を単にノンブロッキング動作、ブロッキング動作ともいう。
【０００９】
図７のＡ、Ｂ、Ｃ、Ｄはそれぞれ、ＣＰＵが命令１〜５の各ステージを実行するタイミング、命令１と命令４のＥＸステージにおいてＣＰＵが出力するアクセス要求に関わる信号のタイミング、命令１と命令４のＤＦステージにおいてバススレーブがｒｅａｄｙ応答したときまたは例外（ｅｘｐ）が発生したときにＣＰＵがデータを取得するタイミング、命令１と命令４のＤＦステージにおいてバススレーブからの応答のタイミング、を示すチャートであり、命令１の最初のステージ（ＩＦ）を１サイクル目として示している。Ｂ、Ｃ、Ｄにおける各タイミングはＡで示した各サイクルに対応している。
【００１０】
図７のＡに示すように、ＣＰＵは、３サイクル目において命令１のＥＸステージを実行し、バススレーブにアクセス要求を出す。その中身は、同図のＢに示すように、バススレーブへ処理を要求する信号ＲＥＱと、アクセスするアドレスＡＤＳ、バススレーブに要求する処理の内容（ロード命令の場合は読出し）ＣＭＤを含む。なお、図中ＲＥＱの欄において、ハイレベルの線はＲＥＱ信号がアクティブであることを示す。
【００１１】
命令１のＥＸステージにおけるアクセス要求（同図のＢにおけるＲＥＱ信号がアクティブ）に応じて、バススレーブが応答する。この例では４、５サイクル目に、バススレーブがウエイト応答（ＷＡＩＴ）を出し、６サイクル目にｒｅａｄｙ（ＲＤＹ）を出している（同図のＤ）。ＣＰＵは、命令を保留し、６サイクル目において、ｒｅａｄｙ応答に応じてバススレーブからデータＤ０を取得する（同図のＣ）。その後、実行を完了するステージＣＭ、ライトバックステージＷＢを実行して、命令１を終了する。
【００１２】
命令２と命令３は、命令１の実行開始（１サイクル目）から１サイクルずつ遅れて実行が開始される命令である。図示のように、命令１のＤＦステージにおいて、ウエイト応答がされている間（４サイクル目、５サイクル目）、命令２のＥＸステージとＤＦステージ、命令３のＩＤステージとＥＸステージが実行される。このように、命令１のＤＦステージにおいてウエイト応答がされているとき、ＣＰＵがノンブロッキング動作をするため、後続の命令２、３が実行される。
【００１３】
命令４、５についても同じであり、４サイクル目、５サイクル目において、それぞれのＩＦステージとＩＤステージ、ＩＦステージが実行されている。
【００１４】
また、命令４の場合、６サイクル目のＥＸステージにおいて、ＣＰＵはバススレーブにアクセス要求を出し（同図のＢ）、ＤＦステージにおいて７、８サイクル目でウエイト応答がされている（同図のＤ）。そして、９サイクル目においてバススレーブから例外応答がされている（同図のＤのＥＸＰ）。ＣＰＵはこの応答と同時にバススレーブからデータＤ１を取得しているが、１０サイクル目のＣＭステージで「例外による異常完了」となる例外処理を行う。この場合、図示のように、命令４のＷＢステージが実行されず、９サイクル目において取得したデータＤ１は、１１サイクル目のＷＢステージでライトバックされない。
【００１５】
なお、命令４のＤＦステージにおいて、ウエイト応答が出された７、８サイクル目では、ＣＰＵがノンブロッキング動作をするため、後続の命令５のステージが実行されている。
【００１６】
このように、ＣＰＵがノンブロッキング動作をする場合において、後続の命令が実行されるので、処理システム全体の処理性能が高い。
【００１７】
一方、図７に示す例における命令４のように、命令４の実行により例外処理が生じた場合において、例外処理が完了した際に（１０サイクル目）、後続の命令５の実行も既に完了している。命令４を再実行しようとすると、命令５は２回実行されることになる。そのため、ＣＰＵがノンブロッキング動作をする場合には、例外が発生した命令４の再実行が困難という問題がある。
【００１８】
ブロッキングウエイト動作の場合において、ウエイト応答がなされた命令の実行はウエイトが解除されるまで保留されるとともに、この命令の後続の他の命令も保留される。図８は、命令１〜命令５のうち、命令１と命令４のＤＦステージにおいてウエイト応答がされ、それに対してＣＰＵがブロッキング動作をした例である。
【００１９】
図８のＡ、Ｂ、Ｃ、Ｄは、ＣＰＵが命令１〜５の各ステージを実行するタイミングチャートと、命令１と命令４のＥＸステージにＣＰＵが出したリクエストの中身、命令１と命令４のＤＦステージにおいてバススレーブがｒｅａｄｙまたは例外（ｅｘｐ）になったときにＣＰＵが取得したデータ、命令１と命令４のＤＦステージにおいてバススレーブからの応答をそれぞれ示している。
【００２０】
命令１のＥＸステージにおけるアクセス要求に応じて、バススレーブが応答する。図示の例も、図７の例と同じように、４、５サイクル目に、バススレーブがウエイト応答を出し、６サイクル目にｒｅａｄｙを出している（同図のＤのＲＤＹ）。ＣＰＵは、命令を保留し、６サイクル目において、ｒｅａｄｙ応答に応じてバススレーブからデータＤ０を取得する（同図のＣ）。その後、７サイクル目と８サイクル目でそれぞれ完了ステージＣＭ、ライトバックステージＷＢを実行して、命令１を終了する。
【００２１】
命令２と命令３は、命令１の実行開始（１サイクル目）から１サイクルずつ遅れて実行が開始される命令である。図示のように、命令１のＤＦステージにおいて、ウエイト応答がされている間（４サイクル目、５サイクル目）、命令２のＥＸステージ、命令３のＩＤステージも実行されずに保留されている。すなわち、４、５サイクル目において、命令１のＤＦステージでウエイトが解除されるまで、ＣＰＵがブロッキング動作をするため、後続の命令２、３も保留される。
【００２２】
命令４についても同じであり、４サイクル目、５サイクル目において、ＩＦステージが保留されている。
【００２３】
また、命令４の場合、８サイクル目のＥＸステージにおいて、ＣＰＵはバススレーブにアクセス要求を出し（同図のＢ）、ＤＦステージにおいて９、１０サイクル目でウエイト応答がされている（同図のＤ）。そして、１１サイクル目においてバススレーブから例外応答がされている（同図のＤ）。ＣＰＵはこの応答と同時にデータＤ１を取得しているが、１２サイクル目のＣＭステージで「例外による異常完了」となる例外処理を行う。この場合、図示のように、命令４のＷＢステージが実行されない。
【００２４】
なお、命令４のＤＦステージにおいて、ウエイト応答が出された９、１０サイクル目では、ＣＰＵがブロッキング動作をするため、後続の命令５のＥＸステージはウエイトが解除されるまで保留されている。
【００２５】
このように、ＣＰＵがブロッキング動作をする場合において、後続の命令が実行されないので、処理システム全体の処理性能は、ＣＰＵがノンブロッキングする場合より低くなる。
【００２６】
一方、図８に示す例における命令４のように例外処理が生じた場合において、例外処理が完了した際に（１２サイクル目）、後続の命令５の実行はまだ完了していない。そのため、命令４を再実行しても、命令５は２回実行されることがないので、ＣＰＵがブロッキング動作をする場合には、例外が発生した命令の再実行が可能というメリットがある。
【００２７】
上述したように、ウエイト応答がなされた際にＣＰＵがブロッキング動作をするかノンブロッキング動作をするかによってそれぞれメリットとデメリットがある。
【００２８】
従来、下記のようにＣＰＵがブロッキング動作するかノンブロッキング動作をするかを決める手法（以下第１の手法という）がある。
【００２９】
図９に示すように、この手法によれば、バスマスタのアドレス空間は、ブロッキング動作するアドレス空間（以下ブロッキング動作空間という）とノンブロッキング動作するアドレス空間（以下ノンブロッキング動作空間という）に分けられる。バスマスタは、ブロッキング動作空間に接続したバススレーブに対するアクセスではブロッキング動作をし、ノンブロッキング動作空間に接続したバススレーブに対するアクセスではノンブロッキング動作をする。図示のバススレーブは、バスマスタのブロッキング動作空間に接続しているので、このバススレーブのリソース（図示の例では各レジスタ）に対してアクセスをする際に、バスマスタはブロッキング動作をする。
【００３０】
また、特許文献１において、別の手法（以下第２の手法という）が開示されている。この手法は、プロセッサの命令構造の中にウエイト信号を受け付けるか否かのフラグを設け、パイプライン動作中、ウエイト信号を受けると、このウエイト信号に対応した命令構造の中のフラグを参照して、ウエイト信号を受け付ける命令ならば、そのサイクルの終結を待たずに次のサイクルを実行し、ウエイト信号を受け付けない命令ならば、そのサイクルが終結した後、次のサイクルを実行する。
【特許文献１】特開平４−３７２０１８号公報
【発明の開示】
【発明が解決しようとする課題】
【００３１】
ところで、１つのバススレーブは１つのリソースのみを有するとは限らない。また、１つのバススレーブが有する複数のリソースの全部はブロッキング動作を必要とするリソースであるとも限らない。たとえば図９に示すバススレーブの４つのレジスタＡ〜Ｄのうち、レジスタＤのみがブロッキング動作を必要とする場合について考えると、他の３つのレジスタがブロッキング動作を必要としないにもかかわらず、前述した第１の手法では、このバススレーブをバスマスタのブロッキング動作空間に接続する必要がある。そのため、他の３つのレジスタに対してアクセスする際にも、バスマスタがブロッキング動作をしてしまい、システム全体の性能が低下する。
【００３２】
また、第２の手法は、本質的には、バスマスタの命令そのものをブロッキング動作命令とノンブロッキング動作命令に分けるようにしたものである。バスマスタは、命令に設けられた、この命令がブロッキング命令であるかノンブロッキング命令であるかを示すフラグを参照して、ブロッキング命令を実行する際にブロッキング動作をし、ノンブロッキング命令を実行する際にノンブロッキング動作をする。
【００３３】
この手法では、バスマスタが実行する命令構造の中にこの命令がブロッキング命令なのかノンブロッキング命令なのかを示すフラグを設け、バスマスタがブロッキング動作をするかノンブロッキング動作をするかを決めるようにしているので、２つの動作を切り替えるために、プログラムコードを書き換える必要がある。プログラムコードを書き換えるために、切り替えるポイントを見出す作業にコストがかかり、さらに、プログラムコードに変更を加えたことによりデグレートしてないことを検査する作業にもコストがかかる。これらの理由から、バスマスタがブロッキング動作をするかノンブロッキング動作をするかの切替えを行うためにプログラムコードの修正が必要で、ダイナミックな切替えが困難である。
【課題を解決するための手段】
【００３４】
本発明の一つの態様は、パイプライン処理が実行されるバスシステムである。このバスシステムは、バススレーブと、バススレーブへのアクセス要求をバススレーブに対して出力するバスマスタと、アクセス要求に対してバスマスタにウエイト動作をさせるウエイト応答を出す応答手段とを備える。応答手段は、ウエイト応答を出す際に、バスマスタにブロッキングウエイト動作をさせるブロッキングウエイト応答とノンブロッキングウエイト動作をさせるノンブロッキングウエイト応答のいずれかをバスマスタに対して出力する。
【００３５】
本発明のもう一つの態様はバス制御方法である。この方法は、パイプライン処理が実行されるバスシステムにおいて、バスマスタからバススレーブのリソースへのアクセス要求に対してウエイト応答を出す際に、バスマスタにブロッキングウエイト動作をさせるブロッキングウエイト応答とノンブロッキングウエイト動作をさせるノンブロッキングウエイト応答のいずれかを出す。
【００３６】
本発明の別の態様は、パイプライン処理が実行されるバスシステムにおけるバススレーブである。このバススレーブは、１つ以上のリソースと、バスマスタからいずれかのリソースにアクセス要求がなされたときに、バスマスタにブロッキングウエイト動作をさせるブロッキングウエイト応答とノンブロッキングウエイト動作をさせるノンブロッキングウエイト応答のいずれかのウエイト応答が可能な応答手段を備える。
【発明の効果】
【００３７】
本発明にかかるバスシステムおよびバスシステム制御方法によれば、バスマスタがブロッキング動作をするかノンブロッキング動作をするかの制御において有利である。
【発明を実施するための最良の形態】
【００３８】
以下、図面を参照して本発明の実施の形態について説明する。
【００３９】
図１は、本発明にかかる実施の形態によるバスシステム１００の構成を示す。バスシステム１００は、バスマスタ１０、２０、・・・、バス３０、バススレーブ５０、６０、・・・を有し、バスマスタ１０、２０、・・・とバススレーブ５０、６０、・・・は、バス３０を介して通信可能となるように接続されている。
【００４０】
バスマスタ１０、２０、・・・は、たとえばＣＰＵや、ＤＭＡＣなど、バススレーブに対してリソースのアクセスをすることが可能なものである。バススレーブ５０、６０、・・・は、Ｉ／Ｏデバイスなど、自身のリソースへのアクセス要求をバスマスタから受けて、それに応じた返答を返すことが可能なものである。なお、ＤＭＡＣは、バスマスタ、バススレーブのいずれにもなりうる。あるいは、複数のＣＰＵが接続されたバスシステムでは、一部のＣＰＵはバススレーブとして動作することも可能である。また、図１において、バスマスタについてバスマスタ１０とバスマスタ２０の２つを示し、バススレーブについてはバススレーブ５０とバススレーブ６０の２つを示しているが、バスマスタとバススレーブの数は１つ以上の任意の数とすることができる。
【００４１】
以下、バスマスタとバススレーブについてそれぞれバスマスタ１０とバススレーブ５０で代表してバスシステム１００の説明をする。
【００４２】
図２は、バスマスタ１０とバススレーブ５０の接続の詳細を示す。図示のように、バス３０は、制御信号線３１、アドレス線３２、コマンド線３３、データ線３４、レスポンス信号線３５を有する。以下、バスマスタ１０がロード命令実行によりバススレーブ５０をアクセスする場合を例にして説明する。
【００４３】
バスマスタ１０は、制御信号線３１に対してバススレーブ５０へ処理を要求する要求信号ＲＥＱを出す。また、この要求信号を出す際に、アドレスＡＤＳと、バススレーブに要求する処理の内容を示すコマンドＣＭＤ（ここでは読出コマンド）とをそれぞれアドレス線３２とコマンド線３３に出す。
【００４４】
バススレーブ５０は、制御信号線３１から要求信号ＲＥＱを受けて、アドレス線３２とコマンド線３３からそれぞれアドレスＡＤＳとコマンドＣＭＤを取得する。バススレーブ５０は、取得したアドレスＡＤＳをデコードして、このアドレスは自身の所有するリソースのアドレスであるか否かを判別する。自身のリソースのアドレスであれば、レスポンス信号線３５にレスポンスＲＥＳＰを出す。
【００４５】
ここで、バススレーブ５０が出すレスポンスＲＥＳＰは、バススレーブ５０が要求された処理が可能である状態を示すｒｅａｄｙ（以下ＲＤＹともいう）応答と、処理が不可能である状態を示すウエイト応答がある。本実施の形態において、バススレーブ５０が出すウエイト応答はさらに２種類に分けられるが、それらの詳細については後述する。
【００４６】
バススレーブ５０は、ＲＤＹ状態の場合において、要求されたコマンドＣＭＤを実行する。この例では、コマンドＣＭＤは読出コマンドであるので、バススレーブ５０は、アドレスＡＤＳにより指定された番地のデータＤＡＴを読み出してデータ線３４に出力する。
【００４７】
バスマスタ１０は、レスポンス信号線３５を介してバススレーブ５０からＲＤＹ応答を受けると、データ線３４からバススレーブ５０により出力されたデータＤＡＴを取得する。
【００４８】
なお、バスマスタ１０が、レスポンス信号線３５を介してウエイト応答を受けた場合の動作については、バススレーブ５０の詳細とともに説明する。
【００４９】
図３は、バススレーブ５０の構成を示す。バススレーブ５０は、アドレスデコーダ５２と、応答手段５４と、レジスタ群５８を備える。応答手段５４は、レスポンス生成部５５と、制御部５６を有する。図中の各信号ＲＥＱ、ＡＤＳ、ＣＭＤは、図２に示すバス３０の相対応する信号線すなわち制御信号線３１、アドレス線３２、コマンド線３３からそれぞれ入力され、ＤＡＴとＲＥＳＰは、図２に示すバス３０の相対応するデータ線３４、レスポンス信号線３５にそれぞれ出力される。
【００５０】
図４は、バススレーブ５０がバスマスタ１０からの要求信号ＲＥＱを受信した際の動作を示すフローチャートである。
【００５１】
アドレスデコーダ５２は、バスマスタ１０からの要求信号ＲＥＱに伴ったアドレスＡＤＳをデコードして、このアドレスが自身が所属するバススレーブ５０のリソースであるか否かを判別するとともに、その判別の結果を応答手段５４に出力する（Ｓ１０、Ｓ２０）。
【００５２】
図３の例において、バススレーブ５０は、複数のレジスタを含むレジスタ群５８を有し、これらのレジスタは、バススレーブ５０のリソースである。
【００５３】
応答手段５４のレスポンス生成部５５は、アドレスデコーダ５２からの信号が、自身のリソースへのアクセスが要求されたことを示すものではなければ、処理を終了する（Ｓ２０：Ｎｏ）。一方、アドレスデコーダ５２からの信号が、自身のリソースへのアクセスが要求されたことを示すものであれば、要求信号ＲＥＱ、アドレスＡＤＳ、コマンドＣＭＤを受信して、アドレスＡＤＳに該当するレジスタの種類を確認する（Ｓ２０：Ｙｅｓ、Ｓ３０）。
【００５４】
ここで、レジスタの種類は、ブロッキングウエイト動作を必要とするレジスタであるか否かの２種類である。
【００５５】
レスポンス生成部５５がレジスタの種類を確認する手法については、ブロッキングウエイト動作を必要とするレジスタであるか否かを判別することができればいかなる仕組みを用いてもよい。たとえば、レジスタと、このレジスタがブロッキングウエイト動作を必要とするレジスタであるか否かとを対応付けたテーブルを設け、レスポンス生成部５５はこのテーブルを参照して判別するようにすればよい。または、アドレスが１６ビットである場合においてその下位４ビットを、ブロッキングウエイト動作を必要とするレジスタなのか否かを示すように用い、レスポンス生成部５５は、アドレスデコーダ５２から受けたアドレスの下位４ビットを参照して判別するようにしてもよい。
【００５６】
また、レスポンス生成部５５は、ステップＳ３０における確認結果（アクセスが要求されているレジスタの種類を示す情報）と共に、アドレスＡＤＳ、コマンドＣＭＤを制御部５６に出力する（Ｓ２０：Ｙｅｓ、Ｓ３０、Ｓ４０）。
【００５７】
制御部５６は、要求された処理を実行可能か否かを判断する（Ｓ５０）。この判断はたとえば現在処理中のコマンドの数を示すカウンタ（図示せず）を参照して行われる。要求された処理を実行可能であれば（Ｓ５０：Ｙｅｓ）、制御部５６は、処理可能を示すＲＤＹ応答をレスポンス信号線３５に出力するとともに、要求された処理を該当するレジスタに対して実行する（Ｓ６０）。たとえばＣＭＤが読出コマンドである場合に、制御部５６は、該当するレジスタからデータを読み出し、読出しが完了した際に、バスマスタ１０に処理完了を示す信号を出力する。なお、制御部５６は、読み出したデータをデータ線３４に出力し、ＲＤＹ応答をレスポンス信号線３５に出力する。
【００５８】
なお、バスマスタ１０は、バススレーブ５０の制御部５６からのＲＤＹ応答に応じてデータ線３４からデータを取得し、処理完了を示す信号を受信すると実行完了処理をし、自身のリソースへのライトバックを行って、命令を終了する。
【００５９】
一方、ステップＳ５０において、要求された処理を実行不可能であれば（Ｓ５０：Ｎｏ）、制御部５６は、レスポンス生成部５５から知らせられたリソースの種類に応じてブロッキングウエイト応答またはノンブロッキングウエイト応答をバスマスタ１０に返答する。具体的には、アクセス要求がなされたレジスタがブロッキングウエイト動作を必要とするレジスタであればブロッキングウエイト応答を出し（Ｓ７０：Ｙｅｓ、Ｓ８０）、アクセス要求がなされたレジスタがブロッキングウエイト動作を必要とするレジスタではなければ、ノンブロッキングエイト応答を出す（Ｓ７０：Ｎｏ、Ｓ９０）。
【００６０】
なお、バスマスタ１０は、ブロッキングウエイト応答がなされた場合にはブロッキングウエイト動作をし、ノンブロッキングウエイト応答がなされた場合にはノンブロッキング動作をする。
【００６１】
また、図４のフローチャートに示していないが、バススレーブ５０は、要求された処理の実行中に例外が起きた場合には、異常終了を示す例外応答（ｅｘｐ）をバスマスタ１０に出す。バスマスタ１０は例外応答がなされた場合には、例外応答の前にバススレーブ５０による処理の実行途中に得られたデータを取得しているが、例外処理を行うべく自身のリソースへのライトバックをしない。
【００６２】
図５は、図１に示すバスシステム１００において行われる処理の詳細例を示す。図中Ａ、Ｂ、Ｃ、Ｄは、バスマスタ１０が命令１〜５の各ステージを実行するタイミングチャートと、命令１と命令４のＥＸステージにバスマスタ１０が出したリクエストの中身、命令１と命令４のＤＦステージにおいてバススレーブ５０がｒｅａｄｙになったときにバスマスタ１０が取得したデータ、命令１と命令４のＤＦステージにおいてバススレーブ５０からの応答をそれぞれ示している。
【００６３】
命令１のＥＸステージにおけるアクセス要求に応じて、バススレーブ５０が応答する。図示の例も、図７、図８の例と同じように、４、５サイクル目に、バススレーブ５０がウエイト応答を出し、６サイクル目にｒｅａｄｙを出している。ここで例として、バススレーブ５０がノンブロッキングウエイト応答（ＮＢＷ）を出したとする。ＮＢＷを受けたバスマスタ１０は、命令を保留し、６サイクル目において、ｒｅａｄｙ応答に応じてバススレーブ５０からデータＤ０を取得する（同図のＣ）。その後、７サイクル目と８サイクル目でそれぞれ完了ステージＣＭ、ライトバックステージＷＢを実行して、命令１を終了する。
【００６４】
命令２と命令３は、命令１の実行開始（１サイクル目）から１サイクルずつ遅れて実行が開始される命令である。図示のように、命令１のＤＦステージにおいて、ノンブロッキングウエイト返答がされている間（４サイクル目、５サイクル目）、命令２のＥＸステージとＤＦステージ、命令３のＩＤステージとＥＸステージが実行されている。すなわち、４、５サイクル目において、命令１のＤＦステージでウエイト応答（ここではＮＢＷ）が出されている間において、バスマスタ１０がノンブロッキング動作をするため、後続の命令２、３が実行される。
【００６５】
命令４についても同じであり、４サイクル目、５サイクル目において、ＩＦステージとＩＤステージが実行されている。
【００６６】
また、命令４の場合、６サイクル目のＥＸステージにおいて、バスマスタ１０はバススレーブ５０にアクセス要求を出し（同図のＢ）、ＤＦステージにおいて７、８サイクル目でウエイト応答がされている（同図のＤ）。ここでは例としてブロッキングウエイト応答（ＢＬＷ）が出されたとする。図示のように、７、８サイクル目において、バスマスタ１０がＢＬＷに応じてブロッキング動作をするため、命令５のＥＸステージは保留される。
【００６７】
そして、９サイクル目において、命令４に対するウエイト応答が解除され、バスマスタ１０は、バススレーブ５０からデータＤ１を取得する。また、ウエイト応答の解除に伴って、命令５のＥＸステージも実行される。
【００６８】
このように、本実施の形態のバスシステム１００によれば、バススレーブ５０のレジスタ群５８の各レジスタがブロッキングウエイト動作を必要とするレジスタなのか否かに応じて、ブロッキングウエイト動作を必要とするレジスタの場合においてのみバススレーブ５０にブロッキングウエイト動作をさせるウエイト応答をしている。こうすることによって、バスシステム１００において、バスマスタ１０のブロッキングウエイト動作を必要最小限に抑えることができ、バスシステム１００の高性能化を図ることができる。
【００６９】
また、本実施の形態のバスシステム１００によれば、ブロッキングウエイト応答またはノンブロッキングウエイト応答を出すことによってバスマスタにブロッキングウエイト動作またはノンブロッキングウエイト動作をさせるようにしているので、バスマスタのプログラムを書き換えることなく、バスマスタの動作を切り替えることができる。これは、たとえばプログラムのデバッグにおいて大きな効力を発揮することができる。
【００７０】
プログラムをデバッグする際に、ある命令を再実行して確認することがある。そのため、実際の使用時に、ブロッキングウエイト動作を必要としないバススレーブについても、デバッグ時には命令の再実行ができるようにしたいときがある。これを実現するために、バススレーブの例外の許可と禁止を示すビットを設け、ウエイト応答をする際に、このビットの値に応じてブロッキングウエイト応答かノンブロッキングウエイト応答をするように決めておく。たとえばバススレーブが例外許可状態にある場合にはブロッキングウエイト応答をし、バススレーブが例外禁止状態にある場合にはノンブロッキングウエイト応答をするようにする。そして、プログラムのデバッグ時において、バススレーブが例外許可状態になるようにビット値を設定してバスマスタにブロッキングウエイト動作をさせる。こうすることによって、デバッグ時において例外が発生した場合に命令の再実行を可能にすることができる。一方、実際の使用時において、バススレーブが例外禁止状態になるようにビット値を設定し、バスマスタにノンブロッキングウエイト動作をさせる。こうすることによって、実際の使用時において、バスシステムの高性能化を図ることができる。
【００７１】
以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、さまざまな変更、増減を加えてもよい。これらの変更、増減が加えられた変形例も本発明の範囲にあることは当業者に理解されるところである。
【００７２】
たとえば、上述した実施の形態のバスシステム１００において、応答手段５４はバススレーブ毎にその内部に備えられるようにしているが、応答手段５４または応答手段５４の一部をバススレーブの外部に設けてもよいし、複数のバススレーブに対して共通した１つの応答手段または応答手段の一部を設けるようにしてもよい。複数のバススレーブに対して共通した応答手段を設ける場合には、たとえばこの応答手段に、各バススレーブのそれぞれのレジスタと、その種類（ブロッキングウエイト動作を必要するレジスタなのか否か）とを対応付けたテーブルを設け、応答手段は、テーブルを参照してこれらの複数のバススレーブのそれぞれのレジスタがブロッキングウエイト動作を必要とするか否かを判別し、判別結果に応じてブロッキングウエイト応答またはノンブロッキングウエイトを返答するようにすればよい。
【００７３】
また、上述した実施の形態のバスシステム１００において、アドレスデコーダ５２はバススレーブ毎にその内部に備えられるようにしているが、アドレスデコーダ５２をバススレーブの外部に設けてもよく、複数のバススレーブに対して共通したアドレスデコーダを設けてもよい。複数のバススレーブに対して共通したアドレスデコーダを設ける場合に、たとえば、アドレスと、このアドレスに対応するレジスタが属するバススレーブとを対応付けたテーブルを設け、アドレスデコーダは、このテーブルを参照して、バスマスタからのアクセス要求により指定されたアドレスに対応するレジスタが属するバススレーブに対して、このバススレーブが指定されたことを示す選択信号を出力するようにしてもよい。
【００７４】
また、図５に示す例において、実装のしやすさと処理の高速化を図るために、要求信号ＲＥＱの次のサイクルにウエイト応答が返り、バスマスタ１０は要求信号ＲＥＱを発行したＥＸステージの次のＤＦステージで実行待ちを行っているが、たとえば、要求信号ＲＥＱが出されたサイクル中にウエイト応答を返すようにシステムを構成してもよい。
【図面の簡単な説明】
【００７５】
【図１】本発明にかかる実施の形態によるバスシステムの構成を示すブロック図である。
【図２】図１に示すバスシステムにおけるバスマスタとバススレーブの接続の詳細を示す図である。
【図３】図１に示すバスシステムにおけるバススレーブの構成を示すブロック図である。
【図４】図３に示すバススレーブ５０における処理を示すフローチャートである。
【図５】図１に示すバスシステムにおいて行われる処理の詳細を説明するための図である。
【図６】パイプライン処理を説明するための図である。
【図７】ノンブロッキングウエイト動作を説明するための図である。
【図８】ブロッキングウエイト動作を説明するための図である。
【図９】従来技術の手法を説明するための図である。
【符号の説明】
【００７６】
１０  バスマスタ  ２０  バスマスタ
３０  バス  ３１  制御信号線
３２  アドレス線  ３３  コマンド線
３４  データ線  ３５  レスポンス信号線
５０  バススレーブ  ６０  バススレーブ
５２  アドレスデコーダ  ５４  応答手段
５５  レスポンス生成部  ５６  制御部
５８  レジスタ群  １００  バスシステム
ＲＥＱ  要求信号  ＡＤＳ  アドレス
ＣＭＤ  コマンド  ＤＡＴ  データ
ＲＥＳＰ  レスポンス
【図１】
0004818820.tif 000002
【図２】
0004818820.tif 000003
【図３】
0004818820.tif 000004
【図４】
0004818820.tif 000005
【図５】
0004818820.tif 000006
【図６】
0004818820.tif 000007
【図７】
0004818820.tif 000008
【図８】
0004818820.tif 000009
【図９】
0004818820.tif 000010