(57)【特許請求の範囲】
【請求項１】
１つまたは複数の回路ブロックを有し、命令セットを実行する半導体集積回路であって、
複数のクロック信号の中から１つのクロック信号を選択して前記回路ブロックへ供給するために複数の選択手段が階層化され、使用頻度の高い動作周波数のクロック信号ほど該複数の選択手段のうち接続数が少ない低階層の選択手段に接続され、使用頻度の低い動作周波数のクロック信号ほど該複数の選択手段のうち接続数が多い高階層の選択手段に接続されたクロックツリーと、
前記選択手段の切替えを制御する制御手段と、を備えたことを特徴とする半導体集積回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、半導体集積回路の、クロック信号に関する低消費電力化技術に関する。
【０００２】
【従来の技術】
半導体集積回路では、近年の動作周波数の高速化により、全消費電力に対するクロック信号の電力消費の割合は大きなものとなってきている。そのため、クロック信号に関する低消費電力化技術が多数報告されている。
【０００３】
上記低消費電力技術についての従来技術は、大きく以下の５つに分類できる。すなわち、
１．回路中の不要部分へのクロック信号の供給を停止するか、ごく低速のクロックを供給することで低消費電力化を達成する方法
２．クロック信号、またはその受信部となるフリップフロップやラッチ回路自身に工夫を擬らすことで、低消費電力化を達成する方法
３．回路の動作状態をいくつかのモードに分け、固有のプログラム命令により電源またはクロック周波数を各々のモードについて機能ブロック単位で制御して電力消費を低減させる方法
４．プログラムコンパイル時にクロック切替え命令を挿入し、回路の動作に応じてクロックの速度を切り替えることで消費電力を低減させる方法
５．低速の周辺同路に係る命令処理時にはクロックのスピードを遅くする方法である。
【０００４】
まず、上記従来技術１として示した「回路中の不要部分へのクロック信号の供給を停止する」技術は、一般的には回路中の大きな範囲から小さな範囲まで様々な階層で既に適用されているものである。例えば、特開平８−１８００８号公報には、使用されていない機能ブロックによって無駄に電力が消費されることが無くなり、低消費電力化が可能である半導体集積回路装置に関する技術が開示されている。この技術は、回路中の複数の機能ブロックに対して、ある段階で動作していない回路にはクロックの供給を停止するものである。このような技術は、総じてゲーティッドクロックと呼ばれているものであり大きな電力削減効果がある。
【０００５】
同様の技術として特開平６−１１２８１０号公報には、内部が複数の機能回路ブロックに分かれて構成され、スタンバイモード等の特殊な動作モード時に使用される第１のブロックと、使用されない第２のブロックと、を有するディジタルＩＣ装置において、使用されない第２のブロックのクロック信号を停止する、またはクロック信号の周波数を下げることにより、第２ブロックを流れる電流量を減少させて電力消費量を抑える技術が開示されている。
【０００６】
また、特開平６−２９５２４３号公報には、パイプラインで処理の長いステージが完了するまでの間、他の待機状態になっているステージのクロックを停止するデータ処理装置に関する技術が開示されている。
【０００７】
次に、上記従来技術２として示した「クロック信号自身に工夫を凝らす」という技術は、様々な種類のものが報告されている。例えば、「低消費電力・高速ＬＳＩ技術」（桜井貴康編、２．１．７．１．小振幅クロック技術、リアライズ社）に記載されたクロック信号振幅を半減させることによるものや、フリップフロップに工夫を凝らした低消費電力化技術などがその代表である。
【０００８】
上記従来技術３に関しては、例えば、電源またはクロック周波数を制御するための命令を作って、これを実行プログラム中に挿入することで随時電圧もしくは動作周波数を変える手法が、特開平５−２１０４３３号公報及び特開平６−３３２５８３号公報に、ディジタル電子機器用電力制御装置、該電力装置を備えた処理装置、及び該処理装置を備えたディジタル電子機器用電力管理システムに関する技術として開示されている。これらの公報に開示された装置及びシステムでは、回路中の機能ブロック単位に電源のＯＮ／ＯＦＦ、クロック周波数の変更を行うような命令コードを準備し、そのときのデバイスの動作モードに応じてデバイス内部の各機能ブロックへ供給される電源またはクロックをコントロールしている。そして、多くの場合、待機モードと動作モードといった切り分けを行い、回路動作が少ない場合にクロックや電源を制御することを提案している。
【０００９】
上記従来技術４として示した「プログラムコンパイル時にクロック切替え命令を挿入する」方法は、例えば、特開平９−２２３１８号公報にプロセッサ及びその制御方法に関する技術として開示されている。この方法では、クロックスピードを切り替える単位が重要である。すなわち、クロックスピードを細かく制御して処理速度を最適化しようとすると、クロック切替え命令が頻繁に挿入されることになり、処理速度に与える影響が大きくなる。一方、クロック切替え命令の挿入を減らすために大雑把にクロックを切り替えると、低速回路に引きずられて処理速度が低下するか、または処理速度向上の為にクロックを低速化できないために消費電力が低減されない。
【００１０】
従来技術５として示した「低速の周辺回路に係る命令処理時にクロックを遅くする」手法は、例えば、特開昭６２−２３２０５３号公報のマイクロコンピュータの動作速度制御装置に、その技術が開示されている。この場合、低速の周辺回路が例えば書き込み時だけスピードが遅かったとしても、該回路にアクセスする限りは低速動作することになり、必要以上にシステムの処理速度を低下させることになる。
【００１１】
また、特開平８−１４７１６１号公報には、この点を考慮し、例えば低速の周辺回路からのデータリードアクセス時のみウェイトステートを挿入することで処理速度の低下を最低限に抑えるデータ処理装置に関する技術が開示されている。この技術は、消費電力を抑えつつ処理速度の低減を最小限に抑えるには有効な手投であるが、処理サイクル毎の電力のばらつきが大きい。すなわち、ウェイト期間には内部動作が少ないため電力は少ないが、ウェイトの前のサイクルでは同時に多くの処理が行われるため、電流のピークが大きくなる傾向がある。
【００１２】
また、上記５つの従来技術以外の方法として、特開平８−２７２４７９号公報には、動作ユニット単位に各々の動作状況に合わせて別々のクロックを与える可変クロック発生装置に関する技術が開示されている。
【００１３】
【発明が解決しようとする課題】
従来技術１として示した「回路中の不要部分へのクロック信号の供給を停止する」という技術における問題点を、図１０に基づいて説明する。図１０は、半導体集積回路の一般的な回路構成図、及び所定の状態における各ブロックの状態を示した図である。半導体集積回路７０は、所定の動作・処理を行うブロックＡ７１、ブロックＢ７２、ブロックＣ７３、クロックジェネレータ７４及びＣＰＵ７５によって構成される。各ブロックの動作クロックは、クロックジェネレータ７４から供給される。また、各部はＣＰＵ７５により制御される。
【００１４】
半導体集積回路７０では、各ブロック７１〜７３が例えばある期間に少しでも動作する瞬間があれば、そのブロックに対しては通常動作時と同等のクロックを供給しなければならない。よって、各ブロック７１〜７３に対して、クロック信号を供給する／しない／遅くする、という判断を行っても、半導体集積回路７０における低電力化の効果が少なくなるという問題がある。例えば、図１０（Ｂ）に示したように、サイクル“ハ”ではブロックＡ７１がメインで動作し、その間わずかにブロックＣ７３が動作する。この場合、従来の手法ではブロックＣ７３に対しても通常のクロックを供給し続けることになる。したがって、低電力化の効果は、ブロックＢ７２が停止している分だけになる。
【００１５】
また、最近の半導体集積回路では、スタンバイモード等の待機モードにおいても回路中で停止可能な機能ブロックが減少してきている。そのために、クロック信号の供給を完全に停止することができないことが多い。この問題の対処方法として、待機モードでは動作時よりも遅いクロックで動作するようコントロールする手法が発表されている。しかしながら、動作モード時については何ら対策されない。すなわち、動作している回路については、ある程度低速のクロックでよい場合でも、従来通り高速のクロックが供給され続けるため、動作中の無駄な動作による消費電力の削減ができない。
【００１６】
従来技術２として示した「クロック信号自身に工夫を凝らす」方法では、例えばクロックの信号振幅を半減させる手法などが報告されているが、通常のロジックとは別の電源配線が必要になる。そのため、チップ面積に影響が大きいことと、ノイズマージンの低下をもたらす、といった問題が有る。
【００１７】
従来技術３として示した「デバイスの動作モードに応じて、各機能ブロックに供給する電源のＯＮ／ＯＦＦやクロック周波数の変更を行うためのプログラム命令を準備する」手法については、まず回路の状態をいくつかのモードに明確に切り分ける必要がある。また、特開平９−２２３１８号公報に開示されたプロセッサ及びその制御方法においては、既存のプログラムに対してソフトウェア上で電力を考慮しながら命令を追加しなければならない。
【００１８】
従来技術４として示した「プログラムコンパイル時にクロック切替え命令を挿入する」方法については、モードを切り替えるためのプログラムを実行する間、処理が停止してしまう。また、前記のように、クロックスピードをより細かくモードを制御しようとすると、モード切替え信号を実行する間の時間的なペナルティが大きくなってしまうという問題がある。
【００１９】
従来技術５として示した「低速の周辺回路に係る命令処理時にはクロックのスピードを遅くする」方法については、周辺回路として接続されるメモリ等の回路の動作速度が、システムの動作速度と比較して遅い場合、通常これらの回路にアクセスする時にはウェイトサイクルを追加する。このとき、データのアクセスをする回路以外は状態を保持したまま処理を行わない。状態を保持する為には、クロック信号による制御が不可欠であり、結果として無駄な回路動作となる。ウェイトサイクルを追加せずにメモリの処理速度に応じてクロックを遅くする手法は、例えば特開平３−５５６１４号公報、特開平２−１１８８１１号公報、特開昭６２−２３２０５３号公報に、それぞれ電子機器、マイクロコンピュータ、マイクロコンピュータの動作速度制御装置の技術として開示されている。しかし、これらのメモリにアクセスする際のシステム動作速度に対するペナルティが大きくなる。
【００２０】
また、上記５つの従来技術以外の方法である特開平８−２７２４７９号公報の可変クロック発生装置については、同時に複数の処理を行う場合、処理の内容によって要する時間は異なる。多くの場合、処理時間の短いものは処理を完了した後、処理時間の長いものが終了するまで結果を保持している。データを保持する為にはクロック信号による制御が不可欠であり、結果として無駄な回路動作となる。
【００２１】
そこで、本発明は上記の問題を解決するために創作したものであり、その目的は、１つまたは複数の回路ブロックを有し、命令セットを実行する半導体集積回路において、より効率的に消費電力の低減を図ることができる回路構成方法を提供することである。
【００２２】
【課題を解決するための手段】
この発明は、上記の課題を解決するための手段として、以下の構成を備えている。
【００４６】
（１）１つまたは複数の回路ブロックを有し、命令セットを実行する半導体集積回路であって、
複数のクロック信号の中から１つのクロック信号を選択して前記回路ブロックへ供給するために複数の選択手段が階層化され、使用頻度の高い動作周波数のクロック信号ほど該複数の選択手段のうち接続数が少ない低階層の選択手段に接続され、使用頻度の低い動作周波数のクロック信号ほど該複数の選択手段のうち接続数が多い高階層の選択手段に接続されたクロックツリーと、
前記選択手段の切替えを制御する制御手段と、を備えたことを特徴とする。
【００４７】
この構成においては、クロックツリーを構成する際に、動作周波数の使用頻度によって各々の動作周波数に対して重み付けを行い、使用頻度の高い動作周波数が選択手段のツリー構造において最終段に近くなるように、半導体集積回路を構成する。これにより、動作周波数切替えを行うパスの負荷が低減され、素早く動作周波数を変更することができる。また、単純にクロックツリーを構成したときと比較してクロック切替え時に充放電が必要な配線容量が少なくて済むため、より安定した動作が可能となる。
【００５２】
【発明の実施の形態】
〔第１例〕
第１例では、命令実行において複数の処理サイクルがある場合、処理サイクル単位で動作周波数を変更または停止することができるように半導体集積回路を構成する。例えば、時間のかかる演算を行ったり、低速の周辺回路にアクセスしたりする場合、通常であればウェイトサイクルを挿入する。しかし、本実施形態では、このような場合、処理サイクルの動作周波数を遅くする。また、逆に処理の量が少なく、より高速で動作可能な処理サイクルがあった場合、回路の動作を高速化させるために、これらの処理サイクル実行中は動作周波数を速くする。さらに、これらのクロックの調整は、回路全体に対して行うだけでなく、各機能ブロック単位でも調整を可能にする。
【００５３】
図１は、第１例に係る半導体集積回路の動作タイミングチャート及び従来の半導体集積回路の動作タイミングチャートである。図２は、選択回路の回路構成図である。図１（Ａ）に示した従来技術（特開平６−３３２５８３号公報）では、通常のクロックである周波数ａで動作している時に、周波数変更命令ｉｎｓｔ＿Ｂを実行すると、以降の動作は周波数ｂで行う。また、周波数ｂで動作している時に、周波数変更命令ｉｎｓｔ＿Ａを実行すると、以降の動作は周波数ａで行う。
【００５４】
これに対して、第１例では図１（Ｂ）に示したように、周波数変更命令ｉｎｓｔ＿Ｂによって以降の動作を完全に周波数ｂで行うのではなく、特定のサイクルであるｍｒ、ｍｗサイクルのみ周波数ｂで動作させている。クロックの切替えは、例えば図２に示したような選択回路１１で実現可能である。選択回路１１は、セレクタ１２、セレクタ１３及び切替えＳＷ１４により構成される。ＣＬＫ＿Ａ入力端子は、セレクタ１２、セレクタ１３及び切替えＳＷ１４に接続されている。また、ＣＬＫ＿Ｂ入力端子は、セレクタ１２及びセレクタ１３に接続されている。セレクタ１２では、ｍｒ端子から入力された信号により、ＣＬＫ＿ｆｏｒ  ｍｒ端子に出力する信号が選択される。セレクタ１３では、ｍｗ端子から入力された信号により、ＣＬＫ＿ｆｏｒ  ｍｗ端子に出力する信号が選択される。切替えＳＷ１４では、ｏｐ端子から入力された信号により、ＣＬＫ＿ｆｏｒ  ｏｐ端子への信号の出力・停止が切り替えられる。選択回路１１の制御は、制御手段である図外のＣＰＵによって、命令実行サイクル単位で制御される。
【００５５】
また同様に、図示していないが特定のサイクルのみクロックを変更するのは、チップ全体ではなく特定の機能ブロックのみとしてもよい。図１に示したタイミングチャートでは、３回目のｍｗサイクル終了まで、従来技術では総サイクル数が６２であったが、第１例では、総サイクル数は５２となる。よって、処理速度は従来手法の約１５％速くなる。
【００５６】
〔第２例〕
第２例では、これから実行しようとする命令コードを自動的に解析して、信号処理の量や処理能力に応じて各々の機能ブロックや処理サイクルのクロックを決定することができるように半導体集積回路を構成する。この時、回路全体の周波数をコントロールするだけでなく、外部から見た動作周波数はそのままで、内部の一部の回路に対してのみ動作周波数を低下または停止させることができる。また、クロック制御のための特別な命令を追加することなく、システムのクロックを制御できる。図３は、半導体集積回路において命令コードと各ブロックのクロックと関係を示した図である。図３では、簡易に説明するために、Ｂｌｏｃｋ＿Ａ、Ｂｌｏｃｋ＿Ｂの２つの回路ブロックに対して、ＣＬＫ＿ａ〜ｄの４種類のクロックからデータの上位３ビットで選択する周波数、及び周波数を変更するブロックを認識させる例を示している。つまり、データの１ビット目（１５）が０の場合、３ビット目（１３）の値にかかわらず、２ビット目（１４）が０であるとＢｌｏｃｋ＿Ａの動作周波数としてＣＬＫ＿ａが選択され、２ビット目（１４）が１であるとＢｌｏｃｋ＿Ａの動作周波数としてＣＬＫ＿ｂが選択される。また、データの１ビット目（１５）が０の場合、２ビット目（１４）の値にかかわらず、３ビット目（１３）が０であるとＢｌｏｃｋ＿Ｂの動作周波数としてＣＬＫ＿ａが選択され、３ビット目（１３）が１であるとＢｌｏｃｋ＿Ｂの動作周波数としてＣＬＫ＿ｂが選択される。さらに、データの１ビット目（１５）が１の場合、３ビット目（１３）の値にかかわらず、２ビット目（１４）が０であるとＢｌｏｃｋ＿Ａの動作周波数としてＣＬＫ＿ｃが選択され、２ビット目（１４）が１であるとＢｌｏｃｋ＿Ａの動作周波数としてＣＬＫ＿ｄが選択される。また、データの１ビット目（１５）が１の場合、２ビット目（１４）の値にかかわらず、３ビット目（１３）が０であるとＢｌｏｃｋ＿Ｂの動作周波数としてＣＬＫ＿ｃが選択され、３ビット目（１３）が１であるとＢｌｏｃｋ＿Ｂの動作周波数としてＣＬＫ＿ｄが選択される。このような動作は、制御手段である図外のＣＰＵによって制御される図外のセレクタ回路で行われる。
【００５７】
なお、実際には全ての命令コードについて各ブロック、各サイクルの最適な動作周波数を求め、これを元に処理する命令単位でクロックの選択を行う。
【００５８】
〔第３例〕
第３例では、内部または外部に接続される各メモリのイネーブル信号に応じて、回路の動作周波数をコントロールすることができるように半導体集積回路を構成する。例えば、回路が通常動作する周波数でメモリのアクセスをしようとした時に、該当するメモリの動作速度が遅く、従来であればウェイトサイクルを発生させることでデータのやりとりをしていたような場合、該メモリをアクセスする期間だけ回路全体の動作周波数を低くして、ウェイトサイクル無しでデータのやりとりをすることができる。例として、低速なメモリにアクセスする場合について説明する。従来は命令単位にクロックを制御する。すなわち、メモリアクセスサイクルの間（オペコードフェッチ＋メモリリード、またはオペコードフェッチ＋ライトサイクルといった、一連の処理サイクル）を一括して低速クロックで動作させるが、これでは動作速度の低下が著しい。そこで、第３例では、制御部であるＣＰＵで実行サイクル単位にクロックを制御する。すなわち、オペコードをフェッチするサイクルについては通常のシステムクロックで動作し、メモリリード／ライトのサイクルのみ低速で動作するようにＣＰＵで制御する。これにより、ウェイトサイクル挿入による無駄な処理を行わずに、システム動作速度に対するペナルティはメモリにアクセスする必要最小限の時間に抑えられる。また、システムの動作速度を低下させないために、処理が十分可能であればメモリリード／ライト以外のサイクルは動作周波数を速くすることも可能とする。
【００５９】
図４は、第３例の回路構成図及びタイミングチャートと、従来のタイミングチャートである。半導体集積回路２０は、セレクタ回路であるＣＬＫセレクタ２５とＣＰＵ２６とを含む構成であり、外部メモリＭＭｌ〜ＭＭ４を備える。ＣＬＫセレクタ２５は、クロック信号ＣＬＫＬとクロック信号ＣＬＫＨとの入力端子を有する。ＣＬＫセレクタ２５で選択されたクロック信号は、ＣＰＵ２６、外部メモリＭＭｌ〜ＭＭ４の各ＣＬＫ端子に入力される。また、ＣＰＵ２６と外部メモリＭＭｌ〜ＭＭ４との間は、Ｄａｔａバスが接続されている。さらに、ＣＬＫセレクタ２５は、ＣＰＵ２６によって、命令単位または命令実行単位で制御される。
【００６０】
外部メモリＭＭｌ〜ＭＭ４のうち、外部メモリＭＭ４のみがメモリアクセス時間の遅いデバイスであった場合、外部メモリＭＭ４に対するイネーブル信号が立ったときには、ＣＬＫセレクタ２５で遅いクロック信号ＣＬＫＬが選択され、回路は低速で動作を行う。その他の外部メモリが選択された場合やメモリアクセスサイクル以外（図４（Ｂ）におけるｏｐフェッチサイクル）では、速いクロック信号ＣＬＫＨが選択される。これにより、図４（Ｂ）に示した従来動作でのＷａｉｔサイクルを挿入する必要がなくなり、クロック信号のトグル回数を低減することが可能となる（本例では２回低減している）。
【００６１】
なお、図４では、複数の外部メモリＭＭ１〜ＭＭ４としたが、これに限るものではなく、半導体集積回路の内部メモリであってもよい。また、論理的に複数メモリとして扱う単一メモリであってもよい。
【００６２】
〔第４例〕
第４例では、半導体集積回路に接続された各周辺回路についても、第３例と同様にＩ／Ｏアドレスをデコードした結果である。Ｉ／Ｏイネーブル信号によって、ＣＰＵ及び周辺回路の動作周波数を実行する命令単位または実行サイクル単位に、動作周波数を変更または停止することができるように半導体集積回路を構成する。つまり、動作周波数を実行する命令単位または命令実行サイクル単位に動作周波数を変更または停止するセレクタ回路と、Ｉ／Ｏアドレスをデコードし、該デコード結果に対応する１つまたは複数の周辺回路の各動作速度に応じて、該セレクタ回路を制御する制御手段であるＣＰＵと、を備えた構成とする。これにより、ウェイトサイクルの追加なしにアクセスする事が可能になる。例えば、図４（Ａ）に示した外部メモリＭＭｌ〜ＭＭ４を周辺回路に置き換え、図４（Ｂ）に示したタイミングチャートにおいてメモリリードサイクル及びメモリライトサイクルをＩ／Ｏリードサイクル及びＩ／Ｏライトサイクルとする。これにより、第３例と同様に、半導体集積回路に接続された各周辺回路についても、従来動作でのＷａｉｔサイクルを挿入する必要がなくなり、クロック信号のトグル回数を低減することが可能となる。
【００６３】
〔第５例〕
第５例では、半導体集積回路が備えたキャッシュメモリにヒットしたか否かによって動作周波数を可変することができるように半導体集積回路を構成する。図示しないが、第５例の半導体集積回路は、ＣＰＵ及びキャッシュメモリと、外部メモリと、を備えた構成とする。半導体集積回路において、通常、外部メモリへのデータアクセスは、内部メモリへのデータアクセスよりも時間がかかる。この対策として、ある領域のデータを前もって取り込むことが可能なキャッシュメモリを半導体集積回路に設ける。そして、ある領域のデータを前もってキャッシュメモリに取り込み、これらのデータへのアクセス要求があったときには、キャッシュメモリに予め書き込んでおいたデータを読み出すことで、半導体集積回路を高速に動作させることが可能になる。第５例では、キャッシュメモリにヒットした（予め書き込んだ内容をキャッシュメモリから読み出す）場合と、キャッシュミスした（読み出す内容がキャッシュメモリに予め書き込まれてなく、外部メモリからデータを読み出す）場合と、によってクロックを実行命令単位または実行サイクル単位に切り替えるように、制御手段であるＣＰＵで制御し、より効率的に動作させる。つまり、キャッシュメモリにヒットしなかった場合には、外部周辺メモリの動作速度に合わせてクロックを低速にするように、ＣＰＵで制御する。また、キャッシュメモリにヒットした場合には周波数を速くして、より高速にデータを読み込むようにＣＰＵで制御する。さらに、このときデータ取り込みのサイクル及びその際に動作する機能ブロックのみを低速クロックで動作させ、それ以外のサイクルおよび機能ブロックは高速のまま動作させるようにＣＰＵで制御することもできる。
【００６４】
次に、図５に基づいて半導体集積回路の動作を説明する。図５は、第５例に係る半導体集積回路の動作を説明するためのフローチャートである。まず、半導体集積回路のＣＰＵは、所定の内容を読み出す場合、キャッシュメモリにアクセスし、その内容がヒットしたか否かによって、異なる処理を行う（ステップ１０１）。つまり、キャッシュメモリにヒットした場合は、所定の高速クロックでキャッシュにアクセスして、所定のデータを読み出す（ステップ１０２）。そして、ＣＰＵは次の命令を読み出す（ステップ１０４）。一方、ステップ１０１において、キャッシュメモリにヒットしない（キャッシュミスした）場合は、所定の低速クロックで外部メモリにアクセスして、所定のデータを読み出す（ステップ１０３）。そして、同様に、ＣＰＵは次の命令を読み出す（ステップ１０４）。
【００６５】
〔第６例〕
半導体集積回路が命令やデータのパイプラインを持つ場合、同時に処理される内容によっては、各パイプラインステージの処理量に差がある。このような場合、通常は処理の少ないステージでは処理完了後処理の多いステージが処理完了するまでデータを準備した状態で待つことになる。そこで、第６例では、上記のような場合、ステージ毎にクロックを分離して、処理が少ない場合には、そのステージのみ動作周波数を遅くして、各ステージでの処理完了のタイミングを合わせることができるように半導体集積回路を構成する。これにより、データ保持している間の無駄な動作による電力の消費をなくすことができる。
【００６６】
例えば、特開平６−２９５２４３号公報及び特開平８−１４７１６１号公報のデータ処理装置では、上記のような場合、各ステージで処理完了次第クロックを停止（ウェイトステート）させている。クロックが停止またはウェイトステートに入っている期間は内部動作が少ないため、この期間の消費電流は他の期間に比べて少なくなる。しかしながら、ただ何もしないサイクルが存在するならば、その前に行った処理をこのクロック停止もしくはウェイトの時間を有効に使ってゆっくりと処理させてやることで、電力消費を平均化させることができ、また、回路動作時のピーク電流を抑えることに有効である。
【００６７】
図６は、パイプライン方式の半導体集積回路における従来及び第６例の処理方法を説明するためのタイミングチャートである。図６では、パイプライン処理として、ステージ１〜３の処理を行うものとする。図６（Ａ），（Ｂ）のデータ１、データ２、データ３において、パイプライン３１における各ステージのデータ処理期間を［−］で表し、データ処理完了後のデータ保持期間を［確］で表す。また、処理結果が確定するまでの各クロックで各々のステージが処理するデータ量を１としたときに、各クロックでの処理量がトータルでどれだけになるかを計算した結果を、波形の下の数値で示す。従来手法である図６（Ａ）では、各命令処理サイクルの前半では、全てのステージがそれぞれデータ量１の処理を行うため、回路全体では処理数は３になる。ところが、処理サイクルの後半では、３つのステージのうち１つまたは２つのステージでは既に処理が終了しているため、最終クロックでのデータ処理量は１〜２に低下している。これに対して、第６例では、図６（Ｂ）に示したように、処理数がサイクル内で平均的になるように、制御手段であるＣＰＵでサイクル内での総処理数に合わせてクロックを低速になるように制御する。これにより、処理サイクル内での処理数は一定となり、最大２．６まで下がっている。また、ピーク電流の低下は、レイアウト上では電源配線を細くすることができ、これにより、バッテリの寿命を延ばすことができる。
【００６８】
〔第７例〕
第７例では、スーパスケーラの機能を持つ場合にも、同様に信号経路毎にクロックを独立して入力するように構成し、また、処理の少ない信号経路の動作周波数は遅くすることで消費電力を低減しつつ、外部への信号出力タイミングは従来と同じにできるように、半導体集積回路を構成する。処理の多少については、実行する命令の種類、演算の種類及び制御する周辺回路によって処理量の重み付けを行い、このテーブルを元に処理の重／軽の決定を行う。図７は、スーパスケーラ機能をもつ半導体集積回路の構成及び処理を説明するための図である。スーパスケーラでは複数の実行ユニットを持ち、実行時に同時に実行できる処理を判断し、これらの処理をハードウェア的に各々の実行ユニットに振り分け、並列に処理を行うように、制御手段であるＣＰＵで制御する。図７（Ａ）に示したように、この例では命令を２つの処理系統に振り分ける際、パイプライン４２には処理の重いもの（処理負荷が大きいもの）を、パイプライン４１には処理の軽いもの（処理負荷が小さいもの）を、優先的に振り分けるように制御する。そして、パイプライン４２には高速のＣＬＫＨを与え、パイプライン４１には低速のＣＬＫＬを与える。これにより、軽い処理は低速クロックで、重い処理は高速クロックで処理した結果がほぼ同時に出力されるようになり、処理の早く終わった処理系統が無駄にＣＬＫをカウントすることなく処理を行うことが可能となる。この例では、処理系統は２系統でクロックもＣＬＫＨ，ＣＬＫＬの２種類であるが、３種類以上のクロック及び処理系統を持つことで、より効率的な処理が可能となる。
【００６９】
処理の重み付けは命令の種類、演算の種類、アクセスする周辺回路などによって予めテーブルを準備しておく。そして、図７（Ｂ）に示したように、順次流れてきた命令を命令の重みに応じて、ＣＰＵは２つのユニットに振り分ける。命令はａ〜ｇの７種類とし、命令の重み付けは命令ａが最も重く、命令ｇが最も軽いものと設定を行ったものとする。また、命令は２つずつがセットで処理され、２つのうちのどちらが重いかで振り分けるように制御する。この結果、１段目の処理では命令ａと命令ｂが入力され、命令ａよりも処理の軽い命令ｂが低速ＣＬＫのパイプライン４１へ入力され、命令ｂよりも処理の重い命令ａが高速ＣＬＫのパイプライン４２へ入力される。以降、順次比較を行い、処理の軽い命令は低速側パイプライン、重い命令は高速側パイプラインで処理を行う。
【００７０】
〔第８例〕
第８例では、ＶＬＩＷ（Very Long Instruction Word）型の回路の場合にも同様に信号経路毎にクロックを分離して経路毎に周波数を変更できるように、半導体集積回路を構成する。図８は、ＶＬＩＷ型の半導体集積回路の処理例を示した図である。ＶＬＩＷでは、制御手段であるＣＰＵがプログラムをコンパイルする際、予め同時に実行できる命令を並列に並べて通常１００bit以上の命令コードフォーマットに変換して処理を行う。そこで本発明では、ＣＰＵがプログラムをコンパイルする時に各処理の内容から最適なクロック周波数を各々選択しておき、それに基づいて処理を行うようにする。図８では説明を簡略化するため、４つの命令を並列に処理する構成とする。この場合、ＣＰＵは、インストラクションを４ワードの命令に変換する際に各々の処理に対する最適な周波数を選択し、それぞれのステージで異なる周波数によって動作を行う。これにより、トータルの処理時間は一切低下させずに、内部の無駄な動作を削減して、システムの性能はそのままに消費電力を低減できる。
【００７１】
なお、図８に示した例では、クロックはＣＬＫＨ、ＣＬＫＬの２種類であるが、３種類以上のクロックを用いることで、より効率的な処理が可能となる。
【００７２】
〔第９例〕
本発明の実施形態である第９例では、クロックツリーを構成する際に、クロックの使用頻度によって各々のクロックに対して重み付けを行い、使用頻度の高いクロックが周波数選択回路のツリー構造において最終段に近くなるように、半導体集積回路を構成する。これにより、クロック切替えを行うパスの負荷が低減され、素早くクロックを変更することができる。以下に第９例の一例を図９に基づいて説明する。図９は、クロックツリーの構成回路及びクロック切替え時の充放電量を示した図である。図９（Ａ）に示した通常のクロックツリー６０は、機能ブロックＸ６２に入力されるクロックが、４入力１出力のセレクタＡ６１によってＣＬＫ１〜ＣＬＫ４のうちの何れかが選択・供給される構成である。このとき、パスｎ１の負荷により、クロックの切替えの瞬間、クロック波形が不安定になることが考えられる。
【００７３】
これに対して、本発明では図９（Ｂ）に示したように、クロックツリー７０では、全てのセレクタを２入力１出力セレクタとして多段構成とする。セレクタは入力の数が少ないほど、出力の負荷は少なくなる。最も使用頻度の高いＣＬＫ１はブロックＸ７４に一番近いセレクタＢ７１に直接接続する。次に、使用頻度の高いＣＬＫ２はセレクタＣ７２に直接接続する。セレクタＢ７１がＣＬＫ１を選択している間、ノードｎ３にはＣＬＫ２を出力しておくように、制御手段である図外のＣＰＵで制御する。セレクタＢ７１が切り替わる時、既にセレクタＢ７１の入り口に準備されているＣＬＫ２が即座に入力される。既に述べた通り、セレクタＢ７１の出力負荷はセレクタＡ６１に比べ軽いため、クロック切り替わりの瞬間もクロック波形は比較的安定している。ＣＬＫ３、ＣＬＫ４からは負荷が重たくなるが、これらのクロックを使用する頻度は低く、ブロックＸ７４に入力する為には前もってセレクタＤ７３、セレクタＣ７２を切り替えておけば、セレクタＢ７１が切り替わる時には、ｎ３に対して安定したＣＬＫ３またはＣＬＫ４を供給することが可能である。ＣＬＫ１→ＣＬＫ２→ＣＬＫ１→ＣＬＫ２→ＣＬＫ３と切り替わるとき、クロックツリー６０，７０に示したそれぞれの回路でどれだけの負荷を充放電することになるかを図９（Ｃ）に示す。なお、ノードｎ１の負荷は４、ノードｎ２〜ｎ４の負荷は２となる。使用頻度の低いＣＬＫ３、４を使用するときには充放電の量が多くなるが、使用頻度の高いＣＬＫ１、ＣＬＫ２の切替え時には充放電の量が少なくなるため、本発明のクロックツリー７０は、トータルでは充放電量が低減される。
【００７４】
〔第１０例〕
第１０例では、コンパイラで各命令実行時の処理速度を認識させて、各々の命令実行時に最適な動作周波数を判断させて、出力されるコードの中にその周波数を決定するビットを生成するように、半導体集積回路を構成する。つまり、異なる動作周波数で動作させても良い場所を命令の処理内容や該命令の前後の命令との関係からＣＰＵが備えたコンパイラで決定し、該命令中の一部のビットにその情報をＣＰＵが書き込むように構成し、また、一部または全てのブロックの動作周波数を命令単位または実行サイクル単位で変更または停止可能に半導体集積回路を構成する。これにより、プログラム担当者は内部回路の動作速度を意識することなく、自動的に最適なスピードで回路を動作させることができる。
【００７５】
【発明の効果】
本発明によれば、以下の効果が得られる。
【００８４】
（１）クロックツリーを構成する際に、動作周波数の使用頻度によって各々の動作周波数に対して重み付けを行い、使用頻度の高い動作周波数が選択手段のツリー構造において最終段に近くなるように、半導体集積回路を構成するので、動作周波数切替えを行うパスの負荷が低減され、素早く動作周波数を変更することができる。また、単純にクロックツリーを構成したときと比較してクロック切替え時に充放電が必要な配線容量が少なくて済むため、より安定した動作が得られる。
【図面の簡単な説明】
【図１】第１例に係る半導体集積回路の動作タイミングチャート及び従来の半導体集積回路の動作タイミングチャートである。
【図２】選択回路の回路構成図である。
【図３】半導体集積回路において命令コードと各ブロックのクロックと関係を示した図である。
【図４】第３例の回路構成図及びタイミングチャートと、従来のタイミングチャートである。
【図５】第５例に係る半導体集積回路の動作を説明するためのフローチャートである。
【図６】パイプライン方式の半導体集積回路における従来及び第６例の処理方法を説明するためのタイミングチャートである。
【図７】スーパスケーラ機能をもつ半導体集積回路の構成及び処理を説明するための図である。
【図８】ＶＬＩＷ型の半導体集積回路の処理例を示した図である。
【図９】クロックツリーの構成回路及びクロック切替え時の充放電量を示した図である。
【図１０】半導体集積回路の一般的な回路構成図、及び所定の状態における各ブロックの状態を示した図である。
【符号の説明】
１１−選択回路
１２，１３−セレクタ
２０−半導体集積回路
３１，３２，４１，４２−パイプライン
６０，７０−クロックツリー
６１−セレクタＡ
６２，７４−ブロックＸ
【図１】
0003880310.tif 000002
【図２】
0003880310.tif 000003
【図３】
0003880310.tif 000004
【図４】
0003880310.tif 000005
【図５】
0003880310.tif 000006
【図６】
0003880310.tif 000007
【図７】
0003880310.tif 000008
【図８】
0003880310.tif 000009
【図９】
0003880310.tif 000010
【図１０】
0003880310.tif 000011