(57)【特許請求の範囲】
【請求項１】
データ配列の第１の行にアドレス指定されたデータを、少なくとも第１のスクランブリングシーケンスを用いてランダム化することと、
前記データ配列の第２の隣接する行にアドレス指定されたデータを、前記第１のスクランブリングシーケンスの循環シフトである少なくとも第２のスクランブリングシーケンスを用いて、ランダム化することと、
を含む、方法。
【請求項２】
前記データ配列の前記第１の行にアドレス指定された前記データを第１の複数のスクランブリングシーケンスを用いてランダム化することと、前記データ配列の前記第２の隣接する行にアドレス指定された前記データを、第２の複数のスクランブリングシーケンスを用いてランダム化することと、をさらに含み、前記第２の複数のスクランブリングシーケンスの各々が、前記第１の複数のスクランブリングシーケンスの循環シフトである、請求項１に記載の方法。
【請求項３】
前記データ配列の第１の列を前記第１のスクランブリングシーケンスの一部分を用いてランダム化することと、前記データ配列の第２の列を前記第２のスクランブリングシーケンスの第１の部分を用いてランダム化することと、をさらに含む、請求項１または請求項２に記載の方法。
【請求項４】
前記循環シフトが、一桁シフトである、請求項１〜請求項３のいずれか１項に記載の方法。
【請求項５】
前記循環シフトが、複数桁のシフトである、請求項１に記載の方法。
【請求項６】
前記データ配列の第３の行のデータを、前記第２のスクランブリングシーケンスの循環シフトである第３のスクランブリングシーケンスを用いてランダム化することをさらに含み、前記第３の行が前記第２の行に隣接する、請求項１〜請求項５のいずれか１項に記載の方法。
【請求項７】
前記スクランブリングシーケンスが、最長シーケンス（ｍシーケンス）の一部分および完全ｍシーケンスのうちの少なくとも１つを含む、請求項１〜請求項６のいずれか１項に記載の方法。
【請求項８】
前記スクランブリングシーケンスが、データを前記データ配列に書き込むメモリコントローラのハードウエアレジスタに記憶される、請求項１〜請求項７のいずれか１項に記載の方法。
【請求項９】
第１のビット線の前記スクランブリングシーケンスの一部分が、第１のワード線の前記スクランブリングシーケンスの一部分と等しい、請求項１〜請求項４のいずれか１項に記載の方法。
【請求項１０】
前記メモリ配列が３ＤのＮＡＮＤ配列であり、同じスクランブリングシーケンスを用いて、第１のビット線、第１のワード線、および第１のチャネル選択線の各々をスクランブルする、請求項１〜請求項９のいずれか１項に記載の方法。
【請求項１１】
前記第１の行の前記データをランダム化することが、前記第１の行にアドレス指定された前記データと、前記第１のスクランブリングシーケンスとの間のビット毎の排他的論理和を計算することをさらに含む、請求項１〜請求項１０のいずれか１項に記載の方法。
【請求項１２】
プロセッサで実行される方法であって、
メモリ配列の第１の行にアドレス指定されたデータを、ある数（Ｍ）の初期スクランブリングシーケンスを用いてランダム化することと、
前記Ｍ個の数の初期スクランブリングシーケンスの各々を循環シフトすることと、
前記メモリ配列の第２の隣接する行にアドレス指定されたデータを、前記循環シフトされたスクランブリングシーケンスを用いてランダム化することと、
を含む、方法。
【請求項１３】
前記メモリ配列が、３レベルのセル配列であり、前記Ｍ個の数の初期スクランブリングシーケンスが、３つのスクランブリングシーケンスから成る、請求項１２に記載のプロセッサで実行される方法。
【請求項１４】
前記メモリ配列が複数レベルのセル配列であり、前記Ｍ個の数の初期スクランブリングシーケンスが、２つのスクランブリングシーケンスから成る、請求項１２に記載のプロセッサで実行される方法。
【請求項１５】
前記Ｍ個の数のスクランブリングシーケンスが、データを前記メモリ配列に書き込むメモリコントローラのハードウエアレジスタに記憶される、請求項１２〜請求項１４のいずれか１項に記載のプロセッサで実行される方法。
【請求項１６】
前記Ｍ個の数のスクランブリングシーケンスのうちの少なくとも１つが、シフトレジスタによって動的に生成される最長のシーケンスである、請求項１２〜請求項１５のいずれか１項に記載のプロセッサで実行される方法。
【請求項１７】
データ配列の第１の行にアドレス指定されたデータを、第１のスクランブリングシーケンスを用いてランダム化し、かつ前記データ配列の第２の隣接する行にアドレス指定されたデータを、第２のスクランブリングシーケンスを用いてランダム化するように構成されたメモリコントローラであって、前記第２のスクランブリングシーケンスが、前記第１のスクランブリングシーケンスの循環シフトである、メモリコントローラを備える、装置。
【請求項１８】
前記データ配列の前記第１の列が、前記第１のスクランブリングシーケンスの第１の部分を用いてランダム化され、前記データ配列の前記第２の列が、前記第２のスクランブリングシーケンスの第１の部分を用いてランダム化される、請求項１７に記載の装置。
【請求項１９】
前記循環シフトが、一桁シフトである、請求項１７または請求項１８に記載の装置。
【請求項２０】
前記第１のスクランブリングシーケンスが、前記データ配列中の３次元のデータをランダム化するために用いられる、請求項１７〜請求項１９のいずれか１項に記載の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
デジタルシステムで用いられるあるメモリは、このメモリ中で物理的に近接している余りに多くのデータビットが同じビット値を有し、かつ反対値のビットを囲んでいると、データ損失を経験しかねない。つまり、物理的に近接している余りに多くのビットが０であると、これらの０の近くに記憶されている１のビットに対してデータ損失が発生しかねない。同様に、物理的に近接している余りにも多くのビットが１であると、これらの１の近くに記憶されているゼロのビットに対してデータ損失が発生しかねない。これらのタイプのメモリにおけるデータ損失を軽減するために、メモリコントローラは、「データスクランブリング」とも呼ばれるデータランダム化を実施し得る。データスクランブリングの機構は、再生可能疑似ランダム修正を用いて、メモリに書き込まれたデータを変更し、またメモリから読みだされたときに、データをオリジナルのデータに変更して戻す。データを変更することによって、１と０との混合体が変更され、これで、物理的に近接している類似ビットの数を減少させようとする。
【発明の概要】
【課題を解決するための手段】
【０００２】
本明細書に説明し、かつ特許請求される実装例は、複数次元のメモリ配列でのデータランダム化に備えるものである。１つの実装例では、第１のスクランブリングシーケンスを用いて、メモリ配列の第１の行にアドレス指定されたデータをランダム化し、第２のスクランブリングシーケンスを用いて、メモリ配列の第２の隣接する行にアドレス指定されたデータをランダム化する。第２のスクランブリングシーケンスは、第１のスクランブリングシーケンスの循環シフトである。
【０００３】
本発明の概要は、以下の発明を実施するための形態でさらに説明される概念の抜粋を簡略化された形態で導入するために提供される。本発明の概要は、特許請求される主題の重要な特徴または本質的な特徴を特定することを意図するものでもなければ、特許請求される主題の範囲を制限するために用いられることを意図するものでもない。これらおよび様々な他の特徴および長所が、以下の発明を実施するための形態を読むことにより明らかになるあろう。
【図面の簡単な説明】
【０００４】
【図１】図１は、メモリ配列のデータを複数次元でランダム化する例示のシステムを示す。
【図２】図２は、複数次元でランダム化されたデータを記憶するのに適切な例示のメモリ配列を示す。
【図３】図３は、単一レベルのセル（ＳＬＣ）のメモリ配列のデータをランダム化する例示のスクランブリングシーケンスの反復循環シフトを示す。
【図４】図４は、複数レベルのセル（ＭＬＣ）のメモリ配列のデータをランダム化する例示の４元のスクランブリングシーケンスの反復循環シフトを示す。
【図５】図５は、複数次元でランダム化されたデータを記憶するのに適切な例示のメモリ配列を示す。
【図６】図６は、データ配列中のデータを複数次元でランダム化する例示の動作を示す。
【発明を実施するための形態】
【０００５】
図１は、メモリセル配列１１２のデータを複数次元でランダム化する例示のシステム１００を示す。システム１００は、メモリデバイス１１４中にデータを記憶し、検索するメモリコントローラ１１０を含む。メモリコントローラ１１０は、ホスト１０１と通信してデータを受け付け、メモリデバイス１１４に記憶されるように、かつメモリデバイス１１４から検索されたデータを出力するようにする。メモリデバイス１１４は、メモリコントローラ１１０から受信されたデータをメモリセル配列１１２に記憶する。１つの実装例では、メモリセル配列１１２は、電圧または電荷などの連続的でアナログ的な値を保持する複数のアナログメモリセルを備える。メモリセル配列１１２は、例えばＮＡＮＤ、ＮＯＲ、ＤＲＡＭ、ＳＲＡＭ、ＭＲＡＭ、強誘電体ＲＡＭ、磁気ＲＡＭ、スピントルクトランスファＲＡＭ、抵抗変化ＲＡＭ、位相変化メモリなどのいずれかの種類のアナログメモリセルを備え得る。セルに記憶される電荷レベルおよび／またはセルに書き込まれおよびこれらから読み出されるアナログ電圧または電流は、本明細書中で集合的にアナログ値または記憶値と呼ばれる。メモリセル配列１１２は、個々のメモリ配列または、３ＤのＮＡＮＤフラッシュメモリ、３ＤのＮＯＲフラッシュメモリなどのメモリ配列の３次元スタックであり得る。
【０００６】
システム１００は、セルがそれぞれのメモリ状態を取るようにプログラミングすることによって、データをメモリセル配列１１２のアナログメモリセルに記憶する。メモリ状態は、可能なレベルの有限の集合から選択されるが、各々のレベルは、ある公称の記憶値に対応する。例えば、単一レベルセル（ＳＬＣ）は、２つの可能な状態のうちのいずれか一方を各々のメモリセルに記憶するようにプログラムすることが可能であり、２ビットの複数レベルセル（ＭＬＣ）は、４つの可能な公称記憶値のうちの１つをセルに書き込むことによって４つの可能なプログラミングレベルのうちの１つを取るようにプログラムすることが可能である。
【０００７】
メモリデバイス１１４はＲ／Ｗユニット１１６を備えるが、これは、メモリデバイスに記憶されるデータをアナログ記憶値に変換して、メモリセルに書き込む。他の実装例では、Ｒ／Ｗユニット１１６は、変換は実施しないが、セルに記憶される記憶値が提供される。メモリセル配列１１２からデータを読み出すとき、Ｒ／Ｗユニット１１６は、メモリセルの記憶値を、１ビット以上の解像度を有するデジタルサンプルに変換する。
【０００８】
メモリコントローラ１１０は、ホスト１０１と通信するインターフェース１２０を含む。ホスト１０１から受け入れられたデータは、第１のハードウエアレジスタ１０４に一時的にロードされる。第２のハードウエアレジスタ１０２は、スクランブル／スクランブル解除エンジン１０６によって使用可能なスクランブリングシーケンスを記憶して、ホスト１０１からのデータを、メモリセル配列１１２に書き込む前にスクランブルする。一部の実装例では、スクランブリングシーケンスは、第２のハードウエアレジスタ１０２には記憶されない。例えば、スクランブル／スクランブル解除エンジン１０６は、スクランブリングシーケンスを動的に生成するＮビットのシフトレジスタ（例えば、線形のフィードバックシフトレジスタ（ＬＦＳＲ））を含み得る。Ｎビットのシフトレジスタは、第２のハードウエアレジスタ１０２に記憶されている値などの初期値を与えられて、タップを用いて、シーケンス中の各々のさらなるビットを計算する。
【０００９】
本明細書ではデータランダム化とも呼ばれるスクランブリングは、危険なセル同士間の干渉シナリオを回避するため、およびメモリセル配列１１２中のメモリセルの損耗を均衡させるために実施される。一部の実装例では、データは、スクランブルされた後で、しかしメモリセル配列１１２に書き込まれる前にエンコーダ（図示せず）によって符号化される。
【００１０】
１つの実装例では、メモリコントローラ１１０は、メモリ配列１１２中の複数の隣接する行にアドレス指定されたホスト１０１からデータを受信する。データは、スクランブル／スクランブル解除エンジン１０６にアクセス可能な第１のハードウエアレジスタ１０４に一時的にロードされる。第２のハードウエアレジスタ１０２に記憶されているスクランブリングシーケンスを用いて、スクランブル／スクランブル解除エンジン１０６は、メモリセル配列１１２の第１の行にアドレス指定されたデータの一部分をスクランブルする。スクランブル／スクランブル解除エンジン１０６は、スクランブルされたデータをメモリデバイス１１４のＲ／Ｗユニット１１６に送信し、このデバイスは、スクランブルされたデータをメモリセル配列１１２の第１の行に書き込む。
【００１１】
メモリセル配列１１２の第２の行にデータを書き込む前に、スクランブル／スクランブル解除エンジン１０６は、スクランブリングシーケンスを、所定の数の桁だけ循環シフトさせる。この循環シフト動作は、時計回り方向または反時計回り方向のいずれかであり得る。１つの実装例では、スクランブル／スクランブル解除エンジン１０６のバレルシフターは、スクランブリングシーケンスの循環シフトを実施する。結果としての循環シフトされたスクランブリングシーケンスを用いて、メモリセル配列の第２の行にアドレス指定された第１のハードウエアレジスタ１０４中のデータをスクランブルする。スクランブル／スクランブル解除エンジン１０６は、スクランブルされたデータをメモリデバイス１１４のＲ／Ｗユニット１１６に送信し、このデバイスはデータをメモリセル配列１１２の第２の行に書き込む。
【００１２】
メモリセル配列１１２の第３の行にデータを書き込む前に、スクランブル／スクランブル解除エンジン１０６は、スクランブリングシーケンスを再度循環シフトさせ、次に新たにシフトされたスクランブリングシーケンスを用いて、第３の行にアドレス指定された第１のハードウエアレジスタ１０４中のデータをスクランブルする。スクランブルされたデータは、メモリデバイス１１４に方向付けられ、ここで、Ｒ／Ｗユニット１１６によって、メモリセル配列１１２の第３の行に書き込まれる。
【００１３】
上述した方式では、メモリセル配列１１２の連続する各々の行にアドレス指定されたデータは、メモリセル配列１１２中のすぐ隣の行のデータをスクランブルするために用いられたスクランブリングシーケンスと比較して循環シフトされたスクランブリングシーケンスを用いてスクランブルされる。この方式は、メモリセル配列１１２中の各々の個々の行に沿った、かつ各々の列にも沿った実質的に均一なランダム化を保証する。メモリセル配列１１２が、３ＤのＮＡＮＤなどの３Ｄのメモリ配列である一部の実装例では、この方式はまた、データを第３の方向にランダム化する。この方式のさらなる恩典は、本明細書に説明する他の実装例に関連してより完全に検討される。
【００１４】
図２は、複数次元でランダム化されたデータを記憶するのに適切な例示のメモリ配列２００（データ配列とも呼ばれる）を示す。メモリ配列２００は、直列に接続された複数の浮遊ゲートトランジスタメモリセル（例えば、セル２０２）を、一般的にＮＡＮＤストリング（例えば、ストリング２０４）と呼ばれるものの中に含む。このタイプのメモリ配列２００は、ＮＡＮＤフラッシュメモリとして周知である。ＮＡＮＤフラッシュは、開示する技術で用いられるのに適切なメモリの単なる一例のタイプであることを理解すべきである。電子捕獲を利用しないものを含めて他のタイプのメモリもまた、開示するデータランダム化技法で用いられるように想定される。
【００１５】
各々のＮＡＮＤストリングは、ビット線（例えば、記号が出力バス（例えば、バス２０８）を介して読み出すことが可能なビット線２０６）に連結される。隣接するＮＡＮＤストリングのセルは、読み出し動作およびプログラミング動作によってメモリセルのどの行が影響されるかを選択するワード線（例えば、ワード線２１０）を介して連結される。選択ゲート２１２、２１４もまた、読み出し動作およびプログラミング動作中に、ＮＡＮＤストリングをそれぞれのビット線およびグランドに選択的に連結する。一般的に、各々のワード線は、物理的にアドレス指定可能な最少のデータ単位である１つ以上のページ（例えば、ページ２１８）と関連付けられ得る。ページのビット単位でのサイズ（これは、ユーザデータおよび誤り訂正符号、すなわちＥＣＣの双方を含み得る）は、ワード線中のＮＡＮＤストリングの数に対応する。ＭＬＣメモリ配列は、対応するビット（例えば、各々のページの全てのビット０）を各々のセル内で固有の電荷レベルに符号化することによって、ワード線上の複数のページを記憶する。
【００１６】
フラッシュメモリは、浮遊ゲートを特定の電圧に充電することによって状態を維持する。この結果、指定された読み出し電圧が印加されたときに、事前定義された量の電流がチャネルを通って流れることになる。１つのセル当たりのデータのビット数が少ないまたは多い不揮発性ソリッドステートメモリセルを含む他のタイプのメモリも、２つ以上の方向でランダム化されたデータを記憶するのに適切であり得る。
【００１７】
１つの実装例によれば、スクランブル／スクランブル解除エンジン２３０は、第１のスクランブリングシーケンスを用いて、第１のワード線（ＷＬ０  ２２０）のセルにアドレス指定されたデータをスクランブルする。スクランブル／スクランブル解除エンジン２３０は、初期スクランブリングシーケンスを所定の桁数だけ循環シフトさせ、次に、このシフトされたシーケンスを用いて、次に隣接するワード線（ＷＬ１  ２２２）のセルにアドレス指定されたデータをスクランブルする。その後で、スクランブル／スクランブル解除エンジンは、すでにシフト済みのスクランブリングシーケンスを再度循環シフトさせ、結果得られるシーケンスを用いて、第３のワード線（ＷＬ２  ２２４）のセルにアドレス指定されたデータをスクランブルする。このような様式で、連続する各々のワード線に書き込まれたデータが、隣接するすでにランダム化されているワード線に対して循環シフトされたスクランブリングシーケンスに基づいてスクランブルされる。
【００１８】
その結果、メモリ配列２００に対する書き込み動作は、ワード線方向およびビット線方向にもランダム化されたデータ分配をもたらす。
【００１９】
図３は、ＳＬＣのメモリ配列（図示せず）のデータをランダム化する例示のスクランブリングシーケンス３０２の反復循環シフト３００を示す。１つの実装例では、スクランブリングシーケンス３０２は、記憶デバイスのスクランブル／スクランブル解除エンジンによってアクセス可能であり、かつ、データとのビット毎のＸＯＲを計算して、ＳＬＣメモリ配列のデータを複数次元でランダム化するために用いられる。
【００２０】
様々なタイプのスクランブリングシーケンス３０２が、使用される事を想定されている。１つの実装例では、スクランブリングシーケンス３０２は、一般にはシード（例えば、シード３０４）と呼ばれるＮビットの数から生成された最長シーケンス（ｍシーケンス）である。
【００２１】
ｍシーケンスは、一般的に、線形フィードバックシフトレジスタおよび排他的論理和（ＸＯＲ）ゲートを用いて生成されるシーケンスである。このＮビットの数の中のあるビットに対してタップが加えられて、タップが付けられたビットを用いてＸＯＲを計算して、Ｎビットの数の末尾に追加される新しい二進法ビットが作成される。ｍシーケンスを生成するために、フィードバックＸＯＲタップが、原始多項式の係数を形成する。ビットは１桁だけシフトされ、このプロセスは、２＾Ｎの数の状態における考えられる全ての二進法の組み合わせが、結果得られるシーケンスに厳密に一回含まれるまで繰り返される。ｍシーケンスの長さは、２Ｎ−１である。
【００２２】
図示する例示の実装例では、ｍシーケンスは、Ｎ＝１２ビットのシードであるシード３０４に基づく疑似ランダムシーケンスである。他の実装例では、異なる長さのシードが利用される。シード３０４は１２ビットを含むため、対応するｍシーケンスは２＾１２の数の可能な二進法状態を含む。２＾１２−１＝４０９６という完全シーケンス長は実際に示すには余りに長すぎ、したがって、スクランブリングシーケンス３０２（例えば、図示するデータブロックの先頭行）は、完全シーケンスではなくて、このｍシーケンスの第１の部分だけを示していることを理解すべきである。しかしながら、「スクランブリングシーケンス３０２」という用語は、本明細書では、完全ｍシーケンス、ｍシーケンスの一部分、または一緒に添えられた２つの異なるｍシーケンスの部分などに言及するのに用いられる。
【００２３】
メモリ配列ワード線に記憶されるビットの数（Ｋ）は、完全ｍシーケンス未満であれば、スクランブリングシーケンス３０２は、長さＫを有する完全ｍシーケンスの切り取られた部分であり得る。一方、ワード線に記憶されるビットの数が完全ｍシーケンスを超えれば、複数のｍシーケンスを一緒に添えて、長さＫのスクランブリングシーケンス３０２を形成することが可能である。
【００２４】
データのランダム化で利用されるスクランブリングシーケンス３０２は、様々な異なる長さのものであり得る。１つの実装例では、スクランブリングシーケンス３０２は、メモリデバイス中の合計ページ数未満の合計桁数を有する。同じまたは別の実装例では、スクランブリングシーケンス３０２は、メモリデバイス中のすべての可能なセル上で全ての可能なプログラム状態が発生することを許容するに十分大きい合計桁数を有する。例えば、メモリデバイスが、１つのセル当たり異なる４状態を許容し、かつＫ個の合計セル数を有するＭＬＣ  ＮＡＮＤであれば、ｍシーケンスは少なくとも２Ｋビット長である。
【００２５】
ｍシーケンスはスクランブリングシーケンスにとっては良好な候補であるが、それは、これらが、理想的なランダム化特性を提供するからである。任意のｍシーケンスの内部で、「ｉ」個の数の連続するゼロが存在する確率は、（１／２）ｉ（「ｉ」は、Ｎビットのシード中の桁数「Ｎ」未満である）によって与えられる。
【００２６】
スクランブリングシーケンス３０２は、様々な方法で生成することが可能である。１つの実装例では、スクランブリングシーケンス３０２は、前もって生成されて、ユーザデータをメモリ配列（図示せず）に書き込むスクランブル／スクランブル解除エンジンによってアクセス可能なファイル（例えば、オンチップＳＲＡＭなどのメモリ）に記憶される。他の実装例では、スクランブリングシーケンス３０２が、データのスクランブルまたはスクランブル解除の動作中に生成される。例えば、スクランブル／スクランブル解除エンジンは、ｍシーケンスを作成するためにＮビットのシードをロードされるシフトレジスタを含み得る。
【００２７】
データをメモリ配列の第１の行（例えば、第１のワード線）に書き込む前に、スクランブル／スクランブル解除エンジンは、スクランブリングシーケンス３０２を用いて、第１の行にアドレス指定されたデータをスクランブルする。１つの実装例では、スクランブル／スクランブル解除エンジンは、データを、スクランブリングシーケンス３０２とメモリ配列の第１の行のセルにアドレス指定されたデータとの間のビット毎のＸＯＲを計算することによってスクランブルする。この計算に利用されるｍシーケンスの桁数は、書き込み動作で書き込みされた第１の行のデータセルの数に等しい。
【００２８】
メモリ配列の第１の行のデータをスクランブルした後、第１のシフト済みスクランブリングシーケンス３０６（例えば、図示するデータブロックの第２の行）によって示されるように、スクランブリングシーケンス３０２は、１桁だけ（例えば、左側に１桁）循環シフトされる。スクランブル／スクランブル解除エンジンは、第１のシフト済みスクランブリングシーケンス３０６を用いて、第２の行のセルにアドレス指定されたデータをスクランブルする。例えば、スクランブル／スクランブル解除エンジンは、データを、第１のシフト済みスクランブリングシーケンス３０６と第２の行のセルにアドレス指定されたデータとの間のビット毎のＸＯＲを計算することによってスクランブルし得る。
【００２９】
メモリ配列の第２の行にアドレス指定されたデータをスクランブルした後、第２のシフト済みスクランブリングシーケンス３０８によって示されるように、第１のシフト済みスクランブリングシーケンス３０６は、１桁だけ（例えば、左側に１桁）再度循環シフトされる。上記と同じ様式で、第２のシフト済みスクランブリングシーケンス３０８を用いて、メモリ配列の第３の行にアドレス指定されたデータをスクランブルする。
【００３０】
図示するデータブロックの先頭からの降順におけるスクランブリングシーケンス３１０〜３２６は各々が、それぞれ、メモリ配列の行４〜１２にアドレス指定されたデータをスクランブルするために用いられる循環シフトされたスクランブリングシーケンスを表す。
【００３１】
図３は、１桁循環シフトを示すが、循環シフトの大きさは１桁シフトに限られず、様々な実装例で様々な値を取り得る。しかしながら、１桁循環シフトの１つの結果は、メモリ配列の任意の行Ｍをランダム化するために用いられるスクランブリングシーケンスが、対応する列Ｌ（対応する行／列が、Ｍ＝Ｌの場合である）をランダム化するために適用されるスクランブリングシーケンスと部分的に同じであるということである。
【００３２】
例えば、ビット線０のスクランブリングシーケンス３４０が、ワード線０のスクランブリングシーケンス３０２の第１の部分に等しいが、同様に、ビット線１のスクランブリングシーケンスが、ワード線１のスクランブリングシーケンスの第１の部分に等しく、以下同様となる。メモリ配列中のワード線の数はビット線の数とは異なり得るため、行Ｍをスクランブルすることは、対応する列Ｌ（Ｌ＝Ｍ）をスクランブルするために用いられるそれより長いまたは短いスクランブリングシーケンスの使用を伴い得る。したがって、各々のワード線および対応するビット線のスクランブリングシーケンスは、これらのシーケンスが共有するＸ個の数の桁まで同一である。ｍシーケンスの長さを超えるビット線および／またはワード線がある１つの実装例では、スクランブリングシーケンス３０２は、反復する毎に循環シフトされた後で自分自身を繰り返し得る。例えば、スクランブリングシーケンスが５１２ビット長であれば、ビット線０および５１２は、同一であり得る。
【００３３】
この循環シフトおよびスクランブル動作の結果として、ワード線軸とビット線軸との双方が、ｍシーケンスの生成によるランダム化を受容し、ワード線同士間またはビット線同士間の相互関連付けは維持されない。
【００３４】
図４は、メモリ配列（図示せず）のデータをランダム化する例示の４元のスクランブリングシーケンスの反復循環シフト４００を示す。図示する例では、メモリ配列は、各々のデータセルが、４つの可能な異なる状態（例えば、００、０１、１０、１１）のうちの１つを形成する２データビットを記憶するＭＬＣ配列であり得る。２ビットのデータセルに記憶される最初の桁は一般に最下位ビット（ＬＳＢ）と呼ばれ、他方、２ビットデータセルに記憶される二番目の桁は一般に最上位ビット（ＭＳＢ）と呼ばれる。任意のデータセルのＬＳＢおよびＭＳＢは、メモリ配列の２つの異なるページに属する。
【００３５】
４元のスクランブリングシーケンス４０２（例えば、図示する４元のデータブロックの先頭行）は、４元のスクランブリングシーケンスの最初の部分を示しているだけで、完全シーケンスは示していない。しかしながら、「４元のスクランブリングシーケンス４０２」という用語は、本明細書では、完全シーケンスに言及するために用いられており、その単なる一部分に言及するために用いられてはいない。
【００３６】
４元のスクランブリングシーケンス４０２は、４元のアルファベットの桁（０、１、２、３）で形成されており、桁（０、１、２、３）の各々が、可能なＭＬＣ状態（００、０１、１０、１１）のうちの１つに言及する。４元のスクランブリングシーケンス４０２は、１つの実装例では、図３の二進法の場合に関連して説明したように同じタイプの非循環ｍシーケンスを作るために原始多項式を用いて生成される。例えば、原始多項式は、原子根αを持つ１＋ｘ＋ｘ＾２であり得る。このような場合、４元のアルファベットは、（１、α、α＾２、１＋α）であり得るが、式中、「００」は１に対応し、「０１」はαに対応し、「１０」はα＾２に対応し、「１１」は１＋αに対応する。
【００３７】
スクランブルされたデータを受信するメモリ配列のサイズによっては、原始多項式は、あらゆる状況において、適切な長さのスクランブリングシーケンスを生成することが可能でないということがあり得る。このような場合、真のｍシーケンスとほぼ同じ所望の効果を提供するスクランブリングシーケンスを別の方法で計算することが可能である。
【００３８】
１つの例示の実装例では、４元のスクランブリングシーケンス４０２は、適切な長さおよびサイズの値の配列をランダムに並べかえることによって生成される。１つの例示の配列は、２５６個の値を含むが、この場合、各々の値は、４元のアルファベット（０、１、２、３）の４つの文字から成る４文字の４元記号（例えば、形式［００００］、［０００１］、［０００２］、［００１０］など）で形成される。一旦形成されると、配列は、１つまたはいくつかの適切なランダム化技法を用いてランダムに並び替えられ、異なる値が一緒に添えられて、４元のスクランブリングシーケンス４０２を形成する。
【００３９】
一旦形成されると、４元のスクランブリングシーケンス４０２は、異なる２つの二進法シーケンスに分割される。これは、４つの可能な２ビット二進法値（「００」、「０１」、「１０」、および「１１」）のうちの１つを４元の文字（０、１、２、および３）の各々に割り当てることによって実行されるが、この場合、最初のビットは対応するセルのＬＳＢに応用されるスクランブリングを表し、２番目のビットは対応するセルのＭＳＢに応用されるスクランブリングを表す。次に、ＬＳＢおよびＭＳＢの値は、異なる２つの二進法シーケンスに分離され、これで、第１の二進法シーケンスがＬＳＢ値を含み、第２の二進法シーケンスがＭＳＢ値を含むようにする。結果得られる２つの二進法シーケンスは、例えば、メモリ配列のメモリコントローラの異なる２つのハードウエアレジスタに記憶される。
【００４０】
ＭＬＣメモリ配列の第１の行（例えば、第１のワード線）のセルにアドレス指定されたデータを書き込む前に、スクランブル／スクランブル解除エンジンは４元のスクランブリングシーケンス４０２を用いて、データをスクランブルする。１つの実装例では、スクランブル／スクランブル解除エンジンは、第１の行のＬＳＢにアドレス指定されたデータを、各々のセルのＬＳＢと第１の記憶済みの二進法シーケンス中の対応するビットとの間のビット毎のＸＯＲを計算することによってスクランブルする。加えて、スクランブル／スクランブル解除エンジンは、第１の行のＭＳＢにアドレス指定されたデータを、各々のセルのＭＳＢと第２の記憶済みの二進法シーケンス中の対応するビットとの間のビット毎のＸＯＲを計算することによってスクランブルする。
【００４１】
メモリ配列の第１の行のセルにアドレス指定されたデータをスクランブルした後で、図示する４元のデータブロックの第２の行中の第１のシフト済みスクランブリングシーケンス４０６によって示されるように、４元のスクランブリングシーケンス４０２は（事実上）１桁だけ（例えば、左の１桁に）循環シフトされる。すでに説明したように、メモリコントローラは、スクランブリングシーケンス４０２の４元の値（０、１、２、３）を物理的に記憶するのではなくて、むしろ、このような値の表現を、第１の二進法シーケンスおよび第２の二進法シーケンスという形態で記憶し得る。したがって、第１のシフト済み４元スクランブリングシーケンス４０６によって示される循環シフトは、第１の二進法シーケンスとしておよび第２の二進法シーケンスの循環シフトとしても実装され得る。
【００４２】
メモリ配列の第２の行（例えば、第２のワード線）にデータを書き込む前に、スクランブル／スクランブル解除エンジンは、第１のシフト済みスクランブリングシーケンス４０６（例えば、２つの分離した、シフト済み二進法シーケンスとして実装される）を用いて、第２の行のＬＳＢおよびＭＳＢのデータビットをスクランブルする。例えば、スクランブル／スクランブル解除エンジンは、ＬＳＢデータビットを、ＬＳＢデータビットと第１の二進法シーケンスとの間のビット毎のＸＯＲを計算することによってスクランブルし、ＭＳＢデータビットを、ＭＳＢデータビットと第２の二進法シーケンスとの間のビット毎のＸＯＲを計算することによってスクランブルし得る。
【００４３】
メモリ配列の第２の行にアドレス指定されたデータビットをスクランブルした後で、図示するデータブロックの第３の行中の第２のシフト済みスクランブリングシーケンス４０８によって示されるように、第１のシフト済みスクランブリングシーケンス４０６は（事実上）１桁だけ（例えば、左の１桁に）再度循環シフトされる。上述したように、この効果は、第１の二進法シーケンスの別の循環シフトとしておよび第２の二進法シーケンスの循環シフトとしても実装され得る。上述したのと同じ様式で、スクランブル／スクランブル解除エンジンは、第２のシフト済みスクランブリングシーケンス４０８を用いて、第３の行のＬＳＢおよびＭＳＢをスクランブルする。
【００４４】
図示するデータブロックの降順におけるスクランブリングシーケンス４１０〜４２６は各々が、それぞれ、メモリ配列の行４〜１２にアドレス指定されたデータをスクランブルするために用いられるさらに循環シフトされた４元スクランブリングシーケンスを表す。
【００４５】
用いられる循環シフトの大きさは、図示するように、いかなる所定の値でもよく、１桁シフトに限られない。しかしながら、１桁循環シフトの１つの結果は、メモリ配列の任意の行におけるＭＳＢまたはＬＳＢをランダム化するために適用されるスクランブリングシーケンスが、ＭＳＢまたはＬＳＢの対応する列をランダム化するために適用されるスクランブリングシーケンスと部分的に同じであるということである。
【００４６】
例えば、ワード線Ｍ（ここで、Ｍ＝０、１、２、３など）のスクランブリングシーケンスの第１の部分も用いて、対応するビット線（Ｌ）に沿ったＬＳＢをスクランブルする（ここで、Ｌ＝Ｍ）。例えば、ビット線０（例えば、ボックス４２８で示す）をスクランブルするために用いられるスクランブリングシーケンスは、ワード線０をスクランブルするために用いられるスクランブリングシーケンス４０２の第１の部分と同一である。同様に、ビット線１をスクランブルするために用いられるスクランブリングシーケンスは、ワード線１をスクランブルするために用いられる第１のスクランブリングシーケンス４０２の第１の部分と同一である。
【００４７】
この循環シフトおよびスクランブリングの結果として、ワード線軸とビット線軸との双方が、ｍシーケンスの生成によるランダム化を受容し、ワード線同士間またはビット線同士間の相互関連付けは維持されない。
【００４８】
上述した方法は、ワード線方向のビットの２５％が４つのセル状態の各々を取り、かつビット線方向のビットの２５％が、４つのセル状態の各々を取ることを保証することによって、ＭＬＣデバイス中のエラーの確率を実質的に減少させる。この概念を拡張して、１つのセル当たり３データビット以上保持するメモリ配列中のデータをランダム化することが可能である。例えば、８元のスクランブリングシーケンスを生成して用いて、３レベルのセル（ＴＬＣ）フラッシュ配列のデータをランダム化することが可能である。
【００４９】
図５は、３次元でランダム化されたデータを記憶するのに適切な例示のメモリブロック５００（例えば、３ＤのＮＡＮＤ）を示す。このタイプのメモリブロックは、ワード線（例えば、ワード線５１０）を介して連結された隣接するＮＡＮＤストリングのセルを含み、また、ＮＡＮＤストリングをそれぞれのビット線（例えば、ビット線５０４）に選択的に連結する３ＤのＮＡＮＤブロックである。チャネルストリング（Ａ）と呼ばれる第３の次元のメモリセルは、ビット線（５０４）およびチャネル選択線（５０８）を起動することによって選択される。３ＤのＮＡＮＤフラッシュにおいては、この一群のワード線の方向が、ワード線平面と呼ばれることがある。以下に説明するスクランブリング方法は、ビット線（ＢＬ）、ワード線（ＷＬ）、およびチャネル選択線（ＣＳＬ）の方向の各々において３次元のデータランダム化をもたらす。
【００５０】
メモリブロック５００の任意の個々のチャネル選択線内で、図３〜４に関連して説明したのと同じまたは類似の様式で、データスクランブルが実施される。例えば、いずれか１つのチャネル選択線内で、スクランブル／スクランブル解除エンジン５０６は、このチャネル選択線の第１のワード線に対して用いられる初期スクランブリングシーケンスの循環シフトを反復することによってＮ個の数のワード線の各々のデータをスクランブルし得る。したがって、「１」の循環シフトが利用されると、チャネル選択線の任意のワード線Ｍ（例えば、ワード線番号が０〜Ｍのワード線）に対するスクランブリングシーケンスは、Ｍ個の数の桁だけシフトされたチャネル選択線の初期スクランブリングシーケンスに基づく。例えば、ＣＳＬ０のＷＬ１は、１桁だけシフトされたＷＬ０、ＣＳＬ０の初期スクランブリングシーケンスを用いてスクランブルされ、ＣＳＬ０のＷＬ２は、２桁だけシフトされたＷＬ０、ＣＳＬ０の初期スクランブリングシーケンスを用いてスクランブルされる、などとなる。１を超える大きさの循環シフトが、他の一部の実装例で用いられることが想定されている。
【００５１】
「１」の循環シフトが上述の様式で用いられるとき、各々のワード線に対するスクランブリングシーケンスは、各々の個々のチャネル選択線内の対応するビット線に対するスクランブリングシーケンスと同一になる。この方法をさらに１つのステップだけ拡張させることによって、データをチャネル選択線方向でランダム化し、これにより、いずれかのワード線のスクランブリングシーケンスが、対応するビット線のそれに等しく、かつ対応するチャネル選択線のそれにも等しくなるようにすることが可能である。
【００５２】
１つの実装例では、この３次元のデータランダム化は、各々のチャネル選択線の第１のワード線を、隣接するチャネル選択線の第１のワード線をスクランブルするために用いられたスクランブリングシーケンスと比較して循環シフトされた初期スクランブリングシーケンスでスクランブルすることによって実装される。例えば、「１」のシフトを利用すると、次の結果となる：ＣＳＬ０のＷＬ０が初期スクランブリングシーケンスでスクランブルされ、ＣＳＬ１のＷＬ０が、１だけシフトされたＣＳＬ０の初期スクランブリングシーケンスでスクランブルされ、ＣＳＬ２のＷＬ０が、２だけシフトされたＣＳＬ０の初期スクランブリングシーケンスでスクランブルされる、などとなる。チャネル選択線の各々の内部で、データは上述したようにスクランブルされる。
【００５３】
これが、３次元でのデータランダム化を保証する。記憶デバイスが４つのメモリ状態を持つＭＬＣデバイスのとき、この方式は、ワード線方向のビットの２５％が４つのセル状態の各々を取り、ビット線方向のビットの２５％が、４つのセル状態の各々を取り、およびチャネル選択線のビットの２５％が、４つのセル状態の各々を取ることを保証する。
【００５４】
図６は、データを複数次元でランダム化する例示の動作６００を示す。生成動作６０２は、Ｎビットの数に対してｍシーケンスを生成する。記憶動作６０４は、ｍシーケンスをメモリコントローラのハードウエアレジスタに記憶する。
【００５５】
メモリコントローラに書き込み動作を実施することを命令する書き込みコマンドを受信すると、スクランブリング動作６０６は、メモリ配列の第１の行にアドレス指定されたデータをスクランブルする。１つの実装例では、スクランブリング動作６０６は、生成されたｍシーケンスとメモリ配列の第１の行にアドレス指定されたデータとの間でのビット毎のＸＯＲを計算することによって実施される。書き込み動作６０８は、スクランブルされたデータをデータ配列に書き込む。
【００５６】
シフト動作６１０は、ｍシーケンスを循環シフトさせる。１つの実装例では、このシフトは、１桁シフトである。他の実装例では、この循環シフトが、１桁を超える。別のスクランブリング動作６１２は、循環シフトされたｍシーケンスを用いて、最新に書き込みされた行（例えば、第１の行）に隣接するデータ配列の次の行にアドレス指定されたデータをスクランブルする。１つの実装例では、スクランブリング動作６１２は、シフトされたｍシーケンスとデータ配列の次の行にアドレス指定されたデータとの間でビット毎のＸＯＲを計算することによって実施される。書き込み動作６１４は、スクランブルされたデータをデータ配列に書き込む。
【００５７】
決定動作６１６は、データ配列のさらなる行が書き込み動作によってまだ変更されていないかどうか決定する。１つ以上の行が変更されていない場合、動作６１０〜６１４は繰り返され、ｍシーケンスをシフトし、データをスクランブルし、行毎にデータを書き込み、最後に書き込み動作が完了して、終了動作６１８が書き込み動作を終了させる。
【００５８】
データ配列が３次元データブロックの一部であれば、他のレベルのブロック（例えば、他のチャネル選択線）中のデータは、同じまたは類似の様式でランダム化され、スクランブリングシーケンスに循環シフトを適用して、データブロック中の全てセルがランダム化されるまで、連続する各々の行をランダム化する。
【００５９】
本明細書に説明する本発明の実装例は、１つ以上のコンピュータシステムで論理ステップとして実装される。本発明の論理演算は、（１）１つ以上のコンピュータシステム中で実行されるプロセッサで実装されるステップのシーケンスとして、および（２）１つ以上のコンピュータシステム内の相互接続された機械または回路モジュールとして実装される。この実装は、本発明を実装するコンピュータシステムの性能要件によって異なる選択の問題である。したがって、本明細書に説明する本発明の実施形態を形成する論理演算は、動作、ステップ、目的、またはモジュールと様々に呼ばれる。さらにその上、論理演算は、別様に明示的に請求されない限り、または特定の順序が請求の範囲の語句によって本質的に必要とされない限り、所望次第で加算および省略して、いかなる順序でも実施され得ることを理解すべきである。
【００６０】
上記の明細、例、およびデータは、本発明の例示の実施形態の構造および用法を完全に説明するものである。本発明の多くの実施形態は本発明の精神および範囲から逸脱することなく実現可能であるため、本発明は以降に添付される請求の範囲に存在する。さらにその上、異なる実施形態の構造的特徴は、記載される特許請求の範囲から逸脱することなくさらに別の実施形態において組み合わされ得る。
【図１】
0005980274.tif 000002
【図２】
0005980274.tif 000003
【図３】
0005980274.tif 000004
【図４】
0005980274.tif 000005
【図５】
0005980274.tif 000006
【図６】
0005980274.tif 000007