(57)【要約】      （修正有）【課題】所望の周波数のクロックを即座に生成することを可能にするクロック生成回路を提供する。【解決手段】半導体装置１００において、クロックコントロールモジュール１０は、ＰＬＬ回路１および分周器２、３を具備する。少なくとも分周器２は、ソースクロックのパルス列の一部をマスクする処理を行うことによって、当該ソースクロックよりも周波数の低い分周クロックを生成する機能を有するパルスマスク型分周器であり、コントローラ６から制御される。【選択図】図１
2019057281.tif 000002
【特許請求の範囲】
【請求項１】
ソースクロックのパルス列の一部をマスクする処理を行うことによって当該ソースクロックよりも周波数の低い分周クロックを生成することが可能な分周器を具備する、クロック生成回路。
【請求項２】
前記分周器は、前記ソースクロックのパルス列の一部をマスクするビット列のパターンを使用することによって、当該ソースクロックよりも周波数の低い分周クロックを生成する、請求項１に記載のクロック生成回路。
【請求項３】
前記分周器は、前記ビット列のパターンを切り替えることによって、生成する分周クロックの周波数を切り替える、請求項２に記載のクロック生成回路。
【請求項４】
前記分周器は、所定のハードウェアから制御されることによって、前記ビット列のパターンを切り替え、生成する分周クロックの周波数を切り替える、請求項２又は３に記載のクロック生成回路。
【請求項５】
前記分周器は、前記ソースクロックのパルス列の一部をマスクするビット列のパターンとして複数種のビット列のパターンを使用し、当該複数種のビット列のパターンのうちの１つを選択的に使用することによって、周波数の異なる複数種の分周クロックのうちの１つを選択的に生成する、請求項１乃至４のいずれか１項に記載のクロック生成回路。
【請求項６】
ある対象物の状態変化に応じて、前記分周器が生成する分周クロックの周波数を変化させるハードウェアとしてのコントローラをさらに具備する、請求項１乃至５のいずれか１項に記載のクロック生成回路。
【請求項７】
前記コントローラは、１つ又は複数のトランザクションの発生の有無に応じて、前記分周器が生成する分周クロックの周波数を変化させる、請求項６に記載のクロック生成回路。
【請求項８】
前記コントローラは、所定の装置にデータを送る記憶手段の空き容量に応じて、前記分周器が生成する分周クロックの周波数を変化させる、請求項６又は７に記載のクロック生成回路。
【請求項９】
前記コントローラは、所定の場所の温度に応じて、前記分周器が生成する分周クロックの周波数を変化させる、請求項６乃至８のいずれか１項に記載のクロック生成回路。
【請求項１０】
前記コントローラは、動作モードの遷移に応じて、前記分周器が生成する分周クロックの周波数を変化させる、請求項６乃至９のいずれか１項に記載のクロック生成回路。
【請求項１１】
１つ又は複数のトランザクションの発生の有無を示す信号を入力し、当該信号のうちトランザクション発生無しの期間が所定期間に満たない信号を、トランザクション発生有りを示す信号として出力するフィルター回路をさらに備え、当該フィルター回路の出力に応じて、生成する分周クロックの周波数を変化させる、請求項６に記載のクロック生成回路。
【請求項１２】
トランザクション発生無しの期間を定期的に計測して統計を取り、当該統計の結果に応じて、前記フィルター回路で使用される前記所定期間を動的に変化させる補正回路を備えている、請求項１１に記載のクロック生成回路。
【請求項１３】
ソースクロックを分周器に入力し、
前記分周器により、前記ソースクロックのパルス列の一部をマスクする処理を行うことによって当該ソースクロックよりも周波数の低い分周クロックを生成する
ことを含む、クロック生成方法。
【請求項１４】
前記分周器により、前記ソースクロックのパルス列の一部をマスクするビット列のパターンを使用することによって、当該ソースクロックよりも周波数の低い分周クロックを生成する
ことを含む、請求項１３に記載のクロック生成方法。
【請求項１５】
前記分周器により、前記ビット列のパターンを切り替えることによって、生成する分周クロックの周波数を切り替える
ことを含む、請求項１４に記載のクロック生成方法。
【請求項１６】
前記分周器により、前記ソースクロックのパルス列の一部をマスクする複数種のビット列のパターンを使用し、当該複数種のビット列のパターンのうちの１つを選択的に使用することによって、周波数の異なる複数種の分周クロックのうちの１つを選択的に生成する
ことを含む、請求項１３乃至１５のいずれか１項に記載のクロック生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、クロック生成回路およびクロック生成方法に関する。
【背景技術】
【０００２】
コンピュータや半導体などの回路の動作時の電力を削減するために、クロックを必要十分な周波数に制御する方法は知られている。一定以上の性能を必要とする処理や負荷の高い処理においては、機能を損なわないようにクロック周波数を上げる。逆に、性能を必要としない処理や負荷の低い処理の場合には、クロック周波数を下げ動作時の電力を削減する。
【０００３】
また、回路の許容する温度や最大電流量などの動作条件がある場合、その動作条件の範囲内で動作させるために、クロック周波数を下げる制御が行われる。しかし、この場合には性能は犠牲となり、本来提供すべき機能を満たすことが難しくなる。
【０００４】
一般的に、クロック周波数の制御には、予め複数のクロックを生成しておき、そのクロックを切り替える方法や、ＰＬＬ（Phase Locked Loop）などのクロック発生回路や複数の分周比をとることができる分周回路の設定変更制御を行う方法が取られる。この場合、クロックの切り替え時間や回路の面積オーバーヘッドなどの問題が出てくる。
【０００５】
クロック切り替えに時間がかかってしまうと、最適なクロック周波数での動作を行うことができない。例えば、低周波数動作が可能な期間に周波数の高いクロックで動作し、無駄な電力を消費してしまう。また、逆に、高い周波数で動作することが要求される期間に周波数の低いクロックが供給され、性能の低下を招いてしまう。
【０００６】
クロック生成回路は、他に比べて動作率の高いブロックであり、面積オーバーヘッドが生じた場合、本来、目的とする電力の削減が達成できない要因となり得る。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−３３０５６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
所望の周波数のクロックを即座に生成することが可能なクロック生成回路およびクロック生成方法を提供する。
【課題を解決するための手段】
【０００９】
実施形態のクロック生成回路は、ソースクロックのパルス列の一部をマスクする処理を行うことによって当該ソースクロックよりも周波数の低い分周クロックを生成することが可能な分周器を具備する。
【図面の簡単な説明】
【００１０】
【図１】各実施形態に係る半導体装置の基本構成の一例を示す概念図。
【図２】パルスマスク型分周器の回路構成の一例を示す回路図。
【図３】図２中に示されるクロックパルスパターン生成部が所定の記憶手段に記憶している、複数種のクロックパルスパターンが定義されたテーブルの一例を示す図。
【図４】各種の分周クロックとソースクロックとの関係を示すタイミングチャート。
【図５】ソースクロックに対するマスク数の設定およびイネーブル信号のオン／オフに応じてマスク処理された分周クロックが形成される動作の一例を示すタイミングチャート。
【図６】第１の実施形態に係る半導体装置の構成の一例を示す概念図。
【図７】各バスマスタのトランザクションの状態に応じてクロックの周波数が変化する動作の一例を示すタイムチャート。
【図８】第２の実施形態において監視の対象となるＦＩＦＯ等を示す構成の一例を示す概念図。
【図９Ａ】ＦＩＦＯのキューイング状態に応じてクロックの周波数が変化する動作の一例を示すタイムチャート。
【図９Ｂ】ＦＩＦＯのキューイング状態に応じてクロックの周波数が変化する動作の別の具体例を示すタイムチャート。
【図１０】第３の実施形態の制御による動作の一例を示すフローチャート。
【図１１】第３の実施形態による制御と一般的な技術による制御の違いで実現される温度変化および性能変化を対比させて示す概念図。
【図１２】第４の実施形態において監視の対象となる動作モードの遷移の一例を示す概念図。
【図１３】図７に示されるタイムチャートをより詳細に説明するためのタイムチャート。
【図１４】第５の実施形態によるパルスマスク型分周器の回路構成の一例を示す回路図。
【図１５】マスクフィルター生成部の構成の一例を示す図。
【図１６】マスクフィルター生成部の動作の一例を説明するためのタイムチャート。
【図１７】第６の実施形態においてパルスマスク型分周器に関連して設けられるマスクピリオド自動補正回路の構成の一例を示す回路図。
【図１８】マスクピリオド自動補正回路の動作（インターバルタイマカウンタを使用した場合）の一例を示すフローチャート。
【図１９】マスクピリオド自動補正回路の動作（バスビジーカウントカウンタを使用した場合）の一例を示すフローチャート。
【発明を実施するための形態】
【００１１】
以下、図面を参照して実施の形態について説明する。
【００１２】
（各実施形態に共通）
最初に、各実施形態に共通する事項について説明する。
【００１３】
各実施形態に示すクロック生成回路は、コンピュータや半導体をはじめとするクロックで動作する回路に適用されるものであり、例えば、ダイナミック電力削減のための技術であるＤＦＳ（Dynamic Frequency Scaling）制御や、各種条件下での動作を実現するにあたり、それぞれのシステム、ユースケースに合わせた最適なクロックパルスを発生することを可能にする。具体的には、特定の機能を有する分周器（後述するパルスマスク型分周器）を用い、ソースクロックのパルス列の一部をマスクする処理を行うことによって、当該ソースクロックよりも周波数の低い分周クロックを生成することを可能にする。当該マスク処理は、最小で１クロックサイクル単位（１パルス単位）から行うことが可能であり、より細やかな周波数制御の実現を可能にする。
【００１４】
図１は、各実施形態に係る半導体装置の基本構成の一例を示す概念図である。
【００１５】
図１に示されるように、半導体装置１００の中には、クロックコントロールモジュール１０、バスブロックＢＢ、ブロックＢ０，Ｂ１，Ｂ２，Ｂ３を含む複数の機能ブロックなどが配置されている。
【００１６】
クロックコントロールモジュール１０は、各部に供給すべきクロックを生成するクロック生成回路を有するものである。ブロックＢ０，Ｂ１，Ｂ２，Ｂ３は、それぞれ、クロックコントロールモジュール１０から供給されるクロックを用いて動作する機能ブロックである。バスブロックＢＢは、クロックコントロールモジュール１０から供給されるクロックを用いて動作するバスを含む。
【００１７】
この半導体装置１００には、必要に応じて、ある対象物の何らかの状態を検知するアクティビティモニタ（状態監視回路）が備えられる。例えば、図１に示されるように、バスブロックＢＢにアクティビティモニタＡＢが備えられていてもよいし、ブロックＢ０，Ｂ１，Ｂ２，Ｂ３の全てもしくはその一部に（例えば、ブロックＢ０やブロックＢ２に）、アクティビティモニタ（例えば、アクティビティモニタＡ０やアクティビティモニタＡ２）が備えられていてもよい。
【００１８】
アクティビティモニタＡＢは、例えば、バスブロックＢＢに対するブロックＢ０，Ｂ１，Ｂ２，Ｂ３のそれぞれのバスアクセス（トランザクション）の発生の有無などを監視するように構成されていてもよい。
【００１９】
アクティビティモニタＡ０あるいはアクティビティモニタＡ２は、例えば、所定の装置にデータを送るＦＩＦＯ等の記憶手段の空き容量を監視するように構成されていてもよいし、所定の場所の温度を監視するように構成されていてもよいし、消費電力の異なる複数の動作モード間の状態遷移を監視するように構成されていてもよい。
【００２０】
クロックコントロールモジュール１０には、ＰＬＬ回路１、分周器２，３、クロックゲーティング回路４、レジスタ５、コントローラ（制御回路）６などが備えられている。但し、クロックコントロールモジュール１０の構成要素は、これらに限定されるものではない。一部の構成要素、例えば分周器３の設置を省略するなど、適宜、構成を変更してもよい。
【００２１】
ＰＬＬ回路１は、位相の調整されたクロック信号を出力する。分周器２，３は、ＰＬＬ回路１から供給されるクロック信号（ソースクロック）に対して周波数を低下させたクロック信号を出力する。クロックゲーティング回路４は、分周器２，３から供給されるクロック信号に対してクロックゲーティングを施す。クロックゲーティングの施されたクロック信号は、ブロックＢ０，Ｂ１，Ｂ２，Ｂ３にそれぞれ供給される。
【００２２】
分周器２，３のうち、少なくとも分周器２は、ソースクロックのパルス列の一部をマスクする処理を行うことによって、当該ソースクロックよりも周波数の低い分周クロックを生成する機能を有するパルスマスク型分周器である。
【００２３】
具体的には、パルスマスク型分周器２は、ソースクロックのパルス列の一部をマスクするビット列のパターン（以下、「クロックパルスパターン」と称す。）を使用することにより、当該ソースクロックよりも周波数の低い分周クロックを生成する機能を有する。クロックパルスパターンは、ソースクロックのパルス列をどのタイミングでマスクし、どのタイミングで出力するかを定義している。
【００２４】
また、パルスマスク型分周器２は、所定のハードウェア（例えばコントローラ６）から制御されることによって、クロックパルスパターンを切り替え、生成する分周クロックの周波数を切り替える機能を有する。より具体的には、パルスマスク型分周器２は、予め用意されている複数種のクロックパルスパターンのうちの１つを選択的に使用することによって、周波数の異なる複数種の分周クロックのうちの１つを選択的に生成する機能を有する。
【００２５】
レジスタ５は、コントローラ６がパルスマスク型分周器２を制御するために使用する各種の情報を記憶する。
【００２６】
コントローラ６は、パルスマスク型分周器２に制御用の信号を送ることにより、パルスマスク型分周器２を制御する。このコントローラ６は、例えば、半導体装置１００に備えられるアクティビティモニタ（例えば、アクティビティモニタＡＢ，Ａ０，Ａ２等）から得られる所定の対象物の状態に応じて、パルスマスク型分周器２が生成する分周クロックの周波数を変化させることができる。
【００２７】
パルスマスク型分周器２から出力されたクロックは、必要に応じて分周器３やクロックゲーティング回路４などを経由した後、クロックコントロールモジュール１０から出力され、個々のブロックへと供給される。
【００２８】
図２は、パルスマスク型分周器２の回路構成の一例を示す回路図である。
【００２９】
パルスマスク型分周器２には、クロックパルスパターン生成部１１、カウンタ１２、クロックゲーティング部１３などが備えられている。また、パルスマスク型分周器２には、ＰＬＬ１側から供給されるソースクロックを入力する端子、コントローラ６から供給される制御用の各信号（後述するパルスマスク数の設定を指示する信号やイネーブル信号など）を入力する端子、生成される分周クロックを出力する端子などが備えられている。
【００３０】
クロックパルスパターン生成部１１は、予め所定の記憶手段に記憶されている複数種のクロックパルスパターンのうちの該当するクロックパルスパターンを、コントローラ６により指定されるパルスマスク数に応じて選択し、選択したクロックパルスパターンのビット列を出力する。クロックパルスパターンのビット列は、例えば、「０」により所定のパルスをマスクすることを示し、「１」により所定のパルスをマスクしないことを示す。
【００３１】
カウンタ１２は、ソースクロックのパルスをカウントするとともに、イネーブル信号のオン／オフを検知する。カウンタ１２で得られた情報はクロックパルスパターン生成部１１に伝えられる。これにより、クロックパルスパターン生成部１１は、イネーブル信号に応じてクロックパルスパターンのビット列出力を開始したり、ソースクロックに同期してクロックパルスパターンのビット列を出力したりすることができる。すなわち、カウンタ１２は、クロックパルスパターン生成部１１から１つのクロックパルスパターンのビット列を一定のサイクルでクロックゲーティング部１３に送出させる。
【００３２】
クロックゲーティング部１３は、ソースクロックを入力するとともに、クロックパルスパターン生成部１１から送られてきたクロックパルスパターンのビット列を入力し、クロックパルスパターンのビット列に従ってソースクロックのパルス列の一部をマスクして出力する。すなわち、クロックゲーティング部１３は、クロックパルスパターンのビット列に従って、ソースクロックをパルス毎にマスクする処理とマスクせずにそのまま出力させる処理とを実施する。この結果、クロックゲーティング部１３からは、ソースクロックにマスク処理が施された分周クロックあるいはマスク処理が施されていないクロックが出力される。
【００３３】
図２に示されるパルスマスク型分周器２は、既存のクロックラインに、所定のゲーティング機構を入れるだけで実現できるため、レイアウト・タイミング設計や回路実装が容易である。
【００３４】
なお、図２に示したパルスマスク型分周器２の構成は、これに限定されるものではない。同じ機能を実現できるのであれば、別の構成を採用してもよい。
【００３５】
図３は、図２中に示されるクロックパルスパターン生成部１１が所定の記憶手段に記憶している、複数種のクロックパルスパターンが定義されたテーブルの一例を示す図である。
【００３６】
図３の例では、ソースクロックにおける３２個のクロックサイクル（３２個のパルス）を１つの単位としている。但し、クロックパルスパターンの単位はこの例に限定されるものではない。単位となるクロックサイクル（パルス）の数としては、３２個ではなく、１６個や６４個など、システムやユースケースに応じて任意の数を採用してもよい。
【００３７】
図３には、パルスマスク数に応じた３２通りのクロックパルスパターンの例が示されている。
【００３８】
各クロックパルスパターンは、３２個のクロックサイクルのうちのどのパルスをマスクするか、また、どのパルスをマスクせずに出力するかを定義している。「０」は、パルスをマスクすることを表し、「１」は、パルスをマスクせずに出力することを表している。
【００３９】
図３に示されるテーブルは、製品の仕様や制約に合わせて所望の複数のマスクパターンを定義することが可能である。
【００４０】
図４は、各種の分周クロックとソースクロックとの関係を示すタイミングチャートである。
【００４１】
図４には、図３のテーブルに示される複数種のクロックパルスパターンにそれぞれ対応するクロックの例が示されている。具体的には、パルスマスク数が０のソースクロックの例と、パルスマスク数に応じた３１通りの分周クロックの例とが示されている。
【００４２】
図４の分周クロックの例に示されるように、図３のクロックパルスパターンの「０」となっているタイミングでは、ソースクロックのパルスがマスクされ、図３のクロックパルスパターンの「１」となっているタイミングでは、ソースクロックのパルスがマスクされずに出力されている。
【００４３】
図４の例からわかるように、コントローラ６により指定されるマスク数が増えるほど、間引きされるパルスの数が増え、クロック周波数が低下することになる。
【００４４】
図５は、ソースクロックに対するマスク数の設定およびイネーブル信号のオン／オフに応じてマスク処理された分周クロックが形成される動作の一例を示すタイミングチャートである。
【００４５】
図５の例では、マスク数が２４の場合を示す。マスク数２４が設定された後、イネーブル信号がオンの状態になると、即座に（例えば数サイクル後に）、設定されたマスク数に対応するクロックパルスパターンのビット列によって、一定期間毎に、ソースクロックのパルス列が部分的にマスクされる。この結果、ソースクロックと同じ周波数だった分周クロックは、周波数が下げられた状態になる。その後、イネーブル信号がオフの状態になると、即座に（例えば数サイクル後に）、当該マスク処理が解除され、分周クロックの周波数が元の状態に戻る。
【００４６】
なお、分周クロックを形成する動作は、図５の例に限定されるものではない。例えば、イネーブル信号は必ずしも必要とされるものではなく、イネーブル信号を用いずに同様の動作を実現することも可能である。この場合、イネーブル信号がオン状態になった時点を基準にマスク数の切り替えを行う代わりに、マスク数が設定された時点を基準にマスク数の切り替えるようにしてもよい。
【００４７】
上述したパルスマスク型分周器２は、図１の半導体装置１００の例に限らず、あらゆる種類の装置やシステムへの組み込みを容易に行えるものである。
【００４８】
また、ハードウェアからパルスマスク型分周器２を制御する構成を採用しているため、パルスマスク型分周器２は、新たなクロック周波数を指定する信号を受けると即座に、指定された周波数を生成することができる。周波数の迅速な切り替えが可能になるため、周波数の切り替わり期間における消費電力のロスを低減することができる。また、新たなクロック周波数を指定する信号を受けた直後から、指定された周波数を即座に生成することができるため、所望の性能をすぐに発揮させることができる。
【００４９】
また、クロックゲーティングなどのダイナミック制御は、１サイクルで制御信号が有効になる必要があるが、パルスマスク型分周器２を用いた制御では、必要とされる性能に応じたクロックパルスパターンを任意に設定することができ、必ずしも１サイクルでの制御を必要とはしない。
【００５０】
また、それぞれのシステム、ユースケースに合わせて、上記ハードウェアによる制御に加え、ソフトウェアによる制御を加えることも可能である。
【００５１】
また、クロックパルスパターンは任意に選択することができ、それぞれのユースケースに応じて、どのクロックパルスパターンを選択するのかを予め設定しておくことで、制御をより容易にすることができる。
【００５２】
（第１の実施形態）
次に、第１の実施形態について説明する。  
第１の実施形態では、図６および図７を参照して説明する。
【００５３】
図６は、第１の実施形態に係る半導体装置の構成の一例を示す概念図である。なお、図１と共通する要素には同一の符号を付し、重複する説明を省略する。
【００５４】
図６に示されるように、バスブロックＢＢにはアクティビティモニタＡＢが備えられている。アクティビティモニタＡＢは、例えば、バスブロックＢＢに対するブロックＢ０，Ｂ１，Ｂ２，Ｂ３からの各トランザクションの発生の有無を監視する。なお、ブロックＢ０，Ｂ１，Ｂ２，Ｂ３はそれぞれバスマスタ（マスタモジュール）として動作し、バスブロックＢＢは上記バスマスタとスレーブ（図示せず）との間でやり取りされる信号を伝達するバス本体として動作する。すなわち、アクティビティモニタＡＢは、バスマスタとスレーブとの間でのやり取りされる信号を監視して各トランザクションの発生の有無を判定する。以下では、ブロックＢ０，Ｂ１，Ｂ２，Ｂ３をそれぞれMaster0，Master1，Master2，Master3と称す場合がある。アクティビティモニタＡＢにより監視される情報は、常時、コントローラ６に伝えられる。
【００５５】
コントローラ６は、アクティビティモニタＡＢから伝えられる情報に示される各トランザクションの発生の有無に応じて、パルスマスク型分周器２がマスクするパルスのマスク数を変化させ、パルスマスク型分周器２が生成する分周クロックの周波数を変化させる。ここでは、コントローラ６は、例えばMaster0，Master1，Master2を監視の対象としているものとする。
【００５６】
レジスタ５には、どのブロックのトランザクションの状態をＤＦＳ制御に用いるかを指定する情報などが記憶される。ここでは、例えばMaster0，Master1，Master2の各トランザクションの状態をＤＦＳ制御に用いることを指定する情報が記憶されるものとする。このレジスタ５に記憶された情報は、コントローラ６により参照される。
【００５７】
図７は、各バスマスタのトランザクションの状態に応じてクロックの周波数が変化する動作の一例を示すタイムチャートである。
【００５８】
ここでは、Master0，Master1，Master2の各トランザクションの状態に応じてクロックの周波数が変化する例を示す。
【００５９】
図７に示されるように、例えば、Master0，Master1，Master2のいずれにもトランザクションが発生していないアイドル状態の期間（ＩＤＬＥ期間）においては、データ転送を急ぐ必要がないことから、通常の動作よりも低速な低速動作が実施される。これにより電力消費が抑えられる。
【００６０】
コントローラ６は、このような動作を実現するため、予め定められたパルスマスク数の設定をパルスマスク型分周器２に対して指示する信号を送るとともに、イネーブル信号をパルスマスク型分周器２に送る。これにより、パルスマスク型分周器２からは、間引きされたパルスの数が多いクロックが生成される。
【００６１】
一方、Master0，Master1，Master2の少なくともいずれかにトランザクションが発生しているビジー状態の期間（バスアクセス期間）においては、データ転送を急ぐ必要があることから、高速動作もしくは通常動作が実施される。なお、トランザクションが発生しているバスマスタの数に応じて段階的に動作速度（周波数）が変わるようにしてもよい。
【００６２】
コントローラ６は、このような動作を実現するため、パルスマスク数を０とする設定もしくはＩＤＬＥ期間のときよりも少ないパルスマスク数の設定をパルスマスク型分周器２に対して指示する信号を送るとともに、イネーブル信号をパルスマスク型分周器２に送る。これにより、パルスマスク型分周器２からは、パルスが間引きされていないクロックもしくは間引きされたパルスの数の少ないクロックが生成される。
【００６３】
このような制御により、ソフトウェアでは容易に実現できない細かい粒度であるトランザクション単位でのＤＦＳ制御を実現することが可能となる。また、トランザクションが発生していないＩＤＬＥ期間がある毎に、低速動作への切り替えを迅速に行えるため、電力削減効果が大きい。また、バスのステータスを示す信号を利用して制御を容易に実現することができるため、実装が容易である。
【００６４】
次に、いくつか具体例を挙げて説明する。
【００６５】
・制御例（１ａ）
アイドル（ＩＤＬＥ）の状態のバスマスタの数に応じてパルスマスク数を変える制御例について説明する。
【００６６】
なお、この制御を実施するために必要な情報（各状態に対応するパルスマスク数を示す情報など）は、コントローラ６が参照できるようにレジスタ５内に記憶される。
【００６７】
ここでは、ＩＤＬＥの状態のバスマスタの数が多いほど、パルスマスク数を多くし、クロック周波数を下げるものとする。
【００６８】
Master0，Master1，Master2のすべてがＩＤＬＥの状態にある期間においては、コントローラ６は、３２個のパルス中の例えば２４個のパルスをマスクするための制御を実施する。
【００６９】
また、Master0とMaster1がＩＤＬＥの状態にあり、Master2のトランザクションが発生している期間においては、コントローラ６は、３２個のパルス中の例えば１２個のパルスをマスクするための制御を実施する。
【００７０】
また、Master0とMaster1のトランザクションが発生しており、Master2がＩＤＬＥの状態にある期間においては、コントローラ６は、３２個のパルス中の例えば４個のパルスをマスクするための制御を実施する。
【００７１】
・制御例（１ｂ）
バスアクセス中の各バスマスタに対し、例えば必要とされる性能の程度などに応じて重み付けを行い、それらの合計に応じてパルスマスク数を変える制御例について説明する。
【００７２】
なお、この制御を実施するために必要な情報（各バスマスタの重みを示す情報や、合計値に応じたパルスマスク数を示す情報など）は、コントローラ６が参照できるようにレジスタ５内に記憶される。
【００７３】
ここでは、Master0の重みを２、Ｍａｔｅｒ１の重みを１、Master2の重みを６とし、「（バスアクセス中のバスマスタ）×（重み）」の合計が多いほど、パルスマスク数を少なくし、クロック周波数を上げるものとする。なお、（バスアクセス中のバスマスタ）の値は、例えばバスマスタ毎に１とする。
【００７４】
Master0，Master1，Master2のすべてがＩＤＬＥの状態にある期間においては、合計が０となる。この場合、コントローラ６は、３２個のパルス中の例えば２４個のパルスをマスクするための制御を実施する。
【００７５】
また、Master0とMaster1がＩＤＬＥの状態にあり、Master2のトランザクションが発生している期間においては、合計が６となる。この場合、コントローラ６は、３２個のパルス中、４個のパルスをマスクするための制御を実施する。
【００７６】
また、Master0とMaster1のトランザクションが発生しており、Master2がＩＤＬＥの状態にある期間においては、合計が３となる。この場合、コントローラ６は、３２個のパルス中、１２個のパルスをマスクするための制御を実施する。
【００７７】
・制御例（１ｃ）
上述した制御例（１ｂ）において、特定のバスマスタのトランザクション、例えばＭａｓｔｅｒ２のトランザクションを無視する制御例について説明する。
【００７８】
なお、この制御を実施するために必要な情報（Master2のトランザクションを無視することを示す情報など）は、コントローラ６が参照できるようにレジスタ５内に記憶される。
【００７９】
Master0，Master1，Master2のすべてがＩＤＬＥの状態にある期間においては、合計が０となる。この場合、コントローラ６は、３２個のパルス中の例えば２４個のパルスをマスクするための制御を実施する。
【００８０】
Master0とMaster1がＩＤＬＥの状態にあり、Master2のトランザクションが発生している期間においては、合計が０となる。この場合、コントローラ６は、３２個のパルス中、２４個のパルスをマスクするための制御を実施する。
【００８１】
この第１の実施形態によれば、トランザクションの発生状況に応じて、ハードウェアでパルスマスク型分周器２を制御する構成により、バストランザクション単位での周波数の切り替えを行えるので、より粒度の細かい制御を実現でき、省電力効果を高めることもできる。
【００８２】
また、バストランザクションの監視は、既存のアクティビティモニタ回路における既存の信号を利用して行えるため、汎用性が高く、複雑な回路を改めて実装する必要がなく、簡単な回路実装で済み、また、既存の回路への組み込みが容易である。さらに、製品ごとのアーキテクチャ統一が容易である。
【００８３】
また、ソフトウェアを介さずにハードウェアで自動制御を行うため、ソフトウェア開発のための工数を削減することができる。さらに、ソフトウェアによる制御に比べ、より細かい粒度で制御を行えるので、低消費電力動作が可能となる。
【００８４】
また、レイアウトの工程におけるタイミング設計が容易であり、面積増大や性能低下などのリスクが低い。
【００８５】
また、閾値や重み付け、切り替える周波数が可変であるため、多種の製品に適用することが容易である。
【００８６】
（第２の実施形態）
次に、第２の実施形態について説明する。  
第２の実施形態では、前述の図１を参照するとともに、図８、図９Ａおよび図９Ｂを参照して説明する。
【００８７】
第２の実施形態において監視の対象となるのは、ＤＲＡＭ等からディスプレイ等へデータが供給される経路の途中にあるＦＩＦＯ等の記憶手段（以下「ＦＩＦＯ」と略称する）である。
【００８８】
図８は、第２の実施形態において監視の対象となるＦＩＦＯ等を示す構成の一例を示す概念図である。
【００８９】
なお、図８に示される構成は、半導体装置１００内に設けられていてもよいし、その一部が半導体装置１００外に設けられていてもよい。
【００９０】
図８に示されるように、ＤＲＡＭ等からディスプレイへデータが供給される経路の途中には、ディスプレイインタフェースコントローラ２１、ＦＩＦＯ２２、ディスプレイインタフェース２３がある。ＦＩＦＯ２２は、ディスプレイインタフェースコントローラ２１から供給されるデータをディスプレイインタフェース２３へと順次送り出す。
【００９１】
ＦＩＦＯ２２は、状況によってキューイングに空きが多いときもあれば、空きが少ないときもある。このようなＦＩＦＯ２２のキューイング状態を示す情報は、例えば、半導体装置１００内の所定のブロックのアクティビティモニタを通じてクロックコントロールモジュール１０のコントローラ６へ伝えられる。但し、情報を伝送する経路はこの例に限定されるものではない。例えば、別の手段を通じて、ＦＩＦＯ２２のキューイング状態を示す情報がコントローラ６へ伝えられるようにしてもよい。
【００９２】
ここでは、例えば、ＦＩＦＯ２２のキューイングの空き容量が、半導体装置１００内のブロックＢ０のアクティビティモニタＡ０により監視され、その監視結果がコントローラ６へ伝えられるものとする。
【００９３】
コントローラ６は、アクティビティモニタＡ０から伝えられる情報に示されるＦＩＦＯ２２のキューイングの空き容量に応じて、パルスマスク型分周器２がマスクするパルスのマスク数を変化させ、パルスマスク型分周器２が生成する分周クロックの周波数を変化させる。
【００９４】
レジスタ５には、低速動作に移行するタイミングや高速動作（通常動作）に移行するタイミングを決める閾値などの情報が記憶される。このレジスタ５に記憶された情報は、コントローラ６により参照される。
【００９５】
図９Ａは、ＦＩＦＯ２２のキューイング状態に応じてクロックの周波数が変化する動作の一例を示すタイムチャートである。
【００９６】
ここでは、ＦＩＦＯ２２のキューイングの空き容量に応じてクロックの周波数が変化する例を示す。
【００９７】
図９Ａに示されるように、例えば、ＦＩＦＯ２２のキューイングの空き容量が第１の閾値（UPPER）を上回る場合、キューイングの空きに余裕があり、データ転送を急ぐ必要がないことから、通常の動作よりも低速な低速動作が開始される。これにより電力消費が抑えられる。
【００９８】
コントローラ６は、このような動作を実現するため、ＦＩＦＯ２２のキューイングの空き容量が第１の閾値（UPPER）を上回ることを検知すると、予め定められたパルスマスク数の設定をパルスマスク型分周器２に対して指示する信号を送るとともに、イネーブル信号をパルスマスク型分周器２に送る。これにより、パルスマスク型分周器２からは、間引きされたパルスの数が多いクロックが生成される。なお、この制御を実施するために必要な情報（第１の閾値（UPPER）を示す情報など）は、コントローラ６が参照できるようにレジスタ５内に記憶される。
【００９９】
一方、ＦＩＦＯ２２のキューイングの空き容量が第２の閾値（LOWER）を下回る場合、キューイングの空きに余裕がなく、データ転送を急ぐ必要があることから、高速動作もしくは通常動作が開始される。なお、キューイングの空き容量に応じて段階的に動作速度（周波数）が変わるようにしてもよい。
【０１００】
コントローラ６は、このような動作を実現するため、ＦＩＦＯ２２のキューイングの空き容量が第２の閾値（LOWER）を下回ることを検知すると、パルスマスク数を０とする設定もしくはＩＤＬＥ期間のときよりも少ないパルスマスク数の設定をパルスマスク型分周器２に対して指示する信号を送るとともに、イネーブル信号をパルスマスク型分周器２に送る。これにより、パルスマスク型分周器２からは、パルスが間引きされていないクロックもしくは間引きされたパルスの数の少ないクロックが生成される。なお、この制御を実施するために必要な情報（第２の閾値（LOWER）を示す情報など）は、コントローラ６が参照できるようにレジスタ５内に記憶される。
【０１０１】
次に、そのほかの具体例を挙げて説明する。
【０１０２】
・制御例（２ａ）
上記２つの閾値を用いてパルスマスク数を３段階に変化させる制御例について、図９Ｂを参照して説明する。
【０１０３】
なお、この制御を実施するために必要な情報（２つの閾値を示す情報など）は、コントローラ６が参照できるようにレジスタ５内に記憶される。
【０１０４】
ここでは、ＦＩＦＯ２２のキューイングの空きに余裕があるほど、パルスマスク数を多くし、クロック周波数を下げるものとする。
【０１０５】
ＦＩＦＯ２２のキューイングの空き容量が第１の閾値（UPPER）を上回る期間においては、コントローラ６は、３２個のパルス中の例えば２８個のパルスをマスクするための制御を実施する。
【０１０６】
また、ＦＩＦＯ２２のキューイングの空き容量が第１の閾値（UPPER）と第２の閾値（LOWER）との間にある期間においては、コントローラ６は、３２個のパルス中の例えば１４個のパルスをマスクするための制御を実施する。
【０１０７】
また、ＦＩＦＯ２２のキューイングの空き容量が第２の閾値（LOWER）を下回る期間においては、コントローラ６は、３２個のパルス中の例えば０個のパルスをマスクする（パルスマスクを無効にする）ための制御を実施する。
【０１０８】
これにより、より細やかな制御を実現することができる。なお、閾値を２つではなく、３つ以上とすることで、より多段階にパルスマスク数を変化させるように制御してもよい。
【０１０９】
この第２の実施形態によれば、ＦＩＦＯ２２のキューイング状態に応じてコントローラ６がパルスマスク型分周器２を制御する構成においても、第１の実施形態の場合と同様の効果を得ることができる。
【０１１０】
（第３の実施形態）
次に、第３の実施形態について説明する。  
第３の実施形態では、前述の図１を参照するとともに、図１０および図１１を参照して説明する。
【０１１１】
第３の実施形態において監視の対象となるのは、半導体装置１００の所定の場所の温度である。
【０１１２】
図１に示される半導体装置１００の所定の場所には、温度センサ（図示せず）が設けられる。当該温度センサは、半導体装置１００の所定の場所の温度を検知するものである。なお、この温度センサは、半導体装置１００の内側に設けられていてもよいし、半導体装置１００の外側に設けられていてもよい。温度センサにより検知された温度を示す情報は、直接、コントローラ６へ伝えられるようにしてもよいし、あるいは、別の手段を通じて、コントローラ６へ伝えられるようにしてもよい。例えば、温度センサにより検知される温度が半導体装置１００内のブロックＢ０のアクティビティモニタＡ０により監視され、その監視結果がコントローラ６へ伝えられるようにしてもよい。
【０１１３】
ここでは、温度センサにより検知された温度を示す情報が、直接、コントローラ６へ伝えられるものとする。
【０１１４】
コントローラ６は、温度センサから伝えられる情報に示される温度の値に応じて、パルスマスク型分周器２がマスクするパルスのマスク数を変化させ、パルスマスク型分周器２が生成する分周クロックの周波数を変化させる。
【０１１５】
レジスタ５には、低速動作に移行するタイミングや高速動作（通常動作）に移行するタイミングを決める温度の閾値などの情報が記憶される。このレジスタ５に記憶された情報は、コントローラ６により参照される。
【０１１６】
図１０は、第３の実施形態の制御による動作の一例を示すフローチャートである。
【０１１７】
ここでは、単位時間当たりの温度変化量（前回取得した温度と今回取得した温度との差分）に応じて、パルスマスク数を変える制御例について説明する。
【０１１８】
まず、コントローラ６は、パルスマスク型分周器２に対するイネーブル信号をオンにした状態で、温度センサからの温度測定の完了を示すＥＯＣ（End Of Conversation）信号がアサートされるまで待機する（ステップＳ１）。
【０１１９】
次に、コントローラ６は、温度測定の完了を示すＥＯＣ信号のアサートに応じて、温度情報を取得し、取得した温度に基づく処理を開始する（ステップＳ２）。
【０１２０】
コントローラ６は、今回取得した温度と、レジスタ５に予め設定された基準温度とを比較し、今回取得した温度が基準温度以上であるか否かを判定する（ステップＳ３）。
【０１２１】
今回取得した温度が基準温度以上である場合には（ステップＳ３のＹｅｓ）、ステップＳ４へと進む。一方、今回取得した温度が基準温度未満である場合には（ステップＳ３のＮｏ）、パルスマスク数を０に戻し（ステップＳ５）、ステップＳ６へと進む。
【０１２２】
ステップＳ４では、コントローラ６は、前回取得した温度と今回取得した温度との比較を行う（ステップＳ４）。
【０１２３】
より具体的には、コントローラ６は、今回取得した温度と前回取得した温度との差分と、レジスタ５に予め設定された第１の閾値（RANGE_UP）との比較、および、今回取得した温度と前回取得した温度との差分と、レジスタ５に予め設定された第２の閾値（RANGE_DN）との比較を行う。
【０１２４】
今回取得した温度と前回取得した温度との差が、レジスタ５に予め設定された第１の閾値（RANGE_UP）以上である場合には、単位時間内に一定以上の温度上昇があったとみなし、レジスタ５に予め設定されたパルスマスク数増加量（RAIO_UP）分だけ、現在のパルスマスク数を増加させ（ステップＳ５Ａ）、クロック周波数を下げさせる。この後、ステップＳ６へと進む。
【０１２５】
一方、今回取得した温度と前回取得した温度との差が、レジスタ５に予め設定された第２の閾値（RANGE_DN）以下である場合には、単位時間内に一定以上の温度下降があったとみなし、レジスタ５に予め設定されたパルスマスク数増加量（RAIO_DN）分だけ、現在のパルスマスク数を減少させ（ステップＳ５Ｂ）、クロック周波数を上げさせる。この後、ステップＳ６へと進む。
【０１２６】
なお、今回取得した温度と前回取得した温度との差が、第１の閾値（RANGE_UP）と第２の閾値（RANGE_DN）との間にある場合には、パルスマスク数は変えることなく、ステップＳ６へと進む。
【０１２７】
最後に、コントローラ６は、イネーブル信号の状態を確認する（ステップＳ６）。コントローラ６は、イネーブル信号をオンとしている限りは、ステップＳ１からの処理を繰り返す。一方、イネーブル信号をオフとしたときには、当該制御を終了させる。
【０１２８】
なお、上記動作においては、例えば、ｘ℃ならａ個のパルスマスクを指定し、ｙ℃ならｂ個のパルスマスクを指定する等を定義したテーブルをレジスタ５に予め設定しておき、このテーブルの定義に従って制御を行うように変形実施することも可能である。
【０１２９】
図１１は、第３の実施形態による制御と一般的な技術による制御で実現される温度変化および性能変化の違いを対比させて示す概念図である。
【０１３０】
図１１（ａ）は、一般的な技術による制御で実現される温度変化および性能変化の例を示している。一方、図１１（ｂ）は、第３の実施形態による制御で実現される温度変化および性能変化の例を示している。
【０１３１】
なお、図１１（ａ），（ｂ）中、符号Ｔ１は、一般的な技術による制御で実現される温度変化を示し、符号Ｔ２は、本実施形態による制御で実現される温度変化を示す。また、符号Ｐ１は、一般的な技術による制御で実現される性能変化を示し、符号Ｐ２は、本実施形態による制御で実現される性能変化を示す。
【０１３２】
図１１（ａ）に示す一般的な技術による制御では、温度が上昇する場合、一般的な分周器を用いてクロックを分周させることでクロック周波数を段階的に大きく下降させる。これに応じて、装置の性能も段階的に大きく低下する。
【０１３３】
一般的な分周器では、温度の上昇に応じて細やかな周波数制御を行うことができず、粗い周波数制御を行うことになる。そのため、温度変化Ｔ１に示されるように温度の上昇を抑える効果が小さい上に、性能変化Ｐ１に示されるように性能の低下が大きくなる。
【０１３４】
これに対し、図１１（ｂ）に示す第３の実施形態による制御では、温度が上昇する場合、例えば単位時間当たりの温度変化量が一定量を超える毎に、パルスマスク型分周器２のパルスマスク数を細かく変化させることで、クロック周波数を少しずつ下降させる。これに応じて、装置の性能も少しずつ低下する。
【０１３５】
この第３の実施形態では、温度の上昇に応じて、パルスマスク型分周器２により細やかな周波数制御を行うことができる。そのため、温度変化Ｔ２に示されるように温度の上昇を効果的に抑えることができる上に、性能変化Ｐ２に示されるように性能の低下を抑制することができる。
【０１３６】
（第４の実施形態）
次に、第４の実施形態について説明する。  
第４の実施形態では、前述の図１を参照するとともに、図１２を参照して説明する。
【０１３７】
第４の実施形態において監視の対象となるのは、図１に示される半導体装置１００の動作モードである。
【０１３８】
半導体装置１００の動作モードは、例えば、半導体装置１００内のブロックＢ２のアクティビティモニタＡ２により監視され、その監視結果がコントローラ６へ伝えられるものとする。
【０１３９】
コントローラ６は、アクティビティモニタＡ２から伝えられる情報に示される動作モードの遷移に応じて、パルスマスク型分周器２がマスクするパルスのマスク数を変化させ、パルスマスク型分周器２が生成する分周クロックの周波数を変化させる。
【０１４０】
レジスタ５には、個々の動作モードに対応するパルスマスク数をそれぞれ定義したテーブルなどの情報が記憶される。このレジスタ５に記憶された情報は、コントローラ６により参照される。
【０１４１】
図１２は、第４の実施形態において監視の対象となる動作モードの遷移の一例を示す概念図である。
【０１４２】
図１２に示されるように、半導体装置１００の動作モードには、例えば、スタートアップモードＭ１、アクティブモードＭ２があるほか、ウェイトモードＭ１１、リテンションモードＭ１２、および、ＲＴＣモードＭ１３や、スリープモードＭ２１がある。
【０１４３】
スタートアップモードＭ１は、アクティブモードＭ２に遷移することが可能である。
【０１４４】
アクティブモードＭ２は、ウェイトモードＭ１１、リテンションモードＭ１２、ＲＣＴモードＭ１３、および、スリープモードＭ２１のいずれにも遷移することが可能である。
【０１４５】
ウェイトモードＭ１１は、アクティブモードＭ２に遷移することが可能である。リテンションモードＭ１２は、アクティブモードＭ２に遷移することが可能である。ＲＣＴモードＭ１３は、スタートアップモードＭ１に遷移することが可能である。
【０１４６】
スリープモードＭ２１は、アクティブモードＭ２に遷移することが可能である。
【０１４７】
ウェイトモードＭ１１、リテンションモードＭ１２、ＲＴＣモードＭ１３においては、ＣＰＵはディープスリープ状態となる。このとき、ＣＰＵのクロックは停止され、高速復帰は不要である。そのため、クロックは供給元から停止させておくことが可能である（ＰＬＬ回路１も停止させておくことが可能である）。この場合、図1中のコントローラ６は、パルスマスク型分周器２のパルスマスク数の設定などの制御は不要となる。
【０１４８】
一方、スリープモードＭ２１においては、ＣＰＵはスリープ状態となる。このとき、ＣＰＵのクロックは停止されるが、高速復帰は必要である。そのため、復帰時間を考慮してクロックの供給元は動作させておく必要がある（ＰＬＬ回路１も動作させておく必要がある）。この場合、動作率を１００％とする必要はない。よって、図1中のコントローラ６は、消費電力を削減すべく、パルスマスク型分周器２のパルスマスク数を、例えばアクティブモードＭ２時のパルスマスク数よりも多い値に設定することにより、クロック周波数を低下させる。
【０１４９】
この第４の実施形態では、ＣＰＵスリープモード等の動作率を１００％とする必要のないモードにおいて、パルスマスク型分周器２によりクロック周波数を所望の値に低下させることで、消費電力をより一層削減することができる。
【０１５０】
以下の実施形態では、省電効果とトレードオフの関係にあるバストランザクションの転送性能の性能低下を抑制しながら、パルスマスク型分周器の最適な制御を行うことにより、省電力化とバス転送性能維持を両立させる技術について説明する。また、パルスマスク型分周器の制御をバストランザクション特性に合わせて自動的に補正することにより、より高い省電力効果を得る技術についても説明する。
【０１５１】
前述した第１の実施形態では、図７に各バスマスタのトランザクションの状態に応じてクロックの周波数が変化する動作のタイムチャートの例を示したが、これをより詳細に説明するためのタイムチャートの例を図１３に示す。
【０１５２】
図１３において、バスビジー信号がハイの期間（バストランザクションの発生期間）が終了する時点Ａは、各バスマスタのトランザクションが終了しバスがアイドル（ＩＤＬＥ）となる時点であることから、パルスマスク型分周器２を制御してクロックを通常動作から低速動作に移行させる起点となる。また、バスビジー信号がローの期間（バストランザクションの未発生期間）が終了する時点Ｂは、新たなバスのトランザクションが発生した時点であることから、クロックを低速動作から通常動作に移行させる起点となる。
【０１５３】
上記時点Ａ，Ｂをそれぞれ起点とするクロック切り替え動作は、物理的なバスステータス信号の遅延や非同期クロック間の同期処理等により、区間Ｘ，Ｙのように僅かであるが遅延時間が生じてしまう。区間Ｘは、通常動作から低速動作に移行するまでのオーバーヘッド期間に相当する。区間Ｙは、低速動作から通常動作に復帰するまでのオーバーヘッド期間に相当する。特に区間Ｙは、トランザクションが発生しているにも関わらず、クロックは低速なままであるため、バス転送性能の低下を生じさせてしまう。また、トランザクションの発生とその終了が短い期間に繰り返されるような場合には、クロック切り替え時に都度、切り替えオーバーヘッド期間が累積してしまうため、バス転送性能の低下の影響が顕著に現れてしまう場合がある。以下に説明する実施形態では、このような問題を解決する。
【０１５４】
（第５の実施形態）
図１４乃至図１６を参照して、第５の実施形態について説明する。なお、前述した各図も適宜参照する。以下では、前述した第１の実施形態と共通する部分の説明を省略し、異なる部分を中心に説明する。
【０１５５】
図１４は、第５の実施形態によるパルスマスク型分周器の回路構成の一例を示す回路図である。なお、図２と共通する要素には同一の符号を付し、重複する説明を省略する。
【０１５６】
図１４に示されるパルスマスク型分周器２’には、クロックパルスパターン生成部１１、カウンタ１２、クロックゲーティング部１３などが備えられるほか、さらにマスクフィルター生成部１４が備えられている。
【０１５７】
また、パルスマスク型分周器２’には、ＰＬＬ１側から供給されるソースクロックを入力する端子、コントローラ６から供給される制御用の各信号（パルスマスク数の設定を指示する信号や、イネーブル信号、マスクピリオドを指定する信号など）を入力する端子、生成される分周クロックを出力する端子などが備えられている。マスクピリオドは、後述するフィルタリング処理におけるフィルタリング係数に相当するものである。本実施形態では、マスクピリオドは固定値であるものとして説明するが、マスクピリオドは可変値であってもよい。
【０１５８】
マスクフィルター生成部１４は、ソースクロックを入力しつつ、イネーブル信号（ここでは、１つ又は複数のトランザクションの発生の有無を示すバスビジー信号）を入力し、当該バスビジー信号に対して所定のフィルタリング処理を施し、フィルタリング処理の施されたバスビジー信号を出力する。具体的には、マスクフィルター生成部１４は、入力したバスビジー信号のうち、トランザクション発生無しの期間がマスクピリオドに満たない信号を、トランザクション発生有りを示す信号として出力する。すなわち、マスクフィルター生成部１４は、入力したバスビジー信号から、トランザクション発生無しの期間がマスクピリオドに満たない信号を除去した後の信号を出力する。
【０１５９】
なお、以下では、マスクフィルター生成部１４により処理される前のバスビジー信号を「バスビジー入力」と呼び、マスクフィルター生成部１４により処理されてから出力されるバスビジー信号を「バスビジー出力」と呼ぶ。
【０１６０】
マスクフィルター生成部１４の後段に配置されている回路（カウンタ１２、クロックパルスパターン生成部１１、およびクロックゲーティング部１３）は、マスクフィルター生成部１４の出力に応じて、生成する分周クロックの周波数を変化させる。
【０１６１】
図１５に、マスクフィルター生成部１４の構成の一例を示す。
【０１６２】
図１５に示されるように、マスクフィルター生成部１４は、マスクカウンタ１５とＯＲ回路１６とを含む。
【０１６３】
マスクカウンタ１５は、例えばバスビジー入力がオフ状態（トランザクション発生無しを示す状態）にあるディアサート期間を、ソースクロックのパルス数をカウントすることで求める処理などを行う回路であり、カウント結果に応じてバスビジー入力を補正した結果をマスクフラグとして出力する。
【０１６４】
このマスクカウンタ１５は、バスビジー入力がオン状態（トランザクション発生有りを示す状態）にあるアサート期間中は、マスクフラグをオン状態として出力する。バスビジー入力がオン状態からオフ状態に変化した場合、マスクカウンタ１５は、カウントを開始する。カウント値がマスクピリオドに達する前に、バスビジー入力がオン状態に戻った場合は、カウントを終了する（カウント値をクリアする）。この場合、出力するマスクフラグはオン状態のままである。一方、カウント値がマスクピリオドに達した場合には、出力するマスクフラグをオフ状態に変化させる。
【０１６５】
ＯＲ回路１６は、マスクカウンタ１５から出力されるマスクフラグとバスビジー入力との論理和をとり、その結果をバスビジー出力とする回路である。すなわち、ＯＲ回路１６は、マスクフラグとバスビジー入力の少なくともいずれか一方がオン状態であれば、バスビジー出力をオン状態として出力する。例えば、バスビジー入力がオフ状態にあっても、マスクフラグがオン状態にあれば、バスビジー出力をオン状態とする。
【０１６６】
次に、図１６のタイムチャートを参照して、マスクフィルター生成部１４の動作の一例を説明する。
【０１６７】
マスクフィルター生成部１４には、ソースクロックが入力されており、マスクピリオドが未指定の状態にあり、マスクカウンタ１５はカウント値がクリアされて「6’h0」を維持している状態にあるものとする。また、バスビジー入力、マスクフラグ、バスビジー出力はそれぞれオン状態にあるものとする。
【０１６８】
このあと、マスクピリオドとして固定値「6’h4」が指定される。
【０１６９】
ある時点で、バスビジー入力がオン状態（トランザクション発生有りを示す状態）からオフ状態（トランザクション発生無しを示す状態）に変わると、マスクカウンタ１５は、この後のソースクロックの立ち上がりのタイミング（Ｓ１１）に合わせて、カウント動作を開始する。
【０１７０】
バスビジー入力がオフ状態を維持している限りにおいては、マスクカウンタ１５は、ソースクロックの個々の立ち上がりタイミングに合わせて、カウント値を「6’h0」から、「6’h1」, 「6’h2」，・・・と順次インクリメントし、マスクピリオドの値「6’h4」に達するまでカウント動作を続ける。但し、バスビジー入力がオフ状態からオン状態に変われば、マスクカウンタ１５は、カウント動作を止め、カウント値をクリアして「6’h0」にする。
【０１７１】
カウント値が「6’h0」から、「6’h1」, 「6’h2」，・・・と順次インクリメントされている間、マスクフラグは、オン状態を維持したままであり、その結果、バスビジー入力とマスクフラグとの論理和を示すバスビジー出力もオン状態を維持したままである。この間、バスビジー入力がオフ状態であるのに対し、バスビジー出力はオン状態になることから、バスビジー出力においては、「０」，「１」に示される期間、バスビジー入力が示しているディアサートが抑制された形となり、マスクフィルター生成部１４の後段に配置されている回路（カウンタ１２およびクロックパルスパターン生成部１１）に対しては、バスビジー信号がアサート期間にあるものとして伝えられる。
【０１７２】
例えばカウント値が「6’h2」であるときに、バスビジー入力がオフ状態からオン状態に変わると、マスクカウンタ１５は、この後のソースクロックの立ち上がりのタイミング（Ｓ１２）に合わせて、カウント値をクリアして「6’h0」にする。
【０１７３】
次に、バスビジー入力がオン状態からオフ状態に変わると、マスクカウンタ１５は、この後のソースクロックの立ち上がりのタイミング（Ｓ１３）に合わせて、カウント動作を開始する。
【０１７４】
バスビジー入力がオフ状態を維持している間、マスクカウンタ１５は、ソースクロックの個々の立ち上がりタイミングに合わせて、カウント値を「6’h0」から、「6’h1」, 「6’h2」，「6’h3」，・・・と順次インクリメントする。
【０１７５】
カウント値が「6’h0」から、「6’h1」, 「6’h2」，「6’h3」，・・・と順次インクリメントされている間、マスクフラグは、オン状態を維持したままであり、その結果、バスビジー入力とマスクフラグとの論理和を示すバスビジー出力もオン状態を維持したままである。この間、バスビジー入力がオフ状態であるのに対し、バスビジー出力はオン状態になることから、バスビジー出力においては、「０」，「１」，「２」，「３」，「４」に示される期間、バスビジー入力が示しているディアサートが抑制された形となる。
【０１７６】
カウント値がマスクピリオドの値「6’h4」と一致すると、この後のソースクロックの立ち上がりのタイミング（Ｓ１４）に合わせて、マスクフラグがオン状態からオフ状態に変わる。その結果、バスビジー入力とマスクフラグとの論理和を示すバスビジー出力もオフ状態となる。これにより、マスクフィルター生成部１４の後段に配置されている回路（カウンタ１２およびクロックパルスパターン生成部１１）に対しては、バスビジー信号がディアサート期間にあるものとして伝えられる。
【０１７７】
この第５の実施形態によれば、指定されたマスクピリオド以下の期間のバスビジーのディアサートは除去されるため、クロック切り替え時のオーバーヘッド時間のペナルティの影響を受けずに良好なバス転送性能を維持することができる。これにより、頻繁にクロック切り替えが発生するような細切れのバストランザクション特性による転送性能低下を抑えることが可能となる。
【０１７８】
（第６の実施形態）
図１７乃至図１９を参照して、第６の実施形態について説明する。なお、前述した各図も適宜参照する。以下では、前述した第５の実施形態と共通する部分の説明を省略し、異なる部分を中心に説明する。
【０１７９】
前述の第５の実施形態ではマスクピリオドが固定値である場合の例を示したが、この第６の実施形態ではマスクピリオドが可変値である場合の例を示す。マスクピリオドをクロック生成回路の動作中に動的に変化させ、自動的に補正することにより、最適な性能と低消費電力とをバランス良く達成することを可能にする。
【０１８０】
図１７は、第６の実施形態において前述したパルスマスク型分周器’に関連して設けられるマスクピリオド自動補正回路の構成の一例を示す回路図である。
【０１８１】
図１７に示されるマスクピリオド自動補正回路１７は、バスビジー入力、ソースクロック、および所定の閾値を用いて、トランザクション発生無しの期間を定期的に計測して統計を取り、当該統計の結果に応じて、図１４に示したパルスマスク型分周器２’のマスクフィルター生成部１４で使用されるマスクピリオド（フィルタリング係数）を動的に変化させる処理（マスクピリオドの補正処理）を自動的に行う回路である。このマスクピリオド自動補正回路１７は、例えばパルスマスク型分周器２’の前段に配置されていてもよいし、パルスマスク型分周器２’の中のマスクフィルター生成部１４の前段に配置されていてもよい。
【０１８２】
マスクピリオド自動補正回路１７は、ＦＳＭ（Finite State Machine）３１，インターバルタイマカウンタ（又はバスビジーカウントカウンタ）３２、ヒストグラム計測部３３、比較器３４等を備えている。なお、ここでは、バスビジーカウントカウンタではなく、インターバルタイマカウンタが使用される場合を考える。
【０１８３】
ＦＳＭ３１は、バスビジー入力およびソースクロックを入力してこれらの状態を常に把握するとともに、インターバルタイマカウンタ３２によりカウントされるカウント値も把握する。
【０１８４】
インターバルタイマカウンタ３２は、予め設定された期間（インターバル）を計測し、カウント値が所定値に達した時にその旨を通知する。
【０１８５】
ヒストグラム計測部３３は、ヒストグラム計測に必要な各種の情報をＦＳＭ３１から取得し、インターバルタイマカウンタ３２による測定期間中に、バスビジー入力の個々のディアサート期間のパルス幅を順次記録し、当該測定期間中におけるパルス幅の最頻出値を求める。
【０１８６】
比較器３４は、予め設定されたパルス幅の閾値を入力するとともに、ヒストグラム計測部３３から出力されるパルス幅の最頻出値を入力し、双方の比較を行う。比較の結果、最頻出値が閾値よりも小さい場合は、最頻出値をマスクピリオド（フィルタリング係数）として出力し、最頻出値が閾値以上の場合は、閾値をマスクピリオド（フィルタリング係数）として出力する。
【０１８７】
次に、図１８のフローチャートを参照して、マスクピリオド自動補正回路１７の動作（インターバルタイマカウンタ３２を使用した場合）の一例を説明する。
【０１８８】
インターバルタイマカウンタ３２は、予め設定された期間（インターバル）を計測するためにカウントを開始する（ステップＳ２１）。このとき、ＦＳＭ３１は、インターバルタイマカウンタ３２の状態を把握するとともに、バスビジー入力およびソースクロックの状態も把握している。
【０１８９】
ヒストグラム計測部３３は、ヒストグラム計測に必要な各種の情報をＦＳＭ３１から取得し、カウント開始後のバスビジー入力の個々のディアサート期間のパルス幅を順次記録する（ステップＳ２２）。この処理は、インターバルタイマカウンタ３２のカウント値が所定値に一致するまで行われる（ステップＳ２３のＮＯ、Ｓ２２）。
【０１９０】
カウント値が所定値に一致すると（ステップＳ２３のＹＥＳ）、インターバルタイマカウンタ３２のカウントが終了する（ステップＳ２４）。
【０１９１】
これにより、ヒストグラム計測部３３は、測定期間中におけるパルス幅の最頻出値を求める（ステップＳ２５）。
【０１９２】
比較器３４は、予め設定されたパルス幅の閾値と、ヒストグラム計測部３３から出力されるパルス幅の最頻出値との比較を行う（ステップＳ２６）。比較の結果、最頻出値が閾値よりも小さい場合は（ステップＳ２６のＹＥＳ）、最頻出値をマスクピリオド（フィルタリング係数）として出力する。一方、最頻出値が閾値以上の場合は（ステップＳ２６のＮＯ）、入力した閾値をそのままマスクピリオド（フィルタリング係数）として出力する。
【０１９３】
以降、同様の処理を繰り返すことになる。
【０１９４】
なお、本例では、測定期間を計測するためのカウンタとして、インターバルタイマカウンタが使用される場合を説明したが、代わりにバスビジーカウントカウンタを使用してもよい。以下では、バスビジーカウントカウンタを使用する場合の例を説明する。
【０１９５】
図１７の構成において、バスビジーカウントカウンタ３２は、パスビジー入力のアサート回数をカウントするものである。このバスビジーカウントカウンタ３２は、予め設定したカウント数になるまでカウントを行い、カウント値が所定値に達した時にその旨を通知する。
【０１９６】
この場合、ＦＳＭ３１は、バスビジー入力およびソースクロックを入力してこれらの状態を常に把握するとともに、バスビジーカウントカウンタ３２によりカウントされるカウント値も把握する。また、ヒストグラム計測部３３は、ヒストグラム計測に必要な各種の情報をＦＳＭ３１から取得し、バスビジーカウントカウンタ３２による測定期間中に、バスビジー入力の個々のディアサート期間のパルス幅を順次記録し、当該測定期間中におけるパルス幅の最頻出値を求める。なお、比較器３４の処理内容は、前述した通りとなる。
【０１９７】
次に、図１９のフローチャートを参照して、マスクピリオド自動補正回路１７の動作（バスビジーカウントカウンタ３２を使用した場合）の一例を説明する。なお、図１８のフローチャートと共通するステップには、同一の符号を付している。
【０１９８】
バスビジーカウントカウンタ３２は、パスビジー入力のアサート回数をカウントするためにカウントを開始する（ステップＳ２１’）。このとき、ＦＳＭ３１は、バスビジーカウントカウンタ３２の状態を把握するとともに、バスビジー入力およびソースクロックの状態も把握している。
【０１９９】
ヒストグラム計測部３３は、ヒストグラム計測に必要な各種の情報をＦＳＭ３１から取得し、カウント開始後のバスビジー入力の個々のディアサート期間のパルス幅を順次記録する（ステップＳ２２）。この処理は、バスビジーカウントカウンタ３２のカウント値が所定値に一致するまで行われる（ステップＳ２３のＮＯ、Ｓ２２）。
【０２００】
カウント値が所定値に一致すると（ステップＳ２３のＹＥＳ）、バスビジーカウントカウンタ３２のカウントが終了する（ステップＳ２４’）。
【０２０１】
これにより、ヒストグラム計測部３３は、測定期間中におけるパルス幅の最頻出値を求める（ステップＳ２５）。
【０２０２】
比較器３４は、予め設定されたパルス幅の閾値と、ヒストグラム計測部３３から出力されるパルス幅の最頻出値との比較を行う（ステップＳ２６）。比較の結果、最頻出値が閾値よりも小さい場合は（ステップＳ２６のＹＥＳ）、最頻出値をマスクピリオド（フィルタリング係数）として出力する。一方、最頻出値が閾値以上の場合は（ステップＳ２６のＮＯ）、入力した閾値をそのままマスクピリオド（フィルタリング係数）として出力する。
【０２０３】
以降、同様の処理を繰り返すことになる。
【０２０４】
この第６の実施形態によれば、測定期間毎の最頻出値を用いてマスクピリオドを自動的に補正することから、刻々と変化するバストランザクション特性に適したマスクピリオドを測定期間毎の追従特性にて得ることが可能となり、バス性能低下を抑制しつつ、より高い省電力性能を得ることが可能になる。
【０２０５】
以上詳述したように各実施形態によれば、所望の周波数のクロックを即座に生成することが可能となる。
【０２０６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２０７】
１…ＰＬＬ回路、２…パルスマスク型分周器，３…分周器、４…クロックゲーティング回路、５…レジスタ、６…コントローラ、１０…クロックコントロールモジュール、１１…クロックパルスパターン生成部、１２…カウンタ、１３…クロックゲーティング部、１４…マスクフィルター生成部、１５…マスクカウンタ、１６…ＯＲ回路、１７…マスクピリオド自動補正回路、３１…ＦＳＭ、３２…インターバルタイマカウンタ（又はバスビジーカウントカウンタ）、３３…ヒストグラム計測部、３４…比較器、１００…半導体装置、Ａ０，Ａ２，ＡＢ…アクティビティモニタ、Ｂ０，Ｂ１，Ｂ２，Ｂ３…ブロック、ＢＢ…バスブロック。
【図１】
2019057281.tif 000003
【図２】
2019057281.tif 000004
【図３】
2019057281.tif 000005
【図４】
2019057281.tif 000006
【図５】
2019057281.tif 000007
【図６】
2019057281.tif 000008
【図７】
2019057281.tif 000009
【図８】
2019057281.tif 000010
【図９Ａ】
2019057281.tif 000011
【図９Ｂ】
2019057281.tif 000012
【図１０】
2019057281.tif 000013
【図１１】
2019057281.tif 000014
【図１２】
2019057281.tif 000015
【図１３】
2019057281.tif 000016
【図１４】
2019057281.tif 000017
【図１５】
2019057281.tif 000018
【図１６】
2019057281.tif 000019
【図１７】
2019057281.tif 000020
【図１８】
2019057281.tif 000021
【図１９】
2019057281.tif 000022