(58)【調査した分野】(Int.Cl.,DB名)
前記データ配列の前記第1の行にアドレス指定された前記データを第1の複数のスクランブリングシーケンスを用いてランダム化することと、前記データ配列の前記第2の隣接する行にアドレス指定された前記データを、第2の複数のスクランブリングシーケンスを用いてランダム化することと、をさらに含み、前記第2の複数のスクランブリングシーケンスの各々が、前記第1の複数のスクランブリングシーケンスの循環シフトである、請求項1に記載の方法。
前記データ配列の第1の列を前記第1のスクランブリングシーケンスの一部分を用いてランダム化することと、前記データ配列の第2の列を前記第2のスクランブリングシーケンスの第1の部分を用いてランダム化することと、をさらに含む、請求項1または請求項2に記載の方法。
前記データ配列の第3の行のデータを、前記第2のスクランブリングシーケンスの循環シフトである第3のスクランブリングシーケンスを用いてランダム化することをさらに含み、前記第3の行が前記第2の行に隣接する、請求項1〜請求項5のいずれか1項に記載の方法。
前記スクランブリングシーケンスが、最長シーケンス(mシーケンス)の一部分および完全mシーケンスのうちの少なくとも1つを含む、請求項1〜請求項6のいずれか1項に記載の方法。
前記スクランブリングシーケンスが、データを前記データ配列に書き込むメモリコントローラのハードウエアレジスタに記憶される、請求項1〜請求項7のいずれか1項に記載の方法。
前記メモリ配列が3DのNAND配列であり、同じスクランブリングシーケンスを用いて、第1のビット線、第1のワード線、および第1のチャネル選択線の各々をスクランブルする、請求項1〜請求項9のいずれか1項に記載の方法。
前記第1の行の前記データをランダム化することが、前記第1の行にアドレス指定された前記データと、前記第1のスクランブリングシーケンスとの間のビット毎の排他的論理和を計算することをさらに含む、請求項1〜請求項10のいずれか1項に記載の方法。
前記メモリ配列が、3レベルのセル配列であり、前記M個の数の初期スクランブリングシーケンスが、3つのスクランブリングシーケンスから成る、請求項12に記載のプロセッサで実行される方法。
前記メモリ配列が複数レベルのセル配列であり、前記M個の数の初期スクランブリングシーケンスが、2つのスクランブリングシーケンスから成る、請求項12に記載のプロセッサで実行される方法。
前記M個の数のスクランブリングシーケンスが、データを前記メモリ配列に書き込むメモリコントローラのハードウエアレジスタに記憶される、請求項12〜請求項14のいずれか1項に記載のプロセッサで実行される方法。
前記M個の数のスクランブリングシーケンスのうちの少なくとも1つが、シフトレジスタによって動的に生成される最長のシーケンスである、請求項12〜請求項15のいずれか1項に記載のプロセッサで実行される方法。
データ配列の第1の行にアドレス指定されたデータを、第1のスクランブリングシーケンスを用いてランダム化し、かつ前記データ配列の第2の隣接する行にアドレス指定されたデータを、第2のスクランブリングシーケンスを用いてランダム化するように構成されたメモリコントローラであって、前記第2のスクランブリングシーケンスが、前記第1のスクランブリングシーケンスの循環シフトである、メモリコントローラを備える、装置。
前記データ配列の前記第1の列が、前記第1のスクランブリングシーケンスの第1の部分を用いてランダム化され、前記データ配列の前記第2の列が、前記第2のスクランブリングシーケンスの第1の部分を用いてランダム化される、請求項17に記載の装置。
前記第1のスクランブリングシーケンスが、前記データ配列中の3次元のデータをランダム化するために用いられる、請求項17〜請求項19のいずれか1項に記載の装置。
【発明を実施するための形態】
【0005】
図1は、メモリセル配列112のデータを複数次元でランダム化する例示のシステム100を示す。システム100は、メモリデバイス114中にデータを記憶し、検索するメモリコントローラ110を含む。メモリコントローラ110は、ホスト101と通信してデータを受け付け、メモリデバイス114に記憶されるように、かつメモリデバイス114から検索されたデータを出力するようにする。メモリデバイス114は、メモリコントローラ110から受信されたデータをメモリセル配列112に記憶する。1つの実装例では、メモリセル配列112は、電圧または電荷などの連続的でアナログ的な値を保持する複数のアナログメモリセルを備える。メモリセル配列112は、例えばNAND、NOR、DRAM、SRAM、MRAM、強誘電体RAM、磁気RAM、スピントルクトランスファRAM、抵抗変化RAM、位相変化メモリなどのいずれかの種類のアナログメモリセルを備え得る。セルに記憶される電荷レベルおよび/またはセルに書き込まれおよびこれらから読み出されるアナログ電圧または電流は、本明細書中で集合的にアナログ値または記憶値と呼ばれる。メモリセル配列112は、個々のメモリ配列または、3DのNANDフラッシュメモリ、3DのNORフラッシュメモリなどのメモリ配列の3次元スタックであり得る。
【0006】
システム100は、セルがそれぞれのメモリ状態を取るようにプログラミングすることによって、データをメモリセル配列112のアナログメモリセルに記憶する。メモリ状態は、可能なレベルの有限の集合から選択されるが、各々のレベルは、ある公称の記憶値に対応する。例えば、単一レベルセル(SLC)は、2つの可能な状態のうちのいずれか一方を各々のメモリセルに記憶するようにプログラムすることが可能であり、2ビットの複数レベルセル(MLC)は、4つの可能な公称記憶値のうちの1つをセルに書き込むことによって4つの可能なプログラミングレベルのうちの1つを取るようにプログラムすることが可能である。
【0007】
メモリデバイス114はR/Wユニット116を備えるが、これは、メモリデバイスに記憶されるデータをアナログ記憶値に変換して、メモリセルに書き込む。他の実装例では、R/Wユニット116は、変換は実施しないが、セルに記憶される記憶値が提供される。メモリセル配列112からデータを読み出すとき、R/Wユニット116は、メモリセルの記憶値を、1ビット以上の解像度を有するデジタルサンプルに変換する。
【0008】
メモリコントローラ110は、ホスト101と通信するインターフェース120を含む。ホスト101から受け入れられたデータは、第1のハードウエアレジスタ104に一時的にロードされる。第2のハードウエアレジスタ102は、スクランブル/スクランブル解除エンジン106によって使用可能なスクランブリングシーケンスを記憶して、ホスト101からのデータを、メモリセル配列112に書き込む前にスクランブルする。一部の実装例では、スクランブリングシーケンスは、第2のハードウエアレジスタ102には記憶されない。例えば、スクランブル/スクランブル解除エンジン106は、スクランブリングシーケンスを動的に生成するNビットのシフトレジスタ(例えば、線形のフィードバックシフトレジスタ(LFSR))を含み得る。Nビットのシフトレジスタは、第2のハードウエアレジスタ102に記憶されている値などの初期値を与えられて、タップを用いて、シーケンス中の各々のさらなるビットを計算する。
【0009】
本明細書ではデータランダム化とも呼ばれるスクランブリングは、危険なセル同士間の干渉シナリオを回避するため、およびメモリセル配列112中のメモリセルの損耗を均衡させるために実施される。一部の実装例では、データは、スクランブルされた後で、しかしメモリセル配列112に書き込まれる前にエンコーダ(図示せず)によって符号化される。
【0010】
1つの実装例では、メモリコントローラ110は、メモリ配列112中の複数の隣接する行にアドレス指定されたホスト101からデータを受信する。データは、スクランブル/スクランブル解除エンジン106にアクセス可能な第1のハードウエアレジスタ104に一時的にロードされる。第2のハードウエアレジスタ102に記憶されているスクランブリングシーケンスを用いて、スクランブル/スクランブル解除エンジン106は、メモリセル配列112の第1の行にアドレス指定されたデータの一部分をスクランブルする。スクランブル/スクランブル解除エンジン106は、スクランブルされたデータをメモリデバイス114のR/Wユニット116に送信し、このデバイスは、スクランブルされたデータをメモリセル配列112の第1の行に書き込む。
【0011】
メモリセル配列112の第2の行にデータを書き込む前に、スクランブル/スクランブル解除エンジン106は、スクランブリングシーケンスを、所定の数の桁だけ循環シフトさせる。この循環シフト動作は、時計回り方向または反時計回り方向のいずれかであり得る。1つの実装例では、スクランブル/スクランブル解除エンジン106のバレルシフターは、スクランブリングシーケンスの循環シフトを実施する。結果としての循環シフトされたスクランブリングシーケンスを用いて、メモリセル配列の第2の行にアドレス指定された第1のハードウエアレジスタ104中のデータをスクランブルする。スクランブル/スクランブル解除エンジン106は、スクランブルされたデータをメモリデバイス114のR/Wユニット116に送信し、このデバイスはデータをメモリセル配列112の第2の行に書き込む。
【0012】
メモリセル配列112の第3の行にデータを書き込む前に、スクランブル/スクランブル解除エンジン106は、スクランブリングシーケンスを再度循環シフトさせ、次に新たにシフトされたスクランブリングシーケンスを用いて、第3の行にアドレス指定された第1のハードウエアレジスタ104中のデータをスクランブルする。スクランブルされたデータは、メモリデバイス114に方向付けられ、ここで、R/Wユニット116によって、メモリセル配列112の第3の行に書き込まれる。
【0013】
上述した方式では、メモリセル配列112の連続する各々の行にアドレス指定されたデータは、メモリセル配列112中のすぐ隣の行のデータをスクランブルするために用いられたスクランブリングシーケンスと比較して循環シフトされたスクランブリングシーケンスを用いてスクランブルされる。この方式は、メモリセル配列112中の各々の個々の行に沿った、かつ各々の列にも沿った実質的に均一なランダム化を保証する。メモリセル配列112が、3DのNANDなどの3Dのメモリ配列である一部の実装例では、この方式はまた、データを第3の方向にランダム化する。この方式のさらなる恩典は、本明細書に説明する他の実装例に関連してより完全に検討される。
【0014】
図2は、複数次元でランダム化されたデータを記憶するのに適切な例示のメモリ配列200(データ配列とも呼ばれる)を示す。メモリ配列200は、直列に接続された複数の浮遊ゲートトランジスタメモリセル(例えば、セル202)を、一般的にNANDストリング(例えば、ストリング204)と呼ばれるものの中に含む。このタイプのメモリ配列200は、NANDフラッシュメモリとして周知である。NANDフラッシュは、開示する技術で用いられるのに適切なメモリの単なる一例のタイプであることを理解すべきである。電子捕獲を利用しないものを含めて他のタイプのメモリもまた、開示するデータランダム化技法で用いられるように想定される。
【0015】
各々のNANDストリングは、ビット線(例えば、記号が出力バス(例えば、バス208)を介して読み出すことが可能なビット線206)に連結される。隣接するNANDストリングのセルは、読み出し動作およびプログラミング動作によってメモリセルのどの行が影響されるかを選択するワード線(例えば、ワード線210)を介して連結される。選択ゲート212、214もまた、読み出し動作およびプログラミング動作中に、NANDストリングをそれぞれのビット線およびグランドに選択的に連結する。一般的に、各々のワード線は、物理的にアドレス指定可能な最少のデータ単位である1つ以上のページ(例えば、ページ218)と関連付けられ得る。ページのビット単位でのサイズ(これは、ユーザデータおよび誤り訂正符号、すなわちECCの双方を含み得る)は、ワード線中のNANDストリングの数に対応する。MLCメモリ配列は、対応するビット(例えば、各々のページの全てのビット0)を各々のセル内で固有の電荷レベルに符号化することによって、ワード線上の複数のページを記憶する。
【0016】
フラッシュメモリは、浮遊ゲートを特定の電圧に充電することによって状態を維持する。この結果、指定された読み出し電圧が印加されたときに、事前定義された量の電流がチャネルを通って流れることになる。1つのセル当たりのデータのビット数が少ないまたは多い不揮発性ソリッドステートメモリセルを含む他のタイプのメモリも、2つ以上の方向でランダム化されたデータを記憶するのに適切であり得る。
【0017】
1つの実装例によれば、スクランブル/スクランブル解除エンジン230は、第1のスクランブリングシーケンスを用いて、第1のワード線(WL0 220)のセルにアドレス指定されたデータをスクランブルする。スクランブル/スクランブル解除エンジン230は、初期スクランブリングシーケンスを所定の桁数だけ循環シフトさせ、次に、このシフトされたシーケンスを用いて、次に隣接するワード線(WL1 222)のセルにアドレス指定されたデータをスクランブルする。その後で、スクランブル/スクランブル解除エンジンは、すでにシフト済みのスクランブリングシーケンスを再度循環シフトさせ、結果得られるシーケンスを用いて、第3のワード線(WL2 224)のセルにアドレス指定されたデータをスクランブルする。このような様式で、連続する各々のワード線に書き込まれたデータが、隣接するすでにランダム化されているワード線に対して循環シフトされたスクランブリングシーケンスに基づいてスクランブルされる。
【0018】
その結果、メモリ配列200に対する書き込み動作は、ワード線方向およびビット線方向にもランダム化されたデータ分配をもたらす。
【0019】
図3は、SLCのメモリ配列(図示せず)のデータをランダム化する例示のスクランブリングシーケンス302の反復循環シフト300を示す。1つの実装例では、スクランブリングシーケンス302は、記憶デバイスのスクランブル/スクランブル解除エンジンによってアクセス可能であり、かつ、データとのビット毎のXORを計算して、SLCメモリ配列のデータを複数次元でランダム化するために用いられる。
【0020】
様々なタイプのスクランブリングシーケンス302が、使用される事を想定されている。1つの実装例では、スクランブリングシーケンス302は、一般にはシード(例えば、シード304)と呼ばれるNビットの数から生成された最長シーケンス(mシーケンス)である。
【0021】
mシーケンスは、一般的に、線形フィードバックシフトレジスタおよび排他的論理和(XOR)ゲートを用いて生成されるシーケンスである。このNビットの数の中のあるビットに対してタップが加えられて、タップが付けられたビットを用いてXORを計算して、Nビットの数の末尾に追加される新しい二進法ビットが作成される。mシーケンスを生成するために、フィードバックXORタップが、原始多項式の係数を形成する。ビットは1桁だけシフトされ、このプロセスは、2^Nの数の状態における考えられる全ての二進法の組み合わせが、結果得られるシーケンスに厳密に一回含まれるまで繰り返される。mシーケンスの長さは、2
N−1である。
【0022】
図示する例示の実装例では、mシーケンスは、N=12ビットのシードであるシード304に基づく疑似ランダムシーケンスである。他の実装例では、異なる長さのシードが利用される。シード304は12ビットを含むため、対応するmシーケンスは2^12の数の可能な二進法状態を含む。2^12−1=4096という完全シーケンス長は実際に示すには余りに長すぎ、したがって、スクランブリングシーケンス302(例えば、図示するデータブロックの先頭行)は、完全シーケンスではなくて、このmシーケンスの第1の部分だけを示していることを理解すべきである。しかしながら、「スクランブリングシーケンス302」という用語は、本明細書では、完全mシーケンス、mシーケンスの一部分、または一緒に添えられた2つの異なるmシーケンスの部分などに言及するのに用いられる。
【0023】
メモリ配列ワード線に記憶されるビットの数(K)は、完全mシーケンス未満であれば、スクランブリングシーケンス302は、長さKを有する完全mシーケンスの切り取られた部分であり得る。一方、ワード線に記憶されるビットの数が完全mシーケンスを超えれば、複数のmシーケンスを一緒に添えて、長さKのスクランブリングシーケンス302を形成することが可能である。
【0024】
データのランダム化で利用されるスクランブリングシーケンス302は、様々な異なる長さのものであり得る。1つの実装例では、スクランブリングシーケンス302は、メモリデバイス中の合計ページ数未満の合計桁数を有する。同じまたは別の実装例では、スクランブリングシーケンス302は、メモリデバイス中のすべての可能なセル上で全ての可能なプログラム状態が発生することを許容するに十分大きい合計桁数を有する。例えば、メモリデバイスが、1つのセル当たり異なる4状態を許容し、かつK個の合計セル数を有するMLC NANDであれば、mシーケンスは少なくとも2Kビット長である。
【0025】
mシーケンスはスクランブリングシーケンスにとっては良好な候補であるが、それは、これらが、理想的なランダム化特性を提供するからである。任意のmシーケンスの内部で、「i」個の数の連続するゼロが存在する確率は、(1/2)
i(「i」は、Nビットのシード中の桁数「N」未満である)によって与えられる。
【0026】
スクランブリングシーケンス302は、様々な方法で生成することが可能である。1つの実装例では、スクランブリングシーケンス302は、前もって生成されて、ユーザデータをメモリ配列(図示せず)に書き込むスクランブル/スクランブル解除エンジンによってアクセス可能なファイル(例えば、オンチップSRAMなどのメモリ)に記憶される。他の実装例では、スクランブリングシーケンス302が、データのスクランブルまたはスクランブル解除の動作中に生成される。例えば、スクランブル/スクランブル解除エンジンは、mシーケンスを作成するためにNビットのシードをロードされるシフトレジスタを含み得る。
【0027】
データをメモリ配列の第1の行(例えば、第1のワード線)に書き込む前に、スクランブル/スクランブル解除エンジンは、スクランブリングシーケンス302を用いて、第1の行にアドレス指定されたデータをスクランブルする。1つの実装例では、スクランブル/スクランブル解除エンジンは、データを、スクランブリングシーケンス302とメモリ配列の第1の行のセルにアドレス指定されたデータとの間のビット毎のXORを計算することによってスクランブルする。この計算に利用されるmシーケンスの桁数は、書き込み動作で書き込みされた第1の行のデータセルの数に等しい。
【0028】
メモリ配列の第1の行のデータをスクランブルした後、第1のシフト済みスクランブリングシーケンス306(例えば、図示するデータブロックの第2の行)によって示されるように、スクランブリングシーケンス302は、1桁だけ(例えば、左側に1桁)循環シフトされる。スクランブル/スクランブル解除エンジンは、第1のシフト済みスクランブリングシーケンス306を用いて、第2の行のセルにアドレス指定されたデータをスクランブルする。例えば、スクランブル/スクランブル解除エンジンは、データを、第1のシフト済みスクランブリングシーケンス306と第2の行のセルにアドレス指定されたデータとの間のビット毎のXORを計算することによってスクランブルし得る。
【0029】
メモリ配列の第2の行にアドレス指定されたデータをスクランブルした後、第2のシフト済みスクランブリングシーケンス308によって示されるように、第1のシフト済みスクランブリングシーケンス306は、1桁だけ(例えば、左側に1桁)再度循環シフトされる。上記と同じ様式で、第2のシフト済みスクランブリングシーケンス308を用いて、メモリ配列の第3の行にアドレス指定されたデータをスクランブルする。
【0030】
図示するデータブロックの先頭からの降順におけるスクランブリングシーケンス310〜326は各々が、それぞれ、メモリ配列の行4〜12にアドレス指定されたデータをスクランブルするために用いられる循環シフトされたスクランブリングシーケンスを表す。
【0031】
図3は、1桁循環シフトを示すが、循環シフトの大きさは1桁シフトに限られず、様々な実装例で様々な値を取り得る。しかしながら、1桁循環シフトの1つの結果は、メモリ配列の任意の行Mをランダム化するために用いられるスクランブリングシーケンスが、対応する列L(対応する行/列が、M=Lの場合である)をランダム化するために適用されるスクランブリングシーケンスと部分的に同じであるということである。
【0032】
例えば、ビット線0のスクランブリングシーケンス340が、ワード線0のスクランブリングシーケンス302の第1の部分に等しいが、同様に、ビット線1のスクランブリングシーケンスが、ワード線1のスクランブリングシーケンスの第1の部分に等しく、以下同様となる。メモリ配列中のワード線の数はビット線の数とは異なり得るため、行Mをスクランブルすることは、対応する列L(L=M)をスクランブルするために用いられるそれより長いまたは短いスクランブリングシーケンスの使用を伴い得る。したがって、各々のワード線および対応するビット線のスクランブリングシーケンスは、これらのシーケンスが共有するX個の数の桁まで同一である。mシーケンスの長さを超えるビット線および/またはワード線がある1つの実装例では、スクランブリングシーケンス302は、反復する毎に循環シフトされた後で自分自身を繰り返し得る。例えば、スクランブリングシーケンスが512ビット長であれば、ビット線0および512は、同一であり得る。
【0033】
この循環シフトおよびスクランブル動作の結果として、ワード線軸とビット線軸との双方が、mシーケンスの生成によるランダム化を受容し、ワード線同士間またはビット線同士間の相互関連付けは維持されない。
【0034】
図4は、メモリ配列(図示せず)のデータをランダム化する例示の4元のスクランブリングシーケンスの反復循環シフト400を示す。図示する例では、メモリ配列は、各々のデータセルが、4つの可能な異なる状態(例えば、00、01、10、11)のうちの1つを形成する2データビットを記憶するMLC配列であり得る。2ビットのデータセルに記憶される最初の桁は一般に最下位ビット(LSB)と呼ばれ、他方、2ビットデータセルに記憶される二番目の桁は一般に最上位ビット(MSB)と呼ばれる。任意のデータセルのLSBおよびMSBは、メモリ配列の2つの異なるページに属する。
【0035】
4元のスクランブリングシーケンス402(例えば、図示する4元のデータブロックの先頭行)は、4元のスクランブリングシーケンスの最初の部分を示しているだけで、完全シーケンスは示していない。しかしながら、「4元のスクランブリングシーケンス402」という用語は、本明細書では、完全シーケンスに言及するために用いられており、その単なる一部分に言及するために用いられてはいない。
【0036】
4元のスクランブリングシーケンス402は、4元のアルファベットの桁(0、1、2、3)で形成されており、桁(0、1、2、3)の各々が、可能なMLC状態(00、01、10、11)のうちの1つに言及する。4元のスクランブリングシーケンス402は、1つの実装例では、
図3の二進法の場合に関連して説明したように同じタイプの非循環mシーケンスを作るために原始多項式を用いて生成される。例えば、原始多項式は、原子根αを持つ1+x+x^2であり得る。このような場合、4元のアルファベットは、(1、α、α^2、1+α)であり得るが、式中、「00」は1に対応し、「01」はαに対応し、「10」はα^2に対応し、「11」は1+αに対応する。
【0037】
スクランブルされたデータを受信するメモリ配列のサイズによっては、原始多項式は、あらゆる状況において、適切な長さのスクランブリングシーケンスを生成することが可能でないということがあり得る。このような場合、真のmシーケンスとほぼ同じ所望の効果を提供するスクランブリングシーケンスを別の方法で計算することが可能である。
【0038】
1つの例示の実装例では、4元のスクランブリングシーケンス402は、適切な長さおよびサイズの値の配列をランダムに並べかえることによって生成される。1つの例示の配列は、256個の値を含むが、この場合、各々の値は、4元のアルファベット(0、1、2、3)の4つの文字から成る4文字の4元記号(例えば、形式[0000]、[0001]、[0002]、[0010]など)で形成される。一旦形成されると、配列は、1つまたはいくつかの適切なランダム化技法を用いてランダムに並び替えられ、異なる値が一緒に添えられて、4元のスクランブリングシーケンス402を形成する。
【0039】
一旦形成されると、4元のスクランブリングシーケンス402は、異なる2つの二進法シーケンスに分割される。これは、4つの可能な2ビット二進法値(「00」、「01」、「10」、および「11」)のうちの1つを4元の文字(0、1、2、および3)の各々に割り当てることによって実行されるが、この場合、最初のビットは対応するセルのLSBに応用されるスクランブリングを表し、2番目のビットは対応するセルのMSBに応用されるスクランブリングを表す。次に、LSBおよびMSBの値は、異なる2つの二進法シーケンスに分離され、これで、第1の二進法シーケンスがLSB値を含み、第2の二進法シーケンスがMSB値を含むようにする。結果得られる2つの二進法シーケンスは、例えば、メモリ配列のメモリコントローラの異なる2つのハードウエアレジスタに記憶される。
【0040】
MLCメモリ配列の第1の行(例えば、第1のワード線)のセルにアドレス指定されたデータを書き込む前に、スクランブル/スクランブル解除エンジンは4元のスクランブリングシーケンス402を用いて、データをスクランブルする。1つの実装例では、スクランブル/スクランブル解除エンジンは、第1の行のLSBにアドレス指定されたデータを、各々のセルのLSBと第1の記憶済みの二進法シーケンス中の対応するビットとの間のビット毎のXORを計算することによってスクランブルする。加えて、スクランブル/スクランブル解除エンジンは、第1の行のMSBにアドレス指定されたデータを、各々のセルのMSBと第2の記憶済みの二進法シーケンス中の対応するビットとの間のビット毎のXORを計算することによってスクランブルする。
【0041】
メモリ配列の第1の行のセルにアドレス指定されたデータをスクランブルした後で、図示する4元のデータブロックの第2の行中の第1のシフト済みスクランブリングシーケンス406によって示されるように、4元のスクランブリングシーケンス402は(事実上)1桁だけ(例えば、左の1桁に)循環シフトされる。すでに説明したように、メモリコントローラは、スクランブリングシーケンス402の4元の値(0、1、2、3)を物理的に記憶するのではなくて、むしろ、このような値の表現を、第1の二進法シーケンスおよび第2の二進法シーケンスという形態で記憶し得る。したがって、第1のシフト済み4元スクランブリングシーケンス406によって示される循環シフトは、第1の二進法シーケンスとしておよび第2の二進法シーケンスの循環シフトとしても実装され得る。
【0042】
メモリ配列の第2の行(例えば、第2のワード線)にデータを書き込む前に、スクランブル/スクランブル解除エンジンは、第1のシフト済みスクランブリングシーケンス406(例えば、2つの分離した、シフト済み二進法シーケンスとして実装される)を用いて、第2の行のLSBおよびMSBのデータビットをスクランブルする。例えば、スクランブル/スクランブル解除エンジンは、LSBデータビットを、LSBデータビットと第1の二進法シーケンスとの間のビット毎のXORを計算することによってスクランブルし、MSBデータビットを、MSBデータビットと第2の二進法シーケンスとの間のビット毎のXORを計算することによってスクランブルし得る。
【0043】
メモリ配列の第2の行にアドレス指定されたデータビットをスクランブルした後で、図示するデータブロックの第3の行中の第2のシフト済みスクランブリングシーケンス408によって示されるように、第1のシフト済みスクランブリングシーケンス406は(事実上)1桁だけ(例えば、左の1桁に)再度循環シフトされる。上述したように、この効果は、第1の二進法シーケンスの別の循環シフトとしておよび第2の二進法シーケンスの循環シフトとしても実装され得る。上述したのと同じ様式で、スクランブル/スクランブル解除エンジンは、第2のシフト済みスクランブリングシーケンス408を用いて、第3の行のLSBおよびMSBをスクランブルする。
【0044】
図示するデータブロックの降順におけるスクランブリングシーケンス410〜426は各々が、それぞれ、メモリ配列の行4〜12にアドレス指定されたデータをスクランブルするために用いられるさらに循環シフトされた4元スクランブリングシーケンスを表す。
【0045】
用いられる循環シフトの大きさは、図示するように、いかなる所定の値でもよく、1桁シフトに限られない。しかしながら、1桁循環シフトの1つの結果は、メモリ配列の任意の行におけるMSBまたはLSBをランダム化するために適用されるスクランブリングシーケンスが、MSBまたはLSBの対応する列をランダム化するために適用されるスクランブリングシーケンスと部分的に同じであるということである。
【0046】
例えば、ワード線M(ここで、M=0、1、2、3など)のスクランブリングシーケンスの第1の部分も用いて、対応するビット線(L)に沿ったLSBをスクランブルする(ここで、L=M)。例えば、ビット線0(例えば、ボックス428で示す)をスクランブルするために用いられるスクランブリングシーケンスは、ワード線0をスクランブルするために用いられるスクランブリングシーケンス402の第1の部分と同一である。同様に、ビット線1をスクランブルするために用いられるスクランブリングシーケンスは、ワード線1をスクランブルするために用いられる第1のスクランブリングシーケンス402の第1の部分と同一である。
【0047】
この循環シフトおよびスクランブリングの結果として、ワード線軸とビット線軸との双方が、mシーケンスの生成によるランダム化を受容し、ワード線同士間またはビット線同士間の相互関連付けは維持されない。
【0048】
上述した方法は、ワード線方向のビットの25%が4つのセル状態の各々を取り、かつビット線方向のビットの25%が、4つのセル状態の各々を取ることを保証することによって、MLCデバイス中のエラーの確率を実質的に減少させる。この概念を拡張して、1つのセル当たり3データビット以上保持するメモリ配列中のデータをランダム化することが可能である。例えば、8元のスクランブリングシーケンスを生成して用いて、3レベルのセル(TLC)フラッシュ配列のデータをランダム化することが可能である。
【0049】
図5は、3次元でランダム化されたデータを記憶するのに適切な例示のメモリブロック500(例えば、3DのNAND)を示す。このタイプのメモリブロックは、ワード線(例えば、ワード線510)を介して連結された隣接するNANDストリングのセルを含み、また、NANDストリングをそれぞれのビット線(例えば、ビット線504)に選択的に連結する3DのNANDブロックである。チャネルストリング(A)と呼ばれる第3の次元のメモリセルは、ビット線(504)およびチャネル選択線(508)を起動することによって選択される。3DのNANDフラッシュにおいては、この一群のワード線の方向が、ワード線平面と呼ばれることがある。以下に説明するスクランブリング方法は、ビット線(BL)、ワード線(WL)、およびチャネル選択線(CSL)の方向の各々において3次元のデータランダム化をもたらす。
【0050】
メモリブロック500の任意の個々のチャネル選択線内で、
図3〜4に関連して説明したのと同じまたは類似の様式で、データスクランブルが実施される。例えば、いずれか1つのチャネル選択線内で、スクランブル/スクランブル解除エンジン506は、このチャネル選択線の第1のワード線に対して用いられる初期スクランブリングシーケンスの循環シフトを反復することによってN個の数のワード線の各々のデータをスクランブルし得る。したがって、「1」の循環シフトが利用されると、チャネル選択線の任意のワード線M(例えば、ワード線番号が0〜Mのワード線)に対するスクランブリングシーケンスは、M個の数の桁だけシフトされたチャネル選択線の初期スクランブリングシーケンスに基づく。例えば、CSL0のWL1は、1桁だけシフトされたWL0、CSL0の初期スクランブリングシーケンスを用いてスクランブルされ、CSL0のWL2は、2桁だけシフトされたWL0、CSL0の初期スクランブリングシーケンスを用いてスクランブルされる、などとなる。1を超える大きさの循環シフトが、他の一部の実装例で用いられることが想定されている。
【0051】
「1」の循環シフトが上述の様式で用いられるとき、各々のワード線に対するスクランブリングシーケンスは、各々の個々のチャネル選択線内の対応するビット線に対するスクランブリングシーケンスと同一になる。この方法をさらに1つのステップだけ拡張させることによって、データをチャネル選択線方向でランダム化し、これにより、いずれかのワード線のスクランブリングシーケンスが、対応するビット線のそれに等しく、かつ対応するチャネル選択線のそれにも等しくなるようにすることが可能である。
【0052】
1つの実装例では、この3次元のデータランダム化は、各々のチャネル選択線の第1のワード線を、隣接するチャネル選択線の第1のワード線をスクランブルするために用いられたスクランブリングシーケンスと比較して循環シフトされた初期スクランブリングシーケンスでスクランブルすることによって実装される。例えば、「1」のシフトを利用すると、次の結果となる:CSL0のWL0が初期スクランブリングシーケンスでスクランブルされ、CSL1のWL0が、1だけシフトされたCSL0の初期スクランブリングシーケンスでスクランブルされ、CSL2のWL0が、2だけシフトされたCSL0の初期スクランブリングシーケンスでスクランブルされる、などとなる。チャネル選択線の各々の内部で、データは上述したようにスクランブルされる。
【0053】
これが、3次元でのデータランダム化を保証する。記憶デバイスが4つのメモリ状態を持つMLCデバイスのとき、この方式は、ワード線方向のビットの25%が4つのセル状態の各々を取り、ビット線方向のビットの25%が、4つのセル状態の各々を取り、およびチャネル選択線のビットの25%が、4つのセル状態の各々を取ることを保証する。
【0054】
図6は、データを複数次元でランダム化する例示の動作600を示す。生成動作602は、Nビットの数に対してmシーケンスを生成する。記憶動作604は、mシーケンスをメモリコントローラのハードウエアレジスタに記憶する。
【0055】
メモリコントローラに書き込み動作を実施することを命令する書き込みコマンドを受信すると、スクランブリング動作606は、メモリ配列の第1の行にアドレス指定されたデータをスクランブルする。1つの実装例では、スクランブリング動作606は、生成されたmシーケンスとメモリ配列の第1の行にアドレス指定されたデータとの間でのビット毎のXORを計算することによって実施される。書き込み動作608は、スクランブルされたデータをデータ配列に書き込む。
【0056】
シフト動作610は、mシーケンスを循環シフトさせる。1つの実装例では、このシフトは、1桁シフトである。他の実装例では、この循環シフトが、1桁を超える。別のスクランブリング動作612は、循環シフトされたmシーケンスを用いて、最新に書き込みされた行(例えば、第1の行)に隣接するデータ配列の次の行にアドレス指定されたデータをスクランブルする。1つの実装例では、スクランブリング動作612は、シフトされたmシーケンスとデータ配列の次の行にアドレス指定されたデータとの間でビット毎のXORを計算することによって実施される。書き込み動作614は、スクランブルされたデータをデータ配列に書き込む。
【0057】
決定動作616は、データ配列のさらなる行が書き込み動作によってまだ変更されていないかどうか決定する。1つ以上の行が変更されていない場合、動作610〜614は繰り返され、mシーケンスをシフトし、データをスクランブルし、行毎にデータを書き込み、最後に書き込み動作が完了して、終了動作618が書き込み動作を終了させる。
【0058】
データ配列が3次元データブロックの一部であれば、他のレベルのブロック(例えば、他のチャネル選択線)中のデータは、同じまたは類似の様式でランダム化され、スクランブリングシーケンスに循環シフトを適用して、データブロック中の全てセルがランダム化されるまで、連続する各々の行をランダム化する。
【0059】
本明細書に説明する本発明の実装例は、1つ以上のコンピュータシステムで論理ステップとして実装される。本発明の論理演算は、(1)1つ以上のコンピュータシステム中で実行されるプロセッサで実装されるステップのシーケンスとして、および(2)1つ以上のコンピュータシステム内の相互接続された機械または回路モジュールとして実装される。この実装は、本発明を実装するコンピュータシステムの性能要件によって異なる選択の問題である。したがって、本明細書に説明する本発明の実施形態を形成する論理演算は、動作、ステップ、目的、またはモジュールと様々に呼ばれる。さらにその上、論理演算は、別様に明示的に請求されない限り、または特定の順序が請求の範囲の語句によって本質的に必要とされない限り、所望次第で加算および省略して、いかなる順序でも実施され得ることを理解すべきである。
【0060】
上記の明細、例、およびデータは、本発明の例示の実施形態の構造および用法を完全に説明するものである。本発明の多くの実施形態は本発明の精神および範囲から逸脱することなく実現可能であるため、本発明は以降に添付される請求の範囲に存在する。さらにその上、異なる実施形態の構造的特徴は、記載される特許請求の範囲から逸脱することなくさらに別の実施形態において組み合わされ得る。