(57)【特許請求の範囲】
【請求項１】
動作モードの切替機能を備えたマイクロプロセッサにおいて、
内部クロックを発生させるクロック発生回路と、
入力されたクロック信号に同期して動作する複数の同期回路と、
前記クロック発生回路と前記複数の同期回路との間に接続され、前記複数の同期回路の動作を開始させる際に、前記クロック発生回路から前記複数の同期回路のそれぞれへ、前記内部クロックの１周期間隔で時間をずらして、前記複数の同期回路の動作開始時の処理の発生順に沿って順番に前記内部クロックを供給開始するクロック供給制御回路と、
を有することを特徴とするマイクロプロセッサ。
【請求項２】
前記クロック供給制御回路は、前記内部クロックの供給を停止させるスリープ信号の前記複数の同期回路それぞれに対する入力を、時間をずらして解除することを特徴とする請求項１記載のマイクロプロセッサ。
【請求項３】
前記クロック供給制御回路は、前記複数の同期回路のうちの一部の同期回路に入力されている前記スリープ信号の解除を遅延させる遅延回路を有することを特徴とする請求項２記載のマイクロプロセッサ。
【請求項４】
前記遅延回路は、遅延時間に応じた数のフリップフロップで構成されていることを特徴とする請求項３記載のマイクロプロセッサ。
【請求項５】
前記遅延回路は、遅延時間に応じた数のラッチ回路で構成されていることを特徴とする請求項３記載のマイクロプロセッサ。
【請求項６】
前記クロック供給制御回路は、前記複数の同期回路の動作を停止させる際に、前記クロック発生回路から前記複数の同期回路それぞれへの前記内部クロックの供給を、時間をずらして停止することを特徴とする請求項１記載のマイクロプロセッサ。
【請求項７】
前記複数の同期回路は、演算回路とキャッシュとを含んでおり、
前記クロック供給制御回路は、前記演算回路に前記内部クロックを供給開始してから所定の時間経過後に、前記キャッシュへの前記内部クロックの供給を開始することを特徴とする請求項１記載のマイクロプロセッサ。
【請求項８】
内部クロックに同期して動作する複数の同期回路を有するマイクロプロセッサの動作モード切替方法において、
前記複数の同期回路の動作の開始を示す信号が入力されると、前記複数の同期回路のうちで最初に処理が発生する前記同期回路へ内部クロックの供給を開始し、
前記信号の入力から１周期間隔で時間をずらして、前記複数の同期回路の動作開始時の処理の発生順に沿って順番に、前記内部クロックが未供給の他の前記同期回路へ前記内部クロックを供給開始する、
ことを特徴とするマイクロプロセッサの動作モード切替方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はマイクロプロセッサおよびマイクロプロセッサの動作モード切替方法に関し、特に通常動作モードと低消費電力モードとのモード切替機能を有するマイクロプロセッサおよびそのようなマイクロプロセッサの動作モード切替方法に関する。
【０００２】
【従来の技術】
現在、デジタルカメラやプリンタなどの様々な電子機器にマイクロプロセッサが搭載されている。これらの電子機器は、マイクロプロセッサによって動作が制御される。デジタルカメラであれば、ＣＣＤ(Charge-Coupled Devices)で撮影した画像データがマイクロプロセッサによって所定のデータ形式に圧縮され、メモリに記録される。また、デジタルカメラにおける自動焦点機能もマイクロプロセッサで制御されている。
【０００３】
このようなマイクロプロセッサの中には、通常動作モードと低消費電力モードとのモード切替機能を有するものがある。たとえば、電子機器の通常使用時には、マイクロプロセッサが通常動作モードで動作する。これにより、電子機器が備えている全ての機能を、マイクロプロセッサの制御下で動作させることができる。一方、ユーザが電子機器に対する操作を一定期間行っていないときは、電子機器を低消費電力モードにする。そのとき、マイクロプロセッサは、ユーザの操作入力を検知する機能以外の機能を停止させることで、消費電力を押さえることができる。以下、プロセッサの消費電力を押さえる低消費電力モードをスリープモードと呼ぶ。
【０００４】
図９は、従来のマイクロプロセッサの構成例を示す図である。図９に示すように、マイクロプロセッサは、ＰＬＬ(Phase Locked Loop)２１０、バスインタフェースユニット２２０、整数ユニット２３０、命令キャッシュ２４０、およびデータキャッシュ２５０を有している。
【０００５】
ＰＬＬ２１０には、システムクロックが入力されている。ＰＬＬ２１０からは内部クロックが出力され、バスインタフェースユニット２２０に供給されている。また、ＰＬＬ２１０から出力される内部クロックは、３つのＯＲ回路２６１〜２６３に入力される。バスインタフェースユニット２２０には、さらにウェイクアップ信号が入力されている。バスインタフェースユニット２２０からはスリープ信号が出力される。そのスリープ信号は、３つのＯＲ回路２６１〜２６３に入力される。３つのＯＲ回路２６１〜２６３からの出力は、それぞれ整数ユニット２３０、命令キャッシュ２４０、データキャッシュ２５０に入力される。
【０００６】
このような構成のマイクロプロセッサにおいて、ウェイクアップ信号が通常ハイレベルに固定されている。スリープモードから通常動作モードに移行する際には、ウェイクアップ信号が所定期間ローレベル（アサート）にされる。
【０００７】
バスインタフェースユニット２２０は、ウェイクアップ信号のアサートを検知して、スリープモードから通常動作モードへの遷移タイミングを判断する。そして、バスインタフェースユニット２２０は、通常動作モードの間はスリープ信号をネゲート（ローレベル）する。スリープ信号がネゲートされると、ＰＬＬ２１０から出力される内部クロックの信号が、そのまま整数ユニット２３０、命令キャッシュ２４０、およびデータキャッシュ２５０に供給される。
【０００８】
マイクロプロセッサは、所定の入力があると（たとえば、スリープモードレジスタに「１」が設定される）、動作モードをスリープモードに遷移させる。スリープモードの間は、バスインタフェースユニット２２０は、スリープ信号をアサート（ハイレベル）する。すると、整数ユニット２３０、命令キャッシュ２４０、およびデータキャッシュ２５０には、常にハイレベルのスリープ信号が供給される。その結果、整数ユニット２３０、命令キャッシュ２４０、およびデータキャッシュ２５０の内部回路の動作が停止する。動作が停止した整数ユニット２３０、命令キャッシュ２４０、およびデータキャッシュ２５０には電流が流れないため、消費電力が抑えられる。
【０００９】
このようにして、マイクロプロセッサでは、通常動作モードからスリープモードに切り換えることにより、消費電力を抑えることができる。
【００１０】
【発明が解決しようとする課題】
しかし、従来のマイクロプロセッサでは、スリープモードから通常動作モードへ復帰する際に、ウェイクアップ信号の入力タイミングで各回路へ内部クロックが同時に供給されてしまう。そのため、マイクロプロセッサ全体の電流量が大きく変化する。その結果、グランドレベルが変化して、過度のノイズが発生する。このノイズにより、それまで安定して動作していたＰＬＬのロックが外れ、マイクロプロセッサの誤動作を引き起こす原因となる。
【００１１】
この現象は、通常動作モードからスリープモードに遷移する際にも同様に発生する。ＰＬＬのロックが外れたままウェイクアップ信号が入力されると、マイクロプロセッサが誤動作してしまう。
【００１２】
本発明はこのような点に鑑みてなされたものであり、モード切替時にも安定した内部クロックを供給できるマイクロプロセッサおよびそのようなマイクロプロセッサの動作モード切替方法を提供することを目的とする。
【００１３】
【課題を解決するための手段】
本発明の第１の態様では上記課題を解決するために、図１に示すような動作モードの切替機能を備えたマイクロプロセッサが提供される。本発明に係るマイクロプロセッサは、内部クロックを発生させるクロック発生回路と、入力されたクロック信号に同期して動作する複数の同期回路と、前記クロック発生回路と前記複数の同期回路との間に接続され、前記複数の同期回路の動作を開始させる際に、前記クロック発生回路から前記複数の同期回路のそれぞれへ、前記内部クロックの１周期間隔で時間をずらして、前記複数の同期回路の動作開始時の処理の発生順に沿って順番に前記内部クロックを供給開始するクロック供給制御回路と、を有している。
【００１４】
このようなマイクロプロセッサによれば、複数の同期回路の動作を開始させる際には、クロック供給制御回路により、クロック発生回路から複数の同期回路のそれぞれへ、内部クロックが時間をずらして供給開始される。各同期回路は、供給された内部クロックに同期して動作する。
【００１７】
本発明の第２の態様では上記課題を解決するために、内部クロックに同期して動作する複数の同期回路を有するマイクロプロセッサの動作モード切替方法において、前記複数の同期回路の動作の開始を示す信号が入力されると、前記複数の同期回路のうちで最初に処理が発生する前記同期回路へ内部クロックの供給を開始し、前記信号の入力から１周期間隔で時間をずらして、前記複数の同期回路の動作開始時の処理の発生順に沿って順番に、前記内部クロックが未供給の他の前記同期回路へ前記内部クロックを供給開始する、ことを特徴とするマイクロプロセッサの動作モード切替方法が提供される。
【００１８】
このようなマイクロプロセッサの動作モード切替方法によれば、複数の同期回路の動作の開始を示す信号が入力されると、複数の同期回路の一部へ内部クロックの供給が開始される。そして、信号の入力から所定時間遅延させた後、内部クロックが未供給の他の同期回路への内部クロックの供給を開始される。
【００２１】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態に係るマイクロプロセッサの回路構成図である。図１に示すようにマイクロプロセッサは、ＰＬＬ１１、バスインタフェースユニット１２、整数ユニット１３、命令キャッシュ１４、およびデータキャッシュ１５を有している。
【００２２】
ＰＬＬ１１は、システムクロックに基づいて所定の周波数の内部クロックを生成する回路であり、位相同期ループ回路とも呼ばれる。すなわち、ＰＬＬ１１が、内部クロックを発生させるクロック発生回路として機能している。バスインタフェースユニット１２は、外部バスと内部バスとを接続するための回路である。整数ユニット１３は、整数演算を行う演算回路である。命令キャッシュ１４は、命令を記憶するためのキャッシュメモリである。データキャッシュ１５は、データを記憶するためのキャッシュメモリである。整数ユニット１３、命令キャッシュ１４およびデータキャッシュ１５は、マイクロプロセッサにおいて内部クロックに同期して動作する回路（同期回路）である。
【００２３】
ＰＬＬ１１には、システムクロックが入力されている。ＰＬＬ１１からは内部クロックが出力され、バスインタフェースユニット１２に供給されている。また、ＰＬＬ１１から出力される内部クロックは、３つのＯＲ回路２１〜２３、第１の遅延回路２４、および第２の遅延回路２５に入力される。ＯＲ回路２１〜２３は、入力された信号の論理和を出力する論理回路である。第１の遅延回路２４と第２の遅延回路２５とは、入力された信号を所定期間遅延させて出力する回路である。第１の遅延回路２４は、入力されたスリープ信号の変化を、内部クロックの周期で１周期分の時間遅延させる。第２の遅延回路２５は、入力されたスリープ信号の変化を、内部クロックの周期で２周期分の時間遅延させる。
【００２４】
バスインタフェースユニット１２には、さらにウェイクアップ信号が入力されている。バスインタフェースユニット１２からはスリープ信号が出力される。スリープ信号は、ハイアクティブ（ハイレベルのときに有効）の信号である。スリープ信号は、ＯＲ回路２１、第１の遅延回路２４および第２の遅延回路２５に入力される。
【００２５】
ＯＲ回路２１の出力は、整数ユニット１３に入力される。第１の遅延回路２４の出力は、ＯＲ回路２２に入力される。ＯＲ回路２２の出力は、命令キャッシュ１４に入力される。第２の遅延回路２５の出力は、ＯＲ回路２３に入力される。ＯＲ回路２３の出力は、データキャッシュ１５に入力される。
【００２６】
このような構成のマイクロプロセッサに対して、システムクロックが外部から継続してＰＬＬ１１に入力される。そして、ＰＬＬ１１により、システムクロックに基づいて所定の周波数の内部クロックが出力される。
【００２７】
また、マイクロプロセッサのバスインタフェースユニット１２には、動作モードを指定するウェイクアップ信号が入力される。ウェイクアップ信号は、通常は、ハイレベルが維持されている。そして、ウェイクアップ信号は、マイクロプロセッサを通常動作モードで動作させる際に、所定期間（たとえば、マイクロプロセッサの外部の回路のシステムクロックで２サイクル以上）アサート（ローレベル）される。ウェイクアップ信号が所定期間アサートされるとスリープ信号がネゲートされ、バスインタフェースユニット１２、ＯＲ回路２１〜２３、第１の遅延回路２４、及び第２の遅延回路２５の連携した動作により、ＰＬＬ１１から整数ユニット１３、命令キャッシュ１４およびデータキャッシュ１５それぞれへ、内部クロックが時間をずらして供給される。
【００２８】
また、外部からマイクロプロセッサに対して、スリープモードへの遷移を示す入力が行われるとスリープ信号がアサートされ、バスインタフェースユニット１２、ＯＲ回路２１〜２３、第１の遅延回路２４、及び第２の遅延回路２５の連携した動作により、ＰＬＬ１１から整数ユニット１３、命令キャッシュ１４およびデータキャッシュ１５それぞれへの内部クロックの供給が、時間をずらして停止される。なお、スリープモードへの遷移を示す入力により、マイクロプロセッサ内の所定のレジスタ（スリープモードレジスタ）に１が設定される。この場合、スリープモードレジスタの値は、スリープモードへの遷移後初期化される（０が設定される）。
【００２９】
以上のような構成により、各同期回路（整数ユニット１３、命令キャッシュ１４およびデータキャッシュ１５）へのクロックの供給タイミングが制御される。すなわち、バスインタフェースユニット１２、ＯＲ回路２１〜２３、第１の遅延回路２４、及び第２の遅延回路２５により、クロック供給制御回路が構成されている。
【００３０】
ここで、マイクロプロセッサの動作モードを、スリープモードから通常動作モードに切り換える際の各回路の動作について説明する。
ウェイクアップ信号が所定期間アサートされると、バスインタフェースユニット１２によりスリープ信号がネゲート（解除）される。このときＯＲ回路２１には、ローレベルのスリープ信号と、ＰＬＬ１１が出力した内部クロックとが入力される。その結果、ＯＲ回路２１からは内部クロックが出力され、整数ユニット１３に供給される。整数ユニット１３は、内部クロックが供給されることにより、動作を開始する。
【００３１】
また、スリープ信号がネゲートされたとき、第１の遅延回路２４には、ローレベルのスリープ信号と、ＰＬＬ１１が出力した内部クロックとが入力される。第１の遅延回路２４は、スリープ信号がネゲートされてから内部クロックの１周期分経過後に出力信号をネゲートする。その結果、スリープ信号がネゲートされてから１周期経過後から、ＯＲ回路２２から内部クロックが出力され、命令キャッシュ１４に供給される。命令キャッシュ１４は、内部クロックが供給されることにより、動作を開始する。
【００３２】
さらに、スリープ信号がネゲートされたとき、第２の遅延回路２５には、ローレベルのスリープ信号と、ＰＬＬ１１が出力した内部クロックとが入力される。第２の遅延回路２５は、スリープ信号がネゲートされてから内部クロックの２周期分経過後に出力信号をネゲートする。その結果、スリープ信号がネゲートされてから２周期経過後から、ＯＲ回路２３から内部クロックが出力され、データキャッシュ１５に供給される。データキャッシュ１５は、内部クロックが供給されることにより、動作を開始する。
【００３３】
このようにして、通常動作モードに切り換える際に、整数ユニット１３、命令キャッシュ１４、およびデータキャッシュ１５に対して、内部クロックの信号を、１周期分ずつずらして供給することができる。各回路は、内部クロックに同期して動作するため、内部クロックの供給が開始された時点から動作を開始する。したがって、各回路の動作開始タイミングがずれることになり、モード切替時のチップ全体での電流量の変化を少なく抑えることができる。電流量の変化が少ないことで、余計なノイズを発生させずにすみ、ＰＬＬ１１のロックが外れることもなくなる。
【００３４】
次に、マイクロプロセッサの動作モードを、通常動作モードからスリープモードに切り換える際の各回路の動作について説明する。
スリープモードへの遷移を示す入力が行われる（スリープモードレジスタに１が設定される）と、バスインタフェースユニット１２によりスリープ信号がアサート（有効化）される。このときＯＲ回路２１には、ハイレベルのスリープ信号と、ＰＬＬ１１が出力した内部クロックとが入力される。その結果、ＯＲ回路２１からはハイレベルのスリープ信号が出力され、整数ユニット１３に供給される。整数ユニット１３は、内部クロックに代えて常にハイレベルのスリープ信号が供給されることにより、動作を停止する。
【００３５】
また、スリープ信号がアサートされたとき、第１の遅延回路２４には、ハイレベルのスリープ信号と、ＰＬＬ１１が出力した内部クロックとが入力される。第１の遅延回路２４は、スリープ信号がアサートされてから内部クロックの１周期分経過後に出力信号をアサートする。その結果、スリープ信号がアサートされてから１周期経過後から、ＯＲ回路２２からハイレベルのスリープ信号が出力され、命令キャッシュ１４に供給される。命令キャッシュ１４は、内部クロックに代えて常にハイレベルのスリープ信号が供給されることにより、動作を停止する。
【００３６】
さらに、スリープ信号がアサートされたとき、第２の遅延回路２５には、ハイレベルのスリープ信号と、ＰＬＬ１１が出力した内部クロックとが入力される。第２の遅延回路２５は、スリープ信号がアサートされてから内部クロックの２周期分経過後に出力信号をアサートする。その結果、スリープ信号がアサートされてから２周期経過後から、ＯＲ回路２３からハイレベルのスリープ信号が出力され、データキャッシュ１５に供給される。データキャッシュ１５は、内部クロックに代えて常にハイレベルのスリープ信号が供給されることにより、動作を停止する。
【００３７】
このようにして、スリープモードに切り換える際に、整数ユニット１３、命令キャッシュ１４、およびデータキャッシュ１５に対する内部クロックの供給を、１周期間隔で時間をずらして停止することができる。その結果、各回路の動作停止タイミングがずれることになり、動作モード切替時のチップ全体での電流量の変化を少なく抑えることができる。電流量の変化が少ないことで、余計なノイズを発生させずにすみ、ＰＬＬのロックが外れることもなくなる。その結果、動作モードの切替時においても、内部の回路に安定した内部クロックを供給し、マイクロプロセッサを安定して動作させることができる。
【００３８】
次に、遅延回路の内部構成について説明する。
図２は、遅延回路の内部構成を示す図である。第１の遅延回路と第２の遅延回路とは、遅延時間（内部クロックのサイクル数）に応じた数のフリップフロップで構成されている。
【００３９】
すなわち、第１の遅延回路２４は、１つのフリップフロップ２４ａで構成されている。また、第２の遅延回路２５は、２つのフリップフロップ２５ａ，２５ｂで構成されている。これらのフリップフロップ２４ａ，２５ａ，２５ｂは、いずれもＤ(Delay)−ＦＦ(Flip-Flop)と呼ばれるフリップフロップである。Ｄ−ＦＦは、Ｄ端子に入力された値を、クロックパルスの立ち上がりで取り込み、Ｑ端子から出力する。
【００４０】
スリープ信号は、第１の遅延回路２４のフリップフロップ２４ａのＤ端子と、第２の遅延回路２５のフリップフロップ２５ａのＤ端子とに入力されている。内部クロックは、第１の遅延回路２４のフリップフロップ２４ａのクロック（ＣＫ）端子と、第２の遅延回路２５の２つのフリップフロップ２５ａ，２５ｂのクロック（ＣＫ）端子とに入力されている。
【００４１】
第１の遅延回路２４のフリップフロップ２４ａのＱ端子が、図１に示すＯＲ回路２２に接続される。また、第２の遅延回路２５のフリップフロップ２５ａのＱ端子がフリップフロップ２５ｂのＤ端子に接続されている。そして、フリップフロップ２５ｂのＱ端子が、図１に示すＯＲ回路２３に接続される。
【００４２】
このような遅延回路によれば、動作モードが切り替わる際には、内部クロックの立ち上がりに合わせて、スリープ信号がネゲートまたはアサートされる。次の周期の内部クロックの立ち上がりで、フリップフロップ２４ａとフリップフロップ２５ａとにスリープ信号が取り込まれ、Ｑ端子から出力される。その次の周期の内部クロックの立ち上がりで、スリープ信号がフリップフロップ２５ｂに取り込まれ、Ｑ端子から出力される。
【００４３】
このようにＤ−ＦＦを用いることで、任意の時間だけスリープ信号を遅延させる遅延回路を構成することができる。
図３は、第１の実施の形態に係るマイクロプロセッサのタイミングチャートである。図３には、上から順番に、システムクロック、スリープ信号、ウェイクアップ信号、ＰＬＬ１１の内部クロック、バスインタフェースユニット１２の内部クロック、第１の遅延回路２４の出力、命令キャッシュ１４の内部クロック、第２の遅延回路２５の出力、およびデータキャッシュ１５の内部クロックが示されている。
【００４４】
ＰＬＬ１１の内部クロックは、システムクロックに位相を合わせてＰＬＬ１１内部で発生させるクロックである。バスインタフェースユニット１２の内部クロックは、バスインタフェースユニット１２を構成する内部回路のうち、通常動作モードのときにのみ動作する部分に供給されるクロックである。バスインタフェースユニット１２を構成する内部回路のうち、ウェイクアップ信号の入力を検知する回路などはスリープモードの間も動作する必要があるため、ＰＬＬ１１から出された内部クロックがそのまま供給される。なお、整数ユニット１３には、バスインタフェースユニット１２の内部クロックと同様の内部クロックが供給される。
【００４５】
命令キャッシュ１４の内部クロックは、命令キャッシュ１４の内部の回路に供給されるクロックである。データキャッシュ１５の内部クロックは、データキャッシュ１５の内部の回路に供給されるクロックである。
【００４６】
図３の例では、ＰＬＬ１１の内部クロックは、システムクロックの周期の半分の周期である。また、時刻Ｔ１以前は、マイクロプロセッサの動作モードがスリープモードに設定されているものとする。ウェイクアップ信号は、通常動作モードへの遷移指示が入力されるとき以外は、ハイレベルである。スリープモードの間は、スリープ信号、バスインタフェースユニット１２の内部クロック、第１の遅延回路２４の出力、命令キャッシュ１４の内部クロック、第２の遅延回路２５の出力およびデータキャッシュ１５の内部クロックがハイレベルである。
【００４７】
時刻Ｔ０に、ウェイクアップ信号がハイレベルからローレベルに変更される。その状態が、システムクロックで２周期の時間継続することで、通常動作モードへの遷移の指示がバスインタフェースユニット１２で認識される。
【００４８】
時刻Ｔ１に、ウェイクアップ信号がローレベルからハイレベルに変更される。同時に、バスインタフェースユニット１２のスリープ信号がハイレベルからローレベルに切り替わる（ネゲートされる）。また、バスインタフェースユニット１２の内部クロックが、ＰＬＬ１１の内部クロックと同じ信号になる。この時点では、第１の遅延回路２４の出力と第２の遅延回路２５の出力とは、ハイレベルのままである。したがって、命令キャッシュ１４の内部クロックとデータキャッシュ１５の内部クロックとは、ハイレベルのままである。
【００４９】
時刻Ｔ２に、第１の遅延回路２４の出力がローレベルに切り替わる。すると、命令キャッシュ１４の内部クロックが、ＰＬＬ１１の内部クロックと同じ信号になる。この時点では、第２の遅延回路２５の出力はハイレベルのままである。したがって、データキャッシュ１５の内部クロックはハイレベルのままである。
【００５０】
時刻Ｔ３に、第２の遅延回路２５の出力がローレベルに切り替わる。すると、データキャッシュ１５の内部クロックが、ＰＬＬ１１の内部クロックと同じ信号になる。
【００５１】
このようにして、マイクロプロセッサのモードを切り替える際に（たとえば、スリープモード（低消費電力モード）から通常動作モードへの復帰時）において、プロセッサ内の各回路（モジュール）へのクロック供給タイミングをずらすことができる。その結果、モード切り替え時のグランドレベルに発生するノイズの変動を抑えることができ、ＰＬＬのロックが外れることが防止される。すなわち、マイクロプロセッサに流れる電流の変化を分散させることにより、急激なグランドレベルの変化(ノイズ)が抑えられる。これにより、従来スリープ解除時に発生していたＰＬＬロック外れによる誤動作を、第１の実施の形態に示す構成によって防ぐことが出来る。
【００５２】
また、第１の実施の形態では、スリープモードから通常動作モードへの復帰時には、整数ユニット１３、命令キャッシュ１４、データキャッシュ１５の順で、内部クロックの１周期間隔で時間をずらして、内部クロックの供給を開始している。この回路の起動順は、マイクロプロセッサ内の処理の発生順に沿っている。
【００５３】
すなわち、マクロプロセッサの動作開始時は、整数ユニット１３がまず起動する。そして、整数ユニット１３が、命令キャッシュ１４から命令をフェッチする。その後、整数ユニット１３はデータキャッシュ１５にアクセスし、フェッチした命令に従って実行する処理に必要なデータを取得する。このように、プロセッサ内の動作は、整数ユニット１３、命令キャッシュ１４、データキャッシュ１５の順で実行される。従って、整数ユニット１３への内部クロックの供給開始から１周期送れて命令キャッシュ１４への内部クロックの供給が開始され、その後さらに１周期送れてデータキャッシュ１５への内部クロックの供給が開始されても、プロセッサにおける処理が滞ることはない。
【００５４】
［第２の実施の形態］
第２の実施の形態は、通常動作モードへ遷移する場合にのみ、内部クロックの供給タイミングの遅延制御を行う場合の例である。ＰＬＬのロックが外れることによる誤動作の影響が大きいのは、通常動作モードへ移行する際である。逆に、スリープモードに移行するときは、全ての回路の動作をすぐに停止させることで、電力消費量の低減を図ることができる。スリープモードへの移行の際にＰＬＬのロックが外れてしまっても、スリープモードへの移行後一定時間経過するまでモード切り替えができないようにすれば、スリープモード中にＰＬＬのロック状態を回復させることができる。
【００５５】
図４は、第２の実施の形態に係るマイクロプロセッサの回路構成例を示す図である。図４に示すようにマイクロプロセッサは、ＰＬＬ３１、バスインタフェースユニット３２、整数ユニット３３、命令キャッシュ３４、およびデータキャッシュ３５を有している。これらの各回路の機能は、図１に示した第１の実施の形態の同名の回路と同じである。
【００５６】
ＰＬＬ３１には、システムクロックが入力されている。ＰＬＬ３１からは内部クロックが出力され、バスインタフェースユニット３２に供給されている。また、ＰＬＬ３１から出力される内部クロックは、３つのＯＲ回路４１〜４３、第１の遅延回路４４、および第２の遅延回路４５に入力される。ＯＲ回路４１〜４３は、入力された信号の論理和を出力する論理回路である。第１の遅延回路４４と第２の遅延回路４５とは、入力された信号を所定期間遅延させて出力する回路であり、それぞれ図２に示した第１の実施の形態における第１の遅延回路２４、第２の遅延回路２５と同様の内部構成である。
【００５７】
バスインタフェースユニット３２には、さらにウェイクアップ信号が入力されている。バスインタフェースユニット３２からはスリープ信号が出力される。スリープ信号は、ハイアクティブの信号である。スリープ信号は、ＯＲ回路４１、第１の遅延回路４４、第２の遅延回路４５、およびＯＲ回路４６，４７に入力される。ＯＲ回路４６，４７は、入力された信号の論理和を出力する論理回路である。
【００５８】
ＯＲ回路４１の出力は、整数ユニット３３に入力される。第１の遅延回路４４の出力は、ＯＲ回路４６に入力される。ＯＲ回路４６の出力は、ＯＲ回路４２に入力される。ＯＲ回路４２の出力は、命令キャッシュ３４に入力される。第２の遅延回路４５の出力は、ＯＲ回路４７に入力される。ＯＲ回路４７の出力は、ＯＲ回路４３に入力される。ＯＲ回路４３の出力は、データキャッシュ３５に入力される。
【００５９】
このような構成のマイクロプロセッサに対して、システムクロックが外部から継続して入力される。システムクロックはＰＬＬ３１に入力される。そして、ＰＬＬ３１により、システムクロックに基づいて所定の周波数の内部クロックが出力される。また、マイクロプロセッサのバスインタフェースユニット３２には、動作モードを指定するウェイクアップ信号が入力される。ウェイクアップ信号は、通常はハイレベルであり、スリープモードから通常動作モードへプロセッサの動作モードを遷移させる際に、所定期間アサート（ローレベル）される。
【００６０】
ここで、マイクロプロセッサの動作モードを、スリープモードから通常動作モードに切り換える際の各回路の動作について説明する。
ウェイクアップ信号が所定期間アサートされると、バスインタフェースユニット３２によりスリープ信号がネゲート（ローレベル）される。このときＯＲ回路４１には、ローレベルのスリープ信号と、ＰＬＬ３１が出力した内部クロックとが入力される。その結果、ＯＲ回路４１からは内部クロックが出力され、整数ユニット３３に供給される。
【００６１】
また、スリープ信号がネゲートされたとき、第１の遅延回路４４には、ローレベルのスリープ信号と、ＰＬＬ３１が出力した内部クロックとが入力される。第１の遅延回路４４は、スリープ信号がネゲートされてから内部クロックの１周期分経過後に出力信号をネゲートする。このとき、ＯＲ回路４６には、第１の遅延回路４４のローレベルの出力と、ローレベルのスリープ信号とが入力される。そのため、ＯＲ回路４６からはローレベルの信号が出力される。すると、ＯＲ回路４２には、内部クロックとローレベルの信号とが入力されることとなる。その結果、スリープ信号がネゲートされてから１周期分経過以降、ＯＲ回路４２から内部クロックが出力され、命令キャッシュ３４に供給される。
【００６２】
さらに、スリープ信号がネゲートされたとき、遅延回路４５には、ローレベルのスリープ信号と、ＰＬＬ３１が出力した内部クロックとが入力される。遅延回路４５は、スリープ信号がネゲートされてから内部クロックの２周期分経過後に出力信号をネゲートする。このとき、ＯＲ回路４７には、第２の遅延回路４５のローレベルの出力と、ローレベルのスリープ信号とが入力される。そのため、ＯＲ回路４７からはローレベルの信号が出力される。すると、ＯＲ回路４３には、内部クロックとローレベルの信号とが入力されることとなる。その結果、スリープ信号がネゲートされてから２周期分経過以降、ＯＲ回路４３から内部クロックが出力され、データキャッシュ３５に供給される。
【００６３】
このようにして、通常動作モードに切り換える際に、整数ユニット３３、命令キャッシュ３４、およびデータキャッシュ３５に対して、内部クロックの信号を、１周期間隔で時間をずらして供給することができる。
【００６４】
次に、マイクロプロセッサの動作モードを、通常動作モードからスリープモードに切り換える際の各回路の動作について説明する。
スリープモードへの遷移を示す入力（スリープモードレジスタへの１の設定）が行われると、バスインタフェースユニット３２によりスリープ信号がアサートされる。このときＯＲ回路４１には、ハイレベルのスリープ信号と、ＰＬＬ３１が出力した内部クロックとが入力される。その結果、ＯＲ回路４１からはハイレベルのスリープ信号が出力され、整数ユニット３３に供給される。
【００６５】
また、スリープ信号がアサートされたとき、第１の遅延回路４４には、ハイレベルのスリープ信号と、ＰＬＬ３１が出力した内部クロックとが入力される。第１の遅延回路４４は、スリープ信号がアサートされてから内部クロックの１周期分経過後に出力信号をアサートする。一方、ＯＲ回路４６には、スリープ信号がアサートされたときからハイレベルのスリープ信号が入力されている。そのため、第１の遅延回路４４の出力に関係なく、スリープ信号がアサートされた直後から、ＯＲ回路４６からハイレベルの信号が出力される。すると、ＯＲ回路４２には、スリープ信号がアサートされた直後から内部クロックとハイレベルのスリープ信号とが入力されることとなる。その結果、スリープ信号がアサートされた直後から、ＯＲ回路４２からハイレベルの信号が出力され、命令キャッシュ３４に供給される。
【００６６】
スリープ信号がアサートされたとき、第２の遅延回路４５には、ハイレベルのスリープ信号と、ＰＬＬ３１が出力した内部クロックとが入力される。第２の遅延回路４５は、スリープ信号がアサートされてから内部クロックの２周期分経過後に出力信号をアサートする。一方、ＯＲ回路４７には、スリープ信号がアサートされたときからハイレベルのスリープ信号が入力されている。そのため、第２の遅延回路４５の出力に関係なく、スリープ信号がアサートされた直後から、ＯＲ回路４７からハイレベルの信号が出力される。すると、ＯＲ回路４３には、スリープ信号がアサートされた直後から内部クロックとハイレベルのスリープ信号とが入力されることとなる。その結果、スリープ信号がアサートされた直後から、ＯＲ回路４３からハイレベルの信号が出力され、データキャッシュ３５に供給される。
【００６７】
このようにして、スリープモードから通常動作モードへ移行する際には、タイミングをずらして各回路へ内部クロックを供給し、通常動作モードからスリープモードへ移行する際には、各回路へ同時に内部クロックの供給を停止することができる。
【００６８】
［第３の実施の形態］
第３の実施の形態は、内部クロックが２層クロックのマイクロプロセッサに本発明を適用した場合の例である。
【００６９】
図５は、第３の実施の形態に係るマイクロプロセッサの回路構成例を示す図である。図５に示すようにマイクロプロセッサは、ＰＬＬ５１、バスインタフェースユニット５２、整数ユニット５３、命令キャッシュ５４、およびデータキャッシュ５５を有している。これらの各回路の機能は、図１に示した第１の実施の形態の同名の回路とほぼ同じである。但し、図５に示すＰＬＬ５１は、２層クロックを生成する。また、バスインタフェースユニット５２、整数ユニット５３、命令キャッシュ５４、およびデータキャッシュ５５は、２層クロックに従って内部回路が動作する。
【００７０】
ＰＬＬ５１には、システムクロックが入力されている。ＰＬＬ５１からは２層の内部クロック（ＰＨ１，ＰＨ２）が出力され、バスインタフェースユニット５２に供給されている。また、ＰＬＬ５１から出力される内部クロックＰＨ１は、３つのＯＲ回路６１〜６３、第１の遅延回路６４、および第２の遅延回路６５に入力される。ＰＬＬ５１から出力される内部クロックＰＨ２は、３つのＡＮＤ回路６６〜６８、第１の遅延回路６４、および第２の遅延回路６５に入力される。
【００７１】
第１の遅延回路６４と第２の遅延回路６５とは、入力された信号を所定期間遅延させて出力する回路である。第１の遅延回路６４は、入力されたスリープ信号の変化を、内部クロックの周期で１周期分の時間遅延させる。第２の遅延回路６５は、入力されたスリープ信号の変化を、内部クロックの周期で２周期分の時間遅延させる。
【００７２】
バスインタフェースユニット５２には、さらにウェイクアップ信号が入力されている。バスインタフェースユニット５２からはスリープ信号が出力される。スリープ信号は、ハイアクティブの信号である。スリープ信号は、ＯＲ回路６１、第１の遅延回路６４、第２の遅延回路６５、およびＡＮＤ回路６６に入力される。
【００７３】
ＯＲ回路６１の出力は、整数ユニット５３に入力される。第１の遅延回路６４の出力は、ＯＲ回路６２に入力されると共に、信号を反転してＡＮＤ回路６７に入力される。ＯＲ回路６２の出力とＡＮＤ回路６７の出力とは、命令キャッシュ５４に入力される。第２の遅延回路６５の出力は、ＯＲ回路６３に入力されると共に、信号を反転してＡＮＤ回路６８に入力される。ＯＲ回路６３の出力とＡＮＤ回路６８の出力とは、データキャッシュ５５に入力される。
【００７４】
ここで、マイクロプロセッサの動作モードを、スリープモードから通常動作モードに切り換える際の各回路の動作について説明する。
ウェイクアップ信号が所定期間アサート（ローレベル）されると、バスインタフェースユニット５２によりスリープ信号がネゲートされる。このときＯＲ回路６１には、ローレベルのスリープ信号と、ＰＬＬ５１が出力した内部クロック（ＰＨ１）とが入力される。その結果、ＯＲ回路６１からは内部クロック（ＰＨ１）が出力され、整数ユニット５３に供給される。また、ＡＮＤ回路６６には、ローレベルのスリープ信号が反転されて（ハイレベルの信号に変換されて）入力されると共に、内部クロック（ＰＨ２）が入力される。その結果、ＡＮＤ回路６６からは内部クロック（ＰＨ２）が出力され、整数ユニット５３に供給される。
【００７５】
また、スリープ信号がネゲートされたとき、第１の遅延回路６４には、ローレベルのスリープ信号と、ＰＬＬ５１が出力した２層の内部クロック（ＰＨ１，ＰＨ２）とが入力される。第１の遅延回路６４は、スリープ信号がネゲートされてから内部クロックの１周期分経過後に出力信号をネゲートする。その結果、スリープ信号がネゲートされてから１周期経過した後、ＯＲ回路６２から内部クロック（ＰＨ１）が出力され、命令キャッシュ５４に供給される。また、スリープ信号がネゲートされてから１周期経過した後、ＡＮＤ回路６７から内部クロック（ＰＨ２）が出力され、命令キャッシュ５４に供給される。
【００７６】
さらに、スリープ信号がネゲートされたとき、第２の遅延回路６５には、ローレベルのスリープ信号と、ＰＬＬ５１が出力した内部クロック（ＰＨ１，ＰＨ２）とが入力される。第２の遅延回路６５は、スリープ信号がネゲートされてから内部クロックの２周期分経過後に出力信号をネゲートする。その結果、スリープ信号がネゲートされてから２周期経過した後、ＯＲ回路６３から内部クロック（ＰＨ１）が出力され、データキャッシュ５５に供給される。また、スリープ信号がネゲートされてから２周期経過した後、ＡＮＤ回路６８から内部クロック（ＰＨ２）が出力され、データキャッシュ５５に供給される。
【００７７】
このようにして、通常動作モードに切り換える際に、整数ユニット５３、命令キャッシュ５４、およびデータキャッシュ５５に対して、内部クロック（ＰＨ１，ＰＨ２）の信号を、１周期分ずつずらして供給することができる。
【００７８】
次に、マイクロプロセッサの動作モードを、通常動作モードからスリープモードに切り換える際の各回路の動作について説明する。
スリープモードへの遷移を示す入力が行われる（スリープモードレジスタに１が設定される）と、バスインタフェースユニット５２によりスリープ信号がアサートされる。このときＯＲ回路６１には、ハイレベルのスリープ信号と、ＰＬＬ５１が出力した内部クロック（ＰＨ１）とが入力される。その結果、ＯＲ回路６１からはハイレベルの信号が出力され、整数ユニット５３に供給される。また、ＡＮＤ回路６６には、ハイレベルのスリープ信号が反転されて入力されると共に、ＰＬＬ５１が出力した内部クロック（ＰＨ２）とが入力される。その結果、ＡＮＤ回路６６からはローレベルの信号が出力され、整数ユニット５３に供給される。
【００７９】
また、スリープ信号がアサートされたとき、第１の遅延回路６４には、ハイレベルのスリープ信号と、ＰＬＬ５１が出力した内部クロック（ＰＨ１，ＰＨ２）とが入力される。第１の遅延回路６４は、スリープ信号がアサートされてから内部クロックの１周期分経過後に出力信号をアサートする。その結果、スリープ信号がアサートされてから１周期経過後から、ＯＲ回路６２からハイレベルの信号が出力され、命令キャッシュ５４に供給される。また、スリープ信号がアサートされてから１周期経過後から、ＡＮＤ回路６７からローレベルの信号が出力され、命令キャッシュ５４に供給される。
【００８０】
さらに、スリープ信号がアサートされたとき、第２の遅延回路６５には、ハイレベルのスリープ信号と、ＰＬＬ５１が出力した内部クロック（ＰＨ１，ＰＨ２）とが入力される。第２の遅延回路６５は、スリープ信号がアサートされてから内部クロックの２周期分経過後に出力信号をアサートする。その結果、スリープ信号がアサートされてから２周期経過後から、ＯＲ回路６３からハイレベルの信号が出力され、データキャッシュ５５に供給される。また、スリープ信号がアサートされてから２周期経過後から、ＡＮＤ回路６８からローレベルの信号が出力され、データキャッシュ５５に供給される。
【００８１】
このようにして、スリープモードに切り換える際に、整数ユニット５３、命令キャッシュ５４、およびデータキャッシュ５５に対して、内部クロックの供給を、１周期ずつずらして停止することができる。
【００８２】
ところで、第３の実施の形態における第１の遅延回路６４と第２の遅延回路６５とは、たとえば多段のラッチ回路で構成することができる。
図６は、第３の実施の形態における遅延回路の構成例を示す図である。第１の遅延回路６４と第２の遅延回路とは、遅延時間に応じた数（遅延させる周期の２倍）のラッチ回路で構成される。すなわち、第１の遅延回路６４は、２つのラッチ回路６４ａ，６４ｂで構成されている。また、第２の遅延回路６５は、４つのラッチ回路６５ａ〜６５ｄで構成されている。ラッチ回路６４ａ，６４ｂ，６５ａ〜６５ｄは、Ｄ(delay)ラッチと呼ばれる回路である。この回路は、Ｇ端子への入力がハイレベルのとき、Ｄ端子に入力された信号がＱ端子に伝わる。また、Ｇ端子への入力がローレベルのときデータの流れが遮断され、以前の出力が保持される。
【００８３】
第１の遅延回路６４では、１段目のラッチ回路６４ａのＤ端子にスリープ信号が入力され、Ｇ端子に内部クロック（ＰＨ２）が入力されている。ラッチ回路６４ａのＱ端子は、２段目のラッチ回路６４ｂのＤ端子に接続されている。ラッチ回路６４ｂのＧ端子には、内部クロック（ＰＨ１）が入力されている。ラッチ回路６４ｂのＱ端子が第１の遅延回路６４の出力として、図５に示すＯＲ回路６２とＡＮＤ回路６７とに供給される。
【００８４】
第２の遅延回路６５では、１段目のラッチ回路６５ａのＤ端子にスリープ信号が入力され、Ｇ端子に内部クロック（ＰＨ２）が入力されている。ラッチ回路６５ａのＱ端子は、２段目のラッチ回路６５ｂのＤ端子に接続されている。ラッチ回路６５ｂのＧ端子には、内部クロック（ＰＨ１）が入力されている。ラッチ回路６５ｂのＱ端子は、３段目のラッチ回路６５ｃのＤ端子に接続されている。ラッチ回路６５ｃのＧ端子には、内部クロック（ＰＨ２）が入力されている。ラッチ回路６５ｃのＱ端子は、４段目のラッチ回路６５ｄのＤ端子に接続されている。ラッチ回路６５ｄのＧ端子には、内部クロック（ＰＨ１）が入力されている。ラッチ回路６５ｄのＱ端子が第２の遅延回路６５の出力として、図５に示すＯＲ回路６３とＡＮＤ回路６８とに供給される。
【００８５】
このような回路の遅延回路によれば、第１の遅延回路６４では、スリープ信号の出力が変化すると、内部クロックで１周期分の時間経過後にスリープ信号の出力の変化が第１の遅延回路６４の出力に反映される。また、第２の遅延回路６５では、スリープ信号の出力が変化すると、内部クロックで２周期分の時間経過後にスリープ信号の出力の変化が第２の遅延回路６５の出力に反映される。
【００８６】
たとえば、スリープ信号がハイレベルからローレベルへ変化した場合（スリープモードから通常動作モードへ遷移するとき）を想定する。スリープ信号がハイレベルの間は、全てのラッチ回路６４ａ，６４ｂ，６５ａ〜６５ｄのＱ端子からの出力はハイレベルである。
【００８７】
スリープ信号がローレベルになると、内部クロック（ＰＨ２）がハイレベルになったときに、１段目のラッチ回路６４ａ，６５ａのＱ端子の出力がローレベルになる。次に、内部クロック（ＰＨ１）がハイレベルになったときに、２段目のラッチ回路６４ｂ，６５ｂのＱ端子の出力がローレベルになる。これにより、第１の遅延回路６４からローレベルの信号が出力される。
【００８８】
その後、内部クロック（ＰＨ２）がハイレベルになったときに、３段目のラッチ回路６５ｃのＱ端子の出力がローレベルになる。次に、内部クロック（ＰＨ１）がハイレベルになったときに、４段目のラッチ回路６５ｄのＱ端子の出力がローレベルになる。これにより、第２の遅延回路６５からローレベルの信号が出力される。
【００８９】
このようにして、各遅延回路によってスリープ信号を遅延させることができる。なお、スリープ信号がローレベルからハイレベルに変化するとき（通常動作モードからスリープモードへ遷移するとき）も、信号の伝わり方は同じである。
【００９０】
図７は、第３の実施の形態に係るマイクロプロセッサのタイミングチャートである。図７には、上から順番に、システムクロック、スリープ信号、ウェイクアップ信号、ＰＬＬ５１の内部クロック（ＰＨ１）、ＰＬＬ５１の内部クロック（ＰＨ２）、バスインタフェースユニット５２の内部クロック（ＰＨ１）、バスインタフェースユニット５２の内部クロック（ＰＨ２）、第１の遅延回路６４の出力、命令キャッシュ５４の内部クロック（ＰＨ１）、命令キャッシュ５４の内部クロック（ＰＨ２）、第２の遅延回路６５の出力、データキャッシュ５５の内部クロック（ＰＨ１）、およびデータキャッシュ５５の内部クロック（ＰＨ２）が示されている。なお、整数ユニット５３に供給される内部クロック（ＰＨ１，ＰＨ２）は、バスインタフェースユニット５２の内部クロック（ＰＨ１，ＰＨ２）と同様である。
【００９１】
図７の例では、ＰＬＬ５１の内部クロック（ＰＨ１，ＰＨ２）は、システムクロックの周期の半分の周期である。ＰＬＬ５１の内部クロック（ＰＨ１）とＰＬＬ５１の内部クロック（ＰＨ２）とは、位相が正反対（１８０度ずれている）のクロック信号である。また、時刻Ｔ１１以前は、マイクロプロセッサの動作モードがスリープモードに設定されているものとする。ウェイクアップ信号は、通常動作モードへの遷移指示が入力されるとき以外はハイレベルである。スリープモードの間は、バスインタフェースユニット５２の内部クロック（ＰＨ２）、命令キャッシュ５４の内部クロック（ＰＨ２）、およびデータキャッシュ５５の内部クロック（ＰＨ２）がローレベルである。また、スリープモードの間は、スリープ信号、バスインタフェースユニット５２の内部クロック（ＰＨ１）、第１の遅延回路６４の出力、命令キャッシュ５４の内部クロック（ＰＨ１）、第２の遅延回路６５の出力、およびデータキャッシュ５５の内部クロック（ＰＨ１）がハイレベルである。
【００９２】
時刻Ｔ１０に、ウェイクアップ信号がハイレベルからローレベルに変更される。その状態が、システムクロックで２周期の時間継続することで、通常動作モードへの遷移の指示がバスインタフェースユニット５２で認識される。
【００９３】
時刻Ｔ１１に、ウェイクアップ信号がローレベルからハイレベルに変更される（アサートされる）。同時に、バスインタフェースユニット５２のスリープ信号がハイレベルからローレベルに切り替わる（ネゲートされる）。また、バスインタフェースユニット５２の内部クロック（ＰＨ１、ＰＨ２）が、それぞれＰＬＬ１１の内部クロック（ＰＨ１、ＰＨ２）と同じ信号になる。この時点では、第１の遅延回路６４の出力と第２の遅延回路６５の出力とは、ハイレベルのままである。したがって、命令キャッシュ５４の内部クロック（ＰＨ１、ＰＨ２）とデータキャッシュ５５の内部クロック（ＰＨ１、ＰＨ２）とは変化しない。
【００９４】
時刻Ｔ１２に、第１の遅延回路６４の出力がローレベルに切り替わる。すると、命令キャッシュ５４の内部クロック（ＰＨ１、ＰＨ２）が、それぞれＰＬＬ５１の内部クロック（ＰＨ１、ＰＨ２）と同じ信号になる。この時点では、第２の遅延回路６５の出力はハイレベルのままである。したがって、データキャッシュ５５の内部クロック（ＰＨ１、ＰＨ２）は変化しない。
【００９５】
時刻Ｔ１３に、第２の遅延回路６５の出力がローレベルに切り替わる。すると、データキャッシュ５５の内部クロック（ＰＨ１、ＰＨ２）が、それぞれＰＬＬ５１の内部クロックと同じ信号になる。
【００９６】
［第４の実施の形態］
第４の実施の形態は、内部クロックが２層クロックのマイクロプロセッサにおいて、通常動作モードへ切り替えるときのみ、内部クロックの供給タイミングを遅延させる場合の例である。
【００９７】
図８は、第４の実施の形態に係るマイクロプロセッサの回路構成例を示す図である。図８に示すようにマイクロプロセッサは、ＰＬＬ７１、バスインタフェースユニット７２、整数ユニット７３、命令キャッシュ７４、およびデータキャッシュ７５を有している。これらの各回路の機能は、図５に示した第３の実施の形態の同名の回路と同じである。
【００９８】
ＰＬＬ７１には、システムクロックが入力されている。ＰＬＬ７１からは２層の内部クロック（ＰＨ１，ＰＨ２）が出力され、バスインタフェースユニット７２に供給されている。また、ＰＬＬ７１から出力される内部クロックＰＨ１は、３つのＯＲ回路８１〜８３、第１の遅延回路８４、および第２の遅延回路８５に入力される。ＰＬＬ７１から出力される内部クロックＰＨ２は、３つのＡＮＤ回路８６〜８８、第１の遅延回路８４、および第２の遅延回路８５に入力される。
【００９９】
第１の遅延回路８４と第２の遅延回路８５とは、入力された信号を所定期間遅延させて出力する回路である。第１の遅延回路８４は、入力されたスリープ信号の変化を、内部クロックの周期で１周期分の時間遅延させる。第２の遅延回路８５は、入力されたスリープ信号の変化を、内部クロックの周期で２周期分の時間遅延させる。
【０１００】
バスインタフェースユニット７２には、さらにウェイクアップ信号が入力されている。バスインタフェースユニット７２からはスリープ信号が出力される。スリープ信号は、ハイアクティブの信号である。スリープ信号は、３つのＯＲ回路８１，９１，９２、第１の遅延回路８４、第２の遅延回路８５、ＡＮＤ回路８６に入力される。
【０１０１】
ＯＲ回路８１の出力は、整数ユニット７３に入力される。第１の遅延回路８４の出力は、ＯＲ回路９１に入力される。ＯＲ回路９１の出力はＯＲ回路８２に入力されると共に、信号を反転してＡＮＤ回路８７に入力される。ＯＲ回路８２の出力とＡＮＤ回路８７の出力とは、命令キャッシュ７４に入力される。第２の遅延回路８５の出力は、ＯＲ回路９２に入力される。ＯＲ回路９２の出力はＯＲ回路８３に入力されると共に、信号を反転してＡＮＤ回路８８に入力される。ＯＲ回路８３の出力とＡＮＤ回路８８の出力とは、データキャッシュ７５に入力される。
【０１０２】
ここで、マイクロプロセッサの動作モードを、スリープモードから通常動作モードに切り換える場合、スリープ際の各回路の動作について説明する。
ウェイクアップ信号が所定時間アサートされると、バスインタフェースユニット７２によりスリープ信号がネゲートされる。このときＯＲ回路８１には、ローレベルのスリープ信号と、ＰＬＬ７１が出力した内部クロック（ＰＨ１）とが入力される。その結果、ＯＲ回路８１からは内部クロック（ＰＨ１）が出力され、整数ユニット７３に供給される。また、ＡＮＤ回路８６には、ローレベルのスリープ信号が反転されて（ハイレベルの信号に変換されて）入力されると共に、内部クロック（ＰＨ２）が入力される。その結果、ＡＮＤ回路８６からは内部クロック（ＰＨ２）が出力され、整数ユニット７３に供給される。
【０１０３】
また、スリープ信号がネゲートされたとき、第１の遅延回路８４には、ローレベルのスリープ信号と、ＰＬＬ７１が出力した２層の内部クロック（ＰＨ１，ＰＨ２）とが入力される。第１の遅延回路８４は、スリープ信号がネゲートされてから内部クロックの１周期分経過後に出力信号をネゲートする。ＯＲ回路９１にバスインタフェースユニット７２から入力されているスリープ信号がローレベルであるため、ＯＲ回路９１の出力は、スリープ信号がネゲートされてから内部クロックの１周期分経過後にネゲートされる。その結果、スリープ信号がネゲートされてから１周期経過した後、ＯＲ回路８２から内部クロック（ＰＨ１）が出力され、命令キャッシュ７４に供給される。また、スリープ信号がネゲートされてから１周期経過した後、ＡＮＤ回路８７から内部クロック（ＰＨ２）が出力され、命令キャッシュ７４に供給される。
【０１０４】
さらに、スリープ信号がネゲートされたとき、第２の遅延回路８５には、ローレベルのスリープ信号と、ＰＬＬ７１が出力した内部クロック（ＰＨ１，ＰＨ２）とが入力される。第２の遅延回路８５は、スリープ信号がネゲートされてから内部クロックの２周期分経過後に出力信号をネゲートする。ＯＲ回路９２にバスインタフェースユニット７２から入力されているスリープ信号がローレベルであるため、ＯＲ回路９２の出力は、スリープ信号がネゲートされてから内部クロックの２周期分経過後にネゲートされる。その結果、スリープ信号がネゲートされてから２周期経過した後、ＯＲ回路８３から内部クロック（ＰＨ１）が出力され、データキャッシュ７５に供給される。また、スリープ信号がネゲートされてから２周期経過した後、ＡＮＤ回路８８から内部クロック（ＰＨ２）が出力され、データキャッシュ７５に供給される。
【０１０５】
このようにして、通常動作モードに切り換える際に、整数ユニット７３、命令キャッシュ７４、およびデータキャッシュ７５に対して、内部クロック（ＰＨ１，ＰＨ２）の信号を、１周期分ずつずらして供給することができる。
【０１０６】
次に、マイクロプロセッサの動作モードを、通常動作モードからスリープモードに切り換える際の各回路の動作について説明する。
スリープモードへの遷移を示す入力が行われる（スリープモードレジスタに１が設定される）と、バスインタフェースユニット７２によりスリープ信号がアサートされる。このときＯＲ回路８１には、ハイレベルのスリープ信号と、ＰＬＬ７１が出力した内部クロック（ＰＨ１）とが入力される。その結果、ＯＲ回路８１からはハイレベルの信号が出力され、整数ユニット７３に供給される。また、ＡＮＤ回路８６には、ハイレベルのスリープ信号が反転されて入力されると共に、ＰＬＬ７１が出力した内部クロック（ＰＨ２）とが入力される。その結果、ＡＮＤ回路８６からはローレベルの信号が出力され、整数ユニット７３に供給される。
【０１０７】
また、スリープ信号がアサートされたとき、第１の遅延回路８４には、ハイレベルのスリープ信号と、ＰＬＬ７１が出力した内部クロック（ＰＨ１，ＰＨ２）とが入力される。第１の遅延回路８４は、スリープ信号がアサートされてから内部クロックの１周期分経過後に出力信号をアサートする。一方、ＯＲ回路９１にバスインタフェースユニット７２から入力されているスリープ信号がハイレベルであるため、ＯＲ回路９１の出力は、スリープ信号のアサートと同時にネゲート（ハイレベル）される。その結果、スリープ信号のアサート直後から、ＯＲ回路８２からハイレベルの信号が出力され、命令キャッシュ７４に供給される。また、スリープ信号がアサートされた直後から、ＡＮＤ回路８７からローレベルの信号が出力され、命令キャッシュ７４に供給される。
【０１０８】
さらに、スリープ信号がアサートされたとき、第２の遅延回路８５には、ハイレベルのスリープ信号と、ＰＬＬ７１が出力した内部クロック（ＰＨ１，ＰＨ２）とが入力される。第２の遅延回路８５は、スリープ信号がアサートされてから内部クロックの２周期分経過後に出力信号をアサートする。一方、ＯＲ回路９２にバスインタフェースユニット７２から入力されているスリープ信号がハイレベルであるため、ＯＲ回路９２の出力は、スリープ信号のアサートと同時にネゲート（ハイレベル）される。その結果、スリープ信号のアサート直後から、ＯＲ回路８３からハイレベルの信号が出力され、データキャッシュ７５に供給される。また、スリープ信号のアサート直後から、ＡＮＤ回路８８からローレベルの信号が出力され、データキャッシュ７５に供給される。
【０１０９】
このようにして、スリープモードに切り換える際には、スリープ信号の出力と同時に、整数ユニット７３、命令キャッシュ７４、およびデータキャッシュ７５への内部クロック（ＰＨ１，ＰＨ２）の供給を停止することができる。
【０１１０】
なお、第４の実施の形態における第１の遅延回路８４と第２の遅延回路８５との内部構成は、図６に示した第３の実施の形態における遅延回路と同様である。
［他の変形例］
上記の各実施の形態では、各回路への内部クロックの供給開始タイミングのずれを内部クロック１周期分の時間としているが、供給開始のタイミングのずれの時間幅を変えてもよい。たとえば、２周期分の時間ずつ内部クロックの供給開始や供給停止のタイミングをずらすことも可能である。
【０１１１】
また、通常動作モードからスリープモードへのモード遷移の際には、内部クロックの停止タイミングをずらさずに、スリープモードから通常動作モードに移行するときにのみ、内部クロックの供給タイミングをずらすようにすることも可能である。
【０１１２】
（付記１）  動作モードの切替機能を備えたマイクロプロセッサにおいて、
内部クロックを発生させるクロック発生回路と、
入力されたクロック信号に同期して動作する複数の同期回路と、
前記クロック発生回路と前記複数の同期回路との間に接続され、前記複数の同期回路の動作を開始させる際に、前記クロック発生回路から前記複数の同期回路のそれぞれへ、前記内部クロックを時間をずらして供給開始するクロック供給制御回路と、
を有することを特徴とするマイクロプロセッサ。
【０１１３】
（付記２）  前記クロック供給制御回路は、前記内部クロックの供給を停止させるスリープ信号の前記複数の同期回路それぞれに対する入力を、時間をずらして解除することを特徴とする付記１記載のマイクロプロセッサ。
【０１１４】
（付記３）  前記クロック供給制御回路は、前記複数の同期回路のうちの一部の同期回路に入力されている前記スリープ信号の解除を遅延させる遅延回路を有することを特徴とする付記２記載のマイクロプロセッサ。
【０１１５】
（付記４）  前記遅延回路は、遅延時間に応じた数のフリップフロップで構成されていることを特徴とする付記３記載のマイクロプロセッサ。
（付記５）  前記遅延回路は、遅延時間に応じた数のラッチ回路で構成されていることを特徴とする付記３記載のマクロプロセッサ。
【０１１６】
（付記６）  前記クロック供給制御回路は、前記複数の同期回路の動作を停止させる際に、前記クロック発生回路から前記複数の同期回路それぞれへの前記内部クロックの供給を、時間をずらして停止することを特徴とする付記１記載のマイクロプロセッサ。
【０１１７】
（付記７）  前記クロック供給制御回路は、前記内部クロックの供給を停止させるスリープ信号の前記複数の同期回路それぞれに対する入力を、時間をずらして解除することを特徴とする付記６記載のマイクロプロセッサ。
【０１１８】
（付記８）  前記クロック供給制御回路は、前記複数の同期回路のうちの一部の同期回路への前記スリープ信号の入力を遅延させる遅延回路を有することを特徴とする付記７記載のマイクロプロセッサ。
【０１１９】
（付記９）  前記複数の同期回路は、演算回路とキャッシュとを含んでおり、
前記クロック供給制御回路は、前記演算回路に前記内部クロックを供給開始してから所定の時間経過後に、前記キャッシュへの前記内部クロックの供給を開始することを特徴とする付記１記載のマイクロプロセッサ。
【０１２０】
（付記１０）  前記キャッシュは、命令キャッシュとデータキャッシュとを含んでおり、前記命令キャッシュに前記内部クロックを供給開始してから所定の時間経過後に、前記データキャッシュへの前記内部クロックの供給を開始することを特徴とする付記９記載のマイクロプロセッサ。
【０１２１】
（付記１１）  前記クロック発生回路は、ＰＬＬ(Phase Locked Loop)回路であることを特徴とする付記１記載のマイクロプロセッサ。
（付記１２）  動作モードの切替機能を備えたマイクロプロセッサにおいて、
内部クロックを発生させるクロック発生回路と、
入力されたクロック信号に同期して動作する複数の同期回路と、
前記クロック発生回路と前記複数の同期回路との間に接続され、前記複数の同期回路の動作を停止させる際に、前記クロック発生回路から前記複数の同期回路のそれぞれへの前記内部クロックの供給を、時間をずらして停止するクロック供給制御回路と、
を有することを特徴とするマイクロプロセッサ。
【０１２２】
（付記１３）  内部クロックに同期して動作する複数の同期回路を有するマイクロプロセッサの動作モード切替方法において、
前記複数の同期回路の動作の開始を示す信号が入力されると、前記複数の同期回路の一部へ内部クロックの供給を開始し、
前記信号の入力から所定時間遅延させた後、前記内部クロックが未供給の他の同期回路への前記内部クロックの供給を開始する、
ことを特徴とするマイクロプロセッサの動作モード切替方法。
【０１２３】
（付記１４）  内部クロックに同期して動作する複数の同期回路を有するマイクロプロセッサの動作モード切替方法において、
前記複数の同期回路の動作の停止を示す信号が入力されると、前記複数の同期回路の一部への内部クロックの供給を停止し、
前記信号の入力から所定時間遅延させた後、前記内部クロックの供給が未停止の他の同期回路への前記内部クロックの供給を停止する、
ことを特徴とするマイクロプロセッサの動作モード切替方法。
【０１２４】
【発明の効果】
以上説明したように本発明では、複数の同期回路の動作を開始または停止させる際に、複数の同期回路への内部クロックの供給の開始または停止の時間をずらすようにしたため、複数の同期回路に流れる電流の変化を少なく抑え、ノイズの発生を抑制することができる。その結果、マイクロプロセッサを安定して動作させることができる。
【図面の簡単な説明】
【図１】第１の実施の形態に係るマイクロプロセッサの回路構成図である。
【図２】遅延回路の内部構成を示す図である。
【図３】第１の実施の形態に係るマイクロプロセッサのタイミングチャートである。
【図４】第２の実施の形態に係るマイクロプロセッサの回路構成例を示す図である。
【図５】第３の実施の形態に係るマイクロプロセッサの回路構成例を示す図である。
【図６】第３の実施の形態における遅延回路の構成例を示す図である。
【図７】第３の実施の形態に係るマイクロプロセッサのタイミングチャートである。
【図８】第４の実施の形態に係るマイクロプロセッサの回路構成例を示す図である。
【図９】従来のマイクロプロセッサの構成例を示す図である。
【符号の説明】
１１  ＰＬＬ
１２  バスインタフェースユニット
１３  整数ユニット
１４  命令キャッシュ
１５  データキャッシュ
２１〜２４  ＯＲ回路
２４  第１の遅延回路
２５  第２の遅延回路
【図１】
0004007848.tif 000002
【図２】
0004007848.tif 000003
【図３】
0004007848.tif 000004
【図４】
0004007848.tif 000005
【図５】
0004007848.tif 000006
【図６】
0004007848.tif 000007
【図７】
0004007848.tif 000008
【図８】
0004007848.tif 000009
【図９】
0004007848.tif 000010