不揮発性メモリおよびマルチストリーム更新追跡を伴う方法
【課題】不揮発性フラッシュメモリ内のデータをプログラムする、より効率的な方法を提供する。
【解決手段】不揮発性メモリへの更新データは、所定の条件によって更新ブロックまたはスクラッチパッドブロックのいずれかといった、少なくとも2つのインターリーブするストリームに記録されてもよい。スクラッチパッドブロックを使用して、最終的には更新ブロック宛ての更新データをバッファリングする。ストリーム間の更新の記録順序についての同期情報は、ストリームのうちの少なくとも1つとともに保存される。これにより、複数のメモリブロック上に存在するであろうデータの最新書き込みバージョンを識別することができる。一実施形態において、同期情報は、第1のブロックに保存され、第2のブロック内の次の記録位置をポイントする書き込みポインタである。他の実施形態において、同期情報は、タイムスタンプである。
【解決手段】不揮発性メモリへの更新データは、所定の条件によって更新ブロックまたはスクラッチパッドブロックのいずれかといった、少なくとも2つのインターリーブするストリームに記録されてもよい。スクラッチパッドブロックを使用して、最終的には更新ブロック宛ての更新データをバッファリングする。ストリーム間の更新の記録順序についての同期情報は、ストリームのうちの少なくとも1つとともに保存される。これにより、複数のメモリブロック上に存在するであろうデータの最新書き込みバージョンを識別することができる。一実施形態において、同期情報は、第1のブロックに保存され、第2のブロック内の次の記録位置をポイントする書き込みポインタである。他の実施形態において、同期情報は、タイムスタンプである。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般的には、不揮発性フラッシュメモリシステムの動作に関し、より特定的には、不揮発性フラッシュメモリ内のデータをプログラムする、より効率的な方法に関する。
【背景技術】
【0002】
現在使用されている商業的に成功した不揮発性メモリ製品が数多くあり、特に、小形形状のファクタカードの形式のものは、1つ以上の集積回路チップ上に形成されたフラッシュEEPROM(電気的に消去可能でプログラム可能な読み出し専用メモリ)セルのアレイを使用している。メモリコントローラは、必ずしも別個の集積回路チップ上にあるわけではないが通常は別個の集積回路チップ上にあって、カードが着脱可能に接続されかつカード内のメモリアレイの動作を制御するホストのインターフェイスとなる。そのようなコントローラは、典型的には、マイクロプロセッサと、何らかの不揮発性読み出し専用メモリ(ROM)と、揮発性ランダムアクセスメモリ(RAM)と、データのプログラミングおよび読み出し中にコントローラを通過する際のデータから誤り訂正符号(ECC)を計算する回路などの1つ以上の特殊回路とを含む。市販のカードには、コンパクトフラッシュ(登録商標)(CF)カード、マルチメディアカード(MMC)、セキュアデジタル(SD)カード、個人タグ(P−タグ)、およびメモリスティックカードがある。ホストには、パーソナルコンピュータ、ノートブックコンピュータ、個人用携帯情報端末(PDA)、様々なデータ通信装置、デジタルカメラ、携帯電話、携帯オーディオプレーヤ、自動車サウンドシステム、および同様の種類の装置が含まれる。あるシステムにおいては、着脱可能なカードにはコントローラが含まれず、ホストがカード内のメモリアレイの動作を制御する。この形のメモリシステムの例には、スマートメディアカードおよびxDカードが含まれる。よって、メモリアレイの制御は、カード内のコントローラ上のソフトウェアか、またはホスト内の制御ソフトウェアによって達成されてもよい。メモリカードによる実施例のほか、この形のメモリは、代わりに、様々な形のホストシステムに埋め込むことができる。着脱可能な応用および埋め込みによる応用の両方において、ホストデータは、メモリ制御ソフトウェアによって実施される記憶手法に従って、メモリアレイ内に記憶されてもよい。
【0003】
NORおよびNANDという、2つの一般的なメモリアレイ構造が、商用において見受けられる。典型的なNORアレイにおいて、メモリセルは、コントロールゲートがセルの行に沿って延びるワード線に接続されて、列方向に拡張する隣接するビット線のソースおよびドレイン拡散間に接続されている。メモリセルは、少なくともソースとドレインとの間のセルチャンネル領域の部分に渡って位置する1つの記憶素子を含む。よって、記憶素子に対する電荷のプログラムされたレベルによって、セルの動作特徴が制御され、当該動作特徴は、その後、アドレス指定されたメモリセルに対して適切な電圧を印加することによって読み出すことができる。そのようなセルの例、メモリシステム内でのその使用、およびその製造方法は、米国特許第5,070,032号(特許文献1)、第5,095,344号(特許文献2)、第5,313,421号(特許文献3)、第5,315,541号(特許文献4)、第5,343,063号(特許文献5)、第5,661,053号(特許文献6)、および第6,222,762号(特許文献7)に記載されている。これらの特許は、本願で参照されたすべての他の特許および特許出願と共に、その全体が本願明細書において参照により援用されている。
【0004】
NANDアレイは、個々のビット線間の1つ以上の選択トランジスタに接続された16個または32個などという2個以上のメモリセルの連続列と、基準電位とを使用して、セルの列を形成する。ワード線は、これらの数多くの列内のセルに渡って広がっている。ある列内の個々のセルに対するプログラミング中の読み出しおよびベリファイは、列を流れる電流がアドレス指定されたセルに蓄積された電荷のレベルに依存するように、列内の残りのセルを確実にオンに転換することによって行われる。NAND構造のアレイおよびそのメモリシステムの一部としての動作については、米国特許第5,570,315号(特許文献8)、第5,774,397号(特許文献9)、第6,046,935号(特許文献10)、および第6,522,580号(特許文献11)において見受けられる。
【0005】
前に援用した特許で説明されているような現在のフラッシュEEPROMアレイの電荷記憶素子は、最も一般的な導電性のフローティングゲートであり、典型的には、伝導性を有するようにドープされたポリシリコン材料からなる。フラッシュEEPROMシステムにおいて有用なメモリセルの代替形は、伝導性のフローティングゲートの代わりに、非伝導性の絶縁材料を使用して、不揮発的に電荷を蓄積する。酸化シリコン、窒化シリコン、および酸化シリコン(ONO)からなる3層絶縁体が、メモリセルチャンネル上部で、伝導性のコントロールゲートと半伝導性の基板との間に挟まれている。セルは、セルチャンネルからの電子を窒化物に注入することによってプログラムされ、電子は、限られた領域に閉じ込められて蓄積され、ホットホールを窒化物に注入することによって消去される。誘電体記憶素子を使用するいくつかの具体的なセル構造およびアレイについては、ハラリらの米国公開特許出願第2003/0109093号(特許文献12)に記載されている。
【0006】
ほとんどすべての集積回路の応用例におけるように、何らかの集積回路機能を実施するのに必要なシリコン基板領域を縮小する必要性が、フラッシュEEPROMメモリセルアレイにも存在する。所定のサイズのメモリカードおよび他の形のパッケージの記憶容量を増加するために、または容量の増加およびサイズの減少の両方を行うために、シリコン基板の所定の領域に記憶可能なデジタルデータの量を増加することは、絶えず要求されている。データの記憶密度を増加させる1つの方法は、メモリセル毎および/または記憶ユニットまたは素子毎に1ビット以上のデータを記憶するというものである。これは、記憶素子の電荷レベル電圧範囲のウィンドウを2つ以上の状態に分割することによって達成される。4つのそのような状態を使用すると、各セルは、2ビットのデータを記憶することができ、8つの状態では、記憶素子毎に3ビットのデータを記憶する、といった具合である。フローティングゲートを使用する複数の状態のフラッシュEEPROM構造およびその動作については、米国特許第5,043,940号(特許文献13)および第5,172,338号(特許文献14)に記載され、誘電体フローティングゲートを使用する構造については、米国公開特許出願第2003/0109093号(特許文献12)に記載されている。多状態メモリセルアレイの選択された部分は、様々な事情から2つの状態(バイナリ)で動作されてもよく、その手法は、米国特許第5,930,167号(特許文献15)および第6,456,528号(特許文献16)に記載されている。これらの特許は、本願において引用されたすべての他の特許および特許出願と共に、その全体が本願明細書において参照により援用されている。
【0007】
典型的なフラッシュEEPROMアレイのメモリセルは、共に消去されるセルの個別の(discrete)ブロック(消去ブロック)に分割される。すなわち、消去ブロックは、消去単位であって、同時に消去可能な最小数のセルである。各消去ブロックは、典型的には、データの1つ以上のページを記憶し、ページは、プログラミングおよび読み出しの最小単位であるが、1つ以上のページが、互いに異なるサブアレイまたはプレーンにおいて並列的にプログラムされるか、または読み出されもよい。各ページは、典型的には、データの1つ以上のセクタを記憶し、セクタのサイズは、ホストシステムによって規定される。あるセクタの例は、磁気ディスクドライブで確立された規格に従って512バイトのユーザデータを含み、ユーザデータおよび/またはそれらが記憶される消去ブロックについての何バイトかのオーバーヘッド情報をさらに含む。そのようなメモリは、典型的には、各消去ブロック内にある16、32、またはそれ以上のページで構成され、各ページは、1つまたはほんのいくつかのデータのホストセクタを記憶する。
【0008】
メモリアレイにユーザデータをプログラムすることとユーザデータをそこから読み出す間の並列処理の度合いを高めるために、アレイは、典型的には、一般にプレーンと称されるサブアレイに分割され、プレーンは、自身のデータレジスタと、他の回路とを含み、いくつかまたはすべてのプレーンに対するデータのセクタのプログラミングまたは読み出しが同時に行われてもよいといった並列動作を可能にしている。単一の集積回路上のアレイは、プレーンに物理的に分割されてもよいし、または、各プレーンは、別個の1つまたはそれ以上の集積回路チップから形成されてもよい。そのようなメモリの実施例が、米国特許第5,798,968号(特許文献17)および第5,890,192号(特許文献18)に記載されている。
【0009】
メモリをさらに効率的に管理するために、消去ブロックは、互いにリンク付けされて仮想ブロックまたはメタブロックを形成してもよい。すなわち、各メタブロックは、各プレーンからの1つの消去ブロックを含むように規定される。メタブロックの使用については、米国特許第6,763,424号(特許文献19)に記載されている。メタブロックは、データをプログラムしかつ読み出すための宛先として、ホスト論理ブロックアドレスによって識別される。同様に、メタブロックのすべての消去ブロックは、共に消去される。メタブロックは、メタブロック内の各消去ブロックからの1つのページを含むメタページ単位でプログラムされてもよい。そのような大きなブロックおよび/またはメタブロックと共に動作されるメモリシステム内のコントローラは、ホストから受信された論理ブロックアドレス(LBA)とメモリセルアレイ内の物理ブロック番号(PBN)との間の変換を含む、数多くの機能を行う。消去ブロック内の各ページは、典型的には、ブロックアドレス内のオフセットによって識別される。アドレス変換は、論理ブロック番号(LBN)と論理ページと間の中間用語 (intermediate terms) の使用を伴うことが多い。メタブロックを使用するメモリシステムにおいて、メタブロックは、メモリアレイの消去の有効最小単位であってもよい。よって、消去の最小単位(ブロック)は、メモリ構造により、消去ブロックであっても、メタブロックであってもよい。「ブロック」という用語は、メモリ構造により、消去ブロックまたはメタブロックのいずれを指してもよい。同様に、「ページ」という用語は、メモリシステムのプログラミングの最小単位を指してもよい。これは、メモリシステム構造により、単一の消去ブロック内のページであってもよいし、いくつかの消去ブロックに渡って広がるメタページであってもよい。
【0010】
メタブロックに記憶されたデータは、更新されることが多く、更新の可能性は、メタブロックのデータ容量が多いほど高まる。あるメタブロックの更新されたセクタは、通常、他のメタブロックへ書き込まれる。変更されなかったセクタも、通常、同一のプログラミング動作の一部として、元のメタブロックから新しいメタブロックへコピーされて、データを統合する。代わりに、変更されなかったデータは、更新されたデータが単一のメタブロックに後に統合されるまで元のメタブロックに残っていてもよい。現在のデータを新しいブロックに統合して、古いデータのみを含むブロックを消去する動作は、一般的には「ガーベッジコレクション」動作と称される。
【0011】
消去されたブロックのプール内に保持されたいくつかの余分なブロックと共に大きなブロックまたはメタブロックシステムを動作させることは一般的である。あるブロックの容量未満のデータの1つ以上のページが更新されようとする場合、典型的には、更新されたページをプールからの消去されたブロックへ書き込み、その後、元のブロックから変更されなかったページのデータをコピーして、プールブロックを消去する。この手法の変形例については、米国特許第6,763,424号(特許文献19)に記載されている。時間が経つにつれて、ホストデータファイルが再書き込みされかつ更新される結果、数多くのブロックが、有効データを含む比較的少ない数のページと、もはや新しくないデータを含む残りのページとになりうる。アレイのデータ記憶容量を効率的に使用できるようにするために、有効データのうちの論理的に関連したデータページを複数のブロック内の断片からときどき収集して、より少ない数のブロックに統合する。この処理は、通常、「ガーベッジコレクション」と称される。
【0012】
あるメモリシステムにおいて、物理メモリセルも2つ以上のゾーンにグループ化される。あるゾーンは、論理ブロックアドレスの特定の範囲がマッピングされる物理メモリまたはメモリシステムの任意の分割されたサブセットであってもよい。例えば、64メガバイトのデータを記憶可能なメモリシステムは、ゾーン毎に16メガバイトのデータを記憶する4つのゾーンに分割されてもよい。そして、論理ブロックアドレスの範囲も、4つの群に分割され、4つの各ゾーンの物理ブロックに1つの群が割り当てられる。典型的な実施例において、論理ブロックアドレスは、論理ブロックアドレスがマッピングされる単一の物理ゾーン外に各データが書き込まれることのないという制約を受ける。それぞれが自身のアドレス指定回路、プログラミング回路、および読み出し回路を有するプレーン(サブアレイ)に分割されたメモリセルアレイにおいて、各ゾーンは、好ましくは、複数のプレーンからのブロック、典型的には、各プレーンから同数のブロックを含む。ゾーンは、論理−物理変換のようなアドレス管理を簡素化するために主に使用されるので、変換テーブルはより小さくなり、これらのテーブルを保持するのに必要なRAMメモリは少なくなり、メモリの現在アクティブな領域をアドレス指定するためのアクセス時間は速くなるが、その限定的な性質により、最適な消耗レベリングより少なくなってしまうことがある。
【0013】
個々のフラッシュEEPROMセルは、1以上のビットのデータを表す電荷記憶素子またはユニット内に、ある電荷量を記憶する。記憶素子の電荷レベルは、そのメモリセルのしきい値電圧(通常VT と称される)を制御し、これは、セルの記憶状態を読み出す基本として使用される。しきい値電圧ウィンドウは、通常、数多くの範囲に分割され、メモリセルの2つ以上の各記憶状態につき1つの範囲となる。これらの範囲は、各セルの記憶状態を判断することが可能な規格検知レベルを含むガードバンドによって分離される。これらの記憶レベルは、近傍または他の関連するメモリセル、ページ、またはブロックにおいて行われるプログラミング、読み出し、または消去動作を妨害する電荷の結果、どうしてもずれてしまう。したがって、典型的には、誤り訂正符号(ECC)がコントローラによって計算されて、読み出し中にプログラムされかつ使用されているホストデータと共に記憶されて、データをベリファイして、必要があればあるレベルのデータで訂正を行う。また、電荷レベルのずれは、妨害動作が規定の範囲から完全にずれて間違ったデータが読み出されてしまう前に、状態範囲の中心に戻すことが可能なときもある。データリフレッシュまたはスクラブと称されるこの処理については、米国特許第5,532,962号(特許文献20)および第5,909,449号(特許文献21)に記載されている。
【0014】
あるメモリアレイにおいて、ページは、データの複数のセクタを保持可能な消去ブロックの部分からなってもよい。ページが一旦書き込まれると、既に書き込まれているデータを破損させることなくさらなる書き込みが可能であってもよい。そのようなシステムを使用するメモリアレイについて、ページは、同一のワード線に接続されたメモリセルのセットによって規定されてもよい。そのようなメモリアレイは、ページのサイズよりも少ない量のデータが受信されるように、非効率的にプログラムされてもよい。例えば、データが一度に1セクタずつ受信される場合、1セクタだけがページに対してプログラムされてもよい。既にそこに保存されているデータセクタを破損するという危険を冒すことなく、追加のデータがページに対してプログラムされることはなくてもよい。ときには、一連の単一セクタがいくらかの遅延を伴って受信される場合がある。この場合に、各セクタは、メモリアレイの別々のページへ書き込まれる。よって、セクタは、メモリアレイ内のスペースをどのように使うかについて非効率的なやり方で記憶される。マルチレベル論理が使用される場合には、メモリセルは、近傍のセルの後のプログラミングの効果による影響を受けやすい。加えて、マルチレベルセルのプログラミングは、一般的には、データの第1のページでセル群をプログラムし、その後、データの第2のページでセルをプログラムすることによって行われる。データの第2のページのプログラミングは、場合によっては、データの第1のページを破損させることがある。よって、ページより少ない量のデータをメモリアレイが受信する場合に、マルチセクタページを有するメモリアレイ内にデータを記憶させるためのより効率的な方法の必要性がある。また、マルチレベルセル群をプログラムする場合に、後続のページのプログラミング中に第1のページのデータを破損させない手法の必要性がある。
【特許文献1】米国特許第5,070,032号
【特許文献2】米国特許第5,095,344号
【特許文献3】米国特許第5,313,421号
【特許文献4】米国特許第5,315,541号
【特許文献5】米国特許第5,343,063号
【特許文献6】米国特許第5,661,053号
【特許文献7】米国特許第6,222,762号
【特許文献8】米国特許第5,570,315号
【特許文献9】米国特許第5,774,397号
【特許文献10】米国特許第6,046,935号
【特許文献11】米国特許第6,522,580号
【特許文献12】米国公開特許出願第2003/0109093号
【特許文献13】米国特許第5,043,940号
【特許文献14】米国特許第5,172,338号
【特許文献15】米国特許第5,930,167号
【特許文献16】米国特許第6,456,528号
【特許文献17】米国特許第5,798,968号
【特許文献18】米国特許第5,890,192号
【特許文献19】米国特許第6,763,424号
【特許文献20】米国特許第5,532,962号
【特許文献21】米国特許第5,909,449号
【特許文献22】米国特許出願第10/917,725号
【特許文献23】米国公開特許出願第2004/0109357号
【発明の開示】
【0015】
消去単位としてのブロックを有するメモリアレイにおいて、1つ以上のブロックが、スクラッチパッドブロックとして指定されて、メモリシステムの性能を改善するために使用されてもよい。スクラッチパッドブロックは、低い並列度でデータがスクラッチパッドブロックへ書き込まれて、その後、高い並列度でメモリアレイ内の他の位置にコピーされるように、バッファとして動作してもよい。データは、より効率的に他の位置へ書き込まれるようになるまで、スクラッチパッドブロックに蓄積されてもよい。マルチセクタページを有するメモリにおいて、システムの最大並列度を使用して完全なページが書き込まれてもよくなるまでセクタが蓄積されてもよい。マルチレベルセルメモリにおいて、下位ページは、上位および下位ページが共に記憶されるように上位ページが利用可能になるまで、スクラッチパッドブロック内に記憶されてもよい。
【0016】
特定のプログラミング動作の並列度は、共にプログラムされるデータのビット数に比例する。よって、大量のデータを共にプログラムすることは、高い並列度を有する書き込みとみなされ、少量のデータを共にプログラムすることは、低い並列度であるとみなされる。1つのページより少ない並列度を使用する場合には、メモリアレイ内のスペースが無駄になる場合があり、この無駄なスペースがあるということは、ガーベッジコレクションをより頻繁に行わなければならないことを意味し、それによって、メモリシステムの効率性に悪影響を与える。ときには、少量のデータをメモリシステムに記憶しなければならない。これら小さい書き込みをスクラッチパッドブロックという1つの位置に書き込んだ後に、それらを高い並列度で他の位置に書き込むことによって、メモリシステムの効率性が高くなることもある。
【0017】
データの複数のセクタからなるページのプログラミングの最小単位を有するメモリシステムにおいて、1ページ未満の量で受信されるデータを記憶する方法が開示される。完全なページがフラッシュメモリアレイへ書き込まれるようになるまで、受信されたセクタを記憶するために、スクラッチパッドブロックとして指定されたブロックを使用する。第1のセクタは、スクラッチパッドブロックの第1のページに記憶される。その後に受信されたセクタは、スクラッチパッドブロックの追加のページに記憶されてもよい。個別に受信されたセクタまたはセクタ群は、受信された際に、スクラッチパッドブロックの新しいページに保存される。スクラッチパッドブロック内の他のページからの以前に記憶されたセクタは、新しいデータと共に、最新のページへコピーされてもよい。よって、データのセクタは、スクラッチパッドブロックのページ内の新しいデータの完全なページ未満がある限り、スクラッチパッドブロック内に蓄積される。セクタは、ブロックの最大有効並列度よりも低い並列度でスクラッチパッドブロックへ書き込まれる。セクタは更新されながら、スクラッチパッドブロックに記憶される。データの新しいセクタが受信されて、データの完全なページがプログラミングに利用可能になった場合には、新しいセクタおよびスクラッチパッドブロックに以前に記憶されたセクタは、メモリアレイの他のブロック内の同一のページに共にプログラムされてもよい。このページは、データで完全に埋まり、最大有効並列度で書き込まれる。その後、スクラッチパッドブロックに記憶されたデータは、古いもの (obsolete) であるとマーク付けされて、都合のよいときに消去されてもよい。よって、フラッシュメモリ内のスペースは、より効率的に使用され、ガーベッジコレクション動作の頻度は減少する。
【0018】
マルチレベルセルを有するメモリにおいて、スクラッチパッドブロックは、アクティブブロックにも書き込まれるデータのページを記憶してもよい。記憶されたページは、データの他のページが受信されるまで、スクラッチパッドブロック内に保持されてもよく、これは、データの当該2つのページがアクティブブロック内のそれらの宛先へ共に書き込まれるようにするためである。これらのページは、高い並列度を使用して、上位ページおよび下位ページとして共に書き込まれてもよく、別個に書き込まれた場合よりもデータの破損の危険性が低い状態となる。電力の損失がある場合に下位ページ内のデータがスクラッチパッドブロックから回復されるようにするために、関連する上位ページのプログラミング中に、以前にプログラムされた下位ページのコピーを保持するために使用されてもよい。
【0019】
スクラッチパッドブロックは、他の位置へ書き込まれるべきデータの一時記憶を許容してもよい。データは、あるブロックのデータのセクタの更新中にスクラッチパッドブロック内に記憶されてもよい。あるブロック内のあるページは、互いに異なるファイルからのデータのセクタを含む場合に、ページは、いずれかのブロックが更新されると更新される。従来の方法を使用して2つのファイルからの更新データを記憶するために、1つ以上のブロックが必要となる場合がある。なぜならば、マルチファイルページの2つのコピーが必要な場合があるからである。スクラッチパッドブロックを使用すれば、あるファイルからのページの一部を、(他のファイルからの)残りのページが利用可能になるまで記憶することができる。その後、完全な更新ページが、最大並列度を使用してその宛先にプログラムされる。
【0020】
スクラッチパッドブロックは、関連性のないデータのセクタを含んでもよい。ホストデータセクタおよび制御データセクタの両方が、スクラッチパッドブロック内に記憶されてもよい。ホストデータセクタおよび制御データセクタの両方が、スクラッチパッドブロック内の同一のページ内に記憶されてもよい。2つの互いに異なるファイルからのセクタ、または同一のファイルの論理的にリモートな部分からのセクタが、スクラッチパッドブロックの同一のページに記憶されてもよい。これにより、データを受信しながら高速を維持するように、最大並列度でスクラッチパッドブロックのプログラミングが可能になってもよい。データを低速で受信する場合には、ページ内の追加のスペースは、制御データを含むセクタによって占有される。これにより、制御データ構造が低い頻度で更新されるようになってもよいことから、ガーベッジコレクションの頻度が減少する。
【0021】
一般的に、スクラッチパッドブロックの同一のページ内に記憶されたセクタは、互いに異なるファイルに属する必要はない。独立したデータオブジェクトとして、例えば、同一ページの2つの論理セクタであればよいが、互いに異なる書き込みコマンドによって書き込まれる必要がある。
【0022】
スクラッチパッドは、コントローラが容易に識別できるように、マーク付けセクタによって識別されてもよい。スクラッチパッドブロック内に記憶されたデータのインデックスが、これもまたスクラッチパッドブロック内に記憶されたインデックスセクタ内で維持されてもよい。新しいセクタがスクラッチパッドブロック内に記憶されるにつれて、古いインデックスセクタが新しいインデックスセクタに置き換わることによって、インデックスセクタが更新される。同様に、スクラッチパッドブロック内のセクタが他の位置にコピーされるにつれて、インデックスセクタは更新されて、スクラッチパッドブロック内のこれらのセクタが古いものであることを示してもよい。
【0023】
スクラッチパッドおよび更新ブロックのための改良されたインデックス付け−スクラッチパッドブロックに保持されたSPBI/CBIインデックス
本発明の他の態様によれば、更新ブロックに加えてスクラッチパッドブロックを使用する場合に、関連するスクラッチパッドブロックインデックス(「SPBI」)を使用して、スクラッチパッドブロックに記録された更新セクタを追跡する。これは、更新ブロックに記録された論理セクタを追跡するために使用されるインデックス(例えば、「CBI」)に対する追加である。ユーザデータがスクラッチパッドブロックの部分ページに記憶される場合はいつでも、ページの少なくとも最終スロットが一杯ではないということになる。一実施形態において、スクラッチパッドブロック内の部分ページの最終スロットにSPBIを記憶することができる。好ましい一実施形態において、SPBIおよびCBIをSPBI/CBIセクタ内にパッケージ化して、いずれにしても使用されないスクラッチパッドブロック内の部分ページの最終スロットに記憶することができる。新しい部分ページが書き込まれる度に、更新されたSPBI/CBIセクタが終端スロットに書き込まれ、すべての過去のバージョンは古いものとなる。
【0024】
同時に、インデックス付け手法は、スクラッチパッドブロック内の未使用の記憶装置を利用して、不揮発性メモリにインデックスを記憶する。
【0025】
本発明のさらに他の態様によれば、メモリブロックに記憶されたデータは、データによって占有されていない部分ページの部分にインデックスを記憶する。よって、メモリユニットのページが共にプログラム可能でメモリページのブロックが共に消去可能であるようなメモリユニットに編成されたメモリにおいて、メモリユニットに記憶されたデータユニットが所定の順序に従ってページ内に配列される場合であって、特にページが各消去後に一度プログラム可能である場合に、部分的に一杯のページが存在することになる。そして、ブロックのインデックスは、更新データで埋められていない部分ページに記憶される。部分ページは、現在のブロックまたは他のブロック内にあってもよい。
【0026】
マルチストリーム更新追跡−2つ以上のストリーム間の同期
本発明のさらに他の態様によれば、複数のメモリブロック上に存在するであろうデータの最新書き込みバージョンを識別できる同期情報と共に、更新データを不揮発性メモリに書き込むための方法を提供する。ホストからの更新データは、複数のストリームを介して複数のブロックに向けられていてもよい。同期情報の維持は、ストリームのうちの少なくとも1つの更新毎の時点でストリーム/ブロックがどのくらい一杯かについての情報を記憶することによって達成される。
【0027】
好ましい一実施形態において、ブロック内の第1の空位置をポイントする書き込みポインタが、ブロックがどのくらい一杯かを示すことになる。例えば、2つのストリーム間において、書き込みポインタが第1のブロックに書き込まれるときに、第2のブロックに対する書き込みポインタの値は、第2のブロックがどのくらい一杯かを示す。さらに、書き込みポインタが第1のブロックに保存される位置も、その時点で第1のブロックがどのくらい一杯かを示す。
【0028】
本発明は、メモリユニットの消去可能なブロックに編成される不揮発性メモリに対して特に適用可能であり、各メモリユニットは、データの論理ユニットを記録するためのものであり、各ブロックも、1つ以上のページに編成される。さらに、各ページは、複数の論理ユニットで消去後に一度プログラム可能であり、各論理ユニットは、所定のページオフセットを有して所定の順序となっている。この方法は、基本的には、論理ユニット群の更新データを記憶またはバッファリングするための2つのブロック(例えば、更新ブロックとスクラッチパッドブロック)を提供し、論理ユニットの最新の書き込みバージョンが第1または第2のブロックにあるかどうかを識別する助けとなるための同期情報を維持する。
【0029】
好ましい一実施形態によれば、書き込みポインタという形態の同期情報は、スクラッチパッドブロックにバッファリングされている度に、ホストデータと共に保存される。書き込みポインタは、書き込みポインタがスクラッチパッドブロックに保存されているときに、更新ブロック内の次の書き込みのための位置のアドレスを与える、更新ブロック書き込みポインタである。特に、これは、ホストデータを記憶するためにいずれにしても使用されないスクラッチパッドブロックの部分に保存される。好ましくは、更新ブロック書き込みポインタは、スクラッチパッドブロックの部分ページに記憶されたインデックスSPBI/CBIに含まれる。更新ブロック書き込みポインタにより、スクラッチパッドブロックにバッファリングされた所定の論理セクタが更新ブロックに対する後続の書き込みによって古いものとなってしまったかどうかを判断することができる。
【0030】
本発明の他の実施形態によれば、同期情報は、スクラッチパッドブロックにバッファリングされた所定の論理セクタが更新ブロックに対する後続の書き込みによって古いものとなってしまったかどうかを判断することができるように維持される。これは、同期情報が更新ブロックのページに記憶されるときに、スクラッチパッドブロック内の次の書き込みについての位置のアドレスを与えるスクラッチパッド書き込みポインタを含むことによって達成される。
【0031】
他の実施形態において、同期情報は、最新バージョンを正確に見つけることができるように、複数のストリームに対して書き込まれたデータセクタのタイムスタンプとして符号化することができる。
【0032】
好ましい実施形態において、タイムスタンプ情報は、書き込まれているページ内のセクタのうちの少なくとも1つのオーバーヘッド部分に記憶される。
【0033】
パイプライン化された動作を伴うマルチストリーム更新
本発明の他の態様によれば、不揮発性メモリを更新する方法は、更新データを記録するための第1のブロック(更新ブロック)と、更新ブロックに対する記録の前に更新ブロックのうちのいくつかを一時的に保存するための第2のブロック(スクラッチパッドブロック)とを使用することを含む。不揮発性メモリは、メモリユニットの消去可能なブロックに編成され、各メモリユニットは、データの論理ユニットを記憶するためのものであり、また、各ブロックは、1つ以上のページに編成され、各ページは、明確なページオフセットを有する複数の論理ユニットを記憶でき、消去後に共に一度プログラム可能である。この方法は、ホストから論理ユニットを受信することと、所定の条件が満たされる場合に受信された論理ユニットがページエンドオフセットを有するように、ページ毎に受信された論理ユニットを整列させることと、受信された論理ユニットと任意の先行する論理ユニットとを適切なページ整列で更新ブロック内のページに記憶することと、そうでなければ、スクラッチパッドブロック内の部分ページに残りの受信された論理ユニットを一時的に記憶することとをさらに含む。スクラッチパッドブロック内の論理ユニットは、所定の条件を満たす場合には、最終的には更新ブロックへ転送される。
【0034】
好ましい一実施形態において、更新データは、ページ毎に受信および解析されて、第1のブロック(例えば、更新ブロック)へ転送される。受信されたデータの残りの部分ページは、第2のブロック(例えば、スクラッチパッドブロック)へ転送されて、データの完全ページが第1のブロックへ記録するのに利用可能になるまで、そこにとどまることになる。受信されたデータが第2のブロックへ転送されると、記録されたページが受信データで部分的に一杯になるだけであっても、ページ毎に記録される。部分ページ内の通常使用されない予備のスペースを使用して、第2および第1のブロック内のデータを探し当てるためのインデックスを記憶してもよい。
【0035】
他の好ましい実施形態によれば、予測パイプライン化された動作が実施される。この動作においては、更新ブロックを記録するための所定の条件を確認するまで待機するのではなく、書き込まれることになっているデータユニットによって所定の条件が満たされる可能性があることをホスト書き込みコマンドが示すとすぐに、更新ブロックが書き込まれるように設定される。このように、当該設定は、ホストからデータユニットが来るのを待つ間にジャンプスタートが可能である。最終的に受信された実際のデータユニットが所定の条件を本当に満たしたときに、設定を待つ必要なく、ただちに更新ブロック内のページのプログラミングが生じることができ、これにより、書き込み性能が向上する。ホスト書き込みが中断されて受信された実際のデータユニットがもはや所定の条件を満たさない場合には、更新ブロックへの記録のための設定は廃棄され、代わりに、データユニットは、スクラッチパッドブロックに記録されることになる。
【0036】
他の好ましい実施形態において、データが受信されるにつれて、第1または第2の記憶装置のいずれに受信されたデータを記録するかが最初は不明な場合には、受信されたデータを第1および第2の記憶装置の両方のプログラミング回路のデータラッチにロードする。このように、データは第1または第2の記憶装置のいずれかをプログラムするためにいつでもただちに利用可能となる。特別な場合には、第1および第2の記憶装置は、データラッチの同一のセットを共有する。例えば、第1および第2の記憶装置が同一のメモリプレーン内にある場合、これらは、センス増幅器およびデータラッチの同一のセットを伴うプログラミング回路の同一のセットを使用できる。この場合、第1または第2の記憶装置のいずれかがプログラムされるべきかに関わらず、デフォルトのデータラッチのセットにデータがロードされることになる。
【0037】
本発明のさらなる特徴および利点は、添付の図面と共に解釈されるべきであるその好ましい実施形態の以下の説明から理解されるであろう。
【発明を実施するための最良の形態】
【0038】
メモリ構造およびその動作
まず図1Aを参照すると、フラッシュメモリは、メモリセルアレイと、コントローラとを含む。図に示されている例において、2つの集積回路装置(チップ)11および13は、メモリセルのアレイ15と、様々な論理回路17とを含む。論理回路17は、データ、コマンド、および状態回路を通じて別個のチップ上のコントローラ19のインターフェイスとなり、また、アドレス指定、データ転送、検知、および他のサポートをアレイ13に対して提供する。提供された記憶容量によっては、1から多までの数多くのメモリアレイチップを形成可能である。代わりに、コントローラと、アレイ全体の一部とを単一の集積回路チップ上に結合することができるが、これは、現在、経済的な代案であるとはいえない。
【0039】
典型的なコントローラ19は、マイクロプロセッサ21と、主にファームウェアとを記憶するための読み出し専用メモリ(ROM)23と、主にメモリチップ11および13へ書き込まれまたはそこから読み出されたユーザデータの一時記憶のためのバッファメモリ(RAM)25とを含む。回路27は、(複数の)メモリアレイチップのインターフェイスとなり、回路29は、接続31を通じてホストのインターフェイスとなる。この例において、データの完全性は、コードの計算専用の回路33でECCを計算することによって判断される。ユーザデータが記憶のためにホストからフラッシュメモリアレイへ転送されるにつれて、回路は当該データからECCを計算し、コードはメモリに記憶される。ユーザデータがメモリから後で読み出される場合には、ユーザデータは、再び回路33を通じて渡され、この回路33は、同一のアルゴリズムによってECCを計算して、当該コードを、計算されてデータと共に記憶されたコードと比較する。これらが同等であれば、データの完全性が確認される。これらが異なっていれば、使用される具体的なECCアルゴリズムによっては、アルゴリズムによってサポートされた数までのエラーのビットを識別および訂正できる。
【0040】
図1Aのメモリの接続31は、ホストシステムの接続31’に接続し、その例を図1Bに示す。ホストと図1Aのメモリとの間のデータ転送は、インターフェイス回路35を通じて行われる。また、典型的なホストは、マイクロプロセッサ37と、ファームウェアコードを記憶するためのROM39と、RAM41とを含む。他の回路およびサブシステム43は、特定のホストシステムによっては、大容量磁気データ記憶ディスクドライブ、キーボードのためのインターフェイス回路、モニタなどを含むことが多い。そのようなホストの例には、デスクトップコンピュータ、ラップトップコンピュータ、ハンドヘルドコンピュータ、パームトップコンピュータ、個人用携帯情報端末(PDA)、MP3および他のオーディオプレーヤ、デジタルカメラ、ビデオカメラ、電子ゲーム機、無線および有線電話通信装置、留守番録音装置、音声レコーダ、ネットワークルータなどが含まれる。
【0041】
図1Aのメモリは、コントローラとすべてのそのメモリアレイ回路装置とを図1Bのホストに着脱可能に接続可能な形態で含む小さな密閉カードとして実装されてもよい。すなわち、接続31と31’とを接続することにより、カードを接続解除して他のホストに移動させるか、または他のカードをホストへ接続することによって当該カードを置き換えることができる。代わりに、メモリアレイ装置は、コントローラと接続31とを含むカードに電気機械的に接続可能な別個のカードに密閉されていてもよい。さらなる代案として、図1Aのメモリは、図1Bのホストに埋め込まれていてもよく、接続31および31’は常時行われている。この場合、メモリは、通常、他の構成要素と共にホストの筐体内に収容されている。
【0042】
図2は、メモリアレイの一部分を示し、メモリセルが、消去ブロックにグループ化され、各消去ブロック内のセルは、単一の消去動作の一部として共に通常同時に消去可能である。消去ブロックは、この形のメモリ内の最小消去単位である。
【0043】
図2のそれぞれのメモリセル消去ブロックのサイズは様々でありうるが、ある市販の形態のものは、それぞれの消去ブロック内のデータの単一のセクタを含む。そのようなデータセクタの内容を図3に示す。ユーザデータ51は、典型的には512バイトである。ユーザデータ51に加えて、ユーザデータから計算されたECC53、セクタデータおよび/または内部にセクタがプログラムされた消去ブロックに関連するパラメータ55、パラメータ55から計算されたECC57、および含まれうる任意の他のオーバーヘッドデータがある。
【0044】
また、1つ以上のフラグがステータスまたは状態を示すパラメータ55に含まれてもよい。また、消去ブロックをプログラミングおよび/または消去するために使用される電圧レベルの表示をパラメータ55内に記憶することもでき、これらの電圧は、消去ブロックによって経験された周期の数および他の要因が変化するに従って更新される。パラメータ55の他の例には、消去ブロック内の任意の不良セルの表示、この物理消去ブロックにマッピングされた消去ブロックの論理アドレス、および一次消去ブロックが不良である場合の任意の代替の消去ブロックのアドレスが含まれる。任意のメモリシステムにおいて使用されるパラメータ55の特定の組み合わせは、設計に従って様々となり得る。また、オーバーヘッドデータのいくつかまたはすべてを、ユーザデータを含むかまたはオーバーヘッドデータが関連する消去ブロック内ではなく、そのような機能専用の消去ブロック内に記憶することもできる。
【0045】
図2の単一のデータセクタ消去ブロックと異なるのは、図4のマルチセクタ消去ブロックである。消去ブロック59も、消去の最小単位であり、4つのページ0〜3を含み、それぞれがプログラミングの最小単位である。データの1つ以上のホストセクタが、通常、セクタのデータから計算されたECCを少なくとも含むオーバーヘッドデータと共に各ページ内に記憶され、また図3のデータセクタの形式であってもよい。
【0046】
ブロック全体のデータの再書き込みは、通常、新しいデータを消去ブロックプールのブロック内にプログラムして、その後、元のブロックが消去されて消去プールに配置されることを伴う。ブロックのすべてのページより少ないデータが更新される場合には、更新データは、典型的には、消去済みブロックプールからのブロックのページに記憶され、残りの変更されなかったページ内のデータは、元のブロックから新しいブロックへコピーされる。その後、元のブロックは消去される。この大規模なブロック管理手法の変形例には、元のブロックからのデータを動かすことも消去することもせずに、他のブロックのページ内に更新されたデータを書き込むことが含まれる。この結果、複数のページが同一の論理アドレスを有することになる。データの直近のページは、セクタまたはページオーバーヘッドデータ内のフィールドとして記録されたプログラミング時間などの何らかの都合のよい手法によって識別される。
【0047】
さらなるマルチセクタブロック配列を図5に示す。ここで、総メモリセルアレイは、物理的に2つ以上のプレーンに分割され、4つのプレーン0〜3が図に示されている。各プレーンは、他のプレーンからほとんど独立して動作できるように、自身のデータレジスタ、センス増幅器、アドレス指定デコーダなどを有するメモリセルのサブアレイである。すべてのプレーンは、単一の集積回路装置上または複数の装置上に設けられてもよく、一例では、1つ以上の別個の集積回路装置から各プレーンが形成される。図5のシステムの例における各ブロックは、16個のページP0〜P15を含み、各ページは、1、2、またはそれ以上のホストデータセクタおよび何らかのオーバーヘッドデータの容量を有する。
【0048】
さらに他のメモリセル配列を図6に示す。各プレーンは、セルの数多くの消去ブロックを含む。動作の並列度を高めるために、互いに異なるプレーン内の消去ブロックを論理的にリンクさせて、メタブロックを形成する。そのようなあるメタブロックを、プレーン0の消去ブロック3と、プレーン1の消去ブロック1と、プレーン2の消去ブロック1と、プレーン3の消去ブロック2とから形成されるものとして、図6に示す。各メタブロックは、論理的にアドレス指定可能であり、メモリコントローラは、個々のメタブロックを形成する消去ブロックを割り当てて常時監視する。ホストシステムは、好ましくは、個々のメタブロックの容量に等しいデータ単位でメモリシステムのインターフェイスとなる。図6のそのような論理データブロック61は、例えば、メタブロックを構成するブロックの物理ブロック番号(PBN)にコントローラによってマッピングされた論理ブロックアドレス(LBA)によって識別される。メタブロックのすべての消去ブロックは共に消去され、各消去ブロックからのページは、好ましくは同時にプログラムされかつ読み出される。メタブロックは、このように消去ブロックがリンクされたシステム内の消去単位とみなされてもよい。メタブロック構造を有するあるメモリアレイにおいて、ページは、メタブロックの他のページと並列にプログラムされるだけであってもよい。これらのメモリアレイにおいて、メタページは、メタブロックの各プレーンからのページからなるメタブロックのプログラミングの最小単位である。
【0049】
図2〜図6に関して前述したメモリを実施するために使用されてもよいような、数多くの互いに異なるメモリアレイ構造、構成、および特定のセル構成がある。NAND形のメモリアレイの消去ブロックの1つを図7に示す。直列接続されたメモリセルの数多くの縦向きの列が、電圧VSSの共通源65とビット線BL0〜BLNのうちの1つとの間に接続され、さらには、ビット線は、アドレスでコーダ、ドライバ、読み出しセンス増幅器などを含む回路67に接続されている。具体的には、そのようなある列は、列の向かい合わせの端部にある選択トランジスタ77と79との間に直列接続された電荷蓄積トランジスタ70,71,…72,および74を含む。この例において、各列は16個の記憶トランジスタを含むが、他の個数も可能である。ワード線WL0〜WL15が、各列の1つの記憶トランジスタに渡って伸び、ワード線のアドレスデコーダと電圧源ドライバとを含む回路81に接続されている。線83および84上の電圧は、電圧源65および/またはビット線BL0〜BLNのいずれかに対する、消去ブロック内のすべての列の、選択レジスタを通じた接続を合わせて制御する。データおよびアドレスは、メモリコントローラから生じる。
【0050】
消去ブロックの電荷蓄積トランジスタ(メモリセル)の各行は、共にプログラムされかつ読み出されるページを形成してもよい。適切な電圧がそのようなページのワード線(WL)に印加されて、そのデータをプログラムしまたは読み出す一方で、残りのワード線に印加される電圧が、各蓄積トランジスタを導電状態にするために選択される。蓄積トランジスタの1つの行(ページ)をプログラムしまたは読み出す過程において、選択されていない行上の以前に記憶された電荷レベルが、すべての列に渡って印加された電圧とそのワード線に印加された電圧とによって乱される。これにより、特定の行のセルのプログラミングが当該行内の他のセルがプログラムされた後に妨げられる場合がある。多状態フラッシュメモリは、特に外乱の影響を受ける。論理状態の数が多くなる結果、個々の状態についてのしきい値電圧の範囲が狭くなり、これにより電荷レベルの小さな変化が、論理状態の変化を生じさせる場合がある。データ記憶密度がセル内の数の増えた論理状態を使用して増加されると、外乱に対する感度が増す。よって、行内のセルにデータをプログラムすることは、当該行内の他のセルがプログラムされた後では、当該プログラムされたセル内のデータを破損せずにはできない場合がある。よって、隣接するセルの後続のプログラミングからの外乱によってページサイズが規定されてもよい。ある行内のセルが同一の行内の他のセルのプログラミング後にプログラムできないような場合には、当該行によってプログラミングの最小単位が規定される。よって、セルの行は、データの1つのページを含んでもよい。そのようなメモリアレイにおいて、ある行のセル群をプログラムする場合に、当該行内のいくつかのセルがデータを含まない場合であっても、当該行はプログラムされたものとみなされる。後でメモリアレイ内にプログラムすることができない空のセルを有することは効率的でない。
【0051】
プログラムされたページ内の空のセルは、一度にメモリシステムによって受信される少数のセクタから生じてもよい。例えば、単一のセクタは、ホストによってメモリシステムに送られてもよい。セクタは、フラッシュメモリアレイのページ内に記憶される。セクタは、当該ページに対する後続の書き込みを阻止する。これは、ページが複数のセクタを保持するメモリシステムにおいて、効率的でない場合がある。例えば、ページがデータの4つのセクタを含む場合に、単一のセクタがページへ書き込まれる場合には、データの3つのセクタを保持可能なメモリアレイの部分が空のままになっている。ページサイズが大きくなるにつれて、そのような部分的に一杯なページからの無駄なスペースが増加する。メタページは、数多くのセクタを含んでもよいので、メタブロックを使用するメモリアレイにおいて、特に非効率な記憶となる場合がある。同様の問題は、2つ以上のセクタが受信されるが受信セクタの数がページ内のセクタの数より少ない場合にも生じる。そのような部分ページは、データの完全なページが受信されるまで、スクラッチパッドブロック内に記憶されてもよい。
【0052】
データが部分的に一杯のページへ書き込みを行った後で、記憶されたデータの統合を行って、部分的に一杯のページからのデータを一杯のページに結合してもよい。これは、周期的に行われるガーベッジコレクションの一部として行われてもよい。そのようなデータの統合により、部分的に一杯のページから、異なる消去ブロック内にある完全なページへデータがコピーされる。部分的に一杯のページを保持する消去ブロックは、その後、消去および再利用可能なように、古いものとしてマーク付けがなされる。そのような動作は、他の機能のためにも使用可能なシステムリソースを利用してもよい。
【0053】
メモリへの単一セクタ書き込みの例
図8は、消去ブロックである、ページがデータの4つのセクタからなるメモリシステム内のメモリアレイの指定アクティブブロック800を示す。ページ0〜5が示され、それぞれは水平方向に伸びている。各ページは、セクタ0,セクタ1,セクタ2,セクタ3として指定されたデータの4つのセクタを含んでもよい。ホストは、データの単一セクタをメモリシステムに送り、これらのセクタは、アクティブブロック800に記憶される。セクタXが受信されて、ページ0のセクタ0として記憶される。これにより、ページ0のプログラミングが阻害される。よって、ページ0のセクタ1,2,3はプログラムされず、空のままである(消去される)。ページ0がプログラムされた後に、セクタX+1が受信される。セクタX+1は、ページ1のセクタ0として記憶される。ページ1のセクタ1,2,3は空のままである。セクタX+1がプログラムされた後に、セクタX+2が受信される。セクタX+2は、ページ2のセクタ0として記憶される。ページ2のセクタ1,2,3は空のままである。セクタX+2がプログラムされた後に、セクタX+3が受信される。セクタX+3は、ページ3のセクタ0として記憶される。ページ3のセクタ1,2,3は空のままである。
【0054】
図9は、指定アクティブロック900である消去ブロック内にセクタを記憶するための一代替手法を示す。ここで、ページ毎に1つだけのセクタを記憶する代わりに、以前に記憶されたセクタが同一の消去ブロック内の新しいページへコピーされ、これらのセクタは、より最近受信されたセクタと共に記憶される。前述したのと同様に、セクタXが、ページ0のセクタ0として記憶される。その後、セクタX+1が受信され、セクタXがページ0からページ1のセクタ0へコピーされた状態で、セクタX+1は、ページ1のセクタ0として記憶される。よって、セクタXおよびセクタX+1は、共にページ1内に記憶される。その後、セクタX+2が受信され、ページ2のセクタ2として記憶される。セクタXは、ページ2のセクタ0として記憶され、セクタX+1は、ページ2のセクタ1として記憶される。よって、セクタX,X+1,X+2は、共にページ2に記憶される。その後、セクタX+3が受信され、ページ3のセクタ3として記憶される。セクタXは、ページ3のセクタ0として記憶され、セクタX+1はセクタ1として記憶され、セクタX+2は、セクタ2として記憶される。よって、ページ3が完全にデータで埋まるように、データの4つのセクタが、ページ3内に記憶される。
【0055】
図8または図9に示されているセクタの記憶に続いて、データは統合されてもよい。図8または図9のいずれかのセクタX,X+1,X+2,X+3は、新しい消去ブロックの単一のページへコピーされてもよい。これは、都合がよいときにはガーベッジコレクションの一部として行われてもよい。図10Aは、指定アクティブブロック1000のページ0に記憶されたセクタX,X+1,X+2,X+3を示す。消去ブロック1000のページ0は、データで埋まっている。アクティブブロック1100のページ0がセクタX,X+1,X+2,X+3でプログラムされる場合には、セクタX,X+1,X+2,X+3は、コピー元である消去ブロックから消去されてもよい。アクティブブロック800および900は、その内容がガーベッジコレクション中に統合される場合には消去されて、新しいデータを記憶するために利用可能となってもよい。
【0056】
ページ0のプログラミングの後に、セクタX+4が受信され、アクティブブロック1000のページ1のセクタ0として記憶される。その後、セクタX+5,X+6,X+7がそれぞれ受信され、ページ2,3,4内にそれぞれ記憶される。セクタX+4,X+5,X+6,X+7を単一のページに統合するために、セクタの統合が再び必要であってもよい。そのようなセクタの統合には時間がかかり、その間ホストデータは書き込まれなくてもよい。データの他の消去ブロックへの第2の統合の後、コピー元の消去ブロック1000は、古いものとしてマーク付けされて、その後に消去されてもよい。
【0057】
図10Bは、第2のガーベッジコレクション動作が以前のアクティブロック1000からのデータを再配置した後のアクティブブロック1010を示す。セクタX+4からX+7が、アクティブブロック1010の単一のページ(ページ1)に統合される。その後、より多くのセクタが受信され、アクティブブロック1010内に記憶されてもよい。それらのセクタが単一セクタの形態で受信される場合には、単一セクタは、前述したようにあるページ内に記憶されてもよい。
【0058】
図10Cは、ページ2〜5内に記憶された追加のセクタX+8からX+11を伴うアクティブブロック1010を示す。この時点でセクタX+8からX+11を統合するために、他のガーベッジコレクション動作が必要であってもよい。よって、単一セクタとしてホストから受信されるセクタを効率的に記憶するために、この方法は、データをある消去ブロックから他の消去ブロックへ転送して最初の消去ブロックを消去することを要する複数のガーベッジコレクション動作を使用する。より大きな消去ブロックにおいては、ガーベッジコレクション動作の数はより多くなる。メタブロックを使用するメモリシステムにおいては、消去ブロックが共に消去されかつ共にプログラムされるように、消去ブロック群がリンクされてもよい。データは、数多くのセクタを含むメタページ内にプログラムされてもよい。したがって、単一セクタを記憶することは、必要なガーベッジコレクションの量によって、非常に非効率的になる。
【0059】
図11Aは、データを記憶する代替方法を示す。図11Aは、メモリアレイの2つの消去ブロックを示す。アクティブブロック1110は、データが長期記憶のためにプログラムされるような消去ブロックである。スクラッチパッドブロック1120は、データが短期記憶のためにプログラムされるような消去ブロックである。少ない数のセクタが受信される場合、これらはスクラッチパッドブロック1120内にまず記憶される。セクタは、データのページを一杯にするのに充分なセクタが受信されるまで、スクラッチパッドブロック1120内に継続して記憶される。その後、これらのセクタは、アクティブブロック1110のページへコピーされる。
【0060】
セクタXが受信され、前述したように、スクラッチパッドブロック1120内のページ0のセクタ0としてプログラムされる。その後、セクタX+1が受信され、セクタXがページ1のセクタ0へコピーされた状態で、スクラッチパッドブロック1120のページ1のセクタ1として記憶される。その後、セクタX+2が受信され、セクタXおよびX+1がページ2のセクタ0とセクタ1とにそれぞれ記憶された状態で、スクラッチパッドブロック1120のページ2のセクタ2として記憶される。セクタX+2をスクラッチパッドブロック1120内に記憶した後に、セクタX+3が受信される。この時点で、セクタX,X+1,X+2,X+3は、アクティブブロック1110のページ0に書き込まれている。これら4つのセクタは、データの完全なページを形成する。よって、セクタX,X+1,X+2,X+3は、アクティブブロック1110のページ0内に効率的に記憶される。その後、セクタX+4,X+5,X+6,X+7がそれぞれ受信される。セクタX+4,X+5,X+6は、スクラッチパッドブロック1120のページ3,4,5内に記憶され、セクタX+7が受信されると、アクティブブロック1110のページ1のセクタ0,1,2へコピーされる。セクタX+7は、アクティブブロック1110のページ1のセクタ3へ直接プログラムされる。この時点で、スクラッチパッドブロック1120は、データを記憶するための利用可能なページを有しておらず、消去準備ができている(古いもの)として指定されてもよい。新しい消去ブロックを、受信される次のセクタまたはセクタ群用にスクラッチパッドブロックとして指定してもよい。この例は単一セクタが受信される様子を示すが、この方法は、セクタ群が、ページ内のセクタ数より少ない数のセクタを有するようなセクタ群用に使用されてもよい。また、前述した例は、データをスクラッチパッドブロックからアクティブブロックへ最大並列度で書き込むことを示すが、そのような書き込みは、最大未満の並列度で行われてもよく、それでも効率性の利点が提供される。よって、データがより高密度に詰め込まれ、かつガーベッジコレクションの頻度が少なくてすむように、セクタは、ある並列度でスクラッチパッドブロックへ書き込まれ、その後に、より高い並列度で他のブロックへ書き込まれる。
【0061】
スクラッチパッドブロックは、メタブロックを使用するメモリアレイ内で使用されてもよい。例えば、図11Bは、2つのメタブロックであるアクティブブロック1130およびスクラッチパッドブロック1140を示す。アクティブブロック1130およびスクラッチパッドブロック1140は共に、プレーン0〜3として示される4つのプレーンを有する。各プレーンは、幅が1セクタなので、4つのセクタがブロック1130または1140のメタページ内に記憶される。ブロックは共に、メタページ0〜5として示される6つのメタページを有する。データを効率的に記憶するための手法は、消去ブロックに関する前述したものと同一である。データの完全なメタページが利用可能になるまで、セクタは、スクラッチパッドブロック1140内に蓄積され、その時点で、完全なメタページが、アクティブブロック1130にプログラムされる。例えば、セクタX+3が受信されると、完全なメタページ(セクタX,X+1,X+2,X+3)が、アクティブブロック1130のメタページにプログラムされる。メタブロックは数多くのプレーンを有する場合があり、かつプレーンはその幅が数ページである場合があるので、メタページは、数多くのセクタを有する場合がある。そのような大きなメタページにとって、前述した手法は特に価値がある。なぜならば、そうでなければ無駄になってしまうメモリアレイ内のスペース量が大量だからである。図11Aおよび図11Bに関して示されているように、消去ブロック構造を使用する例に関して説明した本発明の態様を、メタブロック構造に適用してもよいし、その逆であってもよい。「ブロック」という用語は、メモリアレイの構成により、消去ブロックまたはメタブロックのいずれを示してもよい。いずれの場合においても、ブロックは、当該構成において使用される消去単位である。同様に、「ページ」という用語は、単一の消去ブロック内のページまたはメタブロックのメタページのいずれを指してもよい。いずれの場合においても、ページは、当該構成のためのプログラミング単位である。
【0062】
ページ内のセクタ数より多くを有するセクタ群が受信される場合、セクタは、スクラッチパッドブロック内にまず記憶されることなく、メモリアレイのアクティブブロックへ直接プログラムされてもよい。よって、データの完全なページが、高い並列度でアクティブブロックへ直接プログラムされてもよい一方で、データの部分ページは、完全なページのプログラミングの一部としてアクティブブロックへ書き込まれるようになるまで、低い並列度でスクラッチパッドブロックへプログラムされる。コントローラが、特定のセクタまたはセクタ群の宛先を判断してもよい。セクタ群をアクティブブロックへ書き込むことは、部分ページ書き込みおよび完全ページ書き込みの両方を含むことになり、完全ページは、アクティブブロックへ書き込まれ、部分ページはスクラッチパッドブロックへ書き込まれてもよい。
【0063】
図12Aは、ホストからのセクタがスクラッチパッドブロック内に記憶されている間に更新される、さらなる例を示す。第1のセクタX0 が受信され、スクラッチパッドブロック1250のページ0に記憶される。この例におけるページは、データの4つのセクタを記憶する。その後、X1 として示されているX0 の代わりが受信される。この例におけるセクタは、その論理アドレスに従って番号付けされ、下付き文字は、セクタが更新版であるかどうか、そしてもしそうであればどのバージョンかを示す。よって、セクタX1 は、論理アドレスがXのセクタであって、このセクタの第1の更新バージョンである。これは、X0 と同じ論理アドレスを有するデータのセクタであるが、何らかの更新された情報を反映している異なるデータを含む場合がある。セクタX1 は、スクラッチパッドブロック1250のページ1へ書き込まれる。コントローラは、どのセクタが現在のものでどれが古いものかを常時監視している。スクラッチパッドブロック1250において、特定の論理アドレスを有するセクタの直近に書き込まれたコピーが、現在のバージョンである。他のバージョンはどれも古いものである。よって、X1 がプログラムされると、セクタX0 は古いものとなる。X1 を受信後、セクタ(X+1)0 が受信される。これは、セクタX1 と論理的に連続するセクタである。セクタX1 および(X+1)0 は共に、ページ2へ書き込まれる。その後、セクタ(X+1)0 は(X+1)1 に置き換わる。これは、セクタ(X+1)0 を置き換えるセクタ(X+1)0 の更新バージョンである。セクタ(X+1)1 は、セクタX1 と共にページ3へ書き込まれる。その後、セクタ(X+2)0 が受信され、ページ4へ書き込まれる。(X+2)0 は、その後セクタ(X+2)1 に置き換わり、セクタX1 および(X+1)1 と共にページ5へ書き込まれる。その後、セクタ(X+3)0 が受信される。よって、データのページ(セクタX1 ,(X+1)1 ,(X+2)1 ,(X+3)0 )が利用可能である。セクタX1 ,(X+1)1 ,(X+2)1 ,(X+3)0 は、アクティブブロック1252として指定されたブロックへ書き込まれる。セクタX1 ,(X+1)1 ,(X+2)1 ,(X+3)0 は、完全ページ書き込みの並列度で、アクティブブロック1252へ書き込まれる。これは、この場合の予想最大並列度である。よって、セクタX1 ,(X+1)1 ,(X+2)1 ,(X+3)0 が低い並列度でスクラッチパッドブロック1250へ書き込まれた場合であっても、後で高い並列度でアクティブブロック1252へ書き込まれる。これは、セクタX1 ,(X+1)1 ,(X+2)1 ,(X+3)0 がアクティブブロック内により効率的に記憶されることを意味する。より効率的な記憶により、必要なガーベッジコレクションの頻度が減り、これによって性能が向上する。
【0064】
一代替例が図12Bに示されている。この例は、図12Aに示すものと類似しているが、ここでは、セクタ(X+3)0 が、アクティブブロック1252へコピーされる前に、スクラッチパッドブロック1250内に記憶されている。これにより、セクタ(X+3)0 をアクティブブロック1252へ書き込む前に更新することができる。図に示されているセクタ(X+3)0 は、セクタ(X+3)1 で置き換えることによって更新されている。データの完全ページ(セクタX1 ,(X+1)1 ,(X+2)1 ,(X+3)1 )は、スクラッチパッドブロック1250に保持されてもよく、何らかのトリガーイベントがあるまでは更新準備完了となっている。この場合、セクタ(X+4)0 が受信されて、トリガーイベントが提供される。セクタX1 ,(X+1)1 ,(X+2)1 ,(X+3)1 は、この時点で、最大並列度でアクティブブロック1252へ書き込まれる。セクタ(X+4)0 は、スクラッチパッドブロック1250内の次に利用可能なページ(ページ8)へ書き込まれる。
【0065】
図12Cは、スクラッチパッドブロック1250を使用してデータを更新する他の例を示す。データX0 から(X+15)0 のセクタが、元ブロック1254に記憶されている。ホストは、論理アドレスがセクタ(X+6)0 と同一の更新されたセクタであるセクタ(X+6)1 を送る。よって、セクタ(X+6)1 は、(X+6)0 を置き換えるものである。セクタ(X+6)0 を置き換えるために、元ブロック1254のページ1(セクタ(X+4)0 から(X+7)0 を含む)がセクタ(X+6)1 と結合され、この結合が、スクラッチパッドブロック1250のページ0へ書き込まれる。これらのセクタを結合することは、コントローラRAM25などのランダムアクセスメモリにおいて生じてもよく、メモリアレイに接続されているメモリレジスタ内で行われてもよい。更新されたページデータは、しばらくの間、アクティブブロックへ書き込むことなく、スクラッチパッドブロック1250内に保持されてもよい。後続の更新されたセクタ(X+5)1 がホストから受信されると、セクタ(X+5)1 がコピーされたセクタ(X+4)0 ,(X+6)1 ,(X+7)0 と共にスクラッチパッドブロック1250の他のページ(この場合、ページ1)へ書き込まれることによって、データは、スクラッチパッドブロック1250において更新されてもよい。スクラッチパッドブロック1250内のデータのページの複数の更新がこのように行われてもよい。更新は、更新されたセクタまたは複数のセクタを置き換えて、スクラッチパッドブロック1250の新しいページにデータの変更されなかったセクタをコピーすることによって行われる。コピーされたセクタは、効率的にコピーを行うことができるように、同一のプレーン内でコピーされる。その後、データの更新されたページは、メモリアレイ内のアクティブブロック1252へコピーされてもよい。無秩序な更新ブロックを要せずに、非連続の更新がこのように行われてもよい。例えば、前述した例において、更新されたセクタ(X+6)1 および(X+5)1 が非連続で受信されているが、アクティブブロック1252は連続的である。データの複数のページがこのようにスクラッチパッドブロック内で同時に保持および更新されてもよい。ページがもはや更新されることが予想されない場合には、ページは、アクティブブロックへコピーされてもよい。
【0066】
マルチレベルセルのプログラミングの例
ある種のメモリは、フローティングゲートメモリセルのしきい値電圧範囲を2つのレベルより多くに分割することによって、メモリアレイの各セル内に1ビットより多くのデータを記憶してもよい。図13は、そのようなマルチレベルセル(MLC)メモリを、互いに異なる論理状態を示す複数のしきい値電圧を提供するようにプログラムするやり方の例を示す。4つの互いに異なるしきい値電圧が、A,B,C,Dで示されている。複数のセルは、各電圧へプログラムされる。図13は、縦軸上に表されたセル数と共に、セル状態の分布を表している。各しきい値電圧A,B,C,Dは、異なる論理状態を表す。4つの状態は、2ビットのデータを表し、図に示されているように、1ビットは下位ページのデータを、1ビットは上位ページのデータを表す。ある例においては、下位ページが最初にプログラムされてもよい。下位ページのプログラミングの後で、セルは状態AまたはBとなる。その後、セルが状態AまたはB(上位ビット=1なので)のいずれかのままであるように、または状態CまたはD(上位ビット=0なので)に修正されるように、上位ページがプログラムされてもよい。これらの4つの状態は、それぞれ比較的狭い電圧ウィンドウを有するので、MLCメモリは、しきい値電圧の比較的小さな変化によるデータの破損を特に受けやすい。ある例では、下位および上位ページの両方を同時にプログラムするのが有利なこともある。これにより、上位ページデータのプログラミング中に生じるであろう破損といった、隣接するセルのプログラミングによって生じたセル内のデータの破損を減少させる助けとなりうる。
【0067】
図14は、スクラッチパッドブロック1460がMLCメモリ内のデータの破損を減少させるためにどのように使用されうるかの一例を示す。図14は、アクティブブロック1462およびスクラッチパッドブロック1460の両方をMLCメモリのブロックとして示す。両方のブロックは、番号付けがなされ、どのしきい値電圧状態がページのデータのビットを記憶するために使用されるかによって、「上位」または「下位」のいずれかとして示されている。この例において、メモリは、セクタXからX+3をまず受信して、スクラッチパッドブロック1460の下位ページ0内にこれらのセクタを記憶する。その後、メモリはセクタX+4からX+7を受信する。このとき、下位ページ(セクタXからX+3)および上位ページ(セクタX+4からX+7)は、同時にアクティブブロック1462へ書き込まれる。これにより、アクティブブロック1462の上位ページ0のプログラミング中にアクティブブロック1462の下位ページ0が破損することを防止することができうる。典型的には、このシステムが時間的な不利益がないように、上位および下位ページを共にプログラムするのに必要な時間は、上位ページだけをプログラムするのに必要な時間と同一である。セクタXからX+7でのアクティブブロック1462の下位ページ0および上位ページ0のプログラミングの後、セクタX+8からX+11が受信され、スクラッチパッドブロック1460の上位ページ0へプログラムされる。セクタX+12からX+15が受信されると、セクタX+8からX+11およびセクタX+12からX+15は、アクティブブロックの上位ページ1および下位ページ1へ並列的にプログラムされる。このシステムは、図に示されているように、データの後続セクタに対して継続する。よって、データのページは、スクラッチパッドブロック1460へ書き込まれて、その後、このページは、メモリセルの同一群の上位および下位ページとして、追加のページと共にアクティブブロック1462へ書き込まれる。スクラッチパッドブロック1460へのプログラミングは、ページの並列度で生じる一方で、アクティブブロック1462へのプログラミングは、ページの並列度の2倍で生じる。
【0068】
一代替の実施形態において、上位および下位ページがアクティブブロックへ互いに異なるときに書き込まれてもよいが、アクティブブロック内の下位ページが上位ページのプログラミング中に破損した場合には、下位ページのコピーは、スクラッチパッドブロックに保持される。図14において、セクタXからX+3が受信されて、アクティブブロック1462の下位ページ0と、スクラッチパッドブロック1460の下位ページ0との両方へ同時にプログラムされてもよい。その後、セクタX+4からX+7が受信されて、アクティブブロック1462の上位ページ0へプログラムされる。セクタX+4からX+7は、スクラッチパッドブロック1460内に保存されない。セクタX+4からX+7のアクティブブロック1462の上位ページ0へのプログラミング中に何らかの問題(電力消失など)がある場合には、アクティブブロック1462の下位ページ0内のデータも破損している可能性がある。すなわち、プログラミング中のセルのしきい値電圧が、もはや下位ページのデータを表す状態でないはないが、上位ページのデータを表す状態になるまでは完全にプログラムされていないといったように修正されている可能性がある。例えば、図13における状態Aから状態Dへプログラムされているセルは、プログラミングが停止したときには状態BまたはCである可能性がある。データがこのように破損される場合、書き込み中のデータの上位ページは、コピー元の位置から回復されてもよい。しかし、多くの場合、下位ページの他のコピーは存在しない。ここで、下位ページのコピーは、上位ページのプログラミングが完了するまで、スクラッチパッドブロック1460内に保持されている。よって、下位ページの破損されていないコピーが存在し、下位ページのデータを回復するために使用されてもよい。
【0069】
複数ファイルの例
1つ以上のホストデータファイルからのデータが、単一ブロックに記憶されてもよい。ページの一部があるファイルからのデータを含み、ページの一部が他のファイルからのデータを含むように、ページ内でファイル間の区切りが生じる場合がある。図15は、元ブロック1570のページ0からページi−1が第1のファイル(ファイル1)からのデータを含み、ページi+1からページn−1が第2のファイル(ファイル2)からのデータを含む例を示す。ページiは、ファイル1からのセクタ(i*4)および(i*4)+1と、ファイル2からのセクタ(i*4)+2および(i*4)+3とを含む。2つのファイルからのセクタがあることを示すために、ファイル2のセクタは、網掛け表示されている。
【0070】
図15は、ファイル2が新しいブロック1572に更新される様子を示す。新しいブロック1572の第1のページ(ページ0)は、元ブロック1570のページiの内容で書き込まれる。よって、新しいブロック1572のページ0は、ファイル2およびファイル1の両方からのセクタを含む。ファイル1からのセクタ(i*4)および(i*4)+1は、この時点では更新されないが、データの完全ページをプログラムするためにコピーされてもよい。更新されたファイル2の残りは、新しいブロック1572のページ1からi−1へプログラムされる。その後、ファイル1が更新される。セクタ0からセクタ(i*4)−1は、ページiからページn−1内に記憶される。しかし、セクタ(i*4)および(i*4)+1は、ファイル1の一部でもあり、更新されなければならない。新しいブロック1572はこの時点で一杯なので、更新されたセクタ(i*4)および(i*4)+1は、他のブロックへプログラムされる。その後、セクタ(i*4)および(i*4)+1ならびに新しいブロック1572内のセクタは、ガーベッジコレクション動作の一部として、単一ブロックに統合されてもよい。しかし、これには時間とシステム資源がかかり、一般的には望ましくない。
【0071】
図16は、2つの互いに異なるファイルからのセクタを含む図15の元ブロック1570のセクタを更新するための一代替手法を示す。この手法は、スクラッチパッドブロック1674を使用して、更新されたセクタを、完全に更新されたページの一部としてシステムの最大並列度で書き込まれてもよいようなときまで記憶する。ファイル2が更新されると、更新されたセクタ(i*4)+2および(i*4)+3は、スクラッチパッドブロック1674へ書き込まれる。ここで、これらのセクタは、スクラッチパッドブロック1674のページ0へ書き込まれ、低い並列度が使用される残りのページへはデータは書き込まれない。ファイル2の残りのセクタ(セクタ(i*4)+4からN−1)は、新しいブロック1676のページ0からn−1へコピーされる。これらのセクタは、最大並列度を使用する完全ページ書き込みですべて書き込まれる。その後、ファイル1が更新される。セクタ0から(i*4)−1は、ページn−i+1からn−2へ最大並列度でプログラムされる。その後、ファイル1のセクタ(i*4)および(i*4)+1は、セクタ(i*4)+2および(i*4)+3を新しいブロック1676のページn−1へコピーするのと並列して書き込まれる。よって、元ブロック1570内に以前保持されていたすべてのセクタの更新されたコピーは、現在、新しいブロック1676内に保持され、新しいブロック1676には古いデータは保持されていない。一般的に、新しいブロック1676などのブロックに対してガーベッジコレクションを行う必要はない。新しいブロック1676の各ページは、最大並列度でプログラムされて、ブロック内のデータの最大密度を達成する。スクラッチパッドブロック1674内のセクタ(i*4)+2および(i*4)+3は、この時点で古いものとしてマーク付けされてもよい。しかし、スクラッチパッドブロック1674は、ガーベッジコレクション動作を必要とせずにさらなる動作のために使用されてもよい。なぜならば、スクラッチパッドブロックは、定期的に現在および古いデータを両方含むからである。
【0072】
データの非連続セクタの記憶の例
以前の例の中には、完全ページを書き込むよりも低い並列度でデータのセクタをスクラッチパッドブロックへ書き込むものがあった。そのような例において、書き込み中のスクラッチパッドブロックのページ内の残りのスペースは、空のままである場合がある。なぜならば、既に記憶されたデータを妨害せずに後にプログラムすることができないからである。ある場合には、このようなともすれば空のスペースと、ともすれば未使用のプログラミング帯域幅を使用して、同一のページ内に関連性のないデータを記憶することができる。例えば、メモリシステムが単一セクタまたはページより小さいセクタ群内のホストデータを受信する場合、ホストデータのこれらのセクタを、関連性のないホストデータなどの関連性のないデータまたは制御データのセクタも保持するページ内のスクラッチパッドブロック内に記憶してもよい。同様に、完全ページの一部として後に記憶されるスクラッチパッドブロック内に記憶中のファイルの最初からのセクタが、論理的に関連性のない、同一のスクラッチパッドブロックのページに記憶された追加のセクタを有していてもよい。
【0073】
図17は、以前の例のように、セクタX,X+1,X+2がスクラッチパッドブロック1780内に記憶される場合の一例を示す。しかし、ここで、セクタX,X+1,X+2を保持するスクラッチパッドブロックのページ内の残りのスペースを、他のデータを記憶するために使用する。セクタY,Y+1,Y+2が、ページ0内にセクタXと共に記憶される。セクタY,Y+1,Y+2は、セクタX,X+1,X+2と論理的に関連性がなくてもよい。これらのセクタは、他のホストデータファイルからのものであってもよく、または同一のファイル内のセクタの他のクラスタからのものであってもよい。セクタY,Y+1,Y+2は、セクタX,X+1,X+2と連続していなくてもよく、論理アドレススペース内で分離されていてもよい。同様に、セクタZおよびZ+1が、セクタXおよびX+1と共にページ1内に記憶される。セクタZおよびZ+1は、セクタX,X+1,X+2およびセクタY,Y+1,Y+2の両方に論理的に関連性がなくてもよい。その後、X+3が受信されると、セクタX,X+1,X+2,X+3は、他のブロックのページへ書き込まれる。その後、Y+3が受信されると、セクタY,Y+1,Y+2,Y+3は、他のブロックのページへ書き込まれる。よって、利用可能な資源をより効率的に使用するために、関連性のないデータは、スクラッチパッドブロックの同一のページ内に記憶されてもよい。
【0074】
図18は、スクラッチパッドブロック1890内に記憶された関連性のないデータの他の例を示す。ここで、セクタX,X+1,X+2は、前述したように記憶され更新される。しかし、ここで、セクタYも並列的に記憶され更新される。更新されたセクタは、どのバージョンが記憶されているかを示す下付き文字によって表される。例えば、セクタX0 は、セクタX元バージョンである一方で、X1 は、セクタXの第1の更新バージョンである。セクタYは、頻繁に更新される制御データセクタまたはホストデータのセクタであってもよい。あるシステムにおいて、FAT情報などの制御データは、ホストデータが記憶される際に更新される。少量のホストデータが受信される場合、スクラッチパッドブロック1890内の制御データを更新するのは利点でありうる。これにより、制御データの単一セクタのみが更新される制御構造を更新することを避けるようにしてもよい。後の時点で、スクラッチパッドブロックからの制御データを使用して、制御データ構造を更新してもよい。
【0075】
スクラッチパッドブロック管理
スクラッチパッドブロックは、メモリアレイ内の指定されたブロックであってもよい。固定物理位置が、スクラッチパッドブロックとして選ばれてもよい。しかし、これは、メモリアレイを不均一に消耗させる結果となる場合がある。代わりに、スクラッチパッドブロックが古いデータで一杯になると他の消去ブロックがスクラッチパッドブロックとして選ばれるように、指定されたブロックは時々変更されてもよい。この場合において、メモリコントローラによって使用されるデータ構造により、スクラッチパッドブロックの位置が識別されてもよく、または、コントローラがメモリアレイの消去ブロックを走査した場合にどの消去ブロックがスクラッチパッドブロックであるかを判断するように、指定されたスクラッチパッドブロックがマーク付けされてもよい。スクラッチパッドブロックは、セクタを使用してマーク付けされて、それがスクラッチパッドブロックであると識別されるようにしてもよい。例えば、図19は、スクラッチパッドブロック2100の第1のセクタとしてのマーク付けセクタ2110を示す。カードに電源が投入されると、メモリアレイの消去ブロック(またはメモリアレイの一部分)が走査されて、1つのスクラッチパッドブロックまたは複数のスクラッチパッドブロックの位置を判断してもよい。図19の例において、各消去ブロックの第1のセクタが読み出されて、スクラッチパッドブロックを示すマーク付けセクタかどうかが判断される。
【0076】
データは、データ群としてスクラッチパッドブロックへ書き込まれてもよい。データ群は、ホストから受信されたセクタの論理的に連続した群である。データ群がスクラッチパッドブロック内に記憶される場合、記憶されたデータ群についての情報を提供するインデックスセクタも書き込まれる。データ群のセクタの位置が、インデックスセクタ内に記憶されてもよい。複数のデータ群を記憶するために、図19のスクラッチパッドブロック2100などのスクラッチパッドブロックを使用してもよい。図20は、1つのデータ群を記憶するスクラッチパッドブロック2100を示す。データ群1は、2つのセクタ2220および2221からなる。これらのセクタと、マーク付けセクタ2110と、インデックスセクタ2230とが、スクラッチパッド2100に記憶される。インデックスセクタ2230は、群1についての情報を記憶する。
【0077】
図21は、2つのセクタ2340および2341からなるデータ群2がプログラムされた後の、図20のスクラッチパッドブロック2100を示す。インデックスセクタ2350は、群1および群2についての情報を記憶する新しいインデックスセクタである。よって、インデックスセクタ2230は、古いものである。なぜならば、インデックスセクタ2350は、群1を含むスクラッチパッドブロック2100のデータ群の完全な記録を含むからである。
【0078】
図22は、3つのセクタ2460,2461,2462からなるデータ群3のプログラミング後の、図21のスクラッチパッドブロック2100を示す。インデックスセクタ2470は、群1,2,3についての情報を記憶する新しいインデックスセクタである。よって、インデックスセクタ2470は、スクラッチパッドブロック2100のデータの完全な記録を含むので、インデックスセクタ2350は古いものとなる。
【0079】
図23は、データ群1およびデータ群2がスクラッチパッドブロック2100から読み出されて、メモリアレイの他のブロック内の単一のページとして書き込まれた後の、図22のスクラッチパッドブロック2100を示す。インデックスセクタ2560は、データ群3についての情報を記憶する。スクラッチパッド2100内のデータ群1およびデータ群2は、古いものであり、別のところに記憶されているので、インデックス付けは必要ない。よって、インデックスセクタ2560は、スクラッチパッドブロック2100内にすべての現在のデータの完全な記録を含む。
【0080】
ホストがメモリアレイに対してデータのあるセクタまたは複数のセクタを要求する場合、コントローラは、要求されたセクタがスクラッチパッドブロック内にあるかどうかをまずチェックしてもよい。セクタがスクラッチパッドブロック内にない場合には、セクタは、通常のやり方で探索されてもよい。よって、スクラッチパッドは、メモリアレイ内のデータのセクタの位置を常時監視するために使用される通常のメディア管理の変更を要求しない。
【0081】
マルチストリーム更新およびインデックス付け
図24は、従来の方法によって単一セクタのページを有する更新ブロック内に更新が記憶されることによって更新される、論理群内のセクタの例を示す。データは論理セクタにパッケージ化されて、メタブロック(「ブロック」とも略称される)に記憶され、ここでは、メタブロックのすべての論理セクタは共に消去可能である。データはブロックにページ毎に記録され、各ページ内のすべての論理セクタは共にプログラム可能である。この例は、各セクタは典型的には約512バイトのサイズである、単一セクタのページを示す。ある場合には、「元」ブロック10が、昇順論理セクタ番号の順序などの所定の順序に従ってそこに記憶されたセクタの全論理群と共に形成される。例えば、ブロックは、好ましくは連続順で論理群のすべてのセクタをそのまま有するそのままの (intact) ブロックとみなされる。
【0082】
その後、ホストが論理群の論理セクタのうちのいくつかの最新バージョンとして更新を送出すると、更新されたセクタは、論理群専用の更新ブロック20に書き込まれる。更新データが所定の順序であることがわかると、更新ブロックに連続して記録できることがある。更新ブロックは、そのままのブロックになる可能性のある連続更新ブロックとみなされる。その一方で、更新セクタが連続順でない場合には、更新ブロックは非連続または「カオス的」とみなされる。この場合、セクタの最新バージョンが最終的にはどこか別の場所へコピーされて、新たなそのままのブロックを形成することになる。
【0083】
ホスト書き込み#1では、更新された論理セクタLS10’がメモリに送出されて、更新ブロック20のページ0に記録される。ホスト書き込み#2では、更新された論理セクタLS11’がメモリに送出されて、更新ブロック20内の次に利用可能な位置であるページ1に記録される。ホスト書き込み#3では、更新された論理セクタLS6’およびLS7’がページ2およびページ3にそれぞれ記録される。最後に、ホスト書き込み#4では、更新された論理セクタLS10’’がメモリに送出されて、更新ブロックのページ4に記録される。論理群の更新は、更新ブロックからホストへの更新データストリーミングと共に、例えばストリーム1などのストリームを形成するといえる。一般的に、元ブロックおよび更新ブロックのうちで分配される論理セクタの複数のバージョンがある場合に、最新の書き込みバージョンのみが、すべての過去のバージョンを古いものにする有効なものとなる。例えば、図24は、最新の書き込みバージョンである更新ブロックのページ4に記録されたLS10’’を示すので、これは論理セクタ番号10のデータについての最新の有効セクタである。過去のバージョンである、元ブロック10内のLS10および更新ブロック20内のLS10’は、古いものである。
【0084】
最終的に、更新ブロックは閉じられ、また更新ブロックと元ブロックとの間の有効セクタ(論理セクタの最新バージョン)が所定の順序で統合されて新しい元ブロックを形成することになる。古い元ブロックおよび更新ブロックは、再利用される。
【0085】
図25は、ページはマルチセクタでありかつ一度書き込み可能であると思われる、メモリに対して適用されるような図24に示されている書き込みの同一シーケンスを示す。このページの構成例が図24に示されているものと異なる点は、各ページが今度は1つではなく4つのセクタを含み、ある実施形態においては消去後に一度だけ書き込み可能なことである。既存の用語法に従って、メモリ装置が課するプログラミングの最小ユニットを「物理ページ」と称し、システムが課するプログラミングの最小ユニットを「メタページ」と称し、これが複数の物理ページから構成されてもよい。便宜上、「メタページ」および「ページ」は、別途規定のない限り交換可能に使用されるものとする。
【0086】
前述したのと同様に、各論理セクタは、元々は、元ブロック10に論理番号の昇順で連続して記憶されている。ブロックが4つのセクタのページ構成を有する場合には、ブロックは、さらにページに分割されることになり、各論理セクタは、好ましくは、各ページにおける明確なページオフセットを有する。例えば、ページP0は、論理セクタLS0〜LS3を内部に記憶している。よって、LS0は、ページの4つのスロットの1番目に記憶され、LS1は、第2のスロットに記憶されている、といった具合である。4つのセクタページの例において、所定のセクタLSnについてのページオフセットは、ブロックの第1の論理セクタがLS0という番号が付されていた場合、MOD[(n+1),4]によって与えられることになる。
【0087】
ホストがメモリに書き込むたびに、データユニット、典型的には論理セクタの番号を書き込むための書き込みコマンドを発行し、その後、論理セクタ自体を送信する。データの損失を防止するために、ホストとメモリとの間のプロトコルは、現在の書き込みデータがうまくメモリに書き込まれた後でなければ次のホスト書き込みは開始しないようなものとなっている。
【0088】
前に説明したように、マルチセクタページを伴うメモリ構造において、ページ内でセクタ整列を実施するのが好ましい。なぜならば、こうすれば、ガーベッジコレクション中に再整列をする必要性を回避するからである。よって、各ホスト書き込みから受信されたセクタは、整列の際には、ページの整数番号を更新ブロックに記入する必要はない。この結果、プログラミング中のページが部分的にしか一杯でないということになりうる。部分的に一杯のページは、ホストデータ前または後に空隙を有する場合がある。このような空隙は、できるだけ連続順序を維持するために、既存の論理セクタで前パディングまたは後パディングすることができる。次のホスト書き込みが次の論理セクタになるといけないので、部分ページを後パディングしないのが一般的に好ましい。しかし、一度書き込み可能なページを伴うメモリ構造の場合には、一旦書き込まれたら部分ページの一杯でない部分を再書き込みするというオプションはない。
【0089】
前述した例において、更新ストリーム(SPB)のうちの1つの中の有効なページ数がオプションとして1つに限定されていた。これは、原則を示すのには充分であるが、注意すべきなのは、1つより多くのページをSPBに記憶することができ、そこにおいては、最新の書き込みセクタを見つけるためにさらに多くの情報(例えば、より古い書き込みポインタ)を分析する必要がある。
【0090】
例えば図25において、ホスト書き込み#1では、更新されたセクタLS10’は更新ブロック20のページP0の第3のオフセットに記憶される。オプションとして、完全性のためには、第1の2つのスロットを、元ブロック10からのLS8およびLS9などの有効データでパディングすることができる。しかし、これでは、ページP0がホスト書き込み#1の最後に保存される際に、第4のスロットはまだ一杯となっていない。オプションとして、部分ページをLS11の最新バージョンでパディングすることができる。ページは一度書き込み可能なので、一杯でない第4のスロットは、さらなるプログラミングのために閉じられることになる。
【0091】
ホスト書き込み#2では、コマンドは、受信され更新されたセクタLS11’を書き込むことであり、これは、最終セクタLS10’から連続順序であることがわかる。理想的には、これは、P0内のLS10’の後の次のスロットに記録されるべきである。しかし、P0はさらなる書き込みに対して閉じられたので、LS11’が最終スロットにおける次の空ページP1に記憶され、これがその適切なページオフセットである。P1の第1の3つのスロットは、LS8,LS9,LS10’でパディングし、これらは、LS11’に連続して先行する論理セクタの有効バージョンである。
【0092】
ホスト書き込み#3では、コマンドは、LS6’およびLS7’を書き込むことである。これらは、それぞれ第3および第4のスロットにおける更新ブロック内の次の空ページであるP2に書き込まれる。第1および第2のスロットは、LS4およびLS5などの有効データでパディングされる。
【0093】
最後に、ホスト書き込み#4では、コマンドは、LS10’’を書き込むことであり、これがP3、スロット3に記憶される一方で、スロット1および2は、LS8およびLS9でそれぞれパディングされ、スロット4は、空のままとなる。
【0094】
更新ブロックが多くのパディングおよび無駄なスペースと共に非効率に使用される一方で、一度プログラム可能な各ページ内でのセクタ整列を維持しようとしていることがわかる。好ましくない特徴の1つは、ホストが連続して書き込んでも(2つの別個の書き込みコマンドにおいてセクタ10、その後11)、更新ブロックは連続的であることを止めてしまい、なんらかの古いデータを有するので、そのままの状態になることができない。
【0095】
前述した問題を回避して、部分的に一杯なページによる更新ブロック20内への非効率な記憶および過度のパディングを最小限にするために、追加のスクラッチパッドブロック30を使用することを前に説明した。スクラッチパッドブロック(SPB)30は、更新ブロック20に書き込まれる前にデータの完全ページをステージすることができるように、入力データに対する一時バッファおよびステージ領域としての役割を果たす。前述した4つのセクタのページの例において、4つのセクタが書き込まれて更新ブロック内のページを完全に一杯にするように、セクタはステージされる。ホストが別個の書き込みで連続データを書き込む場合、SPBにより、部分ページ書き込みをバッファリングすることができ、更新ブロックの連続性を維持することができる。しかし、これは、元ブロックおよび更新ブロックに加えて今度は有効データが、SPB上で分散してもよいことを意味する。
【0096】
便宜上、スクラッチパッドブロックのページサイズは、更新ブロックのそれと一般的には異なりうるが、同一であるとする。例えば、メモリシステムが物理ページレベルにおけるプログラミングをサポートしている場合には、スクラッチパッドブロックのページは、物理ページのサイズを有することができる。
【0097】
スクラッチパッドブロックおよび更新ブロックインデックス管理
ブロック管理を伴うメモリシステムが、2004年8月13日出願の米国特許出願第10/917,725号(特許文献22)に開示されている。この特許出願は、その全体が本願明細書において参照により援用されている。ブロック管理は、更新中のデータの各論理群と関連付けられる更新ブロックを提供する。開示されているのは、元ブロックまたは更新ブロック上のいずれかに存在するような有効データを捜し当てるための様々なインデックス付け手法例である。特に、更新ブロックが非連続順序の論理セクタを含む場合には、「カオス的更新ブロック」とみなされる。カオス的更新ブロックインデックス(「CBI」)を使用して、カオス的更新ブロックに記録された論理セクタを追跡する。
【0098】
スクラッチパッドブロックに保存されたSPBI/CBIインデックス
本発明の他の態様によれば、更新ブロックに加えてスクラッチパッドブロックを使用する場合に、関連するスクラッチパッドブロックインデックス(SPBI)を使用して、スクラッチパッドブロックに記録された更新セクタを追跡する。これは、更新ブロックに記録された論理セクタを追跡するために使用されるインデックス(例えば、「CBI」)に対する追加である。ユーザデータがスクラッチパッドブロックの部分ページに記憶される場合はいつでも、ページの少なくとも最終スロットが一杯ではないということになる。一実施形態において、スクラッチパッドブロック内の部分ページの最終スロットにSPBIを記憶することができる。好ましい一実施形態において、SPBIおよびCBIをSPBI/CBIセクタ内にパッケージ化して、いずれにしても使用されないスクラッチパッドブロック内の部分ページの最終スロットに記憶することができる。新しい部分ページが書き込まれる度に、更新されたSPBI/CBIセクタが終端スロットに書き込まれ、すべての過去のバージョンは古いものとなる。
【0099】
図26は、本発明の一般的な一実施形態に係る、第1のメモリブロックを第2のメモリブロックと共に使用し、記憶されたデータのインデックスを第2のブロックに保存することによって、データを更新する方法を示すフローチャートである。
【0100】
ステップ80:それぞれデータを連続的に記憶するための第1および第2の不揮発性記憶装置を提供する。
【0101】
ステップ81:第1および第2の不揮発性記憶装置に記録されたデータの少なくとも1つのインデックスを保持する。
【0102】
ステップ82:入力データを受信する。
【0103】
ステップ84:バッファリングされた入力データを第1の記憶装置に記録するための第1の所定の条件が満たされたかどうかを判断する。満たされていれば、ステップ85へ進み、そうでなければステップ86へ進む。
【0104】
ステップ85:バッファリングされた入力データを第1の記憶装置に記録する。ステップ88へ進む。
【0105】
ステップ86:バッファリングされた入力データを少なくとも1つのインデックスと共に第2の記憶装置に記録する。ステップ88へ進む。
【0106】
ステップ88:処理すべき入力データがもうなければ、ステップ72へ進み、そうでなければ処理を終了する。
【0107】
図27Aは、本発明の好ましい一実施形態に係る、更新ブロックをスクラッチパッドブロックと共に使用することによって、データを更新してインデックスを保持する特定の一例を示す。各ブロックは、メタブロックであって、すべてのそのメモリ位置は共に消去可能である。ブロックはページに編成され、そこでは、ページ内のすべてのメモリ位置は共にプログラム可能である。さらに、各ページは、1つより多くのセクタを記憶するサイズを有し、ブロックが消去される度に一度書き込み可能である。
【0108】
スクラッチパッドブロック(「SPB」)30が、更新ブロック(「UB」)20に加えて提供される。「ストリーム1」を使用して更新ブロック20に対するデータのフローをラベル付けする場合には、スクラッチパッドブロック30に対する対応するフローが「ストリーム0」にラベル付けされることになる。
【0109】
図24および図25における同一のホスト書き込みの例を使用して、図27Aに示されている本発明の利点を示すことにする。ホスト書き込み#1では、コマンドは、LS10’を書き込むことである。LS10’はスロット3を占有しなければならないので、完全ページは更新ブロック20に書き込むことはできない。代わりに、SPB30の新しいページにおいてバッファリングされることによって、ステージされる。よって、LS10’は、SPB30の次に利用可能な部分ページPP0のスロット3に記憶される。同時に、スロット1および2は、オプションとして、LS8およびLS9でそれぞれパディングされる。また、本発明の特徴によれば、SPBIおよびCBIは両方とも、セクタ、すなわち、SPBI/CBI1 50内にパッケージ化され、インデックスセクタ50は、好都合なことに、部分ページPP0の最後の未使用のスロットに記憶される。
【0110】
ホスト書き込み#2では、コマンドは、LS11’を書き込むことである。LS11’はスロット4に属するので、SPB30から連続するLS8,LS9,LS10’で前パディングされた完全ページを、更新ブロック20の次に利用可能なページP0に書き込むことができる。この場合、SPBI/CBIのためのインデックスセクタは更新されない。なぜならば、SPB30内の部分ページに対して書き込んでいないからである。整列は、SPBにおける前パディングと共に好ましいが、オプションである。
【0111】
ホスト書き込み#3では、コマンドは、LS6’およびLS7’を書き込むことである。これらはスロット3および4にそれぞれ属している。よって、先立つスロットがLS4およびLS5でパディングされると、更新ブロック20の他の完全ページであるP1が書き込まれる。同様に、SPBI/CBIのためのインデックスセクタは更新されない。なぜならば、SPB30内の部分ページに対して書き込んでいないからである。
【0112】
ホスト書き込み#4では、コマンドは、LS10’’を書き込むことである。LS10’’はスロット3に属するので、SPB30の次の部分ページPP1に書き込まれることになる。同様に、先立つスロット1および2はLS8およびLS9でパディングされる一方、最終スロットも、インデックスセクタSPBI/CBI3 の最終更新と共に記憶されることになる。
【0113】
図27Aに示されている手法は、ホスト書き込み#4の最後に更新ブロック20を使用する場合と図25に示されているものとを比較すると明らかなように、更新ブロックをより効率的に使用している。同一のホスト書き込みについて、図27Aに示されている手法は、費やす記憶装置は少なく、更新ブロック内で必要なパディングも少ないが、これはスクラッチパッドブロック30を犠牲にするものである。同時に、インデックス付け手法は、スクラッチパッドブロック内の未使用の記憶装置を有利に利用して、不揮発性メモリにインデックスを記憶する。
【0114】
本発明の重要な特徴および利点の1つは、図25に示されている例とは違って、更新ブロックにおける更新セクタの連続順序が、一連の連続した論理セクタの別個のホスト書き込み中に保持されることである。これは、図27Bに示されている例から明らかである。
【0115】
図27Bは、本発明の好ましい一実施形態に係る、更新ブロックをスクラッチパッドブロックと共に使用することによって、保持されているデータを更新する連続順序付けの他の例を示す。この例において、論理セクタLS10’〜LS16’は連続するが、数多くの別個のホスト書き込みに対して書き込まれる。
【0116】
ホスト書き込み#1では、LS10’が書き込まれる。これは、ページエンドスロットではないページのスロット3を占有することになるので、スクラッチパッドブロック30のスロット3に記録される。同時に、インデックスSPBI/CBI1がページエンドスロットに記録される。
【0117】
ホスト書き込み#2では、LS11’が書き込まれる。これは、ページエンドスロットを占有することになるので、更新ブロック20内の新しいページの最終スロットへ直接記録される。同時に、スクラッチパッドブロックに一時的に記憶されたLS10’は、スロット3に対してコピーされる一方で、スロット1および2は、元またはそのままのブロック10からのLS8およびLS9で前パディングされる。
【0118】
ホスト書き込み#3では、LS12’〜LS14’が書き込まれる。どれもエンドページオフセットを有しないので、スクラッチパッドブロック内の新しいページのスロット1〜3に記憶される。同時に、更新されたインデックスSPBI/CBI3がページエンドスロットに記録される。
【0119】
ホスト書き込み#4では、LS15’およびLS16’が書き込まれる。LS15’はページエンドスロットに当てはまるので、更新ブロック内の次のページの最終スロットへ直接書き込まれる。同時に、スロット1〜3がスクラッチパッドブロックからのLS12’〜LS14’で埋められる。
【0120】
連続論理セクタLS10’〜LS16’は、いくつかの別個のホスト書き込みに渡って書き込まれるにもかかわらず、連続的なやり方で、更新ブロックに記録されることがわかる。
【0121】
好ましい実施形態において、1つの有効な部分ページ(例えば、最終書き込み部分ページ)が、スクラッチパッドブロックの論理群毎に保持される。本発明は、スクラッチパッドブロック内の論理群毎に保持される1つより多くの有効部分ページを有する場合にも等しく適用可能である。その場合には、記録されたセクタを探し当てるために、1つより多くのページからのインデックス情報を分析する必要がある。
【0122】
スクラッチパッドブロックのページ内のセクタ整列およびパディングは好ましいが、オプションである。整列およびパディングは、後続の更新ブロックへの転送を促進することになる。
【0123】
更新ブロックのページ内での絶対セクタ整列は、あるメモリ構造におけるインデックス付けおよびコピーを簡素化することになる。また、ページ内のセクタは、たとえページ内のすべての連続セクタがいくつかのスロット数だけ循環的にシフトされる場合であっても、ページ整列されているとみなされる。その場合に、ページ内の第1の論理セクタの位置を示すページタグが、オフセットアドレスを提供することになる。
【0124】
図に示されている好ましい実施形態は、2つの記憶装置を別々の消去可能なブロックとして有している。一般的に、本発明は、メモリの2つの部分である2つの記憶装置に対して等しく適用できる。
【0125】
また、本発明は、それぞれが1ビットのデータを記憶するメモリセルを有する2状態メモリと、それぞれが1ビットより大きなデータを記憶することができるメモリセルを有する多状態メモリとに対して等しく適用できる。マルチページ記憶装置をサポートする多状態メモリについて、スクラッチパッドブロックの記憶動作には下位ページが好ましくは使用される。書き込むための第1のセクタが複数スロットページのスロット1の位置から開始しない場合には、部分ページを前パディングするのが好ましい。
【0126】
カオス的ブロックにはページレベルインデックス付けが使用され、スクラッチパッドブロックにはセクタレベルインデックス付けが使用される。すべてのカオス的ブロックおよびスクラッチパッドブロック、すなわち、SPBI/CBIをアクセスするために必要なすべてのインデックス付け情報は、コントローラSRAMに保持されて、迅速なアクセスおよび処理に供される。当該情報は、新しい部分ページが書き込まれる度にスクラッチパッドブロックに周期的に書き込まれる。
【0127】
一般的に、部分メタページ再配置データは、入力データと共にプログラムされて、プログラミングサイクル数を減少させる。スクラッチパッドブロック(SPB)は、一杯になるとコンパクト化される。SPBのコンパクト化は、すべての有効なデータを新しいブロックへ再配置することである。SPBにおいてUB毎に有効なデータを伴うページは1つしか有していないので、それらのページを新しいブロックにコピーするだけでよい。更新ブロック毎に有効なデータが複数ページある場合には(互いに異なるまたは同一の論理アドレスを含む場合があり、後者の場合には、統合するのが好ましい)。
【0128】
部分ページに保存された更新ブロックインデックス
本発明のさらに他の態様によれば、メモリブロックに記憶されたデータは、データによって占有されていない部分ページの部分にインデックスを記憶する。よって、メモリユニットのページが共にプログラム可能であり、かつメモリページのブロックが共に消去可能であるようなメモリユニットに編成されたメモリにおいて、メモリユニットに記憶されたデータユニットが所定の順序に従ってページ内に配列される場合であって、特にページが各消去後に一度プログラム可能である場合に、部分的に一杯のページが存在することになる。そして、ブロックのインデックスは、更新データで埋められていない部分ページに記憶される。部分ページは、現在のブロックまたは他のブロック内にあってもよい。
【0129】
図28は、ブロックの部分ページ内の更新データを記憶するためのメモリブロックのインデックスを保存するための好ましい手法を示す。
【0130】
ステップ90:不揮発性メモリをそれぞれデータの論理ユニットを記憶するためのメモリユニットの消去可能なブロックに編成し、また、各ブロックを1つ以上のページに編成し、各ページ内のメモリユニットが所定のページオフセットを有し、かつ消去後に共に一度プログラム可能である。
【0131】
ステップ92:データの論理ユニットの更新バージョンを記録するための更新ブロックとしてブロックを提供する。
【0132】
ステップ94:データの論理ユニットをホストから受信する。
【0133】
ステップ96:更新ブロック内のデータのインデックスを保持する。
【0134】
ステップ98:更新ブロックに対してページ毎に記録し、受信されたデータをページオフセットに従ってページ内に整列させ、記録すべきページがデータに占有されていない部分を有する場合には、データに占有されていない部分に対してインデックスを記録する。
【0135】
マルチストリーム追跡および同期
図29は、いくつかの論理群が現在更新を受けている、マルチストリーム更新において使用されるスクラッチパッドブロックを概略的に示す。例えば、更新中のk個の論理群がある場合には、k個の更新ブロック20−1,…,20−kを使用してk個の更新ストリームがあることになる。更新ブロック内の部分ページを回避するために、スクラッチパッドブロック30を他のストリーム(ストリーム0)において使用して、k個の更新ブロックに対するk個の対応する部分ページにおけるデータをバッファリングする。よって、オープンなk+1個のブロックがあることとなり、k個の部分ページは、k個の更新ブロック内の論理ユニットのk個の論理群の現在の更新を扱っている。図に示されている例は、スクラッチパッドブロック内の更新ブロック毎に1つの有効ページがあるという好ましい実施形態に関する。
【0136】
更新およびスクラッチパッドブロック内で分散された有効セクタによって、電源サイクルの場合のセクタの最新書き込みバージョンを識別する際に問題が生じる場合がある。なぜならば、同一の論理セクタの互いに異なるコピーが更新およびスクラッチパッドブロックの両方に見受けられるからである。電源リセット後の更新ブロックに対するメモリ走査により、論理セクタの複数のバージョン(あれば)の優先順位が確立される。なぜならば、更新ブロックの位置は、明確な順序で一杯になるからである。同様に、スクラッチパッドブロックを走査して、論理セクタの最終書き込みバージョンを識別できる。しかし、スクラッチパッドブロック内の最新バージョンと、更新ブロック内の最新バージョンとがある場合には、どちらがより新しいかは容易には判断されない。例えば、図27Aにおいて、セクタLS8〜LS10は、両方のストリームにおいて見受けられる。図27A上のようなデータの同一のパターンは、書き込みLS8’〜LS10’,書き込みLS8’’〜LS10’’,書き込みLS8’’’〜LS10’’’,書き込みLS4’〜LS7’という互いに異なるコマンドシーケンスによって作成可能である。この場合、有効セクタは、スクラッチパッドブロックというよりもむしろ更新ブロック内にあることになる。
【0137】
本発明の他の態様によれば、複数のメモリブロック内に存在するであろうデータの最新書き込みバージョンを識別することができる同期情報を有する不揮発性メモリへ更新データを書き込む方法が提供される。
【0138】
図30は、入力データのシーケンスをあるブロックに書き込む従来の場合を示す。不揮発性メモリブロック22は、明確な順序で一杯になるように編成される。上から一杯になるように概略的に示す。よって、データ「A」、「B」、「C」、「A’」のセグメントの連続書き込みが、ブロック内で連続して置かれる。このように、例えば「A’」が「A」の他のバージョンである場合には、ブロック22内にその記録された位置から、「A」に取って代わる後続のバージョンであることが判断できる。以下の実施形態は、ある限定的なストリームの更新時にストリームがどのくらい一杯になったかについての情報を記憶する概略的な考え方の、有効ではあるが特別な場合である。
【0139】
図31Aは、本発明の好ましい実施形態に係る、異なる書き込みが2つのブロックに対してインターリーブされている場合であっても記録順序または優先順位を追跡する他の手法を示す。例えば、データセグメント「A」、「B」、「C」、「A’」などの各書き込みは、1つ以上の所定の条件によって、第1のブロック(例えば、ブロック22)または第2のブロック(例えば、ブロック32)に記録することができる。この例において、「A」は、第2のブロック32に対する第1の書き込みに記録される。これに続いて、「B」が第1のブロック22に記録される第2の書き込みが生じ、「C」が第2のブロック32に記憶される第3の書き込みが生じ、そして最後に「A’」が第1のブロック22に記録される第4の書き込みが生じる。
【0140】
図に示されているように、ストリーム0は、第2のブロック32に対するデータ記録のストリームであり、ストリーム1は、第1のブロック22に対するデータ記録のストリームである。2つ以上のストリームにおける同一の論理データのインターリーブされた更新の場合、更新の優先順位を追跡することが重要であり、それによって、最新の記録されたデータの位置が定義される。好ましい一実施形態において、これは、少なくとも所定のストリームが記録される度に、優先順位情報を保存することによって達成される。
【0141】
優先順位情報は、ストリーム0内の後者がブロック32に記録される度に、書き込みデータと共に保存されている。好ましい実施形態において、優先順位情報は、第1のブロック22内の次の空の位置(すなわち、次の記録位置のアドレス)をポイントする書き込みポインタ40である。書き込みポインタは、ストリーム0に記憶されているデータと共に保存される。
【0142】
よって、書き込み「A」動作では、ブロック22内の次の空の位置をポイントするポインタPA 40−Aが、ストリーム0内のブロック32に「A」と共に保存される。書き込み「B」動作では、書き込みはストリーム1内のブロック22に対してなので、ポインタは保存されない。書き込み「C」動作では、ポインタPC 40−Cが、ストリーム0内のブロック32に「C」とともに保存される。ブロック22に対する書き込み「A」において、ストリーム1に保存されるポインタはない。
【0143】
書き込み「A」の終了時に、電源遮断後にメモリがリセットされると、コントローラRAM内のインデックスが失われ、メモリを走査することによって再構築しなければならない。逆方向に走査することによって、ブロック22および32の各々は、データ「A」の最終書き込みバージョンを探し当てたことになる。書き込みポインタ40は、2つのブロック間のまさしく最終バージョンを決定するために使用可能である。例えば、ポインタPC は、「A’」の記録の前のブロック22における位置をポイントしている。よって、「A’」は、「C」の後に記録される。また、「C」は「A」の後の位置のブロック32内に記録されるので、「A’」は「A」の後続バージョンであると結論付けることができる。
【0144】
UB毎にSPBにおける1つより多い有効ページがある他の実施形態において、最新の書き込みデータを検出するために、1つより多い書き込みポインタを分析する必要があることになる。
【0145】
図31Bは、書き込みが2つのブロックに対して記録される場合に記録順序を追跡する他の実施形態を示す。この実施形態は、図31Aに示されているものと同様であるが、書き込みポインタがブロック32内の次の空の位置をポイントし、ブロック22に保存される点が異なる。ストリーム0は、第2のブロック(例えば、ブロック32)に記録されている一方で、ストリーム1は、第1のブロック(例えば、ブロック22)に記録されている。ストリーム1が第1のブロックに記録される度に、第2のブロック22における次の記録位置のアドレスを与える第2のブロック書き込みポインタ40’が、それと共に保存されている。この例において、ポインタP’B 40’−Bは、「B」と共に記録されている。同様に、ポインタP’A'40’−A’は、ストリーム1のブロック22に「A’」と共に記録されている。
【0146】
図32Aは、発明の一般的な実施形態に係る、2つのデータストリーム間の記録シーケンスを同期させる方法を示すフローチャートである。
【0147】
ステップ100:それぞれ連続的にデータを記録するための第1および第2の不揮発性記憶装置を提供する。
【0148】
ステップ102:第1または第2の記憶装置のいずれかを優先順位情報のための記憶装置として指定し、優先順位情報は、第1の記憶装置内の第1のデータユニットが第2の記憶装置内の第2のデータの前または後に記録されたかどうかを判断するために使用される。
【0149】
ステップ110:入力データを受信する。
【0150】
ステップ120:受信された入力データを第1の記憶装置に記録するための所定の条件が満たされたかどうかを判断する。満たされていれば、ステップ130’へ進み、そうでなければステップ140’へ進む。
【0151】
ステップ130:受信された入力データを第1の記憶装置に記録する。同時に、第1の記憶装置が指定された記憶装置である場合は、優先順位情報を第1の記憶装置に追加的に記録する。ステップ150へ進む。
【0152】
ステップ140:受信された入力データを第2の記憶装置に記録する。同時に、第2の記憶装置が指定された記憶装置である場合は、優先順位情報を第2の記憶装置に追加的に記録する。ステップ150へ進む。
【0153】
ステップ150:受信すべき入力データがもうなければ、ステップ110へ進み、そうでなければ処理を終了する。
【0154】
好ましい一実施形態において、優先順位情報は、次の記録が指定されていない記憶装置内で生じる位置のアドレスである書き込みポインタである。
【0155】
図32Bは、書き込みポインタを使用する一実施形態に係る、2つのデータストリーム間の記録シーケンスを同期させる方法を示すフローチャートである。
【0156】
ステップ100’:それぞれ連続的にデータを記録するための第1および第2の不揮発性記憶装置を提供する。
【0157】
ステップ110’:入力データを受信する。
【0158】
ステップ120’:受信された入力データを第1の記憶装置に記録するための所定の条件が満たされたかどうかを判断する。満たされていれば、ステップ130’へ進み、そうでなければステップ140’へ進む。
【0159】
ステップ130’:第2の記憶装置において次の記録が生じるであろう位置のアドレスを取得する。
【0160】
ステップ132’:当該アドレスを受信された入力データと共に第1の記憶装置に記録する。ステップ150’へ進む。
【0161】
ステップ140’:受信された入力データを第2の記憶装置に記録する。ステップ150’へ進む。
【0162】
ステップ150’:受信すべき入力データがもうなければ、ステップ110へ進み、そうでなければ処理を終了する。
【0163】
本発明は、メモリユニットの消去可能なブロックに編成される不揮発性メモリに対して特に適用可能であり、各メモリユニットは、データの論理ユニットを記録するためのものであり、各ブロックも、1つ以上のページに編成される。さらに、各ページは、複数の論理ユニットで消去後に一度プログラム可能であり、各論理ユニットは、所定のページオフセットを有して所定の順序となっている。この方法は、基本的には、論理ユニット群の更新データを記憶しまたはバッファリングするための2つのブロック(例えば、更新ブロックとスクラッチパッドブロック)を提供し、論理ユニットの最新の書き込みバージョンが第1または第2のブロックにあるかどうかを識別する助けとなるための同期情報を維持する。図29に関して、複数のストリームがある場合には、図31Aに示されている実施形態が好ましい。なぜならば、SPB内の1箇所にすべての書き込みポインタが記憶されればより好都合だからである。
【0164】
更新ブロック書き込みポインタの実施形態
好ましい一実施形態によれば、書き込みポインタという形態の同期情報は、スクラッチパッドブロックにバッファリングされている度に、ホストデータと共に保存される。書き込みポインタは、書き込みポインタがスクラッチパッドブロックに保存されているときに、更新ブロック内の次の書き込みのための位置のアドレスを与える、更新ブロック書き込みポインタである。特に、これは、ホストデータを記憶するためにいずれにしても使用されないスクラッチパッドブロックの部分に保存される。好ましくは、更新ブロック書き込みポインタは、スクラッチパッドブロックの部分ページに記憶されたインデックスSPBI/CBIに含まれる。更新ブロック書き込みポインタにより、スクラッチパッドブロックにバッファリングされた所定の論理セクタが更新ブロックに対する後続の書き込みによって古いものとなってしまったかどうかを判断することができる。
【0165】
電源リセットがある場合で、当該論理セクタの2つのバージョンが2つのブロック内に見出される場合には、書き込みポインタは、どちらのバージョンが最新かを判断することができることになる。例えば、ポイントされた位置の後に更新ブロック内の論理セクタが記録されていれば、SPB内の部分ページ内のバージョンに取って代わるものとなる。その一方で、論理セクタが更新ブロックに見出されないか、または前の位置に記録されていた場合には、スクラッチパッドブロックの部分ページにバッファリングされたバージョンがまだ有効であるという結論となることになる。
【0166】
図33Aは、第1のシーケンスに係る2つのホスト書き込み#1および#2の後のスクラッチパッドブロックおよび更新ブロックの状態を示す。第1のシーケンスは、書き込みLS10’に対するホスト書き込み#1と、書き込みLS10’’およびLS11’に対するホスト書き込み#2とについてである。
【0167】
ホスト書き込み#1では、コマンドは、LS10’を書き込むことである。LS10’はページ境界にないので、LS8およびLS9で前パディングされたスクラッチパッドブロック30内の部分ページPP0に記録され、現在のインデックスSPBI/CBI1 で終端される。部分ページPP0が書き込まれると、書き込みポインタ40が、現在のインデックスSPBI/CBI1 50に含まれ、最終スロットに保存される。書き込みポインタ40は、更新ブロック20内の最初の空ページP0をポイントする。
【0168】
ホスト書き込み#2では、コマンドは、LS10’’およびLS11を書き込むことである。LS11’はページエンドにあるので、更新ブロック20におけるP0の最終スロット(スロット4)に直接書き込まれる。同時に、スロット3にはLS10’が書き込まれ、スロット1および2は、LS8およびLS9でそれぞれパディングされる。
【0169】
今、メモリが電源遮断を受けてRAM内に保持されたインデックス付け情報が失われた場合には、物理メモリの逆方向の走査により、インデックス付け情報の再構築が試みられることになる。更新ブロックおよびスクラッチパッドブロック(SPB)の両方がLS10の最新バージョン、すなわち、LS10’およびLS10’’を生じさせることになることがわかる。しかし、LS10’’は書き込みポインタがSPBのPP0に記録された後に記録されるので、LS10’よりも遅いバージョンであると結論付けることができる。
【0170】
図33Bは、図33Aに示されている第1のシーケンスの逆である第2のシーケンスに係る2つのホスト書き込み#1および#2の後のスクラッチパッドブロックおよび更新ブロックの状態を示す。逆のシーケンスは、LS10’およびLS11’を書き込むためのホスト書き込み#1と、LS10’’を書き込むためのホスト書き込み#2とについてである。
【0171】
ホスト書き込み#1では、コマンドは、LS10’およびLS11’を書き込むことである。LS11’はページエンドにあるので、更新ブロック20内のP0の最終スロット(スロット4)に直接書き込まれる。同時に、スロット3にはLS10’が書き込まれ、スロット1および2は、LS8およびLS9でそれぞれパディングされる。
【0172】
ホスト書き込み#1に続くホスト書き込み#2では、コマンドは、LS10’’を書き込むことである。LS10’’はページ境界にないので、LS8およびLS9で前パディングされたスクラッチパッドブロック30内の部分ページPP0に記録され、現在のインデックスSPBI/CBI2 で終端される。部分ページPP0が書き込まれると、書き込みポインタ40が、現在のインデックスSPBI/CBI2 50に含まれ、最終スロットに保存される。書き込みポインタ40は、更新ブロック20内の次の空ページP1をポイントする。
【0173】
この場合、電源リセット後、例えば更新ブロック内の論理セクタLS10’が、更新ブロック20内のポイントされた位置の前に記録されていることがわかる。そして、更新ブロック20内のLS10’の最新バージョンは、スクラッチパッドブロック30の部分ページ内にある他のバージョンLS10’’によって取って代わられるという結論を出すことができる。
【0174】
図34Aは、スクラッチパッドブロックインデックス(SPBI)の好ましい一データ構成を示す。SPBI情報は、k個の更新ブロックの各々についての後続のフィールドを含む。これは、論理群/UB毎に1つの有効ページを有するSPBの特別な場合である。
【0175】
論理群番号は、所定のストリーム内の更新中の論理群を識別する。好ましくは、ゼロ値「FFFF」が、空の更新ブロックか、または有効なスクラッチパッドデータがない更新ブロックに記憶される。
【0176】
ページ開始セクタは、スクラッチパッドブロックに書き込まれた部分ページの最初の論理セクタである。
【0177】
セクタラン長は、スクラッチパッドページへ書き込まれた部分ページの有効セクタの数である。
【0178】
有効ページ番号は、スクラッチパッドブロックに書き込まれた唯一有効(唯一有効)部分ページを識別する。これが、スクラッチパッドブロックに最後に書き込まれた部分ページとなる。代わりに、アドレス指定は、セクタオフセットを使用して実現することもでき、更新ブロックに対する部分ページの第1の有効セクタをポイントする。セクタオフセットは、ブロックの最初に対してカウントされる。好ましい実施形態において、1つの物理ページのみが、所定の更新ブロックについての有効データを含む。スクラッチパッドブロックに書き込まれなかったセクタに関しては、FFFFが記憶される。
【0179】
更新ブロック書き込みポインタ40は、スクラッチパッドが最後に書き込まれた場合に、対応する更新ブロックの最初の書き込まれていないセクタ位置のセクタアドレスである。このセクタ位置から更新ブロックに書き込まれたセクタはどれでも、スクラッチパッドブロックに書き込まれたセクタの代わりとなることになる。
【0180】
図34Bは、図33Aに示されているホスト書き込み#1についてのスクラッチパッドブロックインデックス内の値の例を示す。この例において、論理群番号は、「1」であり、論理セクタLS0からLSN−1を含む。ストリーム1において、添付の更新ブロックおよびスクラッチパッドブロックで更新中である。部分ページはPP0であり、LS8または「8」で始まり、「3」のランを有し、LS10’で終了する。有効部分ページ番号は「0」である。最後に、書き込みポインタは、更新ブロック内の次の書き込み位置をポイントし、「0」のセクタオフセットを有する。
【0181】
更新されたインデックスがスクラッチパッドブロックに記録されるのみの場合であって、更新ブロックに直接データが書き込まれるときはいつもスクラッチパッドブロックは書き込まれることはない場合には、そのような状況下でインデックスが無効となるのは明らかである。
【0182】
一般的に、全SPBインデックス情報は、CBIインデックス情報と共に、常にコントローラSRAM内のデータ構成に保持される。SPB内の有効セクタは、セクタレベルのインデックス情報に基づいてアクセスされる。好ましい実施形態において、SPBI/CBIインデックスは、スクラッチパッドブロック内の不揮発性メモリに記憶される。特に、スクラッチパッドブロック(SPB)に部分ページが書き込まれる度に、最新のSPBI/CBIが部分ページの最終セクタに記憶される。
【0183】
SPBは、更新ブロックの所定の数(例えば、8)までをサポートする。SPBブロック内の部分ページデータは、ホストがページの最終セクタを書き込むと、関連する更新ブロックに統合される。所定の場合における論理群についてのSPB内の1つより多い部分ページ内にデータが存在することがあるが、最終書き込み部分ページについてのデータだけが有効である。同様に、SPBI/CBIセクタの複数のコピーがSPB毎に存在することがあるが、最終書き込みコピーのみが有効である。セクタをSPBに書き込む必要があるがSPBが一杯の場合には、ブロックをまず新しいSPBブロックにコピーして、古いSPBを消去し、その後にセクタを新しいSPBに書き込む。SPBの書き込みは、連続更新ブロックがカオス的になったという理由で、または以前スクラッチパッドブロックを含んだ更新ブロックが閉じられたという理由で、SPBI/CBIが更新される必要がある場合にも行われる。
【0184】
好ましい実施形態において、スクラッチパッドブロック(SPB)の書き込みは、一度に1ページ行われる。ストリーム/論理群/更新ブロック毎のページ数も1つに制限されているので、最新のSPBIのみが必要である。なぜならば、有効なコピーがUBにあるのか、またはSPBにあるのかについて問題となるであろう1つの論理ページのみが存在するからである。同様に、SPB内のUB毎のページ数が1つ以上の場合、古いSPBIも分析する必要があることになる。
【0185】
前述した実施形態は、更新ブロック書き込みポインタを、SPBI/CBIセクタの一部として、スクラッチパッドブロックの最新の部分ページに記憶する。複数のブロック内に存在しうる複数のバージョンから論理セクタの有効バージョンを識別するための代替の実施形態が可能である。また、スクラッチパッドブロック内のストリーム毎に1つより多くのページを有するか、または論理群毎に1つより多くの更新ブロックまたはストリームを有することも可能である。
【0186】
スクラッチパッドブロック書き込みポインタの実施形態
本発明の他の実施形態によれば、同期情報は、スクラッチパッドブロックにバッファリングされた所定の論理セクタが更新ブロックに対する後続の書き込みによって古いものとなってしまったかどうかを判断することができるように維持される。これは、同期情報が更新ブロックのページに記憶されるときに、スクラッチパッドブロック内の次の書き込みについての位置のアドレスを与えるスクラッチパッド書き込みポインタを含むことによって達成される。
【0187】
図35Aおよび図35Bは、図33Aおよび図33Bの連続ホスト書き込み後のスクラッチパッドブロックおよびスクラッチパッドブロック書き込みポインタに対する更新ブロックの中間状態をそれぞれ示す。
【0188】
図35Aは、ホスト書き込み#1後のスクラッチパッドブロックおよび更新ブロックの状態を示す。ホスト書き込み#1では、論理セクタLS10’は、ページのスロット3に属し、ページ境界にはないので、スクラッチパッドブロック30内の部分ページPP0に記録される。オプションとして、LS8およびLS9で前パディングされて、現在のSPBI/CBI1 で終端される。電源遮断後にメモリが再開された場合には、論理セクタLS10’の有効バージョンは、最終のSPBI/CBI1 インデックスによって正しく探し当てられることになる。これが正しいのは、更新ブロック20に対して何も書き込まれていないからである。
【0189】
図35Bは、ホスト書き込み#1に続くホスト書き込み#2を示し、コマンドは、LS11’を書き込むことである。LS11’はページ境界(スロット4)に当たるので、一杯のページP0の第4スロットに記録され、LS8,LS9,LS10で前パディングされる。同期情報は、SPB30における次の空位置をポイントするSPB書き込みポインタ40’の形態を取る。前の実施形態と異なり、SPB書き込みポインタ40’は、SPB30内のSPBI/CBIインデックスに含まれない。代わりに、更新ブロック20に現在記録されているページ内のセクタのヘッダ部分に記憶される。電源遮断後にメモリが再開された場合には、論理セクタLS10’の有効バージョンは、更新ブロック20内で正しく探し当てられることになる。なぜならば、SPBにおけるLS10のバージョンは、SPB書き込みポインタ40’によってポイントされた位置の前に記録されているからである。
【0190】
図36は、更新ブロックに記録されているセクタのオーバーヘッド部分に記憶されているスクラッチパッド書き込みポインタを示す。スクラッチパッド書き込みポインタ40’は、更新ブロックに現在記録されているページ内のセクタのうちの少なくとも1つに保存されている。好ましい実施形態において、書き込まれているページ内のセクタのうちの少なくとも1つのオーバーヘッド部分に保存される。
【0191】
タイムスタンプの実施形態
さらに他の実施形態において、同期情報は、最新バージョンを正確に見つけることができるように、複数のストリームに対して書き込まれたデータセクタのタイムスタンプとして符号化することができる。
【0192】
図37は、2つの更新ストリーム間の記録シーケンスを追跡するためのタイムスタンプの使用を示す。前述したように、更新データの各セグメントは、第1のブロック(ストリーム1)または第2のブロック(ストリーム2)のいずれかに記録することができる。この例は、時間T1において「A」が第1のブロックに記録され、時間T2において「B」が第2のブロックに記録され、時間T3において「C」が第1のブロックに記録され、時間T4において「A’」が第2のブロックに記録されている。
【0193】
新しいデータの更新部分毎に少なくとも1つのタイムスタンプが記憶される。よって、「A」はタイムスタンプTS1を有し、「B」はタイムスタンプTS2を有し、「C」はタイムスタンプTS3を有し、「A’」はタイムスタンプTS4を有する。よって、例えば、「A’」は、遅いタイムスタンプを有しているので、「A」の後続バージョンである。好ましい実施形態において、タイムスタンプ情報は、書き込まれているページ内のセクタのうちの少なくとも1つのオーバーヘッド部分に記憶される。
【0194】
マルチセクタページを有するブロックのマルチストリーム更新
本発明の他の態様によれば、不揮発性メモリを更新する方法は、更新データを記録するための第1のブロック(更新ブロック)と、更新ブロックに対する記録の前に更新データのうちのいくつかを一時的に保存するための第2のブロック(スクラッチパッドブロック)とを使用することを含む。不揮発性メモリは、メモリユニットの消去可能なブロックに編成され、各メモリユニットは、データの論理ユニットを記憶するためのものであり、また、各ブロックは、1つ以上のページに編成され、各ページは、明確なページオフセットを有する複数の論理ユニットを記憶でき、消去後に共に一度プログラム可能である。この方法は、ホストから論理ユニットを受信することと、所定の条件が満たされる場合に受信された論理ユニットがページエンドオフセットを有するように、ページ毎に受信された論理ユニットを整列させることと、受信された論理ユニットと任意の先行する論理ユニットとを適切なページ整列で更新ブロック内のページに記憶することと、そうでなければ、スクラッチパッドブロック内の部分ページに残りの受信された論理ユニットを一時的に記憶することとをさらに含む。スクラッチパッドブロック内の論理ユニットは、所定の条件を満たす場合には、最終的には更新ブロックへ転送される。
【0195】
好ましい一実施形態において、更新データは、ページ毎に受信および解析されて、第1のブロック(例えば、更新ブロック)へ転送される。バッファリングされたデータの残りの部分ページは、第2のブロック(例えば、スクラッチパッドブロック)へ転送されて、データの完全ページが第1のブロックへ記録するのに利用可能になるまで、そこにとどまることになる。バッファリングされたデータが第2のブロックへ転送されると、記録されたページが受信データで部分的に一杯になるだけであっても、ページ毎に記録される。部分ページ内の通常使用されない予備の空間を使用して、第2および第1のブロック内のデータを探し当てるためのインデックスを記憶してもよい。
【0196】
図38は、本発明の一般的な一実施形態に係る、それぞれ複数のセクタページを有する2つのメモリブロックに対して同時に更新データを記録しかつインデックス付けするための方法を示すフローチャートである。
【0197】
ステップ200:不揮発性メモリをそれぞれデータの論理ユニットを記憶するためのメモリユニットの消去可能なブロックに編成し、また、各ブロックを1つ以上のページに編成し、各ページが複数のメモリユニットを含み、かつ消去後に共に一度プログラム可能である。
【0198】
ステップ210:データの論理ユニットの更新バージョンを完全ページ毎に記録するための第1のブロックを提供する。
【0199】
ステップ220:ホストから受信されたデータの論理ユニットの更新バージョンをバッファリングするための第2のブロックを提供する。
【0200】
ステップ232:論理ユニット内のデータをホストから受信する。
【0201】
ステップ234:ページエンドオフセットを有する論理ユニットを探し当てることによって、受信された論理ユニットをページ毎に解析する。
【0202】
ステップ236:ページエンドオフセットを有する各論理ユニットを第1のブロック内の新しいページに記録する一方で、当該新しいページを先行する論理ユニットの最新バージョンで埋め、第2のブロック内の部分ページに残りの受信された論理ユニットを記録する。
【0203】
図39は、スクラッチパッドブロックおよび更新ブロックを使用する図37の方法のより特定的な実施例を示すフローチャートである。
【0204】
ステップ310:完全ページ毎に論理ユニットの更新バージョンを記録するための更新ブロック(UB)を提供し、各論理ユニットは、所定の順序に従って所定のページオフセットを有する。
【0205】
ステップ322:当該更新をページ毎に一時的にバッファリングするためのスクラッチパッドブロック(SPB)を提供する。
【0206】
ステップ324:SPB内の有効(最新バージョン)データを探し当てるためのSPBインデックスを提供する。
【0207】
ステップ332:論理ユニット毎に現在の書き込み要求のデータを受信する。
【0208】
ステップ334:現在の論理ユニットがページエンドにおけるオフセットである場合、ステップ340へ進み、そうでなければステップ336へ進む。
【0209】
ステップ336:受信すべきさらなるデータを書き込み要求が有する場合、ステップ332へ進み、そうでなければステップ350へ進む。
【0210】
ステップ340:UBの新しいページをページエンドにおける現在の論理ユニットと共に記録して、所定の順序に従って残りのページを有効(最新バージョン)論理ユニットで埋める。ステップ336へ進む。
【0211】
ステップ350:すべての受信されたデータが記録されている場合、ステップ180へ進み、そうでなければステップ360へ進む。
【0212】
ステップ360:未記録の受信されたデータがSPB内の既存の有効(最新バージョン)データと同一のページに属していない場合、ステップ370へ進み、そうでなければステップ362へ進む。
【0213】
ステップ362:SPBインデックスを更新する。
【0214】
ステップ364:未記録の受信されたデータおよびページオフセットにおける既存の有効データをSPBの新しいページに記録して、SPBインデックスで終端する。ステップ380へ進む。
【0215】
ステップ370:既存の有効データをSPBの現在のページからUBの新しいページへ統合により再配置する。
【0216】
ステップ372:SPBインデックスを更新する。
【0217】
ステップ374:ページオフセットにおける未記録の受信されたデータをSPBの新しいページに書き込み、SPBインデックスで終端する。
【0218】
ステップ380:現在の書き込み要求を終了する。
【0219】
SPBは、更新ブロックの所定の数(例えば、8)までをサポートする。SPBブロック内の部分ページデータは、ホストがページの最終セクタを書き込むと、関連する更新ブロックに統合される。所定の場合における論理群についてのSPB内の1つより多い部分ページ内にデータが存在することがあるが、好ましい実施形態において、最終書き込み部分ページについてのデータだけが有効である。同様に、SPBI/CBIセクタの複数のコピーがSPB毎に存在することがあるが、最終書き込みコピーのみが有効である。同様の考慮により、SPB内のUB毎の有効ページの数が1つに限定されている場合には、最終書き込みポインタのみが必要である。セクタをSPBに書き込む必要があるがSPBが一杯の場合には、ブロックをまず新しいSPBブロックにコピーして、古いSPBを消去し、その後にセクタを新しいSPBに書き込む。SPBの書き込みは、連続更新ブロックがカオス的になったという理由で、または以前スクラッチパッドブロックを含んだ更新ブロックが閉じられたという理由で、SPBI/CBIが更新される必要がある場合にも行われる。
【0220】
一般的に、前述したように、更新ブロック毎に1つより多くのSPB部分ページを使用して、有効データを記憶する。このように、次のホストがページの外部にセクタを書き込む場合には、部分ページを統合して新しいものに道を譲る必要はない。
【0221】
マルチストリーム更新手法により、更新ブロックのより効率的な使用が可能となる。これは、特に、一度書き込み可能なマルチセクタページを伴うブロックに当てはまる。この手法は、費やす記憶装置は少なく、更新ブロック内で必要なパディングも少ない。さらに重要なのは、更新ブロックにおける更新セクタの連続順序が、一連の連続した論理セクタの別個のホスト書き込み中に保持されることである。
【0222】
予測パイプライン化された動作を伴うマルチストリーム更新
前述したマルチストリーム更新手法において、ホスト書き込みがある度に、受信されたホストデータを更新ブロックまたはスクラッチパッドブロックのいずれかに記録するかに関する決断を行わなければならなかった。ホストからのデータユニットは、受信されながら、エンドページオフセットを有するものが受信されるまで1つずつ監視される。この点で、完全ページを書き込むための所定の条件が確認されるが、前パディングを伴ってもよい。
【0223】
更新ブロックを書き込むために、書き込むべきページがプログラミングのために設定される必要がある。これには、ページをアドレス指定することと、その後、ページについてのデータをデータラッチへロードすることとが含まれる。
【0224】
好ましい一実施形態によれば、予測パイプライン化された動作が実施される。この動作において、更新ブロックを記録するための所定の条件を確認するまで待機するのではなく、書き込まれることになっているデータユニットによって所定の条件が満たされる可能性があることをホスト書き込みコマンドが示すとすぐに、更新ブロックが書き込まれるように設定される。このように、当該設定は、ホストからデータユニットが来るのを待つ間にジャンプスタートが可能である。最終的に受信された実際のデータユニットが所定の条件を本当に満たしたときに、設定を待つ必要なく、ただちに更新ブロック内のページのプログラミングが生じることができ、これにより、書き込み性能が向上する。ホスト書き込みが中断されて受信された実際のデータユニットがもはや所定の条件を満たさない場合には、更新ブロックへの記録のための設定は廃棄され、代わりに、データユニットは、スクラッチパッドブロックに記録されることになる。
【0225】
図40Aは、本発明が実施される場合を提供する、読み出し/書き込み回路のバンクを有するメモリ装置を概略的に示す。メモリ装置は、メモリセル400の2次元アレイと、制御回路410と、読み出し/書き込み回路470とを含む。メモリアレイ400は、行デコーダ430を介してワード線により、列デコーダ460を介してビット線により、アドレス指定可能である。読み出し/書き込み回路470は、センスモジュール480(図示せず)のバンクとして実施され、これにより、メモリセル群(「ページ」とも称される)を並列的に読み出しまたはプログラムすることが可能である。並列的に動作するp個のセンスモジュール480のバンク全体により、行に沿ったp個のセルのページを並列的に読み出しまたはプログラムすることが可能である。メモリアレイの一例は、p=512バイト(512×8ビット)を有してもよい。好ましい実施形態において、ブロックは、セルの全行のランである。他の実施形態において、ブロックは、行のセルのサブセットである。例えば、セルのサブセットは、全行の2分の1または全行の4分の1であってもよい。セルのサブセットは、連続セルまたは1つおきのセル、または所定数毎のセルのランであってもよい。よって、好ましい一実施形態において、ページは、メモリセルの連続行から構成されている。他の実施形態において、メモリセルの行は、複数のページに分割され、読み出し/書き込み回路470を個々のページに多重化するために、ページマルチプレクサ350が提供される。
【0226】
制御回路410は、読み出し/書き込み回路470と協働して、メモリアレイ400上でメモリ動作を行う。制御回路410は、状態マシン412と、オンチップアドレスデコーダ414と、電源制御モジュール416とを含む。状態マシン412は、メモリ動作のチップレベルの制御を提供する。オンチップアドレスデコーダ414は、ホストまたはメモリコントローラによって使用されるものと、デコーダ330および370によって使用されるハードウェアアドレスとの間のアドレスインターフェイスを提供する。電源制御モジュール416は、メモリ動作中にワード線およびビット線に対して供給される電力および電圧を制御する。
【0227】
図40Bは、図40Aに示されているメモリ装置の好ましい配列を示す。様々な周辺回路によるメモリアレイ400に対するアクセスは、各側のアクセス線および回路が半分に削減されるように、アレイの反対側同士において対称的なやり方で実施される。よって、行デコーダは、行デコーダ430Aおよび430Bに分割され、列デコーダは、列デコーダ460Aおよび460Bに分割される。メモリセルの行は複数のブロックに分割される実施形態において、ページマルチプレクサ450は、ページマルチプレクサ450Aおよび450Bに分割される。同様に、読み出し/書き込み回路は、アレイ400の下部からビット線に接続する読み出し/書き込み回路470Aと、アレイ400の上部からビット線に接続する読み出し/書き込み回路470Bに分割される。このように、読み出し/書き込みモジュールの密度、したがってセンスモジュール480のバンクの密度は、基本的に2分の1に減少する。アレイの上部に位置する読み出し/書き込みモジュールに向けられたデータは、上部の入出力を介して転送されることになる。同様に、アレイの下部に位置する読み出し/書き込みモジュールに向けられたデータは、下部の入出力を介して転送されることになる。
【0228】
図41は、図40Aに示されているセンスモジュールをより詳細に示す。各センスモジュール480は、基本的には、メモリセルの導電状態を検知するためのセンス増幅器482と、検知されたデータまたはプログラムすべきデータを記憶するためのデータラッチ484のセットと、外部と通信するための入出力回路486とを含む。好ましいセンス増幅器が、米国公開特許出願第2004/0109357号(特許文献23)に開示されている。この特許出願は、その全体が本願明細書において参照により援用されている。
【0229】
プログラミング動作中に、まず、選択されたワード線およびビット線がアドレス指定される。これに続いて、プログラムされるべきデータを入出力ポートを介してそれぞれのデータラッチへ転送する。その後、プログラミング電圧をワード線に印加することによってプログラミングが開始する前に、ビット線がプレチャージされる。プログラミング電圧の実際の印加に先立つステップは、プログラム設定とみなすことができる。ページサイズがかなり大きい場合には、プログラムデータをデータラッチへ転送するのに必要な時間がかかる。
【0230】
ホスト書き込み中に、ホストは、まず、書き込もうとするデータユニットの範囲をメモリ装置に示すホスト書き込みコマンドを送出する。その後、これに続いて、当該範囲におけるデータユニットの送信が、範囲の終端に到達するまでデータユニット毎に行われる。プロトコルによっては、当該送信は不意に中断されてもよく、残りのデータユニットが新しい書き込みコマンドにおいて送出されてもよい。
【0231】
書き込み性能を向上させるためには、データユニットがまだ受信中にプログラム設定処理が生じることができるようなパイプライン動作を有するのが望ましいことになる。しかし、あるデータユニットが受信されるかどうかによって、複数の記憶装置のいずれかにデータユニットが記録されるであろうマルチストリーム手法において、所定の記憶装置に対して記録するためのアドレス指定は、あるデータユニットが中断なく実際に受信されるまでは確実でないことになる。
【0232】
この問題を克服するために、予測パイプライニング手法が使用される。所定の記憶装置に対する記録を生じさせるようなあるデータユニットがホスト書き込みコマンドによって指示された範囲内で見つかる場合には、所定の記憶装置が直ちに設定されてプログラミングに供されることになる。そのようなあるデータユニットが実際に受信されると、所定の記憶装置は、プログラム設定による遅延なく、データユニットをプログラムすることになる。その一方で、そのようなあるデータユニットが中断によって具体化に失敗した場合には、当該所定の記憶装置用に設定されたプログラムは廃棄され、代わりに他の記憶装置が選択されて、設定および後続のプログラミングに供されることになる。
【0233】
図42は、好ましい一実施形態に係る、予測パイプライニング手法を使用するマルチストリーム更新を示すフロー図である。
【0234】
ステップ500:ホストデータユニットを記録するための第1および第2の記憶装置を提供する。例えば、第1の記憶装置は、更新データを記憶する専用の消去可能なブロックであり、第2の記憶装置は、更新ブロックを通過して更新データを一時的にバッファリングするための他の消去可能なブロックであるスクラッチパッドブロックである。
【0235】
ステップ510:書き込むべきデータユニットの範囲を示すホスト書き込みコマンドを受信する。
【0236】
ステップ512:データユニットの範囲が、データユニットを第1の記憶装置に記録するための所定の条件を満たすものを含んでいる場合には、ステップ520へ進み、そうでない場合には、ステップ530へ進む。例えば、消去可能なブロックはページに編成され、各ページは、共にプログラム可能な複数のデータユニットを記憶可能である。各データユニットが所定のページオフセットを有するように、データユニットは、論理的に連続した順序でページ内に記憶される。更新ブロックに記録するための所定の条件は、完全ページが記録できる場合である。充分な条件は、エンドページオフセットを有するデータユニットが存在する場合であり、完全ページは、必要があればページ内にある任意の先行するデータを前パディングすることによって形成される。所定の条件が満たされない場合には、ホストデータは、スクラッチパッドブロックに記録されることになる。
【0237】
ステップ520:第1の記憶装置に対する記録のための準備としてアドレスを設定する。例えば、範囲がエンドページオフセットを有するデータユニットを含む場合には、完全ページが更新ブロックに記録されると推定されることになる。この場合、更新ブロック内の新しいページがアドレス指定されて記録されることになる。
【0238】
ステップ522:第1の記憶装置に対する記録のための準備として、受信されたデータをデータラッチにロードする。データユニットがホストから受信されるとすぐに、新しいページをプログラムするためにデータラッチへロードされることになる。
【0239】
ステップ524:所定の条件を満たすデータユニットが実際に受信されると、ステップ540へ進み、そうでなければステップ526へ進む。例えば、エンドページオフセットを有するデータユニットがホストから実際に受信される場合には、予測された完全ページを確実に形成することができる。
【0240】
ステップ526:第1の記憶装置に対する記録のための設定を中止する。ステップ530へ進む。例えば、エンドページオフセットを有する予測されたデータユニットが中断のために到着しない場合には、更新ブロックへ記録されるべき完全ページの予測はもはや真ではない。その場合に、更新ブロックのためのプログラム設定は中止されなければならなくなる。代わりに、今度はスクラッチパッドブロックがプログラム用に設定されることになる。
【0241】
ステップ530:第2の記憶装置に対する記録のための準備としてアドレスを設定する。例えば、完全ページを更新ブロックに記録するための所定の条件が満たされない場合には、ホストデータは、スクラッチパッドブロックに記録されることになる。この場合に、スクラッチパッドブロック内の新しいページが記録用にアドレス指定されることになる。
【0242】
ステップ532:第2の記憶装置に対する記録のための準備として、受信されたデータをデータラッチにロードする。データユニットがホストから受信されるとすぐに、新しいページをプログラムするためにデータラッチへロードされることになる。
【0243】
ステップ540:データラッチ内のデータをアドレス指定された記憶装置にプログラムする。例えば、更新ブロックまたはスクラッチパッドブロックに対する予測された記録が受信されたデータユニットによって確認されると、遅延なく設定ブロックをプログラムできる。
【0244】
ステップ550:現在のホスト書き込みを終了する。
【0245】
メモリ構造によっては、ステップ520および530は、ステップ522またはステップ532においてデータラッチのロード後にアドレスが選択されてもよいといった、異なる順序であってもよい。
【0246】
他の好ましい実施形態において、データが受信されるにつれて、第1または第2の記憶装置のいずれかに受信されたデータを記録するかが最初に不明な場合には、受信されたデータを第1および第2の記憶装置の両方のプログラミング回路のデータラッチにロードする。このように、データは第1または第2の記憶装置のいずれかをプログラムするためにいつでもただちに利用可能となる。特別な場合には、第1および第2の記憶装置は、データラッチの同一のセットを共有する。例えば、第1および第2の記憶装置が同一のメモリプレーン内にある場合、これらは、センス増幅器およびデータラッチの同一のセットを伴うプログラミング回路の同一のセットを使用できる。この場合、第1または第2の記憶装置のいずれかがプログラムされるべきかに関わらず、デフォルトのデータラッチのセットにデータがロードされることになる。
【0247】
第1および第2の記憶装置がデータラッチの互いに異なるセットを使用する場合に、例えば、同一のプレーンの互いに異なるメモリページにおける場合または互いに異なるメモリプレーンにおける場合と同様に、データをデータラッチの両方のセットにロードしてもよい。
【0248】
図43は、他の実施形態に係る、正しい宛先アドレスが送出される前にプログラムデータがロードされるマルチストリーム更新を示すフロー図である。
【0249】
ステップ600:ホストデータユニットを記録するための第1および第2の記憶装置を提供する。
【0250】
ステップ610:ホストデータを受信する。
【0251】
ステップ620:受信されているままのデータを、第1の記憶装置をプログラムするために使用されるデータラッチおよび第2の記憶装置をプログラムするために使用されるデータラッチにロードする。
【0252】
ステップ630:受信されたデータが所定の条件を満たすかどうかによって、第1または第2の記憶装置をアドレス指定して記録する。
【0253】
ステップ640:アドレス指定された記憶装置に対して、そのデータラッチからデータをプログラムする。
【0254】
ステップ650:現在のホスト書き込みを終了する。
【0255】
本発明を様々な例示的な実施形態に関連して説明してきたが、本発明が、添付の特許請求の範囲の全範囲内においてその権利が保護されるべきであることが理解できよう。
【図面の簡単な説明】
【0256】
【図1A】ホストシステムと共に動作する不揮発性メモリのブロック図である。
【図1B】不揮発性メモリと共に動作するホストシステムのブロック図である。
【図2】図1Aのメモリアレイの第1の編成例を示す。
【図3】図1Aのメモリアレイ内に記憶されるようなオーバーヘッドデータを有するホストデータセクタの例を示す。
【図4】図1Aのメモリアレイの第2の編成例を示す。
【図5】図1Aのメモリアレイの第3の編成例を示す。
【図6】図1Aのメモリアレイの第3の編成例を拡張したものを示す。
【図7】ある特定の構成における図1Aのアレイのメモリセル群の回路図である。
【図8】図1Aのメモリアレイなどのメモリアレイのブロック内にデータのセクタを記憶する様子を示す。
【図9】図1Aのメモリアレイなどのメモリアレイのブロック内にデータのセクタを記憶する他の様子を示す。
【図10A】ガーベッジコレクション動作中に他のブロックへコピーした後の図8または図9のデータのセクタを示す。
【図10B】第2のガーベッジコレクション動作中に他のブロックへコピーした後の図10Aのデータのセクタを示す。
【図10C】さらにデータのセクタを受信した後の図10Bのブロックを示す。
【図11A】2つの消去ブロックであるアクティブブロックとスクラッチパッドブロックとを使用して図10Aおよび図10Bのデータのセクタを記憶する、他の記憶構成を示す。
【図11B】2つのメタブロックであるアクティブブロックとスクラッチパッドブロックとを使用して図10Aおよび図10Bのデータのセクタを記憶する、他の記憶構成を示す。
【図12A】ガーベッジコレクション動作をトリガーせずにデータのセクタを記憶中に更新してもよいように、データのセクタを記憶するために使用される2つのブロックであるアクティブブロックとスクラッチパッドブロックとを示す。
【図12B】ガーベッジコレクションをトリガーせずにページのすべてのセクタを記憶中に更新することができる、図12Aの他の記憶システムを示す。
【図12C】スクラッチパッドブロック1250を使用してデータを更新する他の例を示す。
【図13】マルチレベルセル内に2ビットのデータを記憶するために使用される4つのしきい値電圧の範囲を示す。
【図14】スクラッチパッドブロックがアクティブブロックの下位ページのコピーを保持する、マルチレベルセルの2つのブロックと、アクティブブロックと、スクラッチパッドブロックとを示す。
【図15】あるブロックに記憶された2つのファイルからのデータのセクタと、その後に当該2つのファイルがメモリアレイ内に1ブロックより多くののスペースを必要として更新される場合の当該データのセクタを記憶する様子とを示す。
【図16】アクティブブロックへコピーされる前のいくつかのセクタをスクラッチパッドブロックが記憶する場合の、図15のデータのセクタの更新の他のシステムを示す。
【図17】同一のページ内に無関係なデータのセクタを記憶するスクラッチパッドブロックと、その後にこのデータを互いに異なる場所へコピーする様子とを示す。
【図18】複数の更新を受けている無関係なデータのセクタを記憶するスクラッチパッドブロックを示す。
【図19】マーク付けセクタによって識別されるスクラッチパッドブロックを示す。
【図20】セクタ群と、インデックスセクタとを記憶する図19のスクラッチパッドブロックを示す。
【図21】セクタの第2群と、第1のインデックスセクタに取って代わる第2のインデックスセクタとを記憶する、図20のスクラッチパッドブロックを示す。
【図22】セクタの第3群と、第2のインデックスセクタに取って代わる第3のインデックスセクタとを記憶する、図21のスクラッチパッドブロックを示す。
【図23】ある群が他のブロックにコピーされる場合に、第3のインデックスセクタに取って代わる第4のインデックスセクタを有する図22のスクラッチパッドブロックを示す。
【図24】従来の方法によって更新されかつ単一セクタのページを有する更新ブロック内に記憶される、論理群内のセクタの例を示す。
【図25】ページはマルチセクタでありかつ一度書き込み可能であると思われる、メモリに対して適用されるような図24に示されている書き込みの同一シーケンスを示す。
【図26】本発明の一般的な一実施形態に係る、第1のメモリブロックを第2のメモリブロックと共に使用し、記憶されたデータのインデックスを第2のブロックに保存することによって、データを更新する方法を示すフローチャートである。
【図27A】本発明の好ましい一実施形態に係る、更新ブロックをスクラッチパッドブロックと共に使用することによって、データを更新してインデックスを保持する特定の一例を示す。
【図27B】本発明の好ましい一実施形態に係る、更新ブロックをスクラッチパッドブロックと共に使用することによって、保持されているデータを更新する連続順序付けの他の例を示す。
【図28】ブロックの部分ページ内の更新データを記憶するためのメモリブロックのインデックスを保存するための好ましい手法を示す。
【図29】いくつかの論理群が現在更新を受けている、マルチストリーム更新において使用されるスクラッチパッドブロックを概略的に示す。
【図30】入力データのシーケンスをあるブロックに書き込む従来の場合を示す。
【図31A】本発明の好ましい実施形態に係る、異なる書き込みが2つのブロックに対してインターリーブされている場合であっても記録順序または優先順位を追跡する他の手法を示す。
【図31B】書き込みが2つのブロックに対して記録される場合に記録順序を追跡する他の実施形態を示す。
【図32A】本発明の一般的な実施形態に係る、2つのデータストリーム間の記録シーケンスを同期させる方法を示すフローチャートである。
【図32B】書き込みポインタを使用する一実施形態に係る、2つのデータストリーム間の記録シーケンスを同期させる方法を示すフローチャートである。
【図33A】第1のシーケンスに係る2つのホスト書き込み#1および#2の後のスクラッチパッドブロックおよび更新ブロックの状態を示す。
【図33B】図33Aに示されている第1のシーケンスの逆である第2のシーケンスに係る2つのホスト書き込み#1および#2の後のスクラッチパッドブロックおよび更新ブロックの状態を示す。
【図34A】スクラッチパッドブロックインデックス(SPBI)の好ましい一データ構成を示す。
【図34B】図33Aに示されているホスト書き込み#1についてのスクラッチパッドブロックインデックス内の値の例を示す。
【図35A】図33Aの連続ホスト書き込み後のスクラッチパッドブロックおよびスクラッチパッド書き込みポインタに対する更新ブロックの中間状態を示す。
【図35B】図33Bの連続ホスト書き込み後のスクラッチパッドブロックおよびスクラッチパッド書き込みポインタに対する更新ブロックの中間状態を示す。
【図36】更新ブロックに記録されているセクタのオーバーヘッド部分に記憶されているスクラッチパッド書き込みポインタを示す。
【図37】2つの更新ストリーム間の記録シーケンスを追跡するためのタイムスタンプの使用を示す。
【図38】本発明の一般的な一実施形態に係る、それぞれ複数のセクタページを有する2つのメモリブロックに対して同時に更新データを記録しかつインデックス付けするための方法を示すフローチャートである。
【図39】スクラッチパッドブロックおよび更新ブロックを使用する図37の方法のより特定的な実施例を示すフローチャートである。
【図40A】本発明が実施される場合を提供する、読み出し/書き込み回路のバンクを有するメモリ装置を概略的に示す。
【図40B】図40Aに示されているメモリ装置の好ましい配列を示す。
【図41】図40Aに示されているセンスモジュールをより詳細に示す。
【図42】好ましい一実施形態に係る、予測パイプライニング手法を使用するマルチストリーム更新を示すフロー図である。
【図43】他の実施形態に係る、正しい宛先アドレスが送出される前にプログラミングデータがロードされるマルチストリーム更新を示すフロー図である。
【技術分野】
【0001】
本発明は、一般的には、不揮発性フラッシュメモリシステムの動作に関し、より特定的には、不揮発性フラッシュメモリ内のデータをプログラムする、より効率的な方法に関する。
【背景技術】
【0002】
現在使用されている商業的に成功した不揮発性メモリ製品が数多くあり、特に、小形形状のファクタカードの形式のものは、1つ以上の集積回路チップ上に形成されたフラッシュEEPROM(電気的に消去可能でプログラム可能な読み出し専用メモリ)セルのアレイを使用している。メモリコントローラは、必ずしも別個の集積回路チップ上にあるわけではないが通常は別個の集積回路チップ上にあって、カードが着脱可能に接続されかつカード内のメモリアレイの動作を制御するホストのインターフェイスとなる。そのようなコントローラは、典型的には、マイクロプロセッサと、何らかの不揮発性読み出し専用メモリ(ROM)と、揮発性ランダムアクセスメモリ(RAM)と、データのプログラミングおよび読み出し中にコントローラを通過する際のデータから誤り訂正符号(ECC)を計算する回路などの1つ以上の特殊回路とを含む。市販のカードには、コンパクトフラッシュ(登録商標)(CF)カード、マルチメディアカード(MMC)、セキュアデジタル(SD)カード、個人タグ(P−タグ)、およびメモリスティックカードがある。ホストには、パーソナルコンピュータ、ノートブックコンピュータ、個人用携帯情報端末(PDA)、様々なデータ通信装置、デジタルカメラ、携帯電話、携帯オーディオプレーヤ、自動車サウンドシステム、および同様の種類の装置が含まれる。あるシステムにおいては、着脱可能なカードにはコントローラが含まれず、ホストがカード内のメモリアレイの動作を制御する。この形のメモリシステムの例には、スマートメディアカードおよびxDカードが含まれる。よって、メモリアレイの制御は、カード内のコントローラ上のソフトウェアか、またはホスト内の制御ソフトウェアによって達成されてもよい。メモリカードによる実施例のほか、この形のメモリは、代わりに、様々な形のホストシステムに埋め込むことができる。着脱可能な応用および埋め込みによる応用の両方において、ホストデータは、メモリ制御ソフトウェアによって実施される記憶手法に従って、メモリアレイ内に記憶されてもよい。
【0003】
NORおよびNANDという、2つの一般的なメモリアレイ構造が、商用において見受けられる。典型的なNORアレイにおいて、メモリセルは、コントロールゲートがセルの行に沿って延びるワード線に接続されて、列方向に拡張する隣接するビット線のソースおよびドレイン拡散間に接続されている。メモリセルは、少なくともソースとドレインとの間のセルチャンネル領域の部分に渡って位置する1つの記憶素子を含む。よって、記憶素子に対する電荷のプログラムされたレベルによって、セルの動作特徴が制御され、当該動作特徴は、その後、アドレス指定されたメモリセルに対して適切な電圧を印加することによって読み出すことができる。そのようなセルの例、メモリシステム内でのその使用、およびその製造方法は、米国特許第5,070,032号(特許文献1)、第5,095,344号(特許文献2)、第5,313,421号(特許文献3)、第5,315,541号(特許文献4)、第5,343,063号(特許文献5)、第5,661,053号(特許文献6)、および第6,222,762号(特許文献7)に記載されている。これらの特許は、本願で参照されたすべての他の特許および特許出願と共に、その全体が本願明細書において参照により援用されている。
【0004】
NANDアレイは、個々のビット線間の1つ以上の選択トランジスタに接続された16個または32個などという2個以上のメモリセルの連続列と、基準電位とを使用して、セルの列を形成する。ワード線は、これらの数多くの列内のセルに渡って広がっている。ある列内の個々のセルに対するプログラミング中の読み出しおよびベリファイは、列を流れる電流がアドレス指定されたセルに蓄積された電荷のレベルに依存するように、列内の残りのセルを確実にオンに転換することによって行われる。NAND構造のアレイおよびそのメモリシステムの一部としての動作については、米国特許第5,570,315号(特許文献8)、第5,774,397号(特許文献9)、第6,046,935号(特許文献10)、および第6,522,580号(特許文献11)において見受けられる。
【0005】
前に援用した特許で説明されているような現在のフラッシュEEPROMアレイの電荷記憶素子は、最も一般的な導電性のフローティングゲートであり、典型的には、伝導性を有するようにドープされたポリシリコン材料からなる。フラッシュEEPROMシステムにおいて有用なメモリセルの代替形は、伝導性のフローティングゲートの代わりに、非伝導性の絶縁材料を使用して、不揮発的に電荷を蓄積する。酸化シリコン、窒化シリコン、および酸化シリコン(ONO)からなる3層絶縁体が、メモリセルチャンネル上部で、伝導性のコントロールゲートと半伝導性の基板との間に挟まれている。セルは、セルチャンネルからの電子を窒化物に注入することによってプログラムされ、電子は、限られた領域に閉じ込められて蓄積され、ホットホールを窒化物に注入することによって消去される。誘電体記憶素子を使用するいくつかの具体的なセル構造およびアレイについては、ハラリらの米国公開特許出願第2003/0109093号(特許文献12)に記載されている。
【0006】
ほとんどすべての集積回路の応用例におけるように、何らかの集積回路機能を実施するのに必要なシリコン基板領域を縮小する必要性が、フラッシュEEPROMメモリセルアレイにも存在する。所定のサイズのメモリカードおよび他の形のパッケージの記憶容量を増加するために、または容量の増加およびサイズの減少の両方を行うために、シリコン基板の所定の領域に記憶可能なデジタルデータの量を増加することは、絶えず要求されている。データの記憶密度を増加させる1つの方法は、メモリセル毎および/または記憶ユニットまたは素子毎に1ビット以上のデータを記憶するというものである。これは、記憶素子の電荷レベル電圧範囲のウィンドウを2つ以上の状態に分割することによって達成される。4つのそのような状態を使用すると、各セルは、2ビットのデータを記憶することができ、8つの状態では、記憶素子毎に3ビットのデータを記憶する、といった具合である。フローティングゲートを使用する複数の状態のフラッシュEEPROM構造およびその動作については、米国特許第5,043,940号(特許文献13)および第5,172,338号(特許文献14)に記載され、誘電体フローティングゲートを使用する構造については、米国公開特許出願第2003/0109093号(特許文献12)に記載されている。多状態メモリセルアレイの選択された部分は、様々な事情から2つの状態(バイナリ)で動作されてもよく、その手法は、米国特許第5,930,167号(特許文献15)および第6,456,528号(特許文献16)に記載されている。これらの特許は、本願において引用されたすべての他の特許および特許出願と共に、その全体が本願明細書において参照により援用されている。
【0007】
典型的なフラッシュEEPROMアレイのメモリセルは、共に消去されるセルの個別の(discrete)ブロック(消去ブロック)に分割される。すなわち、消去ブロックは、消去単位であって、同時に消去可能な最小数のセルである。各消去ブロックは、典型的には、データの1つ以上のページを記憶し、ページは、プログラミングおよび読み出しの最小単位であるが、1つ以上のページが、互いに異なるサブアレイまたはプレーンにおいて並列的にプログラムされるか、または読み出されもよい。各ページは、典型的には、データの1つ以上のセクタを記憶し、セクタのサイズは、ホストシステムによって規定される。あるセクタの例は、磁気ディスクドライブで確立された規格に従って512バイトのユーザデータを含み、ユーザデータおよび/またはそれらが記憶される消去ブロックについての何バイトかのオーバーヘッド情報をさらに含む。そのようなメモリは、典型的には、各消去ブロック内にある16、32、またはそれ以上のページで構成され、各ページは、1つまたはほんのいくつかのデータのホストセクタを記憶する。
【0008】
メモリアレイにユーザデータをプログラムすることとユーザデータをそこから読み出す間の並列処理の度合いを高めるために、アレイは、典型的には、一般にプレーンと称されるサブアレイに分割され、プレーンは、自身のデータレジスタと、他の回路とを含み、いくつかまたはすべてのプレーンに対するデータのセクタのプログラミングまたは読み出しが同時に行われてもよいといった並列動作を可能にしている。単一の集積回路上のアレイは、プレーンに物理的に分割されてもよいし、または、各プレーンは、別個の1つまたはそれ以上の集積回路チップから形成されてもよい。そのようなメモリの実施例が、米国特許第5,798,968号(特許文献17)および第5,890,192号(特許文献18)に記載されている。
【0009】
メモリをさらに効率的に管理するために、消去ブロックは、互いにリンク付けされて仮想ブロックまたはメタブロックを形成してもよい。すなわち、各メタブロックは、各プレーンからの1つの消去ブロックを含むように規定される。メタブロックの使用については、米国特許第6,763,424号(特許文献19)に記載されている。メタブロックは、データをプログラムしかつ読み出すための宛先として、ホスト論理ブロックアドレスによって識別される。同様に、メタブロックのすべての消去ブロックは、共に消去される。メタブロックは、メタブロック内の各消去ブロックからの1つのページを含むメタページ単位でプログラムされてもよい。そのような大きなブロックおよび/またはメタブロックと共に動作されるメモリシステム内のコントローラは、ホストから受信された論理ブロックアドレス(LBA)とメモリセルアレイ内の物理ブロック番号(PBN)との間の変換を含む、数多くの機能を行う。消去ブロック内の各ページは、典型的には、ブロックアドレス内のオフセットによって識別される。アドレス変換は、論理ブロック番号(LBN)と論理ページと間の中間用語 (intermediate terms) の使用を伴うことが多い。メタブロックを使用するメモリシステムにおいて、メタブロックは、メモリアレイの消去の有効最小単位であってもよい。よって、消去の最小単位(ブロック)は、メモリ構造により、消去ブロックであっても、メタブロックであってもよい。「ブロック」という用語は、メモリ構造により、消去ブロックまたはメタブロックのいずれを指してもよい。同様に、「ページ」という用語は、メモリシステムのプログラミングの最小単位を指してもよい。これは、メモリシステム構造により、単一の消去ブロック内のページであってもよいし、いくつかの消去ブロックに渡って広がるメタページであってもよい。
【0010】
メタブロックに記憶されたデータは、更新されることが多く、更新の可能性は、メタブロックのデータ容量が多いほど高まる。あるメタブロックの更新されたセクタは、通常、他のメタブロックへ書き込まれる。変更されなかったセクタも、通常、同一のプログラミング動作の一部として、元のメタブロックから新しいメタブロックへコピーされて、データを統合する。代わりに、変更されなかったデータは、更新されたデータが単一のメタブロックに後に統合されるまで元のメタブロックに残っていてもよい。現在のデータを新しいブロックに統合して、古いデータのみを含むブロックを消去する動作は、一般的には「ガーベッジコレクション」動作と称される。
【0011】
消去されたブロックのプール内に保持されたいくつかの余分なブロックと共に大きなブロックまたはメタブロックシステムを動作させることは一般的である。あるブロックの容量未満のデータの1つ以上のページが更新されようとする場合、典型的には、更新されたページをプールからの消去されたブロックへ書き込み、その後、元のブロックから変更されなかったページのデータをコピーして、プールブロックを消去する。この手法の変形例については、米国特許第6,763,424号(特許文献19)に記載されている。時間が経つにつれて、ホストデータファイルが再書き込みされかつ更新される結果、数多くのブロックが、有効データを含む比較的少ない数のページと、もはや新しくないデータを含む残りのページとになりうる。アレイのデータ記憶容量を効率的に使用できるようにするために、有効データのうちの論理的に関連したデータページを複数のブロック内の断片からときどき収集して、より少ない数のブロックに統合する。この処理は、通常、「ガーベッジコレクション」と称される。
【0012】
あるメモリシステムにおいて、物理メモリセルも2つ以上のゾーンにグループ化される。あるゾーンは、論理ブロックアドレスの特定の範囲がマッピングされる物理メモリまたはメモリシステムの任意の分割されたサブセットであってもよい。例えば、64メガバイトのデータを記憶可能なメモリシステムは、ゾーン毎に16メガバイトのデータを記憶する4つのゾーンに分割されてもよい。そして、論理ブロックアドレスの範囲も、4つの群に分割され、4つの各ゾーンの物理ブロックに1つの群が割り当てられる。典型的な実施例において、論理ブロックアドレスは、論理ブロックアドレスがマッピングされる単一の物理ゾーン外に各データが書き込まれることのないという制約を受ける。それぞれが自身のアドレス指定回路、プログラミング回路、および読み出し回路を有するプレーン(サブアレイ)に分割されたメモリセルアレイにおいて、各ゾーンは、好ましくは、複数のプレーンからのブロック、典型的には、各プレーンから同数のブロックを含む。ゾーンは、論理−物理変換のようなアドレス管理を簡素化するために主に使用されるので、変換テーブルはより小さくなり、これらのテーブルを保持するのに必要なRAMメモリは少なくなり、メモリの現在アクティブな領域をアドレス指定するためのアクセス時間は速くなるが、その限定的な性質により、最適な消耗レベリングより少なくなってしまうことがある。
【0013】
個々のフラッシュEEPROMセルは、1以上のビットのデータを表す電荷記憶素子またはユニット内に、ある電荷量を記憶する。記憶素子の電荷レベルは、そのメモリセルのしきい値電圧(通常VT と称される)を制御し、これは、セルの記憶状態を読み出す基本として使用される。しきい値電圧ウィンドウは、通常、数多くの範囲に分割され、メモリセルの2つ以上の各記憶状態につき1つの範囲となる。これらの範囲は、各セルの記憶状態を判断することが可能な規格検知レベルを含むガードバンドによって分離される。これらの記憶レベルは、近傍または他の関連するメモリセル、ページ、またはブロックにおいて行われるプログラミング、読み出し、または消去動作を妨害する電荷の結果、どうしてもずれてしまう。したがって、典型的には、誤り訂正符号(ECC)がコントローラによって計算されて、読み出し中にプログラムされかつ使用されているホストデータと共に記憶されて、データをベリファイして、必要があればあるレベルのデータで訂正を行う。また、電荷レベルのずれは、妨害動作が規定の範囲から完全にずれて間違ったデータが読み出されてしまう前に、状態範囲の中心に戻すことが可能なときもある。データリフレッシュまたはスクラブと称されるこの処理については、米国特許第5,532,962号(特許文献20)および第5,909,449号(特許文献21)に記載されている。
【0014】
あるメモリアレイにおいて、ページは、データの複数のセクタを保持可能な消去ブロックの部分からなってもよい。ページが一旦書き込まれると、既に書き込まれているデータを破損させることなくさらなる書き込みが可能であってもよい。そのようなシステムを使用するメモリアレイについて、ページは、同一のワード線に接続されたメモリセルのセットによって規定されてもよい。そのようなメモリアレイは、ページのサイズよりも少ない量のデータが受信されるように、非効率的にプログラムされてもよい。例えば、データが一度に1セクタずつ受信される場合、1セクタだけがページに対してプログラムされてもよい。既にそこに保存されているデータセクタを破損するという危険を冒すことなく、追加のデータがページに対してプログラムされることはなくてもよい。ときには、一連の単一セクタがいくらかの遅延を伴って受信される場合がある。この場合に、各セクタは、メモリアレイの別々のページへ書き込まれる。よって、セクタは、メモリアレイ内のスペースをどのように使うかについて非効率的なやり方で記憶される。マルチレベル論理が使用される場合には、メモリセルは、近傍のセルの後のプログラミングの効果による影響を受けやすい。加えて、マルチレベルセルのプログラミングは、一般的には、データの第1のページでセル群をプログラムし、その後、データの第2のページでセルをプログラムすることによって行われる。データの第2のページのプログラミングは、場合によっては、データの第1のページを破損させることがある。よって、ページより少ない量のデータをメモリアレイが受信する場合に、マルチセクタページを有するメモリアレイ内にデータを記憶させるためのより効率的な方法の必要性がある。また、マルチレベルセル群をプログラムする場合に、後続のページのプログラミング中に第1のページのデータを破損させない手法の必要性がある。
【特許文献1】米国特許第5,070,032号
【特許文献2】米国特許第5,095,344号
【特許文献3】米国特許第5,313,421号
【特許文献4】米国特許第5,315,541号
【特許文献5】米国特許第5,343,063号
【特許文献6】米国特許第5,661,053号
【特許文献7】米国特許第6,222,762号
【特許文献8】米国特許第5,570,315号
【特許文献9】米国特許第5,774,397号
【特許文献10】米国特許第6,046,935号
【特許文献11】米国特許第6,522,580号
【特許文献12】米国公開特許出願第2003/0109093号
【特許文献13】米国特許第5,043,940号
【特許文献14】米国特許第5,172,338号
【特許文献15】米国特許第5,930,167号
【特許文献16】米国特許第6,456,528号
【特許文献17】米国特許第5,798,968号
【特許文献18】米国特許第5,890,192号
【特許文献19】米国特許第6,763,424号
【特許文献20】米国特許第5,532,962号
【特許文献21】米国特許第5,909,449号
【特許文献22】米国特許出願第10/917,725号
【特許文献23】米国公開特許出願第2004/0109357号
【発明の開示】
【0015】
消去単位としてのブロックを有するメモリアレイにおいて、1つ以上のブロックが、スクラッチパッドブロックとして指定されて、メモリシステムの性能を改善するために使用されてもよい。スクラッチパッドブロックは、低い並列度でデータがスクラッチパッドブロックへ書き込まれて、その後、高い並列度でメモリアレイ内の他の位置にコピーされるように、バッファとして動作してもよい。データは、より効率的に他の位置へ書き込まれるようになるまで、スクラッチパッドブロックに蓄積されてもよい。マルチセクタページを有するメモリにおいて、システムの最大並列度を使用して完全なページが書き込まれてもよくなるまでセクタが蓄積されてもよい。マルチレベルセルメモリにおいて、下位ページは、上位および下位ページが共に記憶されるように上位ページが利用可能になるまで、スクラッチパッドブロック内に記憶されてもよい。
【0016】
特定のプログラミング動作の並列度は、共にプログラムされるデータのビット数に比例する。よって、大量のデータを共にプログラムすることは、高い並列度を有する書き込みとみなされ、少量のデータを共にプログラムすることは、低い並列度であるとみなされる。1つのページより少ない並列度を使用する場合には、メモリアレイ内のスペースが無駄になる場合があり、この無駄なスペースがあるということは、ガーベッジコレクションをより頻繁に行わなければならないことを意味し、それによって、メモリシステムの効率性に悪影響を与える。ときには、少量のデータをメモリシステムに記憶しなければならない。これら小さい書き込みをスクラッチパッドブロックという1つの位置に書き込んだ後に、それらを高い並列度で他の位置に書き込むことによって、メモリシステムの効率性が高くなることもある。
【0017】
データの複数のセクタからなるページのプログラミングの最小単位を有するメモリシステムにおいて、1ページ未満の量で受信されるデータを記憶する方法が開示される。完全なページがフラッシュメモリアレイへ書き込まれるようになるまで、受信されたセクタを記憶するために、スクラッチパッドブロックとして指定されたブロックを使用する。第1のセクタは、スクラッチパッドブロックの第1のページに記憶される。その後に受信されたセクタは、スクラッチパッドブロックの追加のページに記憶されてもよい。個別に受信されたセクタまたはセクタ群は、受信された際に、スクラッチパッドブロックの新しいページに保存される。スクラッチパッドブロック内の他のページからの以前に記憶されたセクタは、新しいデータと共に、最新のページへコピーされてもよい。よって、データのセクタは、スクラッチパッドブロックのページ内の新しいデータの完全なページ未満がある限り、スクラッチパッドブロック内に蓄積される。セクタは、ブロックの最大有効並列度よりも低い並列度でスクラッチパッドブロックへ書き込まれる。セクタは更新されながら、スクラッチパッドブロックに記憶される。データの新しいセクタが受信されて、データの完全なページがプログラミングに利用可能になった場合には、新しいセクタおよびスクラッチパッドブロックに以前に記憶されたセクタは、メモリアレイの他のブロック内の同一のページに共にプログラムされてもよい。このページは、データで完全に埋まり、最大有効並列度で書き込まれる。その後、スクラッチパッドブロックに記憶されたデータは、古いもの (obsolete) であるとマーク付けされて、都合のよいときに消去されてもよい。よって、フラッシュメモリ内のスペースは、より効率的に使用され、ガーベッジコレクション動作の頻度は減少する。
【0018】
マルチレベルセルを有するメモリにおいて、スクラッチパッドブロックは、アクティブブロックにも書き込まれるデータのページを記憶してもよい。記憶されたページは、データの他のページが受信されるまで、スクラッチパッドブロック内に保持されてもよく、これは、データの当該2つのページがアクティブブロック内のそれらの宛先へ共に書き込まれるようにするためである。これらのページは、高い並列度を使用して、上位ページおよび下位ページとして共に書き込まれてもよく、別個に書き込まれた場合よりもデータの破損の危険性が低い状態となる。電力の損失がある場合に下位ページ内のデータがスクラッチパッドブロックから回復されるようにするために、関連する上位ページのプログラミング中に、以前にプログラムされた下位ページのコピーを保持するために使用されてもよい。
【0019】
スクラッチパッドブロックは、他の位置へ書き込まれるべきデータの一時記憶を許容してもよい。データは、あるブロックのデータのセクタの更新中にスクラッチパッドブロック内に記憶されてもよい。あるブロック内のあるページは、互いに異なるファイルからのデータのセクタを含む場合に、ページは、いずれかのブロックが更新されると更新される。従来の方法を使用して2つのファイルからの更新データを記憶するために、1つ以上のブロックが必要となる場合がある。なぜならば、マルチファイルページの2つのコピーが必要な場合があるからである。スクラッチパッドブロックを使用すれば、あるファイルからのページの一部を、(他のファイルからの)残りのページが利用可能になるまで記憶することができる。その後、完全な更新ページが、最大並列度を使用してその宛先にプログラムされる。
【0020】
スクラッチパッドブロックは、関連性のないデータのセクタを含んでもよい。ホストデータセクタおよび制御データセクタの両方が、スクラッチパッドブロック内に記憶されてもよい。ホストデータセクタおよび制御データセクタの両方が、スクラッチパッドブロック内の同一のページ内に記憶されてもよい。2つの互いに異なるファイルからのセクタ、または同一のファイルの論理的にリモートな部分からのセクタが、スクラッチパッドブロックの同一のページに記憶されてもよい。これにより、データを受信しながら高速を維持するように、最大並列度でスクラッチパッドブロックのプログラミングが可能になってもよい。データを低速で受信する場合には、ページ内の追加のスペースは、制御データを含むセクタによって占有される。これにより、制御データ構造が低い頻度で更新されるようになってもよいことから、ガーベッジコレクションの頻度が減少する。
【0021】
一般的に、スクラッチパッドブロックの同一のページ内に記憶されたセクタは、互いに異なるファイルに属する必要はない。独立したデータオブジェクトとして、例えば、同一ページの2つの論理セクタであればよいが、互いに異なる書き込みコマンドによって書き込まれる必要がある。
【0022】
スクラッチパッドは、コントローラが容易に識別できるように、マーク付けセクタによって識別されてもよい。スクラッチパッドブロック内に記憶されたデータのインデックスが、これもまたスクラッチパッドブロック内に記憶されたインデックスセクタ内で維持されてもよい。新しいセクタがスクラッチパッドブロック内に記憶されるにつれて、古いインデックスセクタが新しいインデックスセクタに置き換わることによって、インデックスセクタが更新される。同様に、スクラッチパッドブロック内のセクタが他の位置にコピーされるにつれて、インデックスセクタは更新されて、スクラッチパッドブロック内のこれらのセクタが古いものであることを示してもよい。
【0023】
スクラッチパッドおよび更新ブロックのための改良されたインデックス付け−スクラッチパッドブロックに保持されたSPBI/CBIインデックス
本発明の他の態様によれば、更新ブロックに加えてスクラッチパッドブロックを使用する場合に、関連するスクラッチパッドブロックインデックス(「SPBI」)を使用して、スクラッチパッドブロックに記録された更新セクタを追跡する。これは、更新ブロックに記録された論理セクタを追跡するために使用されるインデックス(例えば、「CBI」)に対する追加である。ユーザデータがスクラッチパッドブロックの部分ページに記憶される場合はいつでも、ページの少なくとも最終スロットが一杯ではないということになる。一実施形態において、スクラッチパッドブロック内の部分ページの最終スロットにSPBIを記憶することができる。好ましい一実施形態において、SPBIおよびCBIをSPBI/CBIセクタ内にパッケージ化して、いずれにしても使用されないスクラッチパッドブロック内の部分ページの最終スロットに記憶することができる。新しい部分ページが書き込まれる度に、更新されたSPBI/CBIセクタが終端スロットに書き込まれ、すべての過去のバージョンは古いものとなる。
【0024】
同時に、インデックス付け手法は、スクラッチパッドブロック内の未使用の記憶装置を利用して、不揮発性メモリにインデックスを記憶する。
【0025】
本発明のさらに他の態様によれば、メモリブロックに記憶されたデータは、データによって占有されていない部分ページの部分にインデックスを記憶する。よって、メモリユニットのページが共にプログラム可能でメモリページのブロックが共に消去可能であるようなメモリユニットに編成されたメモリにおいて、メモリユニットに記憶されたデータユニットが所定の順序に従ってページ内に配列される場合であって、特にページが各消去後に一度プログラム可能である場合に、部分的に一杯のページが存在することになる。そして、ブロックのインデックスは、更新データで埋められていない部分ページに記憶される。部分ページは、現在のブロックまたは他のブロック内にあってもよい。
【0026】
マルチストリーム更新追跡−2つ以上のストリーム間の同期
本発明のさらに他の態様によれば、複数のメモリブロック上に存在するであろうデータの最新書き込みバージョンを識別できる同期情報と共に、更新データを不揮発性メモリに書き込むための方法を提供する。ホストからの更新データは、複数のストリームを介して複数のブロックに向けられていてもよい。同期情報の維持は、ストリームのうちの少なくとも1つの更新毎の時点でストリーム/ブロックがどのくらい一杯かについての情報を記憶することによって達成される。
【0027】
好ましい一実施形態において、ブロック内の第1の空位置をポイントする書き込みポインタが、ブロックがどのくらい一杯かを示すことになる。例えば、2つのストリーム間において、書き込みポインタが第1のブロックに書き込まれるときに、第2のブロックに対する書き込みポインタの値は、第2のブロックがどのくらい一杯かを示す。さらに、書き込みポインタが第1のブロックに保存される位置も、その時点で第1のブロックがどのくらい一杯かを示す。
【0028】
本発明は、メモリユニットの消去可能なブロックに編成される不揮発性メモリに対して特に適用可能であり、各メモリユニットは、データの論理ユニットを記録するためのものであり、各ブロックも、1つ以上のページに編成される。さらに、各ページは、複数の論理ユニットで消去後に一度プログラム可能であり、各論理ユニットは、所定のページオフセットを有して所定の順序となっている。この方法は、基本的には、論理ユニット群の更新データを記憶またはバッファリングするための2つのブロック(例えば、更新ブロックとスクラッチパッドブロック)を提供し、論理ユニットの最新の書き込みバージョンが第1または第2のブロックにあるかどうかを識別する助けとなるための同期情報を維持する。
【0029】
好ましい一実施形態によれば、書き込みポインタという形態の同期情報は、スクラッチパッドブロックにバッファリングされている度に、ホストデータと共に保存される。書き込みポインタは、書き込みポインタがスクラッチパッドブロックに保存されているときに、更新ブロック内の次の書き込みのための位置のアドレスを与える、更新ブロック書き込みポインタである。特に、これは、ホストデータを記憶するためにいずれにしても使用されないスクラッチパッドブロックの部分に保存される。好ましくは、更新ブロック書き込みポインタは、スクラッチパッドブロックの部分ページに記憶されたインデックスSPBI/CBIに含まれる。更新ブロック書き込みポインタにより、スクラッチパッドブロックにバッファリングされた所定の論理セクタが更新ブロックに対する後続の書き込みによって古いものとなってしまったかどうかを判断することができる。
【0030】
本発明の他の実施形態によれば、同期情報は、スクラッチパッドブロックにバッファリングされた所定の論理セクタが更新ブロックに対する後続の書き込みによって古いものとなってしまったかどうかを判断することができるように維持される。これは、同期情報が更新ブロックのページに記憶されるときに、スクラッチパッドブロック内の次の書き込みについての位置のアドレスを与えるスクラッチパッド書き込みポインタを含むことによって達成される。
【0031】
他の実施形態において、同期情報は、最新バージョンを正確に見つけることができるように、複数のストリームに対して書き込まれたデータセクタのタイムスタンプとして符号化することができる。
【0032】
好ましい実施形態において、タイムスタンプ情報は、書き込まれているページ内のセクタのうちの少なくとも1つのオーバーヘッド部分に記憶される。
【0033】
パイプライン化された動作を伴うマルチストリーム更新
本発明の他の態様によれば、不揮発性メモリを更新する方法は、更新データを記録するための第1のブロック(更新ブロック)と、更新ブロックに対する記録の前に更新ブロックのうちのいくつかを一時的に保存するための第2のブロック(スクラッチパッドブロック)とを使用することを含む。不揮発性メモリは、メモリユニットの消去可能なブロックに編成され、各メモリユニットは、データの論理ユニットを記憶するためのものであり、また、各ブロックは、1つ以上のページに編成され、各ページは、明確なページオフセットを有する複数の論理ユニットを記憶でき、消去後に共に一度プログラム可能である。この方法は、ホストから論理ユニットを受信することと、所定の条件が満たされる場合に受信された論理ユニットがページエンドオフセットを有するように、ページ毎に受信された論理ユニットを整列させることと、受信された論理ユニットと任意の先行する論理ユニットとを適切なページ整列で更新ブロック内のページに記憶することと、そうでなければ、スクラッチパッドブロック内の部分ページに残りの受信された論理ユニットを一時的に記憶することとをさらに含む。スクラッチパッドブロック内の論理ユニットは、所定の条件を満たす場合には、最終的には更新ブロックへ転送される。
【0034】
好ましい一実施形態において、更新データは、ページ毎に受信および解析されて、第1のブロック(例えば、更新ブロック)へ転送される。受信されたデータの残りの部分ページは、第2のブロック(例えば、スクラッチパッドブロック)へ転送されて、データの完全ページが第1のブロックへ記録するのに利用可能になるまで、そこにとどまることになる。受信されたデータが第2のブロックへ転送されると、記録されたページが受信データで部分的に一杯になるだけであっても、ページ毎に記録される。部分ページ内の通常使用されない予備のスペースを使用して、第2および第1のブロック内のデータを探し当てるためのインデックスを記憶してもよい。
【0035】
他の好ましい実施形態によれば、予測パイプライン化された動作が実施される。この動作においては、更新ブロックを記録するための所定の条件を確認するまで待機するのではなく、書き込まれることになっているデータユニットによって所定の条件が満たされる可能性があることをホスト書き込みコマンドが示すとすぐに、更新ブロックが書き込まれるように設定される。このように、当該設定は、ホストからデータユニットが来るのを待つ間にジャンプスタートが可能である。最終的に受信された実際のデータユニットが所定の条件を本当に満たしたときに、設定を待つ必要なく、ただちに更新ブロック内のページのプログラミングが生じることができ、これにより、書き込み性能が向上する。ホスト書き込みが中断されて受信された実際のデータユニットがもはや所定の条件を満たさない場合には、更新ブロックへの記録のための設定は廃棄され、代わりに、データユニットは、スクラッチパッドブロックに記録されることになる。
【0036】
他の好ましい実施形態において、データが受信されるにつれて、第1または第2の記憶装置のいずれに受信されたデータを記録するかが最初は不明な場合には、受信されたデータを第1および第2の記憶装置の両方のプログラミング回路のデータラッチにロードする。このように、データは第1または第2の記憶装置のいずれかをプログラムするためにいつでもただちに利用可能となる。特別な場合には、第1および第2の記憶装置は、データラッチの同一のセットを共有する。例えば、第1および第2の記憶装置が同一のメモリプレーン内にある場合、これらは、センス増幅器およびデータラッチの同一のセットを伴うプログラミング回路の同一のセットを使用できる。この場合、第1または第2の記憶装置のいずれかがプログラムされるべきかに関わらず、デフォルトのデータラッチのセットにデータがロードされることになる。
【0037】
本発明のさらなる特徴および利点は、添付の図面と共に解釈されるべきであるその好ましい実施形態の以下の説明から理解されるであろう。
【発明を実施するための最良の形態】
【0038】
メモリ構造およびその動作
まず図1Aを参照すると、フラッシュメモリは、メモリセルアレイと、コントローラとを含む。図に示されている例において、2つの集積回路装置(チップ)11および13は、メモリセルのアレイ15と、様々な論理回路17とを含む。論理回路17は、データ、コマンド、および状態回路を通じて別個のチップ上のコントローラ19のインターフェイスとなり、また、アドレス指定、データ転送、検知、および他のサポートをアレイ13に対して提供する。提供された記憶容量によっては、1から多までの数多くのメモリアレイチップを形成可能である。代わりに、コントローラと、アレイ全体の一部とを単一の集積回路チップ上に結合することができるが、これは、現在、経済的な代案であるとはいえない。
【0039】
典型的なコントローラ19は、マイクロプロセッサ21と、主にファームウェアとを記憶するための読み出し専用メモリ(ROM)23と、主にメモリチップ11および13へ書き込まれまたはそこから読み出されたユーザデータの一時記憶のためのバッファメモリ(RAM)25とを含む。回路27は、(複数の)メモリアレイチップのインターフェイスとなり、回路29は、接続31を通じてホストのインターフェイスとなる。この例において、データの完全性は、コードの計算専用の回路33でECCを計算することによって判断される。ユーザデータが記憶のためにホストからフラッシュメモリアレイへ転送されるにつれて、回路は当該データからECCを計算し、コードはメモリに記憶される。ユーザデータがメモリから後で読み出される場合には、ユーザデータは、再び回路33を通じて渡され、この回路33は、同一のアルゴリズムによってECCを計算して、当該コードを、計算されてデータと共に記憶されたコードと比較する。これらが同等であれば、データの完全性が確認される。これらが異なっていれば、使用される具体的なECCアルゴリズムによっては、アルゴリズムによってサポートされた数までのエラーのビットを識別および訂正できる。
【0040】
図1Aのメモリの接続31は、ホストシステムの接続31’に接続し、その例を図1Bに示す。ホストと図1Aのメモリとの間のデータ転送は、インターフェイス回路35を通じて行われる。また、典型的なホストは、マイクロプロセッサ37と、ファームウェアコードを記憶するためのROM39と、RAM41とを含む。他の回路およびサブシステム43は、特定のホストシステムによっては、大容量磁気データ記憶ディスクドライブ、キーボードのためのインターフェイス回路、モニタなどを含むことが多い。そのようなホストの例には、デスクトップコンピュータ、ラップトップコンピュータ、ハンドヘルドコンピュータ、パームトップコンピュータ、個人用携帯情報端末(PDA)、MP3および他のオーディオプレーヤ、デジタルカメラ、ビデオカメラ、電子ゲーム機、無線および有線電話通信装置、留守番録音装置、音声レコーダ、ネットワークルータなどが含まれる。
【0041】
図1Aのメモリは、コントローラとすべてのそのメモリアレイ回路装置とを図1Bのホストに着脱可能に接続可能な形態で含む小さな密閉カードとして実装されてもよい。すなわち、接続31と31’とを接続することにより、カードを接続解除して他のホストに移動させるか、または他のカードをホストへ接続することによって当該カードを置き換えることができる。代わりに、メモリアレイ装置は、コントローラと接続31とを含むカードに電気機械的に接続可能な別個のカードに密閉されていてもよい。さらなる代案として、図1Aのメモリは、図1Bのホストに埋め込まれていてもよく、接続31および31’は常時行われている。この場合、メモリは、通常、他の構成要素と共にホストの筐体内に収容されている。
【0042】
図2は、メモリアレイの一部分を示し、メモリセルが、消去ブロックにグループ化され、各消去ブロック内のセルは、単一の消去動作の一部として共に通常同時に消去可能である。消去ブロックは、この形のメモリ内の最小消去単位である。
【0043】
図2のそれぞれのメモリセル消去ブロックのサイズは様々でありうるが、ある市販の形態のものは、それぞれの消去ブロック内のデータの単一のセクタを含む。そのようなデータセクタの内容を図3に示す。ユーザデータ51は、典型的には512バイトである。ユーザデータ51に加えて、ユーザデータから計算されたECC53、セクタデータおよび/または内部にセクタがプログラムされた消去ブロックに関連するパラメータ55、パラメータ55から計算されたECC57、および含まれうる任意の他のオーバーヘッドデータがある。
【0044】
また、1つ以上のフラグがステータスまたは状態を示すパラメータ55に含まれてもよい。また、消去ブロックをプログラミングおよび/または消去するために使用される電圧レベルの表示をパラメータ55内に記憶することもでき、これらの電圧は、消去ブロックによって経験された周期の数および他の要因が変化するに従って更新される。パラメータ55の他の例には、消去ブロック内の任意の不良セルの表示、この物理消去ブロックにマッピングされた消去ブロックの論理アドレス、および一次消去ブロックが不良である場合の任意の代替の消去ブロックのアドレスが含まれる。任意のメモリシステムにおいて使用されるパラメータ55の特定の組み合わせは、設計に従って様々となり得る。また、オーバーヘッドデータのいくつかまたはすべてを、ユーザデータを含むかまたはオーバーヘッドデータが関連する消去ブロック内ではなく、そのような機能専用の消去ブロック内に記憶することもできる。
【0045】
図2の単一のデータセクタ消去ブロックと異なるのは、図4のマルチセクタ消去ブロックである。消去ブロック59も、消去の最小単位であり、4つのページ0〜3を含み、それぞれがプログラミングの最小単位である。データの1つ以上のホストセクタが、通常、セクタのデータから計算されたECCを少なくとも含むオーバーヘッドデータと共に各ページ内に記憶され、また図3のデータセクタの形式であってもよい。
【0046】
ブロック全体のデータの再書き込みは、通常、新しいデータを消去ブロックプールのブロック内にプログラムして、その後、元のブロックが消去されて消去プールに配置されることを伴う。ブロックのすべてのページより少ないデータが更新される場合には、更新データは、典型的には、消去済みブロックプールからのブロックのページに記憶され、残りの変更されなかったページ内のデータは、元のブロックから新しいブロックへコピーされる。その後、元のブロックは消去される。この大規模なブロック管理手法の変形例には、元のブロックからのデータを動かすことも消去することもせずに、他のブロックのページ内に更新されたデータを書き込むことが含まれる。この結果、複数のページが同一の論理アドレスを有することになる。データの直近のページは、セクタまたはページオーバーヘッドデータ内のフィールドとして記録されたプログラミング時間などの何らかの都合のよい手法によって識別される。
【0047】
さらなるマルチセクタブロック配列を図5に示す。ここで、総メモリセルアレイは、物理的に2つ以上のプレーンに分割され、4つのプレーン0〜3が図に示されている。各プレーンは、他のプレーンからほとんど独立して動作できるように、自身のデータレジスタ、センス増幅器、アドレス指定デコーダなどを有するメモリセルのサブアレイである。すべてのプレーンは、単一の集積回路装置上または複数の装置上に設けられてもよく、一例では、1つ以上の別個の集積回路装置から各プレーンが形成される。図5のシステムの例における各ブロックは、16個のページP0〜P15を含み、各ページは、1、2、またはそれ以上のホストデータセクタおよび何らかのオーバーヘッドデータの容量を有する。
【0048】
さらに他のメモリセル配列を図6に示す。各プレーンは、セルの数多くの消去ブロックを含む。動作の並列度を高めるために、互いに異なるプレーン内の消去ブロックを論理的にリンクさせて、メタブロックを形成する。そのようなあるメタブロックを、プレーン0の消去ブロック3と、プレーン1の消去ブロック1と、プレーン2の消去ブロック1と、プレーン3の消去ブロック2とから形成されるものとして、図6に示す。各メタブロックは、論理的にアドレス指定可能であり、メモリコントローラは、個々のメタブロックを形成する消去ブロックを割り当てて常時監視する。ホストシステムは、好ましくは、個々のメタブロックの容量に等しいデータ単位でメモリシステムのインターフェイスとなる。図6のそのような論理データブロック61は、例えば、メタブロックを構成するブロックの物理ブロック番号(PBN)にコントローラによってマッピングされた論理ブロックアドレス(LBA)によって識別される。メタブロックのすべての消去ブロックは共に消去され、各消去ブロックからのページは、好ましくは同時にプログラムされかつ読み出される。メタブロックは、このように消去ブロックがリンクされたシステム内の消去単位とみなされてもよい。メタブロック構造を有するあるメモリアレイにおいて、ページは、メタブロックの他のページと並列にプログラムされるだけであってもよい。これらのメモリアレイにおいて、メタページは、メタブロックの各プレーンからのページからなるメタブロックのプログラミングの最小単位である。
【0049】
図2〜図6に関して前述したメモリを実施するために使用されてもよいような、数多くの互いに異なるメモリアレイ構造、構成、および特定のセル構成がある。NAND形のメモリアレイの消去ブロックの1つを図7に示す。直列接続されたメモリセルの数多くの縦向きの列が、電圧VSSの共通源65とビット線BL0〜BLNのうちの1つとの間に接続され、さらには、ビット線は、アドレスでコーダ、ドライバ、読み出しセンス増幅器などを含む回路67に接続されている。具体的には、そのようなある列は、列の向かい合わせの端部にある選択トランジスタ77と79との間に直列接続された電荷蓄積トランジスタ70,71,…72,および74を含む。この例において、各列は16個の記憶トランジスタを含むが、他の個数も可能である。ワード線WL0〜WL15が、各列の1つの記憶トランジスタに渡って伸び、ワード線のアドレスデコーダと電圧源ドライバとを含む回路81に接続されている。線83および84上の電圧は、電圧源65および/またはビット線BL0〜BLNのいずれかに対する、消去ブロック内のすべての列の、選択レジスタを通じた接続を合わせて制御する。データおよびアドレスは、メモリコントローラから生じる。
【0050】
消去ブロックの電荷蓄積トランジスタ(メモリセル)の各行は、共にプログラムされかつ読み出されるページを形成してもよい。適切な電圧がそのようなページのワード線(WL)に印加されて、そのデータをプログラムしまたは読み出す一方で、残りのワード線に印加される電圧が、各蓄積トランジスタを導電状態にするために選択される。蓄積トランジスタの1つの行(ページ)をプログラムしまたは読み出す過程において、選択されていない行上の以前に記憶された電荷レベルが、すべての列に渡って印加された電圧とそのワード線に印加された電圧とによって乱される。これにより、特定の行のセルのプログラミングが当該行内の他のセルがプログラムされた後に妨げられる場合がある。多状態フラッシュメモリは、特に外乱の影響を受ける。論理状態の数が多くなる結果、個々の状態についてのしきい値電圧の範囲が狭くなり、これにより電荷レベルの小さな変化が、論理状態の変化を生じさせる場合がある。データ記憶密度がセル内の数の増えた論理状態を使用して増加されると、外乱に対する感度が増す。よって、行内のセルにデータをプログラムすることは、当該行内の他のセルがプログラムされた後では、当該プログラムされたセル内のデータを破損せずにはできない場合がある。よって、隣接するセルの後続のプログラミングからの外乱によってページサイズが規定されてもよい。ある行内のセルが同一の行内の他のセルのプログラミング後にプログラムできないような場合には、当該行によってプログラミングの最小単位が規定される。よって、セルの行は、データの1つのページを含んでもよい。そのようなメモリアレイにおいて、ある行のセル群をプログラムする場合に、当該行内のいくつかのセルがデータを含まない場合であっても、当該行はプログラムされたものとみなされる。後でメモリアレイ内にプログラムすることができない空のセルを有することは効率的でない。
【0051】
プログラムされたページ内の空のセルは、一度にメモリシステムによって受信される少数のセクタから生じてもよい。例えば、単一のセクタは、ホストによってメモリシステムに送られてもよい。セクタは、フラッシュメモリアレイのページ内に記憶される。セクタは、当該ページに対する後続の書き込みを阻止する。これは、ページが複数のセクタを保持するメモリシステムにおいて、効率的でない場合がある。例えば、ページがデータの4つのセクタを含む場合に、単一のセクタがページへ書き込まれる場合には、データの3つのセクタを保持可能なメモリアレイの部分が空のままになっている。ページサイズが大きくなるにつれて、そのような部分的に一杯なページからの無駄なスペースが増加する。メタページは、数多くのセクタを含んでもよいので、メタブロックを使用するメモリアレイにおいて、特に非効率な記憶となる場合がある。同様の問題は、2つ以上のセクタが受信されるが受信セクタの数がページ内のセクタの数より少ない場合にも生じる。そのような部分ページは、データの完全なページが受信されるまで、スクラッチパッドブロック内に記憶されてもよい。
【0052】
データが部分的に一杯のページへ書き込みを行った後で、記憶されたデータの統合を行って、部分的に一杯のページからのデータを一杯のページに結合してもよい。これは、周期的に行われるガーベッジコレクションの一部として行われてもよい。そのようなデータの統合により、部分的に一杯のページから、異なる消去ブロック内にある完全なページへデータがコピーされる。部分的に一杯のページを保持する消去ブロックは、その後、消去および再利用可能なように、古いものとしてマーク付けがなされる。そのような動作は、他の機能のためにも使用可能なシステムリソースを利用してもよい。
【0053】
メモリへの単一セクタ書き込みの例
図8は、消去ブロックである、ページがデータの4つのセクタからなるメモリシステム内のメモリアレイの指定アクティブブロック800を示す。ページ0〜5が示され、それぞれは水平方向に伸びている。各ページは、セクタ0,セクタ1,セクタ2,セクタ3として指定されたデータの4つのセクタを含んでもよい。ホストは、データの単一セクタをメモリシステムに送り、これらのセクタは、アクティブブロック800に記憶される。セクタXが受信されて、ページ0のセクタ0として記憶される。これにより、ページ0のプログラミングが阻害される。よって、ページ0のセクタ1,2,3はプログラムされず、空のままである(消去される)。ページ0がプログラムされた後に、セクタX+1が受信される。セクタX+1は、ページ1のセクタ0として記憶される。ページ1のセクタ1,2,3は空のままである。セクタX+1がプログラムされた後に、セクタX+2が受信される。セクタX+2は、ページ2のセクタ0として記憶される。ページ2のセクタ1,2,3は空のままである。セクタX+2がプログラムされた後に、セクタX+3が受信される。セクタX+3は、ページ3のセクタ0として記憶される。ページ3のセクタ1,2,3は空のままである。
【0054】
図9は、指定アクティブロック900である消去ブロック内にセクタを記憶するための一代替手法を示す。ここで、ページ毎に1つだけのセクタを記憶する代わりに、以前に記憶されたセクタが同一の消去ブロック内の新しいページへコピーされ、これらのセクタは、より最近受信されたセクタと共に記憶される。前述したのと同様に、セクタXが、ページ0のセクタ0として記憶される。その後、セクタX+1が受信され、セクタXがページ0からページ1のセクタ0へコピーされた状態で、セクタX+1は、ページ1のセクタ0として記憶される。よって、セクタXおよびセクタX+1は、共にページ1内に記憶される。その後、セクタX+2が受信され、ページ2のセクタ2として記憶される。セクタXは、ページ2のセクタ0として記憶され、セクタX+1は、ページ2のセクタ1として記憶される。よって、セクタX,X+1,X+2は、共にページ2に記憶される。その後、セクタX+3が受信され、ページ3のセクタ3として記憶される。セクタXは、ページ3のセクタ0として記憶され、セクタX+1はセクタ1として記憶され、セクタX+2は、セクタ2として記憶される。よって、ページ3が完全にデータで埋まるように、データの4つのセクタが、ページ3内に記憶される。
【0055】
図8または図9に示されているセクタの記憶に続いて、データは統合されてもよい。図8または図9のいずれかのセクタX,X+1,X+2,X+3は、新しい消去ブロックの単一のページへコピーされてもよい。これは、都合がよいときにはガーベッジコレクションの一部として行われてもよい。図10Aは、指定アクティブブロック1000のページ0に記憶されたセクタX,X+1,X+2,X+3を示す。消去ブロック1000のページ0は、データで埋まっている。アクティブブロック1100のページ0がセクタX,X+1,X+2,X+3でプログラムされる場合には、セクタX,X+1,X+2,X+3は、コピー元である消去ブロックから消去されてもよい。アクティブブロック800および900は、その内容がガーベッジコレクション中に統合される場合には消去されて、新しいデータを記憶するために利用可能となってもよい。
【0056】
ページ0のプログラミングの後に、セクタX+4が受信され、アクティブブロック1000のページ1のセクタ0として記憶される。その後、セクタX+5,X+6,X+7がそれぞれ受信され、ページ2,3,4内にそれぞれ記憶される。セクタX+4,X+5,X+6,X+7を単一のページに統合するために、セクタの統合が再び必要であってもよい。そのようなセクタの統合には時間がかかり、その間ホストデータは書き込まれなくてもよい。データの他の消去ブロックへの第2の統合の後、コピー元の消去ブロック1000は、古いものとしてマーク付けされて、その後に消去されてもよい。
【0057】
図10Bは、第2のガーベッジコレクション動作が以前のアクティブロック1000からのデータを再配置した後のアクティブブロック1010を示す。セクタX+4からX+7が、アクティブブロック1010の単一のページ(ページ1)に統合される。その後、より多くのセクタが受信され、アクティブブロック1010内に記憶されてもよい。それらのセクタが単一セクタの形態で受信される場合には、単一セクタは、前述したようにあるページ内に記憶されてもよい。
【0058】
図10Cは、ページ2〜5内に記憶された追加のセクタX+8からX+11を伴うアクティブブロック1010を示す。この時点でセクタX+8からX+11を統合するために、他のガーベッジコレクション動作が必要であってもよい。よって、単一セクタとしてホストから受信されるセクタを効率的に記憶するために、この方法は、データをある消去ブロックから他の消去ブロックへ転送して最初の消去ブロックを消去することを要する複数のガーベッジコレクション動作を使用する。より大きな消去ブロックにおいては、ガーベッジコレクション動作の数はより多くなる。メタブロックを使用するメモリシステムにおいては、消去ブロックが共に消去されかつ共にプログラムされるように、消去ブロック群がリンクされてもよい。データは、数多くのセクタを含むメタページ内にプログラムされてもよい。したがって、単一セクタを記憶することは、必要なガーベッジコレクションの量によって、非常に非効率的になる。
【0059】
図11Aは、データを記憶する代替方法を示す。図11Aは、メモリアレイの2つの消去ブロックを示す。アクティブブロック1110は、データが長期記憶のためにプログラムされるような消去ブロックである。スクラッチパッドブロック1120は、データが短期記憶のためにプログラムされるような消去ブロックである。少ない数のセクタが受信される場合、これらはスクラッチパッドブロック1120内にまず記憶される。セクタは、データのページを一杯にするのに充分なセクタが受信されるまで、スクラッチパッドブロック1120内に継続して記憶される。その後、これらのセクタは、アクティブブロック1110のページへコピーされる。
【0060】
セクタXが受信され、前述したように、スクラッチパッドブロック1120内のページ0のセクタ0としてプログラムされる。その後、セクタX+1が受信され、セクタXがページ1のセクタ0へコピーされた状態で、スクラッチパッドブロック1120のページ1のセクタ1として記憶される。その後、セクタX+2が受信され、セクタXおよびX+1がページ2のセクタ0とセクタ1とにそれぞれ記憶された状態で、スクラッチパッドブロック1120のページ2のセクタ2として記憶される。セクタX+2をスクラッチパッドブロック1120内に記憶した後に、セクタX+3が受信される。この時点で、セクタX,X+1,X+2,X+3は、アクティブブロック1110のページ0に書き込まれている。これら4つのセクタは、データの完全なページを形成する。よって、セクタX,X+1,X+2,X+3は、アクティブブロック1110のページ0内に効率的に記憶される。その後、セクタX+4,X+5,X+6,X+7がそれぞれ受信される。セクタX+4,X+5,X+6は、スクラッチパッドブロック1120のページ3,4,5内に記憶され、セクタX+7が受信されると、アクティブブロック1110のページ1のセクタ0,1,2へコピーされる。セクタX+7は、アクティブブロック1110のページ1のセクタ3へ直接プログラムされる。この時点で、スクラッチパッドブロック1120は、データを記憶するための利用可能なページを有しておらず、消去準備ができている(古いもの)として指定されてもよい。新しい消去ブロックを、受信される次のセクタまたはセクタ群用にスクラッチパッドブロックとして指定してもよい。この例は単一セクタが受信される様子を示すが、この方法は、セクタ群が、ページ内のセクタ数より少ない数のセクタを有するようなセクタ群用に使用されてもよい。また、前述した例は、データをスクラッチパッドブロックからアクティブブロックへ最大並列度で書き込むことを示すが、そのような書き込みは、最大未満の並列度で行われてもよく、それでも効率性の利点が提供される。よって、データがより高密度に詰め込まれ、かつガーベッジコレクションの頻度が少なくてすむように、セクタは、ある並列度でスクラッチパッドブロックへ書き込まれ、その後に、より高い並列度で他のブロックへ書き込まれる。
【0061】
スクラッチパッドブロックは、メタブロックを使用するメモリアレイ内で使用されてもよい。例えば、図11Bは、2つのメタブロックであるアクティブブロック1130およびスクラッチパッドブロック1140を示す。アクティブブロック1130およびスクラッチパッドブロック1140は共に、プレーン0〜3として示される4つのプレーンを有する。各プレーンは、幅が1セクタなので、4つのセクタがブロック1130または1140のメタページ内に記憶される。ブロックは共に、メタページ0〜5として示される6つのメタページを有する。データを効率的に記憶するための手法は、消去ブロックに関する前述したものと同一である。データの完全なメタページが利用可能になるまで、セクタは、スクラッチパッドブロック1140内に蓄積され、その時点で、完全なメタページが、アクティブブロック1130にプログラムされる。例えば、セクタX+3が受信されると、完全なメタページ(セクタX,X+1,X+2,X+3)が、アクティブブロック1130のメタページにプログラムされる。メタブロックは数多くのプレーンを有する場合があり、かつプレーンはその幅が数ページである場合があるので、メタページは、数多くのセクタを有する場合がある。そのような大きなメタページにとって、前述した手法は特に価値がある。なぜならば、そうでなければ無駄になってしまうメモリアレイ内のスペース量が大量だからである。図11Aおよび図11Bに関して示されているように、消去ブロック構造を使用する例に関して説明した本発明の態様を、メタブロック構造に適用してもよいし、その逆であってもよい。「ブロック」という用語は、メモリアレイの構成により、消去ブロックまたはメタブロックのいずれを示してもよい。いずれの場合においても、ブロックは、当該構成において使用される消去単位である。同様に、「ページ」という用語は、単一の消去ブロック内のページまたはメタブロックのメタページのいずれを指してもよい。いずれの場合においても、ページは、当該構成のためのプログラミング単位である。
【0062】
ページ内のセクタ数より多くを有するセクタ群が受信される場合、セクタは、スクラッチパッドブロック内にまず記憶されることなく、メモリアレイのアクティブブロックへ直接プログラムされてもよい。よって、データの完全なページが、高い並列度でアクティブブロックへ直接プログラムされてもよい一方で、データの部分ページは、完全なページのプログラミングの一部としてアクティブブロックへ書き込まれるようになるまで、低い並列度でスクラッチパッドブロックへプログラムされる。コントローラが、特定のセクタまたはセクタ群の宛先を判断してもよい。セクタ群をアクティブブロックへ書き込むことは、部分ページ書き込みおよび完全ページ書き込みの両方を含むことになり、完全ページは、アクティブブロックへ書き込まれ、部分ページはスクラッチパッドブロックへ書き込まれてもよい。
【0063】
図12Aは、ホストからのセクタがスクラッチパッドブロック内に記憶されている間に更新される、さらなる例を示す。第1のセクタX0 が受信され、スクラッチパッドブロック1250のページ0に記憶される。この例におけるページは、データの4つのセクタを記憶する。その後、X1 として示されているX0 の代わりが受信される。この例におけるセクタは、その論理アドレスに従って番号付けされ、下付き文字は、セクタが更新版であるかどうか、そしてもしそうであればどのバージョンかを示す。よって、セクタX1 は、論理アドレスがXのセクタであって、このセクタの第1の更新バージョンである。これは、X0 と同じ論理アドレスを有するデータのセクタであるが、何らかの更新された情報を反映している異なるデータを含む場合がある。セクタX1 は、スクラッチパッドブロック1250のページ1へ書き込まれる。コントローラは、どのセクタが現在のものでどれが古いものかを常時監視している。スクラッチパッドブロック1250において、特定の論理アドレスを有するセクタの直近に書き込まれたコピーが、現在のバージョンである。他のバージョンはどれも古いものである。よって、X1 がプログラムされると、セクタX0 は古いものとなる。X1 を受信後、セクタ(X+1)0 が受信される。これは、セクタX1 と論理的に連続するセクタである。セクタX1 および(X+1)0 は共に、ページ2へ書き込まれる。その後、セクタ(X+1)0 は(X+1)1 に置き換わる。これは、セクタ(X+1)0 を置き換えるセクタ(X+1)0 の更新バージョンである。セクタ(X+1)1 は、セクタX1 と共にページ3へ書き込まれる。その後、セクタ(X+2)0 が受信され、ページ4へ書き込まれる。(X+2)0 は、その後セクタ(X+2)1 に置き換わり、セクタX1 および(X+1)1 と共にページ5へ書き込まれる。その後、セクタ(X+3)0 が受信される。よって、データのページ(セクタX1 ,(X+1)1 ,(X+2)1 ,(X+3)0 )が利用可能である。セクタX1 ,(X+1)1 ,(X+2)1 ,(X+3)0 は、アクティブブロック1252として指定されたブロックへ書き込まれる。セクタX1 ,(X+1)1 ,(X+2)1 ,(X+3)0 は、完全ページ書き込みの並列度で、アクティブブロック1252へ書き込まれる。これは、この場合の予想最大並列度である。よって、セクタX1 ,(X+1)1 ,(X+2)1 ,(X+3)0 が低い並列度でスクラッチパッドブロック1250へ書き込まれた場合であっても、後で高い並列度でアクティブブロック1252へ書き込まれる。これは、セクタX1 ,(X+1)1 ,(X+2)1 ,(X+3)0 がアクティブブロック内により効率的に記憶されることを意味する。より効率的な記憶により、必要なガーベッジコレクションの頻度が減り、これによって性能が向上する。
【0064】
一代替例が図12Bに示されている。この例は、図12Aに示すものと類似しているが、ここでは、セクタ(X+3)0 が、アクティブブロック1252へコピーされる前に、スクラッチパッドブロック1250内に記憶されている。これにより、セクタ(X+3)0 をアクティブブロック1252へ書き込む前に更新することができる。図に示されているセクタ(X+3)0 は、セクタ(X+3)1 で置き換えることによって更新されている。データの完全ページ(セクタX1 ,(X+1)1 ,(X+2)1 ,(X+3)1 )は、スクラッチパッドブロック1250に保持されてもよく、何らかのトリガーイベントがあるまでは更新準備完了となっている。この場合、セクタ(X+4)0 が受信されて、トリガーイベントが提供される。セクタX1 ,(X+1)1 ,(X+2)1 ,(X+3)1 は、この時点で、最大並列度でアクティブブロック1252へ書き込まれる。セクタ(X+4)0 は、スクラッチパッドブロック1250内の次に利用可能なページ(ページ8)へ書き込まれる。
【0065】
図12Cは、スクラッチパッドブロック1250を使用してデータを更新する他の例を示す。データX0 から(X+15)0 のセクタが、元ブロック1254に記憶されている。ホストは、論理アドレスがセクタ(X+6)0 と同一の更新されたセクタであるセクタ(X+6)1 を送る。よって、セクタ(X+6)1 は、(X+6)0 を置き換えるものである。セクタ(X+6)0 を置き換えるために、元ブロック1254のページ1(セクタ(X+4)0 から(X+7)0 を含む)がセクタ(X+6)1 と結合され、この結合が、スクラッチパッドブロック1250のページ0へ書き込まれる。これらのセクタを結合することは、コントローラRAM25などのランダムアクセスメモリにおいて生じてもよく、メモリアレイに接続されているメモリレジスタ内で行われてもよい。更新されたページデータは、しばらくの間、アクティブブロックへ書き込むことなく、スクラッチパッドブロック1250内に保持されてもよい。後続の更新されたセクタ(X+5)1 がホストから受信されると、セクタ(X+5)1 がコピーされたセクタ(X+4)0 ,(X+6)1 ,(X+7)0 と共にスクラッチパッドブロック1250の他のページ(この場合、ページ1)へ書き込まれることによって、データは、スクラッチパッドブロック1250において更新されてもよい。スクラッチパッドブロック1250内のデータのページの複数の更新がこのように行われてもよい。更新は、更新されたセクタまたは複数のセクタを置き換えて、スクラッチパッドブロック1250の新しいページにデータの変更されなかったセクタをコピーすることによって行われる。コピーされたセクタは、効率的にコピーを行うことができるように、同一のプレーン内でコピーされる。その後、データの更新されたページは、メモリアレイ内のアクティブブロック1252へコピーされてもよい。無秩序な更新ブロックを要せずに、非連続の更新がこのように行われてもよい。例えば、前述した例において、更新されたセクタ(X+6)1 および(X+5)1 が非連続で受信されているが、アクティブブロック1252は連続的である。データの複数のページがこのようにスクラッチパッドブロック内で同時に保持および更新されてもよい。ページがもはや更新されることが予想されない場合には、ページは、アクティブブロックへコピーされてもよい。
【0066】
マルチレベルセルのプログラミングの例
ある種のメモリは、フローティングゲートメモリセルのしきい値電圧範囲を2つのレベルより多くに分割することによって、メモリアレイの各セル内に1ビットより多くのデータを記憶してもよい。図13は、そのようなマルチレベルセル(MLC)メモリを、互いに異なる論理状態を示す複数のしきい値電圧を提供するようにプログラムするやり方の例を示す。4つの互いに異なるしきい値電圧が、A,B,C,Dで示されている。複数のセルは、各電圧へプログラムされる。図13は、縦軸上に表されたセル数と共に、セル状態の分布を表している。各しきい値電圧A,B,C,Dは、異なる論理状態を表す。4つの状態は、2ビットのデータを表し、図に示されているように、1ビットは下位ページのデータを、1ビットは上位ページのデータを表す。ある例においては、下位ページが最初にプログラムされてもよい。下位ページのプログラミングの後で、セルは状態AまたはBとなる。その後、セルが状態AまたはB(上位ビット=1なので)のいずれかのままであるように、または状態CまたはD(上位ビット=0なので)に修正されるように、上位ページがプログラムされてもよい。これらの4つの状態は、それぞれ比較的狭い電圧ウィンドウを有するので、MLCメモリは、しきい値電圧の比較的小さな変化によるデータの破損を特に受けやすい。ある例では、下位および上位ページの両方を同時にプログラムするのが有利なこともある。これにより、上位ページデータのプログラミング中に生じるであろう破損といった、隣接するセルのプログラミングによって生じたセル内のデータの破損を減少させる助けとなりうる。
【0067】
図14は、スクラッチパッドブロック1460がMLCメモリ内のデータの破損を減少させるためにどのように使用されうるかの一例を示す。図14は、アクティブブロック1462およびスクラッチパッドブロック1460の両方をMLCメモリのブロックとして示す。両方のブロックは、番号付けがなされ、どのしきい値電圧状態がページのデータのビットを記憶するために使用されるかによって、「上位」または「下位」のいずれかとして示されている。この例において、メモリは、セクタXからX+3をまず受信して、スクラッチパッドブロック1460の下位ページ0内にこれらのセクタを記憶する。その後、メモリはセクタX+4からX+7を受信する。このとき、下位ページ(セクタXからX+3)および上位ページ(セクタX+4からX+7)は、同時にアクティブブロック1462へ書き込まれる。これにより、アクティブブロック1462の上位ページ0のプログラミング中にアクティブブロック1462の下位ページ0が破損することを防止することができうる。典型的には、このシステムが時間的な不利益がないように、上位および下位ページを共にプログラムするのに必要な時間は、上位ページだけをプログラムするのに必要な時間と同一である。セクタXからX+7でのアクティブブロック1462の下位ページ0および上位ページ0のプログラミングの後、セクタX+8からX+11が受信され、スクラッチパッドブロック1460の上位ページ0へプログラムされる。セクタX+12からX+15が受信されると、セクタX+8からX+11およびセクタX+12からX+15は、アクティブブロックの上位ページ1および下位ページ1へ並列的にプログラムされる。このシステムは、図に示されているように、データの後続セクタに対して継続する。よって、データのページは、スクラッチパッドブロック1460へ書き込まれて、その後、このページは、メモリセルの同一群の上位および下位ページとして、追加のページと共にアクティブブロック1462へ書き込まれる。スクラッチパッドブロック1460へのプログラミングは、ページの並列度で生じる一方で、アクティブブロック1462へのプログラミングは、ページの並列度の2倍で生じる。
【0068】
一代替の実施形態において、上位および下位ページがアクティブブロックへ互いに異なるときに書き込まれてもよいが、アクティブブロック内の下位ページが上位ページのプログラミング中に破損した場合には、下位ページのコピーは、スクラッチパッドブロックに保持される。図14において、セクタXからX+3が受信されて、アクティブブロック1462の下位ページ0と、スクラッチパッドブロック1460の下位ページ0との両方へ同時にプログラムされてもよい。その後、セクタX+4からX+7が受信されて、アクティブブロック1462の上位ページ0へプログラムされる。セクタX+4からX+7は、スクラッチパッドブロック1460内に保存されない。セクタX+4からX+7のアクティブブロック1462の上位ページ0へのプログラミング中に何らかの問題(電力消失など)がある場合には、アクティブブロック1462の下位ページ0内のデータも破損している可能性がある。すなわち、プログラミング中のセルのしきい値電圧が、もはや下位ページのデータを表す状態でないはないが、上位ページのデータを表す状態になるまでは完全にプログラムされていないといったように修正されている可能性がある。例えば、図13における状態Aから状態Dへプログラムされているセルは、プログラミングが停止したときには状態BまたはCである可能性がある。データがこのように破損される場合、書き込み中のデータの上位ページは、コピー元の位置から回復されてもよい。しかし、多くの場合、下位ページの他のコピーは存在しない。ここで、下位ページのコピーは、上位ページのプログラミングが完了するまで、スクラッチパッドブロック1460内に保持されている。よって、下位ページの破損されていないコピーが存在し、下位ページのデータを回復するために使用されてもよい。
【0069】
複数ファイルの例
1つ以上のホストデータファイルからのデータが、単一ブロックに記憶されてもよい。ページの一部があるファイルからのデータを含み、ページの一部が他のファイルからのデータを含むように、ページ内でファイル間の区切りが生じる場合がある。図15は、元ブロック1570のページ0からページi−1が第1のファイル(ファイル1)からのデータを含み、ページi+1からページn−1が第2のファイル(ファイル2)からのデータを含む例を示す。ページiは、ファイル1からのセクタ(i*4)および(i*4)+1と、ファイル2からのセクタ(i*4)+2および(i*4)+3とを含む。2つのファイルからのセクタがあることを示すために、ファイル2のセクタは、網掛け表示されている。
【0070】
図15は、ファイル2が新しいブロック1572に更新される様子を示す。新しいブロック1572の第1のページ(ページ0)は、元ブロック1570のページiの内容で書き込まれる。よって、新しいブロック1572のページ0は、ファイル2およびファイル1の両方からのセクタを含む。ファイル1からのセクタ(i*4)および(i*4)+1は、この時点では更新されないが、データの完全ページをプログラムするためにコピーされてもよい。更新されたファイル2の残りは、新しいブロック1572のページ1からi−1へプログラムされる。その後、ファイル1が更新される。セクタ0からセクタ(i*4)−1は、ページiからページn−1内に記憶される。しかし、セクタ(i*4)および(i*4)+1は、ファイル1の一部でもあり、更新されなければならない。新しいブロック1572はこの時点で一杯なので、更新されたセクタ(i*4)および(i*4)+1は、他のブロックへプログラムされる。その後、セクタ(i*4)および(i*4)+1ならびに新しいブロック1572内のセクタは、ガーベッジコレクション動作の一部として、単一ブロックに統合されてもよい。しかし、これには時間とシステム資源がかかり、一般的には望ましくない。
【0071】
図16は、2つの互いに異なるファイルからのセクタを含む図15の元ブロック1570のセクタを更新するための一代替手法を示す。この手法は、スクラッチパッドブロック1674を使用して、更新されたセクタを、完全に更新されたページの一部としてシステムの最大並列度で書き込まれてもよいようなときまで記憶する。ファイル2が更新されると、更新されたセクタ(i*4)+2および(i*4)+3は、スクラッチパッドブロック1674へ書き込まれる。ここで、これらのセクタは、スクラッチパッドブロック1674のページ0へ書き込まれ、低い並列度が使用される残りのページへはデータは書き込まれない。ファイル2の残りのセクタ(セクタ(i*4)+4からN−1)は、新しいブロック1676のページ0からn−1へコピーされる。これらのセクタは、最大並列度を使用する完全ページ書き込みですべて書き込まれる。その後、ファイル1が更新される。セクタ0から(i*4)−1は、ページn−i+1からn−2へ最大並列度でプログラムされる。その後、ファイル1のセクタ(i*4)および(i*4)+1は、セクタ(i*4)+2および(i*4)+3を新しいブロック1676のページn−1へコピーするのと並列して書き込まれる。よって、元ブロック1570内に以前保持されていたすべてのセクタの更新されたコピーは、現在、新しいブロック1676内に保持され、新しいブロック1676には古いデータは保持されていない。一般的に、新しいブロック1676などのブロックに対してガーベッジコレクションを行う必要はない。新しいブロック1676の各ページは、最大並列度でプログラムされて、ブロック内のデータの最大密度を達成する。スクラッチパッドブロック1674内のセクタ(i*4)+2および(i*4)+3は、この時点で古いものとしてマーク付けされてもよい。しかし、スクラッチパッドブロック1674は、ガーベッジコレクション動作を必要とせずにさらなる動作のために使用されてもよい。なぜならば、スクラッチパッドブロックは、定期的に現在および古いデータを両方含むからである。
【0072】
データの非連続セクタの記憶の例
以前の例の中には、完全ページを書き込むよりも低い並列度でデータのセクタをスクラッチパッドブロックへ書き込むものがあった。そのような例において、書き込み中のスクラッチパッドブロックのページ内の残りのスペースは、空のままである場合がある。なぜならば、既に記憶されたデータを妨害せずに後にプログラムすることができないからである。ある場合には、このようなともすれば空のスペースと、ともすれば未使用のプログラミング帯域幅を使用して、同一のページ内に関連性のないデータを記憶することができる。例えば、メモリシステムが単一セクタまたはページより小さいセクタ群内のホストデータを受信する場合、ホストデータのこれらのセクタを、関連性のないホストデータなどの関連性のないデータまたは制御データのセクタも保持するページ内のスクラッチパッドブロック内に記憶してもよい。同様に、完全ページの一部として後に記憶されるスクラッチパッドブロック内に記憶中のファイルの最初からのセクタが、論理的に関連性のない、同一のスクラッチパッドブロックのページに記憶された追加のセクタを有していてもよい。
【0073】
図17は、以前の例のように、セクタX,X+1,X+2がスクラッチパッドブロック1780内に記憶される場合の一例を示す。しかし、ここで、セクタX,X+1,X+2を保持するスクラッチパッドブロックのページ内の残りのスペースを、他のデータを記憶するために使用する。セクタY,Y+1,Y+2が、ページ0内にセクタXと共に記憶される。セクタY,Y+1,Y+2は、セクタX,X+1,X+2と論理的に関連性がなくてもよい。これらのセクタは、他のホストデータファイルからのものであってもよく、または同一のファイル内のセクタの他のクラスタからのものであってもよい。セクタY,Y+1,Y+2は、セクタX,X+1,X+2と連続していなくてもよく、論理アドレススペース内で分離されていてもよい。同様に、セクタZおよびZ+1が、セクタXおよびX+1と共にページ1内に記憶される。セクタZおよびZ+1は、セクタX,X+1,X+2およびセクタY,Y+1,Y+2の両方に論理的に関連性がなくてもよい。その後、X+3が受信されると、セクタX,X+1,X+2,X+3は、他のブロックのページへ書き込まれる。その後、Y+3が受信されると、セクタY,Y+1,Y+2,Y+3は、他のブロックのページへ書き込まれる。よって、利用可能な資源をより効率的に使用するために、関連性のないデータは、スクラッチパッドブロックの同一のページ内に記憶されてもよい。
【0074】
図18は、スクラッチパッドブロック1890内に記憶された関連性のないデータの他の例を示す。ここで、セクタX,X+1,X+2は、前述したように記憶され更新される。しかし、ここで、セクタYも並列的に記憶され更新される。更新されたセクタは、どのバージョンが記憶されているかを示す下付き文字によって表される。例えば、セクタX0 は、セクタX元バージョンである一方で、X1 は、セクタXの第1の更新バージョンである。セクタYは、頻繁に更新される制御データセクタまたはホストデータのセクタであってもよい。あるシステムにおいて、FAT情報などの制御データは、ホストデータが記憶される際に更新される。少量のホストデータが受信される場合、スクラッチパッドブロック1890内の制御データを更新するのは利点でありうる。これにより、制御データの単一セクタのみが更新される制御構造を更新することを避けるようにしてもよい。後の時点で、スクラッチパッドブロックからの制御データを使用して、制御データ構造を更新してもよい。
【0075】
スクラッチパッドブロック管理
スクラッチパッドブロックは、メモリアレイ内の指定されたブロックであってもよい。固定物理位置が、スクラッチパッドブロックとして選ばれてもよい。しかし、これは、メモリアレイを不均一に消耗させる結果となる場合がある。代わりに、スクラッチパッドブロックが古いデータで一杯になると他の消去ブロックがスクラッチパッドブロックとして選ばれるように、指定されたブロックは時々変更されてもよい。この場合において、メモリコントローラによって使用されるデータ構造により、スクラッチパッドブロックの位置が識別されてもよく、または、コントローラがメモリアレイの消去ブロックを走査した場合にどの消去ブロックがスクラッチパッドブロックであるかを判断するように、指定されたスクラッチパッドブロックがマーク付けされてもよい。スクラッチパッドブロックは、セクタを使用してマーク付けされて、それがスクラッチパッドブロックであると識別されるようにしてもよい。例えば、図19は、スクラッチパッドブロック2100の第1のセクタとしてのマーク付けセクタ2110を示す。カードに電源が投入されると、メモリアレイの消去ブロック(またはメモリアレイの一部分)が走査されて、1つのスクラッチパッドブロックまたは複数のスクラッチパッドブロックの位置を判断してもよい。図19の例において、各消去ブロックの第1のセクタが読み出されて、スクラッチパッドブロックを示すマーク付けセクタかどうかが判断される。
【0076】
データは、データ群としてスクラッチパッドブロックへ書き込まれてもよい。データ群は、ホストから受信されたセクタの論理的に連続した群である。データ群がスクラッチパッドブロック内に記憶される場合、記憶されたデータ群についての情報を提供するインデックスセクタも書き込まれる。データ群のセクタの位置が、インデックスセクタ内に記憶されてもよい。複数のデータ群を記憶するために、図19のスクラッチパッドブロック2100などのスクラッチパッドブロックを使用してもよい。図20は、1つのデータ群を記憶するスクラッチパッドブロック2100を示す。データ群1は、2つのセクタ2220および2221からなる。これらのセクタと、マーク付けセクタ2110と、インデックスセクタ2230とが、スクラッチパッド2100に記憶される。インデックスセクタ2230は、群1についての情報を記憶する。
【0077】
図21は、2つのセクタ2340および2341からなるデータ群2がプログラムされた後の、図20のスクラッチパッドブロック2100を示す。インデックスセクタ2350は、群1および群2についての情報を記憶する新しいインデックスセクタである。よって、インデックスセクタ2230は、古いものである。なぜならば、インデックスセクタ2350は、群1を含むスクラッチパッドブロック2100のデータ群の完全な記録を含むからである。
【0078】
図22は、3つのセクタ2460,2461,2462からなるデータ群3のプログラミング後の、図21のスクラッチパッドブロック2100を示す。インデックスセクタ2470は、群1,2,3についての情報を記憶する新しいインデックスセクタである。よって、インデックスセクタ2470は、スクラッチパッドブロック2100のデータの完全な記録を含むので、インデックスセクタ2350は古いものとなる。
【0079】
図23は、データ群1およびデータ群2がスクラッチパッドブロック2100から読み出されて、メモリアレイの他のブロック内の単一のページとして書き込まれた後の、図22のスクラッチパッドブロック2100を示す。インデックスセクタ2560は、データ群3についての情報を記憶する。スクラッチパッド2100内のデータ群1およびデータ群2は、古いものであり、別のところに記憶されているので、インデックス付けは必要ない。よって、インデックスセクタ2560は、スクラッチパッドブロック2100内にすべての現在のデータの完全な記録を含む。
【0080】
ホストがメモリアレイに対してデータのあるセクタまたは複数のセクタを要求する場合、コントローラは、要求されたセクタがスクラッチパッドブロック内にあるかどうかをまずチェックしてもよい。セクタがスクラッチパッドブロック内にない場合には、セクタは、通常のやり方で探索されてもよい。よって、スクラッチパッドは、メモリアレイ内のデータのセクタの位置を常時監視するために使用される通常のメディア管理の変更を要求しない。
【0081】
マルチストリーム更新およびインデックス付け
図24は、従来の方法によって単一セクタのページを有する更新ブロック内に更新が記憶されることによって更新される、論理群内のセクタの例を示す。データは論理セクタにパッケージ化されて、メタブロック(「ブロック」とも略称される)に記憶され、ここでは、メタブロックのすべての論理セクタは共に消去可能である。データはブロックにページ毎に記録され、各ページ内のすべての論理セクタは共にプログラム可能である。この例は、各セクタは典型的には約512バイトのサイズである、単一セクタのページを示す。ある場合には、「元」ブロック10が、昇順論理セクタ番号の順序などの所定の順序に従ってそこに記憶されたセクタの全論理群と共に形成される。例えば、ブロックは、好ましくは連続順で論理群のすべてのセクタをそのまま有するそのままの (intact) ブロックとみなされる。
【0082】
その後、ホストが論理群の論理セクタのうちのいくつかの最新バージョンとして更新を送出すると、更新されたセクタは、論理群専用の更新ブロック20に書き込まれる。更新データが所定の順序であることがわかると、更新ブロックに連続して記録できることがある。更新ブロックは、そのままのブロックになる可能性のある連続更新ブロックとみなされる。その一方で、更新セクタが連続順でない場合には、更新ブロックは非連続または「カオス的」とみなされる。この場合、セクタの最新バージョンが最終的にはどこか別の場所へコピーされて、新たなそのままのブロックを形成することになる。
【0083】
ホスト書き込み#1では、更新された論理セクタLS10’がメモリに送出されて、更新ブロック20のページ0に記録される。ホスト書き込み#2では、更新された論理セクタLS11’がメモリに送出されて、更新ブロック20内の次に利用可能な位置であるページ1に記録される。ホスト書き込み#3では、更新された論理セクタLS6’およびLS7’がページ2およびページ3にそれぞれ記録される。最後に、ホスト書き込み#4では、更新された論理セクタLS10’’がメモリに送出されて、更新ブロックのページ4に記録される。論理群の更新は、更新ブロックからホストへの更新データストリーミングと共に、例えばストリーム1などのストリームを形成するといえる。一般的に、元ブロックおよび更新ブロックのうちで分配される論理セクタの複数のバージョンがある場合に、最新の書き込みバージョンのみが、すべての過去のバージョンを古いものにする有効なものとなる。例えば、図24は、最新の書き込みバージョンである更新ブロックのページ4に記録されたLS10’’を示すので、これは論理セクタ番号10のデータについての最新の有効セクタである。過去のバージョンである、元ブロック10内のLS10および更新ブロック20内のLS10’は、古いものである。
【0084】
最終的に、更新ブロックは閉じられ、また更新ブロックと元ブロックとの間の有効セクタ(論理セクタの最新バージョン)が所定の順序で統合されて新しい元ブロックを形成することになる。古い元ブロックおよび更新ブロックは、再利用される。
【0085】
図25は、ページはマルチセクタでありかつ一度書き込み可能であると思われる、メモリに対して適用されるような図24に示されている書き込みの同一シーケンスを示す。このページの構成例が図24に示されているものと異なる点は、各ページが今度は1つではなく4つのセクタを含み、ある実施形態においては消去後に一度だけ書き込み可能なことである。既存の用語法に従って、メモリ装置が課するプログラミングの最小ユニットを「物理ページ」と称し、システムが課するプログラミングの最小ユニットを「メタページ」と称し、これが複数の物理ページから構成されてもよい。便宜上、「メタページ」および「ページ」は、別途規定のない限り交換可能に使用されるものとする。
【0086】
前述したのと同様に、各論理セクタは、元々は、元ブロック10に論理番号の昇順で連続して記憶されている。ブロックが4つのセクタのページ構成を有する場合には、ブロックは、さらにページに分割されることになり、各論理セクタは、好ましくは、各ページにおける明確なページオフセットを有する。例えば、ページP0は、論理セクタLS0〜LS3を内部に記憶している。よって、LS0は、ページの4つのスロットの1番目に記憶され、LS1は、第2のスロットに記憶されている、といった具合である。4つのセクタページの例において、所定のセクタLSnについてのページオフセットは、ブロックの第1の論理セクタがLS0という番号が付されていた場合、MOD[(n+1),4]によって与えられることになる。
【0087】
ホストがメモリに書き込むたびに、データユニット、典型的には論理セクタの番号を書き込むための書き込みコマンドを発行し、その後、論理セクタ自体を送信する。データの損失を防止するために、ホストとメモリとの間のプロトコルは、現在の書き込みデータがうまくメモリに書き込まれた後でなければ次のホスト書き込みは開始しないようなものとなっている。
【0088】
前に説明したように、マルチセクタページを伴うメモリ構造において、ページ内でセクタ整列を実施するのが好ましい。なぜならば、こうすれば、ガーベッジコレクション中に再整列をする必要性を回避するからである。よって、各ホスト書き込みから受信されたセクタは、整列の際には、ページの整数番号を更新ブロックに記入する必要はない。この結果、プログラミング中のページが部分的にしか一杯でないということになりうる。部分的に一杯のページは、ホストデータ前または後に空隙を有する場合がある。このような空隙は、できるだけ連続順序を維持するために、既存の論理セクタで前パディングまたは後パディングすることができる。次のホスト書き込みが次の論理セクタになるといけないので、部分ページを後パディングしないのが一般的に好ましい。しかし、一度書き込み可能なページを伴うメモリ構造の場合には、一旦書き込まれたら部分ページの一杯でない部分を再書き込みするというオプションはない。
【0089】
前述した例において、更新ストリーム(SPB)のうちの1つの中の有効なページ数がオプションとして1つに限定されていた。これは、原則を示すのには充分であるが、注意すべきなのは、1つより多くのページをSPBに記憶することができ、そこにおいては、最新の書き込みセクタを見つけるためにさらに多くの情報(例えば、より古い書き込みポインタ)を分析する必要がある。
【0090】
例えば図25において、ホスト書き込み#1では、更新されたセクタLS10’は更新ブロック20のページP0の第3のオフセットに記憶される。オプションとして、完全性のためには、第1の2つのスロットを、元ブロック10からのLS8およびLS9などの有効データでパディングすることができる。しかし、これでは、ページP0がホスト書き込み#1の最後に保存される際に、第4のスロットはまだ一杯となっていない。オプションとして、部分ページをLS11の最新バージョンでパディングすることができる。ページは一度書き込み可能なので、一杯でない第4のスロットは、さらなるプログラミングのために閉じられることになる。
【0091】
ホスト書き込み#2では、コマンドは、受信され更新されたセクタLS11’を書き込むことであり、これは、最終セクタLS10’から連続順序であることがわかる。理想的には、これは、P0内のLS10’の後の次のスロットに記録されるべきである。しかし、P0はさらなる書き込みに対して閉じられたので、LS11’が最終スロットにおける次の空ページP1に記憶され、これがその適切なページオフセットである。P1の第1の3つのスロットは、LS8,LS9,LS10’でパディングし、これらは、LS11’に連続して先行する論理セクタの有効バージョンである。
【0092】
ホスト書き込み#3では、コマンドは、LS6’およびLS7’を書き込むことである。これらは、それぞれ第3および第4のスロットにおける更新ブロック内の次の空ページであるP2に書き込まれる。第1および第2のスロットは、LS4およびLS5などの有効データでパディングされる。
【0093】
最後に、ホスト書き込み#4では、コマンドは、LS10’’を書き込むことであり、これがP3、スロット3に記憶される一方で、スロット1および2は、LS8およびLS9でそれぞれパディングされ、スロット4は、空のままとなる。
【0094】
更新ブロックが多くのパディングおよび無駄なスペースと共に非効率に使用される一方で、一度プログラム可能な各ページ内でのセクタ整列を維持しようとしていることがわかる。好ましくない特徴の1つは、ホストが連続して書き込んでも(2つの別個の書き込みコマンドにおいてセクタ10、その後11)、更新ブロックは連続的であることを止めてしまい、なんらかの古いデータを有するので、そのままの状態になることができない。
【0095】
前述した問題を回避して、部分的に一杯なページによる更新ブロック20内への非効率な記憶および過度のパディングを最小限にするために、追加のスクラッチパッドブロック30を使用することを前に説明した。スクラッチパッドブロック(SPB)30は、更新ブロック20に書き込まれる前にデータの完全ページをステージすることができるように、入力データに対する一時バッファおよびステージ領域としての役割を果たす。前述した4つのセクタのページの例において、4つのセクタが書き込まれて更新ブロック内のページを完全に一杯にするように、セクタはステージされる。ホストが別個の書き込みで連続データを書き込む場合、SPBにより、部分ページ書き込みをバッファリングすることができ、更新ブロックの連続性を維持することができる。しかし、これは、元ブロックおよび更新ブロックに加えて今度は有効データが、SPB上で分散してもよいことを意味する。
【0096】
便宜上、スクラッチパッドブロックのページサイズは、更新ブロックのそれと一般的には異なりうるが、同一であるとする。例えば、メモリシステムが物理ページレベルにおけるプログラミングをサポートしている場合には、スクラッチパッドブロックのページは、物理ページのサイズを有することができる。
【0097】
スクラッチパッドブロックおよび更新ブロックインデックス管理
ブロック管理を伴うメモリシステムが、2004年8月13日出願の米国特許出願第10/917,725号(特許文献22)に開示されている。この特許出願は、その全体が本願明細書において参照により援用されている。ブロック管理は、更新中のデータの各論理群と関連付けられる更新ブロックを提供する。開示されているのは、元ブロックまたは更新ブロック上のいずれかに存在するような有効データを捜し当てるための様々なインデックス付け手法例である。特に、更新ブロックが非連続順序の論理セクタを含む場合には、「カオス的更新ブロック」とみなされる。カオス的更新ブロックインデックス(「CBI」)を使用して、カオス的更新ブロックに記録された論理セクタを追跡する。
【0098】
スクラッチパッドブロックに保存されたSPBI/CBIインデックス
本発明の他の態様によれば、更新ブロックに加えてスクラッチパッドブロックを使用する場合に、関連するスクラッチパッドブロックインデックス(SPBI)を使用して、スクラッチパッドブロックに記録された更新セクタを追跡する。これは、更新ブロックに記録された論理セクタを追跡するために使用されるインデックス(例えば、「CBI」)に対する追加である。ユーザデータがスクラッチパッドブロックの部分ページに記憶される場合はいつでも、ページの少なくとも最終スロットが一杯ではないということになる。一実施形態において、スクラッチパッドブロック内の部分ページの最終スロットにSPBIを記憶することができる。好ましい一実施形態において、SPBIおよびCBIをSPBI/CBIセクタ内にパッケージ化して、いずれにしても使用されないスクラッチパッドブロック内の部分ページの最終スロットに記憶することができる。新しい部分ページが書き込まれる度に、更新されたSPBI/CBIセクタが終端スロットに書き込まれ、すべての過去のバージョンは古いものとなる。
【0099】
図26は、本発明の一般的な一実施形態に係る、第1のメモリブロックを第2のメモリブロックと共に使用し、記憶されたデータのインデックスを第2のブロックに保存することによって、データを更新する方法を示すフローチャートである。
【0100】
ステップ80:それぞれデータを連続的に記憶するための第1および第2の不揮発性記憶装置を提供する。
【0101】
ステップ81:第1および第2の不揮発性記憶装置に記録されたデータの少なくとも1つのインデックスを保持する。
【0102】
ステップ82:入力データを受信する。
【0103】
ステップ84:バッファリングされた入力データを第1の記憶装置に記録するための第1の所定の条件が満たされたかどうかを判断する。満たされていれば、ステップ85へ進み、そうでなければステップ86へ進む。
【0104】
ステップ85:バッファリングされた入力データを第1の記憶装置に記録する。ステップ88へ進む。
【0105】
ステップ86:バッファリングされた入力データを少なくとも1つのインデックスと共に第2の記憶装置に記録する。ステップ88へ進む。
【0106】
ステップ88:処理すべき入力データがもうなければ、ステップ72へ進み、そうでなければ処理を終了する。
【0107】
図27Aは、本発明の好ましい一実施形態に係る、更新ブロックをスクラッチパッドブロックと共に使用することによって、データを更新してインデックスを保持する特定の一例を示す。各ブロックは、メタブロックであって、すべてのそのメモリ位置は共に消去可能である。ブロックはページに編成され、そこでは、ページ内のすべてのメモリ位置は共にプログラム可能である。さらに、各ページは、1つより多くのセクタを記憶するサイズを有し、ブロックが消去される度に一度書き込み可能である。
【0108】
スクラッチパッドブロック(「SPB」)30が、更新ブロック(「UB」)20に加えて提供される。「ストリーム1」を使用して更新ブロック20に対するデータのフローをラベル付けする場合には、スクラッチパッドブロック30に対する対応するフローが「ストリーム0」にラベル付けされることになる。
【0109】
図24および図25における同一のホスト書き込みの例を使用して、図27Aに示されている本発明の利点を示すことにする。ホスト書き込み#1では、コマンドは、LS10’を書き込むことである。LS10’はスロット3を占有しなければならないので、完全ページは更新ブロック20に書き込むことはできない。代わりに、SPB30の新しいページにおいてバッファリングされることによって、ステージされる。よって、LS10’は、SPB30の次に利用可能な部分ページPP0のスロット3に記憶される。同時に、スロット1および2は、オプションとして、LS8およびLS9でそれぞれパディングされる。また、本発明の特徴によれば、SPBIおよびCBIは両方とも、セクタ、すなわち、SPBI/CBI1 50内にパッケージ化され、インデックスセクタ50は、好都合なことに、部分ページPP0の最後の未使用のスロットに記憶される。
【0110】
ホスト書き込み#2では、コマンドは、LS11’を書き込むことである。LS11’はスロット4に属するので、SPB30から連続するLS8,LS9,LS10’で前パディングされた完全ページを、更新ブロック20の次に利用可能なページP0に書き込むことができる。この場合、SPBI/CBIのためのインデックスセクタは更新されない。なぜならば、SPB30内の部分ページに対して書き込んでいないからである。整列は、SPBにおける前パディングと共に好ましいが、オプションである。
【0111】
ホスト書き込み#3では、コマンドは、LS6’およびLS7’を書き込むことである。これらはスロット3および4にそれぞれ属している。よって、先立つスロットがLS4およびLS5でパディングされると、更新ブロック20の他の完全ページであるP1が書き込まれる。同様に、SPBI/CBIのためのインデックスセクタは更新されない。なぜならば、SPB30内の部分ページに対して書き込んでいないからである。
【0112】
ホスト書き込み#4では、コマンドは、LS10’’を書き込むことである。LS10’’はスロット3に属するので、SPB30の次の部分ページPP1に書き込まれることになる。同様に、先立つスロット1および2はLS8およびLS9でパディングされる一方、最終スロットも、インデックスセクタSPBI/CBI3 の最終更新と共に記憶されることになる。
【0113】
図27Aに示されている手法は、ホスト書き込み#4の最後に更新ブロック20を使用する場合と図25に示されているものとを比較すると明らかなように、更新ブロックをより効率的に使用している。同一のホスト書き込みについて、図27Aに示されている手法は、費やす記憶装置は少なく、更新ブロック内で必要なパディングも少ないが、これはスクラッチパッドブロック30を犠牲にするものである。同時に、インデックス付け手法は、スクラッチパッドブロック内の未使用の記憶装置を有利に利用して、不揮発性メモリにインデックスを記憶する。
【0114】
本発明の重要な特徴および利点の1つは、図25に示されている例とは違って、更新ブロックにおける更新セクタの連続順序が、一連の連続した論理セクタの別個のホスト書き込み中に保持されることである。これは、図27Bに示されている例から明らかである。
【0115】
図27Bは、本発明の好ましい一実施形態に係る、更新ブロックをスクラッチパッドブロックと共に使用することによって、保持されているデータを更新する連続順序付けの他の例を示す。この例において、論理セクタLS10’〜LS16’は連続するが、数多くの別個のホスト書き込みに対して書き込まれる。
【0116】
ホスト書き込み#1では、LS10’が書き込まれる。これは、ページエンドスロットではないページのスロット3を占有することになるので、スクラッチパッドブロック30のスロット3に記録される。同時に、インデックスSPBI/CBI1がページエンドスロットに記録される。
【0117】
ホスト書き込み#2では、LS11’が書き込まれる。これは、ページエンドスロットを占有することになるので、更新ブロック20内の新しいページの最終スロットへ直接記録される。同時に、スクラッチパッドブロックに一時的に記憶されたLS10’は、スロット3に対してコピーされる一方で、スロット1および2は、元またはそのままのブロック10からのLS8およびLS9で前パディングされる。
【0118】
ホスト書き込み#3では、LS12’〜LS14’が書き込まれる。どれもエンドページオフセットを有しないので、スクラッチパッドブロック内の新しいページのスロット1〜3に記憶される。同時に、更新されたインデックスSPBI/CBI3がページエンドスロットに記録される。
【0119】
ホスト書き込み#4では、LS15’およびLS16’が書き込まれる。LS15’はページエンドスロットに当てはまるので、更新ブロック内の次のページの最終スロットへ直接書き込まれる。同時に、スロット1〜3がスクラッチパッドブロックからのLS12’〜LS14’で埋められる。
【0120】
連続論理セクタLS10’〜LS16’は、いくつかの別個のホスト書き込みに渡って書き込まれるにもかかわらず、連続的なやり方で、更新ブロックに記録されることがわかる。
【0121】
好ましい実施形態において、1つの有効な部分ページ(例えば、最終書き込み部分ページ)が、スクラッチパッドブロックの論理群毎に保持される。本発明は、スクラッチパッドブロック内の論理群毎に保持される1つより多くの有効部分ページを有する場合にも等しく適用可能である。その場合には、記録されたセクタを探し当てるために、1つより多くのページからのインデックス情報を分析する必要がある。
【0122】
スクラッチパッドブロックのページ内のセクタ整列およびパディングは好ましいが、オプションである。整列およびパディングは、後続の更新ブロックへの転送を促進することになる。
【0123】
更新ブロックのページ内での絶対セクタ整列は、あるメモリ構造におけるインデックス付けおよびコピーを簡素化することになる。また、ページ内のセクタは、たとえページ内のすべての連続セクタがいくつかのスロット数だけ循環的にシフトされる場合であっても、ページ整列されているとみなされる。その場合に、ページ内の第1の論理セクタの位置を示すページタグが、オフセットアドレスを提供することになる。
【0124】
図に示されている好ましい実施形態は、2つの記憶装置を別々の消去可能なブロックとして有している。一般的に、本発明は、メモリの2つの部分である2つの記憶装置に対して等しく適用できる。
【0125】
また、本発明は、それぞれが1ビットのデータを記憶するメモリセルを有する2状態メモリと、それぞれが1ビットより大きなデータを記憶することができるメモリセルを有する多状態メモリとに対して等しく適用できる。マルチページ記憶装置をサポートする多状態メモリについて、スクラッチパッドブロックの記憶動作には下位ページが好ましくは使用される。書き込むための第1のセクタが複数スロットページのスロット1の位置から開始しない場合には、部分ページを前パディングするのが好ましい。
【0126】
カオス的ブロックにはページレベルインデックス付けが使用され、スクラッチパッドブロックにはセクタレベルインデックス付けが使用される。すべてのカオス的ブロックおよびスクラッチパッドブロック、すなわち、SPBI/CBIをアクセスするために必要なすべてのインデックス付け情報は、コントローラSRAMに保持されて、迅速なアクセスおよび処理に供される。当該情報は、新しい部分ページが書き込まれる度にスクラッチパッドブロックに周期的に書き込まれる。
【0127】
一般的に、部分メタページ再配置データは、入力データと共にプログラムされて、プログラミングサイクル数を減少させる。スクラッチパッドブロック(SPB)は、一杯になるとコンパクト化される。SPBのコンパクト化は、すべての有効なデータを新しいブロックへ再配置することである。SPBにおいてUB毎に有効なデータを伴うページは1つしか有していないので、それらのページを新しいブロックにコピーするだけでよい。更新ブロック毎に有効なデータが複数ページある場合には(互いに異なるまたは同一の論理アドレスを含む場合があり、後者の場合には、統合するのが好ましい)。
【0128】
部分ページに保存された更新ブロックインデックス
本発明のさらに他の態様によれば、メモリブロックに記憶されたデータは、データによって占有されていない部分ページの部分にインデックスを記憶する。よって、メモリユニットのページが共にプログラム可能であり、かつメモリページのブロックが共に消去可能であるようなメモリユニットに編成されたメモリにおいて、メモリユニットに記憶されたデータユニットが所定の順序に従ってページ内に配列される場合であって、特にページが各消去後に一度プログラム可能である場合に、部分的に一杯のページが存在することになる。そして、ブロックのインデックスは、更新データで埋められていない部分ページに記憶される。部分ページは、現在のブロックまたは他のブロック内にあってもよい。
【0129】
図28は、ブロックの部分ページ内の更新データを記憶するためのメモリブロックのインデックスを保存するための好ましい手法を示す。
【0130】
ステップ90:不揮発性メモリをそれぞれデータの論理ユニットを記憶するためのメモリユニットの消去可能なブロックに編成し、また、各ブロックを1つ以上のページに編成し、各ページ内のメモリユニットが所定のページオフセットを有し、かつ消去後に共に一度プログラム可能である。
【0131】
ステップ92:データの論理ユニットの更新バージョンを記録するための更新ブロックとしてブロックを提供する。
【0132】
ステップ94:データの論理ユニットをホストから受信する。
【0133】
ステップ96:更新ブロック内のデータのインデックスを保持する。
【0134】
ステップ98:更新ブロックに対してページ毎に記録し、受信されたデータをページオフセットに従ってページ内に整列させ、記録すべきページがデータに占有されていない部分を有する場合には、データに占有されていない部分に対してインデックスを記録する。
【0135】
マルチストリーム追跡および同期
図29は、いくつかの論理群が現在更新を受けている、マルチストリーム更新において使用されるスクラッチパッドブロックを概略的に示す。例えば、更新中のk個の論理群がある場合には、k個の更新ブロック20−1,…,20−kを使用してk個の更新ストリームがあることになる。更新ブロック内の部分ページを回避するために、スクラッチパッドブロック30を他のストリーム(ストリーム0)において使用して、k個の更新ブロックに対するk個の対応する部分ページにおけるデータをバッファリングする。よって、オープンなk+1個のブロックがあることとなり、k個の部分ページは、k個の更新ブロック内の論理ユニットのk個の論理群の現在の更新を扱っている。図に示されている例は、スクラッチパッドブロック内の更新ブロック毎に1つの有効ページがあるという好ましい実施形態に関する。
【0136】
更新およびスクラッチパッドブロック内で分散された有効セクタによって、電源サイクルの場合のセクタの最新書き込みバージョンを識別する際に問題が生じる場合がある。なぜならば、同一の論理セクタの互いに異なるコピーが更新およびスクラッチパッドブロックの両方に見受けられるからである。電源リセット後の更新ブロックに対するメモリ走査により、論理セクタの複数のバージョン(あれば)の優先順位が確立される。なぜならば、更新ブロックの位置は、明確な順序で一杯になるからである。同様に、スクラッチパッドブロックを走査して、論理セクタの最終書き込みバージョンを識別できる。しかし、スクラッチパッドブロック内の最新バージョンと、更新ブロック内の最新バージョンとがある場合には、どちらがより新しいかは容易には判断されない。例えば、図27Aにおいて、セクタLS8〜LS10は、両方のストリームにおいて見受けられる。図27A上のようなデータの同一のパターンは、書き込みLS8’〜LS10’,書き込みLS8’’〜LS10’’,書き込みLS8’’’〜LS10’’’,書き込みLS4’〜LS7’という互いに異なるコマンドシーケンスによって作成可能である。この場合、有効セクタは、スクラッチパッドブロックというよりもむしろ更新ブロック内にあることになる。
【0137】
本発明の他の態様によれば、複数のメモリブロック内に存在するであろうデータの最新書き込みバージョンを識別することができる同期情報を有する不揮発性メモリへ更新データを書き込む方法が提供される。
【0138】
図30は、入力データのシーケンスをあるブロックに書き込む従来の場合を示す。不揮発性メモリブロック22は、明確な順序で一杯になるように編成される。上から一杯になるように概略的に示す。よって、データ「A」、「B」、「C」、「A’」のセグメントの連続書き込みが、ブロック内で連続して置かれる。このように、例えば「A’」が「A」の他のバージョンである場合には、ブロック22内にその記録された位置から、「A」に取って代わる後続のバージョンであることが判断できる。以下の実施形態は、ある限定的なストリームの更新時にストリームがどのくらい一杯になったかについての情報を記憶する概略的な考え方の、有効ではあるが特別な場合である。
【0139】
図31Aは、本発明の好ましい実施形態に係る、異なる書き込みが2つのブロックに対してインターリーブされている場合であっても記録順序または優先順位を追跡する他の手法を示す。例えば、データセグメント「A」、「B」、「C」、「A’」などの各書き込みは、1つ以上の所定の条件によって、第1のブロック(例えば、ブロック22)または第2のブロック(例えば、ブロック32)に記録することができる。この例において、「A」は、第2のブロック32に対する第1の書き込みに記録される。これに続いて、「B」が第1のブロック22に記録される第2の書き込みが生じ、「C」が第2のブロック32に記憶される第3の書き込みが生じ、そして最後に「A’」が第1のブロック22に記録される第4の書き込みが生じる。
【0140】
図に示されているように、ストリーム0は、第2のブロック32に対するデータ記録のストリームであり、ストリーム1は、第1のブロック22に対するデータ記録のストリームである。2つ以上のストリームにおける同一の論理データのインターリーブされた更新の場合、更新の優先順位を追跡することが重要であり、それによって、最新の記録されたデータの位置が定義される。好ましい一実施形態において、これは、少なくとも所定のストリームが記録される度に、優先順位情報を保存することによって達成される。
【0141】
優先順位情報は、ストリーム0内の後者がブロック32に記録される度に、書き込みデータと共に保存されている。好ましい実施形態において、優先順位情報は、第1のブロック22内の次の空の位置(すなわち、次の記録位置のアドレス)をポイントする書き込みポインタ40である。書き込みポインタは、ストリーム0に記憶されているデータと共に保存される。
【0142】
よって、書き込み「A」動作では、ブロック22内の次の空の位置をポイントするポインタPA 40−Aが、ストリーム0内のブロック32に「A」と共に保存される。書き込み「B」動作では、書き込みはストリーム1内のブロック22に対してなので、ポインタは保存されない。書き込み「C」動作では、ポインタPC 40−Cが、ストリーム0内のブロック32に「C」とともに保存される。ブロック22に対する書き込み「A」において、ストリーム1に保存されるポインタはない。
【0143】
書き込み「A」の終了時に、電源遮断後にメモリがリセットされると、コントローラRAM内のインデックスが失われ、メモリを走査することによって再構築しなければならない。逆方向に走査することによって、ブロック22および32の各々は、データ「A」の最終書き込みバージョンを探し当てたことになる。書き込みポインタ40は、2つのブロック間のまさしく最終バージョンを決定するために使用可能である。例えば、ポインタPC は、「A’」の記録の前のブロック22における位置をポイントしている。よって、「A’」は、「C」の後に記録される。また、「C」は「A」の後の位置のブロック32内に記録されるので、「A’」は「A」の後続バージョンであると結論付けることができる。
【0144】
UB毎にSPBにおける1つより多い有効ページがある他の実施形態において、最新の書き込みデータを検出するために、1つより多い書き込みポインタを分析する必要があることになる。
【0145】
図31Bは、書き込みが2つのブロックに対して記録される場合に記録順序を追跡する他の実施形態を示す。この実施形態は、図31Aに示されているものと同様であるが、書き込みポインタがブロック32内の次の空の位置をポイントし、ブロック22に保存される点が異なる。ストリーム0は、第2のブロック(例えば、ブロック32)に記録されている一方で、ストリーム1は、第1のブロック(例えば、ブロック22)に記録されている。ストリーム1が第1のブロックに記録される度に、第2のブロック22における次の記録位置のアドレスを与える第2のブロック書き込みポインタ40’が、それと共に保存されている。この例において、ポインタP’B 40’−Bは、「B」と共に記録されている。同様に、ポインタP’A'40’−A’は、ストリーム1のブロック22に「A’」と共に記録されている。
【0146】
図32Aは、発明の一般的な実施形態に係る、2つのデータストリーム間の記録シーケンスを同期させる方法を示すフローチャートである。
【0147】
ステップ100:それぞれ連続的にデータを記録するための第1および第2の不揮発性記憶装置を提供する。
【0148】
ステップ102:第1または第2の記憶装置のいずれかを優先順位情報のための記憶装置として指定し、優先順位情報は、第1の記憶装置内の第1のデータユニットが第2の記憶装置内の第2のデータの前または後に記録されたかどうかを判断するために使用される。
【0149】
ステップ110:入力データを受信する。
【0150】
ステップ120:受信された入力データを第1の記憶装置に記録するための所定の条件が満たされたかどうかを判断する。満たされていれば、ステップ130’へ進み、そうでなければステップ140’へ進む。
【0151】
ステップ130:受信された入力データを第1の記憶装置に記録する。同時に、第1の記憶装置が指定された記憶装置である場合は、優先順位情報を第1の記憶装置に追加的に記録する。ステップ150へ進む。
【0152】
ステップ140:受信された入力データを第2の記憶装置に記録する。同時に、第2の記憶装置が指定された記憶装置である場合は、優先順位情報を第2の記憶装置に追加的に記録する。ステップ150へ進む。
【0153】
ステップ150:受信すべき入力データがもうなければ、ステップ110へ進み、そうでなければ処理を終了する。
【0154】
好ましい一実施形態において、優先順位情報は、次の記録が指定されていない記憶装置内で生じる位置のアドレスである書き込みポインタである。
【0155】
図32Bは、書き込みポインタを使用する一実施形態に係る、2つのデータストリーム間の記録シーケンスを同期させる方法を示すフローチャートである。
【0156】
ステップ100’:それぞれ連続的にデータを記録するための第1および第2の不揮発性記憶装置を提供する。
【0157】
ステップ110’:入力データを受信する。
【0158】
ステップ120’:受信された入力データを第1の記憶装置に記録するための所定の条件が満たされたかどうかを判断する。満たされていれば、ステップ130’へ進み、そうでなければステップ140’へ進む。
【0159】
ステップ130’:第2の記憶装置において次の記録が生じるであろう位置のアドレスを取得する。
【0160】
ステップ132’:当該アドレスを受信された入力データと共に第1の記憶装置に記録する。ステップ150’へ進む。
【0161】
ステップ140’:受信された入力データを第2の記憶装置に記録する。ステップ150’へ進む。
【0162】
ステップ150’:受信すべき入力データがもうなければ、ステップ110へ進み、そうでなければ処理を終了する。
【0163】
本発明は、メモリユニットの消去可能なブロックに編成される不揮発性メモリに対して特に適用可能であり、各メモリユニットは、データの論理ユニットを記録するためのものであり、各ブロックも、1つ以上のページに編成される。さらに、各ページは、複数の論理ユニットで消去後に一度プログラム可能であり、各論理ユニットは、所定のページオフセットを有して所定の順序となっている。この方法は、基本的には、論理ユニット群の更新データを記憶しまたはバッファリングするための2つのブロック(例えば、更新ブロックとスクラッチパッドブロック)を提供し、論理ユニットの最新の書き込みバージョンが第1または第2のブロックにあるかどうかを識別する助けとなるための同期情報を維持する。図29に関して、複数のストリームがある場合には、図31Aに示されている実施形態が好ましい。なぜならば、SPB内の1箇所にすべての書き込みポインタが記憶されればより好都合だからである。
【0164】
更新ブロック書き込みポインタの実施形態
好ましい一実施形態によれば、書き込みポインタという形態の同期情報は、スクラッチパッドブロックにバッファリングされている度に、ホストデータと共に保存される。書き込みポインタは、書き込みポインタがスクラッチパッドブロックに保存されているときに、更新ブロック内の次の書き込みのための位置のアドレスを与える、更新ブロック書き込みポインタである。特に、これは、ホストデータを記憶するためにいずれにしても使用されないスクラッチパッドブロックの部分に保存される。好ましくは、更新ブロック書き込みポインタは、スクラッチパッドブロックの部分ページに記憶されたインデックスSPBI/CBIに含まれる。更新ブロック書き込みポインタにより、スクラッチパッドブロックにバッファリングされた所定の論理セクタが更新ブロックに対する後続の書き込みによって古いものとなってしまったかどうかを判断することができる。
【0165】
電源リセットがある場合で、当該論理セクタの2つのバージョンが2つのブロック内に見出される場合には、書き込みポインタは、どちらのバージョンが最新かを判断することができることになる。例えば、ポイントされた位置の後に更新ブロック内の論理セクタが記録されていれば、SPB内の部分ページ内のバージョンに取って代わるものとなる。その一方で、論理セクタが更新ブロックに見出されないか、または前の位置に記録されていた場合には、スクラッチパッドブロックの部分ページにバッファリングされたバージョンがまだ有効であるという結論となることになる。
【0166】
図33Aは、第1のシーケンスに係る2つのホスト書き込み#1および#2の後のスクラッチパッドブロックおよび更新ブロックの状態を示す。第1のシーケンスは、書き込みLS10’に対するホスト書き込み#1と、書き込みLS10’’およびLS11’に対するホスト書き込み#2とについてである。
【0167】
ホスト書き込み#1では、コマンドは、LS10’を書き込むことである。LS10’はページ境界にないので、LS8およびLS9で前パディングされたスクラッチパッドブロック30内の部分ページPP0に記録され、現在のインデックスSPBI/CBI1 で終端される。部分ページPP0が書き込まれると、書き込みポインタ40が、現在のインデックスSPBI/CBI1 50に含まれ、最終スロットに保存される。書き込みポインタ40は、更新ブロック20内の最初の空ページP0をポイントする。
【0168】
ホスト書き込み#2では、コマンドは、LS10’’およびLS11を書き込むことである。LS11’はページエンドにあるので、更新ブロック20におけるP0の最終スロット(スロット4)に直接書き込まれる。同時に、スロット3にはLS10’が書き込まれ、スロット1および2は、LS8およびLS9でそれぞれパディングされる。
【0169】
今、メモリが電源遮断を受けてRAM内に保持されたインデックス付け情報が失われた場合には、物理メモリの逆方向の走査により、インデックス付け情報の再構築が試みられることになる。更新ブロックおよびスクラッチパッドブロック(SPB)の両方がLS10の最新バージョン、すなわち、LS10’およびLS10’’を生じさせることになることがわかる。しかし、LS10’’は書き込みポインタがSPBのPP0に記録された後に記録されるので、LS10’よりも遅いバージョンであると結論付けることができる。
【0170】
図33Bは、図33Aに示されている第1のシーケンスの逆である第2のシーケンスに係る2つのホスト書き込み#1および#2の後のスクラッチパッドブロックおよび更新ブロックの状態を示す。逆のシーケンスは、LS10’およびLS11’を書き込むためのホスト書き込み#1と、LS10’’を書き込むためのホスト書き込み#2とについてである。
【0171】
ホスト書き込み#1では、コマンドは、LS10’およびLS11’を書き込むことである。LS11’はページエンドにあるので、更新ブロック20内のP0の最終スロット(スロット4)に直接書き込まれる。同時に、スロット3にはLS10’が書き込まれ、スロット1および2は、LS8およびLS9でそれぞれパディングされる。
【0172】
ホスト書き込み#1に続くホスト書き込み#2では、コマンドは、LS10’’を書き込むことである。LS10’’はページ境界にないので、LS8およびLS9で前パディングされたスクラッチパッドブロック30内の部分ページPP0に記録され、現在のインデックスSPBI/CBI2 で終端される。部分ページPP0が書き込まれると、書き込みポインタ40が、現在のインデックスSPBI/CBI2 50に含まれ、最終スロットに保存される。書き込みポインタ40は、更新ブロック20内の次の空ページP1をポイントする。
【0173】
この場合、電源リセット後、例えば更新ブロック内の論理セクタLS10’が、更新ブロック20内のポイントされた位置の前に記録されていることがわかる。そして、更新ブロック20内のLS10’の最新バージョンは、スクラッチパッドブロック30の部分ページ内にある他のバージョンLS10’’によって取って代わられるという結論を出すことができる。
【0174】
図34Aは、スクラッチパッドブロックインデックス(SPBI)の好ましい一データ構成を示す。SPBI情報は、k個の更新ブロックの各々についての後続のフィールドを含む。これは、論理群/UB毎に1つの有効ページを有するSPBの特別な場合である。
【0175】
論理群番号は、所定のストリーム内の更新中の論理群を識別する。好ましくは、ゼロ値「FFFF」が、空の更新ブロックか、または有効なスクラッチパッドデータがない更新ブロックに記憶される。
【0176】
ページ開始セクタは、スクラッチパッドブロックに書き込まれた部分ページの最初の論理セクタである。
【0177】
セクタラン長は、スクラッチパッドページへ書き込まれた部分ページの有効セクタの数である。
【0178】
有効ページ番号は、スクラッチパッドブロックに書き込まれた唯一有効(唯一有効)部分ページを識別する。これが、スクラッチパッドブロックに最後に書き込まれた部分ページとなる。代わりに、アドレス指定は、セクタオフセットを使用して実現することもでき、更新ブロックに対する部分ページの第1の有効セクタをポイントする。セクタオフセットは、ブロックの最初に対してカウントされる。好ましい実施形態において、1つの物理ページのみが、所定の更新ブロックについての有効データを含む。スクラッチパッドブロックに書き込まれなかったセクタに関しては、FFFFが記憶される。
【0179】
更新ブロック書き込みポインタ40は、スクラッチパッドが最後に書き込まれた場合に、対応する更新ブロックの最初の書き込まれていないセクタ位置のセクタアドレスである。このセクタ位置から更新ブロックに書き込まれたセクタはどれでも、スクラッチパッドブロックに書き込まれたセクタの代わりとなることになる。
【0180】
図34Bは、図33Aに示されているホスト書き込み#1についてのスクラッチパッドブロックインデックス内の値の例を示す。この例において、論理群番号は、「1」であり、論理セクタLS0からLSN−1を含む。ストリーム1において、添付の更新ブロックおよびスクラッチパッドブロックで更新中である。部分ページはPP0であり、LS8または「8」で始まり、「3」のランを有し、LS10’で終了する。有効部分ページ番号は「0」である。最後に、書き込みポインタは、更新ブロック内の次の書き込み位置をポイントし、「0」のセクタオフセットを有する。
【0181】
更新されたインデックスがスクラッチパッドブロックに記録されるのみの場合であって、更新ブロックに直接データが書き込まれるときはいつもスクラッチパッドブロックは書き込まれることはない場合には、そのような状況下でインデックスが無効となるのは明らかである。
【0182】
一般的に、全SPBインデックス情報は、CBIインデックス情報と共に、常にコントローラSRAM内のデータ構成に保持される。SPB内の有効セクタは、セクタレベルのインデックス情報に基づいてアクセスされる。好ましい実施形態において、SPBI/CBIインデックスは、スクラッチパッドブロック内の不揮発性メモリに記憶される。特に、スクラッチパッドブロック(SPB)に部分ページが書き込まれる度に、最新のSPBI/CBIが部分ページの最終セクタに記憶される。
【0183】
SPBは、更新ブロックの所定の数(例えば、8)までをサポートする。SPBブロック内の部分ページデータは、ホストがページの最終セクタを書き込むと、関連する更新ブロックに統合される。所定の場合における論理群についてのSPB内の1つより多い部分ページ内にデータが存在することがあるが、最終書き込み部分ページについてのデータだけが有効である。同様に、SPBI/CBIセクタの複数のコピーがSPB毎に存在することがあるが、最終書き込みコピーのみが有効である。セクタをSPBに書き込む必要があるがSPBが一杯の場合には、ブロックをまず新しいSPBブロックにコピーして、古いSPBを消去し、その後にセクタを新しいSPBに書き込む。SPBの書き込みは、連続更新ブロックがカオス的になったという理由で、または以前スクラッチパッドブロックを含んだ更新ブロックが閉じられたという理由で、SPBI/CBIが更新される必要がある場合にも行われる。
【0184】
好ましい実施形態において、スクラッチパッドブロック(SPB)の書き込みは、一度に1ページ行われる。ストリーム/論理群/更新ブロック毎のページ数も1つに制限されているので、最新のSPBIのみが必要である。なぜならば、有効なコピーがUBにあるのか、またはSPBにあるのかについて問題となるであろう1つの論理ページのみが存在するからである。同様に、SPB内のUB毎のページ数が1つ以上の場合、古いSPBIも分析する必要があることになる。
【0185】
前述した実施形態は、更新ブロック書き込みポインタを、SPBI/CBIセクタの一部として、スクラッチパッドブロックの最新の部分ページに記憶する。複数のブロック内に存在しうる複数のバージョンから論理セクタの有効バージョンを識別するための代替の実施形態が可能である。また、スクラッチパッドブロック内のストリーム毎に1つより多くのページを有するか、または論理群毎に1つより多くの更新ブロックまたはストリームを有することも可能である。
【0186】
スクラッチパッドブロック書き込みポインタの実施形態
本発明の他の実施形態によれば、同期情報は、スクラッチパッドブロックにバッファリングされた所定の論理セクタが更新ブロックに対する後続の書き込みによって古いものとなってしまったかどうかを判断することができるように維持される。これは、同期情報が更新ブロックのページに記憶されるときに、スクラッチパッドブロック内の次の書き込みについての位置のアドレスを与えるスクラッチパッド書き込みポインタを含むことによって達成される。
【0187】
図35Aおよび図35Bは、図33Aおよび図33Bの連続ホスト書き込み後のスクラッチパッドブロックおよびスクラッチパッドブロック書き込みポインタに対する更新ブロックの中間状態をそれぞれ示す。
【0188】
図35Aは、ホスト書き込み#1後のスクラッチパッドブロックおよび更新ブロックの状態を示す。ホスト書き込み#1では、論理セクタLS10’は、ページのスロット3に属し、ページ境界にはないので、スクラッチパッドブロック30内の部分ページPP0に記録される。オプションとして、LS8およびLS9で前パディングされて、現在のSPBI/CBI1 で終端される。電源遮断後にメモリが再開された場合には、論理セクタLS10’の有効バージョンは、最終のSPBI/CBI1 インデックスによって正しく探し当てられることになる。これが正しいのは、更新ブロック20に対して何も書き込まれていないからである。
【0189】
図35Bは、ホスト書き込み#1に続くホスト書き込み#2を示し、コマンドは、LS11’を書き込むことである。LS11’はページ境界(スロット4)に当たるので、一杯のページP0の第4スロットに記録され、LS8,LS9,LS10で前パディングされる。同期情報は、SPB30における次の空位置をポイントするSPB書き込みポインタ40’の形態を取る。前の実施形態と異なり、SPB書き込みポインタ40’は、SPB30内のSPBI/CBIインデックスに含まれない。代わりに、更新ブロック20に現在記録されているページ内のセクタのヘッダ部分に記憶される。電源遮断後にメモリが再開された場合には、論理セクタLS10’の有効バージョンは、更新ブロック20内で正しく探し当てられることになる。なぜならば、SPBにおけるLS10のバージョンは、SPB書き込みポインタ40’によってポイントされた位置の前に記録されているからである。
【0190】
図36は、更新ブロックに記録されているセクタのオーバーヘッド部分に記憶されているスクラッチパッド書き込みポインタを示す。スクラッチパッド書き込みポインタ40’は、更新ブロックに現在記録されているページ内のセクタのうちの少なくとも1つに保存されている。好ましい実施形態において、書き込まれているページ内のセクタのうちの少なくとも1つのオーバーヘッド部分に保存される。
【0191】
タイムスタンプの実施形態
さらに他の実施形態において、同期情報は、最新バージョンを正確に見つけることができるように、複数のストリームに対して書き込まれたデータセクタのタイムスタンプとして符号化することができる。
【0192】
図37は、2つの更新ストリーム間の記録シーケンスを追跡するためのタイムスタンプの使用を示す。前述したように、更新データの各セグメントは、第1のブロック(ストリーム1)または第2のブロック(ストリーム2)のいずれかに記録することができる。この例は、時間T1において「A」が第1のブロックに記録され、時間T2において「B」が第2のブロックに記録され、時間T3において「C」が第1のブロックに記録され、時間T4において「A’」が第2のブロックに記録されている。
【0193】
新しいデータの更新部分毎に少なくとも1つのタイムスタンプが記憶される。よって、「A」はタイムスタンプTS1を有し、「B」はタイムスタンプTS2を有し、「C」はタイムスタンプTS3を有し、「A’」はタイムスタンプTS4を有する。よって、例えば、「A’」は、遅いタイムスタンプを有しているので、「A」の後続バージョンである。好ましい実施形態において、タイムスタンプ情報は、書き込まれているページ内のセクタのうちの少なくとも1つのオーバーヘッド部分に記憶される。
【0194】
マルチセクタページを有するブロックのマルチストリーム更新
本発明の他の態様によれば、不揮発性メモリを更新する方法は、更新データを記録するための第1のブロック(更新ブロック)と、更新ブロックに対する記録の前に更新データのうちのいくつかを一時的に保存するための第2のブロック(スクラッチパッドブロック)とを使用することを含む。不揮発性メモリは、メモリユニットの消去可能なブロックに編成され、各メモリユニットは、データの論理ユニットを記憶するためのものであり、また、各ブロックは、1つ以上のページに編成され、各ページは、明確なページオフセットを有する複数の論理ユニットを記憶でき、消去後に共に一度プログラム可能である。この方法は、ホストから論理ユニットを受信することと、所定の条件が満たされる場合に受信された論理ユニットがページエンドオフセットを有するように、ページ毎に受信された論理ユニットを整列させることと、受信された論理ユニットと任意の先行する論理ユニットとを適切なページ整列で更新ブロック内のページに記憶することと、そうでなければ、スクラッチパッドブロック内の部分ページに残りの受信された論理ユニットを一時的に記憶することとをさらに含む。スクラッチパッドブロック内の論理ユニットは、所定の条件を満たす場合には、最終的には更新ブロックへ転送される。
【0195】
好ましい一実施形態において、更新データは、ページ毎に受信および解析されて、第1のブロック(例えば、更新ブロック)へ転送される。バッファリングされたデータの残りの部分ページは、第2のブロック(例えば、スクラッチパッドブロック)へ転送されて、データの完全ページが第1のブロックへ記録するのに利用可能になるまで、そこにとどまることになる。バッファリングされたデータが第2のブロックへ転送されると、記録されたページが受信データで部分的に一杯になるだけであっても、ページ毎に記録される。部分ページ内の通常使用されない予備の空間を使用して、第2および第1のブロック内のデータを探し当てるためのインデックスを記憶してもよい。
【0196】
図38は、本発明の一般的な一実施形態に係る、それぞれ複数のセクタページを有する2つのメモリブロックに対して同時に更新データを記録しかつインデックス付けするための方法を示すフローチャートである。
【0197】
ステップ200:不揮発性メモリをそれぞれデータの論理ユニットを記憶するためのメモリユニットの消去可能なブロックに編成し、また、各ブロックを1つ以上のページに編成し、各ページが複数のメモリユニットを含み、かつ消去後に共に一度プログラム可能である。
【0198】
ステップ210:データの論理ユニットの更新バージョンを完全ページ毎に記録するための第1のブロックを提供する。
【0199】
ステップ220:ホストから受信されたデータの論理ユニットの更新バージョンをバッファリングするための第2のブロックを提供する。
【0200】
ステップ232:論理ユニット内のデータをホストから受信する。
【0201】
ステップ234:ページエンドオフセットを有する論理ユニットを探し当てることによって、受信された論理ユニットをページ毎に解析する。
【0202】
ステップ236:ページエンドオフセットを有する各論理ユニットを第1のブロック内の新しいページに記録する一方で、当該新しいページを先行する論理ユニットの最新バージョンで埋め、第2のブロック内の部分ページに残りの受信された論理ユニットを記録する。
【0203】
図39は、スクラッチパッドブロックおよび更新ブロックを使用する図37の方法のより特定的な実施例を示すフローチャートである。
【0204】
ステップ310:完全ページ毎に論理ユニットの更新バージョンを記録するための更新ブロック(UB)を提供し、各論理ユニットは、所定の順序に従って所定のページオフセットを有する。
【0205】
ステップ322:当該更新をページ毎に一時的にバッファリングするためのスクラッチパッドブロック(SPB)を提供する。
【0206】
ステップ324:SPB内の有効(最新バージョン)データを探し当てるためのSPBインデックスを提供する。
【0207】
ステップ332:論理ユニット毎に現在の書き込み要求のデータを受信する。
【0208】
ステップ334:現在の論理ユニットがページエンドにおけるオフセットである場合、ステップ340へ進み、そうでなければステップ336へ進む。
【0209】
ステップ336:受信すべきさらなるデータを書き込み要求が有する場合、ステップ332へ進み、そうでなければステップ350へ進む。
【0210】
ステップ340:UBの新しいページをページエンドにおける現在の論理ユニットと共に記録して、所定の順序に従って残りのページを有効(最新バージョン)論理ユニットで埋める。ステップ336へ進む。
【0211】
ステップ350:すべての受信されたデータが記録されている場合、ステップ180へ進み、そうでなければステップ360へ進む。
【0212】
ステップ360:未記録の受信されたデータがSPB内の既存の有効(最新バージョン)データと同一のページに属していない場合、ステップ370へ進み、そうでなければステップ362へ進む。
【0213】
ステップ362:SPBインデックスを更新する。
【0214】
ステップ364:未記録の受信されたデータおよびページオフセットにおける既存の有効データをSPBの新しいページに記録して、SPBインデックスで終端する。ステップ380へ進む。
【0215】
ステップ370:既存の有効データをSPBの現在のページからUBの新しいページへ統合により再配置する。
【0216】
ステップ372:SPBインデックスを更新する。
【0217】
ステップ374:ページオフセットにおける未記録の受信されたデータをSPBの新しいページに書き込み、SPBインデックスで終端する。
【0218】
ステップ380:現在の書き込み要求を終了する。
【0219】
SPBは、更新ブロックの所定の数(例えば、8)までをサポートする。SPBブロック内の部分ページデータは、ホストがページの最終セクタを書き込むと、関連する更新ブロックに統合される。所定の場合における論理群についてのSPB内の1つより多い部分ページ内にデータが存在することがあるが、好ましい実施形態において、最終書き込み部分ページについてのデータだけが有効である。同様に、SPBI/CBIセクタの複数のコピーがSPB毎に存在することがあるが、最終書き込みコピーのみが有効である。同様の考慮により、SPB内のUB毎の有効ページの数が1つに限定されている場合には、最終書き込みポインタのみが必要である。セクタをSPBに書き込む必要があるがSPBが一杯の場合には、ブロックをまず新しいSPBブロックにコピーして、古いSPBを消去し、その後にセクタを新しいSPBに書き込む。SPBの書き込みは、連続更新ブロックがカオス的になったという理由で、または以前スクラッチパッドブロックを含んだ更新ブロックが閉じられたという理由で、SPBI/CBIが更新される必要がある場合にも行われる。
【0220】
一般的に、前述したように、更新ブロック毎に1つより多くのSPB部分ページを使用して、有効データを記憶する。このように、次のホストがページの外部にセクタを書き込む場合には、部分ページを統合して新しいものに道を譲る必要はない。
【0221】
マルチストリーム更新手法により、更新ブロックのより効率的な使用が可能となる。これは、特に、一度書き込み可能なマルチセクタページを伴うブロックに当てはまる。この手法は、費やす記憶装置は少なく、更新ブロック内で必要なパディングも少ない。さらに重要なのは、更新ブロックにおける更新セクタの連続順序が、一連の連続した論理セクタの別個のホスト書き込み中に保持されることである。
【0222】
予測パイプライン化された動作を伴うマルチストリーム更新
前述したマルチストリーム更新手法において、ホスト書き込みがある度に、受信されたホストデータを更新ブロックまたはスクラッチパッドブロックのいずれかに記録するかに関する決断を行わなければならなかった。ホストからのデータユニットは、受信されながら、エンドページオフセットを有するものが受信されるまで1つずつ監視される。この点で、完全ページを書き込むための所定の条件が確認されるが、前パディングを伴ってもよい。
【0223】
更新ブロックを書き込むために、書き込むべきページがプログラミングのために設定される必要がある。これには、ページをアドレス指定することと、その後、ページについてのデータをデータラッチへロードすることとが含まれる。
【0224】
好ましい一実施形態によれば、予測パイプライン化された動作が実施される。この動作において、更新ブロックを記録するための所定の条件を確認するまで待機するのではなく、書き込まれることになっているデータユニットによって所定の条件が満たされる可能性があることをホスト書き込みコマンドが示すとすぐに、更新ブロックが書き込まれるように設定される。このように、当該設定は、ホストからデータユニットが来るのを待つ間にジャンプスタートが可能である。最終的に受信された実際のデータユニットが所定の条件を本当に満たしたときに、設定を待つ必要なく、ただちに更新ブロック内のページのプログラミングが生じることができ、これにより、書き込み性能が向上する。ホスト書き込みが中断されて受信された実際のデータユニットがもはや所定の条件を満たさない場合には、更新ブロックへの記録のための設定は廃棄され、代わりに、データユニットは、スクラッチパッドブロックに記録されることになる。
【0225】
図40Aは、本発明が実施される場合を提供する、読み出し/書き込み回路のバンクを有するメモリ装置を概略的に示す。メモリ装置は、メモリセル400の2次元アレイと、制御回路410と、読み出し/書き込み回路470とを含む。メモリアレイ400は、行デコーダ430を介してワード線により、列デコーダ460を介してビット線により、アドレス指定可能である。読み出し/書き込み回路470は、センスモジュール480(図示せず)のバンクとして実施され、これにより、メモリセル群(「ページ」とも称される)を並列的に読み出しまたはプログラムすることが可能である。並列的に動作するp個のセンスモジュール480のバンク全体により、行に沿ったp個のセルのページを並列的に読み出しまたはプログラムすることが可能である。メモリアレイの一例は、p=512バイト(512×8ビット)を有してもよい。好ましい実施形態において、ブロックは、セルの全行のランである。他の実施形態において、ブロックは、行のセルのサブセットである。例えば、セルのサブセットは、全行の2分の1または全行の4分の1であってもよい。セルのサブセットは、連続セルまたは1つおきのセル、または所定数毎のセルのランであってもよい。よって、好ましい一実施形態において、ページは、メモリセルの連続行から構成されている。他の実施形態において、メモリセルの行は、複数のページに分割され、読み出し/書き込み回路470を個々のページに多重化するために、ページマルチプレクサ350が提供される。
【0226】
制御回路410は、読み出し/書き込み回路470と協働して、メモリアレイ400上でメモリ動作を行う。制御回路410は、状態マシン412と、オンチップアドレスデコーダ414と、電源制御モジュール416とを含む。状態マシン412は、メモリ動作のチップレベルの制御を提供する。オンチップアドレスデコーダ414は、ホストまたはメモリコントローラによって使用されるものと、デコーダ330および370によって使用されるハードウェアアドレスとの間のアドレスインターフェイスを提供する。電源制御モジュール416は、メモリ動作中にワード線およびビット線に対して供給される電力および電圧を制御する。
【0227】
図40Bは、図40Aに示されているメモリ装置の好ましい配列を示す。様々な周辺回路によるメモリアレイ400に対するアクセスは、各側のアクセス線および回路が半分に削減されるように、アレイの反対側同士において対称的なやり方で実施される。よって、行デコーダは、行デコーダ430Aおよび430Bに分割され、列デコーダは、列デコーダ460Aおよび460Bに分割される。メモリセルの行は複数のブロックに分割される実施形態において、ページマルチプレクサ450は、ページマルチプレクサ450Aおよび450Bに分割される。同様に、読み出し/書き込み回路は、アレイ400の下部からビット線に接続する読み出し/書き込み回路470Aと、アレイ400の上部からビット線に接続する読み出し/書き込み回路470Bに分割される。このように、読み出し/書き込みモジュールの密度、したがってセンスモジュール480のバンクの密度は、基本的に2分の1に減少する。アレイの上部に位置する読み出し/書き込みモジュールに向けられたデータは、上部の入出力を介して転送されることになる。同様に、アレイの下部に位置する読み出し/書き込みモジュールに向けられたデータは、下部の入出力を介して転送されることになる。
【0228】
図41は、図40Aに示されているセンスモジュールをより詳細に示す。各センスモジュール480は、基本的には、メモリセルの導電状態を検知するためのセンス増幅器482と、検知されたデータまたはプログラムすべきデータを記憶するためのデータラッチ484のセットと、外部と通信するための入出力回路486とを含む。好ましいセンス増幅器が、米国公開特許出願第2004/0109357号(特許文献23)に開示されている。この特許出願は、その全体が本願明細書において参照により援用されている。
【0229】
プログラミング動作中に、まず、選択されたワード線およびビット線がアドレス指定される。これに続いて、プログラムされるべきデータを入出力ポートを介してそれぞれのデータラッチへ転送する。その後、プログラミング電圧をワード線に印加することによってプログラミングが開始する前に、ビット線がプレチャージされる。プログラミング電圧の実際の印加に先立つステップは、プログラム設定とみなすことができる。ページサイズがかなり大きい場合には、プログラムデータをデータラッチへ転送するのに必要な時間がかかる。
【0230】
ホスト書き込み中に、ホストは、まず、書き込もうとするデータユニットの範囲をメモリ装置に示すホスト書き込みコマンドを送出する。その後、これに続いて、当該範囲におけるデータユニットの送信が、範囲の終端に到達するまでデータユニット毎に行われる。プロトコルによっては、当該送信は不意に中断されてもよく、残りのデータユニットが新しい書き込みコマンドにおいて送出されてもよい。
【0231】
書き込み性能を向上させるためには、データユニットがまだ受信中にプログラム設定処理が生じることができるようなパイプライン動作を有するのが望ましいことになる。しかし、あるデータユニットが受信されるかどうかによって、複数の記憶装置のいずれかにデータユニットが記録されるであろうマルチストリーム手法において、所定の記憶装置に対して記録するためのアドレス指定は、あるデータユニットが中断なく実際に受信されるまでは確実でないことになる。
【0232】
この問題を克服するために、予測パイプライニング手法が使用される。所定の記憶装置に対する記録を生じさせるようなあるデータユニットがホスト書き込みコマンドによって指示された範囲内で見つかる場合には、所定の記憶装置が直ちに設定されてプログラミングに供されることになる。そのようなあるデータユニットが実際に受信されると、所定の記憶装置は、プログラム設定による遅延なく、データユニットをプログラムすることになる。その一方で、そのようなあるデータユニットが中断によって具体化に失敗した場合には、当該所定の記憶装置用に設定されたプログラムは廃棄され、代わりに他の記憶装置が選択されて、設定および後続のプログラミングに供されることになる。
【0233】
図42は、好ましい一実施形態に係る、予測パイプライニング手法を使用するマルチストリーム更新を示すフロー図である。
【0234】
ステップ500:ホストデータユニットを記録するための第1および第2の記憶装置を提供する。例えば、第1の記憶装置は、更新データを記憶する専用の消去可能なブロックであり、第2の記憶装置は、更新ブロックを通過して更新データを一時的にバッファリングするための他の消去可能なブロックであるスクラッチパッドブロックである。
【0235】
ステップ510:書き込むべきデータユニットの範囲を示すホスト書き込みコマンドを受信する。
【0236】
ステップ512:データユニットの範囲が、データユニットを第1の記憶装置に記録するための所定の条件を満たすものを含んでいる場合には、ステップ520へ進み、そうでない場合には、ステップ530へ進む。例えば、消去可能なブロックはページに編成され、各ページは、共にプログラム可能な複数のデータユニットを記憶可能である。各データユニットが所定のページオフセットを有するように、データユニットは、論理的に連続した順序でページ内に記憶される。更新ブロックに記録するための所定の条件は、完全ページが記録できる場合である。充分な条件は、エンドページオフセットを有するデータユニットが存在する場合であり、完全ページは、必要があればページ内にある任意の先行するデータを前パディングすることによって形成される。所定の条件が満たされない場合には、ホストデータは、スクラッチパッドブロックに記録されることになる。
【0237】
ステップ520:第1の記憶装置に対する記録のための準備としてアドレスを設定する。例えば、範囲がエンドページオフセットを有するデータユニットを含む場合には、完全ページが更新ブロックに記録されると推定されることになる。この場合、更新ブロック内の新しいページがアドレス指定されて記録されることになる。
【0238】
ステップ522:第1の記憶装置に対する記録のための準備として、受信されたデータをデータラッチにロードする。データユニットがホストから受信されるとすぐに、新しいページをプログラムするためにデータラッチへロードされることになる。
【0239】
ステップ524:所定の条件を満たすデータユニットが実際に受信されると、ステップ540へ進み、そうでなければステップ526へ進む。例えば、エンドページオフセットを有するデータユニットがホストから実際に受信される場合には、予測された完全ページを確実に形成することができる。
【0240】
ステップ526:第1の記憶装置に対する記録のための設定を中止する。ステップ530へ進む。例えば、エンドページオフセットを有する予測されたデータユニットが中断のために到着しない場合には、更新ブロックへ記録されるべき完全ページの予測はもはや真ではない。その場合に、更新ブロックのためのプログラム設定は中止されなければならなくなる。代わりに、今度はスクラッチパッドブロックがプログラム用に設定されることになる。
【0241】
ステップ530:第2の記憶装置に対する記録のための準備としてアドレスを設定する。例えば、完全ページを更新ブロックに記録するための所定の条件が満たされない場合には、ホストデータは、スクラッチパッドブロックに記録されることになる。この場合に、スクラッチパッドブロック内の新しいページが記録用にアドレス指定されることになる。
【0242】
ステップ532:第2の記憶装置に対する記録のための準備として、受信されたデータをデータラッチにロードする。データユニットがホストから受信されるとすぐに、新しいページをプログラムするためにデータラッチへロードされることになる。
【0243】
ステップ540:データラッチ内のデータをアドレス指定された記憶装置にプログラムする。例えば、更新ブロックまたはスクラッチパッドブロックに対する予測された記録が受信されたデータユニットによって確認されると、遅延なく設定ブロックをプログラムできる。
【0244】
ステップ550:現在のホスト書き込みを終了する。
【0245】
メモリ構造によっては、ステップ520および530は、ステップ522またはステップ532においてデータラッチのロード後にアドレスが選択されてもよいといった、異なる順序であってもよい。
【0246】
他の好ましい実施形態において、データが受信されるにつれて、第1または第2の記憶装置のいずれかに受信されたデータを記録するかが最初に不明な場合には、受信されたデータを第1および第2の記憶装置の両方のプログラミング回路のデータラッチにロードする。このように、データは第1または第2の記憶装置のいずれかをプログラムするためにいつでもただちに利用可能となる。特別な場合には、第1および第2の記憶装置は、データラッチの同一のセットを共有する。例えば、第1および第2の記憶装置が同一のメモリプレーン内にある場合、これらは、センス増幅器およびデータラッチの同一のセットを伴うプログラミング回路の同一のセットを使用できる。この場合、第1または第2の記憶装置のいずれかがプログラムされるべきかに関わらず、デフォルトのデータラッチのセットにデータがロードされることになる。
【0247】
第1および第2の記憶装置がデータラッチの互いに異なるセットを使用する場合に、例えば、同一のプレーンの互いに異なるメモリページにおける場合または互いに異なるメモリプレーンにおける場合と同様に、データをデータラッチの両方のセットにロードしてもよい。
【0248】
図43は、他の実施形態に係る、正しい宛先アドレスが送出される前にプログラムデータがロードされるマルチストリーム更新を示すフロー図である。
【0249】
ステップ600:ホストデータユニットを記録するための第1および第2の記憶装置を提供する。
【0250】
ステップ610:ホストデータを受信する。
【0251】
ステップ620:受信されているままのデータを、第1の記憶装置をプログラムするために使用されるデータラッチおよび第2の記憶装置をプログラムするために使用されるデータラッチにロードする。
【0252】
ステップ630:受信されたデータが所定の条件を満たすかどうかによって、第1または第2の記憶装置をアドレス指定して記録する。
【0253】
ステップ640:アドレス指定された記憶装置に対して、そのデータラッチからデータをプログラムする。
【0254】
ステップ650:現在のホスト書き込みを終了する。
【0255】
本発明を様々な例示的な実施形態に関連して説明してきたが、本発明が、添付の特許請求の範囲の全範囲内においてその権利が保護されるべきであることが理解できよう。
【図面の簡単な説明】
【0256】
【図1A】ホストシステムと共に動作する不揮発性メモリのブロック図である。
【図1B】不揮発性メモリと共に動作するホストシステムのブロック図である。
【図2】図1Aのメモリアレイの第1の編成例を示す。
【図3】図1Aのメモリアレイ内に記憶されるようなオーバーヘッドデータを有するホストデータセクタの例を示す。
【図4】図1Aのメモリアレイの第2の編成例を示す。
【図5】図1Aのメモリアレイの第3の編成例を示す。
【図6】図1Aのメモリアレイの第3の編成例を拡張したものを示す。
【図7】ある特定の構成における図1Aのアレイのメモリセル群の回路図である。
【図8】図1Aのメモリアレイなどのメモリアレイのブロック内にデータのセクタを記憶する様子を示す。
【図9】図1Aのメモリアレイなどのメモリアレイのブロック内にデータのセクタを記憶する他の様子を示す。
【図10A】ガーベッジコレクション動作中に他のブロックへコピーした後の図8または図9のデータのセクタを示す。
【図10B】第2のガーベッジコレクション動作中に他のブロックへコピーした後の図10Aのデータのセクタを示す。
【図10C】さらにデータのセクタを受信した後の図10Bのブロックを示す。
【図11A】2つの消去ブロックであるアクティブブロックとスクラッチパッドブロックとを使用して図10Aおよび図10Bのデータのセクタを記憶する、他の記憶構成を示す。
【図11B】2つのメタブロックであるアクティブブロックとスクラッチパッドブロックとを使用して図10Aおよび図10Bのデータのセクタを記憶する、他の記憶構成を示す。
【図12A】ガーベッジコレクション動作をトリガーせずにデータのセクタを記憶中に更新してもよいように、データのセクタを記憶するために使用される2つのブロックであるアクティブブロックとスクラッチパッドブロックとを示す。
【図12B】ガーベッジコレクションをトリガーせずにページのすべてのセクタを記憶中に更新することができる、図12Aの他の記憶システムを示す。
【図12C】スクラッチパッドブロック1250を使用してデータを更新する他の例を示す。
【図13】マルチレベルセル内に2ビットのデータを記憶するために使用される4つのしきい値電圧の範囲を示す。
【図14】スクラッチパッドブロックがアクティブブロックの下位ページのコピーを保持する、マルチレベルセルの2つのブロックと、アクティブブロックと、スクラッチパッドブロックとを示す。
【図15】あるブロックに記憶された2つのファイルからのデータのセクタと、その後に当該2つのファイルがメモリアレイ内に1ブロックより多くののスペースを必要として更新される場合の当該データのセクタを記憶する様子とを示す。
【図16】アクティブブロックへコピーされる前のいくつかのセクタをスクラッチパッドブロックが記憶する場合の、図15のデータのセクタの更新の他のシステムを示す。
【図17】同一のページ内に無関係なデータのセクタを記憶するスクラッチパッドブロックと、その後にこのデータを互いに異なる場所へコピーする様子とを示す。
【図18】複数の更新を受けている無関係なデータのセクタを記憶するスクラッチパッドブロックを示す。
【図19】マーク付けセクタによって識別されるスクラッチパッドブロックを示す。
【図20】セクタ群と、インデックスセクタとを記憶する図19のスクラッチパッドブロックを示す。
【図21】セクタの第2群と、第1のインデックスセクタに取って代わる第2のインデックスセクタとを記憶する、図20のスクラッチパッドブロックを示す。
【図22】セクタの第3群と、第2のインデックスセクタに取って代わる第3のインデックスセクタとを記憶する、図21のスクラッチパッドブロックを示す。
【図23】ある群が他のブロックにコピーされる場合に、第3のインデックスセクタに取って代わる第4のインデックスセクタを有する図22のスクラッチパッドブロックを示す。
【図24】従来の方法によって更新されかつ単一セクタのページを有する更新ブロック内に記憶される、論理群内のセクタの例を示す。
【図25】ページはマルチセクタでありかつ一度書き込み可能であると思われる、メモリに対して適用されるような図24に示されている書き込みの同一シーケンスを示す。
【図26】本発明の一般的な一実施形態に係る、第1のメモリブロックを第2のメモリブロックと共に使用し、記憶されたデータのインデックスを第2のブロックに保存することによって、データを更新する方法を示すフローチャートである。
【図27A】本発明の好ましい一実施形態に係る、更新ブロックをスクラッチパッドブロックと共に使用することによって、データを更新してインデックスを保持する特定の一例を示す。
【図27B】本発明の好ましい一実施形態に係る、更新ブロックをスクラッチパッドブロックと共に使用することによって、保持されているデータを更新する連続順序付けの他の例を示す。
【図28】ブロックの部分ページ内の更新データを記憶するためのメモリブロックのインデックスを保存するための好ましい手法を示す。
【図29】いくつかの論理群が現在更新を受けている、マルチストリーム更新において使用されるスクラッチパッドブロックを概略的に示す。
【図30】入力データのシーケンスをあるブロックに書き込む従来の場合を示す。
【図31A】本発明の好ましい実施形態に係る、異なる書き込みが2つのブロックに対してインターリーブされている場合であっても記録順序または優先順位を追跡する他の手法を示す。
【図31B】書き込みが2つのブロックに対して記録される場合に記録順序を追跡する他の実施形態を示す。
【図32A】本発明の一般的な実施形態に係る、2つのデータストリーム間の記録シーケンスを同期させる方法を示すフローチャートである。
【図32B】書き込みポインタを使用する一実施形態に係る、2つのデータストリーム間の記録シーケンスを同期させる方法を示すフローチャートである。
【図33A】第1のシーケンスに係る2つのホスト書き込み#1および#2の後のスクラッチパッドブロックおよび更新ブロックの状態を示す。
【図33B】図33Aに示されている第1のシーケンスの逆である第2のシーケンスに係る2つのホスト書き込み#1および#2の後のスクラッチパッドブロックおよび更新ブロックの状態を示す。
【図34A】スクラッチパッドブロックインデックス(SPBI)の好ましい一データ構成を示す。
【図34B】図33Aに示されているホスト書き込み#1についてのスクラッチパッドブロックインデックス内の値の例を示す。
【図35A】図33Aの連続ホスト書き込み後のスクラッチパッドブロックおよびスクラッチパッド書き込みポインタに対する更新ブロックの中間状態を示す。
【図35B】図33Bの連続ホスト書き込み後のスクラッチパッドブロックおよびスクラッチパッド書き込みポインタに対する更新ブロックの中間状態を示す。
【図36】更新ブロックに記録されているセクタのオーバーヘッド部分に記憶されているスクラッチパッド書き込みポインタを示す。
【図37】2つの更新ストリーム間の記録シーケンスを追跡するためのタイムスタンプの使用を示す。
【図38】本発明の一般的な一実施形態に係る、それぞれ複数のセクタページを有する2つのメモリブロックに対して同時に更新データを記録しかつインデックス付けするための方法を示すフローチャートである。
【図39】スクラッチパッドブロックおよび更新ブロックを使用する図37の方法のより特定的な実施例を示すフローチャートである。
【図40A】本発明が実施される場合を提供する、読み出し/書き込み回路のバンクを有するメモリ装置を概略的に示す。
【図40B】図40Aに示されているメモリ装置の好ましい配列を示す。
【図41】図40Aに示されているセンスモジュールをより詳細に示す。
【図42】好ましい一実施形態に係る、予測パイプライニング手法を使用するマルチストリーム更新を示すフロー図である。
【図43】他の実施形態に係る、正しい宛先アドレスが送出される前にプログラミングデータがロードされるマルチストリーム更新を示すフロー図である。
【特許請求の範囲】
【請求項1】
ホストからのデータを記録する方法において、
(a)それぞれがデータユニットを連続的に記録するための第1および第2の不揮発性記憶装置を提供するステップと、
(b)ホストからデータを受信するステップと、
(d)所定の条件が満たされるかどうかにより、第1の記憶装置または第2の記憶装置のいずれかにおける次に利用可能な位置に、データと記録時間を示すタイムスタンプとを記録するステップと、
(e)記録すべき受信されたデータがなくなるまで(b)〜(d)を繰り返すステップと、
を含むホストからのデータを記録する方法。
【請求項2】
請求項1記載のホストからのデータを記録する方法において、
第1および第2の記憶装置の各々は、共に消去可能なメモリユニットのブロックを記憶するためのものである方法。
【請求項3】
請求項1記載のホストからのデータを記録する方法において、
第1および第2の記憶装置は、フラッシュEEPROMの一部である方法。
【請求項4】
請求項1記載のホストからのデータを記録する方法において、
ホストからのデータは、データユニット群についての更新データであり、
第1の記憶装置は、更新データを記憶するためのものであり、
第2の記憶装置は、第1の記憶装置へ転送される前に更新データをバッファリングするためのものである方法。
【請求項5】
請求項4記載のホストからのデータを記録する方法において、
第1の記憶装置は、更新データを記憶するための複数の記憶装置のうちの1つであり、 第2の記憶装置は、複数の第1の記憶装置のうちの1つへ転送される前に更新データをバッファリングするためのものである方法。
【請求項6】
請求項1記載のホストからのデータを記録する方法において、
データを所定の順序を有するデータユニットに編成するステップと、
第1および第2の不揮発性記憶装置をページに編成するステップであって、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである、編成するステップと、
をさらに含む方法。
【請求項7】
請求項6記載のホストからのデータを記録する方法において、
各ページは、消去後に一度プログラム可能である方法。
【請求項8】
請求項6記載のホストからのデータを記録する方法において、
前記所定の条件は、受信されたデータユニットのうちの1つがページエンドオフセットを有する場合であり、
前記第1の記憶装置にデータを記録するステップは、前記ページエンドデータユニットおよび任意の先行するものを第1の記憶装置のページに記録するステップを含む方法。
【請求項9】
請求項6記載のホストからのデータを記録する方法において、
データユニットは、データ部分とオーバーヘッド部分とに個別に分割され、
前記タイムスタンプは、各ページのデータユニットの少なくとも1つのオーバーヘッド部分内に記録される方法。
【請求項10】
請求項1〜9のいずれか記載のホストからのデータを記録する方法において、
第1および第2の不揮発性記憶装置は、1ビットのデータを個別に記憶するメモリセルから構成される方法。
【請求項11】
請求項1〜9のいずれか記載のホストからのデータを記録する方法において、
前記第1および第2の不揮発性記憶装置は、1つより多くのビットのデータを個別に記憶するメモリセルから構成される方法。
【請求項12】
ホストからのデータを記録する不揮発性メモリにおいて、
複数のブロックに編成されたメモリであって、各ブロックは、共に消去可能な複数のメモリユニットであり、各メモリユニットは、データの論理ユニットを記憶するためのものである、メモリと、
前記ブロックの動作を制御するためのコントローラと、
それぞれがホストからのデータを連続的に記録するための第1および第2のブロックと、を備え、
前記コントローラは、所定の条件が満たされるかどうかにより、前記第1のブロックまたは前記第2のブロックのいずれかに、データと記録時間を示すタイムスタンプとを記録することを制御する不揮発性メモリ。
【請求項13】
請求項12記載のホストからのデータを記録する不揮発性メモリにおいて、
前記不揮発性メモリは、フラッシュEEPROMである不揮発性メモリ。
【請求項14】
請求項12記載のホストからのデータを記録する不揮発性メモリにおいて、
前記不揮発性メモリは、着脱可能なメモリカードの形態を取る不揮発性メモリ。
【請求項15】
請求項12記載のホストからのデータを記録する不揮発性メモリにおいて、
ホストからの前記データは、データユニット群についての更新データであり、
前記第1のブロックは、前記更新データを記憶するためのものであり、
前記第2のブロックは、第1のブロックへ転送される前に前記更新データをバッファリングするためのものである不揮発性メモリ。
【請求項16】
請求項15記載のホストからのデータを記録する不揮発性メモリにおいて、
データは、所定の順序を有するデータユニットに編成され、
前記第1および第2のブロックは、ページに編成され、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである不揮発性メモリ。
【請求項17】
請求項16記載のホストからのデータを記録する不揮発性メモリにおいて、
各ページは、消去後に一度プログラム可能である不揮発性メモリ。
【請求項18】
請求項16記載のホストからのデータを記録する不揮発性メモリにおいて、
前記所定の条件は、受信されたデータユニットのうちの1つがページエンドオフセットを有する場合であり、
前記コントローラが前記第1のブロックへのデータの記録を制御することは、前記第1のブロックのページに対して、前記ページエンドデータユニットおよびページ内の任意の先行するデータユニットを記録することを含む不揮発性メモリ。
【請求項19】
請求項16記載のホストからのデータを記録する不揮発性メモリにおいて、
前記タイムスタンプは、データによって占有されていないページの位置に記録される不揮発性メモリ。
【請求項20】
請求項16記載のホストからのデータを記録する不揮発性メモリにおいて、
データユニットは、データ部分とオーバーヘッド部分とに個別に分割され、
前記タイムスタンプは、ページの個別のデータユニットのオーバーヘッド部分に記録される不揮発性メモリ。
【請求項21】
ホストからのデータを記録する不揮発性メモリにおいて、
複数のブロックに編成されたメモリであって、各ブロックは、共に消去可能な複数のメモリユニットであり、各メモリユニットは、データの論理ユニットを記憶するためのものである、メモリと、
それぞれがホストからデータを連続的に記録するための第1および第2のブロックと、 所定の条件が満たされるかどうかにより、前記第1のブロックまたは前記第2のブロックのいずれかに、データと記録時間を示すタイムスタンプとを記録するための手段と、
を備える不揮発性メモリ。
【請求項22】
請求項12〜21のいずれか記載のホストからのデータを記録する不揮発性メモリにおいて、
第1および第2の不揮発性記憶装置は、1ビットのデータを個別に記憶するメモリセルから構成される不揮発性メモリ。
【請求項23】
請求項12〜21のいずれか記載のホストからのデータを記録する不揮発性メモリにおいて、
前記第1および第2の不揮発性記憶装置は、1つより多くのビットのデータを個別に記憶するメモリセルから構成される不揮発性メモリ。
【請求項1】
ホストからのデータを記録する方法において、
(a)それぞれがデータユニットを連続的に記録するための第1および第2の不揮発性記憶装置を提供するステップと、
(b)ホストからデータを受信するステップと、
(d)所定の条件が満たされるかどうかにより、第1の記憶装置または第2の記憶装置のいずれかにおける次に利用可能な位置に、データと記録時間を示すタイムスタンプとを記録するステップと、
(e)記録すべき受信されたデータがなくなるまで(b)〜(d)を繰り返すステップと、
を含むホストからのデータを記録する方法。
【請求項2】
請求項1記載のホストからのデータを記録する方法において、
第1および第2の記憶装置の各々は、共に消去可能なメモリユニットのブロックを記憶するためのものである方法。
【請求項3】
請求項1記載のホストからのデータを記録する方法において、
第1および第2の記憶装置は、フラッシュEEPROMの一部である方法。
【請求項4】
請求項1記載のホストからのデータを記録する方法において、
ホストからのデータは、データユニット群についての更新データであり、
第1の記憶装置は、更新データを記憶するためのものであり、
第2の記憶装置は、第1の記憶装置へ転送される前に更新データをバッファリングするためのものである方法。
【請求項5】
請求項4記載のホストからのデータを記録する方法において、
第1の記憶装置は、更新データを記憶するための複数の記憶装置のうちの1つであり、 第2の記憶装置は、複数の第1の記憶装置のうちの1つへ転送される前に更新データをバッファリングするためのものである方法。
【請求項6】
請求項1記載のホストからのデータを記録する方法において、
データを所定の順序を有するデータユニットに編成するステップと、
第1および第2の不揮発性記憶装置をページに編成するステップであって、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである、編成するステップと、
をさらに含む方法。
【請求項7】
請求項6記載のホストからのデータを記録する方法において、
各ページは、消去後に一度プログラム可能である方法。
【請求項8】
請求項6記載のホストからのデータを記録する方法において、
前記所定の条件は、受信されたデータユニットのうちの1つがページエンドオフセットを有する場合であり、
前記第1の記憶装置にデータを記録するステップは、前記ページエンドデータユニットおよび任意の先行するものを第1の記憶装置のページに記録するステップを含む方法。
【請求項9】
請求項6記載のホストからのデータを記録する方法において、
データユニットは、データ部分とオーバーヘッド部分とに個別に分割され、
前記タイムスタンプは、各ページのデータユニットの少なくとも1つのオーバーヘッド部分内に記録される方法。
【請求項10】
請求項1〜9のいずれか記載のホストからのデータを記録する方法において、
第1および第2の不揮発性記憶装置は、1ビットのデータを個別に記憶するメモリセルから構成される方法。
【請求項11】
請求項1〜9のいずれか記載のホストからのデータを記録する方法において、
前記第1および第2の不揮発性記憶装置は、1つより多くのビットのデータを個別に記憶するメモリセルから構成される方法。
【請求項12】
ホストからのデータを記録する不揮発性メモリにおいて、
複数のブロックに編成されたメモリであって、各ブロックは、共に消去可能な複数のメモリユニットであり、各メモリユニットは、データの論理ユニットを記憶するためのものである、メモリと、
前記ブロックの動作を制御するためのコントローラと、
それぞれがホストからのデータを連続的に記録するための第1および第2のブロックと、を備え、
前記コントローラは、所定の条件が満たされるかどうかにより、前記第1のブロックまたは前記第2のブロックのいずれかに、データと記録時間を示すタイムスタンプとを記録することを制御する不揮発性メモリ。
【請求項13】
請求項12記載のホストからのデータを記録する不揮発性メモリにおいて、
前記不揮発性メモリは、フラッシュEEPROMである不揮発性メモリ。
【請求項14】
請求項12記載のホストからのデータを記録する不揮発性メモリにおいて、
前記不揮発性メモリは、着脱可能なメモリカードの形態を取る不揮発性メモリ。
【請求項15】
請求項12記載のホストからのデータを記録する不揮発性メモリにおいて、
ホストからの前記データは、データユニット群についての更新データであり、
前記第1のブロックは、前記更新データを記憶するためのものであり、
前記第2のブロックは、第1のブロックへ転送される前に前記更新データをバッファリングするためのものである不揮発性メモリ。
【請求項16】
請求項15記載のホストからのデータを記録する不揮発性メモリにおいて、
データは、所定の順序を有するデータユニットに編成され、
前記第1および第2のブロックは、ページに編成され、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである不揮発性メモリ。
【請求項17】
請求項16記載のホストからのデータを記録する不揮発性メモリにおいて、
各ページは、消去後に一度プログラム可能である不揮発性メモリ。
【請求項18】
請求項16記載のホストからのデータを記録する不揮発性メモリにおいて、
前記所定の条件は、受信されたデータユニットのうちの1つがページエンドオフセットを有する場合であり、
前記コントローラが前記第1のブロックへのデータの記録を制御することは、前記第1のブロックのページに対して、前記ページエンドデータユニットおよびページ内の任意の先行するデータユニットを記録することを含む不揮発性メモリ。
【請求項19】
請求項16記載のホストからのデータを記録する不揮発性メモリにおいて、
前記タイムスタンプは、データによって占有されていないページの位置に記録される不揮発性メモリ。
【請求項20】
請求項16記載のホストからのデータを記録する不揮発性メモリにおいて、
データユニットは、データ部分とオーバーヘッド部分とに個別に分割され、
前記タイムスタンプは、ページの個別のデータユニットのオーバーヘッド部分に記録される不揮発性メモリ。
【請求項21】
ホストからのデータを記録する不揮発性メモリにおいて、
複数のブロックに編成されたメモリであって、各ブロックは、共に消去可能な複数のメモリユニットであり、各メモリユニットは、データの論理ユニットを記憶するためのものである、メモリと、
それぞれがホストからデータを連続的に記録するための第1および第2のブロックと、 所定の条件が満たされるかどうかにより、前記第1のブロックまたは前記第2のブロックのいずれかに、データと記録時間を示すタイムスタンプとを記録するための手段と、
を備える不揮発性メモリ。
【請求項22】
請求項12〜21のいずれか記載のホストからのデータを記録する不揮発性メモリにおいて、
第1および第2の不揮発性記憶装置は、1ビットのデータを個別に記憶するメモリセルから構成される不揮発性メモリ。
【請求項23】
請求項12〜21のいずれか記載のホストからのデータを記録する不揮発性メモリにおいて、
前記第1および第2の不揮発性記憶装置は、1つより多くのビットのデータを個別に記憶するメモリセルから構成される不揮発性メモリ。
【図1A】
【図1B】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10A】
【図10B】
【図10C】
【図11A】
【図11B】
【図12A】
【図12B】
【図12C】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27A】
【図27B】
【図28】
【図29】
【図30】
【図31A】
【図31B】
【図32A】
【図32B】
【図33A】
【図33B】
【図34A】
【図34B】
【図35A】
【図35B】
【図36】
【図37】
【図38】
【図39】
【図40A】
【図40B】
【図41】
【図42】
【図43】
【図1B】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10A】
【図10B】
【図10C】
【図11A】
【図11B】
【図12A】
【図12B】
【図12C】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27A】
【図27B】
【図28】
【図29】
【図30】
【図31A】
【図31B】
【図32A】
【図32B】
【図33A】
【図33B】
【図34A】
【図34B】
【図35A】
【図35B】
【図36】
【図37】
【図38】
【図39】
【図40A】
【図40B】
【図41】
【図42】
【図43】
【公開番号】特開2009−110548(P2009−110548A)
【公開日】平成21年5月21日(2009.5.21)
【国際特許分類】
【出願番号】特願2009−562(P2009−562)
【出願日】平成21年1月6日(2009.1.6)
【分割の表示】特願2007−546739(P2007−546739)の分割
【原出願日】平成17年12月5日(2005.12.5)
【出願人】(506197901)サンディスク コーポレイション (175)
【Fターム(参考)】
【公開日】平成21年5月21日(2009.5.21)
【国際特許分類】
【出願日】平成21年1月6日(2009.1.6)
【分割の表示】特願2007−546739(P2007−546739)の分割
【原出願日】平成17年12月5日(2005.12.5)
【出願人】(506197901)サンディスク コーポレイション (175)
【Fターム(参考)】
[ Back to top ]