(57)【特許請求の範囲】
【請求項１】
クロック源から内部クロックを生成する内部クロック生成回路と、第１レジスタと、第２レジスタと、テーブル回路と、複数の動作モードを有する内部回路とを備え、
前記第１レジスタは、前記クロック源の周波数と前記内部クロックの周波数との相対的な関係を規定する第１情報を格納可能であり、
前記第２レジスタは、前記クロック源の周波数を示す第２情報を格納可能であり、
前記内部クロック生成回路は、前記第１レジスタに格納される前記第１情報に基づいて前記内部クロックを生成し、
前記内部回路は、供給される制御信号に基づいて動作モードが規定され、
前記テーブル回路は、前記第１情報と前記第２情報とに対応づけて前記制御信号に出力する制御情報を記憶可能であり、前記第１レジスタから供給される前記第１情報と前記第２レジスタから供給される前記第２情報とに基づいて、対応する制御情報を前記制御信号に出力するものであって、
前記テーブル回路は、前記第１情報と前記第２情報をデコードしてデコード結果を出力するデコード回路と、前記デコード結果に対応づけて前記制御情報を記憶する記憶回路とを有し、前記記憶回路は前記デコード結果に応じた前記制御情報を前記制御信号に出力する、
半導体集積回路。
【請求項２】
請求項１において、前記テーブル回路は、不揮発性メモリと転送回路とをさらに備え、
前記不揮発性メモリは、前記第１情報及び前記第２情報と対応付けて前記制御情報を記憶し、
前記転送回路は、前記不揮発性メモリに記憶された前記制御情報を前記記憶回路に転送する、
半導体集積回路。
【請求項３】
請求項１において、前記半導体集積回路は、接続される発振子に応じた周波数の前記クロック源を生成する発振回路を備え、
前記第１情報は、前記発振子に応じた周波数の情報を含む、
半導体集積回路。
【請求項４】
請求項１において、前記半導体集積回路は、前記制御信号に所定の遅延を与える遅延回路を、前記テーブル回路の後段に備える、
半導体集積回路。
【請求項５】
請求項４において、前記所定の遅延は、
前記内部クロックの周波数が高くなる方向に変更される場合には、前記制御信号を前記変更よりも前に遷移させる遅延量とされ、
前記内部クロックの周波数が低くなる方向に変更される場合には、前記制御信号を前記変更よりも後に遷移させる遅延量とされる、
半導体集積回路。
【請求項６】
請求項１において、前記デコード結果には、前記第１情報が設定を禁止された状態であることを示す第１のデコード値が含まれ、前記記憶回路が記憶する前記制御情報には、前記デコード結果が前記第１のデコード値である場合に対応づけられた第１の制御情報が含まれる、
半導体集積回路。
【請求項７】
請求項６において、前記第１レジスタは、新たな新第１情報が設定される前の旧第１情報を保持する第２の記憶回路をさらに備え、
前記半導体集積回路は、前記新第１情報が設定される前に前記テーブル回路から出力されていた旧制御情報を保持する第３の記憶回路をさらに備え、
前記新第１情報についての前記デコード結果が、前記新第１情報が設定を禁止された状態であることを示す前記第１のデコード値である場合には、前記第１レジスタの出力として、前記第２の記憶回路に記憶される前記旧第１情報が出力され、前記制御情報として前記第３の記憶回路に記憶される前記旧制御情報が出力される、
半導体集積回路。
【請求項８】
請求項６において、前記デコード結果には、前記第１情報が推奨されない状態であることを示す第２のデコード値がさらに含まれ、前記記憶回路が記憶する前記制御情報には、前記デコード結果が前記第２のデコード値である場合に対応づけられた第２の制御情報がさらに含まれる、
半導体集積回路。
【請求項９】
請求項１から請求項８のうちのいずれか１項において、
前記内部回路は、電流供給能力が調整可能な電源供給回路であり、前記複数の動作モードのそれぞれに対応して、前記電流供給能力の大きさが規定され、前記制御信号に基づいて前記電流供給能力の大きさが調整される、
半導体集積回路。
【請求項１０】
クロック源から内部クロックを生成する内部クロック生成回路と、第１レジスタと、テーブル回路と、複数の動作モードを有する内部回路とを備え、
前記第１レジスタは、前記クロック源の周波数と前記内部クロックの周波数との相対的な関係を規定する第１情報を格納可能であり、
前記第１情報は、前記クロック源の周波数に対応する情報であり、
前記内部クロック生成回路は、前記第１レジスタに格納される前記第１情報に基づいて前記内部クロックを生成し、
前記内部回路は、供給される制御信号に基づいて動作モードが規定され、
前記テーブル回路は、前記第１情報に対応づけて前記制御信号に出力する制御情報を記憶可能であり、前記第１レジスタから供給される前記第１情報に基づいて、対応する制御情報を前記制御信号に出力するものであって、
前記テーブル回路は、前記第１情報をデコードしてデコード結果を出力するデコード回路と、前記デコード結果に対応づけて前記制御情報を記憶する記憶回路とを有し、前記記憶回路は前記デコード結果に応じた前記制御情報を前記制御信号に出力し、
前記デコード結果には、前記第１情報が設定を禁止された状態であることを示す第１のデコード値が含まれ、前記記憶回路が記憶する前記制御情報には、前記デコード結果が前記第１のデコード値である場合に対応づけられた第１の制御情報が含まれる、
半導体集積回路。
【請求項１１】
請求項１０において、前記第１レジスタは、新たな新第１情報が設定される前の旧第１情報を保持する第２の記憶回路をさらに備え、
前記半導体集積回路は、前記新第１情報が設定される前に前記テーブル回路から出力されていた旧制御情報を保持する第３の記憶回路をさらに備え、
前記新第１情報についての前記デコード結果が、前記新第１情報が設定を禁止された状態であることを示す前記第１のデコード値である場合には、前記第１レジスタの出力として、前記第２の記憶回路に記憶される前記旧第１情報が出力され、前記制御情報として前記第３の記憶回路に記憶される前記旧制御情報が出力される、
半導体集積回路。
【請求項１２】
請求項１０において、前記デコード結果には、前記第１情報が推奨されない状態であることを示す第２のデコード値がさらに含まれ、前記記憶回路が記憶する前記制御情報には、前記デコード結果が前記第２のデコード値である場合に対応づけられた第２の制御情報がさらに含まれる、
半導体集積回路。
【請求項１３】
請求項１０から請求項１２のうちのいずれか１項において、
前記内部回路は、電流供給能力が調整可能な電源供給回路であり、前記複数の動作モードのそれぞれに対応して、前記電流供給能力の大きさが規定され、前記制御信号に基づいて前記電流供給能力の大きさが調整される、
半導体集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路に関し、特にレジスタ設定によって動作周波数を調整可能であり合せて動作モードを変更可能な半導体集積回路に好適に利用できるものである。
【背景技術】
【０００２】
半導体集積回路（ＬＳＩ：Large Scale Integrated circuit）、例えばマイクロコンピュータでは、高速なデータ演算などの高速な処理を実行する必要がある場合と、外部割り込みなどの待ち受けなど特に高速な処理を必要としない場合がある。このため、低消費電力化を目的として、プログラムで高速な処理を実行する場合には高速クロックを使用し、待ち受け時にはプログラムで低速クロックに切り替えるような使用形態が一般的である。
【０００３】
このため、マイクロコンピュータのハードウェアは、内部で複数種類の周波数のクロックを生成し、その間で動作クロックを切り替えるなどの方法によって、動作クロックの周波数を適宜変更することができるように構成されている。例えば、内蔵または外部に設置された発振器で生成されるクロックに対して、ＰＬＬ（Phase Locked Loop）などを用いて高速クロックを生成し、このクロックを分周して低速クロックを生成する。また、複数の発振器、例えば時計用の３２ｋＨｚ発振器で生成される低速クロックを生成する。マイクロコンピュータは、動作クロック周波数をプログラムで適宜切り替えられる構成となっている。
【０００４】
このように、マイクロコンピュータでは、低速クロックから高速クロックまでの種々の周波数のクロックで動作させる必要があるが、内部回路のトランジスタの電流駆動能力を高速動作が可能なように合わせ込み、低速クロックでもそのまま動作させると、低速クロック領域ではトランジスタが必要以上の電流駆動能力を持つこととなり、電力効率が悪化していた。これに対して、低消費電力化を行うため、従来、例えば以下のような種々の方策がとられてきた。
（１）低速クロックでは、内蔵する降圧レギュレータの電圧を低くして消費電力を抑える。
（２）低速クロックでは、内蔵する降圧レギュレータの電流供給能力を低くし、あるいはその数を少なくして、レギュレータの固定電流を削減する。
（３）内蔵メモリでは、高速クロックで動作するときには、高速読み出しのため常時センスアンプを動作させるのに対して、低速クロックで動作するときには、読み出し要求が発生したときだけセンスアンプを動作させる。
【０００５】
一方、半導体集積回路の外部から供給されるクロック信号の周波数の高低や範囲を検出して、内部回路へ供給する電源電圧を変更し、或いは、動作モードを変更する技術が、以下のように提案されている。
【０００６】
特許文献１には、入力されるクロック信号の周波数を検出する回路手段として、微分回路と積分回路とコンパレータとを備える、集積回路が開示されている。入力されたクロック信号を微分回路で微分した後に、積分回路を通すことによって、周波数に依存する電圧レベルを出力し、コンパレータで所定のレベルと比較する。通常クロックが入力された場合は周波数が高いので積分回路の出力レベルは高く、上記所定のレベルを超える一方、テスト用クロックが入力されたときには、その周波数が低いため、積分回路の出力レベルは低く、上記所定のレベルを超えない。コンパレータの出力に応じて通常動作モードかテストモードかを切替えることによって、モード切替端子をさらに設けて端子数を増やす必要がない。
【０００７】
特許文献２には、機能回路ブロックへ供給される動作電圧をシステムの動作速度に応じて変更することができる動作電圧変換装置を備えた、集積回路装置が開示されている。動作電圧変換装置は、入力されるクロックの周波数を検出する周波数検出回路と、複数電圧の動作電圧を発生する低電圧電源回路と、検出された周波数に応じて動作電圧を選択する電源選択回路とを有する。
【０００８】
特許文献３には、入力クロック同期信号を基に高速動作であるか低速動作であるかを判断して、内部回路を切り替えることにより高速動作及び低消費電力動作の何れにも対応可能な半導体装置が開示されている。入力される入力クロックに対して所定の位相関係を有した内部クロックを生成するクロック生成回路と、クロック生成回路の内部信号に基づいて入力クロックの周期を判定する判定回路と、判定回路の判定結果に応じて動作モードを切り替える内部回路を含んで構成される。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開昭５７−１１１７１４号公報
【特許文献２】特開昭５８−１７１８４２号公報
【特許文献３】特開平１０−２０９２８４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
半導体集積回路、特に例えばマイクロコンピュータなどの汎用な半導体集積回路では、レジスタ設定などによって、動作周波数を広範囲かつ動的に変更することができる。また、このような半導体集積回路の内部回路は、動作周波数に応じた種々の動作モードを有し、これもレジスタ設定によって自由に変更することができる。動作周波数を規定するレジスタ設定と内部回路の動作モードを規定するレジスタ設定は、いずれも実行されるプログラムの中で行われるが、動作周波数の設定変更に伴って、内部回路の動作モードを適切に変更する必要があるため、プログラム設計者への負担が重いという課題がある。
【００１１】
内部回路の動作モードを適切に設定するためには、そのときの動作周波数を的確に把握している必要がある。しかしながら、複数かつ多重の割り込みの発生、例外処理の発生などに伴って、当該プログラムの実行中に常にそのときの動作周波数を正確に把握することが、プログラム設計者にとって重い負担となることがわかった。さらに、動作周波数が低い期間に内部回路が高い動作周波数に動作モードに設定されていても、機能の上では正常に動作するため、電力効率が低下していることを簡便に検知することができないという問題があることもわかった。例えばプログラムの開発段階で電力効率が低下したままでのプログラム検証を進めた後に、電力効率の低下の問題が発見されると、動作モード設定を適正に変更した後にもう一度プログラム検証を行う必要が生じる場合もあり得る。
【００１２】
また、半導体集積回路の消費電力の無駄をさらに減らすために、内部回路の動作モードは、より細かく細分化されていく傾向にある。そのため、プログラム設計者への負担もより重くなる傾向にある。
【００１３】
これに対して、特許文献１、２及び３に記載される技術を採用すれば、動作周波数を測定して自動的に（自律的に）内部回路の動作モードを適切に変更することができるものと期待される。そこで、特許文献１、２及び３について本発明者が検討した結果、以下のような新たな課題があることがわかった。
【００１４】
特許文献１に記載される技術は、２通りの動作モード（通常モードとテストモード）を、入力されたクロック周波数の高低によって判別することができる回路であるから、閾値となる周波数は微分回路と積分回路の回路定数によって規定されるので、判定のための回路規模が大きい。動作周波数を多段階で判定しようとすれば、その回路規模はますます増大する。
【００１５】
特許文献２に記載される技術では、周波数範囲を多段階で検出することができるものの、主にカウンタ回路で構成される周波数検出回路と多階調のアナログ電圧レベルを発生する定電圧発生回路と、比較回路（電圧選択回路）によって構成されるため、やはり回路規模が大きい。
【００１６】
特許文献３に記載される技術においても、入力される入力クロックに対して所定の位相関係を有した内部クロックを生成するクロック生成回路と判定回路とを搭載する必要がある。
【００１７】
動作周波数を測定しまたは判定するためには、いずれの技術によっても、規模の大きい回路を搭載する必要があり、回路規模を増加させる要因となる。
【００１８】
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１９】
一実施の形態によれば、下記の通りである。
【００２０】
すなわち、供給されるパラメータに応じてクロック源から内部クロックを生成する内部クロック生成回路と、クロック源の周波数情報を格納するレジスタと、前記パラメータを格納するレジスタと、複数の動作モードを有する内部回路とを備える半導体集積回路において、レジスタから供給される周波数情報とパラメータとに対応づけて内部回路の動作モードを制御するテーブル回路を備える。
【発明の効果】
【００２１】
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
【００２２】
すなわち、周波数測定回路や周波数判定回路などの大規模な回路を搭載することなく、内部回路の動作モードが内部クロックの周波数に応じて変更されるため、プログラム上の負担を軽減することができる。
【図面の簡単な説明】
【００２３】
【図１】図１は、実施形態１の半導体集積回路の構成例を示すブロック図である。
【図２】図２は、レジスタの構成例を示す回路図である。
【図３】図３は、テーブル回路の構成例を示す回路ブロック図である。
【図４】図４は、テーブル回路の機能の一例を示す真理値表である。
【図５】図５は、実施形態１の半導体集積回路の動作例を示すフロー図である。
【図６】図６は、テーブル回路の実施形態２の構成例を示す回路ブロック図である。
【図７】図７は、図６のテーブル回路の機能の一例を示す真理値表である。
【図８】図８は、半導体集積回路で実行されるプログラムコードの生成手順を示すフローチャートである。
【図９】図９は、テーブル回路の後段に設ける制御信号の遅延を制御する回路の動作例を示す波形図である。
【図１０】図１０は、テーブル回路の後段に設ける制御信号の遅延を制御する回路の構成例を示す回路図である。
【図１１】図１１は、実施形態４の半導体集積回路におけるレジスタとテーブル回路の周辺の構成例を示すブロック図である。
【図１２】図１２は、実施形態４のテーブル回路の構成例を示す回路ブロック図である。
【図１３】図１３は、実施形態４のテーブル回路の機能の一例を示す真理値表である。
【図１４】図１４は、課題検討用の半導体集積回路の構成例を示すブロック図である。
【図１５】図１５は、図１４の半導体集積回路の動作例を示すフロー図である。
【発明を実施するための形態】
【００２４】
実施の形態について詳述する。なお、発明を実施するための形態を説明するための全図において、同一の機能を有する要素には同一の符号を付して、その繰り返しの説明を省略する。
【００２５】
〔検討例〕
発明を実施するための形態について説明する前に、発明が解決しようとする課題について、より具体的な検討例をあげて説明する。
【００２６】
図１４は、本発明者が作成した、課題検討用の半導体集積回路１の構成例を示すブロック図である。「背景技術」の（２）に示した技術に対応するものであって、１は半導体集積回路であり、マイクロコンピュータを例にとって説明する。図中の配線は、それぞれ任意の本数の信号線で実装されるが、図では１本か複数本かの区別はせず、所謂ベクトル表記は省略されている。このことは、本願における他の図面についても同様であり、所謂ベクトル表記は省略される場合がある。
【００２７】
２はＣＰＵ（Central Processing Unit）、３は不揮発性で書き替え可能なメモリ、４と５はタイマなど任意の機能（「機能Ａ」、「機能Ｂ」で示す）を有する機能モジュールであり、バス１８を介して互いに接続されている。６は発振器、７はＰＬＬ（Phase Locked Loop）、８と９はセレクタ、１０は内蔵発振器、１１と１２はクロックをそれぞれ２分周と４分周する分周器であり、全体として内部クロック１９を生成する内部クロック生成回路を構成している。ただし、「内部クロック生成回路」という階層は、図示が省略されている。
【００２８】
外部に発振子２６が接続された発振器６はクロック源信号を生成し、ＰＬＬ７を介して逓倍クロックを生成する。一方、内蔵発振器１０は、例えば１ＭＨｚの内蔵クロック源信号を生成する。セレクタ８は逓倍クロックか内蔵発振器１０によって生成された内蔵クロック源信号かを選択し、更にセレクタ９は、前記セレクタ８の出力（分周なし）か、前記セレクタ８の出力が分周器１１で２分周されたクロックか、前記セレクタ８の出力が分周器１２で４分周されたクロックかを選択して、内部クロック１９として出力する。内部クロック１９は、ＣＰＵ２、メモリ３、機能モジュール４及び５などの内部回路に供給される。
【００２９】
６ａ、７ａ、８ａ、９ａは、メモリ３に格納されたプログラムをＣＰＵ２が実行することによって、バス１８を介して書き込みと読み出しができるレジスタである。レジスタ６ａ、７ａ、８ａ、９ａは、内部クロック生成回路に対してパラメータを供給する。内部クロック生成回路は供給されるパラメータに基づいて、クロック源信号または内蔵クロック源信号などのクロック源から内部クロック信号１９を生成する。例えば、レジスタ６ａから供給されるパラメータ６ｂによって発振器６が制御され、“０”で停止、“１”で動作とされる。レジスタ７ａから供給されるパラメータ７ｂによってＰＬＬ７が制御され、“０”でＰＬＬが動作を停止してクロック源信号を逓倍せずに出力し、“１”でＰＬＬによる逓倍動作を行う。レジスタ８ａから供給されるパラメータ８ｂによってセレクタ８が制御され、“０”で内蔵発振器（１ＭＨz）１０の内蔵クロック源信号を選択し、“１”でＰＬＬ７から出力される逓倍クロックを選択する。レジスタ９ａから供給されるパラメータ９ｂによってセレクタ９が制御され、“０”で分周器１２（４分周）を選択、“１”で分周器１１（２分周）を選択、“２”でセレクタ８の出力（分周なし）を選択する。
【００３０】
２１はリセット端子であり、リセット信号Ｒｅｓｅｔ＿ｎにより、半導体集積回路１の種々の内部回路の初期化を行う。
【００３１】
１３、１４、１５は降圧レギュレータであり、低速用降圧レギュレータ１３、中速用降圧レギュレータ１４、及び、高速用降圧レギュレータ１５で構成され、電源端子２０から供給される外部電源を降圧し、半導体集積回路１に内部電源を供給する。１４ａ及び１５ａは、メモリ３に格納されたプログラムをＣＰＵ２が実行することによって、バス１８を介して書き込みや読み出しができるレジスタであり、中速用降圧レギュレータ１４及び高速用降圧レギュレータ１５に対して制御信号１４ｂ及び１５ｂを供給する。低速用降圧レギュレータ１３は常時動作する。中速用降圧レギュレータ１４はレジスタ１４ａから供給される制御信号１４ｂによって制御され、高速用降圧レギュレータ１５はレジスタ１５ａから供給される制御信号１５ｂによって制御される。例えば、中速用降圧レギュレータ１４は制御信号１４ｂが“０”で動作、“１”で停止、高速用降圧レギュレータ１５は制御信号１５ｂが“０”で動作、“１”で停止とされる。
【００３２】
これらレギュレータ１３、１４、１５は、その組み合わせによって、半導体集積回路１の動作周波数に応じた電流量の内部電源を供給することができる。例えば、高速動作時には、消費電力が大きいので内部電源に供給すべき電流量も大きいため、すべてのレギュレータ１３、１４及び１５を動作させる。中速動作時には消費電力が中程度となるので内部電源に供給すべき電流量も中程度となるため、低速用降圧レギュレータ１３と中速用降圧レギュレータ１４とを動作させるが、高速用降圧レギュレータ１５は停止させる。低速動作時には消費電力が最低となるので内部電源に供給すべき電流量も最小となるため、低速用降圧レギュレータ１３のみを動作させ、中速用降圧レギュレータ１４と高速用降圧レギュレータ１５とは停止させる。レギュレータ１３、１４、１５は、その電流供給能力に応じて固定電流を消費するため、必要最小限のレギュレータのみを動作させ、他のレギュレータを停止させることによって、レギュレータの固定電流に起因する、半導体集積回路１の消費電流を削減することができる。
【００３３】
機能モジュール４及び５には、それぞれレベルシフタ２２を介してＩ／Ｏ２３が接続され、外部端子２４及び２５を介して外部との信号のやり取りを行う。レベルシフタ２２は、降圧レギュレータ１３、１４、１５で生成された内部電源と電源端子２０から供給される外部電源との間で電圧レベルの変換を行い、外部電源で動作するＩ／Ｏ２３との間での信号の交換を助ける。機能モジュール４及び５には、ＡＮＤ回路１６及び１７が接続され、内部クロック信号１９をゲーティングして供給する。４ａと５ａは、メモリ３に格納されたプログラムをＣＰＵ２が実行することによって、バス１８を介して書き込みと読み出しができるレジスタであり、ＡＮＤ回路１６と１７に対して制御信号４ｂ及び５ｂを供給する。ＣＰＵ２は機能モジュール４が使用されない場合に、レジスタ４ａに内部クロック信号１９の供給を停止する制御情報を書き込むことによって、機能モジュール４の動作を停止させる。機能モジュール５及びレジスタ５ａについても同様である。
【００３４】
図１５は、図１４に示した課題検討用の半導体集積回路１の動作例を示すフロー図である。半導体集積回路１が、レギュレータ１３〜１５の電流供給能力に応じて以下の３つの動作モードを備え、相互間で遷移するものとした場合の例である。
【００３５】
高速動作モードでは、すべてのレギュレータ１３、１４及び１５が動作し、ＰＬＬ７、セレクタ９の分周なし経路を使用した高速演算が実行可能である。
【００３６】
中速動作モードでは、高速用降圧レギュレータ１５が停止し、中速用降圧レギュレータ１４と低速用降圧レギュレータ１３が動作し、ＰＬＬ７、セレクタ９の４分周の経路を使用した中速演算が実行可能である。
【００３７】
低速動作モードでは、中速用降圧レギュレータ１４と高速用降圧レギュレータ１５とが停止し、低速用降圧レギュレータ１３のみが動作し、内蔵発振器１０を用いた、低速演算を実行するかまたは待機状態となり得る。
【００３８】
図１５の動作フローには、初めに、内蔵発振器１０を用いた低速演算を行い、次に、ＰＬＬ７、セレクタ９の分周なし経路を使用した高速演算を行い、次に、ＰＬＬ７、セレクタ９の４分周の経路を使用した中速演算を行い、最後に、内蔵発振器１０を用いた待機状態に遷移する場合の、低消費電力制御の動作を示す。
【００３９】
動作フローについて説明する。
【００４０】
電源投入ステップ（Ｓ１）では、電源端子２０へ電源が印加される。
【００４１】
リセット、リセット解除ステップ（Ｓ２）では、リセット端子２１からリセット信号がアサートされその後解除されて、半導体集積回路１が動作を開始する。リセットでは、レジスタ４ａ〜９ａ、１４ａ並びに１５ａは“０”にクリアされるものとする。すなわち、レジスタ出力信号４ｂ〜９ｂにより、クロック１９はセレクタ８と分周器１２（４分周）とセレクタ９を介して、内蔵発振器（１ＭＨｚ）６が選択される。また、機能モジュール（機能Ａ）４のクロックはレジスタ４ａの値“０”が信号４ｂを介してＡＮＤ回路１６に入力され、クロックが非供給となる。同様に機能モジュール（機能Ｂ）５のクロックはレジスタ５ａの値“０”が信号５ｂを介してＡＮＤ回路１７に入力され、クロックが非供給となる。更に、レギュレータ１４は、レジスタ１４ａの値“０”が信号１４ｂを介して接続されて動作状態となり、レギュレータ１５はレジスタ１５ａの値“０”が信号１５ｂを介して接続されて動作状態となる。即ち、クロック１９からは低速クロックが供給されるが、動作モードとしては、電流供給能力が最大の高速動作モードとなる。
【００４２】
次に不揮発性メモリ３に格納されたトリミングデータを読み出して、内蔵機能をトリミングする（Ｓ３）。
【００４３】
次にプログラムコードの実行を開始し、ＣＰＵ２がメモリ３に保持されたプログラムコードを実行する（Ｓ４）。この時点では、クロック１９からは低速クロックが供給され、動作モードは高速動作モードである。
【００４４】
次に、動作モードを高速動作モードから低速動作モードに移行する（Ｓ５）。つまり、ＣＰＵ２を使用して、レジスタ１４ａとレジスタ１５ａに“１”を書き込む。これにより、中速用降圧レギュレータ１４と高速用降圧レギュレータ１５とが停止し、低消費電力のモードに移行する。
【００４５】
次に演算１を実行する（Ｓ６）。この演算１は、クロック１９から供給される低速クロックに同期して、低速で演算処理される。
【００４６】
次に、動作モードを低速動作モードから高速動作モードに移行する（Ｓ７）。つまり、ＣＰＵ２を使用して、レジスタ１４ａとレジスタ１５ａに“０”を書き込み、中速用降圧レギュレータ１４と高速用降圧レギュレータ１５の動作を再開させる。これによって低消費電力のモードが解除される。このステップは、高速演算を実行するための準備である。
【００４７】
次に、クロック設定１を行う（Ｓ８）。レジスタ６ａ、７ａ、９ａを設定して、外部発振子２６、発振器６、ＰＬＬ７の経路を活性化し、さらにセレクタ９で分周なしの出力を選択する。
【００４８】
次に、クロック設定２を行う（Ｓ９）。すなわち、セレクタ８でＰＬＬ７を選択することで、クロック１９へのクロック信号の供給には、外部発振子２６の経路が選択され、高速クロックが供給される。
【００４９】
次に、演算２を行う（Ｓ１０）。演算２は、高速クロックに同期して、高速に演算処理される。このとき、ステップＳ７において予め高速動作モードに変更されているので、レギュレータ１３、１４及び１５からの電流供給は十分に大きい。
【００５０】
次に、クロック設定３を行う（Ｓ１１）。セレクタ９で“０”、すなわち分周器１２（４分周）を選択して、クロック１９をＰＬＬ７の４分周にする。クロック１９に供給されるクロックは、中速クロックに変更される。
【００５１】
次に、動作モードを高速動作モードから中速動作モードに切り替える（Ｓ１２）。つまり、レジスタ１４ａに“０”、レジスタ１５ａに“１”をＣＰＵ２で書き込む。
【００５２】
次に演算３を実行する（Ｓ１３）。この演算３は、クロック１９から供給される中速クロックに同期して、中速で演算処理される。
【００５３】
次に、クロック設定４を行う（Ｓ１４）。セレクタ８で内蔵発振器１０を選択する。内蔵発振器１０、セレクタ９の状態は変更しない。すなわちクロック１９は、内蔵発振器１０から分周器１２（４分周）の経路で供給される、低速クロックに変更される。
【００５４】
次に、動作モードを中速動作モードから低速動作モードに切り替える（Ｓ１５）。つまりレジスタ１４ａとレジスタ１５ａに“１”をＣＰＵ２で書き込み、高速用降圧レギュレータ１５に加えて中速用降圧レギュレータ１４も停止させる。これによってさらに低消費電力のモードに移行する。
【００５５】
次に、待機状態に入る（Ｓ１６）。外部割り込み等の待ち受け状態である。
【００５６】
なお、ステップＳ３に示す内蔵機能のトリミングは、レギュレータ１３~１５や内蔵するアナログ回路などの基準電圧や電流源などを、不揮発性メモリに保持したデータ（トリミング値）で調整するものであり、一般的な機能なのでここでは詳細な説明は省略する。
【００５７】
以上のように、クロック１９から供給するクロック信号の周波数設定（高速／中速／低速クロック）と、レギュレータ１３~１５の動作／停止によって制御される電流供給能力と固定電流の調整とは、ＣＰＵ２で実行されるプログラムによって、適切に設定変更される必要がある。例えば、ステップＳ１０において演算２を高速で演算処理するためには、その前にクロック１９を高速クロックに変更し、動作モードを高速動作モードに変更しておく必要がある。また例えば、ステップ１６において待機状態において消費電力を最小限に抑えるためには、その前にクロック１９を低速クロックに変更し、動作モードを低速動作モードに変更しておく必要がある。このため、クロック１９の周波数を変更する各ステップ（Ｓ８，Ｓ９，Ｓ１１，Ｓ１４）に対応して、動作モードを適宜変更するレジスタ設定のための各ステップ（Ｓ５，Ｓ７，Ｓ１２，Ｓ１５）が必要となる。
【００５８】
この方法では、内部クロックの状態を常に的確に把握している必要があるため、複数割り込み、多重に生じる割り込みなどの例外処理などを常に把握しておく必要があり、使い勝手が悪いという課題がある。また、この検討例では３つのモードを例としたが、きめ細かく電力を制御するため、より多くのモードを備えた場合などは、使い勝手がさらに悪くなる。
【００５９】
さらに詳しく説明する。
【００６０】
上述の例ではクロック周波数を高／中／低の３通り、動作モードを同じく高速／中速／低速の３通りとし、高速クロックには高速動作モードが適し、中速クロックには中速動作モードが適し、低速クロックには低速動作モードが適するというように、１：１に対応付けている。しかし、クロック周波数は外付けされる発振子２６によって、任意に与えられるので、実際には具体的な動作周波数（絶対値）に基づいて、適切な動作モードが対応付けられることとなる。また、この検討例ではクロック信号をクロック１９のみの１系統として説明したが、実際には複数のクロック系統が実装され、それぞれの周波数が可変とされる場合が少なくない。その場合の各クロックの周波数の組合せと適切な動作モードの対応関係は、複雑なものとなる。
【００６１】
次に、設定の順序の問題がある。動作モードをレギュレータの電流供給能力として説明したこの検討例では、高速動作モードでは高速、中速、低速のいづれのクロックでの動作も機能的な問題はない。中速、低速の場合にはレギュレータが必要最小限ではない分だけ、余計に固定電流を消費する問題があるだけである。一方、低速動作モードで中速または高速クロックを供給して演算処理などを実行すると、消費電流の供給不足により、機能的な不具合が発生する恐れがある。したがって、クロックを低速から高速に変更する場合にはクロックの変更よりも前に、動作モードを高速動作モードに変更しておく必要がある。逆にクロックを高速から低速に変更する場合には、クロックを変更した後に動作モードを変更する必要がある。このように、クロック周波数を変更しようとする場合には、その変更が周波数を高くする変更であるのか、低くする変更であるのかによって、動作モードの変更をクロック変更の前に行うか後で行うかを適切にプログラミングする必要がある。
【００６２】
このように、クロック周波数の変更は、これから実行する処理に適する周波数に設定すればよいというわけではなく、そのクロックの設定変更がクロック周波数を高くする方向か低くする方向か或いは変更する必要がないかまで把握する必要がある。また、同様にこれから実行する処理に応じた動作モードに、単純に変更すればよいというわけではなく、クロックの設定変更よりも前に行うべきか後で行うべきか、或いは変更する必要がないかを、適切に判断する必要がある。プログラミングでは、これから実行する処理に適するクロック周波数と動作モードを適切に把握することは容易である。処理の内容に応じて規定される仕様であって、静的なものだからである。これに対して、そのための設定変更を行う時点で、どのようなクロック周波数、どのような動作モードで動作しているかを把握することは、容易とはいえない。設定変更を行う時点のクロック周波数と動作モードは、複数の割り込みや多重の割り込みなどによって、動的に変わり得るからである。このため、クロック周波数と動作モードを保持するグローバル変数を準備し、設定変更の前に読み出して確認し、それによって、設定変更の要否と順序を変更するなどの処理ステップを、プログラム中に追加しておくなど別途の解決手段が必要となる。このため、使い勝手が悪いという課題となる。
【００６３】
〔実施形態１〕
図１は、本実施形態１の半導体集積回路１の構成例を示すブロック図である。上述の検討例と同様に、マイクロコンピュータを例にとって説明する。本実施形態１の半導体集積回路１は、図１４に示した検討例の半導体集積回路１と同じ構成要素を含み、さらにレジスタ３０とテーブル回路３１を備える一方、レジスタ１４ａ及び１５ａは省略される。検討例の半導体集積回路１に搭載されるレジスタ４ａ〜９ａを第一のレジスタ群と呼び、本実施形態１で追加されるレジスタ３０を第二のレジスタと呼ぶ。第二のレジスタ３０は、レジスタ４ａ〜９ａと同様にＣＰＵ２により書込みと読み出しが可能なレジスタである。レジスタ４ａ〜９ａにそれぞれ保持されるデータは、上述の検討例と同様に制御信号４ｂ〜９ｂとして半導体集積回路１内の各回路に供給されるのに加え、データ４ｃ〜９ｃとしてテーブル回路３１に入力される。第二のレジスタ３０に保持されるデータも、データ３０ａとしてテーブル回路３１に入力される。テーブル回路３１からの出力ＰＣＮＴ［１：０］３２は、２ビットの制御信号であり、下位ビット（ＰＣＮＴ［０］）側が中速用降圧レギュレータ１４に、上位ビット（ＰＣＮＴ［１］）側が高速用降圧レギュレータ１５に、それぞれ供給される。前記出力信号３２の下位ビット（ＰＣＮＴ［０］）が“０”のとき中速用降圧レギュレータ１４は動作し、“１”のとき停止する。同様に前記出力信号３２の上位ビット（ＰＣＮＴ［１］）が“０”のとき高速用降圧レギュレータ１５は動作し、“１”のとき停止する。それ以外の構成は、上述の検討例と同様であるので、説明を省略する。
【００６４】
第一のレジスタ群には、発振器６から供給されるかまたは内蔵発振器１０から供給されるクロック源の周波数と内部クロック１９の周波数との相対的な関係を示すパラメータが保持される。具体的には、機能モジュール４と５にそれぞれへのクロックの供給／停止を制御するパラメータ４ｂと５ｂ、発振器６を発振／停止を制御するパラメータ６ｂ、ＰＬＬ７の逓倍数を示すパラメータ７ｂ、セレクタ８を制御するパラメータ８ｂ、及び、分周器１１、１２による分周を行うか否かを選択するセレクタ９の選択信号であるパラメータ９ｂが、相対的な関係を示すパラメータの一例である。これに対して、第二のレジスタ３０には、クロック源の周波数の絶対値を示す情報が保持される。本実施形態１では、内蔵発振回路１０の発振周波数は固定であるので、外部に接続される発振子２６によって決まるクロック源の周波数または周波数レンジが保持される。このように、第一のレジスタ３０に格納されるクロック源のクロック周波数の絶対値情報と第二のレジスタ群に格納される相対的な関係を示すパラメータから、内部クロック１９の周波数の絶対値を算出することができる。ただし、明示的に周波数の絶対値を算出する必要はない。「相対的な関係」には、上述のような逓倍数、分周比のような比例関係だけではなく、発振器６または内蔵発振器１０を選択する選択的な関係、及び、機能モジュール４と５へのクロック１９の供給を停止するような制御的な関係が含まれてもよい。
【００６５】
テーブル回路３１は、第一のレジスタ群から入力される、クロック源の周波数と内部クロック１９の周波数との相対的な関係を示す情報と、第二のレジスタ３０から入力される、クロック源の周波数の絶対値を示す情報とに対応づけられている制御情報を、出力ＰＣＮＴ［１：０］３２に出力する。テーブル回路３１は、例えば、データ４ｃ〜９ｃ、３０ａがアドレスとして入力され出力ＰＣＮＴ［１：０］３２をデータとして読み出すことができるメモリによって実装することができる。このとき、メモリは不揮発性メモリでもよいし、ＲＡＭ（Random Access Memory）などの書き換え可能な揮発性メモリでもよい。また、フリップフロップなどの論理回路で実装される記憶回路であってもよい。または、演算回路や制御回路などの論理回路であってもよい。さらに演算回路、制御回路およびメモリを組合せて実現しても良い。
【００６６】
図２は、レジスタの構成例を示す回路図である。レジスタ４ａ〜９ａ、３０ａに共通に適用することができる。図２にはレジスタ６ａの回路を一例とし、理解を容易にするために１ビット分のみを示す。
【００６７】
図において、２７はデコーダ、２８はセレクタ２８ｓとフリップフロップ２８ｆで構成される記憶部、２９はＡＮＤ回路が例示されるバス駆動回路である。フリップフロップ２８ｆのクロック端子（Ｔｒ）とリセット（“０”でリセット）端子には、それぞれクロック１９とリセット端子２１から入力されたリセット信号Ｒｅｓｅｔ＿ｎが接続される。バス１８を介したアドレスおよび書き込み制御信号は、デコーダ２７でデコードされ、レジスタ書き込み信号２７ａを生成し、記憶部２８に入力されてセレクタ２８ｓを制御する。レジスタ書き込み時、すなわち信号２７ａが“１”のとき、バス１８から入力される入力データは、セレクタ２８ｓを介してフリップフロップ２８ｆに書き込まれる。信号２７ａが“０”のとき、セレクタ２８ｓはフリップフロップ２８ｆのデータ出力Ｑに接続され、書き込み値が保持される。一方、バス１８を介したアドレスおよび読み出し制御信号は、デコーダ２７でデコードされ、レジスタ読み出し信号２７ｂを生成する。レジスタ読み出し時、すなわち信号２７ｂが“１”のとき、記憶部２８の出力が、バス駆動回路であるＡＮＤ回路２９を介してバス１８に出力データとして読み出される。記憶部２８のデータは６ｂと６ｃとして、図１に示す半導体集積回路１の発振器６とテーブル回路３１にそれぞれ入力される。
【００６８】
図３は、テーブル回路３１の構成例を示す回路ブロック図である。３３はデコード回路、３４は参照テーブル、Ａ１〜Ａ２７はＡＮＤ回路、３５はＯＲ回路、３６はフリップフロップ、３７は転送回路、３８は書き込み信号、３９は不揮発性メモリ、４０は参照データである。参照テーブル３４は、それぞれがセレクタとフリップフロップで構成される各２ビットのレジスタＬ１〜Ｌ２７を備える。ただし、図３に例示するレジスタＬ１のように“００ｂ”を保持するレジスタは、セレクタとフリップフロップの実装を省略して、デコード出力によって選択されたときに配線によって固定された“００ｂ”を出力するように構成しても良い。他のレジスタＬ２〜Ｌ２７それぞれのフリップフロップには、クロック１９とリセットＲｅｓｅｔ＿ｎが接続されている。
【００６９】
第一のレジスタ群からのデータ信号４ｃ〜９ｃと、第二のレジスタ３０からのデータ信号３０ａは、デコード回路３３に入力される。デコード回路３３は、入力された信号をデコードして、デコード出力Ｄ１〜Ｄ２７のうちの１つを「真」（“１”）として信号をアサートする。ＡＮＤ回路Ａ１〜Ａ２７で、参照テーブル３４の構成要素であるＬ１で示す固定信号、またはセレクタとフリップフロップからなるレジスタＬ２〜Ｌ２７に保持された複数ビットのデータが選択され、ＯＲ回路３５を介してフリップフロップ回路３６でクロックに同期化されて、制御信号３２が出力される。テーブル回路３１では、参照テーブル３４は転送回路３７で生成された書き込み信号３８で書き込み制御され、不揮発性メモリ３９より読み出された参照データ４０が、参照テーブル３４のレジスタＬ２〜Ｌ２７に書き込まれて保持される。この参照データ４０の転送は、例えば、電源投入時に行われる。
【００７０】
図４は、テーブル回路３１の機能の一例を示す真理値表である。この真理値表は、デコード回路３３の機能を示すデコード入力とデコード出力との関係を対応付ける左側の真理値表と、デコード出力とテーブル回路３１からの出力３２とを対応付ける右側の真理値表との組み合わせで構成されている。
【００７１】
第一のレジスタ群６ａ〜９ａは、ユーザが必要とするクロック（クロック１９）に合わせて設定するものであり、レジスタ群４ａ、５ａはユーザが機能モジュール（機能Ａ，機能Ｂ）４、５を使用するときに設定するものである。
【００７２】
第二のレジスタ３０に設定するパラメータは、予め半導体集積回路１の製造者が定義したパラメータを、ユーザがプログラムで設定する。すなわち、半導体集積回路１の製造段階では特定されず、ユーザが使用する段階で決定する、発振子２６の周波数を示すパラメータである。以下のようなパラメータを製造者が定義し、ユーザがプログラムで設定する。
・４ＭＨｚ＜発振子≦５ＭＨｚで使用する場合、レジスタ３０［１：０］に“０”を設定。
・５ＭＨｚ＜発振子≦６ＭＨｚで使用する場合、レジスタ３０［１：０］に“１”を設定。
・６ＭＨｚ＜発振子≦７ＭＨｚで使用する場合、レジスタ３０［１：０］に“２”を設定。
・７ＭＨｚ＜発振子≦８ＭＨｚで使用する場合、レジスタ３０［１：０］に“３”を設定。
【００７３】
これにより、第一のレジスタ群４ａ〜９ａと、第二のレジスタ３０に設定するパラメータで、クロック１９の周波数を算出することができ、図４の真理値表の「状態」の項の周波数になる。
【００７４】
ここで、半導体集積回路１において、クロック１９の周波数に応じて動作モードを、例えば以下のように設定することができる。
・クロック１９≦２ＭＨｚのときは低速動作モードの設定可能。
・２ＭＨｚ＜クロック１９≦４０ＭＨｚの場合は、中速動作モードの設定可能。
・４０ＭＨｚ＜クロック１９の場合は高速動作モード設定のみ。
【００７５】
このとき、「状態」欄に示したクロック１９の周波数算出値毎に、参照テーブル３４の値を半導体集積回路１の製造者が決めることができ、図４の真理値表の「参照テーブル３４」欄に示す値となる。なお、図４では説明を簡単にするため、図４の４ｃ、５ｃの値は、全て“０”でも“１”の設定でもよいとしている。本実施形態では、動作モードによって調整されるのがレギュレータの電流供給能力と固定電流であるから、機能モジュール４と５へのクロック１９の供給と停止を制御するレジスタ４ａと５ａの値にも依存する制御に変更してもよい。これにより、動作モードをよりきめ細かく制御することができ、消費電力を低減することができる。例えば、レジスタ４ａと５ａのデータ４ｃと５ｃが“０”でクロック停止の場合には、“１”でクロック供給の場合よりも、レギュレータ１３〜１５に求められる電流供給能力はより小さくて済むので、比較的高いクロック周波数まで低速側の動作モードでの動作を許容することができ、消費電力が低減される。
【００７６】
本実施形態１の半導体集積回路１の動作について説明する。
【００７７】
図５は、半導体集積回路１の動作例を示すフロー図である。検討例と同様に、半導体集積回路１が、レギュレータ１３〜１５の電流供給能力に応じて以下の３つの動作モードを備え、相互間で遷移するものとした場合の例である。高速動作モードでは、すべてのレギュレータ１３、１４及び１５が動作し、ＰＬＬ７、セレクタ９の分周なし経路を使用した高速演算が実行可能である。中速動作モードでは、高速用降圧レギュレータ１５が停止し、中速用降圧レギュレータ１４と低速用降圧レギュレータ１３が動作し、ＰＬＬ７、セレクタ９の４分周の経路を使用した中速演算が実行可能である。低速動作モードでは、中速用降圧レギュレータ１４と高速用降圧レギュレータ１５とが停止し、低速用降圧レギュレータ１３のみが動作し、内蔵発振器１０を用いた、低速演算を実行するか、または、待機状態となり得る。
【００７８】
図５の動作フローには、初めに、内蔵発振器１０を用いた低速演算を行い、次に、ＰＬＬ７、セレクタ９の分周なし経路を使用した高速演算を行い、次に、ＰＬＬ７、セレクタ９の４分周の経路を使用した中速演算を行い、最後に、内蔵発振器１０を用いた待機状態に遷移する場合の、低消費電力制御の動作を示す。実行する演算などの処理は、図１５に示した検討例と全く同じである。
【００７９】
動作フローについて説明する。図１５に示した各ステップと同じ内容のステップには同じステップ番号を付す。
【００８０】
電源投入ステップ（Ｓ１）では、電源端子２０へ電源が印加される。
【００８１】
リセット、リセット解除ステップ（Ｓ２）では、リセット端子２１からリセット信号がアサートされその後解除されて、半導体集積回路１が動作を開始する。リセットでは、全レジスタ４ａ〜９ａ及び３０が“０”に初期化される。すなわち、クロック１９は、セレクタ８で内蔵発振器（１ＭＨｚ）１０が選択され、セレクタ９で分周器１２（４分周）を介したクロックが選択される。つまりクロック１９は０．２５ＭＨｚとなる。一方、テーブル回路３１は、図４に示すように、信号３０ａが“０”に初期化されることで、表に示すデコードＮｏ．１がデコードされる。つまり、デコード出力信号Ｄ１が真となり、ＡＮＤ回路Ａ１とＯＲ回路３５、フリップフロップ３６を介して、テーブル回路３１は降圧レギュレータを制御する信号３２として“００ｂ”を出力する。よって、降圧レギュレータ１４と降圧レギュレータ１５はともに動作状態、即ち、動作モードとしては、電流供給能力が最大の高速動作モードとなる。
【００８２】
次に検討例と同様に、不揮発性メモリ３に格納されたトリミングデータを読み出して、内蔵機能をトリミングする（Ｓ３）。このトリミング時に合わせて、図３の転送回路３７は、制御信号３８を適宜制御して、不揮発性メモリ３９よりデータバス４０を介して、レジスタＬ２からＬ２７で示す参照テーブル３４に参照データを書き込むとよい。参照テーブル３４には、図４の「参照テーブル３４」欄に示すデータが、参照データとして格納される。
【００８３】
次にプログラムコードの実行を開始し、ＣＰＵ２がメモリ３に保持されたプログラムコードを実行する（Ｓ４）。この時点では、クロック１９からは低速クロックが供給され、動作モードは高速動作モードである。
【００８４】
次に、ＣＰＵ２がメモリ３に保持されたプログラムコードを実行することによって、レジスタ３０にパラメータを設定する（Ｓ２０）。このパラメータは、半導体集積回路１に接続される発振子２６の周波数に応じて、図４の「３０ａ［１：０］」欄に示すように“０”〜“３”の中から適切な値を設定する。ここでは、６ＭＨｚの発振子を使用、つまりレジスタ３０の［１：０］に“１”を設定したとする。次に３０ａ［２］を“１”に設定する。これら設定により、第一のレジスタの状態（全て“０”）と合わせて、図３のデコードＮｏ．２に記載する参照テーブル値３４“１１ｂ”が出力３２、即ちＰＣＮＴ［１：０］に出力され、降圧レギュレータ１４と１５は停止し低速動作モードに移行する。
【００８５】
次に演算１を実行する（Ｓ６）。この演算１は、クロック１９から供給される低速クロックに同期して、低速で演算処理される。
【００８６】
次に、クロック設定１を行う（Ｓ８）。レジスタ６ａ、７ａ、９ａを設定して、外部発振子２６、発振器６、ＰＬＬ７の経路を活性化し、さらにセレクタ９で分周なしの出力を選択する。
【００８７】
次に、クロック設定２を行う（Ｓ９）。すなわち、セレクタ８でＰＬＬ７を選択することで、クロック１９は、外部発振子２６の経路が選択される。これに伴って、図４のデコードＮｏ．１５となり、参照テーブル値“００ｂ”が出力３２、即ちＰＣＮＴ［１：０］に出力され、降圧レギュレータ１４と１５は動作し高速動作モードに移行する。
【００８８】
次に、演算２を行う（Ｓ１０）。演算２は、高速クロックに同時して、高速に演算処理される。このとき、ステップＳ９において予め高速動作モードに変更されているので、レギュレータ１３、１４及び１５からの電流供給は十分に大きい。
【００８９】
次にクロック設定３を行う（Ｓ１１）。セレクタ９で“０”、すなわち分周器１２（４分周）を選択して、クロック１９をＰＬＬ７の４分周にする。クロック１９に供給されるクロックは、中速クロックに変更される。これに伴って、図４のデコードＮｏ．１３となり、参照テーブル値“１０ｂ”が３２に出力され、降圧レギュレータ１４は動作、降圧レギュレータ１５は停止し中速動作モードに移行する。
【００９０】
次に演算３を実行する（Ｓ１３）。この演算３は、クロック１９から供給される中速クロックに同期して、中速で演算処理される。
【００９１】
次に、クロック設定４を行う（Ｓ１４）。セレクタ８で内蔵発振器１０を選択、すなわちクロック１９は、内蔵発振器１０、分周器１２（４分周）の経路となる。これに伴って、図４のデコードＮｏ．２となり、参照テーブル値“１１ｂ”が３２に出力され、降圧レギュレータ１４と１５はともに停止し、低速動作モードに移行する。
【００９２】
次に、待機状態に入る（Ｓ１６）。外部割り込み等の待ち受け状態である。
【００９３】
以上のように、トリミングデータを転送するステップＳ３において、テーブル回路３１に格納される参照データを転送する動作が追加され、半導体集積回路１に接続される発振子２６の周波数に応じたパラメータをレジスタ３０に設定するステップＳ２０が図１５に示した動作フローに追加される。一方、動作モードはクロック設定を行う各ステップ（Ｓ８，Ｓ９，Ｓ１１，Ｓ１４）において、レジスタ設定に伴ってテーブル回路３１によって自動的に変更されるので、図１５に示した動作フローに対して、動作モードを変更するレジスタ設定のための各ステップ（Ｓ５，Ｓ７，Ｓ１２，Ｓ１５）は不要となる。このように、プログラムステップ上は、Ｓ２０の追加によって動作モード切替を行っていた各ステップＳ５，Ｓ７，Ｓ１２，Ｓ１５が不要となる。
【００９４】
さらに実際には、クロック設定を変更しようとするときには、その時点でのクロック設定を確認して周波数を上げる方向か下げる方向か、それに伴って動作モード設定はクロック設定の前に実行すべきか、後に設定すべきかなどの判断が必要となる。多重割り込みなどのない非常に単純なプログラムであれば、判断をすることなく変更手順をそのままプログラミングすることができるが、複数の割り込みや多重割り込みを許す動作では、動作モードの変更手順を予定することが困難または不可能であるから、本実施形態によって削減されるステップはさらに多い。
【００９５】
このように、周波数測定回路や周波数判定回路などの大規模な回路を搭載することなく、内部回路の動作モードを内部クロック周波数に応じて変更するための、プログラム上の負担を軽減することができる。即ち、従来ユーザが行っていた、動作モードの設定が不要となり、使い勝手のよい半導体集積回路を提供することができる。また、従来ユーザが設定する煩わしさを考慮して動作モードの数が抑えられていたが、本実施形態であれば、複数のモードを備えることで、よりきめ細かく電力を制御することができる。
【００９６】
なお、本実施形態では、動作モードとして、降圧レギュレータ１３〜１５の電流供給能力と固定電流を制御する形態について説明したが、降圧レギュレータ以外でもよい。例えば、低速動作モードでは、メモリのセンスアンプのバイアス電流を下げることによって読み出し速度を下げつつ低消費電力化する。一方、高速動作モードでは、センスアンプのバイアス電流を上げることによって読み出し速度を高くする。またさらに、低速動作モードではメモリ読み出しにウェイトサイクルを入れるが、高速動作モードではウェイトサイクルを入れないなどの制御を行っても良い。また、動作モードに応じた制御対象は、降圧レギュレータやメモリなど内部回路以外に、外部回路、例えば外部に接続するレギュレータ回路であってもよい。つまり、動作モードに応じて制御する対象は任意の回路であってよい。
【００９７】
また、図３のテーブル回路３１は、不揮発性メモリ３９からデータを読み出して、参照テーブル３４のレジスタＬ２〜Ｌ２７に格納する例を示したが、レジスタＬ２〜Ｌ２７はＬ１と同様に固定値であっても良い。
【００９８】
また、図１に示すように発振子２６が外付けされる例を示したが、これに代えて外部から入力されるクロックであってもよい。
【００９９】
また、第一のレジスタ群には、前述のように、クロック源の周波数と内部クロック１９の周波数との相対的な関係を示すパラメータを保持するレジスタが含まれていればよく、その他のレジスタ、例えば、電源端子２０の電位をモニタするレジスタや、内蔵する温度センサの温度値を格納するレジスタなど、内蔵回路の任意のレジスタがさらに含まれていてもよい。このとき、周波数の相対的な関係を示すパラメータではないものの、動作電圧や温度など、動作モードに影響を与えるパラメータは、テーブル回路３１の入力とすることができ、動作モードを制御する出力３２を動作電圧や温度に応じて自動的に変更することができる。
【０１００】
更に、本実施形態はマイクロコンピュータを一例として説明したが、マイクロコンピュータ以外、例えば、単体のＡ／Ｄ変換器やメモリなどであっても、外部とのインタフェース用バスを介したレジスタを備えていればよく、半導体集積回路の種類は何であってもよい。
【０１０１】
以上のなお書きで説明した各種の変形例は、以下に説明する他の実施形態にも同様に妥当する。
【０１０２】
〔実施形態２〕
本実施形態２においては、テーブル回路３１の図３、４とは異なる構成例について説明する。図６は、テーブル回路３１の実施形態２の構成例を示す回路ブロック図であり、図７はそのテーブル回路３１の機能の一例を示す真理値表である。
【０１０３】
図６、７のテーブル回路３１と図３、４のテーブル回路との違いは、以下の通りである。
・デコード回路３３に入力される図１のレジスタ３０入力信号３０ａは、１ビット幅であること。
・デコード出力は、Ｄ１〜Ｄ９であること。
・レジスタ回路は、Ｌ２〜Ｌ９であること。
・ＡＮＤ回路はＡ１〜Ａ９であること。
・レジスタＬ２〜Ｌ９の書き込み信号３８は、バス１８を介して生成されること。
・レジスタＬ２〜Ｌ９の書き込みデータはバス１８に接続されること。
・図７の真理値表は、デコードＮｏ．１〜９であること。
【０１０４】
これ以外の構成と動作は図３、４と同様である。本実施形態２において、テーブル回路３１に格納される真理値表は、使用される発振子２６の周波数に応じて作成されるので、図７に示すように、真理値表はクロック源の周波数が特定の値である場合についてのみの、デコード出力で構成される。例えば、図７には発振子２６の周波数が６ＭＨｚの場合が示されている。これによって、真理値表の規模、即ちテーブル回路３１の回路規模が大幅に削減されている。図４の真理値表がデコードＮｏ．１〜２７であるのに対して、図７の真理値表はデコードＮｏ．１〜９である。これに伴って、図６に示すテーブル回路３１はデコード出力Ｄ１〜Ｄ９を出力するデコード回路３３、レジスタＬ２〜Ｌ９及びＡＮＤ回路がＡ１〜Ａ９で構成され、その回路規模は図３に示す回路の規模よりも大幅に削減されている。また、レジスタ３０についても発振子の周波数を示す情報は格納されず、テーブル回路３１への入力も不要となる。
【０１０５】
次に動作について、実施形態１で引用した図５及び上述した図６と７を引用して説明する。
【０１０６】
実施形態１では、ユーザが使用する可能性のある発振子の周波数を網羅する参照テーブルを用意していたのに対し、本実施形態２では、発振子２６の周波数がある特定の周波数の場合についてのみの真理値表に相当するデータテーブル６４を、バス１８から参照テーブル３４に書き込む。このデータテーブル６４は、例えば、半導体集積回路１の製造者が、ユーザであるプログラム作成者に対して、ユーティリティープログラムとして提供する参照テーブル作成プログラム６３を使って生成される。
【０１０７】
図８は、半導体集積回路１で実行されるプログラムコード６２の生成手順を示すフローチャートである。ユーザであるプログラム作成者は、プログラムソース６０をコンパイラ６１によってコンパイルしてプログラムコード６２を生成する。このときユーザは、プログラムソース６０が実行されるときに半導体集積回路１で使用される発振子の周波数を、参照テーブル作成プログラム６３に入力する。テーブル作成プログラム６３は入力された周波数に対応するデータテーブル６４を生成する。このデータテーブル６４はプログラムソース６０に組み込まれてコンパイルされ、プログラムコード６２にはデータテーブル６４の内容をテーブル回路３１内の参照テーブル３４のレジスタＬ２〜Ｌ９に書き込むための命令コード群が含まれる。
【０１０８】
このように、ユーザが実際に使用する発振子２６の周波数に対応するデータテーブル６４のデータは、ユーザのプログラムコード６２に包含されることとなる。本実施形態２の動作フローでは、図５に示す実施形態１の動作フローにおけるレジスタ３０設定ステップＳ２０の前に、プログラムコードに含まれるデータテーブル６４の内容を、メモリ３からＣＰＵ２で読み出してバス１８を介して参照テーブル３４に書き込むステップが追加される。参照テーブル３４への書き込みは、バス１８のアドレスによりデコーダ５１で参照テーブル３４内のレジスタＬ２〜Ｌ９が選択され、バス１８のデータを各レジスタに書き込むことによって、データテーブル６４のデータが参照テーブル３４へ格納される。次にレジスタ３０に“１”を書き込むと、図７の真理値表に示すデコードに従ってテーブル回路３１の出力３２が生成される。
【０１０９】
本実施形態２におけるこれ以降の動作フローは、図５に示す実施形態１の動作フローと同様である。これ以降の動作フローについては、詳しい説明を省略する。
【０１１０】
なお、参照テーブル作成プログラム６３については、図４の真理値表に示すように、予めすべての周波数を用意した中から、使用する周波数を切り出すユーティリティープログラムであってもよいし、使用する周波数と第一のレジスタ群のデータで構成される真理値表と同等のテーブルからクロック１９の周波数を算出し、データテーブル６４の内容を作成するものであってもよい。
【０１１１】
以上説明したように、実施形態１では、ユーザが使用する可能性がある発振子を網羅する、参照テーブルを用意していたため、参照テーブルの規模が大きく、回路規模の増大を招き、コストの上昇やテーブル回路３１が消費する電流も大きくなるという課題があった。更に、図１に示すように発振子２６を外付けして使用する場合には、接続できる発振子の周波数は、発振器６の性能によりある程度の範囲に限られるが、外部クロック入力を許す場合には、入力可能な周波数はより広範になるのが一般的であり、これに対応するには、より大規模の参照テーブルが必要になるという問題があった。
【０１１２】
これらに対し、本実施形態２では、ユーザのプログラムコード作成時点で、使用する発振子または外部入力クロック周波数を一つに絞り込んだ、特定のクロック周波数についての参照テーブルで済み、前記課題を解決することができる。
【０１１３】
一方、実施形態１では、ユーザが使用する可能性がある周波数を網羅する、参照テーブルを用意することによって、ユーザのプログラムに負担をかける必要がない。また、外部クロックの周波数を動的に変更する場合にも容易に対応することができる。即ちレジスタ３０のデータを、外部クロックの周波数に応じて変更すればよい。
【０１１４】
なお、本実施形態２でも、外部クロックの周波数が動的に変更される場合に対応することができる。ユーザプログラムのコンパイルの段階には、ユーザプログラムを構成するルーチンやタスクについて、使用するすべてのクロック周波数が特定されているはずである。それらすべてのクロック周波数のそれぞれに対応するデータテーブル６４をテーブル作成プログラム６３によって作成し、プログラムコード６２に組み込んでおく。外部クロックの周波数が動的に変更されるときには、一旦レジスタ３０を“０”に設定、つまり固定値“００ｂ”の参照テーブルを活性化して、その後、クロック周波数に対応したデータテーブル６４を参照テーブル３４に書き込む。
【０１１５】
このように、本実施形態２でも、外部クロックの周波数が動的に変更される場合に対応することができ、使い勝手のよい電力制御が実現できる。
【０１１６】
〔実施形態３〕
本実施形態３では、テーブル回路３１の後段に設けると好適な、制御信号３２の遅延を制御する回路について説明する。図９はその回路の動作例を示す波形図であり、図１０はその構成例を示す回路図である。基本的な構成と動作は実施形態１及び実施形態２と同様であるので、本実施形態３では特徴的な動作についてのみ説明する。
【０１１７】
図９は、レジスタ４ａ〜９ａ（信号名４ｃ〜９ｃ）でクロック１９を切り替える場合の、波形を示したものである。詳細な説明は省略するが、クロック切り替え時には、切り替え前クロックと切り替え後のクロックの同期をとり、クロック１９にグリッジが発生しない回路とするのが一般的である。図９では、レジスタ信号４ｃ〜９ｃが変化した後、３クロック後にクロック１９の周波数が切り替わる。これは、切り替え前クロックと切り替え後のクロックの同期のための期間を３クロックとした例である。クロック１９を低速から高速に切替える場合には、低速クロックで３周期のクロック切り替え期間をとり、クロック１９を高速から中速に切替える場合には、高速クロックで３周期のクロック切り替え期間をとった例である。
【０１１８】
図１０は、実施形態１及び実施形態２のテーブル回路３１とその出力３２の間に挿入された回路であり、クロック１９とリセット端子２１から供給されるＲｅｓｅｔ＿ｎ信号で初期化（“０”）されるフリップフロップ４１と、所定の遅延を発生させるディレイ回路４２と、ＡＮＤ回路４３によって構成される。テーブル回路３１内のフリップフロップ３６の出力は、フリップフロップ４１とディレイ回路４２に入力され、フリップフロップ４１の出力とディレイ回路４２の出力とをＡＮＤ回路４３で論理積をとることによって制御信号３２が生成される。
【０１１９】
この回路によれば、フリップフロップ３６で生成された、信号“０”（降圧レギュレータ動作）は、次のクロック１９の立ち上がりエッジでフリップフロップ４１に取り込まれて、ＡＮＤ回路４３を経て信号３２に“０”出力される。一方、フリップフロップ３６で生成された信号“１”（降圧レギュレータ停止）は、ディレイ回路４２の遅延を経た後ＡＮＤ回路４３を経て信号３２に“１”を出力される。つまり、高速クロックに切り替わる前に降圧レギュレータは動作を開始し、低速クロックに切り替わった後に、降圧レギュレータは停止する。
【０１２０】
以上の動作により、例えば、低速クロックから高速クロックに切り替えるときは、降圧レギュレータを早く起動させて、高速クロック移行時の消費電力増大に備え、高速クロックから低速クロックに切り替えるときには、降圧レギュレータを遅く停止させる。つまり、クロック周波数を高くするクロック切り替えを行う時には必ず降圧レギュレータを事前に動作させることができ、クロック周波数を低くするクロック切り替えを行う時には、消費電力が安定してから降圧レギュレータを停止させて、消費電力の変化時にも安定した電力を供給できるよう降圧レギュレータを制御することができる。
【０１２１】
なお、ディレイ回路４２はアナログ素子で構成してもディジタル素子で構成しても良いが、適切な段数のフリップフロップで構成することにより、上述の前後関係を満足する適切な遅延値をより安定的に得ることができる。
【０１２２】
〔実施形態４〕
本実施形態４では、テーブル回路３１に禁止されたパラメータ設定を検出する機能を追加した例について説明する。図１１は、本実施形態４の半導体集積回路１におけるレジスタ４ａ〜９ａとテーブル回路３１の周辺の構成例を示すブロック図である。図１２はテーブル回路３１の構成例を示す回路ブロック図であり、図１３はその機能の一例を示す真理値表である。
【０１２３】
基本的な構成と動作は実施形態１〜実施形態３と同様であるので、本実施形態４における特徴的な動作についてのみ説明する。
【０１２４】
図１１に示すレジスタ４ａ〜９ａは、図２で示したレジスタの変形例である。すなわち図２のレジスタに対してセレクタ４８とフリップフロップ４９が追加され、その出力４ｂ〜９ｂは、発振器６やＰＬＬ７などの制御を行う。レジスタ４ａ〜９ａの出力４ｃ〜９ｃは図２と同様に、セレクタ２８ｓとフリップフロップ２８ｆで構成される記憶部２８で生成され、テーブル回路３１に入力される。なお、レジスタ９ａを始めとする各レジスタについて、図１１では図２に示したデコーダ２７と読み出し回路２９の記載は省略している。
【０１２５】
テーブル回路３１の出力３２は、実施形態１〜２のＰＣＮＴ［１：０］に加えてさらに２ビットが追加されている。図１３の真理値表に示すように、参照テーブル３４の出力は４ビットとされ、ＯＲ回路３５の出力の最上位ビット［３］が信号５０として出力される。
【０１２６】
図１３の真理値表における、図７に示した実施形態２のテーブル回路３１の真理値表からの変更点は、以下の通りである。まず上述の信号５０を出力するデコードＮｏ．５が追加されている。レジスタ４ａ〜９ａの設定（４ｃ〜９ｃ）の組合せのうち、禁止されている組合せが設定されたときに、参照テーブル３４の最上位ビットに“１”を出力する。禁止された組み合わせは複数のデコードＮｏに展開されて表現されても良い。またさらに、図７ではデコードＮｏ．２において［６ｃ，７ｃ，８ｃ］＝［＊，＊，０］のときにＤ２＝１を出力していたのに対して、図１３ではデコードＮｏ．２において［６ｃ，７ｃ，８ｃ］＝［０，０，０］のときにＤ２＝１を出力し、デコードＮｏ．３と４が追加されている。デコードＮｏ．３では［６ｃ，７ｃ，８ｃ］＝［０，１，０］のときにＤ３＝１を出力し、デコードＮｏ．４では［６ｃ，７ｃ，８ｃ］＝［１，０，０］のときにＤ４＝１を出力し、ともに参照テーブル３４の出力は“０１１１ｂ”とされ、正常なＤ２＝１の場合と同じＰＣＮＴ［１：０］＝“１１ｂ”を出力し、且つ［２］に“１”を出力する。禁止ではないが冗長な組合せを検出するためのデコードＮｏである。
【０１２７】
テーブル回路３１の構成は、以上のような真理値表の拡大に伴って、デコード信号がＤ１〜Ｄ１１に、レジスタがＬ２〜Ｌ１１に、ＡＮＤ回路がＡ１〜Ａ１１に、それぞれ拡張され、またビット数が２ビットから４ビットに増えたこと以外は図６と同様である。参照テーブル３４に追加されたビット［３］は、第一のレジスタ群で禁止された設定を示し、ビット［２］は冗長な設定を警告するビット、ビット［１：０］は実施形態２（図７）と同様な構成である。
【０１２８】
図１１について説明する。テーブル回路３１の出力のビット［３］は信号５０として、セレクタ４７とセレクタ４８に接続される。フリップフロップ３６で生成されたテーブル回路３１の出力［３：０］は、ＡＮＤ回路４４を介してバス１８に接続され、デコード信号４５をアサートすることによって、ＣＰＵ２が読み出すことができる。フリップフロップ３６で生成されたテーブル回路３１の下位ビット［１：０］は、セレクタ４７を介して実施形態３と同様に４１、４２、４３を経て出力３２に接続される。
【０１２９】
この回路構成により、レジスタ４ａ〜９ａに設定された値は、４ｃ〜９ｃを介してテーブル回路３１に入力され、図１３の真理値表に示す、対応する参照テーブル値を出力する。
【０１３０】
信号５０は、図１３のデコーダで設定禁止、すなわち、デコードＮｏ．５では、ＰＬＬ７、セレクタ８で発振器経路を選択したにも関わらず発振器６は停止設定なので、クロック供給できないことを検知する役目を果たす例である。信号５０が“０”のとき、セレクタ４８は記憶部２８の出力を選択し、セレクタ４７はフリップフロップ３６出力が選択されフリップフロップ４１に入力され、通常の動作となる。
一方、信号５０が“１”、すなわち、禁止設定が検出されたときには、セレクタ４８はフリップフロップ４９の出力が帰還される。つまり、発振器６やＰＬＬ７などを制御する４ｂ〜９ｂは、信号５０が“１”となったこと（禁止設定）が検出される前の値を保持する。同様にセレクタ４７を介して、フリップフロップ４１の出力が入力に帰還される。すなわち制御信号３２も、信号５０が“１”となったことが検出される前の値、つまり禁止設定前の値を保持する。この設定禁止の状態は、デコード信号４５で選択されたＡＮＤ回路４４を介してＣＰＵ２で読むことができる。
【０１３１】
更に、ＡＮＤ回路４４のビット２（［２］）は、冗長な設定を警告するものである。例えば、図１３のデコードＮｏ．３では、セレクタ８で内蔵発振器１０を選択しているにもかかわらず、ＰＬＬ７を動作させているケースであり、ＰＬＬ７の動作電流分だけ余分に電力が消費することを警告する役目を果たす。同様に、デコードＮｏ．４では、セレクタ８で内蔵発振器１０を選択しているにもかかわらず発振器６は動作しているケースであり、発振器６の動作電流分だけ余分に電力が消費することを警告する役目を果たす。
【０１３２】
このように、レジスタ４ａ〜９ａの設定後に、参照テーブル３４の出力であるフリップフロップ３６の値をＡＮＤ回路４４経由で読み出すことで、禁止設定や警告の状態を確認することができる。
【０１３３】
なお、本実施形態では、ＡＮＤ回路４４を介して禁止設定や警告をＣＰＵ２で読み出す例を説明したが、禁止設定を示すフリップフロップ出力３６の最上位ビット［３］や警告を示すビット［２］を割り込み要求信号として割り込み制御回路に接続して、例外処理できるようにしてもよい。
【０１３４】
以上の実施形態４によれば、従来プログラム開発過程で生じる禁止設定や好ましくない設定に起因する意図しない動作や消費電力に対して、調査、解析に要する時間を短縮でき、実施形態１〜実施形態３と組み合わせて、さらに使い易い半導体集積回路を提供することができる。
【０１３５】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【符号の説明】
【０１３６】
１  半導体集積回路
２  ＣＰＵ（Central Processing Unit）
３  不揮発性で書き替え可能なメモリ
４  機能モジュール（機能Ａ）
５  機能モジュール（機能Ｂ）
６  発振器
７  ＰＬＬ（Phase Locked Loop）
８、９、４７、４８  セレクタ
１０  内蔵発振器
１１  分周器（２分周）
１２  分周器（４分周）
１３  低速用降圧レギュレータ
１４  中速用降圧レギュレータ
１５  高速用降圧レギュレータ
４ａ、５ａ、６ａ、７ａ、８ａ、９ａ、１４ａ、１５ａ、３０  レジスタ
４ｂ、５ｂ、６ｂ、７ｂ、８ｂ、９ｂ、１４ｂ、１５ｂ  パラメータ（制御信号）
４ｃ、５ｃ、６ｃ、７ｃ、８ｃ、９ｃ、３０ａ  パラメータ
１６、１７、４３、４４  ＡＮＤ回路
１８  バス
１９  クロック信号
２０  電源端子
２１  リセット端子
２２  レベルシフタ
２３  Ｉ／Ｏ
２４、２５  外部端子
２６  発振子
２７、５１  デコーダ
２８  記憶部
２８ｓ  セレクタ
２８ｆ  フリップフロップ
２９  バス駆動回路（例；ＡＮＤ回路）
３１  テーブル回路
３２  テーブル回路３１の出力ＰＣＮＴ［１：０］
３３  デコード回路
Ｄ１〜Ｄ２７  デコード出力
３４  参照テーブル
Ｌ１〜Ｌ２７  レジスタ
Ａ１〜Ａ２７  ＡＮＤ回路
３５  ＯＲ回路
３６、４１、４９  フリップフロップ
３７  転送回路
３８  書き込み信号
３９  不揮発性メモリ
４０  参照データ
４２  ディレイ回路
５０  禁止設定検出信号
６０  プログラムソースコード
６１  コンパイラ
６２  プログラムコード
６３  参照テーブル作成プログラム
６４  データテーブル
【図１】
0006585000.tif 000002
【図２】
0006585000.tif 000003
【図３】
0006585000.tif 000004
【図４】
0006585000.tif 000005
【図５】
0006585000.tif 000006
【図６】
0006585000.tif 000007
【図７】
0006585000.tif 000008
【図８】
0006585000.tif 000009
【図９】
0006585000.tif 000010
【図１０】
0006585000.tif 000011
【図１１】
0006585000.tif 000012
【図１２】
0006585000.tif 000013
【図１３】
0006585000.tif 000014
【図１４】
0006585000.tif 000015
【図１５】
0006585000.tif 000016