(57)【要約】【課題】  書換可能な不揮発性メモリは、データ消去(データの状態を１にする)及び書込(データの状態を０にする)を繰返す事によりメモリセルにストレスがかかり、書換回数が多くなるとメモリの信頼性が低下するという問題があった。【解決手段】  データ書換の際に、既に書込まれている既書込データと新規に書込を行うデータを比較し、既書込データを消去をせずに新規書込データを表す事が可能か否かブロック毎に判定し、消去が必要な場合だけ消去する事により、消去回数の削減を図る。データ書込の際には、新規書込データの各ビットを反転して求めた新規書込反転データと新規書込データとのうち、書換ビット数が少なくなる方のデータを書込むことで、メモリセルの書込回数削減を図る。【選択図】  図１
2005216455.tif 000002
【特許請求の範囲】
【請求項１】
それぞれ書込状態と消去状態とで異なる１ビットデータを記憶する複数のメモリセルを有するメモリセルアレイを備え、前記メモリセルアレイを複数ビットのデータを記憶するブロックに分割して、前記ブロック単位で前記メモリセルにデータの書込みを行う不揮発性半導体メモリであって、
前記ブロックごとに新規データを記憶させる際、
前記ブロックに記憶されている既存データと前記新規データとを比較し、前記ブロックの既存データを構成する複数の前記メモリセルのうちいずれかのメモリセルを書込状態から消去状態に変更することなく前記新規データを書込むことが可能であるか否かを判定する新規データ判定処理と、
前記ブロックに記憶されている既存データと前記新規データに対し所定の演算処理を施して生成される加工データとを比較し、前記ブロックの既存データを構成する複数の前記メモリセルのうちいずれかのメモリセルを書込状態から消去状態に変更することなく前記加工データを書込むことが可能であるか否かを判定する加工データ判定処理と、
前記新規データ判定処理と前記加工データ判定処理の両方の判定結果が不可能であるときに前記ブロックの既存データを構成する全てのメモリセルを消去状態にするデータ消去処理と、
前記新規データ判定処理と前記加工データ判定処理のうち前記新規データ判定処理のみの判定結果が可能であるときは前記ブロックに前記新規データを書込み、前記加工データ判定処理のみの判定結果が可能であるときは前記ブロックに前記加工データを書込み、前記新規データ判定処理と前記加工データ判定処理の両方の判定結果が可能であるとき、または前記消去処理後に、前記ブロックに前記新規データまたは前記加工データを書込むデータ書込処理とを行うことを特徴とする不揮発性半導体メモリ。
【請求項２】
前記新規データ判定処理と前記加工データ判定処理の両方の判定結果が可能であるときに行う前記データ書込処理は、前記新規データと前記加工データのうち前記加工データを書込んだ方が前記ブロック内で消去状態から書込状態に変更されるメモリセルの数が少なくなる場合には前記加工データを書込み、これ以外の場合には前記新規データを書込むようにする請求項１記載の不揮発性半導体メモリ。
【請求項３】
前記消去処理後に行う前記データ書込処理は、前記新規データと前記加工データのうち前記加工データを書込んだ方が前記ブロック内の書込状態のメモリセルの数が少なくなる場合には前記加工データを書込み、これ以外の場合には前記新規データを書込むようにする請求項１または２記載の不揮発性半導体メモリ。
【請求項４】
前記加工データが書込まれた前記ブロックのデータを読み出す際、前記加工データを生成した際に施された演算処理とは逆の演算処理を施して読み出すようにした請求項１、２または３記載の不揮発性半導体メモリ。
【請求項５】
前記加工データを生成する際に施す演算処理を示す演算処理フラグを前記メモリセルアレイ内に設け、前記演算処理は前記新規データの各ビットデータを反転させる処理であり、
前記データ書込処理において、前記新規データを書込む時には前記演算処理フラグをリセットし、前記加工データを書込む時には前記演算処理フラグをセットするようにし、
前記ブロックのデータを読み出す際、前記演算処理フラグがリセットされていればデータをそのまま読み出し、前記演算処理フラグがセットされていればデータを反転して読み出すようにした請求項１、２または３記載の不揮発性半導体メモリ。
【請求項６】
前記加工データを生成する際に施す演算処理を示す演算処理フラグを前記メモリセルアレイ内に設け、前記演算処理は前記新規データのビット上下並び方向を逆にする処理であり、
前記データ書込処理において、前記新規データを書込む時には前記演算処理フラグをリセットし、前記加工データを書込む時には前記演算処理フラグをセットするようにし、
前記ブロックのデータを読み出す際、前記演算処理フラグがリセットされていればデータをそのまま読み出し、前記演算処理フラグがセットされていればデータをビット上下並び方向を逆にして読み出すようにした請求項１、２または３記載の不揮発性半導体メモリ。
【請求項７】
前記演算処理フラグを複数ビットのメモリセルで構成し、前記演算処理フラグを構成する前記メモリセルのうちの書込状態であるメモリセルの個数または消去状態であるメモリセルの個数が奇数であるか偶数であるかによって前記演算処理フラグがセットされているかリセットされているかを判断するようにした請求項５または６記載の不揮発性半導体メモリ。
【請求項８】
前記加工データを生成する際に施す演算処理を示す演算処理フラグを前記メモリセルアレイ内に設け、前記演算処理は前記新規データを所定方向にＮビットシフトさせる（Ｎは１以上の整数）処理であり、
前記データ書込処理において、前記新規データを書込む時には前記演算処理フラグをリセットし、前記加工データを書込む時には前記演算処理フラグをセットするようにし、
前記ブロックのデータを読み出す際、前記演算処理フラグがリセットされていればデータをそのまま読み出し、前記演算処理フラグがセットされていればデータを前記所定方向とは逆方向にＮビットシフトさせて読み出すようにした請求項１、２または３記載の不揮発性半導体メモリ。
【請求項９】
前記演算処理フラグを複数ビットで構成した請求項８記載の不揮発性半導体メモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性半導体メモリに関し、不揮発性半導体メモリへのデータ書込方法、データ読出方法に係るものである。
【背景技術】
【０００２】
書換可能な不揮発性メモリは電源を切断しても内容が消えない、読出速度が速いといった特長を持ち、例えばフラッシュメモリはＰＣのＢＩＯＳ格納用メモリやデジタルスチルカメラの画像格納用メモリ、制御用マイコンの命令/データ格納用メモリとして利用されている。
【０００３】
また、書換可能な不揮発性メモリは、書込回数が例えば１００００回等の制限がある。それは各メモリのビット状態を１(ハイレベル)から０(ローレベル)へ変化させる時、または０から１へ変化させる時に、不揮発性メモリの各ビットを構成する素子にストレスがかかるためである。
【０００４】
フラッシュメモリでは、ワード線を共通にする複数のメモリセルに対して消去(ビットを１の状態にする)を行えるが、一般的な消去は複数のワード線を含むセクタと呼ばれる単位で行われ、特定のメモリセルだけを選択的に消去する事は行わない。一方、書込(ビットの状態を０にする)では特定のメモリセルに対して選択的に行われる。
【０００５】
このような消去(セクタ単位でビット状態を１にする)、書込(特定メモリセルのビット状態を０にする)により、各ビットを構成する素子にストレスがかかり、書換回数が多くなると、メモリの信頼性が低下するという問題点があった。
【０００６】
そこで従来技術では、全新規書込データの０または１を計数し、０の数＜１の数の時はそのまま書込、０の数＞１の数のときはデータを反転して書込むことにより、書込(ビット状態を０にする)を少なくしてストレスを減らしている(特許文献１参照)。また、全データ消去を検出した時に特定のアドレスデータを反転して使用することにより同一アドレスにデータを書込む確率を低くしている(特許文献２参照)。
【特許文献１】特開平７−４５０８５号公報
【特許文献２】特開２００１−５６７８５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら上記従来技術では、データの書換えを行う場合に、書込済みのデータと新規書込データの関係を考慮せず、一旦、書き換えるべき全データを消去した後で、新規データを書き込んでいたため、消去及び書込回数の削減程度が小さく、メモリセルへのストレスの軽減の程度も小さいものであった。
【０００８】
本発明は、既に書込済みのデータと新規書込データの関係を考慮して、従来技術以上に、確実に消去及び書込回数を削減することによりメモリセルへのストレスを軽減することができる不揮発性半導体メモリを提供することである。
【課題を解決するための手段】
【０００９】
本発明の不揮発性半導体メモリは、それぞれ書込状態と消去状態とで異なる１ビットデータを記憶する複数のメモリセルを有するメモリセルアレイを備え、メモリセルアレイを複数ビットのデータを記憶するブロックに分割して、ブロック単位でメモリセルにデータの書込みを行う不揮発性半導体メモリであって、ブロックごとに新規データを記憶させる際、ブロックに記憶されている既存データと新規データとを比較し、ブロックの既存データを構成する複数のメモリセルのうちいずれかのメモリセルを書込状態から消去状態に変更することなく新規データを書込むことが可能であるか否かを判定する新規データ判定処理と、ブロックに記憶されている既存データと新規データに対し所定の演算処理を施して生成される加工データとを比較し、ブロックの既存データを構成する複数のメモリセルのうちいずれかのメモリセルを書込状態から消去状態に変更することなく加工データを書込むことが可能であるか否かを判定する加工データ判定処理と、新規データ判定処理と加工データ判定処理の両方の判定結果が不可能であるときにブロックの既存データを構成する全てのメモリセルを消去状態にするデータ消去処理と、新規データ判定処理と加工データ判定処理のうち新規データ判定処理のみの判定結果が可能であるときはブロックに新規データを書込み、加工データ判定処理のみの判定結果が可能であるときはブロックに加工データを書込み、新規データ判定処理と加工データ判定処理の両方の判定結果が可能であるとき、または消去処理後に、ブロックに新規データまたは加工データを書込むデータ書込処理とを行うことを特徴とする。
【００１０】
この構成によれば、データ書換の際、ブロックごとに、既存データと新規データを比較するとともに既存データと加工データを比較して、既存データの消去処理が必要か否かを判定し、ブロックごとに必要な場合にのみ既存データを消去して新規データまたは加工データを書き込むことで、消去および書込回数を削減してメモリセルへのストレスを軽減できる。
【００１１】
また、本発明において、新規データ判定処理と加工データ判定処理の両方の判定結果が可能であるときに行うデータ書込処理は、新規データと加工データのうち加工データを書込んだ方がブロック内で消去状態から書込状態に変更されるメモリセルの数が少なくなる場合には加工データを書込み、これ以外の場合には新規データを書込むようにする。
【００１２】
このように、新規データと加工データのうちのいずれかを選択して書き込むことでトータルでのメモリセルへの消去および書込回数を削減してメモリセルへのストレスをより軽減できる。
【００１３】
また、本発明において、消去処理後に行うデータ書込処理は、新規データと加工データのうち加工データを書込んだ方がブロック内の書込状態のメモリセルの数が少なくなる場合には加工データを書込み、これ以外の場合には新規データを書込むようにする。
【００１４】
このように、新規データと加工データのうちのいずれかを選択して書き込むことでトータルでのメモリセルへの消去および書込回数を削減してメモリセルへのストレスをより軽減できる。
【００１５】
また、本発明において、加工データが書込まれたブロックのデータを読み出す際、加工データを生成した際に施された演算処理とは逆の演算処理を施して読み出すようにしている。このようにして読み出すことで、本来書き込まれるべきであった新規データと同じデータを読み出すことができる。
【００１６】
また、本発明において、加工データを生成する際に施す演算処理を示す演算処理フラグをメモリセルアレイ内に設け、演算処理は新規データの各ビットデータを反転させる処理であり、データ書込処理において、新規データを書込む時には演算処理フラグをリセットし、加工データを書込む時には演算処理フラグをセットするようにし、ブロックのデータを読み出す際、演算処理フラグがリセットされていればデータをそのまま読み出し、演算処理フラグがセットされていればデータを反転して読み出すようにしている。
【００１７】
この構成は、新規データから加工データを生成する際の演算処理として各ビットデータを反転させるようにしたものであり、上記発明と同様、メモリセルへの消去および書込回数を削減してメモリセルへのストレスを軽減できる。また、演算内容を示す演算処理フラグを設けているのでこの演算処理フラグに基づいてブロックから本来書き込まれるべきであった新規データと同じデータを読み出すことができる。
【００１８】
また、本発明において、加工データを生成する際に施す演算処理を示す演算処理フラグをメモリセルアレイ内に設け、演算処理は新規データのビット上下並び方向を逆にする処理であり、データ書込処理において、新規データを書込む時には演算処理フラグをリセットし、加工データを書込む時には演算処理フラグをセットするようにし、ブロックのデータを読み出す際、演算処理フラグがリセットされていればデータをそのまま読み出し、演算処理フラグがセットされていればデータをビット上下並び方向を逆にして読み出すようにしている。
【００１９】
この構成は、新規データから加工データを生成する際の演算処理としてビット上下並び方向を逆にするようにしたものであり、上記発明と同様、メモリセルへの消去および書込回数を削減してメモリセルへのストレスを軽減できる。また、演算内容を示す演算処理フラグを設けているのでこの演算処理フラグに基づいてブロックから本来書き込まれるべきであった新規データと同じデータを読み出すことができる。
【００２０】
また、上記の演算処理フラグを複数ビットのメモリセルで構成し、演算処理フラグを構成するメモリセルのうちの書込状態であるメモリセルの個数または消去状態であるメモリセルの個数が奇数であるか偶数であるかによって演算処理フラグがセットされているかリセットされているかを判断するようにすることで、演算処理フラグのフラグ領域の消去回数の削減を図ることができる。
【００２１】
また、本発明において、加工データを生成する際に施す演算処理を示す演算処理フラグをメモリセルアレイ内に設け、演算処理は新規データを所定方向にＮビットシフトさせる（Ｎは１以上の整数）処理であり、データ書込処理において、新規データを書込む時には演算処理フラグをリセットし、加工データを書込む時には演算処理フラグをセットするようにし、ブロックのデータを読み出す際、演算処理フラグがリセットされていればデータをそのまま読み出し、演算処理フラグがセットされていればデータを所定方向とは逆方向にＮビットシフトさせて読み出すようにしている。
【００２２】
この構成は、新規データから加工データを生成する際の演算処理として所定方向にＮビットシフトさせるようにしたものであり、上記発明と同様、メモリセルへの消去および書込回数を削減してメモリセルへのストレスを軽減できる。また、演算内容を示す演算処理フラグを設けているのでこの演算処理フラグに基づいてブロックから本来書き込まれるべきであった新規データと同じデータを読み出すことができる。
【００２３】
また、上記の演算処理フラグを複数ビットで構成することで、加工データ生成の際のシフト移動ビット数の判定有効範囲の拡大を図ることができる。
【発明の効果】
【００２４】
以上のように本発明によれば、既に書込済みのデータと新規書込データの関係を考慮することにより、従来技術よりも確実に消去及び書込回数を減少させ、メモリセルへのストレスを減らし、不揮発性半導体メモリの寿命を伸ばすことが出来る。
【発明を実施するための最良の形態】
【００２５】
以下、本発明をフラッシュメモリに適用した場合の実施形態について説明する。
【００２６】
（第1の実施形態）
図１（ａ）は本発明の第1の実施形態におけるデータ書換えフローの一例であり、図１（ｂ）は図１（ａ）の書換えフローに従ってデータ書込を行った場合の、信号またはデータ書込プログラム中の変数の変遷を示し、機能をハードウェアで実現した場合は信号線の値となり、プログラムで実現した場合はプログラム中の変数の値となる。
【００２７】
図１（ｂ）において、１１７は書換の回数を示す。１１８は書換前のあるブロック内のメモリの状態である。今回の説明では簡単のため４ビットのデータとしており、書込済(ビットの状態が０)の部分には下線が引いてある。１１９は新規書込データそのままのデータであり、下線が引いてある部分はメモリの状態１１８で書込済(ビットの状態が０)の位置に対応する。１２０は図１（ａ）の判定１０２による判定結果、第１判定である。１２１は図１（ａ）の処理１０４で計数される第１書込ビット数であり、新規書込データそのままのデータ１１９を書込むものとした場合に、メモリの状態１１８から消去を行わずに新たに書込(ビット状態を０にする)が行われるビット数である。１２２は図１（ａ）の処理１０３で計数される第２書込ビット数であり、新規書込データそのままのデータ１１９を書込むものとした場合に、メモリの状態１１８から消去(全ビットを１にする)を行った後に、新たに書込(ビット状態を０にする)が行われるビット数である。
【００２８】
１２３は新規書込データの各ビットを反転演算したデータ（新規書込反転データ）であり、下線が引いてある部分は、メモリの状態１１８で書込済(ビット状態が０)の位置に対応する。１２４は図１（ａ）の判定１０５による判定結果、第２判定である。１２５は図１（ａ）の処理１０７で計数される第３書込ビット数であり、新規書込反転データ１２３を書込むものとした場合に、メモリの状態１１８から消去を行わずに新たに書込(ビット状態を０にする)が行われるビット数である。１２６は図１（ａ）の処理１０６で計数される第４書込ビット数であり、新規書込反転データ１２３を書込むものとした場合に、メモリの状態１１８から消去(全ビットを１にする)を行った後に、新たに書込(ビット状態を０にする)が行われるビット数である。
【００２９】
１２７は実際の書込データであり、図１（ａ）の処理１１０、処理１１１、処理１１４、処理１１５のいずれかで書込みを行うデータである。１２８は実際の書込データ１２７が反転されているか否かを示す反転フラグである。
【００３０】
図１（ａ）、図１（ｂ）を用いてデータ書換の流れを説明する。
【００３１】
書換回数１回目１２９において、書換前のメモリの状態１１８は”１１１１”である。書換回数１回目１２９では、新規書込データは”１１１１”である。
【００３２】
判定１０２でメモリの状態１１８の既書込ビット（状態が０のビット）について、新規書込そのままデータ１１９の対応ビットも書込(ビット状態を０にする)かどうか判定し、ＯＫであれば処理１０４に進み、ＮＧであれば処理１０３に進む。書換回数１回目１２９では、メモリの状態１１８に既書込ビットが無いため、第１判定はＯＫとなり処理１０４に進む。処理１０４では第１書込ビット数１２１を数える。第１書込ビット数１２１は、そのままデータ１１９の０の数からメモリの状態１１８の０の数を引き算することにより求められる。書換回数１回目１２９では０となる。
【００３３】
次に、判定１０５でメモリの状態１１８の既書込ビットについて、新規書込反転データ１２３の対応ビットも書込(ビット状態を０にする)かどうか判定し、ＯＫであれば処理１０７に進み、ＮＧであれば処理１０６に進む。書換回数１回目１２９では、メモリの状態１１８に既書込ビットが無いため、第２判定はＯＫとなり処理１０７に進む。処理１０７では第３書込ビット数を数える。第３書込ビット数１２５は、反転データ１２３の０の数からメモリの状態１１８の０の数を引き算することにより求められる。書換回数１回目１２９では４となる。
【００３４】
次に、判定１０８で第１判定１２０と第２判定１２４がどちらもＮＧかを判定し、どちらもＮＧであれば処理１１２に進み、そうでなければ判定処理１０９に進む。書換回数１回目１２９では、第１判定１２０も第２判定１２４もどちらもＯＫであるので判定１０９に進む。
【００３５】
判定１０９では第１書込ビット数１２１と第３書込ビット数１２５を比較し、第１書込ビット数１２１≦第３書込ビット数１２５の場合は処理１１１（処理１１５と同じ処理）に進み、そうでない場合は処理１１０（処理１１４と同じ処理）に進む。書換回数１回目１２９では、第１書込ビット数＜第３書込ビット数であるので処理１１１に進み、新規書込データそのままのデータ１１９を書込データ１２７としてメモリセルへの書込を行い、反転フラグ１２８を１にする。これで書換回数１回目１２９が終了する。
【００３６】
このメモリデータを読み出す場合は、反転フラグ１２８が１なので、メモリの状態”１１１１”がそのまま読み出される。
【００３７】
書換回数２回目１３０、３回目１３１、４回目１３２についても図１（ａ）のフローに基づいて行われる。なお、書換回数２回目１３０、３回目１３１では、判定１０９で、第１書込ビット数＞第３書込ビット数であるので処理１１０に進み、新規書込反転データ１２３を書込データ１２７としてメモリセルへの書込を行い、反転フラグ１２８を０にする。この反転フラグ１２８が０のメモリデータを読み出す場合は、メモリの状態が反転されて読み出される。また、書換回数４回目１３２では、判定１０９で第１書込ビット数１２１と第３書込ビット数１２５の比較が行われるが、書換回数４回目１３２の場合、第二判定１２４にてＮＧだった為、処理１０７は行われず第３書込ビット数１２５の計数は行われないので、第３書込ビット数１２５の初期値として充分に大きな数を設定しておく。この第３書込ビット数１２５の初期値は、ブロックを構成するビット数より大きな値とする。ここでは４ビットでブロックを構成しているので５以上に設定しておく。よって、書換回数４回目１３２では、第１書込ビット数＜第３書込ビット数となり処理１１１に進み、新規書込そのままのデータ１１９を書込データ１２７としてメモリセルへの書込を行い、反転フラグ１２８を１にする。
【００３８】
次に、書換回数５回目１３３について説明する。書換回数５回目１３３において、書換前のメモリ状態１１８は”１０００”である。書換回数５回目１３３では、新規書換データは”１１１１”である。
【００３９】
判定１０２でメモリの状態１１８の既書込ビットについて、新規書込そのままデータ１１９の対応ビットも書込(ビット状態を０にする)かどうか判定する。書換回数５回目１３３では、メモリの状態１１８の下位３ビットが既書込(“０”)であり、そのままデータ１１９では対応する下位３ビットは”１”であるため、第１判定はＮＧとなり処理１０３にすすむ。処理１０３では第２書込ビット数１２２を数える。第２書込ビット数１２２は、そのままデータ１１９の０の数そのものである。書換回数５回目１３３では０となる。
【００４０】
次に、判定１０５でメモリの状態１１８の既書込ビットについて、新規書込反転データ１２３の対応ビットも書込(ビット状態を０にする)かどうか判定する。書換回数５回目１３３では、メモリの状態１１８の下位３ビットが既書込(“０”)であり、反転データ１２３の対応する下位３ビットでも”０”であるため、第２判定はＯＫとなり処理１０７に進む。処理１０７では第３書込ビット数を数える。第３書込ビット数１２５は、反転データ１２３の０の数からメモリの状態１１８の０の数を引き算することにより求められる。書換回数５回目１３３では１となる。
【００４１】
次に、判定１０８で第１判定１２０と第２判定１２４がどちらもＮＧかを判定する。書換回数５回目１３３では、第１判定１２０がＮＧであるが第２判定１２４がＯＫであるので判定１０９に進む。
【００４２】
判定１０９では第１書込ビット数１２１と第３書込ビット数１２５を比較する。書換回数５回目１３３の場合、第一判定１２０にてＮＧだった為、処理１０４は行われず第１書込ビット数１２１の計数は行われないので、第１書込ビット数１２１の初期値として充分に大きな数を設定しておく。この第１書込ビット数１２１の初期値は、ブロックを構成するビット数より大きな値とする。ここでは４ビットでブロックを構成しているので５以上に設定しておく。よって、書換回数５回目１３３では、第１書込ビット数＞第３書込ビット数となり処理１１０に進み、新規書込反転データ１２３を書込データ１２７としてメモリセルへの書込を行い、反転フラグ１２８を０にする。これで書換回数５回目１３３が終了する。
【００４３】
このメモリデータを読み出す場合は、反転フラグ１２８が０なので、メモリの状態”００００”が反転され、”１１１１”が読み出される。
【００４４】
次に、書換回数６回目１３４について説明する。書換回数６回目１３４において、書換前のメモリ状態１１８は”００００”である。書換回数６回目１３４では、新規書換データは”０００１”である。
【００４５】
判定１０２でメモリの状態１１８の既書込ビットについて、新規書込そのままデータ１１９の対応ビットも書込(ビット状態を０にする)かどうか判定する。書換回数６回目１３４では、メモリの状態１１８の全４ビットが既書込(“０”)であり、そのままデータ１１９では下位１ビットが”１”であるため、第１判定はＮＧとなり処理１０３にすすむ。処理１０３では第２書込ビット数１２２を数える。第２書込ビット数１２２は、そのままデータ１１９の０の数そのものである。書換回数６回目１３４では３となる。
【００４６】
次に、判定１０５でメモリの状態１１８の既書込ビットについて、新規書込反転データ１２３の対応ビットも書込(ビット状態を０にする)かどうか判定する。書換回数６回目１３４では、メモリの状態１１８の全４ビットが既書込(“０”)であり、反転データ１２３では上位３ビットが”１”であるため、第２判定はＮＧとなり処理１０６に進む。処理１０６では第４書込ビット数を数える。第４書込ビット数１２６は、反転データ１２３の０の数そのものである。書換回数６回目１３４では１となる。
【００４７】
次に、判定１０８で第１判定１２０と第２判定１２４がどちらもＮＧかを判定する。書換回数６回目１３４では、第１判定１２０がＮＧ、第２判定１２４もＮＧであるので、処理１１２に進む。
【００４８】
処理１１２では、メモリ消去を行いメモリの状態１１８を”１１１１”にした上で、判定１１３に進む。
【００４９】
判定１１３では第２書込ビット数１２２と第４書込ビット数１２６を比較し、第２書込ビット数１２２≦第４書込ビット数１２６の場合は処理１１５（処理１１１と同じ処理）に進み、そうでない場合は処理１１４（処理１１０と同じ処理）に進む。書換回数６回目１３４では、第２書込ビット数＞第４書込ビット数であるので処理１１４に進み、新規書込反転データ１２３を書込データ１２７としてメモリセルへの書込を行い、反転フラグ１２８を０にする。これで書換回数６回目１３４が終了する。
【００５０】
このメモリデータを読み出す場合は、反転フラグ１２８が０なので、メモリの状態”１１１０”が反転され、”０００１”が読み出される。
【００５１】
以上のように、本発明の第１の実施形態で図１（ｂ）のようなデータ書換を行う場合は、書換回数６回目１３４で初めてデータ消去が行われ、書込も最小限の必要なメモリセルに限られる。すなわち本実施形態では、既に書込済みのデータと新規書込データの関係を考慮することにより、従来技術よりも確実に消去及び書込回数を減少させ、メモリセルへのストレスを減らし、不揮発性半導体メモリの寿命を伸ばすことが出来る。
【００５２】
（第２の実施形態）
図２（ａ）は本発明の第２の実施形態におけるデータ書換えフローの一例であり、図２（ｂ）は図２（ａ）の書換えフローに従ってデータ書込を行った場合の、信号またはデータ書込プログラム中の変数の変遷を示し、機能をハードウェアで実現した場合は信号線の値となり、プログラムで実現した場合はプログラム中の変数の値となる。
【００５３】
図２（ｂ）において、２１７〜２２２はそれぞれ図１（ｂ）における１１７〜１２２と同様である。２２３は新規書込データのビット上下並び方向を反転演算したデータ（新規書込上下反転データ）であり、下線が引いてある部分は、メモリの状態２１８で書込済(ビット状態が０)の位置に対応する。２２４は図２（ａ）の判定２０５による判定結果、第２判定である。２２５は図２（ａ）の処理２０７で計数される第３書込ビット数であり、新規書込上下反転データ２２３を書込むものとした場合に、メモリの状態２１８から消去を行わずに新たに書込(ビット状態を０にする)が行われるビット数である。２２６は図２（ａ）の処理２０６で計数される第４書込ビット数であり、新規書込上下反転データ２２３を書込むものとした場合に、メモリの状態１１８から消去(全ビットを１にする)を行った後に、新たに書込(ビット状態を０にする)が行われるビット数である。２２７は実際の書込データであり、図２（ａ）の処理２１０、処理２１１、処理２１４、処理２１５のいずれかで書込みを行うデータである。２２８は実際の書込データ２２７がビット上下並び方向に反転されているか否かを示す上下反転フラグであり、１の場合は新規書込そのままデータ２１９が書込データ２２７として書込まれており、読み出す場合はメモリの状態がそのまま読み出され、０の場合は新規書込上下反転データ２２３が書込データ２２７として書込まれており、読み出す場合はメモリの状態をビット上下並び方向に反転して（逆にして）読み出される。
【００５４】
図２（ａ）、図２（ｂ）を用いてデータ書換の流れを説明する。
【００５５】
この第２の実施形態は、第１の実施形態における新規書込反転データ１２３および反転フラグ１２８に代えて、新規書込上下反転データ２２３および上下反転フラグ２２８を用いるものであり、これに関する以外は第１の実施形態のデータ書換の流れと同じである。
【００５６】
例えば書換回数５回目２３３について説明する。書換回数５回目２３３において、書換前のメモリ状態２１８は”１０００”である。書換回数５回目２３３では、新規書換データは”１１１０”である。
【００５７】
判定２０２でメモリの状態２１８の既書込ビットについて、新規書込そのままデータ２１９の対応ビットも書込(ビット状態を０にする)かどうか判定する。書換回数５回目２３３では、メモリの状態２１８の下位３ビットが既書込(“０”)であり、そのままデータ２１９では下位から２ビット目と３ビット目が”１”であるため、第１判定はＮＧとなり処理２０３にすすむ。処理２０３では第２書込ビット数２２２を数える。第２書込ビット数２２２はそのままデータ２１９の０の数そのものである。書換回数５回目２３３では１となる。
【００５８】
次に、判定２０５でメモリの状態２１８の既書込ビットについて、新規書込上下反転データ２２３の対応ビットも書込(ビット状態を０にする)かどうか判定する。書換回数５回目２３３では、メモリの状態２１８の下位３ビットが既書込(“０”)であり、上下反転データ２２３では下位３ビットが”１”であるため、第２判定はＮＧとなり処理２０６に進む。処理２０６では第４書込ビット数を数える。第４書込ビット数２２６は、上下反転データ２２３の０の数そのものである。書換回数５回目２３３では１となる。
【００５９】
次に、判定２０８で第１判定２２０と第２判定２２４がどちらもＮＧかを判定する。書換回数５回目２３３では、第１判定２２０がＮＧ、第２判定２２４もＮＧであるので、処理２１２に進む。
【００６０】
処理２１２では、メモリ消去を行いメモリの状態２１８を”１１１１”にした上で、判定２１３に進む。
【００６１】
判定２１３では第２書込ビット数２２２と第４書込ビット数２２６を比較する。書換回数５回目２３３では、第２書込ビット数＝第４書込ビット数であるので処理２１５に進み、新規書込データそのまま２１９を書込データ２２７としてメモリセルへの書込を行い、上下反転フラグ２２８を１にする。これで書換回数５回目２３３が終了する。
【００６２】
メモリデータを読み出す場合は、上下反転フラグ２２８が１なので、メモリの状態”１１１０”がそのまま読み出される。
【００６３】
以上のように、本発明の第２の実施形態で図２（ｂ）のようなデータ書換を行う場合は、書換回数５回目２３３で初めてデータ消去が行われ、書込も最小限の必要なメモリセルに限られる。すなわち本実施形態では、既に書込済みのデータと新規書込データの関係を考慮することにより、従来技術よりも確実に消去及び書込回数を減少させ、メモリセルへのストレスを減らし、不揮発性半導体メモリの寿命を伸ばすことが出来る。
【００６４】
（第３の実施形態）
図３（ａ）は本発明の第３の実施形態におけるデータ書換えフローの一例であり、図３（ｂ）は図３（ａ）の書換えフローに従ってデータ書込を行った場合の、信号またはデータ書込プログラム中の変数の変遷を示し、機能をハードウェアで実現した場合は信号線の値となり、プログラムで実現した場合はプログラム中の変数の値となる。
【００６５】
図３（ｂ）において、３１７〜３２２はそれぞれ図１（ｂ）における１１７〜１２２と同様である。３２３は新規書込データを所定方向に１ビットシフト移動演算したデータ（新規書込シフト移動データ）であり、下線が引いてある部分は、メモリの状態３１８で書込済(ビット状態が０)の位置に対応する。３２４は図３（ａ）の判定３０５による判定結果、第２判定である。３２５は図３（ａ）の処理３０７で計数される第３書込ビット数であり、新規書込シフト移動データ３２３を書込むものとした場合に、メモリの状態３１８から消去を行わずに新たに書込(ビット状態を０にする)が行われるビット数である。３２６は図３（ａ）の処理３０６で計数される第４書込ビット数であり、新規書込シフト移動データ３２３を書込むものとした場合に、メモリの状態３１８から消去(全ビットを１にする)を行った後に、新たに書込(ビット状態を０にする)が行われるビット数である。３２７は実際の書込データであり、図３（ａ）の処理３１０、処理３１１、処理３１４、処理３１５のいずれかで書込みを行うデータである。３２８は実際の書込データ３２７が新規書込データを所定方向に１ビットシフト移動したデータであるか否かを示すシフト演算フラグであり、１の場合は新規書込そのままデータ３１９が書込データ３２７として書込まれており、読み出す場合はメモリの状態がそのまま読み出され、０の場合は新規書込シフト移動データ３２３が書込データ３２７として書込まれており、読み出す場合はメモリの状態が、新規書込みデータ３１９から新規書込シフト移動データ３２３を生成する際の１ビットシフト移動とは逆方向に１ビットシフト移動して読み出される。
【００６６】
図３（ａ）、３（ｂ）を用いてデータ書換の流れを説明する。
【００６７】
この第３の実施形態は、第１の実施形態における新規書込反転データ１２３および反転フラグ１２８に代えて、新規書込シフト移動データ３２３およびシフト演算フラグ３２８を用いるものであり、これに関する以外は第１の実施形態のデータ書換の流れと同じである。
【００６８】
例えば書換回数４回目３３２について説明する。書換回数４回目３３２において、書換前のメモリ状態３１８は”０１００”である。書換回数４回目３３２では、新規書換データは”１１００”である。
【００６９】
判定３０２でメモリの状態３１８の既書込ビットについて、新規書込そのままデータ３１９の対応ビットも書込(ビット状態を０にする)かどうか判定する。書換回数４回目３３２では、メモリの状態３１８の下位から１、２、４ビット目が既書込(“０”)であり、そのままデータ３１９では上位２ビットが”１”であるため、第１判定はＮＧとなり処理３０３にすすむ。処理３０３では第２書込ビット数３２２を数える。第２書込ビット数３２２はそのままデータ３１９の０の数そのものである。書換回数４回目３３２では２となる。
【００７０】
次に、判定３０５でメモリの状態３１８の既書込ビットについて、新規書込シフト移動データ３２３の対応ビットも書込(ビット状態を０にする)かどうか判定する。書換回数４回目３３２では、メモリの状態３１８の下位から１、２、４ビット目が既書込(“０”)であり、シフト移動データ３２３では下位から１ビット目、４ビット目が”１”であるため、判定はＮＧとなり処理３０６に進む。処理３０６では第４書込ビット数を数える。第４書込ビット数３２６は、シフト移動データ３２３の０の数そのものである。書換回数４回目３３２では２となる。
【００７１】
次に、判定３０８で第１判定３２０と第２判定３２４がどちらもＮＧかを判定する。書換回数４回目３３２では、第１判定２２０がＮＧ、第２判定３２４もＮＧであるので、処理３１２に進む。
【００７２】
処理３１２では、メモリ消去を行いメモリの状態３１８を”１１１１”にした上で、判定３１３に進む。
【００７３】
判定３１３では第２書込ビット数３２２と第４書込ビット数３２６を比較する。書換回数４回目３３２では、第２書込ビット数＝第４書込ビット数であるので処理３１５に進み、新規書込データそのまま３１９を書込データ３２７としてメモリセルへの書込を行い、シフト演算フラグ３２８を１にする。これで書換回数４回目３３２が終了する。
【００７４】
メモリデータを読み出す場合は、シフト演算フラグ３２８が１なので、メモリの状態”１１００”がそのまま読み出される。
【００７５】
以上のように、本発明の第３の実施形態で図３（ｂ）のようなデータ書換を行う場合は、書換回数４回目３３２で初めてデータ消去が行われ、書込も最小限の必要なメモリセルに限られる。すなわち本実施形態では、既に書込済みのデータと新規書込データの関係を考慮することにより、従来技術よりも確実に消去及び書込回数を減少させ、メモリセルへのストレスを減らし、不揮発性半導体メモリの寿命を伸ばすことが出来る。
【００７６】
なお、上記第１〜第３の実施形態ではそれぞれ、新規書込そのままデータ以外で実際の書込データとして、０１反転データ、ビット上下並び方向反転データ、シフト移動データを用いる場合について個別に説明したが、それぞれの方法を組合せる事により、より書込・消去の回数削減が望めるのは言うまでも無い。また、演算方法は０１反転、ビット上下並び方向反転、シフト演算に限定されるものではなく、データを変換・復元出来るならば、どのような演算方法を用いても良い。
【００７７】
次に、第１〜第３の実施形態において、フラグを複数ビット構成にした例について説明する。
【００７８】
図４（ａ）は、第１、第２の実施形態において、フラグを複数ビット構成にした例を示し、４０１は反転フラグ・上下反転フラグの複数ビット構成であり、この場合は５ビット構成としている。４０２は反転フラグ・上下反転フラグを３ビット構成にしたものであり、４０３は前述の第１、第２の実施形態で説明した場合と同じく反転フラグ・上下反転フラグを１ビットで構成したものである。４０４は反転フラグ・上下反転フラグで表したいデータの演算内容を表しており、フラグ４０１、４０２、４０３中の０の個数または１の個数が偶数であるか奇数であるかによって判断する。
【００７９】
図４（ａ）を用いてデータ書換の際のフラグデータの流れを説明する。
【００８０】
図４（ａ）の書換回数２回目４０７について説明する。
【００８１】
書換回数２回目４０７において書換前のフラグデータのメモリ状態は、５ビット構成フラグ４０１では”１１１１０”、３ビット構成フラグ４０２では”１１０”、１ビット構成フラグ４０３では”０”である。
【００８２】
書換回数２回目４０７において新規書込フラグデータは、５ビット構成フラグ４０１では”１１１００”、３ビット構成フラグ４０２では”１００”、１ビット構成フラグ４０３では”１”である。
【００８３】
書換回数２回目４０７において、５ビット構成フラグ４０１と３ビット構成フラグ４０２では、０から１へ変化するビットが存在しない為、データ消去を行わずに書込だけで新規書込フラグデータを表す事が出来るが、１ビット構成フラグ４０３ではフラグ領域の消去が必要となる。
【００８４】
以上のように、図４（ａ）のようなフラグデータの書換を行う場合、書換回数２回目では１ビット構成フラグ４０３では消去が必要なのに対し、５ビット構成フラグ４０１や３ビット構成フラグ４０２では消去が不要であることが分かる。このようにフラグを複数ビット持つ事により、フラグ領域の消去回数を削減できる。したがってフラグ構成ビット数を増やす事により、さらに消去回数削減効果が見込まれる。
【００８５】
なお、上記の例では、反転フラグ４０１、４０２、４０３の偶数・奇数にて、データの演算内容を判断しているが、複数ビットから２値を判断出来る方法であればどのような判断方法を用いても良い。
【００８６】
次に、図４（ｂ）は、第３の実施形態において、フラグを複数ビット構成にした例を示し、４１１はシフト演算フラグの複数ビット構成であり、この場合は３ビット構成としている。４１２はシフト演算フラグを２ビット構成にしたものであり、４１３は前述の第３の実施形態で説明した場合と同じくシフト演算フラグを１ビットで構成したものである。４１４はシフト演算フラグで表したいデータのシフト量を表している。
【００８７】
図４（ｂ）を用いてフラグデータで表せるシフト移動量を説明する。
【００８８】
シフト演算フラグが１ビット構成４１３の場合は、表せるシフト移動量は０ビット４１５、１ビット４１６の２パターンである。これをシフト演算フラグを２ビット構成４１２、３ビット構成４１１とビット数を増やす事により、４１４のように表現可能なシフト移動量の範囲拡大が見込まれる。
【００８９】
次に、図５は、本発明を適用したシステムを示し、５０１はシステム５００を制御するＣＰＵである。５０９はシステム５００内のフラッシュメモリで、ブロック０〜ｍの複数のブロックに分かれており、ブロック毎にデータ領域５１０とそのデータ領域に書込まれている書込データの演算内容を示す演算内容フラグ（前述の反転フラグ、上下反転フラブまたはシフト演算フラグ）の記憶領域５１１を持つ。
【００９０】
５０７はフラッシュメモリ５０９へのデータ入力、５０８は演算内容フラグ入力、５０３はアドレス入力、５１２は既書込データの読出結果、５１３は演算内容フラグの読出結果である。
【００９１】
５０４はデータの比較・判定ブロックであり、書込時には新規書込データ５０２と既書込データ５１２との比較を行い、消去せずにデータ書込出来る演算結果が存在するかを判定する。さらに複数の演算結果が存在する場合は、より書込ビットが少ないデータを選択する。
【００９２】
書込データ演算ブロック５０６は、比較・判定ブロック５０４の判定結果５０５を受け、新規書込データ５０２から実際にフラッシュメモリに書込むデータ５０７と演算内容フラグ５０８を生成し、フラッシュメモリ５０９に書込む。
【００９３】
また読出時には読出データ演算ブロック５１４にて、既書込データ５１２と同データの演算内容フラグ５１３からデータ５１５を生成し、ＣＰＵ５０１にフラッシュメモリ５０９からの読出データとして受け渡す。
【００９４】
例えば図１（ａ）の場合において、ＣＰＵ５０１は、１０８，１１２の処理、及び１０１から１１６の制御を行う。比較・判定ブロック５０４は、１０２，１０５，１０９，１１３の処理を行う。書込データ演算ブロック５０６は、１０３，１０４，１０６，１０７，１１０，１１４，１１１，１１５の処理を行う。読出データ演算ブロック５１４は、１０２，１０５の既書込ビットの読み出しを行う。図２（ａ），図３（ａ）の場合も同様である。
【産業上の利用可能性】
【００９５】
本発明は、例えば制御用マイコンの命令を記憶する不揮発性半導体メモリへの新規データ書込によるメモリセルへのストレスを軽減でき、例えば、書換可能な不揮発性メモリに命令／データ／プログラム等を書込むメモリーライタや、及び不揮発性メモリ搭載システムＬＳＩのメモリ書換え時のアルゴリズムに有用である。
【図面の簡単な説明】
【００９６】
【図１】本発明の第１の実施形態におけるデータ書換え時のフローチャートと信号または変数の遷移図
【図２】本発明の第２の実施形態におけるデータ書換え時のフローチャートと信号または変数の遷移図
【図３】本発明の第３の実施形態におけるデータ書換え時のフローチャートと信号または変数の遷移図
【図４】本発明の第１〜第３の実施形態におけるフラグの構成例を示す図
【図５】本発明を適用したシステムにおけるデータ書込、読出の構成図
【符号の説明】
【００９７】
５０１  ＣＰＵ
５０２  書込データ
５０３  アクセスアドレス
５０４  データ比較及び判定ブロック
５０６  書込データ演算ブロック
５０７  書込データ
５０８  書込フラグ
５０９  フラッシュメモリ
５１０  ブロック単位のメモリデータ領域
５１１  メモリデータ領域に対応する演算フラグ領域
５１２  読出データ
５１３  読出フラグ
５１４  読出データ演算ブロック
【図１】
2005216455.tif 000003
【図２】
2005216455.tif 000004
【図３】
2005216455.tif 000005
【図４】
2005216455.tif 000006
【図５】
2005216455.tif 000007