(57)【要約】      （修正有）【課題】不揮発性メモリの適応型エンデュランス・コーディング方法及びシステムを提供する。【解決手段】適応型エンデュランス・コーディングは、書き込みデータ及び書き込みアドレスを受信するステップを含むデータ記憶方法を含む。圧縮アルゴリズムが書き込みデータに適用されて圧縮データが生成される。エンデュランス・コードが圧縮データに適用されてコードワードが生成される。エンデュランス・コードは、圧縮を書き込みデータに適用することによって節約されたスペースの量に応じて選択され適用される。コードワードは、書き込みアドレスに書き込まれる。【選択図】図２
2010262640.tif 000002
【特許請求の範囲】
【請求項１】
データ記憶方法であって、
書き込みデータ及び書き込みアドレスを受信するステップと、
圧縮アルゴリズムを前記書き込みデータに適用して圧縮データを生成するステップと、
前記圧縮を前記書き込みデータに適用することによって節約されたスペースの量に応じて選択され適用されるエンデュランス・コードを前記圧縮データに適用してコードワードを得るステップと、
前記コードワードを前記書き込みアドレスに書き込むステップと、
を含む方法。
【請求項２】
前記コードワードを書き込むステップの前に、エラー修正コード（ＥＣＣ）ビットを前記コードワードに追加するステップを更に含む、請求項１に記載の方法。
【請求項３】
前記コードワードに追加される前記ＥＣＣビットの数は、前記圧縮を前記書き込みデータに適用することによって節約されたスペースの量に対応する、請求項２に記載の方法。
【請求項４】
前記コードワードに追加される前記ＥＣＣビットの数は、前記圧縮を前記書き込みデータに適用することによって節約されたスペースの量に応じて、デフォルト数のＥＣＣビット及び可変数のＥＣＣビットを含む、請求項２に記載の方法。
【請求項５】
前記コードワード内の前記ＥＣＣビットの位置は変化する、請求項２に記載の方法。
【請求項６】
前記書き込みは、前記コードワードが前記書き込みアドレスに書き込まれたときに、書き込み速度の増加、電力レベルの低下、及び損耗レベルの低下のうちの少なくとも１つが達成されるように、前記コードワードに追加されるＥＣＣビットの数に応じてプログラムされる、請求項２に記載の方法。
【請求項７】
前記書き込みアドレスに関するメタデータを生成するステップを更に含み、前記メタデータは、前記書き込みアドレスに書き込まれる前記コードワードを復号化する読み取り動作で利用される、請求項１に記載の方法。
【請求項８】
前記メタデータをテーブルに格納するステップを更に含む、請求項７に記載の方法。
【請求項９】
前記コードワードを読み取るステップと、
前記コードワードの分析を実行するステップと、
前記分析に応じて前記エンデュランス・コードを識別するステップと、
識別された前記エンデュランス・コードに関するデコーダを使用して前記コードワードを復号化するステップと、
復号化された前記コードワードを解凍して前記書き込みデータを生成するステップと、
を更に含む、請求項１に記載の方法。
【請求項１０】
前記圧縮を適用するステップと、前記エンデュランス・コーディングを適用するステップとは、単一の符号化関数を使用して共同的に実行される、請求項１に記載の方法。
【請求項１１】
システムであって、
書き込みデータ及び書き込みアドレスを受信する受信器と、
圧縮アルゴリズムを前記書き込みデータに適用して圧縮データを生成するデータ圧縮プログラムと、
前記圧縮を前記書き込みデータに適用することによって節約されたスペースの量に応じて選択され適用されるエンデュランス・コードを前記圧縮データに適用してコードワードを得るエンデュランス・エンコーダと、
前記コードワードを前記書き込みアドレスに書き込むメモリ書き込み装置と、
を備えるシステム。
【請求項１２】
前記コードワードが前記メモリ書き込み装置によって書き込まれる前に、エラー修正コード（ＥＣＣ）ビットを前記コードワードに追加するエラー訂正エンコーダを更に備える、請求項１１に記載のシステム。
【請求項１３】
前記コードワード内の前記ＥＣＣビットの位置は変化する、請求項１２に記載のシステム。
【請求項１４】
メモリ・アクセス方法であって、
コードワードをメモリ・アドレスから検索するステップと、
前記コードワードとメタデータ行列との乗算を実行して、データ位置指定を含む前記コードワードに関するメタデータを復元するステップと、
前記メタデータに応じて前記コードワード内のデータを識別するステップと、
前記データを読み取りデータとして出力するステップと、
を含む方法。
【請求項１５】
前記コードワードは、ＥＣＣビットを更に含み、前記方法は、前記乗算を実行するステップの前に、前記コードワード内のＥＣＣビットの数に対応するパリティ行列で指定されるＥＣＣコードを実施するように設計されたＥＣＣデコーダを前記コードワードに適用するステップを更に含む、請求項１４に記載の方法。
【請求項１６】
前記コードワード内の前記ＥＣＣビットの数は可変である、請求項１５に記載の方法。
【請求項１７】
前記コードワードは、可変数のＥＣＣビット及び未知数のＥＣＣビットを更に含み、前記方法は、１つ又は複数のＥＣＣデコーダを前記コードワードに適用して、前記コードワード内のＥＣＣビットの数に対応するＥＣＣデコーダを配置するステップを更に含む、請求項１４に記載の方法。
【請求項１８】
前記コードワードを生成するステップを更に含み、前記生成するステップは、
前記データ及び前記メタデータを受信するステップと、
前記メタデータ内の前記データ位置指定に従って、前記メタデータ行列と前記コードワードとの積が前記メタデータと等しくなるように、前記データを前記コードワード内に配置するステップと、
前記コードワードを前記メモリ・アドレスに書き込むステップと、
を含む、請求項１４に記載の方法。
【請求項１９】
システムであって、
コードワードをメモリ・アドレスから検索するメモリ読み取り装置と、
前記コードワードとメタデータ行列との乗算を実行して、データ位置指定を含む前記コードワードに関するメタデータを復元するメタデータ・コンピュータと、
前記メタデータに応じて前記コードワード内のデータを識別するメタデータ・インタープリタと、
前記データを読み取りデータとして出力する送信器と、
を備えるシステム。
【請求項２０】
前記コードワードは、ＥＣＣビットを更に含み、前記システムは、前記乗算を実行する前に、前記コードワード内のＥＣＣビットの数に対応するパリティ行列で指定されるＥＣＣコードを実施するように設計されたＥＣＣコードを前記コードワードに適用するＥＣＣデコーダを更に備える、請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にコンピュータ・メモリに関するものであり、より詳細には不揮発性メモリの適応型エンデュランス・コーディング（adaptive endurancecoding）に関するものである。
【背景技術】
【０００２】
相変化メモリ（Phase-Change Memory : PCM）及びフラッシュ・メモリは、エンデュランス（endurance）が限られた（「寿命が限られた」とも言われる）不揮発性メモリの例である。このようなメモリは、メモリ・セルが複数回の書き込みサイクル（ＰＣＭではＲＥＳＥＴサイクル、フラッシュ・メモリではプログラム／消去サイクル）を経ることで損耗し、情報を信頼性のある形で記憶することができなくなる点で、エンデュランスが限られている。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
メモリへのパターンの書き込みがセルの損耗を低減するように行われるエンデュランス・コーディングと呼ばれる技法を利用することにより、寿命が限られたメモリの寿命を延長することができる。現行のエンデュランス・コーディング方式の欠点は、データの肥大化を招く点、及びエンデュランス・コーディングのパラメータをデータ圧縮率及びメモリ・ページ長に適合させる機構を備えていない点である。このことは、データ・ワード毎に異なるページ長を使用すること、あるいはエンデュランスの向上を犠牲にすることが必要となることを意味する。
【０００４】
他の関連する実装環境としては、メモリ書き込み毎、又はメモリの寿命期間中、あるいはその両方におけるデータ記憶量を増加させることが可能な追記型（write-once）メモリ及び書き込み効率の良い（write-efficient）メモリの書き込み方法が挙げられる。これらの方法にも、エンデュランス・コードを様々なデータに応じて適応的に選択することができないという欠点がある。
【課題を解決するための手段】
【０００５】
例示的な一実施形態は、書き込みデータ及び書き込みアドレスを受信するステップを含むデータ記憶方法である。圧縮アルゴリズムが前記書き込みデータに適用され、それによって圧縮データが生成される。エンデュランス・コードが前記圧縮データに適用され、それによってコードワードが生成される。前記エンデュランス・コードは、前記圧縮を前記書き込みデータに適用することによって節約されたスペースの量に応じて選択され適用される。前記コードワードは、前記書き込みアドレスに書き込まれる。
【０００６】
別の実施形態は、書き込みデータ及び書き込みアドレスを受信する受信器を含むシステムである。前記システムは、圧縮アルゴリズムを前記書き込みデータに適用して圧縮データを生成するデータ圧縮プログラム（data compressor）も含む。前記システムは更に、前記圧縮を前記書き込みデータに適用することによって節約されたスペースの量に応じて選択され適用されるエンデュランス・コードを前記圧縮データに適用するエンデュランス・エンコーダを含む。前記エンデュランス・エンコーダからの出力は、コードワードである。前記システムは更に、前記コードワードを前記書き込みアドレスに書き込むメモリ書き込み装置（memory writer）を含む。
【０００７】
別の例示的な実施形態は、コードワードをメモリ・アドレスから検索するステップを含むメモリ・アクセス方法である。前記コードワードとメタデータ行列との乗算を実行して、前記コードワードに関するメタデータが復元される。前記メタデータは、データ位置指定を含む。前記メタデータに応じて前記コードワード内のデータが識別され、前記データは、読み取りデータとして出力される。
【０００８】
他の例示的な実施形態は、コードワードをメモリ・アドレスから検索するメモリ読み取り装置（memory reader）を含むシステムである。前記システムは、前記コードワードとメタデータ行列との乗算を実行して、データ位置指定を含む前記コードワードに関するメタデータを復元するメタデータ・コンピュータも含む。前記システムは更に、前記メタデータに応じて前記コードワード内のデータを識別するメタデータ・インタープリタと、前記データを読み取りデータとして出力する送信器と、を含む。
【０００９】
本発明の実施形態に係る各技法を利用すれば追加的な特徴及び利点が理解されるだろう。本明細書では他の実施形態及び態様についても説明するが、これらも添付の特許請求範囲に記載される発明の一部と見なされる。本発明の利点及び特徴は、以下の説明及び添付図面を参照すればより良く理解されるだろう。
【００１０】
本発明と見なされる主題は、特許請求範囲の各請求項に個別具体的に記載されている。本発明の上記及び他の特徴及び利点は、以下の詳細な説明を添付図面と併せて読めば明らかとなるだろう。
【図面の簡単な説明】
【００１１】
【図１】例示的な一実施形態によって実施され得るデータ書き込みプロセスを示す図である。
【図２】例示的な一実施形態によって実施され得るデータ書き込み用メモリ・コントローラのブロック図である。
【図３】例示的な一実施形態によって実施され得るエラー訂正エンコーダのブロック図である。
【図４】例示的な一実施形態によって実施され得るデータ読み取りプロセスを示す図である。
【図５】例示的な一実施形態によって実施され得るデータ読み取り用メモリ・コントローラのブロック図である。
【図６】ＥＣＣの検査位置をアドレス書き込み毎に変更するように実施され得る例示的な一実施形態を示す図である。
【図７】例示的な一実施形態によって実施され得るデータ書き込みシステムのブロック図である。
【図８】例示的な一実施形態によって実施され得るエンコーダを示す図である。
【図９】例示的な一実施形態によって実施され得るデータ読み取りシステムのブロック図である。
【図１０】例示的な一実施形態によって実施され得る読み取りプロセスを示す図である。
【図１１】例示的な一実施形態によって実施され得る共同（ｊｏｉｎｔ）圧縮／展開を実行するプロセスを示す図である。
【図１２】例示的な一実施形態によって実施され得る共同圧縮／エンデュランス・コーディングを示す図である。
【発明を実施するための形態】
【００１２】
本発明の例示的な一実施形態は、メモリに書き込まれるデータが、メモリ・セルの損耗を低減することによってメモリ寿命を延長する形に変換される、寿命が限られたメモリ向けの適応型エンデュランス・コーディング・システム及び方法を含む。例示的な一実施形態において、書き込みデータはエラー耐性を備える（即ち、記憶後の記憶情報にエラーが生じた場合もデータが復元可能となる）。
【００１３】
例示的な一実施形態は、エンデュランスが改善されたデータを不揮発性メモリ・デバイス上に書き込むシステム及び方法を含む。エンデュランス・コーディング及びエラー耐性と共に無損失データ圧縮を利用して、エンデュランス・コーディング・パラメータがデータの特性及びメモリ・ページ・サイズのようなメモリ・パラメータに適合される。それ故、書き込まれるデータの圧縮率が非常に高い場合には、高いエンデュランス利得が達成される可能性がある。一方、データの圧縮率がそれほど高くない場合には、エンデュランス・コードは、符号化データがメモリ・ページ内に確実に収まるように選択される。そのため、例示的な一実施形態を用いると、生成されるデータが常に所与のメモリ・ページ内に収まることを保証しながらエンデュランス・コーディングの最大限の利益を得ることが可能となる。これによりメモリ・ブックキーピングが大幅に簡略化され、そのためメモリ・アクセス性能が改善される。更に、例示的な一実施形態は、データがメモリから正しく復元され得ることを保証しながらエンデュランス利得が保持されるようなエラー耐性を備える。
【００１４】
図１は、例示的な一実施形態によって実施され得る適応型エンデュランス・コーディングを使用したデータ書き込みプロセスを示す。ブロック１０２で、書き込みデータ及び書き込みアドレスが（例えばメモリ・コントローラにおいて）受信される。例示的な一実施形態において、書き込みアドレスはページ・アドレスであり、書き込みデータはページ・データ（例えば４Ｋビット）である。ブロック１０４で、書き込みデータが圧縮されて圧縮データが生成される。次にブロック１０６で、エンデュランス・コードが圧縮データに適用されて圧縮エンデュランス符号化データ（compressed endurancecoded data）が生成される。適用されるエンデュランス・コードは、圧縮データ及びターゲット・メモリ・デバイス（単数又は複数）の特性に基づいて選択される。ブロック１０８で、書き込みデータ、圧縮データ、及び圧縮エンデュランス符号化データのうちの１つが選択され、ブロック１１０で、選択されたデータがＥＣＣ符号化されてコードワードが生成される。ブロック１１２で、コードワードは、メモリの書き込みアドレスに書き込まれる。
【００１５】
図２は、例示的な一実施形態によって実施され得るデータ書き込み用メモリ・コントローラのブロック図である。図２に示されるメモリ・コントローラ２０２は、不揮発性メモリへの書き込みをメモリ・エンデュランスが改善される形で行うために、データ圧縮とエンデュランス・コーディングとを組み合わせる。図２に示される例示的なメモリ・コントローラ２０２は、本明細書ではＲＡＭコード・テーブル２０４と呼ばれるコード・テーブルをランダム・アクセス・メモリ（ＲＡＭ）内に含み、ＲＡＭコード・テーブル２０４には、不揮発性メモリ２０６（例えばメモリ・デバイス上）に記憶されるデータ単位毎のエンデュランス・コード／圧縮ステータス情報が格納される。図２に示される例示的なＲＡＭコード・テーブル２０４内のステータス情報は、（１）ページ・ステータスが「非符号化（un‐coded）」（「Ｕ」）、「圧縮（compressed）」（「Ｃ」）、「圧縮エンデュランス符号化（compressed andendurance coded）」（「Ｅ」）のうちのどれに該当するかを示すインジケーションと、（２）現在のページ・データが使用可能なエラー修正コード・セットのうちのどれを使用して符号化されたかを示すＥＣＣコード索引（ECC code index）と、（３）該当する場合は、ページ・データがどのエンデュランス・コードを使用して符号化されたかを示すエンデュランス・コード索引（endurance code index）と、を含む。ＲＡＭコード・テーブル２０４に格納される情報は、本明細書では「メタデータ」と呼ばれる。
【００１６】
図２に示されるメモリ・コントローラ２０２に対する入力は、書き込まれるページのアドレスと、そのページに書き込まれるデータとを含む。例示的な一実施形態において、これらの入力は、メモリ・コントローラ２０２上（又は他の位置）に配置された受信器を介して受信される。この受信器は、各入力又は各入力が配置される記憶位置（例えばレジスタ）あるいはその両方を受信するハードウェアを含めた様々な形で実装することができる。ページ・アドレスは、エンデュランス・コーディング・ステータス情報を検索するためにＲＡＭコード・テーブル２０４の索引付けを行うのに使用される。ページ・データ（本明細書では「書き込みデータ」とも呼ばれる）は、データ圧縮プログラム２０８に入力され、データ圧縮プログラム２０８は、無損失データ圧縮アルゴリズムを適用して書き込みデータを圧縮する。実装可能な無損失データ圧縮アルゴリズムの例としては、必ずしもそれだけに限定されるわけではないが、算術符号化、ハフマン（Huffman）符号化、レンペル・ジフ（Lempel-Ziv）符号化、及びＢＷＴ符号化が挙げられる。また、書き込みデータの特性（統計値等）が既知のアプリオリ（a-priori）である又は予測可能である場合は、その知識をデータ圧縮効率の向上に利用するように特殊化された任意の無損失符号化アルゴリズムを適用することができる。
【００１７】
データ圧縮プログラム２０８から出力される圧縮ワードは、エンデュランス・エンコーダ２１０に入力される。エンデュランス・エンコーダ２１０は、複数のエンデュランス・コードのうちの１つを選択するために、圧縮ワードの特定の特性と共に、場合によっては使用されるエラー修正コード（error correction code :ECC）及び以前のページ・コンテンツに関する情報も使用する。例示的な一実施形態において、不揮発性メモリ２０６は、バイナリＮＡＮＤフラッシュのような「追記型」メモリであり、エンデュランス・エンコーダ２１０は、２レベルのワンショット型有界重みバイナリ・コーダ（one-shot boundedweight binary coder）である。即ち、エンデュランス・エンコーダ２１０は、書き込みが消去ページに対して行われると仮定し、固定数未満の非消去シンボルを有する出力ワードを生成する。この場合、エンデュランス・エンコーダ２１０は、エンデュランス符号化ワードが不揮発性メモリ２０６の固定ページ長に収まることを保証しながら、最大限のエンデュランス利得を得るために、圧縮データ・ワードの長さに基づいて有界重み制約（bounded weightconstraint）を選択する。それ故、オリジナル・データの圧縮率が非常に高く、且つ圧縮ワード長が小さい場合には、小さい有界重み制約が得られる可能性があり、それによって高いエンデュランス利得を得ることが可能となる。一方、ページの圧縮率がそれほど高くない場合には、大きい有界重み制約を使用してエンデュランス符号化ワードがメモリ・ページ内に確実に収まるようにすることが可能となる。更に、エンデュランス・エンコーダ２１０は、ＥＣＣコード・レートの知識を利用しながら強制すべき有界重みを選択することができ、これを使用して、例えば不揮発性メモリ２０６に書き込まれるエラー符号化ワードが所与の重み制約を満足することを保証することができる。
【００１８】
一代替実施形態において、不揮発性メモリ２０６は、マルチ・レベル相変化メモリのような「再書き込み可能（rewritable）」メモリであり、エンデュランス・エンコーダ２１０は、マルチ・レベル・ウォーターフォール・コードを使用する。エンデュランス・エンコーダによって選択されるウォーターフォール・コードは、データ圧縮プログラム２０８の出力によって示されるデータ圧縮率の関数である。エンデュランス・エンコーダは、複数のコードのうちの１つがデータ圧縮プログラム２０８の出力に基づいてエンデュランス・コーディング用に選択される追記型メモリ及び書き込み効率の良いメモリ向けのコード等、当業界で知られる他のコードを利用することもできる。
【００１９】
エンデュランス・コードが選択されると、そのコードを使用して、データ圧縮プログラム２０８によって生成された圧縮ワードに対応する出力コードワードが生成される。別の例示的な実施形態において、不揮発性メモリ２０６は、追記型又は再書き込み可能メモリ（ＰＣＭ等）であり、エンデュランス・エンコーダ２１０は、エンデュランス・コードの選択ならびに出力コードワードの生成のために、追加的に不揮発性メモリ２０６の以前のページ・コンテンツの知識も使用する。この以前のコンテンツは、メモリ読み取りプロセス２１８によって読み取られ、エンデュランス・エンコーダは、エンデュランス符号化コードワードを生成するためにプロセス２１８の出力を使用する。使用されるエンデュランス・コードの索引は、ＲＡＭコード・テーブル２０４に入力される。
【００２０】
図２に示されるように、エンデュランス・エンコーダ２１０の出力、データ圧縮プログラム２０８の出力、及びオリジナル書き込みデータは、データ・セレクタ（data selector）２１２に入力される。データ・セレクタ２１２は、これらの３つのうちのどれを不揮発性メモリ２０６に書き込むべきかを、例えばワード長や圧縮及びエンデュランス・コーディングによって得られる利得等に基づいて決定する。例示的な一代替実施形態において、この決定は、データ圧縮プログラム２０８及びエンデュランス・エンコーダ２１０によって順次行われ、データ・セレクタ２１２は必要とされない。例えば、データ圧縮プログラム２０８の出力の長さが入力ワードの長さ以上である場合には、データ圧縮プログラム２０８は単純に、入力ワードをエンデュランス・エンコーダ２１０に出力する。同様に、エンデュランス・エンコーダ２１０によって生成されたワードがページ内に収まらないほど長い場合、又は他の望ましくない特性を有する場合には、エンデュランス・エンコーダ２１０は単純に、圧縮／オリジナル書き込みデータ・ワードをエラー訂正エンコーダ２１４に直接出力する。上記のいずれの実施形態でも、当該ページのコーディング・ステータスは、格納のためにＲＡＭコード・テーブル２０４に送られる。その後、データ・セレクタ２１２の出力は、エラー訂正エンコーダ２１４に送られ、エラー訂正エンコーダ２１４は、複数のＥＣＣのうちの１つを選択してデータを符号化する。
【００２１】
図３は、例示的な一実施形態によって実施され得るエラー訂正エンコーダ２１４のブロック図である。図３に示されるように、入力データはまず、システマティック（systematic）ＥＣＣエンコーダ３０２を使用したシステマティック・コードを使用して符号化される。次に、システマティックＥＣＣエンコーダ３０２の出力が索引付きパーミュータ（indexed permuter）３０４に入力されて、複数の所定の順列のうちの１つを使用して符号化データが順序変更（permute）される。選択される順列は、ＲＡＭコード・テーブル２０４に格納されたＥＣＣコード索引に基づくものである。例示的な諸代替実施形態では、入力データが生成されたコードワードに収容され、パリティ・シンボル位置がコード索引に応じて異なるような複数のシステマティック・コードを使用することができる。これらの例示的な諸実施形態のいずれかを使用する利点は、パリティ・ビットに起因する損耗がセル位置全体に拡散され、それによって損耗が均一化され、メモリ・エンデュランスが改善されることである。使用されるＥＣＣコードの索引は、格納のためにＲＡＭコード・テーブル２０４に送られ、コードワードは、不揮発性メモリ２０６（例えばメモリ・デバイス）への書き込みのためにメモリ書き込みプロセスに送られる。
【００２２】
例示的な一実施形態において、エラー訂正エンコーダ２１４によって使用されるＥＣＣのレートは、データ圧縮プログラム２０８の出力によって示されるデータ圧縮率に依存する。例示的な一実施形態では、常に最小限の（又はデフォルトの）エラー訂正能力（例えばＥＣＣパリティ・ビット数で測定される）が使用される。圧縮データの長さが事前定義された閾値を下回る場合は、エラー訂正能力を高めるためにＥＣＣパリティ・ビット数が増加される。それ故、本実施形態では、エンデュランス・コードの選択とＥＣＣコードの選択は、いずれもデータ圧縮率に基づいて行われる。前述のとおり、エンデュランス・エンコーダ２１０によるエンデュランス・コードの選択は、使用されるＥＣＣコードの知識を利用して行われる。これにより、エラー訂正エンコーダ２１４によって生成されるコードワードがメモリに書き込まれる正しい長さとなることが保証される。一代替実施形態では、複数のＥＣＣ保護レベル（無保護を含む）が可能であり、適切なレベルは、圧縮データ長と複数の閾値との比較に基づいて選択される。
【００２３】
再び図２を参照すると、エラー訂正エンコーダ２１４によって生成されたコードワードは、不揮発性メモリ２０６への書き込みのためにメモリ書き込みプロセス２１６に送られる。例示的な一実施形態において、不揮発性メモリ２０６は、メモリ書き込みプロセス２１６が書き込み速度、書き込み電力、書き込み損耗のような属性を変更することが可能となる１つ又は複数のプログラム可能なパラメータを有するようなメモリである。例えば、不揮発性メモリ２０６は、セル書き込み毎に複数の反復を使用し、反復数がプログラム可能なＰＣＭとすることができる。この場合、使用される反復数が大きくなるほど書き込みプロセスの精度が高まるが、電力消費及び書き込みレイテンシも高まることになる。別の例として、不揮発性メモリ２０６は、浮遊ゲートの電圧レベル配置がプログラム可能なフラッシュ・メモリとすることができる。この場合、書き込み速度、書き込み電力、及び書き込み損耗は、各レベル間の間隔を狭めることによって低減することができるが、その代償として浮遊ゲートの電荷摂動によるエラー確率が増加する可能性がある。本実施形態において、エラー訂正能力は、データ圧縮プログラム２０８の出力によって示されるデータ圧縮率に基づいてエラー訂正エンコーダ２１４によって選択され、書き込みプロセスのパラメータは、利用されるエラー訂正能力に基づいて選択される。それ故、例えばデータの圧縮率が高い場合は、書き込み電力の低減、書き込みレイテンシの短縮、又は書き込み損耗の低減、あるいはそれらのすべてが書き込み精度を犠牲にして実現されるような書き込みパラメータの選択が可能となる、高いエラー訂正能力を利用することができる。この高いエラー訂正能力により、低い書き込み精度でも十分に信頼性のあるデータ記憶が保証される。
【００２４】
図２に示されるＲＡＭコード・テーブル２０４を用いると、エンデュランス・コーディングを機能させるのに必要な情報への迅速なアクセスが可能となる。ＲＡＭコード・テーブル２０４内の情報が（例えば停電等によって）失われないことを保証するために、ＲＡＭコード・テーブル２０４は、不揮発性メモリ２０６（又は他のメモリ）に定期的に再書き込みされる。このプロセス中に、ＲＡＭコード・テーブル２０４内の情報は、エラー訂正エンコーダ／デコーダ２２２による保護のためにＥＣＣ符号化され、その後書き込みプロセス２２０によって不揮発性メモリ２０６に書き込まれる。電力が失われた場合、ＲＡＭコード・テーブル２０４は、読み取りプロセス２２０及びエラー訂正デコーダ２２２によってメモリからリロードされ得る。例示的な一代替実施形態において、ＲＡＭコード・テーブル２０４は、ステータス情報のキャッシュとして働き、任意の所与の時点では、不揮発性メモリ・ページの一部分のみに関する情報がＲＡＭコード・テーブル２０４に格納される。ページ・アクセスが行われると、それらの情報はＲＡＭコード・テーブル２０４内にシフトされ、あるページが所与の期間にわたって使用されない場合は、情報がＲＡＭコード・テーブル２０４外にシフトされる。例示的な諸実施形態では、当業界で知られる他のキャッシュ技法を使用して情報をＲＡＭコード・テーブル２０４の内外にシフトすることができる。別の実施形態において、ＲＡＭコード・テーブル２０４（キャッシュとして使用されることも使用されないこともある）は、データが記憶される不揮発性メモリ・デバイスよりもエンデュランスが高い第２の不揮発性メモリ・デバイス上に記憶される。
【００２５】
圧縮データ・ワードの特性に基づくエンデュランス・コードの選択は、それによってエンデュランス利得がページ圧縮に適合可能となり、エンデュランス・コーディングの最大限の利益を得ることが保証され得る点で有利であることに留意していただきたい。同時に、生成されるデータがメモリ・ページ長の変更を必要とせずに常に所与のメモリ・ページ内に収まることを保証することにより、メモリ・ブックキーピングが大幅に簡略化され、そのためメモリ・アクセス性能が改善される。
【００２６】
図４は、例示的な一実施形態によって実施され得る適応型エンデュランス・コーディングを使用したデータ読み取りプロセスを示す。ブロック４０２で、読み取りアドレスが（例えばメモリ・コントローラにおいて）受信され、ブロック４０４で、その読み取りアドレスに記憶されるコードワードが不揮発性メモリ２０６から検索される。ブロック４０６で、ＥＣＣデコーダが当該コードワードに適用される。ブロック４０８で、読み取りアドレスによって参照されるページ（又は他のメモリ単位）に対応するメタデータの検索又は導出あるいはその両方が行われる。メタデータは、メモリ・ページに記憶されるデータのステータスを記述する。例示的な一実施形態において、ステータスは、「非符号化（un-coded）」、「圧縮（compressed）」、又は「圧縮エンデュランス符号化（compressed andendurance coded）」である。また、メタデータは、メモリ・ページ内のデータに関して使用されるエンデュランス・コーディング及びＥＣＣコーディングを記述することもできる。ページ・ステータスが「非符号化」である場合には、ＥＣＣ復号化データは、ブロック４１０で読み取りデータとして出力される。ページ・ステータスが「圧縮」である場合には、ＥＣＣ復号化データは、ブロック４１０で解凍され、読み取りデータとして出力される。ページ・ステータスが「圧縮エンデュランス符号化」である場合には、ＥＣＣ復号化データは、ブロック４１０でエンデュランス・コード・デコーダを介して送出され、その後解凍され、読み取りデータとして出力される。
【００２７】
図５は、例示的な一実施形態によって実施され得るデータ読み取り用メモリ・コントローラのブロック図である。読み取りアドレスが与えられた場合は、必要に応じて適切なページ・ステータス情報（例えばメタデータ）がＲＡＭコード・テーブル２０４にロードされる。例示的な一実施形態において、この処理は、読み取りプロセス５１４及びエラー訂正デコーダ５１２によって実行される。その後、データは、メモリ読み取りプロセス５０４によって不揮発性メモリ２０６から読み取られる。不揮発性メモリ２０６から読み取られたコードワードは、ＲＡＭコード・テーブル２０４内のページ・アドレス（即ち読み取りアドレス）に対応したＥＣＣコード索引に対応する復号化プロセスを使用するエラー訂正デコーダ５０６に入力される。エラー訂正デコーダ５０６の出力は、ページ・ステータス（Ｅ／Ｃ／Ｕ）に応じて適切に経路指定される。ステータスが「Ｕ」（非符号化）である場合には、エラー訂正デコーダ５０６の出力は、メモリ・コントローラ５０２から直接読み取りデータとして出力される。ページ・ステータスが「Ｃ」（圧縮）である場合には、エラー訂正デコーダ５０６の出力は、データ解凍プログラム（data de‐compressor）５０８に経路指定され、そこで解凍された出力は、メモリ・コントローラ５０２から読み取りデータとして出力される。最後に、ページの読み取りステータスが「Ｅ」（エンデュランス符号化）である場合には、データは、エンデュランス・デコーダ５１０を経てデータ解凍プログラム５０８に経路指定され、最終的にメモリ・コントローラ５０２から読み取りデータとして出力される。例示的な一実施形態において、出力は、メモリ・コントローラ５０２上（又は他の位置）に配置された送信器によって実行される。送信器は、各出力、又は各出力が記憶される記憶位置若しくはレジスタ、あるいはその両方を送信するハードウェアを含めた様々な形で実装することができる。
【００２８】
図２及び図５に示される要素の一部又は全部を別の物理位置、例えば、必ずしもそれだけに限定されるわけではないがメモリ・モジュールやメモリ・ハブのような別のメモリ要素に配置することもできることに留意していただきたい。
【００２９】
上述の例示的な実施形態では、ページ・ステータス（Ｅ／Ｃ／Ｕ）、及びページから読み取られる情報の正しい変換処理に必要となる他の情報を記述するメモリ・コントローラからアクセス可能なテーブル、即ちＲＡＭコード・テーブル２０４が利用される。この情報及びこのタスクに利用され得る他の情報はすべて、本明細書では「メタデータ」と呼ばれる。場合によっては、上記のコントローラ・テーブルを必ずしも使用せず、その代わりにメタデータをデータと共に直接不揮発性メモリ２０６に記憶する一実施形態を実施することが望ましい。その理由は、コントローラ・テーブルは実装コストが高くなる場合があるからである。この概念の容易な実装を妨げる主な障害は、メタデータを記憶する物理メモリが一般に残りのデータ位置と同じ損耗及びエラー・メカニズムの影響を受け、したがってメタデータを不揮発性メモリ２０６の固定位置に逐語的に記憶することができなくなることである。原理上、エンデュランス・コーディングとエラー訂正コーディングは共にメタデータについても必要とされ、したがって循環論的な問題が生じる。
【００３０】
以下、例示的な一実施形態によって実現され得るこの問題の解決策について説明する。メタデータをベクトルｍで示し、メモリに書き込まれるコードワードをベクトルｖで示す。読み取りプロセス及び書き込みプロセスで共用される事前指定された２つの行列をＨ及びＭと定義する。ここで、Ｈは、システマティック・エラー修正コード及びＭ（本明細書では「メタデータ行列」とも呼ばれる）のパリティ検査行列（本明細書では「パリティ行列」とも呼ばれる）である。基本的な概念は、メタデータｍを事前指定された位置に記憶する代わりに、行列Ｍとベクトルｖとの乗算からメタデータが復元可能となるようなコードワードｖを計算することである。システマティックＥＣＣは、ｖがメモリから正しく復元され得ることを保証する。例示的な一実施形態は、特定のアドレスが複数回書き込まれたときにシステマティックＥＣＣの検査位置（「追加ビット」とも呼ばれる）が循環するという追加的な要件を有し、これによって異なるメモリ・セルの均一な損耗が保証される。
【００３１】
図６は、ＥＣＣの検査位置をアドレス（例えばページ）書き込み毎に変更するように実施され得る例示的な一実施形態を示す。図６に示されるように、あるアドレスに対する第１の書き込み６０２に関するコードワード内のＥＣＣビット（又は検査位置）は、コードワードの最初の３ビットに配置される。このアドレスに対する第２の書き込み６０４に関するコードワード内のＥＣＣビットは、コードワードの第２ビットから第４ビットに配置され、このアドレスに対する第３の書き込み６０６に関するコードワード内のＥＣＣビットは、コードワードの最後の３ビットに配置される。それ故、コードワード内のＥＣＣビットの位置は変化する。
【００３２】
図７は、メタデータを記憶する上でコード・テーブルを使用しない、例示的な一実施形態によって実施され得るデータ書き込みシステムのブロック図である。非圧縮データが圧縮プログラム（compressor）７０２に供給され、圧縮プログラム７０２は、圧縮データと、データの圧縮／展開の有無及びその程度を示す圧縮パラメータと、を生成する。圧縮データ及びパラメータは、エンデュランス・コード・エンコーダ７０４に渡され、エンデュランス・コード・エンコーダ７０４は、選択されたメモリに書き込まれるパターンを使用した場合にコストが最小となるような圧縮データの符号化手法を選択する。このステップは任意選択で、ターゲット・メモリ・アドレスに現在書き込まれているデータに依存する。換言すると、コストは、書き込まれるデータ・パターンにのみ依存することも、書き込まれるデータ・パターンと現在書き込まれているデータ・パターンの両方に依存することもある。
【００３３】
次に、データ・セレクタ７０６を使用して、データを非圧縮で記憶するのか、圧縮して記憶するのか、それとも圧縮エンデュランス符号化して記憶するのかが決定される。更に、この決定と共にエンデュランス・コーディングが利用された場合はそのタイプも記述するメタデータが計算される。このステップの結果、処理対象データ・シンボルは、メタデータと共にメモリに記憶される。
【００３４】
メタデータ及び処理対象データ・シンボルは、ＥＣＣエンコーダ７０８に渡され、ＥＣＣエンコーダ７０８は、ＥＣＣ関数に外部的に渡される所与の位置集合に関する検査シンボルを生成する。特定のメモリ・アドレスに関する所与の位置集合は、先述のとおりアドレスへの書き込みが行われる度に循環する。ＥＣＣエンコーダ７０８による検査シンボルの生成は、各検査シンボルが、行列Ｍとの乗算によって求められたコードワードｖから所望のメタデータｍが得られるように選択されることを保証する。ＥＣＣエンコーディングの結果、即ちコードワードｖは、メモリに出力される。
【００３５】
図８は、例示的な一実施形態によって実施され得るＥＣＣエンコーダ７０８を示す。行列Ｈ及びＭは事前に固定され、行列Ｈは、システマティックＥＣＣのパリティ検査行列である。最初の式８０２は、ＥＣＣエンコーダ７０８からの一般的な期待値を定義するものであり、ここでは、Ｈｖ＝０、即ちｖがパリティ検査行列Ｈによって定義される線形コードのコードワードとなり、且つＭｖ＝ｍ、即ちメタデータｍが乗算Ｍｖによってｖから復元可能となるようなコードワード・ベクトルｖを計算する必要がある。ＥＣＣエンコーダ７０８の他の要件は、コードワードｖにおいて、ベクトルｃで示される検査シンボルが外部指定されたシンボル位置に配置され、そのため、ベクトルｄで示される所与の処理対象データ・シンボルが残りの位置に配置されることである。一例において、この位置集合は、開始位置が選択可能とされ得るコードワード内の連続するシンボル集合である。
【００３６】
図８に示されるように、処理対象データ・シンボルｄと検査シンボルｃとがアセンブルされてコードワードｖが形成される。このアセンブルは、検査シンボルの所望の位置に依存する。図８のブロック８０６では３つの例が与えられている。１つ目の例では、検査シンボルがコードワードの先頭に置かれ、２つ目の例では、検査シンボルがコードワードの２番目のシンボルから開始され、３つ目の例では、検査シンボルがコードワードの末尾に置かれる。
【００３７】
上記の図８には、エンコーダがその式を利用して検査シンボルを計算することが可能となる式８０４も含まれる。上記の各式は、行列Ｂ０，Ｂ１，．．．，Ｂｉ、所望のメタデータｍ、及び所望の処理対象データ・シンボルｄに依存する。かかる行列は、各検査のすべての可能な位置毎に１つずつ存在する。
【００３８】
行列Ｂ０，Ｂ１，．．．，Ｂｉは、事前指定された行列Ｈ及びＭを処理することによって発見することができる。例示的な一実施形態において、この処理は以下のとおりとなる：次式のような行列Ａ０を発見する。
【数１】
2010262640.tif 000003
上式で、Ｉは単位行列を示す。事前乗算の結果の他のセクションはＢ０、即ち、検査シンボルがコードワードｖの始点に配置される場合に望ましい行列となる。同様の手順を経て、Ｂ１（図示）、Ｂ２（図示せず）等が得られる。一般に、各Ｂｉは、以下のような行列Ａｉ、即ち、当該行列に行列
【数２】
2010262640.tif 000004
を乗じ、その結果得られる行列が所望のデータ・シンボル位置に対応する列内に単位行列を含むような行列Ａｉを判定することによって計算することができる。実際の一実装環境では、Ｂ０，Ｂ１，Ｂ２，．．．の必ずしもすべての行列について専用の回路を有することが必要とされるわけではないことに留意していただきたい。例えば、Ｈが巡回コードのパリティ検査行列である場合、Ｂｉは、Ｂ０に対角行列を事前に乗じることによってＢ０から計算することができる。Ｈで定義されるエラー修正コードの各シンボルは、ＧＦ（２ｐ）（ただし、ｐは任意の所望の拡大体の次数）を含む任意のガロア体に由来するものであってよい。
【００３９】
Ａｉが計算されると、検査ビットが次式のように計算される。
【数３】
2010262640.tif 000005
また、コードワードｖは、検査ビット及びデータ・シンボルが図８の式８０６で示されるような所望の位置にくるように、ベクトルｃ及びｄをアセンブルすることによって計算される。コードワードｖは、式８０２が所望の形で成り立つ特性を有する。
【００４０】
図９は、例示的な一実施形態によって実施され得るデータ読み取りシステムのブロック図である。メモリに書き込まれるオリジナル・コードワードは、ベクトルｖで示されるが、本例ではエラー・ベクトルｅによって破損されており、その結果、読み取り時に受け取られるワードはｖ＋ｅとなる。このワードがＥＣＣデコーダ９０２に入力される。ＥＣＣデコーダ９０２は、Ｈ（ｖ＋ｅ）＝Ｈｅとなるようなエラー・パターンｅの発見を試行する。試行が成功（誤訂正がないと仮定）した場合、ＥＣＣデコーダ９０２は、ｖ＋ｅ及びｅからｖを計算し発見する。ＥＣＣデコーダ９０２は、訂正不可能なエラー・ステータスや訂正可能なエラー・ステータス等を記述するエラー修正コード・フラグも生成する。デコードの結果であるｖは、メタデータ計算ブロック９０４に渡され、メタデータ計算ブロック９０４は、メタデータ・ベクトルｍ＝Ｈｖを計算する。メタデータの計算結果であるｍは、メタデータ・インタープリタ・ブロック９０６に渡され、メタデータ・インタープリタ・ブロック９０６は、エンデュランス・コード及び圧縮パラメータならびに処理対象データ・シンボルの位置が復元されるように当該メタデータを変換処理する。例示的な一実施形態において、エンデュランス・コード・パラメータは、該当する場合は、データの符号化に使用されたエンデュランス・コードの記述を含む。例示的な一実施形態において、圧縮パラメータは、データの圧縮の有無に関する記述を含む。処理対象データ・シンボルは、処理対象データ・シンボルの位置に関する情報と共にｖから復元される。次に、その結果は、エンデュランス・コード・デコーダ９０８に供給され、その後解凍プログラム（de-compressor）９１０に供給され、その結果所望のデータが得られる。
【００４１】
メタデータを記憶する上でコード・テーブルを使用しない、エラーを含まないメモリに対して書き込みを行うシステムの例示的な一実施形態において、書き込みエンコーダに対する入力は、メモリに記憶されるデータと、メモリに書き込まれるコードワード内のデータの所望の位置（メタデータに含めることができ、本明細書では「データ位置指定（data locationspecification）」と呼ばれる）と、圧縮エンデュランス・コード・パラメータ（compression andendurance code parameter）を含む追加的なメタデータと、を含む。書き込みエンコーダの出力は、データ位置指定と矛盾しないように配置されたデータ及び追加的なシンボルから構成されるコードワード・ベクトル、即ち、データ・シンボルが所望のシンボル位置に配置されるコードワードである。書き込みエンコーダは、データ位置指定を満足するコードワードであって、そのコードワードに事前指定された行列Ｍを乗じたときにメタデータが得られるようなコードワードを発見する。
【００４２】
先述の書き込みエンコーダの実施形態によって書き込まれたデータを読み取るシステムの例示的な一実施形態において、読み取りデコーダに対する入力は、メモリから受け取られるコードワードを含む。読み取りデコーダの出力は、メモリに記憶されるデータであり、任意選択でメタデータとなる。読み取りデコーダは、行列Ｍに受け取られたコードワードを乗じてメタデータを復元し、そのメタデータからデータの位置及びコードワード内の追加的なビットを復元する。読み取りデコーダは、データと共に必要に応じてメタデータも返す（又は出力する）。
【００４３】
メタデータを記憶する上でコード・テーブルを使用しない、エラーを含むメモリに対して書き込みを行うシステムの例示的な一実施形態において、書き込みエンコーダに対する入力は、メモリに記憶されるデータと、メモリに書き込まれるコードワード内のデータの所望の位置と、圧縮エンデュランス・コード・パラメータを含む追加的なメタデータと、を含む。書き込みエンコーダの出力は、データ位置指定と矛盾しないように配置されたデータ及び追加的なシンボルを含むコードワード・ベクトル、即ち、データ・シンボルが所望のシンボル位置に配置され、追加的なビットが事前指定されたＥＣＣのパリティ・ビットを含むコードワードである。書き込みエンコーダは、データ位置指定を満足するコードワードであって、そのコードワードに事前指定された行列Ｍを乗じたときにメタデータが得られ、ＥＣＣのパリティ検査行列Ｈを乗じたときに既知の値、例えばゼロが得られるようなコードワードを発見する。
【００４４】
先述の書き込みエンコーダの実施形態によって書き込まれたデータを読み取るシステムの例示的な一実施形態において、読み取りデコーダに対する入力は、メモリから受け取られるエラー・コードワードを含む。読み取りデコーダの出力は、メモリに記憶されるデータとされ、任意選択でメタデータとされる。読み取りデコーダは、パリティ検査行列Ｈで事前に固定されたＥＣＣを適用して、受け取られたコードワードのエラーを訂正する。訂正が成功した場合、読み取りデコーダは、行列Ｍに訂正したコードワードを乗じてメタデータを復元し、そのメタデータからデータの位置及びコードワード内の追加的なビットを復元する。読み取りデコーダは、データと共に必要に応じてメタデータも返す（又は出力する）。
【００４５】
メタデータを記憶する上でコード・テーブルを使用しない、エラーを含むメモリに対して書き込みを行うシステムの例示的な一実施形態において、書き込みエンコーダに対する入力は、メモリに記憶されるデータと、メモリに書き込まれるコードワード内のデータの所望の位置（メタデータに含めることができる）と、使用すべき可変数のＥＣＣシンボル（又はビット）（ＥＣＣシンボルの数は複数の選択肢から選択される）と、圧縮エンデュランス・コード・パラメータを含む追加的なメタデータと、を含む。書き込みエンコーダの出力は、データ位置指定と矛盾しないように配置されたデータ及び追加的なシンボルから構成されるコードワード・ベクトル、即ち、データ・シンボルが所望のシンボル位置に配置され、追加的なビットが必要なＥＣＣビット数に基づいて選択されたＥＣＣに由来するパリティ・ビットを含むコードワードである。書き込みエンコーダは、データ位置指定を満足するコードワードであって、そのコードワードに事前指定された行列Ｍを乗じたときにメタデータが得られ、選択されたＥＣＣのパリティ検査行列Ｈを乗じたときに既知の値、例えばゼロが得られるようなコードワードを発見する。
【００４６】
先述の書き込みエンコーダの実施形態によって書き込まれたデータを読み取るシステムの例示的な一実施形態において、読み取りデコーダに対する入力は、メモリから受け取られるエラー・コードワードを含む。読み取りデコーダの出力は、メモリに記憶されるデータとされ、任意選択でメタデータとされる。可変ＥＣＣビットの可能な数のそれぞれについて、読み取りデコーダは、対応するパリティ検査行列を適用してエラー訂正を試行する。訂正に成功したパリティ検査行列が１つでもあれば、読み取りデコーダは、行列Ｍに訂正したコードワードを乗じてメタデータを復元し、そのメタデータからデータの位置及びコードワード内の追加的なビットを復元する。読み取りデコーダは、データと共に必要に応じてメタデータも返す（又は出力する）。
【００４７】
例示的な一代替実施形態は、記憶コンテンツに適用されるエンデュランス・コーディング及び圧縮技法を記述する拡張メタデータの追加を必要とせずに同様の結果を得る方法を含む。図１０に示される実施形態において、使用される特定のエンデュランス・コードは、記憶コンテンツを分析することによって得られる。書き込み手順１０００は、以下のとおりである。Ｎビットのデータ・シーケンス１００２が、Ｋ≧Ｎ個のセルに書き込まれる。データが圧縮され、それによってＣ個の情報シンボルから成る圧縮シーケンス１００４が得られる。２つの閾値１００６及び１００８、即ちｃ１及びｃ２は、それぞれｃ１＜ｃ２＜Ｎで固定される。Ｃ＞ｃ２の場合には、データはそのまま書き込まれ、Ｋ−Ｎ個のセルが「１」でパディング（padding）されてＫ個の拡張ビットから成るシーケンス１０１０が形成される。このシーケンスは、任意選択でスクランブルされる。例示的な諸実施形態において、コンテンツが符号化せずに書き込まれる場合には、オプショナル・フラグ・ビット１０１２が書き込まれる。Ｃ≦ｃ１の場合には、第１のコード、即ちコード１を使用してエンデュランス・コーディングが実行される。例示的な諸実施形態において、コード１は、コードワード長Ｋの有界重みコード（bounded weight code）であり、それ自体のゼロの数は、ｚ００〜ｚ０１の範囲であり、ｚ００及びｚ０１は、可能な有界重みコードワードの総数が２ｃ１以上となるように選択される。例示的な諸実施形態において、コード１は、コードワード長Ｋの一定重みコード（constant weight code）であり、それ自体のゼロの数ｚ０は、可能な一定重みコードワードの総数が２ｃ１以上となるような数である。例示的な一実施形態において、ｃ１＜Ｃ≦ｃ２である場合には、第２のコード、即ちコード２を使用してエンデュランス・コーディングが実行される。例示的な諸実施形態において、コード２は、コードワード長Ｋの有界重みコードであり、それ自体のゼロの数は、ｚ１０〜ｚ１１の範囲に含まれ、ｚ１０及びｚ１１は、可能な有界重みコードワードの総数が２ｃ２以上となるような数である。例示的な諸実施形態において、コード２は、コードワード長Ｋの一定重みコードであり、それ自体のゼロの数ｚ１は、可能な一定重みコードワードの総数が２ｃ２以上となるような数である。
【００４８】
図１０では、読み取り手順１０２０の例示的な一実施形態が示されている。メモリ・コンテンツの属するエンデュランス・コードを識別するために、メモリ・コンテンツの読み取り及び分析が行われる。例示的な諸実施形態において、この分析は、メモリ・コンテンツのゼロの数をカウントするステップと、カウントされたゼロの数と一致する一意のエンデュランス・コードを選択するステップと、を含む。コードワードが可能な所与のコード・ファミリー内のどのエンデュランス・コードとも一致しない場合には、非符号化コンテンツ（スクランブルされている可能性もある）が仮定される。いずれにせよ、非符号化コンテンツの存在を知らせる追加的なフラグが存在し設定されている場合には、非符号化コンテンツが仮定される。この分析によってコードが識別され、非符号化フラグが設定されていない場合には、識別されたコードを使用してコンテンツが復号化される。本発明は、一定重みコード又は有界重みコードに限定されるものではなく、同様の実施形態は、使用可能なエンデュランス・コーディング・コード・ファミリーから選択される様々な数の可能なコードを使用することができ、その場合も各コードはコードワードを検査することによって一意に識別され得ることが当業者には理解されるだろう。例示的な一実施形態では、Ｋ＝Ｎである。
【００４９】
図１１に示される別の例示的な実施形態は、共同圧縮／展開を以下の基準に従って実行して、Ｎ個のデータ・ビットをＫ個のセルに効率的に符号化するステップを含む。ブロック１１０２で、すべてのデータ・ビット・シーケンスがリストされ、確率の降順にソートされる。ブロック１１０４で、長さＫのすべてのコードワードがコストの昇順にソートされる。コードワードのコストは、コードワードの書き込みに関連するエンデュランスへの影響に正比例する。ブロック１１０６で、ソートされたデータ・シーケンス・リストの１番目の要素（即ち、確率が最も高いＮデータ・ビット・シーケンス）と、ソートされたコードワード・リストの１番目の要素（即ち、エンデュランスへの影響が最も小さいコードワード）とを関連付け、その後２番目の要素同士を関連付け、以下同様に関連付けを行うことにより、データ・ビット・シーケンスとコードワードとの間の単射関係を表すテーブルが作成される。対応する符号化プロセスでは、記憶対象の情報シーケンスが受け取られると、書き込み対象の対応するコードワードを発見するためにテーブルの照会が行われる。対応する復号化プロセスでは、コードワードがメモリから検索され、コードワードが発見されるまでテーブルがスキャンされる。復号化される出力は、受け取られるコードワードに関係する情報データである。例示的な一実施形態において、一般的な基準は、確率が最も高いシーケンスと、コストが最も小さいコードワードとを関連付けることである。
【００５０】
図１２は、例示的な一実施形態によって実施され得る一例を示す。図１２に示されるように、ａ、ｂ、ｃ、ｄは、それぞれデータ・メッセージであり（Ｎ＝２とすれば、ａ＝００、ｂ＝０１、ｃ＝１０、ｄ＝１１）、それぞれの確率が同じ行に示されている。「０」の書き込みコストが１と等しく、「１」の書き込みコストがゼロと等しいと仮定して、それぞれＫ＝２及びＫ＝３の２つのコードが作成される。これらのメッセージは、確率の降順に順序付けされ、対応するコードワードは、コストの昇順に順序付けされる（Ｋ＝２では０，１，１，２、Ｋ＝３では０，１，１，１）。Ｋ＝２のコードの平均コストは０．３１２５（セル単位）、Ｋ＝３の平均コストは０．１６６７（セル単位）である。マッピングａ＝００、ｂ＝０１、ｃ＝１０、ｄ＝１１を直接書き込む場合、関連コストは０．６７８５（セル単位）となる。
【００５１】
本明細書に記載の諸実施形態は、１つの不揮発性メモリ・デバイスのページ内の符号化された情報だけでなく、単一の外部要求に応じてデータを配信する単一の論理エンティティとして働く、複数の不揮発性メモリ・デバイスの各ページ内の符号化された情報にも適用される。データを配信するデバイスが１つ存在するのか複数存在するのかに関わらず、データは、ページ・サブセクションにアクセスするだけで取得可能となる。複数のデバイスが存在する場合、各デバイスは、共通のページ・アドレスを有する共通のページ・サブセクションにアクセスする。
【００５２】
技術的効果及び利益としては、適応型エンデュランス・コーディングを実行する能力が挙げられる。本明細書に記載されるように、メモリに書き込まれるデータは、メモリ・セルの損耗を低減することによってメモリ寿命を延長する形に変換される。また、本明細書に記載される形で書き込まれるデータは、エラー耐性が高まる可能性がある（例えば、記憶情報にエラーが生じた場合もデータが復元可能となる）。
【００５３】
本明細書で使用される用語は、特定の実施形態を説明するためのものにすぎず、本発明を限定することは本出願人の意図するところではない。本明細書で使用される「a」、「an」、及び「the」といった単数形の表現は、特に明記しない限り複数形の概念も含むことが意図されている。更に、本明細書で使用される「備える」又は「含む」（「comprises」又は「comprising」）あるいはその両方の用語は、本明細書で言及される特徴、整数、ステップ、動作、要素、又は構成要素、あるいはそれらのすべての存在を示すものであって、それらの用語の使用により、１つ又は複数の他の特徴、整数、ステップ、動作、要素、構成要素、又はそれらから成る群、あるいはそれらのすべての存在又は追加が排除されるわけではないことを理解していただきたい。
【００５４】
添付の特許請求範囲に記載される請求項中のすべてのミーンズ・プラス・ファンクション要素又はステップ・プラス・ファンクション要素の対応する構造、材料、作用、及び等価物は、請求項に具体的に記載される他の要素と組み合わせて機能を発揮する任意の構造、材料、又は作用を含むことが意図されている。本発明の記載は例示及び説明のために提示しているものであって、本発明の実施形態を余すところのないものとし、又は開示の形態に限定することは、本出願人の意図するところではない。当業者には本発明の範囲及び趣旨から逸脱しない多くの修正、変更が可能なことは明白であろう。上記の実施形態は、本発明の諸原理及び実際の応用例が最良の形で説明されるように、また、想定される特定の使用に適するように様々な修正が施された様々な実施形態について当業者が本発明を理解することが可能となるように選択され説明されている。
【００５５】
本明細書に示される各フロー図は、単なる一例にすぎない。各図面又は各図面に記載されるステップ（又は動作）には、本発明の趣旨から逸脱しない限り様々な変更を施すことができる。例えば、各ステップを異なる順序で実行することも、ステップの追加、削除、あるいは修正を行うことも可能である。これらの変形形態はすべて各請求項に記載される発明の一部と見なされる。
【００５６】
上述のとおり、本発明の諸実施形態は、コンピュータ実装プロセス及びそれらのプロセスを実行する装置の形で実施することができる。本発明の諸実施形態は、フレキシブル・ディスク、ＣＤ‐ＲＯＭ、ハード・ドライブ、他の任意のコンピュータ読み取り可能な記憶媒体等、有形の媒体内で実行される命令を含むコンピュータ・プログラム・コードであって、それらがコンピュータにロードされ、コンピュータによって実行されたときに当該コンピュータが本発明を実施する装置となる、コンピュータ・プログラム・コードの形で実施することもできる。本発明は、例えばストレージ・メディアに記憶されるものであれ、コンピュータへのロード又はコンピュータによる実行あるいはその両方が行われるものであれ、電気配線又は電気ケーブル、光ファイバ、電磁放射等、何らかの伝送媒体を介して伝送されるものであれ、それらがコンピュータにロードされ、コンピュータによって実行されたときに当該コンピュータが本発明を実施する装置となる、コンピュータ・プログラム・コードの形で実施することもできる。当該コンピュータ・プログラム・コードが汎用マイクロプロセッサに実装された場合、その汎用マイクロプロセッサは、当該コンピュータ・プログラム・コードの各セグメントによって特定の論理回路を形成するように構成される。
【００５７】
以上、本発明の好ましい実施形態について説明したが、当業者なら現在及び将来にわたって各請求項の範囲に含まれる様々な改良及び機能拡張を施すことができることが理解されるだろう。各請求項は、当初の記載の発明の適切な保護を維持するものと解釈すべきである。
【符号の説明】
【００５８】
２０２、５０２  メモリ・コントローラ
２０４  ＲＡＭコード・テーブル
２０６  不揮発性メモリ・デバイス
２０８  データ圧縮プログラム
２１０  エンデュランス・エンコーダ
２１２  データ・セレクタ
２１４  エラー訂正エンコーダ
２１６  メモリ書き込みプロセス
２１８、５０４  メモリ読み取りプロセス
２２０、５１４  メモリ書き込み／読み取りプロセス
２２２、５１２  エラー訂正エンコーダ／デコーダ
３０２  システマティックＥＣＣエンコーダ
３０４  索引付きパーミュータ
５０６  エラー訂正デコーダ
５０８  データ解凍プログラム
５１０  エンデュランス・デコーダ
７０２  圧縮プログラム
７０４  エンデュランス・コード・エンコーダ
７０８  ＥＣＣエンコーダ
９０２  ＥＣＣデコーダ
９０８  エンデュランス・コード・デコーダ
９１０  解凍プログラム
【図１】
2010262640.tif 000006
【図２】
2010262640.tif 000007
【図３】
2010262640.tif 000008
【図４】
2010262640.tif 000009
【図５】
2010262640.tif 000010
【図６】
2010262640.tif 000011
【図７】
2010262640.tif 000012
【図８】
2010262640.tif 000013
【図９】
2010262640.tif 000014
【図１０】
2010262640.tif 000015
【図１１】
2010262640.tif 000016
【図１２】
2010262640.tif 000017