(57)【要約】【課題】外部アクセス速度を高速化すると共に信頼性が高い不揮発性記憶装置および不揮発性記憶装置の制御方法を提供すること。【解決手段】  不揮発性メモリ１は、少なくとも１つの書込み対象メモリセルへのプログラム情報ＰＤの書込みに先立って、書込み対象メモリセルに関連する複数のメモリセルに保持されるデータに対してＥＣＣチェックを行うＥＣＣ検出回路１９を備える。また、書込み対象メモリセルへのプログラム情報ＰＤの書込みと同時期に、ＥＣＣ検出回路１９により訂正が必要と判断された訂正対象メモリセルへ訂正情報ＣＤを書き込むプログラム情報修正／ＥＣＣデータ作成回路１２を備える。【選択図】図１
2009223941.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つの書込み対象メモリセルへの書込みデータの書込みに先立って、前記書込み対象メモリセルに関連する複数のメモリセルに保持されるデータに対してＥＣＣチェックを行うステップと、
前記書込み対象メモリセルへの前記書込みデータの書込みと同時期に、前記ＥＣＣチェックにより訂正が必要と判断された訂正対象メモリセルへ訂正データを書き込むステップと
を備えることを特徴とする不揮発性記憶装置の制御方法。
【請求項２】
前記書き込むステップは、
前記訂正対象メモリセルと前記書込み対象メモリセルとが一致する場合には、前記訂正データの書込みを行わない
ことを特徴とする請求項１に記載の不揮発性記憶装置の制御方法。
【請求項３】
前記訂正対象メモリセルへの前記訂正データの書込みは、プログラム動作または／およびイレース動作である
ことを特徴とする請求項１に記載の不揮発性記憶装置の制御方法。
【請求項４】
前記書込み対象メモリセルは１本のワード線に含まれ、
前記書込み対象メモリセルに関連する複数のメモリセルは、前記１本のワード線と同一ワード線に含まれる
ことを特徴とする請求項１に記載の不揮発性記憶装置の制御方法。
【請求項５】
前記書込み対象メモリセルは１本のワード線に含まれ、
前記書込み対象メモリセルに関連する複数のメモリセルは、前記１本のワード線を含むセクタ領域／バンク領域に含まれるメモリセルである
ことを特徴とする請求項１に記載の不揮発性記憶装置の制御方法。
【請求項６】
前記書込み対象メモリセルに関連する複数のメモリセルは、
前記書込み対象メモリセルが含まれる自セクタ／バンク領域以外の他セクタ／バンク領域に含まれるメモリセルである
ことを特徴とする請求項１に記載の不揮発性記憶装置の制御方法。
【請求項７】
前記書込み対象メモリセルは１本のワード線に含まれ、
前記書込み対象メモリセルに関連する複数のメモリセルは、前記自セクタ／バンク領域の前記１本のワード線と関連する前記他セクタ／バンク領域内のワード線と同一ワード線に含まれる
ことを特徴とする請求項６に記載の不揮発性記憶装置の制御方法。
【請求項８】
前記ＥＣＣチェックを行うステップは、
前記書込み対象メモリセルを含むワード線、または前記書込み対象メモリセルを含むセクタ領域、または前記書込み対象メモリセルを含むバンク領域をリードアクセスするステップと、
前記リードアクセスにより得られたデータにＥＣＣ処理を行うステップと
前記リードアクセスにより得られたデータのうちから前記書込みデータおよび前記訂正データを置換したデータに対して、前記ＥＣＣ処理を再度行うステップと
を備えることを特徴とする請求項１に記載の不揮発性記憶装置の制御方法。
【請求項９】
前記ＥＣＣチェックを行うステップは、モードレジスタ設定値に従って活性／非活性される
ことを特徴とする請求項８に記載の不揮発性記憶装置の制御方法。
【請求項１０】
少なくとも１つの書込み対象メモリセルへの書込みデータの書込みに先立って、前記書込み対象メモリセルに関連する複数のメモリセルに保持されるデータに対してＥＣＣチェックを行うＥＣＣ処理回路と、
前記書込み対象メモリセルへの前記書込みデータの書込みと同時期に、前記ＥＣＣ処理回路により訂正が必要と判断された訂正対象メモリセルへ訂正データを書き込む書き込み制御回路と
を備えることを特徴とする不揮発性記憶装置。
【請求項１１】
前記ＥＣＣ処理回路は、
ＥＣＣ処理の結果得られるＥＣＣ訂正アドレスを格納し、前記書き込み制御回路へ出力する訂正情報格納部を備える
ことを特徴とする請求項１０に記載の不揮発性記憶装置。
【請求項１２】
前記書き込み制御回路は、
前記訂正対象メモリセルと前記書込み対象メモリセルとが一致する場合には、前記訂正データの書込みを行わない
ことを特徴とする請求項１０に記載の不揮発性記憶装置。
【請求項１３】
前記書き込み制御回路は、
入力される前記訂正対象メモリセルのアドレスと、入力される前記書込み対象メモリセルのアドレスとの一致を検出するアドレス一致検出回路を備える
ことを特徴とする請求項１０に記載の不揮発性記憶装置。
【請求項１４】
前記書き込み制御回路は、前記書込みデータから前記訂正データを置換した再構築書込みデータを生成し、
前記ＥＣＣ処理回路は、前記再構築書込みデータに対してＥＣＣチェックを行う
ことを特徴とする請求項１０に記載の不揮発性記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は不揮発性記憶装置および不揮発性記憶装置の制御方法に関し、特に、外部アクセス速度を高速化すると共に信頼性が高い不揮発性記憶装置および不揮発性記憶装置の制御方法を提供することが可能な技術に関するものである。
【背景技術】
【０００２】
従来、ＥＣＣ処理は、外部リードアクセスの動作中に行われていた。そしてＥＣＣ処理が行われた結果のデータ情報がＩ／Ｏ端子へ出力されていた。
【０００３】
また従来、ＥＣＣ処理はメモリデバイスの起動時またはアイドル時に行われていた。そしてエラーデータを、ＥＣＣ処理結果に応じて訂正されたデータに書き直していた。
【０００４】
尚、上記の関連技術として特許文献１ないし４が開示されている。
【特許文献１】特開２００３−２９７０９９号公報
【特許文献２】特開２００３−２４８６３１号公報
【特許文献３】特開２００３−１４０９８２号公報
【特許文献４】特開２００１−１４２２６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし外部リードアクセス時にＥＣＣ処理を含めると、外部アクセス速度が低下するため問題である。
【０００６】
また、メモリ起動時またはアイドル時にＥＣＣ処理を含めると、 プログラム動作やイレース動作に時間の掛かる不揮発性メモリでは、書き直す時間が大きく、ビジー期間が長くなるため問題である。更に、メモリデバイス外と非同期で実行されるバックグラウンドでのＥＣＣ処理には、メモリデバイス外部からのアクセスとのアービタ処理が必須であり、外部アクセスが遅れる懸念がある。
【０００７】
本発明は前記背景技術に鑑みなされたものであり、外部アクセス速度を高速化すると共に信頼性が高い不揮発性記憶装置および不揮発性記憶装置の制御方法を提供することが可能な不揮発性記憶装置および不揮発性記憶装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
前記目的を達成するためになされた本発明に係る不揮発性記憶装置の制御方法は、少なくとも１つの書込み対象メモリセルへの書込みデータの書込みに先立って、書込み対象メモリセルに関連する複数のメモリセルに保持されるデータに対してＥＣＣチェックを行うステップと、書込み対象メモリセルへの書込みデータの書込みと同時期に、ＥＣＣチェックにより訂正が必要と判断された訂正対象メモリセルへ訂正データを書き込むステップとを備えることを特徴とする。
【０００９】
また本発明に係る不揮発性記憶装置は、少なくとも１つの書込み対象メモリセルへの書込みデータの書込みに先立って、書込み対象メモリセルに関連する複数のメモリセルに保持されるデータに対してＥＣＣチェックを行うＥＣＣ処理回路と、書込み対象メモリセルへの書込みデータの書込みと同時期に、ＥＣＣ処理回路により訂正が必要と判断された訂正対象メモリセルへ訂正データを書き込む書き込み制御回路とを備えることを特徴とする。
【００１０】
本発明に係る不揮発性記憶装置の制御方法および不揮発性記憶装置では、少なくとも１つの書込み対象メモリセルを有する。書込みデータは、ユーザが不揮発性記憶装置の書込み対象メモリセルに書き込むデータである。そして書込み対象メモリセルに関連して、複数のメモリセルが存在する。複数のメモリセルの例としては、書込み対象メモリセルと同一ワード線上のメモリセルや、書込み対象メモリセルが含まれるセクタまたはバンクを構成するメモリセルなどが挙げられる。ＥＣＣチェックが行われることで、誤ったデータが保持されている訂正対象メモリセルが判明する。そして訂正データを書き込むステップまたは書き込み制御回路により、正しいデータである訂正データが訂正対象メモリセルへ書き込まれる。このとき訂正データの書込みは、書込み対象メモリセルへの書込みデータの書込みと同時期に行われる。
【００１１】
動作を説明する。ＥＣＣチェックを行うステップまたはＥＣＣ処理回路では、書込みデータの書込みに先立ってＥＣＣチェックが行われる。ここでＥＣＣチェックを行うためには、まずＥＣＣチェック対象の領域のデータを読み出す必要がある。ここでデータ読出し動作時間がデータ書込み動作時間に対して無視できる程度に小さい場合には、ＥＣＣチェックに必要な時間も小さくすることができる。よって書込みデータの書込みに先立ってＥＣＣチェックを行うことによって、実質的なデータ書込み時間はロスしない。書き込むステップまたは書き込み制御回路では、書込み対象メモリセルへの書込みデータの書込みと同時期に、訂正対象メモリセルへの訂正データの書込みが行われる。すなわち、書込みデータの書込みと共に、メモリセルに保持されたデータ自身の訂正も併せて行われる。
【００１２】
従来の不揮発性記憶装置においては、起動時またはアイドル時、それ以前に書き込まれたデータ自身を訂正するため、訂正データを書き込むための専用の時間が必要となる。よってビジー期間が発生していた。更に、メモリデバイス外と非同期で実行されるバックグラウンドでのECC処理には、メモリデバイス外部からのアクセスとのアービタ処理が必須であり、外部アクセスが遅れる懸念がある。しかし本発明に係る不揮発性記憶装置の制御方法および不揮発性記憶装置では、外部からのプログラム対象の書込みデータを書込み対象メモリセルへ書き込む際に必ず必要とされる書込み時間に隠れて、訂正データを訂正対象メモリセルへ書き込むため、起動時またはアイドル時に訂正データを書き込むための専用の時間を別途取る必要がない。よって起動時またはアイドル時にビジー期間を作らないため、外部アクセス速度を高速化できる。
【００１３】
また従来の不揮発性記憶装置においては、読出し時のたびに読み出したデータにＥＣＣ処理を行った上で出力するため、外部アクセス速度が低下していた。しかし本発明に係る不揮発性記憶装置の制御方法および不揮発性記憶装置では、書き込まれたデータ自身を訂正するので、読出し時のたびに読み出したデータにＥＣＣ処理を行う必要がない。よって外部アクセス速度を高速化できる。そして、それ以前に書き込まれたデータ自身が訂正されるため、リテンション不良（特に不揮発性メモリセルの隣接メモリセルをアクセスすることによる注目メモリセルのディスターブ等による記憶情報の劣化）の影響を排除することができる。よって不揮発性記憶装置の信頼性を高めることができる。
【発明の効果】
【００１４】
本発明によれば、外部アクセス速度を高速化すると共に信頼性が高い不揮発性記憶装置および不揮発性記憶装置の制御方法を提供することができる。
【発明を実施するための最良の形態】
【００１５】
本発明の第１実施形態に係る不揮発性メモリ１を図１に示す。不揮発性メモリ１は、メモリセル部５、Ｙゲート４、Ｉ／Ｏバッファ１１、プログラム情報修正／ＥＣＣデータ作成回路１２、コマンドレジスタ／ステートコントロール部１３、プログラム電圧生成部１４、イレース電圧生成部１５、アドレスバッファ１６、Ｘ／Ｙデコーダ１７、リード回路１８、ＥＣＣ検出回路１９、ＥＣＣ訂正情報格納部２０を備える。
【００１６】
コマンドレジスタ／ステートコントロール部１３には、不揮発性記憶装置外部から不図示の外部コントロールピンを介して、各種のコマンドＣＭＤが入力される。またコマンドレジスタ／ステートコントロール部１３から出力される電圧制御信号ＶＳ１はプログラム電圧生成部１４へ入力され、電圧制御信号ＶＳ２はイレース電圧生成部１５へ入力される。またコマンドレジスタ／ステートコントロール部１３から出力される信号ＰＧＭｐｕｌｓｅまたは信号ＥＲｐｕｌｓｅ、信号ＭＯＤＥ、信号ＤＬＢは、プログラム情報修正／ＥＣＣデータ作成回路１２へ入力され、信号ＦＬＡＧ＿ＲＳＴ、信号ＥＣＣ＿ＬＯＡＤ＿ｐｕｌｓｅはＥＣＣ訂正情報格納部２０へ入力され、信号ＷＬ＿ｐｕｌｓｅおよび信号Ｃｏｌ＿ｐｕｌｓｅは、アドレスバッファ１６に入力される。またプログラム電圧生成部１４から出力されるプログラム用電圧ＶＰＲＯＧは、プログラム情報修正／ＥＣＣデータ作成回路１２へ入力され、プログラム時のワード線用電圧ＶＧはＸ／Ｙデコーダ１７へ入力される。またイレース電圧生成部１５から出力されるイレース用電圧ＶＥＲは、Ｘ／Ｙデコーダ１７へ入力される。
【００１７】
アドレスバッファ１６には、不図示の外部アドレスピンを介して、プログラムアドレスＰＧＭ＿Ａｄｄが入力される。プログラムアドレスＰＧＭ＿Ａｄｄは、バンクアドレスＢＡ＿Ａｄｄ、ワード線アドレスＷＬ＿Ａｄｄ、コラムアドレスＣｏｌ＿Ａｄｄを含む。アドレスバッファ１６からはプログラムアドレスＰＧＭ＿ＡｄｄおよびＰＧＭ＿Ａｄｄのワード線アドレスまたはコラムアドレスをインクリメントしたアドレスＣＯＮＴが出力され、プログラム情報修正／ＥＣＣデータ作成回路１２に入力される。Ｘ／Ｙデコーダ１７からメモリセル部５へは、ワード線への供給電圧である電圧ＶＷＬが入力される。また、Ｘ／Ｙデコーダ１７からＹゲート４へは、コラムデコータスイッチを選択活性化するためのゲート電圧である電圧ＶＣＤが入力される。
【００１８】
Ｉ／Ｏバッファ１１には、不図示の外部ＤＱピンを介して、プログラム情報ＰＤが入力される。なおＩ／Ｏバッファ１１は、例えばＤＱピンから１６ビットパラレル入出力の場合には、Ｉ／Ｏ数分だけ備えられる。
【００１９】
メモリセル部５は、メモリセルアレイ２およびＥＣＣメモリセルアレイ３を備える。メモリセルおよびＥＣＣメモリセルを選択して活性化するワード線ＷＬ（０）ないしＷＬ（ｋ）が、メモリセルアレイ２およびＥＣＣメモリセルアレイ３を貫いて備えられる。つまり、メモリセルおよびＥＣＣメモリセルは、一つのワード線で共通接続される。ここでワード線ＷＬ（ｉ）に接続される複数のメモリセルを、ワード線メモリセル群ＭＧ（ｉ）と定義する。またワード線ＷＬ（ｉ）に接続される複数のＥＣＣメモリセルを、ワード線ＥＣＣメモリセル群ＥＧ（ｉ）と定義する。ワード線メモリセル群ＭＧ（ｉ）にはデータＭＤ（ｉ）が保持される。またワード線ＥＣＣメモリセル群ＥＧ（ｉ）には、データＭＤ（ｉ）についてのＥＣＣコードＥＣ（ｉ）が保持される。またメモリセルおよびＥＣＣメモリセルのデータを入出力できる複数のビットラインが連結される。
【００２０】
リード回路１８にはデータＭＤおよびＥＣＣコードＥＣが入力・保持される。リード回路１８から出力されるデータＭＤ、ＥＣＣコードＥＣ、信号ＤＡＶ、ベリファイ結果信号ＭＡＴＣＨが出力される。ＥＣＣ検出回路１９へはデータＭＤ、ＥＣＣコードＥＣ、信号ＤＡＶが入力される。またＩ／Ｏバッファ１１へはデータＭＤが入力され、プログラム情報修正／ＥＣＣデータ作成回路１２へはデータＭＤおよび信号ＤＡＶが入力され、コマンドレジスタ／ステートコントロール部１３へはベリファイ結果信号ＭＡＴＣＨが入力される。ＥＣＣ検出回路１９では、訂正情報ＣＤを生成し、ＥＣＣ訂正情報格納部２０へ出力する。また、ＥＣＣ検出信号ＥＣＣ＿Ｄｅｔをコマンドレジスタ／ステートコントロール部１３へ出力する。ＥＣＣ訂正情報格納部２０は、訂正アドレスＥＣＣ＿Ａｄｄ、訂正信号ＥＣＣＩＮ、信号ＥＣＣＤ、フラグ情報ＥＣＣ＿Ｆｌａｇを出力する。訂正アドレスＥＣＣ＿Ａｄｄおよび訂正信号ＥＣＣＩＮはプログラム情報修正／ＥＣＣデータ作成回路１２へ入力される。信号ＥＣＣＤはプログラム情報修正／ＥＣＣデータ作成回路１２およびコマンドレジスタ／ステートコントロール部１３へ入力される。フラグ情報ＥＣＣ＿Ｆｌａｇは、コマンドレジスタ／ステートコントロール部１３へ入力され、コマンドレジスタ／ステートコントロール部１３から出力される信号ＳＴＡＴＵＳとして不図示のＤＱピンまたは専用ピンを介して、不図示の外部のメモリコントローラへ入力される。プログラム情報修正／ＥＣＣデータ作成回路１２から出力される信号ＥＣＣ＿ＣＯＭＰ、信号ＣＰＲＧＭＡｄｄ＿ＭＡＴＣＨは、コマンドレジスタ／ステートコントロール部１３へ入力され、データＤＡＴＡＢおよびデータＥＣＣＤＡＴＡＢはＹゲート４へ入力される。
【００２１】
図２に、プログラム情報修正およびプログラム情報修正／ＥＣＣデータ作成回路１２の内部回路を示す。プログラム情報修正／ＥＣＣデータ作成回路１２は、プログラム情報修正回路３１、ＥＣＣデータ生成回路３２、ＥＣＣコード用プログラム／イレース制御回路３３、データ用プログラム／イレース制御回路３４、第１プログラムバッファ４１、訂正アドレス検出回路４２、第２プログラムバッファ４３を備える。なお、プログラム情報修正回路３１は、ＤＱピンが１６ビットパラレル入出力の場合は、Ｉ／Ｏ数分だけ備える。またデータ用プログラム／イレース制御回路３４は１ワード線のメモリセル数分、ＥＣＣコード用プログラム／イレース制御回路３３はＥＣＣメモリセル数分だけ備える。
【００２２】
プログラム情報修正回路３１は、インバータＩＮＶ１およびＩＮＶ２、アンド回路ＡＤ１ないしＡＤ３、オア回路ＯＲ１を備える。第１プログラムバッファ４１には、データＭＤ、プログラム情報ＢＰＤが入力される。訂正アドレス検出回路４２には、プログラムアドレスＰＧＭ＿Ａｄｄ、訂正アドレスＥＣＣ＿Ａｄｄ、訂正信号ＥＣＣＩＮが入力される。第１プログラムバッファ４１から出力されるプログラム情報ＰＢＯＵＴ１はアンド回路ＡＤ１およびＡＤ２に入力される。訂正アドレス検出回路４２から出力される一致信号ＰＧＭＡｄｄ＿ＭＡＴＣＨは、アンド回路ＡＤ１に入力されると共に、インバータＩＮＶ１を介してアンド回路ＡＤ２およびＡＤ３へ入力される。訂正アドレス検出回路４２から出力される一致信号ＣＰＧＭＡｄｄ＿ＭＡＴＣＨは、コマンドレジスタ／ステートコントロール部１３へ入力される。訂正アドレス検出回路４２から出力される訂正信号ＥＣＣＩＮＯは、アンド回路ＡＤ２に入力されると共に、インバータＩＮＶ２を介してアンド回路ＡＤ３へ入力される。またアンド回路ＡＤ３には信号ＥＣＣＤが入力される。アンド回路ＡＤ１ないしＡＤ３の出力はオア回路ＯＲ１へ入力される。オア回路ＯＲ１からは修正処理されたプログラム情報ＣＯＭＰＤが出力され、第２プログラムバッファ４３へ入力される。第２プログラムバッファ４３からは再構成プログラム情報ＲＰＤおよびデータＰＢＯＵＴ２が出力される。ＥＣＣデータ生成回路３２には再構成プログラム情報ＲＰＤが入力される。ＥＣＣデータ生成回路３２から出力される再構成プログラム情報ＲＰＤに対する再構成ＥＣＣコードＲＥＣは第２プログラムバッファ４３へ、ＥＣＣ＿ＣＯＭＰはコマンドレジスタ／ステートコントロール部１３へ入力される。
【００２３】
ＥＣＣコード用プログラム／イレース制御回路３３およびデータ用プログラム／イレース制御回路３４には、データＰＢＯＵＴ２、信号ＰＧＭｐｕｌｓｅまたは信号E Rｐｕｌｓｅ、信号ＭＯＤＥ、信号ＤＡＶ、信号ＤＬＢ、プログラム用電圧ＶＰＲＯＧがそれぞれ入力される。そしてＥＣＣコード用プログラム／イレース制御回路３３からはデータＥＣＣＤＡＴＡＢが出力され、データ用プログラム／イレース制御回路３４からはデータＤＡＴＡＢが出力される。
【００２４】
図２において、アンド回路ＡＤ１は、外部からのプログラム対象アドレスのときは、ＥＣＣ処理結果に関わらず外部からのプログラムデータを訂正せずに出力する動作をする回路である。またアンド回路ＡＤ２は、外部からのプログラム対象アドレス以外で訂正がないプログラムデータを出力する動作をする回路である。またアンド回路ＡＤ３は、プログラムモードとイレースモードとの切り替えを行う回路である。アンド回路ＡＤ３は、プログラムモード（メモリセルを「１⇒０」に訂正）のときにはローレベルを出力し、イレースモード（メモリセルを「０⇒１」に訂正）のときにはハイレベルを出力する。
【００２５】
また図３に、データ用プログラム／イレース制御回路３４の内部回路を示す。データ用プログラム／イレース制御回路３４は、データ入力部５４、ライトアンプラッチ５５、ベリファイ部５６、モード切替部５７、セレクタ５８、レベルシフタ５１、アンド回路５３を備える。ベリファイ部５６のＰチャネルトランジスタＱ１およびＱ２には、信号ＤＡＶがインバータＩＮＶ３を介して相補的に入力される。モード切替部５７のＰチャネルトランジスタＱ３およびＱ４には、信号ＭＯＤＥがインバータＩＮＶ４を介して相補的に入力される。データ入力部５４にはデータＰＢＯＵＴ２および信号ＤＬＢが入力される。ライトアンプラッチ５５のノードＣには、電源電圧ＶＣＣがトランジスタＱ２およびＱ４を介して接続されると共に、データ入力部５４の出力端子が接続される。またライトアンプラッチ５５のノードＢには、電源電圧ＶＣＣがトランジスタＱ１およびＱ３を介して接続される。セレクタ５８は、入力される信号ＭＯＤＥに応じて、ノードＡまたはノードＢの一方を択一に選択する。アンド回路５３の一方の入力端子にはセレクタ５８の出力端子が接続され、他方の入力端子には信号ＰＧＭｐｕｌｓｅまたは信号ＥＲｐｕｌｓｅが入力される。アンド回路５３からはプログラム信号ＰＧが出力される。レベルシフタ５１にはプログラム信号ＰＧおよびプログラム用電圧ＶＰＲＯＧが入力され、データＤＡＴＡＢが出力される。なおＥＣＣコード用プログラム／イレース制御回路３３の構成は、データ用プログラム／イレース制御回路３４と同様であるため、詳細な説明は省略する。
【００２６】
第１実施形態の第１実施例に係る不揮発性メモリ１の動作を説明する。第１実施例は、プログラム方向（データ１からデータ０）の訂正のみを行う場合の回路である。第１実施例が適用される不揮発性メモリ１としては、例えばフラッシュメモリが挙げられる。また第１実施例では、１ワード線あたり単数ビット訂正する場合を説明する。
【００２７】
図４および図５を用いて、不揮発性メモリ１の動作を説明する。外部の不図示のメモリコントローラから、コマンドレジスタ／ステートコントロール部１３にプログラムする旨のコマンドＣＭＤが入力される。これによりプログラム動作を行う旨の指示がされることで、図５に示すフローが開始される。また、アドレスバッファ１６にプログラム対象のメモリセルのアドレスを示すプログラムアドレスＰＧＭ＿Ａｄｄが入力され、Ｉ／Ｏバッファ１１にプログラムされるプログラム情報ＰＤが入力される。
【００２８】
本実施形態では、説明を簡易にするためにＤＱピンからの入出力数を１、すなわちＩ／Ｏ数を１として以後を説明する。例として図４（ａ）に示すように、プログラムアドレスＰＧＭ＿Ａｄｄとして、バンクアドレスＢＡ＿Ａｄｄ＝０、ワード線アドレスＷＬ＿Ａｄｄ＝ｉ、コラムアドレスＣｏｌ＿Ａｄｄ＝０が入力され、プログラム情報ＰＤ（ｉ）＝０が入力される場合を説明する。
【００２９】
図５のＳ１およびＳ２に示すように、プログラム動作に先立って、ＥＣＣチェックが行われる。ＥＣＣチェックでは、まずＳ１において、入力されたプログラムアドレスＰＧＭ＿Ａｄｄより、プログラム対象となるワード線のメモリセルおよびそのＥＣＣメモリセルのリードを行う。具体的には、リードに際しＸ／Ｙデコーダ１７は、外部から入力されたプログラムアドレスＰＧＭ＿Ａｄｄのワード線アドレス（Ｘ−アドレス）に応答して、複数ワード線のうち一つをリード対象として選択する。そして選択されたワード線には、読み出し電圧が供給される。そしてリード回路１８において、プログラム対象であるワード線ＷＬに接続されるメモリセルからデータＭＤがリードされると共に、同一ワード線ＷＬに接続されるＥＣＣメモリセルからＥＣＣコードＥＣが同様にリードされ、リード回路１８内の不図示のレジスタに保持される。
【００３０】
本実施形態では、図４（ｂ）に示すように、ワード線ＷＬ（ｉ）が選択されるので、ワード線ＷＬ（ｉ）のコラムアドレスＣｏｌ＿Ａｄｄ＝０ないしｍに保持されているデータＭＤ（ｉ）がリードされる。またワード線ＷＬ（ｉ）のワード線ＥＣＣメモリセル群ＥＧ（ｉ）に保持されている、ＥＣＣコードＥＣ（ｉ）がリードされる。
【００３１】
なお、このリード動作にかかる時間は、プログラム動作時間（マイクロ秒）に比して無視できる程度（ナノ秒）に小さい。よってプログラム動作に先立ってリード動作を挿入しても、不揮発性メモリ１の動作速度に与える影響は無視できる程度に小さなものである。
【００３２】
次にＳ２において、ＥＣＣ検出回路１９において、ＥＣＣメモリセルから読出したＥＣＣコードＥＣ（ｉ）を用いて、メモリセルから読み出したデータＭＤ（ｉ）に対してＥＣＣチェックを行う。なおＥＣＣチェックは、一般的なＥＣＣチェック方法により行えばよいため、ここでは説明を省略する。ここでＥＣＣ検出回路１９はＥＣＣチェックによりエラーを検出した場合、エラーを検出したことを示す信号であるＥＣＣ検出信号ＥＣＣ＿Ｄｅｔをコマンドレジスタ／ステートコントロール部１３へ出力する。
【００３３】
図４（ｃ）に本実施形態でのＥＣＣチェック結果を示す。ＥＣＣコードＥＣ（ｉ）を用いて、ＥＣＣチェックデータＥＣＤ（ｉ）が生成される（図４、矢印Ａ６）。図４（ｃ）では、コラムアドレスＣｏｌ＿Ａｄｄ＝ｍのメモリセルにおいて、メモリセルのリテンション不良等に起因して、フローティングゲート／ナイトライド等の情報トラップ領域に蓄積された電荷が放出されることにより、本来“０”だったデータが“１”に変わってしまっていることがＥＣＣチェックにより判明する。
【００３４】
ＥＣＣチェックでエラーが検出されない場合（Ｓ３：Ｎｏ）は、プログラム情報ＰＤ（ｉ）によりＥＣＣコードＥＣ（ｉ）が変わるため、Ｓ５へ進み、後述するようにプログラム情報ＰＤの再構成を行い、プログラム処理を行う。一方、ＥＣＣチェックでエラーが検出された場合（Ｓ３：Ｙｅｓ）は、Ｓ４へ進み、訂正情報ＣＤ（ワード線アドレス、訂正データ等）をＥＣＣ訂正情報格納部２０に格納する。ここで訂正情報ＣＤは、図６に示すように、訂正アドレスＥＣＣ＿Ａｄｄ訂正内容ＣＣ、フラグ情報ＥＣＣ＿Ｆｌａｇを備えている。また訂正アドレスＥＣＣ＿Ａｄｄは、訂正が必要なメモリセルを特定するためのアドレスであり、訂正バンクアドレスＣ＿ＢＡ＿Ａｄｄ、訂正ワード線アドレスＣ＿ＷＬ＿Ａｄｄ、訂正コラムアドレスＣ＿Ｃｏｌ＿Ａｄｄを備える。訂正内容ＣＣは、データをイレース側（１）またはプログラム側（０）のどちらに訂正するかの指示内容を含んでいる。なお、本実施形態では、１コラムアドレスに対し一つのＩ／Ｏで構成される場合の説明のため、訂正内容ＣＣは、訂正コラムアドレスＣ＿Ｃｏｌ＿Ａｄｄに対し一つのＩ／Ｏに対しての訂正内容である。一つのコラムアドレスに対し複数Ｉ／Ｏで構成される場合は、訂正対象のＩ／Ｏを除いた訂正対象外のI／Ｏは、メモリセルから読み出したデータＭＤ（ｉ）を訂正コラムアドレスＣ＿Ｃｏｌ＿Ａｄｄの訂正内容ＣＣに格納する。またフラグ情報ＥＣＣ＿Ｆｌａｇは、不揮発性メモリ１の外部にある不図示のメモリコントローラに対して、ＥＣＣ訂正処理の有無を示すビットである。フラグ情報ＥＣＣ＿Ｆｌａｇは、ＥＣＣチェックによりエラーが検出された時点で“１”にセットされ、コマンドレジスタ／ステートコントロール部１３へ入力し、訂正が完了した後にコマンドレジスタ／ステートコントロール部１３から出力される信号ＦＬＡＧ＿ＲＳＴにより“０”へリセットされる。
【００３５】
本実施形態では、コラムアドレスＣｏｌ＿Ａｄｄ＝ｍのメモリセルにおいてＥＣＣエラーが検出された場合を説示しているため、Ｓ３からＳ４へ進む。そして訂正情報ＣＤがＥＣＣ訂正情報格納部２０へ格納される。ここで訂正情報ＣＤの内容は、訂正バンクアドレスＣ＿ＢＡ＿Ａｄｄ＝バンク０、訂正ワード線アドレスＣ＿ＷＬ＿Ａｄｄ＝ｉ、訂正コラムアドレスＣ＿Ｃｏｌ＿Ａｄｄ＝ｍ、訂正内容ＣＣはデータをプログラム側へ訂正する旨の情報、またフラグ情報ＥＣＣ＿Ｆｌａｇ＝１である。
【００３６】
外部の不図示のメモリコントローラは、フラグ情報ＥＣＣ＿Ｆｌａｇ＝１が入力されることで、不揮発性メモリ１がＥＣＣチェック動作中（訂正PGM終了までを含む）であることを認識する。これによりメモリコントローラは、ＥＣＣチェックが終了するまで電源を落とさないように不揮発性メモリ１への供給電源をコントロールすることが可能となる。なお不揮発性メモリ１からメモリコントローラへのフラグ情報ＥＣＣ＿Ｆｌａｇの伝達は、コマンドレジスタ／ステートコントロール部１３へ入力し、および不図示のＤＱピンおよび専用ピンを介して、出力される信号ＳＴＡＴＵＳにて行われる。コマンドレジスタ／ステートコントロール部１３内のフラグ情報レジスタへフラグ情報ＥＣＣ＿Ｆｌａｇを格納し、メモリコントローラが必要に応じてそのフラグ情報レジスタを参照するようにしても良い。
【００３７】
次にＳ５において、プログラム情報ＰＤの再構成が行われる。プログラム情報ＰＤの再構成は、外部からのプログラム情報ＰＤに、訂正情報ＣＤを組み込む動作である。Ｓ５では、プログラム情報修正／ＥＣＣデータ作成回路１２において、ＥＣＣ訂正情報格納部２０に格納された訂正情報ＣＤに基づき、プログラム情報ＰＤの再構成が行われる。また、プログラム情報ＰＤによりＥＣＣコードＥＣが変更となるため、プログラム情報ＰＤの再構成は必要になる。
【００３８】
Ｓ５で行われるプログラム情報の再構成の詳細について、図２ないし図７を用いて説明する。プログラム情報の再構成に先立ち、外部からのプログラム対象アドレスのプログラム情報ＰＤが、Ｉ／Ｏバッファ１１に格納されている。本実施形態では、プログラム情報ＰＤ（ｉ）＝０が、Ｉ／Ｏバッファ１１に入力および保持されている。ここでプログラム情報ＰＤは、例えば１６ビット入出力の場合には１６ビット並列にＩ／Ｏバッファ１１に入力されてもよい。なお本実施形態では説明の簡略のため、１ビット入出力の場合を説明する。
【００３９】
図７のＳ１２において、プログラム対象となる一つのワード線のメモリセルおよびＥＣＣメモリセルの読み出しを行う。本実施形態では、リード回路１８において、プログラム対象であるワード線アドレスＷＬ＿ａｄｄ＝ｉのワード線に接続されるメモリセルからデータＭＤ（ｉ）およびＥＣＣコードＥＣ（ｉ）がリードされ、ＥＣＣ検出回路１９内の不図示のレジスタに保持される。ただし、図５のＳ１にて既にプログラム対象となる一つのワード線のメモリセルおよびECCメモリセルの読み出されたデータＭＤ（ｉ）およびＥＣＣコードＥＣ（ｉ）が、リード回路１８において図７のＳ１２までラッチされている場合は、図７のＳ１２を省略することができる。ただしこの条件は、後述に示す第２実施形態のように自バンクの全ワード線のＥＣＣ処理を行った後、全ワード線の訂正書き込み処理を行う場合の事例においては、Ｓ１２時のＳ１におけるリード回路１８にラッチされるデータＭＤ（ｉ）およびＥＣＣコード（ｉ）は、プログラム対象のデータＭＤおよびＥＣＣコードＥＣと一致しないため除く。
【００４０】
Ｓ１３において、Ｉ／Ｏバッファ１１に格納されたプログラム対象アドレスのプログラム情報ＰＤを、第１プログラムバッファ４１に格納する。本実施形態では、プログラム情報ＰＤ（ｉ）＝０が第１プログラムバッファ４１に格納される（図４、矢印Ａ１）。
【００４１】
Ｓ１４において、先程読み出したデータＭＤ（ｉ）からプログラム情報ＰＤ（ｉ）を除く読み出しデータを、第１プログラムバッファ４１へ格納する。本実施形態では、コラムアドレスＣｏｌ＿Ａｄｄ＝０のデータを除く、コラムアドレスＣｏｌ＿Ａｄｄ＝１ないしｍのデータが、第１プログラムバッファ４１へ格納される（図４、矢印Ａ２）。これにより、図４（ｄ）に示すように、プログラム対象ワード線の訂正前のプログラム内容を表す、訂正前プログラム情報ＰＰＤ（ｉ）が生成される。
【００４２】
Ｓ１５において、まず優先的に、第１プログラムバッファ４１から第２プログラムバッファ４３へ、外部からのプログラムデータであるプログラム情報ＰＤ（ｉ）を移す動作が行われる。これはプログラム情報ＰＤ（ｉ）に対しては、訂正は行われないためである。なお当該移送動作は、プログラム情報修正回路３１において１ビットずつ行われる。ただし、入出力が複数Ｉ／Ｏの場合は、コラムアドレスＣｏｌ＿Ａｄｄごとに複数Ｉ／Ｏ並列に１ビットずつ当該移送動作が行われる。本実施形態では、プログラム情報ＰＤ（ｉ）（コラムアドレスＣｏｌ＿Ａｄｄ＝０）が、第１プログラムバッファ４１から第２プログラムバッファ４３へ入力される（図４、矢印Ａ３）。
【００４３】
ここでプログラム情報ＰＤ（ｉ）を移送する動作を、図２および図８を用いて詳細に説明する。図８は、一致信号ＰＧＭＡｄｄ＿ＭＡＴＣＨ、訂正信号ＥＣＣＩＮＯ、信号ＥＣＣＤの値と、オア回路ＯＲ１の出力信号ＣＯＭＰＤとの相関を示す真理値表である。
【００４４】
訂正アドレス検出回路４２は、プログラムアドレスＰＧＭ＿Ａｄｄを用いることにより、プログラム情報ＰＤ（ｉ）を移送する期間中において、ハイレベルの一致信号ＰＧＭＡｄｄ＿ＭＡＴＣＨを出力する。よってアンド回路ＡＤ１は、外部からのプログラムデータを訂正せずに出力する。またアンド回路ＡＤ２、ＡＤ３の出力はローレベルで固定される。。ＥＣＣ訂正情報格納部から入力される訂正アドレスＥＣＣ＿ＡｄｄとプログラムアドレスＰＧＭ＿Ａｄｄが一致した場合においても、外部からのプログラム情報ＰＤ（ｉ）に対し訂正を行う必要がないため、ハイレベルの一致信号ＰＧＭＡｄｄ＿ＭＡＴＣＨおよびハイレベルのＥＣＣＩＮＯを出力する。すると図８（１）の真理値表に示すように、オア回路ＯＲ１の出力である出力信号ＣＯＭＰＤは、プログラム情報ＰＤによって決まることになる。すなわち、プログラム情報ＰＤ（ｉ）が、第１プログラムバッファ４１から第２プログラムバッファ４３へ訂正されることなく移送される。
【００４５】
Ｓ１６ないしＳ２０において、外部からのプログラム対象外アドレスの訂正を行う。プログラム対象アドレスのプログラムデータであるＰＤ（ｉ）の第２プログラムバッファ４３への移送が完了した後、Ｓ１６へ進む。Ｓ１６では、アドレスバッファ１６内に配置されている不図示のコラムアドレスカウンタが、コマンドレジスタ／ステートコントロール部１３から入力される信号Ｃｏｌ＿ｐｕｌｓｅにより、一つインクリメントされる。本実施形態では、コラムアドレスＣｏｌ＿Ａｄｄ＝０のデータを格納することで、プログラム対象アドレスのプログラムデータの全てが格納される。よって「コラムアドレスカウンタ」がコラムアドレスＣｏｌ＿Ａｄｄ＝１とされることで、Ｓ１６が開始される。このとき、プログラム対象アドレス外のデータを移送する期間であるため、訂正アドレス検出回路４２は、ローレベルの一致信号ＰＧＭＡｄｄ＿ＭＡＴＣＨを出力する。
【００４６】
Ｓ１７において、訂正アドレス検出回路４２にて、アドレスバッファ１６にてＰＧＭ＿Ａｄｄのコラムアドレスが一つインクリメントされたアドレスＣＯＮＴと、訂正アドレスＥＣＣ＿Ａｄｄに含まれる訂正コラムアドレスＣ＿Ｃｏｌ＿Ａｄｄとが一致するか否かが検出される。これにより、訂正が必要なメモリセルであるか否かが判定される。ただし、訂正が必要なメモリセルであるか否かは、訂正コラムアドレスＣ＿Ｃｏｌ＿Ａｄｄだけでなく、訂正バンクアドレスＣ＿ＢＡ＿Ａｄｄ、訂正ワード線アドレスＣ＿ＷＬ＿Ａｄｄも含めて検出する。なお、訂正メモリセルが一致した場合は、訂正アドレス検出回路４２が、コマンドレジスタ／ステートコントロール部１３へハイレベルの信号ＣＰＧＭＡｄｄ＿ＭＡＴＣＨを出力する。コマンドレジスタ／ステートコントロール部１３は、ハイレベルのＣＰＧＭＡｄｄ＿ＭＡＴＣＨが入力されると、ＥＣＣ訂正情報格納部２０に格納されている訂正情報ＣＤが格納されている不図示のレジスタのアドレスを一つインクリメントする信号である信号ＥＣＣ＿ＬＯＡＤ＿ｐｕｌｓｅをハイレベルとして、ＥＣＣ訂正情報格納部２０へ入力する。本説明においては、一つのワード線あたり単数ビット訂正する場合のため、ＥＣＣ訂正情報格納部２０にハイレベルの信号ＥＣＣ＿ＬＯＡＤ＿ｐｕｌｓｅが入力されても訂正情報ＣＤが１つしか格納されていないため、上記動作を行わないが、一つのワード線あたり複数ビットの訂正が可能な場合は、ハイレベルの信号ＥＣＣ＿ＬＯＡＤ＿ｐｕｌｓｅが入力されると、ＥＣＣ訂正情報格納部２０に格納されている訂正情報ＣＤが格納されている不図示のレジスタのアドレスを一つインクリメントし、訂正アドレス検出回路４２へ入力するものとする。
【００４７】
一致が検出されない（Ｓ１７：Ｎｏ）と、訂正がないと認識され、Ｓ１８へ進む。Ｓ１８において、訂正アドレス検出回路４２は、訂正がない旨を示すハイレベルの訂正信号ＥＣＣＩＮＯを出力する。ローレベルの一致信号ＰＧＭＡｄｄ＿ＭＡＴＣＨにより、アンド回路ＡＤ１の出力はローレベル固定となる。ハイレベルの訂正信号ＥＣＣＩＮＯにより、アンド回路ＡＤ３の出力はローレベル固定となる。そしてアンド回路ＡＤ２の出力は、プログラム情報ＰＤによって決まる。すると図８（２）の真理値表に示すように、オア回路ＯＲ１の出力である出力信号ＣＯＭＰＤは、プログラム情報ＰＤによって決まる。すなわち、コラムアドレスＣｏｌ＿Ａｄｄ＝１のデータ（訂正なし）が第１プログラムバッファ４１から第２プログラムバッファ４３へ訂正されることなく移送される。そしてＳ２０へ進む。
【００４８】
一方、Ｓ１７において一致が検出される（Ｓ１７：Ｙｅｓ）と、訂正があると認識され、Ｓ１９へ進む。Ｓ１９において、訂正アドレス検出回路４２は、訂正がある旨を示すローレベルの訂正信号ＥＣＣＩＮＯを出力する。ローレベルの一致信号ＰＧＭＡｄｄ＿ＭＡＴＣＨにより、アンド回路ＡＤ１の出力はローレベル固定となる。ローレベルの訂正信号ＥＣＣＩＮＯにより、アンド回路ＡＤ２の出力はローレベル固定となる。また本説明においてはプログラム時を説明しているので、信号ＥＣＣＤはローレベルであり、アンド回路ＡＤ３の出力はローレベル固定となる。すると図８（３）の真理値表に示すように、オア回路ＯＲ１の出力信号ＣＯＭＰＤは、ローレベルとされる。すなわち、訂正信号ＥＣＣＩＮＯが”Ｌ”のときは訂正があると見做し、読出しデータの内容に関わらず、出力信号ＣＯＭＰＤをプログラムビットを示す”０”とする。そしてＳ２０へ進む。
【００４９】
Ｓ２０において、訂正の有無を確認したメモリセルが、最終コラムアドレスのメモリセルであるか否かが判断される。そしてプログラム対象のワード線内の全メモリセルについてチェックが終了していないと判断される場合（Ｓ２０：Ｎｏ）にはＳ１６へ戻り、全メモリセルについてチェックが終了していると判断される場合（Ｓ２０：Ｙｅｓ）にはフローを終了する。これにより、Ｓ１６ないしＳ１９が、外部からのプログラム対象外の全てのデータについてチェックが行われるまで繰り返される。よってプログラム対象の一つのワード線内の全メモリセルについて、チェックと訂正が行われる。なお、後述の第１実施形態の第３実施例や第２実施形態のように、自バンクまたは他バンク内の全ワード線においてＥＣＣ処理を実行させる場合においては、コラムアドレスだけでなくワード線アドレスのインクリメントが必要となる。一つのワード線のＥＣＣ処理またはその訂正プログラム処理が終了するたび、コマンドレジスタ／ステートコントロール部１３から入力されるＷＬ＿ｐｕｌｓｅによりワード線アドレスを一つインクリメントし、インクリメントしたワード線の全コラムアドレスに対し、訂正の有無のチェックを行う。以下、全ワード線についてのチェックが終了するまで繰り返す必要がある。
【００５０】
本実施形態では、コラムアドレスＣｏｌ＿Ａｄｄ＝１から（ｍ−１）のメモリセルについては、訂正アドレスＥＣＣ＿Ａｄｄと一致検出がされない。よってデータを訂正せずに、第２プログラムバッファ４３に格納する（図４、矢印Ａ４）。しかしコラムアドレスＣｏｌ＿Ａｄｄ＝ｍのメモリセルについては一致検出がされるため、データを”１”から”０”へ訂正した上で、第２プログラムバッファ４３へ格納する（図４、矢印Ａ５）。
【００５１】
これにより、プログラム情報の再構成が終了する。そして図４（ｅ）に示すように、再構成プログラム情報ＲＰＤ（ｉ）が、第２プログラムバッファ４３に保持される。
【００５２】
またＥＣＣデータ生成回路３２には、第２プログラムバッファ４３から再構成プログラム情報ＲＰＤ（ｉ）が入力される。ＥＣＣデータ生成回路３２は、再構成プログラム情報ＲＰＤに基づいて再構成ＥＣＣコードＲＥＣ（ｉ）を生成する（図４、矢印Ａ７）。生成された再構成ＥＣＣコードＲＥＣは、第２プログラムバッファ４３へ格納される。以上により、Ｓ５におけるプログラム情報の再構成が終了する。
【００５３】
図５のＳ７ないしＳ９において、外部からのプログラム対象のワード線上のメモリセルおよびＥＣＣメモリセルに対し、再構成プログラム情報ＲＰＤ（ｉ）および再構成ＥＣＣコードＲＥＣ（ｉ）の書込みが行われる。書込み動作は、プログラムルーチンまたは／およびイレースルーチンによって行われる。プログラムルーチンとイレースルーチンとの切り替えは、コマンドレジスタ／ステートコントロール部１３から出力される信号ＭＯＤＥによって行われる。信号ＭＯＤＥがローレベルでプログラムルーチンが選択され、信号ＭＯＤＥがハイレベルでイレースルーチンが選択される。第１実施例では、プログラムルーチンのみが用いられる場合を説明しているため、信号ＭＯＤＥがローレベルとされる。ローレベルの信号ＭＯＤＥに応じて、図３において、モード切替部５７のトランジスタＱ４は導通状態、Ｑ３が非導通状態とされる。またセレクタ５８はノードＢを選択する。信号ＭＯＤＥは、ＥＣＣ訂正情報格納部２０から出力される再構成プログラム情報ＲＰＤ（ｉ）における訂正するメモリセルのデータ訂正方向を示す信号ＥＣＣＤおよびプログラム情報修正／ＥＣＣデータ作成回路１２から出力される再構成ＥＣＣコードＲＥＣ（ｉ）の遷移方向を示すＥＣＣ＿ＣＯＭＰにより生成される。
【００５４】
まず、再構成プログラム情報ＲＰＤのメモリセルへのプログラムを説明する。当該プログラムは、データ用プログラム／イレース制御回路３４によって行われる。例として、コラムアドレスＣｏｌ＿Ａｄｄ＝２のメモリセルへのプログラム動作を説明する。
【００５５】
Ｓ７において、データ用プログラム／イレース制御回路３４において、プログラムベリファイにより、書込み対象のメモリセルがすでにプログラムされているか否かを確認する。
【００５６】
具体的には、図３において、信号ＤＬＢがハイレベルの期間に１ビット分のデータＰＢＯＵＴ２がデータ入力部５４に入力される。データＰＢＯＵＴ２は、信号ＤＬＢの立下りでライトアンプラッチ５５にラッチされる。データＰＢＯＵＴは、プログラムする時（データ０）はローレベル、プログラムしない時（データ１）はハイレベルである。よってノードＣはプログラムする時（データ０）はローレベルとされ、プログラムしない時（データ１）はハイレベルとされる。またノードＢには、ノードＣの反転データがラッチされる。今回の例では、プログラムするデータであるコラムアドレスＣｏｌ＿Ａｄｄ＝２のデータＰＢＯＵＴ（データ０）がラッチされるため、ノードＣはローレベル、ノードＢはハイレベルとされる。
【００５７】
Ｓ８において、プログラムベリファイをもとにプログラム実行の有無を確認する。アクセス先のメモリセルのデータが既にプログラム状態（データ０）の場合には、信号ＤＡＶはローレベルとされ、トランジスタＱ２が導通するため、ノードＢはローレベル、ノードＣはハイレベルにリセットされ、プログラム不可とされる。そしてプログラムベリファイにパスした場合（Ｓ８：Ｙｅｓ）であるとして、そのメモリセルへのプログラムをせずに終了する。これにより、すでにプログラムされたメモリセルに対して、更にプログラムストレスが与えられることが防止される。
【００５８】
一方、Ｓ８において、アクセス先のメモリセルのデータがイレース状態（データ１）の場合には、信号ＤＡＶはハイレベルとされ、トランジスタＱ１が導通するため、ノードＢはハイレベル、ノードＣはローレベルとされ、プログラム可能とされる。そしてプログラムベリファイにパスしなかった場合（Ｓ８：Ｎｏ）であるとして、Ｓ９へ進む。ここでは、コラムアドレスＣｏｌ＿Ａｄｄ＝２のメモリセルは、書込み前にはイレース状態のため、信号ＤＡＶはハイレベルとなり、プログラム可能とされるため、Ｓ９へ進む。
【００５９】
Ｓ９において、プログラムベリファイにパスしなかったコラムアドレスＣｏｌ＿Ａｄｄ＝２のメモリセルに対し、プログラムが行われる。
【００６０】
プログラム動作時には、図３において、コマンドレジスタ／ステートコントロール部１３からアンド回路５３へ入力される信号ＰＧＭｐｕｌｓｅによって、プログラムのストレス期間が定められる。アンド回路５３からハイレベルのプログラム信号ＰＧが入力されると、レベルシフタ５１は、プログラム用電圧ＶＰＲＯＧをプログラム時の高電位として有する書込みデータＤＡＴＡＢを出力する。またワード線ＷＬ（ｉ）へ電圧ＶＷＬが印加され、Ｙゲート４に電圧ＶＣＤが印加される。そして書込みデータＤＡＴＡＢを、Ｙゲート４内のコラムデコーダスイッチを介してコラムアドレスＣｏｌ＿Ａｄｄ＝２のビット線へ転送する。プログラム用電圧ＶＰＲＯＧは、ビット線を経由して、メモリセルのドレインへ与えられる。また電圧ＶＣＤによりデータＤＡＴＡＢの電圧降下が防止される。これにより、メモリセルへのプログラムが行われる。
【００６１】
Ｓ９が終了するとＳ７へ進み、再度プログラムベリファイを行う。プログラム対象の全てのメモリセルおよびＥＣＣメモリセルが、プログラムベリファイをパスしない場合には、Ｓ９へ進むことで（Ｓ８：Ｎｏ）、Ｓ７ないしＳ９が繰り返される。
【００６２】
一方、処理が終了している場合（Ｓ８：Ｙｅｓ）にはＳ１０へ進み、プログラム処理を実行したワード線のフラグ情報ＥＣＣ＿Ｆｌａｇが“１”であるか確認する。Ｓ１０およびＳ１１において、フラグ情報ＥＣＣ＿Ｆｌａｇのリセットルーチンが行われる。確認する方法としては、Ｓ３におけるＥＣＣチェックのエラーが検出されたこと示す信号であるＥＣＣ検出信号ＥＣＣ＿Ｄｅｔや、Ｓ５におけるプログラム情報の再構成において訂正メモリセル判定時に訂正アドレス検出回路４２から出力されるＣＰＧＭＡｄｄ＿ＭＡＴＣＨ等により確認することができる。プログラム処理を実行したＷＬのフラグ情報ＥＣＣ＿Ｆｌａｇが“０”である場合（Ｓ１０：Ｎｏ）にはフローを終了する。一方、プログラム処理を実行したワード線のフラグ情報ＥＣＣ＿Ｆｌａｇが“１”である場合（Ｓ１０：Ｙｅｓ）は、Ｓ１１へ進み、ＥＣＣ訂正情報格納部２０に格納される訂正対象ＷＬのフラグ情報ＥＣＣ＿Ｆｌａｇを“０”にリセットしてフローを終了する。ＥＣＣ訂正情報格納部２０から出力されるフラグ情報ＥＣＣ＿Ｆｌａｇを“０”にリセットすることで、コマンドレジスタ／ステートコントロール部１３から出力される信号ＳＴＡＴＵＳを介して、メモリコントローラにＥＣＣチェックが終了したことが報知される。よってメモリコントローラは不揮発性メモリ１への供給電源を落とすことが可能となる。
【００６３】
次に、再構成ＥＣＣコードＲＥＣのＥＣＣメモリセルへのプログラム動作を説明する。当該プログラムは、ＥＣＣコード用プログラム／イレース制御回路３３によって行われる。なおプログラムの具体的態様は、データ用プログラム／イレース制御回路３４における態様と同様であるため、詳細な説明は省略する。
【００６４】
ここで再構成された再構成ＥＣＣコードＲＥＣは、ＥＣＣメモリセルに以前に保持されているＥＣＣコードＥＣとは全く異なるコードとなる。よって再構成ＥＣＣコードＲＥＣをＥＣＣメモリセルに上書きする場合には、例えば、同一ワード線上にＥＣＣコードを保持するための第１領域と第２領域とフラグ領域とを備えるとしてもよい。このとき通常のプログラム動作では第１領域にＥＣＣコードが書込まれる。そしてＥＣＣ訂正が行われると、第２領域にＥＣＣコードを追記すると共に、第２領域を使用する旨をフラグ領域に保持する。また例えば、後述するようにプログラムルーチンとイレースルーチンとの両方を用いることによっても、再構成ＥＣＣコードＲＥＣをＥＣＣメモリセルに上書きすることが可能となる。
【００６５】
なおプログラム動作は、第１実施形態では、ビットラインごとにライトアンプを備え、一斉に一つのワード線の全ビットラインに対しプログラムが行われる形態として説明しているが、ビットライン数よりも少ないライトアンプを時分割的に用いてプログラムを行う形態としてもよい。これらの動作は、プログラム対象となるワード線のメモリセルおよびＥＣＣメモリセルに対し、同時に行われる。また、後述の第１実施形態の第２実施例のイレース動作、第２実施形態、第３実施形態、第４実施形態においても同様である。
【００６６】
第１実施形態の第２実施例に係る不揮発性メモリ１の動作を説明する。第２実施例は、、イレース方向（データ０からデータ１）へ訂正する場合の回路である。そして「１ビット単位」でイレースすることができる回路である。第２実施例が適用される不揮発性メモリ１としては、例えばＲＲＡＭ（Resistance Random Access Memory）、ＰＲＡＭ（Phase  Change Random Access Memory）等が挙げられる。
【００６７】
図９を用いて、第２実施例に係る不揮発性メモリ１の動作を説明する。Ｓ６１において、プログラム情報ＰＤの再構成が行われる。なおＳ６１は、第１実施例の図５のＳ１ないしＳ５と同様であるため、詳細な説明は省略する。なお再構成プログラム情報ＲＰＤは一つのワード線分があればよい。
【００６８】
Ｓ６７ないしＳ６９において、プログラムルーチンが行われる。当該プログラムルーチンは第１実施例の図５のＳ７ないしＳ９と同様であるため、詳細な説明は省略する。
【００６９】
Ｓ７１において、プログラムルーチンからイレースルーチンへモードの切り替えが必要か否かが、判断される。切り替えの必要がない場合には（Ｓ７１：Ｎｏ）、Ｓ７５へ進む。一方、切り替えの必要がある場合には（Ｓ７１：Ｙｅｓ）、モードの切り替えが行われる。プログラムからイレースへのモードの切り替えは、コマンドレジスタ／ステートコントロール部１３から出力される信号ＭＯＤＥがローレベルからハイレベルへ遷移することで行われる。具体的には、コマンドレジスタ／ステートコントロール部１３は、ＥＣＣ訂正情報格納部２０から出力される再構成プログラム情報ＲＰＤ（ｉ）において訂正するメモリセルが、イレース方向の訂正を行う旨のハイレベルの信号ＥＣＣＤが入力される。それと共に、再構成ＥＣＣコードＲＥＣ（ｉ）のイレース方向の遷移を示す旨のローレベルの出力信号ＥＣＣ＿ＣＯＭＰが入力されると、ハイレベルの信号ＭＯＤＥを出力する。よってハイレベルの信号ＭＯＤＥに応じて、図３において、モード切替部５７のトランジスタＱ４は非導通状態、Ｑ３が導通状態とされる。またセレクタ５８はノードＡを選択する。
【００７０】
Ｓ７２ないしＳ７４において、イレースルーチンが行われる。Ｓ７２において、データ用プログラム／イレース制御回路３４において、プログラムベリファイにより、書込み対象のメモリセルがすでにイレースされているか否かを確認する。
【００７１】
具体的には、図３においてノードＣは、イレースする時（データ１）はハイレベルとされ、イレースしない時（データ０）はローレベルとされる。またノードＢには、ノードＣの反転データがラッチされる。
【００７２】
Ｓ７３において、イレースベリファイをもとにイレース実行の有無を確認する。アクセス先のメモリセルのデータが既にイレース状態（データ１）の場合には、信号ＤＡＶはハイレベルとされ、トランジスタＱ１が導通するため、ノードＢはハイレベル、ノードＣはローレベルにリセットされ、イレース不可とされる。そしてイレースベリファイにパスした場合（Ｓ７３：Ｙｅｓ）であるとして、そのメモリセルへのイレースをせずに終了する。これにより、すでにイレースされたメモリセルに更にイレースストレスが与えられることが防止される。
【００７３】
一方、Ｓ７３において、アクセス先のメモリセルのデータがプログラム状態（データ０）の場合には、信号ＤＡＶはローレベルとされ、トランジスタＱ１が非導通となるため、ノードＢはローレベル、ノードＣはハイレベルとされ、イレース可能とされる。そしてイレースベリファイにパスしなかった場合（Ｓ７３：Ｎｏ）であるとして、Ｓ７４へ進む。
【００７４】
Ｓ７４において、イレースベリファイにパスしなかったメモリセルに対し、イレースが行われる。
【００７５】
Ｓ７４が終了するとＳ７２へ進み、再度イレースベリファイを行う。イレース対象の全てのメモリセルおよびＥＣＣメモリセルが、イレースベリファイをパスしない場合は、Ｓ７４へ進むことで（Ｓ７３：Ｎｏ）、Ｓ７２ないしＳ７４が繰り返される。
【００７６】
一方、処理が終了している場合（Ｓ７３：Ｙｅｓ）にはＳ７５へ進み、プログラム処理を実行したワード線のフラグ情報ＥＣＣ＿Ｆｌａｇが“１”であるか確認する。Ｓ７５およびＳ７６において、フラグ情報ＥＣＣ＿Ｆｌａｇのリセットルーチンが行われる。当該フラグ情報ＥＣＣ＿Ｆｌａｇリセットルーチンは、第１実施例の図５のＳ１０およびＳ１１と同様であるため、詳細な説明は省略する。ＥＣＣ訂正情報格納部２０から出力されるフラグ情報ＥＣＣ＿Ｆｌａｇを“０”にリセットすることで、コマンドレジスタ／ステートコントロール部１３から出力される信号ＳＴＡＴＵＳを介して、メモリコントローラにＥＣＣチェックが終了したことが報知される。
【００７７】
このように、第２実施例の基本動作としては、Ｓ６７ないしＳ６９においてプログラム動作を先に行った後に、Ｓ７２ないしＳ７４においてイレース動作を行う。これにより外部からのプログラム対象のワード線に対して優先的にプログラム動作を行うことが可能となる。なお、イレース動作を先に行った後にプログラム動作を行っても、本発明の効果が得られることは言うまでもない。
【００７８】
以上より第２実施例に係る不揮発性メモリ１では、１ビット単位でイレースが可能であることから、外部から上書きデータとして入力されるプログラム情報ＰＤにイレースデータ（データ１）が含まれている場合にも対応することが可能となる。よってプログラム情報ＰＤの自由度を高めることができる。ただし、この場合はコマンドレジスタ／ステートコントロール部１３から出力される信号ＭＯＤＥは、ＥＣＣ訂正情報格納部２０から出力される再構成プログラム情報ＲＰＤ（ｉ）における訂正するメモリセルのデータ訂正方向を示す信号ＥＣＣＤおよびプログラム情報修正／ＥＣＣデータ作成回路１２から出力される再構成ＥＣＣコードＲＥＣ（ｉ）の遷移方向を示すＥＣＣ＿ＣＯＭＰだけでなく、プログラム情報ＰＤの内容を含めた上でのプログラムルーチンとイレースルーチンの切り替えが必要となる。なお、上書きを可能とする場合は、プログラム情報修正回路３１は上書きを想定していない回路のため、論理変更が必要となる。（ただし、外部から入力される上書きデータが、前回プログラムしたPGMデータの内容を保持している場合は除く。）
【００７９】
第１実施形態の第３実施例に係る不揮発性メモリ１の動作を説明する。第３実施例は、プログラム方向（データ１からデータ０）の訂正に加え、イレース方向（データ１からデータ０）へ訂正する場合の回路である。そして「セクタ単位」でイレースすることができる回路である。
【００８０】
図１０および図１１を用いて、第３実施例に係る不揮発性メモリ１の動作を説明する。Ｓ８１において、プログラム情報ＰＤの再構成が行われる。なおＳ８１は、第１実施例の図５のＳ１ないしＳ５と同様であるため、詳細な説明は省略する。なお第３実施例ではセクタ単位でイレースするため、セクタ内の全ワード線分の再構成プログラム情報ＲＰＤを作成・保持する必要がある。よって、第１プログラムバッファ４１および第２プログラムバッファ４３は、セクタ内の全ワード線分のデータを保持できるレジスタ容量を有している。
【００８１】
Ｓ８７ないしＳ８９において、イレースルーチンが行われる。これにより、セクタ内の全メモリセルおよびＥＣＣメモリセルがイレースされる。具体的な動作は第２実施例の図９のＳ７２ないしＳ７４と同様であるため、詳細な説明は省略する。
【００８２】
Ｓ９１において、イレースルーチンからプログラムルーチンへモードの切り替えが行われる。
【００８３】
Ｓ９２ないしＳ９４、Ｓ９７およびＳ９８において、プログラムルーチンが行われる。セクタ単位でイレースされているため、セクタ内の全ワード線に対してプログラムが必要となる。Ｓ９２において、書込み対象のメモリセルがすでにプログラムされているか否かを確認する。Ｓ９３において、プログラムベリファイにパスしたか否かが判断される。プログラムベリファイにパスした場合（Ｓ９３：Ｙｅｓ）にはＳ９５へ進む。プログラムベリファイにパスしなかった場合（Ｓ９３：Ｎｏ）にはＳ９４へ進む。
【００８４】
処理が終了していない場合（Ｓ９３：Ｎｏ）には、Ｓ９４でプログラムを実行した上で、Ｓ９２へ戻り、再度プログラムベリファイを行う。プログラム対象の全てのメモリセルおよびＥＣＣメモリセルが、プログラムベリファイをパスしない場合は、Ｓ９４へ進むことで（Ｓ９３：Ｎｏ）、Ｓ９３ないしＳ９４が繰り返される。
【００８５】
一方、処理が終了した場合（Ｓ９３：Ｙｅｓ）には、Ｓ９５へ進み、プログラム処理を実行したＷＬのフラグ情報ＥＣＣ＿Ｆｌａｇが“１”であるか確認する。Ｓ９５およびＳ９６において、フラグ情報ＥＣＣ＿Ｆｌａｇのリセットルーチンが行われる。当該フラグ情報ＥＣＣ＿Ｆｌａｇリセットルーチンは、第１実施例の図５のＳ１０およびＳ１１と同様であるため、詳細な説明は省略する。ＥＣＣ訂正情報格納部２０から出力されるフラグ情報ＥＣＣ＿Ｆｌａｇを“０”にリセットすることで、コマンドレジスタ／ステートコントロール部１３から出力される信号ＳＴＡＴＵＳを介して、メモリコントローラにＥＣＣチェックが終了したことが報知される。Ｓ９７においてセクタ内の全てのワード線について処理が終了したか否かが判断され、処理が終了していない場合（Ｓ９７：Ｎｏ）には、Ｓ９８でワード線アドレスが一つインクリメントされた上でＳ９２へ戻る。一方、処理が終了した場合（Ｓ９７：Ｙｅｓ）にはフローを終了する。
【００８６】
このように、第３実施例の基本動作としては、Ｓ８７ないしＳ８９においてイレース動作を先に行った後に、Ｓ９２ないしＳ９４、Ｓ９７およびＳ９８においてプログラム動作を行う。このときプログラム動作にかかる時間とイレース動作にかかる時間とが略同等であれば、第２実施例と同様の効果を得ることが可能となる。プログラム時間とイレース時間とが同等であるメモリとしては、例えばプログラムとイレースとをＦＮ−トンネリングで行う原理のメモリ、ＲＲＡＭ、ＰＲＡＭ等が挙げられる。
【００８７】
これにより第３実施例に係る不揮発性メモリ１では、セクタ単位でイレースが可能であることから、外部から上書きデータとして入力されるプログラム情報ＰＤにイレースデータ（データ１）が含まれている場合にも対応することが可能となる。よってプログラム情報ＰＤの自由度を高めることができる。
【００８８】
以上より得られる、第１実施形態の第１実施例ないし第３実施例に係る不揮発性メモリ１の効果を説明する。従来の不揮発性メモリにおいては、起動時またはアイドル時に書き込まれたデータ自身を訂正するため、訂正結果を書き込むための専用の時間が必要となる。よってビジー期間が発生していた。しかし第１実施形態に係る不揮発性メモリ１では、外部からのプログラム対象のデータを書き込む際に必ず必要とされる書込み時間に隠れて、訂正データの書込みをするため、訂正を書き込むための専用の時間が排除できる。よってビジー期間を作らないため、外部アクセス速度を高速化できる。
【００８９】
また従来の不揮発性メモリにおいては、読出し時のたびに読み出したデータにＥＣＣ処理を掛けた上で外部端子へ出力するため、外部アクセスが低下していた。しかし第１実施形態に係る不揮発性メモリ１では、書き込まれたデータ自身を訂正するので、読出し時のたびに読み出したデータにＥＣＣ処理を掛ける必要がない。読出しアクセスに含まれるＥＣＣ処理が排除できる。よって外部アクセス速度を高速化できる。そして、書き込まれたデータ自身が訂正されるため、リテンション不良等の影響を排除することができる。よって不揮発性メモリ１の信頼性を高めることができる。
【００９０】
本発明の第２実施形態を説明する。第２実施形態は、自バンクのワード線への外部プログラムの時、その自バンク内のすべてのワード線に関わるメモリセルのＥＣＣ処理と訂正書き込み処理を組み込む形態である。以下、第１実施形態に係る不揮発性メモリ１（図１）の図面を用いて説明する。第２実施形態においても、第１実施形態同様、１ワード線あたり単数ビット訂正する場合を説明する。
【００９１】
外部の不図示のメモリコントローラから、バンクＢＫ０に対してプログラム動作を行う旨の指示がされることで、図１２および図１３に示すフローが開始される。本実施形態では、例として、外部からのプログラム対象として、バンクアドレスＢＡ＿Ａｄｄ＝０、ワード線アドレスＷＬ＿Ａｄｄ＝ｉ、コラムアドレスＣｏｌ＿Ａｄｄ＝０が選択された場合を説明する。
【００９２】
ＥＣＣチェックでは、まずＳ１２１において、入力されたプログラムアドレスＰＧＭ＿Ａｄｄより、バンクＢＫ０内のワード線ＷＬ（ｉ）のメモリセルおよびＥＣＣメモリセルのリードを行う。
【００９３】
次にＳ１２２において、ＥＣＣ検出回路１９において、ＥＣＣメモリセルから読出したＥＣＣコードＥＣ（ｉ）を用いて、メモリセルから読み出したデータＭＤ（ｉ）に対してＥＣＣチェックを行う。なおＥＣＣチェックは、一般的なＥＣＣチェック方法により行えばよいため、ここでは説明を省略する。第２実施形態においても第１実施形態同様に、ＥＣＣ検出回路１９はＥＣＣチェックによりエラーを検出した場合、エラーを検出したことを示す信号であるＥＣＣ検出信号ＥＣＣ＿Ｄｅｔをコマンドレジスタ／ステートコントロール部１３へ出力する。
【００９４】
ＥＣＣチェックでエラーが検出されない場合（Ｓ１２３：Ｎｏ）は、Ｓ１２５へ進む。一方、ＥＣＣチェックでエラーが検出された場合（Ｓ１２３：Ｙｅｓ）は、Ｓ１２４へ進み、訂正情報ＣＤ（ＷＬ、訂正データ等）をＥＣＣ訂正情報格納部２０に格納する。 
【００９５】
ここで訂正情報ＣＤは、図１４に示すように、バンクＢＫ０内のｋ＋１本のワード線の各々に対応して、ｋ＋１本分が備えられる不図示のレジスタが必要となる。尚、単数ビット訂正の場合は、ｋ＋１本分のレジスタ容量でよいが、複数ビット訂正可能な場合は、１ワード線あたりの訂正ビット数×（ｋ＋１）分のレジスタ容量が必要となる。
【００９６】
Ｓ１２５において、バンクＢＫ０内の全てのワード線について処理が終了したか否かが判断される。処理が終了している場合（Ｓ１２５：Ｙｅｓ）には、Ｓ１３１へ進む。一方、処理が終了していない場合（Ｓ１２５：Ｎｏ）には、Ｓ１２６へ進み、ワード線アドレスが一つインクリメントされた上でＳ１２７へ進む。そしてＳ１２７において外部からのプログラム対象外のワード線上のメモリセルおよびＥＣＣメモリセルのリードが行われた上で、Ｓ１２２へ戻る。
【００９７】
以下、全てのワード線についてＳ１２２ないしＳ１２７が繰り返されることで、バンクＢＫ０内の全てのワード線上のメモリセルおよびＥＣＣメモリセルについて読出しおよびＥＣＣチェックを行うことができる。そして、バンクＢＫ０内の全てのワード線に関する訂正情報ＣＤを、ＥＣＣ訂正情報格納部２０に保持することができる。
【００９８】
なお、このリード動作にかかる時間は、プログラム動作に比して無視できる程度に小さい。よってプログラム動作に先立ってバンクＢＫ０内の全てのワード線についてのリード動作を挿入しても、不揮発性メモリ１の動作速度に与える影響は無視できる程度に小さなものである。
【００９９】
次にＳ１３１において、１ワード線についてのプログラム情報ＰＤの再構成が行われる。なお再構成の方法は第１実施形態と同様であるため、ここでは詳細な説明は省略する。
【０１００】
Ｓ１３２ないしＳ１３４において、プログラムルーチンが行われる。当該プログラムルーチンは第１実施例の図５のＳ７ないしＳ９と同様であるため、詳細な説明は省略する。一方、処理が終了した場合（Ｓ１３３：Ｙｅｓ）には、Ｓ１３５へ進み、プログラム処理を実行したワード線のフラグ情報ＥＣＣ＿Ｆｌａｇが“１”であるかを確認する。Ｓ１３５およびＳ１３６において、フラグ情報ＥＣＣ＿Ｆｌａｇのリセットルーチンが行われる。当該フラグ情報ＥＣＣ＿Ｆｌａｇリセットルーチンは、第１実施例の図５のＳ１０およびＳ１１と同様であるため、詳細な説明は省略する。ＥＣＣ訂正情報格納部２０に格納されている訂正情報ＣＤのフラグ情報ＥＣＣ＿Ｆｌａｇを全て“０”にリセットすることで、コマンドレジスタ／ステートコントロール部１３から出力される信号ＳＴＡＴＵＳを介して、メモリコントローラにＥＣＣチェックが終了したことが報知される。なお、プログラムルーチンの最初のプログラムは、外部からのプログラム対象アドレスを優先し、外部からのプログラム対象アドレスからプログラム動作を行うものとする。メモリデバイス外部付加的要因によって、プログラム環境が変化しても、顧客の指定したプログラム対象アドレスが先に書き込まれることで信頼性が保証される。
【０１０１】
Ｓ１３７において、バンクＢＫ０内の全てのワード線についてプログラムが終了したか否かが判断される。全てのワード線についてプログラムが終了している場合（Ｓ１３７：Ｙｅｓ）には、フローを終了する。一方、全てのワード線についてプログラムが終了していない場合（Ｓ１３７：Ｎｏ）には、Ｓ１８３へ進み、ワード線アドレスを１インクリメントしてＳ１３９に進み、ＥＣＣ訂正情報格納部２０に格納された訂正アドレスＥＣＣ＿Ａｄｄに格納される訂正ワード線アドレスＣ＿ＷＬ＿Ａｄｄと比較し、訂正対象ＷＬの有無の確認を行う。一致する場合（Ｓ１３８：Ｙｅｓ）はＳ１３１へ戻り、訂正対象ＷＬの訂正プログラム処理を行う。一致しない場合（Ｓ１３８：Ｎｏ）は、Ｓ１３７へ戻り、ワード線アドレスを１インクリメントしてＳ１３８に進み、再度確認を行い、バンク内の全てのワード線について訂正プログラムが終了するまで、Ｓ１３１ないしＳ１３４およびＳ１３８、１３９を繰り返す。
【０１０２】
以上より図１２および図１３のフローでは、外部からのプログラム対象として選択されたワード線以外の全てのワード線について、まとめて、ＥＣＣチェックおよびプログラムが行われる。すなわち、（１）全ワード線のリードを行った後に、（２）外部からのプログラム対象の１ワード線に対しプログラムが行われ、（３）最後に外部からのプログラム対象外の複数ワード線にプログラムが行われる。なお、本フローにおいては、外部からのプログラム対象アドレスのプログラムを行った後、訂正対象ＷＬの検出を行い、一致した場合のみプログラム動作を行うことでプログラムルーチンの処理時間を短縮している。プログラムルーチンの処理時間に余裕がある場合は、本フローのように訂正対象ＷＬの検出を行わず、全ワード線ごとにプログラム動作を行ってもよい。
【０１０３】
なお、第２実施形態の動作は図１２および図１３に示す動作に限られない。図１５のフローに示す動作でもよいことは言うまでもない。Ｓ１４０において、外部からのプログラム対象の一つのワード線に対して、リードおよび訂正データのプログラムが行われる。なお詳細なフローは、第１実施形態の図５におけるＳ１ないしＳ１０と同様であるため、詳細な説明は省略する。
【０１０４】
次にＳ１４１へ進み、バンクＢＫ０内の複数のワード線のうちから、外部からのプログラム対象外の一つのワード線のメモリセルおよびＥＣＣメモリセルが、リードされる。
【０１０５】
次にＳ１４２においてＥＣＣチェックが行われる。なおこのとき、読み出したデータを保持するレジスタは、一つのワード線分で足りる。
【０１０６】
ＥＣＣチェックでエラーが検出された場合（Ｓ１４３：Ｙｅｓ）は、Ｓ１４４へ進み、修正プログラム処理を行った上で、Ｓ１４６へ進む。一方、ＥＣＣチェックでエラーが検出されない場合（Ｓ１４３：Ｎｏ）は、Ｓ１４５へ進む。Ｓ１４４の修正プログラムは、第１実施形態の図５におけるＳ４ないしＳ１１と同様であるため、詳細な説明は省略する。
【０１０７】
Ｓ１４５では、バンクＢＫ０内の全てのワード線について処理が終了したか否かが判断される。処理が終了している場合（Ｓ１４５：Ｙｅｓ）には、フローを終了する。一方、処理が終了していない場合（Ｓ１４５：Ｎｏ）には、Ｓ１４６へ進む。Ｓ１４６では、ワード線アドレスが、一つインクリメントされた上でＳ１４１へ戻る。
【０１０８】
以上より、図１５のフローでは、外部からのプログラム対象として選択された一つのワード線以外のワード線について、１本ずつ、ＥＣＣチェックおよびプログラムが行われる。すなわち、（１）外部からのプログラム対象の一つのワード線に対してリードおよび訂正データのプログラムを行った後に、（２）外部からのプログラム対象外の複数ワード線のリードを行い、（３）最後に外部からのプログラム対象外の複数ワード線にプログラムが行われる。これにより、一つのワード線ごとにＥＣＣ検証およびデータ訂正を行うため、ＥＣＣ訂正情報格納部２０のレジスタの容量を大幅に削減することが可能となる。
【０１０９】
以上より得られる、第２実施形態に係る不揮発性メモリ１の効果を説明する。従来の不揮発性メモリにおいては、アイドル時に不揮発性メモリがメモリコントローラからのコントロールを受けずに自発的にデータ訂正を行う場合、不揮発性メモリはその訂正期間中はビジーとなる。しかしメモリコントローラのシステムでは不揮発性メモリがビジー状態であることを知ることができない。そしてビジー状態の期間中にメモリコントローラから不揮発性メモリへアクセスコマンドが発行されると、メモリシステムはハングする。しかし第２実施形態に係る不揮発性メモリ１では、外部からのアクセス要求に応じて行われるプログラム期間に付加する形で、アクセス対象外のワード線上のデータもＥＣＣ処理するものである。すわなち、メモリコントローラからの指令に応じて訂正を行うため、メモリコントローラのシステムは不揮発性メモリがビジー状態であることを認識することができる。よってメモリコントローラは、訂正が終了するまでは不揮発性メモリに対して新たなアクセスコマンドを発行することを待つことができる。これにより、メモリシステムのハングを防止する事が可能となる。
【０１１０】
また外部からのアクセス対象のワード線については、外部からのプログラム対象のデータを書き込む際に必ず必要とされる書込み時間に隠れて、訂正データの書込みをするため、外部アクセス速度を高速化することができる。
【０１１１】
本発明の第３実施形態を説明する。第３実施形態は、自バンクの外部プログラム対象ワード線へのプログラムの際、外部プログラム対象ワード線（外部プログラムアドレス）と同一アドレスである他バンクに存在するワード線（バンクアドレスが異なる前記外部プログラムアドレスと同一なアドレス）に対して、メモリセルのＥＣＣ処理と訂正書き込み処理を組み込む形態である。ここで外部プログラム対象ワード線を有するバンクを自バンク、外部プログラム対象ワード線を有さないバンクを他バンクと定義している。なお不揮発性メモリの構成は第１実施形態と同様であるため、詳細な説明は省略する。
【０１１２】
図１６および図１７を用いて、第３実施形態に係る不揮発性メモリの動作を説明する。本実施形態では、例として図１６（ａ）に示すように、プログラムアドレスＰＧＭ＿Ａｄｄとして、バンクアドレスＢＡ＿Ａｄｄ＝０、ワード線アドレスＷＬ＿Ａｄｄ＝ｉ、コラムアドレスＣｏｌ＿Ａｄｄ０が入力され、プログラム情報ＰＤ＝０が入力される場合を説明する。外部の不図示のメモリコントローラから、バンクＢＫ０に対してプログラム動作を行う旨の指示がされることで、図１７に示すフローが開始される。
【０１１３】
図１７のＳ１５１において、プログラムベリファイにより、書込み対象のメモリセルがすでにプログラムされているか否かを確認する。プログラムベリファイは、自バンク（バンクＢＫ０）の、選択ワード線（ワード線ＷＬ（ｉ））上のメモリセルに対して行われる。Ｓ１５２において、プログラムベリファイにパスしなかった場合（Ｓ１５２：Ｎｏ）にはＳ１５３へ進む。Ｓ１５３において、プログラムベリファイにパスしなかったメモリセルに対し、再度プログラムが行われる。Ｓ１５３が終了するとＳ１５１へ戻り、再度プログラムベリファイを行う。プログラム対象の全てのメモリセルおよびＥＣＣメモリセルがプログラムベリファイをパスしない場合は、Ｓ１５３へ進むことで（Ｓ１５２：Ｎｏ）、Ｓ１５１ないしＳ１５３が繰り返される。一方、処理が終了している場合（Ｓ１５２：Ｙｅｓ）にはＳ１５７へ進む。本実施形態では、バンクＢＫ０のデータＭＤ（ｉ）に、プログラム情報ＰＤ（ｉ）が上書きされる（図１６、矢印Ａ１１）。
【０１１４】
またＳ１５１ないしＳ１５３の動作と並行して、Ｓ１５５において、自バンクの外部プログラム対象ワード線と同一ワード線アドレスを有して他バンクに存在するワード線に対して、メモリセルのＥＣＣチェックが行われる。このとき、不揮発性メモリで一般的な技術であるＳＯ（simultaneous Operation）機能が利用される。これにより、バンクＢＫ１のワード線ＷＬ（ｉ）についての、データＭＤ（ｉ）、ＥＣＣコードＥＣ（ｉ）を取得し、ＥＣＣコードＥＣ（ｉ）よりＥＣＣチェックでＥＣＣチェックデータＥＣＤ（ｉ）を生成する。本実施形態では、データＭＤ（ｉ）とＥＣＣチェックデータＥＣＤ（ｉ）との比較により、バンクＢＫ１のデータＭＤ（ｉ）のコラムアドレスＣｏｌ＿Ａｄｄ＝２のメモリセルにおいて、本来０であるデータが１に変化してしまっていることが判明する（図１６、矢印Ａ１２）。
【０１１５】
Ｓ１５６において、ＥＣＣ修正が必要か否かが、判断される。修正が必要でないと判断（Ｓ１５６：Ｎｏ）される場合には、フローを終了する。一方、修正が必要であると判断（Ｓ１５６：Ｙｅｓ）されると、Ｓ１５７へ進む。
【０１１６】
Ｓ１５７では、訂正データがプログラムされる。このとき、プログラム用のプログラム電圧生成部１４が、バンクＢＫ０とＢＫ１とで共通に１つしかない（共有する）場合には、Ｓ１５３でのプログラム完了を待って、Ｓ１５７でのプログラムが行われる。なお、バンクＢＫ０とＢＫ１とが各々にプログラム電圧生成部１４を備える場合には、Ｓ１５３とＳ１５７とを、メモリ技術で一般的なバンク同時アクセス技術を応用して同時に行うことができる。本実施形態では、バンクＢＫ１のデータＭＤ（ｉ）のコラムアドレスＣｏｌ＿Ａｄｄ＝２のメモリセルにおいて、データ１がデータ０へ修正される（図１６、矢印Ａ１３）。Ｓ１５７の修正プログラムの実行は、第１実施形態の図５におけるＳ４ないしＳ１１と同様であるため、詳細な説明は省略する。
【０１１７】
以上より第３実施形態では、ＳＯ機能やバンク同時アクセス技術を用いることでバンクごとにプログラム処理やＥＣＣ処理を並行処理することができる。よって自バンクでのプログラム期間中に、他バンクにおいてＥＣＣ処理を実行させることができるため、他バンクの外部リードアクセス時にＥＣＣ処理を組み込まなくても良い設計ができる。これにより、アクセスの高速化を図ることができる。尚、メモリコントローラが自バンクのアクセス中に他バンクのビジーを好まない場合には、後述のモードレジスタ等の設定値の変更によって、その都度、他バンクのＥＣＣ処理を非活性にすることができる。
【０１１８】
なお第３実施形態の動作は、バンク毎に並列処理制御する場合に限られない。ＳＯ機能を使用しない場合などバンク毎に並列処理しない場合には、バンク間でシリアル処理を行うことも可能であることは言うまでもない。シリアル処理の例としては、自バンクでのプログラム処理が終了次第、他バンクの処理へ移行し、他バンクでのＥＣＣチェックおよび訂正プログラム処理を行うことが挙げられる。
【０１１９】
これにより、自バンクでの外部プログラム対象のワード線アドレス（ＷＬ）情報を、他バンクでも利用できる効果が得られる。具体的には、アドレスバッファをバンク間で共有できるため、回路規模の縮小化を図ることが可能となる。
【０１２０】
本発明の第４実施形態を説明する。第４実施形態は、自バンクの外部プログラム対象ワード線へのプログラムの際、他バンク内のすべてのワード線に関わるメモリセルのＥＣＣ処理と訂正書き込み処理を組み込む形態である。ここで外部プログラム対象ワード線を有するバンクを自バンク、外部プログラム対象ワード線を有さないバンクを他バンクと定義している。なお不揮発性メモリの構成は第１実施形態と同様であるため、詳細な説明は省略する。
【０１２１】
外部の不図示のメモリコントローラから、バンクＢＫ０に対してプログラム動作を行う旨の指示がされることで、図１８に示すフローが開始される。
【０１２２】
図１８のＳ１６１ないしＳ１６３において、自バンクの外部プログラム対象ワード線へのプログラムが行われる。なおこれらのフローは、第３実施例（図１７）のＳ１５１ないしＳ１５３と同様であるため、詳細な説明は省略する。
【０１２３】
またＳ１６１ないしＳ１６３の動作と並行して、Ｓ１６５において、他バンクに存在する全ワード線に対して、メモリセルのＥＣＣチェックが行われる。このとき、ＳＯ機能が利用される。
【０１２４】
Ｓ１６６においてＥＣＣチェックが行われる。そしてＳ１６７において、ＥＣＣ修正が必要か否かが、判断される。修正が必要であると判断（Ｓ１６７：Ｙｅｓ）されると、Ｓ１７０へ進む。一方、修正が必要でないと判断（Ｓ１６７：Ｎｏ）される場合には、Ｓ１６８へ進む。
【０１２５】
Ｓ１６８において、他バンク内の全てのワード線についてＥＣＣチェックが終了したか否かが判断される。全てのワード線についてプログラムが終了している場合（Ｓ１６８：Ｙｅｓ）には、フローを終了する。一方、全てのワード線についてプログラムが終了していない場合（Ｓ１６８：Ｎｏ）には、Ｓ１６９へ進み、ワード線アドレスを１インクリメントした上でＳ１６５へ戻る。これにより、他バンク内の全ワード線についてＥＣＣチェックが行われる。
【０１２６】
Ｓ１７０では、訂正データがプログラムされる。このとき、プログラム用のプログラム電圧生成部１４がバンク自バンクと他バンクとで共通に１つしかない（共有する）場合には、Ｓ１６３でのプログラム完了を待って、Ｓ１７０でのプログラムが行われる。なお、自バンクと他バンクとが各々にプログラム電圧生成部１４を備える場合には、Ｓ１６３とＳ１７０とを、メモリ技術で一般的なバンク同時アクセス技術を応用して同時に行うことができる。Ｓ１７０の修正プログラムの実行は、第１実施形態の図５におけるＳ４ないしＳ１１と同様であるため、詳細な説明は省略する。
【０１２７】
以上より第４実施形態では、自バンクでのプログラム期間中に、他バンク内の全ワード線においてＥＣＣ処理を実行させることができるため、他バンクの外部リードアクセス時にＥＣＣ処理を組み込まなくてもよい設計ができる。これにより、アクセスの高速化を図ることができる。
【０１２８】
またメモリコントローラからの指令に応じて他バンクの全ワード線についてＥＣＣ処理訂正を行うため、メモリコントローラのシステムは不揮発性メモリがビジー状態であることを認識することができる。よってメモリコントローラは、訂正が終了するまでは不揮発性メモリに対して新たなアクセスコマンドを発行することを待つことができるため、メモリシステムのハングを防止する事が可能となる。尚、メモリコントローラが自バンクのアクセス中に他バンクのビジーを好まない場合には、後述のモードレジスタ等の設定値の変更によって、その都度、他バンクのＥＣＣ処理を非活性にすることができる。
【０１２９】
尚、本発明は前記実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々の改良、変形が可能であることは言うまでもない。この発明が適用できる不揮発性記憶装置は、不揮発性メモリセルの構造／原理、メモリセルアレイの構成などに限定されることなく利用できる。図１９に示す不揮発性メモリ１ａのように、拡張モード設定レジスタ２１を備える形態としてもよい。拡張モード設定レジスタ２１には、コマンドＣＭＤおよびプログラムアドレスＰＧＭ＿Ａｄｄが入力され、ＥＣＣ活性信号ＥＣＣ＿ＥＮが出力される。ユーザは、外部からのプログラム対象のデータを書き込む際にＥＣＣチェックを行うか否かの設定を拡張モード設定レジスタ２１に保持することができる。当該設定は、コマンドＣＭＤおよびプログラムアドレスＰＧＭ＿Ａｄｄを用いて設定される。ＥＣＣチェックを行う場合には、ハイレベルのＥＣＣ活性信号ＥＣＣ＿ＥＮがコマンドレジスタ／ステートコントロール部１３に入力され、コマンドレジスタ／ステートコントロール部１３はＥＣＣチェックを行うように不揮発性メモリ１ａをコントロールする。一方、ＥＣＣチェックを行わない場合には、ローレベルのＥＣＣ活性信号ＥＣＣ＿ＥＮがコマンドレジスタ／ステートコントロール部１３に入力され、コマンドレジスタ／ステートコントロール部１３はＥＣＣチェックを行わないように不揮発性メモリ１ａをコントロールする。これにより、ユーザはＥＣＣ処理の活性／非活性を、その都度選択することが可能となる。
【０１３０】
なお本実施形態の訂正情報ＣＤでは、図６に示すように、一つのワード線あたり単数ビット訂正する場合を例示した。しかしこの形態に限られない。一つのワード線あたり複数ビット訂正する形態も可能であることは言うまでもない。図２０に、一つのワード線内のｊビット分のメモリセルについて訂正することが可能な場合の訂正情報ＣＤａを示す。訂正情報ＣＤａは、一つのコラムアドレスあたり１ビットずつ訂正が検出されることを想定し、訂正コラムアドレスＣ＿Ｃｏｌ＿Ａｄｄ、訂正内容ＣＣ、フラグ情報ＥＣＣ＿ｆｌａｇをそれぞれ訂正するビット数（ｊ個）備える。そしてＥＣＣ訂正情報格納部２０は、ｊ個のフラグ情報ＥＣＣ＿ｆｌａｇのオア（ＯＲ）出力をメモリコントローラへ出力する。よって、ＥＣＣ訂正情報格納部２０は、全ての訂正内容がプログラムされるまでメモリコントローラへハイレベルの信号を出力し続ける。これにより、一つのワード線あたりｊビット数分のデータを訂正することが可能となる。
【０１３１】
なお、プログラム情報ＰＤは書込みデータの一例、訂正情報ＣＤは訂正データの一例、ＥＣＣ検出回路１９はＥＣＣ処理回路の一例、プログラム情報修正／ＥＣＣデータ作成回路１２は書き込み制御回路の一例、ＥＣＣ訂正情報格納部２０は訂正情報格納部の一例、第１実施形態における不揮発性メモリの回路図１は第１実施形態を含む不揮発性メモリ１の一例、拡張モード設定レジスタ２１を備える不揮発性メモリの回路図１ａは拡張モード設定レジスタ２１を備える不揮発性メモリの一例、データ用プログラム／イレース制御回路３４の内部回路図はデータ用プログラム／イレース制御回路３４の内部回路図の一例、再構成プログラム情報ＲＰＤは再構築書込みデータのそれぞれ一例である。
【図面の簡単な説明】
【０１３２】
【図１】第１実施形態に係る不揮発性メモリの回路図
【図２】プログラム情報修正およびプログラム情報修正／ＥＣＣデータ作成回路１２の内部回路図
【図３】データ用プログラム／イレース制御回路３４の内部回路図
【図４】第１実施形態に係る不揮発性メモリ１の動作の説明図
【図５】第１実施形態の第１実施例に係る不揮発性メモリ１の動作を示すフローチャート
【図６】第１実施形態に係る訂正情報ＣＤを示す図
【図７】プログラム情報の再構成の動作を示すフローチャート
【図８】プログラム情報修正回路３１の真理値表を示す図
【図９】第１実施形態の第２実施例に係る不揮発性メモリの動作を示すフローチャート
【図１０】第１実施形態の第３実施例に係る不揮発性メモリの動作を示すフローチャート（その１）
【図１１】第１実施形態の第３実施例に係る不揮発性メモリの動作を示すフローチャート（その２）
【図１２】第２実施形態に係る不揮発性メモリの動作を示すフローチャート（その１）
【図１３】第２実施形態に係る不揮発性メモリの動作を示すフローチャート（その２）
【図１４】第２実施形態に係る訂正情報ＣＤを示す図
【図１５】第２実施形態に係る不揮発性メモリの動作を示すフローチャート（その３）
【図１６】第３実施形態に係る不揮発性メモリの動作の説明図
【図１７】第３実施形態に係る不揮発性メモリの動作を示すフローチャート
【図１８】第４実施形態に係る不揮発性メモリの動作を示すフローチャート
【図１９】拡張モード設定レジスタ２１を備える不揮発性メモリの回路図
【図２０】訂正情報ＣＤａを示す図
【符号の説明】
【０１３３】
１  不揮発性メモリ
２  メモリセルアレイ
３  ＥＣＣメモリセルアレイ
１２  プログラム情報修正／ＥＣＣデータ作成回路
１３  ステートコントロール部
１９  ＥＣＣ検出回路
２０  ＥＣＣ訂正情報格納部
ＰＤ  プログラム情報
ＣＤ  訂正情報
ＭＤ  データ
ＲＰＤ  再構成プログラム情報
【図１】
2009223941.tif 000003
【図２】
2009223941.tif 000004
【図３】
2009223941.tif 000005
【図４】
2009223941.tif 000006
【図５】
2009223941.tif 000007
【図６】
2009223941.tif 000008
【図７】
2009223941.tif 000009
【図８】
2009223941.tif 000010
【図９】
2009223941.tif 000011
【図１０】
2009223941.tif 000012
【図１１】
2009223941.tif 000013
【図１２】
2009223941.tif 000014
【図１３】
2009223941.tif 000015
【図１４】
2009223941.tif 000016
【図１５】
2009223941.tif 000017
【図１６】
2009223941.tif 000018
【図１７】
2009223941.tif 000019
【図１８】
2009223941.tif 000020
【図１９】
2009223941.tif 000021
【図２０】
2009223941.tif 000022
【手続補正書】
【提出日】平成20年3月17日(2008.3.17)
【手続補正１】
【補正対象書類名】図面
【補正対象項目名】図１
【補正方法】変更
【補正の内容】
【図１】
2009223941.tif 000023
【手続補正２】
【補正対象書類名】図面
【補正対象項目名】図８
【補正方法】変更
【補正の内容】
【図８】
2009223941.tif 000024
【手続補正書】
【提出日】平成20年7月11日(2008.7.11)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は不揮発性記憶装置および不揮発性記憶装置の制御方法に関し、特に、外部アクセス速度を高速化すると共に信頼性が高い不揮発性記憶装置および不揮発性記憶装置の制御方法を提供することが可能な技術に関するものである。
【背景技術】
【０００２】
従来、ＥＣＣ処理は、外部リードアクセスの動作中に行われていた。そしてＥＣＣ処理が行われた結果のデータ情報がＩ／Ｏ端子へ出力されていた。
【０００３】
また従来、ＥＣＣ処理はメモリデバイスの起動時またはアイドル時に行われていた。そしてエラーデータを、ＥＣＣ処理結果に応じて訂正されたデータに書き直していた。
【０００４】
尚、上記の関連技術として特許文献１ないし４が開示されている。
【特許文献１】特開２００３−２９７０９９号公報
【特許文献２】特開２００３−２４８６３１号公報
【特許文献３】特開２００３−１４０９８２号公報
【特許文献４】特開２００１−１４２２６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし外部リードアクセス時にＥＣＣ処理を含めると、外部アクセス速度が低下するため問題である。
【０００６】
また、メモリ起動時またはアイドル時にＥＣＣ処理を含めると、 プログラム動作やイ
レース動作に時間の掛かる不揮発性メモリでは、書き直す時間が大きく、ビジー期間が長くなるため問題である。更に、メモリデバイス外と非同期で実行されるバックグラウンドでのＥＣＣ処理には、メモリデバイス外部からのアクセスとのアービタ処理が必須であり、外部アクセスが遅れる懸念がある。
【０００７】
本発明は前記背景技術に鑑みなされたものであり、外部アクセス速度を高速化すると共に信頼性が高い不揮発性記憶装置および不揮発性記憶装置の制御方法を提供することが可能な不揮発性記憶装置および不揮発性記憶装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
前記目的を達成するためになされた本発明に係る不揮発性記憶装置の制御方法は、少なくとも１つの書込み対象メモリセルへの書込みデータの書込みに先立って、書込み対象メモリセルに関連する複数のメモリセルに保持されるデータに対してＥＣＣチェックを行うステップと、書込み対象メモリセルへの書込みデータの書込みと同時期に、ＥＣＣチェックにより訂正が必要と判断された訂正対象メモリセルへ訂正データを書き込むステップとを備えることを特徴とする。
【０００９】
また本発明に係る不揮発性記憶装置は、少なくとも１つの書込み対象メモリセルへの書込みデータの書込みに先立って、書込み対象メモリセルに関連する複数のメモリセルに保持されるデータに対してＥＣＣチェックを行うＥＣＣ処理回路と、書込み対象メモリセルへの書込みデータの書込みと同時期に、ＥＣＣ処理回路により訂正が必要と判断された訂正対象メモリセルへ訂正データを書き込む書き込み制御回路とを備えることを特徴とする。
【００１０】
本発明に係る不揮発性記憶装置の制御方法および不揮発性記憶装置では、少なくとも１つの書込み対象メモリセルを有する。書込みデータは、ユーザが不揮発性記憶装置の書込み対象メモリセルに書き込むデータである。そして書込み対象メモリセルに関連して、複数のメモリセルが存在する。複数のメモリセルの例としては、書込み対象メモリセルと同一ワード線上のメモリセルや、書込み対象メモリセルが含まれるセクタまたはバンクを構成するメモリセルなどが挙げられる。ＥＣＣチェックが行われることで、誤ったデータが保持されている訂正対象メモリセルが判明する。そして訂正データを書き込むステップまたは書き込み制御回路により、正しいデータである訂正データが訂正対象メモリセルへ書き込まれる。このとき訂正データの書込みは、書込み対象メモリセルへの書込みデータの書込みと同時期に行われる。
【００１１】
動作を説明する。ＥＣＣチェックを行うステップまたはＥＣＣ処理回路では、書込みデータの書込みに先立ってＥＣＣチェックが行われる。ここでＥＣＣチェックを行うためには、まずＥＣＣチェック対象の領域のデータを読み出す必要がある。ここでデータ読出し動作時間がデータ書込み動作時間に対して無視できる程度に小さい場合には、ＥＣＣチェックに必要な時間も小さくすることができる。よって書込みデータの書込みに先立ってＥＣＣチェックを行うことによって、実質的なデータ書込み時間はロスしない。書き込むステップまたは書き込み制御回路では、書込み対象メモリセルへの書込みデータの書込みと同時期に、訂正対象メモリセルへの訂正データの書込みが行われる。すなわち、書込みデータの書込みと共に、メモリセルに保持されたデータ自身の訂正も併せて行われる。
【００１２】
従来の不揮発性記憶装置においては、起動時またはアイドル時、それ以前に書き込まれたデータ自身を訂正するため、訂正データを書き込むための専用の時間が必要となる。よってビジー期間が発生していた。更に、メモリデバイス外と非同期で実行されるバックグラウンドでのECC処理には、メモリデバイス外部からのアクセスとのアービタ処理が必須
であり、外部アクセスが遅れる懸念がある。しかし本発明に係る不揮発性記憶装置の制御方法および不揮発性記憶装置では、外部からのプログラム対象の書込みデータを書込み対象メモリセルへ書き込む際に必ず必要とされる書込み時間に隠れて、訂正データを訂正対象メモリセルへ書き込むため、起動時またはアイドル時に訂正データを書き込むための専用の時間を別途取る必要がない。よって起動時またはアイドル時にビジー期間を作らないため、外部アクセス速度を高速化できる。
【００１３】
また従来の不揮発性記憶装置においては、読出し時のたびに読み出したデータにＥＣＣ処理を行った上で出力するため、外部アクセス速度が低下していた。しかし本発明に係る不揮発性記憶装置の制御方法および不揮発性記憶装置では、書き込まれたデータ自身を訂正するので、読出し時のたびに読み出したデータにＥＣＣ処理を行う必要がない。よって外部アクセス速度を高速化できる。そして、それ以前に書き込まれたデータ自身が訂正されるため、リテンション不良（特に不揮発性メモリセルの隣接メモリセルをアクセスすることによる注目メモリセルのディスターブ等による記憶情報の劣化）の影響を排除することができる。よって不揮発性記憶装置の信頼性を高めることができる。
【発明の効果】
【００１４】
本発明によれば、外部アクセス速度を高速化すると共に信頼性が高い不揮発性記憶装置および不揮発性記憶装置の制御方法を提供することができる。
【発明を実施するための最良の形態】
【００１５】
本発明の第１実施形態に係る不揮発性メモリ１を図１に示す。不揮発性メモリ１は、メモリセル部５、Ｙゲート４、Ｉ／Ｏバッファ１１、プログラム情報修正／ＥＣＣデータ作成回路１２、コマンドレジスタ／ステートコントロール部１３、プログラム電圧生成部１４、イレース電圧生成部１５、アドレスバッファ１６、Ｘ／Ｙデコーダ１７、リード回路１８、ＥＣＣ検出回路１９、ＥＣＣ訂正情報格納部２０を備える。
【００１６】
コマンドレジスタ／ステートコントロール部１３には、不揮発性記憶装置外部から不図示の外部コントロールピンを介して、各種のコマンドＣＭＤが入力される。またコマンドレジスタ／ステートコントロール部１３から出力される電圧制御信号ＶＳ１はプログラム電圧生成部１４へ入力され、電圧制御信号ＶＳ２はイレース電圧生成部１５へ入力される。またコマンドレジスタ／ステートコントロール部１３から出力される信号ＰＧＭｐｕｌｓｅまたは信号ＥＲｐｕｌｓｅ、信号ＭＯＤＥ、信号ＤＬＢは、プログラム情報修正／ＥＣＣデータ作成回路１２へ入力され、信号ＦＬＡＧ＿ＲＳＴ、信号ＥＣＣ＿ＬＯＡＤ＿ｐｕｌｓｅはＥＣＣ訂正情報格納部２０へ入力され、信号ＷＬ＿ｐｕｌｓｅおよび信号Ｃｏｌ＿ｐｕｌｓｅは、アドレスバッファ１６に入力される。またプログラム電圧生成部１４から出力されるプログラム用電圧ＶＰＲＯＧは、プログラム情報修正／ＥＣＣデータ作成回路１２へ入力され、プログラム時のワード線用電圧ＶＧはＸ／Ｙデコーダ１７へ入力される。またイレース電圧生成部１５から出力されるイレース用電圧ＶＥＲは、Ｘ／Ｙデコーダ１７へ入力される。
【００１７】
アドレスバッファ１６には、不図示の外部アドレスピンを介して、プログラムアドレスＰＧＭ＿Ａｄｄが入力される。プログラムアドレスＰＧＭ＿Ａｄｄは、バンクアドレスＢＡ＿Ａｄｄ、ワード線アドレスＷＬ＿Ａｄｄ、コラムアドレスＣｏｌ＿Ａｄｄを含む。アドレスバッファ１６からはプログラムアドレスＰＧＭ＿ＡｄｄおよびＰＧＭ＿Ａｄｄのワード線アドレスまたはコラムアドレスをインクリメントしたアドレスＣＯＮＴが出力され、プログラム情報修正／ＥＣＣデータ作成回路１２に入力される。Ｘ／Ｙデコーダ１７からメモリセル部５へは、ワード線への供給電圧である電圧ＶＷＬが入力される。また、Ｘ／Ｙデコーダ１７からＹゲート４へは、コラムデコータスイッチを選択活性化するためのゲート電圧である電圧ＶＣＤが入力される。
【００１８】
Ｉ／Ｏバッファ１１には、不図示の外部ＤＱピンを介して、プログラム情報ＰＤが入力される。なおＩ／Ｏバッファ１１は、例えばＤＱピンから１６ビットパラレル入出力の場合には、Ｉ／Ｏ数分だけ備えられる。
【００１９】
メモリセル部５は、メモリセルアレイ２およびＥＣＣメモリセルアレイ３を備える。メモリセルおよびＥＣＣメモリセルを選択して活性化するワード線ＷＬ（０）ないしＷＬ（ｋ）が、メモリセルアレイ２およびＥＣＣメモリセルアレイ３を貫いて備えられる。つまり、メモリセルおよびＥＣＣメモリセルは、一つのワード線で共通接続される。ここでワード線ＷＬ（ｉ）に接続される複数のメモリセルを、ワード線メモリセル群ＭＧ（ｉ）と定義する。またワード線ＷＬ（ｉ）に接続される複数のＥＣＣメモリセルを、ワード線ＥＣＣメモリセル群ＥＧ（ｉ）と定義する。ワード線メモリセル群ＭＧ（ｉ）にはデータＭＤ（ｉ）が保持される。またワード線ＥＣＣメモリセル群ＥＧ（ｉ）には、データＭＤ（ｉ）についてのＥＣＣコードＥＣ（ｉ）が保持される。またメモリセルおよびＥＣＣメモリセルのデータを入出力できる複数のビットラインが連結される。
【００２０】
リード回路１８にはデータＭＤおよびＥＣＣコードＥＣが入力・保持される。リード回路１８から出力されるデータＭＤ、ＥＣＣコードＥＣ、信号ＤＡＶ、ベリファイ結果信号ＭＡＴＣＨが出力される。ＥＣＣ検出回路１９へはデータＭＤ、ＥＣＣコードＥＣ、信号ＤＡＶが入力される。またＩ／Ｏバッファ１１へはデータＭＤが入力され、プログラム情報修正／ＥＣＣデータ作成回路１２へはデータＭＤおよび信号ＤＡＶが入力され、コマンドレジスタ／ステートコントロール部１３へはベリファイ結果信号ＭＡＴＣＨが入力される。ＥＣＣ検出回路１９では、訂正情報ＣＤを生成し、ＥＣＣ訂正情報格納部２０へ出力する。また、ＥＣＣ検出信号ＥＣＣ＿Ｄｅｔをコマンドレジスタ／ステートコントロール部１３へ出力する。ＥＣＣ訂正情報格納部２０は、訂正アドレスＥＣＣ＿Ａｄｄ、訂正信号ＥＣＣＩＮ、信号ＥＣＣＤ、フラグ情報ＥＣＣ＿Ｆｌａｇを出力する。訂正アドレスＥＣＣ＿Ａｄｄおよび訂正信号ＥＣＣＩＮはプログラム情報修正／ＥＣＣデータ作成回路１２へ入力される。信号ＥＣＣＤはプログラム情報修正／ＥＣＣデータ作成回路１２およびコマンドレジスタ／ステートコントロール部１３へ入力される。フラグ情報ＥＣＣ＿Ｆｌａｇは、コマンドレジスタ／ステートコントロール部１３へ入力され、コマンドレジスタ／ステートコントロール部１３から出力される信号ＳＴＡＴＵＳとして不図示のＤＱピンまたは専用ピンを介して、不図示の外部のメモリコントローラへ入力される。プログラム情報修正／ＥＣＣデータ作成回路１２から出力される信号ＥＣＣ＿ＣＯＭＰ、信号ＣＰＲＧＭＡｄｄ＿ＭＡＴＣＨは、コマンドレジスタ／ステートコントロール部１３へ入力され、データＤＡＴＡＢおよびデータＥＣＣＤＡＴＡＢはＹゲート４へ入力される。
【００２１】
図２に、プログラム情報修正およびプログラム情報修正／ＥＣＣデータ作成回路１２の内部回路を示す。プログラム情報修正／ＥＣＣデータ作成回路１２は、プログラム情報修正回路３１、ＥＣＣデータ生成回路３２、ＥＣＣコード用プログラム／イレース制御回路３３、データ用プログラム／イレース制御回路３４、第１プログラムバッファ４１、訂正アドレス検出回路４２、第２プログラムバッファ４３を備える。なお、プログラム情報修正回路３１は、ＤＱピンが１６ビットパラレル入出力の場合は、Ｉ／Ｏ数分だけ備える。またデータ用プログラム／イレース制御回路３４は１ワード線のメモリセル数分、ＥＣＣコード用プログラム／イレース制御回路３３はＥＣＣメモリセル数分だけ備える。
【００２２】
プログラム情報修正回路３１は、インバータＩＮＶ１およびＩＮＶ２、アンド回路ＡＤ１ないしＡＤ３、オア回路ＯＲ１を備える。第１プログラムバッファ４１には、データＭＤ、プログラム情報ＢＰＤが入力される。訂正アドレス検出回路４２には、プログラムアドレスＰＧＭ＿Ａｄｄ、訂正アドレスＥＣＣ＿Ａｄｄ、訂正信号ＥＣＣＩＮが入力される。第１プログラムバッファ４１から出力されるプログラム情報ＰＢＯＵＴ１はアンド回路ＡＤ１およびＡＤ２に入力される。訂正アドレス検出回路４２から出力される一致信号ＰＧＭＡｄｄ＿ＭＡＴＣＨは、アンド回路ＡＤ１に入力されると共に、インバータＩＮＶ１を介してアンド回路ＡＤ２およびＡＤ３へ入力される。訂正アドレス検出回路４２から出力される一致信号ＣＰＧＭＡｄｄ＿ＭＡＴＣＨは、コマンドレジスタ／ステートコントロール部１３へ入力される。訂正アドレス検出回路４２から出力される訂正信号ＥＣＣＩＮＯは、アンド回路ＡＤ２に入力されると共に、インバータＩＮＶ２を介してアンド回路ＡＤ３へ入力される。またアンド回路ＡＤ３には信号ＥＣＣＤが入力される。アンド回路ＡＤ１ないしＡＤ３の出力はオア回路ＯＲ１へ入力される。オア回路ＯＲ１からは修正処理されたプログラム情報ＣＯＭＰＤが出力され、第２プログラムバッファ４３へ入力される。第２プログラムバッファ４３からは再構成プログラム情報ＲＰＤおよびデータＰＢＯＵＴ２が出力される。ＥＣＣデータ生成回路３２には再構成プログラム情報ＲＰＤが入力される。ＥＣＣデータ生成回路３２から出力される再構成プログラム情報ＲＰＤに対する再構成ＥＣＣコードＲＥＣは第２プログラムバッファ４３へ、ＥＣＣ＿ＣＯＭＰはコマンドレジスタ／ステートコントロール部１３へ入力される。
【００２３】
ＥＣＣコード用プログラム／イレース制御回路３３およびデータ用プログラム／イレース制御回路３４には、データＰＢＯＵＴ２、信号ＰＧＭｐｕｌｓｅまたは信号E Rｐｕｌ
ｓｅ、信号ＭＯＤＥ、信号ＤＡＶ、信号ＤＬＢ、プログラム用電圧ＶＰＲＯＧがそれぞれ入力される。そしてＥＣＣコード用プログラム／イレース制御回路３３からはデータＥＣＣＤＡＴＡＢが出力され、データ用プログラム／イレース制御回路３４からはデータＤＡＴＡＢが出力される。
【００２４】
図２において、アンド回路ＡＤ１は、外部からのプログラム対象アドレスのときは、ＥＣＣ処理結果に関わらず外部からのプログラムデータを訂正せずに出力する動作をする回路である。またアンド回路ＡＤ２は、外部からのプログラム対象アドレス以外で訂正がないプログラムデータを出力する動作をする回路である。またアンド回路ＡＤ３は、プログラムモードとイレースモードとの切り替えを行う回路である。アンド回路ＡＤ３は、プログラムモード（メモリセルを「１⇒０」に訂正）のときにはローレベルを出力し、イレースモード（メモリセルを「０⇒１」に訂正）のときにはハイレベルを出力する。
【００２５】
また図３に、データ用プログラム／イレース制御回路３４の内部回路を示す。データ用プログラム／イレース制御回路３４は、データ入力部５４、ライトアンプラッチ５５、ベリファイ部５６、モード切替部５７、セレクタ５８、レベルシフタ５１、アンド回路５３を備える。ベリファイ部５６のＰチャネルトランジスタＱ１およびＱ２には、信号ＤＡＶがインバータＩＮＶ３を介して相補的に入力される。モード切替部５７のＰチャネルトランジスタＱ３およびＱ４には、信号ＭＯＤＥがインバータＩＮＶ４を介して相補的に入力される。データ入力部５４にはデータＰＢＯＵＴ２および信号ＤＬＢが入力される。ライトアンプラッチ５５のノードＣには、電源電圧ＶＣＣがトランジスタＱ２およびＱ４を介して接続されると共に、データ入力部５４の出力端子が接続される。またライトアンプラッチ５５のノードＢには、電源電圧ＶＣＣがトランジスタＱ１およびＱ３を介して接続される。セレクタ５８は、入力される信号ＭＯＤＥに応じて、ノードＡまたはノードＢの一方を択一に選択する。アンド回路５３の一方の入力端子にはセレクタ５８の出力端子が接続され、他方の入力端子には信号ＰＧＭｐｕｌｓｅまたは信号ＥＲｐｕｌｓｅが入力される。アンド回路５３からはプログラム信号ＰＧが出力される。レベルシフタ５１にはプログラム信号ＰＧおよびプログラム用電圧ＶＰＲＯＧが入力され、データＤＡＴＡＢが出力される。なおＥＣＣコード用プログラム／イレース制御回路３３の構成は、データ用プログラム／イレース制御回路３４と同様であるため、詳細な説明は省略する。
【００２６】
第１実施形態の第１実施例に係る不揮発性メモリ１の動作を説明する。第１実施例は、プログラム方向（データ１からデータ０）の訂正のみを行う場合の回路である。第１実施例が適用される不揮発性メモリ１としては、例えばフラッシュメモリが挙げられる。また第１実施例では、１ワード線あたり単数ビット訂正する場合を説明する。
【００２７】
図４および図５を用いて、不揮発性メモリ１の動作を説明する。外部の不図示のメモリコントローラから、コマンドレジスタ／ステートコントロール部１３にプログラムする旨のコマンドＣＭＤが入力される。これによりプログラム動作を行う旨の指示がされることで、図５に示すフローが開始される。また、アドレスバッファ１６にプログラム対象のメモリセルのアドレスを示すプログラムアドレスＰＧＭ＿Ａｄｄが入力され、Ｉ／Ｏバッファ１１にプログラムされるプログラム情報ＰＤが入力される。
【００２８】
本実施形態では、説明を簡易にするためにＤＱピンからの入出力数を１、すなわちＩ／Ｏ数を１として以後を説明する。例として図４（ａ）に示すように、プログラムアドレスＰＧＭ＿Ａｄｄとして、バンクアドレスＢＡ＿Ａｄｄ＝０、ワード線アドレスＷＬ＿Ａｄｄ＝ｉ、コラムアドレスＣｏｌ＿Ａｄｄ＝０が入力され、プログラム情報ＰＤ（ｉ）＝０が入力される場合を説明する。
【００２９】
図５のＳ１およびＳ２に示すように、プログラム動作に先立って、ＥＣＣチェックが行われる。ＥＣＣチェックでは、まずＳ１において、入力されたプログラムアドレスＰＧＭ＿Ａｄｄより、プログラム対象となるワード線のメモリセルおよびそのＥＣＣメモリセルのリードを行う。具体的には、リードに際しＸ／Ｙデコーダ１７は、外部から入力されたプログラムアドレスＰＧＭ＿Ａｄｄのワード線アドレス（Ｘ−アドレス）に応答して、複数ワード線のうち一つをリード対象として選択する。そして選択されたワード線には、読み出し電圧が供給される。そしてリード回路１８において、プログラム対象であるワード線ＷＬに接続されるメモリセルからデータＭＤがリードされると共に、同一ワード線ＷＬに接続されるＥＣＣメモリセルからＥＣＣコードＥＣが同様にリードされ、リード回路１８内の不図示のレジスタに保持される。
【００３０】
本実施形態では、図４（ｂ）に示すように、ワード線ＷＬ（ｉ）が選択されるので、ワード線ＷＬ（ｉ）のコラムアドレスＣｏｌ＿Ａｄｄ＝０ないしｍに保持されているデータＭＤ（ｉ）がリードされる。またワード線ＷＬ（ｉ）のワード線ＥＣＣメモリセル群ＥＧ（ｉ）に保持されている、ＥＣＣコードＥＣ（ｉ）がリードされる。
【００３１】
なお、このリード動作にかかる時間は、プログラム動作時間（マイクロ秒）に比して無視できる程度（ナノ秒）に小さい。よってプログラム動作に先立ってリード動作を挿入しても、不揮発性メモリ１の動作速度に与える影響は無視できる程度に小さなものである。
【００３２】
次にＳ２において、ＥＣＣ検出回路１９において、ＥＣＣメモリセルから読出したＥＣＣコードＥＣ（ｉ）を用いて、メモリセルから読み出したデータＭＤ（ｉ）に対してＥＣＣチェックを行う。なおＥＣＣチェックは、一般的なＥＣＣチェック方法により行えばよいため、ここでは説明を省略する。ここでＥＣＣ検出回路１９はＥＣＣチェックによりエラーを検出した場合、エラーを検出したことを示す信号であるＥＣＣ検出信号ＥＣＣ＿Ｄｅｔをコマンドレジスタ／ステートコントロール部１３へ出力する。
【００３３】
図４（ｃ）に本実施形態でのＥＣＣチェック結果を示す。ＥＣＣコードＥＣ（ｉ）を用いて、ＥＣＣチェックデータＥＣＤ（ｉ）が生成される（図４、矢印Ａ６）。図４（ｃ）では、コラムアドレスＣｏｌ＿Ａｄｄ＝ｍのメモリセルにおいて、メモリセルのリテンション不良等に起因して、フローティングゲート／ナイトライド等の情報トラップ領域に蓄積された電荷が放出されることにより、本来“０”だったデータが“１”に変わってしまっていることがＥＣＣチェックにより判明する。
【００３４】
ＥＣＣチェックでエラーが検出されない場合（Ｓ３：Ｎｏ）は、プログラム情報ＰＤ（ｉ）によりＥＣＣコードＥＣ（ｉ）が変わるため、Ｓ５へ進み、後述するようにプログラム情報ＰＤの再構成を行い、プログラム処理を行う。一方、ＥＣＣチェックでエラーが検出された場合（Ｓ３：Ｙｅｓ）は、Ｓ４へ進み、訂正情報ＣＤ（ワード線アドレス、訂正データ等）をＥＣＣ訂正情報格納部２０に格納する。ここで訂正情報ＣＤは、図６に示すように、訂正アドレスＥＣＣ＿Ａｄｄ訂正内容ＣＣ、フラグ情報ＥＣＣ＿Ｆｌａｇを備えている。また訂正アドレスＥＣＣ＿Ａｄｄは、訂正が必要なメモリセルを特定するためのアドレスであり、訂正バンクアドレスＣ＿ＢＡ＿Ａｄｄ、訂正ワード線アドレスＣ＿ＷＬ＿Ａｄｄ、訂正コラムアドレスＣ＿Ｃｏｌ＿Ａｄｄを備える。訂正内容ＣＣは、データをイレース側（１）またはプログラム側（０）のどちらに訂正するかの指示内容を含んでいる。なお、本実施形態では、１コラムアドレスに対し一つのＩ／Ｏで構成される場合の説明のため、訂正内容ＣＣは、訂正コラムアドレスＣ＿Ｃｏｌ＿Ａｄｄに対し一つのＩ／Ｏに対しての訂正内容である。一つのコラムアドレスに対し複数Ｉ／Ｏで構成される場合は、訂正対象のＩ／Ｏを除いた訂正対象外のI／Ｏは、メモリセルから読み出したデータＭ
Ｄ（ｉ）を訂正コラムアドレスＣ＿Ｃｏｌ＿Ａｄｄの訂正内容ＣＣに格納する。またフラグ情報ＥＣＣ＿Ｆｌａｇは、不揮発性メモリ１の外部にある不図示のメモリコントローラに対して、ＥＣＣ訂正処理の有無を示すビットである。フラグ情報ＥＣＣ＿Ｆｌａｇは、ＥＣＣチェックによりエラーが検出された時点で“１”にセットされ、コマンドレジスタ／ステートコントロール部１３へ入力し、訂正が完了した後にコマンドレジスタ／ステートコントロール部１３から出力される信号ＦＬＡＧ＿ＲＳＴにより“０”へリセットされる。
【００３５】
本実施形態では、コラムアドレスＣｏｌ＿Ａｄｄ＝ｍのメモリセルにおいてＥＣＣエラーが検出された場合を説示しているため、Ｓ３からＳ４へ進む。そして訂正情報ＣＤがＥＣＣ訂正情報格納部２０へ格納される。ここで訂正情報ＣＤの内容は、訂正バンクアドレスＣ＿ＢＡ＿Ａｄｄ＝バンク０、訂正ワード線アドレスＣ＿ＷＬ＿Ａｄｄ＝ｉ、訂正コラムアドレスＣ＿Ｃｏｌ＿Ａｄｄ＝ｍ、訂正内容ＣＣはデータをプログラム側へ訂正する旨の情報、またフラグ情報ＥＣＣ＿Ｆｌａｇ＝１である。
【００３６】
外部の不図示のメモリコントローラは、フラグ情報ＥＣＣ＿Ｆｌａｇ＝１が入力されることで、不揮発性メモリ１がＥＣＣチェック動作中（訂正PGM終了までを含む）であることを認識する。これによりメモリコントローラは、ＥＣＣチェックが終了するまで電源を落とさないように不揮発性メモリ１への供給電源をコントロールすることが可能となる。なお不揮発性メモリ１からメモリコントローラへのフラグ情報ＥＣＣ＿Ｆｌａｇの伝達は、コマンドレジスタ／ステートコントロール部１３へ入力し、および不図示のＤＱピンおよび専用ピンを介して、出力される信号ＳＴＡＴＵＳにて行われる。コマンドレジスタ／ステートコントロール部１３内のフラグ情報レジスタへフラグ情報ＥＣＣ＿Ｆｌａｇを格納し、メモリコントローラが必要に応じてそのフラグ情報レジスタを参照するようにしても良い。
【００３７】
次にＳ５において、プログラム情報ＰＤの再構成が行われる。プログラム情報ＰＤの再構成は、外部からのプログラム情報ＰＤに、訂正情報ＣＤを組み込む動作である。Ｓ５では、プログラム情報修正／ＥＣＣデータ作成回路１２において、ＥＣＣ訂正情報格納部２０に格納された訂正情報ＣＤに基づき、プログラム情報ＰＤの再構成が行われる。また、プログラム情報ＰＤによりＥＣＣコードＥＣが変更となるため、プログラム情報ＰＤの再構成は必要になる。
【００３８】
Ｓ５で行われるプログラム情報の再構成の詳細について、図２ないし図７を用いて説明する。プログラム情報の再構成に先立ち、外部からのプログラム対象アドレスのプログラム情報ＰＤが、Ｉ／Ｏバッファ１１に格納されている。本実施形態では、プログラム情報ＰＤ（ｉ）＝０が、Ｉ／Ｏバッファ１１に入力および保持されている。ここでプログラム情報ＰＤは、例えば１６ビット入出力の場合には１６ビット並列にＩ／Ｏバッファ１１に入力されてもよい。なお本実施形態では説明の簡略のため、１ビット入出力の場合を説明する。
【００３９】
図７のＳ１２において、プログラム対象となる一つのワード線のメモリセルおよびＥＣＣメモリセルの読み出しを行う。本実施形態では、リード回路１８において、プログラム対象であるワード線アドレスＷＬ＿ａｄｄ＝ｉのワード線に接続されるメモリセルからデータＭＤ（ｉ）およびＥＣＣコードＥＣ（ｉ）がリードされ、ＥＣＣ検出回路１９内の不図示のレジスタに保持される。ただし、図５のＳ１にて既にプログラム対象となる一つのワード線のメモリセルおよびECCメモリセルの読み出されたデータＭＤ（ｉ）およびＥＣ
ＣコードＥＣ（ｉ）が、リード回路１８において図７のＳ１２までラッチされている場合は、図７のＳ１２を省略することができる。ただしこの条件は、後述に示す第２実施形態のように自バンクの全ワード線のＥＣＣ処理を行った後、全ワード線の訂正書き込み処理を行う場合の事例においては、Ｓ１２時のＳ１におけるリード回路１８にラッチされるデータＭＤ（ｉ）およびＥＣＣコード（ｉ）は、プログラム対象のデータＭＤおよびＥＣＣコードＥＣと一致しないため除く。
【００４０】
Ｓ１３において、Ｉ／Ｏバッファ１１に格納されたプログラム対象アドレスのプログラム情報ＰＤを、第１プログラムバッファ４１に格納する。本実施形態では、プログラム情報ＰＤ（ｉ）＝０が第１プログラムバッファ４１に格納される（図４、矢印Ａ１）。
【００４１】
Ｓ１４において、先程読み出したデータＭＤ（ｉ）からプログラム情報ＰＤ（ｉ）を除く読み出しデータを、第１プログラムバッファ４１へ格納する。本実施形態では、コラムアドレスＣｏｌ＿Ａｄｄ＝０のデータを除く、コラムアドレスＣｏｌ＿Ａｄｄ＝１ないしｍのデータが、第１プログラムバッファ４１へ格納される（図４、矢印Ａ２）。これにより、図４（ｄ）に示すように、プログラム対象ワード線の訂正前のプログラム内容を表す、訂正前プログラム情報ＰＰＤ（ｉ）が生成される。
【００４２】
Ｓ１５において、まず優先的に、第１プログラムバッファ４１から第２プログラムバッファ４３へ、外部からのプログラムデータであるプログラム情報ＰＤ（ｉ）を移す動作が行われる。これはプログラム情報ＰＤ（ｉ）に対しては、訂正は行われないためである。なお当該移送動作は、プログラム情報修正回路３１において１ビットずつ行われる。ただし、入出力が複数Ｉ／Ｏの場合は、コラムアドレスＣｏｌ＿Ａｄｄごとに複数Ｉ／Ｏ並列に１ビットずつ当該移送動作が行われる。本実施形態では、プログラム情報ＰＤ（ｉ）（コラムアドレスＣｏｌ＿Ａｄｄ＝０）が、第１プログラムバッファ４１から第２プログラムバッファ４３へ入力される（図４、矢印Ａ３）。
【００４３】
ここでプログラム情報ＰＤ（ｉ）を移送する動作を、図２および図８を用いて詳細に説明する。図８は、一致信号ＰＧＭＡｄｄ＿ＭＡＴＣＨ、訂正信号ＥＣＣＩＮＯ、信号ＥＣＣＤの値と、オア回路ＯＲ１の出力信号ＣＯＭＰＤとの相関を示す真理値表である。
【００４４】
訂正アドレス検出回路４２は、プログラムアドレスＰＧＭ＿Ａｄｄを用いることにより、プログラム情報ＰＤ（ｉ）を移送する期間中において、ハイレベルの一致信号ＰＧＭＡｄｄ＿ＭＡＴＣＨを出力する。よってアンド回路ＡＤ１は、外部からのプログラムデータを訂正せずに出力する。またアンド回路ＡＤ２、ＡＤ３の出力はローレベルで固定される。。ＥＣＣ訂正情報格納部から入力される訂正アドレスＥＣＣ＿ＡｄｄとプログラムアドレスＰＧＭ＿Ａｄｄが一致した場合においても、外部からのプログラム情報ＰＤ（ｉ）に対し訂正を行う必要がないため、ハイレベルの一致信号ＰＧＭＡｄｄ＿ＭＡＴＣＨおよびハイレベルのＥＣＣＩＮＯを出力する。すると図８（１）の真理値表に示すように、オア回路ＯＲ１の出力である出力信号ＣＯＭＰＤは、プログラム情報ＰＤによって決まることになる。すなわち、プログラム情報ＰＤ（ｉ）が、第１プログラムバッファ４１から第２プログラムバッファ４３へ訂正されることなく移送される。
【００４５】
Ｓ１６ないしＳ２０において、外部からのプログラム対象外アドレスの訂正を行う。プログラム対象アドレスのプログラムデータであるＰＤ（ｉ）の第２プログラムバッファ４３への移送が完了した後、Ｓ１６へ進む。Ｓ１６では、アドレスバッファ１６内に配置されている不図示のコラムアドレスカウンタが、コマンドレジスタ／ステートコントロール部１３から入力される信号Ｃｏｌ＿ｐｕｌｓｅにより、一つインクリメントされる。本実施形態では、コラムアドレスＣｏｌ＿Ａｄｄ＝０のデータを格納することで、プログラム対象アドレスのプログラムデータの全てが格納される。よって「コラムアドレスカウンタ」がコラムアドレスＣｏｌ＿Ａｄｄ＝１とされることで、Ｓ１６が開始される。このとき、プログラム対象アドレス外のデータを移送する期間であるため、訂正アドレス検出回路４２は、ローレベルの一致信号ＰＧＭＡｄｄ＿ＭＡＴＣＨを出力する。
【００４６】
Ｓ１７において、訂正アドレス検出回路４２にて、アドレスバッファ１６にてＰＧＭ＿Ａｄｄのコラムアドレスが一つインクリメントされたアドレスＣＯＮＴと、訂正アドレスＥＣＣ＿Ａｄｄに含まれる訂正コラムアドレスＣ＿Ｃｏｌ＿Ａｄｄとが一致するか否かが検出される。これにより、訂正が必要なメモリセルであるか否かが判定される。ただし、訂正が必要なメモリセルであるか否かは、訂正コラムアドレスＣ＿Ｃｏｌ＿Ａｄｄだけでなく、訂正バンクアドレスＣ＿ＢＡ＿Ａｄｄ、訂正ワード線アドレスＣ＿ＷＬ＿Ａｄｄも含めて検出する。なお、訂正メモリセルが一致した場合は、訂正アドレス検出回路４２が、コマンドレジスタ／ステートコントロール部１３へハイレベルの信号ＣＰＧＭＡｄｄ＿ＭＡＴＣＨを出力する。コマンドレジスタ／ステートコントロール部１３は、ハイレベルのＣＰＧＭＡｄｄ＿ＭＡＴＣＨが入力されると、ＥＣＣ訂正情報格納部２０に格納されている訂正情報ＣＤが格納されている不図示のレジスタのアドレスを一つインクリメントする信号である信号ＥＣＣ＿ＬＯＡＤ＿ｐｕｌｓｅをハイレベルとして、ＥＣＣ訂正情報格納部２０へ入力する。本説明においては、一つのワード線あたり単数ビット訂正する場合のため、ＥＣＣ訂正情報格納部２０にハイレベルの信号ＥＣＣ＿ＬＯＡＤ＿ｐｕｌｓｅが入力されても訂正情報ＣＤが１つしか格納されていないため、上記動作を行わないが、一つのワード線あたり複数ビットの訂正が可能な場合は、ハイレベルの信号ＥＣＣ＿ＬＯＡＤ＿ｐｕｌｓｅが入力されると、ＥＣＣ訂正情報格納部２０に格納されている訂正情報ＣＤが格納されている不図示のレジスタのアドレスを一つインクリメントし、訂正アドレス検出回路４２へ入力するものとする。
【００４７】
一致が検出されない（Ｓ１７：Ｎｏ）と、訂正がないと認識され、Ｓ１８へ進む。Ｓ１８において、訂正アドレス検出回路４２は、訂正がない旨を示すハイレベルの訂正信号ＥＣＣＩＮＯを出力する。ローレベルの一致信号ＰＧＭＡｄｄ＿ＭＡＴＣＨにより、アンド回路ＡＤ１の出力はローレベル固定となる。ハイレベルの訂正信号ＥＣＣＩＮＯにより、アンド回路ＡＤ３の出力はローレベル固定となる。そしてアンド回路ＡＤ２の出力は、プログラム情報ＰＤによって決まる。すると図８（２）の真理値表に示すように、オア回路ＯＲ１の出力である出力信号ＣＯＭＰＤは、プログラム情報ＰＤによって決まる。すなわち、コラムアドレスＣｏｌ＿Ａｄｄ＝１のデータ（訂正なし）が第１プログラムバッファ４１から第２プログラムバッファ４３へ訂正されることなく移送される。そしてＳ２０へ進む。
【００４８】
一方、Ｓ１７において一致が検出される（Ｓ１７：Ｙｅｓ）と、訂正があると認識され、Ｓ１９へ進む。Ｓ１９において、訂正アドレス検出回路４２は、訂正がある旨を示すローレベルの訂正信号ＥＣＣＩＮＯを出力する。ローレベルの一致信号ＰＧＭＡｄｄ＿ＭＡＴＣＨにより、アンド回路ＡＤ１の出力はローレベル固定となる。ローレベルの訂正信号ＥＣＣＩＮＯにより、アンド回路ＡＤ２の出力はローレベル固定となる。また本説明においてはプログラム時を説明しているので、信号ＥＣＣＤはローレベルであり、アンド回路ＡＤ３の出力はローレベル固定となる。すると図８（３）の真理値表に示すように、オア回路ＯＲ１の出力信号ＣＯＭＰＤは、ローレベルとされる。すなわち、訂正信号ＥＣＣＩＮＯが”Ｌ”のときは訂正があると見做し、読出しデータの内容に関わらず、出力信号ＣＯＭＰＤをプログラムビットを示す”０”とする。そしてＳ２０へ進む。
【００４９】
Ｓ２０において、訂正の有無を確認したメモリセルが、最終コラムアドレスのメモリセルであるか否かが判断される。そしてプログラム対象のワード線内の全メモリセルについてチェックが終了していないと判断される場合（Ｓ２０：Ｎｏ）にはＳ１６へ戻り、全メモリセルについてチェックが終了していると判断される場合（Ｓ２０：Ｙｅｓ）にはフローを終了する。これにより、Ｓ１６ないしＳ１９が、外部からのプログラム対象外の全てのデータについてチェックが行われるまで繰り返される。よってプログラム対象の一つのワード線内の全メモリセルについて、チェックと訂正が行われる。なお、後述の第１実施形態の第３実施例や第２実施形態のように、自バンクまたは他バンク内の全ワード線においてＥＣＣ処理を実行させる場合においては、コラムアドレスだけでなくワード線アドレスのインクリメントが必要となる。一つのワード線のＥＣＣ処理またはその訂正プログラム処理が終了するたび、コマンドレジスタ／ステートコントロール部１３から入力されるＷＬ＿ｐｕｌｓｅによりワード線アドレスを一つインクリメントし、インクリメントしたワード線の全コラムアドレスに対し、訂正の有無のチェックを行う。以下、全ワード線についてのチェックが終了するまで繰り返す必要がある。
【００５０】
本実施形態では、コラムアドレスＣｏｌ＿Ａｄｄ＝１から（ｍ−１）のメモリセルについては、訂正アドレスＥＣＣ＿Ａｄｄと一致検出がされない。よってデータを訂正せずに、第２プログラムバッファ４３に格納する（図４、矢印Ａ４）。しかしコラムアドレスＣｏｌ＿Ａｄｄ＝ｍのメモリセルについては一致検出がされるため、データを”１”から”０”へ訂正した上で、第２プログラムバッファ４３へ格納する（図４、矢印Ａ５）。
【００５１】
これにより、プログラム情報の再構成が終了する。そして図４（ｅ）に示すように、再構成プログラム情報ＲＰＤ（ｉ）が、第２プログラムバッファ４３に保持される。
【００５２】
またＥＣＣデータ生成回路３２には、第２プログラムバッファ４３から再構成プログラム情報ＲＰＤ（ｉ）が入力される。ＥＣＣデータ生成回路３２は、再構成プログラム情報ＲＰＤに基づいて再構成ＥＣＣコードＲＥＣ（ｉ）を生成する（図４、矢印Ａ７）。生成された再構成ＥＣＣコードＲＥＣは、第２プログラムバッファ４３へ格納される。以上により、Ｓ５におけるプログラム情報の再構成が終了する。
【００５３】
図５のＳ７ないしＳ９において、外部からのプログラム対象のワード線上のメモリセルおよびＥＣＣメモリセルに対し、再構成プログラム情報ＲＰＤ（ｉ）および再構成ＥＣＣコードＲＥＣ（ｉ）の書込みが行われる。書込み動作は、プログラムルーチンまたは／およびイレースルーチンによって行われる。プログラムルーチンとイレースルーチンとの切り替えは、コマンドレジスタ／ステートコントロール部１３から出力される信号ＭＯＤＥによって行われる。信号ＭＯＤＥがローレベルでプログラムルーチンが選択され、信号ＭＯＤＥがハイレベルでイレースルーチンが選択される。第１実施例では、プログラムルーチンのみが用いられる場合を説明しているため、信号ＭＯＤＥがローレベルとされる。ローレベルの信号ＭＯＤＥに応じて、図３において、モード切替部５７のトランジスタＱ４は導通状態、Ｑ３が非導通状態とされる。またセレクタ５８はノードＢを選択する。信号ＭＯＤＥは、ＥＣＣ訂正情報格納部２０から出力される再構成プログラム情報ＲＰＤ（ｉ）における訂正するメモリセルのデータ訂正方向を示す信号ＥＣＣＤおよびプログラム情報修正／ＥＣＣデータ作成回路１２から出力される再構成ＥＣＣコードＲＥＣ（ｉ）の遷移方向を示すＥＣＣ＿ＣＯＭＰにより生成される。
【００５４】
まず、再構成プログラム情報ＲＰＤのメモリセルへのプログラムを説明する。当該プログラムは、データ用プログラム／イレース制御回路３４によって行われる。例として、コラムアドレスＣｏｌ＿Ａｄｄ＝２のメモリセルへのプログラム動作を説明する。
【００５５】
Ｓ７において、データ用プログラム／イレース制御回路３４において、プログラムベリファイにより、書込み対象のメモリセルがすでにプログラムされているか否かを確認する。
【００５６】
具体的には、図３において、信号ＤＬＢがハイレベルの期間に１ビット分のデータＰＢＯＵＴ２がデータ入力部５４に入力される。データＰＢＯＵＴ２は、信号ＤＬＢの立下りでライトアンプラッチ５５にラッチされる。データＰＢＯＵＴは、プログラムする時（データ０）はローレベル、プログラムしない時（データ１）はハイレベルである。よってノードＣはプログラムする時（データ０）はローレベルとされ、プログラムしない時（データ１）はハイレベルとされる。またノードＢには、ノードＣの反転データがラッチされる。今回の例では、プログラムするデータであるコラムアドレスＣｏｌ＿Ａｄｄ＝２のデータＰＢＯＵＴ（データ０）がラッチされるため、ノードＣはローレベル、ノードＢはハイレベルとされる。
【００５７】
Ｓ８において、プログラムベリファイをもとにプログラム実行の有無を確認する。アクセス先のメモリセルのデータが既にプログラム状態（データ０）の場合には、信号ＤＡＶはローレベルとされ、トランジスタＱ２が導通するため、ノードＢはローレベル、ノードＣはハイレベルにリセットされ、プログラム不可とされる。そしてプログラムベリファイにパスした場合（Ｓ８：Ｙｅｓ）であるとして、そのメモリセルへのプログラムをせずに終了する。これにより、すでにプログラムされたメモリセルに対して、更にプログラムストレスが与えられることが防止される。
【００５８】
一方、Ｓ８において、アクセス先のメモリセルのデータがイレース状態（データ１）の場合には、信号ＤＡＶはハイレベルとされ、トランジスタＱ１が導通するため、ノードＢはハイレベル、ノードＣはローレベルとされ、プログラム可能とされる。そしてプログラムベリファイにパスしなかった場合（Ｓ８：Ｎｏ）であるとして、Ｓ９へ進む。ここでは、コラムアドレスＣｏｌ＿Ａｄｄ＝２のメモリセルは、書込み前にはイレース状態のため、信号ＤＡＶはハイレベルとなり、プログラム可能とされるため、Ｓ９へ進む。
【００５９】
Ｓ９において、プログラムベリファイにパスしなかったコラムアドレスＣｏｌ＿Ａｄｄ＝２のメモリセルに対し、プログラムが行われる。
【００６０】
プログラム動作時には、図３において、コマンドレジスタ／ステートコントロール部１３からアンド回路５３へ入力される信号ＰＧＭｐｕｌｓｅによって、プログラムのストレス期間が定められる。アンド回路５３からハイレベルのプログラム信号ＰＧが入力されると、レベルシフタ５１は、プログラム用電圧ＶＰＲＯＧをプログラム時の高電位として有する書込みデータＤＡＴＡＢを出力する。またワード線ＷＬ（ｉ）へ電圧ＶＷＬが印加され、Ｙゲート４に電圧ＶＣＤが印加される。そして書込みデータＤＡＴＡＢを、Ｙゲート４内のコラムデコーダスイッチを介してコラムアドレスＣｏｌ＿Ａｄｄ＝２のビット線へ転送する。プログラム用電圧ＶＰＲＯＧは、ビット線を経由して、メモリセルのドレインへ与えられる。また電圧ＶＣＤによりデータＤＡＴＡＢの電圧降下が防止される。これにより、メモリセルへのプログラムが行われる。
【００６１】
Ｓ９が終了するとＳ７へ進み、再度プログラムベリファイを行う。プログラム対象の全てのメモリセルおよびＥＣＣメモリセルが、プログラムベリファイをパスしない場合には、Ｓ９へ進むことで（Ｓ８：Ｎｏ）、Ｓ７ないしＳ９が繰り返される。
【００６２】
一方、処理が終了している場合（Ｓ８：Ｙｅｓ）にはＳ１０へ進み、プログラム処理を実行したワード線のフラグ情報ＥＣＣ＿Ｆｌａｇが“１”であるか確認する。Ｓ１０およびＳ１１において、フラグ情報ＥＣＣ＿Ｆｌａｇのリセットルーチンが行われる。確認する方法としては、Ｓ３におけるＥＣＣチェックのエラーが検出されたこと示す信号であるＥＣＣ検出信号ＥＣＣ＿Ｄｅｔや、Ｓ５におけるプログラム情報の再構成において訂正メモリセル判定時に訂正アドレス検出回路４２から出力されるＣＰＧＭＡｄｄ＿ＭＡＴＣＨ等により確認することができる。プログラム処理を実行したＷＬのフラグ情報ＥＣＣ＿Ｆｌａｇが“０”である場合（Ｓ１０：Ｎｏ）にはフローを終了する。一方、プログラム処理を実行したワード線のフラグ情報ＥＣＣ＿Ｆｌａｇが“１”である場合（Ｓ１０：Ｙｅｓ）は、Ｓ１１へ進み、ＥＣＣ訂正情報格納部２０に格納される訂正対象ＷＬのフラグ情報ＥＣＣ＿Ｆｌａｇを“０”にリセットしてフローを終了する。ＥＣＣ訂正情報格納部２０から出力されるフラグ情報ＥＣＣ＿Ｆｌａｇを“０”にリセットすることで、コマンドレジスタ／ステートコントロール部１３から出力される信号ＳＴＡＴＵＳを介して、メモリコントローラにＥＣＣチェックが終了したことが報知される。よってメモリコントローラは不揮発性メモリ１への供給電源を落とすことが可能となる。
【００６３】
次に、再構成ＥＣＣコードＲＥＣのＥＣＣメモリセルへのプログラム動作を説明する。当該プログラムは、ＥＣＣコード用プログラム／イレース制御回路３３によって行われる。なおプログラムの具体的態様は、データ用プログラム／イレース制御回路３４における態様と同様であるため、詳細な説明は省略する。
【００６４】
ここで再構成された再構成ＥＣＣコードＲＥＣは、ＥＣＣメモリセルに以前に保持されているＥＣＣコードＥＣとは全く異なるコードとなる。よって再構成ＥＣＣコードＲＥＣをＥＣＣメモリセルに上書きする場合には、例えば、同一ワード線上にＥＣＣコードを保持するための第１領域と第２領域とフラグ領域とを備えるとしてもよい。このとき通常のプログラム動作では第１領域にＥＣＣコードが書込まれる。そしてＥＣＣ訂正が行われると、第２領域にＥＣＣコードを追記すると共に、第２領域を使用する旨をフラグ領域に保持する。また例えば、後述するようにプログラムルーチンとイレースルーチンとの両方を用いることによっても、再構成ＥＣＣコードＲＥＣをＥＣＣメモリセルに上書きすることが可能となる。
【００６５】
なおプログラム動作は、第１実施形態では、ビットラインごとにライトアンプを備え、一斉に一つのワード線の全ビットラインに対しプログラムが行われる形態として説明しているが、ビットライン数よりも少ないライトアンプを時分割的に用いてプログラムを行う形態としてもよい。これらの動作は、プログラム対象となるワード線のメモリセルおよびＥＣＣメモリセルに対し、同時に行われる。また、後述の第１実施形態の第２実施例のイレース動作、第２実施形態、第３実施形態、第４実施形態においても同様である。
【００６６】
第１実施形態の第２実施例に係る不揮発性メモリ１の動作を説明する。第２実施例は、イレース方向（データ０からデータ１）へ訂正する場合の回路である。そして「１ビット単位」でイレースすることができる回路である。第２実施例が適用される不揮発性メモリ１としては、例えばＲＲＡＭ（Resistance Random Access Memory）、ＰＲＡＭ（Phase
Change Random Access Memory）等が挙げられる。
【００６７】
図９を用いて、第２実施例に係る不揮発性メモリ１の動作を説明する。Ｓ６１において、プログラム情報ＰＤの再構成が行われる。なおＳ６１は、第１実施例の図５のＳ１ないしＳ５と同様であるため、詳細な説明は省略する。なお再構成プログラム情報ＲＰＤは一つのワード線分があればよい。
【００６８】
Ｓ６７ないしＳ６９において、プログラムルーチンが行われる。当該プログラムルーチンは第１実施例の図５のＳ７ないしＳ９と同様であるため、詳細な説明は省略する。
【００６９】
Ｓ７１において、プログラムルーチンからイレースルーチンへモードの切り替えが必要か否かが、判断される。切り替えの必要がない場合には（Ｓ７１：Ｎｏ）、Ｓ７５へ進む。一方、切り替えの必要がある場合には（Ｓ７１：Ｙｅｓ）、モードの切り替えが行われる。プログラムからイレースへのモードの切り替えは、コマンドレジスタ／ステートコントロール部１３から出力される信号ＭＯＤＥがローレベルからハイレベルへ遷移することで行われる。具体的には、コマンドレジスタ／ステートコントロール部１３は、ＥＣＣ訂正情報格納部２０から出力される再構成プログラム情報ＲＰＤ（ｉ）において訂正するメモリセルが、イレース方向の訂正を行う旨のハイレベルの信号ＥＣＣＤが入力される。それと共に、再構成ＥＣＣコードＲＥＣ（ｉ）のイレース方向の遷移を示す旨のローレベルの出力信号ＥＣＣ＿ＣＯＭＰが入力されると、ハイレベルの信号ＭＯＤＥを出力する。よってハイレベルの信号ＭＯＤＥに応じて、図３において、モード切替部５７のトランジスタＱ４は非導通状態、Ｑ３が導通状態とされる。またセレクタ５８はノードＡを選択する。
【００７０】
Ｓ７２ないしＳ７４において、イレースルーチンが行われる。Ｓ７２において、データ用プログラム／イレース制御回路３４において、イレースベリファイにより、書込み対象のメモリセルがすでにイレースされているか否かを確認する。
【００７１】
具体的には、図３においてノードＣは、イレースする時（データ１）はハイレベルとされ、イレースしない時（データ０）はローレベルとされる。またノードＢには、ノードＣの反転データがラッチされる。
【００７２】
Ｓ７３において、イレースベリファイをもとにイレース実行の有無を確認する。アクセス先のメモリセルのデータが既にイレース状態（データ１）の場合には、信号ＤＡＶはハイレベルとされ、トランジスタＱ１が導通するため、ノードＢはハイレベル、ノードＣはローレベルにリセットされ、イレース不可とされる。そしてイレースベリファイにパスした場合（Ｓ７３：Ｙｅｓ）であるとして、そのメモリセルへのイレースをせずに終了する。これにより、すでにイレースされたメモリセルに更にイレースストレスが与えられることが防止される。
【００７３】
一方、Ｓ７３において、アクセス先のメモリセルのデータがプログラム状態（データ０）の場合には、信号ＤＡＶはローレベルとされ、トランジスタＱ１が非導通となるため、ノードＢはローレベル、ノードＣはハイレベルとされ、イレース可能とされる。そしてイレースベリファイにパスしなかった場合（Ｓ７３：Ｎｏ）であるとして、Ｓ７４へ進む。
【００７４】
Ｓ７４において、イレースベリファイにパスしなかったメモリセルに対し、イレースが行われる。
【００７５】
Ｓ７４が終了するとＳ７２へ進み、再度イレースベリファイを行う。イレース対象の全てのメモリセルおよびＥＣＣメモリセルが、イレースベリファイをパスしない場合は、Ｓ７４へ進むことで（Ｓ７３：Ｎｏ）、Ｓ７２ないしＳ７４が繰り返される。
【００７６】
一方、処理が終了している場合（Ｓ７３：Ｙｅｓ）にはＳ７５へ進み、プログラム処理を実行したワード線のフラグ情報ＥＣＣ＿Ｆｌａｇが“１”であるか確認する。Ｓ７５およびＳ７６において、フラグ情報ＥＣＣ＿Ｆｌａｇのリセットルーチンが行われる。当該フラグ情報ＥＣＣ＿Ｆｌａｇリセットルーチンは、第１実施例の図５のＳ１０およびＳ１１と同様であるため、詳細な説明は省略する。ＥＣＣ訂正情報格納部２０から出力されるフラグ情報ＥＣＣ＿Ｆｌａｇを“０”にリセットすることで、コマンドレジスタ／ステートコントロール部１３から出力される信号ＳＴＡＴＵＳを介して、メモリコントローラにＥＣＣチェックが終了したことが報知される。
【００７７】
このように、第２実施例の基本動作としては、Ｓ６７ないしＳ６９においてプログラム動作を先に行った後に、Ｓ７２ないしＳ７４においてイレース動作を行う。これにより外部からのプログラム対象のワード線に対して優先的にプログラム動作を行うことが可能となる。なお、イレース動作を先に行った後にプログラム動作を行っても、本発明の効果が得られることは言うまでもない。
【００７８】
以上より第２実施例に係る不揮発性メモリ１では、１ビット単位でイレースが可能であることから、外部から上書きデータとして入力されるプログラム情報ＰＤにイレースデータ（データ１）が含まれている場合にも対応することが可能となる。よってプログラム情報ＰＤの自由度を高めることができる。ただし、この場合はコマンドレジスタ／ステートコントロール部１３から出力される信号ＭＯＤＥは、ＥＣＣ訂正情報格納部２０から出力される再構成プログラム情報ＲＰＤ（ｉ）における訂正するメモリセルのデータ訂正方向を示す信号ＥＣＣＤおよびプログラム情報修正／ＥＣＣデータ作成回路１２から出力される再構成ＥＣＣコードＲＥＣ（ｉ）の遷移方向を示すＥＣＣ＿ＣＯＭＰだけでなく、プログラム情報ＰＤの内容を含めた上でのプログラムルーチンとイレースルーチンの切り替えが必要となる。なお、上書きを可能とする場合は、プログラム情報修正回路３１は上書きを想定していない回路のため、論理変更が必要となる。（ただし、外部から入力される上書きデータが、前回プログラムしたPGMデータの内容を保持している場合は除く。）
【００７９】
第１実施形態の第３実施例に係る不揮発性メモリ１の動作を説明する。第３実施例は、プログラム方向（データ１からデータ０）の訂正に加え、イレース方向（データ０からデータ１）へ訂正する場合の回路である。そして「セクタ単位」でイレースすることができる回路である。
【００８０】
図１０および図１１を用いて、第３実施例に係る不揮発性メモリ１の動作を説明する。Ｓ８１において、プログラム情報ＰＤの再構成が行われる。なおＳ８１は、第１実施例の図５のＳ１ないしＳ５と同様であるため、詳細な説明は省略する。なお第３実施例ではセクタ単位でイレースするため、セクタ内の全ワード線分の再構成プログラム情報ＲＰＤを作成・保持する必要がある。よって、第１プログラムバッファ４１および第２プログラムバッファ４３は、セクタ内の全ワード線分のデータを保持できるレジスタ容量を有している。
【００８１】
Ｓ８７ないしＳ８９において、イレースルーチンが行われる。これにより、セクタ内の全メモリセルおよびＥＣＣメモリセルがイレースされる。具体的な動作は第２実施例の図９のＳ７２ないしＳ７４と同様であるため、詳細な説明は省略する。
【００８２】
Ｓ９１において、イレースルーチンからプログラムルーチンへモードの切り替えが行われる。
【００８３】
Ｓ９２ないしＳ９４、Ｓ９７およびＳ９８において、プログラムルーチンが行われる。セクタ単位でイレースされているため、セクタ内の全ワード線に対してプログラムが必要となる。Ｓ９２において、書込み対象のメモリセルがすでにプログラムされているか否かを確認する。Ｓ９３において、プログラムベリファイにパスしたか否かが判断される。プログラムベリファイにパスした場合（Ｓ９３：Ｙｅｓ）にはＳ９５へ進む。プログラムベリファイにパスしなかった場合（Ｓ９３：Ｎｏ）にはＳ９４へ進む。
【００８４】
処理が終了していない場合（Ｓ９３：Ｎｏ）には、Ｓ９４でプログラムを実行した上で、Ｓ９２へ戻り、再度プログラムベリファイを行う。プログラム対象の全てのメモリセルおよびＥＣＣメモリセルが、プログラムベリファイをパスしない場合は、Ｓ９４へ進むことで（Ｓ９３：Ｎｏ）、Ｓ９３ないしＳ９４が繰り返される。
【００８５】
一方、処理が終了した場合（Ｓ９３：Ｙｅｓ）には、Ｓ９５へ進み、プログラム処理を実行したＷＬのフラグ情報ＥＣＣ＿Ｆｌａｇが“１”であるか確認する。Ｓ９５およびＳ９６において、フラグ情報ＥＣＣ＿Ｆｌａｇのリセットルーチンが行われる。当該フラグ情報ＥＣＣ＿Ｆｌａｇリセットルーチンは、第１実施例の図５のＳ１０およびＳ１１と同様であるため、詳細な説明は省略する。ＥＣＣ訂正情報格納部２０から出力されるフラグ情報ＥＣＣ＿Ｆｌａｇを“０”にリセットすることで、コマンドレジスタ／ステートコントロール部１３から出力される信号ＳＴＡＴＵＳを介して、メモリコントローラにＥＣＣチェックが終了したことが報知される。Ｓ９７においてセクタ内の全てのワード線について処理が終了したか否かが判断され、処理が終了していない場合（Ｓ９７：Ｎｏ）には、Ｓ９８でワード線アドレスが一つインクリメントされた上でＳ９２へ戻る。一方、処理が終了した場合（Ｓ９７：Ｙｅｓ）にはフローを終了する。
【００８６】
このように、第３実施例の基本動作としては、Ｓ８７ないしＳ８９においてイレース動作を先に行った後に、Ｓ９２ないしＳ９４、Ｓ９７およびＳ９８においてプログラム動作を行う。このときプログラム動作にかかる時間とイレース動作にかかる時間とが略同等であれば、第２実施例と同様の効果を得ることが可能となる。プログラム時間とイレース時間とが同等であるメモリとしては、例えばプログラムとイレースとをＦＮ−トンネリングで行う原理のメモリ、ＲＲＡＭ、ＰＲＡＭ等が挙げられる。
【００８７】
これにより第３実施例に係る不揮発性メモリ１では、セクタ単位でイレースが可能であることから、外部から上書きデータとして入力されるプログラム情報ＰＤにイレースデータ（データ１）が含まれている場合にも対応することが可能となる。よってプログラム情報ＰＤの自由度を高めることができる。
【００８８】
以上より得られる、第１実施形態の第１実施例ないし第３実施例に係る不揮発性メモリ１の効果を説明する。従来の不揮発性メモリにおいては、起動時またはアイドル時に書き込まれたデータ自身を訂正するため、訂正結果を書き込むための専用の時間が必要となる。よってビジー期間が発生していた。しかし第１実施形態に係る不揮発性メモリ１では、外部からのプログラム対象のデータを書き込む際に必ず必要とされる書込み時間に隠れて、訂正データの書込みをするため、訂正を書き込むための専用の時間が排除できる。よってビジー期間を作らないため、外部アクセス速度を高速化できる。
【００８９】
また従来の不揮発性メモリにおいては、読出し時のたびに読み出したデータにＥＣＣ処理を掛けた上で外部端子へ出力するため、外部アクセスが低下していた。しかし第１実施形態に係る不揮発性メモリ１では、書き込まれたデータ自身を訂正するので、読出し時のたびに読み出したデータにＥＣＣ処理を掛ける必要がない。読出しアクセスに含まれるＥＣＣ処理が排除できる。よって外部アクセス速度を高速化できる。そして、書き込まれたデータ自身が訂正されるため、リテンション不良等の影響を排除することができる。よって不揮発性メモリ１の信頼性を高めることができる。
【００９０】
本発明の第２実施形態を説明する。第２実施形態は、自バンクのワード線への外部プログラムの時、その自バンク内のすべてのワード線に関わるメモリセルのＥＣＣ処理と訂正書き込み処理を組み込む形態である。以下、第１実施形態に係る不揮発性メモリ１（図１）の図面を用いて説明する。第２実施形態においても、第１実施形態同様、１ワード線あたり単数ビット訂正する場合を説明する。
【００９１】
外部の不図示のメモリコントローラから、バンクＢＫ０に対してプログラム動作を行う旨の指示がされることで、図１２および図１３に示すフローが開始される。本実施形態では、例として、外部からのプログラム対象として、バンクアドレスＢＡ＿Ａｄｄ＝０、ワード線アドレスＷＬ＿Ａｄｄ＝ｉ、コラムアドレスＣｏｌ＿Ａｄｄ＝０が選択された場合を説明する。
【００９２】
ＥＣＣチェックでは、まずＳ１２１において、入力されたプログラムアドレスＰＧＭ＿Ａｄｄより、バンクＢＫ０内のワード線ＷＬ（ｉ）のメモリセルおよびＥＣＣメモリセルのリードを行う。
【００９３】
次にＳ１２２において、ＥＣＣ検出回路１９において、ＥＣＣメモリセルから読出したＥＣＣコードＥＣ（ｉ）を用いて、メモリセルから読み出したデータＭＤ（ｉ）に対してＥＣＣチェックを行う。なおＥＣＣチェックは、一般的なＥＣＣチェック方法により行えばよいため、ここでは説明を省略する。第２実施形態においても第１実施形態同様に、ＥＣＣ検出回路１９はＥＣＣチェックによりエラーを検出した場合、エラーを検出したことを示す信号であるＥＣＣ検出信号ＥＣＣ＿Ｄｅｔをコマンドレジスタ／ステートコントロール部１３へ出力する。
【００９４】
ＥＣＣチェックでエラーが検出されない場合（Ｓ１２３：Ｎｏ）は、Ｓ１２５へ進む。一方、ＥＣＣチェックでエラーが検出された場合（Ｓ１２３：Ｙｅｓ）は、Ｓ１２４へ進み、訂正情報ＣＤ（ＷＬ、訂正データ等）をＥＣＣ訂正情報格納部２０に格納する。 
【００９５】
ここで訂正情報ＣＤは、図１４に示すように、バンクＢＫ０内のｋ＋１本のワード線の各々に対応して、ｋ＋１本分が備えられる不図示のレジスタが必要となる。尚、単数ビット訂正の場合は、ｋ＋１本分のレジスタ容量でよいが、複数ビット訂正可能な場合は、１ワード線あたりの訂正ビット数×（ｋ＋１）分のレジスタ容量が必要となる。
【００９６】
Ｓ１２５において、バンクＢＫ０内の全てのワード線について処理が終了したか否かが判断される。処理が終了している場合（Ｓ１２５：Ｙｅｓ）には、Ｓ１３１へ進む。一方、処理が終了していない場合（Ｓ１２５：Ｎｏ）には、Ｓ１２６へ進み、ワード線アドレスが一つインクリメントされた上でＳ１２７へ進む。そしてＳ１２７において外部からのプログラム対象外のワード線上のメモリセルおよびＥＣＣメモリセルのリードが行われた上で、Ｓ１２２へ戻る。
【００９７】
以下、全てのワード線についてＳ１２２ないしＳ１２７が繰り返されることで、バンクＢＫ０内の全てのワード線上のメモリセルおよびＥＣＣメモリセルについて読出しおよびＥＣＣチェックを行うことができる。そして、バンクＢＫ０内の全てのワード線に関する訂正情報ＣＤを、ＥＣＣ訂正情報格納部２０に保持することができる。
【００９８】
なお、このリード動作にかかる時間は、プログラム動作に比して無視できる程度に小さい。よってプログラム動作に先立ってバンクＢＫ０内の全てのワード線についてのリード動作を挿入しても、不揮発性メモリ１の動作速度に与える影響は無視できる程度に小さなものである。
【００９９】
次にＳ１３１において、１ワード線についてのプログラム情報ＰＤの再構成が行われる。なお再構成の方法は第１実施形態と同様であるため、ここでは詳細な説明は省略する。
【０１００】
Ｓ１３２ないしＳ１３４において、プログラムルーチンが行われる。当該プログラムルーチンは第１実施例の図５のＳ７ないしＳ９と同様であるため、詳細な説明は省略する。一方、処理が終了した場合（Ｓ１３３：Ｙｅｓ）には、Ｓ１３５へ進み、プログラム処理を実行したワード線のフラグ情報ＥＣＣ＿Ｆｌａｇが“１”であるかを確認する。Ｓ１３５およびＳ１３６において、フラグ情報ＥＣＣ＿Ｆｌａｇのリセットルーチンが行われる。当該フラグ情報ＥＣＣ＿Ｆｌａｇリセットルーチンは、第１実施例の図５のＳ１０およびＳ１１と同様であるため、詳細な説明は省略する。ＥＣＣ訂正情報格納部２０に格納されている訂正情報ＣＤのフラグ情報ＥＣＣ＿Ｆｌａｇを全て“０”にリセットすることで、コマンドレジスタ／ステートコントロール部１３から出力される信号ＳＴＡＴＵＳを介して、メモリコントローラにＥＣＣチェックが終了したことが報知される。なお、プログラムルーチンの最初のプログラムは、外部からのプログラム対象アドレスを優先し、外部からのプログラム対象アドレスからプログラム動作を行うものとする。メモリデバイス外部付加的要因によって、プログラム環境が変化しても、顧客の指定したプログラム対象アドレスが先に書き込まれることで信頼性が保証される。
【０１０１】
Ｓ１３７において、バンクＢＫ０内の全てのワード線についてプログラムが終了したか否かが判断される。全てのワード線についてプログラムが終了している場合（Ｓ１３７：Ｙｅｓ）には、フローを終了する。一方、全てのワード線についてプログラムが終了していない場合（Ｓ１３７：Ｎｏ）には、Ｓ１８３へ進み、ワード線アドレスを１インクリメントしてＳ１３９に進み、ＥＣＣ訂正情報格納部２０に格納された訂正アドレスＥＣＣ＿Ａｄｄに格納される訂正ワード線アドレスＣ＿ＷＬ＿Ａｄｄと比較し、訂正対象ＷＬの有無の確認を行う。一致する場合（Ｓ１３８：Ｙｅｓ）はＳ１３１へ戻り、訂正対象ＷＬの訂正プログラム処理を行う。一致しない場合（Ｓ１３８：Ｎｏ）は、Ｓ１３７へ戻り、ワード線アドレスを１インクリメントしてＳ１３８に進み、再度確認を行い、バンク内の全てのワード線について訂正プログラムが終了するまで、Ｓ１３１ないしＳ１３４およびＳ１３８、１３９を繰り返す。
【０１０２】
以上より図１２および図１３のフローでは、外部からのプログラム対象として選択されたワード線以外の全てのワード線について、まとめて、ＥＣＣチェックおよびプログラムが行われる。すなわち、（１）全ワード線のリードを行った後に、（２）外部からのプログラム対象の１ワード線に対しプログラムが行われ、（３）最後に外部からのプログラム対象外の複数ワード線にプログラムが行われる。なお、本フローにおいては、外部からのプログラム対象アドレスのプログラムを行った後、訂正対象ＷＬの検出を行い、一致した場合のみプログラム動作を行うことでプログラムルーチンの処理時間を短縮している。プログラムルーチンの処理時間に余裕がある場合は、本フローのように訂正対象ＷＬの検出を行わず、全ワード線ごとにプログラム動作を行ってもよい。
【０１０３】
なお、第２実施形態の動作は図１２および図１３に示す動作に限られない。図１５のフローに示す動作でもよいことは言うまでもない。Ｓ１４０において、外部からのプログラム対象の一つのワード線に対して、リードおよび訂正データのプログラムが行われる。なお詳細なフローは、第１実施形態の図５におけるＳ１ないしＳ１０と同様であるため、詳細な説明は省略する。
【０１０４】
次にＳ１４１へ進み、バンクＢＫ０内の複数のワード線のうちから、外部からのプログラム対象外の一つのワード線のメモリセルおよびＥＣＣメモリセルが、リードされる。
【０１０５】
次にＳ１４２においてＥＣＣチェックが行われる。なおこのとき、読み出したデータを保持するレジスタは、一つのワード線分で足りる。
【０１０６】
ＥＣＣチェックでエラーが検出された場合（Ｓ１４３：Ｙｅｓ）は、Ｓ１４４へ進み、修正プログラム処理を行った上で、Ｓ１４６へ進む。一方、ＥＣＣチェックでエラーが検出されない場合（Ｓ１４３：Ｎｏ）は、Ｓ１４５へ進む。Ｓ１４４の修正プログラムは、第１実施形態の図５におけるＳ４ないしＳ１１と同様であるため、詳細な説明は省略する。
【０１０７】
Ｓ１４５では、バンクＢＫ０内の全てのワード線について処理が終了したか否かが判断される。処理が終了している場合（Ｓ１４５：Ｙｅｓ）には、フローを終了する。一方、処理が終了していない場合（Ｓ１４５：Ｎｏ）には、Ｓ１４６へ進む。Ｓ１４６では、ワード線アドレスが、一つインクリメントされた上でＳ１４１へ戻る。
【０１０８】
以上より、図１５のフローでは、外部からのプログラム対象として選択された一つのワード線以外のワード線について、１本ずつ、ＥＣＣチェックおよびプログラムが行われる。すなわち、（１）外部からのプログラム対象の一つのワード線に対してリードおよび訂正データのプログラムを行った後に、（２）外部からのプログラム対象外の複数ワード線のリードを行い、（３）最後に外部からのプログラム対象外の複数ワード線にプログラムが行われる。これにより、一つのワード線ごとにＥＣＣ検証およびデータ訂正を行うため、ＥＣＣ訂正情報格納部２０のレジスタの容量を大幅に削減することが可能となる。
【０１０９】
以上より得られる、第２実施形態に係る不揮発性メモリ１の効果を説明する。従来の不揮発性メモリにおいては、アイドル時に不揮発性メモリがメモリコントローラからのコントロールを受けずに自発的にデータ訂正を行う場合、不揮発性メモリはその訂正期間中はビジーとなる。しかしメモリコントローラのシステムでは不揮発性メモリがビジー状態であることを知ることができない。そしてビジー状態の期間中にメモリコントローラから不揮発性メモリへアクセスコマンドが発行されると、メモリシステムはハングする。しかし第２実施形態に係る不揮発性メモリ１では、外部からのアクセス要求に応じて行われるプログラム期間に付加する形で、アクセス対象外のワード線上のデータもＥＣＣ処理するものである。すわなち、メモリコントローラからの指令に応じて訂正を行うため、メモリコントローラのシステムは不揮発性メモリがビジー状態であることを認識することができる。よってメモリコントローラは、訂正が終了するまでは不揮発性メモリに対して新たなアクセスコマンドを発行することを待つことができる。これにより、メモリシステムのハングを防止する事が可能となる。
【０１１０】
また外部からのアクセス対象のワード線については、外部からのプログラム対象のデータを書き込む際に必ず必要とされる書込み時間に隠れて、訂正データの書込みをするため、外部アクセス速度を高速化することができる。
【０１１１】
本発明の第３実施形態を説明する。第３実施形態は、自バンクの外部プログラム対象ワード線へのプログラムの際、外部プログラム対象ワード線（外部プログラムアドレス）と同一アドレスである他バンクに存在するワード線（バンクアドレスが異なる前記外部プログラムアドレスと同一なアドレス）に対して、メモリセルのＥＣＣ処理と訂正書き込み処理を組み込む形態である。ここで外部プログラム対象ワード線を有するバンクを自バンク、外部プログラム対象ワード線を有さないバンクを他バンクと定義している。なお不揮発性メモリの構成は第１実施形態と同様であるため、詳細な説明は省略する。
【０１１２】
図１６および図１７を用いて、第３実施形態に係る不揮発性メモリの動作を説明する。本実施形態では、例として図１６（ａ）に示すように、プログラムアドレスＰＧＭ＿Ａｄｄとして、バンクアドレスＢＡ＿Ａｄｄ＝０、ワード線アドレスＷＬ＿Ａｄｄ＝ｉ、コラムアドレスＣｏｌ＿Ａｄｄ０が入力され、プログラム情報ＰＤ＝０が入力される場合を説明する。外部の不図示のメモリコントローラから、バンクＢＫ０に対してプログラム動作を行う旨の指示がされることで、図１７に示すフローが開始される。
【０１１３】
図１７のＳ１５１において、プログラムベリファイにより、書込み対象のメモリセルがすでにプログラムされているか否かを確認する。プログラムベリファイは、自バンク（バンクＢＫ０）の、選択ワード線（ワード線ＷＬ（ｉ））上のメモリセルに対して行われる。Ｓ１５２において、プログラムベリファイにパスしなかった場合（Ｓ１５２：Ｎｏ）にはＳ１５３へ進む。Ｓ１５３において、プログラムベリファイにパスしなかったメモリセルに対し、再度プログラムが行われる。Ｓ１５３が終了するとＳ１５１へ戻り、再度プログラムベリファイを行う。プログラム対象の全てのメモリセルおよびＥＣＣメモリセルがプログラムベリファイをパスしない場合は、Ｓ１５３へ進むことで（Ｓ１５２：Ｎｏ）、Ｓ１５１ないしＳ１５３が繰り返される。一方、処理が終了している場合（Ｓ１５２：Ｙｅｓ）にはＳ１５７へ進む。本実施形態では、バンクＢＫ０のデータＭＤ（ｉ）に、プログラム情報ＰＤ（ｉ）が上書きされる（図１６、矢印Ａ１１）。
【０１１４】
またＳ１５１ないしＳ１５３の動作と並行して、Ｓ１５５において、自バンクの外部プログラム対象ワード線と同一ワード線アドレスを有して他バンクに存在するワード線に対して、メモリセルのＥＣＣチェックが行われる。このとき、不揮発性メモリで一般的な技術であるＳＯ（simultaneous Operation）機能が利用される。これにより、バンクＢＫ１のワード線ＷＬ（ｉ）についての、データＭＤ（ｉ）、ＥＣＣコードＥＣ（ｉ）を取得し、ＥＣＣコードＥＣ（ｉ）よりＥＣＣチェックでＥＣＣチェックデータＥＣＤ（ｉ）を生成する。本実施形態では、データＭＤ（ｉ）とＥＣＣチェックデータＥＣＤ（ｉ）との比較により、バンクＢＫ１のデータＭＤ（ｉ）のコラムアドレスＣｏｌ＿Ａｄｄ＝２のメモリセルにおいて、本来０であるデータが１に変化してしまっていることが判明する（図１６、矢印Ａ１２）。
【０１１５】
Ｓ１５６において、ＥＣＣ修正が必要か否かが、判断される。修正が必要でないと判断（Ｓ１５６：Ｎｏ）される場合には、フローを終了する。一方、修正が必要であると判断（Ｓ１５６：Ｙｅｓ）されると、Ｓ１５７へ進む。
【０１１６】
Ｓ１５７では、訂正データがプログラムされる。このとき、プログラム用のプログラム電圧生成部１４が、バンクＢＫ０とＢＫ１とで共通に１つしかない（共有する）場合には、Ｓ１５３でのプログラム完了を待って、Ｓ１５７でのプログラムが行われる。なお、バンクＢＫ０とＢＫ１とが各々にプログラム電圧生成部１４を備える場合には、Ｓ１５３とＳ１５７とを、メモリ技術で一般的なバンク同時アクセス技術を応用して同時に行うことができる。本実施形態では、バンクＢＫ１のデータＭＤ（ｉ）のコラムアドレスＣｏｌ＿Ａｄｄ＝２のメモリセルにおいて、データ１がデータ０へ修正される（図１６、矢印Ａ１３）。Ｓ１５７の修正プログラムの実行は、第１実施形態の図５におけるＳ４ないしＳ１１と同様であるため、詳細な説明は省略する。
【０１１７】
以上より第３実施形態では、ＳＯ機能やバンク同時アクセス技術を用いることでバンクごとにプログラム処理やＥＣＣ処理を並行処理することができる。よって自バンクでのプログラム期間中に、他バンクにおいてＥＣＣ処理を実行させることができるため、他バンクの外部リードアクセス時にＥＣＣ処理を組み込まなくても良い設計ができる。これにより、アクセスの高速化を図ることができる。尚、メモリコントローラが自バンクのアクセス中に他バンクのビジーを好まない場合には、後述のモードレジスタ等の設定値の変更によって、その都度、他バンクのＥＣＣ処理を非活性にすることができる。
【０１１８】
なお第３実施形態の動作は、バンク毎に並列処理制御する場合に限られない。ＳＯ機能を使用しない場合などバンク毎に並列処理しない場合には、バンク間でシリアル処理を行うことも可能であることは言うまでもない。シリアル処理の例としては、自バンクでのプログラム処理が終了次第、他バンクの処理へ移行し、他バンクでのＥＣＣチェックおよび訂正プログラム処理を行うことが挙げられる。
【０１１９】
これにより、自バンクでの外部プログラム対象のワード線アドレス（ＷＬ）情報を、他バンクでも利用できる効果が得られる。具体的には、アドレスバッファをバンク間で共有できるため、回路規模の縮小化を図ることが可能となる。
【０１２０】
本発明の第４実施形態を説明する。第４実施形態は、自バンクの外部プログラム対象ワード線へのプログラムの際、他バンク内のすべてのワード線に関わるメモリセルのＥＣＣ処理と訂正書き込み処理を組み込む形態である。ここで外部プログラム対象ワード線を有するバンクを自バンク、外部プログラム対象ワード線を有さないバンクを他バンクと定義している。なお不揮発性メモリの構成は第１実施形態と同様であるため、詳細な説明は省略する。
【０１２１】
外部の不図示のメモリコントローラから、バンクＢＫ０に対してプログラム動作を行う旨の指示がされることで、図１８に示すフローが開始される。
【０１２２】
図１８のＳ１６１ないしＳ１６３において、自バンクの外部プログラム対象ワード線へのプログラムが行われる。なおこれらのフローは、第３実施例（図１７）のＳ１５１ないしＳ１５３と同様であるため、詳細な説明は省略する。
【０１２３】
またＳ１６１ないしＳ１６３の動作と並行して、Ｓ１６５において、他バンクに存在する全ワード線に対して、メモリセルのＥＣＣチェックが行われる。このとき、ＳＯ機能が利用される。
【０１２４】
Ｓ１６６においてＥＣＣチェックが行われる。そしてＳ１６７において、ＥＣＣ修正が必要か否かが、判断される。修正が必要であると判断（Ｓ１６７：Ｙｅｓ）されると、Ｓ１７０へ進む。一方、修正が必要でないと判断（Ｓ１６７：Ｎｏ）される場合には、Ｓ１６８へ進む。
【０１２５】
Ｓ１６８において、他バンク内の全てのワード線についてＥＣＣチェックが終了したか否かが判断される。全てのワード線についてプログラムが終了している場合（Ｓ１６８：Ｙｅｓ）には、フローを終了する。一方、全てのワード線についてプログラムが終了していない場合（Ｓ１６８：Ｎｏ）には、Ｓ１６９へ進み、ワード線アドレスを１インクリメントした上でＳ１６５へ戻る。これにより、他バンク内の全ワード線についてＥＣＣチェックが行われる。
【０１２６】
Ｓ１７０では、訂正データがプログラムされる。このとき、プログラム用のプログラム電圧生成部１４がバンク自バンクと他バンクとで共通に１つしかない（共有する）場合には、Ｓ１６３でのプログラム完了を待って、Ｓ１７０でのプログラムが行われる。なお、自バンクと他バンクとが各々にプログラム電圧生成部１４を備える場合には、Ｓ１６３とＳ１７０とを、メモリ技術で一般的なバンク同時アクセス技術を応用して同時に行うことができる。Ｓ１７０の修正プログラムの実行は、第１実施形態の図５におけるＳ４ないしＳ１１と同様であるため、詳細な説明は省略する。
【０１２７】
以上より第４実施形態では、自バンクでのプログラム期間中に、他バンク内の全ワード線においてＥＣＣ処理を実行させることができるため、他バンクの外部リードアクセス時にＥＣＣ処理を組み込まなくてもよい設計ができる。これにより、アクセスの高速化を図ることができる。
【０１２８】
またメモリコントローラからの指令に応じて他バンクの全ワード線についてＥＣＣ処理訂正を行うため、メモリコントローラのシステムは不揮発性メモリがビジー状態であることを認識することができる。よってメモリコントローラは、訂正が終了するまでは不揮発性メモリに対して新たなアクセスコマンドを発行することを待つことができるため、メモリシステムのハングを防止する事が可能となる。尚、メモリコントローラが自バンクのアクセス中に他バンクのビジーを好まない場合には、後述のモードレジスタ等の設定値の変更によって、その都度、他バンクのＥＣＣ処理を非活性にすることができる。
【０１２９】
尚、本発明は前記実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々の改良、変形が可能であることは言うまでもない。この発明が適用できる不揮発性記憶装置は、不揮発性メモリセルの構造／原理、メモリセルアレイの構成などに限定されることなく利用できる。図１９に示す不揮発性メモリ１ａのように、拡張モード設定レジスタ２１を備える形態としてもよい。拡張モード設定レジスタ２１には、コマンドＣＭＤおよびプログラムアドレスＰＧＭ＿Ａｄｄが入力され、ＥＣＣ活性信号ＥＣＣ＿ＥＮが出力される。ユーザは、外部からのプログラム対象のデータを書き込む際にＥＣＣチェックを行うか否かの設定を拡張モード設定レジスタ２１に保持することができる。当該設定は、コマンドＣＭＤおよびプログラムアドレスＰＧＭ＿Ａｄｄを用いて設定される。ＥＣＣチェックを行う場合には、ハイレベルのＥＣＣ活性信号ＥＣＣ＿ＥＮがコマンドレジスタ／ステートコントロール部１３に入力され、コマンドレジスタ／ステートコントロール部１３はＥＣＣチェックを行うように不揮発性メモリ１ａをコントロールする。一方、ＥＣＣチェックを行わない場合には、ローレベルのＥＣＣ活性信号ＥＣＣ＿ＥＮがコマンドレジスタ／ステートコントロール部１３に入力され、コマンドレジスタ／ステートコントロール部１３はＥＣＣチェックを行わないように不揮発性メモリ１ａをコントロールする。これにより、ユーザはＥＣＣ処理の活性／非活性を、その都度選択することが可能となる。
【０１３０】
なお本実施形態の訂正情報ＣＤでは、図６に示すように、一つのワード線あたり単数ビット訂正する場合を例示した。しかしこの形態に限られない。一つのワード線あたり複数ビット訂正する形態も可能であることは言うまでもない。図２０に、一つのワード線内のｊビット分のメモリセルについて訂正することが可能な場合の訂正情報ＣＤａを示す。訂正情報ＣＤａは、一つのコラムアドレスあたり１ビットずつ訂正が検出されることを想定し、訂正コラムアドレスＣ＿Ｃｏｌ＿Ａｄｄ、訂正内容ＣＣ、フラグ情報ＥＣＣ＿ｆｌａｇをそれぞれ訂正するビット数（ｊ個）備える。そしてＥＣＣ訂正情報格納部２０は、ｊ個のフラグ情報ＥＣＣ＿ｆｌａｇのオア（ＯＲ）出力をメモリコントローラへ出力する。よって、ＥＣＣ訂正情報格納部２０は、全ての訂正内容がプログラムされるまでメモリコントローラへハイレベルの信号を出力し続ける。これにより、一つのワード線あたりｊビット数分のデータを訂正することが可能となる。
【０１３１】
なお、プログラム情報ＰＤは書込みデータの一例、訂正情報ＣＤは訂正データの一例、ＥＣＣ検出回路１９はＥＣＣ処理回路の一例、プログラム情報修正／ＥＣＣデータ作成回路１２は書き込み制御回路の一例、ＥＣＣ訂正情報格納部２０は訂正情報格納部の一例、第１実施形態における不揮発性メモリの回路図１は第１実施形態を含む不揮発性メモリ１の一例、拡張モード設定レジスタ２１を備える不揮発性メモリの回路図１ａは拡張モード設定レジスタ２１を備える不揮発性メモリの一例、データ用プログラム／イレース制御回路３４の内部回路図はデータ用プログラム／イレース制御回路３４の内部回路図の一例、再構成プログラム情報ＲＰＤは再構築書込みデータのそれぞれ一例である。
【図面の簡単な説明】
【０１３２】
【図１】第１実施形態に係る不揮発性メモリの回路図
【図２】プログラム情報修正およびプログラム情報修正／ＥＣＣデータ作成回路１２の内部回路図
【図３】データ用プログラム／イレース制御回路３４の内部回路図
【図４】第１実施形態に係る不揮発性メモリ１の動作の説明図
【図５】第１実施形態の第１実施例に係る不揮発性メモリ１の動作を示すフローチャート
【図６】第１実施形態に係る訂正情報ＣＤを示す図
【図７】プログラム情報の再構成の動作を示すフローチャート
【図８】プログラム情報修正回路３１の真理値表を示す図
【図９】第１実施形態の第２実施例に係る不揮発性メモリの動作を示すフローチャート
【図１０】第１実施形態の第３実施例に係る不揮発性メモリの動作を示すフローチャート（その１）
【図１１】第１実施形態の第３実施例に係る不揮発性メモリの動作を示すフローチャート（その２）
【図１２】第２実施形態に係る不揮発性メモリの動作を示すフローチャート（その１）
【図１３】第２実施形態に係る不揮発性メモリの動作を示すフローチャート（その２）
【図１４】第２実施形態に係る訂正情報ＣＤを示す図
【図１５】第２実施形態に係る不揮発性メモリの動作を示すフローチャート（その３）
【図１６】第３実施形態に係る不揮発性メモリの動作の説明図
【図１７】第３実施形態に係る不揮発性メモリの動作を示すフローチャート
【図１８】第４実施形態に係る不揮発性メモリの動作を示すフローチャート
【図１９】拡張モード設定レジスタ２１を備える不揮発性メモリの回路図
【図２０】訂正情報ＣＤａを示す図
【符号の説明】
【０１３３】
１  不揮発性メモリ
２  メモリセルアレイ
３  ＥＣＣメモリセルアレイ
１２  プログラム情報修正／ＥＣＣデータ作成回路
１３  ステートコントロール部
１９  ＥＣＣ検出回路
２０  ＥＣＣ訂正情報格納部
ＰＤ  プログラム情報
ＣＤ  訂正情報
ＭＤ  データ
ＲＰＤ  再構成プログラム情報 
【手続補正２】
【補正対象書類名】図面
【補正対象項目名】図９
【補正方法】変更
【補正の内容】
【図９】
2009223941.tif 000025