JP2019164850A - メモリシステム - Google Patents
メモリシステム Download PDFInfo
- Publication number
- JP2019164850A JP2019164850A JP2018051328A JP2018051328A JP2019164850A JP 2019164850 A JP2019164850 A JP 2019164850A JP 2018051328 A JP2018051328 A JP 2018051328A JP 2018051328 A JP2018051328 A JP 2018051328A JP 2019164850 A JP2019164850 A JP 2019164850A
- Authority
- JP
- Japan
- Prior art keywords
- read
- memory
- voltage
- error correction
- storage areas
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000015654 memory Effects 0.000 title claims description 217
- 238000000034 method Methods 0.000 claims abstract description 267
- 230000008569 process Effects 0.000 claims abstract description 231
- 238000012937 correction Methods 0.000 claims abstract description 146
- 238000003860 storage Methods 0.000 claims description 68
- 238000012545 processing Methods 0.000 claims description 64
- 230000008859 change Effects 0.000 claims description 36
- 238000009826 distribution Methods 0.000 claims description 33
- 238000005259 measurement Methods 0.000 claims 1
- 230000006866 deterioration Effects 0.000 abstract description 7
- 238000007726 management method Methods 0.000 description 107
- 238000010586 diagram Methods 0.000 description 23
- 239000004065 semiconductor Substances 0.000 description 10
- 230000006870 function Effects 0.000 description 8
- 238000001514 detection method Methods 0.000 description 7
- 238000003672 processing method Methods 0.000 description 6
- 239000004020 conductor Substances 0.000 description 5
- 238000009792 diffusion process Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 239000002184 metal Substances 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 239000012535 impurity Substances 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 101100481702 Arabidopsis thaliana TMK1 gene Proteins 0.000 description 1
- 101150056203 SGS3 gene Proteins 0.000 description 1
- LPQOADBMXVRBNX-UHFFFAOYSA-N ac1ldcw0 Chemical compound Cl.C1CN(C)CCN1C1=C(F)C=C2C(=O)C(C(O)=O)=CN3CCSC1=C32 LPQOADBMXVRBNX-UHFFFAOYSA-N 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1068—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1048—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/38—Response verification devices
- G11C29/42—Response verification devices using error correcting codes [ECC] or parity check
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/52—Protection of memory contents; Detection of errors in memory contents
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C2029/0411—Online error correction
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Read Only Memory (AREA)
- Semiconductor Memories (AREA)
- Non-Volatile Memory (AREA)
Abstract
【課題】リードレイテンシの悪化を低減すること。【解決手段】コントローラは、複数の第1のリード処理を実行し、ホストからリード要求を受信した場合、第2のリード処理を実行する。複数の第1のリード処理は、複数の候補値のうちのそれぞれ異なる候補値が判定電圧として適用されて実行される複数のリード処理である。コントローラは、複数の第1のリード処理のそれぞれにおいて、取得されたデータに対してエラー訂正を実行し、複数の第1のリード処理のそれぞれのエラー訂正の結果に基づいて第1候補値を取得する。第2のリード処理は、第1候補値よりも所定数だけ若い順位が設定された第2候補値が判定電圧として適用されて実行されるリード処理である。【選択図】図8
Description
本実施形態は、メモリシステムに関する。
従来、メモリセルトランジスタを有するメモリシステムが広く知られている。そのようなメモリシステムにおいては、リード処理においては、メモリセルトランジスタのしきい値電圧と判定電圧との比較に基づいて、そのメモリセルトランジスタに保持されるデータが判定される。
しかしながら、メモリセルトランジスタのしきい値電圧は、種々の要因によって変化し得る。これに対し、メモリシステムは、判定電圧の値の変更が可能に構成され、リード処理においてデータの誤判定が発生した場合には判定電圧の値を変更してリード処理をリトライすることができる。データの誤判定の発生およびリード処理のリトライは、リードレイテンシの悪化の一因となる。
一つの実施形態は、リードレイテンシの悪化を低減したメモリシステムを提供することを目的とする。
一つの実施形態によれば、メモリシステムは、ホストに接続可能である。メモリシステムは、不揮発性の第1メモリと、コントローラと、第2メモリと、を備える。第1メモリは、しきい値電圧が制御されるメモリセルトランジスタを備える。コントローラは、しきい値電圧と判定電圧との比較に基づいてしきい値電圧に対応するデータを第1メモリから取得するリード処理を実行する。第2メモリには、複数の候補値が記録された判定電圧情報が格納される。複数の候補値のそれぞれはしきい値電圧の変化に対応した順位が設定されている。コントローラは、複数の第1のリード処理を実行する。複数の第1のリード処理は、複数の候補値のうちのそれぞれ異なる候補値が前記判定電圧として適用されて実行される複数のリード処理である。コントローラは、複数の第1のリード処理のそれぞれにおいて、取得されたデータに対してエラー訂正を実行し、複数の第1のリード処理のそれぞれのエラー訂正の結果に基づいて第1候補値を取得する。コントローラは、ホストからのリード要求を受信した場合、第2のリード処理を実行する。第2のリード処理は、第1候補値よりも所定数だけ若い順位が設定された第2候補値が判定電圧として適用されて実行されるリード処理である。
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
(第1の実施形態)
図1は、第1の実施形態のメモリシステムの構成例を示す図である。図1に示されるように、メモリシステム1は、ホスト機器300と接続可能である。ホスト機器300は、例えば、サーバ、パーソナルコンピュータ、またはモバイル型の情報処理装置などが該当する。メモリシステム1は、ホスト機器300の外部記憶装置として機能する。ホスト機器300は、メモリシステム1に対して要求を発行することができる。要求は、リード要求およびライト要求を含む。
図1は、第1の実施形態のメモリシステムの構成例を示す図である。図1に示されるように、メモリシステム1は、ホスト機器300と接続可能である。ホスト機器300は、例えば、サーバ、パーソナルコンピュータ、またはモバイル型の情報処理装置などが該当する。メモリシステム1は、ホスト機器300の外部記憶装置として機能する。ホスト機器300は、メモリシステム1に対して要求を発行することができる。要求は、リード要求およびライト要求を含む。
メモリシステム1は、NAND型フラッシュメモリ100として、1以上のメモリチップ101、および1つのコントローラ200を備える。ここでは、メモリシステム1は、1以上のメモリチップ101として、メモリチップ101_0、101_1、101_2、101_3を備える。なお、メモリシステム1に具備されるメモリチップ101の数は、4に限定されない。
各メモリチップ101は、複数のメモリセルトランジスタを備え、データを不揮発に記憶することができる。メモリチップ101は、NANDバス400によってコントローラ200と接続されている。
図2は、メモリチップ101の構成例を示す図である。図示するようにメモリチップ101は、アクセス回路110およびメモリセルアレイ111を備える。
メモリセルアレイ111は、複数のプレーン(プレーン0、プレーン1)に分割されている。各プレーンは、並列にアクセスされることが可能なサブアレイである。各プレーンは、各々が複数の不揮発性メモリセルトランジスタの集合である複数のブロックBLK(BLK0、BLK1、…)を備える。ブロックBLKの各々は、それぞれがワード線およびビット線に関連付けられたメモリセルトランジスタの集合である複数のストリングユニットSU(SU0、SU1、…)を備える。ストリングユニットSUの各々は、メモリセルトランジスタが直列接続された複数のNANDストリング114を備える。なお、ストリングユニットSU内のNANDストリング114の数は任意である。なお、メモリセルアレイ111が備えるプレーンの数は2に限定されない。また、メモリセルアレイ111は、必ずしも分割されていなくてもよい。
アクセス回路110は、例えば、ロウデコーダ、カラムデコーダ、センスアンプ、ラッチ回路、および電圧発生回路を含む。アクセス回路110は、コントローラ200からの命令に応じて、各プレーンのメモリセルアレイ111に対し、プログラム処理、リード処理、およびイレース処理を実行する。
図3は、第1の実施形態のブロックBLKの回路構成を示す図である。なお、各ブロックBLKは、同一の構成を有している。ブロックBLKは、例えば4つのストリングユニットSU0〜SU3を有する。各ストリングユニットSUは、複数のNANDストリング114を含む。
NANDストリング114の各々は、例えば64個のメモリセルトランジスタMT(MT0〜MT63)および選択トランジスタST1、ST2を含んでいる。メモリセルトランジスタMTは、制御ゲートと電荷蓄積層とを備え、データを不揮発に保持する。そして64個のメモリセルトランジスタMT(MT0〜MT63)は、選択トランジスタST1のソースと選択トランジスタST2のドレインとの間に直列接続されている。なお、メモリセルトランジスタMTは、電荷蓄積層に絶縁膜を用いたMONOS型であってもよいし、電荷蓄積層に導電膜を用いたFG型であってもよい。さらに、NANDストリング114内のメモリセルトランジスタMTの個数は64個に限定されない。
ストリングユニットSU0〜SU3の各々における選択トランジスタST1のゲートは、それぞれ選択ゲート線SGD0〜SGD3に接続される。これに対してストリングユニットSU0〜SU3の各々における選択トランジスタST2のゲートは、例えば選択ゲート線SGSに共通接続される。ストリングユニットSU0〜SU3の各々における選択トランジスタST2のゲートは、ストリングユニットSU毎に異なる選択ゲート線SGS0〜SGS3に接続されてもよい。同一のブロックBLK内にあるメモリセルトランジスタMT0〜MT63の制御ゲートは、それぞれワード線WL0〜WL63に共通接続される。
ストリングユニットSU内にある各NANDストリング114の選択トランジスタST1のドレインは、それぞれ異なるビット線BL(BL0〜BL(L−1)、但しLは2以上の自然数)に接続される。また、ビット線BLは、複数のブロックBLK間で各ストリングユニットSU内にある1つのNANDストリング114を共通に接続する。更に、各選択トランジスタST2のソースは、ソース線SLに共通に接続されている。
つまりストリングユニットSUは、異なるビット線BLに接続され、且つ同一の選択ゲート線SGDに接続されたNANDストリング114の集合である。またブロックBLKは、ワード線WLを共通にする複数のストリングユニットSUの集合である。そしてメモリセルアレイ111は、ビット線BLを共通にする複数のブロックBLKの集合である。
アクセス回路110による1つのプレーンに対するプログラム処理およびリード処理は、1つのストリングユニットSUにおける1つのワード線WLに接続されたメモリセルトランジスタMTに対して、一括して行われる。以降、1つのプレーンに対するプログラム処理およびリード処理の際、一括して選択されるメモリセルトランジスタMTの群を「メモリセルグループMCG」と表記する。そして、1つのメモリセルグループMCGにプログラムされる、あるいはリードされる1ビットのデータの集まりを「ページ」と表記する。
アクセス回路110による1つのプレーンに対するイレース処理は、ブロックBLK単位、またはブロックBLKよりも小さい単位で行うことができる。イレース方法に関しては、例えば“NONVOLATILE SEMICONDUCTOR MEMORY DEVICE”という2011年9月18日に出願された米国特許出願13/235,389号に記載されている。また、イレース方法に関しては、“NON-VOLATILE SEMICONDUCTOR STORAGE DEVICE”という2010年1月27日に出願された米国特許出願12/694,690号に記載されている。更に、“NONVOLATILE SEMICONDUCTOR MEMORY DEVICE AND DATA ERASE METHOD THEREOF”という2012年5月30日に出願された米国特許出願13/483,610号に記載されている。これらの特許出願は、その全体が本願明細書において参照により援用されている。
なお、それぞれ異なるプレーンまたは異なるメモリチップ101に属する複数のページによって1つの論理ページが構成され、コントローラ200は1つの論理ページを構成する複数のページに対して並列にプログラム処理またはリード処理を実行してもよい。また、それぞれ異なるプレーンまたは異なるメモリチップ101に具備される複数のブロックBLKによって1つの論理ブロックが構成され、コントローラ200は、1つの論理ブロックを構成する複数のブロックBLKに対して並列にイレース処理を実行してもよい。
図4は、第1の実施形態のブロックBLKの一部領域の断面図である。図示するように、p型ウェル領域10上に、複数のNANDストリング114が形成されている。すなわち、ウェル領域10上には、選択ゲート線SGSとして機能する例えば4層の配線層11、ワード線WL0〜WL63として機能する64層の配線層12、および選択ゲート線SGDとして機能する例えば4層の配線層13が、順次積層されている。積層された配線層間には、図示せぬ絶縁膜が形成されている。
そして、これらの配線層13、12、11を貫通してウェル領域10に達するピラー状の導電体14が形成されている。導電体14の側面には、ゲート絶縁膜15、電荷蓄積層(絶縁膜または導電膜)16、およびブロック絶縁膜17が順次形成され、これらによってメモリセルトランジスタMT、並びに選択トランジスタST1およびST2が形成されている。導電体14は、NANDストリング114の電流経路として機能し、各トランジスタのチャネルが形成される領域となる。そして導電体14の上端は、ビット線BLとして機能する金属配線層18に接続される。
ウェル領域10の表面領域内には、n+型不純物拡散層19が形成されている。拡散層19上にはコンタクトプラグ20が形成され、コンタクトプラグ20は、ソース線SLとして機能する金属配線層21に接続される。更に、ウェル領域10の表面領域内には、p+型不純物拡散層22が形成されている。拡散層22上にはコンタクトプラグ23が形成され、コンタクトプラグ23は、ウェル配線CPWELLとして機能する金属配線層24に接続される。ウェル配線CPWELLは、ウェル領域10を介して導電体14に電位を印加するための配線である。
以上の構成が、半導体基板に平行な第2方向D2に複数配列されており、第2方向D2に並ぶ複数のNANDストリング114の集合によってストリングユニットSUが形成される。
なお、メモリセルアレイ111は、上記の構成以外の構成を有し得る。すなわちメモリセルアレイ111の構成については、例えば、“三次元積層型不揮発性半導体メモリ(THREE DIMENSIONAL STACKED NONVOLATILE SEMICONDUCTOR MEMORY)”という2009年3月19日に出願された米国特許出願12/407,403号に記載されている。また、メモリセルアレイ111の構成については、“三次元積層型不揮発性半導体メモリ(THREE DIMENSIONAL STACKED NONVOLATILE SEMICONDUCTOR MEMORY)”という2009年3月18日に出願された米国特許出願12/406,524号、“不揮発性半導体記憶装置およびその製造方法(NON-VOLATILE SEMICONDUCTOR STORAGE DEVICE AND METHOD OF MANUFACTURING THE SAME)”という2008年12月9日に出願された米国特許出願12/679,991号、“半導体メモリおよびその製造方法(SEMICONDUCTOR MEMORY AND METHOD FOR MANUFACTURING SAME)”という2009年3月23日に出願された米国特許出願12/532,030号に記載されている。これらの特許出願は、その全体が本願明細書において参照により援用されている。
以降では、メモリセルトランジスタMTを、単に、メモリセルと表記する。
図5は、第1の実施形態のメモリセルの取り得るしきい値電圧の一例を示す図である。縦軸は、メモリセルの数を示しており、横軸は、しきい値電圧を示している。即ち、本図は、しきい値電圧に対するメモリセルの分布を示している。以下、本実施形態では、メモリセルが8値のデータを保持可能な場合について説明するが、保持可能なデータは8値に限定されない。本実施形態においては、メモリセルが2値以上のデータ(1ビット以上のデータ)を保持可能であればよい。
図5に示されるように、しきい値電圧の取り得る範囲は、8つの範囲に区分される。この8つの区分を、しきい値電圧が低いほうから順に、“Er”ステート、“A”ステート、“B”ステート、“C”ステート、“D”ステート、“E”ステート、“F”ステート、および“G”ステートと呼ぶことにする。各メモリセルのしきい値電圧は、アクセス回路110によって、“Er”ステート、“A”ステート、“B”ステート、“C”ステート、“D”ステート、“E”ステート、“F”ステート、および“G”ステート、の何れかに属するように、制御される。その結果、しきい値電圧に対するメモリセルの数をプロットした場合、メモリセルは、理想的には、本図に示されるように、それぞれ異なるステートに属する互いに重ならない8つの分布を形成する。
8つのステートは、3ビットのデータに対応する。本図の例によれば、“Er”ステートは“111”に対応し、“A”ステートは“110”に対応し、“B”ステートは“100”に対応し、“C”ステートは“000”に対応し、“D”ステートは“010”に対応し、“E”ステートは“011”に対応し、“F”ステートは“001”に対応し、“G”ステートは“101”に対応する。このように、各メモリセルは、そのしきい値電圧が属するステートに応じたデータを保持することができる。なお、図5に示す対応関係は、データコーディングの一例である。データコーディングは本図の例に限定されない。
なお、1つのメモリセルに保持される3ビットのデータのうち、LSB(Least Significant Bit)をロアービット、MSB(Most Significant Bit)をアッパービット、LSBとMSBとの間のビットをミドルビット、と表記する。同一のメモリセルグループMCGに属する全てのメモリセルトランジスタMTのロアービットの集合を、ロアーページと表記する。同一のメモリセルグループMCGに属する全てのメモリセルトランジスタMTのミドルビットの集合を、ミドルページと表記する。同一のメモリセルグループMCGに属する全てのメモリセルトランジスタMTのアッパービットの集合を、アッパーページと表記する。
しきい値電圧は、イレース処理によって“Er”ステートに低下せしめられる。また、しきい値電圧は、プログラム処理によって、“Er”ステートに維持されるか、または“A”ステート、“B”ステート、“C”ステート、“D”ステート、“E”ステート、“F”ステート、および“G”ステート、の何れかに至るまで、上昇せしめられる。
具体的には、プログラム処理においては、アクセス回路110は、カラムアドレスに対応したビット線BLを選択する。アクセス回路110は、選択されたビット線BLの電位をゼロとする。アクセス回路110は、ロウアドレスに対応したワード線WLを選択し、選択されたワード線WLに、プログラミングパルスを印加する。すると、選択されたビット線BLおよび選択されたワード線WLとの交点に位置するメモリセルの電荷蓄積層16に電子が注入され、その結果、メモリセルのしきい値電圧が上昇する。アクセス回路110は、所定のタイミングでデータのリードを行うことで、メモリセルのしきい値電圧がライトデータのデータに対応した目標のステートに到達したか否かを確認する(ベリファイリード)。アクセス回路110は、メモリセルのしきい値電圧が目標のステートに到達するまで、プログラムパルスの印加を継続する。
以降、プログラム処理によってあるステートにしきい値電圧が設定されたメモリセルを、そのステートに属するメモリセル、と表記することがある。
隣接する2つのステート間には、判定電圧が設定される。例えば、図5に例示されるように、“Er”ステートと“A”ステートとの間に判定電圧Vraが設定され、“A”ステートと“B”ステートとの間に判定電圧Vrbが設定され、“B”ステートと“C”ステートとの間に判定電圧Vrcが設定され、“C”ステートと“D”ステートとの間に判定電圧Vrdが設定され、“D”ステートと“E”ステートとの間に判定電圧Vreが設定され、“E”ステートと“F”ステートとの間に判定電圧Vrfが設定され、“F”ステートと“G”ステートとの間に判定電圧Vrgが設定される。リード処理においては、複数種類の判定電圧によって、メモリセルが属するステートに対応付けられたデータが判定される。
例えば図5に示されたデータコーディングが適用される場合を考える。メモリセルが“Er”ステート、“E”ステート、“F”ステート、および“G”ステート、の何れかに属する場合、そのメモリセルが保持するロアービットの値は“1”である。メモリセルが“A”ステート、“B”ステート、“C”ステート、および“D”ステートの何れかに属する場合、そのメモリセルが保持するロアービットの値は“0”である。よって、VraおよびVreの2種類の判定電圧を使用することによって、ロアーページのデータが判定できる。
メモリセルが“Er”ステート、“A”ステート、“D”ステート、および“E”ステートの何れかに属する場合、そのメモリセルが保持するミドルビットの値は“1”である。メモリセルが“B”ステート、“C”ステート、“F”ステート、および“G”ステートの何れかに属する場合、そのメモリセルが保持するミドルビットの値は“0”である。よって、Vrb、Vrd、およびVrfの3種類の判定電圧を使用することによって、ミドルページのデータが判定できる。
メモリセルが“Er”ステート、“A”ステート、“B”ステート、および“G”ステートの何れかに属する場合、そのメモリセルが保持するアッパービットの値は“1”である。メモリセルが“C”ステート、“D”ステート、“E”ステート、および“F”ステートの何れかに属する場合、そのメモリセルが保持するアッパービットの値は“0”である。よって、VrcおよびVrgの2種類の判定電圧を使用することによって、アッパーページのデータが判定できる。
このように、データの判定に使用される判定電圧の種類は、リード対象のページの種類に応じて異なる。アクセス回路110は、リード処理では、リード対象のページの種類に応じた複数種類の判定電圧を使用する。
さらに具体的に説明すると、リード処理においては、アクセス回路110は、ビット線BLに電源電圧VDDをプリチャージする。アクセス回路110は、ロウアドレスに対応したワード線WLを選択する。アクセス回路110は、非選択のワード線WLに属するメモリセルを導通状態にし、選択されたワード線WLに、リード対象のページの種類に対応する複数種類の判定電圧を順次印加する。アクセス回路110は、プリチャージにより蓄えられた電荷がどの判定電圧が印加されたときにソース線SLに流出したかを検知することによって、対象のメモリセルが属するステートに対応するデータを判定する。アクセス回路110は、判定されたデータをラッチ回路に格納する。コントローラ200は、例えばリードイネーブル(RE)信号をトグルさせることによって、ラッチ回路内のデータをリードデータとして取得することができる。
なお、図5では、メモリセルが、互いに重ならない8つの分布を形成する場合を説明した。しかしながら、メモリセルのしきい値電圧は、使用履歴に応じて変化し得る。使用履歴は、当該メモリセルへのアクセス、当該メモリセルへのプログラム完了時からの経過時間および温度履歴、当該メモリセルに隣接するメモリセルへのアクセス、当該メモリセルの疲弊状態、などを含む。メモリセルの疲弊状態は、当該メモリセルに対するイレース処理・プログラム処理の実行回数、および当該メモリセルに対するイレース処理・プログラム処理の際の温度に影響される。メモリセルのしきい値電圧が変化し得るので、現実的には、リード処理時において、ステート毎の分布が互いに重なり合った状態になっている場合がある。
図6は、第1の実施形態のメモリセルの取り得るしきい値電圧の別の一例を示す図である。ここでは、説明を簡単にするために、“A”ステートおよび“B”ステートのいずれかに属するメモリセルの分布を図示している。実線は、“A”ステートおよび“B”ステートのいずれかに属するメモリセルの分布を示している。破線は、“A”ステートに属するメモリセルの分布を示し、一点鎖線は、“B”ステートに属するメモリセルの分布を示している。本図の例では、“A”ステートに属するメモリセルの分布の裾野と“B”ステートに属するメモリセルの分布の裾野とが重なり合っている。言い換えると、“A”ステートに属するメモリセルのしきい値電圧の最大値が判定電圧Vrbを超えており、かつ、“B”ステートに属するメモリセルのしきい値電圧の最小値が判定電圧Vrbを下回っている。“A”ステートに属し、かつ、しきい値電圧が判定電圧Vrbよりも大きいメモリセルがリードされた場合、そのメモリセルは“B”ステートに属するとして認識される。即ち、“110”としてプログラムされたデータが“100”としてリードされる。“B”ステートに属し、かつ、しきい値電圧が判定電圧Vrbよりも小さいメモリセルがリードされた場合、そのメモリセルは“A”ステートに属するとして認識される。即ち、“100”としてプログラムされたデータが“110”としてリードされる。
このように、リードされたデータは、しきい値電圧の変化によって、プログラムされた時点での値から変化した場合がある。データやしきい値電圧の変化に対しては、コントローラ200は、エラー訂正と、判定電圧のシフトと、によって対応する。具体的には、コントローラ200では、後述のECC(error correction code)回路206によって、リードデータに対してエラー訂正を実行する。エラー訂正が失敗した場合には、コントローラ200は、判定電圧を変えてリード処理をリトライする。リトライされるリード処理を、リトライリードと表記する。なお、エラー訂正が失敗するとは、変化後のデータから変化前のデータを復元できないことをいう。具体的には、エラー訂正が失敗するとは、リードデータに含まれるエラービットが訂正できないことをいう。エラー訂正が成功するとは、リードデータに含まれる全てのエラービットが訂正されたことをいう。コントローラ200は、エラー訂正が成功するまで、判定電圧を変化させながらリトライリードを繰り返し実行する。
なお、判定電圧の値は、種々の量で表現され得る。また、判定電圧の値は、種々の表現で指示され得る。本実施形態では、一例として、判定電圧の種類(Vra〜Vrg)毎に基準値が予め設定されており、判定電圧の値は、基準値からの差分であるシフト量で表現される。また、メモリチップ101内の所定の位置に基準値が判定電圧の種類毎に記録されている。そして、コントローラ200は、判定電圧の種類毎に基準値からのシフト量をメモリチップ101に指示する。
なお、判定電圧の表現方法および指示の方法は、これに限定されない。例えば、判定電圧の値は差分ではなく電圧値で表現され、判定電圧は、メモリチップ101に対し、差分ではなく電圧値で指示されてもよい。
リトライリードでは、コントローラ200は、リード処理において適用される判定電圧を、シフトインデックステーブル220に基づいて取得する。
図7は、第1の実施形態のシフトインデックステーブル220のデータ構造の一例を示す図である。シフトインデックステーブル220には、複数のシフトパターンが記録されている。シフトパターンは、全種類の判定電圧の値をそれぞれ1つずつ含むセットであり、判定電圧の候補値を示すものである。各シフトパターンが含むそれぞれの種類の判定電圧の値は、基準値からのシフト量の形式で表記される。図7において、シフト量X(XはA、B、C、D、E、F、G)は、判定電圧Vrx(xはa、b、c、d、e、f、g)の基準値からの差分を示す。
シフトインデックステーブル220には、しきい値電圧の変化の進行に対応した順番で各シフトパターンが配列されている。また、各シフトパターンには、配列の順番に対応した値のインデックスが付されている。即ち、インデックスの値は、しきい値電圧の変化の進行に対応した順位を示す。
例えば、しきい値電圧の変化の進行が第1の度合いと、第1の度合いよりも変化がより進行した第2の度合いと、を考える。第1の度合いに対応した第1のシフトパターンには、第2の度合いに対応した第2のシフトパターンよりも若い順位が設定される。
コントローラ200は、リトライリードを繰り返す際、それぞれのリトライリードで適用されるシフトパターンを、インデックスの値の順番で選択する。
なお、しきい値電圧の変化の進行の傾向は、設計者によって予め推定され得る。つまり、シフトインデックステーブル220には、設計者によって予め推定されたしきい値電圧の変化の進行に対応した順番で、各シフトパターンが配列されている。例えば、しきい値電圧の変化の進行は、メモリセルから電荷が抜ける現象を考慮して推定され得る。メモリセルから電荷が抜ける現象によるしきい値電圧の変化の進行は、例えば、イレース処理・プログラム処理の実行回数によって異なる。イレース処理・プログラム処理の実行回数に応じて異なるシフトインデックステーブル220が設けられてもよい。
以降では、インデックスの値が「X」であるシフトパターンを、インデックスXのシフトパターンと表記することがある。また、インデックスの値が「X」であるシフトパターンを適用して実行されるリード処理を、パターンXと表記することがある。
コントローラ200は、さらに、パトロールリードを実行する。パトロールリードは、ホスト機器300からの要求に関係なくバックグラウンドで実行されるリード処理である。コントローラ200は、例えば、定期的にまたは使用履歴が所定条件を満たした際にパトロールリードを実行する。
コントローラ200は、パトロールリードにおいて、リトライリードを含む1回以上のリード処理を行い、エラー訂正に成功するための電圧値を、実行された1回以上のリード処理の結果に基づいて学習する。学習するとは、演算し、または演算しないで、演算または演算以外の方法で取得された値を記憶することである。コントローラ200は、ホスト機器300からの要求に応じてリード処理を実行する際には、判定電圧として適用する電圧値を、学習された電圧値に基づいて取得する。
以降では、学習された電圧値または電圧値を示す値を、学習値と表記する。第1の実施形態では、一例として、インデックスの値が学習値として記録される。
また、以降では、ホスト機器300から要求されたデータをリードするリード処理、即ちホスト機器300からの要求に応じたリード処理を、ホストリードと表記する。
第1の実施形態では、1つの学習値は、リード処理の単位(即ちページ)よりも大きい所定のサイズの記憶領域に対して共通に適用される。共通の学習値が適用される記憶領域の範囲を、管理領域と表記する。
さらに、第1の実施形態では、コントローラ200は、1つの管理領域のうちの1つのページを代表ページとして選択し、当該代表ページに対し、リトライリードを含む1回以上のリード処理を実行する。そして、リトライリードによってエラー訂正が成功した場合(即ち複数回のリード処理によってエラー訂正が成功した場合)、コントローラ200は、エラー訂正が成功した際に適用されたシフトパターンよりも所定の数だけ若い順位が設定されたシフトパターンを学習する。
図8は、第1の実施形態のコントローラ200の学習値の決定方法の概略を説明するための図である。本図では、4つのページ(ページ0〜3)によって1つの管理領域が構成され、当該4つのページのそれぞれに対してインデックス0〜3のシフトパターンが適用された4回のリード処理(パターン0〜パターン3)が実行された場合の、エラー訂正の成否を示している。
コントローラ200は、代表ページに対し、インデックス0のシフトパターンから順番に適用して1回以上のリード処理を実行する。例えばページ2が代表ページである場合、コントローラ200は、パターン0およびパターン1をこの順番で実行し、パターン0およびパターン1においてエラー訂正が失敗する。続いてコントローラ200は、パターン2を実行し、エラー訂正が成功する(S1)。すると、コントローラ200は、パターン2で使用されたシフトパターン、即ちインデックス2のシフトパターン、を1回以上のリード処理において初めてエラー訂正が成功した際のシフトパターンとして特定し、そのシフトパターンよりも1だけ若い順位が設定された、シフトパターン1を学習する(S2)。
図8の例では、ページ0およびページ3がリード対象である場合、パターン0およびパターン1ではエラー訂正が成功し、パターン2およびパターン3ではエラー訂正が失敗する。また、ページ1がリード対象である場合、パターン1およびパターン2ではエラー訂正が成功し、パターン0およびパターン3ではエラー訂正が失敗する。これに対し、ページ2がリード対象である場合、パターン0およびパターン1ではエラー訂正が失敗し、パターン2およびパターン3ではエラー訂正が成功する。
つまり、代表ページであるページ2においては、しきい値電圧の変化が他のページに比べてより進行している。よって、ページ2がエラー訂正の失敗なくリード可能であるシフトパターンを他のページのリード処理に適用したとしても、当該他のページがリード対象である場合、最初のリード処理およびその後に実行されるリトライリードにおいてエラー訂正が失敗する可能性が高い。
例えば、シフトパターン2を適用した場合、ページ0およびページ3に対するリード処理においてエラー訂正が失敗する。また、ページ0およびページ3に対し、シフトパターン3を適用してリトライリードを実行したとしても、エラー訂正が失敗する。
これに対し、代表ページがエラー訂正の失敗なくリード可能であるシフトパターンよりも若い順位が設定されたシフトパターンが学習されることで、代表ページのしきい値電圧の変化が他のページに比べてより進行している場合であっても、当該他のページのリード処理または当該リード処理の後のリトライリードにおいてエラー訂正が成功する可能性を高くすることが可能である。
例えば、シフトパターン2を適用した場合、ページ1およびページ2がエラー訂正の失敗なくリード可能である。これに対し、シフトパターン2よりも1だけ若い順位が設定されたシフトパターンであるシフトパターン1を適用した場合、ページ0、ページ1、およびページ3が、エラー訂正の失敗なくリード可能である。即ち、図8のケースでは、シフトパターン1を学習することによって、シフトパターン2を学習する場合に比べてエラー訂正の失敗なくリード可能なページの数を増やすことができる。
なお、ページ2に対するリード処理においてはエラー訂正が失敗する。しかしながら、ページ2は、次に実行されるリトライリード、即ちシフトパターン2が適用されたリトライリードにおいて、エラー訂正の失敗なくリード可能である。
このように、代表ページがエラー訂正の失敗なくリード可能であるシフトパターンよりも若い順位が設定されたシフトパターンを学習し、学習されたシフトパターンをホストリードにおいて使用することによって、管理領域全体において、エラー訂正の失敗の回数またはリトライリードの実行回数を低減することが可能である。
なお、代表ページがエラー訂正の失敗なくリード可能であるシフトパターンと学習されるシフトパターンとの間の順位の差は、1に限定されない。例えば、代表ページがエラー訂正の失敗なくリード可能であるシフトパターンよりも2以上若い順位が設定されたシフトパターンが学習されてもよい。代表ページがエラー訂正の失敗なくリード可能であるシフトパターンと同じシフトパターンが学習されてもよい。
なお、同一の学習値が適用される記憶領域の範囲、即ち管理領域は、任意に設定可能である。
図9および図10は、第1の実施形態の管理領域の設定方法を説明するための図である。ここでは、異なるプレーンに含まれる2つのブロックBLKが、4つのメモリチップ101のそれぞれから選択され、選択された合計8つのブロックBLKによって1つの論理ブロックが構成される。図9は、同一の論理ブロックを構成する8つのブロックBLKによって構成される、NANDストリング114のグループ2を示している。このグループ2は、ワード線の並び方向に均等に16個のサブグループ3に分割されている。即ち、各サブグループ3は、連続して配置された4本のワード線を備える。各サブグループ3は、1つのブロックBLKを構成する4つのストリングユニットSUおよび1つの論理ブロックを構成する8つのブロックBLKにまたがって設けられている。そして、図10に示されるように、各サブグループ3のアッパーページからなる記憶領域(アッパーページ群)と、各サブグループ3のミドルページからなる記憶領域(ミドルページ群)と、各サブグループ3のロアーページからなる記憶領域(ロアーページ群)と、のそれぞれが、管理領域4として設定される。即ち、1つのサブグループ3は、ページの種類が異なる3つの管理領域4を備える。
連続して配置された複数のワード線は、しきい値電圧の変化特性が類似する傾向がある。また、コントローラ200が1つの論理ブロックを構成する複数のブロックBLKに対して並列にアクセスを実行する場合、並列にアクセスされる複数のワード線は、しきい値電圧の変化特性が類似する傾向がある。よって、図9および図10に示した管理領域4の設定方法によれば、しきい値電圧の変化特性が類似した記憶領域の範囲を1つの管理領域4として設定することができる。よって、管理領域4内で1つの学習値が共通に適用される場合でも、管理領域4内の多くのページをエラー訂正の失敗なくリードすることが可能となる。なお、管理領域4の設定方法は、図9および図10に示した方法だけに限定されない。
図1に説明を戻す。コントローラ200は、ホストインターフェイス回路(HOST I/F)201、RAM(Random Access Memory)202、CPU(Central Processing Unit)203、バッファメモリ(Buffer Memory)204、NANDインターフェイス回路(NAND I/F)205、およびECC回路(ECC)206を備える。コントローラ200は、例えばSoC(System-On-a-Chip)として構成され得る。コントローラ200は、複数のチップによって構成されてもよい。コントローラ200は、CPU203に代えて、FPGA(field-programmable gate array)やASIC(application specific integrated circuit)を備えていてもよい。つまり、コントローラ200は、ソフトウェア、ハードウェア、またはこれらの組み合わせによって構成され得る。
ホストインターフェイス回路201は、例えばSATA(Serial Advanced Technology Attachment)規格、SAS(Serial Attached SCSI)規格、またはPCI(Peripheral Components Interconnect) Express(登録商標)規格などに準拠したバスを介してホスト機器300と接続され、コントローラ200とホスト機器300との通信を司る。
NANDインターフェイス回路205は、NANDバスを介して各メモリチップ101と接続され、コントローラ200とメモリチップ101との通信を司る。
CPU203は、コントローラ200の動作を制御する。
RAM202は、CPU203の作業領域として使用される。バッファメモリ204は、メモリチップ101に送信されるデータ、およびメモリチップ101から受信したデータを一時的に保持する。RAM202およびバッファメモリ204は、例えばDRAM(dynamic random access memory)、SRAM(static random access memory)、またはこれらの組み合わせなどによって構成され得る。なお、RAM202およびバッファメモリ204を構成するメモリの種類は、これらに限定されない。
ECC回路206は、誤り訂正符号を用いて、エラーの検出および検出されたエラーの訂正を実行する。
図11は、第1の実施形態のメモリシステム1に保持される各種データを説明する図である。
NAND型フラッシュメモリ100には、ユーザデータ140およびシステムデータ141が格納される。ユーザデータ140は、ホスト機器300から受信し、ECC回路206によって誤り訂正符号化されたデータである。本明細書において、データは、少なくともユーザデータ140を指す。
システムデータ141は、コントローラ200の制御に要するデータである。システムデータ141は、ファームウェアプログラム142を含む。ファームウェアプログラム142は、CPU203がコントローラ200の動作の制御を実現するためのコンピュータプログラムである。例えば、CPU203は、メモリシステム1の起動時にファームウェアプログラム142をRAM202にロードする。そして、CPU203は、RAM202にロードされたファームウェアプログラム142に従って動作することによって、コントローラ200の動作の制御を実現する。
RAM202には、シフトインデックステーブル220および学習値テーブル221が格納される。
シフトインデックステーブル220は、前述したように、各種シフトパターンを規定した情報である。各種シフトパターンには、選択される順位として使用されるインデックスが付与されている。
学習値テーブル221は、学習値が記録された情報である。コントローラ200は、パトロールリードによって取得した学習値を、学習値テーブル221に記録する。ホストリードでは、コントローラ200は、学習値テーブル221から対応する学習値を決定する。学習値テーブル221は、メモリシステム1がシャットダウンされるまでに、定期的あるいは一括してNAND型フラッシュメモリ100に保存され、メモリシステム1の起動時にNAND型フラッシュメモリ1からRAM202にロードされてもよい。あるいは、学習値テーブル221の一部または全部は、電源断時に失われてもよい。
図12は、第1の実施形態の学習値テーブル221のデータ構成例を示す図である。本図に示されるように、学習値テーブル221には、管理領域4毎に学習値が記録される。なお、前述したように、第1の実施形態では、学習値テーブル221には、シフトインデックステーブル220に記録された複数のシフトパターンのうちの1つを示すインデックスの値が、学習値として記録される。
なお、ファームウェアプログラム142、シフトインデックステーブル220、および学習値テーブル221が格納されるメモリは、上記に限定されない。例えば、シフトインデックステーブル220は、メモリチップ101に格納されていてもよい。また、RAM202およびメモリチップ101のほかに任意の種類のメモリがメモリシステム1に具備され、ファームウェアプログラム142、シフトインデックステーブル220、および学習値テーブル221の一部または全部は、そのメモリに格納されてもよい。
続いて、第1の実施形態のメモリシステム1の動作を説明する。
図13は、第1の実施形態のパトロールリードの手順の概略を示すフローチャートである。本図に示されるように、まず、CPU203は、学習値を生成するタイミングに至った管理領域4があるか否かを判定する(S101)。
学習値を生成するタイミングは、任意に設定され得る。例えば、CPU203は、データのプログラム処理が完了したすべての管理領域4のうちのそれぞれを、所定の時間間隔で、学習値の生成の対象として選択する。つまり、CPU203は、ある管理領域4に対するプログラム処理が完了し、プログラム処理の完了から所定の時間が経過すると、その管理領域4にかかる学習値を生成するタイミングに至ったと判定する。そして、CPU203は、その管理領域4にかかる学習値の生成が完了すると、その学習値の生成から所定の時間が経過後に、その管理領域4の学習値を生成するタイミングに至ったと再び判定する。
別の例では、CPU203は、データのプログラム処理が完了したすべての管理領域4のうちのそれぞれについて、アクセス履歴を記録する。アクセス履歴は、例えばリード処理の実行回数である。CPU203は、データのプログラム処理が完了したすべての管理領域4のうちのそれぞれを、アクセス履歴が所定の条件を満たす毎に、学習値の生成の対象として選択する。例えば、CPU203は、ある管理領域4において、プログラム処理が完了してからまたは前回に学習値が生成されてからのリード処理の実行回数の増分が所定の値に到達した場合、その管理領域4の学習値を生成するタイミングに至ったと判定する。
さらに別の例では、メモリシステム1の起動時が、学習値を生成するタイミングとして設定されてもよい。メモリシステム1の起動時から所定の時間が経過後に、学習値を生成するタイミングに至ったと判定されてもよい。
学習値を生成するタイミングに至った管理領域4がある場合(S101、Yes)、CPU203は、その管理領域4にかかる学習値を生成する処理(学習値生成処理)を実行する(S102)。学習値を生成するタイミングに至った管理領域4がない場合(S101、No)、またはS102の後、CPU203は、S101の処理を再び実行する。
図14は、第1の実施形態の学習値生成処理の手順を説明するフローチャートである。本図の説明において、学習値生成処理の対象の管理領域4を、対象の管理領域4と表記する。
まず、CPU203は、変数I_tmpをゼロで初期化する(S201)。そして、CPU203は、シフトパターンI_tmp、即ちインデックスの値が「I_tmp」のシフトパターン、を適用して、対象の管理領域4に含まれる代表ページに対するリード処理を実行する(S202)。S202では、CPU203は、代表ページを含むメモリチップ101に対し、シフトパターンI_tmpを指示し、リード処理を命令する。
なお、代表ページは、任意に設定され得る。代表ページは、管理領域4毎に予め設定されていてもよいし、学習値生成処理が実行される毎に任意のアルゴリズムに基づいて1または複数のページが代表ページとして選択されてもよい。代表ページは、1つのページによって構成されてもよいし、1つの論理ページに含まれる複数のページによって構成されてもよい。管理領域4に含まれる複数のページのうちの、しきい値電圧の変化傾向が平均的なページが代表ページとして選択されてもよい。管理領域4に含まれる複数のページのうちの、しきい値電圧の変化が最も大きいページが代表ページとして選択されてもよい。ページ毎にビットエラーレートが測定され、管理領域4に含まれる複数のページのうちの、ビットエラーレートが最も悪いページが代表ページとして選択されてもよい。
S202の後、リード処理が命令されたメモリチップ101では、アクセス回路110は、指示されたシフトパターンを用いてリード命令を実行し、リードデータをラッチ回路に格納する。コントローラ200では、NANDインターフェイス回路205がラッチ回路からリードデータを取得し、ECC回路206は、取得されたリードデータに対しエラーの検出および訂正を実行する。エラー訂正の成否は、CPU203に通知される。
CPU203は、ECC回路206によるエラー訂正が失敗したか否かを判定する(S203)。エラー訂正が失敗した場合(S203、Yes)、CPU203は、I_tmpを1だけインクリメントし(S204)、I_tmpがシフトインデックステーブル220の末尾に記録されたシフトパターンのインデックスの値(I_lastと表記する)を超えたか否かを判定する(S205)。
I_tmpがI_lastを超えていない場合(S205、No)、CPU203は、S202の処理を再び実行する。
エラー訂正が成功した場合(S203、No)、CPU203は、I_tmpがゼロと一致するか否かを判定する(S206)。I_tmpがゼロと一致する場合(S206、Yes)、CPU203は、I_tmp即ちゼロを対象の管理領域4にかかる学習値I_learnedとして学習値テーブル221に記録する(S207)。I_tmpがゼロと一致しない場合(S206、No)、CPU203は、第1の実施形態では、I_tmp−1の値を対象の管理領域4にかかる学習値I_learnedとして学習値テーブル221に記録する(S208)。
S207またはS208の後、CPU203は、所定の基準が満たされたか否かを判定する(S209)。S209は、対象の管理領域4に格納されたデータがしきい値電圧の変化によって喪失することを防止するための処理(S210)を実行するか否かを判定するための処理である。S210では、CPU203は、例えば、リフレッシュ処理、コードレートの引き下げ、またはその両方を実行する。
リフレッシュ処理は、対象の記憶領域(例えば管理領域4)に格納されている少なくとも全ての有効なデータをプログラムし直すことである。例えばリフレッシュ処理では、対象の記憶領域に格納されている全ての有効なデータを他の記憶領域にコピーし、その後、コピー元の記憶領域に格納されている全データがイレースされる。なお、移動元の記憶領域と移動先の記憶領域とは同じであってもよい。移動元の記憶領域と移動先の記憶領域とが同じ場合には、対象の記憶領域に記憶されているデータの少なくとも全ての有効なデータが例えばRAM202に読み出され、その後、対象の記憶領域に格納されている全データが消去され、消去後の対象の記憶領域に、RAM202に読み出されたデータが書き込まれる。リフレッシュ処理によれば、しきい値電圧の変化が大きい状態で格納されていたデータを、しきい値電圧の変化が少ない状態で格納し直すことができる。
コードレートは、誤り訂正符号化時の、出力ビット数に対する入力ビット数の割合をいう。コードレートを引き下げると、実データ(誤り訂正符号化前のデータ)に対する誤り訂正符号の符号長の割合が増加するので、管理領域4に格納可能な実データの容量の低下と引き換えにECC回路206の誤り訂正の能力が強化される。なお、コードレートは、例えば、ブロックなど所定の領域毎に設定される。あるブロックに対してユーザデータ140が書き込まれる場合、そのユーザデータ140は、そのブロックに設定されたコードレートで符号化された後、そのブロックに書き込まれる。
S209で使用される所定の基準、即ちS210の処理を実行するか否かの条件は、任意に設定され得る。例えば、エラー訂正が成功した際に使用されたシフトインデックスの値、即ちS203の処理においてNoと判定された際のI_tmpの値、が所定のしきい値を超えたか否かがS209で判定される。エラー訂正が成功した際に使用されたシフトインデックスの値が前記しきい値を超えた場合、S209においてYesと判定される。エラー訂正が成功した際に使用されたシフトインデックスの値が前記しきい値を超えていない場合、S209においてNoと判定される。
所定の基準が満たされた場合(S209、Yes)、CPU203はS210の処理を実行する。
所定の基準が満たされていない場合(S209、No)、またはS210の実行が完了すると、対象の管理領域4にかかる学習値生成処理が終了する。なお、所定の基準が満たされた場合(S209、Yes)、S209の処理によって対象の管理領域4にかかる学習値生成処理が終了され、後の任意のタイミングでS210の処理が実行されてもよい。
I_tmpがI_lastを超えた場合(S205、Yes)、即ちエラー訂正が成功するシフトパターンがない場合、CPU203は、所定の処理を実行し(S211)、対象の管理領域4にかかる学習値生成処理が終了する。S211では、任意の処理が実行され得る。例えば、コントローラ200がECC回路206よりもエラー訂正の強度が強いエラー訂正機能を有している場合、そのエラー訂正機能を使用してエラー訂正を実行してもよい。また、コントローラ200がそのようなエラー訂正機能を有していない場合、ホスト機器300に対して対象の管理領域4に格納されているデータが読み出し不能になった旨を通知してもよい。対象の管理領域4に格納されているデータが読み出し不能になった旨を通知するタイミングは、後にそのデータがホスト機器300からリード要求された際であってもよい。また、S211では、S210の処理が実行されてもよい。
図15は、第1の実施形態のホストリードの手順を示すフローチャートである。
メモリシステム1がホスト機器300からリード要求を受信すると(S301)、CPU203は、リード対象のページを含む管理領域4を特定する(S302)。本図の説明において、リード対象のページを含む管理領域4を、対象の管理領域4と表記する。リード要求は、例えば、リード対象のデータを示すアドレス情報を含む。CPU203は、例えば、リード要求に含まれたアドレス情報に基づいて所定の方法でリード対象のページを特定し、当該リード対象のページを含む管理領域4を特定する。
続いて、CPU203は、学習値テーブル221から対象の管理領域4にかかる学習値I_learnedを取得する(S303)。そして、CPU203は、シフトパターンI_learned、即ちインデックスの値が「I_learned」のシフトパターン、を適用して、リード対象のページに対するリード処理を実行する(S304)。S304では、CPU203は、リード対象のページを含むメモリチップ101に対し、シフトパターンI_learnedを指示し、リード処理を命令する。
S304の後、対応するメモリチップ101では、アクセス回路110は、指示されたシフトパターンを用いてリード命令を実行し、リードデータをラッチ回路に格納する。コントローラ200では、NANDインターフェイス回路205がラッチ回路からリードデータを取得し、ECC回路206は、取得されたリードデータに対しエラーの検出および訂正を実行する。エラー訂正の成否は、CPU203に通知される。
CPU203は、ECC回路206によるエラー訂正が失敗したか否かを判定する(S305)。エラー訂正が成功した場合(S305、No)、CPU203は、リードデータをホスト機器300に送信する(S306)。
エラー訂正が失敗した場合(S305、Yes)、CPU203は、以降の処理において、リトライリードを試みる。
具体的には、CPU203は、まず、変数I_tmpにI_learnedを代入する(S307)。そして、CPU203は、I_tmpを1だけインクリメントし(S308)、I_tmpがI_lastを超えたか否かを判定する(S309)。
I_tmpがI_lastを超えていない場合(S309、No)、CPU203は、シフトパターンI_tmpを適用して、リード対象のページに対するリード処理を再び実行する(S310)。シフトパターンの適用およびリード処理は、S304と同様の手順で実行される。
S310の処理によって、コントローラ200は、リードデータを取得する。ECC回路206は、取得されたリードデータに対しエラーの検出および訂正を実行する。CPU203は、ECC回路206によるエラー訂正が失敗したか否かを判定する(S311)。エラー訂正が失敗した場合(S311、Yes)、CPU203は、S308の処理を再び実行する。
エラー訂正が成功した場合(S311、No)、CPU203は、リードデータをホスト機器300に送信する(S312)。さらに、CPU203は、対象の管理領域4にかかる学習値を、I_tmp−1で更新する(S313)。そして、CPU203は、S314、S315においてS209、S210と同様の処理を実行し、ホストリードの動作が終了する。
I_tmpがI_lastを超えた場合(S309、Yes)、CPU203は、S211と同様に所定の処理を実行し(S316)、ホストリードの動作が終了する。なお、S211で実行される処理とS316で実行される処理とは異なっていてもよい。
以上述べたように、第1の実施形態によれば、コントローラ200は、パトロールリードにおいてリード処理を実行する。最初のリード処理においてエラー訂正が失敗した場合(S203、Yes)、コントローラ200は、最初のリード処理を含む複数のリード処理を実行する。複数のリード処理では、S202からS205、Noまでの処理によって構成されるループ処理に示されるように、それぞれ判定電圧の候補値である複数のシフトパターンのうちの一が、しきい値電圧の変化の進行に対応した順番で選択され、適用される。そして、コントローラ200は、複数のリード処理のうちの最初にエラー訂正が成功したリード処理において使用された際のシフトパターンより所定数だけ若い順位が設定されたシフトパターンを学習し、ホストリードでは、学習されたシフトパターンを適用してリード処理を実行する(S208、S303、S304)。
つまり、パトロールリードにおいてエラー訂正が成功した際のシフトパターン(第1のシフトパターンと表記する)よりもしきい値電圧の変化の進行が小さい場合を想定したシフトパターン(第2のシフトパターンと表記する)がホストリードにおいて適用される。
よって、図8を用いて説明したように、管理領域4全体において、エラー訂正が成功するまでに実行されるリード処理の回数を低減することが可能である。その結果、リードレイテンシの悪化が低減される。
または、コントローラ200は、複数のリード処理のうちの最初にエラー訂正が成功したリード処理において使用された際のシフトパターンを学習し、ホストリードでは、学習されたシフトパターンよりも所定数だけ若い順位が設定されたシフトパターンを適用するよう、構成されてもよい。
なお、コントローラ200は、ホストリードにおいて、最初に、第2のシフトパターンを適用してリード処理を実行する(S303、S304)。そのリード処理においてエラー訂正が失敗した場合(S305、Yes)、コントローラ200は、第2のシフトパターンよりもインデックスの値が大きいシフトパターン、即ち第2のシフトパターンよりも進んだ(老いた)順位が設定されたシフトパターンを適用してリード処理(リトライリード)を実行する(S308〜S310)。
ホストリードにおいて、第1のシフトパターンよりも若い順位が設定された第2のシフトパターンから順番にシフトパターンが順次適用されて1以上のリード処理が実行されるので、エラー訂正の失敗なくリード可能なシフトパターンを効率よく探索することができる。
なお、CPU203は、管理領域4のうちから1つの代表ページをパトロールリードの対象とし、得られた学習値を管理領域4全体に適用する。
よって、管理領域4全体において、エラー訂正が成功するまでに実行されるリード処理の回数を低減することが可能である。また、パトロールリードにおいては管理領域4全体ではなく代表ページがリードされるので、パトロールリードに要する負荷を低く抑えることが可能である。
なお、1つの管理領域4に設定される代表ページの数は1に限定されない。2以上の代表ページが設定され、パトロールリードでは、それぞれの代表ページにするリード処理の結果に基づいてシフトパターンが学習されてもよい。
なお、学習値生成処理ではシフトインデックスが0のシフトパターンから順番に使用されるとして説明した。最初に使用されるシフトパターンはこれに限定されない。すでに学習値が記録されている場合には、その学習値が示すシフトインデックスの近辺から順番に各シフトパターンが使用されてもよい。
また、パトロールリードにおいて各シフトパターンがシフトインデックスの順番で適用されるとして説明した。パトロールリードにおける各シフトパターンの適用の順番はこれに限定されない。各シフトパターンがシフトインデックスにおいて降順に適用されてもよい。エラー訂正が成功した際のシフトパターンを取得することができる限り、各シフトパターンの適用の順番などは種々に変更することができる。
(第2の実施形態)
第2の実施形態では、コントローラ200は、学習値生成処理において、エラー訂正が成功した際のシフトパターン(第1のシフトパターンと表記する)を求める。そして、コントローラ200は、ホストリードにおいては、まず、第1のシフトパターンを適用してリード処理を実行する。当該リード処理においてエラー訂正が失敗した場合、コントローラ200は、第1のシフトパターンよりも若い順位が設定されたシフトパターン(第2のシフトパターンと表記する)を適用してリトライリードを実行する。
第2の実施形態では、コントローラ200は、学習値生成処理において、エラー訂正が成功した際のシフトパターン(第1のシフトパターンと表記する)を求める。そして、コントローラ200は、ホストリードにおいては、まず、第1のシフトパターンを適用してリード処理を実行する。当該リード処理においてエラー訂正が失敗した場合、コントローラ200は、第1のシフトパターンよりも若い順位が設定されたシフトパターン(第2のシフトパターンと表記する)を適用してリトライリードを実行する。
第2の実施形態の説明では、第1のシフトパターンと第2のシフトパターンとの順位の差は1とする。第1のシフトパターンと第2のシフトパターンとの順位の差は2以上であってもよい。
第2の実施形態のパトロールリードの概略は、図13が示す第1の実施形態の動作と同様であるので、説明を省略する。
図16は、第2の実施形態の学習値生成処理の手順を説明するフローチャートである。本図の説明において、学習値生成処理の対象の管理領域4を、対象の管理領域4と表記する。
まず、S401〜S405では、S201〜S205と同様の処理が実行される。つまり、S401〜S405では、CPU203は、変数I_tmpをゼロから順番にインクリメントしながらシフトパターンI_tmpを適用した1回以上のリード処理を実行する。
CPU203は、S401〜S405において1回以上のリード処理を実行し、最初にエラー訂正が成功した場合(S403、No)、CPU203は、最初にエラー訂正が成功した際のI_tmpを対象の管理領域4にかかる学習値I_learnedとして学習値テーブル221に記録する(S406)。
S406に続いて、CPU203は、S407、S408において、S209、S210と同様の処理を実行し、学習値生成処理が終了する。
I_tmpがI_lastを超えた場合(S405、Yes)、即ちエラー訂正の失敗なくリード可能なシフトパターンがない場合、CPU203は、S211と同様の処理をS409において実行し、学習値生成処理が終了する。
図17は、第2の実施形態のホストリードの手順を示すフローチャートである。本図の説明において、リード対象のページを含む管理領域4を、対象の管理領域4と表記する。
S501〜S506では、S301〜S306と同様の処理が実行される。シフトパターンI_learnedを適用した最初のリード処理でエラー訂正が失敗した場合(S505、Yes)、CPU203は、以降の処理においてリトライリードを試みる。
具体的には、CPU203はまず、I_learnedがゼロと一致するか否かを判定する(S507)。I_learnedがゼロと一致しない場合(S507、No)、CPU203は、変数I_tmpにI_learned−1を代入する(S508)。そして、CPU203は、シフトパターンI_tmpを適用して、リード対象のページに対するリード処理を再び実行する(S509)。
S509の処理によって、コントローラ200は、リードデータを取得する。ECC回路206は、取得されたリードデータに対しエラーの検出および訂正を実行する。CPU203は、ECC回路206によるエラー訂正が失敗したか否かを判定する(S510)。エラー訂正が成功した場合(S510、No)、CPU203は、リードデータをホスト機器300に送信する(S511)。
エラー訂正が失敗した場合(S510、Yes)、またはI_learnedがゼロと一致する場合(S507、Yes)、CPU203は、変数I_tmpにI_learned+1を代入する(S512)。そして、CPU203は、シフトパターンI_tmpを適用して、リード対象のページに対するリード処理を実行する(S513)。
S513の処理によって、コントローラ200は、リードデータを取得する。ECC回路206は、取得されたリードデータに対しエラーの検出および訂正を実行する。CPU203は、ECC回路206によるエラー訂正が失敗したか否かを判定する(S514)。エラー訂正が成功した場合(S514、No)、CPU203は、リードデータをホスト機器300に送信する(S515)。
エラー訂正が失敗した場合(S514、Yes)、CPU203は、I_tmpを1だけインクリメントし(S516)、I_tmpがI_lastを超えたか否かを判定する(S517)。I_tmpがI_lastを超えていない場合(S517、No)、CPU203は、S513の処理を再び実行する。
S511、またはS515においてリードデータをホスト機器300に送信した後、CPU203は、対象の管理領域4にかかる学習値を、I_tmpで更新する(S518)。そして、CPU203は、S519、S520においてS209、S210と同様の処理を実行し、ホストリードの動作が終了する。
I_tmpがI_lastを超えた場合(S517、Yes)、CPU203は、S211と同様に所定の処理を実行し(S521)、ホストリードの動作が終了する。
このように、第2の実施形態によれば、コントローラ200は、パトロールリードにおいて、複数のリード処理のうちの最初にエラー訂正が成功したリード処理において使用された際のシフトパターンを取得する(S406)。そして、コントローラ200は、ホストリードにおいて、最初に、そのシフトパターンを適用してリード処理を実行する(S503、S504)。そして、そのリード処理においてエラー訂正が失敗した場合(S505、Yes)、コントローラ200は、シフトパターンより所定数だけ若い順位が設定されたシフトパターンを適用してリード処理を実行する(S508、S509)。
つまり、第2の実施形態では、ホストリードにおいて、最初に第1のシフトパターンが適用されてリード処理が実行され、その後、第1のシフトパターンよりも若い順位が設定された第2のシフトパターンを適用してリトライリードが実行される。よって、第1の実施形態と第2の実施形態とでは、第1のシフトパターンと第2のシフトパターンとの適用の順序が逆になっている点のみが異なっている。よって、第2の実施形態によって、エラー訂正の失敗なくリード可能なシフトパターンを効率よく探索することができ、ひいてはリードレイテンシの悪化が低減される。
なお、学習値生成処理ではシフトインデックスが0のシフトパターンから順番に使用されるとして説明した。最初に使用されるシフトパターンはこれに限定されない。すでに学習値が記録されている場合には、その学習値が示すシフトインデックスの近辺から順番に各シフトパターンが使用されてもよい。
(第3の実施形態)
第3の実施形態では、管理領域4に含まれる複数のページに対して全てのシフトパターンを適用した複数のリード処理が実行され、実行された複数のリード処理の結果に対して統計処理が実行されることによって学習値が演算される。つまり、第3の実施形態では、複数のページに対するリード処理の結果に基づいて、管理領域4内のできるだけ多くのページがエラー訂正の失敗なくリード可能な判定電圧が演算される。
第3の実施形態では、管理領域4に含まれる複数のページに対して全てのシフトパターンを適用した複数のリード処理が実行され、実行された複数のリード処理の結果に対して統計処理が実行されることによって学習値が演算される。つまり、第3の実施形態では、複数のページに対するリード処理の結果に基づいて、管理領域4内のできるだけ多くのページがエラー訂正の失敗なくリード可能な判定電圧が演算される。
第3の実施形態のパトロールリードの概略は、図13が示す第1の実施形態の動作と同様であるので、説明を省略する。
図18は、第3の実施形態の学習値生成処理の手順を説明するフローチャートである。本図の説明において、学習値生成処理の対象の管理領域4を、対象の管理領域4と表記する。また、本図の例では、対象の管理領域4を構成する全てのページがリードされることとして説明する。
まず、CPU203は、対象の管理領域4から1つのページを対象ページとして選択する(S601)。そして、CPU203は、変数I_tmpをゼロで初期化する(S602)。そして、CPU203は、シフトパターンI_tmpを適用して対象ページに対するリード処理を実行する(S603)。
S603の処理によって、コントローラ200は、リードデータを取得する。ECC回路206は、取得されたリードデータに対しエラーの検出および訂正を実行する。CPU203は、ECC回路206によるエラー訂正の結果を記録する(S604)。なお、エラー訂正の結果とは、エラー訂正の成否である。CPU203は、エラー訂正の結果を、対象ページおよびシフトパターンのインデックスの値と対応付けて例えばRAM202に記録する。
続いて、CPU203は、I_tmpを1だけインクリメントし(S605)、I_tmpがI_lastを超えたか否かを判定する(S606)。I_tmpがI_lastを超えていない場合(S606、No)、CPU203は、S603の処理を再び実行する。
I_tmpがI_lastを超えた場合(S606、Yes)、CPU203は、対象の管理領域4から全てのページが対象ページとして選択されたか否かを判定する(S607)。未選択のページが残っている場合(S607、No)、CPU203は、未選択のページのうちから1つのページを対象ページとして選択し(S608)、S602の処理を再び実行する。
対象の管理領域4から全てのページが対象ページとして選択された場合(S607、Yes)、CPU203は、対象の管理領域4の全てのページに対して実行されたエラー訂正の結果に対して所定の統計処理を実行し、代表値I_representを決定する(S609)。
S609では、例えば、CPU203は、対象の管理領域4の全てのページに対して実行されたエラー訂正の結果から、シフトパターンのインデックスの値の最頻値を演算する。得られた最頻値は、対象の管理領域4の全てのページのうちのエラー訂正の失敗なくリード可能なページの数が最も多くなるシフトパターンを示す。
なお、統計処理の例はこれに限定されない。CPU203は、最頻値に代えてしきい値電圧の平均値を演算してもよい。また、CPU203は、訂正に成功したページの数やエラービット数に関する重み付けを行ってしきい値電圧の平均値を演算してもよい。なお、学習値テーブル221は、インデックスではなく電圧値(シフト量)が記録されるように構成され得る。電圧値(シフト量)およびインデックスの両方が学習値テーブル221に記録されてもよい。
S609の後、CPU203は、代表値I_representを、対象の管理領域4にかかる学習値I_learnedとして学習値テーブル221に記録する(S610)。
S610に続いて、CPU203は、S611、S612において、S209、S210と同様の処理を実行し、学習値生成処理が終了する。
図19は、第3の実施形態のホストリードの手順を示すフローチャートである。本図の説明において、リード対象のページを含む管理領域4を、対象の管理領域4と表記する。
S701〜S712では、S301〜S312と同様の処理が実行される。即ち、シフトパターンI_learnedを適用した最初のリード処理が実行され(S704)、そのリード処理によって得られたリードデータにかかるエラー訂正が失敗すると(S705、Yes)、インデックス順に判定電圧を変化させた1回以上のリトライリードが実行される(S708〜S711)。
リトライリードにおいて得られたリードデータにかかるエラー訂正が成功すると(S711、No)、CPU203は、リードデータをホスト機器300に送信する(S712)。そして、CPU203は、所定の基準が満たされたか否かを判定する(S713)。S713は、対象の管理領域4に格納されたデータがしきい値電圧の変化によって喪失することを防止するための処理を実行するか否かを判定する処理であり、例えばS209と同じ処理である。所定の基準が満たされた場合(S713、Yes)、CPU203は、例えば、リフレッシュ処理、コードレートの引き下げ、またはその両方を実行する(S714)。
所定の基準が満たされていない場合(S713、No)、CPU203は、対象の管理領域4に対して学習値生成処理を実行する(S715)。
S714またはS715の処理の後、ホストリードの動作が終了する。なお、S713の処理の後、ホストリードの動作が終了し、その後の任意のタイミングにおいてS714またはS715の処理が実行されてもよい。
リトライリードにおいて、I_tmpがI_lastを超えた場合(S709、Yes)、CPU203は、S211と同様に所定の処理を実行し(S716)、ホストリードの動作が終了する。
このように、第3の実施形態によれば、コントローラ200は、パトロールリードにおいて、全てのシフトパターンのそれぞれ、即ちそれぞれ異なる複数の電圧値、を順次適用して複数のリード処理を実行し(S602〜S608)、当該複数のリード処理の結果に基づいて統計処理を実行することによって学習値を決定する(S609)。そして、ホストリードにおいては、コントローラ200は、決定された学習値を適用してリード処理を実行する(S704)。
この構成により、コントローラ200は、判定電圧として適用された複数の電圧値から最も適した電圧値を選択することができるので、ホストリードにおいてエラーの発生を低減したりリトライリードの実行回数を低減したりすることが可能である。よって、リードレイテンシの悪化を低減することが可能である。
なお、以上説明した例においては、パトロールリードにおいて、管理領域4内の全てのページが対象ページとして選択された。パトロールリードにおいて必ずしも管理領域4内の全てのページが対象ページとして選択されなくてもよい。パトロールリードにおいて、管理領域4内の一部のページ(1以上のページ)が対象ページとして選択されてもよい。対象ページとして選択されるページの数が少ない場合、パトロールリードにかかる負荷が低減される。対象ページとして選択されるページの数が多い場合、統計処理によって得られる学習値がより適した値となる。より適した値とは、エラー訂正の失敗なくリード可能なページの数が多いことをいう。
また、コントローラ200は、パトロールリードにおいて、複数のリード処理のそれぞれにおいてエラー訂正を実行し、エラー訂正の成否を記録する(S604)。そして、コントローラ200は、複数のリード処理のそれぞれにかかるエラー訂正の成否に対して統計処理を実行する。
また、パトロールリードにおいては、コントローラ200は、エラー訂正が成功した際のシフトパターンの値を学習値として記憶する。インデックスの値は、前述したように、しきい値電圧の変化の進行に対応する順位を示している。ホストリードにおいては、コントローラ200は、学習値を適用したリード処理においてエラー訂正が失敗した場合(S705、Yes)、学習値の順位に後続する順位が設定されたシフトパターンを適用してリトライリードを実行する(S708、S710)。
つまり、ホストリードにおいては、学習値を適用したリード処理が実行され、当該リード処理においてエラー訂正が失敗した場合、学習値よりもしきい値電圧の変化がより進行した場合を想定したシフトパターンがリトライリードにおいて適用される。よって、エラー訂正の失敗なくリード可能なシフトパターンを効率的に探索することが可能である。
なお、学習値生成処理ではシフトインデックスが0のシフトパターンから順番に使用されるとして説明した。最初に使用されるシフトパターンはこれに限定されない。すでに学習値が記録されている場合には、その学習値が示すシフトインデックスの近辺から順番に各シフトパターンが使用されてもよい。
(第4の実施形態)
第4の実施形態では、学習値生成処理において、ディストリビューションリードが実行される。ディストリビューションリードは、しきい値電圧に対するメモリセルの数の分布を取得する処理である。ディストリビューションリードでは、判定電圧を変化させながら複数回のリード処理が実行される。
第4の実施形態では、学習値生成処理において、ディストリビューションリードが実行される。ディストリビューションリードは、しきい値電圧に対するメモリセルの数の分布を取得する処理である。ディストリビューションリードでは、判定電圧を変化させながら複数回のリード処理が実行される。
一例では、ディストリビューションリードでは、1種類の判定電圧が所定の刻み幅ずつ変化せしめられながら複数回のリード処理が実行される。各リード処理では、オン状態またはオフ状態のうちの所定状態のメモリセルの数が、判定電圧として使用された値毎に取得される。そして、所定状態のメモリセルの数が、判定電圧として使用された値で微分されることで、しきい値電圧に対するメモリセルの数の分布が得られる。
ディストリビューションリードの後、リードデータに含まれるエラービット数をできるだけ少なくすることが可能な判定電圧が演算される。
例えば図6の場合、“A”ステートと“B”ステートとの間においては、しきい値電圧がVbのとき、メモリセルの分布が極小となる。よって、Vbを判定電圧として使用することによって、“110”としてプログラムされたデータが“100”としてリードされたり、“100”としてプログラムされたデータが“110”としてリードされたりするエラーの発生を低減することができる。
第4の実施形態の学習値生成処理では、一例では、隣接する2つのステートの間において、しきい値電圧に対するメモリセルの分布が極小となる電圧値が演算され、演算された電圧値が学習される。隣接する2つのステートの間において、しきい値電圧に対するメモリセルの分布が極小となる電圧値を、最適判定電圧と表記する。なお、学習される電圧値はこれに限定されない。
続いて、第4の実施形態のメモリシステム1の動作を説明する。第4の実施形態のパトロールリードの概略は、図13が示す第1の実施形態の動作と同様であるので、説明を省略する。
図20は、第4の実施形態の学習値生成処理の手順を説明するフローチャートである。本図の説明において、学習値生成処理の対象の管理領域4を、対象の管理領域4と表記する。また、本図の例では、対象の管理領域4を構成する全てのページがディストリビューションリードの対象とされることとして説明する。
まず、CPU203は、対象の管理領域4から1つのページを対象ページとして選択する(S801)。そして、CPU203は、対象ページに対してディストリビューションリードを実行し(S802)、ディストリビューションリードの結果に基づいて最適シフト量V_optを取得する(S803)。
例えば、S802では、CPU203は、メモリチップ101に対し、判定電圧を所定の刻み幅ずつ変化させながらリード処理を複数回、命令する。そして、S803では、CPU203は、リード処理毎のリードデータに基づいて、しきい値電圧に対するメモリセルの分布を生成し、生成した分布に基づいて最適シフト量V_optを演算する。なお、最適シフト量V_optは、最適判定電圧の、判定電圧の基準値からのシフト量である。S802およびS803では、判定電圧の種類毎に最適シフト量V_optが取得される。
なお、アクセス回路110が、ディストリビューションリードを実行可能に構成されてもよい。例えば、CPU203は、メモリチップ101に対し、ディストリビューションリードを命令する。アクセス回路110は、ディストリビューションリードの命令を受信すると、ディストリビューションリードを実行し、ディストリビューションリードの結果に基づいて、判定電圧の種類毎の最適シフト量V_optを演算する。そして、アクセス回路110は、判定電圧の種類毎の最適シフト量V_optをコントローラ200に出力する。
S803の後、CPU203は、判定電圧の種類毎の最適シフト量V_optを記録する(S804)。例えば、S804では、CPU203は、RAM202に判定電圧の種類毎の最適シフト量V_optを対象ページと対応付けて記録する。
S804の後、CPU203は、対象の管理領域4から全てのページが対象ページとして選択されたか否かを判定する(S805)。未選択のページが残っている場合(S805、No)、CPU203は、未選択のページのうちから1つのページを対象ページとして選択し(S806)、S802の処理を再び実行する。
対象の管理領域4から全てのページが対象ページとして選択された場合(S805、Yes)、CPU203は、全てのページから得られた最適シフト量V_optに対して統計処理を実行することによって代表シフト量V_representを演算する(S807)。S807では、例えば、判定電圧の種類毎に全てのページの最適シフト量V_optの平均値が、代表シフト量V_representとして演算される。なお、統計処理の例はこれに限定されない。
S807の後、CPU203は、代表シフト量V_representを、対象の管理領域4にかかる学習値V_learnedとして学習値テーブル221に記録する(S808)。ここでは、学習値テーブル221には、インデックスではなく電圧値(シフト量)が記録される。電圧値(シフト量)に代えて、その電圧値(シフト量)に最も近いシフト量が規定されたシフトパターンのインデックスが学習値テーブル221に記録されてもよい。電圧値(シフト量)に最も近いシフト量が規定されたシフトパターンは、任意の方法で特定され得る。例えば、電圧値(シフト量)に最も近いシフト量が規定されたシフトパターンは、最小二乗誤差が最も小さいシフトパターンである。電圧値(シフト量)に最も近いシフト量が規定されたシフトパターンは、ミニマックス法によって特定されてもよい。電圧値(シフト量)およびインデックスの両方が学習値テーブル221に記録されてもよい。
S808に続いて、CPU203は、S809、S810において、S209、S210と同様の処理を実行し、学習値生成処理が終了する。
図21は、第4の実施形態のホストリードの手順を示すフローチャートである。本図の説明において、リード対象のページを含む管理領域4を、対象の管理領域4と表記する。
メモリシステム1がホスト機器300からリード要求を受信すると(S901)、CPU203は、受信したリード要求に基づいて対象の管理領域4を特定する(S902)。そして、CPU203は、学習値テーブル221から対象の管理領域4にかかる学習値V_learnedを取得する(S903)。そして、CPU203は、学習値V_learnedを適用して、リード対象のページに対するリード処理を実行する(S904)。S904では、CPU203は、学習値V_learnedを基準値からのシフト量としてメモリチップ101に指示する。
S904の処理によって、コントローラ200は、リードデータを取得する。ECC回路206は、取得されたリードデータに対しエラーの検出および訂正を実行する。CPU203は、ECC回路206によるエラー訂正が失敗したか否かを判定する(S905)。エラー訂正が成功した場合(S905、No)、CPU203は、リードデータをホスト機器300に送信する(S906)。
エラー訂正が失敗した場合(S905、Yes)、CPU203は、シフトインデックステーブル220に記録された複数のシフトパターンのうちから、学習値V_learnedに最も近いシフトパターンを特定する(S907)。学習値V_learnedに最も近いシフトパターンは、最小二乗法やミニマックス法など、任意の方法で特定され得る。特定されたシフトパターンのインデックスを、I_closestと表記する。
CPU203は、変数I_tmpにI_closestを代入し(S908)、変数I_tmpを1だけインクリメントする(S909)。そして、CPU203は、I_tmpがI_lastを超えたか否かを判定する(S910)。I_tmpがI_lastを超えていない場合(S910、No)、CPU203は、シフトパターンI_tmpを適用して、リード対象のページに対するリード処理を再び実行する(S911)。
S911の処理によって、コントローラ200は、リードデータを取得する。ECC回路206は、取得されたリードデータに対しエラーの検出および訂正を実行する。CPU203は、ECC回路206によるエラー訂正が失敗したか否かを判定する(S912)。エラー訂正が失敗した場合(S912、Yes)、CPU203は、S909の処理を再び実行する。
エラー訂正が成功した場合(S912、No)、CPU203は、リードデータをホスト機器300に送信する(S913)。そして、S914〜S916において、S713〜S715と同様の処理が実行される。
I_tmpがI_lastを超えた場合(S910、Yes)、CPU203は、S211と同様に所定の処理を実行し(S917)、ホストリードの動作が終了する。
なお、以上の説明においては、管理領域4内の全てのページが対象ページとして選択された。パトロールリードにおいて必ずしも管理領域4内の全てのページが対象ページとして選択されなくてもよい。パトロールリードにおいて、管理領域4内の一部のページ(1以上のページ)が対象ページとして選択されてもよい。対象ページとして選択されるページの数が少ない場合、パトロールリードにかかる負荷が低減される。対象ページとして選択されるページの数が多い場合、統計処理によって得られる学習値がより適した値となる。より適した値とは、エラー訂正の失敗なくリード可能なページの数が多いことをいう。
また、学習値テーブル221には、インデックス、電圧値(シフト量)、またはその両方が記録され得る。
このように、第4の実施形態においては、コントローラ200は、パトロールリードにおいて、1以上のページのそれぞれに対してディストリビューションリードを実行し、1以上のページのそれぞれにかかる最適シフト量V_optを取得する(S802〜S806)。そして、コントローラ200は、1以上のページのそれぞれにかかる最適シフト量V_optに対して統計処理を実行することによって(S807)、代表値V_representを学習値として演算する。そして、コントローラ200は、ホストリードにおいては、管理領域4に対してその学習値を共通に適用する。
よって、学習値がディストリビューションリードによって取得されるので、ホストリードにおいてエラー訂正が失敗する可能性を低減することが可能である。よって、リードレイテンシの悪化が低減される。
(第5の実施形態)
第4の実施形態では、S807において、判定電圧の種類毎に全てのページの最適シフト量V_optの平均値が、代表シフト量V_representとして演算される例を説明した。統計処理の方法はこれに限定されない。
第4の実施形態では、S807において、判定電圧の種類毎に全てのページの最適シフト量V_optの平均値が、代表シフト量V_representとして演算される例を説明した。統計処理の方法はこれに限定されない。
第5の実施形態では、別の統計処理の方法の一例を説明する。第5の実施形態の統計処理では、エラー訂正の失敗なくリード可能な電圧値の範囲に基づいて重み付けした最適シフト量V_optの重み付け平均が演算される。第5の実施形態は、第4の実施形態に適用可能である。
図22は、第5の実施形態の統計処理の方法を説明するフローチャートである。
まず、CPU203は、変数iをゼロで初期化して(S1001)、最適シフト量が取得された複数のページのうちの1つを対象ページとして選択する(S1002)。そして、CPU203は、対象ページにかかる最適シフト量(V_opt_iと表記する)を取得する(S1003)。例えばCPU203は、S804によって記録された最適シフト量を取得する。
続いて、CPU203は、判定電圧を最適シフト量V_opt_iを基準として正側および負側に変化させながら対象ページに対して複数回のリード処理を実行することによって、エラー訂正が失敗しないシフト量の範囲を取得する(S1004)。S1004で取得される範囲の最小値をV_min_i、当該範囲の最大値をV_max_iと表記する。
CPU203は、取得された範囲(V_min_i、V_max_i)を記録する(S1005)。例えば、CPU203は、例えばRAM202に範囲(V_min_i、V_max_i)を対象ページと対応付けて記録する。
続いて、CPU203は、最適シフト量が取得された全てのページが対象ページとして選択されたか否かを判定する(S1006)。未選択のページが残っている場合(S1006、No)、CPU203は、iを1だけインクリメントする(S1007)。そして、CPU203は、未選択のページのうちから1つのページを対象ページとして選択し(S1008)、S1003の処理を再び実行する。
最適シフト量が取得された全てのページが選択された場合(S1006、Yes)、CPU203は、範囲(V_min_i、V_max_i)の幅の逆数で重みづけした最適シフト量V_opt_iの平均値を、代表値V_representとして演算する(S1009)。即ち、S1009では、CPU203は、下記の数式(1)を用いて代表値V_representを演算する。
なお、S1009の処理は、判定電圧の種類ごとに個別に実行される。
S1009によって、第5の実施形態の統計処理が終了する。
このように、第5の実施形態では、コントローラ200は、エラー訂正の失敗なくリード可能な電圧値の範囲に基づいて重み付けした最適シフト量V_optの重み付け平均を統計処理において演算する。エラー訂正の失敗なくリード可能な電圧値の範囲が狭いページほど重み付け係数を大きくすることで、管理領域4内のできるだけ多くのページがエラー訂正の失敗なくリード可能な電圧値を学習することが可能となる。
(第6の実施形態)
第6の実施形態では、統計処理のさらに別の例を説明する。第6の実施形態では、統計処理において、リード処理で検出されるエラービット数を用いて、最適シフト量V_opt_iの重み付け平均を演算する。第6の実施形態の統計処理は、第4の実施形態に適用できる。
第6の実施形態では、統計処理のさらに別の例を説明する。第6の実施形態では、統計処理において、リード処理で検出されるエラービット数を用いて、最適シフト量V_opt_iの重み付け平均を演算する。第6の実施形態の統計処理は、第4の実施形態に適用できる。
図23は、第6の実施形態の統計処理の方法を説明するフローチャートである。
まず、CPU203は、変数iをゼロで初期化して(S1101)、最適シフト量が取得された複数のページのうちの1つを対象ページとして選択する(S1102)。そして、CPU203は、対象ページにかかる最適シフト量(V_opt_iと表記する)を取得する(S1103)。例えばCPU203は、S804によって記録された最適シフト量を取得する。
そして、CPU203は、最適シフト量V_opt_iを適用して対象ページに対するリード処理を実行する(S1104)。S1104によって、コントローラ200は、リードデータを取得する。ECC回路206は、取得されたリードデータに対しエラーの検出を実行する。CPU203は、検出されたエラービット数(F_iと表記する)をECC回路206から取得し、取得したエラービット数F_iを記録する(S1105)。例えば、CPU203は、RAM202にエラービット数F_iを対象ページと対応付けて記録する。
続いて、CPU203は、最適シフト量が取得された全てのページが対象ページとして選択されたか否かを判定する(S1106)。未選択のページが残っている場合(S1106、No)、CPU203は、iを1だけインクリメントする(S1107)。そして、CPU203は、未選択のページのうちから1つのページを対象ページとして選択し(S1108)、S1103の処理を再び実行する。
最適シフト量が取得された全てのページが選択された場合(S1106、Yes)、CPU203は、エラービット数F_iで重みづけした最適シフト量V_opt_iの平均値を、代表値V_representとして演算する(S1109)。即ち、S1109では、CPU203は、下記の数式(2)を用いて代表値V_representを演算する。
なお、S1109の処理は、判定電圧の種類ごとに個別に実行される。
S1109によって、第6の実施形態の統計処理が終了する。
最適シフト量V_optを適用した際のエラービット数Fが大きいことは、エラー訂正の失敗なくリード可能な電圧値の範囲が狭いことを意味する。第6の実施形態によれば、コントローラ200は、統計処理において、リード処理で検出されるエラービット数に基づく重み付け平均を演算する。よって、第5の実施形態と同様に、管理領域4内のできるだけ多くのページがエラー訂正の失敗なくリード可能な電圧値を学習することが可能となる。
(第7の実施形態)
第1の実施形態では、管理領域4の設定方法の一例として、グループ2が16個のサブグループ3に均等に分割され、各サブグループ3に対して種類が異なるページによって構成される複数の管理領域4が設定される例を説明した。管理領域4の設定方法はこれに限定されない。
第1の実施形態では、管理領域4の設定方法の一例として、グループ2が16個のサブグループ3に均等に分割され、各サブグループ3に対して種類が異なるページによって構成される複数の管理領域4が設定される例を説明した。管理領域4の設定方法はこれに限定されない。
例えば、グループ2から生成されるサブグループ3の数は16に限定されない。例えば、グループ2は、2個、4個、8個、または64個のサブグループ3に分割され得る。
別の例では、グループ2は、複数のサブグループ3に不均等に分割され得る。図24は、グループ2を分割する別の方法を示す図である。本図に示されるように、グループ2は、ワード線の並び方向に、1つのワード線からなる4つのサブグループ3aと、15本のワード線からなる4つのサブグループ3bとに分割されている。そして、NANDストリング114の両端のそれぞれに、2つのサブグループ3aが位置している。即ち、グループ2は、ワード線の並び方向に不均等に複数のサブグループ3に分割されている。
なお、図3、4に示される構造を有するNAND型フラッシュメモリでは、NANDストリング114の端部近くに位置するメモリセルのしきい値電圧の変化特性は、NANDストリング114の中央部に位置するメモリセルと大きく異なる場合がある。よって、NANDストリング114の中央部に位置するメモリセルとNANDストリング114の端部近くに位置するメモリセルとが同一の管理領域4に含まれる場合、管理領域4内の全てのデータを1つの学習値でエラー訂正の失敗なくリードすることが困難になる。これに対し、図24の例では、NANDストリング114の両端部近くと中央部とで分割の粒度が異なっている。具体的には、NANDストリング114の両端部近くのほうが、NANDストリング114の中央部よりも分割の粒度が細かい。このように、NANDストリング114の端部近くでは細かい粒度でサブグループ3が設定されることによって、特異な特性を有するメモリセルを独立した管理領域4に含めて管理することができるので、グループ2全体としてエラー訂正の失敗の可能性を低減することが可能となる。
さらに別の例では、各ブロックBLKが1つのサブグループ3として設定されてもよい。
なお、以上に述べた各例では、各サブグループ3ではページの種類毎に異なる管理領域4が設けられた。各サブグループ3の複数種類のページによって構成される記憶領域によって1つの管理領域4が設定されてもよい。即ち、1つのサブグループ3内ではページの種類に関係なく同一の学習値(例えば学習されたシフトパターン)が適用されてもよい。
また、複数のティア(Tier)がD3方向に積層される場合がある。各ティアは、図4に示される構造を有している。メモリセルアレイ111が、複数のティアが積層された構造を有する場合、ティア毎に学習値テーブル221が設けられてもよいし、複数のティアで1つの学習値テーブル221が共通に使用されてもよい。例えば、複数のティア間でしきい値電圧の変化特性が著しく異なる場合、ティア毎に学習値テーブル221が設けられる。複数のティア間でしきい値電圧の変化特性が類似する場合、複数のティアに対し同一の学習値テーブル221が使用される。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1 メモリシステム、100 NAND型フラッシュメモリ、101 メモリチップ、110 アクセス回路、111 メモリセルアレイ、200 コントローラ、202 RAM、203 CPU、206 ECC回路、220 シフトインデックステーブル、221 学習値テーブル、300 ホスト機器。
Claims (17)
- ホストに接続可能なメモリシステムであって、
しきい値電圧が制御されるメモリセルトランジスタを備える不揮発性の第1メモリと、
前記しきい値電圧と判定電圧との比較に基づいて前記しきい値電圧に対応するデータを前記第1メモリから取得するリード処理を実行するコントローラと、
複数の候補値が記録された判定電圧情報が格納され、前記複数の候補値のそれぞれは前記しきい値電圧の変化の進行に対応した順位が設定された、第2メモリと、
を備え、
前記コントローラは、
複数の第1のリード処理を実行し、前記複数の第1のリード処理は、前記複数の候補値のうちのそれぞれ異なる候補値が前記判定電圧として適用されて実行される複数のリード処理であり、前記複数の第1のリード処理のそれぞれにおいて、取得されたデータに対してエラー訂正を実行し、前記複数の第1のリード処理のそれぞれのエラー訂正の結果に基づいて第1候補値を取得し、
前記ホストからリード要求を受信した場合、第2のリード処理を実行し、前記第2のリード処理は、前記第1候補値よりも所定数だけ若い順位が設定された第2候補値が前記判定電圧として適用されて実行されるリード処理である、
メモリシステム。 - 前記コントローラは、前記ホストから前記リード要求を受信した場合、最初に、前記第2のリード処理を実行し、前記第2のリード処理によって取得されたデータに対してエラー訂正を実行し、当該エラー訂正が失敗した場合、第3のリード処理を実行し、
前記第3のリード処理は、前記第2候補値よりも老いた順位が設定された第3候補値が前記判定電圧として適用されて実行されるリード処理である、
請求項1に記載のメモリシステム。 - 前記コントローラは、前記ホストから前記リード要求を受信した場合、最初に、第3のリード処理を実行し、前記第3のリード処理によって取得されたデータに対してエラー訂正を実行し、当該エラー訂正が失敗した場合、前記第2のリード処理を実行し、
前記第3のリード処理は、前記第1候補値が前記判定電圧として適用されて実行されるリード処理である、
請求項1に記載のメモリシステム。 - 前記第1メモリは、前記メモリセルトランジスタを含む第1の複数のメモリセルトランジスタを備え、
前記第1メモリは、複数の第1記憶領域を備え、
各第1記憶領域は、前記第1の複数のメモリセルトランジスタのうちの第2の複数のメモリセルトランジスタによって構成され、
前記コントローラは、前記複数の第1記憶領域のうちの1つに対して前記複数の第1のリード処理を実行して前記第1候補値を取得し、前記複数の第1記憶領域に対して前記第2候補値を共通に適用する、
請求項1に記載のメモリシステム。 - 前記第1メモリは、複数のNANDストリングと、前記複数のNANDストリングに交わる複数のワード線とを備え、
前記第1メモリは、それぞれ前記複数の第1記憶領域を備えた複数の第3記憶領域を備え、
前記複数の第3記憶領域は、前記複数のワード線の並び方向に配列され、
前記複数の第3記憶領域は、第1の数の第1記憶領域を備えた第4記憶領域と、前記第1の数と異なる第2の数の第1記憶領域を備えた第5記憶領域と、を含む、
請求項4に記載のメモリシステム。 - 前記第1の数は前記第2の数よりも少なく、前記第4記憶領域は、前記第5記憶領域よりも前記複数のNANDストリングの端側に位置する、
請求項5に記載のメモリシステム。 - 前記第1候補値は、前記複数の第1のリード処理のうちの前記エラー訂正が成功した際に適用された前記判定電圧である、
請求項1に記載のメモリシステム。 - 前記複数の第1のリード処理は、前記複数の候補値がそれぞれに設定された順位の順番で前記判定電圧として適用されて実行される複数のリード処理であり、
前記第1候補値は、前記複数の第1のリード処理のうちの最初に前記エラー訂正が成功した際に適用された前記判定電圧である、
請求項1に記載のメモリシステム。 - ホストに接続可能なメモリシステムであって、
しきい値電圧が制御されるメモリセルトランジスタを備える不揮発性のメモリと、
前記しきい値電圧と判定電圧との比較に基づいて前記しきい値電圧に対応するデータを前記メモリから取得するリード処理を実行するコントローラと、
を備え、
前記コントローラは、
複数の第1のリード処理を実行し、前記複数の第1のリード処理は、それぞれ異なる複数の第1電圧値が前記判定電圧として適用されて実行される複数のリード処理であり、前記複数の第1のリード処理の結果に基づいて統計処理を実行することによって第2電圧値を演算し、
前記ホストからリード要求を受信した場合、第2のリード処理を実行し、前記第2のリード処理は、前記第2電圧値が前記判定電圧として適用されて実行されるリード処理である、
メモリシステム。 - 前記メモリは、前記メモリセルトランジスタを含む第1の複数のメモリセルトランジスタを備え、
前記メモリは複数の第1記憶領域を備え、各第1記憶領域は、リード処理が実行される単位であり、
各第1記憶領域は、前記第1の複数のメモリセルトランジスタのうちの第2の複数のメモリセルトランジスタによって構成され、
前記複数の第1記憶領域は、1以上の第2記憶領域を含み、
前記コントローラは、前記1以上の第2記憶領域のそれぞれに対し、前記複数の第1のリード処理を実行し、前記1以上の第2記憶領域のそれぞれに対して実行された前記複数の第1のリード処理の結果に対して前記統計処理を実行することによって前記第2電圧値を演算し、
前記複数の第1記憶領域に対して前記第2電圧値を共通に適用する、
請求項9に記載のメモリシステム。 - 前記メモリは、複数のNANDストリングと、前記複数のNANDストリングに直交する複数のワード線とを備え、
前記メモリは、それぞれ前記複数の第1記憶領域を備えた複数の第3記憶領域を備え、
前記複数の第3記憶領域は、前記複数のワード線の並び方向に配列され、
前記複数の第3記憶領域は、第1の数の第1記憶領域を備えた第4記憶領域と、前記第1の数と異なる第2の数の第1記憶領域を備えた第5記憶領域と、を含む、
請求項10に記載のメモリシステム。 - 前記第1の数は前記第2の数よりも少なく、前記第4記憶領域は、前記第5記憶領域よりも前記複数のNANDストリングの端側に位置する、
請求項11に記載のメモリシステム。 - 前記コントローラは前記複数の第1のリード処理のそれぞれにおいて、取得されたデータに対してエラー訂正を実行し、前記複数の第1のリード処理のそれぞれにかかる当該エラー訂正が成功したか否かを示す結果に対して前記統計処理を実行することによって前記第2電圧値を演算する、
請求項9に記載のメモリシステム。 - 前記複数の第1電圧値のそれぞれには前記しきい値電圧の変化の進行に対応した順位が設定され、
前記コントローラは、前記統計処理を実行することによって前記複数の第1電圧値のうちの一を前記第2電圧値として取得し、前記第2のリード処理によって取得されたデータに対してエラー訂正を実行し、当該エラー訂正が失敗した場合、第3のリード処理を実行し、
前記第3のリード処理は、前記複数の第1電圧値のうちの前記第2電圧値の順位より変化の進行が進んだ順位が設定された第1電圧値が適用されたリード処理である、
請求項13に記載のメモリシステム。 - 前記メモリは、前記メモリセルトランジスタを含む第1の複数のメモリセルトランジスタを備え、
前記メモリは複数の第1記憶領域を備え、
各第1記憶領域は、前記第1の複数のメモリセルトランジスタのうちの第2の複数のメモリセルトランジスタによって構成され、
前記複数の第1記憶領域は、1以上の第2記憶領域を含み、
前記複数の第1のリード処理は、しきい値電圧に対するメモリセルトランジスタの数の分布を測定し、測定した結果に基づいて前記判定電圧の候補値を取得する処理であり、
前記コントローラは、前記1以上の第2記憶領域のそれぞれに対して前記複数の第1のリード処理を実行し、前記1以上の第2記憶領域のそれぞれにかかる候補値に対して前記統計処理を実行することによって前記第2電圧値を演算し、
前記複数の第1記憶領域に対して前記第2電圧値を共通に適用する、
請求項9に記載のメモリシステム。 - 前記コントローラは、前記1以上の第2記憶領域のそれぞれに対し、エラー訂正の失敗なくリード可能な範囲を取得し、前記統計処理において前記範囲に基づく重み付けを実行する、
請求項15に記載のメモリシステム。 - 前記コントローラは、前記1以上の第2記憶領域のそれぞれに対して第3のリード処理を実行し、前記第3のリード処理は対応する候補値を適用してリード処理が実行されて取得されたデータに含まれるエラービット数をカウントする処理であり、前記統計処理において前記エラービット数に基づく重み付けを実行する、
請求項15に記載のメモリシステム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018051328A JP2019164850A (ja) | 2018-03-19 | 2018-03-19 | メモリシステム |
US16/268,727 US10719396B2 (en) | 2018-03-19 | 2019-02-06 | Memory system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018051328A JP2019164850A (ja) | 2018-03-19 | 2018-03-19 | メモリシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2019164850A true JP2019164850A (ja) | 2019-09-26 |
Family
ID=67905595
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018051328A Pending JP2019164850A (ja) | 2018-03-19 | 2018-03-19 | メモリシステム |
Country Status (2)
Country | Link |
---|---|
US (1) | US10719396B2 (ja) |
JP (1) | JP2019164850A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE112020004254T5 (de) | 2019-09-10 | 2022-05-25 | Denso Corporation | Ventilvorrichtung und Fluid-Zirkulations-Kreislauf |
JP7448646B2 (ja) | 2019-10-30 | 2024-03-12 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 不揮発性ランダム・アクセス・メモリにおける補正読取り電圧オフセットの計算 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110246533B (zh) * | 2018-03-09 | 2020-11-13 | 建兴储存科技(广州)有限公司 | 固态储存装置的失败模式检测方法及错误更正方法 |
KR102531995B1 (ko) * | 2018-03-29 | 2023-05-15 | 에스케이하이닉스 주식회사 | 반도체 메모리 장치, 이를 포함하는 저장 장치 및 메모리 컨트롤러의 동작 방법 |
KR102653661B1 (ko) * | 2018-12-11 | 2024-04-03 | 에스케이하이닉스 주식회사 | 저장 장치 및 그 동작 방법 |
US11527279B2 (en) | 2020-06-22 | 2022-12-13 | Micron Technology, Inc. | Read algorithm for memory device |
JP2022144291A (ja) * | 2021-03-18 | 2022-10-03 | キオクシア株式会社 | メモリシステム |
US11972122B2 (en) * | 2022-08-04 | 2024-04-30 | Micron Technology, Inc. | Memory read operation using a voltage pattern based on a read command type |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1729302B1 (en) * | 2005-05-31 | 2019-01-02 | Micron Technology, Inc. | A circuit for retrieving data stored in semiconductor memory cells |
US7558109B2 (en) * | 2006-11-03 | 2009-07-07 | Sandisk Corporation | Nonvolatile memory with variable read threshold |
US7904788B2 (en) * | 2006-11-03 | 2011-03-08 | Sandisk Corporation | Methods of varying read threshold voltage in nonvolatile memory |
US7876621B2 (en) * | 2007-04-23 | 2011-01-25 | Sandisk Il Ltd. | Adaptive dynamic reading of flash memories |
JP5142692B2 (ja) | 2007-12-11 | 2013-02-13 | 株式会社東芝 | 不揮発性半導体記憶装置 |
JP2009238874A (ja) | 2008-03-26 | 2009-10-15 | Toshiba Corp | 半導体メモリ及びその製造方法 |
JP5283960B2 (ja) | 2008-04-23 | 2013-09-04 | 株式会社東芝 | 三次元積層不揮発性半導体メモリ |
JP2009266944A (ja) | 2008-04-23 | 2009-11-12 | Toshiba Corp | 三次元積層不揮発性半導体メモリ |
JP2010181990A (ja) | 2009-02-04 | 2010-08-19 | Renesas Electronics Corp | データプロセッサ |
JP2010199235A (ja) | 2009-02-24 | 2010-09-09 | Toshiba Corp | 不揮発性半導体記憶装置 |
JP2012069205A (ja) | 2010-09-22 | 2012-04-05 | Toshiba Corp | 不揮発性半導体記憶装置 |
JP2012252740A (ja) | 2011-06-02 | 2012-12-20 | Toshiba Corp | 不揮発性半導体記憶装置 |
JP5605507B2 (ja) | 2011-06-14 | 2014-10-15 | 富士通株式会社 | メモリ制御装置および制御方法 |
US8839073B2 (en) | 2012-05-04 | 2014-09-16 | Lsi Corporation | Zero-one balance management in a solid-state disk controller |
US9189313B2 (en) * | 2012-08-27 | 2015-11-17 | Kabushiki Kaisha Toshiba | Memory system having NAND-type flash memory and memory controller with shift read controller and threshold voltage comparison module |
US9159437B2 (en) * | 2013-06-11 | 2015-10-13 | Sandisk Enterprise IP LLC. | Device and method for resolving an LM flag issue |
US9785383B2 (en) * | 2015-03-09 | 2017-10-10 | Toshiba Memory Corporation | Memory system and method of controlling nonvolatile memory |
TWI562152B (en) * | 2015-05-29 | 2016-12-11 | Phison Electronics Corp | Decoding method, memory storage device and memory control circuit unit |
US9934847B2 (en) * | 2016-03-11 | 2018-04-03 | Toshiba Memory Corporation | Memory system storing 4-bit data in each memory cell and method of controlling thereof including soft bit information |
KR102585221B1 (ko) * | 2016-04-21 | 2023-10-05 | 삼성전자주식회사 | 메모리 장치, 메모리 시스템 및 메모리 장치의 동작 방법 |
US10269422B2 (en) * | 2017-09-08 | 2019-04-23 | Cnex Labs, Inc. | Storage system with data reliability mechanism and method of operation thereof |
KR102341261B1 (ko) * | 2017-11-13 | 2021-12-20 | 삼성전자주식회사 | 매스비트 카운터를 포함하는 메모리 장치 및 그의 동작 방법 |
US10566052B2 (en) * | 2017-12-22 | 2020-02-18 | Micron Technology, Inc. | Auto-referenced memory cell read techniques |
US10453537B1 (en) * | 2018-05-10 | 2019-10-22 | International Business Machines Corporation | Techniques for reducing read voltage threshold calibration in non-volatile memory |
-
2018
- 2018-03-19 JP JP2018051328A patent/JP2019164850A/ja active Pending
-
2019
- 2019-02-06 US US16/268,727 patent/US10719396B2/en active Active
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE112020004254T5 (de) | 2019-09-10 | 2022-05-25 | Denso Corporation | Ventilvorrichtung und Fluid-Zirkulations-Kreislauf |
JP7448646B2 (ja) | 2019-10-30 | 2024-03-12 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 不揮発性ランダム・アクセス・メモリにおける補正読取り電圧オフセットの計算 |
Also Published As
Publication number | Publication date |
---|---|
US10719396B2 (en) | 2020-07-21 |
US20190286518A1 (en) | 2019-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2019164850A (ja) | メモリシステム | |
US10957397B2 (en) | Non-volatile memory device, storage device, and programming method thereof for performing an erase detect operation | |
US9991007B2 (en) | Nonvolatile memory device and a method of operating the same | |
TWI552317B (zh) | Semiconductor memory device | |
JP5396481B2 (ja) | ワードライン結合を用いたメモリのマルチパスプログラミング | |
KR102292642B1 (ko) | 비휘발성 메모리 장치 및 비휘발성 메모리 장치의 프로그램 방법 | |
JP6991084B2 (ja) | 不揮発性メモリデバイス及び制御方法 | |
KR102192910B1 (ko) | 반도체 장치, 메모리 시스템 및 이의 동작 방법 | |
US9690697B2 (en) | Memory controller, storage device and memory control method | |
US20170011801A1 (en) | Semiconductor memory device and operating method thereof | |
US11183250B2 (en) | Memory controller, memory device and memory system having improved threshold voltage distribution characteristics and related operating methods | |
CN102411988A (zh) | 半导体存储装置 | |
KR20110009632A (ko) | 반도체 기억 장치 | |
KR20160074237A (ko) | 데이터 저장 장치 및 그것의 동작 방법 | |
US20160124642A1 (en) | Memory device, memory system, method of operating the memory device, and method of operating the memory system | |
JP2018055748A (ja) | メモリシステム | |
KR20160050393A (ko) | 메모리 장치, 메모리 시스템, 상기 메모리 장치의 동작 방법 및 상기 메모리 시스템의 동작 방법 | |
US20220013189A1 (en) | Error detection and correction using machine learning | |
JP2021086631A (ja) | ストレージ装置及びストレージ装置の動作方法 | |
JP2020144958A (ja) | メモリシステムおよび方法 | |
KR20160016037A (ko) | 비휘발성 메모리 장치의 동작 방법 | |
JP2019164858A (ja) | メモリシステム | |
CN113010459A (zh) | 存储器系统、存储器控制器以及操作存储器系统的方法 | |
JP2021039810A (ja) | メモリシステム | |
US20160085627A1 (en) | Memory System, Error Correction Device, and Error Correction Method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20180905 |