(57)【要約】【課題】電源をオフにするまでに要する時間を短縮して待機時間を長くすることにより、消費電力をより一層低減することができる演算処理装置および演算処理装置の制御方法の提供を図る。【解決手段】演算処理に使用するデータを保持するレジスタファイル２３と、プリスリープ指示Ｓppdに基づいて、空きのレジスタリードアクセスを使用して、前記レジスタファイル２３の内容を不揮発メモリ３３に退避し、前記プリスリープ指示の後に受信するスリープ指示Ｓpdに基づいて、前記レジスタファイル２３の内容を前記不揮発メモリ３３に退避する処理を実行するレジスタ退避制御部１と、を有する。【選択図】図３
2016110400.tif 000002
【特許請求の範囲】
【請求項１】
演算処理に使用するデータを保持するレジスタファイルと、
プリスリープ指示に基づいて、空きのレジスタリードアクセスを使用して、前記レジスタファイルの内容を不揮発メモリに退避し、
前記プリスリープ指示の後に受信するスリープ指示に基づいて、前記レジスタファイルの内容を前記不揮発メモリに退避する処理を実行するレジスタ退避制御部と、を有する、
ことを特徴とする演算処理装置。
【請求項２】
前記レジスタ退避制御部は、さらに、
前記スリープ指示の後に受信するスリープ解除指示に基づいて、前記不揮発メモリに退避した内容を前記レジスタファイルに書き戻す処理を実行する、
ことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記レジスタ退避制御部は、
前記不揮発メモリに退避が行われた退避情報を保持する退避情報テーブルと、
前記不揮発メモリに退避が行われた後に、前記レジスタファイルに書き換えが行われた場合、前記レジスタファイルの書き換えが行われた個所に対応する、前記退避情報テーブルにおけるフラグを書き換えるテーブル制御部と、を含む、
ことを特徴とする請求項１または請求項２に記載の演算処理装置。
【請求項４】
前記レジスタ退避制御部は、
前記退避情報テーブルにおける書き換えられたフラグに対応する、前記レジスタファイルの書き換えが行われた個所の内容を、前記スリープ指示に基づいて、前記不揮発メモリに再度退避するように制御する、
ことを特徴とする請求項３に記載の演算処理装置。
【請求項５】
前記退避情報テーブルは、
前記プリスリープ指示では、前記不揮発メモリに退避させない前記レジスタファイルの内容を規定するマスク情報を含み、
前記レジスタ退避制御部は、
前記スリープ指示に基づいて、前記マスク情報で規定された前記レジスタファイルの内容を前記不揮発メモリに退避するように制御する、
ことを特徴とする請求項３または請求項４に記載の演算処理装置。
【請求項６】
プリスリープ指示に基づいて、動作中の前記演算処理装置における空きのレジスタリードアクセスを使用して、レジスタファイルの内容を不揮発メモリに退避し、
前記プリスリープ指示の後に受信するスリープ指示に基づいて、前記不揮発メモリに退避されていない残りの前記レジスタファイルの内容を、前記不揮発メモリに退避する、
ことを特徴とする演算処理装置の制御方法。
【請求項７】
さらに、
前記スリープ指示の後に受信するスリープ解除指示に基づいて、前記不揮発メモリに退避した内容を前記レジスタファイルに書き戻す、
ことを特徴とする請求項６に記載の演算処理装置の制御方法。
【請求項８】
前記スリープ指示に基づいて前記不揮発メモリに退避する前記レジスタファイルの内容は、
前記プリスリープ指示に基づいた退避では退避が完了していない前記レジスタファイルの内容、または、
前記プリスリープ指示の後に書き換えられた前記レジスタファイルの内容である、
ことを特徴とする請求項６または請求項７に記載の演算処理装置の制御方法。
【請求項９】
さらに、
マスク信号に基づいて、前記プリスリープ指示では、前記不揮発メモリに退避させない前記レジスタファイルの内容を規定し、
前記スリープ指示に基づいて、前記マスク信号で規定された前記レジスタファイルの内容を前記不揮発メモリに退避する、
ことを特徴とする請求項６乃至請求項８のいずれか１項に記載の演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で言及する実施例は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
近年のＩｏＴ(Internet of Things)の時代においては、例えば、スマートメータを始めとして、様々な場所にセンサーなどの小型電子機器が活用されるようになる。そのような状況下において、センシングや認識などのデータ処理は、頻繁な充電や電池交換を避けるために、間欠的に行って低消費電力で行うのが好ましい。
【０００３】
このような小型電子機器において、例えば、演算処理装置(プロセッサ)による所定の処理が完了すると、その処理結果(データ)を不揮発メモリ(不揮発性メモリ)に保存し、プロセッサの電源をオフして待機(スタンバイ：スリープ)状態にすることが行われる。すなわち、電池駆動の小型電子機器において、通常時はプロセッサの電源をオフして低消費電力化を図るノーマリーオフの技術が重要となって来ている。
【０００４】
ところで、従来、消費電力を低減することのできる演算処理装置としては、様々なものが提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平０６−２５９１６３号公報
【特許文献２】特開平０９−０３４５９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述したように、例えば、プロセッサの消費電力を低減するために、スリープ(スタンバイ)時に電源をオフにする低消費電力化の手法が知られている。ここで、スリープ時には、例えば、レジスタファイル(レジスタ)の内容といったプロセッサ内の情報を、不揮発メモリに退避させておく。
【０００７】
しかしながら、不揮発メモリは書き込み速度が遅いため、電源をオフにするまでに長時間を要し、そのため、待機時間が短くなる。このように、待機時間が短くなると、低電力化の効果が低くなってしまう。
【０００８】
なお、退避時間を短縮するために、例えば、プロセッサと不揮発メモリのバンド幅を増加し、或いは、同一の半導体チップ(ＬＳＩ)に混載する方法も考えられるが、面積や製造コストの増大を招くことになる。本発明の課題は、実装面積や製造コストを増大させることなく、待機処理による低電力効果を高めることである。
【課題を解決するための手段】
【０００９】
一実施形態によれば、演算処理に使用するデータを保持するレジスタファイルと、レジスタ退避制御部と、を有する演算処理装置が提供される。
【００１０】
前記レジスタ退避制御部は、プリスリープ指示に基づいて、空きのレジスタリードアクセスを使用して、前記レジスタファイルの内容を不揮発メモリに退避し、前記プリスリープ指示の後に受信するスリープ指示に基づいて、前記レジスタファイルの内容を前記不揮発メモリに退避する処理を実行する。
【発明の効果】
【００１１】
開示の演算処理装置および演算処理装置の制御方法は、電源をオフにするまでに要する時間を短縮して待機時間を長くすることにより、消費電力をより一層低減することができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】図１は、演算処理装置の一例を模式的に示すブロック図である。
【図２】図２は、演算処理装置の一例における制御方法を概略的に説明するための図である。
【図３】図３は、本実施例に係る演算処理装置を模式的に示すブロック図である。
【図４】図４は、本実施例に係る演算処理装置の制御方法を概略的に説明するための図である。
【図５】図５は、本実施例に係る演算処理装置の制御方法の一例を説明するための図(その１)である。
【図６】図６は、本実施例に係る演算処理装置の制御方法の一例を説明するための図(その２)である。
【図７】図７は、本実施例に係る演算処理装置の制御方法による効果を説明するための図である。
【図８】図８は、演算処理装置の第１実施例の要部を示すブロック図である。
【図９】図９は、図８に示す演算処理装置におけるリードポート選択部の一例を示すブロック図である。
【図１０】図１０は、図８に示す演算処理装置におけるレジスタリード制御部の一例を示すブロック図である。
【図１１】図１１は、図８に示す演算処理装置におけるＮＶＭストア制御部の一例を示すブロック図である。
【図１２】図１２は、演算処理装置の第２実施例の要部を示すブロック図である。
【図１３】図１３は、図１２に示す演算処理装置における退避命令の挿入処理の一例を説明するためのフローチャートである。
【図１４】図１４は、図８に示す演算処理装置に適用する命令フォーマットの拡張を説明するための図である。
【図１５】図１５は、演算処理装置の第３実施例の要部を示すブロック図である。
【図１６】図１６は、図１５に示す演算処理装置における退避情報テーブルの一例を説明するための図である。
【図１７】図１７は、図１５に示す演算処理装置におけるリードポート選択部の一例を示すブロック図である。
【図１８】図１８は、図１５に示す演算処理装置におけるＮＶＭストア制御部の一例を示すブロック図である。
【発明を実施するための形態】
【００１３】
まず、本実施例の演算処理装置および演算処理装置の制御方法を詳述する前に、図１および図２を参照して、演算処理装置および演算処理装置の制御方法の一例、並びに、その問題点を説明する。
【００１４】
図１は、演算処理装置の一例を模式的に示すブロック図であり、パイプライン処理を行うＶＬＩＷプロセッサ(Very Long Instruction Word Processor)の一例を示すものである。なお、後述するように、本実施例の適用は、ＶＬＩＷプロセッサに限定されるものではなく、スカラプロセッサ等に対しても適用可能なのはいうまでもない。
【００１５】
図１に示されるように、プロセッサ(演算処理装置)５００は、命令キャッシュ２１，データキャッシュ２２，レジスタファイル(レジスタ)２３および不揮発メモリコントローラ２４を含み、５段のパイプラインステージＩＦ，ＩＤ，ＥＸ，ＭＡ，ＷＢを実行する。
【００１６】
ここで、ＩＦは、命令のフェッチ(Instruction Fetch)ステージを示し、外部の命令メモリ３１から命令キャッシュ２１に保持しておいた最初(１番目)の命令を、例えば、最初のクロック(プログラムカウンタの１クロック目)でフェッチする。
【００１７】
ＩＤは、命令のデコード(Instruction Decode)ステージを示し、２クロック目で１番目の命令をデコード(例えば、制御信号を生成)して、レジスタファイル２３をレジスタ指定子で参照する。なお、２クロック目において、ＩＦステージでは、２番目の命令をフェッチする。
【００１８】
ＥＸは、命令の実行(EXecution)ステージを示し、３クロック目で１番目の命令を実行する(例えば、数値計算やロード／ストアのデータ、或いは、アドレスの分岐先の計算等の演算を行う)。なお、３クロック目において、ＩＦステージでは、３番目の命令をフェッチし、ＩＤステージでは、２番目の命令をデコードする。
【００１９】
ＭＡは、メモリアクセス(Memory Access)ステージを示し、４クロック目で１番目の命令によるメモリアクセスを行う。例えば、データキャッシュ２２にデータを書き込み、或いは、データキャッシュ２２および外部のデータメモリ３２の両方にデータを書き込む(ライトスルー)等の処理を行う。なお、４クロック目において、ＩＦステージでは、４番目の命令をフェッチし、ＩＤステージでは、３番目の命令をデコードし、ＥＸステージでは、２番目の命令を実行する。
【００２０】
ＷＢは、データをレジスタに書き戻す(Write Back)ステージを示し、５クロック目で１番目の命令による結果を、レジスタファイル２３に書き戻す。なお、５クロック目において、ＩＦステージでは、５番目の命令をフェッチし、ＩＤステージでは、４番目の命令をデコードし、ＥＸステージでは、３番目の命令を実行し、ＭＡステージでは、３番目の命令によるメモリアクセスを行う。
【００２１】
図１では、５段のパイプラインステージＩＦ，ＩＤ，ＥＸ，ＭＡ，ＷＢの例が示されているが、これは単なる一例であり、異なるパイプライン段数、或いは、異なる処理ステージであってもよい。
【００２２】
図１において、参照符号３１は、プロセッサ５００の外部に設けられた命令メモリ、３２は、データメモリ、そして、３３は、不揮発メモリ(不揮発性メモリ)を示す。なお、不揮発メモリ(ＮＶＭ：Non-Volatile Memory)は、例えば、消費電力を低減するために、プロセッサ５００の電源をオフして待機状態としたときのデータを、不揮発メモリコントローラ２４に従って格納するためのメモリである。
【００２３】
プロセッサ５００は、例えば、計算中のデータを保持するレジスタファイル２３を持つことが一般的であり、レジスタファイル２３からデータを読み出す回路には、レジスタ数対１のセレクタが設けられている。
【００２４】
また、図１に示すようなパイプラインプロセッサ５００では、先行命令の実行結果をバイパスするためのレジスタバイパス回路を持つことも多く、その場合、レジスタファイル２３のリードポートが増加して面積が大幅に増大する傾向がある。
【００２５】
ここで、不揮発メモリ３３としては、例えば、フラッシュメモリ等が使用されるが、その不揮発メモリ３３への書き込み処理は、一般的に、ＳＲＡＭ(Static Random Access Memory)等に書き込む場合よりも長い時間を要する。
【００２６】
そのため、レジスタファイル２３の内容を不揮発メモリ３３に退避する時間が長時間となり、例えば、プロセッサ５００の電源をオフにして電力を削減できる待機時間が短縮されてしまい、消費電力削減の効果が低下する。なお、図示していないが、不揮発メモリ３３に退避するのは、レジスタファイル２３の内容だけでなく、例えば、様々な制御レジスタの内容(値)も含むのはいうまでもない。
【００２７】
図２は、演算処理装置の一例における制御方法を概略的に説明するための図であり、パワーダウン(スリープ)時のデータ退避処理を説明するためのものである。図２において、横軸は、時刻を示す。
【００２８】
図２に示されるように、例えば、動作(実行)中のプロセッサ５００に対して、時刻Ｔpdでスリープ指示(パワーダウン信号)Ｓpdを与えると、不揮発メモリコントローラ２４は、全退避期間Ｐsavを使ってレジスタファイル２３の内容を不揮発メモリ３３に退避する。
【００２９】
スリープ期間Ｐslp0の後(時刻Ｔsの後)、時刻Ｔpuでスリープ解除(パワーアップ信号)Ｓpu与えると、復帰期間Ｐretで、不揮発メモリ３３に退避しておいたデータをレジスタファイル２３に書き戻す。
【００３０】
そして、プロセッサ５００は、復帰期間Ｐretの後、動作を再開する。なお、レジスタファイル２３(制御レジスタ)の内容の退避および復帰(書き戻し)処理は、例えば、ロード／ストア命令を用いて行うことができる。
【００３１】
ここで、レジスタファイル２３の内容をフラッシュメモリ等の不揮発メモリ３３に書き込むには、スリープ期間Ｐslp0に対して長時間(退避期間Ｐsav)を要するため、プロセッサ５００をオフにして電力を削減することができるスリープ期間Ｐslp0は、短縮される。その結果、プロセッサ５００をオフにするスリープ(パワーダウン)処理による消費電力削減の効果は、低下することになってしまう。
【００３２】
なお、退避時間を短縮するために、例えば、プロセッサ５００と不揮発メモリ３３のバンド幅を増加する、或いは、同一の半導体チップに混載するといった対応も考えられるが、面積や製造コストの増大を招くことになり、好ましくない。
【００３３】
以下、演算処理装置および演算処理装置の制御方法の実施例を、添付図面を参照して詳述する。図３は、本実施例に係る演算処理装置を模式的に示すブロック図であり、パイプライン処理を行うＶＬＩＷプロセッサの一例を示すものである。
【００３４】
なお、本実施例の適用は、ＶＬＩＷプロセッサに限定されるものではなく、スカラプロセッサ(シングルスカラプロセッサ，スーパースカラプロセッサ)等に対しても幅広く適用することが可能である。
【００３５】
図３と前述した図１の比較から明らかなように、本実施例の演算処理装置(プロセッサ)６００は、図１を参照して説明したプロセッサ５００に対して、レジスタ退避制御部１を設けるようになっている。
【００３６】
ここで、レジスタ退避制御部１は、例えば、デコードステージＩＤ(デコーダ４２)から信号を受け取り、実行ステージＥＸ(実行部４３)に信号を与え、メモリアクセスステージＭＡ(メモリアクセス部４４)から信号を受け取る。
【００３７】
さらに、レジスタ退避制御部１は、レジスタファイル(レジスタ)２３および不揮発メモリコントローラ２４との間で信号を遣り取りし、不揮発メモリ３３との間におけるデータの退避および書き戻し処理を制御する。
【００３８】
なお、図示しないが、不揮発メモリ３３に退避するのは、レジスタファイル２３の内容だけでなく、例えば、様々な制御レジスタの内容(値)も含むのはいうまでもない。また、レジスタ退避制御部１の詳細は、図８以降を参照して、後に説明する。
【００３９】
図４は、本実施例に係る演算処理装置の制御方法を概略的に説明するための図であり、パワーダウン時のデータ退避処理を説明するためのものである。図４において、横軸は、時刻を示す。
【００４０】
図４と前述した図２の比較から明らかなように、本実施例に係る演算処理装置の制御方法では、時刻Ｔpdでスリープ指示(パワーダウン信号)Ｓpdを与える前に、時刻Ｔppdでプリスリープ指示(プリパワーダウン信号)Ｓppdを与える。
【００４１】
ここで、プリスリープ指示Ｓppdが与えられると、例えば、プロセッサ６００における空きのレジスタリードアクセスを使用して、レジスタファイル２３の内容を不揮発メモリ３３に退避する。
【００４２】
なお、空きのレジスタリードアクセスとしては、例えば、後に詳述するように、ＶＬＩＷプロセッサで多用される、例えば、命令スケジューリングの都合から何もしない命令(ＮＯＰ：No OPeration 命令)を使用することができる。
【００４３】
すなわち、時刻Ｔpdでスリープ指示Ｓpdが与えられる前に、時刻Ｔppdでプリスリープ指示Ｓppdが与えられると、期間Ｐsav1において、プロセッサ６００の実行中に、徐々にレジスタファイル２３から不揮発メモリ３３への退避が行われる。
【００４４】
そして、時刻Ｔpdでスリープ指示Ｓpdが与えられた後は、例えば、後に詳述する期間Ｐsav2における差分退避が行われる。この差分退避は、例えば、期間Ｐsav1では不揮発メモリ３３に退避できなかった内容(データ)、或いは、時刻Ｔpdでスリープ指示Ｓpdが与えられる前におけるプロセッサ６００の動作により、書き換えられた(上書きされた)内容等である。
【００４５】
ここで、図４における差分退避期間Ｐsav2は、通常、図２における全退避期間Ｐsavよりも十分に短いため、本実施例によれば、図２におけるスリープ期間Ｐslp0を、図４におけるスリープ期間Ｐslp1まで延ばすことができ、消費電力を低減することが可能になる。なお、プリスリープ指示Ｓppdは、例えば、新たな命令、或いは、新たな外部信号として与えることができる。
【００４６】
また、スリープ期間Ｐslp1の後の処理は、図２と同様であり、時刻Ｔpuでスリープ解除指示(パワーアップ信号)Ｓpuを与えると、復帰期間Ｐretで、不揮発メモリ３３に退避しておいたデータをレジスタファイル２３に書き戻す。
【００４７】
そして、プロセッサ６００は、復帰期間Ｐretの後、動作を再開する。なお、レジスタファイル２３(制御レジスタ)の内容の退避および復帰(書き戻し)処理は、例えば、ロード／ストア命令を用いて行うことができる。
【００４８】
このように、本実施例に係る演算処理装置の制御方法によれば、時刻Ｔpdでスリープ指示Ｓpdを与える前に、時刻Ｔppdでプリスリープ指示Ｓppdを与えて退避処理を事前に開始することで、スリープ期間Ｐslp1を長くすることができる。これにより、消費電力低減の効果をより一層発揮させることが可能になる。
【００４９】
図５および図６は、本実施例に係る演算処理装置の制御方法の一例を説明するための図であり、図５は、不揮発メモリ３３への退避処理を説明するためのものであり、図６は、退避処理を行った後の上書き処理を説明するためのものである。
【００５０】
図５に示されるように、プロセッサ(演算処理装置)６００がＶＬＩＷプロセッサの場合には、通常、ＮＯＰ命令が多用されるため、そのＮＯＰ命令を使用して、レジスタファイル(レジスタ)２３の内容を不揮発メモリ３３に退避させることができる。
【００５１】
図５の例では、プリスリープ指示Ｓppdが与えられた後、例えば、ＮＯＰ命令(ｎｏｐ)を使用してレジスタｖ０の値を不揮発メモリ３３に退避させ、退避フラグを『１』に書き換える。さらに、レジスタｖ０の値を不揮発メモリ３３に書き込むＮＶＭ書き込み時間の後、ＮＯＰ命令を使用してレジスタｖ１の値を不揮発メモリ３３に退避させ、退避フラグを『１』に書き換える。
【００５２】
なお、プリスリープ指示Ｓppdからスリープ指示Ｓpdまでの退避期間(Ｐsav1)では退避が間に合わなかったレジスタｖ13〜ｖ15の値は、スリープ指示Ｓpdの後の退避期間(Ｐsav2)において不揮発メモリ３３に退避される。また、退避フラグは、例えば、プリスリープ指示Ｓppdを与えたとき、および、レジスタｖ１〜ｖ15の値を不揮発メモリ３３から書き戻し(復帰)したとき、全て『０』に初期化する。
【００５３】
さらに、図６に示されるように、例えば、プリスリープ指示Ｓppdからスリープ指示Ｓpdまでの間におけるプロセッサ６００の動作により書き換えられたレジスタｖ１は、ダーティフラグ(dirty)を『１』に書き換える。
【００５４】
すなわち、レジスタｖ１の値は、期間Ｐsav1で不揮発メモリ３３に退避されるが、その後、スリープ指示Ｓpdが与えられる前に、プロセッサ６００の動作により上書きされた場合、そのレジスタｖ１の上書きと共に、ダーティフラグが『１』に書き換えられる。
【００５５】
そして、スリープ指示Ｓpdが与えられた後の期間(差分退避期間)Ｐsav2において、『１』のダーティフラグを参照することで、レジスタｖ１の値を、再度、不揮発メモリ３３に退避させて書き換え(上書き)を行う。
【００５６】
これにより、例えば、期間Ｐsav1では不揮発メモリ３３に退避できなかったレジスタの値、並びに、スリープ指示Ｓpdが与えられる前のプロセッサ６００の動作で書き換えられたレジスタの値を、不揮発メモリ３３に退避させることが可能になる。
【００５７】
図７は、本実施例に係る演算処理装置の制御方法による効果を説明するための図である。ここで、図７(a)は、図１および図２に示すプロセッサ５００の退避処理時における消費電力の変化を示し、図７(b)は、図３および図４に示す本実施例のプロセッサ６００の退避処理時における消費電力の変化を示す。
【００５８】
図７(b)に示されるように、本実施例によれば、プロセッサ６００の動作中において、スリープ指示Ｓpdよりも前に与えられるプリスリープ指示Ｓppdにより、レジスタファイル２３の内容が不揮発メモリ３３に事前退避(ＣＰ2')される。
【００５９】
この事前退避に要する電力ＣＰ2'は、期間Ｐsav1において、プロセッサ６００の動作中(実行時)の電力に上積みされるため、それに対応して電源の最大電力を多少増加させるのが好ましい。
【００６０】
ここで、事前退避に要する電力ＣＰ2'は、図７(a)における退避時の電力ＣＰ0の一部ＣＰ2に対応する。従って、本実施例によれば、図７(a)の退避時の電力ＣＰ0から、図７(b)の差分退避時の電力ＣＰ1と事前退避に要する電力ＣＰ2'を減算した電力ＣＰ3を低減することが可能となる。
【００６１】
なお、例えば、プリスリープ指示Ｓppdにより退避したレジスタの値が、動作中のプロセッサ６００により上書きされると、再度、差分退避時に不揮発メモリ３３に退避(書き込み)が行われるため、消費電力低減の効果は小さくなる。
【００６２】
ただし、例えば、３２個の汎用レジスタに対して、関数の終盤で退避を指示し、関数から復帰後に待機状態に入ることを想定すると、関数の終盤では、汎用レジスタへの書き込みが少ないため、事前にほとんどのレジスタについて退避が完了すると考えられる。ここで、差分退避で退避するレジスタを４つ程度とすると、待機状態に入るまでの時間は、４／３２(＝１／８)程度に短縮することができる。
【００６３】
図８は、演算処理装置の第１実施例の要部を示すブロック図であり、プロセッサ(演算処理装置)６００が自動的に退避処理を制御するものを示す。すなわち、第１実施例は、デコード結果から、レジスタファイル２３の空きリードポートを検知すると、その空きポートを使ってレジスタ(レジスタファイル２３)の内容を不揮発メモリ(不揮発性メモリ)３３に退避する。
【００６４】
図８に示されるように、レジスタ退避制御部１は、リードポート選択部１１，レジスタリード制御部１２，テーブル制御部１３，退避情報テーブル１４，ＮＶＭストア制御部１５およびレジスタ番号部１６を含む。
【００６５】
ここで、参照符号４１は動作モード部、４２はデコーダ(デコードステージＩＤ)、４３は実行部(実行ステージＥＸ)、そして、４４はメモリアクセス部(メモリアクセスステージＭＡ)を示す。
【００６６】
動作モード部４１は、事前退避モードか通常モードかを示すレジスタであり、事前退避が通知されると、事前退避モードとなる。そして、全レジスタ(レジスタファイル２３)のデータ退避後、或いは、スリープ(待機)状態からの復帰後は、通常モードに戻る。
【００６７】
レジスタ番号部１６は、退避するレジスタのインデックスを示し、事前退避モードへの移行時に初期化され、ＮＶＭストア制御部１５により更新される。退避情報テーブル１４は、レジスタファイル２３の要素ごとに退避済フラグとダーティ(dirty)フラグを持つ。
【００６８】
ここで、退避済フラグおよびダーティフラグの初期値は『０』となっており、事前退避モードにてレジスタ退避が行なわれると、退避済フラグが『１』となり、退避後にレジスタへの書き込みが行なわれるとダーティフラグが『１』となる。そして、スリープからの復帰後、或いは、事前退避モードに入ったときに『０』に初期化される。
【００６９】
デコーダ(ＩＤステージ)４２は、レジスタ書き込みインデックスw-idx、レジスタ書き込みイネーブル信号we、レジスタ読み出しインデックスr-idxおよびレジスタ読み出しイネーブル信号reの４出力と、退避情報テーブルの状態信号statusの１入力を含む。
【００７０】
なお、レジスタ書き込みインデックスw-idxおよびイネーブル信号weは、それぞれレジスタファイル２３のライトポート数分の本数がある。同様に、読み出し側に関しても、レジスタ読み出しインデックスr-idxおよびレジスタ読み出しイネーブル信号reは、それぞれレジスタファイル２３のリードポート数分の本数がある。
【００７１】
退避情報テーブル１４の状態信号としては、レジスタ退避用のリードポートを０番目と仮定すると、０番目のレジスタ読み出しインデックスr-idx[0]に対応する退避情報テーブル１４の情報を状態信号statusとして渡す。
【００７２】
レジスタファイル２３は、読み出しインデックスr-idxと読み出しイネーブル信号reからリードポート数のデータdataを読み出す。なお、パイプラインステージ間のデータのバイパスやインターロックは、レジスタファイル２３にて制御されるものとする。
【００７３】
実効部(ＥＸステージ)４３は、パイプラインプロセッサ(６００)において、一般的に演算などの処理を実行するステージである。レジスタ退避制御部１は、レジスタファイル２３から読み出した通常命令の実行に使用するデータdataを実効部４３に渡す。
【００７４】
メモリアクセス部(ＭＡステージ)４４は、パイプラインプロセッサにおいて、一般的にメモリアクセスの処理を実行するステージである。レジスタ退避制御部１は、消費電力を抑えたスリープモード(パワーダウンモード)において、メモリアクセス部４４から、レジスタ退避命令を使って、退避するデータdata，インデックスidxおよび退避イネーブル信号enbを受け取る。
【００７５】
リードポート選択部１１は、デコーダ４２から受け取ったレジスタ読み出しイネーブル信号reから、リードポートの空きポートを探す。事前退避モードの場合、空きポートｉの読み出しイネーブル信号s-re[i]に『１』を出力し、それ以外は『０』を出力する。
【００７６】
さらに、空きポートがあることを示すイネーブル信号enbに『１』を出力する。なお、空きポートがない、或いは、事前退避モードではなく通常モードの場合は、全イネーブル信号s-reおよび信号enbに『０』を出力する。
【００７７】
レジスタリード制御部１２は、選択されたリードポートについては退避用レジスタ番号を、それ以外についてはデコーダ４２から受け取ったレジスタ読み出しインデックス番号(r-idx)を、レジスタファイル２３に渡す。また、読み出しイネーブル信号reも同様である。さらに、レジスタリード制御部１２は、受け取ったデータdataから退避するデータ 選択してＮＶＭストア制御部１５に渡す。
【００７８】
ＮＶＭストア制御部１５は、事前退避モードの場合、レジスタリード制御部１２から受け取ったデータdataを不揮発メモリ３３にストア(格納)する。通常モードの場合は、レジスタ退避命令によってＭＡステージ(メモリアクセス部４４)から出力されるデータを不揮発メモリ３３に格納する。
【００７９】
ここで、事前退避モードで書き込みを行なった際には、退避情報テーブル１４に退避済フラグ(退避)を立て、レジスタ番号をインクリメントする。そして、最終のレジスタの書き込みが完了すると、動作モードを通常モードに戻す。
【００８０】
テーブル制御部１３は、デコーダ４２からレレジスタ書き込みインデックスw-idxおよびイネーブル信号weを受け取り、退避済のレジスタの場合にダーティフラグ(dirty)を『１』にする。また、ＮＶＭストア制御部１５からの通知に従って、退避済のフラグを『１』に更新する。
【００８１】
図９は、図８に示す演算処理装置におけるリードポート選択部１１の一例を示すブロック図である。図９に示されるように、リードポート選択部１１は、セレクタ110、複数のインバータ1110〜111n-1、複数のアンドゲート1121〜112n-1,114,1150〜115n-1、および、オアゲート113を含む。
【００８２】
リードポート選択部１１は、リードイネーブル信号re[i]について、re[i]＝０となる最も小さいｉについて、s-re[i]＝１とし、それ以外は『０』とする。また、ｉが存在しない場合はenb＝０とし、ｉが存在する場合はenb＝１とする。
【００８３】
ただし、動作モードが事前退避モード(pre)でない場合(通常モード：other)は、全て『０』を出力する。なお、図９に示すリードポート選択部１１は、単なる例であり、様々な変形および変更が可能である。
【００８４】
図１０は、図８に示す演算処理装置におけるレジスタリード制御部１２の一例を示すブロック図である。図１０に示されるように、レジスタリード制御部１２は、複数のセレクタ1200〜120n-1、複数のオアゲート1211〜121n-1,123、および、複数のアンドゲート1220〜122n-1を含む。
【００８５】
レジスタリード制御部１２は、リードポート選択部１１で選択されたｉ番目のポートのインデックスs-re[i]により退避用のレジスタインデックス(レジスタ番号)を選択し、それ以外は、デコーダ４２から受け取った読み出しインデックスr-idx[i]を選択する。
【００８６】
さらに、レジスタリード制御部１２は、選択結果のレジスタインデックスidx[i](idx[0]〜idx[n-1])からレジスタファイル２３のデータdata[i](data[0]〜data[n-1])を読み出す。
【００８７】
ここで、レジスタファイル２３の読み出しイネーブル信号re[i](re[0]〜re[n-1])は、オアゲート1211〜121n-1により、デコーダ４２からの読み出しイネーブル出力re[0]〜re[n-1]とリードポート選択部１１の出力s-re[0]〜s-re[n-1]の論理和を取ったものとする。
【００８８】
そして、レジスタリード制御部１２は、読み出した結果から、ｉ番目のポートのデータdataを抜き出してＮＶＭストア制御部１５に渡し、レジスタ読み出し結果data[0]〜data[n-1]を実行部４３に渡す。なお、図１０に示すレジスタリード制御部１２も、単なる例であり、様々な変形および変更が可能なのはいうまでもない。
【００８９】
図１１は、図８に示す演算処理装置におけるＮＶＭストア制御部１５の一例を示すブロック図である。図１１に示されるように、ＮＶＭストア制御部１５は、書き込み判定部１５１、アドレス計算部１５２、インデックス更新部１５３、および、複数のセレクタ１５４〜１５６を含む。
【００９０】
ＮＶＭストア制御部１５は、事前退避モード(pre)の場合、レジスタリード制御部１２から渡されるデータdataを、不揮発メモリコントローラ２４を介して不揮発メモリ３３に対して、レジスタ番号が示すアドレスaddrに書き込む。
【００９１】
ただし、リードポート選択部１１からの退避イネーブル信号enbが『０』(使用できるリードポートなし)、または、不揮発メモリコントローラ２４からのビジー信号busyが『１』(不揮発メモリ３３への書き込み中)の場合、書き込み処理をキャンセルする。
【００９２】
なお、通常モード(other)の場合、メモリアクセス部(ＭＡステージ)４４から渡されるデータdata，レジスタ番号idxおよび書き込みイネーブル信号enbに基づいて、不揮発メモリ３３にデータを書き込む。
【００９３】
また、事前退避モード(pre)でレジスタの値を不揮発メモリ３３に書き込んだ場合に、テーブル制御部１３にレジスタ番号(idx)と書き込み信号(save＝１)を通知し、退避済のフラグを『１』に更新する。
【００９４】
書き込み判定部１５１は、リードポート選択部１１からの信号enb＝０(使用できるリードポートなし)、または、不揮発メモリコントローラ２４から信号busy＝１(不揮発メモリ３３の書き込み中)の信号が通知されている場合は、出力信号enb＝０を出力する。また、それ以外の場合は、出力信号enb＝１を出力する。
【００９５】
アドレス計算部１５２は、レジスタ番号部１６からのレジスタ番号idxに基づいて、書き込み先の不揮発メモリ３３のアドレスaddrを計算してセレクタ１５６に出力する。ここで、例えば、レジスタのデータサイズが一定の場合には、レジスタ番号にバイト数を乗算(実際はシフト)して求めることができる。インデックス更新部１５３は、レジスタ番号部１６からのレジスタ番号idxの値を『１』だけインクリメントする。
【００９６】
まず、スリープ(待機，スタンバイ)時の動作について、説明する。スリープが通知された場合、基本的に通常の命令を用いて、レジスタファイル２３(制御レジスタ)の内容を、不揮発メモリ３３に退避する。ただし、レジスタファイル２３の内容を退避する際、退避情報テーブル１４を参照し、退避済でダーティ(dirty)フラグが『０』の場合に命令をキャンセルする機能を追加するのが好ましい。
【００９７】
次に、スリープからの復帰時の動作について、説明する。スリープからの復帰も、通常の命令を用いて、不揮発メモリ３３からレジスタファイル２３にデータを復帰させる。なお、不揮発メモリ３３のデータを復帰する(書き戻す)手法としては、特別な拡張機能は不要である。そして、レジスタ番号部１６のレジスタ番号、および、退避情報テーブル１４のデータを初期化する。
【００９８】
図１２は、演算処理装置の第２実施例の要部を示すブロック図であり、プログラム(アセンブリプログラム)に退避命令を挿入するものを示す。図１２と前述した図８の比較から明らかなように、第２実施例では、第１実施例におけるリードポート選択部１１が省略されている。なお、図１２では、プリスリープ指示Ｓppd(事前退避)およびスリープ指示Ｓpdが、命令により行われる場合を想定している。
【００９９】
第２実施例の演算処理装置において、レジスタ退避制御部１は、プログラムを解析し、事前退避命令(Ｓppd)とスリープ命令(Ｓpd)の間にレジスタ退避命令を挿入する。その際、不揮発メモリ３３のレイテンシを考慮して、適切な間隔でレジスタ退避命令の挿入を行うようになっている。
【０１００】
図１３は、図１２に示す演算処理装置における退避命令の挿入処理の一例を説明するためのフローチャートであり、アセンブリプログラムにおいて、事前退避命令とスリープ命令の間にレジスタ退避命令を挿入する処理を説明するためのものである。
【０１０１】
ここで、図１３に示すフローチャートにおいて、入力はアセンブリプログラムとし、また、出力もアセンブリプログラムとする。なお、制約条件として、事前退避命令(プリスリープ指示Ｓppdに対応する命令)とスリープ命令(スリープ指示Ｓpdに対応する命令)は、同一基本ブロック内に存在することを想定する。また、基本ブロックとは、フローチャートの中で、分岐や合流がないストレートに実行されるコード部分を指す。
【０１０２】
図１３に示されるように、アセンブリプログラムにおける退避命令の挿入処理が開始すると、ステップＳＴ１において、字句の解析を行った後、ステップＳＴ２に進んで、コンパイラの中間表現処理を行う。
【０１０３】
さらに、ステップＳＴ３に進んで、未処理の基本ブロックが存在するか否かを判定する。ステップＳＴ３において、未処理の基本ブロックが存在しないと判定すると、ステップＳＴ４に進んで、アセンブリコードを出力し、アセンブリプログラムに戻る。
【０１０４】
一方、ステップＳＴ３において、未処理の基本ブロックが存在すると判定すると、ステップＳＴ５に進んで、事前退避命令が存在するか否かを判定する。ステップＳＴ５において、事前退避命令が存在すると判定すると、ステップＳＴ６に進んで、Inst＝事前退避命令の次の命令とし、さらに、Ｌ＝０として、ステップＳＴ７に進み、Inst＝スリープ命令が成立するか否かを判定する。
【０１０５】
ここで、Ｌは、例えば、不揮発メモリ３３の書き込み時間(レイテンシ)によるウェイト(待ち)を考慮して、本来のプログラムに待ちを生じることなく、不揮発メモリ３３への書き込み(退避)を行うみために導入している。
【０１０６】
ステップＳＴ７において、Inst＝スリープ命令が成立しないと判定すると、ステップＳＴ８に進んで、Inst命令に空リードポートが存在し、かつ、Ｌ≦０が成立するか否かを判定する。
【０１０７】
ステップＳＴ５において、事前退避命令が存在しないと判定した場合、並びに、ステップＳＴ７において、Inst＝スリープ命令が成立すると判定した場合には、ステップＳＴ３に戻り、上述した処理を繰り返す。
【０１０８】
ステップＳＴ８において、Inst命令に空リードポートが存在し、かつ、Ｌ≦０が成立すると判定すると、ステップＳＴ９に進む。ここで、ステップＳＴ８における空リードポートの存在の判定は、例えば、シングルスカラプロセッサの場合、その命令がレジスタファイル２３の全てのリードポートを使用するかどうかにより判定することができる。
【０１０９】
また、例えば、ＶＬＩＷプロセッサの場合、命令スケジューリングの都合から何もしない命令(ＮＯＰ：No OPeration)が挿入されることが多い。そこで、ステップＳＴ８における空リードポートの存在の判定は、例えば、ＶＬＩＷプロセッサの場合、ＮＯＰ命令が存在する場合に、空きリードポートが存在すると判定することができる。
【０１１０】
そして、ステップＳＴ９において、事前退避命令を挿入し、Ｌ＝不揮発メモリ３３のレイテンシとして、ステップＳＴ１０に進む。ここで、ステップＳＴ９における事前退避命令の挿入は、例えば、シングルスカラプロセッサの場合、実際に命令を挿入することが困難なため、例えば、命令のフォーマットを拡張する。
【０１１１】
すなわち、シングルスカラプロセッサの場合には、例えば、命令の実行と同時にレジスタの値を退避するか否かを示すモードビット(退避)を命令に追加し、通常時は、退避モードビットを『０』とし、退避命令を挿入する場合は、退避モードビットを『１』とする。
【０１１２】
また、例えば、ＶＬＩＷプロセッサの場合には、例えば、ステップＳＴ８で見つかったＮＯＰ命令を退避命令に置き換えることで、ステップＳＴ９における事前退避命令の挿入を実現することができる。
【０１１３】
一方、ステップＳＴ８において、Inst命令に空リードポートが存在する、および、Ｌ≦０の少なくとも一方が成立しないと判定すると、ステップＳＴ１１に進んで、Ｌ＝Ｌ−１とした後、ステップＳＴ１０に進む。ステップＳＴ１０では、Inst＝次の命令とし、ステップＳＴ７に戻って、上述した処理を繰り返す。
【０１１４】
そして、事前退避命令とスリープ命令が存在する基本ブロックについて、事前退避命令の次の命令からスリープ命令の前の命令まで、不揮発メモリ３３への書き込みレイテンシの間隔を空けて、退避命令を挿入する。
【０１１５】
図１４は、図８に示す演算処理装置に適用する命令フォーマットの拡張を説明するための図であり、図１４(a)は、拡張前の命令フォーマットを示し、図１４(b)は、拡張後の命令フォーマットを示す。図１４(a)と図１４(b)の比較から明らかなように、拡張後の命令フォーマットには、例えば、１ビットのモードビット(フラグ)ｓｖが追加されている。
【０１１６】
なお、全ての命令についてモードビットｓｖを追加すると、命令空間が逼迫する虞があるため、命令空間に余裕がない場合は、リードポートに空きがある一部の命令についてのみ命令フォーマットを拡張するようにしてもよい。
【０１１７】
また、モードビットｓｖの追加を一部の命令に限定する場合、例えば、前述したステップＳＴ８における空きリードポートの判定時には、退避モードビットを持つ命令か否かで判定することになる。
【０１１８】
次に、事前退避命令の仕様としては、オペランドをとらない命令とし、プロセッサには、図８〜図１１を参照して説明した第１実施例と同様に、レジスタ番号を格納する専用レジスタ(レジスタ番号部)１６を持たせる。なお、レジスタ番号部１６の動作は、前述した実施例１と同様である。
【０１１９】
そして、レジスタ番号部１６でインデックスされるレジスタファイル２３のデータは、レジスタファイル２３から読み出して不揮発メモリ３３に格納し、レジスタ番号をインクリメントする。
【０１２０】
ここで、例えば、シングルスカラプロセッサの場合、レジスタファイル２３のリードポートに空きがある命令については、使用しないポートを固定しておく。そのため、退避命令は、固定された空きポートを利用することになる。
【０１２１】
また、ＶＬＩＷプロセッサの場合、各スロットに対してリードポートが割り当てられるため、退避命令を挿入したスロットに割り当てられているリードポートを利用することになる。
【０１２２】
図１５は、演算処理装置の第３実施例の要部を示すブロック図であり、前述した第１実施例に対してマスク機能を追加したものに相当する。図１５と前述した図８の比較から明らかなように、本第３実施例では、第１実施例の退避情報テーブル１４にマスクを行う(事前退避を行なわない)レジスタ情報を格納し、例えば、マスクが『１』のレジスタについては、事前退避を行なわないようにする。
【０１２３】
すなわち、退避情報テーブル１４に格納されたマスク情報(マスク信号，マスク値ｍ)は、テーブル制御部１３を介して、リードポート選択部１１およびＮＶＭストア制御部１５に入力されている。
【０１２４】
ここで、マスク値は、専用の命令(例えば、set pre save mask 即値)により、退避情報テーブル１４に設定する。なお、即値は、各ビットが各レジスタに対応する。また、レジスタ数が多く、命令長が超過する場合には、複数命令に分割することもできる。
【０１２５】
図１６は、図１５に示す演算処理装置における退避情報テーブルの一例を説明するための図である。図１６に示されるように、第３実施例の演算処理装置において、退避情報テーブル１４には、例えば、マスク値ｍのフラグが設けられている。
【０１２６】
そして、例えば、事前退避を行なわない方が好ましいレジスタｖ１に対しては、マスクビットを『１』に設定する。なお、事前退避を行うレジスタｖ０に対しては、マスクビットを『０』に設定し、上述した事前退避処理が行われるようにする。
【０１２７】
ここで、退避情報テーブル１４におけるマスクビット(ｍ)を『１』に設定して事前退避を行なわないレジスタ(ｖ１)としては、例えば、プロセッサ６００の動作により頻繁に書き換えが行われるものが選ばれる。
【０１２８】
図１７は、図１５に示す演算処理装置におけるリードポート選択部の一例を示すブロック図であり、図１８は、図１５に示す演算処理装置におけるＮＶＭストア制御部の一例を示すブロック図である。レジスタ退避制御部１については、図８〜図１１を参照して説明した第１実施例と相違する個所のみ説明する。
【０１２９】
図１７と前述した図９の比較から明らかなように、第３実施例におけるリードポート選択部１１は、第１実施例のものに対して、インバータ116およびアンドゲート117が追加されている。
【０１３０】
インバータ116は、マスク値ｍを反転して、アンドゲート117の一方の入力に供給し、アンドゲート117は、他方の入力に与えられたセレクタ110の出力と、反転されたマスク値の論理積を取って、アンドゲート114，1150〜115n-1の一方の入力に供給する。
【０１３１】
これにより、動作モード部４１による動作モードが事前退避モードであっても、マスク値ｍが『１』の場合は、イネーブル信号enbおよび読み出しイネーブル信号s-reが『０』となる。
【０１３２】
また、図１８と前述した図１１の比較から明らかなように、第３実施例におけるＮＶＭストア制御部１５は、前述したテーブル制御部１３から書き込み判定部１５１に対してマスク値(マスク情報，マスク信号)ｍが入力されるようになっている。
【０１３３】
第３実施例において、書き込み判定部１５１には、リードポート選択部からのイネーブル信号enb、不揮発メモリコントローラ２４からのビジー信号(busy)およびテーブル制御部１３からのマスク値ｍが入力されている。
【０１３４】
書き込み判定部１５１は、イネーブル信号enbが『０』(使用できるリードポートなし)、ビジー信号busyが『１』(書き込み中でビジー状態)、または、マスク値ｍが『１』(マスクする)のとき、出力信号(enb)を『０』とし、そうでなければ『１』とする。ただし、ｍ＝１の場合、レジスタ番号を更新するために、レジスタ番号のイネーブル信号(enb)としては、書き込み判定(enb)とマスク値ｍの信号の論理和を取る。
【０１３５】
以上により、マスク値ｍが『１』となっているレジスタについては、プリスリープ指示Ｓppdを受け取っても不揮発メモリ３３への事前退避を行わず、スリープ指示Ｓpdを受け取ってから不揮発メモリ３３への退避を開始する。
【０１３６】
以上において、マスクするレジスタ(事前退避を行わないレジスタ)は、例えば、プロセッサ６００の動作により頻繁に書き換えが行われるレジスタが設定されるのが好ましい。すなわち、プリスリープ指示Ｓppdが与えられてからスリープ指示Ｓpdが与えられるまでのプロセッサ６００の動作により書き換えられる可能性が高いレジスタをマスクすることで、スリープ指示Ｓpdの後に生じる書き換え(上書き)を削減することができる。
【０１３７】
これにより、プリスリープ指示Ｓppdによる不揮発メモリ３３への事前退避では、書き換えが行われる可能性の低いレジスタ値を退避させて、書き換えの数を削減することができ、結果として、より一層の低消費電力化が期待できる。
【０１３８】
ここで、図１５〜図１８を参照して説明した第３実施例の演算処理装置は、図８〜図１１の第１実施例に対してマスク処理を適用するものであるが、図１２〜図１４の第２実施例に対してもマスク処理を適用することができる。
【０１３９】
この場合、例えば、退避情報テーブル１４にマスク情報(ｍ)が格納され、そのマスク値ｍは、テーブル制御部１３を介してレジスタリード制御部１２およびＮＶＭストア制御部１５に入力される。
【０１４０】
そして、例えば、マスク値ｍが『１』となっているレジスタについては、プリスリープ指示Ｓppdを受け取っても不揮発メモリ３３への事前退避を行わず、スリープ指示Ｓpdを受け取ってから不揮発メモリ３３への退避を開始するように制御する。
【０１４１】
なお、上述した各実施例は、単なる例であり、その構成および信号の論理等は、様々な変更および変形が可能なのはいうまでもない。
【０１４２】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものであり、特に記載された例や条件は発明の範囲を制限することを意図するものではない。また、明細書のそのような記載は、発明の利点および欠点を示すものでもない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【０１４３】
以上の実施例を含む実施形態に関し、さらに、以下の付記を開示する。
（付記１）
演算処理に使用するデータを保持するレジスタファイルと、
プリスリープ指示に基づいて、空きのレジスタリードアクセスを使用して、前記レジスタファイルの内容を不揮発メモリに退避し、
前記プリスリープ指示の後に受信するスリープ指示に基づいて、前記レジスタファイルの内容を前記不揮発メモリに退避する処理を実行するレジスタ退避制御部と、を有する、
ことを特徴とする演算処理装置。
【０１４４】
（付記２）
前記レジスタ退避制御部は、さらに、
前記スリープ指示の後に受信するスリープ解除指示に基づいて、前記不揮発メモリに退避した内容を前記レジスタファイルに書き戻す処理を実行する、
ことを特徴とする付記１に記載の演算処理装置。
【０１４５】
（付記３）
さらに、
前記レジスタファイルの内容を前記不揮発メモリに退避すると共に、前記不揮発メモリに退避した内容を前記レジスタファイルに書き戻すのを制御する不揮発メモリコントローラを有し、
前記レジスタ退避制御部は、前記不揮発メモリコントローラを介して制御を行う、
ことを特徴とする付記１または付記２に記載の演算処理装置。
【０１４６】
（付記４）
前記プリスリープ指示は、命令または外部信号により行われる、
ことを特徴とする付記１乃至付記３のいずれか１項に記載の演算処理装置。
【０１４７】
（付記５）
前記レジスタ退避制御部は、
前記プリスリープ指示に基づいた退避では退避が完了していない前記レジスタファイルの内容を、前記スリープ指示に基づいて、前記不揮発メモリに退避するように制御する、
ことを特徴とする付記１乃至付記４のいずれか１項に記載の演算処理装置。
【０１４８】
（付記６）
前記レジスタ退避制御部は、
前記不揮発メモリに退避が行われた退避情報を保持する退避情報テーブルと、
前記不揮発メモリに退避が行われた後に、前記レジスタファイルに書き換えが行われた場合、前記レジスタファイルの書き換えが行われた個所に対応する、前記退避情報テーブルにおけるフラグを書き換えるテーブル制御部と、を含む、
ことを特徴とする付記１乃至付記４のいずれか１項に記載の演算処理装置。
【０１４９】
（付記７）
前記レジスタ退避制御部は、
前記退避情報テーブルにおける書き換えられたフラグに対応する、前記レジスタファイルの書き換えが行われた個所の内容を、前記スリープ指示に基づいて、前記不揮発メモリに再度退避するように制御する、
ことを特徴とする付記６に記載の演算処理装置。
【０１５０】
（付記８）
前記退避情報テーブルは、
前記プリスリープ指示では、前記不揮発メモリに退避させない前記レジスタファイルの内容を規定するマスク情報を含み、
前記レジスタ退避制御部は、
前記スリープ指示に基づいて、前記マスク情報で規定された前記レジスタファイルの内容を前記不揮発メモリに退避するように制御する、
ことを特徴とする付記６または付記７に記載の演算処理装置。
【０１５１】
（付記９）
前記プリスリープ指示に基づいて前記レジスタファイルの内容を前記不揮発メモリに退避するのは、動作中の前記演算処理装置におけるＮＯＰ命令を使用して行う、
ことを特徴とする付記１乃至付記８のいずれか１項に記載の演算処理装置。
【０１５２】
（付記１０）
前記演算処理装置は、
前記スリープ指示に基づいて、前記レジスタファイルの内容を前記不揮発メモリに退避した後、前記スリープ解除指示を受け取るまで、消費電力を抑えたスリープモードになる、
ことを特徴とする付記１乃至付記９のいずれか１項に記載の演算処理装置。
【０１５３】
（付記１１）
プリスリープ指示に基づいて、動作中の前記演算処理装置における空きのレジスタリードアクセスを使用して、レジスタファイルの内容を不揮発メモリに退避し、
前記プリスリープ指示の後に受信するスリープ指示に基づいて、前記不揮発メモリに退避されていない残りの前記レジスタファイルの内容を、前記不揮発メモリに退避する、
ことを特徴とする演算処理装置の制御方法。
【０１５４】
（付記１２）
さらに、
前記スリープ指示の後に受信するスリープ解除指示に基づいて、前記不揮発メモリに退避した内容を前記レジスタファイルに書き戻す、
ことを特徴とする付記１１に記載の演算処理装置の制御方法。
【０１５５】
（付記１３）
前記スリープ指示に基づいて前記不揮発メモリに退避する前記レジスタファイルの内容は、
前記プリスリープ指示に基づいた退避では退避が完了していない前記レジスタファイルの内容、または、
前記プリスリープ指示の後に書き換えられた前記レジスタファイルの内容である、
ことを特徴とする付記１１または付記１２に記載の演算処理装置の制御方法。
【０１５６】
（付記１４）
さらに、
マスク信号に基づいて、前記プリスリープ指示では、前記不揮発メモリに退避させない前記レジスタファイルの内容を規定し、
前記スリープ指示に基づいて、前記マスク信号で規定された前記レジスタファイルの内容を前記不揮発メモリに退避する、
ことを特徴とする付記１１乃至付記１３のいずれか１項に記載の演算処理装置の制御方法。
【０１５７】
（付記１５）
前記プリスリープ指示に基づいて前記レジスタファイルの内容を前記不揮発メモリに退避するのは、動作中の前記演算処理装置におけるＮＯＰ命令を使用して行う、
ことを特徴とする付記１１乃至付記１４のいずれか１項に記載の演算処理装置の制御方法。
【０１５８】
（付記１６）
前記演算処理装置は、
前記スリープ指示に基づいて、前記レジスタファイルの内容を前記不揮発メモリに退避した後、前記スリープ解除指示を受け取るまで、消費電力を抑えたスリープモードになる、
ことを特徴とする付記１１乃至付記１５のいずれか１項に記載の演算処理装置の制御方法。
【符号の説明】
【０１５９】
１    レジスタ退避制御部
１１    リードポート選択部
１２    レジスタリード制御部
１３    テーブル制御部
１４    退避情報テーブル
１５    ＮＶＭストア制御部
１６    レジスタ番号部
２１    命令キャッシュ
２２    データキャッシュ
２３    レジスタファイル(レジスタ)
２４    不揮発メモリコントローラ
３１    命令メモリ
３２    データメモリ
３３    不揮発メモリ
４１    動作モード部
４２    デコーダ(デコードステージＩＤ，ＩＤステージ)
４３    実行部(実行ステージＥＸ，ＥＸステージ)
４４    メモリアクセス部(メモリアクセスステージＭＡ，ＭＡステージ)
５００，６００    演算処理装置(プロセッサ)
Ｓpd    スリープ指示(パワーダウン信号)
Ｓppd    プリスリープ指示(プリパワーダウン信号)
Ｓpu    スリープ解除(パワーアップ信号)
【図１】
2016110400.tif 000003
【図２】
2016110400.tif 000004
【図３】
2016110400.tif 000005
【図４】
2016110400.tif 000006
【図５】
2016110400.tif 000007
【図６】
2016110400.tif 000008
【図７】
2016110400.tif 000009
【図８】
2016110400.tif 000010
【図９】
2016110400.tif 000011
【図１０】
2016110400.tif 000012
【図１１】
2016110400.tif 000013
【図１２】
2016110400.tif 000014
【図１３】
2016110400.tif 000015
【図１４】
2016110400.tif 000016
【図１５】
2016110400.tif 000017
【図１６】
2016110400.tif 000018
【図１７】
2016110400.tif 000019
【図１８】
2016110400.tif 000020