(57)【特許請求の範囲】
【請求項１】
メインメモリに記憶されたデータまたは記憶されるべきデータの少なくとも一部を記憶する、不揮発メモリセルを有するキャッシュ部と、
前記キャッシュ部に記憶されたデータの冗長符号を記憶可能な、不揮発メモリセルを有する第１冗長符号記憶部と、
前記冗長符号を記憶可能な、揮発メモリセルを有する第２冗長符号記憶部と、を備えるキャッシュメモリ。
【請求項２】
前記キャッシュ部は、前記メインメモリに記憶されたデータまたは記憶されるべきデータの他に、当該データにアクセスするためのタグ情報を記憶し、
前記第１冗長符号記憶部および前記第２冗長符号記憶部は、前記キャッシュ部に記憶されたデータの冗長符号と、当該データに対応する前記タグ情報の冗長符号と、を記憶可能である請求項１に記載のキャッシュメモリ。
【請求項３】
前記第２冗長符号記憶部は、プロセッサコアの動作中に前記冗長符号の記憶および読み出しに用いられ、
前記第１冗長符号記憶部は、前記プロセッサコアが動作を停止した後に、前記第２冗長符号記憶部に記憶された前記冗長符号を記憶する請求項１または２に記載のキャッシュメモリ。
【請求項４】
前記第２冗長符号記憶部は、プロセッサコアが動作を再開した際に、前記第１冗長符号記憶部に記憶された前記冗長符号を記憶する請求項３に記載のキャッシュメモリ。
【請求項５】
前記第２冗長符号記憶部は、プロセッサコアが動作を再開した際に、前記第１冗長符号記憶部に記憶された前記冗長符号を記憶するべきか否かを示す更新可否情報を記憶する請求項４に記載のキャッシュメモリ。
【請求項６】
前記第１冗長符号記憶部に記憶されるべき前記冗長符号を、前記第１冗長符号記憶部に記憶する前に記憶する一時記憶部を備え、
前記一時記憶部および前記第２冗長符号記憶部は、並行して前記冗長符号を記憶し、
前記第１冗長符号記憶部は、前記一時記憶部が書込み動作をしていないときに前記冗長符号を順次記憶し、
前記第１冗長符号記憶部は、プロセッサコアが動作を停止した際には、前記一時記憶部に記憶されていて、まだ前記第１冗長符号記憶部に記憶されていない前記冗長符号を記憶する請求項１または２に記載のキャッシュメモリ。
【請求項７】
プロセッサコアの動作状態に応じて、前記第１冗長符号記憶部および前記第２の冗長符号記憶部に対する前記冗長符号の読出しと書込みとを制御する冗長符号フローコントローラを備える請求項１乃至６のいずれかに記載のキャッシュメモリ。
【請求項８】
プロセッサコアと、
キャッシュメモリと、を備えるプロセッサシステムにおいて、
前記キャッシュメモリは、
メインメモリに記憶されたデータまたは記憶されるべきデータの少なくとも一部を記憶する、不揮発メモリセルを有するキャッシュ部と、
前記キャッシュ部に記憶されたデータの冗長符号を記憶可能な、不揮発メモリセルを有する第１冗長符号記憶部と、
前記冗長符号を記憶可能な、揮発メモリセルを有する第２冗長符号記憶部と、を有するプロセッサシステム。
【請求項９】
前記キャッシュ部は、前記メインメモリに記憶されたデータまたは記憶されるべきデータの他に、当該データにアクセスするためのタグ情報を記憶し、
前記第１冗長符号記憶部および前記第２冗長符号記憶部は、前記キャッシュ部に記憶されたデータの冗長符号と、当該データに対応する前記タグ情報の冗長符号と、を記憶可能である請求項８に記載のプロセッサシステム。
【請求項１０】
前記キャッシュメモリは、前記プロセッサコアの動作状態に応じて、前記第１冗長符号記憶部および前記第２冗長符号記憶部に対する前記冗長符号の読出しと書込みとを制御する冗長符号フローコントローラを有する請求項８または９に記載のプロセッサシステム。
【請求項１１】
前記冗長符号フローコントローラは、前記プロセッサコアの動作中では、前記冗長符号を前記第１冗長符号記憶部に記憶せずに前記第２冗長符号記憶部に記憶する制御を行う請求項１０に記載のプロセッサシステム。
【請求項１２】
前記冗長符号フローコントローラは、前記プロセッサコアが動作を停止すると、前記第２冗長符号記憶部に記憶された前記冗長符号を前記第１冗長符号記憶部にコピーする制御を行う請求項１０または１１に記載のプロセッサシステム。
【請求項１３】
前記冗長符号フローコントローラは、前記プロセッサコアが動作を再開した際に、前記第１冗長符号記憶部に記憶された前記冗長符号を前記第２冗長符号記憶部にコピーする制御を行う請求項１０乃至１２のいずれかに記載のプロセッサシステム。
【請求項１４】
前記第１冗長符号記憶部に記憶されるべき前記冗長符号を、前記第１冗長符号記憶部に記憶する前に記憶する一時記憶部を備え、
前記第１冗長符号記憶部は、前記一時記憶部が書込み動作をしていないときに前記冗長符号を順次記憶し、
前記冗長符号フローコントローラは、前記プロセッサコアの動作中では、前記一時記憶部および前記第２冗長符号記憶部に並行して前記冗長符号を記憶する制御を行い、前記プロセッサコアが動作を停止した際には、前記一時記憶部に記憶されていて、まだ前記第１冗長符号記憶部に記憶されていない前記冗長符号を前記第１冗長符号記憶部に記憶する制御を行う請求項１０に記載のプロセッサシステム。
【請求項１５】
前記キャッシュ部および前記第１冗長符号記憶部を実装する第１半導体チップと、
前記第１半導体チップに積層され、前記プロセッサコアおよび前記第２冗長符号記憶部を実装する第２半導体チップと、を備える請求項８乃至１４のいずれかに記載のプロセッサシステム。
【請求項１６】
前記不揮発メモリセルは、ＭＲＡＭ（Magnetoresistive RAM）セルである請求項８乃至１５のいずれかに記載のプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発メモリを有するキャッシュメモリおよびプロセッサシステムに関する。
【背景技術】
【０００２】
従来のキャッシュメモリでは、誤り訂正符号（ＥＣＣ：Error Correction Code）を用いてデータの信頼性を高める技術を導入している。高速に動作させるために、誤り訂正のための冗長符号は、データよりも符号長が短いことが一般的である。また、メモリ回路への書き込みは、一般に符号長が長い方が遅延も大きい。そこで、データビットを書き込んでいる間に、冗長符号の演算とその書き込みを並列して行う動作シーケンスを採用することが考えられる。
【０００３】
このような動作シーケンスを採用することで、冗長符号の演算とその書き込みの遅延は、長いデータビットの書き込みの遅延に隠蔽されることになり、高速な書き込み動作が実現できる。
【０００４】
不揮発メモリセル自身の書き込み遅延は、不揮発メモリ回路内の他の回路ブロックの遅延よりもはるかに大きいことが多いため、不揮発メモリ回路の書き込み時間は不揮発メモリセル自身の書き込み遅延に依存する。したがって、冗長符号の符号長をデータビット長より短くしても、冗長符号の書き込み遅延はあまり低減されない。よって、キャッシュメモリとして不揮発メモリセルを用いる場合、冗長符号の演算とその書き込みに時間がかかるために、データアクセス時間が増大してしまうおそれがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−２１８４０３号公報
【特許文献２】特表２０１０−５１２６０１号公報
【特許文献３】特開２００９−２８２７５２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本実施形態は、不揮発メモリセルを使用しながらも高速データアクセスが可能なキャッシュメモリおよびプロセッサシステムを提供するものである。
【課題を解決するための手段】
【０００７】
本実施形態によれば、メインメモリに記憶されたデータまたは記憶されるべきデータの少なくとも一部を記憶する、不揮発メモリセルを有するキャッシュ部と、
前記キャッシュ部に記憶されたデータの冗長符号を記憶可能な、不揮発メモリセルを有する第１冗長符号記憶部と、
前記冗長符号を記憶可能な、揮発メモリセルを有する第２冗長符号記憶部と、を備えるキャッシュメモリが提供される。
【図面の簡単な説明】
【０００８】
【図１】第１の実施形態によるプロセッサシステム１の概略構成を示すブロック図。
【図２】図１のプロセッサシステム１の機能的なブロック図。
【図３】３次元積層技術を利用して実装したプロセッサシステムの一例を示す図。
【図４】ＴＳＶを用いた積層技術を説明する図。
【図５】マイクロバンプを用いた積層技術を説明する図。
【図６】プロセッサコア２の通常動作時におけるプロセッサシステム１内の各回路ブロックへの電源供給状況を示す図。
【図７】電源遮断時におけるプロセッサシステム１内の各回路ブロックへの電源供給状況を示す図。
【図８】電源復帰直後におけるプロセッサシステム１内の各回路ブロックへの電源供給状況を示す図。
【図９】キャッシュ制御部１３と誤り訂正コントローラ１４の内部構成の一例を示すブロック図。
【図１０】プロセッサコア２が通常の書き込み動作を行う場合の冗長符号フローコントローラ５３の動作を説明する図。
【図１１】プロセッサコア２が通常の読み出し動作を行う場合の冗長符号フローコントローラ５３の動作を説明する図。
【図１２】電源遮断時の冗長符号フローコントローラ５３の動作を説明する図。
【図１３】電源復帰直後の冗長符号フローコントローラ５３の動作を説明する図。
【図１４】電源復帰直後にプロセッサコア２から読み出し要求があった場合の冗長符号フローコントローラ５３の動作を説明する図。
【図１５】更新フラグを説明する図。
【図１６】監視回路２７の処理動作の一例を示すフローチャート。
【図１７】監視回路２７のタイミング図。
【図１８】Ｃステートの第１例を示す図。
【図１９】Ｃステートの第２例を示す図。
【図２０】Ｃステートの第３例を示す図。
【図２１】Ｃステートの第４例を示す図。
【図２２】第２の実施形態による誤り訂正コントローラ１４の内部構成を示すブロック図。
【図２３】プロセッサコア２の通常書き込み動作時における第２の実施形態の冗長符号フローコントローラ５３の動作を説明する図。
【図２４】プロセッサコア２の通常読み出し動作時における第２の実施形態の冗長符号フローコントローラ５３の動作を説明する図。
【図２５】電源遮断時における第２の実施形態の冗長符号フローコントローラ５３の動作を説明する図。
【図２６】電源復帰直後における第２の実施形態の冗長符号フローコントローラ５３の動作を説明する図。
【図２７】電源復帰直後にプロセッサコア２から読み出し要求があった場合の冗長符号フローコントローラ５３の動作を説明する図。
【図２８】第２の実施形態による監視回路２７のタイミング図。
【発明を実施するための形態】
【０００９】
以下、図面を参照しながら、本発明の実施形態について説明する。
【００１０】
（第１の実施形態）
図１は第１の実施形態によるプロセッサシステム１の概略構成を示すブロック図である。図１のプロセッサシステム１は、プロセッサコア２と、キャッシュメモリ３と、電源制御部４とを備えている。
【００１１】
プロセッサコア２は、例えばマルチコア構成になっており、複数の演算器５と、複数のＬ１キャッシュ（L1 Cache）６とを有する。Ｌ１キャッシュ６は、高速性が要求されるため、例えばＳＲＡＭ（Static Random Access Memory）で構成されている。なお、プロセッサコア２は、シングルコア構成であってもよい。
【００１２】
図１のキャッシュメモリ３は、メインメモリ７に記憶されたデータまたは記憶されるべきデータの少なくとも一部を記憶するものであり、Ｌ２以降の高次のキャッシュメモリを含んでいる。図１のキャッシュメモリ３は、不揮発メモリ部１１と、揮発メモリ部１２と、キャッシュ制御部１３と、誤り訂正コントローラ１４と、を有する。
【００１３】
不揮発メモリ部１１は、不揮発メモリセルを用いて構成され、上述した高次のキャッシュメモリ３として用いられる。高次のキャッシュメモリ３は、ＳＲＡＭほどの高速性は要求されないが、キャッシュメモリ３として使用可能な高速性が要求される。具体的には、例えば、不揮発メモリセルとしてＭＲＡＭ（Magnetoresistive RAM）セルが用いられる。
【００１４】
不揮発メモリ部１１は、キャッシュデータ部２１と、タグ部２２と、不揮発冗長符号記憶部（第１冗長符号記憶部）２３とを有する。キャッシュデータ部２１は、メインメモリ７に記憶されたデータまたは記憶されるべきデータを記憶する。キャッシュデータ部２１は、キャッシュラインを単位としてデータを記憶する。キャッシュラインは例えば５１２ビットである。タグ部２２は、キャッシュデータ部２１に格納されているデータに対応するアドレス情報を記憶する。不揮発冗長符号記憶部２３は、キャッシュデータ部２１に記憶されたデータの冗長符号（データ冗長符号）と、タグ部２２に記憶されたデータの冗長符号（タグ冗長符号）とを記憶する。
【００１５】
揮発メモリ部１２は、レジスタ回路やＳＲＡＭ等の高速アクセスが可能な揮発メモリを用いて構成されている。本明細書では、揮発メモリ部１２は不揮発メモリ部１１よりもアクセス速度が高速であることを想定している。揮発メモリ部１２は、揮発冗長符号記憶部（第２冗長符号記憶部）２４を有する。揮発冗長符号記憶部２４は、キャッシュデータ部２１に記憶されたデータの冗長符号（データ冗長符号）と、タグ部２２に記憶されたデータの冗長符号（タグ冗長符号）とを記憶する。
【００１６】
キャッシュ制御部１３は、プロセッサコア２が発行したアドレスに対応するデータがキャッシュデータ部２１に格納されているか否かを判定する。
【００１７】
誤り訂正コントローラ１４は、キャッシュメモリ３に記憶されているデータを誤り訂正するための冗長符号を不揮発冗長符号記憶部２３と揮発冗長符号記憶部２４のどちらに記憶するかを決定して、決定した記憶部に冗長符号を記憶するとともに、記憶した冗長符号を読み出す制御を行う。
【００１８】
電源制御部４は、不揮発メモリ部１１用の第２電源回路２６と、ＣＭＯＳ回路用の第１電源回路２５と、監視回路２７とを有する。第２電源回路２６は、監視回路２７からの信号に基づいて、不揮発メモリ部１１に電源電圧を供給する。第１電源回路２５は、監視回路２７からの信号に基づいて、図１のプロセッサシステム１内の不揮発メモリ部１１以外の回路ブロックに電源電圧を供給する。
【００１９】
監視回路２７は、外部からプロセッサコア２に対して処理要求があったか否かとプロセッサシステム１内の処理状態とを監視する。監視回路２７は、プロセッサコア２の処理が一定時間停止していて、かつ外部からの処理要求もない場合は、プロセッサシステム１内の少なくとも一部の回路ブロックの電源電圧を下げたり、電源電圧の供給を停止する電源制御信号を各電源回路に供給する。この電源制御信号は、誤り訂正コントローラ１４にも送られる。誤り訂正コントローラ１４は、この電源制御信号に基づいて、不揮発冗長符号記憶部２３と揮発冗長符号記憶部２４に対する冗長符号の読み書きを制御する。
【００２０】
図１のプロセッサコア２と、キャッシュ制御部１３、誤り訂正コントローラ１４、揮発メモリ部１２、第１電源回路２５および監視回路２７は、複数のＣＭＯＳトランジスタを備えたＣＭＯＳ部１０である。
【００２１】
図２は図１のプロセッサシステム１の機能的なブロック図である。図２の第１ブロック３１には、プロセッサコア２とＬ１キャッシュ６が配置される。第２ブロック３２には、キャッシュ制御部１３と誤り訂正コントローラ１４が配置される。第３ブロック３３には、不揮発メモリ部１１内のキャッシュデータ部２１が配置される。第４ブロック３４には、不揮発メモリ部１１内のタグ部２２が配置される。第５ブロック３５には、不揮発メモリ部１１内の不揮発冗長符号記憶部２３の一部（データ冗長符号の記憶領域）が配置される。第６ブロック３６には、不揮発メモリ部１１内の不揮発冗長符号記憶部２３の一部（タグ冗長符号の記憶領域）が配置される。第７ブロック３７には、揮発メモリ部１２内の揮発冗長符号記憶部２４の一部（データ冗長符号の記憶領域）が配置される。第８ブロック３８には、揮発メモリ部１２内の揮発冗長符号記憶部２４の一部（タグ冗長符号の記憶領域）が配置される。第９ブロック３９には、電源制御部４が配置される。
【００２２】
図１のプロセッサシステム１は、例えば図３に示すように、不揮発メモリチップ４１とＣＭＯＳチップ４２とを３次元積層技術を利用して積層した多チップ構成にすることができる。不揮発メモリチップ４１には、図１の不揮発メモリ部１１が実装される。ＣＭＯＳチップ４２には、図１のプロセッサシステム１内の不揮発メモリ部１１以外のすべての回路ブロックが実装される。
【００２３】
適用可能な３次元積層技術は、図４に示すＴＳＶ（Through Silicon Via）４３を用いた積層技術や、図５に示すマイクロバンプ４４を用いた積層技術などである。図４の場合、例えばシリコン基板４５上にＣＭＯＳチップ４２が積層され、その上に不揮発メモリチップ４１が積層される。一方のチップ上の各パッド４６は、対応するＴＳＶ４３を介して、他方のチップ上の対応するパッドと電気的に接続される。図５の場合、ＣＭＯＳチップ４２上の各パッドと、不揮発メモリチップ４１上の各パッドとを対向させてマイクロバンプ４４で接合する。
【００２４】
なお、図３〜図５のいずれにおいても、不揮発メモリチップ４１とＣＭＯＳチップ４２を積層する順序は特に問わない。
【００２５】
上述したように、監視回路２７は、プロセッサコア２の動作状態に応じて、プロセッサシステム１内の各回路ブロックに供給する電源電圧を制御する。
【００２６】
図６はプロセッサコア２の通常動作時におけるプロセッサシステム１内の各回路ブロックへの電源供給状況を示す図である。図６に示すように、プロセッサコア２の通常動作時には、灰色で示す第５ブロック３５と第６ブロック３６には電源電圧が供給されず、それ以外の全ブロックには電源電圧が供給される。これは、プロセッサコア２の通常動作時には、不揮発メモリ部１１内の不揮発冗長符号記憶部２３は使用されないことを意味する。すなわち、プロセッサコア２の通常動作時には、データ冗長符号とタグ冗長符号は、揮発メモリ部１２内の揮発冗長符号記憶部２４に記憶される。
【００２７】
なお、プロセッサコア２の通常動作時とは、プロセッサコア２が処理動作を行っている期間を指す。
【００２８】
図７は電源遮断時におけるプロセッサシステム１内の各回路ブロックへの電源供給状況を示す図である。電源遮断時には、監視回路２７は、第１ブロック３１〜第４ブロック３４への電源電圧の供給を遮断する。すなわち、プロセッサコア２、キャッシュ制御部１３、誤り訂正コントローラ１４、不揮発メモリ部１１内のキャッシュデータ部２１およびタグ部２２に電源電圧が供給されなくなる。また、電源遮断時には、揮発メモリ部１２内の揮発冗長符号記憶部２４に記憶されているデータ冗長符号とタグ冗長符号を、不揮発メモリ部１１内の不揮発冗長符号記憶部２３にコピーする。そして、コピー完了後に、監視回路２７は、揮発メモリ部１２と不揮発メモリ部１１への電源供給を遮断する。すなわち、監視回路２７は、第５ブロック３５〜第８ブロック３８への電源供給を遮断する。この結果、電源遮断時には、電源制御部４内の監視回路２７のみが動作している状態になる。なお、不揮発メモリ部１１への電源電圧を遮断しても、不揮発メモリ部１１内のデータが消失することはない。よって、不揮発メモリ部１１にコピーしたデータ冗長符号とタグ冗長符号は、その後に電源が復帰した後に再利用できる。
【００２９】
図８は電源復帰直後におけるプロセッサシステム１内の各回路ブロックへの電源供給状況を示す図である。電源復帰直後は、揮発メモリ部１２には有効なデータは記憶されていない。そこで、不揮発メモリ部１１内の不揮発冗長符号記憶部２３に記憶されているデータ冗長符号とタグ冗長符号を、揮発メモリ部１２内の揮発冗長符号記憶部２４にコピーする。これにより、誤り訂正コントローラ１４が揮発冗長符号記憶部２４にこれら冗長符号を書き戻すよりも速いタイミングで、プロセッサコア２は処理を再開できる。コピーが完了すると、図６に示す通常動作に復帰する。
【００３０】
図９はキャッシュ制御部１３と誤り訂正コントローラ１４の内部構成の一例を示すブロック図である。図９のキャッシュ制御部１３は、Hit/Miss判定回路５１と、誤り訂正回路５２とを有する。Hit/Miss判定回路５１は、プロセッサコア２からアクセス要求のあったデータがデータ部２１に記憶されているか否かをタグ部２２を参照して判定する。誤り訂正回路５２は、プロセッサコア２からのアクセス要求に応じてキャッシュデータ部２１から読み出したデータの誤り訂正を行う。誤り訂正後のデータがプロセッサコア２に送られる。また、誤り訂正回路５２は、プロセッサコア２から書き込み要求のあったデータとアドレスから、データ冗長符号とタグ冗長符号を生成する。
【００３１】
図９の誤り訂正コントローラ１４は、冗長符号フローコントローラ５３と、コピーアドレスレジスタ５４と、状態判定回路５５とを有する。冗長符号フローコントローラ５３は、不揮発メモリ部１１内の不揮発冗長符号記憶部２３と揮発メモリ部１２内の揮発冗長符号記憶部２４とに、データ冗長符号とタグ冗長符号を記憶する制御を行う。
【００３２】
コピーアドレスレジスタ５４は、電源復帰直後に不揮発メモリ部１１から揮発メモリ部１２にデータ冗長符号とタグ冗長符号をコピーしている最中にプロセッサコア２がキャッシュメモリ３にアクセスできるように、コピーしているデータの対応アドレスをコピーアドレスレジスタ５４に記憶する。
【００３３】
これにより、電源復帰直後に不揮発メモリ部１１から揮発メモリ部１２にデータ冗長符号とタグ冗長符号をコピーしている最中であっても、プロセッサコア２はキャッシュメモリ３へのアクセスが可能となる。より具体的には、電源復帰直後は、まだ不揮発メモリ部１１から揮発メモリ部１２へのデータ冗長符号とタグ冗長符号のコピーが完了していないため、不揮発メモリ部１１からこれら冗長符号を読み出す。読出しが完了した後は、コピーアドレスレジスタ５４に保存されているアドレスの次のアドレスからコピーを再開する。よって、コピー完了前であっても、データ冗長符号とタグ冗長符号の読み出しを正常に行うことができる。
【００３４】
状態判定回路５５は、プロセッサコア２の通常動作期間中か、または電源復帰直後かを判定する。状態判定回路５５は、例えばレジスタにて構成可能である。状態判定回路５５は、例えば、コピーアドレスレジスタ５４を参照し保存されているアドレスが途中のアドレスであれば電源復帰直後と判断し、最後のアドレスであれば通常動作期間中と判断する。
【００３５】
図１０はプロセッサコア２が通常の書き込み動作を行う場合の冗長符号フローコントローラ５３の動作を説明する図である。プロセッサコア２が通常の書き込み動作を行っている最中は、誤り訂正回路５２で生成されたデータ冗長符号とタグ冗長符号は、冗長符号フローコントローラ５３を介して、揮発メモリ部１２内の揮発冗長符号記憶部２４に記憶される。この場合、不揮発メモリ部１１内の不揮発冗長符号記憶部２３には、データ冗長符号とタグ冗長符号は記憶されない。
【００３６】
図１１はプロセッサコア２が通常の読み出し動作を行う場合の冗長符号フローコントローラ５３の動作を説明する図である。この場合、揮発メモリ部１２内の揮発冗長符号記憶部２４から読み出されたデータ冗長符号とタグ冗長符号が冗長符号フローコントローラ５３を介して、プロセッサコア２に送られる。
【００３７】
図１２は電源遮断時の冗長符号フローコントローラ５３の動作を説明する図である。電源を遮断する際には、まず揮発メモリ部１２内の揮発冗長符号記憶部２４に記憶されているデータ冗長符号とタグ冗長符号が、不揮発メモリ部１１内の不揮発冗長符号記憶部２３にコピーされる。コピーが完了すると、監視回路２７は、揮発メモリ部１２と不揮発メモリ部１１への電源供給を遮断する。
【００３８】
図１３は電源復帰直後の冗長符号フローコントローラ５３の動作を説明する図である。電源復帰直後は、不揮発メモリ部１１内の不揮発冗長符号記憶部２３に記憶されているデータ冗長符号とタグ冗長符号が、揮発メモリ部１２内の揮発冗長符号記憶部２４にコピーされる。また、コピーしている最中に、プロセッサコア２から読み出し要求または書き込み要求がある場合に備えて、不揮発冗長符号記憶部２３に記憶されているデータ冗長符号とタグ冗長符号に対応するアドレスがコピーアドレスレジスタ５４に記憶される。
【００３９】
図１４は電源復帰直後にプロセッサコア２から読み出し要求があった場合の冗長符号フローコントローラ５３の動作を説明する図である。電源復帰直後には、不揮発冗長符号記憶部２３から揮発冗長符号記憶部２４にデータがコピーされるが、コピーが完了する前は不揮発冗長符号記憶部２３に記憶されているデータ冗長符号とタグ冗長符号は冗長符号フローコントローラ５３を介してプロセッサコア２に送られる。
【００４０】
電源が復帰して、不揮発冗長符号記憶部２３から揮発冗長符号記憶部２４に各冗長符号をコピー中にプロセッサコア２から書き込み要求があった場合、まだコピーが完了しない間に、揮発冗長符号記憶部２４に最新の冗長符号が記憶されてしまうことがありうる。この場合、不揮発冗長符号記憶部２３には、コピーしようとする古い冗長符号が記憶されていることから、このままでは、揮発冗長符号記憶部２４内の最新の冗長符号が、不揮発冗長符号記憶部２３内の古い冗長符号に上書きされてしまうおそれがある。
【００４１】
そこで、図１５に示すように、揮発冗長符号記憶部２４に記憶される各冗長符号ごとに更新フラグ５６を設けて、更新フラグ５６によって、揮発冗長符号記憶部２４に記憶されている各冗長符号が最新の値であるかを識別できるようにするのが望ましい。例えば、電源遮断時にすべての更新フラグ５６を０にする。電源復帰後に新たな冗長符号の書き込みを行った場合に、対応する更新フラグ５６を１にする。また、不揮発冗長符号記憶部２３から揮発冗長符号記憶部２４に冗長符号をコピーする場合には、対応する更新フラグ５６が０の場合のみコピーを行う。これにより、コピーによって、新しい冗長符号を古い冗長符号で上書きする不具合を防止できる。更新フラグ５６は１ビットの情報でよいため、揮発冗長符号記憶部２４内に設けても、それほどメモリ容量の増大にはならない。
【００４２】
次に、監視回路２７の動作を説明する。監視回路２７は、プロセッサコア２の動作状態をモニタし、プロセッサコア２の動作が停止してからの経過時間によって、プロセッサシステム１内の各回路ブロックを段階的に低消費電力モードに移行させる。ここで、低消費電力モードとは、例えば電源電圧を下げたり、プロセッサシステム１内の一部の回路ブロックへの電源供給を停止するモードである。
【００４３】
プロセッサコア２の低消費電力モードは、一般にＣステートと呼ばれている。Ｃ０ステートは、プロセッサコア２が通常動作を行っている状態であり、最も消費電力が多い。Ｃ１、Ｃ２、…と状態が遷移していくに従って、より低消費電力のモードに移行する。
【００４４】
図１６は監視回路２７の処理動作の一例を示すフローチャートである。プロセッサシステム１を構成する図３に示す不揮発メモリチップ４１とＣＭＯＳチップ４２に電源電圧を供給し、変数ｉ＝０、時刻Ｔ＝Ｔｉに初期化する（ステップＳ１）。変数ｉはＣステートの状態を表す変数である。当初は変数ｉ＝０であるため、プロセッサシステム１はＣ０ステートの状態で動作する。時刻Ｔはプロセッサコア２が動作を停止している継続時間である。
【００４５】
次に、プロセッサコア２が所定時間Ｔ＝Ｔｏ以上動作を停止しているか否かを判定する（ステップＳ２，Ｓ３）。ステップＳ３でＴ≧Ｔｏと判定されるまでは、ステップＳ２，Ｓ３の処理を繰り返す。
【００４６】
プロセッサコア２が所定時間Ｔｏ以上動作を停止している場合には、変数ｉ＜ｉｍａｘか否かを判定する（ステップＳ４）。変数ｉ＜ｉｍａｘであれば、変数ｉを１だけインクリメントするとともに、時刻Ｔ＝Ｔｉに初期化する。これにより、Ｃステートは、１段階低消費電力モードに切り替えられて、ステップＳ２以降の処理が繰り返される（ステップＳ５）。
【００４７】
ステップＳ４で、変数ｉ≧ｉｍａｘと判定されると、プロセッサシステム１の電源を遮断する（ステップＳ６）。ステップＳ６では、監視回路２７以外のすべての回路ブロックへの電源供給が遮断される。
【００４８】
図１７は監視回路２７のタイミング図である。このタイミング図は、電源復帰直後からプロセッサコア２が動作を停止した後までのタイミングを示している。時刻ｔ１でプロセッサシステム１に電源電圧が供給されると、不揮発メモリ部１１内の不揮発冗長符号記憶部２３に記憶されているデータ冗長符号とタグ冗長符号が揮発メモリ部１２内の揮発冗長符号記憶部２４にコピーされる（時刻ｔ１〜ｔ２）。
【００４９】
時刻ｔ２で各冗長符号のコピーが完了すると、プロセッサコア２は、キャッシュメモリ３にアクセス要求を行う際には、不揮発メモリ部１１内の不揮発冗長符号記憶部２３ではなく、揮発メモリ部１２内の揮発冗長符号記憶部２４にアクセスする。これにより、不揮発冗長符号記憶部２３にアクセスするよりも、高速アクセスが可能となる。
【００５０】
時刻ｔ３でプロセッサコア２が動作を停止すると、冗長符号フローコントローラ５３は、揮発冗長符号記憶部２４に記憶されているデータ冗長符号とタグ冗長符号を、不揮発冗長符号記憶部２３にコピーする（時刻ｔ３〜ｔ４）。そして、コピー完了後に、監視回路２７は、揮発メモリ部１２と不揮発メモリ部１１への電源供給を遮断する。
【００５１】
また、監視回路２７は、動作停止時刻からの経過時間をモニタし、経過時間に応じて、Ｃステートを段階的に切り替えて低消費電力動作を行う。最終的に、プロセッサシステム１内で監視回路２７のみが動作している状態まで移行する（時刻ｔ４）。
【００５２】
図１８はＣステートの第１例を示す図である。図１８の例では、ＣステートがＣ０，Ｃ１，Ｃ２と段階的に切り替わる。Ｃ０ステートでは、プロセッサシステム１内のすべての回路ブロックに電源電圧が供給される。
【００５３】
Ｃ１ステートでは、キャッシュ制御部１３および誤り訂正コントローラ１４に対応する第２ブロック３２と、不揮発メモリ部１１内のキャッシュデータ部２１とタグ部２２に対応する第３ブロック３３および第４ブロック３４とに供給されていた電源供給が遮断される。ただし、Ｃ１ステートでは、不揮発メモリ部１１内の不揮発冗長符号記憶部２３と揮発メモリ部１２内の揮発冗長符号記憶部２４とには、電源電圧が供給される。その理由は、揮発冗長符号記憶部２４から不揮発冗長符号記憶部２３に各冗長符号をコピーする必要があるためである。
【００５４】
Ｃ２ステートでは、監視回路２７を含む第９ブロック３９を除く第１〜第８ブロック３１〜３８への電源供給が遮断される。これにより、プロセッサシステム１で消費する電力を最低限に抑制できる。
【００５５】
Ｃステートは図１８よりも細かく遷移させることも可能である。例えば図１９はＣステートの第２例を示す図であり、ＣステートをＣ０〜Ｃ３まで４つの状態に順に切り替える例を示している。図１９のＣ０、Ｃ３ステートはそれぞれ、図１８のＣ０、Ｃ２ステートと同じである。
【００５６】
図１９のＣ１ステートでは、不揮発メモリ部１１内のキャッシュデータ部２１とタグ部２２に対応する第３ブロック３３および第４ブロック３４に供給されていた電源供給が遮断される。ただし、キャッシュ制御部１３および誤り訂正コントローラ１４に対応する第２ブロック３２には電源電圧が供給される。
【００５７】
また、図１９のＣ２ステートでは、第３ブロック３３および第４ブロック３４に加えて、プロセッサコア２に対応する第１ブロック３１と、キャッシュ制御部１３および誤り訂正コントローラ１４に対応する第２ブロック３２とへの電源供給が遮断される。
【００５８】
電源供給を遮断する面積が小さい方が、一つ前の状態に迅速に復帰可能である。図１９の場合、図１８よりも状態の数を一つ増やしており、電源供給を遮断する面積を少しずつ増やすようにしている。これにより、Ｃ０ステートに迅速に復帰することができる。なお、図１９のＣ１ステート時に電源電圧を供給する面積は、図１８のＣ１ステート時に電源電圧を供給する面積よりも大きいため、図１９のＣ１ステートは、図１８のＣ１ステートよりも消費電力が大きい。よって、図１９のＣ１ステートには長時間留まらないように状態遷移の設計を行うのが望ましい。また、状態の分割数と各状態に留まる時間は、プロセッサシステム１が実行する処理に応じて適切に設計するのが望ましい。
【００５９】
図２０はＣステートの第３例を示す図である。図２０のＣ０ステートとＣ２ステートは図１８と同様であるが、Ｃ１ステートが異なっている。図２０のＣ１ステートでは、図１８のＣ１ステートでの電源遮断範囲に加えて、プロセッサコア２への電源供給も遮断される。プロセッサコア２への電源供給を遮断するタイミングを早めた方がよいかどうかは、プロセッサコア２とキャッシュメモリ３の復帰のオーバーヘッドを考慮に入れて決めるのが望ましい。すなわち、復帰に要するオーバーヘッドが小さい回路ブロックへの電源供給を先に遮断するのが望ましい。例えば、キャッシュメモリ３の復帰のオーバーヘッドがプロセッサコア２の復帰のオーバーヘッドより小さい場合は、図１８や図１９に示したように、プロセッサコア２はＣ２ステート以降で電源供給を遮断すればよい。逆に、プロセッサコア２の復帰のオーバーヘッドがキャッシュメモリ３の復帰のオーバーヘッドよりも小さい場合は、図２０に示したように、Ｃ１ステートでプロセッサコア２への電源供給を遮断すればよい。
【００６０】
図２１はＣステートの第４例を示す図である。図２１は、図２０よりも状態遷移数が多く、図１９のＣ１，Ｃ２ステートをＣ２，Ｃ３ステートにずらすとともに、新たにＣ１ステートを追加したものである。図２１のＣ１ステートでは、プロセッサコア２に対応する第１ブロック３１と、キャッシュ制御部１３および誤り訂正コントローラ１４に対応する第２ブロック３２とへの電源供給が遮断される。これにより、図２１では、Ｃ１ステートからＣ０ステートへの復帰と、Ｃ２ステートからＣ１ステートへの復帰とを迅速に行うことができる。ただし、図２１のＣ１ステートは、図２０のＣ１ステートよりも、電源電圧を供給する面積が大きいため、消費電力が増大するおそれがある。よって、図２１のＣ１ステートに留まる時間ができるだけ短くなるように設計を行うのが望ましい。
【００６１】
このように、第１の実施形態では、キャッシュメモリ３内のキャッシュデータ部２１とタグ部２２に記憶される各データの冗長符号を、プロセッサコア２の動作状態に応じて、不揮発メモリ部１１と揮発メモリ部１２のいずれかに記憶するため、冗長符号を迅速に書き込めるとともに、電源遮断時や電源復帰直後に冗長符号が消失してしまう不具合が起きなくなる。より具体的には、プロセッサコア２が通常動作をしているときは、揮発メモリ部１２に冗長符号を書き込むため、冗長符号の書き込みを高速に行うことができる。また、電源遮断時には、揮発メモリ部１２から不揮発メモリ部１１に冗長符号をコピーするため、電源を遮断しても、冗長符号が消失するおそれがない。さらに、電源復帰直後には、不揮発メモリ部１１から揮発メモリ部１２に冗長符号をコピーするため、過去に生成した冗長符号を有効利用でき、電源復帰後にプロセッサコア２が通常動作を再開するまでの時間を短縮できる。
【００６２】
（第２の実施形態）
以下に説明する第２の実施形態は、誤り訂正コントローラ１４内にライトバッファを設けるものである。
【００６３】
第２の実施形態は、キャッシュメモリ３内の誤り訂正コントローラ１４の内部構成が図１４とは一部異なる他は、第１の実施形態と共通する。よって、以下では、相違点を中心に説明する。
【００６４】
図２２は第２の実施形態による誤り訂正コントローラ１４の内部構成を示すブロック図である。図２２の誤り訂正コントローラ１４は、図１４の構成に加えて、ライトバッファ（一時記憶部）５７を有する。ライトバッファ５７は、冗長符号フローコントローラ５３と不揮発冗長符号記憶部２３との間に設けられている。
【００６５】
誤り訂正コントローラ１４は、データ冗長符号とタグ冗長符号を揮発メモリ部１２に書き込む際に、ライトバッファ５７にも書き込む。すなわち、誤り訂正コントローラ１４は、これら冗長符号を、揮発メモリ部１２とライトバッファ５７に並行して書き込む。ライトバッファ５７に書き込まれた冗長符号は、事後的（例えば、電源遮断時）に不揮発メモリ部１１に書き込まれる。すなわち、不揮発メモリ部１１は、ライトバッファ５７が書込み動作を行っていないときに冗長符号を順次記憶する。したがって、電源遮断時には、揮発メモリ部１２内の揮発冗長符号記憶部２４から不揮発メモリ部１１内の不揮発冗長符号記憶部２３に冗長符号のコピーを行わなくて済む。
【００６６】
なお、冗長符号を不揮発メモリ部１１に直接書き込む代わりにライトバッファ５７に書き込む理由は、不揮発メモリ部１１は、揮発メモリ部１２よりもデータ書き込みに時間がかかるためである。ライトバッファ５７をレジスタ回路等の高速書き込みが可能な回路で構成することにより、冗長符号を迅速に書き込むことができる。また、ライトバッファ５７に書き込んだ冗長符号は、所定のタイミングで、不揮発符号記憶部にコピーすることができる。
【００６７】
図２３はプロセッサコア２の通常書き込み動作時における第２の実施形態の冗長符号フローコントローラ５３の動作を説明する図である。図２３では、誤り訂正回路５２で生成されたデータ冗長符号とタグ冗長符号は、冗長符号フローコントローラ５３を介して、揮発メモリ部１２内の揮発冗長符号記憶部２４に記憶されるだけでなく、ライトバッファ５７にも並行して記憶される。これら冗長符号がライトバッファ５７にも記憶される点で図１０とは異なっている。
【００６８】
図２４はプロセッサコア２の通常読み出し動作時における第２の実施形態の冗長符号フローコントローラ５３の動作を説明する図である。図２４では、図１１と同様に、揮発冗長符号記憶部２４から読み出したデータ冗長符号とタグ冗長符号が冗長符号フローコントローラ５３を介してプロセッサコア２に送られる。
【００６９】
図２５は電源遮断時における第２の実施形態の冗長符号フローコントローラ５３の動作を説明する図である。図２５では、ライトバッファ５７に書き込んだ冗長符号のうち、まだ不揮発メモリ部１１内の不揮発冗長符号記憶部２３に記憶されていない冗長符号を不揮発冗長符号記憶部２３にコピーする。ライトバッファ５７内のすべての冗長符号が不揮発冗長符号記憶部２３にコピーされた場合は、プロセッサシステム１内の監視回路２７以外の回路ブロックへの電源供給が遮断される。
【００７０】
図２６は電源復帰直後における第２の実施形態の冗長符号フローコントローラ５３の動作を説明する図である。図２６では、図１３と同様に、不揮発メモリ部１１内の不揮発冗長符号記憶部２３に記憶されているデータ冗長符号とタグ冗長符号が、揮発メモリ部１２内の揮発冗長符号記憶部２４にコピーされる。また、コピーしている最中に、プロセッサコア２から読み出し要求または書き込み要求がある場合に備えて、不揮発冗長符号記憶部２３に記憶されているデータ冗長符号とタグ冗長符号に対応するアドレスがコピーアドレスレジスタ５４に記憶される。さらに、電源復帰直後にプロセッサコア２から読み出し要求があった場合には、図２７に示すように、不揮発冗長符号記憶部２３に記憶されているデータ冗長符号とタグ冗長符号は冗長符号フローコントローラ５３を介してプロセッサコア２に送られる。
【００７１】
図２８は第２の実施形態による監視回路２７のタイミング図である。図２８は、図１７と同様に、電源復帰直後からプロセッサコア２が動作を停止した後までのタイミングを示している。図２８において、電源の復帰時刻ｔ１からプロセッサコア２の動作停止時刻ｔ３までの監視回路２７の動作は図１７と同様である。
【００７２】
時刻ｔ３でプロセッサコア２が動作を停止すると、ライトバッファ５７に記憶された冗長符号を不揮発冗長符号記憶部２３にコピーする処理が行われる。監視回路２７は、ライトバッファ５７から不揮発冗長符号記憶部２３への冗長符号の記憶処理が終了した後に、ライトバッファ５７と不揮発メモリ部１１への電源供給を遮断する。
【００７３】
このように、第２の実施形態では、誤り訂正コントローラ１４内にライトバッファ５７を設けるため、電源遮断時に、揮発冗長符号記憶部２４から不揮発冗長符号記憶部２３に冗長符号をコピーしなくて済み、揮発冗長符号記憶部２４への電源供給をより速いタイミングで遮断できる。
【００７４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７５】
１  プロセッサシステム、２  マルチコア部、３  キャッシュメモリ、４  電源制御部、１０  ＣＭＯＳ部、１１  不揮発メモリ部、１２  揮発メモリ部、１３  キャッシュ制御部、１４  誤り訂正コントローラ、２１  キャッシュデータ部、２２  タグ部、２３  不揮発冗長符号記憶部、２４  揮発冗長符号記憶部、２５  第１電源回路、２６  第２電源回路、２７  監視回路、３１〜３９  第１〜第９ブロック、４１  不揮発メモリチップ、４２  ＣＭＯＳチップ、５１  Hit/Miss判定回路、５２  誤り訂正回路、５３  冗長符号フローコントローラ、５４  コピーアドレスレジスタ、５５  状態判定回路、５６  更新フラグ
【図１】
0006030085.tif 000002
【図２】
0006030085.tif 000003
【図３】
0006030085.tif 000004
【図４】
0006030085.tif 000005
【図５】
0006030085.tif 000006
【図６】
0006030085.tif 000007
【図７】
0006030085.tif 000008
【図８】
0006030085.tif 000009
【図９】
0006030085.tif 000010
【図１０】
0006030085.tif 000011
【図１１】
0006030085.tif 000012
【図１２】
0006030085.tif 000013
【図１３】
0006030085.tif 000014
【図１４】
0006030085.tif 000015
【図１５】
0006030085.tif 000016
【図１６】
0006030085.tif 000017
【図１７】
0006030085.tif 000018
【図１８】
0006030085.tif 000019
【図１９】
0006030085.tif 000020
【図２０】
0006030085.tif 000021
【図２１】
0006030085.tif 000022
【図２２】
0006030085.tif 000023
【図２３】
0006030085.tif 000024
【図２４】
0006030085.tif 000025
【図２５】
0006030085.tif 000026
【図２６】
0006030085.tif 000027
【図２７】
0006030085.tif 000028
【図２８】
0006030085.tif 000029