(57)【要約】【課題】プログラム回数（書き込み回数）を減らすか、プログラム電流容量を減らすことの出来る不揮発性半導体記憶装置を提供する。【解決手段】指定されたアドレスに対し入力されるｎ（ｎは整数）ビットのプログラムデータを同時にプログラムする場合に、論理“０”に属するビットの個数のみをカウント、もしくは論理“１”に属するビットの個数のみをカウント、もしくは両方の論理に属するビットの個数をカウントし、カウント数がｎ／２以下であった方の論理を初期状態としてプログラムデータを再生成し、その再生成されたプログラムデータに基づいてプログラム動作を行う第１手段と、指定されたアドレスのメモリセルの初期状態が論理“０”と論理“１”のいずれであるかを認識させる認識ビットをプログラム動作時に書き込む第２手段とを具備する。【選択図】  図１
2010129154.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶するメモリセルにより構成されるメモリセルアレイと、前記メモリセルアレイからデータを読み出すリード動作と、前記メモリセルアレイに対してデータを書き込むプログラム動作とを制御する制御回路とを備えた不揮発性半導体記憶装置において、
指定されたアドレスに対し入力されるｎ（ｎは整数）ビットのプログラムデータを同時にプログラムする場合に、論理“０”に属するビットの個数のみをカウント、もしくは論理“１”に属するビットの個数のみをカウント、もしくは両方の論理に属するビットの個数をカウントし、カウント数がｎ／２以下であった方の論理を初期状態として前記プログラムデータを再生成し、その再生成されたプログラムデータに基づいて前記プログラム動作を行う第１手段と、前記指定されたアドレスのメモリセルの前記初期状態が論理“０”と論理“１”のいずれであるかを認識させる認識ビットを前記プログラム動作時に書き込む第２手段とを具備したことを特徴とする不揮発性半導体記憶装置。
【請求項２】
前記制御回路は、プログラムが通常メモリセルの状態を論理“１”から論理“０”に遷移させることを指す時には、論理“０”に属するビットの個数が論理“１”に属するビットの個数を超えている時、前記入力されるｎビットのプログラムデータを反転させてプログラムし、反転情報を前記認識ビットに書き込むことを特徴とする請求項１に記載の不揮発性半導体記憶装置。
【請求項３】
前記制御回路は、一度にプログラム可能なビット数をｍ（ｍは整数：ｍ＜ｎ／２）とし、最大分割プログラム回数（最大分割プログラム回数とは、ｎビットを複数回に分けてプログラムする際の最大回数を示す）がｎ／２ｍ回、もしくはその値より大きく、一番近い整数回となるようにプログラム動作を行うことを特徴とする請求項１又は２に記載の不揮発性半導体記憶装置。
【請求項４】
前記制御回路は、ｎ／２ビットのプログラムデータと前記認識ビットとを書き込むのに十分なプログラム電流容量でプログラム動作を行うことを特徴とする請求項１又は２に記載の不揮発性半導体記憶装置。
【請求項５】
前記制御回路は、前記指定されたアドレスに対し、プログラム動作に先立って、ｎビットデータを読み出し、前記指定されたアドレスに対応するメモリセルがプログラムされていない初期状態にあるか否かを確認することを特徴とする請求項１乃至４のいずれかに記載の不揮発性半導体記憶装置。
【請求項６】
データを記憶するメモリセルにより構成されるメモリセルアレイと、前記メモリセルアレイからデータを読み出すリード動作と、前記メモリセルアレイに対してデータを書き込むプログラム動作とを制御する制御回路とを備えた不揮発性半導体記憶装置において、
指定されたアドレスに対し入力されるｎ（ｎは整数）ビットのプログラムデータを同時にプログラムする場合に、論理“０”に属するビットの個数のみをカウント、もしくは論理“１”に属するビットの個数のみをカウント、もしくは両方の論理に属するビットの個数をカウントし、カウント数がｎ／２以下であった方の論理を初期状態として前記プログラムデータを再生成し、その再生成されたプログラムデータに基づいて前記プログラム動作を行う第１手段と、前記指定されたアドレスのメモリセルの前記初期状態が論理“０”と論理“１”のいずれであるかを認識させる認識ビットを前記プログラム動作時に書き込む第２手段と、前記指定されたアドレスにデータが書き込まれているか否かを判別する初期ビットを書き込む第３手段とを具備したことを特徴とする不揮発性半導体記憶装置。
【請求項７】
前記制御回路は、前記プログラム動作時に前記認識ビットと前記初期ビットとを書き込むことを特徴とする請求項６に記載の不揮発性半導体記憶装置。
【請求項８】
前記制御回路は、一度にプログラム可能なビット数をｍ（ｍは整数：ｍ＜ｎ／２）とし、最大分割プログラム回数（最大分割プログラム回数とは、ｎビットを複数回に分けてプログラムする際の最大回数を示す）が（ｎ＋１）／２ｍ回、もしくはその値より大きく、一番近い整数回となるようにプログラム動作を行うことを特徴とする請求項６又は７に記載の不揮発性半導体記憶装置。
【請求項９】
前記制御回路は、一度にプログラム可能なビット数をｍ（ｍは整数：ｍ＜ｎ／２＋１）とし、最大分割プログラム回数（最大分割プログラム回数とは、ｎビットを複数回に分けてプログラムする際の最大回数を示す）がｎ／２ｍ回、もしくはその値より大きく、一番近い整数回となるようにプログラム動作を行うことを特徴とする請求項６又は７に記載の不揮発性半導体記憶装置。
【請求項１０】
前記制御回路は、ｎ／２ビットのプログラムデータと前記認識ビットと前記初期ビットとを書き込むのに十分なプログラム電流容量でプログラム動作を行うことを特徴とする請求項６又は７に記載の不揮発性半導体記憶装置。
【請求項１１】
前記制御回路は、前記指定されたアドレスに対し、プログラム動作に先立って、前記初期ビットのデータに基づいて前記指定されたアドレスに対応するメモリセルがプログラムされていない初期状態にあるのか否かを確認することを特徴とする請求項６乃至１０のいずれかに記載の不揮発性半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性半導体記憶装置に係り、さらに具体的にはプログラム回数を減らし、あるいはプログラム電流容量を減らすことのできる不揮発性半導体記憶装置に関する。
【背景技術】
【０００２】
近年、不揮発性半導体記憶装置、特にフラッシュメモリは、電気的にデータの書き換えが可能で、且つ電源を切った状態でもデータを保持することが出来るため、例えば、携帯電話、デジタルカメラ等の携帯機器のデータ格納用記憶装置として広く使用されている。
【０００３】
一般に、メモリセルをプログラムするには電源電圧よりも高い所定の高電圧をメモリセルの制御ゲートに印加する必要があり、一定レベル以上のプログラム電流を必要とする。そして制御ゲートに印加される高電圧はチップ内部に具備されたチャージポンプを通じて生成されるので、同時にプログラムすることが出来るメモリセルの個数はチャージポンプの能力やレイアウトの制約により制限される。
【０００４】
例えば、同時にプログラムすることが出来るビットの数が４個であるとき、１６ビットのデータは４ビットずつ分割された後、合計４回にわたってプログラムされる。そこで、フローティングゲートに電荷が溜まっていない状態を論理“１”に固定すると、同時にｎ（ｎは整数）ビットを書き込む際に、全てのビットが論理“０”であった場合はｎビット全てをプログラムする必要がある。また、チップ面積の制約等から、チャージポンプの能力を抑えｍ（ｍは整数：ｎ＞ｍ）ビットずつプログラムを行うように設計した場合には、ｎビット全てをプログラムするのにｎ／ｍ回、もしくはその値より大きく、一番近い整数回のプログラム動作が必要となる。
【０００５】
プログラム回数が多くなれば、プログラムにかかる時間がそれだけ増大する。また一度にプログラム出来るビット数をｍビットとせず、ｎビットを全て同時に書き込めるように設計すると、チャージポンプのチップに占める面積の増大を招き、消費電流の増大にも繋がる。
【０００６】
データをプログラムするのにかかる平均時間を短縮する企みは、本出願人が以前に出願した特許文献１にも記載されているが、回路構成が複雑であり必ずしも満足出来るものではない。
【特許文献１】特開２００６−２４３４７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、指定されたアドレスに対し入力されるｎビットのプログラムデータを同時にプログラムする場合に、プログラム回数（書き込み回数）を減らすことの出来る不揮発性半導体記憶装置を提供することを目的とする。
また、本発明は、プログラム時（書き込み時）のプログラム電流容量を減らすことの出来る不揮発性半導体記憶装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、データを記憶するメモリセルにより構成されるメモリセルアレイと、前記メモリセルアレイからデータを読み出すリード動作と、前記メモリセルアレイに対してデータを書き込むプログラム動作とを制御する制御回路とを備えた不揮発性半導体記憶装置において、指定されたアドレスに対し入力されるｎ（ｎは整数）ビットのプログラムデータを同時にプログラムする場合に、論理“０”に属するビットの個数のみをカウント、もしくは論理“１”に属するビットの個数のみをカウント、もしくは両方のビットの個数をカウントし、カウント数がｎ／２以下であった方の論理を初期状態として前記プログラムデータを再生成し、その再生成されたプログラムデータに基づいて前記プログラム動作を行う第１手段と、前記指定されたアドレスのメモリセルの前記初期状態が論理“０”と論理“１”のいずれであるかを認識させる認識ビットを前記プログラム動作時に書き込む第２手段とを具備したことを特徴とする。
このように構成することにより最大プログラムビット数はｎ／２となるため最大のプログラム回数を従来の約半分とすることができる。
【０００９】
また好ましい実施の形態として、前記制御回路は、プログラムが通常メモリセルの状態を論理“１”から論理“０”に遷移させることを指す時には、論理“０”に属するビットの個数が論理“１”に属するビットの個数を超えている時、前記入力されるｎビットのプログラムデータを反転させてプログラムし、反転情報を前記認識ビットに書き込むように構成する。
このように構成することにより、認識ビットを参照することにより初期状態が論理“０”に設定されていることが分かる。
【００１０】
また、好ましい実施の形態として、前記制御回路は、一度にプログラム可能なビット数をｍ（ｍは整数：ｍ＜ｎ／２）とし、最大分割プログラム回数がｎ／２ｍの値、もしくはその値より大きく、一番近い整数回となるようにプログラム動作を行うように構成する。
これにより、最大分割プログラム回数が従来の約半分となる。
【００１１】
さらに、好ましい実施の形態として、前記制御回路は、ｎ／２ビットのプログラムデータと前記認識ビットとを書き込むのに十分なプログラム電流容量でプログラム動作を行うように構成する。
これにより、プログラム電流容量が従来の約半分で済む。
【００１２】
さらに、好ましい実施の形態として、前記制御回路は、前記指定されたアドレスに対し、プログラム動作に先立って、ｎビットデータを読み出し、前記指定されたアドレスに対応するメモリセルがプログラムされていない初期状態にあるか否かを確認するように構成する。
これにより、プログラム動作に先立って初期状態が論理“１”に設定されているのか論理“０”に設定されているのかを判定することができる。
【００１３】
さらに、本発明は、データを記憶するメモリセルにより構成されるメモリセルアレイと、前記メモリセルアレイからデータを読み出すリード動作と、前記メモリセルアレイに対してデータを書き込むプログラム動作とを制御する制御回路とを備えた不揮発性半導体記憶装置において、指定されたアドレスに対し入力されるｎ（ｎは整数）ビットのプログラムデータを同時にプログラムする場合に、論理“０”に属するビットの個数のみをカウント、もしくは論理“１”に属するビットの個数のみをカウント、もしくは両方のビットの個数をカウントし、カウント数がｎ／２以下であった方の論理を初期状態として前記プログラムデータを再生成し、その再生成されたプログラムデータに基づいて前記プログラム動作を行う第１手段と、前記指定されたアドレスのメモリセルの前記初期状態が論理“０”と論理“１”のいずれであるかを認識させる認識ビットを前記プログラム動作時に書き込む第２手段と、前記指定されたアドレスにデータが書き込まれているか否かを判別する初期ビットを書き込む第３手段とを具備したことを特徴とする。
このように構成することにより、初期ビットを参照することにより指定されたアドレスが初期状態か否かを判別することが出来、それに応じて入力されたｎビットに対する最大プログラムビット数をｎ／２となるように設定することが出来る。
【００１４】
また、好ましい実施の形態として、前記制御回路は、前記プログラム動作時に前記認識ビットと前記初期ビットとを書き込むように構成する。
これにより、入力データが反転してプログラムされたかどうか、指定アドレスが書き込まれているか否かの判定を行うことが出来る。
【００１５】
また、好ましい実施の形態として、前記制御回路は、一度にプログラム可能なビット数をｍ（ｍは整数：ｍ＜ｎ／２）とし、最大分割プログラム回数が（ｎ＋１）／２ｍの値、もしくはその値より大きく、一番近い整数となるようにプログラム動作を行うように構成する。
これにより、最大分割プログラム回数が従来の約半分となる。
【００１６】
また、好ましい実施の形態として、前記制御回路は、一度にプログラム可能なビット数をｍ（ｍは整数：ｍ＜ｎ／２＋１）とし、最大分割プログラム回数がｎ／２ｍの値、もしくはその値より大きく、一番近い整数回となるようにプログラム動作を行うように構成する。
これにより、最大分割プログラム回数が従来の約半分となる。
【００１７】
また、好ましい実施の形態として、前記制御回路は、ｎ／２ビットのプログラムデータと前記認識ビットと前記初期ビットとを書き込むのに十分なプログラム電流容量でプログラム動作を行うように構成する。
これにより、プログラム電流容量が従来の約半分で済む。
【００１８】
さらに、好ましい実施の形態として、前記制御回路は、前記指定されたアドレスに対し、プログラム動作に先立って、前記初期ビットのデータに基づいて前記指定されたアドレスに対応するメモリセルがプログラムされていない初期状態にあるのか否かを確認するように構成する。
これにより、初期ビットを確認することによりプログラム動作に先立って、初期状態が、論理“１”に設定されているのか論理“０”に設定されているのかを判定することができる。
【発明の効果】
【００１９】
本発明によれば、指定されたアドレスに対し入力されるプログラムデータを同時にプログラムする場合のプログラム回数を約半分に減らすことが出来る。また、プログラム時のプログラム電流容量を減らすことが出来るため、チップ面積を減らすことが出来る。
【発明を実施するための最良の形態】
【００２０】
以下、本発明に係る不揮発性半導体装置の実施の形態を添付の図面を参照して詳細に説明する。
【００２１】
図１は、本発明の実施の形態に係る不揮発性半導体記憶装置１００の概略構成を示す図である。メモリセルアレイ１０２は、複数のワード線と複数のビット線とを含み、複数のワード線と複数のビット線の交点にメモリセルがマトリクス状に配置されている。このメモリセルアレイ１０２にはワード線制御回路１１０とビット線制御回路１０８が接続されている。
【００２２】
ワード線制御回路１１０は、メモリセルアレイ１０２中の所定のワード線を選択し、読み出し（リード）、書き込み（プログラム）、消去に必要な電圧を印加する回路である。ローデコーダ１１２はワード線制御回路１１０を制御することで所定のワード線を選択する回路である。
【００２３】
ビット線制御回路１０８は、後述するように複数のデータラッチ回路を含み、ビット線を介してメモリセルアレイ１０２中のメモリセルのデータを読み出したり、ビット線を介してメモリセルアレイ１０２中のメモリセルの状態を検出（ベリファイ）したり、ビット線を介してメモリセルアレイ１０２中のメモリセルに書き込み電圧を印加してメモリセルに書き込みを行う回路である。また、ビット線制御回路１０８にはカラムゲート１１４、カラムデコーダ１１６、データ入出力回路１１８が接続されている。
【００２４】
ビット線制御回路１０８内の図示しないデータラッチ回路は、カラムゲート１１４とカラムデコーダ１１６によって選択され、データラッチ回路に読み出されたメモリセルアレイのデータは、データ入出力回路１１８を介してデータ入出力端子Ｉ／Ｏから外部へ出力される。また、外部からデータ入出力端子Ｉ／Ｏに入力された書き込みデータは、データ入出力回路１１８を介して、カラムゲート１１４、カラムデコーダ１１６によって選択されたデータラッチ回路に入力される。
【００２５】
本発明では、指定されたアドレスのメモリセルの初期状態が論理“０”と論理“１”のいずれであるかを認識し、これを認識ビットとして格納しておく。そのための認識ビットメモリアレイ１０４がメモリアレイ１０２に近接して設けられている。認識ビットはプログラム動作時に制御回路１２０によって書き込まれる。
【００２６】
さらに本発明では、プログラムが通常メモリセルの状態を論理“１”から論理“０”に遷移させることを指す時には、論理“０”に属するビットの個数が論理“１”に属するビットの個数を超えている時、入力されるｎビットのプログラムデータを反転させてメモリセルアレイ１０２に入力する。そのためにデータ反転回路１０６をメモリセルアレイ１０２と、ビット線制御回路１０８との間に設けている。
データ反転回路１０６は制御回路１２０により制御されており、反転が行なわれたか否かの反転情報は、認識ビットとして認識ビットメモリセルアレイ１０４に書き込まれる。
【００２７】
制御回路１２０は、不揮発性半導体記憶装置１００全体の制御を行う回路であり、ワード線制御回路１１０、ローデコーダ１１２、ビット線制御回路１０８、カラムゲート１１４、カラムデコーダ１１６、データ入出力回路１１８、高電圧発生回路１２２、認識ビットメモリセルアレイ１０４、データ反転回路１０６を制御することで、読み出し、書き込み、消去動作等の各種制御を行う。
【００２８】
制御回路１２０には、外部からチップイネーブル信号／ＣＥ、書き込みイネーブル信号／ＷＥと、リードイネーブル信号／ＲＥ、コマンドラッチイネーブル信号ＣＬＥ、アドレスラッチイネーブル信号ＡＬＥ、ライトプロテクト信号／ＷＰが入力され、レディー・ビジー信号ＲＹ／ＢＹが外部に出力されている。また、データ入出力端子Ｉ／Ｏから入力されるアドレス、データ、及びコマンドがデータ入出力回路１１８を介して制御回路１２０に入力される。
【００２９】
高電圧発生回路１２２は、不揮発性半導体記憶装置１００が、読み出し、書き込み、消去動作を実行するのに必要な電圧を発生する回路である。
このような不揮発性半導体記憶装置１００において、メモリセルアレイ１０２中のメモリセルにデータをプログラムして格納する場合には、メモリセルのフローティングゲートに電子を注入する。この場合、通常、フローティングゲートに電子が溜まっていない状態を論理“１”とし、注入により電子が溜まっている状態を論理“０”として認識している。
そして、外部から入力されるｎビットのプログラムデータは、同時にプログラムされる場合には、論理値のカウント数がｎ／２以下であった方の論理を初期状態としてプログラムデータを再生成して、メモリセルアレイ１０２へ書き込まれる。
【００３０】
図２は、本発明の動作原理を説明するための図で、（Ａ）はメモリセルのフローティングゲートに電子が溜まっている状態を論理“０”と定義した場合を示している。また（Ｂ）はフローティングゲートに電子が溜まっていない状態を論理“０”と定義した場合を示している。本発明では初期状態が論理“０”と論理“１”のいずれであるかを認識させるための認識ビットを認識ビットメモリセルアレイ１０４に設け、この認識ビットをプログラム動作時に書き込む。
【００３１】
図１（Ａ）の場合には、認識ビットは“１”と、図１（Ｂ）の場合には“０”と書き込まれる。
本発明では、指定されたアドレスに対し入力されるｎ（ｎは整数）ビットのプログラムデータを同時にプログラムする場合に、論理“０”に属するビットの個数のみをカウント、もしくは論理“１”に属するビットの個数のみをカウント、もしくは両方のビットの個数をカウントし、カウント数がｎ／２を超えている方の論理を初期状態と定義する。
【００３２】
図１（Ａ）の場合には、論理“０”のビット数ａがプログラムビット数ｎの１／２以下なので、論理“１”が初期状態と定義される。図１（Ｂ）の場合には、論理“０”のビット数ａがプログラムビット数ｎの１／２を超えているため、論理“０”が初期状態と定義される。そして初期状態に応じてプログラムデータを再生成し、その再生成されたプログラムデータに基づいてプログラム動作が行われる。図１（Ｂ）の場合には論理“０”が初期状態と定義されているため、入力されるｎビットのプログラムデータを反転させてプログラムを行う。そしてプログラムとは通常メモリセルの状態を論理“１”から論理“０”に遷移させることを指し、認識ビットの論理の判定に関しては通常通りとする時、反転情報を“０”として認識ビットに書き込む。
【００３３】
図２（Ａ）の場合には、論理“１”が初期状態と定義されているため、入力されるプログラムデータを反転させる必要はない。
この場合認識ビットには“１”が書き込まれる。
このように、プログラムを行ったｎビットに対し、メモリセルの初期状態が論理“０”と論理“１”のどちらであるかを認識させるビットをプログラムすることでプログラムしたデータと外部に出力するデータとの整合性をとることが出来る。
【００３４】
図３は、本発明の半導体記憶装置を書き込み回数を向上させるために使用する場合の方法を説明するための図である。
ｎビットのデータを同時にプログラムする時、必要な電流を生成するチャージポンプの面積などの関係から一度にプログラム出来るビット数がｍビットであると制約を受ける時、ｎビット全てをプログラムする場合、従来の方法ではｎ／ｍ回、もしくはその値より大きく、一番近い整数回必要となる。
【００３５】
本発明を用いると入力されたｎビットに対する最大プログラムビット数はｎ／２となるため、最大分割プログラム回数を従来の約半分とすることが出来る。
また、本発明の半導体記憶装置は、書き込み時の電流を減らすことを可能とする。
【００３６】
ｎビットのデータを同時にプログラムする時、一度にｎビット全てをプログラムする場合は、ｎビット分のデータをプログラムするための電流容量が必要となる。本発明を用いると最大プログラムビット数がｎ／２となるため、一度にプログラムする際に必要となる電流容量もｎ／２となる。したがってチャージポンプのサイズもそれにあわせて縮小化することが出来る。
【００３７】
次に図４乃至図１２を参照して、本発明の不揮発性半導体記憶を用いて、書き込み回数を減らす方法又は書き込み電流を減らす方法を説明する。
図４は、入力データｎビットに対し、ベリファイ判定をｍビット毎に行いながら書き込みを行うことで書き込み回数を減らす場合の動作フローチャートである。
図５は、入力データｎビットに対し、ｍビット毎に書き込みを行いｎビットすべてを書き込んだ後、ベリファイ判定をｎビット一度に行うことで書き込み回数を減らす場合の動作フローチャートである。
【００３８】
まず、図４のケースについて指定されたアドレスに対し、ｎビットのデータをプログラムする場合（ステップ３００）について説明する。
【００３９】
まず、プログラム前に指定されたアドレスの状態が初期状態にあるか否かを調べる必要がある。そこで、指定されたアドレスに対し、ｎビットデータを全て読み出し、初期状態であるか否かを確認する（ステップ３０２）。そして、データに“０”がなく、認識ビットも反転していない（初期状態）場合にはステップ３０４に移行し、データに“０”がある場合にはステップ３０６に移行する。ステップ３０４において、入力データの個数判定を行い、データ“０”の個数がｎ／２を超えている場合には、ステップ３０８に移行し、データ“０”の個数がｎ／２以下の場合には、ステップ３１０に移行する。
【００４０】
ステップ３０８では、入力データを反転して書き込みデータとする。即ち、データ“０”はデータ“１”に、データ“１”はデータ“０”に反転した後に書き込まれる。
ステップ３１０では、入力データは反転されることなく、そのまま書き込まれる。
【００４１】
ステップ３０２において、データに“０”がある場合には、ステップ３０６において認識ビットの確認を行う。認識ビットが反転している場合、ステップ３１２に移行し、入力データを反転して書き込みデータとする。
反転していない場合、ステップ３１４に移行し、入力データを反転することなく書き込みデータとする。
【００４２】
ここで、認識ビットは、入力データが反転してプログラムされたかどうかを判定するために使用するビットであり、本発明において特に設けられたものである。そして、認識ビットを確認することにより、すでに書き込まれているアドレスに対して追加書き込みをする場合、以前の状態に合わせて入力データを反転するか否かを決めることができる。
【００４３】
図４のケースでは、プログラムをｍビットずつ行うため、書き込みデータの個数判定を行う（ステップ３１６，３３０，３４２，３５４）。個数判定は次のようにして行うことが出来る。
【００４４】
データ“０”の個数（実際に書き込みを行うデータ）をｋとし、ベリファイがパスする毎にｋ′＝ｋ′−ｍを計算し、計算されたｋ′の値が０以上なら、さらにプログラムを行い、０となった時点でプログラムを終了する。個数判定の結果を分割プログラム回数と称する。
【００４５】
ステップ３１６においてｋ′＞０の場合には、書き込みデータのプログラムを行う（ステップ３１８）。そして、始めて入力データを反転してｍビットの書き込みが行なわれるので、認識ビットに“０”を書き込む（ステップ３１９）。
ステップ３１６において、ｋ′＝０の場合には、プログラム動作を正常に終了する（ステップ３２６）。
【００４６】
次いで、書き込み（プログラム）が正常に行なわれたか否かのベリファイ判定を行う（ステップ３２２）。判定にパスした場合は、ステップ３１６に戻って書き込みデータの個数判定を行い、次の書き込みデータがあれば、書き込みを行う。フェイルの場合には、マックスループ判定を行う（ステップ３２４）。マックスループ判定は、予かじめ定めた書き込み回数に達したか否かを判定するものである。即ち、ベリファイ判定でフェイルとなった場合は、書き込みが正常に行なわれていないので、再度書き込み動作を行う必要があるが、無限に書き込み動作を繰返すわけにはいかないので上限（マックス）を設け、マックス以下ならば再度書き込み動作を行い、ベリファイ判定を行う。フェイルがマックスに達するとプログラムを終了する。この場合、プログラム異常終了となる（ステップ３２８）。
【００４７】
ステップ３３０〜３４０、ステップ３４２〜３５２、ステップ３５４〜３６４のフローは、上述したステップ３１６〜３２８のフローと同様であるので詳細な説明は省略する。ステップ３３０〜３４０、ステップ３４２〜３５２、ステップ３５４〜３６４のフローにおいては、認識ビットに“０”を書き込む認識ビットプログラムは行なわれない。何故なら、入力データを反転して入力する必要がないか、あるいは既に“０”が書き込まれて認識ビットが反転しているからである。このように認識ビットのプログラムは１回のみ行なわれる。
【００４８】
図５のケースの場合も、図４のケースの場合と同様な動作フローにより書き込みが行なわれる。図５のケースの場合には、ベリファイ判定をｎビット一度に行うため、書き込みデータ個数判定（ステップ３２１，３３３，３４５，３５８）以前に書き込みデータプログラム（ステップ３１８，３３２，３４４，３５６）が行なわれる点及びベリファイ判定（ステップ３２２，３３４，３４６，３５９）においてｎビット全てをベリファイする点が相違している。
【００４９】
この場合の書き込みデータの個数判定（ステップ３２１，３３３，３４５，３５８）は、次のようにして行うことができる。データ“０”の個数（実際に書き込みを行うデータ）をｋとし、個数判定する際に１回プログラムを行う毎にｋ′＝ｋ′−ｍを計算し、計算されたｋ′の値が０以上なら、さらにプログラムを行い、０となった時点でプログラムを終了する。個数判定の結果を分割プログラム回数と称する。
【００５０】
図６は、入力データｎビットが１６ビットで一度に書き込むｍビットが４ビットの場合の分割プログラム回数を従来の場合と比較して示したものである。従来のワーストケースは、Ｄ０〜Ｄ１５のすべてのビットがデータ“０”の場合である。この場合には、分割プログラム回数は４となる。
【００５１】
そこで、本発明の方法を用いて、データ“０”＞ｎ／２なので入力データを反転させ認識ビットに“０”を書き込むと、データ“０”の個数は１となる。この場合、分割プログラム回数は１となる。
同様に、ケース(1)、ケース(2)、ケース(3)のようなビット配置について本発明の方法を用いた場合を図に示している。
【００５２】
図６から明らかなように、従来の方法では分割プログラム回数の最大値は４回となるが、本発明の場合は、最大値は２回となり、プログラム回数を減らすことが出来ることを示している。
このように、一度にｍビットしか書き込みが出来ない場合、本発明によれば最大書き込み回数をｎ／２ｍ回、もしくはその値より大きく、一番近い整数回とすることが出来、従来の約半分とすることが出来る。
【００５３】
図７、図８は、初期ビットを確認して、書き込みを行う場合の動作フローチャートである。ここで初期ビットは、プログラムする際の指定アドレスが書き込まれているかの判定に使うビットであり、本発明において特に設けられたものである。
【００５４】
図４や図５に示すフローでは、初期ビットを用いていないので、プログラム動作前に指定アドレスのｎビット全てを読み出して初期状態にあるか否かを調べる必要があった。初期ビットを設けることにより、追加書き込みを行いたい場合、初期状態かどうかの判定が容易になる。しかし、書き込むビットが増えるという欠点がある。
【００５５】
図７は、ベリファイ判定をｍビット毎に行うケースの動作フローチャートを図８はベリファイ判定を一度に行うケースの動作フローチャートをそれぞれ示している。
そして、図７は図４に、図８は図５にそれぞれ対応している。図７、図８の動作フローチャートにおいて、図４、図５の動作フローチャートとの違いは、初期ビットが書き込まれているか否かの確認を行うステップ３０１を設けたことと、ステップ３０１において、初期ビットが書き込まれていないと確認されたときに、初期ビットを書き込むステップ３２０，３３２を設けたことである。なお初期ビットの書き込みは１回のみで良い。
【００５６】
従って、図７、図８において、図４、図５と同一のステップについては同一符号を付し、その説明は省略する。
図７、図８のフローチャートの場合、ステップ３０１において初期ビットを確認することにより、指定されたアドレスが初期状態か否かを判定するように構成されている。書き込んでいない（初期状態）場合にはステップ３０４に移行し、書き込んでいる場合はステップ３０６に移行する。
【００５７】
図９、図１０は初期ビットを用いて分割プログラム回数を減らす場合を従来の場合と比較して示した図である。図９は、入力データｎビットが１６ビットで一度に書き込むｍビットが４ビットの場合を、図１０は入力データｎビットが１６ビットで一度に書き込むｍビットが５ビットの場合をそれぞれ示している。
図９、図１０からも明らかなように、初期ビットを確認して行う本発明の書き込みの場合にも、書き込むビット数は増えても分割プログラム回数を減らすことが出来る。
【００５８】
図１１、図１２は、入力データｎビットに対し、データ反転回路を組み込んで書き込みを行うことで書き込み電流を減らす場合の動作フローチャートである。
図１１は、初期ビットを用いないで行う場合の、図１２は初期ビットを用いて行う場合のフローチャートをそれぞれ示している。
図１１及び図１２で同一ステップには同一符号を付している。
【００５９】
図１１に示すフローチャートについて、まず、指定されたアドレスに対し、ｎビットのデータをプログラムする場合（ステップ４００）について説明する。
指定されたアドレスに対し、ｎビットデータを全て読み出し、初期状態であるか否かを確認する（ステップ４０２）。そして、データに“０”がなく、認識ビットも反転していない（初期状態）場合にはステップ４０４に移行し、データに“０”がある場合にはステップ４０６に移行する。ステップ４０４において、入力データの個数判定を行い、データ“０”の個数がｎ／２を超えている場合には、ステップ４０８に移行し、データ“０”の個数がｎ／２以下の場合には、ステップ４１０に移行する。
【００６０】
ステップ４０８では、入力データを反転して書き込みデータとする。即ち、データ“０”はデータ“１”に、データ“１”はデータ“０”に反転した後に書き込まれる。
ステップ４１０では、入力データは反転されることなく、そのまま書き込まれる。
ステップ４０２において、データに“０”がある場合には、ステップ４０６において認識ビットの確認を行う。認識ビットが反転している場合、ステップ４１２に移行し、入力データを反転して書き込みデータとする。
反転していない場合、ステップ４１４に移行し、入力データを反転することなく書き込みデータとする。
【００６１】
ステップ４１６，４２８，４４０，４５０においては、書き込みデータのプログラムが、ステップ４１７においては認識ビットのプログラムが行なわれる。書き込みデータのプログラムと認識ビットのプログラムが行なわれた後は、ベリファイ判定（ステップ４２０，４３２，４４２，４５２）とマックスループ判定（ステップ４２２，４３４，４４４，４５４）が行なわれるが、これらのステップの詳細な説明については、図４のフローチャートで説明したのと同様であるため省略する。
このように、入力データｎビットに対し、データ反転回路を組み込むことで、最大書き込みビットはｎ／２となる。従って、ｎビットを一度に書き込む場合にｎ／２ビット＋認識ビット分の電流容量があれば良い。
【００６２】
図１２の初期ビットを確認して書き込みを行うフローチャートの場合には、図１１のフローチャートの場合と比較して、初期ビットを確認するステップ４０１と、初期ビットをプログラムするステップ４１８が追加される。
ここで初期ビットは、プログラムする際の指定アドレスが書き込まれているかの判定に使うビットであり、本発明において特に設けられたものである。
なお、図１２において図１１と同一のステップについては、同一符号を付し、その説明は省略する。
【００６３】
図１２のフローチャートの場合、ステップ４０１において初期ビットを確認することにより、指定されたアドレスが初期状態か否かを判定するように構成されている。書き込んでいない（初期状態）場合にはステップ４０４に移行し、書き込んでいる場合はステップ４０６に移行する。
初期ビットを確認して行う本発明の書き込みの場合には、ｎ／２ビット＋認識ビット＋初期ビット分の電流容量があれば良い。
【図面の簡単な説明】
【００６４】
【図１】本発明の実施形態に係る不揮発性半導体装置の概略構成を示す図。
【図２】本発明の動作原理を説明するための図。
【図３】書き込み回数を向上させるために使用する場合の方法を説明するための図。
【図４】書き込み回数を減らす場合の動作フローチャート（ベリファイ判定をｍビット毎に行うケース）。
【図５】書き込み回数を減らす場合の動作フローチャート（ベリファイ判定をｎビット一度に行うケース）。
【図６】本発明と従来技術とのプログラム回数の比較図（ｎ＝１６，ｍ＝４の場合）。
【図７】書き込み回数を減らす場合の動作フローチャート（初期ビット確認、ベリファイ判定をｍビット毎に行うケース）。
【図８】書き込み回数を減らす場合の動作フローチャート（初期ビット確認、ベリファイ判定をｎビット一度に行うケース）。
【図９】本発明と従来技術とのプログラム回数の比較図（初期ビット確認、ｎ＝１６，ｍ＝４の場合）。
【図１０】本発明と従来技術とのプログラム回数の比較図（初期ビット確認、ｎ＝１６，ｍ＝５の場合）。
【図１１】書き込み電流を減らす場合の動作フローチャート。
【図１２】書き込み電流を減らす場合の動作フローチャート（初期ビットを確認する場合）。
【図１】
2010129154.tif 000003
【図２】
2010129154.tif 000004
【図３】
2010129154.tif 000005
【図４】
2010129154.tif 000006
【図５】
2010129154.tif 000007
【図６】
2010129154.tif 000008
【図７】
2010129154.tif 000009
【図８】
2010129154.tif 000010
【図９】
2010129154.tif 000011
【図１０】
2010129154.tif 000012
【図１１】
2010129154.tif 000013
【図１２】
2010129154.tif 000014