(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-01-19
(45)【発行日】2023-01-27
(54)【発明の名称】不揮発性半導体記憶装置
(51)【国際特許分類】
G11C 11/56 20060101AFI20230120BHJP
G11C 16/04 20060101ALI20230120BHJP
G06F 12/00 20060101ALI20230120BHJP
【FI】
G11C11/56 210
G11C16/04 170
G06F12/00 597U
(21)【出願番号】P 2019024588
(22)【出願日】2019-02-14
【審査請求日】2021-09-14
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】吉井 謙一郎
(72)【発明者】
【氏名】菅野 伸一
【審査官】堀田 和義
(56)【参考文献】
【文献】特開2018-45754(JP,A)
【文献】特開2013-50938(JP,A)
【文献】特開2013-69059(JP,A)
【文献】特開2013-77278(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G11C 11/56
G11C 16/04
G06F 12/00
(57)【特許請求の範囲】
【請求項1】
コントローラに接続可能な不揮発性半導体記憶装置であって、
各々が複数のページを含み且つ各々がデータの消去単位である複数のブロックを含むセルアレイと、
前記複数のブロックのうち前記コントローラによって選択される書き込み先ブロックに含まれる複数のページに対するプログラム動作を、所定のプログラム順序で実行するように構成された制御回路とを具備し、
前記書き込み先ブロックは、前記書き込み先ブロックに属する複数のワードラインの各々に接続された複数のメモリセルを含み、
前記複数のワードラインの各々に接続された前記複数のメモリセルには、前記書き込み先ブロックに含まれる前記複数のページのうちの一つ以上のページが割り当てられており、
前記制御回路は、
前記書き込み先ブロックに対する次のプログラム動作
が実行されるべきページを示すページアドレスを、前記書き込み先ブロックに対する前記次のプログラム動作に対応するページアドレスとして、前記コントローラに通知し
、
前記通知したページアドレスが指定された、前記コントローラから受信されるプログラム要求に基づき、前記通知したページアドレスを有する前記ページに対するプログラム動作を実行するように構成されている、不揮発性半導体記憶装置。
【請求項2】
前記制御回路は、前記複数のブロックのうちの一つのブロックを前記書き込み先ブロックとして選択するための第1の処理要求を前記コントローラから受信した場合、前記書き込み先ブロックに含まれる前記複数のページのうち、最初の
プログラム順序番号に対応するページを示すページアドレスを、前記書き込み先ブロックに対する前記次のプログラム動作に対応する前記ページアドレスとして、前記コントローラに通知するように構成されている請求項1記載の不揮発性半導体記憶装置。
【請求項3】
コントローラに接続可能な不揮発性半導体記憶装置であって、
複数のブロックを含むセルアレイと、
前記複数のブロックのうち前記コントローラによって選択される書き込み先ブロックに含まれる複数のページに対するプログラム動作を、所定のプログラム順序で実行するように構成された制御回路とを具備し、
前記制御回路は、
前記書き込み先ブロックに対する次のプログラム動作に対応するページアドレスを前記コントローラに通知し、
前記複数のブロックのうちの一つのブロックを前記書き込み先ブロックとして選択するための第1の処理要求を前記コントローラから受信した場合、前記書き込み先ブロックに含まれる前記複数のページのうち、最初のプログラム順序番号に対応するページを示すページアドレスを、前記書き込み先ブロックに対する前記次のプログラム動作に対応する前記ページアドレスとして、前記コントローラに通知し、
前記最初の
プログラム順序番号に対応する前記ページの前記ページアドレスを指定するプログラム要求と前記最初の
プログラム順序番号に対応する前記ページに書き込むべきデータとを前記コントローラから受信した場合、前記書き込み先ブロックに含まれる前記複数のページのうち、次の
プログラム順序番号に対応するページを示すページアドレスを、前記書き込み先ブロックに対する前記次のプログラム動作に対応する前記ページアドレスとして、前記コントローラに通知するように構成されてい
る、不揮発性半導体記憶装置。
【請求項4】
コントローラに接続可能な不揮発性半導体記憶装置であって、
複数のブロックを含むセルアレイと、
前記コントローラから転送されるデータを保持するバッファ
と、
前記複数のブロックのうち前記コントローラによって選択される書き込み先ブロックに含まれる複数のページに対するプログラム動作を、所定のプログラム順序で実行するように構成された制御回路とを具備し、
前記制御回路は、前記書き込み先ブロックに対する次のプログラム動作に対応するページアドレスを前記コントローラに通知するように構成されており、
前記書き込み先ブロックに属する複数のワードラインの各々は複数ページを含み、
前記制御回路は、前記書き込み先ブロック内の各ワードラインに対して、複数回のプログラム動作を実行するように構成されており、
前記プログラム順序は、隣接するワードラインそれぞれに対するプログラム動作が互いに交互に実行されるように決められており、
前記コントローラから受信されるプログラム要求によって指定されるページアドレスに対するプログラム動作が前記書き込み先ブロック内の第1のワードラインに対する2回目以降のプログラム動作である場合、前記制御回路は、前記第1のワードラインに対する以前のプログラム動作で使用したデータを前記バッファから読み出し、前記読み出したデータと、前記コントローラから転送される、前記指定されるページアドレスに書き込むべきデータとを使用して、前記第1のワードラインに対するプログラム動作を実行するように構成されてい
る、不揮発性半導体記憶装置。
【請求項5】
コントローラに接続可能な不揮発性半導体記憶装置であって、
複数のブロックを含むセルアレイと、
前記複数のブロックのうち前記コントローラによって選択される書き込み先ブロックに含まれる複数のページに対するプログラム動作を、所定のプログラム順序で実行するように構成された制御回路とを具備し、
前記制御回路は、
前記書き込み先ブロックに対する次のプログラム動作に対応するページアドレスを前記コントローラに通知し、
前記通知したページアドレスを指定するプログラム要求と前記指定されたページアドレスを有するページに対応するデータとを前記コントローラから受信した後、前記ページに対応する前記データが前記書き込み先ブロックのどのページに対するプログラム動作においても必要でなくなった場合に、前記ページに対応するデータが不要であることを前記コントローラに通知するように構成されてい
る、不揮発性半導体記憶装置。
【請求項6】
コントローラに接続可能な不揮発性半導体記憶装置であって、
複数のブロックを含むセルアレイと、
前記コントローラから転送されるデータを保持するバッファ
と、
前記複数のブロックのうち前記コントローラによって選択される書き込み先ブロックに含まれる複数のページに対するプログラム動作を、所定のプログラム順序で実行するように構成された制御回路とを具備し、
前記制御回路は、
前記書き込み先ブロックに対する次のプログラム動作に対応するページアドレスを前記コントローラに通知し、
前記通知したページアドレスとは異なる別のページアドレスを指定するプログラム要求と前記別のページアドレスに対応するデータとを前記コントローラから受信した場合、前記別のページアドレスを有するページに対するプログラム動作を実行せずに、前記受信したデータを前記バッファに格納するように構成されてい
る、不揮発性半導体記憶装置。
【請求項7】
前記制御回路は、
前記通知したページアドレスを指定するプログラム要求と前記通知したページアドレスを有する前記ページに対応するデータとを前記コントローラから受信した場合、前記通知したページアドレスを有する前記ページに対する
プログラム動作を実行し、
前記通知したページアドレスを有する前記ページに対する
プログラム動作を実行した後、次の
プログラム動作が実行されるべき前記書き込み先ブロック内の次のページに対応するデータが前記バッファに存在する場合、前記次のページに対するプログラム動作を実行するように構成されている請求項6記載の不揮発性半導体記憶装置。
【請求項8】
前記制御回路は、前記書き込み先ブロックのどのページに対するプログラム動作においても必要なくなったデータが格納されている前記バッファ内の領域を解放するように構成されている請求項7記載の不揮発性半導体記憶装置。
【請求項9】
コントローラに接続可能な不揮発性半導体記憶装置であって、
複数のブロックを含むセルアレイと、
前記複数のブロックのうち前記コントローラによって選択される書き込み先ブロックに含まれる複数のページに対するプログラム動作を、所定のプログラム順序で実行するように構成された制御回路とを具備し、
前記制御回路は、
前記書き込み先ブロックに対する次のプログラム動作に対応するページアドレスを前記コントローラに通知し、
前記通知したページアドレスをコピー先位置として指定し且つコピー元位置を指定するコピー要求を前記コントローラから受信した場合、前記コピー元位置に格納されているデータを前記セルアレイから前記不揮発性半導体記憶装置内に存在するバッファに読み出し、前記バッファから前記コピー先位置に前記データを書き込むプログラム動作を実行するように構成されてい
る、不揮発性半導体記憶装置。
【請求項10】
誤り訂正符号デコーダをさらに具備し、
前記制御回路は、前記誤り訂正符号デコーダを有効にすべきことが前記コントローラによって指示された場合、前記コントローラからの処理要求に応じて前記セルアレイから読み出される、データと誤り訂正符号とを含
む符号化データに対する誤り訂正復号処理を、前記誤り訂正符号デコーダを使用して行うように構成されている請求項
3記載の不揮発性半導体記憶装置。
【請求項11】
誤り訂正符号デコーダをさらに具備し、
前記制御回路は、前記誤り訂正符号デコーダを有効にすべきことが前記コントローラによって指示された場合、前記コントローラからの前記コピー要求に応じて前記セルアレイの前記コピー元位置から読み出される、データと誤り訂正符号とを含
む符号化データに対する誤り訂正復号処理を、前記誤り訂正符号デコーダを使用して行うように構成されている請求項9記載の不揮発性半導体記憶装置。
【請求項12】
誤り訂正符号エンコーダをさらに具備し、
前記制御回路は、前記誤り訂正符号エンコーダを有効にすべきことが前記コントローラによって指示された場合、前記書き込み先ブロックに書き込むべきデータに誤り訂正符号を付加する誤り訂正符号化処理を、前記誤り訂正符号エンコーダを使用して行うように構成されている請求項
3記載の不揮発性半導体記憶装置。
【請求項13】
誤り訂正符号エンコーダをさらに具備し、
前記制御回路は、前記誤り訂正符号エンコーダを有効にすべきことが前記コントローラによって指示された場合、前記
誤り訂正復号処理によって誤りが訂正されたデータ
に誤り訂正符号を付加する誤り訂正符号化処理を前記誤り訂正符号エンコーダを使用して行ってから、前記誤りが訂正されたデータと前記誤り訂正符号とを含む符号化データを前記コピー先位置に書き込むプログラム動作を実行するように構成されている請求項11記載の不揮発性半導体記憶装置。
【請求項14】
元データのデータパターンを
誤りが生じるのを抑制するデータパターンに変換する誤り抑制符号化処理によって符号化されたデータを復号して元データに戻す誤り抑制符号デコーダをさらに具備し、
前記制御回路は、前記誤り抑制符号デコーダを有効にすべきことが前記コントローラによって指示された場合、前記コントローラからの処理要求に応じて前記セルアレイから読み出される、誤り抑制符号化処理によって符号化されたデータを元のデータに戻す誤り抑制復号処理を、前記誤り抑制符号デコーダを使用して行うように構成されている請求項
3記載の不揮発性半導体記憶装置。
【請求項15】
元データのデータパターンを
誤りが生じるのを抑制するデータパターンに変換する誤り抑制符号化処理を行う誤り抑制符号エンコーダをさらに具備し、
前記制御回路は、前記誤り
抑制符号エンコーダを有効にすべきことが前記コントローラによって指示された場合、前記誤り抑制符号エンコーダを使用して、前記書き込み先ブロックに書き込むべきデータを前記誤り抑制符号化処理によって符号化するように構成されている請求項
3記載の不揮発性半導体記憶装置。
【請求項16】
誤り訂正符号デコーダと、
元データのデータパターンを
誤りが生じるのを抑制するデータパターンに変換する誤り抑制符号化処理によって符号化されたデータを復号して元データに戻す誤り抑制符号デコーダとをさらに具備し、
前記制御回路は、前記誤り訂正符号デコーダおよび前記誤り抑制符号デコーダを有効にすべきことが前記コントローラによって指示された場合、前記コントローラからの処理要求に応じて前記セルアレイから読み出される、データと誤り訂正符号とを含む符号化データに対する誤り訂正復号処理を前記誤り訂正符号デコーダを使用して行い、そして誤りが訂正されたデータを元データに戻す誤り抑制復号処理を前記誤り抑制符号デコーダを使用して行うように構成されている請求項
3記載の不揮発性半導体記憶装置。
【請求項17】
誤り訂正符号エンコーダと、
元データのデータパターンを誤りが生じるのを抑制するデータパターンに変換する誤り抑制符号化処理を行う誤り抑制符号エンコーダとをさらに具備し、
前記制御回路は、前記誤り訂正符号エンコーダおよび前記誤り抑制符号エンコーダを有効にすべきことが前記コントローラによって指示された場合、前記誤り抑制符号エンコーダを使用して、前記書き込み先ブロックに書き込むべきデータを前記誤り抑制符号化処理によって符号化し、そして前記誤り抑制符号化処理によって符号化されたデータに誤り訂正符号を付加する誤り訂正符号化処理を前記誤り訂正符号エンコーダを使用して行うように構成されている請求項
3記載の不揮発性半導体記憶装置。
【請求項18】
誤り訂正符号デコーダをさらに具備し、
前記制御回路は、前記複数のブロック内の第1のブロックに格納されているデータの誤りビット数のチェックを指示する処理要求を前記コントローラから受信した場合、誤り訂正符号デコーダを使用して、前記第1のブロックに格納されているデータに含まれる誤りビット数を調べ、前記誤りビット数に関するチェック結果を前記コントローラに返すように構成されている請求項
3記載の不揮発性半導体記憶装置。
【請求項19】
前記チェック結果は、調べた誤りビット数が閾値以上か否かを示す請求項18記載の不揮発性半導体記憶装置。
【請求項20】
前記チェック結果は、前記第1のブロックに格納されているデータの誤り訂正の成功または失敗を示す請求項18記載の不揮発性半導体記憶装置。
【請求項21】
前記制御回路は、少なくとも、前記第1のブロックに格納されている第1のデータに含まれる誤りビット数と前記第1のブロックに格納されている第2のデータに含まれる誤りビット数とを調べ、最も多い誤りビット数を前記チェック結果として前記コントローラに返すように構成されている請求項18記載の不揮発性半導体記憶装置。
【請求項22】
誤り訂正符号デコーダをさらに具備し、
前記制御回路は、セルアレイからのデータ読み出しに使用する読み出し電圧レベルの調整を指示する処理要求を前記コントローラから受信した場合、読み出し対象ワードラインに印加する読み出し電圧レベルを変更しながら、前記読み出し対象ワードラインに接続された複数のメモリセルからデータを読み出す動作と、読み出されたデータの誤りビット数を前記誤り訂正符号デコーダを用いて調べる動作とを繰り返すことによって、誤りビット数が最小となる新たな読み出し電圧レベルを決定するように構成されている請求項
3記載の不揮発性半導体記憶装置。
【請求項23】
前記読み出し電圧レベルの調整を指示する前記処理要求が前記複数のブロックのうちの第1のブロックのブロックアドレスを指定する場合、前記制御回路は、前記第1のブロックに属するワードラインの中の読み出し対象ワードラインに印加する読み出し電圧レベルを変更しながら、前記読み出し対象ワードラインに接続された複数のメモリセルからデータを読み出す動作と、読み出されたデータの誤りビット数を前記誤り訂正符号デコーダを用いて調べる動作とを繰り返すことによって、誤りビット数が最小となる新たな読み出し電圧レベルを前記第1のブロックからデータを読み出すための読み出し電圧レベルとして決定するように構成されている請求項22記載の不揮発性半導体記憶装置。
【請求項24】
前記不揮発性半導体記憶装置は、互いに独立して動作する複数のメモリコアと、前記複数のメモリコアをそれぞれ制御する複数のメモリコア制御回路とを含み、
前記複数のメモリコアの各々が前記セルアレイとして動作し、
前記複数のメモリコア制御回路の各々が前記制御回路として動作するように構成されている請求項
3記載の不揮発性半導体記憶装置。
【請求項25】
第1半導体素子に接続可能な不揮発性半導体記憶装置であって、
複数のメモリセルを含むブロックを複数含み、
前記複数のブロックから選択される一のブロックを示し前記第1半導体素子から受信した第1アドレス信号に対して、前記第1アドレス信号に基づいて選択される第2アドレス信号を前記第1半導体素子に送信し、
前記第1アドレス信号及び前記第2アドレス信号及び第1データが指定された、前記第1半導体素子より受信されるコマンドに対して、前記第1アドレス信号及び前記第2アドレス信号に基づいた第1アドレスに対応する前記メモリセルに前記第1データをプログラムするように構成される、不揮発性半導体記憶装置。
【請求項26】
前記第1半導体素子は、ホスト装置に接続可能であって、前記第1半導体素子は、前記ホスト装置から第2アドレスと第2データとが指定された書き込み要求を受信した場合に、前記第2アドレスに基づいて前記第1アドレス信号及び前記第2アドレス信号を生成し、前記第2データに基づいて前記第1データを生成する請求項25記載の不揮発性半導体記憶装置。
【請求項27】
前記第1半導体素子は、前記第2アドレスを前記第1アドレス信号及び前記第2アドレス信号に対応する物理アドレスに関連付ける請求項26記載の不揮発性半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、NAND型フラッシュメモリのような不揮発性半導体記憶装置に関する。
【背景技術】
【0002】
近年、様々な不揮発性半導体記憶装置が使用されている。不揮発性半導体記憶装置の典型例として、NAND型フラッシュメモリが知られている。
NAND型フラッシュメモリとこのメモリを制御するコントローラとの間のインタフェース仕様としては、例えば、Open NAND Flash Interface (ONFi)が広く使用されている。NAND型フラッシュメモリとコントローラとの間の通信は、一般に、以下のような形式で実行される。
【0003】
例えば、データ書き込み動作(プログラム動作)では、コントローラは、アクセスすべきページを決定し、そしてプログラム要求(プログラムコマンド)、アドレス、データをNAND型フラッシュメモリに転送する。NAND型フラッシュメモリは、コントローラから受信されたデータを、コントローラから受信されたアドレスによって指定されたページに書き込み、そして処理結果をコントローラに返す。
【先行技術文献】
【特許文献】
【0004】
【文献】米国特許出願公開第2017/0262175号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明が解決しようとする課題は、コントローラ側の処理負担を軽減可能な不揮発性半導体記憶装置を提供することである。
【課題を解決するための手段】
【0006】
実施形態によれば、コントローラに接続可能な不揮発性半導体記憶装置は、各々が複数のページを含み且つ各々がデータの消去単位である複数のブロックを含むセルアレイと、前記複数のブロックのうち前記コントローラによって選択される書き込み先ブロックに含まれる複数のページに対するプログラム動作を、所定のプログラム順序で実行するように構成された制御回路とを具備する。前記書き込み先ブロックは、前記書き込み先ブロックに属する複数のワードラインの各々に接続された複数のメモリセルを含む。前記複数のワードラインの各々に接続された前記複数のメモリセルには、前記書き込み先ブロックに含まれる前記複数のページのうちの一つ以上のページが割り当てられている。前記制御回路は、前記書き込み先ブロックに対する次のプログラム動作が実行されるべきページを示すページアドレスを、前記書き込み先ブロックに対する前記次のプログラム動作に対応するページアドレスとして、前記コントローラに通知し、前記通知したページアドレスが指定された、前記コントローラから受信されるプログラム要求に基づき、前記通知したページアドレスを有する前記ページに対するプログラム動作を実行するように構成されている。
【図面の簡単な説明】
【0007】
【
図1】不揮発性半導体記憶装置(不揮発性メモリ)とこの不揮発性半導体記憶装置を制御するコントローラとを含むメモリシステムの構成例を示すブロック図。
【
図2】
図1のメモリシステム内のコントローラの構成例を示すブロック図。
【
図3A】不揮発性メモリの構成例を示すブロック図。
【
図3B】不揮発性メモリ内に含まれるセルアレイの構成例を示すブロック図。
【
図3C】セルアレイ内に含まれる各ブロックの構成例を示す回路図。
【
図4】各メモリセルに3ビットのデータを格納するフラッシュメモリ(TLC)に適用されるプログラム順序規則を規定するプログラム順テーブルの例を示す図。
【
図5】不揮発性メモリ内のバッファ制御部によって維持および管理されるバッファ管理テーブルの構成例を示す図。
【
図6】不揮発性メモリ内のデータ処理部によって維持および管理されるブロック書き込み状態管理テーブルの構成例を示す図。
【
図7A】コントローラと不揮発性メモリとによって実行されるデータ書き込み処理の手順の一部を示すシーケンス図。
【
図7B】コントローラと不揮発性メモリとによって実行されるデータ書き込み処理の手順の続きを示すシーケンス図。
【
図8】データ書き込み処理が実行されている期間内のある時点におけるバッファ管理テーブルの内容を示す図。
【
図9】データ書き込み処理が実行されている期間内のある時点におけるブロック書き込み状態管理テーブルの内容を示す図。
【
図10】コントローラと不揮発性メモリとによって実行されるデータ書き込み処理の別の手順を示すシーケンス図。
【
図11】
図10のデータ書き込み処理が実行されている期間内のある時点におけるバッファ管理テーブルの内容を示す図。
【
図12】ブロックへの書き込み処理を開始することがコントローラから通知された場合に不揮発性メモリによって実行される処理の手順を示すフローチャート。
【
図13】ブログラム要求とライトデータとをコントローラから受信した場合に不揮発性メモリによって実行される処理の手順を示すフローチャート。
【
図14】あるページに対するプログラム動作が完了した場合に不揮発性メモリによって実行される処理の手順を示すフローチャート。
【
図15】不揮発性メモリ内部で実行されるデータコピー処理を説明するための図。
【
図16】コントローラと不揮発性メモリとによって実行されるデータコピー処理の手順を示すシーケンス図。
【
図17】不揮発性メモリのメモリコア制御部内に設けられるECC処理部およびEMC処理部を示すブロック図。
【
図18】コントローラと不揮発性メモリとによって実行されるデータコピー処理の別の手順を示すシーケンス図。
【
図19】コントローラと不揮発性メモリとによって実行されるデータ書き込み処理の別の手順を示すシーケンス図。
【
図20】コントローラと不揮発性メモリとによって実行される誤りビット数チェック処理の手順を示すシーケンス図。
【
図21】各メモリセルに格納される3ビットのデータ値に対応する8つの閾値電圧分布と各メモリセルからデータを読み出す時に使用される7つの読み出し電圧レベルとの関係を示す図。
【
図22】プログラム後の時間経過に応じてメモリセルの各閾値電圧分布が低い値にシフトされた状態を示す図。
【
図23】シフトされた閾値電圧分布に対応する最適読み出しレベルを決定する処理を説明するための図。
【
図24】コントローラと不揮発性メモリとによって実行される最適読み出しレベル決定処理の手順を示すシーケンス図。
【
図25】複数のメモリコアとこれらメモリコアを制御する複数のメモリコア制御部とを含む不揮発性メモリの構成例を示すブロック図。
【発明を実施するための形態】
【0008】
以下、図面を参照して、実施形態を説明する。
(第1実施形態)
図1は、第1実施形態に係る不揮発性メモリ1を含むメモリシステムの構成例を示す。
この不揮発性メモリ1は、NAND型フラッシュメモリのような不揮発性半導体記憶装置である。この不揮発性メモリ1は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。
【0009】
メモリシステムは、不揮発性メモリ1とこの不揮発性メモリ1を制御するコントローラ2とを含む。コントローラ2は第1半導体素子とも称される。また、不揮発性メモリ1は第2半導体素子とも称される。このメモリシステムは、さらに、ホストインターフェース3と、メモリ・コントローラ通信線4と、電源線5とを含む。
【0010】
このメモリシステムは、例えば、ソリッドステートドライブ(SSD)として実現されてもよい。この場合、このSSDは、ホストシステム(ホスト装置)として機能する、サーバコンピュータ、パーソナルコンピュータ、モバイルデバイスといった様々な情報処理装置のデータストレージとして使用される。あるいは、このメモリシステムは、メモリカード、USBメモリのような、リムーバブルストレージデバイスとして実現されてもよいし、組み込みストレージデバイスとして実現されてもよい。
【0011】
メモリ・コントローラ通信線4は、コントローラ2と不揮発性メモリ1との間の通信に使用される信号線である。メモリ・コントローラ通信線4においては、複数の信号が規定されている。これら信号は、例えば、ONFi仕様に準拠した信号であってもよい。これら信号は、チップイネーブル信号CEn、ライトイネーブル信号WEn、リードイネーブル信号REn、コマンドラッチイネーブル信号CLE、アドレスラッチイネーブル信号ALE、ライトプロテクト信号WPn、ライトイネーブル信号WEn、I/O信号<7:0>、レディー/ビジー信号RBnを含む。ここで、信号の名称の末尾の「n」は、この信号が負論理の信号であることを意味する。
【0012】
不揮発性メモリ1は、NAND型フラッシュメモリチップのような半導体メモリチップとして実現されている。この不揮発性メモリ1は、チップイネーブル信号CEn、ライトイネーブル信号WEn、リードイネーブル信号REn、コマンドラッチイネーブル信号CLE、アドレスラッチイネーブル信号ALE、ライトプロテクト信号WPn、ライトイネーブル信号WEn、I/O信号<7:0>、レディー/ビジー信号RBnにそれぞれ対応する信号ピンを有しており、これら信号ピンおよびメモリ・コントローラ通信線4を介して、コントローラ2に接続可能である。
【0013】
チップイネーブル信号CEnは、不揮発性メモリ1(例えばNAND型フラッシュメモリチップ)を選択するための信号である。
コマンドラッチイネーブル信号CLEは、データバス(I/O信号<7:0>)上のコマンド、アドレス、入力データの取り込み(ラッチ)を制御する。
【0014】
リードイネーブル信号REnは、データバス(I/O信号<7:0>)へのシリアルデータ出力をイネーブルにする。
コマンドラッチイネーブル信号CLEは、データバス(I/O信号<7:0>)上の現在のバスサイクルタイプがコマンドであることを不揮発性メモリ1に通知するために使用される。
【0015】
アドレスラッチイネーブル信号ALEは、データバス(I/O信号<7:0>)上の現在のバスサイクルタイプがアドレスであることを不揮発性メモリ1に通知するために使用される。
ライトプロテクト信号WPnはプログラム動作およびイレーズ動作をディスエーブルするために使用される。レディー/ビジー信号RBnは、不揮発性メモリ1の現在の状態(レディー状態またはビジー状態)を示す。
【0016】
図2は、
図1のコントローラ2の内部をより詳細に描いたブロック図である。
コントローラ2は、情報処理装置内のCPUのようなホストシステム(ホスト装置)からのデータ書き込み要求(ライトコマンド)に応じて、不揮発性メモリ1へのデータの書き込みを制御し、またホストシステム(ホスト装置)からのデータ読み出し要求(リードコマンド)に応じて、不揮発性メモリ1からのデータの読み出しを制御する。
【0017】
このコントローラ2は、ホストインターフェース制御部201、コマンド制御部202、バッファ制御部203、データ割り付け管理部204、メモリ制御部205、バッファメモリ206、誤り訂正符号処理部(ECC部)207、およびメモリインターフェース制御部208を含む。
【0018】
ホストインターフェース制御部201は、ホストインターフェース3を介してホストシステム(ホスト装置)と通信する。ホストインターフェース制御部201は、コマンド制御部202の指示に従って、ホストシステム(ホスト装置)から要求(コマンド)およびデータを受信する処理、および処理結果およびデータをホストシステム(ホスト装置)へ送信する処理を実行する。
【0019】
ホストインターフェース3の具体的な例としては、Non-Volatile Memory Express(NVMe)(登録商標)、Serial ATA(SATA)、Serial Attached SCSI (SAS)、Universal Flash Storage (UFS)などがある。
【0020】
コマンド制御部202は、ホストインターフェース制御部201経由でホストシステム(ホスト装置)から受信したコマンドを解釈し、そのコマンドの内容に従って、コントローラ2内の他の機能ブロックを制御して処理を実行する。
バッファ制御部203は、バッファメモリ206を管理し、ホストシステム(ホスト装置)から受領した書き込みデータ(ユーザデータ)、不揮発性メモリ1から読み出したデータを、バッファメモリ206内の適切な場所に格納する。
【0021】
データ割り付け管理部204は、ホストシステム(ホスト装置)から受領したユーザデータを不揮発性メモリ1内のどのブロックのどのページに割り付けるかを管理する。ここで、ブロックは消去動作の単位であり、またページはプログラム動作およびリード動作の単位である。
【0022】
コントローラ2は、ホストシステム(ホスト装置)から受信されるデータ書き込み要求(ライトコマンド)に関連付けられたユーザデータをホストシステム(ホスト装置)から受信する。このライトコマンドによって、ユーザデータに対応するアドレス(例えば論理アドレス)と、このユーザデータとが指定される。具体的には、このライトコマンドは、論理アドレス(開始論理アドレス)、長さ、データポインタ、等を指定する。開始論理アドレスは、このユーザデータに対応する論理アドレス範囲内の最初の論理アドレスを示す。長さは、このユーザデータの長さを示す。データポインタは、このユーザデータが存在しているホストメモリ(ホストシステム(ホスト装置)内のメモリ)内の位置を示す。
【0023】
このユーザデータが割り付けられるべきブロックおよびこのブロック内のページは、データ割り付け管理部204において決定される。すなわち、データ割り付け管理部204は、ホストシステム(ホスト装置)から受信されたライトコマンドによって指定されたユーザデータが割り付けられるべきブロックアドレスおよびページアドレスを決定し、受信されたライトコマンドによって指定された論理アドレスに、決定されたブロックアドレスおよび決定されたページアドレスを割り当てる。
【0024】
さらに、コントローラ2は、ホストシステム(ホスト装置)から受信されるユーザデータに基づいて、不揮発性メモリ1に実際に書き込まれるべき書き込みデータ(例えば、ECC符号化データのような符号化データ)を生成する。この書き込みデータが書き込まれるべき不揮発性メモリ1内の物理記憶位置を示す物理アドレスは、この書き込みデータに対応するユーザデータの論理アドレスに割り当てられたブロックアドレスおよびページアドレスの組み合わせに基づいて決定される。
【0025】
また、コントローラ2においては、メモリシステムをアクセスするためにホストシステム(ホスト装置)によって指定される論理アドレスそれぞれと不揮発性メモリ1の物理アドレスそれぞれとの間の対応関係を示すマッピング情報が論理物理アドレス変換テーブルを使用して管理される。各物理アドレスは、ブロックアドレスとページアドレスとの組み合わせ、またはブロックアドレスとページアドレスとページ内オフセットとの組み合わせによって表される。コントローラ2は、論理物理アドレス変換テーブルを更新することによって、ホストシステム(ホスト装置)から受信されたライトコマンドによって指定されたアドレス(論理アドレス)に物理アドレス(ブロックアドレス、ページアドレス)を関連付ける。
【0026】
ホストシステム(ホスト装置)からリード要求(リードコマンド)を受信した場合、コントローラ2は、論理物理アドレス変換テーブルを参照して、リードコマンドによって指定された論理アドレスに対応する物理アドレスを論理物理アドレス変換テーブルから取得することができる。
【0027】
メモリ制御部205は、コマンド制御部202の指示に従って、メモリインターフェース制御部208を制御する。具体的には、メモリ制御部205は、メモリインターフェース制御部208を制御して、不揮発性メモリ1からのデータの読み出し、不揮発性メモリ1へのデータの書き込みを行う。不揮発性メモリ1へデータを書き込む動作は、プログラム動作とも称される。
【0028】
バッファメモリ206は、ホストシステム(ホスト装置)と不揮発性メモリ1の間でやり取りされるデータなどを一時的に格納するための領域である。バッファメモリ206は、具体的にはDRAMやSRAMなどの揮発性メモリで構成されることが多い。
誤り訂正符号(ECC)処理部207は、コマンド制御部202の指示に従って、バッファメモリ206からメモリインターフェース制御部208を通じて不揮発性メモリ1へ転送されるべきユーザデータに対して誤り訂正符号を付加する誤り訂正符号化処理を行う。誤り訂正符号化処理は、ユーザデータを符号化して、ユーザデータとこのユーザデータの誤りを訂正可能な誤り訂正符号(ECC)とを含む符号化データを生成する符号化処理である。また、誤り訂正符号(ECC)処理部207は、コマンド制御部202の指示に従って、メモリインターフェース制御部208を通じて不揮発性メモリ1から転送された読み出しデータの誤りを訂正する誤り訂正復号処理を行う。誤り訂正復号処理は、データとECCとを含む符号化データを復号して、このデータに含まれる誤りを訂正する復号処理である。
【0029】
メモリインターフェース制御部208は、メモリ制御部205の指示に従って、不揮発性メモリ1とコントローラ2との間の物理的な信号線を電気的に操作して、不揮発性メモリ1に所望の動作を実行させる。
図3Aは、
図1の不揮発性メモリ1の内部をより詳細に描いたブロック図である。
【0030】
不揮発性メモリ1は、メモリコア11、メモリコア制御部12、および入出力部13を含む。
メモリコア11は、セルアレイ101を含む。セルアレイ101は、規則正しく配置された多数の不揮発性記憶素子(メモリセル)を含む。
入出力部13は、入力バッファ112および114と、出力バッファ113および115とを含む。
【0031】
入力バッファ112および114は、コントローラ2から不揮発性メモリ1に信号を運ぶための各信号線を介してコントローラ2から受信される各信号を一時的に格納する。出力バッファ113および115は、不揮発性メモリ1からコントローラ2に信号を運ぶための各信号線を介してコントローラ2に送信すべき信号を一時的に格納する。
【0032】
メモリコア制御部12は、セルアレイ101へのデータの書き込みおよびセルアレイ101からのデータの読み出しを制御するように構成された制御回路として機能する。
このメモリコア制御部12は、ロウデコーダ102、カラムデコーダ・キャッシュ・センスアンプ103、バッファ104、メモリコア用電源制御部105、メモリコア操作部106、コマンドデコーダ107、コマンドキュー108、コマンド実行制御部109、データ処理部110、およびバッファ制御部111を含む。
【0033】
ロウデコーダ102は、セルアレイ101の中の、操作対象となるロウ(行)を指定する。カラムデコーダ・キャッシュ・センスアンプ103は、ロウデコーダ102で指定・選択されたロウに属するメモリセルの集合へのデータの転送、ロウデコーダ102で指定・選択されたロウに属するメモリセルの集合からのデータの読み出し(センス)、およびキャッシュ内のカラム(列)の選択、等を行う。
【0034】
バッファ104は、セルアレイ101に書き込まれるべきデータまたはセルアレイ101から読み出されたデータの一時的な格納場所である。ここでは、M+1個のバッファがバッファ104として設けられている場合が例示されている。
メモリコア用電源制御部105は、メモリコア操作部106の指示に従って、メモリコア11が必要とする電圧・電流を外部からの供給される電源電圧Vccから作りだす。
【0035】
メモリコア操作部106は、コマンド実行制御部109の指示に従い、メモリコア用電源制御部105を制御してセルアレイ101の動作に必要な電圧・電流を作り出し、またセルアレイ101にデータを書き込むプログラム動作およびセルアレイ101からデータを読み出す読み出し動作を制御する。
【0036】
プログラム動作においては、メモリコア操作部106は、ロウデコーダ102に操作対象のロウを選択させ、キャッシュ・センスアンプ103に対して、セルアレイ101へのデータの書き込み(ブログラム)を指示する。読み出し動作においては、メモリコア操作部106は、ロウデコーダ102に操作対象のロウを選択させ、キャッシュ・センスアンプ103に対して、セルアレイ101からのデータの読み出しを指示する。
【0037】
コマンドデコーダ107は、入力バッファ114を経由してコントローラ2から受信したコマンドの内容を解釈し、コマンドキュー108にコマンドを格納し、コマンド実行制御部109にコマンドの受信を通知する。
コマンドキュー108は、コマンドデコーダ107が受信したコマンドを一時的に格納する領域である。コマンドキュー108に格納されたコマンドがコマンド実行制御部109によって取得および実行される。そしてこのコマンドの実行が完了すると、このコマンドはコマンドキュー108から削除される。
【0038】
コマンド実行制御部109は、コマンドを受信したことを示す通知をコマンドデコーダ107から受けると、コマンドキュー108からこのコマンドを取得し、メモリコア操作部106、データ処理部110、および出力バッファ113を制御することによってこのコマンドを実行する。
【0039】
データ処理部110は、コマンド実行制御部109の指示に従って、バッファ104内のデータの操作を行う。データ処理部110は、バッファ104内のデータの操作をバッファ制御部111に指示する。
バッファ制御部111は、データ処理部110の指示に従い、バッファ104内のデータの操作および管理を行う。バッファ104として使用される個々のバッファの有効無効などの管理もバッファ制御部111の責務である。
【0040】
図3Bは、セルアレイ101の構成例に示す。
セルアレイ101は、マトリクス状に配列された複数のメモリセルを有する。セルアレイ101は、
図3Bに示されているように、複数のブロック(物理ブロック)BLK0~BLK(j-1)を含む。ブロックBLK0~BLK(j-1)は、消去動作の単位として機能する。
【0041】
ブロックBLK0~BLK(j-1)は複数のページを含む。つまり、ブロックBLK0~BLK(j-1)の各々は、ページP0、P1、…P(k-1)を含む。データの読み出しおよびデータの書き込みはページ単位で実行される。
不揮発性メモリ1は、一つのメモリセルに1ビットのデータを格納するシングルレベルセル(SLC)-フラッシュメモリであってもよいし、一つのメモリセルに2ビットのデータを格納するマルチレベルセル(MLC)-フラッシュメモリであってもよいし、一つのメモリセルに3ビットのデータを格納するトリプルレベルセル(TLC)-フラッシュメモリであってもよいし、一つのメモリセルに4ビットのデータを格納するクワドレベルセル(QLC)-フラッシュメモリであってもよい。
【0042】
SLCにおいては、ブロック内の同じワード線に接続された複数のメモリセルの集合が一つのページとして機能する。
MLCにおいては、同じワード線に接続された複数のメモリセルの集合が2つのページ(ロアーページ、アッパーページとして参照される)として機能する。
【0043】
また、TLCにおいては、同じワード線に接続された複数のメモリセルの集合が3つのページ(ロアーページ、ミドルページ、アッパーページとして参照される)として機能する。
図3Cは、セルアレイ101内に含まれる各ブロックの構成例を示す。
一つのブロックBLKは、複数のワードラインWL0、WL1、WL2、WL3、WL4、…、を含む。各ワードラインWLには、複数のメモリセル(メモリセルトランジスタ)MT0、MT1、…、MTnが接続されている。
【0044】
例えば、メモリセル当たりに3ビットのデータが格納されるTLCにおいては、各メモリセルトランジスタは、互いに閾値電圧が異なる8つの状態のいずれか一つに設定される。各状態は、8つのデータ値(“000”、“001”、“010”、“011”、“100”、“101”、“110”、“111”)のいずれか一つに対応する。
【0045】
各ワードラインWLには、3つのページ(ロアーページ、ミドルページ、アッパーページ)が割り当てられる。各メモリセルトランジスタに保持される3ビットは、異なる3つのページ(ロアーページ、ミドルページ、アッパーページ)にそれぞれ属する。
例えば、ワードラインWL0に接続されたメモリセルトランジスタの集合には、ページ0(ロアーページ)、ページ1(ミドルページ)、ページ3(アッパーページ)が割り当てられる。同様に、ワードラインWL1に接続されたメモリセルトランジスタの集合には、ページ3(ロアーページ)、ページ4(ミドルページ)、ページ5(アッパーページ)が割り当てられ、ワードラインWL2に接続されたメモリセルトランジスタの集合には、ページ6(ロアーページ)、ページ7(ミドルページ)、ページ8(アッパーページ)が割り当てられる。
【0046】
図4は、不揮発性メモリ1に適用されるプログラム順序規則を規定するプログラム順テーブルの例を示す。
プログラム順序規則によって示されるプログラム順序は、各ブロックにデータを書き込むために必要なページの順序を示す。各ワードラインに複数のページが割り当てられている場合においては、このプログラム順序は、各ブロックにデータを書き込むために必要なワードラインの順序を示してもよい。
【0047】
以下、フラッシュメモリ(TLC)を例示して、プログラム順序の例を説明する。
図4のプログラム順テーブルは、同じブロックに属する複数のワードラインWLがプログラムされる順序であるプログラム順序番号(プログラム順序番号0番、プログラム順序番号1番、プログラム順序番号2番、…、)と、プログラム順序番号0番、プログラム順序番号1番、プログラム順序番号2番、…それぞれに対応するページを示すページアドレスとの対応関係を表している。
【0048】
例えば、最初(プログラム順序プログラム順序番号0番)のプログラム動作はワードラインWL0に対する1stプログラム動作(=ページアドレス0に対するプログラム動作)である。ページアドレス0はワードラインWL0のロアーページに対応する。
次(プログラム順序番号1番)のプログラム動作はワードラインWL1に対する1stプログラム動作(=ページアドレス3に対するプログラム動作)である。ページアドレス3はワードラインWL1のロアーページに対応する。
【0049】
さらにその次(プログラム順序番号2番)のプログラム動作はワードラインWL0に対する2ndプログラム動作(=ページアドレス1に対するプログラム動作)である。ページアドレス1はワードラインWL0のミドルページに対応する。
さらにその次(プログラム順序番号3番)のプログラム動作はワードラインWL2に対する1stプログラム動作(=ページアドレス6に対するプログラム動作)である。ページアドレス6はワードラインWL2のロアーページに対応する。
【0050】
さらにその次(プログラム順序番号4番)のプログラム動作はワードラインWL1に対する2ndプログラム動作(=ページアドレス4に対するプログラム動作)である。ページアドレス4はワードラインWL1のミドルページに対応する。
さらにその次(プログラム順序番号5番)のプログラム動作はワードラインWL0に対する3rdプログラム動作(=ページアドレス2に対するプログラム動作)である。ページアドレス2はワードラインWL0のアッパーページに対応する。
【0051】
このように、不揮発性メモリ1においては、各ブロックにデータを書き込むために必要なページの順序を示すプログラム順序が定められている。
図4の例においては、プログラム順序は、隣接する幾つかのワードラインに対するプログラム動作が互いに交互に実行されるように定められている。
【0052】
すなわち、各ワードラインWLに対するプログラム動作は、1stプログラム動作、2ndプログラム動作、3rdプログラム動作を含む別個の3つのプログラム動作によって実行される。ワードラインWL0に対する2ndプログラム動作は、ワードラインWL1に対する1stプログラム動作が完了した後に開始される。ワードラインWL1に対する2ndプログラム動作は、ワードラインWL2に対する1stプログラム動作が完了した後に開始される。
【0053】
ワードラインWL0に対する3rdプログラム動作は、ワードラインWL1に対する2ndプログラム動作が完了した後に開始される。ワードラインWL1に対する3rdプログラム動作は、ワードラインWL2に対する2ndプログラム動作が完了した後に開始される。
【0054】
不揮発性メモリ1のメモリコア制御部12は、コントローラ2によって複数のブロックから選択される書き込み先ブロックに含まれる複数のページに対するプログラム動作を、この書き込み先ブロックにデータを書き込むために必要なページの順序を示すプログラム順序で実行する。
【0055】
図4の例においては、メモリコア制御部12は、書き込み先ブロックにデータを書き込むために、この書き込み先ブロックに含まれる複数のページに対するプログラム動作を、ページアドレス0に対するプログラム動作、ページアドレス3に対するプログラム動作、ページアドレス1に対するプログラム動作、ページアドレス6に対するプログラム動作、ページアドレス4に対するプログラム動作、ページアドレス2に対するプログラム動作、…の順序で実行することが必要とされる。
【0056】
図5は、バッファ制御部111によって維持および管理されるバッファ管理テーブルを示す。
このバッファ管理テーブルは不揮発性メモリ1内のバッファ104を管理するためのテーブルであり、バッファ104として使用される複数のバッファそれぞれに対応する複数の列を含む。各列は、バッファ番号51、有効無効フラグ52、ブロックアドレス53、ページアドレス54、データ必要期間55を格納する。
【0057】
バッファ管理テーブルの各列において、バッファ番号51は、この列に対応するバッファを識別するバッファ番号を示す。有効無効フラグ52は、この列に対応するバッファの内容が有効であるか無効であるかを示す。ブロックアドレス53は、この列に対応するバッファの内容が属しているブロックを識別するブロックアドレスを示す。ページアドレス54は、この列に対応するバッファの内容に対応しているページを識別するページアドレスを示す。データ必要期間55は、この列に対応するバッファに格納されているデータを使用したプログラム動作の実行のために、このデータをバッファ内に維持しておくことが必要とされる期間を示す。
【0058】
具体的には、あるデータに対応するデータ必要期間55の値としては、このデータを使用してプログラムされるワードラインに関する3rdブログラム動作に対応するプログラム順序番号が使用される。
例えば、ページアドレス0に書き込まれるべきデータが格納されているバッファに関しては、ワードラインWL0の3rdブログラム動作に対応するプログラム順序番号(=5)が、そのバッファに格納されているデータに対応するデータ必要期間である。
【0059】
同様に、ページアドレス1または2に書き込まれるべきデータが格納されているバッファに関しては、ワードラインWL0の3rdブログラム動作に対応するプログラム順序番号(=5)が、そのバッファに格納されているデータに対応するデータ必要期間となる。
【0060】
また、ページアドレス3に書き込まれるべきデータが格納されているバッファに関しては、ワードラインWL1の3rdブログラム動作に対応するプログラム順序番号(=8)が、そのバッファに格納されているデータに対応するデータ必要期間となる。
同様に、ページアドレス4または5に書き込まれるべきデータが格納されているバッファに関しては、ワードラインWL1の3rdブログラム動作に対応するプログラム順序番号(=8)が、そのバッファに格納されているデータに対応するデータ必要期間となる。
【0061】
図6は、データ処理部110によって維持および管理されるブロック書き込み状態管理テーブルを示す。
ブロックの書き込み状態管理テーブルは、不揮発性メモリ1内の複数のブロックの書き込み状態を管理するためのテーブルであり、複数のブロックそれぞれに対応する複数の列を含む。各列は、ブロックアドレス61、書き込み中フラグ62、次のプログラム順番号63、完了したプログラム順番号64を格納する。
【0062】
ブロックの書き込み状態管理テーブルの各列において、ブロックアドレス61は、この列に対応するブロックを識別するブロックアドレスを示す。書き込み中フラグ62は、この列に対応するブロックが書き込み先ブロック(オープンされたブロック)として使用中であるか否かを示す。次のプログラム順番号63は、この列に対応するブロックに対して実行されるべき次のプログラム動作に対応するプログラム順序番号(以下、「次のプログラム順序番号」と称する)を示す。完了したプログラム順番号64は、この列に対応するブロックにおいて完了したプログラム動作のブログラム順番号を示す。
【0063】
具体的には、次のプログラム順番号63の値および完了したプログラム順番号64の値の各々としては、
図4で説明したプログラム順序41の値が使用される。
あるブロックが書き込み先ブロックとして選択された場合、このブロックに対応する次のプログラム順序番号はプログラム順序番号0番となる。最初(プログラム順序番号0番)のプログラム動作(ワードラインWL0の1stプログラム動作)が完了すると、このブロックに対応する完了したブログラム順序番号はプログラム順序番号0番となり、このブロックに対応する次のプログラム順序番号はプログラム順序番号1番となる。
【0064】
ここで
図4の説明に戻る。
図4に示したプログラム順テーブルは、一つのワードラインの各メモリセルに3ビットのデータ(8状態)を格納するために、3回のプログラム動作(1stプログラム動作、2ndプログラム動作、3rdプログラム動作)が必要なことを表している。
【0065】
例えばワードラインWL0に接続された各メモリセルを8状態のいずれか一つに対応する所望の閾値電圧レベルにプログラムするためには、プログラム順序番号0番で、ワードラインWL0に対する1stプログラム動作を行い、プログラム順序番号2番で、ワードラインWL0に対する2ndプログラム動作を行い、プログラム順序番号5番で、ワードラインWL0に対する3rdプログラム動作を行うことが必要である。
【0066】
同様に、ワードラインWL1に接続された各メモリセルを8状態のいずれか一つに対応する所望の閾値電圧レベルにプログラムするためには、プログラム順序番号1番で、ワードラインWL1に対する1stプログラム動作を行い、プログラム順序番号4番で、ワードラインWL1に対する2ndプログラム動作を行い、プログラム順序番号8番で、ワードラインWL1に対する3rdプログラム動作を行うことが必要である。
【0067】
このように、各ワードラインに接続された複数のメモリセルに対するデータ書き込み処理は3つの別個のプログラム動作(1stプログラム動作、2ndプログラム動作、3rdプログラム動作)に分けられる。
あるワードラインWLnに対する2ndプログラム動作は隣接するワードラインWLn+1の1stプログラム動作の後に実行される。同様に、ワードラインWLn+2の2ndプログラム動作は隣接するワードラインWLn+2の1stプログラム動作の後に実行される。そして、ワードラインWLnに対する3rdプログラム動作はワードラインWLn+1の2ndプログラム動作の後に実行される。
【0068】
このように、各ワードラインに接続されたメモリセルへのデータ書き込み処理は、隣接する幾つかのワードラインに対するプログラム動作を互いにインターリーブする方式で実行される。これは、NAND型フラッシュメモリのような不揮発性メモリ1においては、各ワードラインのメモリセルの閾値電圧を隣接するワードラインの状態に応じて補正しながら、各ワードラインのメモリセルにデータを書き込む必要があるためである。隣接する幾つかのワードラインに対するプログラム動作を互いにインターリーブすることにより、セル間干渉に起因するプログラムディスターブを低減することができる。
【0069】
なお、各ブロックへのデータ書き込み処理に必要なプログラム順規則は不揮発性メモリ1の世代またはデータ書き込み方式によって変わる。
しかし、NAND型フラッシュメモリとコントローラとの間の従来の通信では、コントローラ自身が、データが書き込まれるべき書き込み先ページを決定することが必要とされる。つまり、NAND型フラッシュメモリとコントローラとの間の従来の通信は、NAND型フラッシュメモリに適用されているプログラム順序(つまり、ブロックにデータを書き込むために必要なページの順序)をコントローラ側が把握していることを前提としている。
【0070】
このため、使用すべきプログラム順序が異なる様々な不揮発性メモリに対応できるようにするためには、各種書き込み方式(つまり各種プログラム順序)に対応可能なコントローラを予め開発しておくか、あるいは不揮発性メモリの世代交代の度に新たなコントローラを開発することが必要とされる。
【0071】
しかし、各種書き込み方式に対応可能なコントローラを製造するためには、複数種の書き込み方式に対応する複数種の回路を追加することが必要とされ、その分だけコストがかかる。また、ソフトウェア実装によって各種書き込み方式に対応可能なコントローラを実現した場合には、ソフトウェアによる処理の遅延によって性能低下を招く場合がある。
【0072】
また、不揮発性メモリ1の世代交代の度に新たなコントローラを開発し直すことは、膨大なコスト増を招くことになる。
そこで、本実施形態は、不揮発性メモリ1を制御するために必要なコントローラ2側の処理負担を軽減可能とする技術を提供する。具体的には、本実施形態は、コントローラ2が様々な書き込み方式、ひいてはNANDフラッシュメモリの様々な世代に対応できるようにする技術を提供する。
【0073】
さらに、データ書き込み動作において、各ワードラインに対する2回目と3回目のプログラム動作時には、同じワードラインに対して以前に行ったプログラム動作時のデータも必要になる。
例えば、ワードラインWL0の2回目のプログラム動作時(2ndプログラム動作)には、ワードラインWL0の各メモリセルの目標閾値電圧(4状態のいずれか)を決定するために、2ndプログラム動作で書き込むべきデータ(ミドルページに対応するデータ)のみならず、ワードラインWL0の1回目のプログラム動作(1stプログラム動作)で使用したデータ(ロアーページに対応するデータ)も必要となる。
【0074】
また、ワードラインWL0の3回目のプログラム動作時(3rdプログラム動作)には、各メモリセルの最終目標閾値電圧(8状態のいずれか)を決定するために、3rdプログラム動作で書き込むべきデータ(アッパーページに対応するデータ)のみならず、ワードラインWL0の1回目のプログラム動作(1stプログラム動作)で使用したデータ(ロアーページに対応するデータ)と、ワードラインWL0の2回目のプログラム動作(2ndプログラム動作)で使用したデータ(ミドルページに対応するデータ)も必要になる。
【0075】
この際、従来のメモリ・コントローラ間インタフェース仕様では、例えば、2回目のプログラム動作時には、2回目のプログラム動作で必要なデータだけでなく、1回目のプログラム動作で使用したデータもコントローラ2から不揮発性メモリ1に転送する必要がある。同様に、例えば、3回目のプログラム動作時には、3回目のプログラム動作で必要なデータだけでなく1回目のプログラム動作で使用したデータと2回目のプログラム動作で使用したデータもコントローラ2から不揮発性メモリ1に転送する必要がある。よって、コントローラ2と不揮発性メモリ1との間の通信回数が多くなる。
【0076】
通信回数が多くなると、コントローラ2内の通信路およびメモリ・コントローラ間の通信路において通信にかかる時間を他の処理に使用できないだけでなく、通信による消費電力が増えてしまう。
よって、本実施形態では、メモリ・コントローラ間の通信回数の増加を抑制可能にする技術も提供される。
【0077】
以下、不揮発性メモリ1とコントローラ2の間の具体的な通信内容を説明する。
図7Aおよび
図7Bは、コントローラ2と不揮発性メモリ1とによって実行されるデータ書き込み処理の手順を示す。
図7Aおよび
図7Bを用いて、第1実施形態におけるデータ書き込み処理の手順を説明する。
【0078】
図7Aに示されているように、まず、コントローラ2は、不揮発性メモリ1に対してブロックアドレスを指定して、当該ブロックへの書き込み処理を開始することを不揮発性メモリ1に通知する(ステップS701)。
このステップS701では、コントローラ2は、不揮発性メモリ1内の複数のブロック(フリーブロック)の内の一つのブロックを書き込み先ブロックとして選択する要求(Block open要求)を不揮発性メモリ1に送信してもよい。例えば、この選択される書き込み先ブロックがブロックアドレス0を有するブロックである場合には、コントローラ2は、Block open (0)を不揮発性メモリ1に送信する。ここで、Block open (0)の(0)は、ブロックアドレス0を表している。
【0079】
換言すれば、このステップS701では、コントローラ2は、不揮発性メモリ1内の複数のブロック(フリーブロック)から選択される一のブロックを示すブロックアドレスを不揮発性メモリ1に送信する。ここで、ブロックアドレスは第1アドレス信号とも称される。
【0080】
不揮発性メモリ1のメモリコア制御部12が、書き込み先ブロックを選択する要求(Block open (0))、つまりブロックアドレス、をコントローラ2から受信した場合、メモリコア制御部12は、
図6のブロック書き込み状態管理テーブルを更新して、指定されたブロック0(ブロックアドレス0を有するブロック)に対応する書き込み中フラグをY(=Yes)に設定する(ステップS702)。
【0081】
さらに、メモリコア制御部12は、
図6のブロック書き込み状態管理テーブルを更新して、指定されたブロック0(ブロックアドレス0を有するブロック)に対応する次のプログラム順番号63の値を0に初期化する(ステップS703)。
そして、不揮発性メモリ1のメモリコア制御部12は、コントローラ2に対して、ブロック0に対する次のプログラム動作を行うために必要なデータはページ0のデータであることを通知する(ステップS704)。換言すれば、ステップS704では、メモリコア制御部12は、コントローラ2から受信されたブロックアドレスに対して、ブロックアドレスに基づいて選択されるページアドレスをコントローラ2に送信する。ここで、ページアドレスは第2のアドレス信号とも称される。
【0082】
つまり、ステップS704では、メモリコア制御部12は、ブロック0に対する次のプログラム動作に対応するページアドレスをコントローラ2に通知する。
次のプログラム動作に対応する次のプログラム順序番号は次のプログラム順番号63の値(ここでは0)であり、
図4の表を参照すると、次のプログラム順序番号0のプログラム動作に必要なページのページアドレスは0であることが分かる。以降も同様にして、メモリコア制御部12は、
図6のブロック書き込み状態管理テーブルから次のプログラム順序番号を取得し、
図4の表から、次のプログラム順序番号のプログラム動作に必要なページを示すページアドレスを取得する。
【0083】
このように、ステップS704では、不揮発性メモリ1のメモリコア制御部12は、次のプログラム動作に必要なページを示すページアドレス、つまり「次のページ」のページアドレス、をコントローラ2に通知する(Notify next page (0, 0))。Notify next page (0, 0)の(0, 0)は、書き込み先ブロックのブロックアドレス0とこの書き込み先ブロック内の次の書き込み先ページのページアドレス0とを表している。Notify next page (0, 0)は、I/O信号<7:0>を運ぶためのデータバスを介して不揮発性メモリ1からコントローラ2に送られてもよい。
【0084】
このように、書き込み先ブロックのブロックアドレスとこの書き込み先ブロック内の書き込み先ページのページアドレスとのペアを不揮発性メモリ1からコントローラ2に通知することにより、たとえ複数の書き込み先ブロックが同時にオープンされている場合であっても、不揮発性メモリ1のメモリコア制御部12は、書き込み先ブロック毎に、次のプログラム動作を行うために必要なページを示すページアドレスをコントローラ2に正しく通知することができる。
【0085】
なお、必ずしも書き込み先ブロックアドレスとページアドレスの双方を不揮発性メモリ1からコントローラ2に通知する必要は無く、書き込み先ブロックアドレスの通知は省略し、ページアドレスのみを不揮発性メモリ1からコントローラ2に通知してもよい。
【0086】
コントローラ2が「次のページ」のページアドレス0を不揮発性メモリ1から受信した場合、コントローラ2は、ページアドレス0を指定するプログラム要求(Write(0, 0))と、ページアドレス0を有するページに書き込むべきデータ(ページ0のデータとしても参照される)とを不揮発性メモリ1に転送する(ステップS705)。Write(0, 0)の(0, 0)は、書き込み先ブロックアドレス0とページアドレス0とを表している。なお、プログラム要求は、必ずしも書き込み先ブロックアドレスとページアドレスの双方を指定する必要は無く、ページアドレスのみを指定するプログラム要求が使用されてもよい。
【0087】
具体的には、ステップS705では、まず、プログラムコマンド、書き込み先ブロックアドレス、ページアドレスがコントローラ2から不揮発性メモリ1に転送され、次いで、ページ0のデータがコントローラ2から不揮発性メモリ1に転送される。
不揮発性メモリ1のメモリコア制御部12がプログラム要求(Write(0, 0))とページ0のデータとをコントローラ2から受信した場合、メモリコア制御部12は、受信したページ0のデータをバッファ104に格納し、
図5のバッファ管理テーブルに管理データを登録する(ステップS706)。
【0088】
例えば、バッファ番号0のバッファにこのデータを格納した場合は、メモリコア制御部12は、バッファ管理テーブル(
図5)のバッファ番号0に関する列の有効無効フラグ52を有効を示す値に設定し、この列のブロックアドレス51の値を0に設定し、この列のページアドレス54の値を0に設定し、この列のデータ必要期間55の値を5に設定する。データ必要期間の値(ここでは5)は、
図4のテーブルを参照することによって決定される。
【0089】
つまり、
図4のテーブルを参照することにより、ページ0のデータがワードラインWL0のデータであること、このワードラインWL0の3回目のプログラム動作はプログラム順序番号5番であることが分かる。したがって、ページ0のデータは、プログラム順序番号5番のプログラム動作が完了するまで必要であることがわかる。このことから、ページ0のデータに対して設定するデータ必要期間55の値は、5となる。以降も同様にして、
図4のテーブルから、各ページのデータに対応するデータ必要期間が取得される。
【0090】
図7Aの説明に戻る。
書き込み先ブロック0の次のプログラム動作に必要なページ0のデータを取得したメモリコア制御部12は、ブロック書き込み状態管理テーブル(
図6)のブロック0に関する次のプログラム順番号63の値を1に更新し、コントローラ2に対して、書き込み先ブロック0の次のプログラム動作に必要なデータのページアドレスが3であることを通知する(ステップS707)。
【0091】
このように、ステップS707では、メモリコア制御部12は、書き込み先ブロック0に対する次のプログラム動作に対応するページアドレス3をコントローラ2に通知する(Notify next page (0, 3))。Notify next page (0, 3)の(0, 3)は、書き込み先ブロックのブロックアドレス0とこの書き込み先ブロック内の書き込み先ページのページアドレス3とを表している。そして、メモリコア制御部12は、コントローラ2から受信したページ0のデータをブロック0のページ0に書き込むプログラム動作を行う(ステップS708)。換言すれば、ステップS708では、メモリコア制御部12は、コントローラ2から受信される、書き込み先ブロックアドレスおよびページアドレスおよびページ0のデータを指定するコマンド(プログラムコマンド)に対して、書き込み先ブロックアドレスおよびページアドレスに基づいたアドレス(物理アドレス)に対応するメモリセルに、ページ0のデータをプログラムする。
【0092】
ページ0に対するデータのプログラムが完了したら、メモリコア制御部12は、ブロック書き込み状態管理テーブル(
図6)のブロック0に関する完了したプログラム順番号64の値を0に設定する。
コントローラ2が「次のページ」のページアドレス3を不揮発性メモリ1から受信した場合、コントローラ2は、ページアドレス3を指定するプログラム要求(Write(0, 3))と、ページアドレス3を有するページに書き込むべきデータ(ページ3のデータとしても参照される)とを不揮発性メモリ1に転送する(ステップS709)。
【0093】
不揮発性メモリ1のメモリコア制御部12がプログラム要求(Write(0, 3))とページ3のデータとをコントローラ2から受信した場合、メモリコア制御部12は、ページ3のデータをバッファ104に格納し、
図5のバッファ管理テーブルに管理データを登録する(ステップS710)。例えば、バッファ番号1のバッファにこのページ3のデータを格納した場合は、メモリコア制御部12は、バッファ管理テーブル(
図5)のバッファ番号1に関する列の有効無効フラグ52を有効を示す値に設定し、この列のブロックアドレス51の値を0に設定し、この列のページアドレス54の値を3に設定し、この列のデータ必要期間55の値を8に設定する。データ必要期間の値(ここでは8)は、
図4のテーブルを参照することによって決定される。
【0094】
書き込み先ブロック0の次のプログラム動作に必要なページ3のデータを取得したメモリコア制御部12は、ブロック書き込み状態管理テーブル(
図6)のブロック0に関する次のプログラム順番号63の値を1に更新し、コントローラ2に対して、書き込み先ブロック0の次のプログラム動作に必要なデータのページアドレスが1であることを通知する(ステップS711)。
【0095】
このように、ステップS711では、メモリコア制御部12は、書き込み先ブロックに対する次のプログラム動作に対応するページアドレス1をコントローラ2に通知する(Notify next page (0, 1))。Notify next page (0, 1)の(0, 1)は、書き込み先ブロックのブロックアドレス0とこの書き込み先ブロック内の書き込み先ページのページアドレス1とを表している。そして、メモリコア制御部12は、コントローラ2から受信したページ3のデータをブロック0のページ3に書き込むプログラム動作を行う(ステップS712)。
【0096】
コントローラ2が「次のページ」のページアドレス1を不揮発性メモリ1から受信した場合、コントローラ2は、ページアドレス1を指定するプログラム要求(Write(0, 1))と、ページアドレス1を有するページに書き込むべきデータ(ページ1のデータとしても参照される)とを不揮発性メモリ1に転送する(ステップS713)。
【0097】
不揮発性メモリ1のメモリコア制御部12がプログラム要求(Write(0, 1))とページ1のデータとをコントローラ2から受信した場合、メモリコア制御部12は、ページ1のデータをバッファ104に格納し、
図5のバッファ管理テーブルに管理データを登録する(ステップS714)。例えば、バッファ番号2のバッファにこのページ1のデータを格納した場合は、メモリコア制御部12は、バッファ管理テーブル(
図5)のバッファ番号2に関する列の有効無効フラグ52を有効を示す値に設定し、この列のブロックアドレス51の値を0に設定し、この列のページアドレス54の値を1に設定し、この列のデータ必要期間55の値を5に設定する。データ必要期間の値(ここでは5)は、
図4のテーブルを参照することによって決定される。
【0098】
書き込み先ブロック0の次のプログラム動作に必要なページ1のデータを取得したメモリコア制御部12は、ブロック書き込み状態管理テーブル(
図6)のブロック0に関する次のプログラム順番号63の値6に更新し、コントローラ2に対して、書き込み先ブロック0の次のプログラム動作に必要なデータのページアドレスが6であることを通知する(ステップS715)。
【0099】
このように、ステップS715では、メモリコア制御部12は、書き込み先ブロック0に対する次のプログラム動作に対応するページアドレス6をコントローラ2に通知する(Notify next page (0, 6))。Notify next page (0, 6)の(0, 6)は、書き込み先ブロックのブロックアドレス0とこの書き込み先ブロック内の書き込み先ページのページアドレス6とを表している。そして、メモリコア制御部12は、バッファ104からページ0のデータを読み出し、バッファ104から読み出したページ0のデータと、コントローラ2から受信されるページ3のデータとを使用して、ブロック0のページ1に対するプログラム動作を行う(ステップS716)。
【0100】
このように、コントローラ2から受信されるプログラム要求によって指定されるページに対するプログラム動作がワードラインWL0の2回目のプログラム動作である場合には、メモリコア制御部12は、このワードラインWL0に対する1回目のプログラム動作で使用したデータ(ページ0のデータ)をバッファ104から読み出し、この読み出したページ0のデータと、コントローラ2から転送されるページ1のデータとを使用して、ページ1に対するプログラム動作を行う。ページ0のデータとページ1のデータの双方は、ワードラインWL0の各メモリセルの目標閾値電圧レベルを決定するために使用される。目標閾値電圧レベルは2ビットに対応する4データ値に対応する4つの閾値電圧レベルのいずれか一つである。
【0101】
以降、コントローラ2と不揮発性メモリ1の間で同様の通信および処理が行われる(
図7AのステップS713~
図7BのステップS728)。
図7BのステップS728では、メモリコア制御部12は、バッファ104からページ0のデータとページ1のデータの双方を読み出し、バッファ104から読み出したページ0のデータおよびページ1のデータと、コントローラ2から受信されるページ2のデータとを使用して、ブロック0のページ2に対するプログラム動作を行う。ページ0のデータとページ1のデータとページ2のデータは、ワードラインWL0の各メモリセルの最終目標閾値電圧レベルを決定するために使用される。最終目標閾値電圧レベルは3ビットに対応する8データ値に対応する8つの閾値電圧レベルのいずれか一つである。
【0102】
そして、ページ2に対するデータのプログラムが完了したら、メモリコア制御部12は、ブロック書き込み状態管理テーブル(
図6)のブロック0に関する完了したプログラム順番号64の値を5に設定する。
具体的には、この時点でのブロック書き込み状態管理テーブル(
図6)の内容は
図9のようになっている。また、この時点でのバッファ管理テーブル(
図5)の内容は
図8のようになっている。
【0103】
そこで、メモリコア制御部12は、
図5のバッファ管理テーブルを参照して、データ必要期間55の値が5になっているバッファを探す。すると、メモリコア制御部12は、バッファ番号0のバッファとバッファ番号2のバッファとバッファ番号5のバッファに対応するデータ必要期間55の値が5になっていることを検出し、これらバッファに格納されているデータに対応するページアドレス54の値(ここでは、ページアドレス0、1、2)を、書き込み先ブロック0のどのページに対するプログラム動作においても必要なくなったページのデータとして認識する。そして、ステップS729において、メモリコア制御部12は、ページアドレス0、1、2に対応するデータが不要であることを示すデータ不要通知をコントローラ2に通知する(Notify free data (0, 1, 2))。Notify free data (0, 1, 2)の(0, 1, 2)は、ページアドレス0、1、2を表す。
【0104】
なお、不要になったデータのページアドレスのみならず、これらページが属するブロックのブロックアドレスも不揮発性メモリ1からコントローラ2に通知してもよい。
さらに、ステップS729においては、メモリコア制御部12は、ページアドレス0、1、2に対応するデータが格納されているバッファ(バッファ104内の領域)を解放する処理も実行する。
【0105】
コントローラ2は、このデータ不要通知を受信すると、コントローラ2内のバッファメモリ206に格納されている、この指定されたデータが不要であると判断する。そして、コントローラ2は、この指定されたデータが格納されているバッファメモリ206内の領域を解放して、この解放された領域を他のデータの格納等のために再利用する。
【0106】
以上のように、不揮発性メモリ1のメモリコア制御部12は、書き込み先ブロックに含まれる複数のページに対するプログラム動作を、所定のプログラム順序で実行する。所定のプログラム順序は、書き込み先ブロックにデータを書き込むために必要なページの順序を示す。そして、メモリコア制御部12は、書き込み先ブロックに対する次のプログラム動作に対応するページアドレスをコントローラ2に通知する。
【0107】
したがって、コントローラ2は、不揮発性メモリ1によって指示されたページアドレスに書き込むべきデータを不揮発性メモリ1に転送するという処理だけを行えばよいので、不揮発性メモリ1がどのようなプログラム順序でページそれぞれをプログラムすることが必要なメモリであるかを知らなくてもよい。つまり、たとえ制御対象の不揮発性メモリ1の書き込み方式が変更されても、コントローラ2はこの不揮発性メモリ1によって指示されたページアドレスに対応するデータを不揮発性メモリ1に転送するという処理をしていれば正しいデータ書き込み動作を実行することが可能になる。
【0108】
よって、たとえ不揮発性メモリ1の書き込み方式が変更されても、変更された書き込み方式に対応する正しいプログラム順序にしたがってこの不揮発性メモリ1を制御可能な新たなコントローラを開発する必要がなくなり、このコントローラ2を使い続けることができる。
【0109】
一般には、不揮発性メモリ1として使用されるNAND型フラッシュメモリの世代は、例えば1年毎に変わる。このため、もしNAND型フラッシュメモリの世代が変わる度に新たなコントローラを開発すると、膨大なコスト増を招くことになる。
本実施形態では、複数のブロックから選択される一のブロックを示すブロックアドレスをコントローラ2から受信した場合、不揮発性メモリ2は、このブロックアドレスに基づいて選択されるページアドレスをコントローラ2に送信する。これにより、不揮発性メモリ1が、書き込み先ブロックに対する次のプログラム動作に対応するページアドレスをコントローラ2に通知するという新たな通信インタフェース仕様が提供される。したがって、不揮発性メモリ1を制御するために必要なコントローラ2側の処理負担を軽減でき、これによって、低コストで複数世代のNAND型フラッシュメモリに対応可能なメモリシステムを実現できる。
【0110】
また、本実施形態では、
図7AのステップS704で説明したように、メモリコア制御部12は、複数のブロックのうちの一つのブロックを書き込み先ブロックとして選択するための処理要求(Block open要求)をコントローラ2から受信した場合、この書き込み先ブロックに含まれる複数のページのうち、最初のブログラム順序番号(ブログラム順序番号0)に対応するページを示すページアドレス(例えばページアドレス0)を、この書き込み先ブロックに対する次のプログラム動作を実行するために必要なページを示すページアドレスとしてコントローラ2に通知する。
【0111】
また、本実施形態では、
図7AのステップS707で説明したように、メモリコア制御部12は、最初のブログラム順序番号(ブログラム順序番号0)に対応するページのページアドレス(例えばページアドレス0)を指定するプログラム要求とこのページアドレス0に書き込むべきデータとをコントローラ2から受信した場合、この書き込み先ブロックに含まれる複数のページのうち、次のブログラム順序番号(ブログラム順序番号1)に対応するページを示すページアドレス(例えばページアドレス3)を、この書き込み先ブロックに対する次のプログラム動作を行うために必要なページを示すページアドレスとして、コントローラ2に通知する。
【0112】
このように、Block open要求またはプログラム要求に対する返答として、次のプログラム動作を行うために必要なページを示すページアドレスが不揮発性メモリ1からコントローラ2に通知される。
したがって、コントローラ2は、Block open要求またはプログラム要求を発行する度に、次のプログラム動作を行うために必要なページを示すページアドレスを容易に知ることができる。
【0113】
また、コントローラ2は、不揮発性メモリ1から不要通知を受け取ることで、不要なデータを知ることができる。よって、コントローラ2は、各ワードラインに割り当てられたページの数、プログラム順序、書き込み方式等を知らずとも、書き込み先ブロックのデータ書き込み処理のために不要になったデータをバッファメモリ206から容易に削除することができる。
【0114】
さらに、本実施形態では、書き込み先ブロックに属する複数のワードラインの各々が複数ページを含み、メモリコア制御部12は、書き込み先ブロック内の各ワードラインに対して、複数回のプログラム動作を実行する。プログラム順序は、隣接するワードラインそれぞれに対するプログラム動作が互いに交互に実行されるように決められている。
【0115】
図3Aで説明したように、メモリコア制御部12は、コントローラ2から転送されるデータを保持するバッファ104を含む。そして、メモリコア制御部12は、コントローラ2から受信されるプログラム要求によって指定されるページアドレスに対するプログラム動作が、例えばワードラインWL0に対する2回目の以降のプログラム動作である場合、ワードラインWL0に対する以前のプログラム動作で使用したデータをバッファ104から読み出し、読み出したデータと、コントローラ2から転送される、この指定されたページアドレスに書き込むべきデータとを使用して、ワードラインWL0に対するプログラム動作を実行する。
【0116】
したがって、コントローラ2は不揮発性メモリ1によって指示されたページのデータしか不揮発性メモリ1に送信する必要が無く、たとえ各ワードラインへのデータ書き込みのために複数のページデータが必要とされる書き込み方式が不揮発性メモリ1に適用されている場合であっても、コントローラ2はその書き込み方式について知らずに済むので、不揮発性メモリ1とコントローラ2の間の通信回数や通信時間を削減することができる。
【0117】
具体的には、たとえ書き込み対象ページがロアーページ、ミドルページ、またはアッパーページのいずれであるかに応じてデータ書き込みに必要なページデータの数が変わる書き込み方式が不揮発性メモリ1に適用されている場合であっても、コントローラ2は、書き込み対象ページがロアーページ、ミドルページ、またはアッパーページのいずれであるかなどを考慮する必要は無く、不揮発性メモリ1によって通知されたページアドレスを指定するプログラム要求とこのページアドレスに書き込むべき1ページ分のライトデータとを不揮発性メモリ1に転送する処理のみを行えばよい。
【0118】
図12のフローチャートは、ブロックへの書き込み処理を開始することがコントローラ2から通知された場合に不揮発性メモリ1によって実行される処理の手順を示し、
図13のフローチャートは、ブログラム要求とライトデータとをコントローラ2から受信した場合に不揮発性メモリ1によって実行される処理の手順を示す。これら手順の詳細については、後述の第2実施形態において説明する。
(第2実施形態)
次に、第2実施形態について説明する。
【0119】
第2実施形態の不揮発性メモリ1およびコントローラ2それぞれの構成は第1実施形態の不揮発性メモリ1およびコントローラ2それぞれの構成と同様である。
第1実施形態では、コントローラ2は、不揮発性メモリ1によって指定されたページアドレスに対応するデータを不揮発性メモリ1に転送していた。
【0120】
しかし、コントローラ2の状況によっては、コントローラ2が、不揮発性メモリ1によって指定されたページアドレスに対応するデータを不揮発性メモリ1に転送できないケースも考えられる。そのような場合の処理内容を示したのが
図10である。
図10のステップS1001からステップS1008までの処理は
図7AのステップS701からステップS708までの処理と同じであるため、
図10のステップS1001からステップS1008までの処理の説明は省略する。
【0121】
ここでは、ステップS1007で不揮発性メモリ1がコントローラ2にブロック0に対する次のプログラム動作に必要なデータのページアドレスとして3を通知したにも関わらず、コントローラ2が、ブロック0のページアドレス1を指定するプログラム要求とブロック0のページアドレス1に書き込むべきデータ(ページ1のデータ)とを不揮発性メモリ1に転送した場合を考える(ステップS1009)。
【0122】
この時、不揮発性メモリ1のメモリコア制御部12は、コントローラ2から受信されたページ1のデータをバッファ104に格納し、
図5のバッファ管理テーブルに管理データを登録する(ステップS1010)。ページ1のデータのデータ必要期間は5である。
【0123】
次に、メモリコア制御部12は、コントローラ2に対して、ブロック0に対する次のプログラム動作に必要なデータのページアドレスが3であることを再度通知する(ステップS1011)。
そして、メモリコア制御部12は、ブロック0の次のプログラム動作に必要なデータ(ページアドレス3のデータ)がないため、ブロック0のページアドレス3に対するプログラム動作を行わない。
【0124】
さらに、コントローラ2がページアドレス2を指定するプログラム要求とページアドレス2に書き込むべきデータ(ページ2のデータ)とを不揮発性メモリ1に転送した場合も、メモリコア制御部12は、ブロック0のページアドレス1を指定するプログラム要求とブロック0のページアドレス1に書き込むべきデータ(ページ1のデータ)とを受信した場合と同様の処理を行う(ステップS1013、ステップS1014)。ページ2のデータのデータ必要期間は5である。
【0125】
その後、コントローラ2がブロック0のページアドレス3を指定するプログラム要求とブロック0のページアドレス3に書き込むべきデータ(ページ3のデータ)とを不揮発性メモリ1に転送した場合(ステップS1015)、メモリコア制御部12は、コントローラ2から受信したページ3のデータをバッファ104に格納し、
図5のバッファ管理テーブルに管理データを登録する(ステップS1016)。ページ3のデータのデータ必要期間は8である。
【0126】
メモリコア制御部12は、コントローラ2に対して、ブロック0に対する次のプログラム動作に必要なデータはページアドレス6のデータであることを通知する(ステップS1017)。
そして、メモリコア制御部12は、やっと受け取ったページ3のデータをブロック0のページ3に書き込むプログラム動作を行う(ステップS1018)。そして、メモリコア制御部12は、ブロック書き込み状態管理テーブル(
図6)のブロック0に関する次のプログラム順番号63の値を2に更新し、ブロック0に関する完了したプログラム順番号64の値を1に更新する。
【0127】
この時、
図5のバッファ管理テーブルの内容は
図11のようになっている。
すると、メモリコア制御部12は、次のプログラム順序番号は2であって、プログラム順序番号2に対応するページ1のプログラムに必要なデータはページアドレス0に対応するデータとページアドレス1に対応するデータの双方であること、そしてこれらページアドレス0に対応するデータとページアドレス1に対応するデータの双方が既にバッファ104内に存在することを知る。
【0128】
そこで、メモリコア制御部12は、ページ3のプログラム完了後に、バッファ104からページアドレス0に対応するデータとページアドレス1に対応するデータの双方を読み出し、これら読み出したページアドレス0に対応するデータとページアドレス1に対応するデータの双方を使用して、ページ1に対するプログラム動作を実行する(ステップS1019)。
【0129】
このように、不揮発性メモリ1のメモリコア制御部12は、次のプログラム動作に必要なページのデータではないデータがコントローラ2から転送された場合に、そのデータをバッファ104に格納し、次のプログラム順序番号が、この格納されたデータを必要とするプログラム順序番号になったら、コントローラ1からの指示を待たずに、このプログラム順序番号に対応するページに対するプログラム動作を自動的に実行する。
【0130】
以上、
図7Aおよび
図7Bと、
図10で説明した処理内容をフローチャートで示したものが
図12、
図13および
図14である。
以下、
図12、
図13、
図14の内容を説明する。
図12は、コントローラ2から不揮発性メモリ1に対してブロックへの書き込み処理を開始することが通知された時(S701,S1001)に不揮発性メモリ1によって実行される処理の手順を示す。
【0131】
コントローラ2から不揮発性メモリ1に対して、あるブロックアドレスを有するブロックへの書き込み処理を開始することが通知された場合、不揮発性メモリ1のメモリコア制御部12は、ブロック書き込み状態管理テーブル(
図6)内のこのブロックに関する列を初期化する(ステップS1201)。
【0132】
ここで言う初期化とは、書き込み中フラグ62をYに設定し、次のプログラム順番号63の値、つまり次のプログラム順序番号、を0に設定することを指す。
次に、不揮発性メモリ1のメモリコア制御部12は、コントローラ2に対して、次のプログラム順序番号0番に対応するページアドレス0を返す(ステップS1202)。次のプログラム順序番号0に対応するページアドレスは、
図4のテーブルから取得することができる。
【0133】
次に
図13を説明する。
図13は、コントローラ2から不揮発性メモリ1に対してプログラム要求とライトデータが転送された時に不揮発性メモリ1によって実行される処理の手順を示す。
コントローラ2からプログラム要求を受領した不揮発性メモリ1のメモリコア制御部12は、この受領したプログラム要求によって指定されたブロックが書き込み中のブロック(オープンされているブロック)であるかどうかを、ブロック書き込み状態管理テーブル(
図6)を参照することによって判定する(ステップS1301)。
【0134】
当該ブロックが書き込み中のブロックでなかった場合(ステップS1301,No)、メモリコア制御部12は、コントローラ2に対して、当該ブロックはまだ書き込み処理の開始通知を受けていないことを示すエラーを返し(ステップS1302)、処理を終了する。
【0135】
受領したプログラム要求によって指定されたブロックが書き込み中のブロックであった場合(ステップS1301,Yes)、メモリコア制御部12は、受領したプログラム要求によって指定されたページアドレスが、ブロック書き込み状態管理テーブル(
図6)の次のプログラム順番号63の値に対応するページアドレスに一致するかどうかを、
図4のテーブルを参照することによって判定する(ステップS1303)。
【0136】
受領したプログラム要求によって指定されたページアドレスが次のプログラム順番号63の値に対応するページアドレスに一致する場合(ステップS1303,Yes)、メモリコア制御部12は、コントローラ2から受領したデータをバッファ104に格納し(ステップS1304)、
図5のバッファ管理テーブルを更新する(ステップS1305)。
【0137】
図5のバッファ管理テーブルを更新する処理においては、データを格納したバッファ番号に対応するバッファ管理テーブル内の列について、メモリコア制御部12は、有効無効フラグ52を有効を示す値に設定し、ブロックアドレス53の値を書き込み対象ブロックアドレスに設定し、ページアドレス54の値を書き込み先ページアドレスに設定し、データ必要期間55の値を
図4のテーブルを参照して取得したプログラム順序番号に設定する。
【0138】
メモリコア制御部12は、
図5のバッファ管理テーブルの更新が終わると、
図6のブロック書き込み状態管理テーブルの次のプログラム順番号63の値を更新する(ステップS1306)。例えば、プログラム順序番号0に対応するプログラム要求およびデータがコントローラ2から不揮発性メモリ1に転送された場合には、次のプログラム順番号63の値、つまり次のプログラム順序番号、は1に更新される。
【0139】
そして、メモリコア制御部12は、コントローラ2に対して、このブロックに関する次のプログラム順番号63の更新された値に対応するページアドレスを返す(ステップS1307)。例えば、次のプログラム順番号63の値(プログラム順序番号)が1に更新されたならば、
図4より、この更新されたプログラム順序番号1に対応するページアドレスが3であることが決定され、このページアドレス3がコントローラ2に返される。
【0140】
そして、メモリコア制御部12は、ステップS1304でバッファ104に格納されたデータを使用して、コントローラ2から既に受信されているプログラム要求によって指定されたページに対するプログラム動作を開始する(ステップS1308)。
コントローラ2から受領したデータのページアドレスが次のプログラム順番号63の値に対応したページアドレスではなかった場合(ステップS1303,No)、メモリコア制御部12は、次のプログラム動作に必要なページのデータ以外のデータをバッファ104に格納しても次のプログラム動作に必要なページのデータをバッファ104に格納可能な空き領域(余裕)がバッファ104に存在するかどうかをチェックする(ステップS1309)。
【0141】
ステップS1309では、メモリコア制御部12は、例えば、次のプログラム順序番号に対応するデータ用の空き領域以外の別の空き領域がバッファ104に存在するかどうかをチェックしてもよい。つまり、メモリコア制御部12は、2つ以上の空き領域(2つ以上の空きバッファ)がバッファ104に存在するかどうかをチェックしてもよく、2つ以上の空き領域(2つ以上の空きバッファ)が存在すれば、バッファ104に余裕が存在すると判定してもよい。
【0142】
バッファ104に次のプログラム動作に必要なページのデータ以外のデータを格納できるだけの空き領域(余裕)が存在しない場合(ステップS1309,No)、メモリコア制御部12は、バッファ104に空き領域(余裕)ないことを示すエラーをコントローラ2に返す(ステップS1312)。
【0143】
一方、バッファ104に次のプログラム動作に必要なページのデータ以外のデータを格納できるだけの空き領域(余裕)が存在する場合(ステップS1309,Yes)、メモリコア制御部12は、コントローラ2から受領したデータをバッファ104に格納し(ステップS1310)、
図5のバッファ管理テーブルを更新する(ステップS1311)。
【0144】
ステップS1311およびS1312の処理の後は、いずれの場合も、メモリコア制御部12は、コントローラ2に対して、このブロックの次のプログラム順番号63の値に対応するページアドレスを返し(ステップS1313)、処理を完了する。
図14は、
図13のステップS1308で開始したプログラム動作が完了した時にメモリコア制御部12によって実行される処理の手順を示す。
【0145】
メモリコア制御部12は、ある書き込み先ブロックのあるページに対するプログラム動作が完了したことを検出すると、まず、ブロック書き込み状態管理テーブル(
図6)のこのブロックに関する完了したプログラム順番号64の値、つまり完了したプログラム順序番号、を更新する(ステップS1401)。
【0146】
次に、メモリコア制御部12は、
図5のバッファ管理テーブルを参照して、データ必要期間55にこの完了したプログラム順序番号が設定されたバッファがあるかどうかを調べる(ステップS1402)。データ必要期間55にこの完了したプログラム順序番号が設定されたバッファに格納されているデータは、この書き込み先ブロックのどのページに対するプログラム動作においても必要なくなったデータ(不要データ)である。
【0147】
データ必要期間55にこの完了したプログラム順順序番号が設定されたバッファがなければ(ステップS1402,No)、メモリコア制御部12は、処理を終了する。
データ必要期間55にこの完了したプログラム順序番号が設定された一つ以上のバッファがあった場合(ステップS1402,Yes)、メモリコア制御部12は、これらバッファ(バッファ104内の領域)を解放し、さらに、コントローラ2に対して、これらバッファに対応するページアドレスのデータが不要であることを示す返答を返す(ステップS1403)。これは
図7のステップS729に対応する処理である。
【0148】
その後、メモリコア制御部12は、完了したプログラム順序番号の次のプログラム順序番号に対応するページに対するプログラム動作、つまり次のプログラム動作、を実行するために必要な全てのデータがバッファ104内に既に存在しているかどうかを、
図5のバッファ管理テーブルを参照して調べる(ステップS1404)。次のプログラム動作を実行するために必要な全てのデータは、例えば、(1)次のプログラム動作がワードラインWL0の2回目のプログラム動作(2ndプログラム動作)に対応する場合には、ページ0のデータとページ1のデータであり、(2)次のプログラム動作がワードラインWL0の3回目のプログラム動作(3rdプログラム動作)に対応する場合には、ページ0のデータとページ1のデータとページ2のデータであり、(3)次のプログラム動作がワードラインWL1の1回目のプログラム動作(1stプログラム動作)に対応する場合には、ページ3のデータである。
【0149】
したがって、例えば、次のプログラム動作がワードラインWL0の2回目のプログラム動作(2ndプログラム動作)に対応する場合、メモリコア制御部12は、ページ0のデータ、ページ1のデータの双方がバッファ104内に存在するか否かに基づいて、次のプログラム動作を実行するために必要な全てのデータがバッファ104内に存在するかどうかを調べる。
【0150】
次のプログラム動作に必要な全てのデータがバッファ104内に存在しない場合(ステップS1404,No)、メモリコア制御部12は、処理を終了する。
一方、次のプログラム動作に必要な全てのデータがバッファ104内に存在する場合(ステップS1404,Yes)、メモリコア制御部12は、バッファ104内のこれらデータを使って、次のプログラム動作を自動的に開始する(ステップS1405)。これで一連の処理は完了となる。
【0151】
なお、ステップS1405で開始したプログラム動作が完了したら、再度ステップS1401からの処理が行われる。
以上のように、第2実施形態では、メモリコア制御部12は、コントローラ2に通知したページアドレスとは異なる別のページアドレスを指定するプログラム要求とこの別のページアドレスに対応するデータとをコントローラ2から受信した場合、この別のページアドレスを有するページに対するプログラム動作を実行せずに、受信したデータをバッファ104に格納する。これにより、たとえコントローラ2が、不揮発性メモリ1によって指定されたページとは異なるページのデータを不揮発性メモリ1に送信しても、このデータを破棄すること無く、この不揮発性メモリ1内のバッファ104に保持することができる。
【0152】
また、通知したページアドレスを指定するプログラム要求と通知したページアドレスを有するページに対応するデータとをコントローラ2から受信した場合、メモリコア制御部12は、通知したページアドレスを有するページに対するブログラム動作を実行する。そして、通知したページアドレスを有するページに対するブログラム動作を実行した後、次のブログラム動作が実行されるべき次のページに対応するデータがバッファ104に存在する場合、メモリコア制御部12は、次のページに対するプログラム動作を自動実行する。
【0153】
よって、たとえコントローラ2が、不揮発性メモリ1によって指定されたページとは異なるページに対応するデータを不揮発性メモリ1に送信しても、コントローラ2と不揮発性メモリ1との間の通信回数を増加させること無く、不揮発性メモリ1によって指定されたページとは異なるページに対応するデータを、正しいプログラム順序で書き込み先ブロックに書き込むことができる。
(第3実施形態)
次に、第3実施形態として、コントローラ2からの指示により、不揮発性メモリ1があるブロックから別のブロックにデータをコピーする構成を説明する。
【0154】
第3実施形態の不揮発性メモリ1およびコントローラ2それぞれの構成は、第1および第2実施形態の不揮発性メモリ1およびコントローラ2それぞれの構成と同様である。
ここで言うコピーとは、次のような処理のことを指す。
例えば
図15のようにブロックaとブロックbがあり、ブロックaに格納されているデータのうち、4つの記憶位置a10,a13,a20,a21にそれぞれ格納されている4つのデータが有効データであり、そしてブロックbに格納されているデータのうち、4つの記憶位置b00,b01,b02,b10にそれぞれ格納されている4つのデータが有効データであったとする。
【0155】
a10は、ブロックアドレスa、ページアドレス1、オフセット0を表している。同様に、b00は、ブロックアドレスb、ページアドレス0、オフセット0を表している。
この
図15におけるブロックaの有効データとブロックbの有効データを別のブロックであるブロックcにコピーすることを、ここではコピー処理と呼ぶこととする。このコピー処理は不揮発性メモリ1内部で実行される。つまり、メモリコア制御部12は、セルアレイ101のコピー元位置に格納されているデータ(有効データ)をセルアレイ101からバッファ104に読み出し、そして、このデータ(有効データ)を、バッファ104からセルアレイ101のコピー先位置(書き込み先ページ)に書き込むプログラム動作を実行する。
【0156】
このような処理のことは、ガーベッジコレクション(garbage collection)とも呼ばれる。
ここで、有効データとは、メモリシステムをアクセスするためにホストによって使用される論理アドレスのいずれかに関連付けられているデータを意味する。ある論理アドレスに関連付けられているデータはホストによって後にアクセスされる可能性があるデータでる。無効データとは、どの論理アドレスにも関連付けられていないデータを意味する。
【0157】
コントローラ2においては、論理アドレスそれぞれとこれら論理アドレスに対応するデータが格納されている不揮発性メモリ1内の記憶位置を示す物理アドレスそれぞれとの間のマッピングを管理するためのアドレス変換テーブルが管理されている。ある論理アドレスに対応する更新データは、この論理アドレスに対応する以前のデータが格納されている不揮発性メモリ1の記憶位置とは別の位置に書き込まれる。コントローラ2は、更新データが書き込まれた記憶位置を示す物理アドレスがこの論理アドレスに関連付けられるようにアドレス変換テーブルを更新する。各論理アドレスに対応する最新の物理アドレスに格納されているデータが有効データである。
【0158】
このコピー処理に関する、不揮発性メモリ1とコントローラ2との通信内容は
図16のようになる。
コントローラ2は、通常の書き込み処理と同様に、まず、メモリ1に対して、ブロックへの書き込み開始の通知を行う(ステップS1601)。ここではブロックcに対する書き込み開始通知を行う。ステップS1601では、コントローラ2は、不揮発性メモリ1内の複数のブロック(フリーブロック)の内の一つのブロックを書き込み先ブロック(ここでは、コピー先ブロックとしても参照される)として選択する要求(Block open要求)を不揮発性メモリ1に送信してもよい。この選択される書き込み先ブロックがブロックアドレスcを有するブロックcである場合には、コントローラ2は、Block open (c)を不揮発性メモリ1に送信する。ここで、Block open (c)の(c)は、ブロックアドレスcを表している。
【0159】
ブロックcへの書き込み開始通知を受領した不揮発性メモリ1のメモリコア制御部12は、ブロック書き込み状態管理テーブル(
図6)のブロックcの列を初期化し(ステップS1602)、コントローラ2に対して、ブロックcに対する次のプログラム動作を行うために必要なデータはページ0のデータであることを通知する(ステップS1603)。
【0160】
ステップS1603では、メモリコア制御部12は、ブロックcの次のプログラム順序番号に対応するページアドレス0をコントローラ2に通知する(Notify next page (c, 0))。
すると、コントローラ2は、書き込み先ブロック番号(ここではc)、書き込み先ページアドレス(ここでは0)、およびコピー元データの位置情報を指定するコピー要求(Copy (c, 0, a10, a13, a20, a21))を不揮発性メモリ1に送信する(ステップS1604)。
【0161】
図15の例では、ブロックaのa10,a13,a20,a21の4つの位置に有効データがあるので、コントローラ2はこれら位置をコピー元データの位置情報として不揮発性メモリ1に送る。
ステップS1604では、具体的には、コピーコマンド、書き込み先ブロックアドレス、書き込み先ページアドレス、コピー元データの位置情報がコントローラ2から不揮発性メモリ1に転送される。
【0162】
コピー要求(Copy (c, 0, a10, a13, a20, a21))を受信した不揮発性メモリ1のメモリコア制御部12は、コピー要求によって指定されたコピー元位置に格納されているデータをバッファ104に読み出し(S1605)、バッファ管理テーブル(
図5)を更新する(S1606)。
【0163】
例えば、バッファ番号0のバッファにこのデータを格納した場合は、メモリコア制御部12は、バッファ管理テーブル(
図5)のバッファ番号0に関する列の有効無効フラグ52を有効を示す値に設定し、この列のブロックアドレス51の値をcに設定し、この列のページアドレス54の値を0に設定し、この列のデータ必要期間55の値を5に設定する。
【0164】
そして、メモリコア制御部12は、コントローラ2に対して、ブロックcに対する次のプログラム動作を行うために必要なデータはページ3のデータであることを通知する(ステップS1607)。
ステップS1607では、メモリコア制御部12は、ブロックcの次のプログラム順序番号1に対応するページアドレス3をコントローラ2に通知する(Notify next page (c, 3))。
【0165】
その後、メモリコア制御部12は、バッファ104に読み出したデータを使用してブロックcのページ0に対するプログラム動作を開始する(ステップS1608)。そして、メモリコア制御部12は、ブロックcに関する、ブロック書き込み状態管理テーブル(
図6)の内容も更新する。
【0166】
次に、コントローラ2は、書き込み先ブロック番号(ここではc)、書き込み先ページアドレス(ここでは3)、およびコピー元データの位置情報を指定するコピー要求(Copy (c, 3, b00, b01, b02, b10))を不揮発性メモリ1に送信する(ステップS16009)。
【0167】
図15の例では、ブロックbのb00,b01,b02,b10の4つの位置に有効データがあるので、コントローラ2はこれら位置をコピー元データの位置情報として不揮発性メモリ1に送る。
コピー要求(Copy (c, 3, b00, b01, b02, b10))を受信した不揮発性メモリ1のメモリコア制御部12は、指定されたコピー元位置に格納されているデータをバッファ104に読み出し(S1610)、バッファ管理テーブル(
図5)を更新する(S1611)。
【0168】
例えば、バッファ番号1のバッファにこのデータを格納した場合は、メモリコア制御部12は、バッファ管理テーブル(
図5)のバッファ番号1に関する列の有効無効フラグ52を有効を示す値に設定し、この列のブロックアドレス51の値をcに設定し、この列のページアドレス54の値を3に設定し、この列のデータ必要期間55の値を8に設定する。
【0169】
そして、メモリコア制御部12は、コントローラ2に対して、ブロックcに対する次のプログラム動作を行うために必要なデータはページ1のデータであることを通知する(ステップS1612)。
その後メモリコア制御部12は、バッファ104に読み出したデータを使用してブロックcのページ3に対するプログラム動作を開始する(ステップS1613)。合わせて,ブロックcに関する、ブロック書き込み状態管理テーブル(
図6)の内容も更新する。
【0170】
このようにすることで、不揮発性メモリ1とコントローラ2の間で実際のデータを送受信することなしに、不揮発性メモリ1内のデータのコピーを行うことができ、通信内容の簡略化による処理時間の削減や消費電力の削減を図ることができる。
(第4実施形態)
次に、第4実施形態について説明する。
【0171】
第4実施形態の不揮発性メモリ1およびコントローラ2それぞれの構成は、第1~第3実施形態の不揮発性メモリ1およびコントローラ2に比し、不揮発性メモリ1のメモリコア制御部12が、
図17に示すように、誤り訂正符号(ECC)処理部116と誤り抑制符号(error mitigation code:EMC)処理部117を含んでいる点が異なっている。すなわち、第4実施形態では、不揮発性メモリ1のメモリコア制御部12内に誤り訂正符号(ECC)処理部116と誤り抑制符号(error mitigation code:EMC)処理部117とが設けられている。
【0172】
図17では、図示の簡単化のために、メモリコア制御部12内の幾つかの要素のみが図示されているが、この第4実施形態のメモリコア制御部12は、
図3Aで説明した全てのコンポーネントと、誤り訂正符号(ECC)処理部116と誤り抑制符号(EMC)処理部117とを含むことができる。
【0173】
誤り訂正符号(ECC)処理部116は、ECCエンコーダ116aとECCデコーダ116bとを含む。ECCエンコーダ116aは、書き込み先ブロックに書き込むべきデータ(ユーザデータ)を符号化してこのデータに誤り訂正符号を付加する誤り訂正符号化処理を実行する。ECCデコーダ116bは、セルアレイ101から読み出されたデータ(ユーザデータとECCとを含む符号化データ)を復号してこのデータに含まれる誤りを訂正する誤り訂正復号処理を実行する。
【0174】
誤り訂正符号化処理としては、RS(reed solomon)符号化、BCH(bose chaudhuri hocquenghem)符号化などを用いることができる。
誤り抑制符号(EMC)処理部117は、EMCエンコーダ117aとEMCデコーダ117bとを含む。EMCエンコーダ117aは、元データのデータパターン(ビットパターンとも云う)を誤りが生じ難いデータパターン、つまり誤りを抑制するデータパターン、に変換する誤り抑制符号化処理を行う。EMCデコーダ117bは、誤り抑制符号化処理によって符号化されたデータを復号して元データに戻す誤り抑制復号処理を行う。
【0175】
例えば、EMCエンコーダ117aは、‘0’または‘1’の出現頻度が偏った符号語を生成する符号化を行う。本説明では、このような符号化を誤り抑制符号化(error mitigating coding)と呼び、この誤り抑制符号化で用いる符号を誤り抑制符号(error mitigating code:EMC)と呼ぶ。
【0176】
ここで、‘0’の出現頻度とは、符号語を構成するビット列に‘0’が現れる回数(頻度)を意味する。‘1’の出現頻度とは、符号語を構成するビット列に‘1’が現れる回数(頻度)を意味する。したがって、‘0’または‘1’の出現頻度が偏った符号語とは、‘0’の個数(出現回数)と‘1’の個数(出現回数)とに差がある符号語を意味している。
【0177】
このような符号語を生成する符号化としては、固定ビット長のデータを符号化して固定ビット長の符号語を生成する方式と、固定ビット長のデータを符号化して可変ビット長の符号語を生成する方式と、可変ビット長のデータを符号化して固定ビット長の符号語を生成する方式とが存在する。以下、固定長のデータを符号化して固定長の符号語を生成する方式を固定長方式と呼ぶ。また、固定ビット長のデータを符号化して可変ビット長の符号語を生成する方式と、可変ビット長のデータを符号化して固定ビット長の符号語を生成する方式と、可変ビット長のデータを符号化して可変ビット長の符号語を生成する方式とを可変長方式と呼ぶ。
【0178】
可変長方式は、固定長方式に比べ、0と1との出現頻度の差をより大きくすることができる。そこで、EMCエンコーダ117aが行う符号化として可変長方式の符号化を用いてもよい。
可変長方式の符号化としては、Reverse Huffman符号化、Reverse Tunstall符号化、Reverse Tunstall Huffman符号化などのエントロピー符号化を例示することができる。Reverse Huffman符号化は、Huffman符号化の逆の処理となる符号化である。Reverse Tunstall Huffman符号化は、Tunstall Huffman符号化の逆の処理となる符号化である。Reverse Tunstall符号化は、Tunstall符号化の逆の処理となる符号化である。Huffman符号化およびTunstall符号化は、データ圧縮などに用いられる符号化である。Tunstall Huffman符号化は、Tunstall符号化した結果をさらにHuffman符号化する符号化である。
【0179】
また、誤り抑制符号化処理に用いることができるその他の符号化としては、メモリセルに書き込まれるデータパターンがセル間干渉を抑制するデータパターンとなるように書込み対象のデータを符号化するセル間干渉抑制符号化(ICI(inter-cell interference)-mitigating coding)や、メモリセルへ書き込まれるデータパターンがメモリセルの損耗を低減させるデータパターンとなるように書込み対象のデータを符号化する耐久性符号化(endurance coding)や、メモリセルへ書き込むデータ(すなわち符号語)内の1と0との割合を変化させることが可能な非対称符号化(asymmetric coding)などを例示することができる。
【0180】
例えば、TLCにおいては、各メモリセルは、互いに閾値電圧が異なる8状態のいずれかにプログラムされるが、例えば、最も高い閾値電圧に対応する状態のような誤りが生じやすい状態にプログラムされるメモリセルの数を低減するための符号化処理が、誤り抑制符号化処理として使用されてもよい。
【0181】
データ書き込み処理においては、メモリコア制御部12は、EMCエンコーダ117aを使用して、書き込み先ブロックに書き込むべきデータを誤り抑制符号化処理によって符号化することができ、そして誤り抑制符号化処理によって符号化されたデータを書き込み先ブロックの書き込み先ページに書き込むプログラム動作を実行することができる。
【0182】
さらに、メモリコア制御部12は、ECCエンコーダ116aを使用して、誤り抑制符号化処理によって符号化されたデータにECCを付加する誤り訂正符号化処理をさらに実行してもよく、誤り訂正符号化処理によって得られたデータ(誤り抑制符号化処理によって得られた符号化データ+ECC)を書き込み先ブロックの書き込み先ページに書き込むプログラム動作を実行してもよい。
【0183】
データ読み出し処理においては、メモリコア制御部12は、まず、ECCデコーダ116bを使用して、セルアレイ101から読み出されたデータに誤り訂正復号処理を実行する。そして、メモリコア制御部12は、EMCデコーダ117bを使用して、誤りが訂正されたデータを元データに戻す誤り抑制復号処理を実行する。
【0184】
ところで、セルアレイ101に格納されたデータは、時間経過などにより、読み出したときに誤りが生じるようになる。
したがって、特に第3実施形態のように不揮発性メモリ1内でデータのコピーを行う場合などにおいては、セルアレイ101から読み出されたデータに対してECCデコーダ116bを使用して不揮発性メモリ1内部で誤り訂正復号処理を行って、読み出されたデータに含まれる誤りの数を減らし、誤り訂正された後のデータを書き込み先ブロック(コピー先ブロック)に書きこむことが有効である。
【0185】
また、不揮発性メモリ1のセルアレイ101に書き込まれたデータの誤りの傾向は、メモリコア11の特性(セルアレイ101の特性)によって予めわかるため、そのような誤りが生じにくいようにデータを操作しておくことも効果がある。この「誤りが生じにくいようにデータを操作する」のが上述のEMC処理部117の責務である。
【0186】
例えば、
図16のコピー処理のシーケンスにおいて、S1601、S1604、またはS1609におけるコントローラ2から不揮発性メモリ1への処理要求時に、コントローラ2は、不揮発性メモリ1に対して、ECC処理部116を使用した誤り訂正処理の適用または非適用、EMC処理部117を使用した誤り抑制処理の適用または非適用を指示することにより、
図16のS1605またはS1610におけるデータ読み出し時に、誤り訂正復号処理または誤り抑制復号処理の少なくとも一方を不揮発性メモリ1内で行ったり、
図16のS1608またはS1613におけるプログラム時に、誤り訂正符号化処理または誤り抑制符号化処理の少なくとも一方を不揮発性メモリ1内で行うことが可能となる。
【0187】
また、
図7Aのデータ書き込み処理シーケンスにおいて、S701、S705、またはS709におけるコントローラ2から不揮発性メモリ1への処理要求時に、ECC処理部116を使用した誤り訂正処理の適用または非適用、EMC処理部117を使用した誤り抑制処理の適用または非適用を指示することにより、
図7AのS708またはS712におけるプログラム時に、誤り訂正符号化処理または誤り抑制符号化処理の少なくとも一方を不揮発性メモリ1内で行うことが可能となる。
【0188】
具体的には、メモリコア制御部12は、ECCデコーダ116bを有効にすべきことがコントローラ2によって指示された場合、コントローラ2からの処理要求(例えば、リード要求、またはコピー要求)に応じてセルアレイ101から読み出されたデータ(ユーザデータとECCとを含む符号化データ)に対する誤り訂正復号処理を、ECCデコーダ116bを使用して行う。
【0189】
また、メモリコア制御部12は、ECCエンコーダ116aを有効にすべきことがコントローラ2によって指示された場合、書き込み先ブロックに書き込むべきデータに誤り訂正符号を付加する誤り訂正符号化処理を、ECCエンコーダ116aを使用して行う。そして、メモリコア制御部12は、誤り訂正符号が付加されたデータ、つまりデータとECCとを含む符号化データ、を書き込み先ブロックの書き込み先ページに書き込むプログラム動作を行う。
【0190】
また、メモリコア制御部12は、EMCデコーダ117bを有効にすべきことがコントローラ2によって指示された場合、コントローラ2からの処理要求(例えば、リード要求、またはコピー要求)に応じてセルアレイ101から読み出される、誤り抑制符号化処理によって符号化されたデータを元のデータに戻す誤り抑制復号処理を、EMCデコーダ117bを使用して行う。
【0191】
また、メモリコア制御部12は、EMCエンコーダ117aを有効にすべきことがコントローラ2によって指示された場合、EMCエンコーダ117aを使用して、書き込み先ブロックに書き込むべきデータを誤り抑制符号化処理によって符号化する。そして、メモリコア制御部12は、誤り抑制符号化処理によって得られたデータを書き込み先ブロックの書き込み先ページに書き込むプログラム動作を行う。
【0192】
さらに、メモリコア制御部12は、ECCデコーダ116bおよびEMCデコーダ117bの双方を有効にすべきことがコントローラ2によって指示された場合、コントローラ2からの処理要求(例えば、リード要求、またはコピー要求)に応じてセルアレイ101から読み出される、データとECCとを含む符号化データに対する誤り訂正復号処理を、ECCデコーダ116bを使用して行い、そして誤りが訂正されたデータを元データに戻す誤り抑制復号処理をEMCデコーダ117bを使用して行う。
【0193】
またさらに、メモリコア制御部12は、ECCエンコーダ116aおよびEMCエンコーダ117aの双方を有効にすべきことがコントローラ2によって指示された場合、EMCエンコーダ117aを使用して、書き込み先ブロックに書き込むべきデータを誤り抑制符号化処理によって符号化し、そして誤り抑制符号化処理によって符号化されたデータに誤り訂正符号を付加する誤り訂正符号化処理をECCエンコーダ116aを使用して行う。そして、メモリコア制御部12は、誤り訂正符号化処理によって得られたデータ(誤り抑制符号化処理によって得られた符号化データ+ECC)を書き込み先ブロックの書き込み先ページに書き込むプログラム動作を実行する。
【0194】
なお、例えば、データ書き込み処理において、コントローラ2が、コントローラ2内部のECC部207を使用して生成した符号化データ(ユーザデータとECCとを含む符号化データ)をライトデータとして不揮発性メモリ1に送信するケースにおいては、コントローラ2は、不揮発性メモリ1内部の誤り訂正符号化処理がライトデータに非適用となるように、不揮発性メモリ1内のECCエンコーダ116aを無効にするように不揮発性メモリ1に指示してもよい。そして、コピー処理または読み出し処理時に、コントローラ2は、不揮発性メモリ1内部の誤り訂正符号化処理がリードデータに適用されるように、不揮発性メモリ1内のECCエンコーダ116aを有効にするように不揮発性メモリ1に指示してもよい。コピー処理においては、コントローラ2は、不揮発性メモリ1内のECCエンコーダ116aおよびECCデコーダ116bの双方を有効にするように不揮発性メモリ1に指示してもよい。
【0195】
図18は、ECC処理部116およびEMC処理部117を利用したデータコピー処理のシーケンスを示す。
図18のデータコピー処理は、
図16で説明したデータコピー処理に比し、
図16のS1604、S1605、S1608、S1609、S1610、S1613の処理の代わりに、S1604’、S1605’、S1608’、S1609’、S1610’、S1613’の処理が実行される点のみが異なっている。
図18のS1601~S1603、S1606~S1607、S1611~S1612の処理は、
図16のS1601~S1603、S1606~S1607、S1611~S1612で説明した処理と同じであるので、その説明を省略する。
【0196】
以下では、読み出し時にはECCデコーダ116bおよびEMCデコーダ117bの双方を有効にし、書き込み時にはECCエンコーダ116aおよびEMCエンコーダ117aの双方を有効にする場合を想定する。
S1604’: コントローラ2は、書き込み先ブロック番号(ここではc)、書き込み先ページアドレス(ここでは0)、およびコピー元データの位置情報を指定するコピー要求(Copy (c, 0, a10, a13, a20, a21))を不揮発性メモリ1に送信するとともに、不揮発性メモリ1に対して、ECCデコーダ116bおよびEMCデコーダ117bの双方を有効にすべきことを指示する。
【0197】
S1605’: メモリコア制御部12は、コピー要求によって指定されたコピー元位置に格納されているデータ(ユーザデータとECCとを含む符号化データ)を読み出し、この読み出された符号化データに対する誤り訂正復号処理をECCデコーダ116bを使用して行い、そして誤りが訂正されたデータ(誤り抑制符号化処理によって符号化されたデータ)を元データに戻す誤り抑制復号処理を、EMCデコーダ117bを使用して行う。そして、メモリコア制御部12は、誤り抑制復号処理によって得られた元データをバッファ104に格納する。なお、メモリコア制御部12は、コピー元位置に格納されているデータ(ユーザデータとECCとを含む符号化データ)をバッファ104に読み出し、このバッファ104のデータに対して誤り訂正復号処理および誤り抑制復号処理を実行してもよい。
【0198】
S1608’: メモリコア制御部12は、EMCエンコーダ117aを使用して、バッファ104内のデータ(誤り訂正復号処理、誤り抑制復号処理が実行されたデータ)を誤り抑制符号化処理によって符号化し、そして誤り抑制符号化処理によって符号化されたデータに誤り訂正符号を付加する誤り訂正符号化処理をECCエンコーダ116aを使用して行う。そして、メモリコア制御部12は、誤り訂正符号化処理によって得られたデータ(誤り抑制符号化処理によって得られた符号化データ+ECC)を書き込み先ブロックcの書き込み先ページ0に書き込むプログラム動作を実行する。
【0199】
S1609’、S1610’、S1613’においても、S1604’、S1605’、S1608’と同様の処理が実行される。
図19は、ECC処理部116およびEMC処理部117を利用したデータ書き込み処理のシーケンスを示す。
図19のデータ書き込み処理は、
図7Aで説明したデータ書き込み処理と比し、
図7AのS705、S708、S709、S712の処理の代わりに、S705’、S708’、S709’、S712’の処理が実行される点のみが異なっている。
図19のS701~S704、S706~S707、S710~S711の処理は、
図7AのS701~S704、S706~S707、S710~S711で説明した処理と同じであるので、その説明を省略する。
【0200】
以下では、書き込み時にECCエンコーダ116aおよびEMCエンコーダ117aの双方を有効にする場合を想定する。
S705’: 「次のページ」のページアドレス0を不揮発性メモリ1から受信したコントローラ2は、ページアドレス0を指定するプログラム要求(Write(0, 0))と、ページアドレス0を有するページに書き込むべきデータ(ページ0のデータ)とを不揮発性メモリ1に送信するとともに、不揮発性メモリ1に対して、ECCエンコーダ116aおよびEMCエンコーダ117aの双方を有効にすべきことを指示する。
【0201】
S708’: 不揮発性メモリ1のメモリコア制御部12は、EMCエンコーダ117aを使用して、ページ0のデータを誤り抑制符号化処理によって符号化し、そして誤り抑制符号化処理によって符号化されたデータに誤り訂正符号を付加する誤り訂正符号化処理をECCエンコーダ116aを使用して行う。そして、メモリコア制御部12は、誤り訂正符号化処理によって得られたデータ(誤り抑制符号化処理によって得られた符号化データ+ECC)を書き込み先ブロック0のページ0に書き込むプログラム動作を実行する。
【0202】
S709’: 「次のページ」のページアドレス3を不揮発性メモリ1から受信したコントローラ2は、ページアドレス3を指定するプログラム要求(Write(0, 3))と、ページアドレス3を有するページに書き込むべきデータ(ページ3のデータ)とを不揮発性メモリ1に送信するとともに、不揮発性メモリ1に対して、ECCエンコーダ116aおよびEMCエンコーダ117aの双方を有効にすべきことを指示する。
【0203】
S712’: 不揮発性メモリ1のメモリコア制御部12は、EMCエンコーダ117aを使用して、ページ3のデータを誤り抑制符号化処理によって符号化し、そして誤り抑制符号化処理によって符号化されたデータに誤り訂正符号を付加する誤り訂正符号化処理をECCエンコーダ116aを使用して行う。そして、メモリコア制御部12は、誤り訂正符号化処理によって得られたデータ(誤り抑制符号化処理によって得られた符号化データ+ECC)を書き込み先ブロック0のページ3に書き込むプログラム動作を実行する。
(第5実施形態)
次に、第5実施形態について説明する。
【0204】
第5実施形態の不揮発性メモリ1およびコントローラ2それぞれの構成は、第4実施形態の不揮発性メモリ1およびコントローラ2と実質的に同じである。しかし、第5実施形態の不揮発性メモリ1は、必ずしもECC処理部116とEMC処理部117の双方を含んでいなくてもよく、ECC処理部116を含み、EMC処理部117を含まない構成を有していてもよい。
【0205】
第5実施形態では、不揮発性メモリ1は、コントローラ2から指定されたブロックに格納されているデータの誤りビット数を調べる処理を行う。
図20は、コントローラ2と不揮発性メモリ1とによって実行される誤りビット数チェック処理の手順を示す。
【0206】
コントローラ2は、まず、不揮発性メモリ1に対してブロックアドレスを指定して、当該ブロックに格納されているデータの誤りビット数のチェックを不揮発性メモリ1に要求する(ステップS2001)。
ステップS2001では、例えば、コントローラ2は、全てのページにデータが書き込まれているブロックの内の一つのブロックのブロックアドレス(例えばブロックアドレス1)を指定するブロックチェック要求(Block check (1))を不揮発性メモリ1に送信してもよい。Block check (1)は、コントローラ2に対して、特定のブロックに格納されているデータの誤りビット数をチェックすべきことを指示するための処理要求である。Block check (1)の(1)は、ブロックアドレス1を表している。
【0207】
不揮発性メモリ1がこのブロックチェック要求(Block check (1))を受信した場合、不揮発性メモリ1のメモリコア制御部12は、不揮発性メモリ1内のECCデコーダ116bを使用して、ブロックアドレス1を有するブロック1に格納されているデータに含まれる誤りビット数を調べる(ステップS2002)。
【0208】
ステップS2002では、メモリコア制御部12は、ブロック1からデータを読み出し、ECCデコーダ116bを使用して、読み出されたデータに対して誤り訂正復号処理を行い、これによってこのデータに含まれる誤りビット数を調べる。ここで、このデータの誤りビット数は、このデータが訂正される前の誤りビットの数である。
【0209】
誤り訂正復号処理においては、誤り訂正不能になる可能性もある。ECCデコーダ116bによって訂正可能な最大誤りビット数はある上限値に固定されているからである。
ブロック内のどのページを読み出して誤りビット数をチェックするか、どのように読み出すか、誤り訂正処理の方式などは、不揮発性メモリ1が決めても良いし、予めコントローラ2から不揮発性メモリ1に設定しても構わない。例えば、各ブロック内の誤りが蓄積されやすいページ、または各ブロック内の誤りが蓄積されやすいワードラインが予め分かっている場合には、このページからデータを読み出してもよいし、またはこのワードラインに対応する幾つかのページそれぞれからデータを読み出してもよい。
【0210】
そして、メモリコア制御部12は、誤り訂正復号処理の結果に基づき、誤りビット数が許容範囲内だったかどうかなどのチェック結果判定を行い(ステップS2003)、誤りビット数に関するチェック結果をコントローラ2に返す(ステップS2004)。
【0211】
ステップS2004では、メモリコア制御部12は、ブロック1に格納されているデータの誤り訂正の成功(pass)または失敗(fail)を示すチェック結果をコントローラ2に通知してもよい(Notify check result (pass/fail))。あるいは、メモリコア制御部12は、ブロック1に格納されているデータの誤りビット数が閾値以上か否かを示すチェック結果をコントローラ2に通知してもよい。
【0212】
あるいは、ブロック0の幾つかのページそれぞれからデータを読み出した場合は、メモリコア制御部12は、あるページから読み出された第1のデータに対して誤り訂正復号処理を行い、これによってこの第1のデータに含まれる誤りビット数を調べる。さらに、メモリコア制御部12は、別のページから読み出された第2のデータに対して誤り訂正復号処理を行い、これによってこの第2のデータに含まれる誤りビット数を調べる。そして、メモリコア制御部12は、チェックされたこれら誤りビット数のうち、最も多い誤りビット数を、チェック結果としてコントローラ2に通知する。
【0213】
このようにすることで、不揮発性メモリ1に格納されているデータの誤りビット数がどのようになっているかを不揮発性メモリ1内でチェックすることができ、不揮発性メモリ1とコントローラ2の間の通信回数を減らせるほか、通信データ量を削減できることで消費電力の削減を図ることができる。
【0214】
なお、コントローラ2は不揮発性メモリ1から通知されるチェック結果に基づいて、誤りビット数が比較的多いブロックを特定できるので、コントローラ2は、この特定されたブロック内のデータを別のブロックにコピーする要求を不揮発性メモリ1に送信してもよい。
(第6実施形態)
次に、第6実施形態について説明する。
【0215】
第6実施形態の不揮発性メモリ1およびコントローラ2それぞれの構成は、第4実施形態の不揮発性メモリ1およびコントローラ2と実質的に同じである。しかし、第6実施形態の不揮発性メモリ1は、必ずしもECC処理部116とEMC処理部117の双方を含んでいなくてもよく、ECC処理部116を含み、EMC処理部117を含まない構成を有していてもよい。
【0216】
第6実施形態では、コントローラ2は、不揮発性メモリ1に対し、セルアレイ101からデータを読み出す時の最適読出し電圧レベル(最適読出しレベルとしても参照される)を設定するように要求する。つまり、コントローラ2は、セルアレイ101からデータ読み出しに使用する読み出し電圧レベルの調整を指示する処理要求を不揮発性メモリ1を送信する。
【0217】
不揮発性メモリ1がこの処理要求を受信した場合、不揮発性メモリ1のメモリコア制御部12は、あるワードライン(読み出し対象ワード)に印加する読み出し電圧レベルを変更しながら、このワードラインに接続された複数のメモリセルからデータを読み出す動作と、読み出されたデータの誤りビット数を不揮発性メモリ1内のECCデコーダ116bを用いて調べる動作とを繰り返すことによって、誤りビット数が最小となる新たな読み出し電圧レベルを最適読出し電圧レベルとして決定する。
【0218】
最適読出し電圧レベルの調整はブロック毎に行ってもよい。この場合、コントローラ2は、不揮発性メモリ1に対して、最適読出し電圧レベルを調整すべきブロックのブロックアドレスを指定してもよい。これにより、ブロック毎の最適読出し電圧レベルを不揮発性メモリ1内で決定することが可能となる。
【0219】
以下、
図21~
図22を参照して、セルアレイ101からデータ読み出しに使用する読み出し電圧レベルを調整する処理について説明する。
以下では、TLCを例示して読み出し電圧レベル調整処理を説明するが、本実施形態の読み出し電圧レベル調整処理はSLCに適用されてもよいし、MLCに適用されてもよいし、QLCに適用されてもよい。
【0220】
図21は、プログラムされた直後のメモリセルの閾値電圧分布と7つの読み出し電圧レベルとの関係を示す。
TLCにおいては、3ビットのデータが書き込まれた各メモリセルは、8つの状態(一つの状態、および7つのプログラム状態)のいずれかに設定される。これら8つの状態は、“Er”状態、“A”状態、“B”状態、“C”状態、“D”状態、“E”状態、“F”状態、“G”状態として参照される。これら“Er”、“A”、“B”、“C”、“D”、“E”、“F”、“G”状態は、互いに異なる閾値電圧レベルを有している。閾値電圧レベルは、“Er”、“A”、“B”、“C”、“D”、“E”、“F”、“G”状態の順で高くなる。
【0221】
セルアレイ101からデータを読み出すための読出し電圧レベルは、例えば、隣接する2つの閾値電圧分布の交差部に設定される。
すなわち、データ読み出し処理においては、“Er”、“A”、“B”、“C”、“D”、“E”、“F”、“G”状態を互いに分離するための7つの閾値電圧Vth0、Vth1、Vth2、Vth3、Vth4、Vth5、Vth6のいずれかが読み出し電圧レベルとして使用される。読み出し電圧レベルは、リード対象のメモリセルの集合が接続されているワードライン(読み出し対象ワードライン)に印加される電圧である。
【0222】
Vth0は“Er”状態に対応する閾値電圧分布と“A”状態に対応する閾値電圧分布との交点に対応する電圧である。Vth1は“A”状態に対応する閾値電圧分布と“B”状態に対応する閾値電圧分布との交差部に対応する電圧に設定される。Vth2は“B”状態に対応する閾値電圧分布と“C”状態に対応する閾値電圧分布との交差部に対応する電圧に設定される。Vth3は“C”状態に対応する閾値電圧分布と“D”状態に対応する閾値電圧分布との交差部に対応する電圧に設定される。Vth4は“D”状態に対応する閾値電圧分布と“E”状態に対応する閾値電圧分布との交差部に対応する電圧に設定される。Vth5は“E”状態に対応する閾値電圧分布と“F”状態に対応する閾値電圧分布の交差部に対応する電圧に設定される。Vth6は“F”状態に対応する閾値電圧分布と“G”状態に対応する閾値電圧分布の交差部に対応する電圧に設定される。
【0223】
図22は、各メモリセルがプログラムされてからある時間が経過した時の各メモリセルの閾値電圧分布を示す。
図22においては、プログラム直後の閾値電圧分布は一点鎖線で示されており、現在の閾値電圧分布は実線で示されている。プログラムから時間が経過した時の各メモリセルの閾値電圧分布は、プログラム直後の閾値電圧分布よりも低い電圧にシフトされる。したがって、プログラム直後の閾値電圧Vth0、Vth1、Vth2、Vth3、Vth4、Vth5、Vth6は読み出し電圧レベルとして最適ではなくなっている。
【0224】
なお、プログラム/イレーズサイクル数が増えたブロックにおいては、ブログラム直後においても、各メモリセルの閾値分圧分布は
図22の実線で示すような低い値に設定される場合がある。
図23は、
図22のシフトされた閾値分圧分布に対応する最適読み出し電圧レベルの例を示している。
【0225】
本実施形態では、シフトされた閾値分圧分布に対して適切な読み出し電圧レベルが不揮発性メモリ1内部で決定される。ここでは、閾値電圧Vth0’、Vth1’、Vth2’、Vth3’、Vth4’、Vth5’、Vth6’は最適読み出し電圧レベルを表している。
【0226】
あるブロックに対する閾値電圧Vth0’、Vth1’、Vth2’、Vth3’、Vth4’、Vth5’、Vth6’は、例えば、このブロックのプログラム/イレーズサイクル数に基づいて決定されてもよいし、このブロックがプログラムされてからの経過時間に基づいて決定されてもよい。
【0227】
あるいは、例えば、予め決められた幾つかの閾値電圧候補の中から、最適な閾値電圧を最適読み出し電圧レベルとして選択してもよい。
この場合、プログラム/イレーズサイクル数(またはプログラムされてからの経過時間)に対応する幾つかの閾値電圧セット(TLCの場合、各閾値電圧セットは6個の閾値電圧候補を含む)から、最適な閾値電圧セットを選択してもよい。
【0228】
図24は、最適読み出しレベルを決定する処理を示す。
ステップS3401において、コントローラ2は、最適読出し電圧レベルを設定するための処理要求を不揮発性メモリ1に送信する(Set optimal read level (1))。Set optimal read level (1)の(1)は、最適読出し電圧レベルが設定されるべきブロックのブロックアドレスを表す。
【0229】
この処理要求を受信した不揮発性メモリ1のメモリコア制御部12は、ブロックアドレス1を有するブロック1に属するワードラインの中の読み出し対象ワードラインに印加する読み出し電圧レベルを変更しながら、この読み出し対象ワードラインに接続された複数のメモリセルからデータを読み出す動作と、読み出されたデータの誤りビット数を不揮発性メモリ1のECCデコーダ116bを用いて調べる動作とを繰り返す(ステップS2402)。これにより、メモリコア制御部12は、誤りビット数が最小となる新たな読み出し電圧レベルをブロック1からデータを読み出すための最適読み出し電圧レベルとして決定する。
【0230】
そして、メモリコア制御部12は、決定された最適読み出し電圧レベルを不揮発性メモリ1内のレジスタまたはセルアレイ101に記録し(ステップS2403)、最適化処理が完了したことをコントローラ2に通知する(ステップS2404)。
このようにすることで、コントローラ2は不揮発性メモリ1がどのように構成されているかを知ることなく、不揮発性メモリ1のデータ保持能力が最大になるように読み出し電圧レベルを調整することができる。
(第7実施形態)
第7実施形態では、不揮発性メモリ1は複数のメモリコア11を備えており、不揮発性メモリ1は、これら複数のメモリコア11を独立して動作させることができる。
【0231】
図25は、第7実施形態の不揮発性メモリ1の構成を示す。
図25に示されているように、第7実施形態の不揮発性メモリ1は、互いに独立した動作可能なメモリコア11a、11b、11cを含む。これらメモリコア11a、11b、11cの各々は、
図3Aで説明したメモリコア11と同じ構造を有しており、複数のブロックを含むセルアレイを含む。
【0232】
さらに、この不揮発性メモリ1は、メモリコア制御部12a、12b、12cを含む。メモリコア制御部12a、12b、12cは、メモリコア11a、11b、11cにそれぞれ接続されている。
メモリコア制御部12aは、メモリコア11a内のセルアレイへのデータの書き込みおよびメモリコア11a内のセルアレイからのデータの読み出しを制御するように構成されたメモリコア制御回路として動作する。
【0233】
メモリコア制御部12aとメモリコア11aとのペアは、
図3Aで説明したメモリコア11とメモリコア制御部12とのペアと同じ動作を実行することができる。つまり、メモリコア制御部12aは、第1実施形態~第6実施形態で説明したメモリコア制御部12と同様の構成および能力を有している。メモリコア制御部12aとメモリコア11aとのペアは、1つのチップ(ダイ)によって実現されてもよい。
【0234】
メモリコア制御部12bは、メモリコア11b内のセルアレイへのデータの書き込みおよびメモリコア11b内のセルアレイからのデータの読み出しを制御するように構成されたメモリコア制御回路として動作する。
メモリコア制御部12bとメモリコア11bとのペアも、
図3Aで説明したメモリコア11とメモリコア制御部12とのペアと同じ動作を実行することができる。つまり、メモリコア制御部12bは、第1実施形態~第6実施形態で説明したメモリコア制御部12と同様の構成および能力を有している。メモリコア制御部12bとメモリコア11bとのペアも、1つのチップ(ダイ)によって実現されてもよい。
【0235】
メモリコア制御部12cは、メモリコア11c内のセルアレイへのデータの書き込みおよびメモリコア11c内のセルアレイからのデータの読み出しを制御するように構成されたメモリコア制御回路として動作する。
メモリコア制御部12cとメモリコア11cとのペアも、
図3Aで説明したメモリコア11とメモリコア制御部12とのペアと同じ動作を実行することができる。つまり、メモリコア制御部12cは、第1実施形態~第6実施形態で説明したメモリコア制御部12と同様の構成および能力を有している。メモリコア制御部12bとメモリコア11bとのペアも、1つのチップ(ダイ)によって実現されてもよい。
【0236】
メモリコア制御部12a、12b、12cは、不揮発性メモリ1内に含まれる入出力部13を介してコントローラ2との通信を実行する。メモリ・コントローラ通信線は、3つのチップイネーブル信号CE0n-CE2n、ライトイネーブル信号WEn、リードイネーブル信号REn、コマンドラッチイネーブル信号CLE、アドレスラッチイネーブル信号ALE、ライトプロテクト信号WPn、ライトイネーブル信号WEn、I/O信号<7:0>、3つのレディー/ビジー信号RB0n-RB2nを含んでいてもよい。
【0237】
第7実施形態の不揮発性メモリ1においては、メモリコア制御部12aとメモリコア11aとのペアと、メモリコア制御部12bとメモリコア11bとのペアと、メモリコア制御部12cとメモリコア11cとのペアは、互いに独立して動作することができる。したがって、これらペアは、第1実施形態~第6実施形態で説明した動作を並列に実行することができ、これによってメモリシステムの書き込みおよび読み出し性能等を十分に高めることができる。
【0238】
なお、第1実施形態~第7実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、本各実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
【0239】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0240】
1…不揮発性メモリ、2…コントローラ、3…ホストインターフェース、4…メモリ・コントローラインターフェース、5…電源線、201…ホストインターフェース制御部、202…コマンド制御部、203…バッファ制御部、204…データ割り付け管理部、205…メモリ制御部、206…バッファメモリ、207…ECC(誤り訂正符号)処理部、208…メモリインターフェース制御部、101…セルアレイ、102…ロウデコーダ、103…カラムデコーダ・キャッシュ・センスアンプ、104…バッファ、105…メモリコア用電源制御部、106…メモリコア操作部、107…コマンドデコーダ、108…コマンドキュー、109…コマンド実行制御部、110…データ処理部、111…バッファ制御部、112…入力バッファ、113…出力バッファ、114…入力バッファ、115…出力バッファ、11…メモリコア、12…メモリコア制御部、13…入出力部。