(57)【要約】【課題】パフォーマンスの悪化を抑制したメモリシステムを提供すること。【解決手段】第１メモリの周辺回路は、第１メモリが備える第１メモリセルトランジスタにプログラムされた第１データを第１メモリセルトランジスタのしきい値電圧と判定電圧との比較に基づいて取得するリード処理を実行する。誤り訂正回路は、リード処理によって取得された第１データである第２データの誤り訂正を実行する。メモリコントローラは、誤り訂正回路が第２データの誤り訂正に失敗した場合、第１履歴情報を取得し、判定電圧を第１履歴情報に対応した第２電圧値に変更して周辺回路にリード処理を再実行させる。第１履歴情報は、第１データがプログラムされてからの経過時間を示す第２履歴情報と第１メモリセルトランジスタに対するプログラム処理の実行回数を示す第３履歴情報とを含む。【選択図】図１１
2020009513.tif 000002
【特許請求の範囲】
【請求項１】
第１メモリセルトランジスタを備えるメモリセルアレイと、前記第１メモリセルトランジスタにプログラムされた第１データを前記第１メモリセルトランジスタのしきい値電圧と判定電圧との比較に基づいて取得するリード処理を実行する周辺回路と、を備える第１メモリと、
前記リード処理によって取得された前記第１データである第２データの誤り訂正を実行する誤り訂正回路と、
前記誤り訂正回路が前記第２データの誤り訂正に失敗した場合、第１履歴情報を取得し、前記第１履歴情報は、前記第１データがプログラムされてからの経過時間を示す第２履歴情報と前記第１メモリセルトランジスタに対するプログラム処理の実行回数を示す第３履歴情報とを含み、前記判定電圧を前記第２データの誤り訂正に失敗した際の設定値である第１電圧値から前記第１履歴情報に対応した第２電圧値に変更して前記周辺回路に前記リード処理を再実行させるメモリコントローラと、
を備えるメモリシステム。
【請求項２】
メモリセルトランジスタにデータがプログラムされてからの経過時間と前記メモリセルトランジスタに対するプログラム処理の実行回数と前記判定電圧との関係を規定する判定電圧情報が格納された第２メモリをさらに備え、
前記メモリコントローラは前記判定電圧情報を参照することによって前記第２電圧値を取得する、
請求項１に記載のメモリシステム。
【請求項３】
前記メモリコントローラは、前記第１データのプログラム処理の際にタイムスタンプを記録し、前記タイムスタンプに基づいて前記第２履歴情報を取得する、
請求項１に記載のメモリシステム。
【請求項４】
前記メモリセルアレイは、前記第１メモリセルトランジスタを含む複数の第２メモリセルトランジスタを備え、
前記第１メモリは、複数の記憶領域を備え、
前記複数の記憶領域のそれぞれは前記複数の第２メモリセルトランジスタに含まれる複数の第３メモリセルトランジスタによって構成され、
前記メモリコントローラは、前記複数の記憶領域のうちの前記第１メモリセルトランジスタを含む記憶領域である第１記憶領域に対してプログラム処理を実行する際に前記タイムスタンプを記録する、
請求項３に記載のメモリシステム。
【請求項５】
前記メモリセルアレイは、前記第１メモリセルトランジスタを含む複数の第２メモリセルトランジスタを備え、
前記第１メモリは、複数の記憶領域を備え、
前記複数の記憶領域のそれぞれは前記複数の第２メモリセルトランジスタに含まれる複数の第３メモリセルトランジスタによって構成され、
前記メモリコントローラは、前記複数の記憶領域のうちの前記第１メモリセルトランジスタを含む記憶領域である第１記憶領域に対するイレース処理の後に、前記周辺回路に前記第３履歴情報を前記第１記憶領域にプログラムさせ、前記第１記憶領域から前記第３履歴情報を取得する、
請求項１に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
従来、メモリセルトランジスタを有するメモリシステムが広く知られている。そのようなメモリシステムにおいては、リード処理においては、メモリセルトランジスタのしきい値電圧と判定電圧との比較に基づいて、そのメモリセルトランジスタに保持されるデータが判定される。
【０００３】
しかしながら、メモリセルトランジスタのしきい値電圧は、種々の要因によって変化し得る。これによって、データの誤判定（ビットエラー）が起こり得る。ビットエラーに対する１つの対策として、メモリシステムは、判定電圧の値を変更可能に構成される。メモリシステムは、リード処理においてビットエラーが発生した場合には、判定電圧の値を変更してリード処理をリトライすることができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−１５４１６９号公報
【特許文献２】特開２０１８−２８９５６号公報
【特許文献３】特開２０１２−２０３９５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
リード処理のリトライ回数の増加は、パフォーマンスの悪化の一因となる。
【０００６】
一つの実施形態は、パフォーマンスの悪化を抑制したメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
一つの実施形態によれば、メモリシステムは、第１メモリと、誤り訂正回路と、メモリコントローラとを備える。第１メモリは、メモリセルアレイと、周辺回路とを備える。メモリセルアレイは、第１メモリセルトランジスタを備える。周辺回路は、第１メモリセルトランジスタにプログラムされた第１データを第１メモリセルトランジスタのしきい値電圧と判定電圧との比較に基づいて取得するリード処理を実行する。誤り訂正回路は、リード処理によって取得された第１データである第２データの誤り訂正を実行する。メモリコントローラは、誤り訂正回路が第２データの誤り訂正に失敗した場合、第１履歴情報を取得し、判定電圧を第２データの誤り訂正に失敗した際の設定値である第１電圧値から第１履歴情報に対応した第２電圧値に変更して周辺回路にリード処理を再実行させる。第１履歴情報は、第１データがプログラムされてからの経過時間を示す第２履歴情報と第１メモリセルトランジスタに対するプログラム処理の実行回数を示す第３履歴情報とを含む。
【図面の簡単な説明】
【０００８】
【図１】図１は、第１の実施形態のメモリシステムの構成例を示す図である。
【図２】図２は、第１の実施形態のメモリチップの構成例を示す図である。
【図３】図３は、第１の実施形態のブロックＢＬＫの回路構成を示す図である。
【図４】図４は、第１の実施形態のブロックＢＬＫの一部領域の断面図である。
【図５】図５は、ＴＬＣモードでプログラムが実行された場合に第１の実施形態のメモリセルの取り得るしきい値電圧の一例を示す図である。
【図６】図６は、ＮＡＮＤ型フラッシュメモリのデータリテンション特性を説明するための図である。
【図７】図７は、ＳＬＣモードでプログラムが実行された場合に第１の実施形態のメモリセルの取り得るしきい値電圧の一例を示す図である。
【図８】図８は、プログラム回数情報やタイムスタンプがプログラムされる位置の第１の実施形態の例を示す図である。
【図９】図９は、第１の実施形態の判定電圧情報が規定する、経過時間と、プログラム処理の実行回数と、判定電圧と、の関係の一例を示す図である。
【図１０】図１０は、第１の実施形態のメモリシステムが実行するデータのプログラムの動作の一例を示すフローチャートである。
【図１１】図１１は、第１の実施形態のメモリシステムが実行するデータのリードの動作の一例を示すフローチャートである。
【図１２】図１２は、第２の実施形態の判定電圧情報の構成例を示す図である。
【発明を実施するための形態】
【０００９】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【００１０】
（第１の実施形態）
図１は、第１の実施形態のメモリシステムの構成例を示す図である。メモリシステム１は、ホスト（Host）２と接続可能に構成されている。ホスト２は、例えばパーソナルコンピュータ、携帯情報端末、またはサーバなどが該当する。メモリシステム１は、ホスト２の外部記憶装置として機能する。
【００１１】
メモリシステム１は、ホスト２からアクセス要求（リード要求およびライト要求）を受け付けることができる。各アクセス要求は、アクセス先を示す論理アドレスを伴う。論理アドレスは、メモリシステム１がホスト２に提供する論理アドレス空間内の位置を示す。メモリシステム１は、ライト要求とともに、書き込み対象のデータを受け付ける。
【００１２】
メモリシステム１は、ＮＡＮＤ型のフラッシュメモリ（ＮＡＮＤメモリ）１００と、ホスト２とＮＡＮＤメモリ１００との間のデータ転送を実行するメモリコントローラ２００と、を備えている。
【００１３】
ＮＡＮＤメモリ１００は、１以上のメモリチップ（Chip）１０１を含む。ここでは一例として、ＮＡＮＤメモリ１００は４つのメモリチップ１０１を含む。
【００１４】
図２は、第１の実施形態のメモリチップ１０１の構成例を示す図である。図示するようにメモリチップ１０１は、周辺回路１１０およびメモリセルアレイ１１１を備える。
【００１５】
メモリセルアレイ１１１は、各々が複数の不揮発性メモリセルトランジスタの集合である複数のブロックＢＬＫ（ＢＬＫ０、ＢＬＫ１、…）を備える。ブロックＢＬＫの各々は、それぞれがワード線およびビット線に関連付けられたメモリセルトランジスタの集合である複数のストリングユニットＳＵ（ＳＵ０、ＳＵ１、…）を備える。ストリングユニットＳＵの各々は、メモリセルトランジスタが直列接続された複数のＮＡＮＤストリング１１４を備える。なお、ストリングユニットＳＵ内のＮＡＮＤストリング１１４の数は任意である。
【００１６】
周辺回路１１０は、例えば、ロウデコーダ、カラムデコーダ、センスアンプ、ラッチ回路、および電圧発生回路を含む。周辺回路１１０は、メモリコントローラ２００からコマンドを受信すると、メモリセルアレイ１１１に対し、プログラム処理、リード処理、およびイレース処理のうちの当該コマンドに対応した処理を実行する。
【００１７】
図３は、第１の実施形態のブロックＢＬＫの回路構成を示す図である。なお、各ブロックＢＬＫは、同一の構成を有している。ブロックＢＬＫは、例えば４つのストリングユニットＳＵ０〜ＳＵ３を有する。各ストリングユニットＳＵは、複数のＮＡＮＤストリング１１４を含む。
【００１８】
ＮＡＮＤストリング１１４の各々は、例えば６４個のメモリセルトランジスタＭＴ（ＭＴ０〜ＭＴ６３）および選択トランジスタＳＴ１、ＳＴ２を含んでいる。メモリセルトランジスタＭＴは、制御ゲートと電荷蓄積層とを備え、データを不揮発に保持する。そして６４個のメモリセルトランジスタＭＴ（ＭＴ０〜ＭＴ６３）は、選択トランジスタＳＴ１のソースと選択トランジスタＳＴ２のドレインとの間に直列接続されている。なお、メモリセルトランジスタＭＴは、電荷蓄積層に絶縁膜を用いたＭＯＮＯＳ型であってもよいし、電荷蓄積層に導電膜を用いたＦＧ型であってもよい。さらに、ＮＡＮＤストリング１１４内のメモリセルトランジスタＭＴの個数は６４個に限定されない。
【００１９】
ストリングユニットＳＵ０〜ＳＵ３の各々における選択トランジスタＳＴ１のゲートは、それぞれ選択ゲート線ＳＧＤ０〜ＳＧＤ３に接続される。これに対してストリングユニットＳＵ０〜ＳＵ３の各々における選択トランジスタＳＴ２のゲートは、例えば選択ゲート線ＳＧＳに共通接続される。ストリングユニットＳＵ０〜ＳＵ３の各々における選択トランジスタＳＴ２のゲートは、ストリングユニットＳＵ毎に異なる選択ゲート線ＳＧＳ０〜ＳＧＳ３に接続されてもよい。同一のブロックＢＬＫ内にあるメモリセルトランジスタＭＴ０〜ＭＴ６３の制御ゲートは、それぞれワード線ＷＬ０〜ＷＬ６３に共通接続される。
【００２０】
ストリングユニットＳＵ内にある各ＮＡＮＤストリング１１４の選択トランジスタＳＴ１のドレインは、それぞれ異なるビット線ＢＬ（ＢＬ０〜ＢＬ（Ｌ−１）、但しＬは２以上の自然数）に接続される。また、ビット線ＢＬは、複数のブロックＢＬＫ間で各ストリングユニットＳＵ内にある１つのＮＡＮＤストリング１１４を共通に接続する。更に、各選択トランジスタＳＴ２のソースは、ソース線ＳＬに共通に接続されている。
【００２１】
つまりストリングユニットＳＵは、異なるビット線ＢＬに接続され、且つ同一の選択ゲート線ＳＧＤに接続されたＮＡＮＤストリング１１４の集合である。またブロックＢＬＫは、ワード線ＷＬを共通にする複数のストリングユニットＳＵの集合である。そしてメモリセルアレイ１１１は、ビット線ＢＬを共通にする複数のブロックＢＬＫの集合である。
【００２２】
周辺回路１１０によるプログラム処理およびリード処理は、１つのストリングユニットＳＵにおける１つのワード線ＷＬに接続されたメモリセルトランジスタＭＴに対して、一括して実行され得る。１つのストリングユニットＳＵにおける１つのワード線ＷＬに対してプログラム処理またはリード処理が実行され得る１ビットのデータの集まりを「ページ」と表記する。
【００２３】
周辺回路１１０によるイレース処理は、ブロックＢＬＫ単位で実行される。即ち、１つのブロックＢＬＫに格納された全てのデータは、一括にイレースされる。
【００２４】
図４は、第１の実施形態のブロックＢＬＫの一部領域の断面図である。本図に示されるように、ｐ型ウェル領域１０上に、複数のＮＡＮＤストリング１１４が形成されている。すなわち、ウェル領域１０上には、選択ゲート線ＳＧＳとして機能する例えば４層の配線層１１、ワード線ＷＬ０〜ＷＬ６３として機能する６４層の配線層１２、および選択ゲート線ＳＧＤとして機能する例えば４層の配線層１３が、順次積層されている。積層された配線層間には、図示せぬ絶縁膜が形成されている。
【００２５】
そして、これらの配線層１３、１２、１１を貫通してウェル領域１０に達するピラー状の導電体１４が形成されている。導電体１４の側面には、ゲート絶縁膜１５、電荷蓄積層（絶縁膜または導電膜）１６、およびブロック絶縁膜１７が順次形成され、これらによってメモリセルトランジスタＭＴ、並びに選択トランジスタＳＴ１およびＳＴ２が形成されている。導電体１４は、ＮＡＮＤストリング１１４の電流経路として機能し、各トランジスタのチャネルが形成される領域となる。そして導電体１４の上端は、ビット線ＢＬとして機能する金属配線層１８に接続される。
【００２６】
ウェル領域１０の表面領域内には、ｎ＋型不純物拡散層１９が形成されている。拡散層１９上にはコンタクトプラグ２０が形成され、コンタクトプラグ２０は、ソース線ＳＬとして機能する金属配線層２１に接続される。更に、ウェル領域１０の表面領域内には、ｐ＋型不純物拡散層２２が形成されている。拡散層２２上にはコンタクトプラグ２３が形成され、コンタクトプラグ２３は、ウェル配線ＣＰＷＥＬＬとして機能する金属配線層２４に接続される。ウェル配線ＣＰＷＥＬＬは、ウェル領域１０を介して導電体１４に電位を印加するための配線である。
【００２７】
以上の構成が、半導体基板に平行な第２方向Ｄ２に複数配列されており、第２方向Ｄ２に並ぶ複数のＮＡＮＤストリング１１４の集合によってストリングユニットＳＵが形成される。
【００２８】
なお、図２〜４に示された構成は一例である。メモリセルアレイ１１１の構成は、上記した構成に制限されない。例えば、メモリセルアレイ１１１は、ＮＡＮＤストリング１１４が２次元的に配列された構成を有していてもよい。
【００２９】
以降では、メモリセルトランジスタＭＴを、単に、メモリセルと表記する。
【００３０】
図５は、第１の実施形態のメモリセルの取り得るしきい値電圧の一例を示す図である。縦軸は、メモリセルの数（ビットカウント）を示しており、横軸は、しきい値電圧（Ｖｔｈ）を示している。なお、本図は、各メモリセルが３ビットのデータを保持するＴＬＣ（Ｔｒｉｐｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）と呼ばれるモードでデータがプログラムされた場合におけるしきい値電圧を示している。
【００３１】
ＴＬＣの場合、図５に示されるように、しきい値電圧の取り得る範囲は、８つの範囲に区分される。この８つの区分を、しきい値電圧が低いほうから順に、“Ｅｒ”ステート、“Ａ”ステート、“Ｂ”ステート、“Ｃ”ステート、“Ｄ”ステート、“Ｅ”ステート、“Ｆ”ステート、および“Ｇ”ステートと呼ぶことにする。各メモリセルのしきい値電圧は、プログラム処理の際に、周辺回路１１０によって、“Ｅｒ”ステート、“Ａ”ステート、“Ｂ”ステート、“Ｃ”ステート、“Ｄ”ステート、“Ｅ”ステート、“Ｆ”ステート、および“Ｇ”ステート、の何れかに属するように、制御される。
【００３２】
その結果、しきい値電圧に対するメモリセルの数をプロットした場合、メモリセルは、本図に示されるように、それぞれ異なるステートに属する８つの分布を形成する。
【００３３】
８つのステートは、それぞれ異なる３ビットのデータに対応する。一例では、“Ｅｒ”ステートは“１１１”に対応し、“Ａ”ステートは“１１０”に対応し、“Ｂ”ステートは“１００”に対応し、“Ｃ”ステートは“０００”に対応し、“Ｄ”ステートは“０１０”に対応し、“Ｅ”ステートは“０１１”に対応し、“Ｆ”ステートは“００１”に対応し、“Ｇ”ステートは“１０１”に対応する。このように、各メモリセルは、そのしきい値電圧が属するステートに対応したデータを保持することができる。
【００３４】
なお、１つのメモリセルに保持される３ビットのデータの各桁は、位置に対応した名称で表記される。例えばＬＳＢ（Least  Significant  Bit）はロアービット、ＭＳＢ（Most  Significant  Bit）はアッパービット、ＬＳＢとＭＳＢとの間のビットはミドルビット、と称される。同一のワード線に属する全てのメモリセルのロアービットの集合を、ロアーページと表記する。同一のワード線に属する全てのメモリセルのミドルビットの集合を、ミドルページと表記する。同一のワード線に属する全てのメモリセルのアッパービットの集合を、アッパーページと表記する。
【００３５】
しきい値電圧は、イレース処理によって“Ｅｒ”ステートまで低下せしめられる。また、しきい値電圧は、プログラム処理によって、“Ｅｒ”ステートに維持されるか、または“Ａ”ステート、“Ｂ”ステート、“Ｃ”ステート、“Ｄ”ステート、“Ｅ”ステート、“Ｆ”ステート、および“Ｇ”ステート、の何れかに至るまで、上昇せしめられる。
【００３６】
隣接する２つのステート間には、判定電圧が設定される。例えば、図５に例示されるように、“Ｅｒ”ステートと“Ａ”ステートとの間に判定電圧Ｖｒａが設定され、“Ａ”ステートと“Ｂ”ステートとの間に判定電圧Ｖｒｂが設定され、“Ｂ”ステートと“Ｃ”ステートとの間に判定電圧Ｖｒｃが設定され、“Ｃ”ステートと“Ｄ”ステートとの間に判定電圧Ｖｒｄが設定され、“Ｄ”ステートと“Ｅ”ステートとの間に判定電圧Ｖｒｅが設定され、“Ｅ”ステートと“Ｆ”ステートとの間に判定電圧Ｖｒｆが設定され、“Ｆ”ステートと“Ｇ”ステートとの間に判定電圧Ｖｒｇが設定される。つまり、８つのステートが設定されるＴＬＣモードでは、７点の判定電圧が設定される。リード処理においては、周辺回路１１０は、複数点の判定電圧を用いてメモリセルが属するステートを特定し、特定したステートをデータにデコードする。
【００３７】
ここで、データがプログラムされたメモリセルでは、電荷蓄積層１６に蓄積された電子のデトラップにより、そのメモリセルにデータがプログラムされてからの経過時間に応じてしきい値電圧が低下する。この現象は、ＮＡＮＤ型フラッシュメモリのデータリテンション特性として知られている。
【００３８】
図６は、ＮＡＮＤ型フラッシュメモリのデータリテンション特性を説明するための図である。本図では、図５にて説明した８つの分布のうちの一つの分布（“Ｅｒ”ステートにかかる分布を除く）の経時的な変化を示している。
【００３９】
図６に示されるように、データがプログラムされた直後（ｔ＝０）のメモリセルの分布（分布３ａ）は、電圧値Ｖｘ０をまたがっていない。よって、この状態においては、電圧値Ｖｘ０を判定電圧として用いれば、分布３ａに対応するデータを正しくリードすることが可能である。
【００４０】
しかしながら、データがプログラムされてからの時間がＴ１，Ｔ２，Ｔ３（０＜Ｔ１＜Ｔ２＜Ｔ３）のように経過した場合、各メモリセルのしきい値電圧の低下により、しきい値電圧の分布が３ｂ，３ｃ，３ｄのように負側にシフトする。
【００４１】
よって、例えばｔ＝Ｔ１，Ｔ２，Ｔ３において電圧値Ｖｘ０を判定電圧として用いた場合、しきい値電圧の分布の一部または全部がステートの境界にあるべき判定電圧を越えることから、データの誤判定が発生し得る。即ち、プログラムされたビットデータと異なるビットデータが読み出される、ビットエラーが発生し得る。
【００４２】
ビットエラーの発生を防ぐためには、判定電圧をしきい値電圧の分布の変化に応じてシフトさせる必要がある。例えば図６の場合、データがプログラムされてからの経過時間がＴ１，Ｔ２，Ｔ３のように進むに応じて判定電圧をＶｘ１，Ｖｘ２，Ｖｘ３のようにシフトさせれば、データリテンション特性に起因したビットエラーの発生を抑制することが可能である。
【００４３】
また、メモリセルのデータリテンション特性は、そのメモリセルに対して実行されたプログラム処理の回数に影響され得る。ＮＡＮＤ型のフラッシュメモリは、いったんデータがプログラムされたブロックは、イレース処理によってデータが一括に消去された後、再びデータのプログラムが可能となる。よって、プログラム処理の実行回数は、プログラム／イレースサイクルの実行回数、あるいはイレース処理の実行回数、と言い換えることも可能である。プログラム処理の実行回数は、ブロック内のメモリセルで共通と見なされ得る。
【００４４】
メモリセルに対するプログラム処理は、メモリセルに対してストレスを与える。メモリセルに対して実行されたプログラム処理の回数が増加するに従って、そのメモリセルの電荷蓄積層１６に蓄積された電子のデトラップが起きやすくなる。その結果、データリテンション特性に起因するしきい値電圧の変化率が大きくなる。つまり、あるブロックに対するプログラム処理の実行回数が増加するにつれて、そのブロックの各メモリセルは、データがプログラムされてからビットエラーを起こすまでの時間が短くなってくる。
【００４５】
このように、しきい値電圧の分布は、種々の要因で変化する。しきい値電圧の分布の変化によって、ビットエラーが発生したり、ビットエラー数が増加したりする。
【００４６】
ＮＡＮＤ型のフラッシュメモリが搭載されたメモリシステムは、一般に、誤り訂正機能を備えている。ビットエラーによって化けたデータは、誤り訂正機能によって正しいデータに訂正される。しかしながら、ビットエラーの数や割合が誤り訂正機能の能力を超えると、正しいデータが得られず、リード処理が失敗する。
【００４７】
第１の実施形態と比較される例（比較例）では、判定電圧として複数の候補値が予め用意されており、メモリコントローラは、リード処理が失敗した場合、複数の候補値のそれぞれを予め決められた順番で判定電圧として適用しながらリード処理のリトライ（リトライリード処理）を繰り返す。しかしながら、この比較例の方法によれば、リード処理が成功するまでに多数回のリトライリード処理を要する場合があり、リトライリード処理を繰り返した回数の分だけパフォーマンス（特にリードレイテンシ）が悪化する。
【００４８】
第１の実施形態では、メモリコントローラ２００は、メモリセルにデータがプログラムされてから経過した時間（以降、単に経過時間と表記することがある）と、メモリセルに対して実行されたプログラム処理の回数と、ビットエラーの発生を抑制できる判定電圧の推定値と、の対応関係を示す情報（図１の判定電圧情報２０６）を予め保持しておく。リトライリード処理においては、メモリコントローラ２００は、リード位置のメモリセルにかかる経過時間とプログラム処理の実行回数とを、そのメモリセルにかかる履歴情報として取得する。そして、メモリコントローラ２００は、判定電圧情報２０６を参照することによって、履歴情報に対応した電圧値を判定電圧の新しい設定値として取得し、判定電圧を現在の設定値から当該新しい設定値に変更（シフト）する。
【００４９】
メモリコントローラ２００が上記のように構成されることで、リード処理が失敗した後、１回のリトライリード処理で正しいデータを取得することが可能となる。即ち、第１の実施形態によれば、比較例に比べてパフォーマンスの悪化を抑制することが可能となる。
【００５０】
なお、メモリコントローラ２００は、プログラム処理の実行回数やデータがプログラムされた時刻（タイムスタンプ）をＮＡＮＤメモリ１００に記録しておく。そして、メモリコントローラ２００は、判定電圧の新しい設定値を取得する際には、ＮＡＮＤメモリ１００に記録された記録に基づき、プログラム処理の実行回数やデータがプログラムされてからの経過時間を取得する。
【００５１】
ここで、メモリコントローラ２００は、プログラム処理の実行回数やタイムスタンプを、ＮＡＮＤメモリ１００にＳＬＣ（Ｓｉｎｇｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）モードでプログラムする。ＳＬＣモードは、各メモリセルが１ビットのデータを保持するモードである。
【００５２】
図７は、ＳＬＣモードでプログラムが実行された場合に第１の実施形態のメモリセルの取り得るしきい値電圧の一例を示す図である。縦軸は、メモリセルの数、即ちビットカウントを示しており、横軸は、しきい値電圧を示している。
【００５３】
ＴＬＣモードの場合、しきい値電圧の取り得る範囲は８つの範囲に区分される（図５参照）。これに対し、ＳＬＣモードの場合、図７に示されるように、しきい値電圧の取り得る範囲は、“Ｅｒ”ステートおよび“Ａ”ステートの２つの範囲に区分される。各メモリセルのしきい値電圧は、プログラム処理の際に、周辺回路１１０によって、“Ｅｒ”ステートに維持されるか、または“Ａ”ステートに属するように、制御される。“Ｅｒ”ステートには、“０”または“１”が対応付けられており、“Ａ”ステートには“０”および“１”のうちの“Ｅｒ”ステートに対応付けられた値と異なる値が対応付けられており、これによって各メモリセルは１ビットのデータを保持することができる。
【００５４】
ＳＬＣモードによれば、各ステートが、ＴＬＣモードに比べてより広い範囲を占めることが可能であるので、ＴＬＣモードに比べてしきい値電圧の制御が簡単である。よって、ＳＬＣモードの場合、ＴＬＣモードの場合に比べてプログラム処理にかかる時間を短縮することが可能である。また、ＳＬＣモードによれば、“Ｅｒ”ステートに属する分布と“Ａ”ステートに属する分布との間に十分なマージン（図７のマージン４）を持たせることが可能である。これによって、しきい値電圧の変化に対する耐性（換言するとデータの信頼性）を、ＴＬＣモードの場合に比べて向上させることができる。
【００５５】
第１の実施形態では、メモリコントローラ２００は、ユーザデータ（ホスト２から送られてきたデータ）をＴＬＣモードでプログラムし、プログラム処理の実行回数やタイムスタンプをＳＬＣモードでプログラムする。これによって、ユーザデータのリード処理が失敗するような状況においても、プログラム処理の実行回数やタイムスタンプのリード処理が失敗することが防止される。
【００５６】
また、第１の実施形態では、プログラム処理の実行回数は、一例として、ブロック毎にカウントされ、記録される。また、タイムスタンプは、ワード線毎に記録される。なお、プログラム処理の実行回数のカウントの単位およびタイムスタンプの記録の単位はこれらに限定されない。
【００５７】
以降、ＮＡＮＤメモリ１００に記録されるプログラム処理の実行回数を、プログラム回数情報と表記する。
【００５８】
図８は、プログラム回数情報やタイムスタンプがプログラムされる位置の第１の実施形態の例を示す図である。本図に例示されるように、プログラム回数情報やタイムスタンプは、各ブロックの先頭のワード線にプログラムされる。ブロックの先頭のワード線は、ブロック内で最も若番の物理アドレスが割り当てられたワード線をいい、通常は、そのブロック内で最初にプログラム処理が実行される。物理アドレスの順番は、ワード線の物理的な並び順と対応していてもよいし、対応していなくてもよい。
【００５９】
まず、ブロックの先頭のワード線の所定位置に、プログラム回数情報がプログラムされる。プログラム回数情報がプログラムされた位置に後続する位置には、同一ブロック内の２番目以降のワード線にプログラム処理が実行される毎に、タイムスタンプが順次プログラムされる。各タイムスタンプの格納位置の順番は、各ワード線の並び順と対応する。これによって、各ワード線にデータが書き込まれた時刻を示すタイムスタンプがプログラムされた位置が特定可能となっている。
【００６０】
なお、プログラム回数情報やタイムスタンプは、前述したように、ＳＬＣモードでプログラムされる。また、ユーザデータは、ＴＬＣモードでプログラムされる。
【００６１】
各ワード線の末尾には、その位置よりも前の位置にプログラムされたデータ（プログラム回数情報、タイムスタンプまたはユーザデータ）から生成された誤り訂正符号がプログラムされる。
【００６２】
このように、ブロックの先頭のワード線の所定位置よりも後の部分に、プログラム回数情報、ワード線毎のタイムスタンプ、および誤り訂正符号が格納される。ブロックの先頭のワード線のプログラム回数情報の格納位置よりも前の部分は、ユーザデータが格納される領域として使用される。なお、ブロックの先頭のワード線に対しても、ユーザデータはＴＬＣモードでプログラムされ得る。
【００６３】
なお、プログラム回数情報やタイムスタンプがプログラムされる位置は、図８に示される位置に限定されない。プログラム回数情報やタイムスタンプの記録のタイミングやプログラム回数情報やタイムスタンプの記録の単位に応じてプログラム回数情報やタイムスタンプがプログラムされる位置は種々に変更され得る。
【００６４】
例えば、プログラム回数情報やタイムスタンプは、各ブロックの末尾のワード線にプログラムされてもよい。末尾のワード線は、ブロック内で最も老番の物理アドレスが割り当てられたワード線をいう。例えば、あるブロックに関するプログラム回数情報やタイムスタンプが、揮発性の記憶領域（例えば図１のＲＡＭ２０２）に保持され、そのブロックの末尾から一つ前のワード線までユーザデータのプログラム処理が完了すると、プログラム回数情報やタイムスタンプは揮発性の記憶領域からそのブロックの末尾のワード線に転送される。
【００６５】
図１に説明を戻す。メモリコントローラ２００は、ホストインタフェース（Host  I/F）２０１と、ＲＡＭ（Random  Access  Memory）２０２と、ＣＰＵ（Central  Processing  Unit）２０３と、ＮＡＮＤＣ２０４と、ＥＣＣ（Error  Correction  Circuit）２０５と、を備える。
【００６６】
メモリコントローラ２００は、例えばＳｏＣ（System-On-a-Chip）として構成され得る。メモリコントローラ２００は、複数のチップによって構成されてもよい。メモリコントローラ２００は、ＣＰＵ２０３に代えて、ＦＰＧＡ（field-programmable  gate  array）やＡＳＩＣ（application  specific  integrated  circuit）を備えていてもよい。即ち、メモリコントローラ２００は、ソフトウェア、ハードウェア、またはこれらの組み合わせによって構成され得る。
【００６７】
ＲＡＭ２０２は、バッファ、あるいはＣＰＵ２０３のワークエリアとして使用されるメモリである。ＲＡＭ２０２を構成するメモリの種類は、特定の種類に限定されない。例えば、ＲＡＭ２０２は、ＤＲＡＭ（Dynamic  Random  Access  Memory）、ＳＲＡＭ（Static  Random  Access  Memory）、またはこれらの組み合わせによって構成される。
【００６８】
ＲＡＭ２０２には、判定電圧情報２０６が格納される。判定電圧情報２０６は、前述したように、経過時間と、プログラム処理の実行回数と、判定電圧と、の対応関係を規定する情報である。
【００６９】
図９は、第１の実施形態の判定電圧情報２０６が規定する、経過時間と、プログラム処理の実行回数と、判定電圧と、の関係の一例を示す図である。なお、実際には、判定電圧情報２０６は、７点の判定電圧（Ｖｒａ〜Ｖｒｇ）のそれぞれについて用意される。ここでは説明をわかりやすくするために、Ｖｒａ〜Ｖｒｇのそれぞれについて用意された判定電圧情報２０６のうちの１つを示す。
【００７０】
図９に例示されるように、ビットエラーの発生を抑制するための判定電圧は、プログラム完了時からの経過時間に応じて減少する。また、プログラム処理の実行回数が多い場合、プログラム処理の実行回数が少ない場合に比べて、経過時間に対する判定電圧の減少率が大きくなっている。
【００７１】
例えば、プログラム処理の実行回数が少ない場合、曲線５ａで規定される関係が使用される。プログラム処理の実行回数が多い場合、曲線５ｂで規定される関係が使用される。曲線５ｂは、曲線５ａに比べて、経過時間に対する判定電圧の減少率が大きい。
【００７２】
判定電圧情報２０６は、実験または計算によって予め求められており、不揮発性の記憶領域（例えばＮＡＮＤメモリ１００）に格納されている。ＣＰＵ２０３は、例えば、メモリシステム１の起動時に当該判定電圧情報２０６をＲＡＭ２０２にロードして、ＲＡＭ２０２にロードされた当該判定電圧情報２０６を使用する。
【００７３】
なお、判定電圧情報２０６は、ＮＡＮＤメモリ１００に格納され、ＣＰＵ２０３は、ＮＡＮＤメモリ１００に格納された判定電圧情報２０６を使用してもよい。
【００７４】
また、判定電圧情報２０６のデータ構造は、特定のデータ構造に制限されない。判定電圧情報２０６は、テーブル、数式、またはこれらを組み合わせたデータとして用意され得る。判定電圧情報２０６は、ファームウェアプログラムに条件分岐構文や数式として組み込まれてもよい。判定電圧情報２０６は、離散データとして用意されてもよいし、連続データとして用意されてもよい。判定電圧情報２０６は、階層化されたテーブル群として用意されてもよい。
【００７５】
また、図９に示した、経過時間と、プログラム処理の実行回数と、判定電圧と、の関係は、あくまでも一例である。経過時間と、プログラム処理の実行回数と、判定電圧と、の関係は、判定電圧情報２０６によって任意に規定される。
【００７６】
再び図１に説明を戻す。ホストインタフェース２０１は、ホスト２との間の通信インタフェースの制御を実行する。ホストインタフェース２０１は、ＣＰＵ２０３による制御の下で、ホスト２とＲＡＭ２０２との間のデータ転送を実行する。ＮＡＮＤＣ２０４は、ＣＰＵ２０３による制御の下で、ＮＡＮＤメモリ１００とＲＡＭ２０２との間のデータ転送を実行したりする。
【００７７】
ＣＰＵ２０３は、ホストインタフェース２０１、ＲＡＭ２０２、ＮＡＮＤＣ２０４、およびＥＣＣ２０５を制御する。ＣＰＵ２０３は、不揮発性の記憶領域（例えばＮＡＮＤメモリ１００）に予め格納されているファームウェアプログラムを実行することによって、上記した各種構成要素の制御を実現する。
【００７８】
ＥＣＣ２０５は、誤り訂正回路の一例である。ＥＣＣ２０５は、ＮＡＮＤメモリ１００に送られるデータ（プログラム処理の実行回数、タイムスタンプ、またはユーザデータ）を符号化する。符号化は、誤り訂正符号による符号化である。ＥＣＣ２０５は、ＮＡＮＤメモリ１００から送られてきたデータに対し、復号化を実行し、それによってビットエラーの検出と訂正とを実施する。ＥＣＣ２０５は、ビットエラーの訂正に失敗した場合、その旨をＣＰＵ２０３に通知する。
【００７９】
ＥＣＣ２０５が使用する符号化の方式は、特定の方式に限定されない。一例では、符号化の方式として、ＬＤＰＣ（Low  Density  Parity  Check）が採用され得る。
【００８０】
また、ＥＣＣ２０５による符号化／復号化の単位となるデータブロックのサイズは、特定のサイズに限定されない。一例では、ＥＣＣ２０５は、ページ単位で符号化／復号化を実施する。符号化によって生成された誤り訂正符号は、例えば各ワード線の末尾にプログラムされる（図８参照）。
【００８１】
次に、図１０および図１１を用いて第１の実施形態のメモリシステム１の動作について説明する。
【００８２】
図１０は、第１の実施形態のメモリシステム１が実行するデータのプログラムの動作の一例を示すフローチャートである。
【００８３】
まず、メモリコントローラ２００は、書き込み先のブロックを設定する。具体的には、メモリコントローラ２００（例えばＣＰＵ２０３）は、フリーブロックのうちから、データの書き込み先とするブロックを選択する（Ｓ１０１）。
【００８４】
なお、フリーブロックは、そのブロックに書き込まれた全てのユーザデータが無効化されたブロックをいう。フリーブロックは、転記処理によって生成される。転記処理は、ガベージコレクションおよびウェアレベリングを含む。
【００８５】
ガベージコレクションは、あるブロック（第１のブロックと表記する）に格納されたデータのうち、有効なデータを他のブロック（第２のブロックと表記する）に転記し、その後、第１のブロックに格納された全てのデータを無効と見なす処理である。ガベージコレクションによって、第１のブロックは、フリーブロックとなる。
【００８６】
ウェアレベリングは、プログラム処理の実行回数を複数のブロック間で平準化するために、ブロック間でデータを転記する処理である。ウェアレベリングによるデータの転記元となったブロックは、データの転記後、フリーブロックとなる。
【００８７】
フリーブロックは、フリーブロックプールに登録されて管理される。メモリコントローラ２００は、フリーブロックプールに登録されている１以上のブロックのうちから、対象のブロックを選択する。
【００８８】
なお、図１０の説明において、Ｓ１０１の処理によって選択されたブロックを、対象のブロックと表記する。また、対象のブロックを含むメモリチップ１０１を、対象のメモリチップ１０１と表記する。
【００８９】
Ｓ１０１の処理の後、メモリコントローラ２００は、対象のブロックから、プログラム回数情報をＳＬＣモードでリードする（Ｓ１０２）。
【００９０】
例えばメモリコントローラ２００は、対象のメモリチップ１０１に対し、プログラム回数情報が格納された位置の指示とＳＬＣモードの指示を含むリードコマンドを送信する。プログラム回数情報が格納された位置は、図８の例では、対象のブロックの先頭のワード線の中ほどに設定された所定位置である。対象のメモリチップ１０１では、周辺回路１１０は、リードコマンドに応じて、指示された位置に対してＳＬＣモードでのリード処理を実行する。これによって、周辺回路１１０は、プログラム回数情報を取得する。周辺回路１１０は、当該取得したプログラム回数情報をメモリコントローラ２００に送る。
【００９１】
Ｓ１０２の処理に続いて、メモリコントローラ２００は、対象のブロックに格納された全てのデータをイレースする（Ｓ１０３）。
【００９２】
例えばメモリコントローラ２００は、対象のブロックの指示を含むイレースコマンドを対象のメモリチップ１０１に送信する。対象のメモリチップ１０１では、周辺回路１１０は、イレースコマンドに応じて、対象のブロックに対するイレース処理を実行する。これによって、対象のブロックに含まれる各メモリセルのしきい値電圧が、Ｅｒステートまで低下せしめられ、対象のブロックは、データが格納されていない状態となる。
【００９３】
Ｓ１０３の処理に続いて、メモリコントローラ２００は、プログラム回数情報を１だけインクリメントする（Ｓ１０４）。そして、メモリコントローラ２００は、プログラム回数情報（インクリメント後のプログラム回数情報）を対象のブロックにＳＬＣモードでプログラムする（Ｓ１０５）。
【００９４】
例えばメモリコントローラ２００は、プログラム回数情報と当該プログラム回数情報を格納する位置の指示とＳＬＣモードの指示とを含むプログラムコマンドを対象のメモリチップ１０１に送信する。プログラム回数情報を格納する位置は、図８の例では、対象のブロックの先頭のワード線の中ほどに設定された所定位置である。対象のメモリチップ１０１では、周辺回路１１０は、プログラムコマンドに応じて、指示された位置に対してＳＬＣモードでプログラム回数情報をプログラムするプログラム処理を実行する。
【００９５】
このように、Ｓ１０２〜Ｓ１０５の処理によって、対象のブロックに対するプログラム処理の実行回数のカウントと記録とが実現する。
【００９６】
Ｓ１０５の処理に続いて、メモリコントローラ２００は、ユーザデータを対象のブロックにＴＬＣモードでプログラムする（Ｓ１０６）。
【００９７】
例えば、メモリコントローラ２００は、ユーザデータと当該ユーザデータを格納する位置の指示とＴＬＣモードの指示とを含むプログラムコマンドを対象のメモリチップ１０１に送信する。対象のメモリチップ１０１では、周辺回路１１０は、プログラムコマンドに応じて、指示された位置に対してＴＬＣモードでユーザデータをプログラムするプログラム処理を実行する。
【００９８】
Ｓ１０６の処理に続いて、メモリコントローラ２００は、タイムスタンプをＳＬＣモードでプログラムする（Ｓ１０７）。Ｓ１０７では、例えば、Ｓ１０５と同様の方法でタイムスタンプのプログラムが実行される。
【００９９】
なお、Ｓ１０６の処理およびＳ１０７の処理の実行の単位は、所定の単位に限定されない。例えば、１つのワード線に対してＳ１０６の処理が実行され、その直後にＳ１０７の処理が実行されてもよい。また、複数のワード線に対してＳ１０６の処理が連続して実行され、その直後にその複数のワード線に実行されたＳ１０６の処理に対応したＳ１０７の処理が実行されてもよい。
【０１００】
Ｓ１０７の処理に続いて、メモリコントローラ２００は、対象のブロックに空き領域が残っているか否かを判定する（Ｓ１０８）。空き領域とは、ユーザデータのプログラムが可能なワード線をいう。
【０１０１】
空き領域が残っている場合（Ｓ１０８、Ｙｅｓ）、Ｓ１０６に制御が移行する。対象のブロックに空き領域が残っていない場合（Ｓ１０８、Ｎｏ）、Ｓ１０１に制御が移行する。
【０１０２】
このように、図１０の例によれば、メモリセルに対するプログラム処理の実行回数のカウントおよび記録が、ブロック単位で実行される。また、メモリセルに対してデータをプログラムした時刻を示すタイムスタンプの記録が、ワード線単位で実行される。なお、各処理の実行の単位は、これらに限定されない。例えば、メモリセルに対してデータをプログラムした時刻を示すタイムスタンプの記録は、ブロック単位で実行されてもよい。
【０１０３】
図１１は、第１の実施形態のメモリシステム１が実行するデータのリードの動作の一例を示すフローチャートである。なお、本図の説明において、リードの対象のユーザデータを対象のデータと表記する。また、対象のデータが格納されたブロックを、対象のブロックと表記する。また、対象のブロックを含むメモリチップ１０１を、対象のメモリチップ１０１と表記する。
【０１０４】
まず、メモリコントローラ２００は、対象のブロックから、対象のデータ（ユーザデータ）をＴＬＣモードでリードする（Ｓ２０１）。
【０１０５】
例えばメモリコントローラ２００は、対象のメモリチップ１０１に対し、対象のデータが格納された位置の指示とＴＬＣモードの指示を含むリードコマンドを送信する。対象のメモリチップ１０１では、周辺回路１１０は、リードコマンドに応じて、指示された位置に対してＴＬＣモードでのリード処理を実行する。これによって、周辺回路１１０は、対象のデータを取得する。ただし、この時点では、対象のデータはビットエラーを含んでいる可能性がある。周辺回路１１０は、当該取得した対象のデータをメモリコントローラ２００に送る。
【０１０６】
なお、Ｓ２０１では、判定電圧Ｖｒａ〜Ｖｒｇのそれぞれとして、所定の電圧値が使用される。例えば、判定電圧Ｖｒａ〜Ｖｒｇのそれぞれとして、予め設定された初期値が使用され得る。または、以前に同じワード線または付近のワード線に対してリトライリード処理が実行された場合には、判定電圧Ｖｒａ〜Ｖｒｇのそれぞれとして、そのリトライリード処理において判定電圧として使用された値がＳ２０１においても使用されてもよい。
【０１０７】
続いて、メモリコントローラ２００は、ＥＣＣエラーが発生したか否かを判定する（Ｓ２０２）。
【０１０８】
ＥＣＣ２０５は、Ｓ２０１の処理によって取得された対象のデータに対し、ビットエラーの検出および訂正を実行する。ＥＣＣエラーとは、ＥＣＣ２０５がビットエラーの訂正に失敗することである。ＥＣＣ２０５は、対象のデータにビットエラーが含まれており、そのビットエラーの訂正に失敗した場合には、その旨をＣＰＵ２０３に通知する。これによって、ＣＰＵ２０３は、ＥＣＣエラーが発生した旨を知ることができる。
【０１０９】
ＥＣＣエラーが発生した場合（Ｓ２０２、Ｙｅｓ）、メモリコントローラ２００は、対象のブロックから、プログラム回数情報およびタイムスタンプをＳＬＣモードでリードする（Ｓ２０３）。Ｓ２０３では、例えば、Ｓ１０２と同様の方法でリードが実行される。
【０１１０】
Ｓ２０３の処理に続いて、メモリコントローラ２００は、タイムスタンプから、対象のデータがプログラムされてからの経過時間を取得する（Ｓ２０４）。メモリコントローラ２００は、現在時刻からタイムスタンプとして記録された時刻を減算することによって、経過時間を演算することができる。
【０１１１】
Ｓ２０４の処理に続いて、メモリコントローラ２００は、判定電圧情報２０６を参照することによって、経過時間とプログラム処理の実行回数とに対応した電圧値を取得する（Ｓ２０５）。
【０１１２】
Ｓ２０５の処理に続いて、メモリコントローラ２００は、判定電圧の設定値を、Ｓ２０１の処理において使用された電圧値からＳ２０４の処理によって取得された電圧値に変更して、対象データのリードをリトライする（Ｓ２０６）。
【０１１３】
例えばメモリコントローラ２００は、対象のメモリチップ１０１に対し、判定電圧の新しい設定値と対象のデータが格納された位置の指示とＴＬＣモードの指示を含むリードコマンドを送信する。対象のメモリチップ１０１では、周辺回路１１０は、リードコマンドに応じて、新しい設定値を判定電圧として使用して、指示された位置に対してＴＬＣモードでのリード処理を実行する（リトライリード処理）。これによって、周辺回路１１０は、対象のデータを取得する。周辺回路１１０は、当該取得した対象のデータをメモリコントローラ２００に送る。
【０１１４】
Ｓ２０６の処理によって取得された対象のデータは、ＥＣＣ２０５によってビットエラーの検出および訂正が実行される。メモリコントローラ２００は、ＥＣＣエラーが発生したか否かを判定する（Ｓ２０７）。
【０１１５】
ＥＣＣエラーが発生した場合（Ｓ２０７、Ｙｅｓ）、メモリコントローラ２００は、所定の処理を実行して（Ｓ２０８）、対象のデータのリードに関する動作を終了する。
【０１１６】
なお、所定の処理は、任意に決定され得る。
【０１１７】
一例では、判定電圧情報２０６とは別に、判定電圧として複数の候補値が予め用意されており、メモリコントローラ２００は、複数の候補値のそれぞれを予め決められた順番で判定電圧として適用してリトライリード処理を繰り返してもよい。
【０１１８】
または、メモリコントローラ２００がＥＣＣ２０５よりも誤り訂正能力が高い第２の誤り訂正機能を有する場合には、メモリコントローラ２００は、Ｓ２０１またはＳ２０５の処理によって取得された対象のデータに対して、当該第２の誤り訂正機能によるビットエラーの訂正を試みてもよい。
【０１１９】
または、メモリコントローラ２００は、対象のデータの訂正が不可能である旨をホスト２に通知してもよい。
【０１２０】
なお、ＥＣＣエラーが発生しなかった場合（Ｓ２０２、Ｓ２０７、Ｎｏ）、メモリコントローラ２００は、対象のデータのリードに関する動作を終了する。
【０１２１】
なお、上記したリードに関する動作は、ホスト２からのリード要求に応じてＮＡＮＤメモリ１００に対して実行されるリードだけでなく、転記処理（ガベージコレクションやウェアレベリング）の一環として実行されるリードにおいても適用され得る。上記したリードに関する動作がホスト２からのリード要求に対応するものである場合、メモリコントローラ２００は、対象のデータをＲＡＭ２０２を介してホスト２に転送する。
【０１２２】
以上述べたように、第１の実施形態によれば、ＮＡＮＤメモリ１００から取得された対象のデータの誤り訂正に失敗した場合（Ｓ２０２、Ｙｅｓ）、メモリコントローラ２００は、対象のデータがプログラムされてからの経過時間とプログラム処理の実行回数とを、履歴情報として取得する（Ｓ２０３、Ｓ２０４）。そして、メモリコントローラ２００は、取得された履歴情報に対応した電圧値を判定電圧として設定して対象のデータのリードをリトライ（再実行）する（Ｓ２０５、２０６）。
【０１２３】
これによって、比較例に比べて、１回のリトライリード処理で正しいデータを取得できる可能性が向上する。即ち、リード処理のリトライ回数の増加に起因したパフォーマンスの悪化を抑制することができる。
【０１２４】
また、第１の実施形態によれば、ＲＡＭ２０２に、メモリセルトランジスタにデータがプログラムされてからの経過時間とメモリセルトランジスタに対するプログラム処理の実行回数と判定電圧との関係を規定する判定電圧情報２０６が格納され、メモリコントローラ２００は、判定電圧情報２０６を参照する。
【０１２５】
これによって、判定電圧の新しい設定値を取得することが可能である。
【０１２６】
また、第１の実施形態によれば、メモリコントローラ２００は、タイムスタンプに基づいてデータがプログラムされてからの経過時間を取得し、取得した経過時間を用いて判定電圧情報２０６を参照することによって、判定電圧の新しい設定値を取得する。
【０１２７】
これによって、データリテンション特性に起因したしきい値電圧の変化に対応して判定電圧をシフトすることが可能となる。
【０１２８】
また、第１の実施形態によれば、メモリコントローラ２００は、ユーザデータをワード線にプログラムする際に（Ｓ１０６）、タイプスタンプを記録する（Ｓ１０７）。
【０１２９】
これによって、データリテンション特性に対応した判定電圧のシフトが可能となる。
【０１３０】
なお、以上の説明においては、メモリコントローラ２００は、ユーザデータをワード線にプログラムした後にタイムスタンプを記録した。ユーザデータをワード線にプログラムする処理とタイムスタンプを記録する処理との順番はこれに限定されない。例えば、メモリコントローラ２００は、ユーザデータをワード線にプログラムする前（例えば直前）にタイムスタンプを記録してもよい。
【０１３１】
また、第１の実施形態によれば、ユーザデータはＴＬＣモードでプログラムされ、タイムスタンプは、ＳＬＣモードでプログラムされる。ＴＬＣモードは、各メモリセルに３ビットのデータをプログラムするモードであり、ＳＬＣモードは、各メモリセルに１ビットのデータをプログラムするモードである。
【０１３２】
ＳＬＣモードによれば、ＴＬＣモードよりも、しきい値電圧の変化に対する耐性（換言するとデータの信頼性）を向上させることができる。よって、リトライリード処理が必要とされるほどしきい値電圧が変化した場合であっても、タイムスタンプを正しくリードすることが可能となる。
【０１３３】
なお、タイムスタンプをプログラムするモードがユーザデータをプログラムするモードに比べて各メモリセルにプログラムされるデータのビット数が少ないモードである限り、各プログラムにかかるモードの選択は上記に限定されない。
【０１３４】
例えば、ユーザデータが各メモリセルに４ビットのデータがプログラムされるモードであるＱＬＣ（Quad  Level  Cell）モードでプログラムされ、タイムスタンプが各メモリセルに２ビットのデータがプログラムされるモードであるＭＬＣ（Multi  Level  Cell）モードでプログラムされてもよい。
【０１３５】
また、メモリコントローラ２００は、対象のブロックに対するイレース処理を実行し（Ｓ１０３）、その後、対象のブロックにプログラム回数情報をプログラムする。メモリコントローラ２００は、リトライリード処理の際に、対象のブロックからプログラム回数情報を取得する（Ｓ２０３）。
【０１３６】
これによって、プログラム処理の実行回数のカウントおよび記録が実現する。
【０１３７】
また、メモリコントローラ２００は、プログラム先のメモリセルを含むワード線に対象のデータをプログラムする際（Ｓ１０６）に、タイムスタンプを記録する（Ｓ１０７）。そして、メモリコントローラ２００は、そのタイムスタンプに基づいて経過時間を取得する（Ｓ２０４）。
【０１３８】
これによって、データリテンション特性に対応した判定電圧のシフトをワード線毎に個別に実行することが可能となる。
【０１３９】
なお、タイムスタンプの記録の単位は、ワード線単位でなくてもよい。ワード線とは異なる複数のメモリセル毎にタイムスタンプが記録され得る。例えば、複数のワード線毎やブロック毎にタイムスタンプが記録され得る。
【０１４０】
また、第１の実施形態によれば、メモリコントローラ２００は、対象のブロックが備える複数のワード線のうちの所定のワード線にプログラム回数情報およびタイムスタンプをプログラムする。例えば図８の例では、対象のブロックの先頭のワード線にプログラム回数情報およびタイムスタンプがプログラムされた。
【０１４１】
これによって、各メモリセルと、各メモリセルに関するプログラム回数情報およびタイムスタンプがプログラムされた位置と、の対応関係の管理が簡単になる。
【０１４２】
また、第１の実施形態によれば、メモリコントローラ２００は、ユーザデータをＴＣＬモードでプログラムし、プログラム回数情報およびタイムスタンプをＳＬＣモードでプログラムする。
【０１４３】
これによって、リトライリード処理が必要とされるほどしきい値電圧が変化した場合であっても、プログラム回数情報およびタイムスタンプを正しくリードすることが可能となる。
【０１４４】
ここで、プログラム回数情報およびタイムスタンプをプログラムするモードをモードＡとし、ユーザデータをプログラムするモードをモードＢとする。モードＡのほうがモードＢに比べて各メモリセルにプログラムされるデータのビット数が少ないモードである限り、各プログラムにかかるモードの選択は上記の選択方法に限定されない。
【０１４５】
（第２の実施形態）
第１の実施形態では、プログラム処理が実行されてからの経過時間とプログラム処理の実行回数とに基づいて判定電圧の新しい設定値が決定された。判定電圧の新しい設定値を決定するための情報は、プログラム処理が実行されてからの経過時間とプログラム処理の実行回数とだけに限定されない。
【０１４６】
第２の実施形態では、プログラム処理が実行されてからの経過時間とプログラム処理の実行回数とメモリセルの位置とに基づいて判定電圧の新しい設定値が決定される例について説明する。
【０１４７】
メモリセルアレイ１１１が図２〜４に例示されたような３次元構成を有する場合、メモリセルアレイ１１１は、例えば次のように製造される。即ち、まず、多数の配線層１１、１２、１３が積層される。その後、これらの配線層１１、１２、１３を貫通する孔がドライエッチングなどによって形成され、その孔にピラー状の導電体１４などが形成される。
【０１４８】
ここで、孔の径を深さ方向のどの位置でも一定とすることは難しく、孔は、例えば、深さ方向の位置に応じて拡径したり縮径したりする傾向がある。これによって、各メモリセルの特性は、深さ方向の位置毎に、つまりワード線の位置毎に、異なる場合がある。
【０１４９】
第２の実施形態では、メモリコントローラ２００は、プログラム処理が実行されてからの経過時間とプログラム処理の実行回数とリード処理の対象のユーザデータが格納されたワード線の位置とに基づいて、判定電圧の新しい設定値を取得する。
【０１５０】
図１２は、第２の実施形態の判定電圧情報２０６ａの構成例を示す図である。判定電圧情報２０６ａは、第１の実施形態と同様に、例えばＲＡＭ２０２に格納される。第２の実施形態では、判定電圧情報２０６ａは、経過時間とプログラム処理の実行回数とワード線の位置と判定電圧との関係を規定した情報である。
【０１５１】
一例では、判定電圧情報２０６ａは、図９に例示された関係によって経過時間とプログラム処理の実行回数とから判定電圧の基準値を規定する第１判定電圧情報２０７ａと、基準値からのワード線の位置毎のオフセットを規定する第２判定電圧情報２０７ｂと、を含む。
【０１５２】
第２判定電圧情報２０７ｂのデータ構造は、特定の構造に限定されない。第２判定電圧情報２０７ｂは、ワード線の位置毎にオフセット値が記録されたテーブルであってもよいし、ワード線の位置からオフセット値を演算するための数式であってもよい。第２判定電圧情報２０７ｂは、複数のブロックで共通に使用されてもよいし、ブロック毎に用意されてもよい。
【０１５３】
メモリコントローラ２００は、履歴情報（プログラム処理の実行回数およびタイムスタンプ）と第１判定電圧情報２０７ａとから基準値を取得し、ワード線の位置（例えば物理アドレス）と第２判定電圧情報２０７ｂとからオフセット値を取得する。そして、メモリコントローラ２００は、基準値にオフセット値を加算（または減算）することで、判定電圧の新しい設定値を取得することができる。
【０１５４】
なお、判定電圧情報２０６ａの構成は、これに限定されない。判定電圧情報２０６ａは、プログラム処理が実行されてからの経過時間とプログラム処理の実行回数とワード線の位置と判定電圧との関係を規定した情報である限り、任意に構成され得る。
【０１５５】
第２の実施形態のメモリシステム１の動作は、判定電圧情報２０６ａから判定電圧から新しい設定値を取得する動作を除いて第１の実施形態と同様であるので、他の説明を省略する。
【０１５６】
以上述べたように、第２の実施形態によれば、メモリコントローラ２００は、対象のデータがプログラムされてからの経過時間と、プログラム処理に実行回数と、対象のデータがプログラムされたワード線の位置と、に対応した電圧値を、判定電圧の新しい設定値として取得する。
【０１５７】
これによって、メモリコントローラ２００は、ワード線毎に最適化されたアルゴリズムに基づいて判定電圧の新しい設定値として取得することが可能となるので、メモリセルアレイ１１１が３次元構造を有する場合であっても、１回のリトライリード処理で正しいデータを取得できる可能性を向上させることが可能である。
【０１５８】
また、第２の実施形態によれば、ＲＡＭ２０２に、メモリセルトランジスタにデータがプログラムされてからの経過時間とメモリセルトランジスタに対するプログラム処理の実行回数とワード線の位置と判定電圧との関係を規定する判定電圧情報２０６ａが格納され、メモリコントローラ２００は、判定電圧情報２０６ａを参照する。
【０１５９】
これによって、メモリコントローラ２００は、判定電圧の新しい設定値を取得することが可能となる。
【０１６０】
なお、以上の説明によれば、判定電圧の新しい設定値を取得するために、対象のデータがプログラムされたワード線の位置が使用された。判定電圧の新しい設定値を取得するために使用される位置情報は、ワード線の位置だけに限定されない。ビット線の位置やメモリセルの位置が、判定電圧の新しい設定値を取得するために使用されてもよい。
【０１６１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１６２】
１  メモリシステム、２  ホスト、３ａ〜３ｄ  分布、４  マージン、５ａ，５ｂ曲線、１１，１２，１３  配線層、１４  導電体、１５  ゲート絶縁膜、１６  電荷蓄積層、１００  メモリ、１０１  メモリチップ、１１０  周辺回路、１１１  メモリセルアレイ、２００  メモリコントローラ、２０６，２０６ａ，２０７ａ，２０７ｂ  判定電圧情報。
【図１】
2020009513.tif 000003
【図２】
2020009513.tif 000004
【図３】
2020009513.tif 000005
【図４】
2020009513.tif 000006
【図５】
2020009513.tif 000007
【図６】
2020009513.tif 000008
【図７】
2020009513.tif 000009
【図８】
2020009513.tif 000010
【図９】
2020009513.tif 000011
【図１０】
2020009513.tif 000012
【図１１】
2020009513.tif 000013
【図１２】
2020009513.tif 000014