(57)【特許請求の範囲】
【請求項１】
データが書き込まれたアドレスについて所定のタイミングから経過した経過時間を計時する計時部と、
前記アドレスからの前記データの読出しが指示されると前記経過時間が一定時間を超えているか否かを判定する経過時間判定部と、
前記経過時間が前記一定時間を超えていないと判定された場合には前記アドレスからの前記データの読出しを休止するリード制御部と
を具備するメモリコントローラ。
【請求項２】
前記アドレスおよび前記経過時間を保持する保持部をさらに具備し、
前記計時部は、前記経過時間を計時するとともに前記アドレスおよび前記経過時間を前記保持部に保持させ、
前記経過時間判定部は、前記保持部から前記アドレスおよび前記経過時間を読み出す
請求項１記載のメモリコントローラ。
【請求項３】
前記計時部は、前記アドレスに前記データが書き込まれたタイミングを前記所定のタイミングとして前記経過時間を計時する
請求項１記載のメモリコントローラ。
【請求項４】
前記アドレスから読み出された前記データの誤りを検出して訂正する誤り検出訂正部をさらに具備し、
前記計時部は、前記経過時間が前記一定時間を超えると前記アドレスからの前記データの読出しを指示し、
前記リード制御部は、前記経過時間が前記一定時間を超えていると判定された場合または前記計時部により前記データの読出しが指示された場合には前記アドレスから前記データを読み出し、
前記計時部は、前記アドレスに前記データが書き込まれたタイミングまたは前記誤りの訂正に失敗したタイミングを前記所定のタイミングとして前記経過時間を計時する
請求項３記載のメモリコントローラ。
【請求項５】
前記アドレスから読み出された前記データの誤りを検出して訂正する誤り検出訂正部をさらに具備し、
前記計時部は、前記誤りの訂正に失敗したタイミングを前記所定のタイミングとして前記経過時間を計時する
請求項１記載のメモリコントローラ。
【請求項６】
前記計時部は、前記経過時間が前記一定時間を超えると前記アドレスからの前記データの読出しを指示し、
前記リード制御部は、前記経過時間が前記一定時間を超えていると判定された場合または前記計時部により前記データの読出しが指示された場合には前記アドレスから前記データを読み出す
請求項５記載のメモリコントローラ。
【請求項７】
前記経過時間が前記一定時間を超えていないと判定された場合にはリードエラーを出力するリードエラー出力部をさらに具備する
請求項１記載のメモリコントローラ。
【請求項８】
アドレスが割り当てられたメモリセルと、
データが書き込まれた前記アドレスについて所定のタイミングから経過した経過時間を計時する計時部と、
前記アドレスからの前記データの読出しが指示されると前記経過時間が一定時間を超えているか否かを判定する経過時間判定部と、
前記経過時間が前記一定時間を超えていないと判定された場合には前記アドレスからの前記データの読出しを休止するリード制御部と
を具備するメモリシステム。
【請求項９】
計時部が、データが書き込まれたアドレスについて所定のタイミングから経過した経過時間を計時する計時手順と、
経過時間判定部が、前記アドレスからの前記データの読出しが指示されると前記経過時間が一定時間を超えているか否かを判定する経過時間判定手順と、
前記経過時間が前記一定時間を超えていないと判定された場合には前記アドレスからの前記データの読出しを休止するリード制御手順と
を具備するメモリコントローラの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、メモリコントローラ、メモリシステム、および、メモリコントローラの制御方法に関する。詳しくは、エラーを検出するメモリコントローラ、メモリシステム、および、メモリコントローラの制御方法に関する。
【背景技術】
【０００２】
近年の情報処理システムにおいては、補助記憶装置やストレージとして、不揮発性メモリ（ＮＶＭ：Non-Volatile memory）が用いられることがある。この不揮発性メモリは、大きなサイズを単位としたデータアクセスに対応したフラッシュメモリと、小さな単位での高速なランダムアクセスが可能な不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ：Non-Volatile RAM）とに大別される。ここで、フラッシュメモリの代表例としては、ＮＡＮＤ型フラッシュメモリが挙げられる。一方、不揮発性ランダムアクセスメモリの例としては、ＲｅＲＡＭ（Resistive RAM）、ＰＣＲＡＭ（Phase-Change RAM）、ＭＲＡＭ（Magnetoresistive RAM）などが挙げられる。【０００３】
これらの不揮発性メモリにおいては、メモリセル内の電流の揺らぎにより、メモリセルの特性値（抵抗値など）が、一定期間に亘って不連続に変化する現象が生じることが知られている。この現象は、ランダムテレグラフノイズと呼ばれ、書き込んだデータにエラーが生じる原因となりうる。このエラーを誤り検出訂正符号（ＥＣＣ：Error detection and Correction Code）によって検出して訂正するメモリコントローラが提案されている（例えば、特許文献１参照。）。このメモリコントローラは、訂正に失敗した際に、メモリセルの特性値と比較するための閾値を変更して再度リードデータを読み出し、誤り検出および誤り訂正を行っている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平６−１１０７９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述のメモリコントローラでは、ランダムテレグラフノイズによる特性値の変動が比較的小さければ、閾値を変更することにより、エラーが解消して正しいデータが読み出される。しかしながら、ランダムテレグラフノイズにより特性値が大きく変動した場合には、閾値を変えてもエラーが解消しないおそれがある。この結果、誤り訂正の失敗と再度のデータの読出しとが繰り返されて、その読出しの繰り返しによりメモリセルの劣化が進行してしまうという問題がある。【０００６】
本技術はこのような状況に鑑みて生み出されたものであり、不揮発性メモリにおいてメモリセルの劣化を抑制することを目的とする。
【課題を解決するための手段】
【０００７】
本技術は、上述の問題点を解消するためになされたものであり、その第１の側面は、データが書き込まれたアドレスについて所定のタイミングから経過した経過時間を計時する計時部と、上記アドレスからの上記データの読出しが指示されると上記経過時間が一定時間を超えているか否かを判定する経過時間判定部と、上記経過時間が上記一定時間を超えていないと判定された場合には上記アドレスからの上記データの読出しを休止するリード制御部とを具備するメモリコントローラ、および、その制御方法である。これにより、経過時間が一定時間を超えていないと判定された場合にアドレスからのデータの読出しが休止されるという作用をもたらす。【０００８】
また、この第１の側面において、上記アドレスおよび上記経過時間を保持する保持部をさらに具備し、上記計時部は、上記経過時間を計時するとともに上記アドレスおよび上記経過時間を上記保持部に保持させ、上記経過時間判定部は、上記保持部から上記アドレスおよび上記経過時間を読み出してもよい。これにより、アドレスおよび経過時間が保持部に保持されて読み出されるという作用をもたらす。【０００９】
また、この第１の側面において、上記計時部は、上記アドレスに上記データが書き込まれたタイミングを上記所定のタイミングとして上記経過時間を計時してもよい。これにより、アドレスにデータが書き込まれたタイミングからの経過時間が計時されるという作用をもたらす。【００１０】
また、この第１の側面において、上記アドレスから読み出された上記データの誤りを検出して訂正する誤り検出訂正部をさらに具備し、上記計時部は、上記経過時間が上記一定時間を超えると上記アドレスからの上記データの読出しを指示し、上記リード制御部は、上記経過時間が上記一定時間を超えていると判定された場合または上記計時部により上記データの読出しが指示された場合には上記アドレスから上記データを読み出し、上記計時部は、上記アドレスに上記データが書き込まれたタイミングまたは上記誤りの訂正に失敗したタイミングを上記所定のタイミングとして上記経過時間を計時してもよい。これにより、経過時間が一定時間を超えるとアドレスからのデータの読出しが指示されるという作用をもたらす。【００１１】
また、この第１の側面において、上記アドレスから読み出された上記データの誤りを検出して訂正する誤り検出訂正部をさらに具備し、上記計時部は、上記誤りの訂正に失敗した上記タイミングを上記所定のタイミングとして上記経過時間を計時してもよい。これにより、誤りの訂正に失敗したタイミングからの経過時間が計時されるという作用をもたらす。【００１２】
また、この第１の側面において、上記計時部は、上記経過時間が上記一定時間を超えると上記アドレスからの上記データの読出しを指示し、上記リード制御部は、上記経過時間が上記一定時間を超えていると判定された場合または上記計時部により上記データの読出しが指示された場合には上記アドレスから上記データを読み出してもよい。これにより、経過時間が一定時間を超えるとアドレスからのデータの読出しが指示されるという作用をもたらす。【００１３】
また、この第１の側面において、上記経過時間が上記一定時間を超えていないと判定された場合にはリードエラーを出力するリードエラー出力部をさらに具備してもよい。これにより、上記経過時間が一定時間を超えていないと判定された場合にリードエラーが出力されるという作用をもたらす。【００１４】
また、本技術の第２の側面は、アドレスが割り当てられたメモリセルと、データが書き込まれた上記アドレスについて所定のタイミングから経過した経過時間を計時する計時部と、上記アドレスからの上記データの読出しが指示されると上記経過時間が一定時間を超えているか否かを判定する経過時間判定部と、上記経過時間が上記一定時間を超えていないと判定された場合には上記アドレスからの上記データの読出しを休止するリード制御部とを具備するメモリシステムである。これにより、経過時間が一定時間を超えていないと判定された場合にアドレスからのデータの読出しが休止されるという作用をもたらす。
【発明の効果】
【００１５】
本技術によれば、不揮発性メモリにおいてメモリセルの劣化を抑制することができるという優れた効果を奏し得る。なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載されたいずれかの効果であってもよい。
【図面の簡単な説明】
【００１６】
【図１】第１の実施の形態におけるメモリシステムの一構成例を示す全体図である。
【図２】第１の実施の形態におけるメモリコントローラの一構成例を示すブロック図である。
【図３】第１の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。
【図４】第１の実施の形態におけるリード制御部の一構成例を示すブロック図である。
【図５】第１の実施の形態における読出し休止リストの一例を示す図である。
【図６】第１の実施の形態における不揮発性メモリの一構成例を示すブロック図である。
【図７】第１の実施の形態における可変抵抗素子の抵抗分布の一例を示す図である。
【図８】第１の実施の形態における時間の経過に伴うメモリセルの抵抗値および劣化の度合いの変化の一例を示すグラフである。
【図９】第１の実施の形態におけるメモリコントローラの動作の一例を示すフローチャートである。
【図１０】第１の実施の形態におけるライト処理の一例を示すフローチャートである。
【図１１】第１の実施の形態におけるリード処理の一例を示すフローチャートである。
【図１２】第１の実施の形態における計時処理の一例を示すフローチャートである。
【図１３】第１の実施の形態におけるメモリシステムの動作の一例を示すシーケンス図である。
【図１４】第２の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。
【図１５】第２の実施の形態における計時処理の一例を示すフローチャートである。
【図１６】第２の実施の形態におけるメモリコントローラの動作の一例を示すフローチャートである。
【図１７】第２の実施の形態におけるリード処理の一例を示すフローチャートである。
【図１８】第２の実施の形態におけるメモリシステムの動作の一例を示すシーケンス図である。
【図１９】第３の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。
【図２０】第３の実施の形態におけるライト処理の一例を示すフローチャートである。
【図２１】第３の実施の形態におけるリード処理の一例を示すフローチャートである。
【図２２】第３の実施の形態における時間の経過に伴うメモリセルの抵抗値および劣化の度合いの変化の一例を示すグラフである。
【図２３】第３の実施の形態におけるメモリシステムの動作の一例を示すシーケンス図である。
【図２４】第４の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。
【図２５】第４の実施の形態におけるリード処理の一例を示すフローチャートである。
【図２６】第４の実施の形態におけるメモリシステムの動作の一例を示すシーケンス図である。
【発明を実施するための形態】
【００１７】
以下、本技術を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（書込みから一定時間経過後にデータを読み出す例）
２．第２の実施の形態（書込みから一定時間経過後にコマンドを発行してデータを読み出す例）
３．第３の実施の形態（リードエラー発生から一定時間経過後にデータを読み出す例）
４．第４の実施の形態（リードエラー発生から一定時間経過後にコマンドを発行してデータを読み出す例）
【００１８】
＜１．第１の実施の形態＞
［メモリシステムの構成例］
図１は、本技術の実施の形態におけるメモリシステムの一構成例を示す全体図である。このメモリシステムは、ホストコンピュータ１００およびストレージ２００を備える。
【００１９】
ホストコンピュータ１００は、情報処理システム全体を制御するものである。このホストコンピュータ１００は、コマンドおよびデータを生成してストレージ２００に信号線１０９を介して供給する。また、ホストコンピュータ１００は、ストレージ２００から、読み出されたデータを受け取る。ここで、コマンドは、ストレージ２００を制御するためのものであり、例えば、データの書込みを指示するライトコマンドや、データの読出しを指示するリードコマンドを含む。
【００２０】
ストレージ２００は、メモリコントローラ３００および不揮発性メモリ４００を備える。このメモリコントローラ３００は、不揮発性メモリ４００を制御するものである。メモリコントローラ３００は、ホストコンピュータ１００からライトコマンドおよびデータを受け取った場合には、そのデータからＥＣＣを生成する。具体的には、メモリコントローラ３００は、符号化対象のデータを、そのデータとパリティとを含む符号語に変換（すなわち、符号化）する。メモリコントローラ３００は、不揮発性メモリ４００に信号線３０９を介してアクセスして符号化したデータをライトデータとして書き込む。
【００２１】
また、ホストコンピュータ１００からリードコマンドを受け取った場合、メモリコントローラ３００は、不揮発性メモリ４００に信号線３０９を介してアクセスして符号化されたリードデータを読み出す。そして、メモリコントローラ３００は、そのリードデータを、符号化前の元のデータに変換（すなわち、復号）する。また、復号の際にメモリコントローラ３００は、ＥＣＣに基づいてリードデータにおける誤りの検出および訂正を行う。メモリコントローラ３００は、訂正した元のデータをホストコンピュータ１００に供給する。
【００２２】
不揮発性メモリ４００は、メモリコントローラ３００の制御に従って、データを記憶するものである。例えば、ＲｅＲＡＭが不揮発性メモリ４００として用いられる。この不揮発性メモリ４００は、複数のメモリセルを備え、これらのメモリセルは、複数のブロックに分けられている。ここで、ブロックは、不揮発性メモリ４００のアクセス単位であり、セクタとも呼ばれる。ブロックのそれぞれには物理アドレスが割り当てられている。なお、ＲｅＲＡＭの代わりに、フラッシュメモリ、ＰＣＲＡＭ、および、ＭＲＡＭなどを不揮発性メモリ４００として用いてもよい。
【００２３】
［メモリコントローラの構成例］
図２は、第１の実施の形態におけるメモリコントローラ３００の一構成例を示すブロック図である。このメモリコントローラ３００は、ホストインターフェース３０１、ＲＡＭ（Random Access Memory）３０２、ＣＰＵ（Central Processing Unit）３０３およびＥＣＣ処理部３０４を備える。また、メモリコントローラ３００は、ＲＯＭ（Read Only Memory）３０５、バス３０６およびメモリインターフェース３０７を備える。
【００２４】
ホストインターフェース３０１は、ホストコンピュータ１００との間でデータやコマンドを相互に交換するものである。ＲＡＭ３０２は、ＣＰＵ３０３が実行する処理において必要となるデータを一時的に保持するものである。ＣＰＵ３０３は、メモリコントローラ３００全体を制御するものである。ＲＯＭ３０５は、ＣＰＵ３０３が実行するプログラム等を記憶するものである。バス３０６は、ＲＡＭ３０２、ＣＰＵ３０３、ＥＣＣ処理部３０４、ＲＯＭ３０５、ホストインターフェース３０１およびメモリインターフェース３０７が相互にデータを交換するための共通の経路である。メモリインターフェース３０７は、不揮発性メモリ４００との間でデータやコマンドを相互に交換するものである。
【００２５】
ＥＣＣ処理部３０４は、データを符号化し、また、リードデータを復号するものである。データの符号化においてＥＣＣ処理部３０４は、符号化対象のデータにパリティを付加することにより所定の単位で符号化する。そして、ＥＣＣ処理部３０４は、符号化したデータをライトデータとして不揮発性メモリ４００にバス３０６を介して供給する。
【００２６】
また、ＥＣＣ処理部３０４は、符号化されたリードデータを元のデータに復号する。この復号において、ＥＣＣ処理部３０４は、パリティを使用してリードデータの誤りの有無を検出して訂正する。ＥＣＣ処理部３０４は、復号した元のデータをホストコンピュータ１００にバス３０６を介して供給する。
【００２７】
図３は、第１の実施の形態におけるメモリコントローラ３００の機能構成例を示すブロック図である。このメモリコントローラ３００は、ライト制御部３１０、リード制御部３２０、ステータス生成部３３０、符号化部３４０、読出し休止リスト保持部３５０、読出し休止リスト管理部３６０および誤り検出訂正部３７０を備える。ライト制御部３１０は、図２におけるホストインターフェース３０１、ＲＡＭ３０２、ＣＰＵ３０３、ＲＯＭ３０５、バス３０６およびメモリインターフェース３０７などにより実現される。リード制御部３２０、ステータス生成部３３０および読出し休止リスト管理部３６０についても同様である。また、符号化部３４０および誤り検出訂正部３７０は、図２におけるＥＣＣ処理部３０４により実現される。また、読出し休止リスト保持部３５０は、図２におけるＲＡＭ３０２などにより実現される。
【００２８】
ライト制御部３１０は、ライトコマンドに従って不揮発性メモリ４００にライトデータを書き込ませるものである。このライト制御部３１０は、まず、ライトコマンドの指定する論理アドレスを物理アドレスに変換する。
【００２９】
ここで、論理アドレスは、ホストコンピュータ１００が定義するアドレス空間において、ホストコンピュータ１００がストレージ２００にアクセスする際のアクセス単位の領域ごとに割り振られたアドレスである。この論理アドレスは、ページアドレスとも呼ばれる。また、物理アドレスは、前述したように不揮発性メモリ４００においてアクセス単位ごとに割り当てられたアドレスである。
【００３０】
また、ライト制御部３１０は、ホストコンピュータ１００と不揮発性メモリ４００とのアクセス単位が異なる場合に、ライトコマンドを分割する。ライト制御部３１０は、アドレスを論物変換し、必要に応じて分割したライトコマンドのそれぞれをライトリクエストとして不揮発性メモリ４００に供給する。
【００３１】
符号化部３４０は、ホストコンピュータ１００からデータを符号化対象データとして受け取ると、その符号化対象データを符号語に符号化するものである。符号化において符号化対象データは、例えば、２元のＢＣＨ符号に符号化される。符号化部３４０は、その符号語をライトデータとして不揮発性メモリ４００に供給する。
【００３２】
なお、符号化部３４０は、符号化対象データを２元のＢＣＨ符号に符号化しているが、誤り訂正能力を持つ符号であれば、ＢＣＨ符号以外の符号に符号化してもよい。符号化部３４０は、例えば、ＲＳ（Reed-Solomon）符号や畳込み符号に符号化してもよい。また、符号化部３４０は、２元より高い次元の符号に符号化してもよい。
【００３３】
読出し休止リスト管理部３６０は、アドレスにデータが書き込まれたタイミングから経過した経過時間を計時するものである。この読出し休止リスト管理部３６０は、ライトコマンドにより指定された論理アドレス（ページアドレス）のそれぞれについて、データが書き込まれたタイミングからの経過時間を計時する。そして、読出し休止リスト管理部３６０は、データが書き込まれたアドレスと、アドレスごとの経過時間とを含むリストを「読出し休止リスト」として、読出し休止リスト保持部３５０に保持させる。また、経過時間が一定時間を超えると、読出し休止リスト管理部３６０は、その経過時間に対応する論理アドレスを読出し休止リストにおいて削除する。ここで、一定時間には、データが書き込まれてから、ＲＴＮエラーが生じなくなると予想される時間Ｔｒ以上の所定の時間Ｔｐが設定される。なお、読出し休止リスト管理部３６０は、特許請求の範囲に記載の計時部の一例である。また、読出し休止リスト保持部３５０は、特許請求の範囲に記載の保持部の一例である。
【００３４】
なお、読出し休止リスト管理部３６０は、論理アドレス（ページアドレス）ごとの経過時間を読出し休止リスト保持部３５０に保持させているが、物理アドレスごとの経過時間を保持させてもよい。また、読出し休止リスト管理部３６０は、アドレスごとに経過時間を保持させているが、複数のアドレスからなるグループごとに経過時間を保持させてもよい。例えば、１つの論理アドレスに複数の物理アドレスが対応する場合には、それらの物理アドレスに同一の計時時間が対応付けて保持される。
【００３５】
リード制御部３２０は、リードコマンドに従って不揮発性メモリ４００にリードデータを読み出させるものである。このリード制御部３２０は、リードコマンドにより指定された論理アドレスが読出し休止リスト保持部３５０に保持されているか否かを判断する。論理アドレスが休止リストに保持されていない（すなわち、経過時間が一定時間Ｔｐを超える）場合には、リード制御部３２０は、リードコマンドからリードリクエストを発行して不揮発性メモリ４００に供給する。一方、経過時間が一定時間Ｔｐ以下である場合には、リード制御部３２０は、そのアドレスからのデータの読出しを休止する。また、リード制御部３２０は、経過時間が一定時間Ｔｐ以下であるか否かを判定した判定結果をステータス生成部３３０に通知する。
【００３６】
誤り検出訂正部３７０は、符号語に対応する受信語をリードデータとして不揮発性メモリ４００から受け取り、そのリードデータを復号するものである。この誤り検出訂正部３７０は、復号においてリードデータの誤り検出および誤り訂正を行い、誤り訂正に成功したか否かを示す復号成否通知をステータス生成部３３０に供給する。また、誤り検出訂正部３７０は、復号した元のデータをホストコンピュータ１００に供給する。
【００３７】
ステータス生成部３３０は、ストレージ２００の状態を通知するステータス情報を生成するものである。このステータス生成部３３０は、不揮発性メモリ４００からライトエラーを受け取ると、ライトエラーを記載したステータス情報を生成する。また、ステータス生成部３３０は、誤り検出訂正部３７０から誤り訂正の失敗を示す復号成否通知を受け取ると、リードエラーを記載したステータス情報を生成する。さらに、ステータス生成部３３０は、経過時間が一定時間Ｔｐ以下である旨の判定結果をリード制御部３２０から受け取った場合にもリードエラーを記載したステータス情報を生成する。ステータス生成部３３０は、生成したステータス情報をホストコンピュータ１００に供給する。なお、ステータス生成部３３０は、特許請求の範囲に記載のリードエラー出力部の一例である。
【００３８】
なお、ステータス生成部３３０は、経過時間が一定時間Ｔｐ以下である場合にリードエラーを記載したステータス情報を生成しているが、この構成に限定されない。例えば、ステータス生成部３３０は、経過時間が一定時間Ｔｐ以下である場合にビジーを記載したステータス情報を生成してもよい。
【００３９】
また、ステータス生成部３３０は、誤り訂正の失敗に応じて生成したリードエラーと、誤り訂正を行わずに生成したリードエラーとを区別せずに出力しているが、これらのリードエラーの種別をステータスに記載して出力してもよい。この場合、例えば、前者のリードエラーはＥＣＣエラーとして、後者のリードエラーは非ＥＣＣエラーとして出力される。また、ホストコンピュータ１００は、非ＥＣＣエラーの場合に、リードコマンドの再発行までの時間をＥＣＣエラーの場合よりも長くする。
【００４０】
図４は、第１の実施の形態におけるリード制御部３２０の一構成例を示すブロック図である。このリード制御部３２０は、経過時間判定部３２１およびリードリクエスト発行部３２２を備える。
【００４１】
経過時間判定部３２１は、データの読出しが指定されたアドレスに対応する経過時間が一定時間Ｔｐを超えているか否かを判定するものである。この経過時間判定部３２１は、リードコマンドにより指定された論理アドレスが休止リスト保持部３５０に保持されている（すなわち、経過時間が一定時間Ｔｐを超えている）か否かを判定する。経過時間判定部３２１は、判定結果をリードリクエスト発行部３２２およびステータス生成部３３０に供給する。
【００４２】
リードリクエスト発行部３２２は、経過時間が一定時間Ｔｐを超えている場合に、リードコマンドの指定する論理アドレスを物理アドレスに変換し、必要に応じて分割してライトリクエストを発行する。一方、経過時間が一定時間Ｔｐ以下であれば、リードリクエスト発行部３２２は、リードリクエストを発行しない。すなわち、リードリクエストの発行が休止される。一定時間Ｔｐを経過していない場合は、ＲＴＮエラーが生じるおそれがあり、無駄なリードアクセスによりメモリセルの劣化が進行するおそれがあるためである。なお、リードリクエスト発行部３２２は、特許請求の範囲に記載のリード部の一例である。
【００４３】
［読出し休止リストの例］
図５は、第１の実施の形態における読出し休止リストの一例を示す図である。この読出し休止リストには、有効フラグ、ページアドレスおよび経過時間を各々が含む所定数のエントリが設けられる。有効フラグは、対応するページアドレスが有効であるか否かを示すフラグである。例えば、ページアドレスが有効な場合には有効フラグに「１」が設定され、無効な場合には有効フラグに「０」が設定される。
【００４４】
また、経過時間は、対応するページアドレスにデータが書き込まれたタイミングから経過した時間である。経過時間の単位は、例えば、一定周波数のクロック信号のサイクル数である。読出し休止リスト管理部３６０は、ライトコマンドが発行されると、読出し休止リストにおいて、有効フラグが「０」の空いているエントリに、ライトコマンドにより指定されたページアドレスを登録する。この登録されたページアドレスの有効フラグは、「１」に更新される。また、読出し休止リスト管理部３６０は、登録したページアドレスの経過時間を初期値にリセットし、所定のクロック信号に同期して、その値をインクリメントする。そして、読出し休止リスト管理部３６０は、経過時間が一定時間Ｔｐを超えると、その経過時間に対応するページアドレスの有効フラグを「０」に更新して、そのアドレスを無効にする。
【００４５】
なお、読出し休止リスト管理部３６０は、データが書き込まれたタイミングからの経過時間を計時する構成としているが、そのタイミングから一定時間Ｔｐが経過するまでの残り時間を計時してもよい。この場合には、一定時間Ｔｐに対応するサイクル数が残り時間の初期値として設定され、クロック信号に同期して、そのサイクル数がデクリメントされる。
【００４６】
［不揮発性メモリの構成例］
図６は、第１の実施の形態における不揮発性メモリ４００の一構成例を示すブロック図である。この不揮発性メモリ４００は、データバッファ４１０、メモリセルアレイ４２０、ドライバ４３０、アドレスデコーダ４４０、バス４５０、制御インターフェース４６０、および、メモリ制御部４７０を備える。
【００４７】
データバッファ４１０は、メモリ制御部４７０の制御に従って、ライトデータやリードデータをアクセス単位で保持するものである。メモリセルアレイ４２０は、マトリックス状に配列された複数のメモリセルを備える。各々のメモリセルとして、不揮発性の記憶素子が用いられる。具体的には、ＮＡＮＤ型やＮＯＲ型のフラッシュメモリ、ＲｅＲＡＭ、ＰＣＲＡＭ、または、ＭＲＡＭなどが記憶素子として用いられる。
【００４８】
ドライバ４３０は、アドレスデコーダ４４０により選択されたメモリセルに対してデータの書込み、または、データの読出しを行うものである。アドレスデコーダ４４０は、コマンドにより指定されたアドレスを解析して、そのアドレスに対応するメモリセルを選択するものである。バス４５０は、データバッファ４１０、メモリセルアレイ４２０、アドレスデコーダ４４０、メモリ制御部４７０および制御インターフェース４６０が相互にデータを交換するための共通の経路である。制御インターフェース４６０は、メモリコントローラ３００と不揮発性メモリ４００とがデータやコマンドを相互に交換するためのインターフェースである。
【００４９】
メモリ制御部４７０は、ドライバ４３０およびアドレスデコーダ４４０を制御して、データの書込み、または、読出しを行わせるものである。メモリ制御部４７０は、ライトコマンドおよびライトデータを受け取った場合には、そのコマンドの指定するライトアドレスにライトデータを書き込む。書込みの後、メモリ制御部４７０は、ライトアドレスからデータをベリファイリードデータとして読み出し、そのベリファイリードデータとライトデータとをビット単位で比較するベリファイ処理を行う。ベリファイリードデータおよびライトデータのいずれかのビットが一致しなかった場合にメモリ制御部４７０は、ベリファイエラーを検出してライトデータの書込みを再度行い、再度のベリファイ処理を行う。そして、一定回数のベリファイ処理によってもベリファイエラーが解消しなかった場合にメモリ制御部４７０は、ライトエラーをメモリコントローラ３００に出力する。
【００５０】
また、メモリ制御部４７０は、リードコマンドを受け取ると、アドレスデコーダ４４０およびドライバ４３０を制御して、指定された物理アドレスのデータをメモリコントローラ３００へリードデータとして出力させる。
【００５１】
図７は、第１の実施の形態における可変抵抗素子の抵抗分布の一例を示す図である。同図における横軸は、抵抗値Ｒを示しており、縦軸は、セルの数の相対的な分布を相対値により示している。可変抵抗素子の抵抗状態は、所定の閾値を境に、大きく２つの分布に分かれている。閾値と比較して抵抗値が低い状態は、低抵抗状態（ＬＲＳ：Low-Resistance State）と呼ばれ、閾値と比較して抵抗値が高い状態は、高抵抗状態（ＨＲＳ：High-Resistance State）と呼ばれる。
【００５２】
可変抵抗素子の高抵抗状態および低抵抗状態をそれぞれ論理０値または論理１値の何れかに対応付けることにより、可変抵抗素子はメモリセルとして機能する。論理０値または論理１値の何れに対応付けるかは任意である。例えば、高抵抗状態が論理０値に対応付けられ、低抵抗状態が論理１値に対応付けられる。また、リードアクセスのたびにメモリセルの劣化が進行し、その抵抗値が若干変化する。例えば、劣化が進行するほど、抵抗値が高くなる。このようにアクセスの繰り返しにより、メモリセルが劣化する現象はリードディスターブと呼ばれる。
【００５３】
図８は、第１の実施の形態における時間の経過に伴うメモリセルの抵抗値および劣化の度合いの変化の一例を示すグラフである。同図におけるａは、時間の経過に伴うメモリセルの抵抗値の変化の一例を示すグラフである。同図のａにおける縦軸はメモリセルの抵抗値を示し、横軸は時間を示す。
【００５４】
例えば、タイミングＴ１において、「１」の値がメモリセルに書き込まれた場合を考える。ＬＲＳに「１」を割り当てる構成では、書込みにより、メモリセルの抵抗値は、閾値より低い値になる。しかし、書込みから、一定時間が経過するまでの間においては、メモリセル内の電流の揺らぎによって、その抵抗値が不規則に変動する。この現象は、ランダムテレグラフノイズと呼ばれる。このランダムテレグラフノイズが生じている期間においては、抵抗値が不連続に変化するため、リードデータの値を正常に読み出すことができないおそれがある。
【００５５】
ここで、ランダムテレグラフノイズは、一般に所定時間Ｔｒが経過すると解消し、メモリセルの抵抗値は、一定の期待値となる。その時間Ｔｒ以上の時間がＴｐに設定される。タイミングＴ１からの経過時間がＴｐを超える前にリードコマンドを受け取ると、メモリコントローラ３００は、メモリセルへのリードアクセスを行わずにリードエラーのステータスをホストコンピュータ１００に返す。
【００５６】
一方、経過時間がＴｐを超えたタイミングＴ５においてリードコマンドを受け取ると、メモリコントローラ３００は、メモリセルからリードデータを読み出して復号を行う。タイミングＴ５では、ランダムテレグラフノイズが消失しているため、エラーが検出されない。
【００５７】
図８におけるｂは、第１の実施の形態における時間の経過に伴うメモリセルの劣化の度合いの変化の一例を示すグラフである。同図のｂにおける縦軸はメモリセルの劣化の度合いを示し、横軸は時間を示す。Ｔｐを経過したタイミングＴ５においてリードデータが読み出されると、劣化が進行して、劣化の度合いが高くなる。タイミングＴ１からＴ５までの間は、リードアクセスが行われていないため、劣化は進行していない。
【００５８】
図８におけるｃは、比較例における時間の経過に伴うメモリセルの劣化の度合いの変化の一例を示すグラフである。同図のｃにおける縦軸はメモリセルの劣化の度合いを示し、横軸は時間を示す。この比較例では、データが書き込まれたタイミングＴ１からの経過時間がＴｐを超える前であっても、メモリコントローラ３００がリードデータを読み出す構成であるものとする。この比較例では、タイミングＴ１からＴｐが経過するまでの間のタイミングＴ２、Ｔ３およびＴ４においてリードデータが再度読み出される。
【００５９】
これらのタイミングＴ２、Ｔ３およびＴ４では、ランダムテレグラフノイズが解消していないため、メモリセルの抵抗値は期待値とならず、閾値を超えてエラーが検出されることが多い。このエラーにより、誤り訂正に失敗するおそれがある。最終的には、メモリコントローラ３００は、タイミングＴ５においてデータを正常に読み出すことができるが、それまでにエラーの解消しない不要なリードアクセスが繰り返されるおそれがある。これらの不要なリードアクセスにより、メモリセルの劣化の度合いは、同図のｂと比較して高くなってしまう。
【００６０】
図８におけるｃに例示したように、ランダムテレグラフノイズが生じている期間内であってもリードアクセスを行う構成では、正常なデータを最終的に読み出すまでに必要以上にリードアクセスが繰り返されてしまう。この結果、リードディスターブによりメモリセルの寿命が短くなってしまう。これに対して、同図におけるｂに例示したように、ランダムテレグラフノイズが生じている期間内はリードアクセスを休止するメモリコントローラ３００では、リードディスターブによるメモリセルの劣化の進行を抑制することができる。これにより、メモリセルの寿命を長くすることができる。
【００６１】
［メモリコントローラの動作例］
図９は、第１の実施の形態におけるメモリコントローラ３００の動作の一例を示すフローチャートである。この動作は、例えば、メモリコントローラ３００に電源が投入されたときや、不揮発性メモリ４００の初期化が指示されたときなどに開始する。
【００６２】
メモリコントローラ３００は、不揮発性メモリ４００を初期化し（ステップＳ９０１）、ホストコンピュータ１００からのコマンドをデコードする（ステップＳ９０２）。メモリコントローラ３００は、コマンドがライトコマンドであるか否かを判断する（ステップＳ９０３）。コマンドがライトコマンドである場合（ステップＳ９０３：Ｙｅｓ）、メモリコントローラ３００は、データを書き込むライト処理を行う（ステップＳ９１０）。一方、コマンドがリードコマンドである場合（ステップＳ９０３：Ｎｏ）、メモリコントローラ３００は、データを読み出すリード処理を行う（ステップＳ９２０）。ステップＳ９１０またはＳ９２０の後、メモリコントローラ３００は、アドレス毎の経過時間を計時する計時処理を行い（ステップＳ９４０）、ステップＳ９０２に戻る。
【００６３】
図１０は、第１の実施の形態におけるライト処理の一例を示すフローチャートである。メモリコントローラ３００は、データを符号化してライトデータを生成し（ステップＳ９１１）、そのライトデータを不揮発性メモリ４００に書き込ませる（ステップＳ９１２）。メモリコントローラ３００は、不揮発性メモリ４００が書込み（すなわち、ベリファイ）に成功したか否かを判断する（ステップＳ９１３）。書込みに成功した場合に（ステップＳ９１３：Ｙｅｓ）、メモリコントローラ３００は、ライトアドレスを読出し休止リストに登録する（ステップＳ９１４）。また、メモリコントローラ３００は、書込み成功のステータスをホストコンピュータ１００に出力する（ステップＳ９１５）。
【００６４】
一方、書込みに失敗した場合に（ステップＳ９１３：Ｎｏ）、メモリコントローラ３００は、ライトエラーのステータスをホストコンピュータ１００に出力する（ステップＳ９１６）。ステップＳ９１５またはＳ９１６の後、メモリコントローラ３００は、ライト処理を終了する。
【００６５】
図１１は、第１の実施の形態におけるリード処理の一例を示すフローチャートである。メモリコントローラ３００は、リードアドレスが読出し休止リストにあるか否かを判断する（ステップＳ９２１）。リードアドレスが読出し休止リストにない場合に（ステップＳ９２１：Ｎｏ）、メモリコントローラ３００は、リードリクエストを発行して不揮発性メモリ４００に供給する（ステップＳ９２２）。そして、メモリコントローラ３００は、リードデータを不揮発性メモリ４００から読み出して復号し（ステップＳ９２３）、復号に成功したか否かを判断する（ステップＳ９２４）。復号に成功した場合に（ステップＳ９２４：Ｙｅｓ）、メモリコントローラ３００は、復号した元のデータをホストコンピュータ１００に出力する（ステップＳ９２５）。
【００６６】
リードアドレスが読出し休止リストにある場合（ステップＳ９２１：Ｙｅｓ）、または、復号に失敗した場合に（ステップＳ９２４：Ｎｏ）、メモリコントローラ３００は、リードエラーのステータスをホストコンピュータ１００に出力する（ステップＳ９２７）。ステップＳ９２５またはＳ９２７の後、メモリコントローラ３００は、リード処理を終了する。
【００６７】
図１２は、第１の実施の形態における計時処理の一例を示すフローチャートである。メモリコントローラ３００は、読出し休止リスト内の各アドレスの経過時間をインクリメントする（ステップＳ９４１）。そして、メモリコントローラ３００は、経過時間がＴｐを超えたアドレスが読出し休止リスト内にあるか否かを判断する（ステップＳ９４２）。経過時間がＴｐを超えるアドレスがあれば（ステップＳ９４２：Ｙｅｓ）、メモリコントローラ３００は、そのアドレスの有効フラグを無効にして読出し休止リストから削除する（ステップＳ９４３）。経過時間がＴｐを超えるアドレスがない場合（ステップＳ９４２：Ｎｏ）、または、ステップＳ９４３の後、メモリコントローラ３００は、計時処理を終了する。
【００６８】
図１３は、第１の実施の形態におけるメモリシステムの動作の一例を示すシーケンス図である。アドレスＡを指定したライトコマンドおよびデータがホストコンピュータ１００からメモリコントローラ３００に供給されると、メモリコントローラ３００は、そのデータを符号化する（ステップＳ９１１）。そして、メモリコントローラ３００は、ライトリクエストを発行してライトデータとともに不揮発性メモリ４００に供給する。また、メモリコントローラ３００は、そのアドレスＡを読出し休止リストに登録する（ステップＳ９１４）。
【００６９】
データを書き込んでから一定期間内に、アドレスＡを指定したリードコマンドがホストコンピュータ１００からメモリコントローラ３００に供給されると、メモリコントローラ３００は、リードアクセスを行わずにリードエラーを返す。
【００７０】
そして、一定期間が経過すると、メモリコントローラ３００は、アドレスＡを読出し休止リストから削除する（ステップＳ９４３）。その後にアドレスＡを指定したリードコマンドがホストコンピュータ１００からメモリコントローラ３００に供給されると、メモリコントローラ３００は、リードリクエストを発行してリードデータを不揮発性メモリ４００から読み出す。メモリコントローラ３００は、そのリードデータを復号し（ステップＳ９２３）、復号に成功すると復号したデータをホストコンピュータ１００に出力する。
【００７１】
このように、本技術の第１の実施の形態によれば、メモリコントローラ３００は、データの読出しが指示された際に、書込みから一定時間以内であれば、リードアクセスを休止するため、エラーが生じうる不要なリードアクセスを抑制することができる。これにより、不要なリードアクセスによってメモリセルの劣化が進行することを抑制することができる。
【００７２】
＜２．第２の実施の形態＞
上述の第１の実施の形態では、メモリコントローラ３００は、データの読出しが指示された際に、ランダムテレグラフノイズが生じると予想される一定時間が経過している場合に限り、リードアクセスを行っていた。しかし、ランダムテレグラフノイズが生じる時間は一定であるとは限らず、一定時間を経過してもエラーが解消しないこともありうる。このため、メモリコントローラ３００は、経過時間が一定時間を超えると、リードコマンドが発行されていなくともリードアクセスを行って誤り訂正を行ってもよい。この誤り訂正の成否により、メモリコントローラ３００は、一定時間経過時にエラーが解消しているか否かを判断することができる。この第２の実施の形態のメモリコントローラ３００は、経過時間が一定時間を超えると、リードコマンドが発行されていなくともリードアクセスを行う点において第１の実施の形態と異なる。
【００７３】
図１４は、第２の実施の形態におけるメモリコントローラ３００の機能構成例を示すブロック図である。第２の実施の形態のメモリコントローラ３００は、リード制御部３２０の代わりにリード制御部３２５を備える点において第１の実施の形態と異なる。また、第２の実施の形態のメモリコントローラ３００は、読出し休止リスト管理部３６０および誤り検出訂正部３７０の代わりに読出し休止リスト管理部３６１および誤り検出訂正部３７１を備える点において第１の実施の形態と異なる。
【００７４】
読出し休止リスト管理部３６１は、対応する経過時間がＴｐを超えるアドレスがあった場合に、そのアドレスを読出し休止リストから削除し、そのアドレスを指定したリードコマンドを発行してリード制御部３２５に供給する。また、読出し休止リスト管理部３６１は、アドレスを削除した際に、復号したデータをホストコンピュータ１００に出力しないことを誤り検出訂正部３７１に指示する。
【００７５】
リード制御部３２５は、読出し休止リスト管理部３６１からリードコマンドを受け取ると、リードリクエストを発行して不揮発性メモリ４００に供給する。
【００７６】
誤り検出訂正部３７１は、読出し休止リスト管理部３６１から指示された場合には、復号したデータをホストコンピュータ１００には出力せずに、復号成否の通知のみを行う。
【００７７】
図１５は、第２の実施の形態における計時処理の一例を示すフローチャートである。第２の実施の形態の計時処理は、ステップＳ９４４をさらに実行する点において第１の実施の形態と異なる。
【００７８】
メモリコントローラ３００は、読出し休止リストからアドレスを削除した後（ステップＳ９４３）、そのアドレスを指定したリードコマンドを発行する（ステップＳ９４４）。経過時間がＴｐを超えるアドレスがない場合（ステップＳ９４２：Ｎｏ）、または、ステップＳ９４４の後、メモリコントローラ３００は、計時処理を終了する。
【００７９】
図１６は、第２の実施の形態におけるメモリコントローラ３００の動作の一例を示すフローチャートである。第２の実施の形態のメモリコントローラ３００の動作は、ステップＳ９０４をさらに実行する点において第１の実施の形態と異なる。
【００８０】
メモリコントローラ３００は、計時処理の後（ステップＳ９４０）、計時処理でリードコマンドを発行したか否かを判断する（ステップＳ９０４）。リードコマンドを発行した場合に（ステップＳ９０４：Ｙｅｓ）、メモリコントローラ３００は、リード処理を実行する（ステップＳ９２０）。一方、リードコマンドを発行していない場合に（ステップＳ９０４：Ｎｏ）、メモリコントローラ３００は、ステップＳ９０２に戻る。
【００８１】
図１７は、第２の実施の形態におけるリード処理の一例を示すフローチャートである。第２の実施の形態のリード処理は、ステップＳ９３１乃至Ｓ９３５をさらに実行する点において第１の実施の形態と異なる。
【００８２】
メモリコントローラ３００は、リードコマンドがメモリコントローラ３００自身が発行したコマンドであるか否かを判断する（ステップＳ９３１）。自身で発行したコマンドでない場合に（ステップＳ９３１：Ｎｏ）、メモリコントローラ３００は、ステップＳ９２１乃至Ｓ９２５およびステップＳ９２７を実行する。
【００８３】
一方、自身で発行したコマンドである場合に（ステップＳ９３１：Ｙｅｓ）、メモリコントローラ３００は、リードリクエストを発行し（ステップＳ９３２）、リードデータを読み出して復号する（ステップＳ９３３）。そして、メモリコントローラ３００は、復号に成功したか否かを判断する（ステップＳ９３４）。復号に失敗した場合に（ステップＳ９３４：Ｎｏ）、メモリコントローラ３００は、リードアドレスを読出し休止リストに登録する（ステップＳ９３５）。復号に成功した場合（ステップＳ９３４：Ｙｅｓ）、または、ステップＳ９３５の後、メモリコントローラ３００は、リード処理を終了する。
【００８４】
図１８は、第２の実施の形態におけるメモリシステムの動作の一例を示すシーケンス図である。メモリコントローラ３００は、一定期間経過後にアドレスＡを読出し休止リストから削除すると（ステップＳ９４３）、自らリードコマンドを発行する（ステップＳ９４４。メモリコントローラ３００は、リードリクエストを発行してリードデータを不揮発性メモリ４００から読み出す。そして、メモリコントローラ３００は、そのリードデータを復号し（ステップＳ９３３）、復号に失敗すると、そのアドレスを読出し休止リストに再度登録する（ステップＳ９３５）。
【００８５】
このように、本技術の第２の実施の形態によれば、メモリコントローラ３００は、書込みからの経過時間が一定時間を超えると、リードデータを読み出して誤り訂正を行うため、一定時間経過後にエラーが解消しているか否かを判断することができる。
【００８６】
＜３．第３の実施の形態＞
上述の第１の実施の形態では、メモリコントローラ３００は、データが書き込まれたタイミングで計時を開始していた。しかし、符号語においてランダムテレグラフノイズにより生じるエラーの個数は一定ではなく、誤り訂正に失敗しない程度の数のエラーしか生じない場合もある。この場合には、リードアクセスを休止する必要性に乏しい。このため、メモリコントローラ３００は、誤り訂正に成功した時点では計時を開始せず、誤り訂正に失敗してリードエラーが生じたタイミングで計時を開始してもよい。これにより、誤り訂正に失敗しない程度の数のエラーしか生じない場合には、リードアクセスが休止されないため、アクセス効率を向上させることができる。この第３の実施の形態のメモリコントローラ３００は、リードエラーが生じたタイミングで計時を開始する点において第１の実施の形態と異なる。
【００８７】
図１９は、第３の実施の形態におけるメモリコントローラ３００の機能構成例を示すブロック図である。第３の実施の形態のメモリコントローラ３００は、読出し休止リスト管理部３６０の代わりに読出し休止リスト管理部３６２を備える点において第１の実施の形態と異なる。
【００８８】
読出し休止リスト管理部３６２は、リードデータの誤り訂正に失敗した場合に、リードコマンドにより指定されたアドレスを読出し休止リストに登録する点において第１の実施の形態と異なる。これにより、リードエラーが生じたタイミングで計時が開始される。
【００８９】
なお、読出し休止リスト管理部３６２は、誤り訂正に失敗したタイミングで計時を開始しているが、誤り訂正の成否に関わらず、誤りを検出したタイミングで計時を開始してもよい。ただし、誤り訂正に成功しても計時を開始する構成では、リードアクセスを一定時間に亘って休止する制御を行う頻度が高くなり、アクセス効率が低下するおそれがある。このため、メモリコントローラ３００は、誤り訂正に失敗したタイミングで計時を開始するのが望ましい。
【００９０】
図２０は、第３の実施の形態におけるライト処理の一例を示すフローチャートである。第３の実施の形態のライト処理は、ライトアドレスの読出し休止リストへの登録（ステップＳ９１５）を実行しない点において第１の実施の形態と異なる。
【００９１】
図２１は、第３の実施の形態におけるリード処理の一例を示すフローチャートである。第３の実施の形態のリード処理は、ステップＳ９２６をさらに実行する点において第１の実施の形態と異なる。
【００９２】
メモリコントローラ３００は、復号に失敗すると（ステップＳ９２４：Ｎｏ）、リードアドレスを読出し休止リストに登録する（ステップＳ９２６）。また、リードアドレスが読出し休止リストにない場合（ステップＳ９２１：Ｎｏ）、または、ステップＳ９２６の後、メモリコントローラ３００は、リードエラーを出力する（ステップＳ９２７）。
【００９３】
図２２は、第３の実施の形態における時間の経過に伴うメモリセルの抵抗値および劣化の度合いの変化の一例を示すグラフである。同図におけるａは、時間の経過に伴うメモリセルの抵抗値の変化の一例を示すグラフである。同図のａにおける縦軸はメモリセルの抵抗値を示し、横軸は時間を示す。
【００９４】
書込みが行われたタイミングＴ１の後のタイミングＴ２において、ランダムテレグラフノイズによりリードエラーが生じたものとする。この場合、メモリコントローラ３００は、タイミングＴ２からの経過時間を計時する。この経過時間がＴｐを超える前にリードコマンドを受け取ると、メモリコントローラ３００は、メモリセルへのリードアクセスを行わずにリードエラーのステータスをホストコンピュータ１００に返す。
【００９５】
一方、経過時間がＴｐを超えたタイミングＴ５においてリードコマンドを受け取ると、メモリコントローラ３００は、メモリセルからリードデータを読み出して復号を行う。タイミングＴ５では、ランダムテレグラフノイズが消失しているため、エラーが検出されない。
【００９６】
図２２におけるｂは、第１の実施の形態における時間の経過に伴うメモリセルの劣化の度合いの変化の一例を示すグラフである。同図のｂにおける縦軸はメモリセルの劣化の度合いを示し、横軸は時間を示す。タイミングＴ２およびＴ５のそれぞれにおいてリードアクセスが行われたため、メモリセルの劣化の度合いが高くなっている。
【００９７】
図２３は、第３の実施の形態におけるメモリシステムの動作の一例を示すシーケンス図である。
【００９８】
メモリコントローラ３００は、アドレスＡを指定したリードコマンドに応じてリードコマンドを発行し、リードデータを読み出す。そして、メモリコントローラ３００は、そのリードデータを復号し（ステップＳ９２３）、復号に失敗すると、そのリードアドレスを読出し休止リストに登録する（ステップＳ９２６）。また、メモリコントローラ３００は、リードエラーを出力する。
【００９９】
このように、本技術の第３の実施の形態によれば、メモリコントローラ３００は、誤り訂正に失敗したタイミングで計時を開始するため、エラー数が少なければリードアクセスが休止されず、アクセス効率が向上する。
【０１００】
＜４．第４の実施の形態＞
上述の第３の実施の形態では、メモリコントローラ３００は、データの読出しが指示された際に、書込みから一定時間が経過している場合に限り、リードアクセスを行っていた。しかし、第３の実施の形態においても、第２の実施の形態と同様に一定時間経過後にリードコマンドが発行されていなくともリードアクセスを行ってもよい。この第４の実施の形態のメモリコントローラ３００は、経過時間が一定時間を超えると、リードコマンドが発行されていなくともリードアクセスを行う点において第３の実施の形態と異なる。
【０１０１】
図２４は、第４の実施の形態におけるメモリコントローラ３００の機能構成例を示すブロック図である。第４の実施の形態のメモリコントローラ３００は、読出し休止リスト管理部３６０の代わりに読出し休止リスト管理部３６３を備える点において第３の実施の形態と異なる。
【０１０２】
読出し休止リスト管理部３６３は、リードデータの誤り訂正に失敗した場合に、リードコマンドにより指定されたアドレスを読出し休止リストに登録する点において第３の実施の形態の読出し休止リスト管理部３６２と異なる。
【０１０３】
図２５は、第４の実施の形態におけるリード処理の一例を示すフローチャートである。第４の実施の形態のリード処理は、ステップＳ９３１乃至Ｓ９３５をさらに実行する点において第３の実施の形態と異なる。
【０１０４】
図２６は、第４の実施の形態におけるメモリシステムの動作の一例を示すシーケンス図である。メモリコントローラ３００は、一定期間経過後にアドレスＡを読出し休止リストから削除すると（ステップＳ９４３）、自らリードコマンドを発行する（ステップＳ９４４。メモリコントローラ３００は、リードリクエストを発行してリードデータを不揮発性メモリ４００から読み出す。そして、メモリコントローラ３００は、そのリードデータを復号し（ステップＳ９３３）、復号に失敗すると、そのアドレスを読出し休止リストに再度登録する（ステップＳ９３５）。
【０１０５】
このように、本技術の第４の実施の形態によれば、メモリコントローラ３００は、誤り訂正失敗からの経過時間が一定時間を超えると、リードデータを読み出して誤り訂正を行うため、一定時間経過後にエラーが解消しているか否かを判断することができる。
【０１０６】
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０１０７】
また、上述の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disc）、メモリカード、ブルーレイディスク（Blu-ray（登録商標）Disc）等を用いることができる。
【０１０８】
なお、本明細書に記載された効果はあくまで例示であって、限定されるものではなく、また、他の効果があってもよい。
【０１０９】
なお、本技術は以下のような構成もとることができる。
（１）データが書き込まれたアドレスについて所定のタイミングから経過した経過時間を計時する計時部と、
前記アドレスからの前記データの読出しが指示されると前記経過時間が一定時間を超えているか否かを判定する経過時間判定部と、
前記経過時間が前記一定時間を超えていないと判定された場合には前記アドレスからの前記データの読出しを休止するリード制御部と
を具備するメモリコントローラ。
（２）前記アドレスおよび前記経過時間を保持する保持部をさらに具備し、
前記計時部は、前記経過時間を計時するとともに前記アドレスおよび前記経過時間を前記保持部に保持させ、
前記経過時間判定部は、前記保持部から前記アドレスおよび前記経過時間を読み出す
前記（１）記載のメモリコントローラ。
（３）前記計時部は、前記アドレスに前記データが書き込まれたタイミングを前記所定のタイミングとして前記経過時間を計時する
前記（１）または（２）記載のメモリコントローラ。
（４）前記アドレスから読み出された前記データの誤りを検出して訂正する誤り検出訂正部をさらに具備し、
前記計時部は、前記経過時間が前記一定時間を超えると前記アドレスからの前記データの読出しを指示し、
前記リード制御部は、前記経過時間が前記一定時間を超えていると判定された場合または前記計時部により前記データの読出しが指示された場合には前記アドレスから前記データを読み出し、
前記計時部は、前記アドレスに前記データが書き込まれたタイミングまたは前記誤りの訂正に失敗したタイミングを前記所定のタイミングとして前記経過時間を計時する
前記（３）記載のメモリコントローラ。
（５）前記アドレスから読み出された前記データの誤りを検出して訂正する誤り検出訂正部をさらに具備し、
前記計時部は、前記誤りの訂正に失敗したタイミングを前記所定のタイミングとして前記経過時間を計時する
前記（１）記載のメモリコントローラ。
（６）前記計時部は、前記経過時間が前記一定時間を超えると前記アドレスからの前記データの読出しを指示し、
前記リード制御部は、前記経過時間が前記一定時間を超えていると判定された場合または前記計時部により前記データの読出しが指示された場合には前記アドレスから前記データを読み出す
前記（５）記載のメモリコントローラ。
（７）前記経過時間が前記一定時間を超えていないと判定された場合にはリードエラーを出力するリードエラー出力部をさらに具備する
前記（１）から（６）のいずれかに記載のメモリコントローラ。
（８）アドレスが割り当てられたメモリセルと、
データが書き込まれた前記アドレスについて所定のタイミングから経過した経過時間を計時する計時部と、
前記アドレスからの前記データの読出しが指示されると前記経過時間が一定時間を超えているか否かを判定する経過時間判定部と、
前記経過時間が前記一定時間を超えていないと判定された場合には前記アドレスからの前記データの読出しを休止するリード制御部と
を具備するメモリシステム。
（９）計時部が、データが書き込まれたアドレスについて所定のタイミングから経過した経過時間を計時する計時手順と、
経過時間判定部が、前記アドレスからの前記データの読出しが指示されると前記経過時間が一定時間を超えているか否かを判定する経過時間判定手順と、
前記経過時間が前記一定時間を超えていないと判定された場合には前記アドレスからの前記データの読出しを休止するリード制御手順と
を具備するメモリコントローラの制御方法。
【符号の説明】
【０１１０】
１００  ホストコンピュータ
２００  ストレージ
３００  メモリコントローラ
３０１  ホストインターフェース
３０２  ＲＡＭ
３０３  ＣＰＵ
３０４  ＥＣＣ処理部
３０５  ＲＯＭ
３０６、４５０  バス
３０７  メモリインターフェース
３１０  ライト制御部
３２０、３２５  リード制御部
３２１  経過時間判定部
３２２  リードリクエスト発行部
３３０  ステータス生成部
３４０  符号化部
３５０  読出し休止リスト保持部
３６０、３６１、３６２、３６３  読出し休止リスト管理部
３７０、３７１  誤り検出訂正部
４００  不揮発性メモリ
４１０  データバッファ
４２０  メモリセルアレイ
４３０  ドライバ
４４０  アドレスデコーダ
４６０  制御インターフェース
４７０  メモリ制御部
【図１】
0006497395.tif 000002
【図２】
0006497395.tif 000003
【図３】
0006497395.tif 000004
【図４】
0006497395.tif 000005
【図５】
0006497395.tif 000006
【図６】
0006497395.tif 000007
【図７】
0006497395.tif 000008
【図８】
0006497395.tif 000009
【図９】
0006497395.tif 000010
【図１０】
0006497395.tif 000011
【図１１】
0006497395.tif 000012
【図１２】
0006497395.tif 000013
【図１３】
0006497395.tif 000014
【図１４】
0006497395.tif 000015
【図１５】
0006497395.tif 000016
【図１６】
0006497395.tif 000017
【図１７】
0006497395.tif 000018
【図１８】
0006497395.tif 000019
【図１９】
0006497395.tif 000020
【図２０】
0006497395.tif 000021
【図２１】
0006497395.tif 000022
【図２２】
0006497395.tif 000023
【図２３】
0006497395.tif 000024
【図２４】
0006497395.tif 000025
【図２５】
0006497395.tif 000026
【図２６】
0006497395.tif 000027