(57)【要約】【課題】サポートできるバス幅が異なるボードを外部バスに接続したシステムにおいて、各ボードがサポートできるバス幅を認識してバス幅を設定する。【解決手段】外部バス３０に装脱着可能なボード２０Ａ，２０Ｂ，２０Ｃを接続し、機能拡張することが可能なシステムにおけるバス幅設定方法において、接続されるボードのサポートできるバス幅が異なる場合は、イニシエータ１０があらかじめ決められた全てのボードが共通してサポート可能なバス幅で特別なバス幅要求コマンドを発行し、各ボードからサポート可能なバス幅を収集し、各ボードが共通してサポート可能なバス幅を認識し、このバス幅を特別なバス幅設定コマンドを発行して各ボードに設定する。【選択図】　　　　図１
2004070711.tif 000002
【特許請求の範囲】
【請求項１】
外部バスに装脱着可能なボードを接続し、機能拡張することが可能なシステムにおけるバス幅設定方法において、
接続されるボードのサポートできるバス幅が異なる場合は、あらかじめ決められた全てのボードに共通してサポートできるバス幅で特別なバス幅要求コマンドを発行することにより、各ボードのサポートできるバス幅を認識し、特別なバス幅設定コマンドを発行し、バス幅を設定する外部バスのバス幅設定方法。
【請求項２】
請求項１において、特別なバス幅要求コマンドおよび特別なバス幅設定コマンドは、各ボードそれぞれに発行するのではなく、一度発行すれば各ボードが同時に認識できることを特徴とする外部バスのバス幅設定方法。
【請求項３】
請求項２において、特別なコマンドは、発行元が信号を出力のみ行い、発行先では、所定のタイミングでコマンドを認識することを特徴とする外部バスのバス幅設定方法。
【請求項４】
請求項１において、システム起動中に、特別なバス幅要求コマンドを発行する場合は、特別なバス幅設定コマンドで、あらかじめ決められた共通でサポートできるバス幅に設定することを特徴とする外部バスのバス幅設定方法。
【請求項５】
請求項１において、発行された特別なバス幅要求コマンドに対して、各ボードがバス幅を送信する特別なバス幅送信コマンドに付加するバス幅データは、そのボードがサポートする全てのバス幅が認識できるようにビットを割り付けることを特徴とする外部バスのバス幅設定方法。
【請求項６】
請求項１において、バス幅は、全てのボードがサポートできる最大のバス幅に合せて設定することを特徴とする外部バスのバス幅設定方法。
【請求項７】
請求項６において、最大のバス幅に合せる設定は、システムの初期化ルーチンで行われることを特徴とする外部バスのバス幅設定方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、外部バスを有するデータ処理装置におけるバス幅設定方法に関する。
【０００２】
【従来技術】
近年、プリンタコントローラボードなどにおいて、ＣＰＵ、そのＣＰＵアクセスに必要なＲＯＭ、ＲＡＭを接続するシステムバス以外に、そのシステムバスと接続され、装脱着可能なネットワークボードや他のＩ／Ｆボードを接続する例えばＰＣＩバスのような外部バスを設け、機能拡張するシステム、すなわち、外部バスに装脱着可能なボードを接続し機能拡張することが可能なシステムがある。
【０００３】
この外部バスシステムにおいては、バス幅は通常固定されており、３２ｂｉｔのバス幅の場合、接続される全てのボードは３２ｂｉｔのバス幅にする必要がある。拡張モードとして、異なるバス幅もサポートできるようになっているものもあるが、この場合バス幅を認識する為の信号が必要で、端子を追加したり、コネクタを変更したりしている。
【０００４】
【発明が解決しようとする課題】
従来技術では、図１４のように、バスイニシエータ５０に、外部バス７０を介して複数のクライアントＡ６０Ａ〜クライアントＣ６０Ｃからなるオプションを接続する場合、それぞれのクライアントに対応して複数個のバス幅認識信号（ＢＵＳ＿ＳＩＺＥ）が必要であり、イニシエータ５０側では、通常ＡＳＩＣなどの端子で構成することから、ＡＳＩＣのピン数が増加し、コストアップになるなどの問題があった。
【０００５】
上記した従来技術の問題を解決するために、特開平１１−１７５３９６号公報には、システムバスにおいて、スタートアドレスからのＲＯＭ領域をシステム最小のバス幅に固定し、他のメモリ領域をプログラマブルにバス幅設定して異なったバス幅をサポートする提案がなされている。しかし、この技術は、バス幅を設定するために、予め、メモリ内の１部にアクセス禁止領域を設ける必要があり、無駄なメモリを消費するという問題を有している。
【０００６】
したがって、本発明は、上記課題を解決し、外部バスに装脱着可能なボードを接続し、機能拡張することが可能なシステムにおいて、接続されるボードのサポートできるバス幅が異なる場合であっても、各ボードのサポートできるバス幅を認識してバス幅を設定することができるバス幅設定方法を提供することを目的とする。
【０００７】
【課題を解決するための手段】
上記課題を解決するために、本発明は、外部バスに装脱着可能なボードを接続し、機能拡張することが可能なシステムにおけるバス幅設定方法おいて、接続されるボードのサポートできるバス幅が異なる場合は、あらかじめ決められた共通でサポートできるバス幅で特別なバス幅要求コマンドを発行することにより、各ボードのサポートできるバス幅を認識し、特別なバス幅設定コマンドを発行し、バス幅を設定するようにした。このことにより、バス幅を認識するための認識信号用の端子数の増加を防ぐことができ、無駄なメモリを消費することもなくなる。
【０００８】
【発明の実施の形態】
本発明が適用される外部バスに装脱着可能なボードを接続し機能拡張することが可能な外部バスシステムの構成の概念を、図１を用いて説明する。この図において、バスイニシエータ１０と、複数のクライアントＡ２０Ａ〜クライアントＣ２０Ｃが、外部バス３０によって接続されている。外部バス３０は３２ｂｉｔ幅としている。
【０００９】
バスイニシエータ１０は、外部バスの管理を行う働きを有しており、ＣＬＫＩＮで入力されたクロックから外部バスの同期クロック（ＣＬＫ）をクライアントＡ２０Ａ〜クライアントＣ２０Ｃに出力し、外部バス３０はこのクロックと同期して、データの送受信を行う。
【００１０】
さらに、バスイニシエータ１０では、各クライアントがバスマスタになることを要求するＢＵＳＲＥＱ＿（バスリクエスト）信号をアサートした時に、内部のバスアービタ回路により、クライアントがバスマスタになることを許可するＢＵＳＡＣＫ＿（バスアクノリッジ）信号を出力し、クライアントがバスマスタになるようなバス調停機能をもっている。
【００１１】
さらに、バスイニシエータ１０は、特別なバス幅要求コマンド、特別なバス幅設定コマンドの発行元として働く。
【００１２】
【実施例】
図２、図３を用いて、図１の概念図に従った具体的な３２ｂｉｔアクセス時の動作タイミングを説明する。図２は、クライアントＡ２０ＡからクライアントＢ２０Ｂへのライトサイクルのタイミングである。
【００１３】
クライアントＡ２０Ａがバスマスタになることを要求するＢＵＳＲＥＱ＿信号をＣＬＫサイクルＴ１でアサートする。この信号により、イニシエータ１０は、ＣＬＫサイクルＴ２でＢＵＳＡＣＫ＿信号をアサートし、クライアントＡ２０Ａがバスマスタになることを許可する。
【００１４】
バスマスタになったクライアントＡ２０Ａは、バスマスタからのアクセスを示すＩＲＤＹ＿（イニシエータレディ）信号をＣＬＫサイクルＴ３でアサートし、同時にＡ／ＤＢＵＳ（アドレス／データバス）にアドレス（Ａｄｄｒｅｓｓ）を送信するとともに、Ｃ／ＢＥ（コマンド／バイトイネーブル）にライトコマンド（ＷＲＩＴＥ）を送信する。
【００１５】
クライアントＢ２０ＢまたはクライアントＣ２０Ｃは、アドレスが自分のアクセス領域であった場合、自分のアクセスであることを示すために、ＤＥＶＳＥＬ＿（デバイスセレクト）をＣＬＫサイクルＴ４でアサートする。この例では、クライアントＢ２０Ｂのアドレスが選択されているとする。
【００１６】
バスマスタ２０Ａは、ＤＥＶＳＥＬ＿がアサートされることによって送信先が存在することを認識し、ＣＬＫサイクルＴ５でＡ／ＤＢＵＳをアドレス（Ａｄｄｒｅｓｓ）からデータ（ＤＡＴＡ０）に切り換えて送信するとともに、Ｃ／ＢＥに３２ｂｉｔのどのバイトが有効データであるかを示すバイトイネーブル（ＢＥ０）を送信する。例えばＢＥが“１０００”の場合、３２ｂｉｔ内のＤ３１〜Ｄ２４が有効であることを示す。ＢＥが“１１００”の場合、３２ｂｉｔ内のＤ３１〜Ｄ１６が有効であることを示す。つまり、ＢＥ４ｂｉｔがバス３２ｂｉｔのバイト毎に対応している。
【００１７】
ターゲット２０Ｂは、ＣＬＫサイクルＴ５でデータ受信する準備が整っていることを示すＴＲＤＹ＿（ターゲットレディ）をアサートし、ＣＬＫサイクルＴ６でデータ（ＤＡＴＡ０）を取り込む。このときターゲット２０Ｂは、同時に読み込んだバイトイネーブル（ＢＥ０）によって、Ｄ０〜Ｄ３１のどのデータが有効かを判断する。バスマスタ２０Ａは、ＣＬＫサイクルＴ６で次のデータ（ＤＡＴＡ１）を送信する。ターゲット２０Ｂは、ＣＬＫサイクルＴ７でデータ（ＤＡＴＡ１）を取り込む。つまり、ターゲット２０Ｂは、ＴＲＤＹ＿をアサートしたクロックの立ち上がりでデータ（ＤＡＴＡ１）を取り込む。
【００１８】
ＴＲＤＹ＿をデアサートした時はデータが取り込めないことを示し、バスマスタ２０Ａは、ＴＲＤＹ＿がアサートされるまでデータを保持する。ＣＬＫサイクルＴ７ではＴＲＤＹ＿がデアサートされているため、データ（ＤＡＴＡ２）は保持されている。ターゲット２０Ｂでデータを取り込む準備ができると、ＣＬＫサイクルＴ８で再びＴＲＤＹ＿がアサートされ、ＣＬＫサイクルＴ９でデータ（ＤＡＴＡ２）を取り込む。
【００１９】
バスマスタ２０Ａは、データ転送が終了することを示すために、転送するデータ数があと１個になった時点で、ＩＲＤＹ＿をデアサートする。ターゲット２０Ｂは、最後の転送を受け取ったあとＣＬＫサイクルＴ１０でＴＲＤＹ＿をデアサートするとともに、バスを開放するために、ＢＵＳＲＥＱ＿をデアサートする。イニシエータ１０では、ＢＵＳＲＥＱ＿がデアサートされるとバス開放するために、ＣＬＫサイクルＴ１１でＢＵＳＡＣＫ＿信号をデアサートし、転送サイクルが終了する。
【００２０】
図３を用いて、クライアントＡ２０ＡからクライアントＢ２０Ｂへのリードアクセスの動作を説明する。クライアントＡ２０Ａがバスマスタになることを要求するＢＵＳＲＥＱ＿信号をＣＬＫサイクルＴ１でアサートする。この信号により、イニシエータ１０は、ＣＬＫサイクルＴ２でＢＵＳＡＣＫ＿信号をアサートし、クライアントＡ２０Ａがバスマスタになることを許可する。
【００２１】
バスマスタになったクライアントＡ２０Ａは、バスマスタからのアクセスを示すＩＲＤＹ＿（イニシエータレディ）信号をＣＬＫサイクルＴ３でアサートし、同時にＡ／ＤＢＵＳ（アドレス／データバス）にアドレス（Ａｄｄｒｅｓｓ）を送信するとともに、Ｃ／ＢＥ（コマンド／バイトイネーブル）にリードコマンド（ＲＥＡＤ）を送信する。
【００２２】
クライアントＢまたはクライアントＣは、アドレスが自分のアクセス領域であった場合、自分のアクセスであることを示すために、ＤＥＶＳＥＬ＿（デバイスセレクト）をＣＬＫサイクルＴ４でアサートする。この例では、クライアントＢ２０Ｂのアドレスが選択されているとする。
【００２３】
ターゲット２０Ｂは、リードであることを認識すると、Ａ／ＤＢＵＳの入力と出力を切り替えるので、切り換え期間として、ＣＬＫサイクルＴ５ではＡ／ＤＢＵＳをハイインピーダンス状態にする。ターゲット２０Ｂは、リードであることを認識するとＣＬＫサイクルＴ６でデータ送信する準備が整っていることを示すＴＲＤＹ＿をアサートする。ターゲット２０Ｂは、対応するデータをＣＬＫサイクルＴ６でＡ／ＤＢＵＳに送信する。
【００２４】
バスマスタ２０Ａは、ＤＥＶＳＥＬ＿がアサートされることによって読出先が存在することを認識し、ＣＬＫサイクルＴ７でＡ／ＤＢＵＳをアドレス（Ａｄｄｒｅｓｓ）からデータ（ＤＡＴＡ０）に切り換えて読み込むとともに、Ｃ／ＢＥから３２ｂｉｔのどのバイトが有効データであるかを示すバイトイネーブル（ＢＥ０）を受信する。
【００２５】
アドレスは自動的にインクリメントされるので、ターゲット２０Ｂは、ＣＬＫサイクルＴ７でデータ（ＤＡＴＡ１）を送信する。バスマスタ２０Ａは、ＣＬＫサイクルＴ７の立ちあがりでデータ（ＤＡＴＡ０）をＡ／ＤＢＵＳから取り込む。
【００２６】
バスマスタ２０Ａは、ＣＬＫサイクルＴ８でデータ（ＤＡＴＡ１）を取り込む。
【００２７】
ターゲット２０ＢがＴＲＤＹ＿をデアサートした時はデータを読み出せないことを示し、バスマスタ２０Ａは、ＴＲＤＹ＿がアサートされるまでデータ読出しで待機する。ＣＬＫサイクルＴ８ではＴＲＤＹ＿がデアサートされているため、データ読出しで待機している。ターゲット２０Ｂでデータを読み出す準備ができると、ＣＬＫサイクルＴ９で再びＴＲＤＹ＿がアサートされ、バスマスタ２０Ａは、ＣＬＫサイクルＴ１０でデータ（ＤＡＴＡ２）を取り込む。
【００２８】
バスマスタ２０Ａは、データ読出しが終了することを示すために、読み出すデータ数があと１個になった時点で、ＩＲＤＹ＿をデアサートする。ターゲット２０Ｂは、最後のデータ（ＤＡＴＡ３）を転送したあとＣＬＫサイクルＴ１１でＴＲＤＹ＿をデアサートするとともに、ＤＥＶＳＥＬ＿をデアサートする。イニシエータ１０では、ＤＥＶＳＥＬ＿がデアサートされるとＢＵＳＲＥＱ＿をデアサートし、バス開放するために、ＣＬＫサイクルＴ１２でＢＵＳＡＣＫ＿信号をデアサートし、読出サイクルを終了する。
【００２９】
この読出タイミングでは、バーストサイクルを示しており、アドレスは自動的にインクリメントされるので、アドレスは１回しか送信されない。
【００３０】
図４、図５を用いて、各クライアントに共通して使用可能なバス幅であるバス幅１６ｂｉｔの例のアクセスタイミングを説明する。図４は、バス幅１６ｂｉ時のライトサイクルであり、図５は、バス幅１６ｂｉ時のリードサイクルである。このシステムは、３２ｂｉｔアクセスを基本としているが、使用するバス幅が１６ｂｉｔであることから、３２ｂｉｔデータを上位１６ｂｉｔと下位１６ｂｉｔに分けて転送する。また、バイトイネーブルも１６ｂｉｔであり、Ｃ／ＢＥは２ｂｉｔとなる。コマンドも４ｂｉｔを基本としているが、Ｃ／ＢＥが２ｂｉｔのため、上位２ｂｉｔと下位２ｂｉｔに分けて転送する。
【００３１】
クライアントＡ２０Ａがバスマスタになることを要求するＢＵＳＲＥＱ＿信号をＣＬＫサイクルＴ１でアサートする。この信号により、イニシエータ１０は、ＣＬＫサイクルＴ２でＢＵＳＡＣＫ＿信号をアサートし、クライアントＡ２０Ａがバスマスタになることを許可する。
【００３２】
バスマスタになったクライアントＡ２０Ａは、バスマスタからのアクセスを示すＩＲＤＹ＿（イニシエータレディ）信号をＣＬＫサイクルＴ３でアサートし、同時にＡ／ＤＢＵＳ［１５：０］にアドレスの上位１６ｂｉｔ（ＡＤ［３１：１６］）を送信するとともに、Ｃ／ＢＥ［１：０］にライトコマンド上位２ｂｉｔ（ＣＭＤ［３：２］ＷＲＩＴＥ）を送信した後、ＣＬＫサイクルＴ４でＡ／ＤＢＵＳ［１５：０］にアドレスの下位１６ｂｉｔ（ＡＤ［１５：０］）を送信するとともに、Ｃ／ＢＥ［１：０］にライトコマンドの下位２ｂｉｔ（ＣＭＤ［１：０］ＷＲＩＴＥ）を送信する。
【００３３】
クライアントＢ２０ＢまたはクライアントＣ２０Ｃは、アドレスが自分のアクセス領域であるかを判断し、自分のアドレスであるときには、ターゲット２０Ｂは、自分のアクセスであることを示すために、ＤＥＶＳＥＬ＿をＣＬＫサイクルＴ４でアサートし、ＣＬＫサイクルＴ６でＩＲＤＹ＿をアサートする。この例では、クライアントＢ２０Ｂのアドレスが選択されているとする。
【００３４】
ターゲット２０ＢのＩＲＤＹ＿がアサートされたことを検知したバスマスタ２０Ａは、Ａ／ＤＢＵＳ［１５：０］にデータ（ＤＡＴＡ０）を送信するとともに、Ｃ／ＢＥ［１：０］にＢＥ０を送信する。以下、図２と同様にデータを上位１６ｂｉｔと下位１６ｂｉｔに分けて、１６ｂｉｔずつ送信する。
【００３５】
図５に示すように、バス幅１６ｂｉｔにおけるリードサイクルも図３と同様にデータを上位１６ｂｉｔと下位１６ｂｉｔに分けて、１６ｂｉｔずつ送信する。よって、その具体的な説明を省略する。
【００３６】
次に、図６を用いてコマンドについて説明する。通常アクセスとして、ライトコマンドは、Ｃ／ＢＥ：“０００１”、発行元：バスマスタ、発行先：ターゲット、Ａ／ＤＢＵＳ［３１：０］：アドレス、データであり、リードコマンドは、Ｃ／ＢＥ：“００１０”、発行元：バスマスタ、発行先：ターゲット、Ａ／ＤＢＵＳ［３１：０］：アドレス、データである。
【００３７】
特別なコマンドとして、バス幅要求コマンド、バス幅送信コマンド、バス幅設定コマンドがある。バス幅要求コマンドは、Ｃ／ＢＥ：“１０００”、発行元：イニシエータ、発行先：全てのクライアント、Ａ／ＤＢＵＳ［３１：０］：未定義である。バス幅要求コマンドは、クライアントがサポートしているバス幅をイニシエータに送信するように、イニシエータが要求するコマンドである。このコマンドは、１６ｂｉｔアクセスのみで行われ、イニシエータから全クライアントに同時に発行される。
【００３８】
バス幅送信コマンドは、Ｃ／ＢＥ：“１００１”、発行元：バスマスタ、発行先：イニシエータ、Ａ／ＤＢＵＳ［３１：０］：ＢＵＳ＿ＳＩＺＥである。バス幅設定コマンドは、Ｃ／ＢＥ：“１１１０”、発行元：イニシエータ、発行先：全てのクライアント、Ａ／ＤＢＵＳ［３１：０］：ＢＵＳ＿ＷＩＤＴＨである。
【００３９】
ＢＵＳ＿ＳＩＺＥ［０］は、８ｂｉｔバスサポート、１：サポートであり、ＢＵＳ＿ＳＩＺＥ［１］は、１６ｂｉｔバスサポート、１：サポートであり、ＢＵＳ＿ＳＩＺＥ［２］は、３２ｂｉｔバスサポート、１：サポートであり、ＢＵＳ＿ＳＩＺＥ［３２：３］は、０固定である。
【００４０】
ＢＵＳ＿ＷＩＤＴＨは、ＢＵＳ＿ＷＩＤＴＨ［１：０］で、“００”：８ｂｉｔバス設定であり、“０１”：１６ｂｉｔバス設定であり、“００”：３２ｂｉｔバス設定である。
【００４１】
特にバス幅要求コマンド、バス幅送信コマンドは、この場合、各クライアントが共通してサポートしているバス幅を１６ｂｉｔとすると、１６ｂｉｔアクセスのみで行われる。共通サポートバス幅は、前もって決められる必要がある。
【００４２】
バス幅要求コマンドのタイミングを、図７を用いて説明する。イニシエータ１０は、ＣＬＫサイクルＴ１でＣ／ＢＥ「１：０」上に、コマンド“１０００”の上位２ｂｉｔ“１０”を送信し、ＣＬＫサイクルＴ２で下位２ｂｉｔ“００”を送信する。イニシエータ１０はこの時、ＩＲＤＹ＿をアサートするが、通常アクセスのようにクライアントからの確認信号であるＤＥＶＳＥＬ＿、ＴＲＤＹ＿を認識しない。
【００４３】
したがって、クライアントＡ２０Ａ〜クライアントＣ２０Ｃは、ＩＲＤＹ＿がアサートされたクロックの立ち上がり（ＣＬＫサイクルＴ２、Ｔ３）でコマンドを必ず取り込む必要がある。これにより、全クライアントは同時にバス幅要求コマンドを受信できる。このコマンドでは、Ａ／ＤＢＵＳのデータは意味をなさないので、規定していない。
【００４４】
また、このバス幅要求コマンドをシステム起動中に発行する場合、その時のバス幅設定が共通してサポートできるバス幅とは限らないので、必ず後述するバス幅設定コマンドにより各クライアントを共通サポート幅に設定してから、発行する。これにより、各クライアントが、このバス幅要求コマンドを、必ず受信することが可能となる。
【００４５】
バス幅送信コマンドのタイミングを、図８を用いて説明する。バス幅送信コマンドは、イニシエータ１０から送信されたバス幅要求コマンドに応えて、各クライアントＢ０Ａ〜２０Ｃがサポートしているバス幅をイニシエータに送信する時に、バス幅情報とともに使用するコマンドである。このバス幅送信コマンドは、１６ｂｉｔアクセスのみで行われる。各クライアントは、このバス幅送信コマンドを送信する前に、ＢＵＳＲＥＱ＿をアサートし、バスマスタになる必要がある。バスマスタになったクラアントは、Ｃ／ＢＥ上にＣＬＫサイクルＴ１でバス幅送信コマンドの上位２ｂｉｔを、ＣＬＫサイクルＴ２で下位２ｂｉｔを送信する。
【００４６】
図９を用いて、各クライアントが同時にＢＵＳＲＥＱ＿をアサートした時のタイミングを説明する。ＣＬＫサイクルＴ１でクライアントＡ〜Ｃから同時にアサートされたＢＵＳＲＥＱ＿に対して、イニシエータ１０では、優先順位に従って、ＣＬＫサイクルＴ２で１つのクライアントＡに対して、ＢＵＳＡＣＫ＿をアサートし、クライアントＡにバスを開放する。バスマスタになったクライアントＡは、ＣＬＫサイクルＴ３〜Ｔ５で図８に示したタイミング（図８ＣＬＫサイクルＴ１〜Ｔ３）でバス幅送信コマンドを送信する。バス幅送信コマンドを送信したクライアントＡは、ＣＬＫサイクルＴ６でＢＵＳＲＥＱ＿をデアサートする。
【００４７】
イニシエータは、クライアントＡからのＢＵＳＲＥＱ＿がデアサートされたことを認識すると、次の優先順位のクライアントＢにバスを開放するとともにＣＬＫサイクルＴ７でクライアントＡのＢＵＳＡＣＫ＿をデアサートする。バスマスタになったクライアントＢは、ＣＬＫサイクルＴ８〜Ｔ１０でバス幅送信コマンドを送信し、送信後ＣＬＫサイクルＴ１１でＢＵＳＲＥＱ＿をデアサートする。イニシエータはクライアントＢからのＢＵＳＲＥＱ＿がデアサートされたことを認識すると、ＣＬＫサイクルＴ１２で次の優先順位のクライアントＣにバスを開放するとともにクライアントＢのＢＵＳＡＣＫ＿をデアサートする。同様にバスマスタになったクライアントＣは、でバス幅送信コマンドを送信し、送信後ＣＬＫサイクルＴ１６でＢＵＳＲＥＱ＿をデアサートする。
【００４８】
これにより、イニシエータは、全てのクライアントからのバス幅情報を認識することができる。この時、各クライアントは、サポートしているバス幅を図６に示すようなビット対応させたデータとして送信する。例えば、あるクライアントが８ｂｉｔバスと１６ｂｉｔバスをサポートしている場合は、ＢＵＳ＿ＳＩＺＥ［２：０］は“０１１”となり、Ａ／ＤＢＵＳには“０００００００３Ｈ”のデータが送信される。８ｂｉｔ、１６ｂｉｔ、３２ｂｉｔをサポートしているクライアントは、ＢＵＳ＿ｓｉｚｅ［２：０］が“１１１”となり、Ａ／ＤＢＵＳには“０００００００７Ｈ”が送信される。これにより、イニシエータは各クライアントがサポートしているバス幅を全て認識することができる。
【００４９】
バス幅設定コマンドは、各クライアントからのバス幅情報から決定されたバス幅をイニシエータから全クライアントに設定するコマンドである。このバス幅設定コマンドは、イニシエータから全クライアントに送信し、１６ｂｉｔ、３２ｂｉｔ両方アクセス可能であり、図１０が１６ｂｉｔアクセス時のタイミングを説明する図であり、図１１が３２ｂｉｔアクセス時のタイミングを説明する図である。この時、バス幅設定コマンドは、図６に示すようなビット対応させたデータとして送信する。例えば、バス幅設定を１６ｂｉｔバス幅設定にした場合、ＢＵＳ＿ＷＩＤＴＨ［１：０］は“０１”になり、Ａ／ＤＢＵＳには、“０００００００１Ｈ”を転送する。バス幅設定を３２ｂｉｔにした場合は、ＢＵＳ＿ＷＩＤＴＨ［１：０］は“１０”になり、Ａ／ＤＢＵＳには、“０００００００２Ｈ”を転送する。
【００５０】
バス幅の設定は、バス幅送信コマンドから得た各クライアントがサポートしているバス幅から決定し、例えば、全てのクライアントが３２ｂｉｔをサポートしていれば、バス幅を３２ｂｉｔに設定することによって、高速なアクセスが可能となる。
【００５１】
このバス幅決定処理を、図１２を用いて説明する。電源ＯＮされると初期化ルーチンでこの処理が行われ、イニシエータは、最初にバス幅要求コマンドを送信する（Ｓ１）。次にクライアントからのバス幅送信コマンドを待ち（Ｓ２）、そのクライアントのサポートしているバス幅を取得する（Ｓ３）。クライントが複数ある場合は、全クライアントからのバス幅送信コマンドが送信されるまで、コマンドを待つ（Ｓ４）。全てのクライアントからバス幅送信コマンドを受信したら、この例の場合、３２ｂｉｔか１６ｂｉｔかの選択である為、全てのクライアントが３２ｂｉｔか判断し（Ｓ５）、３２ｂｉｔをサポートしていたら、バス幅設定コマンド（３２ｂｉｔ）を送信する（Ｓ６）。１つでも３２ｂｉｔバス幅をサポートしていないクライアントがあれば、バス幅設定コマンド（１６ｂｉｔ）を送信する（Ｓ７）。
【００５２】
このフローによれば、あるクライントが１６ｂｉｔバス幅のみのサポートで、その他のクライントが１６ｂｉｔ、３２ｂｉｔ幅のサポートをしている場合、このシステムは１６ｂｉｔバス幅設定されるが、電源ＯＦＦして、１６ｂｉｔバス幅のみサポートしたクライアントだけが脱着されると、その他のクライアントは３２ｂｉｔサポートが可能となるので、システムは３２ｂｉｔ幅が可能となり、次の電源ＯＮで初期化ルーチンにより、バス幅は３２ｂｉｔに設定される。
【００５３】
図１３を用いて、イニシエータの構成を説明する。イニシエータ１０は、ＣＰＵ１１と、ＲＯＭ１２と、ＲＡＭ１３と、外部バスブリッジ１４と、システムバス１５から構成される。外部バスブリッジ１４は、リードバッファ１４１と、ライトバッファ１４２と、ターゲット制御回路１４３と、マスタ制御回路１４４と、アビータ回路１４５と、マルチプレクサ回路１４６とから構成される。
【００５４】
ＣＰＵ１１は、プログラムＲＯＭ１２とワークＲＡＭ１３とシステムバス１５と接続されており、システムの制御を行う。また、外部バスブリッジ１４とは、リードバッファ１４１、ライトバッファ１４２を通して、システムバス１５と接続されている。
【００５５】
リードバッファ１４１は、外部バス３０からＣＰＵ１１にデータ及びコマンドを送信する時のバッファであり、ライトバッファ１４２は、ＣＰＵ１１から外部バス３０にデータ及びコマンドを送信する時のバッファである。
【００５６】
マスタ制御回路１４４は、外部バス３０のバスマスタ制御回路であり、ライトバッファ１４２にデータが貯えられると、マスタ制御回路１４４はデータ及びコマンドを送信するように、外部バス信号のタイミングを生成する。この時、アービタ回路１４５と接続され、アービタ回路１４５でバス使用権を調停し、イニシエータにバス使用権を開放された時にマスタ制御回路１４４がアクセスされる。
【００５７】
ターゲット制御回路１４３では、外部バス３０からイニシエータにデータ及びコマンドが送信されると、外部バス信号を制御し、データをリードバッファ１４１に貯え、ＣＰＵ１１にリード要求を行い、ＣＰＵ１１はデータ及びコマンドをリードする。
【００５８】
マルチプレクサ回路１４６では、マスタ制御回路１４４とターゲット制御回路１４３で生成される外部バス信号をセレクトし、それぞれ接続する。
【００５９】
【発明の効果】
本発明は、特別なバス幅要求コマンドを各クライアントに共通してサポート可能なバス幅で同時に発行することにより、各クライアント（ボード）のバス幅を認識することができるので、バス幅を認識するための信号を追加せずに、システムに収容されるクライアント（ボード）が共通してサポート可能な、最も高速なバス幅を設定することが可能となる。
【００６０】
さらに、本発明によれば、各クライアント（ボード）にバス幅要求コマンドおよびバス幅設定コマンドを一斉に発行することができるので、バス幅設定処理にかかる時間を短縮することができる。
【００６１】
本発明によれば、発行元からのバス幅要求コマンドおよびバス幅設定コマンドに対する発行先からの受信信号を認識する必要がないので、各クライアント（ボード）が同時にこれらのコマンドを認識することができる。
【００６２】
本発明によれば、特別なバス幅要求コマンドは、あらかじめ決められた各クライアント（ボード）に共通してサポートできるバス幅でのみ発行されるので、接続されるボードが確実にバス幅要求コマンドを認識することができる。
【００６３】
本発明によれば、各ボードがサポートする全てのバス幅を認識することができ、システム上一番効率の良いバス幅を設定することが可能となる。
【００６４】
本発明によれば、共通のバス幅を、最大のバス幅に合せることにより、システムを高速に動作させることできる。
【００６５】
本発明によれば、初期化ルーチンにおいてバス幅設定を行なうので、最大バス幅をサポートできないクライアントが存在して、システムが最大バス幅をサポートできていない時に、電源ＯＦＦして、当該クライアントを脱離させると、次に電源ＯＮされた時に、最大バス幅に設定することができる。
【図面の簡単な説明】
【図１】本発明にかかる外部バス幅設定方法が適用される外部バスの接続を説明する概略図。
【図２】外部バス３２ｂｉｔのライトアクセスタイミング図。
【図３】外部バス３２ｂｉｔのリードアクセスタイミング図。
【図４】外部バス１６ｂｉｔのライトアクセスタイミング図。
【図５】外部バス１６ｂｉｔのリードアクセスタイミング図。
【図６】コマンドを説明する図。
【図７】バス幅要求コマンドのアクセスタイミング図。
【図８】バス幅送信コマンドのアクセスタイミング図。
【図９】全クライアントからのバス幅送信コマンドのアクセスタイミング図。
【図１０】バス幅設定コマンド（１６ｂｉｔ）のアクセスタイミング図。
【図１１】バス幅要求コマンド（３２ｂｉｔ）のアクセスタイミング図。
【図１２】イニシエータ側のフローチャート。
【図１３】本発明のイニシエータ側のブロック図。
【図１４】従来の外部バスの接続を説明する概略図。
【符号の説明】
１０　バスイニシエータ
１１　ＣＰＵ
１２　ＲＯＭ
１３　ＲＡＭ
１４　外部バスブリッジ
１４１　リードバッファ
１４２　ライトバッファ
１４３　ターゲット制御回路
１４４　マスタ制御回路
１４５　アービタ回路
１４６　マルチプレクサ回路
１５　システムバス
２０　クライアント
３０　外部バス
【図１】
2004070711.tif 000003
【図２】
2004070711.tif 000004
【図３】
2004070711.tif 000005
【図４】
2004070711.tif 000006
【図５】
2004070711.tif 000007
【図６】
2004070711.tif 000008
【図７】
2004070711.tif 000009
【図８】
2004070711.tif 000010
【図９】
2004070711.tif 000011
【図１０】
2004070711.tif 000012
【図１１】
2004070711.tif 000013
【図１２】
2004070711.tif 000014
【図１３】
2004070711.tif 000015
【図１４】
2004070711.tif 000016