(57)【要約】 【課題】不揮発メモリに対する書込みの信頼性を向上する。【解決手段】メモリシステムは、複数のメモリセルを有する不揮発メモリと、不揮発メモリから読み出したデータに含まれる誤りを訂正する誤り訂正部と、不揮発メモリに対して所定数以上のデータの書き込みと書き込んだデータの読出とを行った場合の誤り率に基づいて、書き込んだデータに誤りがないか否かと、書き込んだデータに誤り訂正部にて訂正可能な誤りがあるか否かと、書き込んだデータに誤り訂正部にて訂正不可能な誤りがあるか否かと、を含む第１情報を格納する誤り情報記憶部と、第１情報に基づいて、不揮発メモリに対する読み出しおよび書込みの少なくとも一方を制御するアクセス制御部と、を備える。【選択図】図１
2018156463.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリセルを有する不揮発メモリと、
前記不揮発メモリから読み出したデータに含まれる誤りを訂正する誤り訂正部と、
前記不揮発メモリに対して所定数以上のデータの書き込みと書き込んだデータの読出とを行った場合の誤り率に基づいて、前記書き込んだデータに誤りがないか否かと、前記書き込んだデータに前記誤り訂正部にて訂正可能な誤りがあるか否かと、前記書き込んだデータに前記誤り訂正部にて訂正不可能な誤りがあるか否かと、を含む第１情報を格納する誤り情報記憶部と、
前記第１情報に基づいて、前記不揮発メモリに対する読み出しおよび書込みの少なくとも一方を制御するアクセス制御部と、を備える、メモリシステム。
【請求項２】
前記アクセス制御部は、所定個の前記メモリセルを単位として、前記不揮発メモリに対する読み出しおよび書込みの少なくとも一方を行い、
前記誤り情報記憶部は、前記所定個のメモリセルへのデータの書き込みを所定回数繰り返した場合の前記誤り率に基づいて、前記第１情報を格納する、請求項１に記載のメモリシステム。
【請求項３】
前記アクセス制御部は、前記誤り率を求める際に第１の書込み条件にて前記不揮発メモリにデータを書き込む制御を行い、前記誤り情報記憶部に前記第１情報が格納された後は、前記第１情報に基づいて、前記第１の書込み条件よりも書込み信頼性の低い第２の書込み条件にて前記不揮発メモリにデータを書き込む制御を行う、請求項１または２に記載のメモリシステム。
【請求項４】
前記不揮発メモリは、前記複数のメモリセル中の一部のメモリセルを置換可能な冗長セルをを備え、
前記アクセス制御部は、前記不揮発メモリに記憶されたデータの読み出し時に、前記第１情報に基づいて、前記不揮発メモリに記憶されたデータを前記誤り訂正部で訂正することなく読み出すか、前記誤り訂正部で訂正した後に読み出すか、または前記不揮発メモリに記憶されたデータを前記冗長セルに置換する、請求項１乃至３のいずれか一項に記載のメモリシステム。
【請求項５】
前記誤り情報記憶部は、前記不揮発メモリの内部に設けられる、請求項１乃至４のいずれか一項に記載のメモリシステム。
【請求項６】
前記不揮発メモリとは別個に設けられるメインメモリを備え、
前記誤り情報記憶部は、前記メインメモリの内部に設けられる、請求項１乃至５のいずれか一項に記載のメモリシステム。
【請求項７】
前記不揮発メモリとは別個に設けられるメインメモリを備え、
前記誤り情報記憶部は、前記不揮発メモリおよび前記メインメモリとは別個に設けられる、請求項１乃至５のいずれか一項に記載のメモリシステム。
【請求項８】
前記アクセス制御部は、前記第１情報に基づいて、前記不揮発メモリにデータを書き込む際の書込み電圧と、書込みパルス幅と、書込み電流と、書込み回数と、温度と、磁場と、の少なくとも一つを制御する、請求項１乃至７のいずれか一項に記載のメモリシステム。
【請求項９】
前記誤り情報記憶部に前記第１情報が格納された後に前記不揮発メモリの読み出しおよび書込みの少なくとも一方を行う際に生じた誤り回数をカウントする誤り回数カウント部を備え、
前記誤り情報記憶部は、前記第１情報に加えて、前記誤り回数に関する第２情報を格納し、
前記アクセス制御部は、前記第１情報および前記第２情報に基づいて、前記不揮発メモリにデータを書き込む際の書込み電圧と、書込みパルス幅と、書込み電流と、書込み回数と、温度と、磁場と、の少なくとも一つを制御する、請求項１乃至７のいずれか一項に記載のメモリシステム。
【請求項１０】
前記不揮発メモリは、読み書き可能なデータを格納する第１領域と、前記第１領域に格納されたデータの誤りを訂正するのに用いられる誤り訂正符号を格納する第２領域と、を備え、
前記第２情報に基づいて、前記不揮発メモリ内の前記第２領域のサイズを調整する領域サイズ調整部をさらに備える、請求項９に記載のメモリシステム。
【請求項１１】
前記不揮発メモリは、キャッシュラインを単位としてデータの読み出しおよび書き込みの少なくとも一方を行うキャッシュメモリであり、
前記誤り情報記憶部は、前記キャッシュラインを単位として前記第１情報および前記第２情報を格納し、
前記領域サイズ調整部は、前記キャッシュラインを単位として前記第２領域のサイズを調整する請求項１０に記載のメモリシステム。
【請求項１２】
前記不揮発メモリは、複数のウェイを有するセットアソシアティブ構造であり、
前記ウェイは、前記キャッシュラインのデータビット幅を有し、
前記領域サイズ調整部は、前記不揮発メモリのセットごとに、前記誤り情報記憶部に格納された情報に基づいて、ウェイを単位として前記第２領域のサイズを調整する請求項１１に記載のメモリシステム。
【請求項１３】
前記不揮発メモリは、複数のウェイを有するセットアソシアティブ構造であり、
セットごとにウェイ単位で前記第１領域または前記第２領域が設定され、
前記第１情報は、セットごとに設けられ、
前記第２情報は、各セットごとに、前記第２領域として割り当てられているウェイを特定する情報である請求項１１に記載のメモリシステム。
【請求項１４】
前記領域サイズ調整部は、前記第２情報に基づいて、前記不揮発メモリ内で前記第２領域をシフトさせる請求項１０乃至１３のいずれか一項に記載のメモリシステム。
【請求項１５】
前記領域サイズ調整部は、前記第２情報に基づいて、前記誤り回数が所定回数に達すると、前記不揮発メモリ内で前記第２領域をシフトさせる請求項１４に記載のメモリシステム。
【請求項１６】
前記アクセス制御部は、前記不揮発メモリ内の前記メモリセルに第１論理データを書き込んだときに前記第１論理データに対して反転論理の第２論理データが読み出される誤り率が、前記第２論理データを書き込んだときに前記第１論理データが読み出される誤り率よりも高い場合に、前記第１論理データを書き込んで、この書き込んだデータを読み出す際にビットを反転する、請求項１乃至１５のいずれか一項に記載のメモリシステム。
【請求項１７】
前記不揮発メモリは、ＭＲＡＭ（Magnetoresistive Random Access Memory）を含む請求項１乃至１６のいずれか１項に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発メモリを備えたメモリシステムに関する。
【背景技術】
【０００２】
メインメモリやキャッシュメモリに安価で大容量かつ高速の不揮発メモリを用いる検討が行われている。不揮発メモリの中でも、ＭＲＡＭ（Magnetoresistive Random Access Memory）はデータ保持の観点で不揮発性を有するため，ＳＲＡＭ（Static RAM）やＤＲＡＭ（Dynamic RAM）の代替候補として注目されている。
【０００３】
ＭＲＡＭなどの一部の不揮発メモリは、構成材料の状態変化を利用してデータの論理を保持するため、書込み電圧、アクセス回数、経年劣化、および温度や湿度などの環境変化により、誤りの発生率（以下、誤り率）が高くなるという問題がある。
【０００４】
そこで、不揮発メモリの出荷前に、不揮発メモリに対する書込みと読み出しを行って、誤り率を検証するスクリーニングを行うことが考えられる。このスクリーニングにて誤り率が大きいと判断されたメモリセルについては、冗長セルに置換することも考えられる。
【０００５】
しかしながら、ＭＲＡＭは、書込み電圧等の書込み条件や、アクセス回数や、経年劣化、温度や磁場等の環境条件によって、書込み特性が変化するため、出荷前のスクリーニングだけでは誤り率を特定することはできない。
【０００６】
また、書込み条件や経年劣化、環境条件などによる誤り率の増加を見越して、余裕を見て、多めに冗長セル領域を確保すると、その分だけ不揮発メモリの面積が大きくなり、高集積化が困難になるとともに、ビット単価も上昇してしまう。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国公開公報US 2006/0080572
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明の一態様は、不揮発メモリに対する書込みの信頼性を向上可能なメモリシステムを提供するものである。
【課題を解決するための手段】
【０００９】
本実施形態によれば、複数のメモリセルを有する不揮発メモリと、
前記不揮発メモリから読み出したデータに含まれる誤りを訂正する誤り訂正部と、
前記不揮発メモリに対して所定数以上のデータの書き込みと書き込んだデータの読出とを行った場合の誤り率に基づいて、前記書き込んだデータに誤りがないか否かと、前記書き込んだデータに前記誤り訂正部にて訂正可能な誤りがあるか否かと、前記書き込んだデータに前記誤り訂正部にて訂正不可能な誤りがあるか否かと、を含む第１情報を格納する誤り情報記憶部と、
前記第１情報に基づいて、前記不揮発メモリに対する読み出しおよび書込みの少なくとも一方を制御するアクセス制御部と、を備える、メモリシステムが提供される。
【図面の簡単な説明】
【００１０】
【図１】第１の実施形態によるメモリシステムを備えたプロセッサシステムの概略構成を示すブロック図。
【図２】何らかの書込み不良がある場合とない場合のデータキャッシュ部の誤り率を示すグラフ。
【図３】キャッシュメモリ内のデータキャッシュ部の内部構成を概略的に示す回路図。
【図４Ａ】誤り情報記憶部のデータ構成の第１例を示す図。
【図４Ｂ】誤り情報記憶部のデータ構成の第２例を示す図。
【図５】不揮発メモリの出荷前に行われる初期スクリーニングの処理手順の一例を示すフローチャート。
【図６】キャッシュコントローラが行う不揮発メモリの書込み処理を示すフローチャート。
【図７】第２の実施形態による誤り情報記憶部のデータ構成を示す図。
【図８】第２の実施形態によるキャッシュコントローラの処理手順を示すフローチャート。
【図９】書込み処理の詳細なフローチャート。
【図１０】第３の実施形態によるメモリシステムを備えたプロセッサシステムの概略構成を示すブロック図。
【図１１】セットアソシアティブのキャッシュメモリの構造を示す図。
【図１２】（ａ）〜（ｄ）は第１領域と第２領域の使用態様を説明する図。
【図１３】キャッシュメモリの内部構成をより詳細に示すブロック図。
【図１４】データのビット数と誤り訂正可能なビット数との関係を示す図。
【図１５】タグ部１６内のタグ情報格納部に格納されるタグ情報の詳細情報を示す図。
【図１６】ローテーション制御部を有するキャッシュメモリの構造を示す図。
【図１７】第３の実施形態によるキャッシュコントローラの処理動作の第１例を示すフローチャート。
【図１８】図１７のステップＳ５１のリフレッシュ動作の詳細フローチャート。
【図１９】キャッシュコントローラの処理動作の第２例を示すフローチャート。
【図２０】ウェイ内での第１領域と第２領域のサイズの可変調整を説明する図。
【図２１】第４の実施形態によるメモリシステム１を備えたプロセッサシステム２の概略構成を示すブロック図。
【図２２】メインメモリに対する書込みおよび読み出しを行う場合の処理手順を示すフローチャート。
【発明を実施するための形態】
【００１１】
以下、図面を参照して本発明の実施形態を説明する。
【００１２】
（第１の実施形態）
図１は第１の実施形態によるメモリシステム１を備えたプロセッサシステム２の概略構成を示すブロック図である。図１のプロセッサシステム２は、メモリシステム１と、プロセッサ３と、電源管理ユニット４と、を備えている。
【００１３】
メモリシステム１は、プロセッサ３に接続されており、プロセッサ３によってアクセスされる。プロセッサ３は、複数のコア５を有するマルチコア構成である。コア５の数には特に制限はない。なお、プロセッサ３は、単一のコア５を有するシングルコア構成でもよい。各コア５は、不図示の演算器と、１次キャッシュメモリ（以下、Ｌ１キャッシュ）６とを有する。なお、プロセッサ３内に、２次キャッシュメモリ（以下、Ｌ２キャッシュ）以降の高次キャッシュメモリが内蔵される場合もありうるが、本明細書では、プロセッサ３内にＬ１キャッシュ６のみが内蔵される例を説明する。
【００１４】
電源管理ユニット４は、プロセッサシステム２の内部の各回路ブロックに対して電源電圧を供給するか否かを制御する。また、電源管理ユニット４は、プロセッサ３に与える電源電圧レベルを段階的に切替制御してもよい。
【００１５】
図１のメモリシステム１は、メモリ管理ユニット（ＭＭＵ：Memory Management Unit）１１と、キャッシュメモリ１２と、メインメモリ１３とを備えている。ＭＭＵ１１は、プロセッサ３が発行した仮想アドレスを物理アドレスに変換する。ＭＭＵ１１は、プロセッサ３がアクセスしたメモリアドレスの履歴を元に、メインメモリ１３内に格納されている不図示のページテーブルを参照し、アクセスされているアドレスに該当するページテーブルエントリーを取得して、仮想アドレスと物理アドレスとの変換テーブルを更新する。このページテーブルは一般にはＯＳ（Operating System）が管理するが、キャッシュメモリ１２内にページテーブルを管理する機構を実装してもよい。
【００１６】
キャッシュメモリ１２は、例えばＬ２キャッシュ１２である。プロセッサ３がＬ１キャッシュ６とＬ２キャッシュ１２を内蔵している場合は、キャッシュメモリ１２は３次キャッシュメモリ（Ｌ３キャッシュ）となる。
【００１７】
キャッシュメモリ１２は、キャッシュコントローラ１４と、誤り訂正コントローラ１５と、タグ部１６と、データキャッシュ部１７と、冗長回路１８とを有する。キャッシュメモリ１２の少なくとも一部は不揮発メモリで構成されている。本実施形態では、不揮発メモリとしてＭＲＡＭを用いている。本実施形態によるＭＲＡＭは、例えばスピン注入磁化反転方式にてデータの書き込みを行う。スピン注入磁化反転方式は、各メモリセルごとに磁気トンネル接合（ＭＴＪ：Magnetic Tunnel Junction）素子を有する。ＭＴＪ素子は、磁性層と絶縁膜が積層された積層構造を有する。より具体的には、ＭＴＪ素子は、一般的に磁化方向が固定された磁化固着層、絶縁膜、磁化方向が１軸方向に可変な記憶層が積層された構造を有する。記憶層と固着層の磁化方向が同一の場合は例えば「０」を記憶していることに対応し、反平行の場合は例えば「１」を記憶していることに対応する。磁化方向は、電流の向きで可変である。
【００１８】
キャッシュメモリ１２の中で、少なくともデータキャッシュ部１７は不揮発メモリで構成されている。キャッシュメモリ１２内のタグ部１６は、ＳＲＡＭ等の揮発メモリで構成してもよいし、不揮発メモリで構成してもよい。
【００１９】
キャッシュコントローラ１４は、アクセス制御部１９を有する。アクセス制御部１９は、キャッシュメモリ１２に対するアクセスを制御する。アクセス制御部１９の詳細については、後述する。
【００２０】
誤り訂正コントローラ１５は、データキャッシュ部１７から読み出されたデータに誤りがあるか否かを検出し、訂正可能な誤りがある場合には、誤り訂正を行う。
【００２１】
データキャッシュ部１７は、所定ビット数（例えば５１２ビット）のキャッシュライン単位でアクセス可能なキャッシュラインデータを格納する。タグ部１６は、各キャッシュラインデータのアドレス情報を格納する。
【００２２】
冗長回路１８は、データキャッシュ部１７に格納された任意のキャッシュラインデータに、誤り訂正コントローラ１５にて訂正不可能なビット数の誤りが含まれている場合に、キャッシュラインを単位として格納先を冗長ラインに置換する処理を行う。冗長回路１８には、複数のキャッシュライン分の複数の冗長ラインが設けられている。
【００２３】
この他、図１のメモリシステム１は、誤り情報記憶部２０を備えている。誤り情報記憶部２０は、データキャッシュ部１７に対して所定数以上のデータの書き込みと書き込んだデータの読出とを行った場合の誤り率に基づいて、書き込んだデータに誤りがないか否かと、書き込んだデータに誤り訂正コントローラ１５にて誤り訂正可能な誤りがあるか否かと、書き込んだデータに誤り訂正コントローラ１５にて誤り訂正不可能な誤りがあるか否かとに関する情報を格納する。
【００２４】
図２は何らかの書込み不良がある場合とない場合のデータキャッシュ部１７の誤り率を示すグラフである。図２の横軸は書き込み電圧の相対値である。横軸の０より右側は、データ「０」を「１」へ書き換える電圧の相対値であり、０より左側は、データ「１」を「０」へ書き換える電圧の相対値である。図２の縦軸は、データキャッシュ部１７のエラー発生率であり、１０のべき乗の数を示している。図２のグラフｇ１は書込み不良傾向がない場合、グラフｇ２は書込み不良傾向がある場合を示している。グラフｇ１とｇ２を比較すればわかるように、書込み不良がある場合とない場合では、１０3＝１０００回程度のデータ書き込みを行うと、誤り率に顕著な差が現れる。この傾向を考慮し、第一次のスクリーニング方法として、キャッシュラインに１０００回程度のデータ書き込みを行い、エラー発生率を調査する。
【００２５】
そこで、誤り情報記憶部２０は、少なくともデータキャッシュ部１７として用いられる不揮発メモリの出荷前の初期スクリーニングにおいて、データキャッシュ部１７に対して所定数（例えば１０００回）以上のデータ書き込みを行って誤り率を検出し、検出した誤り率に基づいて、データキャッシュ部１７が正常すなわち誤りがないか否かと、誤りはあるものの訂正可能であるか否かと、訂正不可能か否かと、を判別する情報を記憶する。
【００２６】
図３はキャッシュメモリ１２内のデータキャッシュ部１７の内部構成を概略的に示す回路図である。図３の例では、ワード線ＷＬ方向に５１２個のＭＲＡＭセル１７ａが配置されている。各ＭＲＡＭセル１７ａは、トランジスタ１７ｂと、ＭＴＪ素子１７ｃとを有する。ワード線ＷＬ方向に配置された５１２個のトランジスタ１７ｂのゲートは、共通のワード線ＷＬに接続されている。各トランジスタ１７ｂのドレインは、対応するビット線ＢＬに接続され、各トランジスタ１７ｂのソースはＭＴＪ素子１７ｃの一端に接続されている。ＭＴＪ素子１７ｃの他端には、対応するソース線ＳＬが接続されている。
【００２７】
不揮発メモリの初期スクリーニングでは、各キャッシュラインにデータを書き込んで、書き込んだデータを読み出して誤り率を検出する処理を２回行う。これにより、各キャッシュラインに対して、５１２×２＝１０２４回のデータ書き込みを行ったことになり、図２で示したような書き込み不良傾向のビットを初期的に検出する。
【００２８】
なお、図３では、１本のビット線ＢＬと１本のソース線ＳＬとの間に１個のメモリセル１７ａを配置する例を示しているが、一対のビット線ＢＬの間に一対のメモリセルを配置する構成も考えられる。この場合、一対のメモリセル内の一対のＭＴＪ素子の抵抗値が共に低抵抗または高抵抗になるエラーが発生しても、各ＭＴＪ素子の抵抗値を参照セル内の参照抵抗と比較することで、どちらのＭＴＪ素子でエラーが発生したかを正しく検知できる。
【００２９】
図４Ａは誤り情報記憶部２０のデータ構成の第１例を示す図である。図４Ａの誤り情報記憶部２０は、各キャッシュラインごとにスタックフラグ情報を有する。このスタックフラグ情報は、例えば、対応するキャッシュラインに誤りがない場合には「０」、誤り訂正可能なビット誤りがある場合には「１」、誤り訂正不可能なビット誤りがある場合には「２」に設定される。スタックフラグ情報が「２」に設定された場合は、このキャッシュラインは、冗長回路１８内の冗長ラインに置換されることを示している。このように、図４Ａのスタックフラグ情報は、初期スクリーニングにおける所定数以上のデータ書き込みによる誤り率の検出結果の情報を含んでいる。
【００３０】
なお、スタックフラグ情報に格納される値や各値が示す内容は任意であり、種々の変形例が考えられる。例えば、任意のキャッシュラインデータの中に、誤り訂正コントローラ１５にて訂正可能な誤りが含まれる場合に、何ビットの誤りを含むかによって、スタックフラグ情報の値を変えてもよい。
【００３１】
図４Ｂは誤り情報記憶部２０のデータ構成の第２例を示す図である。図４Ｂは、キャッシュライン内に２ビットまでの誤りビットがある場合に誤り訂正コントローラ１５にて誤り訂正が可能な例を示している。図４Ｂのスタックフラグ情報は、対応するキャッシュラインに誤りがない場合には「０」、誤り訂正可能な誤りビットを１ビット含む場合には「１」、誤り訂正可能な誤りビットを２ビット含む場合には「２」、誤り訂正不可能な３ビット以上の誤りビットを含む場合には「３」に設定される。
【００３２】
図４Ｂの場合、スタックフラグ情報を確認するだけで、対応するキャッシュラインの誤り訂正が可能かどうかと、対応するキャッシュラインに含まれる誤りビットの数を特定できる。したがって、スタックフラグ情報の値によって、誤りビットの数に応じた書込み条件を選択可能となる。
【００３３】
図５は不揮発メモリの出荷前に行われる初期スクリーニングの処理手順の一例を示すフローチャートである。このフローチャートは、不図示の半導体検査装置を用いて行われる。以下では、データキャッシュ部１７として用いられる不揮発メモリの初期スクリーニングについて説明する。また、このフローチャートは、図４Ｂのスタックフラグ情報が誤り情報記憶部２０に格納されている例を示している。
【００３４】
まず、上述したように、データキャッシュ部１７の各キャッシュラインごとに２回ずつデータの書き込みと、書き込んだデータの読出を行って、キャッシュライン内に誤りビットが存在するか否かを検証する（ステップＳ１）。その結果、誤りビットが存在しないと判定されると（ステップＳ１でＹＥＳ）、スタックフラグ情報を０とする（ステップＳ２）。
【００３５】
ステップＳ１がＮＯの場合、キャッシュライン内に１ビットの誤りビットがあり、かつ誤り訂正コントローラ１５での誤り訂正が可能であるか否かを判定する（ステップＳ３）。ステップＳ３がＹＥＳの場合、スタックフラグ情報を１とする（ステップＳ４）。
【００３６】
ステップＳ３がＮＯの場合、キャッシュライン内に２ビットの誤りビットがあり、かつ誤り訂正コントローラ１５での誤り訂正が可能であるか否かを判定する（ステップＳ５）。ステップＳ４がＹＥＳの場合、スタックフラグ情報を２とする（ステップＳ６）。
【００３７】
ステップＳ５がＮＯの場合、キャッシュライン内に３ビット以上の誤りビットがあり、かつ誤り訂正コントローラ１５での誤り訂正が不可能であると判断して、スタックフラグ情報を３とする（ステップＳ７）。
【００３８】
次に、データキャッシュ部１７の全キャッシュラインについてスタックフラグ情報の設定を行ったか否かを判断し（ステップＳ８）、まだ設定を行っていないキャッシュラインがある場合には、ステップＳ１以降の処理を繰り返す。
【００３９】
図５の初期スクリーニングを行った不揮発メモリは、出荷後に種々のユーザ装置に組み込まれて、通常のデータ書込みおよび読み出し動作が行われる。ＭＲＡＭからなる不揮発メモリは、書込み条件を変えることで、データの書き込み信頼性が大きく変化する。ここで、書込み条件とは、例えば、データキャッシュ部１７にデータを書き込む際の書込み電圧と、書込みパルス幅と、書込み電流と、書込み回数と、温度と、磁場との少なくとも一つを含む条件である。ＭＲＡＭからなる不揮発メモリの書込み信頼性は、書込み電圧が高いほど、書込みパルス幅が長いほど、書込み電流が大きいほど、書込み回数が多いほど、磁場のアシスト機能が高いほど、高くなる。
【００４０】
初期スクリーニング時に不揮発メモリにデータを書き込む際の書込み条件は、出荷後の通常のデータ書き込み時にデータを書き込む際の書込み条件よりも、書込み信頼性を高くするのが望ましい。これにより、初期スクリーニングで書込みエラーが起きる頻度を通常のデータ書き込み時に書込みエラーが起きる頻度よりも下げることができ、初期スクリーニングでは粗く書込みエラーのチェックを行うことができる。したがって、初期スクリーニングで冗長ラインに置換されるキャッシュラインの数を減らすことができる。
【００４１】
図５の初期スクリーニングを行った不揮発メモリが出荷されて、図１のプロセッサシステム２に組み込まれると、キャッシュコントローラ１４は、プロセッサ３の書込み要求に応じて、通常の書込み処理を行う。図６はキャッシュコントローラ１４が行う不揮発メモリの書込み処理を示すフローチャートである。
【００４２】
まず、スタックフラグ情報が０か否かを判定する（ステップＳ１１）。スタックフラグ情報が０であれば、第１の書込み条件を選択してデータキャッシュ部１７への書込みを行う（ステップＳ１２）。ステップＳ１１がＮＯの場合は、スタックフラグ情報が１か否かを判定する（ステップＳ１３）。スタックフラグ情報が１であれば、第２の書込み条件を選択してデータキャッシュ部１７への書込みを行う（ステップＳ１４）。第２の書込み条件は、第１の書込み条件よりも、書込み信頼性の高い条件である。より具体的には、第２の書込み条件は、第１の書込み条件よりも、書込み電圧を高くすることと、書込みパルス幅を長くすることと、書込み電流を大きくすることと、書込み回数を増やすことと、温度を高くすることと、磁場のアシスト機能を高めることとの少なくとも一つを実行する。
【００４３】
ステップＳ１３がＮＯの場合は、スタックフラグ情報が２か否かを判定する（ステップＳ１５）。スタックフラグ情報が２であれば、第３の書込み条件を選択してデータキャッシュ部１７への書込みを行う（ステップＳ１６）。第３の書込み条件は、第２の書込み条件よりも、書込み信頼性の高い条件である。
【００４４】
ステップＳ１５がＮＯの場合は、スタックフラグ情報が３であると判断して、第４の書込み条件を選択してデータキャッシュ部１７への書込みを行う（ステップＳ１７）。スタックフラグ情報が３の場合は、誤りエラーのあるキャッシュラインを冗長ラインに置換するため、第４の書込み条件は、第１の書込み条件と同程度で構わない。
【００４５】
図５に示すように、キャッシュコントローラ１４は、誤り訂正コントローラ１５で誤り訂正を行うビット数が増えるほど、書込み信頼性の高い書込み条件を選択してデータの書き込みを行うため、誤ったビットを正しく訂正でき、誤ったデータがデータキャッシュ部１７に書き込まれるおそれを低減できる。
【００４６】
図１では、誤り情報記憶部２０をキャッシュメモリ１２の内部に設ける例を示したが、誤り情報記憶部２０は、キャッシュメモリ１２以外の場所に設けてもよい。例えば、メインメモリ１３の内部に誤り情報記憶部２０を設けてもよいし、キャッシュメモリ１２とメインメモリ１３以外の場所に誤り情報記憶部２０を設けてもよい。また、キャッシュメモリ１２の内部に誤り情報記憶部２０を設ける場合、タグ部１６またはデータキャッシュ部１７に誤り情報記憶部２０を設けてもよい。
【００４７】
このように、第１の実施形態では、ＭＲＡＭからなる不揮発メモリの出荷前に初期スクリーニングを行って、不揮発メモリの誤り率に関するスタックフラグ情報を誤り情報記憶部２０に記憶しておく。したがって、不揮発メモリの出荷後の通常の書き込み動作時に、スタックフラグ情報に基づいて、最適な書込み条件を設定してデータの書き込みを行うことができる。よって、不必要に冗長回路１８への置換を行わなくて済むとともに、誤り訂正ができないような誤ったデータを不揮発メモリに書き込むおそれもなくなる。
【００４８】
（第２の実施形態）
第２の実施形態は、不揮発メモリの出荷後における不揮発メモリの読み出しおよび書き込み時の誤り回数をカウントして、そのカウント数に応じて不揮発メモリのアクセス制御を行うものである。
【００４９】
第２の実施形態によるメモリシステム１は、図１と同様のブロック構成を備えているが、誤り情報記憶部２０のデータ構成が第１の実施形態とは異なっている。
【００５０】
図７は第２の実施形態による誤り情報記憶部２０のデータ構成を示す図である。図７の誤り情報記憶部２０は、図４Ａまたは図４Ｂのスタックフラグ情報に加えて、不揮発メモリの出荷後に読み出しおよび書込み処理を行った際に生じた誤り回数を各キャッシュラインごとに記憶している。この回数は、図１に破線で示すように、キャッシュメモリ１２内の誤り回数カウンタ（誤り回数カウント部）２１でカウントされる。このように、図７の誤り情報記憶部２０は、不揮発メモリの出荷前の初期スクリーニングで検出された誤り率に関するスタックフラグ情報と、出荷後に読み出しおよび書込み処理を行った際に生じた誤り回数情報とを格納している。
【００５１】
図８は第２の実施形態によるキャッシュコントローラ１４の処理手順を示すフローチャートである。まず、プロセッサ３がメモリシステム１に対してアクセス要求を行ったアドレスがタグ部１６内のアドレスにヒットしたか否かを判定する（ステップＳ２１）。ヒットした場合は、アクセス要求が書込みか否かを判定する（ステップＳ２２）。書込みの場合は、図９に詳細を示す書込み処理を行う（ステップＳ２３）。
【００５２】
書込み処理では、図９に示すように、書込み要求を行ったアドレスに対応するキャッシュラインのスタックフラグ情報を誤り情報記憶部２０から取得し（ステップＳ４１）、取得したスタックフラグ情報に対応する書込み条件を図６の処理にて選択する（ステップＳ４２）。ここでは、誤り情報記憶部２０に格納されている誤り回数の値も考慮に入れて、書込み条件を設定してもよい。すなわち、不揮発メモリの出荷前に行われる初期スクリーニングにおけるスタックフラグ情報だけでなく、不揮発メモリの出荷後における読み出しおよび書込み処理時の誤り回数も考慮に入れて、書込み条件を設定してもよい。例えば、誤り回数が多いほど、書込み電圧を高くしたり、書込みパルス幅を広げたり、書込み電流を多くしたり、書込み回数を増やしたり、温度を高くしたり、磁場によるアシストを行ったりしてもよい。
【００５３】
次に、ステップＳ４２で選択した書込み条件にて、データキャッシュ部１７への書込みを行い、書き込んだデータを読み出すベリファイを行う（ステップＳ４３）。次に、ベリファイが一致したか否かを判定し（ステップＳ４４）、一致した場合には、ライトバックモードを選択する（ステップＳ４５）。ライトバックモードとは、キャッシュメモリ１２に書き込んだデータを、その後の所定のタイミングで、メインメモリ１３に書き戻すモードである。
【００５４】
ステップＳ４４でベリファイが不一致と判定されると、誤り回数を計測する誤り回数カウンタ２１をカウントアップする（ステップＳ４６）。次に、誤り回数カウンタ２１が所定の閾値未満であるか否かを判定する（ステップＳ４７）。回数が閾値未満と判定されると、ステップＳ４８に進んで、ライトバックモードを選択する。回数が閾値以上と判定されると、ライトスルーモードを選択する（ステップＳ４９）。ライトスルーモードとは、キャッシュメモリ１２にデータを書き込むのに並行して、同じデータをメインメモリ１３にも書き込むモードである。
【００５５】
ステップＳ２２で、書込みではなく読み出しと判定されると、プロセッサ３からのアクセス要求に従って、キャッシュメモリ１２からデータを読み出す（ステップＳ２４）。次に、読み出したデータに誤りがあるか否かを誤り訂正コントローラ１５にて判定する（ステップＳ２５）。誤りがあると判定された場合、誤り回数カウンタ２１のカウント値をカウントアップするとともに（ステップＳ２６）、その誤りが誤り訂正コントローラ１５にて訂正可能か否かを判定する（ステップＳ２７）。誤り訂正可能と判定された場合、誤り訂正コントローラ１５にて誤りを訂正した上でプロセッサ３に伝送する（ステップＳ２８）。ステップＳ２７で誤り訂正不可能と判定された場合、メインメモリ１３からデータを読み出す（ステップＳ２９）。ステップＳ２５で誤りがないと判定されると、読み出したデータをプロセッサ３に伝送する（ステップＳ３０）。
【００５６】
ステップＳ２９の処理に並行して、誤り訂正不可能と判定されたキャッシュラインを無効として、冗長回路１８の冗長ラインへの置換処理を行ってもよい。
【００５７】
一方、ステップＳ２１でヒットしなかったと判定された場合、書込みを行うか否かを判定する（ステップＳ３１）。書込みを行う場合には、図９に示す書込み処理を行う（ステップＳ３２）。読み出しを行う場合には、プロセッサ３から読み出し要求のあったアドレスのデータをメインメモリ１３から読み出して、プロセッサ３に伝送する（ステップＳ３３）。
【００５８】
このように、第２の実施形態では、不揮発メモリの出荷前の初期スクリーニングだけでなく、不揮発メモリの出荷後の読み出しおよび書込み時の誤り回数も考慮に入れて、キャッシュメモリ１２への書込み条件と書込みモードを選択するため、不揮発メモリに書き込むデータの信頼性を向上できる。
【００５９】
（第３の実施形態）
第３の実施形態は、誤り情報記憶部２０に格納された情報に基づいて、誤り訂正符号のデータ量を可変させるものである。
【００６０】
図１０は第３の実施形態によるメモリシステム１を備えたプロセッサシステム２の概略構成を示すブロック図である。図１０のメモリシステム１は、図１とは異なる内部構成のキャッシュコントローラ１４を備えている。また、図１０のメモリシステム１内のデータキャッシュ部１７は、例えば５１２ビットのキャッシュラインごとに、プロセッサ３が読み書きを行うデータを格納する第１領域１７ｄと、第１領域１７ｄ内のデータの誤りを訂正するための誤り訂正符号を格納する第２領域１７ｅとを有する。
【００６１】
図１０のキャッシュコントローラ１４は、領域サイズ調整部２２と、リフレッシュ制御部２３とを有する。領域サイズ調整部２２は、第２領域１７ｅに格納された情報に基づいて、不揮発メモリ内の第２領域１７ｅのサイズを調整する。リフレッシュ制御部２３は、データキャッシュ部１７内の第１領域１７ｄに書き込まれたデータを定期的に読み出して誤り訂正コントローラ１５に供給する。リフレッシュ制御部２３を設けて、データキャッシュ部１７内に書き込まれたデータを定期的に読み出して再書き込みを行うことで、不揮発メモリ内のデータの論理が意図せずに反転するという不具合が起きなくなる。
【００６２】
誤り訂正コントローラ１５は、リフレッシュ制御部２３が読み出したデータに誤りがあるか否かを検査し、誤りがあれば誤り訂正を行う。
【００６３】
図１０のメモリシステム１は、図７と同様のデータ構成の誤り情報記憶部２０を有する。この誤り情報記憶部２０は、例えばキャッシュコントローラ１４の内部に設けられている。ただし、誤り情報記憶部２０の配置場所には特に制限はない。
【００６４】
本実施形態によるキャッシュメモリ１２は、セットアソシアティブ構造を有する。図１１はセットアソシアティブのキャッシュメモリ１２の構造を示す図である。図１１に示すように、本実施形態によるキャッシュメモリ１２は、複数のウェイに分かれている。各ウェイは、キャッシュライン分のデータビット幅を有する。複数のウェイの特定のセットは、プロセッサ３からアクセス要求のあったアドレスの一部であるインデックスアドレスにて選択される。特定のセットには、複数のウェイ数分のキャッシュラインが含まれている。キャッシュラインは、例えば５１２ビットである。
【００６５】
本実施形態では、インデックスアドレスにて選択された複数のウェイ数分のキャッシュラインのうち、任意の数のウェイを、誤り訂正符号を格納するための第２領域１７ｅとして使用できるようにしている。第２領域１７ｅとして使用するウェイの数は、インデックスアドレスごと、すなわちセットごとに可変としてもよい。このように、本実施形態では、セットごとに、ウェイ単位で、第１領域１７ｄと第２領域１７ｅのサイズを可変調整することができる。
【００６６】
図１２（ａ）は１６ウェイのすべてを第１領域１７ｄとして使用する例である。図１２（ｂ）は１６ウェイのうち１５ウェイを第１領域１７ｄとして使用し、残りの１ウェイを第２領域１７ｅとして使用する例である。図１２（ｃ）は１６ウェイのうち１４ウェイを第１領域１７ｄとして使用し、残りの２ウェイを第２領域１７ｅとして使用する例である。図１２（ｄ）は１６ウェイのうち１３ウェイを第１領域１７ｄとして使用し、残りの３ウェイを第２領域１７ｅとして使用する例である。
【００６７】
図１２（ｂ）の場合は、例えば第１領域１７ｄ内のデータの２５６ビットごとに１ビットの誤り訂正が可能である。すなわち、１キャッシュライン（１ウェイ）が５１２ビットであるとすると、１ウェイを半分のデータビット幅に分割して、各分割領域（２５６ビット）ごとに１ビットの誤り訂正を行えるため、１ウェイでは２ビットの誤り訂正が可能となる。
【００６８】
図１２（ｃ）の場合は、例えば第１領域１７ｄ内のデータの６４ビットごとに１ビットの誤り訂正が可能である。この場合は、１ウェイを４分割し、各分割領域（６４ビット）ごとに１ビットの誤り訂正を行えるため、１ウェイでは４ビットの誤り訂正が可能となる。
【００６９】
図１２（ｄ）の場合は、例えば第１領域１７ｄ内のデータの３２ビットごとに１ビットの誤り訂正が可能である。この場合は、１ウェイを８分割し、各分割領域（３２ビット）ごとに１ビットの誤り訂正を行えるため、１ウェイでは８ビットの誤り訂正が可能となる。
【００７０】
本実施形態では、キャッシュメモリ１２へのデータ書き込みの直後に行われるベリファイ時、またはデータ読み出し時に、誤り訂正コントローラ１５にて検出された誤り回数を誤り情報記憶部２０に格納し、この誤り回数に基づいて各セットごとに第１領域１７ｄと第２領域１７ｅのサイズ（メモリ容量）をウェイ単位で調整する。これにより、誤り回数が高いセットについては、第２領域１７ｅのサイズを増やすことで、より多くの誤りを訂正でき、不揮発メモリの信頼性の低下を防止することができる。
【００７１】
図１３はキャッシュメモリ１２の内部構成をより詳細に示すブロック図である。タグ部１６は、タグアドレス選択部３１と、タグ情報格納部３２と、ヒット判定部３３とを有する。タグアドレス選択部３１は、読み出すべきウェイを選択し、選択したウェイにアドレス情報を供給する。タグ情報格納部３２は、データキャッシュ部１７内の各データに対応するタグ情報を格納する。ヒット判定部３３は、タグ情報格納部３２から読み出したタグ情報を、プロセッサ３からアクセス要求のあったブロックアドレス内のインデックスアドレスとを比較し、ヒット／ミス判定信号を出力する。
【００７２】
タグ情報格納部３２は、第１領域１７ｄ内のデータのアドレス情報の他に、第２領域１７ｅを有するか否かを示す情報（ＥＣＣフラグ情報、第１情報）と、第２領域１７ｅとして使われているウェイを特定する情報（第２情報）とを格納する。
【００７３】
データキャッシュ部１７は、データ格納部３４と、書込み部３５と、読出し部３６とを有する。データ格納部３４は、複数のウェイに分かれており、ウェイ単位で、データの書き込みまたは読出しを行う。書込み部３５は、データキャッシュ部１７に書き込むべきウェイを選択して、選択したウェイに書き込むべきデータを供給する。読出し部３６は、データキャッシュ部１７から読み出すべきウェイを選択して、選択したウェイから読み出すべきデータを供給する。
【００７４】
図１３のＥＣＣ生成器１５ａと誤り訂正部１５ｂは、図１の誤り訂正コントローラ１５に内蔵されるものである。ＥＣＣ生成器１５ａは、データキャッシュ部１７に書き込むべきデータの誤り訂正符号を生成する。誤り訂正部１５ｂは、データキャッシュ部１７から読み出したデータの誤り訂正を行う。
【００７５】
図１４はデータのビット数と誤り訂正可能なビット数との関係を示す図である。図１４は１つのウェイ（キャッシュライン）が５１２ビットの例を示している。本実施形態では、誤り訂正能力を可変できるようにしており、それぞれ異なる誤り訂正能力をＥＣＣモード１〜ＥＣＣモード４としている。
【００７６】
ＥＣＣモード１は、５１２ビットデータ内の１ビットの誤りを訂正するモードである。５１２ビットデータ内の１ビットの誤りを訂正するには、例えば１１ビットの誤り訂正符号を必要とする。よって、１５個のウェイのそれぞれについて１ビットの誤りを訂正するには、第２領域１７ｅに１１×１５＝１６５ビットの誤り訂正符号を格納しておく必要がある。
【００７７】
ＥＣＣモード２は、２５６ビットデータ内の１ビットの誤りを訂正するモードである。２５６ビットデータ内の１ビットの誤りを訂正するには、例えば１０ビットの誤り訂正符号を必要とする。よって、５１２ビットデータでは、２ビットの誤りを訂正可能となり、これらの誤りを訂正するには、１０×２＝２０ビットの誤り訂正符号を必要とする。よって、第１領域１７ｄ内の１５個のウェイのそれぞれについて２ビットまでの誤りを訂正するには、第２領域１７ｅには、２０×１５＝３００ビットの誤り訂正符号を格納しておく必要がある。
【００７８】
ＥＣＣモード３は、１２８ビットデータ内の１ビットの誤りを訂正するモードである。１２８ビットデータ内の１ビットの誤りを訂正するには、例えば９ビットの誤り訂正符号を必要とする。よって、５１２ビットデータでは、４ビットの誤りを訂正可能となり、これらの誤りを訂正するには、９×４＝３６ビットの誤り訂正符号を必要とする。よって、第１領域１７ｄ内に１５個のウェイがあったとして、各ウェイごとに４ビットまでの誤りを訂正するには、第２領域１７ｅには、３６×１５＝５４０ビットの誤り訂正符号を格納しておく必要がある。第２領域１７ｅが１個のウェイを有する場合、最大５１２ビットの情報しか格納できない。よって、第２領域１７ｅとして２個のウェイを必要とする。この場合、第１領域１７ｄは１４個のウェイとなり、３６×１４＝５０４ビットの誤り訂正符号を第２領域１７ｅに格納することになる。
【００７９】
ＥＣＣモード４は、６４ビットデータ内の１ビットの誤りを訂正するモードである。６４ビットデータ内の１ビットの誤りを訂正するには、例えば８ビットの誤り訂正符号を必要とする。よって、５１２ビットデータでは、８ビットの誤りを訂正可能となり、これらの誤りを訂正するには、８×８＝６４ビットの誤り訂正符号を必要とする。第１領域１７ｄが１４個のウェイを有するとすると、第２領域１７ｅには、６４×１４＝８９６ビットの誤り訂正符号を格納しておく必要がある。
【００８０】
このように、誤り訂正能力によって、必要とする誤り訂正符号のビット数が変わるため、誤り訂正能力に応じて第１領域１７ｄと第２領域１７ｅのサイズを可変調整する必要がある。この可変調整は、図１６の領域サイズ調整部２２が行う。
【００８１】
図１５はタグ部１６内のタグ情報格納部３２（図１３参照）に格納されるタグ情報の詳細情報を示す図である。タグ情報格納部３２は、各セットごとにタグ情報を格納する。タグ情報は、図１５に示すように、Ｖａｌｉｄ情報４１と、Ｄｉｒｔｙ情報４２と、ＬＲＵ情報４３と、Ｓｅｃ情報４４と、ＥＣＣフラグ情報４５と、アドレス情報４６とを含んでいる。タグ部１６に誤り情報記憶部２０を設けてもよい。
【００８２】
Ｖａｌｉｄ情報４１は、対応する第１領域１７ｄ内のデータが有効か否かを示す情報である。Ｄｉｒｔｙ情報４２は、対応する第１領域１７ｄ内のデータを下位階層のメモリにライトバックする必要があるか否かを示す情報である。ＬＲＵ情報４３は、対応する第１領域１７ｄ内のデータがＬＲＵ（Least Recently Used）データであるか否かを示す情報である。Ｓｅｃ情報４４は、対応する第１領域１７ｄ内のデータのセキュリティ情報である。ＥＣＣフラグ情報４５は、対応する第１領域１７ｄ内のデータが第１領域１７ｄだけでなく、第２領域１７ｅを有するか否かを示す情報を格納する。ＥＣＣフラグ情報４５は、誤り訂正能力を示す誤り訂正モードを特定する情報（以下、ＥＣＣモード）と、第２領域１７ｅのローテーション情報とを含んでいてもよい。ＥＣＣモードは、例えば図１４に示した４つのモードを含めて複数のモードのうちのいずれかを選択するものである。例えば、全部で８つのモードがある場合には、ＥＣＣモードとして３ビットが必要となる。ローテーション情報は、誤り訂正符号を格納する第２領域１７ｅを不揮発メモリ内で定期的にシフトさせるためのものである。これにより、不揮発メモリ内のアクセス頻度を均等にすることができ、不揮発メモリの書込み耐性を高めることができる。例えば、キャッシュメモリ１２が１６個のウェイを有し、各ウェイを順繰りに第２領域１７ｅとして用いる場合、１６個の選択肢があるため、いずれか一つのウェイを選択するのに４ビットが必要となる。
【００８３】
よって、ＥＣＣフラグ情報４５は、例えば、ＥＣＣモードとして３ビット、ローテーション情報として４ビットが必要となり、最低７ビットが必要となる。領域サイズ調整部２２は、誤り情報記憶部２０に格納された誤り回数に基づいて、第１領域１７ｄと第２領域１７ｅのサイズを調整することができる。
【００８４】
第２領域１７ｅのローテーションを行うには、図１６に示すように、ローテーション制御部２４と、ローテーション制御用のカウンタ（アクセス回数計測器）２４ａとを設けるのが望ましい。ローテーション制御部２４は、誤り情報記憶部２０に格納された誤り回数が所定の閾値を超えると、不揮発メモリ内の第２領域１７ｅの配置場所をシフトする。このカウンタ２４ａは、第２領域１７ｅのアクセス回数を計測する。ローテーション制御部２４は、カウンタ２４ａで計測したアクセス回数が所定の閾値を超えると、第２領域１７ｅを別のウェイにシフトする。
【００８５】
図１７は第３の実施形態によるキャッシュコントローラ１４の処理動作の第１例を示すフローチャートである。まず、リフレッシュ動作を行う（ステップＳ５１）。図１８は図１７のステップＳ５１のリフレッシュ動作の詳細フローチャートである。図１８のフローチャートは、リフレッシュ制御部２３にて行われる。まず、リフレッシュ対象のデータを読み出す（ステップＳ６１）。リフレッシュ対象のデータとは、例えば不揮発メモリの第１領域１７ｄに書き込んでから所定時間が経過したデータである。このデータは、第１領域１７ｄに書き込んでから所定時間が経過した後、定期的にリフレッシュ対象となる。
【００８６】
次に、ステップＳ６１で読み出したデータを誤り訂正コントローラ１５に供給する。誤り訂正コントローラ１５は、リフレッシュ対象のデータの誤り訂正符号を用いて、このデータに誤りがあるか否かを検出する（ステップＳ６２）。誤り訂正コントローラ１５は、誤りが検出された場合には、誤り訂正符号を用いて誤り訂正を行う（ステップＳ６３）。ステップＳ６３の処理が終了すると、誤り回数を計測する誤り回数カウンタ２１をカウントアップする（ステップＳ６４）。
【００８７】
ステップＳ６２で誤りがないと判定された場合、あるいはステップＳ６４の処理が終了すると、次のリフレッシュ対象のアドレスを選択する（ステップＳ６５）。
【００８８】
図１８のステップＳ６５の処理、すなわちリフレッシュ対象のデータのリフレッシュ動作が終了すると、誤り回数カウンタ２１のカウント値を検出する（図１７のステップＳ５２）。次に、領域サイズ調整部２２は、誤り回数が第１閾値以上か否かを判定し（ステップＳ５３）、第１閾値以上の場合は、誤り訂正能力を増強するべくＥＣＣモードを変更する（ステップＳ５４）。この場合、領域サイズ調整部２２は、第２領域１７ｅのサイズを第１サイズから、より大きい第２サイズに変更する。
【００８９】
次に、領域サイズ調整部２２は、誤り回数が第１閾値より小さい第２閾値未満か否かを判定し（ステップＳ５５）、誤り回数が第２閾値未満の場合は、誤り訂正能力を低下するべくＥＣＣモードを変更する（ステップＳ５６）。誤り回数が第２閾値以上の場合は、ＥＣＣモードを現状維持とする（ステップＳ５７）。
【００９０】
次に、リフレッシュ対象アドレスのすべてについてのリフレッシュ動作が終了したか否かを判定する（ステップＳ５８）。まだ終わっていないリフレッシュ対象アドレスがあれば、ステップＳ５１以降の処理を繰り返し、すべてのリフレッシュ対象アドレスについてのリフレッシュ動作が終了したら、図１７の処理を終了する。
【００９１】
キャッシュコントローラ１４の処理動作は図１７に示したものに限定されない。例えば、キャッシュコントローラ１４は、書込み信頼性が著しく低いセットについては、セット内の書込みデータを下位階層のメモリにもライトスルーで書き込んでもよい。図１９はキャッシュコントローラ１４の処理動作の第２例を示すフローチャートである。まず、図１８と同様の処理にてリフレッシュ動作を行う（ステップＳ７１）。リフレッシュ対象のデータのリフレッシュ動作が終了すると、次に誤り回数を検出し（ステップＳ７２）、誤り回数が第１閾値よりも大きい第３閾値以上か否かを判定する（ステップＳ７３）。誤り回数が第３閾値以上の場合には、エラー訂正を行うとともに、このデータを下位階層のメモリにライトスルーで書き込む（ステップＳ７４）。その際、ＥＣＣモードを変更して、誤り訂正能力を向上させてもよい。
【００９２】
ステップＳ７３で誤り回数が第３閾値未満と判定されると、次に誤り回数が第１閾値以上か否かを判定する（ステップＳ７５）。その後、図１７のステップＳ５３〜Ｓ５８と同様の処理を行う（ステップＳ７５〜Ｓ８０）。
【００９３】
上述した実施形態では、セットごとに、ウェイ単位で第１領域１７ｄと第２領域１７ｅのサイズを可変調整する例を説明したが、図２０に示すように、各ウェイ内で第１領域１７ｄと第２領域１７ｅのサイズを可変調整してもよい。例えば、１つのウェイが５１２ビットの場合、５１２ビットのうちの一部のビットを第１領域１７ｄとし、残りのビットを第２領域１７ｅとしてもよい。
【００９４】
このように、第３の実施形態では、誤り情報記憶部２０に格納された誤り回数に基づいて、データキャッシュ部１７内の誤り訂正符号を格納する第２領域１７ｅのサイズを調整するため、第１領域１７ｄ内のデータの誤り回数が大きい場合には誤り訂正符号を増やすことができ、第１領域１７ｄ内のデータを正しく誤り訂正できる可能性が高くなる。これにより、アクセス回数や経年劣化、温度などの環境条件によって不揮発メモリの誤り回数が高くなっても、実用上問題なく不揮発メモリを使用することができる。
【００９５】
（第４の実施形態）
上述した第１〜第３の実施形態では、不揮発メモリで構成されたキャッシュメモリ１２に対する書込みおよび読み出しについて説明したが、メインメモリ１３が不揮発メモリで構成されている場合には、誤り情報記憶部２０に記憶された情報に基づいてメインメモリ１３への書込みを制御してもよい。
【００９６】
図２１は第４の実施形態によるメモリシステム１を備えたプロセッサシステム２の概略構成を示すブロック図である。図２１のプロセッサシステム２は、プロセッサ３と、電源管理ユニット４と、メモリコントローラ２５と、Ｌ２キャッシュ１２と、メインメモリ１３とを備えている。プロセッサ３は、例えば複数のコア５を有し、各コア５は、Ｌ１キャッシュ６を内蔵している。Ｌ２キャッシュ１２は、ＭＲＡＭ等の不揮発メモリで構成してもよいし、ＳＲＡＭ等の揮発メモリで構成してもよい。
【００９７】
メインメモリ１３は、不揮発メモリで構成されている。メインメモリ１３を構成する不揮発メモリは、例えばＭＲＡＭである。
【００９８】
図２１のメモリシステム１は、第２および第３の実施形態と同様の誤り情報記憶部２０を備えている。すなわち、第４の実施形態による誤り情報記憶部２０は、不揮発メモリの出荷前の初期スクリーニングの結果を示すスタックフラグ情報と、不揮発メモリの出荷後の誤り回数情報とを記憶している。本実施形態は、メインメモリ１３に対する書込みおよび読み出しを行う際に、誤り情報記憶部２０を参照する。
【００９９】
図２２はメインメモリ１３に対する書込みおよび読み出しを行う場合の処理手順を示すフローチャートである。まず、メインメモリ１３に対する書込みを行うか否かを判定する（ステップＳ８１）。書込みを行う場合には、誤り情報記憶部２０に格納されたスタックフラグ情報と誤り回数の少なくとも一方に基づいて、書込み条件を設定する（ステップＳ８２）。書込み条件とは、書込み電圧、書込みパルス幅、書込み電流、書込み回数、温度および磁場の少なくとも一つを含む条件である。
【０１００】
次に、ステップＳ８２で設定した書込み条件にてメインメモリ１３にデータを書き込み、書き込んだデータを読み出すベリファイ処理を行う（ステップＳ８３）。次に、ベリファイが一致したか否かを判定する（ステップＳ８４）。ベリファイが一致した場合には、処理を終了する。ベリファイが不一致の場合は、誤り回数を計数する誤り回数カウンタ２１のカウント値をカウントアップし、それに合わせて、誤り情報記憶部２０に格納されている誤り回数情報も更新する（ステップＳ８５）。
【０１０１】
次に、誤り回数が所定の閾値に達したか否かを判定する（ステップＳ８６）。誤り回数が閾値に達していない場合は、書込み条件を変更して（ステップＳ８７）、ステップＳ８３以降の処理を繰り返す。誤り回数が閾値に達した場合には、書込み対象のキャッシュラインを冗長回路１８の冗長ラインに置換して（ステップＳ８８）、ステップＳ８３以降の処理を繰り返す。
【０１０２】
一方、ステップＳ８１で読み出しと判定された場合は、プロセッサ３からの読み出し要求に応じて、メインメモリ１３からデータを読み出す（ステップＳ８９）。読み出したデータは、誤り訂正コントローラ１５に送られる。次に、誤り訂正コントローラ１５が誤りを検出したか否かを判定する（ステップＳ９０）。誤りが検出された場合は、誤り回数カウンタ２１のカウント値をカウントアップし、それに合わせて、誤り情報記憶部２０に格納されている誤り回数情報も更新する（ステップＳ９１）。
【０１０３】
次に、検出された誤りが訂正可能か否かを判定する（ステップＳ９２）。訂正可能な場合は、誤り訂正コントローラ１５にて誤り訂正を行い、誤り訂正後のデータをプロセッサ３に伝送する（ステップＳ９３）。訂正不可能な場合は、エラー処理を行う（ステップＳ９４）。
【０１０４】
ステップＳ９０で誤りが検出されなかった場合は、読み出したデータをプロセッサ３に伝送する（ステップＳ９５）。
【０１０５】
なお、Ｌ２キャッシュ１２が不揮発メモリで構成されている場合は、Ｌ２キャッシュ１２に対する書込みおよび読み出しを行う際にも、誤り情報記憶部２０を参照してもよい。この場合、図８と同様の処理を行えばよい。
【０１０６】
このように、第４の実施形態では、メインメモリ１３が不揮発メモリの場合に、データ書き込み時および読み出し時の誤り回数を誤り情報記憶部２０に格納するとともに、誤り情報記憶部２０に格納されたスタックフラグ情報と誤り回数情報とに基づいて、最適な書込み条件を設定できる。これにより、メインメモリ１３に対する書込みおよび読み出しの信頼性を向上できる。
【０１０７】
上述した第１〜第４の実施形態において、誤り情報記憶部２０内のスタックフラグ情報によって、訂正可能な誤りがあることがわかったキャッシュラインに書込みを行う場合は、２回以上の書込みを行ってもよい。複数回の書込みを行うことで、書込みエラーが起きる確率を改善できる。
【０１０８】
上述した第１〜第４の実施形態において、キャッシュコントローラ１２内のアクセス制御部１９は、不揮発メモリ内のメモリセルに０書き込んだときに１が読み出される誤り率が、１を書き込んだときに０が読み出される誤り率よりも高い場合に、０を書き込む必要が生じたときに、０を反転させて１を不揮発メモリに書き込んで、そのデータを読み出す際に論理を反転させる処理を行ってもよい。このようにすれば、データ論理によって、誤り率が異なる場合でも、誤り率がより小さい論理で不揮発メモリに書き込むことができ、不揮発メモリに対する書込み信頼性をより向上させることができる。
【０１０９】
上述した第３の実施形態において、誤り情報記憶部２０内のスタックフラグ情報を更新した後、所定期間を経過しても、書込みエラーや読み出しエラーが発生しなかったキャッシュラインについては、対応する誤り回数をカウントダウンしてもよい。
【０１１０】
本発明の態様は、上述した個々の実施形態に限定されるものではなく、当業者が想到しうる種々の変形も含むものであり、本発明の効果も上述した内容に限定されない。すなわち、特許請求の範囲に規定された内容およびその均等物から導き出される本発明の概念的な思想と趣旨を逸脱しない範囲で種々の追加、変更および部分的削除が可能である。
【符号の説明】
【０１１１】
１  メモリシステム、２  プロセッサシステム、３  プロセッサ、４  電源管理ユニット、５  コア、６  Ｌ１キャッシュ、１１  ＭＭＵ、１２  キャッシュメモリ、１３  メインメモリ、１４  キャッシュコントローラ、１５  誤り訂正コントローラ、１６  タグ部、１７  データキャッシュ部、１７ｄ  第１領域、１７ｅ  第２領域、１８  冗長回路、１９  アクセス制御部、２０  誤り情報記憶部、２１  誤り情報記憶部、２２  領域サイズ調整部、２３  リフレッシュ制御部、２４  ローテーション制御部、２４ａ  カウンタ、３１  タグアドレス選択部、３２  タグ情報格納部、３３  ヒット判定部、３４  データ格納部、３５  書込み部、３６  読出し部、
【図１】
2018156463.tif 000003
【図２】
2018156463.tif 000004
【図３】
2018156463.tif 000005
【図４Ａ】
2018156463.tif 000006
【図４Ｂ】
2018156463.tif 000007
【図５】
2018156463.tif 000008
【図６】
2018156463.tif 000009
【図７】
2018156463.tif 000010
【図８】
2018156463.tif 000011
【図９】
2018156463.tif 000012
【図１０】
2018156463.tif 000013
【図１１】
2018156463.tif 000014
【図１２】
2018156463.tif 000015
【図１３】
2018156463.tif 000016
【図１４】
2018156463.tif 000017
【図１５】
2018156463.tif 000018
【図１６】
2018156463.tif 000019
【図１７】
2018156463.tif 000020
【図１８】
2018156463.tif 000021
【図１９】
2018156463.tif 000022
【図２０】
2018156463.tif 000023
【図２１】
2018156463.tif 000024
【図２２】
2018156463.tif 000025