(57)【要約】【課題】大量のビットエラーの修復が可能で、かつデータの長期保証が可能な不揮発性半導体メモリシステムを提供する。【解決手段】不揮発性半導体メモリシステムは、メモリコア（１０）と、コントローラ（２０）と、コマンドに従って、コントローラ（２０）を制御するデータ修復システム（３０）とを備え、データ修復システム（３０）は、メモリセルのしきい値を変化させるしきい値変更機能と、メモリセルにゲート電圧を印加して、データを読み出すデータ読出機能と、読み出したデータとゲート電圧とに基づいて、しきい値を算出するしきい値算出機能と、しきい値変更機能の動作結果と、算出したしきい値とに基づいて、真のデータを判別する判別機能と、判別機能による判別結果に基づいて、ビットエラーを修復する修復機能とを有しており、これら機能のうち、コマンドを実行するために必要な機能を動作させて、コマンドの実行結果を出力する。【選択図】図１
2012230731.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性のメモリセルを複数有するメモリコアと、
前記メモリコアに接続されたコントローラと、
与えられたコマンドに従って、前記コントローラを制御して前記メモリコアにアクセスするデータ修復システムとを備え、
前記データ修復システムは、
前記複数のメモリセルのうち、与えられたアドレス範囲に含まれるメモリセルのしきい値を変化させるしきい値変更機能と、
前記アドレス範囲に含まれるメモリセルにゲート電圧を印加して、当該メモリセルのデータを読み出すデータ読出機能と、
前記データ読出機能によって読み出したデータと前記ゲート電圧とに基づいて、前記アドレス範囲に含まれるメモリセルのしきい値を算出するしきい値算出機能と、
前記しきい値変更機能の動作結果と、前記しきい値算出機能によって算出したしきい値とに基づいて、前記アドレス範囲に含まれるメモリセルの真のデータを判別する判別機能と、
前記判別機能による判別結果に基づいて、ビットエラーを修復する修復機能とを有しており、
前記しきい値変更機能、前記データ読出機能、前記しきい値算出機能、前記判別機能、および前記修復機能のうち、前記コマンドを実行するために必要な機能を動作させて、前記コマンドの実行結果を出力する
ことを特徴とする不揮発性半導体メモリシステム。
【請求項２】
請求項１の不揮発性半導体メモリシステムにおいて、
前記データ修復システムは、
前記コマンドを受け、通知された、前記コマンドの実行に必要な機能に基づいて前記コントローラを制御するコマンド処理部と、
前記メモリコアに接続され、前記メモリセルに対するデータの入出力を行う入出力回路と、
前記しきい値を記録するメモリと、
前記コマンドの実行に必要な機能を特定し、当該特定した機能を、前記コマンド処理部に通知するデータ判別部とを備え、
前記データ判別部は、前記特定した機能を動作させ、当該動作させた結果として得られた、前記コマンドの実行結果を、前記コマンド処理部に通知するものであり、
前記コマンド処理部は、前記データ判別部から通知された、前記コマンドの実行結果を、前記データ修復システムの外部に出力する
ことを特徴とする不揮発性半導体メモリシステム。
【請求項３】
請求項１の不揮発性半導体メモリシステムにおいて、
前記データ修復システムは、前記データ読出機能によって読み出したデータを論理演算する機能を有する
ことを特徴とする不揮発性半導体メモリシステム。
【請求項４】
請求項１の不揮発性半導体メモリシステムにおいて、
前記データ修復システムは、前記データ読出機能によって読み出したデータのうち、論理値が０、あるいは１であるビットの個数を算出する機能を有する
ことを特徴とする不揮発性半導体メモリシステム。
【請求項５】
請求項１の不揮発性半導体メモリシステムにおいて、
前記データ修復システムは、前記しきい値算出機能において、前記データ読出機能を複数の異なるゲート電圧で動作させ、当該複数のゲート電圧と、当該複数のゲート電圧で読み出されたそれぞれのデータとに基づいて、前記しきい値を算出する
ことを特徴とする不揮発性半導体メモリシステム。
【請求項６】
請求項１の不揮発性半導体メモリシステムにおいて、
前記データ修復システムは、第１および第２のゲート電圧のそれぞれで、前記データ読出機能を動作させ、当該動作により読み出した各データを比較する機能を有する
ことを特徴とする不揮発性半導体メモリシステム。
【請求項７】
請求項１の不揮発性半導体メモリシステムにおいて、
前記データ修復システムは、前記しきい値変更機能の動作前後のそれぞれについて、前記しきい値算出機能によってしきい値を算出し、これらしきい値の差と、所定の値とを比較する機能を有する
ことを特徴とする不揮発性半導体メモリシステム。
【請求項８】
請求項２の不揮発性半導体メモリシステムにおいて、
前記データ修復システムは、前記データ読出機能によって読み出したデータを前記メモリに記録し、前記メモリに記録されたデータのビットエラーを修復してから、前記メモリ内のデータを、前記アドレス範囲に含まれるメモリセルに書き戻す機能を有する
ことを特徴とする不揮発性半導体メモリシステム。
【請求項９】
請求項２の不揮発性半導体メモリシステムにおいて、
前記データ修復システムは、
前記アドレス範囲に含まれるメモリセルに、前記ゲート電圧を供給するアナログ電源回路と、
前記アドレス範囲に含まれるメモリセルに流れる電流を検知する電流検知回路とを備えている
ことを特徴とする不揮発性半導体メモリシステム。
【請求項１０】
請求項１の不揮発性半導体メモリシステムにおいて、
前記データ修復システムは、電源投入時に、前記アドレス範囲について、前記しきい値変更機能、前記データ読出機能、前記しきい値算出機能、前記判別機能、および前記修復機能を動作可能に構成されている
ことを特徴とする不揮発性半導体メモリシステム。
【請求項１１】
請求項１の不揮発性半導体メモリシステムを備えている
ことを特徴とするストレージデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性半導体メモリシステムに関し、特に、不揮発性半導体メモリに記録されたデータを長期間保証する技術に関する。
【背景技術】
【０００２】
一般的な不揮発性半導体メモリであるフラッシュメモリは、図９に示すように、不揮発性の複数のメモリセルで構成されるメモリコア１０と、与えられたコマンドに応じて、メモリコア１０に対する書き込み、消去、読み出し等の動作を行うコントローラ２０と、コントローラに書き込み、消去、読み出し等のコマンドを送る外部装置１８とで構成される。このようなフラッシュメモリでは、メモリセルのしきい値を変化させることで、データの書き込み、あるいは消去が行われて、正しいデータが記録される（例えば、非特許文献１参照）。ところが、メモリセルに対するデータの書き換えの最中に予期せぬ電源遮断が発生したり、フラッシュメモリを長期間放置することで、メモリセルの電荷が抜けてしまい、メモリセルに記録されているデータにエラーが生じる場合がある。特に、データの書き換え回数が多くなる場合や、フラッシュメモリを高温の環境下で使用する場合等には、メモリセルのデータ保持能力の劣化が著しくなる。
【０００３】
そこで、従来、データエラーを診断して修復する技術が用いられている。例えば、ファイルシステムが構築された記録媒体がホストコンピュータに装着されたときに、ホストコンピュータが、内部に予め記録していた情報に基づいて、記録媒体のファイルシステムについて修復が必要かどうかを診断し、修復が必要である場合に修復する技術がある（例えば、特許文献１参照）。
【０００４】
また、公知のエラー訂正機能（ＥＣＣ（Error Check and Correct））を備えた回路において、エラー訂正コードを用いてデータをチェックし、エラーがあればそのエラーを、訂正および修復するものがある（例えば、特許文献２参照）。
【０００５】
また、メモリセルで発生するビット誤りを検出するためのパリティセルを設け、メモリセルとパリティセルとに第１の電圧を印加して読み出した第１のデータに対して、パリティチェックを行い、このデータのエラーを検出しているものがある。そして、エラーが検出されると、メモリセルとパリティセルとに第２の電圧を印加して読み出した第２のデータと第１のデータとを照合し、照合結果に基づいて、第１および第２データに含まれるエラーを訂正している（例えば、特許文献３参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第４４１９９８９号公報
【特許文献２】特開２００８−１９８３１０号公報
【特許文献３】特許第２５０９２９７号公報
【非特許文献】
【０００７】
【非特許文献１】“MX29F200C T/B”、［online］、平成２１年６月３０日、Macronix International Co., Ltd.発行、［平成２３年４月１１日検索］、 インターネット <URL:http://www.mxic.com.tw/QuickPlace/hq/PageLibrary4825740B00298A3B.nsf/h_Index/DBACA1C90564EBB248257639003A563A/$File/MX29F200C%20T-B,%205V,%202Mb,%20v1.9.pdf>
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１の技術では、一旦、記録媒体をホストコンピュータに装着し、ホストコンピュータに、ファイルシステムを修復するための識別情報を記録しておく必要がある。つまり、識別情報が記録されていない別のホストコンピュータに記録媒体を装着しても、その記録媒体に構築されているファイルシステムの故障を修復することができない。
【０００９】
特許文献２，３の技術によると、上述した問題は生じないが、別の問題がある。具体的に、特許文献２の技術では、ＥＣＣ機能によるエラー訂正のために、エラー訂正用のメモリセルが必要である。ＥＣＣ機能によるエラー訂正可能なデータのビット数は、エラー訂正用のメモリセルの数に応じて決まる。例えば、８ビットのデータに対して、４ビットの訂正用のメモリセルを用いると、１ビットのエラー訂正ができる。エラー訂正用のメモリセルの数を増やすことで、訂正可能なエラービットの数が増加するが、その分、ＥＣＣ機能を備えた回路の規模が増大してしまう。
【００１０】
また、特許文献３の技術では、パリティチェックによってデータのエラーを検出している。例えば、８ビットのデータに対して、１ビットのパリティビットを付加しており、１ビットのみのエラー検出が可能である。そして、エラーが検出できた場合に、エラーを訂正するようにしている。つまり、８ビットのデータ中に、２ビット以上のエラーが存在する場合には、そのエラーを検出できないため、訂正することができない。また、エラーの検出ができたとしても、上述した第１および第２のデータが同一である場合には、エラーを訂正することができない。
【００１１】
以上のように、特許文献２，３の技術では、例えば、フラッシュメモリを長期間放置することで、複数のメモリセル中の電子が抜けて、大量のビットエラーが発生すると、そのエラーの訂正ができなくなってしまう。
【００１２】
かかる点に鑑みて、本発明は、大量のビットエラーの修復が可能で、かつデータの長期保証が可能な不揮発性半導体メモリシステムを提供することを課題とする。
【課題を解決するための手段】
【００１３】
上記課題を解決するため本発明によって次のような解決手段を講じた。例えば、不揮発性半導体メモリシステムは、不揮発性のメモリセルを複数有するメモリコアと、メモリコアに接続されたコントローラと、与えられたコマンドに従って、コントローラを制御してメモリコアにアクセスするデータ修復システムとを備え、データ修復システムは、複数のメモリセルのうち、与えられたアドレス範囲に含まれるメモリセルのしきい値を変化させるしきい値変更機能と、アドレス範囲に含まれるメモリセルにゲート電圧を印加して、当該メモリセルのデータを読み出すデータ読出機能と、データ読出機能によって読み出したデータとゲート電圧とに基づいて、アドレス範囲に含まれるメモリセルのしきい値を算出するしきい値算出機能と、しきい値変更機能の動作結果と、しきい値算出機能によって算出したしきい値とに基づいて、アドレス範囲に含まれるメモリセルの真のデータを判別する判別機能と、判別機能による判別結果に基づいて、ビットエラーを修復する修復機能とを有しており、しきい値変更機能、データ読出機能、しきい値算出機能、判別機能、および修復機能のうち、コマンドを実行するために必要な機能を動作させて、コマンドの実行結果を出力する。
【００１４】
これによると、データ修復システムは、外部から入力されたコマンドに従って、メモリコアに対するアクセス制御を行うことができる。また、コマンドの実行結果が出力されるため、例えば、コマンドを入力したユーザは、その実行結果を知ることができる。具体的に、しきい値算出機能によると、メモリセルから読み出したデータと、そのデータの読み出しに用いたゲート電圧とに基づいて、しきい値の算出が行われる。したがって、例えば、不揮発性半導体メモリを長期間放置したり、データの書き換え回数が増加することにより、多くのメモセルのしきい値が劣化していても、そのしきい値が正確にわかる。つまり、算出したしきい値が劣化しているか否かがわかるため、メモリセルのデータを修復すべき否かを判断することができる。
【００１５】
また、しきい値変更機能によって、しきい値が変化した場合に、しきい値算出機能を動作させることで、しきい値の実際の変化量がわかる。したがって、しきい値変更機能によるしきい値の変化量と、しきい値算出機能による、しきい値の実際の変化量とに基づいて、判別機能によって、所定のアドレス範囲に含まれるメモリセルの真のデータを判別することができる。そして、修復機能を動作させることで、メモリセルのデータを真のデータに修復することができる。以上のことから、発生するビットエラーの数にかかわらず、真のデータを判別でき、エラービットを修復することができる。すなわち、メモリセルに記録されているデータの長期保証が可能となる。
【００１６】
具体的に、データ修復システムは、コマンドを受け、通知された、コマンドの実行に必要な機能に基づいてコントローラを制御するコマンド処理部と、メモリコアに接続され、メモリセルに対するデータの入出力を行う入出力回路と、しきい値を記録するメモリと、コマンドの実行に必要な機能を特定し、当該特定した機能を、コマンド処理部に通知するデータ判別部とを備えている。そして、データ判別部は、特定した機能を動作させ、当該動作させた結果として得られた、コマンドの実行結果を、コマンド処理部に通知するものであり、コマンド処理部は、データ判別部から通知された、コマンドの実行結果をデータ修復システムの外部に出力する。
【００１７】
あるいは、データ修復システムは、電源投入時に、与えられたアドレス範囲について、しきい値変更機能、データ読出機能、しきい値算出機能、判別機能、および修復機能を動作可能に構成されていてもよい。
【００１８】
これにより、コマンドを入力せずに、電源投入時に各機能を動作させることができるため、真のデータの判別やビットエラーの修復の自動化を図ることができる。
【発明の効果】
【００１９】
本発明によると、不揮発性半導体メモリシステムによって、大量のビットエラーを修復することができ、データの長期保証が可能となる。
【図面の簡単な説明】
【００２０】
【図１】本発明の一実施形態に係る不揮発性半導体メモリシステムの構成を示すブロック図である。
【図２】図１のデータ修復システムの構成例を示すブロック図である。
【図３】フェイルビットカウント算出機能の動作を示すフローチャートの例である。
【図４】不安定ビットのアドレス算出機能の動作を示すフローチャートの例である。
【図５】メモリセルのしきい値算出機能の動作を示すフローチャートの例である。
【図６】修復データ判別機能の動作を示すフローチャートの例である。
【図７】修復データ判別機能の動作を示す別のフローチャートの例である。
【図８】図２のデータ修復システムの別の構成例を示すブロック図である。
【図９】従来の不揮発性半導体メモリシステムの構成を示すブロック図である。
【発明を実施するための形態】
【００２１】
図１は、本発明の一実施形態に係る不揮発性半導体メモリシステムの構成を示すブロック図である。不揮発性半導体メモリシステムでは、外部装置１８から発行されるコマンドによって、メモリコア１０に対するデータの書き込み、消去、読み出し等が行われる。不揮発性半導体メモリシステムは、不揮発性のメモリセルを複数有するメモリコア１０と、コントローラ２０と、コントローラ２０を制御してメモリコア１０にアクセスするデータ修復システム３０とを備えている。
【００２２】
コントローラ２０は、コマンドバス１１を介して外部装置１８に接続されている。また、コントローラ２０は、コントロールバス１２を介してメモリコア１０に接続されている。コントローラ２０は、例えば、外部装置１８から書込コマンドを受けると、メモリコア１０を制御して、メモリセルにデータを書き込む。メモリセルに書き込まれるデータ、およびデータが書き込まれるメモリセルのアドレスは、外部装置１８からアドレスデータバス１６を介してメモリコア１０に入力される。また、コントローラ２０は、データ修復システム３０から、信号線１５を介して入力される内部コマンドに従って、メモリコア１０を制御する。コントローラ２０による制御結果は、メモリコア１０からアドレスデータバス１６に出力される。
【００２３】
データ修復システム３０は、外部装置１８と信号線１３，１４で接続されており、外部装置１８から信号線１４を介して入力される外部コマンドを解釈して、外部コマンドを実行するために必要な内部コマンドをコントローラ２０に出力する。これにより、データ修復システム３０は、コントローラ２０を制御してメモリコア１０にアクセスすることができる。また、データ修復システム３０は、信号線１３を介して、外部コマンドの実行結果を外部装置１８に出力する。外部コマンドは、例えばユーザが外部装置１８から入力するコマンドであり、メモリセルの状態を解析するための解析コマンドや、メモリセルのデータを修復するための修復コマンドである。したがって、外部コマンドの実行結果とは、解析結果や修復結果を示す。修復コマンドによって、メモリセルのデータを修復する場合には、外部装置１８から信号線１４を介して、修復に必要な情報がデータ修復システム３０に入力される。そして、データ修復システム３０からアドレスデータバス１６を介して、修復に必要な情報がメモリコア１０に入力される。
【００２４】
図２は、本実施形態に係るデータ修復システムの構成例を示すブロック図である。データ修復システム３０は、コマンド処理部３０１と、例えばＳＲＡＭ（Static Random Access Memory）で構成されたワークメモリ３０２と、データ判別部３０３と、入出力回路３０４，３０５とを備えている。
【００２５】
コマンド処理部３０１は、外部装置１８から入力された外部コマンドを解釈し、外部コマンドが例えば解析コマンドであるということをデータ判別部３０３に通知する。また、コマンド処理部３０１は、データ判別部３０３から通知された内部コマンドをコントローラ２０に出力する一方、データ判別部３０３から通知された外部コマンドの実行結果を外部装置１８に出力する。
【００２６】
データ判別部３０３は、外部コマンドを実行するために必要な機能を複数有しており、外部コマンドを実行するために必要な機能を動作させる。例えば、外部コマンドが解析コマンドである場合、データ判別部３０３は、解析コマンドを実行するために必要な各機能を特定して、その特定した各機能のそれぞれを示す内部コマンド（例えば、後述する、フェイルビットカウント算出機能に対応するフェイルビットカウント算出コマンド）をコマンド処理部３０１に通知する。そして、その特定した各機能を動作させる。これにより、データ判別部３０３は、メモリコア１０から出力された、メモリセルのアドレスおよびデータ等のメモリセルの情報を取得することができ、取得した情報に基づいて、メモリセルの状態を解析することができる。メモリセルの情報は、入出力回路３０４，３０５を介してデータ判別部３０３に入力される。データ判別部３０３において、各機能が動作した結果、つまり外部コマンドの実行結果は、コマンド処理部３０１に通知される。なお、データ判別部３０３は、内部コマンドの実行結果をコマンド処理部３０１に通知してもよい。この場合、コマンド処理部３０１は、内部コマンドの実行結果を外部装置１８に出力してもよい。このようなデータ判別部３０３は、論理回路あるいはプログラム実行可能なコンピュータで構成することができる。
【００２７】
ワークメモリ３０２には、データ判別部３０３の各機能が動作した結果得られた情報等が格納される。ワークメモリ３０２は、例えば、フェイルビットカウントテーブルと、アドレス／しきい値テーブルとを有する。フェイルビットカウントテーブルには、後述するフェイルビットカウント算出機能の動作結果が格納される。また、アドレス／しきい値テーブルには、後述する、メモリセルのしきい値算出機能の動作結果が格納される。
【００２８】
入出力回路３０４，３０５は、メモリセルのアドレスが入出力されるアドレスＩ／Ｏ（Input/Output）３０５と、メモリセルのデータが入出力されるデータＩ／Ｏ３０４とで構成される。
【００２９】
以上のように構成されたデータ修復システム３０において、データ判別部３０３が有する複数の機能について説明する。
【００３０】
−フェイルビットカウント算出機能−
図３は、データ判別部におけるフェイルビットカウント算出機能の処理の例を示すフローチャートである。フェイルビットカウント算出機能は、与えられた所定のアドレス範囲において、任意のゲート電圧でメモリセルのデータを読み出し、その読み出したデータの論理値が“０”あるいは“１”であるビット（フェイルビット）の個数を算出する機能である。以下では、論理値が“１”であるビットの個数を算出する場合について説明する。
【００３１】
まず、初期化処理として、所定のアドレス範囲のうち、開始アドレスを示すＳｔａｒｔ＿Ａｄｄｒｅｓｓが、変数Ａｄｄｒｅｓｓに格納される。また、変数ＢｉｔＣｏｕｎｔに、“０”が格納される（Ｓ３０１）。
【００３２】
そして、メモリセルのデータを読み出すための、ゲート電圧Ｖｇが任意に設定される（Ｓ３０２）。変数Ａｄｄｒｅｓｓの値によって示されるメモリセルに、Ｓ３０２で設定されたゲート電圧Ｖｇを印加してデータが読み出され（データ読出機能）、そのデータが変数Ｄａｔａに格納される（Ｓ３０３）。読み出されたデータは、例えば８ビットとする。
【００３３】
Ｓ３０３で読み出されたデータについて、論理演算が行われ、ビットが“１”である個数が、変数Ｂｉｔｓｕｍに格納される（Ｓ３０４）。具体的に、変数Ｄａｔａに格納されたデータの各ビットがそれぞれ、最下位のビットまでシフトされて、最下位のビットと０ｘ０１（１６進数）との論理積が求められる。そして、それぞれの論理積の結果が加算され、加算結果が変数Ｂｉｔｓｕｍに格納される。
【００３４】
Ｓ３０４で得られた、変数Ｂｉｔｓｕｍの値が、変数ＢｉｔＣｏｕｎｔの値に加算される（Ｓ３０５）。その後、変数Ａｄｄｒｅｓｓの値が、所定のアドレス範囲のうち、終了アドレスを示すＥｎｄ＿Ａｄｄｒｅｓｓであるかどうかが判断される（Ｓ３０６）。
【００３５】
変数Ａｄｄｒｅｓｓの値が、Ｅｎｄ＿Ａｄｄｒｅｓｓと一致しない場合（Ｓ３０６のＮｏ肢）、変数Ａｄｄｅｒｓｓの値がインクリメントされてＳ３０３に戻る。
【００３６】
一方、変数Ａｄｄｒｅｓｓの値が、Ｅｎｄ＿Ａｄｄｒｅｓｓと一致する場合（Ｓ３０６のＹｅｓ肢）、変数ＢｉｔＣｏｕｎｔの値が出力されて処理が終了する（Ｓ３０８）。
【００３７】
以上のような処理を、複数の異なるゲート電圧を用いて実行することで、ゲート電圧値毎のフェイルビットの個数を得ることができる。したがって、フェイルビットの個数が変化した前後におけるゲート電圧値の範囲と、変化したフェイルビットの個数とに基づいて、そのゲート電圧値の範囲にしきい値を有するメモリセルのビット数がわかる。すなわち、所定のアドレス範囲に含まれるメモリセルのしきい値の分布を知ることができる。なお、ゲート電圧値とフェイルビットの個数との関係は、図２に示すワークメモリ３０２内のフェイルビットカウントテーブルに格納すればよい。また、当該機能を、任意のアドレス範囲として、全アドレス範囲や１セクタ分のアドレス範囲に対して動作させてもよい。
【００３８】
−不安定ビットのアドレス算出機能−
図４は、データ判別部における不安定ビットのアドレス算出機能の処理の例を示すフローチャートである。不安定ビットのアドレス算出機能は、不安定な状態になっているメモリセルのアドレスを算出する機能である。ここで、不安定な状態のメモリセルとは、例えば温度条件により、データの論理値が、“０”あるいは“１”のいずれかに変化しうる状態にあるメモリセルのことである。
【００３９】
まず、処理対象となるアドレス範囲として、変数Ｓｔａｒｔ＿Ａｄｄｒｅｓｓの値および変数Ｅｎｄ＿Ａｄｄｒｅｓｓの値が設定されるとともに、変数Ｖｇに第１のゲート電圧値Ｖｇ１が格納される（Ｓ４０１）。なお、アドレス範囲は任意に設定してもよい。
【００４０】
そして、変数Ｖｇの値のゲート電圧で、設定されたアドレス範囲に含まれるメモリセルのデータが読み出され、そのデータが、図２に示すワークメモリ３０２内の変数ＲＡＭ１に格納される（Ｓ４０２）。その後、変数Ｖｇに、第１のゲート電圧値Ｖｇ１とは異なる第２のゲート電圧値Ｖｇ２が格納される（Ｓ４０３）。
【００４１】
変数Ｖｇの値のゲート電圧で、設定されたアドレス範囲に含まれるメモリセルのデータが読み出され、そのデータが、図２に示すワークメモリ３０２内の変数ＲＡＭ２に格納される（Ｓ４０４）。そして、変数ＲＡＭ１および変数ＲＡＭ２に格納されたそれぞれのデータが比較され、各データのビットが不一致となる場合、そのビット（メモリセル）のアドレスが、変数ｕｎｓｔａｂｌｅ＿Ａｄｄｒｅｓｓに格納される。
【００４２】
以上の処理により、不安定な状態になっているメモリセルのアドレスを算出することができる。なお、第１および第２のゲート電圧値Ｖｇ１，Ｖｇ２は、上述したフェイルビットカウント算出機能の動作結果に基づいて決定すればよい。例えば、フェイルビットの個数が比較的多く変化した前後におけるゲート電圧値を用いればよい。このような異なる２つのゲート電圧で読み出されたそれぞれのデータには、互いに異なるビットが含まれるからである。
【００４３】
また、変数Ｓｔａｒｔ＿Ａｄｄｒｅｓｓの値および変数Ｅｎｄ＿Ａｄｄｒｅｓｓの値を設定しなくてもよい。この場合、全アドレス範囲について、上述した処理を行えばよい。
【００４４】
−メモリセルのしきい値算出機能−
図５は、データ判別部におけるメモリセルのしきい値算出機能の処理の例を示すフローチャートである。メモリセルのしきい値算出機能は、与えられたアドレス範囲に含まれるメモリセルのしきい値を算出する機能である。
【００４５】
まず、初期データとして、変数Ｐｒｅ＿ＤＡＴＡに、例えば８ビットのデータである０ｘＦＦ（１６進数）が格納される（Ｓ５０１）。また、配列変数Ｖｔに、ゲート電圧値の初期値としてＳｔａｒｔ＿Ｖｇが格納される（Ｓ５０２）。また、変数Ｖｇに、Ｓｔａｒｔ＿Ｖｇが格納される（Ｓ５０３）。
【００４６】
そして、変数Ｖｇの値のゲート電圧が印加されて、変数Ａｄｄｒｅｓｓの値によって示されるメモリセルのデータが読み出され、そのデータが変数ＣｕｒｒｅｎｔＤａｔａに格納される。また、変数ＣｕｒｒｅｎｔＤａｔａの値と変数Ｐｒｅ＿ＤＡＴＡの値との排他的論理和の結果が、変数Ｄａｔａ２に格納される（Ｓ５０４）。変数Ａｄｄｒｅｓｓには、例えば８ビット分のアドレスが格納されている。
【００４７】
その後、変数Ｄａｔａ２に格納されたデータの各ビットが、“１”であるか否かが判断される。具体的に、変数Ｄａｔａ２に格納されたデータの各ビットが、最下位のビットまでシフトされて、最下位のビットと０ｘ０１（１６進数）との論理積が求められ、その結果が“１”であるか否かが判断される。ここで、論理積の結果が“１”である場合には、配列変数Ｖｔに変数Ｖｇの値が格納され、論理積の結果が“１”でない場合には、変数Ｖｔの値が保持される（Ｓ５０５）。
【００４８】
そして、変数Ｐｒｅ＿ＤＡＴＡに変数ＣｕｒｒｅｎｔＤａｔａの値が格納される（Ｓ５０６）。また、変数Ｖｇの値が、Ｌａｓｔ＿Ｖｇと等しいか否かが判断される（Ｓ５０７）。Ｌａｓｔ＿Ｖｇは、Ｓ５０４〜Ｓ５０６に示されるループ処理の終了条件となるゲート電圧値である。変数Ｖｇの値がＬａｓｔ＿Ｖｇと等しくない場合、変数Ｖｇの値が所定の値（Ｖｓｔｅｐ）だけ更新されてＳ５０４に戻る。つまり、複数の異なるゲート電圧で、メモリセルのデータが読み出されることになる。変数Ｖｇの値がＬａｓｔ＿Ｖｇと等しい場合、処理を終了する。
【００４９】
以上の処理により、所定のアドレス範囲に含まれるメモリセルのしきい値がわかる。得られたしきい値は、アドレスと関連付けられて、図２に示すワークメモリ内のアドレス／しきい値テーブルに格納される。なお、当該機能を、任意のアドレス範囲について動作させることで、８ビット分以上のアドレス範囲に含まれるメモリセルのしきい値を得ることができる。
【００５０】
−修復データ判別機能−
図６は、データ判別部における修復データ判別機能の処理の例を示すフローチャートである。修復データ判別機能は、所定のアドレス範囲に含まれるメモリセルの真のデータ、つまり、メモリセルにデータが書き込まれたときの論理値を判別する機能である。
【００５１】
まず、不安定ビットのアドレス算出機能（図４参照）によって算出されたアドレスが、変数ｕＡｄｄｒｅｓｓに格納される（Ｓ６０１）。
【００５２】
次に、変数ｕＡｄｄｒｅｓｓの値を用いて、メモリセルのしきい値算出機能（図５参照）が実行される。これによって算出されたしきい値が、変数ｕＶｔ１に格納される（Ｓ６０２）。そして、プログラムに必要な電圧として、例えば、メモリセルの書き込み特性を知るために必要な１パルス分の電圧を、変数ｕＡｄｄｒｅｓｓの値で示されるメモリセルに印加する（Ｓ６０３）。これにより、メモリセルのしきい値が微少に変化する（しきい値変更機能）。なお、Ｓ６０３において、消去電圧やワード線ストレスなど他の手段を用いて、しきい値を変化させてもよい。
【００５３】
再度、メモリセルのしきい値算出機能が実行され、得られたしきい値が、変数ｕＶｔ２に格納される（Ｓ６０４）。つまり、Ｓ６０２〜Ｓ６０４において、しきい値の変化の前後における、メモリセルのしきい値が得られる。そして、変数ｕＶｔ１の値とｕＶｔ２の値との差分が、定数Ａの値よりも大きいか否かが判断される。この差分が、定数Ａよりも大きい場合には、変数ｔｒｕｅ＿Ｄａｔａに“１”が格納され、小さい場合には、変数ｔｒｕｅ＿Ｄａｔａに“０”が格納される（Ｓ６０５）。なお、定数Ａの値は、既知のメモリセルの特性に基づいて設定されるものであり、メモリセルの書き込み特性から経験的に得られる値である。例えば、定数Ａは、書き込み状態のメモリセルが経時変動したときに、Ｓ６０３において、メモリセルに印加された電圧によって変化しうるしきい値に相当する。したがって、Ｓ６０３によって、メモリセルのしきい値が変化しうる量よりも、メモリセルのしきい値が実際に変化した量が大きい場合は、そのメモリセルは書き込みされすい状態となっていると言える。すなわち、そのメモリセルの真データは、“１”（消去状態）であったということになる。
【００５４】
以上の処理により、メモリセルの真のデータを判別することができる。なお、Ｓ７０１を省略してもよい。この場合、Ｓ７０２およびＳ７０４において、全アドレス範囲について、メモリセルのしきい値を算出すればよい。
【００５５】
また、当該機能の実行により判別できた真のデータによって、メモリセルのデータを修復することができる。データの修復については、外部装置１８から修復コマンドと、修復対象のメモリセルのアドレスおよびそのメモリセルの真のデータとを入力してもよい。あるいは、修復コマンドを入力せずに、データ判別部３０３が、上記各機能の実行によって取得したアドレスおよび真のデータを用いて、メモリセルのデータを修復するようにしてもよい（修復機能）。
【００５６】
−修復データ判別機能の別の例−
図７は、データ判別部における修復データ判別機能の処理の例を示す別のフローチャートである。当該修復データ判別機能には、データを修復する機能も含まれている。
【００５７】
まず、不安定ビットのアドレス算出機能（図４参照）によって算出されたアドレスが、変数ｕＡｄｄｒｅｓｓに格納される（Ｓ７０１）。
【００５８】
変数ｓｅｌｅｃｔ＿ａｒｅａには、データ修復の対象となるアドレス範囲が格納されており、そのアドレス範囲に含まれるメモリセルのデータが読み出され、図２に示すワークメモリに書き出される（Ｓ７０２）。変数ｓｅｌｅｃｔ＿ａｒｅａの値は、変数ｕＡｄｄｒｅｓｓの値を含んだアドレス範囲でもよく、変数ｕＡｄｄｒｅｓｓの値と同一でもよい。
【００５９】
そして、変数ｓｅｌｅｃｔ＿ａｒｅａの値で示されるメモリセルに対して、そのデータが“０”となるようにプログラムが行われる（Ｓ７０３）。これにより、しきい値が変化する。その後、変数ｓｅｌｅｃｔ＿ａｒｅａの値で示されるメモリセルのデータが消去され（Ｓ７０４）、メモリセルのしきい値算出機能（図５参照）を動作させ、得られたしきい値が、変数ｕＶｔ３に格納される（Ｓ７０５）。
【００６０】
その後、変数ｕＶｔ３の値と定数Ｂの値との大小関係が判断される。変数ｕＶｔ３の値が、定数Ｂの値よりも大きい場合には、変数ｔｒｕｅ＿Ｄａｔａに“１”が格納され、小さい場合には、変数ｔｒｕｅ＿Ｄａｔａに“０”が格納される（Ｓ７０６）。これにより、データ判別部３０３は、Ｓ７０２において、ワークメモリ３０２に読み出したデータを、変数ｔｒｕｅ＿Ｄａｔａの値に従って、真のデータに修復することができる。
【００６１】
なお、定数Ｂの値は既知のメモリセルの特性から、メモリセルの真のデータを判別できるように指定する。ここでは、Ｓ７０４でデータが消去された後に、Ｓ７０５で取得されたしきい値が、正常なメモリセルのしきい値（例えば定数Ｂの値）と比べて高いか否かで真のデータを判別している。あるメモリセルのデータを消去した後のしきい値は、そのメモリセルのデータを消去する速さに関係し、しきい値が低いほど、データを速く消去できるという特性になる。この特性を利用して、消去のスピードが速いとき、すなわち、変数ｕＶｔ３の値が定数Ｂの値よりも小さいときは、真のデータが“０”、逆に、消去のスピードが遅いとき、すなわち、変数ｕＶｔ３の値が定数Ｂの値よりも大きいときは、真のデータが”1”と判別することができる。
【００６２】
そして、ワークメモリ３０２に退避されたデータが、データ修復の対象となったアドレス範囲に含まれるメモリセルに書き戻される（Ｓ７０７）。
【００６３】
以上の処理により、不安定状態になっているメモリセルのデータを真のデータに修復することができる。
【００６４】
以上、本実施形態によると、例えば解析コマンドにより、上述した４つの機能が動作することで、メモリセルのデータ、アドレスおよびしきい値を得ることができる。これにより、どのアドレスのメモリセルのしきい値が劣化しているか否かがわかる。また、解析コマンドの実行結果に基づいて、修復コマンドを実行することでメモリセルのデータを修復することができる。したがって、しきい値が劣化しているメモリセルの数にかかわらず、メモリセルのデータを修復することができる。つまり、大量のビットエラーを修復することができ、データの長期保証が可能となる。
【００６５】
また、本実施形態では、ＥＣＣ機能によるエラー訂正用のメモリセル、およびパリティセル等が不要であるため、メモリサイズの縮小化を図ることができる。
【００６６】
なお、修復コマンドを入力することで、解析コマンドによる処理と、メモリセルのデータを修復する処理の両方を行うようにしてもよい。また、外部コマンドによって、上述した４つの機能全てが動作する必要はない。例えば、全アドレス範囲について、メモリセルの状態を解析して、データを修復する場合には、フェイルビットカウント算出機能および不安定ビットのアドレス算出機能の実行は不要である。外部コマンドに、引数やオプションを付加することで、所定の機能を動作させるようにしてもよい。
【００６７】
また、上述した４つの機能において用いられる各変数を、ワークメモリ３０２に設定してもよい。この場合、データ判別部３０３は、各機能を動作させる上で、ワークメモリ３０２から必要な変数を参照すればよい。
【００６８】
また、データ修復システム３０は、電源投入時あるいはメモリチェック時に、修復データ判別機能（図６，図７参照）を動作させ、必要であればデータを修復するようにしてもよい。例えば、電源投入時に、フェイルビットカウント算出機能を動作させることで取得したメモリセルのしきい値の分布と、所望のしきい値の分布との相違が大きい場合、すなわち、メモリセルのしきい値が劣化している場合に、データを修復するようにすればよい。これにより、メモリセルの解析およびデータの修復を自動化することができる。
【００６９】
＜データ修復システムの変形例＞
図８は、図２のデータ修復システムの別の構成例を示すブロック図である。図２および図８における共通の符号は、同一の構成要素を示すため、その説明を省略する。
【００７０】
データ修復システム３０は、アナログ電源回路３０６と、電流検知回路３０７と、これら回路とデータ判別部３０３との間で送受信される信号の変換を行うＡＤ／ＤＡ（Analog to Digital/Digital to Analog）コンバータ３０８とを備えている。
【００７１】
アナログ電源回路３０６は、メモリコア１０に接続され、メモリセルに印加するゲート電圧を出力する。ゲート電圧は、データ判別部３０３の指示によって変更可能である。つまり、アナログ電源回路３０６は、データ判別部３０３によって実行される機能に応じたゲート電圧を出力する。これにより、メモリコア１０に内蔵された電源による電圧制御よりも細かいレベルでの電圧制御が可能となる。例えば、図５に示すＳ５０８において、電圧の変化の幅（Ｖｓｔｅｐ）を、より細かく設定することができるため、メモリコア１０に内蔵された電源による電圧制御に依らない高い精度で、メモリセルのしきい値を算出することができる。
【００７２】
電流検知回路３０７は、メモリコア１０に接続され、データ判別部３０３の指示によりメモリセルに流れる電流を検知する。これにより、メモリコア１０に内蔵されているデータ読み出し回路よりも細かいレベルでの、データの読み出しが可能となる。つまり、より高精度に、メモリセルのデータを判別することができる。
【００７３】
なお、本実施形態において、図１に示すコントローラ２０は、データ修復システム３０内に設けてもよく、外部装置１８内に設けてもよい。
【００７４】
また、本実施形態に係る不揮発性半導体メモリシステムを、ＵＳＢ（Universal Serial Bus）メモリやＳＳＤ（Solid State Drive）等のストレージデバイスに搭載してもよい。これにより、ＵＳＢメモリおよびＳＳＤの耐用年数を向上させることができる。
【産業上の利用可能性】
【００７５】
本発明では、データの長期保証が可能で、データの書き換え可能回数を向上させることができるため、例えば、データの信頼性を高く維持すること等に有用である。
【符号の説明】
【００７６】
１０            メモリコア
２０            コントローラ
３０            データ修復システム
３０１          コマンド処理部
３０２          ワークメモリ（メモリ）
３０３          データ判別部
３０４          データＩ／Ｏ（入出力回路）
３０５          アドレスＩ／Ｏ（入出力回路）
３０６          アナログ電源回路
３０７          電流検知回路
【図１】
2012230731.tif 000003
【図２】
2012230731.tif 000004
【図３】
2012230731.tif 000005
【図４】
2012230731.tif 000006
【図５】
2012230731.tif 000007
【図６】
2012230731.tif 000008
【図７】
2012230731.tif 000009
【図８】
2012230731.tif 000010
【図９】
2012230731.tif 000011