(57)【要約】【課題】  書き込みや消去の処理効率を向上し、書き込みや消去の処理時間を短縮できる不揮発性半導体記憶装置及びその制御方法を提供すること。【解決手段】  本発明にかかる不揮発性半導体記憶装置は、メモリセルアレイ７と、複数のデータの各アドレスとともに、書き込みの成功／失敗を示す書き込みフラグを格納するフラグ情報格納部３と、書き込みが失敗しているアドレスを選択する内部アドレス格納部１０と、データの書き込みを行う書き込み回路６と、データの書き込みの成功／失敗を確認するベリファイ処理を行う比較回路９と、ベリファイの結果に応じて、書き込みフラグを更新するシーケンス制御部４と、を有するものである。【選択図】  図６
2006309829.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリセルからなる複数のセクタを備え、
前記セクタを消去の最小単位とし、
前記セクタ内の複数のアドレスに書き込むべきデータを一括して入力することができる不揮発性半導体記憶装置であって、
前記複数のアドレスのそれぞれに対応するメモリセルの状態を格納するフラグ格納部を備え、
前記フラグ格納部の情報に応じて選択されるべきアドレスを決定するアドレス設定回路を備えることを特徴とする不揮発性半導体記憶装置。
【請求項２】
複数のデータを含むデータブロックごとに書き込み処理又は消去処理を実行する不揮発性半導体記憶装置であって、
複数の不揮発性メモリセルを含むメモリセルアレイと、
前記データブロックに含まれる複数のデータの各アドレスとともに、前記アドレスごとにそれぞれ設けられ書き込み又は消去の成功／失敗を示すフラグを格納するフラグ格納部と、
前記格納されたフラグに基づき、書き込み又は消去が失敗している前記アドレスを選択するアドレス選択部と、
前記選択されたアドレスに位置する前記不揮発性メモリセルに対し、前記データの書き込み又は消去処理を行う書き込み又は消去部と、
前記選択されたアドレスに位置する前記不揮発性メモリセルに対し、前記データの書き込み又は消去処理の成功／失敗を確認するベリファイ処理を行うベリファイ部と、
前記ベリファイ処理の結果に応じて、前記フラグを更新するフラグ更新部と、を有する、
不揮発性半導体記憶装置。
【請求項３】
前記アドレス選択部は、前記フラグ格納部に格納されたアドレスに対応するカウンタによって前記アドレスを選択する、
請求項２に記載の不揮発性半導体記憶装置。
【請求項４】
前記アドレス選択部は、前記データの書き込み又は消去処理、もしくは、前記ベリファイ処理ごとに前記カウンタを順次更新し、更新されたカウンタにより順次前記アドレスを選択する、
請求項３に記載の不揮発性半導体記憶装置。
【請求項５】
前記アドレス選択部は、前記カウンタを更新したとき、前記カウンタが前記フラグ格納部が格納可能な最終アドレスを選択した場合、前記データの書き込み又は消去処理、もしくは、前記ベリファイ処理を終了させる、
請求項４又は４に記載の不揮発性半導体記憶装置。
【請求項６】
前記アドレス選択部は、前記データの書き込み又は消去処理、もしくは、前記ベリファイ処理ごとに、前記フラグ格納部に格納された複数のフラグをほぼ同時に判定し、前記複数のフラグのうちフラグが設定されているアドレスを選択する次実行アドレス選択部を有する、
請求項３に記載の不揮発性半導体記憶装置。
【請求項７】
前記次実行アドレス選択部は、現在選択されているアドレスよりも大きいアドレスに対応する複数のフラグを判定する、
請求項６に記載の不揮発性半導体記憶装置。
【請求項８】
前記アドレス選択部は、第１及び第２の前記次実行アドレス選択部と、前記第１及び第２の次実行アドレス選択部が選択したアドレスのうちの１つを決定する第１の決定部とを有し、
前記第１の次実行アドレス選択部は、第１の範囲のアドレスに対応する複数のフラグを判定し、
前記第２の次実行アドレス選択部は、第２の範囲のアドレスに対応する複数のフラグを判定する、
請求項６又は７に記載の不揮発性半導体記憶装置。
【請求項９】
前記アドレス選択部は、前記アドレスを選択したとき、前記フラグ格納部に格納された複数のフラグをほぼ同時に判定し、前記複数のフラグが全て設定されていない場合に、前記データの書き込み又は消去処理、もしくは、前記ベリファイ処理の終了を決定するラストアドレス判定部を有する、
請求項６乃至８のいずれか一つに記載の不揮発性半導体記憶装置。
【請求項１０】
前記ラストアドレス判定部は、現在選択されているアドレスよりも大きいアドレスに対応する複数のフラグを判定する、
請求項９に記載の不揮発性半導体記憶装置。
【請求項１１】
前記アドレス選択部は、第１及び第２の前記ラストアドレス判定部と、前記第１及び第２のラストアドレス判定部の判定のうちの１つに基づいて、前記データの書き込み又は消去処理、もしくは、前記ベリファイ処理の終了を決定する第２の決定部とを有し、
前記第１のラストアドレス判定部は、第１の範囲のアドレスに対応する複数のフラグを判定し、
前記第２のラストアドレス判定部は、第２の範囲のアドレスに対応する複数のフラグを判定する、
請求項９又は１０に記載の不揮発性半導体記憶装置。
【請求項１２】
前記データブロックに含まれる複数のデータを格納するバッファをさらに有し、
前記書き込み又は消去部は、前記バッファに格納されたデータを前記不揮発性メモリに書き込み、
前記ベリファイ部は、前記バッファに格納されたデータと前記不揮発性メモリから読み出したデータとを比較し、前記比較に応じて書き込みの成功／失敗を確認する、
請求項２乃至１１のいずれか一つに記載の不揮発性半導体記憶装置。
【請求項１３】
前記ベリファイ部は、前記データの書き込み又は消去処理の実行前にベリファイ処理を行い、さらに、前記データの書き込み又は消去処理の実行後にベリファイ処理を行う、
請求項２乃至１２のいずれか一つに記載の不揮発性半導体記憶装置。
【請求項１４】
前記ベリファイ部は、前記アドレス選択部によるアドレスの選択により、前記データブロックの先頭アドレスから最終アドレスまで前記ベリファイ処理を繰り返し、
前記ベリファイ処理の繰り返しの後、前記書き込み又は消去部は、前記アドレス選択部によるアドレスの選択により、前記データブロックの先頭アドレスから最終アドレスまで前記書き込み又は消去処理を繰り返し、
前記書き込み又は消去処理を繰り返しの後、さらに、前記ベリファイ部は、前記アドレス選択部によるアドレスの選択により、前記データブロックの先頭アドレスから最終アドレスまで前記ベリファイ処理を繰り返す、
請求項２乃至１３のいずれか一つに記載の不揮発性半導体記憶装置。
【請求項１５】
前記不揮発性メモリセルは、３つ以上のしきい値レベルを記憶する多値メモリセルである、
請求項２乃至１４のいずれか一つに記載の不揮発性半導体記憶装置。
【請求項１６】
複数の不揮発性メモリセルを含むメモリセルアレイを有し、複数のデータを含むデータブロックごとに書き込み処理又は消去処理を実行する不揮発性半導体記憶装置の制御方法であって、
前記データブロックに含まれる複数のデータの各アドレスとともに、前記アドレスごとにそれぞれ設けられ書き込み又は消去の成功／失敗を示すフラグを格納し、
前記格納されたフラグに基づき、書き込み又は消去が失敗している前記アドレスを選択し、
前記選択されたアドレスに位置する前記不揮発性メモリセルに対し、前記データの書き込み又は消去処理を行い、
前記選択されたアドレスに位置する前記不揮発性メモリセルに対し、前記データの書き込み又は消去処理の成功／失敗を確認するベリファイ処理を行い、
前記ベリファイ処理の結果に応じて、前記フラグを更新する、
不揮発性半導体記憶装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性半導体記憶装置及びその制御方法に関し、特に、複数のメモリセル（データ）ごとに書き込みや消去を行う不揮発性半導体記憶装置及びその制御方法に関する。
【背景技術】
【０００２】
電気的に消去可能であり、書き換え可能な不揮発性記憶装置として、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）が広く知られている。ＥＥＰＲＯＭの一つでありブロック単位に消去可能なフラッシュメモリは、近年、メモリ容量の大容量化が著しく、ディスク装置等の代替の記憶装置として注目されている。
【０００３】
このフラッシュメモリは、フローティングゲートとコントロールゲートを有するトランジスタにてメモリセルが構成されている。このメモリセルトランジスタに対して、電気的に書き込みを行うことでデータが記録される。また、メモリセルトランジスタに対して、電気的に消去を行うことでデータが消去される。
【０００４】
メモリセルトランジスタに対する電気的書き込みは、メモリセルトランジスタのコントロールゲートおよびドレインに対し、書き込みのための高電位を与えることにより、フローティングゲートに電子が注入され、メモリセルトランジスタの閾値を高くすることにより行われる。
【０００５】
例えば、図１７のように、１回の電気的な書き込みにより、メモリセルトランジスタの閾値を２つのレベルに切り替え、１つのメモリセルトランジスタでデータの「０」と「１」を記憶するフラッシュメモリを二値品と呼んでいる。図１８のように、複数回の電気的な書き込みにより、メモリセルトランジスタの閾値を複数のレベルに切り替え、１つのメモリセルトランジスタでデータの「０」、「１」、「２」、「３」等、複数のデータを記憶するフラッシュメモリを多値品と呼んでいる。多値品のフラッシュメモリを使用することにより、メモリ容量の大容量化を図ることができるが、書き込み回数が増加する。例えば、図１８の例では、データ「３」の記憶状態からデータ「０」の記憶状態とするためには、３回の書き込みが必要である。
【０００６】
また、メモリセルトランジスタに書き込みを行った場合、メモリセルトランジスタの閾値が、目標としている値に達しているかを検証するため、ベリファイという読み出し動作を行っている。すなわち、データの書き込み動作は、電気的書き込みとベリファイ動作を自動的に繰り返すこと（自動書き込み）で実現され、かつ、対象となるすべてのメモリセル対して、その繰り返しの制御を行う装置が必要となっている。同様に、データの消去に関しても、対象となるすべてのメモリセルに対して、電気的消去とベリファイ動作を自動的に繰り返す（自動消去）制御装置を必要としている。
【０００７】
このように、フラッシュメモリのデータ記録／消去には、自動書き込み／自動消去といったシーケンス制御が必要であり、そのフローを工夫することで、いかに処理時間を短くできるかが、商品価値を決定する一要因となっている。
【０００８】
図１９は、従来の不揮発性半導体記憶装置の構成を示している。図に示されるように、従来の不揮発性半導体記憶装置は、外部から入力される外部アドレスや外部データをラッチするバッファ９０１、一連の書き込みシーケンスを制御するシーケンス制御部９０４、メモリセルがアレイ状に配列されたメモリセルアレイ９０７、メモリセルアレイ９０７からデータを読み出す読み出し回路９０５、メモリセルアレイ９０７にデータを書き込む書き込み回路９０６、メモリセルアレイ９０７から読み出したデータと外部データとを比較する比較回路９０９を備えている。
【０００９】
図２０のフローチャートは、従来の不揮発性半導体記憶装置における自動書き込み動作を示している。この自動書き込み動作は、シーケンス制御部９０４の制御によって実行されている。
【００１０】
まず、外部のバス等からコマンドとして書き込みを行いたい１つの外部アドレスと１つの外部データが入力され、バッファ９０１に格納される（Ｓ９０１）。次いで、シーケンス制御部９０４の制御により、読み出し回路９０５は、メモリセルアレイ９０７のうち、外部アドレスで特定されるメモリセルの読み出し処理を行う（Ｓ９０２）。次いで、比較回路９０９は、読み出したデータが、入力された外部データと一致するかどうか判定する（Ｓ９０３）。このＳ９０２とＳ９０３の処理がベリファイ処理である。
【００１１】
Ｓ９０３において、データが一致すると判定された場合、シーケンス制御部９０４は、この自動書き込み処理を終了する。Ｓ９０３において、データが不一致と判定された場合、シーケンス制御部９０４の制御により、書き込み回路９０６は、メモリセルアレイ９０７のうち、外部アドレスで特定されるメモリセルへ外部データの書き込み処理を行う（Ｓ９０４）。その後、さらにベリファイ処理（Ｓ９０２とＳ９０３）を行い、メモリセルのデータと外部データが一致するまで、書き込み処理とベリファイ処理を繰り返す。
【００１２】
尚、従来の不揮発性半導体記憶装置として特許文献１や２が知られている。特許文献１や２では、ブロックやセクタごとに消去の完了を示すフラグを設けている。
【特許文献１】特開２００２−３６６４２０号公報
【特許文献２】特開平６−１９５９８９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
しかしながら、従来の不揮発性半導体装置は、１つのアドレスに対する書き込みや消去のたびに、外部からコマンド（１つのアドレスと１つのデータ）を入力するため、書き込みや消去の処理効率が悪く、書き込みや消去処理に時間がかかるという問題点があった。
【００１４】
図２１は、従来の不揮発性記憶装置において、複数のデータを書き込む場合の動作を時系列に並べた図である。尚、この図は、１回の書き込みでベリファイが成功した場合の例である。
【００１５】
まず、１つ目のデータを書き込むために、Ｔ１０１において、１つのアドレスと１つのデータが入力され、Ｔ１０２において、書き込み前のベリファイ（プリベリファイ）が行われ、Ｔ１０３において、１つのアドレスのメモリセルに対し１つのデータが書き込まれ、Ｔ１０４において、書き込み後のベリファイ（ポストベリファイ）が行われる。これで１つ目のデータの書き込みが完了し、続いて、２つ目のデータを書き込むために、さらに、１つのアドレスと１つのデータが入力され、同様に書き込みが行われ、書き込むデータの数分、Ｔ１０１〜Ｔ１０４が繰り返される。
【００１６】
したがって、例えば、連続するアドレスに大量のデータを書き込むような場合など、１つのアドレスで他のアドレスを特定できるような場合でも、書き込むデータのアドレスごとに、毎回、アドレスとデータを入力しなければならないため、この入力処理の分、無駄な動作を行ってしまうことになる。
【００１７】
外部からのコマンドは、ＣＰＵ等からバスを介して入力されるが、近年、ＣＰＵやバスの処理速度、転送速度の高速化、大容量化が進んでおり、連続した大量なデータが入力されることが多いため、アドレスごとの無駄な処理が、データの書き込みや消去処理の全体の効率や処理時間を大幅に悪化させてしまう。
【課題を解決するための手段】
【００１８】
本発明にかかる不揮発性半導体記憶装置は、複数のメモリセルからなる複数のセクタを備え、前記セクタを消去の最小単位とし、前記セクタ内の複数のアドレスに書き込むべきデータを一括して入力することができる不揮発性半導体記憶装置であって、前記複数のアドレスのそれぞれに対応するメモリセルの状態を格納するフラグ格納部を備え、前記フラグ格納部の情報に応じて選択されるべきアドレスを決定するアドレス設定回路を備えるものである。
【００１９】
この不揮発性半導体記憶装置によれば、複数のアドレス及びデータを一括で入力するため、複数のアドレスごとにコマンドを入力する必要がなくなる。したがって、書き込みや消去の処理効率を向上し、処理時間を短縮することができる。また、アドレスごとにフラグを設けることにより、セクタごとにフラグを設けた場合に比べて、より効率よくメモリセルの書き込みや消去を行うことができる。
【００２０】
本発明にかかる不揮発性半導体記憶装置は、複数のデータを含むデータブロックごとに書き込み処理又は消去処理を実行する不揮発性半導体記憶装置であって、複数の不揮発性メモリセルを含むメモリセルアレイと、前記データブロックに含まれる複数のデータの各アドレスとともに、前記アドレスごとにそれぞれ設けられ書き込み又は消去の成功／失敗を示すフラグを格納するフラグ格納部と、前記格納されたフラグに基づき、書き込み又は消去が失敗している前記アドレスを選択するアドレス選択部と、前記選択されたアドレスに位置する前記不揮発性メモリセルに対し、前記データの書き込み又は消去処理を行う書き込み又は消去部と、前記選択されたアドレスに位置する前記不揮発性メモリセルに対し、前記データの書き込み又は消去処理の成功／失敗を確認するベリファイ処理を行うベリファイ部と、前記ベリファイ処理の結果に応じて、前記フラグを更新するフラグ更新部と、を有するものである。
【００２１】
この不揮発性半導体記憶装置によれば、複数のデータごとに書き込みや消去を行うため、複数のアドレスごとにコマンドを入力する必要がなくなる。したがって、書き込みや消去の処理効率を向上し、処理時間を短縮することができる。また、書き込みや消去を行うアドレスごとにフラグを設けることにより、複数のデータ単位にフラグを設けた場合に比べて、より効率よく書き込みや消去を行うことができる。
【００２２】
本発明にかかる不揮発性半導体記憶装置の制御方法は、複数の不揮発性メモリセルを含むメモリセルアレイを有し、複数のデータを含むデータブロックごとに書き込み処理又は消去処理を実行する不揮発性半導体記憶装置の制御方法であって、前記データブロックに含まれる複数のデータの各アドレスとともに、前記アドレスごとにそれぞれ設けられ書き込み又は消去の成功／失敗を示すフラグを格納し、前記格納されたフラグに基づき、書き込み又は消去が失敗している前記アドレスを選択し、前記選択されたアドレスに位置する前記不揮発性メモリセルに対し、前記データの書き込み又は消去処理を行い、前記選択されたアドレスに位置する前記不揮発性メモリセルに対し、前記データの書き込み又は消去処理の成功／失敗を確認するベリファイ処理を行い、前記ベリファイ処理の結果に応じて、前記フラグを更新するものである。
【００２３】
この不揮発性半導体記憶装置の制御方法によれば、複数のデータごとに書き込みや消去を行うため、複数のアドレスごとにコマンドを入力する必要がなくなる。したがって、書き込みや消去の処理効率を向上し、処理時間を短縮することができる。また、書き込みや消去を行うアドレスごとにフラグを設けることにより、複数のデータ単位にフラグを設けた場合に比べて、より効率よく書き込みや消去を行うことができる。
【発明の効果】
【００２４】
本発明によれば、書き込みや消去の処理効率を向上し、書き込みや消去の処理時間を短縮できる不揮発性半導体記憶装置及びその制御方法を提供することができる。
【発明を実施するための最良の形態】
【００２５】
発明の実施の形態１．
まず、本発明の実施の形態１にかかる不揮発性半導体記憶装置について説明する。本実施形態にかかる不揮発性半導体記憶装置は、連続したアドレスのデータを一括で入力するとともに、各アドレスごとに書き込み完了を示すフラグを設け、このフラグのそれぞれをカウンタにより順次選択し処理することを特徴としている。
【００２６】
図１を用いて、本実施形態にかかる不揮発性半導体記憶装置の構成について説明する。この不揮発性半導体記憶装置は、例えば、フラッシュメモリとその制御部を含む半導体装置であり、書き込みを行いたい一連のデータを、一時的にバッファにためておき、そのデータについて順次書き込み処理を行う。
【００２７】
図１に示されるように、不揮発性半導体記憶装置は、バッファ１、内部アドレスカウンタ２、フラグ情報格納部３、シーケンス制御部４、読み出し回路５、書き込み回路６、メモリセルアレイ７、比較回路９を備えている。
【００２８】
バッファ１は、外部のバス等から与えられる外部アドレスと外部データとを一時的に格納する。外部アドレスと外部データは、書き込みを行いたいアドレスとデータであり、特に、本実施形態では、この外部データは、連続する複数のデータを含むデータブロックであり、外部アドレスは、この外部データのデータブロックの先頭アドレスである。
【００２９】
内部アドレスカウンタ２は、カウンタ値によって、メモリセルアレイ７の中から、書き込みや読み出しを行う内部アドレスを選択する。内部アドレスカウンタ２は、フラグ情報格納３の書き込みフラグに応じてメモリセルアレイ７へ与えるアドレスを決定するアドレス設定回路（アドレス選択部）２０である。例えば、カウンタ値は、内部アドレス自身でもよいし、先頭アドレスからのオフセットでもよい。尚、内部アドレスとは、メモリセルアレイ７のメモリセルを特定するためのアドレスであり、外部から入力される外部アドレスと同一でもよいし、外部アドレスをメモリセルアレイ７への書き込み用に変換したアドレスでもよい。外部アドレスの一つは、常に、内部アドレスの一つに対応している。
【００３０】
フラグ情報格納部３は、バッファ１に格納した外部データのアドレスごと（内部アドレスごと）に、書き込みフラグを格納する。書き込みフラグは、メモリセルアレイ７のメモリセル（データ）のアドレスに対応して格納され、それぞれのメモリセル（データ）の状態を示している。この書き込みフラグは、各データの書き込みの成功／失敗、すなわち、データごとに書き込み完了かどうかを示すフラグである。書き込みフラグが設定（セット）されていれば、書き込み失敗、すなわち、書き込み対象であることを示す。また、書き込みフラグが未設定（リセット）であれば、書き込み成功、すなわち、書き込み対象ではないことを示している。
【００３１】
メモリセルアレイ７は、複数のメモリセルがアレイ状に配列されている。このメモリセルは、フラッシュメモリなどの不揮発性のメモリセルである。例えば、メモリセルアレイ７は、複数のメモリセルからなるセクタに区分され、このセクタを消去の最小単位としている。読み出し回路５は、メモリセルアレイ７のうち、内部アドレスカウンタ２で選択される内部アドレスのメモリセルからデータを読み出す。書き込み回路６は、メモリセルアレイ７のうち、内部アドレスカウンタ２で選択される内部アドレスのメモリセルに対し、バッファ１に格納された外部データを書き込む。すなわち、書き込み回路６は、メモリセルに対しデータの書き込み又は消去処理を行う書き込み又は消去部２２である。比較回路９は、読み出し回路５がメモリセルアレイ７から読み出したデータと、バッファ１に格納された外部データとを比較する。すなわち、比較回路９は、データの書き込みや消去処理の成功／失敗を確認するベリファイ処理を行うベリファイ部２３である。
【００３２】
シーケンス制御部４は、これらの各構成要素の動作を制御し、自動書き込み処理の一連のシーケンスを実現する。また、シーケンス制御部４は、比較回路９のベリファイ結果に応じて、書き込みフラグを更新するフラグ更新部２１である。例えば、シーケンス制御部４は、フラグ情報格納部３の書き込みフラグに応じて読み出し回路５や書き込み回路６を動作させたり、比較回路９の比較結果に応じてフラグ情報格納部３の書き込みフラグを更新したり、内部アドレスカウンタ２のカウンタ値を更新したりする。
【００３３】
次に、図２を用いて、本実施形態にかかる不揮発性半導体記憶装置の自動書き込み処理の概略について説明する。図２は、データの書き込み動作の流れを時系列に並べた図である。尚、この図は、１回の書き込みでベリファイが成功した場合の例である。
【００３４】
まず、Ｔ１において、アドレスとデータが一括に入力、すなわち、複数のデータと先頭アドレスが入力されて、バッファ１に格納されるとともに、フラグ情報格納部３に各アドレスに対応した書き込みフラグがセットされる。
【００３５】
次いで、Ｔ２において、フラグ情報格納部３の書き込みフラグをチェックし、このフラグに応じて書き込み前のベリファイ（プリベリファイ）を行い、ベリファイの結果に応じて書き込みフラグの更新を行う。このベリファイは、書き込みフラグがセットされているアドレスの数分、繰り返し行われる。
【００３６】
次いで、Ｔ３において、フラグ情報格納部３の書き込みフラグをチェックし、このフラグに応じてメモリセルアレイ７のメモリセルへバッファ１のデータの書き込みを行う。この書き込みは、書き込みフラグがセットされているアドレスの数分、繰り返し行われる。
【００３７】
次いで、Ｔ４において、フラグ情報格納部３の書き込みフラグをチェックし、このフラグに応じて書き込み後のベリファイ（ポストベリファイ）を行い、ベリファイの結果に応じて書き込みフラグの更新を行う。このベリファイは、書き込みフラグがセットされているアドレスの数分、繰り返し行われる。さらに、ベリファイの後、書き込み失敗のアドレス（書き込みフラグがセットされたアドレス）が残っている場合、書き込みが全て成功となるまで、Ｔ３の書き込み処理とＴ４のベリファイ処理を繰り返し行う。
【００３８】
このように、本実施形態では、複数のデータとアドレスを一括で入力するため、図２１の従来例のように、データごとにコマンド（アドレスとデータ）を入力する必要がなくなり、書き込み動作の処理時間を短縮することができる。
【００３９】
次に、図３のフローチャートを用いて、本実施形態にかかる不揮発性半導体記憶装置の自動書き込み処理について、さらに詳細に説明する。この自動書き込み処理は、シーケンス制御部４の制御によって実行されている。
【００４０】
まず、外部からコマンドとして、書き込みを行いたい外部アドレスと外部データが一括でバッファ１に入力される（Ｓ２０１）。このとき、上述のように連続する複数のデータとその先頭アドレスが入力される。
【００４１】
次いで、入力された外部データが、バッファ１の該当するアドレスに格納されるとともに、書き込みたいアドレス（内部アドレス）に対応した書き込みフラグをフラグ情報格納部３に格納する（Ｓ２０２）。このとき、外部アドレスと外部データが入力された直後（１回目のベリファイ時）は、まだ書き込みは行われていないため、フラグ情報格納部３の書き込みフラグは全てセットされる。
【００４２】
次いで、シーケンス制御部４は、内部アドレスカウンタ２のカウンタ値をリセットする（Ｓ２０３）。このとき、カウンタ値を「０」にすることで、内部アドレスカウンタ２がメモリセルの先頭アドレスを選択するようになる。
【００４３】
次いで、シーケンス制御部４は、内部アドレスカウンタ２により選択された内部アドレスの書き込みフラグがセットされているかどうか判定する（Ｓ２０４）。すなわち、フラグ情報格納部３から、選択された内部アドレスの書き込みフラグを参照し、この内部アドレスが、すでに書き込み成功しているかどうか判定する。
【００４４】
Ｓ２０４において、書き込みフラグがセットされていると判定された場合、その選択アドレスが書き込み対象であることを意味するため、シーケンス制御部４は、読み出し回路５を動作させ、メモリセルアレイ７のうち、内部アドレスカウンタ２により選択された内部アドレスのメモリセルからデータの読み出しを行う（Ｓ２０５）。
【００４５】
次いで、比較回路９は、読み出し回路５が読み出したデータとバッファ１のデータとが一致しているかどうか判定する（Ｓ２０６）。Ｓ２０６において、データが一致すると判定された場合、ベリファイ成功（書き込み成功）であるため、シーケンス制御部４は、フラグ情報格納部３の該当する内部アドレスの書き込みフラグを更新しクリアする（Ｓ２０７）。Ｓ２０６において、データが不一致であると判定された場合、ベリファイ失敗（書き込み失敗）であるため、シーケンス制御部４は、フラグ情報格納部３の該当する内部アドレスの書き込みフラグを更新せずセットのままにしておく。
【００４６】
このＳ２０５とＳ２０６が、書き込み成功を確認するベリファイ処理である。Ｓ２０４において、書き込みフラグがセットされていないと判定された場合は、すでに書き込み成功しているため、ベリファイと書き込みフラグの更新（Ｓ２０５〜Ｓ２０７）は行わない。
【００４７】
次いで、シーケンス制御部４は、内部アドレスカウンタ２の選択する内部アドレスがラストアドレス（最終アドレス）かどうか判定する（Ｓ２０８）。すなわち、カウンタ値により選択される内部アドレスが、フラグ情報格納部３の最後のアドレスに達しているかどうか判定する。例えば、内部アドレスカウンタ２がオーバフローした場合に、ラストアドレスであると判定する。本実施形態では、ラストアドレスは、書き込むべきデータの最終アドレスではなく、フラグ情報格納部３の最終アドレスであり、つねに固定のアドレスである。
【００４８】
Ｓ２０８において、内部アドレスカウンタ２がラストアドレスではないと判定された場合、シーケンス制御部４は、内部アドレスカウンタ２のカウンタ値をインクリメントする（Ｓ２０９）。Ｓ２０９の後、インクリメントされた内部アドレスカウンタ２のカウンタ値により選択される内部アドレスについて、書き込みフラグのチェック、ベリファイ、書き込みフラグの更新を行い（Ｓ２０４〜Ｓ２０７）、これをラストアドレスまで繰り返す。
【００４９】
Ｓ２０８において、内部アドレスカウンタ２がラストアドレスであると判定された場合、シーケンス制御部４は、全てのデータの書き込みが完了しているかどうか判定する（Ｓ２１０）。このとき、フラグ情報格納部３の書き込みフラグの全てがクリア（リセット）されていれば、一連のバッファ書き込みは完了したことを意味する。また、フラグ情報格納部３の書き込みフラグが１個でもセットされていれば、まだ書き込みは完了していないことを意味する。Ｓ２１０において、全ての書き込みが完了していると判定された場合、シーケンス制御部４は、この自動書き込み処理を終了する。
【００５０】
Ｓ２１０において、全ての書き込みが完了していないと判定された場合、Ｓ２０３と同様に、シーケンス制御部４は、内部アドレスカウンタ２のカウンタ値をリセットする（Ｓ２１１）。次いで、Ｓ２０４と同様に、シーケンス制御部４は、内部アドレスカウンタ２により選択された内部アドレスの書き込みフラグがセットされているかどうか判定する（Ｓ２１２）。
【００５１】
Ｓ２１２において、フラグがセットされていると判定された場合、その選択アドレスが書き込み対象であることを意味するため、シーケンス制御部４は、書き込み回路６を動作させ、メモリセルアレイ７のうち、内部アドレスカウンタ２により選択された内部アドレスのメモリセルに対し、バッファ１の該当する外部データを電気的に書き込む（Ｓ２１３）。Ｓ２１２において、フラグがセットされていないと判定された場合、すでに書き込み成功しているため、メモリセルへの書き込みは行わない。
【００５２】
次いで、Ｓ２０８と同様に、シーケンス制御部４は、内部アドレスカウンタ２の選択する内部アドレスがラストアドレスかどうか判定する（Ｓ２１４）。
【００５３】
Ｓ２１４において、内部アドレスカウンタ２がラストアドレスではないと判定された場合、Ｓ２０９と同様に、シーケンス制御部４は、内部アドレスカウンタのカウンタ値をインクリメントする（Ｓ２１５）。
【００５４】
Ｓ２１５の後、インクリメントされた内部アドレスカウンタのカウンタ値により選択される内部アドレスについて、書き込みフラグのチェックとメモリセルの書き込みを行い（Ｓ２１２〜Ｓ２１３）、これをラストアドレスまで繰り返す。
【００５５】
Ｓ２１４において、内部アドレスカウンタ２がラストアドレスであると判定された場合、シーケンス制御部４は、再度、内部アドレスカウンタ２のカウンタ値のリセットを行い（Ｓ２０３）、Ｓ２０３以降の処理を全てのデータの書き込みが完了するまで繰り返し行う。
【００５６】
図４（ａ）〜（ｃ）は、フラグ情報格納部３に格納される内部アドレスと書き込みフラグの例を示している。
【００５７】
ここでは、内部アドレスを２ビット、書き込みフラグを１ビットとし、内部アドレス（００）ｂ〜（１１）ｂの４つのデータを書き込むものとする。図４（ａ）〜（ｃ）は、一連の自動書き込み処理が、３回のベリファイで完了する例である。図４（ａ）は、１回目のベリファイ完了時における内部アドレスと書き込みフラグを示し、図４（ｂ）は２回目のベリファイ完了時における内部アドレスと書き込みフラグを示し、図４（ｃ）は３回目のベリファイ完了時における内部アドレスと書き込みフラグを示している。
【００５８】
まず、外部アドレスと外部データが入力された時、内部アドレス（００）ｂ〜（１１）ｂの全ての書き込みフラグがセットされている。１回目のベリファイでは、メモリセルへのデータの書き込みが行われていないため、１回目のベリファイ完了時、図４（ａ）に示すように、全ての書き込みフラグがセットされた状態となる。そして、この状態で、内部アドレス（００）ｂ〜（１１）ｂの各アドレスのメモリセルに１回目の書き込みが行われる。ここでは、１回目の書き込みで、内部アドレス（０１）ｂと（１０）ｂが書き込み成功し、内部アドレス（００）ｂと（１１）ｂが書き込み失敗したとする。
【００５９】
そうすると、２回目のベリファイでは、内部アドレス（０１）ｂと（１０）ｂのフラグが「０」にリセットされて、２回目のベリファイ完了時、図４（ｂ）に示すように、内部アドレス（００）ｂと（１１）ｂのみのフラグがセットされた状態となる。そして、この状態で、内部アドレス（００）ｂと（１１）ｂの各アドレスのメモリセルに２回目の書き込みが行われる。ここでは、２回目の書き込みで、内部アドレス（００）ｂと（１１）ｂが書き込み成功したとする。
【００６０】
そうすると、３回目のベリファイでは、内部アドレス（００）ｂと（１１）ｂのフラグが「０」にリセットされて、３回目のベリファイ完了時、図４（ｃ）に示すように、全てのフラグがクリアされた状態となる。こうして、内部アドレス（００）ｂ〜（１１）ｂの書き込み処理が完了する。
【００６１】
図５は、図４の例における各ベリファイの動作の流れを示している。図５（ａ）は、図４の１回目もしくは２回目のベリファイ動作、すなわち、内部アドレスと書き込みフラグが図４（ａ）の状態のときのベリファイ動作である。
【００６２】
まず、シーケンス制御部４は、内部アドレスカウンタ２のカウンタ値をリセットし、カウンタ値「０」により選択される内部アドレス（００）ｂの書き込みフラグをチェックする（Ｓ３０１）。このとき、内部アドレス（００）ｂの書き込みフラグは（１）ｂなので、内部アドレス（００）ｂのメモリセルについてベリファイを行う（Ｓ３０２）。
【００６３】
次いで、シーケンス制御部４は、内部アドレスカウンタ２のカウンタ値をインクリメントし、カウンタ値「１」により選択される内部アドレス（０１）ｂの書き込みフラグをチェックする（Ｓ３０３）。このとき、内部アドレス（０１）ｂの書き込みフラグは（１）ｂなので、内部アドレス（０１）ｂのメモリセルについてベリファイを行う（Ｓ３０４）。
【００６４】
以降、同様にして、内部アドレスカウンタ２のカウンタ値をインクリメントし、内部アドレス（１０）ｂの書き込みフラグチェック、ベリファイ、内部アドレス（１１）ｂの書き込みフラグチェック、ベリファイを行う（Ｓ３０５〜Ｓ３０８）。そして、内部アドレスカウンタ２の選択するアドレスがラストアドレス、この例では、内部アドレス（１１）ｂとなり、この１回目もしくは２回目のベリファイが完了する。尚、１回目の書き込み処理も同様に、内部アドレス（００）ｂ〜（１１）が順次選択され、それぞれのアドレスに対し書き込みが行われる。
【００６５】
図５（ｂ）は、図４の３回目のベリファイ動作、すなわち、内部アドレスと書き込みフラグが図４（ｂ）の状態のときのベリファイ動作である。
【００６６】
まず、シーケンス制御部４は、内部アドレスカウンタ２のカウンタ値をリセットし、カウンタ値「０」により選択される内部アドレス（００）ｂの書き込みフラグをチェックする（Ｓ３０９）。このとき、内部アドレス（００）ｂの書き込みフラグは（１）ｂなので、内部アドレス（００）ｂのメモリセルについてベリファイを行う（Ｓ３１０）。
【００６７】
次いで、シーケンス制御部４は、内部アドレスカウンタ２のカウンタ値をインクリメントし、カウンタ値「１」により選択される内部アドレス（０１）ｂの書き込みフラグをチェックする（Ｓ３１１）。このとき、内部アドレス（０１）ｂの書き込みフラグは（０）ｂなのでベリファイを行わない。
【００６８】
次いで、シーケンス制御部４は、内部アドレスカウンタ２のカウンタ値をインクリメントし、カウンタ値「２」により選択される内部アドレス（１０）ｂの書き込みフラグをチェックする（Ｓ３１２）。このとき、内部アドレス（１０）ｂの書き込みフラグは（０）ｂなのでベリファイを行わない。
【００６９】
次いで、シーケンス制御部４は、内部アドレスカウンタ２のカウンタ値をインクリメントし、カウンタ値「３」により選択されるアドレス（１１）ｂの書き込みフラグをチェックする（Ｓ３１３）。このとき、内部アドレス（１１）ｂの書き込みフラグは（１）ｂなので、内部アドレス（０１）ｂのメモリセルについてベリファイを行う（Ｓ３１４）。これで、内部アドレスカウンタ２の選択するアドレスがラストアドレス、この例では、内部アドレス（１１）ｂとなり、３回目のベリファイが完了する。尚、２回目の書き込み処理も同様に、内部アドレス（００）ｂ〜（１１）が順次選択され、内部アドレス（００）ｂと（１１）ｂに対して書き込みが行われる。
【００７０】
以上のように本実施形態では、外部から入力するコマンドとして、複数のデータとデータのアドレスを一括で入力することにより、データごとのコマンド入力が必要なくなり、書き込み処理を効率よく行うことができるため、書き込み処理の時間を短縮することができる。
【００７１】
また、複数のアドレスごとにフラグを設け、このフラグに応じて、ベリファイや書き込みを行うことにより、データごと（書き込み単位）にベリファイや書き込みを行うことができるため、さらに、効率がよく処理を行うことができる。
【００７２】
発明の実施の形態２．
次に、本発明の実施の形態２にかかる不揮発性半導体記憶装置について説明する。本実施形態にかかる不揮発性半導体記憶装置は、連続したアドレスのデータを一括で入力するとともに、各アドレスごとに書き込み完了を示すフラグを設け、このフラグの複数を選択し並列にほぼ同時に処理することを特徴としている。
【００７３】
上記の実施の形態１では、バッファ動作を実行する際において、冗長なアドレス選択動作が発生し、処理速度の低下を招く場合がある。図５で説明したように、実施の形態１では、書き込みフラグがセットされているアドレスを検索する際に、カウンタ値をインクリメントし、常にシーケンシャルにサーチを行っている。したがって、書き込みフラグがセットされていない対象外のアドレスについても、一度、アドレスを選択していることとなる。この本来不要なアドレス選択を常に行うことにより、書き込みの処理速度が低下するおそれがある。
【００７４】
書き込みフラグのサーチ動作は、書き込み処理、読み出し処理それぞれを行うごとに常に行われ、かつ、その繰り返しが発生すればするほど、冗長なアドレス選択時間が増加していくことを意味する。書き込みフラグのサーチ動作における冗長なアドレスというのは、書き込み対象アドレスが少なければ、少ないほど増加していく。つまり、バッファサイズに対し、外部から指定されるアドレス数が少なければ、少ないほど、冗長な処理時間が増加することを意味する。
【００７５】
そこで、実施の形態２では、書き込みフラグのサーチにおいて、常にシーケンシャルにアドレスを選択せずに、必要なアドレスのみ選択するようにする。
【００７６】
図６を用いて、本実施形態にかかる不揮発性半導体記憶装置の構成について説明する。図６において、図１と同一の符号を付されたものは同様の要素であり、それらの説明を適宜省略する。図６に示されるように、この不揮発性半導体記憶装置は、図１の内部アドレスカウンタ２に代えて、内部アドレス格納部１０とし、さらに、図１の構成に加えて、次アドレス計算部８を備えている。ここでは、内部アドレス格納部１０と次アドレス計算部８とが、アドレス設定回路２０となる。
【００７７】
内部アドレス格納部１０は、シーケンス制御部４から設定される内部アドレスを格納する。この設定された内部アドレスによって、メモリセルアレイ７の中から、書き込みや読み出しを行うアドレスを選択する。すなわち、内部アドレス格納部１０は、内部アドレスカウンタ２と同様の構成であるが、シーケンス制御部４からインクリメントは行われず、内部アドレスのセットのみを行う。
【００７８】
次アドレス計算部８は、内部アドレス格納部１０に現在設定されている内部アドレスから、次に選択すべきアドレス（次アドレス）を計算する。ここで、計算される次アドレスは、必ず、書き込み対象であるアドレスであるため、実施の形態１のような不要アドレスの選択動作は発生しない。１回目の書き込みフラグの検索（選択）処理の場合、シーケンス制御部４から、初期セットフラグが入力される。また、次アドレス計算部８は、次アドレスを計算するとともに、アドレスがラストアドレスかどうかの判定も行う。ラストアドレスの場合、ラストアドレスフラグをシーケンス制御部４へ出力する。
【００７９】
次に、本実施形態にかかる不揮発性半導体記憶装置の自動書き込み処理について説明する。自動書き込み処理の概略は、図２と同様のため、ここでは、図７のフローチャートを用いて、自動書き込み処理の詳細について説明する。
【００８０】
まず、外部からコマンドとして、書き込みを行いたい外部アドレスおよび外部データが一括でバッファ１に入力される（Ｓ４０１）。このとき、実施の形態１と同様に、連続する複数のデータとその先頭アドレスが入力される。
【００８１】
次いで、入力された外部データが、バッファ１の該当するアドレスに格納されるとともに、書き込みたいアドレス（内部アドレス）に対応した書き込みフラグをフラグ情報格納部３に格納する（Ｓ４０２）。
【００８２】
次いで、次アドレス計算部８は、次に選択すべき内部アドレスである次アドレスを計算するとともに、内部アドレスがラストアドレスか否かの計算を行う（Ｓ４０３）。このとき、次アドレス計算部８は、内部アドレスカウンタ２からの現在の内部アドレス（初期リセット状態）と、フラグ情報格納部３の書き込みフラグに基づいて計算される。
【００８３】
次いで、シーケンス制御部４は、次アドレス計算部８の計算した次アドレスを、内部アドレス格納部１０へセットする（Ｓ４０４）。これにより、次アドレス計算部８の計算した次アドレスが現在の内部アドレスとなり、内部アドレス格納部１０は、セットされた新たな内部アドレスを選択することになる。
【００８４】
次いで、シーケンス制御部４は、読み出し回路５を動作させ、メモリセルアレイ７のうち、内部アドレスカウンタ２により選択された内部アドレスのメモリセルからデータの読み出しを行う（Ｓ４０５）。
【００８５】
次いで、比較回路９は、読み出し回路５が読み出しデータとバッファ１のデータとが一致しているかどうか判定する（Ｓ４０６）。Ｓ４０６において、データが一致すると判定された場合、ベリファイ成功（書き込み成功）であるため、シーケンス制御部４は、フラグ情報格納部３の該当するアドレスの書き込みフラグを更新しクリアする（Ｓ４０７）。Ｓ４０６において、データが不一致であると判定された場合、ベリファイ失敗（書き込み失敗）であるため、シーケンス制御部４は、フラグ情報格納部３の該当するアドレスの書き込みフラグを更新せずセットのままにしておく。
【００８６】
次いで、シーケンス制御部４は、内部アドレス格納部１０の選択する内部アドレスがラストアドレス（最終アドレス）かどうか判定する（Ｓ４０８）。次アドレス計算部８により現在の内部アドレスがラストアドレスか判定されラストアドレスフラグが設定されているため、シーケンス制御部４は、ラストアドレスフラグによって、ラストアドレスかどうかを判定する。
【００８７】
Ｓ４０８において、内部アドレス格納部１０のアドレスがラストアドレスではないと判定された場合、再び、次アドレス計算部８にて、内部アドレス格納部１０からの現在の内部アドレス（前回セットしたアドレス）とフラグ情報格納部３の書き込みフラグにより、次に選択するアドレスを計算するとともに、ラストアドレスか否かの計算を行う（Ｓ４０３）。そして、その計算結果のアドレスが、内部アドレス格納部１０へセットされ（Ｓ４０４）、以後、同様に、ベリファイ、書き込みフラグの更新を行い（Ｓ４０５〜Ｓ４０７）、これをラストアドレスまで繰り返す。
【００８８】
Ｓ４０８において、内部アドレス格納部１０がラストアドレスであると判定された場合、シーケンス制御部４は、全てのデータの書き込みが完了しているかどうか判定する（Ｓ４０９）。次アドレス計算部８より、ラストアドレスであることを意味するラストアドレスフラグがセットされ、フラグ情報格納部３の書き込みフラグがすべてクリアされていれば、一連の自動書き込み処理は完了したことを意味する。フラグ情報格納部３の書き込みフラグが１個でもセットされていれば、まだ書き込み処理は完了していないことを意味する。Ｓ４０９において、書き込みが完了していると判定された場合、シーケンス制御部４は、この自動書き込み処理を終了する。
【００８９】
Ｓ４０９において、全ての書き込みが完了していないと判定された場合、Ｓ４０３と同様に、次アドレス計算部８は、内部アドレス格納部１０の現在の内部アドレス（リセット状態）とフラグ情報格納部３の書き込みフラグに基づき、次に選択すべきアドレスを計算するとともに、ラストアドレスか否かの計算を行う（Ｓ４１０）。
【００９０】
次いで、シーケンス制御部４は、Ｓ４０４と同様に、次アドレス計算部８の計算した次アドレスを、内部アドレス格納部１０へセットする（Ｓ４１１）。
【００９１】
次に、シーケンス制御部４は、書き込み回路６を動作させ、メモリセルアレイ７のうち、内部アドレス格納部１０により選択されたアドレスのメモリセルに対し、バッファ１の該当する外部データを電気的に書き込む（Ｓ４１２）。
【００９２】
次いで、Ｓ４０８と同様に、シーケンス制御部４は、内部アドレス格納部１０の選択するアドレスがラストアドレスかどうか判定する（Ｓ４１３）。Ｓ４１３において、内部アドレス格納部１０がラストアドレスではないと判定された場合、次アドレス計算部８より、ラストアドレスであることを意味するラストアドレスフラグがセットされていなければ、再び、次アドレス計算部８にて、内部アドレス格納部１０の現在の内部アドレス（前回セットしたアドレス）とフラグ情報格納部３の書き込みフラグに基づき次に選択するアドレスを計算するとともに、ラストアドレスか否かの計算を行う（Ｓ４１０）。そして、その計算結果のアドレスが、内部アドレス格納部１０へセットされ（Ｓ４１１）、以後、同様に、書き込み動作を行い（Ｓ４１２）、これをラストアドレスまで繰り返す。
【００９３】
Ｓ４１３において、内部アドレス格納部１０がラストアドレスであると判定された場合、次アドレス計算部８より、ラストアドレスであることを意味するラストアドレスフラグがセットされていた場合、再度、次アドレスの計算を行い（Ｓ４０３）、Ｓ４０３以降の処理を全てのデータの書き込みが完了するまで繰り返し行う。
【００９４】
次に、図８を用いて、本実施形態にかかる不揮発性半導体記憶装置の自動書き込み処理の具体例について説明する。図８は、実施の形態１の図５と同様に、図４の例における各ベリファイの動作を示している。
【００９５】
図８（ａ）は、図４の１回目もしくは２回目のベリファイ動作、すなわち、内部アドレスと書き込みフラグが図４（ａ）の状態のときのベリファイ動作である。
【００９６】
まず、次アドレス計算部８は、このとき初期状態なので、内部アドレス（００）ｂ〜（１１）ｂの全ての書き込みフラグを同時にチェックし、書き込みフラグがセットされている最小の内部アドレスを計算する（Ｓ５０１）。このとき、内部アドレス（００）ｂの書き込みフラグが（１）ｂなので、内部アドレス（００）ｂが算出され、内部アドレス格納部１０に設定されて、内部アドレス（００）ｂが選択される。そして、内部アドレス（００）ｂのメモリセルについてベリファイを行う（Ｓ５０２）。
【００９７】
次いで、次アドレス計算部８は、内部アドレス格納部１０の内部アドレスが（００）ｂを選択しているので、（００）ｂより大きい内部アドレス、すなわち、内部アドレス（０１）ｂ〜（１１）ｂの全ての書き込みフラグを同時にチェックし、書き込みフラグがセットされている最小の内部アドレスを計算する（Ｓ５０３）。このとき、内部アドレス（０１）ｂの書き込みフラグが（１）ｂなので、内部アドレス（０１）ｂが算出され、内部アドレス格納部１０に設定されて、内部アドレス（０１）ｂが選択される。そして、内部アドレス（０１）ｂのメモリセルについてベリファイを行う（Ｓ５０４）。
【００９８】
以降、同様にして、内部アドレスが（０１）ｂのとき、内部アドレス（１０）ｂと内部（１１）ｂの書き込みフラグをチェックして（Ｓ５０５）、内部アドレス（１０）ｂのメモリセルをベリファイし（Ｓ５０６）、内部アドレスが（１０）ｂのとき、内部アドレス（１１）ｂの書き込みフラグをチェックして（Ｓ５０７）、内部アドレス（１１）ｂのメモリセルをベリファイする（Ｓ５０８）。そして、内部アドレス格納部１０の選択するアドレスがラストアドレス、この例では、内部アドレス（１１）ｂとなり、この１回目もしくは２回目のベリファイが完了する。尚、１回目の書き込み処理も同様に、内部アドレス（００）ｂ〜（１１）ｂが選択され、それぞれのアドレスに対し書き込みが行われる。
【００９９】
図８（ｂ）は、図４の３回目のベリファイ動作、すなわち、内部アドレスと書き込みフラグが図４（ｂ）の状態のときのベリファイ動作である。
【０１００】
まず、次アドレス計算部８は、このとき初期状態なので、内部アドレス（００）ｂ〜（１１）ｂの全ての書き込みフラグを同時にチェックし、書き込みフラグがセットされている最小のアドレスを計算する（Ｓ５０９）。このとき、内部アドレス（００）ｂの書き込みフラグが（１）ｂなので、内部アドレス（００）ｂが算出され、内部アドレス格納部１０に設定されて、内部アドレス（００）ｂが選択される。そして、内部アドレス（００）ｂのメモリセルについてベリファイを行う（Ｓ５１０）。
【０１０１】
次いで、次アドレス計算部８は、内部アドレス格納部１０の内部アドレスが（００）ｂを選択しているので、（００）ｂより大きいアドレス、すなわち、内部アドレス（０１）ｂ〜（１１）ｂの全ての書き込みフラグを同時にチェックし、書き込みフラグがセットされている最小の内部アドレスを計算する（Ｓ５１１）。このとき、内部アドレス（０１）ｂと（１０）ｂの書き込みフラグが（０）ｂで内部アドレス（１１）ｂの書き込みフラグが（１）ｂなので、内部アドレス（１１）ｂが算出され、内部アドレス格納部１０に設定されて、内部アドレス（１１）ｂが選択される。そして、内部アドレス（１１）ｂのメモリセルについてベリファイを行う（Ｓ５１２）。さらに、内部アドレス格納部１０の選択するアドレスがラストアドレス、この例では、内部アドレス（１１）ｂとなり、この３回目のベリファイが完了する。尚、２回目の書き込み処理も同様に、内部アドレス（００）ｂと（１１）ｂが選択され、それぞれのアドレスに対し書き込みが行われる。
【０１０２】
このように、本実施形態では、書き込みフラグがセットされているアドレスのみを選択するため、図５の実施の形態１のように、常に順次アドレスを選択することがなくなり、書き込みフラグの検索処理を短縮することができる。
【０１０３】
次に、次アドレス計算部８の構成と動作について説明する。図９は、次アドレス計算部８の構成を示している。次アドレス計算部８は、図に示すように、次実行アドレス計算部８１とラストアドレス計算部８２を有している。
【０１０４】
次実行アドレス計算部８１は、現在の内部アドレスと書き込みフラグ、初期セットフラグを入力し、書き込みフラグがセットされている次に選択すべき次アドレスの計算して、これをシーケンス制御部４へ出力する。ラストアドレス計算部８２は、現在の内部アドレスと書き込みフラグを入力し、内部アドレスがラストアドレスであるかどうかを示すラストアドレスフラグを計算して、これをシーケンス制御部４へ出力する。
【０１０５】
ここでは、例として、バッファ１のサイズ、すなわち、書き込むデータの最大サイズを３２アドレスとする。よって、書き込み対象であることを示す書き込みフラグは３２個となり、バッファ書き込み対象となるメモリセル選択に必要となる内部アドレスは５ビット（２５＝３２）となる。
【０１０６】
そして、現在の内部アドレス、つまり、内部アドレス格納部１０に設定される内部アドレスをＡＤＤ［４：０］（０ビット目から４ビット目までの５ビットを示す。以下同様。）とする。シーケンス制御部４が生成し、１回目のアドレス選択動作であることを意味する初期セットフラグをＩＮＩＴＦＬＡＧとする。フラグ情報格納部３が保持し、書き込み対象であることを意味する書き込みフラグをＦＬＡＧ［３１：０］とする。そして、次実行アドレス計算部８１の計算結果である次アドレスをＮＥＸＴ＿ＡＤＤ［４：０］とする。さらに、ラストアドレス計算部８２の計算結果であるラストアドレスフラグをＬＡＳＴＦＬＡＧとする。
【０１０７】
本実施形態で、ラストアドレスとは、実施の形態１のようにカウンタがオーバフローとなるような最終アドレス、例えば、５ビットであれば（１＿１１１１）ｂ＝（３１）ｄを意味するのではない。バッファ１内で、書き込みフラグがセットされているアドレス（データを書き込むべきアドレス）の、最終アドレスを意味する。つまり、常に（１＿１１１１）ｂであることを意味しない。
【０１０８】
次に、図１０のフローチャートを用いて、本実施形態にかかる不揮発性半導体記憶装置におけるアドレス選択動作について説明する。図１０は、図７のフローチャートからアドレス選択動作のみを限定して抽出したフローチャートである。
【０１０９】
まず、シーケンス制御部４は、初期設定として、内部アドレス格納部１０の内部アドレスをリセット（ＡＤＤ［４：０］＝（０＿００００）ｂ＝（０）ｄ）するとともに、初期セットフラグをセット（ＩＮＩＴＦＬＡＧ＝１）する（Ｓ６０１）。
【０１１０】
次いで、次実行アドレス計算部８１は、次アドレスＮＥＸＴ＿ＡＤＤ［４：０］の計算を行う（Ｓ６０２）。このとき、同時に、ラストアドレス計算部８２は、ラストアドレスフラグＬＡＳＴＦＬＡＧの計算を行う（Ｓ６０３）。なお、次アドレス計算部８１とラストアドレス計算部８２の計算方法については、後述する。
【０１１１】
次いで、シーケンス制御部４は、次実行アドレス計算部８１の計算結果である次アドレスＮＥＸＴ＿ＡＤＤ［４：０］を、内部アドレス格納部１０へセット（ＡＤＤ［４：０］＝ＮＥＸＴ＿ＡＤＤ［４：０］）する（Ｓ６０４）。これにより、計算結果のアドレスに対応するメモリセルが選択される。
【０１１２】
次いで、シーケンス制御部４は、さらに次のアドレスの計算のために、初期セットフラグをリセット（ＩＮＩＴＦＬＡＧ＝０）する（Ｓ６０５）。
【０１１３】
次いで、シーケンス制御部４は、ラストアドレス計算部８２の計算結果であるラストアドレスフラグにより、現在の内部アドレスがラストアドレスかどうか（ＬＡＳＴＦＬＡＧ＝１）判定する（Ｓ６０６）。ラストアドレスフラグがセットされていない場合（ＬＡＳＴＦＬＡＧ＝０）、次に処理すべきメモリセルが存在するので、再び、選択すべきアドレスの計算を行う（Ｓ６０２）。また、ラストアドレスフラグが、セットされている場合（ＬＡＳＴＦＬＡＧ＝１）、現在の内部アドレスが、バッファ内の処理すべきアドレスの最終アドレスであることを意味するので、アドレス選択処理は終了する。
【０１１４】
なお、図１０のフローチャートは、１回のバッファ内のアドレス選択処理を表したものであり、図７で示した自動書き込み処理のフローチャートの中では、複数回、バッファ内のアドレス選択処理（図１０の処理）が行われることになる（Ｓ４０３〜Ｓ４０８、Ｓ４１０〜Ｓ４１３）。
【０１１５】
次に、図１１のフローチャートを用いて、次実行アドレス計算部８１による、次アドレスＮＥＸＴ＿ＡＤＤ［４：０］の計算方法について説明する。次実行アドレス計算部８１は、現在の内部アドレスＡＤＤ［４：０］と、書き込みフラグＦＬＡＧ［３１：０］の状態を比較し、次に実行すべき次アドレスＮＥＸＴ＿ＡＤＤ［４：０］を求める動作となる。
【０１１６】
なお、図中の記号"＝＝"は一致判定、"＜"は大小判定、"＆＆"は論理積、"＜＝"は代入をそれぞれ意味している。また、以後、"＝"は等号の意で使用する。
【０１１７】
まず、次実行アドレス計算部８１は、現在の内部アドレスが先頭番地（ＡＤＤ［４：０］＝（０）ｄ）であり、かつ、先頭番地用の書き込みフラグがセット（ＦＬＡＧ［０］＝１）され、さらに、初期セットフラグがセット（ＩＮＩＴＦＬＡＧ＝１）されているかどうか判定する（Ｓ７０１）。すなわち、１回目のアドレス計算で、かつ、先頭番地が書き込み対象かどうか判定する。Ｓ７０１の条件を満たす場合、次アドレスを先頭番地（ＮＥＸＴ＿ＡＤＤ［４：０］＜＝（０）ｄ）とする（Ｓ７０７）。
【０１１８】
なお、Ｓ７０１で、初期セットフラグＩＮＩＴＦＬＡＧの条件が必要な理由は、１回目の選択アドレスが先頭番地であった場合、つまり、２回目のアドレス計算時も、現在の内部アドレスＡＤＤ［４：０］＝（０）ｄであった場合と、１回目のアドレス計算時（このときも現在の内部アドレスＡＤＤ［４：０］＝（０）ｄとなる）とを区別するためである。
【０１１９】
さらに、Ｓ７０１とほぼ同時に、Ｓ７０２〜Ｓ７０６の判定を行う。Ｓ７０２〜Ｓ７０６では、現在の内部アドレス（フラグが未設定のアドレスを含む）の次のアドレスの書き込みフラグがセットされているかどうか判定する。
【０１２０】
Ｓ７０２では、現在の内部アドレスがＡＤＤ［４：０］＜（１）ｄ、つまり、先頭番地（ＡＤＤ［４：０］＝（０）ｄ）のとき、かつ、書き込みフラグの１番地がセット（ＦＬＡＧ［１］＝１）かどうか判定する。また、Ｓ７０２よりもＳ７０１の判定が優先的に実行されるため、Ｓ７０２では、Ｓ７０１を満たさないことも条件となる。Ｓ７０２の条件を満たす場合、次アドレスを１番地（ＮＥＸＴ＿ＡＤＤ［４：０］＜＝（１）ｄ）とする（Ｓ７０８）。
【０１２１】
Ｓ７０３では、現在の内部アドレスがＡＤＤ［４：０］＜（２）ｄ、つまり、先頭番地（ＡＤＤ［４：０］＝（０）ｄ）、または、１番地（ＡＤＤ［４：０］＝（１）ｄ）のとき、かつ、書き込みフラグの２番地がセット（ＦＬＡＧ［２］＝１）かどうか判定する（Ｓ７０３）。また、Ｓ７０３よりもＳ７０１、Ｓ７０２の判定が優先的に実行されるため、Ｓ７０３では、Ｓ７０１、Ｓ７０２を満たさないことも条件となる。Ｓ７０３の条件を満たす場合、次アドレスを２番地（ＮＥＸＴ＿ＡＤＤ［４：０］＜＝（２）ｄ）とする（Ｓ７０９）。
【０１２２】
同様に、現在の内部アドレスがＡＤＤ［４：０］＜（３）ｄ〜（３０）ｄの場合の判定を行い（Ｓ７０４、Ｓ７０５）、次アドレスを設定する（ＮＥＸＴ＿ＡＤＤ［４：０］＜＝（３）ｄ〜（３０）ｄ）。
【０１２３】
さらに、Ｓ７０６では、内部アドレスＡＤＤ［４：０］＜（３１）ｄの場合、つまり、先頭番地から３０番地まで（ＡＤＤ［４：０］＝（０）ｄ〜（３０）ｄ）のとき、かつ、書き込みフラグの３１番地がセット（ＦＬＡＧ［３１］＝１）かどうか判定する。Ｓ７０６の条件を満たす場合、次アドレスを３１番地（ＮＥＸＴ＿ＡＤＤ［４：０］＜＝（３１）ｄ）とする（Ｓ７１２）。また、Ｓ７０６の条件を満たさない場合、次アドレスを先頭番地（ＮＥＸＴ＿ＡＤＤ［４：０］＜＝（０）ｄ）とする（Ｓ７１３）。つまり、この場合、次アドレスをリセット状態とする。ただし、この条件が成立する以前に、ラストアドレス計算部８２によりラストアドレスと判定され、処理が終了するため、通常選択されることはない。
【０１２４】
このように、書き込みフラグがセットされている必要なアドレスのみを選択していくため、不要なアドレスの選択を削除することができ、場合によっては、アドレスをジャンプするようにて選択が行われる。
【０１２５】
次に、図１２のフローチャートを用いて、ラストアドレス計算部８２による、ラストアドレスフラグＬＡＳＴＦＬＡＧの計算方法について説明する。ラストアドレス計算部８２は、現在の内部アドレスＡＤＤ［４：０］と、書き込みフラグＦＬＡＧ［３１：０］の状態を比較し、選択された内部アドレスが、ラストアドレスであるか否かの計算を行う。なお、図中の記号"￣"は論理反転、"｜"はビット論理和をそれぞれ意味している。
【０１２６】
まず、ラストアドレス計算部８２は、現在の内部アドレスが先頭番地（ＡＤＤ［４：０］＝（０）ｄ）であり、かつ、書き込みフラグの１番地から３１番地まで、すべてがセットされていないかどうか（￣（｜ＦＬＡＧ［３１：１］））判定する（Ｓ８０１）。すなわち、現在の内部アドレスよりも次のアドレス以降のフラグが全て未設定かどうか判定する。Ｓ８０１の条件を満たす場合、現在の内部アドレスはラストアドレスであることを意味するため、ラストアドレスフラグをセット（ＬＡＳＴＦＬＡＧ＝１）する（Ｓ８０８）。
【０１２７】
さらに、Ｓ８０１とほぼ同時に、Ｓ８０２〜Ｓ８０６の判定を行う。Ｓ８０２〜Ｓ８０６では、Ｓ８０１と同様に、現在の内部アドレスよりも次のアドレス以降のフラグが全て未設定かどうか判定する。
【０１２８】
Ｓ８０２では、現在の内部アドレスが１番地（ＡＤＤ［４：０］＝（１）ｄ）のとき、かつ、書き込みフラグの２番地から３１番地まで、すべてがセットされていないかどうか（￣（｜ＦＬＡＧ［３１：２］））判定する（Ｓ８０２）。Ｓ８０２の条件を満たす場合、Ｓ８０１と同様に、その内部アドレスはラストアドレスであることを意味するため、ラストアドレスフラグをセット（ＬＡＳＴＦＬＡＧ＝１）する（Ｓ８０８）。
【０１２９】
同様に、現在の内部アドレスがＡＤＤ［４：０］＝（２）ｄ〜（３０）ｄの場合の比較を行い（Ｓ８０４、Ｓ８０５）、ラストアドレスフラグをセット（ＬＡＳＴＦＬＡＧ＝１）する（Ｓ８０８）。
【０１３０】
さらに、Ｓ８０６では、現在の内部アドレスが３１番地（ＡＤＤ［４：０］＝（３１）ｄ）のとき、書き込みフラグによらず、その内部アドレスはラストアドレスであることを意味するため、ラストアドレスフラグをセット（ＬＡＳＴＦＬＡＧ＝１）する（Ｓ８０８）。また、Ｓ８０６の条件を満たさない場合、現在の内部アドレスＡＤＤ［４：０］は、ラストアドレスを意味しないため、ラストアドレスフラグをリセット（ＬＡＳＴＦＬＡＧ＝０）する（Ｓ８０７）。
【０１３１】
このように、現在のアドレス以降のフラグによりラストアドレスフラグを計算することにより、内部アドレス格納部１０を、全ビットカウントアップさせることなく、書き込みフラグがセットされている必要なアドレスのラストとなった時点で、処理を終了させることが可能となる。つまり、不要なアドレス選択を削除することができる。
【０１３２】
次に、図１３及び図１４を用いて、次実行アドレス計算部８１とラストアドレス計算部８２の具体的な回路構成について説明する。
【０１３３】
図１３は、次実行アドレス計算部８１の回路構成の一例を示している。この例では、入力を現在の内部アドレスＡＤＤ［１：０］、書き込みフラグＦＬＡＧ［３：０］、初期セットフラグＩＮＩＴＦＬＡＧとし、出力を次アドレスＮＥＸＴ＿ＡＤＤ［１：０］とする。
【０１３４】
図に示されるように、次実行アドレス計算部８１は、１０１〜１１８の符号が付された論理ゲート（インバータ、ＡＮＤゲート、ＮＡＮＤゲート、ＯＲゲート、ＮＯＲゲート、バッファ）を含む組み合わせ回路から構成される。
【０１３５】
初期セットフラグＩＮＩＴＦＬＡＧは、反転されてＮＡＮＤゲート１０２の一方の入力端に入力される。書き込みフラグＦＬＡＧ［０］は、ＮＡＮＤゲート１０２の他方の入力端に入力され、書き込みフラグＦＬＡＧ［１］は、インバータ１０３の入力端に入力され、書き込みフラグＦＬＡＧ［２］は、インバータ１０１の入力端に入力され、書き込みフラグＦＬＡＧ［３］は、インバータ１０５の入力端に入力される。現在のアドレスＡＤＤ［０］は、バッファ１０４の入力端に入力され、現在のアドレスＡＤＤ［１］は、バッファ１０６の入力端に入力される。
【０１３６】
そして、インバータ１０１、ＮＡＮＤゲート１０２、インバータ１０３、バッファ１０４、インバータ１０５、バッファ１０６の各出力は、ＡＮＤゲート１０７、ＮＯＲゲート１０８、ＯＲゲート１０９、ＡＮＤゲート１１０、ＡＮＤゲート１１１、ＮＯＲゲート１１２を介してバッファ１１６に入力され、バッファ１１６の出力が次アドレスＮＥＸＴ＿ＡＤＤ［１］となる。また、インバータ１０１、ＮＡＮＤゲート１０２、インバータ１０３、バッファ１０４、インバータ１０５、バッファ１０６の各出力は、ＡＮＤゲート１０７、ＮＯＲゲート１０８、ＯＲゲート１０９、ＡＮＤゲート１１０、ＡＮＤゲート１１１、ＮＯＲゲート１１２とさらに、ＡＮＤゲート１１３、ＮＯＲゲート１１４、ＮＡＮＤゲート１１５、ＡＮＤゲート１１７を介してＮＯＲゲート１１８に入力され、ＮＯＲゲート１１８の出力が次アドレスＮＥＸＴ＿ＡＤＤ［０］となる。
【０１３７】
次の表１は、図１３の次実行アドレス計算部８１の入力と出力とを示す真理値表である。
【表１】
2006309829.tif 000003
【０１３８】
表１は、図１１のフローチャートと同様の動作を示している。例えば、次実行アドレス計算部８１は、入力が現在の内部アドレスＡＤＤ［１：０］＝（００）ｂ、かつ、書き込みフラグＦＬＡＧ［０］＝１、かつ、初期セットフラグＩＮＩＴＦＬＡＧ＝１の場合、次アドレスＮＥＸＴ＿ＡＤＤ［１：０］＝（００）ｂを出力する。
【０１３９】
入力が現在の内部アドレスＡＤＤ［１：０］＝（００）ｂ、かつ書き込みフラグＦＬＡＧ［１］＝０、かつ、書き込みフラグＦＬＡＧ［２］＝０、かつ、書き込みフラグＦＬＡＧ［３］＝１、かつ、初期セットフラグＩＮＩＴＦＬＡＧ＝０の場合、次アドレスＮＥＸＴ＿ＡＤＤ［１：０］＝（１１）ｂを出力する。このとき、内部アドレス（０１）ｂや（１０）ｂを選択せずに、内部アドレスを（１１）ｂを選択する。
【０１４０】
入力が現在のアドレスＡＤＤ［１：０］＝（０１）ｂ、かつ、書き込みフラグＦＬＡＧ［２］＝０、かつ、書き込みフラグＦＬＡＧ［３］＝１、かつ、初期セットフラグＩＮＩＴＦＬＡＧ＝０の場合、次アドレスＮＥＸＴ＿ＡＤＤ［１：０］＝（１１）ｂを出力する。このとき、内部アドレス（１０）ｂを選択せずに、内部アドレスを（１１）ｂを選択する。
【０１４１】
尚、図１３の回路は、表１のように動作する回路構成であればよく、その他の組み合わせ回路であってもよい。
【０１４２】
図１４は、ラストアドレス計算部８２の回路構成の一例を示している。この例では、入力を現在の内部アドレスＡＤＤ［１：０］、書き込みフラグＦＬＡＧ［３：０］とし、出力をラストアドレスフラグＬＡＳＴＦＬＡＧとする。
【０１４３】
図に示されるように、ラストアドレス計算部８２は、２０１〜２０９の符号が付された論理ゲート（インバータ、ＡＮＤゲート、ＮＡＮＤゲート、ＯＲゲート、ＮＯＲゲート）を含む組み合わせ回路から構成される。
【０１４４】
ここでは、書き込みフラグＦＬＡＧ［０］は、ラストアドレス計算部８２では使用しないため入力されない。書き込みフラグＦＬＡＧ［１］は、反転されてＡＮＤゲート２０３の一方の入力端に入力され、書き込みフラグＦＬＡＧ［２］は、ＮＯＲゲート２０４の他方の入力端に入力され、書き込みフラグＦＬＡＧ［３］は、ＯＲゲート２０７の入力端に入力される。現在のアドレスＡＤＤ［０］は、インバータ２０１の入力端に入力され、現在のアドレスＡＤＤ［１］は、インバータ２０２の入力端に入力される。
【０１４５】
そして、各入力は、インバータ２０１、インバータ２０２、ＡＮＤゲート２０３、ＮＯＲゲート２０４、インバータ２０５、ＮＯＲゲート２０６、ＯＲゲート２０７、ＯＲゲート２０８を介してＮＡＮＤゲート２０９に入力され、ＮＡＮＤゲート２０９の出力がラストアドレスフラグＬＡＳＴＦＬＡＧとなる。
【０１４６】
次の表２は、図１４のラストアドレス計算部８２の入力と出力とを示す真理値表である。
【表２】
2006309829.tif 000004
【０１４７】
表２は、図１２のフローチャートと同様の動作を示している。例えば、ラストアドレス計算部８２は、入力が現在の内部アドレスＡＤＤ［１：０］＝（００）ｂ、かつ、書き込みフラグＦＬＡＧ［１］＝０、かつ、書き込みフラグＦＬＡＧ［２］＝０、かつ、書き込みフラグＦＬＡＧ［３］＝０の場合、ラストアドレスフラグＬＡＳＴＦＬＡＧ＝１を出力する。このとき、内部アドレス（０１）ｂ、（１０）ｂ、（１１）ｂを選択せずに、内部アドレスを（００）ｂがラストアドレスとなる。
【０１４８】
入力が現在のアドレスＡＤＤ［１：０］＝（０１）ｂ、かつ、書き込みフラグＦＬＡＧ［２］＝０、かつ、書き込みフラグＦＬＡＧ［３］＝０の場合、ラストアドレスフラグＬＡＳＴＦＬＡＧ＝１を出力する。このとき、内部アドレス（１０）ｂ、（１１）ｂを選択せずに、内部アドレスを（０１）ｂがラストアドレスとなる。
【０１４９】
入力が現在のアドレスＡＤＤ［１：０］＝（１０）ｂ、かつ、書き込みフラグＦＬＡＧ［３］＝０の場合、ラストアドレスフラグＬＡＳＴＦＬＡＧ＝１を出力する。このとき、内部アドレス（１１）ｂを選択せずに、内部アドレスを（１０）ｂがラストアドレスとなる。
【０１５０】
尚、図１４の回路は、表２のように動作する回路構成であればよく、その他の組み合わせ回路であってもよい。
【０１５１】
次に、実施の形態１と実施の形態２について、自動書き込み処理時間の計算例について説明する。ここでは、バッファの書き込みアドレス数を３２ビットとし、フラッシュメモリのメモリセルが多値品の場合と、二値品の場合について計算を行った。また、多値品の場合、３０回の書き込みで書き込み完了、電気的書き込みパルス幅は５００ｎｓとし、二値品の場合、１回の書き込みで書き込み完了、電気的書き込みパルス幅は２ｕｓとする。
【０１５２】
さらに、自動書き込み時間を、次の式のシーケンス動作にて計算するものとする。次の式１〜式３は、実施の形態１のプリベリファイ、プログラム（書き込み）、ポストベリファイの処理時間である。
ＰｒｅＶｅｒｉｆｙ＝サーチ（５０ｎｓ）×全アドレス数＋Ｖｅｒｉｆｙ（２００ｎｓ）×必要アドレス数      （式１）
Ｐｒｏｇｒａｍ＝サーチ（５０ｎｓ）×全アドレス数＋Ｐｒｏｇｒａｍ（ＸＸｎｓ）×必要アドレス数          （式２）
ＰｏｓｔＶｅｒｉｆｙ＝サーチ（５０ｎｓ）×全アドレス数＋Ｖｅｒｉｆｙ（２００ｎｓ）×必要アドレス数    （式３）
【０１５３】
次の式４〜式６は、実施の形態２のプリベリファイ、プログラム（書き込み）、ポストベリファイの処理時間である。
ＰｒｅＶｅｒｉｆｙ＝サーチ（５０ｎｓ）×必要アドレス数＋Ｖｅｒｉｆｙ（２００ｎｓ）×必要アドレス数    （式４）
Ｐｒｏｇｒａｍ＝サーチ（５０ｎｓ）×必要アドレス数＋Ｐｒｏｇｒａｍ（ＸＸｎｓ）×必要アドレス数        （式５）
ＰｏｓｔＶｅｒｉｆｙ＝サーチ（５０ｎｓ）×必要アドレス数＋Ｖｅｒｉｆｙ（２００ｎｓ）×必要アドレス数    （式６）
【０１５４】
上記の式により書き込みデータ数を４〜３２として、二値品について処理時間を計算した結果を表３に示す。
【表３】
2006309829.tif 000005
【０１５５】
表３に示すように、書き込みデータ数が３２の場合には、バッファ１の全体にデータが含まれるため、サーチ時間に差が無く、実施の形態１と実施の形態２では、同じ処理時間となる。書き込みデータ数が減るに従い、実施の形態２のサーチ時間が短縮されるため、全体の処理時間が減る。書き込みデータ数が４の場合、実施の形態２は、実施の形態１の７０．８％の処理時間となる。
【０１５６】
また、上記の式により書き込みデータ数を４〜３２として、多値品について処理時間を計算した結果を表４に示す。
【表４】
2006309829.tif 000006
【０１５７】
さらに、表３と表４の時間短縮効果の欄をグラフにしたものを図１５に示す。表３、表４と図１５に示すように、書き込みデータ数が３２の場合には、バッファ１の全体にデータが含まれるため、サーチ時間に差が無く、実施の形態１と実施の形態２では、同じ処理時間となり、時間短縮効果は得られない。書き込みデータ数が減るに従い、実施の形態２では、不要なアドレス選択処理を削除できサーチ時間が短縮されるため、全体の処理時間が減り、時間短縮効果が大きくなる。例えば、二値品で、書き込みデータ数が４の場合、実施の形態１の処理時間は１４．４ｕｓ、実施の形態２の処理時間は１０．２ｕｓとなり、実施の形態２の処理時間は、実施の形態１の７０．８％の処理時間となる。
【０１５８】
また、多値品では、二値品に比べて、電気的書き込みのリトライ回数、および、書き込み不要なアドレス数も増加していくため、その高速化の効果はさらに顕著に現れることになる。
【０１５９】
例えば、多値品で、書き込みデータ数が４つの場合について計算式を示すと、実施の形態１の処理時間は、次の式７〜式１０となる。
ＰｒｅＶｅｒｉｆｙ＝（５０ｎｓ×３２アドレス）＋（２００ｎｓ×４アドレス）＝２．４ｕｓ        （式７）
Ｐｒｏｇｒａｍ＝（５０ｎｓ×３２アドレス）＋（５００ｎｓ×４アドレス）＝３．６ｕｓ          （式８）
ＰｏｓｔＶｅｒｉｆｙ＝（５０ｎｓ×３２アドレス）＋（２００ｎｓ×４アドレス）＝２．４ｕｓ    （式９）
Ｔｏｔａｌ＝（式７）＋（式８＋式９）×３０＝１８２．４ｕｓ                            （式１０）
【０１６０】
同じ条件で、実施の形態２の処理時間を計算すると、次の式１１〜式１４となる。
ＰｒｅＶｅｒｉｆｙ＝（５０ｎｓ×４アドレス）＋（２００ｎｓ×４アドレス）＝１．０ｕｓ    （式１１）
Ｐｒｏｇｒａｍ＝（５０ｎｓ×４アドレス）＋（５００ｎｓ×４アドレス）＝２．２ｕｓ    （式１２）
ＰｏｓｔＶｅｒｉｆｙ＝（５０ｎｓ×４アドレス）＋（２００ｎｓ×４アドレス）＝１．０ｕｓ    （式１３）
Ｔｏｔａｌ＝（式１１）＋（式１２＋式１３）×３０＝９７．０ｕｓ        （式１４）
【０１６１】
したがって、実施の形態１は１８２．４ｕｓ、実施の形態２は９７．０ｕｓとなり、実施の形態２では、実施の形態１の５３．２％に短縮されたことになる。
【０１６２】
以上のように、本実施形態では、ベリファイや書き込みの対象となるアドレスを検索する処理において、実施の形態１のように、全てのアドレスを順次選択するのではなく、書き込みフラグセットされたアドレスのみを選択することにより、不要なアドレス選択動作を削除でき、書き込み動作の処理時間を短縮し、書き込み動作の高速化を図ることが可能となる。
【０１６３】
また、書き込みを行うメモリセルを、多値品のフラッシュメモリとした場合、リトライ回数が増加し、アドレス選択動作が増加するため、さらなる高速化が可能となる。
【０１６４】
さらに、アドレスを選択する際に、メモリセルアレイに本来不要な電圧印加が発生している場合、本発明を適用することにより、不要な電気的ストレスの印加動作を回避できる。
【０１６５】
発明の実施の形態３．
次に、本発明の実施の形態３にかかる不揮発性半導体記憶装置について説明する。本実施形態では、次アドレス計算部８以外の構成については、実施の形態２と同様とし、説明を省略する。
【０１６６】
実施の形態２の場合、比較的段数の多い比較演算処理が必要となる。例えば、内部アドレスが２ビットの場合、次実行アドレス計算部８１とラストアドレス計算部８２は、図１３と図１４のような回路となるが、内部アドレスのビット数が増えるに従い、さらに複雑な回路構成となる。このため、回路動作スペックによっては、演算処理が間に合わない場合がありうる。
【０１６７】
そこで、本実施形態では、次アドレス計算部８に対し、図１１の次実行アドレス計算部８１のフローチャート、および、図１２のラストアドレス計算部８２のフローチャートの処理内容を、複数段に分割し、最終的に選択回路を設け、必要な演算結果を選択出力する回路構成とする。
【０１６８】
例として、２段に分割した場合のブロック図を、図１６に示す。次実行アドレス計算部８１において、処理内容を第１の次実行アドレス計算部８１１と第２の次実行アドレス計算部８１２の２つに分割する。例えば、図１１のフローチャートにおいて、書き込みフラグＦＬＡＧ［０］〜ＦＬＡＧ［１５］の計算処理を、第１の次実行アドレス計算部８１１にて行い、ＦＬＡＧ［１６］〜ＦＬＡＧ［３１］の計算処理を、第２の次実行アドレス計算部８１２にてそれぞれ行う。そして、最終的に選択回路８１３にて、必要な計算結果を選択出力する構成とする。
【０１６９】
同様に、ラストアドレス計算部８２でも、処理内容を第１のラストアドレス計算部８２１と第２のラストアドレス計算部８２２の２つに分割する。図１２のフローチャートにおける、現在の内部アドレスＡＤＤ［４：０］＝（０）ｄ〜（１５）ｄの計算処理を、第１のラストアドレス計算部８２１にて行い、内部アドレスＡＤＤ［４：０］＝（１６）ｄ〜（３１）ｄの計算処理を、第２のラストアドレス計算部８２２にてそれぞれ行う。そして、最終的に選択回路８２３にて、必要な計算結果を選択出力する構成とする。
【０１７０】
このように、本実施形態では、次アドレス計算部の計算処理を複数の回路に分割することにより、さらに書き込み処理の高速化を図ることができる。したがって、バッファ内のアドレス数が増加した場合や、次アドレス計算部の計算処理時間が、回路動作スペックを満足しない場合においても、十分な動作速度を得ることが可能となる。
【０１７１】
その他の発明の実施の形態．
上述の例において、アドレス選択動作は、先頭アドレスから最終アドレスへ昇順に選択するものとして説明したが、これに限らず、降順に選択していくような動作としてもよい。この場合でも、効果についても全く同様の効果を得ることが可能である。例えば、メモリセルアレイの構成の都合により、アドレス選択動作を、降順でなければならない場合においても、その効果を損なうことなく、本発明を適用することができる。
【０１７２】
また、上述の例では、主にメモリセルへのデータの書き込みについて説明したが、これに限らず、データの消去においても本発明を適用することができる。データの消去の場合、消去前書き込み処理、消去処理、書き戻し処理、これらすべての読み出し処理において、上述のアドレス選択が行われ、同様に、消去処理の時間を短縮することができる。
【０１７３】
このほか、本発明の要旨を逸脱しない範囲で種々の変形、実施が可能である。
【図面の簡単な説明】
【０１７４】
【図１】本発明にかかる不揮発性半導体記憶装置の構成を示すブロック図である。
【図２】本発明にかかる不揮発性半導体記憶装置の書き込み動作の流れを説明するための説明図である。
【図３】本発明にかかる不揮発性半導体記憶装置の書き込み動作を示すフローチャートである。
【図４】本発明にかかる不揮発性半導体記憶装置において用いられる書き込みフラグの例を示す図である。
【図５】本発明にかかる不揮発性半導体記憶装置の書き込み動作を示すフローチャートである。
【図６】本発明にかかる不揮発性半導体記憶装置の構成を示すブロック図である。
【図７】本発明にかかる不揮発性半導体記憶装置の書き込み動作を示すフローチャートである。
【図８】本発明にかかる不揮発性半導体記憶装置の書き込み動作を示すフローチャートである。
【図９】本発明にかかる不揮発性半導体記憶装置の次アドレス計算部の構成を示すブロック図である。
【図１０】本発明にかかる不揮発性半導体記憶装置のアドレス選択動作を示すフローチャートである。
【図１１】本発明にかかる不揮発性半導体記憶装置の次アドレス計算動作を示すフローチャートである。
【図１２】本発明にかかる不揮発性半導体記憶装置のラストアドレス計算動作を示すフローチャートである。
【図１３】本発明にかかる不揮発性半導体記憶装置の次実行アドレス計算部の構成を示す回路図である。
【図１４】本発明にかかる不揮発性半導体記憶装置のラストアドレス計算部の構成を示す回路図である。
【図１５】本発明の実施の形態１及び２の書き込み処理時間の計算例を示すグラフである。
【図１６】本発明にかかる不揮発性半導体記憶装置の次アドレス計算部の構成を示すブロック図である。
【図１７】一般的な二値のフラッシュメモリにおける、メモリセルの閾値の変化を示すグラフである。
【図１８】一般的な多値のフラッシュメモリにおける、メモリセルの閾値の変化を示すグラフである。
【図１９】従来の不揮発性半導体記憶装置の構成を示すブロック図である。
【図２０】従来の不揮発性半導体記憶装置の書き込み動作を示すフローチャートである。
【図２１】従来の不揮発性半導体記憶装置の書き込み動作の流れを説明するための説明図である。
【符号の説明】
【０１７５】
１  バッファ
２  内部アドレスカウンタ
３  フラグ情報格納部
４  シーケンス制御部
５  読み出し回路
６  書き込み回路
７  メモリセルアレイ
８  次アドレス計算部
９  比較回路
１０  内部アドレス格納部
８１  次実行アドレス計算部
８２  ラストアドレス計算部
【図１】
2006309829.tif 000007
【図２】
2006309829.tif 000008
【図３】
2006309829.tif 000009
【図４】
2006309829.tif 000010
【図５】
2006309829.tif 000011
【図６】
2006309829.tif 000012
【図７】
2006309829.tif 000013
【図８】
2006309829.tif 000014
【図９】
2006309829.tif 000015
【図１０】
2006309829.tif 000016
【図１１】
2006309829.tif 000017
【図１２】
2006309829.tif 000018
【図１３】
2006309829.tif 000019
【図１４】
2006309829.tif 000020
【図１５】
2006309829.tif 000021
【図１６】
2006309829.tif 000022
【図１７】
2006309829.tif 000023
【図１８】
2006309829.tif 000024
【図１９】
2006309829.tif 000025
【図２０】
2006309829.tif 000026
【図２１】
2006309829.tif 000027