(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024043939
(43)【公開日】2024-04-02
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G06F 12/02 20060101AFI20240326BHJP
G06F 12/00 20060101ALI20240326BHJP
【FI】
G06F12/02 530E
G06F12/02 510A
G06F12/00 597U
G06F12/00 591
【審査請求】未請求
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2022149190
(22)【出願日】2022-09-20
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】和久津 隆司
(72)【発明者】
【氏名】中里 康明
(72)【発明者】
【氏名】中野 武
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA10
5B160AA12
5B160AA14
(57)【要約】
【課題】利便性が高いメモリシステムを提供すること。
【解決手段】コントローラは、不揮発性メモリが備える複数のブロックのうちの第1複数のブロックを第1領域にアサインし、第2複数のブロックを第2領域にアサインし、第3複数のブロックを第3領域にアサインする。コントローラは、第1領域にアサインされた各ブロックを第1モードで使用し、第2領域にアサインされた各ブロックを第1モードよりもメモリセル当たりにライトされる値のビット数が多い第2モードで使用し、第3領域にアサインされた各ブロックを第1モードまたは第2モードで使用する。コントローラは、ホスト装置から受信したデータを、第1領域および第3領域のうちのホスト装置からの指定に応じた領域に書き込む。コントローラは、第1領域および第3領域に書き込まれた有効データを第2領域に転記する。
【選択図】
図10
【特許請求の範囲】
【請求項1】
ホスト装置に接続可能なメモリシステムであって、
それぞれが複数のメモリセルを含み、それぞれがメモリセル当たりに第1の数のビットの値が書き込まれる第1モードおよびメモリセル当たりに前記第1の数より大きい第2の数のビットの値が書き込まれる第2モードでデータの書き込みが可能な、複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、
前記複数のブロックのうちの第1複数のブロックを第1領域にアサインし、
前記複数のブロックのうちの前記第1複数のブロックと異なる第2複数のブロックを第2領域にアサインし、
前記複数のブロックのうちの前記第1複数のブロックおよび前記第2複数のブロックのいずれとも異なる第3複数のブロックを第3領域にアサインし、
前記第1領域にアサインされた各ブロックを前記第1モードで使用し、
前記第2領域にアサインされた各ブロックを前記第2モードで使用し、
前記第3領域にアサインされた各ブロックを前記第1モードまたは前記第2モードで使用し、
前記ホスト装置から前記第1領域および前記第3領域のうちの書き込み先の領域の指定を受信し、
前記ホスト装置から受信したデータを、前記第1領域および前記第3領域のうちの前記指定に応じた領域に書き込み、
前記第1領域に書き込まれた有効データを前記第2領域に転記することで、前記第1複数のブロックのうちにフリーブロックを生成し、
前記第3領域に書き込まれた有効データを前記第2領域に転記することで、前記第3複数のブロックのうちにフリーブロックを生成する、
ように構成されたコントローラと、
を備えるメモリシステム。
【請求項2】
前記コントローラは、
前記第2領域に格納されている有効データを前記第2複数のブロック間で転記することで、前記第2複数のブロックのうちにフリーブロックを生成し、
前記第2複数のブロックのうちのフリーブロックの数と、前記第3複数のブロックのうちのフリーブロックの数と、に応じて前記第2領域と前記第3領域との間でブロックのアサイン先を変更する、
ように構成された、
請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、前記第2複数のブロックのうちのフリーブロックの数が第1しきい値より少ない場合、前記第3複数のブロックのうちの少なくとも一を前記第2領域にアサインする、ように構成された、
請求項2に記載のメモリシステム。
【請求項4】
前記コントローラは、前記第2複数のブロックのうちのフリーブロックの数が第1しきい値より少なく、かつ前記第3領域の容量が第2しきい値より大きい場合、前記第3複数のブロックのうちの少なくとも一を前記第2領域にアサインする、ように構成された、
請求項2に記載のメモリシステム。
【請求項5】
前記コントローラは、前記第2複数のブロックのうちのフリーブロックの数が前記第1しきい値より多く、かつ前記第3複数のブロックのうちのフリーブロックの数が第3しきい値より少ない場合、前記第2複数のブロックのうちの少なくとも一を前記第3領域にアサインする、ように構成された、
請求項3に記載のメモリシステム。
【請求項6】
前記コントローラは、
前記第2複数のブロックのうちのフリーブロックの数が前記第1しきい値より多く、かつ前記第3複数のブロックのうちのフリーブロックの数が第3しきい値より少なく、かつ前記第2領域の容量が第4しきい値より大きい場合、前記第2複数のブロックのうちの少なくとも一を前記第1モードで使用するブロックとして前記第3領域にアサインし、
前記第2複数のブロックのうちのフリーブロックの数が前記第1しきい値より多く、かつ前記第3複数のブロックのうちのフリーブロックの数が前記第3しきい値より少なく、かつ前記第2領域の容量が前記第4しきい値より小さい場合、前記第2複数のブロックのうちの少なくとも一を前記第2モードで使用するブロックとして前記第3領域にアサインする、ように構成された、
請求項3に記載のメモリシステム。
【請求項7】
前記コントローラは、前記ホスト装置から容量を指定するコマンドを受信するように構成され、
前記第3複数のブロックに含まれるブロックの数は、指定された前記容量に対応する、
請求項1に記載のメモリシステム。
【請求項8】
ホスト装置に接続可能なメモリシステムであって、
複数のメモリセルを備える記憶領域を備える不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、
前記記憶領域に、メモリセル当たりに前記ホスト装置からのコマンドで指定されたビット数の値を書き込むように構成されたコントローラと、
を備えるメモリシステム。
【請求項9】
前記コマンドは、メモリセル当たりに書き込まれる値のビット数が異なる複数のモードのうちの一を指定するコマンドであり、
前記コントローラは、前記記憶領域を前記コマンドによって指定されたモードで使用する、ように構成された、
請求項8に記載のメモリシステム。
【請求項10】
前記記憶領域は、複数のブロックを備え、
前記コントローラは、
前記記憶領域に格納されている有効なデータを前記複数のブロックの間で転記することで前記記憶領域のうちにフリーブロックを生成する転記処理を繰り返し実行し、
前記記憶領域をメモリセル当たりに第1の数のビットの値を書き込む第1モードで使用しているときに前記コマンドを受信し、前記コマンドはメモリセル当たりに前記第1の数と異なる第2の数の値を書き込む第2モードを指定する場合、前記転記処理において、転記先のブロックに書き込むときのモードを前記第1モードから前記第2モードに変更する、
ように構成された、
請求項9に記載のメモリシステム。
【請求項11】
前記コントローラは、前記コマンドに応じて前記複数のブロックのうちのフリーブロックである1つのブロックに対してイレース動作を実行し、イレース動作が実行された前記ブロックに対し、前記ホスト装置からのデータを前記第2モードで書き込む、ように構成された、
請求項10に記載のメモリシステム。
【請求項12】
前記記憶領域は、それぞれメモリセル当たりに書き込まれる値のビット数が異なる複数のブロックを備え、
前記コントローラは、前記複数のブロックのうちの書き込み先のブロックを前記コマンドに応じて決定する、ように構成された、
請求項8に記載のメモリシステム。
【請求項13】
ホスト装置に接続可能なメモリシステムであって、
それぞれが複数のメモリセルを含み、それぞれがメモリセル当たりに書き込まれる値のビット数が異なる複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、
前記ホスト装置からデータを受信した場合、前記データを前記複数のブロックのうちの前記データの性質に応じたブロックにライトする、ように構成されたコントローラと、
を備えるメモリシステム。
【請求項14】
前記性質は、リードアクセスの頻度、ライトアクセスの頻度、またはサイズである、
請求項13に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、メモリシステムに関する。
【背景技術】
【0002】
NAND型フラッシュメモリのような不揮発性メモリで構成されるメモリデバイスが広く普及している。NAND型フラッシュメモリの大容量化のために、プロセスが微細化されたり、メモリセルが立体的に配置されたりするようになってきている。これらに加え、1つのメモリセルに格納するデータを2ビット以上にするマルチレベル化が行われている。マルチレベル化は、NAND型フラッシュメモリを搭載したメモリシステムの低価格化に大きく貢献する。しかしながら、NAND型フラッシュメモリ単体の最大P/E(Program/Erase)サイクル数、ライト性能の劣化は避けられない。マルチレベル化から得られるメリットとデメリットとを考慮しながらできるだけ利便性が高くなるようにメモリシステムを設計することが求められる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許出願公開第2021/0232313号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
一つの実施形態は、利便性が高いメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0005】
一つの実施形態によれば、メモリシステムは、ホスト装置に接続可能である。メモリシステムは、複数のブロックを備える不揮発性メモリと、不揮発性メモリに電気的に接続されたコントローラと、を備える。複数のブロックのそれぞれは複数のメモリセルを含み、第1モードおよび第2モードでデータの書き込みが可能である。第1モードは、メモリセル当たりに第1の数のビットの値が書き込まれるモードである。第2モードは、メモリセル当たりに第1の数より大きい第2の数のビットの値が書き込まれるモードである。コントローラは、複数のブロックのうちの第1複数のブロックを第1領域にアサインする。コントローラは、複数のブロックのうちの第1複数のブロックと異なる第2複数のブロックを第2領域にアサインする。コントローラは、第1複数のブロックのうちの第1複数のブロックおよび第2複数のブロックのいずれとも異なる第3複数のブロックを第3領域にアサインする。コントローラは、第1領域にアサインされた各ブロックを第1モードで使用し、第2領域にアサインされた各ブロックを第2モードで使用し、第3領域にアサインされた各ブロックを第1モードまたは第2モードで使用する。コントローラは、ホスト装置から第1領域および第3領域のうちの書き込み先の領域の指定を受信する。コントローラは、ホスト装置から受信したデータを、第1領域および第3領域のうちの指定に応じた領域に書き込む。コントローラは、第1領域に書き込まれた有効データを第2領域に転記することで、第1複数のブロックのうちにフリーブロックを生成する。コントローラは、第3領域に書き込まれた有効データを第2領域に転記することで、第3複数のブロックのうちにフリーブロックを生成する。
【図面の簡単な説明】
【0006】
【
図1】第1の実施形態のメモリシステムの構成の一例を示す模式的な図。
【
図2】第1の実施形態のメモリチップの構成の一例を示す模式的な図。
【
図3】第1の実施形態のブロックの回路構成を示す模式的な図。
【
図4】SLCモード、MLCモード、TLCモード、QLCモードのそれぞれのケースにおける第1の実施形態の区分を説明する図。
【
図5】第1の実施形態のブロックの状態遷移の一例を示す図。
【
図6】第1の実施形態のNANDメモリの構成の一例を示す模式的な図。
【
図7】第1の実施形態のNANDメモリにおける転記処理の一例を説明するための模式的な図。
【
図8】第1の実施形態のライト先指定コマンドの使用方法の一例を示す模式的な図。
【
図9】第1の実施形態における第1SLC/TLCバッファ領域を制御する動作の一例を示すフローチャート。
【
図10】第1の実施形態におけるホストデータをNANDメモリにライトする動作の一例を示すフローチャート。
【
図11】第1の実施形態の変形例1のNANDメモリの構成の一例を示す模式的な図。
【
図12】第1の実施形態の変形例1におけるホストデータをNANDメモリにライトする動作の一例を示すフローチャート。
【
図13】第1の実施形態の変形例2における第1SLC/TLCバッファ領域の容量を設定する動作の一例を示す図。
【
図14】第2の実施形態のメモリシステムの構成の一例を示す模式的な図。
【
図15】第2の実施形態のNANDメモリの構成の一例を示す模式的な図。
【
図16】第2の実施形態におけるNANDメモリの記憶モードを設定する動作の一例を示す図。
【
図17】第2の実施形態変形例1におけるNANDメモリの記憶モードを設定する動作の一例を示す図。
【
図18】第2の実施形態の変形例2におけるNANDメモリの記憶モードを設定する動作の一例を示す図。
【
図19】第3の実施形態のNANDメモリの構成の一例を示す模式的な図。
【
図20】第3の実施形態におけるホストライトの動作の一例を示す図。
【
図21】第3の実施形態におけるメモリシステムの残容量を確認する動作の一例を示す図。
【
図22】第4の実施形態におけるホストライトの動作の一例を示す図。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【0008】
(第1の実施形態)
図1は、第1の実施形態のメモリシステム1の構成の一例を示す模式的な図である。
【0009】
メモリシステム1は、ホスト装置2と通信インタフェース3で接続される。ホスト装置2は、例えば情報処理装置に具備されるプロセッサである。情報処理装置は、パーソナルコンピュータ、携帯電話、スマートフォン、ポータブル音楽プレーヤー、撮像装置、などのコンピュータである。メモリシステム1は、例えばUFS(Universal Flash Storage)デバイスやSSD(Solid State Drive)である。通信インタフェース3の規格は、特定の規格に限定されない。
【0010】
メモリシステム1は、ホスト装置2からアクセスコマンド(例えば、ライトコマンドまたはリードコマンド)を受信する。メモリシステム1は、ライトコマンドに応じて、ライトが要求されたユーザデータを記憶する。メモリシステム1は、リードコマンドに応じて、リードが要求されたユーザデータをホスト装置2に送信する。
【0011】
アクセスコマンドは、論理アドレスを含む。メモリシステム1は、ホスト装置2に論理的なアドレス空間を提供する。論理アドレスは、当該アドレス空間における位置を示す。ホスト装置2は、論理アドレスを用いて、ユーザデータをライトする位置またはユーザデータのリードを行う位置を指定する。つまり、論理アドレスは、ホスト装置2から指定される位置情報である。なお、論理アドレスの一例はLBA(Logical Block Address)である。以下では、論理アドレスを、LBAと表記する。
【0012】
メモリシステム1は、コントローラ100とNAND型フラッシュメモリ(NANDメモリ)200とを備える。コントローラ100はメモリバス300によってNANDメモリ200に接続されている。NANDメモリ200は、不揮発性メモリの一例である。
【0013】
コントローラ100は、NANDメモリ200の制御を実行する。
【0014】
コントローラ100は、ホスト装置2からライトが要求されたデータをNANDメモリ200にライトしたり、ホスト装置2からリードが要求されたデータをNANDメモリ200からリードしてホスト装置2に送ったりする。つまり、コントローラ100は、ホスト装置2とNANDメモリ200との間のデータ転送を実行する。
【0015】
ホスト装置2からライトが要求されたデータを、ホスト装置2からの当該データの受信の後に初めてNANDメモリ200にライトすることを、ホストライト、と表記する。また、ホストライトによってNANDメモリ200にライトされるデータを、ホストデータと表記する。また、単位時間あたりにNANDメモリ200にライトされたホストデータの量を、ホストライト量と表記する。なお、ホストライト量および次に述べる転記ライト量を得るための単位時間は、設計者によって任意に設定され得る。
【0016】
さらに、コントローラ100は、NANDメモリ200内でデータを転記(transcribe)する転記処理を実行する。転記処理は、ガベージコレクションとも称され得る。
【0017】
転記処理は、NANDメモリ200からデータをリードする処理と、リードされたデータをNANDメモリ200にライトする処理と、を含む。転記処理の一環としてNANDメモリ200にデータをライトする処理を、転記ライトと表記する。また、転記ライトによってNANDメモリ200にライトされるデータを、転記データと表記する。また、単位時間当たりにNANDメモリ200にライトされた転記データの量を、転記ライト量と表記する。転記処理のさらに詳細な説明については後述される。
【0018】
さらに、コントローラ100は、NANDメモリ200の1つのメモリセルあたりにライトされる値のビット数の設定を変更することができる。1つのメモリセルあたりにライトされる値のビット数の設定を、記憶モード(storage mode)と表記する。メモリシステム1が取り得る記憶モード、および記憶モードの制御方法については後述する。
【0019】
コントローラ100は、プロセッサ101、ホストインタフェース回路(ホストI/F)102、RAM(Random Access Memory)103、バッファメモリ104、メモリインタフェース回路(メモリI/F)105、および内部バス106を備える。プロセッサ101、ホストI/F102、RAM103、バッファメモリ104、およびメモリI/F105は、内部バス106に電気的に接続されている。
【0020】
なお、コントローラ100は、SoC(System-on-a-Chip)として構成され得る。または、コントローラ100は、複数のチップによって構成され得る。コントローラ100は、FPGA(Field-Programmable Gate Array)またはASIC(Application Specific Integrated Circuit)としても構成され得る。RAM103またはバッファメモリ104は、コントローラ100の外部に配されていてもよい。
【0021】
ホストI/F102は、ホスト装置2からアクセスコマンドおよびデータなどを受信する。また、ホストI/F102は、NANDメモリ200からリードされたデータおよびアクセスコマンドに対する応答などをホスト装置2へ送信する。
【0022】
バッファメモリ104は、ホスト装置2とNANDメモリ200との間のデータ転送のためのバッファとして機能するメモリである。バッファメモリ104は、例えば、SRAM(Static Random Access Memory)またはDRAM(Dynamic Random Access Memory)などの揮発性メモリによって構成される。なお、バッファメモリ104を構成するメモリの種類はこれらに限定されない。バッファメモリ104は、任意の種類の不揮発性メモリによって構成されてもよい。
【0023】
メモリI/F105は、データ等をNANDメモリ200にライトする処理およびNANDメモリ200からデータ等をリードする処理を、プロセッサ101からの指示に基づいて制御する。
【0024】
プロセッサ101は、コンピュータプログラムを実行することができる回路である。プロセッサ101は、例えばCPU(Central Processing Unit)である。プロセッサ101は、予め所定位置(例えばNANDメモリ200)に格納されていたファームウェアプログラムに基づいてコントローラ100の各構成要素を統括的に制御し、これによってコントローラ100の種々の動作が実現される。
【0025】
なお、プロセッサ101が実行する処理の一部または全部は、専用ハードウェア回路によって実行されてもよい。
【0026】
RAM103は、プロセッサ101がキャッシュメモリまたはワーキングメモリとして使用することができるメモリである。RAM103は、DRAM、SRAM、またはこれらの組み合わせによって構成される。なお、RAM103を構成するメモリの種類はこれらに限定されない。
【0027】
コントローラ100は、これらの構成要素に替えて、またはこれらの構成要素に加えて、任意の構成要素を備え得る。例えば、コントローラ100は、NANDメモリ200にライトされるデータに対して符号化したり、NANDメモリ200からリードされたデータに対して復号化したりする回路を備えていてもよい。また、RAM103がバッファメモリとして使用され、バッファメモリ104が廃されてもよい。
【0028】
NANDメモリ200は、ユーザデータ等を不揮発に記憶できるメモリである。NANDメモリ200は、1以上のメモリチップ201によって構成される。ここでは、NANDメモリ200は、4つのメモリチップ201-0,201-1,201-2,201-3によって構成される。メモリバス300は、4つのチャネルch0~ch3を備え、4つのチャネルch0~ch3のそれぞれに1つのメモリチップ201が接続されている。なお、メモリバス300を構成するチャネルの数は4つに限定されない。各チャネルに接続されるメモリチップ201の数は1つに限定されない。
【0029】
図2は、第1の実施形態のメモリチップ201の構成の一例を示す模式的な図である。メモリチップ201は、周辺回路210およびメモリセルアレイ211を備える。
【0030】
メモリセルアレイ211は、複数のブロックBLK(BLK0、BLK1、BLK2、…)を備える。各ブロックBLKは、複数のストリングユニットSU(SU0、SU1、SU2、…)を備える。各ストリングユニットSUは、複数のNANDストリング212を備える。各NANDストリング212は、直列に接続された複数の不揮発性メモリセルトランジスタを含む。なお、ストリングユニットSU内のNANDストリング212の数は任意である。NANDストリング212内のメモリセルトランジスタの数は任意である。
【0031】
周辺回路210は、例えば、ロウデコーダ、カラムデコーダ、センスアンプ、ラッチ回路、および電圧発生回路を含む。周辺回路210は、コントローラ100からの指示に応じて、メモリセルアレイ211に対し、当該指示に対応した動作を実行する。コントローラ100からの指示は、ライト、リード、およびイレースを含む。
【0032】
図3は、第1の実施形態のブロックBLKの回路構成を示す模式的な図である。なお、各ブロックBLKは、同一の構成を有している。ブロックBLKは、例えば4つのストリングユニットSU0~SU3を有する。各ストリングユニットSUは、複数のNANDストリング212を含む。
【0033】
NANDストリング212の各々は、例えば64個のメモリセルトランジスタMT(MT0~MT63)および選択トランジスタST1、ST2を含んでいる。メモリセルトランジスタMTは、制御ゲートと電荷蓄積層とを備え、データを不揮発に保持する。そして64個のメモリセルトランジスタMT(MT0~MT63)は、選択トランジスタST1のソースと選択トランジスタST2のドレインとの間に直列接続されている。なお、メモリセルトランジスタMTは、電荷蓄積層に絶縁膜を用いたMONOS(Metal-Oxide-Nitride-Oxide-Silicon)型であってもよいし、電荷蓄積層に導電膜を用いたFG(Floating Gate)型であってもよい。さらに、NANDストリング212内のメモリセルトランジスタMTの個数は64個に限定されない。
【0034】
ストリングユニットSU0~SU3の各々における選択トランジスタST1のゲートは、各々の選択ゲート線SGD0~SGD3に接続される。これに対してストリングユニットSU0~SU3の各々における選択トランジスタST2のゲートは、例えば選択ゲート線SGSに共通接続される。ストリングユニットSU0~SU3の各々における選択トランジスタST2のゲートは、ストリングユニットSU毎に異なる選択ゲート線SGS0~SGS3(不図示)に接続されてもよい。同一のブロックBLK内にある各メモリセルトランジスタMT0~MT63の制御ゲートは、各々のワード線WL0~WL63に共通接続される。
【0035】
ストリングユニットSU内にある各NANDストリング212の選択トランジスタST1のドレインは、各々異なるビット線BL(BL0~BL(L-1)、但しLは2以上の自然数)に接続される。また、ビット線BLは、複数のブロックBLK間で各ストリングユニットSU内にある1つのNANDストリング212を共通に接続する。更に、各選択トランジスタST2のソースは、ソース線SLに共通に接続されている。
【0036】
つまりストリングユニットSUは、各々が異なるビット線BLに接続され、且つ同一の選択ゲート線SGDに接続された複数のNANDストリング212の集合である。またブロックBLKは、ワード線WLを共通にする複数のストリングユニットSUの集合である。そしてメモリセルアレイ211は、少なくとも1のビット線BLを共通にする複数のブロックBLKの集合である。
【0037】
周辺回路210によるライトおよびリードは、1つのストリングユニットSUにおける1つのワード線WLに接続されたメモリセルトランジスタMTに対して、一括して実行され得る。ライトおよびリードの際に、一括して選択されるメモリセルトランジスタMTの群をメモリセルグループMCGと表記する。そして、1つのメモリセルグループMCGにライトされる、あるいはリードされる1ビットのデータの集まりの単位をページと表記する。
【0038】
周辺回路210によるイレースは、ブロックBLK単位で実行される。即ち、1つのブロックBLKに格納された全てのデータは、まとめてイレースされる。
【0039】
なお、メモリセルアレイ211の構成は、
図2および
図3に示された構成に限定されない。例えば、メモリセルアレイ211は、NANDストリング212が2次元的に又は3次元的に配列された構成を有していてもよい。
【0040】
メモリセルアレイ211に対するライトにおいては、周辺回路210は、ライト先のメモリセルグループMCGを構成する各メモリセルトランジスタMTの電荷蓄積層に、データに対応した量の電荷を注入する。そして、メモリセルアレイ211からのリードにおいては、周辺回路210は、リード先のメモリセルグループMCGを構成する各メモリセルトランジスタMTから、電荷蓄積層に蓄積された電荷量に応じたデータをリードする。
【0041】
なお、メモリセルアレイ211へのデータのライトは、プログラムとも称される。
【0042】
各メモリセルトランジスタMTには、n(n≧1)ビットの値をライト可能である。nが1であるモードは、SLC(Single Level Cell)モードと称される。各メモリセルトランジスタMTにnビットの値がライトされる場合、メモリセルグループMCG当たりの記憶容量はnページ分のサイズに等しくなる。nが2であるモードは、MLC(Multi Level Cell)モードと称される。nが3であるモードは、TLC(Triple Level Cell)モードと称される。nが4であるモードは、QLC(Quad Level Cell)モードと称される。
【0043】
各メモリセルトランジスタMTのしきい値電圧は、周辺回路210によって一定の範囲内でコントロールされる。しきい値電圧のコントローラブルな範囲は、2のn乗の数の区分に分割され、各区分にそれぞれ異なるnビットの値がアサインされる。
【0044】
図4は、SLCモード、MLCモード、TLCモード、QLCモードのそれぞれのケースにおける第1の実施形態の区分を説明する図である。
図4に示すように、しきい値電圧の範囲(コントローラブルな範囲)は、複数の区分4に分割される。
【0045】
例えば、SLCモードでは、しきい値電圧の範囲は、2つの区分4aに分割される。MLCモードでは、しきい値電圧の範囲は、4つの区分4bに分割される。TLCモードでは、しきい値電圧の範囲は、8つの区分4cに分割される。QLCモードでは、しきい値電圧の範囲は、16個の区分4dに分割される。
【0046】
1つのメモリセルに保持される値のビット数が多いほど、各区分4の範囲が狭い。各区分4には、対応するビット数の値がアサインされる。SLCモードでは、高電圧側の区分4aに“0”がアサインされ、低電圧側の区分4aに“1”がアサインされる。MLCモードでは、4つの区分4bには、電圧が高い方から順番に、それぞれ、“10”、“00”、“01”、“11”がアサインされる。TLCモードでは、8つの区分4cには、電圧が高い方から順番に、それぞれ、“111”、“101”、“001”、“011”、“010”、“110”、“100”、“000”がアサインされる。QLCモードでは、16個の区分4dには、電圧が高い方から順番に、それぞれ、“1111”、“1011”、“0011”、“0001”、“1001”、“1101”、“0101”、“0111”、“0110”、“1110”、“1010”、“1000”、“1100”、“0100”、“0000”、“0010”がアサインされる。なお、各区分4に対する値のアサイン方法はこれらの例に限定されない。
【0047】
メモリセルアレイ211に対するライトにおいては、周辺回路210は、ライト先のメモリセルグループMCGを構成する各メモリセルトランジスタMTの電荷蓄積層に、ライト対象の値がアサインされた区分4に対応した量の電荷を注入する。
【0048】
メモリセルアレイ211からのリードにおいては、周辺回路210は、リード先のメモリセルグループMCGを構成する各メモリセルトランジスタMTのしきい値電圧が属する区分4を判断し、判断によって取得した区分4にアサインされた値を、リードデータとして出力する。
【0049】
メモリセルアレイ211に対するイレースにおいては、周辺回路210は、メモリセルアレイ211の基板側にイレース電圧を印加する。そして、周辺回路210は、イレース対象のブロックBLKの全てのワード線WLを接地電位に導通させる。すると、選択されたブロックBLK内の各メモリセルトランジスタMTにおいては、電荷蓄積層に蓄えられていた電荷が放電される。その結果、選択されたブロックBLK内の各メモリセルトランジスタMTの状態は、データがイレースされたと見なされる状態(即ち最も低電圧側の区分4)に遷移する。
【0050】
メモリシステム1は、記憶モードを設定したり変更したりすることが可能に構成される。より具体的には、コントローラ100は、1つのメモリセルあたりに第1の数のビットの値をライトする第1モードと、1つのメモリセルあたりに第2の数(ただし第2の数は第1の数よりも大きい)のビットの値をライトする第2モードと、のうちから各ブロックBLKの記憶モードを設定したり変更したりする。以降の説明では、第1モードはSLCモードであり、第2モードはTLCモードであることとする。なお、第1モードおよび第2モードのそれぞれはこの例に限定されない。また、記憶モードが個別に設定される最小単位の記憶領域は、ブロックBLKに限定されない。例えば、複数のブロックBLKを含む論理的なブロックの単位で記憶モードが個別に設定されてもよい。
【0051】
続いて、ブロックBLKの状態遷移について説明する。
図5は、第1の実施形態のブロックBLKの状態遷移の一例を示す図である。ハッチングされた矢印は、ブロックBLKの状態の遷移の方向を示しており、実線の矢印は、データの移動の方向を示している。
【0052】
ブロックBLKの状態は、少なくとも、オープンブロック(インプットブロックとも称される)、アクティブブロック、およびフリーブロックを取り得る。以降、オープンブロックは、オープンブロックの状態にあるブロックBLKを意味する場合がある。また、アクティブブロックは、アクティブブロックの状態にあるブロックBLKを意味する場合がある。また、フリーブロックは、フリーブロックの状態にあるブロックBLKを意味する場合がある。
【0053】
オープンブロックは、ライト中であってライトが完了していないブロックBLKである。即ち、オープンブロックは、データがライトされ得る領域を残した状態にあるブロックBLKである。
【0054】
アクティブブロックは、ライトが完了したブロックBLKである。アクティブブロックは、まだ再利用できないブロックBLKでもある。ライトが完了したブロックBLKのうちの、有効なデータが格納されているブロックBLKは、アクティブブロックとして管理される。再利用とは、ブロックBLKの状態をオープンブロックに遷移させることをいう。
【0055】
フリーブロックは、有効なデータが格納されていないブロックBLKである。フリーブロックは、再利用可能なブロックBLKである。
【0056】
例えば、オープンブロックに1ブロックBLK分のデータがライトされた後、そのオープンブロックはアクティブブロックに遷移する。アクティブブロックに格納されているデータの状態は、有効な状態と無効な状態とのうちの何れかである。
【0057】
アクティブブロックに或るデータ(第1のデータと表記する)が格納されている状態で、ホスト装置2から第1のデータが送られてきた際に指定されたLBAと同一のLBAが指定されて第2のデータが送られてきた場合、コントローラ100は、オープンブロックの空のメモリセルグループMCGに第2のデータをライトする。そして、コントローラ100は、アクティブブロックに格納されている第1のデータを無効なデータとして管理する。よって、アクティブブロックには、有効なデータと無効なデータとが混在し得る。
【0058】
なお、ホスト装置2が、古いデータをメモリシステム1に送った際に指定したLBAと同一のLBAを指定して新しいデータを送ることを、リライトと表記する。
【0059】
アクティブブロックは、転記処理によってフリーブロックに遷移する。転記処理は、アクティブブロックに格納されている有効データをオープンブロックに転記して、転記元のアクティブブロックに格納されている全てのデータを無効化する処理をいう。これによって、転記元のアクティブブロックはフリーブロックに遷移する。即ち、転記処理は、フリーブロックを生成する処理と考えることができる。なお、転記は、転送、再配置(relocation)、または移動と換言することができる。
【0060】
フリーブロックは、格納されているデータ(すなわち無効なデータ)がイレースされた後、オープンブロックに遷移する。
【0061】
なお、データが有効とは、そのデータが格納されているブロックBLK内の位置が何れかのLBAに対応付けられていることをいう。データが無効とは、そのデータが格納されているブロックBLK内の位置が何れのLBAにも対応付けられていないことをいう。また、「空の」状態とは、ここでは、無効なデータおよび有効なデータの何れも記憶されていない状態をいう。即ち、空のメモリセルグループMCGは、データのライトが可能な空き領域である。なお、ブロックBLK内の位置とLBAとの対応関係は、コントローラ100が維持および更新する。
【0062】
ホストデータおよび転記データはともに共通のオープンブロックにライトされてもよい。ホストデータがライトされるオープンブロックと転記データがライトされるオープンブロックとが個別に用意されてもよい。
【0063】
一度もホストライトが実行されたことが無いメモリシステム1においては、オープンブロックを除く全てのブロックBLKがフリーブロックの状態にある。ホストライトが開始されると、オープンブロックからアクティブブロックへの遷移と、フリーブロックからオープンブロックへの遷移とが開始する。そのため、アクティブブロックの数が増え、フリーブロックの数が減る。フリーブロックが枯渇した場合、フリーブロックの数を許容される下限値(例えば1つ)以上に維持するために、転記処理が開始される。なお、転記処理の開始の契機は、これに限定されない。転記処理によって、アクティブブロックであったブロックBLKが新たなフリーブロックとなる。
【0064】
続いて、第1の実施形態のNANDメモリ200の構成について説明する。
【0065】
1つのメモリセルあたりにライトされる値のビット数が大きくなるほど、メモリシステムの容量が増加し、メモリシステムのビット単価を抑制することができる。その反面、各区分4の範囲が狭くなるため、ライトの際にはしきい値電圧を緻密に制御する必要が生じ、ライトに要する時間が長くなる。つまり、1つのメモリセルあたりにライトされる値のビット数が大きくなるほど、ライトの性能が劣化する。
【0066】
また、メモリセルのしきい値電圧は、時間経過や種々の要因によって変動し得る。メモリセルのしきい値電圧が変動して区分4の境界を越えた場合、そのメモリセルに格納されているデータはプログラム時と異なるデータとしてリードされる。プログラム時と異なるデータがリードされた場合、コントローラが備える誤り訂正機能によって、そのデータはエラーとして検出され、正しいデータに訂正される。
【0067】
しかしながら、P/Eサイクルの実行数が多くなるほど、メモリセルのしきい値電圧が変動しやすくなる。そして、コントローラが有する誤り訂正機能による訂正能力には限界がある。よって、誤り訂正機能によって正しいデータが得られることを保証するために、P/Eサイクルの実行数には上限が設けられる。P/Eサイクルの実行数が上限に達すると、そのメモリセルは必要なレベルの信頼性が担保されないと見なされて、使用不可とされる。そして、1つのメモリセルあたりにライトされる値のビット数が大きいほど、各区分4の範囲が狭くてエラーが生じやすいため、P/Eサイクルの実行数の上限が小さい。
【0068】
メモリシステムでは、NANDメモリに対して、ホストライトに加えて、転記ライトが実行される。P/Eサイクルは、ホストライトのみならず、転記ライトによっても実行され得る。ホストライト量に対する転記ライト量の比率が大きい場合、ホストライト量に対する転記ライト量の比率が小さい場合に比べて、メモリシステムの寿命、即ちP/Eサイクルの実行数が上限値に達するまでの期間、が短くなる。よって、ホストライト量に対する転記ライト量の比率を出来るだけ抑制することが望まれる。
【0069】
第1の実施形態では、ライト性能の劣化を抑制しつつ、ホストライト量に対する転記ライト量の比率を抑制するために、NANDメモリ200は、次に説明する構成を備える。
【0070】
図6は、第1の実施形態のNANDメモリ200の構成の一例を示す模式的な図である。
図7は、第1の実施形態のNANDメモリ200における転記処理の一例を説明するための模式的な図である。
【0071】
図6に示すように、NANDメモリ200は、第1モード(ここではSLCモード)で使用されるよう設定されたブロックBLKのみで構成されたSLCバッファ領域220と、第1モードで使用されるよう設定されたブロックBLKのほかに第2モード(ここではTLCモード)で使用されるよう設定されたブロックBLKを含み得る第1SLC/TLCバッファ領域221と、第2モードで使用されるよう設定されたブロックBLKのみで構成されたTLCユーザデータ領域222と、を備える。
【0072】
以降では、XLCモード(XはS、M、T、またはQ)で使用されるよう設定されたブロックBLKを、XLCブロックと表記する。
【0073】
図7に示すように、SLCバッファ領域220、第1SLC/TLCバッファ領域221、およびTLCユーザデータ領域222のそれぞれは、オープンブロックおよび1以上のフリーブロックを含む。
【0074】
SLCモードのほうが、TLCモードよりもデータのライトが早く完了する。よって、ホスト装置2から見たメモリシステム1のスループットの向上を図るために、コントローラ100は、SLCバッファ領域220または第1SLC/TLCバッファ領域221のオープンブロックにホストデータをライトする。
【0075】
SLCバッファ領域220または第1SLC/TLCバッファ領域221においてオープンブロックがホストデータでいっぱいになると、そのオープンブロックへのライトが完了と見なされる。オープンブロックへのライトの完了に応じて、そのオープンブロックはアクティブブロックに遷移する。そして、そのオープンブロックが属する領域と同じ領域に属するフリーブロックのうちの1つが新たなオープンブロックに設定される。そして、所定の条件、例えばフリーブロックの数が設定下限値に到達することなど、が成立した場合、何れかのアクティブブロックが選択されて、選択されたアクティブブロック内の有効データは、転記処理によってTLCユーザデータ領域222のオープンブロックに移動せしめられる。選択されたアクティブブロック、つまり有効データの移動元のアクティブブロックは、有効データを記憶していない状態、即ちフリーブロックの状態に遷移する。
【0076】
このように、SLCバッファ領域220および第1SLC/TLCバッファ領域221にはホスト装置2から受信したホストデータがバッファされる。そして、SLCバッファ領域220および第1SLC/TLCバッファ領域221にバッファされたデータのうちの有効データはTLCユーザデータ領域222に移動される。
【0077】
なお、SLCバッファ領域220または第1SLC/TLCバッファ領域221からTLCユーザデータ領域222に有効データを移動させる処理を、第1の転記処理と表記する。
【0078】
TLCユーザデータ領域222では、オープンブロックが転記データでいっぱいになると、オープンブロックへのライトが完了と見なされる。オープンブロックへのライトの完了に応じて、当該オープンブロックは、アクティブブロックに遷移し、フリーブロックのうちの1つが新たなオープンブロックに遷移する。そして、所定の条件、例えばフリーブロックの数が設定下限値に到達することなど、が成立した場合、何れかのアクティブブロックが選択されて、選択されたアクティブブロック内の有効データは、転記処理によってオープンブロックに移動せしめられる。選択されたアクティブブロック、つまり有効データの移動元のアクティブブロックは、フリーブロックに遷移する。このような、TLCユーザデータ領域222におけるフリーブロックを生成するためにアクティブブロックからオープンブロックに有効データを移動させる処理を、第2の転記処理と表記する。
【0079】
SLCバッファ領域220または第1SLC/TLCバッファ領域221にライトされたデータは、第1の転記処理によってTLCユーザデータ領域222に転記されるか、または転記処理が行われることなく無効化される。
【0080】
転記処理が行われることなく無効化されるケースは、例えば、リライト(つまり既にライトされたデータと同じLBAが指定されたライト)によってデータが無効化されるケースと、既にライトされたデータの位置とLBAとの対応関係がTRIMコマンドによって解消されるケースと、を含む。TRIMコマンドは、LBAの指定を含む。TRIMコマンドは、指定したLBAに位置するデータが不要であることをメモリシステムに通知するコマンドである。TRIMコマンドによるLBAとデータの位置との対応関係を解消する動作を、トリム動作と表記する。
【0081】
つまり、第1の転記処理の実行頻度は、ホスト装置2によるリライトまたはTRIMコマンドの発行の頻度に影響される。リライトまたはトリム動作の頻度は、データ毎に異なり得る。短期間にリライトまたはトリム動作が実行される傾向があるデータの状態を、ホットと表記する。長期間リライトまたはトリム動作が実行されない傾向があるデータの状態を、コールドと表記する。
【0082】
第1の実施形態では、コントローラ100は、ホスト装置2からライト先指定コマンドおよび解除コマンドを受信可能に構成されている。ライト先指定コマンドは、SLCバッファ領域220および第1SLC/TLCバッファ領域221のうちの、第1SLC/TLCバッファ領域221にホストデータをライトするよう指示するコマンドである。解除コマンドは、ライト先指定コマンドによるライト先の指定を解除するよう指示するコマンドである。
【0083】
図8は、第1の実施形態のライト先指定コマンドの使用方法の一例を示す模式的な図である。
【0084】
例えば、ホスト装置2は、メモリシステム1に対し、ライト先指定コマンドを送信し(時刻t1)、その後、1以上のライトデータを送信する。そして、ホスト装置2は、メモリシステム1に対し、解除コマンドを送信する(時刻t2)。
【0085】
コントローラ100は、このような順にコマンドおよびライトデータを受信した場合、ライト先指定コマンドを受信したタイミングである時刻t1から解除コマンドを受信したタイミングである時刻t2までの期間には、受信した全てのライトデータについて、第1SLC/TLCバッファ領域221がライト先として指定されたと解釈する。解除コマンドを受信したタイミングである時刻t2から、次にライト先指定コマンドを受信するまでの期間には、コントローラ100は、受信した全てのライトデータについて、SLCバッファ領域220がライト先として指定されたと解釈する。
【0086】
ホスト装置2は、このようなコマンドを駆使することによって、例えばホットデータを第1SLC/TLCバッファ領域221にライトさせ、コールドデータをSLCバッファ領域220にライトさせるよう、メモリシステム1を制御する。このように、リライトまたはトリム動作によって無効化される確率が高いデータを第1SLC/TLCバッファ領域221に集めることで、転記データ量のうちの第1SLC/TLCバッファ領域221からTLCユーザデータ領域222に転記されるデータの量を抑制でき、これによって転記データ量を抑制できる。
【0087】
なお、ホスト装置とメモリシステムとの間の通信規格には、動作が未定義のコマンド値を含む規格がある。そのような規格では、動作が未定義のコマンド値をベンダーが任意の動作にアサインすることができる。このようなベンダーが任意の動作にアサインすることができるコマンド値は、ベンダースペシフィックと呼ばれている。ベンダーは、2つのベンダースペシフィックなコマンド値をライト先指定コマンドおよび解除コマンドとして使用してもよい。なお、ライト先指定コマンドおよび解除コマンドは、規格で定義されてもよい。
【0088】
また、ライト先指定コマンドおよび解除コマンドは、SLCバッファ領域220および第1SLC/TLCバッファ領域221のうちのライト先を指定するためのコマンドの一例である。ライト先を指定するためのコマンドはこれらに限定されない。
【0089】
第1SLC/TLCバッファ領域221の容量が大きいほど、データが第1SLC/TLCバッファ領域221にライトされてからそのデータが第1の転記処理の対象となるまでの期間が長くなる。よって、第1SLC/TLCバッファ領域221の容量が大きいほど、データがリライトまたはトリム動作によって無効化される確率が高くなり、第1SLC/TLCバッファ領域221からTLCユーザデータ領域222に転記されるデータの量が抑制される。
【0090】
そこで、第1の実施形態では、さらに、第1SLC/TLCバッファ領域221の容量が可変に構成される。TLCユーザデータ領域222に空いているブロックBLK、つまりフリーブロック、が十分あれば、そのうちのいくつかがTLCブロックまたはSLCブロックとして第1SLC/TLCバッファ領域221に追加される。よって、TLCユーザデータ領域222に空いているブロックBLKが多く存在する場合には、第1SLC/TLCバッファ領域221の容量が増加せしめられ、これによって第1の転記処理による転記ライト量を抑制する。
【0091】
SLCブロックとして第1SLC/TLCバッファ領域221に追加されたブロックBLKは、オープンブロックに遷移した後、SLCモードによりホストライトが実行される。TLCブロックとして第1SLC/TLCバッファ領域221に追加されたブロックBLKは、オープンブロックに遷移した後、TLCモードによりホストライトが実行される。第1SLC/TLCバッファ領域221が、SLCブロックとして追加されたブロックBLKと、TLCブロックとして追加されたブロックBLKとの双方を含む場合、コントローラ100は、SLCブロックとして追加されたブロックBLKを優先的にオープンブロックに遷移させる。
【0092】
なお、SLCバッファ領域220の容量は固定されていることとする。
【0093】
続いて、第1の実施形態のメモリシステム1の動作を説明する。
【0094】
図9は、第1の実施形態における第1SLC/TLCバッファ領域221を制御する動作の一例を示すフローチャートである。本図に示す一連の動作は、複数回、それぞれ異なるタイミングに実行される。本図に示す一連の動作は、定期的に実行されてもよいし、任意の事象を契機として実行されてもよい。
【0095】
まず、プロセッサ101は、TLCユーザデータ領域222を構成するTLCブロックのうちのフリーブロックの数が第1しきい値以下であるか否かを判定する(S101)。前述したように、TLCユーザデータ領域222にフリーブロックが十分あれば、TLCユーザデータ領域222を構成するブロックBLK群のうちのいくつかのブロックBLKが第1SLC/TLCバッファ領域221に追加される。第1しきい値は、第1SLC/TLCバッファ領域221にすでに追加されたブロックをTLCユーザデータ領域222に戻すか否かを判定するためのしきい値であり、設計者が任意に決定することができる。
【0096】
TLCユーザデータ領域222を構成するTLCブロックのうちのフリーブロックの数が第1しきい値以下である場合(S101:Yes)、プロセッサ101は、第1SLC/TLCバッファ領域221の容量が第2しきい値より大きいか否かを判定する(S102)。第2しきい値は、第1しきい値と同様に、第1SLC/TLCバッファ領域221にすでに追加されたブロックをTLCユーザデータ領域222に戻すか否かを判定するためのしきい値であり、設計者が任意に決定することができる。なお、ここでは、第1SLC/TLCバッファ領域221の容量は設定最低値を下回らないように制御されることとしている。
【0097】
第1SLC/TLCバッファ領域221の容量が第2しきい値より大きい場合(S102:Yes)、プロセッサ101は、第1の転記処理によって、第1SLC/TLCバッファ領域221内のデータの一部または全部をTLCユーザデータ領域222に転記する(S103)。そして、プロセッサ101は、第1SLC/TLCバッファ領域221を構成するブロックBLK群のうちの一部をTLCユーザデータ領域222にアサインすることで、第1SLC/TLCバッファ領域221の容量を第2しきい値まで低減させる(S104)。
【0098】
ステップS103では、プロセッサ101は、例えば、第1SLC/TLCバッファ領域221の容量を第2しきい値まで低減するために削減が必要なブロックBLKの数を計算する。そして、第1SLC/TLCバッファ領域221を構成するアクティブブロックまたはフリーブロックから、計算した数のブロックBLKを選択し、選択したブロックBLK内の有効データをTLCユーザデータ領域222に転記する。なお、選択したブロックBLK内に有効データが無ければ(つまり選択されたブロックBLKがフリーブロックである場合)、プロセッサ101は、ステップS103の処理をスキップしてもよい。プロセッサ101は、ステップS103の処理の後、またはステップS103の処理をスキップした後、選択したブロックBLKをTLCユーザデータ領域222にアサインすることで、選択したブロックBLKを第1SLC/TLCバッファ領域221からTLCユーザデータ領域222に移動させる。
【0099】
第1SLC/TLCバッファ領域221の容量が第2しきい値より大きくない場合(S102:No)、またはステップS104の後、第1SLC/TLCバッファ領域221を制御する動作は終了する。
【0100】
TLCユーザデータ領域222を構成するTLCブロックのうちのフリーブロックの数が第1しきい値以下でない場合(S101:No)、プロセッサ101は、第1SLC/TLCバッファ領域221を構成するブロックBLK群のうちのフリーブロックの数が第3しきい値以下であるか否かを判定する(S105)。第3しきい値は、第1SLC/TLCバッファ領域221の容量を増加させるか否かを判定するためのしきい値であり、設計者が任意に決定することができる。
【0101】
第1SLC/TLCバッファ領域221を構成するブロックBLK群のうちのフリーブロックの数が第3しきい値以下である場合(S105:Yes)、プロセッサ101は、TLCユーザデータ領域222の容量が第4しきい値以上であるか否かを判定する(S106)。第4しきい値は、TLCユーザデータ領域222から第1SLC/TLCバッファ領域221に移動させるブロックBLKをTLCブロックとして移動させるかSLCブロックとして移動させるかを判定するためのしきい値であり、設計者が任意に決定することができる。
【0102】
TLCユーザデータ領域222の容量が第4しきい値以上である場合(S106:Yes)、TLCユーザデータ領域222を構成するブロックBLKが豊富に存在すると考えることができるので、プロセッサ101は、TLCユーザデータ領域222を構成するブロックBLK群のうちの一部のフリーブロックをSLCブロックとして第1SLC/TLCバッファ領域221にアサインする(S107)。
【0103】
TLCユーザデータ領域222の容量が第4しきい値以上でない場合(S106:No)、プロセッサ101は、TLCユーザデータ領域222を構成するブロックBLK群のうちの一部のフリーブロックをTLCブロックとして第1SLC/TLCバッファ領域221にアサインする(S108)。
【0104】
ステップS107またはステップS108の後、第1SLC/TLCバッファ領域221を制御する動作が終了する。
【0105】
なお、ここでは、ステップS101の判定処理において、TLCユーザデータ領域222を構成するTLCブロックのうちのフリーブロックの数が第1しきい値と等しい場合、プロセッサ101がステップS102の処理を実行するものと説明した。しかしながら、TLCユーザデータ領域222を構成するTLCブロックのうちのフリーブロックの数が第1しきい値と等しい場合に、プロセッサ101は、ステップS105の処理を実行してもよい。
【0106】
また、ステップS102の判定処理において、第1SLC/TLCバッファ領域221の容量が第2しきい値と等しい場合、プロセッサ101が動作を終了すると説明した。しかしながら、第1SLC/TLCバッファ領域221の容量が第2しきい値と等しい場合に、プロセッサ101は、ステップS103の処理を実行してもよい。
【0107】
また、ステップS105の判定処理において、第1SLC/TLCバッファ領域221を構成するブロックBLK群のうちのフリーブロックの数が第3しきい値と等しい場合、プロセッサ101がステップS106の処理を実行すると説明した。しかしながら、第1SLC/TLCバッファ領域221を構成するブロックBLK群のうちのフリーブロックの数が第3しきい値と等しい場合、プロセッサ101は、動作を終了してもよい。
【0108】
また、ステップS106の判定処理において、TLCユーザデータ領域222の容量が第4しきい値と等しい場合、プロセッサ101がステップS107の処理を実行すると説明した。しかしながら、TLCユーザデータ領域222の容量が第4しきい値と等しい場合に、プロセッサ101は、ステップS108の処理を実行してもよい。
【0109】
図10は、第1の実施形態におけるホストデータをNANDメモリ200にライトする動作の一例を示すフローチャートである。
【0110】
メモリシステム1がホスト装置2からホストデータを受信すると(S201)、プロセッサ101は、ライト先指定コマンドを予め受信し、その後に解除コマンドを受信していないか否かを判定する(S202)。
【0111】
ライト先指定コマンドを予め受信し、その後に解除コマンドを受信していない場合(S202:Yes)、プロセッサ101は、コントローラ100を制御して、ホストデータを第1SLC/TLCバッファ領域221にライトする(S203)。
【0112】
ライト先指定コマンドを予め受信していないか、またはライト先指定コマンドを受信した後解除コマンドを受信していた場合(S202:No)、プロセッサ101は、SLCバッファ領域220にライト可能な領域があるか否かを判定する(S204)。
【0113】
具体的には、例えば、プロセッサ101は、オープンブロック内の新規のデータのライトが可能な領域とフリーブロックとの合計容量が、ホストデータのサイズ以上であるか否かを判定する。オープンブロック内の新規のデータのライトが可能な領域とフリーブロックの領域との合計容量が、ホストデータのサイズ以上である場合、SLCバッファ領域220にライト可能な領域があると判定する。オープンブロック内の新規のデータのライトが可能な領域とフリーブロックの領域との合計容量が、ホストデータのサイズ以上でない場合、SLCバッファ領域220にライト可能な領域がないと判定する。
【0114】
SLCバッファ領域220にライト可能な領域がある場合(S204:Yes)、プロセッサ101は、コントローラ100を制御して、ホストデータをSLCバッファ領域220にライトする(S205)。
【0115】
SLCバッファ領域220にライト可能な領域がない場合(S204:No)、プロセッサ101は、SLCバッファ領域220を転記元とした第1の転記処理によって、ライト可能な領域をあらかじめ設定された許容時間以内に作ることが可能か否かを判定する(S206)。
【0116】
第1の転記処理によってライト可能な領域を生成する場合、データを転記するだけでなく、転記によってフリーブロックになった転記元のブロックに対するイレース動作が必要である。そして、イレース動作は、単なるデータの転記に比べて多くの時間を要する。第1の実施形態のプロセッサ101は、ホストライトの性能の悪化をできるだけ抑制するため、転記およびイレース動作を含めたライト可能な領域を生成する処理に要する時間を見積り、見積もった時間があらかじめ設定された許容時間以内であるか否かを判定する。
【0117】
ライト可能な領域を許容時間以内に作ることが可能である場合(S206:Yes)、プロセッサ101は、コントローラ100を制御して、ライト可能な領域を第1の転記処理によってSLCバッファ領域220に生成し、ホストデータをSLCバッファ領域220にライトする(S207)。
【0118】
ライト可能な領域を許容時間以内に作ることが不可能である場合(S206:No)、プロセッサ101は、コントローラ100を制御して、ホストデータをTLCユーザデータ領域222にライトする(S208)。
【0119】
ステップS203、S205、S207、またはS208の後、ホストデータをNANDメモリ200にライトする動作が終了する。
【0120】
このように、第1の実施形態によれば、NANDメモリ200は、第1モードであるSLCモードで使用されるブロックBLKのみで構成されたSLCバッファ領域220と、SLCモードまたは第2モードであるTLCモードで使用されるブロックBLKで構成された第1SLC/TLCバッファ領域221と、TLCモードで使用されるブロックBLKのみで構成されたTLCユーザデータ領域222とを備える。コントローラ100は、SLCバッファ領域220および第1SLC/TLCバッファ領域221のうちの、バッファ先の領域を指定することができるコマンドであるライト先指定コマンドを受信可能である。コントローラ100は、ホスト装置2から受信したデータをSLCバッファ領域220および第1SLC/TLCバッファ領域221のうちの、ライト先指定コマンドに応じた領域にバッファする。
【0121】
これによって、ホスト装置2は、ライト先指定コマンドを駆使することによって、例えばホットデータを第1SLC/TLCバッファ領域221にライトさせ、コールドデータをSLCバッファ領域220にライトさせるよう、メモリシステム1を制御することが可能となる。このようにリライトまたはトリム動作によって無効化させる確率が高いデータを第1SLC/TLCバッファ領域221に集めることで、転記データ量のうちの第1SLC/TLCバッファ領域221からTLCユーザデータ領域222に転記されるデータの量を抑制でき、メモリシステム1の寿命を延ばすことが可能となる。つまり、ホスト装置2が転記データ量の抑制に関与して、メモリシステム1の寿命を延ばす使用方法をとることが可能である。よってホスト装置2にとってメモリシステム1の利便性が高い。
【0122】
また、第1の実施形態によれば、
図9を用いて説明したように、コントローラ100は、TLCユーザデータ領域222を構成するブロックBLK群のうちのフリーブロックの数が第1しきい値以下で、かつ第1SLC/TLCバッファ領域221の容量が第2しきい値より大きい場合、第1SLC/TLCバッファ領域221を構成するブロックBLK群のうちの少なくとも一のブロックBLKをTLCユーザデータ領域222にアサインすることで、TLCユーザデータ領域222の容量を増加させる。
【0123】
なお、コントローラ100は、TLCユーザデータ領域222を構成するブロックBLK群のうちのフリーブロックの数が第1しきい値より少ない場合に、第1SLC/TLCバッファ領域221を構成するブロックBLK群のうちの少なくとも一のブロックBLKをTLCユーザデータ領域222にアサインすることで、TLCユーザデータ領域222の容量を増加させてもよい。
【0124】
また、コントローラ100は、TLCユーザデータ領域222を構成するブロックBLK群のうちのフリーブロックの数が第1しきい値より多く、かつ第1SLC/TLCバッファ領域221を構成するブロックBLK群のうちのフリーブロックの数が第3しきい値以下である場合に、TLCユーザデータ領域222を構成するブロックBLK群のうちの少なくとも一のブロックBLKを第1SLC/TLCバッファ領域221にアサインすることで、第1SLC/TLCバッファ領域221の容量を増加させる。
【0125】
このように、コントローラ100は、TLCユーザデータ領域222を構成するブロックBLK群のうちのフリーブロックの数と、第1SLC/TLCバッファ領域221を構成するブロックBLK群のうちのフリーブロックの数と、に応じてTLCユーザデータ領域222と第1SLC/TLCバッファ領域221との間でブロックBLKのアサイン先を動的に変更する。
【0126】
前述したように第1SLC/TLCバッファ領域221の容量が大きいほど、データがリライトまたはトリム動作によって無効化される確率が高くなり、第1SLC/TLCバッファ領域221からTLCユーザデータ領域222に転記されるデータの量が抑制される。第1SLC/TLCバッファ領域221の容量が可変とされ、第1SLC/TLCバッファ領域221の容量を、TLCユーザデータ領域222の使用状況に応じて増加させることができる。よって、第1の転記処理による転記ライト量を柔軟に抑制することが可能である。
【0127】
また、第1の実施形態によれば、TLCユーザデータ領域222を構成するブロックBLK群のうちのフリーブロックの数が第1しきい値より多く、かつ第1SLC/TLCバッファ領域221を構成するブロックBLK群のうちのフリーブロックの数が第3しきい値以下である場合に、プロセッサ101は、第1SLC/TLCバッファ領域221にアサインするブロックBLKの記憶モードをTLCユーザデータ領域222の容量と第4しきい値との比較に応じて異ならせる。具体的には、TLCユーザデータ領域222の容量が第4しきい値以上である場合、プロセッサ101は、TLCユーザデータ領域222を構成するブロックBLK群のうちの少なくとも一のブロックBLKを第1SLC/TLCバッファ領域221にSLCブロックとしてアサインする。TLCユーザデータ領域222の容量が第4しきい値より小さい場合、プロセッサ101は、TLCユーザデータ領域222を構成するブロックBLK群のうちの少なくとも一のブロックBLKを第1SLC/TLCバッファ領域221にTLCブロックとしてアサインする。
【0128】
つまり、TLCユーザデータ領域222の容量が十分でない場合には、第1SLC/TLCバッファ領域221にTLCブロックが追加されることで、第1の転記処理による転記ライト量を抑制することができる。TLCユーザデータ領域222の容量が十分にある場合には、第1SLC/TLCバッファ領域221にSLCブロックが追加されることで、第1の転記処理による転記ライト量を抑制するとともにホストライトにかかるライト性能を向上させることができる。
【0129】
(第1の実施形態の変形例1)
NANDメモリ200には、SLCバッファ領域220、第1SLC/TLCバッファ領域221、およびTLCユーザデータ領域222に加えて、さらに別のバッファ領域が設けられていてもよい。
【0130】
第1の実施形態の変形例1によれば、NANDメモリ200は、一例として、
図11に示すように、SLCバッファ領域220、第1SLC/TLCバッファ領域221、第2SLC/TLCバッファ領域223、およびTLCユーザデータ領域222を備える。
【0131】
第2SLC/TLCバッファ領域223は、第1SLC/TLCバッファ領域221と同様、SLCブロックだけでなく、TLCブロックを含み得る、容量が可変のバッファ領域である。第2SLC/TLCバッファ領域223の容量を変更する処理は、例えば、第1SLC/TLCバッファ領域221の容量を変更する処理と同様である。なお、第2SLC/TLCバッファ領域223の容量を変更する処理は、第1SLC/TLCバッファ領域221の容量を変更する処理と相違していてもよい。
【0132】
図12は、第1の実施形態の変形例1におけるホストデータをNANDメモリ200にライトする動作の一例を示すフローチャートである。
【0133】
ステップS301~S305では、
図10において説明したステップS201~S205と同じ処理が実行される。
【0134】
SLCバッファ領域220にライト可能な領域がない場合(S304:No)、プロセッサ101は、例えばステップS304(またはS204)と同様の手順で、第2SLC/TLCバッファ領域223にライト可能な領域があるか否かを判定する(S306)。
【0135】
第2SLC/TLCバッファ領域223にライト可能な領域がある場合(S306:Yes)、プロセッサ101は、コントローラ100を制御して、ホストデータを第2SLC/TLCバッファ領域223にライトする(S307)。
【0136】
第2SLC/TLCバッファ領域223にライト可能な領域がない場合(S306:No)、プロセッサ101は、コントローラ100を制御して、ホストデータをTLCユーザデータ領域222にライトする(S308)。
【0137】
ステップS303、S305、S307、またはS308の後、ホストデータをNANDメモリ200にライトする動作が終了する。
【0138】
(第1の実施形態の変形例2)
第1の実施形態およびその変形例1によれば、第1SLC/TLCバッファ領域221の容量は、第1SLC/TLCバッファ領域221に属するフリーブロックの数およびTLCユーザデータ領域222に属するフリーブロックの数などに応じて動的に変更された。第1SLC/TLCバッファ領域221の容量は、必ずしも動的に変更されなくてもよい。
【0139】
例えば、メモリシステム1は、ホスト装置2から第1SLC/TLCバッファ領域221の容量の設定が可能に構成されてもよい。
【0140】
図13は、第1の実施形態の変形例2における第1SLC/TLCバッファ領域221の容量を設定する動作の一例を示す図である。
【0141】
まず、ホスト装置2は、メモリシステム1の初期化などの際に、第1SLC/TLCバッファ領域221の容量を設定する第1設定コマンドを送信する(S401)。第1設定コマンドは、ベンダースペシフィックなコマンド値を用いて生成されたものであってもよいし、規格で定義されたものであってもよい。第1設定コマンドは、第1SLC/TLCバッファ領域221の容量設定値を含む。つまり、第1設定コマンドは、容量を指定するコマンドである。
【0142】
コントローラ100が第1設定コマンドを受信すると、プロセッサ101は、TLCユーザデータ領域222を構成するブロックBLK群のうちから、容量設定値に相当する数のブロックBLKを第1SLC/TLCバッファ領域221にアサインする(S402)。プロセッサ101は、容量設定値に相当する数のブロックBLKのうちの全てをSLCブロックとして第1SLC/TLCバッファ領域221にアサインしてもよいし、全てをTLCブロックとして第1SLC/TLCバッファ領域221にアサインしてもよいし、一部をSLCブロック、他をTLCブロックとして第1SLC/TLCバッファ領域221にアサインしてもよい。
【0143】
このように、コントローラ100は、容量を指定する第1設定コマンドを受信し、指定された容量に対応する数のブロックBLKを第1SLC/TLCバッファ領域221にアサインしてもよい。
【0144】
ホスト装置2は、メモリシステム1にライトするホットデータの量または頻度に応じて第1SLC/TLCバッファ領域221の設定することが可能である。よって、メモリシステム1は、ホスト装置2にとっての利便性が高い。
【0145】
(第2の実施形態)
近年では、メモリセルの微細化が進むに応じて、市販されているメモリシステムの表記容量(user capacity)が増加してきている。使用用途によってはメモリシステムの表記容量が過剰であるケースがある。
【0146】
また、メモリセルの微細化が進むに応じて、メモリセルに格納されたデータの信頼性も低下する傾向がある。
【0147】
また、前述したように、1つのメモリセルあたりにライトされる値のビット数が大きいほど、各区分4の範囲が狭くてエラーが生じやすいため、メモリセルに格納されたデータの信頼性が低く、P/Eサイクルの実行数の上限が低く設定される。よって、1つのメモリセルあたりにライトされる値のビット数が大きいほど、メモリシステムを使用可能な期間(つまり寿命)が短くなる。
【0148】
また、1つのメモリセルあたりにライトされる値のビット数が大きいほど、ライト性能が劣化する。
【0149】
第2の実施形態では、ホスト装置からのコマンドによって記憶モードの設定が可能なメモリシステムについて説明する。第2の実施形態のメモリシステムの使用者は、メモリシステムに求める容量、寿命、ライト性能などを考慮したうえで、メモリシステムの記憶モードを、ホスト装置を介して設定することが可能である。
【0150】
第2の実施形態のメモリシステムを、メモリシステム1aと表記し、メモリシステム1aについて説明する。なお、第1の実施形態と異なる事項について説明し、第1の実施形態と同じ事項については説明を省略するかまたは簡略的に説明する。
【0151】
図14は、第2の実施形態のメモリシステム1aの構成の一例を示す模式的な図である。
【0152】
メモリシステム1aは、ホスト装置2と通信インタフェース3で接続される。メモリシステム1aは、コントローラ100aとNANDメモリ200とを備える。コントローラ100aはメモリバス300によってNANDメモリ200に接続されている。
【0153】
コントローラ100aは、プロセッサ101a、ホストI/F102、RAM103、バッファメモリ104、メモリI/F105、および内部バス106を備える。プロセッサ101、ホストI/F102、RAM103、バッファメモリ104、およびメモリI/F105は、内部バス106に電気的に接続されている。
【0154】
プロセッサ101aは、コンピュータプログラムを実行することができる回路である。プロセッサ101aは、例えばCPUである。プロセッサ101aは、予め所定位置(例えばNANDメモリ200)に格納されていたファームウェアプログラムに基づいてコントローラ100aの各構成要素を統括的に制御し、これによってコントローラ100aの種々の動作が実現される。
【0155】
なお、プロセッサ101aが実行する処理の一部または全部は、専用ハードウェア回路によって実行されてもよい。
【0156】
プロセッサ101aは、ホスト装置2から記憶モードを設定する第2設定コマンドを解釈し、実行することができる。
【0157】
第2設定コマンドは、ベンダースペシフィックなコマンド値を用いて生成されたものであってもよいし、規格で定義されたものであってもよい。第2設定コマンドは、複数の記憶モードのうちの一の指定を含む。プロセッサ101aは、第2設定コマンドに応じて、NANDメモリ200を構成する1以上のブロックBLKの記憶モードを、第2設定コマンドによって指定された記憶モードに設定する。
【0158】
図15は、第2の実施形態のNANDメモリ200の構成の一例を示す模式的な図である。
【0159】
図15に示すように、NANDメモリ200は、SLCモードで使用されるよう設定されたブロックBLKのみで構成されたSLCシステム領域230と、記憶モードが任意に設定可能なユーザデータ領域240と、を備える。
【0160】
SLCシステム領域230には、メモリシステム1aのファームウェアプログラムおよび管理情報が格納される。管理情報は、例えば、LBAとNANDメモリ200内の位置との対応関係を記録した論物アドレス変換テーブルを含む。つまり、SLCシステム領域230は、メモリシステム1aの動作に必要なデータ、つまりシステムデータ、が格納される専用の領域であり、ユーザデータは格納されない。システムデータがメモリシステム1aから喪失すると、メモリシステム1aが正しく動作することが不可能になり得る。よって、SLCシステム領域230は、最も信頼性が高い記憶モードであるSLCモードで使用されるブロックBLKによって構成される。
【0161】
ユーザデータ領域240は、ホスト装置2から受信したユーザデータが格納される領域である。なお、ユーザデータ領域240には、ユーザデータに加えてLBA情報などのメタデータや誤り訂正符号が格納されてもよい。
【0162】
ユーザデータ領域240を構成するブロックBLK群の記憶モードは、ホスト装置2からの第2設定コマンドによって設定が可能である。一例では、ユーザデータ領域240を構成するブロックBLK群の記憶モードは、SLCモード、MLCモード、TLCモード、およびQLCモードのうちから任意の記憶モードが設定できる。なお、ホスト装置2からの第2設定コマンドによって設定が可能な記憶モードの一覧はこれに限定されない。
【0163】
図16は、第2の実施形態のNANDメモリ200の記憶モードを設定する動作の一例を示す図である。
【0164】
まず、ホスト装置2は、メモリシステム1aの初期化などの際に、NANDメモリ200の記憶モードを設定する第2設定コマンドを送信する(S501)。第2設定コマンドは、複数の記憶モードのうちの一の指定を含む。コントローラ100aが第2設定コマンドを受信すると、以降にユーザデータ領域240にアクセスする際には、プロセッサ101aは、ユーザデータ領域240を構成する全ブロックBLKを、第2設定コマンドによって指定された記憶モードで使用する(S502)。
【0165】
このように、第2の実施形態によれば、コントローラ100aは、ユーザデータ領域240を第2設定コマンドによって指定された記憶モードで使用する。
【0166】
よって、メモリシステム1aの使用者は、メモリシステム1aに求める容量、寿命、ライト性能などを考慮したうえで、メモリシステム1aの記憶モードを、ホスト装置2を介して設定することが可能である。よって、メモリシステム1aの利便性が高い。
【0167】
(第2の実施形態の変形例1)
第2の実施形態の変形例1として、任意のタイミングでNANDメモリ200の記憶モードを設定する動作について説明する。
【0168】
図17は、第2の実施形態の変形例1におけるNANDメモリ200の記憶モードを設定する動作の一例を示す図である。
【0169】
第2の実施形態では、記憶モードの変更によってユーザデータ領域240が初期化される。よって、ホスト装置2は、まず、既にユーザデータ領域240にライトしたデータのうちの必要なデータをすべてリードするために、リードコマンドをメモリシステム1aに送信する(S601)。
【0170】
コントローラ100aは、リードコマンドに応じて、指定されたデータをNANDメモリ200から取得し(S602)、取得したデータをホスト装置2に転送する(S603)。
【0171】
なお、ステップS601~S603の処理は複数回、繰り返され得る。
【0172】
ホスト装置2は、ユーザデータ領域240から必要なデータを全てリードした後、NANDメモリ200の記憶モードを設定する第2設定コマンドを送信する(S604)。第2設定コマンドは、複数の記憶モードのうちの一の指定を含む。コントローラ100aが第2設定コマンドを受信すると、プロセッサ101aは、ユーザデータ領域240を初期化し、ユーザデータ領域240のアクセスに使用する記憶モードを第2設定コマンドによって指定された記憶モードに変更する(S605)。
【0173】
このように、記憶モードの変更の際にユーザデータ領域240が初期化される場合には、ホスト装置2は、ユーザデータ領域240内の必要なデータを全てリードした後、第2設定コマンドによって記憶モードの変更を指示する。記憶モードの変更後は、ホスト装置2は、ユーザデータ領域240から事前にリードしたデータをメモリシステム1aに書き戻してもよい。その場合、データは、第2設定コマンドによって指定された記憶モードでユーザデータ領域240にライトされる。
【0174】
(第2の実施形態の変形例2)
フリーブロックは、ホストライトによって消費される。よって、コントローラ100aは、ホストライトによってフリーブロックが枯渇することを防止するために、ユーザデータ領域240を構成するブロックBLK群に対して
図7を用いて説明した転記処理を繰り返し実行する。これによってコントローラ100aはフリーブロックを生成する。転記処理では、コントローラ100aは、ユーザデータ領域240内のデータをユーザデータ領域240を構成するブロックBLK間で転記することで、フリーブロックを生成する。
【0175】
第2の実施形態の変形例2によれば、コントローラ100aは、転記処理では、変更前の記憶モードで使用されるブロックBLKから変更後の記憶モードで使用されるブロックBLKに有効データを転記する。つまり、変更前の記憶モードでライトされたデータは、転記処理によって、変更後の記憶モードで別のブロックBLKに書き直される。よって、記憶モードの変更の前にホスト装置2がユーザデータ領域240から必要なデータをリードする処理を不要とすることができる。
【0176】
図18は、第2の実施形態の変形例2におけるNANDメモリ200の記憶モードを設定する動作の一例を示す図である。
【0177】
ホスト装置2は、NANDメモリ200の記憶モードを設定する第2設定コマンドを送信する(S701)。第2設定コマンドは、記憶モードの指定を含む。
【0178】
コントローラ100aが第2設定コマンドを受信すると、プロセッサ101aは、転記ライト用のオープンブロックとして設定されたブロックをアクティブブロックに設定する(S702)。プロセッサ101aは、例えばダミーデータ(パディングデータ)を書き込むことで、オープンブロックをアクティブブロックに設定してもよい。そして、プロセッサ101aは、フリーブロックであるブロックに対してイレース動作を実行し、イレース動作の実行後のブロックを転記ライト用の新しいオープンブロックとして設定する(S703)。そして、プロセッサ101aは、ユーザデータ領域240への転記ライトの際に使用する記憶モードを、指定された記憶モードに変更する(S704)。
【0179】
ステップS702~S704の処理の以降は、変更前の記憶モードでライトされたデータは、変更後の記憶モードで転記ライト用のオープンブロックに書き直される。よって、転記処理が継続して実行されることで、ユーザデータ領域240内は、変更前の記憶モードでライトされたデータから変更後の記憶モードでライトされたデータにリプレイスされていく。
【0180】
ステップS704の後、プロセッサ101aは、ホストライト用のオープンブロックとして設定されたブロックをアクティブブロックに設定する(S705)。プロセッサ101aは、例えばダミーデータ(パディングデータ)を書き込むことで、オープンブロックをアクティブブロックに設定してもよい。そして、プロセッサ101aは、フリーブロックであるブロックに対してイレース動作を実行し、イレース動作の実行後のブロックをホストライト用の新しいオープンブロックとして設定する(S706)。そして、プロセッサ101aは、ユーザデータ領域240へのホストライトの際に使用する記憶モードを、指定された記憶モードに変更する(S707)。
【0181】
ステップS705~S707の処理によって、ホストデータを変更後の記憶モードでユーザデータ領域240にライトする準備が整う。よって、プロセッサ101aは、ホスト装置2に対し、第2設定コマンドの実行完了を通知する(S708)。
【0182】
このように、第2の実施形態の変形例2によれば、コントローラ100aは、転記先のブロックBLK、つまりオープンブロックに転記データをライトするときのモードを第2設定コマンドに基づいて変更する。
【0183】
変更前の記憶モードでライトされたデータは、転記処理によって、変更後の記憶モードで別のブロックBLKに書き直される。よって、記憶モードの変更の前にホスト装置2がユーザデータ領域240から必要なデータをリードする処理を不要とすることができる。
【0184】
また、第2の実施形態の変形例2によれば、コントローラ100aは、第2設定コマンドに応じてフリーブロックである1つのブロックBLKに対してイレース動作を実行する。そして、コントローラ100aは、イレース動作が実行されたブロックBLKを新たなオープンブロックとして設定し、当該オープンブロックに対し第2設定コマンドが指定する記憶モードでホストライトを実行する。
【0185】
よって、ユーザデータ領域240を構成する全てのブロックBLKについて記憶モードの変更の完了を待つことなくホスト装置2からのライトコマンドを処理することが可能となる。
【0186】
なお、コントローラ100aは、第2設定コマンドに応じて転記処理を開始し、全てのブロックBLKについて記憶モードの変更が完了するまで転記処理を継続し、全てのブロックBLKについて記憶モードの変更が完了した後に、ホスト装置2からのライトコマンドを受け付けるように構成されてもよい。
【0187】
(第3の実施形態)
第3の実施形態のメモリシステムを、メモリシステム1bと表記し、メモリシステム1bについて説明する。また、第3の実施形態のコントローラをコントローラ100bと表記する。なお、第2の実施形態と異なる事項について説明し、第2の実施形態と同じ事項については説明を省略するかまたは簡略的に説明する。
【0188】
図19は、第3の実施形態のNANDメモリ200の構成の一例を示す模式的な図である。
【0189】
図19に示すように、NANDメモリ200は、SLCシステム領域230と、ユーザデータ領域241と、を備える。
【0190】
ユーザデータ領域241を構成するブロックBLK群は、それぞれ異なる記憶モードで使用される複数のオープンブロックを備える。ここでは一例として、ユーザデータ領域241を構成するブロックBLK群は、MLCモードで使用されるオープンブロック(MLCオープンブロックと表記する)、TLCモードで使用されるオープンブロック(TLCオープンブロックと表記する)、およびQLCモードで使用されるオープンブロック(QLCオープンブロックと表記する)を含む。
【0191】
ホストデータは、MLCオープンブロック、TLCオープンブロック、およびQLCオープンブロックのうちのホスト装置2から指定された記憶モードで使用されるオープンブロックにライトされる。
【0192】
ユーザデータ領域241を構成するブロックBLK群は、MLCオープンブロックから遷移したMLCモードで使用されるアクティブブロック(MLCアクティブブロック)の群、TLCオープンブロックから遷移したMLCモードで使用されるアクティブブロック(TLCアクティブブロック)の群、およびQLCオープンブロックから遷移したMLCモードで使用されるアクティブブロック(QLCアクティブブロック)の群を含む。
【0193】
さらに、ユーザデータ領域241を構成するブロックBLK群は、1以上のフリーブロックを含む。各フリーブロックは、MLCオープンブロック、TLCオープンブロック、またはQLCオープンブロックに遷移し得る。
【0194】
図20は、第3の実施形態におけるホストライトの動作の一例を示す図である。
【0195】
まず、ホスト装置2は、モード指定コマンドを発行する(S801)。モード指定コマンドは、ベンダースペシフィックなコマンド値を用いて生成されたものであってもよいし、規格で定義されたものであってもよい。モード指定コマンドは、複数の記憶モードのうちの一の指定を含む。
【0196】
ステップS801に続いて、ホスト装置2は、ライトコマンドおよびホストデータをメモリシステム1bに送信する(S802)。メモリシステム1bでは、コントローラ100bは、MLCオープンブロック、TLCオープンブロック、およびQLCオープンブロックのうちの、最後に受信したモード指定コマンドであるステップS801のモード指定コマンドによって指定された記憶モードで使用されるオープンブロックにホストデータをライトする(S803)。
【0197】
ホスト装置2がさらにライトコマンドおよびホストデータをメモリシステム1bに送信すると(S804)、メモリシステム1bでは、コントローラ100bは、MLCオープンブロック、TLCオープンブロック、およびQLCオープンブロックのうちの、最後に受信したモード指定コマンドであるステップS801のモード指定コマンドによって指定された記憶モードで使用されるオープンブロックにホストデータをライトする(S805)。
【0198】
ホスト装置2は、ライトの際の記憶モードを変更する場合、新たな記憶モードを指定したモード指定コマンドを発行する(S806)。その後、ホスト装置2がライトコマンドおよびホストデータをメモリシステム1bに送信すると(S807)、メモリシステム1bでは、コントローラ100bは、MLCオープンブロック、TLCオープンブロック、およびQLCオープンブロックのうちの、最後に受信したモード指定コマンドであるステップS806のモード指定コマンドによって指定された記憶モードで使用されるオープンブロックにホストデータをライトする(S808)。
【0199】
このように、第3の実施形態によれば、コントローラ100bは、複数の記憶モードのうちのホスト装置2から指定された記憶モードで使用されるオープンブロックにホストデータをライトする。
【0200】
よって、メモリシステム1bの使用者は、メモリシステム1bに求める容量、寿命、ライト性能などを考慮したうえで、データのライトに使用する記憶モードを、ホスト装置2を介して設定することが可能である。よって、メモリシステム1bの利便性が高い。
【0201】
なお、ホスト装置2は、所定のアルゴリズムに従って、データのライトに使用する記憶モードを決定してもよい。
【0202】
例えば、ホスト装置2は、頻繁にリードアクセスするデータをライトする際には、モード指定コマンドによってMLCモードを指定した後に当該データをライトする。頻繁にリードアクセスするデータの一例としては、ホスト装置2のオペレーティングシステムプログラムなどのような、ホスト装置2のシステムデータが挙げられる。
【0203】
また、例えば、ホスト装置2は、頻繁にリライトまたはトリム動作を行うデータをライトする際には、モード指定コマンドによってTLCモードを指定した後に当該データをライトする。頻繁にリライトまたはトリム動作が行われるデータの一例としては、ホスト装置2が管理するデータファイルのディレクトリ情報などが挙げられる。
【0204】
また、例えば、ホスト装置2は、サイズが比較的大きいデータをライトする際には、モード指定コマンドによってQLCモードを指定した後に当該データをライトする。サイズが比較的大きいデータの一例としては、ホスト装置2が管理するデータファイルの本体が挙げられる。
【0205】
このように、ホスト装置2は、ライトデータの性質に応じてライトの際の記憶モードを変更することができる。よって、メモリシステム1bの利便性が高い。
【0206】
なお、ホスト装置2は、メモリシステム1bの残容量を知ることが求められる。第3の実施形態によれば、コントローラ100bは、ホスト装置2からの問い合わせに応じて残容量を応答することが可能に構成される。
【0207】
図21は、第3の実施形態における残容量を確認する動作の一例を示す図である。
【0208】
ホスト装置2は、メモリシステム1bの残容量を確認したいとき、残容量問い合わせコマンドをメモリシステム1bに送信する(S901)。残容量問い合わせコマンドは、ベンダースペシフィックなコマンド値を用いて生成されたものであってもよいし、規格で定義されたものであってもよい。
【0209】
コントローラ100bは、残容量問い合わせコマンドに応じて、MLCモード、TLCモード、およびQLCモードのそれぞれを使用する場合のユーザデータ領域241の残容量を計算する(S902)。そして、コントローラ100bは、記憶モード毎に計算した残容量をホスト装置2に応答する(S903)。
【0210】
ホスト装置2は、受信した記憶モード毎の残容量に基づき、以後にデータをライトする際の記憶モードを選択することが可能である。よって、メモリシステム1bの利便性が高い。
【0211】
(第4の実施形態)
第3の実施形態では、コントローラ100bは、複数の記憶モードのうちのホスト装置2から指定された記憶モードで使用されるオープンブロックにホストデータをライトするよう構成された。
【0212】
第4の実施形態では、コントローラは、複数の記憶モードのうちのホストデータの性質に応じた記憶モードで使用されるオープンブロックにホストデータをライトする。
【0213】
第4の実施形態のメモリシステムを、メモリシステム1cと表記し、メモリシステム1cについて説明する。また、第4の実施形態のコントローラをコントローラ100cと表記する。なお、第3の実施形態と異なる事項について説明し、第3の実施形態と同じ事項については説明を省略するかまたは簡略的に説明する。
【0214】
図22は、第4の実施形態におけるホストライトの動作の一例を示す図である。
【0215】
メモリシステム1cがホスト装置2からライトコマンドおよびホストデータを受信すると(S1001)、コントローラ100cは、ホストデータに対するリードアクセスの頻度が所定の第5のしきい値以上であるか否かを判定する(S1002)。
【0216】
例えば、コントローラ100cは、LBA毎にリードアクセスの頻度を記録する。ステップS1002では、コントローラ100cは、ライトコマンドに含まれるLBAと、LBA毎のリードアクセスの頻度の記録値と、に基づいて、ホストデータに対するリードアクセスの頻度を推定する。なお、ホストデータに対するリードアクセスの頻度の推定方法はこれに限定されない。
【0217】
ホストデータに対するリードアクセスの頻度が第5のしきい値以上である場合(S1002:Yes)、コントローラ100cは、ホストデータをMLCオープンブロックにライトする(S1003)。
【0218】
ホストデータに対するリードアクセスの頻度が第5のしきい値以上でない場合(S1002:No)、コントローラ100cは、ホストデータに対するライトアクセスの頻度が所定の第6のしきい値以上であるか否かを判定する(S1004)。
【0219】
例えば、コントローラ100cは、LBA毎にライトアクセスの頻度を記録する。ステップS1004では、コントローラ100cは、ライトコマンドに含まれるLBAと、LBA毎のライトアクセスの頻度の記録値と、に基づいて、ホストデータに対するライトアクセスの頻度を推定する。なお、ホストデータに対するライトアクセスの頻度の推定方法はこれに限定されない。
【0220】
ホストデータに対するライトアクセスの頻度が第6のしきい値以上である場合(S1004:Yes)、コントローラ100cは、ホストデータをTLCオープンブロックにライトする(S1005)。
【0221】
ホストデータに対するライトアクセスの頻度が第6のしきい値以上でない場合(S1004:No)、コントローラ100cは、ホストデータをQLCオープンブロックにライトする(S1006)。
【0222】
ステップS1003、S1005、またはS1006の後、ホストライトの動作が終了する。
【0223】
このように、第4の実施形態によれば、コントローラ100cは、ホストデータに対するリードアクセスの頻度およびライトアクセスの頻度に応じてライト先のオープンブロックを決定する。
【0224】
なお、ライト先のオープンブロックの決定の基準は、リードアクセスの頻度およびライトアクセスの頻度に限定されない。コントローラ100cは、ホストデータの任意の性質に基づいてライト先のオープンブロックを決定し得る。ホストデータの性質は、例えば、リードアクセスの頻度、ライトアクセスの頻度、またはサイズなどである。
【0225】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0226】
1,1a,1b,1c メモリシステム、2 ホスト装置、3 通信インタフェース、4,4a,4b,4c,4d 区分、100,100a,100b,100c コントローラ、101,101a プロセッサ、102 ホストI/F、103 RAM、104 バッファメモリ、105 メモリI/F、106 内部バス、200 NANDメモリ、201,201-0,201-1,201-2,201-3 メモリチップ、210 周辺回路、211 メモリセルアレイ、212 NANDストリング、220 SLCバッファ領域、222 TLCユーザデータ領域、230 SLCシステム領域、240 ユーザデータ領域、241 ユーザデータ領域、300 メモリバス。