(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024132276
(43)【公開日】2024-09-30
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
G06F 12/00 20060101AFI20240920BHJP
【FI】
G06F12/00 560B
G06F12/00 597U
G06F12/00 564A
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2023042999
(22)【出願日】2023-03-17
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】中住 眞一郎
(72)【発明者】
【氏名】近藤 尊
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160CB01
5B160CC09
5B160MM01
(57)【要約】
【課題】リードのレイテンシが長くなるのを抑制しつつ不揮発性メモリへのデータの書き込みを効率良く実行できるメモリシステムを実現する。
【解決手段】メモリシステムは、メモリセルアレイに第1のデータを書き込むためのプログラム動作の実行中に次のプログラム動作用の第2のデータを受信可能なキャッシュバッファを含む不揮発性メモリと、コントローラとを含む。コントローラは、プログラム動作の開始からの経過時間を計測する。コントローラは、プログラム動作の開始から第1の時間が経過したことことに応じて、第2のデータを不揮発性メモリに転送する動作を開始する。
【選択図】
図6
【特許請求の範囲】
【請求項1】
メモリセルアレイに第1のデータを書き込むためのプログラム動作の実行中に次のプログラム動作用の第2のデータを受信可能なキャッシュバッファを含む不揮発性メモリと、
前記不揮発性メモリを制御するように構成されたコントローラと、を具備し、
前記コントローラは、
前記プログラム動作の開始からの経過時間を計測し、
前記プログラム動作の実行中に前記不揮発性メモリへの前記第2のデータの転送が完了し且つ前記プログラム動作の開始から第1の時間が経過した後に前記不揮発性メモリへの前記第2のデータの転送が開始されるように、前記プログラム動作の開始から前記第1の時間が経過したことに応じて、前記第2のデータを前記不揮発性メモリに転送する動作を開始するように構成されている、
メモリシステム。
【請求項2】
前記第1の時間は、前記プログラム動作に要するプログラム時間から、前記不揮発性メモリへの前記第2のデータの転送に要する時間を引いた残り時間に基づいて決定される、
請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、
前記プログラム時間が変動する要因となる前記プログラム動作の条件それぞれと前記プログラム動作に要するプログラム時間それぞれとの間の対応関係を示す情報を管理し、
前記不揮発性メモリに前記プログラム動作を実行させる前に、前記情報に基づいて、前記プログラム動作に関する現在の条件に対応するプログラム時間を決定するように構成されている、
請求項2に記載のメモリシステム。
【請求項4】
前記不揮発性メモリは、複数の不揮発性メモリチップを含み、
前記複数の不揮発性メモリチップの各々は、各々が消去動作の単位である複数のブロックを含み、
前記複数のブロックの各々は、複数のワードラインにそれぞれ対応する複数のページを含み、
前記複数のページの各々は、プログラム動作および読み出し動作の各々の単位であり、
前記コントローラは、
前記プログラム動作が実行されるブロックの現在のプログラム/イレーズサイクル数、前記プログラム動作が実行される不揮発性メモリチップの現在の温度、または前記プログラム動作が実行されるページに対応するワードラインに基づいて、前記プログラム動作に関する現在の条件に対応するプログラム時間を決定するように構成されている
請求項3に記載のメモリシステム。
【請求項5】
前記コントローラは、
前記不揮発性メモリに前記プログラム動作を中断させて前記プログラム動作の中断中に前記不揮発性メモリに読み出し動作を実行させる際、前記プログラム動作が中断されている間、前記経過時間の計測を停止するように構成されている、
請求項1に記載のメモリシステム。
【請求項6】
前記不揮発性メモリは、前記メモリセルアレイに含まれるメモリセル当たりに複数ビットのデータを記憶するように構成され、
前記コントローラは、
前記プログラム動作の実行中に前記プログラム動作の開始から前記第1の時間が経過したことに応じて、前記次のプログラム動作用の複数ページ分のデータを、前記第2のデータとして、前記不揮発性メモリに転送する動作を開始するように構成されている、
請求項1に記載のメモリシステム。
【請求項7】
ホストから受信されたライトコマンドに関連付けられたデータを一時的に記憶する領域を有するライトバッファをさらに具備し、
前記コントローラは、
前記ライトバッファから前記不揮発性メモリへのデータの転送の完了に応じて、前記データが格納されていた前記ライトバッファにおける前記領域を解放するように構成されている、
請求項1に記載のメモリシステム。
【請求項8】
メモリセルアレイに第1のデータを書き込むためのプログラム動作の実行中に次のプログラム動作用の第2のデータを受信可能なキャッシュバッファを含む不揮発性メモリを制御する制御方法であって、
前記プログラム動作の開始からの経過時間を計測することと、
前記プログラム動作の実行中に前記不揮発性メモリへの前記第2のデータの転送が完了し且つ前記プログラム動作の開始から第1の時間が経過した後に前記不揮発性メモリへの前記第2のデータの転送が開始されるように、前記プログラム動作の開始から前記第1の時間が経過したことに応じて、前記第2のデータを前記不揮発性メモリに転送する動作を開始することと、を具備する
制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御するメモリシステムおよび制御方法に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
【0003】
SSDのようなメモリシステムにおいては、ホストからのリードコマンドの受信からこのリードコマンドの処理の完了までに要する時間(つまり、リードのレイテンシ)が長くなるのを抑制することが求められている。また、メモリシステムにおいては、ホストからのライトコマンドに対する不揮発性メモリへのデータの書き込み性能の向上も必要とされている。
【0004】
このため、ホストから受信されるコマンド群にリードコマンドとライトコマンドとが混在されるワークロードにおいては、リードのレイテンシが長くなるのを抑制しつつ、不揮発性メモリへのデータの書き込みを効率良く実行できる技術が必要とされている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】米国特許第11,099,783号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明の一実施形態が解決しようとする課題は、リードのレイテンシが長くなるのを抑制しつつ、不揮発性メモリへのデータの書き込みを効率良く実行できるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0007】
実施形態によれば、メモリシステムは、メモリセルアレイに第1のデータを書き込むためのプログラム動作の実行中に次のプログラム動作用の第2のデータを受信可能なキャッシュバッファを含む不揮発性メモリと、前記不揮発性メモリを制御するように構成されたコントローラとを具備する。前記コントローラは、前記プログラム動作の開始からの経過時間を計測する。前記コントローラは、前記プログラム動作の実行中に前記不揮発性メモリへの前記第2のデータの転送が完了し且つ前記プログラム動作の開始から第1の時間が経過した後に前記不揮発性メモリへの前記第2のデータの転送が開始されるように、前記プログラム動作の開始から前記第1の時間が経過したことに応じて、前記第2のデータを前記不揮発性メモリに転送する動作を開始する。
【図面の簡単な説明】
【0008】
【
図1】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【
図2】実施形態に係るメモリシステムに含まれる不揮発性メモリチップの構成例を示すブロック図。
【
図3】実施形態に係るメモリシステムの不揮発性メモリチップに含まれる複数のブロックの各々の構成例を示す図。
【
図4】実施形態に係るメモリシステムの不揮発性メモリチップに含まれる複数のブロックの各々の回路構成例を示す図。
【
図5】不揮発性メモリチップへのデータ転送の完了に応じてライトバッファを解放する方式において必要なライトバッファのサイズと、プログラム動作の完了に応じてライトバッファを解放する方式において必要なライトバッファのサイズとを説明するための図。
【
図6】実施形態に係るメモリシステムにおいて実行されるキャッシュプログラム動作の例を示すタイミングチャート。
【
図7】実施形態に係るメモリシステムにおいて実行される、トリプルレベルセルモードを使用したキャッシュプログラム動作の例を示すタイミングチャート。
【
図8】実施形態に係るメモリシステムにおいて次のプログラム動作用のデータを不揮発性メモリチップに転送する動作を開始するタイミングの例を示すタイミングチャート。
【
図9】実施形態に係るメモリシステムの不揮発性メモリチップに含まれる複数のプレーンの各々の構成例を示すブロック図。
【
図10】プログラム動作Aのロアーページプログラムの実行中における不揮発性メモリチップの状態を示す図。
【
図11】プログラム動作Aのミドルページプログラムの実行中における不揮発性メモリチップの状態を示す図。
【
図12】プログラム動作Aのアッパーページプログラムの実行開始時における不揮発性メモリチップの状態を示す図。
【
図13】実施形態に係るメモリシステムにおいて実行される、プログラム動作Aのアッパーページプログラム動作の実行中に次のプログラム動作B用のデータを不揮発性メモリチップに転送する動作を示す図。
【
図14】実施形態に係るメモリシステムにおいて実行される、不揮発性メモリチップのプログラム動作がサスペンドされている間、タイマの動作を停止させる動作を示すタイミングチャート。
【
図15】実施形態に係るメモリシステムにおいて実行されるライト処理の手順の第1の例を示すフローチャート。
【
図16】実施形態に係るメモリシステムにおいて実行されるライト処理の手順の第2の例を示すフローチャート。
【
図17】実施形態に係るメモリシステムにおいて実行されるライト処理の手順の第3の例を示すフローチャート。
【発明を実施するための形態】
【0009】
以下、図面を参照して、実施形態を説明する。
【0010】
以下では、実施形態に係るメモリシステムがソリッドステートドライブ(SSD)として実現されている場合を想定する。
【0011】
図1は、実施形態に係るメモリシステムを含む情報処理システム1の構成例を示すブロック図である。情報処理システム1は、ホスト(ホストデバイス)2と、SSD3と、を含む。ホスト2とSSD3とは、バス10を介して互いに接続可能である。
【0012】
ホスト2は、情報処理装置である。ホスト2は、例えば、パーソナルコンピュータ、サーバコンピュータ、またはモバイルデバイスである。ホスト2は、SSD3にアクセスする。具体的には、ホスト2は、データを書き込むためのコマンドであるライトコマンドをSSD3に送信する。また、ホスト2は、データを読み出すためのコマンドであるリードコマンドをSSD3に送信する。
【0013】
SSD3は、ホスト2に接続可能なストレージデバイスである。SSD3は、不揮発性メモリを含む。
【0014】
SSD3とホスト2との間の通信は、バス10を介して実行される。バス10は、ホスト2とSSD3とを接続する通信路である。バス10は、例えば、PCI expressTM(PCIeTM)バスである。PCIeバスは、全二重(full duplex)通信路である。全二重通信路は、ホスト2からSSD3へデータおよび入出力(I/O)コマンドを送信する伝送路と、SSD3からホスト2へデータおよび応答を送信する伝送路との双方を含む。I/Oコマンドは、不揮発性メモリへのデータの書き込み、または不揮発性メモリからのデータの読み出しを行うためのコマンドである。I/Oコマンドは、例えば、ライトコマンド、またはリードコマンドである。
【0015】
ホスト2とSSD3とを接続するための論理インタフェースの規格としては、例えば、NVM expressTM(NVMeTM)規格が使用され得る。
【0016】
次に、ホスト2の構成を説明する。ホスト2は、プロセッサ21と、メモリ22とを含む。プロセッサ21およびメモリ22は、内部バス20を介して相互接続されている。
【0017】
プロセッサ21は、例えばセントラルプロセッシングユニット(CPU)である。プロセッサ21は、SSD3、または、ホスト2に接続された他のストレージデバイスからメモリ22にロードされるソフトウェア(ホストソフトウェア)を実行する。ホストソフトウェアは、例えば、オペレーティングシステム、ファイルシステム、アプリケーションプログラム、を含む。
【0018】
メモリ22は、例えば揮発性のメモリである。メモリ22は、メインメモリ、システムメモリ、またはホストメモリとも称される。メモリ22は、例えばダイナミックランダムアクセスメモリ(DRAM)である。
【0019】
次に、SSD3の構成を説明する。以下では、SSD3の不揮発性メモリがNAND型フラッシュメモリで実現されている場合を想定する。
【0020】
SSD3は、コントローラ4と、NAND型フラッシュメモリ5とを含む。また、SSD3は、ランダムアクセスメモリ、例えば、ダイナミックランダムアクセスメモリ(DRAM)6をさらに含んでいてもよい。さらに、SSD3は、電源回路8と、温度センサ52(52-0、52-1、52-2、52-3、52-4、52-5、52-6、52-7、・・・)と、を含む。
【0021】
コントローラ4は、メモリコントローラである。コントローラ4は、例えば、system-on-a-chip(SoC)のような半導体デバイスである。コントローラ4は、NAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、ホスト2から受信されるI/Oコマンドそれぞれに基づき、ライト処理と、リード処理と、を実行する。ライト処理は、NAND型フラッシュメモリ5にデータを書き込むための処理である。リード処理は、NAND型フラッシュメモリ5からデータを読み出すための処理である。コントローラ4とNAND型フラッシュメモリ5とを電気的に接続するインタフェースの規格としては、例えば、Toggleインタフェース、またはオープンNANDフラッシュインタフェース(ONFI)が使用される。コントローラ4の各部の機能は、専用ハードウェア、プログラムを実行するプロセッサ、またはこれら専用ハードウェアとプロセッサとの組み合わせにより実現され得る。
【0022】
NAND型フラッシュメモリ5は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。以下では、NAND型フラッシュメモリ5を単にフラッシュメモリ5と称する。フラッシュメモリ5は、複数のブロックを含む。複数のブロックの各々は、データ消去(イレーズ)動作の最小単位である。複数のブロックの各々は、複数のページを含む。複数のページの各々は、書き込み動作(具体的にはプログラム動作)および読み出し動作の各々の単位である。フラッシュメモリ5は、一つまたは複数の不揮発性メモリチップを含む。不揮発性メモリチップは、例えばNAND型フラッシュメモリチップ(以下、NANDチップと称する)である。
図1では、フラッシュメモリ5が、複数のNANDチップ51(51-0~~51-7、・・・、)を含む場合が例として示されている。
【0023】
DRAM6は、揮発性メモリである。DRAM6は、例えば、論理物理アドレス変換テーブル(logical-to-physical address translation table:L2Pテーブル)61を記憶する記憶領域を含む。DRAM6は、プログラム時間テーブル62を記憶する記憶領域も含んでいてもよい。
【0024】
L2Pテーブル61は、マッピング情報を格納するテーブルである。マッピング情報は、論理アドレスそれぞれとフラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを所定の管理サイズの単位で示す情報である。論理アドレスは、SSD3をアクセスするためにホスト2によって使用されるアドレスである。論理アドレスとしては、例えば、論理ブロックアドレス(LBA)が使用される。物理アドレスは、フラッシュメモリ5内の記憶位置(物理記憶位置)を示すアドレスである。
【0025】
プログラム時間テーブル62は、プログラム時間が変動する要因となるプログラム動作の条件それぞれとプログラム動作に要するプログラム時間それぞれとの間の対応関係を示すプログラム時間情報を保持するテーブルである。プログラム時間が変動する要因となるプログラム動作の条件は、例えば、書き込み対象のページに対応するワードライン、書き込み対象のブロックのプログラム/イレーズサイクル数、または書き込み対象のNANDチップ51の温度を含む。
【0026】
電源回路8は、SSD3の各構成要素(コントローラ4、フラッシュメモリ5、DRAM6、等)に電力を供給する回路である。電源回路8は、例えばホスト2から供給される電力(ここでは電源電圧Vcc)を用いて、SSD3の各構成要素に供給すべき電力(ここでは電源電圧Vcc1、Vcc2、・・・)を生成する。
【0027】
温度センサ52-0、52-1、52-2、52-3、52-4、52-5、52-6、52-7、・・・は、NANDチップ51-0、51-1、51-2、51-3、51-4、51-5、51-6、51-7、・・・とそれぞれ対応して設けられている。温度センサ52の各々は、対応するNANDチップ51の温度を検知する。
【0028】
なお、温度センサ52の各々は、SSD3の各構成要素が実装されたSSD3のプリント回路基板上に実装されていてもよい。あるいは、温度センサ52の各々は、対応するNANDチップ51に内蔵されていてもよい。
【0029】
また、
図1では、複数の温度センサ52と複数のNANDチップ51とが1対1の関係でそれぞれ対応付けられている場合が示されているが、これら温度センサ52とこれらNANDチップ51とは1対1の関係で対応付けられていなくてもよい。例えば、幾つかのNANDチップ51を含む一つのメモリパッケージ当たりに一つの温度センサ52が設けられる、という構成が使用されてもよい。
【0030】
次に、コントローラ4の内部構成を説明する。コントローラ4は、例えば、ホストインタフェース(ホストI/F)41と、スタティックRAM(SRAM)42と、CPU43と、直接メモリアクセスコントローラ(DMAC)44と、誤り訂正回路45と、NANDインタフェース(NAND I/F)46と、DRAMインタフェース(DRAM I/F)47とを含む。これらホストインタフェース41と、SRAM42と、CPU43と、DMAC44と、誤り訂正回路45と、NANDインタフェース46と、DRAMインタフェース47とは、内部バス40を介して相互接続される。コントローラ4は、これらの構成要素を備える電子回路として構成される。
【0031】
ホストインタフェース41は、ホスト2との通信を実行するインタフェース回路である。ホストインタフェース41は、例えば、ホスト2のメモリ22からI/Oコマンド(ライトコマンド、リードコマンド)それぞれをフェッチする処理と、フェッチした各ライトコマンドに関連付けられたライトデータをホスト2のメモリ22から取得する処理と、フェッチした各リードコマンドに基づいてフラッシュメモリ5から読み出されたデータをホスト2のメモリ22に転送する処理と、フェッチした各I/Oコマンドに対応する完了応答をホスト2に送信する処理と、を実行する。
【0032】
SRAM42は、揮発性メモリである。SRAM42の記憶領域は、例えば、CPU43の作業領域として使用される。SRAM42の記憶領域の一部は、ライトバッファ421として使用される。ライトバッファ421は、ホスト2から受信されるライトデータを一時的に記憶するバッファである。なお、DRAM6の記憶領域の一部がライトバッファ421として使用されてもよい。
【0033】
CPU43は、プロセッサである。CPU43は、フラッシュメモリ5または図示しないROMに格納されている制御プログラム(ファームウェア)をSRAM42にロードする。そしてCPU43は、このファームウェアを実行することによって様々な処理を行う。なお、ファームウェアは、DRAM6にロードされてもよい。
【0034】
CPU43は、例えば、フラッシュトランスレーション層(FTL)として、フラッシュメモリ5に記憶されたデータの管理と、フラッシュメモリ5に含まれるブロックの管理とを行う。フラッシュメモリ5に記憶されたデータの管理は、例えば、マッピング情報の管理を含む。CPU43は、L2Pテーブル61のマッピング情報を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを、所定の管理サイズの単位で管理する。
【0035】
フラッシュメモリ5においては、ブロック内のページへのデータの書き込みは、このブロックの1プログラム/イレーズサイクル当たり1回のみ可能である。つまり、データが既に書き込まれているブロック内の記憶位置(物理記憶位置)に新たなデータを直接上書きすることはできない。このため、既にブロック内の物理記憶位置に書き込まれているデータを更新する場合には、コントローラ4は、そのブロック(または別のブロック)内の未書き込みページ(空きページ)に新たなデータを書き込み、そして以前のデータを無効データとして扱う。換言すれば、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、L2Pテーブル61を更新して、この論理アドレスに、この別の物理記憶位置を示す物理アドレスを関連付ける。
【0036】
フラッシュメモリ5に含まれるブロックの管理は、フラッシュメモリ5に含まれる不良ブロック(バッドブロック)の管理と、ウェアレベリングと、ガベージコレクション(GC)とを含む。
【0037】
GCは、フリーブロックの個数を増やすための動作である。フリーブロックとは、有効データを含まないブロックを意味する。コントローラ4は、各ブロックの状態(フリーブロックであるか否か、アクティブブロックであるか否か、プログラム/イレーズサイクル数、書き込み済みページの数や位置、空きページの数や位置、有効データの量、無効データの量、等)を管理する。GC動作においては、コントローラ4は、有効データと無効データとが混在する幾つかのブロックをGCソースブロックとして選択する。GCソースブロックは、コピー元ブロックとも称される。コントローラ4は、GCソースブロックに含まれる有効データをGCデスティネーションブロック(例えば、フリーブロック)にコピーする。GCデスティネーションブロックは、コピー先ブロックとも称される。ここで、有効データとは、L2Pテーブル61において論理アドレスに関連付けられている物理記憶位置に記憶されているデータ(すなわち最新のデータとして論理アドレスに関連付けられているデータ)を意味する。有効データは、後にホスト2からリードされる可能性がある。無効データとは、どの論理アドレスにも関連付けられていないデータを意味する。どの論理アドレスにも関連付けられていないデータは、もはやホスト2からリードされる可能性が無いデータである。GCソースブロックからGCデスティネーションブロックに有効データをコピーすると、コントローラ4は、L2Pテーブル61を更新して、コピーされた有効データの論理アドレスそれぞれにコピー先の物理アドレスをマッピングする。有効データが別のブロックにコピーされることによって無効データのみになった(有効データを含まなくなった)ブロックは、フリーブロックとして解放される。これによって、このブロックは、このブロックに対するデータ消去動作が実行された後にデータの書き込みに再利用することが可能となる。
【0038】
DMAC44は、ダイレクトメモリアクセス(DMA)を実行する回路である。DMAC44は、ホスト2のメモリ22とSRAM42(またはDRAM6)との間のデータ転送を実行する。
【0039】
誤り訂正回路45は、フラッシュメモリ5にデータが書き込まれる際に、エンコード処理を実行する。エンコード処理において、誤り訂正回路45は、フラッシュメモリ5に書き込まれるべきデータにエラー訂正コード(ECC)を冗長コードとして付加する。フラッシュメモリ5からデータがリードされた際に、誤り訂正回路45は、デコード処理を実行する。デコード処理において、誤り訂正回路45は、フラッシュメモリ5から読み出されたデータに付加されたECCを使用して、このデータの誤り検出および誤り訂正を実行する。
【0040】
NANDインタフェース46は、フラッシュメモリ5を制御するメモリインタフェース回路である。NANDインタフェース46は、フラッシュメモリ5に含まれる複数のNANDチップ51に複数のチャンネルchを介してそれぞれ接続されている。
【0041】
個々のNANDチップ51は、独立して動作可能である。このため、NANDチップ51は、並列動作可能な単位として機能する。NANDインタフェース46は、複数のチャンネルchにそれぞれ対応する複数のNANDコントローラ461を含む。複数のNANDコントローラ461の各々は、NANDチップ51を制御するメモリ制御回路である。各NANDコントローラ461は、対応する一つのチャンネルchに接続されたNANDチップ51それぞれを制御する。
図1では、NANDインタフェース46に含まれる複数のNANDコントローラ461のうち、2つのチャンネルch0、ch1にそれぞれ接続された2つのNANDコントローラ461-0および461-1の構成のみが代表して示されている。
【0042】
NANDコントローラ461-0は、チャンネルch0を介して、NANDチップ51-0~51-3に接続される。NANDコントローラ461-0は、プログラム動作を制御する構成要素として、プログラム実行部4611-0と、タイマ4612-00~4612-03と、を含む。
【0043】
プログラム実行部4611-0は、NANDチップ51-0~51-3の各々がサポートしているキャッシュプログラム機能を使用して、NANDチップ51-0~51-3の各々のプログラム動作を制御する。キャッシュプログラム機能は、プログラム動作の実行中に次のプログラム動作用のライトデータを外部から受信可能な機能である。プログラム実行部4611-0は、あるNANDチップにおいてプログラム動作が実行されている間に次のプログラム動作用のライトデータを、このあるNANDチップに転送する。キャッシュプログラム機能を使用したプログラム動作は、キャッシュプログラム動作と称される。キャッシュプログラム動作の詳細は、後述する。
【0044】
タイマ4612-00~4612-03は、NANDチップ51-0~51-3にそれぞれ対応付けられている。タイマ4612-00~4612-03の各々は、対応するNANDチップ51におけるプログラム動作の開始からの経過時間を測定するために使用される。
【0045】
NANDコントローラ461-1は、チャンネルch1を介して、NANDチップ51-4~51-7に接続される。NANDコントローラ461-1は、NANDコントローラ461-0と同様に、プログラム動作を制御する構成要素として、プログラム実行部4611-1と、タイマ4612-10~4612-13と、を含む。
【0046】
DRAMインタフェース47は、DRAM6を制御する回路である。DRAMインタフェース47は、DRAM6にデータを格納する。また、DRAMインタフェース47は、DRAM6に格納されているデータを読み出す。
【0047】
SSD3は、さらにキャパシタ81を含む。キャパシタ81は、電力を蓄えることができる素子または電子部品である。キャパシタ81は、電源回路8に電気的に接続される。電源回路8は、ホスト2から供給される電源電圧Vccの値が、ホスト2からの予告無しで低下した場合、キャパシタ81に蓄えられている電力を使用して、SSD3の各構成要素に電力を供給する。また、電源回路8は、内部バス40に接続されており、予期しない電力喪失が起きたことをコントローラ4(例えばCPU43)に通知する。予期しない電力喪失は、ホスト2からの予告(電源遮断予告通知)無しで、SSD3への電力の供給が遮断される現象である。電源遮断予告通知は、SSD3への電力の供給がオフとなる(断たれる)ことを予告する通知である。ホスト2の電源がオフになる前に、ホスト2は、電源遮断予告通知をSSD3に送信して、SSD3への電力の供給がまもなく断たれることをSSD3に通知する。電源遮断予告通知としては、例えば、NVMe規格で規定されているShutdown Notificationを使用し得る。
【0048】
次に、CPU43の機能構成を説明する。CPU43は、FTLとして機能する構成要素に加え、ライト処理部431、およびリード処理部432を含む。ライト処理部431、およびリード処理部432の各々の一部または全部は、コントローラ4の専用ハードウェアによって実現されてもよい。
【0049】
ライト処理部431は、ホスト2から受信されるライトコマンドそれぞれを処理することによって、ライト処理を実行する。ライト処理は、例えば、ライトコマンドに関連付けられたライトデータをホスト2のメモリ22から取得する処理と、フラッシュメモリ5内の記憶位置にライトデータを書き込む処理と、L2Pテーブル61を更新して、ライトコマンドによって指定された論理アドレスに、ライトデータが書き込まれた記憶位置を示す物理アドレスをマッピングする処理とを含む。また、ライト処理は、ライトコマンドの処理の完了を示す完了応答をホスト2に送信する処理を含む。ライトコマンドの処理の完了を示す完了応答は、例えば、このライトコマンドに関連付けられたライトデータがホスト2のメモリ22からライトバッファ421に転送されたことに応じ、ホスト2に送信される。
【0050】
フラッシュメモリ5内の記憶位置にライトデータを書き込む処理では、NANDインタフェース46は、ライトデータをNANDチップ51に転送し、そしてNANDチップ51にプログラム動作の実行を指示する。プログラム動作は、NANDチップ51に転送されたライトデータをNANDチップ51のメモリセルアレイに書き込む動作である。プログラム動作は、NANDチップ51によって実行される。
【0051】
リード処理部432は、ホスト2から受信されるリードコマンドそれぞれを処理することによって、リード処理を実行する。リード処理は、リードコマンドによって指定された論理アドレスに対応するデータをライトバッファ421またはフラッシュメモリ5から読み出す処理と、読み出したデータをホスト2のメモリ22に転送する処理と、リードコマンドの処理の完了を示す完了応答をホスト2に送信する処理とを含む。リードコマンドによって指定された論理アドレスに対応するデータがライトバッファ421にない場合、このデータはフラッシュメモリ5から読み出される。この場合、リード処理部432は、例えば、L2Pテーブル61を参照することによってリードコマンドによって指定された論理アドレスを物理アドレスに変換する処理と、物理アドレスによって示されるフラッシュメモリ5(リード対象のNANDチップ51)内の記憶位置からデータを読み出す処理とを実行する。
【0052】
リード対象のNANDチップ51内の記憶位置からデータを読み出す処理では、NANDインタフェース46は、NANDチップ51に読み出し動作(センス動作とも称する)の実行を指示する。センス動作は、NANDチップ51のメモリセルアレイからデータを読み出す動作である。センス動作は、NANDチップ51において実行される。そして、NANDインタフェース46は、読み出されたデータをNANDチップ51からコントローラ4に転送するためのデータ出力動作を実行する。
【0053】
次に、NANDチップ51の構成を説明する。
図2は、SSD3に含まれるNANDチップ51の構成例を示すブロック図である。
【0054】
ここでは、NANDチップ51-0に着目してNANDチップ51の構成を説明する。他のNANDチップ51もNANDチップ51-0と同じ構成を有している。NANDチップ51-0は、例えば、複数のプレーン(ここではプレーンPLN0~PLN3)を含む。プレーンPLN0~PLN3の各々は、周辺回路と、メモリセルアレイとを含む。
【0055】
周辺回路は、メモリセルアレイを制御する回路である。周辺回路は、例えば、ロウデコーダ、カラムデコーダ、センスアンプ、ページバッファ等を含む。周辺回路は、プログラム動作、読み出し動作、あるいはイレーズ動作をメモリセルアレイに対して実行する。周辺回路は、さらにキャッシュバッファを含む。
【0056】
キャッシュバッファは、ページバッファからメモリセルアレイにライトデータを書き込むプログラム動作の実行中に、メモリセルアレイに対する次のプログラム動作で使用されるライトデータを受信可能なバッファである。キャッシュプログラム動作は、キャッシュバッファを使用して実行される。
【0057】
メモリセルアレイは、複数のブロック(BLK0、BLK1、BLK2、…)を含む。各ブロックBLKは、不揮発性メモリセルトランジスタ(以降では、単にメモリセルトランジスタまたはメモリセルと称する)の集合である。各ブロックBLKは、複数のストリングユニット(SU0、SU1、SU2、SU3)を含む。各ストリングユニットSUは、メモリセルトランジスタの集合である。各ストリングユニットSUは、複数のNANDストリングNS(単にストリングとも称する)を含む。各NANDストリングNSは、直列接続されたメモリセルトランジスタの集合である。
【0058】
次に、ブロックBLKの構成例を説明する。
図3は、SSD3に含まれるフラッシュメモリ5のブロックBLKの構成例を示す図である。
【0059】
図3では、ブロックBLK0に着目してブロックBLKの構成を説明する。他のブロックBLKも、ブロックBLK0と同じ構成を有している。ブロックBLK0は、4つのストリングユニット(SU0、SU1、SU2、SU3)を含む。4つのストリングユニット(SU0、SU1、SU2、SU3)は、複数のワードラインWL0~WLxが積層された方向(垂直方向)と直交する方向(水平方向)に配置されている。各ストリングユニットSUは、複数のNANDストリングNSを含む。各NANDストリングNSの一端は、複数のビットライン(BL0~BL(L-1))のうちの対応するビットラインに接続されている。各NANDストリングNSは、垂直方向に延在している。各NANDストリングNSに含まれる複数のメモリセルトランジスタの制御ゲートは、複数のワードライン(WL0、WL1、…、WLx)にそれぞれ接続されている。
【0060】
次に、ブロックBLKの回路構成を説明する。
図4は、SSD3に含まれるフラッシュメモリ5のブロックBLKの回路構成例を示す図である。
【0061】
図4では、ブロックBLK0に着目してブロックBLKの構成を説明する。他のブロックBLKも、ブロックBLK0と同じ構成を有している。ブロックBLK0は、4つのストリングユニット(SU0、SU1、SU2、SU3)を含む。各ストリングユニットSUは、複数のNANDストリングNSを含む。
【0062】
各NANDストリングNSは、例えば、複数のメモリセルトランジスタMT(MT0~MTx)、および2つの選択トランジスタST1、ST2を含んでいる。各メモリセルトランジスタMTは、制御ゲートと電荷蓄積層とを含み、データを不揮発に保持する。そして、メモリセルトランジスタMT(MT0~MTx)は、選択トランジスタST1のソースと選択トランジスタST2のドレインとの間に直列接続されている。選択トランジスタST1のドレインは、対応するビットラインBLに接続されている。選択トランジスタST2のソースは、ストリングユニット(SU0、SU1、SU2、SU3)間で共通のソースラインSLに接続されている。
【0063】
ストリングユニットSU0の各選択トランジスタST1のゲートは、ストリングユニットSU0に対応する選択ゲート線SGD0に接続される。ストリングユニットSU1の各選択トランジスタST1のゲートは、ストリングユニットSU1に対応する選択ゲート線SGD1に接続される。ストリングユニットSU2の各選択トランジスタST1のゲートは、ストリングユニットSU2に対応する選択ゲート線SGD2に接続される。ストリングユニットSU3の各選択トランジスタST1のゲートは、ストリングユニットSU3に対応する選択ゲート線SGD3に接続される。これに対してストリングユニットSU0~SU3の選択トランジスタST2のゲートは、選択ゲート線SGSに共通接続される。なお、ストリングユニットSU0~SU3の選択トランジスタST2のゲートは、ストリングユニットごとに異なる選択ゲート線に接続されてもよい。同一のブロックBLKにあるメモリセルトランジスタMT0~MTxの制御ゲートは、それぞれワードラインWL0~WLxに共通接続される。
【0064】
周辺回路によるプログラム動作および読み出し動作(センス動作)は、一つのストリングユニットSUにおける一つのワードラインWLに接続された複数のメモリセルMTに対して、一括して実行され得る。プログラム動作および読み出し動作の際に、一括して選択されるメモリセルMTの集合をメモリセルグループMG(ページ)と称する。各メモリセルMTが1ビットのデータを記憶するように構成されている場合にメモリセルグループMGあたりに記憶されるデータのサイズをページサイズと称する。各メモリセルMTが3ビットのデータを記憶するように構成されている場合、メモリセルグループMGあたりに記憶されるデータのサイズは3ページサイズである。
【0065】
周辺回路によるイレーズ動作は、ブロックBLK単位で実行される。すなわち、一つのブロックBLKに含まれる全てのメモリセルMTに格納されたデータは、一括して消去される。
【0066】
次に、SSD3におけるライトバッファ421の解放動作を説明する。
図5は、NANDチップ51へのデータ転送の完了に応じてライトバッファ421を解放する方式において必要なライトバッファ421のサイズと、プログラム動作の完了に応じてライトバッファ421を解放する方式において必要なライトバッファ421のサイズとを説明するための図である。
【0067】
図5において、時間経過に対する、「データ受信」、「データ転送」、および「プログラム動作」の長さは、それぞれの動作に要する時間に対応する。「データ受信」は、ホスト2からSSD3のライトバッファ421へのライトデータの転送に要するデータ転送時間を示す。「データ転送」は、ライトバッファ421からNANDチップ51へのライトデータの転送に要するデータ転送時間を示す。「プログラム動作」は、NANDチップ51の周辺回路のページバッファからメモリセルアレイにライトデータを書き込むプログラム動作に要するプログラム時間を示す。
【0068】
NANDチップ51-0~51-3は、互いに独立して動作可能である。しかし、NANDチップ51-0~51-3が同じチャンネルch0を共有している場合、NANDチップ51-0~51-3に対するライトデータの転送を同時に実行することはできない。このため、同じチャンネルch0に接続されたNANDチップ51-0~51-3に対するライトデータの転送は、あるNANDチップ51のプログラム動作の実行中に別のNANDチップ51へのライトデータの転送が実行されるように、時分割方式(インターリーブ方式)で実行される。
【0069】
本実施形態では、コントローラ4は、ライトバッファ421からNANDチップ51へのライトデータの転送の完了に応じて、このライトデータが格納されているライトバッファ421における領域を解放する処理を実行する。ライトバッファ421の解放は、例えば、ライトデータのサイズよりも小さい所定のデータサイズ単位で実行し得る。ライトバッファ421における解放された領域は、ホスト2から受信される別のライトデータを格納するために利用可能である。
【0070】
ライトバッファ421をNANDチップ51へのデータ転送の完了に応じて解放する方式を使用した場合、チャンネル当たりに必要なライトバッファ421のサイズは、1チップ分のサイズ+αである。ここで、1チップ分のサイズは、NANDチップ51のプログラム動作においてメモリセルアレイに書き込まれるライトデータのサイズである。例えば、ページサイズが16KBで、メモリセル当たりに3ビットのデータを書き込むトリプルレベルセル(TLC)モードを使用して4つのプレーンに同時にデータを書き込むケースでは、1チップ分のサイズは、192KB(=16KB×3ページ×4プレーン)である。αは、ライトバッファ421からNANDチップ51にライトデータ全てが転送された時点でホスト2からの次のライトデータ全てをライトバッファ421に格納することを可能にするために必要なサイズである。ライトバッファ421の解放をライトデータのサイズよりも小さい所定のデータサイズ単位で実行する場合、αは、1チップ分のサイズよりも小さいサイズである。
【0071】
一方、もしライトデータのプログラム動作の完了に応じてライトデータが格納されているライトバッファ421内の領域を解放する方式を使用した場合、チャンネル当たりにSSD3に搭載することが必要なライトバッファ421のサイズは、チャンネル当たりのチップ数分のサイズ、例えば4チップ分のサイズである。
【0072】
このように、ライトバッファ421をNANDチップ51へのデータ転送の完了に応じて解放する方式を使用した場合、SSD3に搭載することが必要なライトバッファ421のサイズが少なく済むので、コスト削減のメリットがある。具体的には、ライトバッファ421として使用されるRAM自体のサイズの削減によるコスト削減が可能となる。また、予期しない電力喪失が起きた時に不揮発化するべきライトバッファ421内のデータ量が少なくなることで、SSD3に搭載することが必要なキャパシタ81の容量も削減できる。
【0073】
次に、キャッシュプログラム動作の例を説明する。
図6は、SSD3において実行されるキャッシュプログラム動作の例を示すタイミングチャートである。
【0074】
図6では、NANDチップ51-0にプログラム動作Aと次のプログラム動作Bとを実行させ、NANDチップ51-1にプログラム動作Xと次のプログラム動作Yとを実行させる場合が想定されている。
【0075】
NANDチップ51-0のキャッシュプログラム機能を使用する場合、NANDコントローラ461-0は、NANDチップ51-0におけるプログラム動作Aの実行中に、NANDチップ51-0への次のプログラム動作B用のライトデータBのデータ転送(「データ転送B」)を実行することができる。
【0076】
本実施形態では、「データ転送B」の開始タイミングは、プログラム動作Aの開始から第1の時間が経過した後にライトデータBの転送が開始され且つプログラム動作Aの実行中にNANDチップ51-0へのライトデータBの転送が完了するように制御される。
【0077】
第1の時間は、「プログラム時間」と、「データ転送時間」と、に基づいて決定される時間である。「プログラム時間」は、NANDチップ51-0におけるプログラム動作Aの実行に要する時間である。「データ転送時間」は、NANDチップ51-0への「データ転送B」に要する時間である。
【0078】
NANDコントローラ461-0は、プログラム動作Aの開始時に、NANDチップ51-0に対応するタイマ4612-00の動作をスタートさせる。そして、タイマ4612-00によって測定された経過時間が第1の時間に達すると、NANDコントローラ461-0は、「データ転送B」を開始する。
【0079】
これにより、プログラム動作Aの実行中に「データ転送B」が完了でき且つできるだけ遅いタイミングで「データ転送B」が開始されるように、「データ転送B」の開始タイミングを制御することができる。プログラム動作Aが完了する時点では、「データ転送B」も完了している。このため、プログラム動作Aが完了すると、NANDチップ51-0は、プログラム動作Bを開始することができる。
【0080】
NANDチップ51-0におけるプログラム動作Bの実行中に、NANDコントローラ461-0は、NANDチップ51-0への次のプログラム動作C用のライトデータCのデータ転送(「データ転送C」)を実行することができる。
【0081】
本実施形態では、「データ転送C」も、プログラム動作Bの開始から第1の時間が経過した後に実行される。すなわち、NANDコントローラ461-0は、NANDチップ51-0におけるプログラム動作Bの開始時にも、NANDチップ51-0に対応するタイマ4612-00の動作をスタートさせる。そして、タイマ4612-00によって測定された経過時間が第1の時間に達すると、NANDコントローラ461-0は、「データ転送C」を開始する。プログラム動作Bに要するプログラム時間は、プログラム動作Aに要するプログラム時間とほぼ等しい。また、データ転送Cに要するデータ転送時間は、データ転送Bに要するデータ転送時間と同じである。
【0082】
このように、NANDチップ51-0のキャッシュプログラム機能を利用することにより、NANDチップ51-0におけるプログラム動作の実行中にNANDチップ51-0への次のプログラム動作用のライトデータを転送できる。したがって、データ転送時間をプログラム時間内に隠蔽することができる。この結果、NANDチップ51-0におけるプログラム動作の完了後にNANDチップ51-0へ次のプログラム動作用のライトデータの転送を開始する場合に比し、NANDチップ51-0に対するデータの書き込み性能を向上できる。
【0083】
また、本実施形態では、キャッシュプログラム機能を有効に利用できる範囲内で「データ転送B」の開始タイミングができるだけ遅くなるように制御されるので、データBに対するリードアクセスの最大待ち時間を短くすることができる。
【0084】
本実施形態では、データBに対するリードアクセスの最大待ち時間は、
図6において実線のブロック矢印で示されるように、「データ転送B」の開始からプログラム動作Bの完了までの時間である。これにより、プログラム動作Aの開始時に「データ転送B」を開始するケースに比べ、リードのレイテンシを短くすることができる。リードのレイテンシを短くできる理由は、以下の通りである。
【0085】
NANDチップ51-0へライトデータが転送されると、このライトデータは、ライトバッファ421から破棄される。
【0086】
ライトバッファ421からNANDチップ51-0へデータが転送された直後に、このデータのLBAを指定するリードコマンドかホスト2から受信されることがあり得る。この場合、このLBAに対応する最新のデータは、ライトバッファ421に既に存在していない。このため、このLBAに対応する最新のデータを読み出すためには、このデータのプログラム動作が完了するまで待つことが必要とされる。したがって、データBに対するリードアクセスの最大待ち時間は、「データ転送B」の開始からプログラム動作Bの完了までの時間となる。
【0087】
NANDチップ51-0への「データ転送B」は、プログラム動作Aが開始された時に開始することも可能である。しかし、この場合には、データBに対するリードアクセスの最大待ち時間は、
図6において破線のブロック矢印で示すように、プログラム動作Aの開始からプログラム動作Bの完了までの時間である。この時間は、本実施形態における待ち時間の約2倍の長さである。
【0088】
第1の時間は、プログラム動作Aの実行に要するプログラム時間からプログラム動作B用のライトデータのデータ転送に要するデータ転送時間を引いた残り時間、つまり[プログラム時間]-[データ転送時間])、に基づいて決定される。
【0089】
第1の時間を([プログラム時間]-[データ転送時間])に設定した場合には、「データ転送B」が開始されるタイミングを、プログラム動作Aの実行中にプログラム動作B用のライトデータのデータ転送が完了可能な範囲内で最も遅いタイミングにすることができる。
【0090】
なお、各NANDチップ51へのライトデータの転送は、予め定められたコマンドシーケンス(例えば、第1コマンド、アドレス、ライトデータ、および第2コマンドを含むコマンドシーケンス)を各NANDチップ51に送信することによって実行される。このコマンドシーケンスの送信に要する時間の大部分は、ライトデータの転送に要するデータ転送時間である。このため、第1の時間を決定する際には、「データ転送時間」が考慮されれば十分である。
【0091】
NANDチップ51-1への「データ転送Y」および「データ転送Z」も、NANDチップ51-0への「データ転送A」および「データ転送B」と同様の方法で制御される。
【0092】
この場合、NANDチップ51-1への「データ転送Y」および「データ転送Z」を開始するタイミングは、NANDチップ51-1に対応するタイマ4612-01を使用して制御される。
【0093】
すななわ、NANDコントローラ461-0は、NANDチップ51-1におけるプログラム動作Xの開始時に、NANDチップ51-1に対応するタイマ4612-01の動作をスタートさせる。そして、タイマ4612-01によって測定された経過時間が第1の時間に達すると、NANDコントローラ461-0は、「データ転送Y」を開始する。また、NANDコントローラ461-0は、NANDチップ51-1におけるプログラム動作Yの開始時にも、NANDチップ51-1に対応するタイマ4612-01の動作をスタートさせる。そして、タイマ4612-01によって測定された経過時間が第1の時間に達すると、NANDコントローラ461-0は、「データ転送Z」を開始する。
【0094】
次に、キャッシュプログラム動作の別の例を説明する。
図7は、TLCモードを使用したキャッシュプログラム動作の例を示すタイミングチャートである。
【0095】
TLCモードのプログラム動作をあるNANDチップ51に実行させる場合、ライトバッファ421からNANDチップ51に3ページ分のライトデータ(ロアーページデータ、ミドルページデータ、アッパーページデータ)が転送される。NANDチップ51において実行されるプログラム動作Aは、ロアーページプログラムと、ミドルページプログラムと、アッパーページプログラムとによって実行される。ロアーページプログラムでは、NANDチップ51のロアーページ用のページバッファからメモリセルアレイにロアーページデータを書き込む動作が実行される。ミドルページプログラムでは、NANDチップ51のミドルページ用のページバッファからメモリセルアレイにミドルページデータを書き込む動作が実行される。アッパーページプログラムでは、NANDチップ51のアッパーページ用のページバッファからメモリセルアレイにアッパーページデータを書き込む動作が実行される。
【0096】
まず、コントローラ4は、ライトバッファ421からNANDチップ51にプログラム動作A用のロアーページデータL(A)と、プログラム動作A用のミドルページデータM(A)と、プログラム動作A用のアッパーページデータU(A)と、を転送する。
【0097】
NANDチップ51へのロアーページデータL(A)の転送は、例えば、ロアーページプログラム用のコマンドシーケンスをNANDチップ51に送信することによって実行される。ロアーページプログラム用のコマンドシーケンスは、例えば、第1コマンド、アドレスADDR、ライトデータDATA、および第2コマンドを含む。第1コマンドは、例えば、ロアーページプログラムを指定するコマンドコードと、書き込み対象の記憶領域を示すアドレスADDRをこれから入力することを宣言するためのコマンドコードと、を含む。アドレスADDRは、例えば、書き込み対象のブロックを示すブロックアドレスと、書き込み対象のページを示すページアドレスと、を含む。なお、NANDチップ51が複数のプレーンを含む場合、アドレスADDRは、書き込み対象のプレーンを指定するアドレス(プレーンアドレス)をさらに含んでいてもよい。ライトデータDATAは、例えば、ページサイズ分のサイズを有するロアーページデータである。
【0098】
NANDチップ51へのミドルページデータM(A)の転送は、ミドルページプログラム用のコマンドシーケンスをNANDチップ51に送信することによって実行される。ミドルページプログラム用のコマンドシーケンスとロアーページプログラム用のコマンドシーケンスとの間の互いは、ミドルページプログラム用のコマンドシーケンスの第1コマンドがミドルページプログラムを指定するコマンドコードを含むことと、ミドルページプログラム用のコマンドシーケンスのライトデータDATAがミドルページデータであることである。他の点については、ミドルページプログラム用のコマンドシーケンスは、ロアーページプログラム用のコマンドシーケンスと同じである。
【0099】
NANDチップ51へのアッパーページデータU(A)の転送は、アッパーページプログラム用のコマンドシーケンスをNANDチップ51に送信することによって実行される。アッパーページプログラム用のコマンドシーケンスとロアーページプログラム用のコマンドシーケンスとの間の互いは、アッパーページプログラム用のコマンドシーケンスの第1コマンドがアッパーページプログラムを指定するコマンドコードを含むことと、アッパーページプログラム用のコマンドシーケンスのライトデータDATAがアッパーページデータであることである。他の点については、アッパーページプログラム用のコマンドシーケンスは、ロアーページプログラム用のコマンドシーケンスと同じである。
【0100】
ロアーページデータL(A)がNANDチップ51に転送されると、つまりロアーページプログラム用のコマンドシーケンスの受信が完了すると、NANDチップ51は、プログラム動作Aのロアーページプログラムを開始する。ロアーページプログラムは、ロアーページ用のページバッファからメモリセルアレイにロアーページデータL(A)を書き込む動作である。
【0101】
ロアーページプログラムが完了すると、NANDチップ51は、プログラム動作Aのミドルページプログラムを開始する。ミドルページプログラムは、ミドルページ用のページバッファからメモリセルアレイにミドルページデータM(A)を書き込む動作である。
【0102】
ミドルページプログラムが完了すると、NANDチップ51は、プログラム動作Aのアッパーページプログラムを開始する。アッパーページプログラムは、アッパーページ用のページバッファからメモリセルアレイにアッパーページデータU(A)を書き込む動作である。
【0103】
本実施形態では、このNANDチップ51に対する次のプログラム動作B用の3ページ分のライトデータ(ロアーページデータL(B)、ミドルページデータM(B)、およびアッパーページデータU(B))の転送は、プログラム動作Aの実行中にこのNANDチップ51へのプログラム動作A用の3ページ分のライトデータの転送が完了し且つプログラム動作Aのロアーページプログラムの開始から第1の時間が経過した後にこのNANDチップ51への3ページ分のライトデータの転送が開始されるように実行される。
【0104】
第1の時間は、プログラム動作Aの実行に要するプログラム時間と、プログラム動作B用のライトデータ(ロアーページデータL(B)、ミドルページデータM(B)、およびアッパーページデータU(B))のデータ転送に要するデータ転送時間と、に基づいて決定される時間である。これにより、例えば、プログラム動作Aの実行中に3ページ分のライトデータ(L(B)、M(B)、およびU(B))の転送が完了し、且つできるだけ遅いタイミングで3ページ分のライトデータ(L(B)、M(B)、およびU(B))の転送が開始されるように、3ページ分のライトデータ(L(B)、M(B)、およびU(B))の転送の開始タイミングを制御することができる。
【0105】
第1の時間は、プログラム動作Aの実行に要する3ページ分のプログラム時間からプログラム動作B用の3ページ分のライトデータのデータ転送に要するデータ転送時間を引いた残り時間、つまり、[プログラム時間]-[データ転送時間]、に基づいて決定される。
【0106】
第1の時間を([プログラム時間]-[データ転送時間])に設定した場合には、プログラム動作B用の3ページ分のライトデータのデータ転送が開始されるタイミングを、プログラム動作Aの実行中にプログラム動作B用のライトデータのデータ転送が完了可能な範囲内で最も遅いタイミングにすることができる。この場合、プログラム動作B用のロアーページデータL(B)と、プログラム動作B用のミドルページデータM(B)と、プログラム動作B用のアッパーページデータU(B)は、図示のように、例えば、プログラム動作Aのアッパーページプログラムの実行中にNANDチップ51に転送される。
【0107】
NANDチップ51へのプログラム動作B用のロアーページデータL(B)の転送は、上述したロアーページプログラム用のコマンドシーケンスをNANDチップ51に送信することによって実行される。NANDチップ51へのプログラム動作B用のミドルページデータU(B)の転送は、上述したミドルページプログラム用のコマンドシーケンスをNANDチップ51に送信することによって実行される。同様に、NANDチップ51へのプログラム動作B用のアッパーページデータU(B)の転送は、上述したアッパーページプログラム用のコマンドシーケンスをNANDチップ51に送信することによって実行される。
【0108】
プログラム動作Aのアッパーページプログラムが完了すると、NANDチップ51は、ロアーページ用のページバッファからメモリセルアレイにロアーページデータL(B)を書き込むプログラム動作Bのロアーページプログラムを開始する。
【0109】
ロアーページプログラムが完了すると、NANDチップ51は、ミドルページ用のページバッファからメモリセルアレイにミドルページデータM(B)を書き込むプログラム動作Bのミドルページプログラムを開始する。
【0110】
ミドルページプログラムが完了すると、NANDチップ51は、アッパーページ用のページバッファからメモリセルアレイにアッパーページデータU(B)を書き込むプログラム動作Bのアッパーページプログラムを開始する。
【0111】
プログラム動作Aおよびプログラム動作Bの各々は、アッパープログラムの完了後にロアーページデータの読み出しが可能になるプログラム方法を使用して実行されてもよい。
【0112】
この場合、プログラム動作B用のロアーページデータL(B)に対するリードアクセスの最大待ち時間は、
図7における実線のブロック矢印で示されるように、ロアーページデータL(B)のデータ転送の開始からプログラム動作Bのアッパーページプログラムの完了までの時間となる。
【0113】
データがNANDチップ51へ転送された直後にこのデータに対するLBAを指定するリードコマンドがホスト2から受信されるという状況が起こる確率は、ホスト2からのリードアクセスで指定されるアドレスがランダムであるという前提では、(16KB×3ページ)/ドライブ容量(数TB)程度の低確率である。しかしながら、このような状況におけるリードのレイテンシを低減することは、リードのワーストレイテンシを低減できるという点でメリットがある。サーバのようなホスト2は、リードのワーストレイテンシを重要視する傾向がある。このため、リードのワーストレイテンシを低減できるストレージの構成は、サーバのようなホスト2にとって有用である。
【0114】
NANDチップ51へのプログラム動作B用のロアーページデータL(B)の転送は、破線で示すように、プログラム動作A用のアッパーページデータU(A)の転送の完了の直後に開始することもできる。
【0115】
しかし、この場合には、プログラム動作B用のロアーページデータL(B)に対するリードアクセスの最大待ち時間は、つまり、リードのワーストレイテンシは、破線のブロック矢印で示されるように、本実施形態の約2倍の時間になる。
【0116】
次に、データ転送タイミングの制御を説明する。
図8は、次のプログラム動作用のデータをフラッシュメモリ5(NANDチップ51)に転送する動作を開始するタイミングの例を示すタイミングチャートである。
【0117】
例えばNANDチップ51-0にプログラム動作Aを実行させる際、NANDコントローラ461は、第1の時間([プログラム時間]-[データ転送時間])を、NANDチップ51-0に対応するタイマに設定する。NANDコントローラ461は、ロアーページプログラム用のコマンドシーケンス、ミドルページプログラム用のコマンドシーケンス、およびアッパーページプログラム用のコマンドシーケンスをNANDチップ51-0に順次送信する。
【0118】
NANDチップ51-0においてプログラム動作Aが開始される時、つまり、NANDチップ51-0へのロアーページプログラム用のコマンドシーケンスの転送が完了した時、NANDコントローラ461は、NANDチップ51-0に対応するタイマの動作をスタートさせる。
【0119】
プログラム動作Aの開始(プログラム動作Aのロアーページプログラムの開始)から第1の時間が経過すると、タイマは、タイムアウトの発生をNANDコントローラ461に通知する(expire)。
【0120】
この通知をタイマから受信した場合、NANDコントローラ461は、NANDチップ51-0のプログラム動作Aの開始から第1の時間が経過したことを検出する。そして、この検出に応じ、NANDコントローラ461は、NANDチップ51-0へのプログラム動作B用のライトデータ(ロアーページデータL(B)、ミドルページデータM(B)、およびアッパーページデータU(B))のデータ転送を開始する。この場合、NANDコントローラ461は、ロアーページプログラム用のコマンドシーケンス、ミドルページプログラム用のコマンドシーケンス、およびアッパーページプログラム用のコマンドシーケンスをNANDチップ51-0に順次送信する。
【0121】
プログラム時間は、書き込み対象のブロックの疲弊度(プログラム/イレーズサイクル数)、書き込み対象のNANDチップ51(ここではNANDチップ51-0)の温度、どのワードラインにプログラムするか、等の条件により変動する場合がある。このため、コントローラ4のNANDコントローラ461は、NANDチップ51-0にプログラム動作Aを実行させる前に、プログラム動作Aに関する現在の条件に対応するプログラム時間をプログラム時間テーブル62から取得し、取得したプログラム時間を、プログラム動作Aに要するプログラム時間であると推定する。
【0122】
より詳しくは、NANDコントローラ461は、プログラム動作Aが実行されるべきブロックの現在のプログラム/イレーズサイクル数、プログラム動作Aが実行されるべきNANDチップ51(ここではNANDチップ51-0)の現在の温度、またはプログラム動作Aが実行されるべきページが複数のワードラインWLのうちのどのワードラインWLに対応するかに基づいて、プログラム動作Aに関する現在の条件に対応するプログラム時間を、プログラム時間テーブル62から取得する。NANDチップ51の現在の温度は、このNANDチップ51に対応する温度センサ52の出力信号に基づいて得られる値である。
【0123】
そして、NANDコントローラ461は、取得したプログラム時間を、第1の時間([プログラム時間]-[データ転送時間])のうちの[プログラム時間]に適用し、これによって第1の時間を求める。
【0124】
例えば、プログラム動作Aが実行されるべきページに接続されたワードラインWLがWL1、プログラム動作Aが実行されるべきブロックの現在のプログラム/イレーズサイクル数が1000、プログラム動作Aが実行されるべきNANDチップ51の温度が50℃である場合、1550usがプログラム時間テーブル62から取得される。[データ転送時間]は既知であるので、NANDコントローラ461は、1550usから[データ転送時間]を引いた残り時間を第1の時間としてタイマに設定する。
【0125】
このように、プログラム時間が変動する要因となる複数のパラメータ(ワードライン、プログラム/イレーズサイクル数、NANDチップの温度)に関する複数の条件の組み合わせに対応するプログラム時間をプログラム時間テーブル62から取得することにより、第1の時間を精度良く求めることが可能となる。なお、ここでは、複数のパラメータ(ワードライン、プログラム/イレーズサイクル数、NANDチップの温度)それぞれに関する現在の条件の組み合わせに対応するプログラム時間をプログラム時間テーブル62から取得する場合を説明したが、いずれか一つのパラメータに関する現在の条件に対応するプログラム時間をプログラム時間テーブル62から取得する、という構成を利用してもよい。
【0126】
次に、各プレーンPLNに含まれるキャッシュバッファの使い方の例について説明する。
図9は、NANDチップ51に含まれる複数のプレーンPLNの各々の構成例を示すブロック図である。
【0127】
ここでは、NANDチップ51-0に着目して各プレーンPLNの構成を説明する。NANDチップ51-0は、プレーンPLN0~PLN3に加え、アドレスセレクタ(ADRSEL)511-1を含む。アドレスセレクタ(ADRSEL)511-1は、コントローラ4から受信されるコマンドシーケンスのアドレスADDRに含まれるプレーンアドレスに基づいてプレーンPLN0~PLN3のうちの一つのプレーンPLNを選択する回路である。
【0128】
プレーンPLN0~PLN3の各々は、メモリセルアレイに加え、3つのページバッファを含む。3つのページバッファは、それぞれADL、BDL、およびCDLと称される。
【0129】
ADLは、ロアーページデータを保持するためのページバッファである。BDLは、ミドルページデータを保持するためのページバッファである。CDLは、アッパーページデータを保持するためのページバッファである。ADL、BDL、およびCDLの各々は、1ページ分のサイズ(16KB)を有している。
【0130】
プレーンPLN0~PLN3の各々は、ADL、BDL、およびCDLに加え、XDLと称されるキャッシュバッファを有している。XDLは、1ページ分のサイズ(16KB)を有している。
【0131】
以下では、プレーンPLN0~PLN3へのデータの書き込みを同時に行う場合におけるキャッシュプログラム動作について説明する。
【0132】
図10は、プログラム動作Aのロアーページプログラムの実行中におけるNANDチップ51-0の状態を示す図である。
【0133】
図10(a)に示されるように、タイミングT0では、ライトバッファ421からNANDチップ51-0へのプログラム動作A用のライトデータ(ロアーページデータL(A)、ミドルページデータM(A)、およびアッパーページデータU(A))の転送が既に完了されており、プログラム動作AのロアーページプログラムがNANDチップ51-0において実行されている。
【0134】
ロアーページデータL(A)は、64KB(=16KB×4プレーン)のサイズを有している。ロアーページデータL(A)は、データD(A,L0)と、データD(A,L1)と、データD(A,L2)と、データD(A,L3)と、を含む。データD(A,L0)は、プレーンPLN0に書き込まれるべき16KBのロアーページデータである。データD(A,L1)は、プレーンPLN1に書き込まれるべき16KBのロアーページデータである。データD(A,L2)は、プレーンPLN2に書き込まれるべき16KBのロアーページデータである。データD(A,L3)は、プレーンPLN3に書き込まれるべき16KBのロアーページデータである。
【0135】
図10(b)に示されるように、データD(A,L0)、データD(A,L1)、データD(A,L2)、およびデータD(A,L3)は、プレーンPLN0のADL、プレーンPLN1のADL、プレーンPLN2のADL、およびプレーンPLN3のADLにそれぞれ格納される。
【0136】
ミドルページデータM(A)も、64KB(=16KB×4プレーン)のサイズを有している。ミドルページデータM(A)は、データD(A,M0)と、データD(A,M1)と、データD(A,M2)と、データD(A,M3)と、を含む。データD(A,M0)は、プレーンPLN0に書き込まれるべき16KBのミドルページデータである。データD(A,M1)は、プレーンPLN1に書き込まれるべき16KBのミドルページデータである。データD(A,M2)は、プレーンPLN2に書き込まれるべき16KBのミドルページデータである。データD(A,M3)は、プレーンPLN3に書き込まれるべき16KBのミドルページデータである。
【0137】
図10(b)に示されるように、データD(A,M0)、データD(A,M1)、データD(A,M2)、およびデータD(A,M3)は、プレーンPLN0のBDL、プレーンPLN1のBDL、プレーンPLN2のBDL、およびプレーンPLN3のBDLにそれぞれ格納される。
【0138】
アッパーページデータU(A)も、64KB(=16KB×4プレーン)のサイズを有している。アッパーページデータU(A)は、データD(A,U0)と、データD(A,U1)と、データD(A,U2)と、データD(A,U3)と、を含む。データD(A,U0)は、プレーンPLN0に書き込まれるべき16KBのアッパーページデータである。データD(A,U1)は、プレーンPLN1に書き込まれるべき16KBのアッパーページデータである。データD(A,U2)は、プレーンPLN2に書き込まれるべき16KBのアッパーページデータである。データD(A,U3)は、プレーンPLN3に書き込まれるべき16KBのアッパーページデータである。
【0139】
図10(b)に示されるように、データD(A,U0)、データD(A,U1)、データD(A,U2)、およびデータD(A,U3)は、プレーンPLN0のCDL、プレーンPLN1のCDL、プレーンPLN2のCDL、およびプレーンPLN3のCDLにそれぞれ格納される。
【0140】
なお、ロアーページデータL(A)をNANDチップ51-0に転送する際、NANDコントローラ461は、プレーンPLN0のロアーページプログラム用のコマンドシーケンスと、プレーンPLN1のロアーページプログラム用のコマンドシーケンスと、プレーンPLN2のロアーページプログラム用のコマンドシーケンスと、プレーンPLN3のロアーページプログラム用のコマンドシーケンスと、をNANDチップ51-0に順次送信する。プレーンPLN0のロアーページプログラム用のコマンドシーケンスのアドレスADDRは、プレーンPLN0を指定するプレーンアドレスを含む。このため、このコマンドシーケンスを受信したNANDチップ51-0は、このコマンドシーケンスにライトデータDATAとして含まれるデータD(A,L0)を、プレーンPLN0のXDLを介して、プレーンPLN0のADLに格納する。プレーンPLN1のロアーページプログラム用のコマンドシーケンス、プレーンPLN2のロアーページプログラム用のコマンドシーケンス、およびプレーンPLN3のロアーページプログラム用のコマンドシーケンスの各々のアドレスADDRも、対応するプレーンを指定するプレーンアドレスを含む。したがって、データD(A,L1)はプレーンPLN1のXDLを介してプレーンPLN1のADLに格納され、データD(A,L2)はプレーンPLN2のXDLを介してプレーンPLN2のADLに格納され、データD(A,L3)はプレーンPLN3のXDLを介してプレーンPLN3のADLに格納される。
【0141】
NANDチップ51-0へのミドルページデータM(A)およびアッパーページデータU(A)の各々の転送も、ロアーデータL(A)と同様の方法で実行される。
【0142】
NANDチップ51-0へのロアーページデータL(A)の転送が完了すると、NANDチップ51-0は、プレーンPLN0のメモリセルアレイにデータD(A,L0)を書き込むためのロアーページプログラムと、プレーンPLN1のメモリセルアレイにデータD(A,L1)を書き込むためのロアーページプログラムと、プレーンPLN2のメモリセルアレイにデータD(A,L2)を書き込むためのロアーページプログラムと、プレーンPLN3のメモリセルアレイにデータD(A,L3)を書き込むためのロアーページプログラムと、を同時に実行する。
【0143】
図11は、プログラム動作Aのミドルページプログラムの実行中におけるNANDチップ51-0の状態を示す図である。
【0144】
図11(a)に示されるように、タイミングT1では、プログラム動作Aのロアーページプログラムが既に完了している。このため、
図11(b)に示されるように、各プレーンPLNのADLは、解放されている。NANDチップ51-0は、プレーンPLN0のメモリセルアレイにデータD(A,M0)を書き込むためのミドルページプログラムと、プレーンPLN1のメモリセルアレイにデータD(A,M1)を書き込むためのミドルページプログラムと、プレーンPLN2のメモリセルアレイにデータD(A,M2)を書き込むためのミドルページプログラムと、プレーンPLN3のメモリセルアレイにデータD(A,M3)を書き込むためのミドルページプログラムと、を同時に実行する。
【0145】
図12は、プログラム動作Aのアッパーページプログラムの実行開始時におけるNANDチップ51-0の状態を示す図である。
【0146】
図12(a)に示されるように、タイミングT2では、プログラム動作Aのロアーページプログラムおよびミドルページプログラムの双方が既に完了している。このため、
図12(b)に示されるように、各プレーンPLNのADLおよびBDLは、解放されている。
【0147】
NANDチップ51-0は、プレーンPLN0のメモリセルアレイにデータD(A,U0)を書き込むためのアッパーページプログラムと、プレーンPLN1のメモリセルアレイにデータD(A,U1)を書き込むためのアッパーページプログラムと、プレーンPLN2のメモリセルアレイにデータD(A,U2)を書き込むためのアッパーページプログラムと、プレーンPLN3のメモリセルアレイにデータD(A,U3)を書き込むためのアッパーページプログラムと、を同時に実行する。
【0148】
各プレーンPLNにおいては、ADL、BDL、およびXDLは、利用可能な状態である。このため、各プレーンPLNに3ページ分のデータを転送することが可能となる。
【0149】
図13は、プログラム動作Aのアッパーページプログラム動作の実行中に次のプログラム動作BのデータをNANDチップ51-0に転送する動作を示す図である。
【0150】
図13(a)に示されるように、タイミングT3では、NANDチップ51-0へのプログラム動作B用のロアーページデータL(B)およびミドルページデータM(B)の転送が既に完了し、NANDチップ51-0へのプログラム動作B用のアッパーページデータU(B)の転送が実行中である。
【0151】
プログラム動作B用のロアーページデータL(B)がNANDチップ51-0に転送された時は、
図13(b)に示されるように、ロアーページデータL(B)に含まれるデータD(B,L0)、データD(B,L1)、データD(B,L2)、データD(B,L3)は、プレーンPLN0のADL、プレーンPLN1のADL、プレーンPLN2のADL、プレーンPLN3のADLにそれぞれ格納される。
【0152】
プログラム動作B用のミドルページデータM(B)がNANDチップ51-0に転送された時は、
図13(b)に示されるように、ミドルページデータM(B)に含まれるデータD(B,M0)、データD(B,M1)、データD(B,M2)、データD(B,M3)は、プレーンPLN0のBDL、プレーンPLN1のBDL、プレーンPLN2のBDL、プレーンPLN3のBDLにそれぞれ格納される。
【0153】
プログラム動作B用のアッパーページデータU(B)がNANDチップ51-0に転送された時は、
図13(b)に示されるように、アッパーページデータU(B)に含まれるデータD(B,U0)、データD(B,U1)、データD(B,U2)、データD(B,U3)は、プレーンPLN0のXDL、プレーンPLN1のXDL、プレーンPLN2のXDL、プレーンPLN3のXDLにそれぞれ格納される。
【0154】
この後、プログラム動作Aのアッパーページプログラムが完了したならば、プログラム動作Bのロアーページプログラムが開始される。また、データD(B,U0)、データD(B,U1)、データD(B,U2)、データD(B,U3)は、プレーンPLN0のXDLからCDL、プレーンPLN1のXDLからCDL、プレーンPLN2のXDLからCDL、プレーンPLN3のXDLからCDL、にそれぞれ移動される。
【0155】
次に、サスペンド処理におけるタイマの制御を説明する。
図14は、NANDチップ51のプログラム動作がサスペンド(中断)されている間、タイマの動作を停止させる動作を示すタイミングチャートである。
【0156】
NANDチップ51にプログラム動作Aを中断させてこのプログラム動作Aの中断中にこのNANDチップ51に読み出し動作を実行させる処理を実行した場合、次のプログラム動作B用のライトデータの転送を開始する最適タイミングは、プログラム動作Aの開始から第1の時間が経過した時点よりも遅い時点にずれることになる。
【0157】
このため、このずれを補正するために、NANDコントローラ461は、NANDチップ51にプログラム動作Aを中断させてプログラム動作Aの中断中にNANDチップ51に読み出し動作を実行させる際、プログラム動作Aが中断されている間、タイマの動作を停止する。
【0158】
図14では、プログラム動作Aのロアーページプログラムを2度中断させる場合が例示されている。この場合、プログラム動作Aのロアーページプログラムを中断する際、NANDコントローラ461は、タイマを停止する動作と、NANDチップ51にサスペンドコマンドを送信する動作と、NANDチップ51にリードコマンドシーケンスを送信する動作とを実行する。サスペンドコマンドは、NANDチップ51にプログラム動作を中断するように指示するコマンドである。リードコマンドシーケンスは、データを読み出すための読み出し動作をNANDチップ51に実行させるためのコマンドである。
【0159】
NANDチップ51からのデータの読み出しが完了すると、NANDコントローラ461は、タイマをリスタートさせる動作と、NANDチップ51にレジュームコマンドを送信する動作と、を実行する。レジュームコマンドは、プログラム動作の再開をNANDチップ51に指示するコマンドである。
【0160】
このように、NANDコントローラ461は、プログラム動作Aが中断されている間は、タイマの動作を停止する。これにより、次のプログラム動作B用のライトデータの転送を開始する最適タイミングのずれを補正することができる。
【0161】
次に、ライト処理の手順の幾つかの例を説明する。以下では、NANDチップ51-0にプログラム動作Aとプログラム動作Bとを実行させる場合を想定する。
【0162】
図15は、SSD3において実行されるライト処理の手順の第1の例を示すフローチャートである。
【0163】
NANDチップ51-0にプログラム動作Aを実行させる際、コントローラ4は、第1の時間を、NANDチップ51-0に対応するタイマに設定する(S11)。
【0164】
コントローラ4は、NANDチップ51-0にプログラム動作Aを開始させる。この場合、コントローラ4は、プログラム動作A用のライトデータを含むコマンドシーケンスをNANDチップ51-0に送信する。そして、NANDチップ51-0におけるプログラム動作Aの開始時に、コントローラ4は、タイマをスタートさせる(S12)。
【0165】
コントローラ4は、プログラム動作Aの開始から第1の時間が経過したか否かをタイマからのタイムアウト通知の有無に基づいて判定する(S13)。
【0166】
プログラム動作Aの開始から第1の時間が経過していない場合(S13でNo)、コントローラ4は、プログラム動作Aの開始から第1の時間が経過するまで待つ。
【0167】
プログラム動作Aの開始から第1の時間が経過した場合、つまりタイマからのタイムアウト通知を受信した場合(S13でYes)、コントローラ4は、次のプログラム動作B用のライトデータをNANDチップ51-0に転送する動作を開始する(S14)。S14において、コントローラ4は、次のプログラム動作B用のライトデータを含むコマンドシーケンスをNANDチップ51-0に送信する処理を開始し、これによって次のプログラム動作B用のライトデータをNANDチップ51-0に転送する動作を開始する。
【0168】
図16は、SSD3において実行されるライト処理の手順の第2の例を示すフローチャートである。
【0169】
ここでは、コントローラ4が、プログラム時間テーブル62を管理しており、実行すべきプログラム動作Aの条件に対応するプログラム時間をプログラム時間テーブル62から取得する場合を想定する。なお、
図16におけるS23~S25の処理は、
図15で説明したS12~S14の処理と同じであるため、以下ではその説明を簡略化する。
【0170】
NANDチップ51-0にプログラム動作Aを実行させる前に、コントローラ4は、このプログラム動作Aに関する現在の条件(書き込み対象のページに対応するワードライン、書き込み対象のプロックのプログラム/イレーズサイクル数、またはNANDチップ51-0の温度)に対応するプログラム時間を、プログラム時間テーブル62から取得する(S21)。
【0171】
コントローラ4は、取得したプログラム時間からデータ転送時間を引いた残り時間を、第1の時間として、NANDチップ51-0に対応するタイマに設定する(S22)。データ転送時間は、NANDチップ51-0に次のプログラム動作B用のライトデータを転送するために要する時間である。
【0172】
そして、コントローラ4は、プログラム動作Aの開始からタイマに設定された第1の時間が経過した後、次のプログラム動作B用のライトデータをNANDチップ51-0に転送する動作を開始する(S23~S25)。
【0173】
図17は、SSD3において実行されるライト処理の手順の第3の例を示すフローチャートである。
【0174】
ここでは、NANDチップ51-0にプログラム動作Aを中断させ、読み出し動作を実行させる場合を想定する。
【0175】
図17におけるS31~S33の処理は、
図16で説明したS21~S23の処理と同じであるので、その説明を省略する。
【0176】
NANDチップ51-0に対応するタイマの動作をスタートさせた後、コントローラ4は、NANDチップ51-0において実行中のプログラム動作Aをサスペンド(中断)する必要があるか否かを判定する(S34)。例えば、プログラム動作Aの実行中に、ホスト2からのリードコマンドによって要求された別のデータをNANDチップ51-0から読み出すことが必要になった場合、コントローラ4は、プログラム動作Aをサスペンドする必要があると判定する。
【0177】
プログラム動作Aをサスペンドする必要がある場合(S34でYes)、コントローラ4は、タイマの動作を停止する(S35)。コントローラ4は、NANDチップ51-0にサスペンドコマンドを送信し(S36)、これによってNANDチップ51-0にプログラム動作Aを中断させる。なお、S35の処理とS36の処理は同時に実行されてもよい。あるいは、S36の処理が実行された後に、S35の処理が実行されてもよい。
【0178】
そして、コントローラ4は、NANDチップ51-0にリードコマンドシーケンスを送信し、これによって、データを読み出すための読み出し動作をNANDチップ51-0に実行させる(S37)。
【0179】
コントローラ4は、NANDチップ51-0からのデータの読み出しが完了したか否かを判定する(S38)。
【0180】
NANDチップ51-0からのデータの読み出しが完了していない場合(S38でNo)、コントローラ4は、NANDチップ51-0からのデータの読み出しが完了するまで待つ。
【0181】
NANDチップ51-0からのデータの読み出しが完了した場合(S38でYes)、つまりメモリセルアレイからページバッファへのデータの読み出しと、NANDチップ51-0からコントローラ4へのこのデータの転送とが完了した場合、コントローラ4は、タイマをリスタートさせる(S39)。コントローラ4は、NANDチップ51-0にレジュームコマンドを送信し(S40)、これによってNANDチップ51-0にプログラム動作Aを再開させる。なお、S39の処理とS40の処理は同時に実行されてもよい。あるいは、S40の処理が実行された後に、S39の処理が実行されてもよい。
【0182】
コントローラ4は、プログラム動作Aの開始から第1の時間が経過したか否かを、タイマからのタイムアウト通知の有無に基づいて判定する(S41)。
【0183】
プログラム動作の開始から第1の時間が経過していない場合(S41でNo)、コントローラ4は、S34の処理を再び実行する。
【0184】
プログラム動作Aをサスペンドする必要がない場合(S34でNo)、コントローラ4は、S35~S40の処理をスキップする。そして、コントローラ4は、プログラム動作Aの開始から第1の時間が経過したか否かを判定する(S41)。
【0185】
プログラム動作Aの開始から第1の時間が経過した場合、つまりタイマからのタイムアウト通知を受信した場合(S41でYes)、コントローラ4は、次のプログラム動作B用のライトデータを含むコマンドシーケンスをNANDチップ51-0に送信する処理を開始し、これによって次のプログラム動作B用のライトデータをNANDチップ51-0に転送する動作を開始する(S42)。
【0186】
以上説明したように、本実施形態によれば、フラッシュメモリ5(NANDチップ51)におけるプログラム動作の実行中に次のプログラム動作用のデータをフラッシュメモリ5(NANDチップ51)に転送するタイミングが最適化される。これにより、リードのレイテンシが長くなるのを抑制ししし、不揮発性メモリへのデータの書き込みを効率良く実行できる。
【0187】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0188】
1…情報処理システム、2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、6…DRAM、46…NANDインタフェース、47…DRAMインタフェース、51…NAND型フラッシュメモリチップ、62…プログラム時間テーブル、461…NANDコントローラ、4611…プログラム実行部、4612…タイマ。