(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022051179
(43)【公開日】2022-03-31
(54)【発明の名称】記憶装置及びリード方法
(51)【国際特許分類】
G11C 11/56 20060101AFI20220324BHJP
G06F 11/10 20060101ALI20220324BHJP
G11C 16/04 20060101ALI20220324BHJP
G11C 16/08 20060101ALI20220324BHJP
G11C 16/26 20060101ALI20220324BHJP
G06F 12/00 20060101ALI20220324BHJP
【FI】
G11C11/56 220
G06F11/10 662
G11C16/04 170
G11C16/08 120
G11C16/26 100
G06F12/00 597U
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2020157518
(22)【出願日】2020-09-18
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】栗原 真
(72)【発明者】
【氏名】高坂 心
(72)【発明者】
【氏名】新井 凜太郎
【テーマコード(参考)】
5B001
5B160
5B225
【Fターム(参考)】
5B001AA03
5B001AB01
5B001AB02
5B001AD03
5B160CB02
5B225BA02
5B225BA19
5B225CA01
5B225DA03
5B225DA10
5B225DE08
5B225EA05
5B225FA01
(57)【要約】
【課題】リードコマンドに対するレスポンスが遅くなることを未然に防ぐことができる記憶装置を提供すること。
【解決手段】実施形態によれば、記憶装置は、不揮発性メモリと、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするコントローラと、を具備する。コントローラは、リード電圧を不揮発性メモリに印加して不揮発性メモリからデータをリードする時に得られるビット数の期待値と、リード電圧を不揮発性メモリに印加して不揮発性メモリからデータをリードした時に得られたビット数の実測値との差に応じてリード電圧を補正する。
【選択図】
図14
【特許請求の範囲】
【請求項1】
不揮発性メモリと、
前記不揮発性メモリにデータをライトし、前記不揮発性メモリからデータをリードするコントローラと、を具備し、
前記コントローラは、リード電圧を前記不揮発性メモリに印加して前記不揮発性メモリからデータをリードする時に得られるビット数の期待値と、前記リード電圧を前記不揮発性メモリに印加して前記不揮発性メモリからデータをリードした時に得られたビット数の実測値との差に応じて前記リード電圧を補正する、記憶装置。
【請求項2】
前記コントローラは、
前記不揮発性メモリからリードしたデータの誤り訂正を行い、
前記誤り訂正が失敗した場合、前記リード電圧を第1補正値だけ変更し、リトライリード動作を行い、
前記誤り訂正が成功した場合、前記期待値と前記実測値との差に応じて第2補正値を求める、請求項1記載の記憶装置。
【請求項3】
前記コントローラは、
リードコマンドを受けたことに応じたリード時のリード電圧の設定値が前記第2補正値を求めた時のリード電圧の設定値と等しい場合、前記リード電圧を前記第2補正値に応じて補正してリード動作を行う、請求項2記載の記憶装置。
【請求項4】
前記コントローラは、
ライト時に、前記期待値を求めて、前記期待値を前記不揮発性メモリの未使用部又は予備カラムにライトし、
リード時又はアイドル時に、前記不揮発性メモリからリードした結果から前記実測値を求め、前記不揮発性メモリからリードした前記期待値と前記実測値との差に応じて前記第2補正値を求める、請求項2記載の記憶装置。
【請求項5】
前記コントローラは、
リード時に、前記不揮発性メモリからリードした結果から前記実測値を求め、前記不揮発性メモリからリードしたデータの誤り訂正後のデータから前記期待値を求め、前記実測値と前記期待値との差に応じて前記第2補正値を求める、請求項2記載の記憶装置。
【請求項6】
前記コントローラは、前記不揮発性メモリに1メモリセル当たり複数ビットのデータをライトし、
前記リード電圧は前記複数ビットのデータを判別するための複数のリード電圧を含み、
前記コントローラは、前記複数のリード電圧の各々についての第2補正値を求める、請求項2記載の記憶装置。
【請求項7】
前記コントローラは、前記不揮発性メモリに1メモリセル当たり複数ビットのデータをライトし、
前記リード電圧は前記複数ビットのデータを判別するための複数のリード電圧を含み、
前記コントローラは、前記複数のリード電圧の中の第1、第2のリード電圧についての第2補正値を求め、前記第1、第2のリード電圧についての第2補正値から前記複数のリード電圧の中の前記第1、第2のリード電圧以外の電圧についての第2補正値を推定する、請求項2記載の記憶装置。
【請求項8】
前記コントローラは、前記実測値が前記期待値より大きい場合、前記リード電圧を一定電圧だけ下げる、請求項1記載の記憶装置。
【請求項9】
前記コントローラは、前記実測値が前記期待値より大きい場合、前記実測値と前記期待値の差に応じた電圧だけ前記前記リード電圧を下げる、請求項1記載の記憶装置。
【請求項10】
不揮発性メモリを具備する記憶装置のリード方法であって、
リード電圧を前記不揮発性メモリに印加して前記不揮発性メモリからデータをリードする時に得られるビット数の期待値を求め、
前記リード電圧を前記不揮発性メモリに印加して前記不揮発性メモリからデータをリードした時に得られたビット数の実測値を求め、
前記期待値と前記実測値との差に応じて前記リード電圧を補正する、リード方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを有する記憶装置及びリード方法に関する。
【背景技術】
【0002】
不揮発性メモリを有する記憶装置の一例は、ソリッドステートドライブ(Solid State Drive:SSD)である。不揮発性メモリの最適なリード電圧はメモリセルの閾値電圧分布の変動により変動する。最適ではないリード電圧により不揮発性メモリから読み出されたデータは誤りを含む可能性がある。記憶装置は、不揮発性メモリから読み出したデータに誤りがあれば、誤りを訂正する。記憶装置は、読み出したデータの誤り訂正が成功するまで、リード電圧を変更してリトライリード処理を繰り返す処理を実行することがある。リトライリード処理の回数が増えると、リードコマンドに対するレスポンスが遅くなる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許第9009390号明細書
【特許文献2】米国特許第9576671号明細書
【特許文献3】米国特許第9367391号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明の目的は、リードコマンドに対するレスポンスが遅くなることを未然に防ぐことができる記憶装置及びリード方法を提供することである。
【課題を解決するための手段】
【0005】
実施形態によれば、記憶装置は、不揮発性メモリと、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするコントローラと、を具備する。コントローラは、リード電圧を不揮発性メモリに印加して不揮発性メモリからデータをリードする時に得られるビット数の期待値と、リード電圧を不揮発性メモリに印加して不揮発性メモリからデータをリードした時に得られたビット数の実測値との差に応じてリード電圧を補正する。
【図面の簡単な説明】
【0006】
【
図1】第1実施形態による記憶装置を有するメモリシステムの構成の一例を示す図。
【
図2】第1実施形態による記憶装置内のメモリチップの構成の一例を示す図。
【
図3】第1実施形態によるメモリセルアレイの構成の一例を示す図。
【
図4】TLCを構成するメモリセルトランジスタの書き込み後の閾値電圧分布の一例を示す図。
【
図6】第1実施形態によるライト動作の一例を示すフローチャート。
【
図7】MLCを構成するメモリセルにおけるEBCの計算の仕方を説明する図。
【
図8】TLCを構成するメモリセルにおけるEBCの計算の仕方を説明する図。
【
図9】NANDメモリにおけるEBCの書き込み先の例を示す図。
【
図10】第1実施形態によるリード動作の一例を示すフローチャート。
【
図11】第1実施形態によるリード動作の一例を示すフローチャート。
【
図14】第1実施形態によるライト動作とリード動作の一例の概要を示す図。
【
図15】第1実施形態による第2補正値の求め方の一例を示す図。
【
図16】第1実施形態による第2補正値の求め方の他の例を示す図。
【
図17】第1実施形態による第2補正値の求め方の他の例を示す図。
【
図18】第1実施形態による第2補正値の求め方の他の例を示す図。
【
図19】第2実施形態によるライト動作の一例を示すフローチャート。
【
図20】第2実施形態によるリード動作の一例を示すフローチャート。
【
図21】第2実施形態によるリード動作の一例を示すフローチャート。
【
図22】第2実施形態によるライト動作とリード動作の一例を示す概念図。
【
図23】第3実施形態によるライト動作の一例を示すフローチャート。
【
図24】第3実施形態によるリード動作の一例を示すフローチャート。
【
図25】第3実施形態によるライト動作とリード動作の一例を示す概念図。
【
図26】第4実施形態によるライト動作の一例を示すフローチャート。
【
図27】第4実施形態によるリード動作の一例を示すフローチャート。
【
図28】第4実施形態によるリード動作の一の例を示すフローチャート。
【発明を実施するための形態】
【0007】
以下、図面を参照して、実施形態を説明する。以下の説明は、実施形態の技術的思想を具体化するための装置や方法を例示するものであって、実施形態の技術的思想は、以下に説明する構成要素の構造、形状、配置及び材質等に限定されるものではない。当業者が容易に想到し得る変形は、当然に開示の範囲に含まれる。説明をより明確にするため、図面において、各要素のサイズ、厚み、平面寸法又は形状等を実際の実施態様に対して変更して模式的に表す場合もある。複数の図面において、互いの寸法の関係や比率が異なる要素が含まれることもある。複数の図面において、対応する要素には同じ参照数字を付して重複する説明を省略する場合もある。いくつかの要素に複数の呼称を付す場合があるが、これら呼称の例はあくまで例示であり、これらの要素に他の呼称を付すことを否定するものではない。また、複数の呼称が付されていない要素についても、他の呼称を付すことを否定するものではない。なお、以下の説明において、「接続」は直接接続のみならず、他の要素を介して接続されることも意味する。
【0008】
以下、図面を参照しながら本実施の形態について詳細に説明する。
【0009】
[第1実施形態]
(システム構成)
図1は、第1実施形態による記憶装置を有するメモリシステム1の構成の一例を示す図である。メモリシステム1は、ホスト2と、記憶装置としてのSSD3を有する。SSD3は、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。記憶装置は、UFS(Universal Flash Storage)装置であってもよい。
【0010】
ホスト2は、SSD3を制御するように構成された情報処理装置である。ホスト2の例は、パーソナルコンピュータ、サーバコンピュータ、携帯端末、車載機器である。
【0011】
SSD3は、ホスト2にケーブルまたはネットワークを介して接続されてもよいし、ホスト2に内蔵されてもよい。
【0012】
ホスト2とSSD3とを接続するためのインタフェースとしては、これに限定されないが、SATA(Serial ATA)、SAS(Serial Attached SCSI)、UFS、PCI Express(PCIe)(登録商標)又はEthernet(登録商標)を使用し得る。
【0013】
SSD3は、コントローラ4と、不揮発性メモリ、例えば、NAND型フラッシュメモリ(以下、NANDメモリと称する)5を有する。
【0014】
NANDメモリ5は、2次元構造のメモリであってもよいし、3次元構造のメモリであってもよい。NANDメモリ5は、複数、例えば4個のメモリチップ30a、30b、30c、30d(区別する必要が無い場合、メモリチップ30と総称する)を有する。メモリチップ30の各々は、マトリクス状に配置された複数のメモリセルを有するメモリセルアレイを有する。
【0015】
SSD3は、ランダムアクセスメモリ、例えば、DRAM(Dynamic Random Access Memory)6も含んでもよい。DRAM6は、ホスト2とNANDメモリ5の間のデータ転送のためのバッファとして機能する。DRAM6の記憶領域の一部は、ライトバッファ、リードバッファ、及びコマンドバッファとして利用されてもよい。ライトバッファは、NANDメモリ5に書き込むデータを一時的に記憶する。リードバッファは、NANDメモリ5から読み出したデータを一時的に記憶する。コマンドバッファは、ホスト2から受信したコマンドを、そのコマンドが実行されるまで一時的に記憶する。
【0016】
コントローラ4は、SoC(System on a Chip)のような回路によって実現されてもよい。コントローラ4は、これに限定されないが、Toggle NANDフラッシュインタフェース又はオープンNANDフラッシュインタフェース(ONFI)に準拠するNANDインタフェース(NAND I/F)13を介して、NANDメモリ5に電気的に接続される。NAND I/F13は、CPU12の制御の下、NANDメモリ5を制御するように構成されたインタフェース回路である。NAND I/F13は、NANDコントローラとも呼ばれる。
【0017】
NAND I/F13は2個のチャネルCh0、Ch1を有する。チャネル数は2個に限らず、単数でも3個以上でもよい。チャネルCh0には複数、例えば2個のメモリチップ30a、30bが接続される。チャネルCh1には複数、例えば2個のメモリチップ30c、30dが接続される。
【0018】
チャネルCh0、Ch1の各々は、制御信号線、I/O信号線、CE(チップイネーブル)信号線、RY/BY(レディ/ビジー)信号線を有する。I/O信号線は、データ、アドレス、及び各種指示を伝送するための信号線である。NAND I/F13は、I/O信号線を介して、読み出し指示、書き込み指示、及び消去指示を各メモリチップ30に送信することができる。制御信号線は、WE(ライトイネーブル)信号線、RE(リードイネーブル)信号線、CLE(コマンドラッチイネーブル)信号線、ALE(アドレスラッチイネーブル)信号線、及びWP(ライトプロテクト)信号線等を有する。
【0019】
各メモリチップ30の各メモリセルアレイは、複数(x個)のブロックBLK0~BLKx-1(区別する必要が無い場合、ブロックBLKと総称することもある)を有する。各ブロックBLKは、複数(y個)のページP0~Py(区別する必要が無い場合、ページPと総称する)を有する。各ページPは、同一ワード線に接続された複数のメモリセルを有する。各ブロックBLKは、NANDメモリ5からデータを消去するデータ消去動作(ブロックイレーズとも称する)の単位である。各ブロックBLKは、消去ブロック、物理ブロック、又は物理消去ブロックと称することもある。ページPは、データ書き込み動作とデータ読み出し動作の単位である。
【0020】
コントローラ4は、NANDメモリ5のデータ管理とブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。
【0021】
FTLによって実行されるデータ管理は、(1)論理アドレスとNANDメモリ5の物理アドレスの間の対応関係を示すマッピング情報の管理と、(2)NANDメモリ5の制約(例えば、ページ単位のリード/ライト動作とブロック単位の消去動作)を隠蔽するための処理を含む。
【0022】
論理アドレスは、SSD3の論理アドレス空間内の記憶位置をアドレス指定するためにホスト2によって使用されるアドレスである。論理アドレスとしては、LBA(Logical Block Address)が使用され得る。
【0023】
SSD3をアクセスするためにホスト2によって使用される論理アドレスとNANDメモリ5の物理アドレスとの間のマッピングの管理は、論理物理アドレス変換テーブル(以下、論物変換テーブルと称する)を用いて実行される。論物変換テーブルは、NANDメモリ5内の管理データ領域に記憶されており、適宜なタイミング、例えばSSD3の電源オン時に、NANDメモリ5からDRAM6に転送され、DRAM6に記憶される。
【0024】
コントローラ4は、DRAM6に記憶されている論物変換テーブルを用いてNANDメモリ5をアクセスする。論物変換テーブルは、複数の論理アドレスそれぞれに対応する複数のエントリを有する。ある論理アドレスに対応するエントリには、この論理アドレスに関連付けられた物理アドレスが記憶される。例えば、コントローラ4が或る論理アドレスに対応するデータをNANDメモリ5内の或る物理的な記憶位置に書き込んだ場合、コントローラ4は、論物変換テーブルを更新して、この記憶位置を示す物理アドレスをこの論理アドレスに関連付ける。コントローラ4は、更新した論物変換テーブルをSSD3の電源がオフする迄の適宜なタイミングでNANDメモリ5内の管理データ領域に書き込み、論物変換テーブルを不揮発化する。
【0025】
DRAM6は、リトライリードテーブル(第1補正値テーブル)22、インデックステーブル24、及び第2補正値テーブル26も記憶する。リトライリードテーブル22は、
図5を参照して後述する。インデックステーブル24は、
図12を参照して後述する。第2補正値テーブル26は、
図13を参照して後述する。論物変換テーブルと同様に、リトライリードテーブル22、インデックステーブル24、及び第2補正値テーブル26もNANDメモリ5内の管理データ領域に記憶されており、SSD3の電源オン時等に、NANDメモリ5内の管理データ領域からDRAM6に転送され、DRAM6に記憶される。
【0026】
論物変換テーブルと同様に、コントローラ4は、リトライリードテーブル22、インデックステーブル24、及び第2補正値テーブル26を更新する。コントローラ4は、論物変換テーブルと同様に、更新したリトライリードテーブル22、インデックステーブル24、及び第2補正値テーブル26をSSD3の電源がオフする迄の適宜なタイミングでNANDメモリ5内の管理データ領域に書き込み、リトライリードテーブル22、インデックステーブル24、及び第2補正値テーブル26も不揮発化する。
【0027】
コントローラ4は、上述したNAND I/F13以外に、ホストインタフェース(ホストI/F)11、CPU12、DRAMインタフェース(DRAM I/F)14、スタティックRAM(SRAM)16、及びエンコーダ/デコーダ17を有する。ホスト I/F11、CPU12、NAND I/F13、DRAM I/F14、SRAM16、及びエンコーダ/デコーダ17の各部は、バス10を介して相互に接続される。なお、コントローラ4は、これらの各部が実装された1つの集積回路であってもよい。また、これらの各部の一部は、コントローラ4の外部に配設されてもよい。
【0028】
ホスト I/F11は、ホスト2との通信を実行するように構成されたインタフェース回路である。ホスト I/F11は、例えば、SATAインタフェースコントローラ、SASインタフェースコントローラ、PCIeコントローラ、または、Ethernetコントローラであってもよい。ホスト I/F11は、ライトコマンドやリードコマンドのような様々なコマンドをホスト2から受信する。ライトコマンドは、論理アドレス(開始論理アドレス)、ライトデータのサイズを含む。ホスト2は、ライトコマンドに続いてライトデータを送信する。ライトコマンドは、SSD3に対して、開始論理アドレスとサイズに対応するNANDメモリ5の記憶領域にライトデータを書き込むことを要求する。リードコマンドは、論理アドレス(開始論理アドレス)とリードすべきデータのサイズを含む。リードコマンドは、SSD3に対して、開始論理アドレスとサイズに対応するNANDメモリ5の記憶領域からデータを読み出すことを要求する。
【0029】
DRAM I/F14は、CPU12の制御の下、DRAM6を制御するように構成されたインタフェース回路である。DRAM I/F14は、DRAMコントローラとも呼ばれる。
【0030】
エンコーダ/デコーダ17は、リードデータにおける誤り検出と誤り訂正のために、データの符号化と復号を行う。エンコーダ/デコーダ17は、NANDメモリ5に書き込まれるデータ(ライトデータ)を符号化する。エンコーダ/デコーダ17は、NANDメモリ5から読み出したデータ(リードデータ)を復号する。復号の際、エンコーダ/デコーダ17は、リードデータにおける誤り検出と誤り訂正を実行する。エンコーダ/デコーダ17は、誤り訂正が成功しない場合は、誤り訂正の失敗をCPU12に通知する。エンコーダ/デコーダ17による符号化/復号には、RS(リード・ソロモン)符号やBCH(Bose-Chaudhuri-Hocquenghem)符号や低密度パリティ検査(LDPC)符号等を用いた任意のアルゴリズムを適用することが可能である。
【0031】
ライト時、エンコーダ/デコーダ17は、ライトデータに基づいてパリティを生成し、パリティをライトデータに付与する。NANDメモリ5には、パリティが付与されたライトデータが、符号化データとして書き込まれる。リード時、エンコーダ/デコーダ17は、読み出したリードデータに含まれるパリティに基づきシンドロームを生成し、シンドロームに基づいてリードデータが誤りを含むか否かを判断する。エンコーダ/デコーダ17は、リードデータが誤りを含む場合、誤りの位置を特定し、誤りを訂正する。エンコーダ/デコーダ17が訂正可能な誤りの数は、例えばパリティのビット数等によって決まっている。訂正可能な数を超える数の誤りをリードデータが含む場合、エンコーダ/デコーダ17は、誤り訂正ができない。したがって、この場合、エンコーダ/デコーダ17は、誤り訂正に失敗する。誤り訂正に失敗すると、
図5に示すリトライリードテーブルと
図13に示す第2補正値テーブルを用いたリトライリード動作が行われる。
【0032】
CPU12は、ホスト I/F11、NAND I/F13、DRAM I/F14、SRAM16、及びエンコーダ/デコーダ17を制御するように構成されたプロセッサである。CPU12は、SSD3の電源オンに応答して、NANDメモリ5または図示しないROMから制御プログラム(ファームウェアと称する)をDRAM6にロードし、ファームウェアを実行することによって様々な処理を行う。ファームウェアはSRAM16にロードされてもよい。CPU12は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作の制御は、ファームウェアに従って実行される。なお、コマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行されてもよい。
【0033】
(メモリチップ)
図2は、各メモリチップ30の構成の一例を示す。各メモリチップ30は、I/O信号処理回路110、制御信号処理回路111、チップ制御回路112、コマンドレジスタ113、アドレスレジスタ114、カラムデコーダ115、データレジスタ116、センスアンプ117、メモリセルアレイ118、ロウデコーダ119、及びRY/BY生成回路120を有する。
【0034】
チップ制御回路112は、制御信号処理回路111を介して受信する各種制御信号に基づいて状態遷移する回路である。チップ制御回路112は、各メモリチップ30の動作を制御する。RY/BY生成回路120は、チップ制御回路112による制御の下でRY/BY信号線の状態をレディー状態(RY)とビジー状態(BY)の間で遷移させる。
【0035】
I/O信号処理回路110は、NAND I/F13との間でI/O信号を送受信するためのバッファ回路である。I/O信号処理回路110がラッチしたコマンド、アクセス先を指定するアドレス、及びデータは、アドレスレジスタ114、コマンドレジスタ113、及びデータレジスタ116に夫々振り分けられて記憶される。
【0036】
アドレスレジスタ114に記憶されたアドレスは、チップ番号、ロウアドレス、及びカラムアドレスを含む。チップ番号は、各メモリチップ30を区別するための識別情報である。チップ番号はチップ制御回路112に供給され、ロウアドレスはロウデコーダ119に供給され、カラムアドレスはカラムデコーダ115に供給される。
【0037】
制御信号処理回路111は、制御信号の入力を受け付ける。制御信号処理回路111は、受け付けた制御信号に基づいて、I/O信号処理回路110が受け付けたI/O信号の記憶先のレジスタの振り分けを実行する。制御信号処理回路111は、受け付けた制御信号をチップ制御回路112に転送する。
【0038】
(メモリセル)
図3は、メモリセルアレイ118の構成の一例を示す。メモリセルアレイ118は、
図1に示すように、複数のブロックBLKを有する。複数のブロックBLKは、第1の方向(y方向と称する)に配列される。各ブロックBLKは、y方向に配列される複数、例えば4個のストリングユニットSU0~SU3(区別する必要が無い場合、ストリングユニットSUと総称する)を含む。しかし、ブロックBLKの各々が1つのストリングユニットSUのみを含んでもよい。
【0039】
それぞれがy方向に延びる複数(p本)のビット線BL0~BLp-1(区別する必要が無い場合、ビット線BLと総称する)の各々は、各ブロックBLKの各ストリングユニットSUに含まれるx方向に配列されるp個のストリングSTRの各々と接続される。
【0040】
各ストリングSTRは、1つの選択ゲートトランジスタSTと、複数、例えば8個のメモリセルトランジスタMT0、MT1、MT2、MT3、MT4、MT5、MT6、MT7(区別する必要が無い場合、メモリセルトランジスタMTと総称する)と、1つの選択ゲートトランジスタDT0、DT1、…(区別する必要が無い場合、選択ゲートトランジスタDTと総称する)を含む。メモリセルトランジスタMTはメモリセルに対応する。選択ゲートトランジスタST、メモリセルトランジスタMT、及び選択ゲートトランジスタDTは、ソース線CELSRCとビット線BLの間にこの順に直列に接続される。メモリセルトランジスタMT0~MT7は、ワード線WL0~WL7(区別する必要が無い場合、ワード線WLと総称する)に接続される制御ゲート電極と、周囲から絶縁された電荷蓄積層を含む。メモリセルトランジスタMTは、電荷蓄積層中の電荷の量に基づいてデータを不揮発的に記憶する。
【0041】
メモリセルトランジスタMTは、半導体基板に形成された積層ゲート構造を備えたMOSFET(Metal Oxide Semiconductor Field Effect Transistor)から構成される。積層ゲート構造は、トンネル酸化膜を介在して形成されたフローティングゲートと、フローティングゲートに絶縁膜を介在して形成された制御ゲート電極を含む。メモリセルトランジスタMTの閾値電圧は、フローティングゲートに蓄えられる電子の数に応じて変化する。メモリセルトランジスタMTは、閾値電圧の違いに応じてデータを記憶する。即ち、メモリセルトランジスタMTは、データに応じた量の電荷をフローティングゲートに蓄える。
【0042】
相違する複数のビット線BLにそれぞれ接続された複数のストリングSTRは、1つのストリングユニットSUを構成する。各ストリングユニットSUにおいて、メモリセルトランジスタMTの制御ゲート電極は、各ワード線WLに接続される。各ブロックBLKにおいて、相違する複数のストリングユニットSUに亘って、同じアドレスのワード線WLが相互に接続される。1つのストリングユニットSU中でワード線WLを共有するメモリセルトランジスタMTの組は、セルユニットCUと称する。
【0043】
選択ゲートトランジスタDTはストリングユニットSUにそれぞれ属する。ストリングユニットSUα(α=0~3)の複数のストリングSTRの各々の選択ゲートトランジスタDTαのゲートは選択ゲート線SGDLαに接続される。複数のストリングSTRの各々の選択ゲートトランジスタSTのゲートは、選択ゲート線SGSLに接続される。
【0044】
次に、メモリセルトランジスタMTについて説明する。メモリセルトランジスタMTは、1つのトランジスタ(メモリセル)に1ビットのデータを記憶可能なSLC(Single Level Cell)でもよいし、Nビット(Nは2以上の自然数)のデータを記憶可能な多値セルでもよい。
【0045】
多値セルは、1つのメモリセルトランジスタに2ビットのデータを記憶可能なMLC(Multiple Level Cell)、1つのメモリセルトランジスタに3ビットのデータを記憶可能なTLC(Triple Level Cell)、1つのメモリセルトランジスタに4ビットのデータを記憶可能なQLC(Quad Level Cell)、及び1つのメモリセルトランジスタに5ビット以上のデータを記憶可能な多値セルを含む。
【0046】
これ以降の説明では多値セルの一例として、各メモリセルトランジスタMTが3ビットのデータを記憶可能なTLCを説明する。しかし、実施形態は、MLC、QLCにも適用可能である。TLCの場合、各ワード線に接続される1つのセルユニットCUに3ページ分のデータが記憶される。1つのワード線によって構成される3ページのうち、最初に書き込みがなされるページをロワー(Lower)ページ、ロワーページの次に書き込みがなされるページをミドル(Middle)ページ、ミドルページの次に書き込みがなされるページをアッパー(Upper)ページと称する。なお、1つのワード線によって構成される複数または全てのページに対して一括に書き込みがなされてもよい。
【0047】
図4は、TLCを構成するメモリセルトランジスタの書き込み後の閾値電圧分布の一例を示す。同じ値の3ビットデータを記憶する複数のメモリセルトランジスタMTであっても、メモリセルトランジスタMTの特性のばらつき等に起因して、書き込みの結果、互いに多少相違する閾値電圧を有し得る。このため、同じ値の3ビットデータを記憶する複数のメモリセルトランジスタMTの閾値電圧は1つの分布を形成する。
【0048】
各メモリセルトランジスタMTの閾値電圧は、記憶するデータに応じている。各メモリセルトランジスタMTは、アッパーページに属するデータ“x”と、ミドルページに属するデータ“y”と、ロワーページに属するデータ“z”で定義される3ビットデータ“xyz”を記憶可能である。データ“x”、“y”、“z”は、“0”又は“1”である。
【0049】
TLCを構成するメモリセルトランジスタMTの閾値電圧は、8つの閾値電圧分布“Er”、“A”、“B”、“C”、“D”、“G”、“E”、“F”、及び“G”のいずれかに属するように制御される。一例では、閾値電圧が閾値電圧分布“Er”に属するメモリセルトランジスタは、データ“111”を記憶する。閾値電圧が閾値電圧分布“A”に属するメモリセルトランジスタは、データ“110”を記憶する。閾値電圧が閾値電圧分布“B”に属するメモリセルトランジスタは、データ“100”を記憶する。閾値電圧が閾値電圧分布“C”に属するメモリセルトランジスタは、データ“000”を記憶する。閾値電圧が閾値電圧分布“D”に属するメモリセルトランジスタは、データ“010”を記憶する。閾値電圧が閾値電圧分布“E”に属するメモリセルトランジスタは、データ“011”を記憶する。閾値電圧が閾値電圧分布“F”に属するメモリセルトランジスタは、データ“001”を記憶する。閾値電圧が閾値電圧分布“G”に属する閾値電圧のメモリセルトランジスタはデータ“101”を記憶する。データ“111”を記憶するメモリセルトランジスタMTの閾値電圧は一番低い閾値電圧分布“Er”に属する。データ“101”を記憶するメモリセルトランジスタMTの閾値電圧は一番高い閾値電圧分布“G”に属する。一例では、隣接する閾値電圧分布間のハミング距離が1となるように、閾値電圧分布と記憶するデータの対応関係が設定されている。
【0050】
なお、メモリセルトランジスタMTの閾値電圧分布と記憶する3ビットデータの関係は上記した例に限定されず、例えばデータ“111”を記憶するメモリセルトランジスタMTの閾値電圧分布が一番高く、データ“101”を記憶するメモリセルトランジスタMTの閾値電圧分布が一番低くてもよい。すなわち、閾値電圧が分布“G”に属するメモリセルトランジスタがデータ“111”を記憶し、閾値電圧が分布“Er”に属するメモリセルトランジスタがデータ“101”を記憶してもよい。
【0051】
読み出し対象のメモリセルトランジスタMTが記憶しているデータを判別するために、当該メモリセルトランジスタMTの状態が判断される。状態の判断のために、リード電圧VA、VB、VC、VD、VE、VF、及びVGのいずれかがメモリセルトランジスタMTに印加される。
【0052】
読み出し対象のメモリセルトランジスタMTの閾値電圧が或るリード電圧VA~VGを超えているか否かに基づいて、メモリセルトランジスタMTの状態が判定できる。リード電圧VA~VG以上の閾値電圧を有するメモリセルトランジスタMTは、制御ゲート電極においてリード電圧VA~VGを受けてもオフを維持する。一方、リード電圧VA~VG未満の閾値電圧を有するメモリセルトランジスタMTは、制御ゲート電極においてリード電圧VA~VGを受けると、オンする。
【0053】
電圧VREADは、非読み出し対象のセルユニットCUのメモリセルトランジスタMTのワード線WLに印加される。電圧VREADは、各分布Er、A~Gのいずれの状態にあるメモリセルトランジスタMTの閾値電圧より高い。
【0054】
閾値電圧が分布“Er”に属するメモリセルトランジスタMTは、浮遊ゲート等の電荷蓄積層から電荷が放出され、データが消去された状態である。閾値電圧が分布“A”~分布“G”に属するメモリセルトランジスタMTは、浮遊ゲート等の電荷蓄積層に電荷が蓄積され、データが書き込まれた状態である。
【0055】
1つのセルユニットCUのメモリセルトランジスタMTの或る同じ位置(桁)のビットのデータの組は、1つのページを構成する。
【0056】
或るページ、例えばロワーページのデータは、リード電圧VAを用いたA読み出しと、リード電圧VEを用いたE読み出しにより特定される。このように、リード電圧Vβ(βは、A、B、C、D、E、F又はG)を用いた読み出しをβ読み出しと称する。
図4では、β読み出しは、βRと記す。
【0057】
すなわち、A読み出しにより、読み出し対象メモリセルトランジスタMTの閾値電圧が、分布“Er”に属するか又は分布“A”、“B”、“C”、“D”、“E”、“F”若しくは“G”に属するかが決定される。
【0058】
また、E読み出しにより、閾値電圧が分布“A”、“B”、“C”、“D”、“E”、“F”又は“G”に属する読出し対象メモリセルトランジスタMTの閾値電圧が、分布“A”、“B”、“C”若しくは“D”に属するか又は分布“E”、“F”若しくは“G”に属するかが決定される。
【0059】
読み出し対象メモリセルトランジスタMTの閾値電圧が、分布“Er”、“E”、“F”又は“G”に属する場合、ロワーページにおいてデータ“1”を記憶していると判断される。読み出し対象メモリセルトランジスタMTの閾値電圧が、分布“A”、“B”、“C”又は“D”に属する場合、ロワーページにおいてデータ“0”を記憶していると判断される。
【0060】
ミドルページとアッパーページの読み出しについても同じである。ミドルページ読み出しでは、B読み出し、D読み出し、及びF読み出しにより、読み出し対象メモリセルトランジスタMTがミドルページにおいて記憶するデータが判断される。アッパーページ読み出しでは、C読み出しとG読み出しにより、読み出し対象メモリセルトランジスタMTがアッパーページにおいて記憶するデータが判断される。
【0061】
図2、
図3、及び
図4を参照してメモリセルアレイ118に対する書き込みと読み出しを説明する。ロウデコーダ119、カラムデコーダ115、データレジスタ116、及びセンスアンプ117は、メモリセルアレイ118に対する周辺回路を構成する。周辺回路は、チップ制御回路112による制御に基づいて、メモリセルアレイ118に対するアクセスを実行する。アクセスは、読み出し(リード又はセンスとも称する)、書き込み(ライト又はプログラムとも称する)、及び消去(イレースとも称する)を含む。
【0062】
ライト時、カラムデコーダ115は、カラムアドレスに対応したビット線BLを選択して活性化する。センスアンプ117は、カラムデコーダ115により選択されたビット線BLの電位を0ボルトとする。ロウデコーダ119は、ロウアドレスに対応したワード線WLに、書き込みパルスを印加する。選択されたビット線BLおよび選択されたワード線WLとの交点に位置するメモリセルトランジスタMTのフローティングゲートに電子が注入される。その結果、そのフローティングゲートの閾値電圧が上昇する。センスアンプ117は、書き込みパルスが印加される毎に、データレジスタ116に記憶されているライトデータに応じた電圧に閾値電圧が到達したか否かを確認する。閾値電圧がライトデータに応じた電圧に到達するまで、書き込みパルスの印加が継続される。
【0063】
リード時、センスアンプ117は、ビット線BLに電源電位Vccをプリチャージし、ロウデコーダ119は、選択されたワード線WLに複数のリード電圧VA~VGのいずれかを順次印加する。なお、ロウデコーダ119は、非選択のワード線WLには転送電位を印加し、非選択のワード線WLに属するメモリセルトランジスタMTを導通状態にしておく。センスアンプ117は、どのリード電圧VA~VGが印加されたときに、プリチャージにより蓄えられた電荷がソース線SLに流出したかを検知する。これにより、対象のメモリセルトランジスタMTに記憶されているデータが判定される。
【0064】
消去時、電位発生回路(図示せず)によってメモリセルアレイ118の基板にイレース電圧が印加される。ロウデコーダ119はイレース対象のブロックBLKの全てのワード線WLを接地電位に導通させる。選択されたブロックBLK内の各メモリセルトランジスタMTにおいては、フローティングゲートに蓄えられていた電荷が放出される。その結果、選択されたブロックBLK内の各メモリセルトランジスタMTの状態は消去状態(すなわちデータ“111”を記憶している状態)に遷移する。
【0065】
センスアンプ117は、NANDメモリ5から読み出したデータをデータレジスタ116に記憶する。データレジスタ116に記憶されたデータは、データ線を通してI/O信号処理回路110に送られ、I/O信号処理回路110からコントローラ4へ転送される。
【0066】
各リード電圧VA~VGは、NANDメモリ5内の管理データ領域に記憶されている。後述するように、リトライリード動作の際、リード電圧は変更されることがある。NANDメモリ5内の管理データ領域に記憶されているリード電圧は基準値である。変更後のリード電圧の現在値はDRAM6に記憶される。各リード電圧VA~VGの基準値として、複数のメモリチップ30で共通の値が設定されてもよいし、メモリチップ30毎に異なる値が設定されてもよい。また、各リード電圧VA~VGの基準値として、1メモリチップ30の複数のブロックで共通の値が設定されてもよいし、ブロック毎またはブロックとは異なる単位(例えば、単数又は複数の物理アドレス)毎に異なる値が設定されてもよい。基準値の設定方法は特定の方法に限定されない。コントローラ4は、対象のメモリチップ30に所定の指示を送信することによって各リード電圧の基準値を設定してもよい。
【0067】
(リトライリード)
メモリセルトランジスタMTにおいて、フローティングゲートに蓄えられる電荷の量は、時間経過とともに変化する。また、或るメモリセルトランジスタMTからの読み出し動作又は隣接するメモリセルトランジスタMTへの書き込み動作によっても、或るメモリセルトランジスタMTのフローティングゲートに蓄えられる電荷の量が変化する。あるメモリセルトランジスタMTのフローティングゲートに蓄えられる電荷の量が変化すると、そのメモリセルトランジスタMTの閾値電圧が変化する。これにより、隣接する2つの閾値電圧分布の裾が重なることがある。そのため、“0”又は“1”として書き込まれたデータが、それぞれ“1”又は“0”として読み出されてしまう。ライト時から変化したデータは、リード時にコントローラ4において誤り(エラービット)として検出される。
【0068】
コントローラ4は、リードデータの中のエラービットをエンコーダ/デコーダ17を用いて誤り訂正を実行する。コントローラ4は、誤りが訂正できた場合(リード動作が成功した場合)、ライトデータを復元する。しかし、コントローラ4は、エンコーダ/デコーダ17を用いて誤り訂正することができなかった場合(リード動作が失敗した場合)、リード電圧を変更してデータを再び読み出す。リード電圧を変更して再びデータを読み出すことによって、リードデータの中のエラービットの数が少なくなることがあり、リード動作が成功することがある。リード電圧を変更してデータを再度読み出す動作を「リトライリード動作」と称する。コントローラ4は、リトライリード動作によって読み出したデータに対し、エンコーダ/デコーダ17を用いて誤り訂正を再度実行する。
【0069】
リトライリード動作の際のリード電圧の変更方法は、特定の方法に限定されない。実施形態では、各リトライリード時のリード電圧に関する補正値を記憶するリトライリードテーブル22が用意される。エラー訂正によりリードデータの復号に失敗すると、リトライリード動作の前に、リトライリードテーブル22から読み出された補正値が示す電圧に応じてリード電圧の現在値が変更される。
【0070】
なお、実施形態では、
図10で説明するように、各リードコマンドに対する初回のリード動作の前にもリード電圧は変更される。そこで、誤り訂正が失敗したことに応じたリトライリード動作(各リードコマンドに対する2回目以降のリード動作)時にリード電圧を変更するための補正値を第1補正値と称する。また、リトライリード動作ではないリード動作(各リードコマンドに対する初回のリード動作)時にリード電圧を変更するための補正値を第2補正値と称する。リトライリード動作で用いられるリトライリードテーブル22は、第1補正値テーブルとも称する。
【0071】
図5は、リトライリードテーブル22の一例を示す。リトライリードテーブル22は、リード電圧を変更するための第1補正値を、リード電圧VA~VG毎に記憶する。コントローラ4は、リトライリードテーブル22から読み出した補正値を指定するコマンドをNANDメモリ5に供給する。NANDメモリ5は、リード電圧の補正値(デジタル信号)をアナログ信号に変換するD/Aコンバータを含む。第1補正値は、D/Aコンバータの変換単位であるdac数で表記される。例えば、1dacは、これに限定されないが、25mVに相当する。
【0072】
第1補正値は、リトライリード動作の回数を示すインデックス(例えば、#0~#63)毎に設定される。インデックス#0は、初回のリードに対応し、初回のリトライリード動作(通算の2回目のリード動作)はインデックス#1に対応する。インデックス#0の場合の第1補正値は、リード電圧VA~VGについて全て0である。各回のリード動作の際、第1補正値に応じた電圧に応じてリード電圧の現在値が変更される。NANDメモリ5のリード特性は、物理的な位置により異なるので、第1補正値は、NANDメモリ5の物理的な位置、例えばチップ毎、ブロック毎又は物理アドレス毎に異なる値に設定されてもよい。
【0073】
なお、あるセルを繰り返しリードすると、他のセルへ悪影響が及ぶことがある。また、リトライリード以外の手法の方が正しくリードできる可能性が高い場合もある。このため、リトライリードテーブル22のインデックスは有限とされている。リトライリード動作の毎にインデックスがインクリメント(+1)されると、リトライリードテーブル22のインデックスは上限に達してしまう可能性がある。そのため、1回のリトライリード動作毎ではなく、数回のリトライリード動作毎にインデックスがインクリメントされてもよい。また、インデックスが或る値まで達すると、他の手段によりリード動作を再実行してもよい。他の手段により再実行したリード動作が成功した場合、その時のリード電圧に対応するインデックスにインデックスを変更してもよい。
【0074】
(ライト動作)
第1実施形態によるライト動作とリード動作の一例を説明する。
図6は、ライト動作の一例を示すフローチャートである。
【0075】
コントローラ4は、
図6のS102で、ライトコマンドをホスト2から受信する。コントローラ4は、S104で、ライトコマンドに対応するライトデータをランダマイズする。なお、S104のランダマイズ処理は、書き込み単位のライトデータが揃っていることが必要である。ここでは、メモリセルがTLCである例を説明するので、3ページ分のライトデータが揃ってから、ランダマイズ処理が実行される。
【0076】
コントローラ4は、S106で、ランダマイズ済みライトデータから各リード電圧VA~VG毎のEBC(Expected Bit Count)を計算する。EBCは、NANDメモリ5にこれから書き込まれるライトデータが各リード電圧VA~VGにより読み出された場合に得られるであろうビット数の期待値である。各リード電圧VA~VGに対応するEBCをEBCA~EBCG(区別する必要が無い場合、EBCと総称する)と称する。
【0077】
EBCの計算の一例を説明する。
【0078】
先ず、説明の便宜上、
図7を参照して、MLCを構成するメモリセルにおけるEBCの計算の仕方を説明する。
【0079】
ロワーページの情報ベクトルをl=(l0,l1,l2,…,lk-1)とする。
【0080】
アッパーページの情報ベクトルをu=(u0,u1,u2,…,uk-1)とする。
【0081】
kは情報ベクトルの長さである。
【0082】
ln∈{0,1}、un∈{0,1}であり、nは要素番号を示す。
【0083】
ロワーページとアッパーページの情報ベクトルは、誤りを含まないとする。
【0084】
EBCAは、VAより低いレベルの電圧が印加され、印加された電圧に応じた電荷がチャージされているメモリセルの数の期待数を表し、li&ui=1の情報ベクトルの要素数である。&はAND演算を表す。
【0085】
EBCAを求める数式を下記に示す。
【0086】
for(i=0,i<k,i++){
if(li&ui)count++;
}
すなわち、ロワーページとアッパーページのビットがともに“1”であるメモリセルの総和がEBCAである。
【0087】
EBCBは、VBより低いレベルの電圧が印加され、印加された電圧に応じた電荷がチャージされているメモリセルの数の期待数を表し、li&1=1の情報ベクトルの要素数である。
【0088】
EBCBを求める数式を下記に示す。
【0089】
for(i=0,i<k,i++){
if(li&1)count++;
}
すなわち、ロワーページのビットが“1”であるメモリセルの総和がEBCBである。
【0090】
EBCCは、VCより低いレベルの電圧が印加され、印加された電圧に応じた電荷がチャージされているメモリセルの数の期待数を表し、li|~ui=1の情報ベクトルの要素数である。|はOR演算を表し、~はNOT演算を表す。
【0091】
EBCCを求める数式を下記に示す。
【0092】
for(i=0,i<k,i++){
if(li|~ui)count++;
}
すなわち、ロワーページのビットが“1”である、又はアッパーページのビットが“0”であるメモリセルの総和がEBCCである。
【0093】
次に、
図8を参照して、TLCを構成するメモリセルにおけるEBCの計算の仕方を説明する。
【0094】
ロワーページの情報ベクトルをl=(l0,l1,l2,…,lk-1)とする。
【0095】
ミドルページの情報ベクトルをm=(m0,m1,m2,…,mk-1)とする。
【0096】
アッパーページの情報ベクトルをu=(u0,u1,u2,…,uk-1)とする。
【0097】
kは情報ベクトルの長さである。
【0098】
ln∈{0,1}、mn∈{0,1}、un∈{0,1}であり、nは要素番号を示す。
【0099】
ロワーページ、ミドルページ、及びアッパーページの情報ベクトルは、誤りを含まないとする。
【0100】
EBCAは、VAより低いレベルの電圧が印加され、印加された電圧に応じた電荷がチャージされているメモリセルの数の期待数を表し、li&mi&ui=1の情報ベクトルの要素数である。
【0101】
EBCAを求める数式を下記に示す。
【0102】
for(i=0,i<k,i++){
if(li&mi&ui)count++;
}
すなわち、ロワーページとミドルページとアッパーページのビットがともに“1”であるメモリセルの総和がEBCAである。
【0103】
EBCBは、VBより低いレベルの電圧が印加され、印加された電圧に応じた電荷がチャージされているメモリセルの数の期待数を表し、mi&ui=1の情報ベクトルの要素数である。
【0104】
EBCBを求める数式を下記に示す。
【0105】
for(i=0,i<k,i++){
if(mi&ui)count++;
}
すなわち、ミドルページとアッパーページのビットがともに“1”であるメモリセルの総和がEBCBである。
【0106】
EBCCは、VCより低いレベルの電圧が印加され、印加された電圧に応じた電荷がチャージされているメモリセルの数の期待数を表し、~li&ui|mi&ui=1の情報ベクトルの要素数である。
【0107】
EBCCを求める数式を下記に示す。
【0108】
for(i=0,i<k,i++){
if((~li&ui)|(mi&ui))count++;
}
すなわち、ロワーページのビットが“0”であり、アッパーページのビットが“1”である、又はミドルページとアッパーページのビットがともに“1”であるメモリセルの総和がEBCCである。
【0109】
EBCDは、VDより低いレベルの電圧が印加され、印加された電圧に応じた電荷がチャージされているメモリセルの数の期待数を表し、~li&~mi|mi&ui=1の情報ベクトルの要素数である。
【0110】
EBCDを求める数式を下記に示す。
【0111】
for(i=0,i<k,i++){
if((~li&~mi)|(mi&ui))count++;
}
すなわち、ロワーページとミドルページのビットがともに“0”であり、又はミドルページとアッパーページのビットがともに“1”であるメモリセルの総和がEBCDである。
【0112】
EBCEは、VEより低いレベルの電圧が印加され、印加された電圧に応じた電荷がチャージされているメモリセルの数の期待数を表し、mi&ui|~li=1の情報ベクトルの要素数である。
【0113】
EBCEを求める数式を下記に示す。
【0114】
for(i=0,i<k,i++){
if((mi&ui)|~li)count++;
}
すなわち、ミドルページとアッパーページのビットがともに“1”であり、又はロワーページのビットが“0”であるメモリセルの総和がEBCEである。
【0115】
EBCFは、VFより低いレベルの電圧が印加され、印加された電圧に応じた電荷がチャージされているメモリセルの数の期待数を表し、~li|mi=1の情報ベクトルの要素数である。
【0116】
EBCFを求める数式を下記に示す。
【0117】
for(i=0,i<k,i++){
if(~li|mi)count++;
}
すなわち、ロワーページのビットがともに“0”であり、又はミドルページのビットが“1”であるメモリセルの総和がEBCFである。
【0118】
EBCGは、VGより低いレベルの電圧が印加され、印加された電圧に応じた電荷がチャージされているメモリセルの数の期待数を表し、~li|~ui|mi=1の情報ベクトルの要素数である。
【0119】
EBCGを求める数式を下記に示す。
【0120】
for(i=0,i<k,i++){
if(~li|~ui|mi)count++;
}
すなわち、ロワーページのビットが“0”であり、アッパーページのビットが“0”であり、又はミドルページのビットが“1”であるメモリセルの総和がEBCGである。
【0121】
図6の説明に戻り、コントローラ4は、S108で、計算したEBCとランダマイズ前のライトデータを連結する。コントローラ4は、S112で、連結データ(EBCとランダマイズ前のライトデータ)をランダマイズする。
【0122】
コントローラ4は、S114で、ランダマイズ済みの連結データに対して、所定サイズ(フレームと称する)毎に第1の誤り訂正符号(第1のL1符号と称する)を付与して、連結データを符号化する。
【0123】
コントローラ4は、S116で、第1のL1符号により符号化されたランダマイズ済みの連結データをNANDメモリ5に書き込む。このようにEBCは、ライトデータとともにNANDメモリ5に書き込まれる。
【0124】
図9は、NANDメモリ5におけるEBCの書き込み先の例を示す。
図9(a)に示すように、コントローラ4は、NANDメモリ5の1ページを、所定サイズのデータ部と、データ部に対するパリティ部とのセットから構成するが、1ページには余りの未使用部が生じる。コントローラ4は、EBCをこの未使用部に書き込んでもよい。コントローラ4は、データ部、パリティ部、及び未使用部の区分を制御する。コントローラ4は、EBCが書き込まれた未使用部をデータ部とする。また、
図9(b)に示すように、NANDメモリ5の各メモリチップ30は、ブロック以外の予備カラムを含む。コントローラ4は、EBCをこの予備カラムに書き込んでもよい。
【0125】
(リード動作)
図10、
図11はリード動作の一例を示すフローチャートである。
【0126】
コントローラ4は、
図10のS202で、リードコマンドをホスト2から受信する。コントローラ4は、S204で、インデックステーブル24から、リードコマンドにより特定される物理アドレスに対応するインデックスを読み出す。
【0127】
図12は、インデックステーブル24の一例を示す。インデックステーブル24は、リトライリードテーブル22のインデックスを記憶する。インデックスは、物理アドレス毎に記憶されている。インデックスは、LBA等の論理アドレス毎に記憶されていてもよい。インデックスは現在のインデックスと、第2補正値を求めた時(
図11のS242)のインデックスの2つが記憶される。前述したように、実施形態では、各リードコマンドに対する初回のリード動作の前にもリード電圧は変更される。第2補正値は、リトライリード動作ではないリード動作(各リードコマンドに対する初回のリード動作)時にリード電圧を変更するための補正値である。第1補正値は、リトライリード動作(各リードコマンドに対する2回目以降のリード動作)時にリード電圧を変更するための補正値である。現在のインデックスは、リトライリード動作の実行前(
図10のS224)にインクリメントされて、更新される。
【0128】
インデックステーブル24が第2補正値を求めた時のインデックスを記憶することで、現在、第2補正値が有効であるか否かを判断することができる。第2補正値はリード電圧毎の補正値である。従って、第2補正値を求めた時のリード電圧と第2補正値を用いて補正する時の(すなわち現在の)リード電圧が同じでないと、第2補正値は無効である。第2補正値が有効であるか否かは、インデックステーブル24において現在のインデックスが、第2補正値を求めた時のインデックスと同じであるか又は進んでいるかを調べることにより知ることができる。すなわち、コントローラ4は、S204で、インデックステーブル24から現在のインデックスと、第2補正値を求めた時のインデックスを読み出す。
【0129】
図10の説明に戻り、コントローラ4は、S206で、両インデックスを比較して、リトライリードテーブル22を参照して、現在のインデックスが第2補正値を求めた時のインデックスから進んだか否かを判定する。
【0130】
現在のインデックスが第2補正値を求めた時のインデックスから進んだ場合(S206の判定結果がYESの場合)、コントローラ4は、S208で、リトライリードテーブル22から現在のインデックスの第1補正値を読み出す。コントローラ4は、S209で、第1補正値に基づきリード電圧VA~VGを補正する。具体的には、コントローラ4は、リード電圧の基準値に第1補正値に応じた電圧を加算して、リード電圧の現在値を補正する。すなわち、現在のインデックスが第2補正値を求めた時のインデックスから進んだ場合、コントローラ4は、リード電圧を補正するに際して、第2補正値を使わずに、リトライリードテーブル22から読み出した第1補正値を使う。
【0131】
リトライリードテーブル22のインデックスが第2補正値を求めた時と進んでいない、すなわち同じである場合(S206の判定結果がNOの場合)、コントローラ4は、S212で、第2補正値テーブル26から第2補正値を読み出す。
【0132】
図13は、第2補正値テーブル26の一例を示す。第2補正値テーブル26は、リード電圧VA~VG毎の第2補正値を記憶する。第2補正値は、NANDメモリ5の物理的な記憶位置、例えばブロック毎またはブロックとは異なる単位(例えば、単数の物理アドレス又は複数の物理アドレス)毎に異なる値が設定されてもよい。
図13は、物理アドレス毎にリード電圧VA~VG毎の第2補正値が記憶される例を示す。
【0133】
図10の説明に戻り、コントローラ4は、S214で、第2補正値に基づきリード電圧VA~VGを補正する。具体的には、コントローラ4は、リード電圧の現在値に第2補正値に応じた電圧を加算して、リード電圧を補正する。
【0134】
コントローラ4は、S209の処理又はS214の処理が完了すると、S216で、NANDメモリ5から第1のL1符号が付与された連結データを読み出す。読み出す際のリード電圧は、S209又はS214で補正されたリード電圧である。
【0135】
書き込み単位のデータ、ここでは、メモリセルがTLCである例を説明するので、3ページ分のデータが読み出されると、コントローラ4は、S218で、連結データに対して第1のL1符号による誤り訂正処理を行い、連結データを復元する。
【0136】
コントローラ4は、S222で、誤り訂正が成功した(リード動作が成功した)か否かを判定する。
【0137】
書き込み単位のデータが読み出されると、コントローラ4は、
図11のS236で、誤り訂正前の連結データのデータ部からOBC(Observed Bit Count)も計算する。OBCは、NANDメモリ5に書き込まれたライトデータが各リード電圧VA~VGにより読み出された場合に得られたビット数の実測値である。各リード電圧VA~VGに対応するOBCをOBC
A~OBC
G(区別する必要が無い場合、OBCと総称する)と称する。
【0138】
OBCの計算は、
図7と
図8に示したEBCの計算と同様である。ただし、EBCの計算の場合、ロワーページとアッパーページ(又はロワーページとミドルページとアッパーページ)の情報ベクトルは、誤りを含まないと仮定したが、OBCの計算の場合は、ロワーページとアッパーページ(又はロワーページとミドルページとアッパーページ)の情報ベクトルは、誤りを含む可能性がある点が異なる。OBCの計算において、情報ベクトルが誤りを含む可能性がある理由は、メモリセルの閾値電位分布が変動するからである。
【0139】
コントローラ4は、S238で、OBC誤差を調整する。OBCは、誤り訂正前の連結データのデータ部から計算されるが、連結データに含まれているEBC部の影響により、OBCは誤差を含む。OBC誤差は、誤り訂正済み連結データのEBC部のビットを考慮して調整することができる。
【0140】
リード電圧が最適であれば、OBCとEBCは一致するはずである。両者が一致しない場合、セルの閾値電位分布が変動していると考えられる。そのため、OBCがEBCからずれている場合、リード電圧が変更されると、OBCがEBCと等しくなる可能性が高い。
【0141】
誤り訂正が失敗した場合(
図10のS222の判定結果がNOの場合)、コントローラ4は、S224で、現在のインデックスを1つ進め、インデックステーブル24の現在のインデックスをインクリメントして、インデックステーブル24を更新する。上述したように、誤り訂正が失敗する毎にリトライリードテーブル22のインデックスが1つ進むと、リトライリードテーブル22のインデックスが上限に達する可能性がある。それを回避するため、1回のリトライリード動作毎ではなく、数回のリトライリード動作毎にインデックスがインクリメントされてもよい。
【0142】
コントローラ4は、S226で、リトライリードテーブル22から現在のインデックスの第1補正値を読み出す。コントローラ4は、S228で、第1補正値に基づきリード電圧VA~VGを補正する。具体的には、コントローラ4は、リード電圧の現在値に第1補正値に応じた電圧を加算して、リード電圧を補正する。
【0143】
この後、コントローラ4は、リトライリードを実行する。すなわち、コントローラ4は、S216で、NANDメモリ5から第1のL1符号により符号化された連結データを読み出し、読み出したデータに対して第1のL1符号による誤り訂正処理を行い、連結データを復元する。読み出す際のリード電圧は、S228で補正されたリード電圧である。
【0144】
誤り訂正が成功した場合(S222の判定結果がYESの場合)、コントローラ4は、
図11のS232で、誤り訂正済み連結データのランダマイズを解除する。コントローラ4は、S234で、ランダマイズ解除済み連結データからEBCを取り出す。
【0145】
コントローラ4は、S234の処理及びS238の処理が完了すると、S242で、EBCとOBCからリード電圧VA~VG毎の第2補正値を求める。第2補正値は、OBCを求めた時のリード電圧に対する補正値である。OBCを求めた時のリード電圧は、
図10のS224、S226、S228に示すように、第1補正値により補正されている。
【0146】
また、次のリードコマンドに対する初回のリード動作時は、
図10のS212、S214に示すように、NANDメモリ5から読み出されたEBCと誤り訂正が成功したデータから求められたOBCとの差が0になるように設定された第2補正値に基づき補正されたリード電圧が使用される。そのため、次のリードコマンドに対する初回のリード動作時のリード電圧として最適なリード電圧を設定することができ、次のリードコマンドに対する初回のリード動作において誤り訂正に失敗する可能性が低くなる。そのため、リトライリードそのものの発生確率が低くなる。
【0147】
コントローラ4は、S242の後、S244で、第2補正値を第2補正値テーブル26に書き込み、第2補正値テーブル26を更新する。コントローラ4は、S246で、インデックステーブル24において現在のインデックスと「第2補正値を求めた時の現在のインデックス」(すなわち、S242で第2補正値を求めた時の現在のインデックス)とが異なっている場合は、インデックステーブル24の「第2補正値を求めた時の現在のインデックス」を、現在のインデックスに書き換えて、インデックステーブル24を更新する。
【0148】
図14は、
図6に示したリード動作と、
図10及び
図11に示したライト動作の一例の概要を示す。
図14は、ライト動作とリード動作を、データの変遷に従って示すものである。
図14において、角が丸いデータはランダマイズされているデータを示す。
図14において各矢印に付された符号は、
図6、
図10、及び
図11の各処理の符号と一致している。実施形態では、ライト時に、ランダマイズ済みデータからEBCが求められ(S106)、EBCはランダマイズ前のデータと連結される。連結されたデータは、ランダマイズと第1のL1符号付与を受けた後(S114)にNANDメモリ5に書き込まれる(S116)。また、リード時に、リードデータからOBCが求められる(S236)。さらに、ランダマイズが解除されたリードデータからEBCが求められる(S234)。そして、OBCとEBCが等しくなるように第2補正値が決定される(S242)。
【0149】
(第2補正値の求め方)
第2補正値の求め方のいくつかの例を説明する。
【0150】
図15は、第2補正値の求め方の第1の例を示す。
図15(a)、(b)それぞれの上側のグラフにおいて、横軸はリード電圧を示し、縦軸はEBCを示す。縦軸と横軸は、ともに線形目盛である。
図15(a)、(b)の下側のグラフは、
図4に示したメモリセルの閾値電圧分布に対応する。
図15(a)、(b)それぞれの下側のグラフにおいて、横軸はリード電圧を示し、縦軸はセル数を示す。縦軸は対数目盛であり、横軸は線形目盛である。この例では、OBCとEBCの差が大きい場合に、OBCとEBCが等しくなるように、各リード電圧VA~VGを補正する。
図15(a)に示すように、リード電圧VGについてのOBCがEBCより大きい場合、リード電圧VGを下げるために、第2補正値は-N(dac)とされる。これにより、OBCがEBCと等しくなる。
図15(b)に示すように、リード電圧VGについてのOBCがEBCより小さい場合、リード電圧VGを上げるために、第2補正値は+N(dac)とされる。これにより、リード電圧が変更され、OBCがEBCと等しくなる。すなわち、
図13に示した第2補正値テーブル26の第2補正値C1a,C1b,…C1g、C2a,C2b,…C2g、…の各々が-N又は+Nを示す。
【0151】
Nの値は、リード電圧が極端に変動しないように、余り大きくない固定値(例えば、1(dac))とする。この結果、リード電圧に第2補正値を加算して補正することにより、補正後のリード電圧は、最適値以上のリード電圧と最適値以下のリード電圧を交互にとり、最適値に収束する。また、EBCとOBCの差の絶対値が一定値以下の場合は、差がないと見做して、第2補正値を0としてもよい。
【0152】
上の説明では、Nの値を固定値とし、EBCとOBCの差に依らず、第2補正値は一定とした。しかし、Nの値を固定値とせずに、EBCとOBCの差に応じた関数によりNの値を可変にしてもよい。例えば、OBCがEBCより大きい場合、リード電圧を下げる方向の第2補正値は関数値f1(x))とされ、OBCがEBCより小さい場合、リード電圧を上げる方向の第2補正値は関数値f2(x)とされてもよい。ここで、xはEBCとOBCの差の絶対値である。なお、OBCとEBCの大小関係に関わりなく、第2補正値は単一の関数f3(x)により求めてもよい。この場合のxはEBC-OBCである。すなわち、
図13に示した第2補正値テーブル26の第2補正値C1a,C1b,…C1g、C2a,C2b,…C2g、…の各々が関数値f1(x)、f2(x)又はf3(x)を示す。
【0153】
OBCとEBCの差が大きいと、関数値|f1(x)|、|f2(x)|、又はf3(x)が大きくなり、補正後のリード電圧が最適値に収束せずに、発散してしまうことがある。そのため、関数値f1(x)、f2(x)又はf3(x)に上限を設定し、第2補正値が余り大きくならないようにしてもよい。
【0154】
図16は、第2補正値の求め方の第2の例で使用される第2補正値テーブル26aの一例を示す。第2の例では、第2補正値が、リード電圧VA~VG毎に、EBCとOBCの差の範囲に応じて予め求められ、第2補正値テーブル26aに記憶されている。第2補正値は、NANDメモリ5の物理的な記憶位置、例えばブロック毎またはブロックとは異なる単位(例えば、単数の物理アドレス又は複数の物理アドレス)毎に求められてもよい。
図16は、第2補正値が、物理アドレス毎及びリード電圧VA~VG毎にEBCとOBCの差に応じて記憶される例を示す。
【0155】
EBCとOBCの差の区分は、全ての物理アドレスに対して同じである必要は無く、物理アドレス毎に異なるEBCとOBCの差の区分が設定されていてもよい。例えば、物理アドレスPB1では、8個の区分に対して第2補正値が求められ、物理アドレスPB2では、10個の区分に対して第2補正値が求められている。また、EBCとOBCの差の絶対値が同じでも、EBCとOBCの大小関係によって、第2補正値を異なる値としてもよい。
【0156】
図17と
図18は、第2補正値の求め方の第3の例を示す。
図17の上側のグラフにおいて、横軸はリード電圧を示し、縦軸はEBC(実線)を示す。縦軸と横軸は、ともに線形目盛である。
図17の下側のグラフは、
図4及び
図15に示したメモリセルの閾値電圧分布に対応する。
【0157】
この例でも、EBCがOBCより小さい場合、第2補正値はリード電圧を下げるように-N(dac)とされる。本手法では、各リード電圧毎にデフォルト補正値を記憶するテーブルが別途用意される。各リード電圧の最適電圧値は、dac値で求められる。補正値は、各リード電圧のデフォルトのリード電圧値からのオフセット電圧値である。1補正値が1dacの場合、デフォルト補正値は、この補正値を求める変換に使われる。
【0158】
第1乃至第3の例は、各リード電圧毎に第2補正値を求める。そのため、リード時に各リード電圧毎にOBCを求める。しかし、第4の例は、リード電圧毎に第2補正値を求めるのではなく、第1乃至第3の例のいずれかの手法により少なくとも2つのリード電圧についての第2補正値を求め、求めた第2補正値に基づいて他のリード電圧についての第2補正値を推定する。そのため、リード時にすべてのリード電圧についてのOBCを求める必要は無い。このようにOBCの演算量が削減されるので、OBCを求める処理がリードコマンドに対するレスポンスの遅延に影響を及ぼすことが少ない。
【0159】
例えば、
図18において、リード電圧VAとリード電圧VGにおいて、第2補正値が求められたとする。すなわち、リード電圧VAとリード電圧VGについてのみリード時にOBCが求められ、リード電圧VAとリード電圧VG以外のリード電圧についてのOBCは求められない。
【0160】
図17の上側のグラフにおいて、リード電圧VAについてのEBCとリード電圧VGについてのEBCを結ぶ直線(破線)は、方程式:y=ax+bで表される。yはEBCであり、xは第2補正値が加算されたリード電圧である。リード電圧VA、VGについてのEBC(=y)とリード電圧(=x)をこの直線を示す方程式に代入し、aとbを求める。この後、他のリード電圧についてのEBCをこの方程式に代入することにより、第2補正値の推定値が求められる。
【0161】
なお、少なくとも2つのリード電圧についての第2補正値を求める必要は無く、1つのリード電圧(例えば、リード電圧VG)についての第2補正値を求めるだけでもよい。この場合、
図17の上側のグラフにおいて、リード電圧VGについてのEBCと原点(リード電圧とEBCがゼロの点)を結ぶ直線を示す方程式に他のリード電圧についてのEBCを代入すると、第2補正値の推定値を求めることができる。
【0162】
以上説明したように、第1実施形態によれば、ライト時にEBCが計算され、NANDメモリ5に書き込まれる。リード時に、リードデータからOBCが計算され、計算されたOBCとNANDメモリ5から読み出されたEBCが比較される。両者が一致していない場合、リード電圧が最適なリード電圧とするための補正値が求められる。NANDメモリ5の同じ物理アドレスに対する次回のリードコマンドに対する初回のリード動作のリード電圧は上記補正値に応じて補正される。これにより、初回のリード動作のリード電圧が最適な電圧となる可能性が高くなり、リトライリードの回数が減る可能性が高くなる結果、リードコマンドに対するレスポンスが低下することが未然に防止される。
【0163】
[第2実施形態]
第1実施形態では、
図14に示すように、ライト時に、EBCが第1のL1符号化フレームに含まれて、NANDメモリ5に書き込まれる。次に、EBCが第1のL1符号化フレームに含まれずに、第1のL1符号化フレーム外としてNANDメモリ5に書き込まれる第2実施形態を説明する。第2実施形態のシステム構成は、第1実施形態のシステム構成と同じである。
【0164】
第2実施形態によるライト動作とリード動作の一例を説明する。
図19は、ライト動作の一例を示すフローチャートである。第2実施形態は、リード動作とライト動作が第1実施形態と異なる。
【0165】
コントローラ4は、
図19のS302で、ライトコマンドをホスト2から受信する。コントローラ4は、S304で、ライトコマンドに対応するライトデータをランダマイズする。コントローラ4は、S306で、ランダマイズ済みデータに所定サイズ(フレームと称する)毎に第1のL1符号を付与して、ライトデータを符号化する。なお、S306の符号化処理は、書き込み単位のライトデータが揃っていることが必要である。ここでは、メモリセルがTLCである例を説明するので、3ページ分のライトデータが揃ってから、符号化処理が実行される。
【0166】
コントローラ4は、S308で、ランダマイズ済み且つ第1のL1符号による符号化データからリード電圧VA~VG毎のEBC
A~EBC
Gを計算する。EBCの計算の例は、
図7、
図8を参照して説明した第1実施形態の例と同じである。
【0167】
コントローラ4は、S312で、計算したEBCに第2の誤り訂正符号(第2のL1符号と称する)を付与して、EBCの符号化を行う。第2のL1符号の誤り訂正能力は第1のL1符号の誤り訂正能力より高く設定してもよい。ライトデータとEBCを異なる誤り訂正符号を用いて符号化したが、ライトデータもEBCも同じ誤り訂正符号(例えば、第1のL1符号)を用いて符号化してもよい。
【0168】
コントローラ4は、S316で、ランダマイズ済み且つ第1のL1符号により符号化データと、ランダマイズ済み且つ第2の符号による符号化EBCをNANDメモリ5に書き込む。このようにEBCは、ライトデータとは別にNANDメモリ5に書き込まれる。EBCの書き込み先は、
図9を参照して説明した第1実施形態の書き込み先と同じである。
【0169】
図20、
図21はリード動作の一例を示すフローチャートである。
図20のS402~S414は、
図10に示したS202~S214の処理と同じであるため説明を省略する。
【0170】
コントローラ4は、
図10のS209と同じS409の処理又は
図10のS214と同じS414の処理が完了すると、S416で、NANDメモリ5からデータとEBCを読み出す。読み出す際のリード電圧は、S409又はS414それぞれで補正されたリード電圧である。
【0171】
書き込み単位のデータ、ここでは、メモリセルがTLCである例を説明するので、3ページ分のデータが読み出されると、コントローラ4は、S418で、EBCに対して第2のL1符号による誤り訂正処理を行い、EBCを復号する。第2のL1符号の誤り訂正能力が第1のL1符号の誤り訂正能力より高ければ、EBCの誤り訂正が失敗しづらい。なお、コントローラ4は、S422で、誤り訂正済みEBCのランダマイズを解除する。
【0172】
S416で書き込み単位のデータが読み出されると、コントローラ4は、S424で、データから各リード電圧VA~VGに対応するOBC
A~OBC
Gを計算する。OBCの計算は、第1実施形態の計算と同じである。コントローラ4は、
図21のS426で、データに対して第1のL1符号による誤り訂正処理を行い、データを復元する。コントローラ4は、S428で、誤り訂正が成功したか否かを判定する。
【0173】
誤り訂正が失敗した場合(S428の判定結果がNOの場合)、コントローラ4は、S432で、現在のインデックスを1つ進め、インデックステーブル24の現在のインデックスをインクリメントして、インデックステーブル24を更新する。なお、第1実施形態と同様に、1回のリトライリード動作毎ではなく、数回のリトライリード動作毎にインデックスがインクリメントされてもよい。
【0174】
コントローラ4は、S434で、リトライリードテーブル22から現在のインデックスの第1補正値を読み出す。コントローラ4は、S436で、第1補正値に基づきリード電圧VA~VGを補正する。具体的には、コントローラ4は、リード電圧の現在値に第1補正値を加算して、リード電圧を補正する。
【0175】
この後、コントローラ4は、リトライリードを実行する。すなわち、コントローラ4は、S416で、NANDメモリ5からデータとEBCを読み出す。読み出す際のリード電圧は、S436で補正されたリード電圧である。
【0176】
誤り訂正が成功した場合(S428の判定結果がYESの場合)、コントローラ4は、S438で、誤り訂正済みデータのランダマイズを解除する。
【0177】
コントローラ4は、S422の処理又はS438の処理が完了すると、S442で、EBCとOBCからリード電圧VA~VG毎の第2補正値を求める。第2補正値の求め方は、
図15乃至
図18を参照して説明した第1実施形態の求め方と同じである。
【0178】
コントローラ4は、S444で、第2補正値を第2補正値テーブル26に書き込み、第2補正値テーブル26を更新する。コントローラ4は、S446で、インデックステーブル24の第2補正値を求めた時のインデックスで現在のインデックスを書き換えて、インデックステーブル24を更新する。
【0179】
図22は、
図19に示したリード動作と、
図20及び
図21に示したライト動作の一例の概要を示す。
図19は、第2実施形態に係るライト動作とリード動作を、データの変遷に従って示すものである。
図19において、角が丸いデータはランダマイズされているデータを示す。
図19において各矢印に付された符号は、
図19~
図21の各処理の符号と一致している。第2実施形態では、ライト時に、ランダマイズ済み且つ第1のL1符号による符号化データからEBCが求められる。得られたEBCは第2のL1符号により符号化される。ランダマイズ済み且つ第2のL1符号による符号化データとランダマイズ済み且つ第2のL1符号による符号化EBCがNANDメモリ5に書き込まれる。また、リード時に、符号化データと符号化EBCがリードされ、符号化データからOBCが計算され、符号化EBCからEBCが計算される。
【0180】
第2実施形態によっても、第1実施形態と同様に、リードコマンドに対する初回のリード動作のリード電圧がEBCとOBCとの差に応じて補正されるので、リトライリードの回数が減る可能性が高くなり、リードコマンドに対するレスポンスが低下することが未然に防止される。
【0181】
[第3実施形態]
第1実施形態と第2実施形態では、ともにライト時にEBCが求められ、EBCがNANDメモリ5に書き込まれる。リード時にNANDメモリ5からEBCが読み出され、NANDメモリ5から読み出されたデータから求められたOBCと比較される。比較結果に応じて、第2補正値が求められる。
【0182】
次に、EBCはライト時にNANDメモリ5に書き込まれるが、第2補正値はリード時ではなく、記憶装置のアイドル時に求められる第3実施形態を説明する。第3実施形態のシステム構成は、第1実施形態のシステム構成と同じである。第3実施形態のライト動作は、第1実施形態のライト動作又は第2実施形態のライト動作と同じである。
【0183】
図23は、アイドル時のコントローラ4の処理を示すフローチャートである。コントローラ4は、S502で、アイドル時であることを検出する。例えばホスト2からのライトコマンドやリードコマンドのI/Oコマンドが一定時間以上受信しない場合、アイドル時であることが検出される。アイドル時であることが検出されると、S504で、コントローラ4は、NANDメモリ5からリード電圧VA~VG毎のEBCを読み出す。
【0184】
コントローラ4は、S506で、各リード電圧VA~VGについてのSSR(Single State Read)動作を実行し、各リード電圧VA~VG毎のOBCを求める。単一のリード電圧でSSR動作が行われると、リード電圧におけるビット数が得られるので、このビット数からOBCが求められる。全てのリード電圧におけるEBCを保存する場合と、特定のリード電圧におけるEBCのみを保存する場合がある。後者の場合、あるリード電圧でSSR動作を実行すると、書き込み単位の全ページのデータを読み出さなくても、EBCと同じリード電圧のOBCを得ることができる。
【0185】
コントローラ4は、S508で、EBCとOBCから第2補正値を求める。第2補正値の求め方は、
図15乃至
図18を参照して説明した第1実施形態の求め方と同じである。
【0186】
コントローラ4は、S512で、第2補正値テーブル26を更新する。
【0187】
コントローラ4は、S514で、インデックステーブル24を更新する。
【0188】
図24は、第3実施形態によるリード動作の一例を示すフローチャートである。
図24のS602~S614は、
図10に示したS202~S214の処理、及び
図20に示したS402~S414の処理と同じであるため説明を省略する。
【0189】
コントローラ4は、S609の処理又はS614の処理が完了すると、S616で、或るリード電圧についてSSR動作を実行し、ビット数を取得する。SSR動作では、在るリード電圧でリードした時のビット数が得られる。これらのビット数は、各リード電圧VA~VG毎のOBCA~OBCGと同じである。
【0190】
コントローラ4は、S618で、全てのリード電圧についてSSR動作を実行したか否かを判定する。
【0191】
SSR動作を実行していないリード電圧が残っている場合(S618の判定結果がNOの場合)、コントローラ4は、S606からS618までの処理を繰り返し実行する。
【0192】
全てのリード電圧についてSSR動作を実行した場合(S618の判定結果がYESの場合)、コントローラ4は、S622で、SSR動作により取得されたビット数を演算処理して通常のページリード動作で得られるライトデータを復元する。
【0193】
図25(a)は、
図23に示したアイドル時の動作の一例の概要を示す。NANDメモリ5から、リード電圧VA~VG毎のEBCを記憶するページが読み出される。一方、各リード電圧VA~VGでSSR動作が実行され、各リード電圧VA~VG毎のOBCが求められる。EBCとOBCの比較結果に基づいて第2補正値が求められる。
【0194】
図25(b)は、
図24に示したリード動作の一例の概要を示す。第2補正値が適用されたリード電圧VA~VG毎にSSR動作が実行され、各リード電圧VA~VG毎のOBC
A~OBC
Gと同じビット数が得られる。これらのビット数が演算処理されることによりデータが読み出される。リード電圧VA~VG毎のデータからロワーページ、ミドルページ、アッパーページのデータが作成される。
【0195】
第3実施形態によれば、リード電圧VA~VG毎に補正されているリード電圧を用いてSSRが行われ、SSRによるリードデータから各ページのデータが復元されるので、ページリードの場合よりも、リード電圧VA~VGを細かく補正することができる。
【0196】
[第4実施形態]
上述の実施形態では、EBCはNANDメモリ5に書き込まれている。次に、EBCがNANDメモリ5に書き込まれない第4実施形態を説明する。第4実施形態のシステム構成は、第1実施形態のシステム構成と同じである。
【0197】
図26は、ライト動作の一例を示す。コントローラ4は、S702で、ライトコマンドをホスト2から受信する。コントローラ4は、S704で、ライトコマンドに対応するライトデータをランダマイズする。なお、S704のランダマイズ処理は、書き込み単位のライトデータが揃っていることが必要である。ここでは、メモリセルがTLCである例を説明するので、3ページ分のライトデータが揃ってから、ランダマイズ処理が実行される。
【0198】
コントローラ4は、S706で、ランダマイズ済みデータに所定サイズ(フレームと称する)毎に誤り訂正符号(例えば、第1のL1符号)を付与して、符号化を行う。
【0199】
コントローラ4は、S708で、誤り訂正符号が付与されたランダマイズ済みデータをNANDメモリ5に書き込む。
【0200】
図27と
図28はリード動作の一例を示すフローチャートである。
図27のS802~S814は、
図10に示したS202~S214の処理、
図20に示したS402~S414の処理、及び
図24に示したS602~S614と同じであるため説明を省略する。
【0201】
コントローラ4は、S809の処理又はS814の処理が完了すると、S816で、NANDメモリ5からデータを読み出す。読み出す際のリード電圧は、S809又はS814で補正されたリード電圧である。
【0202】
書き込み単位のデータ、例えばメモリセルがTLCである場合は3ページ分のライトデータが読み出されると、コントローラ4は、S818で、読み出したデータからOBCを計算する。OBCの計算は、第1実施形態の計算と同じである。この段階では、リードしたデータの誤り訂正が未実行であるので、このデータから求めたビット数はOBCである。
【0203】
コントローラ4は、S822で、S816で読み出されたデータに対して誤り訂正処理を行い、ライトデータを復元する。
【0204】
コントローラ4は、S824で、誤り訂正が成功したか否かを判定する。
【0205】
誤り訂正が失敗した場合(S824の判定結果がNOの場合)、コントローラ4は、S826で、訂正不能エラー処理を行い、リード動作を終了する。
【0206】
誤り訂正が成功した場合(S824の判定結果がYESの場合)、コントローラ4は、
図28のS828で、誤り訂正済みデータ、すなわち復元されたライトデータからEBCを計算する。EBCの計算は、第1実施形態のライト動作における計算と同じである。この段階では、リードしたデータの誤り訂正が成功しているので、このデータから求めたビット数はEBCである。
【0207】
コントローラ4は、S832で、EBCとOBCからリード電圧VA~VG毎の第2補正値を求める。コントローラ4は、S834で、第2補正値を第2補正値テーブル26に書き込み、第2補正値テーブル26を更新する。コントローラ4は、S836で、インデックステーブル24の第2補正値を求めた時のインデックスで現在のインデックスを書き換えて、インデックステーブル24を更新する。
【0208】
第4実施形態によれば、リード時に誤り訂正が成功したデータからEBCを計算するので、ライト時にEBCをNANDメモリ5に書き込むことが省略できる。このため、NANDメモリ5に記憶できるユーザデータ量がEBCにより減少することがない。
【0209】
なお、本発明は上記の各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
【符号の説明】
【0210】
3…SSD、4…コントローラ、5…NANDメモリ、6…DRAM、22…リトライリードテーブル、24…インデックステーブル、26…第2補正値テーブル