IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

<>
  • 特許-メモリシステム 図1
  • 特許-メモリシステム 図2
  • 特許-メモリシステム 図3
  • 特許-メモリシステム 図4
  • 特許-メモリシステム 図5
  • 特許-メモリシステム 図6
  • 特許-メモリシステム 図7
  • 特許-メモリシステム 図8
  • 特許-メモリシステム 図9
  • 特許-メモリシステム 図10
  • 特許-メモリシステム 図11
  • 特許-メモリシステム 図12
  • 特許-メモリシステム 図13
  • 特許-メモリシステム 図14
  • 特許-メモリシステム 図15
  • 特許-メモリシステム 図16
  • 特許-メモリシステム 図17
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-07
(45)【発行日】2024-06-17
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
   G06F 12/00 20060101AFI20240610BHJP
   G06F 3/06 20060101ALI20240610BHJP
【FI】
G06F12/00 560B
G06F12/00 597U
G06F3/06 301S
【請求項の数】 7
(21)【出願番号】P 2020153869
(22)【出願日】2020-09-14
(65)【公開番号】P2022047855
(43)【公開日】2022-03-25
【審査請求日】2023-03-09
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】遠藤 静香
【審査官】北村 学
(56)【参考文献】
【文献】特開2018-120305(JP,A)
【文献】米国特許第09159422(US,B1)
【文献】特開2013-161447(JP,A)
【文献】国際公開第2017/126091(WO,A1)
【文献】米国特許出願公開第2017/0123895(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
G06F 3/06
(57)【特許請求の範囲】
【請求項1】
第1サイズの単位でデータがリードされる第1記憶領域と、前記第1サイズのデータを格納可能な第1データラッチと、を含む第1プレーンと、
前記第1サイズの単位でデータがリードされる第2記憶領域と、前記第1サイズのデータを格納可能な第2データラッチと、を含む第2プレーンと、
を含むメモリチップと、
それぞれが前記第1サイズのデータを格納可能な複数のバッファと、
誤り訂正回路を含むコントローラと、
を備え、
前記コントローラは、
前記第1サイズよりも小さい第2サイズの第1データが、前記第1記憶領域と前記第2記憶領域とに跨がって格納されている場合、
前記メモリチップに、前記第1記憶領域に格納されている前記第1データの第1断片を含む前記第1サイズのデータである第2データを前記第1データラッチに格納させ、
前記メモリチップに、前記第2記憶領域に格納されている前記第1データの第2断片を含む前記第1サイズのデータである第3データを前記第2データラッチに格納させ、
前記メモリチップに、前記第1データラッチに格納されている前記第2データを出力させて、前記メモリチップから出力された前記第2データを前記複数のバッファのうちの1つのバッファである第1バッファに格納し、
前記メモリチップに、前記第2データラッチに格納されている前記第3データを出力させて、前記メモリチップから出力された前記第3データを前記複数のバッファのうちの前記第1バッファと異なる1つのバッファである第2バッファに格納し、
前記第1バッファに格納されている前記第2データのうちの前記第1断片と、前記第2バッファに格納されている前記第3データのうちの前記第2断片と、を結合して第4データを生成し、
前記第4データを前記誤り訂正回路に入力する、
ように構成され
前記コントローラは、
前記第3データを前記第2バッファに格納した後、前記第2データを前記第1バッファに格納し、
前記第2データに含まれる前記第1断片が、前記第3データに含まれる前記第2断片よりも先に前記誤り訂正回路に入力されるように前記第4データを生成する、
メモリシステム。
【請求項2】
第1サイズの単位でデータがリードされる第1記憶領域と、前記第1サイズのデータを格納可能な第1データラッチと、を含む第1プレーンと、
前記第1サイズの単位でデータがリードされる第2記憶領域と、前記第1サイズのデータを格納可能な第2データラッチと、を含む第2プレーンと、
を含むメモリチップと、
それぞれが前記第1サイズのデータを格納可能な複数のバッファと、
誤り訂正回路を含むコントローラと、
を備え、
前記コントローラは、
前記第1サイズよりも小さい第2サイズの第1データが、前記第1記憶領域と前記第2記憶領域とに跨がって格納されている場合、
前記メモリチップに、前記第1記憶領域に格納されている前記第1データの第1断片を含む前記第1サイズのデータである第2データを前記第1データラッチに格納させ、
前記メモリチップに、前記第2記憶領域に格納されている前記第1データの第2断片を含む前記第1サイズのデータである第3データを前記第2データラッチに格納させ、
前記メモリチップに、前記第1データラッチに格納されている前記第2データを出力させて、前記メモリチップから出力された前記第2データを前記複数のバッファのうちの1つのバッファである第1バッファに格納し、
前記メモリチップに、前記第2データラッチに格納されている前記第3データを出力させて、前記メモリチップから出力された前記第3データを前記複数のバッファのうちの前記第1バッファと異なる1つのバッファである第2バッファに格納し、
前記第1バッファに格納されている前記第2データのうちの前記第1断片と、前記第2バッファに格納されている前記第3データのうちの前記第2断片と、を結合して第4データを生成し、
前記第4データを前記誤り訂正回路に入力する、
ように構成され、
前記コントローラは、
第1リードモードと第2リードモードとを含む複数のリードモードの何れでも動作することができ、
前記第1リードモードにおいては、前記メモリチップに、前記第1データラッチまたは前記第2データラッチから前記コントローラに前記第1サイズの単位でデータを出力させ、
前記第2リードモードにおいては、前記メモリチップに、前記第1データラッチまたは前記第2データラッチから前記コントローラに前記第2サイズの単位でデータを出力させる、
メモリシステム。
【請求項3】
前記第4データは前記第2サイズを有し、前記第2サイズは、前記誤り訂正回路による誤り訂正処理の単位である、
請求項1または請求項2に記載のメモリシステム。
【請求項4】
前記コントローラは、前記第1データラッチに格納されている前記第2データを出力させる第1コマンドセットを送信し、
前記メモリチップは、前記第1コマンドセットを受信すると、前記第2データの出力を開始し、前記第2データの出力が完了するまで何れのコマンドの入力も要すること無く前記第2データを出力し、
前記コントローラは、前記第2データラッチに格納されている前記第3データを出力させる第2コマンドセットを送信し、
前記メモリチップは、前記第2コマンドセットを受信すると、前記第3データの出力を開始し、前記第3データの出力が完了するまで何れのコマンドの入力も要すること無く前記第3データを出力する、
請求項1または請求項2に記載のメモリシステム。
【請求項5】
前記コントローラは、
第1リードモードと第2リードモードとを含む複数のリードモードの何れでも動作することができ、
前記第1リードモードにおいては、前記メモリチップに、前記第1サイズの単位でデータを出力させ、
前記第2リードモードにおいては、前記メモリチップに、前記第2サイズの単位でデータを出力させる、
請求項1に記載のメモリシステム。
【請求項6】
前記コントローラは、
リード対象に設定された前記第2サイズの第5データであって前記第1データと異なる前記第5データが前記第2データまたは前記第3データに含まれているか否かを判定し、
前記第5データが前記第2データまたは前記第3データに含まれていると判定された場合には前記第1リードモードを選択し、
前記第5データが前記第2データまたは前記第3データに含まれていないと判定された場合には前記第2リードモードを選択する、
請求項2または請求項5に記載のメモリシステム。
【請求項7】
前記コントローラは、前記第2リードモードにおいて、
前記メモリチップに、前記第1データラッチに格納されている前記第2データのうちの前記第1断片を出力させた後、
前記メモリチップに、前記第2データラッチに格納されている前記第3データのうちの前記第2断片を出力させ、
前記メモリチップから出力された前記第1断片と、前記メモリチップから出力された前記第2断片と、を結合して前記第2サイズを有する第6データを生成し、
前記第6データを前記誤り訂正回路に入力する、
請求項2または請求項5に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、メモリシステムに関する。
【背景技術】
【0002】
メモリセルアレイを備えたメモリチップと、メモリチップに対してデータの入出力を行うコントローラと、を備えたメモリシステムが知られている。このようなメモリシステムでは、メモリチップからコントローラへのデータの転送速度をできるだけ速くすることが要望されている。
【先行技術文献】
【特許文献】
【0003】
【文献】米国特許出願公開第2019/0050343号明細書
【文献】米国特許出願公開第2019/0196723号明細書
【文献】特開2011-95853号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
一つの実施形態は、メモリチップからメモリコントローラへのデータの転送速度を向上させることを目的とする。
【課題を解決するための手段】
【0005】
一つの実施形態によれば、メモリチップと、複数のバッファと、コントローラと、を備える。メモリチップは、第1プレーンと、第2プレーンと、を含む。第1プレーンは、第1サイズの単位でデータがリードされる第1記憶領域と、第1サイズのデータを格納可能な第1データラッチと、を含む。第2プレーンは、第1サイズの単位でデータがリードされる第2記憶領域と、第1サイズのデータを格納可能な第2データラッチと、を含む。複数のバッファのそれぞれは、第1サイズのデータを格納可能である。コントローラは、誤り訂正回路を含む。コントローラは、第1サイズよりも小さい第2サイズの第1データが、第1記憶領域と第2記憶領域とに跨がって格納されている場合、メモリチップに、第1記憶領域に格納されている第1データの第1断片を含む第1サイズのデータである第2データを第1データラッチに格納させる。そして、コントローラは、メモリチップに、第2記憶領域に格納されている第1データの第2断片を含む第1サイズのデータである第3データを第2データラッチに格納させる。そして、コントローラは、メモリチップに、第1データラッチに格納されている第2データを出力させて、メモリチップから出力された第2データを複数のバッファのうちの1つのバッファである第1バッファに格納する。そして、コントローラは、メモリチップに、第2データラッチに格納されている第3データを出力させて、メモリチップから出力された第3データを複数のバッファのうちの第1バッファと異なる1つのバッファである第2バッファに格納する。そして、コントローラは、第1バッファに格納されている第2データのうちの第1断片と、第2バッファに格納されている第3データのうちの第2断片と、を結合して第4データを生成し、第4データを誤り訂正回路に入力する。コントローラは、第3データを第2バッファに格納した後、第2データを第1バッファに格納し、第2データに含まれる前記第1断片が、第3データに含まれる第2断片よりも先に誤り訂正回路に入力されるように第4データを生成する。
【図面の簡単な説明】
【0006】
図1図1は、ホストに接続された実施形態のメモリシステムの構成例を示す図である。
図2図2は、実施形態のメモリチップの構成の一例を示す模式的な図である。
図3図3は、実施形態のブロックの回路構成を示す図である。
図4図4は、実施形態のデータコーディングとしきい値電圧分布の一例を示す図である。
図5図5は、実施形態のリード動作の際にNANDCとメモリチップとの間で送受信される信号の一例を示すタイミング図(タイミングチャート)である。
図6図6は、クラスタ転送モードおよびページ転送モードのそれぞれにおいて実施形態のIO信号線を転送される信号の違いを説明するための図である。
図7図7は、コードレートが可変の誤り訂正符号が採用された実施形態のメモリシステムにおいて、各プレーンに格納されるクラスタの位置を示す模式的な図である。
図8図8は、実施形態のRAMに格納される情報の一例を示す模式的な図である。
図9図9は、実施形態のNANDCの構成の一例を示す模式的な図である。
図10図10は、実施形態のメモリシステムにおけるリード動作の一例を示すフローチャートである。
図11図11は、対象のクラスタが格納されたデータラッチが存在しないと判定された場合に発行された第2リード指示を実行する動作の一例を示す図である。
図12図12は、対象のクラスタが格納されたデータラッチが存在すると判定された場合に発行された第2リード指示を実行する動作の一例を示す図である。
図13図13は、対象のクラスタが格納されたデータラッチが存在すると判定された場合に発行された第2リード指示を実行する動作の別の一例を示す図である。
図14図14は、対象のクラスタのリードモードをランダムリードに設定すると判定された場合に発行された第2リード指示を実行する動作の一例を示す図である。
図15図15は、実施形態の待ち合わせバッファ群の管理方法を説明するための図である。
図16図16は、実施形態の待ち合わせバッファ群およびランダムバッファの動作の一例を示すフローチャートである。
図17図17は、実施形態にかかる1つのメモリチップにおいて2つのプレーンを並列に動作させる例を説明するための図である。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、実施形態のメモリシステムを詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【0008】
(実施形態)
図1は、ホストに接続された実施形態のメモリシステムの構成例を示す図である。図1に示されるように、メモリシステム1は、ホスト2と接続可能である。ホスト2は、例えば、サーバ、パーソナルコンピュータ、またはモバイル型の端末のような情報処理装置である。メモリシステム1は、ホスト2の外部記憶装置として機能する。ホスト2は、メモリシステム1に対し、リード要求またはライト要求などの、アクセス要求を送信することができる。
【0009】
メモリシステム1は、1以上のメモリチップ21、およびメモリコントローラ10を備える。各メモリチップ21は、例えばNAND型フラッシュメモリであり、データを不揮発に記憶することができる。図1に示される例によれば、メモリシステム1は、8個のメモリチップ21を備える。この8個のメモリチップ21の群を、NANDメモリ20と表記することがある。なお、メモリシステム1に具備されるメモリチップ21の数は、8個に限定されない。
【0010】
メモリシステム1は、1以上のチャネルを備える。図1に示される例によれば、メモリシステム1は、チャネル0(Ch.0)およびチャネル1(Ch.1)の合計2個のチャネルを備える。そして、各チャネルの一端は、メモリコントローラ10に接続されている。
【0011】
また、チャネル0には、4個のメモリチップ21が共通接続されている。チャネル1にはチャネル0に接続されている4個のメモリチップ21とは異なる4個のメモリチップ21が共通接続されている。メモリコントローラ10は、チャネル0に接続された4個のメモリチップ21と、チャネル1に接続された4個のメモリチップ21と、を互いに独立に制御することができる。
【0012】
メモリコントローラ10は、ホスト2とNANDメモリ20との間のデータ転送を実行する。そのための構成として、メモリコントローラ10は、CPU(Central Processing Unit)11、ホストインタフェース(ホストI/F)12、RAM(Random Access Memory)13、および1以上のNANDコントローラ(NANDC)14を備える。ここでは一例として、メモリコントローラ10は、チャネルの数と同じ数、つまり2個、のNANDC14を備える。
【0013】
ホストI/F12は、例えばSATA(Serial Advanced Technology Attachment)規格、SAS(Serial Attached SCSI)規格、またはPCI(Peripheral Components Interconnect) Express(登録商標)規格に準拠したバスを介してホスト2と接続される回路である。ホストI/F12は、メモリコントローラ10とホスト2との通信を司る。
【0014】
RAM13は、種々の情報を一時的に記憶することができる。RAM13は、CPU11がメモリシステム1の制御を管理するために使用する各種管理情報およびファームウェアプログラムをロードする領域として使用され得る。また、RAM13は、キュー、バッファ、またはキャッシュとして使用され得る。なお、RAM13の種類は特定の種類に限定されない。メモリコントローラ10は、DRAM(Dynamic Random Access Memory)、SRAM(Static Random Access memory)、またはこれらの組み合わせを備え得る。また、メモリコントローラ10は、RAM13に替えて任意の揮発性メモリを備え得る。RAM13に格納される情報などについては後述される。
【0015】
2つのNANDC14の1つは、チャネル0に接続されており、2つのNANDC14の他の1つは、チャネル1に接続されている。
【0016】
各チャネルは、チップイネーブル信号線CEn、コマンドラッチイネーブル信号線CLE、アドレスラッチイネーブル信号線ALE、ライトイネーブル信号線WEn、一対のリードイネーブル信号線RE/REn、一対のストローブ信号線DQS/DQSn、IO信号線DQ[7:0]、およびレディービジー信号線R/Bn、などを含む信号線群である。チップイネーブル信号線CEnは、チップイネーブル信号CEnを転送する信号線である。チップイネーブル信号CEnは、アクセスの対象となるメモリチップCPをイネーブル状態とするための信号である。IO信号線DQ[7:0]は、コマンド、アドレス、データ、などが転送される信号線である。ここではIO信号線DQは8ビットのビット幅を有することとしているが、IO信号線DQのビット幅はこれに限定されない。コマンドラッチイネーブル信号線CLEは、コマンドラッチイネーブル信号CLEを転送する信号線である。コマンドラッチイネーブル信号CLEは、IO信号線DQ[7:0]を転送される信号がコマンドであることを示す。アドレスラッチイネーブル信号線ALEは、アドレスラッチイネーブル信号ALEを転送する信号線である。アドレスラッチイネーブル信号ALEは、IO信号線DQ[7:0]を転送される信号がアドレスであることを示す。ライトイネーブル信号線WEnは、ライトイネーブル信号WEnを転送する信号線である。ライトイネーブル信号WEnは、IO信号線DQ[7:0]で送信されるコマンドまたはアドレスを取り込むようにメモリチップCPに指示する。一対のリードイネーブル信号線RE/REnは、リードイネーブル信号RE/REnを転送する信号線の対である。リードイネーブル信号RE/REnは、メモリコントローラ10がメモリチップ21からデータを読み出す際にデータの出力タイミングを指示する。一対のストローブ信号線DQS/DQSnは、ストローブ信号DQS/DQSnを転送する信号線の対である。ストローブ信号DQS/DQSnは、メモリチップ21がメモリコントローラ10にデータを転送する際に、メモリチップ21がメモリコントローラ10にデータの取り込みタイミングを指示する。レディービジー信号線R/Bnは、レディービジー信号R/Bnを転送するための信号線である。レディービジー信号R/Bnは、メモリチップ21がコマンドの入力が可能なレディー状態であるかコマンドの入力が可能でないビジー状態であるかをメモリコントローラ10に示す。なお、各チャネルを構成する信号線はこれらに限定されない。
【0017】
各NANDC14は、自身に接続されたチャネルを介して接続された4個のメモリチップ21とメモリコントローラ10との通信を司る。具体的には、各NANDCは、4個のメモリチップ21のそれぞれに対し、コマンドセットを送信したり、データを送受信したりすることができる。各NANDC14が4個のメモリチップ21のそれぞれに対して送信するコマンドセットの例は後述される。
【0018】
CPU11は、ファームウェアプログラムに基づき、ホストI/F12、RAM13、およびNANDC14を制御することによって、ホスト2とNANDメモリ20との間のデータ転送を含むメモリシステム1の制御を実行する。
【0019】
例えば、ファームウェアプログラムは、メモリシステム1内の所定位置、一例では何れかのメモリチップ21、に予め格納されている。メモリシステム1のスタートアップ時に、CPU11は、当該ファームウェアプログラムをそのメモリチップ21からRAM13にロードする。そして、CPU11は、RAM13にロードされた当該ファームウェアプログラムに従って、メモリシステム1の制御を実行する。なお、ファームウェアプログラムが予め格納される位置は上記した例に限定されない。また、ファームウェアプログラムのロード先は上記した例に限定されない。
【0020】
なお、メモリコントローラ10は、例えばSoC(System-On-a-Chip)として構成され得る。メモリコントローラ10は、FPGA(field-programmable gate array)やASIC(application specific integrated circuit)として構成されてもよい。メモリコントローラ10は、複数のチップによって構成されてもよい。メモリコントローラ10の各機能は、ソフトウェア、ハードウェア、またはこれらの組み合わせによって実現され得る。
【0021】
図2は、実施形態のメモリチップ21の構成の一例を示す模式的な図である。本図に示される例によれば、メモリチップ21は、2つのサブアレイ23に分割されたメモリセルアレイ22と、2つのアクセス回路24と、2つのデータラッチ25と、を備える。各サブアレイ23は、2つのアクセス回路24のうちの1つおよび2つのデータラッチ25のうちの1つとともに1つの並列動作要素を構成している。つまり、メモリチップ21は、2つの並列動作要素を備えている。2つの並列動作要素は、互いに独立に動作することができる。各並列動作要素は、プレーン(Plane)と称される。各メモリチップ21内の各プレーンは、プレーン番号によって識別される。
【0022】
アクセス回路24およびデータラッチ25がプレーン毎に設けられていることにより、2つのプレーンのそれぞれにおいて、ライト、リード、およびイレースは各サブアレイ23に対し独立して実行されることが可能である。
【0023】
ここでは、各メモリチップ21が備える2つのプレーンのうちの1つを、プレーン番号0を用いて、プレーン#0(Plane #0)と表記する。また、各メモリチップ21が備える2つのプレーンのうちの他のプレーンを、プレーン番号1を用いて、プレーン#1(Plane #1)と表記する。
【0024】
なお、各メモリチップ21が備えるプレーンの数は2個に限定されない。
【0025】
各サブアレイ23は、複数のブロックBLKを備える。ブロックBLKは、イレースが実行される最小単位の記憶領域である。つまり、1つのブロックBLKに格納された全てのデータは、一括にイレースされる。
【0026】
アクセス回路24は、ロウデコーダ、カラムデコーダ、およびセンスアンプ等を含む。アクセス回路24は、自身と同じプレーンに属するサブアレイ23に対し、ライト、リード、およびイレースを実行することができる。
【0027】
なお、メモリコントローラ10から送られてくるデータをアクセス回路24がサブアレイ23にライトする動作を、ライト動作と表記する。また、アクセス回路24がサブアレイ23からデータをリードしてメモリコントローラ10に送る動作を、リード動作と表記する。また、アクセス回路24がサブアレイ23内のデータをイレースする動作を、イレース動作と表記する。
【0028】
データラッチ25は、自身と同じプレーンに属するサブアレイ23にライトされるデータおよび自身と同じサブアレイ23からリードされたデータが一時的に格納される記憶素子群である。各プレーンにおいて、アクセス回路24は、メモリコントローラ10から送られてきてデータラッチ25に格納されたライト対象のデータをサブアレイ23にライトしたり、サブアレイ23からリードしたデータをデータラッチ25に格納したりする。データラッチ25に格納された、サブアレイ23からリードされたデータは、その後メモリコントローラ10から受信する所定のコマンドセット(後述されるデータアウトコマンドセット)に従ってメモリコントローラ10に転送される。
【0029】
リード動作のうちの、サブアレイ23からデータラッチ25にデータを読み出す処理を、センス処理と表記する。また、リード動作のうちのデータラッチ25からメモリコントローラ10にデータを転送する処理を、データアウト処理と表記する。
【0030】
図3は、実施形態のブロックBLKの回路構成を示す図である。なお、各ブロックBLKは、同一の構成を有している。ブロックBLKは、例えば4つのストリングユニットSU0~SU3を有する。各ストリングユニットSUは、複数のNANDストリング26を含む。
【0031】
NANDストリング26の各々は、例えば14個のメモリセルトランジスタMT(MT0~MT13)および選択トランジスタST1、ST2を含んでいる。メモリセルトランジスタMTは、制御ゲートと電荷蓄積層とを備え、データを不揮発に保持する。そして14個のメモリセルトランジスタMT(MT0~MT13)は、選択トランジスタST1のソースと選択トランジスタST2のドレインとの間に直列接続されている。なお、メモリセルトランジスタMTは、電荷蓄積層に絶縁膜を用いたMONOS型であってもよいし、電荷蓄積層に導電膜を用いたFG型であってもよい。さらに、NANDストリング26内のメモリセルトランジスタMTの個数は14個に限定されない。
【0032】
ストリングユニットSU0~SU3の各々における選択トランジスタST1のゲートは、それぞれ選択ゲート線SGD0~SGD3に接続される。これに対してストリングユニットSU0~SU3の各々における選択トランジスタST2のゲートは、例えば選択ゲート線SGSに共通接続される。ストリングユニットSU0~SU3の各々における選択トランジスタST2のゲートは、ストリングユニットSU毎に異なる選択ゲート線SGS0~SGS3に接続されてもよい。同一のブロックBLK内にあるメモリセルトランジスタMT0~MT13の制御ゲートは、それぞれワード線WL0~WL13に共通接続される。
【0033】
ストリングユニットSU内にある各NANDストリング26の選択トランジスタST1のドレインは、それぞれ異なるビット線BL(BL0~BL(L-1)、但しLは2以上の自然数)に接続される。また、ビット線BLは、複数のブロックBLK間で各ストリングユニットSU内にある1つのNANDストリング26を共通に接続する。更に、各選択トランジスタST2のソースは、ソース線SLに共通に接続されている。
【0034】
つまりストリングユニットSUは、異なるビット線BLに接続され、且つ同一の選択ゲート線SGDに接続されたNANDストリング26の集合である。またブロックBLKは、ワード線WLを共通にする複数のストリングユニットSUの集合である。そしてメモリセルアレイ22は、ビット線BLを共通にする複数のブロックBLKの集合である。
【0035】
前述されたように、データのイレースは、ブロックBLK単位で実行される。
【0036】
また、ライト動作およびリード動作(具体的にはセンス処理)は、1つのストリングユニットSUにおける1つのワード線WLに接続されたメモリセルトランジスタMTに対して、一括して行われる。以下、ライト動作およびリード動作(具体的にはセンス処理)の際、一括して選択されるメモリセルトランジスタMTの群を「メモリセルグループMCG」と呼ぶ。そして、1つのメモリセルグループMCGに含まれるメモリセルトランジスタMTのそれぞれにライトされる、あるいはリード(換言すると、センス)される1ビットのデータの集まりを「ページ」と呼ぶ。
【0037】
各メモリセルトランジスタMTに複数ビットの値を格納可能に構成される場合がある。例えば、各メモリセルトランジスタMTがn(n≧2)ビットの値を格納可能な場合、ワード線WL(メモリセルグループMCG)当たりの記憶容量はnページ分のサイズに等しくなる。ここでは一例として、各メモリセルトランジスタMTに3ビットの値が格納される方式について説明する。この方式によれば、各ワード線に3ページ分のデータが保持される。
【0038】
図4は、実施形態のデータコーディングとしきい値電圧分布の一例を示す図である。横軸はメモリセルトランジスタMTのしきい値電圧を示している。図4に示された8個のローブは、しきい値電圧分布を模式的に表したものである。8つのしきい値電圧分布は、それぞれしきい値電圧領域であり、ステート、とも表記される。8つのステートは、3ビットのデータ値に対応する。本図の例によれば、Erステートは“111”のデータ値に対応し、Aステートは“110”のデータ値に対応し、Bステートは“100”のデータ値に対応し、Cステートは“000”のデータ値に対応し、Dステートは“010”のデータ値に対応し、Eステートは“011”のデータ値に対応し、Fステートは“001”のデータ値に対応し、Gステートは“101”のデータ値に対応する。各データ値の先頭の桁をMSB(Most Significant Bit)とする。また、各データ値の末尾の桁をLSB(Least Significant Bit)とする。なお、ステートとデータ値との対応関係はこれに限定されない。
【0039】
各メモリセルトランジスタMTのしきい値電圧は、8つのステートのうちの何れかに属するように制御される。各メモリセルトランジスタMTのしきい値電圧は、イレース動作によってErステートに設定され、ライト動作によってAステート~Gステートのうちのデータ値に応じたステートに設定される。
【0040】
また、センス処理においては、しきい値電圧といくつかの判定電圧との比較によって、各メモリセルトランジスタMTのしきい値電圧が属するステートが特定される。そして、特定されたステートに応じたデータ値が読み出される。図4のVra、Vrb、Vrc、Vrd、Vre、Vrf、およびVrgの組み合わせは、判定電圧の一例である。
【0041】
1つのワード線WL(メモリセルグループMCG)に記憶される3つのページのデータのうちのLSBの集合を、ロアーページと表記する。3つのページのデータのうちのMSBの集合を、アッパーページと表記する。3つのページのデータのうちの、LSBとMSBとの間のビットの集合を、ミドルページと表記する。
【0042】
なお、実施形態のデータコーディングは上記された例に限定されない。また、各メモリセルトランジスタMTに格納されるデータのサイズは3ビットに限定されない。
【0043】
図5は、実施形態のリード動作の際にNANDC14と当該NANDC14に接続されたメモリチップ21との間で送受信される信号の一例を示すタイミング図(タイミングチャート)である。なお、本図では、NANDC14とメモリチップ21とを接続するチャネルを構成する信号線群のうちの、一対のリードイネーブル信号線RE/REn、一対のストローブ信号DQS/DQSn、IO信号線DQ[7:0]、およびレディービジー信号線R/Bnの各信号線の状態が描画されている。
【0044】
NANDC14は、まず、ページ指定コマンドC0、リードコマンドC1、アドレス情報ADD、およびセンス開始コマンドC2をこの順番でIO信号線DQ[7:0]を介して送信する。これによって、センス処理の対象のページと、センス処理の開始と、が指示される。ページ指定コマンドC0、リードコマンドC1、アドレス情報ADD、およびセンス開始コマンドC2からなるセットを、センスコマンドセットと表記する。センスコマンドセットは、メモリチップ21に接続されたレディービジー信号線R/Bnがレディー状態である期間に送信される。
【0045】
センスコマンドセットの送信の際には、NANDC14は、チップイネーブル信号CEnをアクティブ状態(Lレベル)に維持する。ページ指定コマンドC0、リードコマンドC1、およびセンス開始コマンドC2の送信の際には、NANDC14は、コマンドラッチイネーブル信号CLEをアクティブ状態(Hレベル)に維持する。アドレス情報ADDの送信の際には、NANDC14は、アドレスラッチイネーブル信号ALEをアクティブ状態(Hレベル)に維持する。センスコマンドセットの送信の際には、NANDC14は、ライトイネーブル信号WEnをトグルする。
【0046】
センスコマンドセットにおいて、ページ指定コマンドC0は、1つのメモリセルグループMCGに格納されている1以上のページのデータのうちの1つを指定するコマンドである。リードコマンドC1は、一連のコマンドの種別がリード動作のためのものであることを示す。アドレス情報ADDは、センス対象のページを含むメモリセルグループMCGを示すロウアドレスを含んでいる。ページ指定コマンドC0とアドレス情報ADDに含まれるロウアドレスとの組み合わせによって、サブアレイ23が提供する記憶領域のうちのセンス対象のページが一意に指定される。また、アドレス情報ADDは、ページ内の位置、つまりビット線の位置を示すカラムアドレスを含んでいる。しかしながら、当該カラムアドレスはセンスコマンドセットにおいては意味をなさない。センス開始コマンドC2は、センス処理の開始を指示するコマンドである。
【0047】
メモリチップ21は、センス開始コマンドC2を受信すると、センス処理を開始する。センス処理では、アクセス回路24は、ページ指定コマンドC0およびロウアドレスの組み合わせによって一意に決まるページから1ページ分のデータを読み出す。アクセス回路24は、読み出された1ページ分のデータをデータラッチ25に格納する。
【0048】
センス処理が開始すると、メモリチップ21は、レディービジー信号線R/Bnの状態をレディー状態からビジー状態に遷移させる。メモリチップ21は、センス処理が終了すると、レディービジー信号線R/Bnの状態をビジー状態からレディー状態に遷移させる。つまり、図5に描画された時間tにおいては、センス処理が実行されている。NANDC14は、センス開始コマンドC2を送信した後、レディービジー信号線R/Bnの状態を監視することによって、センス処理が完了したこと、つまりセンス処理の対象のページから1ページ分のデータがデータラッチ25に読み出されたこと、を認識することができる。
【0049】
センス処理の後、NANDC14は、メモリチップ21にデータアウト処理を実行させることができる。NANDC14は、メモリチップ21にデータアウト処理を実行させるために、データアウトコマンドC3、アドレス情報ADD、および準備コマンドC4をIO信号線DQ[7:0]を介してこの順番で送信する。データアウトコマンドC3、アドレス情報ADD、および準備コマンドC4のセットを、データアウトコマンドセットと表記する。
【0050】
データアウトコマンドセットの送信の際には、NANDC14は、チップイネーブル信号CEnをアクティブ状態(Lレベル)に維持する。データアウトコマンドC3、および準備コマンドC4の送信の際には、NANDC14は、コマンドラッチイネーブル信号CLEをアクティブ状態(Hレベル)に維持する。アドレス情報ADDの送信の際には、NANDC14は、アドレスラッチイネーブル信号ALEをアクティブ状態(Hレベル)に維持する。データアウトコマンドセットの送信の際には、NANDC14は、ライトイネーブル信号WEnをトグルする。
【0051】
データアウトコマンドC3は、データアウト処理を指示するコマンドである。アドレス情報ADDは、カラムアドレスと、ロウアドレスと、を含んでいる。カラムアドレスは、データラッチ25に格納された1ページ分のデータのうちのデータアウト処理の対象のデータの先頭位置を示す。ロウアドレスとしては、センスコマンドセットに含まれていたロウアドレスと等しい値が用いられる。
【0052】
準備コマンドC4は、データアウト処理の準備を指示するコマンドである。データアウト処理の対象のデータは、データラッチ25から8ビット毎に分割されて8ビット幅のデータとしてNANDC14に出力される。メモリチップ21は、準備コマンドC4に応じて、カラムアドレスによって指定されたデータアウト処理の対象のデータのうちの先頭の8ビットのデータの出力を準備する。
【0053】
NANDC14は、準備コマンドC4を送信してから(より正確には準備コマンドC4の送信に応じたライトイネーブル信号WEnのトグルのタイミングから)、設計値として定められている時間tWHR2が経過すると、一対のリードイネーブル信号RE/REnのトグルを開始する。メモリチップ21は、一対のリードイネーブル信号RE/REnを遅延させることで一対のストローブ信号DQS/DQSnを生成する。メモリチップ21は、生成された一対のストローブ信号DQS/DQSnを出力する。メモリチップ21は、カラムアドレスによって指定された位置を先頭とするデータアウト対象のデータを、データラッチ25から8ビットずつ、一対のストローブ信号DQS/DQSnに同期してIO信号線DQ[7:0]に出力する。NANDC14は、メモリチップ21から出力されたデータを、一対のストローブ信号DQS/DQSnに同期したタイミングで取り込む。これによって、データアウト処理の対象のデータがメモリチップ21からNANDC14に転送される。つまり、データアウト処理が実行される。
【0054】
データアウト処理は、通常は、クラスタ単位で実行される。クラスタ単位で実行されるデータアウト処理のモードを、クラスタ転送モードと表記する。
【0055】
クラスタは、メモリコントローラ10による管理の単位のサイズを有するデータである。管理とは、一例では、論理アドレスと物理アドレスとの対応の管理である。
【0056】
メモリシステム1は、ホスト2に対して論理アドレス空間を提供する。ホスト2は、メモリシステム1に対してアクセス対象のデータの位置を指定する際に、論理アドレス空間内の位置情報を使用する。論理アドレス空間内の位置情報は、論理アドレスと称される。メモリコントローラ10は、論理アドレス空間に、NANDメモリ20の記憶領域をマッピングする。NANDメモリ20の記憶領域によって構成されるアドレス空間を物理アドレス空間と表記する。物理アドレス空間における1つの位置を示す位置情報を物理アドレスと表記する。
【0057】
論理アドレス空間とNANDメモリ20の記憶領域との関係は、翻訳情報(後述される翻訳情報131)として管理される。具体的には、論理アドレス空間は、均一のサイズを有する複数の単位領域に分割される。メモリコントローラ10は、論理アドレス空間内の単位領域毎に、論理アドレスと、物理アドレスと、を対応付けて、翻訳情報131に記録する。なお、物理アドレスは、その一部にロウアドレスおよびカラムアドレスを含んでいる。メモリコントローラ10は、論理アドレスと物理アドレスとの対応関係が変わるごとに、翻訳情報131を更新する。そして、クラスタは、1つの単位領域の分のデータをいう。
【0058】
クラスタ転送モードでは、データアウトコマンドセットにおいては、データアウト処理の対象のクラスタの位置を示すカラムアドレスが送信される。1回のセンス処理によってデータラッチ25に格納された1ページ分のデータが、データアウト処理の対象のクラスタを複数含んでいる場合には、複数のデータアウト処理の対象のクラスタのそれぞれを読み出すために、クラスタ単位でデータアウトコマンドセットの送信と、一対のリードイネーブル信号RE/REnのトグルと、が実行される。
【0059】
ここで、例えば、プレーン#0にリード対象のクラスタの前半部分(first part)が格納され、プレーン#1にリード対象のクラスタの後半部分(second part)が格納されている場合を考える。そのような場合、リード対象のクラスタの前半部分を含むページと、リード対象のクラスタの後半部分を含むページと、のセンス処理を行ったうえで、リード対象のクラスタの前半部分のデータアウト処理と、リード対象のクラスタの後半部分のデータアウト処理と、をこの順番で続けて実行する必要がある。このような、2つのプレーンを跨いで格納されたクラスタを、跨ぎクラスタ(straddling cluster)、と表記する。
【0060】
リード対象のクラスタが跨ぎクラスタである場合、リード対象のクラスタの前半部分のデータアウト処理と、リード対象のクラスタの後半部分のデータアウト処理と、をこの順番で続けて実行する必要があるという制約は、誤り訂正を行う回路(後述されるECC(Error-Correcting Code)回路145)にはECCフレーム単位でデータを入力する必要があることに起因する。本実施形態においては、ECCフレームのサイズはクラスタのサイズと等しい。
【0061】
より具体的には、クラスタは、メモリチップ21に送られる前にECC回路145(または他の構成要素)によって誤り訂正符号を用いたエンコードが施されている。エンコードされたクラスタに対し、誤り訂正を行うためには、エンコードされたクラスタを先頭から順番にECC回路145に入力する必要がある。エンコードされたクラスタから一部のデータが不足していたり、エンコードされたクラスタの一部と他の一部との順番が入れ替わっていたりすると、ECC回路145において期待された誤り訂正を実行することができない。クラスタ転送モードでは、NANDC14は、メモリチップ21から取得したデータを、取得した順番でECC回路145に入力する。従って、リード対象のクラスタが2つのプレーンに跨いで格納されている場合、リード対象のクラスタの前半部分のデータアウト処理と、リード対象のクラスタの後半部分のデータアウト処理と、がこの順番で行われないと、元のクラスタを先頭から順番に復元してECC回路145に入力することができない。よって、前述された制約が生じる。
【0062】
つまり、リード対象のクラスタの前半部分のデータアウト処理と、リード対象のクラスタの後半部分のデータアウト処理と、を上記順番とは逆の順番で実行したり、間に他の処理(例えば他のクラスタのデータアウト処理)を挟んだりすることはできない。また、リード対象のクラスタの前半部分のデータアウト処理が完了するまではプレーン#0のデータラッチ25がリード対象のクラスタの前半部分を含むページによって占有されている。このため、リード対象のクラスタの前半部分のデータアウト処理が完了するまでプレーン#0において次のセンス処理を実行することができない。また、リード対象のクラスタの後半部分のデータアウト処理が完了するまではプレーン#1のデータラッチ25がリード対象のクラスタの後半部分を含むページによって占有されている。このため、リード対象のクラスタの後半部分のデータアウト処理が完了するまでプレーン#1において次のセンス処理を実行することができない。
【0063】
このように、跨ぎクラスタがリード対象である場合、1つのプレーンにおけるクラスタの前半部分のデータアウト処理と、他のプレーンにおけるクラスタの後半部分のデータアウト処理と、を待ち合わせる必要がある。つまり、本来はそれぞれが独立に動作できる2つのプレーンを、跨ぎクラスタのデータアウト処理の時には連携して動作させる必要がある。これによって、2つのプレーンを並列に動作させることができない期間が生じ、メモリチップ21からメモリコントローラ10へのデータ転送の効率が悪化する。
【0064】
そこで、実施形態では、NANDC14に、1ページ分のデータを格納可能なバッファ(後述する待ち合わせバッファ147)が、複数設けられる。NANDC14は、2つのプレーンのデータラッチ25にそれぞれ格納されている1ページ分のデータを、複数の待ち合わせバッファ147のうちの2つにバッファすることができるように構成されている。
【0065】
これによって、リード対象のクラスタの前半部分を含むページをプレーン#0のデータラッチ25から待ち合わせバッファ147のうちの1つに転送すれば、プレーン#0は、リード対象のクラスタの後半部分のデータアウト処理と待ち合わせを行うことなく次の処理、例えば別のページのセンス処理、を進めることが可能である。また、リード対象のクラスタの後半部分を含むページをプレーン#1のデータラッチ25から待ち合わせバッファ147のうちの別の1つに転送すれば、プレーン#1は、リード対象のクラスタの前半部分のデータアウト処理と待ち合わせを行うことなく次の処理、例えば別のページのセンス処理、を進めることが可能である。
【0066】
つまり、跨ぎクラスタがリード対象である場合であっても、当該跨ぎクラスタのデータアウト処理のためにプレーン#0におけるデータアウト処理とプレーン#1におけるデータアウト処理とを待ち合わせる必要がなく、プレーン#0とプレーン#1とを並列に動作させることが可能となる。よって、メモリチップ21からメモリコントローラ10へのデータ転送の効率の悪化を抑制することが可能である。プレーン#0とプレーン#1とを並列に動作させる例については後述される。
【0067】
なお、実施形態では、リード対象のクラスタの一部を含むページのデータラッチ25から待ち合わせバッファ147への転送は、ページ単位のデータアウト処理によって実現される。ページ単位で実行されるデータアウト処理のモードを、ページ転送モードと表記する。
【0068】
なお、図5に示されたタイミング図によれば、NANDC14は、データアウト処理の対象のデータのサイズを、一対のリードイネーブル信号RE/REnのトグルの数によって指定する。つまり、NANDC14は、クラスタ転送モードにおいては、一対のリードイネーブル信号RE/REnを、クラスタのサイズに対応した数だけトグルすることで、クラスタ単位の転送を実現する。また、NANDC14は、ページ転送モードにおいては、一対のリードイネーブル信号RE/REnを、ページのサイズに対応した数だけトグルすることで、ページ単位の転送を実現する。データアウト処理の対象のデータのサイズの指定の方法は一対のリードイネーブル信号RE/REnのトグルの回数を用いた方法だけに限定されない。
【0069】
図6は、クラスタ転送モードおよびページ転送モードのそれぞれにおいて実施形態のIO信号線DQ[7:0]を転送される信号の違いを説明するための図である。ここでは一例として、4つのクラスタCL0,CL1,CL2,CL3によって構成されるページのうちの4つのクラスタCL0,CL1,CL2,CL3がリードの対象とされた場合について説明する。
【0070】
クラスタ転送モードでは、上記ページのセンス処理が実行された後、クラスタCL0,CL1,CL2,CL3のそれぞれを対象とした4回のデータアウト処理が実行される。具体的には、NANDC14は、クラスタCL0をデータアウト処理の対象としたデータアウトコマンドセットを送信し、その後、一対のリードイネーブル信号RE/REnをトグルすることによってクラスタCL0をメモリチップ21から受信する。NANDC14は、クラスタCL1をデータアウト処理の対象としたデータアウトコマンドセットを送信し、その後、一対のリードイネーブル信号RE/REnをトグルすることによってクラスタCL1をメモリチップ21から受信する。NANDC14は、クラスタCL2をデータアウト処理の対象としたデータアウトコマンドセットを送信し、その後、一対のリードイネーブル信号RE/REnをトグルすることによってクラスタCL2をメモリチップ21から受信する。NANDC14は、クラスタCL3をデータアウト処理の対象としたデータアウトコマンドセットを送信し、その後、一対のリードイネーブル信号RE/REnをトグルすることによってクラスタCL3をメモリチップ21から受信する。
【0071】
これに対し、ページ転送モードでは、4つのクラスタCL0,CL1,CL2,CL3によって構成されるページを対象とした1回のデータアウト処理が実行される。具体的には、NANDC14は、上記ページをデータアウト処理の対象としたデータアウトコマンドセットを送信し、その後、一対のリードイネーブル信号RE/REnをトグルすることによって上記ページをメモリチップ21から受信する。
【0072】
クラスタ転送モードにおいては、1ページのうちの複数のクラスタに対してそれぞれカラムアドレスが異なるデータアウトコマンドセットが送信される。データアウトコマンドセットの1回の送信に要する時間は、転送モードによらず、均一である。このため、1回のデータアウトコマンドセットのみ使用されるページ転送モードに比べ、クラスタ転送モードではデータアウトコマンドセットの送信に要する時間が多くなる。よって、1ページにリード対象とされたクラスタが複数含まれている場合には、コマンドセットの送信に要する時間とデータの転送に要する時間との合計は、クラスタ転送モードよりもページ転送モードを使用した方が短くなる可能性がある。図6に示された例によれば、4個のクラスタをクラスタ転送モードで転送する場合に比べ、当該4個のクラスタを含む1つのページをページ転送モードで転送した方が、コマンドセットの送信に要する時間とデータの転送に要する時間との合計が短いことが読み取れる。
【0073】
実施形態では、1つのページに含まれるリード対象のクラスタの数に応じて転送モードが選択される。転送モードの選択方法の具体例については後述される。
【0074】
跨ぎクラスタが発生するケースとしては種々のケースが考えられる。実施形態では、一例として、ECC回路145が使用する誤り訂正符号として、コードレート(code rate)が可変の誤り訂正符号が採用されたケースを説明する。コードレートは、エンコード前のデータのサイズをエンコード後のデータのサイズで除算して得られる情報である。コードレートが小さいほど、エンコードされたクラスタに含まれる冗長データの量が多くなり、これによってエンコードされたクラスタのサイズが増大する。また、コードレートが小さいほど、誤り訂正の能力が向上する。
【0075】
図7は、コードレートが可変の誤り訂正符号が採用された実施形態のメモリシステム1において、プレーン#0およびプレーン#1に格納される各クラスタの位置を示す模式的な図である。本図に示される例では、プレーン#0の3つのページ(ロアーページ、ミドルページ、およびアッパーページ)と、プレーン#1の3つのページ(ロアーページ、ミドルページ、およびアッパーページ)と、を含む6ページ分の記憶領域によって論理的な記憶領域が構成されており、当該論理的な記憶領域に対して格納されるクラスタの位置が描画されている。なお、この論理的な記憶領域を、スーパーページと表記する。
【0076】
図7の左端に描画されているNの値は、スーパーページに格納され得るクラスタの最大数を示しており、コードレートと対応する。コードレートが小さいほど、エンコードされたクラスタのサイズが大きいので、スーパーページに格納され得るクラスタの最大数、つまりNの値が小さくなる。また、図7に示される例では、各クラスタにはCLX(ただしXは0から23までの整数)で表されるIDが付されている。
【0077】
1つのスーパーページに格納されるN個のクラスタは、Nの値によって決まる均一のサイズを有する。ここでは、スーパーページは、6ページ分の記憶領域によって構成されるので、Nの値が6の倍数であれば、跨ぎクラスタは発生しない。逆に、Nの値が6の倍数でなければ、跨ぎクラスタが発生する。
【0078】
Nの値として例えば「24」が設定されている場合、Nの値は6の倍数であるので、跨ぎクラスタは発生しない。
【0079】
Nの値として例えば「23」が設定されている場合、Nの値は6の倍数でないので、跨ぎクラスタが発生する。図7に示される例では、クラスタCL3、クラスタCL7、クラスタCL11、クラスタCL15、およびクラスタCL19が、2つのプレーン#0、#1を跨いで格納されている。
【0080】
Nの値として「22」、「21」、「20」、または「19」が設定されている場合にも、跨ぎクラスタが発生する。Nの値として「18」が設定されている場合には、跨ぎクラスタが発生しない。
【0081】
Nの値の変更は、任意のタイミングで実施され得る。例えば、種々の要因により、メモリセルアレイ22の信頼性が低下する場合がある。メモリセルアレイ22の信頼性が低下した場合、メモリコントローラ10は、誤り訂正の能力をより高めるために、エンコードの際のコードレートを現状の設定値よりもより小さい値に変更することができる。コードレートの変更は、ここではNの値の変更によって実行される。一例では、Nの値の初期値として「24」が設定される。そして、メモリセルアレイ22の使用の状況、誤り訂正されるビットの数の増加、またはその他の指標に応じて、Nの値の変更を実行することができる。なお、Nの値の変更方法およびNの値は上記に示された例に限定されない。
【0082】
図8は、実施形態のRAM13に格納される情報の一例を示す模式的な図である。本図に示されるように、RAM13には、翻訳情報131、クラスタフォーマット情報132、およびデータラッチ情報133が格納される。また、RAM13には、エントリーキュー134が設けられている。
【0083】
翻訳情報131は、前述されたように、論理アドレスと物理アドレスとの対応関係を示す情報である。
【0084】
クラスタフォーマット情報132は、Nの値毎に、スーパーページに格納された各クラスタが跨ぎクラスタであるか否かを示す情報である。クラスタフォーマット情報132は、跨ぎクラスタでないクラスタのサイズおよび先頭のカラムアドレスを含む。また、クラスタフォーマット情報132は、跨ぎクラスタの前半部分のサイズ、跨ぎクラスタの前半部分の先頭のカラムアドレス、跨ぎクラスタの後半部分のサイズ、および跨ぎクラスタの後半部分の先頭のカラムアドレス(即ちゼロ番地)を含む。
【0085】
データラッチ情報133は、各メモリチップ21の各データラッチ25に格納されているページを示す情報の群である。データラッチ情報133は、テーブル形式のデータ構造を有していてもよいし、テーブル形式とは異なるデータ構造を有していてもよい。データラッチ情報133は、メモリチップ21とプレーンとの指定により、指定されたメモリチップ21の指定されたプレーンに属するデータラッチ25に格納されているページを知ることが出来るように構成されている。データラッチ情報133には、ページを示す情報として、当該ページを示す物理アドレス(ロウアドレス)が記録されている。なお、ページを示す情報はこれに限定されない。
【0086】
例えば、ページを示す情報は、当該ページのセンス処理のタイミングでデータラッチ情報133に記録される。また、データラッチ情報133に記録された、ページを示す情報は、そのページが格納されたデータラッチ25にライト対象のデータが格納されるタイミングや、そのデータラッチ25と同じメモリチップ21でかつ同じプレーンに属するサブアレイ23に対するイレース動作のタイミングで、データラッチ情報133から削除される。この更新ルールにより、データラッチ情報133の内容は、各データラッチ25の最新の状況を反映したものとなっている。なお、データラッチ情報133の内容の更新ルールはこれに限定されない。データラッチ情報133の内容は、最新の状況から若干のラグを伴って更新されてもよい。
【0087】
エントリーキュー134には、クラスタ単位のリードを指示する第1リード指示が登録される。例えば、ホスト2からリード要求を受信した場合、メモリコントローラ10(例えばCPU11)は、リード要求に含まれる論理アドレス値を、翻訳情報131によってクラスタ単位の物理アドレス値に翻訳する。リード要求によって要求されたデータが複数のクラスタによって構成される場合には、メモリコントローラ10は、クラスタ毎に物理アドレス値を取得する。そして、メモリコントローラ10は、翻訳によって得られた物理アドレス値毎、つまりクラスタ毎に第1リード指示を生成して、生成した全ての第1リード指示をエントリーキュー134に登録する。各第1リード指示には、翻訳によって得られた物理アドレス値が記録されている。各第1リード指示に含まれる物理アドレス値は、リード対象のクラスタの位置を示す。
【0088】
CPU11は、エントリーキュー134に格納された第1リード指示に基づき、第2リード指示をクラスタ単位で生成する。第2リード指示は、メモリチップ21に対してリード動作を実行させるNANDC14への指示である。第2リード指示は、リード対象のクラスタの位置を示す物理アドレス値を含んでいる。また、第2リード指示は、センス処理の実行の要否などの情報が付加されている。より具体的には、第2リード指示は、リード対象のクラスタの位置を示す物理アドレス値と、センス処理を実行するか否かを示すフラグと、リードの対象のクラスタは跨ぎクラスタであるか否かを示す跨ぎフラグ(straddle flag)と、リードモードを示すリードモードフラグと、を備えている。
【0089】
実施形態のリードモードは、一例として、ランダムリードとシーケンシャルリードとの2つのモードを含む。シーケンシャルリードは、1つのページ(換言すると、1つのプレーンの1つのページ)から2以上のクラスタを読み出す場合に指定されるリードモードである。ランダムリードは、1つのページ(換言すると、1つのプレーンの1つのページ)から2以上のクラスタを読み出さない場合に指定されるリードモードである。リードモードは、ランダムリードおよびシーケンシャルリードだけに限定されない。
【0090】
第2リード指示に含まれるリードモードフラグがランダムリードを示している場合には、NANDC14は、クラスタ転送モードでデータアウト処理を実行する。第2リード指示に含まれるリードモードフラグがシーケンシャルリードを示している場合には、NANDC14は、ページ転送モードでデータアウト処理を実行し得る。
【0091】
エントリーキュー134には、第1リード指示だけでなく、ライトなど他の処理の指示が格納されてもよい。または、他の処理の指示は、エントリーキュー134とは異なる別のキューに格納されてもよい。以降では、エントリーキュー134に関しては、第1リード指示についてのみ言及し、他の処理の指示については言及しないこととする。
【0092】
図9は、実施形態のNANDC14のさらに詳細な構成の一例を示す模式的な図である。NANDC14は、シーケンサ141、待ち合わせバッファ群142、ランダムバッファ143、待ち合わせバッファマネージャ144、およびECC回路145を備える。
【0093】
シーケンサ141は、指示キュー146を備える。指示キュー146には、CPU11によって第1リード指示に基づいて生成された第2リード指示がエンキューされる。即ち、CPU11は、第1リード指示に基づいて第2リード指示を生成し、生成した第2リード指示を、2つのNANDC14のうちのリード対象のクラスタが格納されているメモリチップ21が接続されたNANDC14の指示キュー146に格納する。
【0094】
シーケンサ141は、指示キュー146に格納された1以上の第2リード指示から、チャネルの空き状況、および、リードモードフラグに応じた待ち合わせバッファ群142またはランダムバッファの空き状況に基づいて1つの第2リード指示を選択する。シーケンサ141は、選択した第2リード指示に応じて、メモリチップ21に対するコマンドセットを送信したり、一対のリードイネーブル信号線RE/REnをトグルしたりすることができる。
【0095】
一対のリードイネーブル信号線RE/REnのトグルの回数は、クラスタ転送モードとページ転送モードとで異なる。第2リード指示のリードモードフラグがシーケンシャルモードを示している場合、シーケンサ141は、ページ転送モードを選択し、一対のリードイネーブル信号線RE/REnをページのサイズに対応した回数だけトグルする。第2リード指示のリードモードフラグがランダムモードを示している場合、シーケンサ141は、ランダムモードを選択し、一対のリードイネーブル信号線RE/REnをクラスタのサイズに対応した回数だけトグルする。
【0096】
なお、クラスタのサイズは、Nの値に応じて異なる。指示キュー146に格納された第2リード指示は、何らかの方法でクラスタフォーマット情報132に記載された情報に対応付けられている。シーケンサ141は、指示キュー146から読み出した第2リード指示に基づいてクラスタフォーマット情報132を参照することによって、Nの値やクラスタのサイズなどを知ることができる。また、データアウト処理の対象のクラスタが跨ぎクラスタに該当する場合には、シーケンサ141は、クラスタフォーマット情報132に基づき、当該クラスタの前半部分の先頭のカラムアドレスおよびサイズと、当該クラスタの後半部分の先頭のカラムアドレスおよびサイズと、を知ることができる。
【0097】
シーケンサ141がNの値やクラスタのサイズなどを特定する方法は上記の例に限定されない。CPU11は、第2リード指示に、Nの値やクラスタのサイズなどを記録してもよい。また、CPU11は、データアウト処理の対象のクラスタが跨ぎクラスタに該当する場合には、第2リード指示に、当該クラスタの前半部分の先頭のカラムアドレスおよびサイズと、当該クラスタの後半部分の先頭のカラムアドレスおよびサイズと、を記録してもよい。
【0098】
シーケンサ141は、待ち合わせバッファ群142またはランダムバッファ143に、データアウト処理によって取得したデータの格納先を指定したり、当該データの格納を指示したり、ECC回路145へのデータの出力を指示したりすることができる。以降、データアウト処理によって取得されたデータを格納する指示を、バッファ格納指示と表記する。また、ECC回路145へのデータの出力の指示を、バッファ出力指示と表記する。
【0099】
NANDC14は、待ち合わせバッファ群142に対するデータの入出力およびランダムバッファ143に対するデータの入出力を制御する不図示のバッファマネージャを備えている。シーケンサ141が発行する、データの格納先の指定、バッファ格納指示、およびバッファ出力指示は、当該バッファマネージャに送られる。当該バッファマネージャは、データの格納先の指定、バッファ格納指示、およびバッファ出力指示を解釈する。これにより、当該バッファマネージャは、複数の待ち合わせバッファ147およびランダムバッファ143の間のデータの格納先の切り替え、データの格納先へのデータの格納、およびデータの格納先からのデータの出力、を制御する。以降では、説明を簡単にするために、待ち合わせバッファ群142およびランダムバッファ143が、シーケンサ141が発行する、データの格納先の指定、バッファ格納指示、およびバッファ出力指示を受け取って、受け取ったこれらの情報に基づいた動作を実行するとして説明する。
【0100】
待ち合わせバッファ群142は、複数の待ち合わせバッファ147を備えている。待ち合わせバッファ147は、例えばSRAMで構成される。ここでは一例として、待ち合わせバッファ群142は、8個の待ち合わせバッファ147を備えている。各待ち合わせバッファ147は、少なくとも1ページ分の容量を備えている。つまり、各待ち合わせバッファ147には、1つのデータラッチ25に読み出された1ページ分のデータが格納され得る。ページ転送モードでデータアウト処理が実行される際には、メモリチップ21から取得された1ページ分のデータは、8個の待ち合わせバッファ147のうちのシーケンサ141によって選択された待ち合わせバッファ147に格納される。なお、8個の待ち合わせバッファ147は、0番から7番までのバッファ番号によって識別されることとする。
【0101】
ランダムバッファ143は、少なくとも1クラスタ分の容量を備えている。ランダムバッファ143は、ECC回路145とチャネルとの間に配置される。ランダムバッファ143が1クラスタ以上の容量を備えるため、チャネルの使い方の自由度が大きくなる。ランダムバッファ143は、例えばSRAMで構成される。クラスタ転送モードでデータアウト処理が実行される際には、メモリチップ21から取得された1クラスタ分のデータはランダムバッファ143に格納される。
【0102】
待ち合わせバッファマネージャ144は、8個の待ち合わせバッファ147の空き状況の管理を実行する。より具体的には、待ち合わせバッファマネージャ144は、それぞれは8個の待ち合わせバッファ147のいずれかと一対一に対応する8個のカウンタ148を備え、8個のカウンタ148の値を操作する。
【0103】
前述されたように、シーケンシャルモードを示すリードモードフラグが付された第2リード指示の実行の際には、ページ単位でデータアウト処理が実行され得る。より詳しくは、データアウト処理の対象とされたクラスタを含むページが、8個の待ち合わせバッファ147の何れかに既に格納されている場合には、データアウト処理が省略されて、そのページが格納された待ち合わせバッファ147からデータアウト処理の対象のクラスタが取得される。データアウト処理の対象とされたクラスタを含むページが、8個の待ち合わせバッファ147の何れにも格納されていない場合には、そのページは、ページ単位のデータアウト処理によってメモリチップ21から取得されて8個の待ち合わせバッファ147の何れかに格納される。その場合、8個の待ち合わせバッファ147のうちの非使用中の待ち合わせバッファ147が、そのページの格納先として選択される。8個のカウンタ148のそれぞれは、対応する待ち合わせバッファ147が使用中であるか非使用中であるかの判定に使用される。
【0104】
8個のカウンタ148の初期値は、0とされる。あるカウンタ148の値が0であることは、そのカウンタ148に対応した待ち合わせバッファ147が非使用中であることを意味する。シーケンシャルモードを示すリードモードフラグが付された第2リード指示の際には、まず、非使用中の待ち合わせバッファ147が1つ、選択される。そして、当該第2リード指示の実行が開始すると、待ち合わせバッファマネージャ144は、選択された待ち合わせバッファ147に対応するカウンタ148の値を1だけインクリメントする。これによって、選択された待ち合わせバッファ147は、使用中と見なされる状態になる。そして、その第2リード指示によってリードの対象とされたクラスタを含むページはメモリチップ21から取得されて、取得されたページは選択された待ち合わせバッファ147に格納される。
【0105】
使用中と見なされる状態の待ち合わせバッファ147に格納されたページと同じページから別のクラスタを取得する第2リード指示であって、シーケンシャルモードを示すリードモードフラグが付された第2リード指示、の実行が開始されたとき、待ち合わせバッファマネージャ144は、その待ち合わせバッファ147に対応するカウンタ148の値をさらに1だけインクリメントする。そして、その第2リード指示によってリードの対象とされたクラスタは、メモリチップ21からデータアウト処理によって取得されるのではなく、待ち合わせバッファ147から読み出されてECC回路145に送られる。
【0106】
また、待ち合わせバッファマネージャ144は、待ち合わせバッファ147からECC回路145へのクラスタの出力が完了すると、その待ち合わせバッファ147に対応するカウンタ148の値を1だけデクリメントする。
【0107】
上記のようなカウンタ148の操作により、待ち合わせバッファ147に格納されているページが、後に出力されるクラスタを含んでいると推定される場合には、その待ち合わせバッファ147に対応するカウンタ148の値は非ゼロとされ、これによってその待ち合わせバッファ147は使用中の状態となる。つまり、当該待ち合わせバッファ147の内容は、別のページによる上書きから保護される。待ち合わせバッファ147に格納されているページが、後に出力されるクラスタを含んでいないと推定される場合には、その待ち合わせバッファ147に対応するカウンタ148の値がゼロとされ、これによってその待ち合わせバッファ147は、非使用中の状態、つまり、その待ち合わせバッファ147は別のページの格納のためのバッファとして選択され得る状態、となる。
【0108】
ECC回路145は、メモリチップ21から取得されたクラスタ、即ち誤り訂正符号によってエンコードされているクラスタ、に対し、当該誤り訂正符号を用いた誤り訂正を実行する。ECC回路145に入力されるデータの単位をECCフレームと表記する。ECCフレームは、クラスタと等しくてもよいし、クラスタと等しくなくてもよい。ECCフレームがクラスタと等しくない場合、ECCフレームは、複数のクラスタによって構成される。なお、ここでは一例として、ECCフレームはクラスタと等しいこととする。
【0109】
前述されたように、シーケンシャルモードのリードモードフラグが付された第2リード指示が実行された場合、当該第2リード指示が指定するクラスタを含むページがメモリチップ21から取得されて何れかの待ち合わせバッファ147に格納される。その後、当該待ち合わせバッファ147は、シーケンサ141からのバッファ出力指示に応じて、自身に格納されているページのうちの出力対象のクラスタをECC回路145に出力する。シーケンサ141は、待ち合わせバッファ群142に対しては、バッファ出力指示として、出力対象のクラスタのクラスタ情報を送る。クラスタ情報は、出力対象のクラスタが跨ぎクラスタであるか否かを含む。出力対象のクラスタが跨ぎクラスタである場合には、クラスタ情報は、跨ぎクラスタの前半部分のサイズ、跨ぎクラスタの前半部分の先頭のカラムアドレス、跨ぎクラスタの後半部分のサイズ、および跨ぎクラスタの後半部分の先頭のカラムアドレスを含む。
【0110】
ランダムモードのリードモードフラグが付された第2リード指示が実行された場合、当該第2リード指示が指定するクラスタがメモリチップ21から取得されてランダムバッファ143に格納される。その後、当該ランダムバッファ143は、シーケンサからのバッファ出力指示に応じて、自身に格納されているデータのうち出力対象のクラスタをECC回路145に出力する。
【0111】
ECC回路145は、入力されたクラスタに対して誤り訂正を実行した後、当該クラスタを所定位置、例えばRAM13、に格納する。CPU11は、RAM13に誤り訂正後のクラスタが格納された後、ホストI/F12に、当該クラスタをホスト2に転送させることができる。
【0112】
なお、ECC回路145による誤り訂正が失敗した場合、メモリコントローラ10は、任意の処理を実行し得る。例えば、メモリコントローラ10は、誤り訂正が失敗したクラスタに対し、さらに訂正能力が高い誤り訂正を実行したり、判定電圧を変更してリード動作をリトライしたりすることができる。
【0113】
続いて、実施形態のメモリシステム1の動作について説明する。
【0114】
図10は、実施形態のメモリシステム1におけるリード動作の一例を示すフローチャートである。本図に示される一連の動作は、エントリーキュー134に格納された第1リード指示毎に実行される。
【0115】
まず、CPU11は、エントリーキュー134から1つの第1リード指示を読み出す(S101)。そして、CPU11は、読み出した第1モード指示によってリード対象とされるクラスタは跨ぎクラスタであるか否かを判定する(S102)。
【0116】
S101の処理によって読み出された第1リード指示を、図10を参照した説明において、対象の第1リード指示と表記する。対象の第1リード指示によってリード対象とされるクラスタを、図10を参照した説明において、対象のクラスタと表記する。
【0117】
S102の判定の具体的な方法は特定の方法に限定されない。例えば、CPU11は、クラスタフォーマット情報132を参照することによって、対象のクラスタが跨ぎクラスタであるか否かを判定する。
【0118】
対象のクラスタが跨ぎクラスタである場合(S102:Yes)、S103~S110の動作が、対象のクラスタの前半部分と、対象のクラスタの後半部分と、のそれぞれに対して実行され(S111)、動作が終了する。
【0119】
対象のクラスタが跨ぎクラスタではない場合(S102:No)、CPU11は、対象のクラスタのリードモードを、シーケンシャルリードに設定するか否かを判定する(S103)。
【0120】
S103の判定の具体的な方法は特定の方法に限定されない。例えば、CPU11は、エントリーキュー134にS103の判定の時点において格納されている全ての第1リード指示に記録された物理アドレス値を参照することによって、対象のクラスタと同じページ(換言すると対象のクラスタと同じプレーンに属する、対象のクラスタと同じページ)に含まれるクラスタをリード対象とする別の第1リード指示がエントリーキュー134に格納されているか否かを判定する。対象のクラスタと同じページに含まれるクラスタをリード対象とする別の第1リード指示がエントリーキュー134に格納されている場合、CPU11は、対象のクラスタのリードモードをシーケンシャルリードに設定する。さらにCPU11は、当該別の第1リード指示がリード対象とするクラスタのリードモードを、シーケンシャルリードに設定することを決めてもよい。
【0121】
対象のクラスタと同じページに含まれるクラスタをリード対象とする別の第1リード指示がエントリーキュー134に格納されていない場合、CPU11は、対象のクラスタのリードモードをシーケンシャルリードではなくランダムリードに設定する。
【0122】
なお、対象のクラスタが跨ぎクラスタである場合は、当該クラスタの前半部分のリードモードおよび後半部分のリードモードには互いに等しいモードが設定されることとする。
【0123】
対象のクラスタのリードモードをシーケンシャルリードに設定しない場合(S103:No)、換言すると、対象のクラスタのリードモードをランダムリードに設定する場合、CPU11は、センス処理を実行する旨を示すフラグと、ランダムリードを示すリードモードフラグと、を付した第2リード指示をNANDC14の指示キュー146にエンキューする。対象のクラスタが跨ぎクラスタである場合には、CPU11は、さらに、当該第2リード指示に跨ぎフラグを付す。NANDC14は、当該第2リード指示に基づき、センス処理と(S104)、クラスタ転送モードでのデータアウト処理と(S105)、を実行し、データ転送の動作が終了する。
【0124】
対象のクラスタが跨ぎクラスタであり、かつ、対象のクラスタの前半部分および後半部分のリードモードとしてランダムリードが設定されている場合、メモリコントローラ10は、対象のクラスタの前半部分のデータアウト処理と、対象のクラスタの後半部分のデータアウト処理と、をこの順番で実行する必要がある。この制約をNANDC14に守らせるために、CPU11は、対象のクラスタの前半部分のリードと、対象のクラスタの後半部分のリードと、を1つの第2リード指示によって指示するように構成されてもよい。つまり、NANDC14では、シーケンサ141が指示キュー146から当該第2リード指示を選択した場合、対象のクラスタの前半部分のデータアウト処理と、対象のクラスタの後半部分のデータアウト処理と、をこの順番で実行する。なお、前述の制約をNANDC14が守れる限り、対象のクラスタの前半部分のリードと、対象のクラスタの後半部分のリードと、は必ずしも1つの第2リード指示によって指示されなくてもよい。
【0125】
対象のクラスタのリードモードをシーケンシャルリードに設定する場合(S103:Yes)、CPU11は、対象のクラスタが格納されたデータラッチ25が存在するか否かを判定する(S106)。S106の判定は、データラッチ情報133に基づいて実行される。
【0126】
対象のクラスタが格納されたデータラッチ25が存在しない場合(S106:No)、CPU11は、センス処理の実行を意味するフラグと、シーケンシャルリードを示すリードモードフラグと、を付した第2リード指示をNANDC14の指示キュー146にエンキューする。対象のクラスタが跨ぎクラスタである場合には、CPU11は、さらに、当該第2リード指示に跨ぎフラグを付す。NANDC14は、当該第2リード指示に基づき、センス処理と(S107)、ページ転送モードでのデータアウト処理と(S108)、を実行し、データ転送の動作が終了する。
【0127】
対象のクラスタが跨ぎクラスタであり、かつ、対象のクラスタの前半部分および後半部分のリードモードとしてシーケンシャルリードが設定されている場合、対象のクラスタが跨ぎクラスタであり、かつ、対象のクラスタの前半部分および後半部分のリードモードとしてランダムリードが設定されている場合と異なり、対象のクラスタの前半部分を含むページのデータアウト処理と、対象のクラスタの後半部分を含むページのデータアウト処理と、の実行の順番は任意である。よって、CPU11は、対象のクラスタの前半部分のリードと、対象のクラスタの後半部分のリードと、をそれぞれ異なる第2リード指示によって指示することができる。CPU11は、対象のクラスタの前半部分のリードと、対象のクラスタの後半部分のリードと、を1つの第2リード指示によって指示してもよい。
【0128】
対象のクラスタが何れかのデータラッチ25に格納されている場合(S106:Yes)、CPU11は、センス処理を実行しない旨を示すフラグと、シーケンシャルリードを示すリードモードフラグと、を付した第2リード指示をNANDC14の指示キュー146にエンキューする。対象のクラスタが跨ぎクラスタである場合には、CPU11は、さらに、当該第2リード指示に跨ぎフラグを付す。
【0129】
NANDC14は、センス処理を実行しない旨を示すフラグと、シーケンシャルリードを示すリードモードフラグと、を付した第2リード指示の実行の際には、対象のクラスタが格納された待ち合わせバッファ147が存在するか否かを判定する(S109)。対象のクラスタが格納された待ち合わせバッファ147が存在する場合には(S109:Yes)、データアウト処理が実行されずにデータ転送の動作が終了する。
【0130】
対象のクラスタが格納された待ち合わせバッファ147が存在しない場合には(S109:No)、NANDC14は、ページ転送モードでのデータアウト処理を実行し(S110)、データ転送の動作が終了する。
【0131】
なお、S104およびS107においてセンス処理が実行されたとき、センス処理が行われたプレーンに属するデータラッチ25には、センス処理によってサブアレイ23から読み出されたページが格納される。よって、S104およびS107におけるセンス処理の実行に応じて、CPU11は、データラッチ情報133の更新を行う。また、イレース動作またはライト動作が実行された場合には、イレース動作またはライト動作が実行されたプレーンに属するデータラッチ25の内容が書き換わるため、CPU11は、イレース動作またはライト動作の実行に応じて、データラッチ情報133の更新を行う。これによって、データラッチ情報133は、各データラッチ25の最新の状況を反映したものとされる。
【0132】
また、図10に示された一連の動作では、対象のクラスタが格納されたデータラッチ25が存在するか否かの判定(S106)と、対象のクラスタが格納された待ち合わせバッファ147が存在するか否かの判定(S109)と、がこの順番で実行された。これは、下記の理由による。即ち、データラッチ情報133は、常に各データラッチ25の最新の状況を反映しているため、各データラッチ25の最新の状況に基づいてS106の判定が実行可能である。これに対して、各待ち合わせバッファ147の内容は、イレース動作やライト動作が行われても、書き換えが実行されない。つまり、各待ち合わせバッファ147は、必ずしも最新の状態のページが格納されているとは限らない。S106とS109とが上記された順番で実行させることによって、メモリシステム1は、ページ転送モードでのデータアウト処理を行うか否かを、各データラッチ25の最新の状況に基づいて決定することが可能である。
【0133】
図11図14は、実施形態のNANDC14の動作の詳細を示す図である。
【0134】
図11は、図10に示されたS106の処理において対象のクラスタが格納されたデータラッチ25が存在しないと判定された場合にCPU11によって発行された、第2リード指示を実行する動作の一例を示している。この第2リード指示には、センス処理の実行を示すフラグと、シーケンシャルリードを示すリードモードフラグと、が付されている。また、対象のクラスタが跨ぎクラスタである場合には、この第2リード指示には、跨ぎフラグが付されている。この第2リード指示を、図11を参照した説明において、対象の第2リード指示と表記する。また、対象の第2リード指示によってリード対象とされたクラスタを、図11を参照した説明において、対象のクラスタと表記する。
【0135】
シーケンサ141は、指示キュー146に格納されている1以上の第2リード指示のうちから対象の第2リード指示を選択した場合(S201)、まず、リードモードフラグを参照してシーケンシャルリードであると確認し、待ち合わせバッファマネージャ144に、対象のクラスタが格納された待ち合わせバッファ147が存在するか否かと、非使用中の待ち合わせバッファ147が存在するか否かと、を問い合わせる(S202)。なお、シーケンサ141は、対象のクラスタが格納された待ち合わせバッファ147が存在するか否かの問い合わせを省略してもよい。待ち合わせバッファマネージャ144は、対象のクラスタは何れの待ち合わせバッファ147にも格納されていない旨をシーケンサ141に応答する。また、待ち合わせバッファマネージャ144は、値がゼロであるカウンタ148が存在する場合、そのカウンタ148に対応する待ち合わせバッファ147を非使用中の待ち合わせバッファ147としてシーケンサ141に応答する(S203)。
【0136】
シーケンサ141は、待ち合わせバッファマネージャ144から非使用中の待ち合わせバッファ147の応答を受信すると、対象の第2リード指示の実行を開始する。具体的には、シーケンサ141は、まず、待ち合わせバッファマネージャ144から応答された非使用中の待ち合わせバッファ147をページの格納先として選択して、その旨を待ち合わせバッファマネージャ144に通知し、待ち合わせバッファマネージャ144は、選択された待ち合わせバッファ147に対応するカウンタ148の値を1だけインクリメントする(S204)。
【0137】
続いて、シーケンサ141は、対象の第2リード指示の実行に必要な情報をクラスタフォーマット情報132から取得して、センス処理をメモリチップ21に指示する(S205)。つまり、シーケンサ141は、センスコマンドセットを送信する。メモリチップ21においてセンス処理が開始されると、レディービジー信号線R/Bnがレディー状態からビジー状態に遷移する。メモリチップ21においてセンス処理が完了すると、レディービジー信号線R/Bnがビジー状態からレディー状態に遷移する。
【0138】
シーケンサ141は、レディービジー信号線R/Bnを監視している。レディービジー信号線R/Bnがビジー状態からレディー状態に遷移した場合、シーケンサ141は、メモリチップ21におけるセンス処理の完了を知ることができる。シーケンサ141は、メモリチップ21におけるセンス処理の完了を知ると、待ち合わせバッファ群142に、ページの格納先の待ち合わせバッファ147の指定と、指定された待ち合わせバッファ147にページを格納するバッファ格納指示と、ECC回路145に対象のクラスタを出力するバッファ出力指示と、を待ち合わせバッファ群142に送信する(S206)。そして、シーケンサ141は、ページ転送モードでのデータアウト処理を実行する(S207)。つまり、シーケンサ141は、対象のクラスタを含むページの先頭を示すカラムアドレスを含むデータアウトコマンドセットをメモリチップ21に送信し、その後、ページのサイズに対応した回数だけ一対のリードイネーブル信号RE/REnをトグルする。
【0139】
NANDC14が一対のストローブ信号DQS/DQSnに応じてメモリチップ21からページを受信すると、待ち合わせバッファ群142は、S206によってシーケンサ141から受信した指定の待ち合わせバッファ147において、バッファ格納指示、およびバッファ出力指示に基づく動作を実行する。即ち、メモリチップ21から受信したページは、待ち合わせバッファ群142のうちのシーケンサ141から指定された待ち合わせバッファ147に格納される(S208)。そして、当該待ち合わせバッファ147は、ECC回路145が処理を実行することが可能となったときに、自身に格納されたページのうちの対象のクラスタをECC回路145に出力する(S209)。待ち合わせバッファ群142は、S209の完了後、待ち合わせバッファマネージャ144に、対象のクラスタを出力した待ち合わせバッファ147を通知し、待ち合わせバッファマネージャ144は、当該通知に応じて、対象のクラスタを出力した待ち合わせバッファ147に対応するカウンタ148の値を1だけデクリメントする(S210)。
【0140】
ECC回路145は、入力された対象のクラスタに対する誤り訂正を実行して、誤り訂正が実行された後の対象のクラスタを例えばRAM13に格納することができる。
【0141】
なお、図11に示された例では、非使用中の待ち合わせバッファ147が存在した。非使用中の待ち合わせバッファ147が存在しなかった場合、つまり、シーケンサ141が待ち合わせバッファマネージャ144に問い合わせを送ったときに、値がゼロのカウンタ148が存在しなかった場合、待ち合わせバッファマネージャ144は、非使用中の待ち合わせバッファ147が存在しない旨を応答する。すると、シーケンサ141は、対象の第2リード指示の実行を後回しにして(postpone)、指示キュー146に格納されている他の指示、具体的には、非使用中の待ち合わせバッファ147を要しない動作のための指示を新たな実行対象として選択する。一例では、シーケンサ141は、ランダムリードを示すリードモードフラグが付された第2リード指示があれば、その第2リード指示を新たな実行対象として選択することができる。
【0142】
図12は、図10に示されたS106の処理において対象のクラスタが格納されたデータラッチ25が存在すると判定された場合にCPU11によって発行された、第2リード指示を実行する動作の一例を示している。この第2リード指示には、センス処理を実行しない旨を示すフラグと、シーケンシャルリードを示すリードモードフラグと、が付されている。また、対象のクラスタが跨ぎクラスタである場合には、この第2リード指示には、跨ぎフラグが付されている。この第2リード指示を、図12を参照した説明において、対象の第2リード指示と表記する。また、対象の第2リード指示によってリードの対象とされたクラスタを、図12を参照した説明において、対象のクラスタと表記する。
【0143】
シーケンサ141は、指示キュー146に格納されている1以上の第2リード指示のうちから対象の第2リード指示を選択した場合(S301)、まず、リードモードフラグを参照してシーケンシャルリードであると確認し、待ち合わせバッファマネージャ144に、対象のクラスタが格納された待ち合わせバッファ147が存在するか否かと、非使用中の待ち合わせバッファ147が存在するか否かと、を問い合わせる(S302)。待ち合わせバッファマネージャ144は、対象のクラスタが格納された待ち合わせバッファ147が存在する場合には、対象のクラスタが格納された待ち合わせバッファ147をシーケンサ141に応答する(S303)。
【0144】
シーケンサ141は、待ち合わせバッファマネージャ144から対象のクラスタが格納された待ち合わせバッファ147の応答を受信すると、対象の第2リード指示の実行を開始する。具体的には、シーケンサ141は、まず、待ち合わせバッファマネージャ144からの応答が示す待ち合わせバッファ147を選択して、当該待ち合わせバッファ147を待ち合わせバッファマネージャ144に通知し、待ち合わせバッファマネージャ144は、選択された待ち合わせバッファ147に対応するカウンタ148の値を1だけインクリメントする(S304)。
【0145】
続いて、シーケンサ141は、対象の第2リード指示の実行に必要な情報をクラスタフォーマット情報132から取得する(S305)。シーケンサ141は、対象のクラスタが格納された待ち合わせバッファ147の指定と、ECC回路145に対象のクラスタを出力するバッファ出力指示(クラスタ情報を含む)を待ち合わせバッファ群142に送信する(S306)。
【0146】
待ち合わせバッファ群142は、S306によってシーケンサ141から受信した指定の待ち合わせバッファ147において、バッファ出力指示に基づく動作を実行する。即ち、指定された待ち合わせバッファ147は、ECC回路145が処理を実行することが可能となったときに、自身に格納されたページのうちの対象のクラスタをECC回路145に入力する(S307)。待ち合わせバッファ群142は、S307の完了後、待ち合わせバッファマネージャ144に、対象のクラスタを出力した待ち合わせバッファ147を通知し、待ち合わせバッファマネージャ144は、当該通知に応じて、対象のクラスタを出力した待ち合わせバッファ147に対応するカウンタ148の値を1だけデクリメントする。
【0147】
ECC回路145は、入力された対象のクラスタに対する誤り訂正を実行して、誤り訂正が実行された後の対象のクラスタを例えばRAM13に格納することができる。
【0148】
図12に示された例では、対象のクラスタが格納された待ち合わせバッファ147が存在した。対象のクラスタが格納された待ち合わせバッファ147が存在しない場合の動作を、図13を用いて説明する。
【0149】
図13は、図10に示されたS106の処理において対象のクラスタが格納されたデータラッチ25が存在すると判定された場合にCPU11によって発行された、第2リード指示を実行する動作の別の一例を示している。この第2リード指示には、センス処理を実行しない旨を示すフラグと、シーケンシャルリードを示すリードモードフラグと、が付されている。また、対象のクラスタが跨ぎクラスタである場合には、この第2リード指示には、跨ぎフラグが付されている。この第2リード指示を、図13を参照した説明において、対象の第2リード指示と表記する。また、対象の第2リード指示によってリードの対象とされたクラスタを、図13を参照した説明において、対象のクラスタと表記する。
【0150】
シーケンサ141は、指示キュー146に格納されている1以上の第2リード指示のうちから対象の第2リード指示を選択した場合(S401)、まず、リードモードフラグを参照してシーケンシャルリードであると確認し、待ち合わせバッファマネージャ144に、対象のクラスタが格納された待ち合わせバッファ147が存在するか否かと、非使用中の待ち合わせバッファ147が存在するか否かと、を問い合わせる(S402)。待ち合わせバッファマネージャ144は、対象のクラスタが格納された待ち合わせバッファ147が存在しない場合には、対象のクラスタが格納された待ち合わせバッファ147が存在しない旨を応答する。また、対象のクラスタが格納された待ち合わせバッファ147が存在しない場合には、待ち合わせバッファマネージャ144は、非使用中の待ち合わせバッファ147が存在するか否かを判定し、非使用中の待ち合わせバッファ147が存在する場合には、非使用中の待ち合わせバッファ147を応答する。ここでは、対象のクラスタが格納された待ち合わせバッファ147が存在しない旨と、非使用中の待ち合わせバッファ147と、をシーケンサ141に応答する(S403)。
【0151】
シーケンサ141は、対象のクラスタが格納された待ち合わせバッファ147が存在しない旨と、非使用中の待ち合わせバッファ147と、を示す応答を受信すると、対象の第2リード指示の実行を開始する。具体的には、シーケンサ141は、まず、待ち合わせバッファマネージャ144から応答された非使用中の待ち合わせバッファ147をページの格納先として選択して、その旨を待ち合わせバッファマネージャ144に通知し、待ち合わせバッファマネージャ144は、選択された待ち合わせバッファ147に対応するカウンタ148の値を1だけインクリメントする(S404)。
【0152】
続いて、シーケンサ141は、対象の第2リード指示の実行に必要な情報をクラスタフォーマット情報132から取得する(S405)。シーケンサ141は、ページの格納先の待ち合わせバッファ147の指定と、指定された待ち合わせバッファ147にページを格納するバッファ格納指示と、ECC回路145に対象のクラスタを出力するバッファ出力指示と、を待ち合わせバッファ群142に送信する(S406)。
【0153】
そして、シーケンサ141は、ページ転送モードでのデータアウト処理をメモリチップ21に指示する(S407)。つまり、シーケンサ141は、ページの先頭を示すカラムアドレスを含むデータアウトコマンドセットをメモリチップ21に送信し、その後、ページのサイズに対応した回数だけ一対のリードイネーブル信号RE/REnをトグルする。
【0154】
NANDC14が一対のストローブ信号DQS/DQSnに応じてメモリチップ21からページを受信すると、待ち合わせバッファ群142は、S406によってシーケンサ141から受信した指定の待ち合わせバッファ147において、バッファ格納指示、およびバッファ出力指示に基づく動作を実行する。即ち、メモリチップ21から受信したページは、待ち合わせバッファ群142のうちのシーケンサ141から指定された待ち合わせバッファ147に格納される(S408)。そして、当該待ち合わせバッファ147は、ECC回路145が処理を実行することが可能となったときに、自身に格納されたページのうちの対象のクラスタをECC回路145に出力する(S409)。待ち合わせバッファ群142は、S409の完了後、待ち合わせバッファマネージャ144に、対象のクラスタを出力した待ち合わせバッファ147を通知し、待ち合わせバッファマネージャ144は、当該通知に応じて、対象のクラスタを出力した待ち合わせバッファ147に対応するカウンタ148の値を1だけデクリメントする(S410)。
【0155】
ECC回路145は、入力された対象のクラスタに対する誤り訂正を実行して、誤り訂正が実行された後の対象のクラスタを例えばRAM13に格納することができる。
【0156】
なお、図13に示された例では、非使用中の待ち合わせバッファ147が存在した。非使用中の待ち合わせバッファ147が存在しなかった場合、つまり、シーケンサ141が待ち合わせバッファマネージャ144に問い合わせを送ったときに、値がゼロのカウンタ148が存在しなかった場合、待ち合わせバッファマネージャ144は、非使用中の待ち合わせバッファ147が存在しない旨を応答する。すると、シーケンサ141は、対象の第2リード指示の実行を後回しにして、指示キュー146に格納されている他の指示、具体的には、非使用中の待ち合わせバッファ147を要しない動作のための指示を新たな実行対象として選択する。一例では、シーケンサ141は、ランダムリードを示すリードモードフラグが付された第2リード指示があれば、その第2リード指示を新たな実行対象として選択することができる。
【0157】
図14は、図10に示されたS103の処理において対象のクラスタのリードモードをランダムリードに設定すると判定された場合にCPU11によって発行された、第2リード指示を実行する動作の一例を示している。この第2リード指示には、センス処理を実行する旨を示すフラグと、ランダムリードを示すリードモードフラグと、が付されている。また、対象のクラスタが跨ぎクラスタである場合には、この第2リード指示には、跨ぎフラグが付されている。この第2リード指示を、図14を参照した説明において、対象の第2リード指示と表記する。また、対象の第2リード指示によってリードの対象とされたクラスタを、図14を参照した説明において、対象のクラスタと表記する。
【0158】
シーケンサ141は、指示キュー146に格納されている1以上の第2リード指示のうちから対象の第2リード指示を選択した場合(S501)、まず、ランダムバッファ143が空いているか否かを判定する。ランダムバッファ143が空いているか否かの判定の方法は特定の方法に限定されない。一例では、ランダムバッファ143は、自身が空いているか否かを示す情報を常時、シーケンサ141に送信し、シーケンサ141は、ランダムバッファ143から受信した情報に基づいてランダムバッファ143が空いているか否かを判定する。なお、ランダムバッファ143が空いているとは、ランダムバッファ143に例えば1クラスタ分の空きがあることをいう。
【0159】
ランダムバッファ143が空いている場合、シーケンサ141は、対象の第2リード指示の実行を開始する(S502)。具体的には、シーケンサ141は、まず、対象の第2リード指示の実行に必要な情報をクラスタフォーマット情報132から取得し、センス処理をメモリチップ21に指示する(S503)。つまり、シーケンサ141は、センスコマンドセットを送信する。メモリチップ21においてセンス処理が開始されると、レディービジー信号線R/Bnがレディー状態からビジー状態に遷移する。メモリチップ21においてセンス処理が完了すると、レディービジー信号線R/Bnがビジー状態からレディー状態に遷移する。
【0160】
シーケンサ141は、メモリチップ21におけるセンス処理の完了をレディービジー信号線R/Bnに基づいて知ると、ランダムバッファ143に、対象のクラスタを格納するバッファ格納指示と、ECC回路145に対象のクラスタを出力するバッファ出力指示と、を送信する(S504)。そして、シーケンサ141は、クラスタ転送モードでのデータアウト処理をメモリチップ21に指示する(S505)。つまり、シーケンサ141は、対象のクラスタの先頭を示すカラムアドレスを含むデータアウトコマンドセットをメモリチップ21に送信し、その後、対象のクラスタのサイズに対応した回数だけ一対のリードイネーブル信号RE/REnをトグルする。
【0161】
NANDC14が対象のクラスタを受信すると、ランダムバッファ143は、S504によってシーケンサ141から受信したバッファ格納指示およびバッファ出力指示に基づく動作を実行する。即ち、メモリチップ21から受信した対象のクラスタは、ランダムバッファ143に格納される(S506)。そして、ランダムバッファ143は、ECC回路145が処理を実行することが可能となったときに、自身に格納された対象のクラスタをECC回路145に出力する(S507)。
【0162】
ECC回路145は、入力された対象のクラスタに対する誤り訂正を実行して、誤り訂正が実行された後の対象のクラスタを例えばRAM13に格納することができる。
【0163】
なお、跨ぎクラスタに関しては、シーケンシャルリードの場合は、例えば、跨ぎクラスタの前半部分と跨ぎクラスタの後半部分とでそれぞれ異なる第2リード指示がCPU11によって生成され、指示キュー146に格納される。NANDC14は、跨ぎクラスタの前半部分にかかる第2リード指示と、跨ぎクラスタの後半部分にかかる第2リード指示と、のそれぞれに対し、図11図13に示された動作の何れかの動作を実行する。ただし、待ち合わせバッファ群142からECC回路145への対象のクラスタの出力の際には、対象のクラスタの前半部分の出力と、対象のクラスタの後半部分の出力と、がこの順番で実行される。待ち合わせバッファ群142からの対象のクラスタの前半部分の出力は、待ち合わせバッファ群142から対象のクラスタの後半部分の出力と待ち合わせて実行される。
【0164】
跨ぎクラスタに関し、ランダムリードの場合は、例えば、跨ぎクラスタの前半部分と跨ぎクラスタの後半部分とをリードの対象とする1つの第2リード指示がCPU11によって生成され、指示キュー146に格納される。NANDC14は、当該第2リード指示を実行する際には、図14に示されたS503の処理を、対象のクラスタの前半部分と、対象のクラスタの後半部分と、のそれぞれについて実行する。そして、S504の処理が1度だけ実行される。そして、S505~S506の処理が、対象のクラスタの前半部分について実行され、その後、対象のクラスタの後半部分について実行される。これによって、ランダムバッファ143において、対象のクラスタの前半部分と対象のクラスタの後半部分が結合される。そして、S507の処理が実行される。
【0165】
図15は、実施形態の待ち合わせバッファ群142の管理方法を説明するための図である。ここでは、図7に示された例において、Nの値が「23」である場合に、クラスタCL1~クラスタCL6がこの順番で第1リード指示によってリードの対象とされた場合について説明する。クラスタCL3は、跨ぎクラスタであり、プレーン#0のロアーページに格納されたクラスタCL3の前半部分(クラスタCL3aと表記する)と、プレーン#1のロアーページに格納されたクラスタCL3の後半部分(クラスタCL3bと表記する)と、に分割されている。
【0166】
また、クラスタCL1~クラスタCL6のそれぞれのリードは、図10に示されたS103の判定処理により、シーケンシャルリードを示すリードモードフラグが付された第2リード指示によってNANDC14に指示される。そして、クラスタCL3をリードの対象とする第2リード指示には、跨ぎフラグが付されている。
【0167】
また、クラスタCL1~クラスタCL6のリードが開始された時点では、複数の待ち合わせバッファ147のうちの待ち合わせバッファ#0と待ち合わせバッファ#1とが非使用中、つまりそれぞれに対応するカウンタ148の値がゼロ、であることとする。
【0168】
なお、クラスタCL1~クラスタCL6は、プレーン#0に属する1つのページと、プレーン#1に属する1つのページと、に分散して格納されている。つまり、プレーン#0およびプレーン#1のそれぞれにおいてセンス処理の実行が必要である。また、センス処理は、データアウト処理などに比べて長い時間を要する。そこで、CPU11は、プレーン#0およびプレーン#1のそれぞれにおいてセンス処理の実行を優先的に実行できるように、指示キュー146への第2リード指示のエンキューの順番をコントロールしてもよい。
【0169】
図15に示すように、ここでは一例として、CPU11は、クラスタCL1をリードの対象とする第2リード指示、クラスタCL3bをリードの対象とする第2リード指示、クラスタCL2をリードの対象とする第2リード指示、クラスタCL3aをリードの対象とする第2リード指示、クラスタCL4をリードの対象とする第2リード指示、クラスタCL5をリードの対象とする第2リード指示、およびクラスタCL6をリードの対象とする第2リード指示をこの順番で指示キュー146にエンキューしたこととする。
【0170】
まず、シーケンサ141は、クラスタCL1をリードの対象とする第2リード指示の実行を開始する(S601)。クラスタCL1をリードの対象とする第2リード指示の実行には、センス処理と、ページ転送モードでのデータアウト処理と、待ち合わせバッファ#0からのクラスタCL1の出力と、が含まれている。つまり、非使用中であった待ち合わせバッファ#0が選択され、NANDC14は、ページ転送モードでのデータアウト処理によってメモリチップ21から受信したクラスタCL1を含むページを、選択された待ち合わせバッファ#0に格納する。そして、選択された待ち合わせバッファ#0に格納されたデータのうちのクラスタCL1がECC回路145に出力される。クラスタCL1をリードの対象とする第2リード指示の実行の開始の際に、待ち合わせバッファ#0に対応するカウンタ148の値は、1だけインクリメントされて1になる。
【0171】
続いて、シーケンサ141は、クラスタCL3bをリードの対象とする第2リード指示の実行を開始する(S602)。クラスタCL3bをリードの対象とする第2リード指示の実行には、センス処理と、ページ転送モードでのデータアウト処理と、待ち合わせバッファ#1からのクラスタCL3bの出力と、が含まれている。つまり、非使用中であった待ち合わせバッファ#1が選択され、NANDC14は、ページ転送モードでのデータアウト処理によってメモリチップ21から受信したクラスタCL3bを含むページを、選択された待ち合わせバッファ#1に格納する。そして、選択された待ち合わせバッファ#1に格納されたデータのうちのクラスタCL3bがECC回路145に出力される。クラスタCL3bをリードの対象とする第2リード指示の実行の開始の際に、待ち合わせバッファ#1に対応するカウンタ148の値は、1だけインクリメントされて1になる。
【0172】
続いて、シーケンサ141は、クラスタCL2をリードの対象とする第2リード指示の実行を開始する(S603)。クラスタCL2をリードの対象とする第2リード指示の実行には、待ち合わせバッファ#0からのクラスタCL2の出力が含まれている。クラスタCL2をリードの対象とする第2リード指示の実行の開始の際に、待ち合わせバッファ#0に対応するカウンタ148の値は、1だけインクリメントされて2になる。
【0173】
続いて、シーケンサ141は、クラスタCL3aをリードの対象とする第2リード指示の実行を開始する(S604)。クラスタCL3aをリードの対象とする第2リード指示の実行には、待ち合わせバッファ#0からのクラスタCL3aの出力が含まれている。クラスタCL3aをリードの対象とする第2リード指示の実行の開始の際に、待ち合わせバッファ#0に対応するカウンタ148の値は、1だけインクリメントされて3になる。
【0174】
続いて、シーケンサ141は、クラスタCL4をリードの対象とする第2リード指示の実行を開始する(S605)。クラスタCL4をリードの対象とする第2リード指示の実行には、待ち合わせバッファ#1からのクラスタCL4の出力が含まれている。クラスタCL4をリードの対象とする第2リード指示の実行の開始の際に、待ち合わせバッファ#1に対応するカウンタ148の値は、1だけインクリメントされて2になる。
【0175】
続いて、シーケンサ141は、クラスタCL5をリードの対象とする第2リード指示の実行を開始する(S606)。クラスタCL5をリードの対象とする第2リード指示の実行には、待ち合わせバッファ#1からのクラスタCL5の出力が含まれている。クラスタCL5をリードの対象とする第2リード指示の実行の開始の際に、待ち合わせバッファ#1に対応するカウンタ148の値は、1だけインクリメントされて3になる。
【0176】
続いて、シーケンサ141は、クラスタCL6をリードの対象とする第2リード指示の実行を開始する(S607)。クラスタCL6をリードの対象とする第2リード指示の実行には、待ち合わせバッファ#1からのクラスタCL6の出力が含まれている。クラスタCL6をリードの対象とする第2リード指示の実行の開始の際に、待ち合わせバッファ#1に対応するカウンタ148の値は、1だけインクリメントされて4になる。
【0177】
続いて、待ち合わせバッファ#0からECC回路145へのクラスタCL1の出力が完了する(S608)。これによって、待ち合わせバッファ#0に対応するカウンタ148の値は、1だけデクリメントされて2になる。
【0178】
続いて、待ち合わせバッファ#0からECC回路145へのクラスタCL2の出力が完了する(S609)。これによって、待ち合わせバッファ#0に対応するカウンタ148の値は、1だけデクリメントされて1になる。
【0179】
続いて、待ち合わせバッファ#0からECC回路145へのクラスタCL3aの出力が完了する(S610)。これによって、待ち合わせバッファ#0に対応するカウンタ148の値は、1だけデクリメントされて0になる。
【0180】
続いて、待ち合わせバッファ#1からECC回路145へのクラスタCL3bの出力が完了する(S611)。これによって、待ち合わせバッファ#1に対応するカウンタ148の値は、1だけデクリメントされて3になる。
【0181】
続いて、待ち合わせバッファ#1からECC回路145へのクラスタCL4の出力が完了する(S612)。これによって、待ち合わせバッファ#1に対応するカウンタ148の値は、1だけデクリメントされて2になる。
【0182】
続いて、待ち合わせバッファ#1からECC回路145へのクラスタCL5の出力が完了する(S613)。これによって、待ち合わせバッファ#1に対応するカウンタ148の値は、1だけデクリメントされて1になる。
【0183】
続いて、待ち合わせバッファ#1からECC回路145へのクラスタCL6の出力が完了する(S614)。これによって、待ち合わせバッファ#1に対応するカウンタ148の値は、1だけデクリメントされて0になる。
【0184】
図16は、実施形態の待ち合わせバッファ群142およびランダムバッファ143の動作の一例を示すフローチャートである。待ち合わせバッファ群142およびランダムバッファ143を総称して、バッファと表記する。なお、本図に示された一連の動作は、待ち合わせバッファ群142およびランダムバッファ143に対するデータの入出力を管理する不図示のバッファマネージャによって管理される。よって、本図の説明では、バッファマネージャを動作の主体として説明する。
【0185】
まず、バッファマネージャは、バッファ出力指示をシーケンサ141から受信したか否かを判定する(S701)。バッファ出力指示を受信していない場合には(S701:No)、S701の処理が再び実行される。
【0186】
バッファマネージャがバッファ出力指示を受信した場合において(S701:Yes)、出力対象のクラスタのリードモードがシーケンシャルモードであり(S702:Yes)、出力対象のクラスタが跨ぎクラスタである場合(S703:Yes)、バッファマネージャは、出力対象のクラスタの前半部分が第1量以上、待ち合わせバッファ群142に格納されており、かつ、出力対象のクラスタの後半部分に対するバッファ格納指示およびバッファ出力指示をシーケンサ141から受信済みである、という条件が満たされているか否かを判定する(S704)。
【0187】
出力対象のクラスタのリードモードがシーケンシャルモードである場合、待ち合わせバッファ群142が使用される。また、出力対象のクラスタが跨ぎクラスタである場合、出力対象のクラスタの前半部分を含むページと、出力対象のクラスタの後半部分を含むページと、がそれぞれ異なる待ち合わせバッファ147に格納される。出力対象のクラスタの前半部分を含むページと、出力対象のクラスタの後半部分を含むページと、のそれぞれの格納先の待ち合わせバッファ147が確定しており、かつ、出力対象のクラスタの前半部分および後半部分の出力が指示されており、かつ、出力対象のクラスタの前半部分が所定量(ここでは第1量)、待ち合わせバッファ147に溜まっていれば、出力対象のクラスタの待ち合わせバッファ群142からの出力の開始が可能である。つまり、S704では、出力対象のクラスタの待ち合わせバッファ群142からの出力の開始が可能であるか否かが判定される。
【0188】
なお、第1量は、任意に設定され得る。一例では、第1量は、待ち合わせバッファ群142およびランダムバッファ143とECC回路145とを接続する配線のバス幅に応じて決定される。例えば待ち合わせバッファ群142およびランダムバッファ143とECC回路145とを接続する配線のバス幅が64ビットである場合、64ビットが第1量として設定され得る。
【0189】
S704の条件が満たされていない場合(S704:No)、S704の処理が再び実行される。
【0190】
S704の条件が満たされた場合(S704:Yes)、バッファマネージャは、出力対象のクラスタの前半部分および後半部分を、待ち合わせバッファ群142から、この順番で出力する(S705)。そして、制御がS701に遷移する。
【0191】
なお、S704の判定処理においてYesと判定された時点で出力対象のクラスタのうち、待ち合わせバッファ群142に未格納の部分が存在する場合、当該部分は、S705の処理が実行されている最中に待ち合わせバッファ群142に格納される。つまり、待ち合わせバッファ群142では、出力対象のクラスタの入力と、出力対象のクラスタの出力と、が同時に実行される。これによって、出力対象のクラスタの前半部分の全ておよび後半部分の全てが待ち合わせバッファ群142に格納されてからS705の処理が開始される場合に比べて、出力対象のクラスタの出力開始のタイミングを早めることが可能である。なお、バッファマネージャは、出力対象のクラスタの前半部分の全ておよび後半部分の全てが待ち合わせバッファ群142に格納されるまで待ってからS705の処理を開始してもよい。
【0192】
出力対象のクラスタのリードモードがシーケンシャルモードであり(S702:Yes)、出力対象のクラスタが跨ぎクラスタでない場合(S703:No)、バッファマネージャは、出力対象のクラスタが第1量以上、待ち合わせバッファ群142に格納されているか否かを判定する(S706)。
【0193】
出力対象のクラスタが第1量以上、待ち合わせバッファ群142に格納されていない場合(S706:No)、S706の処理が再び実行される。
【0194】
出力対象のクラスタが第1量以上、待ち合わせバッファ群142に格納されている場合(S706:Yes)、バッファマネージャは、出力対象のクラスタを待ち合わせバッファ群142から出力する(S707)。そして、制御がS701に遷移する。
【0195】
なお、バッファマネージャは、出力対象のクラスタの全てが待ち合わせバッファ群142に格納されるまで待ってからS707の処理を開始してもよい。
【0196】
出力対象のクラスタのリードモードがシーケンシャルモードでない場合(S702:No)、つまり、出力対象のクラスタのリードモードがランダムモードである場合、出力対象のクラスタが跨ぎクラスタに該当するか否かに関係なく、出力対象のクラスタは、ランダムバッファ143に格納される。バッファマネージャは、出力対象のクラスタが第1量以上、ランダムバッファ143に格納されているか否かを判定する(S708)。
【0197】
出力対象のクラスタが第1量以上、ランダムバッファ143に格納されていない場合(S708:No)、S708の処理が再び実行される。
【0198】
出力対象のクラスタが第1量以上、ランダムバッファ143に格納されている場合(S708:Yes)、バッファマネージャは、出力対象のクラスタをランダムバッファ143から出力する(S709)。そして、制御がS701に遷移する。
【0199】
なお、バッファマネージャは、出力対象のクラスタの全てがランダムバッファ143に格納されるまで待ってからS709の処理を開始してもよい。
【0200】
このように、実施形態によれば、シーケンシャルリードの場合、たとえリードの対象とされたクラスタの群が跨ぎクラスタを含んでいたとしても、リードの対象とされたクラスタを一部でも含むページが、そのままメモリチップ21からNANDC14に転送され、NANDC14において待ち合わせバッファ群142に格納される。リードの対象とされた2以上のクラスタは、待ち合わせバッファ群142から順次、ECC回路145に出力される。リードの対象とされたクラスタが跨ぎクラスタである場合には、当該跨ぎクラスタの前半部分を含むページが格納された1つの待ち合わせバッファ147から当該前半部分がECC回路145に出力され、続いて、当該跨ぎクラスタの後半部分を含むページが格納された他の待ち合わせバッファ147から当該後半部分がECC回路145に出力される。
【0201】
つまり、実施形態によれば、シーケンシャルリードのリードモードが設定された場合には、たとえリードの対象とされた2以上のクラスタが跨ぎクラスタを含んでいようとも、当該跨ぎクラスタの前半部分のデータアウト処理と、跨ぎクラスタの後半部分のデータアウト処理と、を待ち合わせる必要がない。
【0202】
従って、実施形態によれば、シーケンシャルリードのリードモードを利用することによって、プレーン#0とプレーン#1とを並列に動作させることが可能である。
【0203】
図17は、実施形態にかかる1つのメモリチップ21において2つのプレーンを並列に動作させる例を説明するための図である。ここでは、Nの値が「23」であるスーパーページに対して、クラスタCL0~クラスタCL6、クラスタCL8、クラスタCL7、クラスタCL9~クラスタCL22をこの順番でリードするように23個の第1リード指示がエントリーキュー134に格納され、その後、S103の判定処理によって、クラスタCL0~クラスタCL6、クラスタCL8、クラスタCL7、クラスタCL9~クラスタCL22のそれぞれのリードモードとしてシーケンシャルリードが設定された場合について説明する。
【0204】
なお、クラスタCL3、クラスタCL7、クラスタCL11、クラスタCL15、およびクラスタCL19、のそれぞれは、跨ぎクラスタに該当する。跨ぎクラスタの前半部分を、クラスタCLYa、跨ぎクラスタの後半部分を、クラスタCLYb、と表記する。ただし、Yは、3,7,11,15,または19である。
【0205】
NANDC14は、まず、プレーン#0のアクセス回路24に、クラスタCL0~CL3aからなるページをデータラッチ25に格納するセンス処理を実行させる(時刻t0)。すると、プレーン#0においてセンス処理が開始される。
【0206】
続いて、NANDC14は、プレーン#1のアクセス回路24に、クラスタCL3b~CL7aからなるページをデータラッチ25に格納するセンス処理を実行させる(時刻t1)。すると、プレーン#1においてセンス処理が開始される。
【0207】
プレーン#0においてセンス処理が完了すると、NANDC14は、クラスタCL0~CL3aからなるページのデータアウト処理を実行する。つまり、NANDC14は、プレーン#0のデータラッチ25に格納されたクラスタCL0~CL3aからなるページを、ページ転送モードで取得する。
【0208】
続いて、クラスタCL3b~CL7aからなるページのセンス処理が完了する(時刻t2)。この図の説明においては、クラスタCL3b~CL7aからなるページのセンス処理が完了する時刻t2は、クラスタCL0~CL3aからなるページのデータアウト処理が完了する時刻よりも早い。データアウト処理の最中は、チャネルがデータアウト処理によって占有されている。よって、クラスタCL3b~CL7aからなるページのデータアウト処理は、チャネルが利用可能になるまで待たされる。
【0209】
クラスタCL0~CL3aからなるページのページ転送モードでのデータアウト処理が完了すると、NANDC14は、プレーン#0のアクセス回路24に、クラスタCL7b~CL11aからなるページをデータラッチ25に格納するセンス処理を実行させた後、プレーン#1のデータラッチ25に格納されたクラスタCL3b~CL7aからなるページのページ転送モードでのデータアウト処理を実行させる(時刻t3)。
【0210】
クラスタCL3b~CL7aからなるページのページ転送モードでのデータアウト処理が完了すると、NANDC14は、プレーン#1のアクセス回路24に、クラスタCL11b~CL15aからなるページをデータラッチ25に格納するセンス処理を実行させる。
【0211】
プレーン#0において、クラスタCL7b~CL11aからなるページのセンス処理が完了すると、NANDC14は、クラスタCL7b~CL11aからなるページのデータアウト処理を開始する。
【0212】
プレーン#0におけるクラスタCL7b~CL11aからなるページのデータアウト処理と、プレーン#1におけるクラスタCL11b~CL15aからなるページのセンス処理と、は、この図の説明においてはほぼ同じタイミングで完了する。プレーン#0におけるクラスタCL7b~CL11aからなるページのデータアウト処理と、プレーン#1におけるクラスタCL11b~CL15aからなるページのセンス処理と、が完了すると、NANDC14は、プレーン#0のアクセス回路24に、クラスタCL15b~CL19aからなるページをデータラッチ25に格納するセンス処理を実行させた後、プレーン#1のデータラッチ25に格納されたクラスタCL11b~CL15aからなるページのページ転送モードでのデータアウト処理を実行させる(時刻t4)。
【0213】
プレーン#1において、クラスタCL11b~CL15aからなるページのページ転送モードでのデータアウト処理が完了すると、NANDC14は、プレーン#1のアクセス回路24に、クラスタCL19b~CL22からなるページをデータラッチ25に格納するセンス処理を実行させる。以降の処理の説明は省略される。
【0214】
NANDC14では、待ち合わせバッファ群142に、クラスタCL0~CL3aからなるページ、クラスタCL3b~CL7aからなるページ、クラスタCL7b~CL11aからなるページ、クラスタCL11b~CL15aからなるページ、クラスタCL15b~CL19aからなるページ、およびクラスタCL19b~CL22からなるページ、が格納される。そして、待ち合わせバッファ群142から、クラスタCL0~クラスタCL6、クラスタCL7、クラスタCL8、クラスタCL9~クラスタCL22がこの順番でECC回路145に出力される。
【0215】
シーケンシャルリードのリードモードでは、たとえリードの対象とされた複数のクラスタが跨ぎクラスタを含んでいようとも、当該跨ぎクラスタの前半部分のデータアウト処理と、跨ぎクラスタの後半部分のデータアウト処理と、を待ち合わせる必要がない。よって、図17に示されたように、2つのプレーンの一方においてセンス処理が実行されているときに2つのプレーンの他方においてデータアウト処理を実行させ、当該他方のプレーンにおいてセンス処理が実行されているときに当該一方のプレーンにおいてデータアウト処理を実行させる、というインターリーブ動作が可能となる。
【0216】
以上述べたように、実施形態によれば、リード対象に設定されたクラスタが、プレーン#0のサブアレイ23に一部(第1断片と表記する)が格納され、プレーン#1のサブアレイに残りの一部(第2断片と表記する)が格納された、跨ぎクラスタである場合、メモリコントローラ10、特にNANDC14は、下記の動作を実行することができる。即ち、NANDC14は、プレーン#0のアクセス回路24に、第1断片を含むページのセンス処理を実行させることで、第1断片を含むページをプレーン#0のデータラッチ25に格納させ、プレーン#1のアクセス回路24に、第2断片を含むページのセンス処理を実行させることで、第2断片を含むページをプレーン#1のデータラッチ25に格納させる。そして、NANDC14は、プレーン#0のデータラッチ25に格納された第1断片を含むページをメモリチップ21から出力させて、当該第1断片を含むページを待ち合わせバッファ147のうちの1つ(第1バッファと表記する)に格納する。また、NANDC14は、プレーン#1のデータラッチ25に格納された第2断片を含むページをメモリチップ21から出力させて、当該第2断片を含むページを待ち合わせバッファ147のうちの別の1つ(第2バッファと表記する)に格納する。そして、NANDC14は、第1バッファに格納されたページから第1断片を読み出して、第2バッファに格納されたページから第2断片を読み出して、第1断片と第2断片とを結合してECC回路145に入力する。
【0217】
よって、第1断片を転送するためのデータアウト処理と、第2断片を転送するためのデータアウト処理と、を待ち合わせる必要がない。その結果、プレーン#0とプレーン#1とをインターリーブ動作させることが可能となるので、メモリチップからメモリコントローラへのデータの転送速度が向上する。
【0218】
実施形態によれば、NANDC14は、第1断片を含むページの出力を指示するデータアウトコマンドセットをメモリチップ21に送信する。メモリチップ21は、当該データアウトコマンドセットを受信すると、第1断片を含むページの出力を、ページ単位で出力する。換言すると、メモリチップ21は、第1断片を含むページの出力が完了するまで何れのコマンドの入力も要することなく第1断片を含むページの出力を実行する。また、NANDC14は、第2断片を含むページの出力を指示するデータアウトコマンドセットをメモリチップ21に送信する。メモリチップ21は、当該データアウトコマンドセットを受信すると、第2断片を含むページの出力を、ページ単位で出力する。換言すると、メモリチップ21は、第2断片を含むページの出力が完了するまで何れのコマンドの入力も要することなく第2断片を含むページの出力を実行する。
【0219】
よって、第1断片または第2断片と同じページに、跨ぎクラスタとは別のリード対象のクラスタが含まれている場合には、NANDC14は、第1バッファまたは第2バッファから当該別のリード対象のクラスタを取得することができる。つまり、当該別のリード対象のクラスタと、跨ぎクラスタと、のそれぞれのために個別にデータアウト処理を実行することが不要となる。
【0220】
実施形態によれば、NANDC14は、ページ転送モードと、クラスタ転送モードと、の何れの転送モードでも動作することができる。メモリチップ21からNANDC14へのデータの転送モードは、ページ転送モードと、クラスタ転送モードと、の他に任意のモードを含んでもよい。
【0221】
実施形態によれば、メモリコントローラ10、特にCPU11は、別のリード対象のクラスタが、第1断片を含むページと、第2断片を含むページと、のうちの何れかに含まれているか否かを判定する。当該別のリード対象のクラスタが、第1断片を含むページと、第2断片を含むページと、のうちの何れかに含まれている場合、CPU11はリードモードとしてシーケンシャルリードを選択する。シーケンシャルリードが選択された場合、NANDC14は、ページ転送モードでデータアウト処理を実行する。別のリード対象のクラスタが、第1断片を含むページと、第2断片を含むページと、のうちの何れにも含まれていない場合、CPU11はリードモードとしてランダムリードを選択する。ランダムリードのリードモードが選択された場合、NANDC14は、クラスタ転送モードでデータアウト処理を実行する。
【0222】
実施形態によれば、メモリコントローラ10、特にNANDC14は、ランダムリードが選択された場合、プレーン#0のデータラッチ25に格納されているページのうちの第1断片をメモリチップ21に出力させ、プレーン#1のデータラッチ25に格納されているページのうちの第2断片をメモリチップ21に出力させる。そして、NANDC14は、第1断片および第2断片を結合してECC回路145に入力する。
【0223】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0224】
1 メモリシステム、2 ホスト、10 メモリコントローラ、20 NANDメモリ、21 メモリチップ、22 メモリセルアレイ、23 サブアレイ、24 アクセス回路、25 データラッチ、26 NANDストリング、131 翻訳情報、132 クラスタフォーマット情報、133 データラッチ情報、134 エントリーキュー、141 シーケンサ、142 待ち合わせバッファ群、143 ランダムバッファ、144 待ち合わせバッファマネージャ、145 ECC回路、146 指示キュー、147 待ち合わせバッファ、148 カウンタ。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17