(57)【要約】【課題】メモリの書き直しを行う処理を簡潔にする。【解決手段】メモリセルアレイの各ビットは、第１の動作によって第１の記憶状態に遷移し、第２の動作によって第２の記憶状態に遷移する。検出部は、第１の動作および第２の動作のうち第１の動作のみを行う第１の書直し処理を行う第１のタイミングを検出する。第１のタイミングが検出された場合に、要求部は第１の動作および第２の動作のうち第１の動作のみを行う第１の書直し処理のリクエストをメモリセルアレイに対して要求する。【選択図】図１
2015038794.tif 000002
【特許請求の範囲】
【請求項１】
各ビットが第１の動作によって第１の記憶状態に遷移し、第２の動作によって第２の記憶状態に遷移するメモリセルアレイにおいて、前記第１の動作および前記第２の動作のうち前記第１の動作のみを行う第１の書直し処理を行う第１のタイミングを検出する検出部と、
前記第１のタイミングが検出された場合には前記第１の書直し処理のリクエストを前記メモリセルアレイに対して要求する要求部と
を具備する記憶制御装置。
【請求項２】
前記検出部は、前記第１の記憶状態にあるべきビットについて前記第２の記憶状態であると読み出されたビット数が所定のビット数よりも多い場合に、前記第１のタイミングを検出する
請求項１記載の記憶制御装置。
【請求項３】
前記検出部は、前記メモリセルアレイにおいて検出されたエラー数が所定のエラー数よりも多い場合に、前記第１のタイミングの検出を開始する
請求項２記載の記憶制御装置。
【請求項４】
前記検出部は、所定のデータを前記メモリセルアレイに書き込んだ際の前記第２の記憶状態のビット数と、前記書き込まれた所定のデータを前記メモリセルアレイから読み出した際の前記第２の記憶状態のビット数とを比較して、前記読み出した際の前記第２の記憶状態のビット数の方が多い場合に、前記第１のタイミングを検出する
請求項１記載の記憶制御装置。
【請求項５】
前記検出部は、前記書き込んだ際の前記第２の記憶状態のビット数と前記読み出した際の前記第２の記憶状態のビット数と差が所定の数よりも多い場合に、前記第１のタイミングの検出を開始する
請求項４記載の記憶制御装置。
【請求項６】
前記メモリセルアレイについて物理アドレス毎にリード回数を記録する情報管理部をさらに具備し、
前記検出部は、前記リード回数が所定回数に達した物理アドレスについて前記第１のタイミングを検出する
請求項１記載の記憶制御装置。
【請求項７】
前記情報管理部は、前記第１の動作および前記第２の動作の両者を行う書直し処理のリクエストを前記メモリセルアレイに対して要求した後に前記メモリセルアレイの電源がオンになった電源オン回数をさらに記録し、
前記検出部は、前記電源オン回数が所定回数に達すると、前記第１の動作および前記第２の動作の両者を行う書直し処理のリクエストを前記メモリセルアレイに対して要求する
請求項６記載の記憶制御装置。
【請求項８】
前記検出部は、前記メモリセルアレイからの読出しを行うためのリードコマンドの実行中に前記第１のタイミングの検出を行う
請求項１記載の記憶制御装置。
【請求項９】
前記検出部は、前記メモリセルアレイに対するアクセスを行うためのコマンドを実行していない状態において自発的に前記第１のタイミングの検出を行う
請求項１記載の記憶制御装置。
【請求項１０】
前記検出部は、前記メモリセルアレイにおいて第１の書直し処理を行った後に所定期間を経過した場合に、前記第１のタイミングを検出する
請求項１記載の記憶制御装置。
【請求項１１】
前記検出部は、前記第１の動作および前記第２の動作の両者を行う第２の書直し処理を行う第２のタイミングをさらに検出し、
前記要求部は、前記第２のタイミングが検出された場合には前記第２の書直し処理のリクエストを前記メモリセルアレイに対して要求する
請求項１記載の記憶制御装置。
【請求項１２】
各ビットが第１の動作によって第１の記憶状態に遷移し、第２の動作によって第２の記憶状態に遷移するメモリセルアレイと、
前記メモリセルアレイにおいて前記第１の動作および前記第２の動作のうち前記第１の動作のみを行う第１の書直し処理を行う第１のタイミングを検出する検出部と、
前記第１のタイミングが検出された場合には前記第１の書直し処理のリクエストを前記メモリセルアレイに対して要求する要求部と
を具備する記憶装置。
【請求項１３】
前記メモリセルアレイの各ビットは可変抵抗素子からなり、
前記第１の記憶状態は低抵抗状態であり、
前記第２の記憶状態は高抵抗状態であり、
前記第１の動作は、前記低抵抗状態に遷移させるセット動作であり、
前記第２の動作は、前記高抵抗状態に遷移させるリセット動作である
請求項１２記載の記憶装置。
【請求項１４】
各ビットが第１の動作によって第１の記憶状態に遷移し、第２の動作によって第２の記憶状態に遷移するメモリセルアレイと、
前記メモリセルアレイに対してリードコマンドを発行するホストコンピュータと、
前記リードコマンドの実行に関連して前記第１の動作および前記第２の動作のうち前記第１の動作のみを行う第１の書直し処理を行う第１のタイミングを検出する検出部と、
前記第１のタイミングが検出された場合には前記第１の書直し処理のリクエストを前記メモリセルアレイに対して要求する要求部と
を具備する情報処理システム。
【請求項１５】
各ビットが第１の動作によって第１の記憶状態に遷移し、第２の動作によって第２の記憶状態に遷移するメモリセルアレイにおいて、前記第１の動作および前記第２の動作のうち前記第１の動作のみを行う第１の書直し処理を行う第１のタイミングを検出する検出手順と、
前記第１のタイミングが検出された場合には前記第１の書直し処理のリクエストを前記メモリセルアレイに対して要求する要求手順と
を具備する記憶制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、記憶制御装置に関する。詳しくは、不揮発性メモリのための記憶制御装置、記憶装置、情報処理システム、および、これらにおける処理方法ならびに当該方法をコンピュータに実行させるプログラムに関する。
【背景技術】
【０００２】
情報処理システムにおいては、ワークメモリとしてＤＲＡＭ（Dynamic Random Access Memory）等が用いられる。このＤＲＡＭは、通常、揮発性メモリであり、電源の供給が停止するとその記憶内容は消失する。一方、近年、不揮発性メモリ（ＮＶＭ：Non-Volatile Memory）が用いられるようになっている。この不揮発性メモリとしては、大きなサイズを単位としたデータアクセスに対応したフラッシュメモリと、小さな単位での高速なランダムアクセスが可能な不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ：Non-Volatile RAM）とに大別される。ここで、フラッシュメモリの代表例としては、ＮＡＮＤ型フラッシュメモリが挙げられる。一方、不揮発性ランダムアクセスメモリの例としては、ＲｅＲＡＭ（Resistance RAM）、ＰＣＲＡＭ（Phase-Change RAM）、ＭＲＡＭ（Magnetoresistive RAM）などが挙げられる。
【０００３】
一般に、不揮発性メモリでは、メモリセルに対して電圧を印可することにより、データの読出しが実現される。データが読み出されることにより、メモリセルは電圧によりストレスを受けることになる。データの読出しの繰り返し、すなわちメモリセルに対して繰り返し電圧によるストレスを掛けることにより、書き込まれたデータが破壊され、メモリセルから誤った値が読み出されるおそれがある。これに対し、読み出されたデータから誤りが検出された場合に、エラー訂正コードを用いてデータの訂正を行い、この訂正されたデータを不揮発性メモリに書き直すことによってデータ破壊を防ぐ技術が提案されている（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平０６−１１０７９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述の従来技術では、訂正されたデータを不揮発性メモリに書き直す、いわゆるリフレッシュ処理を用いることにより、データ破壊を防いでいる。しかしながら、上述の従来技術では、エラーが発生したメモリセルを含め、少なくとも同じ物理ページに属する全てのメモリセルに対して、消去および書込みが行われてしまう。データの書き換えが不要なメモリセルのデータ消去および書込みは、処理にかかる時間を引き延ばす要因となり得る。また、データの書換えが不要なメモリセルのデータ消去および書込みにより、メモリセルにかかるストレスが多くなり、不揮発性メモリの寿命を短くする要因となる。
【０００６】
本技術はこのような状況に鑑みて生み出されたものであり、メモリの書き直しを行う処理を簡潔にすることを目的とする。
【課題を解決するための手段】
【０００７】
本技術は、上述の問題点を解消するためになされたものであり、その第１の側面は、各ビットが第１の動作によって第１の記憶状態に遷移し、第２の動作によって第２の記憶状態に遷移するメモリセルアレイにおいて、上記第１の動作および上記第２の動作のうち上記第１の動作のみを行う第１の書直し処理を行う第１のタイミングを検出する検出部と、上記第１のタイミングが検出された場合には上記第１の書直し処理のリクエストを上記メモリセルアレイに対して要求する要求部とを具備する記憶制御装置またはその方法である。これにより、例えば第１の記憶状態にあるべきビットの劣化が多い場合に、第１の動作のみを行う書直し処理を利用することにより、メモリセルアレイに対する書直し処理を簡潔にするという作用をもたらす。
【０００８】
また、この第１の側面において、上記第１の記憶状態にあるべきビットについて上記第２の記憶状態であると読み出されたビット数が所定のビット数よりも多い場合に、上記第１のタイミングを検出するようにしてもよい。これにより、例えば劣化した第１の記憶状態にあるべきビットのエラー数に基づいて書直し処理を切り替えるという作用をもたらす。また、この場合において、上記検出部は、上記メモリセルアレイにおいて検出されたエラー数が所定のエラー数よりも多い場合に、上記第１のタイミングの検出を開始するようにしてもよい。
【０００９】
また、この第１の側面において、上記検出部は、所定のデータを上記メモリセルアレイに書き込んだ際の上記第２の記憶状態のビット数と、上記書き込まれた所定のデータを上記メモリセルアレイから読み出した際の上記第２の記憶状態のビット数とを比較して、上記読み出した際の上記第２の記憶状態のビット数の方が多い場合に、上記第１のタイミングを検出するようにしてもよい。これにより、書込み前後の第２の記憶状態のビット数に基づいて書直し処理を切り替えるという作用をもたらす。また、この場合において、上記検出部は、上記書き込んだ際の上記第２の記憶状態のビット数と上記読み出した際の上記第２の記憶状態のビット数と差が所定の数よりも多い場合に、上記第１のタイミングの検出を開始するようにしてもよい。
【００１０】
また、この第１の側面において、上記メモリセルアレイについて物理アドレス毎にリード回数を記録する情報管理部をさらに具備し、上記検出部は、上記リード回数が所定回数に達した物理アドレスについて上記第１のタイミングを検出するようにしてもよい。これにより、リード回数に基づいて書直し処理を切り替えるという作用をもたらす。また、この場合において、上記情報管理部は、上記第１の動作および上記第２の動作の両者を行う書直し処理のリクエストを上記メモリセルアレイに対して要求した後に上記メモリセルアレイの電源がオンになった電源オン回数をさらに記録し、上記検出部は、上記電源オン回数が所定回数に達すると、上記第１の動作および上記第２の動作の両者を行う書直し処理のリクエストを上記メモリセルアレイに対して要求するようにしてもよい。
【００１１】
また、この第１の側面において、上記検出部は、上記メモリセルアレイからの読出しを行うためのリードコマンドの実行中に上記第１のタイミングの検出を行うようにしてもよい。これにより、リードコマンドの実行のたびに、書直し処理を行うという作用をもたらす。
【００１２】
また、この第１の側面において、上記検出部は、上記メモリセルアレイに対するアクセスを行うためのコマンドを実行していない状態において自発的に上記第１のタイミングの検出を行うようにしてもよい。これにより、記憶制御装置が自発的なタイミングで書直し処理を行うという作用をもたらす。
【００１３】
また、この第１の側面において、上記検出部は、上記メモリセルアレイにおいて第１の書直し処理を行った後に所定期間を経過した場合に、上記第１のタイミングを検出するようにしてもよい。これにより、書直し処理が行われた最終時点からの経過期間に応じて書直し処理を行うという作用をもたらす。
【００１４】
また、この第１の側面において、上記検出部は、上記第１の動作および上記第２の動作の両者を行う第２の書直し処理を行う第２のタイミングをさらに検出し、上記要求部は、上記第２のタイミングが検出された場合には上記第２の書直し処理のリクエストを上記メモリセルアレイに対して要求するようにしてもよい。これにより、第１の書直し処理では不十分な場合に第２の書直し処理を行うという作用をもたらす。
【００１５】
また、本技術の第２の側面は、各ビットが第１の動作によって第１の記憶状態に遷移し、第２の動作によって第２の記憶状態に遷移するメモリセルアレイと、上記メモリセルアレイにおいて上記第１の動作および上記第２の動作のうち上記第１の動作のみを行う第１の書直し処理を行う第１のタイミングを検出する検出部と、上記第１のタイミングが検出された場合には上記第１の書直し処理のリクエストを上記メモリセルアレイに対して要求する要求部とを具備する記憶装置である。これにより、例えば第１の記憶状態にあるべきビットの劣化が多い場合に、第１の動作のみを行う書直し処理を利用することにより、メモリセルアレイにおける書直し処理を簡潔にするという作用をもたらす。
【００１６】
また、この第２の側面において、上記メモリセルアレイの各ビットは可変抵抗素子からなり、上記第１の記憶状態は低抵抗状態であり、上記第２の記憶状態は高抵抗状態であり、上記第１の動作は、上記低抵抗状態に遷移させるセット動作であり、上記第２の動作は、上記高抵抗状態に遷移させるリセット動作であるようにしてもよい。
【００１７】
また、本技術の第３の側面は、各ビットが第１の動作によって第１の記憶状態に遷移し、第２の動作によって第２の記憶状態に遷移するメモリセルアレイと、上記メモリセルアレイに対してリードコマンドを発行するホストコンピュータと、上記リードコマンドの実行に関連して上記第１の動作および上記第２の動作のうち上記第１の動作のみを行う第１の書直し処理を行う第１のタイミングを検出する検出部と、上記第１のタイミングが検出された場合には上記第１の書直し処理のリクエストを上記メモリセルアレイに対して要求する要求部とを具備する情報処理システムである。これにより、ホストコンピュータがメモリセルアレイに対して発行したリードコマンドの実行に関連して、例えば第１の記憶状態にあるべきビットの劣化が多い場合に、第１の動作のみを行う書直し処理を利用することにより、メモリセルアレイにおける書直し処理を簡潔にするという作用をもたらす。
【発明の効果】
【００１８】
本技術によれば、メモリの書き直しを行う処理を簡潔にすることができるという優れた効果を奏し得る。
【図面の簡単な説明】
【００１９】
【図１】本技術の実施の形態における情報処理システムの構成例を示す図である。
【図２】本技術の実施の形態におけるメモリ３００の一構成例を示す図である。
【図３】本技術の実施の形態におけるメモリセルアレイ３１０の構造の一例を示す図である。
【図４】本技術の実施の形態におけるメモリセル３１３の回路例を示す図である。
【図５】本技術の実施の形態におけるメモリセル３１３の通常状態における抵抗分布を示す図である。
【図６】本技術の実施の形態におけるメモリセル３１３の変化した抵抗分布を示す図である。
【図７】本技術の実施の形態におけるメモリセルアレイ３１０に記憶されるデータの構造の一例を示す図である。
【図８】本技術の第１の実施の形態におけるメモリセルアレイ３１０に記憶される物理ページの構造の一例を示す図である。
【図９】本技術の実施の形態におけるバッファ３４０に保持される各バッファの例を示す図である。
【図１０】本技術の実施の形態におけるバッファ３４０に保持される具体例を示す図である。
【図１１】本技術の実施の形態におけるバッファ３４０に保持される具体例を示す図である。
【図１２】本技術の実施の形態におけるバッファ３４０に保持される具体例を示す図である。
【図１３】本技術の実施の形態におけるバッファ３４０に保持される具体例を示す図である。
【図１４】本技術の第１の実施の形態におけるメモリコントローラ２００のリードコマンド処理手順の一例を示す流れ図である。
【図１５】本技術の第１の実施の形態におけるメモリコントローラ２００のリフレッシュ処理（ステップＳ８２０）の処理手順の一例を示す流れ図である。
【図１６】本技術の実施の形態におけるメモリ３００の第１リフレッシュリクエスト処理の処理手順の一例を示す流れ図である。
【図１７】本技術の実施の形態におけるメモリ３００の第２リフレッシュリクエスト処理の処理手順の一例を示す流れ図である。
【図１８】本技術の実施の形態におけるメモリ３００のセット処理の処理手順の一例を示す流れ図である。
【図１９】本技術の実施の形態におけるメモリ３００のリセット処理の処理手順の一例を示す流れ図である。
【図２０】本技術の実施の形態におけるリードリクエスト処理の処理手順の一例を示す流れ図である。
【図２１】本技術の第２の実施の形態におけるメモリコントローラ２００のリードコマンド処理手順の一例を示す流れ図である。
【図２２】本技術の第２の実施の形態におけるメモリコントローラ２００のリフレッシュ処理の処理手順の一例を示す流れ図である。
【図２３】本技術の第３の実施の形態におけるメモリセルアレイ３１０に記憶される物理ページの構造の一例を示す図である。
【図２４】本技術の第３の実施の形態におけるメモリコントローラ２００のリードコマンド処理手順の一例を示す流れ図である。
【図２５】本技術の第３の実施の形態におけるメモリコントローラ２００のリフレッシュ処理（ステップＳ８５０）の処理手順の一例を示す流れ図である。
【図２６】本技術の第４の実施の形態におけるリフレッシュ情報管理テーブルの構成例を示す図である。
【図２７】本技術の第４の実施の形態におけるメモリコントローラ２００のリードコマンド処理手順の一例を示す流れ図である。
【図２８】本技術の第４の実施の形態におけるメモリコントローラ２００のリフレッシュ処理（ステップＳ８６０）の処理手順の一例を示す流れ図である。
【図２９】本技術の第４の実施の形態におけるメモリコントローラ２００のリフレッシュ実行確認処理手順の一例を示す流れ図である。
【図３０】本技術の第４の実施の形態におけるメモリコントローラ２００のリフレッシュ処理（ステップＳ８８０）の処理手順の一例を示す流れ図である。
【図３１】本技術の第５の実施の形態におけるリフレッシュ情報管理テーブルの構成例を示す図である。
【図３２】本技術の第５の実施の形態におけるメモリコントローラ２００のリフレッシュ実行確認処理手順の一例を示す流れ図である。
【図３３】本技術の第５の実施の形態におけるメモリコントローラ２００の第１リフレッシュ処理（ステップＳ７２０）の処理手順の一例を示す流れ図である。
【図３４】本技術の第５の実施の形態におけるメモリコントローラ２００の第２リフレッシュ処理（ステップＳ７３０）の処理手順の一例を示す流れ図である。
【図３５】本技術の第５の実施の形態におけるメモリコントローラ２００のリフレッシュ実行確認処理手順の変形例を示す流れ図である。
【図３６】本技術の第５の実施の形態におけるメモリコントローラ２００の第３リフレッシュ処理（ステップＳ７４０）の処理手順の一例を示す流れ図である。
【図３７】本技術の第５の実施の形態におけるメモリ３００の第３リフレッシュリクエスト処理の処理手順の一例を示す流れ図である。
【図３８】本技術の実施の形態の変形例におけるメモリセル３１３の抵抗分布と閾値との関係を示す図である。
【図３９】本技術の実施の形態の変形例における４つの状態を記憶するための抵抗分布図を示す図である。
【発明を実施するための形態】
【００２０】
以下、本技術を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（劣化した低抵抗状態のエラー数に基づく制御：リードコマンド実行時）
２．第２の実施の形態（劣化した低抵抗状態のエラー数に基づく制御：自発的）
３．第３の実施の形態（ライト前後の高抵抗状態のビット数に基づく制御）
４．第４の実施の形態（リード回数等に基づく制御）
５．第５の実施の形態（リフレッシュ後の経過期間に基づく制御）
６．その他の変形例
【００２１】
＜１．第１の実施の形態＞
［情報処理システムの構成］
図１は、本技術の実施の形態における情報処理システムの構成例を示す図である。この情報処理システムは、ホストコンピュータ１００と、メモリコントローラ２００と、メモリ３００とから構成される。メモリコントローラ２００およびメモリ３００はストレージシステムを構成する。
【００２２】
ホストコンピュータ１００は、メモリ３００に対してデータのリード処理、ライト処理またはリフレッシュ処理等を要求するコマンドを発行するものである。
【００２３】
メモリコントローラ２００は、ホストコンピュータ１００と通信してコマンドを受信し、メモリ３００へのデータ書込みおよびメモリ３００からのデータ読出しを実行するものである。メモリコントローラ２００は、ライトコマンドを受信した場合、ホストコンピュータ１００から受信したデータを、メモリ３００に書き込むよう指示する。また、メモリコントローラ２００は、リードコマンドを受信した場合、メモリ３００からデータを読み出してホストコンピュータ１００に転送する。また、メモリコントローラ２００は、リフレッシュコマンドを受信した場合、メモリ３００からデータを読み出して、その読み出したデータを再びメモリ３００に書き直すよう指示する。
【００２４】
ホストコンピュータ１００がライトコマンド、リードコマンド、リフレッシュコマンドを実行するとき、メモリコントローラ２００内で、データの位置情報を表すアドレスとして論理アドレスが用いられる。１つの論理アドレスにより示される領域は、５１２バイトのサイズであると想定する。一方、メモリコントローラ２００がライトリクエストやリードリクエストを要求する際、メモリ３００内のデータの位置情報を表すアドレスとしては物理アドレスが用いられる。１つの物理アドレスで示される領域は、５２８バイト（４２２４ビット）のサイズであると想定する。
【００２５】
メモリコントローラ２００は、プロセッサ２１０と、ＲＡＭ２２０と、ＲＯＭ２３０と、ＥＣＣ処理部２４０と、リフレッシュ情報管理部２５０と、ホストインターフェース２０１と、メモリインターフェース２０３とを備える。
【００２６】
プロセッサ２１０は、メモリコントローラ２００全体の制御を行うものである。このプロセッサ２１０は、ＲＯＭ２３０に格納されたソフトウェアを実行する。このプロセッサ２１０は、ホストコンピュータ１００から発行されたコマンドを解釈して、メモリ３００に対して必要なリクエストを要求する。なお、プロセッサ２１０は、特許請求の範囲に記載の要求部の一例である。
【００２７】
ＲＡＭ２２０は、揮発性のメモリであり、プロセッサ２１０のワーキングメモリや、メモリ３００を管理するデータを一時的に保持するための領域として用いられる。また、ＲＡＭ２２０は、ホストコンピュータ１００とメモリコントローラ２００との間で転送されるデータを一時的に保持するための領域や、メモリコントローラ２００とメモリ３００との間で転送されるデータを一時的に保持するための領域としても用いられる。また、このＲＡＭ２２０は、アドレス変換テーブルを保持する。アドレス変換テーブルは、ホストコンピュータ１００がコマンドで指定する論理アドレスを、対応する物理アドレスに変換するためのテーブルである。この実施の形態では、論理アドレスは５１２バイトでアドレッシングされる。１つの論理アドレスに書き込まれる５１２バイトのデータは、メモリ３００の１つの物理ページにユーザデータとして書き込まれる。したがって、１つの論理アドレスに、１つの物理アドレスが割り当てられる。ＲＯＭ２３０は、ストレージシステムを制御するためのソフトウェアプログラムを格納するメモリである。
【００２８】
ＥＣＣ処理部２４０は、メモリ３００に記録されるデータのエラー訂正コード（ＥＣＣ：Error Correcting Code）の生成、および、メモリ３００から読み出したデータのエラー検出および訂正処理を実行するものである。ＥＣＣ処理部２４０は、８ビットの訂正能力を有する。このとき想定する冗長ビット数は１３バイト（１０４ビット）である。なお、ＥＣＣ処理部２４０は、特許請求の範囲に記載の検出部の一例である。
【００２９】
リフレッシュ情報管理部２５０は、リフレッシュ処理の実行の要否を判定する際に必要な情報を管理するものである。
【００３０】
ホストインターフェース２０１は、ホストコンピュータ１００と接続され、ホストコンピュータ１００からのコマンドの受信、および、ホストコンピュータ１００とのデータの受送信を実行するものである。
【００３１】
メモリインターフェース２０３は、メモリ３００と接続され、メモリ３００に対するリクエストの送信、ライトデータの送信、および、リードデータの受信を実行するものである。
【００３２】
［メモリの構成］
図２は、本技術の実施の形態におけるメモリ３００の一構成例を示す図である。このメモリ３００は、メモリセルアレイ３１０と、ロウ制御部３１１と、カラム制御部３１２と、プレート制御部３２０とを備える。また、このメモリ３００は、ライト制御部３３１と、リード制御部３３２と、リフレッシュ制御部３３３と、バッファ３４０と、検証処理部３５０と、リクエスト処理部３６０とを備える。
【００３３】
また、このメモリ３００は、メモリコントローラ２００との間のインターフェースである制御インターフェース３０９を備えている。この制御インターフェース３０９は、メモリコントローラ２００からのリクエストや物理アドレスおよびパラメータの受信、メモリセルアレイ３１０へのライトデータの受信、メモリセルアレイ３１０からのリードデータの送信、制御データの受送信などを行う。
【００３４】
メモリセルアレイ３１０は、複数のメモリセルからなるメモリセルアレイであり、ビット毎に２値の何れかの値を記憶するメモリセルが２次元状（マトリクス状）に多数配列されている。このメモリセルアレイ３１０にアクセスするメモリコントローラ２００からのリクエストの単位は物理ページ単位である。物理ページには物理ページアドレスが割り振られている。なお、メモリセルアレイ３１０は、特許請求の範囲に記載のメモリセルアレイの一例である。
【００３５】
ロウ制御部３１１は、リクエスト処理部３６０からの指示に従って、メモリセルアレイ３１０のロウアドレスを特定してアクセス制御するものである。カラム制御部３１２は、リクエスト処理部３６０からの指示に従って、メモリセルアレイ３１０のカラムアドレスを特定してアクセス制御するものである。プレート制御部３２０は、メモリセルアレイ３１０のメモリセルにセル電流を流すためのプレート電圧を制御するものである。
【００３６】
ライト制御部３３１は、メモリセルアレイ３１０に書込みを行うための制御を実行するものである。リード制御部３３２は、メモリセルアレイ３１０から読出しを行うための制御を実行するものである。リフレッシュ制御部３３３は、メモリセルアレイ３１０に対してリフレッシュを行うための制御を実行するものである。
【００３７】
バッファ３４０は、各リクエストを処理するために必要なデータを保持するバッファの格納領域である。このバッファ３４０の構成については後述する。
【００３８】
検証処理部３５０は、メモリセルアレイ３１０にデータが正しく書き込まれたか否かを検証（ベリファイ）するものである。
【００３９】
リクエスト処理部３６０は、メモリコントローラ２００からのリクエストを処理するためのものである。このリクエスト処理部３６０は、メモリコントローラ２００からのリクエストがライトリクエストであれば、ライト制御部３３１に制御を指示する。また、このリクエスト処理部３６０は、メモリコントローラ２００からのリクエストがリードリクエストであれば、リード制御部３３２に制御を指示する。また、このリクエスト処理部３６０は、メモリコントローラ２００からのリクエストがリフレッシュリクエストであれば、リフレッシュ制御部３３３に制御を指示する。
【００４０】
図３は、本技術の実施の形態におけるメモリセルアレイ３１０の構造の一例を示す図である。このメモリセルアレイ３１０においては、メモリセル３１３をマトリクス状に、ロウ方向にＮ行（Ｎは２以上の整数）、カラム方向に４２２４列として配置している。メモリセル３１３は、ワード線ＷＬ、ビット線ＢＬ、プレート線ＰＬに接続されている。同図において、Ｎ本のワード線ＷＬをＷＬ［１］乃至［Ｎ］、４２２４本のビット線ＢＬをＢＬ［１］乃至［４２２４］、４２２４本のプレート線ＰＬをＰＬ［１］乃至［４２２４］と記している。ワード線ＷＬはロウ制御部３１１に接続され、ビット線ＢＬはカラム制御部３１２に接続されている。
【００４１】
この例では、メモリセルアレイ３１０のロウ方向のメモリセルを６４個のブロックＢＬＫ３１８に分割している。したがって、ブロックＢＬＫ３１８の各々はＮ行６６列のメモリセルから構成される。同図において、６４個のブロックＢＬＫ３１８の各々をＢＬＫ［１］乃至［６４］と記している。ブロックＢＬＫ３１８の各々は、６６本のビット線ＢＬに接続することになる。ブロックＢＬＫ３１８内では、６６本のビット線ＢＬをカラム線ＣＬＭ［１］乃至［６６］と記している。
【００４２】
同一のワード線ＷＬに接続された４２２４個のメモリセルの集合を物理ページと称する。メモリコントローラ２００は、物理ページを単位としてメモリ３００にアクセスする。物理ページには、固有の物理ページアドレスが割り当てられる。
【００４３】
６４個のブロックＢＬＫ３１８の各々から１つずつ選択された６４個のメモリセルから構成される集合をグループと称する。ここでは、１つのグループに属するメモリセルの数は、メモリセルアレイ３１０において許容される電流量に基づいて決定されている。１本のワード線ＷＬに接続された４２２４個のメモリセルのうち、ＣＬＭ［１］に接続するメモリセルの集合を第１グループと称し、ＣＬＭ［２］に接続するメモリセルの集合を第２グループと称する。以下同様にして、ＣＬＭ［６６］に接続するメモリセルの集合を第６６グループと称する。
【００４４】
ロウ制御部３１１は、リクエスト処理部３６０から入力される物理ページアドレスに基づいて指定されるワード線ＷＬを選択し、所定の期間、所定の電圧により駆動する。ワード線ＷＬの電圧は、ワード線ＷＬに接続されたメモリセルを、ライト、リード、または、リフレッシュ可能な状態にするための電圧である。この電圧はワード線電圧と呼ばれ、ハイレベルでアクティブとなる。ロウ制御部３１１は、ワード線電圧としての波高値をもつパルスの印加タイミングと持続時間および印加電圧を制御する。
【００４５】
カラム制御部３１２は、ビット線ＢＬの電位を読み出すセンスアンプを含む。これにより、４２２４ビット（５２８バイト）のデータを一括して読み出すことができる。
【００４６】
プレート制御部３２０は、メモリセルアレイ３１０のメモリセルにセル電流を流すためのプレート電圧を制御する。このプレート電圧は、ビット線ＢＬの電圧との電圧差によってメモリセル電流の向きが決まる。そのため、プレート制御部３２０は、プレート電圧のビット線電圧に対する高さを制御して、セット時とリセット時とで電圧印可の方向を反転させるように制御する。リード時に印可される電圧の方向は、リセット時に印可される電圧の方向と同方向となるように制御を行う。
【００４７】
図４は、本技術の実施の形態におけるメモリセル３１３の回路例を示す図である。ここでは、メモリセル３１３として可変抵抗素子を想定し、１つのアクセストランジスタ３１４と、１つの可変セル抵抗３１５とにより構成されるものとする。可変セル抵抗３１５の一端はプレート線ＰＬに接続され、他端はアクセストランジスタ３１４のソース端子に接続される。アクセストランジスタ３１４のドレイン端子はビット線ＢＬに接続され、ゲート端子はワード線ＷＬに接続される。
【００４８】
可変セル抵抗３１５は、ビット線ＢＬよりプレート線ＰＬを一定電圧高くすると、低抵抗状態（ＬＲＳ：Low Resistance State）になる。この可変セル抵抗３１５を低抵抗状態にする動作を、セット動作と称する。一方、プレート線ＰＬよりもビット線ＢＬの電圧を上げると、可変セル抵抗３１５は、高抵抗状態（ＨＲＳ：High Resistance State）になる。この可変セル抵抗３１５を高抵抗状態にする動作を、リセット動作と称する。
【００４９】
低抵抗状態と高抵抗状態との間で抵抗状態を可逆的に変化させることにより、１つのメモリセルによって１ビットを記憶することが可能なメモリが実現される。電圧の印加を止めた後もデータは保持されるため不揮発性メモリとして機能する。以下では、低抵抗状態のセルから読み出されるデータを「１」とし、高抵抗状態から読み出されるデータを「０」とした例について説明するが、これらは何れに対応付けても構わない。
【００５０】
［メモリの抵抗状態］
図５は、本技術の実施の形態におけるメモリセル３１３の通常状態における抵抗分布を示す図である。メモリセル３１３は、セット動作によりＬＲＳ（低抵抗状態）に遷移し、リセット動作によりＨＲＳ（高抵抗状態）に遷移する。メモリセルアレイ３１０からデータを読み出す場合、リード閾値で示したリファレンス抵抗値を基準として抵抗状態を判断する。
【００５１】
図６は、本技術の実施の形態におけるメモリセル３１３の変化した抵抗分布を示す図である。この図は、セット動作によりＬＲＳに遷移させたメモリセルが、ＨＲＳとして読み出されてしまう例である。抵抗変化型メモリでは、経年変化や、リード時にメモリセルにかけられる電圧によるストレスにより、メモリセルの分布が変化し、誤ったデータが読み出されてしまう場合がある。この例では、ＬＲＳに遷移させたはずの抵抗状態が高抵抗側に変化してしまい、リード閾値を基準とした際に一部の抵抗状態３１においてＨＲＳと解釈されてしまう。上述のように、リード時にはリセット動作でかけられる電圧と同方向の電圧がかけられるため、ＬＲＳのメモリセルはリードによって状態が劣化しやすい。
【００５２】
そこで、この実施の形態では、リフレッシュ処理によって、劣化した抵抗状態を正しい抵抗状態に書き直すことを想定する。そして、このリフレッシュ処理を高速化することにより、ストレージシステムとしての高速化を図る。なお、この実施の形態ではリード時にかけられる電圧はリセット動作でかけられる電圧と同方向であると想定しているが、リード時に掛けられる電圧がセット動作でかけられる電圧と同方向である場合でも同様の考え方に基づいて適用することが可能である。
【００５３】
［データ構造］
図７は、本技術の実施の形態におけるメモリセルアレイ３１０に記憶されるデータの構造の一例を示す図である。
【００５４】
上述のように、メモリセルアレイ３１０は、メモリセル３１３をマトリクス状に、ロウ方向にＮ行、カラム方向に４２２４列として配置している。なお、ここでは、物理アドレスとして、「０ｘ００００００００」から「０ｘ０１ＦＦＦＦＦＦ」をＮ個のアドレスを割り当てている。「０ｘ」はそれに続く数字が１６進数であることを表すため、１０進数ではＮは「３３５５４４３２」となる。すなわち、メモリセルアレイ３１０は３３５５４４３２個の物理ページから構成され、「０」乃至「３３５５４４３１」の物理アドレスにより特定される。このとき、各物理ページは５２８バイト（４２２４ビット）を有する。
【００５５】
図８は、本技術の第１の実施の形態におけるメモリセルアレイ３１０に記憶される物理ページの構造の一例を示す図である。
【００５６】
物理ページは、５１２バイト（４０９６ビット）のデータ６０１と、３バイトの未使用の領域６０２と、１３バイト（１０４ビット）の冗長ビット６０３とから構成される。冗長ビット６０３は、データ６０１におけるエラー（誤り）を訂正するエラー訂正符号であり、８ビットの訂正能力を有することを想定する。
【００５７】
［バッファの種類］
図９は、本技術の実施の形態におけるバッファ３４０に保持される各バッファの例を示す図である。この例では、バッファ３４０に、ライトデータバッファ３４１と、リードデータバッファ３４２と、ベリファイバッファ３４３とが設けられることを想定している。
【００５８】
ライトデータバッファ３４１は、メモリセルアレイ３１０に対するライト対象となるライトデータを保持するバッファである。リードデータバッファ３４２は、メモリセルアレイ３１０から読み出されたリードデータを保持するバッファである。ベリファイバッファ３４３は、検証処理部３５０による検証（ベリファイ）結果を保持するバッファである。また、ベリファイバッファ３４３は、セット対象またはリセット対象となるビットを特定するためにも使用される。これら各バッファは、物理ページと同様にそれぞれ５２８バイト幅を有する。
【００５９】
図１０は、本技術の実施の形態におけるバッファ３４０に保持される具体例を示す図である。以下の例では、各バッファの４２２４ビットの一部として、対応する８ビットの部分のみを示している。
【００６０】
ライトデータバッファ３４１はライトデータとして「１１１１００００」を保持しており、リードデータバッファ３４２はプレリードデータとして「１０１０００００」を保持している。ここでは、セットすべきメモリセル３１３を特定して、その結果をベリファイバッファ３４３に保持したことを想定している。すなわち、既に書き込まれているデータが「０」で、書き込もうとするデータが「１」であるメモリセルが、「０」から「１」にセットするべきメモリセルであると特定される。この例では、ベリファイバッファ３４３は「０１０１００００」を保持し、２番目と４番目のメモリセルがセットするべきメモリセルであると特定される。
【００６１】
図１１は、本技術の実施の形態におけるバッファ３４０に保持される具体例を示す図である。
【００６２】
ライトデータバッファ３４１はライトデータとして「１１１１００００」を保持しており、リードデータバッファ３４２は検証のために読み出されたデータとして「１１１０００００」を保持している。ここでは、ライトデータバッファ３４１の保持内容とリードデータバッファ３４２の保持内容とを比較することにより検証を行い、その結果をベリファイバッファ３４３に保持したことを想定している。すなわち、本来のライトデータと実際に書き込まれたデータとで一致していないメモリセルが、書込みに失敗したメモリセルということになる。この例では、ベリファイバッファ３４３は「０００１００００」を保持し、４番目のメモリセルが検証の結果として書込みに失敗した旨が示される。
【００６３】
図１２は、本技術の実施の形態におけるバッファ３４０に保持される具体例を示す図である。
【００６４】
ライトデータバッファ３４１はライトデータとして「１１１１００００」を保持しており、リードデータバッファ３４２はプレリードデータとして「１０１０１０１０」を保持している。ここでは、セットすべきメモリセル３１３を特定して、その結果をベリファイバッファ３４３に保持したことを想定している。すなわち、既に書き込まれているデータが「１」で、書き込もうとするデータが「０」であるメモリセルが、「１」から「０」にリセットするべきメモリセルであると特定される。この例では、ベリファイバッファ３４３は「００００１０１０」を保持し、５番目と７番目のメモリセルがリセットするべきメモリセルであると特定される。
【００６５】
図１３は、本技術の実施の形態におけるバッファ３４０に保持される具体例を示す図である。
【００６６】
ライトデータバッファ３４１はライトデータとして「１１１１００００」を保持しており、リードデータバッファ３４２は検証のために読み出されたデータとして「１０１０００１０」を保持している。ここでは、ライトデータバッファ３４１の保持内容とリードデータバッファ３４２の保持内容とを比較することにより検証を行い、その結果をベリファイバッファ３４３に保持したことを想定している。すなわち、本来のライトデータと実際に書き込まれたデータとで一致していないメモリセルが、書込みに失敗したメモリセルということになる。この例では、ベリファイバッファ３４３は「００００００１０」を保持し、７番目のメモリセルが検証の結果として書込みに失敗した旨が示される。
【００６７】
［情報処理システムの動作］
図１４は、本技術の第１の実施の形態におけるメモリコントローラ２００のリードコマンド処理手順の一例を示す流れ図である。メモリコントローラ２００のプロセッサ２１０は、ホストコンピュータ１００からコマンドを受け取ると、そのコマンドの種別を解釈して、対応する処理を行う。ここでは、そのコマンドがリードコマンドであった場合の手順を示している。
【００６８】
プロセッサ２１０は、ホストインターフェース２０１で受信したリード対象の先頭論理アドレスとデータサイズとに基づいて、論理アドレス単位に処理を分割する（ステップＳ８１１）。１回の処理で実行されるのは１論理アドレスである。例えば、リード対象の先頭アドレスとして「０」、データサイズとして「１」が指定された場合は、１回の処理が行われる。また、リード対象の先頭論理アドレスとして「０」、データサイズとして「２」が指定された場合には、２回の処理に分割される。
【００６９】
プロセッサ２１０は、リード対象とする論理アドレスを決定する（ステップＳ８１２）。対象となる論理アドレスは、リード対象の先頭論理アドレスから順番に決定される。リード対象の先頭論理アドレスとして「０」、データサイズとして「２」が指定された場合、最初に処理を実行する論理アドレスは「０」に決定される。そして、次に対象となる論理アドレスは「１」に決定される。
【００７０】
プロセッサ２１０は、リード対象として決定した論理アドレスを、ＲＡＭ２２０内に保持しているアドレス変換テーブルを使用して物理アドレスに変換する（ステップＳ８１３）。
【００７１】
プロセッサ２１０は、変換した物理アドレスを指定して、メモリ３００に対してリードリクエストを要求する（ステップＳ８１４）。メモリ３００から読み出されるデータは、未使用領域と冗長ビットを含めた４２２４ビット（５２８バイト）である。
【００７２】
メモリ３００から読み出されたデータは、ＥＣＣ処理部２４０へ転送されて、ＥＣＣ処理部２４０で保持される。ＥＣＣ処理部２４０では、５２８バイトのデータから、エラー検出を行う（ステップＳ８１５）。エラーが検出された場合は、ＥＣＣ処理部２４０は、エラーとなった全てのビット数（Ｅａｌｌ）と、エラーと検出されたビットのうち、本来ＬＲＳ（「１」）であるべきビットが劣化によりＨＲＳ（「０」）として読み出されたビットの数（Ｅｈｒｓ）とをカウントする。すなわち、このビット数Ｅｈｒｓは、劣化した低抵抗状態のエラー数を示す。エラーが検出されなかった場合は、エラーとなった全ビット数（Ｅａｌｌ）を「０」として、ステップＳ８３３の処理に移行する（ステップＳ８１７：Ｎｏ）。
【００７３】
エラーが検出された場合（ステップＳ８１７：Ｙｅｓ）、訂正可能なエラー数でなければ（ステップＳ８１８：Ｎｏ）、ホストコンピュータ１００に対してコマンドのエラー終了を通知する（ステップＳ８３６）。この例では、上述のように訂正可能なエラー数は「８」までであると想定している。訂正可能なエラー数であれば（ステップＳ８１８：Ｙｅｓ）、ＥＣＣ処理部２４０は、保持されている５２８バイトのデータのエラー訂正を行い（ステップＳ８１９）、リフレッシュ処理を行う（ステップＳ８２０）。リフレッシュ処理の内容については後述する。
【００７４】
５２８バイトのデータのうち５１２バイトのデータ６０１が、ＥＣＣ処理部２４０からホストインターフェース２０１を介してホストコンピュータ１００に転送される（ステップＳ８３３）。ステップＳ８１９においてエラー訂正が行われた場合には、転送されるのは訂正後のデータである。
【００７５】
プロセッサ２１０は、このリードコマンド処理においてホストコンピュータ１００に転送されたデータサイズの合計と、このリードコマンドで指定されたデータサイズとが一致するか否かを判定する（ステップＳ８３４）。転送されたデータサイズの合計が、指定されたデータサイズよりも少ない場合には（ステップＳ８３４：Ｎｏ）、ステップＳ８１２以降の処理を繰り返す。転送されたデータサイズの合計が、指定されたデータサイズに達した場合には（ステップＳ８３４：Ｙｅｓ）、ホストコンピュータ１００に対してコマンドの正常終了を通知する（ステップＳ８３５）。
【００７６】
図１５は、本技術の第１の実施の形態におけるメモリコントローラ２００のリフレッシュ処理（ステップＳ８２０）の処理手順の一例を示す流れ図である。
【００７７】
プロセッサ２１０は、ステップＳ８１５でカウントしたエラー数Ｅａｌｌ、すなわちエラーとなった全ビット数が、５ビットより多いか否かを判定する（ステップＳ８２３）。エラー数が５以下の場合にはリフレッシュ処理を終了する（ステップＳ８２３：Ｎｏ）。
【００７８】
プロセッサ２１０は、ステップＳ８１５でカウントしたエラー数Ｅｈｒｓ、すなわちエラーと検出されたビットのうち、劣化により「０」と読み出されたビット数が、２ビットより多いか否かを判定する（ステップＳ８２４）。このエラー数Ｅｈｒｓは、図６に示したように、本来ＬＲＳであるべきビットが、劣化によりＨＲＳと判断されてしまった場合に生じるエラーの数である。検出されたエラー数Ｅｈｒｓが２ビットより多い場合には（ステップＳ８２４：Ｙｅｓ）、プロセッサ２１０はメモリ３００に対してそのエラーを発生した物理アドレスについて第１リフレッシュリクエストを要求する（ステップＳ８２５）。一方、検出されたエラー数Ｅｈｒｓが２ビット以下の場合には（ステップＳ８２４：Ｎｏ）、プロセッサ２１０はメモリ３００に対してそのエラーを発生した物理アドレスについて第２リフレッシュリクエストを要求する（ステップＳ８２６）。
【００７９】
第１リフレッシュリクエストは、セット動作およびリセット動作のうちセット動作のみを行うリフレッシュ処理を要求するものである。第２リフレッシュリクエストは、セット動作およびリセット動作の両者を行うリフレッシュ処理を要求するものである。したがって、本来ＬＲＳであるべきビットが劣化によりＨＲＳと判断されてしまったエラー数Ｅｈｒｓが２ビットより多い場合には、セット動作のみがリフレッシュ処理として実行される。一方、エラー数Ｅｈｒｓが２ビット以下である場合には、セット動作およびリセット動作の両者がリフレッシュ処理として実行される。これら第１リフレッシュリクエストおよび第２リフレッシュリクエストを要求する際、プロセッサ２１０はＥＣＣ処理部２４０に保持されている５２８バイトのデータをメモリ３００に転送する。また、これら第１リフレッシュリクエストおよび第２リフレッシュリクエストにおいて、ステップＳ８１３で取得した物理アドレスが指定される。
【００８０】
プロセッサ２１０は、第１リフレッシュリクエストまたは第２リフレッシュリクエストに対する処理においてエラーが発生したか否かを判定する（ステップＳ８２７）。エラーが発生していなければ（ステップＳ８２７：Ｎｏ）、リフレッシュ処理を終了する。エラーが発生している場合には（ステップＳ８２７：Ｙｅｓ）、プロセッサ２１０は、論理アドレスに割り当てられていないメモリ３００の物理アドレスを取得する（ステップＳ８２８）。そして、その取得した物理アドレスを指定してメモリ３００にライトリクエストを要求し、データの書込みを行う（ステップＳ８２９）。書き込まれるデータは、ＥＣＣ処理部２４０に保持されているエラー訂正済みの５２８バイトのデータである。そして、アドレス変換テーブル中の、リフレッシュ処理を行った論理アドレスに対応する物理アドレスの値を、書込みを行った物理アドレスの値に更新する（ステップＳ８２９−１）。
【００８１】
図１６は、本技術の実施の形態におけるメモリ３００の第１リフレッシュリクエスト処理の処理手順の一例を示す流れ図である。この第１リフレッシュリクエスト処理は、ステップＳ８２５等における要求に応答して開始される。
【００８２】
リクエスト処理部３６０は、メモリコントローラ２００から制御インターフェース３０９を通して、第１リフレッシュリクエストと物理アドレスを受信すると、第１リフレッシュリクエストの処理を開始する。第１リフレッシュリクエストの処理に必要な５２８バイトのデータは、制御インターフェース３０９からライトデータバッファ３４１に転送され、保持されている。物理アドレスは、制御インターフェース３０９からリクエスト処理部３６０に転送されて、保持されている。
【００８３】
リクエスト処理部３６０は、セット処理を実行する（ステップＳ９１１）。セット処理の内容については後述する。
【００８４】
セット処理終了後、リクエスト処理部３６０は、そのセット処理が正常に終了したか否かを判定する（ステップＳ９１２）。正常終了した場合には（ステップＳ９１２：Ｙｅｓ）、リクエスト処理部３６０は制御インターフェース３０９を介してメモリコントローラ２００に、第１リフレッシュリクエストが正常に終了した旨を通知する（ステップＳ９１５）。一方、エラー終了した場合には（ステップＳ９１２：Ｎｏ）、リクエスト処理部３６０は制御インターフェース３０９を介してメモリコントローラ２００に、第１リフレッシュリクエストがエラー終了した旨を通知する（ステップＳ９１６）。その後、リクエスト処理部３６０は、第１リフレッシュリクエスト処理を終了する。
【００８５】
図１７は、本技術の実施の形態におけるメモリ３００の第２リフレッシュリクエスト処理の処理手順の一例を示す流れ図である。この第２リフレッシュリクエスト処理は、ステップＳ８２６等における要求に応答して開始される。
【００８６】
リクエスト処理部３６０は、メモリコントローラ２００から制御インターフェース３０９を通して、第２リフレッシュリクエストと物理アドレスを受信すると、第２リフレッシュリクエストの処理を開始する。第２リフレッシュリクエストの処理に必要な５２８バイトのデータは、制御インターフェース３０９からライトデータバッファ３４１に転送され、保持されている。物理アドレスは、制御インターフェース３０９からリクエスト処理部３６０に転送されて、保持されている。
【００８７】
リクエスト処理部３６０は、セット処理を実行する（ステップＳ９２１）。セット処理の内容については後述する。
【００８８】
セット処理終了後、リクエスト処理部３６０は、そのセット処理が正常に終了したか否かを判定する（ステップＳ９２２）。エラー終了した場合には（ステップＳ９２２：Ｎｏ）、リクエスト処理部３６０は制御インターフェース３０９を介してメモリコントローラ２００に、第２リフレッシュリクエストがエラー終了した旨を通知する（ステップＳ９２６）。
【００８９】
セット処理が正常終了した場合には（ステップＳ９２２：Ｙｅｓ）、リクエスト処理部３６０は、リセット処理を実行する（ステップＳ９２３）。リセット処理の内容については後述する。
【００９０】
リセット処理終了後、リクエスト処理部３６０は、そのリセット処理が正常に終了したか否かを判定する（ステップＳ９２４）。正常終了した場合には（ステップＳ９２４：Ｙｅｓ）、リクエスト処理部３６０は制御インターフェース３０９を介してメモリコントローラ２００に、第２リフレッシュリクエストが正常に終了した旨を通知する（ステップＳ９２５）。一方、エラー終了した場合には（ステップＳ９２４：Ｎｏ）、リクエスト処理部３６０は制御インターフェース３０９を介してメモリコントローラ２００に、第２リフレッシュリクエストがエラー終了した旨を通知する（ステップＳ９２６）。その後、リクエスト処理部３６０は、第２リフレッシュリクエスト処理を終了する。
【００９１】
図１８は、本技術の実施の形態におけるメモリ３００のセット処理の処理手順の一例を示す流れ図である。このセット処理は、ステップＳ９１１またはＳ９２１の処理内容に相当する。
【００９２】
リクエスト処理部３６０は、プレート制御部３２０、ロウ制御部３１１、リード制御部３３２に制御信号を供給し、指定された物理ページアドレスからデータを読み出す（ステップＳ９３１）。読み出されたデータは、プレリードデータとしてリードデータバッファ３４２に転送されて保持される。
【００９３】
リクエスト処理部３６０は、リードデータバッファ３４２に保持されたプレリードデータと、ライトデータバッファ３４１に保持されているライトデータとをビット単位で比較し、セット処理を実行するメモリセルを特定する（ステップＳ９３２）。セット処理を実行するメモリセルは、ライトデータバッファ３４１に保持されたデータの値が「１」であり、かつ、リードデータバッファ３４２に保持されたデータの値が「０」となっているメモリセルである。これは、対応するメモリセルが、「０」（高抵抗状態）から「１」（低抵抗状態）に状態を変化させる必要があることを意味する。セット処理を実行するメモリセルの情報として、セット処理を実行するメモリセルに対応するビットの値に「１」、セット処理を実行する必要のないセルに対応するビットの値に「０」とし、データをベリファイバッファ３４３に保持する。
【００９４】
リクエスト処理部３６０は、セットおよび検証の繰返し実行回数をカウントするためのカウンタｋの値を「１」に設定する（ステップＳ９３３）。
【００９５】
リクエスト処理部３６０は、セット処理を実行するグループ番号を決定するためのカウンタｉの値に「１」に設定する（ステップＳ９３４）。
【００９６】
リクエスト処理部３６０は、プレート制御部３２０、ロウ制御部３１１、ライト制御部３３１に制御信号を供給するとともに、ベリファイバッファ３４３からセットを実行するセルの特定情報をカラム制御部３１２に供給する。これにより、メモリセルアレイ３１０に対してセットパルスを印加して、セット動作を行う（ステップＳ９３５）。ここで、セットパルスを印加するメモリセルは、指定された物理ページアドレス内の第ｉグループに属するメモリセルのうち、セット処理を実行するセルである。
【００９７】
リクエスト処理部３６０は、セット動作を行ったグループ番号を示すカウンタｉの値が「６６」であるか否かを判定する（ステップＳ９３６）。カウンタｉの値が「６６」でなければ（ステップＳ９３６：Ｎｏ）、カウンタｉに「１」を加算した後に（ステップＳ９３７）、ステップＳ９３５以降の処理を繰り返す。一方、カウンタｉの値が「６６」となった場合には、グループ毎のセット動作を終了する（ステップＳ９３６：Ｙｅｓ）。
【００９８】
リクエスト処理部３６０は、セット動作を検証するため、プレート制御部３２０、ロウ制御部３１１、リード制御部３３２に制御信号を供給して、セットパルスを印加した物理ページアドレスからデータを読み出す（ステップＳ９４１）。読み出したデータは、リードデータバッファ３４２に転送されて保持される。
【００９９】
リクエスト処理部３６０は、検証処理部３５０に制御信号を供給して、リードデータバッファ３４２に保持されているデータと、ライトデータバッファ３４１に保持されているライトデータとをビット単位で比較して検証処理を実行する（ステップＳ９４２）。検証処理の対象となるビットは、ライトデータバッファ３４１に保持されたデータの値が「１」を示すビットである。ライトデータバッファ３４１に保持されたデータの値が「１」で、かつ、リードデータバッファ３４２に保持された値が「０」のビットは検証の結果として書込み失敗となる。ライトデータバッファ３４１に保持されたデータの値が「１」で、かつ、リードデータバッファ３４２に保持された値が「１」のビットは検証の結果として書込み成功となる。その結果、書込み失敗となったビットに「１」、書込み成功となったビットに「０」、それ以外のビットに「０」の値がセットされたものがベリファイバッファ３４３に保持される。
【０１００】
ベリファイバッファ３４３に保持されたデータの全てのビットが「０」を示す場合、全体が検証処理の結果として書込みに成功したものとして（ステップＳ９４３：Ｙｅｓ）、検証処理部３５０はその旨をリクエスト処理部３６０に通知して、物理ページセット処理を正常終了する。
【０１０１】
一方、ベリファイバッファ３４３に保持されたデータの何れかのビットが「１」を示す場合、全体として検証処理の結果において書込みに成功していないものとなり（ステップＳ９４３：Ｎｏ）、セット処理のリトライ動作が行われる。その際、カウンタｋの値が参照され、カウンタｋの値が「４」になっている場合には（ステップＳ９４４：Ｙｅｓ）、それ以上のリトライ動作を行わずに物理ページセット処理をエラー終了する。カウンタｋの値が「４」になっていない場合には（ステップＳ９４４：Ｎｏ）、カウンタｋの値に「１」を加算して（ステップＳ９４５）、ステップＳ９３４以降の処理を繰り返す。
【０１０２】
図１９は、本技術の実施の形態におけるメモリ３００のリセット処理の処理手順の一例を示す流れ図である。このリセット処理は、ステップＳ９２３の処理内容に相当する。
【０１０３】
このリセット処理は、図１８により説明したセット処理と同様の手順となっている。ただし、セット処理ではステップＳ９３２においてセット対象となるメモリセルを特定していたが、このリセット処理ではステップＳ９５２においてリセット対象となるメモリセルを特定する。そして、その特定されたリセット対象について、ステップＳ９５５においてグループ毎のリセット処理が行われる。それ以外の点については、図１８により説明したセット処理と同様であるため、詳細な説明は省略する。
【０１０４】
図２０は、本技術の実施の形態におけるリードリクエスト処理の処理手順の一例を示す流れ図である。このリードリクエスト処理は、ステップＳ８１４における要求に応答して開始される。
【０１０５】
リクエスト処理部３６０は、制御インターフェース３０９からリードリクエストと物理ページアドレスを受信すると、物理ページリード処理を開始する（ステップＳ９７１）。すなわち、リクエスト処理部３６０は、プレート制御部３２０、ロウ制御部３１１、ライト制御部３３１に制御信号を供給して、指定された物理アドレスから５２８バイトのデータを読み出す。読み出されたデータは、リードデータとしてリードデータバッファ３４２に転送されて保持される。
【０１０６】
リクエスト処理部３６０は、リードデータバッファ３４２に保持された５２８バイトのデータを、制御インターフェース３０９を介してメモリコントローラ２００に転送する（ステップＳ９７２）。その後、リクエスト処理部３６０は、リードリクエスト処理を終了する。
【０１０７】
このように、本技術の第１の実施の形態では、本来ＬＲＳであるべきビットが劣化によりＨＲＳと判断されてしまったエラー数Ｅｈｒｓが所定数を超えた場合に、セット動作とリセット動作のうちセット動作のみをリフレッシュ処理として実行する。これにより、全てのメモリセルではなく、劣化したＬＲＳとなっているメモリセルをデータの書換えが必要なメモリセルとして選別して書き直すことができる。
【０１０８】
［第１の変形例（データ転送とリフレッシュ処理の順序）］
上述の第１の実施の形態では、ホストコンピュータ１００に対してデータ転送（ステップＳ８３３）をする前にリフレッシュ処理を行うこととしたが、このデータ転送の後にリフレッシュ処理を行うようにしてもよい。
【０１０９】
［第２の変形例（エラー数の基準を可変）］
上述の第１の実施の形態では、全エラー数Ｅａｌｌの基準を「５」、エラー数Ｅｈｒｓの基準を「２」としたが、これらは固定値ではなく可変にしてもよい。一般的に、不揮発性メモリは、書換え回数が多いほどセルのデータ保持特性は悪くなる。したがって、ＬＲＳのセルは書換え回数が多いと、少ないリード回数でデータが正常に読めなくなる可能性がある。一方、ＨＲＳのセルはデータが保持できる時間が短くなる可能性がある。そこで、物理アドレス毎にデータの更新回数をカウントし、物理アドレスと更新回数とを対応付けたテーブルをリフレッシュ情報管理部２５０に保持しておくこととする。そして、ステップＳ８２３およびＳ８２４において処理を行っている物理アドレスに対応する書換え回数を取得して、その書換え回数に応じた基準をリフレッシュ情報管理部２５０のテーブルから取得するようにしてもよい。例えば、書換え回数が０回から５００００回であれば、上述の実施の形態と同様に、全エラー数Ｅａｌｌの基準を「５」、エラー数Ｅｈｒｓの基準を「２」とする。また、書換え回数が５０００１回から１０００００回であれば、例えば、全エラー数Ｅａｌｌの基準を「４」、エラー数Ｅｈｒｓの基準を「２」とする。また、書換え回数が１０００１回を超えた場合には、例えば、全エラー数Ｅａｌｌの基準を「４」、エラー数Ｅｈｒｓの基準を「３」とする。
【０１１０】
［第３の変形例（ホストコンピュータによる通知に基づく制御）］
上述の第１の実施の形態では、検出されたエラー数のみに基づいて、リフレッシュ処理の実行有無の判断や、第１または第２リフレッシュリクエストの切替えを判断したが、ホストコンピュータ１００から判断の条件を受け取るようにしてもよい。すなわち、ホストコンピュータ１００が無効となったデータの論理アドレスを通知した場合、メモリコントローラ２００は通知された論理アドレスのリフレッシュを実行しないように制御してもよい。このような通知として、例えば、ＳＡＴＡ  Ｒｅｖｉｓｉｏｎ  ３．１で規定されるＴＲＩＭコマンドや、ＮＶＭ  ＥＸＰＲＥＳＳ  Ｒｅｖｉｓｉｏｎ  １．１で規定されるＤａｔａｓｅｔ  Ｍａｎａｇｅｍｅｎｔコマンド等を想定することができる。また、ホストコンピュータ１００が、データの書換えが頻繁に実行される論理アドレスを通知した場合、メモリコントローラ２００は通知された論理アドレスのリフレッシュ処理については、全て第１リフレッシュリクエストとして扱うようにしてもよい。このような通知として、例えば、ＮＶＭ  ＥＸＰＲＥＳＳ  Ｒｅｖｉｓｉｏｎ  １．１で規定されるＤａｔａｓｅｔ  Ｍａｎａｇｅｍｅｎｔコマンド等を想定することができる。
【０１１１】
＜２．第２の実施の形態＞
上述の第１の実施の形態では、リードコマンドの実行中にリフレッシュ処理を行っていたが、リードコマンドの実行後にリフレッシュ処理を行うようにしてもよい。この場合、エラー情報を受け渡すための処理が必要になる。以下では、リードコマンドの実行後にリフレッシュ処理を行う例について第２の実施の形態として説明する。なお、情報処理システムとしての構成は第１の実施の形態と同様であるため、詳細な説明は省略する。
【０１１２】
［情報処理システムの動作］
図２１は、本技術の第２の実施の形態におけるメモリコントローラ２００のリードコマンド処理手順の一例を示す流れ図である。
【０１１３】
このリードコマンド処理は、図１４により説明した第１の実施の形態と基本的には同様の手順となっている。ただし、第１の実施の形態ではエラー訂正後にリフレッシュ処理（ステップＳ８２０）を実行していたが、この第２の実施の形態では全エラー数Ｅａｌｌが「５」より大きいか否かを判断する（ステップＳ８３１）。そして、全エラー数Ｅａｌｌが「５」より大きい場合に（ステップＳ８３１：Ｙｅｓ）、エラー情報をリフレッシュ情報管理部２５０に保持する（ステップＳ８３２）。このエラー情報は、エラーが発生した物理アドレスと、ステップＳ８１５でカウントしたエラー数Ｅｈｒｓとを対応付けたものである。リフレッシュ情報管理部２５０は、このエラー情報をＦＩＦＯ（先入れ先出し）方式によって保持することにより、エラーの発生順にリフレッシュ処理をすることが可能となる。
【０１１４】
図２２は、本技術の第２の実施の形態におけるメモリコントローラ２００のリフレッシュ処理の処理手順の一例を示す流れ図である。上述の第１の実施の形態ではリードコマンド処理の一部（ステップＳ８２０）として実行されていたが、この第２の実施の形態ではメモリコントローラ２００が任意のタイミングで自発的に行う。例えば、メモリコントローラ２００がホストコンピュータ１００からコマンドを受け取っていない等、メモリコントローラ２００側で処理が何も行われていない状態で、自発的にリフレッシュ処理を行うことが想定される。
【０１１５】
プロセッサ２１０は、リフレッシュ処理対象となる物理アドレスを選択する（ステップＳ８３１）。この第２の実施の形態では、プロセッサ２１０は、リフレッシュ情報管理部２５０に保持されたエラー情報をＦＩＦＯの先頭から順に読み出し、そのエラー情報に含まれる物理アドレスをリフレッシュ処理対象として選択する。
【０１１６】
プロセッサ２１０は、選択した物理アドレスを指定して、メモリ３００に対してリードリクエストを要求する（ステップＳ８３２）。メモリ３００から読み出されるデータは、未使用領域と冗長ビットを含めた５２８バイトである。
【０１１７】
ＥＣＣ処理部２４０は、保持されている５２８バイトのデータについてエラー訂正を行う（ステップＳ８３３）。
【０１１８】
プロセッサ２１０は、ステップＳ８３１で選択した物理アドレスに対応するエラー数Ｅｈｒｓが２ビットより多いか否かを判定する（ステップＳ８３４）。エラー数Ｅｈｒｓが２ビットより多い場合には（ステップＳ８３４：Ｙｅｓ）、プロセッサ２１０はメモリ３００に対してそのエラーを発生した物理アドレスについて第１リフレッシュリクエストを要求する（ステップＳ８３５）。この第１リフレッシュリクエストの処理は、メモリ３００において図１６により説明した手順で行われる。一方、エラー数Ｅｈｒｓが２ビット以下の場合には（ステップＳ８３４：Ｎｏ）、プロセッサ２１０はメモリ３００に対してそのエラーを発生した物理アドレスについて第２リフレッシュリクエストを要求する（ステップＳ８３６）。この第２リフレッシュリクエストの処理は、メモリ３００において図１７により説明した手順で行われる。第１リフレッシュリクエストまたは第２リフレッシュリクエストで指定される物理アドレスは、ステップＳ８３１で選択された物理アドレスである。
【０１１９】
プロセッサ２１０は、第１リフレッシュリクエストまたは第２リフレッシュリクエストに対する処理においてエラーが発生したか否かを判定する（ステップＳ８３７）。エラーが発生していなければ（ステップＳ８３７：Ｎｏ）、リフレッシュ処理を終了する。エラーが発生している場合には（ステップＳ８３７：Ｙｅｓ）、プロセッサ２１０は、論理アドレスに割り当てられていないメモリ３００の物理アドレスを取得する（ステップＳ８３８）。そして、その取得した物理アドレスを指定してメモリ３００にライトリクエストを要求し、データの書込みを行う（ステップＳ８３９）。書き込まれるデータは、ＥＣＣ処理部２４０で保持しているエラー訂正済みの５２８バイトのデータである。そして、アドレス変換テーブル中の、リフレッシュ処理を行った論理アドレスに対応する物理アドレスの値を、書込みを行った物理アドレスの値に更新する（ステップＳ８３９−１）。
【０１２０】
プロセッサ２１０は、ホストコンピュータ１００から受信したコマンドであって、未処理のコマンドが存在するか否かを判定する（ステップＳ８４１）。受信したコマンドで未処理のコマンドが存在する場合には（ステップＳ８４１：Ｙｅｓ）、さらに、リフレッシュ情報管理部２５０で管理する物理アドレスのなかで未だリフレッシュ処理が実行されていない物理アドレスが存在するか否かを判定する（ステップＳ８４２）。そのような物理アドレスが存在する場合には（ステップＳ８４２：Ｙｅｓ）、ステップＳ８３１以降の処理を繰り返す。そのような物理アドレスが存在しない場合には（ステップＳ８４２：Ｎｏ）、このリフレッシュ処理を終了する。
【０１２１】
このように、本技術の第２の実施の形態によれば、メモリコントローラ２００側で処理が何も行われていない状態で自発的にリフレッシュ処理を行うことにより、リードコマンド処理の性能を低下させることなくリフレッシュ処理を行うことができる。
【０１２２】
［第１の変形例（エラー情報の管理方式）］
上述の第２の実施の形態では、物理アドレスとエラー数ＥｈｒｓとをＦＩＦＯにより管理する例を示したが、ＦＩＦＯ以外の方式により管理するようにしてもよい。この場合、ステップＳ８３１において物理アドレスを選択する手法として、物理アドレスの値の小さい順または大きい順に選択する等の手法を採用することができる。
【０１２３】
また、エラー情報として、ＲＡＭ２２０において物理アドレスを保持するようにしてもよい。この場合、リフレッシュ処理では、ステップＳ８３３の処理に加えて、エラー訂正実行時に本来「１」であるべきビットが劣化により「０」と読み出されたビット数Ｅｈｒｓのカウントを行い、ステップＳ８３４の判定に使用する。
【０１２４】
［第２の変形例（エラー数の基準を可変）］
この第２の実施の形態においても、上述の第１の実施の形態と同様に、全エラー数Ｅａｌｌの基準、および、エラー数Ｅｈｒｓの基準を、可変にしてもよい。
【０１２５】
［第３の変形例（ホストコンピュータによる通知に基づく制御）］
この第２の実施の形態においても、上述の第１の実施の形態と同様に、ホストコンピュータ１００から判断の条件を受け取るようにしてもよい。
【０１２６】
＜３．第３の実施の形態＞
上述の第１および第２の実施の形態では、劣化した低抵抗状態のエラー数Ｅｈｒｓに基づいてリフレッシュ処理の切替えを行っていたが、この第３の実施の形態では、ライト前後の高抵抗状態のビット数に基づいてリフレッシュ処理の切替えを行う。すなわち、この第３の実施の形態では、データ書き込み時に、５１２バイトのデータに含まれる「０」（ＨＲＳ）の数をビット単位でカウントして、その値Ｗｈｒｓを保持しておく。そして、読み出したデータに含まれる「０」（ＨＲＳ）の数をカウントした値Ｒｈｒｓを生成して値Ｗｈｒｓと比較する。これにより、値Ｗｈｒｓと値Ｒｈｒｓとの差が所定数を超える場合に第１リフレッシュ処理となるようにリフレッシュ処理の切替えを行う。なお、情報処理システムとしての構成は第１および第２の実施の形態と同様であるため、詳細な説明は省略する。
【０１２７】
［データ構造］
図２３は、本技術の第３の実施の形態におけるメモリセルアレイ３１０に記憶される物理ページの構造の一例を示す図である。
【０１２８】
上述の第１の実施の形態では、データ６０１と冗長ビット６０３との間の３バイトの領域を未使用の領域としていたが、この第３の実施の形態では書込みを行った際の高抵抗状態のビット数Ｗｈｒｓを記憶する領域６１２として用いる。なお、以下ではこの領域６１２はＥＣＣで保護されていないデータであると想定しているが、ＥＣＣでの保護対象としてもよい。
【０１２９】
［情報処理システムの動作］
図２４は、本技術の第３の実施の形態におけるメモリコントローラ２００のリードコマンド処理手順の一例を示す流れ図である。
【０１３０】
このリードコマンド処理は、図１４により説明した第１の実施の形態と基本的には同様の手順となっている。ただし、第１の実施の形態ではＥＣＣ処理部２４０がステップＳ８１５においてエラー数をカウントしていたが、この第３の実施の形態ではこれに代えて、プロセッサ２１０がデータに含まれる「０」の数をビット単位でカウントする（ステップＳ８１６）。ここでカウントされた値をＲｈｒｓとする。そして、このカウントされた値Ｒｈｒｓと、読み出されたデータに含まれる領域６１２の値Ｗｈｒｓとが参照されて、リフレッシュ処理が行われる（ステップＳ８５０）。
【０１３１】
図２５は、本技術の第３の実施の形態におけるメモリコントローラ２００のリフレッシュ処理（ステップＳ８５０）の処理手順の一例を示す流れ図である。
【０１３２】
プロセッサ２１０は、値Ｒｈｒｓから値Ｗｈｒｓを減算した数の絶対値を計算して、その値が「５」より多いか否かを判定する（ステップＳ８５３）。その値が「５」以下の場合にはリフレッシュ処理を終了する（ステップＳ８５３：Ｎｏ）。
【０１３３】
プロセッサ２１０は、値Ｒｈｒｓと値Ｗｈｒｓとを比較して大小関係を判定する（ステップＳ８５４）。これにより、劣化したＬＲＳのセルの数と、劣化したＨＲＳのセルの数を比較することができる。値Ｒｈｒｓの方が大きい場合には（ステップＳ８５４：Ｙｅｓ）、プロセッサ２１０はメモリ３００に対してそのエラーを発生した物理アドレスについて第１リフレッシュリクエストを要求する（ステップＳ８５５）。この第１リフレッシュリクエストの処理は、メモリ３００において図１６により説明した手順で行われる。一方、値Ｒｈｒｓの方が大きくない場合には（ステップＳ８５４：Ｎｏ）、プロセッサ２１０はメモリ３００に対してそのエラーを発生した物理アドレスについて第２リフレッシュリクエストを要求する（ステップＳ８５６）。この第２リフレッシュリクエストの処理は、メモリ３００において図１７により説明した手順で行われる。
【０１３４】
プロセッサ２１０は、第１リフレッシュリクエストまたは第２リフレッシュリクエストに対する処理においてエラーが発生したか否かを判定する（ステップＳ８５７）。エラーが発生していなければ（ステップＳ８５７：Ｎｏ）、リフレッシュ処理を終了する。エラーが発生している場合には（ステップＳ８５７：Ｙｅｓ）、プロセッサ２１０は、論理アドレスに割り当てられていないメモリ３００の物理アドレスを取得する（ステップＳ８５８）。そして、その取得した物理アドレスを指定してメモリ３００にライトリクエストを要求し、データの書込みを行う（ステップＳ８５９）。書き込まれるデータは、ＥＣＣ処理部２４０で保持しているエラー訂正済みの５２８バイトのデータである。また、このとき、プロセッサ２１０は、データに含まれる「０」の数をカウントして、領域６１２に値Ｗｈｒｓとして書き込む。そして、アドレス変換テーブル中の、リフレッシュ処理を行った論理アドレスに対応する物理アドレスの値を、書込みを行った物理アドレスの値に更新する（ステップＳ８５９−１）。
【０１３５】
このように、本技術の第３の実施の形態によれば、書込みの前後における「０」（ＨＲＳ）の数をカウントして比較することにより、リフレッシュ処理の切替えを制御することができる。
【０１３６】
［変形例（リードコマンドの実行後にリフレッシュ処理を行う例）］
上述の第３の実施の形態では、リードコマンドの実行中にリフレッシュ処理を行っていたが、第２の実施の形態と同様にリードコマンドの実行後にリフレッシュ処理を行うようにしてもよい。これにより、メモリコントローラ２００側で処理が何も行われていない状態で自発的にリフレッシュ処理を行って、リードコマンド処理の性能を低下させることなくリフレッシュ処理を行うことができる。
【０１３７】
＜４．第４の実施の形態＞
上述の実施の形態では、劣化した低抵抗状態のエラー数やライト前後の高抵抗状態のビット数といった具体的な値に基づいてリフレッシュ処理の切替えを制御していたが、この第４の実施の形態では測定量に基づいてメモリセルの劣化状態を判断する。不揮発性メモリのメモリセルの状態が劣化する要因として、ＬＲＳのメモリセルの場合はリードと経年変化、ＨＲＳのメモリセルの場合は経年変化が挙げられる。そこで、リード回数に応じてＬＲＳのメモリセルのリフレッシュを行い、データ書込み後の経過時間に応じてＬＲＳとＨＲＳのメモリセルのリフレッシュを行う方法の適用を検討する。
【０１３８】
この第４の実施の形態では、一例として、ストレージシステムとして保証するビットエラーレートＵＢＥＲ（Uncorrectable Bit Error Rate）については、「ＵＢＥＲ＜１０-10」を想定する。すなわち、メモリコントローラ２００のＥＣＣ処理部２４０は、メモリ３００から読み出されるデータのビットエラーレートＲＢＥＲ（Raw Bit Error Rate）が「ＲＢＥＲ＜１０-4」である場合に、「ＵＢＥＲ＜１０-10」を保証する訂正能力があるものとする。ここで、ＵＢＥＲは訂正不可能であるとしてホストコンピュータ１００にエラー報告される率であり、ＲＢＥＲはメモリ３００から読み出されたエラー訂正前の状態におけるエラー発生率である。不揮発性メモリの特性としては、データ書き込み直後には「ＲＢＥＲ＜１０-5」であるが、１００００回のリードを経るとＬＲＳのメモリセルは、「ＲＢＥＲ＜１０-4」となる。また、５年間データを保持したままの状態を継続すると、ＬＲＳおよびＨＲＳのメモリセルはともに、「ＲＢＥＲ＜１０-4」となる。
【０１３９】
そこで、この第４の実施の形態では、１００００回のリード後にＬＲＳのメモリセルについて第１リフレッシュリクエストを要求し、データ書込み後５年した際にＬＲＳとＨＲＳのメモリセルについて第２リフレッシュリクエストを要求するものとする。第１リフレッシュリクエストにより実行されるリフレッシュ処理は、リードコマンド実行中に行うものとする。一方、第２リフレッシュリクエストにより実行されるリフレッシュ処理は、ストレージシステム（メモリコントローラ２００およびメモリ３００）のパワーオン直後に実行されるものとする。
【０１４０】
また、この第４の実施の形態では、ストレージシステムとしては内部に時計を備えず、ホストコンピュータ１００からも時間が通知されないという条件における適用を試みる。この第４の実施の形態のストレージシステムのユースケースとしては、定期的に電源のオンとオフが行われるシステムを想定し、一例として、１日に１回、ストレージシステムの電源のオンとオフが行われるケースを想定する。
【０１４１】
経過時間を測定するための代替方法として、この第４の実施の形態では、ストレージシステムのパワーがオンされた回数を使用する。この第４の実施の形態のストレージシステムでは、プロセッサ２１０が、ストレージシステムの製造後に、パワーオンされた回数をカウントして、リフレッシュ情報管理部２５０に保持する。この「パワーオン回数」は、ストレージシステムのパワーがオンされるたびにインクリメントされ、クリアされない値である。なお、ストレージシステムに時計を備える場合や、ホストコンピュータ１００からストレージシステムに時間が通知される場合には、直接更新日時を管理してもよい。
【０１４２】
［情報管理テーブル］
図２６は、本技術の第４の実施の形態におけるリフレッシュ情報管理テーブルの構成例を示す図である。このリフレッシュ情報管理テーブルは、リフレッシュ情報管理部２５０に保持される。このリフレッシュ情報管理テーブルでは、物理アドレスごとに、リード回数およびデータ更新時のパワーオン回数を管理する。
【０１４３】
「リード回数」は、対応する物理アドレスから読み出しが行われた回数を示すものである。この「リード回数」は、対応する物理アドレスに書き込まれたデータが更新された際、または、第１または第２リフレッシュリクエスト処理が実行された際に、「０」にクリアされる。この「リード回数」は、リードリクエストが発生した際に、インクリメント（「１」加算）される。
【０１４４】
「データ更新時のパワーオン回数」は、対応する物理アドレスに書き込まれたデータが更新等された際のパワーオン回数を示すものである。この「データ更新時のパワーオン回数」は、対応する物理アドレスに書き込まれたデータが更新された際、または、第２リフレッシュリクエスト処理が実行された際に、リフレッシュ情報管理部２５０に保持される「パワーオン回数」に置換される。上述のように、リフレッシュ情報管理部２５０に保持される「パワーオン回数」はストレージシステムのパワーがオンされるたびにインクリメントされ、クリアされない値である。そのため、回数を単位としたタイムスタンプの役割を果たす。したがって、リフレッシュ情報管理部２５０に保持される「パワーオン回数」から「データ更新時のパワーオン回数」を減じることにより、データ更新以降にメモリシステムがパワーオンされた回数を取得することができる。
【０１４５】
［情報処理システムの動作］
図２７は、本技術の第４の実施の形態におけるメモリコントローラ２００のリードコマンド処理手順の一例を示す流れ図である。
【０１４６】
このリードコマンド処理は、図１４により説明した第１の実施の形態と基本的には同様の手順となっている。ただし、以下に説明するように、リフレッシュ処理（ステップＳ８６０）の内容が異なっている。
【０１４７】
図２８は、本技術の第４の実施の形態におけるメモリコントローラ２００のリフレッシュ処理（ステップＳ８６０）の処理手順の一例を示す流れ図である。
【０１４８】
プロセッサ２１０は、リフレッシュ情報管理テーブル内の、データの読出し要求を行った物理アドレスに対応する「リード回数」をインクリメントする（ステップＳ８６１）。
【０１４９】
プロセッサ２１０は、インクリメントした「リード回数」が１００００回に達したか否かを判定する（ステップＳ８６２）。「リード回数」が１００００回に達していない場合には（ステップＳ８６２：Ｎｏ）、リフレッシュ処理を行わずに終了する。「リード回数」が１００００回に達した場合には（ステップＳ８６２：Ｙｅｓ）、プロセッサ２１０はメモリ３００に対してその物理アドレスについて第１リフレッシュリクエストを要求する（ステップＳ８６３）。
【０１５０】
プロセッサ２１０は、第１リフレッシュリクエストに対する処理においてエラーが発生したか否かを判定する（ステップＳ８６４）。エラーが発生している場合には（ステップＳ８６４：Ｙｅｓ）、プロセッサ２１０は、論理アドレスに割り当てられていないメモリ３００の物理アドレスを取得する（ステップＳ８６５）。そして、その取得した物理アドレスを指定してメモリ３００にライトリクエストを要求し、データの書込みを行う（ステップＳ８６６）。書き込まれるデータは、ＥＣＣ処理部２４０で保持しているエラー訂正済みの５２８バイトのデータである。そして、アドレス変換テーブル中の、リフレッシュ処理を行った論理アドレスに対応する物理アドレスの値を、書込みを行った物理アドレスの値に更新する（ステップＳ８６６−１）。一方、エラーが発生していなければ（ステップＳ８６４：Ｎｏ）、これらの処理は行われない。
【０１５１】
プロセッサ２１０は、第１リフレッシュリクエストを要求した物理アドレスに対応する「リード回数」を「０」にクリアして（ステップＳ８６７）、リフレッシュ処理を終了する。
【０１５２】
図２９は、本技術の第４の実施の形態におけるメモリコントローラ２００のリフレッシュ実行確認処理手順の一例を示す流れ図である。なお、このリフレッシュ実行確認処理は、メモリコントローラ２００の電源が投入された直後に実行される。
【０１５３】
プロセッサ２１０は、リフレッシュ情報管理テーブルで管理されている物理アドレスを小さい順に選択して、その選択された物理アドレスの「データ更新時のパワーオン回数」の値を取得する（ステップＳ８７１）。
【０１５４】
プロセッサ２１０は、リフレッシュ情報管理部２５０で保持している「パワーオン回数」から、ステップＳ８７１で取得した「データ更新時のパワーオン回数」を減算し、その数が１８２５回に達したか否かを判断する（ステップＳ８７２）。この１８２５回は、５年分のパワーオン回数に相当するものである。１８２５回に達した場合には（ステップＳ８７２：Ｙｅｓ）、リフレッシュ処理（ステップＳ８８０）を実行する。そして、ステップＳ８７１で選択された物理アドレスの「データ更新時のパワーオン回数」をリフレッシュ情報管理部２５０で保持している「パワーオン回数」に更新する（ステップＳ８７４）。１８２５回に達していない場合には（ステップＳ８７２：Ｎｏ）、これらの処理は実行されない。
【０１５５】
プロセッサ２１０は、リフレッシュ情報管理テーブルで管理されている全ての物理アドレスについて処理が終了したか否かを判定する（ステップＳ８７５）。全ての物理アドレスについて処理が終了していない場合には（ステップＳ８７５：Ｎｏ）、ステップＳ８７１以降の処理を繰り返す。全ての物理アドレスについて処理が終了している場合には（ステップＳ８７５：Ｙｅｓ）、リフレッシュ実行確認処理を終了する。
【０１５６】
図３０は、本技術の第４の実施の形態におけるメモリコントローラ２００のリフレッシュ処理（ステップＳ８８０）の処理手順の一例を示す流れ図である。
【０１５７】
プロセッサ２１０は、ステップＳ８７１で選択した物理アドレスを指定して、メモリ３００に対してリードリクエストを要求する（ステップＳ８８２）。メモリ３００から読み出されるデータは、未使用領域と冗長ビットを含めた５２８バイトである。
【０１５８】
メモリ３００から読み出された５２８バイトのデータは、ＥＣＣ処理部２４０へ転送される。ＥＣＣ処理部２４０は、５２８バイトのデータのエラー訂正を行い、その訂正結果を保持する（ステップＳ８８３）。
【０１５９】
プロセッサ２１０は、メモリ３００に対してそのエラーを発生した物理アドレスについて第２リフレッシュリクエストを要求する（ステップＳ８８６）。この第２リフレッシュリクエストの処理は、メモリ３００において図１７により説明した手順で行われる。この第２リフレッシュリクエストで指定される物理アドレスは、ステップＳ８７１で選択した物理アドレスであり、転送されるデータはＥＣＣ処理部２４０に保持されている訂正後の５２８バイトのデータである。
【０１６０】
プロセッサ２１０は、第２リフレッシュリクエストに対する処理においてエラーが発生したか否かを判定する（ステップＳ８８７）。エラーが発生していなければ（ステップＳ８８７：Ｎｏ）、リフレッシュ処理を終了する。エラーが発生している場合には（ステップＳ８８７：Ｙｅｓ）、プロセッサ２１０は、論理アドレスに割り当てられていないメモリ３００の物理アドレスを取得する（ステップＳ８８８）。そして、その取得した物理アドレスを指定してメモリ３００にライトリクエストを要求し、データの書込みを行う（ステップＳ８８９）。書き込まれるデータは、ＥＣＣ処理部２４０に保持されているエラー訂正済みの５２８バイトのデータである。そして、アドレス変換テーブル中の、リフレッシュ処理を行った論理アドレスに対応する物理アドレスの値を、書込みを行った物理アドレスの値に更新する（ステップＳ８８９−１）。
【０１６１】
このように、本技術の第４の実施の形態では、物理アドレス毎に管理されたリード回数に基づいて第１リフレッシュリクエストを要求し、物理アドレス毎に管理されたパワーオン回数に基づいて第２リフレッシュリクエストを要求する。これにより、メモリ３００に関する具体的な値を使用せずに、測定量に基づいてメモリセルの劣化状態を判断して、リフレッシュ処理の切替えを制御することができる。
【０１６２】
［第１の変形例（リード回数またはパワーオン回数を可変）］
上述の第４の実施の形態では、リード回数の基準を「１００００」、パワーオン回数の基準を「１８２５回（５年）」としたが、これらは固定値ではなく可変にしてもよい。一般的に、不揮発性メモリは、書換え回数が多いほどセルのデータ保持特性は悪くなる。そこで、例えば、書換え回数が０回から５００００回であれば、上述の実施の形態と同様に、リード回数の基準を「１００００」、パワーオン回数の基準を「１８２５回（５年）」とする。また、書換え回数が５０００１回から１０００００回であれば、例えば、リード回数の基準を「５０００」、パワーオン回数の基準を「１０９５回（３年）」とする。また、書換え回数が１０００１回を超えた場合には、例えば、リード回数の基準を「３０００」、パワーオン回数の基準を「３６５回（１年）」とする。
【０１６３】
［第２の変形例（ホストコンピュータによる通知に基づく制御）］
この第４の実施の形態においても、上述の第１の実施の形態と同様に、ホストコンピュータ１００から判断の条件を受け取るようにしてもよい。
【０１６４】
＜５．第５の実施の形態＞
上述の第４の実施の形態では、リード回数を測定量として、これに基づいてメモリセルの劣化状態を判断していた。ここで、ＬＲＳとＨＲＳのそれぞれのセルの状態が変化する要因としては、ＬＲＳのセルとＨＲＳのセルとがともに経年変化する点が挙げられる。そこで、この第５の実施の形態では、リフレッシュが行われた時点からの経過期間を測定量として、メモリセルの劣化状態を判断する。
【０１６５】
上述のように、メモリコントローラ２００のＥＣＣ処理部２４０は、メモリ３００から読み出されるデータのビットエラーレートＲＢＥＲ（Raw Bit Error Rate）が「ＲＢＥＲ＜１０-4」である場合に、「ＵＢＥＲ＜１０-10」を保証する訂正能力があるものとする。この第５の実施の形態で想定する不揮発性メモリの特性としては、データ書き込み直後には「ＲＢＥＲ＜１０-5」であり、２年間データを保持したままの状態を継続すると、ＬＲＳのセルは「ＲＢＥＲ＜１０-4」となるものとする。また、５年間データを保持したままの状態を継続した場合、ＨＲＳのメモリセルは「ＲＢＥＲ＜１０-4」となるものとする。そこで、この第５の実施の形態では、データ書込み後２年経過ごとにＬＲＳのセルのリフレッシュ（第１リフレッシュ処理）を行い、データ書込み後５年経過ごとにＬＲＳおよびＨＲＳのセルのリフレッシュ（第２リフレッシュ処理）を行う。
【０１６６】
この第５の実施の形態では、ストレージシステムは、ストレージシステムへの電源の投入時と、電源が供給されている間は１日１回、ホストコンピュータ１００から、日付を通知するためコマンドが発行されることを想定する。また、ストレージシステムは、ホストコンピュータ１００から通知された日付のうち最新の日付を、リフレッシュ情報管理部２５０に保持する。
【０１６７】
メモリコントローラ２００は、ホストコンピュータ１００から日付を通知するためのコマンドを受信すると、リフレッシュ情報管理部２５０に保持されている日付を更新し、コマンドの実行終了をホストコンピュータ１００に通知する。メモリコントローラ２００は、日付を通知するためのコマンドの実行終了をホストコンピュータ１００に通知した後、リフレッシュ情報管理部２５０で管理している最新の日付が更新されると、リフレッシュ実行確認処理を開始する。このリフレッシュ実行確認処理では、それぞれの物理ページに対してリフレッシュ処理を実行するか否かが判別される。
【０１６８】
［情報管理テーブル］
図３１は、本技術の第５の実施の形態におけるリフレッシュ情報管理テーブルの構成例を示す図である。このリフレッシュ情報管理テーブルは、リフレッシュ情報管理部２５０に保持される。この第５の実施の形態におけるリフレッシュ情報管理テーブルでは、物理アドレスごとに、ＬＲＳセル最終リフレッシュ日およびＨＲＳセル最終リフレッシュ日を管理する。
【０１６９】
「ＬＲＳセル最終リフレッシュ日」は、その物理アドレスに該当するセルのうち、ＬＲＳとなっているセルが最後にリフレッシュされた日を示すものである。「ＨＲＳセル最終リフレッシュ日」は、その物理アドレスに該当するセルのうち、ＨＲＳとなっているセルが最後にリフレッシュされた日を示すものである。
【０１７０】
［情報処理システムの動作］
図３２は、本技術の第５の実施の形態におけるメモリコントローラ２００のリフレッシュ実行確認処理手順の一例を示す流れ図である。
【０１７１】
まず、プロセッサ２１０は、リフレッシュ情報管理テーブルで管理されているエントリを物理アドレスの小さい順に選択して、「ＬＲＳセル最終リフレッシュ日」の値と「ＨＲＳセル最終リフレッシュ日」の値とを取得する（ステップＳ７１１）。そして、「ＨＲＳセル最終リフレッシュ日」とリフレッシュ情報管理部２５０で保持している最新の日付とによって、「ＨＲＳセル最終リフレッシュ日」から５年が経過しているかを判断する（ステップＳ７１２）。
【０１７２】
「ＨＲＳセル最終リフレッシュ日」から５年が経過している場合には（ステップＳ７１２：Ｙｅｓ）、第２リフレッシュ処理（ステップＳ７３０）を実行する。その後、「ＬＲＳセル最終リフレッシュ日」および「ＨＲＳセル最終リフレッシュ日」の値を、リフレッシュ情報管理部２５０で保持している最新の日付に更新する（ステップＳ７１８）。
【０１７３】
「ＨＲＳセル最終リフレッシュ日」から５年が経過していない場合には（ステップＳ７１２：Ｎｏ）、「ＬＲＳセル最終リフレッシュ日」から２年が経過しているかを判断する（ステップＳ７１２）。その際、「ＬＲＳセル最終リフレッシュ日」とリフレッシュ情報管理部２５０で保持している最新の日付とが参照される。「ＬＲＳセル最終リフレッシュ日」から２年が経過している場合には（ステップＳ７１４：Ｙｅｓ）、第１リフレッシュ処理（ステップＳ７２０）を実行する。このとき、第１リフレッシュ処理でエラーが発生した場合には（ステップＳ７１５：Ｙｅｓ）、ＨＲＳとＬＲＳのセルはリフレッシュが実行されたことになるため、ＨＲＳセル最終リフレッシュ日とＬＲＳセル最終リフレッシュ日を更新する（ステップＳ７１８）。一方、第１リフレッシュ処理でエラーが発生しなかった場合には（ステップＳ７１５：Ｎｏ）、「ＬＲＳセル最終リフレッシュ日」の値を、リフレッシュ情報管理部２５０で保持している最新の日付に更新する（ステップＳ７１６）。
【０１７４】
一方、「ＨＲＳセル最終リフレッシュ日」から５年が経過していなく、「ＬＲＳセル最終リフレッシュ日」から２年が経過していない場合には（ステップＳ７１４：Ｎｏ）、リフレッシュ処理は行われない。
【０１７５】
リフレッシュ情報管理テーブルで管理されている物理アドレスの１つのエントリについて処理が行われると、全てのエントリについて処理されるまで物理アドレスの小さい順に各エントリが選択されて処理されていく（ステップＳ７１９）。
【０１７６】
図３３は、本技術の第５の実施の形態におけるメモリコントローラ２００の第１リフレッシュ処理（ステップＳ７２０）の処理手順の一例を示す流れ図である。
【０１７７】
プロセッサ２１０は、ステップＳ７１１で選択した物理アドレスを指定して、メモリ３００に対してリードリクエストを要求する（ステップＳ７２２）。メモリ３００から読み出されるデータは、未使用領域と冗長ビットを含めた５２８バイトである。
【０１７８】
メモリ３００から読み出された５２８バイトのデータは、ＥＣＣ処理部２４０へ転送される。ＥＣＣ処理部２４０は、５２８バイトのデータのエラー訂正を行い、その訂正結果を保持する（ステップＳ７２３）。
【０１７９】
プロセッサ２１０は、メモリ３００に対してそのエラーを発生した物理アドレスについて第１リフレッシュリクエストを要求する（ステップＳ７２６）。この第１リフレッシュリクエストの処理は、メモリ３００において図１６により説明した手順で行われる。この第１リフレッシュリクエストで指定される物理アドレスは、ステップＳ７１１で選択した物理アドレスであり、転送されるデータはＥＣＣ処理部２４０に保持されている訂正後の５２８バイトのデータである。
【０１８０】
プロセッサ２１０は、第１リフレッシュリクエストに対する処理においてエラーが発生したか否かを判定する（ステップＳ７２７）。エラーが発生していなければ（ステップＳ７２７：Ｎｏ）、リフレッシュ処理を終了する。エラーが発生している場合には（ステップＳ７２７：Ｙｅｓ）、プロセッサ２１０は、論理アドレスに割り当てられていないメモリ３００の物理アドレスを取得する（ステップＳ７２８）。そして、その取得した物理アドレスを指定してメモリ３００にライトリクエストを要求し、データの書込みを行う（ステップＳ７２９）。書き込まれるデータは、ＥＣＣ処理部２４０に保持されているエラー訂正済みの５２８バイトのデータである。そして、アドレス変換テーブル中の、リフレッシュ処理を行った論理アドレスに対応する物理アドレスの値を、書込みを行った物理アドレスの値に更新する（ステップＳ７２９−１）。
【０１８１】
図３４は、本技術の第５の実施の形態におけるメモリコントローラ２００の第２リフレッシュ処理（ステップＳ７３０）の処理手順の一例を示す流れ図である。
【０１８２】
プロセッサ２１０は、ステップＳ７１１で選択した物理アドレスを指定して、メモリ３００に対してリードリクエストを要求する（ステップＳ７３２）。メモリ３００から読み出されるデータは、未使用領域と冗長ビットを含めた５２８バイトである。
【０１８３】
メモリ３００から読み出された５２８バイトのデータは、ＥＣＣ処理部２４０へ転送される。ＥＣＣ処理部２４０は、５２８バイトのデータのエラー訂正を行い、その訂正結果を保持する（ステップＳ７３３）。
【０１８４】
プロセッサ２１０は、メモリ３００に対してそのエラーを発生した物理アドレスについて第２リフレッシュリクエストを要求する（ステップＳ７３６）。この第２リフレッシュリクエストの処理は、メモリ３００において図１７により説明した手順で行われる。この第２リフレッシュリクエストで指定される物理アドレスは、ステップＳ７１１で選択した物理アドレスであり、転送されるデータはＥＣＣ処理部２４０に保持されている訂正後の５２８バイトのデータである。
【０１８５】
プロセッサ２１０は、第２リフレッシュリクエストに対する処理においてエラーが発生したか否かを判定する（ステップＳ７３７）。エラーが発生していなければ（ステップＳ７３７：Ｎｏ）、リフレッシュ処理を終了する。エラーが発生している場合には（ステップＳ７３７：Ｙｅｓ）、プロセッサ２１０は、論理アドレスに割り当てられていないメモリ３００の物理アドレスを取得する（ステップＳ７３８）。そして、その取得した物理アドレスを指定してメモリ３００にライトリクエストを要求し、データの書込みを行う（ステップＳ７３９）。書き込まれるデータは、ＥＣＣ処理部２４０に保持されているエラー訂正済みの５２８バイトのデータである。そして、アドレス変換テーブル中の、リフレッシュ処理を行った論理アドレスに対応する物理アドレスの値を、書込みを行った物理アドレスの値に更新する（ステップＳ７３９−１）。
【０１８６】
［第１の変形例］
上述の第５の実施の形態では、メモリコントローラ２００がホストコンピュータ１００から日付の通知を受けていたが、メモリコントローラ２００に時計を備えている場合には、日付の通知を受けずにリフレッシュを行うことが可能である。この場合、ストレージシステムの電源の投入時と、電源が供給されている間は時計で管理している日付が変わった場合とにおいて、それぞれの物理ページに対してリフレッシュ処理を実行するか否かを判別するために、上述のリフレッシュ実行確認処理を開始する。
【０１８７】
［第２の変形例］
上述の第５の実施の形態では、セットのみを行う第１リフレッシュ処理と、セットおよびリセットを行う第２リフレッシュ処理とを用いる例を示したが、他の組合せであっても同様の内容を実現することができる。以下では、リセットのみを行う第３リフレッシュ処理と、セットのみを行う第１リフレッシュ処理とを用いる例を第２の変形例として説明する。
【０１８８】
図３５は、本技術の第５の実施の形態におけるメモリコントローラ２００のリフレッシュ実行確認処理手順の変形例を示す流れ図である。この変形例は、図３２において説明したものとは、ステップＳ７１２の分岐先とステップＳ７４０およびＳ７１３とが異なっているが、その他の点については同様である。
【０１８９】
「ＨＲＳセル最終リフレッシュ日」から５年が経過していない場合には（ステップＳ７１２：Ｎｏ）、図３２の例と同様にステップＳ７１４以降の処理を行う。一方、「ＨＲＳセル最終リフレッシュ日」から５年が経過している場合には（ステップＳ７１２：Ｙｅｓ）、第３リフレッシュ処理（ステップＳ７４０）を実行する。このとき、第３リフレッシュ処理でエラーが発生した場合には（ステップＳ７１２−１：Ｙｅｓ）、ＨＲＳとＬＲＳのセルはリフレッシュが実行されたことになるため、ＨＲＳセル最終リフレッシュ日とＬＲＳセル最終リフレッシュ日を更新する（ステップＳ７１７）。一方、第３リフレッシュ処理でエラーが発生しなかった場合には（ステップＳ７１２−１：Ｎｏ）、「ＨＲＳセル最終リフレッシュ日」の値を、リフレッシュ情報管理部２５０で保持している最新の日付に更新する（ステップＳ７１３）。
【０１９０】
図３６は、本技術の第５の実施の形態におけるメモリコントローラ２００の第３リフレッシュ処理（ステップＳ７４０）の処理手順の一例を示す流れ図である。
【０１９１】
プロセッサ２１０は、ステップＳ７１１で選択した物理アドレスを指定して、メモリ３００に対してリードリクエストを要求する（ステップＳ７４２）。メモリ３００から読み出されるデータは、未使用領域と冗長ビットを含めた５２８バイトである。
【０１９２】
メモリ３００から読み出された５２８バイトのデータは、ＥＣＣ処理部２４０へ転送される。ＥＣＣ処理部２４０は、５２８バイトのデータのエラー訂正を行い、その訂正結果を保持する（ステップＳ７４３）。
【０１９３】
プロセッサ２１０は、メモリ３００に対してそのエラーを発生した物理アドレスについて第３リフレッシュリクエストを要求する（ステップＳ７４６）。この第３リフレッシュリクエストのメモリ３００における処理については後述する。この第３リフレッシュリクエストで指定される物理アドレスは、ステップＳ７１１で選択した物理アドレスであり、転送されるデータはＥＣＣ処理部２４０に保持されている訂正後の５２８バイトのデータである。
【０１９４】
プロセッサ２１０は、第３リフレッシュリクエストに対する処理においてエラーが発生したか否かを判定する（ステップＳ７４７）。エラーが発生していなければ（ステップＳ７４７：Ｎｏ）、リフレッシュ処理を終了する。エラーが発生している場合には（ステップＳ７４７：Ｙｅｓ）、プロセッサ２１０は、論理アドレスに割り当てられていないメモリ３００の物理アドレスを取得する（ステップＳ７４８）。そして、その取得した物理アドレスを指定してメモリ３００にライトリクエストを要求し、データの書込みを行う（ステップＳ７４９）。書き込まれるデータは、ＥＣＣ処理部２４０に保持されているエラー訂正済みの５２８バイトのデータである。そして、アドレス変換テーブル中の、リフレッシュ処理を行った論理アドレスに対応する物理アドレスの値を、書込みを行った物理アドレスの値に更新する（ステップＳ７４９−１）。
【０１９５】
図３７は、本技術の第５の実施の形態におけるメモリ３００の第３リフレッシュリクエスト処理の処理手順の一例を示す流れ図である。この第３リフレッシュリクエスト処理は、ステップＳ７４６における要求に応答して開始される。
【０１９６】
リクエスト処理部３６０は、メモリコントローラ２００から制御インターフェース３０９を通して、第３リフレッシュリクエストと物理アドレスを受信すると、第３リフレッシュリクエストの処理を開始する。第３リフレッシュリクエストの処理に必要な５２８バイトのデータは、制御インターフェース３０９からライトデータバッファ３４１に転送され、保持されている。物理アドレスは、制御インターフェース３０９からリクエスト処理部３６０に転送されて、保持されている。
【０１９７】
リクエスト処理部３６０は、リセット処理を実行する（ステップＳ７５１）。このリセット処理は、図１９において説明したものと同様である。
【０１９８】
リセット処理終了後、リクエスト処理部３６０は、そのリセット処理が正常に終了したか否かを判定する（ステップＳ７５２）。正常終了した場合には（ステップＳ７５２：Ｙｅｓ）、リクエスト処理部３６０は制御インターフェース３０９を介してメモリコントローラ２００に、第３リフレッシュリクエストが正常に終了した旨を通知する（ステップＳ７５５）。一方、エラー終了した場合には（ステップＳ７５２：Ｎｏ）、リクエスト処理部３６０は制御インターフェース３０９を介してメモリコントローラ２００に、第３リフレッシュリクエストがエラー終了した旨を通知する（ステップＳ７５６）。その後、リクエスト処理部３６０は、第３リフレッシュリクエスト処理を終了する。
【０１９９】
＜６．その他の変形例＞
［第１の変形例（リセット閾値とセット閾値）］
上述の第１乃至第４の実施の形態では、図５に示したように、ＬＲＳとＨＲＳの中間位置にあるリード閾値を用いてリードを行っていた。これに対し、リフレッシュの際には、通常の場合より厳しい閾値を用いることにより、抵抗状態の分布を以下のように改善することができる。
【０２００】
図３８は、本技術の実施の形態の変形例におけるメモリセル３１３の抵抗分布と閾値との関係を示す図である。この図にはＬＲＳとＨＲＳの中間位置にあるリード閾値に加えて、ＨＲＳ寄りに設けられたリセット閾値と、ＬＲＳ寄りに設けられたセット閾値とが示されている。
【０２０１】
第１リフレッシュリクエスト処理のセット動作において、セット閾値を使ってデータを読み出すと、ＬＲＳのセルのうち、ＨＲＳの状態に近いセルもパルスを印可する対象とするセルとして検出される。したがって、リード閾値付近のＬＲＳのセルも高いＬＲＳの状態に戻されるため、強力なリフレッシュが実行される。
【０２０２】
さらに、第２リフレッシュリクエスト処理のセット動作においてセット閾値を使用することに加えて、リセット処理においてもリセット閾値を用いることで、第２リフレッシュリクエスト処理においても、強力なリフレッシュ処理が実行される。
【０２０３】
［第２の変形例（複数の状態）］
上述の実施の形態では、ＬＲＳとＨＲＳの２つの状態により記憶状態を表すメモリセルを想定した。しかし、本技術は、２つの状態よりも多くの状態をとり得るメモリセルで構成されたメモリにも適用可能である。そのようなメモリセルにより構成されたメモリの例として、１つのメモリセルに２ビットのデータを記憶することが可能なメモリが挙げられる。そのようなメモリのメモリセルの抵抗分布図を図３９に示す。この図３９は、本技術の実施の形態の変形例における４つの状態を記憶するための抵抗分布図を示す図である。
【０２０４】
状態Ａの範囲の抵抗値のメモリセルは"１１"を記憶状態として有することを意味する。状態Ｂの範囲の抵抗値のメモリセルは"０１"を記憶状態として有することを意味する。状態Ｃの範囲の抵抗値のメモリセルは"００"を記憶状態として有することを意味する。状態Ｄの範囲の抵抗値のメモリセルは"１０"を記憶状態として有することを意味する。リードによってメモリセルの状態が劣化した場合、状態Ａのメモリセルは状態Ｂに、状態Ｂのメモリセルは状態Ｃに、状態Ｃのメモリセルは状態Ｄに、それぞれ遷移する。
【０２０５】
本技術を適用することにより、劣化した状態Ａのメモリセルが、状態Ｂとして検出された場合は、第１リフレッシュリクエスト処理により状態Ａに遷移し、メモリセルに記録されたデータの訂正を行うことが可能である。また、劣化した状態Ｂのメモリセルが、状態Ａとして検出された場合は、第２リフレッシュリクエスト処理により状態Ｂに遷移し、メモリセルに記録されたデータの訂正を行うことが可能である。
【０２０６】
［まとめ］
このように、上述の実施の形態では、メモリセルの劣化状態に応じて、セット動作およびリセット動作のうちセット動作のみを行う第１リフレッシュリクエストを要求する。これにより、多くのケースにおいて第１リフレッシュリクエスト処理が実行され、第２リフレッシュリクエスト処理よりも、高速な処理を実現することができる。また、第１リフレッシュリクエスト処理では、劣化したＬＲＳのセルにのみパルスが印可によるデータの書込みが行われる。全てのメモリセルに対してデータの書込みが行われる通常のリフレッシュ処理と比較すると、１回のリフレッシュ処理でストレスがかけられるメモリセルの数が低減されるため、例えば不揮発性メモリの長寿命化にも効果がある。
【０２０７】
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０２０８】
なお、本技術は以下のような構成もとることができる。
（１）各ビットが第１の動作によって第１の記憶状態に遷移し、第２の動作によって第２の記憶状態に遷移するメモリセルアレイにおいて、前記第１の動作および前記第２の動作のうち前記第１の動作のみを行う第１の書直し処理を行う第１のタイミングを検出する検出部と、
前記第１のタイミングが検出された場合には前記第１の書直し処理のリクエストを前記メモリセルアレイに対して要求する要求部と
を具備する記憶制御装置。
（２）前記検出部は、前記第１の記憶状態にあるべきビットについて前記第２の記憶状態であると読み出されたビット数が所定のビット数よりも多い場合に、前記第１のタイミングを検出する
前記（１）に記載の記憶制御装置。
（３）前記検出部は、前記メモリセルアレイにおいて検出されたエラー数が所定のエラー数よりも多い場合に、前記第１のタイミングの検出を開始する
前記（１）または（２）に記載の記憶制御装置。
（４）前記検出部は、所定のデータを前記メモリセルアレイに書き込んだ際の前記第２の記憶状態のビット数と、前記書き込まれた所定のデータを前記メモリセルアレイから読み出した際の前記第２の記憶状態のビット数とを比較して、前記読み出した際の前記第２の記憶状態のビット数の方が多い場合に、前記第１のタイミングを検出する
前記（１）に記載の記憶制御装置。
（５）前記検出部は、前記書き込んだ際の前記第２の記憶状態のビット数と前記読み出した際の前記第２の記憶状態のビット数と差が所定の数よりも多い場合に、前記第１のタイミングの検出を開始する
前記（３）または（４）に記載の記憶制御装置。
（６）前記メモリセルアレイについて物理アドレス毎にリード回数を記録する情報管理部をさらに具備し、
前記検出部は、前記リード回数が所定回数に達した物理アドレスについて前記第１のタイミングを検出する
前記（１）に記載の記憶制御装置。
（７）前記情報管理部は、前記第１の動作および前記第２の動作の両者を行う書直し処理のリクエストを前記メモリセルアレイに対して要求した後に前記メモリセルアレイの電源がオンになった電源オン回数をさらに記録し、
前記検出部は、前記電源オン回数が所定回数に達すると、前記第１の動作および前記第２の動作の両者を行う書直し処理のリクエストを前記メモリセルアレイに対して要求する
前記（６）に記載の記憶制御装置。
（８）前記検出部は、前記メモリセルアレイからの読出しを行うためのリードコマンドの実行中に前記第１のタイミングの検出を行う
前記（１）から（７）のいずれかに記載の記憶制御装置。
（９）前記検出部は、前記メモリセルアレイに対するアクセスを行うためのコマンドを実行していない状態において自発的に前記第１のタイミングの検出を行う
前記（１）から（８）のいずれかに記載の記憶制御装置。
（１０）前記検出部は、前記メモリセルアレイにおいて第１の書直し処理を行った後に所定期間を経過した場合に、前記第１のタイミングを検出する
前記（１）から（９）のいずれかに記載の記憶制御装置。
（１１）前記検出部は、前記第１の動作および前記第２の動作の両者を行う第２の書直し処理を行う第２のタイミングをさらに検出し、
前記要求部は、前記第２のタイミングが検出された場合には前記第２の書直し処理のリクエストを前記メモリセルアレイに対して要求する
前記（１）から（１０）のいずれかに記載の記憶制御装置。
（１２）各ビットが第１の動作によって第１の記憶状態に遷移し、第２の動作によって第２の記憶状態に遷移するメモリセルアレイと、
前記メモリセルアレイにおいて前記第１の動作および前記第２の動作のうち前記第１の動作のみを行う第１の書直し処理を行う第１のタイミングを検出する検出部と、
前記第１のタイミングが検出された場合には前記第１の書直し処理のリクエストを前記メモリセルアレイに対して要求する要求部と
を具備する記憶装置。
（１３）前記メモリセルアレイの各ビットは可変抵抗素子からなり、
前記第１の記憶状態は低抵抗状態であり、
前記第２の記憶状態は高抵抗状態であり、
前記第１の動作は、前記低抵抗状態に遷移させるセット動作であり、
前記第２の動作は、前記高抵抗状態に遷移させるリセット動作である
前記（１２）に記載の記憶装置。
（１４）各ビットが第１の動作によって第１の記憶状態に遷移し、第２の動作によって第２の記憶状態に遷移するメモリセルアレイと、
前記メモリセルアレイに対してリードコマンドを発行するホストコンピュータと、
前記リードコマンドの実行に関連して前記第１の動作および前記第２の動作のうち前記第１の動作のみを行う第１の書直し処理を行う第１のタイミングを検出する検出部と、
前記第１のタイミングが検出された場合には前記第１の書直し処理のリクエストを前記メモリセルアレイに対して要求する要求部と
を具備する情報処理システム。
（１５）各ビットが第１の動作によって第１の記憶状態に遷移し、第２の動作によって第２の記憶状態に遷移するメモリセルアレイにおいて、前記第１の動作および前記第２の動作のうち前記第１の動作のみを行う第１の書直し処理を行う第１のタイミングを検出する検出手順と、
前記第１のタイミングが検出された場合には前記第１の書直し処理のリクエストを前記メモリセルアレイに対して要求する要求手順と
を具備する記憶制御方法。
【符号の説明】
【０２０９】
１００  ホストコンピュータ
２００  メモリコントローラ
２０１  ホストインターフェース
２０３  メモリインターフェース
２１０  プロセッサ
２２０  ＲＡＭ
２３０  ＲＯＭ
２４０  ＥＣＣ処理部
２５０  リフレッシュ情報管理部
３００  メモリ
３０９  制御インターフェース
３１０  メモリセルアレイ
３１１  ロウ制御部
３１２  カラム制御部
３１３  メモリセル
３１４  アクセストランジスタ
３１５  可変セル抵抗
３２０  プレート制御部
３３１  ライト制御部
３３２  リード制御部
３３３  リフレッシュ制御部
３４０  バッファ
３４１  ライトデータバッファ
３４２  リードデータバッファ
３４３  ベリファイバッファ
３５０  検証処理部
３６０  リクエスト処理部
【図１】
2015038794.tif 000003
【図２】
2015038794.tif 000004
【図３】
2015038794.tif 000005
【図４】
2015038794.tif 000006
【図５】
2015038794.tif 000007
【図６】
2015038794.tif 000008
【図７】
2015038794.tif 000009
【図８】
2015038794.tif 000010
【図９】
2015038794.tif 000011
【図１０】
2015038794.tif 000012
【図１１】
2015038794.tif 000013
【図１２】
2015038794.tif 000014
【図１３】
2015038794.tif 000015
【図１４】
2015038794.tif 000016
【図１５】
2015038794.tif 000017
【図１６】
2015038794.tif 000018
【図１７】
2015038794.tif 000019
【図１８】
2015038794.tif 000020
【図１９】
2015038794.tif 000021
【図２０】
2015038794.tif 000022
【図２１】
2015038794.tif 000023
【図２２】
2015038794.tif 000024
【図２３】
2015038794.tif 000025
【図２４】
2015038794.tif 000026
【図２５】
2015038794.tif 000027
【図２６】
2015038794.tif 000028
【図２７】
2015038794.tif 000029
【図２８】
2015038794.tif 000030
【図２９】
2015038794.tif 000031
【図３０】
2015038794.tif 000032
【図３１】
2015038794.tif 000033
【図３２】
2015038794.tif 000034
【図３３】
2015038794.tif 000035
【図３４】
2015038794.tif 000036
【図３５】
2015038794.tif 000037
【図３６】
2015038794.tif 000038
【図３７】
2015038794.tif 000039
【図３８】
2015038794.tif 000040
【図３９】
2015038794.tif 000041