(57)【要約】【課題】ホストからのリード要求に対するレイテンシを低減すること。【解決手段】メモリシステムは、不揮発性のメモリと、コントローラとを備える。メモリは、メモリセルアレイを備える。コントローラは、メモリにコマンド、アドレス、および第１データを転送する転送フェーズと、転送フェーズの後にメモリに第１データをメモリセルアレイにプログラムさせるプログラムフェーズと、を制御する。コントローラは、転送フェーズの開始後かつ転送フェーズが完了する前に転送フェーズを中断してメモリから第２データをリードし、第２データのリードが完了した後に転送フェーズを再開する。【選択図】図９
2019057147.tif 000002
【特許請求の範囲】
【請求項１】
メモリセルアレイを備える不揮発性のメモリと、
前記メモリにコマンド、アドレス、および第１データを転送する転送フェーズと、前記転送フェーズの後に前記メモリに前記第１データを前記メモリセルアレイにプログラムさせるプログラムフェーズと、を制御し、前記転送フェーズの開始後かつ前記転送フェーズが完了する前に前記転送フェーズを中断して前記メモリから第２データをリードし、前記第２データのリードが完了した後に、前記転送フェーズを再開する、コントローラと、
を備えるメモリシステム。
【請求項２】
前記メモリは、前記メモリと前記コントローラとの間のデータ転送用の転送バッファと、退避バッファとをさらに備え、
前記メモリは、前記転送フェーズの中断後、第３データを前記転送バッファから前記退避バッファに退避し、前記第３データは前記第１データのうちの前記中断のタイミングまでに前記転送バッファに転送された一部または全部であり、前記第３データの退避が完了した後、前記第２データを前記転送バッファを介して前記メモリセルアレイから前記コントローラに転送し、前記第２データの転送が完了した後、前記退避バッファ内の前記第３データを前記転送バッファに復元する、
請求項１に記載のメモリシステム。
【請求項３】
前記メモリは、前記メモリと前記コントローラとの間のデータ転送用の転送バッファと、中間バッファと、を備え、
前記メモリセルアレイは、複数のワードラインを備え、
前記複数のワードラインのそれぞれは第１記憶領域および第２記憶領域を備え、
前記第１データは、第３データおよび第４データを含み、
前記第３データは、前記第１記憶領域が書き込み先であるデータであり、
前記第４データは、前記第３データと同一のワードラインに属する前記第２記憶領域が書き込み先であるデータであり、
前記コントローラは、
前記転送バッファに前記第３データを転送し、
前記第３データの転送が完了した後でかつ前記転送バッファに前記第４データを転送開始する前に、前記メモリに前記第３データを前記転送バッファから前記中間バッファに取得させ、その後、前記メモリセルアレイから前記転送バッファを介して前記第２データを取得し、
前記第２データの取得後、前記転送バッファに前記第４データを転送し、
前記第４データの転送が完了した後、前記第４データと前記中間バッファに取得された第３データとを前記メモリセルアレイに書き込ませる、
請求項１に記載のメモリシステム。
【請求項４】
前記複数のワードラインのそれぞれは、複数ビットの容量を有するメモリセルを備え、前記第１記憶領域は、前記複数ビットのうちの第１のビットによって構成され、前記第２記憶領域は、前記複数ビットのうちの第２のビットによって構成される、
請求項３に記載のメモリシステム。
【請求項５】
前記メモリは、前記メモリと前記コントローラとの間のデータ転送用の転送バッファをさらに備え、
前記メモリセルアレイは、複数のサブアレイを備え、
前記転送バッファは、それぞれ異なるサブアレイに対応した複数の第１転送バッファを備え、
前記第１データは、第３データおよび第４データを含み、
前記第３データは、前記複数のサブアレイのうちの第１サブアレイが書き込み先であるデータであり、
前記第４データは、前記第３データの次に転送される、前記複数のサブアレイのうちの第２サブアレイが書き込み先であるデータであり、
前記コントローラは、
第２転送バッファに前記第３データを転送し、前記第２転送バッファは前記複数の第１転送バッファのうちの前記第１サブアレイに対応した第１転送バッファであり、
前記第３データの転送が完了した後でかつ前記第４データを第３転送バッファに転送開始する前のタイミングにおいて、前記転送フェーズを中断し、前記第３転送バッファは前記複数の第１転送バッファのうちの前記第２サブアレイに対応した第１転送バッファである、
請求項１に記載のメモリシステム。
【請求項６】
前記コントローラは、第４転送バッファに第５データが格納されていない場合に、前記転送フェーズを中断し、
前記第４転送バッファは、前記複数のサブアレイのうちの前記第２データの読み出し元のサブアレイに対応する、前記複数の第１転送バッファのうちの１つの第１転送バッファであり、
前記第５データは、前記第１データのうちの前記中断のタイミングまでに転送された一部または全部である、
請求項５に記載のメモリシステム。
【請求項７】
前記メモリは、退避バッファをさらに備え、
前記コントローラは、前記転送フェーズの中断後、第４転送バッファに第５データが格納されている場合、前記第５データを前記第４転送バッファから前記退避バッファに退避し、前記第５データの退避が完了した後、前記第２データを前記第４転送バッファを介して前記メモリセルアレイから前記コントローラに転送し、前記第２データの転送が完了した後、前記退避バッファ内の前記第５データを前記第４転送バッファに復元し、
前記第４転送バッファは、前記複数のサブアレイのうちの前記第２データの読み出し元のサブアレイに対応する、前記複数の第１転送バッファのうちの１つの第１転送バッファであり、
前記第５データは、前記第１データのうちの前記中断のタイミングまでに転送された部分である、
請求項５に記載のメモリシステム。
【請求項８】
前記メモリセルアレイは、複数のサブアレイを備え、
前記転送バッファは、それぞれ異なるサブアレイに対応した複数の第１転送バッファを備え、
前記メモリは、前記複数の第１転送バッファのそれぞれに前記第３データが格納されているか否かにかかわらず、前記複数の第１転送バッファの内容を前記退避バッファに退避する、
請求項２に記載のメモリシステム。
【請求項９】
前記メモリセルアレイは、複数のサブアレイを備え、
前記転送バッファは、それぞれ異なるサブアレイに対応した複数の第１転送バッファを備え、
前記メモリは、前記複数の第１転送バッファのうちの第２転送バッファの内容を前記退避バッファに退避し、前記複数の第１転送バッファのうちの第３転送バッファの内容を前記退避バッファに退避せず、
前記第２転送バッファは、前記複数の第１転送バッファのうちの前記第３データが一部または全部に格納された第１転送バッファであり、
前記第３転送バッファは、前記複数の第１転送バッファのうちの前記第３データが格納されていない第１転送バッファである、
請求項２に記載のメモリシステム。
【請求項１０】
前記メモリセルアレイは、複数のサブアレイを備え、
前記転送バッファは、それぞれ異なるサブアレイに対応した複数の第１転送バッファを備え、
前記メモリは、前記複数の第１転送バッファのうちの第２転送バッファの内容を前記退避バッファに退避し、前記複数の第１転送バッファのうちの第３転送バッファの内容を前記退避バッファに退避せず、
前記第２転送バッファは、前記複数の第１転送バッファのうちの、前記複数のサブアレイのうちの前記第２データの読み出し元のサブアレイに対応した第１転送バッファであり、
前記第３転送バッファは、前記複数の第１転送バッファのうちの、前記複数のサブアレイのうちの前記第２データの読み出し元のサブアレイに対応しない第１転送バッファである、
請求項２に記載のメモリシステム。
【請求項１１】
前記メモリセルアレイは、複数のサブアレイを備え、
前記転送バッファは、それぞれ異なるサブアレイに対応した複数の第１転送バッファを備え、
前記メモリは、前記複数の第１転送バッファのうちの第２転送バッファの内容を前記退避バッファに退避し、前記複数の第１転送バッファのうちの第３転送バッファの内容を前記退避バッファに退避せず、
前記第２転送バッファは、前記第３データが格納され、かつ、前記複数のサブアレイのうちの前記第２データの読み出し元のサブアレイに対応した、前記複数の第１転送バッファのうちの第１転送バッファであり、
前記第３転送バッファは、前記第３データが格納されていないか、または、前記複数のサブアレイのうちの前記第２データの読み出し元のサブアレイに対応しない、前記複数の第１転送バッファのうちの第１転送バッファである、
請求項２に記載のメモリシステム。
【請求項１２】
前記コントローラは、前記転送フェーズにおいて前記メモリにリードコマンドを送信し、
前記メモリは、前記転送フェーズにおいて前記リードコマンドに応じて前記第３データを前記退避バッファに退避する、
請求項２に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
メモリシステムは、不揮発性のメモリと、ホストとメモリとの間のデータ転送を実行するメモリコントローラとを備える。メモリシステムに関し、ホストからのリード要求に対するレイテンシを可及的に小さくすることが要望される場合がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１６／００１２８９１号明細書
【特許文献２】米国特許出願公開第２０１５／０１８６０４２号明細書
【特許文献３】米国特許第７５６２１８０号明細書
【特許文献４】米国特許出願公開第２０１４／０２２３０７７号明細書
【特許文献５】米国特許出願公開第２０１６／００７０４７１号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一つの実施形態は、ホストからのリード要求に対するレイテンシを低減したメモリシステムを得ることを目的とする。
【課題を解決するための手段】
【０００５】
一つの実施形態によれば、メモリシステムは、不揮発性のメモリと、コントローラとを備える。メモリは、メモリセルアレイを備える。コントローラは、メモリにコマンド、アドレス、および第１データを転送する転送フェーズと、転送フェーズの後にメモリに第１データをメモリセルアレイにプログラムさせるプログラムフェーズと、を制御する。コントローラは、転送フェーズの開始後かつ転送フェーズが完了する前に転送フェーズを中断してメモリから第２データをリードし、第２データのリードが完了した後に転送フェーズを再開する。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施形態のメモリシステムの構成例を示す模式図である。
【図２】図２は、第１の実施形態のメモリチップの構成例を示す模式図である。
【図３】図３は、第１の実施形態のブロックの構成例を示す図である。
【図４】図４は、第１の実施形態のデータコーディングとしきい値電圧分布の一例を示す図である。
【図５】図５は、第１の実施形態のプログラムシーケンスの一例を示すタイミングチャートである。
【図６】図６は、第１の実施形態の退避ルールを説明するためにプログラムシーケンスをいくつかの期間に区分した例を示す図である。
【図７】図７は、第１の実施形態の各期間において空いている転送バッファを説明するための図である。
【図８】図８は、第１の実施形態の退避ルールを説明するための図である。
【図９】図９は、第１の実施形態のメモリシステムの動作を説明するフローチャートである。
【図１０】図１０は、データの退避／復元を行う場合の第１の実施形態の制御シーケンスの一例を示す図である。
【図１１】図１１は、メモリコントローラがデータ転送を中断してデータを退避する場合における第１の実施形態の各種信号線の波形の一例を示す図である。
【図１２】図１２は、メモリコントローラがデータを復元してデータ転送を再開する場合における第１の実施形態の各種信号線の波形の一例を示す図である。
【図１３】図１３は、データの退避／復元を行わない場合における第１の実施形態の制御シーケンスの一例を示す図である。
【図１４】図１４は、データの退避／復元を行わない場合における第１の実施形態の制御シーケンスの別の一例を示す図である。
【図１５】図１５は、第２の実施形態のメモリシステムの動作を説明するフローチャートである。
【図１６】図１６は、第３の実施形態のメモリシステムの動作を説明するフローチャートである。
【図１７】図１７は、第４の実施形態のメモリシステムの動作を説明するフローチャートである。
【図１８】図１８は、第５の実施形態の退避ルールの例を説明するための図である。
【図１９】図１９は、第５の実施形態の退避ルールのさらに別の例を説明するための図である。
【図２０】図２０は、第５の実施形態の退避ルールのさらに別の例を説明するための図である。
【図２１】図２１は、第６の実施形態の制御シーケンスの一例を示す概略図である。
【図２２】図２２は、第６の実施形態の制御シーケンスの別の一例を示す概略図である。
【図２３】図２３は、第６の実施形態の制御シーケンスのさらに別の一例を示す概略図である。
【図２４】図２４は、第８の実施形態の制御シーケンスの一例を示す概略図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００８】
（第１の実施形態）
図１は、第１の実施形態のメモリシステムの構成例を示す模式図である。メモリシステム１は、ホスト２と接続可能である。メモリシステム１とホスト２との間の通信路の規格は、特定の規格に限定されない。例えば、ＳＡＳ（Serial  Attached  SCSI）、ＳＡＴＡ（Serial  ATA）、ＰＣＩｅ（PCI  express、登録商標）、ＮＶＭｅ（NVM  express、登録商標）などが採用され得る。
【０００９】
ホスト２は、例えばパーソナルコンピュータ、携帯情報端末、またはサーバなどが該当する。メモリシステム１は、ホスト２からアクセス要求（リード要求およびライト要求）を受け付けることができる。各アクセス要求は、アクセス先を示す論理アドレスを含んでいる。論理アドレスは、メモリシステム１がホスト２に提供する論理アドレス空間内の位置を示す。
【００１０】
メモリシステム１は、メモリコントローラ１０と、ＮＡＮＤ型のフラッシュメモリ（ＮＡＮＤメモリ）２０とを備えている。
【００１１】
メモリコントローラ１０は、メモリシステム１全体の制御を実行する。特に、メモリコントローラ１０は、ホスト２からのアクセス要求に応じて、ＮＡＮＤメモリ２０に対するアクセスを実行する。
【００１２】
ＮＡＮＤメモリ２０は、不揮発性のメモリの一例である。ＮＡＮＤメモリ２０は、４つのパッケージ（ＮＡＮＤパッケージ２１）によって構成されている。各ＮＡＮＤパッケージ２１は、４つのメモリチップ２２を備える。なお、図１では、１つのＮＡＮＤパッケージ２１に具備される４つのメモリチップ２２を図示し、他の３つのＮＡＮＤパッケージ２１のそれぞれに具備される４つのメモリチップ２２の図示を省略している。
【００１３】
メモリコントローラ１０は、４つのチャネル（Ｃｈ．０〜Ｃｈ．３）を備える。各ＮＡＮＤパッケージ２１は、メモリコントローラ１０と、それぞれ個別のチャネルで接続されている。同一のＮＡＮＤパッケージ２１に具備される４つのメモリチップ２２は、同一のチャネルに共通に接続される。
【００１４】
各チャネルは、ＩＯ信号線および制御信号線を含む、配線群によって構成される。ＩＯ信号線は、例えば、データ、アドレス、およびコマンドを送受信するための信号線である。制御信号線は、例えば、ＷＥ（ライトイネーブル）信号、ＲＥ（リードイネーブル）信号、ＣＬＥ（コマンドラッチイネーブル）信号、ＡＬＥ（アドレスラッチイネーブル）信号、ＷＰ（ライトプロテクト）信号、ＤＱＳ（データストローブ）信号等を送受信するための信号線である。
【００１５】
メモリコントローラ１０は、各チャネルを個別に制御することができる。メモリコントローラ１０は、複数のチャネルを同時に制御することによって、それぞれ接続されたチャネルが異なる複数のメモリチップ２２を同時に動作させることができる。メモリコントローラ１０は、チップインタリーブを実行してもよい。チップインタリーブは、１以上のチャネルのそれぞれにおいて、１つのメモリチップ２２が処理を実行中に、他のメモリチップ２２が処理を実行したり、１つのメモリチップ２２が処理を実行中に、メモリコントローラ１０が他のメモリチップ２２との間で情報の転送を実行したりする処理をいう。
【００１６】
なお、メモリシステム１に具備されるＮＡＮＤパッケージ２１の数は４つに限定されない。任意の数のＮＡＮＤパッケージ２１がメモリシステム１に具備され得る。また、各ＮＡＮＤパッケージ２１に具備されるメモリチップ２２の数は４つに限定されない。任意の数のメモリチップ２２が各ＮＡＮＤパッケージ２１に具備され得る。また、メモリコントローラ１０に具備されるチャネルの数は４つに限定されない。任意の数のチャネルがメモリコントローラ１０に具備され得る。また、各チャネルに接続されるＮＡＮＤパッケージ２１の数は１つに限定されない。任意の数のＮＡＮＤパッケージ２１が各チャネルに接続され得る。
【００１７】
図２は、第１の実施形態のメモリチップ２２の構成例を示す模式図である。メモリチップ２２は、メモリセルアレイ２３とアクセス回路２７とを備えている。メモリセルアレイ２３は、２つのプレーン（プレーンＡ、プレーンＢ）に分割されている。メモリセルアレイ２３Ａは、プレーンＡのサブアレイであり、メモリセルアレイ２３Ｂは、プレーンＢのサブアレイである。なお、プレーンＡおよびプレーンＢは、アクセス回路２７のうちの一部の回路（ロウデコーダ、カラムデコーダ、各種バッファ２４，２５，２６、など）をそれぞれ有している。よって、プレーンＡおよびプレーンＢのそれぞれに対し、並列にプログラム処理、リード処理、およびイレース処理が実行され得る。
【００１８】
各プレーンは、複数のブロックを備える。１つのブロックに記憶されている全データは、一括にイレースされる。
【００１９】
図３は、第１の実施形態のブロックの構成例を示す図である。図示するように、ブロックは、Ｘ方向に沿って順に配列された（ｍ＋１）個のＮＡＮＤストリングＮＳを備えている（ｍ≧０）。（ｍ＋１）個のＮＡＮＤストリングＮＳにそれぞれ含まれる選択トランジスタＳＴ１は、ドレインがビット線ＢＬ０〜ＢＬｍに接続され、ゲートが選択ゲート線ＳＧＤに共通接続されている。また、選択トランジスタＳＴ２は、ソースがソース線ＳＬに共通接続され、ゲートが選択ゲート線ＳＧＳに共通接続されている。
【００２０】
各メモリセルトランジスタＭＴは、半導体基板上に形成された積層ゲート構造を備えたＭＯＳＦＥＴ（metal  oxide  semiconductor  field  effect  transistor）から構成される。積層ゲート構造は、半導体基板上にトンネル酸化膜を介在して形成されたフローティングゲート、及びフローティングゲート上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。フローティングゲートに蓄えられる電子の数に応じてしきい値電圧が変化する。メモリセルトランジスタＭＴは、しきい値電圧の違いに応じてデータを記憶する。即ち、メモリセルトランジスタＭＴは、フローティングゲートに、データに応じた量の電荷を保持する。
【００２１】
各ＮＡＮＤストリングＮＳにおいて、（ｎ＋１）個のメモリセルトランジスタＭＴは、選択トランジスタＳＴ１のソースと選択トランジスタＳＴ２のドレインとの間に、それぞれの電流経路が直列接続されるように配置されている。そして、最もソース側に位置するメモリセルトランジスタＭＴから順に、制御ゲート電極がワード線ＷＬ０〜ＷＬｎにそれぞれ接続されている。従って、ワード線ＷＬ０に接続されたメモリセルトランジスタＭＴ０のソースは選択トランジスタＳＴ２のドレインに接続され、ワード線ＷＬｎに接続されたメモリセルトランジスタＭＴｎのドレインは選択トランジスタＳＴ１のソースに接続されている。
【００２２】
ワード線ＷＬ０〜ＷＬｎは、ブロック内のＮＡＮＤストリングＮＳ間で、メモリセルトランジスタＭＴの制御ゲート電極を共通に接続している。つまり、ブロック内において同一行にあるメモリセルトランジスタＭＴの制御ゲート電極は、同一のワード線ＷＬに接続される。各メモリセルトランジスタＭＴに１ビットの値を保持可能に構成される場合には、同一のワード線ＷＬに接続される（ｍ＋１）個のメモリセルトランジスタＭＴは１ページとして取り扱われ、このページごとにデータのプログラム及びデータのリードが行われる。
【００２３】
各メモリセルトランジスタＭＴに複数ビットの値を保持可能に構成される場合がある。例えば、各メモリセルトランジスタＭＴがｌ（ｌ≧２）ビットの値を格納可能な場合、ワード線ＷＬ当たりの記憶容量はｌページ分のサイズに等しくなる。ここでは一例として、各メモリセルトランジスタＭＴが３ビットの値の記憶を行う記憶方式について説明する。この記憶方式によれば、各ワード線に３ページ分のデータが保持される。
【００２４】
図４は、第１の実施形態のデータコーディングとしきい値電圧分布の一例を示す図である。横軸はメモリセルのしきい値電圧を示している。図４の上側に示した山状の形状は、しきい値電圧分布を模式的に表したものである。８つのしきい値電圧分布は、それぞれしきい値電圧領域であり、ステート、とも表記される。８つのステートは、３ビットのデータ値に対応する。本図の例によれば、Ｅｒステートは“１１１”のデータ値に対応し、Ａステートは“１１０”のデータ値に対応し、Ｂステートは“１００”のデータ値に対応し、Ｃステートは“０００”のデータ値に対応し、Ｄステートは“０１０”のデータ値に対応し、Ｅステートは“０１１”のデータ値に対応し、Ｆステートは“００１”のデータ値に対応し、Ｇステートは“１０１”のデータ値に対応する。各データ値の先頭の桁をＭＳＢ（Most  Significant  Bit）とする。また、各データ値の末尾の桁をＬＳＢ（Least  Significant  Bit）とする。なお、ステートとデータ値との対応関係はこれに限定されない。
【００２５】
各メモリセルは、しきい値電圧が８つのステートのうちの何れかに属するように、制御される。各メモリセルのしきい値電圧は、イレース処理によってＥｒステートに設定され、プログラム処理によってＡステート〜Ｇステートのうちのデータ値に応じたステートに設定される。
【００２６】
また、各メモリセルは、リード処理においては、しきい値電圧といくつかの判定電圧との比較によって、しきい値電圧が属するステートが特定される。そして、特定されたステートに応じたデータ値が読み出される。図４のＶｒａ、Ｖｒｂ、Ｖｒｃ、Ｖｒｄ、Ｖｒｅ、Ｖｒｆ、およびＶｒｇの組み合わせは、判定電圧の一例である。
【００２７】
１つのワード線ＷＬによって構成される３つのページのうちのＬＳＢの集合を、ロアーページと表記する。３つのページのうちのＭＳＢの集合を、アッパーページと表記する。３つのページのうちの、ＬＳＢとＭＳＢとの間のビットの集合を、ミドルページと表記する。
【００２８】
図２に説明を戻す。アクセス回路２７は、メモリコントローラ１０による制御の下で、メモリセルアレイ２３に対し、プログラム処理、リード処理、およびイレース処理を実行することができる。アクセス回路２７は、例えば、センスアンプ、カラムデコーダ、およびロウデコーダを含む。
【００２９】
アクセス回路２７は、転送バッファ２４（２４Ａ、２４Ｂ）、中間バッファ２５（２５Ａ、２５Ｂ）、および退避バッファ２６（２６Ａ、２６Ｂ）を備える。転送バッファ２４Ａ、中間バッファ２５Ａ、および退避バッファ２６Ａは、プレーンＡに属するバッファであり、メモリセルアレイ２３Ａに対するリード処理およびプログラム処理に使用される。転送バッファ２４Ｂ、中間バッファ２５Ｂ、および退避バッファ２６Ｂは、プレーンＢに属するバッファであり、メモリセルアレイ２３Ｂに対するリード処理およびプログラム処理に使用される。
【００３０】
転送バッファ２４Ａは、メモリコントローラ１０とメモリチップ２２との間のデータ転送のためのバッファである。アクセス回路２７は、ＮＡＮＤコントローラ１４がメモリセルアレイ２３Ａを書き込み先として送信したデータを、転送バッファ２４Ａに受信する。また、アクセス回路２７はメモリセルアレイ２３Ａから読み出したデータを転送バッファ２４Ａに格納し、ＮＡＮＤコントローラ１４は、転送バッファ２４Ａに格納されたデータをData  Out動作によって取得する。
【００３１】
中間バッファ２５Ａは、メモリセルアレイ２３Ａに対するリード処理およびプログラム処理の際のワーキングエリアとして使用される記憶領域である。
【００３２】
例えば、プログラム処理においては、中間バッファ２５Ａには、転送バッファ２４Ａに順次入力される３ページのデータのうちの一部または全部が一時的に格納されたり、３ページのデータから各メモリセルに設定するしきい値電圧を演算する際の中間データが格納されたりする。
【００３３】
リード処理においては、メモリセルアレイ２３Ａに含まれるリード処理の対象のワード線ＷＬに属する各メモリセルのしきい値電圧が所定の判定電圧と比較され、中間バッファ２５Ａには、比較の結果が格納される。また、中間バッファ２５Ａには、その比較の結果からデータ値を演算する際の中間データが格納される。演算によって得られたデータ値は転送バッファ２４Ａに格納される。ＮＡＮＤコントローラ１４は、転送バッファ２４Ａに格納されたデータ値をData  Out動作によって取得する。
【００３４】
転送バッファ２４Ｂは、メモリコントローラ１０とメモリチップ２２との間のデータ転送のためのバッファである。アクセス回路２７は、ＮＡＮＤコントローラ１４がメモリセルアレイ２３Ｂを書き込み先として送信したデータを、転送バッファ２４Ｂに受信する。また、アクセス回路２７はメモリセルアレイ２３Ｂから読み出したデータを転送バッファ２４Ｂに格納し、ＮＡＮＤコントローラ１４は、転送バッファ２４Ｂに格納されたデータをData  Out動作によって取得する。
【００３５】
中間バッファ２５Ｂは、中間バッファ２５Ａがメモリセルアレイ２３Ａに対するリード処理およびプログラム処理の際のワーキングエリアとして使用されるのと同様に、メモリセルアレイ２３Ｂに対するリード処理およびプログラム処理の際のワーキングエリアとして使用される。
【００３６】
なお、本図では、プレーン毎に中間バッファ２５を１つずつ図示している。アクセス回路２７は、プログラム処理およびリード処理の際の演算の方法に応じて必要な数の中間バッファ２５を備え得る。
【００３７】
退避バッファ２６については後述する。
【００３８】
図１に説明を戻す。メモリコントローラ１０は、ＣＰＵ（Central  Processing  Unit）１１と、ホストインタフェースコントローラ（ホストＩ／Ｆコントローラ）１２と、ＲＡＭ（Random  Access  Memory）１３と、４つのＮＡＮＤコントローラ１４と、を備える。メモリコントローラ１０は、例えばＳｏＣ（System-On-a-Chip）として構成され得る。メモリコントローラ１０は、複数のチップによって構成されてもよい。
【００３９】
ＲＡＭ１３は、メモリコントローラ１０が制御を行う際のキャッシュ、バッファ、およびワーキングエリアとして機能するメモリである。例えば、ＲＡＭ１３には、ホスト２から受信したデータであってＮＡＮＤメモリ２０に送られる前のデータが格納される。また、ＲＡＭ１３には、ＮＡＮＤメモリ２０から読み出されたデータであってホスト２に送られる前のデータが格納される。なお、ＲＡＭ１３を構成するメモリの種類は特定の種類のメモリに限定されない。例えば、ＲＡＭ１３は、ＤＲＡＭ（Dynamic  Random  Access  Memory）、ＳＲＡＭ（Static  Random  Access  Memory）、またはこれらの組み合わせによって構成され得る。なお、ＲＡＭ１３を構成するＤＲＡＭまたはＳＲＡＭは、メモリコントローラ１０の外部に具備されてもよい。
【００４０】
４つのＮＡＮＤコントローラ１４は、それぞれ異なるチャネルを制御する。各ＮＡＮＤコントローラ１４は、対応するチャネルを介して接続されたＮＡＮＤパッケージ２１内の各メモリチップ２２に対し、ＣＰＵ１１から指示されたアクセスを実現する制御シーケンスを実行する。各ＮＡＮＤコントローラ１４は、制御シーケンスの進捗をトラッキングする進捗管理回路１４１を備える。なお、図１では、１つのＮＡＮＤコントローラ１４に具備される進捗管理回路１４１を図示し、他の３つのＮＡＮＤコントローラ１４のそれぞれに具備される進捗管理回路１４１の図示を省略している。
【００４１】
ホストインタフェースコントローラ１２は、ホスト２とメモリコントローラ１０との間の情報（アクセス要求、応答、データ）の送受信を制御する。例えば、ホストインタフェースコントローラ１２は、ホスト２が送信したアクセス要求を受け付ける。また、ホストインタフェースコントローラ１２は、ホスト２から受信したデータをＲＡＭ１３に格納する。また、ホストインタフェースコントローラ１２は、ＮＡＮＤメモリ２０から読み出されてＲＡＭ１３に格納されたデータをホスト２に送信する。
【００４２】
ＣＰＵ１１は、予めメモリシステム１に内蔵されるプログラム（ファームウェアプログラム）に基づいて動作するプロセッサである。ファームウェアプログラムは、例えばＮＡＮＤメモリ２０の所定位置に格納されている。ＣＰＵ１１は、メモリシステム１のスタートアップ時に、ＮＡＮＤメモリ２０からＲＡＭ１３にファームウェアプログラムをロードする。そして、ＣＰＵ１１は、ＲＡＭ１３にロードされたファームウェアプログラムを実行する。
【００４３】
ＣＰＵ１１は、ファームウェアプログラムに従って、ホスト２とＮＡＮＤメモリ２０との間のデータ転送などを制御する。例えば、ＣＰＵ１１は、４つのＮＡＮＤコントローラ１４のうちの一部または全部に、ホスト２から受信したアクセス要求に応じた制御シーケンスを実行させる。
【００４４】
ここで、ＮＡＮＤコントローラ１４が実行する制御シーケンスのうちの、プログラム処理の制御シーケンス（プログラムシーケンス）について説明する。
【００４５】
図５は、第１の実施形態のプログラムシーケンスの一例を示すタイミングチャートである。ここでは、２つのメモリセルアレイ２３Ａ、２３Ｂのそれぞれに対して３ページのデータをプログラムする場合のプログラムシーケンスの例を示している。また、本図では、１つのプログラムシーケンスが４つの部分に分割され、４つの部分が上段を先頭として下段方向に、時系列に対応した順番で描画されている。即ち、最上段に描画された部分の右端の（Ｃ）には、上から２段目に描画された部分の左端の（Ｃ）が後続する。上から２段目に描画された部分の右端の（Ｄ）には、上から３段目に描画された部分の左端の（Ｄ）が後続する。上から３段目に描画された部分の右端の（Ｅ）には、上から４段目（即ち最下段）に描画された部分の左端の（Ｅ）が後続する。また、本図では、ＩＯ信号線の状態とＲｙ／Ｂｙ信号線の状態とが重ねて図示されている。
【００４６】
このプログラムシーケンスによれば、ＮＡＮＤコントローラ１４から対象のメモリチップ２２に、メモリセルアレイ２３Ａのロアーページに書き込まれるデータ、メモリセルアレイ２３Ｂのロアーページに書き込まれるデータ、メモリセルアレイ２３Ａのミドルページに書き込まれるデータ、メモリセルアレイ２３Ｂのミドルページに書き込まれるデータ、メモリセルアレイ２３Ａのアッパーページに書き込まれるデータ、およびメモリセルアレイ２３Ｂのアッパーページに書き込まれるデータが、この順番で転送される。
【００４７】
以降、データのプログラム／リードの対象としてのメモリセルアレイ２３Ａを、単に、プレーンＡと表記することがある。即ち、例えば、プレーンＡにデータをプログラムする、とは、プレーンＡのサブアレイ即ちメモリセルアレイ２３Ａにデータをプログラムすることを意味する。また、プレーンＡがリード元である、とは、プレーンＡのサブアレイ即ちメモリセルアレイ２３Ａがリード元であることを意味する。同様に、データのプログラム／リードの対象としてのメモリセルアレイ２３Ｂを、単に、プレーンＢと表記することがある。
【００４８】
さらに、メモリセルアレイ２３Ａに書き込まれるデータを、プレーンＡ用のデータ、と表記することがある。同様に、メモリセルアレイ２３Ｂに書き込まれるデータを、プレーンＢ用のデータ、と表記することがある。また、ロアーページに書き込まれるデータを、ロアーページ用のデータと表記することがある。同様に、ミドルページに書き込まれるデータを、ミドルページ用のデータと表記することがある。同様に、アッパーページに書き込まれるデータを、アッパーページ用のデータと表記することがある。
【００４９】
各データの転送の直前には、ＮＡＮＤコントローラ１４は、ページを指定するページ選択コマンドCsel（Csel_l、Csel_m、Csel_u）と、データの入力を意味するデータ入力コマンドCdinと、をアクセス回路２７に送信する。なお、Csel_lはロアーページを指定するコマンドであり、Csel_mはミドルページを指定するコマンドであり、Csel_uはアッパーページを指定するコマンドである。
【００５０】
データ入力コマンドCdinの送信後、ＮＡＮＤコントローラ１４は、アドレスAddrを送信し、その後、データを転送する（Data  In）。アドレスAddrは、プレーン、ブロック、およびワードラインを指定するアドレスと、開始カラムアドレスとを含む。ＮＡＮＤコントローラ１４は、プレーンＡ用のデータの転送後、第１の完了コマンドCc1を送信する。第１の完了コマンドCc1は、１つのプレーン用のデータの転送の完了を通知するためのコマンドである。
【００５１】
アクセス回路２７は、第１の完了コマンドCc1を受信すると、Ｒｙ／Ｂｙ信号を一時的にレディー状態からビジー状態（Ｂｙ）に遷移させ、転送データを受け付ける転送バッファ２４を転送バッファ２４Ａから転送バッファ２４Ｂに切り替える。
【００５２】
第１の完了コマンドCc1の送信後にＲｙ／Ｂｙ信号がレディー状態に戻ると、ＮＡＮＤコントローラ１４は、直前にプレーンＡ用のデータを送信した際に指定したページと同一のページを指定するページ選択コマンドCselとデータ入力コマンドCdinを送信し、その後、アドレスAddrを送信し、プレーンＢ用のデータを転送する（Data  In）。
【００５３】
プレーンＢ用のデータの転送後、ＮＡＮＤコントローラ１４は、第２の完了コマンドCc2を送信する。第２の完了コマンドCc2は、全プレーン用のデータの転送の完了を通知するためのコマンドである。
【００５４】
アクセス回路２７は、第２の完了コマンドCc2を受信すると、転送バッファ２４Ａ、２４Ｂに格納されているデータをそれぞれ中間バッファ２５Ａ、２５Ｂに取得する。アクセス回路２７は、各データを中間バッファ２５Ａ、２５Ｂに取得する際に、Ｒｙ／Ｂｙ信号を一時的にレディー状態からビジー状態に遷移させる。
【００５５】
なお、アクセス回路２７は、転送バッファ２４に格納されているデータを中間バッファ２５に取得する際に、そのデータに対して所定の演算を行ってもよい。
【００５６】
第２の完了コマンドCc2の送信後にＲｙ／Ｂｙ信号がレディー状態に戻ると、ＮＡＮＤコントローラ１４は、次のページに書き込まれるデータの転送を実行する。例えば、プレーンＡ、Ｂのロアーページ用のデータの転送が完了した後、ＮＡＮＤコントローラ１４は、プレーンＡ、Ｂのミドルページ用のデータの転送を実行する。プレーンＡ、Ｂのミドルページ用のデータの転送が完了した後、ＮＡＮＤコントローラ１４は、プレーンＡ、Ｂのアッパーページ用のデータの転送を実行する。
【００５７】
最後のデータ（プレーンＢのアッパーページ用のデータ）の転送が完了すると、ＮＡＮＤコントローラ１４は、第２の完了コマンドCc2の代わりに、プログラムを実行させるためのプログラム実行コマンドCprogを送信する。
【００５８】
アクセス回路２７は、プログラム実行コマンドCprogを受信すると、中間バッファ２５に取得したロアーページ用のデータおよびミドルページ用のデータと、転送バッファ２４に格納されたアッパーページ用のデータと、に基づいて、書き込み先のワード線ＷＬに属するメモリセル毎に、しきい値電圧の設定値を演算する。そして、アクセス回路２７は、対応するメモリセルのしきい値電圧を、設定値に至るまで上昇させる。アクセス回路２７は、プログラム実行コマンドCprogを受信してからしきい値電圧の設定が完了するまで、Ｒｙ／Ｂｙ信号を一時的にビジー状態に維持する。プログラム中のビジー状態は、プログラムビジー状態と称され得る。
【００５９】
Ｒｙ／Ｂｙ信号がプログラムビジー状態からレディー状態に戻ると、ＮＡＮＤコントローラ１４は、ステータスを読み出すためのコマンドCstatusを送信する。アクセス回路２７は、プログラムの実行の成否をステータス情報としてＮＡＮＤコントローラ１４に応答する。
【００６０】
当該プログラムシーケンスの先頭からプログラム実行コマンドCprogの送信までのシーケンスは、データ、コマンド、アドレスなどがアクセス回路２７に転送される転送フェーズを構成する。プログラム実行コマンドCprogの送信からステータス情報の応答までのシーケンスは、アクセス回路２７がデータを各プレーンにプログラムするプログラムフェーズを構成する。
【００６１】
本実施形態では、メモリコントローラ１０は、プログラムシーケンスが開始された後であっても、転送フェーズにおいてそのプログラムシーケンスを中断して、リード処理の制御シーケンス（リードシーケンス）を実行することができる。メモリコントローラ１０は、リードシーケンスを完了した後、プログラムシーケンスを再開することができる。
【００６２】
ここで、プログラムシーケンスによって入力されたデータが転送バッファ２４に存在する状態で、その転送バッファ２４がリード処理で使用される場合、そのデータは、リード処理によってメモリセルアレイ２３から読み出されたデータによって上書きされる。即ち、上書きの前に転送バッファ２４に格納されていた、プログラム処理の対象のデータは、破壊される。本実施形態では、プログラム処理の対象のデータが転送バッファ２４に存在し、その転送バッファ２４がリード処理で使用される予定の場合、アクセス回路２７は、転送バッファ２４内のプログラム処理の対象のデータを退避バッファ２６に退避させることができる。
【００６３】
また、アクセス回路２７は、リードシーケンスが完了すると、退避バッファ２６内のデータを転送バッファ２４に復元することができる。
【００６４】
転送バッファ２４は、例えば、その転送バッファ２４に格納されていたデータが中間バッファ２５に取得された後、かつ新たなデータの入力が開始される前に、リセットされる。リセットによって、転送バッファ２４には無効なデータがセットされる。リセットの後、転送バッファ２４の一部に当該新たなデータが入力された場合、その転送バッファ２４の当該新たなデータを保持していない領域には、無効なデータが保持されている。実施形態では、一例として、アクセス回路２７は、転送バッファ２４に保持されている、無効なデータを含めた全てのデータを退避バッファ２６に退避することとする。転送バッファ２４に保持されている全てのデータを、単に、内容、と表記する。即ち、実施形態では、アクセス回路２７は、転送バッファ２４の内容を退避バッファ２６に退避する。
【００６５】
無効なデータは、リセットによって設定されたデータだけに限定されない。例えば、転送バッファ２４に格納されていたデータが中間バッファ２５に取得された後、その転送バッファ２４に古いデータが残され、古いデータが残っている転送バッファ２４に、新しいデータが入力されてもよい。当該新しいデータを転送バッファ２４に入力する場合においては、転送バッファ２４に残っている古いデータは、無効なデータに該当する。
【００６６】
なお、アクセス回路２７は、必ずしも転送バッファ２４に格納されている全てのデータを退避バッファ２６に退避しなくてもよい。アクセス回路２７は、転送バッファ２４に保持されている内容のうち、少なくとも有効なデータ（無効なデータを除いたデータ）を退避バッファ２６に退避すればよい。
【００６７】
なお、退避および復元は、転送を含む。例えば、アクセス回路２７は、退避の処理において、転送バッファ２４内の内容を退避バッファ２６に転送し、復元の処理において、退避バッファ２６内の内容を転送バッファ２４に転送する。アクセス回路２７は、退避の処理において、転送バッファ２４内の内容を退避バッファ２６にコピーし、復元の処理において、退避バッファ２６内の内容を転送バッファ２４にコピーしてもよい。別の例では、退避および復元の処理において、アクセス回路２７は、転送バッファ２４の内容と退避バッファ２６の内容とを交換してもよい。
【００６８】
または、退避および復元は、２つのバッファ間のスワップによって実現されてもよい。例えば、２つのバッファが用意され、メモリコントローラ１０は、２つのバッファのうちの一方のバッファを転送バッファ２４として使用し、２つのバッファのうちの他方のバッファを退避バッファ２６として見なす。退避の処理においては、メモリコントローラ１０は、２つのバッファ間でデータの転送を行うのではなく、２つのバッファの役割をスワップする。即ち、メモリコントローラ１０は、一方のバッファを退避バッファ２６と見なし、他方のバッファを転送バッファ２４と見なす。復元の処理においては、メモリコントローラ１０は、２つのバッファの役割を元に戻す。このように、データの転送を行うことなく退避および復元が行われてもよい。
【００６９】
また、メモリコントローラ１０は、退避および復元の際に、内容を加工してもよい。例えば、メモリコントローラ１０は、退避の際に内容を加工し、復元の際に、退避された加工済みの内容を元の内容に戻してもよい。
【００７０】
次に、図６〜図８を参照して、第１の実施形態の退避ルールを説明する。図６は、第１の実施形態の退避ルールを説明するためにプログラムシーケンスをいくつかの期間に区分した例を示す図である。なお、図６では、ページ選択コマンドCsel、データ入力コマンドCdin、およびアドレスAddrの図示を省略している。また、図６では、１つのプログラムシーケンスが２つの部分に分割され、２つの部分は、時系列に対応した順番で描画されている。即ち、上段に描画された部分の右端の（Ｆ）には、下段に描画された部分の左端の（Ｆ）が後続する。
【００７１】
また、図７は、図６に示した期間毎に、転送バッファ２４が空いているか否かを示す表である。図７において、「EMPTY」は転送バッファ２４が空いていることを示しており、「NOT-EMPTY」は転送バッファ２４が空いていないことを示している。
【００７２】
また、図８は、第１の実施形態の退避ルールを説明するための図である。図８は、リード元のプレーンと空いている転送バッファ２４と内容の退避が実行される転送バッファ２４との関係を示している。
【００７３】
例えば、図７に示されるように、プログラムシーケンスが開始されてからプレーンＡのロアーページ用のデータの転送が開始されるまでの期間（図６の期間２０１）、および第２の完了コマンドCc2の実行から次のプレーン（プレーンＡ）用のデータの転送が開始されるまでの期間（図６の期間２０５、２０９）においては、転送バッファ２４Ａおよび転送バッファ２４Ｂの両方が空いている。転送バッファ２４Ａおよび転送バッファ２４Ｂの両方が空いている場合には、メモリコントローラ１０は、データの退避を実行しない（図８のセル１０００〜１００２参照）。
【００７４】
ここで、「転送バッファ２４が空いている」とは、プログラムシーケンスによってメモリコントローラ１０から入力されたデータがその転送バッファ２４に存在しないことをいう。なお、アクセス回路２７が転送バッファ２４から中間バッファ２５にデータを取得する際に、そのデータを転送バッファ２４に残す実装が考えられる。その場合には、「転送バッファ２４が空いている」とは、プログラムシーケンスにおいてメモリコントローラ１０からのデータがその転送バッファ２４に存在しないか、または未取得のデータが転送バッファ２４に残っていないこという。
【００７５】
図７に示されるように、プレーンＡ用のデータの転送が開始されてからプレーンＢ用のデータの転送が開始されるまでの期間（図６の期間２０２、２０３、２０６、２０７、２１０、２１１）においては、転送バッファ２４Ａは空いておらず、転送バッファ２４Ｂは空いている。この場合には、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４に応じて退避の実行／非実行を決定する。メモリコントローラ１０は、プレーンＢがリード元である場合には、退避を実行しない（図８のセル１００４参照）。プレーンＡがリード元である場合、またはプレーンＡおよびプレーンＢの両方がリード元である場合、メモリコントローラ１０は、転送バッファ２４Ａの内容のみを退避する（図８のセル１００３、セル１００５参照）。
【００７６】
図７に示されるように、プレーンＢ用のデータの転送が開始されてから第２の完了コマンドCc2またはプログラム実行コマンドCprogが送信されるまでの期間（図６の期間２０４、２０８、２１２）においては、転送バッファ２４Ａおよび転送バッファ２４Ｂのそれぞれは空いていない。この場合には、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４の内容のみを退避する（図８のセル１００６〜１００８参照）。
【００７７】
図９は、第１の実施形態のメモリシステム１の動作を説明するフローチャートである。まず、メモリコントローラ１０は、プログラムシーケンスを開始する（Ｓ１０１）。
【００７８】
Ｓ１０１の処理では、例えば、ＣＰＵ１１は、ＮＡＮＤコントローラ１４にプログラムシーケンスの実行を指示する。プログラムシーケンスの指示の際には、ＣＰＵ１１は、プレーンＡの１つのワード線ＷＬのロアーページ、ミドルページ、アッパーページをそれぞれプログラム先とする３つのデータと、プレーンＢの１つのワード線ＷＬのロアーページ、ミドルページ、アッパーページをそれぞれプログラム先とする３つのデータとを、プログラム対象のデータとして指定する。これらのデータは、プログラムシーケンスの開始前にＲＡＭ１３に格納されている。プログラムシーケンスの実行の指示を受けたＮＡＮＤコントローラ１４は、これらのデータをＮＡＮＤメモリ２０にプログラムするためのプログラムシーケンスを開始する。
【００７９】
プログラムシーケンスの開始後、メモリコントローラ１０がホスト２からリード要求を受信すると（Ｓ１０２、Ｙｅｓ）、メモリコントローラ１０は、現在の処理が転送フェーズにあるか否かを判定する（Ｓ１０３）。現在の処理が転送フェーズにある場合（Ｓ１０３、Ｙｅｓ）、メモリコントローラ１０は、プログラムシーケンスを中断する（Ｓ１０４）。
【００８０】
ＮＡＮＤコントローラ１４では、進捗管理回路１４１が、転送済みのデータの量またはカラムアドレスをカウントするなどによって、データ転送の進捗、転送中のデータの書き込み先のプレーン、などを含めたプログラムシーケンスの進捗をトラッキングしている。即ち、ＮＡＮＤコントローラ１４は、プログラムシーケンスのうちの現在の処理が転送フェーズにあるか否かを認識している。ＣＰＵ１１は、ホスト２からのリード要求の受信を検知すると、リード要求に応じたリードシーケンスの実行をＮＡＮＤコントローラ１４に指示する。ＮＡＮＤコントローラ１４は、リードシーケンスの実行の指示を受信したタイミングにおいて、現在の処理が転送フェーズにある場合、Ｓ１０４において、プログラムシーケンスを中断する。
【００８１】
プログラムシーケンスの中断後、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４が空いているか否かを判定する（Ｓ１０５）。リードシーケンスで使用される転送バッファ２４が空いていない場合（Ｓ１０５、Ｎｏ）、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４の内容を退避バッファ２６に退避する（Ｓ１０６）。
【００８２】
Ｓ１０６の処理では、ＮＡＮＤコントローラ１４は、退避コマンドをＮＡＮＤメモリ２０に送信する。退避コマンドは、例えば、プレーンの指定を含む。退避コマンドは、プレーンＡおよびプレーンＢの両方を指定し得る。アクセス回路２７は、退避コマンドによって指定されたプレーンに属する転送バッファ２４の内容を、対応する退避バッファ２６に退避する。
【００８３】
退避が完了した後、メモリコントローラ１０は、リードシーケンスを実行し（Ｓ１０７）、その後、退避バッファ２６に退避された内容を転送バッファ２４に復元する（Ｓ１０８）。Ｓ１０８では、ＮＡＮＤコントローラ１４は、復元コマンドをＮＡＮＤメモリ２０に送信する。復元コマンドは、プレーンの指定を含む。復元コマンドは、プレーンＡおよびプレーンＢの両方を指定し得る。アクセス回路２７は、復元コマンドによって指定されたプレーンに属する退避バッファ２６の内容を、対応する転送バッファ２４に復元する。
【００８４】
一方、リードシーケンスで使用される転送バッファ２４が空いている場合（Ｓ１０５、Ｙｅｓ）、メモリコントローラ１０は、リードシーケンスを実行する（Ｓ１０９）。
【００８５】
例えば、Ｓ１０５では、ＮＡＮＤコントローラ１４は、リード元のプレーンと、プログラムシーケンスの進捗と、に基づいて、リードシーケンスで使用される転送バッファ２４が空いているか否かを判定する。リードシーケンスで使用される転送バッファ２４が空いていない場合、ＮＡＮＤコントローラ１４は、Ｓ１０６〜Ｓ１０８において、リードシーケンスの実行の前後にその転送バッファ２４内の内容の退避／復元を実行する。リードシーケンスで使用される転送バッファ２４が空いている場合、ＮＡＮＤコントローラ１４は、Ｓ１０９において、内容の退避／復元を実行することなくリードシーケンスを実行する。
【００８６】
Ｓ１０８の処理の後、またはＳ１０９の処理の後、メモリコントローラ１０は、プログラムシーケンスを再開する（Ｓ１１０）。例えば、ＮＡＮＤコントローラ１４は、データ転送を、中断された部分から再開する。
【００８７】
そして、プログラムシーケンスが完了すると（Ｓ１１１）、一連の動作が完了する。また、リード要求を受信しなかった場合（Ｓ１０２、Ｎｏ）、メモリコントローラ１０は、プログラムシーケンスを続行し、プログラムシーケンスが完了すると（Ｓ１１１）、一連の動作が完了する。
【００８８】
また、リード要求の受信時において、処理が転送フェーズにない場合（Ｓ１０３、Ｎｏ）、即ち、処理がプログラムフェーズにある場合、メモリコントローラ１０は、プログラムシーケンスを続行する。そして、プログラムシーケンスが完了すると（Ｓ１１２）、メモリコントローラ１０は、リードシーケンスを実行し（Ｓ１１３）、一連の動作が完了する。
【００８９】
このように、第１の実施形態では、メモリコントローラ１０は、転送フェーズにおける任意のタイミングでプログラムシーケンスを中断してリードシーケンスを実行することができる。プログラムシーケンスの中断の際、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４が空いている場合には、その転送バッファ２４の内容の退避を実行せず、リードシーケンスで使用される転送バッファ２４が空いていない場合には、その転送バッファ２４の内容の退避を実行する。
【００９０】
次に、プログラムシーケンスを中断してリードシーケンスを実行する際の制御シーケンスの例を説明する。
【００９１】
図１０は、データの退避／復元を行う場合の制御シーケンスの一例を示す図である。本図では、プレーンＡのロアーページ用のデータの転送中（即ち図６の期間２０２）にプレーンＡをリード元とするリードシーケンスが実行される場合の制御シーケンスを示している。
【００９２】
図１０に示されるように、メモリコントローラ１０は、プレーンＡのロアーページ用のデータの転送（Data  In）を中断して、退避コマンドCbackupを送信する。ここで送信される退避コマンドCbackupは、プレーンＡを指定する情報を含む。アクセス回路２７は、プレーンＡに対応した転送バッファ２４である転送バッファ２４Ａの内容を退避バッファ２６Ａに退避する。
【００９３】
メモリコントローラ１０は、退避コマンドCbackupの送信に続いて、プレーンＡをリード元とするリードシーケンスを実行する。リードシーケンスが完了すると、メモリコントローラ１０は、復元コマンドCrestoreを送信する。復元コマンドCrestoreは、プレーンＡを指定する情報を含む。アクセス回路２７は、プレーンＡに対応した退避バッファ２６である退避バッファ２６Ａの内容を転送バッファ２４Ａに復元する。
【００９４】
退避バッファ２６Ａの内容の復元によって、転送バッファ２４Ａの状態は、退避が実行される前の状態に戻る。メモリコントローラ１０は、復元コマンドCrestoreの送信後、プログラムシーケンスを再開する。メモリコントローラ１０は、プログラムシーケンスの再開の際、ページ選択コマンドCsel_l、データ入力コマンドCdin、およびアドレスAddrを送信する。ここで送信されるアドレスAddrは、例えば、プレーンＡのロアーページ用のデータのうちの未転送の部分を示すカラムアドレスを含む。メモリコントローラ１０は、アドレスAddrに続いて、当該未転送の部分を転送する。
【００９５】
なお、メモリコントローラ１０は、プログラムシーケンスの再開の際に、ページ選択コマンドCsel_l、データ入力コマンドCdin、およびアドレスAddrのうちの一部または全部の送信を実行しなくてもよい。その場合には、メモリチップ２２が、プログラムシーケンスの中断時のカラムアドレスを内部に保持しておくように構成されればよい。
【００９６】
また、必ずしも未転送の部分の先頭からプログラムシーケンスが再開されなくてもよい。プログラムシーケンスの再開後に転送されるデータの一部が、プログラムシーケンスの中断までに転送されたデータと重複してもよい。
【００９７】
図１１は、メモリコントローラ１０がデータ転送を中断してデータを退避する場合における各種信号線の波形の一例を示す図である。本図では、ＣＥ信号線、ＣＬＥ信号線、ＡＬＥ信号線、ＷＥ信号線、ＲＥ信号線、ＤＱＳ信号線、ＩＯ信号線、Ｒｙ／Ｂｙ信号線の波形が示されている。
【００９８】
図１１の例では、ＣＥ信号線およびＷＥ信号線は、負論理で設計されている。本図に示される期間では、ＣＥ信号線は、常にアクティブ状態に維持されている。また、ＣＬＥ信号線およびＡＬＥ信号線は、正論理で設計されている。ＤＱＳ信号線は、ＤＱＳ信号およびＤＱＳ信号の反転信号を伝送するように設計されている。Ｒｙ／Ｂｙ信号線は、ハイ状態がレディー状態（Ｒｙ）に対応し、ロー状態がビジー状態（Ｂｙ）に対応するように、設計されている。なお、各信号線の設計は上記に限定されない。
【００９９】
ＮＡＮＤコントローラ１４は、データ転送（Data  In）の際には、ＤＱＳ信号線をトグルする。ＮＡＮＤコントローラ１４は、ＤＱＳ信号のトグルを停止することによって、データ転送を中断する（ｔ１）。ＮＡＮＤコントローラ１４は、ＣＬＥ信号線をアサートすることによって、コマンドの送信を可能にし（ｔ２）、そして、退避コマンドを送信する（ｔ３）。ＮＡＮＤコントローラ１４は、ＷＥ信号線を立ち上げることによって、退避コマンドをアクセス回路２７に取得させる。アクセス回路２７は、退避コマンドを取得すると、取得した退避コマンドを実行する。アクセス回路２７は、退避コマンドの実行中においては、Ｒｙ／Ｂｙ信号線の状態をビジー状態にする（ｔ４〜ｔ５）。Ｒｙ／Ｂｙ信号線がレディー状態に戻ると、ＮＡＮＤコントローラ１４は、リードシーケンスを開始する（ｔ６）。
【０１００】
図１２は、メモリコントローラ１０がデータを復元してデータ転送を再開する場合における各種信号線の波形の一例を示す図であるData  Out動作においては、ＮＡＮＤコントローラ１４は、ＲＥ信号線をトグルする。アクセス回路２７は、ＲＥ信号線のトグルに基づいてＤＱＳ信号線をトグルする。ＮＡＮＤコントローラ１４は、リードシーケンスのData  Out動作を終了すると、ＣＬＥ信号線をアサートすることによって、コマンドの送信を可能にする（ｔ１１）。そして、ＮＡＮＤコントローラ１４は、復元コマンドを送信する（ｔ１２）。ＮＡＮＤコントローラ１４は、ＷＥ信号線を立ち上げることによって、復元コマンドをアクセス回路２７に取得させる。アクセス回路２７は、復元コマンドを取得すると、取得した復元コマンドを実行する。アクセス回路２７は、復元コマンドの実行中においては、Ｒｙ／Ｂｙ信号線の状態をビジー状態にする（ｔ１３〜ｔ１４）。Ｒｙ／Ｂｙ信号線がレディー状態に戻ると、ＮＡＮＤコントローラ１４は、プログラムシーケンスを再開する（ｔ１５）。
【０１０１】
ＮＡＮＤコントローラ１４は、プログラムシーケンスの再開時に、ページ選択コマンドCselの送信と（ｔ１５）、データ入力コマンドCdinの送信と（ｔ１６）、アドレス（カラムアドレスを含む）の送信と（ｔ１８）、を行う。ＮＡＮＤコントローラ１４は、データ入力コマンドCdinの送信タイミングとアドレスの送信タイミングとの間のタイミングで（ｔ１７）、ＣＬＥ信号線をネゲートするとともにＡＬＥ信号線をアサートする。これにより、コマンドの送信が不可能になり、アドレスの送信が可能になる。ＮＡＮＤコントローラ１４は、ページ選択コマンドCsel、データ入力コマンドCdin、およびアドレスを送信する際に、ＷＥ信号線を立ち上げることによって、各情報をアクセス回路２７に取得させる。
【０１０２】
ＮＡＮＤコントローラ１４は、アドレスの送信を完了すると、ＡＬＥ信号線をネゲートし（ｔ１９）、そして、データの転送を再開する。
【０１０３】
図１３は、データの退避／復元を行わない場合の制御シーケンスの一例を示す図である。本図では、プレーンＢのロアーページ用のデータの転送の完了後から次のプレーンＡ用のデータが入力されるまでの期間（即ち図６の期間２０５）にプログラムシーケンスが中断される場合の制御シーケンスを示している。
【０１０４】
第２の完了コマンドCc2の実行が完了すると、転送バッファ２４Ａおよび転送バッファ２４Ｂは空いている状態になる。メモリコントローラ１０は、第２の完了コマンドCc2の送信後、Ｒｙ／Ｂｙ信号線がビジー状態からレディー状態に戻った後、退避コマンドCrestoreを送信することなくリードシーケンスを開始する。リードシーケンスが完了すると、メモリコントローラ１０は、プレーンＡのミドルページ用のデータの転送のための一連のシーケンスを実行する。
【０１０５】
図１４は、データの退避／復元を行わない場合の制御シーケンスの別の一例を示す図である。本図では、プレーンＡのロアーページ用のデータの転送中（即ち図６の期間２０２）にプレーンＢをリード元とするリードシーケンスが実行される場合の制御シーケンスを示している。
【０１０６】
本図の例では、空いている転送バッファ２４Ｂがリードシーケンスで使用される。よって、メモリコントローラ１０は、プレーンＡのロアーページ用のデータ転送を中断すると、退避コマンドCbackupを送信することなくリードシーケンスを開始する。リードシーケンスが完了すると、メモリコントローラ１０は、復元コマンドCrestoreを送信することなくプログラムシーケンスを再開する。
【０１０７】
プログラムシーケンスの再開時には、図１０に示される例と同様に、メモリコントローラ１０は、ページ選択コマンドCsel_l、データ入力コマンドCdin、およびアドレス（カラムアドレスを含む）を送信する。なお、メモリコントローラ１０は、ページ選択コマンドCsel_l、データ入力コマンドCdin、およびアドレス（カラムアドレス）のうちの一部または全部を送信しないように構成され得る。
【０１０８】
なお、以上の説明においては、２つのプレーンを有するメモリチップ２２に対し、各プレーンに３ページのデータをプログラムする場合の例を説明した。メモリチップ２２が有するプレーンの数は２に限定されない。また、１回のプログラムシーケンスでプログラムが実行されるプレーンの数は２に限定されない。また、１回のプログラムシーケンスで各プレーンにプログラムされるデータの容量は３ページの容量に限定されない。また、データが転送される順番は、プレーンＡ用のデータ、プレーンＢ用のデータの順番に限定されない。また、データが転送される順番は、ロアーページ用のデータ、ミドルページ用のデータ、アッパーページ用のデータの順番に限定されない。メモリコントローラ１０は、メモリチップ２２が備えるプレーンの数、プログラム対象のプレーンの数、および各プレーンにプログラムされるデータの容量に関係なく、プログラムシーケンスを中断するか否かを、処理が転送フェーズにあるか否かに応じて決定する。また、メモリコントローラ１０は、メモリチップ２２が備えるプレーンの数、プログラム対象のプレーンの数、および各プレーンにプログラムされるデータの容量に関係なく、リードシーケンスで使用される転送バッファ２４が空いているか否かに応じて退避／復元の実行／不実行を決定する。
【０１０９】
また、以上の説明では、ＮＡＮＤメモリ２０は、ＮＡＮＤストリングＮＳが基板に平行に設けられた構造を有するとして説明した。ＮＡＮＤメモリ２０は、ＮＡＮＤストリングＮＳが基板に垂直に設けられた３次元構造を有していてもよい。
【０１１０】
以上述べたように、第１の実施形態では、メモリコントローラ１０は、転送フェーズにおいてプログラムシーケンスを中断して、メモリセルアレイ２３からデータをリードするリードシーケンスを実行する。そして、メモリコントローラ１０は、リードシーケンスの実行後、プログラムシーケンスを再開する。メモリシステム１は、プログラムシーケンスが開始された後であっても、プログラムフェーズの開始前であればリードシーケンスを開始することが可能であるので、ホスト２からのリード要求に関するレイテンシが低減される。
【０１１１】
また、第１の実施形態では、メモリチップ２２は、メモリチップ２２とメモリコントローラ１０との間のデータ転送用の転送バッファ２４と、退避バッファ２６とを備える。アクセス回路２７は、リードシーケンスにおいて使用される転送バッファ２４に、プログラムシーケンスの中断のタイミングまでに転送されたデータがある場合、そのデータを、退避バッファ２６に退避する。そして、退避が完了した後、アクセス回路２７は、メモリセルアレイ２３からリードしたデータを転送バッファ２４を介してメモリコントローラ１０に転送する。そして、転送が完了した後、アクセス回路２７は、退避バッファ２６に退避されたデータを転送バッファ２４に復元する。このような構成により、メモリコントローラ１０は、リードシーケンスが完了した後、未転送の部分からデータの転送を再開することができる。よって、メモリコントローラ１０が既に転送済みのデータを再び転送する場合に比べ、プログラムシーケンスに要する合計の時間を短縮することが可能となる。
【０１１２】
また、第１の実施形態では、リードシーケンスにおいて使用される転送バッファ２４に、プログラムシーケンスの中断のタイミングまでに転送されたデータがある場合、メモリコントローラ１０は、その転送バッファ２４の内容を退避バッファ２６に退避する。リードシーケンスにおいて使用される転送バッファ２４に、プログラムシーケンスの中断のタイミングまでに転送されたデータがない場合、メモリコントローラ１０は、その転送バッファ２４の内容を退避バッファ２６に退避しない。内容の退避が実行される転送バッファ２４が必要最小限に限定されることによって、退避に要する時間が短縮され得る。また、退避に要する消費電力が低減され得る。
【０１１３】
（第２の実施形態）
第１の実施形態では、メモリコントローラ１０が転送フェーズ中の任意のタイミングでプログラムシーケンスを中断する例について説明した。プログラムシーケンスを中断するタイミングについてさらなる制約が設けられてもよい。第２の実施形態では、プログラムシーケンスを中断するタイミングについてさらなる制約が設けられた例について説明する。
【０１１４】
図１５は、第２の実施形態のメモリシステム１の動作を説明するフローチャートである。ここでは、第１の実施形態と異なる動作について重点的に説明する。
【０１１５】
まず、メモリコントローラ１０は、プログラムシーケンスを開始する（Ｓ２０１）。プログラムシーケンスの開始後、メモリコントローラ１０がホスト２からリード要求を受信すると（Ｓ２０２、Ｙｅｓ）、現在の処理が転送フェーズにあるか否かを判定する（Ｓ２０３）。
【０１１６】
現在の処理が転送フェーズにある場合（Ｓ２０３、Ｙｅｓ）、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４が空いているか否かを判定する（Ｓ２０４）。
【０１１７】
Ｓ２０４の処理では、メモリコントローラ１０は、転送バッファ２４Ａおよび転送バッファ２４Ｂの両方が空である場合と、転送バッファ２４Ｂが空でありかつプレーンＢのみがリード元である場合とにおいて、リードシーケンスにおいて使用される転送バッファ２４が空であると判定する。上記以外の場合、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４が空いていないと判定する。
【０１１８】
リードシーケンスで使用される転送バッファ２４が空いている場合（Ｓ２０４、Ｙｅｓ）、メモリコントローラ１０は、プログラムシーケンスを中断し（Ｓ２０５）、リードシーケンスを実行する（Ｓ２０６）。リードシーケンスが完了すると、メモリコントローラ１０は、プログラムシーケンスを再開する（Ｓ２０７）。プログラムシーケンスが完了すると（Ｓ２０８）、一連の動作が完了する。
【０１１９】
リードシーケンスで使用される転送バッファ２４が空いていない場合（Ｓ２０４、Ｎｏ）、メモリコントローラ１０は、プログラムシーケンスを継続し、その後、Ｓ２０３の処理を再び実行する。
【０１２０】
Ｓ２０３の判定処理において、処理が転送フェーズにないと判定された場合（Ｓ２０３、Ｎｏ）、メモリコントローラ１０は、プログラムシーケンスを継続する。そして、プログラムシーケンスが完了すると（Ｓ２０９）、メモリコントローラ１０は、リードシーケンスを実行し（Ｓ２１０）、一連の動作が完了する。
【０１２１】
以上述べたように、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４が空いている場合、プログラムシーケンスを中断してリードシーケンスを実行し、リードシーケンスで使用される転送バッファ２４が空いていない場合、プログラムシーケンスを継続する。これにより、退避／復元の動作を不要とすることが可能である。
【０１２２】
また、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４が空いていない場合、リードシーケンスで使用される転送バッファ２４が空くまでプログラムシーケンスを継続する。リードシーケンスで使用される転送バッファ２４がプログラムシーケンスの途中で空いた場合、メモリコントローラ１０は、プログラムシーケンスを中断してリードシーケンスを実行する。これにより、退避／復元の動作を不要とすることが可能である。
【０１２３】
なお、Ｓ２０４の処理においてリードシーケンスで使用される転送バッファ２４が空いていないと判定された場合、メモリコントローラ１０は、プログラムシーケンスが完了するまでリードシーケンスを待たせるよう、構成され得る。
【０１２４】
このように、メモリコントローラ１０は、退避／復元の動作が不要なタイミングでのみプログラムシーケンスを中断するよう、構成され得る。
【０１２５】
（第３の実施形態）
第３の実施形態では、プログラムシーケンスを中断するタイミングについて制約が設けられた別の一例について説明する。
【０１２６】
図１６は、第３の実施形態のメモリシステム１の動作を説明するフローチャートである。本図に示す一連の処理のうち、第２の実施形態で実行される処理と同じ処理に対し、第２の実施形態と同じステップ番号が付されている。
【０１２７】
第３の実施形態では、Ｓ２０４の処理の代わりに、Ｓ３０４の処理が設けられている。Ｓ３０４では、メモリコントローラ１０は、現在のタイミングが第２の完了コマンドCc2の送信後から次のデータの転送が開始されるまでの期間（即ち図７の期間２０５、期間２０９）に含まれるか否かを判定する。現在のタイミングが上述の期間に含まれる場合（Ｓ３０４、Ｙｅｓ）、データの退避／復元が不要であるので、メモリコントローラ１０は、Ｓ２０５の処理に進む。現在のタイミングが上述の期間に含まれない場合（Ｓ３０４、Ｎｏ）、メモリコントローラ１０はＳ２０３の処理に進む。
【０１２８】
このように、第３の実施形態によれば、メモリコントローラ１０は、第２の完了コマンドCc2の送信後から次のプレーン（プレーンＡ）用のデータの転送が開始されるまでの期間のみにプログラムシーケンスを中断する。
【０１２９】
即ち、メモリコントローラ１０は、第２の完了コマンドCc2を送信することによってアクセス回路２７に転送バッファ２４の内容を中間バッファ２５に取得させ、その後、リードシーケンスを実行する。リードシーケンスの実行後、メモリコントローラ１０は、次のページ用のデータを転送バッファ２４に送信する。そして、メモリコントローラ１０は、プログラム実行コマンドCprogを送信することによって、アクセス回路２７に、データのプログラムを実行させる。
【０１３０】
このような構成によって、メモリコントローラ１０は、データの退避／復元を要することなくリードシーケンスを実行することが可能となる。
【０１３１】
なお、メモリコントローラ１０は、現在のタイミングが、第２の完了コマンドCc2の送信後から次のデータの転送が開始されるまでの期間に含まれる場合に加えて、現在のタイミングが、プログラムシーケンスが開始されてから最初のデータの転送を開始するまでの期間（即ち図７の期間２０１）に含まれる場合においても、Ｓ２０５の処理に進んでもよい。
【０１３２】
また、メモリコントローラ１０は、Ｓ３０４の処理において、現在のタイミングが第２の完了コマンドCc2の送信後から次のデータの転送が開始されるまでの期間に含まれないと判定された場合（Ｓ３０４、Ｎｏ）、プログラムシーケンスが完了するまでリードシーケンスを待たせるよう、構成され得る。
【０１３３】
（第４の実施形態）
第４の実施形態では、プログラムシーケンスを中断するタイミングについて制約が設けられたさらに別の例について説明する。
【０１３４】
図１７は、第４の実施形態のメモリシステム１の動作を説明するフローチャートである。本図に示す一連の処理のうち、第２の実施形態で実行される処理と同じ処理に対し、第２の実施形態と同じステップ番号が付されている。
【０１３５】
第４の実施形態では、Ｓ２０４の処理の代わりに、Ｓ４０４、Ｓ４０５、およびＳ４０６の処理が設けられている。
【０１３６】
Ｓ４０４では、メモリコントローラ１０は、現在のタイミングが第２の完了コマンドCc2の送信後から次のデータの転送が開始されるまでの期間（即ち図７の期間２０５、期間２０９）に含まれるか否かを判定する。現在のタイミングが上述の期間に含まれる場合（Ｓ４０４、Ｙｅｓ）、データの退避／復元が不要であるので、メモリコントローラ１０は、Ｓ２０５の処理に進む。
【０１３７】
現在のタイミングが上述の期間に含まれない場合（Ｓ４０４、Ｎｏ）、メモリコントローラ１０は、現在のタイミングが第１の完了コマンドCc1の送信後から次のデータの転送が開始されるまでの期間（即ち図７の期間２０３、期間２０７、期間２１１）に含まれるか否かを判定する（Ｓ４０５）。現在のタイミングが上述の期間に含まれる場合（Ｓ４０５、Ｙｅｓ）、メモリコントローラ１０は、プレーンＡがリード元に該当するか否かを判定する（Ｓ４０６）。
【０１３８】
プレーンＡがリード元に該当する場合（Ｓ４０６、Ｙｅｓ）、メモリコントローラ１０は、Ｓ２０３の処理に進む。プレーンＡがリード元に該当しない場合（Ｓ４０６、Ｎｏ）、データの退避／復元が不要であるので、メモリコントローラ１０は、Ｓ２０５の処理に進む。
【０１３９】
現在のタイミングが第１の完了コマンドCc1の送信後から次のデータの転送が開始されるまでの期間に含まれない場合（Ｓ４０５、Ｎｏ）、メモリコントローラ１０は、Ｓ２０３の処理に進む。
【０１４０】
このように、第４の実施形態では、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４が空いている場合、１つのプレーン用のデータの転送が完了してから次のプレーン用のデータの転送が開始されるまでの間にプログラムシーケンスを中断する。よって、メモリコントローラ１０は、データの退避／復元を要することなくリードシーケンスを実行することができる。
【０１４１】
なお、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４が空いていない場合であっても、１つのプレーン用のデータの転送が完了してから次のプレーン用のデータの転送が開始されるまでの間にプログラムシーケンスを中断し、リードシーケンスを実行してもよい。その場合には、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４の内容を退避バッファ２６に退避し、退避の後にリードシーケンスを実行し、リードシーケンスの実行後に退避バッファ２６内の内容を転送バッファ２４に復元すればよい。
【０１４２】
また、第３の実施形態と同様に、メモリコントローラ１０は、現在のタイミングがプログラムシーケンスが開始されてから最初のデータの転送を開始するまでの期間（即ち図７の期間２０１）に含まれる場合においても、Ｓ２０５の処理に進んでもよい。
【０１４３】
（第５の実施形態）
第１の実施形態においては、メモリコントローラ１０は、プログラムシーケンスを中断した後、リードシーケンスで使用される転送バッファ２４が空いていない場合、その転送バッファ２４の内容を退避した。退避が実行される転送バッファ２４の決定方法はこれに限定されない。
【０１４４】
図１８〜図２０は、それぞれ退避ルールの変形例を説明するための図である。図１８〜図２０は、リード元のプレーンと空いている転送バッファ２４と内容の退避が実行される転送バッファ２４との関係を示している。
【０１４５】
図１８に示される例によれば、メモリコントローラ１０は、それぞれの転送バッファ２４が空いているか否かに関わらず全転送バッファ２４の内容を対応する退避バッファ２６に退避する。メモリコントローラ１０は、リードシーケンスの完了後、全退避バッファ２６の内容を対応する転送バッファ２４に復元する。
【０１４６】
図１９に示される例によれば、メモリコントローラ１０は、空いていない転送バッファ２４を特定し、当該特定した転送バッファ２４がリードシーケンスで使用されるか否かに関わらず、当該特定した転送バッファ２４の内容を退避バッファ２６に退避する。メモリコントローラ１０は、リードシーケンスの完了後、退避バッファ２６に退避された内容を対応する転送バッファ２４に復元する。
【０１４７】
図２０に示される例によれば、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４を特定し、当該特定した転送バッファ２４が空いているか否かに関わらず、当該特定した転送バッファ２４の内容を退避バッファ２６に退避する。ただし、全ての転送バッファ２４が空いている場合には、メモリコントローラ１０は、退避を実行しない。メモリコントローラ１０は、リードシーケンスの完了後、退避バッファ２６に退避された内容を対応する転送バッファ２４に復元する。なお、全ての転送バッファ２４が空いている場合においても、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４を特定し、当該特定した転送バッファ２４の内容を退避バッファ２６に退避してもよい。
【０１４８】
このように、退避が実行される転送バッファ２４の決定方法は、種々に変形可能である。第５の実施形態で述べた決定方法によれば、第１の実施形態に比べ、退避が実行される転送バッファ２４を選択するアルゴリズムが簡単になる。
【０１４９】
（第６の実施形態）
以上の実施形態では、メモリコントローラ１０がプログラムシーケンスを中断して１つのリードシーケンスを実行する例について説明した。メモリコントローラ１０は、プログラムシーケンスを中断して２以上のリードシーケンスを実行してもよい。
【０１５０】
第６の実施形態では、メモリコントローラ１０がプログラムシーケンスを中断して、プレーンＡからデータをリードする第１のリードシーケンスと、プレーンＢからデータをリードする第２のリードシーケンスと、プレーンＡからデータをリードする第３のリードシーケンスとをこの順番で実行する例について説明する。
【０１５１】
図２１は、第６の実施形態の制御シーケンスの一例を示す概略図である。本図では、プログラムシーケンスの開始後の制御シーケンスを示している。
【０１５２】
メモリコントローラ１０は、プログラムシーケンスを中断すると、プレーンＡおよびプレーンＢの指定を含む退避コマンドCbackupをメモリチップ２２に送信することによって、３つのリードシーケンスにて使用される全ての転送バッファ２４の内容を退避バッファ２６に退避する。ここでは、第１のリードシーケンスと第３のリードシーケンスとにおいて転送バッファ２４Ａが使用され、第２のリードシーケンスにおいて転送バッファ２４Ｂが使用されるので、メモリコントローラ１０は、転送バッファ２４Ａの内容と転送バッファ２４Ｂの内容とを退避する。退避の後、メモリコントローラ１０は、第１のリードシーケンス、第２のリードシーケンス、および第３のリードシーケンスを実行する。全てのリードシーケンスの完了後、メモリコントローラ１０は、プレーンＡおよびプレーンＢの指定を含む復元コマンドCrestoreを送信することによって、退避バッファ２６に退避された転送バッファ２４Ａの内容と転送バッファ２４Ｂの内容とをそれぞれ復元する。
【０１５３】
このように、メモリコントローラ１０は、転送フェーズにおいて複数のリードシーケンスを実行する場合、複数のリードシーケンスの開始前に退避コマンドCbackupを１回だけ送信し、複数のリードシーケンスの完了後に復元コマンドCrestoreを送信する。
【０１５４】
なお、種々の退避ルールが採用可能である。例えば、メモリコントローラ１０は、複数のリードシーケンスにおいて転送バッファ２４が使用されるか否かに関わらず、全ての転送バッファ２４の内容を退避してもよい。また、メモリコントローラ１０は、複数のシードシーケンスの何れかにおいて使用される転送バッファ２４の内容を退避し、複数のシードシーケンスの何れにおいても使用されない転送バッファ２４の内容の退避を実行しなくてもよい。また、メモリコントローラ１０は、空いていない転送バッファ２４の内容を退避し、空いている転送バッファ２４の内容の退避を実行しなくてもよい。また、メモリコントローラ１０は、複数のリードシーケンスの何れかにおいて使用されかつ空いていない転送バッファ２４の内容を退避し、複数のリードシーケンスの何れにおいても使用されないかまたは空いている転送バッファ２４の内容の退避を実行しなくてもよい。
【０１５５】
図２２は、第６の実施形態の制御シーケンスの別の一例を示す概略図である。本図に示されるように、メモリコントローラ１０は、リードシーケンス毎に退避／復元を行ってもよい。本図に例示される制御シーケンスにおいても、種々の退避ルールが採用可能である。
【０１５６】
例えば、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４の内容を、そのリードシーケンスの直前に退避し、そのリードシーケンスの完了後、退避された内容を転送バッファ２４に復元してもよい。また、メモリコントローラ１０は、転送バッファ２４が使用されるか否かに関わらず、全ての転送バッファ２４の内容を退避してもよい。また、メモリコントローラ１０は、リードシーケンスで使用される転送バッファ２４の内容をそのリードシーケンスの直前に退避し、そのリードシーケンスで使用されない転送バッファ２４の内容の退避を実行しなくてもよい。また、メモリコントローラ１０は、リードシーケンスにおいて使用されかつ空いていない転送バッファ２４の内容を退避し、そのリードシーケンスにおいて使用されないかまたは空いている転送バッファ２４の内容の退避を実行しなくてもよい。
【０１５７】
図２３は、第６の実施形態の制御シーケンスのさらに別の一例を示す概略図である。本図に示されるように、メモリコントローラ１０は、リードシーケンス毎に退避を実行し、全てのリードシーケンスが完了した後に復元を実行してもよい。メモリコントローラ１０は、プログラムシーケンスを中断後に、転送バッファ２４Ａを使用するリードシーケンスを最初に実行する際に（即ち第１のリードシーケンスを実行する際に）、転送バッファ２４Ａの内容を退避する。また、メモリコントローラ１０は、プログラムシーケンスを中断後に、転送バッファ２４Ｂを使用するリードシーケンスを最初に実行する際に（即ち第２のリードシーケンスを実行する際に）、転送バッファ２４Ｂの内容を退避する。そして、メモリコントローラ１０は、全てのリードシーケンスの実行が完了した後に、退避した全ての内容を復元する。
【０１５８】
なお、図２３に例示される制御シーケンスにおいても、種々の退避ルールが採用可能である。例えば、メモリコントローラ１０は、プログラムシーケンスを中断後に、転送バッファ２４Ａを使用するリードシーケンスを最初に実行する際であっても、転送バッファ２４Ａが空いている場合には、転送バッファ２４Ａの内容の退避を実行しなくてもよい。
【０１５９】
（第７の実施形態）
第１〜第６の実施形態では、メモリコントローラ１０が退避／復元の要否を判定した。各メモリチップ２２が退避／復元の要否を判定し、退避および復元を実行してもよい。
【０１６０】
例えば、メモリコントローラ１０は、プログラムシーケンスの転送フェーズにおいて、プログラムシーケンスを中断してリードシーケンスを開始する。メモリチップ２２では、アクセス回路２７は、転送済みのデータの量またはカラムアドレスをカウントするなどによって、データ転送の進捗、転送中のデータの書き込み先のプレーン、などを含めたプログラムシーケンスの進捗をトラッキングしている。リードシーケンスが開始されると、アクセス回路２７は、転送バッファ２４の内容の退避／復元の要否を任意の退避ルール（例えば第１〜第６の実施形態にて述べた退避ルールのうちの任意のルール）に基づいて判定する。転送バッファ２４の内容の退避／復元が必要と判定された場合、アクセス回路２７は、リードシーケンスの実行前にその転送バッファ２４の内容を退避バッファ２６に退避する。アクセス回路２７は、リードシーケンスの完了後に、退避バッファ２６に退避された内容を転送バッファ２４に復元する。
【０１６１】
アクセス回路２７は、転送フェーズにおいてリードコマンドを受信可能に構成される。アクセス回路２７は、転送フェーズにおいてリードコマンドを受信した場合、転送フェーズを中断してリードシーケンスを実行する。アクセス回路２７は、リードシーケンスの完了後、転送フェーズを再開する。転送フェーズの中断／再開の際には、アクセス回路２７は、退避／復元を実行してもよいし、リードシーケンスで使用される転送バッファ２４が空くタイミングまでリードシーケンスの実行を待たせてもよい。
【０１６２】
このように、メモリシステム１は、各メモリチップ２２において退避／復元の要否が判定されるように、構成され得る。
【０１６３】
（第８の実施形態）
図２４は、第８の実施形態の制御シーケンスの一例を示す概略図である。なお、本図は、図５の（Ｅ）からの制御シーケンスを示している。
【０１６４】
図２４に示されるように、メモリコントローラ１０は、Ｒｙ／Ｂｙ信号線の状態がブログラムビジー状態においてサスペンドコマンドCsuspendを送信する。アクセス回路２７は、サスペンドコマンドCsuspendを受信すると、プログラム処理を停止する。アクセス回路２７は、プログラム処理を停止後、Ｒｙ／Ｂｙ信号線の状態をビジー状態からレディー状態に遷移させる。
【０１６５】
Ｒｙ／Ｂｙ信号線の状態がビジー状態からレディー状態に遷移すると、メモリコントローラ１０は、リードシーケンスを開始する。リードシーケンスが完了すると、メモリコントローラ１０は、レジュームコマンドCresumeを送信する。アクセス回路２７は、レジュームコマンドCresumeを受信すると、プログラム処理を再開する。プログラム処理が完了すると、アクセス回路２７は、Ｒｙ／Ｂｙ信号線の状態をビジー状態からレディー状態に遷移させる。
【０１６６】
Ｒｙ／Ｂｙ信号がプログラムビジー状態からレディー状態に遷移すると、ＮＡＮＤコントローラ１４は、ステータスを読み出すためのコマンドCstatusを送信する。アクセス回路２７は、ステータス情報をＮＡＮＤコントローラ１４に応答する。
【０１６７】
このように、メモリシステム１は、プログラムフェーズが中断可能に構成されてもよい。なお、第８の実施形態は、第１〜第７の実施形態のメモリシステム１に適用可能である。
【０１６８】
第１〜第８の実施形態において説明したように、メモリコントローラ１０は、プログラムフェーズに移行する前において（即ち転送フェーズにおいて）、プログラムシーケンスを中断してリードシーケンスを実行することができる。よって、プログラムシーケンスの実行が完了するまでリードシーケンスが開始できない場合に比べて、リード要求に対するレイテンシが低減される。
【０１６９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１７０】
１  メモリシステム、２  ホスト、１０  メモリコントローラ、１１  ＣＰＵ、１２  ホストインタフェースコントローラ、１３  ＲＡＭ、１４  コントローラ、２０  ＮＡＮＤメモリ、２１  ＮＡＮＤパッケージ、２２  メモリチップ、２３，２３Ａ，２３Ｂ  メモリセルアレイ、２４，２４Ａ，２４Ｂ  転送バッファ、２５，２５Ａ，２５Ｂ  中間バッファ、２６，２６Ａ，２６Ｂ  退避バッファ。
【図１】
2019057147.tif 000003
【図２】
2019057147.tif 000004
【図３】
2019057147.tif 000005
【図４】
2019057147.tif 000006
【図５】
2019057147.tif 000007
【図６】
2019057147.tif 000008
【図７】
2019057147.tif 000009
【図８】
2019057147.tif 000010
【図９】
2019057147.tif 000011
【図１０】
2019057147.tif 000012
【図１１】
2019057147.tif 000013
【図１２】
2019057147.tif 000014
【図１３】
2019057147.tif 000015
【図１４】
2019057147.tif 000016
【図１５】
2019057147.tif 000017
【図１６】
2019057147.tif 000018
【図１７】
2019057147.tif 000019
【図１８】
2019057147.tif 000020
【図１９】
2019057147.tif 000021
【図２０】
2019057147.tif 000022
【図２１】
2019057147.tif 000023
【図２２】
2019057147.tif 000024
【図２３】
2019057147.tif 000025
【図２４】
2019057147.tif 000026