【実施例】
【0015】
本発明の実施例に係るフラッシュメモリの典型的な構成を
図2に示す。但し、ここに示すフラッシュメモリの構成は例示であり、本発明は、必ずしもこのような構成に限定されるものではない。本実施例のフラッシュメモリ10は、複数のメモリセルが行列状に配列されたメモリアレイ100と、外部入出力端子I/Oに接続され入出力データを保持する入出力バッファ110と、メモリアレイ100にプログラムするデータやそこから読み出されたデータの誤り検出・訂正を行うECC回路120と、入出力バッファ110からのアドレスデータを受け取るアドレスレジスタ130と、入出力バッファ110からのコマンドデータや外部からの制御信号を受け取り、各部を制御する制御部140と、アドレスレジスタ130から行アドレス情報Axを受け取り、行アドレス情報Axをデコードし、デコード結果に基づきブロックの選択およびワード線の選択等を行うワード線選択回路150と、ワード線選択回路150によって選択されたページから読み出されたデータを保持したり、選択されたページへの書込みデータを保持するページバッファ/センス回路160と、アドレスレジスタ130から列アドレス情報Ayを受け取り、列アドレス情報Ayをデコードし、当該デコード結果に基づきページバッファ/センス回路160内のデータの選択等を行う列選択回路170と、データの読出し、プログラムおよび消去等のために必要な種々の電圧(書込み電圧Vpgm、パス電圧Vpass、読出しパス電圧Vread、消去電圧Versなど)を生成する内部電圧発生回路180とを含んで構成される。
【0016】
メモリアレイ100は、列方向に配置されたm個のメモリブロックBLK(0)、BLK(1)、・・・、BLK(m-1)を有する。ブロックBLK(0)に近接して、ページバッファ/センス回路160が配置される。このような構成以外にも、ページバッファ/センス回路160は、ブロックの他方の端部、あるいは両側の端部に配置されるものであってもよい。
【0017】
1つのメモリブロックには、
図2に示すように、複数のメモリセルを直列に接続したNANDストリングユニットNUが複数形成され、1つのメモリブロック内にn+1個のストリングユニットNUが行方向に配列されている。セルユニットNUは、直列に接続された複数のメモリセルMCi(i=0、1、・・・、31)と、一方の端部であるメモリセルMC31のドレイン側に接続された選択トランジスタTDと、他方の端部であるメモリセルMC0のソース側に接続された選択トランジスタTSとを含み、選択トランジスタTDのドレインは、対応する1つのビット線GBLに接続され、選択トランジスタTSのソースは、共通のソース線SLに接続される。
【0018】
メモリセルMCiのコントロールゲートは、ワード線WLiに接続され、選択トランジスタTD、TSのゲートは、ワード線WLと並行する選択ゲート線SGD、SGSに接続される。ワード線選択回路150は、行アドレスAxまたは変換されたアドレスに基づきブロックを選択するとき、ブロックの選択ゲート信号SGS、SGDを介して選択トランジスタTD、TSを選択的に駆動する。
図3は、典型的なセルユニットの構成を示しているが、セルユニットは、NANDストリング内に1つまたは複数のダミーセルを包含するものであってもよい。
【0019】
メモリセルは、典型的に、Pウエル内に形成されたN型の拡散領域であるソース/ドレインと、ソース/ドレイン間のチャンネル上に形成されたトンネル酸化膜と、トンネル酸化膜上に形成されたフローティングゲート(電荷蓄積層)と、フローティングゲート上に誘電体膜を介して形成されたコントロールゲートとを含むMOS構造を有する。フローティングゲートに電荷が蓄積されていないとき、つまりデータ「1」が書込まれているとき、しきい値は負状態にあり、メモリセルは、ノーマリオンである。フローティングゲートに電子が蓄積されたとき、つまりデータ「0」が書込まれているとき、しきい値は正にシフトし、メモリセルは、ノーマリオフである。但し、メモリセルは、1ビット(2値データ)を記憶するSLCタイプでもよいし、多ビットを記憶するMLCタイプであってもよい。
【0020】
図4は、フラッシュメモリの各動作時に印加されるバイアス電圧の一例を示したテーブルである。読出し動作では、ビット線に或る正の電圧を印加し、選択されたワード線に或る電圧(例えば0V)を印加し、非選択ワード線にパス電圧Vpass(例えば4.5V)を印加し、選択ゲート線SGD、SGSに正の電圧(例えば4.5V)を印加し、ビット線選択トランジスタTD、ソース線選択トランジスタTSをオンし、共通ソース線に0Vを印加する。プログラム(書込み)動作では、選択されたワード線に高電圧のプログラム電圧Vprog(15〜20V)を印加し、非選択のワード線に中間電位(例えば10V)を印加し、ビット線選択トランジスタTDをオンさせ、ソース線選択トランジスタTSをオフさせ、「0」または「1」のデータに応じた電位をビット線GBLに供給する。消去動作では、ブロック内の選択されたワード線に0Vを印加し、Pウエルに高電圧(例えば20V)を印加し、フローティングゲートの電子を基板に引き抜くことで、ブロック単位でデータを消去する。
【0021】
図5に、本実施例のフラッシュメモリ10の外部入出力端子から入力されるデータの流れを示す。プログラム動作時、入出力バッファ110から提供された入力データDiは、ページバッファ/センス回路160およびECC回路120へ並列にロードされる。
【0022】
ECC回路120は、入力データDiを演算することにより、入力データDiの誤り検出訂正に必要な誤り訂正符号またはパリティビットを生成する。ECCの演算は、例えば、ハミングコードやリード・ソロモンなどの公知の手法によって行われ、入力されたkビットまたはkバイトの入力データDiをp=k+qに変換する。本明細書では、「q」を、入力データDiの誤り検出訂正に必要な誤り訂正符号またはパリティビットと称する。1つの好ましい例では、ECC回路120は、誤り訂正符号をページバッファ/センス回路160のスペア領域に書込むための書込み回路を包含することができる。但し、この構成は一例であり、これに限定されるものではない。例えば、ECC120とは別個に、誤り訂正符号を書込むための書込み回路が用意されてもよいし、転送回路200がそのような書込み回路を包含することも可能である。
【0023】
ページバッファ/センス回路160とECC回路120との間には、転送回路200が設けられる。転送回路200は、複数の並列に接続された転送用トランジスタを含み、各転送用トランジスタのゲートには、駆動信号TGが共通に接続される。駆動信号TGは、制御部140によって駆動を制御され、Hレベルの駆動信号TGにより転送用トランジスタが一斉にオンし、ページバッファ/センス回路160とECC回路120との間で双方向のデータ転送が可能になる。本実施例において留意すべき点は、転送回路200が、読出し動作時にページバッファ/センス回路160とECC回路120間の双方向のデータ転送を可能にし、プログラム動作時にページバッファ/センス回路160とECC回路120間の実質的なプログラムデータの転送を行わないことである。
【0024】
プログラム動作時、入出力バッファ110からの入力データDiは、ページバッファ/センス回路160およびECC回路120のそれぞれに供給される。
図6は、入出力バッファ110の部分的な内部構成の一例を示している。入出力バッファ110は、複数の出力バッファ112と、複数の出力バッファ112の出力にそれぞれ接続された切替回路114とを含む。切替回路114は、複数のトランジスタを含み、トランジスタの一端が出力バッファ112に接続され、その他端がECC回路に接続され、そのゲートに切替信号SWが接続される。切替信号SWは、制御部140によって駆動を制御される。すなわち、外部から入力されたプログラムコマンドが制御部140によって解読されるとき、切替信号がHレベルに駆動され、トランジスタが一斉にオンされ、出力バッファ112からの入力データDiがECC回路120へ供給される。プログラム動作時以外は、切替信号SWはLレベルに駆動され、出力バッファ112は、ECC回路120から切り離される。
【0025】
ページバッファ/センス回路160およびECC回路120への入力データDiの転送は、実質的に同じタイミングで終了される。データ転送が終了すると、ECC回路120は、ECC演算を行い、そこで生成された誤り訂正符号(パリティビット)をページバッファ/センス回路160の所定領域に書込む。この間、転送回路200によるページバッファ/センス回路160からECC回路120への入力データDiの転送は行われない。
【0026】
ECC回路120による誤り訂正符号のページバッファ/センス回路160への書込みが終了すると、次に、ページバッファ/センス回路160に保持された入力データDiおよび誤り訂正符号の1ページ分のデータがメモリアレイ100の選択されたページにプログラムされる。
【0027】
一方、読出動作時、メモリアレイ100の選択されたページから読み出されたデータがページバッファ/センス回路160に転送される。次に、ページバッファ/センス回路160に保持されたデータが転送回路200によってECC回路120へ転送される。ECC回路120は、誤り訂正符号に基づきプログラム不良の有無、または読出し不良の有無を判定し、不良による誤りがあれば、誤り訂正符号を用いてデータを訂正する。ECC処理されたデータは、再び、転送回路200によりページバッファ/センス回路160へ転送され、次いで、入出力バッファ110を介して外部へ出力される。
【0028】
本実施例では、プログラム動作時に、外部入出力端子から入力されたデータが、ページバッファ/センス回路160とECC回路120に並列にロードされるため、ページバッファ/センス回路160からECC回路120への事実上のデータ転送を省略することができ、これにより、プログラムに要する時間を大幅に短縮することができる。
【0029】
次に、本実施例のより好ましい態様を
図7ないし
図11を用いて説明する。フラッシュメモリ10の外部入出力端子は、×1、×4、×8などの構成が可能であるが、ここでは、フラッシュメモリ10が、×8の外部入出力端子を有するときのプログラム動作時の入力データの処理を説明する。
図7に示すように、外部入出力端子P0〜P7は、I/Oバッファ110−1〜110−7にそれぞれ接続される。プログラム動作時、外部入出力端子P0〜P7に入力されたデータは、I/Oバッファ110−0〜110−7に並列に入力される。
【0030】
ページバッファ/センス回路160は、セクタ0〜セクタ7の8つのセクタに分割されたレギュラー領域300と、スペア0、スペア1、スペア2、スペア3の4つのセクタに分割されたスペア領域310とを有する。
【0031】
レギュラー領域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のパリティビットを記憶する。
【0032】
レギュラー領域300の1つのセクタには、8つの外部入出力端子P−0〜P7、すなわち入出力バッファ110−0〜110−7が割り当てられる。つまり、1つの外部入出力端子には256ビットが割り当てられる(256bit×8=1セクタ)。
図2に示す列選択回路170は、プログラム動作時に受け取った列アドレス情報Ayをデコードし、当該デコード結果に基づき、外部入出力端子P−0〜P7に入力されたデータがロードされるセクタを選択する。
図7は、外部入出力端子P−0〜P−7で受け取られたデータが列アドレス情報Ayに従いセクタ0にロードされる例を示し、
図8は、外部入出力端子P−0〜P−7で受け取られたデータが列アドレス情報Ayに従いセクタ7にロードされる例を示している。
【0033】
プログラム動作時、入出力バッファ110−0〜110−7は、切替回路114が導通することで、ページバッファ/センス回路160およびECC回路/書込み回路120Aのそれぞれにプログラムデータを出力する。このとき、駆動信号TGはLレベルに駆動され、転送回路200は、レギュラー領域300のプログラムデータを転送しない。
【0034】
ここに示す例では、ECC回路/書込み回路120Aが誤り訂正符号を書込むための書込み回路を含む。好ましくは、ECC回路は、レギュラー領域300の1つのセクタと等しいバイト数のデータについてECC演算を行うことができる。レギュラー領域300の1つのセクタが256バイトであれば、ECC回路は、256バイトのデータについてECC演算を行い、その誤り訂正符号を生成する。
【0035】
ECC回路/書込み回路120Aは、生成された誤り訂正符号をスペア領域310の対応するセクタの領域313または314に書込む。
図7に示す例では、プログラムデータがレギュラー領域300のセクタ0にロードされるので、誤り訂正符号は、スペア0のセクタ0のパリティを記憶する領域313に書込まれる。
図8に示す例では、プログラムデータDiがセクタ7にロードされるので、その誤り訂正符号は、スペア3のセクタ7のパリティを記憶する領域314に書込まれる。
【0036】
図9に、スペア領域310のデータのECC処理を例示する。レギュラー領域300の各セクタについてECC処理が終了すると、次に、スペア領域310の各セクタについてECC処理が行われる。スペア領域310の1つセクタ内に含まれるどのデータのECC処理を行うかは任意であるが、本例では、領域312ないし領域314のデータについてECC処理を行うものとする。それ故、転送回路200は、スペア0の領域312ないし領域314のデータを、ECC回路/書込み回路120Aに転送する。そして、ECC処理によって生成された誤り訂正符号は、ECC回路/書込み回路120Aによってスペア0の領域315に書込まれる。同様の処理が、他のスペア1ないしスペア3についても行われる。
【0037】
図10に、従来のECC処理フローを示し、
図11に、本実施例のECC処理フローを示す。初めに、従来のECC処理動作を説明する。外部コントローラからフラッシュメモリ10に対し、外部制御信号、ならびにコマンドデータ、アドレスデータおよびプログラムデータが供給される。制御部140は、外部制御信号およびコマンドデータに基づきプログラム動作を開始する。
【0038】
外部入出力端子および入出力バッファ110を介してプログラムデータ(入力データDi)がページバッファ/センス回路160へロードされると(S100)、制御部140の制御下においてプログラムシーケンスが開始される(S102)。ページバッファ/センス回路160に保持されたセクタ0のデータが転送回路200によりECC回路120へ転送される(S104)。次に、ECC回路120においてECC演算が実行され、そこで生成されたパリティビットがページバッファ/センス回路160のスペア領域310に書き込まれる(S108)。
【0039】
次に、ECCが未処理のセクタがあるか否かが制御部14によって判定される(S110)。こうして、ページバッファ/センス回路160のすべてのセクタのデータがECC処理され、セクタ毎のパリティビットがスペア領域310の対応するセクタの領域313、314に書き込まれる。なお、NAND型のフラッシュメモリは、ページ単位でプログラムが行われるが、入力されるプログラムデータのサイズは、必ずしも1ページ、すなわち
図7に示すレギュラー領域300の8つのセクタのサイズに等しいことを要しない。例えば、プログラムデータのサイズは、1つのセクタのサイズであることができる。通常、プログラムディスターブの観点から、同一ページに連続してプログラムすることが許される回数(NOP(Number of Program))には制限があり、そのNOPに応じて1つのページデータを分割してプログラムすることが可能である。NOPが4であるとき、1つのページデータは、例えば、2セクタ、1セクタ、3セクタ、2セクタに分けてフラッシュメモリ10に入力することが可能である。
【0040】
レギュラー領域のECC処理が終了すると、次に、スペア領域のECC処理が実行される。
図9に示すように、スペア領域310のスペア0のデータが転送回路200によってECC回路/書込み回路120Aへ転送される(S112)。そこでECC処理が実行された後(S114)、生成されたパリティビットが書込み回路によってスペア0の領域315に書込まれる(S116)。ECCが未処理のセクタがあるか否かが判定され(S118)、そのようなセクタがあればステップS112からS116が繰り返される。こうして、スペア領域310のすべてのセクタのECC処理が実行される。ページバッファ/センス回路160のレギュラー領域300およびスペア領域310に保持されたすべてのデータのECC処理が終了すると、ページバッファ/センス回路160に保持されたデータがメモリアレイの選択されたページにプログラムされる(S120)。
【0041】
一方、本実施例のフラッシュメモリ10では、
図11に示すように、プログラムデータがページバッファ/センス回路160とECC回路/書込み回路120Aにロードされる(S200)。ロードが完了すると、プログラムシーケンスが開始される(S202)。
【0042】
プログラムデータのロードが終了するや否や、ECC回路/書込み回路120AによりECC処理が実行され(S204)、生成されたパリティビットは、ECC回路/書込み回路120Aによってスペア領域310の領域313に書込まれる。仮に、プログラムデータがセクタ0からセクタ7までロードされるならば、セクタ0からセクタ7までのプログラムデータのECC演算が連続的に行われ、かつ生成されたパリティビットがスペア領域310の対応するセクタの領域313または314に書込まれる。
【0043】
外部入出力端子からのプログラムデータの入力が終了するや否や、スペア領域310のスペア0のECC処理が開始される。スペア領域310のECC処理は、
図10に示す従来の手法と変わらないので説明を省略する。
【0044】
このように本実施例によれば、プログラム動作時に、外部入出力端子から入力されたプログラムデータを、ページバッファ/センス回路160およびECC回路/書込み回路120Aの双方に並列にロードするようにしたので、従来のようにページバッファ/センス回路160からECC回路/書込み回路120Aへプログラムデータを転送する必要がなくなり、それに要する時間を省略することができる。従って、プログラムデータをECC処理する開始時間を早めることができる。結果として、プログラムデータを選択ページにプログラムする時間を短縮させることができる。
【0045】
本発明の好ましい実施の形態について詳述したが、本発明は、特定の実施形態に限定されるものではなく、特許請求の範囲に記載された発明の要旨の範囲内において、種々の変形・変更が可能である。