(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024001713
(43)【公開日】2024-01-10
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G11C 16/08 20060101AFI20231227BHJP
G11C 11/56 20060101ALI20231227BHJP
【FI】
G11C16/08 120
G11C11/56 220
【審査請求】未請求
【請求項の数】17
【出願形態】OL
(21)【出願番号】P 2022100559
(22)【出願日】2022-06-22
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110003708
【氏名又は名称】弁理士法人鈴榮特許綜合事務所
(72)【発明者】
【氏名】高田 万里江
(72)【発明者】
【氏名】白川 政信
(72)【発明者】
【氏名】山田 英樹
(72)【発明者】
【氏名】山城 遼
【テーマコード(参考)】
5B225
【Fターム(参考)】
5B225BA19
5B225CA21
5B225DA10
5B225DE07
5B225DE08
5B225EA05
5B225EG16
5B225FA01
(57)【要約】
【課題】高精度に読出し電圧を推定する。
【解決手段】一実施形態のメモリシステムは、複数のメモリセルを含む不揮発性メモリと、メモリコントローラと、を備える。複数のメモリセルの各々は、第1ビット及び第2ビットを記憶するように構成される。メモリコントローラは、複数のメモリセルから第1ビットに対応するデータを読み出す第1読出し処理に第1電圧を適用して、第1データを読み出し、複数のメモリセルから第2ビットに対応するデータを読み出す第2読出し処理に第2電圧を適用して、第2データを読み出し、第1データの誤り訂正処理に成功した場合、第2データの誤り訂正処理に成功したか否かに関わらず、第1データ、及び第1データを誤り訂正した第3データに基づいて、第3電圧を算出し、第1読出し処理に適用する第1読出し電圧を、第1電圧から第3電圧に更新するように構成される。
【選択図】
図7
【特許請求の範囲】
【請求項1】
複数のメモリセルを含む不揮発性メモリと、
メモリコントローラと、
を備え、
前記複数のメモリセルの各々は、第1ビット及び第2ビットを記憶するように構成され、
前記メモリコントローラは、
前記複数のメモリセルから前記第1ビットに対応するデータを読み出す第1読出し処理に第1電圧を適用して、第1データを読み出し、
前記複数のメモリセルから前記第2ビットに対応するデータを読み出す第2読出し処理に第2電圧を適用して、第2データを読み出し、
前記第1データの誤り訂正処理に成功した場合、
前記第1データ、及び前記第1データを誤り訂正した第3データに基づいて、第3電圧を算出し、
前記第1読出し処理に適用する第1読出し電圧を、前記第1電圧から前記第3電圧に更新する
ように構成された、
メモリシステム。
【請求項2】
前記メモリコントローラは、前記第1データの誤り訂正処理に失敗した場合、
読出し電圧をシフトさせながら、前記複数のメモリセルから前記第1ビットに対応する複数のデータを読み出し、
前記複数のデータに基づいて、第4電圧を算出し、
前記第1読出し電圧を、前記第1電圧から前記第4電圧に更新する
ように構成された、
請求項1記載のメモリシステム。
【請求項3】
前記メモリコントローラは、前記第1データの誤り訂正処理に失敗した場合、
前記第1データ、前記第2データ、前記第1電圧、及び前記第2電圧に基づいて、第5電圧を算出し、
前記第1読出し電圧を、前記第1電圧から前記第5電圧に更新する
ように構成された、
請求項1記載のメモリシステム。
【請求項4】
前記メモリコントローラは、
前記第2読出し処理に第6電圧を更に適用して、前記第2データを読み出し、
前記第1データの誤り訂正処理に失敗し、かつ前記第2データの誤り訂正処理に成功した場合、
前記第2データ、及び前記第2データを誤り訂正した第4データに基づいて、第7電圧及び第8電圧を算出し、
前記第2読出し処理に適用する第2読出し電圧及び第3読出し電圧を、前記第2電圧及び前記第6電圧から前記第7電圧及び前記第8電圧に更新し、
前記第7電圧及び前記第8電圧から少なくとも1個の電圧を選択し、
前記選択された電圧、及び前記選択された電圧から算出される前記第1読出し電圧の信用度に基づいて、第9電圧を算出し、
前記第1読出し電圧を、前記第1電圧から前記第9電圧に更新する
ように構成された、
請求項1記載のメモリシステム。
【請求項5】
前記メモリコントローラは、
前記第7電圧から算出される前記第1読出し電圧の第1信用度、及び前記第8電圧から算出される前記第1読出し電圧の第2信用度のうちの最大の信用度に対応する1個の電圧を選択する
ように構成された、
請求項4記載のメモリシステム。
【請求項6】
前記メモリコントローラは、前記最大の信用度が第1閾値未満の場合、
前記第1データ、前記第2データ、前記第1電圧、前記第2電圧、及び前記第6電圧に基づいて、第10電圧を算出し、
前記第1読出し電圧を、前記第1電圧から前記第10電圧に更新する
ように構成された、
請求項5記載のメモリシステム。
【請求項7】
前記メモリコントローラは、
前記第7電圧から算出される前記第1読出し電圧の第1信用度、及び前記第8電圧から算出される前記第1読出し電圧の第2信用度のうちの第2閾値以上の信用度に対応する少なくとも1個の電圧を選択する
ように構成された、
請求項4記載のメモリシステム。
【請求項8】
前記複数のメモリセルの各々は、第3ビットを更に記憶するように構成され、
前記メモリコントローラは、
前記複数のメモリセルから前記第3ビットに対応するデータを読み出す第3読出し処理に第11電圧を適用して、第5データを読み出し、
前記第1データの誤り訂正処理に失敗し、前記第2データの誤り訂正処理に成功し、かつ前記第3データの誤り訂正処理に成功した場合、
前記第2データ、及び前記第2データを誤り訂正した第4データに基づいて、第7電圧を算出し、
前記第2読出し処理に適用する第2読出し電圧を、前記第2電圧から前記第7電圧に更新し、
前記第3データ、及び前記第3データを誤り訂正した第6データに基づいて、第12電圧を算出し、
前記第3読出し処理に適用する第3読出し電圧を、前記第11電圧から前記第12電圧に更新し、
前記第7電圧及び前記第12電圧から少なくとも1個の電圧を選択し、
前記選択された電圧、及び前記選択された電圧から算出される前記第1読出し電圧の信用度に基づいて、第9電圧を算出し
前記第1読出し電圧を、前記第1電圧から前記第9電圧に更新する
ように構成された、
請求項1記載のメモリシステム。
【請求項9】
前記メモリコントローラは、
前記第7電圧から算出される前記第1読出し電圧の第1信用度、及び前記第11電圧から算出される前記第1読出し電圧の第3信用度のうちの最大の信用度に対応する1個の電圧を選択する
ように構成された、
請求項8記載のメモリシステム。
【請求項10】
前記メモリコントローラは、前記最大の信用度が第1閾値未満の場合、
前記第1データ、前記第2データ、前記第3データ、前記第1電圧、前記第2電圧、及び前記第11電圧に基づいて、第13電圧を算出し、
前記第1読出し電圧を、前記第1電圧から前記第13電圧に更新する
ように構成された、
請求項9記載のメモリシステム。
【請求項11】
前記メモリコントローラは、
前記第7電圧から算出される前記第1読出し電圧の第1信用度、及び前記第11電圧から算出される前記第1読出し電圧の第3信用度のうちの閾値以上の信用度に対応する少なくとも1個の電圧を選択する
ように構成された、
請求項8記載のメモリシステム。
【請求項12】
前記不揮発性メモリは、ワード線を更に含み、
前記複数のメモリセルは、前記ワード線に接続される、
請求項1記載のメモリシステム。
【請求項13】
前記メモリコントローラは、前記第2データの誤り訂正処理に失敗した場合、
読出し電圧をシフトさせながら、前記複数のメモリセルから前記第2ビットに対応する複数のデータを読み出し、
前記複数のデータに基づいて第14電圧を算出し、
前記第2読出し電圧を、前記第2電圧から前記第14電圧に更新する
ように構成された、
請求項12記載のメモリシステム。
【請求項14】
前記信用度は、前記選択された電圧と、前記第1読出し電圧との間の相関を示す、
請求項4記載のメモリシステム。
【請求項15】
複数のメモリセルを含む不揮発性メモリと、
メモリコントローラと、
を備え、
前記複数のメモリセルの各々は、第1ビット及び第2ビットを記憶するように構成され、
前記メモリコントローラは、
前記複数のメモリセルから前記第1ビットに対応するデータを読み出す第1読出し処理に第1電圧を適用して、第1データを読み出し、
前記複数のメモリセルから前記第2ビットに対応するデータを読み出す第2読出し処理に第2電圧を適用して、第2データを読み出し、
前記第1データ、前記第2データ、前記第1電圧、及び前記第2電圧に基づいて、第3電圧を算出し、
前記第1読出し電圧を、前記第1電圧から前記第3電圧に更新する
ように構成された、
メモリシステム。
【請求項16】
前記メモリコントローラは、前記第1データ、前記第2データ、前記第1電圧、及び前記第2電圧を線形マトリクスに入力して、前記第3電圧を算出するように構成された、
請求項15記載のメモリシステム。
【請求項17】
前記メモリコントローラは、前記第1データ、前記第2データ、前記第1電圧、及び前記第2電圧をニューラルネットワークに入力して、前記第3電圧を算出するように構成された、
請求項15記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
実施形態は、メモリシステムに関する。
【背景技術】
【0002】
不揮発性メモリとしてのNANDフラッシュメモリと、不揮発性メモリを制御するメモリコントローラと、を含むメモリシステムが知られている。メモリコントローラは、不揮発性メモリからデータを読み出すための最適な読出し電圧を推定する機能を有する。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許第11195585号明細書
【特許文献2】米国特許第9069659号明細書
【特許文献3】米国特許第11086569号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
高精度に読出し電圧を推定する。
【課題を解決するための手段】
【0005】
実施形態のメモリシステムは、複数のメモリセルを含む不揮発性メモリと、メモリコントローラと、を備える。上記複数のメモリセルの各々は、第1ビット及び第2ビットを記憶するように構成される。上記メモリコントローラは、上記複数のメモリセルから上記第1ビットに対応するデータを読み出す第1読出し処理に第1電圧を適用して、第1データを読み出し、上記複数のメモリセルから上記第2ビットに対応するデータを読み出す第2読出し処理に第2電圧を適用して、第2データを読み出し、上記第1データの誤り訂正処理に成功した場合、上記第2データの誤り訂正処理に成功したか否かに関わらず、上記第1データ、及び上記第1データを誤り訂正した第3データに基づいて、第3電圧を算出し、上記第1読出し処理に適用する第1読出し電圧を、上記第1電圧から上記第3電圧に更新するように構成される。
【図面の簡単な説明】
【0006】
【
図1】第1実施形態に係る情報処理システムの構成の一例を示すブロック図。
【
図2】第1実施形態に係るメモリバスで用いられる信号の一例を示すブロック図。
【
図3】第1実施形態に係る不揮発性メモリの構成の一例を示す回路図。
【
図4】第1実施形態に係る複数のメモリセルトランジスタの閾値電圧分布の一例を示す模式図。
【
図5】第1実施形態に係るメモリシステムに記憶される情報の一例を示す図。
【
図6】第1実施形態に係るメモリシステムにおけるシフト量推定処理を含む読出し処理の一例を示すフローチャート。
【
図7】第1実施形態に係るメモリシステムにおけるシフト量推定処理の第1例を示すフローチャート。
【
図8】第1実施形態に係るメモリシステムにおけるシフト量推定処理に適用される第1推定方式の一例を示す図。
【
図9】第1実施形態に係るメモリシステムにおけるシフト量推定処理に適用される第2推定方式の一例を示す図。
【
図10】第1実施形態に係るメモリシステムにおけるシフト量推定処理の第2例を示すフローチャート。
【
図11】第1実施形態に係るメモリシステムにおけるシフト量推定処理に適用される第3推定方式の一例を示す図。
【
図12】第2実施形態に係る情報処理システムの構成の一例を示すブロック図。
【
図13】第2実施形態に係るメモリシステムの信用度情報の一例を示す図。
【
図14】第2実施形態に係るメモリシステムの補正DBの一例を示す図。
【
図15】第2実施形態に係るメモリシステムにおけるシフト量推定処理の第3例を示すフローチャート。
【
図16】第2実施形態に係るメモリシステムにおけるシフト量推定処理に適用される第4推定方式の一例を示すフローチャート。
【
図17】第2実施形態に係るメモリシステムにおけるシフト量推定処理に適用される第4推定方式の一例を示す図。
【
図18】第2実施形態に係るメモリシステムにおけるシフト量推定処理に適用される第4推定方式の一例を示す図。
【
図19】第2実施形態に係るメモリシステムにおけるシフト量推定処理の第4例を示すフローチャート。
【
図20】第3実施形態に係るメモリシステムにおけるシフト量推定処理の一例を示すフローチャート。
【
図21】第3実施形態に係るメモリシステムにおけるシフト量選択処理の一例を示すフローチャート。
【
図22】第1変形例に係るメモリシステムにおけるシフト量推定処理を含む読出し処理の一例を示すフローチャート。
【
図23】第1変形例に係るメモリシステムにおけるシフト量推定処理の一例を示すフローチャート。
【
図24】第2変形例に係るメモリシステムにおけるシフト量推定処理に適用される第4推定方式の一例を示すフローチャート。
【
図25】第2変形例に係るメモリシステムにおけるシフト量推定処理に適用される第4推定方式の一例を示す図。
【発明を実施するための形態】
【0007】
以下、図面を参照して実施形態について説明する。なお、以下の説明において、同一の機能及び構成を有する構成要素については、共通する参照符号を付す。また、共通する参照符号を有する複数の構成要素を区別する場合、当該共通する参照符号に添え字を付して区別する。なお、複数の構成要素について特に区別を要さない場合、当該複数の構成要素には、共通する参照符号のみが付され、添え字は付さない。
【0008】
1.第1実施形態
1.1 構成
1.1.1 情報処理システム
第1実施形態に係る情報処理システムの構成について説明する。
【0009】
図1は、第1実施形態に係る情報処理システムの構成の一例を示すブロック図である。
図1に示すように、情報処理システム1は、ホスト2及びメモリシステム3を含む。
【0010】
ホスト2は、メモリシステム3を使用してデータを処理するデータ処理装置である。ホスト2は、例えば、パーソナルコンピュータ又はデータセンタ内のサーバである。
【0011】
メモリシステム3は、ホスト2に接続されるように構成された記憶装置である。メモリシステム3は、例えば、SDTMカードのようなメモリカード、UFS(Universal Flash Storage)、SSD(Solid State Drive)である。メモリシステム3は、ホスト2からの要求に応じてデータの書込み処理、読出し処理、消去処理を実行する。メモリシステム3は、内部処理として書込み処理、読出し処理、及び消去処理を実行してもよい。
【0012】
1.1.2 メモリシステム
第1実施形態に係るメモリシステムの内部構成について説明する。
【0013】
メモリシステム3は、メモリコントローラ10、不揮発性メモリ20、及び揮発性メモリ30を含む。
【0014】
メモリコントローラ10は、例えばSoC(System-on-a-Chip)のような集積回路で構成される。メモリコントローラ10は、ホスト2からの要求に基づいて、不揮発性メモリ20を制御する。
【0015】
具体的には、例えば、メモリコントローラ10は、ホスト2からの書込み要求に基づいて、書込みデータを不揮発性メモリ20に書き込む。また、メモリコントローラ10は、ホスト2からの読出し要求に基づいて、読出しデータを不揮発性メモリ20から読み出す。そして、メモリコントローラ10は、読出しデータに基づくデータをホスト2に送信する。
【0016】
不揮発性メモリ20は、例えば、NANDフラッシュメモリである。不揮発性メモリ20は、複数のブロックBLK(BLK0~BLK3)を含む。各ブロックBLKは、各々が複数のメモリセルを含む。各メモリセルは、不揮発にデータを記憶する。ブロックBLKは、例えば、データの消去単位である。
【0017】
揮発性メモリ30は、例えば、DRAM(Dynamic Random Access Memory)である。揮発性メモリ30には、例えば、不揮発性メモリ20からデータを読み出す際に用いられる読出し電圧に関する情報等が記憶される。
【0018】
1.1.3 メモリコントローラ
次に、引き続き
図1を参照して、メモリコントローラ10の内部構成について説明する。メモリコントローラ10は、制御回路11、バッファメモリ12、不揮発性メモリインタフェース回路(NVMI/F)13、ホストインタフェース回路(ホストI/F)14、揮発性メモリインタフェース回路(VMI/F)15、ECC(Error Correction and Check)回路16、及びヒストグラムエンジン17を含む。以下に説明される制御回路11、バッファメモリ12、不揮発性メモリインタフェース回路13、ホストインタフェース回路14、揮発性メモリインタフェース回路15、ECC回路16、及びヒストグラムエンジン17の機能は、専用ハードウェア、プログラムを実行するプロセッサ、又はこれらの組合せのいずれでも実現可能である。
【0019】
制御回路11は、メモリコントローラ10の全体を制御する回路である。制御回路11は、例えば、CPU(Central Processing Unit)のようなプロセッサ、ROM(Read Only Memory)、及びRAM(Random Access Memory)を含む。
【0020】
バッファメモリ12は、例えば、SRAM(Static Random Access Memory)である。バッファメモリ12は、ホスト2と不揮発性メモリ20との間でデータをバッファリングする。バッファメモリ12は、書込みデータ、及び読出しデータを一時的に記憶する。バッファメモリ12に記憶される情報の例については、後述する。
【0021】
不揮発性メモリインタフェース回路13は、メモリコントローラ10と不揮発性メモリ20との間の通信を司る。不揮発性メモリインタフェース回路13は、メモリバスMBを介して不揮発性メモリ20と接続される。メモリバスBUSは、例えば、SDR(single data rate)インタフェース、トグルDDR(double data rate)インタフェース、又はONFI(Open NAND flash interface)に準拠する。
【0022】
ホストインタフェース回路14は、メモリコントローラ10とホスト2との間の通信を司る。ホストインタフェース回路14は、ホストバスを介してホスト2と接続される。ホストバスは、例えば、SDTMインタフェース、SAS(Serial Attached SCSI (Small Computer System Interface))、SATA(Serial ATA (Advanced Technology Attachment))、又はPCIeTM(Peripheral Component Interconnect express)に準拠する。
【0023】
揮発性メモリインタフェース回路15は、メモリコントローラ10と揮発性メモリ30との間の通信を司る。揮発性メモリ30とメモリコントローラ10との間を接続するバスは、例えば、DRAMインタフェース規格に準拠する。
【0024】
ECC回路16は、不揮発性メモリ20に記憶されるデータに関する誤り検出処理及び誤り訂正処理を行う。すなわち、データの書込み処理時には、ECC回路16は、書込みデータに誤り訂正符号を付与する。データの読出し処理時には、ECC回路16は、読出しデータを復号し、フェイルビットの有無を検出する。フェイルビットとは、あるメモリセルから読み出されたデータ(1以上のビットを含む)のうち、当該メモリセルに書き込まれたデータと異なるビットである。そしてフェイルビットが検出された際には、ECC回路16は、フェイルビットの位置を特定し、誤り訂正処理を実行する。誤り訂正処理の方法は、例えば、硬判定復号(Hard bit decoding)及び軟判定復号(Soft bit decoding)を含む。硬判定復号に用いられる硬判定復号符号としては、例えば、BCH(Bose‐Chaudhuri‐Hocquenghem)符号やRS(Reed‐Solomon)符号等を用いることができ、軟判定復号に用いられる軟判定復号符号としては、例えば、LDPC(Low Density Parity Check)符号等を用いることができる。以下では、特に断らない限り、誤り訂正処理には、硬判定復号が適用されるものとする。
【0025】
ヒストグラムエンジン17は、不揮発性メモリ20に記憶されるデータに基づくヒストグラム生成処理を行う。ヒストグラムエンジン17は、不揮発性メモリ20に記憶されるデータに基づいて、複数のメモリセルをいくつかの状態に分類する。ヒストグラムエンジン17は、分類された状態毎のメモリセル数を、ヒストグラムとして出力する。ヒストグラムエンジン17によって出力されるヒストグラムは、例えば、読出し処理に適用される読出し電圧のデフォルト値からのシフト量の推定処理(シフト量推定処理)に用いられる。
【0026】
1.1.4 メモリバス
次に、不揮発性メモリ20とメモリコントローラ10との間でやり取りされる信号の一例を説明する。
図2は、第1実施形態に係るメモリバスで用いられる信号の一例を示すブロック図である。
【0027】
メモリバスMBで用いられる信号は、例えば、チップイネーブル信号CEn、コマンドラッチイネーブル信号CLE、アドレスラッチイネーブル信号ALE、ライトイネーブル信号WEn、リードイネーブル信号REn、ライトプロテクト信号WPn、レディ・ビジー信号RBn、及び入出力信号I/Oを含む。本明細書において、信号の名称の末尾のnは、その信号が“L(Low)”レベルの場合にアサートされることを意味する。
【0028】
チップイネーブル信号CEnは、不揮発性メモリ20をイネーブルにするための信号である。
【0029】
コマンドラッチイネーブル信号CLE及びアドレスラッチイネーブル信号ALEは、不揮発性メモリ20への入力信号I/Oがそれぞれコマンド及びアドレスであることを不揮発性メモリ20に通知する信号である。
【0030】
ライトイネーブル信号WEnは、入力信号I/Oを不揮発性メモリ20に取り込ませるための信号である。
【0031】
リードイネーブル信号REnは、不揮発性メモリ20から出力信号I/Oを読み出すための信号である。
【0032】
ライトプロテクト信号WPnは、データの書き込み及び消去の禁止を不揮発性メモリ20に指示するための信号である。
【0033】
レディ・ビジー信号RBnは、不揮発性メモリ20がレディ状態であるか、それともビジー状態であるかを示す信号である。レディ状態は、不揮発性メモリ20がメモリコントローラ10からの命令を受信出来る状態である。ビジー状態は、不揮発性メモリ20がメモリコントローラ10からの命令を受信出来ない状態である。レディ・ビジー信号RBnは、“L”レベルがビジー状態を示す。
【0034】
入出力信号I/Oは、例えば8ビットの信号である。入出力信号I/Oは、不揮発性メモリ20とメモリコントローラ10との間で送受信されるデータの実体である。入出力信号I/Oは、コマンド、アドレス、並びに書込みデータ及び読出しデータ等のデータを含む。
【0035】
1.1.5 不揮発性メモリ
次に、不揮発性メモリ20の構成について説明する。
図3は、第1実施形態に係る構成の一例を示す回路図である。
図3では、一例として、ブロックBLK0の構成が示される。他のブロックBLK1~BLK3の構成は、ブロックBLK0の構成と同等である。ブロックBLK0は、例えば、4つのストリングユニットSU0~SU3を含む。なお、
図3において、ストリングユニットSU2及びSU3の構成は簡略化して示される。
【0036】
各ストリングユニットSUは、ビット線BL0、BL1、…、及びBLm(mは、2以上の整数)にそれぞれ関連付けられた複数のNANDストリングNSを含む。NANDストリングNSは、例えばメモリセルトランジスタMT0~MT7、並びに選択トランジスタST1及びST2を含む。
【0037】
メモリセルトランジスタMTは、制御ゲート及び電荷蓄積層を含み、データを不揮発に記憶する。選択トランジスタST1及びST2のそれぞれは、各種処理時におけるストリングユニットSUの選択に使用される。
【0038】
各NANDストリングNSにおいて、メモリセルトランジスタMT0~MT7は、直列接続される。直列接続されたメモリセルトランジスタMT0~MT7の一端と、関連付けられたビット線BLとの間には、選択トランジスタST1が接続される。直列接続されたメモリセルトランジスタMT0~MT7の他端には、選択トランジスタST2のドレインが接続される。選択トランジスタST2のソースには、ソース線SLが接続される。
【0039】
同一のブロックBLKにおいて、ストリングユニットSU0~SU3に含まれた複数の選択トランジスタST1の各々のゲートは、選択ゲート線SGD0~SGD3にそれぞれ共通接続される。複数のメモリセルトランジスタMT0~MT7の各々の制御ゲートは、ワード線WL0~WL7にそれぞれ共通接続される。複数の選択トランジスタST2の各々のゲートは、選択ゲート線SGSに共通接続される。
【0040】
ビット線BL0~BLmは、複数のブロックBLK0~BLK3で共有される。同じカラムアドレスに対応するNANDストリングNSには、同じビット線BLが接続される。ワード線WL0~WL7のそれぞれは、ブロックBLK0~BLK3の各々に設けられる。ソース線SLは、例えば、複数のブロックBLK0~BLK3で共有される。
【0041】
1つのストリングユニットSU内で共通のワード線WLに接続された複数のメモリセルトランジスタMTの集合は、例えばセルユニットCUと称され、データの書込み単位として使用される。例えば、それぞれが1ビットデータを記憶するメモリセルトランジスタMTを含むセルユニットCUの記憶容量が、「1ページデータ」として定義される。つまり、1ページデータは、セルユニットCU内のメモリセルトランジスタMTの数に応じた列数を有する1ビットデータ列のデータ領域である。1ページデータは、例えば、データの読出し単位として使用される。セルユニットCUは、メモリセルトランジスタMTが記憶するビットデータ数に応じて2ページデータ以上の記憶容量を有し得る。
【0042】
なお、以上で説明したブロックBLKの回路構成はあくまで一例であり、これに限定されない。例えば、ビット線BLの本数は、3本以上に限らず、1本又は2本でもよい。不揮発性メモリ20に含まれるブロックBLKの個数は、任意の個数に設計され得る。各ブロックBLKが含むストリングユニットSUの個数は、任意の個数に設計され得る。各NANDストリングNSが含むメモリセルトランジスタMT並びに選択トランジスタST1及びST2の各々の個数は、それぞれ任意の個数に設計され得る。
【0043】
以下では、1つのメモリセルトランジスタMTが3ビットデータを記憶することができる場合について説明する。この場合、メモリセルトランジスタMTに3ビットのデータを記憶させる書込みモードは、TLC(Triple Level Cell)モードとも呼ばれる。TLCモードによって書き込まれたメモリセルトランジスタが記憶する3ビットデータを、下位ビットから順に下位(Lower)ビット、中位ビット(Middle)、及び上位(Upper)ビットと呼ぶ。また、同一のセルユニットCUに含まれるメモリセルトランジスタMTの記憶する下位ビットの集合を“下位ページ”又は“P0”と呼び、中位ビットの集合を“中位ページ”又は“P1”と呼び、上位ビットの集合を“上位ページ”又は“P2”と呼ぶ。
【0044】
図4は、第1実施形態に係る複数のメモリセルトランジスタMTの閾値電圧分布の一例を示す模式図である。メモリセルトランジスタMTが3ビットのデータを記憶する場合、その閾値電圧の分布は8個に分けられる。この8個の閾値電圧分布を、閾値電圧が低いものから順に“S0”状態(ステート)、“S1”状態、“S2”状態、“S3”状態、“S4”状態、“S5”状態、“S6”状態、及び“S7”状態と呼ぶ。
【0045】
また、
図4に示す電圧R1、R2、R3、R4、R5、R6、及びR7はそれぞれ、読出し処理の際に隣り合う2つの状態を区別するために用いられる。電圧VREADは、読出し処理時において非選択ワード線に印加される電圧である。メモリセルトランジスタMTは、ゲートに電圧VREADが印加されると記憶するデータに依らずにオン状態になる。これらの電圧値の関係は、R1<R2<R3<R4<R5<R6<R7<VREADである。
【0046】
上述した閾値電圧分布のうち“S0”状態は、メモリセルトランジスタMTの消去状態に相当する。“S0”状態における閾値電圧は、電圧R1未満である。“S1”状態における閾値電圧は、電圧R1以上且つ電圧R2未満である。“S2”状態における閾値電圧は、電圧R2以上且つ電圧R3未満である。“S3”状態における閾値電圧は、電圧R3以上且つ電圧R4未満である。“S4”状態における閾値電圧は、電圧R4以上且つ電圧R5未満である。“S5”状態における閾値電圧は、電圧R5以上且つ電圧R6未満である。“S6”状態における閾値電圧は、電圧R6以上且つ電圧R7未満である。“S7”状態における閾値電圧は、電圧R7以上且つ電圧VREAD未満である。
【0047】
上述した8個の閾値電圧分布は、下位ビット、中位ビット、及び上位ビットを含む3ビット(3ページ)データを書き込むことで形成される。そして8個の閾値電圧分布が、それぞれ異なる3ビットのデータに対応する。以下では、各状態に含まれるメモリセルトランジスタMTに対して、“上位ビット/中位ビット/下位ビット”に以下に示すようにデータを割り付けるものとする。
【0048】
“S0”状態に含まれるメモリセルトランジスタMTは、“111”データを記憶する。“S1”状態に含まれるメモリセルトランジスタMTは、“110”データを記憶する。“S2”状態に含まれるメモリセルトランジスタMTは、“100”データを記憶する。“S3”状態に含まれるメモリセルトランジスタMTは、“000”データを記憶する。“S4”状態に含まれるメモリセルトランジスタMTは、“010”データを記憶する。“S5”状態に含まれるメモリセルトランジスタMTは、“011”データを記憶する。“S6”状態に含まれるメモリセルトランジスタMTは、“001”データを記憶する。“S7”状態に含まれるメモリセルトランジスタMTは、“101”データを記憶する。
【0049】
下位ページの読出し処理(P0読出し処理)は、“S0”状態と“S1”状態とを区別する電圧R1、及び“S4”状態と“S5”状態とを区別する電圧R5を読出し電圧として用いる。P0読出し処理に使用される電圧R1及びR5の組は、読出し電圧群Vth_0とも呼ばれる。
【0050】
中位ページの読出し処理(P1読出し処理)は、“S1”状態と“S2”状態とを区別する電圧R2、“S3”状態と“S4”状態とを区別する電圧R4、及び“S5”状態と“S6”状態とを区別する電圧R6を読出し電圧として用いる。P1読出し処理に使用される電圧R2、R4、及びR6の組は、読出し電圧群Vth_1とも呼ばれる。
【0051】
上位ページの読出し処理(P2読出し処理)は、“S2”状態と“S3”状態とを区別する電圧R3、及び“S6”状態と“S7”状態とを区別する電圧R7を読出し電圧として用いる。P2読出し処理に使用される電圧R3及びR7の組は、読出し電圧群Vth_2とも呼ばれる。
【0052】
なお、メモリコントローラ10は、読出し処理に適用する読出し電圧R1~R7を、デフォルト値からのシフト量ΔR1~ΔR7を表すDAC(Digital to Analogue Converter)値で管理する。以下では、読出し電圧群Vth_0に対応するシフト量の組(ΔR1,ΔR5)をシフト量群ΔVth_0とも呼ぶ。読出し電圧群Vth_1に対応するシフト量の組(ΔR2,ΔR4,ΔR6)をシフト量群ΔVth_1とも呼ぶ。読出し電圧群Vth_2に対応するシフト量の組(ΔR3,ΔR7)をシフト量群ΔVth_2とも呼ぶ。
【0053】
1.1.6 バッファメモリ
次に、シフト量推定処理に際してバッファメモリ12に記憶される情報について説明する。
図5は、第1実施形態に係るメモリシステムのバッファメモリに記憶される情報の一例を示す図である。
図5の例では、メモリセルトランジスタMTにTLCモードでデータが書き込まれる場合に、シフト量推定処理に際してバッファメモリ12に記憶される情報の一例が示される。
【0054】
バッファメモリ12には、6ページ分のデータP0_1、P0_2、P1_1、P1_2、P2_1、及びP2_2、並びに3ビット分の訂正ステータスSTS0、STS1、及びSTS2を記憶するための領域が割り当てられる。
【0055】
制御回路11は、データP0_1を、誤り訂正処理前の下位ページデータとみなす。制御回路11は、データP0_2を、誤り訂正処理後の下位ページデータとみなす。訂正ステータスSTS0は、下位ページデータに対する誤り訂正処理が成功したか否かを示すビットである。訂正ステータスSTS0が“1”の場合、制御回路11は、下位ページデータに対する誤り訂正処理が成功したとみなす。訂正ステータスSTS0が“0”の場合、制御回路11は、下位ページデータに対する誤り訂正処理が失敗したとみなす。
【0056】
制御回路11は、データP1_1を、誤り訂正処理前の中位ページデータとみなす。制御回路11は、データP1_2を、誤り訂正処理後の中位ページデータとみなす。訂正ステータスSTS1は、中位ページデータに対する誤り訂正処理が成功したか否かを示すビットである。訂正ステータスSTS1が“1”の場合、制御回路11は、中位ページデータに対する誤り訂正処理が成功したとみなす。訂正ステータスSTS1が“0”の場合、制御回路11は、中位ページデータに対する誤り訂正処理が失敗したとみなす。
【0057】
制御回路11は、データP2_1を、誤り訂正処理前の上位ページデータとみなす。制御回路11は、データP2_2を、誤り訂正処理後の上位ページデータとみなす。訂正ステータスSTS2は、上位ページデータに対する誤り訂正処理が成功したか否かを示すビットである。訂正ステータスSTS2が“1”の場合、制御回路11は、上位ページデータに対する誤り訂正処理が成功したとみなす。訂正ステータスSTS2が“0”の場合、制御回路11は、上位ページデータに対する誤り訂正処理が失敗したとみなす。
【0058】
1.2 動作
次に、第1実施形態に係るメモリシステムにおける動作について説明する。
【0059】
1.2.1 シフト量推定処理を含む読出し処理
図6は、第1実施形態に係るメモリシステムにおけるシフト量推定処理を含む読出し処理の一例を示すフローチャートである。
図6では、TLCモードで書き込まれたセルユニットCUに対して、全ページ分の読出し処理が実行される場合が示される。
【0060】
読出し条件が満たされると(開始)、メモリコントローラ10は、変数iを“0”に初期化する(S10)。変数iは、0以上の整数である。
【0061】
読出し条件が満たされることは、メモリコントローラ10が内部処理において実行する読出し処理の開始条件が満たされることを含む。また、読出し条件が満たされることは,メモリコントローラ10がホスト2からリード要求を受けることを含んでもよい。
【0062】
内部処理は、例えば、パトロール処理を含む。パトロール処理において、メモリコントローラ10は、定期又は不定期に不揮発性メモリ20からデータを読み出す。そして、メモリコントローラ10は、読み出されたデータに対して誤り訂正処理を実行し、読出しデータに含まれるフェイルビット数が誤り訂正可能な許容値以下であるか否かを判定する。フェイルビット数が許容値を超える場合、メモリコントローラ10は、当該データが読み出された記憶領域に対してリフレッシュ処理を実行する。リフレッシュ処理は、データを書き直す処理を含む。このように、パトロール処理を実行することによって、メモリコントローラ10は、不揮発性メモリ20内のデータに含まれるフェイルビット数を許容値以下に維持することができる。
【0063】
S10の処理の後、メモリコントローラ10は、シフト量群ΔVth_aiを用いるページPiの読出し処理を不揮発性メモリ20に実行させる(S11)。シフト量群ΔVth_aiは、シフト量推定処理の実行前の読出し処理において適用されるシフト量群ΔVth_iである。
【0064】
メモリコントローラ10は、S11の処理で読み出されたデータを、データPi_1としてバッファメモリ12に記憶させる(S12)。
【0065】
メモリコントローラ10のECC回路16は、S12の処理で記憶されたデータPi_1に対して誤り訂正処理を実行する(S13)。
【0066】
誤り訂正処理に成功した場合(S13;yes)、メモリコントローラ10は、訂正後のデータをデータPi_2としてバッファメモリ12に記憶させる(S14)。
【0067】
そして、メモリコントローラ10は、誤り訂正処理が成功したことを示すビット“1”を訂正ステータスSTSiとしてバッファメモリ12に記憶させる(S15)。
【0068】
誤り訂正処理に失敗した場合(S13;no)、メモリコントローラ10は、データPi_1をデータPi_2としてバッファメモリ12にコピーさせる(S16)。
【0069】
そして、メモリコントローラ10は、誤り訂正処理が失敗したことを示すビット“0”を訂正ステータスSTSiとしてバッファメモリ12に記憶させる(S17)。
【0070】
S15の処理又はS17の処理の後、メモリコントローラ10は、全てのページについて読出し処理が実行済みであるか否かを判定する(S18)。具体的には、TLCモードで書き込まれたセルユニットCUに対する読出し処理の場合、メモリコントローラ10は、変数iが2であるか否かを判定する。
【0071】
読出し処理が実行済みでないページがある場合(S18;no)、メモリコントローラ10は、変数iをインクリメントする(S19)。
【0072】
S19の処理の後、メモリコントローラ10は、シフト量群ΔVth_aiを用いるページPiの読出し処理を不揮発性メモリ20に実行させる(S11)。そして、後続するS12~S18の処理が実行される。このように、全てのページについて読出し処理が実行されるまで(すなわち、バッファメモリ12に、データP0_1、P0_2、P1_1、P1_2、P2_1、及びP2_2、並びに訂正ステータスSTS0、STS1、及びSTS2が記憶されるまで)、S19の処理で変数iをインクリメントさせながら、S11~S18の処理が実行される。
【0073】
全てのページについて読出し処理が実行済みの場合(S18;yes)、メモリコントローラ10は、シフト量推定処理を実行する(S20)。シフト量推定処理の詳細は、後述する。
【0074】
S20の処理が終了すると、シフト量推定処理を含む読出し処理は終了となる(終了)。
【0075】
1.2.2 シフト量推定処理の第1例
シフト量推定処理の第1例について説明する。
【0076】
図7は、第1実施形態に係るメモリシステムにおけるシフト量推定処理の第1例を示すフローチャートである。
図7に示されるS21~S29の処理は、
図6におけるS20の処理に対応する。
【0077】
シフト量推定処理が開始されると(開始)、メモリコントローラ10は、データP0_1、P1_1、P2_1、P0_2、P1_2、及びP2_2を入力として用いる第1推定方式を実行して、複数のシフト量群ΔVth_p0、ΔVth_p1、及びΔVth_p2を算出する(S21)。第1推定方式は、後述する第2推定方式よりも高い精度で最適なシフト量群を推定し得る推定方式である。また、第1推定方式は、後述する第2推定方式よりも短い時間で最適なシフト量群を推定し得る推定方式である。第1推定方式の詳細については、後述する。
【0078】
S21の処理の後、メモリコントローラ10は、変数iを0に初期化する(S22)。
【0079】
メモリコントローラ10は、訂正ステータスSTSiが“1”であるか否かを判定する(S23)。
【0080】
訂正ステータスSTSiが“1”である場合(S23;yes)、メモリコントローラ10は、S21の処理で算出された複数のシフト量群ΔVth_p0、ΔVth_p1、及びΔVth_p2のうち、シフト量群ΔVth_piを採用する(S24)。
【0081】
訂正ステータスSTSiが“0”である場合(S23;no)、メモリコントローラ10は、複数の読出し処理を用いる第2推定方式を実行して、シフト量群ΔVth_tiを算出する(S25)。第2推定方式の詳細については、後述する。
【0082】
メモリコントローラ10は、S25の処理で算出されたシフト量群ΔVth_tiを採用する(S26)。
【0083】
S24の処理、又はS26の処理の後、メモリコントローラ10は、全てのページについてシフト量群ΔVth_iの採用処理が実行済みであるか否かを判定する(S27)。具体的には、TLCモードで書き込まれたセルユニットCUに対する読出し処理の場合、メモリコントローラ10は、変数iが2であるか否かを判定する。
【0084】
シフト量群ΔVth_iの採用処理が実行済みでないページがある場合(S27;no)、メモリコントローラ10は、変数iをインクリメントする(S28)。
【0085】
S28の処理の後、メモリコントローラ10は、訂正ステータスSTSiが“1”であるか否かを判定する(S23)。そして、後続するS24~S27の処理が実行される。このように、全てのページについてシフト量群ΔVth_iの採用処理が実行されるまで、S28の処理で変数iをインクリメントさせながら、S23~S27の処理が実行される。
【0086】
全てのページについてシフト量群ΔVth_iの採用処理が実行済みの場合(S27;yes)、メモリコントローラ10は、S24の処理で採用されたシフト量群ΔVth_pi及びS26の処理で採用されたシフト量群ΔVth_tiを、以降の読出し処理に適用する(S29)。
【0087】
S29の処理が終了すると、シフト量推定処理の第1例は終了となる(終了)。
【0088】
(第1推定方式)
第1推定方式において、ヒストグラムエンジン17は、データP0_1、P1_1、及びP2_1に基づいて、誤り訂正処理前の読出しデータにおける“S0”状態~“S7”状態の各々に属するメモリセルトランジスタMTの数をヒストグラムH1として算出する。また、ヒストグラムエンジン17は、データP0_2、P1_2、及びP2_2に基づいて、誤り訂正処理後の読出しデータにおける“S0”状態~“S7”状態の各々に属するメモリセルトランジスタMTの数をヒストグラムH2として算出する。そして、ヒストグラムエンジン17は、算出されたヒストグラムH1及びヒストグラムH2に基づき、メモリセル数E_x(x+1)及びE_y(y-1)を算出する(0≦x≦6、1≦y≦7)。メモリセル数E_x(x+1)は、“S(x+1)”状態として書き込まれたデータが、“Sx”状態として誤って読み出されたメモリセル数である。メモリセル数E_y(y-1)は、“S(y-1)”状態として書き込まれたデータが、“Sy”状態として誤って読み出されたメモリセル数である。
【0089】
制御回路11は、上述したメモリセル数E_x(x+1)及びE_y(y-1)に基づいて、複数のシフト量群ΔVth_p0、ΔVth_p1、及びΔVth_p2を算出する。メモリセル数E_x(x+1)及びE_y(y-1)に基づく複数のシフト量群ΔVth_p0、ΔVth_p1、及びΔVth_p2の算出方式について、
図8を用いて説明する。
【0090】
図8の例では、読出し電圧R1のシフト量ΔR1を算出する場合が示される。
図8において、“S1”状態として書き込まれたデータが“S0”状態として誤って読み出されたメモリセル数E_01は、
図8(A)~
図8(C)における領域(a)の面積に相当する。また、“S0”状態として書き込まれたデータが“S1”状態として誤って読み出されたメモリセル数E_10は、
図8(A)~
図8(C)における領域(b)の面積に相当する。
【0091】
図8(A)では、読出し電圧R1が“S0”状態及び“S1”状態に対応する2つの閾値電圧分布の交差する位置における閾値電圧R1optと等しい場合が示される。
図8(A)の場合、領域(a)の面積と、領域(b)の面積とは、等しくなる。この場合、“S0”状態と“S1”状態との間で発生するフェイルビット数E(=E_01+E_10)は最小となることが期待される。このため、メモリコントローラ10は、読出し電圧R1が更新不要であると判定する。つまり、メモリコントローラ10は、“0”のシフト量ΔR1を算出する(ΔR1=0)。
【0092】
図8(B)では、読出し電圧R1が“S0”状態及び“S1”状態に対応する2つの閾値電圧分布の交差する位置における閾値電圧R1optよりも高電圧側に位置する場合が示される。
図8(B)の場合、領域(a)の面積は、領域(b)の面積よりも大きくなる。この場合、フェイルビット数Eは、
図8(A)の場合のフェイルビット数Eよりも多くなり、好ましくない。このため、メモリコントローラ10は、読出し電圧R1を電圧R1optに近づけるように、低電圧側にシフトさせる。つまり、メモリコントローラ10は、負のシフト量ΔR1を算出する(ΔR1<0)。
【0093】
図8(C)では、読出し電圧R1が“S0”状態及び“S1”状態に対応する2つの閾値電圧分布の交差する位置における閾値電圧R1optよりも低電圧側に位置する場合が示される。
図8(C)の場合、領域(a)の面積は、領域(b)の面積よりも小さくなる。この場合、フェイルビット数Eは、
図8(A)の場合のフェイルビット数Eよりも多くなり、好ましくない。このため、メモリコントローラ10は、読出し電圧R1を電圧R1optに近づけるように、高電圧側にシフトさせる。つまり、メモリコントローラ10は、正のシフト量ΔR1を算出する(ΔR1>0)。
【0094】
なお、領域(a)の面積及び領域(b)の面積の差の絶対値は、読出し電圧R1が閾値電圧R1optから離れるほど大きくなることが期待される。このため、メモリコントローラ10は、読出し電圧R1のシフト量ΔR1を、領域(a)の面積及び領域(b)の面積の比の大きさに応じて決定する。これにより、閾値電圧分布の重複の度合いに応じて適切なシフト量を決定することができ、閾値電圧R1optに近づくようにシフト量ΔR1を算出することができる。
【0095】
なお、図示は省略されるが、他の読出し電圧R2~R7についても、読出し電圧R1の場合と同様にシフト量ΔR2~ΔR7が算出される。シフト量ΔR1及びΔR5の組が、シフト量群ΔVth_p0に対応する。シフト量ΔR2、ΔR4、及びΔR6の組が、シフト量群ΔVth_p1に対応する。シフト量ΔR3及びΔR7の組が、シフト量群ΔVth_p2に対応する。
【0096】
以上のように動作することにより、S21の処理で実行される第1推定方式では、データP0_1、P1_1、P2_1、P0_2、P1_2、及びP2_2に基づいて、複数のシフト量群ΔVth_p0、ΔVth_p1、及びΔVth_p2が算出される。
【0097】
なお、推定前のシフト量ΔR1preと、推定後のシフト量ΔR1postとの関係は、以下のようになる。すなわち、
図8(A)のように、領域(a)の面積と領域(b)の面積とが等しい場合、シフト量ΔR1postの更新は不要である。このため、ΔR1post=ΔR1preとなる。
図8(B)のように、領域(a)の面積が領域(b)の面積よりも大きい場合、シフト量ΔR1postは、シフト量ΔR1preよりも低い値に更新される。
図8(C)のように、領域(a)の面積が領域(b)の面積よりも小さい場合、シフト量ΔR1postは、シフト量ΔR1preよりも高い値に更新される。
【0098】
(第2推定方式)
第2推定方式において、メモリコントローラ10は、読出し電圧をシフトさせながら複数の読出し処理を不揮発性メモリ20に実行させる。そして、ヒストグラムエンジン17は、当該複数の読出し処理による複数の読出しデータに基づき、複数の読出し電圧で区切られる閾値電圧範囲毎のメモリセルトランジスタMTの数(区間セル数)をヒストグラムH3として算出する。
【0099】
制御回路11は、算出されたヒストグラムH3に基づいて、複数の読出し電圧群Vth_t0、Vth_t1、及びVth_t2を決定する。そして、制御回路11は、決定された複数の読出し電圧群Vth_t0、Vth_t1、及びVth_t2に基づいて、複数のシフト量群ΔVth_t0、ΔVth_t1、及びΔVth_t2を算出する。第3ヒストグラムに基づく複数の読出し電圧群Vth_t0、Vth_t1、及びVth_t2の決定方式について、
図9を用いて説明する。
【0100】
図9は、第1実施形態に係るメモリシステムにおけるシフト量推定処理に適用される第2推定方式の一例を示す図である。
【0101】
図9(A)では、一例として、“S0”状態及び“S1”状態に対応する2つの閾値電圧分布が示される。
図9(B)では、オン状態となるメモリセルトランジスタMTの数(オンセル数)Mの推移が示される。
図9(C)では、2つの読出し電圧間におけるオンセル数変化量、すなわち区間セル数Cの推移が示される。
図9(C)は、上述した第3ヒストグラムに対応する。
【0102】
図9(B)に示すように、読出し電圧Vを低電圧側にシフトさせていくと、“S1”状態の最頻値である電圧VS1midよりわずかに高い電圧でオンセル数Mが急激に減少し、|dM/dV|が極大となる。ここで、最頻値とは、
図9(A)において閾値電圧の分布確率が極大となる電圧である。更に読出し電圧Vを低くしていくと、オンセル数Mの減少率は小さくなり、或る値の読出し電圧Vにおいてオンセル数Mの減少率が極小となる。オンセル数Mの減少率の極小値は、“S1”状態に属する閾値電圧分布と、“S0”状態に属する閾値電圧分布とが重ならない場合にはゼロとなる。他方で、“S1”状態に属する閾値電圧分布と、“S0”状態に属する閾値電圧分布とが重なる場合には、オンセル数Mの減少率の極小値はゼロではない値(>0)となる。そして更に読出し電圧Vを低くしていくと、再びオンセル数Mの減少率が大きくなり、“S1”状態の最頻値である電圧VS0midよりわずかに高い電圧で再び|dM/dV|が極大となる。
【0103】
上述のオンセル数Mの変化によって、2つの状態間の閾値電圧分布の重なりが最も小さくなる読出し電圧V(すなわち、2つの状態の閾値電圧分布の交点に対応する読出し電圧V)を検出することができる。例えば、まず、読出し電圧V0を用いて読出し処理を行う。この時のオンセル数をM0とする。次に、電圧V0よりΔVだけ低い電圧V1を用いて読出し処理を行う。この時のオンセル数をM1とする。すると、読出し電圧がV0からV1に低下した際に新たにオフ状態となるメモリセルトランジスタMTの数は、C1=M0-M1個である。すなわち、閾値電圧が[V0,V1]間における区間セル数がC1個である。
【0104】
引き続き、電圧V1よりΔVだけ低い電圧V2を用いて読出し処理を行う。この時のオンセル数をM2とする。すると、読出し電圧がV1からV2に低下した際に新たにオフ状態となるメモリセルトランジスタMTの数は、C2=M1-M2個である。すなわち、閾値電圧が[V1,V2]間における区間セル数がC2個である。そして、C1>C2であったとすれば、|dM/dV|が最小となる電圧は、少なくとも電圧V1より低電圧側に位置すると考えられる。
【0105】
引き続き、電圧V2よりΔVだけ低い電圧V3を用いて読出し処理を行う。この時のオンセル数をM3とする。すると、読出し電圧がV2からV3に低下した際に新たにオフ状態となるメモリセルトランジスタMTの数は、C3=M2-M3である。すなわち、閾値電圧が[V2,V3]間における区間セル数がC3個である。ここで、C3>C2であったとすれば、第3ヒストグラムとして
図9(C)のようなヒストグラムが得られる。
【0106】
以上の結果、区間セル数Cによって、
図9(C)における一点鎖線で示されるような閾値電圧分布を推定することができる。そして、“S0”状態に属する閾値電圧分布と“S1”状態に属する閾値電圧分布との重なりが最も小さくなる読出し電圧が電圧V1と電圧V2との間(区間セル数が極小値の区間)に存在することが推定できる。
【0107】
以上のように動作することにより、S25の処理で実行される第2推定方式では、複数の読出し処理に基づいて、読出し電圧群Vth_tiが決定される。
【0108】
なお、或るページの読出し処理(ページ読出し処理)が複数の読出し処理の各々に適用される場合、各読出しデータは、連続しない複数の電圧範囲に対応づけられる場合がある。具体的には、例えば、下位ページデータ内のビット“1”は、読出し電圧R1以下の電圧範囲及び読出し電圧R5以上の電圧範囲に対応づけられる。このため、読出し電圧をシフトさせながら実行した複数のP0読出し処理による複数の下位ページデータだけでは、オンセル数を正しく算出することが困難な場合がある。
【0109】
そこで、ページ読出し処理が複数の読出し処理の各々に適用される場合、メモリコントローラ10は、当該複数の読出し処理の他に、少なくとも1回のシングルステート読出し処理を不揮発性メモリ20に更に実行させる。シングルステート読出し処理は、1個の読出し電圧に基づいて読出しデータを生成する点において、2個以上の読出し電圧に基づいて読出しデータを生成するページ読出し処理と異なる。シングルステート読出し処理には、ページデータに対応づけられる連続しない複数の電圧範囲の間に位置する電圧が適用される。具体的には、例えば、P0読出し処理に対しては、読出し電圧R3のシングルステート読出し処理が実行され得る。P1読出し処理に対しては、読出し電圧R3のシングルステート読出し処理、及び読出しR5のシングルステート読出し処理が実行され得る。P2読出し処理に対しては、読出し電圧R5のシングルステート読出し処理が実行され得る。これにより、オンセル数を正しく算出することができる。
【0110】
1.2.3 シフト量推定処理の第2例
次に、シフト量推定処理の第2例について説明する。
【0111】
図10は、第1実施形態に係るメモリシステムにおけるシフト量推定処理の第2例を示すフローチャートである。
図10に示されるS31~S39の処理は、
図6におけるS20の処理に対応する。
【0112】
シフト量推定処理が開始されると(開始)、メモリコントローラ10は、データP0_1、P1_1、P2_1、P0_2、P1_2、及びP2_2を入力として用いる第1推定方式を実行して、複数のシフト量群ΔVth_p0、ΔVth_p1、及びΔVth_p2を算出する(S31)。第1推定方式は、後述する第3推定方式よりも高い精度で最適なシフト量群を推定し得る推定方式である。
【0113】
メモリコントローラ10は、データP0_1、P1_1、及びP2_1、並びに複数のシフト量群ΔVth_a0、ΔVth_a1、及びΔVth_a2を用いる第3推定方式を実行して、複数のシフト量群ΔVth_v0、ΔVth_v1、及びΔVth_v2を算出する(S32)。
【0114】
S32の処理の後、メモリコントローラ10は、変数iを0に初期化する(S33)。
【0115】
メモリコントローラ10は、訂正ステータスSTSiが“1”であるか否かを判定する(S34)。
【0116】
訂正ステータスSTSiが“1”である場合(S34;yes)、メモリコントローラ10は、S31の処理で算出された複数のシフト量群ΔVth_p0、ΔVth_p1、及びΔVth_p2のうち、シフト量群ΔVth_piを採用する(S35)。
【0117】
訂正ステータスSTSiが“0”である場合(S34;no)、メモリコントローラ10は、S32の処理で算出された複数のシフト量群ΔVth_v0、ΔVth_v1、及びΔVth_v2のうち、シフト量群ΔVth_viを採用する(S36)。
【0118】
S35の処理、又はS36の処理の後、メモリコントローラ10は、全てのページについてシフト量群ΔVth_iの採用処理が実行済みであるか否かを判定する(S37)。具体的には、TLCモードで書き込まれたセルユニットCUに対する読出し処理の場合、メモリコントローラ10は、変数iが2であるか否かを判定する。
【0119】
シフト量群ΔVth_iの採用処理が実行済みでないページがある場合(S37;no)、メモリコントローラ10は、変数iをインクリメントする(S38)。
【0120】
S38の処理の後、メモリコントローラ10は、訂正ステータスSTSiが“1”であるか否かを判定する(S34)。そして、後続するS35~S37の処理が実行される。このように、全てのページについてシフト量群ΔVth_iの採用処理が実行されるまで、S38の処理で変数iをインクリメントさせながら、S34~S37の処理が実行される。
【0121】
全てのページについてシフト量群ΔVth_iの採用処理が実行済みの場合(S37;yes)、メモリコントローラ10は、S35の処理で採用されたシフト量群ΔVth_pi及びS36の処理で採用されたシフト量群ΔVth_viを、以降の読出し処理に適用する(S39)。
【0122】
S39の処理が終了すると、シフト量推定処理の第2例は終了となる(終了)。
【0123】
(第3推定方式)
図11は、第1実施形態に係るメモリシステムにおけるシフト量推定処理に適用される第3推定方式の一例を示す図である。
【0124】
第3推定方式において、ヒストグラムエンジン17は、データP0_1、P1_1、及びP2_1に基づいて、誤り訂正処理前の読出しデータにおける“S0”状態~”S7”状態の各々に属するメモリセルトランジスタMTの数をヒストグラムH1として算出する。そして、制御回路11は、ヒストグラムH1、並びにデータP0_1、P1_1、及びP2_1の読出し処理に適用された複数のシフト量群ΔVth_a0、ΔVth_a1、及びΔVth_a2に基づいて、複数のシフト量群ΔVth_v0、ΔVth_v1、及びΔVth_v2を算出する。なお、第3推定方式の入力として用いられる複数のシフト量群ΔVth_a0、ΔVth_a1、及びΔVth_a2はそれぞれ、データP0_1、P1_1、及びP2_1の読出し処理に適用されたシフト量群であればよく、任意の値を適用可能である。
【0125】
制御回路11は、ヒストグラムH1、並びに複数のシフト量群ΔVth_a0、ΔVth_a1、及びΔVth_a2を予め定められた線形マトリクスに入力することによって、複数のシフト量群ΔVth_v0、ΔVth_v1、Δ及びVth_v2を算出してもよい。制御回路11は、ヒストグラムH1、並びに複数のシフト量群ΔVth_a0、ΔVth_a1、及びΔVth_a2を予め学習済みのニューラルネットワークに入力することによって、複数のシフト量群ΔVth_v0、ΔVth_v1、及びΔVth_v2を算出してもよい。
【0126】
また、制御回路11は、複数のシフト量群ΔVth_v0、Vth_v1、及びVth_v2と共に、信用度r_v0、r_v1、r_v2、r_v3、r_v4、r_v5、r_v6、及びr_v7を更に算出してもよい。信用度r_v0~r_v7は、第3推定方式で算出されるシフト量の確からしさ(推定精度)を示す。信用度r_v0~r_v7の各々は、0以上1以下の実数である。信用度r_v0及びr_v5はそれぞれ、シフト量群ΔVth_v0内のシフト量ΔR1及びΔR5に対応する。信用度r_v2、r_v4、及びr_v6はそれぞれ、シフト量群ΔVth_v1内のシフト量ΔR2、ΔR4、及びΔR6に対応する。信用度r_v3及びr_v7はそれぞれ、シフト量群ΔVth_v2内のシフト量ΔR3及びΔR7に対応する。
【0127】
なお、制御回路11は、複数のシフト量群ΔVth_v0、ΔVth_v1、及びΔVth_v2と共に、信用度r_v0~r_v7を算出しなくてもよい。信用度r_v0~r_v7が複数のシフト量群ΔVth_v0、ΔVth_v1、及びΔVth_v2と共に算出されない場合、メモリコントローラ10は、信用度r_v0~r_v7を固定値として予め記憶していてもよい。
【0128】
1.3 第1実施形態に係る効果
第1実施形態によれば、或るセルユニットCUからの読出し処理において、誤り訂正処理に成功したページと失敗したページとがある場合、メモリコントローラ10は、誤り訂正処理に成功したページと失敗したページとに対してそれぞれ異なる推定方式を適用して読出し電圧を推定する。具体的には、メモリコントローラ10は、シフト量推定処理では、誤り訂正処理に成功したページに対しては第1推定方式を適用し、誤り訂正処理に失敗したページに対しては第2推定方式又は第3推定方式を適用する。これにより、1ページでも誤り訂正処理に失敗した際に全てのページに対して第2推定方式又は第3推定方式を適用する場合よりも、より多くのページに対して第1推定方式を適用できる。このため、より多くのページに対して、高精度で最適な読出し電圧を算出できる。
【0129】
シフト量推定処理の第1例では、メモリコントローラ10は、シフト量推定処理において、誤り訂正処理に成功したページに対しては第1推定方式を適用し、誤り訂正処理に失敗したページに対しては第2推定方式を適用する。第2推定方式において、メモリコントローラ10は、読出し電圧をシフトさせながら複数の読出し処理を不揮発性メモリ20に実行させる。これにより、1ページでも誤り訂正処理に失敗した際に全てのページに対して第2推定方式を適用するよりも、第2推定方式の適用回数を減らすことができる。このため、第2推定方式に際して実行される複数の読出し処理の回数を減らすことができると共に、シフト量推定処理に要する時間を短縮することができる。したがって、シフト量推定処理がメモリシステム3に与える負荷の増加を抑制することができる。
【0130】
シフト量推定処理の第2例では、メモリコントローラ10は、誤り訂正処理に成功したページに対しては第1推定方式を適用し、誤り訂正処理に失敗したページに対しては第3推定方式を適用する。第3推定方式において、メモリコントローラ10は、データP0_1、P1_1、及びP2_1に加えて、複数のシフト量群ΔVth_a0、ΔVth_a1、及びΔVth_a2を更に用いて複数のシフト量群ΔVth_v0、ΔVth_v1、及びΔVth_v2を算出する。これにより、複数のシフト量群ΔVth_a0、ΔVth_a1、及びΔVth_a2を用いることなく、データP0_1、P1_1、及びP2_1を入力としてシフト量群を推定する推定方式よりも、高精度にシフト量群ΔVth_v0、ΔVth_v1、及びΔVth_v2を推定できる。
【0131】
また、第3推定方式の入力として用いられる複数のシフト量群ΔVth_a0、ΔVth_a1、及びΔVth_a2は、固定値に限らず、任意の値を適用可能である。これにより、固定値以外の値が入力として適用できない場合よりも、第3推定方式の汎用性を高めることができる。
【0132】
2. 第2実施形態
次に、第2実施形態に係るメモリシステムについて説明する。第2実施形態は、第1推定方式によって算出されたシフト量群を、第1推定方式が適用できないページに対応するシフト量群の算出に利用する点において、第1実施形態と異なる。以下の説明では、第1実施形態と同等の構成及び動作については説明を省略し、第1実施形態と異なる構成及び動作について主に説明する。
【0133】
2.1 揮発性メモリ
図12は、第2実施形態に係る情報処理システムの構成の一例を示すブロック図である。
図12は、第1実施形態における
図1に対応する。
図12におけるホスト2、メモリコントローラ10、及び不揮発性メモリ20の構成は、
図1の場合と同等である。揮発性メモリ30は、信用度情報31及び補正DB32を記憶する。
【0134】
信用度情報31には、推定元のシフト量に基づいて推定先のシフト量を推定する場合の、当該推定先のシフト量の確からしさ(推定精度)が信用度として記憶される。信用度情報31に記憶される信用度は、例えば、推定元のシフト量と推定先のシフト量との相関を示す値である。
【0135】
図13は、第2実施形態に係る信用度情報の一例を示す図である。
図13の例では、シフト量ΔR1に基づいてシフト量ΔR2を推定する場合の信用度は、r21と表される場合が示される。同様に、シフト量ΔRpに基づいてシフト量ΔRqを推定する場合の信用度は、rqpと表される。ここで、信用度rpqは、0以上1以下の実数である。p及びqの各々は、1以上7以下の整数である。
【0136】
以下では、下位ページP0のシフト量ΔR1及びΔR5を推定元とする信用度の集合{r21,r31,r41,r51,r61,r71,r15,r25,r35,r45,r65,r75}をE0とする。中位ページP1のシフト量ΔR2、ΔR4、及びΔR6を推定元とする信用度の集合{r12,r32,r42,r52,r62,r72,r14,r24,r34,r54,r64,r74,r16,r26,r36,r46,r56,r76}をE1とする。上位ページP2のシフト量ΔR3及びΔR7を推定元とする信用度の集合{r13,r23,r43,r53,r63,r73,r17,r27,r37,r47,r57,r67}をE2とする。なお、信用度r11、r22、r33、r44、r55、r66、及びr77の各々は“1”となるので、上述の集合E0、E1、及びE2には含まれないものとする。
【0137】
また、シフト量ΔR1を推定先とする信用度の集合をF1とする。シフト量ΔR2を推定先とする信用度の集合をF2とする。シフト量ΔR3を推定先とする信用度の集合をF3とする。シフト量ΔR4を推定先とする信用度の集合をF4とする。シフト量ΔR5を推定先とする信用度の集合をF5とする。シフト量ΔR6を推定先とする信用度の集合をF6とする。シフト量ΔR7を推定先とする信用度の集合をF7とする。
【0138】
補正DB32には、推定元のシフト量の入力に対して、最も確からしい推定先のシフト量が出力として得られる情報が記憶される。
【0139】
図14は、第2実施形態に係る補正DBの一例を示す図である。
図14の例では、補正DB32として、2個のシフト量の組合せにおける生起確率分布が記憶される場合が示される。
図14において、2個のシフト量の組の一方を推定元のシフト量とし、他方を推定先のシフト量とすると、推定元のシフト量との組合せにおいて最も生起確率が高くなるシフト量が、推定先のシフト量として算出される。
【0140】
2.2 シフト量推定処理の第3例
シフト量推定処理の第3例について説明する。
【0141】
図15は、第2実施形態に係るメモリシステムにおけるシフト量推定処理の第3例を示すフローチャートである。
図15に示されるS41~S52の処理は、
図6におけるS20の処理に対応する。
【0142】
シフト量推定処理が開始されると(開始)、メモリコントローラ10は、全ての訂正ステータスSTS0、STS1、及びSTS2が“0”であるか否かを判定する(S41)。
【0143】
訂正ステータスSTS0、STS1、及びSTS2のうち少なくとも1個の訂正ステータスSTSが“1”である場合(S41;no)、メモリコントローラ10は、データP0_1、P1_1、P2_1、P0_2、P1_2、及びP2_2を入力として用いる第1推定方式を実行して、複数のシフト量群ΔVth_p0、ΔVth_p1、及びΔVth_p2を算出する(S42)。第1推定方式は、後述する第4推定方式よりも高い精度で最適なシフト量群を推定し得る推定方式である。
【0144】
S42の処理の後、メモリコントローラ10は、変数iを0に初期化する(S43)。
【0145】
S43の処理の後、メモリコントローラ10は、訂正ステータスSTSiが“1”であるか否かを判定する(S44)。
【0146】
訂正ステータスSTSiが“1”である場合(S44;yes)、メモリコントローラ10は、S42の処理で算出された複数のシフト量群ΔVth_p0、ΔVth_p1、及びΔVth_p2のうち、シフト量群ΔVth_piを採用する(S45)。
【0147】
訂正ステータスSTSiが“0”である場合(S44;no)、メモリコントローラ10は、信用度情報31を用いる第4推定方式を実行して、シフト量群ΔVth_ciを算出する(S46)。第4推定方式の詳細については、後述する。
【0148】
メモリコントローラ10は、S46の処理で算出されたシフト量群ΔVth_ciを採用する(S47)。
【0149】
S45の処理、又はS47の処理の後、メモリコントローラ10は、全てのページについてシフト量群ΔVth_iの採用処理が実行済みであるか否かを判定する(S48)。具体的には、TLCモードで書き込まれたセルユニットCUに対する読出し処理の場合、メモリコントローラ10は、変数iが2であるか否かを判定する。
【0150】
シフト量群ΔVth_iの採用処理が実行済みでないページがある場合(S48;no)、メモリコントローラ10は、変数iをインクリメントする(S49)。
【0151】
S49の処理の後、メモリコントローラ10は、訂正ステータスSTSiが“1”であるか否かを判定する(S44)。そして、後続するS45~S48の処理が実行される。このように、全てのページについてシフト量群ΔVth_iの採用処理が実行されるまで、S49の処理で変数iをインクリメントさせながら、S44~S48の処理が実行される。
【0152】
全てのページについてシフト量群ΔVth_iの採用処理が実行済みの場合(S48;yes)、メモリコントローラ10は、S45の処理で採用されたシフト量群ΔVth_pi及びS47の処理で採用されたシフト量群ΔVth_tiを、以降の読出し処理に適用する(S50)。
【0153】
訂正ステータスSTS0、STS1、及びSTS2が全て“0”である場合(S41;yes)、メモリコントローラ10は、複数の読出し処理を用いる第2推定方式を実行して、複数のシフト量群ΔVth_t0、ΔVth_t1、及びΔVth_t2を算出する(S51)。
【0154】
メモリコントローラ10は、S51の処理で算出された複数のシフト量群ΔVth_t0、ΔVth_t1、及びΔVth_t2を採用する(S52)。
【0155】
S52の処理の後、メモリコントローラ10は、S52の処理で採用された複数のシフト量群ΔVth_t0、ΔVth_t1、及びΔVth_t2を、以降の読出し処理に適用する(S50)。
【0156】
S50の処理が終了すると、シフト量推定処理の第3例は終了となる(終了)。
【0157】
(第4推定方式)
図16は、第2実施形態に係るメモリシステムにおけるシフト量推定処理に適用される第4推定方式の一例を示すフローチャートである。
図16は、
図15におけるS46の処理に対応する。
【0158】
第4推定方式が開始されると(開始)、メモリコントローラ10は、信用度情報31を参照し、訂正ステータスSTSj=1を満たす和集合(∪Ej)を抽出する(S61)。TLCモードが適用される場合、変数jは、0以上2以下の整数である。
【0159】
メモリコントローラ10は、変数iが“0”であるか否かを判定する(S62)。すなわち、メモリコントローラ10は、推定先のシフト量群が下位ページP0に対応するか否かを判定する。
【0160】
変数iが“0”である場合(S62;yes)、メモリコントローラ10は、信用度情報31を参照し、積集合G1(=(∪Ej)∩F1)から信用度の最大値(最大信用度r1k1)を抽出する(S63)。k1は、1以上7以下の整数である。
【0161】
メモリコントローラ10は、補正DB32を参照し、S63の処理で抽出された最大信用度r1k1に対応する推定元のシフト量ΔRk1に基づいて推定先のシフト量ΔR1を算出する(S64)。
【0162】
続いて、メモリコントローラ10は、信用度情報31を参照し、積集合G5(=(∪Ej)∩F5)から信用度の最大値(最大信用度r5k5)を抽出する(S65)。k5は、1以上7以下の整数である。
【0163】
メモリコントローラ10は、補正DB32を参照し、S65の処理で抽出された最大信用度r5k5に対応する推定元のシフト量ΔRk5に基づいて推定先のシフト量ΔR5を算出する(S66)。
【0164】
変数iが“0”でない場合(S62;no)、メモリコントローラ10は、変数iが“1”であるか否かを判定する(S67)。すなわち、メモリコントローラ10は、推定先のシフト量群が中位ページP1に対応するか否かを判定する。
【0165】
変数iが“1”である場合(S67;yes)、メモリコントローラ10は、信用度情報31を参照し、積集合G2(=(∪Ej)∩F2)から信用度の最大値(最大信用度r2k2)を抽出する(S68)。k2は、1以上7以下の整数である。
【0166】
メモリコントローラ10は、補正DB32を参照し、S68の処理で抽出された最大信用度r2k2に対応する推定元のシフト量ΔRk2に基づいて推定先のシフト量ΔR2を算出する(S69)。
【0167】
続いて、メモリコントローラ10は、信用度情報31を参照し、積集合G4(=(∪Ej)∩F4)から信用度の最大値(最大信用度r4k4)を抽出する(S70)。k4は、1以上7以下の整数である。
【0168】
メモリコントローラ10は、補正DB32を参照し、S70の処理で抽出された最大信用度r4k4に対応する推定元のシフト量ΔRk4に基づいて推定先のシフト量ΔR4を算出する(S71)。
【0169】
続いて、メモリコントローラ10は、信用度情報31を参照し、積集合G6(=(∪Ej)∩F6)から信用度の最大値(最大信用度r6k6)を抽出する(S72)。k6は、1以上7以下の整数である。
【0170】
メモリコントローラ10は、補正DB32を参照し、S72の処理で抽出された最大信用度r6k6に対応する推定元のシフト量ΔRk6に基づいて推定先のシフト量ΔR6を算出する(S73)。
【0171】
変数iが“1”でない場合(S67;no)、メモリコントローラ10は、推定先のシフト量群が上位ページP2に対応すると判定する。そして、メモリコントローラ10は、信用度情報31を参照し、積集合G3(=(∪Ej)∩F3)から信用度の最大値(最大信用度r3k3)を抽出する(S74)。k3は、1以上7以下の整数である。
【0172】
メモリコントローラ10は、補正DB32を参照し、S74の処理で抽出された最大信用度r3k3に対応する推定元のシフト量ΔRk3に基づいて推定先のシフト量ΔR3を算出する(S75)。
【0173】
続いて、メモリコントローラ10は、信用度情報31を参照し、積集合G7(=(∪Ej)∩F7)から信用度の最大値(最大信用度r7k7)を抽出する(S76)。k7は、1以上7以下の整数である。
【0174】
メモリコントローラ10は、補正DB32を参照し、S76の処理で抽出された最大信用度r7k7に対応する推定元のシフト量ΔRk7に基づいて推定先のシフト量ΔR7を算出する(S77)。
【0175】
S64及びS66の処理の後、S69、S71、及びS73の処理の後、又はS75及びS77の処理の後、メモリコントローラ10は、算出されたシフト量の組をシフト量群Vth_ciとする(S78)。
【0176】
S78の処理が終了すると、第4推定方式は終了となる(終了)。
【0177】
図17及び
図18は、第2実施形態に係るメモリシステムにおけるシフト量推定処理に適用される第4推定方式の一例を示す図である。
図17では、
図16におけるS61及びS74の処理が
図13に基づいて示される。
図18では、
図16におけるS75の処理が
図14に基づいて示される。より具体的には、
図17は、第4推定方式において、i=2、STS0=0、STS1=1、及びSTS2=0である場合に推定先シフト量ΔR3を推定するケースの一例として、k
3=4である場合が示される。
図18は、推定元シフト量ΔR4から推定先シフト量ΔR3を推定するケースの一例として、ΔR4=-12である場合が示される。
【0178】
図17に示されるように、メモリコントローラ10は、上位ページP2のシフト量群ΔVth_c2の算出に際して、下位ページP0の誤り訂正処理が失敗し、中位ページP1の誤り訂正処理が成功したことから、和集合(∪Ej)として集合E1を抽出する(S61)。
【0179】
メモリコントローラ10は、積集合G3として、集合E1と集合F3との積集合G3={r32,r34,r36}を抽出する。そして、メモリコントローラ10は、積集合G3から、最大信用度r3k3として、r34を抽出する(S74)。これにより、メモリコントローラ10は、最大信用度がr34に対応するシフト量ΔR4を、推定先シフト量ΔR3に対する推定元シフト量として決定する。
【0180】
図18に示されるように、メモリコントローラ10は、シフト量ΔR3及びΔR4の組に関する補正DB32を参照し、推定元シフト量ΔR4=-12の場合に生起確率が最大となる推定先シフト量を求める(S75)。これにより、メモリコントローラ10は、推定先シフト量ΔR3=-11を算出することができる。
【0181】
2.3 シフト量推定処理の第4例
次に、シフト量推定処理の第4例について説明する。
【0182】
図19は、第2実施形態に係るメモリシステムにおけるシフト量推定処理の第4例を示すフローチャートである。
図19に示されるS41~S50、S53、及びS54の処理は、
図6におけるS20の処理に対応する。なお、
図19におけるS41~S49の処理、及びS48の処理に後続するS50の処理は、
図15の場合と同等であるため、説明を省略する。
【0183】
訂正ステータスSTS0、STS1、及びSTS2が全て“0”である場合(S41;yes)、メモリコントローラ10は、データP0_1、P1_1、及びP2_1、並びに複数のシフト量群ΔVth_a0、ΔVth_a1、及びΔVth_a2を用いる第
3推定方式を実行して、複数のシフト量群ΔVth_v0、ΔVth_v1、及びΔVth_v2を算出する(S53)。
【0184】
メモリコントローラ10は、S53の処理で算出された複数のシフト量群ΔVth_v0、ΔVth_v1、及びΔVth_v2を採用する(S54)。
【0185】
S54の処理の後、メモリコントローラ10は、S54の処理で採用された複数のシフト量群ΔVth_v0、ΔVth_v1、及びΔVth_v2を、以降の読出し処理に適用する(S50)。
【0186】
S50の処理が終了すると、シフト量推定処理の第4例は終了となる(終了)。
【0187】
2.4 第2実施形態に係る効果
第2実施形態によれば、シフト量推定処理の第3例では、メモリコントローラ10は、シフト量推定処理において、誤り訂正処理に成功したページに対しては第1推定方式を適用し、誤り訂正処理に失敗したページに対しては第4推定方式を適用する。第4推定方式において、メモリコントローラ10は、第1推定方式で算出された他のページのシフト量群のうち、信用度が最大となるシフト量に基づいて、誤り訂正処理に失敗したページのシフト量を算出する。これにより、推定先のシフト量との相関が高いシフト量を、推定元のシフト量として利用することができる。このため、より効率的に高い精度でシフト量を算出することができる。
【0188】
3. 第3実施形態
次に、第3実施形態に係るメモリシステムについて説明する。第3実施形態は、第1推定方式によって算出されたシフト量群を、第1推定方式が適用できないページに対応するシフト量群の算出に利用するか否かを、信用度の大小に基づいて判定する点において、第2実施形態と異なる。以下の説明では、第2実施形態と同等の構成及び動作については説明を省略し、第2実施形態と異なる構成及び動作について主に説明する。
【0189】
3.1 シフト量推定処理の第5例
図20は、第3実施形態に係るメモリシステムにおけるシフト量推定処理の第5例を示すフローチャートである。
図20は、
図6におけるS20の処理に対応する。
【0190】
シフト量推定処理が開始されると(開始)、メモリコントローラ10は、データP0_1、P1_1、及びP2_1、並びに複数のシフト量群ΔVth_a0、ΔVth_a1、及びΔVth_a2を用いる第3推定方式を実行して、複数のシフト量群ΔVth_v0、ΔVth_v1、及びΔVth_v2を算出する(S81)。
【0191】
S81の処理の後、メモリコントローラ10は、全ての訂正ステータスSTS0、STS1、及びSTS2が“0”であるか否かを判定する(S82)。
【0192】
訂正ステータスSTS0、STS1、及びSTS2のうち少なくとも1個の訂正ステータスSTSが“1”である場合(S82;no)、メモリコントローラ10は、データP0_1、P1_1、P2_1、P0_2、P1_2、及びP2_2を入力として用いる第1推定方式を実行して、複数のシフト量群ΔVth_p0、ΔVth_p1、及びΔVth_p2を算出する(S83)。
【0193】
S83の処理の後、メモリコントローラ10は、変数iを0に初期化する(S84)。
【0194】
S84の処理の後、メモリコントローラ10は、訂正ステータスSTSiが“1”であるか否かを判定する(S85)。
【0195】
訂正ステータスSTSiが“1”である場合(S85;yes)、メモリコントローラ10は、S83の処理で算出された複数のシフト量群ΔVth_p0、ΔVth_p1、及びΔVth_p2のうち、シフト量群ΔVth_piを採用する(S86)。
【0196】
訂正ステータスSTSiが“0”である場合(S85;no)、メモリコントローラ10は、信用度情報31を用いる第4推定方式を実行して、シフト量群ΔVth_ciを算出する(S87)。第4推定方式の詳細については、後述する。
【0197】
S87の処理の後、メモリコントローラ10は、シフト量選択処理を実行する(S88)。シフト量選択処理は、S81の処理で算出されたシフト量群ΔVth_viと、S87の処理で算出されたシフト量群ΔVth_ciと、のいずれを採用するかを選択する処理である。シフト量選択処理の詳細については、後述する。
【0198】
S86の処理、又はS88の処理の後、メモリコントローラ10は、全てのページについてシフト量群ΔVth_iの採用処理が実行済みであるか否かを判定する(S89)。具体的には、TLCモードで書き込まれたセルユニットCUに対する読出し処理の場合、メモリコントローラ10は、変数iが2であるか否かを判定する。
【0199】
シフト量群ΔVth_iの採用処理が実行済みでないページがある場合(S89;no)、メモリコントローラ10は、変数iをインクリメントする(S90)。
【0200】
S90の処理の後、メモリコントローラ10は、訂正ステータスSTSiが“1”であるか否かを判定する(S85)。そして、後続するS86~S89の処理が実行される。このように、全てのページについてシフト量群ΔVth_iの採用処理が実行されるまで、S90の処理で変数iをインクリメントさせながら、S85~S89の処理が実行される。
【0201】
全てのページについてシフト量群ΔVth_iの採用処理が実行済みの場合(S89;yes)、メモリコントローラ10は、S86の処理で採用されたシフト量群ΔVth_pi及びS88の処理で採用されたシフト量群ΔVth_vi又はΔVth_ciを、以降の読出し処理に適用する(S92)。
【0202】
訂正ステータスSTS0、STS1、及びSTS2が全て“0”である場合(S82;yes)、メモリコントローラ10は、S81の処理で算出された複数のシフト量群ΔVth_v0、ΔVth_v1、及びΔVth_v2を採用する(S91)。
【0203】
S91の処理の後、メモリコントローラ10は、S91の処理で採用された複数のシフト量群ΔVth_v0、ΔVth_v1、及びΔVth_v2を、以降の読出し処理に適用する(S92)。
【0204】
S92の処理が終了すると、シフト量推定処理の第5例は終了となる(終了)。
【0205】
3.2 シフト量選択処理
図21は、第3実施形態に係るメモリシステムにおけるシフト量選択処理の一例を示すフローチャートである。
図21におけるS101~123の処理は、S88の処理に対応する。なお、以下の説明では、読出し電圧Rxのシフト量ΔRxを、適用される推定方式に応じて区別する。具体的には、第3推定方式が適用される場合のシフト量ΔRxは、シフト量ΔRx_vのように記載する。第4推定方式が適用される場合のシフト量ΔRxは、シフト量ΔRx_cのように記載する。
【0206】
シフト量選択処理が開始すると(開始)、メモリコントローラ10は、変数iが“0”であるか否かを判定する(S101)。すなわち、メモリコントローラ10は、推定先のシフト量群が下位ページP0に対応するか否かを判定する。
【0207】
変数iが“0”である場合(S101;yes)、メモリコントローラ10は、S81の処理で第2推定方式によって算出されたシフト量ΔR1_vの信用度r_v1が、S87の処理で第4推定方式によって算出されたシフト量ΔR1_cの信用度r1k1よりも大きいか否かを判定する(S102)。
【0208】
信用度r_v1が信用度r1k1よりも大きい(r_v1>r1k1)場合(S102;yes)、メモリコントローラ10は、シフト量ΔR1_vを採用する(S103)。
【0209】
信用度r_v1が信用度r1k1以下である(r_v1≦r1k1)場合(S102;no)、メモリコントローラ10は、シフト量ΔR1_cを採用する(S104)。
【0210】
続いて、メモリコントローラ10は、S81の処理で第2推定方式によって算出されたシフト量ΔR5_vの信用度r_v5が、S87の処理で第4推定方式によって算出されたシフト量ΔR5_cの信用度r5k5よりも大きいか否かを判定する(S105)。
【0211】
信用度r_v5が信用度r5k5よりも大きい(r_v5>r5k5)場合(S105;yes)、メモリコントローラ10は、シフト量ΔR5_vを採用する(S106)。
【0212】
信用度r_v5が信用度r5k5以下である(r_v5≦r5k5)場合(S105;no)、メモリコントローラ10は、シフト量ΔR5_cを採用する(S107)。
【0213】
変数iが“0”でない場合(S101;no)、メモリコントローラ10は、変数iが“1”であるか否かを判定する(S108)。すなわち、メモリコントローラ10は、推定先のシフト量群が中位ページP1に対応するか否かを判定する。
【0214】
変数iが“1”である場合(S108;yes)、メモリコントローラ10は、S81の処理で第2推定方式によって算出されたシフト量ΔR2_vの信用度r_v2が、S87の処理で第4推定方式によって算出されたシフト量ΔR2_cの信用度r2k2よりも大きいか否かを判定する(S109)。
【0215】
信用度r_v2が信用度r2k2よりも大きい(r_v2>r2k2)場合(S109;yes)、メモリコントローラ10は、シフト量ΔR2_vを採用する(S110)。
【0216】
信用度r_v2が信用度r2k2以下である(r_v2≦r2k2)場合(S109;no)、メモリコントローラ10は、シフト量ΔR2_cを採用する(S111)。
【0217】
続いて、メモリコントローラ10は、S81の処理で第2推定方式によって算出されたシフト量ΔR4_vの信用度r_v4が、S87の処理で第4推定方式によって算出されたシフト量ΔR4_cの信用度r4k4よりも大きいか否かを判定する(S112)。
【0218】
信用度r_v4が信用度r4k4よりも大きい(r_v4>r4k4)場合(S112;yes)、メモリコントローラ10は、シフト量ΔR4_vを採用する(S113)。
【0219】
信用度r_v4が信用度r4k4以下である(r_v4≦r4k4)場合(S112;no)、メモリコントローラ10は、シフト量ΔR4_cを採用する(S114)。
【0220】
続いて、メモリコントローラ10は、S81の処理で第2推定方式によって算出されたシフト量ΔR6_vの信用度r_v6が、S87の処理で第4推定方式によって算出されたシフト量ΔR6_cの信用度r6k6よりも大きいか否かを判定する(S115)。
【0221】
信用度r_v6が信用度r6k6よりも大きい(r_v6>r6k6)場合(S115;yes)、メモリコントローラ10は、シフト量ΔR6_vを採用する(S116)。
【0222】
信用度r_v6が信用度r6k6以下である(r_v6≦r6k6)場合(S116;no)、メモリコントローラ10は、シフト量ΔR6_cを採用する(S117)。
【0223】
変数iが“1”でない場合(S108;no)、メモリコントローラ10は、推定先のシフト量群が上位ページP2に対応すると判定する。そして、メモリコントローラ10は、S81の処理で第2推定方式によって算出されたシフト量ΔR3_vの信用度r_v3が、S87の処理で第4推定方式によって算出されたシフト量ΔR3_cの信用度r3k3よりも大きいか否かを判定する(S118)。
【0224】
信用度r_v3が信用度r3k3よりも大きい(r_v3>r3k3)場合(S118;yes)、メモリコントローラ10は、シフト量ΔR3_vを採用する(S119)。
【0225】
信用度r_v3が信用度r3k3以下である(r_v3≦r3k3)場合(S118;no)、メモリコントローラ10は、シフト量ΔR3_cを採用する(S120)。
【0226】
続いて、メモリコントローラ10は、S81の処理で第2推定方式によって算出されたシフト量ΔR7_vの信用度r_v7が、S87の処理で第4推定方式によって算出されたシフト量ΔR7_cの信用度r7k7よりも大きいか否かを判定する(S121)。
【0227】
信用度r_v7が信用度r7k7よりも大きい(r_v7>r7k7)場合(S121;yes)、メモリコントローラ10は、シフト量ΔR7_vを採用する(S122)。
【0228】
信用度r_v7が信用度r7k7以下である(r_v7≦r7k7)場合(S121;no)、メモリコントローラ10は、シフト量ΔR7_cを採用する(S123)。
【0229】
S106の処理若しくはS107の処理の後、S116の処理若しくはS117の処理の後、又はS122の処理若しくはS123の処理の後、シフト量選択処理は終了となる(終了)。
【0230】
3.3 第3実施形態に係る効果
第3実施形態によれば、メモリコントローラ10は、第3推定方式及び第4推定方式のうち、信用度の高い推定方式を選択する。これにより、誤り訂正処理に失敗したページに対して、より確からしいシフト量を適用することができる。このため、高精度で最適な読出し電圧を算出できる。
【0231】
4. 変形例等
上述の第1実施形態、第2実施形態、及び第3実施形態は、上述の例に限られず、種々の変形が適用可能である。
【0232】
4.1 第1変形例
上述の第1実施形態、第2実施形態、及び第3実施形態では、第1推定方式が適用されるか否かに関わらず、全てのシフト量群ΔVth_p0、ΔVth_p1、及びΔVth_p2が算出される場合について説明したが、これに限られない。例えば、第1推定方式が適用されるページPiについて、シフト量群ΔVth_piが選択的に算出されてもよい。
【0233】
4.1.1 シフト量推定処理を含む読出し処理
図22は、第1変形例に係るメモリシステムにおけるシフト量推定処理を含む読出し処理の一例を示すフローチャートである。
図22は、第1実施形態における
図6に対応する。
【0234】
読出し条件が満たされると(開始)、メモリコントローラ10は、第1シングルステート読出し処理を不揮発性メモリ20に実行させる(S131)。第1シングルステート読出し処理に適用される読出し電圧は、例えば、R3である。
【0235】
メモリコントローラ10は、S131の処理で読み出されたデータを、データP_1としてバッファメモリ12に記憶させる(S132)。データP_1を用いることにより、下位ページのデータ“1”に対応するメモリセルトランジスタMTを、閾値電圧が電圧R1以下のメモリセルトランジスタMTと、閾値電圧が電圧R5以上のメモリセルトランジスタMTと、に、分類することができる。また、データP_1を用いることにより、中位ページのデータ“1”に対応するメモリセルトランジスタMTを、閾値電圧が電圧R2以下のメモリセルトランジスタMTと、閾値電圧が電圧R4以上、及び電圧R6以下のメモリセルトランジスタMTと、に、分類することができる。
【0236】
続いて、メモリコントローラ10は、第2シングルステート読出し処理を不揮発性メモリ20に実行させる(S133)。第2シングルステート読出し処理に適用される読出し電圧は、例えば、R5である。
【0237】
メモリコントローラ10は、S133の処理で読み出されたデータを、データP_2としてバッファメモリ12に記憶させる(S134)。データP_2を用いることにより、上位ページのデータ“1”に対応するメモリセルトランジスタMTを、閾値電圧が電圧R7以上のメモリセルトランジスタMTと、閾値電圧が電圧R3以下のメモリセルトランジスタMTと、に、分類することができる。また、データP_2を用いることにより、中位ページのデータ“0”に対応するメモリセルトランジスタMTを、閾値電圧が電圧R2以上、及び電圧R4以下のメモリセルトランジスタMTと、閾値電圧が電圧R6以上のメモリセルトランジスタMTと、に、分類することができる。
【0238】
メモリコントローラ10は、変数iを“0”に初期化する(S135)。
【0239】
S135の処理の後、メモリコントローラ10は、シフト量群ΔVth_aiを用いるページPiの読出し処理を不揮発性メモリ20に実行させる(S136)。
【0240】
メモリコントローラ10は、S136の処理で読み出されたデータを、データPi_1としてバッファメモリ12に記憶させる(S137)。
【0241】
メモリコントローラ10のECC回路16は、S137の処理で読み出されたデータに対して誤り訂正処理を実行する(S138)。
【0242】
誤り訂正処理に成功した場合(S138;yes)、メモリコントローラ10は、訂正後のデータをデータPi_2としてバッファメモリ12に記憶させる(S139)。
【0243】
そして、メモリコントローラ10は、誤り訂正処理が成功したことを示す“1”を訂正ステータスSTSiとしてバッファメモリ12に記憶させる(S140)。
【0244】
誤り訂正処理に失敗した場合(S138;no)、メモリコントローラ10は、誤り訂正処理が失敗したことを示す“0”を訂正ステータスSTSiとしてバッファメモリ12に記憶させる(S141)。
【0245】
S140の処理又はS141の処理の後、メモリコントローラ10は、シフト量推定処理を実行する(S142)。
【0246】
S142の処理の後、メモリコントローラ10は、全てのページについて読出し処理が実行済みであるか否かを判定する(S143)。具体的には、TLCモードで書き込まれたセルユニットCUに対する読出し処理の場合、メモリコントローラ10は、変数iが2であるか否かを判定する。
【0247】
読出し処理が実行済みでないページがある場合(S143;no)、メモリコントローラ10は、変数iをインクリメントする(S144)。
【0248】
S144の処理の後、メモリコントローラ10は、シフト量群ΔVth_aiを用いるページPiの読出し処理を不揮発性メモリ20に実行させる(S136)。そして、後続するS137~S143の処理が実行される。このように、全てのページについて読出し処理が実行されるまで(すなわち、全ページ分のシフト量推定処理が実行されるまで)、S144の処理で変数iをインクリメントさせながら、S136~S143の処理が実行される。
【0249】
全てのページについて読出し処理が実行済みの場合(S143;yes)、シフト量推定処理を含む読出し処理は終了となる(終了)。
【0250】
4.1.2 シフト量推定処理
図23は、第1変形例に係るメモリシステムにおけるシフト量推定処理の一例を示すフローチャートである。
図23におけるS151~S160の処理は、
図22におけるS142の処理に対応する。
【0251】
シフト量推定処理が開始されると(開始)、メモリコントローラ10は、訂正ステータスSTSiが“1”であるか否かを判定する(S151)。
【0252】
訂正ステータスSTSiが“1”である場合(S151;yes)、メモリコントローラ10は、変数iが“0”であるか否かを判定する(S152)。すなわち、メモリコントローラ10は、推定先のシフト量群が下位ページP0に対応するか否かを判定する。
【0253】
変数iが“0”である場合(S152;yes)、メモリコントローラ10は、データP_1、P0_1、及びP0_2を用いる第1推定方式を実行して、シフト量群ΔVth_p0を算出する(S153)。
【0254】
変数iが“0”でない場合(S152;no)、メモリコントローラ10は、変数iが“1”であるか否かを判定する(S154)。すなわち、メモリコントローラ10は、推定先のシフト量群が中位ページP1に対応するか否かを判定する。
【0255】
変数iが“1”である場合(S154;yes)、メモリコントローラ10は、推定先のシフト量群が上位ページP2に対応するかと判定する。そして、メモリコントローラ10は、データP_1、P_2、P1_1、及びP1_2を用いる第1推定方式を実行して、シフト量群ΔVth_p1を算出する(S155)。
【0256】
変数iが“1”でない場合(S155;yes)、メモリコントローラ10は、データP_2、P2_1、及びP2_2を用いる第1推定方式を実行して、シフト量群ΔVth_p2を算出する(S156)。
【0257】
メモリコントローラ10は、S153の処理、S155の処理、又はS156の処理で算出されたシフト量群ΔVth_piを採用する(S157)。
【0258】
訂正ステータスSTSiが“1”でない場合(S151;no)、メモリコントローラ10は、複数の読出し処理を用いる第2推定方式を実行して、シフト量群ΔVth_tiを算出する(S158)。
【0259】
メモリコントローラ10は、S158の処理で算出されたシフト量群ΔVth_tiを採用する(S159)。
【0260】
S157の処理、又はS159の処理の後、メモリコントローラ10は、採用されたシフト量群を以降の読出し処理に適用する(S160)。
【0261】
S160の処理が終了すると、シフト量推定処理は終了となる(終了)。
【0262】
4.1.3 第1変形例に係る効果
第1変形例によれば、メモリコントローラ10は、6ページ分のデータP0_1、P1_1、P2_1、P0_2、P1_2、及びP2_2を揃えることなく、第1推定方式を実行する。これにより、メモリコントローラ10は、誤り訂正処理に失敗したページPiに対しては、第1推定方式によるシフト量群ΔVth_piの算出しないようにすることができる。このため、メモリコントローラ10におけるシフト量群の算出負荷を低減させることができる。
【0263】
4.2 第2変形例
上述の第2実施形態及び第3実施形態では、第4推定方式において、積集合Gのうち最大の信用度に対応するシフト量が推定元として用いられる場合について説明したが、これに限られない。例えば、積集合Gのうち閾値TH以上の複数の信用度(信用度群)に対応するシフト量群が推定元として用いられてもよい。
【0264】
4.2.1 第4推定方式
図24は、第2変形例に係るメモリシステムにおけるシフト量推定処理に適用される第4推定方式の一例を示すフローチャートである。
図24は、
図15におけるS46の処理に対応する。
【0265】
第4推定方式が開始されると(開始)、メモリコントローラ10は、信用度情報31を参照し、訂正ステータスSTSj=1を満たす和集合(∪Ej)を抽出する(S161)。
【0266】
メモリコントローラ10は、変数iが“0”であるか否かを判定する(S162)。すなわち、メモリコントローラ10は、推定先のシフト量群が下位ページP0に対応するか否かを判定する。
【0267】
変数iが“0”である場合(S162;yes)、メモリコントローラ10は、信用度情報31を参照し、積集合G1から閾値TH以上となる信用度の組(信用度群{r1n1})を抽出する(S163)。n1は、1以上7以下の整数である。閾値THは、0以上1以下の実数である。
【0268】
メモリコントローラ10は、補正DB32を参照し、S163の処理で抽出された信用度群{r1n1}に対応する推定元のシフト量群{ΔRn1}に基づいて推定先のシフト量ΔR1を算出する(S164)。
【0269】
続いて、メモリコントローラ10は、信用度情報31を参照し、積集合G5から閾値TH以上となる信用度の組(信用度群{r5n5})を抽出する(S165)。n5は、1以上7以下の整数である。
【0270】
メモリコントローラ10は、補正DB32を参照し、S165の処理で抽出された信用度群{r5n5}に対応する推定元のシフト量群{ΔRn5}に基づいて推定先のシフト量ΔR5を算出する(S166)。
【0271】
変数iが“0”でない場合(S162;no)、メモリコントローラ10は、変数iが“1”であるか否かを判定する(S167)。すなわち、メモリコントローラ10は、推定先のシフト量群が中位ページP1に対応するか否かを判定する。
【0272】
メモリコントローラ10は、信用度情報31を参照し、積集合G2から閾値TH以上となる信用度の組(信用度群{r2n2})を抽出する(S168)。n2は、1以上7以下の整数である。
【0273】
メモリコントローラ10は、補正DB32を参照し、S168の処理で抽出された信用度群{r2n2}に対応する推定元のシフト量群{ΔRn2}に基づいて推定先のシフト量ΔR2を算出する(S169)。
【0274】
続いて、メモリコントローラ10は、信用度情報31を参照し、積集合G4から閾値TH以上となる信用度の組(信用度群{r4n4})を抽出する(S170)。n4は、1以上7以下の整数である。
【0275】
メモリコントローラ10は、補正DB32を参照し、S170の処理で抽出された信用度群{r4n4}に対応する推定元のシフト量群{ΔRn4}に基づいて推定先のシフト量ΔR4を算出する(S171)。
【0276】
続いて、メモリコントローラ10は、信用度情報31を参照し、積集合G6から閾値TH以上となる信用度の組(信用度群{r6n6})を抽出する(S172)。n6は、1以上7以下の整数である。
【0277】
メモリコントローラ10は、補正DB32を参照し、S172の処理で抽出された信用度群{r6n6}に対応する推定元のシフト量群{ΔRn6}に基づいて推定先のシフト量ΔR6を算出する(S173)。
【0278】
変数iが“1”でない場合(S167;no)、メモリコントローラ10は、推定先のシフト量群が上位ページP2に対応すると判定する。そして、メモリコントローラ10は、信用度情報31を参照し、積集合G3から閾値TH以上となる信用度の組(信用度群{r3n3})を抽出する(S174)。n3は、1以上7以下の整数である。
【0279】
メモリコントローラ10は、補正DB32を参照し、S174の処理で抽出された信用度群{r3n3}に対応する推定元のシフト量群{ΔRn3}に基づいて推定先のシフト量ΔR3を算出する(S175)。
【0280】
続いて、 メモリコントローラ10は、信用度情報31を参照し、積集合G7から閾値TH以上となる信用度の組(信用度群{r7n7})を抽出する(S176)。n7は、1以上7以下の整数である。
【0281】
メモリコントローラ10は、補正DB32を参照し、S176の処理で抽出された信用度群{r7n7}に対応する推定元のシフト量群{ΔRn7}に基づいて推定先のシフト量ΔR7を算出する(S177)。
【0282】
S164及びS166の処理の後、S169、S171、及びS173の処理の後、又はS175及びS177の処理の後、メモリコントローラ10は、算出されたシフト量の組をシフト量群Vth_ciとする(S178)。
【0283】
S178の処理が終了すると、第4推定方式は終了となる(終了)。
【0284】
図25は、第2変形例に係るメモリシステムにおけるシフト量推定処理に適用される第4推定方式の一例を示す図である。
図25では、
図24におけるS161及びS170の処理が
図13に基づいて示される。より具体的には、
図25は、第4推定方式において、i=1、STS0=1、STS1=0、及びSTS2=1である場合に推定先シフト量ΔR4を推定するケースの一例として、{n
4}={3,5}である場合が示される。
【0285】
図25に示されるように、メモリコントローラ10は、信用度情報31を参照し、中位ページP1のシフト量群ΔVth_c1の算出に際して、下位ページP0の誤り訂正処理及び上位ページP2の誤り訂正処理がいずれも成功したことから、和集合(∪Ej)として集合E0∪E2を抽出する(S161)。
【0286】
メモリコントローラ10は、積集合G4として、集合E0∪E2と集合F4との積集合G4={r41,r43,r45,r47}を抽出する。そして、メモリコントローラ10は、積集合G4から、閾値TH以上となる信用度群{r4n4}として、r43及びr45を抽出する(S170)。これにより、メモリコントローラ10は、信用度r43に対応するシフト量ΔR3及び信用度r45に対応するシフト量ΔR5を、推定先シフト量ΔR4に対する推定元シフト量として決定する。
【0287】
その後、補正DB32を参照することにより、推定元シフト量ΔR3に対応する推定先シフト量ΔR4(3)と、推定元シフト量ΔR5に対応する推定先シフト量ΔR4(5)とがそれぞれ算出される。そして、メモリコントローラ10は、例えば、推定先シフト量ΔR4(3)及びΔR4(5)に基づき、推定先シフト量ΔR4を算出する(S171)。
【0288】
例えば、メモリコントローラ10は、信用度r43及びr45の大小関係に基づいて、推定先シフト量ΔR4(3)及びΔR4(5)の内挿値を、推定先シフト量ΔR4として算出してもよい。具体的には、推定先シフト量ΔR4(3)及びΔR4(5)がそれぞれ-9及び-11であり、信用度r43及びr45がそれぞれ0.74及び0.82である場合、メモリコントローラ10は、例えば、以下の式に従って推定先シフト量ΔR4を算出し得る。
【0289】
ΔR4=ΔR4(3)×r43/(r43+r45)+ΔR4(5)×r45/(r43+r45)
=(-9)×0.74/(0.82+0.74)+(-11)×0.82/(0.74+0.82)
=-10
4.2.2 第2変形例に係る効果
第2変形例によれば、メモリコントローラ10は、第4推定方式において、閾値TH以上の信用度に対応する複数のシフト量を推定元のシフト量に用いる。これにより、複数のシフト量の各々との相関を考慮したシフト量を算出することができる。このため、シフト量の高精度に推定できる。
【0290】
4.3 その他
また、上述した第1実施形態、第2実施形態、及び第3実施形態では、1つのメモリセルトランジスタMTに3ビットのデータを記憶可能な場合について説明したが、これに限られず、2ビット、4ビット、又は5ビット以上のデータを記憶可能な場合についても、同様に適用可能である。
【0291】
また、上述した第2実施形態及び第3実施形態では、推定元のシフト量に対応する状態が、推定先のシフト量に対応する状態と隣り合う場合について説明したが、これに限られない。例えば、推定元のシフト量に対応する状態は、推定先のシフト量に対応する状態から離れていてもよい。
【0292】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【0293】
1…情報処理システム
2…ホスト
3…メモリシステム
10…メモリコントローラ
11…制御回路
12…バッファメモリ
13…不揮発性メモリインタフェース回路
14…ホストインタフェース回路
15…揮発性メモリインタフェース回路
16…ECC回路
17…ヒストグラムエンジン
20…不揮発性メモリ
30…揮発性メモリ
31…信用度情報
32…補正DB