(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022118299
(43)【公開日】2022-08-15
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G11C 16/08 20060101AFI20220805BHJP
G11C 16/04 20060101ALI20220805BHJP
【FI】
G11C16/08 120
G11C16/04 170
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2021014718
(22)【出願日】2021-02-02
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001092
【氏名又は名称】弁理士法人サクラ国際特許事務所
(72)【発明者】
【氏名】岡本 昂
(72)【発明者】
【氏名】檜田 敏克
【テーマコード(参考)】
5B225
【Fターム(参考)】
5B225BA19
5B225CA21
5B225CA28
5B225DA09
5B225DE08
5B225DE16
5B225EA05
5B225EG16
5B225FA01
(57)【要約】
【課題】リードレイテンシの悪化を低減したメモリシステムの提供。
【解決手段】閾値電圧の経時変化進行に対応した順位と複数の判定電圧の値とを対応付けるシフトテーブルを第2メモリに記憶させ、第1の順位に対応する判定電圧の値をシフトテーブルから取得し、取得した判定電圧の値に基づいて第1メモリに対する第1のリード処理を実行する。第1のメモリから取得したデータにエラー訂正を実行するとともに検出されたエラービットの数を取得する。エラー訂正が成功し、かつエラービットの数が閾値以上であるとき、第2の順位を第2メモリに記憶させる。エラー訂正が成功し、かつエラービットの数が閾値未満であるとき、第1の順位を第3の順位として第2メモリに記憶させる。ホストからリード要求を受信した場合、第3の順位に対応する判定電圧の値をシフトテーブルから取得し、取得した判定電圧の値に基づいて第1メモリに対する第2のリード処理を実行する。
【選択図】
図5
【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
閾値電圧に応じてデータを記憶するメモリセルトランジスタを含む不揮発性の第1メモリと、
前記閾値電圧と判定電圧との比較に基づいて前記第1メモリからデータを取得するリード処理を実行するコントローラと、
第2メモリと、
を備え、
前記コントローラは、
前記閾値電圧の経時変化の進行に対応した順位と複数の前記判定電圧の値とを対応付けるシフトテーブルを前記第2メモリに記憶させ、
第1の順位に対応する前記判定電圧の値を前記シフトテーブルから取得し、前記取得した判定電圧の値に基づいて前記第1メモリに対する第1のリード処理を実行し、
前記第1のリード処理において、
前記第1のメモリから取得したデータについてエラー訂正を実行するとともに該エラー訂正において検出されたエラービットの数を取得し、
前記エラー訂正が成功し、かつ、前記エラービットの数が閾値以上であるとき、第2の順位を前記第2メモリに記憶させ、前記第2の順位は、前記シフトテーブルにおいて前記第1の順位よりも前記閾値電圧の経時変化が進行した順位に対応し、
前記エラー訂正が成功し、かつ、前記エラービットの数が前記閾値未満であるとき、前記第1の順位を第3の順位として前記第2メモリに記憶させ、
前記ホストからリード要求を受信した場合、前記第3の順位に対応する前記判定電圧の値を前記シフトテーブルから取得し、前記取得した判定電圧の値に基づいて前記第1メモリに対する第2のリード処理を実行する
ように構成されているメモリシステム。
【請求項2】
前記コントローラは、
第4の順位を前記第1の順位として用いるまで前記第1のリード処理を複数回実行ようにさらに構成され、前記第4の順位は、前記シフトテーブルにおける前記閾値電圧の経時変化が最も進行した順位である
請求項1記載のメモリシステム。
【請求項3】
前記コントローラは、
前記複数回実行された前記第1のリード処理における前記エラー訂正が全て失敗である場合に、前記第1メモリに対するリフレッシュ処理を行う
ようにさらに構成されている請求項2記載のメモリシステム。
【請求項4】
前記コントローラは、
前記複数回実行された前記第1のリード処理のいずれかにおいて前記エラー訂正に成功した場合に、前記成功したエラー訂正を含む前記第1のリード処理で用いられた前記第1の順位のうち、前記シフトテーブルにおける前記閾値電圧の経時変化が最も進行していない順位を、前記第2の順位として前記第2メモリに記憶させる
ようにさらに構成されている請求項2記載のメモリシステム。
【請求項5】
前記コントローラは、
前記複数回実行された前記第1のリード処理のいずれかにおいて前記エラー訂正に成功した場合に、前記成功したエラー訂正のうち、前記エラービットの数が最も少ない前記エラー訂正を含む前記第1のリード処理で用いられた前記第1の順位を、前記第2の順位として前記第2メモリに記憶させる
ようにさらに構成されている請求項2記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、メモリシステムに関する。
【背景技術】
【0002】
従来、メモリセルトランジスタを有するメモリシステムが広く知られている。そのようなメモリシステムにおけるリード処理においては、メモリセルトランジスタの閾値電圧と判定電圧との比較に基づいて、そのメモリセルトランジスタに保持されるデータが判定される。
【0003】
しかしながら、メモリセルトランジスタの閾値電圧は、種々の要因によって変化する。そこで、メモリシステムでは、判定電圧の値の変更が可能に構成され、リード処理においてデータの誤判定が発生した場合には判定電圧の値を変更してリード処理をリトライすることが行われる。一方、データの誤判定の発生およびリード処理のリトライは、リードレイテンシの悪化の一因となる。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
一つの実施形態は、リードレイテンシの悪化を低減したメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0006】
実施形態のメモリシステムは、ホストに接続可能であって、閾値電圧に応じてデータを記憶するメモリセルトランジスタを含む不揮発性の第1メモリと、閾値電圧と判定電圧との比較に基づいて第1メモリからデータを取得するリード処理を実行するコントローラと、第2メモリとを備える。コントローラは、閾値電圧の経時変化の進行に対応した順位と複数の判定電圧の値とを対応付けるシフトテーブルを第2メモリに記憶させ、第1の順位に対応する判定電圧の値をシフトテーブルから取得し、取得した判定電圧の値に基づいて第1メモリに対する第1のリード処理を実行する。コントローラは、第1のリード処理において、第1のメモリから取得したデータについてエラー訂正を実行するとともに該エラー訂正において検出されたエラービットの数を取得する。コントローラは、エラー訂正が成功し、かつ、エラービットの数が閾値以上であるとき、第2の順位を第2メモリに記憶させる。第2の順位は、シフトテーブルにおいて第1の順位よりも閾値電圧の経時変化が進行した順位に対応する。コントローラは、エラー訂正が成功し、かつ、エラービットの数が閾値未満であるとき、第1の順位を第3の順位として第2メモリに記憶させる。コントローラは、ホストからリード要求を受信した場合、第3の順位に対応する判定電圧の値をシフトテーブルから取得し、取得した判定電圧の値に基づいて第1メモリに対する第2のリード処理を実行する。
【図面の簡単な説明】
【0007】
【
図1】ホスト装置と接続された実施形態に係るメモリシステムの構成を示すブロック図である。
【
図2】実施形態に係るメモリシステムにおけるメモリセルトランジスタの閾値電圧の分布例を示す図である。
【
図3】実施形態に係るメモリシステムにおけるパトロールリード処理の一例を示すフローチャートである。
【
図4】実施形態に係るメモリシステムにおけるシフトテーブルの一例を示す図である。
【
図5】実施形態に係るメモリシステムにおけるパトロールリード処理の別の一例を示すフローチャートである。
【
図6】実施形態に係るメモリシステムにおける成否テーブルの一例を示す図である。
【
図7】実施形態に係るメモリシステムにおける成否テーブルの一例を示す図である。
【発明を実施するための形態】
【0008】
以下に図面を参照して、実施形態に係るメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【0009】
(実施形態の構成)
図1は、実施形態のメモリシステムの構成の一例を示す図である。
図1に示すように、メモリシステム1は、ホスト装置30と接続可能である。ホスト装置30は、例えば、サーバ、パーソナルコンピュータ、またはモバイル型の情報処理装置である。メモリシステム1は、ホスト装置30の外部記憶装置として機能する。ホスト装置30は、メモリシステム1に対して要求を発行することができる。要求は、リード要求およびライト要求を含む。
【0010】
メモリシステム1は、NAND型フラッシュメモリ10と、コントローラ20とを備えている。NAND型フラッシュメモリ10はメモリチップ11を含む。メモリチップ11は、複数のメモリセルトランジスタを備え、データを不揮発に記憶することができる。メモリチップ11は、NANDバス40によってコントローラ20と接続されている。
【0011】
コントローラ20は、ホストインタフェース(HOST I/F)21、RAM(Random Access Memory)22、CPU(Central Processing Unit)23、バッファメモリ(Buffer)24、NANDインタフェース(NAND I/F)25、およびECC回路(ECC)26を備えている。
【0012】
コントローラ20は、NAND型フラッシュメモリ10に対してプログラム処理、リード処理、イレース処理などを行う。コントローラ20は、例えばSoC(System-On-a-Chip)として構成される。コントローラ20は、FPGA(field-programmable gate array)やASIC(application specific integrated circuit)として構成されてもよい。コントローラ20は、複数のチップによって構成されてもよい。コントローラ20の各機能は、ソフトウェア(ファームウェア)を実行するCPU23、専用ハードウェア、またはこれらの組み合わせによって実現され得る。
【0013】
ホストインタフェース21は、例えばSATA(Serial Advanced Technology Attachment)規格、SAS(Serial Attached SCSI)規格、またはPCI(Peripheral Components Interconnect) Express(登録商標)規格に準拠したバスを介してホスト装置30と接続され、コントローラ20とホスト装置30との通信を実現する。
【0014】
NANDインタフェース25は、NANDバス40を介してNAND型フラッシュメモリ10のメモリチップ11と接続され、コントローラ20とメモリチップ11との通信を実現する。
【0015】
CPU23は、コントローラ20の動作を制御する。
【0016】
RAM22は、CPU23に作業領域を提供する。バッファメモリ24は、NAND型フラッシュメモリ10のメモリチップ11に送信されるデータ、およびメモリチップ11から受信したデータを一時的に保持する。RAM22およびバッファメモリ24は、例えばDRAM(Dynamic Random Access Memory)、SRAM(Static Random Access Memory)、またはこれらの組み合わせによって実現され得る。なお、RAM22およびバッファメモリ24を構成するメモリの種類は、これらに限定されない。バッファメモリ24は、コントローラ20の外部に実装されてもよい。
【0017】
ECC回路26は、誤り訂正符号を用いて、NAND型フラッシュメモリ10から読み出したデータに対するエラーの検出および検出されたエラーの訂正を実行する。エラー訂正が失敗した場合、コントローラ20は、メモリセルトランジスタに対する判定電圧を変更してリード処理を再実行(リトライ)する。ここで、エラー訂正が失敗するとは、変化後のデータ(すなわち、NAND型フラッシュメモリ10から読み出したデータ)から変化前のデータ(すなわち、NAND型フラッシュメモリ10へ書き込んだデータ)を復元できないことをいう。具体的には、エラー訂正が失敗するとは、リードデータに含まれるエラービットを訂正できないことをいう。エラー訂正が成功するとは、リードデータに含まれる全てのエラービットが訂正されたことをいう。コントローラ20は、エラー訂正が成功するまで、判定電圧を変化させながらリトライリードを繰り返し実行する。
【0018】
判定電圧の変更は、複数の判定電圧の組み合わせをリストしたシフトテーブルをRAM22に記憶させておき、コントローラ20がそのシフトテーブルを参照することで実現することができる。
【0019】
シフトテーブルに記憶される判定電圧の値は、種々の量で表現することができる。また、判定電圧の値は、種々の表現で指示することができる。例えば、判定電圧の値は、シフト量で表現することができる。シフト量は、判定電圧の種類(VXday_Y)毎に予め設定されている基準値からの差分である。メモリチップ11内の所定の位置に判定電圧の種類毎に基準値が記録されてもよい。そして、コントローラ20は、判定電圧の種類毎に基準値からのシフト量をメモリチップ11に指示する。
【0020】
なお、判定電圧の表現方法および指示の方法は、これに限定されない。例えば、判定電圧の値は差分ではなく電圧値で表現され、判定電圧は、メモリチップ11に対し、差分ではなく電圧値で指示されてもよい。
【0021】
(メモリトランジスタのData Retention)
実施形態のメモリシステムは、リード処理においてメモリセルトランジスタの閾値電圧と判定電圧との比較を行うことによって、そのメモリセルトランジスタに保持されるデータを判定する。しかしながら、メモリセルトランジスタの閾値電圧は、経時変化等種々の要因によって変化する。実施形態のメモリシステムは、判定電圧の値の変更が可能に構成され、リード処理においてエラー訂正に失敗した場合には判定電圧の値を変更してリード処理をリトライする。
【0022】
図2は、実施形態のメモリセルトランジスタの取り得る閾値電圧の一例を示している。
図2の縦軸はメモリセルトランジスタを含むメモリセルの数を示し、横軸は閾値電圧および判定電圧を示している。
図2に示す例では、メモリセルトランジスタは4つの閾値電圧の分布をもち、各メモリセルトランジスタは4値のデータを保持することができる。メモリセルトランジスタにデータが書き込まれた直後の「Day1」における判定電圧として「V
Day1_0」、「V
Day1_1」および「V
Day1_2」が規定されている。
【0023】
しかし、経時変化等によりメモリセルトランジスタの閾値電圧の分布が、例えば電圧の低い方へシフトする。
図2に示す例において、閾値電圧分布は、「Day1」に示す閾値電圧分布から、経時変化等により「Day2」に示すように「Day1」よりも低い電圧域にシフトし、さらには「Day3」に示すようにより低い電圧域にシフトする。仮に判定電圧が「V
Day1_0」、「V
Day1_1」および「V
Day1_2」のままで「Day3」の閾値電圧分布のメモリセルトランジスタについてリード処理を行うと、閾値電圧の分布域と判定電圧とが重なってしまい、閾値電圧を正しく識別することができなくなってしまう。こうした電圧シフトに対応してリード処理を行うには、判定電圧「V
DayX_Y」を変更していく必要がある。
【0024】
そこで、「Day1」の時点における判定電圧「V
Day1_0」「V
Day1_1」「V
Day1_2」の組み合わせを「Index1」として規定しておく。同様に、「Day2」の時点における判定電圧「V
Day2_0」「V
Day2_1」「V
Day2_2」の組み合わせを「Index2」として規定し、「Day3」の時点における判定電圧「V
Day3_0」「V
Day3_1」「V
Day3_2」の組み合わせを「Index3」として規定する。そして、これら「IndexX」をシフトテーブル(Shift Table)に定義しておけば、「IndexX」のXの数字を変更することで判定電圧の組み合わせを一斉に変更することができる。シフトテーブルは、前述の通り、RAM22に記憶される。
図4はシフトテーブルの一例を示す。
【0025】
判定電圧の組み合わせの変更は、ECC回路26がエラー訂正に失敗した場合に行われる。しかし、ホスト装置30からの命令によるリード処理の際にエラー訂正に失敗し、判定電圧の組み合わせの変更が行われると、リードレイテンシ(Read Latency)が悪化する要因となる。そこで、実施形態のメモリシステムでは、バックグラウンドでパトロールリード処理を実行し、判定電圧の組み合わせを最適なものに変更する。パトロールリード処理では、シフトテーブルにおけるIndexの更新が行われる。
【0026】
リード処理を実行する際に参照されるシフトテーブルには、閾値電圧の変化の進行に対応した順番で、対応する判定電圧のシフトパターン(
図4の例ではシフト量)が配列されている。シフト量a~cは、
図2に示す判定電圧V
DayX_Yを相対的に示す値である。各シフトパターンには、配列の順番に対応した値のIndexが付されている。即ち、Indexの値は、閾値電圧の変化の進行に対応した順位を示す。
【0027】
例えば、閾値電圧の変化の進行が第1の度合いと、第1の度合いよりも変化がより進行した第2の度合いとを考える。第1の度合いに対応した第1のシフトパターンには、第2の度合いに対応した第2のシフトパターンよりも小さい順位が設定される。
図4では、例えば第1のシフトパターンに対応するIndexの値には1が設定され、第2のシフトパターンに対応するIndexの値には2が設定される。
【0028】
コントローラ20は、リトライリードを繰り返す際、それぞれのリトライリードで適用されるシフトパターンを、Indexの値の順番で選択する。リード処理において用いられるIndexの値が変更されると、その値が履歴IndexとしてRAM22に記憶される。
【0029】
なお、閾値電圧の変化の進行の傾向は、設計者によって予め推定することができる。つまり、シフトテーブルには、設計者によって予め推定された閾値電圧の変化の進行に対応した順番で、各シフトパターンが配列されている。例えば、閾値電圧の変化の進行は、メモリセルトランジスタから電荷が抜ける現象を考慮して推定することができる。メモリセルトランジスタから電荷が抜ける現象による閾値電圧の変化の進行は、例えば、イレース処理・プログラム処理の実行回数によって異なる。イレース処理・プログラム処理の実行回数に応じて異なるシフトテーブルが設けられてもよい。
【0030】
(パトロールリード処理)
図3を参照して、実施形態のメモリシステムにおけるパトロールリード処理について説明する。コントローラ20は、定期的(例えば3~4日に一回程度)にパトロールリード処理を実行する。コントローラ20によるパトロールリード処理の実行頻度は、NAND型フラッシュメモリ10の容量などを勘案して決定される。
【0031】
コントローラ20は、RAM22からシフトテーブルを読み出し、所定のIndex(履歴Index)に対応するシフト量を取得する(S100)。
図4に示すシフトテーブルの例において、コントローラ20は、例えば初期段階のIndex1に対応するシフト量a~cを読み出す。
【0032】
コントローラ20は、取得したシフト量に基づいてリード処理を実行する(S110)。
【0033】
ECC回路26は、リード処理により取得したデータについてエラー訂正を行う(S120)。エラーがないか、エラー訂正に成功した場合(S120でYes)、コントローラ20は、当該リード処理に用いたIndex(ここでは例えばIndex1)を履歴IndexとしてRAM22に記憶する(S130)。
【0034】
エラー訂正に失敗した場合(S120でNo)、コントローラ20は当該リード処理に用いたIndexとリフレッシュ基準値とを比較する(S140)。リフレッシュ基準値は、当該リード処理を行ったNAND型フラッシュメモリ10の領域に対する再生処理(リフレッシュ)を行うべきか否かを判定する指標である。
図4に示す例では、リフレッシュ基準値は例えばIndex5である。コントローラ20は、シフトテーブルによる判定電圧の変更が所定の基準回数を超える場合等において、当該リード処理領域をリフレッシュして情報を再記憶させる。当該リード処理に用いたIndexがリフレッシュ基準値よりも小さい場合(S140のNo)、コントローラ20は、当該リード処理に用いたIndexの番号を1つ増加させて(S150)、履歴IndexとしてRAM22に記憶させる(S160)。すなわち、
図4に示す例では、次のパトロールリード処理において用いられるIndexをIndex2とする。次回のリード処理ではIndex2に対応するシフト量が用いられる。
【0035】
当該リード処理に用いたIndexがリフレッシュ基準値以上である場合(S140でYes)、コントローラ20は、当該リード処理を行った領域をリフレッシュする(S170)。リフレッシュ処理を実行すると、コントローラ20はIndexを初期値(例えば
図4におけるIndex1)にリセットする(S180)。コントローラ20は、Indexの初期値を履歴IndexとしてRAM22に記憶する(S130)。コントローラ20は、以上説明した処理をすべてのメモリチップ11について行う。
【0036】
図3および4を参照して説明したパトロールリード処理では、リード処理により得たデータのエラー訂正を失敗するごとに履歴Indexが更新され、最適なIndexがあらかじめ設定される。従って、ホスト装置30の要求によるリード処理の際にエラー訂正を失敗する可能性を低くすることができる。すなわち、メモリシステム1のQoS(Quality of Service)を改善することができる。
【0037】
(パトロールリード処理の変形例)
図3に示すパトロールリード処理は、バックグラウンドでパトロールリード処理を実行することで、ホスト装置30からの要求によるリード処理の際のエラー発生やリトライ発生の可能性の低減を可能にする。
【0038】
一方で、シフトテーブルには、一般に、設計者によって予め推定された閾値電圧の変化の進行に対応した順番で各シフトパターンが配列されている。しかしながら、実際のメモリシステムでは、セル特性のばらつき等により、エラー訂正に成功してはいるが、その時に用いられたIndexよりも先のIndex(Index番号が大きいIndex)の方がより適切な判定電圧の組み合わせである場合が生じ得る。この場合、パトロールリード処理を行った時点からの経時変化により、ホスト装置30からの要求によるリード処理の際にエラー訂正に失敗するおそれがある。一方で、シフトテーブル上のIndexの更新を必要以上に早めてしまうと、リフレッシュ処理までの期間を短くしてしまうことにもつながる。パトロールリード処理の頻度を高めてきめ細かいIndex更新を行うことも考えられるが、これはコントローラ20のバックグランド処理を必要以上に増加させることになり、ホスト装置30によるリード処理を阻害してしまうおそれがある。特に、NAND型フラッシュメモリ10の容量が増大するにつれてこのデメリットが顕著となる。
【0039】
図5は、
図3に示すパトロールリード処理の一部を変形した変形例を示している。
図5に示す例では、Indexの早期最適化を図るとともに、リフレッシュ処理が必要以上に行われないようしている。以下、
図5を参照してパトロールリード処理の変形例を詳細に説明する。
【0040】
この変形例では、コントローラ20は、ECC回路26がエラー訂正する際に検出したエラービットの数(Fail Bit Count)を所定の基準値と比較する。すなわち、エラー訂正に成功した場合でも、エラービットの数が所定の基準値を超えた場合はシフトテーブルのIndex更新を行う。これは、シフトテーブルにおけるIndexの早期最適化を促す作用をする。
【0041】
また、この変形例では、コントローラ20は、新たに成否テーブル(Pass/Fail Table)をRAM22に記憶させておく。
図6は、成否テーブルの一例を示している。
図6に示すように、成否テーブルは、シフトテーブルにおけるIndexと、当該Indexにおけるエラー訂正の成否とを対応付けた情報である。コントローラ20は、Indexを参照してシフトテーブルから判定電圧の組み合わせを取得し、その時のリード処理におけるエラー訂正の成否を成否テーブルに記録する。成否テーブルは、リフレッシュ処理の実行を最適化するための情報である。
【0042】
コントローラ20は、RAM22からシフトテーブルを読み出し、所定のIndexに対応するシフト量を取得する(S100)。
図4に示すシフトテーブルの例において、コントローラ20は、例えば初期段階のIndex1に対応するシフト量a~cを読み出す。
【0043】
コントローラ20は、取得したシフト量に基づいてリード処理を実行する(S110)。
【0044】
ECC回路26は、リード処理により取得したデータについてエラー訂正を行う(S122)。ECC回路26は、RAM22に記憶した成否テーブルを更新する。ECC回路26は、このとき、エラー訂正を行ったデータについてエラービットの個数(Fail Bit Count)を併せて取得する。
【0045】
エラー訂正処理の結果、エラーがないか、エラー訂正に成功した場合(S122でYes)、ECC回路26は、取得したエラービットの個数が所定の基準値X以上であるかどうか判定する(S124)。判定の結果、取得したエラービットの個数が所定の基準値X未満である場合(S124でNo)、コントローラ20は、当該リード処理に用いたIndex(ここでは例えばIndex1)を履歴IndexとしてRAM22に記憶する(S130)。
【0046】
エラー訂正に失敗した場合(S122でNo)、または、取得したエラービットの個数が所定の基準値Xに達している場合(S124でYes)、コントローラ20は、当該リード処理に用いたIndexがシフトテーブルにおける最後のIndexであるかどうか判定する(S142)。最後のIndexではない場合(S142でNo)、コントローラ20は、当該リード処理に用いたIndexの番号を1つ増加させて(S150)、履歴IndexとしてRAM22に記憶させる(S160)。すなわち、
図4に示す例では、コントローラ20は、次のパトロールリード処理において用いられるIndexをIndex2とする。エラービットの個数による判定は、エラー訂正が成功した場合でも、シフトテーブルのIndexを更新する作用をする。
【0047】
当該リード処理に用いたIndexがシフトテーブルにおける最後のIndexである場合(S142でYes)、コントローラ20は、RAM22に記憶した成否テーブルを参照し、すべてのIndexを用いたリード処理がエラー訂正失敗(Fail)かどうかを判定する(S144)。成否テーブルにおいて、エラー訂正に成功(Pass)したIndexが記録されている場合、成功したIndexのうち番号が最も小さいものを履歴IndexとしてRAM22に記憶する(S162)。
【0048】
上述したように、エラー訂正に用いられたIndexが最後のIndexに達した場合(S142でYes)でもシフトテーブルのIndex更新が行われることになる。このような場合、エラー訂正に成功したIndexのうち、最も若い(小さい)Indexが履歴Indexとして記憶される。これにより、必要以上にリフレッシュ処理が行われることを防止できる。
【0049】
例えば、
図6に示す成否テーブルでは、Index1がエラー訂正失敗となっているが、次に番号の大きいIndex2においてエラー訂正が成功している。そこで、コントローラ20は、ステップS162においてIndex2を履歴Indexとして記録する。
【0050】
成否テーブルにおいて、エラー訂正に成功したIndexが残っておらず、すべてのIndexを用いたリード処理がエラー訂正失敗であった場合(S144でYes)、コントローラ20は、当該リード処理を行ったNAND型フラッシュメモリ10の領域のリフレッシュを実行する(S170)。例えば、
図7に示す成否テーブルでは、現在のIndex1から最後のIndex5まですべてエラー訂正に失敗している。そこで、コントローラ20は、ステップ170においてリフレッシュ処理を実行する。リフレッシュ処理を実行すると、コントローラ20はIndexを初期値(例えば
図4におけるIndex1)にリセットし、成否テーブルを初期化する(S180)。コントローラ20は、Indexの初期値を履歴IndexとしてRAM22に記憶する(S130)。
【0051】
コントローラ20は、以上説明した処理をすべてのメモリチップ11について行う。
【0052】
このように、変形例のメモリシステムでは、バックグラウンドで実行されるパトロールリード処理におけるIndexの更新は、エラー訂正の成否だけでなく、エラービットの個数を判定材料として行われる。従って、Indexを早期に更新可能とするとともに、リフレッシュ処理のタイミングを最適化(例えばできるだけ遅いタイミング)とすることができる。従って、ホスト装置30によるリード処理におけるリード処理失敗を抑制することができる。
【0053】
なお、ステップ162において、コントローラ20は、エラー訂正に成功したIndexのうちエラービットの数が最小であったIndex番号を履歴Indexとして記憶してもよい。これにより、データリテンション期間を延ばすことができる。
【0054】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0055】
1…メモリシステム、
10…NAND型フラッシュメモリ、
11…メモリチップ、
20…コントローラ、
21…ホストインタフェース、
22…RAM、
23…CPU、
24…バッファ、
25…NANDインタフェース、
26…ECC回路、
30…ホスト装置。