(57)【要約】      （修正有）【課題】高速に書き込み動作を行なうことが可能な半導体記憶装置を提供する。【解決手段】半導体記憶装置２０は、複数のメモリセルトランジスタを単位とするグループＧＰ内のメモリセル閾値の大小関係でデータを記憶し、入力された書き込みデータを、グループＧＰ内のメモリセルの閾値の並び順に関する順列データへ変換するに変換する変換回路２２ａと、順列データに基づいて、複数のメモリセルに書き込みを行うラッチ部とを備える。【選択図】図５
2020095766.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリセルと、
第１データを、前記複数のメモリセルの閾値の並び順に関する第２データに変換する第１回路と、
前記第２データに基づいて、前記複数のメモリセルに書き込みを行う第２回路と、
を備える
半導体記憶装置。
【請求項２】
前記第２データは、二つのメモリセルの閾値の大小を規定する第３データを複数備える
請求項１に記載の半導体記憶装置。
【請求項３】
前記第２回路は、書き込みデータを記憶する第１ラッチ群と、メモリセルから読み出された読み出しデータを記憶する第２ラッチ群と、第２ラッチ群から供給される読み出しデータを記憶する第３ラッチ群と、を備え、前記第２データに基づいて書き込み対象のメモリセルを選択する演算を行う
請求項１または２に記載の半導体記憶装置。
【請求項４】
前記第１ラッチ群と、前記第３ラッチ群と、に含まれるラッチの数は同数であり、
前記第２ラッチ群に含まれるラッチの数は、前記第１ラッチ群及び前記第３ラッチ群に含まれるラッチの数よりも少ない、
請求項３に記載の半導体記憶装置。
【請求項５】
前記第２回路、前記第１ラッチ群、前記第２ラッチ群、及び前記第３ラッチ群を制御するシーケンサを更に備え、
前記シーケンサは、前記第２データを複数のメモリセルに書き込む場合、
前記第１ラッチ群に、前記第２データを記憶し、
複数のメモリセルに対して、前記第２データに基づく第１プログラムを行い、
前記第１プログラムの後、ベリファイを行い、
前記第２ラッチ群に、前記ベリファイにより得られた第４データを記憶し、
前記第１ラッチ群、前記第２ラッチ群、及び前記第３ラッチ群を用いて、前記第２データと、前記第４データと、を演算して第２プログラムの対象となるメモリセルを選択し、
前記第２プログラムの対象となるメモリセルに対して、前記第２プログラムを行う
請求項３または４に記載の半導体記憶装置。
【請求項６】
前記第２回路は、前記第２プログラムの対象のメモリセルを選択する演算を行うための第３回路を更に備える
請求項５に記載の半導体記憶装置。
【請求項７】
第１データ を、複数のメモリセルの閾値の並び順に関する第２データに変換する第１回路を有するコントローラと、
前期複数のメモリセルと、前記コントローラから送信された前記第２データに基づいて、前記複数のメモリセルに書き込みを行う第２回路とを有する、半導体記憶装置と、を有するメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
実施形態は半導体記憶装置に関する。
【背景技術】
【０００２】
半導体記憶装置としてＮＡＮＤ型フラッシュメモリが知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２００５−５２２０４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
高速に書き込み動作を行なうことが可能な半導体記憶装置を提供する。
【課題を解決するための手段】
【０００５】
実施形態の半導体記憶装置は、第１データを、前記複数のメモリセルの閾値の並び順に関する第２データに変換する第１回路と、前記第２データに基づいて、前記複数のメモリセルに書き込みを行う第２回路と、を備える。
【図面の簡単な説明】
【０００６】
【図１】図１は、半導体記憶装置の記憶方式の１例を示す図である。
【図２】図２は、半導体記憶装置の他の記憶方式の１例を示す図である。
【図３】図３は、半導体記憶装置の他の記憶方式を採用した場合におけるメモリセルの閾値分布である。
【図４】図４は、メモリシステムのブロック図である。
【図５】図５は、半導体記憶装置のブロック図である。
【図６】図６は、メモリセルアレイの回路図である。
【図７】図７は、カラムデコーダを示すブロック図である。
【図８】図８は、ロウデコーダを示すブロック図である。
【図９】図９は、実施形態に係る半導体記憶装置の記憶方式の１例を示す図である。
【図１０】図１０は、データとメモリセルの閾値の順序との関係を示した図である。
【図１１】図１１は、順列データの構造を示した図である。
【図１２】図１２は、データと順列データとの関係を示した図である。
【図１３】図１３は、ラッチ回路に記憶されるデータを示した図である。
【図１４】図１４は、ラッチ回路に記憶されるデータを示した図である。
【図１５】図１５は、実施形態に係る不揮発性半導体記憶装置のデータ書き込みの概要を示す図である。
【図１６】図１６は、第１実施形態に係る不揮発性半導体記憶装置のデータ書き込みを示すフローチャートである。
【図１７】図１７は、データとセルの順列の関係を示した図である。
【図１８】図１８は、第１実施形態に係る不揮発性半導体記憶装置のデータ書き込みを示す波形図である。
【図１９】図１９は、第１実施形態に係る不揮発性半導体記憶装置のデータ書き込みを示す波形図である。
【図２０Ａ】図２０Ａは、半導体記憶装置の記憶方式の１例を示す図である。
【図２０Ｂ】図２０Ｂは、実施形態に係る半導体記憶装置の記憶方式の１例を示す図である。
【図２１】図２１は、第２実施形態の比較例に係る半導体記憶装置のセンスアンプモジュールの構成を示すブロック図である。
【図２２】図２２は、第２実施形態に係る半導体記憶装置のセンスアンプモジュールの構成を示すブロック図である。
【図２３】図２３は、マルチプレクサの構成を示す回路図である。
【図２４】図２４は、第３実施形態に係る半導体記憶装置のセンスアンプモジュールの構成を示すブロック図である。
【図２５】図２５は、第３実施形態に係る半導体記憶装置のセンスアンプモジュールの構成を示す回路図である。
【図２６】図２６は、第３実施形態に係る半導体記憶装置のセンスアンプモジュールの構成を示す回路図である。
【図２７】図２７は、プログラムループによるメモリセルの閾値の変動を示す図である。
【図２８】図２８は、第４実施形態に係る半導体記憶装置の第２書き込みを示すフローチャートである。
【図２９】図２９は、第２書き込み方法における動作波形を示す波形図である。
【図３０】図３０は、プログラムループによるメモリセルの閾値の変動を示す図である。
【図３１】図３１は、プログラムループによるメモリセルの閾値の変動を示す図である。
【図３２】図３２は、プログラムループによるメモリセルの閾値の変動を示す図である。
【図３３】図３３は、第４書き込み方法における動作波形を示す波形図である。
【図３４】図３４は、プログラムループによるメモリセルの閾値の変動を示す図である。
【図３５】図３５は、第４書き込み方法における動作波形を示す波形図である。
【図３６】図３６は、第４書き込み方法における動作波形を示す波形図である。
【図３７】図３７は、プログラムループによるメモリセルの閾値の変動を示す図である。
【図３８】図３８は、プログラムループによるメモリセルの閾値の変動を示す図である。
【図３９】図３９は、第５書き込み方法における動作波形を示す波形図である。
【図４０】図４０は、第６書き込み方式の具体例を示す図である。
【図４１】図４１は、第７書き込み方式の具体例を示す図である。
【図４２】図４２は、メモリシステムの他の例のブロック図である。
【発明を実施するための形態】
【０００７】
以下、実施形態の詳細を図面を参照して説明する。この説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
【０００８】
＜１＞  第１実施形態
＜１−１＞  概要
まず、第１実施形態の概要について説明する。
【０００９】
不揮発性半導体記憶装置における記憶方式の１つとして、メモリセルの閾値を所定の電圧にすることでデータの記憶を行なう方式がある。
【００１０】
例えば、図１に示すように、１つのメモリセルに１ビット（２値）のデータを記憶する場合、メモリセルの閾値を“Ｅｒ”レベル、または“Ａ”レベル（基準値ＡＶ以上）のいずれかの閾値にする。このように、１つのメモリセルに１ビットのデータを記憶する場合、“Ｅｒ”レベルの閾値分布と、“Ａ”レベルの閾値分布との間隔が十分に確保できる。
【００１１】
しかし、１つのメモリセルに複数のビット（多値）のデータを記憶することが求められている。図１に示すように、１つのセルに複数のビット（例えば２ビット）のデータを記憶する場合、複数の基準値（ＡＶ、ＢＶ、ＣＶ）が設けられる。そのため、１つのメモリセルに１ビットのデータを記憶する場合よりも狭い閾値分布にデータを書き込むことが求められる。
【００１２】
しかし、半導体記憶装置の微細化が進むにつれ、メモリセル間のばらつきが増大し、またディスターブや温度変化の影響を受け、閾値分布の幅が広がることがある。この場合、図１に示すように、隣接する閾値分布が重なったり、閾値分布が基準値を下回ったりすることがある。
【００１３】
また多値化に伴い、読み出し電位を変えての複数回の読み出し動作が必要であり、読み出し時間が増大してしまっている。
【００１４】
それに対して、不揮発性半導体記憶装置における記憶方式の１つとして、複数のメモリセル（例えばｎ個（ｎは任意の整数））を１グループとし、１グループ内のメモリセルの閾値の順序により、データを決定する方式が考えられる（図２参照）。
【００１５】
図２に示すように、１グループにｎ個のメモリセルが含まれる場合、メモリセルの閾値の順序は、ｎ！通りある。つまり、１グループでｎ！値のデータを定義することができる。
【００１６】
図１の方式の場合、図３の破線に示すような４つの分布が存在する。しかし、図２の方式の場合、図１で説明した方式と異なり、データ毎に閾値が定まっているわけではない。そのため、図２の方式でメモリセルの閾値分布を見ると、図３に示すように、１つの分布に見える。
【００１７】
以下では、図２で説明した方式を採用する半導体記憶装置について説明する。
【００１８】
＜１−２＞  構成
まず、第１実施形態に係る半導体記憶装置の構成について説明する。
【００１９】
＜１−２−１＞  メモリシステムの全体構成
第１実施形態に係るメモリシステムの構成例について、図４を用いて説明する。図４は、第１実施形態に係るメモリシステムの構成の一例を示すブロック図である。メモリシステム１００は、例えば、外部のホスト機器２００と通信する。メモリシステム１００は、ホスト機器２００からのデータを保持し、また、データをホスト機器２００に読み出す。
【００２０】
図４に示すように、メモリシステム１００は、メモリコントローラ１０及び半導体記憶装置（ＮＡＮＤフラッシュメモリ）２０を備えている。メモリコントローラ１０は、ホスト機器２００から命令を受取り、受け取られた命令に基づいて半導体記憶装置２０を制御する。具体的には、メモリコントローラ１０は、ホスト機器２００から書き込みを指示されたデータを半導体記憶装置２０に書き込み、ホスト機器２００から読出しを指示されたデータを半導体記憶装置２０から読み出してホスト機器２００に送信する。メモリコントローラ１０は、ＮＡＮＤバスによって半導体記憶装置２０に接続される。半導体記憶装置２０は、複数のメモリセルを備え、データを不揮発に記憶する。
【００２１】
ＮＡＮＤバスは、ＮＡＮＤインタフェースに従った信号／ＣＥ、ＣＬＥ、ＡＬＥ、／ＷＥ、／ＲＥ、／ＷＰ、／ＲＢ、及びＩ／Ｏ＜７：０＞の各々について、個別の配線を介して送受信を行う。信号／ＣＥは、半導体記憶装置２０をイネーブルにするための信号である。信号ＣＬＥは、信号ＣＬＥが“Ｈ（High）”レベルである間に半導体記憶装置２０に流れる信号Ｉ／Ｏ＜７：０＞がコマンドであることを半導体記憶装置２０に通知する。信号ＡＬＥは、信号ＡＬＥが“Ｈ”レベルである間に半導体記憶装置２０に流れる信号Ｉ／Ｏ＜７：０＞がアドレスであることを半導体記憶装置２０に通知する。信号／ＷＥは、信号／ＷＥが“Ｌ（Low）”レベルである間に半導体記憶装置２０に流れる信号Ｉ／Ｏ＜７：０＞を半導体記憶装置２０に取り込むことを指示する。信号／ＲＥは、半導体記憶装置２０に信号Ｉ／Ｏ＜７：０＞を出力することを指示する。信号／ＷＰは、データ書き込み及び消去の禁止を半導体記憶装置２０に指示する。信号／ＲＢは、半導体記憶装置２０がレディ状態（外部からの命令を受け付ける状態）であるか、ビジー状態（外部からの命令を受け付けない状態）であるかを示す。信号Ｉ／Ｏ＜７：０＞は、例えば８ビットの信号である。信号Ｉ／Ｏ＜７：０＞は、半導体記憶装置２０とメモリコントローラ１０との間で送受信されるデータの実体であり、コマンドＣＭＤ、アドレスＡＤＤ、及びデータＤＡＴを含む。データＤＡＴは、書き込みデータ及び読出しデータを含む。
【００２２】
＜１−２−２＞  コントローラの構成について
引き続き図４を用いて、第１実施形態に係るメモリシステムのコントローラについて説明する。メモリコントローラ１０は、プロセッサ（ＣＰＵ：Central Processing Unit）１１、内蔵メモリ（ＲＡＭ：Random Access Memory）１２、ＥＣＣ（Error Check and Correction）回路１３、ＮＡＮＤインタフェース回路１４、バッファメモリ１５、及びホストインタフェース回路１６を備えている。
【００２３】
プロセッサ１１は、メモリコントローラ１０全体の動作を制御する。プロセッサ１１は、例えば、ホスト機器２００から受信したデータの読出し命令に応答して、ＮＡＮＤインタフェースに基づく読出し命令を半導体記憶装置２０に対して発行する。この動作は、書き込み及び消去の場合についても同様である。また、プロセッサ１１は、半導体記憶装置２０からの読出しデータに対して、種々の演算を実行する機能を有する。
【００２４】
内蔵メモリ１２は、例えば、ＤＲＡＭ（Dynamic RAM）等の半導体メモリであり、プロセッサ１１の作業領域として使用される。内蔵メモリ１２は、半導体記憶装置２０を管理するためのファームウェア、及び各種の管理テーブル等を保持する。
【００２５】
ＥＣＣ回路１３は、エラー検出及びエラー訂正処理を行う。より具体的には、データの書き込み時には、ホスト機器２００から受信したデータに基づいて、或る数のデータの組毎にＥＣＣ符号を生成する。また、データの読出し時には、ＥＣＣ符号に基づいてＥＣＣ復号し、エラーの有無を検出する。そしてエラーが検出された際には、そのビット位置を特定し、エラーを訂正する。
【００２６】
ＮＡＮＤインタフェース回路１４は、ＮＡＮＤバスを介して半導体記憶装置２０と接続され、半導体記憶装置２０との通信を司る。ＮＡＮＤインタフェース回路１４は、プロセッサ１１の指示により、コマンドＣＭＤ、アドレスＡＤＤ、及び書き込みデータを半導体記憶装置２０に送信する。また、ＮＡＮＤインタフェース回路１４は、半導体記憶装置２０から読出しデータを受信する。
【００２７】
バッファメモリ１５は、メモリコントローラ１０が半導体記憶装置２０及びホスト機器２００から受信したデータ等を一時的に保持する。バッファメモリ１５は、例えば、半導体記憶装置２０からの読出しデータ、及び読出しデータに対する演算結果等を一時的に保持する記憶領域としても使用される。
【００２８】
ホストインタフェース回路１６は、ホスト機器２００と接続され、ホスト機器２００との通信を司る。ホストインタフェース回路１６は、例えば、ホスト機器２００から受信した命令及びデータを、それぞれプロセッサ１１及びバッファメモリ１５に転送する。
【００２９】
＜１−２−３＞  半導体記憶装置の構成
次に、第１実施形態に係る半導体記憶装置の構成例について、図５を用いて説明する。図５は、第１実施形態に係る半導体記憶装置の構成の一例を示すブロック図である。
【００３０】
半導体記憶装置２０は、メモリセルアレイ２１、入出力回路２２、ロジック制御回路２３、レジスタ２４、シーケンサ２５、電圧生成回路２６、ドライバセット２７、ロウデコーダ２８、及びセンスアンプモジュール２９を備えている。
【００３１】
メモリセルアレイ２１は、複数のブロックＢＬＫを備えている。ブロックＢＬＫは、ワード線及びビット線に関連付けられた複数の不揮発性メモリセルトランジスタ（図示せず）を含む。ブロックＢＬＫは、例えばデータの消去単位となり、同一のブロックＢＬＫ内のデータは、一括して消去される。各ブロックＢＬＫは、複数のストリングユニットＳＵを備えている。各ストリングユニットＳＵは、ＮＡＮＤストリングＮＳの集合である。ＮＡＮＤストリングＮＳは、複数のメモリセルトランジスタを含む。以下では、メモリセルトランジスタは、単に「メモリセル」または「セル」とも記載する。また、同一ワード線に接続された複数のメモリセルトランジスタ単位をグループＧＰと記載する。本実施形態における半導体記憶装置では、グループ単位でデータを記憶する。なお、メモリセルアレイ２１内のブロック数、１ブロックＢＬＫ内のストリングユニット数、１ストリングユニットＳＵ内のＮＡＮＤストリング数、及び１グループ内のメモリセルトランジスタ数は、任意の数に設定出来る。特に、グループとメモリセルトランジスタとの関係は、例えば入出力回路２２に記憶される。
【００３２】
入出力回路２２は、メモリコントローラ１０と信号Ｉ／Ｏ＜７：０＞を送受信する。入出力回路２２は、信号Ｉ／Ｏ＜７：０＞内のコマンドＣＭＤ及びアドレスＡＤＤをレジスタ２４に転送する。入出力回路２２は、書き込みデータ及び読み出しデータをセンスアンプモジュール２９と送受信する。入出力回路２２は、変換回路２２ａを備える。変換回路２２ａは、信号Ｉ／Ｏ＜７：０＞を受信すると、１グループで記憶できるビット（１グループが４つのセルで構成される場合は、４ビット）ずつ順列データへ変換する。順列データとは、順列情報（セルの閾値の並び順）を規定するためのデータフォーマットである。
【００３３】
ロジック制御回路２３は、メモリコントローラ１０から信号／ＣＥ、ＣＬＥ、ＡＬＥ、／ＷＥ、／ＲＥ、及び／ＷＰを受信する。また、ロジック制御回路２３は、信号／ＲＢをメモリコントローラ１０に転送して半導体記憶装置２０の状態を外部に通知する。
【００３４】
レジスタ２４は、コマンドＣＭＤ及びアドレスＡＤＤを保持する。レジスタ２４は、アドレスＡＤＤをロウデコーダ２８及びセンスアンプモジュール２９に転送すると共に、コマンドＣＭＤをシーケンサ２５に転送する。
【００３５】
シーケンサ２５は、コマンドＣＭＤを受け取り、受け取ったコマンドＣＭＤに基づくシーケンスに従って半導体記憶装置２０の全体を制御する。
【００３６】
電圧生成回路２６は、シーケンサ２５からの指示に基づき、データの書き込み、読出し、及び消去等の動作に必要な電圧を生成する。電圧生成回路２６は、生成した電圧をドライバセット２７に供給する。
【００３７】
ドライバセット２７は、複数のドライバを含み、レジスタ２４からのアドレスに基づいて、電圧生成回路２６からの種々の電圧をロウデコーダ２８及びセンスアンプモジュール２９に供給する。ドライバセット２７は、例えば、アドレス中のロウアドレスに基づき、ロウデコーダ２８に種々の電圧を供給する。
【００３８】
ロウデコーダ２８は、レジスタ２４からアドレスＡＤＤ中のロウアドレスを受取り、例えば当該ロウアドレス内のブロックアドレスに基づいてブロックＢＬＫ等を選択する。そして、選択されたブロックＢＬＫには、ロウデコーダ２８を介してドライバセット２７からの電圧が転送される。
【００３９】
センスアンプモジュール２９は、データの読出し時には、メモリセルトランジスタからビット線に読み出された読出しデータをセンスし、センスした読出しデータを入出力回路２２に転送する。センスアンプモジュール２９は、データの書き込み時には、ビット線を介して書込まれる書き込みデータをメモリセルトランジスタに転送する。また、センスアンプモジュール２９は、レジスタ２４からアドレスＡＤＤ中のカラムアドレスを受取り、当該カラムアドレスに基づくカラムのデータを出力する。
【００４０】
＜１−２−４＞  メモリセルアレイの構成
次に、図６を用いて、第１実施形態に係る半導体記憶装置のメモリセルアレイの構成について説明する。図６は、第１実施形態に係る半導体記憶装置のメモリセルアレイの構成を説明するための回路図の一例である。
【００４１】
図６に示すように、ＮＡＮＤストリングＮＳの各々は、例えば８個のメモリセルトランジスタＭＴ（ＭＴ１〜ＭＴ８）と、選択トランジスタＳＴ１と、選択トランジスタＳＴ２とを備える。なお、メモリセルトランジスタＭＴの個数は８個に限られず、１６個、３２個、６４個、９６個、１２８個等であってもよく、その数は限定されるものではない。メモリセルトランジスタＭＴは、制御ゲートと電荷蓄積層とを含む積層ゲートを備える。各メモリセルトランジスタＭＴは、選択トランジスタＳＴ１及びＳＴ２の間に、直列接続される。なお、以下の説明では『接続』とは、間に別の導電可能な要素が介在する場合も含む。
【００４２】
また、図６に示すように、１つのグループＧＰは、同一のワード線ＷＬが接続された複数（例えば４つ）のメモリセルトランジスタを含む。ここでは、グループ毎にデータを記憶する。
【００４３】
メモリセルアレイの構成についてはその他の構成であっても良い。すなわちメモリセルアレイの構成については、例えば、“三次元積層不揮発性半導体メモリ”という２００９年３月１９日に出願された米国特許出願１２／４０７，４０３号に記載されている。また、“三次元積層不揮発性半導体メモリ”という２００９年３月１８日に出願された米国特許出願１２／４０６，５２４号、“不揮発性半導体記憶装置及びその製造方法”という２０１０年３月２５日に出願された米国特許出願１２／６７９，９９１号“半導体メモリ及びその製造方法”という２００９年３月２３日に出願された米国特許出願１２／５３２，０３０号に記載されている。これらの特許出願は、その全体が本願明細書において参照により援用されている。
【００４４】
＜１−２−５＞  センスアンプモジュールの構成
図７を用いて、第１実施形態に係る半導体記憶装置のセンスアンプモジュールの構成について説明する。
【００４５】
図７に示すように、第１実施形態に係る半導体記憶装置のセンスアンプモジュール２９は、複数のセンス部２９１（２９１＿１〜２９１＿ｋ）と、ラッチ部２９２（２９２＿１〜２９２＿ｋ）と、を備えている。
【００４６】
各センス部２９１は、１つのグループＧＰに関するセンスアンプＳＡとラッチ回路ＳＤＬの組をビット線毎に設けられている。
【００４７】
センスアンプＳＡは、ビット線ＢＬを介してメモリセルからデータを読み出し、ラッチ回路ＳＤＬにデータを記憶する。
【００４８】
ラッチ回路ＳＤＬは、センスアンプＳＡによって読み出されたデータ、または、メモリセルに書き込むデータが記憶される。
【００４９】
各ラッチ部２９２は、複数のラッチ回路ＷＤＬ及びＲＤＬを備えている。
【００５０】
ラッチ回路ＷＤＬは、メモリセルにデータを書き込むためのデータを記憶する。各ラッチ回路ＷＤＬに記憶されるデータについては後述する。なお、ラッチ回路ＷＤＬは、ｎＣ２個（ｎは１グループあたりのセル数）設けられている。
【００５１】
ラッチ回路ＲＤＬは、メモリセルから読み出した情報を記憶する。各ラッチ回路ＲＤＬに記憶されるデータについては後述する。また、ラッチ回路ＲＤＬは、ｎＣ２個（ｎは１グループあたりのセル数）設けられている。
【００５２】
＜１−２−６＞  ロウデコーダの構成について
次に、第１実施形態に係る半導体記憶装置のロウデコーダの構成について、図８を用いて説明する。
【００５３】
図８に示すように、ロウデコーダ２８は、複数の転送スイッチ群５１、及び複数のブロックデコーダ５２を含む。
【００５４】
１つの転送スイッチ群５１及び１つのブロックデコーダ５２は、例えば、１つのブロックＢＬＫに割当てられる。図８の例では、転送スイッチ群５１−０及びブロックデコーダ５２−０は、ブロックＢＬＫ０に割当てられ、転送スイッチ群５１−１及びブロックデコーダ５２−１は、ブロックＢＬＫ１に割当てられる。以下の説明では、書き込み、読出し、及び消去の対象となるブロックＢＬＫを「選択ブロックＢＬＫ」と言い、選択ブロックＢＬＫ以外のブロックＢＬＫを「非選択ブロックＢＬＫ」と言う。
【００５５】
転送スイッチ群５１は、例えば、１０個の転送トランジスタＴＴｒ（ＴＴｒ１〜ＴＴ１０）を含む。
【００５６】
転送トランジスタＴＴｒ１〜ＴＴｒ８はそれぞれ、ドライバセット２７から配線ＣＧ（ＣＧ１〜ＣＧ８）に供給された電圧を、選択ブロックＢＬＫのワード線ＷＬ１〜ＷＬ８に転送する。転送トランジスタＴＴｒ１〜ＴＴｒ８はそれぞれ、対応するブロックＢＬＫのワード線ＷＬ１〜ＷＬ８に接続された第１端と、配線ＣＧ１〜ＣＧ８に接続された第２端と、ノードＢＬＫＳＥＬに共通に接続されたゲートと、を含む。
【００５７】
転送トランジスタＴＴｒ９は、ドライバセット２７から配線ＳＧＤＬに供給された電圧を、選択ブロックＢＬＫの選択ゲート線ＳＧＤに転送する。転送トランジスタＴＴｒ９はそれぞれ、対応するブロックＢＬＫの選択ゲート線ＳＧＤに接続された第１端と、配線ＳＧＤＬに接続された第２端と、ノードＢＬＫＳＥＬに共通に接続されたゲートと、を含む。
【００５８】
転送トランジスタＴＴｒ１０は、ドライバセット２７から配線ＳＧＳＬに供給された電圧を、選択ブロックＢＬＫの選択ゲート線ＳＧＳに転送する。転送トランジスタＴＴｒ１０は、対応するブロックＢＬＫの選択ゲート線ＳＧＳに接続された第１端と、配線ＳＧＳＬに接続された第２端と、ノードＢＬＫＳＥＬに接続されたゲートと、を含む。
【００５９】
ブロックデコーダ５２は、データの書き込み、読出し、及び消去の際に、レジスタ２４から受信したブロックアドレス信号をデコードする。ブロックデコーダ５２は、デコードの結果、当該ブロックデコーダ５２に対応するブロックＢＬＫが選択ブロックＢＬＫであると判定した場合、“Ｈ”レベルの信号をノードＢＬＫＳＥＬに出力する。また、ブロックデコーダ５２は、対応するブロックＢＬＫが選択ブロックＢＬＫでないと判定した場合、“Ｌ”レベルの信号をノードＢＬＫＳＥＬに出力する。ノードＢＬＫＳＥＬに出力される信号は、転送トランジスタＴＴｒ１〜ＴＴｒ１０を、“Ｈ”レベルでオン状態とし、“Ｌ”レベルでオフ状態とする。
【００６０】
ドライバセット２７は、レジスタ２４から受信したアドレスＡＤＤに従って、配線ＣＧ、ＳＧＤＬ、及びＳＧＳＬに電圧を供給する。配線ＣＧ、ＳＧＤＬ、及びＳＧＳＬは、ドライバセット２７から供給された各種電圧を、転送スイッチ群５１−０、５１−１、…の各々に対して転送する。つまり、ドライバセット２７から供給される電圧は、選択ブロックＢＬＫに対応する転送スイッチ群５１内の転送トランジスタＴＴｒ１〜ＴＴｒ１０を介して、選択ブロックＢＬＫ内のワード線ＷＬ、選択ゲート線ＳＧＤ及びＳＧＳに転送される。
【００６１】
＜１−３＞  動作
＜１−３−１＞  データ記憶方式
ここで、本実施形態に係る不揮発性半導体記憶装置の記憶方式について説明する。
【００６２】
上述したように、本実施形態に係る不揮発性半導体記憶装置の記憶方式は、１ページを、複数のセル（例えば４つのセル）毎にグループに分け、１グループ内の複数のセルの閾値の順列によりデータを決定する方式である。このようなデータを順列データと記載する。
【００６３】
図９及び図１０に示すように、例えば、４つのセルで１グループを形成する場合、セルの並び方としては、４！（２４）通り（１６値）の並び方がある。この並び方をビット数に換算すると、Ｌｏｇ２２４＝４．５８ビットとなる。更に、これを１つのセルあたりのビット数に換算すると、１．１５ビット／１セルになる。これは、所謂ＳＬＣ（Single level cell）相当の記憶密度となる。１グループ内のセルの数を増やせば、１セルあたりのビット数は大きくなる。
【００６４】
＜１−３−２＞  データフォーマット
図１１に示すように、本例における順列データは、２セルずつの閾値の大小関係にわけることで生成される。１グループに４つのセル（セル１〜セル４）が属する場合における順列データは、１ビット目にセル１とセル４との閾値の大小が規定され、２ビット目にセル１とセル３との閾値の大小が規定され、３ビット目にセル１とセル２との閾値の大小が規定され、４ビット目にセル２とセル４との閾値の大小が規定され、５ビット目にセル２とセル３との閾値の大小が規定され、６ビット目にセル３とセル４との閾値の大小が規定される。
【００６５】
図１１に示すように、セル１の閾値が、セル４の閾値よりも小さい場合は、１ビット目の値は“０”となる。セル１の閾値が、セル４の閾値よりも大きい場合は、１ビット目の値は“１”となる。
【００６６】
図１１に示すように、セル１の閾値が、セル３の閾値よりも小さい場合は、２ビット目の値は“０”となる。セル１の閾値が、セル３の閾値よりも大きい場合は、２ビット目の値は“１”となる。
【００６７】
図１１に示すように、セル１の閾値が、セル２の閾値よりも小さい場合は、３ビット目の値は“０”となる。セル１の閾値が、セル２の閾値よりも大きい場合は、３ビット目の値は“１”となる。
【００６８】
図１１に示すように、セル２の閾値が、セル４の閾値よりも小さい場合は、４ビット目の値は“０”となる。セル２の閾値が、セル４の閾値よりも大きい場合は、４ビット目の値は“１”となる。
【００６９】
図１１に示すように、セル２の閾値が、セル３の閾値よりも小さい場合は、５ビット目の値は“０”となる。セル２の閾値が、セル３の閾値よりも大きい場合は、５ビット目の値は“１”となる。
【００７０】
図１１に示すように、セル３の閾値が、セル４の閾値よりも小さい場合は、６ビット目の値は“０”となる。セル３の閾値が、セル４の閾値よりも大きい場合は、６ビット目の値は“１”となる。
【００７１】
図１２に、１６値のデータと、順列データとの対応関係を図示した。具体的には、“１”データが入力されると、入出力回路２２は、順列データとして“００００００”を生成する。同様にして、２〜１６のデータが入力されると、入出力回路２２は、上記ルールに基づいて順列データを生成する。
【００７２】
＜１−３−３＞  順列データとラッチ回路ＷＤＬ
上記のように、４つのセルの順列データを書き込むためには、４Ｃ２（＝６）個のラッチ回路ＷＤＬが必要となる。
【００７３】
図１３に示すように、本実施形態に係る不揮発性半導体記憶装置では、６個のラッチ回路ＷＤＬを備えている。ラッチ回路ＷＤＬ（１＿４）は、順列データの１ビット目を記憶する。ラッチ回路ＷＤＬ（１＿３）は、順列データの２ビット目を記憶する。ラッチ回路ＷＤＬ（１＿２）は、順列データの３ビット目を記憶する。ラッチ回路ＷＤＬ（２＿４）は、順列データの４ビット目を記憶する。ラッチ回路ＷＤＬ（２＿３）は、順列データの５ビット目を記憶する。ラッチ回路ＷＤＬ（３＿４）は、順列データの６ビット目を記憶する。
【００７４】
なお、ここで、ラッチ回路ＷＤＬ（Ｘ＿Ｙ）という表記について説明する。「ラッチ回路ＷＤＬ（Ｘ＿Ｙ）」における「Ｘ」及び「Ｙ」は、あるグループにおけるセルの番号に相当する。例えば、セルＸの閾値が、セルＹの閾値よりも小さい場合は、「ラッチ回路ＷＤＬ（Ｘ＿Ｙ）」に“０”が記憶される。また、セルＸの閾値が、セルＹの閾値よりも大きい場合は、「ラッチ回路ＷＤＬ（Ｘ＿Ｙ）」に“１”が記憶される。
【００７５】
＜１−３−４＞  順列データとラッチ回路ＲＤＬ
上記のように、４つのセルの順列データを読み出すためには、４Ｃ２（＝６）個のラッチ回路ＲＤＬが必要となる。
【００７６】
図１４に示すように、本実施形態に係る不揮発性半導体記憶装置では、６個のラッチ回路ＲＤＬを備えている。ラッチ回路ＲＤＬ（１＿４）は、順列データの１ビット目を記憶する。ラッチ回路ＲＤＬ（１＿３）は、順列データの２ビット目を記憶する。ラッチ回路ＲＤＬ（１＿２）は、順列データの３ビット目を記憶する。ラッチ回路ＲＤＬ（２＿４）は、順列データの４ビット目を記憶する。ラッチ回路ＲＤＬ（２＿３）は、順列データの５ビット目を記憶する。ラッチ回路ＲＤＬ（３＿４）は、順列データの６ビット目を記憶する。
【００７７】
なお、ここで、ラッチ回路ＲＤＬ（Ｘ＿Ｙ）という表記について説明する。「ラッチ回路ＲＤＬ（Ｘ＿Ｙ）」における「Ｘ」及び「Ｙ」は、あるグループにおけるセルの番号に相当する。例えば、セルＸの閾値が、セルＹの閾値よりも小さい場合は、「ラッチ回路ＲＤＬ（Ｘ＿Ｙ）」に“０”が記憶される。また、セルＸの閾値が、セルＹの閾値よりも大きい場合は、「ラッチ回路ＲＤＬ（Ｘ＿Ｙ）」に“１”が記憶される。
【００７８】
＜１−４＞  動作
＜１−４−１＞  データ書き込み
＜１−４−１−１＞  概要
ここで、図１５を用いて、本実施形態に係る不揮発性半導体記憶装置のデータ書き込みの概要について説明する。ここでは、簡単のため４セル／グループの例を用いるが、実際は９セル／グループや２０セル／グループとすることが考えられ、その際でも原理は同じである。
【００７９】
図１５に示すように、メモリコントローラ１０のＮＡＮＤインタフェース回路１４から半導体記憶装置２０にデータが供給される（Ｓ１）。
【００８０】
入出力回路２２は、ＮＡＮＤインタフェース回路１４から受信したデータを４ビット毎に区切る（Ｓ２）。そして、入出力回路２２は、区切ったデータをセルの順列に変換する（Ｓ３）。更に、入出力回路２２は、セルの順列に基づいて、順列データを生成する（Ｓ４）。そして、シーケンサ２５は、順列データに基づいて、メモリセルへ書き込みを行う。その結果、１グループにおいて、順列データに基づく並び順でメモリセルの閾値が設定される（Ｓ５）。
【００８１】
＜１−４−１−２＞  フロー
図１６を用いて、本実施形態に係る不揮発性半導体記憶装置のデータ書き込みの流れについて説明する。なお、データの書き込みはおおまかに２つの動作を備えている。１つ目の動作は、メモリセルの閾値を変えるプログラムである。２つ目の動作は、プログラムの結果を確認するプログラムベリファイである。以下では、プログラムと、プログラムベリファイをくりかえすことで、データを書き込む方法について説明する。
【００８２】
［ステップＳ１０１］
シーケンサ２５は、ラッチ回路ＷＤＬに記憶された順列データに基づいて第１プログラムを行う。シーケンサ２５は、第１プログラムとして、３レベルのパルスをそれぞれ該当するセルに印加し、各グループ内のセルの閾値がそれぞれの順位になるよう書き込みを行う。一方で、グループ内の最下位に書き込むべきセル（第１番目のセル）は、閾値が最も低いので、書き込みを行う必要はない。そこで、この第１プログラムでは、第１番目のセル（非書き込みのセル）以外のセルに対してプログラムを行う。プログラム時における、ラッチ回路の動きなどについては後述する。
【００８３】
［ステップＳ１０２］
シーケンサ２５は、ステップＳ１０１の後、プログラムベリファイ動作を行う。
【００８４】
［ステップＳ１０３］
シーケンサ２５は、ディテクト１として、各グループ内の最下位に書き込むべきセル（第１番目のセル）の順位が正しいかどうかをチェックし、許容値以上のグループにおいて正しければステップＳ１０３はパスする（フェイルするグループの許容値は任意に設定できる）。なお、ディテクト１時における、ラッチ回路の動きなどについては後述する。
【００８５】
［ステップＳ１０４］
シーケンサ２５は、ディテクト１がフェイルであると判定する場合（ステップＳ１０３、フェイル）、書き込み対象のセルに対して第１サイクルプログラムを行う。
【００８６】
［ステップＳ１０５］
シーケンサ２５は、第１サイクルプログラムの後、書き込み対象のセルに対して第２サイクルプログラムを行う。
【００８７】
［ステップＳ１０６］
シーケンサ２５は、第２サイクルプログラムの後、書き込み対象のセルに対して第３サイクルプログラムを行う。その後、ステップＳ１０２において、プログラムベリファイ動作が行われる。
【００８８】
［ステップＳ１０７］
シーケンサ２５は、ディテクト１がパスしていると判定する場合（ステップＳ１０３、パス）、ディテクト２を行う。ディテクト２では、各グループ内の下から２番目に書き込むべきセル（第２番目のセル）の順位が正しいかをチェックし、許容値以上のグループにおいて正しければパスする。
【００８９】
［ステップＳ１０８］
シーケンサ２５は、ディテクト２がベリファイをパスしていないと判定する場合（ステップＳ１０７、フェイル）、第２サイクルプログラムを行う。
【００９０】
［ステップＳ１０９］
シーケンサ２５は、第２サイクルプログラムの後、第３サイクルプログラムを行う。
【００９１】
［ステップＳ１１０］
シーケンサ２５は、ステップＳ１０９の後、プログラムベリファイを行う。そして、その後、ステップＳ１０７を繰り返す。
【００９２】
［ステップＳ１１１］
シーケンサ２５は、ディテクト２がプログラムベリファイをパスしていると判定する場合（ステップＳ１０７、パス）、ディテクト３を行う。
【００９３】
ディテクト３では、最上位に書き込むべきセル（第４番目のセル）の順位が正しいかをチェックし、許容値以上のグループにおいて正しければパスする。
【００９４】
シーケンサ２５は、ディテクト３をパスすると、書き込み動作を終了する。
【００９５】
［ステップＳ１１２］
シーケンサ２５は、ディテクト３がフェイルだと判定する場合（ステップＳ１１１、フェイル）、第３サイクルプログラムを行う。
【００９６】
［ステップＳ１１３］
シーケンサ２５は、ステップＳ１１２の後、プログラムベリファイを行う。その後、ステップＳ１１１を繰り返す。
【００９７】
＜１−４−１−３＞  具体例
続いて、本実施形態に係る不揮発性半導体記憶装置のデータ書き込みの具体例について説明する。以下では、動作波形や、ラッチ回路の動きに着目して具体例を説明する。
【００９８】
ここでは、メモリコントローラ１０から受信したデータ“１１００”を書き込む場合について説明する。
【００９９】
入出力回路２２はメモリコントローラ１０から“１１００”を受信すると、データ“１２”に変換する。データ“１２”の場合セル１〜セル４の並び順は、図１７に示すように低い方から高い方へ順に、セル４、セル１、セル３、セル２、となる。このようなセル１〜セル４の並び方を表わす順列データは“１００１１１”となる。なお、ここでは、簡単のため、セル１〜セル４のそれぞれが属するビット線ＢＬは、ビット線ＢＬ１〜ＢＬ４とする。
【０１００】
順列データ“１００１１１”は、ラッチ回路ＷＤＬに記憶される。より具体的には、ラッチ回路ＷＤＬ（１＿４）は、順列データの１ビット目（セル１とセル４との閾値の大小を定義するビット）の“１”を記憶する。ラッチ回路ＷＤＬ（１＿３）は、順列データの２ビット目（セル１とセル３との閾値の大小を定義するビット）の“０”を記憶する。ラッチ回路ＷＤＬ（１＿２）は、順列データの３ビット目（セル１とセル２との閾値の大小を定義するビット）の“０”を記憶する。ラッチ回路ＷＤＬ（２＿４）は、順列データの４ビット目（セル２とセル４との閾値の大小を定義するビット）の“１”を記憶する。ラッチ回路ＷＤＬ（２＿３）は、順列データの５ビット目（セル２とセル３との閾値の大小を定義するビット）の“１”を記憶する。ラッチ回路ＷＤＬ（３＿４）は、順列データの６ビット目（セル３とセル４との閾値の大小を定義するビット）の“１”を記憶する。
【０１０１】
その後、全てのラッチ回路ＳＤＬを“０”にする。
【０１０２】
以下に、図１８、及び図１９を用いて本具体例における動作波形について説明する。図１８、及び図１９では、選択ワード線ＷＬ、ビット線ＢＬ１〜ＢＬ４の電圧を示している。
【０１０３】
［時刻Ｔ１〜Ｔ６］
図１８に示すように、シーケンサ２５は、時刻Ｔ１〜Ｔ６にかけて第１プログラム（ステップＳ１０１）を行う。シーケンサ２５は、第１プログラムの際、第１パルス、第２パルス、第３パルスを選択ワード線ＷＬに印加する。第１パルスとは、第２〜４番目のセルに対して電圧ＶＰＧＭ（１）を印加する動作である。第２パルスとは、第３、第４番目のセルに対して電圧ＶＰＧＭ（２）（ＶＰＧＭ（１）＜ＶＰＧＭ（２））を印加する動作である。第３パルスとは、第４番目のセルに対して電圧ＶＰＧＭ（３）（ＶＰＧＭ（２）＜ＶＰＧＭ（３））を印加する動作である。
【０１０４】
上述したように、セル１〜セル４は、それぞれビット線ＢＬ１〜ＢＬ４に接続されている。また、セルの順列は、低い方から順にセル４、セル１、セル３、セル２となる。
【０１０５】
ここで、セル４の閾値Ｖｔｈ４は最も低い状態にされるので、セル４には第１プログラムは行われない。そのため、第１〜第３パルス時においてビット線ＢＬ４には非書き込み（書き込み禁止（インヒビット））用の電圧ＶＤＤＳＡが印加される。換言すると、インヒビットするには、該当セルのビット線ＢＬが電圧ＶＤＤＳＡとなるよう制御すればよい。ここで、ビット線ＢＬ４を非書き込みにする方法を説明する。ラッチ回路ＷＤＬに記憶されたデータを用いて、演算を行う。演算としては、下記の演算１〜演算４を行う。演算１の結果はビット線ＢＬ１に係るラッチ回路ＳＤＬ（ＳＤＬ１）に記憶され、演算２の結果はビット線ＢＬ２に係るラッチ回路ＳＤＬ（ＳＤＬ２）に記憶され、演算３の結果はビット線ＢＬ３に係るラッチ回路ＳＤＬ（ＳＤＬ３）に記憶され、演算４の結果はビット線ＢＬ４に係るラッチ回路ＳＤＬ（ＳＤＬ４）に記憶される。なお、以下の演算１〜演算４に示される「SDLx <- WDLy 」 という表記はラッチ回路ＷＤＬｙのデータをラッチ回路ＳＤＬｘに記憶するという意味である。また「~ WDLy」という表記は、ラッチ回路ＷＤＬｙのデータを反転させるという意味である。また、「WDLy & WDLz」という表記は、ラッチ回路ＷＤＬｙのデータとラッチ回路ＷＤＬｚのデータをＡＮＤ演算するという意味である。（演算１）SDL1 <- ~WDL(1_2) & ~WDL(1_3) & ~WDL(1_4)
（演算２）SDL2 <- WDL(1_2) & ~WDL(2_3) & ~WDL(2_4)
（演算３）SDL3 <- WDL(1_3) &  WDL(2_3) & ~WDL(3_4)
（演算４）SDL4 <- WDL(1_4) &  WDL(2_4) &  WDL(3_4)
“１”が記憶されたラッチ回路ＳＤＬに関するビット線ＢＬは、非書き込みのビット線ＢＬとなり、非書き込み用の電圧ＶＤＤＳＡが転送される。本例では、ラッチ回路ＳＤＬ１〜ＳＤＬ３に“０”が記憶され、ラッチ回路ＳＤＬ４に“１”が記憶される。上記の演算を行うことで、該当するラッチ回路ＳＤＬ４だけが“１”データとなる。その結果、ビット線ＢＬ１〜ＢＬ３は書き込み対象となり、ビット線ＢＬ４のみが書き込み非対象となる。
【０１０６】
また、セル１の閾値Ｖｔｈ１は下から２番目である。そのため、セル１には、第２、第３パルスは印加されない。そのため、第２、第３パルス時においてビット線ＢＬ１には非書き込み用の電圧ＶＤＤＳＡが印加される。ここで、ビット線ＢＬ１を非書き込みにする方法を説明する。ラッチ回路ＷＤＬに記憶されたデータを用いて、演算を行う。演算としては、下記の演算５〜演算８を行う。なお、以下の演算５〜演算８に示される「SDLx | WDLy 」 という表記はラッチ回路ＷＤＬｙのデータとラッチ回路ＳＤＬｘのデータをＯＲ演算するという意味である。  
（演算５）RDL(1_2) <- ((~WDL(1_2) | SDL2) & (~WDL(1_3) | SDL3) & (~WDL(1_4) | SDL4)) | SDL1
（演算６）RDL(1_3) <- ((WDL(1_2) | SDL1) & (~WDL(2_3) | SDL3) & (~WDL(2_4) | SDL4)) | SDL2
（演算７）RDL(1_4) <- ((WDL(1_3) | SDL1) & (WDL(2_3) | SDL2) & (~WDL(3_4) | SDL4)) | SDL3
（演算８）RDL(2_3) <- ((WDL(1_4) | SDL1) & (WDL(2_4) | SDL2) & (WDL(3_4) | SLD3)) | SDL4
ここでは、演算の途中にラッチ回路ＳＤＬのデータが上書きされてしまうことを避けるためにで、ラッチ回路ＲＤＬの一部を使っている。演算５の結果は例えばラッチ回路ＲＤＬ（１＿２）に記憶され、演算６の結果は例えばラッチ回路ＲＤＬ（１＿３）に記憶され、演算７の結果は例えばラッチ回路ＲＤＬ（１＿４）に記憶され、演算８の結果は例えばラッチ回路ＲＤＬ（２＿３）に記憶される。本例では、ラッチ回路ＲＤＬ（１＿２）、及びＲＤＬ（２＿３）に“１”データが記憶され、ラッチ回路ＲＤＬ（１＿３）、及びＲＤＬ（１＿４）に“０”データが記憶される。演算の終了後、ラッチ回路ＲＤＬのデータをラッチ回路ＳＤＬにコピーする。これにより、ラッチ回路ＳＤＬ２、及びＳＤＬ３に“０”が記憶され、ラッチ回路ＳＤＬ１、及びＳＤＬ４に“１”が記憶される。その結果、ビット線ＢＬ２、ＢＬ３は書き込み対象となり、ビット線ＢＬ１、ＢＬ４が書き込み非対象となる。
【０１０７】
また、セル３の閾値Ｖｔｈ３は下から３番目である。そのため、セル３には、第３パルスは印加されない。そのため、第３パルス時においてビット線ＢＬ３には書き込み非対象用の電圧ＶＤＤＳＡが印加される。また、セル２の閾値Ｖｔｈ２は一番高い。そのため、セル２には、第１〜第３パルスが印加される。そのため、第１〜第３パルス時においてビット線ＢＬ２には書き込み用の電圧ＶＳＳが印加される。ここで、ビット線ＢＬ３を非書き込みにする方法を説明する。ラッチ回路ＷＤＬに記憶されたデータを用いて、演算を行う。演算としては、上記の演算５〜演算８を行う。これにより、ラッチ回路ＳＤＬ２に“０”が記憶され、ラッチ回路ＳＤＬ１、ＳＤＬ３、及びＳＤＬ４に“１”が記憶される。その結果、ビット線ＢＬ２は書き込み対象となり、ビット線ＢＬ１、ＢＬ３、ＢＬ４が書き込み非対象となる。
【０１０８】
［時刻Ｔ７〜Ｔ１１］
ここでは主に第１プログラムでは、想定通りの順序に書き込みが出来なかった場合の説明を行う。例えば、セル４、セル１、セル３、セル２、という順で書き込みたかったのに、セル４、セル３、セル１、セル２、という順で書き込まれた場合を説明する。
【０１０９】
まず、プログラムベリファイの最初に、ラッチ回路ＲＤＬと、ラッチ回路ＳＤＬ“０”にリセットする。その後、シーケンサ２５は、プログラムベリファイ（ステップＳ１０２）を行う。この際、シーケンサ２５は、選択ワード線ＷＬに、プログラムベリファイ用の電圧ＶＳＷＥを印加する。この電圧ＶＳＷＥは、例えば０Ｖから正の第１電圧まで徐々に昇圧（スイープ）される。選択ワード線ＷＬがスイープされることにより、閾値電圧の低いメモリセルから順にオン状態となり、セル電流が流れていく。その結果、ビット線の電位が充電電圧ＶＤＤｘからＶＳＳｘに降圧される。センスアンプＳＡは、各ビット線ＢＬの電圧がＶＳＳｘに降圧されるタイミングを判定する。このようなプログラムベリファイにおいては、ＶＳＳｘに降圧されるタイミングが早いほど、閾値が低いということを意味する。読み出し結果は、ラッチ回路ＲＤＬに記憶される。具体的には、ラッチ回路ＲＤＬ（１＿２）に“０”が記憶され、ラッチ回路ＲＤＬ（１＿２）に“０”が記憶され、ラッチ回路ＲＤＬ（１＿３）、（１＿４）、（２＿３）、（２＿４）、（３＿４）に“１”が記憶される。
【０１１０】
次に、ディテクト1のステートにて、各グループの最下位のセルの順番が正しく書きあがっているかどうかの検知を行う。ラッチ回路ＷＤＬに記憶されている書き込みデータと、ラッチ回路ＲＤＬに記憶されているプログラムベリファイ結果と、をＸＮＯＲ演算し、ラッチ回路ＲＤＬに書き戻す。
【０１１１】
具体的には、ラッチ回路ＷＤＬ（１＿２）と、ラッチ回路ＲＤＬ（１＿２）とをＸＮＯＲ演算する。ここでは、ラッチ回路ＷＤＬ（１＿２）は“０”、ラッチ回路ＲＤＬ（１＿２）は“０”であるので、ラッチ回路ＲＤＬ（１＿２）に“１”が記憶される。
【０１１２】
同様に、ラッチ回路ＷＤＬ（１＿３）と、ラッチ回路ＲＤＬ（１＿３）とをＸＮＯＲ演算する。ここでは、ラッチ回路ＷＤＬ（１＿３）は“０”、ラッチ回路ＲＤＬ（１＿３）は“１”であるので、ラッチ回路ＲＤＬ（１＿３）に“０”が記憶される。
【０１１３】
ラッチ回路ＷＤＬ（１＿４）と、ラッチ回路ＲＤＬ（１＿４）とをＸＮＯＲ演算する。ここでは、ラッチ回路ＷＤＬ（１＿４）は“１”、ラッチ回路ＲＤＬ（１＿４）は“１”であるので、ラッチ回路ＲＤＬ（１＿４）に“１”が記憶される。
【０１１４】
ラッチ回路ＷＤＬ（２＿３）と、ラッチ回路ＲＤＬ（２＿３）とをＸＮＯＲ演算する。ここでは、ラッチ回路ＷＤＬ（２＿３）は“１”、ラッチ回路ＲＤＬ（２＿３）は“１”であるので、ラッチ回路ＲＤＬ（２＿３）に“１”が記憶される。
【０１１５】
ラッチ回路ＷＤＬ（２＿４）と、ラッチ回路ＲＤＬ（２＿４）とをＸＮＯＲ演算する。ここでは、ラッチ回路ＷＤＬ（２＿４）は“１”、ラッチ回路ＲＤＬ（２＿４）は“１”であるので、ラッチ回路ＲＤＬ（２＿４）に“１”が記憶される。
【０１１６】
ラッチ回路ＷＤＬ（３＿４）と、ラッチ回路ＲＤＬ（３＿４）とをＸＮＯＲ演算する。ここでは、ラッチ回路ＷＤＬ（３＿４）は“１”、ラッチ回路ＲＤＬ（３＿４）は“１”であるので、ラッチ回路ＲＤＬ（３＿４）に“１”が記憶される。
【０１１７】
この演算を行うことで、書き込みデータと読み出しデータが一致しないラッチ回路ＲＤＬに”０”が格納される。次に、比較データをラッチ回路ＳＤＬに転送する作業を行う。ラッチ回路ＳＤＬは、プログラムベリファイ後、“１”が記憶されている。
【０１１８】
ここで、下記演算を行う。  
（演算９）SDL1 <- ~(RDL(1_2) & RDL(1_3) & RDL(1_4))
（演算１０）SDL2 <- ~(RDL(1_2) & RDL(2_3) & RDL(2_4))
（演算１１）SDL3 <- ~(RDL(1_3) & RDL(2_3) & RDL(3_4))
（演算１２）SDL4 <- ~(RDL(1_4) & RDL(2_4) & RDL(3_4))
これにより、閾値の順位が期待値と異なっているビット線に属するラッチ回路ＳＤＬに“１”が格納される。本例の場合、ラッチ回路ＳＤＬ１、及びＳＤＬ３に“０”が記憶され、ラッチ回路ＳＤＬ２、及びＳＤＬ４に“０”が記憶される。このデータは、ラッチ回路ＳＤＬに接続されているセンスアンプＳＡ内の図示しないラッチ回路に転送される。このデータは、期待値と異なっているセンスアンプＳＡに「ディテクトがフェイルであったこと」を示すフェイルフラグを立てる為に用いられる。具体的には、ラッチ回路ＳＤＬ１に接続されているセンスアンプＳＡ１に“０”が転送される。同様にラッチ回路ＳＤＬ２に接続されているセンスアンプＳＡ２に“０”が転送される。ラッチ回路ＳＤＬ３に接続されているセンスアンプＳＡ３に“１”が転送される。ラッチ回路ＳＤＬ４に接続されているセンスアンプＳＡ４に“０”が転送される。
【０１１９】
そして、下記演算を行う。なお、演算１３〜１６は、演算９〜１２で演算されたラッチ回路ＳＤＬ１〜ＳＤＬ４のデータを用いて演算が行われる。  
（演算１３）SDL1 <- ((~WDL(1_2) | SDL2) & (~WDL(1_3) | SDL3) & (~WDL(1_4) | SDL4)) | SDL1
（演算１４）SDL2 <- ((WDL(1_2) | SDL1) & (~WDL(2_3) | SDL3) & (~WDL(2_4) | SDL4)) | SDL2
（演算１５）SDL3 <- ((WDL(1_3) | SDL1) & (WDL(2_3) | SDL2) & (~WDL(3_4) | SDL4)) | SDL3
（演算１６）SDL4 <- ((WDL(1_4) | SDL1) & (WDL(2_4) | SDL2) & (WDL(3_4) | SLD3)) | SDL4
なお、このとき、演算前のラッチ回路ＷＤＬ（１＿２）、及び（１＿３）は“０”を記憶し、ＷＤＬ（１＿４）、（２＿３）、（２＿４）、及び（３＿４）は“１”を記憶している。また、ラッチ回路ＳＤＬ１、及びＳＤＬ３は“０”を記憶し、ＳＤＬ２、及びＳＤＬ４は“１”を記憶している。そのため、上記演算１３〜演算１６の後は、ラッチ回路ＳＤＬ１、ＳＤＬ２、及びＳＤＬ４に“１”が記憶され、ラッチ回路ＳＤＬ３に“０”が記憶される。
【０１２０】
次に、ラッチ回路ＳＤＬと、ラッチ回路ＲＤＬを“０”にリセットした後、
（演算１７）SDL1 <- ~WDL(1_2) & ~WDL(1_3) & ~WDL(1_4) 
（演算１８）SDL2 <-  WDL(1_2) & ~WDL(2_3) & ~WDL(2_4)
（演算１９）SDL3 <-  WDL(1_3) &  WDL(2_3) & ~WDL(3_4)
（演算２０）SDL4 <-  WDL(1_4) &  WDL(2_4) &  WDL(3_4)
演算１７〜演算２０を行い、第１番目のセルに係るラッチ回路ＳＤＬに“１”を記憶する。
【０１２１】
この場合、閾値Ｖｔｈ４が一番小さいのでラッチ回路ＳＤＬ４に“１”が記憶される。
【０１２２】
その後、センスアンプＳＡに保存している、フェイルフラグの情報を反映するため、センスアンプＳＡ及びラッチ回路ＳＤＬにて演算を行い、ラッチ回路ＲＤＬに記憶する。
【０１２３】
なお、このときセンスアンプＳＡ１、及びＳＡ３には“１”が記憶され、センスアンプＳＡ２、及びＳＡ４には“０”が記憶されている。また、ラッチ回路ＳＤＬ１、ＳＤＬ２、及びＳＤＬ３には“０”が記憶され、ラッチ回路ＳＤＬ４には“１”が記憶されている。
【０１２４】
センスアンプＳＡ及びラッチ回路ＳＤＬにて演算を行い、ラッチ回路ＲＤＬに１つでも“１”がある場合は、「フェイル」となる。今回の仮定では、ラッチ回路ＲＤＬは全て“０”を記憶しているので、「パス」となる。
【０１２５】
ディテクト１のパス後はディテクト２のステートへと遷移する。ディテクト２では、（演算５）〜（演算８）を行う。
【０１２６】
ラッチ回路ＳＤＬ１〜ＳＤＬ３に“０”が記憶され、ラッチ回路ＳＤＬ４に“１”が記憶された状態となる。また、ラッチ回路ＷＤＬ（１＿２）、及び（１＿３）に“０”が記憶され、ラッチ回路ＷＤＬ（１＿４）、（２＿３）、（２＿４）、及び（３＿４）に“１”が記憶された状態となる。そのため、演算５〜演算８により、ラッチ回路ＲＤＬ（１＿３）、及び（１＿４）に“０”が記憶され、ラッチ回路ＷＤＬ（１＿２）、及び（２＿３）に“１”が記憶された状態となる。
【０１２７】
その後、ラッチ回路ＲＤＬのデータをラッチ回路ＳＤＬにコピーする。なお、６個のラッチ回路ＲＤＬのうち、どの４個のラッチ回路ＲＤＬのデータを４個のラッチ回路ＳＤＬにコピーするかは、シーケンサ２５の図示しない記憶部に予め記憶されている。
【０１２８】
その結果、ラッチ回路ＳＤＬ２、及びＳＤＬ３に“０”が記憶され、ラッチ回路ＳＤＬ１、及びＳＤＬ４に“１”が記憶された状態となる。
【０１２９】
その後、ディテクト１の時と同様、フェイルフラグの結果を反映するため、ラッチ回路ＳＤｌ＆センスアンプＳＡの演算を行い、演算結果をラッチ回路ＲＤＬに格納する。
【０１３０】
センスアンプＳＡ２、及びＳＡ４に“０”が記憶され、センスアンプＳＡ１、及びＳＡ３に“１”が記憶されている。そのため、ラッチ回路ＲＤＬ（１＿２）には“１”が記憶され、ラッチ回路ＲＤＬ（１＿３）、（１＿４）、及び（２＿３）には“０”が記憶される。
【０１３１】
ここで、“１”を記憶するラッチ回路ＲＤＬが存在するので、ディテクト２はフェイルとなり、次の第２サイクルプログラムのステートへと遷移する。
【０１３２】
［時刻Ｔ２０〜Ｔ２１］
図１９に示すように、シーケンサ２５は、時刻Ｔ２０〜Ｔ２１にかけて第２サイクルプログラム（ステップＳ１０８）を行う。なお、この時、ラッチ回路ＳＤＬ２、及びＳＤＬ３が“０”を記憶している。つまり、ビット線ＢＬ２、及びＢＬ３の電位はＶＳＳとなり、ビット線ＢＬ１、及びＢＬ４の電位はＶＤＤＳＡとなる。これにより、ラッチ回路ＳＤＬ２、及びＳＤＬ３に係るセル２、及びセル３に、プログラム電圧が印加される。
【０１３３】
［時刻Ｔ２２〜Ｔ２３］
次に、第３サイクルプログラムのステートへと遷移する。ここでも、非書き込みセルと書き込みセルを選別するために、第２サイクルプログラムの時と同様、演算５〜演算８を行う。
【０１３４】
ラッチ回路ＳＤＬ２、及びＳＤＬ３に“０”が記憶され、ラッチ回路ＳＤＬ１、及びＳＤＬ４に“１”が記憶された状態となる。また、ラッチ回路ＷＤＬ（１＿２）、及び（１＿３）に“０”が記憶され、ラッチ回路ＷＤＬ（１＿４）、（２＿３）、（２＿４）、及び（３＿４）に“１”が記憶された状態となる。そのため、演算５〜演算８により、ラッチ回路ＲＤＬ（１＿３）に“０”が記憶され、ラッチ回路ＲＤＬ（１＿２）、（１＿４）、及び（２＿３）に“１”が記憶された状態となる。
【０１３５】
その後、ラッチ回路ＲＤＬのデータをラッチ回路ＳＤＬへ移動する。つまり、ラッチ回路ＳＤＬ２に“０”が記憶され、ラッチ回路ＳＤＬ１、ＳＤＬ３、及びＳＤＬ４に“１”が記憶された状態となる。つまり、ビット線ＢＬ１、ＢＬ３、及びＢＬ４が非書き込み状態となる。つまり、シーケンサは、この後パルスを印加することで、セル２のみに書き込み電圧を印加でき閾値を上昇させることができる。
【０１３６】
［時刻Ｔ２４〜Ｔ２９］
第３サイクルプログラムが終わった後、プログラムベリファイを行う。
【０１３７】
ここでは、上記の第２サイクルプログラムと第３サイクルプログラムにて、期待値通りの順序に書き上げ完了した場合について説明する。その場合、ディテクト１、 ディテクト２、ディテクト３を全てPassし書き込み完了となる。もしも、ディテクト１、ディテクト２、ディテクト３のいずれかでフェイルした場合には、それぞれのパルスを印加し、４つのセルすべての閾値順序が期待値どおりになるまで、書き込みを繰り返す。
【０１３８】
＜１−５＞  効果
上述した実施形態によれば、複数セルを１グループとしグループ内でのセルのしきい値の順列によりデータを決定する。これにより、高速にデータの書き込みを行うことができる。
【０１３９】
以下に、本実施形態の効果の理解を容易にするために、比較例について説明する。図１を用いて説明したように、比較例に係る記憶方式の１つとして、メモリセルの閾値を所定の電圧にすることでデータの記憶を行なう方式がある。
【０１４０】
比較例に係る記憶方式の場合、半導体記憶装置の微細化や、多値化が進むにつれ、隣接する閾値分布が重なったり、閾値分布が基準値を下回ったりすることがある。その結果、データの書き込みの際に、細かな制御が必要となり、データの書き込みに要する時間が増えてしまうという問題がある。例えば、閾値分布が４つある場合、その閾値分布に収まるように書き込み動作を行う必要がある。例えば、閾値が高くなればなるほど、閾値が変動しにくくなり、多くのパルスを印加する必要がある可能性がある。具体的には、図２０の（ａ）に示すように、例えば、Ａレベルを書く場合は、電圧ＡＶ〜ＢＶの範囲に収まるように書き込みを行う。また、Ｂレベルを書く場合は、電圧ＢＶ〜ＣＶの範囲に収まるように書き込みを行う。更にＣレベルを書く場合は、電圧ＣＶ以上になるように書き込みを行う。
【０１４１】
しかしながら、上述した実施形態によれば、比較例に係る記憶方式とは異なり、閾値分布を考慮する必要がない。上述した実施形態によれば、図２０（ｂ）に示すように、１グループ内のセル（セルａ〜セルｄ）の閾値をデータ毎に決まった順序で並べることができればよい。そのため、上述した実施形態によれば、比較例に係る記憶方式のような、高い精度の書き込みは求められない。その結果、上述した実施形態によれば、比較例に係る記憶方式に比べて、粗く書き込みが行えるため、より高速にデータの書き込みを行うことができる。
【０１４２】
また、上述した実施形態によれば、読み出し、ベリファイの高速化も期待できる。比較例に係る記憶方式の場合、選択ワード線ＷＬについて、ある基準レベルに保持して読み出し動作を行う必要がある。比較例に係る記憶方式の読み出し時において、選択ワード線ＷＬの電圧を階段状に上げていく読み出しも考えられる。例えば、選択ワード線ＷＬの電圧を８段の階段状に上げる場合、それぞれの電圧でセンス動作を行う。そのため、それぞれの電圧ごとにワード線ＷＬ、及びビット線ＢＬの安定化時間を待つ必要がある。そのため、比較例においてこのような読み出し方法を適用しても時間の短縮効果は期待できない。
【０１４３】
しかし、本実施形態によれば、読み出し時に、選択ワード線ＷＬをある基準電電圧に保持する必要がないため、完全に選択ワード線ＷＬの電圧をスイープしながら、一回のスイープで複数レベルを読む。そのため、メモリセルが多値化されている場合において、読み出し時間、及びベリファイ時間（つまりは書き込み時間）の短縮が可能となっている。
【０１４４】
＜２＞  第２実施形態
第２実施形態について説明する。第２実施形態では、センスアンプモジュールについて説明する。尚、第２実施形態に係る装置の基本的な構成及び基本的な動作は、上述した第１実施形態に係る装置と同様である。従って、上述した第１実施形態で説明した事項及び上述した第１実施形態から容易に類推可能な事項についての説明は省略する。
【０１４５】
＜２−１＞  構成
＜２−１−１＞  比較例のセンスアンプモジュールの構成
図２１を用いて、第２実施形態の比較例に係る半導体記憶装置のセンスアンプモジュールの構成について説明する。ここでは一例として、１グループが９個のメモリセルで構成される場合について説明する。
【０１４６】
図２１に示すように、第２実施形態の比較例に係る半導体記憶装置のセンスアンプモジュール２９は、複数のセンス部２９１（２９１＿１〜２９１＿ｋ）と、ラッチ部２９２（２９２＿１〜２９２＿ｋ）と、を備えている。
【０１４７】
各センス部２９１は、１つのグループＧＰに関するセンスアンプＳＡとラッチ回路ＳＤＬの組をビット線毎に設けられている。つまり、センスアンプＳＡとラッチ回路ＳＤＬは、ビット線ＢＬの本数だけ設けられている。
【０１４８】
各ラッチ部２９２は、複数のラッチ回路ＷＤＬ及びＲＤＬを備えている。複数のラッチ回路ＷＤＬ及びＲＤＬは、それぞれｎＣ２個(ｎは１グループあたりのセル数)設けられている。本例の場合は、１グループに９個のメモリセルがある場合を想定しているので、ラッチ回路ＷＤＬ及びＲＤＬは、それぞれ３６個あることになる。
【０１４９】
このように、順列記憶方式では、ラッチ回路ＷＤＬ及びＲＤＬの個数が１グループあたりのセル数(記憶密度)で決まり、密度が高くなればなるほどデータラッチ個数が増大する。
【０１５０】
＜２−１−２＞  第２実施形態のセンスアンプモジュールの構成
図２２を用いて、第２実施形態に係る半導体記憶装置のセンスアンプモジュールの構成について説明する。本例では、上述した比較例と比較し、１アクセス当たりのデータを比較例の半分に制限することで、ラッチ回路ＷＤＬ及びＲＤＬの個数を約半分にでき、その結果、面積の増加を抑制できる。
【０１５１】
図２２に示すように、第２実施形態の比較例に係る半導体記憶装置のセンスアンプモジュール２９は、複数のセンス部２９１（２９１＿１〜２９１＿ｋ）と、ラッチ部２９２（２９２＿１〜２９２＿ｋ）と、複数の演算部２９３（２９３＿１〜２９３＿ｋ）を備えている。
【０１５２】
本例でも比較例と同様に、１グループに９個のメモリセルが存在する。しかし、比較例と異なり、各グループには、大きく分けて２種類ある。一方は奇数ビット線ＢＬに係るグループであり、他方は偶数ビット線ＢＬに係るグループである。
【０１５３】
演算部２９３は、奇数ビット線ＢＬまたは偶数ビット線ＢＬが接続され、選択されたグループに応じて、センス部２９１に接続するビット線ＢＬを選択するマルチプレクサ２９３０を備えている。つまり、奇数ビット線ＢＬに係るグループが選択される場合、演算部２９３は奇数ビット線ＢＬをセンス部２９１に接続し活性化させる。そして、演算部２９３は偶数ビット線ＢＬを非活性状態にする。また、偶数ビット線ＢＬに係るグループが選択される場合、演算部２９３は偶数ビット線ＢＬをセンス部２９１に接続し活性化させる。そして、演算部２９３は奇数ビット線ＢＬを非活性状態にする。
【０１５４】
各センス部２９１は、センスアンプＳＡとラッチ回路ＳＤＬは、演算部２９３に接続されるビット線ＢＬの半分の本数だけ設けられている。つまり、１つのセンス部２９１に含まれるセンスアンプＳＡ及びラッチ回路ＳＤＬの組と、センス部２９１に係るビット線ＢＬとの対応関係は１対２である。演算部２９３＿１には、１０本のビット線ＢＬが接続されている。そのため、演算部２９３＿１に対応するセンス部２９１＿１には、５組のセンスアンプＳＡ及びラッチ回路ＳＤＬが設けられている。また、演算部２９３＿２には、８本のビット線ＢＬが接続されている。そのため、演算部２９３＿２に対応するセンス部２９１＿２には、４組のセンスアンプＳＡ及びラッチ回路ＳＤＬが設けられている。
【０１５５】
各ラッチ部２９２は、複数のラッチ回路ＷＤＬ及びＲＤＬを備えている。複数のラッチ回路ＷＤＬ及びＲＤＬは、それぞれｎＣ２／２個(ｎは１グループあたりのセル数)設けられている。つまり、１つのラッチ部２９２に含まれるラッチ回路ＷＤＬ及びＲＤＬと、１グループあたりのセル数との対応関係はｎＣ２／２対ｎである。本例の場合は、１グループに９個のメモリセルがある場合を想定しているので、ラッチ回路ＷＤＬ及びＲＤＬは、それぞれ１８個あることになる。ここでは簡単のため、図示していないが、隣接する２つのラッチ部２９２は電気的に接続され、互いのデータを授受できる。
【０１５６】
次に、マルチプレクサ２９３０について説明する。図２３に示すように、マルチプレクサ２９３０は、ＮＭＯＳトランジスタＴｒｅｈ、Ｔｒｅ、Ｔｒｏｈ、及びＴｒｏを備えている。
【０１５７】
トランジスタＴｒｅｈは、偶数ビット線選択信号ＥＳＥＬ＿Ｈに基づいて偶数ビット線と、センスアンプＳＡとを電気的に接続し、偶数ビット線を活性化するトランジスタである。
【０１５８】
トランジスタＴｒｅは、偶数ビット線非選択信号ＥＳＥＬに基づいて偶数ビット線に非選択電圧を転送し、偶数ビット線を非活性化するトランジスタである。非選択電圧は、ドライバセット２７から供給される。
【０１５９】
トランジスタＴｒｏｈは、奇数ビット線選択信号ＯＳＥＬ＿Ｈに基づいて奇数ビット線と、センスアンプＳＡとを電気的に接続し、偶数ビット線を活性化するトランジスタである。
【０１６０】
トランジスタＴｒｏは、奇数ビット線非選択信号ＯＳＥＬに基づいて奇数ビット線に非選択電圧を転送し、奇数ビット線を非活性化するトランジスタである。
【０１６１】
偶数ビット線選択信号ＥＳＥＬ＿Ｈ、偶数ビット線非選択信号ＥＳＥＬ、奇数ビット線選択信号ＯＳＥＬ＿Ｈ、及び奇数ビット線非選択信号ＯＳＥＬは、シーケンサ２５にて制御される。
【０１６２】
シーケンサ２５は、偶数ビット線ＢＬに係るグループを選択する場合、偶数ビット線選択信号ＥＳＥＬ＿Ｈを“Ｈ”レベル、偶数ビット線非選択信号ＥＳＥＬを“Ｌ”レベル、奇数ビット線選択信号ＯＳＥＬ＿Ｈを“Ｌ”レベル、奇数ビット線非選択信号ＯＳＥＬを“Ｈ”レベルにする。これにより、偶数ビット線ＢＬはセンスアンプＳＡに接続され（活性化され）、奇数ビット線ＢＬは非活性化される。
【０１６３】
また、シーケンサ２５は、奇数ビット線ＢＬに係るグループを選択する場合、偶数ビット線選択信号ＥＳＥＬ＿Ｈを“Ｌ”レベル、偶数ビット線非選択信号ＥＳＥＬを“Ｈ”レベル、奇数ビット線選択信号ＯＳＥＬ＿Ｈを“Ｈ”レベル、奇数ビット線非選択信号ＯＳＥＬを“Ｌ”レベルにする。これにより、奇数ビット線ＢＬはセンスアンプＳＡに接続され（活性化され）、偶数ビット線ＢＬは非活性化される。
【０１６４】
＜２−２＞  効果
上述した実施形態によれば、１つのラッチ部２９２に含まれるラッチ回路ＷＤＬ及びＲＤＬと、１グループあたりのセル数との対応関係はｎＣ２／２対ｎである。これにより、比較例と比較し、ラッチ部２９２の面積を抑制することができる。
【０１６５】
＜３＞  第３実施形態
第３実施形態について説明する。第３実施形態では、センスアンプモジュールについて説明する。尚、第３実施形態に係る装置の基本的な構成及び基本的な動作は、上述した第１実施形態に係る装置と同様である。従って、上述した第１実施形態で説明した事項及び上述した第１実施形態から容易に類推可能な事項についての説明は省略する。
【０１６６】
＜３−１＞  第３実施形態のセンスアンプモジュールの構成
図２４〜図２６を用いて、第３実施形態に係る半導体記憶装置のセンスアンプモジュールの構成について説明する。
【０１６７】
図２４に示すように、第３実施形態に係る半導体記憶装置のセンスアンプモジュール２９は、複数の組み合わせ回路群２９４（２９４＿１〜２９４＿ｋ）を更に備える。  組み合わせ回路群２９４は、第１実施形態で説明したような、ラッチ回路ＳＤＬ、ＷＤＬ、及びＲＤＬ等で行っていた演算を行う為の構成である。
【０１６８】
図２５、及び図２６を用いて、組み合わせ回路群２９４のより詳細な説明をする。
【０１６９】
図２５に示すように、組み合わせ回路群２９４は、ＮＯＲ回路Ｇ１−１、Ｇ１−２、Ｇ１−３、Ｇ１−４、Ｇ２―１ａ、Ｇ２―１ｂ、Ｇ２―１ｃ、Ｇ２―１ｄ、Ｇ２―２ａ、Ｇ２―２ｂ、Ｇ２―２ｃ、Ｇ２―２ｄ、Ｇ２―３ａ、Ｇ２―３ｂ、Ｇ２―３ｃ、Ｇ２―３ｄ、Ｇ２―４ａ、Ｇ２―４ｂ、Ｇ２―４ｃ、及びＧ２―４ｄと、ＮＡＮＤ回路Ｇ２―１ｅ、Ｇ２―２ｅ、Ｇ２―３ｅ、及びＧ２―４ｅを備えている。
【０１７０】
ＮＯＲ回路Ｇ１−１は、ラッチ回路ＷＤＬ（１＿２）、ラッチ回路ＷＤＬ（１＿３）、及びラッチ回路ＷＤＬ（１＿４）からの非反転入力に基づいてＮＯＲ演算し、出力信号Ｑ１―１を生成する。
【０１７１】
ＮＯＲ回路Ｇ１−２は、ラッチ回路ＷＤＬ（１＿２）からの反転入力、ラッチ回路ＷＤＬ（１＿３）、及びラッチ回路ＷＤＬ（１＿４）からの非反転入力に基づいてＮＯＲ演算し、出力信号Ｑ１―２を生成する。
【０１７２】
ＮＯＲ回路Ｇ１−３は、ラッチ回路ＷＤＬ（１＿２）、及びラッチ回路ＷＤＬ（１＿３）からの反転入力と、ラッチ回路ＷＤＬ（１＿４）からの非反転入力とに基づいてＮＯＲ演算し、出力信号Ｑ１―３を生成する。
【０１７３】
ＮＯＲ回路Ｇ１−４は、ラッチ回路ＷＤＬ（１＿２）、ラッチ回路ＷＤＬ（１＿３）、及びラッチ回路ＷＤＬ（１＿４）からの反転入力に基づいてＮＯＲ演算し、出力信号Ｑ１―４を生成する。
【０１７４】
ＮＯＲ回路Ｇ２−１ａは、ラッチ回路ＷＤＬ（１＿２）からの反転入力、及び信号ＩＮ２―２の非反転入力に基づいてＮＯＲ演算する。
【０１７５】
ＮＯＲ回路Ｇ２−１ｂは、ラッチ回路ＷＤＬ（１＿３）からの反転入力、及び信号ＩＮ２―３の非反転入力に基づいてＮＯＲ演算する。
【０１７６】
ＮＯＲ回路Ｇ２−１ｃは、ラッチ回路ＷＤＬ（１＿４）からの反転入力、及び信号ＩＮ２―４の非反転入力に基づいてＮＯＲ演算する。
【０１７７】
ＮＯＲ回路Ｇ２−１ｄは、ＮＯＲ回路Ｇ２−１ａ、Ｇ２−１ｂ、及びＧ２−１ｃからの非反転入力に基づいてＮＯＲ演算する。
【０１７８】
ＮＡＮＤ回路Ｇ２−１ｅは、ＮＯＲ回路Ｇ２−１ｄからの非反転入力、及び信号ＩＮ１―１の反転入力に基づいてＮＡＮＤ演算し、出力信号Ｑ２−１を生成する。
【０１７９】
ＮＯＲ回路Ｇ２−２ａは、ラッチ回路ＷＤＬ（１＿２）からの非反転入力、及び信号ＩＮ２―１の非反転入力に基づいてＮＯＲ演算する。
【０１８０】
ＮＯＲ回路Ｇ２−２ｂは、ラッチ回路ＷＤＬ（２＿３）からの反転入力、及び信号ＩＮ２―３の非反転入力に基づいてＮＯＲ演算する。
【０１８１】
ＮＯＲ回路Ｇ２−２ｃは、ラッチ回路ＷＤＬ（２＿４）からの反転入力、及び信号ＩＮ２―４の非反転入力に基づいてＮＯＲ演算する。
【０１８２】
ＮＯＲ回路Ｇ２−２ｄは、ＮＯＲ回路Ｇ２−２ａ、Ｇ２−２ｂ、及びＧ２−２ｃからの非反転入力に基づいてＮＯＲ演算する。
【０１８３】
ＮＡＮＤ回路Ｇ２−２ｅは、ＮＯＲ回路Ｇ２−２ｄからの非反転入力、及び信号ＩＮ１―２の反転入力に基づいてＮＡＮＤ演算し、出力信号Ｑ２−２を生成する。
【０１８４】
ＮＯＲ回路Ｇ２−２ａは、ラッチ回路ＷＤＬ（１＿２）からの非反転入力、及び信号ＩＮ２―１の非反転入力に基づいてＮＯＲ演算する。
【０１８５】
ＮＯＲ回路Ｇ２−２ｂは、ラッチ回路ＷＤＬ（２＿３）からの反転入力、及び信号ＩＮ２―３の非反転入力に基づいてＮＯＲ演算する。
【０１８６】
ＮＯＲ回路Ｇ２−２ｃは、ラッチ回路ＷＤＬ（２＿４）からの反転入力、及び信号ＩＮ２―４の非反転入力に基づいてＮＯＲ演算する。
【０１８７】
ＮＯＲ回路Ｇ２−２ｄは、ＮＯＲ回路Ｇ２−２ａ、Ｇ２−２ｂ、及びＧ２−２ｃからの非反転入力に基づいてＮＯＲ演算する。
【０１８８】
ＮＡＮＤ回路Ｇ２−２ｅは、ＮＯＲ回路Ｇ２−２ｄからの非反転入力、及び信号ＩＮ１―２の反転入力に基づいてＮＡＮＤ演算し、出力信号Ｑ２−２を生成する。
【０１８９】
ＮＯＲ回路Ｇ２−３ａは、ラッチ回路ＷＤＬ（１＿３）からの非反転入力、及び信号ＩＮ２―１の非反転入力に基づいてＮＯＲ演算する。
【０１９０】
ＮＯＲ回路Ｇ２−３ｂは、ラッチ回路ＷＤＬ（２＿３）からの非反転入力、及び信号ＩＮ２―２の非反転入力に基づいてＮＯＲ演算する。
【０１９１】
ＮＯＲ回路Ｇ２−３ｃは、ラッチ回路ＷＤＬ（３＿４）からの反転入力、及び信号ＩＮ２―４の非反転入力に基づいてＮＯＲ演算する。
【０１９２】
ＮＯＲ回路Ｇ２−３ｄは、ＮＯＲ回路Ｇ２−３ａ、Ｇ２−３ｂ、及びＧ２−３ｃからの非反転入力に基づいてＮＯＲ演算する。
【０１９３】
ＮＡＮＤ回路Ｇ２−３ｅは、ＮＯＲ回路Ｇ２−３ｄからの非反転入力、及び信号ＩＮ１―３の反転入力に基づいてＮＡＮＤ演算し、出力信号Ｑ２−３を生成する。
【０１９４】
ＮＯＲ回路Ｇ２−４ａは、ラッチ回路ＷＤＬ（１＿４）からの反転入力、及び信号ＩＮ２―１の非反転入力に基づいてＮＯＲ演算する。
【０１９５】
ＮＯＲ回路Ｇ２−４ｂは、ラッチ回路ＷＤＬ（２＿４）からの反転入力、及び信号ＩＮ２―２の非反転入力に基づいてＮＯＲ演算する。
【０１９６】
ＮＯＲ回路Ｇ２−４ｃは、ラッチ回路ＷＤＬ（３＿４）からの反転入力、及び信号ＩＮ２―３の非反転入力に基づいてＮＯＲ演算する。
【０１９７】
ＮＯＲ回路Ｇ２−４ｄは、ＮＯＲ回路Ｇ２−４ａ、Ｇ２−４ｂ、及びＧ２−４ｃからの非反転入力に基づいてＮＯＲ演算する。
【０１９８】
ＮＡＮＤ回路Ｇ２−４ｅは、ＮＯＲ回路Ｇ２−４ｄからの非反転入力、及び信号ＩＮ１―４の反転入力に基づいてＮＡＮＤ演算し、出力信号Ｑ２−４を生成する。
【０１９９】
図２６に示すように、組み合わせ回路群２９４は、更に、ＥｘＯＲ回路Ｇ３−１、Ｇ３−２、Ｇ３−３、Ｇ３−４、Ｇ３−５、及びＧ３−６と、ＮＡＮＤ回路Ｇ４−１、Ｇ４−２、Ｇ４―３、及びＧ４−４と、ＡＮＤ回路Ｇ５ａ、Ｇ５ｂ、Ｇ５ｃ、及びＧ５ｄと、ＯＲ回路Ｇ５ｅを備えている。
【０２００】
ＥｘＯＲ回路Ｇ３−１は、ラッチ回路ＲＤＬ（１＿２）、及びＷＤＬ（１＿２）からの非反転入力に基づいてＥｘＯＲ演算し、出力信号Ｑ３−１２を生成する。
【０２０１】
ＥｘＯＲ回路Ｇ３−２は、ラッチ回路ＲＤＬ（１＿３）、及びＷＤＬ（１＿３）からの非反転入力に基づいてＥｘＯＲ演算し、出力信号Ｑ３−１３を生成する。
【０２０２】
ＥｘＯＲ回路Ｇ３−３は、ラッチ回路ＲＤＬ（１＿４）、及びＷＤＬ（１＿４）からの非反転入力に基づいてＥｘＯＲ演算し、出力信号Ｑ３−１４を生成する。
【０２０３】
ＥｘＯＲ回路Ｇ３−４は、ラッチ回路ＲＤＬ（２＿３）、及びＷＤＬ（２＿３）からの非反転入力に基づいてＥｘＯＲ演算し、出力信号Ｑ３−２３を生成する。
【０２０４】
ＥｘＯＲ回路Ｇ３−５は、ラッチ回路ＲＤＬ（２＿４）、及びＷＤＬ（２＿４）からの非反転入力に基づいてＥｘＯＲ演算し、出力信号Ｑ３−２４を生成する。
【０２０５】
ＥｘＯＲ回路Ｇ３−６は、ラッチ回路ＲＤＬ（３＿４）、及びＷＤＬ（３＿４）からの非反転入力に基づいてＥｘＯＲ演算し、出力信号Ｑ３−３４を生成する。
【０２０６】
ＮＡＮＤ回路Ｇ４−１は、信号Ｑ３―１２、Ｑ３―１３、及びＱ３―１４の非反転入力に基づいてＮＡＮＤ演算し、出力信号Ｆｌａｇ１を生成する。
【０２０７】
ＮＡＮＤ回路Ｇ４−２は、信号Ｑ３―１２、Ｑ３―２３、及びＱ３―２４の非反転入力に基づいてＮＡＮＤ演算し、出力信号Ｆｌａｇ２を生成する。
【０２０８】
ＮＡＮＤ回路Ｇ４−３は、信号Ｑ３―１３、Ｑ３―２３、及びＱ３―３４の非反転入力に基づいてＮＡＮＤ演算し、出力信号Ｆｌａｇ３を生成する。
【０２０９】
ＮＡＮＤ回路Ｇ４−４は、信号Ｑ３―１４、Ｑ３―２４、及びＱ３―３４の非反転入力に基づいてＮＡＮＤ演算し、出力信号Ｆｌａｇ４を生成する。
【０２１０】
ＡＮＤ回路Ｇ５ａは、信号Ｆｌａｇ１の非反転入力、及びラッチ回路ＳＤＬ１からの非反転入力に基づいてＡＮＤ演算する。
【０２１１】
ＡＮＤ回路Ｇ５ｂは、信号Ｆｌａｇ２の非反転入力、及びラッチ回路ＳＤＬ２からの非反転入力に基づいてＡＮＤ演算する。
【０２１２】
ＡＮＤ回路Ｇ５ｃは、信号Ｆｌａｇ３の非反転入力、及びラッチ回路ＳＤＬ３からの非反転入力に基づいてＡＮＤ演算する。
【０２１３】
ＡＮＤ回路Ｇ５ｄは、信号Ｆｌａｇ４の非反転入力、及びラッチ回路ＳＤＬ４からの非反転入力に基づいてＡＮＤ演算する。
【０２１４】
ＯＲ回路Ｇ５ｅは、ＡＮＤ回路Ｇ５ａ、Ｇ５ｂ、Ｇ５ｃ、及びＧ５ｄからの非反転入力に基づいてＯＲ演算し、演算結果として、フェイルフラグＦａｉｌを生成する。
【０２１５】
＜３−２＞  具体例
次に、図２５、及び図２６を用いて、第３実施形態に係る半導体記憶装置の組み合わせ回路群の動作の具体例について説明する。
【０２１６】
以下では、上記＜１−４−１−３＞で説明した具体例に、組み合わせ回路群２９４を適用する場合について説明する。
【０２１７】
上記のように、具体例ではセルを、閾値が低い方から高い方へ順に、セル４、セル１、セル３、セル２と書き込むために、セル１、セル３、セル２に対して第１プログラムを行う。第１プログラム終了後、セルの閾値の順序が、セル４、セル３、セル１、セル２となっている。そのため、ディテクト２にてフェイルとなり、セル３、セル２に対して第２サイクルプログラムを行い、セル２に対して第３サイクルプログラムを行う。このようにして、あるグループ内の４つのセルの閾値の順序を、閾値が低い方から高い方へ順に、セル４、セル１、セル３、セル２と並べることができる。
【０２１８】
ここでは、このような具体例における組み合わせ回路群２９４の動作を説明する。なお、具体例において、各ラッチ回路に記憶されている値に関しては、第１実施形態で説明した値を参照する。
【０２１９】
ステップＳ１０１の第１プログラムの第１パルス時において、セル４を非書き込みにするために、ラッチ回路ＳＤＬ４に“１”を記憶する必要がある。その際、組み合わせ回路群２９４の、ＮＯＲ回路Ｇ１−１〜Ｇ１−４までのＮＯＲ回路の出力結果、Ｑ１−１〜Ｑ１−４を、ラッチ回路ＳＤＬ１〜ＳＤＬ４に転送する。その後、ラッチ回路ＳＤＬ１〜ＳＤＬ３に“０”が記憶され、ラッチ回路ＳＤＬ４に“１”が記憶される。その後第１パルスを印加する。その結果、セル４は書き込み非対象となり、第１パルスが印加されない。
【０２２０】
次に、第１プログラムの第２パルス時において、セル４に加え、セル１を非書き込みにするために、ラッチ回路ＳＤＬ１に“１”を記憶させる。
【０２２１】
まず、第１パルス印加後のデータセットのタイミングにて、ＮＯＲ回路Ｇ２−１ａ〜Ｇ２−１ｃ、Ｇ２−２ａ〜Ｇ２−２ｃ、Ｇ２−３ａ〜Ｇ２−３ｃ、Ｇ２−４ａ〜Ｇ２−４ｃの入力に、ラッチ回路ＳＤＬ１〜ＳＤＬ４の結果を反映させる。つまり、信号ＩＮ２―１〜ＩＮ２―４として、第１パルス時に用いたラッチ回路ＳＤＬ１〜ＳＤＬ４の結果を転送する。その結果、信号Ｑ２−２、及びＱ２―３は、“０”となり、信号Ｑ２−１、及びＱ２―４は、“１”となる。そして、信号Ｑ２−１〜Ｑ２−４の値を、ラッチ回路ＳＤＬ１〜ＳＤＬ４に転送する。その結果、ラッチ回路ＳＤＬ２、及びＳＤＬ３は、“０”となり、ラッチ回路ＳＤＬ１、及びＳＤＬ４は、“１”となる。その後第２パルスを印加する。その結果、セル１及びセル４は書き込み非対象となり、第２パルスが印加されない。
【０２２２】
次に、第１プログラムの第３パルス時において、セル４に加え、セル３を非書き込みにするために、ラッチ回路ＳＤＬ３に“１”を記憶させる。
【０２２３】
第２パルス印加後のデータセットのタイミングにて、ＮＯＲ回路Ｇ２−１ａ〜Ｇ２−１ｃ、Ｇ２−２ａ〜Ｇ２−２ｃ、Ｇ２−３ａ〜Ｇ２−３ｃ、Ｇ２−４ａ〜Ｇ２−４ｃの入力に、ラッチ回路ＳＤＬ１〜ＳＤＬ４の結果を反映させる。つまり、信号ＩＮ２―１〜ＩＮ２―４として、第１パルス時に用いたラッチ回路ＳＤＬ１〜ＳＤＬ４の結果を転送する。その結果、信号Ｑ２−２は、“０”となり、信号Ｑ２−１、Ｑ２−３、及びＱ２―４は、“１”となる。そして、信号Ｑ２−１〜Ｑ２−４の値を、ラッチ回路ＳＤＬ１〜ＳＤＬ４に転送する。その結果、ラッチ回路ＳＤＬ２は、“０”となり、ラッチ回路ＳＤＬ１、ＳＤＬ３、及びＳＤＬ４は、“１”となる。その後第３パルスを印加する。その結果、セル１、セル３及びセル４は書き込み非対象となり、第３パルスが印加されない。このようにして、第１プログラムを完了する。
【０２２４】
プログラムベリファイについては、第１実施形態と同様に、セル４、セル３、セル１、セル２という順序で書きあがってしまっている場合、プログラムベリファイ後に、ラッチ回路ＲＤＬに所定のデータが記憶される。具体的には、ラッチ回路ＲＤＬ（１＿２）に“０”が記憶され、ラッチ回路ＲＤＬ（１＿３）、（１＿４）、（２＿３）、（２＿４）、及び（３＿４）に“１”が記憶される。
【０２２５】
その後、読み出し結果が期待値と合っているか否かのフラグを、ＥｘＯＲ回路Ｇ３―１〜Ｇ３―６、及びＮＡＮＤ回路Ｇ４−１〜Ｇ４―４を用いて演算する。なお、ＮＡＮＤ回路Ｇ４−１〜Ｇ４―４の出力結果である信号Ｆｌａｇ１〜Ｆｌａｇ４は、それぞれセル１〜セル４に対応している。読み出しデータと書き込みデータが一致しないセルに対応する信号Ｆｌａｇ１〜Ｆｌａｇ４は、“１”となる。
【０２２６】
その後、ラッチ回路ＳＤＬ１〜ＳＤＬ４をリセットし、信号Ｑ１―１〜Ｑ１−４を、ラッチ回路ＳＤＬ１〜ＳＤＬ４に転送する。
【０２２７】
その後、ＡＮＤ回路Ｇ５ａ〜Ｇ５ｄ、ＯＲ回路Ｇ５ｅの演算結果が“１”であれば、ディテクトはフェイルとなる。本例では、Failフラグは立たず（“０”）、ディテクト１はパスし、ディテクト２へと遷移する。
【０２２８】
ディテクト２では、第２パルスの際と同様の動作を行う。具体的には、ディテクト１でのラッチ回路ＳＤＬ１〜ＳＤＬ４のデータを、信号ＩＮ２−１〜ＩＮ２―４に転送し、信号Ｑ２―１〜Ｑ２―４が確定させる。そして、その後、信号Ｑ２―１〜Ｑ２―４を、ラッチ回路ＳＤＬ１〜ＳＤＬ４に転送する。その結果、ラッチ回路ＳＤＬ１に“１”が記憶される。ここで、信号Ｆｌａｇ２、Ｆｌａｇ４の結果が“０”となり、信号Ｆｌａｇ１、Ｆｌａｇ３の結果が“１”となる。そのため、ＯＲ回路Ｇ５ｅの結果であるＦａｉｌフラグが“１”となり、ディテクト２はフェイルと判定され、第２サイクルプログラムへと遷移する。
【０２２９】
第２サイクルプログラムでは、ディテクト２終了時点のラッチ回路ＳＤＬ１〜ＳＤＬ４の状態で行われる。その後、第３サイクルプログラムの為に、ラッチ回路ＳＤＬ１〜ＳＤＬ４の値を更新する。この場合、信号ＩＮ２―１〜ＩＮ２―４に、最新のラッチ回路ＳＤＬ１〜ＳＤＬ４の値を転送し、その結果生成される信号Ｑ２−１〜Ｑ２−４をラッチ回路ＳＤＬ１〜ＳＤＬ４に転送する。その結果、ラッチ回路ＳＤＬ１、ＳＤＬ３、ＳＤＬ４に“１”が記憶され、ラッチ回路ＳＤＬ２に“０”が記憶される。そのため、セル２のみが書き込み対象となる。そしてその状態で第３サイクルプログラムを実行する。
【０２３０】
第３サイクルプログラムの後は、再度プログラムベリファイを行う。
【０２３１】
ここでは、上記の第２サイクルプログラムと第３プログラムにて、期待値通りの順序に書き上げ完了する。
【０２３２】
もしも、ディテクト１、ディテクト２、ディテクト３のいずれかでフェイルした場合には、それぞれのパルスを印加し、４つのセルすべての閾値順序が期待値どおりになるまで、書き込みを繰り返す。
【０２３３】
＜３−３＞  効果
上述した実施形態によれば、データの演算を行うためだけの回路を設けた。ラッチ回路を利用して演算を行う場合、ラッチ回路のデータを消去しないように考慮しなければならず、効率的に演算を行うことが困難であった。しかし、本実施形態によれば、ラッチ回路のデータを消去せずに演算を行うことができるので、効率的かつ高速に演算を行うことができる。
【０２３４】
＜４＞  第４実施形態
第４実施形態について説明する。第４実施形態では、書き込み方法について説明する。尚、第４実施形態に係る装置の基本的な構成及び基本的な動作は、上述した第１実施形態に係る装置と同様である。従って、上述した第１実施形態で説明した事項及び上述した第１実施形態から容易に類推可能な事項についての説明は省略する。
【０２３５】
＜４−１＞  比較例
まず、第４実施形態に係る半導体記憶装置の書き込み方法を説明する前に、第１実施形態で説明した書き込み方法を採用した場合におけるオーバープログラムの懸念について説明する。
【０２３６】
第１実施形態で説明した書き込み方法（第１書き込み方法とも記載する）では、プログラムベリファイの後にディテクトを行い、ディテクトの結果に応じて、プログラムパルスを書き込み対象のセルに印加する方式である。
【０２３７】
この場合、セル特性のバラつきによりそれぞれのグループに依って必要なプログラムパルスの回数が異なると考えられる。しかし、１つのシーケンサ２５を用いて全てのグループに対し書き込み行う。そのため、同一回数のパルスを各グループに印加することとなる。プログラム電圧はプログラム回数（ループ回数）に応じて上昇していく。そのため、書き込みの遅いセルがいるグループに引きずられ、全体的なプログラム電圧も上昇していってしまう。第１実施形態の書き込み方式では、プログラムベリファイの回数が少ないため、書き込み動作の高速化が図れるが、一方でオーバープログラムの懸念が生じる。
【０２３８】
図２７を用いて、オーバープログラムの懸念について説明する。ここでは、１グループに９個のセルが構成される場合について説明する。図２７の例では、１〜９の順序になるようにメモリセルに書き込みを行う必要がある。
【０２３９】
なお、基本的な書き込み動作のフローは第１実施形態で説明した動作において、９レベルに書き分けるためにプログラムパルスの回数とディテクト数が異なるのみである。
【０２４０】
まず第１プログラムで選択ワード線ＷＬのレベルを段階的に上げながら８回プログラムパルスを印加する。その結果、このグループでは１〜７番目までの順位が完成したとする（図２７参照）。しかしながら、別のグループでは１〜４番目までしか順位が完成していないとする（不図示）と、シーケンサ２５は、残りの順位を完成させるべく選択ワード線ＷＬのレベルをインクリメントさせながら５回パルスを印加する。その際、書き込みが完成しているセルは書き込み禁止状態(インヒビット)としている。そのため、そのセルに書き込み電圧が実効的に印加されることはない。しかし、選択ワード線ＷＬの電圧はシーケンサ２５によって共通制御されている。そのため、グループに依らず規則に従い上昇していく。
【０２４１】
上述した５回パルスの後、他のグループでも１〜７番目までの順位が完成したとする。その場合、８番目及び９番目のセルを書き込む為に１〜８番目のセルをインヒビット状態とし９番目の順位にすべきセルに書き込み電圧を印加する。その際、選択ワード線ＷＬの電圧が既に上昇しており、このグループの９番目の順位にすべきセルに対しては急激に大きな書き込み電圧が加わる事となる。その結果、セル特性によっては大幅な閾値上昇が起こる可能性ある（図２７参照）。このような大幅な閾値上昇オーバープログラム等と呼ぶ。このオーバープログラムがグループ内で複数回起こると、既定の閾値内に９レベル書き分けることが出来なくなってしまう事がある。１グループに含まれるセル数が多くなるほど、この問題は顕著になる。
【０２４２】
＜４−２＞  第２書き込み方法
＜４−２−１＞  フロー
次に、図２８を用いて、第４実施形態に係る半導体記憶装置の第２書き込み方法を説明する。第２書き込み方法は、オーバープログラムを抑制するため、１パルス毎にプログラムベリファイを行う方法である。
【０２４３】
［ステップＳ３０１］
シーケンサ２５は、ラッチ回路ＷＤＬに記憶された順列データに基づいてプログラムを行う。センスアンプモジュール２９は、プログラムするセルとインヒビット（書き込み禁止）するセルを区別する。
【０２４４】
最初は、グループ内で最下位に書き込むべきセルのみインヒビットとする。最下位以外のセルに書き込み電圧が印加され、セルの閾値が上昇する。
【０２４５】
［ステップＳ３０２］
シーケンサ２５は、ステップＳ３０１の後、プログラムベリファイ動作を行う。
【０２４６】
［ステップＳ３０３］
シーケンサ２５は、ディテクトとして、ステップＳ３０１にて書き込むべきセルの順位が正しいかどうかをチェックし、許容値以上のグループにおいて正しければステップＳ３０３はパスする。その場合、書き込み動作は終了する。
【０２４７】
［ステップＳ３０４］
シーケンサ２５は、ディテクトがフェイルであると判定する場合（ステップＳ３０３、フェイル）、選択ワード線ＷＬの書き込み電圧にオフセット(ΔＶＰＧＭ)を足す。
【０２４８】
これにより、ステップＳ３０１では、直前のプログラムパルスよりもオフセットだけ大きいプログラムパルスをプログラム対象のセルに印加することができる。
【０２４９】
＜４−２−２＞  波形
続いて、第２書き込み方法における動作波形について説明する。図２９では、選択ワード線ＷＬ、書き込み対象ビット線ＢＬ、インヒビットビット線ＢＬの電圧を示している。
【０２５０】
図２９に示すように、第２書き込み方法では、プログラムパルスの印加と、プログラムベリファイが交互に行われる。インヒビットビット線ＢＬには、電圧ＶＤＤＳＡが印加され、書き込み対象ビット線ＢＬには、電圧ＶＳＳが印加される。そして、選択ワード線ＷＬに印加される書き込み電圧は、パルスの回数に応じてΔＶＰＧＭずつインクリメントされる。
【０２５１】
＜４−２−３＞  効果
第２書き込み方法によれば、１パルス毎にプログラムベリファイを行う。これによれば、第１書き込み方法よりも、プログラムベリファイの回数が増えるため、書き込みに要する時間も増える。他方で、第２書き込み方法によれば、図３０に示すように、最下位のセルから順番にプログラムを行うことができ、上述したようなオーバープログラムを抑制することが可能となる。
【０２５２】
＜４−３＞  第３書き込み方法
＜４−３−１＞  比較例
図３１を用いて、比較例（第２書き込み方法）について説明する。
【０２５３】
図３１では、あるプログラムパルスを印加した後の、あるグループのそれぞれの閾値状態を示したものである。図３１では、６番目のセルと、９番目のセルの書き込みが遅い場合を示している。第２書き込み動作では、６番目のセルの順位が期待値と異なっている場合、それ以上のセル、つまり７番目、８番目、９番目のセルも合わせて、プログラムパルスを印加する。その後のプログラムベリファイにて、１〜８番目までの順位が正しいことが確認でき、次のプログラムパルスにて、９番目のセルの閾値のみを更に上昇させる。
【０２５４】
第２書き込み方法では、上位のセル（本例では、７番目、８番目、９番目のセル）も６番目のセルと同時に書き込む。これにより、まだセルの大部分が低い閾値にあるプログラムループの初期においてプログラム速度の高速化に寄与する一方、プログラムループが進むと、上位のセルの閾値が過剰に上昇してしまう恐れがある。
【０２５５】
＜４−３−２＞  第３書き込み方法の動作
図３２を用いて、第３書き込み方法について説明する。
【０２５６】
第３書き込み方法では、順位が期待値と違うセル及び、当該セルより上位のセルにプログラムパルスを印加せず、順位が期待値と違うセルのみ、プログラムパルスを印加する。
【０２５７】
＜４−３−３＞  効果
第３書き込み方法によれば、順位が期待値と違うセルのみ、プログラムパルスを印加する。その結果、すでに順位の出来上がっているセルを書き込みすることが無く、最終的な閾値分布の広がりを抑えることができる。
【０２５８】
＜４−４＞  第４書き込み方法
＜４−４−１＞  概要
次に、第４書き込み方式について説明する。第４書き込み方式では、１回のプログラムパルスで複数のレベルの書き込みが実行可能であるマルチレベルプログラムを採用する。
【０２５９】
＜４−４−２＞  波形
図３３〜図３６を用いてマルチレベルプログラムの動作波形を示す。図３３、図３５、図３６では、選択ワード線ＷＬ、非選択ワード線ＷＬ、第１〜４番目以降のセルに係るビット線ＢＬの電圧を示している。
【０２６０】
最初のプログラムパルスの印加時、第１番目のセル、２番目のセル、３番目のセル、４番目以降のセルを書き分ける動作を行う。
【０２６１】
マルチレベルプログラムでは、非選択ワード線ＷＬの電圧を上昇させる際に、期待レベルに応じて、それぞれのセルにつながるビット線ＢＬの電圧を電圧ＶＤＤＳＡにセットするタイミングを制御することにより、実効的に印加される書き込み電圧レベルを複数レベルに制御することができる。
【０２６２】
図３３に示すように、第１番目のセルはインヒビット状態とするため、非選択ワード線ＷＬの電圧を上昇させる以前（時刻Ｔ３０）に、第１番目のセルに係るビット線ＢＬを電圧ＶＤＤＳＡとしておく。第２番目のセルに係るビット線ＢＬについては、非選択ワード線ＷＬを上昇させ始めてから（時刻Ｔ３１）、１番目のタイミング（時刻Ｔ３２）で電圧ＶＤＤＳＡとする。第３番目のセルに係るビット線ＢＬについては、非選択ワード線ＷＬを上昇させ始めてから、２番目のタイミング（時刻Ｔ３３）で電圧ＶＤＤＳＡとする。４番目以降のセルに係るビット線ＢＬについては、電圧ＶＳＳ固定のままとする。このように制御することにより、実効的に印加される書き込み電圧は、第１番目のセル＜第２番目のセル＜第３番目のセル＜第４番目以降のセルとなる。
【０２６３】
このように書き込みを行うことにより、図３４に示すようにセルの閾値が変動する。プログラムパルス印加後、プログラムベリファイ動作を行うが、第１〜４番目までのセルの順位が正しければ、次のプログラムパルスへと移行する。次のプログラムパルスでも、最初のプログラムパルスと同様それぞれのセルにつながるビット線ＢＬの電圧を電圧ＶＤＤＳＡにセットするタイミングにより、実効的にかかる書き込み電圧を制御する。
【０２６４】
第１〜４番目のセルまでは、すでに書き込み完了している。そのため、図３５に示すように、インヒビット状態とすべく、非選択ワード線ＷＬの電圧を上昇させる以前（時刻Ｔ４０）に、第１〜４番目のセルに係るビット線ＢＬを電圧ＶＤＤＳＡとしておく。非選択ワード線ＷＬを上昇させはじめてから（時刻Ｔ４１）、まず、第５番目のセルに係るビット線ＢＬを電圧ＶＤＤＳＡにセットし、ある任意の時間をおいて（時刻Ｔ４３）、第６番目のセルに係るビット線ＢＬを電圧ＶＤＤＳＡにセットする。第７番目以降のセルに係ビット線ＢＬについては、電圧ＶＳＳ固定のままとする。図３４に示すように、このように制御することで、第１〜４番目のセルについては、閾値が変動せず、第５番目以降のセルの閾値が変動し、その変動量は第５番目のセル＜第６番目のセル＜第７番目以降のセルの順となる。その後プログラムベリファイ動作を行い、第７番目のセルまでの順位が正しければ、次のプログラムパルスへと移行する。
【０２６５】
最後のプログラムパルスでは、第８番目のセルと第９番目のセルを書き上げる。図３６に示すように、第１〜７番目のセルまでのビット線ＢＬは、初めから（時刻Ｔ５０）電圧ＶＤＤＳＡとしておきインヒビット状態とする。非選択ワード線ＷＬを上昇し始めて（時刻Ｔ５１）、途中で第８番目のセルに係るビット線ＢＬの電圧ＶＤＤＳＡとし、第９順位のセルに係るビット線ＢＬを電圧ＶＳＳに固定とすることで、第８番目と第９番目のセルを書き分ける。最後にプログラムベリファイを行い、全ての順位が正しければ、プログラム完了となる。
【０２６６】
＜４−４−３＞  効果
このマルチレベルプログラムにより、１回のプログラムパルスで、複数の閾値に書き込むことができ、書き込み速度が飛躍的に向上する。
【０２６７】
＜４−５＞  第５書き込み方法
＜４−５−１＞  概要
次に、第５書き込み方式について説明する。第５書き込み方式では、順位の正しくないセルにのみ実効的に書き込みを行う。
【０２６８】
＜４−５−２＞  比較例
図３７を用いて、比較例（第４書き込み方式）の具体例について説明する。  図３７に示すように、第５番目のセルと、第４番目のセルの閾値の差が小さいので、第５番目以降のセルにプログラムパルスを印加することが考えられる。
【０２６９】
しかし、この場合、第５番目以降の、すでに順位が正しいセルまで書き込み電圧がかかってしまい、最終的な書き込みレベルが上昇してしまう恐れがある。
【０２７０】
＜４−５−３＞  具体例
図３８、図３９を用いて、第５書き込み方式の具体例について説明する。
【０２７１】
図３８に示すように、第５書き込み方式では、順位の正しくないセルにのみ実効的に書き込み電圧が印加されるよう制御する。
【０２７２】
具体的には、第５番目のセルの書き込み速度が遅い場合を想定する。図３９に示すように、この場合、プログラムベリファイが終了した後、選択ワード線ＷＬに印加する書き込み電圧は直前のプログラムパルスと変更せず、第５番目のセル以外をインヒビット状態とし（時刻Ｔ６０）、第５番目のセルに係るビット線ＢＬについては、非選択ワード線ＷＬが上昇して（時刻Ｔ６１）２番目のタイミング（時刻Ｔ６２）で、電圧ＶＤＤＳＡにセットすることにより、第５番目のセルのみの書き込みを行う。
【０２７３】
＜４−５−４＞  効果
第５番目のセルについて、前プログラムパルスでは非書き込みワード線ＷＬが上昇して最初のタイミングでビット線ＢＬをＶＤＤＳＡにセットしていたとする。その場合、今回のプログラムパルスにおいて、２番目のタイミングで電圧ＶＤＤＳＡにセットすることにより、第５番目のセルに実効的に印加される書き込み電圧を、選択ワード線ＷＬのレベルは同一のまま、前プログラムパルスより大きくすることが可能となる。このように制御することで、6番目以降のセルに過剰な書き込み電圧がかかることなく、5番目のセルにのみ、追加書き込みができ、過剰書き込みが抑制できる。
【０２７４】
＜４−６＞  第６書き込み方法
＜４−６−１＞  概要
次に、第６書き込み方式について説明する。第６書き込み方式では、分割書き込みを採用している。分割書き込みは、一つのグループを任意の数のサブグループＳＧＰに分け、サブグループＳＧＰ毎にプログラムを行う書き込みである。
【０２７５】
＜４−６−２＞  具体例
図４０を用いて、第６書き込み方式の具体例について説明する。
【０２７６】
図４０の例では、９つのセルを３セルずつ、３つのサブグループＳＧＰに分けた例を示す。第１〜３番目のセルが属するグループをサブグループＳＧＰ１、第４〜６番目のセルが属するグループをサブグループＳＧＰ２、第７〜第９番目のセルが属するグループをサブグループＳＧＰ３とする。
【０２７７】
まず、第１ステージでそれぞれのサブグループＳＧＰを大まかに書き上げる。
【０２７８】
その後、第２ステージにて、それぞれのサブグループＳＧＰ中のセルをそれぞれのレベルへ書き上げる。
【０２７９】
具体的には、第１ステージにおいて、サブグループＳＧＰ１のセルをインヒビットにした状態で、選択ワード線ＷＬに書き込み電圧ＶＰＧＭ２を印加し、サブグループＳＧＰ２とサブグループＳＧＰ３のセルを、あるレベルまで大まかに書き上げる。
【０２８０】
その後、サブグループＳＧＰ１とサブグループＳＧＰ２のセルをインヒビットにした状態で、選択ワード線ＷＬに書き込み電圧ＶＰＧＭ３を印加し、サブグループＳＧＰ３のセルをさらに高いレベルへ書きあげる。
【０２８１】
その後、第２ステージへ移り、サブグループＳＧＰ１中のセルを細かく書き分ける。
【０２８２】
具体的には、第１番目のセルをインヒビットにした状態で、第２番目と第３番目のセルに書き込み電圧ＶＰＧＭ１を印加する。
【０２８３】
次に、第１番目のセルと第２番目のセルをインヒビットにした状態で第３番目のセルに書き込み電圧ＶＰＧＭ１＋ΔＶＰＧＭ１を印加する。
【０２８４】
このようにして、サブグループＳＧＰ１内の３つのセルがそれぞれの閾値レベルに書きあがる。
【０２８５】
同様にして、サブグループＳＧＰ２とサブグループＳＧＰ３内のセルをそれぞれの閾値レベルに細かく書き分け、書き込みが完了する。
【０２８６】
＜４−６−３＞  効果
以上のように、あらかじめサブグループＳＧＰに分けておくことで、書き込みの遅いセルの調整はサブグループＳＧＰ内で行う。そのため、上位のセルの閾値が過度に上昇してしまうことを抑制することができる。
【０２８７】
＜４−７＞  第７書き込み方法
＜４−７−１＞  概要
次に、第７書き込み方式について説明する。第７書き込み方式では、分割書き込みとマルチレベルプログラムを組み合わせた方式である。
【０２８８】
＜４−７−２＞  具体例
図４１を用いて、第７書き込み方式について説明する。
【０２８９】
図４１に示すように、第１ステージにおいては、閾値の変動量を大きくとる必要があるため、マルチレベルプログラムは使用できない。そのため、第２ステージにおいて、マルチレベルプログラムを使用する。
【０２９０】
第１ステージを経て、サブグループＳＧＰ１、サブグループＳＧＰ２、サブグループＳＧＰ３が、大まかに書きあがった後、第２ステージとして、サブグループＳＧＰ１内のセル、サブグループＳＧＰ２内のセル、サブグループＳＧＰ３内のセル、を細かく書き上げる作業を行う。第２ステージでは、マルチレベルプログラムを採用する。
【０２９１】
＜４−７−３＞  効果
分割書き込みに、マルチレベルプログラムを組み合わせることで、書き込み速度の高速化が図れる。
【０２９２】
なお、第１〜第６書き込み方式は、セルの特性に応じて、それぞれ組み合わせて用いることが可能である。
【０２９３】
＜５＞その他
なお、上述した実施形態では、半導体記憶装置２０の中に、信号Ｉ／Ｏ＜７：０＞を順列データへ変換する変換回路を備えている。しかし、図４２に示すようにメモリコントローラ１０が、信号を順列データへ変換する変換回路を備えていても良い。
【０２９４】
以上、本発明の実施形態を説明したが、本発明は上記実施形態に限定されるものではなく、その趣旨を逸脱しない範囲内において種々変形して実施することが可能である。さらに、上記実施形態には種々の段階の発明が含まれており、開示された構成要件を適宜組み合わせることによって種々の発明が抽出される。例えば、開示された構成要件からいくつかの構成要件が削除されても、所定の効果が得られるものであれば、発明として抽出され得る。
【符号の説明】
【０２９５】
１０…メモリコントローラ
１１…プロセッサ
１２…内蔵メモリ
１３…ＥＣＣ回路
１４…ＮＡＮＤインタフェース回路
１５…バッファメモリ
１６…ホストインタフェース回路
２０…半導体記憶装置
２１…メモリセルアレイ
２２…入出力回路
２２ａ…変換回路
２３…ロジック制御回路
２４…レジスタ
２５…シーケンサ
２６…電圧生成回路
２７…ドライバセット
２８…ロウデコーダ
２９…センスアンプモジュール
５１…転送スイッチ群
５２…ブロックデコーダ
１００…メモリシステム
２００…ホスト機器
２９１…センス部
２９２…ラッチ部
２９３…演算部
２９４…組み合わせ回路群
【図１】
2020095766.tif 000003
【図２】
2020095766.tif 000004
【図３】
2020095766.tif 000005
【図４】
2020095766.tif 000006
【図５】
2020095766.tif 000007
【図６】
2020095766.tif 000008
【図７】
2020095766.tif 000009
【図８】
2020095766.tif 000010
【図９】
2020095766.tif 000011
【図１０】
2020095766.tif 000012
【図１１】
2020095766.tif 000013
【図１２】
2020095766.tif 000014
【図１３】
2020095766.tif 000015
【図１４】
2020095766.tif 000016
【図１５】
2020095766.tif 000017
【図１６】
2020095766.tif 000018
【図１７】
2020095766.tif 000019
【図１８】
2020095766.tif 000020
【図１９】
2020095766.tif 000021
【図２０Ａ】
2020095766.tif 000022
【図２０Ｂ】
2020095766.tif 000023
【図２１】
2020095766.tif 000024
【図２２】
2020095766.tif 000025
【図２３】
2020095766.tif 000026
【図２４】
2020095766.tif 000027
【図２５】
2020095766.tif 000028
【図２６】
2020095766.tif 000029
【図２７】
2020095766.tif 000030
【図２８】
2020095766.tif 000031
【図２９】
2020095766.tif 000032
【図３０】
2020095766.tif 000033
【図３１】
2020095766.tif 000034
【図３２】
2020095766.tif 000035
【図３３】
2020095766.tif 000036
【図３４】
2020095766.tif 000037
【図３５】
2020095766.tif 000038
【図３６】
2020095766.tif 000039
【図３７】
2020095766.tif 000040
【図３８】
2020095766.tif 000041
【図３９】
2020095766.tif 000042
【図４０】
2020095766.tif 000043
【図４１】
2020095766.tif 000044
【図４２】
2020095766.tif 000045