以下、図面を参照して実施形態について説明する。なお、以下の説明において、同一の機能及び構成を有する構成要素については、共通する参照符号を付す。また、共通する参照符号を有する複数の構成要素を区別する場合、当該共通する参照符号に添え字を付して区別する。なお、複数の構成要素について特に区別を要さない場合、当該複数の構成要素には、共通する参照符号のみが付され、添え字は付さない。
1.第1実施形態
第1実施形態に係るメモリシステムについて説明する。以下では、不揮発性メモリとしてのNANDフラッシュメモリと、当該NANDフラッシュメモリを制御するメモリコントローラと、を備えたメモリシステムを例に挙げて説明する。
1.1 構成
1.1.1 メモリシステムの構成
第1実施形態に係るメモリシステムの構成について、図1を用いて説明する。
図1に示すように、メモリシステム1は、メモリコントローラ100及びNANDパッケージ群200を備えている。メモリコントローラ100とNANDパッケージ群200とは、例えばそれらの組み合わせにより一つの半導体装置を構成しても良く、その例としてはSDTMカードのようなメモリカードや、SSD(solid state drive)等が挙げられる。
メモリコントローラ100は、ホストバスによってホスト機器2に接続される。そしてメモリコントローラ100は、NANDパッケージ群200を制御し、またホスト機器2から受信した命令に応答して、NANDパッケージ群200にアクセスする。ホスト機器2は、例えばデジタルカメラやパーソナルコンピュータ等であり、ホストバスは、例えばSDTMインタフェース、SAS(Serial attached SCSI(small computer system interface))、SATA(Serial ATA(advanced technology attachment))、PCIe(Peripheral component interconnect express)、又はNVMe(Non‐volatile memory express)に従ったバスである。
また、メモリコントローラ100は、後述するNANDインタフェースに従った信号の送受信を行うNANDバスによって、NANDパッケージ群200に接続される。
NANDパッケージ群200は、複数のチャネルCH(CH0、CH1、…)を含む。複数のチャネルCHの各々は、対応するNANDバスによって、メモリコントローラ100に対して個別に接続される。なお、NANDパッケージ群200内のチャネル数は、任意の数が適用可能である。
複数のチャネルCHの各々は、複数のチップChip(Chip0、Chip1、…)を含む。複数のチップChipの各々は、例えば、NANDフラッシュメモリとしての機能を有する。なお、チャネルCH内のチップ数は、任意の数が適用可能である。当該構成は、図示しない他のチャネルCHにおいても同様である。チップChipの構成については、後述する。
1.1.2 メモリコントローラの構成
引き続き図1を用いて、メモリコントローラ100の構成の詳細について説明する。
メモリコントローラ100は、例えば、SoC(System on a chip)であり、ホストインタフェース回路110、メモリ(RAM)120、プロセッサ(CPU)130、バッファメモリ140、NANDインタフェース回路150、ECC回路160、NANDコントローラ群170、及び読出し電圧補正回路180を備えている。なお、以下に説明されるメモリコントローラ100の各部110-170の機能は、ハードウェア構成、又はハードウェア資源とファームウェアとの組合せ構成のいずれでも実現可能である。また、読出し電圧補正回路180は、特に記載する場合を除き、ファームウェアとは独立して機能し得るハードウェア構成によって実現可能であるものとする。
ホストインタフェース回路110は、ホストバスを介してホスト機器2と接続され、ホスト機器2から受信した命令及びデータを、それぞれプロセッサ130及びバッファメモリ140に転送する。またプロセッサ130の命令に応答して、バッファメモリ140内のデータをホスト機器2へ転送する。
メモリ120は、例えばDRAM又はSRAM等の半導体メモリであり、プロセッサ130の作業領域として使用される。そしてメモリ120は、NANDパッケージ群200を管理するためのファームウェアや、後述する履歴テーブル等の、各種の管理テーブル等を保持する。
プロセッサ130は、メモリコントローラ100全体の動作を制御する。例えば、プロセッサ130は、ホスト機器2から読出し命令を受信した際には、それに応答して、NANDコントローラ群170を制御して、読出し命令を発行させる(このようなホスト機器2からの指示に基づく読出し処理は、ホストリード処理ともいう)。書込み処理及び消去処理の際も同様である。またプロセッサ130は、NANDコントローラ群170を制御して、ホスト機器2に依らずNANDパッケージ群200を管理するための様々な内部処理を実行させる。例えば、プロセッサ130は、パトロールリード処理、及びリフレッシュ処理等のメモリシステム1内における内部処理を実行させ得る。
バッファメモリ140は、書込みデータや読出しデータ、及びECC回路160によって誤り訂正された読出しデータ(期待データとも呼ぶ)を一時的に保持する。
NANDインタフェース回路150は、NANDバスを介してNANDパッケージ群200と接続され、NANDパッケージ群200との通信を司る。そして、プロセッサ130から受信した命令に基づき、後述するNANDインタフェースに基づく各種信号をNANDパッケージ群200と送受信する。
ECC回路160は、NANDパッケージ群200に記憶されるデータに関する誤り検出及び誤り訂正処理を行う。すなわちECC回路160は、データの書き込み時には誤り訂正符号を生成して、これを書込みデータに付与し、データの読出し処理時にはこれを復号し、誤りビットの有無を検出する。そして誤りビットが検出された際には、その誤りビットの位置を特定し、誤りを訂正する。誤り訂正の方法は、例えば、硬判定復号(Hard bit decoding)及び軟判定復号(Soft bit decoding)を含む。硬判定復号に用いられる硬判定復号符号としては、例えば、BCH(Bose‐Chaudhuri‐Hocquenghem)符号やRS(Reed‐Solomon)符号等を用いることができ、軟判定復号に用いられる軟判定復号符号としては、例えば、LDPC(Low Density Parity Check)符号等を用いることができる。
NANDコントローラ群170は、プロセッサ130からの命令に基づき、NANDパッケージ群200との間で送受信されるコマンド及びアドレス等を生成する。NANDコントローラ群170は、例えば、ホスト機器2から受信したデータの読出し命令に応じて、NANDインタフェースに基づく読出しコマンドをNANDパッケージ群200に対して発行する。また、NANDコントローラ群170は、例えば、ホスト機器2からの命令に依らず、NANDインタフェースに基づく読出しコマンドをNANDパッケージ群200に対して発行し得る。
NANDコントローラ群170は、複数のNANDコントローラ171、172、…を含む。NANDコントローラ171、172、…はそれぞれ、NANDパッケージ群200内のチャネルCH0、CH1、…に対応して設けられる。すなわち、NANDコントローラ171、172、…はそれぞれ、チャネルCH0、CH1、…との間の通信を制御するように構成される。
読出し電圧補正回路180は、NANDパッケージ群200からデータを読み出す際に生成される読出し電圧の補正量(シフト量)を算出するように構成される。読出し電圧補正回路180は、例えば、NANDパッケージ群200からの読出しデータを受けると共に、当該読出しデータをECC回路160によって誤り訂正処理した後の読出しデータを受ける。読出し電圧補正回路180は、誤り訂正前読出しデータ及び誤り訂正後読出しデータに基づき、読出し電圧の補正量を算出し、当該算出した補正量をメモリ120に転送して保持させる。読出し電圧補正回路180の構成の詳細については、後述する。
1.1.3 チップの構成
次に、NANDフラッシュメモリに対応するチップの構成について、図2を用いて説明する。図2では、メモリコントローラ100とチャネルCH0との接続関係と、チャネルCH0内の1つのチップChip0の構成と、が一例として示される。
まず、メモリコントローラ100とチャネルCH0との接続関係について説明する。なお、メモリコントローラ100と他のチャネルCH1等との接続関係は、メモリコントローラ100とチャネルCH0との接続関係と同等であるため、説明を省略する。
図2に示すように、チャネルCH0内の各チップChipは、メモリコントローラ100とNANDバスを介して接続され、NANDインタフェースに従う信号を送受信する。NANDインタフェースの信号の具体例は、チップイネーブル信号CEn(CE0n、CE1n、…)、アドレスラッチイネーブル信号ALE、コマンドラッチイネーブル信号CLE、ライトイネーブル信号WEn、リードイネーブル信号REn、レディ・ビジー信号RBn(RB0n、RB1n、…)、及び入出力信号DQである。信号CE0n、CE1n、…はそれぞれ、チップChip0、Chip1、…に個別に入力され、信号RBn0、RBn1、…はそれぞれ、チップChip0、Chip1、…から個別に出力される。信号ALE、CLE、WEn、REn、及びDQは、同一のチャネルCH0内の各チップChipに対して共通して入力される。
具体的には、信号CE0n、CE1n、…はそれぞれ、チップChip0、Chip1、…をイネーブルにするための信号であり、“L(Low)”レベルでアサートされる。信号CLE及びALEは、各チップChipへの入力信号DQがそれぞれコマンド及びアドレスであることを各チップChipに通知する信号である。信号WEnは“L”レベルでアサートされ、入力信号DQを各チップChipに取り込ませるための信号である。信号REnも“L”レベルでアサートされ、各チップChipから出力信号DQを読み出すための信号である。レディ・ビジー信号RB0n、RB1n、…はそれぞれ、チップChip0、Chip1、…がレディ状態(メモリコントローラ100からの命令を受信出来る状態)であるか、それともビジー状態(メモリコントローラ100からの命令を受信出来ない状態)であるかを示す信号であり、“L”レベルがビジー状態を示す。入出力信号DQは、例えば8ビットの信号である。そして入出力信号DQは、各チップChipとメモリコントローラ100との間で送受信されるデータの実体であり、コマンドCMD、アドレスADD、並びに書き込みデータ及び読出しデータ等のデータDATである。
以上のように構成されることにより、メモリコントローラ100は、チャネルCH間で独立して並行に、チャネルCH内の任意の1つのチップChipと通信することができる。
次に、チップChip0の構成について説明する。なお、他のチップChip1等の構成は、チップChip0の構成と同等であるため、説明を省略する。
チップChip0は、メモリセルアレイ11、ロウデコーダ12、ドライバ13、センスアンプモジュール14、アドレスレジスタ15、コマンドレジスタ16、及びシーケンサ17を備える。
メモリセルアレイ11は、ロウ及びカラムに対応付けられた複数の不揮発性のメモリセルを含む複数のブロックBLKを備えている。図2では一例として4つのブロックBLK0~BLK3が図示されている。そしてメモリセルアレイ11は、メモリコントローラ100から与えられたデータを記憶する。
ロウデコーダ12は、アドレスレジスタ15内のブロックアドレスBAに基づいてブロックBLK0~BLK3のいずれかを選択し、更に選択したブロックBLKにおいてワード線を選択する。
ドライバ13は、アドレスレジスタ15内のページアドレスPAに基づいて、選択されたブロックBLKに対して、ロウデコーダ12を介して電圧を供給する。
センスアンプモジュール14は、データの読出し時には、メモリセルアレイ11内のメモリセルトランジスタの閾値電圧をセンスし、データを読み出す。そして、このデータDATをメモリコントローラ100に出力する。データの書き込み時には、メモリコントローラ100から受信した書き込みデータDATを、メモリセルアレイ11に転送する。
アドレスレジスタ15は、メモリコントローラ100から受信したアドレスADDを保持する。このアドレスADDには、上述のブロックアドレスBAとページアドレスPAとが含まれる。コマンドレジスタ16は、メモリコントローラ100から受信したコマンドCMDを保持する。
シーケンサ17は、コマンドレジスタ16に保持されたコマンドCMDに基づき、チップChip0全体の動作を制御する。
次に、上記ブロックBLKの構成について、図3を用いて説明する。図3は、いずれかのブロックBLKの回路図である。
図3に示すように、ブロックBLKは、例えば4つのストリングユニットSU(SU0~SU3)を含む。そして各々のストリングユニットSUは、複数のNANDストリングNSを含む。メモリセルアレイ11内のブロック数、ブロックBLK内のストリングユニット数、及びストリングユニットSU内のNANDストリング数は任意である。
NANDストリングNSの各々は、例えば64個のメモリセルトランジスタMT(MT0~MT63)並びに選択トランジスタST1及びST2を含んでいる。メモリセルトランジスタMTは、制御ゲートと電荷蓄積層とを備え、データを不揮発に保持する。そしてメモリセルトランジスタMTは、選択トランジスタST1のソースと選択トランジスタST2のドレインとの間に直列接続されている。
ストリングユニットSU0~SU3の各々における選択トランジスタST1のゲートは、それぞれセレクトゲート線SGD0~SGD3に接続される。これに対してストリングユニットSU0~SU3の各々における選択トランジスタST2のゲートは、例えばセレクトゲート線SGSに共通接続される。あるいは、ストリングユニット毎に異なるセレクトゲート線SGS0~SGS3に接続されても良い。また、同一のブロックBLK内にあるメモリセルトランジスタMT0~MT63の制御ゲートは、それぞれワード線WL0~WL63に共通接続される。
また、メモリセルアレイ11内において同一列にあるNANDストリングNSの選択トランジスタST1のドレインは、ビット線BL(BL0~BL(m-1)、但しmは2以上の自然数)に共通接続される。すなわちビット線BLは、複数のブロックBLK間で同一列にあるNANDストリングNSを共通に接続する。更に、複数の選択トランジスタST2のソースは、ソース線SLに共通に接続されている。
つまりストリングユニットSUは、異なるビット線BLに接続され、かつ同一のセレクトゲート線SGDに接続されたNANDストリングNSの集合体である。ストリングユニットSUのうち、同一のワード線WLに共通接続されたメモリセルトランジスタMTの集合体を、セルユニットCU(又はメモリグループ)とも言う。またブロックBLKは、ワード線WLを共通にする複数のストリングユニットSUの集合体である。そしてメモリセルアレイ11は、ビット線BLを共通にする複数のブロックBLKの集合体である。
図4は、ブロックBLKの一部領域の断面図である。図4に示すように、p型ウェル領域20上に、複数のNANDストリングNSが形成されている。すなわち、p型ウェル領域20上には、セレクトゲート線SGSとして機能する例えば4層の配線層21、ワード線WL0~WL63として機能する64層の配線層22、及びセレクトゲート線SGDとして機能する例えば4層の配線層23が、順次積層されている。積層された配線層間には、図示せぬ絶縁膜が形成されている。
そして、これらの配線層23、22、21を通過してp型ウェル領域20に達するピラー状の導電体24が形成されている。導電体24の側面には、ゲート絶縁膜25、電荷蓄積層(絶縁膜または導電膜)26、及びブロック絶縁膜27が順次形成され、これらによってメモリセルトランジスタMT、並びに選択トランジスタST1及びST2が形成されている。導電体24は、NANDストリングNSの電流経路として機能し、各トランジスタのチャネルが形成される領域となる。そして導電体24の上端は、ビット線BLとして機能する金属配線層28に接続される。
p型ウェル領域20の表面領域内には、n+型不純物拡散層29が形成されている。n+型不純物拡散層29上にはコンタクトプラグ30が形成され、コンタクトプラグ30は、ソース線SLとして機能する金属配線層31に接続される。更に、p型ウェル領域20の表面領域内には、p+型不純物拡散層32が形成されている。p+型不純物拡散層32上にはコンタクトプラグ33が形成され、コンタクトプラグ33は、ウェル配線CPWELLとして機能する金属配線層34に接続される。ウェル配線CPWELLは、p型ウェル領域20を介して導電体24に電位を印加するための配線である。
以上の構成が、図4を記載した紙面の奥行き方向に複数配列されており、奥行き方向に並ぶ複数のNANDストリングNSの集合によってストリングユニットSUが形成される。
本例では、1つのメモリセルトランジスタMTが例えば2ビットデータを保持可能である。この2ビットデータを、下位のビットからそれぞれ下位(Lower)ビット、及び上位(Upper)ビットと呼ぶことにする。そして、同一のセルユニットCUに属するメモリセルの保持する下位ビットの集合を下位ページと呼び、上位ビットの集合を上位ページと呼ぶ。つまり、1つのストリングユニットSU内における1本のワード線WL(1つのセルユニットCU)には2ページが割当てられ、1つのストリングユニットSUは128ページ分の容量を有することになる。あるいは言い換えるならば、「ページ」とは、セルユニットCUに形成されるメモリ空間の一部、と定義することも出来る。データの書き込み及び読出しは、このページ毎又はセルユニットCU毎に行っても良い。
図5は、各メモリセルトランジスタMTの取り得るデータ、閾値電圧分布、及び読出し時に用いる電圧について示したダイアグラムである。
上述の通り、メモリセルトランジスタMTは、2ビットデータを保持可能である。すなわち、メモリセルトランジスタMTは、閾値電圧に応じて4個の状態を取ることが出来る。この4個の状態を、閾値電圧の低いものから順に、“Er”状態、“A”状態、“B”状態、及び“C”状態と呼ぶことにする。
“Er”状態のメモリセルトランジスタMTの閾値電圧は、電圧VA未満であり、データの消去状態に相当する。“A”状態のメモリセルトランジスタMTの閾値電圧は、電圧VA以上であり且つ電圧VB(>VA)未満である。“B”状態のメモリセルトランジスタMTの閾値電圧は、電圧VB以上であり且つ電圧VC(>VB)未満である。“C”状態のメモリセルトランジスタMTの閾値電圧は、電圧VC以上であり且つ電圧VREAD未満である。このように分布する4個の状態のうちで、“C”状態が、閾値電圧の最も高い状態である。電圧VA~VCは、総称して電圧VCGRとも言う。電圧VREADは、例えば、読出し動作時において読出し対象でないワード線WLに印加される電圧であり、保持データにかかわらずメモリセルトランジスタMTをオンさせる電圧である。
また上記閾値電圧分布は、前述の下位ビット及び上位ビットからなる2ビット(2ページ)データを書き込むことで実現される。すなわち、上記“Er”状態から“C”状態と、下位ビット及び上位ビットとの関係は、例えば、次の通りである。
“Er”状態:“11”(“上位/下位”の順で表記)
“A”状態:“01”
“B”状態:“00”
“C”状態:“10”
このように、閾値電圧分布において隣り合う2つの状態に対応するデータ間では、2ビットのうちの1ビットのみが変化する。
従って、下位ビットを読み出す際には、下位ビットの値(“0”or“1”)が変化する境界に相当する電圧を用いれば良く、このことは上位ビットでも同様である。
すなわち、図5に示すように、下位ページ読出しは、“A”状態と“B”状態とを区別する電圧VBを読出し電圧として用いる。電圧VBを用いた読出し動作を、読出し動作BRと呼ぶ。読出し動作BRは、メモリセルトランジスタMTの閾値電圧が電圧VB未満か否かを判定する。
そして上位ページ読出しは、“Er”状態と“A”状態とを区別する電圧VA、及び“B”状態と“C”状態とを区別する電圧VCを読出し電圧として用いる。電圧VA及びVCを用いた読出し動作を、それぞれ読出し動作AR及びCRと呼ぶ。読出し動作ARにより、消去状態のメモリセルトランジスタMTが特定される。
なお、メモリセルアレイ11の構成についてはその他の構成であっても良い。すなわちメモリセルアレイ11の構成については、例えば、“THREE DIMENSIONAL STACKED NONVOLATILE SEMICONDUCTOR MEMORY”という2009年3月19日に出願された米国特許出願12/407,403号に記載されている。また、“THREE DIMENSIONAL STACKED NONVOLATILE SEMICONDUCTOR MEMORY”という2009年3月18日に出願された米国特許出願12/406,524号、“NON‐VOLATILE SEMICONDUCTOR STORAGE DEVICE AND METHOD OF MANUFACTURING THE SAME”という2010年3月25日に出願された米国特許出願12/679,991号、及び“SEMICONDUCTOR MEMORY AND METHOD FOR MANUFACTURING SAME”という2009年3月23日に出願された米国特許出願12/532,030号に記載されている。これらの特許出願は、その全体が本願明細書において参照により援用されている。
1.1.4 センスアンプモジュールの構成
次に、第1実施形態に係る不揮発性メモリのセンスアンプモジュールの構成について説明する。図6は、第1実施形態に係る不揮発性メモリのセンスアンプモジュールの構成の一例を説明するための回路図である。
図6に示すように、センスアンプモジュール14は、ビット線BL毎に設けられたセンスアンプユニットSAU(SAU0、SAU1、…、SAU(m-1))を備えている。
センスアンプユニットSAUの各々は、センスアンプSA、演算部OP、及び例えば5つのラッチ回路ADL、BDL、CDL、SDL、並びにXDLを備えている。
センスアンプSAは、対応するビット線BLの電圧又は電流をセンスすることでデータを読み出し、又書込みデータに応じてビット線BLに電圧を印加する。すなわちセンスアンプSAは、ビット線BLを直接的に制御するモジュールである。そしてセンスアンプSAには、読出し時には、例えばシーケンサ17によってストローブ信号STBが与えられる。センスアンプSAは、ストローブ信号STBがアサートされるタイミングで読出しデータを確定させる。そして、内部に有するラッチ回路(図示せず)にこのデータを保持し、更にラッチ回路ADL、BDL、CDL、SDL、及びXDLのいずれかに転送する。
ラッチ回路ADL、BDL、CDL、及びSDLは、読出しデータ及び書込みデータを一時的に保持する。演算部OPは、センスアンプSA、ラッチ回路ADL、BDL、CDL、SDL、及びXDLに保持されているデータに対して、否定(NOT)演算、論理和(OR)演算、論理積(AND)演算、否定論理積(NAND)演算、否定論理和(NOR)演算、排他的論理和(XOR)演算等、種々の論理演算を行う。
これらのセンスアンプSA、ラッチ回路ADL、BDL、CDL、及びSDL、並びに演算部OPは、互いにデータを送受信可能なようにバスによって接続されている。そしてこのバスは、更にラッチ回路XDLに接続されている。
センスアンプモジュール14におけるデータの入出力は、ラッチ回路XDLを介して行われる。すなわち、メモリコントローラ100から受信したデータは、ラッチ回路XDLを介して、ラッチ回路ADL、BDL、CDL、SDL、又はセンスアンプSAに転送される。また、ラッチ回路ADL、BDL、CDL、SDL又はセンスアンプSAのデータは、ラッチ回路XDLを介して、信号DQ<7:0>のいずれかの信号としてメモリコントローラ100へ送信される。ラッチ回路XDLは、チップChipのキャッシュメモリとして機能する。したがって、ラッチ回路ADL、BDL、CDL、及びSDLが使用中であったとしても、ラッチ回路XDLが空いていれば、チップChipはレディ状態となることができる。
なお、図6の例では、ビット線BL0は、信号DQ<0>を通信する信号線に接続され、ビット線BL1は、信号DQ<1>を通信する信号線に接続され、ビット線BL(m-1)に接続されたラッチ回路XDLは、信号DQ<7>を通信する信号線に接続されている。このように、ビット線BLとメモリコントローラ100との間を接続する信号線は、信号DQ<7:0>のいずれかに対応している。すなわち、或るビット線BLに接続されたNANDストリングNSは、信号DQ<7:0>のいずれかに対応付けられる。
1.1.5 履歴テーブルの構成
次に、履歴テーブルについて説明する。上述の通り、メモリコントローラ100は、例えば、メモリ120において履歴テーブルを保持する。履歴テーブルの概念について、図7を用いて説明する。図7は、第1実施形態に係るメモリシステムの履歴テーブルの一例を示す概念図である。
図7に示すように、履歴テーブルは、例えば、読出し動作AR~CRに用いられる読出し電圧のシフト量Δを示す情報(例えばDAC(Digital to Analogue Converter)値)が設定されている。シフト量Δは、例えば、チャネルCH毎、チップChip毎、ブロックBLK毎、ワード線WL毎、及びストリングユニットSU毎に個別に設定され得る。
このシフト量Δについて、以下に説明する。図5で説明した“Er”状態、“A”状態、“B”状態、及び“C”状態に対応する閾値分布は、互いに分離している。したがって、電圧VA、VB、及びVCによって、各状態を区別することができる。しかし、データを書き込んだ後に時間が経過すると、隣接セルとの干渉により閾値分布がシフトする場合がある(これを「データリテンションエラー」と呼ぶ)また、閾値分布は、書込み処理や、読出し処理によっても変動し得る(これを、それぞれ「プログラムディスターブ」、及び「リードディスターブ」と呼ぶ)。このような種々の変動要因(以下、単に「変動要因」とも呼ぶ)に伴う閾値分布が変化すると、隣り合う閾値分布が重なってしまうことがある。
隣り合う閾値分布が重なることにより、上記の電圧VA、VB、及びVCではデータを正しく読み出せないことがある。具体的には、例えば、“A”状態の閾値分布と“B”状態の閾値分布とが重なった場合、“A”状態の閾値分布のうち電圧VBよりも閾値電圧が大きいものは、“B”状態と誤って読み出される可能性があり、“B”状態の閾値分布のうち電圧VBよりも閾値電圧が小さいものは、“A”状態と誤って読み出される可能性がある。このように、誤って読み出されたビットの数(フェイルビット数)が、ECC回路160の訂正可能ビット数を超えた場合、メモリコントローラ100は、チャネルCHからの正しいデータの読出しに失敗する。
このような場合に、メモリコントローラ100は、読出し電圧を通常リード処理における読出し電圧VA、VB、及びVC(以降の説明では、これを「デフォルトの読出し電圧」とも呼ぶ)からシフトさせて、再度データの読出しを試みる。これをシフトリード処理と呼ぶ。この際のデフォルトの読出し電圧からのシフト量を示す情報を、読出し動作AR~CRの各々について、チャネルCH毎、チップChip毎、ブロックBLK毎、ワード線WL毎、及びストリングユニットSU毎に保持しているのが、図7に示す履歴テーブルである。
本例における履歴テーブルでは、DAC値=0の状態が、デフォルトの読出し電圧(すなわち、シフト量Δ=0)に対応する。シフト量Δは、例えばメモリコントローラ100内の読出し電圧補正回路180によって適宜、適切な値が算出され、メモリ120内の履歴テーブルに保持される。メモリコントローラ100は、この履歴テーブルを参照することにより、読出し対象のメモリセルトランジスタMTに対応するワード線WLに印加すべき読出し電圧を決定する。
図7の例では、(チャネルCH、チップChip、ブロックBLK、ワード線WL、ストリングユニットSU)=(0、0、0、0、0)に対応するセルユニットCUには、読出し動作AR、BR、及びCRに対してそれぞれ+8、+2、及び-7のシフト量Δが設定されている。これは、当該セルユニットCUに読出し動作AR、BR、及びCRを実行する際にはそれぞれ、デフォルトの読出し電圧VA、VB、及びVCに対して、DAC値を+8、+2、及び-7だけ電圧値をシフトさせることを意味する。また、(チャネルCH、チップChip、ブロックBLK、ワード線WL、ストリングユニットSU)=(0、0、0、1、0)に対応するセルユニットCUには、読出し動作AR、BR、及びCRのいずれにも“0”のシフト量が設定されている。これは、当該セルユニットCUに読出し動作AR、BR、及びCRを実行する際にはそれぞれ、デフォルトの読出し電圧VA、VB、及びVCを適用することを意味する。
1.1.6 読出し電圧補正回路の構成
次に、メモリコントローラ100内に設けられる読出し電圧補正回路180の構成について、図8を用いて説明する。
図8に示すように、読出し電圧補正回路180は、例えば、読出し電圧補正用バッファメモリ181、ビットカウンタ182、ビットセレクタ183、評価指標算出回路184、及びシフト量算出回路185を備えている。
読出し電圧補正用バッファメモリ181は、例えば、SRAM等の半導体メモリであり、読出し電圧を補正する処理に用いる読出しデータを一時的に保持するための記憶領域である。読出し電圧補正用バッファメモリ181は、読出し電圧補正対象の読出しデータ(誤り訂正前読出しデータ)と、当該読出しデータがECC回路160によって誤り訂正された期待データ(誤り訂正後読出しデータ)と、を同時に保持可能な記憶容量を有する。なお、誤り訂正前読出しデータ及び誤り訂正後読出しデータは、少なくとも誤り訂正可能な単位(例えば、ページ単位)のデータサイズを有する。
ビットカウンタ182は、読出し電圧補正用バッファメモリ181に保持された誤り訂正前読出しデータ及び誤り訂正後読出しデータが取り得る値の組合せ毎に、ビット数をカウントする。具体的には、例えば、誤り訂正前読出しデータ及び誤り訂正後読出しデータがいずれも1ページ分存在する場合、1つのメモリセルトランジスタMTに対して(誤り訂正前読出しデータ、誤り訂正後読出しデータ)の組が取り得る値の組合せは、(1、1)、(1、0)、(0、0)、及び(0、1)の4通り存在する。ビットカウンタ182は、当該4通りの組合せがそれぞれ何ビットずつ存在するか、をカウントする。
ビットセレクタ183は、ビットカウンタ182がカウントした4通りの値の組合せのうち、シフト量算出処理に用いる2つ(例えば、(1、0)と(0、1)等)を選択する。
評価指標算出回路184は、ビットセレクタ183によって選択された2通りの値の組合せにそれぞれ対応するカウント値を用いて、シフト量補正処理に用いる評価指標を算出する。評価指標は、例えば、2つのカウント値の比が用いられ得る。
シフト量算出回路185は、評価指標算出回路184によって算出された評価指標に基づき、シフト量Δを算出する。シフト量算出回路185は、例えば、算出したシフト量Δをメモリ120に転送し、履歴テーブルを更新する。
なお、図8では、各部181~185がファームウェアとは独立して機能し得る場合について説明したが、これに限られない。例えば、図8に示した各部181~185のうち、読出し電圧補正用バッファメモリ181、及びビットカウンタ182を除く構成(ビットセレクタ183、評価指標算出回路184、及びシフト量算出回路185)については、ファームウェアによって実施可能に構成されてもよい。
1.2 動作
次に、第1実施形態に係るメモリシステムの動作について説明する。
1.2.1 シフト量算出処理を伴う読出し処理
メモリコントローラ100によるシフト量算出処理を伴う読出し処理について、図9に示すフローチャートを用いて説明する。図9では、例えば、パトロールリード処理を想定したシーケンスの一例が示される。パトロールリード処理は、例えば、書込まれたデータの閾値分布の変動状況を把握するために、メモリコントローラ100がNANDパッケージ群200内の各セルユニットCUを定期的に巡回してデータの読出し処理を行う、メモリシステム1の内部処理である。なお、図9の例では、メモリコントローラ100は、当該パトロールリード処理の際に、或るセルユニットCUに対応する全てのページ(上位ページ及び下位ページ)の読出しを命令するものとする。このような読出し方式は、1ページずつランダムに読み出す「ランダムリード処理」と区別して、「シーケンシャルリード処理」とも呼ぶ。
図9に示すように、ステップST10において、メモリコントローラ100は、メモリ120内の履歴テーブルを参照し、読出し対象のセルユニットCUに対応する読出し動作AR~CR毎のシフト量Δを把握する。
ステップST20において、メモリコントローラ100は、把握したシフト量Δに基づいてシフトリードコマンドを発行する。この際、例えば、メモリコントローラ100の発行するコマンドシーケンスがシフト量Δを示す情報を含み、チップChipは、当該情報に基づいて読出し電圧を印加する。これにより、チップChipは、履歴テーブルのシフト量を適用した読出し電圧によって誤り訂正前読出しデータSR(誤り訂正前上位読出しデータSR_U、及び誤り訂正前下位読出しデータSR_L)を読み出し、メモリコントローラ100に出力する。誤り訂正前読出しデータSRは、メモリコントローラ100内において、ECC回路160に転送されると共に、読出し電圧補正用バッファメモリ181に保持される。
ステップST30において、ECC回路160は、誤り訂正前読出しデータSRに対して誤り訂正処理を実行する。ECC回路160による誤り訂正処理が成功した場合(ステップST30;yes)、ECC回路160は、誤り訂正後読出しデータEXP(誤り訂正後上位読出しデータEXP_U、及び誤り訂正後下位読出しデータEXP_L)を読出し電圧補正用バッファメモリ181に保持させた後、処理はステップST40に進む。
ステップST40において、読出し電圧補正回路180は、シフト量算出処理を実行する。シフト量算出処理の詳細は、後述する。
ステップST50において、メモリコントローラ100は、ステップST40において算出されたシフト量Δをメモリ120の履歴テーブル内における対応する領域に保持させることにより、履歴テーブルを更新する。
一方、ステップST30においてECC回路160による誤り訂正処理が失敗した場合(ステップST30;no)、処理はステップST60に進む。
ステップST60において、メモリコントローラ100は、リトライシーケンスを実行し、再度のデータ読出しを試みる。具体的には、例えば、メモリコントローラ100は、所定のアルゴリズムにしたがって読出し電圧を変化させて更なるシフトリード処理を行い、当該更なるシフトリード処理によって読み出されたデータを誤り訂正しようと試みる。
ステップST70において、メモリコントローラ100は、リトライシーケンスの結果に基づき、閾値分布の変動が許容範囲内であるか否かを判定する。リトライシーケンスの結果、閾値分布の変動が許容範囲内であると判定した場合、メモリコントローラ100は、リフレッシュ処理を実行しないと判定し(ステップST70;no)、読出し処理を終了させる。一方、リトライシーケンスの結果、閾値分布の変動が許容範囲外であると判定した場合、メモリコントローラ100は、リフレッシュ処理を実行すると判定し(ステップST70;yes)、処理はステップST80に進む。リフレッシュ処理は、例えば、誤り訂正されたデータを再度メモリセルアレイ11に書き込むことにより、変動した閾値分布を理想の閾値分布の状態に近づける処理である。
ステップST80において、メモリコントローラ100は、リフレッシュコマンドを発行し、リフレッシュ処理を実行する。
以上により、一連の処理が終了する。
1.2.2 シフト量算出処理
次に、第1実施形態に係るメモリシステムにおけるシフト量算出処理について説明する。
図10は、第1実施形態に係るメモリシステムにおけるシフト量算出処理を説明するためのフローチャートである。図10は、図9におけるステップST40の詳細を示す。
図10に示すように、ステップST41において、ビットカウンタ182は、読出し電圧補正用バッファメモリ181に保持された誤り訂正前読出しデータSR及び誤り訂正後読出しデータEXPが取り得る値の組合せ毎に、ビット数をカウントする。
ステップST42において、ビットセレクタ183は、ステップST41において値の組合せ毎のカウント値から、比較するビット数のカウント値の組を選択する。
ステップST43において、評価指標算出回路184は、ステップST42において選択されたカウント値の組に基づき、評価指標を算出する。
ステップST44において、シフト量算出回路185は、ステップST43において算出された評価指標に基づき、シフト量Δを算出する。
以上により、シフト量算出処理が終了する。
図11は、第1実施形態に係るメモリシステムにおけるシフト量算出処理のうち、評価指標算出対象のカウント値が選択されるまでの処理を説明するための模式図である。図11は、図10におけるステップST41及びST42に対応する。
図11に示すように、誤り訂正前読出しデータSR及び誤り訂正後読出しデータEXPが取り得る値の組合せC0=(SR_U、SR_L、EXP_U、EXP_L)は、2^4=16通り存在する。このうち、誤り訂正前読出しデータの組(SR_U、SR_L)と誤り訂正後読出しデータ(EXP_U、EXP_L)の組とが一致する4通りの場合は、データは誤りなく読み出されたことを示す。具体的には、例えば、組合せC0=(1、1、1、1)となる場合は、“Er”状態のデータが書き込まれたメモリセルトランジスタMTから“Er”状態のデータが正しく読み出されたことを示す。同様に、組合せC0=(0、1、0、1)、(0、0、0、0)、及び(1、0、1、0)となる場合はそれぞれ、“A”状態、“B”状態、及び“C”状態のデータが正しく読み出されたことを示す。
一方、誤り訂正前読出しデータの組(SR_U、SR_L)と誤り訂正後読出しデータ(EXP_U、EXP_L)の組とが一致しない残りの12通りの場合は、データが誤って読み出されたことを示す。具体的には、例えば、組合せC0=(1、1、0、1)の場合は、“A”状態のデータが書き込まれたメモリセルトランジスタMTから“Er”状態のデータが誤って読み出されたことを示す。また、例えば、組合せC0=(0、1、1、1)の場合は、“Er”状態のデータが書き込まれたメモリセルトランジスタMTから“A”状態のデータが誤って読み出されたことを示す。
図10におけるステップST41では、ビットカウンタ182は、上記したような16通りの組合せC0毎に読出し処理を行ったセルユニットCU内のメモリセルトランジスタMTを分類する。そして、ビットカウンタ182は、16通りの組合せC0毎に、分類されたメモリセルトランジスタMTの数を(ビット数として)カウントする。
図10におけるステップST42では、ビットセレクタ183は、16通りの組合せC0のうち、以下の条件に合致する2通りを1つの組として選択する。ビットセレクタ183は、第1状態と第2状態とを区別する読出し電圧VCGRのシフト量を算出するため、「第1状態→第2状態誤読出しケース」と、「第2状態→第1状態誤読出しケース」と、を1つの組として選択する。ここで、「第1状態→第2状態誤読出しケース」とは、第1状態のデータが書き込まれたメモリセルトランジスタMTから、第1状態と隣り合う第2状態のデータが誤って読み出された場合を示す。また、「第2状態→第1状態誤読出しケース」とは、第2状態のデータが書き込まれたメモリセルトランジスタMTから、第1状態のデータが誤って読み出された場合を示す。
これにより、ビットセレクタ183は、16通りの組合せC0から6通りを選択し、当該選択された6通りから3つの組を形成することができる。具体的には、ビットセレクタ183は、電圧VAのシフト量Δを算出する((第1状態、第2状態)=(Er、A)の)場合、組合せC0=(1、1、0、1)に対応する「A→Er誤読出しケース」のカウント値と、組合せC0=(0、1、1、1)に対応する「Er→A誤読出しケース」のカウント値と、を1つの組として選択する。また、ビットセレクタ183は、電圧VBのシフト量Δを算出する((第1状態、第2状態)=(A、B)の)場合、組合せC0=(0、1、0、0)に対応する「B→A誤読出しケース」のカウント値と、組合せC0=(0、0、0、1)に対応する「A→B誤読出しケース」のカウント値と、を1つの組として選択する。また、ビットセレクタ183は、電圧VCのシフト量Δを算出((第1状態、第2状態)=(B、C)の)場合、組合せC0=(0、0、1、0)に対応する「C→B誤読出しケース」のカウント値と、組合せC0=(1、0、0、0)に対応する「B→C誤読出しケース」のカウント値と、を1つの組として選択する。
以上のように動作することにより、ビットセレクタ183は、シフト量算出処理に用いる2通りのカウント値を含む組を、読出し動作AR~CRの各々について選択することができる。
図12は、第1実施形態に係るメモリシステムにおけるシフト量算出処理のうち、評価指標を算出する処理を説明するための模式図である。図12は、図10におけるステップST43に対応する。
図12の上段では、隣り合う2つの閾値分布の一例として、“A”状態、及び“B”状態の各々に対応するデータが書込まれたメモリセルトランジスタMTの閾値分布が示される。当該2つの閾値分布は、種々の変動要因によって変化し、互いに重なり合っている。このような2つの閾値分布に対して読出し電圧VB(VB1~VB5)を印加した場合に、「A→B誤読出しケース」及び「B→A誤読出しケース」がどのように増減するか、が示される。また、図12の下部では、「A→B誤読出しケース」のカウント値(Count(A→B)と表記)、及び「B→A誤読出しケース」のカウント値(Count(B→A)と表記)から算出される評価指標rと、読出し電圧VBとの関係が示される。
図12の上段に示すように、電圧VB3は、例えば、“A”状態及び“B”状態の各々に対応する2つの閾値分布間の谷位置、すなわち、隣り合う2つの閾値分布間で同じ閾値電圧のメモリセル数が等しい位置に相当する。隣り合う2つの閾値分布の形状がほぼ等しいとみなせる場合、“A”状態の閾値分布のうち、電圧VB3よりも大きい閾値電圧を有するメモリセル数と、“B”状態の閾値分布のうち、電圧VB3よりも小さい閾値電圧を有するメモリセル数と、は、ほぼ等しくなり得る。このため、電圧VB3を用いて読み出されたデータは、「A→B誤読出しケース」のカウント値と、「B→A誤読出しケース」のカウント値とがほぼ等しくなり得る。すなわち、「A→B誤読出しケース」のカウント値に対する「B→A誤読出しケース」のカウント値の比率は、“1”とみなし得る。
読出し電圧を電圧VB3から電圧VB4、VB5と徐々に大きくしていくと、「A→B誤読出しケース」のカウント値は徐々に減少するのに対し、「B→A誤読出しケース」のカウント値は急激に増加し得る。すなわち、「A→B誤読出しケース」のカウント値に対する「B→A誤読出しケース」のカウント値の比率は、“1”から急激に増加し得る。これに対して、読出し電圧を電圧VB3から電圧VB2、VB1と徐々に小さくしていくと、「A→B誤読出しケース」のカウント値は急激に増加するのに対し、「B→A誤読出しケース」のカウント値は徐々に減少する。すなわち、「A→B誤読出しケース」のカウント値に対する「B→A誤読出しケース」のカウント値の比率は“1”から急激に減少し得る。
このため、図12の下段に示すように、例えば、当該比率の対数値を縦軸に取ると、当該対数値は、電圧VB3においてr3≒0となり、電圧VB3の近傍において、読出し電圧と正の相関を有し得る。評価指標算出回路184は、例えば、当該比率の対数値を評価指標rとして算出し、シフト量算出回路185に送る。これにより、シフト量算出回路185は、評価指標rの値に応じて、現在の読出し電圧が電圧VB3からどれだけ離れているか、を推定することができる。
図13は、第1実施形態に係るメモリシステムにおけるシフト量算出処理のうち、評価指標に基づいてシフト量Δを算出する処理を説明するための模式図である。図13は、図10におけるステップST44に対応する。
図13の上段では、評価指標r(r1~r5)の値の大きさに応じて設定されるシフト量Δ(Δ1~Δ5)の大きさが示される。図13の下段では、シフト量Δの大きさと、読出し電圧VBとの関係が示される。
図13の上段に示すように、シフト量Δは、例えば、評価指標rが“0”となる場合、“0”となるように設定され、かつ評価指標rに対して負の相関を有するように設定される。すなわち、評価指標r3(≒0)に対応するシフト量Δ3は、“0”近傍の値(≒0)となるように設定される。そして、評価指標r1<r2<r3(0≒0)<r4<r5に対して、それぞれシフト量Δ1>Δ2>Δ3(0≒0)>Δ4>Δ5となるようにシフト量Δが設定される。
このようにシフト量Δを設定することにより、図13の下段に示すように、読出し電圧VBに電圧VB3より大きい値が設定されていた場合(評価値rが正の場合)には、読出し電圧VB3に近づけるように、負のシフト量Δ(<Δ3)を設定することができる。また、読出し電圧VBに電圧VB3より小さい値が設定されていた場合(評価値rが負の場合)には、読出し電圧VB3に近づけるように、正のシフト量Δ(>Δ3)を設定することができる。
また、読出し電圧VBの電圧VB3からの差(評価値rの絶対値)が小さいほどシフト量Δの絶対値が小さくなるように設定され、大きいほどシフト量Δの絶対値が大きくなるように設定される。これにより、読出し電圧VBの電圧VB3からのずれの大きさに応じて、シフト量Δの大きさを変化させることができ、電圧VB3への収束を早めることができる。一般に、隣り合う2つの閾値分布の形状がほぼ等しいとみなせる場合、当該2つの閾値分布の谷位置に読出し電圧VBを設定することにより、フェイルビット数を最小に出来る可能性が高い。このため、上述のような読出し電圧VBを電圧VB3に近づけるシフト量Δの算出方法を適用することにより、読出し電圧VBを最適な値に近づけることができる。
なお、上述したように、最適な読出し電圧VCGRのシフト量Δを算出するためには、重なり合う閾値分布間のフェイルビット数の比率が1:1になるまで補正を繰り返すことが理想であり得る。しかしながら、重なり合う閾値分布の一方が非対称な形状を有しているために、閾値分布が非対称に重なっている場合には、これに限定する必要はない。
1.3 本実施形態に係る効果
第1実施形態によれば、読出し電圧補正用バッファメモリ181は、誤り訂正前読出しデータSR_U及びSR_Lと、誤り訂正後読出しデータEXP_U及びEXP_Lを保持する。ビットカウンタ182は、組合せC0=(SR_U、SR_L、EXP_U、EXP_L)毎にビット数をカウントする。ビットセレクタ183は、電圧VA~VCのシフト量Δを算出するためにそれぞれ、組合せC0の中からC0=(1、1、0、1)及び(0、1、1、1)の組、(0、1、0、0)及び(0、0、0、1)の組、並びに(0、0、1、0)及び(1、0、0、0)の組を選択する。評価指標算出回路184は、選択された組毎に割合の対数値を評価指標rとして算出する。シフト量算出回路185は、評価指標rに基づいてシフト量Δを算出する。これにより、メモリコントローラ100は、読出し処理が実行される毎に、読出し電圧のシフト量Δを算出することができる。このため、トラッキング処理のように、シフト量Δを算出するために更なる読出し処理を実行することなくシフト量Δを算出することができる。したがって、シフト量Δの算出によるレイテンシの増加を抑制することができる。
また、シフト量Δは、評価指標rが評価基準(例えば、“0”)を超えるか否かに基づいて、正の値を有するか、負の値を有するか、が判定される。これにより、読出し電圧が重なり合う2つの閾値電圧の谷位置よりも大きい場合には負のシフト量Δを算出し、小さい場合には正のシフト量Δを算出することができる。このため、谷位置に近づく方向に読出し電圧を補正することができる。
また、シフト量Δは、評価指標rと評価基準との差の絶対値が大きいほど、大きな絶対値となるように算出される。これにより、読出し電圧が谷位置から離れているほど大きなシフト量Δを算出し、谷位置に近い場合には小さなシフト量Δを算出することができる。このため、読出し電圧補正処理を繰り返すことによって、読出し電圧を谷位置に収束させることができる。
1.4 第1変形例
第1実施形態では、誤り訂正に成功した全ての場合についてシフト量算出処理を実行し、履歴テーブルを更新する例について説明したが、これに限られない。例えば、シフト量算出処理は、フェイルビット数が所定の値を超えた場合に、選択的に実行されてもよい。以下の説明では、第1実施形態と同等の構成及び動作については説明を省略し、第1実施形態と異なる構成及び動作について主に説明する。
図14は、第1実施形態の第1変形例に係るメモリシステムにおけるシフト量算出処理を伴う読出し処理を説明するためのフローチャートである。図14は、第1実施形態において説明した図9に対応し、図9のステップST30とステップST40との間に、新たなステップST31が追加された場合が示される。
図14に示すように、ステップST10~ST30の処理は、図9の場合と同等であるため、その説明を省略する。なお、ステップST30において誤り訂正に成功すると(ステップST30;yes)、処理はステップST31に進み、誤り訂正に失敗すると(ステップST30;no)、処理はステップST60に進む。なお、ステップST60~ST80の処理は、図9の場合と同等であるため、その説明を省略する。
ステップST31において、メモリコントローラ100は、誤り訂正前読出しデータSRと誤り訂正後読出しデータEXPとを比較し、フェイルビット数の数をカウントする。フェイルビット数は、例えば、誤り訂正前読出しデータSRと誤り訂正後読出しデータEXPとの間でデータが異なるビットの数をカウントすることにより算出される。フェイルビット数のカウント値が基準値N1以上であった場合(ステップST31;yes)、メモリコントローラ100はシフト量算出処理を実行すると判定し、処理はステップST40に進む。ステップST40及びST50の処理は、図9の場合と同等であるため、その説明を省略する。なお、基準値N1は、誤り訂正可能なビット数の上限値以下の任意の自然数である。一方、フェイルビット数のカウント値が基準値N1未満であった場合(ステップST31;no)、メモリコントローラ100はシフト量算出処理の実行は不要であると判定し、シフト量算出処理を実行することなく処理を終了する。
以上で、読出し処理が終了する。
第1実施形態の第1変形例によれば、メモリコントローラ100は、誤り訂正前読出しデータSRと誤り訂正後読出しデータEXPとを比較し、フェイルビット数をカウントする。メモリコントローラ100は、フェイルビットカウント数に基づいて、シフト量算出処理を実行するか否かを判定する。これにより、閾値分布の谷位置に対する読出し電圧のずれが小さく、データが誤って読み出されるビットが少ない場合には、シフト量算出処理を実行しないと判定することができる。このため、不要なシフト量算出処理の回数を低減すると共に、読出し電圧の補正が必要な程度に閾値分布が変動した場合に選択的にシフト量算出処理を実行することができる。したがって、シフト量算出処理の実行回数を低減することができ、読出し電圧補正によるレイテンシの増加を抑制することができる。
1.5 第2変形例
第1実施形態及び第1実施形態の第1変形例では、パトロールリード処理によって、セルユニットCUを定期的に巡回してデータの読出し処理を行う場合について説明したが、これに限られない。例えば、パトロールリード処理の対象は、或る繰り返し単位において巡回するセルユニットCUは、前回実行されたシフト量算出処理の結果に応じて判定されてもよい。以下の説明では、第1実施形態と同等の構成及び動作については説明を省略し、第1実施形態と異なる構成及び動作について主に説明する。
図15は、第1実施形態の第2変形例に係るメモリシステムの履歴テーブルの一例を示す概念図である。図15は、第1実施形態における図7に対応する。
図15に示すように、履歴テーブルには、シフト量Δに加え、優先パトロールフラグ、及びパトロールカウント値が設定されている。
優先パトロールフラグは、例えば、ページ毎(図15の例では、下位ページ及び上位ページ)にそれぞれ個別に割当てられる。優先パトロールフラグは、例えば、シフト量算出処理を伴うパトロールリード処理を優先して実行するセルユニットCUに対して設定される。
パトロールカウント値は、例えば、当該セルユニットCUに対して、シフト量算出処理を伴うパトロールリード処理が連続して実行された回数を示す。パトロールカウント値が大きい場合、同じセルユニットCUに対して優先的に何度もシフト量算出処理を実行していることを示す。すなわち、パトロールカウント値が過度に大きい状態からは、シフト量算出処理によっても誤り訂正できないことが示唆される。誤り訂正できない場合としては、例えば、読出し電圧の最適値からのずれが改善していない場合や、仮に最適値が特定された場合でも、隣り合う閾値分布間の重複部分が大きくなり過ぎた場合等が含まれる。
図16は、第1実施形態の第2変形例に係るメモリシステムにおけるシフト量算出処理を伴う読出し処理を説明するためのフローチャートである。図16は、第1実施形態において説明した図9に対応し、図9のステップST10の前に新たなステップST1~ST3が追加されると共に、ステップST50の後に新たなステップST51、ST52、及びST53が追加された場合が示される。
図16に示すように、ステップST1において、メモリコントローラ100は、パトロールリード処理の開始に際して、履歴テーブルを参照し、優先パトロールフラグが設定されたページのアドレスを取得する。メモリコントローラ100は、当該アドレスに基づき、優先パトロールフラグが設定されたページに対して優先的にシフト量算出処理を伴うパトロールリード処理を実行する。
ステップST2において、メモリコントローラ100は、引き続き履歴テーブルを参照し、優先パトロールフラグが設定されたページに対応するパトロールカウント値をインクリメントする。
ステップST3において、メモリコントローラ100は、ステップST2においてインクリメントされたパトロールカウント値が基準値N2未満であるか否かを判定する。基準値N2は、例えば、任意の自然数が適用可能である。パトロールカウント値が基準値N2未満である場合(ステップST3;yes)、シフト量算出処理によってフェイルビット数の改善が見込めると判定し、処理はステップST10に進む。一方、基準値N2以上である場合(ステップST3;no)、これ以上シフト量算出処理を実行してもフェイルビット数の改善が見込めないと判定し、処理はステップST60に進む。ステップST10~ST50、及びステップST60~ST80の処理は、図9の場合と同等であるため、その説明を省略する。
ステップST50の後、処理はステップST51に進む。ステップST51において、メモリコントローラ100は、誤り訂正前読出しデータSRと、誤り訂正後読出しデータEXPとを比較し、フェイルビット数をカウントする。フェイルビット数のカウント値が基準値N3未満であった場合(ステップST51;yes)、シフト量算出処理の更なる実行が不要な程度にフェイルビット数が改善したと判定し、処理はステップST52に進む。ステップST52において、メモリコントローラ100は、履歴テーブルを参照し、ステップST51においてフェイルビット数が十分に改善したと判定されたページに対応する優先パトロールフラグをリセットし、処理を終了する。この場合、次の繰り返し単位におけるパトロールリード処理では、当該セルユニットCUには優先パトロールフラグが設定されていないため、シフト量算出処理が省略される。
一方、フェイルビットカウント数のカウント値が基準値N3以上である場合(ステップST51;no)、シフト量算出処理の更なる実行が必要であると判定し、処理はステップST53に進む。ステップST53において、メモリコントローラ100は、履歴テーブルを参照し、ステップST51においてフェイルビット数が十分に改善していないと判定されたページに対応する優先パトロールフラグをセットし(又はセットを維持し)、処理を終了する。この場合、次の繰り返し単位におけるパトロールリード処理では、当該セルユニットCUには優先パトロールフラグが設定されているため、シフト量算出処理が再度実行される。
第1実施形態の第2変形例によれば、履歴テーブルは、シフト量Δに加え、優先パトロールフラグ及びパトロールカウント値を更に保持する。メモリコントローラ100は、パトロールリード処理の実行に際し、優先パトロールフラグを参照することによって、優先的にフェイルビット数の改善が必要なページを特定し、当該ページに対してシフト量算出処理を実行する。これにより、シフト量算出処理が必要なページに対して優先的にパトロールリード処理を実行することができ、読出し処理のレイテンシの増加を抑制することができる。
また、メモリコントローラ100は、パトロールカウント値を参照することにより、優先的にシフト量算出処理を実行したものの、フェイルビット数の改善が見られないページを特定し、当該ページに対してリトライシーケンス及び必要に応じてリフレッシュ処理を実行する。これにより、シフト量算出処理によってもフェイルビット数の改善が見られないページに対していつまでもシフト量算出処理が実行され続け、レイテンシが増加することを抑制することができる。
また、メモリコントローラ100は、シフト量算出処理の実行後、フェイルビット数をカウントし、更なる優先的なシフト量算出処理の実行が必要か否かを判定する。これにより、読出し電圧に対して閾値分布のずれが大きくなく、誤って読み出されるデータが少ない場合には、シフト量算出処理を実行しないと判定することができる。このため、読出し電圧の補正が必要な場合に対して選択的にシフト量算出処理を実行することができる。したがって、シフト量算出処理の実行回数を低減することができ、読出し電圧補正によるレイテンシの増加を抑制することができる。
2. 第2実施形態
次に、第2実施形態に係るメモリシステムについて説明する。
第1実施形態、並びに第1変形例及び第2変形例では、セルユニットCU内の全ページについて誤り訂正前読出しデータSRを読み出し、対応する全ての誤り訂正後読出しデータEXPを用いて、シフト量算出処理を実行する場合について説明した。しかしながら、例えば、読出し電圧補正用バッファメモリ181内に十分な一時保存領域が確保できない場合、全てのページ分の誤り訂正後読出しデータEXPを用いることなく、シフト量算出処理を実行してもよい。以下の説明では、第1実施形態と同等の構成及び動作については説明を省略し、第1実施形態と異なる構成及び動作について主に説明する。
2.1 シフト量算出処理
図17及び図18は、第2実施形態に係るメモリシステムにおけるシフト量算出処理のうち、評価指標算出対象のカウント値が選択されるまでの処理を説明するための模式図である。図17及び図18は、第1実施形態における図11に対応する。図17は、誤り訂正後読出しデータEXPのうち、誤り訂正後上位読出しデータEXP_Uを用いずに、誤り訂正後下位読出しデータEXP_Lを用いて評価指標算出対象のカウント値が選択される場合を示す。図18は、誤り訂正後読出しデータEXPのうち、誤り訂正後下位読出しデータEXP_Lを用いずに、誤り訂正後上位読出しデータEXP_Uを用いて評価指標算出対象のカウント値が選択される場合を示す。
まず、誤り訂正後上位読出しデータEXP_Uを用いることなく、誤り訂正後下位読出しデータEXP_Lを用いる場合について、図17を用いて説明する。
図17に示すように、誤り訂正前読出しデータSRは、セルユニットCU内のメモリセルトランジスタMTを、“Er”状態~“C”状態の4通りに分類する。しかしながら、誤り訂正後読出しデータEXPは、下位ページ分しか存在しないため、セルユニットCU内のメモリセルトランジスタMTを、“Er”状態又は“A”状態の場合と、“B”状態又は“C”状態の場合と、の2通りに分類する。このため、誤り訂正前読出しデータSR及び誤り訂正後読出しデータEXPが取り得る値の組合せC1=(SR_U、SR_L、EXP_L)は、2^3=8通り存在する。ビットカウンタ182は、上記したような8通りの組合せC1毎にセルユニットCU内のメモリセルトランジスタMTを分類する。そして、ビットカウンタ182は、8通りの組合せC1毎に、分類されたメモリセルトランジスタMTの数を(ビット数として)カウントする。
図17の例では、ビットセレクタ183は、8通りの組合せC1のうち、組合せC1=(SR_U、SR_L、EXP_L)=(0、1、0)及び(0、0、1)の2通りを含む1つの組に着目する。組合せC1=(0、1、0)の場合は、“B”状態又は“C”状態のデータが書き込まれたメモリセルトランジスタMTから“A”状態のデータが誤って読み出されたことを示す場合である。組合せC1=(0、0、1)の場合は、“Er”状態又は“A”状態のデータが書き込まれたメモリセルトランジスタMTから“B”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC1=(0、1、0)の場合は、「B,C→A誤読出しケース」を含み、組合せC1=(0、0、1)の場合は、「Er,A→B誤読出しケース」を含む。
一般に、閾値分布は、ピーク値に対応する閾値電圧から離れるほど、メモリセル数が減少する。このため、隣り合う閾値分布と重なる領域に属するメモリセル数の方が、2個先の閾値分布と重なる領域に属するメモリセル数よりも有意に大きいとみなし得る。
したがって、組合せC1=(0、1、0)にカウントされた場合のうち、「B→A誤読出しケース」の数は、「C→A誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC1=(0、1、0)に対応するカウント値は、「B→A誤読出しケース」に実質的に等しいとみなし得る。同様に、組合せC1=(0、0、1)にカウントされた場合のうち、「A→B誤読出しケース」の数は、「Er→B誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC1=(0、0、1)に対応するカウント値は、「A→B誤読出しケース」に実質的に等しいとみなし得る。
上記したような近似を行うことにより、ビットセレクタ183は、電圧VBのシフト量Δを算出する場合として、「B→A誤読出しケース」に実質的に対応する組合せC1=(0、1、0)のカウント値と、「A→B誤読出しケース」に実質的に対応する組合せC1=(0、0、1)のカウント値と、を1つの組として選択する。
以上のように動作することにより、ビットセレクタ183は、シフト量算出処理に用いる2通りのカウント値を含む組を、読出し動作BRについて選択することができる。
次に、誤り訂正後下位読出しデータEXP_Lを用いることなく、誤り訂正後上位読出しデータEXP_Uを用いる場合について、図18を用いて説明する。
図18に示すように、誤り訂正前読出しデータSRは、セルユニットCU内のメモリセルトランジスタMTを、“Er”状態~“C”状態の4通りに分類する。しかしながら、誤り訂正後読出しデータEXPは、上位ページ分しか存在しないため、セルユニットCU内のメモリセルトランジスタMTを、“Er”状態又は“C”状態の場合と、“A”状態又は“B”状態の場合と、の2通りに分類する。このため、誤り訂正前読出しデータSR及び誤り訂正後読出しデータEXPが取り得る値の組合せC2=(SR_U、SR_L、EXP_U)は、2^3=8通り存在する。ビットカウンタ182は、上記したような8通りの組合せC2毎に読出し処理を行ったセルユニットCU内のメモリセルトランジスタMTを分類する。そして、ビットカウンタ182は、8通りの組合せC2毎に、分類されたメモリセルトランジスタMTの数を(ビット数として)カウントする。
図18の例では、8通りの組合せC2のうち、組合せC2=(SR_U、SR_L、EXP_U)=(1、1、0)及び(0、1、1)の2通りを含む組と、(0、0、1)及び(1、0、0)の2通りを含む組と、の2組に着目する。
組合せC2=(1、1、0)の場合は、“A”状態又は“B”状態のデータが書き込まれたメモリセルトランジスタMTから“Er”状態のデータが誤って読み出されたことを示す場合である。組合せC2=(0、1、1)の場合は、“Er”状態又は“C”状態のデータが書き込まれたメモリセルトランジスタMTから“A”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC2=(1、1、0)の場合は、「A,B→Er誤読出しケース」を含み、組合せC2=(0、1、1)の場合は、「Er,C→A誤読出しケース」を含む。
また、組合せC2=(0、0、1)の場合は、“Er”状態又は“C”状態のデータが書き込まれたメモリセルトランジスタMTから“B”状態のデータが誤って読み出されたことを示す場合である。組合せC2=(1、0、0)の場合は、“A”状態又は“B”状態のデータが書き込まれたメモリセルトランジスタMTから“C”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC2=(0、0、1)の場合は、「Er,C→B誤読出しケース」を含み、組合せC2=(1、0、0)の場合は、「A,B→C誤読出しケース」を含む。
図17の際に説明したように、閾値分布は、ピーク値に対応する閾値電圧から離れるほど、メモリセル数が減少する。このため、隣り合う閾値分布と重なる領域に属するメモリセル数の方が、3個先の閾値分布と重なる領域に属するメモリセル数よりも有意に大きいとみなし得る。
したがって、組合せC2=(1、1、0)にカウントされた場合のうち、「A→Er誤読出しケース」の数は、「B→Er誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC2=(1、1、0)に対応するカウント値は、「A→Er誤読出しケース」に実質的に等しいとみなし得る。同様に、組合せC2=(0、1、1)にカウントされた場合のうち、「Er→A誤読出しケース」の数は、「C→A誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC2=(0、1、1)に対応するカウント値は、「Er→A誤読出しケース」に実質的に等しいとみなし得る。
また、組合せC2=(0、0、1)にカウントされた場合のうち、「C→B誤読出しケース」の数は、「Er→B誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC2=(0、0、1)に対応するカウント値は、「C→B誤読出しケース」に実質的に等しいとみなし得る。同様に、組合せC2=(1、0、0)にカウントされた場合のうち、「B→C誤読出しケース」の数は、「A→C誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC2=(1、0、0)に対応するカウント値は、「B→C誤読出しケース」に実質的に等しいとみなし得る。
上記したような近似を行うことにより、ビットセレクタ183は、電圧VAのシフト量Δを算出する場合として、「A→Er誤読出しケース」に実質的に対応する組合せC2=(1、1、0)のカウント値と、「A→Er誤読出しケース」に実質的に対応する組合せC2=(0、1、1)のカウント値と、を1つの組として選択する。また、ビットセレクタ183は、電圧VCのシフト量Δを算出する場合として、「C→B誤読出しケース」に実質的に対応する組合せC2=(0、0、1)のカウント値と、「B→C誤読出しケース」に実質的に対応する組合せC2=(1、0、0)のカウント値と、を1つの組として選択する。
以上のように動作することにより、ビットセレクタ183は、シフト量算出に用いる2通りのカウント値を含む組を、読出し動作AR及びCRについて選択することができる。
2.2 本実施形態に係る効果
第2実施形態によれば、ビットカウンタ182は、誤り訂正前読出しデータSR(SR_U及びSR_L)と、誤り訂正後下位読出しデータEXP_L又は誤り訂正後上位読出しデータEXP_Uのいずれか1つと、により生じる8通りの組合せC1又はC2についてビット数をカウントする。ビットセレクタ183は、誤り訂正後下位読出しデータEXP_Lを用いる場合、8通りの組合せC1のうち、C1=(0、1、0)及び(0、0、1)の組を選択する。これにより、誤り訂正後上位読出しデータEXP_Uを用いることなく、読出し動作BRに対応するシフト量Δを算出するために用いるカウント値を選択することができる。また、ビットセレクタ183は、誤り訂正後上位読出しデータEXP_Uを用いる場合、8通りの組合せC2のうち、C2=(1、1、0)及び(0、1、1)の組、並びに(0、0、1)及び(1、0、0)の組を選択する。これにより、誤り訂正後下位読出しデータEXP_Lを用いることなく、読出し動作AR及びCRに対応するシフト量Δを算出するために用いるカウント値を選択することができる。したがって、メモリコントローラ100に誤り訂正後上位読出しデータEXP_U及び誤り訂正後下位読出しデータEXP_Lを同時に保持可能な領域を確保できない場合にも、シフト量算出処理を実行することができる。
なお、上述のように、誤り訂正後上位読出しデータEXP_U及び誤り訂正後下位読出しデータEXP_Lを同時に保持可能な領域を確保できない場合でも、図17及び図18に示した動作を順に実行することによって、第1実施形態と同様に、全ての読出し動作AR~CRに対応するシフト量Δを算出してもよい。すなわち、まず、読出し電圧補正回路180は、読出し電圧補正用バッファメモリ181に、誤り訂正前読出しデータSR(SR_U及びSR_L)、及び誤り訂正後下位読出しデータEXP_Lを保持させ、8通りの組合せC1に基づいて読出し動作BRに対応するシフト量Δを算出する。読出し動作BRに対応するシフト量Δの算出後、読出し電圧補正回路180は、読出し電圧補正用バッファメモリ181から誤り訂正後下位読出しデータEXP_Lを削除しつつ、誤り訂正前上位読出しデータSR_UをECC回路160に転送し、誤り訂正後上位読出しデータEXP_Uを得る。その後、読出し電圧補正回路180は、読出し電圧補正用バッファメモリ181に保持させた誤り訂正前読出しデータSR(SR_U及びSR_L)、及び誤り訂正後上位読出しデータEXP_Uに基づき、8通りの組合せC2に基づいて読出し動作AR及びCRに対応するシフト量Δを算出する。これにより、第2実施形態に係る読出し電圧補正回路180は、全ての読出し動作AR~CRに対応するシフト量Δを算出することが出来る。
3. 第3実施形態
次に、第3実施形態に係るメモリシステムについて説明する。
第1実施形態及び第2実施形態では、セルユニットCUに対応する全てのページについて一括してデータを読み出すシーケンシャルリード処理が実行される場合について説明した。第3実施形態では、1ページずつランダムにデータを読み出すランダムリード処理が実行される場合にシフト量算出処理を併せて実行する場合について説明する。以下の説明では、第1実施形態と同等の構成及び動作については説明を省略し、第1実施形態と異なる構成及び動作について主に説明する。
3.1 シフト量算出処理を伴う読出し処理
第3実施形態に係るメモリシステムにおけるシフト量算出処理を伴う読出し処理について、図19に示すフローチャートを用いて説明する。図19は、第1実施形態における図9に対応し、図9のステップST20に代えてステップST21が実行され、ステップST30及びST40の間に新たなステップST32、ST33、及びST34が追加される。また、上述の通り、図19では、ランダムリード処理によってデータが読み出される場合が示される。
図19に示すように、ステップST10において、メモリコントローラ100は、メモリ120内の履歴テーブルを参照し、読出し対象のページに対応する読出し動作(図19の場合では、読出し動作AR及びCR)のシフト量Δを把握する。
ステップST21において、メモリコントローラ100は、ステップST10において把握したシフト量Δに基づいてシフトリードコマンドを発行する。これにより、チップChipは、履歴テーブルのシフト量を適用した読出し電圧によって誤り訂正前上位読出しデータSR_Uを読み出し、メモリコントローラ100に出力する。誤り訂正前上位読出しデータSR_Uは、メモリコントローラ100内において、ECC回路160に転送されると共に、読出し電圧補正用バッファメモリ181に保持される。
ステップST30において、ECC回路160は、誤り訂正前上位読出しデータSR_Uに対して誤り訂正処理を実行する。ECC回路160による誤り訂正処理が成功した場合(ステップST30;yes)、ECC回路160は、誤り訂正後上位読出しデータEXP_Uを読出し電圧補正用バッファメモリ181に保持させた後、処理はステップST32に進む。一方、ECC回路160による誤り訂正処理が失敗した場合(ステップST30;no)、処理はステップST60に進む。なお、ステップST60~ST80の処理は、図9の場合と同等であるため、その説明を省略する。
ステップST32において、メモリコントローラ100は、メモリ120内の履歴テーブルを再度参照し、読出し対象のページを含むセルユニットCU内の他のページに対応する読出し動作(図19の場合では、読出し動作BR)のシフト量Δを把握する。
ステップST33において、メモリコントローラ100は、ステップST32において把握したシフト量Δに基づいてシフトリードコマンドを発行する。これにより、チップChipは、履歴テーブルのシフト量を適用した読出し電圧によって誤り訂正前下位読出しデータSR_Lを読み出し、メモリコントローラ100に出力する。誤り訂正前下位読出しデータSR_Lは、メモリコントローラ100内において、ECC回路160に転送されると共に、読出し電圧補正用バッファメモリ181に保持される。
ステップST34において、ECC回路160は、誤り訂正前下位読出しデータSR_Lに対して誤り訂正処理を実行する。ECC回路160による誤り訂正処理が成功した場合(ステップST34;yes)、ECC回路160は、誤り訂正後下位読出しデータEXP_Lを読出し電圧補正用バッファメモリ181に保持させた後、処理はステップST40に進む。一方、ECC回路160による誤り訂正処理が失敗した場合(ステップST34;no)、処理はステップST60に進む。
ステップST40において、読出し電圧補正回路180は、図10~図13に示したシフト量算出処理と同等の処理を実行する。そして、ステップST50において、メモリコントローラ100は、算出したシフト量Δによって履歴テーブルを更新し、読出し処理を終了する。
3.2 本実施形態に係る効果
第3実施形態によれば、メモリコントローラ100は、ランダムリード処理によってページ単位でデータが読み出された際に、更なるシフトリード処理を実行することで、誤り訂正処理を実行することができる。より具体的には、ランダムリード処理が上位ページのように2種類の読出し電圧を用いたシフトリード処理である場合、下位ページのシフトリード処理を更に実行する。これにより、第1実施形態と同等の動作を実行することができ、ひいては、第1実施形態と同等の効果を奏することができる。
4. 第4実施形態
第3実施形態では、ランダムリード処理が実行された際に、追加のシフトリード処理を実行することによってシフト量算出処理を実行する場合について説明したが、これに限られない。例えば、ランダムリード処理が実行された際に、シフトリード処理を実行する代わりにシングルステートリード処理を実行してもよい。
シフトリード処理は、互いに異なる複数個の読出し電圧を1つのセットとして印加することによって、特定のページのデータを確定させる。これに対し、シングルステートリード処理は、単一の読出し電圧を印加することによって、当該読出し電圧に対する閾値電圧の大小関係を確定する処理である。このため、シングルステートリード処理は、読出し回数が少ない分、シフトリード処理よりも短時間で実行可能である。
以下の説明では、第3実施形態と同等の構成及び動作については説明を省略し、第3実施形態と異なる構成及び動作について主に説明する。
4.1 メモリセルトランジスタの閾値分布について
図20は、第4実施形態に係るメモリシステムの各メモリセルトランジスタMTの取り得るデータ、閾値電圧分布、及び読出し時に用いる電圧について示したダイアグラムである。第4実施形態では、1つのメモリセルトランジスタMTが例えば3ビットデータを保持可能な場合を想定する。この3ビットデータを、下位のビットからそれぞれ下位(Lower)ビット、中位(Middle)ビット、及び上位(Upper)ビットと呼ぶことにする。そして、同一のセルユニットCUに属するメモリセルの保持する下位ビットの集合を下位ページと呼び、中位ビットの集合を中位ページと呼び、上位ビットの集合を上位ページと呼ぶ。
この場合、メモリセルトランジスタMTは、閾値電圧に応じて8個の状態を取ることが出来る。この8個の状態を、閾値電圧の低いものから順に、“Er”状態、“A”状態、“B”状態、“C”状態、“D”状態、“E”状態、“F”状態、及び“G”状態と呼ぶことにする。
“Er”状態~“B”状態については、第1実施形態における図5における説明と同等である。なお、電圧VA~VCの大きさは、図5の場合と異なり得る。“C”状態のメモリセルトランジスタMTの閾値電圧は、電圧VC以上であり且つ電圧VD(>VC)未満である。“D”状態のメモリセルトランジスタMTの閾値電圧は、電圧VD以上であり且つ電圧VE(>VD)未満である。“E”状態のメモリセルトランジスタMTの閾値電圧は、電圧VE以上であり且つ電圧VF(<VE)未満である。“F”状態のメモリセルトランジスタMTの閾値電圧は、電圧VF以上であり且つ電圧VG(<VF)未満である。“G”状態のメモリセルトランジスタMTの閾値電圧は、電圧VG以上であり且つ電圧VREAD未満である。このように分布する8個の状態のうちで、“G”状態が、閾値電圧の最も高い状態である。
上記閾値電圧分布は、前述の下位ビット、中位ビット、及び上位ビットからなる3ビット(3ページ)データを書き込むことで実現される。すなわち、上記“Er”状態から“G”状態と、下位ビット、中位ビット、及び上位ビットとの関係は、例えば、次の通りである。
“Er”状態:“111”(“上位/中位/下位”の順で表記)
“A”状態:“110”
“B”状態:“100”
“C”状態:“000”
“D”状態:“010”
“E”状態:“011”
“F”状態:“001”
“G”状態:“101”
このように、閾値電圧分布において隣り合う2つの状態に対応するデータ間では、3ビットのうちの1ビットのみが変化する。
従って、下位ビットを読み出す際には、下位ビットの値(“0”or“1”)が変化する境界に相当する電圧を用いれば良く、このことは中位ビット及び上位ビットでも同様である。
すなわち、図20に示すように、下位ページ読出しは、“Er”状態と“A”状態とを区別する電圧VA、及び“D”状態と“E”状態とを区別する電圧VEを読出し電圧として用いる。電圧VA及びVEを用いた読出し動作を、それぞれ読出し動作AR及びERと呼ぶ。
中位ページ読出しは、“A”状態と“B”状態とを区別する電圧VB、“C”状態と“D”状態とを区別する電圧VD、及び“E”状態と“F”状態とを区別する電圧VFを読出し電圧として用いる。電圧VD及びVFを用いた読出し動作を、それぞれ読出し動作DR及びFRと呼ぶ。
そして上位ページ読出しは、“B”状態と“C”状態とを区別する電圧VC、及び“F”状態と“G”状態とを区別する電圧VGを読出し電圧として用いる。電圧VC及びVGを用いた読出し動作を、それぞれ読出し動作CR及びGRと呼ぶ。
4.2 読出し電圧補正回路の構成
次に、第4実施形態に係るメモリシステムの読出し電圧補正回路の構成について、図21示すブロック図を用いて説明する。図21に示すように、読出し電圧補正回路180は、分離データ生成回路186を更に備えている。
分離データ生成回路186は、例えば、少なくとも否定(NOT)演算、及び論理和(OR)演算が可能な演算機能を備えている。また、分離データ生成回路186は、読出し電圧補正用バッファメモリ181に保持されたデータに対して所定の論理演算を実行しつつ、所定の条件を満たすデータの一部を分離データとして切出す機能を備えている。分離データ生成回路186は、当該分離データをビットカウンタ182に送出する。分離データの詳細については後述する。
4.3 シフト量算出処理を伴う下位ページ読出し処理
まず、3ページのうち下位ページをランダムリード処理によって読み出す場合にシフト量算出処理を実行する際の動作について図22に示すフローチャートを用いて説明する。図22は、第3実施形態における図19に対応し、ステップST21に代えて、ステップST22が実行され、ステップST32~ST34に代えてステップST35~ST37が実行される。
図22に示すように、ステップST10において、メモリコントローラ100は、メモリ120内の履歴テーブルを参照し、読出し対象のページに対応する読出し動作(図22の場合では、読出し動作AR及びER)のシフト量Δを把握する。
ステップST22において、メモリコントローラ100は、ステップST10において把握したシフト量Δに基づいてシフトリードコマンドを発行する。これにより、チップChipは、履歴テーブルのシフト量を適用した読出し電圧によって誤り訂正前下位読出しデータSRt_Lを読み出し、メモリコントローラ100に出力する。誤り訂正前下位読出しデータSRt_Lは、メモリコントローラ100内において、ECC回路160に転送されると共に、読出し電圧補正用バッファメモリ181に保持される。
ステップST30において、ECC回路160は、誤り訂正前下位読出しデータSRt_Lに対して誤り訂正処理を実行する。ECC回路160による誤り訂正処理が成功した場合(ステップST30;yes)、ECC回路160は、誤り訂正後下位読出しデータEXPt_Lを読出し電圧補正用バッファメモリ181に保持させた後、処理はステップST35に進む。一方、ECC回路160による誤り訂正処理が失敗した場合(ステップST30;no)、処理はステップST60に進む。なお、ステップST60~ST80の処理は、図19の場合と同等であるため、その説明を省略する。
ステップST35において、メモリコントローラ100は、電圧VCを読出し電圧に用いたシングルステートリードコマンドを発行する。これにより、チップChipは、シングルステート読出しデータSSRt_CRを読み出し、メモリコントローラ100に出力する。シングルステート読出しデータSSRt_CRは、メモリコントローラ100内において、読出し電圧補正用バッファメモリ181に保持される。
ステップST36において、分離データ生成回路186は、読出し電圧補正用バッファメモリ181から読み出した誤り訂正前下位読出しデータSRt_L及びシングルステート読出しデータSSRt_CRに基づき、誤り訂正前分離データSEP_SRt_L1、及びSEP_SRt_L2を生成する。具体的には、分離データ生成回路186は、誤り訂正前下位読出しデータSRt_Lから、シングルステート読出しデータSSRt_CRのデータが“1”に対応するビットを誤り訂正前分離データSEP_SRt_L1として抽出し、“0”に対応するビットを、誤り訂正前分離データSEP_SRt_L2として抽出する。抽出された誤り訂正前分離データSEP_SRt_L1及びSEP_SRt_L2は、ビットカウンタ182に送出される。
ステップST37において、分離データ生成回路186は、読出し電圧補正用バッファメモリ181から読み出した誤り訂正後下位読出しデータEXPt_L及びシングルステート読出しデータSSRt_CRに基づき、誤り訂正後分離データSEP_EXPt_L1、及びSEP_EXPt_L2を生成する。具体的には、分離データ生成回路186は、誤り訂正後下位読出しデータEXPt_Lから、シングルステート読出しデータSSRt_CRのデータが“1”に対応するビットを誤り訂正後分離データSEP_EXPt_L1として抽出し、“0”に対応するビットを、誤り訂正後分離データSEP_EXPt_L2として抽出する。抽出された誤り訂正後分離データSEP_EXPt_L1及びSEP_EXPt_L2は、ビットカウンタ182に送出される。
ステップST40において、読出し電圧補正回路180は、誤り訂正前分離データSEP_SRt_L1及びSEP_SRt_L2、並びに誤り訂正後分離データSEP_EXPt_L1及びSEP_EXPt_L2に基づいて、シフト量算出処理を実行する。シフト量算出処理の詳細は、後述する。
ステップST50において、メモリコントローラ100は、ステップST40において算出されたシフト量Δをメモリ120の履歴テーブル内における対応する領域に保持することにより、履歴テーブルを更新する。
以上により、一連の処理が終了する。
4.4 下位ページ読出し処理に基づくシフト量算出処理
図23は、第4実施形態に係るメモリシステムにおける、下位ページ読出し処理に基づくシフト量算出処理を説明するための模式図である。図23では、シフト量算出処理のうち、評価指標算出対象のカウント値が選択されるまでの処理が示される。
図23に示すように、誤り訂正前下位読出しデータSRt_Lは、セルユニットCU内のメモリセルトランジスタMTを2通りに分類する。すなわち、誤り訂正前下位読出しデータSRt_Lは、閾値電圧が電圧VA未満、又は電圧VE以上の場合にデータ“1”となり、該当するメモリセルトランジスタMTは“Er”状態、又は“E”状態~“G”状態の閾値分布に属しているとみなされる。また、誤り訂正前下位読出しデータSRt_Lは、閾値電圧が電圧VA以上電圧VE未満の場合にデータ“0”となり、該当するメモリセルトランジスタMTは“A”状態~“D”状態の閾値分布に属しているとみなされる。
シングルステート読出しデータSSRt_CRは、閾値電圧がVC未満の場合にデータ“1”となり、該当するメモリセルトランジスタMTは“Er”状態~“B”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータSSRt_CRは、閾値電圧がVC以上の場合にデータ“0”となり、“C”状態~“G”状態の閾値分布に属しているとみなされる。
このため、誤り訂正前分離データSEP_SRt_L1は、“Er”状態~“B”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを、2通りに(閾値電圧が電圧VA未満の場合にはデータ“1”に、電圧VA以上の場合にはデータ“0”に)分類する。すなわち、誤り訂正前分離データSEP_SRt_L1がデータ“1”となるメモリセルトランジスタMTは“Er”状態の閾値分布に属しているとみなされ、データ“0”となるメモリセルトランジスタMTは“A”状態又は“B”状態の閾値分布に属しているとみなされる。また、誤り訂正前分離データSEP_SRt_L2は、“C”状態~“G”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを、2通りに(閾値電圧が電圧VE未満の場合にはデータ“0”に、電圧VE以上の場合にはデータ“1”に)分類する。すなわち、誤り訂正前分離データSEP_SRt_L2がデータ“0”となるメモリセルトランジスタMTは“C”状態又は“D”状態の閾値分布に属しているとみなされ、データ“1”となるメモリセルトランジスタMTは“E”状態~“G”状態の閾値分布に属しているとみなされる。
一方、誤り訂正後分離データSEP_EXPt_L1及びSEP_EXPt_L2はそれぞれ、誤り訂正前分離データSEP_SRt_L1及びSEP_SRt_L2による分類に依らず、メモリセルトランジスタMTを2通りに分類する。すなわち、誤り訂正後分離データSEP_EXPt_L1及びSEP_EXPt_L2がデータ“1”となるメモリセルトランジスタMTは、“Er”状態、又は“E”状態~“G”状態の閾値分布に属していることが期待される。誤り訂正後分離データSEP_EXPt_L1及びSEP_EXPt_L2がデータ“0”となるメモリセルトランジスタMTは、“A”状態~“D”状態の閾値分布に属していることが期待される。
なお、上述の通り、誤り訂正後分離データSEP_EXPt_L1は“Er”状態~“B”状態の閾値分布に、誤り訂正後分離データSEP_EXPt_L2は“C”状態~“G”状態の閾値分布に、属しているとみなされたメモリセルトランジスタMTの集合である。このため、誤り訂正後分離データSEP_EXPt_L1がデータ“1”となるメモリセルトランジスタMTは“Er”状態の閾値分布に、データ“0”となるメモリセルトランジスタMTは、“A”状態~“B”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。また、誤り訂正後分離データSEP_EXPt_L2がデータ“1”となるメモリセルトランジスタMTは“E”状態~“G”状態の閾値分布に、データ“0”となるメモリセルトランジスタMTは、“C”状態~“D”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。
このため、誤り訂正前分離データSEP_SRt_L1及び誤り訂正後分離データSEP_EXPt_L1が取り得る値の組合せC3_L1=(SEP_SRt_L1、SEP_EXPt_L1)は、2×2=4通り存在する。同様に、誤り訂正前分離データSEP_SRt_L2及び誤り訂正後分離データSEP_EXPt_L2が取り得る値の組合せC3_L2=(SEP_SRt_L2、SEP_EXPt_L2)は、2×2=4通り存在する。ビットカウンタ182は、上記したような各々が4通りの組合せC3_L1及びC3_L2毎(すなわち、8通りの組合せ毎)にビット数をカウントする。
図23の例では、ビットセレクタ183は、4通りの組合せC3_L1のうち、組合せC3_L1=(1、0)及び(0、1)の2通りを含む1つの組に着目する。組合せC3_L1=(1、0)の場合は、“A”状態又は“B”状態のデータが書き込まれたメモリセルトランジスタMTから“Er”状態のデータが誤って読み出されたことを示す場合である。組合せC3_L1=(0、1)の場合は、“Er”状態のデータが書き込まれたメモリセルトランジスタMTから“A”状態又は“B”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC3_L1=(1、0)の場合は、「A,B→Er誤読出しケース」を含み、組合せC3_L1=(0、1)の場合は、「Er→A,B誤読出しケース」を含む。
「A,B→Er誤読出しケース」のうち、「A→Er誤読出しケース」の数は、「B→Er誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC3_L1=(1、0)に対応するカウント値は、「A→Er誤読出しケース」に実質的に等しいとみなし得る。同様に、「Er→A,B誤読出しケース」のうち、「Er→A誤読出しケース」の数は、「Er→B誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC3_L1=(0、1)に対応するカウント値は、「Er→A誤読出しケース」に実質的に等しいとみなし得る。
同様に、ビットセレクタ183は、4通りの組合せC3_L2のうち、組合せC3_L2=(0、1)及び(1、0)の2通りを含む1つの組に着目する。組合せC3_L2=(0、1)の場合は、“ “E”状態~“G”状態のデータが書き込まれたメモリセルトランジスタMTから“C”状態又は“D”状態のデータが誤って読み出されたことを示す場合である。組合せC3_L2=(1、0)の場合は、“C”状態又は“D”状態のデータが書き込まれたメモリセルトランジスタMTから“E”状態~“G”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC3_L2=(0、1)の場合は、「E~G→C,D誤読出しケース」を含み、組合せC3_L2=(1、0)の場合は、「C,D→E~G誤読出しケース」を含む。
「E~G→C,D誤読出しケース」のうち、「E→D誤読出しケース」の数は、「F~G→C,D誤読出しケース」及び「E→C誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC3_L2=(0、1)に対応するカウント値は、「E→D誤読出しケース」に実質的に等しいとみなし得る。同様に、「C,D→E~G誤読出しケース」のうち、「D→E誤読出しケース」の数は、「C→E~G誤読出しケース」及び「D→F,G誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC3_L2=(1、0)に対応するカウント値は、「D→E誤読出しケース」に実質的に等しいとみなし得る。
上記した近似を行うことにより、ビットセレクタ183は、電圧VAのシフト量Δを算出する場合、「A→Er誤読出しケース」及び「Er→A誤読出しケース」にそれぞれ実質的に対応する組合せC3_L1=(1、0)及び(0、1)のカウント値を1つの組として選択する。また、ビットセレクタ183は、電圧VEのシフト量Δを算出する場合、「E→D誤読出しケース」及び「D→E誤読出しケース」にそれぞれ実質的に対応する組合せC3_L2=(0、1)及び(1、0)のカウント値を1つの組として選択する。
以上のように動作することにより、ビットセレクタ183は、シフト量算出に用いる2通りのカウント値を含む組を、読出し動作AR及びERについて選択することができる。
4.5 シフト量算出処理を伴う上位ページ読出し処理
次に、3ページのうち上位ページをランダムリード処理によって読み出す場合にシフト量算出処理を実行する際の動作について図24に示すフローチャートを用いて説明する。図24は、図22に対応し、ステップST22に代えて、ステップST22Aが実行され、ステップST35~ST37に代えてステップST35A~ST37Aが実行される。
図24に示すように、ステップST10において、メモリコントローラ100は、メモリ120内の履歴テーブルを参照し、読出し対象のページに対応する読出し動作(図24の場合では、読出し動作CR及びGR)毎のシフト量Δを把握する。
ステップST22Aにおいて、メモリコントローラ100は、ステップST10において把握したシフト量Δに基づいてシフトリードコマンドを発行する。これにより、チップChipは、誤り訂正前上位読出しデータSRt_Uを読み出し、メモリコントローラ100に出力する。誤り訂正前上位読出しデータSRt_Uは、メモリコントローラ100内において、ECC回路160に転送されると共に、読出し電圧補正用バッファメモリ181に保持される。
ステップST30において、ECC回路160は、誤り訂正前上位読出しデータSRt_Uに対して誤り訂正処理を実行する。ECC回路160による誤り訂正処理が成功した場合(ステップST30;yes)、ECC回路160は、誤り訂正後上位読出しデータEXPt_Uを読出し電圧補正用バッファメモリ181に保持させた後、処理はステップST35Aに進む。一方、ECC回路160による誤り訂正処理が失敗した場合(ステップST30;no)、処理はステップST60に進む。なお、ステップST60~ST80の処理は、図22の場合と同等であるため、その説明を省略する。
ステップST35Aにおいて、メモリコントローラ100は、電圧VEを読出し電圧に用いたシングルステートリードコマンドを発行する。これにより、チップChipは、シングルステート読出しデータSSRt_ERを読み出し、メモリコントローラ100に出力する。シングルステート読出しデータSSRt_ERは、メモリコントローラ100内において、読出し電圧補正用バッファメモリ181に保持される。
ステップST36Aにおいて、分離データ生成回路186は、読出し電圧補正用バッファメモリ181から読み出した誤り訂正前上位読出しデータSRt_U及びシングルステート読出しデータSSRt_ERに基づき、誤り訂正前分離データSEP_SRt_U1、及びSEP_SRt_U2を生成する。具体的には、分離データ生成回路186は、誤り訂正前上位読出しデータSRt_Uから、シングルステート読出しデータSSRt_ERのデータが“1”に対応するビットを誤り訂正前分離データSEP_SRt_U1として抽出し、“0”に対応するビットを誤り訂正前分離データSEP_SRt_U2として抽出する。抽出された誤り訂正前分離データSEP_SRt_U1及びSEP_SRt_U2は、ビットカウンタ182に送出される。
ステップST37Aにおいて、分離データ生成回路186は、読出し電圧補正用バッファメモリ181から読み出した誤り訂正後上位読出しデータEXPt_U及びシングルステート読出しデータSSRt_ERに基づき、誤り訂正後分離データSEP_EXPt_U1、及びSEP_EXPt_U2を生成する。具体的には、分離データ生成回路186は、誤り訂正後上位読出しデータEXPt_Uから、シングルステート読出しデータSSRt_ERのデータが“1”に対応するビットを誤り訂正後分離データSEP_EXPt_U1として抽出し、“0”に対応するビットを誤り訂正後分離データSEP_EXPt_U2として抽出する。抽出された誤り訂正後分離データSEP_EXPt_U1及びSEP_EXPt_U2は、ビットカウンタ182に送出される。
ステップST40において、読出し電圧補正回路180は、誤り訂正前分離データSEP_SRt_U1及びSEP_SRt_U2、並びに誤り訂正後分離データSEP_EXPt_U1及びSEP_EXPt_U2に基づいて、シフト量算出処理を実行する。シフト量算出処理の詳細は、後述する。
ステップST50において、メモリコントローラ100は、ステップST40において算出されたシフト量Δをメモリ120の履歴テーブル内における対応する領域に保持することにより、履歴テーブルを更新する。
以上により、一連の処理が終了する。
4.6 上位ページ読出し処理に基づくシフト量算出処理
図25は、第4実施形態に係るメモリシステムにおける、上位ページ読出し処理に基づくシフト量算出処理を説明するための模式図である。図25では、シフト量算出処理のうち、評価指標算出対象のカウント値が選択されるまでの処理が示される。
図25に示すように、誤り訂正前上位読出しデータSRt_Uは、セルユニットCU内のメモリセルトランジスタMTを2通りに分類する。すなわち、誤り訂正前上位読出しデータSRt_Uは、閾値電圧が電圧VC未満、又は電圧VG以上の場合にデータ“1”となり、該当するメモリセルトランジスタMTは“Er”状態~“B”状態、又は“G”状態の閾値分布に属しているとみなされる。また、誤り訂正前上位読出しデータSRt_Uは、閾値電圧が電圧VC以上電圧VG未満の場合にデータ“0”となり、該当するメモリセルトランジスタMTは“C”状態~“F”状態の閾値分布に属しているとみなされる。
シングルステート読出しデータSSRt_ERは、閾値電圧がVE未満の場合にデータ“1”となり、該当するメモリセルトランジスタMTは“Er”状態~“D”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータSSRt_ERは、閾値電圧がVE以上の場合にデータ“0”となり、“E”状態~“G”状態の閾値分布に属しているとみなされる。
このため、誤り訂正前分離データSEP_SRt_U1は、“Er”状態~“D”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを、2通りに(閾値電圧が電圧VC未満の場合にはデータ“1”に、電圧VC以上の場合にはデータ“0”に)分類する。すなわち、誤り訂正前分離データSEP_SRt_U1がデータ“1”となるメモリセルトランジスタMTは“Er”状態~“B”状態の閾値分布に属しているとみなされ、データ“0”となるメモリセルトランジスタMTは“C”状態又は“D”状態の閾値分布に属しているとみなされる。また、誤り訂正前分離データSEP_SRt_U2は、“E”状態~“G”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを、2通りに(閾値電圧が電圧VG未満の場合にはデータ“0”に、電圧VG以上の場合にはデータ“1”に)分類する。すなわち、誤り訂正前分離データSEP_SRt_U2がデータ“0”となるメモリセルトランジスタMTは“E”状態又は“F”状態の閾値分布に属しているとみなされ、データ“1”となるメモリセルトランジスタMTは“G”状態の閾値分布に属しているとみなされる。
一方、誤り訂正後分離データSEP_EXPt_U1及びSEP_EXPt_U2はそれぞれ、誤り訂正前分離データSEP_SRt_U1及びSEP_SRt_U2による分類に依らず、メモリセルトランジスタMTを2通りに分類する。すなわち、誤り訂正後分離データSEP_EXPt_U1及びSEP_EXPt_U2がデータ“1”となるメモリセルトランジスタMTは、“Er”状態~“B”状態、又は“G”状態の閾値分布に属していることが期待される。誤り訂正後分離データSEP_EXPt_U1及びSEP_EXPt_U2がデータ“0”となるメモリセルトランジスタMTは、“C”状態~“F”状態の閾値分布に属していることが期待される。
なお、上述の通り、誤り訂正後分離データSEP_EXPt_U1は“Er”状態~“D”状態の閾値分布に、誤り訂正後分離データSEP_EXPt_U2は“E”状態~“G”状態の閾値分布に、属しているとみなされたメモリセルトランジスタMTの集合である。このため、誤り訂正後分離データSEP_EXPt_U1がデータ“1”となるメモリセルトランジスタMTは“Er”状態~“B”状態の閾値分布に、データ“0”となるメモリセルトランジスタMTは、“C”状態又は“D”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。また、誤り訂正後分離データSEP_EXPt_U2がデータ“1”となるメモリセルトランジスタMTは“G”状態の閾値分布に、データ“0”となるメモリセルトランジスタMTは、“E”状態又は“F”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。
このため、誤り訂正前分離データSEP_SRt_U1及び誤り訂正後分離データSEP_EXPt_U1が取り得る値の組合せC3_U1=(SEP_SRt_U1、SEP_EXPt_U1)は、2×2=4通り存在する。同様に、誤り訂正前分離データSEP_SRt_U2及び誤り訂正後分離データSEP_EXPt_U2が取り得る値の組合せC3_U2=(SEP_SRt_U2、SEP_EXPt_U2)は、2×2=4通り存在する。ビットカウンタ182は、上記したような各々が4通りの組合せC3_U1及びC3_U2毎(すなわち、8通りの組合せ毎)にビット数をカウントする。
図25の例では、ビットセレクタ183は、4通りの組合せC3_U1のうち、組合せC3_U1=(1、0)及び(0、1)の2通りを含む1つの組に着目する。組合せC3_U1=(1、0)の場合は、“C”状態又は“D”状態のデータが書き込まれたメモリセルトランジスタMTから“Er”状態~“B”状態のデータが誤って読み出されたことを示す場合である。組合せC3_U1=(0、1)の場合は、“Er”状態~“B”状態のデータが書き込まれたメモリセルトランジスタMTから“C”状態又は“D”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC3_U1=(1、0)の場合は、「C,D→Er~B誤読出しケース」を含み、組合せC3_U1=(0、1)の場合は、「Er~B→C,D誤読出しケース」を含む。
「C,D→Er~B誤読出しケース」のうち、「C→B誤読出しケース」の数は、「D→Er~B誤読出しケース」及び「C→Er,A誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC3_U1=(1、0)に対応するカウント値は、「C→B誤読出しケース」に実質的に等しいとみなし得る。同様に、「Er~B→C,D誤読出しケース」のうち、「B→C誤読出しケース」の数は、「Er,A→C,D誤読出しケース」及び「B→D誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC3_U1=(0、1)に対応するカウント値は、「B→C誤読出しケース」に実質的に等しいとみなし得る。
同様に、ビットセレクタ183は、4通りの組合せC3_U2のうち、組合せC3_U2=(0、1)及び(1、0)の2通りを含む1つの組に着目する。組合せC3_U2=(0、1)の場合は、“G”状態のデータが書き込まれたメモリセルトランジスタMTから“E”状態又は“F”状態のデータが誤って読み出されたことを示す場合である。組合せC3_U2=(1、0)の場合は、“E”状態又は“F”状態のデータが書き込まれたメモリセルトランジスタMTから“G”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC3_U2=(0、1)の場合は、「G→E,F誤読出しケース」を含み、組合せC3_U2=(1、0)の場合は、「E,F→G誤読出しケース」を含む。
「G→E,F誤読出しケース」のうち、「G→F誤読出しケース」の数は、「G→E誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC3_U2=(0、1)に対応するカウント値は、「G→F誤読出しケース」に実質的に等しいとみなし得る。同様に、「E,F→G誤読出しケース」のうち、「F→G誤読出しケース」の数は、「E→G誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC3_U2=(1、0)に対応するカウント値は、「F→G誤読出しケース」に実質的に等しいとみなし得る。
上記した近似を行うことにより、ビットセレクタ183は、電圧VCのシフト量Δを算出する場合、「C→B誤読出しケース」及び「B→C誤読出しケース」にそれぞれ実質的に対応する組合せC3_U1=(1、0)及び(0、1)のカウント値を1つの組として選択する。また、ビットセレクタ183は、電圧VGのシフト量Δを算出する場合、「G→F誤読出しケース」及び「F→G誤読出しケース」にそれぞれ実質的に対応する組合せC3_U2=(0、1)及び(1、0)のカウント値を1つの組として選択する。
以上のように動作することにより、ビットセレクタ183は、シフト量算出に用いる2通りのカウント値を含む組を、読出し動作CR及びGRについて選択することができる。
4.7 シフト量算出処理を伴う中位ページ読出し処理
次に、3ページのうち中位ページをランダムリード処理によって読み出す場合にシフト量算出処理を実行する際の動作について図26に示すフローチャートを用いて説明する。図26は、図22に対応し、ステップST22に代えて、ステップST22Bが実行され、ステップST35~ST37に代えてステップST35B~ST37Bが実行される。
図26に示すように、ステップST10において、メモリコントローラ100は、メモリ120内の履歴テーブルを参照し、読出し対象のページに対応する読出し動作(図26の場合では、読出し動作BR、DR、及びFR)毎のシフト量Δを把握する。
ステップST22Bにおいて、メモリコントローラ100は、ステップST10において把握したシフト量Δに基づいてシフトリードコマンドを発行する。これにより、チップChipは、誤り訂正前中位読出しデータSRt_Mを読み出し、メモリコントローラ100に出力する。誤り訂正前中位読出しデータSRt_Mは、メモリコントローラ100内において、ECC回路160に転送されると共に、読出し電圧補正用バッファメモリ181に保持される。
ステップST30において、ECC回路160は、誤り訂正前中位読出しデータSRt_Mに対して誤り訂正処理を実行する。ECC回路160による誤り訂正処理が成功した場合(ステップST30;yes)、ECC回路160は、誤り訂正後中位読出しデータEXPt_Mを読出し電圧補正用バッファメモリ181に保持させた後、処理はステップST35Bに進む。一方、ECC回路160による誤り訂正処理が失敗した場合(ステップST30;no)、処理はステップST60に進む。なお、ステップST60~ST80の処理は、図22の場合と同等であるため、その説明を省略する。
ステップST35Bにおいて、メモリコントローラ100は、電圧VC及びVEを読出し電圧に用いたシングルステートリードコマンドを発行する。これにより、チップChipは、シングルステート読出しデータSSRt_CR及びSSRt_ERを読み出し、メモリコントローラ100に出力する。シングルステート読出しデータSSRt_CR及びSSRt_ERは、メモリコントローラ100内において、読出し電圧補正用バッファメモリ181に保持される。
ステップST36Bにおいて、分離データ生成回路186は、読出し電圧補正用バッファメモリ181から読み出した誤り訂正前中位読出しデータSRt_M及びシングルステート読出しデータSSRt_CR及びSSRt_ERに基づき、誤り訂正前分離データSEP_SRt_M1、SEP_SRt_M2、及びSEP_SRt_M3を生成する。具体的には、分離データ生成回路186は、誤り訂正前中位読出しデータSRt_Mから、シングルステート読出しデータSSRt_CRのデータが“1”に対応するビットを誤り訂正前分離データSEP_SRt_M1として抽出する。また、分離データ生成回路186は、誤り訂正前中位読出しデータSRt_Mから、シングルステート読出しデータSSRt_CR及びSSRt_ERのデータがそれぞれ“0”及び“1”に対応するビットを誤り訂正前分離データSEP_SRt_M2として抽出する。また、分離データ生成回路186は、誤り訂正前中位読出しデータSRt_Mから、シングルステート読出しデータSSRt_ERのデータが“0”に対応するビットを誤り訂正前分離データSEP_SRt_M3として抽出する。抽出された誤り訂正前分離データSEP_SRt_M1、SEP_SRt_M2、及びSEP_SRt_M3は、ビットカウンタ182に送出される。
ステップST37Bにおいて、分離データ生成回路186は、読出し電圧補正用バッファメモリ181から読み出した誤り訂正後中位読出しデータEXPt_M及びシングルステート読出しデータSSRt_CR及びSSRt_ERに基づき、誤り訂正後分離データSEP_EXPt_M1、SEP_EXPt_M2、及びSEP_EXPt_M3を生成する。具体的には、分離データ生成回路186は、誤り訂正後中位読出しデータEXPt_Mから、シングルステート読出しデータSSRt_CRのデータが“1”に対応するビットを誤り訂正後分離データSEP_EXPt_M1として抽出する。また、分離データ生成回路186は、誤り訂正後中位読出しデータEXPt_Mから、シングルステート読出しデータSSRt_CR及びSSRt_ERのデータがそれぞれ“0”及び“1”に対応するビットを誤り訂正後分離データSEP_EXPt_M2として抽出する。また、分離データ生成回路186は、誤り訂正後中位読出しデータEXPt_Mから、シングルステート読出しデータSSRt_ERのデータが“0”に対応するビットを誤り訂正後分離データSEP_EXPt_M3として抽出する。抽出された誤り訂正後分離データSEP_EXPt_M1~SEP_EXPt_M3は、ビットカウンタ182に送出される。
ステップST40において、読出し電圧補正回路180は、誤り訂正前分離データSEP_SRt_M1~SEP_SRt_M3、及び誤り訂正後分離データSEP_EXPt_M1~SEP_EXPt_M3に基づいて、シフト量算出処理を実行する。シフト量算出処理の詳細は、後述する。
ステップST50において、メモリコントローラ100は、ステップST40において算出されたシフト量Δをメモリ120の履歴テーブル内における対応する領域に保持することにより、履歴テーブルを更新する。
以上により、読出し処理が終了する。
4.8 中位ページ読出し処理に基づくシフト量算出処理
図27及び図28は、第4実施形態に係るメモリシステムにおける、中位ページ読出し処理に基づくシフト量算出処理を説明するための模式図である。図27では、シフトリード処理及びシングルステートリード処理によって読み出されるデータが示され、図28では、シフト量算出処理のうち、評価指標算出対象のカウント値が選択されるまでの処理が示される。
図27に示すように、誤り訂正前中位読出しデータSRt_Mは、閾値電圧に応じて、セルユニットCU内のメモリセルトランジスタMTを2通りに分類する。すなわち、誤り訂正前中位読出しデータSRt_Mは、閾値電圧が電圧VB未満又は電圧VD以上電圧VF未満の場合にデータ“1”となり、該当するメモリセルトランジスタMTは“Er”状態、“A”状態、“D”状態、又は“E”状態の閾値分布に属しているとみなされる。誤り訂正前中位読出しデータSRt_Mは、閾値電圧が電圧VB以上電圧VD未満、又は電圧VF以上の場合にデータ“0”となり、該当するメモリセルトランジスタMTは“B”状態、“C”状態、“F”状態、又は“G”状態の閾値分布に属しているとみなされる。
シングルステート読出しデータSSRt_CR及びSSRt_ERについてはそれぞれ、下位ページ読出しの場合、及び上位ページ読出しの場合と同等である。
このため、図28に示すように、誤り訂正前分離データSEP_SRt_M1は、“Er”状態~“B”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを、2通りに(閾値電圧が電圧VB未満の場合にはデータ“1”に、電圧VB以上の場合にはデータ“0”に)分類する。すなわち、誤り訂正前分離データSEP_SRt_M1がデータ“1”となるメモリセルトランジスタMTは“Er”状態又は“A”状態の閾値分布に属しているとみなされ、データ“0”となるメモリセルトランジスタMTは“B”状態の閾値分布に属しているとみなされる。また、誤り訂正前分離データSEP_SRt_M2は、“C”状態~“D”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを、2通りに(閾値電圧が電圧VD未満の場合にはデータ“0”に、電圧VD以上の場合にはデータ“1”に)分類する。すなわち、誤り訂正前分離データSEP_SRt_M2がデータ“0”となるメモリセルトランジスタMTは“C”状態の閾値分布に属しているとみなされ、データ“1”となるメモリセルトランジスタMTは“D”状態の閾値分布に属しているとみなされる。また、誤り訂正前分離データSEP_SRt_M3は、“E”状態~“G”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを、2通りに(閾値電圧が電圧VF未満の場合にはデータ“1”に、電圧VF以上の場合にはデータ“0”に)分類する。すなわち、誤り訂正前分離データSEP_SRt_M3がデータ“1”となるメモリセルトランジスタMTは“E”状態の閾値分布に属しているとみなされ、データ“0”となるメモリセルトランジスタMTは“F”状態又は“G”状態の閾値分布に属しているとみなされる。
一方、誤り訂正後分離データSEP_EXPt_M1~SEP_EXPt_M3はそれぞれ、誤り訂正前分離データSEP_SRt_M1~SEP_SRt_M3による分類に依らず、メモリセルトランジスタMTを2通りに分類する。すなわち、誤り訂正後分離データSEP_EXPt_M1~SEP_EXPt_M3がデータ“1”となるメモリセルトランジスタMTは、“Er”状態、“A”状態、“D”状態、又は“E”状態の閾値分布に属していることが期待される。誤り訂正後分離データSEP_EXPt_M1~SEP_EXPt_M3がデータ“0”となるメモリセルトランジスタMTは、“B”状態、“C”状態、“F”状態、又は“G”状態の閾値分布に属していることが期待される。
なお、上述の通り、誤り訂正後分離データSEP_EXPt_M1は“Er”状態~“B”状態の閾値分布に、誤り訂正後分離データSEP_EXPt_M2は“C”状態又は“D”状態の閾値分布に、誤り訂正後分離データSEP_EXPt_M3は“E”状態~“G”状態の閾値分布に、属しているとみなされたメモリセルトランジスタMTの集合である。このため、誤り訂正後分離データSEP_EXPt_M1がデータ“1”となるメモリセルトランジスタMTは“Er”状態又は“A”状態の閾値分布に、データ“0”となるメモリセルトランジスタMTは、“B”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。また、誤り訂正後分離データSEP_EXPt_M2がデータ“1”となるメモリセルトランジスタMTは“D”状態の閾値分布に、データ“0”となるメモリセルトランジスタMTは、“C”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。また、誤り訂正後分離データSEP_EXPt_M3がデータ“1”となるメモリセルトランジスタMTは“E”状態の閾値分布に、データ“0”となるメモリセルトランジスタMTは、“F”状態又は“G”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。
このため、誤り訂正前分離データSEP_SRt_M1及び誤り訂正後分離データSEP_EXPt_M1が取り得る値の組合せC3_M1=(SEP_SRt_M1、SEP_EXPt_M1)は、2×2=4通り存在する。同様に、誤り訂正前分離データSEP_SRt_M2及び誤り訂正後分離データSEP_EXPt_M2が取り得る値の組合せC3_M2=(SEP_SRt_M2、SEP_EXPt_M2)は、2×2=4通り存在する。誤り訂正前分離データSEP_SRt_M3及び誤り訂正後分離データSEP_EXPt_M3が取り得る値の組合せC3_M3=(SEP_SRt_M3、SEP_EXPt_M3)は、2×2=4通り存在する。ビットカウンタ182は、上記したような各々が4通りの組合せC3_M1、C3_M2、及びC3_M3毎(すなわち、12通りの組合せ毎)にビット数をカウントする。
図28の例では、ビットセレクタ183は、4通りの組合せC3_M1のうち、組合せC3_M1=(1、0)及び(0、1)の2通りを含む1つの組に着目する。組合せC3_M1=(1、0)の場合は、“B”状態のデータが書き込まれたメモリセルトランジスタMTから“Er”状態又は“A”状態のデータが誤って読み出されたことを示す場合である。組合せC3_M1=(0、1)の場合は、“Er”状態又は“A”状態のデータが書き込まれたメモリセルトランジスタMTから“B”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC3_M1=(1、0)の場合は、「B→Er,A誤読出しケース」を含み、組合せC3_M1=(0、1)の場合は、「Er,A→B誤読出しケース」を含む。
「B→Er,A誤読出しケース」のうち、「B→A誤読出しケース」の数は、「B→Er誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC3_M1=(1、0)に対応するカウント値は、「B→A誤読出しケース」に実質的に等しいとみなし得る。同様に、「Er,A→B誤読出しケース」のうち、「A→B誤読出しケース」の数は、「Er→B誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC3_M1=(0、1)に対応するカウント値は、「A→B誤読出しケース」に実質的に等しいとみなし得る。
同様に、ビットセレクタ183は、4通りの組合せC3_M2のうち、組合せC3_M2=(0、1)及び(1、0)の2通りを含む1つの組に着目する。組合せC3_M2=(0、1)の場合は、 “D”状態のデータが書き込まれたメモリセルトランジスタMTから“C”状態のデータが誤って読み出されたことを示す場合である。組合せC3_M2=(1、0)の場合は、 “C”状態のデータが書き込まれたメモリセルトランジスタMTから“D”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC3_M2=(0、1)に対応するカウント値は、「D→C誤読出しケース」に等しくなり、組合せC3_M2=(1、0)に対応するカウント値は、「C→D誤読出しケース」に等しくなる。
同様に、ビットセレクタ183は、4通りの組合せC3_M3のうち、組合せC3_M3=(1、0)及び(0、1)の2通りを含む1つの組に着目する。組合せC3_M3=(1、0)の場合は、“F”状態、又は“G”状態のデータが書き込まれたメモリセルトランジスタMTから“E”状態のデータが誤って読み出されたことを示す場合である。組合せC3_M3=(0、1)の場合は、 “E”状態のデータが書き込まれたメモリセルトランジスタMTから“F”状態又は“G”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC3_M3=(1、0)の場合は、「F,G→E誤読出しケース」を含み、組合せC3_M3=(0、1)の場合は、「E→F,G誤読出しケース」を含む。
「F,G→E誤読出しケース」のうち、「F→E誤読出しケース」の数は、「G→E誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC3_M3=(1、0)に対応するカウント値は、「F→E誤読出しケース」に実質的に等しいとみなし得る。同様に、「E→F,G誤読出しケース」のうち、「E→F誤読出しケース」の数は、「E→G誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC3_M3=(0、1)に対応するカウント値は、「E→F誤読出しケース」に実質的に等しいとみなし得る。
上記した近似を行うことにより、ビットセレクタ183は、電圧VBのシフト量Δを算出する場合、「B→A誤読出しケース」及び「A→B誤読出しケース」にそれぞれ実質的に対応する組合せC3_M1=(1、0)及び(0、1)のカウント値を1つの組として選択する。また、ビットセレクタ183は、電圧VDのシフト量Δを算出する場合、「D→C誤読出しケース」及び「C→D誤読出しケース」にそれぞれ実質的に対応する組合せC3_M2=(0、1)及び(1、0)のカウント値を1つの組として選択する。また、ビットセレクタ183は、電圧VFのシフト量Δを算出する場合、「F→E誤読出しケース」及び「E→F誤読出しケース」にそれぞれ実質的に対応する組合せC3_M3=(1、0)及びC3_M3=(0、1)のカウント値を1つの組として選択する。
以上のように動作することにより、ビットセレクタ183は、シフト量算出に用いる2通りのカウント値を含む組を、読出し動作BR、DR、及びFRについて選択することができる。
4.9 本実施形態に係る効果
第4実施形態によれば、メモリコントローラ100は、メモリセルトランジスタMTに3ビットデータを保持可能な場合でも、ランダムリード処理に伴ってシングルステート読出しデータを読み出すことで、誤り訂正処理を実行することができる。より具体的には、ランダムリード処理が下位ページ又は上位ページのように2種類の読出し電圧を用いたシフトリード処理である場合、分離データ生成回路186は、1種類のシングルステート読出しデータを用いて誤り訂正前後の読出しデータをそれぞれ2つに分離する。また、ランダムリード処理が中位ページのように3種類の読出し電圧を用いたシフトリード処理である場合、分離データ生成回路186は、2種類のシングルステート読出しデータを用いて誤り訂正前後の読出しデータをそれぞれ3つに分離する。これにより、ビットカウンタ182は、誤り訂正前後の分離データの組毎にビット数をカウントし、ビットセレクタ183は、誤り訂正前後の分離データの組毎に評価指標算出対象の2つの組合せを選択することができる。このため、ランダムリード処理の場合に、更なるシフトリード処理を実行することなく、ランダムリード処理対象のページの読出しに用いる読出し電圧のシフト量を算出することができる。したがって、読出し電圧補正によるレイテンシの増加を抑制することができる。
5. 第5実施形態
第4実施形態では、メモリセルトランジスタMTに3ビットのデータが保持可能な場合について説明したが、これに限られない。例えば、メモリセルトランジスタMTは4ビット以上のデータが保持可能であってもよい。
以下の説明では、第4実施形態と同等の構成及び動作については説明を省略し、第4実施形態と異なる構成及び動作について主に説明する。
5.1 メモリセルトランジスタの閾値分布について
図29は、第5実施形態に係るメモリシステムの各メモリセルトランジスタMTの取り得るデータ、閾値電圧分布、及び読出し時に用いる電圧について示したダイアグラムである。第5実施形態では、1つのメモリセルトランジスタMTが例えば4ビットデータを保持可能な場合を想定する。この4ビットデータを、下位のビットからそれぞれ下位(Lower)ビット、中位(Middle)ビット、上位(Upper)ビット、トップ(Top)ビットと呼ぶことにする。そして、同一のセルユニットCUに属するメモリセルの保持する下位ビットの集合を下位ページと呼び、中位ビットの集合を中位ページと呼び、上位ビットの集合を上位ページと呼び、トップビットの集合をトップページと呼ぶ。
上述の通り、メモリセルトランジスタMTは、4ビットデータを保持可能である。すなわち、メモリセルトランジスタMTは、閾値電圧に応じて16個の状態を取ることが出来る。この16個の状態を、閾値電圧の低いものから順に、“S0”状態、“S1”状態、“S2”状態、“S3”状態、“S4”状態、“S5”状態、“S6”状態、“S7”状態、“S8”状態、“S9”状態、“S10”状態、“S11”状態、“S12”状態、“S13”状態、“S14”状態、及び“S15”状態と呼ぶことにする。
“S0”状態のメモリセルトランジスタMTの閾値電圧は、電圧VS1未満であり、データの消去状態に相当する。“Sk”状態のメモリセルトランジスタMTの閾値電圧は、電圧VS(k)以上であり且つ電圧VS(k+1)(>VS(k))未満である(1≦k≦14)。“S15”状態のメモリセルトランジスタMTの閾値電圧は、電圧VS15以上であり且つ電圧VREAD未満である。このように分布する16個の状態のうちで、“S15”状態が、閾値電圧の最も高い状態である。
上記閾値電圧分布は、前述の下位ビット、中位ビット、上位ビット、及びトップビットからなる4ビット(4ページ)データを書き込むことで実現される。すなわち、上記“S0”状態から“S15”状態と、下位ビット、中位ビット、上位ビット、及びトップビットとの関係は、例えば、次の通りである。
“S0”状態:“1111”(“トップ/上位/中位/下位”の順で表記)
“S1”状態:“1110”
“S2”状態:“1010”
“S3”状態:“1000”
“S4”状態:“1001”
“S5”状態:“0001”
“S6”状態:“0000”
“S7”状態:“0010”
“S8”状態:“0110”
“S9”状態:“0100”
“S10”状態:“1100”
“S11”状態:“1101”
“S12”状態:“0101”
“S13”状態:“0111”
“S14”状態:“0011”
“S15”状態:“1011”
このように、閾値電圧分布において隣り合う2つの状態に対応するデータ間では、4ビットのうちの1ビットのみが変化する。
従って、下位ビットを読み出す際には、下位ビットの値(“0”or“1”)が変化する境界に相当する電圧を用いれば良く、このことは中位ビット、上位ビット、及びトップビットでも同様である。
すなわち、図29に示すように、下位ページ読出しは、“S0”状態と“S1”状態とを区別する電圧VS1、“S3”状態と“S4”状態とを区別する電圧VS4、“S5”状態と“S6”状態とを区別する電圧VS6、及び“S10”状態と“S11”状態とを区別する電圧VS11を読出し電圧として用いる。電圧VS1、VS4、VS6、及びVS11を用いた読出し動作を、それぞれ読出し動作1R、4R、6R、及び11Rと呼ぶ。
中位ページ読出しは、“S2”状態と“S3”状態とを区別する電圧VS3、“S6”状態と“S7”状態とを区別する電圧VS7、“S8”状態と“S9”状態とを区別する電圧VS9、及び“S12”状態と“S13”状態とを区別する電圧VS13を読出し電圧として用いる。電圧VS3、VS7、VS9、及びVS13を用いた読出し動作を、それぞれ読出し動作3R、7R、9R、及び13Rと呼ぶ。
上位ページ読出しは、“S1”状態と“S2”状態とを区別する電圧VS2、“S7”状態と“S8”状態とを区別する電圧VS8、及び“S13”状態と“S14”状態とを区別する電圧VS14を読出し電圧として用いる。電圧VS2、VS8、及びVS14を用いた読出し動作を、それぞれ読出し動作2R、8R、及び14Rと呼ぶ。
そして、トップページ読出しは、“S4”状態と“S5”状態とを区別する電圧VS5、“S9”状態と“S10”状態とを区別する電圧VS10、“S11”状態と“S12”状態とを区別する電圧VS12、及び“S14”状態と“S15”状態とを区別する電圧VS15を読出し電圧として用いる。電圧VS5、VS10、VS12、及びVS15を用いた読出し動作を、それぞれ読出し動作5R、10R、12R、及び15Rと呼ぶ。
5.2 シフト量算出処理を伴う下位ページ読出し処理
第5実施形態では、一例として、4ページのうち下位ページをランダムリード処理によって読み出す場合にシフト量算出処理を実行する際の動作について図30に示すフローチャートを用いて説明する。図30は、第4実施形態における図22に対応し、ステップST22に代えて、ステップST22Cが実行され、ステップST35~ST37に代えてステップST35C~ST37Cが実行される。
図30に示すように、ステップST10において、メモリコントローラ100は、メモリ120内の履歴テーブルを参照し、読出し対象のページに対応する読出し動作(図30の場合では、読出し動作1R、4R、6R、及び11R)毎のシフト量Δを把握する。
ステップST22Cにおいて、メモリコントローラ100は、ステップST10において把握したシフト量Δに基づいてシフトリードコマンドを発行する。これにより、チップChipは、履歴テーブルのシフト量を適用した読出し電圧によって誤り訂正前下位読出しデータSRq_Lを読み出し、メモリコントローラ100に出力する。誤り訂正前下位読出しデータSRq_Lは、メモリコントローラ100内において、ECC回路160に転送されると共に、読出し電圧補正用バッファメモリ181に保持される。
ステップST30において、ECC回路160は、誤り訂正前下位読出しデータSRq_Lに対して誤り訂正処理を実行する。ECC回路160による誤り訂正処理が成功した場合(ステップST30;yes)、ECC回路160は、誤り訂正後下位読出しデータEXPq_Lを読出し電圧補正用バッファメモリ181に保持させた後、処理はステップST35Cに進む。一方、ECC回路160による誤り訂正処理が失敗した場合(ステップST30;no)、処理はステップST60に進む。なお、ステップST60~ST80の処理は、図22の場合と同等であるため、その説明を省略する。
ステップST35Cにおいて、メモリコントローラ100は、電圧VS2、VS5、及びVS8を読出し電圧に用いたシングルステートリードコマンドを発行する。これにより、チップChipは、シングルステート読出しデータSSRq_2R、SSRq_5R、及びSSRq_8Rを読み出し、メモリコントローラ100に出力する。シングルステート読出しデータSSRq_2R、SSRq_5R、及びSSRq_8Rは、メモリコントローラ100内において、読出し電圧補正用バッファメモリ181に保持される。
ステップST36Cにおいて、分離データ生成回路186は、読出し電圧補正用バッファメモリ181から読み出した誤り訂正前下位読出しデータSRq_L及びシングルステート読出しデータSSRq_2R、SSRq_5R、及びSSRq_8Rに基づき、誤り訂正前分離データSEP_SRq_L1、SEP_SRq_L2、SEP_SRq_L3、及びSEP_SRq_L4を生成する。具体的には、分離データ生成回路186は、誤り訂正前下位読出しデータSRq_Lから、シングルステート読出しデータSSRq_2Rのデータが“1”に対応するビットを誤り訂正前分離データSEP_SRq_L1として抽出し、シングルステート読出しデータSSRq_2R及びSSRq_5Rのデータがそれぞれ“0”及び“1”に対応するビットを、誤り訂正前分離データSEP_SRq_L2として抽出する。分離データ生成回路186は、誤り訂正前下位読出しデータSRq_Lから、シングルステート読出しデータSSRq_5R及びSSRq_8Rのデータがそれぞれ“0”及び“1”に対応するビットを誤り訂正前分離データSEP_SRq_L3として抽出し、シングルステート読出しデータSSRq_8Rのデータが“0”に対応するビットを、誤り訂正前分離データSEP_SRq_L4として抽出する。抽出された誤り訂正前分離データSEP_SRq_L1~SEP_SRq_L4は、ビットカウンタ182に送出される。
ステップST37Cにおいて、分離データ生成回路186は、読出し電圧補正用バッファメモリ181から読み出した誤り訂正後下位読出しデータEXPq_L及びシングルステート読出しデータSSRq_2R、SSRq_5R、及びSSRq_8Rに基づき、誤り訂正後分離データSEP_EXPq_L1、SEP_EXPq_L2、SEP_EXPq_L3、及びSEP_EXPq_L4を生成する。具体的には、分離データ生成回路186は、誤り訂正後下位読出しデータEXPq_Lから、シングルステート読出しデータSSRq_2Rのデータが“1”に対応するビットを誤り訂正後分離データSEP_EXPq_L1として抽出し、シングルステート読出しデータSSRq_2R及びSSRq_5Rのデータがそれぞれ“0”及び“1”に対応するビットを、誤り訂正後分離データSEP_EXPq_L2として抽出する。分離データ生成回路186は、誤り訂正後下位読出しデータEXPq_Lから、シングルステート読出しデータSSRq_5R及びSSRq_8Rのデータがそれぞれ“0”及び“1”に対応するビットを誤り訂正後分離データSEP_EXPq_L3として抽出し、シングルステート読出しデータSSRq_8Rのデータが“0”に対応するビットを、誤り訂正後分離データSEP_EXPq_L4として抽出する。抽出された誤り訂正後分離データSEP_EXPq_L1~SEP_EXPq_L4は、ビットカウンタ182に送出される。
ステップST40において、読出し電圧補正回路180は、誤り訂正前分離データSEP_SRq_L1~SEP_SRq_L4、及び誤り訂正後分離データSEP_EXPq_L1~SEP_EXPq_L4に基づいて、シフト量算出処理を実行する。シフト量算出処理の詳細は、後述する。
ステップST50において、メモリコントローラ100は、ステップST40において算出されたシフト量Δをメモリ120の履歴テーブル内における対応する領域に保持することにより、履歴テーブルを更新する。
以上により、読出し処理が終了する。
5.3 下位ページ読出し処理に基づくシフト量算出処理
図31、図32、及び図33は、第5実施形態に係るメモリシステムにおける、下位ページ読出し処理に基づくシフト量算出処理を説明するための模式図である。図31では、シフトリード処理及びシングルステートリード処理によって読み出されるデータが示される。図32及び図33ではそれぞれ、シフト量算出処理のうち、読出し動作1R及び4Rについて、並びに読出し動作6R及び11Rについて、の評価指標算出対象のカウント値が選択されるまでの処理が示される。
図31に示すように、誤り訂正前下位読出しデータSRq_Lは、セルユニットCU内のメモリセルトランジスタMTの閾値分布を2通りに分類する。すなわち、誤り訂正前下位読出しデータSRq_Lは、閾値電圧が電圧VS1未満、電圧VS4以上電圧VS6未満、又は電圧VS11以上の場合にデータ“1”となり、該当するメモリセルトランジスタMTは“S0”状態、“S4”状態、“S5”状態、又は“S11”状態~“S15”状態の閾値分布に属しているとみなされる。また、誤り訂正前下位読出しデータSRq_Lは、閾値電圧が電圧VS1以上電圧VS4未満、又は電圧VS6以上電圧VS11未満の場合にデータ“0”となり、該当するメモリセルトランジスタMTは“S1”状態~“S3”状態、又は“S6”状態~“S10”状態の閾値分布に属しているとみなされる。
シングルステート読出しデータSSRq_2Rは、閾値電圧が電圧VS2未満の場合にデータ“1”となり、該当するメモリセルトランジスタMTは“S0”状態又は“S1”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータSSRq_2Rは、閾値電圧が電圧VS2以上の場合にデータ“0”となり、該当するメモリセルトランジスタMTは“S2”状態~“S15”状態の閾値分布に属しているとみなされる。
シングルステート読出しデータSSRq_5Rは、閾値電圧が電圧VS5未満の場合にデータ“1”となり、該当するメモリセルトランジスタMTは“S0”状態~“S4”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータSSRq_5Rは、閾値電圧が電圧VS5以上の場合にデータ“0”となり、該当するメモリセルトランジスタMTは“S5”状態~“S15”状態の閾値分布に属しているとみなされる。
シングルステート読出しデータSSRq_8Rは、閾値電圧が電圧VS8未満の場合にデータ“1”となり、該当するメモリセルトランジスタMTは“S0”状態~“S7”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータSSRq_8Rは、閾値電圧が電圧VS8以上の場合にデータ“0”となり、該当するメモリセルトランジスタMTは“S8”状態~“S15”状態の閾値分布に属しているとみなされる。
このため、図32に示すように、誤り訂正前分離データSEP_SRq_L1は、“S0”~“S1”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを、2通りに(閾値電圧が電圧VS1未満の場合にはデータ“1”に、電圧VS1以上の場合にはデータ“0”に)分類する。すなわち、誤り訂正前分離データSEP_SRq_L1がデータ“1”となるメモリセルトランジスタMTは“S0”状態の閾値分布に属しているとみなされ、データ“0”となるメモリセルトランジスタMTは“S1”状態の閾値分布に属しているとみなされる。また、誤り訂正前分離データSEP_SRq_L2は、“S2”~“S4”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを、2通りに(閾値電圧が電圧VS4未満の場合にはデータ“0”に、電圧VS4以上の場合にはデータ“1”に)分類する。すなわち、誤り訂正前分離データSEP_SRq_L2がデータ“0”となるメモリセルトランジスタMTは“S2”状態又は“S3”状態の閾値分布に属しているとみなされ、データ“1”となるメモリセルトランジスタMTは“S4”状態の閾値分布に属しているとみなされる。
また、図33に示すように、誤り訂正前分離データSEP_SRq_L3は、“S5”~“S7”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを、2通りに(閾値電圧が電圧VS6未満の場合にはデータ“1”に、電圧VS6以上の場合にはデータ“0”に)分類する。すなわち、誤り訂正前分離データSEP_SRq_L3がデータ“1”となるメモリセルトランジスタMTは“S5”状態の閾値分布に属しているとみなされ、データ“0”となるメモリセルトランジスタMTは“S6”状態又は“S7”状態の閾値分布に属しているとみなされる。また、誤り訂正前分離データSEP_SRq_L4は、“S8”~“S15”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを、2通りに(閾値電圧が電圧VS11未満の場合にはデータ“0”に、電圧VS11以上の場合にはデータ“1”に)分類する。すなわち、誤り訂正前分離データSEP_SRq_L4がデータ“0”となるメモリセルトランジスタMTは“S8”状態~“S10”状態の閾値分布に属しているとみなされ、データ“1”となるメモリセルトランジスタMTは“S11”状態~“S15”状態の閾値分布に属しているとみなされる。
一方、図32及び図33に示すように、誤り訂正後分離データSEP_EXPq_L1~SEP_EXPq_L4はそれぞれ、誤り訂正前分離データSEP_SRq_L1~SEP_SRq_L4による分類に依らず、メモリセルトランジスタMTを2通りに分類する。すなわち、誤り訂正後分離データSEP_EXPq_L1~SEP_EXPq_L4がデータ“1”となるメモリセルトランジスタMTは、“S0”状態、“S4”状態、“S5”状態、又は“S11”状態~“S15”状態の閾値分布に属していることが期待される。誤り訂正後分離データSEP_EXPq_L1~SEP_EXPq_L4がデータ“0”となるメモリセルトランジスタMTは、“S1”状態~“S3”状態、又は“S6”状態~“S10”状態の閾値分布に属していることが期待される。
なお、上述の通り、誤り訂正後分離データSEP_EXPq_L1は“S0”状態又は“S1”状態の閾値分布に、誤り訂正後分離データSEP_EXPq_L2は“S2”状態~“S4”状態の閾値分布に、誤り訂正後分離データSEP_EXPq_L3は“S5”状態~“S7”状態の閾値分布に、誤り訂正後分離データSEP_EXPq_L4は“S8”状態~“S15”状態の閾値分布に、属しているとみなされたメモリセルトランジスタMTの集合である。このため、誤り訂正後分離データSEP_EXPq_L1がデータ“1”となるメモリセルトランジスタMTは“S0”状態の閾値分布に、データ“0”となるメモリセルトランジスタMTは、“S1”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。また、誤り訂正後分離データSEP_EXPq_L2がデータ“1”となるメモリセルトランジスタMTは“S4”状態の閾値分布に、データ“0”となるメモリセルトランジスタMTは、“S2”状態又は“S3”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。また、誤り訂正後分離データSEP_EXPq_L3がデータ“1”となるメモリセルトランジスタMTは“S5”状態の閾値分布に、データ“0”となるメモリセルトランジスタMTは、“S6”状態又は“S7”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。また、誤り訂正後分離データSEP_EXPq_L4がデータ“1”となるメモリセルトランジスタMTは“S11”状態~“S15”状態の閾値分布に、データ“0”となるメモリセルトランジスタMTは、“S8”状態~“S10”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。
このため、誤り訂正前分離データSEP_SRq_L1及び誤り訂正後分離データSEP_EXPq_L1が取り得る値の組合せC4_L1=(SEP_SRq_L1、SEP_EXPq_L1)は、2×2=4通り存在する。誤り訂正前分離データSEP_SRq_L2及び誤り訂正後分離データSEP_EXPq_L2が取り得る値の組合せC4_L2=(SEP_SRq_L2、SEP_EXPq_L2)は、2×2=4通り存在する。誤り訂正前分離データSEP_SRq_L3及び誤り訂正後分離データSEP_EXPq_L3が取り得る値の組合せC4_L3=(SEP_SRq_L3、SEP_EXPq_L3)は、2×2=4通り存在する。誤り訂正前分離データSEP_SRq_L4及び誤り訂正後分離データSEP_EXPq_L4が取り得る値の組合せC4_L4=(SEP_SRq_L4、SEP_EXPq_L4)は、2×2=4通り存在する。ビットカウンタ182は、上記したような各々が4通りの組合せC4_L1~C4_L4毎(すなわち、16通りの組合せ毎)にビット数をカウントする。
図32の例では、ビットセレクタ183は、4通りの組合せC4_L1のうち、組合せC4_L1=(1、0)及び(0、1)の2通りを含む1つの組に着目する。組合せC4_L1=(1、0)の場合は、“S1”状態のデータが書き込まれたメモリセルトランジスタMTから“S0”状態のデータが誤って読み出されたことを示す場合である。組合せC4_L1=(0、1)の場合は、“S0”状態のデータが書き込まれたメモリセルトランジスタMTから“S1”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC4_L1=(1、0)に対応するカウント値は、「S1→S0誤読出しケース」に等しくなり、組合せC4_L1=(0、1)に対応するカウント値は、「S0→S1誤読出しケース」に等しくなる。
同様に、ビットセレクタ183は、4通りの組合せC4_L2のうち、組合せC4_L2=(0、1)及び(1、0)の2通りを含む1つの組に着目する。組合せC4_L2=(0、1)の場合は “S4”状態のデータが書き込まれたメモリセルトランジスタMTから“S2”状態又は“S3”状態のデータが誤って読み出されたことを示す場合である。組合せC4_L2=(1、0)の場合は、“S2”状態又は“S3”状態のデータが書き込まれたメモリセルトランジスタMTから“S4”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC4_L2=(0、1)の場合は、「S4→S2,S3誤読出しケース」を含み、組合せC4_L2=(1、0)の場合は、「S2,S3,→S4誤読出しケース」を含む。
「S4→S2,S3誤読出しケース」のうち、「S4→S3誤読出しケース」の数は、「S4→S2誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC4_L2=(0、1)に対応するカウント値は、「S4→S3誤読出しケース」に実質的に等しいとみなし得る。同様に、「S2,S3→S4誤読出しケース」のうち、「S3→S4誤読出しケース」の数は、「S2→S4誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC4_L2=(1、0)に対応するカウント値は、「S3→S4誤読出しケース」に実質的に等しいとみなし得る。
図33の例では、ビットセレクタ183は、4通りの組合せC4_L3のうち、組合せC4_L3=(1、0)及び(0、1)の2通りを含む1つの組に着目する。組合せC4_L3=(1、0)の場合は、“S6”状態又は“S7”状態のデータが書き込まれたメモリセルトランジスタMTから“S5”状態のデータが誤って読み出されたことを示す場合である。組合せC4_L3=(0、1)の場合は、“S5”状態のデータが書き込まれたメモリセルトランジスタMTから“S6”状態又は“S7”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC4_L3=(1、0)の場合は、「S6,S7→S5誤読出しケース」を含み、組合せC4_L3=(0、1)の場合は、「S5→S6,S7誤読出しケース」を含む。
「S6,S7→S5誤読出しケース」のうち、「S6→S5誤読出しケース」の数は、「S7→S5誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC4_L3=(1、0)に対応するカウント値は、「S6→S5誤読出しケース」に実質的に等しいとみなし得る。同様に、「S5→S6,S7誤読出しケース」のうち、「S5→S6誤読出しケース」の数は、「S5→S7誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC4_L3=(0、1)に対応するカウント値は、「S5→S6誤読出しケース」に実質的に等しいとみなし得る。
同様に、ビットセレクタ183は、4通りの組合せC4_L4のうち、組合せC4_L4=(0、1)及び(1、0)の2通りを含む1つの組に着目する。組合せC4_L4=(0、1)の場合は、“S11”状態~“S15”状態のデータが書き込まれたメモリセルトランジスタMTから“S8”状態~“S10”状態のデータが誤って読み出されたことを示す場合である。組合せC4_L4=(1、0)の場合は、“S8”状態~“S10”状態のデータが書き込まれたメモリセルトランジスタMTから“S11”~“S15”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC4_L4=(0、1)の場合は、「S11~S15→S8~S10誤読出しケース」を含み、組合せC4_L4=(1、0)の場合は、「S8~S10→S11~S15誤読出しケース」を含む。
「S11~S15→S8~S10誤読出しケース」のうち、「S11→S10誤読出しケース」の数は、「S12~S15→S8~S10誤読出しケース」及び「S11→S8,S9誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC4_L4=(0、1)に対応するカウント値は、「S11→S10誤読出しケース」に実質的に等しいとみなし得る。同様に、「S8~S10→S11~S15誤読出しケース」のうち、「S10→S11誤読出しケース」の数は、「S8,S9→S11~S15誤読出しケース」及び「S10→S12~S15誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC4_L4=(1、0)に対応するカウント値は、「S10→S11誤読出しケース」に実質的に等しいとみなし得る。
上記した近似を行うことにより、ビットセレクタ183は、電圧VS1のシフト量Δを算出する場合、「S1→S0誤読出しケース」及び「S0→S1誤読出しケース」にそれぞれ実質的に対応する組合せC4_L1=(1、0)及び(0、1)のカウント値を1つの組として選択する。ビットセレクタ183は、電圧VS4のシフト量Δを算出する場合、「S4→S3誤読出しケース」及び「S3→S4誤読出しケース」にそれぞれ実質的に対応する組合せC4_L2=(0、1)及び(1、0)のカウント値を1つの組として選択する。ビットセレクタ183は、電圧VS6のシフト量Δを算出する場合、「S6→S5誤読出しケース」及び「S5→S6誤読出しケース」にそれぞれ実質的に対応する組合せC4_L3=(1、0)及び(0、1)のカウント値を1つの組として選択する。ビットセレクタ183は、電圧VS11のシフト量Δを算出する場合、「S11→S10誤読出しケース」及び「S10→S11誤読出しケース」にそれぞれ実質的に対応する組合せC4_L4=(0、1)及び(1、0)のカウント値を1つの組として選択する。
以上のように動作することにより、ビットセレクタ183は、シフト量算出に用いる2通りのカウント値を含む組を、読出し動作1R、4R、6R及び11Rについて選択することができる。
5.4 本実施形態に係る効果
第5実施形態によれば、メモリコントローラ100は、メモリセルトランジスタMTに4ビットデータを保持可能な場合でも、ランダムリード処理に伴ってシングルステート読出しデータを読み出すことで、誤り訂正処理を実行することができる。より具体的には、ランダムリード処理が下位ページのように4種類の読出し電圧を用いたシフトリード処理である場合、分離データ生成回路186は、3種類のシングルステート読出しデータを用いて誤り訂正前後の読出しデータをそれぞれ4つに分離する。これにより、ビットカウンタ182は、誤り訂正前後の分離データの組毎にビット数をカウントし、ビットセレクタ183は、誤り訂正前後の分離データの組毎に評価指標算出対象の2つの組合せを選択することができる。このため、ランダムリード処理の場合に、更なるシフトリード処理を実行することなく、ランダムリード処理対象のページの読出しに用いる読出し電圧のシフト量を算出することができる。したがって、読出し電圧補正によるレイテンシの増加を抑制することができる。
なお、第4実施形態及び第5実施形態において説明したシフト量算出処理は、メモリセルトランジスタMTが任意のビット数を保持可能な場合に適用可能である。具体的には、1ページからのデータの読出し処理に際してi種類の読出し電圧を用いたシフトリード処理を実行する場合、当該読出しデータは、(i-1)種類のシングルステート読出しデータによってi個の分離データに分離できる(iは自然数)。ビットカウンタ182は、分離データ毎にビット数をカウントし、ビットセレクタ183は、分離データ毎に評価指標算出対象の2つの組合せを選択する。これにより、1ページからのデータの読出し処理に用いる読出し電圧が4種類より多い場合においても、第5実施形態と同様に、読出し電圧補正によるレイテンシの増加を抑制することができる。
6. 第6実施形態
第5実施形態では、シフトリード処理が実行されたページに対応する読出し電圧のシフト量が算出される場合について説明したが、これに限られない。例えば、シフトリード処理が実行されたページに対応する読出し電圧のシフト量を算出した後、当該算出したシフト量に基づいて他のページに対応する読出し電圧のシフト量を推定してもよい。
以下の説明では、第5実施形態と同等の構成及び動作については説明を省略し、第5実施形態と異なる構成及び動作について主に説明する。
6.1 シフト量算出及び推定処理を伴う下位ページ及びトップページ読出し処理
第6実施形態では、一例として、4ページのうち下位ページ及びトップページをランダムリード処理によって読み出す場合にシフト量算出処理を実行する際の動作について図34に示すフローチャートを用いて説明する。図34は、第5実施形態における図30に対応し、ステップST22Cに代えて、ステップST22Dが実行され、ステップST35C~ST37Cに代えてステップST35D~ST37Dが実行される。また、ステップST40とステップST50との間に更なるステップST45が実行される。
図34に示すように、ステップST10において、メモリコントローラ100は、メモリ120内の履歴テーブルを参照し、読出し対象のページに対応する読出し動作毎のシフト量Δを把握する。図34の例では、読出し対象のページに対応する読出し動作は、下位ページに対応する読出し動作1R、4R、6R、及び11R、並びにトップページに対応する読出し動作5R、10R、12R、及び15Rである。
ステップST22Dにおいて、メモリコントローラ100は、ステップST10において把握したシフト量Δに基づいてシフトリードコマンドを発行する。これにより、チップChipは、履歴テーブルのシフト量を適用した読出し電圧によって誤り訂正前下位読出しデータSRq_L及び誤り訂正前トップ読出しデータSRq_Tを読み出し、メモリコントローラ100に出力する。誤り訂正前下位読出しデータSRq_L及び誤り訂正前トップ読出しデータSRq_Tは、メモリコントローラ100内において、ECC回路160に転送されると共に、読出し電圧補正用バッファメモリ181に保持される。
ステップST30において、ECC回路160は、誤り訂正前下位読出しデータSRq_L及び誤り訂正前トップ読出しデータSRq_Tに対して誤り訂正処理を実行する。ECC回路160による誤り訂正処理が成功した場合(ステップST30;yes)、ECC回路160は、誤り訂正後下位読出しデータEXPq_L及び誤り訂正後トップ読出しデータEXPq_Tを読出し電圧補正用バッファメモリ181に保持させた後、処理はステップST35Dに進む。一方、ECC回路160による誤り訂正処理が失敗した場合(ステップST30;no)、処理はステップST60に進む。なお、ステップST60~ST80の処理は、図30の場合と同等であるため、その説明を省略する。
ステップST35Dにおいて、メモリコントローラ100は、電圧VS3、VS8、及びVS14を読出し電圧に用いたシングルステートリードコマンドを発行する。これにより、チップChipは、シングルステート読出しデータSSRq_3R、SSRq_8R、及びSSRq_14Rを読み出し、メモリコントローラ100に出力する。シングルステート読出しデータSSRq_3R、SSRq_8R、及びSSRq_14Rは、メモリコントローラ100内において、読出し電圧補正用バッファメモリ181に保持される。
ステップST36Dにおいて、分離データ生成回路186は、読出し電圧補正用バッファメモリ181から読み出した誤り訂正前下位読出しデータSRq_L、誤り訂正前トップ読出しデータSRq_T、並びにシングルステート読出しデータSSRq_3R、SSRq_8R、及びSSRq_14Rに基づき、誤り訂正前分離データSEP_SRq_L1’、SEP_SRq_T1’、SEP_SRq_L2’、SEP_SRq_T2’、SEP_SRq_L3’、SEP_SRq_T3’、SEP_SRq_L4’、及びSEP_SRq_T4’を生成する。具体的には、分離データ生成回路186は、誤り訂正前下位読出しデータSRq_L及び誤り訂正前トップ読出しデータSRq_Tから、シングルステート読出しデータSSRq_3Rのデータが“1”に対応するビットを、それぞれ誤り訂正前分離データSEP_SRq_L1’及びSEP_SRq_T1’として抽出する。分離データ生成回路186は、誤り訂正前下位読出しデータSRq_L及び誤り訂正前トップ読出しデータSRq_Tから、シングルステート読出しデータSSRq_3Rのデータが“0”に対応し、かつシングルステート読出しデータSSRq_8Rのデータが“1”に対応するビットを、それぞれ誤り訂正前分離データSEP_SRq_L2’及びSEP_SRq_T2’として抽出する。分離データ生成回路186は、誤り訂正前下位読出しデータSRq_L及び誤り訂正前トップ読出しデータSRq_Tから、シングルステート読出しデータSSRq_8Rのデータが“0”に対応し、かつシングルステート読出しデータSSRq_14Rのデータが“1”に対応するビットを、それぞれ誤り訂正前分離データSEP_SRq_L3’及びSEP_SRq_T3’として抽出する。分離データ生成回路186は、誤り訂正前下位読出しデータSRq_L及び誤り訂正前トップ読出しデータSRq_Tから、シングルステート読出しデータSSRq_14Rのデータが“0”に対応するビットを、それぞれ誤り訂正前分離データSEP_SRq_L4’及びSEP_SRq_T4’として抽出する。抽出された誤り訂正前分離データSEP_SRq_L1’~SEP_SRq_L4’及びSEP_SRq_T1’~SEP_SRq_T4’は、ビットカウンタ182に送出される。
ステップST37Dにおいて、分離データ生成回路186は、読出し電圧補正用バッファメモリ181から読み出した誤り訂正後下位読出しデータEXPq_L、誤り訂正後トップ読出しデータEXPq_T、並びにシングルステート読出しデータSSRq_3R、SSRq_8R、及びSSRq_14Rに基づき、誤り訂正後分離データSEP_EXPq_L1’、SEP_EXPq_T1’、SEP_EXPq_L2’、SEP_EXPq_T2’、SEP_EXPq_L3’、SEP_EXPq_T3’、SEP_EXPq_L4’、及びSEP_EXPq_T4’を生成する。具体的には、分離データ生成回路186は、誤り訂正後下位読出しデータEXPq_L及び誤り訂正後トップ読出しデータEXPq_Tから、シングルステート読出しデータSSRq_3Rのデータが“1”に対応するビットを、それぞれ誤り訂正後分離データSEP_EXPq_L1’及びSEP_EXPq_T1’として抽出する。分離データ生成回路186は、誤り訂正後下位読出しデータEXPq_L及び誤り訂正後トップ読出しデータEXPq_Tから、シングルステート読出しデータSSRq_3Rのデータが“0”に対応し、かつシングルステート読出しデータSSRq_8Rのデータが“1”に対応するビットを、それぞれ誤り訂正後分離データSEP_EXPq_L2’及びSEP_EXPq_T2’として抽出する。分離データ生成回路186は、誤り訂正後下位読出しデータEXPq_L及び誤り訂正後トップ読出しデータEXPq_Tから、シングルステート読出しデータSSRq_8Rのデータが“0”に対応し、かつシングルステート読出しデータSSRq_14Rのデータが“1”に対応するビットを、それぞれ誤り訂正後分離データSEP_EXPq_L3’及びSEP_EXPq_T3’として抽出する。分離データ生成回路186は、誤り訂正後下位読出しデータEXPq_L及び誤り訂正後トップ読出しデータEXPq_Tから、シングルステート読出しデータSSRq_14Rのデータが“0”に対応するビットを、それぞれ誤り訂正後分離データSEP_EXPq_L4’及びSEP_EXPq_T4’として抽出する。抽出された誤り訂正後分離データSEP_EXPq_L1’~SEP_EXPq_L4’及びSEP_EXPq_T1’~SEP_EXPq_T4’は、ビットカウンタ182に送出される。
ステップST40において、読出し電圧補正回路180は、誤り訂正前分離データSEP_SRq_L1’~SEP_SRq_L4’及びSEP_SRq_T1’~SEP_SRq_T4’、並びに誤り訂正後分離データSEP_EXPq_L1’~SEP_EXPq_L4’及びSEP_EXPq_T1’~SEP_EXPq_T4’に基づいて、シフト量算出処理を実行する。具体的には、読出し電圧補正回路180は、下位ページに対応する読出し電圧VS1、VS4、VS6、及びVS11、並びにトップページに対応する読出し電圧VS5、VS10、VS12、及びVS15のシフト量Δを算出する。シフト量算出処理の詳細は、後述する。
ステップST45において、読出し電圧補正回路180は、ステップST40において算出されたシフト量Δに基づき、中位ページに対応する読出し電圧VS3、VS7、VS9、及びVS13R、並びにトップページに対応する読出し電圧VS2、VS8、及びVS14のシフト量Δを推定する。シフト量推定処理の詳細は、後述する。
ステップST50において、メモリコントローラ100は、ステップST40において算出され、ステップST45において推定されたシフト量Δをメモリ120の履歴テーブル内における対応する領域に保持することにより、履歴テーブルを更新する。
以上により、読出し処理が終了する。
6.2 下位ページ及びトップページ読出し処理に基づくシフト量算出処理
図35、図36、図37、図38、及び図39は、第6実施形態に係るメモリシステムにおける、下位ページ及びトップページ読出し処理に基づくシフト量算出処理を説明するための模式図である。図35では、シフトリード処理及びシングルステートリード処理によって読み出されるデータが示される。図36~図39ではそれぞれ、シフト量算出処理のうち、読出し動作1Rについて、読出し動作4R、5R及び6Rについて、読出し動作10R、11R及び12Rについて、並びに読出し動作15Rについて、の評価指標算出対象のカウント値が選択されるまでの処理が示される。
図35に示すように、誤り訂正前下位読出しデータSRq_L及び誤り訂正前トップ読出しデータSRq_Tの組は、セルユニットCU内のメモリセルトランジスタMTの閾値分布を4通りに分類する。すなわち、データの組(SRq_T、SRq_L)は、閾値電圧が電圧VS1未満、電圧VS4以上電圧VS5未満、電圧VS11以上電圧VS12未満、又は電圧VS15以上の場合に(1、1)となり、該当するメモリセルトランジスタMTは“S0”状態、“S4”状態、“S11”状態、又は“S15”状態の閾値分布に属しているとみなされる。データの組(SRq_T、SRq_L)は、閾値電圧が電圧VS1以上電圧VS4未満、又は電圧VS10以上電圧VS11未満の場合に(1、0)となり、該当するメモリセルトランジスタMTは“S1”状態~“S3”状態、又は“S10”状態の閾値分布に属しているとみなされる。データの組(SRq_T、SRq_L)は、閾値電圧が電圧VS6以上電圧VS10未満の場合に(0、0)となり、該当するメモリセルトランジスタMTは“S6”状態~“S9”状態の閾値分布に属しているとみなされる。データの組(SRq_T、SRq_L)は、閾値電圧が電圧VS5以上電圧VS6未満、又は電圧VS12以上電圧VS15未満の場合に(0、1)となり、該当するメモリセルトランジスタMTは“S5”状態、又は“S12”状態~“S14”状態の閾値分布に属しているとみなされる。
シングルステート読出しデータSSRq_3Rは、閾値電圧が電圧VS3未満の場合にデータ“1”となり、該当するメモリセルトランジスタMTは“S0”状態~“S2”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータSSRq_3Rは、閾値電圧が電圧VS3以上の場合にデータ“0”となり、該当するメモリセルトランジスタMTは“S3”状態~“S15”状態の閾値分布に属しているとみなされる。
シングルステート読出しデータSSRq_8Rは、閾値電圧が電圧VS8未満の場合にデータ“1”となり、該当するメモリセルトランジスタMTは、“S0”状態~“S7”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータSSRq_8Rは、閾値電圧が電圧VS8以上の場合にデータ“0”となり、該当するメモリセルトランジスタMTは、“S8”状態~“S15”状態の閾値分布に属しているとみなされる。
シングルステート読出しデータSSRq_14Rは、閾値電圧が電圧VS14未満の場合にデータ“1”となり、該当するメモリセルトランジスタMTは、“S0”状態~“S13”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータSSRq_14Rは、閾値電圧が電圧VS14以上の場合にデータ“0”となり、“S14”状態~“S15”状態の閾値分布に属しているとみなされる。
このため、図36に示すように、誤り訂正前分離データSEP_SRq_T1’及びSEP_SRq_L1’の組は、“S0”状態~“S2”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを2通りに分類する。すなわち、データの組(SEP_SRq_T1’、SEP_SRq_L1’)は、閾値電圧が電圧VS1未満の場合に(1、1)となり、該当するメモリセルトランジスタは“S0”状態の閾値分布に属しているとみなされる。データの組(SEP_SRq_T1’、SEP_SRq_L1’)は、閾値電圧が電圧VS1以上の場合に(1、0)となり、該当するメモリセルトランジスタは“S1”状態又は“S2”状態の閾値分布に属しているとみなされる。
また、図37に示すように、誤り訂正前分離データSEP_SRq_T2’及びSEP_SRq_L2’の組は、“S3”状態~“S7”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを4通りに分類する。すなわち、データの組(SEP_SRq_T2’、SEP_SRq_L2’)は、閾値電圧が電圧VS3以上電圧VS4未満の場合に(1、0)となり、該当するメモリセルトランジスタは“S3”状態の閾値分布に属しているとみなされる。データの組(SEP_SRq_T2’、SEP_SRq_L2’)は、閾値電圧が電圧VS4以上電圧VS5未満の場合に(1、1)となり、該当するメモリセルトランジスタは“S4”状態の閾値分布に属しているとみなされる。データの組(SEP_SRq_T2’、SEP_SRq_L2’)は、閾値電圧が電圧VS5以上電圧VS6未満の場合に(0、1)となり、該当するメモリセルトランジスタは“S5”状態の閾値分布に属しているとみなされる。データの組(SEP_SRq_T2’、SEP_SRq_L2’)は、閾値電圧が電圧VS6以上電圧VS8未満の場合に(0、0)となり、該当するメモリセルトランジスタは“S6”状態~“S7”状態の閾値分布に属しているとみなされる。
また、図38に示すように、誤り訂正前分離データSEP_SRq_T3’及びSEP_SRq_L3’の組は、“S8”状態~“S13”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを4通りに分類する。すなわち、データの組(SEP_SRq_T3’、SEP_SRq_L3’)は、閾値電圧が電圧VS8以上電圧VS10未満の場合に(0、0)となり、該当するメモリセルトランジスタは“S8”状態又は“S9”状態の閾値分布に属しているとみなされる。データの組(SEP_SRq_T3’、SEP_SRq_L3’)は、閾値電圧が電圧VS10以上電圧VS11未満の場合に(1、0)となり、該当するメモリセルトランジスタは“S10”状態の閾値分布に属しているとみなされる。データの組(SEP_SRq_T3’、SEP_SRq_L3’)は、閾値電圧が電圧VS11以上電圧VS12未満の場合に(1、1)となり、該当するメモリセルトランジスタは“S11”状態の閾値分布に属しているとみなされる。データの組(SEP_SRq_T3’、SEP_SRq_L3’)は、閾値電圧が電圧VS12以上電圧VS14未満の場合に(0、1)となり、該当するメモリセルトランジスタは“S12”状態又は“S13”状態の閾値分布に属しているとみなされる。
また、図39に示すように、誤り訂正前分離データSEP_SRq_T4’及びSEP_SRq_L4’の組は、“S14”状態~“S15”状態の閾値分布に属しているとみなされたメモリセルトランジスタMTを2通りに分類する。すなわち、データの組(SEP_SRq_T4’、SEP_SRq_L4’)は、閾値電圧が電圧VS15未満の場合に(0、1)となり、該当するメモリセルトランジスタは“S14”状態の閾値分布に属しているとみなされる。データの組(SEP_SRq_T4’、SEP_SRq_L4’)は、閾値電圧が電圧VS15以上の場合に(1、1)となり、該当するメモリセルトランジスタは“S15”状態の閾値分布に属しているとみなされる。
一方、図36~図39に示すように、誤り訂正後分離データの組SEP_EXPq_Tj’及びSEP_EXPq_Lj’)はそれぞれ、誤り訂正前分離データSEP_SRq_Tj’及びSEP_SRq_Lj’による分類に依らず、メモリセルトランジスタMTを4通りに分類する(1≦j≦4)。すなわち、データの組(SEP_EXPq_Tj’、SEP_EXPq_Lj’)が(1、1)となるメモリセルトランジスタMTは、“S0”状態、“S4”状態、“S11”状態、又は“S15”状態の閾値分布に属していることが期待される。データの組(SEP_EXPq_Tj’、SEP_EXPq_Lj’)が(1、0)となるメモリセルトランジスタMTは、“S1”状態~“S3”状態、又は“S10”状態の閾値分布に属していることが期待される。データの組(SEP_EXPq_Tj’、SEP_EXPq_Lj’)が(0、0)となるメモリセルトランジスタMTは、“S6”状態~“S9”状態の閾値分布に属していることが期待される。データの組(SEP_EXPq_Tj’、SEP_EXPq_Lj’)が(0、1)となるメモリセルトランジスタMTは、“S5”状態、“S12”状態~“S14”状態の閾値分布に属していることが期待される。
なお、上述の通り、データの組(SEP_EXPq_T1’,SEP_EXPq_L1’)は“S0”状態~“S2”状態の閾値分布に、データの組(SEP_EXPq_T2’,SEP_EXPq_L2’)は“S3”状態~“S7”状態の閾値分布に、データの組(SEP_EXPq_T3’,SEP_EXPq_L3’)“S8”状態~“S13”状態の閾値分布に、データの組(SEP_EXPq_T4’,SEP_EXPq_L4’)は“S14”状態又は“S15”状態の閾値分布に、属しているとみなされたメモリセルトランジスタMTの集合である。
このため、データの組(SEP_EXPq_T1’,SEP_EXPq_L1’)=(1,1)となるメモリセルトランジスタMTは“S0”状態の閾値分布に、(1,0)となるメモリセルトランジスタMTは、“S1”状態又は“S2”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。データの組(SEP_EXPq_T1’,SEP_EXPq_L1’)=(0,0)及び(0,1)となるメモリセルトランジスタMTはほぼ存在しない、とみなすことができる。
また、データの組(SEP_EXPq_T2’,SEP_EXPq_L2’)=(1,1)となるメモリセルトランジスタMTは“S4”状態の閾値分布に、(1,0)となるメモリセルトランジスタMTは、“S3”状態の閾値分布に、(0,0)となるメモリセルトランジスタMTは、“S6”状態又は“S7”状態の閾値分布に、(0,1)となるメモリセルトランジスタMTは、“S5”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。
また、データの組(SEP_EXPq_T3’,SEP_EXPq_L3’)=(1,1)となるメモリセルトランジスタMTは“S11”状態の閾値分布に、(1,0)となるメモリセルトランジスタMTは、“S10”状態の閾値分布に、(0,0)となるメモリセルトランジスタMTは、“S8”状態又は“S9”状態の閾値分布に、(0,1)となるメモリセルトランジスタMTは、“S12”状態又は“S13”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。
また、データの組(SEP_EXPq_T4’,SEP_EXPq_L4’)=(1,1)となるメモリセルトランジスタMTは“S15”状態の閾値分布に、(0,1)となるメモリセルトランジスタMTは、“S14”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。データの組(SEP_EXPq_T4’,SEP_EXPq_L4’)=(1,0)及び(0,0)となるメモリセルトランジスタMTはほぼ存在しない、とみなすことができる。
このため、誤り訂正前分離データSEP_SRq_L1’、及びSEP_SRq_T1’、並びに誤り訂正後分離データSEP_EXPq_L1’及びSEP_EXPq_T1’が取り得る値の組合せC5_TL1=(SEP_SRq_T1’、SEP_SRq_L1’、SEP_EXPq_T1’、SEP_EXPq_L1’)は、2×2=4通り存在する。誤り訂正前分離データSEP_SRq_L2’、及びSEP_SRq_T2’、並びに誤り訂正後分離データSEP_EXPq_L2’及びSEP_EXPq_T2’が取り得る値の組合せC5_TL2=(SEP_SRq_T2’、SEP_SRq_L2’、SEP_EXPq_T2’、SEP_EXPq_L2’)は、4×4=16通り存在する。誤り訂正前分離データSEP_SRq_L3’、及びSEP_SRq_T3’、並びに誤り訂正後分離データSEP_EXPq_L3’及びSEP_EXPq_T3’が取り得る値の組合せC5_TL3=(SEP_SRq_T3’、SEP_SRq_L3’、SEP_EXPq_T3’、SEP_EXPq_L3’)は、4×4=16通り存在する。誤り訂正前分離データSEP_SRq_L4’、及びSEP_SRq_T4’、並びに誤り訂正後分離データSEP_EXPq_L4’及びSEP_EXPq_T4’が取り得る値の組合せC5_TL4=(SEP_SRq_T4’、SEP_SRq_L4’、SEP_EXPq_T4’、SEP_EXPq_L4’)は、2×2=4通り存在する。ビットカウンタ182は、上記したような組合せC5_TL1~C5_TL4毎(すなわち、40通りの組合せ毎)にビット数をカウントする。
図36の例では、ビットセレクタ183は、4通りの組合せC5_TL1のうち、組合せC5_TL1=(1、1、1、0)及び(1、0、1、1)の2通りを含む1つの組に着目する。組合せC5_TL1=(1、1、1、0)の場合は、“S1”状態又は“S2”状態のデータが書き込まれたメモリセルトランジスタMTから“S0”状態のデータが誤って読み出されたことを示す場合である。組合せC5_TL1=(1、0、1、1)の場合は、“S0”状態のデータが書き込まれたメモリセルトランジスタMTから“S1”状態又は“S2”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC5_TL1=(1、1、1、0)の場合は、「S1,S2→S0誤読出しケース」を含み、組合せC5_TL1=(1、0、1、1)の場合は、「S0→S1,S2誤読出しケース」を含む。
「S1,S2→S0誤読出しケース」のうち、「S1→S0誤読出しケース」の数は、「S2→S0誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC5_TL1=(1、1、1、0)に対応するカウント値は、「S1→S0誤読出しケース」に実質的に等しいとみなし得る。同様に、「S0→S1,S2誤読出しケース」のうち、「S0→S1誤読出しケース」の数は、「S0→S2誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC5_TL1=(1、0、1、1)に対応するカウント値は、「S0→S1誤読出しケース」に実質的に等しいとみなし得る。
図37の例では、ビットセレクタ183は、16通りの組合せC5_TL2のうち、組合せC5_TL2=(1、0、1、1)及び(1、1、1、0)の2通りを含む組と、(1、1、0、1)及び(0、1、1、1)の2通りを含む組と、(0、1、0、0)及び(0、0、0、1)の2通りを含む組と、3つの組に着目する。
組合せC5_TL2=(1、0、1、1)の場合は、“S4”状態のデータが書き込まれたメモリセルトランジスタMTから“S3”状態のデータが誤って読み出されたことを示す場合である。組合せC5_TL2=(1、1、1、0)の場合は、“S3”状態のデータが書き込まれたメモリセルトランジスタMTから“S4”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC5_TL2=(1、0、1、1)に対応するカウント値は、「S4→S3誤読出しケース」に等しくなり、組合せC5_TL2=(1、1、1、0)に対応するカウント値は、「S3→S4誤読出しケース」に等しくなる。
組合せC5_TL2=(1、1、0、1)の場合は、“S5”状態のデータが書き込まれたメモリセルトランジスタMTから“S4”状態のデータが誤って読み出されたことを示す場合である。組合せC5_TL2=(0、1、1、1)の場合は、“S4”状態のデータが書き込まれたメモリセルトランジスタMTから“S5”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC5_TL2=(1、1、0、1)に対応するカウント値は、「S5→S4誤読出しケース」に等しくなり、組合せC5_TL2=(0、1、1、1)に対応するカウント値は、「S4→S5誤読出しケース」に等しくなる。
組合せC5_TL2=(0、1、0、0)の場合は、“S6”状態又は“S7”状態のデータが書き込まれたメモリセルトランジスタMTから“S5”状態のデータが誤って読み出されたことを示す場合である。組合せC5_TL2=(0、0、0、1)の場合は、“S5”状態のデータが書き込まれたメモリセルトランジスタMTから“S6”状態又は“S7”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC5_TL2=(0、1、0、0)の場合は、「S6,S7→S5誤読出しケース」を含み、組合せC5_TL2=(0、1、0、0)の場合は、「S5→S6,S7誤読出しケース」を含む。
「S6,S7→S5誤読出しケース」のうち、「S6→S5誤読出しケース」の数は、「S7→S5誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC5_TL2=(0、1、0、0)に対応するカウント値は、「S6→S5誤読出しケース」に実質的に等しいとみなし得る。同様に、「S5→S6,S7誤読出しケース」のうち、「S5→S6誤読出しケース」の数は、「S5→S7誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC5_TL2=(0、0、0、1)に対応するカウント値は、「S5→S6誤読出しケース」に実質的に等しいとみなし得る。
図38の例では、ビットセレクタ183は、16通りの組合せC5_TL3のうち、組合せC5_TL3=(0、0、1、0)及び(1、0、0、0)の2通りを含む組と、(1、0、1、1)及び(1、1、1、0)の2通りを含む組と、(1、1、0、1)及び(0、1、1、1)の2通りを含む組と、3つの組に着目する。
組合せC5_TL3=(0、0、1、0)の場合は、“S10”状態のデータが書き込まれたメモリセルトランジスタMTから“S8”状態又は“S9”状態のデータが誤って読み出されたことを示す場合である。組合せC5_TL3=(1、0、0、0)の場合は、“S8”状態又は“S9”状態のデータが書き込まれたメモリセルトランジスタMTから“S10”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC5_TL3=(0、0、1、0)の場合は、「S10→S8,S9誤読出しケース」を含み、組合せC5_TL3=(1、0、0、0)の場合は、「S8,S9→S10誤読出しケース」を含む。
「S10→S8,S9誤読出しケース」のうち、「S10→S9誤読出しケース」の数は、「S10→S8誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC5_TL3=(0、0、1、0)に対応するカウント値は、「S10→S9誤読出しケース」に実質的に等しいとみなし得る。同様に、「S8,S9→S10誤読出しケース」のうち、「S9→S10誤読出しケース」の数は、「S8→S10誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC5_TL3=(1、0、0、0)に対応するカウント値は、「S9→S10誤読出しケース」に実質的に等しいとみなし得る。
組合せC5_TL3=(1、0、1、1)の場合は、“S11”状態のデータが書き込まれたメモリセルトランジスタMTから“S10”状態のデータが誤って読み出されたことを示す場合である。組合せC5_TL3=(1、1、1、0)の場合は、 “S10”状態のデータが書き込まれたメモリセルトランジスタMTから“S11”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC5_TL3=(1、0、1、1)に対応するカウント値は、「S11→S10誤読出しケース」に等しくなり、組合せC5_TL3=(1、1、1、0)に対応するカウント値は、「S10→S11誤読出しケース」に等しくなる。
組合せC5_TL3=(1、1、0、1)の場合は、“S12”状態又は“S13”状態のデータが書き込まれたメモリセルトランジスタMTから“S11”状態のデータが誤って読み出されたことを示す場合である。組合せC5_TL3=(0、1、1、1)の場合は、“S11”状態のデータが書き込まれたメモリセルトランジスタMTから“S12”状態又は“S13”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC5_TL3=(1、1、0、1)の場合は、「S12,S13→S11誤読出しケース」を含み、組合せC5_TL3=(0、1、1、1)の場合は、「S11→S12,S13誤読出しケース」を含む。
「S12,S13→S11誤読出しケース」のうち、「S12→S11誤読出しケース」の数は、「S13→S11誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC5_TL3=(1、1、0、1)に対応するカウント値は、「S12→S11誤読出しケース」に実質的に等しいとみなし得る。同様に、「S11→S12,S13誤読出しケース」のうち、「S11→S12誤読出しケース」の数は、「S11→S13誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せC5_TL3=(0、1、1、1)に対応するカウント値は、「S11→S12誤読出しケース」に実質的に等しいとみなし得る。
図39の例では、ビットセレクタ183は、4通りの組合せC5_TL4のうち、組合せC5_TL4=(0、1、1、1)及び(1、1、0、1)の2通りを含む1つの組に着目する。組合せC5_TL4=(0、1、1、1)の場合は、“S15”状態のデータが書き込まれたメモリセルトランジスタMTから“S14”状態のデータが誤って読み出されたことを示す場合である。組合せC5_TL4=(1、1、0、1)の場合は、“S14”状態のデータが書き込まれたメモリセルトランジスタMTから“S15”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せC5_TL4=(0、1、1、1)に対応するカウント値は、「S15→S14誤読出しケース」に等しくなり、組合せC5_TL4=(1、1、0、1)に対応するカウント値は、「S14→S15誤読出しケース」に等しくなる。
上記した近似を行うことにより、ビットセレクタ183は、電圧VS1のシフト量Δを算出する場合、「S1→S0誤読出しケース」及び「S0→S1誤読出しケース」にそれぞれ実質的に対応する組合せC5_TL1=(1、1、1、0)及び(1、0、1、1)のカウント値を1つの組として選択する。
ビットセレクタ183は、電圧VS4のシフト量Δを算出する場合、「S4→S3誤読出しケース」及び「S3→S4誤読出しケース」にそれぞれ実質的に対応する組合せC5_TL2=(1、0、1、1)及び(1、1、1、0)のカウント値を1つの組として選択する。ビットセレクタ183は、電圧VS5のシフト量Δを算出する場合、「S5→S4誤読出しケース」及び「S4→S5誤読出しケース」にそれぞれ実質的に対応する組合せC5_TL2=(1、1、0、1)及び(0、1、1、1)のカウント値を1つの組として選択する。ビットセレクタ183は、電圧VS6のシフト量Δを算出する場合、「S6→S5誤読出しケース」及び「S5→S6誤読出しケース」にそれぞれ実質的に対応する組合せC5_TL2=(0、1、0、0)及び(0、0、0、1)のカウント値を1つの組として選択する。
ビットセレクタ183は、電圧VS10のシフト量Δを算出する場合、「S10→S9誤読出しケース」及び「S9→S10誤読出しケース」にそれぞれ実質的に対応する組合せC5_TL3=(0、0、1、0)及び(1、0、0、0)のカウント値を1つの組として選択する。ビットセレクタ183は、電圧VS11のシフト量Δを算出する場合、「S11→S10誤読出しケース」及び「S10→S11誤読出しケース」にそれぞれ実質的に対応する組合せC5_TL3=(1、0、1、1)及び(1、1、1、0)のカウント値を1つの組として選択する。ビットセレクタ183は、電圧VS12のシフト量Δを算出する場合、「S12→S11誤読出しケース」及び「S11→S12誤読出しケース」にそれぞれ実質的に対応する組合せC5_TL3=(1、1、0、1)及び(0、1、1、1)のカウント値を1つの組として選択する。
ビットセレクタ183は、電圧VS15のシフト量Δを算出する場合、「S15→S14誤読出しケース」及び「S14→S15誤読出しケース」にそれぞれ実質的に対応する組合せC5_TL4=(0、1、1、1)及び(1、1、0、1)のカウント値を1つの組として選択する。
以上のように動作することにより、ビットセレクタ183は、シフト量算出に用いる2つのカウント値の組を、読出し動作1R、4R~6R、10R~12R、及び15Rについて選択することができる。
以上により、評価指標算出回路184は、読出し動作1R、4R~6R、10R~12R、及び15Rについての8種類の評価指標rを算出でき、シフト量算出回路185は、当該8種類の読出し動作に対応するシフト量Δを算出することができる。
6.3 下位ページ及びトップページ読出し処理に基づくシフト量推定処理
図40は、第6実施形態に係るメモリシステムにおける下位ページ及びトップページ読出し処理に基づくシフト量推定処理を説明するための模式図である。
図40に示すように、シフト量推定処理は、シフト量算出処理によって算出された下位ページ及びトップページ読出し処理に使用される8種類の読出し電圧のシフト量Δに基づき、中位ページ及び上位ページ読出し処理に使用される7種類の読出し電圧のシフト量Δを推定する処理である。すなわち、シフト量推定処理では、電圧VS1、VS4~VS6、VS10~VS12、及びVS15の各々のシフト量Δに基づき、電圧VS2、VS3、VS7~VS9、VS13、及びVS14の各々のシフト量Δを推定する。
なお、“S0”状態~“S15”状態の閾値分布のうち、閾値電圧が最も低い分布である“S0”状態と、閾値電圧が最も高い分布である“S15”状態とは、他の閾値分布と異なる傾向で変動し得る。このため、シフト量推定処理では、当該“S0”状態及び“S15”状態の閾値分布の幅を規定する電圧VS1及びVS15のシフト量Δを考慮しないことが望ましい。すなわち、シフト量推定処理では、電圧VS4~VS6、及びVS10~VS12の各々のシフト量Δに基づき、電圧VS2、VS3、VS7~VS9、VS13、及びVS14の各々のシフト量Δを推定することが望ましい。以下に、シフト量推定処理の一例を示す。
“S4”状態、“S5”状態、“S10”状態、及び“S11”状態の閾値分布の幅(支配的な閾値電圧の範囲)はそれぞれ、各々のシフト量Δが適用された、電圧VS4及びVS5の差、電圧VS5及びVS6の差、電圧VS10及びVS11の差、並びに電圧VS11及びVS12の差によって規定することができる。このため、“S4”状態、“S5”状態、“S10”状態、及び“S11”状態の閾値分布の幅は、シフト量算出処理によって算出されたシフト量Δによって規定することができる。
一方、“S4”状態、“S5”状態、“S10”状態、及び“S11”状態にそれぞれ隣り合う“S3”状態、“S6”状態、“S9”状態、及び“S12”状態の閾値分布の幅は、それぞれ、各々のシフト量Δが適用された、電圧VS3及びVS4の差、電圧VS6及びVS7の差、電圧VS9及びVS10の差、並びに電圧VS12及びVS13の差によって規定することができる。
また、“S4”状態、“S5”状態、“S10”状態、及び“S11”状態から1つの閾値分布を挟んで隣り合う“S2”状態、“S7”状態又は“S8”状態、及び“S14”状態の閾値分布の幅はそれぞれ、各々のシフト量Δが適用された、電圧VS2及びVS3の差、電圧VS7及びVS8の差又は電圧VS8及びVS9の差、並びに電圧VS13及びVS14の差によって規定することができる。
第6実施形態に係るシフト量推定処理の一例では、例えば、“S1”状態~“S14”状態の間で互いに隣り合う2つの閾値分布は、同等の幅を有しているとみなす。すなわち、“S3”状態、“S6”状態、“S9”状態、及び“S12”状態の閾値分布はそれぞれ、“S4”状態、“S5”状態、“S10”状態、及び“S11”状態の閾値分布と同等の幅に分布しているとみなすことができる。これにより、各々のシフト量Δが適用された、電圧VS3及びVS4の差、電圧VS6及びVS7の差、電圧VS9及びVS10の差、並びに電圧VS12及びVS13の差はそれぞれ、各々のシフト量Δが適用された、電圧VS4及びVS5の差、電圧VS5及びVS6の差、電圧VS10及びVS11の差、並びに電圧VS11及びVS12の差と等しいとみなすことができる。したがって、電圧VS3、VS7、VS9、及びVS13のシフト量Δを、電圧VS4~VS6、及びVS10~VS12のシフト量Δに基づいて推定することができる。
また、“S2”状態、“S7”状態、“S8”状態、及び“S13”状態の閾値分布はそれぞれ、“S3”状態、“S6”状態、“S9”状態、及び“S12”状態の閾値分布と同等の幅に分布しているとみなすことができる。これにより、各々のシフト量Δが適用された、電圧VS2及びVS3の差、電圧VS7及びVS8の差、電圧VS8及びVS9の差、並びに電圧VS13及びVS14の差も同様にそれぞれ、各々のシフト量Δが適用された、電圧VS4及びVS5の差、電圧VS5及びVS6の差、電圧VS10及びVS11の差、並びに電圧VS11及びVS12の差と等しいとみなすことができる。したがって、電圧VS2、VS8、及びVS13のシフト量Δを、電圧VS4~VS6、及びVS10~VS12のシフト量Δに基づいて更に推定することができる。
なお、シフト量推定処理では、上述の例に限らず、他の例も適用可能である。例えば、“S1”状態~“S14”状態の互いに隣り合う2つの閾値分布の間の幅の変化率が同等であるとみなしてもよい。この場合、例えば、“S4”状態と“S5”状態の閾値分布の間の幅の変化率と、“S3”状態と“S4”状態の閾値分布の間の幅の変化率とが等しいとみなすことにより、電圧VS3のシフト量Δを推定することができる。また、“S3”状態と“S4”状態の閾値分布の間の幅の変化率と、“S2”状態と“S3”状態の閾値分布の間の幅の変化率とが等しいとみなせることにより、電圧VS2のシフト量Δを更に推定することができる。
6.4 本実施形態に係る効果
第6実施形態によれば、メモリコントローラ100は、下位ページ及びトップページの2ページ分のシフトリード処理と、3種類のシングルステートリード処理と、を実行する。これにより、読出し電圧補正回路180は、8種類の読出し電圧のシフト量Δを算出すると共に、残りの7種類の読出し電圧のシフト量Δを推定することができる。このため、実質的に2ページ分の読出し処理によって4ページ分の読出し電圧を補正することができる。したがって、読出し電圧補正によるレイテンシの増加を抑制することができる。
なお、シフト量推定処理によってシフト量Δが推定される読出し電圧のうち、中位ページ分に相当する4種類の電圧VS3、VS7、VS9、及びVS13はそれぞれ、シフト量算出処理によって算出される電圧VS4、VS6、VS8、及びVS12と隣り合う。このため、比較的精度よくシフト量Δを推定することができる。一方、シフト量推定処理によってシフト量Δが推定される読出し電圧のうち、上位ページ分に相当する3種類の電圧VS2、VS8、及びVS14はそれぞれ、シフト量算出処理によって算出される電圧VS4、VS6又はVS8、及びVS12と2レベル分離れている。このため、中位ページ分に相当する4種類の電圧より、シフト量Δの推定精度が落ちる可能性がある。しかしながら、上述の通り、上位ページは、3種類の読出し電圧によって閾値電圧を4つの領域に区分することによりデータを確定することができる。このため、4種類の読出し電圧によって閾値電圧を5つの領域に区分することによりデータを確定する必要がある他のページよりも、読出し電圧の誤差に対するマージンを大きく取ることができる。したがって、7種類の読出し電圧のシフト量Δを、各々の読出し電圧が有する許容誤差に対して、妥当な精度で推定することができる。
7.変形例等
以上、種々の実施形態及び変形例について説明したが、上記各実施形態及び各変形例はこれに限られず、種々の更なる変形が適宜適用可能である。
7.1 その他の第1変形例
例えば、第1実施形態~第6実施形態では、ECC回路160による誤り訂正処理の際に、誤り訂正が成功した場合にシフト量算出処理が実行される場合について説明したが、これに限られない。すなわち、読出し電圧補正回路180は、ECC回路160においてLDPC符号を使った硬判定復号や、LDPC符号を含む誤り訂正符号の軟判定復号による誤り訂正処理が実行された場合、誤り訂正が成功しなくても、シフト量算出処理を実行してもよい。以降軟判定復号を例に実施例を説明するが、これに限定されない。
図41は、その他の第1変形例に係るメモリシステムにおけるシフト量算出処理を伴う読出し処理を説明するためのフローチャートである。図41は、第1実施形態において説明した図9に対応し、ステップST38、ST39、ST40A、及びST50Aが追加されている。図41では、ECC回路160が軟判定復号による誤り訂正処理を実行する場合が想定される。
図41に示すように、ステップST20までの処理は、図9の場合と同等であるため、説明を省略する。
ステップST30において、軟判定復号による誤り訂正処理が成功した場合(ステップST30;yes)、ECC回路160は、誤り訂正後読出しデータEXPを読出し電圧補正用バッファメモリ181に保持させた後、処理はステップST40に進む。一方、ステップST30において軟判定復号による誤り訂正処理が失敗した場合(ステップST30;no)、ECC回路160は、誤り訂正試行後読出しデータEXP’を読出し電圧補正用バッファメモリ181に保持させた後、処理はステップST38に進む。
誤り訂正試行後読出しデータEXP’は、軟判定復号によってデータが誤っている可能性が高いと判定された一部のビットを反転させたデータである。すなわち、誤り訂正試行後読出しデータEXP’は、誤って読み出されたビットのうちの一部について誤り訂正処理されたデータである。
ステップST38において、メモリコントローラ100は、誤り訂正に失敗した回数(訂正失敗回数)に応じて、シフト量算出処理を実行するか否かを判定する。具体的には、メモリコントローラ100は、訂正失敗回数が基準値N4以下の場合(ステップST38;yes)、シフト量算出処理によって読出し電圧の補正効果が見込めると判定し、処理はステップST39に進む。そして、ステップST39において、メモリコントローラ100は、訂正失敗回数をインクリメントし、処理はステップST40A及びST50Aに進む。ステップST40A及びST50Aにおける処理は、ステップST40及びST50における処理と同等であるため、説明を省略する。ステップST50Aが終了した後、処理はステップST10へ戻る。
一方、メモリコントローラ100は、訂正失敗回数が基準値N4よりも大きい場合(ステップST38;no)、シフト量算出処理を実行しても読出し電圧の補正効果が見込めないと判定し、処理はステップST60に進む。
ステップST40~ST80の処理は、図9の場合と同等であるため、説明を省略する。
以上のように動作することにより、誤り訂正処理に失敗した場合においても、シフト量算出処理を実行することができる。また、誤り訂正試行後データEXP’を用いたシフト量算出処理によって読出し電圧が改善されない場合には、リフレッシュ処理を実行することができる。
なお、図41では、第1実施形態の場合の変形例として説明したが、これに限られない。例えば、第2実施形態~第6実施形態における誤り訂正処理についても、軟判定復号を実行することにより、誤り訂正処理に失敗した場合においてもシフト量算出処理を実行することができる。
7.2 その他の第2変形例
また、第1実施形態~第6実施形態及びその他の第1変形例では、読出し電圧補正回路が、複数のチャネルCHに対して1つ設けられる場合について説明したが、これに限られない。すなわち、読出し電圧補正回路は、複数のチャネルCHの各々に対して1つずつ設けられていてもよい。
図42は、その他の第2変形例に係るメモリシステムを含む構成を説明するためのブロック図である。
図42に示すように、読出し電圧補正回路180Aは、NANDコントローラ群170内の複数のNANDコントローラ171、172、…内に1つずつ設けられている。
以上のように構成されることにより、例えば、ホスト機器2から、複数のチャネルCHに対して同時にデータを読み出す旨の命令(ホストリード処理命令)を受けた場合に、複数のチャネルCHから読み出したデータ毎に並列にシフト量Δを算出することができる。
7.3 その他
また、第1実施形態~第6実施形態、その他の第1変形例、並びにその他の第2変形例では、読出し電圧補正回路180又は180Aは、評価指標算出回路184及びシフト量算出回路185を含む構成について説明したが、これに限られない。例えば、読出し電圧補正回路180又は180Aは、評価指標算出回路184及びシフト量算出回路185を含まない構成であってもよい。この場合、評価指標算出回路184及びシフト量算出回路185の有する機能は、例えば、メモリ120に保持されたファームウェアをプロセッサ130が実行することによって実現してもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。