(57)【要約】【課題】コントローラ側の処理負担を軽減できる不揮発性半導体記憶装置を実現する。【解決手段】コントローラに接続可能な不揮発性半導体記憶装置は、複数のブロックを含むセルアレイと、制御回路とを含む。前記制御回路は、前記複数のブロックのうち前記コントローラによって選択される書き込み先ブロックに含まれる複数のページに対するプログラム動作を、所定のプログラム順序で実行する。前記制御回路は、前記書き込み先ブロックに対する次のプログラム動作に対応するページアドレスを前記コントローラに通知する。【選択図】図７Ａ
2020135904.tif 000002
【特許請求の範囲】
【請求項１】
コントローラに接続可能な不揮発性半導体記憶装置であって、
複数のブロックを含むセルアレイと、
前記複数のブロックのうち前記コントローラによって選択される書き込み先ブロックに含まれる複数のページに対するプログラム動作を、所定のプログラム順序で実行するように構成された制御回路とを具備し、
前記制御回路は、前記書き込み先ブロックに対する次のプログラム動作に対応するページアドレスを前記コントローラに通知するように構成されている、不揮発性半導体記憶装置。
【請求項２】
前記制御回路は、前記複数のブロックのうちの一つのブロックを前記書き込み先ブロックとして選択するための第１の処理要求を前記コントローラから受信した場合、前記書き込み先ブロックに含まれる前記複数のページのうち、最初のブログラム順序番号に対応するページを示すページアドレスを、前記書き込み先ブロックに対する前記次のプログラム動作に対応する前記ページアドレスとして、前記コントローラに通知するように構成されている請求項１記載の不揮発性半導体記憶装置。
【請求項３】
前記制御回路は、
前記最初のブログラム順序番号に対応する前記ページの前記ページアドレスを指定するプログラム要求と前記最初のブログラム順序番号に対応する前記ページに書き込むべきデータとを前記コントローラから受信した場合、前記書き込み先ブロックに含まれる前記複数のページのうち、次のブログラム順序番号に対応するページを示すページアドレスを、前記書き込み先ブロックに対する前記次のプログラム動作に対応する前記ページアドレスとして、前記コントローラに通知するように構成されている請求項２記載の不揮発性半導体記憶装置。
【請求項４】
前記コントローラから転送されるデータを保持するバッファをさらに具備し、
前記書き込み先ブロックに属する複数のワードラインの各々は複数ページを含み、
前記制御回路は、前記書き込み先ブロック内の各ワードラインに対して、複数回のプログラム動作を実行するように構成されており、
前記プログラム順序は、隣接するワードラインそれぞれに対するプログラム動作が互いに交互に実行されるように決められており、
前記コントローラから受信されるプログラム要求によって指定されるページアドレスに対するプログラム動作が前記書き込み先ブロック内の第１のワードラインに対する２回目以降のプログラム動作である場合、前記制御回路は、前記第１のワードラインに対する以前のプログラム動作で使用したデータを前記バッファから読み出し、前記読み出したデータと、前記コントローラから転送される、前記指定されるページアドレスに書き込むべきデータとを使用して、前記第１のワードラインに対するプログラム動作を実行するように構成されている請求項１記載の不揮発性半導体記憶装置。
【請求項５】
前記制御回路は、前記通知したページアドレスを指定するプログラム要求と前記指定されたページアドレスを有するページに対応するデータとを前記コントローラから受信した後、前記ページに対応する前記データが前記書き込み先ブロックのどのページに対するプログラム動作においても必要でなくなった場合に、前記ページに対応するデータが不要であることを前記コントローラに通知するように構成されている請求項１記載の不揮発性半導体記憶装置。
【請求項６】
前記コントローラから転送されるデータを保持するバッファをさらに具備し、
前記制御回路は、
前記通知したページアドレスとは異なる別のページアドレスを指定するプログラム要求と前記別のページアドレスに対応するデータとを前記コントローラから受信した場合、前記別のページアドレスを有するページに対するプログラム動作を実行せずに、前記受信したデータを前記バッファに格納するように構成されている請求項１記載の不揮発性半導体記憶装置。
【請求項７】
前記制御回路は、
前記通知したページアドレスを指定するプログラム要求と前記通知したページアドレスを有する前記ページに対応するデータとを前記コントローラから受信した場合、前記通知したページアドレスを有する前記ページに対するブログラム動作を実行し、
前記通知したページアドレスを有する前記ページに対するブログラム動作を実行した後、次のブログラム動作が実行されるべき前記書き込み先ブロック内の次のページに対応するデータが前記バッファに存在する場合、前記次のページに対するプログラム動作を実行するように構成されている請求項６記載の不揮発性半導体記憶装置。
【請求項８】
前記制御回路は、前記書き込み先ブロックのどのページに対するプログラム動作においても必要なくなったデータが格納されている前記バッファ内の領域を解放するように構成されている請求項７記載の不揮発性半導体記憶装置。
【請求項９】
前記制御回路は、前記通知したページアドレスをコピー先位置として指定し且つコピー元位置を指定するコピー要求を前記コントローラから受信した場合、前記コピー元位置に格納されているデータを前記セルアレイから前記不揮発性半導体記憶装置内に存在するバッファに読み出し、前記バッファから前記コピー先位置に前記データを書き込むプログラム動作を実行するように構成されている請求項１記載の不揮発性半導体記憶装置。
【請求項１０】
誤り訂正符号デコーダをさらに具備し、
前記制御回路は、前記誤り訂正符号デコーダを有効にすべきことが前記コントローラによって指示された場合、前記コントローラからの処理要求に応じて前記セルアレイから読み出される、データと誤り訂正符号とを含を符号化データに対する誤り訂正復号処理を、前記誤り訂正符号デコーダを使用して行うように構成されている請求項１記載の不揮発性半導体記憶装置。
【請求項１１】
誤り訂正符号デコーダをさらに具備し、
前記制御回路は、前記誤り訂正符号デコーダを有効にすべきことが前記コントローラによって指示された場合、前記コントローラからの前記コピー要求に応じて前記セルアレイの前記コピー元位置から読み出される、データと誤り訂正符号とを含を符号化データに対する誤り訂正復号処理を、前記誤り訂正符号デコーダを使用して行うように構成されている請求項９記載の不揮発性半導体記憶装置。
【請求項１２】
誤り訂正符号エンコーダをさらに具備し、
前記制御回路は、前記誤り訂正符号エンコーダを有効にすべきことが前記コントローラによって指示された場合、前記書き込み先ブロックに書き込むべきデータに誤り訂正符号を付加する誤り訂正符号化処理を、前記誤り訂正符号エンコーダを使用して行うように構成されている請求項１記載の不揮発性半導体記憶装置。
【請求項１３】
誤り訂正符号エンコーダをさらに具備し、
前記制御回路は、前記誤り訂正符号エンコーダを有効にすべきことが前記コントローラによって指示された場合、前記訂正復号処理によって誤りが訂正されたデータを、前記コピー先位置に書き込むプログラム動作を実行するように構成されている請求項１１記載の不揮発性半導体記憶装置。
【請求項１４】
元データのデータパターンを誤りが生じ難いデータパターンに変換する誤り抑制符号化処理によって符号化されたデータを復号して元データに戻す誤り抑制符号デコーダをさらに具備し、
前記制御回路は、前記誤り抑制符号デコーダを有効にすべきことが前記コントローラによって指示された場合、前記コントローラからの処理要求に応じて前記セルアレイから読み出される、誤り抑制符号化処理によって符号化されたデータを元のデータに戻す誤り抑制復号処理を、前記誤り抑制符号デコーダを使用して行うように構成されている請求項１記載の不揮発性半導体記憶装置。
【請求項１５】
元データのデータパターンを誤りを抑制するデータパターンに変換する誤り抑制符号化処理を行う誤り抑制符号エンコーダをさらに具備し、
前記制御回路は、前記誤り訂正符号エンコーダを有効にすべきことが前記コントローラによって指示された場合、前記誤り抑制符号エンコーダを使用して、前記書き込み先ブロックに書き込むべきデータを前記誤り抑制符号化処理によって符号化するように構成されている請求項１記載の不揮発性半導体記憶装置。
【請求項１６】
誤り訂正符号デコーダと、
元データのデータパターンを誤りを抑制するデータパターンに変換する誤り抑制符号化処理によって符号化されたデータを復号して元データに戻す誤り抑制符号デコーダと
をさらに具備し、
前記制御回路は、前記誤り訂正符号デコーダおよび前記誤り抑制符号デコーダを有効にすべきことが前記コントローラによって指示された場合、前記コントローラからの処理要求に応じて前記セルアレイから読み出される、データと誤り訂正符号とを含む符号化データに対する誤り訂正復号処理を前記誤り訂正符号デコーダを使用して行い、そして誤りが訂正されたデータを元データに戻す誤り抑制復号処理を前記誤り抑制符号デコーダを使用して行うように構成されている請求項１記載の不揮発性半導体記憶装置。
【請求項１７】
誤り訂正符号エンコーダと、
元データのデータパターンを誤りが生じるのを抑制するデータパターンに変換する誤り抑制符号化処理を行う誤り抑制符号エンコーダと
をさらに具備し、
前記制御回路は、前記誤り訂正符号エンコーダおよび前記誤り抑制符号エンコーダを有効にすべきことが前記コントローラによって指示された場合、前記誤り抑制符号エンコーダを使用して、前記書き込み先ブロックに書き込むべきデータを前記誤り抑制符号化処理によって符号化し、そして前記誤り抑制符号化処理によって符号化されたデータに誤り訂正符号を付加する誤り訂正符号化処理を前記誤り訂正符号エンコーダを使用して行うように構成されている請求項１記載の不揮発性半導体記憶装置。
【請求項１８】
誤り訂正符号デコーダをさらに具備し、
前記制御回路は、前記複数のブロック内の第１のブロックに格納されているデータの誤りビット数のチェックを指示する処理要求を前記コントローラから受信した場合、誤り訂正符号デコーダを使用して、前記第１のブロックに格納されているデータに含まれる誤りビット数を調べ、前記誤りビット数に関するチェック結果を前記コントローラに返すように構成されている請求項１記載の不揮発性半導体記憶装置。
【請求項１９】
前記チェック結果は、調べた誤りビット数が閾値以上か否かを示す請求項１８記載の不揮発性半導体記憶装置。
【請求項２０】
前記チェック結果は、前記第１のブロックに格納されているデータの誤り訂正の成功または失敗を示す請求項１８記載の不揮発性半導体記憶装置。
【請求項２１】
前記制御回路は、少なくとも、前記第１のブロックに格納されている第１のデータに含まれる誤りビット数と前記第１のブロックに格納されている第２のデータに含まれる誤りビット数とを調べ、最も多い誤りビット数を前記チェック結果として前記コントローラに返すように構成されている請求項１８記載の不揮発性半導体記憶装置。
【請求項２２】
誤り訂正符号デコーダをさらに具備し、
前記制御回路は、セルアレイからのデータ読み出しに使用する読み出し電圧レベルの調整を指示する処理要求を前記コントローラから受信した場合、読み出し対象ワードラインに印加する読み出し電圧レベルを変更しながら、前記読み出し対象ワードラインに接続された複数のメモリセルからデータを読み出す動作と、読み出されたデータの誤りビット数を前記誤り訂正符号デコーダを用いて調べる動作とを繰り返すことによって、誤りビット数が最小となる新たな読み出し電圧レベルを決定するように構成されている請求項１記載の不揮発性半導体記憶装置。
【請求項２３】
前記読み出し電圧レベルの調整を指示する前記処理要求が前記複数のブロックのうちの第１のブロックのブロックアドレスを指定する場合、前記制御回路は、前記第１のブロックに属するワードラインの中の読み出し対象ワードラインに印加する読み出し電圧レベルを変更しながら、前記読み出し対象ワードラインに接続された複数のメモリセルからデータを読み出す動作と、読み出されたデータの誤りビット数を前記誤り訂正符号デコーダを用いて調べる動作とを繰り返すことによって、誤りビット数が最小となる新たな読み出し電圧レベルを前記第１のブロックからデータを読み出すための読み出し電圧レベルとして決定するように構成されている請求項２２記載の不揮発性半導体記憶装置。
【請求項２４】
前記不揮発性半導体記憶装置は、互いに独立して動作する複数のメモリコアと、前記複数のメモリコアをそれぞれ制御する複数のメモリコア制御回路とを含み、
前記複数のメモリコアの各々が前記セルアレイとして動作し、
前記複数のメモリコア制御回路の各々が前記制御回路として動作するように構成されている請求項１〜２３のいずれか１項記載の不揮発性半導体記憶装置。
【請求項２５】
第１半導体素子に接続可能な不揮発性半導体記憶装置であって、
複数のメモリセルを含むブロックを複数含み、
前記複数のブロックから選択される一のブロックを示し前記第１半導体素子から受信した第１アドレス信号に対して、前記第１アドレス信号に基づいて選択される第２アドレス信号を前記第１半導体素子に送信し、
前記第１アドレス信号及び前記第２アドレス信号及び第１データが指定された、前記第１半導体素子より受信されるコマンドに対して、前記第１アドレス信号及び前記第２アドレス信号に基づいた第１アドレスに対応する前記メモリセルに前記第１データをプログラムするように構成される、不揮発性半導体記憶装置。
【請求項２６】
前記第１半導体素子は、ホスト装置に接続可能であって、前記第１半導体素子は、前記ホスト装置から第２アドレスと第２データとが指定された書き込み要求を受信した場合に、前記第２アドレスに基づいて前記第１アドレス信号及び前記第２アドレス信号を生成し、前記第２データに基づいて前記第１データを生成する請求項２５記載の不揮発性半導体記憶装置。
【請求項２７】
前記第１半導体素子は、前記第２アドレスを前記第１アドレス信号及び前記第２アドレス信号に対応する物理アドレスに関連付ける請求項２６記載の不揮発性半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ＮＡＮＤ型フラッシュメモリのような不揮発性半導体記憶装置に関する。
【背景技術】
【０００２】
近年、様々な不揮発性半導体記憶装置が使用されている。不揮発性半導体記憶装置の典型例として、ＮＡＮＤ型フラッシュメモリが知られている。
ＮＡＮＤ型フラッシュメモリとこのメモリを制御するコントローラとの間のインタフェース仕様としては、例えば、Open NAND Flash Interface (ONFi)が広く使用されている。ＮＡＮＤ型フラッシュメモリとコントローラとの間の通信は、一般に、以下のような形式で実行される。
【０００３】
例えば、データ書き込み動作（プログラム動作）では、コントローラは、アクセスすべきページを決定し、そしてプログラム要求（プログラムコマンド）、アドレス、データをＮＡＮＤ型フラッシュメモリに転送する。ＮＡＮＤ型フラッシュメモリは、コントローラから受信されたデータを、コントローラから受信されたアドレスによって指定されたページに書き込み、そして処理結果をコントローラに返す。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２０１７／０２６２１７５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、コントローラ側の処理負担を軽減可能な不揮発性半導体記憶装置を提供することである。
【課題を解決するための手段】
【０００６】
実施形態によれば、コントローラに接続可能な不揮発性半導体記憶装置は、複数のブロックを含むセルアレイと、前記複数のブロックのうち前記コントローラによって選択される書き込み先ブロックに含まれる複数のページに対するプログラム動作を、所定のプログラム順序で実行するように構成された制御回路とを具備する。前記制御回路は、前記書き込み先ブロックに対する次のプログラム動作に対応するページアドレスを前記コントローラに通知するように構成されている。
【図面の簡単な説明】
【０００７】
【図１】不揮発性半導体記憶装置（不揮発性メモリ）とこの不揮発性半導体記憶装置を制御するコントローラとを含むメモリシステムの構成例を示すブロック図。
【図２】図１のメモリシステム内のコントローラの構成例を示すブロック図。
【図３Ａ】不揮発性メモリの構成例を示すブロック図。
【図３Ｂ】不揮発性メモリ内に含まれるセルアレイの構成例を示すブロック図。
【図３Ｃ】セルアレイ内に含まれる各ブロックの構成例を示す回路図。
【図４】各メモリセルに３ビットのデータを格納するフラッシュメモリ（ＴＬＣ）に適用されるプログラム順序規則を規定するプログラム順テーブルの例を示す図。
【図５】不揮発性メモリ内のバッファ制御部によって維持および管理されるバッファ管理テーブルの構成例を示す図。
【図６】不揮発性メモリ内のデータ処理部によって維持および管理されるブロック書き込み状態管理テーブルの構成例を示す図。
【図７Ａ】コントローラと不揮発性メモリとによって実行されるデータ書き込み処理の手順の一部を示すシーケンス図。
【図７Ｂ】コントローラと不揮発性メモリとによって実行されるデータ書き込み処理の手順の続きを示すシーケンス図。
【図８】データ書き込み処理が実行されている期間内のある時点におけるバッファ管理テーブルの内容を示す図。
【図９】データ書き込み処理が実行されている期間内のある時点におけるブロック書き込み状態管理テーブルの内容を示す図。
【図１０】コントローラと不揮発性メモリとによって実行されるデータ書き込み処理の別の手順を示すシーケンス図。
【図１１】図１０のデータ書き込み処理が実行されている期間内のある時点におけるバッファ管理テーブルの内容を示す図。
【図１２】ブロックへの書き込み処理を開始することがコントローラから通知された場合に不揮発性メモリによって実行される処理の手順を示すフローチャート。
【図１３】ブログラム要求とライトデータとをコントローラから受信した場合に不揮発性メモリによって実行される処理の手順を示すフローチャート。
【図１４】あるページに対するプログラム動作が完了した場合に不揮発性メモリによって実行される処理の手順を示すフローチャート。
【図１５】不揮発性メモリ内部で実行されるデータコピー処理を説明するための図。
【図１６】コントローラと不揮発性メモリとによって実行されるデータコピー処理の手順を示すシーケンス図。
【図１７】不揮発性メモリのメモリコア制御部内に設けられるＥＣＣ処理部およびＥＭＣ処理部を示すブロック図。
【図１８】コントローラと不揮発性メモリとによって実行されるデータコピー処理の別の手順を示すシーケンス図。
【図１９】コントローラと不揮発性メモリとによって実行されるデータ書き込み処理の別の手順を示すシーケンス図。
【図２０】コントローラと不揮発性メモリとによって実行される誤りビット数チェック処理の手順を示すシーケンス図。
【図２１】各メモリセルに格納される３ビットのデータ値に対応する８つの閾値電圧分布と各メモリセルからデータを読み出す時に使用される７つの読み出し電圧レベルとの関係を示す図。
【図２２】プログラム後の時間経過に応じてメモリセルの各閾値電圧分布が低い値にシフトされた状態を示す図。
【図２３】シフトされた閾値電圧分布に対応する最適読み出しレベルを決定する処理を説明するための図。
【図２４】コントローラと不揮発性メモリとによって実行される最適読み出しレベル決定処理の手順を示すシーケンス図。
【図２５】複数のメモリコアとこれらメモリコアを制御する複数のメモリコア制御部とを含む不揮発性メモリの構成例を示すブロック図。
【発明を実施するための形態】
【０００８】
以下、図面を参照して、実施形態を説明する。  
（第１実施形態）
図１は、第１実施形態に係る不揮発性メモリ１を含むメモリシステムの構成例を示す。
この不揮発性メモリ１は、ＮＡＮＤ型フラッシュメモリのような不揮発性半導体記憶装置である。この不揮発性メモリ１は、２次元構造のフラッシュメモリであってもよいし、３次元構造のフラッシュメモリであってもよい。
【０００９】
メモリシステムは、不揮発性メモリ１とこの不揮発性メモリ１を制御するコントローラ２とを含む。コントローラ２は第１半導体素子とも称される。また、不揮発性メモリ１は第２半導体素子とも称される。このメモリシステムは、さらに、ホストインターフェース３と、メモリ・コントローラ通信線４と、電源線５とを含む。
【００１０】
このメモリシステムは、例えば、ソリッドステートドライブ（ＳＳＤ）として実現されてもよい。この場合、このＳＳＤは、ホストシステム（ホスト装置）として機能する、サーバコンピュータ、パーソナルコンピュータ、モバイルデバイスといった様々な情報処理装置のデータストレージとして使用される。あるいは、このメモリシステムは、メモリカード、ＵＳＢメモリのような、リムーバブルストレージデバイスとして実現されてもよいし、組み込みストレージデバイスとして実現されてもよい。
【００１１】
メモリ・コントローラ通信線４は、コントローラ２と不揮発性メモリ１との間の通信に使用される信号線である。メモリ・コントローラ通信線４においては、複数の信号が規定されている。これら信号は、例えば、ＯＮＦｉ仕様に準拠した信号であってもよい。これら信号は、チップイネーブル信号ＣＥｎ、ライトイネーブル信号ＷＥｎ、リードイネーブル信号ＲＥｎ、コマンドラッチイネーブル信号ＣＬＥ、アドレスラッチイネーブル信号ＡＬＥ、ライトプロテクト信号ＷＰｎ、ライトイネーブル信号ＷＥｎ、Ｉ／Ｏ信号＜７：０＞、レディー／ビジー信号ＲＢｎを含む。ここで、信号の名称の末尾の「ｎ」は、この信号が負論理の信号であることを意味する。
【００１２】
不揮発性メモリ１は、ＮＡＮＤ型フラッシュメモリチップのような半導体メモリチップとして実現されている。この不揮発性メモリ１は、チップイネーブル信号ＣＥｎ、ライトイネーブル信号ＷＥｎ、リードイネーブル信号ＲＥｎ、コマンドラッチイネーブル信号ＣＬＥ、アドレスラッチイネーブル信号ＡＬＥ、ライトプロテクト信号ＷＰｎ、ライトイネーブル信号ＷＥｎ、Ｉ／Ｏ信号＜７：０＞、レディー／ビジー信号ＲＢｎにそれぞれ対応する信号ピンを有しており、これら信号ピンおよびメモリ・コントローラ通信線４を介して、コントローラ２に接続可能である。
【００１３】
チップイネーブル信号ＣＥｎは、不揮発性メモリ１（例えばＮＡＮＤ型フラッシュメモリチップ）を選択するための信号である。
コマンドラッチイネーブル信号ＣＬＥは、データバス（Ｉ／Ｏ信号＜７：０＞）上のコマンド、アドレス、入力データの取り込み（ラッチ）を制御する。
【００１４】
リードイネーブル信号ＲＥｎは、データバス（Ｉ／Ｏ信号＜７：０＞）へのシリアルデータ出力をイネーブルにする。
コマンドラッチイネーブル信号ＣＬＥは、データバス（Ｉ／Ｏ信号＜７：０＞）上の現在のバスサイクルタイプがコマンドであることを不揮発性メモリ１に通知するために使用される。
【００１５】
アドレスラッチイネーブル信号ＡＬＥは、データバス（Ｉ／Ｏ信号＜７：０＞）上の現在のバスサイクルタイプがアドレスであることを不揮発性メモリ１に通知するために使用される。
ライトプロテクト信号ＷＰｎはプログラム動作およびイレーズ動作をディスエーブルするために使用される。レディー／ビジー信号ＲＢｎは、不揮発性メモリ１の現在の状態（レディー状態またはビジー状態）を示す。
【００１６】
図２は、図１のコントローラ２の内部をより詳細に描いたブロック図である。
コントローラ２は、情報処理装置内のＣＰＵのようなホストシステム（ホスト装置）からのデータ書き込み要求（ライトコマンド）に応じて、不揮発性メモリ１へのデータの書き込みを制御し、またホストシステム（ホスト装置）からのデータ読み出し要求（リードコマンド）に応じて、不揮発性メモリ１からのデータの読み出しを制御する。
【００１７】
このコントローラ２は、ホストインターフェース制御部２０１、コマンド制御部２０２、バッファ制御部２０３、データ割り付け管理部２０４、メモリ制御部２０５、バッファメモリ２０６、誤り訂正符号処理部（ＥＣＣ部）２０７、およびメモリインターフェース制御部２０８を含む。
【００１８】
ホストインターフェース制御部２０１は、ホストインターフェース３を介してホストシステム（ホスト装置）と通信する。ホストインターフェース制御部２０１は、コマンド制御部２０２の指示に従って、ホストシステム（ホスト装置）から要求（コマンド）およびデータを受信する処理、および処理結果およびデータをホストシステム（ホスト装置）へ送信する処理を実行する。
【００１９】
ホストインターフェース３の具体的な例としては、Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ  （ＳＡＳ）、Ｕｎｉｖｅｒｓａｌ  Ｆｌａｓｈ  Ｓｔｏｒａｇｅ  （ＵＦＳ）などがある。
【００２０】
コマンド制御部２０２は、ホストインターフェース制御部２０１経由でホストシステム（ホスト装置）から受信したコマンドを解釈し、そのコマンドの内容に従って、コントローラ２内の他の機能ブロックを制御して処理を実行する。
バッファ制御部２０３は、バッファメモリ２０６を管理し、ホストシステム（ホスト装置）から受領した書き込みデータ（ユーザデータ）、不揮発性メモリ１から読み出したデータを、バッファメモリ２０６内の適切な場所に格納する。
【００２１】
データ割り付け管理部２０４は、ホストシステム（ホスト装置）から受領したユーザデータを不揮発性メモリ１内のどのブロックのどのページに割り付けるかを管理する。ここで、ブロックは消去動作の単位であり、またページはプログラム動作およびリード動作の単位である。
【００２２】
コントローラ２は、ホストシステム（ホスト装置）から受信されるデータ書き込み要求（ライトコマンド）に関連付けられたユーザデータをホストシステム（ホスト装置）から受信する。このライトコマンドによって、ユーザデータに対応するアドレス（例えば論理アドレス）と、このユーザデータとが指定される。具体的には、このライトコマンドは、論理アドレス（開始論理アドレス）、長さ、データポインタ、等を指定する。開始論理アドレスは、このユーザデータに対応する論理アドレス範囲内の最初の論理アドレスを示す。長さは、このユーザデータの長さを示す。データポインタは、このユーザデータが存在しているホストメモリ（ホストシステム（ホスト装置）内のメモリ）内の位置を示す。
【００２３】
このユーザデータが割り付けられるべきブロックおよびこのブロック内のページは、データ割り付け管理部２０４において決定される。すなわち、データ割り付け管理部２０４は、ホストシステム（ホスト装置）から受信されたライトコマンドによって指定されたユーザデータが割り付けられるべきブロックアドレスおよびページアドレスを決定し、受信されたライトコマンドによって指定された論理アドレスに、決定されたブロックアドレスおよび決定されたページアドレスを割り当てる。
【００２４】
さらに、コントローラ２は、ホストシステム（ホスト装置）から受信されるユーザデータに基づいて、不揮発性メモリ１に実際に書き込まれるべき書き込みデータ（例えば、ＥＣＣ符号化データのような符号化データ）を生成する。この書き込みデータが書き込まれるべき不揮発性メモリ１内の物理記憶位置を示す物理アドレスは、この書き込みデータに対応するユーザデータの論理アドレスに割り当てられたブロックアドレスおよびページアドレスの組み合わせに基づいて決定される。
【００２５】
また、コントローラ２においては、メモリシステムをアクセスするためにホストシステム（ホスト装置）によって指定される論理アドレスそれぞれと不揮発性メモリ１の物理アドレスそれぞれとの間の対応関係を示すマッピング情報が論理物理アドレス変換テーブルを使用して管理される。各物理アドレスは、ブロックアドレスとページアドレスとの組み合わせ、またはブロックアドレスとページアドレスとページ内オフセットとの組み合わせによって表される。コントローラ２は、論理物理アドレス変換テーブルを更新することによって、ホストシステム（ホスト装置）から受信されたライトコマンドによって指定されたアドレス（論理アドレス）に物理アドレス（ブロックアドレス、ページアドレス）を関連付ける。
【００２６】
ホストシステム（ホスト装置）からリード要求（リードコマンド）を受信した場合、コントローラ２は、論理物理アドレス変換テーブルを参照して、リードコマンドによって指定された論理アドレスに対応する物理アドレスを論理物理アドレス変換テーブルから取得することができる。
【００２７】
メモリ制御部２０５は、コマンド制御部２０２の指示に従って、メモリインターフェース制御部２０８を制御する。具体的には、メモリ制御部２０５は、メモリインターフェース制御部２０８を制御して、不揮発性メモリ１からのデータの読み出し、不揮発性メモリ１へのデータの書き込みを行う。不揮発性メモリ１へデータを書き込む動作は、プログラム動作とも称される。
【００２８】
バッファメモリ２０６は、ホストシステム（ホスト装置）と不揮発性メモリ１の間でやり取りされるデータなどを一時的に格納するための領域である。バッファメモリ２０６は、具体的にはＤＲＡＭやＳＲＡＭなどの揮発性メモリで構成されることが多い。
誤り訂正符号（ＥＣＣ）処理部２０７は、コマンド制御部２０２の指示に従って、バッファメモリ２０６からメモリインターフェース制御部２０８を通じて不揮発性メモリ１へ転送されるべきユーザデータに対して誤り訂正符号を付加する誤り訂正符号化処理を行う。誤り訂正符号化処理は、ユーザデータを符号化して、ユーザデータとこのユーザデータの誤りを訂正可能な誤り訂正符号（ＥＣＣ）とを含む符号化データを生成する符号化処理である。また、誤り訂正符号（ＥＣＣ）処理部２０７は、コマンド制御部２０２の指示に従って、メモリインターフェース制御部２０８を通じて不揮発性メモリ１から転送された読み出しデータの誤りを訂正する誤り訂正復号処理を行う。誤り訂正復号処理は、データとＥＣＣとを含む符号化データを復号して、このデータに含まれる誤りを訂正する復号処理である。
【００２９】
メモリインターフェース制御部２０８は、メモリ制御部２０５の指示に従って、不揮発性メモリ１とコントローラ２との間の物理的な信号線を電気的に操作して、不揮発性メモリ１に所望の動作を実行させる。
図３Ａは、図１の不揮発性メモリ１の内部をより詳細に描いたブロック図である。
【００３０】
不揮発性メモリ１は、メモリコア１１、メモリコア制御部１２、および入出力部１３を含む。
メモリコア１１は、セルアレイ１０１を含む。セルアレイ１０１は、規則正しく配置された多数の不揮発性記憶素子（メモリセル）を含む。
入出力部１３は、入力バッファ１１２および１１４と、出力バッファ１１３および１１５とを含む。
【００３１】
入力バッファ１１２および１１４は、コントローラ２から不揮発性メモリ１に信号を運ぶための各信号線を介してコントローラ２から受信される各信号を一時的に格納する。出力バッファ１１３および１１５は、不揮発性メモリ１からコントローラ２に信号を運ぶための各信号線を介してコントローラ２に送信すべき信号を一時的に格納する。
【００３２】
メモリコア制御部１２は、セルアレイ１０１へのデータの書き込みおよびセルアレイ１０１からのデータの読み出しを制御するように構成された制御回路として機能する。
このメモリコア制御部１２は、ロウデコーダ１０２、カラムデコーダ・キャッシュ・センスアンプ１０３、バッファ１０４、メモリコア用電源制御部１０５、メモリコア操作部１０６、コマンドデコーダ１０７、コマンドキュー１０８、コマンド実行制御部１０９、データ処理部１１０、およびバッファ制御部１１１を含む。
【００３３】
ロウデコーダ１０２は、セルアレイ１０１の中の、操作対象となるロウ（行）を指定する。カラムデコーダ・キャッシュ・センスアンプ１０３は、ロウデコーダ１０２で指定・選択されたロウに属するメモリセルの集合へのデータの転送、ロウデコーダ１０２で指定・選択されたロウに属するメモリセルの集合からのデータの読み出し（センス）、およびキャッシュ内のカラム（列）の選択、等を行う。
【００３４】
バッファ１０４は、セルアレイ１０１に書き込まれるべきデータまたはセルアレイ１０１から読み出されたデータの一時的な格納場所である。ここでは、Ｍ＋１個のバッファがバッファ１０４として設けられている場合が例示されている。
メモリコア用電源制御部１０５は、メモリコア操作部１０６の指示に従って、メモリコア１１が必要とする電圧・電流を外部からの供給される電源電圧Ｖｃｃから作りだす。
【００３５】
メモリコア操作部１０６は、コマンド実行制御部１０９の指示に従い、メモリコア用電源制御部１０５を制御してセルアレイ１０１の動作に必要な電圧・電流を作り出し、またセルアレイ１０１にデータを書き込むプログラム動作およびセルアレイ１０１からデータを読み出す読み出し動作を制御する。
【００３６】
プログラム動作においては、メモリコア操作部１０６は、ロウデコーダ１０２に操作対象のロウを選択させ、キャッシュ・センスアンプ１０３に対して、セルアレイ１０１へのデータの書き込み（ブログラム）を指示する。読み出し動作においては、メモリコア操作部１０６は、ロウデコーダ１０２に操作対象のロウを選択させ、キャッシュ・センスアンプ１０３に対して、セルアレイ１０１からのデータの読み出しを指示する。
【００３７】
コマンドデコーダ１０７は、入力バッファ１１４を経由してコントローラ２から受信したコマンドの内容を解釈し、コマンドキュー１０８にコマンドを格納し、コマンド実行制御部１０９にコマンドの受信を通知する。
コマンドキュー１０８は、コマンドデコーダ１０７が受信したコマンドを一時的に格納する領域である。コマンドキュー１０８に格納されたコマンドがコマンド実行制御部１０９によって取得および実行される。そしてこのコマンドの実行が完了すると、このコマンドはコマンドキュー１０８から削除される。
【００３８】
コマンド実行制御部１０９は、コマンドを受信したことを示す通知をコマンドデコーダ１０７から受けると、コマンドキュー１０８からこのコマンドを取得し、メモリコア操作部１０６、データ処理部１１０、および出力バッファ１１３を制御することによってこのコマンドを実行する。
【００３９】
データ処理部１１０は、コマンド実行制御部１０９の指示に従って、バッファ１０４内のデータの操作を行う。データ処理部１１０は、バッファ１０４内のデータの操作をバッファ制御部１１１に指示する。
バッファ制御部１１１は、データ処理部１１０の指示に従い、バッファ１０４内のデータの操作および管理を行う。バッファ１０４として使用される個々のバッファの有効無効などの管理もバッファ制御部１１１の責務である。
【００４０】
図３Ｂは、セルアレイ１０１の構成例に示す。
セルアレイ１０１は、マトリクス状に配列された複数のメモリセルを有する。セルアレイ１０１は、図３Ｂに示されているように、複数のブロック（物理ブロック）ＢＬＫ０〜ＢＬＫ（ｊ−１）を含む。ブロックＢＬＫ０〜ＢＬＫ（ｊ−１）は、消去動作の単位として機能する。
【００４１】
ブロックＢＬＫ０〜ＢＬＫ（ｊ−１）は複数のページを含む。つまり、ブロックＢＬＫ０〜ＢＬＫ（ｊ−１）の各々は、ページＰ０、Ｐ１、…Ｐ（ｋ−１）を含む。データの読み出しおよびデータの書き込みはページ単位で実行される。
不揮発性メモリ１は、一つのメモリセルに１ビットのデータを格納するシングルレベルセル（ＳＬＣ）−フラッシュメモリであってもよいし、一つのメモリセルに２ビットのデータを格納するマルチレベルセル（ＭＬＣ）−フラッシュメモリであってもよいし、一つのメモリセルに３ビットのデータを格納するトリプルレベルセル（ＴＬＣ）−フラッシュメモリであってもよいし、一つのメモリセルに４ビットのデータを格納するクワドレベルセル（ＱＬＣ）−フラッシュメモリであってもよい。
【００４２】
ＳＬＣにおいては、ブロック内の同じワード線に接続された複数のメモリセルの集合が一つのページとして機能する。
ＭＬＣにおいては、同じワード線に接続された複数のメモリセルの集合が２つのページ（ロアーページ、アッパーページとして参照される）として機能する。
【００４３】
また、ＴＬＣにおいては、同じワード線に接続された複数のメモリセルの集合が３つのページ（ロアーページ、ミドルページ、アッパーページとして参照される）として機能する。
図３Ｃは、セルアレイ１０１内に含まれる各ブロックの構成例を示す。
一つのブロックＢＬＫは、複数のワードラインＷＬ０、ＷＬ１、ＷＬ２、ＷＬ３、ＷＬ４、…、を含む。各ワードラインＷＬには、複数のメモリセル（メモリセルトランジスタ）ＭＴ０、ＭＴ１、…、ＭＴｎが接続されている。
【００４４】
例えば、メモリセル当たりに３ビットのデータが格納されるＴＬＣにおいては、各メモリセルトランジスタは、互いに閾値電圧が異なる８つの状態のいずれか一つに設定される。各状態は、８つのデータ値（“０００”、“００１”、“０１０”、“０１１”、“１００”、“１０１”、“１１０”、“１１１”）のいずれか一つに対応する。
【００４５】
各ワードラインＷＬには、３つのページ（ロアーページ、ミドルページ、アッパーページ）が割り当てられる。各メモリセルトランジスタに保持される３ビットは、異なる３つのページ（ロアーページ、ミドルページ、アッパーページ）にそれぞれ属する。
例えば、ワードラインＷＬ０に接続されたメモリセルトランジスタの集合には、ページ０（ロアーページ）、ページ１（ミドルページ）、ページ３（アッパーページ）が割り当てられる。同様に、ワードラインＷＬ１に接続されたメモリセルトランジスタの集合には、ページ３（ロアーページ）、ページ４（ミドルページ）、ページ５（アッパーページ）が割り当てられ、ワードラインＷＬ２に接続されたメモリセルトランジスタの集合には、ページ６（ロアーページ）、ページ７（ミドルページ）、ページ８（アッパーページ）が割り当てられる。
【００４６】
図４は、不揮発性メモリ１に適用されるプログラム順序規則を規定するプログラム順テーブルの例を示す。
プログラム順序規則によって示されるプログラム順序は、各ブロックにデータを書き込むために必要なページの順序を示す。各ワードラインに複数のページが割り当てられている場合においては、このプログラム順序は、各ブロックにデータを書き込むために必要なワードラインの順序を示してもよい。
【００４７】
以下、フラッシュメモリ（ＴＬＣ）を例示して、プログラム順序の例を説明する。
図４のプログラム順テーブルは、同じブロックに属する複数のワードラインＷＬがプログラムされる順序であるプログラム順序番号（プログラム順序番号０番、プログラム順序番号１番、プログラム順序番号２番、…、）と、プログラム順序番号０番、プログラム順序番号１番、プログラム順序番号２番、…それぞれに対応するページを示すページアドレスとの対応関係を表している。
【００４８】
例えば、最初（プログラム順序プログラム順序番号０番）のプログラム動作はワードラインＷＬ０に対する１ｓｔプログラム動作（＝ページアドレス０に対するプログラム動作）である。ページアドレス０はワードラインＷＬ０のロアーページに対応する。
次（プログラム順序番号１番）のプログラム動作はワードラインＷＬ１に対する１ｓｔプログラム動作（＝ページアドレス３に対するプログラム動作）である。ページアドレス３はワードラインＷＬ１のロアーページに対応する。
【００４９】
さらにその次（プログラム順序番号２番）のプログラム動作はワードラインＷＬ０に対する２ｎｄプログラム動作（＝ページアドレス１に対するプログラム動作）である。ページアドレス１はワードラインＷＬ０のミドルページに対応する。
さらにその次（プログラム順序番号３番）のプログラム動作はワードラインＷＬ２に対する１ｓｔプログラム動作（＝ページアドレス６に対するプログラム動作）である。ページアドレス６はワードラインＷＬ２のロアーページに対応する。
【００５０】
さらにその次（プログラム順序番号４番）のプログラム動作はワードラインＷＬ１に対する２ｎｄプログラム動作（＝ページアドレス４に対するプログラム動作）である。ページアドレス４はワードラインＷＬ１のミドルページに対応する。
さらにその次（プログラム順序番号５番）のプログラム動作はワードラインＷＬ０に対する３ｒｄプログラム動作（＝ページアドレス２に対するプログラム動作）である。ページアドレス２はワードラインＷＬ０のアッパーページに対応する。
【００５１】
このように、不揮発性メモリ１においては、各ブロックにデータを書き込むために必要なページの順序を示すプログラム順序が定められている。図４の例においては、プログラム順序は、隣接する幾つかのワードラインに対するプログラム動作が互いに交互に実行されるように定められている。
【００５２】
すなわち、各ワードラインＷＬに対するプログラム動作は、１ｓｔプログラム動作、２ｎｄプログラム動作、３ｒｄプログラム動作を含む別個の３つのプログラム動作によって実行される。ワードラインＷＬ０に対する２ｎｄプログラム動作は、ワードラインＷＬ１に対する１ｓｔプログラム動作が完了した後に開始される。ワードラインＷＬ１に対する２ｎｄプログラム動作は、ワードラインＷＬ２に対する１ｓｔプログラム動作が完了した後に開始される。
【００５３】
ワードラインＷＬ０に対する３ｒｄプログラム動作は、ワードラインＷＬ１に対する２ｎｄプログラム動作が完了した後に開始される。ワードラインＷＬ１に対する３ｒｄプログラム動作は、ワードラインＷＬ２に対する２ｎｄプログラム動作が完了した後に開始される。
【００５４】
不揮発性メモリ１のメモリコア制御部１２は、コントローラ２によって複数のブロックから選択される書き込み先ブロックに含まれる複数のページに対するプログラム動作を、この書き込み先ブロックにデータを書き込むために必要なページの順序を示すプログラム順序で実行する。
【００５５】
図４の例においては、メモリコア制御部１２は、書き込み先ブロックにデータを書き込むために、この書き込み先ブロックに含まれる複数のページに対するプログラム動作を、ページアドレス０に対するプログラム動作、ページアドレス３に対するプログラム動作、ページアドレス１に対するプログラム動作、ページアドレス６に対するプログラム動作、ページアドレス４に対するプログラム動作、ページアドレス２に対するプログラム動作、…の順序で実行することが必要とされる。
【００５６】
図５は、バッファ制御部１１１によって維持および管理されるバッファ管理テーブルを示す。
このバッファ管理テーブルは不揮発性メモリ１内のバッファ１０４を管理するためのテーブルであり、バッファ１０４として使用される複数のバッファそれぞれに対応する複数の列を含む。各列は、バッファ番号５１、有効無効フラグ５２、ブロックアドレス５３、ページアドレス５４、データ必要期間５５を格納する。
【００５７】
バッファ管理テーブルの各列において、バッファ番号５１は、この列に対応するバッファを識別するバッファ番号を示す。有効無効フラグ５２は、この列に対応するバッファの内容が有効であるか無効であるかを示す。ブロックアドレス５３は、この列に対応するバッファの内容が属しているブロックを識別するブロックアドレスを示す。ページアドレス５４は、この列に対応するバッファの内容に対応しているページを識別するページアドレスを示す。データ必要期間５５は、この列に対応するバッファに格納されているデータを使用したプログラム動作の実行のために、このデータをバッファ内に維持しておくことが必要とされる期間を示す。
【００５８】
具体的には、あるデータに対応するデータ必要期間５５の値としては、このデータを使用してプログラムされるワードラインに関する３ｒｄブログラム動作に対応するプログラム順序番号が使用される。
例えば、ページアドレス０に書き込まれるべきデータが格納されているバッファに関しては、ワードラインＷＬ０の３ｒｄブログラム動作に対応するプログラム順序番号（＝５）が、そのバッファに格納されているデータに対応するデータ必要期間である。
【００５９】
同様に、ページアドレス１または２に書き込まれるべきデータが格納されているバッファに関しては、ワードラインＷＬ０の３ｒｄブログラム動作に対応するプログラム順序番号（＝５）が、そのバッファに格納されているデータに対応するデータ必要期間となる。
【００６０】
また、ページアドレス３に書き込まれるべきデータが格納されているバッファに関しては、ワードラインＷＬ１の３ｒｄブログラム動作に対応するプログラム順序番号（＝８）が、そのバッファに格納されているデータに対応するデータ必要期間となる。
同様に、ページアドレス４または５に書き込まれるべきデータが格納されているバッファに関しては、ワードラインＷＬ１の３ｒｄブログラム動作に対応するプログラム順序番号（＝８）が、そのバッファに格納されているデータに対応するデータ必要期間となる。
【００６１】
図６は、データ処理部１１０によって維持および管理されるブロック書き込み状態管理テーブルを示す。
ブロックの書き込み状態管理テーブルは、不揮発性メモリ１内の複数のブロックの書き込み状態を管理するためのテーブルであり、複数のブロックそれぞれに対応する複数の列を含む。各列は、ブロックアドレス６１、書き込み中フラグ６２、次のプログラム順番号６３、完了したプログラム順番号６４を格納する。
【００６２】
ブロックの書き込み状態管理テーブルの各列において、ブロックアドレス６１は、この列に対応するブロックを識別するブロックアドレスを示す。書き込み中フラグ６２は、この列に対応するブロックが書き込み先ブロック（オープンされたブロック）として使用中であるか否かを示す。次のプログラム順番号６３は、この列に対応するブロックに対して実行されるべき次のプログラム動作に対応するプログラム順序番号（以下、「次のプログラム順序番号」と称する）を示す。完了したプログラム順番号６４は、この列に対応するブロックにおいて完了したプログラム動作のブログラム順番号を示す。
【００６３】
具体的には、次のプログラム順番号６３の値および完了したプログラム順番号６４の値の各々としては、図４で説明したプログラム順序４１の値が使用される。
あるブロックが書き込み先ブロックとして選択された場合、このブロックに対応する次のプログラム順序番号はプログラム順序番号０番となる。最初（プログラム順序番号０番）のプログラム動作（ワードラインＷＬ０の１ｓｔプログラム動作）が完了すると、このブロックに対応する完了したブログラム順序番号はプログラム順序番号０番となり、このブロックに対応する次のプログラム順序番号はプログラム順序番号１番となる。
【００６４】
ここで図４の説明に戻る。
図４に示したプログラム順テーブルは、一つのワードラインの各メモリセルに３ビットのデータ（８状態）を格納するために、３回のプログラム動作（１ｓｔプログラム動作、２ｎｄプログラム動作、３ｒｄプログラム動作）が必要なことを表している。
【００６５】
例えばワードラインＷＬ０に接続された各メモリセルを８状態のいずれか一つに対応する所望の閾値電圧レベルにプログラムするためには、プログラム順序番号０番で、ワードラインＷＬ０に対する１ｓｔプログラム動作を行い、プログラム順序番号２番で、ワードラインＷＬ０に対する２ｎｄプログラム動作を行い、プログラム順序番号５番で、ワードラインＷＬ０に対する３ｒｄプログラム動作を行うことが必要である。
【００６６】
同様に、ワードラインＷＬ１に接続された各メモリセルを８状態のいずれか一つに対応する所望の閾値電圧レベルにプログラムするためには、プログラム順序番号１番で、ワードラインＷＬ１に対する１ｓｔプログラム動作を行い、プログラム順序番号４番で、ワードラインＷＬ１に対する２ｎｄプログラム動作を行い、プログラム順序番号８番で、ワードラインＷＬ１に対する３ｒｄプログラム動作を行うことが必要である。
【００６７】
このように、各ワードラインに接続された複数のメモリセルに対するデータ書き込み処理は３つの別個のプログラム動作（１ｓｔプログラム動作、２ｎｄプログラム動作、３ｒｄプログラム動作）に分けられる。
あるワードラインＷＬｎに対する２ｎｄプログラム動作は隣接するワードラインＷＬｎ＋１の１ｓｔプログラム動作の後に実行される。同様に、ワードラインＷＬｎ＋２の２ｎｄプログラム動作は隣接するワードラインＷＬｎ＋２の１ｓｔプログラム動作の後に実行される。そして、ワードラインＷＬｎに対する３ｒｄプログラム動作はワードラインＷＬｎ＋１の２ｎｄプログラム動作の後に実行される。
【００６８】
このように、各ワードラインに接続されたメモリセルへのデータ書き込み処理は、隣接する幾つかのワードラインに対するプログラム動作を互いにインターリーブする方式で実行される。これは、ＮＡＮＤ型フラッシュメモリのような不揮発性メモリ１においては、各ワードラインのメモリセルの閾値電圧を隣接するワードラインの状態に応じて補正しながら、各ワードラインのメモリセルにデータを書き込む必要があるためである。隣接する幾つかのワードラインに対するプログラム動作を互いにインターリーブすることにより、セル間干渉に起因するプログラムディスターブを低減することができる。
【００６９】
なお、各ブロックへのデータ書き込み処理に必要なプログラム順規則は不揮発性メモリ１の世代またはデータ書き込み方式によって変わる。
しかし、ＮＡＮＤ型フラッシュメモリとコントローラとの間の従来の通信では、コントローラ自身が、データが書き込まれるべき書き込み先ページを決定することが必要とされる。つまり、ＮＡＮＤ型フラッシュメモリとコントローラとの間の従来の通信は、ＮＡＮＤ型フラッシュメモリに適用されているプログラム順序（つまり、ブロックにデータを書き込むために必要なページの順序）をコントローラ側が把握していることを前提としている。
【００７０】
このため、使用すべきプログラム順序が異なる様々な不揮発性メモリに対応できるようにするためには、各種書き込み方式（つまり各種プログラム順序）に対応可能なコントローラを予め開発しておくか、あるいは不揮発性メモリの世代交代の度に新たなコントローラを開発することが必要とされる。
【００７１】
しかし、各種書き込み方式に対応可能なコントローラを製造するためには、複数種の書き込み方式に対応する複数種の回路を追加することが必要とされ、その分だけコストがかかる。また、ソフトウェア実装によって各種書き込み方式に対応可能なコントローラを実現した場合には、ソフトウェアによる処理の遅延によって性能低下を招く場合がある。
【００７２】
また、不揮発性メモリ１の世代交代の度に新たなコントローラを開発し直すことは、膨大なコスト増を招くことになる。
そこで、本実施形態は、不揮発性メモリ１を制御するために必要なコントローラ２側の処理負担を軽減可能とする技術を提供する。具体的には、本実施形態は、コントローラ２が様々な書き込み方式、ひいてはＮＡＮＤフラッシュメモリの様々な世代に対応できるようにする技術を提供する。
【００７３】
さらに、データ書き込み動作において、各ワードラインに対する２回目と３回目のプログラム動作時には、同じワードラインに対して以前に行ったプログラム動作時のデータも必要になる。
例えば、ワードラインＷＬ０の２回目のプログラム動作時（２ｎｄプログラム動作）には、ワードラインＷＬ０の各メモリセルの目標閾値電圧（４状態のいずれか）を決定するために、２ｎｄプログラム動作で書き込むべきデータ（ミドルページに対応するデータ）のみならず、ワードラインＷＬ０の１回目のプログラム動作（１ｓｔプログラム動作）で使用したデータ（ロアーページに対応するデータ）も必要となる。
【００７４】
また、ワードラインＷＬ０の３回目のプログラム動作時（３ｒｄプログラム動作）には、各メモリセルの最終目標閾値電圧（８状態のいずれか）を決定するために、３ｒｄプログラム動作で書き込むべきデータ（アッパーページに対応するデータ）のみならず、ワードラインＷＬ０の１回目のプログラム動作（１ｓｔプログラム動作）で使用したデータ（ロアーページに対応するデータ）と、ワードラインＷＬ０の２回目のプログラム動作（２ｎｄプログラム動作）で使用したデータ（ミドルページに対応するデータ）も必要になる。
【００７５】
この際、従来のメモリ・コントローラ間インタフェース仕様では、例えば、２回目のプログラム動作時には、２回目のプログラム動作で必要なデータだけでなく、１回目のプログラム動作で使用したデータもコントローラ２から不揮発性メモリ１に転送する必要がある。同様に、例えば、３回目のプログラム動作時には、３回目のプログラム動作で必要なデータだけでなく１回目のプログラム動作で使用したデータと２回目のプログラム動作で使用したデータもコントローラ２から不揮発性メモリ１に転送する必要がある。よって、コントローラ２と不揮発性メモリ１との間の通信回数が多くなる。
【００７６】
通信回数が多くなると、コントローラ２内の通信路およびメモリ・コントローラ間の通信路において通信にかかる時間を他の処理に使用できないだけでなく、通信による消費電力が増えてしまう。
よって、本実施形態では、メモリ・コントローラ間の通信回数の増加を抑制可能にする技術も提供される。
【００７７】
以下、不揮発性メモリ１とコントローラ２の間の具体的な通信内容を説明する。
図７Ａおよび図７Ｂは、コントローラ２と不揮発性メモリ１とによって実行されるデータ書き込み処理の手順を示す。
図７Ａおよび図７Ｂを用いて、第１実施形態におけるデータ書き込み処理の手順を説明する。
【００７８】
図７Ａに示されているように、まず、コントローラ２は、不揮発性メモリ１に対してブロックアドレスを指定して、当該ブロックへの書き込み処理を開始することを不揮発性メモリ１に通知する（ステップＳ７０１）。
このステップＳ７０１では、コントローラ２は、不揮発性メモリ１内の複数のブロック（フリーブロック）の内の一つのブロックを書き込み先ブロックとして選択する要求（Block open要求）を不揮発性メモリ１に送信してもよい。例えば、この選択される書き込み先ブロックがブロックアドレス０を有するブロックである場合には、コントローラ２は、Block open (0)を不揮発性メモリ１に送信する。ここで、Block open (0)の(0)は、ブロックアドレス０を表している。
【００７９】
換言すれば、このステップＳ７０１では、コントローラ２は、不揮発性メモリ１内の複数のブロック（フリーブロック）から選択される一のブロックを示すブロックアドレスを不揮発性メモリ１に送信する。ここで、ブロックアドレスは第１アドレス信号とも称される。
【００８０】
不揮発性メモリ１のメモリコア制御部１２が、書き込み先ブロックを選択する要求（Block open (0)）、つまりブロックアドレス、をコントローラ２から受信した場合、メモリコア制御部１２は、図６のブロック書き込み状態管理テーブルを更新して、指定されたブロック０（ブロックアドレス０を有するブロック）に対応する書き込み中フラグをＹ（＝Ｙｅｓ）に設定する（ステップＳ７０２）。
【００８１】
さらに、メモリコア制御部１２は、図６のブロック書き込み状態管理テーブルを更新して、指定されたブロック０（ブロックアドレス０を有するブロック）に対応する次のプログラム順番号６３の値を０に初期化する（ステップＳ７０３）。
そして、不揮発性メモリ１のメモリコア制御部１２は、コントローラ２に対して、ブロック０に対する次のプログラム動作を行うために必要なデータはページ０のデータであることを通知する（ステップＳ７０４）。換言すれば、ステップＳ７０４では、メモリコア制御部１２は、コントローラ２から受信されたブロックアドレスに対して、ブロックアドレスに基づいて選択されるページアドレスをコントローラ２に送信する。ここで、ページアドレスは第２のアドレス信号とも称される。
【００８２】
つまり、ステップＳ７０４では、メモリコア制御部１２は、ブロック０に対する次のプログラム動作に対応するページアドレスをコントローラ２に通知する。
次のプログラム動作に対応する次のプログラム順序番号は次のプログラム順番号６３の値（ここでは０）であり、図４の表を参照すると、次のプログラム順序番号０のプログラム動作に必要なページのページアドレスは０であることが分かる。以降も同様にして、メモリコア制御部１２は、図６のブロック書き込み状態管理テーブルから次のプログラム順序番号を取得し、図４の表から、次のプログラム順序番号のプログラム動作に必要なページを示すページアドレスを取得する。
【００８３】
このように、ステップＳ７０４では、不揮発性メモリ１のメモリコア制御部１２は、次のプログラム動作に必要なページを示すページアドレス、つまり「次のページ」のページアドレス、をコントローラ２に通知する（Notify next page (0, 0)）。Notify next page (0, 0)の(0, 0)は、書き込み先ブロックのブロックアドレス０とこの書き込み先ブロック内の次の書き込み先ページのページアドレス０とを表している。Notify next page (0, 0)は、Ｉ／Ｏ信号＜７：０＞を運ぶためのデータバスを介して不揮発性メモリ１からコントローラ２に送られてもよい。
【００８４】
このように、書き込み先ブロックのブロックアドレスとこの書き込み先ブロック内の書き込み先ページのページアドレスとのペアを不揮発性メモリ１からコントローラ２に通知することにより、たとえ複数の書き込み先ブロックが同時にオープンされている場合であっても、不揮発性メモリ１のメモリコア制御部１２は、書き込み先ブロック毎に、次のプログラム動作を行うために必要なページを示すページアドレスをコントローラ２に正しく通知することができる。
【００８５】
なお、必ずしも書き込み先ブロックアドレスとページアドレスの双方を不揮発性メモリ１からコントローラ２に通知する必要は無く、書き込み先ブロックアドレスの通知は省略し、ページアドレスのみを不揮発性メモリ１からコントローラ２に通知してもよい。
【００８６】
コントローラ２が「次のページ」のページアドレス０を不揮発性メモリ１から受信した場合、コントローラ２は、ページアドレス０を指定するプログラム要求（Write(0, 0)）と、ページアドレス０を有するページに書き込むべきデータ（ページ０のデータとしても参照される）とを不揮発性メモリ１に転送する（ステップＳ７０５）。Write(0, 0)の(0, 0)は、書き込み先ブロックアドレス０とページアドレス０とを表している。なお、プログラム要求は、必ずしも書き込み先ブロックアドレスとページアドレスの双方を指定する必要は無く、ページアドレスのみを指定するプログラム要求が使用されてもよい。
【００８７】
具体的には、ステップＳ７０５では、まず、プログラムコマンド、書き込み先ブロックアドレス、ページアドレスがコントローラ２から不揮発性メモリ１に転送され、次いで、ページ０のデータがコントローラ２から不揮発性メモリ１に転送される。
不揮発性メモリ１のメモリコア制御部１２がプログラム要求（Write(0, 0)）とページ０のデータとをコントローラ２から受信した場合、メモリコア制御部１２は、受信したページ０のデータをバッファ１０４に格納し、図５のバッファ管理テーブルに管理データを登録する（ステップＳ７０６）。
【００８８】
例えば、バッファ番号０のバッファにこのデータを格納した場合は、メモリコア制御部１２は、バッファ管理テーブル（図５）のバッファ番号０に関する列の有効無効フラグ５２を有効を示す値に設定し、この列のブロックアドレス５１の値を０に設定し、この列のページアドレス５４の値を０に設定し、この列のデータ必要期間５５の値を５に設定する。データ必要期間の値（ここでは５）は、図４のテーブルを参照することによって決定される。
【００８９】
つまり、図４のテーブルを参照することにより、ページ０のデータがワードラインＷＬ０のデータであること、このワードラインＷＬ０の３回目のプログラム動作はプログラム順序番号５番であることが分かる。したがって、ページ０のデータは、プログラム順序番号５番のプログラム動作が完了するまで必要であることがわかる。このことから、ページ０のデータに対して設定するデータ必要期間５５の値は、５となる。以降も同様にして、図４のテーブルから、各ページのデータに対応するデータ必要期間が取得される。
【００９０】
図７Ａの説明に戻る。
書き込み先ブロック０の次のプログラム動作に必要なページ０のデータを取得したメモリコア制御部１２は、ブロック書き込み状態管理テーブル（図６）のブロック０に関する次のプログラム順番号６３の値を１に更新し、コントローラ２に対して、書き込み先ブロック０の次のプログラム動作に必要なデータのページアドレスが３であることを通知する（ステップＳ７０７）。
【００９１】
このように、ステップＳ７０７では、メモリコア制御部１２は、書き込み先ブロック０に対する次のプログラム動作に対応するページアドレス３をコントローラ２に通知する（Notify next page (0, 3)）。Notify next page (0, 3)の(0, 3)は、書き込み先ブロックのブロックアドレス０とこの書き込み先ブロック内の書き込み先ページのページアドレス３とを表している。そして、メモリコア制御部１２は、コントローラ２から受信したページ０のデータをブロック０のページ０に書き込むプログラム動作を行う（ステップＳ７０８）。換言すれば、ステップＳ７０８では、メモリコア制御部１２は、コントローラ２から受信される、書き込み先ブロックアドレスおよびページアドレスおよびページ０のデータを指定するコマンド（プログラムコマンド）に対して、書き込み先ブロックアドレスおよびページアドレスに基づいたアドレス（物理アドレス）に対応するメモリセルに、ページ０のデータをプログラムする。
【００９２】
ページ０に対するデータのプログラムが完了したら、メモリコア制御部１２は、ブロック書き込み状態管理テーブル（図６）のブロック０に関する完了したプログラム順番号６４の値を０に設定する。
コントローラ２が「次のページ」のページアドレス３を不揮発性メモリ１から受信した場合、コントローラ２は、ページアドレス３を指定するプログラム要求（Write(0, 3)）と、ページアドレス３を有するページに書き込むべきデータ（ページ３のデータとしても参照される）とを不揮発性メモリ１に転送する（ステップＳ７０９）。
【００９３】
不揮発性メモリ１のメモリコア制御部１２がプログラム要求（Write(0, 3)）とページ３のデータとをコントローラ２から受信した場合、メモリコア制御部１２は、ページ３のデータをバッファ１０４に格納し、図５のバッファ管理テーブルに管理データを登録する（ステップＳ７１０）。例えば、バッファ番号１のバッファにこのページ３のデータを格納した場合は、メモリコア制御部１２は、バッファ管理テーブル（図５）のバッファ番号１に関する列の有効無効フラグ５２を有効を示す値に設定し、この列のブロックアドレス５１の値を０に設定し、この列のページアドレス５４の値を３に設定し、この列のデータ必要期間５５の値を８に設定する。データ必要期間の値（ここでは８）は、図４のテーブルを参照することによって決定される。
【００９４】
書き込み先ブロック０の次のプログラム動作に必要なページ３のデータを取得したメモリコア制御部１２は、ブロック書き込み状態管理テーブル（図６）のブロック０に関する次のプログラム順番号６３の値を１に更新し、コントローラ２に対して、書き込み先ブロック０の次のプログラム動作に必要なデータのページアドレスが１であることを通知する（ステップＳ７１１）。
【００９５】
このように、ステップＳ７１１では、メモリコア制御部１２は、書き込み先ブロックに対する次のプログラム動作に対応するページアドレス１をコントローラ２に通知する（Notify next page (0, 1)）。Notify next page (0, 1)の(0, 1)は、書き込み先ブロックのブロックアドレス０とこの書き込み先ブロック内の書き込み先ページのページアドレス１とを表している。そして、メモリコア制御部１２は、コントローラ２から受信したページ３のデータをブロック０のページ３に書き込むプログラム動作を行う（ステップＳ７１２）。
【００９６】
コントローラ２が「次のページ」のページアドレス１を不揮発性メモリ１から受信した場合、コントローラ２は、ページアドレス１を指定するプログラム要求（Write(0, 1)）と、ページアドレス１を有するページに書き込むべきデータ（ページ１のデータとしても参照される）とを不揮発性メモリ１に転送する（ステップＳ７１３）。
【００９７】
不揮発性メモリ１のメモリコア制御部１２がプログラム要求（Write(0, 1)）とページ１のデータとをコントローラ２から受信した場合、メモリコア制御部１２は、ページ１のデータをバッファ１０４に格納し、図５のバッファ管理テーブルに管理データを登録する（ステップＳ７１４）。例えば、バッファ番号２のバッファにこのページ１のデータを格納した場合は、メモリコア制御部１２は、バッファ管理テーブル（図５）のバッファ番号２に関する列の有効無効フラグ５２を有効を示す値に設定し、この列のブロックアドレス５１の値を０に設定し、この列のページアドレス５４の値を１に設定し、この列のデータ必要期間５５の値を５に設定する。データ必要期間の値（ここでは５）は、図４のテーブルを参照することによって決定される。
【００９８】
書き込み先ブロック０の次のプログラム動作に必要なページ１のデータを取得したメモリコア制御部１２は、ブロック書き込み状態管理テーブル（図６）のブロック０に関する次のプログラム順番号６３の値６に更新し、コントローラ２に対して、書き込み先ブロック０の次のプログラム動作に必要なデータのページアドレスが６であることを通知する（ステップＳ７１５）。
【００９９】
このように、ステップＳ７１５では、メモリコア制御部１２は、書き込み先ブロック０に対する次のプログラム動作に対応するページアドレス６をコントローラ２に通知する（Notify next page (0, 6)）。Notify next page (0, 6)の(0, 6)は、書き込み先ブロックのブロックアドレス０とこの書き込み先ブロック内の書き込み先ページのページアドレス６とを表している。そして、メモリコア制御部１２は、バッファ１０４からページ０のデータを読み出し、バッファ１０４から読み出したページ０のデータと、コントローラ２から受信されるページ３のデータとを使用して、ブロック０のページ１に対するプログラム動作を行う（ステップＳ７１６）。
【０１００】
このように、コントローラ２から受信されるプログラム要求によって指定されるページに対するプログラム動作がワードラインＷＬ０の２回目のプログラム動作である場合には、メモリコア制御部１２は、このワードラインＷＬ０に対する１回目のプログラム動作で使用したデータ（ページ０のデータ）をバッファ１０４から読み出し、この読み出したページ０のデータと、コントローラ２から転送されるページ１のデータとを使用して、ページ１に対するプログラム動作を行う。ページ０のデータとページ１のデータの双方は、ワードラインＷＬ０の各メモリセルの目標閾値電圧レベルを決定するために使用される。目標閾値電圧レベルは２ビットに対応する４データ値に対応する４つの閾値電圧レベルのいずれか一つである。
【０１０１】
以降、コントローラ２と不揮発性メモリ１の間で同様の通信および処理が行われる（図７ＡのステップＳ７１３〜図７ＢのステップＳ７２８）。
図７ＢのステップＳ７２８では、メモリコア制御部１２は、バッファ１０４からページ０のデータとページ１のデータの双方を読み出し、バッファ１０４から読み出したページ０のデータおよびページ１のデータと、コントローラ２から受信されるページ２のデータとを使用して、ブロック０のページ２に対するプログラム動作を行う。ページ０のデータとページ１のデータとページ２のデータは、ワードラインＷＬ０の各メモリセルの最終目標閾値電圧レベルを決定するために使用される。最終目標閾値電圧レベルは３ビットに対応する８データ値に対応する８つの閾値電圧レベルのいずれか一つである。
【０１０２】
そして、ページ２に対するデータのプログラムが完了したら、メモリコア制御部１２は、ブロック書き込み状態管理テーブル（図６）のブロック０に関する完了したプログラム順番号６４の値を５に設定する。
具体的には、この時点でのブロック書き込み状態管理テーブル（図６）の内容は図９のようになっている。また、この時点でのバッファ管理テーブル（図５）の内容は図８のようになっている。
【０１０３】
そこで、メモリコア制御部１２は、図５のバッファ管理テーブルを参照して、データ必要期間５５の値が５になっているバッファを探す。すると、メモリコア制御部１２は、バッファ番号０のバッファとバッファ番号２のバッファとバッファ番号５のバッファに対応するデータ必要期間５５の値が５になっていることを検出し、これらバッファに格納されているデータに対応するページアドレス５４の値（ここでは、ページアドレス０、１、２）を、書き込み先ブロック０のどのページに対するプログラム動作においても必要なくなったページのデータとして認識する。そして、ステップＳ７２９において、メモリコア制御部１２は、ページアドレス０、１、２に対応するデータが不要であることを示すデータ不要通知をコントローラ２に通知する（Notify free data (0, 1, 2)）。Notify free data (0, 1, 2)の(0, 1, 2)は、ページアドレス０、１、２を表す。
【０１０４】
なお、不要になったデータのページアドレスのみならず、これらページが属するブロックのブロックアドレスも不揮発性メモリ１からコントローラ２に通知してもよい。
さらに、ステップＳ７２９においては、メモリコア制御部１２は、ページアドレス０、１、２に対応するデータが格納されているバッファ（バッファ１０４内の領域）を解放する処理も実行する。
【０１０５】
コントローラ２は、このデータ不要通知を受信すると、コントローラ２内のバッファメモリ２０６に格納されている、この指定されたデータが不要であると判断する。そして、コントローラ２は、この指定されたデータが格納されているバッファメモリ２０６内の領域を解放して、この解放された領域を他のデータの格納等のために再利用する。
【０１０６】
以上のように、不揮発性メモリ１のメモリコア制御部１２は、書き込み先ブロックに含まれる複数のページに対するプログラム動作を、所定のプログラム順序で実行する。所定のプログラム順序は、書き込み先ブロックにデータを書き込むために必要なページの順序を示す。そして、メモリコア制御部１２は、書き込み先ブロックに対する次のプログラム動作に対応するページアドレスをコントローラ２に通知する。
【０１０７】
したがって、コントローラ２は、不揮発性メモリ１によって指示されたページアドレスに書き込むべきデータを不揮発性メモリ１に転送するという処理だけを行えばよいので、不揮発性メモリ１がどのようなプログラム順序でページそれぞれをプログラムすることが必要なメモリであるかを知らなくてもよい。つまり、たとえ制御対象の不揮発性メモリ１の書き込み方式が変更されても、コントローラ２はこの不揮発性メモリ１によって指示されたページアドレスに対応するデータを不揮発性メモリ１に転送するという処理をしていれば正しいデータ書き込み動作を実行することが可能になる。
【０１０８】
よって、たとえ不揮発性メモリ１の書き込み方式が変更されても、変更された書き込み方式に対応する正しいプログラム順序にしたがってこの不揮発性メモリ１を制御可能な新たなコントローラを開発する必要がなくなり、このコントローラ２を使い続けることができる。
【０１０９】
一般には、不揮発性メモリ１として使用されるＮＡＮＤ型フラッシュメモリの世代は、例えば１年毎に変わる。このため、もしＮＡＮＤ型フラッシュメモリの世代が変わる度に新たなコントローラを開発すると、膨大なコスト増を招くことになる。
本実施形態では、複数のブロックから選択される一のブロックを示すブロックアドレスをコントローラ２から受信した場合、不揮発性メモリ２は、このブロックアドレスに基づいて選択されるページアドレスをコントローラ２に送信する。これにより、不揮発性メモリ１が、書き込み先ブロックに対する次のプログラム動作に対応するページアドレスをコントローラ２に通知するという新たな通信インタフェース仕様が提供される。したがって、不揮発性メモリ１を制御するために必要なコントローラ２側の処理負担を軽減でき、これによって、低コストで複数世代のＮＡＮＤ型フラッシュメモリに対応可能なメモリシステムを実現できる。
【０１１０】
また、本実施形態では、図７ＡのステップＳ７０４で説明したように、メモリコア制御部１２は、複数のブロックのうちの一つのブロックを書き込み先ブロックとして選択するための処理要求（Block open要求）をコントローラ２から受信した場合、この書き込み先ブロックに含まれる複数のページのうち、最初のブログラム順序番号（ブログラム順序番号０）に対応するページを示すページアドレス（例えばページアドレス０）を、この書き込み先ブロックに対する次のプログラム動作を実行するために必要なページを示すページアドレスとしてコントローラ２に通知する。
【０１１１】
また、本実施形態では、図７ＡのステップＳ７０７で説明したように、メモリコア制御部１２は、最初のブログラム順序番号（ブログラム順序番号０）に対応するページのページアドレス（例えばページアドレス０）を指定するプログラム要求とこのページアドレス０に書き込むべきデータとをコントローラ２から受信した場合、この書き込み先ブロックに含まれる複数のページのうち、次のブログラム順序番号（ブログラム順序番号１）に対応するページを示すページアドレス（例えばページアドレス３）を、この書き込み先ブロックに対する次のプログラム動作を行うために必要なページを示すページアドレスとして、コントローラ２に通知する。
【０１１２】
このように、Block open要求またはプログラム要求に対する返答として、次のプログラム動作を行うために必要なページを示すページアドレスが不揮発性メモリ１からコントローラ２に通知される。
したがって、コントローラ２は、Block open要求またはプログラム要求を発行する度に、次のプログラム動作を行うために必要なページを示すページアドレスを容易に知ることができる。
【０１１３】
また、コントローラ２は、不揮発性メモリ１から不要通知を受け取ることで、不要なデータを知ることができる。よって、コントローラ２は、各ワードラインに割り当てられたページの数、プログラム順序、書き込み方式等を知らずとも、書き込み先ブロックのデータ書き込み処理のために不要になったデータをバッファメモリ２０６から容易に削除することができる。
【０１１４】
さらに、本実施形態では、書き込み先ブロックに属する複数のワードラインの各々が複数ページを含み、メモリコア制御部１２は、書き込み先ブロック内の各ワードラインに対して、複数回のプログラム動作を実行する。プログラム順序は、隣接するワードラインそれぞれに対するプログラム動作が互いに交互に実行されるように決められている。
【０１１５】
図３Ａで説明したように、メモリコア制御部１２は、コントローラ２から転送されるデータを保持するバッファ１０４を含む。そして、メモリコア制御部１２は、コントローラ２から受信されるプログラム要求によって指定されるページアドレスに対するプログラム動作が、例えばワードラインＷＬ０に対する２回目の以降のプログラム動作である場合、ワードラインＷＬ０に対する以前のプログラム動作で使用したデータをバッファ１０４から読み出し、読み出したデータと、コントローラ２から転送される、この指定されたページアドレスに書き込むべきデータとを使用して、ワードラインＷＬ０に対するプログラム動作を実行する。
【０１１６】
したがって、コントローラ２は不揮発性メモリ１によって指示されたページのデータしか不揮発性メモリ１に送信する必要が無く、たとえ各ワードラインへのデータ書き込みのために複数のページデータが必要とされる書き込み方式が不揮発性メモリ１に適用されている場合であっても、コントローラ２はその書き込み方式について知らずに済むので、不揮発性メモリ１とコントローラ２の間の通信回数や通信時間を削減することができる。
【０１１７】
具体的には、たとえ書き込み対象ページがロアーページ、ミドルページ、またはアッパーページのいずれであるかに応じてデータ書き込みに必要なページデータの数が変わる書き込み方式が不揮発性メモリ１に適用されている場合であっても、コントローラ２は、書き込み対象ページがロアーページ、ミドルページ、またはアッパーページのいずれであるかなどを考慮する必要は無く、不揮発性メモリ１によって通知されたページアドレスを指定するプログラム要求とこのページアドレスに書き込むべき１ページ分のライトデータとを不揮発性メモリ１に転送する処理のみを行えばよい。
【０１１８】
図１２のフローチャートは、ブロックへの書き込み処理を開始することがコントローラ２から通知された場合に不揮発性メモリ１によって実行される処理の手順を示し、図１３のフローチャートは、ブログラム要求とライトデータとをコントローラ２から受信した場合に不揮発性メモリ１によって実行される処理の手順を示す。これら手順の詳細については、後述の第２実施形態において説明する。
（第２実施形態）
次に、第２実施形態について説明する。
【０１１９】
第２実施形態の不揮発性メモリ１およびコントローラ２それぞれの構成は第１実施形態の不揮発性メモリ１およびコントローラ２それぞれの構成と同様である。
第１実施形態では、コントローラ２は、不揮発性メモリ１によって指定されたページアドレスに対応するデータを不揮発性メモリ１に転送していた。
【０１２０】
しかし、コントローラ２の状況によっては、コントローラ２が、不揮発性メモリ１によって指定されたページアドレスに対応するデータを不揮発性メモリ１に転送できないケースも考えられる。そのような場合の処理内容を示したのが図１０である。
図１０のステップＳ１００１からステップＳ１００８までの処理は図７ＡのステップＳ７０１からステップＳ７０８までの処理と同じであるため、図１０のステップＳ１００１からステップＳ１００８までの処理の説明は省略する。
【０１２１】
ここでは、ステップＳ１００７で不揮発性メモリ１がコントローラ２にブロック０に対する次のプログラム動作に必要なデータのページアドレスとして３を通知したにも関わらず、コントローラ２が、ブロック０のページアドレス１を指定するプログラム要求とブロック０のページアドレス１に書き込むべきデータ（ページ１のデータ）とを不揮発性メモリ１に転送した場合を考える（ステップＳ１００９）。
【０１２２】
この時、不揮発性メモリ１のメモリコア制御部１２は、コントローラ２から受信されたページ１のデータをバッファ１０４に格納し、図５のバッファ管理テーブルに管理データを登録する（ステップＳ１０１０）。ページ１のデータのデータ必要期間は５である。
【０１２３】
次に、メモリコア制御部１２は、コントローラ２に対して、ブロック０に対する次のプログラム動作に必要なデータのページアドレスが３であることを再度通知する（ステップＳ１０１１）。
そして、メモリコア制御部１２は、ブロック０の次のプログラム動作に必要なデータ（ページアドレス３のデータ）がないため、ブロック０のページアドレス３に対するプログラム動作を行わない。
【０１２４】
さらに、コントローラ２がページアドレス２を指定するプログラム要求とページアドレス２に書き込むべきデータ（ページ２のデータ）とを不揮発性メモリ１に転送した場合も、メモリコア制御部１２は、ブロック０のページアドレス１を指定するプログラム要求とブロック０のページアドレス１に書き込むべきデータ（ページ１のデータ）とを受信した場合と同様の処理を行う（ステップＳ１０１３、ステップＳ１０１４）。ページ２のデータのデータ必要期間は５である。
【０１２５】
その後、コントローラ２がブロック０のページアドレス３を指定するプログラム要求とブロック０のページアドレス３に書き込むべきデータ（ページ３のデータ）とを不揮発性メモリ１に転送した場合（ステップＳ１０１５）、メモリコア制御部１２は、コントローラ２から受信したページ３のデータをバッファ１０４に格納し、図５のバッファ管理テーブルに管理データを登録する（ステップＳ１０１６）。ページ３のデータのデータ必要期間は８である。
【０１２６】
メモリコア制御部１２は、コントローラ２に対して、ブロック０に対する次のプログラム動作に必要なデータはページアドレス６のデータであることを通知する（ステップＳ１０１７）。
そして、メモリコア制御部１２は、やっと受け取ったページ３のデータをブロック０のページ３に書き込むプログラム動作を行う（ステップＳ１０１８）。そして、メモリコア制御部１２は、ブロック書き込み状態管理テーブル（図６）のブロック０に関する次のプログラム順番号６３の値を２に更新し、ブロック０に関する完了したプログラム順番号６４の値を１に更新する。
【０１２７】
この時、図５のバッファ管理テーブルの内容は図１１のようになっている。
すると、メモリコア制御部１２は、次のプログラム順序番号は２であって、プログラム順序番号２に対応するページ１のプログラムに必要なデータはページアドレス０に対応するデータとページアドレス１に対応するデータの双方であること、そしてこれらページアドレス０に対応するデータとページアドレス１に対応するデータの双方が既にバッファ１０４内に存在することを知る。
【０１２８】
そこで、メモリコア制御部１２は、ページ３のプログラム完了後に、バッファ１０４からページアドレス０に対応するデータとページアドレス１に対応するデータの双方を読み出し、これら読み出したページアドレス０に対応するデータとページアドレス１に対応するデータの双方を使用して、ページ１に対するプログラム動作を実行する（ステップＳ１０１９）。
【０１２９】
このように、不揮発性メモリ１のメモリコア制御部１２は、次のプログラム動作に必要なページのデータではないデータがコントローラ２から転送された場合に、そのデータをバッファ１０４に格納し、次のプログラム順序番号が、この格納されたデータを必要とするプログラム順序番号になったら、コントローラ１からの指示を待たずに、このプログラム順序番号に対応するページに対するプログラム動作を自動的に実行する。
【０１３０】
以上、図７Ａおよび図７Ｂと、図１０で説明した処理内容をフローチャートで示したものが図１２、図１３および図１４である。
以下、図１２、図１３、図１４の内容を説明する。
図１２は、コントローラ２から不揮発性メモリ１に対してブロックへの書き込み処理を開始することが通知された時（Ｓ７０１，Ｓ１００１）に不揮発性メモリ１によって実行される処理の手順を示す。
【０１３１】
コントローラ２から不揮発性メモリ１に対して、あるブロックアドレスを有するブロックへの書き込み処理を開始することが通知された場合、不揮発性メモリ１のメモリコア制御部１２は、ブロック書き込み状態管理テーブル（図６）内のこのブロックに関する列を初期化する（ステップＳ１２０１）。
【０１３２】
ここで言う初期化とは、書き込み中フラグ６２をＹに設定し、次のプログラム順番号６３の値、つまり次のプログラム順序番号、を０に設定することを指す。
次に、不揮発性メモリ１のメモリコア制御部１２は、コントローラ２に対して、次のプログラム順序番号０番に対応するページアドレス０を返す（ステップＳ１２０２）。次のプログラム順序番号０に対応するページアドレスは、図４のテーブルから取得することができる。
【０１３３】
次に図１３を説明する。
図１３は、コントローラ２から不揮発性メモリ１に対してプログラム要求とライトデータが転送された時に不揮発性メモリ１によって実行される処理の手順を示す。
コントローラ２からプログラム要求を受領した不揮発性メモリ１のメモリコア制御部１２は、この受領したプログラム要求によって指定されたブロックが書き込み中のブロック（オープンされているブロック）であるかどうかを、ブロック書き込み状態管理テーブル（図６）を参照することによって判定する（ステップＳ１３０１）。
【０１３４】
当該ブロックが書き込み中のブロックでなかった場合（ステップＳ１３０１，Ｎｏ）、メモリコア制御部１２は、コントローラ２に対して、当該ブロックはまだ書き込み処理の開始通知を受けていないことを示すエラーを返し（ステップＳ１３０２）、処理を終了する。
【０１３５】
受領したプログラム要求によって指定されたブロックが書き込み中のブロックであった場合（ステップＳ１３０１，Ｙｅｓ）、メモリコア制御部１２は、受領したプログラム要求によって指定されたページアドレスが、ブロック書き込み状態管理テーブル（図６）の次のプログラム順番号６３の値に対応するページアドレスに一致するかどうかを、図４のテーブルを参照することによって判定する（ステップＳ１３０３）。
【０１３６】
受領したプログラム要求によって指定されたページアドレスが次のプログラム順番号６３の値に対応するページアドレスに一致する場合（ステップＳ１３０３，Ｙｅｓ）、メモリコア制御部１２は、コントローラ２から受領したデータをバッファ１０４に格納し（ステップＳ１３０４）、図５のバッファ管理テーブルを更新する（ステップＳ１３０５）。
【０１３７】
図５のバッファ管理テーブルを更新する処理においては、データを格納したバッファ番号に対応するバッファ管理テーブル内の列について、メモリコア制御部１２は、有効無効フラグ５２を有効を示す値に設定し、ブロックアドレス５３の値を書き込み対象ブロックアドレスに設定し、ページアドレス５４の値を書き込み先ページアドレスに設定し、データ必要期間５５の値を図４のテーブルを参照して取得したプログラム順序番号に設定する。
【０１３８】
メモリコア制御部１２は、図５のバッファ管理テーブルの更新が終わると、図６のブロック書き込み状態管理テーブルの次のプログラム順番号６３の値を更新する（ステップＳ１３０６）。例えば、プログラム順序番号０に対応するプログラム要求およびデータがコントローラ２から不揮発性メモリ１に転送された場合には、次のプログラム順番号６３の値、つまり次のプログラム順序番号、は１に更新される。
【０１３９】
そして、メモリコア制御部１２は、コントローラ２に対して、このブロックに関する次のプログラム順番号６３の更新された値に対応するページアドレスを返す（ステップＳ１３０７）。例えば、次のプログラム順番号６３の値（プログラム順序番号）が１に更新されたならば、図４より、この更新されたプログラム順序番号１に対応するページアドレスが３であることが決定され、このページアドレス３がコントローラ２に返される。
【０１４０】
そして、メモリコア制御部１２は、ステップＳ１３０４でバッファ１０４に格納されたデータを使用して、コントローラ２から既に受信されているプログラム要求によって指定されたページに対するプログラム動作を開始する（ステップＳ１３０８）。
コントローラ２から受領したデータのページアドレスが次のプログラム順番号６３の値に対応したページアドレスではなかった場合（ステップＳ１３０３，Ｎｏ）、メモリコア制御部１２は、次のプログラム動作に必要なページのデータ以外のデータをバッファ１０４に格納しても次のプログラム動作に必要なページのデータをバッファ１０４に格納可能な空き領域（余裕）がバッファ１０４に存在するかどうかをチェックする（ステップＳ１３０９）。
【０１４１】
ステップＳ１３０９では、メモリコア制御部１２は、例えば、次のプログラム順序番号に対応するデータ用の空き領域以外の別の空き領域がバッファ１０４に存在するかどうかをチェックしてもよい。つまり、メモリコア制御部１２は、２つ以上の空き領域（２つ以上の空きバッファ）がバッファ１０４に存在するかどうかをチェックしてもよく、２つ以上の空き領域（２つ以上の空きバッファ）が存在すれば、バッファ１０４に余裕が存在すると判定してもよい。
【０１４２】
バッファ１０４に次のプログラム動作に必要なページのデータ以外のデータを格納できるだけの空き領域（余裕）が存在しない場合（ステップＳ１３０９，Ｎｏ）、メモリコア制御部１２は、バッファ１０４に空き領域（余裕）ないことを示すエラーをコントローラ２に返す（ステップＳ１３１２）。
【０１４３】
一方、バッファ１０４に次のプログラム動作に必要なページのデータ以外のデータを格納できるだけの空き領域（余裕）が存在する場合（ステップＳ１３０９，Ｙｅｓ）、メモリコア制御部１２は、コントローラ２から受領したデータをバッファ１０４に格納し（ステップＳ１３１０）、図５のバッファ管理テーブルを更新する（ステップＳ１３１１）。
【０１４４】
ステップＳ１３１１およびＳ１３１２の処理の後は、いずれの場合も、メモリコア制御部１２は、コントローラ２に対して、このブロックの次のプログラム順番号６３の値に対応するページアドレスを返し（ステップＳ１３１３）、処理を完了する。
図１４は、図１３のステップＳ１３０８で開始したプログラム動作が完了した時にメモリコア制御部１２によって実行される処理の手順を示す。
【０１４５】
メモリコア制御部１２は、ある書き込み先ブロックのあるページに対するプログラム動作が完了したことを検出すると、まず、ブロック書き込み状態管理テーブル（図６）のこのブロックに関する完了したプログラム順番号６４の値、つまり完了したプログラム順序番号、を更新する（ステップＳ１４０１）。
【０１４６】
次に、メモリコア制御部１２は、図５のバッファ管理テーブルを参照して、データ必要期間５５にこの完了したプログラム順序番号が設定されたバッファがあるかどうかを調べる（ステップＳ１４０２）。データ必要期間５５にこの完了したプログラム順序番号が設定されたバッファに格納されているデータは、この書き込み先ブロックのどのページに対するプログラム動作においても必要なくなったデータ（不要データ）である。
【０１４７】
データ必要期間５５にこの完了したプログラム順順序番号が設定されたバッファがなければ（ステップＳ１４０２，Ｎｏ）、メモリコア制御部１２は、処理を終了する。
データ必要期間５５にこの完了したプログラム順序番号が設定された一つ以上のバッファがあった場合（ステップＳ１４０２，Ｙｅｓ）、メモリコア制御部１２は、これらバッファ（バッファ１０４内の領域）を解放し、さらに、コントローラ２に対して、これらバッファに対応するページアドレスのデータが不要であることを示す返答を返す（ステップＳ１４０３）。これは図７のステップＳ７２９に対応する処理である。
【０１４８】
その後、メモリコア制御部１２は、完了したプログラム順序番号の次のプログラム順序番号に対応するページに対するプログラム動作、つまり次のプログラム動作、を実行するために必要な全てのデータがバッファ１０４内に既に存在しているかどうかを、図５のバッファ管理テーブルを参照して調べる（ステップＳ１４０４）。次のプログラム動作を実行するために必要な全てのデータは、例えば、（１）次のプログラム動作がワードラインＷＬ０の２回目のプログラム動作（２ｎｄプログラム動作）に対応する場合には、ページ０のデータとページ１のデータであり、（２）次のプログラム動作がワードラインＷＬ０の３回目のプログラム動作（３ｒｄプログラム動作）に対応する場合には、ページ０のデータとページ１のデータとページ２のデータであり、（３）次のプログラム動作がワードラインＷＬ１の１回目のプログラム動作（１ｓｔプログラム動作）に対応する場合には、ページ３のデータである。
【０１４９】
したがって、例えば、次のプログラム動作がワードラインＷＬ０の２回目のプログラム動作（２ｎｄプログラム動作）に対応する場合、メモリコア制御部１２は、ページ０のデータ、ページ１のデータの双方がバッファ１０４内に存在するか否かに基づいて、次のプログラム動作を実行するために必要な全てのデータがバッファ１０４内に存在するかどうかを調べる。
【０１５０】
次のプログラム動作に必要な全てのデータがバッファ１０４内に存在しない場合（ステップＳ１４０４，Ｎｏ）、メモリコア制御部１２は、処理を終了する。
一方、次のプログラム動作に必要な全てのデータがバッファ１０４内に存在する場合（ステップＳ１４０４，Ｙｅｓ）、メモリコア制御部１２は、バッファ１０４内のこれらデータを使って、次のプログラム動作を自動的に開始する（ステップＳ１４０５）。これで一連の処理は完了となる。
【０１５１】
なお、ステップＳ１４０５で開始したプログラム動作が完了したら、再度ステップＳ１４０１からの処理が行われる。
以上のように、第２実施形態では、メモリコア制御部１２は、コントローラ２に通知したページアドレスとは異なる別のページアドレスを指定するプログラム要求とこの別のページアドレスに対応するデータとをコントローラ２から受信した場合、この別のページアドレスを有するページに対するプログラム動作を実行せずに、受信したデータをバッファ１０４に格納する。これにより、たとえコントローラ２が、不揮発性メモリ１によって指定されたページとは異なるページのデータを不揮発性メモリ１に送信しても、このデータを破棄すること無く、この不揮発性メモリ１内のバッファ１０４に保持することができる。
【０１５２】
また、通知したページアドレスを指定するプログラム要求と通知したページアドレスを有するページに対応するデータとをコントローラ２から受信した場合、メモリコア制御部１２は、通知したページアドレスを有するページに対するブログラム動作を実行する。そして、通知したページアドレスを有するページに対するブログラム動作を実行した後、次のブログラム動作が実行されるべき次のページに対応するデータがバッファ１０４に存在する場合、メモリコア制御部１２は、次のページに対するプログラム動作を自動実行する。
【０１５３】
よって、たとえコントローラ２が、不揮発性メモリ１によって指定されたページとは異なるページに対応するデータを不揮発性メモリ１に送信しても、コントローラ２と不揮発性メモリ１との間の通信回数を増加させること無く、不揮発性メモリ１によって指定されたページとは異なるページに対応するデータを、正しいプログラム順序で書き込み先ブロックに書き込むことができる。
（第３実施形態）
次に、第３実施形態として、コントローラ２からの指示により、不揮発性メモリ１があるブロックから別のブロックにデータをコピーする構成を説明する。
【０１５４】
第３実施形態の不揮発性メモリ１およびコントローラ２それぞれの構成は、第１および第２実施形態の不揮発性メモリ１およびコントローラ２それぞれの構成と同様である。
ここで言うコピーとは、次のような処理のことを指す。
例えば図１５のようにブロックａとブロックｂがあり、ブロックａに格納されているデータのうち、４つの記憶位置ａ１０，ａ１３，ａ２０，ａ２１にそれぞれ格納されている４つのデータが有効データであり、そしてブロックｂに格納されているデータのうち、４つの記憶位置ｂ００，ｂ０１，ｂ０２，ｂ１０にそれぞれ格納されている４つのデータが有効データであったとする。
【０１５５】
ａ１０は、ブロックアドレスａ、ページアドレス１、オフセット０を表している。同様に、ｂ００は、ブロックアドレスｂ、ページアドレス０、オフセット０を表している。
この図１５におけるブロックａの有効データとブロックｂの有効データを別のブロックであるブロックｃにコピーすることを、ここではコピー処理と呼ぶこととする。このコピー処理は不揮発性メモリ１内部で実行される。つまり、メモリコア制御部１２は、セルアレイ１０１のコピー元位置に格納されているデータ（有効データ）をセルアレイ１０１からバッファ１０４に読み出し、そして、このデータ（有効データ）を、バッファ１０４からセルアレイ１０１のコピー先位置（書き込み先ページ）に書き込むプログラム動作を実行する。
【０１５６】
このような処理のことは、ガーベッジコレクション（ｇａｒｂａｇｅ  ｃｏｌｌｅｃｔｉｏｎ）とも呼ばれる。
ここで、有効データとは、メモリシステムをアクセスするためにホストによって使用される論理アドレスのいずれかに関連付けられているデータを意味する。ある論理アドレスに関連付けられているデータはホストによって後にアクセスされる可能性があるデータでる。無効データとは、どの論理アドレスにも関連付けられていないデータを意味する。
【０１５７】
コントローラ２においては、論理アドレスそれぞれとこれら論理アドレスに対応するデータが格納されている不揮発性メモリ１内の記憶位置を示す物理アドレスそれぞれとの間のマッピングを管理するためのアドレス変換テーブルが管理されている。ある論理アドレスに対応する更新データは、この論理アドレスに対応する以前のデータが格納されている不揮発性メモリ１の記憶位置とは別の位置に書き込まれる。コントローラ２は、更新データが書き込まれた記憶位置を示す物理アドレスがこの論理アドレスに関連付けられるようにアドレス変換テーブルを更新する。各論理アドレスに対応する最新の物理アドレスに格納されているデータが有効データである。
【０１５８】
このコピー処理に関する、不揮発性メモリ１とコントローラ２との通信内容は図１６のようになる。
コントローラ２は、通常の書き込み処理と同様に、まず、メモリ１に対して、ブロックへの書き込み開始の通知を行う（ステップＳ１６０１）。ここではブロックｃに対する書き込み開始通知を行う。ステップＳ１６０１では、コントローラ２は、不揮発性メモリ１内の複数のブロック（フリーブロック）の内の一つのブロックを書き込み先ブロック（ここでは、コピー先ブロックとしても参照される）として選択する要求（Block open要求）を不揮発性メモリ１に送信してもよい。この選択される書き込み先ブロックがブロックアドレスｃを有するブロックｃである場合には、コントローラ２は、Block open (ｃ)を不揮発性メモリ１に送信する。ここで、Block open (ｃ)の(ｃ)は、ブロックアドレスｃを表している。
【０１５９】
ブロックｃへの書き込み開始通知を受領した不揮発性メモリ１のメモリコア制御部１２は、ブロック書き込み状態管理テーブル（図６）のブロックｃの列を初期化し（ステップＳ１６０２）、コントローラ２に対して、ブロックｃに対する次のプログラム動作を行うために必要なデータはページ０のデータであることを通知する（ステップＳ１６０３）。
【０１６０】
ステップＳ１６０３では、メモリコア制御部１２は、ブロックｃの次のプログラム順序番号に対応するページアドレス０をコントローラ２に通知する（Notify next page (c, 0)）。
すると、コントローラ２は、書き込み先ブロック番号（ここではｃ）、書き込み先ページアドレス（ここでは０）、およびコピー元データの位置情報を指定するコピー要求（Copy (c, 0, a10, a13, a20, a21)）を不揮発性メモリ１に送信する（ステップＳ１６０４）。
【０１６１】
図１５の例では、ブロックａのａ１０，ａ１３，ａ２０，ａ２１の４つの位置に有効データがあるので、コントローラ２はこれら位置をコピー元データの位置情報として不揮発性メモリ１に送る。
ステップＳ１６０４では、具体的には、コピーコマンド、書き込み先ブロックアドレス、書き込み先ページアドレス、コピー元データの位置情報がコントローラ２から不揮発性メモリ１に転送される。
【０１６２】
コピー要求（Copy (c, 0, a10, a13, a20, a21)）を受信した不揮発性メモリ１のメモリコア制御部１２は、コピー要求によって指定されたコピー元位置に格納されているデータをバッファ１０４に読み出し（Ｓ１６０５）、バッファ管理テーブル（図５）を更新する（Ｓ１６０６）。
【０１６３】
例えば、バッファ番号０のバッファにこのデータを格納した場合は、メモリコア制御部１２は、バッファ管理テーブル（図５）のバッファ番号０に関する列の有効無効フラグ５２を有効を示す値に設定し、この列のブロックアドレス５１の値をｃに設定し、この列のページアドレス５４の値を０に設定し、この列のデータ必要期間５５の値を５に設定する。
【０１６４】
そして、メモリコア制御部１２は、コントローラ２に対して、ブロックｃに対する次のプログラム動作を行うために必要なデータはページ３のデータであることを通知する（ステップＳ１６０７）。
ステップＳ１６０７では、メモリコア制御部１２は、ブロックｃの次のプログラム順序番号１に対応するページアドレス３をコントローラ２に通知する（Notify next page (c, 3)）。
【０１６５】
その後、メモリコア制御部１２は、バッファ１０４に読み出したデータを使用してブロックｃのページ０に対するプログラム動作を開始する（ステップＳ１６０８）。そして、メモリコア制御部１２は、ブロックｃに関する、ブロック書き込み状態管理テーブル（図６）の内容も更新する。
【０１６６】
次に、コントローラ２は、書き込み先ブロック番号（ここではｃ）、書き込み先ページアドレス（ここでは３）、およびコピー元データの位置情報を指定するコピー要求（Copy (c, 3, b00, b01, b02, b10)）を不揮発性メモリ１に送信する（ステップＳ１６００９）。
【０１６７】
図１５の例では、ブロックｂのｂ００，ｂ０１，ｂ０２，ｂ１０の４つの位置に有効データがあるので、コントローラ２はこれら位置をコピー元データの位置情報として不揮発性メモリ１に送る。
コピー要求（Copy (c, 3, b00, b01, b02, b10)）を受信した不揮発性メモリ１のメモリコア制御部１２は、指定されたコピー元位置に格納されているデータをバッファ１０４に読み出し（Ｓ１６１０）、バッファ管理テーブル（図５）を更新する（Ｓ１６１１）。
【０１６８】
例えば、バッファ番号１のバッファにこのデータを格納した場合は、メモリコア制御部１２は、バッファ管理テーブル（図５）のバッファ番号１に関する列の有効無効フラグ５２を有効を示す値に設定し、この列のブロックアドレス５１の値をｃに設定し、この列のページアドレス５４の値を３に設定し、この列のデータ必要期間５５の値を８に設定する。
【０１６９】
そして、メモリコア制御部１２は、コントローラ２に対して、ブロックｃに対する次のプログラム動作を行うために必要なデータはページ１のデータであることを通知する（ステップＳ１６１２）。
その後メモリコア制御部１２は、バッファ１０４に読み出したデータを使用してブロックｃのページ３に対するプログラム動作を開始する（ステップＳ１６１３）。合わせて，ブロックｃに関する、ブロック書き込み状態管理テーブル（図６）の内容も更新する。
【０１７０】
このようにすることで、不揮発性メモリ１とコントローラ２の間で実際のデータを送受信することなしに、不揮発性メモリ１内のデータのコピーを行うことができ、通信内容の簡略化による処理時間の削減や消費電力の削減を図ることができる。
（第４実施形態）
次に、第４実施形態について説明する。
【０１７１】
第４実施形態の不揮発性メモリ１およびコントローラ２それぞれの構成は、第１〜第３実施形態の不揮発性メモリ１およびコントローラ２に比し、不揮発性メモリ１のメモリコア制御部１２が、図１７に示すように、誤り訂正符号（ＥＣＣ）処理部１１６と誤り抑制符号（error mitigation code:ＥＭＣ）処理部１１７を含んでいる点が異なっている。すなわち、第４実施形態では、不揮発性メモリ１のメモリコア制御部１２内に誤り訂正符号（ＥＣＣ）処理部１１６と誤り抑制符号（error mitigation code:ＥＭＣ）処理部１１７とが設けられている。
【０１７２】
図１７では、図示の簡単化のために、メモリコア制御部１２内の幾つかの要素のみが図示されているが、この第４実施形態のメモリコア制御部１２は、図３Ａで説明した全てのコンポーネントと、誤り訂正符号（ＥＣＣ）処理部１１６と誤り抑制符号（ＥＭＣ）処理部１１７とを含むことができる。
【０１７３】
誤り訂正符号（ＥＣＣ）処理部１１６は、ＥＣＣエンコーダ１１６ａとＥＣＣデコーダ１１６ｂとを含む。ＥＣＣエンコーダ１１６ａは、書き込み先ブロックに書き込むべきデータ（ユーザデータ）を符号化してこのデータに誤り訂正符号を付加する誤り訂正符号化処理を実行する。ＥＣＣデコーダ１１６ｂは、セルアレイ１０１から読み出されたデータ（ユーザデータとＥＣＣとを含む符号化データ）を復号してこのデータに含まれる誤りを訂正する誤り訂正復号処理を実行する。
【０１７４】
誤り訂正符号化処理としては、ＲＳ（reed solomon）符号化、ＢＣＨ（bose chaudhuri hocquenghem）符号化などを用いることができる。
誤り抑制符号（ＥＭＣ）処理部１１７は、ＥＭＣエンコーダ１１７ａとＥＭＣデコーダ１１７ｂとを含む。ＥＭＣエンコーダ１１７ａは、元データのデータパターン（ビットパターンとも云う）を誤りが生じ難いデータパターン、つまり誤りを抑制するデータパターン、に変換する誤り抑制符号化処理を行う。ＥＭＣデコーダ１１７ｂは、誤り抑制符号化処理によって符号化されたデータを復号して元データに戻す誤り抑制復号処理を行う。
【０１７５】
例えば、ＥＭＣエンコーダ１１７ａは、‘０’または‘１’の出現頻度が偏った符号語を生成する符号化を行う。本説明では、このような符号化を誤り抑制符号化（error mitigating coding）と呼び、この誤り抑制符号化で用いる符号を誤り抑制符号（error mitigating code：EMC）と呼ぶ。
【０１７６】
ここで、‘０’の出現頻度とは、符号語を構成するビット列に‘０’が現れる回数（頻度）を意味する。‘１’の出現頻度とは、符号語を構成するビット列に‘１’が現れる回数（頻度）を意味する。したがって、‘０’または‘１’の出現頻度が偏った符号語とは、‘０’の個数（出現回数）と‘１’の個数（出現回数）とに差がある符号語を意味している。
【０１７７】
このような符号語を生成する符号化としては、固定ビット長のデータを符号化して固定ビット長の符号語を生成する方式と、固定ビット長のデータを符号化して可変ビット長の符号語を生成する方式と、可変ビット長のデータを符号化して固定ビット長の符号語を生成する方式とが存在する。以下、固定長のデータを符号化して固定長の符号語を生成する方式を固定長方式と呼ぶ。また、固定ビット長のデータを符号化して可変ビット長の符号語を生成する方式と、可変ビット長のデータを符号化して固定ビット長の符号語を生成する方式と、可変ビット長のデータを符号化して可変ビット長の符号語を生成する方式とを可変長方式と呼ぶ。
【０１７８】
可変長方式は、固定長方式に比べ、０と１との出現頻度の差をより大きくすることができる。そこで、ＥＭＣエンコーダ１１７ａが行う符号化として可変長方式の符号化を用いてもよい。
可変長方式の符号化としては、Reverse Huffman符号化、Reverse Tunstall符号化、Reverse Tunstall Huffman符号化などのエントロピー符号化を例示することができる。Reverse Huffman符号化は、Huffman符号化の逆の処理となる符号化である。Reverse Tunstall Huffman符号化は、Tunstall Huffman符号化の逆の処理となる符号化である。Reverse Tunstall符号化は、Tunstall符号化の逆の処理となる符号化である。Huffman符号化およびTunstall符号化は、データ圧縮などに用いられる符号化である。Tunstall Huffman符号化は、Tunstall符号化した結果をさらにHuffman符号化する符号化である。
【０１７９】
また、誤り抑制符号化処理に用いることができるその他の符号化としては、メモリセルに書き込まれるデータパターンがセル間干渉を抑制するデータパターンとなるように書込み対象のデータを符号化するセル間干渉抑制符号化（ICI（inter-cell interference）-mitigating coding）や、メモリセルへ書き込まれるデータパターンがメモリセルの損耗を低減させるデータパターンとなるように書込み対象のデータを符号化する耐久性符号化（endurance coding）や、メモリセルへ書き込むデータ（すなわち符号語）内の１と０との割合を変化させることが可能な非対称符号化（asymmetric coding）などを例示することができる。
【０１８０】
例えば、ＴＬＣにおいては、各メモリセルは、互いに閾値電圧が異なる８状態のいずれかにプログラムされるが、例えば、最も高い閾値電圧に対応する状態のような誤りが生じやすい状態にプログラムされるメモリセルの数を低減するための符号化処理が、誤り抑制符号化処理として使用されてもよい。
【０１８１】
データ書き込み処理においては、メモリコア制御部１２は、ＥＭＣエンコーダ１１７ａを使用して、書き込み先ブロックに書き込むべきデータを誤り抑制符号化処理によって符号化することができ、そして誤り抑制符号化処理によって符号化されたデータを書き込み先ブロックの書き込み先ページに書き込むプログラム動作を実行することができる。
【０１８２】
さらに、メモリコア制御部１２は、ＥＣＣエンコーダ１１６ａを使用して、誤り抑制符号化処理によって符号化されたデータにＥＣＣを付加する誤り訂正符号化処理をさらに実行してもよく、誤り訂正符号化処理によって得られたデータ（誤り抑制符号化処理によって得られた符号化データ＋ＥＣＣ）を書き込み先ブロックの書き込み先ページに書き込むプログラム動作を実行してもよい。
【０１８３】
データ読み出し処理においては、メモリコア制御部１２は、まず、ＥＣＣデコーダ１１６ｂを使用して、セルアレイ１０１から読み出されたデータに誤り訂正復号処理を実行する。そして、メモリコア制御部１２は、ＥＭＣデコーダ１１７ｂを使用して、誤りが訂正されたデータを元データに戻す誤り抑制復号処理を実行する。
【０１８４】
ところで、セルアレイ１０１に格納されたデータは、時間経過などにより、読み出したときに誤りが生じるようになる。
したがって、特に第３実施形態のように不揮発性メモリ１内でデータのコピーを行う場合などにおいては、セルアレイ１０１から読み出されたデータに対してＥＣＣデコーダ１１６ｂを使用して不揮発性メモリ１内部で誤り訂正復号処理を行って、読み出されたデータに含まれる誤りの数を減らし、誤り訂正された後のデータを書き込み先ブロック（コピー先ブロック）に書きこむことが有効である。
【０１８５】
また、不揮発性メモリ１のセルアレイ１０１に書き込まれたデータの誤りの傾向は、メモリコア１１の特性（セルアレイ１０１の特性）によって予めわかるため、そのような誤りが生じにくいようにデータを操作しておくことも効果がある。この「誤りが生じにくいようにデータを操作する」のが上述のＥＭＣ処理部１１７の責務である。
【０１８６】
例えば、図１６のコピー処理のシーケンスにおいて、Ｓ１６０１、Ｓ１６０４、またはＳ１６０９におけるコントローラ２から不揮発性メモリ１への処理要求時に、コントローラ２は、不揮発性メモリ１に対して、ＥＣＣ処理部１１６を使用した誤り訂正処理の適用または非適用、ＥＭＣ処理部１１７を使用した誤り抑制処理の適用または非適用を指示することにより、図１６のＳ１６０５またはＳ１６１０におけるデータ読み出し時に、誤り訂正復号処理または誤り抑制復号処理の少なくとも一方を不揮発性メモリ１内で行ったり、図１６のＳ１６０８またはＳ１６１３におけるプログラム時に、誤り訂正符号化処理または誤り抑制符号化処理の少なくとも一方を不揮発性メモリ１内で行うことが可能となる。
【０１８７】
また、図７Ａのデータ書き込み処理シーケンスにおいて、Ｓ７０１、Ｓ７０５、またはＳ７０９におけるコントローラ２から不揮発性メモリ１への処理要求時に、ＥＣＣ処理部１１６を使用した誤り訂正処理の適用または非適用、ＥＭＣ処理部１１７を使用した誤り抑制処理の適用または非適用を指示することにより、図７ＡのＳ７０８またはＳ７１２におけるプログラム時に、誤り訂正符号化処理または誤り抑制符号化処理の少なくとも一方を不揮発性メモリ１内で行うことが可能となる。
【０１８８】
具体的には、メモリコア制御部１２は、ＥＣＣデコーダ１１６ｂを有効にすべきことがコントローラ２によって指示された場合、コントローラ２からの処理要求（例えば、リード要求、またはコピー要求）に応じてセルアレイ１０１から読み出されたデータ（ユーザデータとＥＣＣとを含む符号化データ）に対する誤り訂正復号処理を、ＥＣＣデコーダ１１６ｂを使用して行う。
【０１８９】
また、メモリコア制御部１２は、ＥＣＣエンコーダ１１６ａを有効にすべきことがコントローラ２によって指示された場合、書き込み先ブロックに書き込むべきデータに誤り訂正符号を付加する誤り訂正符号化処理を、ＥＣＣエンコーダ１１６ａを使用して行う。そして、メモリコア制御部１２は、誤り訂正符号が付加されたデータ、つまりデータとＥＣＣとを含む符号化データ、を書き込み先ブロックの書き込み先ページに書き込むプログラム動作を行う。
【０１９０】
また、メモリコア制御部１２は、ＥＭＣデコーダ１１７ｂを有効にすべきことがコントローラ２によって指示された場合、コントローラ２からの処理要求（例えば、リード要求、またはコピー要求）に応じてセルアレイ１０１から読み出される、誤り抑制符号化処理によって符号化されたデータを元のデータに戻す誤り抑制復号処理を、ＥＭＣデコーダ１１７ｂを使用して行う。
【０１９１】
また、メモリコア制御部１２は、ＥＭＣエンコーダ１１７ａを有効にすべきことがコントローラ２によって指示された場合、ＥＭＣエンコーダ１１７ａを使用して、書き込み先ブロックに書き込むべきデータを誤り抑制符号化処理によって符号化する。そして、メモリコア制御部１２は、誤り抑制符号化処理によって得られたデータを書き込み先ブロックの書き込み先ページに書き込むプログラム動作を行う。
【０１９２】
さらに、メモリコア制御部１２は、ＥＣＣデコーダ１１６ｂおよびＥＭＣデコーダ１１７ｂの双方を有効にすべきことがコントローラ２によって指示された場合、コントローラ２からの処理要求（例えば、リード要求、またはコピー要求）に応じてセルアレイ１０１から読み出される、データとＥＣＣとを含む符号化データに対する誤り訂正復号処理を、ＥＣＣデコーダ１１６ｂを使用して行い、そして誤りが訂正されたデータを元データに戻す誤り抑制復号処理をＥＭＣデコーダ１１７ｂを使用して行う。
【０１９３】
またさらに、メモリコア制御部１２は、ＥＣＣエンコーダ１１６ａおよびＥＭＣエンコーダ１１７ａの双方を有効にすべきことがコントローラ２によって指示された場合、ＥＭＣエンコーダ１１７ａを使用して、書き込み先ブロックに書き込むべきデータを誤り抑制符号化処理によって符号化し、そして誤り抑制符号化処理によって符号化されたデータに誤り訂正符号を付加する誤り訂正符号化処理をＥＣＣエンコーダ１１６ａを使用して行う。そして、メモリコア制御部１２は、誤り訂正符号化処理によって得られたデータ（誤り抑制符号化処理によって得られた符号化データ＋ＥＣＣ）を書き込み先ブロックの書き込み先ページに書き込むプログラム動作を実行する。
【０１９４】
なお、例えば、データ書き込み処理において、コントローラ２が、コントローラ２内部のＥＣＣ部２０７を使用して生成した符号化データ（ユーザデータとＥＣＣとを含む符号化データ）をライトデータとして不揮発性メモリ１に送信するケースにおいては、コントローラ２は、不揮発性メモリ１内部の誤り訂正符号化処理がライトデータに非適用となるように、不揮発性メモリ１内のＥＣＣエンコーダ１１６ａを無効にするように不揮発性メモリ１に指示してもよい。そして、コピー処理または読み出し処理時に、コントローラ２は、不揮発性メモリ１内部の誤り訂正符号化処理がリードデータに適用されるように、不揮発性メモリ１内のＥＣＣエンコーダ１１６ａを有効にするように不揮発性メモリ１に指示してもよい。コピー処理においては、コントローラ２は、不揮発性メモリ１内のＥＣＣエンコーダ１１６ａおよびＥＣＣデコーダ１１６ｂの双方を有効にするように不揮発性メモリ１に指示してもよい。
【０１９５】
図１８は、ＥＣＣ処理部１１６およびＥＭＣ処理部１１７を利用したデータコピー処理のシーケンスを示す。
図１８のデータコピー処理は、図１６で説明したデータコピー処理に比し、図１６のＳ１６０４、Ｓ１６０５、Ｓ１６０８、Ｓ１６０９、Ｓ１６１０、Ｓ１６１３の処理の代わりに、Ｓ１６０４’、Ｓ１６０５’、Ｓ１６０８’、Ｓ１６０９’、Ｓ１６１０’、Ｓ１６１３’の処理が実行される点のみが異なっている。図１８のＳ１６０１〜Ｓ１６０３、Ｓ１６０６〜Ｓ１６０７、Ｓ１６１１〜Ｓ１６１２の処理は、図１６のＳ１６０１〜Ｓ１６０３、Ｓ１６０６〜Ｓ１６０７、Ｓ１６１１〜Ｓ１６１２で説明した処理と同じであるので、その説明を省略する。
【０１９６】
以下では、読み出し時にはＥＣＣデコーダ１１６ｂおよびＥＭＣデコーダ１１７ｂの双方を有効にし、書き込み時にはＥＣＣエンコーダ１１６ａおよびＥＭＣエンコーダ１１７ａの双方を有効にする場合を想定する。
Ｓ１６０４’：  コントローラ２は、書き込み先ブロック番号（ここではｃ）、書き込み先ページアドレス（ここでは０）、およびコピー元データの位置情報を指定するコピー要求（Copy (c, 0, a10, a13, a20, a21)）を不揮発性メモリ１に送信するとともに、不揮発性メモリ１に対して、ＥＣＣデコーダ１１６ｂおよびＥＭＣデコーダ１１７ｂの双方を有効にすべきことを指示する。
【０１９７】
Ｓ１６０５’：  メモリコア制御部１２は、コピー要求によって指定されたコピー元位置に格納されているデータ（ユーザデータとＥＣＣとを含む符号化データ）を読み出し、この読み出された符号化データに対する誤り訂正復号処理をＥＣＣデコーダ１１６ｂを使用して行い、そして誤りが訂正されたデータ（誤り抑制符号化処理によって符号化されたデータ）を元データに戻す誤り抑制復号処理を、ＥＭＣデコーダ１１７ｂを使用して行う。そして、メモリコア制御部１２は、誤り抑制復号処理によって得られた元データをバッファ１０４に格納する。なお、メモリコア制御部１２は、コピー元位置に格納されているデータ（ユーザデータとＥＣＣとを含む符号化データ）をバッファ１０４に読み出し、このバッファ１０４のデータに対して誤り訂正復号処理および誤り抑制復号処理を実行してもよい。
【０１９８】
Ｓ１６０８’：  メモリコア制御部１２は、ＥＭＣエンコーダ１１７ａを使用して、バッファ１０４内のデータ（誤り訂正復号処理、誤り抑制復号処理が実行されたデータ）を誤り抑制符号化処理によって符号化し、そして誤り抑制符号化処理によって符号化されたデータに誤り訂正符号を付加する誤り訂正符号化処理をＥＣＣエンコーダ１１６ａを使用して行う。そして、メモリコア制御部１２は、誤り訂正符号化処理によって得られたデータ（誤り抑制符号化処理によって得られた符号化データ＋ＥＣＣ）を書き込み先ブロックｃの書き込み先ページ０に書き込むプログラム動作を実行する。
【０１９９】
Ｓ１６０９’、Ｓ１６１０’、Ｓ１６１３’においても、Ｓ１６０４’、Ｓ１６０５’、Ｓ１６０８’と同様の処理が実行される。
図１９は、ＥＣＣ処理部１１６およびＥＭＣ処理部１１７を利用したデータ書き込み処理のシーケンスを示す。
図１９のデータ書き込み処理は、図７Ａで説明したデータ書き込み処理と比し、図７ＡのＳ７０５、Ｓ７０８、Ｓ７０９、Ｓ７１２の処理の代わりに、Ｓ７０５’、Ｓ７０８’、Ｓ７０９’、Ｓ７１２’の処理が実行される点のみが異なっている。図１９のＳ７０１〜Ｓ７０４、Ｓ７０６〜Ｓ７０７、Ｓ７１０〜Ｓ７１１の処理は、図７ＡのＳ７０１〜Ｓ７０４、Ｓ７０６〜Ｓ７０７、Ｓ７１０〜Ｓ７１１で説明した処理と同じであるので、その説明を省略する。
【０２００】
以下では、書き込み時にＥＣＣエンコーダ１１６ａおよびＥＭＣエンコーダ１１７ａの双方を有効にする場合を想定する。
Ｓ７０５’：  「次のページ」のページアドレス０を不揮発性メモリ１から受信したコントローラ２は、ページアドレス０を指定するプログラム要求（Write(0, 0)）と、ページアドレス０を有するページに書き込むべきデータ（ページ０のデータ）とを不揮発性メモリ１に送信するとともに、不揮発性メモリ１に対して、ＥＣＣエンコーダ１１６ａおよびＥＭＣエンコーダ１１７ａの双方を有効にすべきことを指示する。
【０２０１】
Ｓ７０８’：  不揮発性メモリ１のメモリコア制御部１２は、ＥＭＣエンコーダ１１７ａを使用して、ページ０のデータを誤り抑制符号化処理によって符号化し、そして誤り抑制符号化処理によって符号化されたデータに誤り訂正符号を付加する誤り訂正符号化処理をＥＣＣエンコーダ１１６ａを使用して行う。そして、メモリコア制御部１２は、誤り訂正符号化処理によって得られたデータ（誤り抑制符号化処理によって得られた符号化データ＋ＥＣＣ）を書き込み先ブロック０のページ０に書き込むプログラム動作を実行する。
【０２０２】
Ｓ７０９’：  「次のページ」のページアドレス３を不揮発性メモリ１から受信したコントローラ２は、ページアドレス３を指定するプログラム要求（Write(0, 3)）と、ページアドレス３を有するページに書き込むべきデータ（ページ３のデータ）とを不揮発性メモリ１に送信するとともに、不揮発性メモリ１に対して、ＥＣＣエンコーダ１１６ａおよびＥＭＣエンコーダ１１７ａの双方を有効にすべきことを指示する。
【０２０３】
Ｓ７１２’：  不揮発性メモリ１のメモリコア制御部１２は、ＥＭＣエンコーダ１１７ａを使用して、ページ３のデータを誤り抑制符号化処理によって符号化し、そして誤り抑制符号化処理によって符号化されたデータに誤り訂正符号を付加する誤り訂正符号化処理をＥＣＣエンコーダ１１６ａを使用して行う。そして、メモリコア制御部１２は、誤り訂正符号化処理によって得られたデータ（誤り抑制符号化処理によって得られた符号化データ＋ＥＣＣ）を書き込み先ブロック０のページ３に書き込むプログラム動作を実行する。
（第５実施形態）
次に、第５実施形態について説明する。
【０２０４】
第５実施形態の不揮発性メモリ１およびコントローラ２それぞれの構成は、第４実施形態の不揮発性メモリ１およびコントローラ２と実質的に同じである。しかし、第５実施形態の不揮発性メモリ１は、必ずしもＥＣＣ処理部１１６とＥＭＣ処理部１１７の双方を含んでいなくてもよく、ＥＣＣ処理部１１６を含み、ＥＭＣ処理部１１７を含まない構成を有していてもよい。
【０２０５】
第５実施形態では、不揮発性メモリ１は、コントローラ２から指定されたブロックに格納されているデータの誤りビット数を調べる処理を行う。
図２０は、コントローラ２と不揮発性メモリ１とによって実行される誤りビット数チェック処理の手順を示す。
【０２０６】
コントローラ２は、まず、不揮発性メモリ１に対してブロックアドレスを指定して、当該ブロックに格納されているデータの誤りビット数のチェックを不揮発性メモリ１に要求する（ステップＳ２００１）。
ステップＳ２００１では、例えば、コントローラ２は、全てのページにデータが書き込まれているブロックの内の一つのブロックのブロックアドレス（例えばブロックアドレス１）を指定するブロックチェック要求（Block check (1)）を不揮発性メモリ１に送信してもよい。Block check (1)は、コントローラ２に対して、特定のブロックに格納されているデータの誤りビット数をチェックすべきことを指示するための処理要求である。Block check (1)の(1)は、ブロックアドレス１を表している。
【０２０７】
不揮発性メモリ１がこのブロックチェック要求（Block check (1)）を受信した場合、不揮発性メモリ１のメモリコア制御部１２は、不揮発性メモリ１内のＥＣＣデコーダ１１６ｂを使用して、ブロックアドレス１を有するブロック１に格納されているデータに含まれる誤りビット数を調べる（ステップＳ２００２）。
【０２０８】
ステップＳ２００２では、メモリコア制御部１２は、ブロック１からデータを読み出し、ＥＣＣデコーダ１１６ｂを使用して、読み出されたデータに対して誤り訂正復号処理を行い、これによってこのデータに含まれる誤りビット数を調べる。ここで、このデータの誤りビット数は、このデータが訂正される前の誤りビットの数である。
【０２０９】
誤り訂正復号処理においては、誤り訂正不能になる可能性もある。ＥＣＣデコーダ１１６ｂによって訂正可能な最大誤りビット数はある上限値に固定されているからである。
ブロック内のどのページを読み出して誤りビット数をチェックするか、どのように読み出すか、誤り訂正処理の方式などは、不揮発性メモリ１が決めても良いし、予めコントローラ２から不揮発性メモリ１に設定しても構わない。例えば、各ブロック内の誤りが蓄積されやすいページ、または各ブロック内の誤りが蓄積されやすいワードラインが予め分かっている場合には、このページからデータを読み出してもよいし、またはこのワードラインに対応する幾つかのページそれぞれからデータを読み出してもよい。
【０２１０】
そして、メモリコア制御部１２は、誤り訂正復号処理の結果に基づき、誤りビット数が許容範囲内だったかどうかなどのチェック結果判定を行い（ステップＳ２００３）、誤りビット数に関するチェック結果をコントローラ２に返す（ステップＳ２００４）。
【０２１１】
ステップＳ２００４では、メモリコア制御部１２は、ブロック１に格納されているデータの誤り訂正の成功（ｐａｓｓ）または失敗（ｆａｉｌ）を示すチェック結果をコントローラ２に通知してもよい（Notify check result (pass/fail））。あるいは、メモリコア制御部１２は、ブロック１に格納されているデータの誤りビット数が閾値以上か否かを示すチェック結果をコントローラ２に通知してもよい。
【０２１２】
あるいは、ブロック０の幾つかのページそれぞれからデータを読み出した場合は、メモリコア制御部１２は、あるページから読み出された第１のデータに対して誤り訂正復号処理を行い、これによってこの第１のデータに含まれる誤りビット数を調べる。さらに、メモリコア制御部１２は、別のページから読み出された第２のデータに対して誤り訂正復号処理を行い、これによってこの第２のデータに含まれる誤りビット数を調べる。そして、メモリコア制御部１２は、チェックされたこれら誤りビット数のうち、最も多い誤りビット数を、チェック結果としてコントローラ２に通知する。
【０２１３】
このようにすることで、不揮発性メモリ１に格納されているデータの誤りビット数がどのようになっているかを不揮発性メモリ１内でチェックすることができ、不揮発性メモリ１とコントローラ２の間の通信回数を減らせるほか、通信データ量を削減できることで消費電力の削減を図ることができる。
【０２１４】
なお、コントローラ２は不揮発性メモリ１から通知されるチェック結果に基づいて、誤りビット数が比較的多いブロックを特定できるので、コントローラ２は、この特定されたブロック内のデータを別のブロックにコピーする要求を不揮発性メモリ１に送信してもよい。
（第６実施形態）
次に、第６実施形態について説明する。
【０２１５】
第６実施形態の不揮発性メモリ１およびコントローラ２それぞれの構成は、第４実施形態の不揮発性メモリ１およびコントローラ２と実質的に同じである。しかし、第６実施形態の不揮発性メモリ１は、必ずしもＥＣＣ処理部１１６とＥＭＣ処理部１１７の双方を含んでいなくてもよく、ＥＣＣ処理部１１６を含み、ＥＭＣ処理部１１７を含まない構成を有していてもよい。
【０２１６】
第６実施形態では、コントローラ２は、不揮発性メモリ１に対し、セルアレイ１０１からデータを読み出す時の最適読出し電圧レベル（最適読出しレベルとしても参照される）を設定するように要求する。つまり、コントローラ２は、セルアレイ１０１からデータ読み出しに使用する読み出し電圧レベルの調整を指示する処理要求を不揮発性メモリ１を送信する。
【０２１７】
不揮発性メモリ１がこの処理要求を受信した場合、不揮発性メモリ１のメモリコア制御部１２は、あるワードライン（読み出し対象ワード）に印加する読み出し電圧レベルを変更しながら、このワードラインに接続された複数のメモリセルからデータを読み出す動作と、読み出されたデータの誤りビット数を不揮発性メモリ１内のＥＣＣデコーダ１１６ｂを用いて調べる動作とを繰り返すことによって、誤りビット数が最小となる新たな読み出し電圧レベルを最適読出し電圧レベルとして決定する。
【０２１８】
最適読出し電圧レベルの調整はブロック毎に行ってもよい。この場合、コントローラ２は、不揮発性メモリ１に対して、最適読出し電圧レベルを調整すべきブロックのブロックアドレスを指定してもよい。これにより、ブロック毎の最適読出し電圧レベルを不揮発性メモリ１内で決定することが可能となる。
【０２１９】
以下、図２１〜図２２を参照して、セルアレイ１０１からデータ読み出しに使用する読み出し電圧レベルを調整する処理について説明する。
以下では、ＴＬＣを例示して読み出し電圧レベル調整処理を説明するが、本実施形態の読み出し電圧レベル調整処理はＳＬＣに適用されてもよいし、ＭＬＣに適用されてもよいし、ＱＬＣに適用されてもよい。
【０２２０】
図２１は、プログラムされた直後のメモリセルの閾値電圧分布と７つの読み出し電圧レベルとの関係を示す。
ＴＬＣにおいては、３ビットのデータが書き込まれた各メモリセルは、８つの状態（一つの状態、および７つのプログラム状態）のいずれかに設定される。これら８つの状態は、“Ｅｒ”状態、“Ａ”状態、“Ｂ”状態、“Ｃ”状態、“Ｄ”状態、“Ｅ”状態、“Ｆ”状態、“Ｇ”状態として参照される。これら“Ｅｒ”、“Ａ”、“Ｂ”、“Ｃ”、“Ｄ”、“Ｅ”、“Ｆ”、“Ｇ”状態は、互いに異なる閾値電圧レベルを有している。閾値電圧レベルは、“Ｅｒ”、“Ａ”、“Ｂ”、“Ｃ”、“Ｄ”、“Ｅ”、“Ｆ”、“Ｇ”状態の順で高くなる。
【０２２１】
セルアレイ１０１からデータを読み出すための読出し電圧レベルは、例えば、隣接する２つの閾値電圧分布の交差部に設定される。
すなわち、データ読み出し処理においては、“Ｅｒ”、“Ａ”、“Ｂ”、“Ｃ”、“Ｄ”、“Ｅ”、“Ｆ”、“Ｇ”状態を互いに分離するための７つの閾値電圧Ｖｔｈ０、Ｖｔｈ１、Ｖｔｈ２、Ｖｔｈ３、Ｖｔｈ４、Ｖｔｈ５、Ｖｔｈ６のいずれかが読み出し電圧レベルとして使用される。読み出し電圧レベルは、リード対象のメモリセルの集合が接続されているワードライン（読み出し対象ワードライン）に印加される電圧である。
【０２２２】
Ｖｔｈ０は“Ｅｒ”状態に対応する閾値電圧分布と“Ａ”状態に対応する閾値電圧分布との交点に対応する電圧である。Ｖｔｈ１は“Ａ”状態に対応する閾値電圧分布と“Ｂ”状態に対応する閾値電圧分布との交差部に対応する電圧に設定される。Ｖｔｈ２は“Ｂ”状態に対応する閾値電圧分布と“Ｃ”状態に対応する閾値電圧分布との交差部に対応する電圧に設定される。Ｖｔｈ３は“Ｃ”状態に対応する閾値電圧分布と“Ｄ”状態に対応する閾値電圧分布との交差部に対応する電圧に設定される。Ｖｔｈ４は“Ｄ”状態に対応する閾値電圧分布と“Ｅ”状態に対応する閾値電圧分布との交差部に対応する電圧に設定される。Ｖｔｈ５は“Ｅ”状態に対応する閾値電圧分布と“Ｆ”状態に対応する閾値電圧分布の交差部に対応する電圧に設定される。Ｖｔｈ６は“Ｆ”状態に対応する閾値電圧分布と“Ｇ”状態に対応する閾値電圧分布の交差部に対応する電圧に設定される。
【０２２３】
図２２は、各メモリセルがプログラムされてからある時間が経過した時の各メモリセルの閾値電圧分布を示す。
図２２においては、プログラム直後の閾値電圧分布は一点鎖線で示されており、現在の閾値電圧分布は実線で示されている。プログラムから時間が経過した時の各メモリセルの閾値電圧分布は、プログラム直後の閾値電圧分布よりも低い電圧にシフトされる。したがって、プログラム直後の閾値電圧Ｖｔｈ０、Ｖｔｈ１、Ｖｔｈ２、Ｖｔｈ３、Ｖｔｈ４、Ｖｔｈ５、Ｖｔｈ６は読み出し電圧レベルとして最適ではなくなっている。
【０２２４】
なお、プログラム／イレーズサイクル数が増えたブロックにおいては、ブログラム直後においても、各メモリセルの閾値分圧分布は図２２の実線で示すような低い値に設定される場合がある。
図２３は、図２２のシフトされた閾値分圧分布に対応する最適読み出し電圧レベルの例を示している。
【０２２５】
本実施形態では、シフトされた閾値分圧分布に対して適切な読み出し電圧レベルが不揮発性メモリ１内部で決定される。ここでは、閾値電圧Ｖｔｈ０’、Ｖｔｈ１’、Ｖｔｈ２’、Ｖｔｈ３’、Ｖｔｈ４’、Ｖｔｈ５’、Ｖｔｈ６’は最適読み出し電圧レベルを表している。
【０２２６】
あるブロックに対する閾値電圧Ｖｔｈ０’、Ｖｔｈ１’、Ｖｔｈ２’、Ｖｔｈ３’、Ｖｔｈ４’、Ｖｔｈ５’、Ｖｔｈ６’は、例えば、このブロックのプログラム／イレーズサイクル数に基づいて決定されてもよいし、このブロックがプログラムされてからの経過時間に基づいて決定されてもよい。
【０２２７】
あるいは、例えば、予め決められた幾つかの閾値電圧候補の中から、最適な閾値電圧を最適読み出し電圧レベルとして選択してもよい。
この場合、プログラム／イレーズサイクル数（またはプログラムされてからの経過時間）に対応する幾つかの閾値電圧セット（ＴＬＣの場合、各閾値電圧セットは６個の閾値電圧候補を含む）から、最適な閾値電圧セットを選択してもよい。
【０２２８】
図２４は、最適読み出しレベルを決定する処理を示す。
ステップＳ３４０１において、コントローラ２は、最適読出し電圧レベルを設定するための処理要求を不揮発性メモリ１に送信する（Set optimal read level (1)）。Set optimal read level (1)の(1)は、最適読出し電圧レベルが設定されるべきブロックのブロックアドレスを表す。
【０２２９】
この処理要求を受信した不揮発性メモリ１のメモリコア制御部１２は、ブロックアドレス１を有するブロック１に属するワードラインの中の読み出し対象ワードラインに印加する読み出し電圧レベルを変更しながら、この読み出し対象ワードラインに接続された複数のメモリセルからデータを読み出す動作と、読み出されたデータの誤りビット数を不揮発性メモリ１のＥＣＣデコーダ１１６ｂを用いて調べる動作とを繰り返す（ステップＳ２４０２）。これにより、メモリコア制御部１２は、誤りビット数が最小となる新たな読み出し電圧レベルをブロック１からデータを読み出すための最適読み出し電圧レベルとして決定する。
【０２３０】
そして、メモリコア制御部１２は、決定された最適読み出し電圧レベルを不揮発性メモリ１内のレジスタまたはセルアレイ１０１に記録し（ステップＳ２４０３）、最適化処理が完了したことをコントローラ２に通知する（ステップＳ２４０４）。
このようにすることで、コントローラ２は不揮発性メモリ１がどのように構成されているかを知ることなく、不揮発性メモリ１のデータ保持能力が最大になるように読み出し電圧レベルを調整することができる。
（第７実施形態）
第７実施形態では、不揮発性メモリ１は複数のメモリコア１１を備えており、不揮発性メモリ１は、これら複数のメモリコア１１を独立して動作させることができる。
【０２３１】
図２５は、第７実施形態の不揮発性メモリ１の構成を示す。
図２５に示されているように、第７実施形態の不揮発性メモリ１は、互いに独立した動作可能なメモリコア１１ａ、１１ｂ、１１ｃを含む。これらメモリコア１１ａ、１１ｂ、１１ｃの各々は、図３Ａで説明したメモリコア１１と同じ構造を有しており、複数のブロックを含むセルアレイを含む。
【０２３２】
さらに、この不揮発性メモリ１は、メモリコア制御部１２ａ、１２ｂ、１２ｃを含む。メモリコア制御部１２ａ、１２ｂ、１２ｃは、メモリコア１１ａ、１１ｂ、１１ｃにそれぞれ接続されている。
メモリコア制御部１２ａは、メモリコア１１ａ内のセルアレイへのデータの書き込みおよびメモリコア１１ａ内のセルアレイからのデータの読み出しを制御するように構成されたメモリコア制御回路として動作する。
【０２３３】
メモリコア制御部１２ａとメモリコア１１ａとのペアは、図３Ａで説明したメモリコア１１とメモリコア制御部１２とのペアと同じ動作を実行することができる。つまり、メモリコア制御部１２ａは、第１実施形態〜第６実施形態で説明したメモリコア制御部１２と同様の構成および能力を有している。メモリコア制御部１２ａとメモリコア１１ａとのペアは、１つのチップ（ダイ）によって実現されてもよい。
【０２３４】
メモリコア制御部１２ｂは、メモリコア１１ｂ内のセルアレイへのデータの書き込みおよびメモリコア１１ｂ内のセルアレイからのデータの読み出しを制御するように構成されたメモリコア制御回路として動作する。
メモリコア制御部１２ｂとメモリコア１１ｂとのペアも、図３Ａで説明したメモリコア１１とメモリコア制御部１２とのペアと同じ動作を実行することができる。つまり、メモリコア制御部１２ｂは、第１実施形態〜第６実施形態で説明したメモリコア制御部１２と同様の構成および能力を有している。メモリコア制御部１２ｂとメモリコア１１ｂとのペアも、１つのチップ（ダイ）によって実現されてもよい。
【０２３５】
メモリコア制御部１２ｃは、メモリコア１１ｃ内のセルアレイへのデータの書き込みおよびメモリコア１１ｃ内のセルアレイからのデータの読み出しを制御するように構成されたメモリコア制御回路として動作する。
メモリコア制御部１２ｃとメモリコア１１ｃとのペアも、図３Ａで説明したメモリコア１１とメモリコア制御部１２とのペアと同じ動作を実行することができる。つまり、メモリコア制御部１２ｃは、第１実施形態〜第６実施形態で説明したメモリコア制御部１２と同様の構成および能力を有している。メモリコア制御部１２ｂとメモリコア１１ｂとのペアも、１つのチップ（ダイ）によって実現されてもよい。
【０２３６】
メモリコア制御部１２ａ、１２ｂ、１２ｃは、不揮発性メモリ１内に含まれる入出力部１３を介してコントローラ２との通信を実行する。メモリ・コントローラ通信線は、３つのチップイネーブル信号ＣＥ０ｎ−ＣＥ２ｎ、ライトイネーブル信号ＷＥｎ、リードイネーブル信号ＲＥｎ、コマンドラッチイネーブル信号ＣＬＥ、アドレスラッチイネーブル信号ＡＬＥ、ライトプロテクト信号ＷＰｎ、ライトイネーブル信号ＷＥｎ、Ｉ／Ｏ信号＜７：０＞、３つのレディー／ビジー信号ＲＢ０ｎ−ＲＢ２ｎを含んでいてもよい。
【０２３７】
第７実施形態の不揮発性メモリ１においては、メモリコア制御部１２ａとメモリコア１１ａとのペアと、メモリコア制御部１２ｂとメモリコア１１ｂとのペアと、メモリコア制御部１２ｃとメモリコア１１ｃとのペアは、互いに独立して動作することができる。したがって、これらペアは、第１実施形態〜第６実施形態で説明した動作を並列に実行することができ、これによってメモリシステムの書き込みおよび読み出し性能等を十分に高めることができる。
【０２３８】
なお、第１実施形態〜第７実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本各実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２３９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２４０】
１…不揮発性メモリ、２…コントローラ、３…ホストインターフェース、４…メモリ・コントローラインターフェース、５…電源線、２０１…ホストインターフェース制御部、２０２…コマンド制御部、２０３…バッファ制御部、２０４…データ割り付け管理部、２０５…メモリ制御部、２０６…バッファメモリ、２０７…ＥＣＣ（誤り訂正符号）処理部、２０８…メモリインターフェース制御部、１０１…セルアレイ、１０２…ロウデコーダ、１０３…カラムデコーダ・キャッシュ・センスアンプ、１０４…バッファ、１０５…メモリコア用電源制御部、１０６…メモリコア操作部、１０７…コマンドデコーダ、１０８…コマンドキュー、１０９…コマンド実行制御部、１１０…データ処理部、１１１…バッファ制御部、１１２…入力バッファ、１１３…出力バッファ、１１４…入力バッファ、１１５…出力バッファ、１１…メモリコア、１２…メモリコア制御部、１３…入出力部。
【図１】
2020135904.tif 000003
【図２】
2020135904.tif 000004
【図３Ａ】
2020135904.tif 000005
【図３Ｂ】
2020135904.tif 000006
【図３Ｃ】
2020135904.tif 000007
【図４】
2020135904.tif 000008
【図５】
2020135904.tif 000009
【図６】
2020135904.tif 000010
【図７Ａ】
2020135904.tif 000011
【図７Ｂ】
2020135904.tif 000012
【図８】
2020135904.tif 000013
【図９】
2020135904.tif 000014
【図１０】
2020135904.tif 000015
【図１１】
2020135904.tif 000016
【図１２】
2020135904.tif 000017
【図１３】
2020135904.tif 000018
【図１４】
2020135904.tif 000019
【図１５】
2020135904.tif 000020
【図１６】
2020135904.tif 000021
【図１７】
2020135904.tif 000022
【図１８】
2020135904.tif 000023
【図１９】
2020135904.tif 000024
【図２０】
2020135904.tif 000025
【図２１】
2020135904.tif 000026
【図２２】
2020135904.tif 000027
【図２３】
2020135904.tif 000028
【図２４】
2020135904.tif 000029
【図２５】
2020135904.tif 000030