(57)【要約】【課題】不揮発性メモリに好適な電源制御を行うことによって従来よりもメモリ消費電力を削減する。【解決手段】メモリ制御回路４は、ＣＰＵ２で動作するプログラムのタスクごとに、ＣＰＵ２が不揮発性メモリ３に含まれる複数のバンクＢＫの動作モード（電源オフ、スタンバイ、および電源オン）を個別に初期設定するための第１のレジスタ群１０と、命令フェッチのためのアクセスアドレスおよびフェッチされた命令の種類に基づいて、ＣＰＵ２によるアクセスが発生するバンクを判定するアクセス判定部８０とを備える。メモリ制御回路４は、第１のレジスタ群１０の設定値およびアクセス判定部８０の判定結果に基づいて、各バンクの動作モードを切り替える。【選択図】図１
2014203148.tif 000002
【特許請求の範囲】
【請求項１】
複数のバンクに区分された不揮発性メモリを制御するメモリ制御回路であって、
各前記バンクは、動作モードとして、
ＣＰＵ（Central  Processing  Unit）からのアクセスが可能な通常モードと、
前記通常モードより消費電力の少ないスタンバイモードと、
電源供給が遮断される遮断モードとを有し、
前記メモリ制御回路は、
前記ＣＰＵで動作するプログラムのタスクごとに、前記ＣＰＵが前記複数のバンクの動作モードを個別に初期設定するための複数の第１の制御値を記憶する第１のレジスタ群と、
命令フェッチのためのアクセスアドレスおよびフェッチされた命令の種類に基づいて、前記ＣＰＵから各前記バンクへアクセスが発生するか否かを判定するアクセス判定部と、
前記複数の第１の制御値および前記アクセス判定部の判定結果に基づいて、各前記バンクの動作モードを切り替えるモード制御部とを備える、メモリ制御回路。
【請求項２】
前記モード制御部は、
前記第１のレジスタ群によって前記通常モードに初期設定されたバンクについては、前記アクセス判定部による判定結果によらずに前記通常モードに維持し、
前記第１のレジスタ群によって前記スタンバイモードに初期設定されたバンクについては、前記アクセス判定部によって前記ＣＰＵによるアクセスが発生すると判定されたときに前記通常モードに切り替えるように構成されている、請求項１に記載のメモリ制御回路。
【請求項３】
前記アクセス判定部は、
命令フェッチのためのアクセスアドレスの検出結果に基づいて前記ＣＰＵによるアクセスが発生するバンクを判定する第１の判定部と、
フェッチされた命令が分岐命令であるか否かを検出し、検出結果に基づいて前記ＣＰＵから各前記バンクへアクセスが発生するか否かを判定する第２の判定部と、
フェッチされた命令が前記不揮発性メモリに格納されたデータをアクセスするメモリアクセス命令であるか否かを検出し、検出結果に基づいて前記ＣＰＵから各前記バンクへアクセスが発生するか否かを判定する第３の判定部とを含む、請求項２に記載のメモリ制御回路。
【請求項４】
前記第１の判定部は、現在のアクセスアドレスに対応するバンク、および現在のアクセスアドレスに所定値を加算したアドレスに対応するバンクに対して、前記ＣＰＵによるアクセスが発生すると判定する、請求項３に記載のメモリ制御回路。
【請求項５】
前記第３の判定部は、
フェッチされた命令が前記メモリアクセス命令のとき、各前記バンクに対して前記ＣＰＵによるアクセスが発生すると判定し、
前記メモリアクセス命令と異なる命令が所定回数連続して検出されるまでは、前記ＣＰＵによるアクセス発生の判定結果を維持する、請求項３に記載のメモリ制御回路。
【請求項６】
前記第１〜第３の判定部の各々は、前記複数のバンクにそれぞれ対応する複数の第２の制御値を記憶する第２のレジスタ群を含み、
前記第１〜第３判定部の各々は、
第２の制御値として第１の論理値が設定されたレジスタに対応するバンクに対しては、前記ＣＰＵによるアクセスが発生するか否かの判定を行って判定結果を出力し、
第２の制御値として第２の論理値が設定されたレジスタに対応するバンクに対しては、
前記ＣＰＵによるアクセスの発生がないとする判定結果を常に出力するように構成されている、請求項３に記載のメモリ制御回路。
【請求項７】
前記ＣＰＵは、前記不揮発性メモリのアクセス中にアサートされるリクエスト信号を出力し、
前記メモリ制御回路は、第４の判定部をさらに備え、
前記第４の判定部は、前記リクエスト信号と前記ＣＰＵが前記不揮発性メモリにアクセスする際のアクセスアドレスとを検出し、前記リクエスト信号がアサートされているときに、現在のアクセスアドレスに対応するバンクに対して、前記ＣＰＵによるアクセスが発生すると判定し、
前記モード制御部は、前記第４の判定部によって前記ＣＰＵによるアクセスが発生すると判定されたバンクを、前記第１のレジスタ群の設定値および前記アクセス判定部の判定結果によらず前記通常モードに設定する、請求項２または３に記載のメモリ制御回路。
【請求項８】
前記モード制御部は、前記第１のレジスタ群によって前記遮断モードに初期設定されたバンクについては、前記第４の判定部によって前記ＣＰＵによるアクセスが発生しないと判定されたときには、前記アクセス判定部の判定結果によらず前記遮断モードに維持するように構成されている、請求項７に記載のメモリ制御回路。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はメモリ制御回路に関し、たとえば、複数のバンク構成を有する不揮発性メモリの制御に好適に用いられるものである。
【背景技術】
【０００２】
全てのメモリに対して電源を供給する従来のメモリ制御回路においては、アクセスしないメモリに対しても均一に電源供給を行うためメモリの消費電力が大きくなるという課題があった。このような課題に対して、メモリをバンクに分割し、メモリ制御回路がアクセスしないメモリバンクに対して電源の供給を抑えるメモリ制御回路が開発されている。
【０００３】
たとえば、特開昭６３−０２６８９２号公報（特許文献１）に開示されたメモリ装置では、第１および第２のメモリバンクに電源電流制御回路から電源電流が供給される。電源電流制御回路は、操作パネルから受けた信号がノーマルモードであれば第１および第２のメモリバンクの両方に電源電流を供給し、操作パネルから受けた信号がローパワーモードであれば第１のメモリバンクのみへ電源電流を供給する。
【０００４】
特開平０７−１０５６８６号公報（特許文献２）に開示されたメモリ制御装置では、命令フェッチのために実際にアクセスするメモリアドレスと近い将来にアクセスされると予測されるメモリアドレスに応じたメモリバンクにのみ、給電制御回路の制御によって、主電源回路からの主電源が供給される。他のアクセスしないメモリバンクにはバックアップ電源回路からのバックアップ電源が供給される。ここで、近い将来にアクセスされると予測されるメモリアドレスは、現在のアクセスアドレスに所定のアドレス値増分を加算することによって算出される。
【０００５】
特開２０１０−１５３７５号公報（特許文献３）に開示されたマイクロコンピュータにおいて、メモリユニットは、動作モードとして通常モードと通常モードより消費電力の少ないスタンバイモードとを含む。メモリ制御回路は、ＣＰＵがメモリユニットからフェッチした命令に対して分岐命令を検出し、検出結果に応じてメモリユニットの動作モードを変更する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開昭６３−０２６８９２号公報
【特許文献２】特開平０７−１０５６８６号公報
【特許文献３】特開２０１０−１５３７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、不揮発性メモリを使用する場合には、アクセス予定のないメモリバンク対しては電源供給を停止しても記憶内容が失われることはない。したがって、各メモリバンクへの電源供給を、電源オフ（ＯＦＦ）、スタンバイ電圧の供給、および通常電圧の供給（電源オン（ＯＮ））の３状態に切り替えることによって消費電力を低減することができる。ところが、従来技術（たとえば、上記の特許文献１〜３）では、各メモリバンクの使用状況に応じて上記の３状態に電源供給を切り替えるための具体的な制御手段について開示されていない。
【０００８】
具体的に、特開昭６３−０２６８９２号公報（特許文献１）の場合には、使用しないメモリバンクへの電源は遮断され、スタンバイモードが設けられていない。このため、アクセス前にメモリバンクの電源を速やかにオンすることができずにアクセスに時間がかかるため性能が悪くなるという問題がある。さらに、この文献の場合には、メモリバンクの電源制御を操作パネルで行っているため、プログラム実行中にメモリバンクの電源制御を切り替えることができず、しばらくアクセスしないメモリバンクにおいて余分な電力が消費されるという問題がある。
【０００９】
一方、特開平０７−１０５６８６号公報（特許文献２）の場合には、アクセスしていないメモリバンクにはバックアップ電源が供給され、電源オフの制御はなされない。特開２０１０−１５３７５号公報（特許文献３）の場合も同様に、動作モードとして通常モードおよびスタンバイモードのみが設けられている。したがって、これらの文献の場合には、アクセス予定のないメモリバンクに対してもスタンバイ電源（バックアップ電源）が供給されるために、余分な電力が消費されるという問題がある。
【００１０】
その他の問題として、従来技術では、将来のメモリアクセスの発生を予測する方法が限られているという問題がある。具体的に、特開平０７−１０５６８６号公報（特許文献２）の場合には、現在のアクセスアドレスに所定の増分値を加算することによって将来のアクセスアドレスを予測する方法に限定されている。特開２０１０−１５３７５号公報（特許文献３）の場合には、分岐命令を検出することによって将来のメモリアクセスの発生を予測する方法に限定されている。結果として、従来技術の場合には、アクセスのない期間におけるメモリバンクの電源供給を削減することができないか、またはアクセスする前にメモリバンクの電源を予めオンすることができずにアクセスに時間がかかり性能が悪くなるという問題がある。
【００１１】
したがって、この発明の主たる目的は、不揮発性メモリを制御するメモリ制御回路において、不揮発性メモリに好適な電源制御を行うことによって従来よりもメモリ消費電力を削減することである。
【００１２】
この発明の他の目的は、メモリアクセスの発生を従来よりも的確に予測することによって、メモリアクセスにおいて待ち時間が生じないようにして、メモリのアクセス性能の低下を抑えつつ、メモリの消費電力を削減することである。
【課題を解決するための手段】
【００１３】
一実施の形態のメモリ制御回路は、ＣＰＵで動作するプログラムのタスクごとに、ＣＰＵが不揮発性メモリに含まれる複数のバンクの動作モード（電源オフ、スタンバイ、および電源オン）を個別に初期設定するための第１のレジスタ群と、命令フェッチのためのアクセスアドレスおよびフェッチされた命令の種類に基づいて、ＣＰＵから各バンクへアクセスが発生するか否かを判定するアクセス判定部とを備える。メモリ制御回路は、第１のレジスタ群の設定値およびアクセス判定部の判定結果に基づいて、各バンクの動作モードを切り替える。
【発明の効果】
【００１４】
上記の実施の形態によれば、不揮発性メモリに好適な電源制御を行うことによって従来よりもメモリ消費電力を削減することができる。
【図面の簡単な説明】
【００１５】
【図１】一実施の形態によるマイクロプロセッサの構成を示すブロック図である。
【図２】図１のメモリ使用領域指定部およびモード制御部の内部構成の一例を示す図である。
【図３】図１の命令アドレス判定部の内部構成の一例を示す図である。
【図４】図１の命令デコード判定部の内部構成の一例を示す図である。
【図５】図１の分岐判定部の内部構成の一例を示す図である。
【図６】各メモリバンクの電源制御設定の例を表形式で示した図である。
【図７】メモリバンク２に対する電源制御の例を示すタイミング図である。
【図８】メモリ制御回路および各メモリバンクへ供給される電源電圧の変化を示すタイミング図である。
【図９】データ（オペランド）アクセスに対するメモリ制御回路の動作例を示すタイミング図である。
【発明を実施するための形態】
【００１６】
以下、一実施の形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰り返さない場合がある。
【００１７】
［マイクロプロセッサの全体構成］
図１は、一実施の形態によるマイクロプロセッサの構成を示すブロック図である。図１を参照して、マイクロプロセッサ１は、ＣＰＵ（Central  Processing  Unit）２と、不揮発性メモリ３と、メモリ制御回路４と、電源スイッチ回路５とを含む。
【００１８】
ＣＰＵ２は、不揮発性メモリ３に格納されたプログラムに含まれる命令（フェッチコードＣＤ）を順次取り込み（命令フェッチ）、取り込んだ命令を実行する。通常、ＣＰＵ２は、プログラムカウンタと呼ばれるレジスタに格納されたメモリアドレスＡＤを不揮発性メモリ３に出力し、当該メモリアドレスＡＤに格納されている命令が読み出される。さらに、ＣＰＵ２は、命令中に記載されたオペランドアドレスおよび／またはオペランドデータに応じて、不揮発性メモリ３にデータＤＴを書き込んだり、不揮発性メモリ３からデータＤＴを読み出したりする。さらに、ＣＰＵ２は、メモリアクセス（読み出し、書き込み）のための制御信号ＣＳを出力する。
【００１９】
不揮発性メモリ３は、命令とデータ（オペランドデータ）とを格納する。不揮発性メモリ３は、電源オフ後も記憶を保持することができるので、使用予定のないときに電源をオフすることによって揮発性メモリよりも消費電力を削減することができる。不揮発性メモリ３として、たとえば、ＭＲＡＭ（Magnetoresistive  Random  Access  Memory）、ＲｅＲＡＭ（Resistance  RAM）、ＦｅＲＡＭ（Ferroelectric  RAM）が挙げられる。
【００２０】
図１に示すように、不揮発性メモリ３は、Ｎ＋１個のメモリバンクＢＫ＿０〜ＢＫ＿Ｎ＋１（総称するときまたは不特定のものを示すとき、メモリバンクＢＫと記載する）に分割されている。各メモリバンクＢＫは、電源モード（動作モードとも称する）として、通常電圧Ｖｎが供給される通常モードと、スタンバイ電圧Ｖｓが供給されるスタンバイモードと、電源電圧が遮断される電源遮断モードとを有する。通常電圧Ｖｎはメモリ動作（読み出し／書き込み）が可能なレベルの電圧である。スタンバイ電圧Ｖｓは通常電圧より低い電圧である。したがって、スタンバイモードは、通常モードよりも消費電力が小さくなる。スタンバイ電圧Ｖｓは、スタンバイモードから通常モードに切り替わったとき（すなわち、メモリバンクＢＫに供給される電源電圧がスタンバイ電圧Ｖｓから通常電圧Ｖｎに変化したとき）、メモリ動作可能となるまでの立ち上がり時間が数十ｎｓ程度以内になるように設定される。具体的なスタンバイ電圧Ｖｓの設定値は、メモリデバイスの特性に応じて異なる。
【００２１】
遮断モードから通常モードに切り替わることによって（すなわち、メモリバンクＢＫに供給される電源電圧が０から通常電圧Ｖｎに増加することによって）、メモリ動作可能となるまでの立ち上り時間は数μｓ以上かかる。この理由は、メモリが始動するための初期化処理があるからである。スタンバイ電圧Ｖｓを供給することにより、初期化処理をある程度のところまで完了した状態にすることによって、立ち上がり時間を短くすることができる。このように、電源オフの状態ではなくスタンバイ電圧を供給することにすることによって、メモリへのアクセスが速くなり性能の劣化を最小限にとどめることができる。
【００２２】
メモリ制御回路４は、ＣＰＵ２からのメモリアクセスに応答して、不揮発性メモリ３からの命令またはデータの読み出しの制御と、不揮発性メモリ３へのデータの書き込みの制御とを行う。メモリ制御回路４は、さらに、各メモリバンクＢＫごとに電源供給の制御（すなわち、上記の通常モード、スタンバイモード、および電源遮断モードの切り替え制御）を行う。メモリ制御回路４の詳細な構成については後述する。
【００２３】
電源スイッチ回路５は、メモリ制御回路４から出力された各メモリバンクＢＫの電源モードを設定するためのモード信号に応じて、各メモリバンクＢＫに供給する電源電圧を、通常電圧Ｖｎ、スタンバイ電圧Ｖｓ、およびオフ状態のいずれかに切り替える。
【００２４】
［メモリ制御回路の構成］
図１を参照して、メモリ制御回路４は、その内部に、メモリ使用領域指定部１０と、命令アドレス判定部２０と、命令デコード判定部３０と、分岐判定部４０と、アクセス先判定部５０と、データセレクタ部６０と、モード制御部７０とを含む。命令アドレス判定部２０、命令デコード判定部３０、および分岐判定部４０によって、メモリアクセス判定部８０が構成される。メモリアクセス判定部８０は、ＣＰＵ２が命令フェッチする際のアクセスアドレスおよびフェッチされた命令の種類に基づいて、ＣＰＵ２から各メモリバンクＢＫへアクセスが発生するか否かを判定する。以下、メモリ制御回路４の各構成要素について順に説明する。
【００２５】
１．メモリ使用領域指定部
メモリ使用領域指定部１０は、各メモリバンクＢＫに供給する電源電圧（すなわち、電源オフ、スタンバイ電圧、および通常電圧）を指定するために、メモリバンクＢＫごとに設定できる制御レジスタ（図２の１１＿０〜１１＿Ｎ）を備えている。ＣＰＵ２は、ソフトウェア処理により、各制御レジスタに対応するメモリバンクの電源電圧を予め設定することができる。
【００２６】
たとえば、ＣＰＵ２は、ソフトウェア処理により、プログラムタスクごとに実際にメモリアクセスが行う前に当該プログラムタスクでアクセスする予定のメモリバンクＢＫをスタンバイまたは電源オン（通常電圧）に指定し、アクセスしないメモリバンクＢＫを電源オフに指定する。アクセスする予定のあるメモリバンクＢＫを予めスタンバイまたは電源オンに設定しておくことによって、メモリアクセスまでの時間を短縮することができる。アクセスする予定のないメモリバンクＢＫを電源オフに指定することによって、消費電力を削減することができる。
【００２７】
上記の説明において、ソフトウェア処理とは、たとえば、オペレーティングシステム（ＯＳ）を実装するシステムでは、ＯＳのスケジューラが、タスクの順番を定めるときに電源オフ、スタンバイ、または電源オン（通常電圧）を指定する処理を行う。ＯＳを実装しないシステムでは、ＯＳのスケジューラ相当のツールをコンパイラなどで実行した際に、タスクの順番を定めるときに電源オフ、スタンバイ、または電源オンを指定する処理がプログラムに埋め込まれる。
【００２８】
２．命令アドレス判定部
命令アドレス判定部２０は、現在の命令フェッチのためのアクセスアドレスを含むメモリバンクに供給する電源をオンする（通常電圧にする）とともに、現在のアクセスアドレスがバンク境界に近づいた際に、次に命令アクセスされるメモリバンクの電源をオンする（通常電圧にする）ために設けられている。さらに、命令アドレス判定部２０は、命令アクセス先がバンク境界を跨いだ後に、バンク境界を跨ぐ前にアクセスしていたメモリバンクの電源をスタンバイに戻す。命令アドレス判定部２０は、ＣＰＵ内部のプログラムカウンタが示しているアドレスの検出結果に基づいて上記の判定を行う。命令アドレス判定部２０の具体的な構成例は、図３を参照して後述する。
【００２９】
３．命令デコード判定部
命令デコード判定部３０は、ＣＰＵ２がメモリから読み出した命令（フェッチコード）をデコードし、ＭＯＶ（Move）命令やＬＯＡＤ命令などメモリにアクセスする命令（以下、「メモリアクセス命令」と称する）をメモリから読み出したか否かを判定する。この結果、命令デコード判定部３０によってメモリアクセス命令が検出された場合には、モード制御部７０は、アクセス対象のメモリバンクＢＫ、基本的にはメモリ使用領域指定部１０によってスタンバイ状態に指定されているメモリバンクの電源をオンにする（通常電圧にする）。デコードした命令がＮＯＰ（No  Operation）命令または演算命令などメモリにアクセスしない命令（「異メモリアクセス命令」と称する）が続いた際には、モード制御部７０は、メモリバンクに供給する電源電圧をスタンバイ電圧に戻す。命令デコード判定部３０の具体的な構成例は、図４を参照して後述する。
【００３０】
命令デコード判定部３０は、フェッチコードがメモリアクセス命令であるか否かを判定するが、アクセス対象先のメモリバンクＢＫの判別は行わない。この理由は、アクセス先を判別するためには複雑なデコード回路および演算回路が必要となり、製造コストおよび開発コストが増加するばかりでなく、消費電力がかえって大きくなってしまうからである。
【００３１】
たとえば、フェッチした命令からアクセスアドレスをデコードしてアクセス先のメモリバンクを判別する際に、命令のオペランドとして絶対アドレスの情報が含まれている場合は、比較的容易にアクセス先のメモリバンクを判別することができる。しかし、フェッチした命令に相対アドレスの情報が含まれる場合には、たとえば、現在のアドレスと相対アドレスとを加算するなど本来ＣＰＵが行う処理が必要になる。この結果、回路の実装コストが高くなり、消費電力もかえって少なくならない。
【００３２】
なお、本実施の形態の場合には、図２で説明するように、メモリ使用領域指定部１０において、命令アクセスおよびデータアクセスを行う可能性のないメモリバンクＢＫに対応する制御レジスタ１１を電源オフに指定することができる。さらに、図４で説明するように、命令デコード判定部３０に設けられた制御レジスタ３１＿０〜３１＿Ｎによって、データアクセスを行う可能性のないメモリバンクに対しては命令デコード判定結果に基づいて電源オンへの切り替えを行わないように（常にデータアクセスなしと判定するように）設定できる。これによって、従来よりも消費電力を低減することができる。
【００３３】
４．分岐判定部
分岐判定部４０は、ＣＰＵ２がメモリから読み出した命令（フェッチコード）をデコードし、デコードした命令が分岐命令であるか否かを判定する。この結果、デコードした命令が分岐命令の場合、モード制御部７０は、アクセス対象のメモリバンクＢＫ、基本的にはメモリ使用領域指定部１０によってスタンバイ状態に指定されているメモリバンクの電源をオンする（通常電圧にする）。分岐判定部４０によって分岐命令が判定された後、命令が実行されるまでの時間が経過したら、モード制御部７０は、分岐判定部４０による判定結果に基づいて電源オンにしているメモリバンクの電源をスタンバイ電圧に戻す。この後は、命令アドレス判定部２０による判定結果に基づいて、分岐先のメモリバンクＢＫに供給される電源電圧が通常電圧Ｖｎとなるように制御される。分岐判定部４０の具体的な構成例は、図５を参照して後述する。
【００３４】
分岐判定部４０は、命令デコード判定部３０の場合と同様の理由で、フェッチコードが分岐命令であるか否かを判定するが、分岐先のメモリバンクの判別は行わない。
【００３５】
なお、本実施の形態の場合には、図２で説明するように、メモリ使用領域指定部１０において、命令アクセスおよびデータアクセスを行う可能性のないメモリバンクＢＫに対応する制御レジスタ１１を電源オフに指定することができる。さらに、図５で説明するように、分岐判定部４０に設けられた制御レジスタ４１＿０〜４１＿Ｎによって、命令アクセスを行う可能性のないメモリバンクに対しては分岐判定結果に基づいて電源オンへの切り替えを行わないよう（常に命令アクセスなしと判定するように）に設定できる。これによって、従来よりも消費電力を低減することができる。
【００３６】
５．アクセス先判定部
アクセス先判定部５０は、ＣＰＵ２から不揮発性メモリ３に出力されるリクエスト信号と、ＣＰＵ２が命令アクセスおよびデータアクセスのために不揮発性メモリ３に出力するアクセスアドレスＡＤとを検出する。リクエスト信号は、ＣＰＵ２から不揮発性メモリ３へのアクセス中（命令アクセスおよびデータアクセスのいずれかがあるとき）にアサートされている。アクセス先判定部５０は、リクエスト信号がアサートされているときに、現在のアクセスアドレスに対応するメモリバンクＢＫに対して、ＣＰＵ２によるアクセスが発生すると判定する。アクセス先判定部５０は、リクエスト信号がネゲートされている場合には、いずれのメモリバンクＢＫに対してもＣＰＵ２によるアクセスはないと判定する。
【００３７】
図１のメモリ制御回路４では、メモリに格納されたデータがＣＰＵ２によってアクセスされる場合には、命令デコード判定部３０によってデータアクセスが発生することを予測する仕組みとなっている。しかしながら、命令デコード判定部３０による予測が外れたときに、アクセス対象のメモリバンクＢＫの電源がオンされていないとハングアップしてしまう。このハングアップ防止するためにアクセス先判定部５０が設けられている。
【００３８】
一方、メモリに格納された命令がＣＰＵ２によってアクセスされる場合には、基本的には、命令アドレス判定部２０によって現在アクセス中のメモリバンクおよびアクセス予定のメモリバンクの電源がオンされるので、アクセス先判定部５０は必要ない。しかしながら、たとえば、図３の制御レジスタ２１＿０〜２１＿Ｎの設定値（アドレス判定イネーブル信号ＡＤＥＮの値）を誤って設定した場合には、ハングアップを防止することができる。
【００３９】
６．データセレクタ部
データセレクタ部６０は、ＣＰＵ２からの読み出し対象となっているメモリバンクの命令およびデータを読み出す。データセレクタ部６０は、読み出した命令（フェッチコードＣＤ）およびデータＤＴをＣＰＵ２に出力するとともに、フェッチコードＣＤを命令デコード判定部３０および分岐判定部４０にも出力する。
【００４０】
７．モード制御部
モード制御部７０は、メモリ使用領域指定部１０から、各メモリバンクＢＫに対する電源指定（電源ＯＮ／スタンバイ／電源ＯＦＦ）を表す制御信号を受けるとともに、命令アドレス判定部２０、命令デコード判定部３０、および分岐判定部４０から、各メモリバンクＢＫの電源ＯＮを指令する制御信号を受ける。モード制御部７０は、さらに、アクセス先判定部５０から、各メモリバンクＢＫごとにＣＰＵ２によってアクセスされているか否かを示す制御信号を受ける。モード制御部７０は、これらの制御信号に基づいて、メモリバンクＢＫごとに電源オン、スタンバイ、および電源オフのいずれかを表すモード信号を電源スイッチ回路５に出力する。以下、図２を参照して、モード制御部７０の構成例を詳しく説明する。
【００４１】
［メモリ使用領域指定部およびモード制御部の構成例］
図２は、図１のメモリ使用領域指定部およびモード制御部の内部構成の一例を示す図である。
【００４２】
図２を参照して、メモリ使用領域指定部１０は、図１のメモリバンクＢＫ＿０〜ＢＫ＿Ｎにそれぞれ対応して設けられた制御レジスタ１１＿０〜１１＿Ｎ（総称する場合または不特定のものを示す場合に制御レジスタ１１と記載する）を含む。
【００４３】
各制御レジスタ１１は、２ビットの制御データ（スタンバイ指定値Ａｓｂ、オン指定値Ａｏｎ）を格納する。各制御レジスタ１１において、対応のメモリバンクＢＫを電源オンに指定する場合には、オン指定値Ａｏｎを“１”に設定する（この場合、スタンバイ指定値Ａｓｂは“１”、“０”のいずれでもよいが、通常は“０”とする）。対応のメモリバンクＢＫをスタンバイに指定する場合には、オン指定値Ａｏｎを“０”に設定し、スタンバイ指定値Ａｓｂを“１”に設定する。対応のメモリバンクＢＫを電源オフに指定する場合には、オン指定値Ａｏｎを“０”に設定し、スタンバイ指定値Ａｓｂを“０”に設定する。
【００４４】
モード制御部７０は、図１のメモリバンクＢＫ＿０〜ＢＫ＿Ｎにそれぞれ対応して設けられたモード信号生成回路７１＿０〜７１＿Ｎ（総称する場合または不特定のものを示す場合にモード信号生成回路７１と記載する）を含む。各モード信号生成回路７１は、メモリ使用領域指定部１０の対応の制御レジスタ１１からスタンバイ指定値Ａｓｂおよびオン指定値Ａｏｎの入力を受ける。
【００４５】
各モード信号生成回路７１は、さらに、命令アドレス判定部２０、命令デコード判定部３０、および分岐判定部４０の各々から判定結果を表す制御信号を受ける。図１で説明したように、命令アドレス判定部２０は、ＣＰＵ２が命令アクセスのために現在アクセスしているメモリバンクＢＫおよび次にアクセスするメモリバンクＢＫを判定し、これらのメモリバンクＢＫに対応するモード信号生成回路７１に出力する制御信号を“１”にし、その他のモード信号生成回路７１に出力する制御信号を“０”にする。命令デコード判定部３０は、フェッチコードがメモリアクセス命令である場合に、各モード信号生成回路７１に出力する制御信号を“１”にする。分岐判定部４０は、フェッチコードが分岐命令である場合に、各モード信号生成回路７１に出力する制御信号を“１”にする。
【００４６】
各モード信号生成回路７１は、さらに、アクセス先判定部５０から制御信号を受ける。図１で説明したように、アクセス先判定部５０は、ＣＰＵ２が命令アクセスおよびデータアクセスのために不揮発性メモリ３にアクセス中のとき（リクエスト信号がアサートされているとき）、アクセス先のメモリバンクＢＫに対応するモード信号生成回路７１に制御信号“１”を出力し、その他のモード信号生成回路７１に制御信号“０”を出力する。
【００４７】
次に、各モード信号生成回路７１の具体的な構成例について説明する。図２を参照して、各モード信号生成回路７１は、ＯＲゲート７２，７４と、ＡＮＤゲート７３，７６と、インバータ７５とを含む。
【００４８】
ＯＲゲート７２は、命令アドレス判定部２０、命令デコード判定部３０、および分岐判定部４０の各々から出力された対応の制御信号を受ける。ＯＲゲート７２は、これらの制御信号のＯＲ演算を行い、演算結果をＡＮＤゲート７３に出力する。
【００４９】
ＡＮＤゲート７３は、ＯＲゲート７２の出力と、メモリ使用領域指定部１０の対応の制御レジスタ１１に格納されているスタンバイ指定値ＡｓｂとのＡＮＤ演算を行い、演算結果をＯＲゲート７４に出力する。
【００５０】
ＯＲゲート７４は、ＡＮＤゲート７３の出力と、アクセス先判定部５０から出力された対応の制御信号と、メモリ使用領域指定部１０の対応の制御レジスタ１１に格納されているオン指定値ＡｏｎとのＯＲ演算を行い、演算結果をオン信号Ｓｏｎとして電源スイッチ回路５に出力する。
【００５１】
ＡＮＤゲート７６は、スタンバイ指定値Ａｓｂと、ＯＲゲート７４の出力の論理値をインバータ７５によって反転させた信号とのＡＮＤ演算を行い、演算結果をスタンバイ信号Ｓｓｂとして電源スイッチ回路５に出力する。
【００５２】
電源スイッチ回路５は、各モード信号生成回路７１から受けたオン信号Ｓｏｎおよびスタンバイ信号Ｓｓｂに応じて、各モード信号生成回路７１にそれぞれ対応するメモリバンクＢＫに供給する電源電圧を通常電圧Ｖｎ、スタンバイ電圧Ｖｓ、およびオフ状態のいずれかに切り替える。具体的に、あるモード信号生成回路７１から受けたオン信号Ｓｏｎが“１”のときは、対応のメモリバンクＢＫに通常電圧Ｖｎを出力する。電源スイッチ回路５は、あるモード信号生成回路７１から受けたオン信号Ｓｏｎが“０”であり、スタンバイ信号Ｓｓｂが“１”のときは、対応のメモリバンクＢＫにスタンバイ電圧Ｖｓを出力する。電源スイッチ回路５は、あるモード信号生成回路７１から受けたオン信号Ｓｏｎが“０”であり、スタンバイ信号Ｓｓｂが“０”のときは、対応のメモリバンクＢＫへの電源供給を遮断する。
【００５３】
以上のモード制御部７０および電源スイッチ回路５の構成によれば、各モード信号生成回路７１から電源スイッチ回路５に出力されるオン信号Ｓｏｎの値およびスタンバイ信号Ｓｓｂの値は次のようになる。
【００５４】
(i)  メモリ使用領域指定部１０の対応の制御レジスタ１１に格納されているオン指定値Ａｏｎが“１”の場合（通常モードに初期設定されている場合）について説明する。この場合、各判定部２０，３０，４０，５０の判定結果によらずにオン信号Ｓｏｎが“１”になり、スタンバイ信号Ｓｓｂが“０”になる。この結果、電源スイッチ回路５から対応のメモリバンクＢＫに通常電圧Ｖｎが供給される。
【００５５】
(ii)  メモリ使用領域指定部１０の対応の制御レジスタ１１に格納されているオン指定値Ａｏｎが“０”であり、スタンバイ指定値Ａｓｂが“０”の場合（電源遮断モードに初期設定されている場合）について説明する。この場合、アクセス先判定部５０から出力された対応の制御信号が“０”のとき、電源スイッチ回路５に出力するオン信号Ｓｏｎが“０”になり、スタンバイ信号Ｓｓｂが“０”になる。この結果、電源スイッチ回路５から対応のメモリバンクＢＫへの電源供給が遮断される。命令アドレス判定部２０、命令デコード判定部３０、および分岐判定部４０の少なくとも１つから出力される対応の制御信号が“１”であったとしても、対応のメモリバンクＢＫの動作モードは、電源遮断モードが維持される。
【００５６】
一方、アクセス先判定部５０から出力された対応の制御信号が“１”のとき、オン信号Ｓｏｎが“１”になり、スタンバイ信号Ｓｓｂが“０”になる。この結果、電源スイッチ回路５から対応のメモリバンクＢＫに通常電圧Ｖｎが供給される。すなわち、アクセス先判定部５０から出力された対応の制御信号が“１”のとき、メモリ使用領域指定部１０の対応の制御レジスタ１１の設定値、各判定部２０，３０，４０の判定結果によらず、対応のメモリバンクＢＫの動作モードが通常モードに切り替わる。
【００５７】
(iii)  メモリ使用領域指定部１０の対応の制御レジスタ１１に格納されているオン指定値Ａｏｎが“０”であり、スタンバイ指定値Ａｓｂが“１”の場合（スタンバイモードに初期設定されている場合）について説明する。この場合、命令アドレス判定部２０、命令デコード判定部３０、分岐判定部４０、およびアクセス先判定部５０のうち少なくとも１つから出力された対応の制御信号が“１”のとき、オン信号Ｓｏｎが“１”になり、スタンバイ信号Ｓｓｂが“０”になる。この結果、電源スイッチ回路５から対応のメモリバンクＢＫに通常電圧Ｖｎが供給される（動作モードが通常モードに切り替わる）。一方、上記の各制御信号がいずれも“０”のとき、オン信号Ｓｏｎが“０”になり、スタンバイ信号Ｓｓｂが“１”になる。この結果、電源スイッチ回路５から対応のメモリバンクＢＫにスタンバイ電圧Ｖｓが供給される。
【００５８】
［命令アドレス判定部の構成例］
図３は、図１の命令アドレス判定部の内部構成の一例を示す図である。図３を参照して、命令アドレス判定部２０は、制御レジスタ２１＿０〜２１＿Ｎおよび２４と、加算部２５と、アクセス先判定部２２，２３と、命令アドレス判定回路２６＿０〜２６＿Ｎとを含む。
【００５９】
制御レジスタ２１＿０〜２１＿Ｎ（総称する場合または不特定のものを示す場合、制御レジスタ２１と記載する）は、図１のメモリバンクＢＫ＿０〜ＢＫ＿Ｎにそれぞれ対応して設けられている。各制御レジスタ２１は、対応のメモリバンクＢＫに対して命令アドレス判定部２０による制御を有効にするか無効にするかを設定するための制御値（アドレス判定イネーブル信号ＡＤＥＮ）を保持する。各制御レジスタ２１の値は、図１のＣＰＵ２によって設定される。
【００６０】
制御レジスタ２４は、現在のアクセスアドレスに加算するアドレス増加分を保持する。アドレス増加分は、現在のアクセスアドレスが次にアクセスされるメモリバンクとの境界に近づいたか否かを判断するために用いられる。制御レジスタ２４の値は、図１のＣＰＵ２によって設定される。加算部２５は、現在のアクセスアドレスにアドレス増加分を加算する。
【００６１】
アクセス先判定部２２は、入力された現在のアクセスアドレスに基づいてアクセス先のメモリバンクを判別し、現在アクセス中のメモリバンクＢＫに対応する制御信号を“１”にし、その他のメモリバンクＢＫに対応する制御信号を“０”にする。アクセス先判定部２２から出力されたメモリバンクＢＫ＿０〜ＢＫ＿Ｎ用の制御信号は、命令アドレス判定回路２６＿０〜２６＿Ｎにそれぞれ出力される。
【００６２】
アクセス先判定部２３は、加算部２５の加算結果のアドレス値に対応するメモリバンクを判別し、判別したメモリバンクＢＫに対応する制御信号を“１”にし、その他のメモリバンクＢＫに対応する制御信号を“０”にする。アクセス先判定部２３から出力されたメモリバンクＢＫ＿０〜ＢＫ＿Ｎ用の制御信号は、命令アドレス判定回路２６＿０〜２６＿Ｎにそれぞれ出力される。
【００６３】
命令アドレス判定回路２６＿０〜２６＿Ｎ（総称する場合または不特定のものを示す場合、命令アドレス判定回路２６と記載する）は、図１のメモリバンクＢＫ＿０〜ＢＫ＿Ｎにそれぞれ対応して設けられている。各命令アドレス判定回路２６は、ＯＲゲート２６１およびＡＮＤゲート２６２を含む。
【００６４】
ＯＲゲート２６１は、アクセス判定部２２，２３の各々から出力された対応の制御信号を受け、これらの制御信号のＯＲ演算を行う。ＡＮＤゲート２６２は、ＯＲゲート２６１の演算結果と、対応の制御レジスタ２１からの制御値ＡＤＥＮとのＡＮＤ演算を行う。ＡＮＤゲート２６２の演算結果は、アドレス判定結果を示す制御信号として、図２のモード制御部７０内の対応するモード信号生成回路７１に入力される。
【００６５】
以上の構成によれば、各命令アドレス判定回路２６は次のように動作する。
(i)  対応の制御レジスタ２１の値が“０”の場合、命令アドレス判定回路２６の出力（ＡＮＤゲート２６２の出力）は“０”になる。この場合、対応のメモリバンクＢＫに対して、命令アドレス判定回路２６の判定結果に基づく制御は行われない。
【００６６】
(ii)  対応の制御レジスタ２１の値が“１”であり、かつ、アクセス先判定部２２，２３からそれぞれ出力される対応の制御信号のうち、少なくとも一方が“１”の場合、命令アドレス判定回路２６の出力（ＡＮＤゲート２６２の出力）は“１”になる。この結果、図２で説明したように、基本的には、メモリ使用領域指定部１０によって電源オフに指定されていない限り、対応するメモリバンクＢＫに供給される電源電圧は通常電圧Ｖｎ（電源オン）になる。上記の場合は、対応のメモリバンクＢＫが、現在、ＣＰＵ２によって命令アクセスされているか、もしくは、対応のメモリバンクＢＫのアドレスが現在のアクセスアドレスに近いために、次に命令アクセスされる場合に相当する。
【００６７】
(iii)  対応の制御レジスタ２１の値が“１”であり、かつ、アクセス先判定部２２，２３からそれぞれ出力される対応の制御信号の両方とも“０”の場合、命令アドレス判定回路２６の出力（ＡＮＤゲート２６２の出力）は“０”になる。この場合は、対応のメモリバンクＢＫは、現在の命令アクセス対象でも、次の命令アクセス対象でもない場合に相当する。対応するメモリバンクＢＫに供給される電源電圧は通常電圧Ｖｎに切り替わらずに、電源オフまたはスタンバイ電圧Ｖｓが維持される。
【００６８】
［命令デコード判定部の構成例］
図４は、図１の命令デコード判定部の内部構成の一例を示す図である。図４を参照して、命令デコード判定部３０は、制御レジスタ３１＿０〜３１＿Ｎと、メモリアクセス命令検出部３２と、出力保持部３３と、インバータ３４と、異メモリアクセス命令検出部３５と、命令デコード判定回路３６＿０〜３６＿Ｎとを含む。
【００６９】
制御レジスタ３１＿０〜３１＿Ｎ（総称する場合または不特定のものを示す場合、制御レジスタ３１と記載する）は、図１のメモリバンクＢＫ＿０〜ＢＫ＿Ｎにそれぞれ対応して設けられている。各制御レジスタ３１は、対応のメモリバンクＢＫに対して命令デコード判定部３０による制御を有効にするか無効にするかを設定するための制御値（デコード判定イネーブル信号ＤＥＥＮ）を保持する。各制御レジスタ３１の値は、図１のＣＰＵ２によって設定される。
【００７０】
メモリアクセス命令検出部３２は、入力されたフェッチコードＣＤをデコードし、ＭＯＶ（Move）命令やＬＯＡＤ命令など、メモリにアクセスする命令（メモリアクセス命令）を検出する。メモリアクセス命令検出部３２は、フェッチコードがメモリアクセス命令である場合に“１”を出力し、フェッチコードがメモリアクセス命令でない場合（すなわち、異メモリアクセス命令である場合）に“０”を出力する。
【００７１】
出力保持部３３は、メモリアクセス命令を検出後、命令が実行されるまでの間、検出結果の値（“１”または“０”）を保持する。
【００７２】
異メモリアクセス命令検出部３５は、メモリアクセス命令検出部３２でデコードされたフェッチコードＣＤが、ＮＯＰ命令および演算命令などメモリにアクセスしない命令（異メモリアクセス命令）である場合に、異メモリアクセス命令が指定回数連続して続いたか否かを検出する。具体的に、異メモリアクセス命令検出部３５は、メモリアクセス命令検出部３２の出力の論理値を反転した信号の入力を受ける。たとえば、指定回数を３とすると、異メモリアクセス命令検出部３５は、メモリアクセス命令検出部３２の検出結果が“０”（すなわち、インバータ３４の出力が“１”）となる状態が３回以上連続した場合に“１”を出力し、そうでない場合に“０”を出力する。
【００７３】
命令デコード判定回路３６＿０〜３６＿Ｎ（総称する場合または不特定のものを示す場合、命令デコード判定回路３６と記載する）は、図１のメモリバンクＢＫ＿０〜ＢＫ＿Ｎにそれぞれ対応して設けられている。各命令デコード判定回路３６は、インバータ３６１、ＡＮＤゲート３６２，３６４、ＯＲゲート３６３、およびレジスタ３６５を含む。
【００７４】
ＡＮＤゲート３６２は、異メモリアクセス命令検出部３５の出力の論理値をインバータ３６１によって反転した信号と、レジスタ３６５に保持されている値とのＡＮＤ演算を行う。ＯＲゲート３６３は、出力保持部３３の出力と、ＡＮＤゲート３６２の演算結果とのＯＲ演算を行う。ＡＮＤゲート３６４は、ＯＲゲート３６３の演算結果と、対応の制御レジスタ３１からの制御値ＤＥＥＮとのＡＮＤ演算を行う。ＡＮＤゲート３６４の演算結果は、命令デコード判定結果を示す制御信号として、図２のモード制御部７０内の対応するモード信号生成回路７１に入力される。ＡＮＤゲート３６４の演算結果は、さらに、レジスタ３６５に保持される。
【００７５】
レジスタ３６５を設ける理由は、命令デコード判定結果が“１”となった場合には、異メモリアクセス命令検出部３５が“１”を出力するまで、判定結果の出力を“１”で維持するためである。命令デコード判定結果の出力値（“１”／“０”）を頻繁に切り替えてしまうと、各メモリバンクＢＫに供給される電源電圧も頻繁に切り替わる。この結果、余計に電力を消費することになり望ましくない。よって、異メモリアクセス命令検出部３５でメモリアクセス命令が指定回数以上連続しないことが判定された場合にのみ、命令デコード判定結果が“０”になる。
【００７６】
以上の構成によれば、各命令デコード判定回路３６は次のように動作する。
(i)  対応の制御レジスタ３１の値が“０”の場合、命令デコード判定回路３６の出力（ＡＮＤゲート３６４の出力）は“０”になる。この場合、対応のメモリバンクＢＫに対して、命令デコード判定回路３６の判定結果に基づく制御は行われない。
【００７７】
(ii)  対応の制御レジスタ３１の値が“１”であり、かつ、出力保持部３３の出力が“１”（すなわち、フェッチコードがメモリアクセス命令）の場合、命令デコード判定回路３６の出力（ＡＮＤゲート３６４の出力）は“１”になる。この結果、図２で説明したように、基本的には、メモリ使用領域指定部１０によって電源オフに指定されていない限り、対応するメモリバンクＢＫに供給される電源電圧は通常電圧Ｖｎ（電源オン）になる。
【００７８】
(iii)  対応の制御レジスタ３１の値が“１”であり、かつ、出力保持部３３の出力が“０”であり、かつ、異メモリアクセス命令検出部３５の出力が“１”の場合（異メモリアクセス命令が指定回数以上連続した場合）、命令デコード判定回路３６の出力（ＡＮＤゲート３６４の出力）は“０”になる。対応するメモリバンクＢＫに供給される電源電圧は通常電圧Ｖｎに切り替わらずに、電源オフまたはスタンバイ電圧Ｖｓが維持される。
【００７９】
［分岐判定部の構成例］
図５は、図１の分岐判定部の内部構成の一例を示す図である。図５を参照して、分岐判定部４０は、制御レジスタ４１＿０〜４１＿Ｎと、分岐命令検出部４２と、出力保持部４３と、分岐判定回路４４＿０〜４４＿Ｎとを含む。
【００８０】
制御レジスタ４１＿０〜４１＿Ｎ（総称する場合または不特定のものを示す場合、制御レジスタ４１と記載する）は、図１のメモリバンクＢＫ＿０〜ＢＫ＿Ｎにそれぞれ対応して設けられている。各制御レジスタ４１は、対応のメモリバンクＢＫに対して分岐判定部４０による制御を有効にするか無効にするかを設定するための制御値（分岐判定イネーブル信号ＢＲＥＮ）を保持する。各制御レジスタ４１の値は、図１のＣＰＵ２によって設定される。
【００８１】
分岐命令検出部４２は、入力されたフェッチコードＣＤをデコードし、分岐命令を検出する。分岐命令検出部４２は、フェッチコードが分岐命令である場合に“１”を出力し、フェッチコードが分岐命令でない場合に“０”を出力する。
【００８２】
出力保持部４３は、分岐命令を検出後、命令が実行されるまでの間、検出結果の値（“１”または“０”）を保持する。
【００８３】
分岐判定回路４４＿０〜４４＿Ｎ（総称する場合または不特定のものを示す場合、分岐判定回路４４と記載する）は、図１のメモリバンクＢＫ＿０〜ＢＫ＿Ｎにそれぞれ対応して設けられている。
【００８４】
各分岐判定回路４４は、ＡＮＤゲート４５を含む。ＡＮＤゲート４５は、出力保持部３３の出力と、対応の制御レジスタ４１からの制御値ＢＲＥＮとのＡＮＤ演算を行う。ＡＮＤゲート４５の演算結果は、分岐判定結果を示す制御信号として、図２のモード制御部７０内の対応するモード信号生成回路７１に入力される。
【００８５】
以上の構成によれば、各分岐判定回路４４は次のように動作する。
(i)  対応の制御レジスタ４１の値が“０”の場合、分岐判定回路４４の出力（ＡＮＤゲート４５の出力）は“０”になる。この場合、対応のメモリバンクＢＫに対して、分岐判定回路４４の判定結果に基づく制御は行われない。
【００８６】
(ii)  対応の制御レジスタ４１の値が“１”であり、かつ、出力保持部４３の出力が“１”（すなわち、フェッチコードが分岐命令）の場合、分岐判定回路４４の出力（ＡＮＤゲート４５の出力）は“１”になる。この結果、図２で説明したように、基本的には、メモリ使用領域指定部１０によって電源オフに指定されていない限り、対応するメモリバンクＢＫに供給される電源電圧は通常電圧Ｖｎ（電源オン）になる。
【００８７】
(iii)  対応の制御レジスタ４１の値が“１”であり、かつ、出力保持部４３の出力が“０”の場合、分岐判定回路４４の出力（ＡＮＤゲート４５の出力）は“０”になる。対応するメモリバンクＢＫに供給される電源電圧は通常電圧Ｖｎに切り替わらずに、電源オフまたはスタンバイ電圧Ｖｓが維持される。
【００８８】
［メモリ制御回路の動作例］
次に、メモリ制御回路の動作例について説明する。この動作例では、総数５個（Ｎ＝４）のメモリバンクＢＫ＿０〜ＢＫ＿４が設けられている。以下、メモリバンクＢＫ＿０〜ＢＫ＿４をそれぞれメモリバンク０〜４もしくはバンク０〜４と簡単に記載する場合がある。バンク０と１にはデータ（オペランド）が格納され、バンク２と３には命令が格納され、バンク４にデータと命令の両方が格納されている。
【００８９】
図６は、各メモリバンクの電源制御設定の例を表形式で示した図である。図６を参照して、図２で説明したメモリ使用領域指定部１０の制御レジスタ１１＿０〜１１＿３は、それぞれ対応するメモリバンク０〜３の使用状況に応じて、スタンバイ（Ａｓｂ＝１、Ａｏｎ＝０）または電源オフ（Ａｓｂ＝０、Ａｏｎ＝０）に設定される。バンク４については常時アクセスされるために、メモリ使用領域指定部１０の対応する制御レジスタ１１＿４は、電源オン（Ａｏｎ＝１）に設定される。図６では、スタンバイをＳで表し、電源オフをＯＦＦで表し、電源オンをＯＮで表している。
【００９０】
図３で説明した命令アドレス判定部２０の各制御レジスタ２１の設定に関して、バンク０，１ではデータアクセスが行われ、命令アクセスは行われないので、対応する制御レジスタ２１＿０，２１＿１は“０”に設定される。バンク２，３では命令アクセスが行われるので、対応する制御レジスタ２１＿２，２１＿３は“１”に設定される。バンク４は、メモリ使用領域指定部１０の制御レジスタ１１＿４によって電源オンに設定されているので、命令アドレス判定を行う必要がない。したがって、対応する制御レジスタ２１＿４は“０”に設定される。
【００９１】
図４で説明した命令デコード判定部３０の各制御レジスタ３１の設定に関して、バンク０，１ではデータアクセスが行われるので、対応する制御レジスタ３１＿０，３１＿１は“１”が設定される。バンク２，３では命令アクセスが行われ、データアクセスは行われないので、対応する制御レジスタ３１＿２，３１＿３は“０”が設定される。バンク４は、メモリ使用領域指定部１０の制御レジスタ１１＿４によって電源オンに設定されているので、命令デコード判定を行う必要がない。したがって、対応する制御レジスタ２１＿４は“０”に設定される。
【００９２】
図５で説明した分岐判定部４０の各制御レジスタ４１の設定に関して、バンク０，１ではデータアクセスが行われ、命令アクセスは行われないので、対応する制御レジスタ４１＿０，４１＿１は“０”に設定される。バンク２，３では命令アクセスが行われるので、対応する制御レジスタ４１＿２，４１＿３は“１”に設定される。バンク４は、メモリ使用領域指定部１０の制御レジスタ１１＿４によって電源オンに設定されているので、分岐判定を行う必要がない。したがって、対応する制御レジスタ４１＿４は“０”に設定される。
【００９３】
１．命令アクセスに対する動作例
図７は、メモリバンク２に対する電源制御の例を示すタイミング図である。図７では、上から順に、プログラムを実行した際のソフトウェアの動作（Ｓ／Ｗ動作）、電源制御を行うためにＣＰＵがバンク２用の制御レジスタに設定した値、メモリ使用領域指定部１０および各判定部２０，３０，４０の出力、モード制御部７０から出力されたバンク２用のモード信号（オン信号、スタンバイ信号）の値、ならびにバンク２の電源モードが示されている。
【００９４】
図１、図７を参照して、Ｓ／Ｗ動作では、起動タスクからタスク１〜４を経て退避タスクまで至るプログラムタスクごとに、どのメモリバンクを使用するかをメモリ使用領域指定部１０によって指定できる。図７の場合、命令アクセスのために、起動および退避ではバンク４が使用され、タスク１ではバンク２および４が使用され、タスク２および４ではバンク２、３および４が使用され、タスク３ではバンク４が使用される。
【００９５】
図７の例では、最終的にマイクロコンピュータ（マイコン）が一時的に電源をオフして動作を停止する。マイコンが停止する前に、ＣＰＵ周辺の汎用レジスタのデータをメモリに退避したり、キャッシュを持つマイコンであればキャッシュ内のデータをメモリに退避したりする退避タスクが実行される。
【００９６】
時刻ｔ１より以前では、メモリ制御回路４の電源がオフのため、全ての制御レジスタ（図２〜図５の制御レジスタ１１，２１，３１，４１）の値は“０”になっている。時刻ｔ１で電源が投入されることにより、マイコンが起動する。メモリ制御回路４は、リセット解除後に、ハードウェア的に図２のメモリ使用領域指定部１０に設けられた制御レジスタ１１＿０〜１１＿４を全て電源オンの状態（Ａｏｎ＝“１”、Ａｓｂ＝“０”）に設定する。この結果、図２のモード信号生成回路７１＿２から出力されるバンク２用のオン信号の論理値は“１”になり、スタンバイ信号Ｓｓｂの論理値は“０”になる。これにより、バンク２の電源モードは、通常モード（電源ＯＮ）になる。各メモリバンクを通常モードにすることによって、ＣＰＵ２は、いずれかのメモリバンクに格納されている初期起動のためのプログラムを読み出して実行することができる。
【００９７】
電源オンした後、次の時刻ｔ２において、ＣＰＵ２はメモリバンク２を起動タスクにおいてはアクセスしないため、ＣＰＵ２はメモリ使用領域指定部１０の対応する制御レジスタ１１＿２を電源オフ（オン指定値Ａｏｎ＝“０”、スタンバイ指定値Ａｓｂ＝“０”）に設定する。この結果、バンク２に対応する図２のモード信号生成回路７１＿２から出力されるオン信号Ｓｏｎおよびスタンバイ信号Ｓｓｂはともに“０”になり、バンク２の電源モードは、電源遮断モード（電源ＯＦＦ）になる。
【００９８】
さらに、図６で説明したように、メモリバンク２は命令を格納しているため、ＣＰＵ２は、図３の命令アドレス判定部２０のバンク２に対応する制御レジスタ２１＿２を“１”に設定し、図５の分岐判定部４０のバンク２に対応する制御レジスタ４１＿２を“１”に設定する。これによって、これらの判定部２０，４０のバンク２に対する判定結果は有効になる。一方、メモリバンク２はデータを格納していないため、ＣＰＵ２は、図４の命令デコード判定部３０のバンク２に対応する制御レジスタ３１＿２を“０”に設定する。これによって、命令デコード判定部３０のバンク２に対する判定結果は無効になる。
【００９９】
時刻ｔ５以降のタスク１ではメモリバンク２を使用するため、タスク１の実行前の時刻ｔ３に、ＣＰＵ２は、図２のメモリ使用領域指定部１０の対応する制御レジスタ１１＿２をスタンバイ（オン指定値Ａｏｎ＝“０”、スタンバイ指定値Ａｓｂ＝“１”）に設定する。この結果、バンク２に対応する図２のモード信号生成回路７１＿２から出力されるオン信号Ｓｏｎは“０”になり、スタンバイ信号Ｓｓｂは“１”になり、バンク２の電源モードはスタンバイモード（Ｓ）になる。
【０１００】
タスク１に移行するにあたり分岐命令が実行されるため、図５の分岐判定部４０の分岐命令検出部４２は、時刻ｔ４に分岐命令を検出する。この結果、バンク２用の分岐判定回路４４＿２は、分岐判定結果として“１”を出力する。これによって、バンク２の電源モードは通常モード（電源ＯＮ）となる。
【０１０１】
時刻ｔ５でタスク１が実行されると、命令フェッチのためのアクセスアドレスがメモリバンク２となるため、図３の命令アドレス判定部２０においてバンク２に対応する命令アドレス判定回路２６＿２は判定結果として“１”を出力する。この結果、バンク２の電源モードは通常モード（電源ＯＮ）が維持される。タスク１の実行中（時刻ｔ７まで）はメモリバンク２の命令が読み出され続けるため、図３の命令アドレス判定部２０の対応する命令アドレス判定回路２６＿２は判定結果として“１”を出力する。この結果、バンク２の電源モードは通常モード（電源ＯＮ）が維持される。
【０１０２】
このようにアクセスするメモリバンクに対して、アクセス前にメモリバンクの電源をスタンバイにし、その後電源ＯＮ（通常モード）にしているため、メモリアクセスにおいて待ち時間が生じずに処理性能が低下することなく電源制御を行うことができる。
【０１０３】
時刻ｔ７においてタスク２に移行した後、メモリバンク２からメモリバンク３へ命令アクセスが跨る時刻ｔ９の前に（図８の時刻ｔ８）、図３の命令アドレス判定部２０のメモリバンク２，３に対応する命令アドレス判定回路２６＿２，２６＿３の判定出力は両方とも“１”となる。この結果、メモリバンク２および３の電源モードは両方とも通常モード（電源ＯＮ）となる。
【０１０４】
命令アクセスがメモリバンク３へ移行した後は（時刻ｔ９以降）、図３の命令アドレス判定部２０のメモリバンク２に対応する命令アドレス判定回路２６＿２の判定結果は“０”となる。この結果、メモリバンク２の電源モードはスタンバイモード（Ｓｏｎ＝“０”、Ｓｓｂ＝“１”）になる。
【０１０５】
時刻ｔ１０以降のタスク３においては、ＣＰＵ２はメモリバンク２へアクセスしない。このため、タスク３に移行時に、ＣＰＵ２は、図２のメモリ使用領域指定部１０の対応する制御レジスタ１１＿２を電源ＯＦＦ（Ａｏｎ＝“０”、Ａｓｂ＝“０”）に設定する。この結果、バンク２に対応する図２のモード信号生成回路７１＿２から出力されるオン信号Ｓｏｎおよびスタンバイ信号Ｓｓｂが共に“０”になり、バンク２の電源モードは電源遮断モード（電源ＯＦＦ）になる。
【０１０６】
次のタスク４（時刻ｔ１２以降）ではメモリバンク２が使用されるため、タスク４の実行前の時刻ｔ１１に、ＣＰＵ２は、図２のメモリ使用領域指定部１０の対応する制御レジスタ１１＿２をスタンバイ（オン指定値Ａｏｎ＝“０”、スタンバイ指定値Ａｓｂ＝“１”）に設定する。この結果、バンク２の電源モードはスタンバイモード（オン信号Ｓｏｎ＝“０”、スタンバイ信号Ｓｓｂ＝“１”）になる。
【０１０７】
タスク４を実行中の時刻ｔ１３に分岐命令が実行されるため、図５の分岐判定部４０の分岐命令検出部４２は分岐命令を検出する。この結果、バンク２用の分岐判定回路４４＿２は、分岐判定結果として“１”を出力する。これによって、バンク２の電源モードは通常モード（電源ＯＮ）となる。分岐命令の実行後（時刻ｔ１４以降）は、命令フェッチのためのアクセスアドレスがメモリバンク２となるため、図３の命令アドレス判定部２０においてバンク２に対応する命令アドレス判定回路２６＿２は判定結果として“１”を出力する。この結果、バンク２の電源モードは通常モード（電源ＯＮ）が維持される。
【０１０８】
時刻ｔ１５に退避タスクに移行する。退避タスクにおいてはメモリバンク２へアクセスしないため、ＣＰＵ２は、メモリ使用領域指定部１０の対応する制御レジスタ１１＿２を電源オフ（オン指定値Ａｏｎ＝“０”、スタンバイ指定値Ａｓｂ＝“０”）に設定する。この結果、バンク２に対応する図２のモード信号生成回路７１＿２から出力されるオン信号Ｓｏｎおよびスタンバイ信号Ｓｓｂはともに“０”になり、バンク２の電源モードは、電源遮断モード（電源ＯＦＦ）になる。
【０１０９】
図８は、メモリ制御回路および各メモリバンクへ供給される電源電圧の変化を示すタイミング図である。図７および図８において、同一時刻の場合には同じ参照符号を付している。
【０１１０】
図８を参照して、図１のメモリ制御回路４へは、起動タスクから退避タスクまで通常電圧が供給される（電源ＯＮ）。バンク２，３，４については、従来はメモリバンク４のように、常時、通常モード（電源ＯＮ）にしていたところを、メモリバンク２および３のようにプログラムタスクごとにアクセスしないメモリバンクは電源遮断モード（電源ＯＦＦ）にしている。さらに、各バンクがアクセスされる前に、予めスタンバイモードにしておくことによって、メモリアクセスの待ち時間が生じないようにしている。
【０１１１】
具体的に、図８の時刻ｔ２で、ソフトウェア制御によってＣＰＵ２が図２のメモリ使用領域指定部１０の制御レジスタ１１＿２，１１＿３を電源オフに設定する。この結果、メモリバンク２および３が電源オフ（電源遮断モード）に切替わる。
【０１１２】
時刻ｔ３において、ソフトウェア制御によってＣＰＵ２が図２のメモリ使用領域指定部１０の制御レジスタ１１＿２をスタンバイに設定する。この結果、メモリバンク２がスタンバイモード（Ｓ）に切り替わる。
【０１１３】
時刻ｔ４において、図５の分岐判定部４０が分岐命令を検出する。この結果、メモリバンク２が電源オン（通常モード）に切替わる。
【０１１４】
時刻ｔ６において、ソフトウェア制御によってＣＰＵ２が図２のメモリ使用領域指定部１０の制御レジスタ１１＿３をスタンバイに設定する。この結果、メモリバンク３がスタンバイモード（Ｓ）に切り替わる。
【０１１５】
時刻ｔ７においてタスク２に移行した後、メモリバンク２からメモリバンク３へ命令アクセスが跨る時刻ｔ９の前に（図８の時刻ｔ８）、図３の命令アドレス判定部２０において、メモリバンク２，３に対応する命令アドレス判定回路２６＿２，２６＿３の判定出力は両方とも“１”となる。この結果、メモリバンク２および３の電源モードは両方とも通常モード（電源ＯＮ）となる。
【０１１６】
時刻ｔ９以降、命令フェッチのためのアクセスアドレスはメモリバンク２からメモリバンク３に移る。この結果、図３の命令アドレス判定部２０のメモリバンク２に対応する判定回路２６＿２の判定結果が“０”になる。これによって、メモリバンク２はスタンバイモードになる。判定回路２６＿３の判定結果は時刻ｔ８から“１”が維持され、これによってメモリバンク３は通常モード（電源オン）が維持される。
【０１１７】
時刻ｔ１１において、ソフトウェア制御によってＣＰＵ２が図２のメモリ使用領域指定部１０の制御レジスタ１１＿２，１１＿３をスタンバイに設定する。この結果、メモリバンク２，３がスタンバイモード（Ｓ）に切り替わる。
【０１１８】
時刻ｔ１３において、図５の分岐判定部４０が分岐命令を検出する。この結果、メモリバンク２が電源オン（通常モード）に切替わる。
【０１１９】
時刻ｔ１４以降、命令フェッチのためのアクセスアドレスはメモリバンク３からメモリバンク２に移る。この結果、図３の命令アドレス判定部２０のメモリバンク３に対応する判定回路２６＿３の判定結果が“０”になり、メモリバンク２に対応する判定回路２６＿２の判定結果が“１”になる。これによって、メモリバンク３はスタンバイモードになり、メモリバンク２は通常モード（電源オン）が維持される。
【０１２０】
時刻ｔ１５において、ソフトウェア制御によってＣＰＵ２が図２のメモリ使用領域指定部１０の制御レジスタ１１＿２，１１＿３を電源オフに設定する。この結果、メモリバンク２，３が電源遮断モード（電源ＯＦＦ）に切り替わる。
【０１２１】
（効果）
以上のように、プログラムタスクごとに命令フェッチのためにアクセスしないメモリバンクの電源がオフされることにより、きめ細かくメモリバンクに供給する電源電圧を切り替えることができ、低消費電力化を図ることができる。
【０１２２】
なお、図３の命令アドレス判定部２０において、現在のアクセス先アドレスに所定のアドレス増加分を加算したアドレスが、実際にはアクセスしないメモリバンクのアドレスであることがあり得る。この場合、メモリ使用領域指定部１０において、当該アクセスしないメモリバンクに対応する制御レジスタ１１を予め“０”に設定しておくことによって、アクセスしないメモリバンクの電源を誤ってオンすることを防ぐことができる。
【０１２３】
２．データ（オペランド）アクセスに対する動作例
図９は、データ（オペランド）アクセスに対するメモリ制御回路の動作例を示すタイミング図である。データアクセスにおいても命令アクセスと同様に、プログラムタスクごとにどのメモリバンクをアクセスするかを、図２メモリ使用領域指定部１０を用いてＣＰＵ２がソフトウェア処理により指定する。図９の例では、データアクセスのために、起動タスク（ｔ２１〜ｔ２６）でバンク４が使用され、タスク１（ｔ２６〜ｔ３１）でバンク０が使用され、タスク２（ｔ３１〜ｔ３４）でバンク０，１，４が使用され、タスク４（ｔ３６〜ｔ４１）でバンク１，４が使用され、退避タスク（ｔ４１〜ｔ４３）でバンク０，４が使用される。なお、図９においてメモリアクセス命令をＭで表し、異メモリアクセス命令をＮで表す。
【０１２４】
図１、図９を参照して、タスク１ではメモリバンク０を使用するため、タスク１の実行前の時刻ｔ２５において、ＣＰＵ２は図２のメモリ使用領域指定部１０の制御レジスタ１１＿０をスタンバイに設定する。この結果、メモリバンク０の電源モードはスタンバイモード（Ｓ）となる。
【０１２５】
タスク１の実行中の時刻ｔ２７に、図４の命令デコード判定部３０のメモリアクセス命令検出部３２がメモリアクセス命令を検出すると、メモリバンク０に対応する命令デコード判定回路３６＿０の判定出力が“１”になる。この結果、メモリバンク０の電源モードが通常モード（電源ＯＮ）になる。
【０１２６】
その後、時刻ｔ２８において、図４の異メモリアクセス命令検出部３５が異メモリアクセス命令を連続して検出すると、メモリバンク０に対応する命令デコード判定回路３６＿０の判定出力が“０”になる。この結果、メモリバンク０の電源モードがスタンバイモード（Ｓ）になる。
【０１２７】
タスク２では、メモリバンク０とメモリバンク１を使用するため、タスク２の実行前の時刻ｔ３０に、ＣＰＵ２は図２のメモリ使用領域指定部１０の制御レジスタ１１＿０，１１＿１をスタンバイに設定する。この結果、メモリバンク１の電源モードはスタンバイモードになる。メモリバンク０については、時刻ｔ２９においてメモリアクセス命令が検出されたことにより、既に通常モード（電源ＯＮ）になっている。
【０１２８】
タスク２を実行中の時刻ｔ３２に、図４の命令デコード判定部３０のメモリアクセス命令検出部３２がメモリアクセス命令を検出すると、メモリバンク０，１に対応する命令デコード判定回路３６＿０，３６＿１の判定出力が“１”になる。この結果、メモリバンク０，１の電源モードがスタンバイモードから通常モード（電源ＯＮ）に切り替わる。
【０１２９】
その後、時刻ｔ３３において、図４の異メモリアクセス命令検出部３５が異メモリアクセス命令を連続して検出すると、メモリバンク０，１に対応する命令デコード判定回路３６＿０，３６＿１の判定出力が“０”になる。この結果、メモリバンク０，１の電源モードがスタンバイモード（Ｓ）になる。
【０１３０】
タスク３では、データのアクセスはないため、ＣＰＵ２は、図２のメモリ使用領域指定部１０の制御レジスタ１１＿０，１１＿１を電源オフに設定する。この結果、メモリバンク０，１の電源モードは電源遮断モード（電源ＯＦＦ）になる。メモリバンク４は命令のアクセスがあるため、図２のメモリ使用領域指定部１０の制御レジスタ１１＿４で指定した電源ＯＮのままとなる。
【０１３１】
タスク４では、メモリバンク１を使用するため、タスク１の実行前の時刻ｔ３５において、ＣＰＵ２は図２のメモリ使用領域指定部１０の制御レジスタ１１＿１をスタンバイに設定する。この結果、メモリバンク１の電源モードはスタンバイモード（Ｓ）となる。
【０１３２】
タスク１の実行中の時刻ｔ３７に、図４の命令デコード判定部３０のメモリアクセス命令検出部３２がメモリアクセス命令を検出すると、メモリバンク１に対応する命令デコード判定回路３６＿１の判定出力が“１”になる。この結果、メモリバンク１の電源モードが通常モード（電源ＯＮ）になる。
【０１３３】
その後、時刻ｔ３８において、図４の異メモリアクセス命令検出部３５が異メモリアクセス命令を連続して検出すると、メモリバンク１に対応する命令デコード判定回路３６＿１の判定出力が“０”になる。この結果、メモリバンク１の電源モードがスタンバイモード（Ｓ）になる。
【０１３４】
（効果）
以上のようにプログラムタスクごとに、命令アクセスやデータアクセスをしないメモリバンクの電源がオフされるとともに、命令デコード判定部３０によってデータアクセスの発生が予測されることにより、きめ細かくメモリバンクに供給する電源電圧を切り替えることができ、低消費電力化を図ることができる。
【０１３５】
したがって、本実施の形態によれば、メモリへの命令アクセスやデータアクセスにおいて、プログラムタスクごとにメモリバンクの電源制御を行うので、従来のメモリバンクに対する電源制御に比べて、きめ細かにメモリの電力を削減することができる。さらには、メモリアクセス前にアクセス先を予測し電源制御を行うため、メモリのアクセス性能の低下を抑えことができる。
【０１３６】
［変形例］
図２〜図７の説明において、論理“１”と論理“０”の設定を逆にしてもよい（すなわち、Ｈアクティブに設定してもＬアクティブに設定してもよい）。論理値の設定を逆にした場合には、ＯＲゲートがＡＮＤゲートに変更され、ＡＮＤゲートがＯＲゲートに変更される。
【０１３７】
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１３８】
１  マイクロプロセッサ、２  ＣＰＵ、３  不揮発性メモリ、４  メモリ制御回路、５  電源スイッチ回路、１０  メモリ使用領域指定部、１１，２１，２４，３１，４１  制御レジスタ、２０  命令アドレス判定部、３０  命令デコード判定部、４０  分岐判定部、５０  アクセス先判定部、６０  データセレクタ部、７０  モード制御部、８０  メモリアクセス判定部。
【図１】
2014203148.tif 000003
【図２】
2014203148.tif 000004
【図３】
2014203148.tif 000005
【図４】
2014203148.tif 000006
【図５】
2014203148.tif 000007
【図６】
2014203148.tif 000008
【図７】
2014203148.tif 000009
【図８】
2014203148.tif 000010
【図９】
2014203148.tif 000011