(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024124152
(43)【公開日】2024-09-12
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G06F 12/00 20060101AFI20240905BHJP
G06F 12/16 20060101ALI20240905BHJP
G06F 11/10 20060101ALI20240905BHJP
【FI】
G06F12/00 597U
G06F12/16
G06F11/10 672
【審査請求】未請求
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2023032128
(22)【出願日】2023-03-02
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110003708
【氏名又は名称】弁理士法人鈴榮特許綜合事務所
(72)【発明者】
【氏名】西川 卓
(72)【発明者】
【氏名】天木 健彦
(72)【発明者】
【氏名】井川原 俊一
(72)【発明者】
【氏名】檜田 敏克
(72)【発明者】
【氏名】小島 慶久
【テーマコード(参考)】
5B018
5B160
【Fターム(参考)】
5B018GA04
5B018HA14
5B018MA22
5B018NA06
5B160AA20
5B160NA01
(57)【要約】
【課題】データの信頼性を向上する。
【解決手段】実施形態によれば、メモリシステム3は、不揮発性メモリ10と、メモリコントローラ20と、を備える。不揮発性メモリは、第1ビット及び第2ビットを含む複数ビットのデータを不揮発に記憶するように構成された第1メモリセルMCと、少なくとも1ビットのデータを不揮発に記憶するように構成された第2メモリセルMCと、を含む。メモリコントローラは、ホストからコマンドを受信したことに応じ退避動作を実行し、退避動作において、第1メモリセルが第1ビットとして第1ビットデータを記憶し、且つ、第1メモリセルが第2ビットとしてデータを記憶していないことに応じ、第1ビットデータを第2メモリセルに書き込んだ後に、コマンドに対する完了応答をホストに送信する。
【選択図】
図15
【特許請求の範囲】
【請求項1】
第1ビット及び第2ビットを含む複数ビットのデータを不揮発に記憶するように構成された第1メモリセルと、少なくとも1ビットのデータを不揮発に記憶するように構成された第2メモリセルと、を含む不揮発性メモリと、
ホストからコマンドを受信したことに応じ退避動作を実行し、
前記退避動作において、前記第1メモリセルが前記第1ビットとして第1ビットデータを記憶し、且つ、前記第1メモリセルが前記第2ビットとしてデータを記憶していないことに応じ、前記第1ビットデータを前記第2メモリセルに書き込んだ後に、前記コマンドに対する完了応答を前記ホストに送信する、ように構成されたメモリコントローラと、
を備えるメモリシステム。
【請求項2】
前記メモリコントローラは、前記第1メモリセルから前記第1ビットデータを読み出し、前記第1メモリセルから読み出した前記第1ビットデータを前記第2メモリセルに書き込む、ように構成されている、
請求項1に記載のメモリシステム。
【請求項3】
第1バッファを更に備え、
前記不揮発性メモリは、少なくとも1ビットのデータを不揮発に記憶するように構成された第3メモリセルを更に含み、
前記メモリコントローラは、前記退避動作において、前記第1メモリセルに前記第2ビットとして書き込まれるべき第1書き込みデータが前記第1バッファに記憶されていることに応じ、
前記第1バッファから前記第1書き込みデータを読み出し、
前記第1バッファから読み出した前記第1書き込みデータを前記第3メモリセルに書き込む、ように更に構成されている、
請求項1に記載のメモリシステム。
【請求項4】
第2バッファを更に備え、
前記不揮発性メモリは、少なくとも1ビットのデータを不揮発に記憶するように構成された第4メモリセルを更に含み、
前記メモリコントローラは、
前記第1ビットデータに少なくとも対応する第1誤り訂正符号を生成し、
前記第1誤り符号を前記第2バッファに書き込み、
前記退避動作において、
前記第1ビットデータ及び前記第1書き込みデータの少なくとも1つに基づく第2誤り訂正符号を生成し、
前記第2バッファに記憶されている前記第1誤り訂正符号を前記不揮発性メモリへ書き込まずに、前記第4メモリセルに前記第2誤り訂正符号を書き込む、ように更に構成されている、
請求項3に記載のメモリシステム。
【請求項5】
前記メモリコントローラは、
第1テーブルを用いて前記不揮発性メモリを管理し、
前記退避動作において、前記第1テーブルに前記第1ビットデータの情報が登録されていることに応じ、前記第2メモリセルへの前記第1ビットデータの書き込みを省略する、ように更に構成されている、
請求項1に記載のメモリシステム。
【請求項6】
前記メモリコントローラは、
前記第1バッファから前記第3メモリセルに書き込まれたデータを第2テーブルを用いて管理し、前記第1メモリセルから前記第2メモリセルに書き込まれたデータを第3テーブルを用いて管理し、
前記退避動作において、
前記第2テーブルに前記第1書き込みデータの情報が登録されていないことに応じ、前記第3メモリセルに前記第1書き込みデータを書き込み、
前記第3テーブルに前記第1ビットデータの情報が登録されていないことに応じ、前記第2メモリセルに前記第1ビットデータを書き込む、ように更に構成されている、
請求項3に記載のメモリシステム。
【請求項7】
前記メモリコントローラは、前記第3メモリセルに前記第1書き込みデータを書き込んだ後、前記第2テーブルに前記第1書き込みデータの情報を登録する、ように更に構成されている、
請求項6に記載のメモリシステム。
【請求項8】
前記メモリコントローラは、前記第2メモリセルに前記第1ビットデータを書き込んだ後、前記第3テーブルに前記第1ビットデータの情報を登録する、ように更に構成されている、
請求項6に記載のメモリシステム。
【請求項9】
第2バッファを更に備え、
前記不揮発性メモリは、第3ビット及び第4ビットを含む複数ビットのデータを不揮発に記憶するように構成された第5メモリセルを更に含み、
前記メモリコントローラは、前記第1ビットデータと、前記第5メモリセルに前記第3ビットとして記憶されている第2ビットデータと、に少なくとも対応する第3誤り訂正符号を生成し、
前記第3誤り符号を前記第2バッファに書き込む、ように更に構成されている、
請求項1に記載のメモリシステム。
【請求項10】
第1バッファを更に備え、
前記メモリコントローラは、前記退避動作において、
前記第5メモリセルに前記第4ビットとして書き込まれるべき第2書き込みデータが前記第1バッファに記憶されていることに応じ、前記第1ビットデータ、前記第2ビットデータ、及び前記第2書き込みデータの少なくとも1つに基づく第4誤り訂正符号を生成する、ように更に構成されている、
請求項9に記載のメモリシステム。
【請求項11】
前記不揮発性メモリは、少なくとも1ビットのデータを不揮発に記憶するように構成された第6メモリセルを更に含み、
前記メモリコントローラは、前記退避動作において、前記不揮発性メモリに前記第3誤り訂正符号が記憶されていることに応じ、前記第2バッファに記憶されている前記第3誤り訂正符号を前記不揮発性メモリへ書き込まずに、前記第4誤り訂正符号を前記第6メモリセルに書き込む、ように更に構成されている、
請求項10に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【0002】
メモリシステムとして、NAND型フラッシュメモリのような不揮発性半導体メモリを搭載したSSD(Solid State Drive)が知られている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許第9342410号明細書
【特許文献2】米国特許第9696918号明細書
【特許文献3】米国特許第9946496号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明の一実施形態は、データの信頼性を向上できるメモリシステムを提供する。
【課題を解決するための手段】
【0005】
実施形態に係るメモリシステムは、不揮発性メモリと、メモリコントローラと、を備える。不揮発性メモリは、第1ビット及び第2ビットを含む複数ビットのデータを不揮発に記憶するように構成された第1メモリセルと、少なくとも1ビットのデータを不揮発に記憶するように構成された第2メモリセルと、を含む。メモリコントローラは、ホストからコマンドを受信したことに応じ退避動作を実行し、退避動作において、第1メモリセルが第1ビットとして第1ビットデータを記憶し、且つ、第1メモリセルが第2ビットとしてデータを記憶していないことに応じ、第1ビットデータを第2メモリセルに書き込んだ後に、コマンドに対する完了応答をホストに送信する。
【図面の簡単な説明】
【0006】
【
図1】
図1は、第1実施形態に係るメモリシステムを含む情報処理システムの全体構成の一例を示すブロック図である。
【
図2】
図2は、第1実施形態に係るメモリシステムに含まれるメモリチップの基本的な構成を示すブロック図である。
【
図3】
図3は、第1実施形態に係るメモリシステムに含まれるメモリセルアレイの回路構成の一例を示す回路図である。
【
図4】
図4は、第1実施形態に係るメモリシステムに含まれるメモリセルトランジスタがSLCである場合の閾値電圧分布とデータの割り当てとを示す図である。
【
図5】
図5は、第1実施形態に係るメモリシステムに含まれるメモリセルトランジスタがQLCである場合の閾値電圧分布とデータの割り当てとを示す図である。
【
図6】
図6は、第1実施形態に係るメモリシステムに含まれるメモリセルアレイのメモリ領域の構成の一例を示すテーブルである。
【
図7】
図7は、第1実施形態に係るメモリシステムに含まれるライトバッファの構成の一例を示す図である。
【
図8】
図8は、第1実施形態に係るメモリシステムに含まれるパリティバッファの構成の一例を示す図である。
【
図9】
図9は、第1実施形態に係るメモリシステムに含まれる退避フラグテーブルの構成の一例を示す図である。
【
図10】
図10は、第1実施形態に係るメモリシステムにおける書き込み動作の一例を示すシーケンス図である。
【
図11】
図11は、第1実施形態に係るメモリシステムにおいて、第1書き込み動作によるメモリセルトランジスタの閾値電圧分布の変化を示す図である。
【
図12】
図12は、第1実施形態に係るメモリシステムにおいて、第2書き込み動作によるメモリセルトランジスタの閾値電圧分布の変化を示す図である。
【
図13】
図13は、第1実施形態に係るメモリシステムにおいて、第1書き込み動作及び第2書き込み動作が実行される順序の一例を示す図である。
【
図14】
図14は、第1実施形態に係るメモリシステムにおいて、第1書き込み動作及び第2書き込み動作が実行される順序の別な一例を示す図である。
【
図15】
図15は、第1実施形態に係るメモリシステムにおける退避動作の流れの一例を示すフローチャートである。
【
図16】
図16は、第1実施形態に係るメモリシステムにおける書き込みデータの退避処理の一例を示すフローチャートである。
【
図17】
図17は、第1実施形態に係るメモリシステムにおける書き込みデータの退避処理の一例を示すフローチャートである。
【
図18】
図18は、第1実施形態に係るメモリシステムにおけるパリティデータの退避処理の一例を示すフローチャートである。
【
図19】
図19は、第1実施形態に係るメモリシステムにおける退避動作の第1具体例を示す図である。
【
図20】
図20は、第1実施形態に係るメモリシステムにおける退避動作の第2具体例を示す図である。
【
図21】
図21は、第1実施形態に係るメモリシステムにおける退避動作の第3具体例を示す図である。
【
図22】
図22は、第1実施形態に係るメモリシステムにおける退避フラグテーブルのエントリ削除を示す図である。
【
図23】
図23は、第2実施形態に係るメモリシステムに含まれる退避フラグテーブルの構成の一例を示す図である。
【
図24】
図24は、第2実施形態に係るメモリシステムにおける書き込みデータの退避処理の一例を示すフローチャートである。
【
図25】
図25は、第2実施形態に係るメモリシステムにおける書き込みデータの退避処理の一例を示すフローチャートである。
【
図26】
図26は、第2実施形態に係るメモリシステムにおける退避動作の第1具体例を示す図である。
【
図27】
図27は、第2実施形態に係るメモリシステムにおける退避動作の第2具体例を示す図である。
【
図28】
図28は、第2実施形態に係るメモリシステムにおける退避動作の第3具体例を示す図である。
【
図29】
図29は、第2実施形態に係るメモリシステムに含まれるライトバッファ用退避フラグテーブルのエントリ削除を示す図である。
【
図30】
図30は、第2実施形態に係るメモリシステムに含まれるユーザデータ領域用退避フラグテーブルのエントリ削除を示す図である。
【
図31】
図31は、第3実施形態に係るメモリシステムにおけるパリティデータの退避処理の一例を示すフローチャートである。
【
図32】
図32は、第3実施形態に係るメモリシステムにおける退避動作の第1具体例を示す図である。
【
図33】
図33は、第3実施形態に係るメモリシステムにおける退避動作の第2具体例を示す図である。
【
図34】
図34は、第4実施形態に係るメモリシステムにおける退避動作の第1具体例を示す図である。
【
図35】
図35は、第4実施形態に係るメモリシステムにおける退避動作の第2具体例を示す図である。
【発明を実施するための形態】
【0007】
以下に、実施形態について図面を参照して説明する。図面は模式的なものである。なお、以下の説明において、略同一の機能及び構成を有する構成要素については、同一符号を付す。参照符号を構成する文字の後の数字は、同様の構成を有する要素同士を区別するために用いられる。
【0008】
以下に、実施形態に係るメモリシステムについて説明する。
【0009】
1 構成
1.1 情報処理装置の構成
1.1.1 データ処理装置の構成
まず、
図1を参照して、情報処理システム1の構成の一例について説明する。
図1は、情報処理システム1の全体構成の一例を示すブロック図である。
【0010】
図1に示すように、情報処理システム1は、ホスト2及びメモリシステム3を含む。
【0011】
ホスト2は、メモリシステム3にアクセスする情報処理装置(コンピューティングデバイス)である。ホスト2は、メモリシステム3を制御する。より具体的には、例えば、ホスト2は、メモリシステム3にデータ(以下、「ユーザデータ」と表記する)の書き込み動作または読み出し動作を要求(命令)する。例えば、書き込み要求は、ライトコマンド、論理アドレス、及びユーザデータを含む。また、ホスト2は、メモリシステム3にフラッシュコマンドを送信する。フラッシュコマンドは、メモリシステム3に、不揮発性化が完了していない、すなわち、メモリシステム3の不揮発性メモリ10への書き込みが終了していない、データの不揮発化(書き込み)を指示するコマンドである。例えば、ホスト2は、書き込み動作の途中(すなわち、書き込み要求に対する完了応答をメモリシステム3から受信していない状態)でメモリシステム3への電力の供給が停止することが予期される場合、フラッシュコマンドを発行する。メモリシステム3では、フラッシュコマンドに基づいてデータが不揮発化され、電力停止によるデータの喪失が抑制される。
【0012】
メモリシステム3は、例えば、SSD(Solid State Drive)である。メモリシステム3は、不揮発性メモリ10及びメモリコントローラ20を含む。メモリシステム3は、ホストバスを介してホスト2に接続される。ホストバスのタイプは、メモリシステム3に適用されるアプリケーションに依存する。メモリシステム3がSSDである場合、ホストバスは、例えば、PCIeTM(Peripheral Component Interconnect Express)規格に準拠する。
【0013】
1.1.2 メモリシステムの構成
次に、メモリシステム3の構成の一例について説明する。
【0014】
不揮発性メモリ10は、不揮発性の記憶媒体である。不揮発性メモリ10は、メモリコントローラ20から受信したデータを不揮発に記憶する。以下では、不揮発性メモリ10がNAND型フラッシュメモリである場合について説明する。なお、不揮発性メモリ10は、NAND型フラッシュメモリ以外の不揮発性の記憶媒体であってもよい。
【0015】
メモリコントローラ20は、例えば、SoC(System On a Chip)である。メモリコントローラ20は、ホスト2からの要求(命令)に応答して、不揮発性メモリ10に対して読み出し動作及び書き込み動作等を命令する。メモリコントローラ20は、ホスト2からフラッシュコマンドを受信すると、データの退避動作を実行する。メモリコントローラ20は、データの退避動作が完了すると、ホスト2に、フラッシュコマンドに対する完了応答を送信する。また、メモリコントローラ20は、不揮発性メモリ10のメモリ空間を管理する。
【0016】
次に、不揮発性メモリ10の内部構成の一例について説明する。不揮発性メモリ10は、1つ以上のメモリチップ11を含む。
【0017】
メモリチップ11は、例えば、NAND型フラッシュメモリが搭載された半導体チップである。メモリチップ11は、データを不揮発に記憶する複数のメモリセルトランジスタ(以下、「メモリセル」とも表記する)を含む。メモリチップ11は、NANDバスを介して、メモリコントローラ20と接続される。メモリチップ11は、メモリ領域内に、ユーザデータ領域UR及び退避領域SRを含む。
【0018】
ユーザデータ領域URは、ユーザデータを含む書き込みデータが記憶される領域である。
【0019】
退避領域SRは、フラッシュコマンドに基づいて、データ(以下、「退避データ」と表記する)が記憶される領域である。例えば、退避データは、バッファメモリ25のライトバッファ251及びパリティバッファ252に記憶されているデータ、及びメモリチップ11のユーザデータ領域URにおいて書き込み動作が完了していないメモリセルトランジスタのデータを含む。ライトバッファ251は、第1バッファの一例である。パリティバッファ252は、第2バッファの一例である。本実施形態のユーザデータ領域URのメモリセルトランジスタは、複数ビットのデータを記憶し得る。本実施形態では、ユーザデータ領域URのメモリセルトランジスタに、複数ビットのデータが、複数回の書き込み動作により書き込まれる。すなわち、書き込み動作が完了していないメモリセルトランジスタとは、1回以上の書き込み動作は完了したものの、記憶されるべき複数ビットのデータに対応する複数回の書き込み動作が完了しておらず、複数ビットの一部のデータのみが記憶されているメモリセルトランジスタである。換言すれば、書き込み動作が完了していないメモリセルトランジスタとは、複数回の書き込み動作の中間段階にあるメモリセルトランジスタである。書き込み動作の詳細については後述する。
【0020】
次に、メモリコントローラ20の内部構成の一例について説明する。メモリコントローラ20は、ホストインターフェイス回路(ホストI/F)21、CPU22、ROM(Read Only Memory)23、RAM(Random Access Memory)24、バッファメモリ25、ECC(Error Checking and Correcting)回路26、及び1つ以上のNANDコントローラ27を含む。これらの回路は、例えば内部バスにより、互いに接続されている。なお、ホストインターフェイス回路21、ECC回路26、及びNANDコントローラ27の各機能は、専用回路により実現されてもよいし、CPU22がファームウェアを実行することにより実現されてもよい。
【0021】
ホストインターフェイス回路21は、ホスト2に接続されるインターフェイス回路である。ホストインターフェイス回路21は、ホスト2とメモリコントローラ20との間の通信を行う。ホストインターフェイス回路21は、CPU22及びバッファメモリ25に、ホスト2から受信した要求及びユーザデータをそれぞれ送信する。また、ホストインターフェイス回路21は、CPU22の命令に応答して、ホスト2に、バッファメモリ25内のユーザデータを送信する。
【0022】
CPU22は、プロセッサである。CPU22は、メモリコントローラ20全体の動作を制御する。例えば、CPU22は、ホスト2の要求に基づいて、不揮発性メモリ10に書き込み動作及び読み出し動作を命令する。
【0023】
また、CPU22は、フラッシュコマンドに基づくデータの退避動作を実行する。退避動作とは、退避領域SRに、書き込み動作が完了していないデータを退避させる(書き込む)動作である。
【0024】
ROM23は、不揮発性メモリである。例えば、ROM23は、EEPROMTM(Electrically Erasable Programmable Read-Only Memory)である。ROM23は、ファームウェア及びプログラム等を記憶する非一時的記憶媒体である。例えば、CPU22は、ファームウェアをROM23からRAM24にロードし、実行する。
【0025】
RAM24は、揮発性メモリである。RAM24は、DRAMまたはSRAM等である。RAM24は、不揮発性メモリ10を管理するためのファームウェアや、各種の管理テーブルを記憶する。例えば、RAM24は、管理テーブルとして、退避フラグテーブル241を記憶する。退避フラグテーブル241は、第1テーブルの一例である。退避フラグテーブル241は、退避領域SRに退避された書き込みデータの管理に用いられる。退避フラグテーブル241の詳細については後述する。
【0026】
バッファメモリ25は、揮発性メモリである。バッファメモリ25は、DRAMまたはSRAM等である。バッファメモリ25は、メモリコントローラ20が不揮発性メモリ10から読み出したデータや、ホスト2から受信したユーザデータ等を一時的に保持する。例えば、バッファメモリ25は、ライトバッファ251及びパリティバッファ252を含む。
【0027】
ライトバッファ251は、書き込みデータを一時的に記憶する。書き込みデータは、ユーザデータ及びユーザデータの誤り訂正符号を含む。誤り訂正符号は、メモリチップ11から読み出したデータの誤り訂正に用いられる。
【0028】
パリティバッファ252は、ブロック消失故障などのバーストエラーを訂正可能な誤り訂正符号(以下、「パリティデータ」とも表記する)を一時的に記憶する。ブロック消失故障とは、例えば、メモリチップ11の1つのブロックBLK(後述する)の全体がアクセスできなくなるような故障である。パリティデータは、例えば、メモリチップ11からデータが読み出せなかった場合に、他のデータとパリティデータとに基づいて、読み出せなかったデータを復号する場合に用いられる。
【0029】
ECC回路26は、ECC処理を実行する回路である。ECC処理は、データの符号化処理及び復号処理を含む。例えば、ECC回路26は、書き込み動作時には、ユーザデータの符号化処理を実行して、誤り訂正符号を生成する。ECC回路26は、ユーザデータに誤り訂正符号を付与して書き込みデータを生成する。そして、ECC回路26は、読み出し動作時には、復号処理を実行する。すなわち、ECC回路26は、誤り訂正符号を用いて、メモリチップ11から読み出したデータの誤り訂正を実行する。
【0030】
また、ECC回路26は、バーストエラーの訂正処理を実行する。例えば、ECC回路26は、対象データを読み出せなかった場合、他のデータとパリティデータとに基づいて、バーストエラーの訂正処理を実行し、読み出せなかったデータを復号する。ECC回路26は、1つ以上の書き込みデータに基づいてパリティデータを生成する。
【0031】
NANDコントローラ27は、メモリチップ11を制御する。例えば、1つのNANDコントローラ27が、複数のメモリチップ11を制御し得る。NANDコントローラ27は、メモリチップ11に、書き込み動作、読み出し動作、または消去動作等に対応したコマンドを送信する。NANDコントローラ27は、読み出し動作時には、メモリチップ11から読み出しデータを受信する。
【0032】
1.1.3 メモリチップの構成
次に、
図2を参照して、メモリチップ11の構成の一例について説明する。
図2は、メモリチップ11の基本的な構成の一例を示すブロック図である。なお、
図2に示す例では、各構成要素間の接続の一部を矢印線により示している。但し、各構成要素間の接続は、
図2に示す例に限定されない。
【0033】
図2に示すように、メモリチップ11は、NANDバスを介して、メモリコントローラ20(より詳しくはNANDコントローラ27)と、信号DQ並びにタイミング信号DQS及びDQSnの送受信を行う。信号DQは、例えばデータDAT、アドレスADD、またはコマンドCMDである。タイミング信号DQS及びDQSnは、データDATの入出力の際に用いられるタイミング信号である。タイミング信号DQSnは、タイミング信号DQSの反転信号である。
【0034】
また、メモリチップ11は、NANDバスを介して、メモリコントローラ20から、各種制御信号を受信する。また、メモリチップ11は、NANDバスを介して、メモリコントローラ20にレディ/ビジー信号RBnを送信する。レディ/ビジー信号RBnは、メモリチップ11がメモリコントローラ20からコマンドCMDを受信不可能な状態(ビジー状態)か可能な状態(レディ状態)かを示す信号である。ビジー状態は、メモリチップ11がメモリコントローラ20からコマンドCMDを受信不可能な状態である。レディ状態は、メモリチップ11がメモリコントローラ20からコマンドCMDを受信可能な状態である。
【0035】
次に、メモリチップ11の内部構成について説明する。メモリチップ11は、入出力回路101、ロジック制御回路102、アドレスレジスタ103、コマンドレジスタ104、シーケンサ105、レディ/ビジー回路106、メモリセルアレイ107、ロウデコーダ108、センスアンプ109、データレジスタ110、及びカラムデコーダ111を含む。
【0036】
入出力回路101は、信号DQの入出力を行う回路である。入出力回路101は、メモリコントローラ20と接続される。また、入出力回路101は、ロジック制御回路102、アドレスレジスタ103、コマンドレジスタ104、及びデータレジスタ110に接続される。
【0037】
入出力回路101は、入力信号DQがアドレスADDである場合、アドレスADDをアドレスレジスタ103に送信する。また、入出力回路101は、入力信号DQがコマンドCMDである場合、コマンドCMDをコマンドレジスタ104に送信する。
【0038】
入力信号DQがデータDATである場合、入出力回路101は、タイミング信号DQS及びDQSnに基づいて、入力信号DQを受信する。そして、入出力回路101は、データDATを、データレジスタ110に送信する。また、入出力回路101は、データDATを、タイミング信号DQS及びDQSnとともに、メモリコントローラ20に出力する。
【0039】
ロジック制御回路102は、制御信号に基づいて、ロジック制御を行う回路である。ロジック制御回路102は、メモリコントローラ20と接続される。また、ロジック制御回路102は、入出力回路101及びシーケンサ105に接続される。ロジック制御回路102は、メモリコントローラ20から各種制御信号を受信する。ロジック制御回路102は、受信した制御信号に基づいて、入出力回路101及びシーケンサ105を制御する。
【0040】
アドレスレジスタ103は、アドレスADDを一時的に記憶するレジスタである。アドレスレジスタ103は、入出力回路101、ロウデコーダ108、及びカラムデコーダ111に接続される。アドレスADDは、ロウアドレスRAとカラムアドレスCAとを含む。アドレスレジスタ103は、ロウアドレスRAをロウデコーダ108に転送する。また、アドレスレジスタ103は、カラムアドレスCAをカラムデコーダ111に転送する。
【0041】
コマンドレジスタ104は、コマンドCMDを一時的に記憶するレジスタである。コマンドレジスタ104は、入出力回路101及びシーケンサ105に接続される。コマンドレジスタ104は、コマンドCMDをシーケンサ105に転送する。
【0042】
シーケンサ105は、メモリチップ11の制御を行う回路である。シーケンサ105は、メモリチップ11全体の動作を制御する。より具体的には、例えば、シーケンサ105は、レディ/ビジー回路106、ロウデコーダ108、センスアンプ109、データレジスタ110、及びカラムデコーダ111を制御する。シーケンサ105は、コマンドCMDに基づいて、書き込み動作、読み出し動作、及び消去動作等を実行する。
【0043】
レディ/ビジー回路106は、レディ/ビジー信号RBnを送信する回路である。レディ/ビジー回路106は、シーケンサ105の動作状況に応じて、レディ/ビジー信号RBnをコントローラに送信する。
【0044】
メモリセルアレイ107は、マトリクス状に配列された複数のメモリセルトランジスタの集合である。メモリセルアレイ107は、複数のブロックBLK0~BLKn(nは1以上の整数)を含む。ブロックBLKは、例えばデータが一括して消去される複数のメモリセルトランジスタの集合である。すなわち、ブロックBLKは、データの消去単位である。例えば、いくつかのブロックBLKが、ユーザデータ領域URに含まれ、他のブロックBLKが退避領域SRに含まれる。ユーザデータ領域URに含まれるブロックBLKの個数と、退避領域SRに含まれるブロックBLKの個数は、任意である。ユーザデータ領域URに割り当てられるブロックBLKと、退避領域SRに割り当てられるブロックBLKは、任意に変更し得る。ブロックBLKの構成の詳細については後述する。
【0045】
ロウデコーダ108は、ロウアドレスRAのデコード回路である。ロウデコーダ108は、デコード結果に基づいて、メモリセルアレイ107内のいずれかのブロックBLKを選択する。ロウデコーダ108は、選択したブロックBLKのロウ方向の配線(後述するワード線及び選択ゲート線)に電圧を印加する。
【0046】
センスアンプ109は、データDATの書き込み及び読み出しを行う回路である。センスアンプ109は、メモリセルアレイ107及びデータレジスタ110に接続される。センスアンプ109は、読み出し動作時には、メモリセルアレイ107からデータDATを読み出す。また、センスアンプ109は、書き込み動作時には、データDATに応じた電圧をメモリセルアレイ107に供給する。センスアンプ109は、データを一時的に記憶するための複数のラッチ回路を含む。
【0047】
データレジスタ110は、データDATを一時的に記憶するレジスタである。データレジスタ110は、センスアンプ109及びカラムデコーダ111に接続される。データレジスタ110は、複数のラッチ回路を含む。各ラッチ回路は、入出力回路101から受信したデータ(書き込みデータまたはパリティデータ)またはセンスアンプ109から受信したデータ(読み出しデータ)を一時的に記憶する。
【0048】
カラムデコーダ111は、カラムアドレスCAのデコードを行う回路である。カラムデコーダ111は、アドレスレジスタ103からカラムアドレスCAを受信する。カラムデコーダ111は、カラムアドレスCAのデコード結果に基づいて、データレジスタ110内のラッチ回路を選択する。
【0049】
1.1.4 メモリセルアレイの回路構成
次に、
図3を参照して、メモリセルアレイ107の回路構成の一例について説明する。
図3は、メモリセルアレイ107の回路構成の一例を示す回路図である。
【0050】
ブロックBLKは、例えば5つのストリングユニットSU0~SU4を含む。なお、ブロックBLKに含まれるストリングユニットSUの個数は、任意である。ストリングユニットSUは、例えば、書き込み動作または読み出し動作において一括して選択される複数のNANDストリングNSの集合である。
【0051】
次に、ストリングユニットSUの内部構成について説明する。ストリングユニットSUは、複数のNANDストリングNSを含む。NANDストリングNSは、直列に接続された複数のメモリセルトランジスタの集合である。ストリングユニットSU内の複数のNANDストリングNSのそれぞれは、ビット線BL0~BLm(mは1以上の整数)のいずれかに接続される。
【0052】
次に、NANDストリングNSの内部構成について説明する。各NANDストリングNSは、複数のメモリセルトランジスタMC、並びに選択トランジスタST1及びST2を含む。
図3に示す例では、NANDストリングNSは8個のメモリセルトランジスタMC0~MC7を含む。
【0053】
メモリセルトランジスタMCは、データを不揮発に記憶するメモリ素子である。メモリセルトランジスタMCは、制御ゲート及び電荷蓄積層を含む。メモリセルトランジスタMCは、MONOS(Metal-Oxide-Nitride-Oxide-Silicon)型であってもよいし、FG(Floating Gate)型であってもよい。
【0054】
選択トランジスタST1及びST2は、スイッチング素子である。選択トランジスタST1及びST2は、各種動作時におけるストリングユニットSUの選択にそれぞれ使用される。
【0055】
NANDストリングNS内の選択トランジスタST2、メモリセルトランジスタMC0~MC7、及び選択トランジスタST1の電流経路は、直列に接続される。選択トランジスタST1のドレインは、ビット線BLに接続される。選択トランジスタST2のソースは、ソース線SLに接続される。
【0056】
同一ブロックBLKのメモリセルトランジスタMC0~MC7の制御ゲートは、それぞれワード線WL0~WL7に共通に接続される。より具体的には、例えば、ブロックBLKは、5つのストリングユニットSU0~SU4を含む。そして、各ストリングユニットSUは、複数のメモリセルトランジスタMC0をそれぞれ含む。ブロックBLK内の複数のメモリセルトランジスタMC0の制御ゲートは、1つのワード線WL0に共通に接続される。メモリセルトランジスタMC1~MC7も同様である。
【0057】
ストリングユニットSU内の複数の選択トランジスタST1のゲートは、1つの選択ゲート線SGDに共通に接続される。より具体的には、ストリングユニットSU0内の複数の選択トランジスタST1のゲートは、選択ゲート線SGD0に共通に接続される。ストリングユニットSU1内の複数の選択トランジスタST1のゲートは、選択ゲート線SGD1に共通に接続される。ストリングユニットSU2内の複数の選択トランジスタST1のゲートは、選択ゲート線SGD2に共通に接続される。ストリングユニットSU3内の複数の選択トランジスタST1のゲートは、選択ゲート線SGD3に共通に接続される。ストリングユニットSU4内の複数の選択トランジスタST1のゲートは、選択ゲート線SGD4に共通に接続される。
【0058】
ブロックBLK内の複数の選択トランジスタST2のゲートは、選択ゲート線SGSに共通に接続される。
【0059】
ワード線WL0~WL7、選択ゲート線SGD0~SGD4、及び選択ゲート線SGSは、ロウデコーダ108にそれぞれ接続される。
【0060】
ビット線BLは、各ブロックBLKの複数のストリングユニットSUそれぞれの1つのNANDストリングNSに共通に接続される。各ビット線BLは、センスアンプ109に接続される。
【0061】
ソース線SLは、例えば複数のブロックBLK間で共有される。
【0062】
1つのストリングユニットSU内で共通のワード線WLに接続された複数のメモリセルトランジスタMCの集合は、例えば、「セルユニットCU」と表記される。換言すれば、セルユニットCUは、書き込み動作または読み出し動作において一括して選択される複数のメモリセルトランジスタMCの集合である。ページは、セルユニットCUに、一括して書き込まれる(または一括して読み出される)データの単位である。例えば、メモリセルトランジスタMCが1ビットデータを記憶する場合、セルユニットCUの記憶容量は、1ページである。なお、セルユニットCUは、メモリセルトランジスタMCが記憶するデータのビット数に基づいて、2ページ以上の記憶容量を有し得る。
【0063】
以下、本実施形態では、ユーザデータ領域URのメモリセルトランジスタMCが4ビットのデータを記憶するQLC(Quad Level Cell)であり、且つ退避領域SRのメモリセルトランジスタMCが1ビットのデータを記憶するSLC(Single Level Cell)である場合について説明する。なお、ユーザデータ領域URのメモリセルトランジスタMCは、QLCに限定されない。ユーザデータ領域URのメモリセルトランジスタMCは、2ビット以上のデータを記憶可能であれば、本実施形態を適用できる。例えば、メモリセルトランジスタMCは、2ビットのデータを記憶するMLC(Multi Level Cell)であってもよいし、3ビットのデータを記憶するTLC(Triple Level Cell)であってもよいし、5ビットのデータを記憶するPLC(Penta Level Cell)であってもよい。また、退避領域SRのメモリセルトランジスタMCは、SLCに限定されない。退避領域SRのメモリセルトランジスタMCは、2ビット以上のデータを記憶し得る。
【0064】
1.2 メモリセルトランジスタの閾値電圧分布
次に、メモリセルトランジスタの閾値電圧分布について、2つの例を説明する。
【0065】
1.2.1 SLCの閾値電圧分布
まず、
図4を参照して、SLCの閾値電圧分布の一例について説明する。
図4は、メモリセルトランジスタMCがSLCである場合の閾値電圧分布とデータの割り当てとを示す図である。
【0066】
図4に示すように、SLCの閾値電圧は、離散的な2つの閾値電圧分布のいずれかに含まれる値を取る。以下、2つの閾値電圧分布を閾値電圧の低いものから順に、それぞれErステート及びAステートと表記する。
【0067】
Erステートは、例えば、データの消去状態に相当する。そしてAステートは、電荷蓄積層に電荷が注入されてデータが書き込まれた状態に相当する。書き込み動作において、Aステートの閾値電圧分布に対応するベリファイ電圧をVAとする。電圧VAと電圧VREADとは、VA<VREADの関係にある。電圧VREADは、読み出し動作時において非選択ワード線WLに印加される電圧である。メモリセルトランジスタMCは、ゲートに電圧VREADが印加されると、記憶しているデータによらずにオン状態となる。
【0068】
より具体的には、Erステートに含まれるメモリセルトランジスタMCの閾値電圧は、電圧VA未満である。Aステートに含まれるメモリセルトランジスタMCの閾値電圧は、電圧VA以上であり、且つ電圧VREAD未満である。
【0069】
例えば、Erステートに“1”データが割り当てられ、Aステートに“0”データが割り当てられる。これにより、メモリセルトランジスタMCは、1ビット(2値)のデータを保持する。
【0070】
1.2.2 QLCの閾値電圧分布
次に、
図5を参照して、QLCの閾値電圧分布の一例について説明する。
図5は、メモリセルトランジスタMCがQLCである場合の閾値電圧分布とデータの割り当てとを示す図である。
【0071】
図5に示すように、メモリセルトランジスタMCが4ビットのデータを記憶する場合、その閾値電圧の分布は16個に分けられる。この16個の閾値電圧分布を、閾値電圧が低いものから順にS0ステート~S15ステートと表記する。
【0072】
電圧V1~V15は、書き込み動作時におけるS1ステート~S15ステートの各々のベリファイ動作に用いられるベリファイ電圧である。これらの電圧値及び電圧VREADの関係は、V1<V2<V3<V4<V5<V6<V7<V8<V9<V10<V11<V12<V13<V14<V15<VREADである。
【0073】
S0ステートは、メモリセルトランジスタMCの消去状態に相当する。S1ステート~S15ステートは、メモリセルトランジスタMCの電荷蓄積層に電荷が注入されてデータが書き込まれた状態に相当する。S0ステートに含まれるメモリセルトランジスタMCの閾値電圧は、電圧V1未満である。S1ステート~S14ステートに含まれるメモリセルトランジスタMCの閾値電圧は、それぞれ電圧V1以上且つ電圧V2未満~電圧V14以上且つ電圧V15未満である。S15ステートに含まれるメモリセルトランジスタMCの閾値電圧は、電圧V15以上且つ電圧VREAD未満である。
【0074】
各ステートに対応するベリファイ電圧の設定値と読み出し電圧の設定値とは、同じであってもよく、異なっていてもよい。以下では、説明を簡略化するため、ベリファイ電圧と読み出し電圧とが同じ設定値である場合について説明する。
【0075】
以下、電圧V1~V15を用いた読み出し動作のことをそれぞれ、読み出し動作R1~R15と表記する。読み出し動作R1は、メモリセルトランジスタMCの閾値電圧が電圧V1未満か否かを判定する。読み出し動作R2は、メモリセルトランジスタMCの閾値電圧が電圧V2未満か否かを判定する。読み出し動作R3は、メモリセルトランジスタMCの閾値電圧が電圧V3未満か否かを判定する。以下、同様である。
【0076】
以上のように、各メモリセルトランジスタMCの閾値電圧は、16個の閾値電圧分布のいずれかに属する。これにより、各メモリセルトランジスタMCは、16種類の状態を取ることができる。これらの状態を、2進数表記で“0000”~“1111”に割り当てることで、各メモリセルトランジスタMCは4ビットのデータを記憶できる。以下、4ビットのデータを、下位ビットから順にLowerビット、Middleビット、Upperビット、及びTopビットと表記する。また、同一のセルユニットCUに含まれるメモリセルトランジスタMCが記憶するLowerビットの集合をLowerページデータと表記し、Middleビットの集合をMiddleページデータと表記し、Upperビットの集合をUpperページデータと表記し、Topビットの集合をTopページデータと表記する。
【0077】
図5の例では、各ステートに含まれるメモリセルトランジスタMCに対して、以下に示すように“Lowerビット/Middleビット/Upperビット/Topビット”のデータが割り当てられる。
S0ステート:“1111”データ
S1ステート:“1110”データ
S2ステート:“1100”データ
S3ステート:“1101”データ
S4ステート:“1001”データ
S5ステート:“1011”データ
S6ステート:“0011”データ
S7ステート:“0010”データ
S8ステート:“1010”データ
S9ステート:“1000”データ
S10ステート:“0000”データ
S11ステート:“0001”データ
S12ステート:“0101”データ
S13ステート:“0111”データ
S14ステート:“0110”データ
S15ステート:“0100”データ
【0078】
なお、各ステートに割り当てられるデータはこれに限定されない。
【0079】
このように割り当てられたデータを読み出す場合、Lowerビットは、読み出し動作R6、R8、及びR10によって確定する。Middleビットは、読み出し動作R4及びR12によって確定する。Upperビットは、読み出し動作R2、R5、R9、R13、及びR15によって確定する。Topビットは、読み出し動作R1、R3、R7、R11、及びR14によって確定する。つまりLowerビット、Middleビット、Upperビット、及びTopビットの値は、それぞれ、3回、2回、5回、及び5回の読み出し動作によって確定する。以下では、このデータの割り当てのことを「3-2-5-5コード」と表記する。なお、S0~S15ステートへのデータの割り当ては、3-2-5-5コードに限定されない。
【0080】
1.3 メモリセルアレイの構成
次に、
図6を参照して、メモリセルアレイ107のメモリ領域の一例について説明する。
図6は、メモリセルアレイ107のメモリ領域の構成の一例を示すテーブルである。
図6の例では、説明を簡略化するため、各ブロックBLKが1つのストリングユニットSUを含む場合を示している。また、
図6の例において、実線の四角枠は、1ページデータを示している。
【0081】
図6に示すように、メモリセルアレイ107は、メモリ領域として、ユーザデータ領域URと退避領域SRとを含む。ユーザデータ領域URは、書き込みデータ及び書き込みデータに対応するパリティデータが記憶される領域である。
【0082】
図6の例は、各ブロックBLKのワード線WL0(すなわちワード線番号WL#“0”で識別されるワード線WL)に対応するセルユニットCUに各ページデータが書き込まれている状態を示している。データD0~D27は、書き込みデータを示す。パリティデータPL0、PM0、PU0、及びPT0は、それぞれワード線WL0に対応するLowerページデータ、Middleページデータ、Upperページデータ、及びTopページデータのパリティデータを示す。
【0083】
より具体的には、ユーザデータ領域URは、例えば、8個のブロックBLKを含む。メモリコントローラ20は、1つ以上のブロックBLK(例えば、8個のブロックBLK)を論理ブロックとして管理する。論理ブロックは、スーパーブロックとも呼ばれる。ユーザデータ領域URは、複数の論理ブロックとして管理される8個以上のブロックBLKを含んでいてもよい。以下、ユーザデータ領域URの8個のブロックBLKに言及する場合、ブロックBLK_H0~BLK_H7と表記する。例えば、ユーザデータ領域URのメモリセルトランジスタMCがQLCである場合、セルユニットCUは、4つのページタイプPTに対応するデータを記憶する。すなわち、ページタイプPTは、セルユニットCUのページデータを示している。
図6に示すページタイプPTの“L”は、Lowerページデータを示している。ページタイプPTの“M”は、Middleページデータを示している。ページタイプPTの“U”は、Upperページデータを示している。ページタイプPTの“T”は、Topページデータを示している。
【0084】
図6の例では、ブロックBLK_H0のWL0に対応するセルユニットCUのLowerページデータ、Middleページデータ、Upperページデータ、及びTopページデータは、それぞれデータD0、D1、D14、及びD15である。ブロックBLK_H1のワード線WL0に対応するセルユニットCUのLowerページデータ、Middleページデータ、Upperページデータ、及びTopページデータは、それぞれデータD2、D3、D16、及びD17である。ブロックBLK_H2のワード線WL0に対応するセルユニットCUのLowerページデータ、Middleページデータ、Upperページデータ、及びTopページデータは、それぞれデータD4、D5、D18、及びD19である。ブロックBLK_H3のワード線WL0に対応するセルユニットCUのLowerページデータ、Middleページデータ、Upperページデータ、及びTopページデータは、それぞれデータD6、D7、D20、及びD21である。ブロックBLK_H4のワード線WL0に対応するセルユニットCUのLowerページデータ、Middleページデータ、Upperページデータ、及びTopページデータは、それぞれデータD8、D9、D22、及びD23である。ブロックBLK_H5のワード線WL0に対応するセルユニットCUのLowerページデータ、Middleページデータ、Upperページデータ、及びTopページデータは、それぞれデータD10、D11、D24、及びD25である。ブロックBLK_H6のワード線WL0に対応するセルユニットCUのLowerページデータ、Middleページデータ、Upperページデータ、及びTopページデータは、それぞれデータD12、D13、D26、及びD27である。ブロックBLK_H7のワード線WL0に対応するセルユニットCUのLowerページデータ、Middleページデータ、Upperページデータ、及びTopページデータは、それぞれパリティデータPL0、PM0、PU0、及びPT0である。
【0085】
パリティデータPL0、PM0、PU0、及びPT0は、例えば1つの論理ブロックとして管理される各ブロックBLKのワード線WL0に対応するセルユニットCUにおける対応するページタイプPTのデータのバーストエラーの訂正処理に用いられる。より具体的には、パリティデータPL0は、データD0、D2、D4、D6、D8、D10、及びD12のバーストエラーの訂正処理に用いられる。パリティデータPL0は、例えば、データD0、D2、D4、D6、D8、D10、及びD12に対して排他的論理和演算(XOR演算)を実行することにより生成される。例えば、ブロックBLK_H0のデータD0が読み出せなくなった場合、CPU22は、データD2、D4、D6、D8、D10、及びD12、並びにパリティデータPL0に対してXOR演算を実行することにより、データD0を復号する。同様に、パリティデータPM0は、データD1、D3、D5、D7、D9、D11、及びD13のバーストエラーの訂正処理に用いられる。パリティデータPU0は、データD14、D16、D18、D20、D22、D24、及びD26のバーストエラーの訂正処理に用いられる。パリティデータPT0は、データD15、D17、D19、D21、D23、D25、及びD27のバーストエラーの訂正処理に用いられる。
【0086】
退避領域SRは、退避データが記憶される領域である。
図6の例では、退避領域SRは、15個のブロックBLKを含む。以下、退避領域SRの15個のブロックBLKに言及する場合、ブロックBLK_S0~BLK_S14と表記する。例えば、退避領域SRのメモリセルトランジスタMCがSLCである場合、セルユニットCUは、1ページデータを記憶する。
図6の例では、ブロックBLK_S0のワード線WL0に対応するセルユニットCUに、データD0が記憶されている。そして、ブロックBLK_S1のワード線WL0に対応するセルユニットCUに、データPs0が記憶されている。例えば、データPs0は、データD0のパリティデータを示す。パリティデータPs0は、例えば、データD0とページサイズのダミーデータに対して排他的論理和演算を実行することにより生成される。ダミーデータは、例えば、全てのビットがデータ“0”のデータである。この場合、データD0とパリティデータPs0は同一のデータとなる。
【0087】
1.4 バッファメモリの構成
1.4.1 ライトバッファの構成
まず、
図7を参照して、ライトバッファ251の構成の一例について説明する。
図7は、ライトバッファ251の構成の一例を示す図である。
【0088】
図7に示すように、ライトバッファ251は、それぞれが1ページのサイズの書き込みデータを記憶可能な複数のバッファを含む。ライトバッファ251に含まれるバッファの個数は、任意である。例えば、ライトバッファ251に含まれるバッファの個数は、メモリセルトランジスタMCが記憶し得るデータのビット数に基づく。
図7の例では、ライトバッファ251は、4つのバッファ0~バッファ3を含む。
図7の例では、バッファ0にデータD0が記憶されている。
【0089】
1.4.2 パリティバッファの構成
次に、
図8を参照して、パリティバッファ252の構成の一例について説明する。
図8は、パリティバッファ252の構成の一例を示す図である。
【0090】
図8に示すように、パリティバッファ252は、それぞれが1ページのサイズのパリティデータを記憶可能な複数のバッファを含む。例えば、パリティバッファ252に含まれるバッファの個数は、ユーザデータ領域URのセルユニットCUのページタイプPTに基づく。
図8の例では、パリティバッファ252は、4つのページタイプPTに対応する4つのバッファを含む。
図8の例では、Lowerページデータ(“L”)に対応するバッファにパリティデータPL0が記憶されている。Middelページデータ(“M”)に対応するバッファにパリティデータPM0が記憶されている。Upperページデータ(“U”)に対応するバッファにパリティデータPU0が記憶されている。Topページデータ(“T”)に対応するバッファにパリティデータPT0が記憶されている。
【0091】
パリティバッファ252に記憶されているパリティデータは、バーストエラーの訂正処理の対象となる書き込みデータが増える度に更新される。
【0092】
1.5 退避フラグテーブルの構成
次に、
図9を参照して、退避フラグテーブル241の構成の一例について説明する。
図9は、退避フラグテーブル241の構成の一例を示す図である。
【0093】
図9に示すように、退避フラグテーブル241は、退避領域SRに退避された書き込みデータのアドレス情報を記憶するための複数のエントリを含む。例えば、退避された書き込みデータを区別するために、各エントリには、アドレス情報として、論理ブロック番号LBN(Logical Block Number)、ワード線番号WL#、ページタイプPT、及び物理ブロック番号PBN(Physical Block Number)の情報が記憶される。論理ブロック番号LBNは、論理ブロックを識別する番号である。物理ブロック番号PBNは、メモリチップ11のブロックBLKを識別する番号である。
【0094】
図9の例では、エントリ1に、アドレス情報が記憶されている。例えば、エントリ1には、論理ブロック番号LBNの項目に“0”、ワード線番号WL#の項目に“0”(WL0)、ページタイプPTの項目に“L”(Lower)、及び物理ブロック番号PBNの項目に“H0”(ブロックBLK_H0)が登録(記憶)されている。すなわち、
図9の例は、論理ブロック番号LBNが“0”の論理ブロックの、ブロックBLK_H0のWL0にLowerページデータとして記憶されるべき(または記憶されている)データが、エントリ1に対応する退避領域SR中の領域に退避されていることを示す。
【0095】
1.6 書き込み動作
次に、書き込み動作について説明する。書き込み動作は、プログラム動作とプログラムベリファイ動作とを含む。そして、プログラム動作とプログラムベリファイ動作との組み合わせ(以下、「プログラムサイクル」と表記する)を繰り返すことで、メモリセルトランジスタMCの閾値電圧がターゲットレベルまで上昇される。
【0096】
プログラム動作は、電子を電荷蓄積層に注入することにより閾値電圧を上昇させる(または注入を禁止することで閾値電圧を維持させる)動作のことである。
【0097】
プログラムベリファイ動作は、プログラム動作の後、メモリセルトランジスタMCからデータを読み出し、メモリセルトランジスタMCの閾値電圧が目標とするターゲットレベルに達したか否かを判定する動作である。閾値電圧がターゲットレベルまで達したメモリセルトランジスタMCは、その後のプログラムサイクルにおいて、書き込み禁止とされる。
【0098】
本実施形態では、ユーザデータ領域URにデータを書き込む場合、1つのセルユニットCUへの書き込み動作が2回に分けて実行される。具体的には、QLCに対応する4ページデータの書き込み動作は、Lowerページデータ及びMiddleページデータを書き込む動作(以下、「第1書き込み動作」と表記する)と、Upperページデータ及びTopページデータを書き込む動作(以下、「第2書き込み動作」と表記する)との2回に分けて実行される。なお、1つのセルユニットCUへの書き込み動作が、3回以上に分けて実行されてもよい。
【0099】
また、本実施形態では、退避領域SRにデータを書き込む場合、1つのセルユニットCUへの書き込み動作が1回実行される。具体的には、SLCに対応する1ページデータの書き込み動作が実行される。
【0100】
1.6.1 第1書き込み動作
まず、
図10及び
図11を参照して、第1書き込み動作について説明する。
図10は、書き込み動作の一例を示すシーケンス図である。
図11は、第1書き込み動作によるメモリセルトランジスタMCの閾値電圧分布の変化を示す図である。なお、
図10及び
図11では、プログラムベリファイ動作は省略されている。
【0101】
図10に示すように、メモリコントローラ20は、シーケンサ105に、第1書き込み動作を実行させる。まず、メモリコントローラ20は、ライトバッファ251に記憶されているLowerページデータ及びMiddleページデータをメモリチップ11に送信する(データイン)。シーケンサ105は、センスアンプ109(及びデータレジスタ110)のラッチ回路にLowerページデータ及びMiddleページデータを一時的に記憶させる。
【0102】
次に、シーケンサ105は、第1書き込み動作を実行する。より具体的には、シーケンサ105は、メモリセルアレイ107の対象セルユニットCUに、Lowerページデータ及びMiddleページデータを書き込む。
【0103】
図11に示すように、第1書き込み動作により、各メモリセルトランジスタMCの閾値電圧は、4個の閾値電圧分布のいずれかに属する。以下では、4つの閾値電圧分布を閾値電圧が低い側からM0ステート、M1ステート、M2ステート、及びM3ステートと表記する。各ステートに含まれるメモリセルトランジスタMCに対して、以下に示すように、“Lowerビット/Middleビット”のデータが割り当てられる。
M0ステート:“11”データ
M1ステート:“10”データ
M2ステート:“00”データ
M3ステート:“01”データ
【0104】
M0ステートは、後述する第2書き込み動作によりS0ステート~S3ステートに遷移するメモリセルトランジスタMCを含む。M1ステートは、第2書き込み動作によりS4ステート、S5ステート、S8ステート、及びS9ステートに遷移するメモリセルトランジスタMCを含む。M2ステートは、第2書き込み動作によりS6ステート、S7ステート、S10ステート、及びS11ステートに遷移するメモリセルトランジスタMCを含む。M3ステートは、第2書き込み動作によりS12ステート~S15ステートに遷移するメモリセルトランジスタMCを含む。
【0105】
シーケンサ105は、電圧VM1、VM2、及びVM3を第1書き込み動作におけるベリファイ電圧として使用する。電圧VM1は、M1ステート(“10”データ)を書き込む場合に使用されるベリファイ電圧である。電圧VM1は、電圧V1以上且つ電圧V4未満である。電圧VM2は、M2ステート(“00”データ)を書き込む場合に使用されるベリファイ電圧である。電圧VM2は、電圧V4以上且つ電圧V6未満である。電圧VM3は、M3ステート(“01”データ)を書き込む場合に使用されるベリファイ電圧である。電圧VM3は、電圧V6以上且つ電圧V12未満である。
【0106】
M0ステートに含まれるメモリセルトランジスタMCの閾値電圧は、電圧V1未満である。M1ステートに含まれるメモリセルトランジスタMCの閾値電圧は、電圧VM1以上且つ電圧V5未満である。M2ステートに含まれるメモリセルトランジスタMCの閾値電圧は、電圧VM2以上且つ電圧V7未満である。M3ステートに含まれるメモリセルトランジスタMCの閾値電圧は、電圧VM3以上且つ電圧V13未満である。
【0107】
以下、第1書き込み動作が実行され、第2書き込み動作が実行されていないセルユニットCUの状態を「MLC状態」または「書き込み動作の中間段階」と表記する。セルユニットCUに、Lowerページデータ及びMiddleページデータが書き込まれ、Upperページデータ及びTopページデータが書き込まれていない場合、Lowerページデータ及びMiddleページデータを一括して、「MLC状態のデータ」または「書き込み動作の中間段階のデータ」とも表記する。
【0108】
1.6.2 第2書き込み動作
次に、
図10及び
図12を参照して、第2書き込み動作について説明する。
図12は、第2書き込み動作によるメモリセルトランジスタMCの閾値電圧分布の変化を示す図である。
【0109】
図10に示すように、メモリコントローラ20は、シーケンサ105に、第2書き込み動作を実行させる。まず、メモリコントローラ20は、ライトバッファ251に記憶されているUpperページデータ及びTopページデータをメモリチップ11に送信する(データイン)。シーケンサ105は、センスアンプ109(及びデータレジスタ110)のラッチ回路にUpperページデータ及びTopページデータを一時的に記憶させる。
【0110】
次に、シーケンサ105は、第2書き込み動作を実行する。より具体的には、まず、シーケンサ105は、メモリセルアレイ107の対応するセルユニットCUからLowerページデータ及びMiddleページデータを読み出して、センスアンプ109(及びデータレジスタ110)のラッチ回路に一時的に記憶させる。次に、シーケンサ105は、センスアンプ109(及びデータレジスタ110)のラッチ回路に記憶されているLowerページデータ、Middleページデータ、Upperページデータ、及びTopページデータに基づいて、対象セルユニットCUにおけるUpperページデータ及びTopページデータの書き込み動作を実行する。なお、シーケンサ105は、Lowerページデータ及びMiddleページデータをメモリコントローラ20に送信してもよい。この場合、メモリコントローラ20は、ECC回路26において、Lowerページデータ及びMiddleページデータのECC処理を実行する。そして、メモリコントローラ20は、訂正されたLowerページデータ及びMiddleページデータを、メモリチップ11に送信してもよい。
【0111】
図12に示すように、第2書き込み動作により、16個の閾値電圧分布が形成される。例えば、第2書き込み動作により、M0ステートの閾値電圧分布に属していたメモリセルトランジスタMCは、S0ステート~S3ステートのいずれかの閾値電圧分布に属するようになる。 M1ステートの閾値電圧分布に属していたメモリセルトランジスタMCは、S4ステート、S5ステート、S8ステート、及びS9ステートのいずれかの閾値電圧分布に属するようになる。M2ステートの閾値電圧分布に属していたメモリセルトランジスタMCは、S6ステート、S7ステート、S10ステート、及びS11ステートのいずれかの閾値電圧分布に属するようになる。M3ステートの閾値電圧分布に属していたメモリセルトランジスタMCは、S12ステート~S15ステートのいずれかの閾値電圧分布に属するようになる。
【0112】
1.6.3 書き込み動作の実行順序
次に、第1書き込み動作及び第2書き込み動作が実行される順序について、
図13及び
図14を用いて説明する。
図13は、ユーザデータ領域URの複数のブロックBLKにおいて第1書き込み動作及び第2書き込み動作が実行される順序の一例を示す図である。
図14は、1つのブロックBLKに連続してデータが書き込まれる場合における第1書き込み動作及び第2書き込み動作が実行される順序の一例を示す図である。
図13の例では、説明を簡略化するため、各ブロックBLKが1つのストリングユニットSUを含む場合を示している。また、
図13の例において、各ワード線WLと各ブロックBLKとの交点に対応する実線の四角枠は、1つのセルユニットCUを示している。同様に、
図14の例において、各ワード線WLと各ストリングユニットSUとの交点に対応する実線の四角枠は、1つのセルユニットCUを示している。
図13及び
図14の実線の四角枠の破線で区切られた上段は、第1書き込み動作(WRT1)を示している。実線の四角枠の破線で区切られた下段は、第2書き込み動作(WRT2)を示している。すなわち、実線の四角枠の上段及び下段の数値は、書き込み動作の順序を表している。
【0113】
まず、複数のブロックBLKにデータを書き込む場合の書き込み動作の順序について説明する。
【0114】
図13に示すように、まず、シーケンサ105は、各ブロックBLKのワード線WL0を選択して、第1書き込み動作を順に実行する。より具体的には、シーケンサ105は、第1番目~第8番目の動作として、ブロックBLK_H0~BLK_H7のワード線WL0に対応するセルユニットCUを順に選択し、各セルユニットCUにおいて第1書き込み動作を実行する。
【0115】
次に、シーケンサ105は、各ブロックBLKのワード線WL1を選択して、第1書き込み動作を順に実行する。より具体的には、シーケンサ105は、第9番目~第16番目の動作として、ブロックBLK_H0~BLK_H7のワード線WL1に対応するセルユニットCUを順に選択し、各セルユニットCUにおいて第1書き込み動作を実行する。
【0116】
次に、シーケンサ105は、各ブロックBLKのワード線WL0を選択して、第2書き込み動作を順に実行する。より具体的には、シーケンサ105は、第17番目~第24番目の動作として、ブロックBLK_H0~BLK_H7のワード線WL0に対応するセルユニットCUを順に選択し、各セルユニットCUにおいて第2書き込み動作を実行する。
【0117】
次に、シーケンサ105は、各ブロックBLKのワード線WL2を選択して、第1書き込み動作を順に実行する。より具体的には、シーケンサ105は、第25番目~第32番目の動作として、ブロックBLK_H0~BLK_H7のワード線WL2に対応するセルユニットCUを順に選択し、各セルユニットCUにおいて第1書き込み動作を実行する。
【0118】
次に、シーケンサ105は、各ブロックBLKのワード線WL1を選択して、第2書き込み動作を順に実行する。より具体的には、シーケンサ105は、第33番目~第40番目の動作として、ブロックBLK_H0~BLK_H7のワード線WL1に対応するセルユニットCUを順に選択し、各セルユニットCUにおいて第2書き込み動作を実行する。
【0119】
このように、シーケンサ105は、或るワード線番号WL#のワード線WLに対応するセルユニットCUにおいて、第1書き込み動作を実行した後、次のワード線番号WL#のワード線WLに対応するセルユニットCUにおいて、第1書き込み動作を実行する。そして、シーケンサ105は、次のワード線番号WL#のワード線WLに対応するセルユニットCUにおいて第1書き込み動作が完了した後、1つ前のワード線番号WL#に対応するセルユニットCUにおいて、第2書き込み動作を実行する。シーケンサ105は、ワード線WL2以降においても、同様の順序で、各ブロックBLKのセルユニットCUを選択する。
【0120】
次に、1つのブロックBLKに連続してデータを書き込む場合の書き込み動作の順序について説明する。
【0121】
図14に示すように、まず、シーケンサ14は、第1番目~第5番目の動作として、ワード線WL0を選択した状態でストリングユニットSU0~SU4を順に選択して、各セルユニットCUにおける第1書き込み動作を実行する。
【0122】
次に、シーケンサ105は、第6番目の動作として、ストリングユニットSU0及びワード線WL1を選択した第1書き込み動作を実行する。
【0123】
次に、シーケンサ105は、第7番目の動作として、ストリングユニットSU0及びワード線WL0を選択した第2書き込み動作を実行する。
【0124】
次に、シーケンサ105は、第8~第15番目の動作として、ストリングユニットSU1~SU4を順に選択して、第6及び第7番目の動作と同じ手順で、ワード線WL1を選択した第1書き込み動作と、ワード線WL0を選択した第2書き込み動作と、を交互に実行する。
【0125】
次に、シーケンサ105は、第16~第25番目の動作として、第6~第15番目の動作と同様に、ストリングユニットSU0~SU4を順に選択して、ワード線WL2を選択した第1書き込み動作と、ワード線WL1を選択した第2書き込み動作と、を交互に実行する。
【0126】
次に、シーケンサ105は、第26~第35番目の動作として、第6~第15番目の動作と同様に、ストリングユニットSU0~SU4を順に選択して、ワード線WL3を選択した第1書き込み動作と、ワード線WL2を選択した第2書き込み動作と、を交互に実行する。シーケンサ105は、ワード線WL3以降においても、同様の順序で、第1書き込み動作と、第2書き込み動作と、を交互に実行する。
【0127】
1.7 退避動作
次に、退避動作について説明する。本実施形態では、退避領域SRに同じ書き込みデータ及び同じパリティデータを重複して退避させない(書き込まない)場合について説明する。以下、同じデータを重複して退避させない場合を、「重複排除」と表記する。すなわち、第1実施形態の退避動作では、同じ書き込みデータ及び同じパリティデータは、重複排除される。
【0128】
1.7.1 退避動作の流れ
まず、
図15を参照して、退避動作の流れの一例について説明する。
図15は、退避動作の流れの一例を示すフローチャートである。
【0129】
図15に示すように、CPU22は、ホスト2からフラッシュコマンドを受信する(S100)と、退避動作を開始する。
【0130】
まず、CPU22は、書き込みデータ(ユーザデータ及びユーザデータの誤り訂正符号)の退避処理を実行する(S101)。より具体的には、CPU22は、ユーザデータ領域URのMLC状態のデータを退避領域SRに退避させる退避処理(書き込み動作)と、ライトバッファ251に記憶されている書き込みデータを退避領域SRに退避させる退避処理(書き込み動作)と、を順に実行する。
【0131】
次に、CPU22は、パリティデータの退避処理を実行する(S102)。より具体的には、CPU22は、パリティバッファ252のパリティデータを退避領域SRに退避させる退避処理(書き込み動作)を実行する。
【0132】
CPU22は、退避領域SRへのデータの退避処理が完了すると、ホスト2に、フラッシュコマンドに対する完了応答を送信する(S103)。
【0133】
1.7.2 書き込みデータの退避処理の流れ
次に、
図16及び
図17を参照して、書き込みデータの退避処理の流れの一例について説明する。
図16及び
図17は、書き込みデータの退避処理の一例を示すフローチャートである。
【0134】
図16に示すように、まず、CPU22は、後述するステップS1001~ステップS1007の処理を実行してユーザデータ領域URの書き込みデータ(ユーザデータ及びユーザデータの誤り訂正符号)の退避処理を実行する。
【0135】
CPU22は、ユーザデータ領域URに、MLC状態のデータがあるか確認する(S1001)。すなわち、CPU22は、ユーザデータ領域URにおいて、Lowerページデータ及びMiddleページデータが書き込まれ、Upperページデータ及びTopページデータが書き込まれていないセルユニットCUがあるか確認する。
【0136】
MLC状態のデータがない場合(S1001_False)、ユーザデータ領域URには退避対象の書き込みデータがないため、CPU22は、ユーザデータ領域URのデータの退避処理を省略して、ステップS1008の処理に進む。
【0137】
ユーザデータ領域URにMLC状態のデータがある場合(S1001_True)、CPU22は、ユーザデータ領域URのMLC状態のデータから1ページ分のデータを選び、当該データをデータDx(xは0以上の整数)とする(S1002)。より具体的には、例えば、CPU22は、MLC状態のデータを記憶しているセルユニットCUに記憶されているLowerページデータを選択して、データDxとする。
【0138】
CPU22は、データDxの書き込み先アドレスAdd_xを取得する(S1003)。より具体的には、CPU22は、データDxが書き込まれているユーザデータ領域URのセルユニットCUのアドレス情報を取得する。
【0139】
CPU22は、アドレスAdd_xが退避フラグテーブル241に登録済みか確認する(S1004)。
【0140】
アドレスAdd_xが登録済みである場合(S1004_True)、CPU22は、データDxを退避させずに、ステップS1007の処理に進む。
【0141】
アドレスAdd_xが登録済みではない場合(S1004_False)、CPU22は、ユーザデータ領域URのMLC状態のデータを読み出し、読み出されたMLC状態のデータ中のデータDxを退避領域SRに退避させる(S1005)。例えば、シーケンサ105は、退避領域SRにおいて、データDxの書き込み動作を実行する。
【0142】
CPU22は、データDxの退避が終了すると、退避フラグテーブル241に、データDxのアドレスAdd_xを登録する(S1006)。
【0143】
アドレスAdd_xが登録済みである場合(S1004_True)、または、アドレスAdd_xを登録した(S1006)後、CPU22は、まだ退避されていない(退避の対象としてまだ選択されていない)MLC状態のデータがユーザデータ領域URにあるか確認する(S1007)。
【0144】
退避の対象としてまだ選択されていないMLC状態のデータがある場合(S1007_True)、CPU22は、変数xをインクリメントした後(x=x+1)、当該データをデータDxとする(S1002)。より具体的には、例えば、CPU22は、ユーザデータ領域URのMLC状態のデータからMiddleページデータを選択して、データDxとする。
【0145】
退避の対象としてまだ選択されていないMLC状態のデータがない場合(S1007_False)、
図17に示すように、CPU22は、後述するステップS1008~ステップS1014の処理を実行してライトバッファ251の書き込みデータの退避処理を実行する。
【0146】
まず、CPU22は、未書き込みのデータがライトバッファ251にあるか確認する(S1008)。すなわち、CPU22は、ライトバッファ251内に、ユーザデータ領域URに書き込まれていない書き込みデータがあるか確認する。換言すれば、CPU22は、ライトバッファ251内に、不揮発化されていない書き込みデータがあるか確認する。
【0147】
未書き込みのデータがライトバッファ251にない場合(S1008_False)、ライトバッファ251には退避対象のデータがないため、CPU22は、ライトバッファ251の書き込みデータの退避処理を省略して、ステップS1015の処理に進む。
【0148】
未書き込みのデータがライトバッファ251にある場合(S1008_True)、CPU22は、未書き込みのデータから1ページ分のデータを選び、当該データをデータDy(yは0以上の整数)とする(S1009)。
【0149】
CPU22は、データDyの書き込み先予定のアドレスAdd_yを取得する(S1010)。より具体的には、CPU22は、データDyの書き込み先として予定していたユーザデータ領域URのセルユニットCUのアドレス情報を取得する。
【0150】
CPU22は、退避フラグテーブル241に、アドレスAdd_yが登録済みか確認する(S1011)。
【0151】
アドレスAdd_yが登録済みである場合(S1011_True)、CPU22は、データDyを退避させずに、ステップS1014の処理に進む。
【0152】
アドレスAdd_yが登録済みではない場合(S1011_False)、CPU22は、退避領域SRにデータDyを退避させる(S1012)。例えば、シーケンサ105は、退避領域SRにおいて、データDyの書き込み動作を実行する。
【0153】
CPU22は、データDyの退避が終了すると、退避フラグテーブル241に、データDyのアドレスAdd_yを登録する(S1013)。
【0154】
アドレスAdd_yが登録済みである場合(S1011_True)、またはアドレスAdd_yを登録した(S1013)後、CPU22は、まだ退避されていない(退避の対象としてまだ選択されていない)未書き込みのデータがライトバッファ251にあるか確認する(S1014)。
【0155】
退避の対象としてまだ選択されていない未書き込みのデータがある場合(S1014_True)、CPU22は、変数yをインクリメントした後、当該データをデータDyとする(S1009)。
【0156】
退避の対象としてまだ選択されていない未書き込みのデータがない場合(S1014_False)、CPU22は、ECC回路26を制御して、退避領域SRに退避させたデータDx及びデータDyのパリティデータを生成する(S1015)。より具体的には、例えば、ECC回路26は、CPU22の制御に基づいて、退避させたデータDx及びデータDyに対する排他的論理和演算(XOR演算)を実行して、パリティデータを生成する。なお、退避させたデータが1ページ分しかないときは、ECC回路26は、退避させたデータとダミーデータとのXOR演算を実行することにより、パリティデータを生成する。
【0157】
CPU22は、データDx及びデータDyのパリティデータを、退避領域SRに書き込む(S1016)。例えば、シーケンサ105は、退避領域SRにおいて、データDx及びデータDyのパリティデータの書き込み動作を実行する。
【0158】
CPU22は、ステップS1016の処理の終了後、書き込みデータの退避処理を終了する。
【0159】
1.7.3 パリティデータの退避処理の流れ
次に、
図18を参照して、パリティデータの退避処理の流れの一例について説明する。
図18は、パリティデータの退避処理の一例を示すフローチャートである。
【0160】
図18に示すように、CPU22は、1回も不揮発化されていないUpperページまたはTopページのパリティデータがパリティバッファ252にあるか確認する(S2001)。より具体的には、例えば、本実施形態におけるパリティデータの退避処理では、パリティデータPL0及びPM0は、退避対象には含まれない。CPU22は、パリティデータPU0及びPT0がユーザデータ領域URまたは退避領域SRに記憶されていないか確認する。
【0161】
1回も不揮発化されていないUpperページまたはTopページのパリティデータがない場合(S2001_False)、パリティバッファ252には退避対象のパリティデータがないため、CPU22は、パリティデータの退避処理を終了する。
【0162】
1回も不揮発化されていないUpperページまたはTopページのパリティデータがある場合(S2001_True)、CPU22は、対象となるパリティデータを1つ選択して、退避領域SRに退避させる(S2002)。
【0163】
CPU22は、退避対象としてまだ選択されておらず且つ1回も不揮発化されていないUpperページまたはTopページのパリティデータがあるか確認する(S2003)。
【0164】
退避対象としてまだ選択されておらず且つ1回も不揮発化されていないUpperページまたはTopページのパリティデータがある場合(S2003_True)、CPU22は、対象となるパリティデータを選択して退避領域SRに退避させる(S2002)。
【0165】
退避対象としてまだ選択されておらず且つ1回も不揮発化されていないUpperページまたはTopページのパリティデータがない場合(S2003_False)、CPU22は、パリティデータの退避処理を終了する。
【0166】
1.7.4 退避動作の具体例
次に、退避動作の3つの具体例を示す。
【0167】
1.7.4.1 第1具体例
まず、
図19を参照して、第1実施形態の第1具体例について説明する。第1実施形態の第1具体例では、ユーザデータ領域URにデータが記憶されていない状態で、CPU22がホスト2からフラッシュコマンドを受信した場合について説明する。換言すれば、最初の第1書き込み動作が実行される前に、CPU22がホスト2からフラッシュコマンドを受信した場合について説明する。
図19は、第1実施形態の第1具体例における退避動作によるライトバッファ251、パリティバッファ252、退避フラグテーブル241、ユーザデータ領域UR、及び退避領域SRの変化を示す図である。
【0168】
図19に示すように、CPU22がホスト2からフラッシュコマンドを受信したときに、ユーザデータ領域URには、データが記憶されていない。すなわち、ユーザデータ領域URには、MLC状態のデータが存在しない(
図16のS1001_False)。この場合、ユーザデータ領域URの書き込みデータの退避処理は省略される。
【0169】
CPU22は、未書き込みの書き込みデータがライトバッファ251にある(
図17のS1008_True)ため、ライトバッファ251の書き込みデータの退避処理を実行する。例えば、CPU22は、ライトバッファ251のバッファ0のデータをデータD0とする(
図17のS1009)。CPU22は、データD0の書き込み先予定のアドレスAdd_0として、論理ブロック番号LBN“0”、ブロックBLK_H0、ワード線WL0、ページタイプL(Lower)、を含むアドレス情報を取得する(S1010)。アドレスAdd_0は、退避フラグテーブル241に登録されていない(
図17のS1011_False)ため、CPU22は、データD0を退避領域SRに退避させる(S1012)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S0のワード線WL0を選択して、データD0の書き込み動作を実行する。CPU22は、データD0のアドレスAdd_0を、退避フラグテーブル241のエントリ1に登録する(S1013)。より具体的には、退避フラグテーブル241のエントリ1には、論理ブロック番号LBNの項目に“0”、ワード線番号WL#の項目に“0”、ページタイプPTの項目に“L”、及び物理ブロック番号PBNの項目に“H0”がそれぞれ登録される。なお、例えば、
図19の退避フラグテーブル241において、エントリ1の論理ブロック番号LBNの“- → 0”なる表記は、論理ブロック番号LBNが未登録状態“-”から“0”が登録された状態に遷移したことを示す。他の項目も同様である。
【0170】
次に、CPU22は、ECC回路26を制御して、退避領域SRに退避されたデータD0のパリティデータPs0を生成する(
図17のS1015)。そして、CPU22は、退避領域SRに、パリティデータPs0を書き込む(S1016)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S1のワード線WL0を選択して、パリティデータPs0の書き込み動作を実行する。
【0171】
図19の例では、パリティバッファ252に、パリティデータが記憶されていない(
図18のS2001_False)。この場合、パリティバッファ252のパリティデータの退避処理は省略される。
【0172】
CPU22は、退避動作終了後、ホスト2に、フラッシュコマンドに対する完了応答を送信する。
【0173】
第1実施形態の第1具体例に示すように、CPU22は、ライトバッファ251のデータ(書き込みデータ)を、退避領域SRに退避させることができる。また、CPU22は、退避領域SRに退避させた書き込みデータに基づくパリティデータを生成し、退避領域SRに書き込むことができる。CPU22は、退避させた書き込みデータに基づくパリティデータを生成することにより、退避させた書き込みデータを保護することができる。
【0174】
このとき、退避フラグテーブル241には、退避させた書き込みデータの情報が登録される。従って、CPU22は、退避させた書き込みデータの状態を適切に管理することができる。
【0175】
1.7.4.2 第2具体例
次に、
図20を参照して、第1実施形態の第2具体例について説明する。第1実施形態の第2具体例では、ユーザデータ領域URにMLC状態のデータが記憶されている状態で、CPU22がホスト2からフラッシュコマンドを受信した場合について説明する。換言すれば、第1書き込み動作が実行された後、次の第1書き込み動作が実行される前に、CPU22がホスト2からフラッシュコマンドを受信した場合について説明する。
図20は、第1実施形態の第2具体例における、退避動作によるライトバッファ251、パリティバッファ252、退避フラグテーブル241、ユーザデータ領域UR、及び退避領域SRの変化を示す図である。なお、
図20の例は、
図19を用いて説明したデータの書き込み状況の後に、データの書き込みを継続した場合を示している。
【0176】
図20に示すように、CPU22がホスト2からフラッシュコマンドを受信したときに、ユーザデータ領域URに、MLC状態のデータが記憶されている(
図16のS1001_True)。
図20の例では、ユーザデータ領域URの論理ブロック番号LBN“0”で識別される論理ブロックの、ブロックBLK_H0のワード線WL0に対応するセルユニットCUにLowerページデータ及びMiddleページデータが記憶されている。また、パリティバッファ252には、Lowerページデータ及びMiddleページデータにそれぞれ対応するパリティデータPL0及びPM0が記憶されている。パリティデータPM0内の任意のビットは、第1誤り訂正符号の一例である。例えば、第1実施形態の第1具体例で説明したように、LowerページデータD0は、退避領域SRに退避済みである。すなわち、データD0のアドレスAdd_0は、退避フラグテーブル241に登録済みである(
図16のS1004_True)。このため、データD0の退避処理は実行されない。
【0177】
次に、CPU22は、ユーザデータ領域URのMLC状態のデータ中のMiddleページデータをデータD1とする(
図16のS1002)。CPU22は、データD1の書き込み先アドレスAdd_1として、論理ブロック番号LBN“0”、ブロックBLK_H0、ワード線WL0、ページタイプM(Middle)、を含むアドレス情報を取得する(
図16のS1003)。アドレスAdd_1で特定される書き込み先の任意のメモリセルトランジスタMC、及び、当該メモリセルトランジスタMCに書き込まれているデータD1内のビットは、それぞれ、第1メモリセル及び第1ビットデータの一例である。アドレスAdd_1は、退避フラグテーブル241に登録されていない(
図16のS1004_False)ため、CPU22は、データD1を退避領域SRに退避させる(S1005)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S2のワード線WL0を選択して、データD1の書き込み動作を実行する。ブロックBLK_S2のワード線WL0に接続された任意のメモリセルトランジスタMCは、第2メモリセルの一例である。CPU22は、データD1のアドレスAdd_1を、退避フラグテーブル241のエントリ2に登録する(S1006)。より具体的には、退避フラグテーブル241のエントリ2には、論理ブロック番号LBNの項目に“0”、ワード線番号WL#の項目に“0”、ページタイプPTの項目に“M”、及び物理ブロック番号PBNの項目に“H0”がそれぞれ登録される。
【0178】
次に、CPU22は、未書き込みの書き込みデータがライトバッファ251にある(
図17のS1008_True)ため、ライトバッファ251のデータの退避処理を実行する。例えば、CPU22は、ライトバッファ251のバッファ0のデータをデータD2とする(
図17のS1009)。データD2内の任意のビットは、第1書き込みデータの一例である。CPU22は、データD2の書き込み先予定のアドレスAdd_2として、論理ブロック番号LBN“0”、ブロックBLK_H1、ワード線WL0、ページタイプL(Lower)、を含むアドレス情報を取得する(S1010)。アドレスAdd_2は、退避フラグテーブル241に登録されていない(
図17のS1011_False)ため、CPU22は、データD2を退避領域SRに退避させる(S1012)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S3のワード線WL0を選択して、データD2の書き込み動作を実行する。ブロックBLK_S3のワード線WL0に接続された任意のメモリセルトランジスタMCは、第3メモリセルの一例である。CPU22は、データD2のアドレスAdd_2を、退避フラグテーブル241のエントリ3に登録する(S1013)。より具体的には、退避フラグテーブル241のエントリ3には、論理ブロック番号LBNの項目に“0”、ワード線番号WL#の項目に“0”、ページタイプPTの項目に“L”、及び物理ブロック番号PBNの項目に“H1”がそれぞれ登録される。
【0179】
次に、CPU22は、ECC回路26を制御して、退避領域SRに退避されたデータD1及びD2のパリティデータPs1を生成する(
図17のS1015)。パリティデータPs1内の任意のビットは、第2誤り訂正符号の一例である。そして、CPU22は、退避領域SRに、パリティデータPs1を書き込む(S1016)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S4のワード線WL0を選択して、パリティデータPs1の書き込み動作を実行する。ブロックBLK_S4のワード線WL0に接続された任意のメモリセルトランジスタMCは、第4メモリセルの一例である。
【0180】
パリティバッファ252のパリティデータPL0及びPM0は、退避対象ではない(S2001_False)。このため、パリティバッファ252のパリティデータの退避処理は省略される。退避領域SRに退避されたデータD1及びD2は、パリティデータPs1によって保護される。従って、CPU22は、パリティバッファ252のパリティデータPL0及びPM0の退避を省略してもバーストエラーからのデータの復旧をすることができる。
【0181】
CPU22は、退避動作終了後、ホスト2に、フラッシュコマンドに対する完了応答を送信する。
【0182】
第1実施形態の第2具体例に示すように、CPU22は、ユーザデータ領域URにあるMLC状態のデータの重複を排除しながら、退避領域SRに退避させることができる。また、CPU22は、退避領域SRに退避させた書き込みデータに基づくパリティデータを生成し、退避領域SRに書き込むことができる。CPU22は、退避させた書き込みデータに基づくパリティデータを生成することにより、パリティバッファ252に記憶されているパリティデータPL0及びPM0を退避させなくても、退避させた書き込みデータを保護することができる。
【0183】
1.7.4.3 第3具体例
次に、
図21を参照して、第1実施形態の第3具体例について説明する。第1実施形態の第3具体例では、ユーザデータ領域URの一部のブロックBLKにUpperページデータ及びTopページデータが記憶されている状態で、CPU22がホスト2からフラッシュコマンドを受信した場合について説明する。換言すれば、第2書き込み動作が実行された後、次の第2書き込み動作が実行される前に、CPU22がホスト2からフラッシュコマンドを受信した場合について説明する。
図21は、第1実施形態の第3具体例における、退避動作によるライトバッファ251、パリティバッファ252、退避フラグテーブル241、ユーザデータ領域UR、及び退避領域SRの変化を示す図である。なお、
図21の例は、
図20を用いて説明したデータの書き込み状況の後に、データの書き込みを継続した場合を示している。
【0184】
図21に示すように、CPU22がホスト2からフラッシュコマンドを受信したときに、ユーザデータ領域URに、MLC状態のデータが記憶されている(
図16のS1001_True)。より具体的には、ユーザデータ領域URの論理ブロック番号LBN“0”で識別される論理ブロックの、ブロックBLK_H0~BLK_H5のワード線WL0に対応するセルユニットCUは、第2書き込み動作まで完了している。ブロックBLK_H6のワード線WL0に対応するセルユニットCUには、MLC状態のデータD12及びD13が記憶されている。ブロックBLK_H7のワード線WL0に対応するセルユニットCUには、パリティデータPL0及びPM0が記憶されている。パリティデータPM0内の任意のビットは、第3誤り訂正符号の一例である。パリティデータPL0及びPM0はMLC状態のデータである。パリティバッファ252には、Upperページデータ及びTopページデータにそれぞれ対応するパリティデータPU0及びPT0が記憶されている。
【0185】
CPU22は、例えば、ユーザデータ領域URのMLC状態のデータ中のデータD12を選択する(
図16のS1002)。CPU22は、データD12の書き込み先アドレスAdd_12として、論理ブロック番号LBN“0”、ブロックBLK_H6、ワード線WL0、ページタイプL(Lower)、を含むアドレス情報を取得する(
図16のS1003)。アドレスAdd_12は、退避フラグテーブル241に登録されていない(
図16のS1004_False)ため、CPU22は、データD12を退避領域SRに退避させる(S1005)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S5のワード線WL0を選択して、データD12の書き込み動作を実行する。CPU22は、データD12のアドレスAdd_12を、退避フラグテーブル241のエントリ4に登録する(S1006)。より具体的には、退避フラグテーブル241のエントリ4には、論理ブロック番号LBNの項目に“0”、ワード線番号WL#の項目に“0”、ページタイプPTの項目に“L”、及び物理ブロック番号PBNの項目に“H6”がそれぞれ登録される。
【0186】
次に、CPU22は、例えば、ユーザデータ領域URのMLC状態のデータ中のデータD13を選択する(
図16のS1002)。CPU22は、データD13の書き込み先アドレスAdd_13として、論理ブロック番号LBN“0”、ブロックBLK_H6、ワード線WL0、ページタイプM(Middle)、を含むアドレス情報を取得する(
図16のS1003)。アドレスAdd_13で特定される書き込み先の任意のメモリセルトランジスタMC、及び、当該メモリセルトランジスタMCに書き込まれているデータD13内のビットは、それぞれ、第5メモリセル及び第2ビットデータの一例である。アドレスAdd_13は、退避フラグテーブル241に登録されていない(S1004_False)ため、CPU22は、データD13を退避領域SRに退避させる(S1005)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S6のワード線WL0を選択して、データD13の書き込み動作を実行する。CPU22は、データD13のアドレスAdd_13を、退避フラグテーブル241のエントリ5に登録する(S1006)。より具体的には、退避フラグテーブル241のエントリ5には、論理ブロック番号LBNの項目に“0”、ワード線番号WL#の項目に“0”、ページタイプPTの項目に“M”、及び物理ブロック番号PBNの項目に“H6”がそれぞれ登録される。
【0187】
次に、CPU22は、未書き込みの書き込みデータがライトバッファ251にある(
図17のS1008_True)ため、ライトバッファ251のデータの退避処理を実行する。例えば、CPU22は、ライトバッファ251のバッファ0のデータをデータD26とする(
図17のS1009)。データD26内の任意のビットは、第2書き込みデータの一例である。CPU22は、データD26の書き込み先予定のアドレスAdd_26として、論理ブロック番号LBN“0”、ブロックBLK_H6、ワード線WL0、ページタイプU(Upper)、を含むアドレス情報を取得する(S1010)。アドレスAdd_26は、退避フラグテーブル241に登録されていない(
図17のS1011_False)ため、CPU22は、データD26を退避領域SRに退避させる(S1012)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S7のワード線WL0を選択して、データD26の書き込み動作を実行する。CPU22は、データD26のアドレスAdd_26を、退避フラグテーブル241のエントリ6に登録する(S1013)。より具体的には、退避フラグテーブル241のエントリ6には、論理ブロック番号LBNの項目に“0”、ワード線番号WL#の項目に“0”、ページタイプPTの項目に“U”、及び物理ブロック番号PBNの項目に“H6”がそれぞれ登録される。
【0188】
次に、CPU22は、ECC回路26を制御して、退避領域SRに退避されたデータD12、D13、及びD26のパリティデータPs2を生成する(
図17のS1015)。パリティデータPs2内の任意のビットは、第4誤り訂正符号の一例である。そして、CPU22は、退避領域SRに、パリティデータPs2を書き込む(S1016)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S8のワード線WL0を選択して、パリティデータPs2の書き込み動作を実行する。ブロックBLK_S8のワード線WL0に接続された任意のメモリセルトランジスタMCは、第6メモリセルの一例である。
【0189】
次に、CPU22は、1回も不揮発化されていないパリティデータPU0及びPT0がパリティバッファ252にあるため(
図18のS2001_True)、パリティバッファ252のパリティデータの退避処理を実行する。CPU22は、パリティデータPU0及びPT0を退避領域SRに退避させる(S2002)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S9のワード線WL0を選択して、パリティデータPU0の書き込み動作を実行する。次に、シーケンサ105は、退避領域SRのブロックBLK_S10のワード線WL0を選択して、パリティデータPT0の書き込み動作を実行する。
【0190】
退避領域SRに退避されたデータD12及びD13は、パリティデータPs2によって保護される。退避領域SRに退避されたデータD26も、パリティデータPs2によって保護されるが、ユーザデータ領域UR中のデータD14、D16、D18、D20、D22、D24は、パリティデータPU0が失われると保護することができない。従って、CPU22は、パリティバッファ252のパリティデータPU0を退避させる。同様に、ユーザデータ領域UR中のデータD15、D17、D19、D21、D23、D25を保護するため、CPU22は、パリティバッファ252のパリティデータPT0を退避させる。
【0191】
CPU22は、退避動作終了後、ホスト2に、フラッシュコマンドに対する完了応答を送信する。
【0192】
第1実施形態の第3具体例に示すように、ユーザデータ領域URにある不揮発化(第2書き込み動作)が完了しているセルユニットCUのページデータは、退避処理の対象外とされる。より具体的には、ユーザデータ領域URのブロックBLK_H0~H5のワード線WL0に対応するLowerページデータD0、D2、D4、D8、及びD10、MiddleページデータD1、D3、D5、D7、D9、及びD11、UpperページデータD14、D16、D18、D20、D22、及びD24、並びにTopページデータD15、D17、D19、D21、D23、及びD25は、退避処理の対象外とされる。一方、CPU22は、ユーザデータ領域UR中のUpperページデータ及びTopページデータを保護するために、パリティバッファ252に記憶されているパリティデータPU0及びPT0を、退避処理の対象とする。
【0193】
1.8 退避フラグテーブルのエントリ削除
次に、
図22を参照して、退避フラグテーブル241のエントリ削除のタイミングについて説明する。
図22は、退避フラグテーブル241のエントリ削除を示す図である。
【0194】
図22に示すように、例えば、1つの論理ブロックとして管理される各ブロックBLKの同一ワード線WL番号に対応する書き込み動作が完了すると、CPU22は、退避フラグテーブル241の各エントリの情報を削除する。換言すると、1つの論理ブロックとして管理される各ブロックBLKへのパリティデータPL0、PM0、PU0、及びPT0の書き込み動作が完了すると、退避フラグテーブル241において、パリティデータPL0、PM0、PU0、及びPT0に対応する書き込みデータのエントリの情報が削除される。
図22の例では、ブロックBLK_H0~BLK_H7のワード線WL0に対応する各セルユニットCUにおいて、第2書き込み動作が完了している。この場合、CPU22は、退避フラグテーブル241において、ワード線WL0に対応するエントリの情報を削除する。
【0195】
1.9 本実施形態に係る効果
本実施形態に係る構成であれば、データの信頼性を向上できるメモリシステムを提供できる。本効果につき、詳述する。
【0196】
例えば、第2書き込み動作中にメモリシステムへの電力供給が停止されると、不揮発化されていないデータが消失したり、第2書き込み動作を実行中のセルユニットCUに記憶されていたMLC状態のデータ(Lowerページデータ及びMiddleページデータ)が破壊されたりする可能性がある。以下、セルユニットCUに書き込み済みのLowerページデータまたはMiddleページデータが破壊されることを「MLC破壊」と表記する。例えば、ホストは、MLC破壊が発生した場合においてもデータの最新値を保証するため、メモリシステムにフラッシュコマンドを送信する。メモリシステムは、ホストからフラッシュコマンドを受信すると、データ保証のための処理を実行する。ここで、フラッシュコマンドに対応したデータ保護のために、MLC状態のデータを記憶するセルユニットCUにUpperページデータ及びTopページデータとしてパディングデータ(無効データ)を書き込んで、書き込み動作(第2書き込み動作)が完了した状態にさせる方法が考えられる。但し、この場合、無効データが増加するため、書き込み倍率(WAF:write amplification factor)が増加する。また、パディングデータの生成及び第2書き込み動作の実行時間が比較的長い。
【0197】
これに対し、本実施形態に係る構成であれば、メモリシステム3は、フラッシュコマンドに応じてデータを退避させるための退避領域SRをメモリ領域内に設けることができる。メモリシステム3は、フラッシュコマンドを受信すると、ライトバッファ251及びパリティバッファ252にある不揮発化されていないデータ及びユーザデータ領域URにあるMLC状態のデータを退避領域SRに退避させることができる。これにより、メモリシステム3は、フラッシュコマンドの対象となるデータの最新値を保証できる。よって、メモリシステム3は、データの信頼性を向上できる。
【0198】
更に、本実施形態に係る構成であれば、メモリシステム3は、退避領域SRのメモリセルトランジスタMCをSLCとすることにより、退避動作において、SLCの書き込み動作を実行できる。SLCの書き込み動作は、パディングデータを書き込むQLCの第2書き込み動作より処理時間が短い。よって、電力供給の停止等の緊急時において、データ保護の処理時間を短縮できる。
【0199】
更に、本実施形態に係る構成であれば、メモリシステム3は、退避フラグテーブル241を含む。退避フラグテーブル241を用いて、退避領域SRに退避されたデータを管理することにより、退避領域SRに書き込まれるデータの重複を抑制できる。よって、データ保護の処理時間を短縮できる。
【0200】
2.第2実施形態
次に、第2実施形態について説明する。第2実施形態では、退避領域SRに書き込みデータの一部が重複して書き込まれる場合について説明する。以下、同じデータを重複して退避させ得る場合を、「重複退避」と表記する。すなわち、第2実施形態の退避動作では、書き込みデータは重複退避され、パリティデータは重複排除される。以下、第1実施形態と異なる点を中心に説明する。
【0201】
2.1 退避フラグテーブルの構成
まず、
図23を参照して、退避フラグテーブル241の構成の一例について説明する。
図23は、退避フラグテーブル241の構成の一例を示す図である。
【0202】
図23に示すように、本実施形態の退避フラグテーブル241は、ライトバッファ用退避フラグテーブル241a及びユーザデータ領域用退避フラグテーブル241bを含む。ライトバッファ用退避フラグテーブル241a及びユーザデータ領域用退避フラグテーブル241bは、それぞれ、第2テーブル及び第3テーブルの一例である。
【0203】
ライトバッファ用退避フラグテーブル241aは、ライトバッファ251から退避領域SRに退避された書き込みデータのアドレス情報を記憶するための複数のエントリを含む。テーブルの構成は、
図9を用いて説明した第1実施形態の退避フラグテーブル241と同様である。
図23の例では、ライトバッファ用退避フラグテーブル241aのエントリ1に、アドレス情報が記憶されている。例えば、エントリ1には、論理ブロック番号LBNの項目に“0”、ワード線番号WL#の項目に“0”、ページタイプPTの項目に“L”、及び物理ブロック番号PBNの項目に“H0”が登録されている。
【0204】
ユーザデータ領域用退避フラグテーブル241bは、ユーザデータ領域URから退避領域SRに退避された書き込みデータのアドレス情報を記憶するための複数のエントリを含む。テーブルの構成は、
図9を用いて説明した第1実施形態の退避フラグテーブル241と同様である。
図23の例では、ユーザデータ領域用退避フラグテーブル241bのエントリ1に、アドレス情報が記憶されている。例えば、エントリ1には、論理ブロック番号LBNの項目に“0”、ワード線番号WL#の項目に“0”、ページタイプPTの項目に“L”、及び物理ブロック番号PBNの項目に“H0”が登録されている。
【0205】
2.2 書き込みデータの退避処理の流れ
次に、
図24及び
図25を参照して、書き込みデータの退避処理の流れの一例について説明する。
図24及び
図25は、書き込みデータの退避処理の一例を示すフローチャートである。
【0206】
図24に示すように、まず、CPU22は、後述するステップS1001~ステップS1003、ステップS1101、ステップS1005、ステップS1102、及びステップS1007の処理を実行してユーザデータ領域URの書き込みデータ(ユーザデータ及びユーザデータの誤り訂正符号)の退避処理を実行する。
【0207】
ステップS1001~ステップS1003の処理は、
図16を用いて説明した第1実施形態と同様である。
【0208】
CPU22は、データDxの書き込み先アドレスAdd_xを取得する(S1003)と、アドレスAdd_xがユーザデータ領域用退避フラグテーブル241bに登録済みか確認する(S1101)。
【0209】
アドレスAdd_xが登録済みであるない場合(S1101_True)、CPU22は、データDxを退避させずに、ステップS1007の処理に進む。
【0210】
アドレスAdd_xが登録済みではない場合(S1101_False)、CPU22は、退避領域SRにデータDxを退避させる(S1005)。例えば、シーケンサ105は、退避領域SRにおいて、データDxの書き込み動作を実行する。
【0211】
CPU22は、データDxの退避が終了すると、ユーザデータ領域用退避フラグテーブル241bに、データDxのアドレスAdd_xを登録する(S1102)。
【0212】
アドレスAdd_xが登録済みである場合(S1101_True)、または、アドレスAdd_xを登録した(S1102)後、CPU22は、まだ退避されていない(退避の対象としてまだ選択されていない)MLC状態のデータがユーザデータ領域URにあるか確認する(S1007)。
【0213】
退避の対象としてまだ選択されていないMLC状態のデータがある場合(S1007_True)、CPU22は、変数xをインクリメントした後、当該データをデータDxとする(S1002)。
【0214】
退避の対象としてまだ選択されていないMLC状態のデータがない場合(S1007_False)、
図25に示すように、CPU22は、後述するステップS1008~ステップS1010、ステップS1103、ステップS1012、ステップS1104、及びステップS1014の処理を実行してライトバッファ251の書き込みデータの退避処理を実行する。
【0215】
ステップS1008~ステップS1010の処理は、
図17を用いて説明した第1実施形態と同様である。
【0216】
CPU22は、データDyの書き込み先予定のアドレスAdd_yを取得する(S1010)と、ライトバッファ用退避フラグテーブル241aに、アドレスAdd_yが登録済みか確認する(S1103)。
【0217】
アドレスAdd_yが登録済みである場合(S1103_True)、CPU22は、データDyを退避させずに、ステップS1014の処理に進む。
【0218】
アドレスAdd_yが登録済みではない場合(S1103_False)、CPU22は、退避領域SRにデータDyを退避させる(S1012)。例えば、シーケンサ105は、退避領域SRにおいて、データDyの書き込み動作を実行する。
【0219】
CPU22は、データDyの退避が終了すると、ライトバッファ用退避フラグテーブル241aに、データDyのアドレスAdd_yを登録する(S1104)。
【0220】
アドレスAdd_yが登録済みである場合(S1103_True)、またはアドレスAdd_yを登録した(S1104)後、CPU22は、まだ退避されていない(退避の対象としてまだ選択されていない)未書き込みのデータがライトバッファ251にあるか確認する(S1014)。
【0221】
退避の対象としてまだ選択されていない未書き込みのデータがある場合(S1014_True)、CPU22は、変数yをインクリメントした後、当該データをデータDyとする(S1009)。
【0222】
退避の対象としてまだ選択されていない未書き込みのデータがない場合(S1014_False)、CPU22は、ECC回路26を制御して、退避領域SRに退避させたデータDx及びデータDyのパリティデータを生成する(S1015)。
【0223】
CPU22は、データDx及びデータDyのパリティデータを、退避領域SRに書き込む(S1016)。例えば、シーケンサ105は、退避領域SRにおいて、データDx及びデータDyのパリティデータの書き込み動作を実行する。
【0224】
CPU22は、ステップS1016の処理の終了後、書き込みデータの退避処理を終了する。
【0225】
2.3 パリティデータの退避処理の流れ
次に、パリティデータの退避処理の流れについて説明する。本実施形態のパリティデータの退避処理の流れは、
図18を用いて説明した第1実施形態と同様である。
【0226】
2.4 退避動作の具体例
次に、退避動作の3つの具体例を示す。以下では、第1実施形態の第1~第3具体例と異なる点に着目して説明する。
【0227】
2.4.1 第1具体例
まず、
図26を参照して、第2実施形態の第1具体例について説明する。第2実施形態の第1具体例では、第1実施形態の第1具体例(
図19)と同様に、ユーザデータ領域URにデータが記憶されていない状態で、CPU22がホスト2からフラッシュコマンドを受信した場合について説明する。
図26は、第2実施形態の第1具体例における、退避動作によるライトバッファ251、パリティバッファ252、ライトバッファ用退避フラグテーブル241a、ユーザデータ領域用退避フラグテーブル241b、ユーザデータ領域UR、及び退避領域SRの変化を示す図である。なお、
図26の例において、ライトバッファ251、パリティバッファ252、及びユーザデータ領域URに記憶されているデータの状態は、第1実施形態の第1具体例(
図19)と同様である。
【0228】
図26に示すように、第1実施形態の第1具体例(
図19)と同様に、CPU22は、ライトバッファ251の書き込みデータの退避処理を実行する。例えば、CPU22は、ライトバッファ251のバッファ0のデータをデータD0とする(
図25のS1009)。CPU22は、データD0の書き込み先予定のアドレスAdd_0を含むアドレス情報を取得する(S1010)。アドレスAdd_0は、ライトバッファ用退避フラグテーブル241aに登録されていない(
図25のS1103_False)ため、CPU22は、データD0を退避領域SRに退避させる(S1012)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S0のワード線WL0を選択して、データD0の書き込み動作を実行する。CPU22は、データD0のアドレスAdd_0を、ライトバッファ用退避フラグテーブル241aのエントリ1に登録する(S1104)。
【0229】
S1104以降の動作は、
図19を用いた説明した第1実施形態と同様である。
【0230】
CPU22は、退避動作終了後、ホスト2に、フラッシュコマンドに対する完了応答を送信する。
【0231】
第2実施形態の第1具体例に示すように、CPU22は、ライトバッファ251のデータ(書き込みデータ)を、退避領域SRに退避させることができる。このとき、ライトバッファ用退避フラグテーブル241aには、退避させたデータの情報が登録される。
【0232】
2.4.2 第2具体例
次に、
図27を参照して、第2実施形態の第2具体例について説明する。第2実施形態の第2具体例では、第1実施形態の第2具体例(
図20)と同様に、ユーザデータ領域URにMLC状態のデータが記憶されている状態で、CPU22がホスト2からフラッシュコマンドを受信した場合について説明する。
図27は、第2実施形態の第2具体例における、退避動作によるライトバッファ251、パリティバッファ252、ライトバッファ用退避フラグテーブル241a、ユーザデータ領域用退避フラグテーブル241b、ユーザデータ領域UR、及び退避領域SRの変化を示す図である。なお、
図27の例は、
図26を用いて説明したデータの書き込み状況の後に、データの書き込みを継続した場合を示している。また、
図27の例において、ライトバッファ251、パリティバッファ252、及びユーザデータ領域URに記憶されているデータの状態は、第1実施形態の第2具体例(
図20)と同様である。
【0233】
図27に示すように、CPU22は、ユーザデータ領域URに記憶されているMLC状態のデータD0及びD1のうち、データD0を選択する(
図24のS1002)。CPU22は、データD0の書き込み先アドレスAdd_0を含むアドレス情報を取得する(
図24のS1003)。アドレスAdd_0は、ユーザデータ領域用退避フラグテーブル241bに登録されていない(
図24のS1101_False)ため、CPU22は、データD0を退避領域SRに退避させる(S1005)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S2のワード線WL0を選択して、データD0の書き込み動作を実行する。CPU22は、データD0のアドレスAdd_0を、ユーザデータ領域用退避フラグテーブル241bのエントリ1に登録する(S1102)。
【0234】
次に、CPU22は、MiddleページのデータをデータD1とする(
図24のS1002)。CPU22は、データD1の書き込み先アドレスAdd_1を含むアドレス情報を取得する(
図24のS1003)。アドレスAdd_1は、ユーザデータ領域用退避フラグテーブル241bに登録されていない(
図24のS1101_False)ため、CPU22は、データD1を退避領域SRに退避させる(S1005)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S3のワード線WL0を選択して、データD1の書き込み動作を実行する。CPU22は、データD1のアドレスAdd_1を、ユーザデータ領域用退避フラグテーブル241bのエントリ2に登録する(S1102)。
【0235】
次に、CPU22は、ライトバッファ251のデータの退避処理を実行する。例えば、CPU22は、ライトバッファ251のバッファ0のデータをデータD2とする(
図25のS1009)。CPU22は、データD2の書き込み先予定のアドレスAdd_2を含むアドレス情報を取得する(S1010)。アドレスAdd_2は、ライトバッファ用退避フラグテーブル241aに登録されていない(
図25のS1103_False)ため、CPU22は、データD2を退避領域SRに退避させる(S1012)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S4のワード線WL0を選択して、データD2の書き込み動作を実行する。CPU22は、データD2のアドレスAdd_2を、ライトバッファ用退避フラグテーブル241aのエントリ2に登録する(S1104)。
【0236】
次に、CPU22は、ECC回路26を制御して、退避領域SRに退避されたデータD0、D1、及びD2のパリティデータPs1を生成する(
図25のS1015)。そして、CPU22は、退避領域SRに、パリティデータPs1を書き込む(S1016)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S5のワード線WL0を選択して、パリティデータPs1の書き込み動作を実行する。
【0237】
パリティバッファ252のパリティデータPL0及びPM0は、退避対象ではない(S2001_False)。このため、パリティバッファ252のパリティデータの退避処理は省略される。
【0238】
CPU22は、退避動作終了後、ホスト2に、フラッシュコマンドに対する完了応答を送信する。
【0239】
第2実施形態の第2具体例に示すように、CPU22は、ユーザデータ領域URにあるMLC状態のデータを、重複して退避領域SRに退避させることができる。また、第1実施形態の第2具体例と同様に、CPU22は、退避領域SRに退避させた書き込みデータに基づくパリティデータを生成し、退避領域SRに書き込むことができる。これにより、CPU22は、パリティバッファ252に記憶されているパリティデータPL0及びPM0を退避させなくても、退避させた書き込みデータを保護することができる。
【0240】
2.4.3 第3具体例
次に、
図28を参照して、第2実施形態の第3具体例について説明する。第2実施形態の第3具体例では、第1実施形態の第3具体例(
図21)と同様に、ユーザデータ領域URの一部のブロックBLKにUpperページデータ及びTopページデータが記憶されている状態で、CPU22がホスト2からフラッシュコマンドを受信した場合について説明する。
図28は、第2実施形態の第3具体例における、退避動作によるライトバッファ251、パリティバッファ252、ライトバッファ用退避フラグテーブル241a、ユーザデータ領域用退避フラグテーブル241b、ユーザデータ領域UR、及び退避領域SRの変化を示す図である。なお、
図28の例は、
図27を用いて説明したデータの書き込み状況の後に、データの書き込みを継続した場合を示している。また、
図28の例において、ライトバッファ251、パリティバッファ252、及びユーザデータ領域URに記憶されているデータの状態は、第1実施形態の第3具体例(
図21)同様である。
【0241】
図28に示すように、CPU22は、ユーザデータ領域URに記憶されているMLC状態のデータD12及びD13のうち、例えば、データD12を選択する(
図24のS1002)。CPU22は、データD12の書き込み先アドレスAdd_12を含むアドレス情報を取得する(
図24のS1003)。アドレスAdd_12は、ユーザデータ領域用退避フラグテーブル241bに登録されていない(
図24のS1101_False)ため、CPU22は、データD12を退避領域SRに退避させる(S1005)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S6のワード線WL0を選択して、データD12の書き込み動作を実行する。CPU22は、データD12のアドレスAdd_12を、ユーザデータ領域用退避フラグテーブル241bのエントリ3に登録する(S1102)。
【0242】
次に、CPU22は、例えば、データD13を選択する(
図24のS1002)。CPU22は、データD13の書き込み先アドレスAdd_13を含むアドレス情報を取得する(
図24のS1003)。アドレスAdd_13は、ユーザデータ領域用退避フラグテーブル241bに登録されていない(S1101_False)ため、CPU22は、データD13を退避領域SRに退避させる(S1005)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S7のワード線WL0を選択して、データD13の書き込み動作を実行する。CPU22は、データD13のアドレスAdd_13を、ユーザデータ領域用退避フラグテーブル241bのエントリ4に登録する(S1102)。
【0243】
次に、CPU22は、ライトバッファ251のデータの退避処理を実行する。例えば、CPU22は、ライトバッファ251のバッファ0のデータをデータD26とする(
図25のS1009)。CPU22は、データD26の書き込み先予定のアドレスAdd_26を含むアドレス情報を取得する(S1010)。アドレスAdd_26は、ライトバッファ用退避フラグテーブル241aに登録されていない(
図25のS1103_False)ため、CPU22は、データD26を退避領域SRに退避させる(S1012)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S8のワード線WL0を選択して、データD26の書き込み動作を実行する。CPU22は、データD26のアドレスAdd_26を、ライトバッファ用退避フラグテーブル241aのエントリ3に登録する(S1104)。
【0244】
次に、CPU22は、ECC回路26を制御して、退避領域SRに退避されたデータD12、D13、及びD26のパリティデータPs2を生成する(
図25のS1015)。そして、CPU22は、退避領域SRに、パリティデータPs2を書き込む(S1016)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S9のワード線WL0を選択して、パリティデータPs2の書き込み動作を実行する。
【0245】
次に、CPU22は、パリティバッファ252のパリティデータの退避処理を実行する。例えば、CPU22は、まず、パリティデータPU0を退避領域SRに退避させる(S2002)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S10のワード線WL0を選択して、パリティデータPU0の書き込み動作を実行する。次に、CPU22は、パリティデータPT0を退避領域SRに退避させる(S2002)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S11のワード線WL0を選択して、パリティデータPT0の書き込み動作を実行する。
【0246】
CPU22は、退避動作終了後、ホスト2に、フラッシュコマンドに対する完了応答を送信する。
【0247】
第2実施形態の第3具体例に示すように、ユーザデータ領域URにある不揮発化(第2書き込み動作)が完了しているセルユニットCUのページデータは、第1実施形態の第3具体例と同様に、退避処理の対象外とされる。また、第1実施形態の第2具体例と同様に、CPU22は、パリティバッファ252に記憶されているパリティデータPL0及びPM0を退避させなくても、退避させた書き込みデータを保護することができる。
【0248】
2.5 退避フラグテーブルのエントリ削除
次に、
図29及び
図30を参照して、ライトバッファ用退避フラグテーブル241a及びユーザデータ領域用退避フラグテーブル241bのエントリ削除のタイミングについて説明する。
図29は、ライトバッファ用退避フラグテーブル241aのエントリ削除を示す図である。
図30は、ユーザデータ領域用退避フラグテーブル241bのエントリ削除を示す図である。
【0249】
図29に示すように、ライトバッファ用退避フラグテーブル241aの各エントリの情報は、ライトバッファ251に記憶されている書き込みデータがユーザデータ領域URに書き込まれたタイミングで削除される。より具体的には、
図29の例では、ライトバッファ251にデータD0が記憶されているときに、退避処理が実行された場合が想定されている。このため、ライトバッファ用退避フラグテーブル241aのエントリ1には、データD0に対応する情報が登録される。そして、その後、ライトバッファ251にデータD1が記憶され、データD0及びD1がユーザデータ領域URに書き込まれた場合が想定されている。データD0がユーザデータ領域URに書き込まれたことに応じ、CPU22は、ライトバッファ用退避フラグテーブル241aのエントリ1にあるデータD0の情報を削除する。
【0250】
図30に示すように、
図22を用いて説明した第1実施形態と同様に、ユーザデータ領域用退避フラグテーブル241bの各エントリの情報は、例えば、1つの論理ブロックとして管理される各ブロックBLKの同一ワード線WL番号に対応する書き込み動作が完了したタイミングで削除される。
図30の例では、ブロックBLK_H0~BLK_H7のワード線WL0に対応する各セルユニットCUにおいて、第2書き込み動作が完了している。この場合、CPU22は、ユーザデータ領域用退避フラグテーブル241bにおいて、ワード線WL0に対応するエントリの情報を削除する。
【0251】
2.6 本実施形態に係る効果
本実施形態に係る構成であれば、第1実施形態と同様の効果が得られる。
【0252】
更に、本実施形態に係る構成であれば、書き込みデータを重複退避させることができる。同じデータが複数回退避領域SRに書き込まれることにより、退避動作時の誤書き込みによるデータの消失の可能性を低減でき、データ保護の信頼性が向上する。
【0253】
3.第3実施形態
次に、第3実施形態について説明する。第3実施形態では、退避領域SRにパリティデータの一部が重複して書き込まれる場合について説明する。すなわち、第3実施形態の退避動作では、書き込みデータは重複排除され、パリティデータは重複退避される。なお、パリティデータの重複退避とは、退避領域SRに退避された書き込みデータが複数のパリティデータにより保護されている状態を示す。以下、第1及び第2実施形態と異なる点を中心に説明する。
【0254】
3.1 書き込みデータの退避処理の流れ
まず、書き込みデータの退避処理の流れについて説明する。本実施形態の書き込みデータの退避処理の流れは、
図16及び
図17を用いて説明した第1実施形態と同様である。
【0255】
3.2 パリティデータの退避処理の流れ
次に、
図31を参照して、パリティデータの退避処理の流れの一例について説明する。
図31は、パリティデータの退避処理の一例を示すフローチャートである。
【0256】
図31に示すように、CPU22は、1回も不揮発化されていないパリティデータがパリティバッファ252にあるか確認する(S2101)。より具体的には、例えば、CPU22は、パリティバッファ252にあるパリティデータPL0、PM0、PU0及びPT0がユーザデータ領域URまたは退避領域SRに1回も記憶されていないか確認する。
【0257】
1回も不揮発化されていないパリティデータがない場合(S2101_False)、パリティバッファ252には退避対象のパリティデータがないため、CPU22は、パリティデータの退避処理を終了する。
【0258】
1回も不揮発化されていないパリティデータがある場合(S2101_True)、CPU22は、対象となるパリティデータを1つ選択して、退避領域SRに退避させる(S2102)。
【0259】
CPU22は、退避対象としてまだ選択されておらず且つ1回も不揮発化されていないパリティデータがあるか確認する(S2103)。
【0260】
退避対象としてまだ選択されておらず且つ1回も不揮発化されていないパリティデータがある場合(S2103_True)、CPU22は、対象となるパリティデータを選択して退避領域SRに退避させる(S2102)。
【0261】
退避対象としてまだ選択されておらず且つ1回も不揮発化されていないパリティデータがない場合(S2103_False)、CPU22は、パリティデータの退避処理を終了する。
【0262】
図18を参照して説明した第1実施形態では、Lowerページデータ及びMiddleページデータのパリティデータは、退避領域SRに退避されない。一方、本実施形態では、Lowerページデータ及びMiddleページデータのパリティデータも、退避領域SRに退避される。これにより、退避領域SRでは、パリティバッファ252に記憶されていたパリティデータによる書き込みデータの保護と、退避領域SRに書き込まれた書き込みデータに基づいて生成されたパリティデータによる書き込みデータの保護とが、重複し得る。換言すれば、退避領域SRに退避された書き込みデータの少なくとも一部は、複数のパリティデータにより保護される。すなわち、少なくとも一部の書き込みデータのパリティデータは、重複退避されている。
【0263】
3.3 退避動作の具体例
次に、退避動作の2つの具体例を示す。以下では、パリティデータの退避処理に着目して説明する。
【0264】
3.3.1 第1具体例
まず、
図32を参照して、第3実施形態の第1具体例について説明する。第3実施形態の第1具体例では、第1実施形態の第2具体例(
図20)と同様に、ユーザデータ領域URにMLC状態のデータが記憶されている状態で、CPU22がホスト2からフラッシュコマンドを受信した場合について説明する。
図32は、第3実施形態の第1具体例における、退避動作によるライトバッファ251、パリティバッファ252、退避フラグテーブル241、ユーザデータ領域UR、及び退避領域SRの変化を示す図である。なお、
図32の例は、
図19を用いて説明したデータの書き込み状況の後に、データの書き込みを継続した場合を示している。また、
図32の例において、ライトバッファ251、パリティバッファ252、及びユーザデータ領域URに記憶されているデータの状態は、第1実施形態の第2具体例(
図20)と同様である。
【0265】
図32に示すように、まず、CPU22は、書き込みデータの退避処理を実行する。書き込みデータの退避処理は、
図20を用いて説明した第1実施形態の第2具体例と同様である。
【0266】
次に、CPU22は、1回も不揮発化されていないパリティデータがパリティバッファ252にあるため(
図31のS2101_True)、パリティバッファ252のパリティデータの退避処理を実行する。例えば、CPU22は、まず、パリティデータPL0を退避領域SRに退避させる(S2102)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S5のワード線WL0を選択して、パリティデータPL0の書き込み動作を実行する。次に、CPU22は、パリティデータPM0を退避領域SRに退避させる(S2102)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S6のワード線WL0を選択して、パリティデータPM0の書き込み動作を実行する。これにより、例えば、データD0は、パリティデータPs0及びPL0により保護される。すなわち、データD0に対するパリティデータPs0及びPL0は、重複退避されている。同様に、データD1は、パリティデータPs1及びPM0により保護される。また、データD2は、パリティデータPs1及びPL0により保護される。すなわち、データD1及びD2に対するパリティデータPs1並びにPM0及びPL0は、重複退避されている。
【0267】
CPU22は、退避動作終了後、ホスト2に、フラッシュコマンドに対する完了応答を送信する。
【0268】
第3実施形態の第1具体例に示すように、CPU22は、第1実施形態の第2具体例と同様に、ユーザデータ領域URにあるMLC状態のデータの重複を排除しながら、退避領域SRに退避させることができる。このとき、CPU22は、パリティバッファ252に記憶されているパリティデータPL0及びPM0を退避させることにより、パリティデータを重複退避させることができる。
【0269】
3.3.2 第2具体例
次に、
図33を参照して、第3実施形態の第2具体例について説明する。第3実施形態の第2具体例では、第1実施形態の第3具体例(
図21)と同様に、ユーザデータ領域URの一部のブロックBLKにUpperページデータ及びTopページデータが記憶されている状態で、CPU22がホスト2からフラッシュコマンドを受信した場合について説明する。
図33は、第3実施形態の第2具体例における、退避動作によるライトバッファ251、パリティバッファ252、退避フラグテーブル241、ユーザデータ領域UR、及び退避領域SRの変化を示す図である。なお、
図33の例は、
図32を用いて説明したデータの書き込み状況の後に、データの書き込みを継続した場合を示している。また、
図33の例において、ライトバッファ251、パリティバッファ252、及びユーザデータ領域URに記憶されているデータの状態は、第1実施形態の第3具体例(
図21)同様である。
【0270】
図33に示すように、まず、CPU22は、書き込みデータの退避処理を実行する。書き込みデータの退避処理は、
図21を用いて説明した第1実施形態の第3具体例と同様である。本例では、CPU22は、退避領域SRのブロックBLK_S7~S10に、データD12、D13、及びD26、並びにパリティデータPs2を書き込む。
【0271】
次に、CPU22は、1回も不揮発化されていないパリティデータPU0及びPT0がパリティバッファ252にあるため(
図31のS2101_True)、パリティバッファ252のパリティデータの退避処理を実行する。パリティバッファ252のパリティデータPL0及びPM0は、退避領域SRのブロックBLK_S5及びS6にそれぞれ退避されているため、退避対象として選択されない。例えば、CPU22は、まず、パリティデータPU0を退避領域SRに退避させる(S2102)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S11のワード線WL0を選択して、パリティデータPU0の書き込み動作を実行する。次に、CPU22は、パリティデータPT0を退避領域SRに退避させる(S2102)。より具体的には、シーケンサ105は、退避領域SRのブロックBLK_S12のワード線WL0を選択して、パリティデータPT0の書き込み動作を実行する。これにより、例えば、データD26は、パリティデータPs2及びPU0により保護される。すなわち、データD26に対するパリティデータPs2及びPU0は、重複退避されている。
【0272】
CPU22は、退避動作終了後、ホスト2に、フラッシュコマンドに対する完了応答を送信する。
【0273】
第3実施形態の第2具体例に示すように、ユーザデータ領域URにある不揮発化(第2書き込み動作)が完了しているセルユニットCUのページデータは、第1実施形態の第3具体例と同様に、退避処理の対象外とされる。すなわち、ユーザデータ領域URのUpperページデータ及びTopページデータは、退避処理の対象外とされる。また、CPU22は、パリティバッファ252に記憶されているパリティデータPU0及びPT0を退避させることにより、パリティデータを重複退避させることができる。
【0274】
3.4 本実施形態に係る効果
本実施形態に係る構成であれば、第1実施形態と同様の効果が得られる。
【0275】
更に、本実施形態に係る構成であれば、パリティデータを重複退避させることができる。これにより、書き込みデータのバーストエラーを訂正する際に、訂正処理の試行回数を増やすことができる。これにより、データ訂正の信頼性が向上する。
【0276】
4.第4実施形態
次に、第4実施形態について説明する。第4実施形態では、退避領域SRに書き込みデータの一部及びパリティデータの一部が重複して書き込まれる場合について説明する。すなわち、第4実施形態の退避動作では、書き込みデータ及びパリティデータは重複退避される。以下、第1~第3実施形態と異なる点を中心に説明する。
【0277】
4.1 書き込みデータの退避処理の流れ
まず、書き込みデータの退避処理の流れについて説明する。本実施形態の書き込みデータの退避処理の流れは、
図24及び
図25を用いて説明した第2実施形態と同様である。
【0278】
4.2 パリティデータの退避処理の流れ
次に、パリティデータの退避処理の流れについて説明する。本実施形態のパリティデータの退避処理の流れは、
図31を用いて説明した第3実施形態と同様である。
【0279】
4.3 退避動作の具体例
次に、退避動作の2つの具体例を示す。
【0280】
4.3.1 第1具体例
まず、
図34を参照して、第4実施形態の第1具体例について説明する。第4実施形態の第1具体例では、第2実施形態の第2具体例(
図27)と同様に、ユーザデータ領域URにMLC状態のデータが記憶されている状態で、CPU22がホスト2からフラッシュコマンドを受信した場合について説明する。
図34は、第4実施形態の第1具体例における、退避動作によるライトバッファ251、パリティバッファ252、ライトバッファ用退避フラグテーブル241a、ユーザデータ領域用退避フラグテーブル241b、ユーザデータ領域UR、及び退避領域SRの変化を示す図である。なお、
図34の例は、
図26を用いて説明したデータの書き込み状況の後に、データの書き込みを継続した場合を示している。また、
図34の例において、ライトバッファ251、パリティバッファ252、及びユーザデータ領域URに記憶されているデータの状態は、第2実施形態の第2具体例(
図27)と同様である。
【0281】
図34に示すように、まず、CPU22は、書き込みデータの退避処理を実行する。書き込みデータの退避処理は、
図27を用いて説明した第2実施形態の第2具体例と同様である。
【0282】
次に、CPU22は、1回も不揮発化されていないパリティデータがパリティバッファ252にあるため(
図31のS2101_True)、
図32を用いて説明した第3実施形態の第1具体例と同様に、パリティバッファ252のパリティデータの退避処理を実行する。すなわち、CPU22は、パリティデータPL0、及び、パリティデータPM0を退避領域SRに退避させる(S2102)。
【0283】
CPU22は、退避動作終了後、ホスト2に、フラッシュコマンドに対する完了応答を送信する。
【0284】
第4実施形態の第1具体例に示すように、CPU22は、第2実施形態の第2具体例、及び、第3実施形態の第1具体例と同様の制御を行うことができる。
【0285】
4.3.2 第2具体例
次に、
図35を参照して、第4実施形態の第2具体例について説明する。第4実施形態の第2具体例では、第2実施形態の第3具体例(
図28)と同様に、ユーザデータ領域URの一部のブロックBLKにUpperページデータ及びTopページデータが記憶されている状態で、CPU22がホスト2からフラッシュコマンドを受信した場合について説明する。
図35は、第4実施形態の第2具体例における、退避動作によるライトバッファ251、パリティバッファ252、ライトバッファ用退避フラグテーブル241a、ユーザデータ領域用退避フラグテーブル241b、ユーザデータ領域UR、及び退避領域SRの変化を示す図である。なお、
図35の例は、
図34を用いて説明したデータの書き込み状況の後に、データの書き込みを継続した場合を示している。また、
図35の例において、ライトバッファ251、パリティバッファ252、及びユーザデータ領域URに記憶されているデータの状態は、第2実施形態の第3具体例(
図28)と同様である。
【0286】
図35に示すように、まず、CPU22は、書き込みデータの退避処理を実行する。書き込みデータの退避処理は、
図28を用いて説明した第2実施形態の第3具体例と同様である。本例では、CPU22は、退避領域SRのブロックBLK_S8~S11に、データD12、D13、及びD26、並びにパリティデータPs2を書き込む。
【0287】
次に、CPU22は、1回も不揮発化されていないパリティデータPU0及びPT0がパリティバッファ252にあるため(
図31のS2101_True)、
図33を用いて説明した第3実施形態の第2具体例と同様に、パリティバッファ252のパリティデータの退避処理を実行する。すなわち、CPU22は、パリティデータPU0、及び、パリティデータPT0を退避領域SRに退避させる(S2102)。
【0288】
CPU22は、退避動作終了後、ホスト2に、フラッシュコマンドに対する完了応答を送信する。
【0289】
第4実施形態の第2具体例に示すように、CPU22は、第2実施形態の第3具体例、及び、第3実施形態の第2具体例と同様の制御を行うことができる。
【0290】
4.4 本実施形態に係る効果
本実施形態に係る構成であれば、第2実施形態と第3実施形態をあわせた効果が得られる。
【0291】
5.変形例等
上記実施形態に係るメモリシステム(3)は、不揮発性メモリ(10)と、メモリコントローラ(20)と、を備える。不揮発性メモリ(10)は、第1ビット(Middleビット)及び第2ビット(Upperビット)を含む複数ビットのデータを不揮発に記憶するように構成された第1メモリセル(MC)と、少なくとも1ビットのデータを不揮発に記憶するように構成された第2メモリセル(MC)と、を含む。メモリコントローラ(20)は、ホストからコマンド(フラッシュコマンド)を受信したことに応じ退避動作を実行し、退避動作において、第1メモリセルが第1ビットとして第1ビットデータを記憶し、且つ、第1メモリセルが第2ビットとしてデータを記憶していないことに応じ、第1ビットデータを第2メモリセルに書き込んだ後に、コマンドに対する完了応答をホストに送信する、ように構成される。
【0292】
上記実施形態により、データの信頼性が向上したメモリシステムを提供できる。
【0293】
なお、実施形態は上記で説明した形態に限られず、種々の変形が可能である。また、上記実施形態は、可能な限り組み合わせることができる。
【0294】
更に、上記実施形態における「接続」とは、間に例えばトランジスタあるいは抵抗等、他の何かを介在させて間接的に接続されている状態も含む。
【0295】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0296】
1…情報処理システム、2…ホスト、3…メモリシステム、10…不揮発性メモリ、11…メモリチップ、14…シーケンサ、20…メモリコントローラ、21…ホストインターフェイス回路、22…CPU、23…ROM、24…RAM、25…バッファメモリ、26…ECC回路、27…NANDコントローラ、101…入出力回路、102…ロジック制御回路、103…アドレスレジスタ、104…コマンドレジスタ、105…シーケンサ、106…レディ/ビジー回路、107…メモリセルアレイ、108…ロウデコーダ、109…センスアンプ、110…データレジスタ、111…カラムデコーダ、241…退避フラグテーブル、241a…ライトバッファ用退避フラグテーブル241a…ユーザデータ領域用退避フラグテーブル、251…ライトバッファ、252…パリティバッファ