(57)【特許請求の範囲】
【請求項１】
処理対象ビットの１つ下位ビットに対応する識別符号を受け取り、当該処理対象ビットに割り当てる識別符号を書き込み対象の全ビットに対して生成する識別符号生成回路と、
最大同時書き込み可能ビット数を超えない範囲において、前記生成された識別符号に基づいて平均化された同時書き込みを行うビット数を算出する同時書き込みビット数算出回路と、
前記算出された同時書き込みビット数に従って書き込み範囲を算出する書き込み範囲算出回路と、
書き込みデータ、前記生成された識別符号および前記算出された書き込み範囲に基づいてプログラムパルスを生成するプログラムパルス生成回路と、を有することを特徴とする不揮発性半導体記憶装置。
【請求項２】
請求項１に記載の不揮発性半導体記憶装置において、
前記識別符号生成回路および前記プログラムパルス生成回路は、前記書き込み対象の全ビットのそれぞれに対して設けられ、
前記各識別符号生成回路は、最下位ビットに対して識別符号として「０」を出力し、実際にデータを書き込むビットごとに「１」を加算した符号を対応する各ビットの識別符号として出力することを特徴とする不揮発性半導体記憶装置。
【請求項３】
請求項１または２に記載の不揮発性半導体記憶装置において、
前記同時書き込みビット数算出回路は、実際にデータを書き込むビット数を、前記最大同時書き込み可能ビット数で割った余りが存在する場合には、該最大同時書き込み可能ビット数よりも小さく平均化された所定のビット数を出力し、
前記実際にデータを書き込むビット数を、前記最大同時書き込み可能ビット数で割った余りが存在しない場合には、該最大同時書き込み可能ビット数を出力することを特徴とする不揮発性半導体記憶装置。
【請求項４】
請求項３に記載の不揮発性半導体記憶装置において、
前記最大同時書き込み可能ビット数は、４ビットであり、
前記同時書き込みビット数算出回路は、前記実際にデータを書き込むビット数を、前記４ビットの最大同時書き込み可能ビット数で割った余りが存在する場合には、３ビットの所定のビット数を出力し、
前記実際にデータを書き込むビット数を、前記４ビットの最大同時書き込み可能ビット数で割った余りが存在しない場合には、該４ビットの最大同時書き込み可能ビット数を出力することを特徴とする不揮発性半導体記憶装置。
【請求項５】
請求項４に記載の不揮発性半導体記憶装置において、
前記同時書き込みビット数算出回路は、
前記実際にデータを書き込むビット数を、前記４ビットの最大同時書き込み可能ビット数で割った余りが存在するか否かを、該実際にデータを書き込むビット数の下位２ビットの値から判断することを特徴とする不揮発性半導体記憶装置。
【請求項６】
処理対象ビットの１つ下位ビットに対応する識別符号を受け取り、当該処理対象ビットに割り当てる識別符号を書き込み対象の全ビットに対して生成し、
最大同時書き込み可能ビット数を超えない範囲において、前記生成された識別符号に基づいて平均化された同時書き込みを行うビット数を算出し、
前記算出された同時書き込みビット数に従って書き込み範囲を算出し、
書き込みデータ、前記生成された識別符号および前記算出された書き込み範囲に基づいてプログラムパルスを生成して同時書き込みを行うことを特徴とする不揮発性半導体記憶装置の書き込み制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この出願で言及する実施例は、不揮発性半導体記憶装置およびそのデータ書き込み方法に関する。
【背景技術】
【０００２】
近年、様々な電子機器において、フラッシュメモリ等の不揮発性半導体記憶装置が使用されている。この不揮発性半導体記憶装置に対するデータ書き込みは、複数ビットごと或いは１ビットごとに行っている。
【０００３】
具体的に、不揮発性半導体記憶装置のデータ書き込み処理は、例えば、ビット線から５Ｖ程度の電圧を印加して行うが、最大同時書き込み可能ビット数は、その５Ｖの電圧を生成する電源回路の能力に依存する。
【０００４】
さらに、例えば、１ビットごとに書き込みを行う１ビット書き込みと、４ビットごとに書き込みを行う４ビット書き込みでは、電源回路の能力の余裕にギャップが存在する。
【０００５】
そのため、プログラム上では、メモリセルの書き込み電圧が特定の閾値電圧を超えれば問題ないが、その後で消去を行う場合、各メモリセルにおける閾値電圧のばらつきが消去回数に悪影響を与えることになる。
【０００６】
ところで、従来、書き込みパルスをカウンタで制御し、同時書き込み処理を行う不揮発性半導体記憶装置としては、様々なものが提案されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−０８５８９６号公報
【特許文献２】特開２００２−１０９８９４号公報
【特許文献３】特開平０７−１２２０８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従来、複数ビットごとの書き込み処理を行う場合、例えば、その所定ビット数の書き込みを行った後に端数（余り）が生じると、その端数のビットに対する書き込み処理を最後に行っていた。
【０００９】
具体的に、最大同時書き込み可能ビット数が４ビットの場合、４ビットごとの書き込み処理を行い、最後に、端数ビットの書き込み処理を行っている。
【００１０】
すなわち、端数ビットが３ならばその３ビットを、端数ビットが２ならばその２ビットを、そして、端数ビットが１ならばその１ビットを、最後の書き込み処理で書き込んでいた。
【００１１】
しかしながら、複数ビットの同時書き込みを行う場合、各書き込み処理の間で同時書き込みを行うビット数が異なると、電源回路に与える負荷が変化する。その結果、例えば、プログラムの後で消去を行う場合、各メモリセルにおける閾値電圧がばらついて消去回数に悪影響を与えることになっていた。
【００１２】
或いは、各メモリセルにおける閾値電圧のばらつきを抑えるために、電源回路（または、不揮発性半導体記憶装置（メモリマクロ）における電源部）の容量を大きくして余裕を持たせるように設計していた。
【課題を解決するための手段】
【００１３】
一実施形態によれば、識別符号生成回路と、同時書き込みビット数算出回路と、書き込み範囲算出回路と、プログラムパルス生成回路と、を有することを特徴とする不揮発性半導体記憶装置が提供される。
【００１４】
前記識別符号生成回路は、書き込み対象の全ビットに対して割り当てる識別符号を生成する。また、前記ビット数算出回路は、最大同時書き込み可能ビット数を超えない範囲において、前記生成された識別符号に基づいて平均化された同時書き込みを行うビット数を算出する。
【００１５】
さらに、前記書き込み範囲算出回路は、前記算出された同時書き込みビット数に従って書き込み範囲を算出する。そして、前記プログラムパルス生成回路は、書き込みデータ、前記生成された識別符号および前記算出された書き込み範囲に基づいてプログラムパルスを生成する。
【発明の効果】
【００１６】
開示の不揮発性半導体記憶装置およびそのデータ書き込み方法は、負荷を平均化して複数ビットの同時書き込み処理を行うことができるという効果を奏する。
【図面の簡単な説明】
【００１７】
【図１】図１は、一実施例の不揮発性半導体記憶装置の全体を示すブロック図である。
【図２】図２は、図１の不揮発性半導体記憶装置におけるメモリセルコアの一例を示す図である。
【図３】図３は、図１の不揮発性半導体記憶装置におけるプログラムパルス制御回路の一例を概略的に示すブロック図である。
【図４】図４は、図３のプログラムパルス制御回路の動作を、従来例と比較して示す図である。
【図５】図５は、図１の不揮発性半導体記憶装置におけるプログラムパルス制御回路の一例をより詳細に示すブロック図である。
【図６】図６は、図５のプログラムパルス制御回路におけるＩＤ生成回路の一例を示すブロック図である。
【図７】図７は、図５のプログラムパルス制御回路における同時書き込みビット数算出回路の一例を示すブロック図である。
【図８】図８は、図５のプログラムパルス制御回路における書き込み終了検出回路の一例を示すブロック図である。
【図９】図９は、図５のプログラムパルス制御回路における書き込み範囲算出回路の一例を示すブロック図である。
【図１０】図１０は、図５のプログラムパルス制御回路におけるプログラムパルス生成回路の一例を示すブロック図である。
【図１１】図１１は、図５のプログラムパルス制御回路の動作の一例を説明するためのタイミング図である。
【発明を実施するための形態】
【００１８】
以下、不揮発性半導体記憶装置の実施例を、添付図面を参照して詳述する。図１は、一実施例の不揮発性半導体記憶装置（メモリマクロ）の全体を示すブロック図であり、また、図２は、図１の不揮発性半導体記憶装置におけるメモリセルコアの一例を示す図である。
【００１９】
図１において、参照符号１はプログラムパルス制御回路、２はメモリセルコア、３はロウデコーダ、４はセンスアンプ、５はアンプブロック、６は周辺回路（制御回路）、７は電源回路を示す。
【００２０】
プログラムパルス制御回路１は、周辺回路６に設けられ、後に詳述するように、入力データDATA-INおよびベリファイデータVERIDATAを受け取り、プログラムパルス（プログラムデータ）PGMDATAを出力する。
【００２１】
図２に示されるように、メモリセルコア２は、複数のローカルビット線ＬＢＬ、複数のソース線ＳＬ、複数のワード線ＷＬ、および、複数のメモリセルトランジスタＭＣを有する。
【００２２】
各メモリセル（メモリセルトランジスタ）ＭＣは、それぞれ各ローカルビット線ＬＢＬ，各ソース線ＳＬおよび各ワード線ＷＬに接続されてマトリクス状に設けられている。
【００２３】
ロウデコーダ３は、周辺回路６からのアドレス信号ADDRESSに従って任意のワード線ＷＬを選択し、また、アンプブロック５およびセンスアンプ４（コラムデコーダ）は、アドレス信号ADDRESSに従って任意のビット線（ローカルビット線ＬＢＬ）を選択する。
【００２４】
すなわち、センスアンプ４は、ローカルビット線ＬＢＬを介して、ワード線ＷＬにより選択されたメモリセルＭＣからのデータを読み出し、或いは、選択されたメモリセルＭＣに対して所定の電圧を与えて書き込み（プログラム）および消去処理を行う。
【００２５】
また、アンプブロック５は、周辺回路６および電源回路７と、センスアンプ４を介したメモリセルコア２との間の信号を増幅して制御する。なお、センスアンプ４では、ローカルビット線ＬＢＬとグローバルビット線ＧＢＬとの接続も制御している。
【００２６】
周辺回路６は、プログラムパルス制御回路１，ロウデコーダ３，センスアンプ４およびアンプブロック５の各制御信号を生成して、メモリセルコア２における読み出し，書き込み，ベリファイおよび消去の各処理を制御する。
【００２７】
電源回路７は、例えば、メモリセルコア２における書き込み（プログラム）を行うメモリセルＭＣに対し、ローカルビット線ＬＢＬを介して印加する５Ｖの電圧を生成する。
【００２８】
すなわち、プログラムパルス制御回路１（周辺回路６）から出力されるプログラムパルスPGMDATAと、アドレスADDRESSによるコラム（ビット線）の選択によって、電源回路７で生成された電圧ＶＨ（５Ｖ電源）をどのローカルビット線ＬＢＬに通すかが選択される。
【００２９】
ここで、各メモリセルＭＣは、フローティングゲートを有し、例えば、そのメモリセルＭＣに接続されたローカルビット線ＬＢＬを５Ｖ、ワード線ＷＬを９Ｖ、そして、ソース線ＳＬを０Ｖとすることで、データ『０』を書き込むようになっている。
【００３０】
このとき、メモリセルＭＣに対する書き込みは、消去状態のメモリセルに書き込みを行うため、５Ｖの電源電圧が印加されているローカルビット線ＬＢＬからソース線ＳＬ側に電流は流れて電力が消費されることになる。
【００３１】
なお、図１に示す不揮発性半導体記憶装置は、例えば、メモリマクロとして様々な半導体集積回路に組み込むことができるが、単体のメモリに適用することもできる。また、図１では、１つのメモリセルコア２のみが描かれているが、複数バンクとしてもよいのはいうまでもない。
【００３２】
図３は、図１の不揮発性半導体記憶装置におけるプログラムパルス制御回路の一例を概略的に示すブロック図である。図３に示されるように、プログラムパルス制御回路１は、書き込みデータ生成部１１、ＩＤ（識別符号：identification）生成部１２およびプログラムパルス生成部１３を有する。
【００３３】
書き込みデータ生成部１１は、入力データDATA-INおよびベリファイデータVERIDATAを受け取って、書き込みデータWRITE-DATAを生成する。すなわち、例えば、書き込み対象のメモリセルＭＣからのベリファイデータVERIDATAが入力データDATA-INに一致して書き込み（プログラムパルスの印加）が不要となるまで、そのメモリセルＭＣに対する書き込みデータWRITE-DATAが生成される。
【００３４】
ＩＤ生成部１２は、書き込みデータWRITE-DATAおよび１つ下位ビットの識別符号（ＩＤ）id-bit(k-1)を受け取って、そのビット（ｋ）の識別符号id-bitkを生成する。なお、最下位ビット（ＬＳＢ [0]）では、１つ下位ビットの識別符号を『０』として処理する。
【００３５】
プログラムパルス生成部１３は、書き込みデータWRITE-DATA，識別符号id-bitkおよび書き込み範囲（idmax, idmin）を受け取って、書き込み対象のメモリセルＭＣに対するプログラムパルスPGMDATAを生成する。
【００３６】
図４は、図３のプログラムパルス制御回路の動作を、従来例と比較して示す図である。図４において、参照符号１００および２００は、それぞれ従来のプログラムパルス制御回路の動作を示し、また、参照符号３００は、図３のプログラムパルス制御回路の動作を示す。
【００３７】
なお、図４では、識別符号[ID]および書き込みビットを１６進数で示しており、例えば、実際に書き込みを行う１０〜１４ビット目（１０進数表記）は、１６進数表記によりａ〜ｅとして記載している。
【００３８】
また、一例として、書き込み対象の全ビット数を、bit0〜bit31の３２ビットと仮定し、また、実際にデータを書き込むビット数を、１４ビットと仮定し、さらに、最大同時書き込み可能ビット数を、４ビットと仮定している。ここで、最大同時書き込み可能ビット数は、例えば、電源回路の容量に依存するもので、一度の書き込み処理で同時に書き込むことのできるビット数を示している。
【００３９】
図４において、書き込みデータは、「32'hce0f1ab7」とされている。すなわち、図４は、消去状態『１』のメモリセルＭＣに対してデータ『０』を書き込むビット（[DT]が『０』のビット）が、bit3, bit6, bit8, bit10, bit13, bit14, bit15, bit20, bit21, bit22, bit23, bit24, bit28, bit29の１４ビットの場合を示している。
【００４０】
まず、参照符号１００で示されるように、従来のプログラムパルス制御回路の一例の動作としては、３２ビットの書き込み対象の全ビットを４ビットごとの領域Ｒ０〜Ｒ７に分割し、それら領域Ｒ０〜Ｒ７に対して順に書き込み処理を行う。
【００４１】
ここで、領域Ｒ４の書き込み処理では、その領域Ｒ４に含まれるビットbit16〜bit19の全てがデータ『１』のままなので（データ『０』への書き込みを行わないので）、領域Ｒ４の書き込み処理を飛ばして、４ビットごとの領域に対する書き込み処理を計７回行う。
【００４２】
すなわち、領域Ｒ０，Ｒ１およびＲ６の書き込み処理では、１ビットだけ（bit3, bit6およびbit24）を書き込み、また、領域Ｒ２およびＲ７の書き込み処理では、２ビット（bit8, bit10およびbit28, bit29）を同時に書き込む。
【００４３】
さらに、領域Ｒ３の書き込み処理では、３ビット（bit13, bit14, bit15）を同時に書き込み、そして、領域Ｒ５の書き込み処理では、全ての４ビット（bit20, bit21, bit22, bit23）を同時に書き込む。
【００４４】
しかしながら、この参照符号１００で示す従来のプログラムパルス制御回路の一例は、書き込み処理を７回行わなければならず、さらに、各回の書き込み処理において、１ビットだけの書き込みから４ビット全ての書き込みまで書き込むビット数が大きく異なる。
【００４５】
次に、参照符号２００で示されるように、従来のプログラムパルス制御回路の他の例の動作としては、３２ビットの書き込み対象において、実際にデータを書き込む１４ビットに注目し、その１４ビットに対して４ビットごとの書き込みを行う。
【００４６】
すなわち、４ビットごとに分割された領域Ｒ０〜Ｒ７に捕らわれることなく、最下位ビット（ＬＳＢ）から実際にデータを書き込む４ビットごとを選択して順に書き込み処理を行う。
【００４７】
すなわち、１回目の書き込み処理では、４ビットbit3, bit6, bit8, bit10を同時に書き込み、また、２回目の書き込み処理では、４ビットbit13, bit14, bit15, bit20を同時に書き込む。
【００４８】
さらに、３回目の書き込み処理では、４ビットbit21, bit22, bit23, bit24を同時に書き込み、そして、最後の４回目の書き込み処理では、残りのビットbit28, bit29を同時に書き込む。
【００４９】
しかしながら、この参照符号２００で示す従来のプログラムパルス制御回路の他の例は、書き込み処理の回数は４回だけでよいが、１〜３回目の４ビットの書き込み処理と、最後の４回目の２ビットの書き込み処理では、書き込むビット数が２ビットだけ異なる。
【００５０】
これは、実際にデータを書き込むのが１３ビットの場合、４回目の書き込み処理で１ビットだけを書き込むことになるため、書き込むビット数の相違はより一層大きなものとなる。
【００５１】
このように、参照符号１００で示す従来のプログラムパルス制御回路の一例では、書き込み回数が多いために書き込み処理に要する時間が長くなる。
【００５２】
また、参照符号１００および２００で示す従来のプログラムパルス制御回路の一例および他の例では、各書き込み処理の間で同時書き込みを行うビット数が異なるため、電源回路に与える負荷が変化する。その結果、例えば、プログラムの後で消去を行う場合、各メモリセルにおける閾値電圧がばらついて消去回数に悪影響を与えることになる。
【００５３】
これに対して、参照符号３００で示す図３のプログラムパルス制御回路（本実施例の不揮発性半導体記憶装置）では、書き込み回数を４回にすると共に、各書き込み処理の間で同時書き込みを行うビット数を３または４ビットと１ビットの差に抑えることができる。
【００５４】
参照符号３００で示されるように、図３のプログラムパルス制御回路の動作としては、３２ビットの書き込み対象において、実際にデータを書き込む１４ビットに注目する。そして、この１４ビットを、最大同時書き込み可能ビット数である４で除算し、余りがあれば３ビットの同時書き込みを行う。
【００５５】
すなわち、まず、１４÷４＝３、余り２なので、１回目の書き込み処理として、３ビットbit3, bit6, bit8の同時書き込みを行う。次に、（１４−３）÷４＝２、余り３なので、２回目の書き込み処理として、３ビットbit10, bit13, bit14の同時書き込みを行う。
【００５６】
さらに、（１４−３−３）÷４＝２、余り０なので、３回目の書き込み処理として、４ビットbit15, bit20, bit21, bit22の同時書き込みを行い、さらに、４回目の書き込み処理として、４ビットbit23, bit24, bit28, bit29の同時書き込みを行う。
【００５７】
以上において、ビットbit0〜bit31に対して、実際にデータを書き込む１４ビットに応じてＩＤ（識別符号）を与える。
【００５８】
すなわち、ＬＳＢ側から最初のデータを書き込むビットbit3の前までの３ビットbit0, bit1, bit2には、ＩＤとして「０」を与え、次に、ビットbit3から２番目のデータを書き込むビットbit6の前までの３ビットbit3, bit4, bit5には、ＩＤとして「１」を与える。
【００５９】
さらに、ビットbit6から３番目のデータを書き込むビットbit8の前までの２ビットbit6, bit7には、ＩＤとして「２」を与え、また、ビットbit8から４番目のデータを書き込むビットbit10の前までの２ビットbit8, bit9には、ＩＤとして「３」を与える。
【００６０】
同様にして、１２番目のデータを書き込むビットbit24から１３番目のデータを書き込むビットbit28の前までの４ビットbit24, bit25, bit26, bit27には、ＩＤとして「ｃ」を与え、また、ビットbit28から１４番目のデータを書き込むビットbit29の前までの１ビットbit28には、ＩＤとして「ｄ」を与える。そして、ビットbit29からＭＳＢまでの３ビットbit29, bit30, bit31には、ＩＤとして「e」を与える。
【００６１】
このように、各ビットに対してＩＤを付与し、そのＩＤを使用して、後述する回路により処理することによって、上述した参照符号３００で示す図３のプログラムパルス制御回路の動作を実現することが可能になる。
【００６２】
このように、参照符号３００で示す図３のプログラムパルス制御回路の動作（本実施例の不揮発性半導体記憶装置）によれば、書き込み回数の増加を来すことなく、各書き込み処理の間で同時書き込みを行うビット数の差異を抑えることができる。これにより、電源回路の容量を拡大することなく、負荷を平均化して書き込み処理を行うことが可能になる。
【００６３】
図５は、図１の不揮発性半導体記憶装置におけるプログラムパルス制御回路の一例をより詳細に示すブロック図である。
【００６４】
図５において、参照符号１１は書き込みデータ生成回路、１２0〜１２31は識別符号生成回路（ＩＤ生成回路）、１３0〜１３31はプログラムパルス生成回路、そして、１４は書き込み終了検出回路を示す。また、参照符号１５は同時書き込みビット数算出回路を示し、そして、１６は書き込み範囲算出回路を示す。
【００６５】
ここで、書き込みデータ生成回路１１は、前述した書き込みデータ生成部に相当し、また、ＩＤ生成回路１２0〜１２31およびプログラムパルス生成回路１３0〜１３31は、それぞれＩＤ生成部１２およびプログラムパルス生成部１３に相当する。
【００６６】
図５に示されるように、プログラムパルス制御回路１は、書き込みデータ生成回路１１、書き込み対象ビット数に対応した３２個のＩＤ生成回路１２0〜１２31およびプログラムパルス生成回路１３0〜１３31を有する。
【００６７】
さらに、プログラムパルス制御回路１は、書き込み終了検出回路１４、同時書き込みビット数算出回路１５および書き込み範囲算出回路１６を有する。
【００６８】
図６〜図１０は、図５のプログラムパルス制御回路における各回路の一例を示すものであり、図６はＩＤ生成回路１２k(１２0〜１２31）を示し、また、図７は同時書き込みビット数算出回路１５を示す。さらに、図８は書き込み終了検出回路１４を示し、また、図９は書き込み範囲算出回路１６を示し、そして、図１０はプログラムパルス生成回路１３k(１３0〜１３31）を示す。
【００６９】
図１１は、図５のプログラムパルス制御回路の動作の一例を説明するためのタイミング図であり、前述した図４の参照符号３００で示す書き込み処理に対応している。すなわち、図１１においても、書き込みデータは、前述した図４と同様に「32'hce0f1ab7」とされている。
【００７０】
書き込みデータ生成回路１１は、前述した書き込みデータ生成部に相当するものであり、例えば、書き込み対象の３２ビット分の入力データDATA-IN[31:0]およびベリファイデータVERIDATA[31:0]を受け取って、書き込みデータWRITE-DATA[31:0]を生成する。
【００７１】
図６に示されるように、ＩＤ生成回路１２kは、インバータ１２１および加算機１２２を有し、書き込みデータ生成回路１１からの書き込みデータWRITE-DATA[k]を反転した信号と、１つ下位ビットのＩＤ生成回路１２k-1の出力id-bit(k-1)を加算して出力する。
【００７２】
ここで、書き込みデータWRITE-DATA[k]は、書き込み時に『０』となる信号であり、ＩＤ生成回路１２kは、書き込みデータWRITE-DATAが存在する（『０』となる）場合、単純に１つ下位ビットの識別符号id-bit(k-1)に対して『１』を加算する。なお、ＩＤ生成回路１２0〜１２31は、直列（シーケンシャル）に演算を実行する。
【００７３】
これにより、識別符号id-bit0〜id-bit31（ビットbit0〜bit31のＩＤ）は、図４を参照して説明したように、「０」〜「ｅ」とされる。具体的に、id-bit14は「６」とされ、id-bit15は「７」とされ、そして、id-bit31は「ｅ」とされる。
【００７４】
図７に示されるように、同時書き込みビット数算出回路１５は、加算器（減算器）１５１、オアゲート１５２、ノアゲート１５３およびアンドゲート１５４を有する。ここで、図１１に示されるように、最上位ビットのＩＤ（id-bit31)は「ｅ」であり、書き込みビットの最小ＩＤ（idmin）は、「０」→「３」→「６」→「ａ」と変化する。ここで、プログラム終了信号pdoneは、書き込み処理時には『０』となっている。
【００７５】
加算器１５１は、id-bit31からidminを減算し、その出力Ｃの下位２ビットＣ[0]およびＣ[1]をオアゲート１５２の入力として供給する。従って、オアゲート１５２の入力信号Ｃ[1:0]が両方とも零（『００』）になるまで、すなわち、加算器１５１の出力が４の倍数になるまで、ノアゲート１５３の出力bitn[2]は『１』となり、アンドゲート１５４の出力（bitn[0], bitn[1]）は『１』となる。
【００７６】
同時書き込みビット数算出回路１５は、３ビットの信号bitn[2:0]を出力する。そして、Ｃ[1:0]が『００』になるまでは、bitn[2:0]が『０１１』となって同時書き込みビット数が「３」となり、Ｃ[1:0]が『００』になると、bitn[2:0]が『１００』となって、同時書き込みビット数が「４」となる。
【００７７】
これにより、図１１に示されるように、１回目および２回目の書き込み処理（書き込み１および２）では、３ビットの同時書き込みを行い、３回目および４回目の書き込み処理（書き込み３および４）では、４ビットの同時書き込みを行うことになる。
【００７８】
ところで、同時書き込みビット数の「４」および「３」の組み合わせで表現できない数字は｛１，２，５｝であり、それ以外の数は「４」と「３」の組み合わせで表現することができる。
【００７９】
そのため、例えば、実際にデータを書き込む１４ビットにおいては、余りがなくなるまで３ビットの同時書き込みを行い、余りがなくなった時点から４ビットの同時書き込みを行う。
【００８０】
具体的に、例えば、｛５｝の場合、余りがあるので１度目の書き込みは３ビットの同時書き込みを行い、それ以降は｛２｝と同一条件になる。
【００８１】
また、例えば、｛１，２｝の場合、余りがあるので３ビットの同時書き込みとなるが、書き込みデータが存在しないところは書き込みされないので、それぞれ、１ビットおよび２ビットの同時書き込みになり、期待する動作が実現される。
【００８２】
なお、上述した図７に示す回路では、実際にデータを書き込むデータのビット数を「４」で除算した余りは、単純に下位の２ビットになるので、除算回路は不要となっている。
【００８３】
図８に示されるように、書き込み終了検出回路１４は、比較器１４１およびフリップフロップ１４２を有する。比較器１４１は、最上位ビットのＩＤ（id-bit31)と書き込みビットの最大ＩＤ（idmax）とを比較する。
【００８４】
図１１に示されるように、idmaxは、「３」→「６」→「ａ」→「e」と変化する。ここで、１回目の書き込み処理（書き込み１）のデータは、書き込み電源準備の期間で生成され、また、２回目の書き込み処理（書き込み２）のデータは、書き込み１の期間で生成される。さらに、３回目の書き込み処理（書き込み３）のデータは、書き込み２の期間で生成され、そして、４回目の書き込み処理（書き込み４）のデータは、書き込み３の期間で生成される。
【００８５】
そして、比較器１４１は、idmaxがid-bit31以上になったのを検出すると（idmax≧id-bit31）、信号『１』を出力し、これによりフリップフロップ１４２の出力信号（プログラム終了信号）pdoneが『１』となって書き込み処理を終了する。
【００８６】
図９に示されるように、書き込み範囲算出回路１６は、加算器１６１およびフリップフロップ１６２を有する。加算器１６１は、同時書き込みビット数算出回路１５の出力bitnおよびフリップフロップ１６２の出力（idmin）を受け取り、それらを加算して書き込みビットの最大ＩＤ（idmax）として出力すると共に、フリップフロップ１６２のデータ入力に供給する。
【００８７】
すなわち、書き込み範囲算出回路１６は、同時書き込みビット数算出回路１５からの３ビットの信号bit[2:0]を受け取って、その同時書き込みビット（３または４ビット）に応じて、書き込み範囲idmin, idmaxを生成して出力する。なお、フリップフロップ１６２のリセット端子には、プログラム終了信号pdoneが入力されている。
【００８８】
これにより、図１１に示されるように、idmaxが「３」→「６」→「ａ」→「e」と変化するのに対応して、idminは「０」→「３」→「６」→「ａ」と変化する。
【００８９】
図１０に示されるように、プログラムパルス生成回路１３kは、比較器１３１，１３２、アンドゲート１３３，１３４およびフリップフロップ１３５を有する。比較器１３１は、書き込みビットの最大ＩＤ（idmax）およびビットｋのＩＤ（id-bitk）を受け取り、また、比較器１３２は、書き込みビットの最小ＩＤ（idmin）およびビットｋのＩＤ（id-bitk）を受け取る。
【００９０】
そして、比較器１３１は、id-bitkがidmax以下のとき（idmax≧id-bitk）に『１』を出力し、また、比較器１３２は、id-bitkがidminよりも大きいとき（id-bitk＞idmin）に『１』を出力する。そして、アンドゲート１３３は、比較器１３１および１３２の出力を受け取り、両方の出力が『１』のときに、ビットｋの書き込みイネーブルｅｎ[k]を『１』として出力する。
【００９１】
アンドゲート１３４は、ビットｋの書き込みデータWRITE-DATA[k]を反転入力で受け取ると共に、書き込みイネーブルｅｎ[k]を受け取り、WRITE-DATA[k]が『０』でｅｎ[k]が『１』のときに、『１』を出力する。なお、ビットｋの書き込みデータWRITE-DATA[k]は、『０』のときにデータ書き込みを行うようになっている。
【００９２】
そして、フリップフロップ１３５は、ビットｋのid-bitkがidmaxとidminの間、すなわち、書き込み範囲に含まれ、且つ、そのビットｋにデータを書き込むのときに、クロックＣＫに応じたプログラムパルスPGMDATA[k]を出力することになる。
【００９３】
以上により、図１１に示されるように、１回目〜４回目の書き込み処理（書き込み１〜４の期間）において、プログラムパルスPGMDATA[31:0]は、「32'h00000148」→「32'h00006400」→「32'h00708000」→「32'h61800000」となる。
【００９４】
なお、図１１では、例えば、参照符号ＶＲＤに示されるように、書き込み対象のメモリセルＭＣからのベリファイデータVERIDATAが書き込みデータ「32'hce0f1ab7」に一致してメモリセルＭＣに対する書き込み処理を終了する様子を示している。
【００９５】
ここで、上述したプログラムパルス制御回路１におけるＩＤ生成回路１２k，同時書き込みビット数算出回路１５，書き込み終了検出回路１４，書き込み範囲算出回路１６およびプログラムパルス生成回路１３kは単なる例であり、様々に変形することができる。
【００９６】
このように、本実施例によれば、書き込みするデータ確定後に、全書き込み対象ビットにＩＤを割り当て、そのＩＤを選択することで、同時書き込みを行うビットを制御する。
【００９７】
すなわち、最大同時書き込み可能ビット数内において、プログラム（書き込み）パルスの制御をＩＤの選択で行うことにより、切り替え時の演算ロスを低減し、プログラムパルスの印加時間を低減すると共に、同時書き込みビット数を平均化することができる。
【００９８】
これにより、電源回路の容量を拡大することなく、負荷を平均化して書き込み処理を行うことができる。さらに、各メモリセルの閾値電圧のばらつきを抑制することも可能になる。
【００９９】
以上の実施例を含む実施形態に関し、さらに、以下の付記を開示する。
（付記１）
書き込み対象の全ビットに対して割り当てる識別符号を生成する識別符号生成回路と、
最大同時書き込み可能ビット数を超えない範囲において、前記生成された識別符号に基づいて平均化された同時書き込みを行うビット数を算出する同時書き込みビット数算出回路と、
前記算出された同時書き込みビット数に従って書き込み範囲を算出する書き込み範囲算出回路と、
書き込みデータ、前記生成された識別符号および前記算出された書き込み範囲に基づいてプログラムパルスを生成するプログラムパルス生成回路と、を有することを特徴とする不揮発性半導体記憶装置。
【０１００】
（付記２）
付記１に記載の不揮発性半導体記憶装置において、
前記識別符号生成回路および前記プログラムパルス生成回路は、前記書き込み対象の全ビットのそれぞれに対して設けられ、
前記各識別符号生成回路は、最下位ビットに対して識別符号として「０」を出力し、実際にデータを書き込むビットごとに「１」を加算した符号を対応する各ビットの識別符号として出力することを特徴とする不揮発性半導体記憶装置。
【０１０１】
（付記３）
付記１または２に記載の不揮発性半導体記憶装置において、
前記同時書き込みビット数算出回路は、実際にデータを書き込むビット数を、前記最大同時書き込み可能ビット数で割った余りが存在する場合には、該最大同時書き込み可能ビット数よりも小さく平均化された所定のビット数を出力し、
前記実際にデータを書き込むビット数を、前記最大同時書き込み可能ビット数で割った余りが存在しない場合には、該最大同時書き込み可能ビット数を出力することを特徴とする不揮発性半導体記憶装置。
【０１０２】
（付記４）
付記３に記載の不揮発性半導体記憶装置において、
前記最大同時書き込み可能ビット数は、４ビットであり、
前記同時書き込みビット数算出回路は、前記実際にデータを書き込むビット数を、前記４ビットの最大同時書き込み可能ビット数で割った余りが存在する場合には、３ビットの所定のビット数を出力し、
前記実際にデータを書き込むビット数を、前記４ビットの最大同時書き込み可能ビット数で割った余りが存在しない場合には、該４ビットの最大同時書き込み可能ビット数を出力することを特徴とする不揮発性半導体記憶装置。
【０１０３】
（付記５）
付記４に記載の不揮発性半導体記憶装置において、
前記同時書き込みビット数算出回路は、
前記実際にデータを書き込むビット数を、前記４ビットの最大同時書き込み可能ビット数で割った余りが存在するか否かを、該実際にデータを書き込むビット数の下位２ビットの値から判断することを特徴とする不揮発性半導体記憶装置。
【０１０４】
（付記６）
付記５に記載の不揮発性半導体記憶装置において、
前記同時書き込みビット数算出回路は、
前記実際にデータを書き込むビット数を、前記４ビットの最大同時書き込み可能ビット数で割った余りが存在して３ビットの同時書き込み処理を行った後、
前記実際にデータを書き込むビット数から３ビットを減算した残りのビット数を、前記４ビットの最大同時書き込み可能ビット数で割った余りが存在するか否かを、該実際にデータを書き込むビット数から３ビットを減算した残りのビット数の下位２ビットの値から判断することを特徴とする不揮発性半導体記憶装置。
【０１０５】
（付記７）
付記１〜６のいずれか１項に記載の不揮発性半導体記憶装置において、さらに、
前記書き込み対象の最上位ビットの識別符号よりも、前記書き込み範囲算出回路から出力された書き込みビットの最大値が大きいときに書き込み終了を検出する書き込み終了検出回路を有することを特徴とする不揮発性半導体記憶装置。
【０１０６】
（付記８）
書き込み対象の全ビットに対して割り当てる識別符号を生成し、
最大同時書き込み可能ビット数を超えない範囲において、前記生成された識別符号に基づいて平均化された同時書き込みを行うビット数を算出し、
前記算出された同時書き込みビット数に従って書き込み範囲を算出し、
書き込みデータ、前記生成された識別符号および前記算出された書き込み範囲に基づいてプログラムパルスを生成して同時書き込みを行うことを特徴とする不揮発性半導体記憶装置の書き込み制御方法。
【０１０７】
（付記９）
付記８に記載の不揮発性半導体記憶装置の書き込み制御方法において、
前記識別符号および前記プログラムパルスは、前記書き込み対象の全ビットのそれぞれに対して生成され、
前記各識別符号の生成は、最下位ビットに対して識別符号として「０」を出力し、実際にデータを書き込むビットごとに「１」を加算した符号を対応する各ビットの識別符号として出力することを特徴とする不揮発性半導体記憶装置の書き込み制御方法。
【０１０８】
（付記１０）
付記８または９に記載の不揮発性半導体記憶装置の書き込み制御方法において、
前記同時書き込みビット数の算出は、実際にデータを書き込むビット数を、前記最大同時書き込み可能ビット数で割った余りが存在する場合には、該最大同時書き込み可能ビット数よりも小さく平均化された所定のビット数とし、
前記実際にデータを書き込むビット数を、前記最大同時書き込み可能ビット数で割った余りが存在しない場合には、該最大同時書き込み可能ビット数とすることを特徴とする不揮発性半導体記憶装置の書き込み制御方法。
【０１０９】
（付記１１）
付記１０に記載の不揮発性半導体記憶装置の書き込み制御方法において、
前記最大同時書き込み可能ビット数は、４ビットであり、
前記同時書き込みビット数の算出は、前記実際にデータを書き込むビット数を、前記４ビットの最大同時書き込み可能ビット数で割った余りが存在する場合には、３ビットの所定のビット数とし、
前記実際にデータを書き込むビット数を、前記４ビットの最大同時書き込み可能ビット数で割った余りが存在しない場合には、該４ビットの最大同時書き込み可能ビット数とすることを特徴とする不揮発性半導体記憶装置の書き込み制御方法。
【０１１０】
（付記１２）
付記１１に記載の不揮発性半導体記憶装置の書き込み制御方法において、
前記同時書き込みビット数の算出は、
前記実際にデータを書き込むビット数を、前記４ビットの最大同時書き込み可能ビット数で割った余りが存在するか否かを、該実際にデータを書き込むビット数の下位２ビットの値から判断することを特徴とする不揮発性半導体記憶装置の書き込み制御方法。
【０１１１】
（付記１３）
付記１２に記載の不揮発性半導体記憶装置の書き込み制御方法において、
前記同時書き込みビット数の算出は、
前記実際にデータを書き込むビット数を、前記４ビットの最大同時書き込み可能ビット数で割った余りが存在して３ビットの同時書き込み処理を行った後、
前記実際にデータを書き込むビット数から３ビットを減算した残りのビット数を、前記４ビットの最大同時書き込み可能ビット数で割った余りが存在するか否かを、該実際にデータを書き込むビット数から３ビットを減算した残りのビット数の下位２ビットの値から判断することを特徴とする不揮発性半導体記憶装置の書き込み制御方法。
【０１１２】
（付記１４）
付記８〜１３のいずれか１項に記載の不揮発性半導体記憶装置の書き込み制御方法において、さらに、
前記書き込み対象の最上位ビットの識別符号よりも、前記書き込み範囲の算出で得られた書き込みビットの最大値が大きいときに書き込み終了を検出することを特徴とする不揮発性半導体記憶装置の書き込み制御方法。
【符号の説明】
【０１１３】
１    プログラムパルス制御回路
２    メモリセルコア
３    ロウデコーダ
４    センスアンプ
５    アンプブロック
６    周辺回路（制御回路）
７    電源回路
１１    書き込みデータ生成部（書き込みデータ生成回路）
１２    ＩＤ生成部
１２k（１２0〜１２31）    識別符号生成回路（ＩＤ生成回路）
１３    プログラムパルス生成部
１３k（１３0〜１３31）    プログラムパルス制御回路
１４    書き込み終了検出回路
１５    同時書き込みビット数算出回路
１６    書き込み範囲算出回路
ＧＢＬ    グローバルビット
ＬＢＬ    ローカルビット
ＭＣ    メモリセルトランジスタ（メモリセル）
ＳＬ    ソース線
【図１】
0005702573.tif 000002
【図２】
0005702573.tif 000003
【図３】
0005702573.tif 000004
【図４】
0005702573.tif 000005
【図５】
0005702573.tif 000006
【図６】
0005702573.tif 000007
【図７】
0005702573.tif 000008
【図８】
0005702573.tif 000009
【図９】
0005702573.tif 000010
【図１０】
0005702573.tif 000011
【図１１】
0005702573.tif 000012