(57)【要約】【課題】  メモリの効率的で高速なアドレス指定を容易にする。【解決手段】  ベクトル量子化技法を使用して、メモリ内の欠陥のあるメモリ位置を特定する欠陥メモリ位置ビットマップを圧縮する。このベクトル量子化方法は、ベクトル空間を繰り返し分割する。分割は、それぞれの初期分割用の処理ベクトルとして選択された各コードワードに対して、ベクトルの類似性を判断するためのブールＯＲメトリックを使用する。特別なベクトルが、すべての繰り返しにわたってコードブック内にコードワードとして保持される。ベクトル量子化方法は、欠陥のあるメモリ位置が、圧縮および伸張を通じて歪められて、そのメモリ位置が正常であることを誤って示すことがないように、非対称歪みを生成するよう設計される。欠陥メモリ位置ビットマップ内の正常なメモリ位置を、欠陥メモリ位置に分類する歪みのみが許容される。【選択図】図１０
2004334846.tif 000002
【特許請求の範囲】
【請求項１】
順序付けられた一連の欠陥のないデータ記憶位置（２０７）を提供する方法であって、
欠陥データ記憶位置テーブル（２０１）を構築することと、
非可逆圧縮によって、前記欠陥データ記憶位置テーブル（９０２）を圧縮欠陥データ記憶位置テーブル（９０６）に、欠陥データ記憶位置テーブルのエントリが対応するデータ記憶位置のサイズを変更することとは異なる非可逆圧縮方法により圧縮することと、
データ記憶位置が、論理アドレスによりアクセスされる場合、該論理アドレスによりアドレス指定されるデータ記憶位置の物理位置を決定するために、前記欠陥データ記憶位置テーブル（９０８）の十分な部分を伸張することと
を含む方法。
【請求項２】
前記論理アドレスによりアドレス指定されるデータ記憶位置の物理位置を決定するために、前記欠陥データ記憶位置テーブルの十分な部分を伸張することは、
前記圧縮欠陥データ記憶位置テーブルからインデックス（６０４）を抽出することと、
抽出した各インデックスに対して、コードブック（８０２）において前記インデックスに関連したコードワード（８１０〜８１３）を伸張欠陥データ記憶位置テーブルに挿入することと
とをさらに含む請求項１に記載の方法。
【請求項３】
前記欠陥データ記憶位置テーブル（２０１）は、対応する物理データ記憶位置（１１０、１１２、１１４）が欠陥を有するかどうかを各ビットが示すビットマップを含み、
前記欠陥データ記憶位置テーブルを圧縮して、前記圧縮欠陥データ記憶位置テーブルを記憶することは、
コードワード（８１０〜８１３）の組であって、各コードワードが、ｎビットの長さを有するビットベクトルである、コードワード（８１０〜８１３）の組を含む初期コードブック（８０２）を構築することと、
分離した区画（８０４〜８０７）であって、各区画が、１つのコードワードを含み、１つの区画が、欠陥のあるメモリ位置を示すｎビットの値を含むコードワード（８１０）を含む、分離した区画（８０４〜８０７）に入力ベクトルを分割することであって、それによって、コードブックを生成する、分離した区画（８０４〜８０７）に入力ベクトルを分割することと、
前記欠陥データ記憶位置テーブルからｎビットの長さを有する連続した入力ベクトルを抽出すること、かつ抽出した各入力ベクトルに対して、該抽出した入力ベクトルを含むコードブック区画内のコードワードのインデックス（６０４）を前記圧縮欠陥データ記憶位置テーブルに配置することと
をさらに含む
請求項１に記載の方法。
【請求項４】
抽出した各入力ベクトルに対して、該抽出した入力ベクトルを含むコードブック区画内のコードワードのインデックスを前記圧縮欠陥データ記憶位置テーブルに配置することは、
前記抽出した入力ベクトルを含む該コードブック区画（８０４〜８０７）を、
テーブル参照、
距離メトリックを使用して前記コードブック区画を計算すること、および、「
歪みメトリックを使用して前記コードブック区画を計算すること
のうちの１つによって決定すること
をさらに含み、
前記コードワードの組を含むコードブックを構築することは、
最初に選択されるコードワードの組が繰り返し変更される非対称歪みモデルＬＢＧアルゴリズムを使用すること
をさらに含み、
総歪みは、各入力ベクトルの各区画のコードワードについて、該区画内の歪みの総和として計算され、
入力ベクトル
【数１】
2004334846.tif 000036
とコードワードｘとの間の歪みＤは、
【数２】
2004334846.tif 000037
とすると、非対称歪み
【数３】
2004334846.tif 000038
として求められる
請求項３に記載の方法。
【請求項５】
前記コードワード（８０４〜８０７）の組を含むコードブックを構築することは、
擬似乱数発生器の種として各区画の各インデックスを使用して、確率分布に従い前記コードワードをランダムに発生することであって、それによって、コードワードを生成する、前記コードワードをランダムに発生すること
をさらに含み、
前記論理アドレスによりアドレス指定されるデータ記憶位置の物理位置を決定するために、前記欠陥データ記憶位置テーブルの十分な部分を伸張することは、
前記圧縮欠陥データ記憶位置テーブルからインデックス（６０４）を抽出することと、
抽出した各インデックスを前記擬似乱数発生器に供給することであって、それによって、対応する伸張されたコードワードを生成する、抽出した各インデックスを前記擬似乱数発生器に供給することと、
前記伸張されたコードワードを伸張欠陥データ記憶位置テーブルに挿入することと
をさらに含む
請求項３に記載の方法。
【請求項６】
前記欠陥データ記憶位置テーブル（２０１）を圧縮することは、
長さｒの同一のビット値の連続に対して、量の順序付けられた組Ｌ内で位置ｉの増加と共に大きさが必ず増加する該量の順序付けられた組Ｌからｒ以下の量ｌｉを返す量子化関数Ｑを提供することと、
ｊの初期値を０に等しくして、前記欠陥データ記憶位置テーブル内の位置ｊから開始する前記欠陥データ記憶位置テーブルから、同一の値を有するビットの連続を連続的に抽出することであって、
抽出した同一の値を有するビットの各連続に対して、
前記量子化関数Ｑを前記抽出した連続の長さに適用することであって、それによって、該連続の該長さに対応する量ｌｉを選択する、前記量子化関数Ｑを前記抽出した連続の長さに適用することと、
前記インデックスｉを前記圧縮欠陥データ記憶位置テーブルに配置することと、
ｊをｌｉ＋１の位置だけ進めることと
を行う同一の値を有するビットの連続を連続的に抽出することと
をさらに含む
請求項２に記載の方法。
【請求項７】
前記論理アドレスによりアドレス指定されるデータ記憶位置の物理位置を決定するために、前記欠陥データ記憶位置テーブルの十分な部分を伸張することは、
前記圧縮欠陥データ記憶位置テーブル（９０６）からインデックスを抽出することと、
抽出した各インデックスｉに対して、伸張欠陥データ記憶位置テーブル（９０８）に、ｌｉ個の同一の値を有するビットの量およびその後に続く（ｌｉ＋１−ｌｉ）個の逆の値を有するビットの量差を配置することと
をさらに含む
請求項６に記載の方法。
【請求項８】
物理メモリ位置を有するメモリデバイスと、
前記メモリ内の論理メモリ位置のアクセス時には、該論理メモリ位置を物理メモリ位置にマッピングするために伸張される圧縮欠陥メモリ位置テーブル（９０６）と
を備えるメモリ。
【請求項９】
前記欠陥メモリ位置テーブル（９０２）は、
対応する物理メモリ位置が欠陥を有するかどうかを各ビットが示すビットマップ
を含む
請求項８に記載のメモリ。
【請求項１０】
前記圧縮欠陥メモリ位置テーブルは、
コードブック（８０２）内のコードワード（８１０〜８１３）のインデックス（６０４）
を含み、
多数の区画（８０４〜８０７）のそれぞれ内の単一のコードワードは、
コードワードベクトルおよび追加された入力ベクトル
を含み、
コードワードベクトルおよび入力ベクトルのそれぞれは、ｎビットの長さを有するビットベクトルであり、入力ベクトルは、最初の未圧縮の欠陥メモリ位置テーブルから連続して抽出され、
前記圧縮欠陥メモリ位置テーブルは、
量の順序付けられた組Ｌ内で位置ｉの増加と共に大きさが必ず増加する該量の順序付けられた組Ｌ内の量のインデックス
を含む
請求項９に記載のメモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ記憶デバイス、すなわちメモリに関し、特に、データ記憶デバイスに関連付けられた欠陥データ記憶位置テーブル、すなわち、メモリに関連付けられた欠陥メモリ位置テーブルに関する。
このテーブルは、単調増加するインデックスによってインデックスされる論理メモリ位置のシーケンシャルリストを、複数の欠陥のある物理メモリ位置を含むメモリから作成できるように、欠陥のあるすべてのメモリ位置を特定するものである。
【背景技術】
【０００２】
近年、データ記憶デバイス、すなわちメモリにデータを記憶するための新しい技術開発に、非常に大きな発展があった。
高密度かつ大容量の電子メモリチップが、容易に、かつ、安価に入手可能となり、新しい３次元積層電子メモリデバイスが、半導体フィルムを使用して開発された。
旧技術には、磁気ディスク、磁気テープ、ならびに非常に古いコアメモリおよびドラムメモリが含まれる。
電子メモリデバイスおよび磁気メモリデバイスは、一般に、非常に多くのアドレス指定可能な物理メモリ位置を含む。
各物理メモリ位置は、１つまたは２つ以上のコンピュータ可読バイトまたはコンピュータ可読ワードを記憶することができる。
これらのバイトまたはワードは、例えば８ビットバイトおよび３２ビットワードまたは６４ビットワードといった一定数のビットからなる。
「データ記憶単位」と一般に呼ばれる最低レベルの記憶単位は、例えばディスクセクタまたは３次元メモリプレーンといった、より大きな単位に階層的にグループ化することができる。
物理メモリ位置は、物理アドレスによってアドレス指定できる１つまたは２つ以上のデータ記憶単位を含む。
物理メモリ位置は、あるタイプのメモリデバイスのコンピュータ可読ワードであってもよいし、別のタイプのデバイスのディスクセクタであってもよい。
【０００３】
一般に、技術のいかんを問わず、メモリデバイス内のある一定数のメモリ位置は、欠陥を有することがある。
欠陥のあるメモリ位置は、読み出せないことがあるか、または、書き込みを介在することなく、連続的に読み出した場合に異なる値を生成するので、信頼できないことがある。
このような欠陥のあるメモリ位置は、製造直後の初期試験で特定できるか、または、そのメモリデバイスの寿命の間は、メモリデバイスの付加的な試験を介して、もしくは、他の手段によって動的に特定できる。
【０００４】
図１は、３次元メモリの説明図を示している。
このメモリは、９つのプレーン１０１〜１０９を備える。
各プレーンは、例えばメモリ位置１１０といったメモリ位置の格子状配列を備える。
図１に示す３次元メモリデバイスでは、各プレーンのメモリ位置は、数学的配列のセルと同様にインデックスされ、メモリ位置（０，０）から開始して、メモリ位置（３１，５）に行ごとに進む。
各メモリ位置が、例えば座標（ｘ，ｙ，ｚ）によって指定されるように、プレーンを第３のインデックスによってインデックスすることができる。
座標（ｘ，ｙ，ｚ）において、ｘは、あるプレーン内の行のインデックスであり、ｙは、あるプレーン内の列のインデックスであり、ｚは、３次元メモリを構成する複数のプレーンからなる層内のあるプレーンのインデックスである。
図１では、例えばメモリ位置１１２といった多数のメモリ位置、すなわちワードに、そのメモリ位置に欠陥があることを示すために陰影が付けられている。
【０００５】
図２は、欠陥のあるメモリ位置を含むメモリ内、例えば図１に示すメモリ内で欠陥のないメモリ位置をアドレス指定する多数の可能な技法の１つを示している。
図２に示すように、このメモリ内の物理メモリ位置の構造を正確に描写するビットマップ２０１を構築することができる。
例えば、図２に示すように、ビットマップ２０１は、例えば配列２０３といったビットの配列を含む。
この配列は、図１に示す３次元メモリの各プレーンに対応する。
各ビット配列では、例えばセル２０５といったセルが、対応するメモリ位置の欠陥の有無を示す１ビットを含む。
この図および以下の解説では、ビット値「０」が、欠陥のない物理メモリ位置を示し、ビット値「１」が、欠陥のある物理メモリ位置を示す。
図２のビット配列２０３は、図１に示すメモリにおける対応する３次元メモリプレーン１０１内のメモリ位置をインデックスするのと同様にしてインデックスされることに留意されたい。
図１で陰影を付けたセルとして示す欠陥のあるビットと、ビットアレイ２０３のビット値「１」を含むセルとの対応関係は、容易に識別することができる。
【０００６】
例えば図２のビットマップ２０１といった欠陥メモリ位置マップが一旦準備されると、ビットマップで欠陥のあるものとして確認されたメモリ位置を無視することにより、欠陥のないメモリ位置を、単調増加する順番で順序付けることができる。
換言すると、一連の欠陥のない論理的なメモリ位置を準備することができ、それによって、欠陥のない論理メモリ位置を使用して物理メモリ位置をアドレス指定することができる。
これを行う１つの方法は、ビットマップ配列の第１行２０９のビットマップエントリに対応する物理メモリ位置のそれぞれの論理メモリ位置アドレスのインデックス２０７を作成することである。
例えばインデックス２０７のように、メモリのプレーンに対応する各ビットアレイに対して、別々にインデックスを作成することができる。
このインデックスは、所望のメモリ位置に近く、かつ、所望のメモリ位置の前に位置するメモリ位置を見つけ出すために使用することができる。
次に、メモリ内のメモリ位置の正確な物理アドレスを見つけ出すために、ビット配列の対応する列を踏査することができる。
例えば、論理メモリ位置アドレス１００を有する物理メモリ位置を見つけ出したい場合、インデックス２０７を検索して、論理メモリ位置アドレス「９８」を含むセル２１２が突き止めることができる。
そのセルのインデックスは、ビット配列内において、その論理メモリ位置アドレスに対応する第１セルを有する列のインデックスである。
したがって、ビット配列２０３内のセル２１４は、論理メモリ位置アドレス「９８」を有するメモリ位置に対応する。
次に、この列を下方にセル単位で踏査して、論理メモリ位置アドレス「１００」に対応するビット配列のセル２１６を突き止めることができる。
この踏査を行っている間、ビット値「１」を含むビット配列のセルは、いずれもスキップされる。
インデックス２０７内の連続したセルの内容値の差分は、一定でないことに留意されたい。
ビット配列の列に対応したメモリのプレーンの列内に、欠陥のあるメモリ位置が存在しない場合、インデックスの次のセルは、ビット配列の列のセルの個数分だけ、インクリメントされる。
例えば、インデックス２０７の第２セル２１８の値「６」は、メモリの第１プレーンの第１列に、欠陥のあるメモリ位置が存在しないことを示している。
一方、メモリの第１プレーンの第２列では、欠陥のあるメモリ位置（図１の１１４）が存在する（このメモリ位置は、ビット配列２０３のセル２２０のビット値「１」によって特定される）ため、インデックス２０７の第３セル２２２の値は、前の値よりも５だけ大きい「１１」となっている。
【０００７】
これらのインデックスおよびメモリ位置ビットマップ（それぞれ、図２の２０７および２０１）は、メモリ内の欠陥のないメモリ位置を連続的にインデックスするための多くの異なる可能な方法の１つを表している。
メモリ内の欠陥のないメモリ位置および欠陥のあるメモリ位置が特定されるビットマップ、例えば図２のビットマップ２０１は、ほとんどの方法に共通している。
メモリ位置にアクセスするごとに、このビットマップにアクセスすることが必要となり得るので、メモリの効率的で高速なアドレス指定を容易にするには、このビットマップを非常に高速なメモリに記憶する必要がある。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、このような高速メモリは、一般に使用される低速メモリよりもはるかに高額である。
例えば、プロセッサ内の高速レジスタは、一般に、はるかに高速にアクセスされるが、一般に、１つまたは２つ以上のメモリバスを介してプロセッサと相互接続される低速のダイナミックランダムアクセスメモリよりも、何桁も高額である。
プロセッサ内に含まれるレジスタの数をより多くすることにより、演算をより高速にすることができるが、プロセッサは、レジスタが追加されるごとにますます高額になる。
これらの理由から、図２に示すメモリ位置ビットマップ２０１のようなメモリ位置ビットマップを効率的に記憶する方法が、メモリの製造業者および設計者、ならびに、それらのメモリを含むデバイスの製造業者およびユーザによって認識されてきた。
【課題を解決するための手段】
【０００９】
本発明の実施の形態の組を表す一般的な方法では、欠陥メモリ位置ビットマップが、非可逆圧縮／伸張方法を使用して圧縮される。
非可逆圧縮／伸張方法は、伸張時に圧縮情報を変更することがあるが、結果的に大きな圧縮を生み出す。
本発明の特定の一実施の形態は、ベクトル量子化技法を使用して、メモリ内の欠陥のあるメモリ位置を特定する欠陥メモリ位置ビットマップを圧縮する。
このベクトル量子化方法は、ベクトル空間の反復的な分割を利用する。
分割は、初期の分割それぞれの最初の処理ベクトルとして選択された各コードワードに対して、ベクトルの類似性を判断するために、ブールＯＲメトリックを利用する。
特別なベクトル（１，１…１）が、すべての繰り返しにわたってコードブック内にコードワードとして保持される。
ベクトル量子化方法は、欠陥のあるメモリ位置が、圧縮および伸張を通じて歪められて、そのメモリ位置が正常であることを誤って示すことがないように、非対称歪みを生成するよう設計される。
欠陥メモリ位置ビットマップ内の正常なメモリ位置を、欠陥メモリ位置に分類する歪みのみが許容される。
その結果、メモリ位置の損失が発生するが、欠陥のあるメモリ位置が信頼されて使用されることは防止される。
さまざまな異なる圧縮／伸張方法が、メモリ内の異なるタイプの欠陥分布に適合し得るので、複数の圧縮／伸張方法の中から最も適切な圧縮／伸張方法を、特定の欠陥確率分布に最も適したものとして選択する方法が提供される。
欠陥メモリ位置ビットマップの圧縮には、連長量子化方法も使用することができる。
【発明を実施するための最良の形態】
【００１０】
メモリ内の欠陥のあるメモリ位置を表すビットマップを高速メモリにできるだけコンパクトに記憶して、そのメモリを実施するのに必要な高速メモリの量を最小にするために、本発明の複数の実施の形態は、どの物理メモリ位置が欠陥を有するかを示す欠陥メモリ位置テーブルを圧縮し、圧縮した欠陥メモリ位置テーブルを高速メモリに記憶する。
上述したように、欠陥メモリ位置テーブルは、一般に、ビットマップであり、そのビットマップでは、ビット値「０」が、欠陥のないメモリ位置を示すのに使用される一方、ビット値「１」が、欠陥のあるメモリ位置を指定するのに使用される。
もちろん、逆の慣例が使用されてもよい。
【００１１】
多くの異なるタイプの圧縮技法が存在する。
これらのタイプは、（１）圧縮ビットマップの正確な復元を可能にする可逆圧縮技法、および、（２）伸張時に元の符号化されたビットマップに対して一般に歪みが生じる非可逆圧縮技法、の２つの一般的なカテゴリに分類される。
既知の可逆圧縮技法は、「連長符号化」として知られている。
図３Ａ〜図３Ｃは、連長符号化技法を示している。
メモリの構造にかかわらず、メモリ内のメモリ位置のすべてを連続的に順序付けることができ、それによって、メモリ位置のいずれが欠陥を有するかを示すビットマップも連続的にすることができるようになる。
図３Ａには、短い欠陥メモリ位置ビットマップ３０２を、このビットマップの圧縮版３０４と共に示す。
図３Ａに示す例では、圧縮ビットマップ３０４が、図３Ａの後尾の空白ビット３０５〜３０７で示す３ビットしか、未圧縮ビットマップ３０２よりも短くなっていないので、この圧縮はあまり劇的ではない。
ビットマップ３０２は、連長符号化によって符号化、すなわち圧縮される。
この技法では、連続した０のビット列および連続した１のビット列が、その列の長さ、および、その直後に続くその列内のビットのビット値によって表される。
例えば、ビットマップ３０２は、先頭に、１４個の０のビット列３１０を含む。
この１４個の０のビット列は、このビットマップの圧縮版３０４では、値「１４」を表す４ビット整数３１２、および、その直後に続く１ビット値「０」３１４として表される。
１ビット値「０」３１４は、１４ビット列のビットが０のビットであることを示す。
同様に、未圧縮ビットマップ３０２の次の３個の１のビット列３１６は、圧縮ビットマップでは、値「３」を表す４ビット整数３１８、および、その直後に続く、ビット値「１」を有する１ビット３２０で表される。
１ビット３２０は、この３ビット列がビット値「１」を有することを示す。
元のビットマップ３０２をそのビットマップの圧縮版３０４から正確に復元できるので、連長符号化は、可逆符号化技法である。
未圧縮ビットマップのそれぞれの部分列を、そのビットマップの圧縮版の最も左の部分列表現から開始して順に、圧縮ビットマップから生成することができる。
図３Ｂに示すように、欠陥のあるメモリ位置が比較的少ない場合にのみ、非常に大きな圧縮比が達成される。
図３Ｂに示す例では、ほぼ５０パーセントの圧縮が達成される。
大きな連長整数、例えば３２ビット整数が使用され、欠陥の発生がかなり稀であると、さらに大きな圧縮比を達成することができる。
しかしながら、図３Ｃに示すように、可逆圧縮技法は、必ずしも圧縮を生成できるとは限らず、ある一定の入力ビットマップに対しては、元の未圧縮ビットマップよりも長い圧縮ビットマップを生成することがある。
換言すると、可逆圧縮技法は、ある一定のタイプの欠陥の分布に対しては、あまり機能しない可能性がある。
図３Ｃでは、欠陥のあるメモリ位置が比較的高い比率で存在し、これらの欠陥のあるメモリ位置は、欠陥のないメモリ位置を挟んで散在している。
このケースでは、未圧縮ビットマップ３３０の最初の６ビット３２８の連長圧縮だけで、２８ビットの連長符号化ビットマップが、ビットマップの圧縮版３３２に生成される。
したがって、このケースでは、連長符号化の結果、データ圧縮ではなく、データ拡張が生じる。
あるいは、固定長ではなく、可変長の連長符号化技法を使用することができる。
可変長符号化技法では、可変長のプレフィックスフリーコード（prefix-free code）を使用して、連長値を一連の可変長ビット列に符号化することができる。
連長符号化のビットサイズは、一般に、符号化の発生頻度を反映し、最も高い頻度で発生する連長が最も簡潔に符号化されるようになっている。
できるだけ効率的にデータを圧縮するために、さまざまな異なるタイプの可変長連長符号化を使用して、圧縮するデータの統計モデルに符号化を適合させることができる。
【００１２】
本発明の一実施の形態は、ベクトル量子化を使用して、欠陥メモリ位置ビットマップを圧縮することを必要とする。
ベクトル量子化は、非可逆圧縮技法である。
メモリ位置欠陥ビットマップを圧縮するのに、非可逆圧縮技法を使用することは自明ではない。
その理由は、伸張時に、元の欠陥メモリ位置ビットマップが歪められることがあり、これは、元のビットマップでビット値「０」を有するビットが、欠陥メモリ位置ビットマップの伸張版では歪められて、ビット値「１」を有することがあることを意味し、また、ビット値「１」を有するビットが、欠陥メモリ位置ビットマップの伸張版では歪められて、ビット値「０」を有することがあることを意味するからである。
前者の場合、欠陥のないメモリ位置が、欠陥があるとみなされ、メモリ内の欠陥のないメモリ位置が無駄になっていることに相当する。
後者の場合、認識された欠陥のあるメモリ位置は、欠陥のないものとみなされ、その結果、破滅的なエラーを含むさまざまな重度のエラーが発生することがある。
したがって、非可逆圧縮技法は、合理的にみると、容認できないように見られるかもしれない。
しかしながら、非対称の歪みを生成する圧縮／伸張技法が、欠陥メモリ位置ビットマップの圧縮に容認できる場合があると認識することが、本発明の第１の実施の形態の動機となっている。
【００１３】
図４〜図９は、本発明の一実施の形態を表す欠陥メモリ位置ビットマップを圧縮するベクトル量子化方法を示している。
図４に示すように、欠陥メモリ位置ビットマップ４０２を一連のビットベクトル４０４〜４０７に分割することができる。
換言すると、欠陥メモリ位置ビットマップ４０２は、図４に示すように、一連の４ビットのビットベクトルとみなすことができる。
ベクトル量子化は、これら連続したベクトルのそれぞれをインデックスに圧縮するプロセスである。
ベクトル量子化によって圧縮されたビットマップの伸張には、一連のインデックスをビットベクトルに変換して戻すことが必要となる。
【００１４】
図５は、ベクトル量子化によるビットベクトルのインデックスベクトルへの変換、および、その後のビットベクトルの復元を示している。
図５に示すように、入力ビットマップの連続したビットベクトルの１つを表すビットベクトル５０２は、エンコーダ５０４によってインデックスベクトル５０６に変換される。
インデックスベクトルは、ビットベクトルよりも短く、したがって、インデックスベクトルの長さに対するビットベクトルの長さの比に等しい入力ビットマップの圧縮比が生み出される。
インデックスベクトル５０６は、後述するコードブック内のコードワードのインデックスである。
一連のインデックスベクトルからビットマップを復元するには、インデックスベクトルをデコーダ５０８に通過させて、対応するベクトル５１０を生成することを伴う。
デコーダは、インデックスを使用して、対応するコードワードを突き止め、そのコードワードを出力ビットベクトルとして生成する。
【００１５】
図６は、一例のビットベクトル空間および対応するインデックスベクトル空間を示している。
図６に示すように、４ビットの入力ベクトルが使用される場合、ベクトル量子化エンコーダは、１６個の可能な異なる入力ベクトル６０２を受け取ることができる。
エンコーダが、４つのコードワードを含むコードブックを使用する場合、４つの異なるインデックスが、コードブックをインデックスするために必要とされる。
したがって、コードブック内の４つのコードワードをインデックスするには、２ビットのインデックスベクトルを使用することができる。
したがって、図６に示すように、４ビットのビットベクトルは、ベクトル量子化符号化によって、２ビットのインデックスベクトル６０４に変換される。
【００１６】
連長符号化と同様に、ベクトル量子化技法も、無損失可変長プレフィックスフリーコードを使用して、インデックスをバイナリ列に符号化することができる。
そうすることにより、最も一般に参照されるコードワードは、最も簡潔にインデックスすることができる一方、参照頻度の少ないコードワードは、長いインデックスによりインデックスされ得る。
参照頻度の分布が一定でない場合には、可変長インデックスを使用して、より高い符号化効率を得ることができる。
【００１７】
上述したように、欠陥メモリ位置ビットマップを圧縮するための非対称ベクトル量子化方法を考案しなければならない。
図７は、１６個の可能な異なる４ビットの入力ベクトルのそれぞれを表すのに使用できる異なるコードワードを例示したテーブルを示している。
これらの１６個の可能な異なる４ビットの入力ベクトルは、図７のテーブル７００では、例えば列７０４などの１６列のラベル７０２として示されている。
各列の４ビット値は、その列をラベル付けする特定の４ビットの入力ベクトルに対応し得る可能な異なるコードワードを表す。
例えば、入力ベクトル「０１００」７０６は、コードワード「０１００」、「０１０１」、「０１１０」、「０１１１」、「１１００」、「１１０１」、「１１１０」、および「１１１１」のいずれかによって表すことができる。
これら以外のコードワードは可能ではない。
その理由は、４ビットのビットベクトル「０１００」用のコードワードは、その入力ベクトルがビット値「１」を有するビット位置のいずれにもビット値「０」を含むことができないからである。
換言すると、欠陥のあるメモリ位置の表示を、欠陥のないメモリ位置の表示に歪めることはできない。
入力ベクトル「１１１１」７０８に対して可能なコードワードは、コードワード「１１１１」のみであることに留意されたい。
また、入力ベクトル「００００」には、あらゆるコードワードを使用できることにも留意されたい。
入力ベクトル「１１１１」に対して可能なコードワードは、コードワード「１１１１」のみであることから、コードワード「１１１１」は、望ましくない歪みを防止するために、それぞれの可能なコードブックに存在する必要がある。
【００１８】
図８は、４ビットの入力ベクトルと、４つのコードワードを含むコードブックをインデックスする２ビットのインデックスベクトルとの可能なベクトル量子化方式を示している。
図８の大きな長方形８０２は、可能な異なる入力ベクトルのすべてを示している。
これらの可能な入力ベクトルは、図８では、４つのグループ８０４〜８０７に分割される。
第１のグループ、すなわち区画８０４は、入力ビットベクトル「００００」しか含まない。
第２の区画８０５は、入力ビットベクトル「０００１」、「００１０」、および「００１１」を含む。
第３の区画８０６は、ビットベクトル「０１００」、「１０００」、および「１１００」を含む。
第４の区画８０７は、残りの可能な入力ベクトルを含む。
各区画において丸を付けたベクトル、例えば、丸を付けたベクトル８１０は、その区画のコードワードである。
４つの区画に対して４つのコードワード８１０〜８１３が存在する。
これらの４つのコードワードは、４ビットの整数として見ると、コードワードの大きさの順でインデックスされる。
したがって、図８の方式を使用するベクトル量子化圧縮技法は、区画８０４の入力ベクトル「００００」を、その区画のコードワード８１１のインデックスを表すインデックスベクトル「００」に圧縮する。
同様に、入力ベクトル「１０１０」８１４は、その区画のコードワード「１１１１」８１０をインデックスするインデックスベクトル「１１」に圧縮される。
【００１９】
図９は、図８に示す分割を使用するベクトル量子化圧縮方式により一例のビットマップを圧縮する様子を示している。
入力ビットマップ９０２は、４ビットのベクトル、例えば４ビットのベクトル９０４に分割される。
次に、各入力ベクトルは、２ビットのインデックスベクトル、例えば２ビットのインデックスベクトル９０６に変換される。
この変換は、区画のコードワードに対応する２ビットのインデックスを使用することにより行われる。
この区画のコードワードは、図８の方式に従って入力ベクトルに割り当てられたものである。
一般に、入力ベクトルに対応するインデックスは、距離または歪みメトリック（distortion metric）を使用して計算されるが、代わりに、各入力ベクトルのインデックスが記憶されていてもよい。
図９は、圧縮ビットマップ９０６から伸張された伸張ビットマップ９０８も示している。
伸張は、各インデックスベクトルを、そのインデックスベクトルがインデックスするコードワードと置き換えることにより行われる。
ある一定の場合には、伸張は、未圧縮のビットマップにもともと存在するビットベクトルと同じビットベクトルを正確に生成する。
例えば、ビットベクトル「００００」９０４は、伸張ビットマップの同一の４ビットのベクトル「００００」９１０に伸張される。
一方、他のベクトルは、正確に伸張されない。
例えば、未圧縮のビットマップ９０２の２番目のビットベクトル９１２は、異なるビットベクトル９１４に伸張される。
ビット９１６〜９２０は、伸張を通じてビット値「０」からビット値「１」に変化しており、したがって、歪みを表していることが分かる。
【００２０】
説明した本発明の実施の形態で使用されるベクトル量子化手法は、圧縮／伸張歪みの結果として、値「０」が、時に「１」に変化することがあるが、値「１」は、「０」に変化しないように、歪みが非対称となるよう設計される。
その結果、欠陥のないメモリ位置は、欠陥のあるメモリ位置として誤って特徴付けられることがあるが、欠陥のあるメモリ位置が、欠陥のないメモリ位置として誤って特徴付けられることはない。
非対称歪みの措置は、欠陥メモリ位置テーブルのベクトル量子化に使用され、バイナリ値ｘと、このバイナリ値を伸張したもの
【００２１】
【数４】
2004334846.tif 000003
【００２２】
との歪みは、以下の数式によって与えられる。
【００２３】
【数５】
2004334846.tif 000004
【００２４】
図４〜図９を参照して上述した、欠陥メモリ位置テーブルの圧縮および伸張を行うためのベクトル量子化の効率および有効性は、コードワードのコードブックの適切な構築に依存する。
入力ベクトルとも呼ばれるトレーニングベクトルの組が、コードブックの構築に一般に使用され、その結果、発生する可能性のあるベクトルの効率的な符号化を構築する際に、さまざまなベクトルの発生確率が考慮される。
明らかに、コードワードは、歪みを最小にする方法で、トレーニングベクトルのベクトル空間を分割する必要がある。
コードワードの個数が多くなるほど、コードブックをインデックスするのに必要なインデックスの個数が多くなる。
したがって、圧縮率は、コードブックサイズに依存するが、入力データの所与の組に対して最適な分割が与えられると、歪み率は、一般に、コードブックサイズが小さくなるにつれて増加する。
【００２５】
ベクトル量子化圧縮／伸張用のコードブックを構築するための複数の異なる手法が存在する。
有名な技法は、アルゴリズムの作成者Linde、Buzo、およびGrayに関連して「ＬＢＧアルゴリズム」または単に「ＬＢＧ」と呼ばれる。
図１０は、コードブックを構築するＬＢＧ技法のフロー制御図である。
ステップ１００２で、コードブックサイズＮ、コードワードベクトルの次元ｎ、および閾値カットオフパラメータｓが選択される。
コードブックサイズＮは、コードワードの個数である。
閾値カットオフパラメータｓは、ＬＢＧの連続した繰り返しによって生成されるコードブック間の相対的な歪みの変化の閾値であり、アルゴリズムは、この閾値未満になった時点で構築されたコードブックで終了する。
終了時現在のコードブックは、局所的に最適なコードブックに少なくとも近いものと仮定される。
さまざまな判断基準を使用して、コードブックサイズＮおよびコードワードベクトルの次元ｎを選択することができる。
上述したように、ベクトル量子化にコードブックを使用することにより達成できる圧縮比は、コードブックサイズＮに直接関係する。
最適に近いコードブックを選択する効率は、コードワードベクトルの次元ｎを大きくするように選択することによって促進され、それによって、ベクトル空間の分割により大きな多様性が提供される。
しかしながら、コードワードベクトルの次元ｎが、あまりにも大きくなるように選択されると、最適なコードブックを見つけ出すことはおろか、局所的に最適なコードブックに繰り返し到達することも、実際に不可能になる可能性がある。
【００２６】
ステップ１００４では、繰り返し変数ｋが、１に設定される。
繰り返し変数ｋは、ＬＢＧアルゴリズムの内部ループが実行される回数を追尾する。
次に、ステップ１００６で、ＬＢＧアルゴリズムは、初期コードブックとして、Ｎ個のｎ次元ベクトルＪの初期セットを選択する。
初期コードブックの選択は、さまざまな異なる方法で請け負うことができる。
１つの手法は、ランダムに発生したベクトルの組を使用することである。
ランダム発生の一手法では、区画のインデックスが、適切なサイズで適切に分布した擬似乱数ベクトルを生成する擬似乱数発生器の種として使用される。
この手法の利点は、コードワードを記憶する必要がないということである。
その代わり、対応するコードワードを再生するために、圧縮テーブルから抽出されたインデックスを同じ擬似乱数発生器に種として入力することができる。
別の手法は、各入力ベクトルをそれ自身の区画に配置し、次いで、区画の個数が容認できる少ない個数となるまで、各区画の重心ベクトルをコードワードとして使用して、近い区画をペア形式で共に合体するものである。
近さのメトリックは、ユークリッド距離の総和に基づくものであってもよいし、別の距離メトリックに基づくものであってもよい。
第３の手法は、入力ベクトル空間の重心を計算し、最初のコードワードとしてその重心を使用し、次に、その重心を体系的に摂動させて、初期コードブックの残りのコードワードを生成するものである。
【００２７】
ステップ１００８〜１０１３は、共に、繰り返しループを構成する。
この繰り返しループでは、容認できるレベルの歪みが得られるまで、最初に選択されたコードワードが変更される。
前の繰り返しで構築されたコードブックについて計算された歪みと、現在のコードブックについて計算された歪みとの差が、閾値ｓ未満になると、ＬＢＧアルゴリズムは終了し、現在のコードブックＱは、ステップ１０１４で返される。
このコードブックは、入力ベクトルのＮ個の区画Ｑｉからなる。
ここで、ｉは、０〜Ｎ−１の値を有し、各区画Ｑｉには、コードワードＪ（ｉ）が含まれる。
ステップ１００８で、他のどのコードワードよりも各コードワードＪ（ｉ）に近い入力ベクトルが、以下の数式に従って、コードワードＪ（ｉ）を含む区画ｉのメンバとして選択される。
【００２８】
【数６】
2004334846.tif 000005
【００２９】
上記数式において、ｉおよびｊ∈｛０，１，…Ｎ−１｝であり、例えば、
【００３０】
【数７】
2004334846.tif 000006
【００３１】
換言すると、ステップ１００８では、入力ベクトルが、Ｎ個の区画に分割される。
別法では、歪みｄを、ユークリッド距離ではなく、歪みを反映した別のメトリックとなるように定義してもよいことに留意されたい。
次に、ステップ１００９で、ステップ１００８のｋ回目の繰り返しで構築された現在のコードブックＱについて、全歪みＤ（ｋ）が計算される。
この全歪みは、次のように計算される。
【００３２】
【数８】
2004334846.tif 000007
【００３３】
上記数式において、ｑ（ｉ）ｊ∈Ｑｉであり、０<ｊ≦ｓｉｚｅｏｆ（Ｑｉ）（Ｑｉのサイズ）である。
【００３４】
ステップ１０１０で、ＬＢＧアルゴリズムは、ｋが１より大きいかどうかを判断する。
ｋが１より大きい場合には、Ｄ（ｋ−１）は、先に計算されているので、ステップ１０１１で、相対的な歪みの変化ΔＤｋｒｅｌを次のようにして計算することができる。
【００３５】
【数９】
2004334846.tif 000008
【００３６】
この相対的な歪みの変化ΔＤｋｒｅｌは、より良いコードブックの探索を続けるかどうかを判断するために、ステップ１０１１で閾値ｓと比較される。
相対的な歪みの変化が、閾値ｓ未満である場合には、現在の区画Ｑおよび現在のコードワードの組Ｊがそれぞれ返される。
そうではなく、ｋが１である場合、または、相対的な歪みの変化がｓよりも大きい場合には、現在のコードワードの組Ｊが、ステップ１０１３で変更され、内部ループの繰り返しがもう一度実行される。
この場合も、コードワードを変更するための多数の方法をステップ１０１３で使用することができる。
一手法は、Ｑの各区画について重心ベクトルを計算し、計算した重心ベクトルを次の繰り返しでコードワードの新しい組として使用することである。
【００３７】
ＬＢＧアルゴリズムは、欠陥メモリ位置テーブルを圧縮するベクトル量子化方式で使用するために調整する必要がある。
図１１は、本発明の一実施の形態におけるベクトル量子化欠陥メモリ位置テーブル圧縮および伸張用のコードブックを構築するために使用できる非対称歪みモデルＬＢＧアルゴリズムのフロー制御図である。
非対称歪みモデルＬＢＧアルゴリズムの多くのステップは、図１０を参照して説明したＬＢＧアルゴリズムのステップと類似しているので、再度説明しないこととする。
その代わり、相違点のみを解説する。
第１の相違点は、ステップ１１０６に見られる。
ステップ１１０６と図１０のステップ１００６とを比較すると、非対称歪みモデルＬＢＧアルゴリズムでは、ベクトルＪの初期セットが、ベクトル内の各位置に値「１」を有するベクトルを含まなければならないことが明らかになる。
このベクトルは、伸張時に、欠陥メモリ位置テーブルにおいて、「１」の値が「０」の値に歪められ、それによって、特定された欠陥のあるメモリ位置が変更されて、そのメモリ位置が欠陥のないことを示すことがないことを保証するために存在する必要がある。
図８を参照して上述したように、すべての位置が「１」の値からなる入力ベクトルに適したコードワードのみが、すべての位置が「１」の値からなるコードワードであるので、そのコードワードが、コードブックに存在する必要がある。
第２の相違点は、図１０の対応するステップ１００８および１００９と比較することにより、ステップ１１０８および１１０９に見ることができる。
ステップ１１０８から分かるように、非対称歪みモデルＬＢＧアルゴリズムは、歪みの対称的な尺度を反映するユークリッド距離の尺度を使用するのではなく、以下の非対称距離の尺度を使用する。
【００３８】
【数１０】
2004334846.tif 000009
【００３９】
上記数式において、
【００４０】
【数１１】
2004334846.tif 000010
【００４１】
第３の相違点は、図１０のステップ１０１３と比較することにより、ステップ１１１３に見られる。
ベクトルＪを含むコードブックが変更されると、すべての位置に値「１」を有するベクトルは、変更されたコードブックに含まれる必要がある。
また、重心の計算または他の距離に関連した技法が、変更を行うのに必要とされる場合には、上述した非対称距離メトリックをユークリッド距離メトリックに代わって使用する必要がある。
非対称歪みモデルＬＢＧアルゴリズムでは、重心は、区画内のベクトルの論理ＯＲとして計算される。
【００４２】
コードブックの最適なサイズは、入力ベクトル
【００４３】
【数１２】
2004334846.tif 000011
【００４４】
の確率分布ｐｘ、および、伸張ベクトル
【００４５】
【数１３】
2004334846.tif 000012
【００４６】
の条件付き確率分布
【００４７】
【数１４】
2004334846.tif 000013
【００４８】
から計算される相互情報量の大きさを最小にすることを通じて決定することができる。
上述したように、非対称歪み尺度
【００４９】
【数１５】
2004334846.tif 000014
【００５０】
が、欠陥メモリ位置テーブルのベクトル量子化に使用される。
【００５１】
非可逆エンコーダ／デコーダでは、条件付き確率分布
【００５２】
【数１６】
2004334846.tif 000015
【００５３】
上で、相互情報量
【００５４】
【数１７】
2004334846.tif 000016
【００５５】
を最小にする努力が行われる。
ここで、
【００５６】
【数１８】
2004334846.tif 000017
【００５７】
は、入力ベクトル
【００５８】
【数１９】
2004334846.tif 000018
【００５９】
の確率分布ｐｘ、および、伸張ベクトル
【００６０】
【数２０】
2004334846.tif 000019
【００６１】
の条件付き確率分布
【００６２】
【数２１】
2004334846.tif 000020
【００６３】
から計算され、以下の式によって与えられる。
【００６４】
【数２２】
2004334846.tif 000021
【００６５】
上記数式は、エンコーダが生成する平均歪みが、最大許容歪み
【００６６】
【数２３】
2004334846.tif 000022
【００６７】
以下であることを必要とするという制約に従うことを条件とする。
この条件は、次の数式で表される。
【００６８】
【数２４】
2004334846.tif 000023
【００６９】
最大許容歪みの制約を条件として、相互情報量
【００７０】
【数２５】
2004334846.tif 000024
【００７１】
を最小にすることにより、レート歪みの最適な比率Ｒ（δ）が得られる。
ここで、δは、圧縮／伸張歪みにより犠牲にできる欠陥のないメモリ位置の割合に等しい。
δは、以下のように、
【００７２】
【数２６】
2004334846.tif 000025
【００７３】
と関係する。
【００７４】
【数２７】
2004334846.tif 000026
【００７５】
上記数式において、ｎは、ベクトルの長さであり、ｐは、予想される不良セクタの比率である。
独立かつ全く同じに分布した欠陥の場合には、レート歪みの最適な比率は、次の式により与えられる。
【００７６】
【数２８】
2004334846.tif 000027
【００７７】
上記数式において、ｐは、欠陥のあるセクタの比率であり、Ｈ（ｐ）は、Ｈ（ｐ）＝−（ｐ）ｌｏｇ２ｐ−（１−ｐ）ｌｏｇ２（１−ｐ）である、欠陥のあるセクタの比率／確率のエントロピーである。
【００７８】
コードブックの最適なサイズは、２ｎＲ（δ）である。
ここで、ｎは、コードベクトルの次元である。
【００７９】
入力ベクトルおよびコードワードベクトルの次元ｎの最適なサイズも、最適化することができる。
ベクトルの次元があまりにも小さいと、コードブックの構築は、最適でないコードブックにあまりにも高速に収束することがあり、効果的に得ることができる圧縮率があまりにも小さくなることがある。
他方で、ベクトルの次元があまりにも大きいと、非対称歪みモデルＬＢＧアルゴリズムの各繰り返しで考慮する必要がある入力ベクトルの個数が、途方もなく大きくなり、符号化プロセスが、あまりにも複雑になることがある。
入力ベクトルおよびコードワードベクトルの次元ｎの最適なサイズは、試行錯誤法により決定することができる。
【００８０】
欠陥メモリ位置テーブルの効果的な圧縮／伸張方法を選択するには、さまざまな圧縮／伸張方法の性能指数を計算でき、最も良い性能指数を生み出す圧縮／伸張方法を選択できることが望ましい。
性能指数の最も良い値は、その性能指数の表現形式に応じて、最小値、最大値、０に最も近い値、またはそれ以外のある値とすることができる。
圧縮／伸張方法に役立つ性能指数は、以下で導出され、望ましい圧縮／伸張方法であるほど、大きな値を生成する。
【００８１】
所与の圧縮アルゴリズムｃｏｍｐの操作可能なレート歪み関数Ｒｃｏｍｐ（δ）が、性能指数の導出に使用される。
この関数は、正常なセクタが不良セクタに歪められる率δで動作する圧縮アルゴリズムｃｏｍｐが達成するビットレートを統計的または決定論的に特徴付ける。
この特徴付けは、漸近線による特徴付けから、最悪の場合は、ある最大符号化ビット数に至る特徴付けまでのいずれであってもよい。
この圧縮アルゴリズムが、正常なセクタが不良セクタに誤って特徴付けられる率δでｎビット（ｎは、前に使用したベクトルのビット数を表すｎとは異なる）を圧縮するのに使用される場合、圧縮ビットストリーム長が、すべてのｎに対してｎＲｃｏｍｐ（δ）とほぼ等しくなるべきであるという特性を、この特徴付けは、いかなる場合にも有する必要がある。
不良セクタの割合をｐとすると、これは、ｎ（１−ｐ）δ個の誤って特徴付けられた使用されないセクタに対応する一方、欠陥テーブルに従って実際に利用可能な正常なセクタの個数は、ｎ（１−ｐ）（１−δ）となる。
【００８２】
非可逆欠陥テーブル圧縮方式について考慮されるコストは、大容量記憶装置のコスト／セクタα、および、高速メモリのコスト／ビットβを含む。
このコストは、欠陥テーブルを作成して維持する対象となる大容量記憶装置のセクタの総数をα倍したものに、このテーブルが占めるビット数をβ倍したものを加えたものである。
総コストＣの方程式は、大容量記憶装置のセクタ数をｎとすると、次のようになる。
Ｃ＝αｎ＋βｎＲｃｏｍｐ（δ）
圧縮／伸張方法は、以下のように定義されるコスト制約Ｃｍａｘを満たす必要がある。
Ｃｍａｘ>Ｃ
圧縮／伸張方法ｃｏｍｐは、以下のように、圧縮欠陥メモリ位置テーブルによって使用されるメモリをコスト制約Ｃｍａｘの範囲内で最大にすることにより、歪みδについて最適化することができる。
制約：Ｃｍａｘ≧αｎ＋βｎＲｃｏｍｐ（δ）のもとで、
【００８３】
【数２９】
2004334846.tif 000028
【００８４】
一定のδに対して、ｎは、上記制約の等式を成立させるように最大化されるべきであるので、この最適化は、等価的に次のように表すことができる。
【００８５】
【数３０】
2004334846.tif 000029
【００８６】
項
【００８７】
【数３１】
2004334846.tif 000030
【００８８】
は、特定の計算環境に特有のパラメータのみを含む。
したがって、この項を上記最適化式から因数分解して、以下のように、特定の圧縮／伸張方法ｃｏｍｐの性能指数Ｆｃｏｍｐの式を与えることができる。
【００８９】
【数３２】
2004334846.tif 000031
【００９０】
すなわち、
【００９１】
【数３３】
2004334846.tif 000032
【００９２】
上記数式において、
【００９３】
【数３４】
2004334846.tif 000033
【００９４】
このように、性能指数Ｆｃｏｍｐは、効果的な圧縮／伸張方法を選択するための重要なツールである。
性能指数Ｆｃｏｍｐを使用して欠陥メモリ位置テーブルの圧縮／伸張方法を評価する方法は、本発明の一実施の形態を表す。
【００９５】
欠陥メモリ位置テーブルの圧縮／伸張の別の手法は、本発明のさらに別の実施の形態を表す技法である連長量子化を使用することである。
この技法では、連長符号化が使用されるが、図３Ａ〜図３Ｃを参照して上述した標準的な連長符号化と異なり、量子化された連長が使用され、それによって、圧縮テーブルでは、連長を指定する整数ではなく、インデックスを使用することが可能になる。
図１２および図１３は、本発明の一実施の形態を表す連長量子化圧縮／伸張方法を示している。
図１２は、連長量ｌｉを含む配列Ｌを示している。
ここで、ｉは、この例では０〜３１の値を有する。
連長量は、「０」の値の連続であって、その後に「１」の値の連続（run）が続く、「０」の値の連続のサイズを指定する。
未圧縮テーブルにおける長さｒの「０」の値の所与の連続に対して、量子化関数Ｑ（ｒ）は、連長量ｌｉが、Ｌにおいてｒ以下の最大量となるように、連長量ｌｉを選択する。
続いて、未圧縮テーブルからの次の一連のｌｉ＋１個の値は、これらｌｉ＋１個の値を、配列Ｌの量ｌｉのインデックスと置き換えるによって圧縮される。
量ｌｉのインデックスが伸張される場合、そのインデックスは、今度は、ｌｉ個の「０」の値の連続およびその後に続く（ｌｉ＋１−ｌｉ）個の「１」の値の連続によって置き換えられる。
より効率的な圧縮は、量子化された連長の可変長符号化を使用することにより得ることができる。
【００９６】
図１３は、短い例のビット列の連長量子化圧縮を示している。
図１３では、短い例のビット列１３０２が、圧縮ビット列１３０４に圧縮され、次に、圧縮ビット列１３０４が、伸張ビット列１３０６に伸張される。
第１ステップでは、１個の「０」の値の初期連続１３０８が、５ビットのインデックス１３１０に圧縮される。
この圧縮は、量子化関数Ｑをこの連長「１」に適用して、ｌ１を、長さ１の連続に対応する量と特定することにより行われる。
これは、単一の「０」の値およびその後に続く（ｌ２−ｌ１）個、すなわち１個の「１」の値を意味する。
もちろん、この最初のｌ１に基づく圧縮は、実際には拡張されて、実際のシステムでは、一般に使用されないであろう。
次のステップでは、「０」の値１３１２で開始する１０個の「０」の値の連続が、ｌ４に対応するＬ配列のインデックス「４」１３１４に置き換えられる。
これは、１０個の「０」の値の連続およびその後に続く（ｌ５−ｌ４）個、すなわち４個の「１」の値の連続を意味する。
最後に、１２個の「０」の値の連続も、ｌ４に対応するＬ配列のインデックス「４」１３１８に置き換えられる。
【００９７】
伸張には、それぞれのＬ配列のインデックスｉを特定することと、そのＬ配列のインデックスを、ｌｉ個の「０」の値およびその後に続く（ｌｉ＋１−ｌｉ）個の「１」の値に置き換えることが必要となる。
図１３に示すように、歪みが発生することがある。
伸張ビット列１３０６の「１」の値１３２０〜１３２４は、未圧縮ビット列１３０２ではもともと「０」の値であったものである。
このように、連長量子化は、ベクトル量子化の場合と同様に、非対称歪みを有する非可逆圧縮を意味する。
【００９８】
欠陥のないブロックの連長ｒが、確率分布ｐ（ｒ）に従ってランダムに発生する場合、分割
【００９９】
【数３５】
2004334846.tif 000034
【０１００】
を使用することにより生成される、正常なセクタが不良セクタと誤ってラベル付けされる平均率または予想率は、次の式に比例する。
ここで、Ｃｉは、ｋ個の区間Ｃｉ＝［ｌｉ，…，ｌｉ＋１−１］の１つを表す。
【０１０１】
【数３６】
2004334846.tif 000035
【０１０２】
上記数式において、ｐは、欠陥のあるセクタの予想率である。
最適な分割は、その問題を、有向グラフの最短経路を見つける問題に変形することにより見つけることができる。
グラフのあらゆる頂点は、可能なセルの境界を表す整数によってラベル付けされる。
頂点ｉは、あらゆる頂点ｊ>ｉにエッジｅｉ，ｊによって接続される。
このエッジｅｉ，ｊは、予想される歪み全体に対するそのセルの寄与によってラベル付けされるセル［ｉ，ｊ−１］を表すものである。
このグラフで可能な最短経路を見つけることは、最小コストの区画を見つけることと等価であり、したがって、量子化連長圧縮／伸張方法の最適量を見つけることと等価である。
この設計アルゴリズムは、量子化された連続（run）を固定長符号化する場合にのみ機能するが、区画にまたがる各エッジのコストに−λｐ（Ｃｉ）ｌｏｇ（ｐ（Ｃｉ））を取り入れることにより、可変長符号化に拡張することができる。
ここで、ｐ（Ｃｉ）は、区画Ｃｉに実現されないｒについてのｐ（ｒ）の総和である。
【０１０３】
図１４および図１５は、説明した本発明の実施の形態の１つを取り入れたメモリを提供するための方法の概要をフロー制御図の形式で提供する。
図１４は、説明した本発明の実施の形態の１つに従って圧縮された欠陥データ記憶位置テーブルを取り入れたメモリを提供するための一般的な方法を示している。
ステップ１４０２で、欠陥データ記憶位置テーブルが構築される。
上述したように、欠陥データ記憶位置テーブルには、各ビットがデータ記憶位置を表すビットマップの実施態様が便利である。
データ記憶位置は、例えば、ディスクブロックであってもよいし、ディスクセクタであってもよく、別の例としては、ナノワイヤベースのメモリの１つまたは２つ以上のナノワイヤ配列接合であってもよい。
ステップ１４０４で、欠陥データ記憶位置テーブルは、非可逆圧縮技法、例えば上述した非可逆圧縮技法の１つを使用して圧縮される。
本発明に関して、非可逆圧縮技法には、例えば、１ビットを使用してディスクブロックではなくディスクセクタを表すといったように、欠陥データ記憶位置テーブルの粒度を単に変更することは含まれないことに留意されたい。
次に、ステップ１４０６〜１４０９を含むループで、論理データ記憶位置のアクセス要求に対する応答および処理が行われる。
ステップ１４０７では、要求された論理データ記憶位置に対応する物理データ記憶位置を決定するために、欠陥データ記憶位置テーブルの十分な部分が伸張され、この物理データ記憶位置を使用して、そのデータ記憶位置からデータの取り出し、または、そのデータ記憶位置へのデータの書き込みが行われる。
【０１０４】
図１５は、図１４のステップ１４０４で起動される非可逆圧縮方法を示している。
ステップ１５０２で、初期コードブックが構築される。
この初期コードブックでは、上述したように、多数の区画のそれぞれに対して、コードワードが選択される。
ステップ１５０４で、ベクトルからなるベクトル空間が分割されて、最終的なコードブックが生成される。
欠陥データ記憶位置テーブルは、このベクトルに伸張される。
次に、ステップ１５０６〜１５０９を含むｆｏｒループで、上述したように、欠陥データ記憶位置テーブルが、固定長ベクトルに伸張され、各固定長ベクトルに対して、そのベクトルを含むコードブックの区画のインデックスが、コードブックから取り出されて、圧縮テーブルに追加される。
【０１０５】
本発明を、特定の実施の形態の観点で説明してきたが、本発明をこの実施の形態に限定することを意図するものではない。
本発明の精神の範囲内で変更があることは、当業者に明らかである。
例えば、上述したように、さまざまな欠陥メモリ位置テーブル圧縮／伸張方法の効率を比較するための性能指数を、数学的に作り直して、より大きな値を生成するのではなく、０により近い値、すなわちより大きさの小さな値を生成することにより、より大きな効率を示すものとすることができる。
制約を追加するか、または、異なる制約を含め、かつ、異なるパラメータについて効率を最大にすることにより、さまざまな別の性能指数を得ることができる。
ベクトル量子化方法および連長量子化方法は、多くの欠陥メモリ位置の分布に対して、非常に効率がよく、かつ、有益であることが分かるが、他の欠陥メモリ位置の分布に対しては、他の圧縮／伸張方法がより有益であると確認される場合がある。
これらの方法の変形は可能である。
この変形には、実施態様の変形、実施態様の用語およびスタイルの変形、境界条件の取り扱いの変形、コードブックの構造の変形、データ構造の変形、特定のビット値の意義および意味の変形、ならびにこのような多くの他の変形が含まれる。
一般に、各メモリ位置のアクセスには、アクセスされるメモリ位置の物理アドレスを決定するために、圧縮欠陥メモリ位置テーブルを伸張することが必要となる。
しかしながら、テーブルをセグメントで圧縮して、それらのセグメントへのインデックスを設けることが可能な場合があり、それによって、テーブル全体を伸張する必要なく、テーブルの関連部分のみを伸張することが可能となる。
【０１０６】
上記説明は、説明のためのものであって、具体的な専門用語を使用して、本発明の十分な理解を提供した。
しかしながら、その具体的な詳細は、本発明を実践するために必要とされないことが当業者には容易に分かる。
本発明の具体的な実施の形態の上記説明は、例示および説明の目的で提供される。
それらの説明は、本発明を網羅することを意図するものでもなく、本発明を開示した正確な形に限定することを意図するものでもない。
多くの変更および変形が、上記教示に鑑みて可能であることは明らかである。
実施の形態は、本発明の原理およびその実際の用途を最もよく説明するために図示および説明されているので、他の当業者は、意図した特定の使用に適合するように、本発明およびさまざまな変更を有するさまざまな実施の形態を最もよく利用することができる。
本発明の範囲は、添付の特許請求の範囲およびその均等物によって画定されることが意図される。
【図面の簡単な説明】
【０１０７】
【図１】３次元メモリの説明図である。
【図２】欠陥のあるメモリ位置を含むメモリ内、例えば図１に示すメモリ内で欠陥のないメモリ位置をアドレス指定する多数の可能な技法の１つを示す図である。
【図３Ａ】連長符号化技法を示す図である。
【図３Ｂ】連長符号化技法を示す図である。
【図３Ｃ】連長符号化技法を示す図である。
【図４】本発明の一実施の形態を表す欠陥メモリ位置ビットマップを圧縮するベクトル量子化方法を示す図である。
【図５】本発明の一実施の形態を表す欠陥メモリ位置ビットマップを圧縮するベクトル量子化方法を示す図である。
【図６】本発明の一実施の形態を表す欠陥メモリ位置ビットマップを圧縮するベクトル量子化方法を示す図である。
【図７】本発明の一実施の形態を表す欠陥メモリ位置ビットマップを圧縮するベクトル量子化方法を示す図である。
【図８】本発明の一実施の形態を表す欠陥メモリ位置ビットマップを圧縮するベクトル量子化方法を示す図である。
【図９】本発明の一実施の形態を表す欠陥メモリ位置ビットマップを圧縮するベクトル量子化方法を示す図である。
【図１０】コードブックを構築するＬＢＧ技法のフロー制御図である。
【図１１】本発明の一実施の形態におけるベクトル量子化欠陥メモリ位置テーブル圧縮および伸張用のコードブックを構築するために使用できる非対称歪みモデルＬＢＧアルゴリズムのフロー制御図である。
【図１２】本発明の一実施の形態を表す連長量子化圧縮／伸張方法を示す図である。
【図１３】本発明の一実施の形態を表す連長量子化圧縮／伸張方法を示す図である。
【図１４】説明した本発明の実施の形態の１つを取り入れたメモリを提供するための方法の概要のフロー制御図である。
【図１５】説明した本発明の実施の形態の１つを取り入れたメモリを提供するための方法の概要のフロー制御図である。
【符号の説明】
【０１０８】
３０２・・・欠陥メモリ位置ビットマップ、
３０４・・・ビットマップの圧縮版、
３０５〜３０７・・・空白ビット、
３１０・・・ビット列、
３１２・・・４ビット整数、
３１４・・・１ビット値「０」、
３１６・・・ビット列、
３１８・・・４ビット整数、
３２０・・・１ビット、
３２８・・・最初の６ビット、
３３０・・・未圧縮ビットマップ、
３３２・・・ビットマップの圧縮版、
４０２・・・欠陥メモリ位置ビットマップ、
４０４〜４０７・・・ビットベクトル、
５０２・・・ビットベクトル、
５０４・・・エンコーダ、
５０６・・・インデックスベクトル、
５０８・・・デコーダ、
５１０・・・ベクトル、
６０２・・・入力ベクトル、
６０４・・・インデックスベクトル、
７００・・・テーブル、
７０２・・・ラベル、
７０４・・・列、
８０２・・・長方形、
８０４〜８０７・・・グループ（区画）、
８１１・・・コードワード、
９０２・・・入力ビットマップ、
９０４・・・ビットベクトル「００００」、
９０６・・・インデックスベクトル、
９０８・・・伸張ビットマップ、
９１２・・・ベクトル「００００」ビットベクトル、
９１４・・・ビットベクトル
９１６〜９２０・・・ビット、
１３０２・・・ビット列、
１３０４・・・圧縮ビット列、
１３０６・・・伸張ビット列、
１３１４・・・インデックス「４」、
１３２０〜１３２４・・・「１」の値、
【図１】
2004334846.tif 000039
【図２】
2004334846.tif 000040
【図３Ａ】
2004334846.tif 000041
【図３Ｂ】
2004334846.tif 000042
【図３Ｃ】
2004334846.tif 000043
【図４】
2004334846.tif 000044
【図５】
2004334846.tif 000045
【図６】
2004334846.tif 000046
【図７】
2004334846.tif 000047
【図８】
2004334846.tif 000048
【図９】
2004334846.tif 000049
【図１０】
2004334846.tif 000050
【図１１】
2004334846.tif 000051
【図１２】
2004334846.tif 000052
【図１３】
2004334846.tif 000053
【図１４】
2004334846.tif 000054
【図１５】
2004334846.tif 000055