(57)【特許請求の範囲】
【請求項１】
キャッシュデータの記憶に用いられる不揮発性メモリ部と、
上記不揮発性メモリ部に対してのキャッシュデータの読み出し及び書き込みを制御するとともに、電力供給遮断の準備として、待機状態データを生成して上記不揮発性メモリ部に記憶する待機準備処理を行い、また電力供給再開の際に、上記待機状態データを用いて上記不揮発性メモリ部に記憶されたキャッシュデータの復帰処理を行うキャッシュコントローラと、
を備えた不揮発性キャッシュメモリ。
【請求項２】
上記キャッシュコントローラは、
上記待機準備処理として、少なくとも上記不揮発性メモリ部上に記憶されているキャッシュデータについてのエラー訂正を可能とするエラー訂正データを含む上記待機状態データを生成して上記不揮発性メモリ部上に記憶させ、
上記復帰処理として、上記待機状態データにおける上記エラー訂正データを用いて上記不揮発性メモリ部に記憶されたキャッシュデータのエラー訂正処理を行う請求項１に記載の不揮発性キャッシュメモリ。
【請求項３】
上記不揮発性メモリ部には、キャッシュデータ記憶に用いられるキャッシュラインが複数設定されており、
上記キャッシュコントローラは、
上記待機準備処理として、少なくとも一部のキャッシュラインについて、そのキャッシュラインに記憶されているキャッシュデータのエラー訂正可能なエラー訂正データを含む待機状態データを生成し、該待機状態データを他のキャッシュラインに記憶させ、かつ当該他のキャッシュラインを、待機状態データを記憶したキャッシュラインであることを示す状態とする処理を行う請求項１に記載の不揮発性キャッシュメモリ。
【請求項４】
上記エラー訂正データを含む待機状態データには、さらに当該エラー訂正データでエラー訂正を行うキャッシュデータが記憶されたキャッシュラインのアドレス情報が含まれている請求項３に記載の不揮発性キャッシュメモリ。
【請求項５】
上記キャッシュコントローラは、上記待機状態データを、その待機状態データが対象とするキャッシュデータを記憶したキャッシュラインに対応する領域に記憶させる請求項３に記載の不揮発性キャッシュメモリ。
【請求項６】
上記不揮発性メモリ部には、キャッシュデータ記憶領域及び待機状態データ領域を有するキャッシュラインが複数設定されており、
上記キャッシュコントローラは、
上記待機準備処理として、少なくとも一部のキャッシュラインについて、そのキャッシュラインに記憶されているキャッシュデータのエラー訂正可能なエラー訂正データを含む待機状態データを生成し、該待機状態データを上記待機状態データ領域に記憶させ、かつ当該キャッシュラインを、待機状態データを記憶したキャッシュラインであることを示す状態とする処理を行う請求項１に記載の不揮発性キャッシュメモリ。
【請求項７】
上記キャッシュコントローラは、
上記待機準備処理として、少なくとも上記不揮発性メモリ部上に記憶されているキャッシュデータについてのエラー検出を可能とするエラー検出データを含む上記待機状態データを生成して上記不揮発性メモリ部上に記憶させ、
上記復帰処理として、上記待機状態データにおける上記エラー検出データを用いて上記不揮発性メモリ部に記憶されたキャッシュデータのエラー検出処理を行う請求項１に記載の不揮発性キャッシュメモリ。
【請求項８】
上記キャッシュコントローラは、
上記エラー検出処理においてエラーを検出したキャッシュデータを無効化する処理を行う請求項７に記載の不揮発性キャッシュメモリ。
【請求項９】
上記キャッシュコントローラは、電力供給を遮断する待機状態に移行することを要求する待機信号を受け取ることで、上記待機準備処理を行う請求項１に記載の不揮発性キャッシュメモリ。
【請求項１０】
キャッシュデータの記憶に用いられる不揮発性メモリ部を有する不揮発性キャッシュメモリの処理方法として、
電力供給遮断の準備として、待機状態データを生成して上記不揮発性メモリ部上に記憶する待機準備処理を行い、
電力供給再開の際に、上記待機状態データを用いて上記不揮発性メモリ部に記憶されたキャッシュデータの復帰処理を行う不揮発性キャッシュメモリの処理方法。
【請求項１１】
プロセッサと、
不揮発性キャッシュメモリと、
電力制御回路と、
メインメモリとを有し、
上記電力制御回路は、上記プロセッサ及び上記不揮発性キャッシュメモリへの電力供給を制御し、
上記プロセッサは、上記不揮発性キャッシュメモリを介しての上記メインメモリに対するデータの書き込み又は読み出しを実行するとともに、上記電力制御回路が電力供給を遮断する際に、上記不揮発性キャッシュメモリに対して、待機状態に移行することを要求する待機信号を伝達し、また上記電力制御回路が電力供給を再開する際に、上記不揮発性キャッシュメモリに対して電力供給を再開して動作状態に移行することを要求する復帰信号を伝達し、
上記不揮発性キャッシュメモリは、
キャッシュデータの記憶に用いられる不揮発性メモリ部と、
上記不揮発性メモリ部に対してのキャッシュデータの読み出し及び書き込みを制御するとともに、上記待機信号を受け取ることで、待機状態データを生成して上記不揮発性メモリ部上に記憶する待機準備処理を行い、また上記復帰信号を受け取ることで、上記待機状態データを用いて上記不揮発性メモリ部に記憶されたキャッシュデータの復帰処理を行うキャッシュコントローラと、を備えている、
コンピュータシステム。
【請求項１２】
上記不揮発性キャッシュメモリの上記キャッシュコントローラは、
上記待機準備処理を完了することに応じて、上記プロセッサに対して、待機状態への移行が完了したことを通知する待機完了信号を伝達し、
また上記復帰処理を完了することに応じて、上記プロセッサに対して、動作状態への移行が完了したことを通知する復帰完了信号を伝達する請求項１１に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、不揮発性キャッシュメモリ、不揮発性キャッシュメモリの処理方法、及び不揮発性キャッシュメモリを有するコンピュータシステムに関する。
【先行技術文献】
【特許文献】
【０００２】
【特許文献１】特開２０１１−１５０６５３
【特許文献２】国際公開第２００９−０２８２９８号パンフレット
【背景技術】
【０００３】
コンピュータシステムにおいては、プロセッサがデータや命令などの情報をメインメモリから取得したり、メインメモリ上の情報を更新したりする。この時、メインメモリのレイテンシ等のアクセス性能がプロセッサの処理性能よりも劣るために、この性能差が全体性能に対するボトルネックとなる。
【０００４】
キャッシュメモリはこのボトルネックを解消するために、記憶階層に新たに設けられるメモリであり、プロセッサとメインメモリとの間に構成される。
通常は、キャッシュメモリには、メインメモリよりも高速なＳＲＡＭ（static random access memory）が用いられる。
プロセッサが、メインメモリからデータを取得したり、メインメモリ上の情報を更新したりするとき、キャッシュメモリにも同じデータが格納される。次に同じデータを取得或いは更新する際には、メインメモリの代わりに高速なキャッシュメモリが入出力を行う。このようにすることで、メインメモリとプロセッサ間の性能差を隠蔽化し、高速なコンピュータシステムを構築する。
【０００５】
ところで、コンピュータシステムを携帯機器へ応用するために、省電力制御技術の必要性が高まっている。最新の高性能プロセッサで使用されている半導体回路技術では、消費電力に対するリーク電流の比率が大きくなっている。そのため、処理すべき命令がない場合等に、プロセッサへの電力供給を遮断し、リーク電流が発生しないようにする、パワーゲーティングと呼ばれる技術が用いられている。
その一方で、キャッシュメモリに用いられるＳＲＡＭは揮発性メモリであり、電力供給が遮断されると格納しているデータが失われてしまう。そこで、上記特許文献１には、キャッシュメモリの構成部分うち、データの入出力等を制御するコントローラのみの電力供給を遮断し、データを格納しているＳＲＡＭセルアレイの電力供給は維持することによって、キャッシュメモリで消費される電力を低減する方法が開示されている。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、ＳＲＡＭセルアレイ自体にもリーク電流が存在するために、上記の方法では、十分な省電力化が実現できない。そこで、キャッシュメモリを不揮発化し、プロセッサへの電力供給が遮断された際には、キャッシュメモリ全体も電力供給を遮断する構成が考えられる。
このような不揮発性キャッシュメモリに用いられる候補として、強磁性体を用いたＭＲＡＭ（Magnetic random access memory）、相変化材料を用いたＰＣＲＡＭ（Phase change random access memory）、可変抵抗特性を持った材料を用いたＲｅＲＡＭ（Resistive random access memory）などが注目されている。
さらに、通常動作時にはＳＲＡＭとして動作するが、電力供給が遮断される際に不揮発性素子にデータを格納することで不揮発化するメモリが上記特許文献２に開示されている。
【０００７】
不揮発性メモリにおいては、格納されたデータは電力供給が遮断された場合においても、原則として保持されたままであるが、保持される時間には限度がある。例えば、ＭＲＡＭにおいては、熱擾乱によって書き込まれたデータが失われてしまうことがあり得る。このデータが失われるまでの時間をリテンション時間と呼ぶ。
熱擾乱に対する耐性を高めることでリテンション時間を大きくすることは可能である。しかしながら、リテンション時間は、データを書き込む際に消費される電力や書き込みに要する時間に依存するということを考慮しなければならない。即ち、リテンション時間を長くするためには、大きな電力で書き込みを行わなければならない、或いは、書き込みに長い時間を要する、ということが起きる。これは省電力化や高速化とは相反するものである。そのために、不揮発性キャッシュメモリを用いる際には、リテンション時間を慎重に設計する必要がある。
【０００８】
不揮発性キャッシュメモリが、電力供給がなされる動作状態にあるとき、データの入出力は頻繁に行われる。そのため、不揮発性キャッシュメモリへの入出力は高速に行わなければならない。また、省電力化のためには、少ないエネルギーで書き込みを行わなければならない。このような要求により、不揮発性キャッシュメモリのリテンション時間は短く設計することが望ましい。
一方で、不揮発性キャッシュメモリが、電力供給が遮断される待機状態にあるとき、不揮発性キャッシュメモリ内のデータは保持されなければならない。ところが、不揮発性キャッシュメモリのリテンション時間が短く設計されるために、待機期間中にデータが失われる虞がある。これは、メインメモリと不揮発性キャッシュメモリとの間でデータの一貫性が失われることを意味し、コンピュータシステムの信頼性を低下させる。
【０００９】
そこで本開示では、不揮発性キャッシュメモリであって、電力供給が遮断される待機状態にあるときのデータ信頼性を向上させることを目的とする。
【課題を解決するための手段】
【００１０】
本開示の不揮発性キャッシュメモリは、キャッシュデータの記憶に用いられる不揮発性メモリ部と、上記不揮発性メモリ部に対してのキャッシュデータの読み出し及び書き込みを制御するとともに、電力供給遮断の準備として、待機状態データを生成して上記不揮発性メモリ部に記憶する待機準備処理を行い、また電力供給再開の際に、上記待機状態データを用いて上記不揮発性メモリ部に記憶されたキャッシュデータの復帰処理を行うキャッシュコントローラとを備える。
【００１１】
また本開示の不揮発性キャッシュメモリの処理方法は、キャッシュデータの記憶に用いられる不揮発性メモリ部を有する不揮発性キャッシュメモリの処理方法として、電力供給遮断の準備として、待機状態データを生成して上記不揮発性メモリ部上に記憶する待機準備処理を行い、電力供給再開の際に、上記待機状態データを用いて上記不揮発性メモリ部に記憶されたキャッシュデータの復帰処理を行う処理方法である。
【００１２】
本開示のコンピュータシステムは、プロセッサと、不揮発性キャッシュメモリと、電力制御回路と、メインメモリとを有する。そして上記電力制御回路は、上記プロセッサ及び上記不揮発性キャッシュメモリへの電力供給を制御する。
上記プロセッサは、上記不揮発性キャッシュメモリを介しての上記メインメモリに対するデータの書き込み又は読み出しを実行するとともに、上記電力制御回路が電力供給を遮断する際に、上記不揮発性キャッシュメモリに対して、待機状態に移行することを要求する待機信号を伝達し、また上記電力制御回路が電力供給を再開する際に、上記不揮発性キャッシュメモリに対して電力供給を再開して動作状態に移行することを要求する復帰信号を伝達する。
上記不揮発性キャッシュメモリは、キャッシュデータの記憶に用いられる不揮発性メモリ部と、上記不揮発性メモリ部に対してのキャッシュデータの読み出し及び書き込みを制御するとともに、上記待機信号を受け取ることで、待機状態データを生成して上記不揮発性メモリ部上に記憶する待機準備処理を行い、また上記復帰信号を受け取ることで、上記待機状態データを用いて上記不揮発性メモリ部に記憶されたキャッシュデータの復帰処理を行うキャッシュコントローラとを備えている。
【００１３】
即ち本開示では、電源遮断となる際には、不揮発性キャッシュメモリでは、待機状態データを生成して不揮発性メモリ部上に記憶する待機準備処理を行う。例えばエラー訂正データ（ＥＣＣ（Error Correcting Code）データ）やエラー検出データ（ＥＤＣ（Error Detecting Code）データ）を有する待機状態データを記憶するようにしておく。
そして電源復帰の際には、復帰処理として、待機状態データを用いて不揮発性メモリ部に記憶されたキャッシュデータの復帰処理を行う。例えばエラー訂正処理やエラー検出処理を行う。これにより、電源遮断中のキャッシュデータについて、消失等があったとしても、電源復帰後に正確なキャッシュデータ状態でキャッシュ動作が実行できるようにする。
【発明の効果】
【００１４】
本開示によれば、不揮発性キャッシュメモリの信頼性を向上させることができる。例えば不揮発性キャッシュメモリが待機中に情報を失ったとしても、その情報の検出や復元を行うことで、メインメモリとの一貫性を保つことができるためである。
【図面の簡単な説明】
【００１５】
【図１】本開示の実施の形態のコンピュータシステムのブロック図である。
【図２】第１及び第２の実施の形態によるキャッシュラインの説明図である。
【図３】第１の実施の形態の動作状態におけるキャッシュラインのデータ構造図の説明図である。
【図４】第１の実施の形態の待機状態におけるキャッシュラインのデータ構造図の説明図である。
【図５】第１の実施の形態の読み出し動作のフローチャートである。
【図６】第１の実施の形態の書き込み動作のフローチャートである。
【図７】第１の実施の形態の待機状態への移行プロセスを示すフローチャートである。
【図８】第１の実施の形態の動作状態への復帰プロセスを示すフローチャートである。
【図９】第２の実施の形態の待機状態におけるキャッシュラインのデータ構造図の説明図である。
【図１０】第２の実施の形態の待機状態への移行時におけるキャッシュラインの並び替えの説明図である。
【図１１】第２の実施の形態における待機状態への移行プロセスを示すフローチャートである。
【図１２】第３の実施の形態によるキャッシュラインの説明図である。
【図１３】第３の実施の形態の動作状態と待機状態におけるキャッシュラインのデータ構造図の説明図である。
【図１４】第３の実施の形態の待機状態への移行プロセスを示すフローチャートである。
【図１５】第４の実施の形態によるキャッシュラインの説明図である。
【図１６】第４の実施の形態の待機状態におけるキャッシュラインのデータ構造図の説明図である。
【図１７】第４の実施の形態のおける待機状態への移行プロセスを示すフローチャートである。
【図１８】第４の実施の形態のおける動作状態への復帰プロセスを示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、本開示の実施の形態について図面を参照しながら詳細に説明する。ただし、本開示が以下の実施の形態に限定される訳ではない。なお、説明は以下の順序で行う。
＜１．実施の形態の基本構成＞
＜２．第１の実施の形態＞
＜３．第２の実施の形態＞
＜４．第３の実施の形態＞
＜５．第４の実施の形態＞
＜６．変形例＞
【００１７】
＜１．実施の形態の基本構成＞
図１に実施の形態のコンピュータシステムの構成を示す。
図１のコンピュータシステムは、プロセッサ１０と、不揮発性キャッシュメモリ１１と、メインメモリ１２と、電力制御回路１３と、内部バス１４と、システムバス１５とを備える。
【００１８】
このコンピュータシステムにおいては、プロセッサ１０は、メインメモリ１２に対してのデータの書き込み／読み出しを、不揮発性キャッシュメモリ１１を介して行う。
不揮発性キャッシュメモリ１１は、メインメモリ１２よりも高速なデータの入出力が可能である。
電力制御回路１３は、プロセッサ１０及び不揮発性キャッシュメモリ１１に対しての電源供給の実行／停止を制御する。
【００１９】
まず不揮発性キャッシュメモリ１１について説明する。
図示のように、不揮発性キャッシュメモリ１１は、データの入出力を管理するキャッシュコントローラ２１と、データを格納する不揮発性メモリ部２２とを備える。
プロセッサ１０によるデータの読み出し及び書き込み要求は、内部バス１４を通してキャッシュコントローラ２１に伝えられる。
キャッシュコントローラ２１は、不揮発性メモリ部２２上のデータをキャッシュラインと呼ばれる単位で管理する。
【００２０】
図２は、完全連想マッピング（fully associative mapping）方式の場合のキャッシュラインＣＬの構成例を示す図である。各々のキャッシュラインＣＬ１、ＣＬ２・・・ＣＬｎは、タグ領域とキャッシュデータ領域とを有する。
図では、タグ領域に記憶されるタグ情報を「ＴＧ」、キャッシュデータ領域に記憶されるキャッシュデータを「ＣＤ」として示している。「ＴＧ」「ＣＤ」には各キャッシュラインＣＬについての番号を付加している。例えばキャッシュラインＣＬ１のタグ情報は「ＴＧ１」、キャッシュデータは「ＣＤ１」、キャッシュラインＣＬ２のタグ情報は「ＴＧ２」、キャッシュデータは「ＣＤ２」とする。
図示のように、キャッシュデータ領域には、メインメモリ１２上のデータのコピーであるキャッシュデータＣＤが格納される。
タグ領域には、タグ情報ＴＧが格納される。
【００２１】
タグ情報ＴＧとしては、キャッシュデータのメインメモリ１２上での格納位置を示すアドレス情報（アドレス上位ビット）と、キャッシュラインの状態を示す制御ビットが含まれている。
タグ領域に格納するアドレス情報は、すべてのアドレスビットを記憶する必要はない。例えば、キャッシュデータ領域が３２バイト幅であれば、下位５ビットを除くアドレスの上位ビットがタグ領域に格納される。この意味で図２では「アドレス上位ビット」と表記している。
【００２２】
タグ領域に格納する制御ビットは、ＥＣＣビットＥｂと、有効ビットＶｂと、ダーティービットＤｂとで構成される。
ＥＣＣビットＥｂは、不揮発性キャッシュメモリ１１が待機状態にあるときに用いるビットであり、詳しくは各実施の形態で述べる。
有効ビットＶｂは、そのキャッシュラインが有効であることを示すビットである。有効ビットＶｂが１であれば、キャッシュコントローラ２１はそのキャッシュラインＣＬのキャッシュデータ領域からキャッシュデータを読み出すことができる。
ダーティービットＤｂは、キャッシュデータが読み出し後に変更されたことを示すビットである。ダーティービットが１であるキャッシュラインＣＬは、キャッシュデータがメインメモリ１２上のデータと異なっている。そのために、そのキャッシュラインＣＬを解放する際には、メインメモリ１２との一貫性を保つために、キャッシュデータをメインメモリ１２の該当するアドレスに書き戻さなければならない。
【００２３】
プロセッサ１０によるデータの読み出し要求があった場合、キャッシュコントローラ２１は、該当する有効なキャッシュデータが不揮発性メモリ部２２上にあるかどうかを検索し、有効なキャッシュデータがある場合には、高速な不揮発性メモリ部２２からデータを読み出して、内部バス１４を通してプロセッサ１０へ送る。
有効なキャッシュデータがない場合には、キャッシュコントローラ２１は、システムバス１５を通してメインメモリ１２から該当するデータを読み出す。そして、内部バス１４を通してプロセッサ１０へ送るとともに、不揮発性メモリ部２２内にそのアドレスと読み出したデータを格納する。
【００２４】
図１に戻り説明を続ける。電力制御回路１３は、プロセッサ１０及び不揮発性キャッシュメモリ１１に入力されるクロック信号及び電力を供給するかどうかを制御する。プロセッサ１０は、処理すべき命令がない場合等に消費電力を抑えるために、クロック信号及び電力の供給を停止する待機状態に移行する省電力機能を備える。
【００２５】
プロセッサ１０が待機状態に移行する場合、プロセッサ１０は電力制御回路１３に対して待機状態への移行を示す信号ＰＷ＿ＯＦＦを出力する。
電力制御回路１３は、信号ＰＷ＿ＯＦＦを受け取ると、プロセッサ１０に入力される電力ＰＷ＿ＣＯＲＥとクロック信号ＣＬＫ＿ＣＯＲＥ、及び不揮発性キャッシュメモリ１１に入力される電力ＰＷ＿ＣＡＣＨＥとクロック信号ＣＬＫ＿ＣＡＣＨＥをローレベルにし、クロック信号及び電力の供給を停止する。
【００２６】
この際、プロセッサ１０内部のレジスタ等に保持されている内部データは、電力の供給が停止されると消失してしまう。そのために、これらのデータは事前に不揮発性メモリに退避しておくか、レジスタ等自体を不揮発化することが望ましい。レジスタ等自体を不揮発化する方法については、特許文献２に開示されている。
【００２７】
さて、不揮発性キャッシュメモリ１１は、不揮発性メモリ部２２にキャッシュデータを格納している。このため、原則的には電力の供給が停止されたとしても、キャッシュデータは保持されたままである。
ただし、待機時間の長さによっては、キャッシュデータが失われる可能性もあり得る。そこで、本実施の形態に係るコンピュータシステムにおいては、不揮発性キャッシュメモリ１１は待機状態において、そのキャッシュラインを待機状態用のデータ構造に変換する。例えば待機状態用のキャッシュラインがエラー訂正符号を含むことによって、待機状態中にデータが失われた場合においても、元のデータを復元するか、或いは、失われたデータを無効化する。このようにして、メインメモリとの一貫性を保つことができる。
【００２８】
プロセッサ１０が待機状態に移行する場合に、プロセッサ１０が電力制御回路１３に対して待機状態への移行を示す信号ＰＷ＿ＯＦＦを出力するのに先立って、プロセッサ１０は不揮発性キャッシュメモリ１１に対して、待機状態に移行することを要求する信号ＳＴＢＹを出力する。
不揮発性キャッシュメモリ１１のキャッシュコントローラ２１は、ＳＴＢＹ信号を受け取ると、待機準備処理を行い、不揮発性メモリ部２２内のキャッシュラインを待機状態用のデータ構造に変換する。詳しくは後述するが、この際に、ＥＣＣデータやＥＤＣデータを含む待機状態データを生成して上記不揮発性メモリ部上に記憶する処理が行われる。
【００２９】
不揮発性キャッシュメモリ１１のキャッシュコントローラ２１は、待機状態用のデータ構造への変換が完了したら、その旨を通知する信号ＳＴＢＹＲをプロセッサ１０に対して出力する。
プロセッサ１０はＳＴＢＹＲ信号を受け取ることで、不揮発性キャッシュメモリ１１が待機状態に移行する準備が完了したと判断し、電力制御回路１３に対してＰＷ＿ＯＦＦ信号を出力する。
その後の動作は先に述べた通りであり、プロセッサ１０及び不揮発性キャッシュメモリ１１は待機状態に移行する。
【００３０】
待機状態を終了し、動作状態に復帰するときは、電力制御回路１３に外部から入力される信号ＩＮＴを用いることができる。
ＩＮＴ信号が入力されると、電力制御回路１３は、プロセッサ１０に入力される電力ＰＷ＿ＣＯＲＥとクロック信号ＣＬＫ＿ＣＯＲＥ、及び不揮発性キャッシュメモリ１１に入力される電力ＰＷ＿ＣＡＣＨＥとクロック信号ＣＬＫ＿ＣＡＣＨＥをアクティブにし、電力及びクロック信号の供給を再開する。
【００３１】
プロセッサ１０は、電力及びクロック信号の供給が再開されたことを感知し、不揮発性キャッシュメモリ１１に対して通常動作への復帰を要求する信号ＲＥＳを出力する。
不揮発性キャッシュメモリ１１のキャッシュコントローラ２１は、ＲＥＳ信号を受け取ると、不揮発性メモリ部２２内のキャッシュラインを動作状態用のデータ構造に再変換する。
キャッシュコントローラ２１は、動作状態用のデータ構造への変換が完了したら、その旨を通知する信号ＲＥＳＲをプロセッサ１０に対して出力する。
プロセッサ１０はＲＥＳＲ信号を受け取ることで、不揮発性キャッシュメモリ１１が動作状態に移行する準備が完了したと判断し、通常の動作を再開する。
【００３２】
なお、不揮発性キャッシュメモリ１１はＲＥＳ信号を受け取らずに、クロック信号と電力の供給再開を検出して、不揮発性メモリ部２２内のキャッシュラインを動作状態用のデータ構造に再変換してもよい。
【００３３】
以上に述べたように、不揮発性メモリ部２２内のキャッシュラインは、動作状態と待機状態において異なったデータ構造を持つ。
即ち、不揮発性キャッシュメモリ１１では、電力供給遮断の準備として、ＥＣＣデータ、ＥＤＣデータ等を含む待機状態データを生成して不揮発性メモリ部２２に記憶する待機準備処理を行う。これにより、電源遮断後の待機中は、不揮発性メモリ部２２は、待機状態データを含めたデータ構造となっている。
また電力供給再開の際には、記憶されている待機状態データを用いて不揮発性メモリ部２２に記憶されたキャッシュデータの復帰処理を行う。後述するが、例えばエラー訂正処理やエラー検出処理、さらには他の必要な処理が行われる。
【００３４】
このようにすることで、例えば待機中に情報を失ったとしても、その情報の検出や復元を行うことで、メインメモリ１２との一貫性を保つことができるようにする。つまり少なくとも有効とされているキャッシュデータは、メインメモリ１２のデータと一致している状態となっているようにする。
【００３５】
即ち以下説明する第１〜第４の実施の形態は、キャッシュデータの記憶に用いられる不揮発性メモリ部２２と、不揮発性メモリ部２２に対してのキャッシュデータの読み出し及び書き込みを制御するとともに、電力供給遮断の準備として、待機状態データを生成して不揮発性メモリ部２２に記憶する待機準備処理を行い、また電力供給再開の際に、待機状態データを用いて不揮発性メモリ部２２に記憶されたキャッシュデータの復帰処理を行うキャッシュコントローラ２１を備えている。
【００３６】
そして第１〜第３の実施の形態では、キャッシュコントローラ２１は、待機準備処理として、少なくとも不揮発性メモリ部２２上に記憶されているキャッシュデータについてのエラー訂正を可能とするエラー訂正データ（ＥＣＣデータ）を含む待機状態データを生成して不揮発性メモリ部２２上に記憶させ、復帰処理として、待機状態データにおけるエラー訂正データを用いて不揮発性メモリ部２２に記憶されたキャッシュデータのエラー訂正処理を行うものである。
【００３７】
また第４の実施の形態では、キャッシュコントローラ２１は、待機準備処理として、少なくとも不揮発性メモリ部２２上に記憶されているキャッシュデータについてのエラー検出を可能とするエラー検出データ（ＥＤＣデータ）を含む待機状態データを生成して不揮発性メモリ部２２上に記憶させ、復帰処理として、待機状態データにおけるエラー検出データを用いて不揮発性メモリ部２２に記憶されたキャッシュデータのエラー検出処理を行うものである。
【００３８】
＜２．第１の実施の形態＞
続いて第１の実施の形態を説明する。
第１の実施の形態において、キャッシュラインＣＬは、上記の図２で示した構成とされる。そして、動作状態（通電中の通常の状態）と待機状態（電源遮断中の状態）とにおいて、キャッシュラインのデータ構造は図３、図４に示した構成とされる。
【００３９】
図３は動作状態のキャッシュラインＣＬを示している。
この場合、すべてのキャッシュラインＣＬ（ＣＬ１〜ＣＬｍ）がキャッシュラインモードとなる。
キャッシュラインモードでは、制御ビットのＥＣＣビットＥｂが「０」に設定され、当該キャッシュラインがキャッシュラインモードであることを示す。
有効ビットＶｂとダーティービットＤｂは、当該キャッシュラインの状態に応じて設定される。図の「Ｘ」は「１」又は「０」の意味である。
【００４０】
アドレス上位ビットには、キャッシュデータＣＤの参照元であるメインメモリ１２のアドレス（メインメモリアドレス）の必要な上位ビットが格納され、キャッシュデータＣＤには、そのメインメモリアドレスに対応したデータが格納される。
【００４１】
次に、動作状態から待機状態に移行する際には、待機準備処理が行われることで、キャッシュラインＣＬ１〜ＣＬｍは、キャッシュラインモードにあるキャッシュラインと、ＥＣＣモードにあるキャッシュラインとに分割される。
ＥＣＣモードとは、待機状態データを記憶したキャッシュラインとなっている状態である。
【００４２】
待機状態においてキャッシュラインモードにあるキャッシュライン（例えばキャッシュラインＣＬ１，ＣＬ２・・・）は、動作状態のキャッシュラインＣＬと同じデータ構造である。
【００４３】
ＥＣＣモードにあるキャッシュライン（例えばキャッシュラインＣＬｘ）は、ＥＣＣビットＥｂが「１」に設定され、当該キャッシュラインがＥＣＣモードであること（つまり待機状態データであるＥＣＣデータを記憶したキャッシュラインであること）を示す。
さらに、制御ビットの残りの有効ビットＶｂとダーティービットＤｂは「０」に設定される。
そして、アドレス上位ビットを格納する領域とキャッシュデータ領域は併せて新たにＥＣＣ領域とされる。ＥＣＣ領域はキャッシュアドレスＣＡを格納するキャッシュアドレス領域とＥＣＣデータＥＣを格納するＥＣＣデータ領域とで構成される。
【００４４】
このように、待機状態において２つのモードを利用したデータの格納方法について、以下に詳細に述べる。
前述のように、不揮発性キャッシュメモリにおいては、待機期間中に格納していたデータが失われる虞がある。そこで、本実施の形態の不揮発性キャッシュメモリ１１においては、エラー訂正符号（ＥＣＣ）を用いて失われたデータを検出し、必要であればエラーを訂正する。
【００４５】
待機状態においてキャッシュラインモードにあるキャッシュラインＣＬの中で、ダーティービットＤｂ、アドレス上位ビット、キャッシュデータＣＤをＥＣＣ対象データと呼ぶ。そして、ＥＣＣ対象データをエラー訂正符号化してＥＣＣデータを得る。
ここで、ＥＣＣ対象データとＥＣＣデータを併せたものがエラー訂正符号であり、生成されたエラー訂正符号のうち、ＥＣＣ対象データ以外の部分（ＥＣＣパリティ）をＥＣＣデータとする。
【００４６】
ＥＣＣデータは、ＥＣＣモードにあるキャッシュラインＣＬのＥＣＣデータ領域に格納される。
その際、ＥＣＣデータがどのキャッシュラインＣＬのものであるかを知るために、キャッシュアドレス領域にキャッシュラインのアドレス（キャッシュアドレスＣＡ）が格納される。
【００４７】
図４に示す例の場合、キャッシュラインＣＬ１のＥＣＣ対象データに対してのＥＣＣデータＥＣ１、及びキャッシュラインＣＬ１を示すキャッシュアドレスＣＡ１は、キャッシュラインＣＬ１とは別のキャッシュラインＣＬｘに格納される。
またキャッシュラインＣＬ２のＥＣＣ対象データに対してのＥＣＣデータＥＣ２、及びキャッシュラインＣＬ２を示すキャッシュアドレスＣＡ２も、キャッシュラインＣＬｘに格納される。
この場合、キャッシュアドレスＣＡとＥＣＣデータＥＣの合計ビット数は、ＥＣＣ領域のビット数よりも小さいものとしている。
そのために、ひとつのＥＣＣ領域には複数のキャッシュアドレスＣＡとＥＣＣデータＥＣのペアを格納することができる。
図４ではその一例として２つのペアを格納する場合が図示されているものである。しかし、これに限定されることなく、１つのペアや３つ以上のペアを格納してもよい。
【００４８】
次にキャッシュラインモードとＥＣＣモードの割り当て方法について述べる。
キャッシュラインモードは常に、有効ビットが１である有効なキャッシュラインＣＬが対象となる。これは有効ビットが０、即ち無効なキャッシュラインを待機中に保持する必要がないためである。
【００４９】
ＥＣＣモードは、基本的には、有効ビットが０である無効なキャッシュラインＣＬに割り当てられる。
但し、ＥＣＣモードに割り当てるべきキャッシュラインＣＬの数が、無効なキャッシュラインＣＬの数よりも大きい場合は、全ての有効なキャッシュラインＣＬに対応するＥＣＣデータＥＣを格納する領域が不足することになる。この場合は、有効なキャッシュラインＣＬを必要なだけ選択して、ＥＣＣモードに割り当てる。この場合、ＥＣＣモードに割り当てる有効なキャッシュラインＣＬについては、その有効ビットＶｂを「０」にしてそのキャッシュラインＣＬを無効化する。
有効なキャッシュラインのうちどのキャッシュラインを選択するかは、通常のキャッシュメモリで用いられるさまざまなライン入れ替え方式を用いることができる。
例えば、ラウンドロビン方式、ＬＲＵ（least recently used）方式、ランダム方式等が挙げられる。
以上のような選択によって、キャッシュラインモードのキャッシュラインＣＬのＥＣＣビットＥｂは「０」、有効ビットＶｂは「１」となり、ＥＣＣモードのキャッシュラインＣＬのＥＣＣビットＥｂは「１」、有効ビットＶｂは「０」となる。
【００５０】
ここで、待機中のエラーはＥＣＣビット、有効ビットにも起こり得ることに注意する。待機中にキャッシュラインモードのキャッシュラインＣＬのＥＣＣビットＥｂが「１」に変化したとすると、ＥＣＣビットＥｂと有効ビットＶｂがともに「１」となる。
このようなキャッシュラインＣＬはキャッシュラインモードでもＥＣＣモードでもないために無効とされる。
同様に、キャッシュラインモードのキャッシュラインＣＬの有効ビットＶｂが「０」になった場合、ＥＣＣモードのキャッシュラインＣＬのＥＣＣビットＥｂが「０」になった場合、及びＥＣＣモードのキャッシュラインＣＬの有効ビットＶｂが「１」になった場合も無効とされる。
このようにすることで、エラー訂正の保護を受けないＥＣＣビットおよび有効ビットでエラーが起きた場合でも、誤動作をすることがないようにできる。
【００５１】
電源供給の再開により、待機状態から動作状態への移行する際には、キャッシュラインモードにあるキャッシュラインＣＬに対して、ＥＣＣモードのキャッシュラインＣＬの中から一致するキャッシュアドレスＣＡを持つキャッシュラインＣＬを走査し、ＥＣＣデータＥＣを取得する。
そして、ＥＣＣ対象データとＥＣＣデータとを併せてエラー訂正符号を構成し、エラー訂正を行う。必要であれば正しいデータをＥＣＣ対象データに書き込む。場合によっては、ＥＣＣビットＥｂや有効ビットＶｂがエラーを起こしたために、一致するキャッシュアドレスＣＡを持つＥＣＣモードのキャッシュラインＣＬが見つからない場合があるが、そのような場合にはエラー訂正が行えないために、当該キャッシュラインＣＬは無効化する。
【００５２】
以下、本実施の形態においてキャッシュコントローラ２１によって実行される処理を説明する。
まず図５は、通常の動作状態において、プロセッサ１０から読み出し要求を受けた場合の処理例を示している。
【００５３】
ステップＦ１０１でキャッシュコントローラ２１がプロセッサ１０からアドレスＡに対する読み出し要求を受けると、キャッシュコントローラ２１は、ステップＦ１０２で、不揮発性メモリ部２２の中にアドレスＡに対応する有効なキャッシュラインＣＬがあるかどうか判断する。つまり有効ビットＶｂが「１」であり、メインメモリアドレスとしてアドレスＡが記憶されているキャッシュラインが有るか否かを判断する。
【００５４】
有効なキャッシュラインがある場合には、キャッシュコントローラ２１はステップＦ１０３に進み、当該キャッシュラインＣＬからキャッシュデータＣＤを取得し、プロセッサ１０に送信する。
つまり、この場合は、いわゆるキャッシュヒット転送として、メインメモリ１２にアクセスすることなくアドレスＡのデータがプロセッサ１０に転送される。
【００５５】
一方、アドレスＡに対応する有効なキャッシュラインＣＬがない場合は、キャッシュコントローラ２１はステップＦ１０４に進み、メインメモリ１２からアドレスＡのデータＤを読み出す。
そしてステップＦ１０５でキャッシュコントローラ２１は、このメインメモリ１２から読み出したデータＤを不揮発性メモリ部２２に格納するために、無効なキャッシュラインＣＬがあるかどうか判断する。
【００５６】
無効なキャッシュラインＣＬがある場合、キャッシュコントローラ２１はステップＦ１０６で、その中からキャッシュラインＣＬを一つ選ぶ。
そしてステップＦ１１０で、選択したキャッシュラインＣＬに、メインメモリ１２から読み出したデータＤとアドレスＡを新規登録する。つまり選択したキャッシュラインＣＬにおいて、データＤをキャッシュデータＣＤとして格納し、メインメモリアドレスとしてアドレスＡを格納する。
また当該キャッシュラインＣＬは、新規な、有効キャッシュラインとなるため、有効ビットＶｂを「１」に、ダーティービットＤｂを「０」に設定する。
【００５７】
そしてキャッシュコントローラ２１はステップＦ１１１で、データＤをプロセッサ１０に送信する。
つまりこの場合は、キャッシュヒットしなかったため、メインメモリ１２から読み出したデータが、プロセッサ１０に転送されることになる。また、メインメモリ１２から読み出されたデータＤは、キャッシュデータＣＤとして或るキャッシュラインＣＬに格納される。
【００５８】
一方、ステップＦ１０５で無効なキャッシュラインＣＬが存在しないと判定された場合は、キャッシュコントローラ２１はステップＦ１０７に進み、有効なキャッシュラインＣＬを一つ選ぶ。
そしてステップＦ１０８では、選択したキャッシュラインＣＬのダーティービットＤｂが「０」であるか否かを確認する。
もし「０」であれば、そのままステップＦ１１０，Ｆ１１１で、キャッシュデータ新規登録と、プロセッサ１０への送信の処理を行う。
この場合、或る有効なキャッシュラインＣＬに登録されていたキャッシュデータＣＤを消失させて、新たに今回メインメモリ１２から読み出したデータＤをキャッシュデータＣＤとして記憶する動作となる。
【００５９】
またステップＦ１０８で、選択したキャッシュラインＣＬのダーティービットＤｂが「１」であった場合は、キャッシュコントローラ２１はステップＦ１０９の処理を行う。この場合、キャッシュデータＣＤは、メインメモリ１２におけるアドレスＡのデータとは異なるデータになっている。そこで、当該キャッシュラインＣＬからキャッシュデータＣＤ及びメインメモリアドレスを読み出し、メインメモリ１２におけるアドレスＡに書き戻す処理を行う。
これによって、メインメモリ１２におけるアドレスＡのデータに、それまでキャッシュデータＣＤ上で行われていた更新を反映させる。
その後キャッシュコントローラ２１はステップＦ１１０，Ｆ１１１の処理を行う。
【００６０】
次に図６は、通常の動作状態において、プロセッサ１０から書き込み要求を受けた場合の処理例を示している。
【００６１】
ステップＦ２０１で、キャッシュコントローラ２１はプロセッサ１０からアドレスＡに対するデータＤの書き込み要求を受ける。
まずキャッシュコントローラ２１はステップＦ２０２で、不揮発性メモリ部２２の中にアドレスＡに対応する有効なキャッシュラインＣＬがあるかどうか判断する。
【００６２】
有効なキャッシュラインＣＬがある場合には、当該キャッシュラインＣＬのキャッシュデータＣＤを、今回プロセッサ１０から供給されたデータＤに書き替える。つまりキャッシュデータＣＤを更新する。また、これに伴いダーティービットＤｂを「１」にする。有効ビットＶｂも「１」とする。
【００６３】
そしてステップＦ２１１で、メインメモリ１２におけるアドレスＡに、今回のデータＤを書き込む処理を行う。
但し、キャッシュ上で更新する度にメインメモリ１２上での更新を必ず行う必要は必ずしもない。例えば後の或る時点でメインメモリ１２上でのデータ更新を行うのであれば、この段階でステップＦ２１１の書き込みを行う必要はない。
また、ステップＦ２１１で、キャッシュデータＣＤの更新データをメインメモリ１２上に反映させた場合は、キャッシュラインＣＬのダーティービットＤｂを「０」に戻すようにする。
【００６４】
ステップＦ２０２で、不揮発性メモリ部２２の中にアドレスＡに対応する有効なキャッシュラインＣＬがないと判断された場合は、キャッシュコントローラ２１はステップＦ２０５に進み、今回のデータＤを不揮発性メモリ部２２に格納するために、無効なキャッシュラインＣＬがあるかどうか判断する。
【００６５】
無効なキャッシュラインＣＬがある場合、キャッシュコントローラ２１はステップＦ２０６で、その中からキャッシュラインＣＬを一つ選ぶ。
そしてステップＦ２１０で、選択したキャッシュラインＣＬにアドレスＡとデータＤを新規登録する。つまり選択したキャッシュラインＣＬにおいて、データＤをキャッシュデータＣＤとして格納し、メインメモリアドレスとしてアドレスＡを格納する。
また当該キャッシュラインＣＬは、新規な、有効キャッシュラインとなるため、有効ビットＶｂを「１」に設定する。またこの時点では、新たなデータＤ（キャッシュデータＣＤ）はメインメモリ１２のアドレスＡのデータと一致していないため、ダーティービットＤｂを「１」に設定する。
【００６６】
そしてステップＦ２１１でメインメモリ１２のアドレスＡへのデータＤの書き込みを実行する。その場合は、ダーティービットを０に戻す。
或いは、ステップＦ２１１は、この時点では実行しなくてもよい。
【００６７】
ステップＦ２０５で無効なキャッシュラインＣＬがないと判断した場合、キャッシュコントローラ２１はステップＦ２０７で有効なキャッシュラインＣＬを一つ選ぶ。
そしてステップＦ２０８で、選んだ有効なキャッシュラインＣＬのダーティービットＤｂが「０」かどうか判断する。
もし「０」であれば、そのままステップＦ２１０で、キャッシュデータ新規登録を行う。またステップＦ２１１でメインメモリ１２への書き込みを行う（或いはこの時点では行わないとしてもよい）。
この場合、或る有効なキャッシュラインＣＬに登録されていたキャッシュデータＣＤを消失させて、新たに今回の書き込みデータＤをキャッシュデータＣＤとして記憶する動作となる。
【００６８】
またステップＦ２０８で、選択したキャッシュラインＣＬのダーティービットＤｂが「１」であった場合は、キャッシュコントローラ２１はステップＦ２０９の処理を行う。この場合、キャッシュデータＣＤは、メインメモリ１２におけるアドレスＡのデータとは異なるデータになっている。そこで、当該キャッシュラインＣＬからキャッシュデータＣＤ及びメインメモリアドレスを読み出し、メインメモリ１２におけるアドレスＡに書き戻す処理を行う。
これによって、メインメモリ１２におけるアドレスＡのデータに、それまでキャッシュデータＣＤ上で行われていた更新を反映させる。
その後キャッシュコントローラ２１はステップＦ２１０（及びＦ２１１）の処理を行う。
【００６９】
次に図７に、通常の動作状態から待機状態への移行プロセスにおいて、プロセッサ１０から待機信号を受けた場合のキャッシュコントローラ２１の処理例、つまり待機準備処理の例を示す。
【００７０】
ステップＦ３０１で、キャッシュコントローラ２１はプロセッサ１０から待機信号を受ける。
まずキャッシュコントローラ２１はステップＦ３０２で、不揮発性メモリ部２２における有効なキャッシュラインＣＬの数をカウントする。即ち有効ビットＶｂが「１」のキャッシュライン数である。これを有効キャッシュライン数Ｖとしてカウントする。
【００７１】
次にキャッシュコントローラ２１はステップＦ３０３で、ＥＣＣモードに必要なキャッシュラインＣＬの数を求める。必要キャッシュライン数Ｅとする。
例えば図４の例のように、１つのＥＣＣモードのキャッシュラインＣＬに２つのキャッシュラインＣＬについてのＥＣＣデータＥＣ及びキャッシュアドレスＣＡを格納するデータ構造とする場合、Ｅ＝Ｖ／２となる。
【００７２】
次にステップＦ３０４でキャッシュコントローラ２１は、無効なキャッシュラインＣＬの数Ｉが、必要キャッシュライン数Ｅより大きいか否かを確認する。
無効キャッシュライン数Ｉは、Ｉ＝（全キャッシュライン数）−Ｖである。
【００７３】
Ｉ≧Ｅであれば、無効なキャッシュラインＣＬを用いてＥＣＣモードのキャッシュラインを形成できる。
そこで、キャッシュコントローラ２１はステップＦ３０９に進み、無効なキャッシュラインＣＬをＥ個選ぶ。
選択したＥ個のキャッシュラインＣＬについては、全てＥＣＣビットＥｂを「１」に、ダーティービットＤｂを「０」にする。
【００７４】
ステップＦ３１０でキャッシュコントローラ２１は、有効なキャッシュラインＣＬのそれぞれについて、ＥＣＣデータＥＣを計算する。
例えば有効なキャッシュラインＣＬとして、キャッシュラインＣＬ１、ＣＬ２、ＣＬ５、ＣＬ６、ＣＬ７、ＣＬ１０が存在していたとした場合、それぞれについてのＥＣＣデータＥＣ１，ＥＣ２，ＥＣ５，ＥＣ６，ＥＣ７、ＥＣ１０を算出する。
【００７５】
そしてステップＦ３１１でキャッシュコントローラ２１は、キャッシュアドレスＣＡとＥＣＣデータＥＣを、ステップＦ３０９で選択したキャッシュラインＣＬに書き込む。
例えばキャッシュラインＣＬ１５，ＣＬ１６，ＣＬ１７がＥＣＣモード用に選択されていたとする。その場合例えば、キャッシュラインＣＬ１、ＣＬ２に対応するＥＣＣデータＥＣ１，ＥＣ２及びキャッシュアドレスＣＡ１，ＣＡ２を、キャッシュラインＣＬ１５に書き込む。またキャッシュラインＣＬ５、ＣＬ６に対応するＥＣＣデータＥＣ５，ＥＣ６及びキャッシュアドレスＣＡ５，ＣＡ６を、キャッシュラインＣＬ１６に書き込む。またキャッシュラインＣＬ７、ＣＬ１０に対応するＥＣＣデータＥＣ７，ＥＣ１０及びキャッシュアドレスＣＡ７，ＣＡ１０を、キャッシュラインＣＬ１７に書き込む。
これによって、キャッシュラインＣＬ１５，ＣＬ１６，ＣＬ１７がＥＣＣモードのデータ構造のキャッシュラインＣＬとされたこととなる。
【００７６】
以上で不揮発性メモリ部２２での待機準備が完了したことになり、キャッシュコントローラ２１はステップＦ３１２でプロセッサ１０に対して待機完了信号を送って、一連の処理を終える。
【００７７】
ところで、ステップＦ３０４で無効キャッシュライン数Ｉが必要キャッシュライン数Ｅより小さい場合は、無効なキャッシュラインＣＬを用いるだけではキャッシュライン数が足りないこととなる。
そこでその場合は、キャッシュコントローラ２１はステップＦ３０５に進む。
まずステップＦ３０５で、有効なキャッシュラインＣＬのうちで（Ｅ−Ｉ）個のキャッシュラインＣＬを選択する。
そして、ステップＦ３０６で、選択した（Ｅ−Ｉ）個のキャッシュラインＣＬのそれぞれについてダーティービットＤｂが「０」であるか否かを確認する。
【００７８】
もし（Ｅ−Ｉ）個のキャッシュラインＣＬの全てにおいて、ダーティービットＤｂが「０」であれば、そのままステップＦ３０８に進み、選択したキャッシュラインＣＬの有効ビットＶｂを「０」にする。つまり無効化する。キャッシュラインＣＬは、あくまで図１のコンピュータシステムにおいてキャッシュを記憶する領域であるため、有効なキャッシュラインＣＬを無効化すること（キャッシュデータＣＤを破棄すること）は問題とはならない。単にキャッシュの一部が破棄されるだけだからである。
そしてステップＦ３０２，Ｆ３０３の処理を再度行い、ステップＦ３０４で無効キャッシュライン数Ｉが必要キャッシュライン数Ｅより大きくなっていれば、ステップＦ３０９〜Ｆ３１２の処理を行うことになる。
【００７９】
またステップＦ３０６で、選択した（Ｅ−Ｉ）個のキャッシュラインＣＬのうちで、ダーティービットＤｂが「１」のキャッシュラインＣＬが存在したと判定した場合は、キャッシュコントローラ２１はステップＦ３０７の処理を行う。この場合、選択したキャッシュラインＣＬのうちのダーティービットＤｂが「１」のキャッシュラインＣＬのキャッシュデータＣＤは、メインメモリ１２におけるデータとは異なるデータになっている。そこで、当該キャッシュラインＣＬからキャッシュデータＣＤ及びメインメモリアドレスを読み出し、メインメモリ１２に書き戻す処理を行う。
これによって、メインメモリ１２におけるデータに、それまでキャッシュデータＣＤ上で行われていた更新を反映させる。
その後キャッシュコントローラ２１はステップＦ３０８の処理を経て、ステップＦ３０２，Ｆ３０３の処理を再度行い、ステップＦ３０４で無効キャッシュライン数Ｉが必要キャッシュライン数Ｅより大きくなっていれば、ステップＦ３０９〜Ｆ３１２の処理を行うことになる。
【００８０】
なお、ステップＦ３０５で選択する有効なキャッシュラインＣＬの数（つまり無効化するキャッシュラインＣＬの数）は、１個、又は２個という固定値とし、処理を繰り返すことで、或る時点で、ステップＦ３０４で肯定結果が得られるようにしてもよい。
【００８１】
次に図８に、待機状態から動作状態への移行プロセスにおいて、プロセッサ１０から復帰信号を受けた場合のキャッシュコントローラ２１の処理例、つまり復帰処理の例を示す。
ステップＦ４０１で、キャッシュコントローラ２１はプロセッサ１０から復帰信号を受ける。
【００８２】
キャッシュコントローラ２１はステップＦ４０２で、不揮発性メモリ部２２においてキャッシュラインモードとされているキャッシュラインＣＬを一つ選ぶ。
ステップＦ４０３でキャッシュコントローラ２１は、選択したキャッシュラインＣＬのキャッシュアドレスＣＡが記憶されているＥＣＣモードのキャッシュラインを選ぶ。
ステップＦ４０４でキャッシュコントローラ２１は、ステップＦ４０２で選択したキャッシュラインモードのキャッシュラインＣＬに対応するＥＣＣデータＥＣを、ステップＦ４０３で選択したＥＣＣモードのキャッシュラインＣＬから読み出し、キャッシュラインモードのキャッシュラインＣＬのエラー訂正処理を行う。
【００８３】
以上の処理は、例えば図４の状態に沿って述べると次のようになる。
ステップＦ４０２でキャッシュラインＣＬ１を選択し、ステップＦ４０３でキャッシュラインＣＬ１を示すキャッシュアドレスＣＡ１を記憶しているＥＣＣモードのキャッシュラインＣＬｘを選択する。そしてステップＦ４０４で、キャッシュラインＣＬｘに記憶されているＥＣＣデータＥＣ１を読み出し、このＥＣＣデータＥＣ１を用いて、キャッシュラインＣＬ１のＥＣＣ対象データのエラー訂正処理を行うこととなる。
【００８４】
ステップＦ４０５では、キャッシュコントローラ２１は、全てのキャッシュラインモードのキャッシュラインについて、ステップＦ４０２〜Ｆ４０４によるエラー訂正処理が完了したか否かを確認する。完了していなければステップＦ４０２に戻って、残りのキャッシュラインモードのキャッシュラインＣＬについてステップＦ４０２〜Ｆ４０４の処理を行う。例えば図４の例で述べると、次にキャッシュラインＣＬ２について、同様にエラー訂正処理を行うことになる。
【００８５】
全てのキャッシュラインモードのキャッシュラインについて、ステップＦ４０２〜Ｆ４０４によるエラー訂正処理が完了したら、キャッシュコントローラ２１はステップＦ４０６に進み、全てのＥＣＣモードのキャッシュラインＣＬについては、ＥＣＣビットＥｂを「０」として、単なる無効なキャッシュラインＣＬにする。
そしてステップＦ４０７でキャッシュコントローラ２１はプロセッサ１０に復帰完了信号を送って、一連の復帰処理を終える。
【００８６】
以上に述べたように、第１の実施の形態は、不揮発性メモリ部２２には、キャッシュデータＣＤの記憶に用いられるキャッシュラインＣＬが複数設定されている。そしてキャッシュコントローラ２１は、待機準備処理として、少なくとも一部のキャッシュラインＣＬについて、そのキャッシュラインＣＬに記憶されているキャッシュデータＣＤのエラー訂正可能なエラー訂正データ（ＥＣＣデータＥＣ）を含む待機状態データを生成し、該待機状態データを他のキャッシュライン（ＥＣＣモードのキャッシュラインＣＬ）に記憶させ、かつ当該他のキャッシュラインを、待機状態データを記憶したキャッシュラインであることを示す状態とする処理（ＥＣＣビットＥｂを「１」とする処理）を行う。
そしてエラー訂正データを含む待機状態データには、さらに当該エラー訂正データでエラー訂正を行うキャッシュデータが記憶されたキャッシュラインのアドレス情報ＣＡが含まれている。
【００８７】
このような第１の実施の形態においては、待機状態に移行する前に有効なキャッシュラインのＥＣＣデータを計算し、ＥＣＣデータを無効なキャッシュラインに格納することによって、待機中にデータが失われた場合においても、復帰動作の際にデータの訂正が可能となる。
【００８８】
なお、ステップＦ４０６の処理は行わない例も考えられる。つまり、ある程度の期間、ＥＣＣモードのキャッシュラインＣＬをそのまま残しておいてもよい。例えば通常のキャッシュ動作においてキャッシュラインＣＬが足りなくなるまで、ＥＣＣモードのキャッシュラインＣＬを残しておき、足りなくなったら、このキャッシュラインＣＬを使用するようにする。
このようにＥＣＣモードのキャッシュラインＣＬを残しておくことで、例えば電源瞬断時など、待機準備処理ができなかったような場合に、その復帰時にエラー訂正できるキャッシュラインＣＬが存在する可能性を得ることができる。
【００８９】
＜３．第２の実施の形態＞
続いて第２の実施の形態を説明する。なお、第１の実施の形態と重複する部分については説明を省略する。
第２の実施の形態は、キャッシュコントローラ２１が、待機状態データであるＥＣＣデータＥＣを、その待機状態データが対象とするキャッシュデータＣＤを記憶したキャッシュラインＣＬに対応する領域に記憶させる例である。
第２の実施の形態において、第１の実施の形態と同じく、キャッシュラインＣＬは図２で示した構成とされる。そして、動作状態と待機状態とにおいて、キャッシュラインのデータ構造は図３、図９に示した構成とされる。
【００９０】
動作状態において、すべてのキャッシュラインＣＬがキャッシュラインモードとなることは図３のとおりであり、つまり第１の実施の形態と同様である。
また動作状態から待機状態に移行する際に、キャッシュラインＣＬは、キャッシュラインモードにあるキャッシュラインＣＬとＥＣＣモードにあるキャッシュラインＣＬとに分割される点も、第１の実施の形態と同じである。
【００９１】
この第２の実施の形態では、図９に示すように、ＥＣＣモードのキャッシュラインＣＬでは、制御ビット以外の領域はＥＣＣデータ領域とされる。つまり図４と比較してわかるようにキャッシュアドレス領域は設けられない。
なおＥＣＣデータ領域の働きや制御ビットの設定方法は、第１の実施の形態と同じある。
【００９２】
このように第２の実施の形態においては、ＥＣＣモードにあるキャッシュラインＣＬ内にキャッシュアドレス領域がない。このため、ＥＣＣデータ領域が、どのキャッシュラインＣＬに対応づけられているかを以下のように決定する。
【００９３】
図１０は待機状態への移行の際のキャッシュラインの並べ替えを示した図である。
動作状態においては、有効なキャッシュラインＣＬ（有効ビットＶｂ＝１）と無効なキャッシュラインＣＬ（有効ビットＶｂ＝０）が混在している。
待機状態に移行する際には、有効なキャッシュラインＣＬをキャッシュアドレス順に整列させる（キャッシュラインＣＬ１からキャッシュラインＣＬ８）。
この有効なキャッシュラインを整列させる領域（キャッシュラインＣＬ１〜ＣＬ８）をキャッシュラインモード領域とする。
そして、無効なキャッシュラインは、有効なキャッシュラインの後に配置する（キャッシュラインＣＬ９〜ＣＬ１２）。この領域をＥＣＣモード領域とする。
【００９４】
ここで、キャッシュラインＣＬ１に対応したＥＣＣデータＥＣ１はキャッシュラインＣＬ９の前半に、キャッシュラインＣＬ２に対応したＥＣＣデータＥＣ２はキャッシュラインＣＬ９の後半に、キャッシュラインＣＬ３に対応したＥＣＣデータＥＣ３はキャッシュラインＣＬ１０の前半に・・・、というように、キャッシュラインＣＬの位置とＥＣＣデータＥＣの位置を一対一に対応させる。
このようにすると、ＥＣＣモードにあるキャッシュラインＣＬ内にキャッシュアドレスＣＡを格納する必要がない。
【００９５】
なお、この例では一つのキャッシュラインＣＬに２つのＥＣＣデータＥＣを格納しているが、これに限定されることなく、１つ或いは３つ以上のＥＣＣデータＥＣを格納してもよい。
キャッシュラインＣＬの総数をＴ、一つのキャッシュラインＣＬに格納できるＥＣＣデータＥＣの個数をＮとすると、キャッシュラインモード領域のキャッシュライン数Ｃは、Ｃ＋Ｃ／Ｎ＝Ｔを満たす。即ち、Ｃ＝ＮＴ／（Ｎ＋１）である。
図１０の例で言うと、Ｎ＝２、Ｔ＝１２であるから、Ｃ＝８となる。このとき、キャッシュラインモード領域はキャッシュラインＣＬ１からキャッシュラインＣＬ８に、ＥＣＣモード領域はキャッシュラインＣＬ９からキャッシュラインＣＬ１２に、それぞれ割り当てられる。
【００９６】
図１１は、第２の実施の形態のおける待機準備処理のフローチャートである。
ステップＦ５０１で、キャッシュコントローラ２１はプロセッサ１０から待機信号を受ける。
するとキャッシュコントローラ２１はステップＦ５０２で、不揮発性メモリ部２２における有効なキャッシュラインＣＬの数をカウントする。即ち有効ビットＶｂが「１」のキャッシュライン数である。これを有効キャッシュライン数Ｖとしてカウントする。
【００９７】
次にキャッシュコントローラ２１はステップＦ５０３で、上述のキャッシュラインモード領域のキャッシュライン数Ｃが、有効キャッシュライン数Ｖよりも大きいかどうか判断する。
Ｃ≧Ｖであれば、キャッシュコントローラ２１はステップＦ５０８に進み、有効なキャッシュラインＣＬをキャッシュラインモード領域の先頭から順に整列させる。
【００９８】
続いてキャッシュコントローラ２１はステップＦ５０９でＥＣＣモードに必要なキャッシュライン数Ｅを求める。
そしてステップＦ５１０で、ＥＣＣモード領域の先頭からＥ個のキャッシュラインＣＬのＥＣＣビットＥｂを「１」に、ダーティービットＤｂを「０」にする。つまりＥＣＣモードのキャッシュラインを形成する。
【００９９】
ステップＦ５１１でキャッシュコントローラ２１は、有効なキャッシュラインＣＬのそれぞれについて、ＥＣＣデータＥＣを計算する。
そしてステップＦ５１２でキャッシュコントローラ２１は、ＥＣＣデータＥＣを、それぞれ図１０で説明したように、対応するキャッシュラインＣＬに書き込む。
これによって、ＥＣＣデータ領域に必要なＥＣＣモードのキャッシュラインＣＬが形成されたこととなる。
【０１００】
以上で不揮発性メモリ部２２での待機準備が完了したことになり、キャッシュコントローラ２１はステップＦ５１３でプロセッサ１０に対して待機完了信号を送って、一連の処理を終える。
【０１０１】
一方、ステップＦ５０３でキャッシュラインモード領域のキャッシュライン数Ｃが、有効キャッシュライン数Ｖよりも小さい場合は、キャッシュコントローラ２１はステップＦ５０４に進む。
まずステップＦ５０４で、有効なキャッシュラインＣＬのうちで（Ｖ−Ｃ）個のキャッシュラインＣＬを選択する。
そして、ステップＦ５０５で、選択した（Ｖ−Ｃ）個のキャッシュラインＣＬのそれぞれについてダーティービットＤｂが「０」であるか否かを確認する。
【０１０２】
もし（Ｖ−Ｃ）個のキャッシュラインＣＬの全てにおいて、ダーティービットＤｂが「０」であれば、そのままステップＦ５０７に進み、選択したキャッシュラインＣＬの有効ビットＶｂを「０」にする。つまり無効化する。
そしてステップＦ５０２の処理を再度行い、ステップＦ５０３でＣ≧Ｖとなっていれば、ステップＦ５０８〜Ｆ５１３の処理を行うことになる。
【０１０３】
また、ステップＦ５０４で、選択した（Ｅ−Ｉ）個のキャッシュラインＣＬのうちで、ダーティービットＤｂが「１」のキャッシュラインＣＬが存在したと判定した場合は、キャッシュコントローラ２１はステップＦ５０６の処理を行う。この場合、選択したキャッシュラインＣＬのうちのダーティービットＤｂが「１」のキャッシュラインＣＬのキャッシュデータＣＤは、メインメモリ１２上のデータとは異なるデータになっている。そこで、当該キャッシュラインＣＬからキャッシュデータＣＤ及びメインメモリアドレスを読み出し、メインメモリ１２に書き戻す処理を行う。
これによって、メインメモリ１２上のデータに、それまでキャッシュデータＣＤ上で行われていた更新を反映させる。
その後キャッシュコントローラ２１はステップＦ５０７の処理を経て、ステップＦ５０２の処理を再度行い、ステップＦ５０３でＣ≧Ｖとなっていれば、ステップＦ５０８〜Ｆ５１３の処理を行うことになる。
【０１０４】
第２の実施の形態における復帰処理については、基本的に図８と同様である。異なる点は図８のステップＦ４０３において、対応するＥＣＣモードのキャッシュラインＣＬの選択が、キャッシュアドレスＣＡに基づくのではなく、図１０で説明したように一意的に決定される点である。
【０１０５】
以上の第２の実施の形態でも第１の実施の形態と同様の効果が得られる。加えて、ＥＣＣモードのキャッシュラインＣＬにおいては、キャッシュアドレスＣＡを記憶する必要はないため、ＥＣＣデータＥＣの記憶に有効できる。例えば１つのＥＣＣモードのキャッシュラインＣＬで、より多数のキャッシュラインモードのキャッシュラインＣＬに対応できたり、或いはＥＣＣパリティの冗長度を上げ、訂正能力を上げるといった点で有利となる。
【０１０６】
＜４．第３の実施の形態＞
続いて第３の実施の形態を説明する。なお、第１の実施の形態と重複する部分については説明を省略する。
第３の実施の形態において、キャッシュラインＣＬは図１２で示した構成とされる。そして、動作状態と待機状態とにおいて、キャッシュラインのデータ構造は図１３に示した構成とされる。
【０１０７】
図１２に示すように、キャッシュラインＣＬは、第１の実施の形態の構成に加えて、ＥＣＣデータ領域を含む。
図１３に示すように、動作状態においては、データの入出力はタグ領域とキャッシュデータ領域のみを対象に行われ、ＥＣＣデータ領域は用いられない。
そして待機状態への移行の際には、すべての有効なキャッシュラインはＥＣＣモードとなり、ＥＣＣビットＥｂが「１」に設定される。即ち、ＥＣＣビットＥｂと有効ビットＶｂはともに「１」となる。
【０１０８】
エラー訂正の対象となるＥＣＣ対象データは、ダーティービットＤｂ、アドレス上位ビット（メインメモリアドレス）、キャッシュデータＣＤである。
このＥＣＣ対象データを元にしてＥＣＣデータが計算され、同じキャッシュラインのＥＣＣデータ領域に格納される。
ＥＣＣ対象データとＥＣＣデータが同じキャッシュラインにあるために、キャッシュアドレスを格納する必要はない。
【０１０９】
動作状態への復帰の際には、ＥＣＣビットＥｂと有効ビットＶｂがともに「１」であるキャッシュラインに対して、ＥＣＣ対象データとＥＣＣデータとを併せてエラー訂正符号を構成し、エラー訂正を行う。必要であれば、正しいデータをＥＣＣ対象データに書き込む。仮に、待機中にＥＣＣビットＥｂと有効ビットＶｂのいずれかが「０」に変化したキャッシュラインＣＬは、無効とされる。
【０１１０】
このようにすると、各キャッシュラインＣＬに対して、そのＥＣＣデータＥＣがどこに存在するかを走査する必要がなくなる。
また、各キャッシュラインＣＬがＥＣＣデータ領域を備えているために、有効なキャッシュラインであっても無効なキャッシュラインが足りないためにＥＣＣモードにせざるを得ないという状況が起きない利点がある。
【０１１１】
図１４は、第３の実施の形態のおける待機準備処理のフローチャートである。
ステップＦ６０１で、キャッシュコントローラ２１はプロセッサ１０から待機信号を受ける。
するとキャッシュコントローラ２１はステップＦ６０２で、不揮発性メモリ部２２における有効なキャッシュラインＣＬを１つ選択する。
次にキャッシュコントローラ２１はステップＦ６０３で、選択したキャッシュラインＣＬのＥＣＣビットＥｂを「１」にする。つまりＥＣＣモードのキャッシュラインとする。
【０１１２】
ステップＦ６０４でキャッシュコントローラ２１は、選択しているキャッシュラインＣＬのＥＣＣデータＥＣを計算する。
そしてステップＦ６０５でキャッシュコントローラ２１は、ＥＣＣデータＥＣを、そのキャッシュラインＣＬにおけるＥＣＣデータ領域に書き込む。
これによって、１つの有効なキャッシュラインＣＬがＥＣＣモードのキャッシュラインＣＬとされたこととなる。
【０１１３】
ステップＦ６０６ではキャッシュコントローラ２１は、全ての有効なキャッシュラインＣＬについて、ステップＦ６０２〜Ｆ６０５の処理を完了したか否かを確認する。完了していなければステップＦ６０２に戻って、残りのキャッシュラインモードのキャッシュラインＣＬについてステップＦ６０２〜Ｆ６０５の処理を行う。
【０１１４】
全てのキャッシュラインモードのキャッシュラインについて、ステップＦ６０２〜Ｆ６０５のＥＣＣモード化の処理を完了したら、キャッシュコントローラ２１はステップＦ６０７に進み、プロセッサ１０に対して待機完了信号を送って、一連の処理を終える。
【０１１５】
第３の実施の形態における復帰処理については、図８と同様に考えればよいが、異なる点は図８のステップＦ４０２は、ＥＣＣモードのキャッシュラインＣＬを１つ選択すること、ステップＦ４０３が不要なことである。ステップＦ４０４は、選択したキャッシュラインにおけるＥＣＣデータを用いて、当該ＥＣＣモードのキャッシュラインＣＬのエラー訂正を行うことになる。
つまり、ＥＣＣデータＥＣが、エラー訂正対象のキャッシュラインＣＬ内に記憶されていることで、復帰処理が簡易化される。
【０１１６】
以上のように第３の実施の形態は、不揮発性メモリ部２２には、キャッシュデータ記憶領域及び待機状態データ領域（ＥＣＣデータ領域）を有するキャッシュラインＣＬが複数設定されている。
キャッシュコントローラ２１は、待機準備処理として、少なくとも一部のキャッシュラインＣＬについて、そのキャッシュラインＣＬに記憶されているキャッシュデータのエラー訂正可能なＥＣＣデータＥＣを含む待機状態データを生成し、該待機状態データを待機状態データ領域に記憶させる。また当該キャッシュラインＣＬを、待機状態データを記憶したキャッシュラインであることを示す状態とする処理（ＥＣＣビットＥｂ＝１とする処理）を行う。
この第３の実施の形態でも第１、第２の実施の形態と同様の効果が得られる。加えて待機準備処理や復帰処理が簡易化できる。また待機準備処理の際にキャッシュラインＣＬが足りないために有効なキャッシュラインＣＬを無効化して用いる必要はなくなる。
【０１１７】
＜５．第４の実施の形態＞
第４の実施の形態を説明する。これは待機状態データとしてＥＤＣデータ（エラー検出データ）を用いる例である。
図１５にキャッシュラインＣＬのデータ構造を示す。これは第１の実施の形態で説明した図２のデータ構造において、ＥＣＣビットＥｂを、ＥＤＣビットＥＤｂに代えた例である。
ＥＤＣビットＥＤｂは、不揮発性キャッシュメモリ１１が待機状態にあるときに用いるビットであり、キャッシュラインＣＬがＥＤＣモードとされていることを示すビットである。他は図３で説明したものと同様である。
【０１１８】
動作状態において、すべてのキャッシュラインＣＬがキャッシュラインモードとなることは図３で説明したものと同様である。
また動作状態から待機状態に移行する際に、キャッシュラインＣＬは、キャッシュラインモードにあるキャッシュラインＣＬとＥＤＣモードにあるキャッシュラインＣＬとに分割される。
この第４の実施の形態では、図１６に示すように、ＥＤＣモードのキャッシュラインＣＬでは、ＥＤＣビットＥＤｂは「１」とされ、有効ビットＶｂ，ダーティービットＤｂは「０」とされる。
そしてＥＤＣモードのキャッシュラインＣＬは、制御ビット以外の領域はＥＤＣ領域とされる。ＥＤＣ領域はキャッシュアドレスを格納するキャッシュアドレス領域とＥＤＣデータＥＤを格納するＥＤＣデータ領域とで構成される。
【０１１９】
この図１６に示すデータ構造は、基本的には第１の実施の形態のＥＣＣデータＥＣをＥＤＣデータＥＤに変更したものであり、基本的な構造やデータ内容は第１の実施の形態において図４について説明したものと同様である。
待機状態においてキャッシュラインモードにあるキャッシュラインＣＬの中で、ダーティービットＤｂ、アドレス上位ビット、キャッシュデータＣＤをＥＤＣ対象データと呼ぶ。そして、ＥＤＣ対象データをエラー検出符号化してＥＤＣデータを得る。
ここで、ＥＤＣ対象データとＥＤＣデータを併せたものがエラー訂正符号であり、生成されたエラー訂正符号のうち、ＥＤＣ対象データ以外の部分（ＥＤＣパリティ）をＥＤＣデータとする。
【０１２０】
ＥＤＣデータは、ＥＤＣモードにあるキャッシュラインＣＬのＥＤＣデータ領域に格納される。
その際、ＥＤＣデータがどのキャッシュラインＣＬのものであるかを知るために、キャッシュアドレス領域にキャッシュラインのアドレス（キャッシュアドレスＣＡ）が格納される。
【０１２１】
図１７に、通常の動作状態から待機状態への移行プロセスにおいて、プロセッサ１０から待機信号を受けた場合のキャッシュコントローラ２１の処理例、つまり待機準備処理の例を示す。基本的な処理の流れは図７と同様となる。
ステップＦ７０１で、キャッシュコントローラ２１はプロセッサ１０から待機信号を受ける。
キャッシュコントローラ２１はステップＦ７０２で、不揮発性メモリ部２２における有効なキャッシュラインＣＬの数をカウントする。
次にキャッシュコントローラ２１はステップＦ７０３で、ＥＤＣモードに必要なキャッシュラインＣＬの数を求める。必要キャッシュライン数Ｅとする。
【０１２２】
次にステップＦ７０４でキャッシュコントローラ２１は、無効なキャッシュラインＣＬの数Ｉが、必要キャッシュライン数Ｅより大きいか否かを確認する。
Ｉ≧Ｅであれば、無効なキャッシュラインＣＬを用いてＥＤＣモードのキャッシュラインを形成できるため、キャッシュコントローラ２１はステップＦ７０９に進み、無効なキャッシュラインＣＬをＥ個選ぶ。そして選択したＥ個のキャッシュラインＣＬについては、全てＥＤＣビットＥＤｂを「１」に、ダーティービットＤｂを「０」にする。
ステップＦ７１０でキャッシュコントローラ２１は、有効なキャッシュラインＣＬのそれぞれについて、ＥＤＣデータＥＤを計算する。
そしてステップＦ７１１でキャッシュコントローラ２１は、キャッシュアドレスＣＡとＥＤＣデータＥＤを、ステップＦ７０９で選択したキャッシュラインＣＬに書き込む。
【０１２３】
以上で不揮発性メモリ部２２での待機準備が完了したことになり、キャッシュコントローラ２１はステップＦ７１２でプロセッサ１０に対して待機完了信号を送って、一連の処理を終える。
【０１２４】
一方、ステップＦ７０４で無効キャッシュライン数Ｉが必要キャッシュライン数Ｅより小さい場合は、キャッシュコントローラ２１はステップＦ７０５に進む。なおステップＦ７０５〜Ｆ７０８は、図７のステップＦ３０５〜Ｆ３０８と同様であるため説明を省略する。
【０１２５】
次に図１８で、待機状態から動作状態への移行プロセスにおいて、プロセッサ１０から復帰信号を受けた場合のキャッシュコントローラ２１の処理例、つまり復帰処理の例を説明する。
ステップＦ９０１で、キャッシュコントローラ２１はプロセッサ１０から復帰信号を受ける。
【０１２６】
キャッシュコントローラ２１はステップＦ９０２で、不揮発性メモリ部２２においてキャッシュラインモードとされているキャッシュラインＣＬを一つ選ぶ。
ステップＦ９０３でキャッシュコントローラ２１は、選択したキャッシュラインＣＬのキャッシュアドレスＣＡが記憶されているＥＤＣモードのキャッシュラインＣＬを選ぶ。
ステップＦ９０４でキャッシュコントローラ２１は、ステップＦ９０２で選択したキャッシュラインモードのキャッシュラインＣＬに対応するＥＤＣデータＥＤを、ステップＦ９０３で選択したＥＤＣモードのキャッシュラインＣＬから読み出し、キャッシュラインモードのキャッシュラインＣＬのエラー検出処理を行う。
【０１２７】
ここでエラーが検出されなければ、そのキャッシュラインモードのキャッシュラインＣＬはデータ消失等がなく、正常な状態である。
一方、エラーが検出されたキャッシュラインＣＬは、何らかのエラーが発生し、データ内容（ＥＤＣ対象データの内容）は、正確な内容ではなくなっている。
そこで、エラーが検出された場合は、ステップＦ９０５からＦ９０６に進み、キャッシュコントローラ２１は当該キャッシュラインＣＬを無効化する。具体的には有効ビットＶｂを「０とする。
エラーが検出されなければ、当該キャッシュラインＣＬをそのまま維持する。
【０１２８】
ステップＦ９０７では、キャッシュコントローラ２１は、全てのキャッシュラインモードのキャッシュラインについて、エラー検出処理が完了したか否かを確認する。完了していなければステップＦ９０２に戻って、残りのキャッシュラインモードのキャッシュラインＣＬについてステップＦ９０２〜Ｆ９０６の処理を行う。
【０１２９】
全てのキャッシュラインモードのキャッシュラインについて、エラー検出処理が完了したら、キャッシュコントローラ２１はステップＦ９０８に進み、全てのＥＤＣモードのキャッシュラインＣＬについては、ＥＤＣビットＥＤｂを「０」として、単なる無効なキャッシュラインＣＬにする。
そしてステップＦ９０９でキャッシュコントローラ２１はプロセッサ１０に復帰完了信号を終え、一連の復帰処理を終える。
【０１３０】
以上の第４の実施の形態のように、ＥＤＣデータＥＤを待機状態データとして用いることもできる。
復帰処理においてエラーを検出したら、そのキャッシュラインＣＬは無効化することで、誤ったキャッシュデータがその後用いられることが防止される。
キャッシュライン当たりのパリティ領域としては、ＥＣＣデータ領域に比べてＥＤＣデータ領域の場合、削減することができる。
【０１３１】
なお、エラーを検出したらそのキャッシュラインは無効化するわけであるが、この場合には、ダーティービットＤｂが「１」であるキャッシュラインＣＬが無効化されることによって、不揮発性キャッシュメモリ１１でのデータ更新がメインメモリ１２に反映されなくなる場合が生ずる。そこで、これを防ぐために、待機信号を得てデータの変換を行うプロセスに至る前に、ダーティービットＤｂが「１」であるキャッシュラインＣＬをまとめてメインメモリ１２に書き戻しておくことが望ましい。
【０１３２】
＜６．変形例＞
本開示は、上述の実施の形態に限定されるものではなく、本開示の要旨を逸脱しない範囲でその他様々な構成を取り得る。
【０１３３】
上記の各実施の形態においては、待機信号を得てデータの変換を行うプロセスに至る前に、ダーティービットＤｂが「１」であるキャッシュラインＣＬをまとめてメインメモリ１２に書き戻すこともできる。書き戻しを行ったらダーティービットＤｂを「０」にする。このようにすると、有効なキャッシュラインＣＬをＥＣＣモード（又はＥＤＣモード）に割り当てる際に、その都度ダーティービットＤｂのチェックを行う必要がなくなる。
【０１３４】
また第４の実施の形態では、ＥＤＣデータＥＤを使う例を、第１の実施の形態と同様のデータ構造に適用した例で述べたが、ＥＤＣデータを、第２，第３の実施の形態と同様のデータ構造においてＥＣＣデータに代えて適用することも当然想定される。
【０１３５】
また各実施の形態のでは、電力供給遮断の準備として、プロセッサ１０からの待機信号があったとき、つまり電源遮断直前に待機状態データを生成して不揮発性メモリ部２２に記憶する待機準備処理を行うこととしたが、他のタイミングで待機準備処理を行ってもよい。
例えばある程度定期的に待機準備処理を行うなどである。但し、電源遮断直前のキャッシュデータ内容が必ずしも反映されない恐れがあるため、電源遮断直前以外で実行する場合は、その後、ＥＣＣモード（又はＥＤＣモード）としたキャッシュラインの有効、無効を管理する必要がある。
また、例えば電池駆動のコンピュータシステムなどにおいて、不揮発性キャッシュメモリ１１が電源電圧状態を検知し、電源落ちとなるタイミング直前に自主的に待機準備処理を行うような例も考えられる。
【０１３６】
復帰処理については、再開後の最初のキャッシュ動作の実行前におこなっておけばよい。従って、プロセッサ１０からの復帰信号以外で復帰処理を行う例も考えられる。
【０１３７】
また、エラー訂正或いはエラー検出以外の目的で、動作状態と待機状態でキャッシュラインのデータ構造を変えることもできる。
【０１３８】
なお本技術は以下のような構成も採ることができる。
（１）キャッシュデータの記憶に用いられる不揮発性メモリ部と、
上記不揮発性メモリ部に対してのキャッシュデータの読み出し及び書き込みを制御するとともに、電力供給遮断の準備として、待機状態データを生成して上記不揮発性メモリ部に記憶する待機準備処理を行い、また電力供給再開の際に、上記待機状態データを用いて上記不揮発性メモリ部に記憶されたキャッシュデータの復帰処理を行うキャッシュコントローラと、
を備えた不揮発性キャッシュメモリ。
（２）上記キャッシュコントローラは、
上記待機準備処理として、少なくとも上記不揮発性メモリ部上に記憶されているキャッシュデータについてのエラー訂正を可能とするエラー訂正データを含む上記待機状態データを生成して上記不揮発性メモリ部上に記憶させ、
上記復帰処理として、上記待機状態データにおける上記エラー訂正データを用いて上記不揮発性メモリ部に記憶されたキャッシュデータのエラー訂正処理を行う上記（１）に記載の不揮発性キャッシュメモリ。
（３）上記不揮発性メモリ部には、キャッシュデータ記憶に用いられるキャッシュラインが複数設定されており、
上記キャッシュコントローラは、
上記待機準備処理として、少なくとも一部のキャッシュラインについて、そのキャッシュラインに記憶されているキャッシュデータのエラー訂正可能なエラー訂正データを含む待機状態データを生成し、該待機状態データを他のキャッシュラインに記憶させ、かつ当該他のキャッシュラインを、待機状態データを記憶したキャッシュラインであることを示す状態とする処理を行う上記（１）又は（２）に記載の不揮発性キャッシュメモリ。
（４）上記エラー訂正データを含む待機状態データには、さらに当該エラー訂正データでエラー訂正を行うキャッシュデータが記憶されたキャッシュラインのアドレス情報が含まれている上記（３）に記載の不揮発性キャッシュメモリ。
（５）上記キャッシュコントローラは、上記待機状態データを、その待機状態データが対象とするキャッシュデータを記憶したキャッシュラインに対応する領域に記憶させる上記（３）に記載の不揮発性キャッシュメモリ。
（６）上記不揮発性メモリ部には、キャッシュデータ記憶領域及び待機状態データ領域を有するキャッシュラインが複数設定されており、
上記キャッシュコントローラは、
上記待機準備処理として、少なくとも一部のキャッシュラインについて、そのキャッシュラインに記憶されているキャッシュデータのエラー訂正可能なエラー訂正データを含む待機状態データを生成し、該待機状態データを上記待機状態データ領域に記憶させ、かつ当該キャッシュラインを、待機状態データを記憶したキャッシュラインであることを示す状態とする処理を行う上記（１）又は（２）に記載の不揮発性キャッシュメモリ。
（７）上記キャッシュコントローラは、
上記待機準備処理として、少なくとも上記不揮発性メモリ部上に記憶されているキャッシュデータについてのエラー検出を可能とするエラー検出データを含む上記待機状態データを生成して上記不揮発性メモリ部上に記憶させ、
上記復帰処理として、上記待機状態データにおける上記エラー検出データを用いて上記不揮発性メモリ部に記憶されたキャッシュデータのエラー検出処理を行う上記（１）に記載の不揮発性キャッシュメモリ。
（８）上記キャッシュコントローラは、
上記エラー検出処理においてエラーを検出したキャッシュデータを無効化する処理を行う上記（７）に記載の不揮発性キャッシュメモリ。
（９）上記キャッシュコントローラは、電力供給を遮断する待機状態に移行することを要求する待機信号を受け取ることで、上記待機準備処理を行う上記（１）乃至（８）に記載の不揮発性キャッシュメモリ。
【符号の説明】
【０１３９】
１０  プロセッサ、１１  不揮発性キャッシュメモリ、１２  メインメモリ、１３  電源制御回路、２１  キャッシュコントローラ、２２  不揮発性メモリ部、
【図１】
0005803614.tif 000002
【図２】
0005803614.tif 000003
【図３】
0005803614.tif 000004
【図４】
0005803614.tif 000005
【図５】
0005803614.tif 000006
【図６】
0005803614.tif 000007
【図７】
0005803614.tif 000008
【図８】
0005803614.tif 000009
【図９】
0005803614.tif 000010
【図１０】
0005803614.tif 000011
【図１１】
0005803614.tif 000012
【図１２】
0005803614.tif 000013
【図１３】
0005803614.tif 000014
【図１４】
0005803614.tif 000015
【図１５】
0005803614.tif 000016
【図１６】
0005803614.tif 000017
【図１７】
0005803614.tif 000018
【図１８】
0005803614.tif 000019