(57)【要約】【課題】動作の引き継ぎを必要とする別回路を設けずに、割り込み処理に応じた適切な処理が行える状態に移行する中央演算処理装置を有する半導体装置の実現。【解決手段】外部からの信号に対応する処理に応じて、すべての演算処理が有効となるアクティブモードと、待ち受け処理のみが有効となるスリープモードと、特定の演算処理のみが有効となる半睡モードのいずれかの動作モードで動作する演算部1-17と、演算部の動作モードに応じて、記憶領域の全部または一部に電源を供給する記憶部18,19と、を有する半導体装置。【選択図】図６
2016004383.tif 000002
【特許請求の範囲】
【請求項１】
外部からの信号に対応する処理に応じて、すべての演算処理が有効となるアクティブモードと、待ち受け処理のみが有効となるスリープモードと、特定の演算処理のみが有効となる半睡モードのいずれかの動作モードで動作する演算部と、
前記演算部の前記動作モードに応じて、記憶領域の全部または一部に電源を供給する記憶部と、
を有する半導体装置。
【請求項２】
前記外部からの信号に対応する処理に応じて前記演算部の動作モードを制御する制御信号を生成する割り込み制御部をさらに有する、請求項１に記載の半導体装置。
【請求項３】
前記半睡モードでは、前記記憶部の記憶領域の一部に電源が供給され、
前記アクティブモードでは、前記記憶部の記憶領域の全部に電源が供給される請求項１または２に記載の半導体装置。
【請求項４】
使用頻度が低い演算機能は、前記アクティブモードでは有効であるが前記半睡モードで有効でない請求項１から３のいずれか１項に記載の半導体装置。
【請求項５】
演算結果を保持するレジスタの一部は、前記アクティブモードでは有効であるが前記半睡モードで有効でない請求項１から４のいずれか１項に記載の半導体装置。
【請求項６】
キャッシュメモリの一部は、前記アクティブモードでは有効であるが前記半睡モードで有効でない請求項１から５のいずれか１項に記載の半導体装置。
【請求項７】
前記割り込み制御部は、２種類以上の割り込み信号を備え、前記割り込み信号の種類に応じて前記スリープモードから、前記アクティブモードに移行するか、前記半睡モードに移行するか、を選択する請求項２に記載の半導体装置。
【請求項８】
前記演算部は、前記半睡モードから前記アクティブモードに移行するプログラム命令を備え、前記半睡モードでの処理結果を使用して、前記半睡モードを継続するか、前記アクティブモードに移行するかを選択する請求項１に記載の半導体装置。
【請求項９】
前記演算部は、移行制御レジスタを備え、前記スリープモード中に割り込み信号を受け取ったとき、前記移行制御レジスタの設定値に基づき、前記半睡モードに移行するか、前記アクティブモードに移行するかを選択する請求項１に記載の半導体装置。
【請求項１０】
前記演算部は、前記半睡モード中に前記半睡モードで処理できない命令を受け取った場合に、前記アクティブモードに移行してプログラムの動作を継続する請求項１に記載の半導体装置。
【請求項１１】
待ち受け処理のみが有効となるスリープモードにおいて、外部からの信号を受信し、
受信した前記外部からの信号に対応する処理に応じて、すべての演算処理が有効となるアクティブモードまたは特定の演算処理のみが有効となる半睡モードに移行し、
移行する前記動作モードに応じて、記憶領域の全部または一部に電源を供給する、
ことを特徴とする半導体装置の動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置および半導体装置の動作方法に関する。
【背景技術】
【０００２】
多くの中央演算処理装置（ＣＰＵ: Central Processing-Unit)では、通常の動作を行うアクティブモードに加えて、スリープモードを導入して非動作時の消費電力の削減を図っている。アクティブモードでは、中央演算処理装置のすべての回路に電源電圧が供給され、すべての回路は動作状態になる。一方、スリープモードでは、データの到着や特定時刻になったことを示す信号を受け付ける割り込み回路（ＰＩＣ: Programmable Interrupt Controller)を残して、電源を遮断する。演算処理が必要な場合にはアクティブモードに移行し、演算処理を必要としない場合には、スリープモードに移行する。
【０００３】
中央演算処理装置を、スリープ状態からアクティブ状態に移行するためにはかなりの処理時間と消費電力が必要となる。割り込みによっては、メモリのロードストアなど、中央演算処理装置のすべての機能を必要としないことも多く、その場合中央演算処理装置全体をアクティブ状態にするのは無駄が多い。そこで、キー入力を検出する専用の回路を設け、スリープモードの解除のキー入力があった場合に、アクティブモードに移行することや、無線データ受信の割り込み処理の一部を補助ＣＰＵに行わせることが提案されている。これにより、中央演算処理装置をアクティブモードにする頻度が軽減でき、省電力化を実現できる。
【０００４】
しかし、割り込み解除条件を追加（例えば、キー入力だけの物に、タイマによる起動、振動による起動を追加するなど）する場合、検出回路を修正、拡張する必要がある。また、割り込みコントローラは中央演算処理装置と独立しているため、外部からのデータ入力を、割り込みコントローラおよび中央演算処理装置の両方で行わなければならない。この場合、割り込みコントローラの処理結果を中央演算処理装置に引き継ぐには、外部回路または専用の信号線が必要になり、両者で演算器、レジスタなどが重複しているので、面積が大きくなるといった問題がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第４８７５７１０号公報
【特許文献２】特開平０６−５９７８７号公報
【特許文献３】特開平０６−２１４６８２号公報
【特許文献４】特開２００６−１５９８０８号公報
【特許文献５】特開２００９−７０３６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
以上の通り、中央演算処理装置での処理が不要の時には、スリープモードに入って電力を削減し、中央演算処理装置での処理があるときは、割り込みで中央演算処理装置をアクティブモードに復帰させて処理する従来技術が存在する。しかし、割り込み処理は、多くの場合、外部入力からデータを読み取るなどの単純な処理が多く、中央演算処理装置全体を起こすと時間、電力の無駄になっていた。
【０００７】
単純な処理は、シーケンサや簡易的なＣＰＵを組み込んだ割り込み回路で処理する場合もあるが、シーケンサでは事前に用意した条件および処理の実行可能であり、処理できる内容が制限される。さらに、このような処理を行う簡易的なＣＰＵを組み込むと、レジスタ、ＡＬＵといった中央演算処理装置に含まれている回路が重複してしまい、回路が無駄になるといった問題があった。
【０００８】
また、割り込み回路と中央演算処理装置は、独立した回路となっているため、割り込み回路と中央演算処理装置の動作引き継ぎにおいて、データの再取得や再計算が必要となり、アクティブ状態への復帰に余分な時間と電力が必要となるといった問題があった。
【０００９】
以下に説明する実施形態では、動作の引き継ぎを必要とする別回路を設けずに、割り込み処理に応じた適切な処理が行える状態に移行する演算部を有する半導体装置が開示される。
【課題を解決するための手段】
【００１０】
実施形態の第１の態様の半導体装置は、演算部と、記憶部と、を有する。演算部は、外部からの信号に対応する処理に応じて、すべての演算処理が有効となるアクティブモードと、待ち受け処理のみが有効となるスリープモードと、特定の演算処理のみが有効となる半睡モードのいずれかの動作モードで動作する。記憶部は、演算部の動作モードに応じて、記憶領域の全部または一部に電源を供給する。
【発明の効果】
【００１１】
実施形態の半導体装置は、アクティブモードおよびスリープモードに加えて、簡単な処理を行うのに適した半睡モードを有するため、アクティブモードへの頻繁な移行を低減でき、低消費電力化が図れる。さらに、実施形態の半導体装置は、別回路を設けないので、回路規模を小さくでき、動作の引き継ぎも必要としないので、移行に要する時間が短く、演算効率がよい。
【図面の簡単な説明】
【００１２】
【図１】図１は、アクティブモードおよびスリープモードを有する一般的な中央演算処理装置（ＣＰＵ）の構成を示す図であり、（Ａ）がアクティブモード時の状態を、（Ｂ）がスリープモード時の状態を示す。
【図２】図２は、アクティブモードとスリープモードを有するＣＰＵにおけるモード切り替えに関する動作を示すフローチャートである。
【図３】図３は、中央演算処理装置（ＣＰＵ）に、割り込み処理の一部を行う特殊割込回路を付属させたシステムの構成を示す図であり、ＣＰＵがスリープモード時の状態を示す。
【図４】図４は、図３のシステムで、ＣＰＵがアクティブモード時の状態を示す図である。
【図５】図５は、図３のシステムにおけるモード切り替えに関する動作を示すフローチャートである。
【図６】図６は、実施形態の半導体装置に含まれる中央演算処理装置（ＣＰＵ）の構成を示す図である。
【図７】図７は、実施形態のＣＰＵにおけるモード切り替えに関する動作を示すフローチャートである。
【図８】図８は、割り込み信号に応じて、半睡モードに移行するか、アクティブモードに移行するかを選択する場合の動作を示すフローチャートである。
【図９】図９は、高性能な中央演算処理装置（ＣＰＵ）の構成の一例である。
【図１０】図１０は、図９のＣＰＵにおいて、半睡モード時に電源供給を行わず、非動作状態にする部分を示す図である。
【図１１】図１１は、ＣＰＵに搭載されるキャッシュメモリの実装例を示す図であり、（Ａ）がすべて動作状態である場合を、（Ｂ）が一部のみ動作状態である場合を示す。
【図１２】図１２は、上記のコンパイラでコンパイルするＣ言語によるプログラムの例を示す図である。
【図１３】図１３は、高級言語用のコンパイラでの処理を示すフローチャートである。
【発明を実施するための形態】
【００１３】
実施形態を説明する前に、アクティブモードおよびスリープモードを有する一般的な中央演算処理装置（ＣＰＵ）およびシステムについて説明する。
【００１４】
図１は、アクティブモードおよびスリープモードを有する一般的な中央演算処理装置（ＣＰＵ）の構成を示す図であり、（Ａ）がアクティブモード時の状態を、（Ｂ）がスリープモード時の状態を示す。
【００１５】
ＣＰＵは、ＰＩＣ１０１と、Ｃｔｒｌ１０２と、Ｒｅｇ１０３と、ＦＰＵＲｅｇ１０４と、ＡＬＵｓ１０５と、ＭＡＣ１０６と、ＳＩＭＤＦＰＵ１０７と、Ｃｏｄｅ＄１０８と、Ｄａｔａ＄１０９と、を有する。ＰＩＣ１０１は、プログラマブル割り込みコントローラ(Programmable Interrupt Controller)である。Ｃｔｒｌ１０２は、電力制御（コントロール）回路である。Ｒｅｇ１０３は、レジスタファイルである。ＦＰＵＲｅｇ１０４は、浮動小数点演算用レジスタファイルである。ＡＬＵｓ１０５は、演算回路(Arithmetic Logical Unit)である。ＭＡＣ１０６は、積和演算回路(Multiply and Accumulation Unit)である。ＳＩＭＤＦＰＵ１０７は、ＳＩＭＤ演算回路である。Ｃｏｄｅ＄１０８は、コードキャッシュメモリである。Ｄａｔａ＄１０９は、データキャッシュメモリである。上記のＣＰＵおよびそれに含まれる各回路ブロックについては広く知られているので、説明は省略する。
【００１６】
図１のＣＰＵは、１個の半導体装置に搭載されているが、複数の半導体装置に分けて搭載され、複数の半導体装置で１個のＣＰＵシステムを形成する場合もある。いずれの場合も、ＰＩＣ１０１は常時電源が供給され常時動作状態にあるが、他の回路ブロックは電源が供給された状態と電源が供給されない状態の間で切り替え可能である。
【００１７】
図１の（Ａ）に示すように、アクティブモードでは、ＣＰＵのすべての回路に電源電圧が供給され、すべての回路ブロックは動作状態になる。
図１の（Ｂ）に示すように、スリープモードでは、データの到着や特定時刻になったことを示す信号を受け付けるＰＩＣ１０１にのみ電源を供給し、他の回路ブロックへの電源供給を遮断する。したがって、ＰＩＣ１０１のみ動作状態であり、それ以外の回路ブロックは非動作状態になる。これにより、ＰＩＣ１０１以外の回路ブロックにおける消費電力がゼロになり、消費電力が低減される。
【００１８】
図２は、アクティブモードとスリープモードを有するＣＰＵにおけるモード切り替えに関する動作を示すフローチャートである。
【００１９】
ステップＳ２０１で、ＣＰＵへの電源をオンする。
ステップＳ２０２で、ＣＰＵのすべての回路ブロックに対して初期化処理を行う。
ステップＳ２０３で、処理データがあるか否か判定し、あればステップＳ２０７に進み、無ければステップＳ２０４に進む。
【００２０】
ステップＳ２０４では、スリープモードに移行し、ＰＩＣ１０１にのみ電源を供給し、それ以外の回路ブロックへの電源の供給を停止する。この状態で、割り込みが発生するまで待機する。
一方、ステップＳ２０７では、処理データに対して計算処理等の処理を実行し、終了すると、ステップＳ２０３に戻る。
【００２１】
スリープモード時に処理データが到着した場合、外部からそれを知らせる割り込み信号がＰＩＣ１０１に入力し、割り込みが発生し（Ｓ２０５）、それに応じてステップＳ２０６に進む。
【００２２】
ステップＳ２０６で、ＣＰＵはそれ以外の回路ブロックへの電源の供給を再開し、アクティブモードに移行し、ステップＳ２０７に進む。
ステップＳ２０７ですべての処理データの処理が終了すると、ステップＳ２０３で、処理データが無いと判定されて、スリープモードになる。
【００２３】
以上の通り、中央演算処理装置（ＣＰＵ）がスリープ状態の時、処理データがＣＰＵに到達する度に、アクティブモードに移行して、全ての処理を行う必要がある。ＣＰＵを、スリープモードからアクティブモードに移行するためにはかなりの処理時間と消費電力が必要となる。
【００２４】
割り込みの処理の内容には、メモリのロードストアなど、中央演算処理装置の全ての機能を必要としないことも多く、その場合中央演算処理装置全体をアクティブモードにするのは無駄が多い。
【００２５】
特許文献２は、この問題を避けるために、ＣＰＵスリープモードの解除条件としてキー入力を用いる場合に、キー入力を検出する専用の回路を設けることを提案している。また、特許文献３は、無線データ受信の割り込み処理の一部を補助ＣＰＵに行わせることを提案している。
【００２６】
図３は、中央演算処理装置（ＣＰＵ）に、割り込み処理の一部を行う特殊割込回路３０１を付属させたシステムの構成を示す図であり、ＣＰＵがスリープモード時の状態を示す。
図４は、図３のシステムで、ＣＰＵがアクティブモード時の状態を示す図である。
図５は、図３のシステムにおけるモード切り替えに関する動作を示すフローチャートである。
【００２７】
図３および図４に記載されたシステムにおいて、ＣＰＵは、図１のものと同じ構成を有する。特殊割込回路３０１は、プログラマブル割り込みコントローラ（ＰＩＣ）３０３と、コントロール回路（Ｃｔｒｌ）３０４と、レジスタファイル（Ｒｅｇ）３０６と、演算回路（ＡＬＵ）３０７と、を有する。特殊割込回路３０１はＣＰＵに比べて回路規模が小さく、その演算処理機能は、ＣＰＵに比べて限定される。特殊割込回路３０１は、外部から割り込み３０２を受けると、ＰＩＣ３０３が割り込みを検出し、特殊割込回路３０１の全体が割り込みに対応する処理を行い、必要に応じてＣＰＵへの割り込み３０５を発生する。ＣＰＵは、ＰＩＣ１０１で割り込み３０５を受けると、図２に示したアクティブモードの切り替えを行い、終了すればスリープモードに戻る。
【００２８】
図３に示すように、ＣＰＵがスリープモード時には、特殊割込回路３０１の全体およびＣＰＵのＰＩＣ１０１のみに電源が供給されて動作状態になり、ＣＰＵのＰＩＣ１０１以外の回路ブロックには電源が供給されず、非動作状態である。図４に示すように、ＣＰＵがアクティブモード時には、特殊割込回路３０１の全体およびＣＰＵの全体に電源が供給されて動作状態になる。
【００２９】
図５のフローチャートにおいて、Ｓ４０１の電源オン、Ｓ４０２の初期化処理、Ｓ４０３の処理データ判定、Ｓ４０４のスリープモードへの移行、およびＳ４１３の計算処理等は、図２の対応するステップと同じである。Ｓ４０４のスリープモードへの移行では、特殊割込回路３０１のすべての部分に電源が供給される状態が維持される。
【００３０】
ステップＳ４０５で、特殊割込回路３０１に対して、外部からの割り込み３０２が発生する。
ステップＳ４０６で、割り込み３０２に応答して、特殊割込回路３０１の割り込み処理が起動される。
【００３１】
ステップＳ４０７で、特殊割込回路３０１は、入力される外部データを取得する。
ステップＳ４０８で、特殊割込回路３０１は、外部データを、特殊割込回路３０１のみで処理可能であるかＣＰＵが処理すべきかを判定し、特殊割込回路３０１のみで処理可能であればステップＳ４０９に進み、ＣＰＵが処理する場合にはステップＳ４１１に進む。
【００３２】
ステップＳ４０９で、特殊割込回路３０１は、外部データを、特殊割込回路３０１の機能のみで処理する。
ステップＳ４１０で、処理データが残っているか判定し、無ければステップＳ４０４に戻り、残っていなければステップＳ４０７に戻る。
【００３３】
ステップＳ４１１で、ＣＰＵはＰＩＣ１０１以外の回路ブロックにも電源を供給するアクティブモードへ移行する。
ステップＳ４１２で、ＣＰＵは外部データを取得する。
ステップＳ４１３で、ＣＰＵは計算処理等を行い、ステップＳ４０３に戻る。
【００３４】
図３から図５に示したＣＰＵに特殊割込回路３０１を付属させたシステムでは、ＣＰＵをアクティブモードにする頻度が軽減でき、省電力化を実現できる。しかし、割り込み解除条件を追加（例えば、キー入力だけのものに、タイマによる起動、振動による起動を追加するなど）する場合、割り込み検出回路を修正、拡張する必要がある。また、特殊割込回路３０１はＣＰＵと独立しているため、外部からのデータ入力を特殊割込回路３０１および中央演算処理装置の両方でそれぞれ行わなければならない。さらに、ＣＰＵが特殊割込回路３０１の処理結果を引き継ぐには外部回路か、専用の信号線が必要であり、回路構成が複雑になる。また、ＣＰＵと特殊割込回路３０１で、演算器（ＡＬＵ）、レジスタなどが重複しているので、全体として面積が大きくなるといった問題がある。
【００３５】
以上の通り、ＣＰＵが処理しないときは、スリープモードに入って電力を削減し、何らかの処理があるときは、割り込みで中央演算処理装置をアクティブモードに復帰させて処理する技術が知られている。しかし、割り込み処理は、多くの場合、外部入力からデータを読み取るなどの単純な処理が多く、ＣＰＵ全体を起動すると時間、電力の無駄になっていた。
【００３６】
単純な処理は、ＰＬＣ(Programmable Logic Circuit)や簡易的なＣＰＵを組み込んだ割り込み回路（特殊割込回路）で処理する場合もあるが、シーケンサでは事前に用意した条件での処理のみ実行可能である。簡易的なＣＰＵを組み込むと、レジスタ、ＡＬＵといったＣＰＵに含まれている回路が重複してしまい、回路が無駄になるといった問題があった。また、割り込み回路とＣＰＵは、独立した回路となっているため、割り込み回路とＣＰＵの動作引き継ぎにおいて、データの再取得や再計算が必要となり、アクティブ状態への復帰に余分な時間と電力が必要となるといった問題があった。
【００３７】
以下に説明する実施形態の半導体装置は、中央演算処理装置を含み、アクティブモードへの頻繁な移行を低減するので低消費電力化が図れ、回路規模が小さく、演算効率がよい。
【００３８】
図６は、実施形態の半導体装置に含まれる中央演算処理装置（ＣＰＵ）の構成を示す図である。図６は、後述する半睡モードのＣＰＵの状態を模式的に示している。半睡モードでは、特定の演算処理のみが有効となる。
【００３９】
ＣＰＵは、ＰＩＣ１１と、Ｃｔｒｌ１２と、Ｒｅｇ１３と、ＦＰＵＲｅｇ１４と、ＡＬＵｓ１５と、ＭＡＣ１６と、ＳＩＭＤＦＰＵ１７と、Ｃｏｄｅ＄１８と、Ｄａｔａ＄１９と、を有する。ＰＩＣ１１は、図１に示したプログラマブル割り込みコントローラ１０１と同じでよく、常時電源が供給され、動作状態になる。Ｃｔｒｌ１０２は、図１に示したコントロール回路１０２と同じでよく、スリープモードでは電源が供給されず非動作状態になるが、アクティブモードおよび後述する半睡モードでは動作状態になる。ＦＰＵＲｅｇ１４、ＭＡＣ１６およびＳＩＭＤＦＰＵ１７は、図１に示したものと同じでよく、スリープモードおよび半睡モードでは電源が供給されず非動作状態になり、アクティブモードでは動作状態になる。Ｒｅｇ１３、ＡＬＵｓ１５Ｃｏｄｅ＄１８およびＤａｔａ＄１９は、図１に示したものと同じ機能を有し、スリープモードでは電源が供給されず非動作状態になり、アクティブモードでは全体が動作状態になることは同じである。しかし、Ｒｅｇ１３、ＡＬＵｓ１５Ｃｏｄｅ＄１８およびＤａｔａ＄１９は、半睡モードにおいて一部が動作状態になることが、図１に示したものと異なる。
【００４０】
実施形態の半導体装置のＣＰＵは、アクティブモードとスリープモードの他に、ＣＰＵの一部の機能のみを使用可能とする半睡モードを有する。半睡モードでは、本来のＣＰＵの持つ機能を制限し、データ入出力や簡単な演算など、図３の特殊割込回路に搭載するシーケンサや簡易ＣＰＵの行う処理のみを実行可能とする。言い換えれば、半睡モードでは、ＣＰＵの周辺機能だけではなく、ＣＰＵ自体の機能の一部（演算、命令デコーダ、レジスタ、キャッシュ）の電源も積極的に供給されない状態にする。そのため、図６に示すように、半睡モードにおいて、Ｒｅｇ１３、ＡＬＵｓ１５Ｃｏｄｅ＄１８およびＤａｔａ＄１９の一部は動作状態になるが、ＦＰＵＲｅｇ１４、ＭＡＣ１６およびＳＩＭＤＦＰＵ１７は非動作状態になる。
【００４１】
アクティブモードは、ＣＰＵが有する機能のすべて（もしくは特殊な条件でしか用いない機能を除くすべて）が直ちに使用できる状態であり、回路ブロックのすべてに電源が供給されている。アクティブモードでは、クロックを供給しない場合でも、リーク電流による消費電力が発生する。ＣＰＵの命令、もしくは外部からの信号によって、Ｃｔｒｌ１２の状態を変更し、アクティブモードからスリープモードか半睡モードに移行できる。
【００４２】
スリープモードは、ＣＰＵが有する機能のうち、ＰＩＣ１１とＣｔｒｌ１２を除く、一部もしくは全ての電源をオフするモードである。スリープモードでは、リーク電流による消費電力は非常に少なくなるが、ＣＰＵが有する演算機能は使用できず、外部、もしくは内部のタイマなどからによる割り込みを待つことのみが可能である。ＰＩＣ１１が何らかの割り込み信号を受けると、Ｃｔｒｌ１２の状態を変更し、アクティブモード、もしくは半睡モードに移行する。
【００４３】
半睡モードは、実施形態の半導体装置で新たに付加するモードである。ＣＰＵで行う動作のうち、割り込み状態で行う典型的な動作（外部データの少量の入出力、メモリの少量の読み書き、簡単な加減乗除）のみに必要な機能のみが使用できるように、各回路の一部のみの電源をオンする。半睡モードでは、消費電力はスリープモード以上、アクティブモード未満となり、中央演算処理装置が備える基本機能は使用可能となる。
【００４４】
上記のように、半睡モードで、ＣＰＵの持つ回路の一部だけを起動することにより、全体を起動する場合に比べて消費電力の低減が図れる。このような状態は、難しい演算処理が必要無い場合（例えば、単純にデータを取得するだけなど）では有効に機能し、必要な処理を実行できる。半睡モードでは、簡単な入出力や演算も、ＣＰＵの内部回路の一部が使用される。これにより、別に特殊割込回路を設ける場合よりも、付加する回路が少なくて済み低コスト化が可能である。
【００４５】
半睡モード時で使用するプログラムにおいても、普段のＣＰＵと同じ、もしくは若干機能を制限したプログラムを使うことができ、両者を別途開発する必要がない。プログラムを生成するソフトウェアについても、大部分がアクティブモードのプログラム作成用のソフトウェアと共用可能である。
【００４６】
処理が、後述するような半睡モードで処理しない内容であることが判明した場合、ＣＰＵをプログラム命令などでアクティブモードに移行する。この際、半睡モードで使用していたレジスタやキャッシュメモリ等のデータは保持したままの状態で移行できるため、データの引き継ぎなどに特殊な処理や、半睡モードで使用していたデータの再取得などは必要が無い。これにより、特殊割込回路を設けた場合に比べてアクティブモードへの移行時の時間や消費電力を削減可能である。
【００４７】
半睡モードでの機能を、動作を実行する上でのチューリング完全（計算完備）である様に残せば、理論上元のＣＰＵで行うことのできるあらゆる処理が、半睡モードでも、時間を要するが処理可能とできる。この場合のチューリング完全は、半睡モードで有効な機能のみで、あらゆる処理が実行可能であることを意味する。チューリング完全が不必要な場合は、更に機能を制限して、電力削減を追求することも可能である。
【００４８】
次に、半睡モード、アクティブモード、スリープモードのモード間移行についてさらに説明する。半睡モードから、アクティブモードやスリープモードへの変更、アクティブモードから半睡モードへの変更は、ＣＰＵの命令、外部からの制御信号のいずれか、もしくは両方で行う。スリープモードからの移行先は、常に半睡モードとするか、入力する制御信号によって、アクティブモードか半睡モードかを選択可能する。なお、スリープモードに入る時の命令によって分け、回路内のレジスタなどに、復帰時にどちらのモードで復帰するかを設定するフラグをもうけ、スリープモードに入る前に設定しておいてもよい。
【００４９】
図７は、実施形態のＣＰＵにおけるモード切り替えに関する動作を示すフローチャートである。
ステップＳ２１で、ＣＰＵへの電源をオンする。
ステップＳ２２で、ＣＰＵのすべての回路ブロックに対して初期化処理を行う。
ステップＳ２３で、処理データがあるか否か判定し、あればステップＳ３２に進み、無ければステップＳ２４に進む。
【００５０】
ステップＳ２４では、スリープモードに移行し、ＰＩＣ１１およびＣｔｒｌ１２にのみ電源を供給し、それ以外の回路ブロックへの電源の供給を停止する。この状態で、割り込みが発生するまで待機する。
一方、ステップＳ３２では、処理データに対して計算処理等の処理を実行し、終了すると、ステップＳ２３に戻る。
【００５１】
スリープモード時に処理データが到着した場合、外部からそれを知らせる割り込み信号がＰＩＣ１０１に入力し、割り込みが発生し（Ｓ２５）、それに応じてステップＳ２６に進む。
【００５２】
ステップＳ２６で、ＣＰＵは、Ｒｅｇ１３、ＡＬＵｓ１５Ｃｏｄｅ＄１８およびＤａｔａ＄１９の一部を動作状態にする半睡モードに移行する。この状態では、ＦＰＵＲｅｇ１４、ＭＡＣ１６およびＳＩＭＤＦＰＵ１７は、依然非動作状態である。
ステップＳ２７で、ＣＰＵが、外部からの処理データの取得を行う。
【００５３】
ステップＳ２８で、ＣＰＵが、取得したデータを半睡モードで実行するかアクティブモードで実行するかの簡単な判定を行う。半睡モードで実行する場合にはステップＳ２９に進み、アクティブモードで実行する場合にはステップＳ３１に進む。判定方法の例については、後述する。なお、ステップＳ２８で、外部回路との入出力や、基本的な演算等をするようにしてもよい。
【００５４】
ステップＳ２９で、そのまま半睡モードで処理を続行する。
ステップＳ３０で、他に処理すべきデータが残っているか否か判定し、残っている場合にはステップＳ２７に戻り、無ければステップＳ２４に進み、スリープ状態に戻る。
【００５５】
ステップＳ３１で、ＣＰＵは、プログラムによりアクティブモードに移行する。
ステップＳ３２で、アクティブモードで演算処理や入出力などを実行し、ステップＳ２３に戻る。処理すべきデータが残っている場合には、ステップＳ２３とＳ３２を繰り返し、データをすべて処理すると、ステップＳ２４に進み、スリープ状態に戻る。
なお、割り込み信号を２種類以上用意し、割り込み信号に応じて、半睡モードに移行するか、アクティブモードに移行するかを選択できるようにしてもよい。
【００５６】
図８は、割り込み信号に応じて、半睡モードに移行するか、アクティブモードに移行するかを選択する場合の動作を示すフローチャートである。
図８のフローチャートは、ステップＳ２４でスリープモードに移行した後、半睡モードに移行する割り込み１が発生した場合にはステップＳ２６に、アクティブモードに移行する割り込み１が発生した場合にはステップＳ３１に移行することが、図７と異なる。
【００５７】
また、スリープモードに移行する前に、中央演算処理装置のどこか（例えば設定用のレジスタ）に、スリープ終了後に半睡モードに移行するか、アクティブモードに移行するかを設定する機能を設け、それに従ってモード遷移するようにしてもよい。また、半睡モードからアクティブモードへの移行条件として、半睡モードで実行できないが、アクティブモードでは実行できる命令を実行する時を含めてもよい。なお当然のことであるが、実施に当たってスリープモード、半睡モード、アクティブモードの遷移は、上記４種類のモード移行手法のいずれか、もしくは全てを組み合わせてもよい。
【００５８】
次に、ＣＰＵにおいて、半睡モードでの機能制限を行う機構について説明する。
半睡モードでのＣＰＵの機能制限は、以下のようにして行う。これらの機能制限は、いずれかのみの実装でもよいし、複数を組み合わせてもよい。
図９は、高性能な中央演算処理装置（ＣＰＵ）の構成の一例である。
【００５９】
ＣＰＵは、命令フェッチ４１、命令デコード４２、命令リオーダーレジスタリネーミング４３、命令ディスパッチ４４、命令ロード４５、整数演算回路４６、浮動小数点演算回路４７、データキャッシュ５２、メモリ５３および分岐予測５１と、を有する。データキャッシュ５２は、Ｄａｔａ＄１９に対応する。整数演算回路４６は、整数レジスタファイル５０、整数演算キュー、整数乗算・除算回路４８、整数ＡＬＵ乗除算以外の２個の演算器４９およびライトバックユニットなどを有する。浮動小数点演算回路４７は、浮動小数点レジスタファイル、浮動小数点演算キュー、浮動小数点ＡＬＵおよびライトバックユニットなどを有する。個々の部分については広く知られているので、説明は省略する。
【００６０】
多くのＣＰＵに搭載されている演算回路（ＡＬＵｓ）１５は、整数演算回路４６と、浮動小数点演算回路４７と、に分かれている。割り込み処理などで使用される演算は、整数演算のみであることが大部分のため、半睡モードでは、浮動小数点演算回路４７をオフ（非動作状態）にする。また、高性能なＣＰＵでは、性能を向上させるために、分岐予測５１が行う分岐予測機能、および命令リオーダーレジスタリネーミング４３が行うレジスタリーネーミング機能および命令順序変更機能などを有する。整数演算回路４６の一部でも、ハードウェアの整数乗算・除算回路４８は、回路規模が大きいため別回路になっていることが多く、使用頻度も低い。そのため、半睡モードでは、これらの電源を遮断して非動作状態にすることが可能である。
【００６１】
図１０は、図９のＣＰＵにおいて、半睡モード時に電源供給を行わず、非動作状態にする部分を示す図である。
図１０に示すように、浮動小数点演算回路４７はすべてオフにする。整数演算回路４６では、乗算・除算回路４８はオフし、複数ある整数ＡＬＵ乗除算以外の演算回路は一つだけ動作状態にし、整数レジスタファイル５０は、レジスタの一部を非動作状態にする。さらに、分岐予測５１および命令リオーダーレジスタリネーミング４３などは動作を停止させる。
【００６２】
データキャッシュ５２（Ｄａｔａ＄１９）は、まったく使用せずにバイパスする手法の他に、一部容量のみを使用可能として、電力削減をする手法などが実施可能である。このための構成を以下に説明する。
【００６３】
図１１は、ＣＰＵに搭載されるキャッシュメモリの実装例を示す図であり、（Ａ）がすべて動作状態である場合を、（Ｂ）が一部のみ動作状態である場合を示す。
図１１のキャッシュメモリは、４−ｗａｙ  ｓｅｔ  ａｓｓｏｃｉａｔｉｖｅと呼ばれる方式のメモリである。この方式のキャッシュメモリは、４つのブロック（ｗａｙ）に、アドレスの４つのタグ（ｔａｇ）に対応して４つのデータ列を格納する。アドレスのインデックス（ｉｎｄｅｘ）に応じた４つのデータを、４つのブロックから並列に読出し、一致するタグに応じたデータを選択する。対応するデータがあれば、言い換えれば一致するタグがあれば、アクセスするデータがキャッシュメモリに存在する、すなわちヒット（ｈｉｔ）したと判定される。４ｗａｙあるので、ヒットする確率は４倍近くになる。キャッシュメモリの詳しい説明は省略する。
【００６４】
アクティブモードでは、図１１の（Ａ）に示すように、全てのｗａｙに電源を投入して使用する。半睡モードの時は、ｗａｙの一部、例えば図１１の（Ｂ）に示すように左側の１つのｗａｙにのみに電源を投入し、残りのｗａｙは電源を切断する。この状態は、元々の１／４サイズのｄｉｒｅｃｔ  ｍａｐ方式キャッシュメモリと同等の動作となる。
【００６５】
図１１の（Ｂ）の半睡モード状態から、図１１の（Ａ）のアクティブモード状態に復帰する場合、半睡モード時に読み取ったキャッシュメモリ（左側の１ｗａｙ）の状態はそのままとし、残りの３ｗａｙはｉｎｖａｌｉｄ状態として電源を復帰させる。半睡モードで読み取り、左側の１ｗａｙに記憶したデータはそのままアクティブモードでも有効とできるため、外部メモリからこのデータを複数回読み出すような事態は生じない。
【００６６】
以上、データキャッシュ（Ｄａｔａ＄）１９を半睡モード状態にする構成を説明したが、命令キャッシュ（Ｃｏｄｅ＄）１８についても同様の手法を適用可能である。
【００６７】
他の回路ブロックの半睡モードでの機能制限の例を以下に示す。
・複数の命令セットを持つＣＰＵの場合は、命令セットのいくつかを使用不可にする事により、命令デコーダの一部回路の電源遮断を行う。例えば、１６ビット長命令セット、もしくは３２ビット長命令セットの使用を不可とし、８ビット長命令セットのみ使用可とする。
【００６８】
・レジスタ数の使用数を制限する。
・Ｐｌｌ等の内部クロック生成回路を停止し、外部クロックのタイミングのみで動作する。
【００６９】
これらの機能制限と、消費電力低減のために、中央演算処理装置内の回路は、スリープモードでも電源が投入されて使用される回路、半睡モードでも電源が投入されて使用される回路と、アクティブモードでのみ電源が投入されて使用される回路に分類される。それぞれの回路を半導体上に形成する際は、各回路と電源配線を分離し、個々に電源をコントロールする。
【００７０】
以上の通り、半睡モードでは、使用する演算器、レジスタ数などを制限した状態で、割り込み以外の簡単な処理を記載したプログラムを実行することになる。そのため、アクティブモードと半睡モードで使用するプログラムを高級言語で作成する時に、半睡モードで呼び出されるサブルーチンなどに、半睡モード用を示す標識を付加して、これを識別するようにコンパイラの修正を行うことが望ましい。修正されたコンパイラがプログラムをコンパイルする際にこの標識を読み取り、標識がついたサブルーチンで使用するレジスタ、演算命令を半睡モードで使用される物のみにする用に機械語を生成する。
【００７１】
図１２は、上記のコンパイラでコンパイルするＣ言語にようプログラムの例を示す図である。
図１２で、__attribute__((halfdoze_mode))が半睡モード用のサブルーチンを示す標識１１０３であり、この例では、readreg1関数１１０４が半睡モード用の機械語に変換される。浮動小数点演算を使用するreadreg2関数１１０５には標識をつけていないため、アクティブモード用の機械語として変換する。半睡モード用サブルーチン１１０４からアクティブモード用サブルーチン１１０５を呼び出す命令１１０７は、コンパイラがそれを検出してアクティブ用サブルーチンを呼び出す機械語の直前に、アクティブモードへ移行する機械語命令を埋め込む。
【００７２】
図１２では、スリープモードから割り込み信号によって、ＣＰＵが半睡モードに移行し、readreg1関数１１０４を実行する場合を想定する。この例では、regread1関数１１０４内でREG1を読み出した結果を判断する処理１１０６を行う。その結果、（１）readreg2関数を呼び出さず、半睡モードのまま残りの処理をする動作と、（２）アクティブモードに切り換えて、readreg2関数を呼び出し、readreg1関数の残りを処理する動作のいずれかとなる。readreg1関数１１０４の７−９行目の処理１１０８は、半睡モードで動作する場合、アクティブモードで動作する場合の両方があり得るが、半睡モード用のプログラムはアクティブモードのプログラムの部分集合であるため、動作に支障は無い。
【００７３】
図１２のプログラミング言語、標識は例示であり、任意のプログラミング言語でも、適した標識を用いることで同等の機能は実現可能である。また、翻訳単位全体を半睡モード用の機械語に変換したい場合は、コンパイラに変換の指示として、半睡モード用の機械語を出力する指定をできるようにしてもよい。
【００７４】
図１２のコンパイルを実行するコンパイラは、コンピュータにコンパイラ用ソフトウェアをインストールすることにより実現される。
図１３は、高級言語用のコンパイラでの処理を示すフローチャートである。
【００７５】
ステップＳ１２０１で、与えられたプログラムを取得する。
その後、プログラムを中間コードに変換するフロントエンド部分のステップＳ１２１１の処理と、中間コードから機械語を組み立てて出力するバックエンド部分のステップＳ１２１２の処理と、を行い、ステップＳ１２１０で生成した機械語を出力する。
【００７６】
ステップＳ１２１１の処理は次の通りである。
ステップＳ１２０２で、プログラムの字句解析を行う。
ステップＳ１２０３で、プログラムの構文解析を行う。
ステップＳ１２０４で、プログラムの意味解析を行う。
【００７７】
ステップＳ１２０５で、中間コードを生成する。
ステップＳ１２０６で、中間コードを最適化する。
ステップＳ１２１２の処理は次の通りである。
ステップＳ１２０７で、命令割当を行う。
【００７８】
ステップＳ１２０８で、レジスタ割当を行う。
ステップＳ１２０９で、局所最適化処理を行う。
コンパイラ製品によっては、中間コードを最適化するステップＳ１２０６の処理を分離してミドルエンド部分としている場合もあるが、ここではミドルエンド部分もフロントエンド部分に含めるものとする。
【００７９】
このコンパイラでは、ステップＳ１２０３の構文解析またはステップＳ１２０４の意味解析において、半睡モードである事を示す標識を認識し、対応するサブルーチンに半睡モード用である事をしめすタグをつける。このタグは後段でも保持され、中間コード出力にも半睡モード用であることを示すタグを付加する。ステップＳ１２１２のバックエンド部分でこのタグを認識し、ステップＳ１２０７の命令割当、ステップＳ１２０８のレジスタ割当において、半睡モードで使用不可能な命令、レジスタを割り当てないように機械語を組み立てる。このような段階を経ないコンパイラにおいても、使用する機械語命令やレジスタを決定する機能は存在するので、その機能内に命令制限、レジスタ制限を付加する。
【００８０】
コンパイル時に、サブルーチン毎に複雑度を調べて、半睡モードでの動作可能不可能、またはアクティブモードでのプログラムサイズと半睡モード用に変換した場合のプログラムサイズの提示をする。コンパイラの提示した情報を考慮して、使用者がサブルーチンを半睡モードで動作させるか、アクティブモードで動作させるかを指定することができるようにしてもよい。この機能はオプションであり、実装しなくても実施形態は実行可能である。このオプションを実施するには、コンパイラのステップＳ１２０７の命令割当およびステップＳ１２０８のレジスタ割当のフェーズで、半睡モードで使用不可能な命令やレジスタを割り当てる必要があるかどうかを検出することで実現可能である。
【００８１】
以上説明したように、実施形態によれば、大きな付加回路を使用せずに、中央演算処理装置（ＣＰＵ）の全回路ブロックを動作させる時間を減らすことができる。
また、外部に割り込みと簡易な処理を実行する回路、補助ＣＰＵ等を付加する場合より、データの引き継ぎが円滑にできるようになり、割り込み処理を行う時間と電力のコストを低減できる。
【００８２】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものである。特に記載された例や条件は発明の範囲を制限することを意図するものではなく、明細書のそのような例の構成は発明の利点および欠点を示すものではない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【符号の説明】
【００８３】
１１    ＰＩＣ１１
１２    Ｃｔｒｌ
１３    Ｒｅｇ
１４    ＦＰＵＲｅｇ
１５    ＡＬＵｓ
１６    ＭＡＣ
１７    ＳＩＭＤＦＰＵ
１８    Ｃｏｄｅ＄
１９    Ｄａｔａ＄
【図１】
2016004383.tif 000003
【図２】
2016004383.tif 000004
【図３】
2016004383.tif 000005
【図４】
2016004383.tif 000006
【図５】
2016004383.tif 000007
【図６】
2016004383.tif 000008
【図７】
2016004383.tif 000009
【図８】
2016004383.tif 000010
【図９】
2016004383.tif 000011
【図１０】
2016004383.tif 000012
【図１１】
2016004383.tif 000013
【図１２】
2016004383.tif 000014
【図１３】
2016004383.tif 000015