(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024087408
(43)【公開日】2024-07-01
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G06F 12/00 20060101AFI20240624BHJP
G06F 11/14 20060101ALI20240624BHJP
【FI】
G06F12/00 560B
G06F12/00 550E
G06F11/14 641D
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022202224
(22)【出願日】2022-12-19
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】庄野 温夫
(72)【発明者】
【氏名】岩崎 清隆
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA12
5B160AA14
5B160CB01
(57)【要約】
【課題】PLP動作時の消費電力量を抑制したメモリシステムを提供すること。
【解決手段】メモリコントローラは、エリア単位のアロケートからエリア単位に格納されたデータ単位に対するデータイン動作の完了までの期間のうちから設定される第1タイミングにおいて、バッファエリアの使用量が第1しきい値よりも少ない第1状態の場合には、データ単位に対するデータイン動作の完了に応じてエリア単位をデアロケートし、第1タイミングにおいて、バッファエリアの使用量が第1しきい値より大きい第2しきい値より多い第2状態の場合には、データ単位に対するプログラム動作の完了に応じてエリア単位をデアロケートする。
【選択図】
図13
【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
複数のメモリセルを含むメモリセルアレイを有する不揮発性の第1メモリと、
揮発性の第2メモリと、
前記ホストからライト要求を受信した場合、
前記第2メモリのバッファエリアにエリア単位をアロケートし、
前記ライト要求によって前記第1メモリへのライトが要求されたデータ単位を前記エリア単位に格納し、
前記第1メモリに前記データ単位を転送するデータイン動作と、前記データイン動作によって前記第1メモリに入力された前記データ単位を前記メモリセルアレイにライトするプログラム動作と、を含む、前記データ単位に対するライト動作を実行する、
ように構成されたメモリコントローラと、を備え、
前記メモリコントローラは、さらに、
前記エリア単位のアロケートから前記エリア単位に格納された前記データ単位に対する前記データイン動作の完了までの期間のうちから設定される第1タイミングにおいて、前記バッファエリアの使用量が第1しきい値よりも少ない第1状態の場合には、前記データ単位に対する前記データイン動作の完了に応じて前記エリア単位をデアロケートし、
前記第1タイミングにおいて、前記バッファエリアの使用量が前記第1しきい値より大きい第2しきい値より多い第2状態の場合には、前記データ単位に対する前記プログラム動作の完了に応じて前記エリア単位をデアロケートする、
ように構成された、
メモリシステム。
【請求項2】
電気エネルギーを蓄えるように構成された蓄電装置をさらに備え、
前記メモリコントローラは、さらに、
電源断が検知された後、前記蓄電装置に蓄えられた前記電気エネルギーによって動作し
前記データ単位に対する前記データイン動作を完了する第2タイミングが、電源断の検知の後であれば、前記データ単位に対する前記プログラム動作においてメモリセル当たりに第1の数のビット数を有するデータをライトする第1プログラム動作を実行し、
前記第2タイミングが電源断の検知の前であれば、前記データ単位に対する前記プログラム動作においてメモリセル当たりに前記第1の数より大きい第2の数のビット数を有するデータをライトする第2プログラム動作を実行する、
ように構成された、
請求項1に記載のメモリシステム。
【請求項3】
前記メモリコントローラは、さらに、
電源断が検知された後、
前記データ単位に対する前記第2プログラム動作が実行中であり、かつ前記データ単位が格納されていた前記エリア単位がデアロケート済みであれば、前記データ単位に対する前記第2プログラム動作を完了まで継続し、
前記データ単位に対する前記第2プログラム動作が実行中であり、かつ前記データ単位が格納されていた前記エリア単位がまだデアロケートされていなければ、前記データ単位の前記第2プログラム動作を中止し、前記まだデアロケートされていないエリア単位に格納されている前記データ単位を前記第1プログラム動作によって前記第1メモリにライトする、
ように構成された、
請求項2に記載のメモリシステム。
【請求項4】
前記メモリコントローラは、さらに
前記第1状態においては前記ホストから前記メモリコントローラへのデータの転送速度を制限せず、
前記第2状態においては前記ホストから前記メモリコントローラへのデータの転送速度を制限する、
ように構成された、
請求項1に記載のメモリシステム。
【請求項5】
前記第1状態は、前記バッファエリアの使用量が前記第1しきい値を下回ってから前記第2しきい値を超えるまでの前記バッファエリアの使用量の状態であり、
前記第2状態は、前記バッファエリアの使用量が前記第2しきい値を超えてから前記第1しきい値を下回るまでの前記バッファエリアの使用量の状態である、
請求項1に記載のメモリシステム。
【請求項6】
前記第2メモリは、第3メモリと、前記第3メモリよりも動作が低速で容量が大きい第4メモリと、を含み、
前記バッファエリアは、前記第3メモリに設けられる第1バッファエリアと、前記第4メモリに設けられる第2バッファエリアと、を含み、
前記第2しきい値は前記第1バッファエリアの容量と等しく、
前記メモリコントローラは、
前記第1バッファエリアに前記エリア単位のアロケートが可能なエリアがある場合には前記第1バッファエリアに前記エリア単位をアロケートし、
前記第1バッファエリアに前記エリア単位のアロケートが可能なエリアがない場合には前記第2バッファエリアに前記エリア単位をアロケートする、
ように構成された、
請求項1に記載のメモリシステム。
【請求項7】
前記第1タイミングは、前記データ単位に対する前記データイン動作が完了されたタイミングである、
請求項1から請求項6の何れか一項に記載のメモリシステム。
【請求項8】
前記第1タイミングは、前記エリア単位がアロケートされたタイミングである、
請求項1から請求項6の何れか一項に記載のメモリシステム。
【請求項9】
前記第1タイミングは、前記エリア単位がアロケートされたタイミングと、前記データ単位に対する前記データイン動作が完了されたタイミングと、を含む、
請求項1から請求項6の何れか一項に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、メモリシステムに関する。
【背景技術】
【0002】
従来、不揮発性メモリと揮発性メモリとを備えるメモリシステムが知られている。不揮発性メモリは、ストレージとして機能する。揮発性メモリは、不揮発性メモリに書き込まれる予定のデータのバッファとして使用される。
【0003】
メモリシステムは、キャパシタを有している場合がある。メモリシステムは、電源断(Power Loss)を検知した場合、揮発性メモリに格納されているデータを、キャパシタに蓄えられた電気エネルギーを用いて不揮発性メモリに書き込む。これによって、揮発性メモリに格納されたデータは、不揮発性メモリに退避(save)され、その結果、そのデータがメモリシステムから失われることが防止される。このような機能は、PLP(Power Loss Protection)機能として知られている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許出願公開第2022/0147444号明細書
【特許文献2】米国特許出願公開第2022/0291857号明細書
【特許文献3】米国特許第10346072号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
一つの実施形態は、PLP動作時の消費電力量を抑制したメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0006】
一つの実施形態によれば、メモリシステムはホストに接続可能である。メモリシステムは、不揮発性の第1メモリと、揮発性の第2メモリと、メモリコントローラと、を備える。第1メモリは、複数のメモリセルを含むメモリセルアレイを有する。メモリコントローラは、第2メモリのバッファエリアにエリア単位をアロケートし、ライト要求によって第1メモリへのライトが要求されたデータ単位をエリア単位に格納し、第1メモリにデータ単位を転送するデータイン動作と、データイン動作によって第1メモリに入力されたデータ単位をメモリセルアレイにライトするプログラム動作と、を含む、データ単位に対するライト動作を実行する。メモリコントローラは、さらに、エリア単位のアロケートからエリア単位に格納されたデータ単位に対するデータイン動作の完了までの期間のうちから設定される第1タイミングにおいて、バッファエリアの使用量が第1しきい値よりも少ない第1状態の場合には、データ単位に対するデータイン動作の完了に応じてエリア単位をデアロケートし、第1タイミングにおいて、バッファエリアの使用量が第1しきい値より大きい第2しきい値より多い第2状態の場合には、データ単位に対するプログラム動作の完了に応じてエリア単位をデアロケートする。
【図面の簡単な説明】
【0007】
【
図1】実施形態にかかるメモリシステムの構成の一例を示す模式的な図。
【
図2】実施形態のメモリチップの構成の一例を示す模式的な図。
【
図3】実施形態のブロックの回路構成を示す模式的な図。
【
図4】SLCモード、MLCモード、TLCモード、QLCモードのそれぞれのケースにおける実施形態の区分を説明する図。
【
図5】実施形態のメモリコントローラの機能構成の一例を示す模式的な図。
【
図6】実施形態のバッファ使用量の変化の一例と、バッファ使用量に応じたホスト転送速度の制御の一例と、を説明するための図。
【
図7】実施形態の第1デアロケート制御を説明するための模式的な図。
【
図8】実施形態の第2デアロケート制御を説明するための模式的な図。
【
図9】バッファ使用量の状態を判定する実施形態の動作の一例を示すフローチャート。
【
図10】実施形態のメモリシステムがホストからライト要求を受信した際の動作の一例を示すフローチャート。
【
図11】実施形態のメモリシステムの、電源断が検知されていない期間におけるNANDメモリへのライト動作の一例を示すフローチャート。
【
図12】実施形態のメモリシステムの、電源断が検知されたときのNANDメモリへのライト動作の一例を示すフローチャート。
【
図13】実施形態のメモリシステムの制御の一例を示す模式的な図である。
【
図14】実施形態の変形例1のメモリコントローラの機能構成の一例を示す模式的な図。
【
図15】実施形態の変形例1のメモリシステムがホストからライト要求を受信した際の動作の一例を示すフローチャート。
【
図16】実施形態の変形例1のメモリシステムの、電源断が検知されていない期間におけるNANDメモリへのライト動作の一例を示すフローチャート。
【
図17】実施形態の変形例2のメモリシステムの、電源断が検知されていない期間におけるNANDメモリへのライト動作の一例を示すフローチャート。
【発明を実施するための形態】
【0008】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【0009】
(実施形態)
図1は、実施形態にかかるメモリシステムの構成の一例を示す模式的な図である。
図1に示されるように、メモリシステム1は、ホスト2と所定の通信インタフェースで接続され得る。ホスト2は、例えばプロセッサ、パーソナルコンピュータ、携帯情報端末、またはサーバである。メモリシステム1は、ホスト2から種々の要求を受け付けることができる。種々の要求は、ライト要求またはリード要求などを含む。メモリシステム1は、外部電源3に接続された場合、外部電源3からの電力の供給を受ける。外部電源3はホスト2に内蔵されていてもよい。
【0010】
メモリシステム1は、メモリコントローラ11と、NAND型のフラッシュメモリ(NANDメモリ)12と、DRAM(Dynamic Random Access Memory)13と、電源IC(Power Management Integrated Circuit)14と、蓄電装置15と、を備える。
【0011】
NANDメモリ12は、ストレージとして機能する不揮発性メモリである。NANDメモリ12は、1以上のメモリチップCPを含む。ここでは1以上のメモリチップCPの一例として、8個のメモリチップCP0~CP7が図示されている。複数のメモリチップCPは樹脂などによって封止された1つのパッケージとして構成されてもよい。ここでは一例として、メモリチップCP0,CP1を含むメモリパッケージ20-0、メモリチップCP2,CP3を含むメモリパッケージ20-1、メモリチップCP4,CP5を含むメモリパッケージ20-2、メモリチップCP6,CP7を含むメモリパッケージ20-3が図示されている。
【0012】
メモリコントローラ11とNANDメモリ12とは、1以上のチャネルを介して接続される。ここでは一例として、メモリシステム1は2つのチャネルCH0,CH1を備える。2つのチャネルCH0,CH1はメモリコントローラ11に接続される。チャネルCH0にはメモリパッケージ20-0,20-1が接続され、チャネルCH1にはメモリパッケージ20-2,20-3が接続される。
【0013】
なお、メモリシステム1が備えるチャネルの数、メモリチップCPの数、メモリパッケージ20の数、およびメモリコントローラ11と各メモリチップCPとの配線はこの例に限定されない。
【0014】
メモリコントローラ11は、ホスト2とNANDメモリ12との間のデータ転送を含む様々な処理を実行する。そのための構成として、メモリコントローラ11は、ホストI/F(Interface)31、1以上のNANDC(NAND Controller)32、CPU(Central Processing Unit)33、およびSRAM(Static Random Access Memory)34を備える。
【0015】
ホストI/F31は、ホスト2との間で要求およびデータなどの情報の転送を制御する。
【0016】
CPU33は、ファームウェアプログラムに基づいてメモリコントローラ11全体の制御を実現する。
【0017】
NANDC32は、CPU33からの指示に基づいて、チャネルを介したNANDメモリ12に対するアクセスを行うためのコマンドを対象のメモリチップCPに転送したり、NANDメモリ12との間で当該コマンドに対応したデータの転送を行ったりする。NANDメモリ12に対するアクセスは、データのライト、データのリード、およびデータのイレースを含む。
【0018】
図1に示される例では、メモリコントローラ11は、1以上のNANDCの一例として、2つのNANDC32-0,32-1を備える。NANDC32-0はチャネルCH0を介したコマンドおよびデータの転送を制御し、NANDC32-1はチャネルCH1を介したコマンドおよびデータの転送を制御する。メモリコントローラ11が備えるNANDC32の数は2に限定されない。
【0019】
SRAM34は、DRAM13とともに、バッファまたはキャッシュとしてのエリアをメモリコントローラ11に提供する。例えば、メモリコントローラ11は、DRAM13やSRAM34を、ホスト2とNANDメモリ12との間で転送されるデータのバッファとして使用したり、論物アドレス変換情報などの各種管理情報を一時的に格納するエリアとして使用したりすることができる。論物アドレス変換情報は、ホスト2がデータの位置の指定に使用する論理アドレスと、NANDメモリ12における当該データが格納される位置を示す物理アドレスと、の対応を記録した情報である。
【0020】
DRAM13はSRAM34よりも動作が低速で、かつ容量が大きい。メモリコントローラ11は、データのバッファ先として、DRAM13よりもSRAM34を優先して選択する。データのバッファの制御に関しては後述される。
【0021】
電源IC14は、外部電源3から入力される電力に基づいて、メモリコントローラ11、NANDメモリ12、およびDRAM13を駆動するための電力を生成する。そして、電源IC14は、生成した電力をそれらに供給する。
【0022】
蓄電装置15は、電気エネルギーを蓄えることができる。蓄電装置15は、例えば充電可能なキャパシタまたは電池である。以下では、蓄電装置15をキャパシタ15と称する。外部電源3から電力が供給されているとき、電源IC14によってキャパシタ15は充電され、電気エネルギーを蓄える。電源断が発生した場合、即ち外部電源3からの電力の供給が停止した場合、電源IC14によって電力供給源が外部電源3からキャパシタ15に切り替えられる。これによって、キャパシタ15に蓄えられていた電気エネルギーに基づき、電力がメモリコントローラ11、NANDメモリ12、およびDRAM13に電源IC14を経由して供給される。メモリコントローラ11、NANDメモリ12、およびDRAM13は、外部電源3からの電力の供給が停止した後においても、しばらくの間、キャパシタ15に蓄えられていた電気エネルギーによって動作することができる。メモリコントローラ11は、キャパシタ15に蓄えられていた電気エネルギーを用いて、揮発性メモリ(この場合はDRAM13またはSRAM34)に格納されていたデータを不揮発性メモリ(この場合はNANDメモリ12)に退避するPLP動作を実行する。
【0023】
一例では、電源IC14は、外部電源3から供給される電圧を監視する。電圧が所定のレベルを下回った場合、電源IC14は、電源断が発生したと判断し、電源断信号をメモリコントローラ11が備えるCPU33に送信する。そして、電源IC14は、電力供給源を外部電源3からキャパシタ15に切り替える。CPU33は、電源IC14からの電源断信号に応じて、PLP動作を開始する。
【0024】
なお、電源断の検知を行う要素は電源IC14でなくてもよい。例えば、CPU33によって電源断の検知が行われてもよい。
【0025】
キャパシタ15としては任意のキャパシタが採用可能である。例えば、電解コンデンサ(electrolytic capacitor)または電気二重層コンデンサ(electrical double layer capacitor)がキャパシタ15として採用され得る。
【0026】
外部電源3からの電力供給の停止のパターンとして、メモリシステム1がホスト2から予告を受信してから電力の供給が停止されるパターンと、予告なく電力の供給が停止されるパターンとがあってもよい。メモリコントローラ11は、予告を受信した場合には予告に応じてPLP動作と同様の処理を含むメモリシステム1のシャットダウンを行い、予告なく電力の供給が停止された場合には電源断信号に応じてPLP動作を開始するよう、構成されてもよい。なお、本明細書においては、電源断は、少なくとも予告なく電力の供給が停止されるパターンを含む。
【0027】
なお、NANDメモリ12は、不揮発性の第1メモリの一例である。DRAM13およびSRAM34は、揮発性の第2メモリの一例である。SRAM34は第3メモリの一例である。DRAM13は第4メモリの一例である。
【0028】
図2は、実施形態のメモリチップCPの構成の一例を示す模式的な図である。メモリチップCPは、周辺回路210およびメモリセルアレイ211を備える。
【0029】
メモリセルアレイ211は、複数のブロックBLK(BLK0、BLK1、BLK2、…)を備える。各ブロックBLKは、複数のストリングユニットSU(SU0、SU1、SU2、…)を備える。各ストリングユニットSUは、複数のNANDストリング212を備える。各NANDストリング212は、直列に接続された複数の不揮発性メモリセルトランジスタを含む。なお、ストリングユニットSU内のNANDストリング212の数は任意である。NANDストリング212内のメモリセルトランジスタの数は任意である。
【0030】
周辺回路210は、例えば、ロウデコーダ、カラムデコーダ、センスアンプ、ラッチ回路、および電圧発生回路を含む。周辺回路210は、メモリコントローラ11からのコマンドに応じて、メモリセルアレイ211に対し、当該コマンドに対応した動作を実行する。
【0031】
なお、メモリコントローラ11からメモリチップCPへのコマンドは、データインコマンド、プログラムコマンド、センスコマンド、データアウトコマンド、イレースコマンド、などを含む。
【0032】
データインコマンドは、メモリコントローラ11からメモリチップCPに入力されるライトデータの受け付けを周辺回路210に指示するコマンドである。メモリコントローラ11からメモリチップCPへのライトデータの転送は、データイン動作とも称される。
【0033】
プログラムコマンドは、周辺回路210にプログラム動作の実行を指示するコマンドである。プログラム動作は、データイン動作によってメモリチップCP(より詳しくは周辺回路210が備える図示しないラッチ回路)に入力されたデータをメモリセルアレイ211にライトする動作である。
【0034】
センスコマンドは、周辺回路210にセンス動作の実行を指示するコマンドである。センス動作は、メモリセルアレイ211に格納されたデータを周辺回路210が備えるラッチ回路に転送する動作である。
【0035】
データアウトコマンドは、周辺回路210が備えるラッチ回路に格納されたデータのメモリコントローラ11への出力を周辺回路210に指示するコマンドである。データアウトコマンドに応じたメモリチップCPからメモリコントローラ11へのリードデータの転送は、データアウト動作とも称される。
【0036】
イレースコマンドは、周辺回路210にイレース動作の実行を指示するコマンドである。イレース動作は、メモリセルアレイ211に格納されたデータを消去する動作である。
【0037】
図3は、実施形態のブロックBLKの回路構成を示す模式的な図である。なお、各ブロックBLKは、同一の構成を有している。ブロックBLKは、例えば4つのストリングユニットSU0~SU3を有する。各ストリングユニットSUは、複数のNANDストリング212を含む。
【0038】
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個に限定されない。
【0039】
ストリングユニットSU0~SU3の各々に含まれる選択トランジスタST1のゲートは、選択ゲート線SGD0~SGD3にそれぞれ接続される。これに対してストリングユニットSU0~SU3の各々に含まれる選択トランジスタST2のゲートは、例えば選択ゲート線SGSに共通接続される。ストリングユニットSU0~SU3の各々に含まれる選択トランジスタST2のゲートは、ストリングユニットSU毎に異なる選択ゲート線SGS0~SGS3(不図示)にそれぞれ接続されてもよい。同一のブロックBLKに含まれる各メモリセルトランジスタMT0~MT63の制御ゲートは、ワード線WL0~WL63にそれぞれ共通接続される。
【0040】
ストリングユニットSUに含まれる各NANDストリング212の選択トランジスタST1のドレインは、各々異なるビット線BL(BL0~BL(L-1)、但しLは2以上の自然数)に接続される。また、ビット線BLは、複数のブロックBLK間で各ストリングユニットSUに含まれる1つのNANDストリング212を共通に接続する。更に、各選択トランジスタST2のソースは、ソース線SLに共通に接続されている。
【0041】
つまりストリングユニットSUは、各々が異なるビット線BLに接続され、且つ同一の選択ゲート線SGDに接続された複数のNANDストリング212の集合である。またブロックBLKは、ワード線WLを共通にする複数のストリングユニットSUの集合である。そしてメモリセルアレイ211は、少なくとも1のビット線BLを共通にする複数のブロックBLKの集合である。
【0042】
周辺回路210によるプログラム動作およびセンス動作は、1つのストリングユニットSUにおける1つのワード線WLに接続されたメモリセルトランジスタMTに対して、一括して実行され得る。プログラム動作およびセンス動作の際に一括して選択されるメモリセルトランジスタMTの群はメモリセルグループMCGと表記される。そして、1つのメモリセルグループMCGの各々のメモリセルトランジスタMTが記憶する1ビットのデータの集まりのサイズをページと表記する。
【0043】
周辺回路210によるイレース動作は、ブロックBLK単位で実行される。即ち、1つのブロックBLKに格納された全てのデータは、まとめてイレースされる。
【0044】
なお、メモリセルアレイ211の構成は、
図2および
図3に示された構成に限定されない。例えば、メモリセルアレイ211は、NANDストリング212が2次元的に又は3次元的に配列された構成を有していてもよい。
【0045】
プログラム動作においては、周辺回路210は、ライト先のメモリセルグループMCGを構成する各メモリセルトランジスタMTの電荷蓄積層に、データに対応した量の電荷を注入する。そして、センス動作においては、周辺回路210は、リード対象のデータが格納されたメモリセルグループMCGを構成する各メモリセルトランジスタMTから、電荷蓄積層に蓄積された電荷量に応じたデータをリードする。
【0046】
各メモリセルトランジスタ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)モードと称される。
【0047】
各メモリセルトランジスタMTのしきい値電圧は、周辺回路210によって一定の範囲内でコントロールされる。しきい値電圧のコントローラブルな範囲は、2のn乗の数の区分に分割され、各区分にそれぞれ異なるnビットの値がアサインされる。
【0048】
図4は、SLCモード、MLCモード、TLCモード、QLCモードのそれぞれのケースにおける実施形態の区分を説明する図である。
図4に示すように、しきい値電圧の範囲(コントローラブルな範囲)は、複数の区分4に分割される。
【0049】
例えば、SLCモードでは、しきい値電圧の範囲は、2つの区分4aに分割される。MLCモードでは、しきい値電圧の範囲は、4つの区分4bに分割される。TLCモードでは、しきい値電圧の範囲は、8つの区分4cに分割される。QLCモードでは、しきい値電圧の範囲は、16個の区分4dに分割される。
【0050】
1つのメモリセルトランジスタMTに記憶される値のビット数が多いほど、各区分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に対する値のアサイン方法はこれらの例に限定されない。
【0051】
プログラム動作においては、周辺回路210は、カラムアドレスに対応したビット線BLを選択する。周辺回路210は、選択されたビット線BLの電位をゼロとする。周辺回路210は、ロウアドレスに対応したワード線WLを選択し、選択されたワード線WLに、プログラミングパルスを印加する。すると、選択されたビット線BLおよび選択されたワード線WLとの交点に位置するメモリセルトランジスタMTの電荷蓄積層に電荷が注入され、その結果、メモリセルトランジスタMTのしきい値電圧が上昇する。周辺回路210は、所定のタイミングでしきい値電圧がライトデータに対応した目標の区分4に到達したか否かを確認する。周辺回路210は、メモリセルトランジスタMTのしきい値電圧が目標の区分4に到達するまで、プログラムパルスの印加を継続する。
【0052】
センス動作においては、周辺回路210は、リード先のメモリセルグループMCGを構成する各メモリセルトランジスタMTのしきい値電圧が属する区分4を決定し、決定した区分4にアサインされた値を、リードデータとして出力する。
【0053】
イレース動作においては、周辺回路210は、メモリセルアレイ211の基板側にイレース電圧を印加する。そして、周辺回路210は、イレース対象のブロックBLKの全てのワード線WLを接地電位に導通させる。すると、選択されたブロックBLK内の各メモリセルトランジスタMTにおいて、電荷蓄積層に蓄えられていた電荷が放電される。その結果、選択されたブロックBLK内の各メモリセルトランジスタMTの状態は、データがイレースされたと見なされる状態(即ち最も低電圧側の区分4)に遷移する。
【0054】
メモリシステム1は、記憶モードを設定したり変更したりすることが可能に構成される。より具体的には、メモリコントローラ11は、1つのメモリセルトランジスタMTあたりに第1の数のビット数を有するデータを格納する第1モードと、1つのメモリセルトランジスタMTあたりに第2の数(ただし第2の数は第1の数よりも大きい)のビット数を有するデータを格納する第2モードと、のうちの何れのモードでもNANDメモリ12へのライト動作を実行することができる。
【0055】
原則的には、メモリコントローラ11は、ビットコストを抑制するために、ホスト2から受信したライトデータを第2モードでNANDメモリ12にライトする。しかしながら、1つのメモリセルトランジスタMTあたりに格納されるデータのビット数が多いほど、データ量あたりのライト動作に要する時間および消費電力量が増大する。よって、PLP動作のような限られた電力量しか使用できないケースなどでは、メモリコントローラ11は、消費電力量を抑制するために第1モードでのライト動作を実行する。
【0056】
以降の説明では、第1モードはSLCモードであり、第2モードはTLCモードであることとする。即ち、SLCモードでのプログラム動作は、第1プログラム動作の一例である。TLCモードでのプログラム動作は、第2プログラム動作の一例である。なお、第1モードおよび第2モードのそれぞれはこの例に限定されない。また、メモリセルトランジスタMTをメモリセルとも称する。
【0057】
図5は、実施形態のメモリコントローラ11の機能構成の一例を示す模式的な図である。
【0058】
メモリコントローラ11は、ホストI/F31、2つのNANDC32、およびCPU33、の一部または全部の協働によって、ホストライト受付部101、バッファ制御部102、PLP制御部103、およびNANDライト部104として機能する。
【0059】
SRAM34およびDRAM13には、ホスト2から受信したライトデータがバッファされるバッファエリアが設けられる。SRAM34に設けられたバッファエリアを第1バッファエリア41、DRAM13に設けられたバッファエリアを第2バッファエリア42と表記する。第1バッファエリア41および第2バッファエリア42を総称して、バッファエリア40と表記することがある。
【0060】
ホストライト受付部101は、ホスト2からのライト要求の受け付けと、ライト要求によってライト動作が要求されたデータ(ライトデータ)の第1バッファエリア41または第2バッファエリア42への格納と、を行う。
【0061】
バッファ制御部102は、第1バッファエリア41および第2バッファエリア42の制御を行う。第1バッファエリア41および第2バッファエリア42には、ライトデータが、NANDメモリ12に対するライト単位毎に格納される。
【0062】
ライト単位は、例えばプログラム動作の単位であり、ページサイズと等しい。なお、ライト単位は、複数ページ分のサイズであってもよい。TLCモードでプログラム動作が行われる場合には、1つのメモリセルグループMCGにライトされるデータのサイズである3ページがライト単位とされてもよい。ライト単位のサイズを有するデータを、データ単位と表記する。
【0063】
ホストライト受付部101は、ライト要求を受信すると、ライト単位のサイズを有するバッファエリア40の領域(以下、エリア単位と称する)のアロケートをバッファ制御部102に要求する。バッファ制御部102は、ホストライト受付部101からの要求に応じて1以上のエリア単位をアロケートする。ホストライト受付部101は、アロケートされた1以上のエリア単位にホスト2からのライトデータを格納する。
【0064】
バッファ制御部102は、NANDメモリ12へのデータイン動作またはプログラム動作が完了したデータ単位が格納されていたエリア単位をデアロケートする。
【0065】
バッファ制御部102は、デアロケートの制御として、2通りの制御を実行可能に構成される。2通りのデアロケートの制御の詳細および2通りのデアロケートの制御の間の切り替えについては後述される。
【0066】
NANDライト部104は、バッファエリア40にアロケートされた各エリア単位に格納されたデータをNANDメモリ12にライトする動作を制御する。NANDライト部104は、電源断が検知されていない期間におけるNANDメモリ12へのライト動作を制御する。
【0067】
PLP制御部103は、電源断信号に応じてPLP動作を実行する。つまり、PLP制御部103は、電源断が検知された後の期間におけるNANDメモリ12へのライト動作を制御する。
【0068】
NANDメモリ12においては、何らかの原因でプログラム動作の進捗が滞る場合がある。例えば、データ単位のプログラム動作において、しきい値電圧が目標の区分4に設定できなかったメモリセルの数が所定数を超えた場合、そのプログラム動作は失敗したと判定されて、そのデータ単位のプログラム動作が再び実行される。このように、プログラム動作のリトライなどによって、プログラム動作の進捗が滞り得る。
【0069】
プログラム動作の進捗の滞りが起きた場合、メモリコントローラ11からNANDメモリ12へのライトデータの転送速度が低下する。メモリコントローラ11からNANDメモリ12へのライトデータの転送速度がホスト2からメモリコントローラ11へのライトデータの転送速度を下回ると、エリア単位のデアロケートの平均速度がエリア単位のアロケートの平均速度を下回る。そして、第1バッファエリア41および第2バッファエリア42においてエリア単位のアロケートが可能なエリアが枯渇すると、新たなライトデータの受信が困難になり、これによってホスト2からのライト要求へのレイテンシが極端に悪化する。
【0070】
そこで、メモリコントローラ11は、バッファ使用量、つまりバッファエリア40のうちのアロケート済みのエリア単位のサイズの総量、が所定のしきい値を上回る場合には、ホスト2からメモリコントローラ11へのライトデータの転送速度をゼロではない値に意図的に制限する。これによって、ホスト2からのライト要求へのレイテンシの極端な低下を回避する。
【0071】
以降、ホスト2からメモリコントローラ11へのライトデータの転送速度をホスト転送速度と表記する。メモリコントローラ11からNANDメモリ12への転送速度をメモリ転送速度と表記する。
【0072】
図6は、実施形態のバッファ使用量の変化の一例と、バッファ使用量に応じたホスト転送速度の制御の一例と、を説明するための図である。
【0073】
図6の上段に描画されたグラフは、バッファ使用量の時間的推移の一例を示す。下段に描画されたグラフは、完了応答時間、つまりライト要求を受信してからライト要求への完了の応答(完了応答と表記する)をホスト2に送信するまでの時間、の時間的推移の一例を示す。ここでは、ライトデータのバッファエリア40への格納が完了した後に、たとえそのライトデータのNANDメモリ12へのライト動作が完了していなかったとしても、完了応答がホスト2に送信されることとする。
【0074】
バッファ使用量と比較されるしきい値の一例として、しきい値ThHと、しきい値ThLとが設けられる。しきい値ThLは、しきい値ThHよりも小さい。しきい値ThLは第1しきい値の一例である。しきい値ThHは第2しきい値の一例である。
【0075】
タイミングt0からタイミングt1までは、バッファ使用量は、しきい値ThHを超えない範囲で、例えば勾配G0に対応した速度で増加したり、デアロケートによって急激に減少したりしている。ホストライト受付部101は、バッファエリア40へのライトデータの格納が完了したことを契機として完了応答をホスト2に転送する。よって、完了応答時間は、非常に短い時間tr0となっている。
【0076】
タイミングt1においては、バッファ使用量がしきい値ThHを上回る。ホストライト受付部101は、バッファエリア40へのライトデータの格納が完了した後もしばらく完了応答の送信を控え、その後、ライト要求を受信してから所定時間が経過したことを契機として完了応答をホスト2に送信する。よって、完了応答時間は時間tr0よりも長い時間tr1となっている。
【0077】
ホスト2は、例えば、完了応答に応じて次の動作をメモリシステム1に要求するよう、構成されている。タイミングt1の直後は、上記したように完了応答時間が延長されるので、ホスト2からメモリシステム1へのライト要求の送信の頻度が低下する。これによってホスト転送速度がゼロではない値に制限される。また、バッファ使用量の増加速度は、制限されたホスト転送速度に応じて、例えば勾配G0よりも緩やかな勾配G1に抑制される。これにより、バッファエリア40においてエリア単位のアロケートが可能な領域が枯渇することが防止される。
【0078】
タイミングt1からタイミングt2までは、バッファ使用量は、しきい値ThLを下回らない範囲で勾配G1に示す速度で増加したり、デアロケートによって急激に減少したりしている。
【0079】
タイミングt2においては、バッファ使用量がしきい値ThLを下回る。すると、ホストライト受付部101は、バッファエリア40へのライトデータの格納が完了したことを契機として完了応答をホスト2に送信する。よって、完了応答時間は、時間tr1から非常に短い時間tr0に戻っている。よって、バッファ使用量は、しきい値ThHを超えない範囲で、例えば勾配G0に対応した速度で増加したり、デアロケートによって急激に減少したりする。
【0080】
このように、メモリコントローラ11は、バッファ使用量がしきい値ThHを超えたとき、ホスト転送速度を制限する。これによって、バッファエリア40においてエリア単位のアロケートが可能なエリアが枯渇することによる、ホスト2からのライト要求へのレイテンシの極端な低下が回避される。
【0081】
例えばタイミングt1までの期間またはタイミングt2より後の期間のように、ホスト転送速度を低下させる制御を行う条件をバッファ使用量が満たしていない状態を、通常状態と表記する。タイミングt1からタイミングt2までの期間のように、ホスト転送速度を低下させる制御を行う条件をバッファ使用量が満たした状態を、非通常状態と表記する。
【0082】
なお、通常状態から非通常状態への遷移の判定と、非通常状態から通常状態への遷移の判定と、で共通するしきい値が使用されてもよい。しかしながら、バッファ使用量がしきい値を跨いだ変動を短時間に繰り返してしまうケースが生じ得る。そのような場合、通常状態と非通常状態との間の遷移の頻度が高くなる。
【0083】
図6に示された例では、通常状態から非通常状態への遷移の判定に使用されるしきい値Th
Hは、非通常状態から通常状態への遷移の判定に使用されるしきい値Th
Lよりも大きい。このように各しきい値が設定されることで、通常状態と非通常状態との間の遷移の頻度を抑制することが可能である。
【0084】
なお、バッファ使用量と比較されるしきい値(例えばThHおよびThL)は任意に設定され得る。
【0085】
一例では、第1バッファエリア41の容量と等しい値がしきい値ThHとして設定される。バッファ制御部102は、DRAM13に設けられた第2バッファエリア42よりもSRAM34に設けられた第1バッファエリア41から優先的にエリア単位をアロケートする。よって、バッファ使用量がしきい値ThHを超えることは、第1バッファエリア41においてエリア単位のアロケートが可能なエリアが枯渇し、第2バッファエリア42からのエリア単位のアロケートが始まったことを意味する。
【0086】
第2バッファエリア42はSRAM34よりも動作が低速なDRAM13に設けられている。したがって、第2バッファエリア42へは、第1バッファエリア41のような速い速度でのデータ入力はできない。即ち、第2バッファエリア42へのデータ転送の最高速度によりホスト転送速度が律速される虞がある。この場合、ホスト2からメモリシステム1へのライトデータの転送のスループットが低下する。
【0087】
しかしながら、第1バッファエリア41の容量と等しい値がしきい値ThHとして設定された場合、第2バッファエリア42は、非通常状態においてのみ使用される。非通常状態において、ホスト転送速度は、通常状態よりも遅い速度に制限されている。よって、第2バッファエリア42へのデータ転送の最高速度に起因したスループットの低下は問題とならないと考えられる。
【0088】
なお、しきい値ThHは第1バッファエリア41の容量と等しい値でなくてもよい。
【0089】
また、
図6に示された例では、完了応答時間を長くすることでホスト転送速度を低下せしめる制御が実現された。ホスト転送速度を低下せしめる制御を実現する具体的な方法は、完了応答時間を長くすることに限定されない。
【0090】
続いて、バッファ制御部102による2通りのデアロケートの制御について説明する。2通りのデアロケートの制御のうちの1つを第1デアロケート制御と表記し、他の1つを第2デアロケート制御と表記する。
【0091】
図7は、実施形態の第1デアロケート制御を説明するための模式的な図である。本図の下段にバッファ使用量の時間的推移の一例が示されている。上段には、NANDメモリ12の動作状況の時間的推移が示されている。ここではNANDメモリ12の動作状況として、動作要素(ここではメモリチップCP)毎のライト動作に関する動作状況が示されている。ライト動作に関する動作状況は、データイン動作と、プログラム動作と、を含む。
【0092】
例えば、タイミングt10においてメモリチップCP0の所定のワード線WLにライトされるデータ単位が或るエリア単位に溜まり、これによってメモリチップCP0に対するデータイン動作が開始される。タイミングt11においてメモリチップCP0に対するデータイン動作が完了すると、バッファ制御部102は、当該データイン動作の転送元のエリア単位をデアロケートする。バッファ使用量は、このデアロケートによって急激に減少している。
【0093】
タイミングt12においてメモリチップCP1の所定のワード線WLにライトされるデータ単位が或るエリア単位に溜まり、これによってそのデータ単位のメモリチップCP1に対するデータイン動作が開始される。タイミングt13においてメモリチップCP1に対するデータイン動作が完了すると、バッファ制御部102は、当該データイン動作の転送元のエリア単位をデアロケートする。
【0094】
同様に、タイミングt14においてメモリチップCP2に対するデータイン動作が開始される。タイミングt15においてメモリチップCP2に対するデータイン動作が完了すると、バッファ制御部102は、当該データイン動作の転送元のエリア単位をデアロケートする。
【0095】
さらに同様に、タイミングt16においてメモリチップCP3に対するデータイン動作が開始される。タイミングt17においてメモリチップCP3に対するデータイン動作が完了すると、バッファ制御部102は、当該データイン動作の転送元のエリア単位をデアロケートする。
【0096】
このように、第1デアロケート制御では、データイン動作が完了することを契機として、データイン動作が完了したデータ単位が格納されていたエリア単位のデアロケートが実行される。
【0097】
前述したように、原則的に、メモリコントローラ11は、NANDメモリ12に対してTLCモードでデータをライトする。そして、PLP動作の際には、メモリコントローラ11は、NANDメモリ12に対して、TLCモードに比べてデータ量あたりのライト動作に要する時間が短くかつ消費電力量が少ないSLCモードでデータをライトする。
【0098】
しかしながら、第1デアロケート制御によれば、既にデータイン動作が完了したデータ単位は、たとえそのデータ単位のプログラム動作がまだ完了していない場合であっても、バッファエリア40から再取得することが不可能である。よって、PLP動作が開始されたタイミングにおいてTLCモードでのプログラム動作の実行中のデータ単位が存在する場合には、そのデータ単位のTLCモードでのプログラム動作はプログラム動作の完了まで継続される。
【0099】
その後、何れかのエリア単位にまだプログラム動作が完了していないデータ単位が残っている場合には、PLP制御部103は、そのデータ単位をSLCモードでNANDメモリ12にライトする。つまり、PLP制御部103は、そのデータ単位に対し、データイン動作を行い、その後、SLCモードでのプログラム動作を実行する。
【0100】
図7に示される例では、タイミングt18においてPLP動作が開始される(換言すると電源断が検知される)。この場合、タイミングt10からタイミングt18までにデータイン動作が完了した各データ単位に関しては、データイン動作の後、TLCモードでのプログラム動作が開始される。そして、PLP動作の開始の時点(即ちタイミングt18)においては、メモリチップCP2およびメモリチップCP3においてTLCモードでのプログラム動作が実行中となっている。よって、PLP制御部103は、メモリチップCP2およびメモリチップCP3に対し、TLCモードでのプログラム動作を継続させる。
【0101】
タイミングt19においては、全てのメモリチップCPにおいてTLCモードでのプログラム動作が完了する。すると、PLP制御部103は、バッファエリア40に残っている全てのデータのSLCモードでのライト動作を開始する。この例では、PLP制御部103は、タイミングt18において何れかのエリア単位に存在しているデータのデータイン動作を開始し(タイミングt19)、データイン動作が完了すると(タイミングt20)、SLCモードでのプログラム動作を実行する。まだNANDメモリ12にライトされていないデータがバッファエリア40から無くなると、PLP動作が完了する(タイミングt21)。
【0102】
図8は、実施形態の第2デアロケート制御を説明するための模式的な図である。
図7と同様、本図の下段にバッファ使用量の時間的推移の一例が示されている。上段には、NANDメモリ12の動作状況の時間的推移が示されている。
【0103】
例えば、タイミングt30においてメモリチップCP0の所定のワード線WLにライトされるデータ単位が或るエリア単位に溜まり、これによってそのデータ単位のメモリチップCP0に対するデータイン動作が開始される。データイン動作の後、TLCモードでのプログラム動作が開始される。
【0104】
タイミングt31においてメモリチップCP7におけるプログラム動作が完了すると、バッファ制御部102は、プログラム動作が完了したデータ単位が格納されていたエリア単位をデアロケートする。バッファ使用量は、このデアロケートによって急激に減少している。
【0105】
タイミングt32においてメモリチップCP1の所定のワード線WLにライトされるデータ単位が或るエリア単位に溜まり、これによってそのデータ単位のメモリチップCP1に対するデータイン動作が開始される。データイン動作の後、TLCモードでのプログラム動作が開始される。
【0106】
タイミングt33においてメモリチップCP0におけるプログラム動作が完了すると、バッファ制御部102は、プログラム動作が完了したデータ単位が格納されていたエリア単位をデアロケートする。バッファ使用量は、このデアロケートによって急激に減少している。
【0107】
タイミングt34においてメモリチップCP2の所定のワード線WLにライトされるデータ単位が或るエリア単位に溜まり、これによってそのデータ単位のメモリチップCP2に対するデータイン動作が開始される。データイン動作の後、TLCモードでのプログラム動作が開始される。
【0108】
タイミングt35においてメモリチップCP1におけるプログラム動作が完了すると、バッファ制御部102は、プログラム動作が完了したデータ単位が格納されていたエリア単位をデアロケートする。バッファ使用量は、このデアロケートによって急激に減少している。
【0109】
タイミングt36においてメモリチップCP3の所定のワード線WLにライトされるデータ単位が或るエリア単位に溜まり、これによってそのデータ単位のメモリチップCP3に対するデータイン動作が開始される。データイン動作の後、TLCモードでのプログラム動作が開始される。
【0110】
このように、第2デアロケート制御では、データ単位のプログラム動作が完了することを契機として、そのデータ単位が格納されていたエリア単位のデアロケートが実行される。
【0111】
第2デアロケート制御では、PLP動作が開始されたタイミングにおいてTLCモードでのプログラム動作の実行中のデータ単位が存在する場合には、そのデータ単位のTLCモードでのプログラム動作が中止(stop)される。そして、PLP制御部103は、エリア単位に残されているそのデータ単位を、SLCモードでNANDメモリ12にライトする。
【0112】
図8に示される例では、タイミングt37においてPLP動作が開始される。PLP動作の開始の時点においては、メモリチップCP2およびメモリチップCP3においてTLCモードでのプログラム動作が実行中となっている。よって、PLP制御部103は、メモリチップCP2およびメモリチップCP3に対し、実行中のTLCモードでのプログラム動作を中止させる。そして、PLP制御部103は、TLCモードでのプログラム動作が中止された2つのデータ単位を含むバッファエリア40内の全てのデータのデータイン動作を行い、データイン動作が完了したデータについて、順次、SLCモードでのプログラム動作を実行する。
図8に示される例では、タイミングt37以降において、メモリチップCP0~メモリチップCP3のそれぞれにデータイン動作及びSLCモードでのプログラム動作が行われる。
【0113】
第2デアロケート制御によれば、第1デアロケート制御と比べて、エリア単位がアロケートされてからデアロケートされるまでの期間が長い。従って、第2デアロケート制御では、第1デアロケート制御と比べて、バッファ使用量が若干多くなる傾向がある。例えば、
図8に示される第2デアロケート制御下でのバッファ使用量の最大値V1は、
図7に示される第1デアロケート制御下でのバッファ使用量の最大値V0よりも大きい。
【0114】
しかしながら、第2デアロケート制御によれば、PLP動作が開始されると、TLCモードでのプログラム動作が中止されて、TLCモードでのプログラム動作が中止されたデータ単位を含むバッファエリア40内の全てのデータはSLCモードでNANDメモリ12にライトされる。SLCモードでは、TLCモードに比べてデータ量あたりのライト動作に要する時間が短く、かつ消費電力量も少ない。よって、第2デアロケート制御によれば、第1デアロケート制御と比べて、PLP動作に要する時間が短く、PLP動作に必要な電力量が少ない。例えば、
図7に示された第1デアロケート制御下での動作例では、タイミングt18からタイミングt21までの期間にPLP動作が実行されている。そして、
図8に示された第2デアロケート制御下での動作例では、タイミングt18からタイミングt21までの期間よりも明らかに短い、タイミングt37からタイミングt38までの期間においてPLP動作が実行されている。
【0115】
実施形態では、メモリコントローラ11は、各エリア単位に対し、所定の判定タイミングにおけるバッファ使用量の状態が通常状態であれば第1デアロケート制御を実行し、判定タイミングにおけるバッファ使用量の状態が非通常状態であれば第2デアロケート制御を実行する。
【0116】
よって、バッファ使用量が増加してバッファ使用量の状態が非通常状態になったとしても、TLCモードでのプログラム動作の中止によってPLP動作に必要な消費電力量を抑制できる。また、通常状態においてはそもそもバッファ使用量が少ないためにPLP動作に必要な消費電力量は少ない。
【0117】
つまり、実施形態によれば、バッファ使用量が多い場合、少ない場合のいずれにおいてもPLP動作に必要な消費電力量を抑制できる。その結果、容量が大きいキャパシタをメモリシステムに搭載する必要がなく、メモリシステムのコストを抑制できる。
【0118】
なお、実施形態では、所定の判定タイミングにおけるバッファ使用量の状態に応じてデアロケートの制御が選択される。この所定の判定タイミングは、一例として、データイン動作が完了したタイミングであることとする。
【0119】
続いて、実施形態のメモリシステム1の動作を説明する。
【0120】
図9は、バッファ使用量の状態を判定する実施形態の動作の一例を示すフローチャートである。本図に示される動作を、状態判定動作と表記する。状態判定動作は、例えばバッファ制御部102によって実行される。状態判定動作は、異なる複数のタイミングのそれぞれにおいて実行される。状態判定動作は、所定の時間周期で実行されてもよいし、所定の動作、例えばエリア単位がアロケートまたはデアロケートされる動作、を契機として実行されてもよい。
【0121】
バッファ制御部102は、第1バッファエリア41および第2バッファエリア42の合計の使用量Uを取得する(S101)。そして、バッファ制御部102は、最新の判定結果は通常状態であるか否かを判定する(S102)。
【0122】
最新の判定結果が通常状態である場合(S102:Yes)、バッファ制御部102は、使用量Uがしきい値ThHを超えているか否かを判定する(S103)。使用量Uがしきい値ThHを超えている場合(S103:Yes)、バッファ制御部102は、現在のバッファ使用量の状態は非通常状態であると判定する(S104)。
【0123】
最新の判定結果が通常状態でない場合(S102:No)、即ち最新の判定結果が非通常状態である場合、バッファ制御部102は、使用量Uがしきい値ThLを下回っているか否かを判定する(S105)。使用量Uがしきい値ThLを下回っている場合(S105:Yes)、バッファ制御部102は、現在のバッファ使用量の状態は通常状態であると判定する(S106)。
【0124】
使用量Uがしきい値ThHを超えていない場合(S103:No)、またはステップS104の処理の後、または使用量Uがしきい値ThLを下回っていない場合(S105:No)、またはステップS106の処理の後、状態判定動作が終了する。
【0125】
図9に示された一連の動作が短い間隔で繰り返し実行されることによって、バッファエリア40の使用量がしきい値Th
Lを下回ってからしきい値Th
Hを超えるまではバッファ使用量の状態は通常状態として認識され、バッファエリア40の使用量がしきい値Th
Hを超えてからしきい値Th
Lを下回るまではバッファ使用量の状態は非通常状態として認識される。
【0126】
なお、ステップS103の判定処理において使用量Uがしきい値ThHと等しい場合、またはステップS105の判定処理において使用量Uがしきい値ThLと等しい場合、の措置は上記の例に限定されない。例えば、ステップS103の判定処理において使用量Uがしきい値ThHと等しい場合、ステップS104の処理が実行されてもよい。ステップS105の判定処理において使用量Uがしきい値ThLと等しい場合、ステップS106の処理が実行されてもよい。
【0127】
図10は、実施形態のメモリシステム1がホスト2からライト要求を受信した際の動作の一例を示すフローチャートである。
【0128】
ホスト2からのライト要求は、ホストライト受付部101が受信する。ホストライト受付部101がライト要求を受信すると(S201)、バッファ制御部102は、まず、エリア単位のアロケートが可能なエリアが第1バッファエリア41にあるか否かを判定する(S202)。
【0129】
例えば、ホストライト受付部101は、ライト要求を受信すると、ライト要求にかかるライトデータを構成するデータ単位毎に、エリア単位のアロケートをバッファ制御部102に要求する。バッファ制御部102は、ホストライト受付部101から要求された1以上のエリア単位をアロケートするバッファエリアを決定する。バッファ制御部102は、第1バッファエリア41に空き、つまりエリア単位のアロケートが可能なエリアがあるか否かに基づき、エリア単位毎にアロケートするバッファエリアを決定する。ここでは説明を簡単にするために、ライトデータは1つのデータ単位によって構成され、1つのデータ単位のバッファリングのために1つのエリア単位のアロケートが要求されたこととする。なお、2以上のエリア単位のアロケートが要求された場合には、ステップS202~ステップS205の処理はアロケートが要求されたそれぞれのエリア単位について実行される。
【0130】
エリア単位のアロケートが可能なエリアが第1バッファエリア41にある場合(S202:Yes)、バッファ制御部102は、第1バッファエリア41にエリア単位をアロケートする(S203)。エリア単位のアロケートが可能なエリアが第1バッファエリア41にない場合(S202:No)、バッファ制御部102は、第2バッファエリア42にエリア単位をアロケートする(S204)。
【0131】
ステップS203の処理またはステップS204の処理の後、ホストライト受付部101は、ホスト2からライトデータを受信して、受信したライトデータであるデータ単位を、アロケートされたエリア単位に格納する(S205)。
【0132】
そして、ホストライト受付部101は、状態判定動作による最新の判定結果が通常状態であるか否かを判定する(S206)。例えばホストライト受付部101は、バッファ制御部102に最新の判定結果を問い合わせる。なお、状態判定動作による最新の判定結果が通常状態であるか否かの判定方法はこれに限定されない。
【0133】
状態判定動作による最新の判定結果が通常状態である場合(S206:Yes)、ホストライト受付部101は、完了応答をホスト2に送信する(S207)。状態判定動作による最新の判定結果が通常状態でない場合(S206:No)、つまり状態判定動作による最新の判定結果が非通常状態である場合、ホストライト受付部101は、ライト要求の受信からの経過時間が長くなるように、所定時間の経過を待って、完了応答をホスト2に送信する(S208)。
【0134】
ステップS207の処理またはステップS208の処理の後、ライト要求を受信した際の動作は終了する。
【0135】
図11は、実施形態のメモリシステム1の、電源断が検知されていない期間におけるNANDメモリ12へのライト動作の一例を示すフローチャートである。ここでは、アロケートされたひとつのエリア単位(対象のエリア単位と表記する)にかかる動作を説明する。なお、複数のエリア単位がアロケートされている場合には、本図に示す動作はアロケートされたそれぞれのエリア単位について実行される。
【0136】
バッファ制御部102は、対象のエリア単位についてNANDメモリ12におけるデータ単位の格納先を決定する(S301)。そして、バッファ制御部102は、対象のエリア単位にデータ単位が溜まったか否かを判定する(S302)。
【0137】
対象のエリア単位にデータ単位が溜まっていない場合(S302:No)、ステップS302の処理が再び実行される。
【0138】
対象のエリア単位にデータ単位が溜まった場合(S302:Yes)、NANDライト部104は、決定された格納先のメモリチップCPへのデータイン動作が可能か否かを判定する(S303)。
【0139】
より詳しくは、対象のエリア単位にデータ単位が溜まった場合、バッファ制御部102は、対象のエリア単位内のデータ単位のNANDメモリ12へのライトをNANDライト部104に要求する。NANDライト部104は、受信する要求をキューなどに溜めておき、受信した要求を順次、処理する。NANDライト部104は、チャネルCH0,CH1が利用可能か否か、および各メモリチップCPが新規のコマンドを受け付け可能であるか否か、を監視する。各メモリチップCPが新規のコマンドを受け付け可能であるか否かは、例えば、レディービジー信号の監視によって判定される。格納先のメモリチップCPへのライト動作の要求の実行の順番が到来し、かつ格納先のメモリチップCPが接続されたチャネルが利用可能であり、かつ格納先のメモリチップCPが新規のコマンドを受け付け可能である場合、NANDライト部104は、格納先のメモリチップCPへのデータイン動作が可能であると判定する。格納先のメモリチップCPへのライト動作の要求の実行の順番が到来していないか、または格納先のメモリチップCPが接続されたチャネルが利用可能でないか、または格納先のメモリチップCPが新規のコマンドを受け付け可能でない場合、NANDライト部104は、格納先のメモリチップCPへのデータイン動作が可能でない、と判定する。なお、格納先のメモリチップCPへのデータイン動作が可能か否かの判定方法はこれに限定されない。
【0140】
格納先のメモリチップCPへのデータイン動作が可能でない場合(S303:No)、ステップS303の処理が再び実行される。
【0141】
格納先のメモリチップCPへのデータイン動作が可能である場合(S303:Yes)、NANDライト部104は、対象のエリア単位内のデータ単位のデータイン動作を開始する(S304)。
【0142】
NANDライト部104は、対象のエリア単位内のデータ単位のデータイン動作が完了したか否かを判定する(S305)。対象のエリア単位内のデータ単位のデータイン動作が完了したか否かは、例えば、データイン動作によってメモリチップCPに転送されたデータ量に基づき判定される。
【0143】
対象のエリア単位内のデータ単位のデータイン動作が完了していない場合(S305:No)、ステップS305の処理が再び実行される。
【0144】
対象のエリア単位内のデータ単位のデータイン動作が完了した場合(S305:Yes)、NANDライト部104は、格納先のメモリチップCPにプログラム動作を開始させる(S306)。ここでのプログラム動作は、TLCモードで実行される。
【0145】
また、対象のエリア単位内のデータ単位のデータイン動作が完了した旨はバッファ制御部102にも通知される。通知を受けたバッファ制御部102は、状態判定動作による最新の判定結果が通常状態であるか否かを判定する(S307)。
【0146】
状態判定動作による最新の判定結果が通常状態である場合(S307:Yes)、バッファ制御部102は、対象のエリア単位をデアロケートする(S308)。このタイミングで対象のエリア単位をデアロケートする制御は、第1デアロケート制御に該当する。
【0147】
バッファ制御部102においてステップS307の処理およびステップS308の処理が実行されている間および後において、NANDライト部104では、ステップS306の処理によって開始されたプログラム動作の進捗を監視している。つまり、NANDライト部104は、プログラム動作が完了したか否かを判定する(S309)。プログラム動作が完了していない場合(S309:No)、NANDライト部104は、ステップS309の処理を再び実行する。
【0148】
プログラム動作が完了すると(S309:Yes)、プログラム動作が完了した旨がNANDライト部104からバッファ制御部102に通知される。バッファ制御部102は、対象のエリア単位がデアロケート済みであるか否かを判定する(S310)。
【0149】
対象のエリア単位がデアロケート済みでない場合(S310:No)、バッファ制御部102は、対象のエリア単位をデアロケートする(S311)。このタイミングで対象のエリア単位をデアロケートする制御は、第2デアロケート制御に該当する。
【0150】
対象のエリア単位がデアロケート済みである場合(S310:Yes)、またはステップS311の処理の後、電源断が検知されていない期間におけるNANDメモリ12へのライト動作が終了する。
【0151】
図12は、実施形態のメモリシステム1の、電源断が検知されたときのNANDメモリ12へのライト動作の一例を示すフローチャートである。即ち、本図に示す動作は、PLP動作を表す。電源断を例えば電源IC14が検知すると、電源IC14は電源断信号をメモリコントローラ11に送信する。メモリコントローラ11では、PLP制御部103が、電源断信号に応じて
図12に示されるPLP動作の制御を開始する。
【0152】
PLP動作では、PLP制御部103は、まず、何れかのデータ単位のプログラム動作が実行中であるか否かを判定する(S401)。何れかのデータ単位のプログラム動作が実行中である場合(S401:Yes)、PLP制御部103は、プログラム動作が実行中のデータ単位が格納されていたエリア単位のうち、デアロケートされていないエリア単位があるか否かを判定する(S402)。
【0153】
プログラム動作が実行中の時点においては、エリア単位が既にデアロケートされているケース(
図11のS308参照)と、エリア単位がまだデアロケートされていないケース(
図11のS311参照)と、が存在する。エリア単位が既にデアロケートされているケースではエリア単位からのデータ単位の再取得が不可能であるのでプログラム動作を完了させる必要がある。エリア単位がまだデアロケートされていないケースではプログラム動作を中止することが可能である。プログラム動作が実行中のデータ単位が格納されていたエリア単位がどちらのケースに該当するかは、データ単位毎に異なり得る。よって、PLP制御部103は、ステップS402においては、プログラム動作が実行中のデータ単位毎にエリア単位がデアロケートされているか否かを判定する。PLP制御部103は、例えばバッファ制御部102に問い合わせたりバッファ制御部102から通知を受けたりすることによって、ステップS402の処理を実行する。
【0154】
エリア単位がデアロケートされていないデータ単位がある場合(S402:Yes)、PLP制御部103は、エリア単位がデアロケートされていないデータ単位のプログラム動作を中止する(S403)。
【0155】
エリア単位がデアロケートされていないデータ単位がない場合(S402:No)、またはステップS403の処理の後、PLP制御部103は、まだ何れかのデータ単位のプログラム動作が実行中であるか否かを判定する(S404)。
【0156】
まだ何れかのデータ単位のプログラム動作が実行中である場合(S404:Yes)、ステップS404の処理が再び実行される。
【0157】
プログラム動作が実行中のデータ単位がない場合(S401:No、または、S404:No)、PLP制御部103は、まだプログラム動作が完了していないデータ単位がバッファエリア40にあるか否かを判定する(S405)。まだプログラム動作が完了していないデータ単位がバッファエリア40にない場合(S405:No)、電源断が検知されたときのNANDメモリ12へのライト動作が終了する。
【0158】
まだプログラム動作が完了していないデータ単位がバッファエリア40にある場合(S405:Yes)、PLP制御部103は、まだプログラム動作が完了していないデータ単位をSLCモードでNANDメモリ12にライトする。なお、ステップS405の判定処理の時点においては、まだプログラム動作が完了していないデータ単位は、まだデアロケートされていないエリア単位に格納されているデータ単位と同義である。以降の動作によって、まだデアロケートされていない全てのエリア単位に格納されている全てのデータ単位のSLCモードでのライト動作が実行される。
【0159】
具体的には、PLP制御部103は、まず、まだプログラム動作が完了していない全てのデータ単位について、NANDメモリ12における格納先を決定する(S406)。そして、PLP制御部103は、格納先のメモリチップCPへのデータイン動作が可能なデータ単位があるか否かを判定する(S407)。ステップS407の処理では、例えば
図11に示されたステップS303の処理と同様の判定基準に基づき、格納先のメモリチップCPへのデータイン動作が可能なデータ単位の有無が判定される。なお、ステップS407の処理における判定基準はこれに限定されない。
【0160】
格納先のメモリチップCPへのデータイン動作が可能なデータ単位がある場合(S407:Yes)、PLP制御部103は、そのデータ単位のデータイン動作を開始する(S408)。
【0161】
格納先のメモリチップへのデータイン動作が可能なデータ単位がない場合(S407:No)、またはステップS408の処理の後、PLP制御部103は、プログラム動作が可能なデータ単位、つまりデータイン動作が完了したがまだプログラム動作が開始されていないデータ単位、があるか否かを判定する(S409)。
【0162】
プログラム動作が可能なデータ単位がある場合(S409:Yes)、PLP制御部103は、そのデータ単位の格納先のメモリチップCPにプログラム動作を開始させる(S410)。ここでのプログラム動作は、SLCモードで実行される。
【0163】
プログラム動作が可能なデータ単位がない場合(S409:No)、またはステップS410の後、PLP制御部103は、まだプログラム動作が開始されていないデータ単位がバッファエリア40にあるか否かを判定する(S411)。
【0164】
まだプログラム動作が開始されていないデータ単位がバッファエリア40にある場合(S411:Yes)、ステップS407の処理が再び実行される。
【0165】
ステップS407からステップS411までのループ処理が繰り返されることで、ステップS405の判定処理においてYesと判定された時点においてバッファエリア40に残っていた全てのデータ単位の、NANDメモリ12へのSLCモードでのライト動作が完了する。換言すると、ステップS405の判定処理においてまだデアロケートされていない全てのエリア単位に格納されていた全てのデータ単位のNANDメモリ12へのSLCモードでのライト動作が完了する。
【0166】
まだプログラム動作が開始されていないデータ単位がバッファエリア40にない場合(S411:No)、電源断が検知されたときのNANDメモリ12へのライト動作が終了する。
【0167】
図13は、以上に述べた動作によって実現される制御の一例を示す模式的な図である。
図7と同様、本図の下段にバッファ使用量の時間的推移の一例が示されている。上段には、NANDメモリ12の動作状況の時間的推移が示されている。
【0168】
図13に示される例では、バッファ使用量が通常状態となっている期間のあるタイミングt50においてプログラム動作の進捗の滞りが発生してメモリ転送速度の低下が発生している。これによって、タイミングt50からバッファ使用量が増加し始め、タイミングt51においてバッファ使用量がしきい値Th
Hを超える。すると、バッファ使用量の状態が通常状態から非通常状態に遷移する。即ち、タイミングt51において、デアロケートの制御が第1デアロケート制御から第2デアロケート制御に切り替わり、かつホスト転送速度の制限が開始される。
【0169】
タイミングt52においてメモリ転送速度の低下が解消されるが、バッファ使用量がしきい値ThLを下回っていないので非通常状態での制御(第2デアロケート制御およびホスト転送速度の制限)が継続される。
【0170】
バッファ使用量がしきい値ThLを下回ると(タイミングt53)、バッファ使用量の状態が非通常状態から通常状態に遷移する。即ち、タイミングt53において、デアロケートの制御が第2デアロケート制御から第1デアロケート制御に切り替わり、かつホスト転送速度の制限が解除される。
【0171】
その後、タイミングt54において再びプログラム動作の進捗の滞りが発生してメモリ転送速度の低下が発生している。これによって、タイミングt54からバッファ使用量が増加し始め、タイミングt55においてバッファ使用量がしきい値ThHを超える。すると、バッファ使用量の状態が通常状態から非通常状態に遷移する。即ち、タイミングt55において、デアロケートの制御が第1デアロケート制御から第2デアロケート制御に切り替わり、かつホスト転送速度の制限が開始される。
【0172】
タイミングt56においてメモリ転送速度の低下が解消されるが、バッファ使用量がしきい値ThLを下回っていないので非通常状態での制御(第2デアロケート制御およびホスト転送速度の制限)が継続される。
【0173】
その後、タイミングt57においてPLP動作が開始される。
【0174】
PLP動作では、まず、データイン動作の完了のタイミングにおいてバッファ使用量が非通常状態にあったプログラム動作は、
図12のステップS402~ステップS403を参照して説明した処理によって中止される。
図13に示す例では、メモリチップCP6で実行されていたプログラム動作と、メモリチップCP7で実行されていたプログラム動作と、がデータイン動作の完了のタイミングにおいてバッファ使用量が非通常状態にあったプログラム動作に該当する。よって、メモリチップCP6で実行されていたプログラム動作と、メモリチップCP7で実行されていたプログラム動作と、が中止される。
【0175】
タイミングt57においては、実行中のプログラム動作のうち、データイン動作の完了のタイミングにおいてバッファ使用量が通常状態にあったプログラム動作は存在しない。よって、メモリチップCP6で実行されていたプログラム動作と、メモリチップCP7で実行されていたプログラム動作と、の中止によって全てのデータ単位のプログラム動作が非実行中となる。即ち、
図12のステップS404の判定処理においてNoと判定される。
【0176】
メモリチップCP6で実行されていたプログラム動作と、メモリチップCP7で実行されていたプログラム動作と、が中止された時点では、プログラム動作が中止されたデータ単位を含め、まだプログラム動作が完了していないデータ単位がバッファエリア40に存在する。よって、
図12のステップS405の判定処理においてYesと判定され、SLCモードでのデータの退避が開始される。そして、タイミングt58において、SLCモードでのNANDメモリ12へのデータの退避が完了し、PLP動作が完了する。
【0177】
このように、実施形態によれば、メモリコントローラ11は、ホスト2からライト要求を受信した場合、バッファエリア40にエリア単位をアロケートし、ライト要求によってライトが要求されたデータ単位をエリア単位を介してNANDメモリ12にライトする。データ単位のNANDメモリ12へのライト動作は、データイン動作とプログラム動作とを含む。メモリコントローラ11は、データ単位のデータイン動作の完了のタイミングが電源断の検知の前(換言するとPLP動作の開始の前)であれば、例えば
図13に示されたタイミングt57までに開始されたプログラム動作のように、第1プログラム動作であるTLCモードでのプログラム動作を実行する。また、メモリコントローラ11は、データ単位のデータイン動作の完了のタイミングが電源断の検知の後(換言するとPLP動作の開始の後)であれば、例えば
図13のタイミングt57以降に開始されたプログラム動作に示されるように、第2プログラム動作であるSLCモードでのプログラム動作を実行する。メモリコントローラ11は、データイン動作の完了のタイミングにおいてバッファエリアの使用量が通常状態である場合には、データイン動作の完了に応じてエリア単位をデアロケートする。メモリコントローラ11は、データイン動作の完了のタイミングにおいてバッファエリアの使用量が非通常状態である場合には、プログラム動作の完了に応じてエリア単位をデアロケートする。メモリコントローラ11は、電源断が検知された後は、キャパシタ15に蓄えられた電気エネルギーによって動作する。電源断が検知された後は、メモリコントローラ11は、以下に述べる動作を実行する。即ち、メモリコントローラ11は、データ単位のTLCモードでのプログラム動作が実行中であり、かつそのデータ単位が格納されていたエリア単位がデアロケート済みであれば、そのデータ単位のTLCモードでのプログラム動作を完了まで継続する。メモリコントローラ11は、データ単位のTLCモードでのプログラム動作が実行中であり、かつそのデータ単位が格納されていたエリア単位がまだデアロケートされていなければ、そのデータ単位のTLCモードでのプログラム動作を中止する。メモリコントローラ11は、バッファエリア40内のまだデアロケートされていないエリア単位に格納されているデータ単位をSLCモードのプログラム動作によってNANDメモリ12にライトする。
【0178】
よって、バッファ使用量が多い場合、少ない場合のいずれにおいてもPLP動作に必要な消費電力量を抑制できる。
【0179】
また、実施形態によれば、バッファエリア40の使用量がしきい値ThLを下回ってからしきい値ThHを超えるまではバッファ使用量の状態は通常状態とされ、バッファエリア40の使用量がしきい値ThHを超えてからしきい値ThLを下回るまでのバッファ使用量の状態は非通常状態とされる。
【0180】
よって、通常状態と非通常状態との間の遷移の頻度を抑制でき、メモリシステム1の動作を安定させることができる。
【0181】
なお、通常状態と非通常状態との定義はこれに限定されない。少なくともバッファエリア40の使用量がしきい値ThLを下回っている期間は通常状態とされ、バッファエリア40の使用量がしきい値ThHを超えている期間は非通常状態とされてもよい。つまり、バッファエリア40の使用量がしきい値ThLとしきい値ThHとの間にある状態は任意とされてもよい。また、しきい値ThLとしきい値ThHとは互いに等しくてもよい。
【0182】
また、実施形態によれば、メモリコントローラ11は、通常状態においてはホスト転送速度を制限せず、非通常状態においてはホスト転送速度を制限する。
【0183】
よって、バッファエリア40においてエリア単位のアロケートが可能なエリアが枯渇することによるホスト2からのライト要求へのレイテンシの極端な低下が回避される。
【0184】
また、実施形態によれば、第1バッファエリア41にエリア単位のアロケートが可能なエリアがある場合には、メモリコントローラ11は、第1バッファエリア41にエリア単位をアロケートする。第1バッファエリア41にエリア単位のアロケートが可能なエリアがない場合には、メモリコントローラ11は、第2バッファエリア42にエリア単位をアロケートする。そして、しきい値ThHは第1バッファエリア41の容量と等しくてもよい。
【0185】
よって、非通常状態においては動作速度の点でSRAM34に劣るDRAM13に設けられた第2バッファエリア42が使用され得る。しかしながら、非通常状態においてはホスト転送速度が制限されるの。したがって、第2バッファエリア42の動作速度が律速となってメモリシステム1へのライトデータの転送のスループットが悪化することが回避される。
【0186】
なお、以上の説明では、バッファエリア40は、必ずしもSRAM34およびDRAM13の両方に設けられなくてもよい。バッファエリア40は、SRAM34およびDRAM13の一方のみに設けられてもよい。
【0187】
以下に、実施形態のいくつかの変形例を説明する。各変形例においては、実施形態と同じ事項、または既に説明した変形例と同じ事項、については説明が省略されるか簡略的に説明される。
【0188】
(変形例1)
図14は、実施形態の変形例1のメモリコントローラ11aの機能構成の一例を示す模式的な図である。
【0189】
メモリコントローラ11aは、ホストI/F31、2つのNANDC32、およびCPU33の一部または全部の協働によって、ホストライト受付部101、バッファ制御部102a、PLP制御部103、およびNANDライト部104として機能する。
【0190】
SRAM34には第1バッファエリア41、DRAM13に第2バッファエリア42が設けられる。
【0191】
また、SRAM34には、エリア管理情報51が格納される。
【0192】
バッファ制御部102aの機能は、デアロケートの制御の切り替えの方法の点でバッファ制御部102の機能と異なる。バッファ制御部102aは、エリア単位のアロケートのタイミングにおけるバッファ使用量の状態に応じてそのエリア単位のデアロケートの制御を決定する。エリア管理情報51は、エリア単位のアロケートの時点におけるバッファ使用量の状態をエリア単位毎に記録した情報である。バッファ制御部102aによるデアロケートの制御の決定方法を、
図15および
図16を用いて説明する。
【0193】
図15は、実施形態の変形例1のメモリシステム1がホスト2からライト要求を受信した際の動作の一例を示すフローチャートである。
【0194】
図15に示されるように、実施形態の変形例1のホストライト受付部101またはバッファ制御部102aは、
図10を参照して説明した実施形態のホストライト受付部101またはバッファ制御部102によって実行されるステップS201~ステップS204の処理と同様の処理を実行する。
【0195】
ステップS203の処理またはステップS204の処理の後、即ちエリア単位のアロケートが完了すると、バッファ制御部102aは、アロケートされたエリア単位を表す識別情報とバッファ使用量の状態とを対応付けてエリア管理情報51に記録する(S501)。
【0196】
ステップS501の処理の後、実施形態の変形例1のホストライト受付部101またはバッファ制御部102aは、
図10を参照して説明した実施形態のホストライト受付部101またはバッファ制御部102によって実行されるステップS205~ステップS208の処理と同様の処理を実行する。
【0197】
このように、バッファ制御部102aは、エリア単位をアロケートするとき、バッファ使用量の状態をエリア管理情報51に記録する。
【0198】
図16は、実施形態の変形例1のメモリシステム1の、電源断が検知されていない期間におけるNANDメモリ12へのライト動作の一例を示すフローチャートである。ここでは、アロケートされたひとつのエリア単位(対象のエリア単位と表記する)にかかる動作を説明する。なお、複数のエリア単位がアロケートされている場合には、本図に示す動作はアロケートされたそれぞれのエリア単位について実行される。
【0199】
図16に示されるように、実施形態の変形例1のNANDライト部104またはバッファ制御部102aは、
図11を参照して説明した実施形態のNANDライト部104またはバッファ制御部102によって実行されるステップS301~ステップS306の処理と同様の処理を実行する。
【0200】
対象のエリア単位内のデータ単位のデータイン動作が完了した場合(S305:Yes)、NANDライト部104は、格納先のメモリチップCPにプログラム動作を開始させる(S306)。ここでのプログラム動作は、TLCモードで実行される。
【0201】
また、対象のエリア単位内のデータ単位のデータイン動作が完了した旨はバッファ制御部102aにも通知される。通知を受けたバッファ制御部102aは、対象のエリア単位の識別情報に対応付けてエリア管理情報51に記録されているバッファ使用量の状態が通常状態であるか否かを判定する(S601)。即ち、バッファ制御部102aは、対象のエリア単位がアロケートされたタイミングにおけるバッファ使用量の状態を確認する。
【0202】
対象のエリア単位の識別情報に対応付けてエリア管理情報51に記録されているバッファ使用量の状態が通常状態である場合(S601:Yes)、バッファ制御部102aは、対象のエリア単位をデアロケートする(S308)。
【0203】
対象のエリア単位の識別情報に対応付けてエリア管理情報51に記録されているバッファ使用量の状態が通常状態でない場合(S601:No)、即ち非通常状態が対象のエリア単位の識別情報に対応付けてエリア管理情報51に記録されている場合、ステップS308の処理はスキップされる。
【0204】
以降、施形態の変形例1のNANDライト部104またはバッファ制御部102aは、
図11を参照して説明した実施形態のNANDライト部104またはバッファ制御部102によって実行されるステップS309~ステップS311の処理と同様の処理を実行する。
【0205】
このように、実施形態の変形例1によれば、メモリコントローラ11は、エリア単位のアロケートのタイミングにおいてバッファエリアの使用量が通常状態の場合には、データイン動作の完了に応じてそのエリア単位をデアロケートする。メモリコントローラ11は、エリア単位のアロケートのタイミングにおいてバッファエリアの使用量が非通常状態の場合には、プログラム動作の完了に応じてエリア単位をデアロケートする。
【0206】
(変形例2)
実施形態の変形例2によれば、バッファ制御部102aは、エリア単位のアロケートのタイミングにおけるバッファ使用量の状態と、データイン動作が完了したタイミングにおけるバッファ使用量の状態と、の両方に応じてそのエリア単位のデアロケートの制御を決定する。以下に、実施形態の変形例2にかかる事項のうちの実施形態の変形例1にかかる事項と異なる事項について説明する。
【0207】
図17は、実施形態の変形例2のメモリシステム1の、電源断が検知されていない期間におけるNANDメモリ12へのライト動作の一例を示すフローチャートである。ここでは、アロケートされたひとつのエリア単位(対象のエリア単位と表記する)にかかる動作を説明する。なお、複数のエリア単位がアロケートされている場合には、本図に示す動作はアロケートされたそれぞれのエリア単位について実行される。
【0208】
図17に示されるように、実施形態の変形例2のNANDライト部104またはバッファ制御部102aは、
図11および
図16を参照して説明した実施形態および実施形態の変形例1のNANDライト部104またはバッファ制御部102によって実行されたステップS301~ステップS306の処理と同様の処理を実行する。
【0209】
対象のエリア単位内のデータ単位のデータイン動作が完了した場合(S305:Yes)、NANDライト部104は、格納先のメモリチップCPにプログラム動作を開始させる(S306)。ここでのプログラム動作は、TLCモードで実行される。
【0210】
また、対象のエリア単位内のデータ単位のデータイン動作が完了した旨はバッファ制御部102aにも通知される。通知を受けたバッファ制御部102aは、状態判定動作による最新の判定結果が通常状態であり、かつ対象のエリア単位の識別情報に対応付けてエリア管理情報51に記録されているバッファ使用量の状態が通常状態であるか否かを判定する(S701)。
【0211】
状態判定動作による最新の判定結果が通常状態であり、かつ対象のエリア単位の識別情報に対応付けてエリア管理情報51に記録されているバッファ使用量の状態が通常状態である場合(S701:Yes)、バッファ制御部102aは、対象のエリア単位をデアロケートする(S308)。
【0212】
状態判定動作による最新の判定結果が非通常状態であるか、または対象のエリア単位の識別情報に対応付けてエリア管理情報51に記録されているバッファ使用量の状態が非通常状態である場合(S701:No)、ステップS308の処理はスキップされる。
【0213】
以降、実施形態の変形例2のNANDライト部104またはバッファ制御部102aは、
図11および
図16を参照して説明した実施形態および実施形態の変形例1のNANDライト部104またはバッファ制御部102によって実行されるステップS309~ステップS311の処理と同様の処理を実行する。
【0214】
このように、実施形態の変形例2によれば、メモリコントローラ11は、エリア単位のアロケートのタイミングおよびエリア単位に格納されていたデータ単位のデータイン動作の完了のタイミングの両方においてバッファエリアの使用量が通常状態の場合には、データイン動作の完了に応じてそのエリア単位をデアロケートする。メモリコントローラ11は、エリア単位のアロケートのタイミングおよびエリア単位に格納されていたデータ単位のデータイン動作の完了のタイミングの何れかにおいてバッファエリアの使用量が非通常状態の場合には、プログラム動作の完了に応じてエリア単位をデアロケートする。
【0215】
実施形態およびその変形例として説明されたように、バッファ制御部102,102aは、対象のエリア単位のアロケートから対象のエリア単位内のデータ単位のデータイン動作の完了までの期間のうちの設定タイミングにおけるバッファ使用量の状態に応じてデアロケートの制御を決定する。実施形態では、データイン動作の完了のタイミングが設定タイミング(第1タイミングの一例)とされた。実施形態の変形例1では、エリア単位がアロケートされたタイミングが設定タイミングとされた。実施形態の変形例2では、エリア単位がアロケートされたタイミングとデータイン動作の完了のタイミングとの両方が設定タイミングとされた。
【0216】
このように、対象のエリア単位のアロケートから対象のエリア単位内のデータ単位のデータイン動作の完了までの期間のうちの任意のタイミングが設定タイミングとされ得る。
【0217】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0218】
1 メモリシステム、2 ホスト、3 外部電源、4 区分、11,11a メモリコントローラ、12 NANDメモリ、13 DRAM、14 電源IC、15 蓄電装置、20,20-0,20-1,20-2,20-3 メモリパッケージ、31 ホストI/F、32,32-0,32-1 NANDC、33 CPU、34 SRAM、40 バッファエリア、41 第1バッファエリア、42 第2バッファエリア、51 エリア管理情報、101 ホストライト受付部、102,102a バッファ制御部、103 PLP制御部、104 NANDライト部、210 周辺回路、211 メモリセルアレイ、212 NANDストリング。