JP2020047335A - 不揮発性メモリ及びメモリシステム - Google Patents
不揮発性メモリ及びメモリシステム Download PDFInfo
- Publication number
- JP2020047335A JP2020047335A JP2018174120A JP2018174120A JP2020047335A JP 2020047335 A JP2020047335 A JP 2020047335A JP 2018174120 A JP2018174120 A JP 2018174120A JP 2018174120 A JP2018174120 A JP 2018174120A JP 2020047335 A JP2020047335 A JP 2020047335A
- Authority
- JP
- Japan
- Prior art keywords
- command
- read
- buffer
- data
- intermediate buffer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Read Only Memory (AREA)
Abstract
【課題】コマンドを受信してからコマンドに従った処理を完了するまでの時間を容易に短縮できる不揮発性メモリ及びメモリシステムを提供する。【解決手段】不揮発性メモリは、メモリセルアレイと入出力バッファと1以上の中間バッファと制御回路とを有する。メモリセルアレイは、複数のページを含む。1以上の中間バッファは、それぞれがメモリセルアレイ及び入出力バッファの間に電気的に接続されている。制御回路は、第1のコマンドに応じて、複数のページにおける第1のページからセンス動作で読み出されたデータを第1の中間バッファに格納する。第1のコマンドは、センス動作指示と第1の中間バッファの指定とを含む。第1の中間バッファは、1以上の中間バッファにおける中間バッファである。【選択図】図13
Description
本実施形態は、不揮発性メモリ及びメモリシステムに関する。
NAND型フラッシュメモリなどの不揮発性メモリでは、コマンドを受信したら、受信されたコマンドに従った処理を行う。このとき、不揮発性メモリでは、コマンドを受信してからコマンドに従った処理を完了するまでの時間を短くすることが望まれる。
一つの実施形態は、コマンドを受信してからコマンドに従った処理を完了するまでの時間を容易に短縮できる不揮発性メモリ及びメモリシステムを提供することを目的とする。
一つの実施形態によれば、メモリセルアレイと入出力バッファと1以上の中間バッファと制御回路とを有する不揮発性メモリが提供される。メモリセルアレイは、複数のページを含む。1以上の中間バッファは、それぞれがメモリセルアレイ及び入出力バッファの間に電気的に接続されている。制御回路は、第1のコマンドに応じて、複数のページにおける第1のページからセンス動作で読み出されたデータを第1の中間バッファに格納する。第1のコマンドは、センス動作指示と第1の中間バッファの指定とを含む。第1の中間バッファは、1以上の中間バッファにおける中間バッファである。
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
(実施形態)
実施形態にかかるメモリシステムについて説明する。メモリシステムは、NAND型フラッシュメモリなどの不揮発性メモリを有し、ホストからのコマンド(ホストコマンド)に応じて不揮発性メモリを用いた動作を実現可能である。メモリシステムは、ホストからのライトコマンドに応じてデータを不揮発性メモリに格納し、ホストからのリードコマンドに応じてデータを不揮発性メモリから読み出す。
実施形態にかかるメモリシステムについて説明する。メモリシステムは、NAND型フラッシュメモリなどの不揮発性メモリを有し、ホストからのコマンド(ホストコマンド)に応じて不揮発性メモリを用いた動作を実現可能である。メモリシステムは、ホストからのライトコマンドに応じてデータを不揮発性メモリに格納し、ホストからのリードコマンドに応じてデータを不揮発性メモリから読み出す。
例えば、先に受けたライトコマンドに含まれた論理アドレスに対してシーケンシャルな論理アドレスを含むライトコマンド(シーケンシャルライトコマンド)をメモリシステム20が受けた場合、不揮発性メモリは、そのライトコマンドに対応するライトデータを、先に受けたライトコマンドに応じてデータが書き込まれた物理アドレスに対してシーケンシャルな物理アドレスに格納する。
不揮発性メモリがシーケンシャルライトされた状態で、例えば、先に受けたリードコマンドに含まれた論理アドレスに対してシーケンシャルな論理アドレスを含むリードコマンド(シーケンシャルリードコマンド)をメモリシステムが受けた場合、不揮発性メモリは、そのリードコマンドに対応するリードデータを、先に受けたリードコマンドに応じてデータが読み出された物理アドレスに対してシーケンシャルな物理アドレスから入出力バッファ(入出力用のデータラッチ)を介して読み出す。
不揮発性メモリはメモリセルが行列状に配列されたメモリセルアレイを有し、入出力バッファは、メモリセルアレイにおける1行に対応した1ページ分のデータ容量を有している。シーケンシャルリードコマンドで要求されたデータが先のリードコマンドで要求されたデータと同一ページ内に並んでいれば、メモリセルアレイからのセンス動作を省略し、入出力バッファに格納されたデータからの読み出し動作が可能であり、読み出し要求に応じた読み出し動作を高速化可能である。
しかし、入出力バッファに保持できるセンス結果が1ページ分であるため、複数の後述するスレッドのシーケンシャルリードコマンドをメモリシステムが並行に(コンカレントに)受けた場合、複数のスレッドのシーケンシャルリードアクセスが互いに入出力バッファ内のセンス結果をつぶしあい(スラッシングという)、センス動作のやり直しが発生し、読み出し動作の高速化が困難になる可能性がある。
そこで、本実施形態では、不揮発性メモリにおいて、複数のスレッドに複数の中間バッファを割り当て、複数の中間バッファのうちコマンドで明示的に指定した中間バッファにデータを格納させる。そして、コマンドで指定した中間バッファから入出力バッファにデータを転送して不揮発性メモリからコントローラへと出力させる。これにより、複数のスレッドでのシーケンシャルリードコマンドに対する読み出し動作の高速化を図る。
具体的には、不揮発性メモリにおいて、ホストシステムからのリードコマンドに応じてセンス動作(メモリセル→データラッチ)を行う際、センスした結果を、コントローラによって指定された中間バッファ(例えば、ADL,BDLのいずれか)に格納する。また、不揮発性メモリからコントローラへのデータ出力に先立ち、センス結果を中間バッファ(例えば、ADL,BDLのいずれか)から入出力バッファ(すなわち、XDL)へとラッチ間転送を行う。コントローラは、複数スレッドのシーケンシャルリードアクセスを検出したとき、不揮発性メモリ(におけるメモリチップ)に対し、スレッドごとに割り当てた中間バッファ(例えば、ADL,BDLのいずれか)を指定してリード動作(センスおよびデータ出力)を行う。中間バッファ(例えば、ADL,BDLのいずれか)は、プログラム動作を行うために設けられており、リード処理中は未使用であるため、本実施形態では、リード処理における動作を行うために使用する。
不揮発性メモリは、複数の中間バッファ(例えば、ADL,BDL)を含み、次の(1)と(2)のコマンドをサポートする。
(1)格納先(例えば、ADL,BDLのいずれか)の明示的な指定を含むセンスコマンド(メモリセルアレイ → センスアンプ → ADL/BDL)
(2)転送元の明示的な指定を含むデータラッチ間転送コマンド (ADL/BDL → XDL)
(1)格納先(例えば、ADL,BDLのいずれか)の明示的な指定を含むセンスコマンド(メモリセルアレイ → センスアンプ → ADL/BDL)
(2)転送元の明示的な指定を含むデータラッチ間転送コマンド (ADL/BDL → XDL)
また、メモリシステムのコントローラは、次の(i)(ii)(iii)の動作を行う。
(i)複数スレッドのシーケンシャルリードアクセスを検出し、スレッドごとに中間バッファ(例えば、ADL,BDLのいずれか)を割り当てる。
(ii)センス時、スレッドに応じた中間バッファ(例えば、ADL,BDLのいずれか)を格納先として指定して、センスコマンドを発行する (すなわち、センス動作を指示する)。
(iii)データ転送時、事前に、スレッドに応じた中間バッファ(例えば、ADL,BDLのいずれか)からXDLへとラッチ間転送を指示する。
(i)複数スレッドのシーケンシャルリードアクセスを検出し、スレッドごとに中間バッファ(例えば、ADL,BDLのいずれか)を割り当てる。
(ii)センス時、スレッドに応じた中間バッファ(例えば、ADL,BDLのいずれか)を格納先として指定して、センスコマンドを発行する (すなわち、センス動作を指示する)。
(iii)データ転送時、事前に、スレッドに応じた中間バッファ(例えば、ADL,BDLのいずれか)からXDLへとラッチ間転送を指示する。
これにより、複数スレッドのシーケンシャルリードコマンドに対しても、センス結果のスラッシングによる余分なセンス動作が発生せず、高い性能を発揮できる。あるいは、コントローラのリードバッファについて、同等の性能を発揮するために必要な容量を削減することができる。
より具体的には、メモリシステム20が適用された情報処理システム1は、図1に示すように構成され得る。図1は、メモリシステム20が適用された情報処理システム1の構成を示す図である。情報処理システム1は、ホストシステム10、通信線3、及びメモリシステム20を有する。
メモリシステム20は、ホストシステム10に通信線3を介して接続され、ホストシステム10の外部記憶装置として機能する。メモリシステム20は、UFS(Universal Flash Storage)規格やeMMC(embedded Multi Media Card)規格などに準拠した組み込み用途のフラッシュメモリや、SSD(Solid State Drive)などである。ホストシステム10は、例えば、パーソナルコンピュータ、携帯電話、撮像装置などである。ホストシステム10とメモリシステム20とは、通信路3を介して、例えば、UFS(Universal Flash Storage)規格、SAS(Serial Attached SCSI)規格、SATA(Serial Advanced Technology Attachment)規格、PCIe(Peripheral Component Interconnect express)規格、NVMe(Non−Volatile Memory express)規格に準拠したパケットを送受信できる。
ホストシステム10は、プロセッサ11、メインメモリインターフェース(メインメモリI/F)12、メインメモリ13、ストレージインターフェース(ストレージI/F)14、およびこれらを接続するバス16を備える。メインメモリI/F12は、メインメモリ13をバス16に接続するためのインターフェースである。
メインメモリ13は、プロセッサ11がアクセス可能な主記憶装置であり、本例では、DRAM(Dynamic Random Access Memory)を使用する。メインメモリ13は、リードバッファ13cを含む。リードバッファ13cは、リードコマンドに従ってメモリシステム20から転送されたリードデータが一時的に格納される。また、メインメモリ13は、例えば、OS(Operating System)13a及びアプリケーションプログラム13bを記憶する。OS13aは、ホストシステム10の制御プログラムとして機能する。アプリケーションプログラム13bは、OS13a上で動作するユーザ用途プログラムとして機能する。
ストレージI/F14は、メモリシステム20と接続するためのインターフェースである。ストレージI/F14は、メインメモリ13とストレージI/F14内のレジスタとの間でのデータ転送制御を実行する。
プロセッサ11は、ホストシステム10の動作を制御するプロセッサであり、メインメモリ13にロードされるOS13aを実行する。OS13aにはメモリシステム20を制御するデバイスドライバが含まれる。デバイスドライバは、OS13a上のアプリケーションプログラム13bからメモリシステム20に対するリード指示を受け付けると、リード指示に応じたリードコマンドを発行する。デバイスドライバにより発行されるリードコマンドには、コマンドの種類(リードであるかライトであるか)を識別するフィールド、先頭LBAを指定するフィールド、リードデータのサイズを指定するフィールドなどが含まれる。そして、デバイスドライバは、発行されたリードコマンドを、ストレージI/F14及び通信路3を介してメモリシステム20に送信する。
メモリシステム20は、不揮発性メモリ21及びコントローラ25を有する。コントローラ25は、例えばSoC(System−on−a−Chip)を含むコントローラパッケージとして実装され得る。コントローラ25は、メモリインターフェース(メモリI/F)24、バッファメモリ26、メインコントローラ28、ホストインターフェース(ホストI/F)29を有する。
不揮発性メモリ21は、コントローラ25外に配され、不揮発性メモリパッケージとして実装され得る。不揮発性メモリ21は、例えばNAND型フラッシュメモリとすることができるがこれに限定されない。不揮発性メモリ21は、例えばReRAM(Resistance Random Access Memory)、PRAM(Phase change RAM)、MRAM(Magnetoresistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)であってもよい。
不揮発性メモリ21は、複数のブロックを有する。各ブロックは、データ消去の単位である。各ブロックは、メモリセルアレイを有する。メモリセルアレイでは、複数のメモリセルが行列状に配列されている。メモリセルアレイでは、1行に対応するページの単位でデータの書き込み及び読み出しが行われる。例えば、各メモリセルがSLC(Single Level Cell)である場合、1行のメモリセルが1ページのデータを記憶する。あるいは、各メモリセルは多値記憶が可能であり、各メモリセルがMLC(Multi Level Cell)である場合、1行のメモリセルが2ページのデータを記憶する。各メモリセルがTLC(Triple Level Cell)である場合、1行のメモリセルが3ページのデータを記憶する。
不揮発性メモリ21は、例えば、メモリシステム20の管理情報及びユーザデータ23を記憶する。メモリシステム20の管理情報は、論理物理変換テーブル(L2Pテーブル)22を含む。
論理物理変換テーブル(L2Pテーブル)22は、ホストシステム10がメモリシステム20にアクセスする際に使用する論理アドレス(LBA:Logical Block Address)と、不揮発性メモリ21内の物理アドレス(ブロックアドレス+ページアドレス+ページ内記憶位置)とを対応づけるアドレス変換情報である。
メモリI/F24は、メインコントローラ28の制御に基づき、不揮発性メモリ21に対してデータおよび管理情報のリード/ライトを実行する。
バッファメモリ26は、例えば、コマンドキュー26a、L2Pテーブルキャッシュ26b、及びリードバッファ26cを含む。コマンドキュー26aは、ホストシステム10から受信されたコマンド(例えば、ライトコマンド、リードコマンドなど)をキューイングする。L2Pテーブルキャッシュ26bは、論理物理変換処理が行われる際に、論理物理変換テーブル(L2Pテーブル)22が一時的に格納される。リードバッファ26cは、リードコマンドに従って不揮発性メモリ21からセンス動作で読み出されたリードデータが一時的に格納される。すなわち、バッファメモリ26は、不揮発性メモリ21からリードされたデータを記憶するためのバッファとして用いられる。また、バッファメモリ26は、不揮発性メモリ21にライトするデータを記憶するためのバッファとして用いることもできる。例えば、バッファメモリ26は、SRAM又はDRAM等で構成されるが、レジスタ等で構成してもよい。
ホストI/F29は、ホストシステム10と接続するためのインターフェースである。ホストI/F29は、ホストシステム10のストレージI/F14内のレジスタとメモリシステム20のバッファメモリ26との間のデータ伝送を制御する機能を有する。
メインコントローラ28は、例えばCPU(Central Processing Unit)であり、ファームウェアでその機能を実現され、バス30に接続されたメモリシステム20内の各構成要素を統括的に制御する。
不揮発性メモリ21は、それぞれ並列にアクセス制御される複数のメモリパッケージ31を有し、各メモリパッケージ31はそれぞれ独立に信号線群を介してコントローラ2に接続されている。各メモリパッケージ31は、図2に示すように構成され得る。図2は、メモリパッケージ31の構成を示す図である。
メモリパッケージ31は、4つのメモリチップ40(Chip#0〜Chip#3)を有する。なお、メモリパッケージ31が有するメモリチップの数は、4に限定されず、1以上であればよい。各々のメモリチップ40では、ページと言われるデータ単位でデータの書き込み、および読み出しが行われる。図示するように、メモリパッケージ31には、メモリチップ40を制御又は監視するための制御信号線31aと、コマンド、アドレス、およびデータなどの入出力信号I/O1〜I/O8が送受信される入出力信号線31bと、電位供給線31cとが接続されている。
なお、制御信号線31aは、チップイネーブル信号(CEn)、コマンドラッチイネーブル信号(CLE)、アドレスラッチイネーブル信号(ALE)、ライトイネーブル信号(WEn)、リードイネーブル信号(REn)、ライトプロテクト信号(WPn)、レディービジー信号(RY/BYn)などに対する信号線を含む。信号名に付された「n」は、その信号が負論理(ローアクティブ)の信号であることを示している。また、電位供給線31cは、電源電位Vcc、インターフェース回路用電源電位Vccqおよびグランド電位Vssを供給するための供給線を含む。図示するように、制御信号線31aおよび入出力信号線31bはメモリパッケージ31内で共通配線とされることがある。ここでは、入出力信号線31bは、一例として8ビットの信号線であるとするが、入出力信号線31bの伝送幅は8ビットに限定されない。
次に、各メモリチップ40の構成について図3及び図4を用いて説明する。図3は、メモリチップ40の構成を示すブロック図である。図4は、メモリセルアレイ50及び周辺回路の構成を示す回路図である。
メモリチップ40は、制御回路51、入出力インターフェース(入出力I/F)45、センスアンプブロック46、ADL(中間バッファ)47、BDL(中間バッファ)48、XDL(入出力バッファ)49、及びメモリセルアレイ50を有する。
メモリセルアレイ50は、複数のメモリセルを備える。複数のメモリセルは複数の行及び複数の列を構成する。例えば図4に示すように、メモリセルアレイ50には、n(nは正の整数)個のブロックBLK−0〜BLK−(n−1)が含まれる。各ブロックBLK−0〜BLK−(n−1)には、複数のNANDストリングNS−0〜NS−(p−1)が配置されている。複数のNANDストリングNS−0〜NS−(p−1)は、例えば、列(カラム)方向にそれぞれ延びる。複数のNANDストリングNS−0〜NS−(p−1)は、行(ロウ)方向に配列されている。各NANDストリングNS−0〜NS−(p−1)は、例えば、互いに直列接続された複数のメモリセルMT−0〜MT−(k−1)とその両端に1つずつ接続された2つのセレクトゲートST、DTとを含む。
複数のワード線は、行(ロウ)方向にそれぞれ延びる。複数のワード線は、列(カラム)方向に配列されている。例えば図4に示すように、複数のワード線WL−0〜WL−(k−1)は、行(ロウ)方向にそれぞれ延びる。複数のワード線WL−0〜WL−(k−1)は、列(カラム)方向に配列されている。すなわち、複数のワード線WL−0〜WL−(k−1)は、複数のNANDストリングNS−0〜NS−(p−1)と交差している。各ワード線WL−0〜WL−(k−1)は、複数のメモリセルの制御ゲートに接続されている。
各メモリセルMTは、例えばMLC(Multi Level Cell)である場合、上位ビット(Upper bit)及び下位ビット(Lower bit)を使用して多値記憶が可能である。MLCの場合は、1つのワード線WLに接続された複数のメモリセル(単にワード線と称することもある)に、上位ページ(Upper page)及び下位ページ(Lower page)の2ページが含まれる。
あるいは、各メモリセルMTは、TLC(Triple Level Cell)記憶セルであってもよい。各メモリセルMTが、TLC(Triple Level Cell)記憶セルである場合、1つのメモリセルに3ビットの情報を蓄積可能である。TLCの場合は、1つのワード線WLに、上位ページ(Upper page)、中位ページ(Middle page)、下位ページ(Lower page)の3ページが含まれる。
2つのセレクトゲートラインSGD,SGSは、行(ロウ)方向にそれぞれ延びる。セレクトゲートラインSGD,SGSは、列(カラム)方向における複数のワード線の両端に配されている。2つのセレクトゲートラインSGD,SGSは、それぞれ、セレクトゲートDT、STの制御ゲートに接続されている。
複数のビット線は、列(カラム)方向にそれぞれ延びる。複数のビット線は、行(ロウ)方向に配列されている。例えば図4に示すように、複数のビット線BL−0〜BL−(p−1)は、列(カラム)方向にそれぞれ延びる。複数のビット線BL−0〜BL−(p−1)は、行(ロウ)方向に配列されている。すなわち、複数のビット線BL−0〜BL−(p−1)は、複数のNANDストリングNS−0〜NS−(p−1)に対応している。
各NANDストリングNSは、対応するセレクトゲートSTを介して、共通のソースラインに接続されている。また各NANDストリングNSは、対応するセレクトゲートDTを介して、対応するビット線BLに接続されている。
図3に示す制御回路51は、コントローラ2から受信する各種制御信号(図2に示す制御信号CEn,CLE,ALE,WEn,REn,WPn)に基づいて状態(ステート)遷移する状態遷移回路(ステートマシン)であって、メモリチップ40における各部の動作を統括的に制御する。
制御回路51は、コマンド解析回路41、行制御回路42、及び転送制御回路43を有する。
コマンド解析回路41は、コントローラ2からのコマンドを解析し、コマンドに含まれた要求(すなわち、要求内容、ロウアドレス、カラムアドレスなど)を特定する。コマンド解析回路41は、コマンドに含まれた要求が書き込み要求である場合、書き込み要求及びロウアドレスを行制御回路42へ通知し、カラムアドレスを列制御回路43へ通知する。コマンド解析回路41は、コマンドに含まれた要求が読み出し要求である場合、読み出し要求及びロウアドレスを行制御回路42へ通知し、カラムアドレスを列制御回路43へ通知する。
行制御回路42は、ロウデコーダ42a(図示せず)及びワード線ドライバ42b(図示せず)を有する。ロウデコーダ42aは、ワード線ドライバ42bを介してワード線WL−0〜WL−(k−1)に接続されている。各ワード線WL−0〜WL−(k−1)は、NANDストリングNS内の各メモリセルMTの制御ゲートに接続されている。ロウデコーダ42aは、コマンドに含まれたロウアドレスをデコードして、複数のワード線WL−0〜WL−(k−1)のうち選択ワード線及び非選択ワード線をそれぞれ決定する。そして、ロウデコーダ42aは、書き込み要求に応じたプログラム動作時に、ワード線ドライバ42bを介して、選択ワード線の電位をプログラム電位Vpgm(例えば約18V)に設定し、非選択ワード線の電位を転送電位Vpass_program(例えば約10V)に設定する。ロウデコーダ42aは、読み出し要求に応じたリード動作時に、選択ワード線の電位を読み出し電位VCG_Rに設定し、非選択ワード線の電位を非選択電位Vpass_readに設定する。
センスアンプブロック46は、メモリセルアレイ50とデータラッチ群(ADL47、BDL48、XDL49)との間に電気的に接続されている。センスアンプブロック46は、複数のビット線BL−0〜BL−(p−1)に対応した複数のセンスアンプSA−0〜SA−(p−1)を有している。
ADL47及びBDL48は、それぞれ、センスアンプブロック46及びXDL49の間に電気的に接続されている。すなわち、ADL47及びBDL48は、それぞれ、メモリセルアレイ50及びXDL49の間に電気的に接続されている。ADL47は、複数のビット線BL−0〜BL−(p−1)に対応した複数のADL回路471−0〜471−(p−1)を有している。BDL48は、複数のビット線BL−0〜BL−(p−1)に対応した複数のBDL回路481−0〜481−(p−1)を有している。
XDL49は、ADL47及びBDL48と入出力インターフェース(入出力I/F)45との間に配される。入出力I/F45は、メモリチップ40における入出力信号線31b(図2参照)に接続するためのインターフェースとして機能する。XDL49は、複数のビット線BL−0〜BL−(p−1)に対応した複数のXDL回路491−0〜491−(p−1)を有している。
各ADL回路471及び各BDL回路481は、センスアンプSA及びXDL回路491を接続するラインに電気的に接続されている。入出力I/F45は、センスアンプSA及びXDL回路491を接続するラインと入出力信号線31b(図2参照)との間に電気的に挿入される。これにより、ADL47、BDL48は、入出力信号線31bに直接接続可能でない中間バッファとして機能し、XDL49は、入出力信号線31bに直接接続可能である入出力バッファとして機能する。直接接続可能であるとは、他のバッファを介さずに接続可能であることを指し、直接接続可能でないとは、接続のための他のバッファ等を介さなければならないことを指す。なお、ADL47、BDL48は、中間データラッチ又はキャッシュデータラッチと呼んでもよく、XDL49は、入出力データラッチと呼んでもよい。
転送制御回路43は、コマンド解析回路41の解析結果を受けて、センスアンプブロック46とデータラッチ群(ADL47、BDL48、XDL49)との間のデータ転送を制御するとともに、XDL49から入出力I/F45を介した入出力信号線31bへデータ出力を制御する。
また、コマンド解析回路41は、中間バッファ(例えば、ADL47,BDL48)の指定を含むコマンドを解析する。複数のスレッドのリードコマンドと複数の中間バッファの指定とが対応している場合、コマンド解析回路41は、中間バッファの指定からそのコマンドに用いる中間バッファを特定する。すなわち、コントローラ25がスレッドに対してコンテキストを割り当てる。例えば、コントローラ25は、スレッドAにコンテキストAを割り当て、スレッドBにコンテストBを割り当てる。コントローラ25は、メモリチップに該コンテキストの使用を指定する。コマンド解析回路41は、使用の指定されたコンテキストに応じて、使用すべき中間バッファを特定する。コマンド解析回路41は、コンテキストごとに使用すべき中間バッファを予め決めている。例えば、コントローラ25がコンテキストAを指示した場合、コマンド解析回路41は、コントローラ25がADL47の使用を指示したと解釈する。あるいは、コントローラ25がコンテキストBを指示した場合、コマンド解析回路41は、コントローラ25がBDL48の使用を指示したと解釈する。
ここで、スレッドとは、リードコマンド群の分類であり、 再利用性の期待を判断する単位(例えば、シーケンシャル性を判定する単位)を指す。スレッドは、ホストID、ストリームID(ホストがマルチストリーム処理を行う場合に、複数のストリームを互いに区別するためにホストによってコマンドに対して付加されるもの、あるいは後述する第2の変形例の図17のシーケンシャル判定アルゴリズムによって付加されるもの)、内部処理の種類等によって区別される。コンテキストとは、スレッドのうち、中間バッファを割り当てるべきものを指し、前述のように、コンテキストごとに使用すべき中間バッファが予め決められ対応付けられている。キャッシュヒットの判定は、コンテキスト単位で行われる。中間バッファとは、不揮発性メモリ21側の物理的なレジスタを指す。
コマンド解析回路41は、中間バッファの指定を含むセンスコマンドについて、中間バッファの指定、ページの指定、センス動作指示、(ダミー)カラムアドレスの指定、ロウアドレスの指定、センス開始指示を順に解釈する。コマンド解析回路41は、中間バッファの指定を含むラッチ間転送コマンドについて、ラッチ間転送指示及び中間バッファの指定を解釈する。
なお、コマンド解析回路41は、中間バッファの指定を含まないセンスコマンドについて、ページの指定、センス動作指示、(ダミー)カラムアドレスの指定、ロウアドレスの指定、センス開始指示を順に解釈する。コマンド解析回路41は、中間バッファの指定を含まないデータ転送コマンドについて、出力動作指示、カラムアドレスの指定、(ダミーの)ロウアドレスの指定、出力開始指示を順に解釈する。
例えば、入出力I/F45を介して図5(a)に示すセンスコマンドCM1が供給されると、センスコマンドCM1において、「XAh」によってコンテキストAが指定されているため、コマンド解析回路41は、ADL47の使用が明示的に指定されたと解釈する。コマンド解析回路41は、「01h」で下位ページ(Lower page)が指定されたと解釈し、「00h」をセンス動作指示であると解釈する。そして、コマンド解析回路41は、「CA1」「CA2」をダミーのカラムアドレスとして無視し、「RA1」「RA2」「RA3」をロウアドレスとして解釈し、「30h」をデータのセンス開始指示であると解釈する。
これに応じて、レディービジー信号RY/BYnがビジー(ローレベル)になるt(SA→ADL)で示す期間に、行制御回路42は、選択ワード線の電位を読み出し電位VCG_Rに設定し、非選択ワード線の電位を非選択電位Vpass_readに設定する。センスアンプブロック46は、メモリセルアレイ50におけるロウアドレスで指定されたメモリセル群の下位ページに対してセンス動作を行う。転送制御回路43は、センスアンプブロック46のセンス動作で検知された1ページ分のデータをADL47へ転送して格納する。
例えば、入出力I/F45を介して図5(b)に示すセンスコマンドCM2が供給されると、センスコマンドCM2において、「XBh」によってコンテキストBが指定されているため、コマンド解析回路41は、BDL48の使用が明示的に指定されたと解釈する。コマンド解析回路41は、「02h」で中位ページ(Middle page)が指定されたと解釈し、「00h」をセンス動作指示であると解釈する。そして、コマンド解析回路41は、「CA1」「CA2」をダミーのカラムアドレスとして無視し、「RA1」「RA2」「RA3」をロウアドレスとして解釈し、「30h」をデータのセンス開始指示であると解釈する。
これに応じて、レディービジー信号RY/BYnがビジー(ローレベル)になるt(SA→BDL)で示す期間に、行制御回路42は、選択ワード線の電位を読み出し電位VCG_Rに設定し、非選択ワード線の電位を非選択電位Vpass_readに設定する。センスアンプブロック46は、メモリセルアレイ50におけるロウアドレスで指定されたメモリセル群の下位ページに対してセンス動作を行う。転送制御回路43は、センスアンプブロック46のセンス動作で検知された1ページ分のデータをBDL48へ転送して格納する。
例えば、入出力I/F45を介して図5(c)に示すラッチ間転送コマンドCM3が供給されると、コマンド解析回路41は、ラッチ間転送コマンドにおいて、「YAh」をラッチ間転送指示であると解釈するとともに「YAh」をADL47の明示的な指定と解釈し、これによりコンテキストAにXDL49を割り当てる。
これに応じて、レディービジー信号RY/BYnがビジー(ローレベル)になるt(ADL→XDL)で示す期間に、転送制御回路43は、ADL47に格納された1ページ分のデータをXDL49に転送して格納する。
続いて、コマンド解析回路41は、図5(c)に示すデータ転送コマンドCM4において、「05h」を転送指示であると解釈する。そして、コマンド解析回路41は、「CA1」「CA2」をXDL49におけるカラムアドレスとして解釈し、「RA1」「RA2」「RA3」をダミーのロウアドレスとして無視し、「E0h」を出力開始指示であると解釈する。
これに応じて、レディービジー信号RY/BYnがビジー(ローレベル)になるtOUTで示す期間に、転送制御回路43は、XDL49におけるカラムアドレスで指定されたデータを入出力I/F45経由で入出力信号線31bへ出力する。
例えば、入出力I/F45を介して図5(d)に示すラッチ間転送コマンドCM5が供給されると、コマンド解析回路41は、ラッチ間転送コマンドCM5において、「YBh」をラッチ間転送指示であると解釈するとともに「YBh」をBDL48の明示的な指定と解釈し、これによりコンテキストBにXDL49を割り当てる。
これに応じて、レディービジー信号RY/BYnがビジー(ローレベル)になるt(BDL→XDL)で示す期間に、転送制御回路43は、BDL48に格納された1ページ分のデータをXDL49に転送して格納する。
続いて、コマンド解析回路41は、図5(d)に示すデータ転送コマンドCM6において、「05h」を転送指示であると解釈する。そして、コマンド解析回路41は、「CA1」「CA2」をXDL49におけるカラムアドレスとして解釈し、「RA1」「RA2」「RA3」をダミーのロウアドレスとして無視し、「E0h」を出力開始指示であると解釈する。
これに応じて、レディービジー信号RY/BYnがビジー(ローレベル)になるtOUTで示す期間に、行制御回路42は、XDL49におけるカラムアドレスで指定されたデータを入出力I/F45経由で入出力信号線31bへ出力する。
一方、メモリシステム20のコントローラ25では、中間バッファ(ADL47,BDL48)の指定を含むコマンドを発行すべき状況として、複数のスレッドに関するリード処理を行う場合が考えられる。コントローラ25は、並行して実行すべき複数のリード処理が存在する場合、複数のリード処理のそれぞれにスレッドを割り当て、各スレッドを管理しながらコマンドを発行して不揮発性メモリ21へのアクセス制御を行う。
具体的には、コントローラ25は、機能的な構成として、リード処理部251及びバックグランド処理部257を有する。リード処理部251は、スレッド割当部252、スレッド判定部253、コンテキスト割当部254、バッファ判定部255、及びコマンド発行部255を有する。なお、コントローラ25は、前述のように、例えばSoC(System−on−a−Chip)を含むコントローラパッケージとして実装され得る。図6に示す機能的な構成は、コントローラパッケージにおいてハードウェア的に(例えば、回路として)実装されていてもよい。あるいは、図6に示す各機能は、コントローラパッケージにおいてソフトウェア的に(例えば、バッファメモリ26等に一括して又は処理の進行に応じて順次に展開されるファームウェアを、メインコントローラ28が実行することによって)実現されていてもよい。あるいは、図6に示す各機能は、コントローラパッケージにおいて、一部の機能がハードウェアによって実現され、残りの機能がソフトウェア的に実現されていてもよい。
バックグランド処理部257は、ホストコマンドに基づかずにメモリシステム20が自発的に行うバックグランド処理を制御し、バックグランド処理に従い、バックグランドリード命令を発行してリード処理部251へ供給する。バックグランドリード命令は、例えば、コンパクションリード命令、パトロールリード命令などを含む。コンパクションリード命令は、コンパクション処理においてメモリセルアレイ50における有効クラスタのデータを集める処理に用いられる。コンパクション処理では、メモリセルアレイ50における有効クラスタ数が小さいブロックからコンパクションリードで集められたデータが他のブロックに書き直される。これにより、メモリセルアレイ50におけるブロックの利用効率を向上できる。パトロールリード命令は、リフレッシュ処理のためのパトロール処理に用いられる。パトロール処理では、各メモリセルに蓄積されたビット誤りの程度を評価する(たとえば、パトロールリードして誤り訂正を試みる)ことで、リフレッシュ対象ブロックの選択を行う。リフレッシュ処理では、選択されたリフレッシュ対象ブロックに含まれるデータを読み出し、誤り訂正を施した上で、ほかのブロック(あるいはリフレッシュ対象ブロック)に書き直す。これにより、メモリセルアレイ50に格納されたデータの信頼性を向上できる。
スレッド割当部252は、ホストシステム10から受けたリードコマンド又はバックグランド処理部257から受けたバックグランドリード命令に応じて、並行して実行すべき複数のリード処理が存在する場合、複数のリード処理のそれぞれにスレッドを振り分ける。
スレッド判定部253は、各スレッドについて、中間バッファに格納されたページデータの再利用性を判定する(例えば、リードコマンドのシーケンシャル性を判定する)。
例えば、スレッド判定部253は、スレッドごとに、複数のリードコマンドの論理アドレスの連続性に基づいて、そのスレッドのリードコマンドのシーケンシャル性を判定する。具体的には、スレッド判定部253は、スレッドごとに、ホストから並行して受けた複数のリードコマンドの論理アドレスを比較する。複数のリードコマンドの論理アドレスが連続している又はほぼ連続していると見なせる場合、将来にわたりシーケンシャルなアクセスが来るであろうと予測できる。スレッド判定部253は、複数のリードコマンドの論理アドレスの連続性が高い場合、リードコマンドのシーケンシャル性が高いと判定する。その結果、スレッド判定部253は、そのスレッドについてページデータの再利用性が高いと判定する。スレッド判定部253は、複数のリードコマンドの論理アドレスの連続性が低い(不連続性が高い)場合、リードコマンドのシーケンシャル性が低いと判定する。その結果、スレッド判定部253は、そのスレッドについてページデータの再利用性が低いと判定する。
コンテキスト割当部254は、中間バッファに格納されたページデータの再利用性が高い(例えば、リードコマンドのシーケンシャル性が高い)とスレッド判定部253で判定されたスレッドごとに、コンテキストを割り当てる。コンテキスト割当部254は、スレッドの数がコンテキストの数よりも大きい場合、単位時間あたりに要求されるデータ量が多いスレッドに優先的にコンテキストを割り当ててもよい。例えば、コンテキスト割当部254は、スレッドAにコンテキストAを割り当て、スレッドBにコンテキストBを割り当てる。各コンテキストは、中間バッファに対応している。例えば、スレッドAが中間バッファ(ADL47)に対応し、スレッドBが中間バッファ(BDL48)に対応している。
具体的には、バッファ判定部255は、ADL状態管理レジスタ255a、BDL状態管理レジスタ255b、及びXDL状態管理レジスタ255cを有する。バッファ判定部255は、スレッドが割り当てられたコンテキストに対応する中間バッファ(ADL47,BDL48)の状態と入出力バッファ(XDL49)の状態とをトラッキングし、ページキャッシュヒットの判定を行う。ページキャッシュヒットの判定には、データが有効であるかどうかの判定と、リードコマンドで要求されるデータと同じページのデータがキャッシュされているか否かの判定とが含まれる。
ADL状態管理レジスタ255aは、有効フラグ255a1を含む。有効フラグ255a1は、有効を示すビット値(例えば、「1」)又は無効を示すビット値(例えば、「0」)を格納し、ADL47に格納されたページデータが有効なデータであるか無効なデータ(キャッシュミスとして扱うべきデータ)であるかを示す。ADL状態管理レジスタ255aは、有効フラグ255a1が有効を示すビット値を格納する場合、物理ページアドレス255a2をさらに含む。物理ページアドレス255a2は、ADL47に格納されたページデータに対応する物理ページアドレスである。ADL状態管理レジスタ255aは、有効フラグ255a1が無効を示すビット値を格納する場合、物理ページアドレス255a2を含まなくてもよい。なお、ADL状態管理レジスタ255aは、有効フラグを、物理ページアドレスと独立して含まなくてもよい。かわりに、ADL状態管理レジスタ255aは、物理ページアドレスに既定の特殊な値を格納することで、ADL47に格納されたページデータが無効なデータであることを示してもよい。
BDL状態管理レジスタ255bは、ADL状態管理レジスタ255aと基本的に同様であり、BDL48に格納されたページデータが有効か否かを示す有効フラグ255b1を含み、BDL48物理ページアドレス255b2を含んでもよい。物理ページアドレス255b2は、BDL48に格納されたページデータに対応する物理ページアドレスである。
XDL状態管理レジスタ255xは、ADL状態管理レジスタ255aと基本的に同様であり、XDL49に格納されたページデータが有効か否かを示す有効フラグ255x1を含み、物理ページアドレス255x2を含んでもよい。物理ページアドレス255x2は、XDL49に格納されたページデータに対応する物理ページアドレスである。
ホストからリードコマンドを受けると、バッファ判定部255は、リードコマンドに含まれた論理アドレス(LBA)に対して論物変換で得られた物理アドレスを取得する。バッファ判定部255は、その物理アドレスから物理ページアドレスを抽出し、抽出された物理ページアドレスを状態管理レジスタに含まれた物理ページアドレスと比較する。バッファ判定部255は、抽出された物理ページアドレスが状態管理レジスタに含まれた物理ページアドレスと同じであり且つそのバッファのページデータが有効なデータであれば、キャッシュヒットと判定する。バッファ判定部255は、抽出された物理ページアドレスが状態管理レジスタに含まれた物理ページアドレスと異なることとそのバッファのページデータが無効なデータであることとの少なくとも一方が満たされれば、キャッシュミスと判定する。バッファ判定部255は、キャッシュヒット・ミスの判定結果に基づいて、中間バッファの指定を含むコマンド(センスコマンド及び/又はラッチ間転送コマンド)の必要性の有無を判断する。具体的には、バッファ判定部255は、入出力バッファ(XDL49)でキャッシュヒットと判定した場合は、センスコマンドとラッチ間転送コマンドのいずれも必要ないと判断する。バッファ判定部255は、入出力バッファ(XDL49)でキャッシュミスと判定し、かつ、中間バッファ(ADL47あるいはBDL48)のいずれかでキャッシュヒットと判定した場合は、センスコマンドは必要なく、ラッチ間転送コマンドが必要であると判断する。バッファ判定部255は、入出力バッファ・中間バッファのいずれにおいてもキャッシュミスと判定した場合は、センスコマンドの必要があると判断する。
コマンド発行部255は、キャッシュヒットの判定結果に基づいて、中間バッファの指定を含むコマンドの必要性があるとバッファ判定部255で判定されたコマンド(センスコマンド及び/又はラッチ間転送コマンド)を発行し不揮発性メモリ21へ供給する。
また、コントローラ25は、図7に示すような動作を行う。図7は、コントローラ25の動作を示すフローチャートである。
コントローラ25は、リードコマンド又はバックグランドリード命令を受けると(S1)、リードコマンド又はバックグランドリード命令に応じて、並行して実行すべき複数のリード処理が存在するかどうか判断する。
コントローラ25は、並行して実行すべき複数のリード処理が存在する場合、複数のリード処理のそれぞれをスレッドに振り分ける(S2)。例えば、コントローラ25は、ホストから並行して受けた複数のリードコマンド又はバックグランド命令について、ホストID、ストリームID、バックグランド命令であるか否かやバックグランド処理の種類(コンパクション、パトロールリードなど)等を根拠として、別個に扱うべきスレッドがあることを判定する。コントローラ25は、スレッドごとに、中間バッファに格納されたデータの再利用性が高いか否かを判断する(S3)。例えば、コントローラ25は、スレッドごとに、ホストから並行して受けた複数のリードコマンドの論理アドレスを比較する。複数のリードコマンドの論理アドレスが連続している又はほぼ連続していると見なせる場合、将来にわたりシーケンシャルなアクセスが来るであろうと予測できる。コントローラ25は、複数のリードコマンドの論理アドレスの連続性が高い場合、複数のリードコマンドのシーケンシャル性が高いと判断し、その結果、そのスレッドについて中間バッファに格納されたデータの再利用性が高いと判断する(S3でYes)。コントローラ25は、複数のリードコマンドの論理アドレスの連続性が低い(不連続性が高い)場合、複数のリードコマンドのシーケンシャル性が低いと判断し、その結果、そのスレッドについて中間バッファに格納されたデータの再利用性が低いと判断する(S3でNo)。なお、再利用性の判定の根拠は、リードコマンドに含まれる論理アドレスの連続性に限定されない。例えば、バックグラウンド処理におけるリード要求は、物理アドレスを含み、必ずしも論理アドレスを含まないが、コンパクション処理、パトロールリード処理等の処理の種類によって、対象の物理アドレスが連続していることが期待できる。そのため、スレッドが、特定の種類のバックグランド処理に対応することを根拠として、当該スレッドについて中間バッファに格納されたデータの再利用性が高いと判断してもよい。
コントローラ25は、中間バッファに格納されたデータの再利用性が低い(例えば、スレッドのシーケンシャル性が低い)場合(S3でNo)、通常のリード処理を行う(S4)。通常のリード処理では、コントローラ25は、通常のセンスコマンド(すなわち、センス結果の格納先の明示的な指定をともなわないセンスコマンド)、データ転送コマンドを順次に発行して不揮発性メモリ21へ供給し、リードデータを不揮発性メモリ21から受ける。コントローラ25は、受けたリードデータをホストシステム10へ送信する。なお、通常のリード処理(S4)において、XDL49の状態をトラッキングしてページデータキャッシュの判定を行い、キャッシュヒットであれば、センス動作を省略し、XDL49のデータを再利用する処理を行ってもよい。
コントローラ25は、中間バッファに格納されたデータの再利用性が高い(例えば、スレッドのシーケンシャル性が高い)場合(S3でYes)、スレッドにコンテキストを割り当てる(S5)。スレッド数≧コンテキスト数=中間バッファ数である場合、再利用性が高い(例えば、シーケンシャル性が高い)と判定された複数のスレッドのうち、コンテキスト数分までのスレッドにコンテキストを割り当てる。このとき、コントローラ25は、複数のスレッドのうち単位時間当たりのアクセス量が多いスレッドに優先的にコンテキストを割り当ててもよい。例えば、コントローラ25は、スレッドAにコンテキストAを割り当て、スレッドBにコンテキストBを割り当て、他のスレッドにコンテキストを割り当てない。
コントローラ25は、処理対象のコンテキストがコンテキストAであれば(S6で「コンテキストA」)、目的のデータが不揮発性メモリ21におけるADL47にキャッシュされているか否か判断する(S12)。コントローラ25は、ADL状態管理レジスタ255aに格納された有効フラグ255a1を参照し、ADL47に格納されたデータが有効であるか否かを判断する。コントローラ25は、有効であれば、ADL状態管理レジスタ255aに格納された物理ページアドレスと処理対象のリード命令の物理ページアドレスが一致するかどうか判断する。コントローラ25は、ADL47に格納されたデータが無効であるか、又はADL状態管理レジスタ255aに格納された物理ページアドレスと処理対象のリード命令の物理ページアドレスとが一致しなければ、目的のデータがADL47にキャッシュされていないと判断する。コントローラ25は、目的のデータがADL47にキャッシュされていない場合(S12で「キャッシュミス」)、ADL47の指定を含むセンスコマンド(図5(a)に示すセンスコマンドCM1参照)を発行して不揮発性メモリ21へ供給する(S13)。これにより、不揮発性メモリ21では、センスコマンドでアドレス指定されたメモリセルからセンス動作で読み出されたデータがADL47に格納される。また、コントローラ25は、ADL状態管理レジスタ255aを更新する。具体的には、コントローラ25は、有効を示すビット値を有効フラグ255a1に設定し、リード命令の物理ページアドレスを物理ページアドレス255a2として格納する。
コントローラ25は、ADL47に格納されたデータが有効であり且つADL状態管理レジスタ255aに格納された物理ページアドレスと処理対象のリード命令の物理ページアドレスが一致すれば、目的のデータがADL47にキャッシュされていると判断する。コントローラ25は、目的のデータがADL47にキャッシュされている場合(S12で「キャッシュヒット」)、さらに、目的のデータが不揮発性メモリ21におけるXDL49にキャッシュされているか否か判断する(S14)。
コントローラ25は、XDL状態管理レジスタ255xに格納された有効フラグ255x1を参照し、XDL49に格納されたデータが有効であるか否かを判断する。コントローラ25は、有効であれば、XDL状態管理レジスタ255xに格納された物理ページアドレスと処理対象のリード命令の物理ページアドレスが一致するかどうか判断する。コントローラ25は、XDL49に格納されたデータが無効であるか、又はXDL状態管理レジスタ255xに格納された物理ページアドレスと処理対象のリード命令の物理ページアドレスとが一致しなければ、目的のデータがXDL49にキャッシュされていないと判断し(S14で「キャッシュミス」)S15へ進む。コントローラ25は、目的のデータがXDL49にキャッシュされていない場合(S12で「キャッシュミス」)、又は、S13が完了した後、ADL47の指定を含むラッチ間転送コマンド(図5(c)に示すラッチ間転送コマンドCM3参照)を発行して不揮発性メモリ21へ供給する(S15)。これにより、不揮発性メモリ21では、ADL47に格納されたデータがXDL49へ転送されて格納される。また、コントローラ25は、XDL状態管理レジスタを更新する。具体的には、コントローラ25は、有効を示すビット値を有効フラグ255x1に設定し、物理ページアドレス255a2と同じ物理ページアドレスを物理ページアドレス255x2として格納する。
コントローラ25は、XDL49に格納されたデータが有効であり且つXDL状態管理レジスタ255xに格納された物理ページアドレスと処理対象のリード命令の物理ページアドレスが一致すれば、目的のデータがXDL49にキャッシュされていると判断する。コントローラ25は、目的のデータがXDL49にキャッシュされている場合(S14で「キャッシュヒット」)、又は、S15が完了した後、データ転送コマンド(図5(c)に示すデータ転送コマンドCM4参照)を発行して不揮発性メモリ21へ供給する(S16)。これにより、不揮発性メモリ21では、XDL49に格納されたデータのうちデータ転送コマンドでアドレス指定されたデータが入出力信号線31b経由でコントローラ25へ出力される。コントローラ25は、受けたリードデータをホストシステム10へ送信する。
一方、コントローラ25は、処理対象のコンテキストがコンテキストBであれば(S6で「コンテキストB」)、目的のデータが不揮発性メモリ21におけるBDL48にキャッシュされているか否か判断する(S17)。コントローラ25は、BDL状態管理レジスタ255bに格納された有効フラグ255b1を参照し、BDL48に格納されたデータが有効であるか否かを判断する。コントローラ25は、有効であれば、BDL状態管理レジスタ255bに格納された物理ページアドレスと処理対象のリード命令の物理ページアドレスが一致するかどうか判断する。コントローラ25は、BDL48に格納されたデータが無効であるか、又はBDL状態管理レジスタ255bに格納された物理ページアドレスと処理対象のリード命令の物理ページアドレスとが一致しなければ、目的のデータがBDL48にキャッシュされていないと判断する。コントローラ25は、目的のデータがBDL48にキャッシュされていない場合(S17で「キャッシュミス」)、BDL48の指定を含むセンスコマンド(図5(b)に示すセンスコマンドCM2参照)を発行して不揮発性メモリ21へ供給する(S18)。これにより、不揮発性メモリ21では、センスコマンドでアドレス指定されたメモリセルからセンス動作で読み出されたデータがBDL48に格納される。また、コントローラ25は、BDL状態管理レジスタを更新する。具体的には、コントローラ25は、有効を示すビット値を有効フラグ255b1に設定し、リード命令の物理ページアドレスを物理ページアドレス255b2として格納する。
コントローラ25は、BDL48に格納されたデータが有効であり且つBDL状態管理レジスタ255bに格納された物理ページアドレスと処理対象のリード命令の物理ページアドレスが一致すれば、目的のデータがBDL48にキャッシュされていると判断する。コントローラ25は、目的のデータがBDL48にキャッシュされている場合(S17で「キャッシュヒット」)、さらに、目的のデータが不揮発性メモリ21におけるXDL49にキャッシュされているか否か判断する(S19)。
コントローラ25は、XDL状態管理レジスタ255xに格納された有効フラグ255x1を参照し、XDL49に格納されたデータが有効であるか否かを判断する。コントローラ25は、有効であれば、XDL状態管理レジスタ255xに格納された物理ページアドレス255x2と処理対象のリード命令の物理ページアドレスが一致するかどうか判断する。コントローラ25は、XDL49に格納されたデータが無効であるか、又はXDL状態管理レジスタ255xに格納された物理ページアドレス255x2と処理対象のリード命令の物理ページアドレスとが一致しなければ、目的のデータがXDL49にキャッシュされていないと判断する。コントローラ25は、目的のデータがXDL49にキャッシュされていない場合(S19で「キャッシュミス」)、又は、S18が完了した後、BDL48の指定を含むラッチ間転送コマンド(図5(d)に示すラッチ間転送コマンドCM5参照)を発行して不揮発性メモリ21へ供給する(S20)。これにより、不揮発性メモリ21では、BDL48に格納されたデータがXDL49へ転送されて格納される。また、コントローラ25は、XDL状態管理レジスタを更新する。具体的には、コントローラ25は、有効を示すビット値を有効フラグ255x1に設定し、物理ページアドレス255a2と同じ物理ページアドレスを物理ページアドレス255x2として格納する。
コントローラ25は、XDL49に格納されたデータが有効であり且つXDL状態管理レジスタ255xに格納された物理ページアドレスと処理対象のリード命令の物理ページアドレスが一致すれば、目的のデータがXDL49にキャッシュされていると判断する。コントローラ25は、目的のデータがXDL49にキャッシュされている場合(S19で「キャッシュヒット」)、又は、S20が完了した後、データ転送コマンド(図5(d)に示すデータ転送コマンドCM6参照)を発行して不揮発性メモリ21へ供給する(S21)。これにより、不揮発性メモリ21では、XDL49に格納されたデータのうちデータ転送コマンドでアドレス指定されたデータが入出力信号線31b経由でコントローラ25へ出力される。コントローラ25は、受けたリードデータをホストシステム10へ送信する。
S3で説明したような、並行して実行すべき複数のリード処理が存在する場合として、例えば、図8に示す場合が考えられる。図8は、複数のスレッドに関する情報処理システム1の動作例を示すシーケンス図である。図8では、コントローラ25が複数のホストシステム10−1,10−2からリードコマンドを並行に(例えば、交互に)受ける場合が例示されている。
例えば、コントローラ25は、ホストシステム10−1からリードコマンド(ホストID=H1、LBA=A1)を受けると(S31)、リードコマンドに含まれたホストID=H1を抽出する。コントローラ25は、抽出されたホストID=H1にスレッドAを割り当てる(S32)。
続いて、コントローラ25は、ホストシステム10−2からリードコマンド(ホストID=H2、LBA=A11)を受けると(S33)、リードコマンドに含まれたホストID=H2を抽出する。コントローラ25は、抽出されたホストID=H2にスレッドBを割り当てる(S34)。
これに応じて、コントローラ25は、ホストシステム10−1からリードコマンド(ホストID=H1、LBA=A2)を受けると(S35)、そのリードコマンドをスレッドAのリードコマンドとして処理する。
コントローラ25は、ホストシステム10−2からリードコマンド(ホストID=H2、LBA=A12)を受けると(S36)、そのリードコマンドをスレッドBのリードコマンドとして処理する。
コントローラ25は、ホストシステム10−1からリードコマンド(ホストID=H1、LBA=A3)を受けると(S37)、そのリードコマンドをスレッドAのリードコマンドとして処理する。
コントローラ25は、ホストシステム10−2からリードコマンド(ホストID=H2、LBA=A13)を受けると(S38)、そのリードコマンドをスレッドBのリードコマンドとして処理する。
コントローラ25は、ホストシステム10−1からリードコマンド(ホストID=H1、LBA=A4)を受けると(S39)、そのリードコマンドをスレッドAのリードコマンドとして処理する。
コントローラ25は、ホストシステム10−2からリードコマンド(ホストID=H2、LBA=A14)を受けると(S40)、そのリードコマンドをスレッドBのリードコマンドとして処理する。
あるいは、並行して実行すべき複数のリード処理が存在する場合として、例えば、図9に示す場合が考えられる。図9は、複数のスレッドに関する情報処理システム1の他の動作例を示すシーケンス図である。図9では、コントローラ25がホストシステム10からマルチストリーム処理によるリードコマンドを連続的に受ける場合が例示されている。
例えば、コントローラ25は、ホストシステム10からストリーム制御要求(ストリームID=SI1)を受けると(S41)、ストリームID=SI1にスレッドAを割り当てる(S42)。
続いて、コントローラ25は、ホストシステム10からストリーム制御要求(ストリームID=SI2)を受けると(S43)、ストリームID=SI2にスレッドBを割り当てる(S44)。
これに応じて、コントローラ25は、ホストシステム10からリードコマンド(ストリームID=SI1、LBA=A1)を受けると(S45)、そのリードコマンドをスレッドAのリードコマンドとして処理する。
コントローラ25は、ホストシステム10からリードコマンド(ストリームID=SI2、LBA=A11)を受けると(S46)、そのリードコマンドをスレッドBのリードコマンドとして処理する。
コントローラ25は、ホストシステム10からリードコマンド(ストリームID=SI1、LBA=A2)を受けると(S47)、そのリードコマンドをスレッドAのリードコマンドとして処理する。
コントローラ25は、ホストシステム10からリードコマンド(ストリームID=SI2、LBA=A12)を受けると(S48)、そのリードコマンドをスレッドBのリードコマンドとして処理する。
コントローラ25は、ホストシステム10からリードコマンド(ストリームID=SI1、LBA=A3)を受けると(S49)、そのリードコマンドをスレッドAのリードコマンドとして処理する。
コントローラ25は、ホストシステム10からリードコマンド(ストリームID=SI2、LBA=A13)を受けると(S50)、そのリードコマンドをスレッドBのリードコマンドとして処理する。
コントローラ25は、ホストシステム10からリードコマンド(ストリームID=SI1、LBA=A4)を受けると(S51)、そのリードコマンドをスレッドAのリードコマンドとして処理する。
コントローラ25は、ホストシステム10からリードコマンド(ストリームID=SI2、LBA=A14)を受けると(S52)、そのリードコマンドをスレッドBのリードコマンドとして処理する。
あるいは、並行して実行すべき複数のリード処理が存在する場合として、例えば、図10に示す場合が考えられる。図10は、複数のスレッドに関する情報処理システム1のさらに他の動作例を示すシーケンス図である。図10では、リード処理部251がホストシステム10からリードコマンドを受けるとともにバックグランド処理部257からバックグランドリード命令を受ける場合が例示されている。
例えば、リード処理部251は、ホストシステム10からリードコマンド(LBA=A1)を受けると(S61)、リードコマンドにスレッドAを割り当てる(S62)。
続いて、リード処理部251は、バックグランド処理部257からバックグランドリード命令(LBA=A11)を受けると(S63)、バックグランドリード命令にスレッドBを割り当てる(S64)。
これに応じて、リード処理部251は、ホストシステム10からリードコマンド(LBA=A2)を受けると(S65)、そのリードコマンドをスレッドAのリードコマンドとして処理する。
リード処理部251は、バックグランド処理部257からバックグランドリード命令(LBA=A12)を受けると(S66)、そのバックグランドリード命令をスレッドBのバックグランドリード命令として処理する。
リード処理部251は、ホストシステム10−1からリードコマンド(LBA=A3)を受けると(S37)、そのリードコマンドをスレッドAのリードコマンドとして処理する。
リード処理部251は、バックグランド処理部257からバックグランドリード命令(LBA=A13)を受けると(S38)、そのバックグランドリード命令をスレッドBのバックグランドリード命令として処理する。
リード処理部251は、ホストシステム10−1からリードコマンド(LBA=A4)を受けると(S39)、そのリードコマンドをスレッドAのリードコマンドとして処理する。
リード処理部251は、バックグランド処理部257からバックグランドリード命令(LBA=A14)を受けると(S40)、そのバックグランドリード命令をスレッドBのバックグランドリード命令として処理する。
S10の動作例として、スレッドAのリードコマンドとスレッドBのリードコマンドとを並行して交互に受けた場合、メモリシステム20では、図11に示すような動作が行われる。図11は、メモリシステム20の動作を示すシーケンス図である。図11では、図示及び説明の簡略化のために、リードコマンドで要求されるデータサイズとデータ転送コマンドで指示されるデータサイズとがともにページサイズの1/4(16KB×1/4=4KB)である場合について例示する。
例えば、コントローラ25は、スレッドAのリードコマンドについて、論理アドレスA1を物理アドレス(カラムアドレスC1,ロウアドレスR1)に変換し、ADL47の指定とロウアドレスR1とを含むセンスコマンドを発行して不揮発性メモリ21へ供給する(S71)。不揮発性メモリ21がビジー状態からレディ状態になると、コントローラ25は、ADL47の指定の指定を含むラッチ間転送コマンドを発行して不揮発性メモリ21へ供給する(S72)。不揮発性メモリ21がビジー状態からレディ状態になると、コントローラ25は、カラムアドレスC1を含むデータ転送コマンドを発行して不揮発性メモリ21へ供給する(S73)。これに応じて、コントローラ25は、リードデータを不揮発性メモリ21から受け、リードデータをホストシステム10へ送信する(S74)。
コントローラ25は、スレッドBのリードコマンドについて、論理アドレスA11を物理アドレス(カラムアドレスC11,ロウアドレスR11)に変換し、BDL48の指定とロウアドレスR11とを含むセンスコマンドを発行して不揮発性メモリ21へ供給する(S75)。不揮発性メモリ21がビジー状態からレディ状態になると、コントローラ25は、BDL48の指定の指定を含むラッチ間転送コマンドを発行して不揮発性メモリ21へ供給する(S76)。不揮発性メモリ21がビジー状態からレディ状態になると、コントローラ25は、カラムアドレスC11を含むデータ転送コマンドを発行して不揮発性メモリ21へ供給する(S77)。これに応じて、コントローラ25は、リードデータを不揮発性メモリ21から受け、リードデータをホストシステム10へ送信する(S78)。
コントローラ25は、スレッドAのリードコマンドについて、論理アドレスA2を物理アドレス(カラムアドレスC2,ロウアドレスR1)に変換し、ADL47の指定の指定を含むラッチ間転送コマンドを発行して不揮発性メモリ21へ供給する(S79)。不揮発性メモリ21がビジー状態からレディ状態になると、コントローラ25は、カラムアドレスC2を含むデータ転送コマンドを発行して不揮発性メモリ21へ供給する(S80)。これに応じて、コントローラ25は、リードデータを不揮発性メモリ21から受け、リードデータをホストシステム10へ送信する(S81)。
コントローラ25は、スレッドBのリードコマンドについて、論理アドレスA12を物理アドレス(カラムアドレスC12,ロウアドレスR11)に変換し、BDL48の指定の指定を含むラッチ間転送コマンドを発行して不揮発性メモリ21へ供給する(S82)。不揮発性メモリ21がビジー状態からレディ状態になると、コントローラ25は、カラムアドレスC2を含むデータ転送コマンドを発行して不揮発性メモリ21へ供給する(S83)。これに応じて、コントローラ25は、リードデータを不揮発性メモリ21から受け、リードデータをホストシステム10へ送信する(S84)。
コントローラ25は、スレッドAのリードコマンドについて、論理アドレスA3を物理アドレス(カラムアドレスC3,ロウアドレスR1)に変換し、ADL47の指定の指定を含むラッチ間転送コマンドを発行して不揮発性メモリ21へ供給する(S85)。不揮発性メモリ21がビジー状態からレディ状態になると、コントローラ25は、カラムアドレスC3を含むデータ転送コマンドを発行して不揮発性メモリ21へ供給する(S86)。これに応じて、コントローラ25は、リードデータを不揮発性メモリ21から受け、リードデータをホストシステム10へ送信する(S87)。
コントローラ25は、スレッドBのリードコマンドについて、論理アドレスA13を物理アドレス(カラムアドレスC13,ロウアドレスR11)に変換し、BDL48の指定の指定を含むラッチ間転送コマンドを発行して不揮発性メモリ21へ供給する(S88)。不揮発性メモリ21がビジー状態からレディ状態になると、コントローラ25は、カラムアドレスC13を含むデータ転送コマンドを発行して不揮発性メモリ21へ供給する(S89)。これに応じて、コントローラ25は、リードデータを不揮発性メモリ21から受け、リードデータをホストシステム10へ送信する(S90)。
コントローラ25は、スレッドAのリードコマンドについて、論理アドレスA4を物理アドレス(カラムアドレスC4,ロウアドレスR1)に変換し、ADL47の指定の指定を含むラッチ間転送コマンドを発行して不揮発性メモリ21へ供給する(S91)。不揮発性メモリ21がビジー状態からレディ状態になると、コントローラ25は、カラムアドレスC4を含むデータ転送コマンドを発行して不揮発性メモリ21へ供給する(S92)。これに応じて、コントローラ25は、リードデータを不揮発性メモリ21から受け、リードデータをホストシステム10へ送信する(S93)。
コントローラ25は、スレッドBのリードコマンドについて、論理アドレスA14を物理アドレス(カラムアドレスC14,ロウアドレスR11)に変換し、BDL48の指定の指定を含むラッチ間転送コマンドを発行して不揮発性メモリ21へ供給する(S94)。不揮発性メモリ21がビジー状態からレディ状態になると、コントローラ25は、カラムアドレスC14を含むデータ転送コマンドを発行して不揮発性メモリ21へ供給する(S95)。これに応じて、コントローラ25は、リードデータを不揮発性メモリ21から受け、リードデータをホストシステム10へ送信する(S96)。
S71〜S96の処理についてメモリチップ40の動作を示すと図12のようになる。図12は、不揮発性メモリ21の動作を示す図である。
タイミングt1において、不揮発性メモリ21は、センスコマンド(ADL,R1)に応じて、メモリセルアレイ50におけるロウアドレスR1に対応するページmからセンス動作で読み出された16KBのデータをADL47へ格納する。
タイミングt2において、不揮発性メモリ21は、ラッチ間転送コマンド(ADL)に応じて、ADL47に格納された16KBのデータをXDL49へ転送して格納する。
タイミングt3において、不揮発性メモリ21は、データ転送コマンド(C1)に応じて、XDL49に格納された16KBのデータのうちアドレス指定された4KBのデータ(例えば、16KBのうちの最初の4KBのデータ)を入出力信号線31b経由でコントローラ25へ出力する。
タイミングt4において、不揮発性メモリ21は、センスコマンド(BDL,R11)に応じて、メモリセルアレイ50におけるロウアドレスR11に対応するページnからセンス動作で読み出された16KBのデータをBDL48へ格納する。
タイミングt5において、不揮発性メモリ21は、ラッチ間転送コマンド(BDL)に応じて、BDL48に格納された16KBのデータをXDL49へ転送して格納する。
タイミングt6において、不揮発性メモリ21は、データ転送コマンド(C11)に応じて、XDL49に格納された16KBのデータのうちアドレス指定された4KBのデータ(例えば、16KBのうちの最初の4KBのデータ)を入出力信号線31b経由でコントローラ25へ出力する。
タイミングt7において、不揮発性メモリ21は、ラッチ間転送コマンド(ADL)に応じて、ADL47に格納された16KBのデータをXDL49へ転送して格納する。
タイミングt8において、不揮発性メモリ21は、データ転送コマンド(C2)に応じて、XDL49に格納された16KBのデータのうちアドレス指定された4KBのデータを入出力信号線31b経由でコントローラ25へ出力する。
タイミングt9において、不揮発性メモリ21は、ラッチ間転送コマンド(BDL)に応じて、BDL48に格納された16KBのデータをXDL49へ転送して格納する。
タイミングt10において、不揮発性メモリ21は、データ転送コマンド(C12)に応じて、XDL49に格納された16KBのデータのうちアドレス指定された4KBのデータを入出力信号線31b経由でコントローラ25へ出力する。
タイミングt11において、不揮発性メモリ21は、ラッチ間転送コマンド(ADL)に応じて、ADL47に格納された16KBのデータをXDL49へ転送して格納する。
タイミングt12において、不揮発性メモリ21は、データ転送コマンド(C3)に応じて、XDL49に格納された16KBのデータのうちアドレス指定された4KBのデータを入出力信号線31b経由でコントローラ25へ出力する。
タイミングt13において、不揮発性メモリ21は、ラッチ間転送コマンド(BDL)に応じて、BDL48に格納された16KBのデータをXDL49へ転送して格納する。
タイミングt14において、不揮発性メモリ21は、データ転送コマンド(C13)に応じて、XDL49に格納された16KBのデータのうちアドレス指定された4KBのデータを入出力信号線31b経由でコントローラ25へ出力する。
タイミングt15において、不揮発性メモリ21は、ラッチ間転送コマンド(ADL)に応じて、ADL47に格納された16KBのデータをXDL49へ転送して格納する。
タイミングt16において、不揮発性メモリ21は、データ転送コマンド(C4)に応じて、XDL49に格納された16KBのデータのうちアドレス指定された4KBのデータ(例えば、16KBのうちの最後の4KBのデータ)を入出力信号線31b経由でコントローラ25へ出力する。
タイミングt17において、不揮発性メモリ21は、ラッチ間転送コマンド(BDL)に応じて、BDL48に格納された16KBのデータをXDL49へ転送して格納する。
タイミングt18において、不揮発性メモリ21は、データ転送コマンド(C14)に応じて、XDL49に格納された16KBのデータのうちアドレス指定された4KBのデータ(例えば、16KBのうちの最後の4KBのデータ)を入出力信号線31b経由でコントローラ25へ出力する。
図12に示されるように、実施形態では、中間バッファ(ADL47,BDL48)及び入出力バッファ(XDL49)を使用したリード処理を行う。すなわち、複数のスレッドについて並行して受けた各リードコマンドについて、目的のデータのページアドレスが中間バッファ(ADL47,BDL48)に格納されたデータのページアドレスと一致した場合に、中間バッファ(ADL47,BDL48)及び入出力バッファ(XDL49)の両方を利用したキャッシュ処理を行う。これにより、中間バッファ(ADL47,BDL48)のデータを再利用しながらリード処理を行う。この結果、複数のスレッドについて並行して受けた複数のリードコマンドに対してであっても、センス動作の発生回数を抑制しながら、不揮発性メモリ21からコントローラ25へリードデータを転送可能である。例えば、図12の場合、ADL47を使用するスレッドとBDL48を使用するスレッドとを交互に受けた場合に、不揮発性メモリ21からコントローラ25への8回のリードデータ転送について、センス動作の回数が2回に抑えられている。これをコマンド処理時間について比較例と比較してみると、図13に示すようになる。図13は、コマンドの処理時間を示す図である。図13に示す比較例は、図7のS3の分岐を常時Noとした場合と同じであり、中間バッファ(ADL47,BDL48)を使用せずに入出力バッファ(XDL49)を使用したリード処理を行う動作となる。このため、比較例では(すなわち、図7のS3の分岐を常時Noとした場合には)、リードデータ転送について毎回センス動作が発生する。図13の場合、不揮発性メモリ21からコントローラ25への8回のリードデータ転送についてセンス動作の回数が8回になっている。比較例では、センス動作の回数が多いことなどにより、複数のスレッドについて並行して受けた複数のリードコマンドに対して不揮発性メモリ21が最初のコマンドを受信してから最後のコマンドの処理を完了するまでの時間(複数スレッドの複数コマンドのトータルの処理時間)が長くなりやすい。比較例に比べると、本実施形態では、データのページアドレスが中間バッファに格納されたデータのページアドレスと一致した場合に中間バッファ(ADL47,BDL48)のデータを再利用することで、センス動作の回数が少なくなり、複数スレッドの複数コマンドのトータルの処理時間が短縮されている。例えば、本実施形態では、8回のリードデータ転送についてセンス動作の回数を2回に抑えることで、複数スレッドの複数コマンドのトータルの処理時間がΔT分短縮される。なお、前記比較例において、さらにXDL49に関するキャッシュ処理を加えた第2の比較例を考えることができる。第2の比較例では、単一のスレッドのシーケンシャルリードアクセスに対して、センス動作の回数を抑制することが可能であるが、複数のスレッドのシーケンシャルリードアクセスに対しては、複数のスレッド間でXDL49のキャッシュに対するスラッシングが発生するため、センス動作の回数が増大する。このため、本実施形態は、第2の比較例と比較しても、複数スレッドの複数コマンドのトータルの処理時間が短縮される。
以上のように、実施形態では、不揮発性メモリ21を、複数のスレッドに複数の中間バッファ(例えば、ADL47,BDL48)を割り当て複数の中間バッファのうちコマンドで明示的に指定された中間バッファにデータを格納させコマンドで明示的に指定された中間バッファから入出力バッファにデータを転送して出力させるように構成する。これにより、複数のスレッドでのシーケンシャルリードコマンドに対して読み出し動作が容易に高速化される。したがって、複数スレッドのシーケンシャルリードにおいても、センス結果のスラッシングによる余分なセンス動作が発生せず、高い性能が発揮される。あるいは、コントローラ25のリードバッファ26cについて、同等の性能を発揮するために必要な容量を削減できる。
また、実施形態では、メモリセルのプログラム動作で使用される中間バッファ(例えば、ADL47,BDL48)を流用して複数スレッドのリード処理が高速化されるので、不揮発性メモリ21のコスト抑制と性能向上とを容易に両立できる。
なお、各メモリチップ内がシングルプレーンで構成されリード処理がシングルプレーンリードで行われる場合を例示してきたが、本実施形態の考え方は、各メモリチップ内が並列にアクセスが可能な複数のプレーンを含みリード処理がマルチプレーンリードで行われる場合に適用してもよい。
あるいは、本実施形態の考え方をADL47/BDL48←→XDL49の間のスワップ処理に適用してもよい。これにより、中間バッファを使用しない場合と比較して、入出力バッファ(XDL49)のデータ容量が仮想的に増える。
あるいは、図7のS3において各スレッドで中間バッファのデータの再利用性が高いと判断される場合として、シーケンシャルリード、バックグランドリード(例えば、コンパクションリード、パトロールリード)を例示しているが、それ以外にも、4KBより大きいリードサイズのランダムリードを含んでもよい。
あるいは、図7のS3でNoと判断された場合であっても、リードコマンド又はバックグランドリード命令でアドレス指定されたデータが中間バッファ(例えば、ADL47,BDL48)に格納されている可能性がある場合に、S12やS17にジャンプして処理を行ってもよい。
あるいは、図7のS3で例示されるリードコマンドのシーケンシャル性の判断の具体的なアルゴリズムとして、様々なアルゴリズムを用いられ得る。
例えば、実施形態の第1の変形例として、図7のS3において図14〜図16に示すアルゴリズムを用いることができる。図14は、実施形態の第1の変形例におけるリードコマンドのシーケンシャル性を判定するためのアルゴリズムを説明する模式図である。図15は、実施形態の第1の変形例におけるシーケンシャル性を判定する動作を説明する図である。図16は、実施形態の第1の変形例におけるシーケンシャル性判定テーブルの更新手順を説明するフローチャートである。
まず、図15(a)及び図15(b)を参照して、リードコマンドのシーケンシャル性を判定するためのアルゴリズムの概要を説明する。図15(a)及び図15(b)は、リードコマンド(A)〜リードコマンド(E)によって読み出しが要求されるデータ(以下、データ(A)〜データ(E)と称する)の、開始LBA、及び、転送数を示している。
メモリシステム1のコントローラ25は、ホストI/F29から入力される開始LBAや転送数を用いて、リードコマンドのシーケンシャル性を判定する。コントローラ25は、同一のストリームIDを有するリードコマンドで要求されるデータの、基準となる開始LBAを記憶する。すなわち、図15(a)に示す例において、コントローラ25は、読み出しが要求されるデータ(A)の開始LBAを、基準開始LBAとして記憶する。コントローラ25は、データ(A)のLBA範囲と連続するLBA範囲を有するデータ(B)、データ(B)のLBA範囲と連続するLBA範囲を有するデータ(C)、データ(C)のLBA範囲と連続するLBA範囲を有するデータ(D)、データ(D)のLBA範囲と連続するLBA範囲を有するデータ(E)のそれぞれを要求するリードコマンドの転送数の累積数を記憶する。そして、データ(D)の読み出しを要求するリードコマンドの受信により、累積数があらかじめ設定されたシーケンシャル性判定閾値以上になると、コントローラ25は、リードコマンドで読み出し要求されるデータのシーケンシャル性が高いと判定する。
ホストシステム10のリードコマンドの転送の仕方によっては、メモリシステム1のコントローラ25は、シーケンシャル性が高いリードコマンドで要求されるデータを、LBA順に受信できるとは限らない。図15(b)に示す例においては、コントローラ25は、データ(B)、データ(A)、データ(C)、データ(D)、データ(E)の順に読み出し要求するリードコマンドを受信している。コントローラ25は、このように受信されたリードコマンドについても、シーケンシャル性を判定することができる。
次に、図15(a)〜図15(g)を参照して、シーケンシャル性を判定する動作の一例を説明する。シーケンシャル性判定テーブルは、コントローラ25内に実装される。コントローラ25は、シーケンシャル性判定テーブルを用いて、リードコマンドのシーケンシャル性を判定する。
シーケンシャル性判定テーブルは、複数のエントリーを有する。第1の変形例においては、シーケンシャル性判定テーブルは、3つのエントリーを有する。1つのエントリーは、開始LBAと、最終LBAと、累積数と、世代番号と、を含む。また、シーケンシャル性判定テーブルは、シーケンシャル性判定フラグを有する。シーケンシャル性判定テーブルはストリームIDごとに管理される。すなわち、1つのストリームIDに対し、1つのシーケンシャル性判定テーブルが存在する。シーケンシャル性判定テーブルは、ストリーム制御コマンドに応じてストリームIDが割り当てられた時(図9参照)に、コントローラ25によって初期化されてもよい。
以下の説明ではシーケンシャル性判定閾値は0x700が設定されているものとする。
図15(a)は、シーケンシャル性判定テーブルが初期化された状態を示す。図では省略してあるが、すべてのエントリーの開始LBA、最終LBA、累積数、世代番号はゼロである。シーケンシャル性判定フラグはセットされていない。
図15(b)は、図15(a)の状態で開始LBA=0x1000から転送数=0x200セクターのリードコマンドAが受信された時のシーケンシャル性判定テーブルの状態を示す。エントリー0の開始LBAは0x1000、最終LBAは開始LBA+転送数−1なので、0x11FFとなる。エントリー0の累積数は、登録されている累積値(0x000)に、リードコマンドAの転送数(0x200)を足したもので、0x200になる。新規にコマンド情報が登録されたエントリーの世代番号は1になる。すなわち、エントリー0の世代番号は1になる。
図15(c)は、図15(b)の状態で開始LBA=0x1200から転送数=0x100セクターのリードコマンドBが受信された時のシーケンシャル性判定テーブルの状態を示す。リードコマンドBの開始LBAは、エントリー0の最終LBAと連続である。従って、リードコマンドBの情報はエントリー0に登録される。エントリー0の開始LBAは0x1000のまま、最終LBAはリードコマンドBの最終LBAである0x12FFとなる。エントリー0の累積数は、登録されている累積値(0x200)に、リードコマンドBの転送数(0x100)を足したもので、0x300になる。受信したコマンドのLBA範囲と連続するLBA範囲を有するエントリーの世代番号は1になる。すなわち、エントリー0の世代番号は1のままである。
図15(d)は、図15(c)の状態で開始LBA=0x1400から転送数=0x200セクターのリードコマンドCが受信された時のシーケンシャル性判定テーブルの状態を示す。リードコマンドCの開始LBAはエントリー0の最終LBAと連続ではない。この時、リードコマンドCの情報は、エントリー1に登録される。エントリー1の開始LBAは0x1400、最終LBAは0x15FFとなる。エントリー1の累積数は、登録されている累積値(0x000)に、リードコマンドCの転送数(0x200)を足したもので、0x200になる。新規にコマンド情報が登録されたエントリーの世代番号は1になる。すなわち、エントリー1の世代番号は1になる。新規にコマンド情報が登録されたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、1ずつインクリメントされる。すなわち、エントリー0の世代番号は2になる。
図15(e)は、図15(d)の状態で開始LBA=0x0E00から転送数=0x100セクターのリードコマンドDが受信された時のシーケンシャル性判定テーブルの状態を示す。リードコマンドDの開始LBAはエントリー0の最終LBA、及び、エントリー1の最終LBAのいずれとも連続ではない。この時、リードコマンドDの情報は、エントリー2に登録される。エントリー2の開始LBAは0x0E00、最終LBAは0x0EFFとなる。エントリー2の累積数は、登録されている累積値(0x000)に、リードコマンドDの転送数(0x100)を足したもので、0x100になる。新規にコマンド情報が登録されたエントリーの世代番号は1になる。すなわち、エントリー2の世代番号は1になる。新規にコマンド情報が登録されたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、1ずつインクリメントされる。すなわち、エントリー0の世代番号は3になる。エントリー1の世代番号は2になる。
図15(f)は、図15(e)の状態で開始LBA=0x1300から転送数=0x100セクターのリードコマンドEが受信された時のシーケンシャル性判定テーブルの状態を示す。リードコマンドEの開始LBAはエントリー0の最終LBAと連続である。また、リードコマンドEの最終LBAはエントリー1の開始LBAと連続である。この時、エントリー0の情報、エントリー1の情報、リードコマンドEの情報はマージされて、開始LBAが小さいほうのエントリー、すなわちエントリー0に登録される。エントリー0の開始LBAは0x1000のままである。エントリー0の最終LBAはエントリー1の最終LBAであった0x15FFとなる。エントリー0の累積数は、登録されている累積値(0x300)に、エントリー1の累積数(0x200)及びコマンドEの転送数(0x100)を足したもので、0x600になる。マージされたエントリーのうち、開始LBAが小さいほうのエントリーの世代番号は1になる。すなわち、エントリー0の世代番号は1になる。マージされたエントリーのうち、開始LBAが大きいほうのエントリーはゼロに初期化される。すなわち、エントリー1は初期化される。マージされたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、小さい世代番号を有するエントリーから順に、2、3、・・・と割り当てられる。すなわち、エントリー2の世代番号は1から2に書き換えられる。
図15(g)は、図15(f)の状態で開始LBA=0x0F00から転送数=0x100セクターのリードコマンドFが受信された時のシーケンシャル性判定テーブルの状態を示す。リードコマンドFの開始LBAはエントリー2の最終LBAと連続である。また、リードコマンドFの最終LBAはエントリー0の開始LBAと連続である。この時、エントリー0の情報、エントリー2の情報、リードコマンドFの情報はマージされて、開始LBAが小さいほうのエントリー、すなわちエントリー2に登録される。エントリー2の開始LBAは0x0E00のままである。エントリー2の最終LBAはエントリー0の最終LBAであった0x15FFとなる。エントリー2の累積数は、登録されている累積値(0x100)に、エントリー0の累積数(0x600)及びコマンドFの転送数(0x100)を足したもので、0x800になる。マージされたエントリーのうち、開始LBAが小さいエントリーの世代番号は1になる。すなわち、エントリー2の世代番号は1になる。マージされたエントリーのうち、開始LBAが大きいほうのエントリーはゼロに初期化される。すなわち、エントリー0は初期化される。
ここで、エントリー2の累積数がシーケンシャル性判定閾値(0x700)以上となったので、シーケンシャル性判定フラグがセットされる。
いずれのエントリーの累積数もゼロではない時に受信したコマンドのLBA範囲が、いずれのエントリーの開始LBA又は最終LBAとも不連続である場合には、世代番号が最大のエントリーが初期化される。なお、この場合は累積数が最小のエントリーを初期化するようにしてもよい。そして、初期化されたエントリーに、受信したコマンドの情報が登録される。
次に、図16を参照して、コントローラ25によるシーケンシャル性判定テーブルの更新手順を説明する。
リードコマンドを受信すると(S300)、コントローラ25は、累積数がゼロではなく、かつ、受信したコマンドのLBA範囲と連続する開始LBA又は最終LBAを有するエントリーがあるか否かを確認する(S301)。
LBAが連続するエントリーがない場合(S301:No)、コントローラ25は、累積数がゼロのエントリーがあるか否かを確認する(S302)。累積数がゼロのエントリーがある場合(S302:Yes)、コントローラ25は、累積数がゼロであるエントリーのうち、エントリー番号が最小のエントリーにコマンド情報を登録する(S303)。この時、当該エントリーの世代番号は1にされる。その後、後述のS307が行われる。累積数がゼロのエントリーがない場合(S302:No)、コントローラ25は、世代番号が最大であるエントリー、又は、累積数が最小であるエントリーを初期化する(S304)。その後、前述のS303が行われる。
LBAが連続するエントリーがある場合(S301:Yes)、コントローラ25は、マージ可能なエントリーがあるか否かを確認する(S305)。すなわち、受信したコマンドの開始LBAと連続する最終LBAを有するエントリー(第1のエントリー)と、受信したコマンドの最終LBAと連続する開始LBAを有するエントリー(第2のエントリー)、の両方があるか否かを確認する。
マージ可能なエントリーがない場合、すなわち、第1のエントリー又は第2のエントリーのうち、いずれか一方のみが存在する場合(S305:No)、コントローラ25は、第1のエントリー又は第2のエントリーに、コマンド情報を登録する(S306)。具体的には、第1のエントリーにコマンド情報が登録される第1の場合には、第1のエントリーの開始LBAは変更されず、第1のエントリーの最終LBAには受信したコマンドの最終LBAが登録される。また、第2のエントリーにコマンド情報が登録される第2の場合には、第2のエントリーの開始LBAには受信したコマンドの開始LBAが登録され、第2のエントリーの最終LBAは変更されない。第1の場合、及び、第2の場合のいずれにおいても、当該エントリーの累積数は受信したコマンドの転送数が加えられ、当該エントリーの世代番号は1にされる。また、登録対象ではないエントリーのうち、累積数がゼロではないエントリーの世代番号は1ずつインクリメントされる(S307)。その後、後述のS310が行われる。
マージ可能なエントリーがある場合、すなわち、第1のエントリー及び第2のエントリーの両方が存在する場合(S305:Yes)、コントローラ25は、第1のエントリーに、第2のエントリーの情報、及び、コマンド情報をマージして登録する(S308)。すなわち、第1のエントリーの開始LBAは変更されない。第1のエントリーの最終LBAには、第2のエントリーの最終LBAが登録される。第1のエントリーの累積数には、第1のエントリーの累積数と第2のエントリーの累積数の合計に、受信したコマンドの転送数を加えた値が登録される。第1のエントリーの世代番号は1にされる。また、マージ対象ではないエントリーのうち、累積数がゼロではないエントリーの世代番号は、世代番号の小さい順に2、3、・・・と再割り当てされる(S309)。
なお、マージ可能なエントリーがない場合(S305:No)、マージ可能なエントリーがある場合(S305:Yes)のいずれの場合においても、第1のエントリーが2つ以上存在する場合、又は、第2のエントリーが2つ以上存在する場合がある。この場合、コントローラ25は、例えば2つ以上存在する第1のエントリー(又は2つ以上存在する第2のエントリー)のうち、いずれか1つを選択し、上記の処理を行う。
次にコントローラ25は、いずれかのエントリーの累積数がシーケンシャル性判定閾値以上となったか否かを確認する(S310)。コントローラ25は、該当するエントリーが無い場合(S310:No)、処理を終了し、該当するエントリーがある場合(S310:Yes)、シーケンシャル性判定フラグをセットする(S311)。この後、処理が終了される。その結果、シーケンシャル性判定フラグがセットされたストリーム(及びそのストリームに属するリードコマンド群)は、シーケンシャル性があると判定される。
あるいは、ホストがリードコマンドにストリームIDを付加しない状況であっても、メモリシステムがリードコマンドのアドレスの連続性を判定することで、リードコマンドを1以上のシーケンシャルなストリームのいずれかへと分類してもよい。例えば、実施形態の第2の変形例として、図7のS3において図14、図16、図17に示すアルゴリズムを用いることができる。図17は、実施形態の第2の変形例におけるシーケンシャル性を判定する動作を説明する図である。図14は、実施形態の第1の変形例におけるリードコマンドのシーケンシャル性を判定するためのアルゴリズムを説明する模式図であるが、第2の変形例にも流用可能である。図16は、実施形態の第1の変形例におけるシーケンシャル性判定テーブルの更新手順を説明するフローチャートであるが、第2の変形例にも流用可能である。
第2の変形例においても、第1の変形例と同様、ホストI/F29から入力される開始LBAや転送数を用いて、コントローラ25がシーケンシャル性を判定する。シーケンシャル性の判定に用いられるアルゴリズムは、第1の変形例と同様である。すなわち、基準開始LBAからシーケンシャルにつながったデータの累積数がシーケンシャル性判定閾値以上になると、コントローラ25は、このデータのシーケンシャル性が高いと判定する。第2の変形例においては、コントローラ25は、シーケンシャル性が高いと判定されたリードコマンドに、ストリームIDを付加する。
第1の変形例においては、1つのストリームIDに対し、1つのシーケンシャル性判定テーブルが存在した。これに対し第2の変形例においては、コントローラ25に実装される1つのシーケンシャル性判定テーブルによって、リードコマンドのシーケンシャル性を判定する。
図17(a)〜図17(h)は、第2の変形例におけるシーケンシャル性を判定する動作の一例を説明する図である。シーケンシャル性判定テーブルは、複数のエントリーを有する。第2の変形例においては、シーケンシャル性判定テーブルは、3つのエントリーを有する。1つのエントリーは、開始LBAと、最終LBAと、累積数と、世代番号と、ストリームIDと、を含む。シーケンシャル性判定テーブルは、任意のタイミングでコントローラ25によって初期化されてもよい。以下の説明ではシーケンシャル性判定閾値は0x700が設定されているものとする。
図17(a)は、シーケンシャル性判定テーブルが初期化された状態を示す。図では省略してあるが、すべてのエントリーの開始LBA、最終LBA、累積数、世代番号、ストリームID、はゼロである。
図17(b)〜図17(f)は、図15(b)〜図15(f)とそれぞれ同様であるので、ここでは説明を省略する。
図17(g)は、図17(f)の状態で開始LBA=0x2000から転送数=0x200セクターのリードコマンドFが発行された時のシーケンシャル性判定テーブルの状態を示す。リードコマンドFの開始LBAはエントリー0の最終LBA、及び、エントリー2の最終LBAと連続ではない。この時、リードコマンドFの情報は、エントリー1に登録される。エントリー1の開始LBAは0x2000、最終LBAは0x21FFとなる。エントリー1の累積数は、登録されている累積値(0x000)に、リードコマンドFの転送数(0x200)を足したもので、0x200になる。新規にコマンド情報が登録されたエントリーの世代番号は1になる。すなわち、エントリー1の世代番号は1になる。新規にコマンド情報が登録されたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、1ずつインクリメントされる。すなわち、エントリー0の世代番号は2になり、エントリー2の世代番号は3になる。
図17(h)は、図17(g)の状態で開始LBA=0x0F00から転送数=0x100セクターのリードコマンドGが発行された時のシーケンシャル性判定テーブルの状態を示す。リードコマンドGの開始LBAはエントリー2の最終LBAと連続である。また、リードコマンドFの最終LBAはエントリー0の開始LBAと連続である。この時、エントリー0の情報、エントリー2の情報、コマンドFの情報はマージされて、開始LBAが小さいほうのエントリー、すなわちエントリー2に登録される。エントリー2の開始LBAは0x0E00のままである。エントリー2の最終LBAはエントリー0の最終LBAであった0x15FFとなる。エントリー2の累積数は、登録されている累積値(0x100)に、エントリー0の累積数(0x600)及びコマンドFの転送数(0x100)を足したもので、0x800になる。マージされたエントリーのうち、開始LBAが小さいエントリーの世代番号は1になる。すなわち、エントリー2の世代番号は1になる。マージされたエントリーのうち、開始LBAが大きいほうのエントリーはゼロに初期化される。すなわち、エントリー0は初期化される。マージされたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、小さい世代番号を有するエントリーから順に、2、3、・・・と割り当てられる。すなわち、エントリー1の世代番号は1から2に書き換えられる。
ここで、エントリー2の累積数がシーケンシャル性判定閾値(0x700)以上となったので、エントリー2にストリームIDが割り当てられる。割り当てられるストリームIDは任意であるが、ここでは1が割り当てられている。ストリームIDが割り当てられたエントリーに属するデータには、当該ストリームIDが割り当てられる。
累積数がシーケンシャル性判定閾値未満であるエントリーに属するデータ(ランダムライトデータ)には、ストリームIDが割り当てられない。すなわち、第2の変形例のコントローラ25は、受信した複数のリードコマンドから、ストリームデータのリードコマンドとランダムリードデータのリードコマンドとを分離する。
エントリー1についても、その後のリードコマンドの受信により、累積数がシーケンシャル性判定閾値以上となれば、別なストリームID(例えば2)が割り当てられる。すなわち、第2の変形例のコントローラ25は、ホストがリードコマンドにストリームIDを付加しなくとも、受信した複数のリードコマンドから、複数のストリームデータのリードコマンドを抽出し、それぞれに異なるストリームIDを割り当てることができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1 情報処理システム、20 メモリシステム、21 不揮発性メモリ、47 ADL、48 BDL、49 XDL、50 メモリセルアレイ。
Claims (13)
- 複数のページを含むメモリセルアレイと、
入出力バッファと、
それぞれが前記メモリセルアレイ及び前記入出力バッファの間に電気的に接続された1以上の中間バッファと、
センス動作指示と前記1以上の中間バッファにおける第1の中間バッファの指定とを含む第1のコマンドに応じて、前記複数のページにおける第1のページからセンス動作で読み出されたデータを前記第1の中間バッファに格納する制御回路と、
を備えた不揮発性メモリ。 - 前記1以上の中間バッファは、前記第1の中間バッファと異なる第2の中間バッファをさらに含み、
前記制御回路は、センス動作指示と前記第2の中間バッファの指定とを含む第2のコマンドに応じて、前記複数のページにおける第2のページからセンス動作で読み出されたデータを前記第2の中間バッファに格納する
請求項1に記載の不揮発性メモリ。 - 前記制御回路は、センス動作指示を含み前記中間バッファの指定を含まない第3のコマンドに応じて、前記複数のページにおける第3のページからセンス動作で読み出されたデータを前記入出力バッファに格納し、出力指示を含む第4のコマンドに応じて、前記入出力バッファに格納されたデータを出力する
請求項1に記載の不揮発性メモリ。 - 前記制御回路は、第1の期間に、前記第1のコマンドに応じて、前記第1のページからセンス動作で読み出されたデータを前記第1の中間バッファへ格納し、前記第1の期間より後の第2の期間に、転送指示と前記第1の中間バッファの指定とを含む第5のコマンドに応じて、前記第1の中間バッファに格納されたデータを前記入出力バッファへ転送して格納し、前記第2の期間より後の第3の期間に、出力指示を含む第6のコマンドに応じて、前記入出力バッファに格納されたデータを出力する
請求項1に記載の不揮発性メモリ。 - 前記制御回路は、第1の期間に、前記第1のコマンドに応じて、前記第1のページからセンス動作で読み出されたデータを前記第1の中間バッファへ格納し、前記第1の期間より後の第2の期間に、前記第2のコマンドに応じて、前記第2のページからセンス動作で読み出されたデータを前記第2の中間バッファへ格納し、前記第1の期間より後の第3の期間に、転送指示と前記第1の中間バッファの指定とを含む第5のコマンドに応じて、前記第1の中間バッファに格納されたデータを前記入出力バッファへ転送して格納し、前記第3の期間より後の第4の期間に、出力指示を含む第6のコマンドに応じて、前記入出力バッファに格納されたデータを出力し、前記第2の期間より後の第5の期間に、転送指示と前記第2の中間バッファの指定とを含む第7のコマンドに応じて、前記第2の中間バッファに格納されたデータを前記入出力バッファへ転送して格納し、前記第5の期間より後の第6の期間に、出力指示を含む第8のコマンドに応じて、前記入出力バッファに格納されたデータを出力する
請求項2に記載の不揮発性メモリ。 - 前記制御回路は、前記第6の期間より後の第7の期間に、転送指示と前記第1の中間バッファの指定とを含む第9のコマンドに応じて、前記第1の中間バッファに格納されたデータを前記入出力バッファへ転送して格納し、第7の期間より後の第8の期間に、出力指示を含む第10のコマンドに応じて、前記入出力バッファに格納されたデータを出力する
請求項5に記載の不揮発性メモリ。 - 前記1以上の中間バッファは、前記複数のページのそれぞれへのプログラム動作において使用されるバッファである
請求項1に記載の不揮発性メモリ。 - 複数のページを含むメモリセルアレイと、
入出力バッファと、
それぞれが前記メモリセルアレイ及び前記入出力バッファの間に電気的に接続された1以上の中間バッファと、
転送指示と前記1以上の中間バッファにおける第1の中間バッファの指定とを含む第1のコマンドに応じて、前記第1の中間バッファに格納されたデータを前記入出力バッファへ転送して格納し、転送指示と前記1以上の中間バッファにおける前記第1の中間バッファと異なる第2の中間バッファの指定とを含む第2のコマンドに応じて、前記第2の中間バッファに格納されたデータを前記入出力バッファへ転送して格納する制御回路と、
を備えた不揮発性メモリ。 - 前記1以上の中間バッファのそれぞれは、前記複数のページのそれぞれへのプログラム動作において使用されるバッファである
請求項8に記載の不揮発性メモリ。 - 不揮発性メモリと、
前記不揮発性メモリを制御するコントローラと、
を備え、
前記不揮発性メモリは、
複数のページを含むメモリセルアレイと、
入出力バッファと、
それぞれが前記メモリセルアレイ及び前記入出力バッファの間に電気的に接続された1以上の中間バッファと、
センス動作指示と前記1以上の中間バッファにおける第1の中間バッファの指定とを含む第1のコマンドに応じて、前記複数のページにおける第1のページからセンス動作で読み出されたデータを前記第1の中間バッファに格納する制御回路と、
を有する
メモリシステム。 - 前記1以上の中間バッファは、前記第1の中間バッファと異なる第2の中間バッファをさらに含み、
前記コントローラは、第1のスレッドに前記第1の中間バッファを、第2のスレッドに前記第2の中間バッファをそれぞれ対応させ、ホストからのリードコマンド又は内部処理に関するリード命令に前記第1のスレッドを割り当てる場合、前記第1のコマンドを発行して前記不揮発性メモリへ供給し、前記リードコマンド又は前記リード命令に前記第2のスレッドを割り当てる場合、センス動作指示と前記第2の中間バッファの指定とを含む第2のコマンドを発行して前記不揮発性メモリへ供給する
請求項10に記載のメモリシステム。 - 前記コントローラは、前記リードコマンド又は前記リード命令で要求されるデータが前記第1の中間バッファ又は前記第2の中間バッファのいずれにキャッシュされているか判断し、前記第1の中間バッファにキャッシュされている場合に、前記第1の中間バッファの指定と転送指示とを含む第3のコマンドを発行して前記不揮発性メモリへ供給し、前記第2の中間バッファにキャッシュされている場合に、前記第2の中間バッファの指定と転送指示とを含む第4のコマンドを発行して前記不揮発性メモリへ供給する
請求項11に記載のメモリシステム。 - 前記コントローラは、前記リードコマンド又は前記リード命令のシーケンシャル性が高いか否かを判断し、前記リードコマンド又は前記リード命令のシーケンシャル性が高い場合に、前記リードコマンド又は前記リード命令で要求されるデータが前記第1の中間バッファ又は前記第2の中間バッファのいずれにキャッシュされているか判断する
請求項12に記載のメモリシステム。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018174120A JP2020047335A (ja) | 2018-09-18 | 2018-09-18 | 不揮発性メモリ及びメモリシステム |
US16/560,200 US11068167B2 (en) | 2018-09-18 | 2019-09-04 | Nonvolatile memory including intermediate buffer and input/output buffer and memory system including the nonvolatile memory |
US17/332,117 US11543969B2 (en) | 2018-09-18 | 2021-05-27 | Nonvolatile memory including intermediate buffer and input/output buffer and memory system including the nonvolatile memory |
US17/982,840 US11941251B2 (en) | 2018-09-18 | 2022-11-08 | Nonvolatile memory including intermediate buffer and input/output buffer and memory system including the nonvolatile memory |
US18/431,159 US20240176490A1 (en) | 2018-09-18 | 2024-02-02 | Nonvolatile memory including intermediate buffer and input/output buffer and memory system including the nonvolatile memory |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018174120A JP2020047335A (ja) | 2018-09-18 | 2018-09-18 | 不揮発性メモリ及びメモリシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2020047335A true JP2020047335A (ja) | 2020-03-26 |
Family
ID=69774204
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018174120A Pending JP2020047335A (ja) | 2018-09-18 | 2018-09-18 | 不揮発性メモリ及びメモリシステム |
Country Status (2)
Country | Link |
---|---|
US (4) | US11068167B2 (ja) |
JP (1) | JP2020047335A (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11062780B1 (en) * | 2019-12-30 | 2021-07-13 | SanDiskTechnologies LLC | System and method of reading two pages in a nonvolatile memory |
US11392327B2 (en) * | 2020-09-09 | 2022-07-19 | Western Digital Technologies, Inc. | Local data compaction for integrated memory assembly |
KR20220067776A (ko) * | 2020-11-18 | 2022-05-25 | 에스케이하이닉스 주식회사 | 컨트롤러 및 컨트롤러의 동작방법 |
US11966631B2 (en) * | 2021-04-16 | 2024-04-23 | Western Digital Technologies, Inc. | Command queue order adjustment in a data storage device |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4896011B2 (ja) | 2005-03-31 | 2012-03-14 | スパンション エルエルシー | 半導体装置及びその制御方法 |
US7206230B2 (en) | 2005-04-01 | 2007-04-17 | Sandisk Corporation | Use of data latches in cache operations of non-volatile memories |
KR102162804B1 (ko) | 2014-01-15 | 2020-10-07 | 에스케이하이닉스 주식회사 | 반도체 메모리 장치 및 이의 동작 방법 |
JP2019057147A (ja) * | 2017-09-21 | 2019-04-11 | 東芝メモリ株式会社 | メモリシステム |
KR102419895B1 (ko) * | 2018-02-09 | 2022-07-12 | 삼성전자주식회사 | 비휘발성 메모리 장치 및 이의 읽기 방법 |
-
2018
- 2018-09-18 JP JP2018174120A patent/JP2020047335A/ja active Pending
-
2019
- 2019-09-04 US US16/560,200 patent/US11068167B2/en active Active
-
2021
- 2021-05-27 US US17/332,117 patent/US11543969B2/en active Active
-
2022
- 2022-11-08 US US17/982,840 patent/US11941251B2/en active Active
-
2024
- 2024-02-02 US US18/431,159 patent/US20240176490A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US11543969B2 (en) | 2023-01-03 |
US11068167B2 (en) | 2021-07-20 |
US20200089414A1 (en) | 2020-03-19 |
US11941251B2 (en) | 2024-03-26 |
US20230056583A1 (en) | 2023-02-23 |
US20210286524A1 (en) | 2021-09-16 |
US20240176490A1 (en) | 2024-05-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11150837B2 (en) | Method, device and system for processing sequential groups of buffered write data | |
TWI770218B (zh) | 記憶體系統及其操作方法 | |
US20160179422A1 (en) | Method of performing garbage collection and raid storage system adopting the same | |
KR102094334B1 (ko) | 비휘발성 멀티-레벨 셀 메모리 시스템 및 상기 시스템에서의 적응적 데이터 백업 방법 | |
US11941251B2 (en) | Nonvolatile memory including intermediate buffer and input/output buffer and memory system including the nonvolatile memory | |
US20160196216A1 (en) | Mapping table managing method and associated storage system | |
US20130166825A1 (en) | Method Of Controlling Non-Volatile Memory, Non-Volatile Memory Controller Therefor, And Memory System Including The Same | |
US20150347291A1 (en) | Flash memory based storage system and operating method | |
US11086568B2 (en) | Memory system for writing fractional data into nonvolatile memory | |
US10606758B2 (en) | Memory system and method of operating the same | |
US20190121727A1 (en) | Memory system and method for operating the same | |
US11727992B2 (en) | Semiconductor memory device | |
US10296233B2 (en) | Method of managing message transmission flow and storage device using the method | |
US11842073B2 (en) | Memory controller and operating method thereof | |
US11263148B2 (en) | Mapping host logical address to target address that is selected from combination of first memory's physical addresses and second memory's virtual addresses | |
US9940030B2 (en) | Memory system and method of operating the same | |
CN113377281A (zh) | 存储装置、存储器装置及其操作方法 | |
KR102303653B1 (ko) | 메모리 장치 및 이를 포함하는 메모리 시스템 | |
CN110851382B (zh) | 存储控制器及其操作方法和具有存储控制器的存储器系统 | |
KR20190073125A (ko) | 메모리 시스템 및 이의 동작 방법 | |
KR20160144574A (ko) | 불휘발성 메모리 모듈 및 그것의 데이터 쓰기 방법 | |
US20240177748A1 (en) | Semiconductor device and method of operating the same capable of preventing malfunction during read operation | |
US20240028204A1 (en) | Memory controller and method of operating the same | |
US10769060B2 (en) | Storage system and method of operating the same | |
JP2023108843A (ja) | メモリシステム |