【実施例】
【0019】
本発明の実施例に係るフラッシュメモリの典型的な構成を
図3に示す。但し、ここに示すフラッシュメモリの構成は例示であり、本発明は、必ずしもこのような構成に限定されるものではない。本実施例のフラッシュメモリ100は、複数のメモリセルが行列状に配列されたメモリアレイ110と、外部入出力端子I/Oに接続され入出力データを保持する入出力バッファ120と、メモリアレイ110にプログラムするデータやそこから読み出されたデータの誤り検出・訂正を行うECC回路130と、入出力バッファ120からのアドレスデータを受け取るアドレスレジスタ140と、入出力バッファ120からのコマンドデータや外部からの制御信号を受け取り、各部を制御する制御部150と、アドレスレジスタ140から行アドレス情報Axを受け取り、行アドレス情報Axをデコードし、デコード結果に基づきブロックの選択およびワード線の選択等を行うワード線選択回路160と、ワード線選択回路160によって選択されたページから読み出されたデータを保持したり、選択されたページへの書込みデータを保持するページバッファ/センス回路170と、アドレスレジスタ140から列アドレス情報Ayを受け取り、列アドレス情報Ayをデコードし、当該デコード結果に基づきページバッファ/センス回路170内のデータの選択等を行う列選択回路180と、データの読出し、プログラムおよび消去等のために必要な種々の電圧(書込み電圧Vpgm、パス電圧Vpass、読出しパス電圧Vread、消去電圧Versなど)を生成する内部電圧発生回路190とを含んで構成される。
【0020】
メモリアレイ110は、列方向に配置されたm個のメモリブロックBLK(0)、BLK(1)、・・・、BLK(m-1)を有する。ブロックBLK(0)に近接して、ページバッファ/センス回路170が配置される。このような構成以外にも、ページバッファ/センス回路170は、ブロックの他方の端部、あるいは両側の端部に配置されるものであってもよい。
【0021】
1つのメモリブロックには、
図4に示すように、複数のメモリセルを直列に接続したNANDストリングユニットNUが複数形成され、1つのメモリブロック内にn+1個のストリングユニットNUが行方向に配列されている。セルユニットNUは、直列に接続された複数のメモリセルMCi(i=0、1、・・・、31)と、一方の端部であるメモリセルMC31のドレイン側に接続された選択トランジスタTDと、他方の端部であるメモリセルMC0のソース側に接続された選択トランジスタTSとを含み、選択トランジスタTDのドレインは、対応する1つのビット線GBLに接続され、選択トランジスタTSのソースは、共通のソース線SLに接続される。
【0022】
メモリセルMCiのコントロールゲートは、ワード線WLiに接続され、選択トランジスタTD、TSのゲートは、ワード線WLと並行する選択ゲート線SGD、SGSに接続される。ワード線選択回路160は、行アドレスAxまたは変換されたアドレスに基づきブロックを選択するとき、ブロックの選択ゲート信号SGS、SGDを介して選択トランジスタTD、TSを選択的に駆動する。
図4は、典型的なセルユニットの構成を示しているが、セルユニットは、NANDストリング内に1つまたは複数のダミーセルを包含するものであってもよい。
【0023】
メモリセルは、典型的に、Pウエル内に形成されたN型の拡散領域であるソース/ドレインと、ソース/ドレイン間のチャンネル上に形成されたトンネル酸化膜と、トンネル酸化膜上に形成されたフローティングゲート(電荷蓄積層)と、フローティングゲート上に誘電体膜を介して形成されたコントロールゲートとを含むMOS構造を有する。フローティングゲートに電荷が蓄積されていないとき、つまりデータ「1」が書込まれているとき、しきい値は負状態にあり、メモリセルは、ノーマリオンである。フローティングゲートに電子が蓄積されたとき、つまりデータ「0」が書込まれているとき、しきい値は正にシフトし、メモリセルは、ノーマリオフである。但し、メモリセルは、1ビット(2値データ)を記憶するSLCタイプでもよいし、多ビットを記憶するMLCタイプであってもよい。
【0024】
図5は、フラッシュメモリの各動作時に印加されるバイアス電圧の一例を示したテーブルである。読出し動作では、ビット線に或る正の電圧を印加し、選択されたワード線に或る電圧(例えば0V)を印加し、非選択ワード線にパス電圧Vpass(例えば4.5V)を印加し、選択ゲート線SGD、SGSに正の電圧(例えば4.5V)を印加し、ビット線選択トランジスタTD、ソース線選択トランジスタTSをオンし、共通ソース線に0Vを印加する。プログラム(書込み)動作では、選択されたワード線に高電圧のプログラム電圧Vprog(15〜20V)を印加し、非選択のワード線に中間電位(例えば10V)を印加し、ビット線選択トランジスタTDをオンさせ、ソース線選択トランジスタTSをオフさせ、「0」または「1」のデータに応じた電位をビット線GBLに供給する。消去動作では、ブロック内の選択されたワード線に0Vを印加し、Pウエルに高電圧(例えば20V)を印加し、フローティングゲートの電子を基板に引き抜くことで、ブロック単位でデータを消去する。
【0025】
プログラム動作時に入出力バッファ120を介して入力データDiがページバッファ/センス回路170にロードされると、ECC回路130は、ページバッファ/センス回路170から転送された入力データDiを演算し、入力データDiの誤り検出訂正に必要な誤り訂正符号またはパリティビットを生成する。ECCの演算は、例えば、ハミングコードやリード・ソロモンなどの公知の手法によって行われ、入力されたkビットまたはkバイトの入力データDiをp=k+qに変換する。本明細書では、「q」を、入力データDiの誤り検出訂正に必要な誤り訂正符号またはパリティビットと称する。1つの好ましい例では、ECC回路130は、誤り訂正符号をページバッファ/センス回路170のスペア領域にセットする。こうして、ページバッファ/センス回路170にセットされた入力データDiと誤り訂正符号がメモリアレイ110の選択ページにプログラムされる。
【0026】
読出し動作時にメモリアレイ110の選択ページから読み出されたデータがページバッファ/センス回路170に保持されると、ECC回路130は、ページバッファ/センス回路170から転送された誤り訂正符号に基づき読出しデータの誤りの検出、訂正を行い、誤りが検出された場合には訂正したデータをページバッファ/センス回路170にセットする。そして、ページバッファ/センス回路170の保持されたデータが入出力バッファ120を介して出力される。
【0027】
次に、本発明の第1の実施例に係るプログラム動作を
図6のフローを参照して説明する。制御部150は、入出力バッファ120を介してプログラムコマンドを受け取ると、プログラムのためのシーケンスを開始する。入出力バッファ120を介して入力データDiがページバッファ/センス回路170にロードされ、次いで、ECC回路130により入力データDiのECC処理が行われる(S100)。
【0028】
図7に、ECC処理の一例を示す。フラッシュメモリ100が×8の外部入出力端子を有するとき、外部入出力端子P0〜P7から各I/Oバッファ120−1〜120−7を介してページバッファ/センス回路170にデータがロードされる。ページバッファ/センス回路170は、例えば、セクタ0〜セクタ7の8つのセクタに分割されたレギュラー領域300と、スペア0、スペア1、スペア2、スペア3の4つのセクタに分割されたスペア領域310とを有する。
【0029】
レギュラー領域300の1つのセクタは、例えば、256バイトから構成され、この場合、レギュラー領域300の8つのセクタは、全体で約2Kバイトのプログラムデータを保持することができる。スペア領域310の1つのセクタは、例えば16バイトから構成され、この場合、4つのセクタ(スペア0〜スペア3)は全体で64バイトのデータを保持することができる。スペア領域310の1つのセクタは、例えば、不良メモリセルを含むバッドブロックを識別する情報を記憶する領域311、ユーザーデータに関する情報を記憶する領域312、レギュラー領域300の2つセクタについての誤り訂正符号(パリティビット)を記憶する領域313、314、スペア領域310がECC演算されたときの誤り訂正符号(パリティビット)を記憶する領域315を有する。スペア領域310のスペア0の領域313、314は、レギュラー領域300のセクタ0、セクタ1の誤り訂正符号(パリティビット)をそれぞれ記憶し、スペア領域310のスペア1の領域313、314は、レギュラー領域300のセクタ2、セクタ3の誤り訂正符号(パリティビット)を記憶する。同様に、スペア領域310のスペア2は、レギュラー領域300のセクタ4、セクタ5のパリティビットを記憶し、スペア領域310のスペア3は、レギュラー領域300のセクタ6、セクタ7のパリティビットを記憶する。
【0030】
レギュラー領域300の1つのセクタには、入出力バッファ120−0〜120−7が割り当てられ、つまり、1つの外部入出力端子には256ビットが割り当てられる(256bit×8=1セクタ)。列選択回路180は、プログラム動作時に受け取った列アドレス情報Ayをデコードし、当該デコード結果に基づき、外部入出力端子P−0〜P7に入力されたデータがロードされるセクタを選択する。
図7は、外部入出力端子P−0〜P−7で受け取られたデータが列アドレス情報Ayに従いセクタ0にロードされる例を示している。
【0031】
ここに示す例では、ECC回路130が誤り訂正符号を書込むための書込み回路を含む。好ましくは、ECC回路130は、レギュラー領域300の1つのセクタと等しいバイト数のデータについてECC演算を行うことができる。レギュラー領域300の1つのセクタが256バイトであれば、ECC回路は、256バイトのデータについてECC演算を行い、4ビットの誤りを訂正する誤り訂正符号を生成する。
【0032】
ECC回路130は、生成された誤り訂正符号をスペア領域310の対応するセクタの領域313または314に書込む。
図7に示す例では、プログラムデータがレギュラー領域300のセクタ0にロードされるので、誤り訂正符号は、スペア0のセクタ0のパリティを記憶する領域313に書込まれる。
【0033】
図8に、スペア領域310のデータのECC処理を例示する。レギュラー領域300の各セクタについてECC処理が終了すると、次に、スペア領域310の各セクタについてECC処理が行われる。スペア領域310の1つセクタ内に含まれるどのデータのECC処理を行うかは任意であるが、本例では、領域312ないし領域314のデータについてECC処理を行うものとする。それ故、スペア0の領域312ないし領域314のデータがECC回路130に転送され、ECC処理によって生成された誤り訂正符号が、ECC回路130によってスペア0の領域315に書込まれる。同様の処理が、他のスペア1ないしスペア3についても行われる。
【0034】
再び
図6を参照し、ECC処理が終了すると(S100)、メモリアレイ110へのプログラムが開始される。ワード線選択回路160によりメモリアレイ110のワード線が選択され、ビット線には、ページバッファ/センス回路170によって保持されたデータに応じた電圧が供給され、選択ページにプログラムパルスが印加される(S110)。次に、プルグラムベリファイが行われ(S120)、データ「0」がプログラムされたメモリセルのしきい値が一定値以上になっているか否かがチェックされる。ベリファイの結果、選択ページの全ビットが合格であれば、プログラムが終了される。一方、全ビットが合格していない場合には、制御部150は、プログラムパルスの印加回数が最適回数Nopに到達したか否かを判定する(S130)。
【0035】
ここで、最適回数Nopとは、プログラムにおいて許容されるプログラムパルスの最大の印加回数または最大のプログラム時間であるNMAXよりも小さい値であり、好ましくは、メモリセルをプログラム不合格と判定する場合に最小限印加されるべきプログラムパルスの回数である。例えば、プログラムに許容される最大時間が700μsであり、1回のプログラムパルスの印加に要する時間が50μsとした場合、NMAX=700μs、またはNMAX=14回である。最適回数Nopは、典型的なメモリセルがプログラム合格されるときのプログラムパルスの印加回数に基づき決定することができる。例えば、統計的な手法によりプログラム合格されるメモリセルに印加されたプログラムパルスの平均回数Navが算出されたとき、最適回数Nopは、Nop=Navに設定することができる。この最適回数Nopは、例えば、外部のコントローラから受信したコマンド等によってよって設定することが可能であり、設定された値は、制御部150のレジスタ等に保持される。
【0036】
制御部150は、プログラムパルスの印加回数が最適回数Nopに到達していない場合には(S140)、ISPPに従い、前回よりもΔVだけ大きなプログラムパルスを選択ページに印加させる(S150)。一方、プログラムパルスの印加回数が最適回数Nopに到達した場合には(S140)、制御部150は、選択ページが疑似合格であるか否かを判定するステップを行う(S160)。疑似合格とされる最大の不合格ビット数Npは、上記したように、ECCによって救済できる最大のビット数Ncc以下であり、ベリファイ時の不合格ビット数、すなわち選択ページに実際に生じている不合格ビット数Nfが疑似合格の最大の不合格ビット数Np以下であれば(Nf≦Np)、疑似合格と判定される(S160)。疑似合格と判定されるとプログラム動作が終了し、選択ページには、「0」不良の不合格ビットがそのまま記憶されたことになる。
【0037】
一方、疑似合格していないと判定されたとき(S160)、制御部150は、プログラムパルスの印加回数がNMAXに到達したか否かを判定し(S170)、到達していなければ、ISPPに従いさらにプログラムパルスが選択ページに印加される(S150、S110)。プログラムパルスの印加回数がNMAXに到達した場合には、プログラム失敗のステータスを外部のコントローラに通知し、当該選択ページを含むブロックがバッドブロックとして管理される。この場合、スペア領域の領域311にバッドブロックである識別情報が記憶される。
【0038】
次に、疑似合格によりプログラムされたページからデータを読出すときの動作を
図9のフローを参照して説明する。先ず、メモリアレイ110のページが選択され、当該選択ページのデータがページバッファ/センス回路170に読み出される(S200)。次に、ページバッファ/センス回路170のスペア領域に保持されたデータがECC回路130に転送される(S210)。例えば、セクタ0の誤り検出・訂正が行われるとき、
図7に示すスペア0のデータがECC回路130に転送される。ECC回路130は、始めに領域315に保持されている誤り訂正符号(パリティ)に基づき領域313、314に保持されているデータの誤り検出・訂正を行う。
【0039】
次に、ページバッファセンス回路170のレギュラー領域のデータがECC回路130に転送される(S220)。例えば、
図7に示すセクタ0のデータがECC回路130に転送される。ECC回路130は、スペア0の領域313に格納されている誤り訂正符号に基づきセクタ0のデータの誤り検出を行う(S230)。もし、セクタ0に疑似合格のときの不合格ビットが含まれているならば、当該不合格ビットは誤りとして検出されることになる。ECC回路130は、誤りが検出された場合には、これを正しいデータに訂正し、訂正したデータをページバッファ/センス回路170にセットする(S240)。このような処理がセクタ単位で行われる(S250)。
【0040】
このように本実施例によれば、プログラムパルスの印加回数が最適回数Nopに到達したときに疑似合格するか否かを判定するようにしたので、最適回数Nopまで疑似合格が行われず、その間、選択ページの全ビット合格の判定が保証される。これにより、従来では不合格と判定されたメモリセルが合格として救済される可能性が高くなり、ECC処理により他の処理で救済されるビット数のマージンを確保することができ、同時にプログラム成功の歩留まりを向上させることができる。
【0041】
次に、本発明の第2の実施例のプログラム動作を
図10のフローを参照して説明する。第2の実施例は、
図2のフローに新たにステップS300、S310、S320を追加したものである。制御部150は、プログラム動作時に、入力されたプログラムデータに基づき疑似合格か否かを判定する(S300)。ここで、選択ページのプログラムは、すべて消去された状態のメモリセル(データがすべて「1」)に行われるものとする。制御部150は、1つのセクタのプログラムデータに含まれるデータ「0」のビット数が、疑似合格が可能な最大の不合格ビット数Np以下である場合には、疑似合格と判定し、そうでない場合には、
図2のフローと同様の処理が実行される。
【0042】
疑似合格と判定された場合には、ページバッファ/センス回路170に保持されたプログラムデータがECC回路130に転送され、そこでECC処理が実施される(S310)。ECC回路130は、演算により生成した誤り訂正符号をページバッファ/センス回路のスペア領域に書込む。次に、ページバッファ/センス回路170に保持された誤り訂正符号が選択ページのスペア領域にプログラムされる。このとき、選択ページのレギュラー領域のメモリセルは全てデータ「1」を保持しており、選択ページのレギュラー領域のビット線にはプログラム禁止の電圧が供給される。誤り訂正符号がスペア領域にプログラムされると、プログラム動作が終了される。レギュラー領域がすべてプログラム禁止のため、隣接するビット線間のカップリングの影響等がなくなり、プログラムされるビット線が存在するような通常のプログラムと比較して、プログラムディスターブ特性が改善される。
【0043】
疑似合格とされたページの読出しは、第1の実施例のときと同様に行われる。すなわち、選択ページから読み出されたデータがページバッファ/センス回路170に保持される。レギュラー領域のデータは全て「1」であり、プログラムデータは不合格ビット数Np以下のデータ「0」を有する。ECC回路130は、ページバッファ/センス回路170のスペア領域のデータを受け取り、そこに含まれる誤り訂正符号に基づき、レギュラー領域の全「1」データから誤りビット、すなわちデータ「0」をプログラムすべきビットを検出し、データ「1」をデータ「0」に訂正し、これをページバッファ/センス回路170にセットする。
【0044】
このように第2の実施例によれば、プログラムすべきデータがECC回路130によって救済可能なビット数以下である場合には、通常のプログラムシーケンスとは異なり、プログラムデータをレギュラー領域にプログラムすることなく、誤り訂正符号のみをスペア領域にプログラムすることで、レギュラー領域におけるプログラムディスターブ特性が改善され、同時にプログラム時間を短縮することができる。なお、
図10のステップS320においてスペア領域に誤り訂正符号をプログラムするとき、通常のプログラムと同様にベリファイステップも実行され、この場合、
図10の破線Kで示すようにISPPによるプログラムルーチンを実行することも可能である。
【0045】
次に、本発明の第3の実施例について説明する。第3の実施例は、第1の実施例と第2の実施例とを組合せたものであり、その動作フローを
図11に示す。
図11のフローは、
図6のフローに、第2の実施例のステップS300、S310、S320を追加したものであり、その動作は、第1の実施例および第2の実施例のときと同様であるため説明を省略する。
図11のステップS320において、スペア領域に誤り訂正符号をプログラムするとき、
図10の場合と同様にISPPによるプログラムシーケンスを行うことも可能であり、この場合、誤り訂正符号全ての合格が望まれるため、最適回数Nopは、疑似合格されないときの最適回数Nopよりも大きく設定し、全ビット合格と判定される可能性を高くし、ステップS160における疑似合格がされ難くすることも可能である。
【0046】
なお、NAND型のフラッシュメモリは、ページ単位でプログラムが行われるが、入力されるプログラムデータのサイズは、必ずしも1ページ、すなわち
図7に示すレギュラー領域300の8つのセクタのサイズに等しいことを要しない。例えば、プログラムデータのサイズは、1つのセクタのサイズであることができる。通常、プログラムディスターブの観点から、同一ページに連続してプログラムすることが許される回数(NOP(Number of Program))には制限があり、そのNOPに応じて1つのページデータを分割してプログラムすることが可能である。NOPが4であるとき、1つのページデータは、例えば、2セクタ、1セクタ、3セクタ、2セクタに分けてフラッシュメモリ10に入力することが可能である。
【0047】
本発明の好ましい実施の形態について詳述したが、本発明は、特定の実施形態に限定されるものではなく、特許請求の範囲に記載された発明の要旨の範囲内において、種々の変形・変更が可能である。