(57)【要約】【課題】プログラム動作時にプログラム動作時間を短縮させることが可能なビットカウンタと、これを用いた半導体素子のプログラム回路及びプログラム方法を提供すること。【解決手段】入力されるプログラムデータと対応し、前記プログラムデータのうちプログラムデータによってのみ同期され、互いに異なるクロック信号を発生するための多数のクロック発生部と、前記クロック発生部から出力される前記クロック信号によって同期され、同期時に入力データを順次シフトさせ、前記プログラムデータのうちプログラムするプログラムデータのビット数をカウントするカウンタを含む。【選択図】　　　　図１
2004055107.tif 000002
【特許請求の範囲】
【請求項１】
入力されるプログラムデータと対応し、前記プログラムデータのうちプログラムデータによってのみ同期され、互いに異なるクロック信号を発生するための複数のクロック発生部と、
前記クロック発生部からの前記クロック信号に応じて同期され、同期時に入力データを順次シフトさせ、前記プログラムデータのうちプログラムするプログラムデータのビット数をカウントするカウンタを含むことを特徴とするビットカウンタ。
【請求項２】
前記クロック信号が互いに重畳しないように、前記プログラムデータと対応し、前記プログラムデータが、それぞれ異なる大きさで遅延して前記クロック発生部に入力されるようにする複数の遅延部をさらに含むことを特徴とする請求項１記載のビットカウンタ。
【請求項３】
前記クロック信号の周期は、約１０ｎｓであることを特徴とする請求項１記載のビットカウンタ。
【請求項４】
前記クロック発生部から出力される前記クロック信号を論理組合せして、前記カウンタを同期させるための同期出力信号を出力する論理組合せ部をさらに含むことを特徴とする請求項１記載のビットカウンタ。
【請求項５】
前記論理組合せ部は、前記クロック信号のいずれか一つがハイ状態で入力されると、ハイ状態のクロックパルスを出力することを特徴とする請求項４記載のビットカウンタ。
【請求項６】
前記カウンタは、前記クロック信号によって同期される複数のＤ−フリップフロップを含むことを特徴とする請求項１記載のビットカウンタ。
【請求項７】
前記カウンタは、前記クロック信号によって同期され、互いに直列に接続される８個のＤ−フリップフロップを含むことを特徴とする請求項１記載のビットカウンタ。
【請求項８】
プログラムデータを伝送するＩ／Ｏ端子と、
前記Ｉ／Ｏ端子から伝送されたプログラムデータのうちプログラムする前記プログラムデータのビット数をカウントする請求項１のビットカウンタと、
前記ビットカウンタによってカウントされた前記ビット数に応じて、プログラム動作をワード単位またはバイト単位で選択的に行うステートマシーンとを含むプログラム回路。
【請求項９】
前記ビット数が少なくとも９個以上の場合、前記ステートマシーンは、前記プログラム動作をバイト単位で分けて二度にわたって行うことを特徴とする請求項８記載のプログラム回路。
【請求項１０】
前記ビット数が８個以下の場合、前記ステートマシーンは、前記プログラム動作を一度に行うことを特徴とする請求項８記載のプログラム回路。
【請求項１１】
請求項８のプログラム回路を用いたプログラム方法において、
（ａ）プログラム動作を行うために、プログラムデータ及びアドレスをセットアップし、プログラムコマンドを入力する段階と、
（ｂ）前記プログラム動作を行うために、プログラム電圧をポンプするポンピング区間内に前記プログラムデータのうちプログラムするプログラムデータのビット数をカウントする段階と、
（ｃ）前記（ｂ）段階でカウントされたビット数に応じて、前記プログラム動作をワード単位またはバイト単位で選択的に行う段階とを含むプログラム方法。
【請求項１２】
前記（ｃ）段階で、前記プログラム動作は、前記ビット数が９個以上の場合に、前記バイト単位で二度に分けて行うことを特徴とする請求項１１記載のプログラム方法。
【請求項１３】
前記（ｃ）段階で、前記プログラム動作は、前記ビット数が８個以下の場合に、一度に行うことを特徴とする請求項１１記載のプログラム方法。
【請求項１４】
前記（ｃ）段階以後、プログラム検証段階を行う段階をさらに含むことを特徴とする請求項１１記載のプログラム方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ビットカウンタとこれを用いた半導体素子のプログラム回路及びプログラム方法に係り、特に、プログラム動作時にプログラム動作時間を短縮させることが可能なビットカウンタと、これを用いたＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ　Ｅｒａｓａｂｌｅ　ａｎｄ　Ｐｒｏｇｒａｍｍａｂｌｅ　Ｒｅａｄ　Ｏｎｌｙ　Ｍｅｍｏｒｙ）系列を含む不揮発性メモリ素子のプログラム回路及びプログラム方法に関する。
【０００２】
【従来の技術】
不揮発性メモリ素子の一種であるＥＥＰＲＯＭのメモリセルでは、フローティングゲート電極（Ｆｌｏａｔｉｎｇ　ｇａｔｅ　ｅｌｅｃｔｒｏｄｅ）に電子を蓄積してプログラムを行い、電子の存在有無によるしきい値電圧Ｖｔｈの変化を検出してデータの読み出しを行っている。ＥＥＰＲＯＭとしては、メモリセルアレイ全体でデータの消去を行うか、或いはメモリセルアレイを任意のブロックに分けて各ブロック単位でデータ消去動作を行うフラッシュＥＥＰＲＯＭ（以下、「フラッシュメモリ素子」という）などがある。
【０００３】
一般に、フラッシュメモリ素子のメモリセルは、その構造によってスタックゲート型（ｓｔａｃｋ　ｇａｔｅ　ｔｙｐｅ）及びスプリットゲート型（ｓｐｌｉｔ　ｇａｔｅ　ｔｙｐｅ）が提案されている。スタックゲート型メモリセルのプログラム動作は、プログラム段階と、プログラム検証段階に大別される。各段階におけるバイアスは一例として表１の通りである。
【０００４】
【表１】
2004055107.tif 000003
【０００５】
通常、プログラム動作は、フラッシュメモリ素子のメモリセルのしきい値電圧を目標値のしきい値電圧に上昇させる動作であって、プログラム段階とは、ホットキャリアの注入によってフローティングゲート電極内に電子を注入して該当メモリセルのしきい値電圧を上昇させる段階をいい、プログラム検証段階とは、プログラム段階の進行時、目標時のしきい値電圧までの変化量を感知して適正の水準でプログラム動作を停止させる段階をいう。
【０００６】
次に、前記表１に基づいて、図６及び図７を参照してフラッシュメモリ素子のメモリセルのプログラム動作を説明する。ここで、図６はプログラム段階を説明するために示した断面図である。図７はプログラム検証段階を説明するために示した断面図である。一方、図６及び図７に示したスタック構造のゲート電極は、ゲート酸化膜６０８、フローティングゲート電極６１０、誘電体膜６１２及びコントロールゲート電極６１４を含み、半導体基板６０２はＰウェル、ソース６０４及びドレイン６０６を含む。
【０００７】
図６を参照すると、プログラム動作中、プログラム段階では、表１に示すように、コントロールゲート電極６１４には「９Ｖ」のゲート電圧を印加し、ドレイン６０６には「４Ｖ」のドレイン電圧を印加し、ソース６０４及びＰウェルには「０Ｖ」（ｇｒｏｕｎｄ；ＧＤ）を印加する。これにより、矢印方向の如く、ソース６０４からドレイン６０６及びプローティングゲート電極６１０にホットキャリアが移動し、これによりプローティングゲート電極６１０内に電子が注入されてメモリセルのしきい値電圧が上昇する。
【０００８】
図７を参照すると、図６において、プログラム段階によって、フローティングゲート電極６１０内に電子が注入される状態で、実時間にてメモリセルのしきい値電圧を感知し、しきい値電圧が目標値に到達すると、メインセル（ＭＣ）のコントロールゲート電極６１４には「６Ｖ」のゲート電圧を印加し、ドレインには「１Ｖ」のドレイン電圧を印加し、参照セル（ｒｅｆｅｒｅｎｃｅ　ｃｅｌｌ；ＲＣ）のコントロールゲート電極６１４には「３Ｖ」のゲート電圧を印加し、ドレインには「１Ｖ」のドレイン電圧を印加してプログラム検証段階を行う。この際、プログラム検証段階はメインセルＭＣとセンスアンプ（ｓｅｎｓｅ　ａｍｐｌｉｆｉｅｒ）に接続される参照セルＲＣのバイアス条件によって変化することができる。
【０００９】
このような全体プログラム動作は、全体メモリセルに対して全て行うために繰り返し行われるが、これを一例として図８のフローチャートに基づいて説明すると、次の通りである。例えば、全体メモリセルをワード単位（即ち、１６ビット）でプログラム動作を行う。この場合には、優先的に、ワード単位に含まれる全ての該当メモリセルに対してプログラム段階とプログラム検証段階を行う（Ｓ８１０及びＳ８２０）。その後、ワード単位に含まれた該当メモリセルのうち、プログラム段階及びプログラム検証段階でフェールメモリセルが存在するかを検査する（Ｓ８３０）。もし段階「Ｓ８３０」でフェールセルが存在する場合には、フェールセルに限ってプログラム段階とプログラム検証段階を行う（Ｓ８４０及びＳ８５０）。このような動作は該当メモリセルが全てパスされるまで繰り返し行われる。
【００１０】
一般に、ワード単位でプログラム動作を行う場合にはドレインからソースへ流れるプログラム電流が非常に大きいから、ドレインポンプの動作電流を減らし且つプログラム効率を増加させるために、内部的にバイト（ｂｙｔｅ）単位でプログラム動作を行う。すなわち、ワード単位プログラム動作の際、まずＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）＜７：０＞（即ち、８ビット）に対してプログラム段階を行い、次いでＩ／Ｏ＜１５：８＞（即ち、８ビット）に対してプログラム段階を行う。その後、Ｉ／Ｏ＜１５：０＞（即ち、１６ビット）に対して一度にプログラム検証段階を行い、フェール（ｆａｉｌ）が発生する場合、前記動作を繰り返し行い、パス（ｐａｓｓ）されると、プログラム動作を終了する。
【００１１】
ところが、図９に示した全体メモリセルの分布図（フラッシュメモリ素子のライン別メモリセルの分布図）に示すように、プログラム動作時には、「Ａ」部位（セルのしきい値電圧が４．５Ｖである地点）において、限界値（ｍａｒｇｉｎａｌ）セル（即ち、パス基準のカットライン（ｃｕｔ　ｌｉｎｅ）に該当するセル）が存在するが、このような状態でプログラム検証段階を行う場合、バイアスのマージンによって限界値セルがパス、改めてフェールと判明される場合が発生する。
【００１２】
上述したように、フェールが発生してプログラム動作が繰り返し行われる場合には、１６個のセルの中にパスされたビットがあるとしても、常時８ビットずつ二度にわたってプログラムパルスが印加される。すなわち、プログラムタイムが５μｓであるとすれば、常時「５×２＝１０μｓ」がフェールされる毎に反復されてプログラムタイムが整数倍で増加する。これは、プログラム動作時にバイアスを供給するポンピング回路の負担を誘発するだけでなく、全体プログラム動作時間を増加させる原因になる。また、予めプログラムされたセルに反復的にバイアスが印加されて過度プログラム（ｏｖｅｒ　ｐｒｏｇｒａｍ）が発生し、データの保存能力（ｒｅｔｅｎｔｉｏｎ）を低下させる問題をもたらす。
【００１３】
【発明が解決しようとする課題】
したがって、本発明は、かかる従来の技術の問題点を解決するために創案されたもので、その目的は、プログラム動作時にプログラム動作時間を短縮させることが可能なビットカウンタを提供することにある。
【００１４】
また、本発明の他の目的は、前記ビットカウンタを用いた半導体素子のプログラム回路を提供することにある。
【００１５】
また、本発明のさらに他の目的は、前記ビットカウンタを用いた半導体素子のプログラム方法を提供することにある。
【００１６】
【課題を解決するための手段】
上記目的を達成するために、本発明は、入力されるプログラムデータと対応し、前記プログラムデータのうちプログラムデータによってのみ同期され、互いに異なるクロック信号を発生するための多数のクロック発生部と、前記クロック発生部から出力される前記クロック信号によって同期され、同期時に入力データを順次シフトさせ、前記プログラムデータのうちプログラムするプログラムデータのビット数をカウントするカウンタを含むビットカウンタを提供する。
【００１７】
また、本発明は、プログラムデータを伝送するＩ／Ｏ端子と、前記Ｉ／Ｏ端子から伝送されたプログラムデータのうちプログラムする前記プログラムデータのビット数をカウントする前記ビットカウンタと、前記ビットカウンタによってカウントされた前記ビット数に応じて、プログラム動作をワード単位またはバイト単位で選択的に行うステートマシーンとを含むプログラム回路を提供する。
【００１８】
また、本発明では、前記プログラム回路を用いたプログラム方法において、プログラム動作を行うために、プログラムデータ及びアドレスをセットアップし、プログラムコマンドを入力する段階と、前記プログラム動作を行うために、プログラム電圧をポンプするポンピング区間内に前記プログラムデータのうちプログラムするプログラムデータのビット数をカウントする段階と、前記前段階でカウントされたビット数に応じて、前記プログラム動作をワード単位またはバイト単位で選択的に行う段階とを含むプログラム方法を提供する。
【００１９】
【発明の実施の形態】
以下、添付図に基づいて本発明の好適な実施例を説明する。ところが、本発明は、下記の実施例に限定されるものではなく、様々に変形実現することができる。これらの実施例は本発明の開示を完全にし、当技術分野で通常の知識を有する者に本発明の範疇を完全に知らせるために提供されるものである。一方、添付図において、同一の符号は同一の要素を指し、重複した要素はその説明を省略する。
【００２０】
図１は本発明の好適な実施例に係るビットカウンタ（ｂｉｔ　ｃｏｕｎｔｅｒ　ｃｉｒｃｕｉｔ）を説明するためのブロック図であり、図２は図１に示したビットカウンタの詳細回路図である。
【００２１】
図１及び図２を参照すると、本発明の好適な実施例に係るビットカウンタは、遅延部（ｄｅｌａｙ　ｕｎｉｔ）１１０、クロック発生部（ｃｌｏｃｋ　ｇｅｎｅｒａｔｏｒ　ｕｎｉｔ）１２０、論理組合せ部（ｌｏｇｉｃ　ｃｏｍｂｉｎａｔｉｏｎ　ｕｎｉｔ）１３０、及びカウンタ（ｃｏｕｎｔｅｒ）１４０を含む。一方、下記に説明するプログラムデータ信号Ｄ０〜Ｄ１５＜１５：０＞はＩ／Ｏ端子（図示せず）から伝送される。一般に、プログラムデータ信号の状態がロー状態（ｌｏｗｓｔａｔｅ；「０」）の場合にはプログラムし、ハイ状態（ｈｉｇｈ　ｓｔａｔｅ；「１」）の場合にはプログラムしなくてもよい。
【００２２】
前記遅延部１１０は、入力されるプログラムデータ信号Ｄ１〜Ｄ１５と一対一対応するように多数の遅延部１１０ａ〜１１０ｏ、例えば１５個の遅延部１１０ａ〜１１０ｏを含む。これは、プログラムデータ信号Ｄ０は遅延させる必要がないので、プログラムデータ信号Ｄ１から遅延させるためである。各遅延部１１０ａ〜１１０ｏは、Ｉ／Ｏ端子から伝送されるプログラムデータ信号Ｄ１〜Ｄ１５をそれぞれ入力とし、約「１」クロックずつ遅延させて出力する。これは、クロック発生部１２０に含まれた多数（例えば、１６個）のクロック発生部１２０ａ〜１２０ｐからの各クロック信号ＣＬＫ０〜ＣＬＫ１５が互いに重畳しないようにするためである。このために、遅延部１１０ａ〜１１０ｏは整数倍ずつ遅延した各遅延信号ＤＥＬＡＹ１〜ＤＥＬＡＹ１５を出力する。例えば、遅延部１１０ａ〜１１０ｏの各遅延信号ＤＥＬＡＹ１〜ＤＥＬＡＹ１５のクロックは表２の通りである。
【００２３】
【表２】
2004055107.tif 000004
【００２４】
前記クロック発生部１２０は、プログラムデータ信号Ｄ０〜Ｄ１５と一対一対応するように多数のクロック発生部１２０ａ〜１２０ｐを含む。クロック発生部１２０ａ〜１２０ｐのうち、一番目のクロック発生部１２０ａはプログラムデータ信号Ｄ０によって同期され、これ以外のクロック発生部１２０ｂ〜１２０ｐは各遅延部１１０ａ〜１１０ｏから出力される遅延信号ＤＥＬＡＹ１〜ＤＥＬＡＹ１５によって同期される。各クロック発生部１２０ａ〜１２０ｐは約「１０ｎｓ」の周期を有するクロックを生成させ、プログラムデータ信号がロー状態の場合にのみ同期されてクロックを生成する。例えば、プログラムデータ信号Ｄ０〜Ｄ１５の値が「００００」（即ち、００００、００００、００００、００００、００００）の場合に各クロック信号（ＣＬＫ０〜ＣＬＫ１５）は図５の通りである。一方、図５には各クロック信号ＣＬＫ０〜ＣＬＫ１５は前クロック信号（例えば、ＣＬＫ０）の立ち下がりエッジに同期されて発生するように示されているが、実際には後続の論理組合せ部１３０での論理和のために、後続のクロック信号（例えば、ＣＬＫ１）は前クロック信号の立ち下がりエッジに同期されず、一定の時間後に後続のクロック信号が発生する。
【００２５】
前記論理組合せ部１３０は、ＯＲゲートからなり、各クロック発生部１２０ａ〜１２０ｐから出力される各クロック信号ＣＬＫ０〜ＣＬＫ１５を論理和し、カウンタ１４０を構成する各Ｄ−フリップフロップ（Ｄ−Ｆｌｉｐ／Ｆｌｏｐｓ；　Ｄ−ＦＦ）Ｄ−ＦＦ０〜Ｄ−ＦＦ７を同期させるための同期クロック信号ＧＣＬＫを出力する。ここで、論理組合せ部１３０はＯＲゲートのみからなっているが、これは一例に過ぎず、クロック信号ＣＬＫ０〜ＣＬＫ１５のいずれか一つのクロック信号がハイ状態で出力される場合、同期クロック信号ＧＣＬＫを生成し得るように論理組合せを行うことが可能なＡＮＤゲート、ＮＯＲゲート、ＮＡＮＤゲート及びインバータの組み合わせで構成することもできる。
【００２６】
前記カウンタ１４０（以下、「プログラム動作制御部」という）は論理組合せ部１３０から出力される同期クロック信号ＧＣＬＫによって同期され、シフタレジスタとして機能する多数のＤ−フリップフロップＤ−ＦＦ０〜Ｄ−ＦＦ７（例えば、互いに直列に接続される８個のＤ−フリップフロップ）を含む。これは、一般にプログラム動作を１６ビットにする場合、１６ビットを８ビットずつハイバイト（Ｈ−ｂｙｔｅ）とローバイトＬ−Ｂｙｔｅに分離してプログラム動作を行うからである。プログラム動作制御部１４０は、同期クロック信号ＧＣＬＫが発生する毎に、電源端子Ｖｃｃから「Ｄ」端子に入力されるデータ（即ち、「１」）を順次移動（シフト）させる。これは表３の通りである。
【００２７】
【表３】
2004055107.tif 000005
【００２８】
前記表３を参照すると、同期クロック信号ＧＣＬＫは、クロック発生部１２０ａ〜１２０ｐから出力される各クロック信号ＣＬＫ０〜ＣＬＫ１５のいずれか一つがハイ状態（すなわち、パルスが発生する場合）の場合に発生する。これにより、各クロック信号ＣＬＫ０〜ＣＬＫ１５のいずれか一つがハイ状態の場合にはハイ状態の同期クロック信号ＧＣＬＫが発生し、各Ｄ−フリップフロップＤ−ＦＦ０〜Ｄ−ＦＦ７に入力される。これにより、各Ｄ−フリップフロップＤ−ＦＦ０〜Ｄ−ＦＦ７は同期クロック信号ＧＣＬＫがハイ状態で発生する毎に同期され、順次「Ｄ」端子に入力されるデータ（即ち、「１」）を「Ｄ−ＦＦ０」から「Ｄ−ＦＦ７」に移動させて出力する。
【００２９】
もし表３の如くプログラム動作制御部１４０のＤ−フリップフロップＤ−ＦＦ７の出力信号（Ｑ７：オーバーフロー）がハイ状態で出力される場合（即ち、オーバーフローが発生する場合）は、プログラムデータ信号Ｄ０〜Ｄ１５のうちロー状態（即ち、プログラム動作遂行）のデータが８個以上存在することを意味する。この場合には、一般的な方法と同様にプログラム動作をハイバイトとローバイトに分離してそれぞれ実施する。ところが、プログラム動作制御部１４０のＤ−フリップフロップＤ−ＦＦ７の出力信号Ｑ７（オーバーフロー）がロー状態で出力される場合（即ち、オーバーフローが発生しない場合）は、プログラムデータ信号Ｄ０〜Ｄ１５のうちロー状態のプログラムデータ信号が８個未満存在することを意味する。この場合には、プログラム動作をハイバイトとローバイトに分離せず、プログラムすべきビットのみを一度に実施する。
【００３０】
次に、上述したビットカウンタの動作特性を図３に基づいて具体的に説明する。図３は図２に示したビットカウンタの動作波形図であって、一例としてプログラムデータ信号Ｄ０〜Ｄ１５が「Ｆ８４４」（すなわち、１１１１、１０００、０１００、０１００）の時の波形図である。図４は図２に示したビットカウンタを用いたプログラム方法を説明するためのフローチャートである。
【００３１】
図３及び図４を参照すると、まず初期読み出し状態でプログラム動作を行うために、プログラムデータ及びアドレスをセットアップし（Ｓ４１０）、プログラムイネーブルバー信号ＷＥｂとデータキュー（ｄａｔａ　ｑｕｅｕｅ；ＤＱ）を使用してプログラムコマンドを入力する（Ｓ４２０）。一般に、プログラム動作を行うための内部ステートマシーン（ｓｔａｔｅ　ｍａｃｈｉｎｅ）（図示せず）はプログラムイネーブルバー信号ＷＥｂがハイ状態に遷移する瞬間に同期される。このプログラム回路のステートマシーンはビットカウンタによってカウントされたビット数に応じてプログラム動作をワード単位またはバイト単位で選択的に行う。
【００３２】
一方、図２に示した本発明のビットカウンタは、セルのゲート電圧とドレイン電圧を生成するためのプログラム電圧をポンプするポンピング区間（すなわち、ポンピング回路の動作区間）で動作する。たとえば、プログラム動作時、セルのゲート電圧（ＰＱＰ波形参照）は通常「９Ｖ」が必要である。これにより、目標値のゲート電圧を得るためには、不可避にポンピング区間が必要である。したがって、本発明では、このポンピング区間（一般に、他の回路（図示せず）は動作しない）にビットカウンタを動作させて、プログラムするビット（数）をカウントする（Ｓ４３０）。
【００３３】
段階「Ｓ４３０」では、プログラムデータ信号Ｄ０〜Ｄ１５が遅延部（図１の「１１０」参照）に入力されると、遅延部１１０はこのプログラムデータ信号Ｄ１〜Ｄ１５を表２の如く「１」クロックずつ遅延させ、クロック発生部（図１の「１２０」参照）へ出力する。クロック発生部１２０はプログラムデータ信号Ｄ０〜Ｄ１５によって順次同期されて各クロック信号ＣＬＫ０〜ＣＬＫ１５を出力する。この際、クロック発生部１２０から出力される各クロック信号ＣＬＫ０〜ＣＬＫ１５のうち、クロック信号ＣＬＫ０〜ＣＬＫ１、ＣＬＫ３〜ＣＬＫ５、ＣＬＫ７〜ＣＬＫ１０のみパルスが発生する。これは、プログラムデータ信号がロー状態で入力される場合にのみクロック発生部１２０を介してパルスが発生するからである。その後、クロック発生部１２０から出力されるクロック信号ＣＬＫ０〜ＣＬＫ１５は論理組合せ部１３０に入力される。論理組合せ部１３０はこのクロック信号ＣＬＫ０〜ＣＬＫ１５を論理和（論理組合せ）して同期出力信号である同期クロック信号ＧＣＬＫを出力する。論理組合せ部１３０はクロック信号のいずれか一つがハイ状態で入力されると、ハイ状態のクロックパルスを出力する。同期クロックＧＣＬＫは「９個」（すなわち、００００、０１１１、１０１１、１０１１）のハイパルスが出力される。これにより、プログラム動作制御部（図１の「１４０」参照）のＤ−フリップフロップＤ−ＦＦ７はハイ状態のオーバーフローを出力する。
【００３４】
段階「Ｓ４３０」でプログラム動作制御部１４０のＤ−フリップフロップＤ−ＦＦ７からオーバーフローが発生する場合は（Ｓ４４０）、プログラムデータ信号Ｄ０〜Ｄ１５のうちプログラム動作を行うデータが「８個」以上存在することを意味し、この場合には、プログラム動作をローバイトＬ−Ｂｙｔｅ（Ｐｒｏｇｒａｍ−１）とハイバイトＨ−Ｂｙｔｅ（Ｐｒｏｇｒａｍ−２）に分離して行う（Ｓ４５０及びＳ４６０）。ところが、段階「Ｓ４３０」でプログラム動作制御部１４０のＤ−フリップフロップＤ−ＦＦ７からオーバーフローが発生していない場合は（Ｓ４４０）、プログラムデータ信号Ｄ０〜Ｄ１５のうちプログラム動作を行うデータが「８個」未満存在することを意味し、この場合には、プログラム動作を一度だけ行う（Ｓ４７０）。
【００３５】
以後、該当セルに対するプログラム動作が行われた後、このセルに対してプログラム検証段階を行ってフェールが発生する場合、前記段階「Ｓ４３０」を移動してプログラム動作を繰り返し行い、パスされると、プログラム動作を完了する（Ｓ４８０及びＳ４９０）。
【００３６】
上述したように、本発明では、ビットカウンタを用いて、ポンピング区間内に、プログラムデータ信号のうちプログラムしようとするデータ信号のみをカウントする。すなわち、クロック発生部（図１の「１２０」参照）から出力されるクロック信号（ＣＬＫ０〜ＣＬＫ１５）は「１０ｎｓ」の周期を有し、全てのＩ／Ｏ端子から伝送されるプログラムデータ信号が「００００Ｈ」（ｈｅｘａｄｅｃｉａｍｌ）になっても全体周期は「１０ｎｓ×１６＝１６０ｎｓ」程度になる。これにより、ポンピング区間は「１μｓ」程度なので、ポンピング区間内にプログラムデータ信号のビットカウント動作は予め完了することができる。
【００３７】
また、上述したように、プログラムデータ信号Ｄ０〜Ｄ１５が「Ｆ８４４」（すなわち、１１１１、１０００、０１００、０１００）の場合には、プログラムするデータ信号の「０」が「９個」存在する。このため、「１６０ｎｓ」全体周期の間、同期クロック信号ＧＣＬＫは「９個」が発生する。これにより、Ｄ−フリップフロップＤ−ＦＦ０〜Ｄ−ＦＦ７は同期クロック信号ＧＣＬＫによって順次「９回」移動し、同期クロック信号ＧＣＬＫの「８番目」クロックでオーバーフローがラッチされる。したがって、プログラムするデータ信号のビット数が
「１６個」のうち「８個」以上なので、「８個」をプログラムするために設計された一般的なドレイン電圧発生用ポンプ回路（図示せず）は一度にプログラム動作を行うことが不可能である。これにより、プログラム動作は二度に分けて行われなければならない。すなわち、オーバーフローが発生すると、プログラム動作は二度に分けて行われる。ビット数が少なくとも９個以上の場合、ステートマシーンはプログラム動作をバイト単位で分けて二度にわたって行う。一方、プログラムするデータ信号が「８個」を超えない（８個以下）の場合には、ポンピング区間でオーバーフローが発生しないため、十分ドレイン電圧発生用ポンピング回路を用いて同時に全てのビットに対してプログラム動作を行うことが可能である。したがって、プログラムデータ信号の個数が「８個」未満の場合には、（ステートマシーンは）プログラム動作を二度に分けて行わず一度に行うことにより、全体プログラム動作時間を短縮させることができる。また、カウントされたビット数に応じてプログラム動作をワード単位またはバイト単位で選択的に行った後、プログラム検証を行い、その検証後にフェールされてプログラム動作が再び行われる場合にもプログラム動作時間を短縮させることができる。
【００３８】
上述した本発明の技術的思想は好適な実施例で具体的に記述されたが、これらの実施例は本発明を説明するためのもので、制限するものではないことを注意しなければならない。また、当技術分野で通常の知識を有する者であれば、本発明は本発明の技術的思想の範囲内で様々な実施例が可能であることを理解できよう。
【００３９】
【発明の効果】
以上述べたように、本発明では、プログラム動作時、ビットカウンタを用いて、ポンピング区間内にプログラムデータのうちプログラムするデータのみをカウントした後、プログラムデータが８個未満の場合にはプログラム動作を一度にワード単位で行うことにより、プログラム動作時間を短縮させることができる。
【図面の簡単な説明】
【図１】本発明の好適な実施例に係るビットカウンタのブロック図である。
【図２】図１に示したビットカウンタの詳細回路図である。
【図３】図１に示したビットカウンタの動作波形図である。
【図４】図１に示したビットカウンタを用いた半導体素子のプログラム方法を説明するための流れ図である。
【図５】図１に示したクロック発生部のクロック信号の波形図である。
【図６】一般的なフラッシュメモリ素子のプログラム段階を説明するために示したメモリセルの断面図である。
【図７】一般的なフラッシュメモリ素子のプログラム検証段階を説明するために示したメモリセルの断面図である。
【図８】一般的なフラッシュメモリ素子の全体プログラム動作を説明するために示した流れ図である。
【図９】一般的なフラッシュメモリ素子のラインベルメモリセルの分布図である。
【符号の説明】
１１０　　遅延部
１２０　　クロック発生部
１３０　　論理組合せ部
１４０　　プログラム動作制御部（カウンタ）
【図１】
2004055107.tif 000006
【図２】
2004055107.tif 000007
【図３】
2004055107.tif 000008
【図４】
2004055107.tif 000009
【図５】
2004055107.tif 000010
【図６】
2004055107.tif 000011
【図７】
2004055107.tif 000012
【図８】
2004055107.tif 000013
【図９】
2004055107.tif 000014