(57)【要約】【課題】ベリファイ動作を高速化出来る半導体記憶装置を提供すること。【解決手段】閾値電圧に応じてｎビット（ｎ＞２）を保持するメモリセルトランジスタと、読み出しデータを増幅するセンスアンプと、プログラムデータの１〜ｎビット目の値を保持する第１乃至第ｎラッチ回路と、前記第１乃至第ｎラッチ回路から転送された前記値と、前記読み出しデータとの論理演算を行う演算器とを具備し、“ｉ”データをベリファイする際には、前記第１乃至第ｎラッチ回路のうちで、前記“ｉ”データをプログラムする際に保持する前記値が有効データとなるものから前記値が転送され、前記第１乃至第ｎラッチ回路のうち、“ｊ”データ（ｊは“０”〜“２ｎ−２”のいずれか）プログラム時に前記有効データを保持するものの組み合わせは、前記“ｊ”データよりも前記閾値電圧の高いデータのプログラム時における前記組み合わせと異なる。【選択図】図２
2009054246.tif 000002
【特許請求の範囲】
【請求項１】
電荷蓄積層と制御ゲートとを含む積層ゲートを備え、閾値電圧に応じて“０”データ〜“２ｎ−１”データのｎビット（ｎは２以上の自然数）データを保持可能なメモリセルトランジスタと、
ベリファイ動作時において、前記メモリセルトランジスタから読み出された前記データを増幅するセンスアンプと、
プログラム動作時及び前記ベリファイ動作時において、前記メモリセルトランジスタにプログラムすべきプログラムデータにおける１〜ｎビット目の値をそれぞれ保持する第１乃至第ｎラッチ回路と、
前記ベリファイ動作時において、前記第１乃至第ｎラッチ回路のうちの少なくともいずれかから転送された前記値と、前記センスアンプで増幅された前記データとの論理演算を行う演算器と
を具備し、“ｉ”データ（ｉは“１”〜“２ｎ−１”のいずれか）をベリファイする際には、前記第１乃至第ｎラッチ回路のうちで、前記“ｉ”データをプログラムする際に保持する前記値が有効データとなるものから、前記演算器に対して前記値が転送され、
前記第１乃至第ｎラッチ回路のうち、“ｊ”データ（ｊは“０”〜“２ｎ−２”のいずれか）がプログラムされる際に前記有効データを保持するものの組み合わせは、前記“ｊ”データよりも前記閾値電圧の高いデータがプログラムされる全ての場合における前記組み合わせと異なる
ことを特徴とする半導体記憶装置。
【請求項２】
前記演算器は、前記転送された前記値が全て有効データであり、且つ、前記センスアンプで増幅された前記データが、前記メモリセルトランジスタの閾値電圧がベリファイレベルよりも高いことを示す値であった場合、前記第１乃至第ｎラッチ回路のいずれかに保持される無効データを前記有効データに書き換える
ことを特徴とする請求項１記載の半導体記憶装置。
【請求項３】
前記第１乃至第ｎラッチ回路の各々に保持される前記値を組み合わせて得られるｎビットのコードは、前記“０”〜“２ｎ−１”の順に昇順または降順の値である
ことを特徴とする請求項１記載の半導体記憶装置。
【請求項４】
グレイコードで記述されたｎビットの前記プログラムデータの各ビットを、前記第１乃至第ｎラッチ回路のそれぞれに転送する制御回路を更に備え、
前記制御回路は、前記第１乃至第ｎラッチ回路内の前記値を、前記第１乃至第ｎラッチ回路の各々に保持される前記値を組み合わせて得られるｎビットのコードが、前記“０”〜“２ｎ−１”の順に昇順または降順の値となるよう変換する
ことを特徴とする請求項３記載の半導体記憶装置。
【請求項５】
第（ｎ＋１）ラッチ回路を更に備え、
前記ベリファイ動作は、前記メモリセルトランジスタの閾値電圧が、第１ベリファイレベルよりも高いか否かを判定する第１ベリファイ動作と、前記第１ベリファイレベルよりも高い第２ベリファイレベルよりも高いか否かを判定する第２ベリファイ動作を含み、
前記演算器は、前記第１ベリファイ動作時において、前記読み出した前記値が全て有効データであり、且つ、前記センスアンプで増幅された前記データが、前記メモリセルトランジスタの閾値電圧が前記第１ベリファイレベルよりも高いことを示す値であった場合、前記第（ｎ＋１）ラッチ回路に前記有効データをセットし、且つ
前記第２ベリファイ動作時において、前記転送された前記値が全て有効データであり、且つ、前記センスアンプで増幅された前記データが、前記メモリセルトランジスタの閾値電圧が前記第２ベリファイレベルよりも高いことを示す値であった場合、前記第１乃至第ｎラッチ回路のいずれかに保持される無効データを前記有効データに書き換え、
前記第１ベリファイ動作において前記センスアンプで増幅された前記データが、前記メモリセルトランジスタの閾値電圧が前記第１ベリファイレベルよりも低いことを示す値であった場合には、前記メモリセルトランジスタのドレインに対して第１電圧が印加されることにより前記プログラム動作が行われ、
前記第１ベリファイ動作において前記センスアンプで増幅された前記データが、前記メモリセルトランジスタの閾値電圧が前記第１ベリファイレベルよりも高いことを示す値であり、且つ前記第２ベリファイ動作において前記センスアンプで増幅された前記データが、前記メモリセルトランジスタの閾値電圧が前記第２ベリファイレベルよりも低いことを示す値であった場合には、前記メモリセルトランジスタのドレインに対して前記第１電圧よりも高い第２電圧が印加されることにより前記プログラム動作が行われる
ことを特徴とする請求項１記載の半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、半導体記憶装置に関する。例えば、多値ＮＡＮＤ型フラッシュメモリのベリファイ動作に関する。
【背景技術】
【０００２】
従来、不揮発性の半導体メモリとしてＮＡＮＤ型フラッシュメモリが知られている。ＮＡＮＤ型フラッシュメモリでは、データの書き込み動作において、メモリセルの閾値電圧が所定のレベルまで達しているかを確認するためのベリファイ動作が行われる。この際、ベリファイすべきデータの各ビットをラッチ回路に保持させ、このラッチ回路から読み出したデータと、メモリセルから読み出したデータとを比較することによって、ベリファイ動作を行う手法が提案されている（例えば特許文献１参照）。
【０００３】
この手法では、ベリファイすべきデータがグレイコード（Gray code）で記述される。これは、ＮＡＮＤ型フラッシュメモリと外部との間で行われるデータの授受が、グレイコードを用いて行われるためである。
【０００４】
しかし、上記手法であると、ベリファイすべきデータの全ビットをラッチ回路から読み出す必要がある。従って、ベリファイ動作に長時間を要し、更にはベリファイすべきデータ毎に、ベリファイに要する時間が異なるという問題があった。
【特許文献１】米国特許出願公開第２００５／０１９５６５３号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００５】
この発明は、ベリファイ動作を高速化出来る半導体記憶装置を提供する。
【課題を解決するための手段】
【０００６】
この発明の一態様に係る半導体記憶装置は、電荷蓄積層と制御ゲートとを含む積層ゲートを備え、閾値電圧に応じて“０”データ〜“２ｎ−１”データのｎビット（ｎは２以上の自然数）データを保持可能なメモリセルトランジスタと、ベリファイ動作時において、前記メモリセルトランジスタから読み出された前記データを増幅するセンスアンプと、プログラム動作時及び前記ベリファイ動作時において、前記メモリセルトランジスタにプログラムすべきプログラムデータにおける１〜ｎビット目の値をそれぞれ保持する第１乃至第ｎラッチ回路と、前記ベリファイ動作時において、前記第１乃至第ｎラッチ回路のうちの少なくともいずれかから転送された前記値と、前記メモリセルトランジスタで増幅された前記データとの論理演算を行う演算器とを具備し、“ｉ”データ（ｉは“１”〜“２ｎ−１”のいずれか）をベリファイする際には、前記第１乃至第ｎラッチ回路のうちで、前記“ｉ”データをプログラムする際に保持する前記値が有効データとなるものから、前記演算器に対して前記値が転送され、前記第１乃至第ｎラッチ回路のうち、“ｊ”データ（ｊは“０”〜“２ｎ−２”のいずれか）がプログラムされる際に前記有効データを保持するものの組み合わせは、前記“ｊ”データよりも前記閾値電圧の高いデータがプログラムされる全ての場合における前記組み合わせと異なる。
【発明の効果】
【０００７】
本発明によれば、ベリファイ動作を高速化出来る半導体記憶装置を提供出来る。
【発明を実施するための最良の形態】
【０００８】
以下、この発明の実施形態につき図面を参照して説明する。この説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
【０００９】
［第１の実施形態］  
この発明の第１の実施形態に係る半導体記憶装置について図１を用いて説明する。図１は、本実施形態に係る８値（8-levels）ＮＡＮＤ型フラッシュメモリのブロック図である。図示するようにＮＡＮＤ型フラッシュメモリ１は、メモリセルアレイ２、ロウデコーダ３、ソース線ドライバ４、ページバッファ５、ベリファイ回路６、制御回路７、電圧発生回路８、及び入出力バッファ９を備えている。
【００１０】
メモリセルアレイ２は、複数のメモリセルトランジスタを備えている。各メモリセルトランジスタのゲートはワード線に接続され、ドレインはビット線に電気的に接続され、ソースはソース線に電気的に接続されている。ロウデコーダ３は、メモリセルアレイ２のロウ方向を選択する。すなわち、ワード線を選択する。ソース線ドライバ４は、ソース線に電圧を印加する。ページバッファ５は、データの読み出し時においてはメモリセルトランジスタから読み出したデータをセンス・増幅し、書き込み時においては書き込みデータを保持する。ベリファイ回路６は、データの書き込み時においてベリファイを行う。メモリセルアレイ２、ロウデコーダ３、ページバッファ５、及びベリファイ回路６の詳細については後述する。
【００１１】
入出力バッファ９は、外部からコマンド、アドレス、及び書き込みデータを受け取り、またメモリセルアレイから読み出した読み出しデータを外部へ出力する。
【００１２】
制御回路７は、ベリファイ回路６及び電圧発生回路８の動作を制御する。制御回路７は、書き込み時には書き込みシーケンスを実行し、電圧発生回路８に電圧の発生を命令すると共に、ベリファイ回路６の動作を制御する。また、入出力バッファ９で受信した書き込みデータをベリファイ回路６へ転送する。
【００１３】
電圧発生回路８は、制御回路７の命令に従って電圧を発生する。電圧発生回路８で発生された電圧は、ロウデコーダ３、ソース線ドライバ４、及びページバッファ５等に与えられる。
【００１４】
次に図２を用いてメモリセルアレイ２、ロウデコーダ３、ページバッファ５、及びベリファイ回路６の詳細について説明する。図２は、メモリセルアレイ２、ロウデコーダ３、ページバッファ５、及びベリファイ回路６の詳細を示すブロック図である。
【００１５】
まずメモリセルアレイ２について説明する。図示するようにメモリセルアレイ２は、複数のＮＡＮＤセルを有している。図２では１行のＮＡＮＤセルのみを示している。以下、説明の簡単化のため、ＮＡＮＤセルが１行の場合を例に説明を行う。ＮＡＮＤセルの各々は、３２個のメモリセルトランジスタＭＴ０〜ＭＴ３１と、選択トランジスタＳＴ１、ＳＴ２とを含んでいる。以下では、説明の簡潔化のために、メモリセルトランジスタＭＴ０〜ＭＴ３１を区別しない場合には、単にメモリセルトランジスタＭＴと呼ぶことがある。メモリセルトランジスタＭＴは、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層（例えば浮遊ゲート）と、電荷蓄積層上にゲート間絶縁膜を介在して形成された制御ゲートとを有する積層ゲート構造を備えている。なお、メモリセルトランジスタＭＴの個数は３２個に限られず、８個や１６個であってもよく、その数は限定されるものではない。メモリセルトランジスタＭＴは、隣接するもの同士でソース、ドレインを共有している。そして、選択トランジスタＳＴ１、ＳＴ２間に、その電流経路が直列接続されるようにして配置されている。直列接続されたメモリセルトランジスタＭＴの一端側のドレインは選択トランジスタＳＴ１のソースに接続され、他端側のソースは選択トランジスタＳＴ２のドレインに接続されている。
【００１６】
同一行にあるメモリセルトランジスタＭＴの制御ゲートはワード線ＷＬ０〜ＷＬ３１のいずれかに共通接続され、同一行にあるメモリセルの選択トランジスタＳＴ１、ＳＴ２のゲートは、それぞれセレクトゲート線ＳＧＤ、ＳＧＳに共通接続されている。また、メモリセルアレイにおいて同一列にある選択トランジスタＳＴ１のドレインはビット線ＢＬ０〜ＢＬｍ（ｍは自然数）のいずれかに共通接続される。選択トランジスタＳＴ２のソースはソース線ＳＬに共通接続される。なお、選択トランジスタＳＴ１、ＳＴ２は必ずしも両方必要ではなく、ＮＡＮＤセルを選択出来るのであればいずれか一方のみが設けられていても良い。
【００１７】
上記構成のメモリセルアレイ２において、同一のワード線ＷＬに接続された複数のメモリセルトランジスタＭＴには、一括してデータが書き込まれる。このデータが書き込まれる単位を「ページ」と呼ぶ。本実施形態では、同一のワード線に接続された（ｍ＋１）個のメモリセルトランジスタＭＴに対して、一括してデータが書き込まれるものと仮定する。また、データの読み出しも書き込みと同じ単位により行われるものとする。
【００１８】
上記メモリセルアレイ２内におけるメモリセルトランジスタＭＴの閾値分布について図３を用いて説明する。図３は、横軸に閾値電圧Ｖthをとり、縦軸にメモリセルトランジスタＭＴの存在確率を示したグラフである。
【００１９】
図示するように、各々のメモリセルトランジスタＭＴは８種のデータ（３ビットデータ）を保持出来る。すなわちメモリセルトランジスタＭＴは、閾値電圧Ｖthの低い順に“０”、“１”、“２”、“３”、…“７”の８種のデータを保持出来る。
【００２０】
メモリセルトランジスタＭＴにおける“０”データの閾値電圧Ｖth０は、Ｖth０＜Ｖ０１である。“１”データの閾値電圧Ｖth１は、Ｖ０１＜Ｖth１＜Ｖ１２である。“２”データの閾値電圧Ｖth２は、Ｖ１２＜Ｖth２＜Ｖ２３である。“３”データの閾値電圧Ｖth３は、Ｖ２３＜Ｖth３＜Ｖ３４である。“４”データの閾値電圧Ｖth４は、Ｖ３４＜Ｖth４＜Ｖ４５である。“５”データの閾値電圧Ｖth５は、Ｖ４５＜Ｖth５＜Ｖ５６である。“６”データの閾値電圧Ｖth６は、Ｖ５６＜Ｖth６＜Ｖ６７である。“７”データの閾値電圧Ｖth７は、Ｖ６７＜Ｖth７である。このようにメモリセルトランジスタＭＴは、閾値電圧に応じて“０”データ〜“７”データの３ビットデータを保持可能とされている。
【００２１】
図２に戻って説明を続ける。ロウデコーダ３は、入出力バッファ９から与えられるロウアドレス信号ＲＡに基づいてワード線ＷＬ０〜ＷＬ３１のいずれか、及びセレクトゲート線ＳＧＤ、ＳＧＳを選択する。そして、選択したワード線ＷＬ及びセレクトゲート線ＳＧＤ、ＳＧＳに電圧を供給する。更にロウデコーダ３は、メモリセルが形成されている半導体基板に電圧を与える。これらの電圧は、電圧発生回路８によって与えられる。
【００２２】
次にページバッファ５について説明する。ページバッファ５は、ビット線ＢＬ０〜ＢＬｍ毎に設けられたセンスアンプ１０−０〜１０−ｍを備えている。メモリセルアレイ２からデータを読み出す際には、センスアンプ１０−０〜１０−ｍはそれぞれ、ビット線ＢＬ０〜ＢＬ−ｍに読み出されたデータをセンスして増幅する。またデータを書き込む際には、センスアンプ１０−０〜１０−ｍは、各ビット線ＢＬ０〜ＢＬｍに接続されたメモリセルトランジスタＭＴへの書き込みデータをそれぞれ保持する。以下、センスアンプ１０−０〜１０−ｍを区別しない場合には、単にセンスアンプ１０と呼ぶ。
【００２３】
ベリファイ回路６は、ビット線ＢＬ０〜ＢＬｍ毎、すなわちセンスアンプ１０−０〜１０−ｍ毎に設けられた演算回路２０−０〜２０−ｍを備えている。演算回路２０−０〜２０−ｍの各々は、演算器２１−０〜２１−ｍ、第１ラッチ回路２２−０〜２２−ｍ、第２ラッチ回路２３−０〜２３−ｍ、第３ラッチ回路２４−０〜２４−ｍ、及びＭＯＳトランジスタ２５−０〜２５−ｍをそれぞれ備えている。以下、演算回路２０−０〜２０−ｍを単に演算回路２０、演算器２１−０〜２１−ｍを単に演算器２１、第１ラッチ回路２２−０〜２２−ｍを単に第１ラッチ回路２２、第２ラッチ回路２３−０〜２３−ｍを単に第２ラッチ回路２３、第３ラッチ回路２４−０〜２４−ｍを単に第３ラッチ回路２４、及びＭＯＳトランジスタ２５−０〜２５−ｍを単にＭＯＳトランジスタ２５と呼ぶことがある。
【００２４】
第１〜第３ラッチ回路２２〜２４の各々は、データの書き込みの際に、対応するビット線ＢＬに接続されたメモリセルトランジスタＭＴに書き込むべき３ビットデータの各ビットを保持する。すなわち、第１〜第３ラッチ回路２２−０、２３−０、２４−０には、ビット線ＢＬ０に接続されたメモリセルトランジスタＭＴに書き込むべき３ビットデータの各ビットが保持される。また第１〜第３ラッチ回路２２−ｍ、２３−ｍ、２４−ｍには、ビット線ＢＬｍに接続されたメモリセルトランジスタＭＴに書き込むべき３ビットデータの各ビットが保持される。
【００２５】
演算器２０は、初期値として“１”データを保持し、この初期値と、対応するセンスアンプ１０内のデータと、対応する第１〜第３ラッチ回路２２〜２４内のデータとのＡＮＤ演算を行う。すなわち、演算器２０−０は、初期値と、センスアンプ１０−０内のデータと、第１〜第３ラッチ回路２２−０、２３−０、２４−０内のデータとのＡＮＤ演算を行う。また演算器２０−ｍは、初期値と、センスアンプ１０−ｍ内のデータと、第１〜第３ラッチ回路２２−ｍ、２３−ｍ、２４−ｍ内のデータとのＡＮＤ演算を行う。
【００２６】
ＭＯＳトランジスタ２５は、ゲートに信号ＴＤが入力され、第２ラッチ回路２３に与えられたデータを、第１ラッチ回路２２及び第３ラッチ回路２４へと転送する。ベリファイ回路６の動作の詳細については後述する。
【００２７】
次に、上記構成のＮＡＮＤ型フラッシュメモリの動作について説明する。  
［データの書き込み動作］  
図４を用いて、本実施形態に係るＮＡＮＤ型フラッシュメモリにおけるデータの書き込み動作について説明する。データの書き込み動作は、大まかにはプログラム動作とベリファイ動作との繰り返しである。プログラム動作とは、書き込みデータに応じてメモリセルトランジスタＭＴへの電荷の注入／非注入を行って、メモリセルトランジスタＭＴの閾値電圧を所望の値に設定する動作である。また、ベリファイ動作はプログラム動作の後に行われ、メモリセルトランジスタＭＴからデータを読み出して当該メモリセルトランジスタＭＴの閾値電圧が所望の範囲内にあるか否かを確かめる動作である。図４は、本実施形態に係るＮＡＮＤ型フラッシュメモリにおける書き込み動作のフローチャートである。
【００２８】
図示するように、まずＮＡＮＤフラッシュメモリ１に、書き込みコマンド、アドレス、及び書き込みデータ（３ビットデータ）が入力される（ステップＳ１０）。ＮＡＮＤ型フラッシュメモリ１では、これらの信号を入出力バッファ９で受け取る。そして入出力バッファ９は、ロウアドレスＲＡをロウデコーダ３へ転送し、書き込みコマンド及び書き込みデータを制御回路７へ転送する。なお、外部から与えられる書き込みデータは、グレイコード（Gray code）として与えられる。
【００２９】
次に制御回路７は、書き込みデータをベリファイ回路６へ転送し、３ビットデータ（グレイコード）の各ビットを第１〜第３ラッチ回路２２−０〜２４−０へセットする（ステップＳ１１）。なお、書き込みデータは入出力バッファ９からベリファイ回路６へ直接転送されても良い。書き込みデータの転送方法について、以下説明する。なお、ビット線ＢＬ０〜ＢＬｍの各々に接続されたメモリセルトランジスタＭＴへの書き込みデータ（グレイコード）の下位ビットをそれぞれＢlow−０〜Ｂlow−ｍ、中位ビットをそれぞれＢmid−０〜Ｂmid−ｍ、上位ビットをそれぞれＢup−０〜Ｂup−ｍとする。
【００３０】
制御回路７はまず、例えば下位ビットＢlow−０〜Ｂlow−ｍからなる（ｍ＋１）ビットデータをベリファイ回路６へ転送し、これらのデータをそれぞれ第２ラッチ回路２３−０〜２３−ｍへ格納する。この際、制御回路７は信号ＴＤ＝“Ｈ”レベルとして、ＭＯＳトランジスタ２５−０〜２５−ｍをオン状態とする。これにより、第２ラッチ回路２３−０〜２３−ｍ内のＢlow−０〜Ｂlow−ｍは、第１ラッチ回路２２−０〜２２−ｍへそれぞれ転送される。
【００３１】
次に制御回路７は、中位ビットＢmid−０〜Ｂmid−ｍをそれぞれ第２ラッチ回路２３−０〜２３−ｍへ格納する。そして第２ラッチ回路２３−０〜２３−ｍ内のＢmid−０〜Ｂmid−ｍは、第３ラッチ回路２４−０〜２４−ｍへそれぞれ転送される。最後に制御回路７は、上位ビットＢup−０〜Ｂup−ｍを第２ラッチ回路２３−０〜２３−ｍへそれぞれ転送する。以上により、グレイコードである書き込みデータがベリファイ回路６にセットされる。
【００３２】
ステップＳ１１の後、制御回路７はベリファイ回路６の演算回路２０−１〜２０−ｍの各々に保持される書き込みデータを、グレイコードからバイナリコードへと変換する（ステップＳ１２）。すなわち、第１〜第３ラッチ回路の各々に保持されるデータを組み合わせて得られる３ビットのコードが、書き込みデータ“０”〜“７”の順に昇順または降順の値となるように変換する。本実施形態では、第１ラッチ回路２２に保持されるビットを下位ビット、第２ラッチ回路２３に保持されるビットを中位ビット、第３ラッチ回路に保持されるビットを上位ビットとした場合に、これらによって得られる３ビットのコードが書き込みデータ“０”〜“７”の順に降順となるように変換される。
【００３３】
制御回路７によって得られるバイナリコードを図５に示す。図５は、書き込みデータと、第１〜第３ラッチ回路２２〜２４に保持されるデータとの関係を示す表である。第１ラッチ回路２２に保持されるビットを“ｂ１”、第２ラッチ回路２３に保持されるビットを“ｂ２”、第３ラッチ回路２４に保持されるビットを“ｂ３”とすると、得られるコードは（ｂ３、ｂ２、ｂ１）である。書き込みデータが“０”であった場合には、ｂ１＝“１”、ｂ２＝“１”、ｂ３＝“１”とされ、得られるコードは（１１１）である。また書き込みデータが“１”であった場合には、得られるコードは（１１０）である。以下、書き込みデータが“２”〜“７”の場合には、得られるコードは（１０１）〜（０００）となる。このように、制御回路７はラッチ回路２２〜２４の保持するデータの組み合わせを、グレイコードから図５に示すようなバイナリコードに変換する。
【００３４】
また、制御回路７はプログラム回数ｉをカウントする。最初はｉ＝１とされる（ステップＳ１３）。そして制御回路７の命令に応答して、電圧発生回路８がプログラム電圧Ｖpgm−ｉを生成して、ロウデコーダ３へ供給する（ステップＳ１４）。
【００３５】
そしてプログラム動作が行われる（ステップＳ１５）。すなわち、ロウデコーダ３がロウアドレスＲＡに対応するワード線ＷＬを選択して、選択したワード線ＷＬに対してプログラム電圧Ｖpgm−ｉを印加する。また、各演算回路２０−０〜２０−ｍは、それぞれの第１〜第３ラッチ回路２２〜２４にセットされた値に応じて、プログラムデータをページバッファ５（センスアンプ１０−０〜１０−ｍ）にセットする。プログラムデータは、演算器２１におけるＡＮＤ演算結果である。つまり、第１〜第３ラッチ回路２２〜２３の少なくともいずれかが保持するデータが“０”であると、演算器２１におけるＡＮＤ演算結果は“０”となる。他方、第１〜第３ラッチ回路２２〜２３の全ての保持するデータが“１”であれば、ＡＮＤ演算結果は“１”となる。この演算結果が、ページバッファ５のセンスアンプ１０にプログラムデータとして転送される。
【００３６】
プログラムデータが“０”である場合には、センスアンプ１０は対応するビット線ＢＬに０Ｖを与える。すると、メモリセルトランジスタＭＴの電荷蓄積層に電荷が注入され、当該メモリセルトランジスタＭＴの閾値電圧は上昇する。他方、プログラムデータが“１”である場合には、センスアンプ１０は対応するビット線ＢＬに正電圧（例えば３Ｖ）を与える。すると、メモリセルトランジスタＭＴの電荷蓄積層に電荷は注入されず、当該メモリセルトランジスタＭＴの閾値電圧は変化しない。
【００３７】
プログラム動作が終了すると、制御回路７はベリファイ回路６に対してベリファイ動作を命令する。この命令に応答してベリファイ回路６は、“１”〜“７”データの各々についてベリファイを行う（ステップＳ１６）。ベリファイ動作の詳細は後述する。
【００３８】
ベリファイ動作が終了すると、制御回路７はプログラム動作が所定の回数だけ行われたか否か（または、全てのデータについてのベリファイにパスしたか否か）を確認し、所定の回数に達した（またはパスした）場合には（ステップＳ１７、ＹＥＳ）、書き込み動作を終了する。達していない（またはパスしていない）場合には（ステップＳ１７、ＮＯ）、プログラム回数ｉを（ｉ＋１）とする。そしてページバッファ５に改めてプログラムデータがセットされ（ステップＳ１９）、ステップＳ１４に戻る。
【００３９】
以上の書き込み動作の流れを、図６のタイミングチャートを用いて説明する。図６は、図４に示す書き込み動作における、ＮＡＮＤ型フラッシュメモリの状態（ステート）、レディ／ビジー信号（Ｒ／Ｂ信号）、及びロウデコーダ３によって選択されたワード線の電圧を示すタイミングチャートである。なおＲ／Ｂ信号とは、ＮＡＮＤ型フラッシュメモリが外部に向けて出力する信号であり、外部からの信号を受け付け可能なレディ（ready）状態には“Ｈ”レベルとされ、受け付け不能なビジー状態には“Ｌ”レベルとされる。
【００４０】
まず外部から書き込みコマンド、アドレス、及び書き込みデータを受け付けることによって（ステップＳ１０）、ＮＡＮＤ型フラッシュメモリはビジー（busy）状態となる（時刻ｔ１）。そして時刻ｔ１〜ｔ２の期間で、制御回路７は書き込みデータをグレイコードからバイナリコードに変換する（ステップＳ１２）。この変換が終了すると（時刻ｔ２）、プログラム電圧（Program pulse）Ｖpgm１が選択ワード線ＷＬに印加され、時刻ｔ２〜ｔ３の期間にプログラムが行われる（ステップＳ１４、Ｓ１５）。
【００４１】
次に、時刻ｔ３〜ｔ４の期間にベリファイ動作が行われる（ステップＳ１６）。ベリファイは、“１”〜“７”データのそれぞれについて行われる。ベリファイとは、前述の通りメモリセルトランジスタＭＴの閾値電圧が所望の値となっているかを確かめる動作である。従って、例えば“１”データが書き込まれるべきメモリセルトランジスタＭＴをベリファイする際には、ワード線ＷＬにはベリファイ電圧として電圧Ｖ０１（図３参照）が印加される。そして、メモリセルトランジスタＭＴがオンしなければ、閾値電圧Ｖth１はＶ０１より大きいことになるから、ベリファイはパス（pass）する。他方、オンした場合には、閾値電圧Ｖth１はＶ０１より小さいことになるから、ベリファイはミス（miss）する。ミスした場合には、再度プログラムを行って、閾値電圧Ｖth１をＶ０１より高くする必要がある。“２”〜“７”データが書き込まれるべきメモリセルトランジスタＭＴの場合も同様であり、それぞれをベリファイする際には、ワード線には電圧Ｖ１２〜Ｖ６７がそれぞれ印加される。以下、“１”〜“７”データが書き込まれるべきメモリセルトランジスタＭＴのベリファイを、単に“１”〜“７”ベリファイと呼ぶことがある。また、ベリファイ対象となる書き込みデータをベリファイデータと呼ぶことがある。
【００４２】
時刻ｔ４で最初のベリファイが完了すると、次に２回目のプログラムが行われる。２回目以降のプログラムで使用されるプログラム電圧は、前回のプログラム電圧よりもΔＶpgmだけ高く設定される。つまり、２回目のプログラムで使用されるプログラム電圧Ｖpgm２は、（Ｖpgm１＋ΔＶpgm）とされる。また、２回目以降のプログラムは、それ以前に行われたベリファイでミスしたメモリセルトランジスタＭＴに対してのみ行われる。２回目のプログラムが終了すると（時刻ｔ５）、再び時刻ｔ３〜ｔ４と同じ要領でベリファイが行われる。
【００４３】
そして、所定の回数のプログラムが完了すると（または全てのメモリセルトランジスタＭＴが、所望の閾値電圧に到達すると）、書き込み動作は完了する（時刻ｔ８）。従って、ＮＡＮＤ型フラッシュメモリはレディ状態に復帰し、Ｒ／Ｂ信号は“Ｈ”レベルとなる。
【００４４】
［ベリファイ動作］  
次に、図４におけるベリファイ動作の詳細について、特にベリファイ回路６の動作に着目して、図７を用いて説明する。図７は、本実施形態に係るベリファイ動作のフローチャートである。
【００４５】
まずベリファイ回路６は、ベリファイデータｊ＝“１”として（ステップＳ２０）、ベリファイを開始する（ステップＳ２１）。初めに、ベリファイ対象となるメモリセルトランジスタＭＴからデータがビット線ＢＬに読み出される。データはページ単位で読み出される。するとセンスアンプ１０−０〜１０−ｍが、ビット線ＢＬ０〜ＢＬｍに読み出されたデータをそれぞれセンスして増幅する（ステップＳ２２）。
【００４６】
センスアンプ１０におけるセンスの様子について、図８を用いて説明する。図８は、一例としてベリファイデータが“４”（ｊ＝“４”）である場合について示している。この場合、ワード線ＷＬには電圧Ｖ３４（ベリファイ電圧）が印加される。メモリセルトランジスタＭＴの閾値電圧がＶ３４より高ければ、すなわち、“４”データのプログラムが完了していれば、メモリセルトランジスタＭＴはオフ状態となる。従って、ビット線ＢＬの電位はプリチャージ電位のままとなり、センスアンプ１０は読み出しデータとして“１”を保持する。他方、Ｖ３４以下であると、メモリセルトランジスタＭＴはオン状態となる。従って、ビット線ＢＬの電位はプリチャージ電位から下降し、センスアンプ１０は読み出しデータとして“０”を保持する。
【００４７】
次にセンスアンプ１０は、自身が保持する読み出しデータを、対応する演算回路２０の演算器２１に転送する（ステップＳ２３）。すなわち、センスアンプ１０−０〜１０−ｍの保持する読み出しデータが、演算器２０−０〜２０−ｍにそれぞれ転送される。
【００４８】
また演算回路２０内では、ベリファイデータを保持した場合にその値が“１”となるラッチ回路内のデータが、演算器２１に転送される（ステップＳ２４）。つまり、例えばベリファイデータｊ＝“１”である場合、図５で説明したようにｂ２＝“１”、ｂ３＝“１”である。つまり、第２ラッチ回路２３と第３ラッチ回路２４とが“１”を保持する。従って、全ての演算回路２０において、第２ラッチ回路２３−０〜２３−ｍ内のデータと、第３ラッチ回路２４−０〜２４−ｍ内のデータとが、演算器２１−０〜２１−ｍにそれぞれ転送される。
【００４９】
すると、演算器２１は、初期値と、転送されたデータとのＡＮＤ演算を行う。ステップＳ２５で転送されたデータと、ステップＳ２３で転送された読み出しデータとの全てが“１”であれば、演算結果は“１”となる（ステップＳ２６、ＹＥＳ）。この場合、演算器２１は、当該演算器２１に対応する第１〜第３ラッチ回路２２〜２４のうち、“０”データを保持するものに対して演算結果“１”を転送し、データを書き換える（ステップＳ２７）。つまり、この結果、対応する第１〜第３ラッチ回路２２〜２４の保持するデータは、全て“１”となる。演算結果が“０”であれば（ステップＳ２６、ＮＯ）、演算結果の転送は行わない。
【００５０】
そして制御回路７は、ベリファイデータｊが“７”であれば（ステップＳ２８、ＹＥＳ）、ベリファイ動作を終了する。“７”でなければ、制御回路７はｊ＝ｊ＋１として、ステップＳ２１に戻る（ステップＳ２９）。
【００５１】
以上のベリファイ動作は、制御回路７内の例えばシーケンサによって実行される。すると、演算器２１におけるデータの転送処理は図９に示すようなシーケンスステップによって構成される。図９は、シーケンサによるシーケンス処理を示す表である。
【００５２】
図示するように、シーケンスステップはステップＳＴ１〜ＳＴ７の７つのステップを有する。ステップＳＴ１は、センスアンプ１０から演算器２１へのデータ（読み出しデータ）転送である。ステップＳＴ２は、第２ラッチ回路２３から演算器へのデータ転送である。ステップＳＴ３は、第１ラッチ回路２２から演算器へのデータ転送である。ステップＳＴ４は、第３ラッチ回路２４から演算器へのデータ転送である。ステップＳＴ５は、演算器２１から第１ラッチ回路２２へのデータ転送である。ステップＳＴ６は、演算器２１から第２ラッチ回路２３へのデータ転送である。ステップＳＴ７は、演算器２１から第３ラッチ回路２４へのデータ転送である。
【００５３】
すると、ベリファイにパスした場合の“１”〜“７”ベリファイ時におけるシーケンスは図１０のようになる。図１０は、“１”〜“７”ベリファイ時に実行されるシーケンスを示す表である。
【００５４】
まず“１”ベリファイ時について説明する。まずステップＳＴ１が実行され、センスアンプ１０から読み出しデータが演算器２１へ転送される。次に、“１”ベリファイ時には、第２ラッチ回路２３及び第３ラッチ回路２４からデータを演算器２１へ転送すべく（ｂ２＝“１”、ｂ３＝“１”なので）、ステップＳＴ２、ＳＴ４が実行される。そして、最後に演算器２１の演算結果を第１ラッチ回路２２へ転送すべく、ステップＳＴ５が実行される。
【００５５】
次に“２”ベリファイ時について説明する。まずステップＳＴ１が実行され、センスアンプ１０から読み出しデータが演算器２１へ転送される。次に、“２”ベリファイ時には、第１ラッチ回路２２及び第３ラッチ回路２４からデータを演算器２１へ転送すべく（ｂ１＝“１”、ｂ３＝“１”なので）、ステップＳＴ３、ＳＴ４が実行される。そして、最後に演算器２１の演算結果を第２ラッチ回路２３へ転送すべく、ステップＳＴ６が実行される。
【００５６】
次に“３”ベリファイ時について説明する。まずステップＳＴ１が実行され、センスアンプ１０から読み出しデータが演算器２１へ転送される。次に、“３”ベリファイ時には、第３ラッチ回路２４からデータを演算器２１へ転送すべく（ｂ３＝“１”なので）、ステップＳＴ４が実行される。そして、最後に演算器２１の演算結果を第１ラッチ回路２２及び第２ラッチ回路２３へ転送すべく、ステップＳＴ５、ＳＴ６が実行される。
【００５７】
次に“４”ベリファイ時について説明する。まずステップＳＴ１が実行され、センスアンプ１０から読み出しデータが演算器２１へ転送される。次に、“４”ベリファイ時には、第１ラッチ回路２２及び第２ラッチ回路２３からデータを演算器２１へ転送すべく（ｂ１＝“１”、ｂ２＝“１”なので）、ステップＳＴ２、ＳＴ３が実行される。そして、最後に演算器２１の演算結果を第３ラッチ回路２４へ転送すべく、ステップＳＴ７が実行される。
【００５８】
次に“５”ベリファイ時について説明する。まずステップＳＴ１が実行され、センスアンプ１０から読み出しデータが演算器２１へ転送される。次に、“５”ベリファイ時には、第２ラッチ回路２３からデータを演算器２１へ転送すべく（ｂ２＝“１”なので）、ステップＳＴ２が実行される。そして、最後に演算器２１の演算結果を第１ラッチ回路２２及び第３ラッチ回路２４へ転送すべく、ステップＳＴ５、ＳＴ７が実行される。
【００５９】
次に“６”ベリファイ時について説明する。まずステップＳＴ１が実行され、センスアンプ１０から読み出しデータが演算器２１へ転送される。次に、“６”ベリファイ時には、第１ラッチ回路２２からデータを演算器２１へ転送すべく（ｂ１＝“１”なので）、ステップＳＴ３が実行される。そして、最後に演算器２１の演算結果を第２ラッチ回路２３及び第３ラッチ回路２４へ転送すべく、ステップＳＴ６、ＳＴ７が実行される。
【００６０】
次に“７”ベリファイ時について説明する。まずステップＳＴ１が実行され、センスアンプ１０から読み出しデータが演算器２１へ転送される。次に、“７”ベリファイ時には、ｂ１＝ｂ２＝ｂ３＝“０”なので、第１〜第３ラッチ回路２２〜２４から演算器２１へのデータ転送は行われない。そして、演算器２１の演算結果を第１〜第３ラッチ回路２２〜２４へ転送すべく、ステップＳＴ５、ＳＴ６、ＳＴ７が実行される。
【００６１】
以上のように、“１”〜“７”ベリファイのいずれの場合においても、演算器２１を介したデータ転送処理は４ステップとなる。
【００６２】
［ベリファイ動作の具体例］  
次に、上記のベリファイ動作の具体例を、図１１乃至図１５を参照しつつ説明する。図１１乃至図１５は、演算回路２０、センスアンプ１０、及びメモリセルトランジスタＭＴの回路図である。以下では、説明の簡単化のために、ビット線がＢＬ１〜ＢＬ３の３本である場合を例に説明する。また、ワード線ＷＬ１と、ビット線ＢＬ１〜ＢＬ３とに接続されたメモリセルトランジスタＭＴに対して、それぞれ“１”、“３”、“７”データを書き込む場合について説明する。また、以下のベリファイ動作の具体例の説明に限り、ワード線ＷＬ１とビット線ＢＬ１〜ＢＬ３とに接続されたメモリセルトランジスタＭＴを説明の便宜上、それぞれメモリセルトランジスタＭＴ１１、ＭＴ１２、ＭＴ１３と呼ぶことにする。
【００６３】
図１１は、“１”、“３”、“７”のプログラムを行った後に、“１”ベリファイを行う際の様子を示している。
【００６４】
図示するように、まず“１”ベリファイを行うにあたって、ワード線ＷＬ０に電圧Ｖ０１が印加される。この際、全てのメモリセルトランジスタＭＴ１１、ＭＴ１２、ＭＴ１３の閾値電圧がＶ０１より高かったとする。すると、センスアンプ１０−１〜１０−３の保持するデータは“１”となる。
【００６５】
また、“１”ベリファイ時、すなわち“１”プログラム時には、第１ラッチ回路２２の保持すべきデータは“０”であり、第２、第３ラッチ回路２３、２４の保持すべきデータは“１”である。従って、演算器２１−１〜２１−３には、第２ラッチ回路２３−１〜２３−３内のデータと、第３ラッチ回路２４−１〜２４−４内のデータとが転送される（ステップＳＴ２、ＳＴ４）。
【００６６】
すると、演算器２１−１のＡＮＤ演算結果は“１”となる。しかし演算器２１−２のＡＮＤ演算結果は、第２ラッチ回路２３−２が“０”を保持するので“０”となる。同様に演算器２１−３のＡＮＤ演算結果も“０”となる。
【００６７】
従って演算器２１−１は、演算結果“１”を第１ラッチ回路２２−１へ転送し（ステップＳＴ５）、第１ラッチ回路２２−１の保持するデータは“０”から“１”へと書き換えられる。他方、演算器２１−２、２１−３は、演算結果の転送を行わない。よって、第１ラッチ回路２２−２、２２−３の保持するデータは“０”のままである。
【００６８】
次に“３”ベリファイを行う。“３”ベリファイについて図１２を用いて説明する。図１２は、“３”ベリファイ時の様子を示している。
【００６９】
図示するように、まず“３”ベリファイを行うにあたって、ワード線ＷＬ０に電圧Ｖ２３が印加される。この際、メモリセルトランジスタＭＴ１２、ＭＴ１３の閾値電圧がＶ２３より高かったとする。他方、メモリセルトランジスタＭＴ１１には“１”データがプログラムされているので、閾値電圧はＶ２３よりも低い。すると、メモリセルトランジスタＭＴ１１のみがオン状態となり、センスアンプ１０−１〜１０−３の保持するデータは、それぞれ“０”、“１”、“１”となる。
【００７０】
また、“３”ベリファイ時、すなわち“３”プログラム時には、第１、第２ラッチ回路２２、２３の保持すべきデータは“０”であり、第３ラッチ回路２４の保持すべきデータは“１”である。従って、演算器２１−１〜２１−３には、第３ラッチ回路２４−１〜２４−３内のデータが転送される（ステップＳＴ４）。
【００７１】
すると、演算器２１−１のＡＮＤ演算結果は、センスアンプ１０−１内のデータが“０”であるので“０”となる。また演算器２１−３のＡＮＤ演算結果は、第３ラッチ回路２４−３内のデータが“０”であるので“０”となる。他方、演算器２１−２のＡＮＤ演算結果は、センスアンプ１０−２内のデータと第３ラッチ回路２４−２内のデータとが“１”であるので“１”となる。
【００７２】
従って演算器２１−２は、演算結果“１”を第１、第２ラッチ回路２２−２、２３−２へ転送し（ステップＳＴ５、ＳＴ６）、第１、第２ラッチ回路２２−２、２３−２の保持するデータは“０”から“１”へと書き換えられる。他方、演算器２１−１、２１−３は、演算結果の転送を行わない。
【００７３】
次に“７”ベリファイを行う。“７”ベリファイについて図１３を用いて説明する。図１３は、“７”ベリファイ時の様子を示している。
【００７４】
図示するように、まず“７”ベリファイを行うにあたって、ワード線ＷＬ０に電圧Ｖ６７が印加される。この際、メモリセルトランジスタＭＴ１３はプログラムが十分では無く、その閾値電圧がＶ６７より低かったとする。メモリセルトランジスタＭＴ１１、ＭＴ１２の閾値電圧は、当然、Ｖ６７よりも低い。すると、全てのメモリセルトランジスタＭＴ１１〜ＭＴ１３がオン状態となり、センスアンプ１０−１〜１０−３の保持するデータは、全て“０”となる。すなわち、ベリファイはミスとなる。
【００７５】
また、“７”ベリファイ時、すなわち“７”プログラム時には、第１〜第３ラッチ回路２２〜２４の保持すべきデータは全て“０”である。従って、第１〜第３ラッチ回路２２〜２４から演算器２１へのデータ転送は行われない。
【００７６】
すると、演算器２１−１〜２１−３のＡＮＤ演算結果は、全て“０”となる。従って、演算器２１から第１〜第３ラッチ回路２２〜２４へのデータ転送も行われない。
【００７７】
以上によって、最初のベリファイ動作が完了する。上記動作が、例えば図６における時刻ｔ３〜ｔ４の期間に相当する。この時点では、“７”プログラムが完了していないので、再度、プログラムを行う。この再度のプログラムは、図６における時刻ｔ４〜ｔ５の期間に相当する。
【００７８】
図１４は、２回目のプログラム時の様子を示している。本プログラムでは、プログラムが完了していない“７”データについてのみプログラムが行われる。プログラムデータは、第１〜第３ラッチ回路２２〜２４の保持するデータのＡＮＤ演算結果により与えられ、そのＡＮＤ演算は演算器２１によって行われる。そして演算器２１における演算結果がセンスアンプ１０に与えられる。センスアンプ１０は、プログラムデータが“１”であればプログラムは不要と判断して、対応するビット線ＢＬに書き込み禁止電圧ＶＤＤを印加する。他方、プログラムデータが“０”であればプログラムが必要と判断して、例えば０Ｖを対応するビット線ＢＬに印加する。
【００７９】
図１４の場合、演算器２１−１、２１−２のＡＮＤ演算結果は“１”である。これは、対応する第１〜第３ラッチ回路２２〜２４内のデータが全て“１”だからである。従って、センスアンプ１０−１、１０−２はそれぞれ、対応するビット線ＢＬ１、ＢＬ２に書き込み禁止電圧ＶＤＤを印加する。他方、演算器２１−３のＡＮＤ演算結果は“０”である。従って、センスアンプ１０−３は、対応するビット線ＢＬ３に０Ｖを印加する。また、ロウデコーダ３はワード線ＷＬ１にプログラム電圧Ｖpgm２を印加する。その結果、メモリセルトランジスタＭＴ１１、ＭＴ１２に対してプログラムは行われず、メモリセルトランジスタＭＴ１３に対してのみプログラムが行われる。つまり、“７”データのプログラムが行われる。
【００８０】
次に、図１４で行ったプログラムに対するベリファイが行われる。本ベリファイは、図６における時刻ｔ５〜ｔ６に相当する。“１”ベリファイと“３”ベリファイについては、演算器２１−１〜２１−３の演算結果が全て“０”となるので、説明を省略する。従って、“７”ベリファイについてのみ図１５を用いて説明する。また、図１４に示すプログラムにより、メモリセルトランジスタＭＴ１３の閾値電圧はＶ６７よりも高くなったとする。
【００８１】
図示するように、まず“７”ベリファイを行うにあたって、ワード線ＷＬ０に電圧Ｖ０１が印加される。すると、メモリセルトランジスタＭＴ１３はオフ状態となる。従って、センスアンプ１０−１〜１０−３の保持するデータは、それぞれ“０”、“０”、“１”となる。
【００８２】
すると、演算器２１−３のＡＮＤ演算結果は“１”となる。よって演算器２１−３は、演算結果“１”を第１〜第３ラッチ回路２２−３〜２４−３へ転送し（ステップＳＴ５〜ＳＴ７）、第１〜第３ラッチ回路２２−３〜２４−３の保持するデータは“０”から“１”へと書き換えられる。
【００８３】
以上の結果、第１ラッチ回路２２−１〜２２−３、第２ラッチ回路２３−１〜２３−３、及び第３ラッチ回路２４−１〜２４−３内のデータが全て“１”となる。すなわち、メモリセルトランジスタＭＴ１１〜ＭＴ１３の全てが、所望の閾値電圧に達したこととなり、以降のプログラムは不要となる。よって、書き込み動作が完了する。
【００８４】
上記のように、この発明の第１の実施形態に係る半導体記憶装置であると、下記（１）の効果が得られる。  
（１）ベリファイ動作を高速化出来る。  
前述の通り、外部からＮＡＮＤ型フラッシュメモリへ入力される書き込みデータは、グレイコードに記述される。グレイコードの例を図１６に示す。図１６は、書き込みデータ“０”〜“７”に対応するグレイコードを示す表であり、書き込みデータの各々について、第１〜第３ラッチ回路２２〜２４に保持されるデータを示している。
【００８５】
図示するようにグレイコードは、隣接するデータの関係では最大で１ビットしか異ならない。このようなグレイコードを用いてベリファイを行おうとすると、第１〜第３ラッチ回路２２〜２４全てのデータを演算器２１に転送する必要があった。なぜなら、グレイコードの３ビット全てのビットを転送しなければ、他の書き込みデータとの区別が出来ないからである。例えば“４”ベリファイ時に、第１ラッチ回路２２内の“１”データのみを読み出したと仮定すると、“０”〜“３”データ、“５”データ、及び“６”データとは区別がつく。なぜなら、“４”ベリファイ時には、“０”〜“３”データを保持するメモリセルトランジスタＭＴはオン状態となるはずであるし、また“５”データと“６”データにおいて第１ラッチ回路２２に保持されるデータは“０”だからである。しかし、“７”データにおいて第１ラッチ回路２２に保持されるデータは“１”である。従って、“７”データとの区別がつかない。
【００８６】
そこで、グレイコードを用いる場合には３ビット全てのデータを使用する必要があるが、この場合にはベリファイ動作に非常に時間がかかるという問題があった。つまり、“０”〜“７”データのいずれのデータをベリファイするにしても、図９に示したステップＳＴ２〜ＳＴ４の処理が必ず必要となるからである。例えば、図１６に示すグレイコードを用いた場合に“５”データをベリファイしようとすると、ステップＳＴ１〜ＳＴ７の全てのステップが必要となり、非常に長時間かかる。
【００８７】
また、“１”ベリファイ時には、演算器２１からのデータ転送は第１ラッチ回路２２に対してのみ行えばよいので、必要なステップはステップＳＴ１〜ＳＴ５の５ステップである。つまり、演算器を介したデータ転送の回数が、ベリファイデータ毎に異なる。このようにデータに対する依存性は、ベリファイ動作のシーケンス設計を行う上で、動作時間短縮に不都合を生じさせる原因となる。またシーケンスが複雑となるため、回路設計や回路検証を行う上で、困難を生じさせる。
【００８８】
しかし本実施形態に係る構成であると、制御回路７がグレイコードをバイナリコードに変換している。従って、第１〜第３ラッチ回路２２〜２４から演算器２１へのデータ転送は、データ“１”であるもので良く、これによって書き込みデータを判別が可能となる。この点について、図１７を用いて説明する。図１７は、書き込みデータが“０”〜“７”である場合において、第１〜第３ラッチ回路２２〜２４に保持されるデータを示す表であり、併せて各書き込みデータの閾値分布を示している。
【００８９】
図示するように、例えば“５”ベリファイを行う場合、“０”〜“４”データを保持するメモリセルトランジスタＭＴはオン状態となるので、これらの書き込みデータとの区別はつく。これはグレイコードを用いた場合と同じである。他方、“６”、“７”データとは、“５”データのバイナリコードが“１”であるビットｂ２により区別をすることが出来る。なぜなら、“５”ベリファイ時に“１”を保持するラッチ回路は第２ラッチ回路２３であるが、“６”、“７”データを保持する第２ラッチ回路２３内のデータは“０”だからである。すなわち、“ｊ”データベリファイ（ｊは“１”〜“６”）時において、“ｊ”データと“ｊ−１”以下のデータとは、センスアンプ１０内のデータにより区別可能である。また、“ｊ”データと“ｊ＋１”以上のデータとは、“ｊ”データプログラム時に“１”を保持する第１〜第３ラッチ回路２２〜２４のいずれかから転送されるデータにより区別可能である。
【００９０】
従って、８値ＮＡＮＤ型フラッシュメモリの場合には、図１０を用いて説明したように、全てのベリファイデータにつき演算器２１を介したデータ転送は４回となり、データ転送回数を短く出来るだけでなく、データ転送回数をデータ間で均一に出来る。特に、多値ＮＡＮＤ型フラッシュメモリにおいて、メモリセルトランジスタＭＴの記憶するビット数が多いほど、演算器２１を介したデータ転送回数が増加するため、本効果が顕著となる。
【００９１】
［第２の実施形態］  
次に、この発明の第２の実施形態に係る半導体記憶装置について説明する。本実施形態は、上記第１の実施形態を１６値（16-levels）ＮＡＮＤ型フラッシュメモリに適用したものである。本実施形態に係るＮＡＮＤ型フラッシュメモリの基本的な構成と動作は、上記第１の実施形態と同様であるので、以下では第１の実施形態と異なる点についてのみ説明する。
【００９２】
本実施形態に係るＮＡＮＤ型フラッシュメモリ１のブロック構成は図１と同様である。図１８は、メモリセルトランジスタＭＴの閾値分布を示すグラフであり、横軸に閾値電圧Ｖthをとり、縦軸にメモリセルトランジスタＭＴの存在確率を示したものである。
【００９３】
図示するように、各々のメモリセルトランジスタＭＴは１６種のデータ（４ビットデータ）を保持出来る。すなわちメモリセルトランジスタＭＴは、閾値電圧Ｖthの低い順に“０”、“１”、“２”、“３”、…“９”、“Ａ”、“Ｂ”、…“Ｆ”の１６種のデータを保持出来る。すなわち、メモリセルトランジスタＭＴにおける“０”データの閾値電圧Ｖth０は、Ｖth０＜Ｖ０１である。“１”データの閾値電圧Ｖth１は、Ｖ０１＜Ｖth１＜Ｖ１２である。“２”データの閾値電圧Ｖth２は、Ｖ１２＜Ｖth２＜Ｖ２３である。“３”データの閾値電圧Ｖth３は、Ｖ２３＜Ｖth３＜Ｖ３４である。“４”データの閾値電圧Ｖth４は、Ｖ３４＜Ｖth４＜Ｖ４５である。“５”データの閾値電圧Ｖth５は、Ｖ４５＜Ｖth５＜Ｖ５６である。“６”データの閾値電圧Ｖth６は、Ｖ５６＜Ｖth６＜Ｖ６７である。“７”データの閾値電圧Ｖth７は、Ｖ６７＜Ｖth７＜Ｖ７８である。“８”データの閾値電圧Ｖth８は、Ｖ７８＜Ｖth８＜Ｖ８９である。“９”データの閾値電圧Ｖth９は、Ｖ８９＜Ｖth９＜Ｖ９Ａである。“Ａ”データの閾値電圧ＶthＡは、Ｖ９Ａ＜ＶthＡ＜ＶＡＢである。“Ｂ”データの閾値電圧ＶthＢは、ＶＡＢ＜ＶthＢ＜ＶＢＣである。“Ｃ”データの閾値電圧ＶthＣは、ＶＢＣ＜ＶthＣ＜ＶＣＤである。“Ｄ”データの閾値電圧ＶthＤは、ＶＣＤ＜ＶthＤ＜ＶＤＥである。“Ｅ”データの閾値電圧ＶthＥは、ＶＤＥ＜ＶthＥ＜ＶＥＦである。“Ｆ”データの閾値電圧ＶthＦは、ＶＥＦ＜ＶthＦである。
【００９４】
次に図１９を用いてベリファイ回路６内の演算回路２０−０〜２０−ｍの構成について説明する。図１９は、メモリセルアレイ２、ロウデコーダ３、ページバッファ５、及びベリファイ回路６の詳細を示すブロック図である。なお、メモリセルアレイ２、ロウデコーダ３、及びページバッファ５の構成及び動作は第１の実施形態と同様であるので説明は省略する。
【００９５】
図示するように演算回路２０−０〜２０−ｍの各々は、演算器２１−０〜２１−ｍ、第１ラッチ回路２２−０〜２２−ｍ、第２ラッチ回路２３−０〜２３−ｍ、第３ラッチ回路２４−０〜２４−ｍ、第４ラッチ回路２６−０〜２６−ｍ、及びＭＯＳトランジスタ２５−０〜２５−ｍをそれぞれ備えている。以下、演算回路２０−０〜２０−ｍを単に演算回路２０、演算器２１−０〜２１−ｍを単に演算器２１、第１ラッチ回路２２−０〜２２−ｍを単に第１ラッチ回路２２、第２ラッチ回路２３−０〜２３−ｍを単に第２ラッチ回路２３、第３ラッチ回路２４−０〜２４−ｍを単に第３ラッチ回路２４、第４ラッチ回路２６−０〜２６−ｍを単に第４ラッチ回路２６、及びＭＯＳトランジスタ２５−０〜２５−ｍを単にＭＯＳトランジスタ２５と呼ぶことがある。
【００９６】
第１〜第４ラッチ回路２２〜２４、２６の各々は、データの書き込みの際に、対応するビット線ＢＬに接続されたメモリセルトランジスタＭＴに書き込むべき４ビットデータの各ビットを保持する。すなわち、第１の実施形態と異なる点は、本実施形態ではメモリセルトランジスタＭＴが４ビットデータを保持するので、ラッチ回路はビット線あたり４個必要となる。そこで、第１の実施形態で説明した図２の構成において、更に第４ラッチ回路２６を新たに追加している。そして、制御回路７または入出力バッファ９から転送されるデータはまず第４ラッチ回路２６に保持され、第４ラッチ回路２６から第１〜第３ラッチ回路２２〜２４に転送される。
【００９７】
次に、上記構成のＮＡＮＤ型フラッシュメモリの動作について説明する。本実施形態に係るフラッシュメモリの動作は、上記第１の実施形態で説明した図４、図６、及び図７と基本的には同じであり、異なる点は、ベリファイを“１”〜“Ｆ”データにつき行う点と、第４ラッチ回路２６と演算器２１との間でのデータ転送がある点のみである。
【００９８】
ステップＳ１２においては、第１の実施形態と同様に、制御回路７は演算回路２０−１〜２０−ｍの各々に保持される書き込みデータを、グレイコードからバイナリコードへと変換する。すなわち、第１〜第４ラッチ回路の各々に保持されるデータを組み合わせて得られる４ビットのコードが、書き込みデータ“０”〜“Ｆ”の順に昇順または降順の値となるように変換する。本実施形態では、第１ラッチ回路２２に保持されるビットを第１（最下位）ビット、第２ラッチ回路２３に保持されるビットを第２ビット、第３ラッチ回路２３に保持されるビットを第３ビット、第４ラッチ回路２６に保持されるビットを第４（最上位）ビットとした場合に、これらによって得られる４ビットのコードが書き込みデータ“０”〜“７”の順に降順となるように変換される。
【００９９】
制御回路７によって得られるバイナリコードを図２０に示す。図２０は、書き込みデータと、第１〜第４ラッチ回路２２〜２４、２６に保持されるデータとの関係を示す表である。第１ラッチ回路２２に保持されるビットを“ｂ１”、第２ラッチ回路２３に保持されるビットを“ｂ２”、第３ラッチ回路２４に保持されるビットを“ｂ３”、第４ラッチ回路２６に保持されるビットを“ｂ４”とすると、得られるコードは（ｂ４、ｂ３、ｂ２、ｂ１）である。書き込みデータが“０”であった場合には、ｂ１＝“１”、ｂ２＝“１”、ｂ３＝“１”、ｂ４＝“１”とされ、得られるコードは（１１１１）である。また書き込みデータが“１”であった場合には、得られるコードは（１１１０）である。以下、書き込みデータが“２”〜“Ｆ”の場合には、得られるコードは（１１０１）〜（００００）となる。このように、制御回路７はラッチ回路２２〜２４、２６の保持するデータの組み合わせを、グレイコードから図２０に示すようなバイナリコードに変換する。
【０１００】
次に、ベリファイ動作時において制御回路７で実行されるシーケンスステップについて図２１を用いて説明する。図２１は、シーケンサによるシーケンス処理を示す表である。
【０１０１】
図示するように、シーケンスステップはステップＳＴ１〜ＳＴ９の９つのステップを有する。ステップＳＴ１は、センスアンプ１０から演算器２１へのデータ（読み出しデータ）転送である。ステップＳＴ２は、第１ラッチ回路２２から演算器２１へのデータ転送である。ステップＳＴ３は、第２ラッチ回路２３から演算器２１へのデータ転送である。ステップＳＴ４は、第３ラッチ回路２４から演算器２１へのデータ転送である。ステップＳＴ５は、第４ラッチ回路２６から演算器２１へのデータ転送である。ステップＳＴ６は、演算器２１から第１ラッチ回路２２へのデータ転送である。ステップＳＴ７は、演算器２１から第２ラッチ回路２３へのデータ転送である。ステップＳＴ８は、演算器２１から第３ラッチ回路２４へのデータ転送である。ステップＳＴ９は、演算器２１から第４ラッチ回路２６へのデータ転送である。すなわち、第１の実施形態で説明した図９において、第４ラッチ回路２６と演算器２１との間のデータ転送（ステップＳＴ５、ＳＴ９）が新たに追加される。
【０１０２】
すると、ベリファイにパスした場合の“１”〜“Ｆ”ベリファイ時におけるシーケンスは図２２のようになる。図２２は、“１”〜“Ｆ”ベリファイ時に実行されるシーケンスを示す表である。
【０１０３】
例えば“１”ベリファイ時には、まずステップＳＴ１が実行され、センスアンプ１０から読み出しデータが演算器２１へ転送される。次に、“１”ベリファイ時には、第２〜第４ラッチ回路２３、２４、２６に“１”が保持されるので、ステップＳＴ３〜ＳＴ５が実行される。その後、ベリファイにパスすると、第１ラッチ回路２２のデータを“０”から“１”にセットすべく、ステップＳＴ６が実行される。以下、“２”〜“Ｆ”ベリファイ時も同様である。
【０１０４】
以上のように、上記第１の実施形態は１６値ＮＡＮＤ型フラッシュメモリにも適用出来、第１の実施形態で説明した（１）の効果が得られる。
【０１０５】
［第３の実施形態］  
次に、この発明の第３の実施形態に係る半導体記憶装置について説明する。本実施形態は、上記第１の実施形態において、プログラム動作を第１プログラムと第２プログラムの二段階に分けて行うものである。従って、ベリファイ動作も第１ベリファイと第２ベリファイに分けて行われる。以下では、上記第１の実施形態と異なる点についてのみ説明する。
【０１０６】
まず図２３を用いて、本実施形態に係る８値ＮＡＮＤ型フラッシュメモリにおける書き込み動作の大まかな概念について説明する。図２３は、第１プログラム及び第２プログラムを行った際における、メモリセルトランジスタＭＴの閾値電圧の変化を示すグラフであり、一例として“４”データを書き込む場合について説明する。
【０１０７】
まず、第１プログラムを繰り返すことにより、閾値電圧が消去レベルから一定レベルまで上昇される。第１プログラムは、“４”データのベリファイレベルであるＶ３４よりも低い第１ベリファイレベルＶ３４’を超えるまで行われる。また、１回の第１プログラムによる閾値電圧の変動量ΔＶth１は比較的大きな値である。第１プログラムを行う際には、第１、第２の実施形態と同様に、ワード線には書き込み電圧Ｖpgmが印加され、ビット線ＢＬには電圧Ｖ１（例えば０Ｖ）が印加される。
【０１０８】
メモリセルトランジスタＭＴが第１ベリファイにパスすると、次に第２プログラムが行われる。そして、第２プログラムを繰り返すことにより、閾値電圧が“４”データのベリファイレベルＶ３４（以下、本実施形態では第２ベリファイレベルと呼ぶ）を超えるまで上昇される。また１回の第２プログラムによる閾値電圧の変動量ΔＶth２は、ΔＶth１よりも小さい値とされる。小さい値とするために、第２プログラムを行う際には、ビット線ＢＬには０Ｖより高い電圧Ｖ２（＞Ｖ１、例えば０．４Ｖ程度）が印加される。
【０１０９】
つまり、本実施形態に係る書き込み動作は、まず粗くプログラムを行い、閾値電圧が所定の電圧に近づいた時点で、細かくプログラムを行うものである。上記のプログラムの流れをフローチャートとして示した図が図２４である。図示するように、第１ベリファイにミスした場合には（ステップＳ３０、ＮＯ）、第１プログラムを行う（ステップＳ３１）。第１プログラムでは、ビット線ＢＬの電圧はＶ１とされる（ステップＳ３２）。
【０１１０】
第１ベリファイにパスして（ステップＳ３０、ＹＥＳ）、第２ベリファイにミスした場合には（ステップＳ３３、ＮＯ）、第２プログラムを行う（ステップＳ３４）。第２プログラムでは、ビット線ＢＬの電圧はＶ２（＞Ｖ１）とされる（ステップＳ３５）。
【０１１１】
第２ベリファイにパスした場合には（ステップＳ３３、ＹＥＳ）、第２プログラムは禁止される（ステップＳ３６）。従って、ビット線ＢＬには書き込み禁止電圧（ＶＤＤ＞Ｖ２）が印加される（ステップＳ３７）。そして、全てのメモリセルトランジスタＭＴについて第２ベリファイにパスすると、書き込み動作が完了する。
【０１１２】
次に、図２５を用いてベリファイ回路６内の演算回路２０−０〜２０−ｍの構成について説明する。図２５は、メモリセルアレイ２、ロウデコーダ３、ページバッファ５、及びベリファイ回路６の詳細を示すブロック図である。なお、メモリセルアレイ２、ロウデコーダ３、及びページバッファ５の構成及び動作は第１の実施形態と同様であるので説明は省略する。
【０１１３】
図示するように演算回路２０−０〜２０−ｍの各々は、第１の実施形態において説明した図２の構成において、更に第５ラッチ回路２７−０〜２７−ｍを備えている。以下、第５ラッチ回路２７−０〜２７−ｍを単に第５ラッチ回路２７と呼ぶことがある。第５ラッチ回路は初期値として“０”データを保持し、第１ベリファイにパスした際に、演算器２１によって“１”が書き込まれる。すなわち、第５ラッチ回路は第２プログラムを行うか否かを示す情報を保持する。
【０１１４】
次に、上記構成のＮＡＮＤ型フラッシュメモリの動作について説明する。  
［データの書き込み動作］  
図２６を用いて、本実施形態に係るＮＡＮＤ型フラッシュメモリにおけるデータの書き込み動作について説明する。データの書き込み動作は、第１の実施形態と同様に、大まかにはプログラム動作とベリファイ動作との繰り返しである。但し本実施形態では、前述の通り、プログラム動作として第１プログラムと第２プログラムが行われ、またベリファイ動作として第１ベリファイと第２ベリファイとが行われる。図２６は、本実施形態に係るＮＡＮＤ型フラッシュメモリにおける書き込み動作のフローチャートである。
【０１１５】
まず、第１の実施形態と同様にステップＳ１０〜Ｓ１４の動作が行われる。そしてプログラムが行われる（ステップＳ４０）。ステップＳ４０において第１、第２プログラムのいずれが行われるかは、第５ラッチ回路２７内のデータによって決定される。すなわち、第１〜第３ラッチ回路２２〜２４におけるデータと初期値とのＡＮＤ演算結果が“０”である場合にプログラムを行われ、この際、第５ラッチ回路２７が“０”を保持していれば第１プログラムを行い、“１”を保持していれば第２プログラムを行う。
【０１１６】
次に、“０”データにつき第１ベリファイが行われ（ステップＳ４１）、次に“１”〜“７”データの各々につき、第１ベリファイ及び第２ベリファイが行われる（ステップＳ４２）。第２ベリファイは、第１の実施形態で説明したベリファイ動作と同じである。第１ベリファイの詳細は後述する。ベリファイ動作が終了すると、ステップＳ１７の処理に進む。
【０１１７】
以上の書き込み動作の流れを、図２７のタイミングチャートを用いて説明する。図２７は、図４に示す書き込み動作におけるプログラム及びベリファイ時の、ロウデコーダ３によって選択されたワード線の電圧を示すタイミングチャートであり、第１の実施形態で説明した図６における時刻ｔ２〜ｔ６に相当する。
【０１１８】
制御回路７によるグレイコードからバイナリコードへの変換が完了すると、時刻ｔ２〜ｔ３においてプログラムが行われる。次に、時刻ｔ３〜ｔ４の期間にベリファイ動作が行われる（ステップＳ４１、Ｓ４２）。前述の通り、ベリファイ動作は第１ベリファイと第２ベリファイとを含む。“１”〜“７”データについての第２ベリファイ時には、ワード線ＷＬには電圧Ｖ０１〜Ｖ６７がそれぞれ印加される。これに対して“１”〜“７”データについての第１ベリファイ時には、ワード線ＷＬにはそれぞれ電圧Ｖ０１〜Ｖ６７よりも低い電圧Ｖ０１’〜Ｖ６７’が印加される。また第１ベリファイは“０”データについても行われる。
【０１１９】
図示するように、まず“０”データについての第１ベリファイが行われる（ステップＳ４１）。次に“１”データについて、第１ベリファイ及び第２ベリファイが順次行われる。次に、“２”データについて、第１ベリファイ及び第２ベリファイが順次行われる。その後、同様にして“３”〜“７”データの各々について、第１ベリファイ及び第２ベリファイが順次行われる（ステップＳ４２）。
【０１２０】
［ベリファイ動作］  
次に、図２６における第１ベリファイの詳細について、特にベリファイ回路６の動作に着目しつつ、図２８を用いて説明する。図２８は、本実施形態に係る第１ベリファイ動作のフローチャートである。第２ベリファイの詳細は、上記第１の実施形態で説明した図７と同様であるので、説明は省略する。
【０１２１】
まずベリファイ回路６は、ベリファイデータｊ＝“０”として（ステップＳ５０）、第１ベリファイを開始する（ステップＳ５１）。そして、第２ベリファイと同様にして、ステップＳ２２〜Ｓ２５の処理が行われる。
【０１２２】
そして、ステップＳ２５における演算結果が“１”であれば（ステップＳ２６、ＹＥＳ）、演算器２１は、当該演算器２１に対応する第５ラッチ回路２７に演算結果“１”を転送し、データを書き換える（ステップＳ５２）。但し、第１〜第３ラッチ回路２２〜２４へのデータ転送は行われない。
【０１２３】
その後、ステップＳ２８、Ｓ２９の処理が行われる。つまり、第１ベリファイが第２ベリファイと異なる点は、演算器２１における演算結果が“１”であった場合に、第１〜第３ラッチ回路２２〜２４では無く第５ラッチ回路２７に演算結果“１”を転送する点にある。
【０１２４】
第１ベリファイ及び第２ベリファイは、制御回路７内の例えばシーケンサによって実行される。第２ベリファイのシーケンスステップと、各データをベリファイする際のシーケンスは、第１の実施形態で説明した図９及び図１０と同様である。
【０１２５】
図２９は、第２ベリファイにおけるシーケンサによるシーケンス処理を示す表である。図示するように、シーケンスステップは、第１ベリファイ時のシーケンスステップＳＴ１〜ＳＴ７に加えて、シーケンスステップＳＴ８を有している。シーケンスステップＳＴ８は、演算器２１から第５ラッチ回路２７へのデータ転送である。
【０１２６】
すると、第１ベリファイにパスした場合の“０”〜“７”ベリファイ時におけるシーケンスは図３０のようになる。図３０は、“０”〜“７”データについての第１ベリファイ時に実行されるシーケンスを示す表である。
【０１２７】
まず“０”ベリファイ時について説明する。初めにステップＳＴ１が実行され、センスアンプ１０から読み出しデータが演算器２１へ転送される。次に“０”ベリファイ時には、第１〜第３ラッチ回路２２〜２４からデータを演算器２１へ転送すべく（ｂ１＝“１”、ｂ２＝“１”、ｂ３＝“１”なので）、ステップＳＴ２、ＳＴ３、ＳＴ４が実行される。そして、最後に演算器２１の演算結果を第５ラッチ回路２７へ転送すべく、ステップＳＴ８が実行される。
【０１２８】
次に“１”〜“７”ベリファイ時について説明する。“１”〜“７”データについての第１ベリファイが第２ベリファイと異なる点は、第１〜第３ラッチ回路２２〜２４へのデータ転送の代わりに、第５ラッチ回路２７へのデータ転送が行われる点である。従って、“１”ベリファイ時にはまずステップＳＴ１が行われ、次にステップＳＴ２、ＳＴ４が行われ、最後にステップＳＴ８が行われる。“２”ベリファイ時にはまずステップＳＴ１が行われ、次にステップＳＴ３、ＳＴ４が行われ、最後にステップＳＴ８が行われる。“３”ベリファイ時にはまずステップＳＴ１が行われ、次にステップＳＴ４が行われ、最後にステップＳＴ８が行われる。“４”ベリファイ時にはまずステップＳＴ１が行われ、次にステップＳＴ２、ＳＴ３が行われ、最後にステップＳＴ８が行われる。“５”ベリファイ時にはまずステップＳＴ１が行われ、次にステップＳＴ２が行われ、最後にステップＳＴ８が行われる。“６”ベリファイ時にはまずステップＳＴ１が行われ、次にステップＳＴ３が行われ、最後にステップＳＴ８が行われる。“７”ベリファイ時にはまずステップＳＴ１が行われ、次にステップＳＴ８が行われる。
【０１２９】
［ベリファイ動作の具体例］  
次に、上記のベリファイ動作の具体例を、図３１乃至図４１を参照しつつ説明する。図３１及び図３７はメモリセルトランジスタＭＴの閾値電圧を示すグラフであり、図３２乃至図３６及び図３８乃至図４１は、演算回路２０、センスアンプ１０、及びメモリセルトランジスタＭＴの回路図である。以下では説明の簡単化のために、ビット線がＢＬ１、ＢＬ２の２本である場合を例に説明する。また、ワード線ＷＬ１と、ビット線ＢＬ１、ＢＬ２とに接続されたメモリセルトランジスタＭＴに対して、それぞれ“１”及び“３”データをそれぞれ書き込む場合について説明する。また、以下のベリファイ動作の具体例の説明に限り、ワード線ＷＬ１とビット線ＢＬ１及びＢＬ２とに接続されたメモリセルトランジスタＭＴを説明の便宜上、それぞれメモリセルトランジスタＭＴ１１、ＭＴ１２と呼ぶことにする。
【０１３０】
まず、初めに第１プログラムが行われた結果、メモリセルトランジスタＭＴ１１、ＭＴ１２の閾値分布が図３１のようであったとする。すなわち、“１”が書き込まれるべきメモリセルトランジスタＭＴ１１の閾値電圧は、第１ベリファイレベルであるＶ０１’より高く、第２ベリファイレベルであるＶ０１よりも低い。また、“３”が書き込まれるべきメモリセルトランジスタＭＴ１２の閾値電圧は、第１ベリファイレベルであるＶ２３’より低く、第２ベリファイレベルであるＶ２３よりも低い。つまり、メモリセルトランジスタＭＴ１１は第１ベリファイにはパスするが、第２ベリファイにはミスする状態である。またメモリセルトランジスタＭＴ１２は、第１、第２ベリファイの両方にミスする状態である。
【０１３１】
プログラムの後、まず“１”データにつき第１ベリファイが行われる。この様子を示しているのが図３２である。図示するように、まず“１”ベリファイを行うにあたって、ワード線ＷＬ０に電圧Ｖ０１’が印加される。すると、メモリセルトランジスタＭＴ１１、ＭＴ１２は共にオフ状態となるので、センスアンプ１０−１、１０−２の保持するデータは“１”となる。また、“１”ベリファイ時には、第２ラッチ回路２３−１、２３−２及び第３ラッチ回路２４−１、２４−２内のデータが、演算器２１−１、２１−２へそれぞれ転送される（ステップＳＴ２、ＳＴ４）。
【０１３２】
すると、演算器２１−１のＡＮＤ演算結果は“１”となり、演算器２１−２のＡＮＤ演算結果は“０”となる。つまり、メモリセルトランジスタＭＴ１１は第１ベリファイにパスする。従って、演算器２１−１は演算結果“１”を第５ラッチ回路２７−１へ転送し（ステップＳＴ８）、第５ラッチ回路２７−１の保持するデータは“０”から“１”へと書き換えられる。なお、前述の通り、第１ベリファイ時には第１〜第３ラッチ回路２２〜２４へのデータ転送は行われないので、第１ラッチ回路２２−１は“０”を保持し続ける。また演算器２１−２は、ＡＮＤ演算結果が“０”であるので演算結果の転送を行わない。よって、第５ラッチ回路２７−２の保持するデータは“０”のままである。
【０１３３】
次に“１”データにつき第２ベリファイが行われる。この様子を示しているのが図３３である。図示するように、まず“１”ベリファイを行うにあたって、ワード線ＷＬ０に電圧Ｖ０１（＞Ｖ０１’）が印加される。すると、メモリセルトランジスタＭＴ１１、ＭＴ１２はそれぞれオン状態及びオフ状態となるので、センスアンプ１０−１、１０−２の保持するデータはそれぞれ“０”、“１”となる。また、第２ラッチ回路２３−１、２３−２及び第３ラッチ回路２４−１、２４−２内のデータが、演算器２１−１、２１−２へそれぞれ転送される（ステップＳＴ２、ＳＴ４）。
【０１３４】
すると、演算器２１−１、２１−２のＡＮＤ演算結果は“０”となる。つまり、メモリセルトランジスタＭＴ１１は第２ベリファイにミスする。そして、演算器２１−１、２１−２は演算結果の転送を行わない。
【０１３５】
次に、“３”データにつき第１ベリファイが行われる。この様子を示しているのが図３４である。図示するように、まず“３”ベリファイを行うにあたって、ワード線ＷＬ０に電圧Ｖ２３’が印加される。すると、メモリセルトランジスタＭＴ１１、ＭＴ１２は共にオン状態となるので、センスアンプ１０−１、１０−２の保持するデータは“０”となる。また、“３”ベリファイ時には、第３ラッチ回路２４−１、２４−２内のデータが、演算器２１−１、２１−２へそれぞれ転送される（ステップＳＴ４）。
【０１３６】
すると、演算器２１−１、２１−２のＡＮＤ演算結果は共に“０”となる。つまり、メモリセルトランジスタＭＴ１２は第１ベリファイにミスする。そして、演算器２１−１、２１−２は演算結果の転送を行わない。
【０１３７】
次に“３”データにつき第２ベリファイが行われる。この様子を示しているのが図３５である。図示するように、まず“３”ベリファイを行うにあたって、ワード線ＷＬ０に電圧Ｖ２３（＞Ｖ２３’）が印加される。すると、メモリセルトランジスタＭＴ１１、ＭＴ１２は共にオン状態となるので、センスアンプ１０−１、１０−２の保持するデータは“０”となる。また、“３”ベリファイ時には、第３ラッチ回路２４−１、２４−２内のデータが、演算器２１−１、２１−２へそれぞれ転送される（ステップＳＴ４）。
【０１３８】
すると、演算器２１−１、２１−２のＡＮＤ演算結果は共に“０”となる。つまり、メモリセルトランジスタＭＴ１２は第２ベリファイにミスする。そして、演算器２１−１、２１−２は演算結果の転送を行わない。
【０１３９】
以上によって、最初のプログラムと、それに対応した第１、第２ベリファイが完了する。すなわち、図２７における時刻ｔ２〜ｔ４の処理が完了する。この時点では、メモリセルトランジスタＭＴ１１、ＭＴ１２は共に所望の閾値電圧に到達していないので、再度、プログラムを行う。
【０１４０】
２回目のプログラムの様子を図３６に示す。前述の通り、プログラムデータは第１〜第３ラッチ回路２２〜２４が保持するデータの、演算器２１におけるＡＮＤ演算結果によって決まる。すなわち、演算結果が“０”であればプログラムが行われ、“１”であれば行われない。またプログラムを行う際には、演算器２１は第５ラッチ回路２７内のデータを参照する。そして、第５ラッチ回路２７が“０”を保持していれば第１プログラムが行われ、“１”を保持していれば第２プログラムが行われる。
【０１４１】
図３６の例であると、演算器２１−１、２１−２の演算結果は共に“０”である。従って、メモリセルトランジスタＭＴ１１、ＭＴ１２の両方に対してプログラムが行われる。また、第５ラッチ回路２７−１、２７−２はそれぞれ“１”、“０”を保持しているので、メモリセルトランジスタＭＴ１１には第２プログラムが行われ、メモリセルトランジスタＭＴ１２には第１プログラムが行われる。そして演算器２１−１、２１−２の命令に基づき、センスアンプ１０−１、１０−２は、ビット線ＢＬ１、ＢＬ２にそれぞれ電圧Ｖ２（例えば０．４Ｖ）、Ｖ１（例えば０Ｖ、＜Ｖ２）を印加する。そして、ロウデコーダ３がワード線ＷＬ１にプログラム電圧Ｖpgm２を印加することで、プログラムが行われる。
【０１４２】
この２回目のプログラムの結果、メモリセルトランジスタＭＴ１１、ＭＴ１２の閾値電圧が図３７のように変化したとする。すなわち、メモリセルトランジスタＭＴ１１に対して第１プログラムが行われた結果、その閾値電圧は第２ベリファイレベルであるＶ０１より高くなる。すなわち、“１”データの書き込みが完了する。他方、メモリセルトランジスタＭＴ１２に対して第２プログラムが行われた結果、その閾値電圧は第１ベリファイレベルＶ２３’より高く、第２ベリファイレベルであるＶ２３よりも低い。つまり、メモリセルトランジスタＭＴ１２は第１ベリファイにはパスするが、第２ベリファイにはミスする状態である。
【０１４３】
プログラムの後、まず“１”データにつき第１ベリファイが行われる。当然ながら、メモリセルトランジスタＭＴ１１は第１ベリファイにパスする。
【０１４４】
引き続き“１”データにつき第２ベリファイが行われる。この様子を示しているのが図３８である。メモリセルトランジスタＭＴ１２の閾値電圧は、第２ベリファイレベルＶ０１を超えているので、メモリセルトランジスタＭＴ１１はオフ状態となる。従って、センスアンプ１０−１の保持するデータはそれぞれ“１”となる。その結果、演算器２１−１におけるＡＮＤ演算結果は“１”となる。従って、演算器２１−１は演算結果“１”を第１ラッチ回路２２−１へ転送し（ステップＳＴ５）、第１ラッチ回路２２−１内のデータは“０”から“１”へ書き換えられる。これにより、第１〜第３、第５ラッチ回路２２−１〜２４−１、２７−１内のデータは全て“１”となる。
【０１４５】
次に、“３”データにつき第１ベリファイが行われる。この様子を示しているのが図３９である。メモリセルトランジスタＭＴ１２の閾値電圧は、第１ベリファイレベルＶ２３’を超えているので、メモリセルトランジスタＭＴ１２はオフ状態となる。従って、センスアンプ１０−２の保持するデータは“１”となる。その結果、演算器２１−２のＡＮＤ演算結果は“１”となる。従って、演算器２１−２の演算結果“１”は第５ラッチ回路２７−２へ転送され（ステップＳＴ８）、第５ラッチ回路２７−２内のデータは“０”から“１”へ書き換えられる。
【０１４６】
次に“３”データにつき第２ベリファイが行われる。この様子を示しているのが図４０である。メモリセルトランジスタＭＴ１２の閾値電圧は、第２ベリファイレベルＶ２３を超えていないので、メモリセルトランジスタＭＴ１２はオン状態となる。従って、センスアンプ１０−１２の保持するデータは“０”となり、演算器２１−２から第１、第２ラッチ回路２２−２、２３−２への演算結果の転送は行われない。
【０１４７】
以上によって、２回目のプログラムと、それに対応した第１、第２ベリファイが完了する。この時点では、メモリセルトランジスタＭＴ１２は所望の閾値電圧に到達していないので、再度、プログラムを行う。
【０１４８】
３回目のプログラムの様子を図４１に示す。３回目のプログラムにあたっては、演算器２１−１の演算結果は“１”となる。従って、センスアンプ１０−１にはプログラムデータとして“１”が保持され、ビット線ＢＬ１には書き込み禁止電圧ＶＤＤが印加される。従って、既に“１”プログラムが完了しているメモリセルトランジスタＭＴ１１に対してプログラムは行われない。他方、演算器２１−１の演算結果は“０”である。従って、センスアンプ１０−２にはプログラムデータとして“０”が保持される。また、第５ラッチ回路２７−２には“１”が保持されているので、ビット線ＢＬ２には電圧Ｖ２が印加される。すなわち、メモリセルトランジスタＭＴ１２に対して第２プログラムが行われる。
【０１４９】
以上のようにして、第１ラッチ回路２２−１〜２２−２、及び第２ラッチ回路２３−１〜２３−３内のデータが全て“１”となるまで、プログラムとベリファイとが繰り返される。
【０１５０】
上記のように、この発明の第３の実施形態に係る半導体記憶装置であると、第１の実施形態で説明した（１）の効果に加えて、下記（２）の効果が得られる。  
（２）データの書き込みを高速化しつつ、書き込み精度を向上出来る。  
本実施形態に係るＮＡＮＤ型フラッシュメモリであると、図２３を用いて説明したようにプログラム動作は、閾値電圧の変動幅がΔＶth１の第１プログラムと、変動幅がΔＶth２（＜ΔＶth１）の第２プログラムとを含んでいる。
【０１５１】
メモリセルトランジスタＭＴの閾値電圧は第１プログラムによって、所望の閾値電圧よりも僅かに低いレベルまで設定される。この際、第１プログラムによる閾値電圧の変動幅が大きいため、プログラム回数を少なく出来、書き込み速度を向上出来る。
【０１５２】
またメモリセルトランジスタＭＴの閾値電圧は、第１プログラムの後に第２プログラムによって、所望の閾値電圧となるよう設定される。この際、第２プログラムによれば閾値電圧の細かい設定が可能であるため、書き込み精度を向上出来る。
【０１５３】
そして、第２プログラムについてのベリファイ（第２ベリファイ）には、上記第１の実施形態で説明した方法を用いることが出来るため、第１の実施形態で説明した（１）の効果が得られる。
【０１５４】
［第４の実施形態］  
次に、この発明の第４の実施形態に係る半導体記憶装置について説明する。本実施形態は、上記第２の実施形態を１６値ＮＡＮＤ型フラッシュメモリに適用したものである。つまり本実施形態は、上記第２の実施形態と第３の実施形態とを組み合わせたものである。従って、以下では第２、第３の実施形態と異なる点についてのみ説明する。
【０１５５】
図４２は、メモリセルアレイ２、ロウデコーダ３、ページバッファ５、及びベリファイ回路６の詳細を示すブロック図である。メモリセルアレイ２、ロウデコーダ３、及びページバッファ５の構成及び動作は第１の実施形態と同様であるので説明は省略する。
【０１５６】
図示するように演算回路２０−０〜２０−ｍの各々は、第２の実施形態で説明した図１９の構成において、第３の実施形態で説明した第５ラッチ回路２７−０〜２７−ｍを更に備えている。前述の通り第５ラッチ回路２７は、第１ベリファイにパスした際に“１”を保持し、第５ラッチ回路２７が“１”を保持する際に第２プログラムが実行される。
【０１５７】
次に、ベリファイ動作時において制御回路７で実行されるシーケンスステップについて図４３を用いて説明する。図４３は、シーケンサによるシーケンス処理を示す表である。
【０１５８】
図示するようにシーケンスステップは、第２の実施形態において説明した図２１のシーケンスステップに加えて、演算器２１から第５ラッチ回路２７へデータ転送を行うステップＳＴ１０を更に備えている。
【０１５９】
すると、第１ベリファイにパスした場合における、“０”〜“Ｆ”についての第１ベリファイのシーケンスは図４３のようになる。図４３は、“０”〜“Ｆ”データについての第１ベリファイ時に実行されるシーケンスを示す表である。
【０１６０】
図示するように、上記第３の実施形態において説明した図３０と同様に、センスアンプ１０から演算器２１へのデータ転送と、第１〜第４ラッチ回路から演算器２１へのデータ転送と、演算器２１から第５ラッチ回路２７へのデータ転送とが行われる。例えば“０”ベリファイ時には、まずステップＳＴ１が実行され、センスアンプ１０から読み出しデータが演算器２１へ転送される。次に、“０”ベリファイ時には第１〜第４ラッチ回路２２〜２４、２６に“１”が保持されるので、ステップＳＴ２〜ＳＴ５が実行される。その後、第１ベリファイにパスすると、演算器２１における演算結果“１”が第５ラッチ回路２７へ転送される。以下、“１”〜“Ｆ”ベリファイ時も同様である。  
なお、第２ベリファイ時に実行されるシーケンスは、第２の実施形態で説明した図２２と同様である。
【０１６１】
以上のように、上記第３の実施形態は１６値ＮＡＮＤ型フラッシュメモリにも適用出来、第３の実施形態で説明した（２）の効果が得られる。
【０１６２】
［第５の実施形態］  
次に、この発明の第５の実施形態に係る半導体記憶装置について説明する。本実施形態は、上記第１乃至第４の実施形態において、グレイコードをバイナリコードに変換する方法に関するものである。図４５は、書き込みデータ“０”〜“Ｆ”に対応するグレイコードとバイナリコードの各ビットを示す表である。図中において、１ＤＬ、２ＤＬ、３ＤＬ、ＸＤＬがグレイコードを構成する各ビットを示し、１ＤＬ’、２ＤＬ’、３ＤＬ’、及びＸＤＬ’がバイナリコードを構成する各ビットを示す。そして、１ＤＬ’、２ＤＬ’、３ＤＬ’、及びＸＤＬ’が第１〜第４ラッチ回路に保持される。
【０１６３】
図示するように、１ＤＬ’、２ＤＬ’、３ＤＬ’、及びＸＤＬ’は、例えば下記の式によって計算される。  
1DL’ ＝ ~xor(1DL, xor(2DL, xor(XDL, 3DL)))  
2DL’ ＝ ~xor(2DL, xor(XDL, 3DL))  
3DL’ ＝ ~xor (XDL, 3DL)  
XDL’ ＝ XDL  
但し、“~”は論理否定演算を示し、“xor”は排他的論理和演算を示す。上記計算をシーケンサが行うことで、外部から入力されたグレイコードはバイナリコードに変換される。なお、図４５では書き込みデータが４ビットの場合について説明したが、３ビットの場合であっても同様の方法を用いることが出来る。
【０１６４】
［第６の実施形態］  
次に、この発明の第６の実施形態に係る半導体記憶装置について説明する。本実施形態は、上記第１乃至第４の実施形態において、外部から入力される書き込みデータがバイナリコードである場合に関する。図４６は、本実施形態に係るＮＡＮＤ型フラッシュメモリにおける書き込み動作を示すフローチャートである。
【０１６５】
図示するように、外部からＮＡＮＤ型フラッシュメモリに対して、書き込みコマンド、アドレス、及びバイナリコードで記述された書き込みデータが入力される（ステップＳ６０）。すると制御回路７は、入力された書き込みデータにつき、変換処理を行うことなく演算回路２０−０〜２０−ｍ内のラッチ回路へセットする（ステップＳ６１）。その後、ステップＳ１３の処理に進む。
【０１６６】
本実施形態であると、制御回路７におけるグレイコードからバイナリコードへの変換が不要となる。
【０１６７】
［第７の実施形態］  
次に、この発明の第７の実施形態に係る半導体記憶装置について説明する。本実施形態は、上記第１乃至第６の実施形態におけるバイナリコードの例に関するものである。以下では、書き込みデータが３ビットの場合について説明するが、４ビットの場合も同様である。図４７乃至図４９は、書き込みデータと、各書き込みデータに対応づけられるバイナリコードとの関係を示す表である。
【０１６８】
上記第１の実施形態では、図５を用いて説明したように、第１乃至第３ラッチ回路に保持される各ビットをｂ１、ｂ２、ｂ３としたときに構成されるコード（ｂ３、ｂ２、ｂ１）が、“０”データから降順となるようにバイナリコードが生成される。
【０１６９】
しかし図４７に示すように、コード（ｂ１、ｂ２、ｂ３）が“０”データから降順となるように、バイナリコードが生成されても良い。また図４８に示すように、コード（ｂ３、ｂ１、ｂ２）が“０”データから降順とされても良い。更に図４９に示すように、コード（ｂ１、ｂ３、ｂ２）が“０”データから降順とされても良い。
【０１７０】
すなわち、３つのラッチ回路に保持されるデータをいずれかのビットとする３桁のコードが、書き込みデータ＝“０”から順に降順とされれば良い。そしてこの場合には、第１〜第３ラッチ回路のうち、“ｊ”データ（ｊは“０”〜“６”のいずれか）をプログラムする際に保持する値が“１”となるものの組み合わせは、“ｊ”データよりも閾値電圧の高い全てのデータをそれぞれプログラムする際における組み合わせと異なることになる。
【０１７１】
一例として、“４”データをプログラムする場合を考える。すると図４７の場合、“４”データプログラム時にバイナリコードが“１”となるのはビットｂ２、ｂ３である。つまり、“１”を保持するラッチ回路の組み合わせは、第２ラッチ回路と第３ラッチ回路である。これに対して、“５”データをプログラムする際には、ビットｂ２のみが“１”となる。すなわち“１”を保持するラッチ回路は第２ラッチ回路のみである。また“６”データをプログラムする際には、ビットｂ３のみが“１”となる。すなわち、“１”を保持するラッチ回路は第３ラッチ回路のみである。更に“７”データをプログラムする際には、全ビットが“０”となる。すなわち、“５”〜“７”データをプログラムする際には、第２ラッチ回路と第３ラッチ回路とが共に“１”を保持することが無い。  
このことは、図４８乃至図４９の場合でも同様である。
【０１７２】
また、図５、図４７乃至図４９では、各ビットが保持する“０”と“１”のうち、“１”が有効データである。しかし、“０”が有効データであっても良い。すなわち、第１〜第３ラッチ回路から演算器２１へ転送されるデータが、“１”では無く“０”であっても良い。この場合のバイナリコードの例を図５０に示す。
【０１７３】
図示するように、図５０のバイナリコードは、図５に示すバイナリコードにおいて“０”と“１”とを入れ替えたものである。すると、第１乃至第３ラッチ回路に保持される各ビットをｂ１、ｂ２、ｂ３としたときに構成されるコード（／ｂ３、／ｂ２、／ｂ１）は、“０”データから降順となる。なお“／”は、データの反転を意味する。勿論、図４７乃至図４９のバイナリコードにおいて、“０”と“１”とを反転させても良い。またこの場合には、“０”データそのものが演算器２１へ転送されずに、“０”データを反転させて“１”としたデータが演算器２１へ転送されても良い・
上記のように、この発明の第１乃至第７の実施形態に係る半導体記憶装置であると、書き込みデータをグレイコードでは無くバイナリコードとして取り扱っている。従って、ベリファイ時におけるデータ転送回数を少なく出来ると共に、書き込みデータ間におけるデータ転送回数を均一化出来る。従って、半導体記憶装置の書き込み速度を向上出来る。
【０１７４】
なお、上記実施形態では１つのメモリセルトランジスタＭＴが８値または１６値を取り得る場合について説明したが、これは一例に過ぎず、例えば４値（２ビット）や、または３２値（５ビット）などであっても良い。メモリセルトランジスタがｎビットのデータを保持する場合には、次のような構成とすれば良い。
【０１７５】
すなわち、メモリセルトランジスタは、閾値電圧に応じて“０”データ〜“２ｎ−１”データのｎビット（ｎは３以上の自然数）データを保持する。そして、プログラム動作時及びベリファイ動作時において、プログラムデータにおける１〜ｎビット目の値をそれぞれ保持する第１乃至第ｎラッチ回路を設ける。更に、ベリファイ動作時において、第１乃至第ｎラッチ回路のうちの少なくともいずれかから転送された前記値と、センスアンプで増幅された読み出しデータとの論理演算を行う演算器を設ける。“ｉ”データ（ｉは“１”〜“２ｎ−１”のいずれか）についてベリファイを行う際には、第１乃至第ｎラッチ回路のうちで、“ｉ”データをプログラムする際に保持する前記値が有効データとなるものから、演算器に対して前記値が転送される。そして、第１乃至第ｎラッチ回路のうち、“ｊ”データ（ｊは“０”〜“２ｎ−２”のいずれか）がプログラムされる際に有効データを保持するものの組み合わせが、“ｊ”データよりも閾値電圧の高いデータがプログラムされる全ての場合における前記組み合わせと異なるようにすれば良い。
【０１７６】
更に演算器は、転送された前記値が全て有効データであり、且つ、センスアンプで増幅されたデータが、メモリセルトランジスタの閾値電圧がベリファイにパスすることを示す値であった場合、第１乃至第ｎラッチ回路のいずれかに保持される無効データを有効データに書き換える。
【０１７７】
また演算器で行われる演算内容はＡＮＤ演算に限らない。例えば、プログラムデータについての有効データが図５０に示すように“０”であり、またセンスアンプ内における有効データも“０”（ベリファイにパスした際には“０”を保持）するような場合には、ＯＲ演算を行えば良い。すなわち、演算器２１は、ラッチ回路から読み出した値が全て有効データであり、且つ、センスアンプから転送されたデータが、メモリセルトランジスタの閾値電圧がベリファイレベルよりも高いことを示す値であった場合に有効データを発生する構成であれば良い。
【０１７８】
また、上記実施形態においては、バイナリコードを構成するｎビットデータの最上位ビットは、ＭＯＳトランジスタ２５によって演算器２１と分離可能なラッチ回路に格納されることが好ましい。この点について、８値ＮＡＮＤ型フラッシュメモリの場合を例に挙げて説明する。
【０１７９】
図５１は、“０”〜“７”データに対応するバイナリコードの各ビットｂ１、ｂ２、ｂ３を示す表である。図示するように、（ｂ３、ｂ２、ｂ１）の３桁で構成されるバイナリコードは、“０”データから降順となるよう、“０”〜“７”データに対応づけられていると仮定する。この場合には、３桁のバイナリコードのうち、最上位ビットとなるｂ３が、図２の構成における第２ラッチ回路２３に格納されることが好ましい。この理由について図５２を用いて説明する。
【０１８０】
図５２は、“１”〜“３”データについてのベリファイが完了した際の、第１〜第３ラッチ回路２２〜２３の各々に保持されるバイナリコードの各ビットを示す表である。図示するように、“１”〜“３”データベリファイ完了時には、“０”〜“３”データを保持する演算回路２０においては、各第１〜第３ラッチ回路２２〜２３内の値は“１”になっているはずである。つまり、“０”〜“３”データについてのベリファイが完了した以降は、“４”〜“７”データは（ｂ２、ｂ１）だけで区別がつく。従って、データの識別という意味では、ビットｂ３は必要が無い。
【０１８１】
しかし、“４”データの書き込みを行うためには、いずれかのラッチ回路に“０”が保持されていなければならない。つまり、“４”データの書き込みを行うにはビットｂ３が必要である。しかしながら、“５”〜“７”データの書き込みのためには、ビットｂ３は不要である。なぜなら、“５”〜“７”データの書き込み時には、ビットｂ１、ｂ２の少なくとも一方が“０”になるからである。
【０１８２】
上記を鑑みると、ビットｂ３を図２における第２ラッチ回路２３に保持させ、“０”〜“４”データベリファイ完了後はＭＯＳトランジスタ２５をオフ状態とさせておくことで、第２ラッチ回路２３を他の用途に使用することが可能となる。すなわち、ＮＡＮＤ型フラッシュメモリにおいて図４に示す書き込みシーケンス実行中（“５”〜“７”データ書き込み中）であっても、演算回路２０は外部からデータを取り込むことが出来る。従って、ＮＡＮＤ型フラッシュメモリにおける処理を効率化させ、処理速度を向上出来る。
【０１８３】
このことは１６値ＮＡＮＤ型フラッシュメモリの場合でも同様である。この場合、“０”〜“Ｆ”データに対応するバイナリコードの各ビットｂ１、ｂ２、ｂ３、ｂ４があった時に、例えば（ｂ４、ｂ３、ｂ２、ｂ１）の４桁で構成されるバイナリコードが、“０”データから降順であったと仮定する。この場合には、４桁のバイナリコードのうち、最上位ビットとなるｂ４が、図１９の構成における第４ラッチ回路２６に格納されることが好ましい。１６値ＮＡＮＤ型フラッシュメモリの場合には、“０”〜“８”データベリファイが完了した時点で、ビットｂ４はデータの区別に不要となるからである。勿論、“０”〜“Ｃ”データの書き込みが終了すれば、ビットｂ３を保持するラッチ回路を開放させることが出来る。更に“Ｄ”及び“Ｅ”データの書き込みが終了すればビットｂ２を保持するラッチ回路を開放させることが出来、更に“Ｆ”データの書き込みが終了すれば、ビットｂ１を保持するラッチ回路を開放させることが出来る。  
また、上記は、バイナリコードが図４７〜図５０のようである場合も同様である。
【０１８４】
更に、上記実施形態では図２３において、データが消去レベルから所望のレベルに直接書き込まれる場合を例に挙げて説明したが、書き込み方法はこのような方法に限られない。例えば、図１８に示す１６値ＮＡＮＤ型フラッシュメモリの場合、まず初めに４値レベルの書き込みを行う。つまり、書き込みデータが“０”〜“３”であればプログラムを行わず、書き込みデータが“４”〜“７”であれば“４”レベルにプログラムを行い、書き込みデータが“８”〜“Ｂ”であれば“８”レベルにプログラムを行い、書き込みデータが“Ｃ”〜“Ｆ”であれば“Ｃ”レベルにプログラムを行う。次に、２値レベルの書き込みを行う。つまり、書き込みデータが“０”〜“１”であればプログラムを行わず、書き込みデータが“２”〜“３”であれば“２”レベルにプログラムを行う。また、書き込みデータが“４”〜“５”であれば“４”レベルにプログラムを行い、書き込みデータが“６”〜“７”であれば“６”レベルにプログラムを行う。以下、同様である。そして、再度２値レベルの書き込みを行って、最終的に１６値の値を得る。
【０１８５】
このような場合であると、図２３に示すプログラムは、必ずしも消去レベルを開始時点として行われるわけでは無いが、勿論、このような場合も適用可能である。
【０１８６】
また、上記実施形態ではＮＡＮＤ型フラッシュメモリの場合を例に挙げたが、例えばＮＯＲ型、ＤＩＮＯＲ型、ＡＮＤ型フラッシュメモリであっても良い。また、ＮＡＮＤ型フラッシュメモリにおいてメモリセルトランジスタの数を１つにした３Ｔｒ−ＮＡＮＤ型フラッシュメモリや、３Ｔｒ−ＮＡＮＤ型フラッシュメモリにおいて選択トランジスタＳＴ１を廃した２Ｔｒ型フラッシュメモリ等、他のフラッシュメモリにも適用可能である。
【０１８７】
なお、本願発明は上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出されうる。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出されうる。
【図面の簡単な説明】
【０１８８】
【図１】この発明の第１の実施形態に係るフラッシュメモリのブロック図。
【図２】この発明の第１の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、ロウデコーダ、ページバッファ、及びベリファイ回路の回路図。
【図３】この発明の第１の実施形態に係るフラッシュメモリの備えるメモリセルの閾値分布を示すグラフ。
【図４】この発明の第１の実施形態に係るフラッシュメモリにおける書き込み動作のフローチャート。
【図５】この発明の第１の実施形態に係るフラッシュメモリによって生成されるバイナリコードを示すダイアグラム。
【図６】この発明の第１の実施形態に係るフラッシュメモリにおける書き込み動作のタイミングチャート。
【図７】この発明の第１の実施形態に係るフラッシュメモリにおけるベリファイ動作のフローチャート。
【図８】この発明の第１の実施形態に係るフラッシュメモリにおける、メモリセルトランジスタの閾値分布を示すグラフ。
【図９】この発明の第１の実施形態に係るフラッシュメモリにおける、ベリファイ動作のシーケンスステップを示すダイアグラム。
【図１０】この発明の第１の実施形態に係るフラッシュメモリにおける、ベリファイ動作のシーケンスを示すダイアグラム。
【図１１】この発明の第１の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、センスアンプ、及びベリファイ回路のブロック図。
【図１２】この発明の第１の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、センスアンプ、及びベリファイ回路のブロック図。
【図１３】この発明の第１の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、センスアンプ、及びベリファイ回路のブロック図。
【図１４】この発明の第１の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、センスアンプ、及びベリファイ回路のブロック図。
【図１５】この発明の第１の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、センスアンプ、及びベリファイ回路のブロック図。
【図１６】グレイコードを示すダイアグラム。
【図１７】この発明の第１の実施形態に係るフラッシュメモリによって生成されるバイナリコードと閾値分布との関係を示すダイアグラム。
【図１８】この発明の第２の実施形態に係るフラッシュメモリの備えるメモリセルトランジスタの閾値分布を示すグラフ。
【図１９】この発明の第２の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、ロウデコーダ、ページバッファ、及びベリファイ回路の回路図。
【図２０】この発明の第２の実施形態に係るフラッシュメモリによって生成されるバイナリコードを示すダイアグラム。
【図２１】この発明の第２の実施形態に係るフラッシュメモリにおける、ベリファイ動作のシーケンスステップを示すダイアグラム。
【図２２】この発明の第２の実施形態に係るフラッシュメモリにおける、ベリファイ動作のシーケンスを示すダイアグラム。
【図２３】この発明の第３の実施形態に係るフラッシュメモリの備えるメモリセルトランジスタの閾値分布を示すグラフであり、書き込み方法を示す図。
【図２４】この発明の第３の実施形態に係るフラッシュメモリにおける書き込み動作のフローチャート。
【図２５】この発明の第３の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、ロウデコーダ、ページバッファ、及びベリファイ回路の回路図。
【図２６】この発明の第３の実施形態に係るフラッシュメモリにおける書き込み動作のフローチャート。
【図２７】この発明の第３の実施形態に係るフラッシュメモリにおける書き込み動作のタイミングチャート。
【図２８】この発明の第３の実施形態に係るフラッシュメモリにおけるベリファイ動作のフローチャート。
【図２９】この発明の第３の実施形態に係るフラッシュメモリにおける、ベリファイ動作のシーケンスステップを示すダイアグラム。
【図３０】この発明の第３の実施形態に係るフラッシュメモリにおける、ベリファイ動作のシーケンスを示すダイアグラム。
【図３１】この発明の第３の実施形態に係るフラッシュメモリの備えるメモリセルトランジスタの閾値分布を示すグラフ。
【図３２】この発明の第３の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、センスアンプ、及びベリファイ回路のブロック図。
【図３３】この発明の第３の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、センスアンプ、及びベリファイ回路のブロック図。
【図３４】この発明の第３の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、センスアンプ、及びベリファイ回路のブロック図。
【図３５】この発明の第３の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、センスアンプ、及びベリファイ回路のブロック図。
【図３６】この発明の第３の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、センスアンプ、及びベリファイ回路のブロック図。
【図３７】この発明の第３の実施形態に係るフラッシュメモリの備えるメモリセルトランジスタの閾値分布を示すグラフ。
【図３８】この発明の第３の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、センスアンプ、及びベリファイ回路のブロック図。
【図３９】この発明の第３の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、センスアンプ、及びベリファイ回路のブロック図。
【図４０】この発明の第３の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、センスアンプ、及びベリファイ回路のブロック図。
【図４１】この発明の第３の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、センスアンプ、及びベリファイ回路のブロック図。
【図４２】この発明の第４の実施形態に係るフラッシュメモリの備えるメモリセルアレイ、ロウデコーダ、ページバッファ、及びベリファイ回路の回路図。
【図４３】この発明の第４の実施形態に係るフラッシュメモリにおける、ベリファイ動作のシーケンスステップを示すダイアグラム。
【図４４】この発明の第４の実施形態に係るフラッシュメモリにおける、ベリファイ動作のシーケンスを示すダイアグラム。
【図４５】この発明の第５の実施形態に係るフラッシュメモリにおける、グレイコードをバイナリコードへ変換する方法を示すダイアグラム。
【図４６】この発明の第６の実施形態に係るフラッシュメモリにおける書き込み動作のフローチャート。
【図４７】この発明の第７の実施形態に係るフラッシュメモリにおける書き込みデータとバイナリコードとの関係を示すダイアグラム。
【図４８】この発明の第７の実施形態に係るフラッシュメモリにおける書き込みデータとバイナリコードとの関係を示すダイアグラム。
【図４９】この発明の第７の実施形態に係るフラッシュメモリにおける書き込みデータとバイナリコードとの関係を示すダイアグラム。
【図５０】この発明の第７の実施形態に係るフラッシュメモリにおける書き込みデータとバイナリコードとの関係を示すダイアグラム。
【図５１】この発明の第１乃至第７の実施形態の変形例に係るフラッシュメモリにおける書き込みデータとバイナリコードとの関係を示すダイアグラム。
【図５２】この発明の第７の実施形態の変形例に係るフラッシュメモリにおける書き込みデータとバイナリコードとの関係を示すダイアグラム。
【符号の説明】
【０１８９】
１…フラッシュメモリ、２…メモリセルアレイ、３…ロウデコーダ、４…ソース線ドライバ、５…ページバッファ、６…ベリファイ回路、７…制御回路、８…電圧発生回路、９…入出力バッファ、１０−０〜１０−ｍ…センスアンプ、２０−０〜２０−ｍ…演算回路、２１−１〜２１−ｍ…演算器、２２−０〜２２−ｍ…第１ラッチ回路、２３−０〜２３−ｍ…第２ラッチ回路、２４−０〜２４−ｍ…第３ラッチ回路、２５−０〜２５−ｍ…ＭＯＳトランジスタ、２６−０〜２６−ｍ…第４ラッチ回路、２７−０〜２７−ｍ…第５ラッチ回路
【図１】
2009054246.tif 000003
【図２】
2009054246.tif 000004
【図３】
2009054246.tif 000005
【図４】
2009054246.tif 000006
【図５】
2009054246.tif 000007
【図６】
2009054246.tif 000008
【図７】
2009054246.tif 000009
【図８】
2009054246.tif 000010
【図９】
2009054246.tif 000011
【図１０】
2009054246.tif 000012
【図１１】
2009054246.tif 000013
【図１２】
2009054246.tif 000014
【図１３】
2009054246.tif 000015
【図１４】
2009054246.tif 000016
【図１５】
2009054246.tif 000017
【図１６】
2009054246.tif 000018
【図１７】
2009054246.tif 000019
【図１８】
2009054246.tif 000020
【図１９】
2009054246.tif 000021
【図２０】
2009054246.tif 000022
【図２１】
2009054246.tif 000023
【図２２】
2009054246.tif 000024
【図２３】
2009054246.tif 000025
【図２４】
2009054246.tif 000026
【図２５】
2009054246.tif 000027
【図２６】
2009054246.tif 000028
【図２７】
2009054246.tif 000029
【図２８】
2009054246.tif 000030
【図２９】
2009054246.tif 000031
【図３０】
2009054246.tif 000032
【図３１】
2009054246.tif 000033
【図３２】
2009054246.tif 000034
【図３３】
2009054246.tif 000035
【図３４】
2009054246.tif 000036
【図３５】
2009054246.tif 000037
【図３６】
2009054246.tif 000038
【図３７】
2009054246.tif 000039
【図３８】
2009054246.tif 000040
【図３９】
2009054246.tif 000041
【図４０】
2009054246.tif 000042
【図４１】
2009054246.tif 000043
【図４２】
2009054246.tif 000044
【図４３】
2009054246.tif 000045
【図４４】
2009054246.tif 000046
【図４５】
2009054246.tif 000047
【図４６】
2009054246.tif 000048
【図４７】
2009054246.tif 000049
【図４８】
2009054246.tif 000050
【図４９】
2009054246.tif 000051
【図５０】
2009054246.tif 000052
【図５１】
2009054246.tif 000053
【図５２】
2009054246.tif 000054