(57)【特許請求の範囲】
【請求項１】
クロック周波数の切り替えが可能なクロック生成回路を内蔵し、システムバスと当該システムバスとは独立したクロック制御バスとに他のＬＳＩと共に接続して使用され、内蔵の前記クロック生成回路にて生成されるクロックにより他のＬＳＩと同期して動作するクロック周波数切り替え機能を有するＬＳＩであって、
前記クロック制御バスを構成し、アサートされている状態においてクロック周波数を上げる方向または下げる方向のうちの所定の方向に切り替えることを示す第１の信号、及びアサートされている状態においてクロック周波数の変更が不要なことを示し、前記第１の信号と共にデアサートされている状態においてクロック周波数を上げる方向または下げる方向のうちの前記所定の方向とは別の方向に切り替えることを示す第２の信号を、現在のクロックの状態を示すように操作することにより、当該現在のクロックの状態を前記システムバス及びクロック制御バスに接続される他のＬＳＩに通知するクロック状態決定手段と、
前記クロック制御バスの前記第１及び第２の信号により示されるクロックの状態に基づいて内蔵の前記クロック生成回路を対象にクロック周波数の切り替えを前記他のＬＳＩと同期して実行するクロック周波数切り替え手段と
具備することを特徴とするクロック周波数切り替え機能を有するＬＳＩ。
【請求項２】
システムバスと当該システムバスとは独立したクロック制御バスとに他のＬＳＩと共に接続して使用される、クロック周波数切り替え機能を有するＬＳＩにおいて、
クロック周波数の切り替えが可能なクロック生成回路と、
クロック周波数の切り替えが必要な状態で前記システムバスの使用権が取得できたときに、クロック周波数切り替えのためのトランザクションを前記システムバスに発行する手段と、
前記クロック制御バスに、少なくともクロック周波数を上げること、または下げること、または切り替えしないことを示す信号を出力して、前記システムバス及びクロック制御バスに接続される他のＬＳＩにクロック切り替え操作を通知する手段と、
前記システムバスに発行されたクロック周波数切り替えのためのトランザクションに対して、前記システムバスに接続された他のＬＳＩから正常応答が返された場合、一定のクロックサイクル経過後、前記クロック制御バス上の信号に基づいて前記クロック生成回路を制御してクロック周波数の切り替えを実行すると共に、前記クロック制御バス上の信号を前記切り替えをしないことを示す信号に維持する手段と
を具備することを特徴とするクロック周波数切り替え機能を有するＬＳＩ。
【請求項３】
システムバスと当該システムバスとは独立したクロック制御バスとに他のＬＳＩと共に接続して使用される、クロック周波数切り替え機能を有するＬＳＩにおいて、
クロック周波数の切り替えが可能なクロック生成回路と、
クロック周波数の切り替えが必要な状態で前記システムバスの使用権を取得したＬＳＩから前記システムバスに発行されたクロック周波数切り替えのためのトランザクションを受信する手段と、
前記システムバスの使用権を取得したＬＳＩから前記クロック制御バスを用いて通知された、少なくともクロック周波数を上げること、または下げること、または切り替えしないことを示す信号を受信する手段と、
前記クロック周波数切り替えのためのトランザクションが受信された場合、前記クロック制御バスを用いて通知されたクロック切り替えが可能であるかを判定する手段と、
クロック切り替えが可能である場合に、前記システムバスの使用権を取得したＬＳＩへ正常応答を返し、一定のクロックサイクル経過後、前記クロック制御バス上の信号に基づいて前記クロック生成回路を制御してクロック周波数の切り替えを実行すると共に、前記クロック制御バス上の信号を前記切り替えをしないことを示す信号に維持する手段と
を具備することを特徴とするクロック周波数切り替え機能を有するＬＳＩ。
【請求項４】
システムバスと、
前記システムバスとは独立したクロック制御バスと、
クロック周波数の切り替えが可能なクロック生成回路を内蔵し、前記システムバス及び前記クロック制御バスにより相互接続される少なくとも第１及び第２のＬＳＩとを具備し、
前記第１のＬＳＩは、
クロック周波数の切り替えが必要な状態で前記システムバスの使用権が取得できたときに、クロック周波数切り替えのためのトランザクションを前記システムバスに発行する手段と、
前記クロック制御バスに、少なくともクロック周波数を上げること、または下げること、または切り替えしないことを示す信号を出力して、前記第２のＬＳＩにクロック切り替え操作を通知する手段と、
前記システムバスに発行されたクロック周波数切り替えのためのトランザクションに対して、前記第２のＬＳＩから正常応答が返された場合、一定のクロックサイクル経過後、前記クロック制御バス上の信号に基づいて前記クロック生成回路を制御してクロック周波数の切り替えを実行すると共に、前記クロック制御バス上の信号を前記切り替えをしないことを示す信号に維持する手段とを具備し、
前記第２のＬＳＩは、
前記第１のＬＳＩから前記システムバスに発行されたクロック周波数切り替えのためのトランザクションを受信する手段と、
前記第１のＬＳＩから前記クロック制御バスを用いて通知された、少なくともクロック周波数を上げること、または下げること、または切り替えしないことを示す信号を受信する手段と、
前記クロック周波数切り替えのためのトランザクションが受信された場合、前記クロック制御バスを用いて通知されたクロック切り替えが可能であるかを判定する手段と、
前記クロック切り替えが可能である場合に、前記第１のＬＳＩへ正常応答を返し、一定のクロックサイクル経過後、前記クロック制御バス上の信号に基づいて前記クロック生成回路を制御してクロック周波数の切り替えを実行すると共に、前記クロック制御バス上の信号を前記切り替えをしないことを示す信号に維持する手段とを具備する
ことを特徴とする計算機システム。
【請求項５】
クロック周波数の切り替えが可能なクロック生成回路を内蔵した第１及び第２のデバイスが、システムバスと、前記システムバスとは独立したクロック制御バスとにより相互接続され、前記第１及び第２のデバイスが、内蔵の前記クロック生成回路にて生成されるクロックにより相互に同期して動作する計算機システムにおけるクロック周波数切り替え方法であって、
前記第１のデバイスが前記クロック制御バスに、少なくともクロック周波数を上げること、または下げること、または切り替えしないことを示す信号を出力して、前記第２のデバイスにクロック切り替え操作を通知するステップと、
前記第１のデバイスがクロック周波数の切り替えが必要な状態で前記システムバスの使用権を取得できたときに、クロック周波数切り替えのためのトランザクションを前記システムバスに発行するステップと、
前記第１のデバイスから前記システムバスにクロック周波数切り替えのためのトランザクション発行された場合、前記クロック制御バスを用いて通知されたクロック周波数の切り替えが可能であるかを前記第２のデバイスが判定するステップと、
前記クロック周波数の切り替えが可能である場合に、前記第２のデバイスから前記第１のデバイスへ正常応答を返すステップと、
前記正常応答を返した前記第２のデバイスが、一定のクロックサイクル経過後、前記クロック制御バス上の信号に基づいて前記クロック生成回路を制御してクロック周波数の切り替えを実行すると共に、前記クロック制御バス上の信号を前記切り替えをしないことを示す信号に維持するステップと、
前記第２のデバイスから前記正常応答を返された前記第１のデバイスが、一定のクロックサイクル経過後、前記クロック制御バス上の信号に基づいて前記クロック生成回路を制御してクロック周波数の切り替えを実行すると共に、前記クロック制御バス上の信号を前記切り替えをしないことを示す信号に維持するステップと
を具備することを特徴とするクロック周波数切り替え方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、クロック周波数切り替え機能を有するＬＳＩ、計算機システム及びクロック周波数切り替え方法に関する。
【０００２】
【従来の技術】
従来、クロックで動作するＬＳＩでは、動作周波数を保証するのに、以下の３つの方法
ａ．設計時に最悪条件を想定する方法（方法ａ）
ｂ．製造後の検査で速く動作するチップを選別する方法（方法ｂ）
ｃ．動作時のＬＳＩの温度を計測するセンサを取り付け、ＬＳＩ温度が一定以上になると動作周波数を下げるようにソフトウェアで制御する方法（方法ｃ）
のいずれかを適用するのが一般的であった。
【０００３】
方法ａは、特定用途向けのＬＳＩ等の比較的生産数量が少ない場合に適用される。
方法ｂは、汎用のメモリやマイクロプロセッサ等、生産数量が多い場合に適用ざれることが多い。
方法ｃは、ノートブック型パーソナルコンピュータなどにおいて空冷ファン等を使用しても冷却しきれない場合に動作周波数を落としてタイミングエラーを防ぐ方法として用いられる。
【０００４】
【発明が解決しようとする課題】
上記した従来技術においては、例えば方法ａでは設計条件が厳しくなりすぎ、実際の動作可能周波数よりも低い周波数で動作させるため、動作性能が実力（動作可能周波数の最大値）よりも低い状態で使わざるを得ないという問題がある。
【０００５】
また、方法ｂでは、方法ａよりは設計条件が緩和されるものの、周囲温度や電源電圧等の条件が実際の使用条件よりも厳しい場合が多く、やはり動作性能が実力よりも低い状態で使わざるを得ないという問題がある。
【０００６】
方法ｃでも周囲温度は考慮されるものの電源電圧等の条件は実際の使用条件よりも厳しい場合が多く、やはり動作性能が実力よりも低い状態で使わざるを得ないという問題がある。
【０００７】
このように従来は、ＬＳＩの実用最大動作周波数は、そのＬＳＩの持つ最高能力よりも低い範囲において製品毎に固定的に決められているのが一般的であった。
【０００８】
一方、米国特許５，８７２，９０７号公報に記載されているように、フォールトトレラント型コンピュータにおいてＡＣタイミングエラーによるエラーを検出した場合にクロック周波数を変更して、システムの信頼性を向上させる技術も提案されている。
【０００９】
また、パーソナルコンピュータ等には、レジスタ設定により（システムバスなどの）基本クロックに対してプロセッサ等の動作周波数を逓倍する機構が組み込まれているものがある。この種の機構では、一般にクロック周波数の切り替えは割り込み等を用いてシステムの動作が安定した状態で行っている。
【００１０】
これらのクロック周波数切り替え技術は、計算機（ＬＳＩ）を当該計算機（ＬＳＩ）の実力が発揮できるように動作させることが可能となるため、上記の問題を解決するのに有用である。但し、実動作状態において安定に、且つ最高性能を発揮するように動作させるには、必ずしも十分でない。
【００１１】
そこで本出願人は、特願平１１−３１８７７１号において、クロック周波数の切り替えが可能な「クロック生成回路とクロック生成方法」を提案し、当該クロック生成回路（またはクロック生成方法）を適用するＬＳＩを、実動作状態において安定に、且つ最高性能を発揮するように動作させるようにした。
【００１２】
しかし、いずれのクロック周波数切り替え技術も、クロック周波数をシステム動作中に動的に、且つ他のＬＳＩ（内のクロック生成回路）と同期して切り替える仕組みについては考慮されていなかった。
【００１３】
本発明は上記事情を考慮してなされたものでその目的は、自身が生成するクロックの周波数を動的に、且つ他ＬＳＩと同期して切り替えることができるクロック周波数切り替え機能を有するＬＳＩ、計算機システム及びクロック周波数切り替え方法を提供することにある。
【００１４】
【課題を解決するための手段】
本発明は、クロック周波数の切り替えが可能なクロック生成回路を内蔵し、システムバスと当該システムバスとは独立したクロック制御バスとに他のＬＳＩと共に接続して使用され、内蔵のクロック生成回路にて生成されるクロックにより他のＬＳＩと同期して動作するクロック周波数切り替え機能を有するＬＳＩであって、少なくとも上記クロック制御バスを用いて内蔵のクロック生成回路を対象にクロック周波数の切り替えを動的に、且つ他ＬＳＩと同期して実行するクロック周波数切り替え手段を備えたことを特徴とする。
【００１５】
このような構成のＬＳＩでは、当該ＬＳＩを複数個、システムバス及びクロック制御バスに接続して計算機システムを構築した場合、各ＬＳＩ毎のクロック周波数の切り替えに上記クロック制御バスを利用することで、クロック周波数の切り替えを動的に（システム動作中に）且つ相互に同期して行うことが可能となる。
【００１６】
ここで上記クロック制御バスを利用してクロック周波数切り替えを行うには、ＬＳＩが、少なくとも次の２信号、即ちクロック周波数を所定方向に切り替える必要があることを示す第１の信号とクロック周波数を上記第１の信号とは反対方向に切り替えることを示すかまたはクロック周波数の変更が不要なことを示す第２の信号とにより構成される上記クロック制御バスに接続されて使用される構成とすると共に、上記クロック周波数切り替え手段に、現在のクロックの状態を示すように少なくとも上記第１及び第２の信号を操作するクロック状態決定手段を持たせ、上記第１及び第２の信号により示されるクロック状態に基づいてクロック周波数を切り替える構成とするとよい。もし、第１及び第２の信号のみでクロック状態を表す場合、第１の信号によりクロック周波数の変更が不要でないことが示され、第２の信号によりクロック周波数を所定方向に切り替える必要がないことが示される特定の組み合わせで、クロック周波数を所定方向とは逆方向に切り替える必要があるクロック状態を示すようにするとよい。また、クロック周波数を所定方向とは逆方向に切り替える必要があることを示す第３の信号を追加してもよい。
【００１７】
また、クロック周波数切り替えに上記システムバスを併用し、当該システムバス上のトランザクションを利用してクロック周波数の切り替えを同期して行うようにすることも可能である。システムバス上のトランザクションを利用する場合、システムバスの性能に応じて比較的高速なクロックを制御することが可能となる。
【００１８】
ここで、システムバス上のトランザクションを利用してクロック周波数の切り替えを行うには、当該トランザクションを利用したクロック周波数切り替えのマスタとなるＬＳＩのクロック周波数切り替え手段に次の各手段、即ち少なくとも上記第１及び第２の信号により示される、クロック周波数の切り替えが必要となるクロック状態が第１のクロックサイクル数継続することを検出する検出手段と、この検出手段の検出結果に応じてシステムバス及びクロック制御バス上のＬＳＩのうちターゲットとなるＬＳＩにクロック周波数切り替えのためのバストランザクションを発行するトランザクション発行手段と、上記発行されたバストランザクションに対するターゲットからの正常完了応答通知時点を基準に第２のクロックサイクル数が経過するのを待つタイミング調整手段とを持たせ、この第２のクロックサイクル数経過後にクロック周波数の切り替えを行う構成にするとよい。
【００１９】
この場合、（上記トランザクションを利用したクロック周波数切り替えの）ターゲットとなるＬＳＩのクロック周波数切り替え手段には、マスタとなるＬＳＩからクロック周波数切り替えのためのバストランザクションが発行された場合に、クロック周波数の切り替えが可能であるならば、当該トランザクションの実行完了時に、上記マスタに対してトランザクションの正常完了応答を通知する正常完了応答手段と、この正常完了応答通知時点を基準に所定クロックサイクル数が経過するのを待つタイミング調整手段とを持たせ、この所定クロックサイクル数（第２のクロックサイクル数）経過後にクロック周波数の切り替えを行う構成にするとよい。
【００２０】
また、マスタ及びターゲット以外のＬＳＩのクロック周波数切り替え手段には次の各手段、即ちマスタからクロック周波数切り替えのためのバストランザクションが発行された場合に、クロック周波数の切り替えが可能であるならば、上記ターゲットからマスタへのトランザクションの正常完了応答通知時点を基準に所定クロックサイクル数が経過するのを待つタイミング調整手段を持たせ、この所定クロックサイクル数（第２のクロックサイクル数）経過後にクロック周波数の切り替えを行う構成にするとよい。
【００２１】
このような構成においては、クロック周波数の切り替えを、システムバス上のトランザクションを利用して各ＬＳＩ間で同期して行うことが簡単に実現できる。
【００２２】
特に、ターゲットのクロック周波数切り替え手段に次のリトライ応答手段、即ちクロック周波数の切り替えが可能でない場合に、上記マスタに対して所定のフェーズでリトライ応答を返すリトライ応答手段を追加するならば、ターゲットでクロック周波数の切り替えができない場合でも、バストランザクションのリトライにより、クロック周波数の切り替えを各ＬＳＩ間で同期して行うことができる。
【００２３】
また、マスタ及びターゲット以外のＬＳＩのクロック周波数切り替え手段に次の切り替え不可通知手段、即ちクロック周波数の切り替えが可能でない場合に、上記システムバス上の所定の２信号であって、通常状態ではいずれか一方だけがアサートされる状態または両方がデアサートされる状態を取る所定の２信号を同時にアサートすることで、クロック周波数の切り替え不可を他ＬＳＩに通知する切り替え不可通知手段を追加するならば、特別の信号を新たに用意することなく、クロック周波数の切り替え不可を他ＬＳＩに通知することができるため、バストランザクションのリトライが可能となる。この場合、ターゲットのリトライ応答手段に、上記所定の２信号が同時にアサートされた場合にも、マスタに対してリトライ応答を返す機能を追加するとよい。この他に、専用の切り替え不可通知信号を用意してもよい。
【００２４】
また本発明のＬＳＩは、システムバス上のトランザクションを利用したクロック周波数切り替えを適用しない構成では、上記クロック周波数切り替え手段に次の各手段、即ち少なくとも上記第１及び第２の信号により示される、クロック周波数の切り替えが必要となるクロック状態が第１のクロックサイクル数継続する特定状態を検出する検出手段と、この検出手段により上記特定状態が検出され、且つクロック周波数の切り替えが可能である場合、予め定められたタイミングで少なくとも上記第１または第２の信号を操作することで他のＬＳＩとの間でクロック周波数切り替えの同期が取れていることを確認する動作を少なくとも１回実行する同期確認手段とを持たせ、この同期確認手段の確認結果に基づいてクロック周波数の切り替えを行う構成とすることをも特徴とする。
【００２５】
このような構成においては、クロック制御バスの信号のみを用いてクロック周波数切り替えの同期が取れたことを簡単に確認できるため、この確認結果に基づいてクロック周波数の切り替えを行うことでクロック切り替えの同期を保証することが可能となる。また、上記同期確認手段に、クロック周波数切り替え後も上記と同様にして同期確認を行う機能を追加するならば、クロック切り替えの同期を一層確実に保証できる。
【００２６】
ここで、上記同期確認手段に次の各手段、即ち１回の同期確認実行につき、少なくとも上記第１または第２の信号を予め定められた第１のタイミングでアサートし、しかる後に予め定められた第２のタイミングで当該アサートした信号をデアサートする動作を行う同期確認用信号操作手段と、この信号操作手段による操作タイミングと他の全てのＬＳＩの信号操作手段による操作タイミングの一致の有無を検出するタイミング検出手段とを持たせて、このタイミング検出手段によるタイミング一致検出に応じて同期を確認する構成とするならば、同期確認が簡単に実現できる。但し、この手法では、全てのＬＳＩでクロック制御バスの信号を同時にアサート、デアサートする動作が行われるため、（システムバスに比べて）当該クロック制御バスの高速化が難しく、したがって前記したシステムバス上のトランザクションを利用する手法と異なり、比較的低速なクロックの周波数切り替えに適用するのが好ましい。勿論、クロック周波数に対して十分高速なクロック制御バスを用いるならば、この限りではない。
【００２７】
また、上記クロック周波数切り替え手段に次の各手段、即ちクロック周波数の切り替えが可能でない場合、上記クロック制御バスの少なくとも１つの所定の信号をクロック周波数切り替え準備未完了を示す状態となるように操作する周波数切り替え準備未完了通知用信号操作手段と、この準備未完了通知用信号操作手段の操作により、或いは他のＬＳＩの準備未完了通知用信号操作手段の操作によりクロック周波数切り替え準備未完了が示されている場合、クロック周波数切り替えを停止するクロック周波数切り替え停止手段とを持たせるならば、システムバス及びクロック制御バスに接続されたＬＳＩのいずれかでクロック周波数の切り替えの準備が未完了の場合に、クロック周波数切り替えを停止させることが可能となる。ここで、上記クロック周波数切り替え停止手段に代えて、自ＬＳＩまたは他ＬＳＩの準備未完了通知用信号操作手段の操作によりクロック周波数切り替え準備未完了が示されている場合にクロック周波数切り替えを延期するクロック周波数切り替え延期手段を用いるならば、システムバス及びクロック制御バスに接続されたＬＳＩのいずれかでクロック周波数の切り替えの準備が未完了の場合に、クロック周波数切り替えを延期させることが可能となる。この延期時間は、クロック周波数切り替え準備未完了を示す状態の継続時間によって制御できる。
【００２８】
また、クロック周波数切り替え準備未完了を示す状態の継続時間として、所定時間、または当該所定時間を超える時間が選択可能な構成とするならば、例えば所定時間の場合にはクロック周波数切り替えの停止を示し、所定時間を超える時間の場合には、その時間だけクロック周波数切り替えを延期することを示すようにして、クロック周波数切り替えの停止または延期を選択的に実行することもできる。また、上記少なくとも１つの所定の信号として、クロック周波数切り替え準備未完了を示す専用の信号を割り当てることも可能であるが、上記第１及び第２の信号を用いて、両信号の特定状態、例えば第１の信号がクロック周波数の変更が不要なことを示し、第２の信号がクロック周波数を所定方向に切り替えることを示している状態によりクロック周波数切り替え準備未完了を表すようにしてもよい。
【００２９】
また、本発明のクロック周波数切り替え機能を有するＬＳＩは、クロック生成回路と、システムバスの使用権が取得できたときに、クロック周波数切り替えのためのトランザクションを上記システムバスに発行する手段と、クロック制御バスに、少なくともクロック周波数を上げること、または下げること、または切り替えしないことを示す信号を出力して、上記システムバスに接続される他のＬＳＩにクロック切り替え操作を通知する手段と、上記システムバスに接続された他のＬＳＩからリトライ要求が応答されない場合、一定のクロックサイクル経過後、上記クロック生成回路を制御してクロック周波数の切り替えを実行すると共に、上記クロック制御バス上の信号を上記切り替えをしないことを示す信号に維持する手段とを備えたことを特徴とする。また、本発明のクロック周波数切り替え機能を有するＬＳＩを、クロック生成回路と、システムバスの使用権を取得したＬＳＩから上記システムバスに発行されたクロック周波数切り替えのためのトランザクションを受信する手段と、上記システムバスの使用権を取得したＬＳＩからクロック制御バスを用いて通知された、少なくともクロック周波数を上げること、または下げること、または切り替えしないことを示す信号を受信する手段と、上記トランザクションに対し、通知されたクロック切り替えが可能と判断した場合に、上記システムバスの使用権を取得したＬＳＩへ正常応答を返し、一定のクロックサイクル経過後、上記クロック生成回路を制御してクロック周波数の切り替えを実行すると共に、上記クロック制御バス上の信号を上記切り替えをしないことを示す信号に維持する手段とにより構成することも可能である。
【００３０】
このような構成においては、各ＬＳＩ間でクロック制御バスとシステムバスとを併用してクロック周波数の切り替えを同期して行うことが可能となる。
【００３１】
また、本発明のクロック周波数切り替え機能を有するＬＳＩは、クロック生成回路と、システムバスとは独立したクロック制御バスに出力された、少なくとても第１の信号及び第２の信号を監視する手段と、自ＬＳＩがクロック周波数の切り替え準備ができ、上記システムバスに接続された他のＬＳＩも切り替え準備が完了していることを上記第１の信号がアサートされていないことによって検出できたとき、上記第２の信号をデアサートすると共に、第１のサイクル時間経過後、上記第１の信号をアサートして同期を取る手段と、その後、第２のサイクル時間経過後、上記第１の信号をデアサートして同期遅れがないことを確認し、更に第３のサイクル時間経過後、上記クロック生成回路を制御してクロック周波数の切り替えを実行する手段とを備えたことを特徴とする。また、本発明のクロック周波数切り替え機能を有するＬＳＩを、クロック生成回路と、システムバスとは独立したクロック制御バスに出力された、少なくとても第１の信号及び第２の信号を監視する手段と、上記第１及び第２の信号が第１のサイクル時間アサートされていなければ、クロック周波数の切り替えと判断し、クロック周波数切り替え準備ができていれば、上記第１の信号をアサートし、第２のサイクル時間経過後、上記第１の信号をデアサートする手段と、上記システムバスに接続された他のＬＳＩも切り替え準備ができていることを上記第２のサイクル時間中に上記第２の信号がアサートされていないことによって検出し、上記第１の信号をデアサートしてから第３のサイクル時間経過後、上記第２の信号をアサートして、第４のサイクル時間経過後、上記第２の信号をデアサートして、同期が取れたことを確認して上記クロック生成回路を制御してクロック周波数の切り替えを実行する手段により構成することも可能である。
【００３２】
このような構成においては、各ＬＳＩ間でクロック制御バスを利用してクロック周波数の切り替えを同期して行うことが可能となる。
【００３３】
また本発明は、以上の構成のＬＳＩを複数備え、当該複数のＬＳＩがシステムバス及びクロック制御バスにより相互接続された構成の計算機システムに係る発明としても成立する。この計算機システムでは、複数のＬＳＩを相互接続するシステム監視バスと、このシステム監視バスに接続され、上記各ＬＳＩに内蔵のクロック生成回路のクロック周波数を決定する設定情報を読み込んで比較することで、上記各ＬＳＩ間のクロック周波数のずれを検出するシステム監視デバイスとを追加することで、クロック周波数の設定状態がシステム全体で整合が取れていることを保証できる。
【００３４】
また、上記計算機システムに係る本発明は、方法（クロック周波数切り替え方法）に係る発明としても成立する。
【００３５】
【発明の実施の形態】
以下、本発明の実施の形態につき図面を参照して説明する。
［第１の実施形態］
図１は本発明の第１の実施形態に係るクロック周波数切り替え機能を有するＬＳＩを複数備えた計算機システム（マルチプロセッサシステム）の構成を示すブロック図である。
【００３６】
図１において、プロセッサバス１及びクロックコントロールバス２には、クロック周波数を温度環境等の種々の条件に応じて最適な値に動的に切り替えることが可能なクロック生成回路ＣＧを内蔵する複数のＬＳＩ（デバイス）、例えばプロセッサ３〜５、ホスト−ＰＣＩブリッジ６、及びその他のデバイス７が接続されている。ホスト−ＰＣＩブリッジ６はＰＣＩバス８及び主メモリ９とも接続されている。上記各クロック生成回路ＣＧは、当該回路ＣＧが生成するクロックの周波数を指定する周波数設定レジスタＲを含んでいる。
【００３７】
プロセッサ３〜５は、主メモリ９の一部の情報を記憶したキャッシュメモリ（図示せず）を内部または外部に備えている。これら各キャッシュメモリの内容は周知のように、主メモリ９及び各キャッシュメモリ間に矛盾がないように、つまりキャッシュコヒーレンシを保つように制御される。
【００３８】
プロセッサバス１は、主としてプロセッサ（プロセッサ３〜５等）がメモリ（例えば主メモリ９）をアクセスするときに使用するバス（システムバス）である。プロセッサバス１には、共通の信号線をアドレスとデータの転送に時分割で使う方式のバス構造、或いはアドレス／データ各々に独立した信号線を設ける方式のバス構造を適用するものがあり、いずれのバス構造であっても構わない。ここでは、プロセッサバス１がアドレス線（アドレスバス）及びデータ線（データバス）を備えており、当該プロセッサバス１を利用する複数のＬＳＩ（デバイス）がアドレスバス及びデータバスの両方に接続されているものとする。このようなバス構造のプロセッサバス１には、米国インテル社のＰｅｎｔｉｕｍＰｒｏ等で使用されているＰｅｎｔｉｕｍＰｒｏバスがある。なお、上記デバイスが、後で説明するようにアドレバス、またはデータバスのどちらか一方だけに接続されていても構わない。
【００３９】
クロックコントロールバス２はクロック周波数調整用のバスである。クロックコントロールバス２は、例えば“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の２本の信号をオープン・コレクタで接続したワイヤードオア方式のバスで構成する。“Ｄｏｗｎ”信号はクロック周波数を所定方向に切り替える必要があることを示す信号で、この例では下げる必要があることを示す信号（第１の信号）である。“Ｈｏｌｄ”信号はクロック周波数を“Ｄｏｗｎ”信号とは反対の方向に切り替える必要があることを示すか、またはクロック周波数の変更が不要なことを示す信号（第２の信号）である。
【００４０】
ホスト−ＰＣＩブリッジ６は、プロセッサバス１及びＰＣＩバス８の一方のバス上のデバイスが他方のバス上のデバイスをアクセスできるように、プロセッサバス１とＰＣＩバス８との間を双方向で接続するブリッジ装置である。ホスト−ＰＣＩブリッジ６には、主メモリ９をアクセス制御するためのメモリコントローラ６０が内蔵されている。ホスト−ＰＣＩブリッジ６はＰＣＩバス８上のバスマスタとして機能することができる。
【００４１】
プロセッサバス１及びクロックコントロールバス２に接続されているプロセッサ３〜５、ホスト−ＰＣＩブリッジ６、及びその他のデバイス７は、システム監視用のバス、例えば１ビットデータ線とクロック線とを有するシリアルバス１０により、当該シリアルバス１０のマスタとなるシステム監視ＬＳＩ（システム監視デバイス）１１と接続されている。システム監視ＬＳＩ１１は、シリアルバス１０上にバストランザクションを発行することで、当該シリアルバス１０上の各ＬＳＩ（デバイス）に内蔵されているクロック生成回路ＣＧ中の周波数設定レジスタＲの値を読み出すことができるようになっている。ここでは、システム監視ＬＳＩ１１は、ＯＳ（オペレーティングシステム）等のソフトウェアからの要求、或いはシステム監視ＬＳＩ１１自身で動作するソフトウェアの要求により、定期的に、もしくは不定期に各ＬＳＩ（デバイス）の周波数設定レジスタＲの値を読み出す。
【００４２】
さて、プロセッサ３〜５等、プロセッサバス１及びクロックコントロールバス２に接続されている各ＬＳＩ（デバイス）は、内蔵するクロック生成回路ＣＧにて生成するクロックの周波数を、システム動作状態において動的に、しかも切り替え直後に安定動作が得られる方法で切り替える機能を有している。
【００４３】
このクロック周波数の切り替えのために、各ＬＳＩ（デバイス）は、現在の動作状態に応じて、好ましくは現在の動作状態におけるクロック周波数に対するマージンに応じて、“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号を図２に示す組み合わせで出力するクロック状態決定機能を有している。図２中、“○”は信号をアサートすることを示し、“×”は信号をアサートしないことを示す。
【００４４】
図２の例では、現在のクロックの状態として、“クロック周波数が高すぎる”、“現在のクロック（の周波数）が最適”、“クロック周波数を高くできる”の３種が定義されている。ＬＳＩ（デバイス）は、“クロック周波数が高すぎる”場合、“Ｄｏｗｎ”信号のみをアサートする。またＬＳＩ（デバイス）は、“現在のクロックが最適”の場合には“Ｈｏｌｄ”信号のみをアサートし、“クロック周波数が高すぎる”場合には“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号のいずれもアサートしない。
【００４５】
各ＬＳＩからの“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号はクロックコントロールバス２とオープンコレクタ接続されている。このため、いずれか１つのＬＳＩがクロックコントロールバス２の信号（“Ｈｏｌｄ”信号または“Ｄｏｗｎ”信号）をアサートするとクロックコントロールバス２上で当該信号の論理がアクティブ（真）になる。また全てのＬＳＩがクロックコントロールバス２の信号（“Ｈｏｌｄ”信号または“Ｄｏｗｎ”信号）をデアサートするとクロックコントロールバス２上で当該信号の論理が非アクティブ（偽）になる。
【００４６】
各ＬＳＩは、クロックコントロールバス２の“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の組み合わせによって、クロック周波数を切り替える準備をする。この“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の組み合わせと、各ＬＳＩのクロック切り替え操作内容（次のクロックの状態）との関係を図３に示す。
【００４７】
図３の例では、ＬＳＩはクロックコントロールバス２の“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号が共にアサートされている場合と、“Ｄｏｗｎ”信号のみがアサートされている場合には、クロック周波数を下げる（周波数設定レジスタＲの値を例えば−１する）準備を開始する。またＬＳＩは、クロックコントロールバス２の“Ｈｏｌｄ”信号のみがアサートされている場合にはクロック周波数を切り替えない。またＬＳＩは、クロックコントロールバス２の“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号がいずれもアサートされていない場合には、（周波数設定レジスタＲの値を例えば＋１することで）クロック周波数を上げる準備を開始する。
【００４８】
但し、ＬＳＩが“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の組み合わせに従ってクロック周波数を切り替える準備を開始するのは、“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の組み合わせで決まるクロック周波数を切り替える状態が予め定められたクロックサイクル数、例えば１０クロックサイクルを超えて継続した場合である。
【００４９】
さて、各ＬＳＩでのクロック周波数の切り替えは、当該各ＬＳＩ間で同時に実行されること、つまり各ＬＳＩ間で同期して実行されることが好ましい。そこで本実施形態では、ブート時にマスタとなるプロセッサをクロック周波数切り替えのマスタとするようにしている。図１の例では、プロセッサ３がマスタプロセッサとなっている。
【００５０】
クロック切り替えのマスタとなったプロセッサ（プロセッサ３）は、クロック周波数の切り替えを決定すると、クロック周波数を同期して切り替えるためのバストランザクションをプロセッサバス１に発行する。このトランザクションはクロック周波数を明示的に上げること、もしくは明示的に下げることを示すものであっても、単に“クロック周波数を切り替える”ことだけを示すものであってもよい。
【００５１】
本実施形態では、プロセッサバス１に接続される各ＬＳＩ（デバイス）にはクロック周波数の切り替えが可能なクロック生成回路ＣＧが内蔵されており、また“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号が接続されている。したがって、クロック周波数切り替えの方向は“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の組み合わせから各ＬＳＩ自身で判定できる。そこでマスタプロセッサ（プロセッサ３）から例えば“クロック周波数を切り替える”ことだけを示すバストランザクションをプロセッサバス１に発行することにより、他のＬＳＩ（デバイス）はクロック周波数切り替えを実行する。
【００５２】
“クロック周波数を切り替える”ことを示すバストランザクションとしては、専用のバスコマンドを用いても、ある特定のアドレスへの（リードまたはライト）アクセスを用いてもよい。本実施形態では、マスタとなるプロセッサ（プロセッサ３）が予め決められたアドレスへのライトトランザクションを発行し、各ＬＳＩがそのアクセスを“リトライ”しなければ、ある一定のクロックサイクル後、例えば１００クロックサイクル後に一斉にクロック周波数を切り替える方式とする。
【００５３】
以下、各ＬＳＩでのクロック周波数切り替えについて、図４乃至図１１を適宜参照して説明する。
【００５４】
なお、図４はマスタプロセッサ３のクロック周波数切り替え動作を説明するためのフローチャート、図５はマスタプロセッサ３によるバストランザクションのターゲットとなるターゲットＬＳＩ（ここではホスト−ＰＣＩブリッジ６のメモリコントローラ６０）のクロック周波数切り替え動作を説明するためのフローチャート、図６はマスタプロセッサ３とターゲットＬＳＩ以外のＬＳＩのクロック周波数切り替え動作を説明するためのフローチャートである。また、図７乃至図９はクロック周波数を下げる場合のタイミングチャートであり、図７はクロック周波数切り替えのためのバストランザクションに対してリトライが発生しない場合、図８はターゲットＬＳＩ（メモリコントローラ６０）がリトライする場合、図９はマスタプロセッサ３とターゲットＬＳＩ以外のＬＳＩがターゲットＬＳＩ（メモリコントローラ６０）によりリトライさせる場合を示す。また、図１０及び図１１はクロック周波数を上げる場合のタイミングチャートであり、図１０はクロック周波数切り替えのためのバストランザクションに対してリトライが発生しない場合、図１１はターゲットＬＳＩ（メモリコントローラ６０）がリトライする場合を示す。
【００５５】
まず本実施形態では、プロセッサバス１に米国インテル社のＰｅｎｔｉｕｍＰｒｏ等で使用されているＰｅｎｔｉｕｍＰｒｏバスを適用するものとする。このＰｅｎｔｉｕｍＰｒｏバスの代表的な信号として以下のものが知られている。
・バスリクエスト信号
バスの使用権を得るためのアービトレーション信号である。
・アドレス信号
リード／ライトするターゲットアドレスを示す信号である。
・リクエスト信号
バストランザクションの種類を示す信号である。バストランザクションとしては“リード”、“ライト”等がある。
・スヌープ信号
キャッシュコヒーレンシを保つための信号である。スヌープ信号としては“Ｈｉｔ”信号、“ＨｉｔＭ”信号、“Ｄｅｆｅｒ”信号がある。“Ｈｉｔ”信号はキャッシュメモリが“Ｓｈａｒｅｄ”状態（キャッシュメモリの内容が主メモリ９の情報と一致している状態）であることを示す。“ＨｉｔＭ”信号はいずれかのキャッシュメモリが“Ｍｏｄｉｆｉｅｄ”状態（キャッシュメモリの内容が更新されて主メモリ９の情報と一致していない状態）であることを示す。また“Ｄｅｆｅｒ”信号はターゲットがリトライもしくはデファー（延期）されることを示す。リトライによりトランザクションはアボートされ、デファーによりトランザクションは後で再実行される。
・レスポンス信号
リードデータの送信や、リトライ等を示し、バストランザクションを完了させる信号である。
【００５６】
次に、ＰｅｎｔｉｕｍＰｒｏバス上のバストランザクションには以下のフェーズ、即ち
・アドレス等を出力するリクエストフェーズ
・キャッシュ状態を通知するスヌープフェーズ
・バストランザクションを完了させるレスポンスフェーズ
がある。
【００５７】
ＰｅｎｔｉｕｍＰｒｏバスでバストランザクションをリトライするには以下の手順で行う。
（１）スヌープフェーズで“Ｄｅｆｅｒ”信号をアサートする。
（２）レスポンスフェーズで“リトライ”レスポンスを返す。
【００５８】
ここでは、ターゲットとなるバスエージェントのみバストランザクションをリトライできる。ターゲットになるバスエージェントは通常はメモリコントローラまたはＰＣＩバスブリッジであり、本実施形態ではホスト−ＰＣＩブリッジ６上のメモリコントローラ６０である。
【００５９】
スヌープフェーズで使用する信号の優先順位は、高い方から“ＨｉｔＭ”→“Ｄｅｆｅｒ”→“Ｈｉｔ”の順である。なお、“Ｈｉｔ”信号と“ＨｉｔＭ”信号が同時にアサートされるとスヌープフェーズは延長され、２クロックサイクル後に再度スヌープフェーズが実行される。
【００６０】
さて、クロック周波数切り替えのマスタとなるプロセッサ、例えばプロセッサ（マスタプロセッサ）３は、クロックコントロールバス２上の“Ｄｏｗｎ”信号がアサートされている状態（つまりクロック周波数を下げる必要があることを示す状態）が１０クロックサイクル以上継続した場合には（図７乃至図９）、“Ｈｏｌｄ”信号の状態に無関係に、クロック周波数を下げることを決定する。またマスタプロセッサ３は、クロックコントロールバス２上の“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号が共にアサートされていない状態（つまりクロック周波数を上げる必要があることを示す状態）が１０クロックサイクル以上継続した場合には（図１０、図１１）、クロック周波数を上げることを決定する。
【００６１】
まず、マスタプロセッサ３はクロック周波数の切り替えを決定すると（ステップＳ１）、プロセッサバス１上の“バスリクエスト”信号をアサートすることで、当該プロセッサバス１の使用権を（図示せぬバスアービタに対して）要求する（ステップＳ２）。
【００６２】
そしてマスタプロセッサ３は、プロセッサバス１の使用権を獲得すると（ステップＳ３のＹＥＳ）、（図７乃至図１０の時刻ｔ１において）クロック周波数切り替えのための、予め定められたアドレスＡを対象とする“ライト”トランザクションを発行する（ステップＳ４）。本実施形態では、このバストランザクションのターゲットは、ホスト−ＰＣＩブリッジ６のメモリコントローラ６０である。
【００６３】
プロセッサバス１上のターゲットＬＳＩ（ターゲットデバイス）、即ちホスト−ＰＣＩブリッジ６のメモリコントローラ６０は、図５に示すように自身へのクロック周波数切り替えのためのバストランザクション、つまりアドレスＡを対象とする“ライト”トランザクションが発生した場合（ステップＳ１１のＹＥＳ）、現時点においてクロック周波数切り替えが可能か否かを判断する（ステップＳ１２）。
【００６４】
メモリコントローラ６０は、クロック周波数を切り替えることができるならば、クロックコントロールバス２上の“Ｈｉｔ”及び“ＨｉｔＭ”の両信号が（クロック周波数を切り替えることができない他のＬＳＩにより後述するステップＳ２８で）共にアサートされているか否か、つまりクロック周波数を切り替えることができないＬＳＩが存在するか否かを判断する（ステップＳ１３）。
【００６５】
もし、図７、図１０の状態７０ａ、１００ａのように“Ｈｉｔ”及び“ＨｉｔＭ”の両信号がアサートされていなければ（ステップＳ１３のＮＯ）、メモリコントローラ６０はクロック周波数を切り替えることができないＬＳＩは存在せず、したがってクロック周波数の切り替えが可能であると判断する。この場合、メモリコントローラ６０は、マスタプロセッサ３からのクロック周波数切り替えのためのバストランザクションを実行して図７、図１０の状態７０ｂ、１００ｂのようにレスポンスフェーズでレスポンス信号により“正常”レスポンスをマスタプロセッサ３に返しバストランザクションを完了する（ステップＳ１４）。
【００６６】
そしてメモリコントローラ６０は、バストランザクション（“ライト”トランザクション）の完了時点（時刻ｔ２）から、予め定められたクロックサイクル数、例えば１００サイクルが経過する（つまり図７、図１０の時刻ｔ３に到達する）のを待って（ステップＳ１５のＹＥＳ）、自身のクロック生成回路ＣＧ内の周波数設定レジスタＲの値Ｎを１だけ変更する（図７の例では１だけ減らし、図１０の例では１だけ増やす）ことで、クロック周波数を一定量だけ切り替える（ステップＳ１６）。同時にメモリコントローラ６０は、“Ｄｏｗｎ”信号をデアサートすると共に、“Ｈｏｌｄ”信号をアサートする（ステップＳ１７）。
【００６７】
これに対し、図９、図１１の状態９０ａ、１１０ａのようにプロセッサバス１上の“Ｈｉｔ”及び“ＨｉｔＭ”の両信号が共にアサートされているならば（ステップＳ１３のＹＥＳ）、メモリコントローラ６０はクロック周波数を切り替えることができないＬＳＩが存在しており、したがってクロック周波数の切り替えができないと判断する。この場合、メモリコントローラ６０は、図９、図１１の例のように、２クロックサイクル後の再度のスヌープフェーズ９０ｂ、１１０ｂで“Ｄｅｆｅｒ”をアサートし（ステップＳ１８）、レスポンスフェーズ９０ｃ、１１０ｃで“リトライ”レスポンスをマスタプロセッサ３に返し（ステップＳ１９）、マスタプロセッサ３からクロック周波数の切り替えのためのバストランザクションが再発行されるのをステップＳ１１で待つ。
【００６８】
またメモリコントローラ６０は、例えば自身が主メモリ９をアクセスしているといった要因でクロック周波数を切り替えることができない場合にも（ステップＳ１２のＮＯ）、図８の例のように、スヌープフェーズ８０ａで“Ｄｅｆｅｒ”をアサートし（ステップＳ１８）、レスポンスフェーズ８０ｂで“リトライ”レスポンスを返し（ステップＳ１９）、しかる後にステップＳ１１に戻る。
【００６９】
同様に、マスタプロセッサ３以外のＬＳＩのうち、ターゲットＬＳＩ（メモリコントローラ６０）を除くＬＳＩ（ここでは、プロセッサ４，５、その他のデバイス７）も、図６に示すようにクロック周波数切り替えのためのバストランザクションを検出した場合には（ステップＳ２１）、現時点においてクロック周波数切り替えが可能か否かを判断する（ステップＳ２２）。
【００７０】
マスタプロセッサ３以外のＬＳＩのうち、ターゲットＬＳＩ（メモリコントローラ６０）を除くＬＳＩ（以下、非マスタ・非ターゲットＬＳＩと称する）は、クロック周波数を切り替えることができるならば、クロックコントロールバス２上の“Ｈｉｔ”及び“ＨｉｔＭ”の両信号が他のＬＳＩにより共にアサートされているか否かを判断する（ステップＳ２３）。
【００７１】
もし、図７、図１０の状態７０ａ、１００ａのように“Ｈｉｔ”及び“ＨｉｔＭ”の両信号がアサートされていなければ（ステップＳ２３のＮＯ）、非マスタ・非ターゲットＬＳＩはクロック周波数を切り替えることができないＬＳＩは存在せず、したがってクロック周波数の切り替えが可能であると判断する。この場合、非マスタ・非ターゲットＬＳＩは、図７、図１０の状態７０ｂ、１００ｂのように、ターゲットＬＳＩ（メモリコントローラ６０）からマスタプロセッサ３に対してレスポンスフェーズでレスポンス信号が返されるのを待つ、つまりバストランザクションが完了するのを待つ。
【００７２】
非マスタ・非ターゲットＬＳＩは、プロセッサバス１を監視してレスポンスフェーズでレスポンス信号が返されたことを検出すると、“正常”レスポンスまたは“リトライ”レスポンスのいずれであるかを判断する（ステップＳ２４）。
【００７３】
もし、“正常”レスポンスであるならば（ステップＳ２４のＹＥＳ）、非マスタ・非ターゲットＬＳＩはバストランザクションが正常完了したものとして、その時点（時刻ｔ２）から１００サイクルが経過する（つまり図７、図１０の時刻ｔ２に到達する）のを待って（ステップＳ２５）、自身のクロック生成回路ＣＧ内の周波数設定レジスタＲの値Ｎを１だけ変更する（図７の例では１だけ減らし、図１０の例では１だけ増やす）ことで、クロック周波数を切り替える（ステップＳ２６）。同時に非マスタ・非ターゲットＬＳＩは、“Ｄｏｗｎ”信号をデアサートすると共に、“Ｈｏｌｄ”信号をアサートする（ステップＳ２７）。
【００７４】
これに対し、図９、図１１の状態９０ａ、１１０ａのようにプロセッサバス１上の“Ｈｉｔ”及び“ＨｉｔＭ”の両信号が共にアサートされているならば（ステップＳ２３のＹＥＳ）、非マスタ・非ターゲットＬＳＩはクロック周波数を切り替えることができないＬＳＩが存在しており、したがってクロック周波数の切り替えができないと判断する。この場合、非マスタ・非ターゲットＬＳＩはステップＳ２１に戻って、クロック周波数の切り替えのためのバストランザクションのリトライが行われるのを待つ。
【００７５】
同様に非マスタ・非ターゲットＬＳＩは、図８の状態（レスポンスフェーズ）８０ｂのようにターゲットＬＳＩ（メモリコントローラ６０）からマスタプロセッサ３に“リトライ”レスポンスが返された場合にも（ステップＳ２４のＮＯ）、ステップＳ２１に戻って、クロック周波数の切り替えのためのバストランザクションのリトライが行われるのを待つ。
【００７６】
また非マスタ・非ターゲットＬＳＩは、自身がクロック周波数を切り替えることができない場合には（ステップＳ２２のＮＯ）、図９、図１１の例のように、スヌープフェーズで“Ｈｉｔ”及び“ＨｉｔＭ”の両信号を共にアサートし（ステップＳ２８）、しかる後にステップＳ２１に戻って、クロック周波数の切り替えのためのバストランザクションのリトライが行われるのを待つ。
【００７７】
さて図４に戻り、クロック周波数の切り替えのためのバストランザクションを発行したマスタプロセッサ３は、当該トランザクションに対するターゲットＬＳＩ（メモリコントローラ６０）からのレスポンスフェーズで“リトライ”レスポンスが返されるか否かを監視する（ステップＳ５）。
【００７８】
もし、“正常”レスポンスが返されたならば（ステップＳ５のＮＯ）、マスタプロセッサ３はバストランザクションの完了を判断し（ステップＳ６）、その時点（時刻ｔ２）から１００サイクルが経過する（つまり図７、図１０の時刻ｔ３に到達する）のを待って（ステップＳ７）、自身のクロック生成回路ＣＧ内の周波数設定レジスタＲの値Ｎを１だけ変更する（図７の例では１だけ減らし、図１０の例では１だけ増やす）ことで、クロック周波数を切り替える（ステップＳ８）。同時にマスタプロセッサ３は、“Ｄｏｗｎ”信号をデアサートすると共に、“Ｈｏｌｄ”信号をアサートする（ステップＳ９）。
【００７９】
これに対し、図８、図９、図１１のレスポンスフェーズ８０ｂ、９０ｃ、１１０ｃの例のように、“リトライ”レスポンスが返されたならば（ステップＳ５のＹＥＳ）、マスタプロセッサ３は再びステップＳ１〜Ｓ４を実行して、クロック周波数切り替えのためのバストランザクションをプロセッサバス１に再度発行する。もし、このバストランザクションの再発行、つまりリトライで、ターゲットＬＳＩ（メモリコントローラ６０）及び非マスタ・非ターゲットＬＳＩが全てクロック周波数切り替えが可能ならば、図８、図９、図１１の例のように時刻ｔ２で、ターゲットＬＳＩ（メモリコントローラ６０）から“正常”レスポンスが返され、その時点（時刻ｔ２）から１００サイクルが経過する（つまり図８、図９、図１１の時刻ｔ３に到達する）のを待って、自身のクロック生成回路ＣＧ内の周波数設定レジスタＲの値Ｎを１だけ変更する（図８、図９の例では１だけ減らし、図１１の例では１だけ増やす）ことで、マスタプロセッサ３自身においてもクロック周波数の切り替えが行われる。
【００８０】
以上に述べたように本実施形態においては、ターゲットＬＳＩ（メモリコントローラ６０）及び非マスタ・非ターゲットＬＳＩがクロック周波数を切り替えることができない場合、マスタプロセッサ３はバストランザクションをリトライするようにしている。このリトライの仕組みを以下に整理して示す。
【００８１】
（ａ）メモリコントローラ６０（ターゲットＬＳＩ）は、自身がクロック周波数を切り替えることができない場合（ステップＳ１２のＹＥＳ）、スヌープフェーズで“Ｄｅｆｅｒ”をアサートし（ステップＳ１８）、レスポンスフェーズでリトライする（ステップＳ１９）。
【００８２】
（ｂ）メモリコントローラ６０（ターゲットＬＳＩ）は、自身がクロック周波数を切り替えることができる場合であっても、他のＬＳＩ（非マスタ・非ターゲットＬＳＩ）がクロック周波数を切り替えることができない場合、当該ＬＳＩによりスヌープフェーズで“Ｈｉｔ”と“ＨｉｔＭ”が同時にアサートされることから（ステップＳ２８）、これをメモリコントローラ６０自身が監視し（ステップＳ１３のＹＥＳ）、２クロックサイクル後の再度のスヌープフェーズで“Ｄｅｆｅｒ”をアサートし（ステップＳ１８）、レスポンスフェーズでリトライする（ステップＳ１９）。
【００８３】
（ｃ）非マスタ・非ターゲットＬＳＩは、マスタプロセッサ３からメモリコントローラ６０（ターゲットＬＳＩ）へのクロック周波数切り替えのためのバストランザクションが発生すると（ステップＳ２１）、自身がクロック周波数を切り替えることができない場合には（ステップＳ２２のＮＯ）、メモリコントローラ６０（ターゲットＬＳＩ）によりクロック周波数切り替えのためのバストランザクションをリトライさせるために、スヌープフェーズで“Ｈｉｔ”と“ＨｉｔＭ”を同時にアサートする（ステップＳ２８）。この場合、メモリコントローラ６０（ターゲットＬＳＩ）は、上記（ｂ）で示した仕組みにより２クロックサイクル後の再度のスヌープフェーズで“Ｄｅｆｅｒ”をアサートし、レスポンスフェーズでリトライする。
【００８４】
このように、クロック周波数切り替えのためのバストランザクションがリトライされる場合、各ＬＳＩ（マスタプロセッサ３、ターゲットＬＳＩ、非マスタ・非ターゲットＬＳＩ）はクロック周波数を切り替えない。これに対し、クロック周波数切り替えのためのバストランザクションがリトライされない場合には、各ＬＳＩ（マスタプロセッサ３、ターゲットＬＳＩ、非マスタ・非ターゲットＬＳＩ）は当該トランザクションの完了後１００クロックサイクル経過時にクロック周波数を一斉に切り替える（ステップＳ８，Ｓ１６，Ｓ２６）。また、各ＬＳＩは、同時に“Ｄｏｗｎ”信号をデアサートすると共に“Ｈｏｌｄ”信号をアサートしてクロック周波数切り替えを完了する（ステップＳ９，Ｓ１７，Ｓ２７）。
【００８５】
以上に述べた実施形態では、例えばメモリコントローラ６０が主メモリ９をアクセスしているときにクロック周波数を切り替えると正常な動作が保証されない可能性があることを考慮して、クロック周波数切り替えのバストランザクションに対するリトライ機構を設けた。しかし、各ＬＳＩがクロック切り替えをしても誤動作しないことを保証できるのならば、リトライ機構は必ずしもなくてもよい。
【００８６】
さて本実施形態では、シリアルバス１０のマスタとなるシステム監視ＬＳＩ１１は、シリアルバス１０上に定期的にまたは不定期にバストランザクションを発行して各ＬＳＩ３〜７の周波数設定レジスタＲの値を読み出すことを可能とする。シリアルバス１０は、各ＬＳＩ３〜７の周波数設定レジスタＲの値を比較して（例えばマスタプロセッサ３の設定値を他のＬＳＩの設定値と比較して）、不一致があれば、異常を検出する。これにより、ＬＳＩ３〜７でのクロック周波数設定状態がシステム全体で整合が取れていることを保証できる。
【００８７】
以上に述べた実施形態では、マスタプロセッサ３からプロセッサバス１上に出されるターゲットＬＳＩ（メモリコントローラ６０）へのクロック周波数切り替えバストランザクション、つまりクロック周波数の切り替えを各ＬＳＩで同期して行うための、アドレスＡを対象とする“ライト”トランザクションは、周波数切り替えの方向は示さず、各ＬＳＩでは、自身が接続されるクロックコントロールバス２上の“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の組み合わせから、周波数切り替えの方向を判断するものとして説明したが、これに限るものではない。例えば、アドレスＡを対象とする“ライト”トランザクションと、アドレスＡ′を対象とする“ライト”トランザクションとの２種のバストランザクションを用意し、一方でクロック周波数を下げることを明示的に示し、他方でクロック周波数を上げることを明示的に示すようにしてもよい。
【００８８】
また、アドレスＡ（Ａ′）とは別に、アドレスＢ（Ｂ′）を対象とする“ライト”トランザクションを追加し、それぞれ異なるクロック周波数切り替え量を指定する構成、例えば周波数設定レジスタＲの値を一方では１だけ変更し、他方では２だけ変更する構成としてもよい。
【００８９】
また、“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号に加えて、クロック周波数を上げる必要があることを示す“Ｕｐ”信号を用意することも可能である。この場合、クロックコントロールバス２の構造が少し複雑になるものの、“Ｕｐ”信号だけでクロック周波数を上げる必要があることを明示的に示すことができるため、制御が簡単となる。
【００９０】
［第２の実施形態］
次に、本発明の第２の実施形態について、便宜的に図１の構成を援用して説明する。
【００９１】
本実施形態の特徴は、クロック周波数切り替えのマスタが存在せず、各ＬＳＩが同一のアルゴリズムに従ってクロック周波数切り替えを行う点にある。ここでは、各ＬＳＩ（３〜７）で使用するクロックがクロックコントロールバス２に比べて低速である、或いはクロックコントロールバス２がクロックに比べて十分高速であるものとする。
【００９２】
クロックコントロールバス２バスがクロック周波数に対して十分高速である場合、以下に詳述するように、クロックコントロールバス２上の信号をデアサートするタイミングでクロック周波数を切り替えることができる。
【００９３】
まず、クロックコントロールバス２の信号は前記第１の実施形態と同様であり、“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の２種である。但し本実施形態では、現在のクロックの状態として、“クロック周波数が高すぎる”、“現在のクロックが最適”、“クロック周波数を高くできる”の３種に加えて、“クロック周波数切り替えを禁止する”状態が新たに定義されている。
【００９４】
図１２に、本実施形態で適用される、現在のクロック状態と“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の組み合わせ出力内容との関係を示す。第１の実施形態（図２）との違いは、“クロック周波数切り替えを禁止する”状態の場合、（プロセッサ３〜５、ホスト−ＰＣＩブリッジ６、及びその他のデバイス７等の）各ＬＳＩが“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号を共にアサートする点である。
【００９５】
さて各ＬＳＩは、第１の実施形態と同様に、“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の組み合わせによって、クロック周波数を切り替える準備をする。この“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の組み合わせと、各ＬＳＩのクロック切り替え操作内容（次のクロックの状態）との関係を図１３に示す。この図１３が第１の実施形態における図３と異なるのは、“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号が共にアサートされている状態を、“クロック周波数を下げる”準備を開始する状態ではなくて、“クロック周波数切り替え準備未完了”の状態と定義し直している点である。
【００９６】
本実施形態では、クロック周波数の切り替えは最大２００クロックサイクルに１回とする。
【００９７】
以下、本実施形態における各ＬＳＩでのクロック周波数切り替えについて、図１４乃至図２３を適宜参照して説明する。
【００９８】
なお、図１４乃至図１８は各ＬＳＩのクロック周波数切り替え動作を説明するためのフローチャートである。また、図１９及び図２０はクロック周波数を下げる場合のタイミングチャートであり、図１９は周波数切り替えがタイミングを遅らせずに行われる場合、図２０は周波数切り替えのタイミングを遅らせる場合を示す。また、図２１乃至図２３はクロック周波数を上げる場合のタイミングチャートであり、図２１は周波数切り替えがタイミングを遅らせずに行われる場合、図２２は周波数切り替えのタイミングを遅らせる場合、図２３は周波数切り替えを止める場合を示す。
【００９９】
＜クロック周波数を下げる場合＞
まず、クロック周波数を下げる場合の動作は図１４、図１５のようになる。
【０１００】
クロックコントロールバス２に接続された、プロセッサ３〜５、ホスト−ＰＣＩブリッジ６、その他のデバイス７の各ＬＳＩ（以下、ＬＳＩ３〜７と称する）は、図１４に示すように当該バス２上の“Ｄｏｗｎ”信号がアサートされているのを検出した場合（図１４ステップＳ３１のＹＥＳ）、“Ｈｏｌｄ”信号がアサートされているならば、当該“Ｈｏｌｄ”信号をデアサートし（ステップＳ３２のＹＥＳ，Ｓ３３）、クロック周波数を下げる準備を始める（ステップＳ３４）。ここで、クロック周波数を下げる準備とはクロック周波数を切り替えることで誤動作する可能性のあるオペレーション（処理）の完了を待ち、且つそのようなオペレーションを新たに開始しないことである。
【０１０１】
ＬＳＩ３〜７は、クロックコントロールバス２上の“Ｄｏｗｎ”信号が予め定められたクロックサイクル数、例えば１０クロックサイクルを超えてアサートされている場合（ステップＳ３５のＹＥＳ）、クロック周波数を下げる準備が完了しているか否かを調べる（ステップＳ３６）。もし、ＬＳＩ３〜７の中に上記準備が完了していないＬＳＩが存在する場合（ステップＳ３６のＮＯ）、そのＬＳＩは、図２０の時刻ｔ１のように、“Ｈｏｌｄ”信号をアサートすることにより（ステップＳ３６ａ）、クロック周波数の切り替えが行われるのを防いだ上で、クロック周波数切り替えのための処理を再度行うようにステップＳ３１に戻る。
【０１０２】
これに対し、上記準備が完了しているならば（ステップＳ３６のＹＥＳ）、ＬＳＩ（３〜７）は、自身以外のＬＳＩにより“Ｈｏｌｄ”信号がアサートされているか否か、つまり上記準備が完了していないＬＳＩが存在するか否かを調べる（ステップＳ３７）。もし、“Ｈｏｌｄ”信号がアサートされている場合には（ステップＳ３７のＹＥＳ）、クロック周波数切り替えのための処理を再度行うようにステップＳ３１に戻る。
【０１０３】
一方、ＬＳＩ３〜７の全てで上記準備が完了し、“Ｈｏｌｄ”信号がアサートされていない場合（ステップＳ３７のＮＯ）、ＬＳＩ３〜７のうち自身が“Ｄｏｗｎ”信号をアサートしているＬＳＩは、図１９の時刻ｔ１のように、“Ｄｏｗｎ”信号をデアサートする（ステップＳ３８のＹＥＳ，Ｓ３９）。
【０１０４】
ここでは、ＬＳＩ３〜７のいずれもクロック周波数を下げる準備が完了したものとする。この場合、各ＬＳＩ３〜７はクロックコントロールバス２上の“Ｄｏｗｎ”信号がデアサートされるのを検出すると（ステップＳ４０のＹＥＳ）、予め定められたクロックサイクル数、例えば７クロックサイクル経過時（図１９の時刻ｔ２）に、“Ｈｏｌｄ”信号を一斉にアサートする（図１５ステップＳ４１〜４３）。但し、７クロックサイクルが経過する前に、他のＬＳＩによって“Ｈｏｌｄ”信号がアサートされた場合（図１５ステップＳ４１のＹＥＳ）、ＬＳＩ３〜７間でクロック切り替えの同期が取れていない可能性があるため、クロック周波数切り替えをアボートして終了する（ステップＳ４４）。
【０１０５】
さて、ＬＳＩ３〜７は、“Ｈｏｌｄ”信号を一斉にアサートできた場合（ステップＳ４３）、つまり各ＬＳＩ３〜７間で同期が取れていることを確認できた場合、予め決められたクロックサイクル数、例えば８クロックサイクルを経過すると、当該“Ｈｏｌｄ”信号を一斉にデアサートする（ステップＳ４５）。これにより、クロックコントロールバス２上の“Ｈｏｌｄ”信号は、図１９の時刻ｔ３のようにデアサートされる。但し、これ以後に“Ｈｏｌｄ”信号がアサートされたままの場合（ステップＳ４６のＹＥＳ）、当該“Ｈｏｌｄ”信号をデアサートするのが遅れているＬＳＩが存在し、クロック周波数切り替えの同期が取れていない可能性があるため、クロック周波数切り替えをアボートして終了する（ステップＳ４４）。
【０１０６】
各ＬＳＩ３〜７は、“Ｈｏｌｄ”信号を一斉にデアサートできた結果、クロックコントロールバス２上の“Ｈｏｌｄ”信号がデアサートされたのを検出した場合（ステップＳ４６のＮＯ）、つまり各ＬＳＩ３〜７間で同期が取れていることを確認できた場合、予め決められたクロックサイクル数、例えば８５クロックサイクル経過後に（ステップＳ４７）、図１９の時刻ｔ４のように、自身のクロック生成回路ＣＧ内の周波数設定レジスタＲの値Ｎを１だけ減らすことで、クロック周波数を一定量だけ下げる方向に切り替える（ステップＳ４８）。
【０１０７】
各ＬＳＩ３〜７は、クロック周波数の切り替え後、予め定められたクロックサイクル数、例えば図１９の時刻ｔ５のように５クロックサイクル経過時に（ステップＳ４９のＹＥＳ）、“Ｈｏｌｄ”信号を一斉にアサートして終了する（ステップＳ５０）。このときＬＳＩ３〜７は、５クロックサイクルが経過するまではクロックコントロールバス２上の“Ｈｏｌｄ”信号を監視しており（ステップＳ５１）、５クロックサイクル経過以前に“Ｈｏｌｄ”信号がアサートされていれば（ステップＳ５１のＹＥＳ）、クロック同期が取れておらず、クロック周波数の切り替えに失敗しているとして、例えばＯＳにエラーを通知する（ステップＳ５２）。なお、上記ステップＳ５１の処理、即ちクロック周波数切り替え後のクロック同期確認のための処理は必ずしも必要としない。
【０１０８】
このように本実施形態においては、“Ｄｏｗｎ”信号がデアサートされたことを全てのＬＳＩ３〜７で検出すると（ステップＳ４０）、その後も予め定められたタイミングで互いに同期が取れていることを確認しながら、デアサート検出時（図１９の例では時刻ｔ１）から１００クロックサイクル後（図１９の例では時刻ｔ４）にクロック周波数を切り替える。
【０１０９】
これに対し、ＬＳＩ３〜７相互の同期が取れないために、“Ｈｏｌｄ”信号がアサートされてクロック周波数切り替えが行われなかった場合（ステップＳ３７のＹＥＳ）、ステップＳ３１に戻って再度クロック周波数切り替えのための処理が行われるか、或いはクロック周波数切り替えがアボートされる。図２０は、ＬＳＩ３〜７の少なくとも１つにおいてクロック周波数を下げる準備が完了しなかったために、時刻ｔ１において“Ｈｏｌｄ”信号がアサートされて、再度クロック周波数切り替えのための処理が行われた例を示している。なお、図２０中の時刻ｔ１′，ｔ２′，ｔ４′は図１９中の時刻ｔ１，ｔ２，ｔ４に対応している。
【０１１０】
＜クロック周波数を上げる場合＞
一方、クロック周波数を上げる場合の動作は図１６〜図１８のようになる。
【０１１１】
各ＬＳＩ３〜７は、クロックコントロールバス２上の“Ｄｏｗｎ”信号及び“Ｈｏｌｄ”信号が共にアサートされていないのを検出した場合（図１６ステップＳ５３のＹＥＳ）、クロック周波数を上げる準備を始める（ステップＳ５４）。ここで、クロック周波数を上げる準備とはクロック周波数を切り替えることで誤動作する可能性のあるオペレーション（処理）の完了を待ち、且つそのようなオペレーションを新たに開始しないことである。
【０１１２】
ＬＳＩ３〜７は、クロックコントロールバス２上の“Ｄｏｗｎ”信号及び“Ｈｏｌｄ”信号が予め定められたクロックサイクル数、例えば７クロックサイクルを超えてアサートされていない場合（ステップＳ５４ａ，Ｓ５５）、クロック周波数を上げる準備が完了しているか否かを調べる（ステップＳ５６）。
【０１１３】
もし、ＬＳＩ３〜７の中にクロック周波数を上げる準備が完了していないＬＳＩが存在する場合（ステップＳ５６のＮＯ）、そのＬＳＩは、クロック周波数切り替えをアボートするか、或いは延期するかを判断する（ステップＳ５７）。この判断には、例えば上記準備の完了までの予測時間が予め定められた時間以上であるか否かの条件を用いることができる。
【０１１４】
上記準備が完了していないＬＳＩのうち、クロック周波数切り替えをアボートしたいＬＳＩは、“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号を予め定められたクロックサイクル数Ｔ、例えば図２３の時刻ｔ１〜ｔ２の期間のように、８クロックサイクル（Ｔ＝８）の間アサートして、処理を終了する（ステップＳ５８）。
【０１１５】
一方、上記準備が完了していないＬＳＩのうち、クロック周波数切り替えを延期したいＬＳＩは、“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号を、上記予め定められたクロックサイクル数Ｔを超える延期したい期間、例えば図２２の時刻ｔ１〜ｔ２の期間のように、８クロックサイクルを超える期間アサートし（ステップＳ５９）、しかる後に（つまり“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号をデアサートした後に）クロック周波数切り替えのための処理を再度行うようにステップＳ３１に戻る。
【０１１６】
これに対し、クロック周波数を上げる準備が完了しているＬＳＩは、“Ｈｏｌｄ”信号を上記Ｔの期間、例えば図２１の時刻ｔ１〜ｔ２の期間のように８クロックサイクルの間アサートする（ステップＳ６０〜Ｓ６３）。つまり図２１の例であれば、“Ｈｏｌｄ”信号を時刻ｔ１でアサートし（ステップＳ６０）、８クロックサイクル後の時刻ｔ２で一斉にデアサートする（ステップＳ６２，Ｓ６３）。この間、上記準備が完了しているＬＳＩは、当該準備が完了していないＬＳＩにより“Ｄｏｗｎ”信号がアサートされているか否かを調べる（ステップＳ６１）。
【０１１７】
もし、“Ｄｏｗｎ”信号がアサートされていることを検出した場合（ステップＳ６１のＹＥＳ）、上記準備が完了しているＬＳＩは、“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号が共に８クロックサイクルの期間、或いは８クロックサイクルを超える期間アサートされているかを調べる（ステップＳ６４）。そして、図２３の例（時刻ｔ１〜ｔ２）のように“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号が共に８クロックサイクルの期間アサートされているならば（ステップＳ６５の８サイクル）、上記準備が完了していないＬＳＩがクロック周波数切り替えをアボートすることを要求しているとして、処理を終了する。これに対し、図２２の例（時刻ｔ１〜ｔ２）のように“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号が共に８クロックサイクルを超えてアサートされているならば（ステップＳ６５の８サイクル超）、上記準備が完了していないＬＳＩがクロック周波数切り替えの延期を要求しているとして、クロック周波数切り替えのための処理を再度行うようにステップＳ３１に戻る。
【０１１８】
ここでは、ＬＳＩ３〜７のいずれもクロック周波数を上げる準備が完了し、ステップＳ６３で“Ｈｏｌｄ”信号が一斉にデアサートされたものとする。この場合、クロックコントロールバス２上の“Ｈｏｌｄ”信号は、図２１の時刻ｔ２のようにデアサートされる。但し、これ以後に“Ｈｏｌｄ”信号がアサートされたままの場合（図１７ステップＳ６６のＹＥＳ）、当該“Ｈｏｌｄ”信号をデアサートするのが遅れているＬＳＩが存在し、クロック周波数切り替えの同期が取れていない可能性があるため、クロック周波数切り替えをアボートして終了する（ステップＳ６７）。
【０１１９】
各ＬＳＩ３〜７は、クロックコントロールバス２上の“Ｈｏｌｄ”信号がデアサートされたのを検出した場合（ステップＳ６６のＮＯ）、予め決められたクロックサイクル数、例えば８０クロックサイクル経過後に（ステップＳ６８のＹＥＳ）、図２１の時刻ｔ３のように、一斉に“Ｄｏｗｎ”信号をアサートする（ステップＳ６９）。但し、これ以前に（つまり８０クロックサイクルが経過する前に）“Ｄｏｗｎ”信号がアサートされた場合（ステップＳ７０）、当該“Ｄｏｗｎ”信号をアサートするのが早いＬＳＩが存在し、クロック周波数切り替えの同期が取れていない可能性があるため、クロック周波数切り替えをアボートして終了する（ステップＳ６７）。
【０１２０】
さて各ＬＳＩ３〜７は、“Ｄｏｗｎ”信号を一斉にアサートすると（ステップＳ６９）、予め決められたクロックサイクル数、例えば図２１の時刻ｔ４のように５サイクル後に“Ｄｏｗｎ”信号を一斉にデアサートすると共に（ステップＳ７，Ｓ７３）、自身のクロック生成回路ＣＧ内の周波数設定レジスタＲの値Ｎを１だけ増やすことで、クロック周波数を一定量だけ上げる方向に切り替える（ステップＳ７４）。但し、“Ｄｏｗｎ”信号をデアサートした後にクロックコントロールバス２上の“Ｄｏｗｎ”信号がアサートされたままの場合（ステップＳ７２のＮＯ）、当該“Ｄｏｗｎ”信号をデアサートするのが遅れているＬＳＩが存在し、クロック周波数切り替えの同期が取れていない可能性があるため、クロック周波数切り替えをアボートして終了する（ステップＳ７５）。
【０１２１】
各ＬＳＩ３〜７は、クロック周波数の切り替え後、予め定められたクロックサイクル数、例えば５クロックサイクル経過時に（図１８のステップＳ７６のＹＥＳ）、“Ｈｏｌｄ”信号を一斉にアサートして終了する（ステップＳ７７）。このときＬＳＩ３〜７は、５クロックサイクルが経過するまではクロックコントロールバス２上の“Ｈｏｌｄ”信号を監視しており（ステップＳ７８）、５クロックサイクル経過以前に“Ｈｏｌｄ”信号がアサートされていれば、クロック同期が取れておらず、クロック周波数の切り替えに失敗しているとして、ＯＳにエラーを通知して終了する（ステップＳ７９）。なお、上記ステップＳ７８の処理、即ちクロック周波数切り替え後のクロック同期確認のための処理は必ずしも必要としない。
【０１２２】
このように本実施形態においては、“Ｈｏｌｄ”信号がデアサートされたことを全てのＬＳＩ３〜７で検出すると（図１７ステップＳ６６）、その後も予め定められたタイミングで互いに同期が取れていることを確認しながら、デアサート検出時（図２１の例では時刻ｔ２）から８５クロックサイクル後（図２１の例では時刻ｔ４）にクロック周波数を切り替える。
【０１２３】
これに対し、ＬＳＩ３〜７相互の同期が取れないために、“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号が共にアサートされてクロック周波数切り替えが行われなかった場合（ステップＳ５３のＮＯ）、ステップＳ３１に戻って再度クロック周波数切り替えのための処理が行われるか、或いはクロック周波数切り替えがアボートされる。図２２は、ＬＳＩ３〜７の少なくとも１つにおいてクロック周波数を上げる準備が完了しなかったために、時刻ｔ１からｔ２までの８クロックサイクルを超える期間、“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号がアサートされて、その期間後に再度クロック周波数切り替えのための処理が行われた例を示している。なお、図２２中の時刻ｔ１′〜ｔ５′は図２１中の時刻ｔ１〜ｔ５に対応している。
【０１２４】
このように、本実施形態においてＬＳＩ３〜７は、クロックコントロールバス２上の“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号のアサート、デアサートのタイミングを監視し、もしも自分と異なるタイミングでアサート、デアサートされていることを検出するとクロック周波数の切り替えに失敗しているとしてエラーを通知する。
【０１２５】
なお、システム監視ＬＳＩ１１の動作は、前記第１の実施形態と同様であるため、説明を省略する。
【０１２６】
以上に述べた第２の実施形態では、クロックコントロールバス２上の信号が“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の２種類である場合について説明したが、クロック周波数を上げる必要があることを示す“Ｕｐ”信号を追加することも可能である。この場合、クロックコントロールバス２の構造が少し複雑になるものの、“Ｕｐ”信号だけでクロック周波数を上げる必要があることを明示的に示すことができるため、制御が簡単となる。
【０１２７】
なお、本発明は、上記各実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【０１２８】
【発明の効果】
以上詳述したように本発明によれば、自身が生成するクロックの周波数を少なくともクロック制御バス（クロックコントロールバス）を用いて動的に、且つ他ＬＳＩ（デバイス）と同期して切り替えることができる。
【図面の簡単な説明】
【図１】本発明の第１の実施形態に係るクロック周波数切り替え機能を有するＬＳＩを複数備えた計算機システムの構成を示すブロック図。
【図２】同第１の実施形態で適用される現在のクロック状態と“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の組み合わせ出力内容との関係を示す図。
【図３】同第１の実施形態で適用される“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の組み合わせと、各ＬＳＩのクロック切り替え操作内容（次のクロックの状態）との関係を示す図。
【図４】同第１の実施形態におけるマスタプロセッサ３のクロック周波数切り替え動作を説明するためのフローチャート。
【図５】同第１の実施形態におけるターゲットＬＳＩ（ここではホスト−ＰＣＩブリッジ６のメモリコントローラ６０）のクロック周波数切り替え動作を説明するためのフローチャート。
【図６】同第１の実施形態におけるマスタプロセッサ３とターゲットＬＳＩ以外のＬＳＩのクロック周波数切り替え動作を説明するためのフローチャート。
【図７】同第１の実施形態においてクロック周波数切り替えのためのバストランザクションに対してリトライが発生しない場合のタイミングチャート。
【図８】同第１の実施形態においてターゲットＬＳＩ（メモリコントローラ６０）がリトライする場合のタイミングチャート。
【図９】同第１の実施形態においてマスタプロセッサ３とターゲットＬＳＩ以外のＬＳＩがターゲットＬＳＩ（メモリコントローラ６０）によりリトライさせる場合のタイミングチャート。
【図１０】同第１の実施形態においてクロック周波数切り替えのためのバストランザクションに対してリトライが発生しない場合のタイミングチャート。
【図１１】同第１の実施形態においてターゲットＬＳＩ（メモリコントローラ６０）がリトライする場合のタイミングチャート。
【図１２】本発明の第２の実施形態で適用される現在のクロック状態と“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の組み合わせ出力内容との関係を示す図。
【図１３】同第２の実施形態で適用される“Ｈｏｌｄ”信号及び“Ｄｏｗｎ”信号の組み合わせと、各ＬＳＩのクロック切り替え操作内容（次のクロックの状態）との関係を示す図。
【図１４】同第２の実施形態における各ＬＳＩのクロック周波数切り替え動作を説明するためのフローチャートの一部を示す図。
【図１５】同第２の実施形態における各ＬＳＩのクロック周波数切り替え動作を説明するためのフローチャートの他の一部を示す図。
【図１６】同第２の実施形態における各ＬＳＩのクロック周波数切り替え動作を説明するためのフローチャートの他の一部を示す図。
【図１７】同第２の実施形態における各ＬＳＩのクロック周波数切り替え動作を説明するためのフローチャートの他の一部を示す図。
【図１８】同第２の実施形態における各ＬＳＩのクロック周波数切り替え動作を説明するためのフローチャートの残りを示す図。
【図１９】同第２の実施形態においてクロック周波数を下げるためのクロック周波数切り替えがタイミングを遅らせずに行われる場合のタイミングチャート。
【図２０】同第２の実施形態においてクロック周波数を下げるためのクロック周波数切り替えがタイミングを遅らせて行われる場合のタイミングチャート。
【図２１】同第２の実施形態においてクロック周波数を上げるためのクロック周波数切り替えがタイミングを遅らせずに行われる場合のタイミングチャート。
【図２２】同第２の実施形態においてクロック周波数を上げるためのクロック周波数切り替えがタイミングを遅らせて行われる場合のタイミングチャート。
【図２３】同第２の実施形態においてクロック周波数を上げるためのクロック周波数切り替えが止められる場合のタイミングチャート。
【符号の説明】
１…プロセッサバス（システムバス）
２…クロックコントロールバス（クロック制御バス）
３…マスタプロセッサ（ＬＳＩ）
４，５…プロセッサ（ＬＳＩ）
６…ホスト−ＰＣＩブリッジ（ＬＳＩ）
７…その他のデバイス（ＬＳＩ）
８…ＰＣＩバス
９…主メモリ
１０…シリアルバス（システム監視バス）
１１…システム監視ＬＳＩ
６０…メモリコントローラ
ＣＧ…クロック生成回路
Ｒ…周波数設定レジスタ
【図１】
0003906015.tif 000002
【図２】
0003906015.tif 000003
【図３】
0003906015.tif 000004
【図４】
0003906015.tif 000005
【図５】
0003906015.tif 000006
【図６】
0003906015.tif 000007
【図７】
0003906015.tif 000008
【図８】
0003906015.tif 000009
【図９】
0003906015.tif 000010
【図１０】
0003906015.tif 000011
【図１１】
0003906015.tif 000012
【図１２】
0003906015.tif 000013
【図１３】
0003906015.tif 000014
【図１４】
0003906015.tif 000015
【図１５】
0003906015.tif 000016
【図１６】
0003906015.tif 000017
【図１７】
0003906015.tif 000018
【図１８】
0003906015.tif 000019
【図１９】
0003906015.tif 000020
【図２０】
0003906015.tif 000021
【図２１】
0003906015.tif 000022
【図２２】
0003906015.tif 000023
【図２３】
0003906015.tif 000024