JPH07273667A - 連想記憶メモリ内の複数辞書管理を改良したlempel−zivデータ圧縮のための装置、及び方法 - Google Patents
連想記憶メモリ内の複数辞書管理を改良したlempel−zivデータ圧縮のための装置、及び方法Info
- Publication number
- JPH07273667A JPH07273667A JP7013347A JP1334795A JPH07273667A JP H07273667 A JPH07273667 A JP H07273667A JP 7013347 A JP7013347 A JP 7013347A JP 1334795 A JP1334795 A JP 1334795A JP H07273667 A JPH07273667 A JP H07273667A
- Authority
- JP
- Japan
- Prior art keywords
- dictionary
- data
- character
- compression
- memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3082—Vector coding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/005—Statistical coding, e.g. Huffman, run length coding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3088—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
(57)【要約】
【目的】 ロスレス・タイプのデータ圧縮アルゴリズム
が有限サイズを有するメモリ・ベースの辞書を用いて、
データ圧縮、及び伸長を容易にすることを目的とする。 【構成】 辞書のリセットによるデータ圧縮の際の損失
を低減させるために、待機辞書が、以前、現行辞書に記
憶されていた符号化済みデータ項目の部分集合を記憶す
るために用いられる。本発明の第2の実施態様では、連
想記憶メモリ(CAM)内に作成された辞書に含まれるデー
タ項目のアドレス位置に従って、データが圧縮/伸長さ
れる。本発明の第3の実施態様では、待機辞書の最小メ
モリ/高圧縮能力技法が、文字あたり単一サイクルの高
速符号化/復号化機能を有したCAM回路と組み合わせられ
る。本発明の第4の実施態様では、選択的上書き・辞書
切り替え技法が使用され、全データ項目を常に文字列の
符号化に使用できる。
が有限サイズを有するメモリ・ベースの辞書を用いて、
データ圧縮、及び伸長を容易にすることを目的とする。 【構成】 辞書のリセットによるデータ圧縮の際の損失
を低減させるために、待機辞書が、以前、現行辞書に記
憶されていた符号化済みデータ項目の部分集合を記憶す
るために用いられる。本発明の第2の実施態様では、連
想記憶メモリ(CAM)内に作成された辞書に含まれるデー
タ項目のアドレス位置に従って、データが圧縮/伸長さ
れる。本発明の第3の実施態様では、待機辞書の最小メ
モリ/高圧縮能力技法が、文字あたり単一サイクルの高
速符号化/復号化機能を有したCAM回路と組み合わせられ
る。本発明の第4の実施態様では、選択的上書き・辞書
切り替え技法が使用され、全データ項目を常に文字列の
符号化に使用できる。
Description
【0001】
【産業上の利用分野】本発明は、全般的には、データ圧
縮、伸長方法、及びその装置に関し、より詳しくは、辞
書を使用して圧縮、及び伸長情報を記憶するロスレス・
データ圧縮アルゴリズムの実施に関する。
縮、伸長方法、及びその装置に関し、より詳しくは、辞
書を使用して圧縮、及び伸長情報を記憶するロスレス・
データ圧縮アルゴリズムの実施に関する。
【0002】
【従来の技術】圧縮技法の主要なタイプは、バイナリ・
シーケンス、又は、他では個々の文字を符号化するため
に使用されない「コードワード」を使用して複数文字列を
符号化する。その文字列は、「アルファベット」、又は単
一文字列で構成される。このアルファベットは、コンプ
レッサが処理する最小の固有情報を表す。従って、8ビ
ットを使用して文字を表すアルゴリズムでは、アルファ
ベットに256個の固有文字を有することになる。圧縮
は、所与のファイルのデータ・ストリームにおいて符号
化方式で表される複数文字列が出現する程、効果的であ
る。人間の言語間の翻訳のために使用される2か国語辞
書から類推して、圧縮前コードと圧縮済みコードの間の
マッピングを実施する装置を一般に「辞書」と呼ぶ。
シーケンス、又は、他では個々の文字を符号化するため
に使用されない「コードワード」を使用して複数文字列を
符号化する。その文字列は、「アルファベット」、又は単
一文字列で構成される。このアルファベットは、コンプ
レッサが処理する最小の固有情報を表す。従って、8ビ
ットを使用して文字を表すアルゴリズムでは、アルファ
ベットに256個の固有文字を有することになる。圧縮
は、所与のファイルのデータ・ストリームにおいて符号
化方式で表される複数文字列が出現する程、効果的であ
る。人間の言語間の翻訳のために使用される2か国語辞
書から類推して、圧縮前コードと圧縮済みコードの間の
マッピングを実施する装置を一般に「辞書」と呼ぶ。
【0003】一般に、辞書に基づく圧縮技法の有用性
は、複数文字列に対応する辞書項目が使用される頻度に
依存する。据え付けの辞書が、あるファイル・タイプの
ために最適化されると、その辞書は他のファイル・タイ
プには適さないものとなる。例えば、新聞のテキスト・
ファイルにあるような多数の文字の組み合わせを含む辞
書は、データベース・ファイル、スプレッドシート・ファ
イル、ビットマップ・グラフィクス・ファイル、コンピュ
ータ援用設計ファイル等を効率的に圧縮することには適
さない。
は、複数文字列に対応する辞書項目が使用される頻度に
依存する。据え付けの辞書が、あるファイル・タイプの
ために最適化されると、その辞書は他のファイル・タイ
プには適さないものとなる。例えば、新聞のテキスト・
ファイルにあるような多数の文字の組み合わせを含む辞
書は、データベース・ファイル、スプレッドシート・ファ
イル、ビットマップ・グラフィクス・ファイル、コンピュ
ータ援用設計ファイル等を効率的に圧縮することには適
さない。
【0004】所与の入力データが圧縮されている間に、
その入力データを圧縮するために使用される辞書が発展
する適応圧縮技法が知られている。圧縮前入力データに
おける、全ての単一文字を表すコードワードが辞書内に
置かれる。そのファイルで、複数文字列に出会うと、辞
書に追加項目が加えられる。追加されたその辞書項目
は、次にその複数文字列が現れた時に、それを符号化す
るために使用される。例えば、現時点の入力パターンの
マッチングは、現時点で辞書に存在するフレーズに対し
てしか試みられない。マッチングが失敗するたびに、辞
書に新しいフレーズが追加される。その新しいフレーズ
は、マッチしたフレーズを1つの記号(例えば、マッチ
ングを「妨げる」入力記号)で拡張することによって形成
される。圧縮は、辞書が発展する際に、ファイル内で最
も頻繁に出現する複数文字列に出会う程、効果的に行わ
れる。
その入力データを圧縮するために使用される辞書が発展
する適応圧縮技法が知られている。圧縮前入力データに
おける、全ての単一文字を表すコードワードが辞書内に
置かれる。そのファイルで、複数文字列に出会うと、辞
書に追加項目が加えられる。追加されたその辞書項目
は、次にその複数文字列が現れた時に、それを符号化す
るために使用される。例えば、現時点の入力パターンの
マッチングは、現時点で辞書に存在するフレーズに対し
てしか試みられない。マッチングが失敗するたびに、辞
書に新しいフレーズが追加される。その新しいフレーズ
は、マッチしたフレーズを1つの記号(例えば、マッチ
ングを「妨げる」入力記号)で拡張することによって形成
される。圧縮は、辞書が発展する際に、ファイル内で最
も頻繁に出現する複数文字列に出会う程、効果的に行わ
れる。
【0005】伸長の間、辞書は同様の方法で作成され
る。従って、圧縮済みファイルで文字列のコードワード
に出会った時、辞書は、対応する文字列を再作成するた
めに必要な情報を取り込む。広く使用されている、圧
縮、及び伸長情報を記憶するための辞書を使用する圧縮
アルゴリズムは、それぞれLZ1、及びLZ2と呼ばれる第
1、及び第2のLempel-Ziv法である。これらの方法は、
Eastman他の米国特許第4,464,650号で開示され、このア
ルゴリズムに対する様々な改良がWelchの米国特許第4,5
58,302号、及びMiller他の第4,814,746号で開示されて
いる。これらの参考文献は、更に辞書の使用法を説明し
ている。
る。従って、圧縮済みファイルで文字列のコードワード
に出会った時、辞書は、対応する文字列を再作成するた
めに必要な情報を取り込む。広く使用されている、圧
縮、及び伸長情報を記憶するための辞書を使用する圧縮
アルゴリズムは、それぞれLZ1、及びLZ2と呼ばれる第
1、及び第2のLempel-Ziv法である。これらの方法は、
Eastman他の米国特許第4,464,650号で開示され、このア
ルゴリズムに対する様々な改良がWelchの米国特許第4,5
58,302号、及びMiller他の第4,814,746号で開示されて
いる。これらの参考文献は、更に辞書の使用法を説明し
ている。
【0006】実際の使用にあたっては、圧縮/伸長に使
用できるメモリの量は有限である。従って、辞書内の項
目数は有限であり、その項目を符号化するために使用さ
れるコードワードの長さは制限を受ける。通常、コード
ワードの長さは12ビットから16ビットまで様々である。
入力データ・シーケンスが十分長い場合、辞書は最終的
に「満杯になる」。この時点では、いくつかの動作が選択
可能である。例えば、辞書をその状態で凍結させ、入力
シーケンスの残りの部分に対して使用することができ
る。第2のアプローチでは、辞書がリセットされ、新し
い辞書が最初から作成される。第3のアプローチでは、
圧縮率が低下するまで、しばらくの間辞書を凍結させ、
その後リセットする。
用できるメモリの量は有限である。従って、辞書内の項
目数は有限であり、その項目を符号化するために使用さ
れるコードワードの長さは制限を受ける。通常、コード
ワードの長さは12ビットから16ビットまで様々である。
入力データ・シーケンスが十分長い場合、辞書は最終的
に「満杯になる」。この時点では、いくつかの動作が選択
可能である。例えば、辞書をその状態で凍結させ、入力
シーケンスの残りの部分に対して使用することができ
る。第2のアプローチでは、辞書がリセットされ、新し
い辞書が最初から作成される。第3のアプローチでは、
圧縮率が低下するまで、しばらくの間辞書を凍結させ、
その後リセットする。
【0007】第1の代替案は、基本圧縮アルゴリズムの
学習能力が失われる欠点がある。入力データの統計が変
化した場合、その辞書はもはやこれらの変化に追随でき
ず、圧縮率の急激な低下が発生する。
学習能力が失われる欠点がある。入力データの統計が変
化した場合、その辞書はもはやこれらの変化に追随でき
ず、圧縮率の急激な低下が発生する。
【0008】辞書をリセットする方法は、アルゴリズム
の学習能力を維持するが、空の辞書に切り替えた時に、
一時的に圧縮率が低下する(例えば、以前に累積された
そのソースの知識が全て失われる)。例えば、リセット
時には、全ての辞書項目が無差別に使用不能となる。従
って、最近得られた、以降のデータ圧縮で使用されるで
あろう辞書項目は、以降、圧縮、及び伸長処理の助けと
なる確率が低い、より古いデータ項目と共に失われる。
辞書のリセット時に全てのデータ項目が失われるので、
圧縮率は一時的に低下する可能性がある。従って、圧縮
効率は最適圧縮効率より低い。
の学習能力を維持するが、空の辞書に切り替えた時に、
一時的に圧縮率が低下する(例えば、以前に累積された
そのソースの知識が全て失われる)。例えば、リセット
時には、全ての辞書項目が無差別に使用不能となる。従
って、最近得られた、以降のデータ圧縮で使用されるで
あろう辞書項目は、以降、圧縮、及び伸長処理の助けと
なる確率が低い、より古いデータ項目と共に失われる。
辞書のリセット時に全てのデータ項目が失われるので、
圧縮率は一時的に低下する可能性がある。従って、圧縮
効率は最適圧縮効率より低い。
【0009】辞書ベースのデータ圧縮効率を向上させる
ための1つの方法は、Bunton、及びBorriello著「PRACTI
CAL DICTIONARY MANAGEMENT FOR HARDWARE DATA COMPRE
SSION」(Communications of the ACM、1992年1月、第35
巻、第1号)で論じられている。全辞書のリセットは、
一度に1つの辞書項目を置換することによって回避でき
る。LRUコードが選択され、次の入力文字列で上書きさ
れる。Bunton他によるこの方法は、圧縮率を改良させた
が、LRU状況を識別するために各辞書項目ごとに多数の
追加ビットを必要とする欠点がある。各辞書項目ごとの
追加ビットによって、ハードウェアのコストが大幅に増
加する。
ための1つの方法は、Bunton、及びBorriello著「PRACTI
CAL DICTIONARY MANAGEMENT FOR HARDWARE DATA COMPRE
SSION」(Communications of the ACM、1992年1月、第35
巻、第1号)で論じられている。全辞書のリセットは、
一度に1つの辞書項目を置換することによって回避でき
る。LRUコードが選択され、次の入力文字列で上書きさ
れる。Bunton他によるこの方法は、圧縮率を改良させた
が、LRU状況を識別するために各辞書項目ごとに多数の
追加ビットを必要とする欠点がある。各辞書項目ごとの
追加ビットによって、ハードウェアのコストが大幅に増
加する。
【0010】必要とされる辞書のリセット回数を減らす
1つの方法は、辞書のメモリ・サイズを大きくすること
である。しかし、メモリ・サイズを大きくすると、コス
トが増加し、辞書のデータ項目を探索するために必要な
時間を増大させる可能性がある。更に、現在のLRU記録
方法は、大きなメモリ・サイズにおいては実際的ではな
くなっている。
1つの方法は、辞書のメモリ・サイズを大きくすること
である。しかし、メモリ・サイズを大きくすると、コス
トが増加し、辞書のデータ項目を探索するために必要な
時間を増大させる可能性がある。更に、現在のLRU記録
方法は、大きなメモリ・サイズにおいては実際的ではな
くなっている。
【0011】圧縮/伸長性能に関する別のボトルネック
は、以前に出現した文字列を辞書で探索するのに必要な
時間の量である。従来、ハッシング・アルゴリズムを使
用して、以前に記憶された辞書項目が探索されて、新し
い文字列が使用できるメモリ位置が見付けられた。典型
的な構成は、Welchの米国特許第4,558,302号(LZW)で開
示されたように、各辞書項目ごとに2つないし4つの記
憶位置を有するRAMメモリを使用する。
は、以前に出現した文字列を辞書で探索するのに必要な
時間の量である。従来、ハッシング・アルゴリズムを使
用して、以前に記憶された辞書項目が探索されて、新し
い文字列が使用できるメモリ位置が見付けられた。典型
的な構成は、Welchの米国特許第4,558,302号(LZW)で開
示されたように、各辞書項目ごとに2つないし4つの記
憶位置を有するRAMメモリを使用する。
【0012】ハッシング・アルゴリズムは、ある簡単な
データ・ワード内容の数学関数に基づくRAM空間のアドレ
スに、固有の各辞書項目をマップする。そのようなアル
ゴリズムは、ワード全体、又はワード内のフィールドを
使用して、マッピング・アドレスを計算するので、メモ
リ内の同じ位置に複数のデータ・ワードがマップされ、
ハッシング衝突が発生する可能性がある。この場合、そ
のデータ用に代替位置を見付けなければならない。RAM
の記憶場所が満杯になると、必然的に、第2の辞書項目
は、以前に使用された位置にハッシュされる。この状況
は圧縮が継続可能なうちに、解決されなければならな
い。ハッシング回路、及び特にハッシング衝突によっ
て、圧縮/伸長システムの論理機構にかなりの複雑さが
加わり、システムのスループットが低減する。
データ・ワード内容の数学関数に基づくRAM空間のアドレ
スに、固有の各辞書項目をマップする。そのようなアル
ゴリズムは、ワード全体、又はワード内のフィールドを
使用して、マッピング・アドレスを計算するので、メモ
リ内の同じ位置に複数のデータ・ワードがマップされ、
ハッシング衝突が発生する可能性がある。この場合、そ
のデータ用に代替位置を見付けなければならない。RAM
の記憶場所が満杯になると、必然的に、第2の辞書項目
は、以前に使用された位置にハッシュされる。この状況
は圧縮が継続可能なうちに、解決されなければならな
い。ハッシング回路、及び特にハッシング衝突によっ
て、圧縮/伸長システムの論理機構にかなりの複雑さが
加わり、システムのスループットが低減する。
【0013】通常、圧縮されるデータに基づく辞書は、
全てのデータ項目のうちのわずかな部分集合である。従
って、ハッシング衝突を低減する1つの方法は、辞書記
憶位置の数を増やすことである。しかし、このアプロー
チは、システムの複雑さ、及びコストを増大させ、メモ
リと圧縮/伸長を制御する論理機構との統合を妨げる。
更に、より大きなメモリでは、文字列が以前にメモリ内
にロードされたかどうかを判定するために必要な探索時
間が増加する恐れがある。
全てのデータ項目のうちのわずかな部分集合である。従
って、ハッシング衝突を低減する1つの方法は、辞書記
憶位置の数を増やすことである。しかし、このアプロー
チは、システムの複雑さ、及びコストを増大させ、メモ
リと圧縮/伸長を制御する論理機構との統合を妨げる。
更に、より大きなメモリでは、文字列が以前にメモリ内
にロードされたかどうかを判定するために必要な探索時
間が増加する恐れがある。
【0014】データ圧縮/伸長に関する別のボトルネッ
クは、データ文字列を符号化、及び復号化するために必
要な時間の量、及び回路の複雑さである。例えば、デー
タ圧縮の間、文字列が、以前にメモリ内に記憶されたど
のデータ・フレーズともマッチしないことが分かった後
で、占有されていないデータ・メモリ位置に記憶されな
ければならない。その記憶された文字列、及び以前に辞
書のデータ項目にマッチした文字列のサブフレーズを固
有に識別するコードワードが生成されなければならな
い。次に、そのコードワードは、以降のデータ圧縮動作
時に追加文字と組み合わせが可能となるように記憶され
なければならない。
クは、データ文字列を符号化、及び復号化するために必
要な時間の量、及び回路の複雑さである。例えば、デー
タ圧縮の間、文字列が、以前にメモリ内に記憶されたど
のデータ・フレーズともマッチしないことが分かった後
で、占有されていないデータ・メモリ位置に記憶されな
ければならない。その記憶された文字列、及び以前に辞
書のデータ項目にマッチした文字列のサブフレーズを固
有に識別するコードワードが生成されなければならな
い。次に、そのコードワードは、以降のデータ圧縮動作
時に追加文字と組み合わせが可能となるように記憶され
なければならない。
【0015】データ伸長の間、圧縮済みデータのコード
ワードは、Hewlett-Packard Journal(1989年6月、27な
いし31ページ)に記載されているように、圧縮前データ
文字、及び追加コードワード、例えば圧縮前データの列
の残りとのリンクを表すことができる。ここで記載され
たHP-DC技法は、コードワードを順次に符号化し、圧縮
済みコードによって決定される辞書のアドレス位置に、
次のバイト(K)と連結されたコードワード(OMEGA)を記憶
する。従って、実際の伸長済みデータの列が生成される
前に、辞書を数回読む必要がある。圧縮、及び伸長処理
が反復的なものなので、辞書のアクセスに使用されるク
ロック・サイクル以外のあらゆる追加クロック・サイクル
によって全体の圧縮、及び伸長時間が大幅に増大する。
しかし、現在の符号化、復号化、及び辞書探索方法で
は、各入力文字を圧縮、又は伸長するのに2回以上のク
ロック・サイクルが必要である。更に、これらの符号
化、及び復号化アルゴリズムには、複雑な圧縮、及び伸
長ハードウェアが必要となる。
ワードは、Hewlett-Packard Journal(1989年6月、27な
いし31ページ)に記載されているように、圧縮前データ
文字、及び追加コードワード、例えば圧縮前データの列
の残りとのリンクを表すことができる。ここで記載され
たHP-DC技法は、コードワードを順次に符号化し、圧縮
済みコードによって決定される辞書のアドレス位置に、
次のバイト(K)と連結されたコードワード(OMEGA)を記憶
する。従って、実際の伸長済みデータの列が生成される
前に、辞書を数回読む必要がある。圧縮、及び伸長処理
が反復的なものなので、辞書のアクセスに使用されるク
ロック・サイクル以外のあらゆる追加クロック・サイクル
によって全体の圧縮、及び伸長時間が大幅に増大する。
しかし、現在の符号化、復号化、及び辞書探索方法で
は、各入力文字を圧縮、又は伸長するのに2回以上のク
ロック・サイクルが必要である。更に、これらの符号
化、及び復号化アルゴリズムには、複雑な圧縮、及び伸
長ハードウェアが必要となる。
【0016】従って、辞書ベースのデータ圧縮システム
の性能を改良し、辞書ベースのデータ圧縮/伸長システ
ムにおけるデータの符号化、及び復号化を改良する必要
がある。
の性能を改良し、辞書ベースのデータ圧縮/伸長システ
ムにおけるデータの符号化、及び復号化を改良する必要
がある。
【0017】
【発明が解決しようとする課題】従って、本発明の課題
は、辞書ベースの圧縮システムにおいて、辞書がリセッ
トされた時に被るデータ圧縮の損失を最小限に抑えるこ
とである。
は、辞書ベースの圧縮システムにおいて、辞書がリセッ
トされた時に被るデータ圧縮の損失を最小限に抑えるこ
とである。
【0018】本発明の第2の課題は、統計的特性が変化
する入力データ・シーケンスに関するデータ圧縮システ
ムの適応特性を向上させることである。
する入力データ・シーケンスに関するデータ圧縮システ
ムの適応特性を向上させることである。
【0019】本発明の別の課題は、辞書ベースのデータ
圧縮/伸長システムにおいて、文字列を符号化/復号化す
るために必要な時間の量を低減させることである。
圧縮/伸長システムにおいて、文字列を符号化/復号化す
るために必要な時間の量を低減させることである。
【0020】本発明の別の課題は、最小量のメモリを有
する、辞書ベースのデータ圧縮/伸長システムにおい
て、データ圧縮能力を最大にすることである。
する、辞書ベースのデータ圧縮/伸長システムにおい
て、データ圧縮能力を最大にすることである。
【0021】本発明の別の課題は、辞書ベースのデータ
圧縮/伸長システムを選択的に更新するために必要とさ
れるハードウェア、及び時間の量を最小限に抑えること
である。
圧縮/伸長システムを選択的に更新するために必要とさ
れるハードウェア、及び時間の量を最小限に抑えること
である。
【0022】
【課題を解決するための手段】本発明の1つの実施態様
は、現行辞書、及び待機辞書を同時に作成するデータ圧
縮/伸長システムである。現行辞書は、標準データ圧縮
エンジンの辞書と同じ目的を果たす。待機辞書は、現行
辞書のフレーズの部分集合を含むように、現行辞書と並
行的に作成される。このサブセットは、ソース・データ
内で出現するパターンを最もよく特徴付けるように選択
される。現行辞書が満杯になると、待機辞書と置換さ
れ、新しい待機辞書の作成が継続され、かつ圧縮に使用
される新しい現行辞書として、「最初から」作成される。
従って、コンプレッサは決して空の辞書に切り替えるこ
となく、限られた辞書のメモリ・サイズを有することに
よって発生するデータ圧縮率の低下が抑えられる。
は、現行辞書、及び待機辞書を同時に作成するデータ圧
縮/伸長システムである。現行辞書は、標準データ圧縮
エンジンの辞書と同じ目的を果たす。待機辞書は、現行
辞書のフレーズの部分集合を含むように、現行辞書と並
行的に作成される。このサブセットは、ソース・データ
内で出現するパターンを最もよく特徴付けるように選択
される。現行辞書が満杯になると、待機辞書と置換さ
れ、新しい待機辞書の作成が継続され、かつ圧縮に使用
される新しい現行辞書として、「最初から」作成される。
従って、コンプレッサは決して空の辞書に切り替えるこ
となく、限られた辞書のメモリ・サイズを有することに
よって発生するデータ圧縮率の低下が抑えられる。
【0023】この現行辞書は、新しいデータ項目を追加
するのに十分な空の空間を有した状態で始まり、それに
よって、ソース・データへの適応を継続することが可能
となる。この特徴は、様々な統計を有するソース・デー
タを圧縮するうえで極めて重要なものである。より少な
い数のデータ項目を有する待機辞書に切り替わることに
よって、幾つかの情報が失われるが、辞書を最大効率に
なるよう再作成する時間は、辞書を完全にリセットする
よりずっと短い。従って、データ圧縮率に対する悪影響
を小さくして、より小さい辞書メモリを使用することが
できる。
するのに十分な空の空間を有した状態で始まり、それに
よって、ソース・データへの適応を継続することが可能
となる。この特徴は、様々な統計を有するソース・デー
タを圧縮するうえで極めて重要なものである。より少な
い数のデータ項目を有する待機辞書に切り替わることに
よって、幾つかの情報が失われるが、辞書を最大効率に
なるよう再作成する時間は、辞書を完全にリセットする
よりずっと短い。従って、データ圧縮率に対する悪影響
を小さくして、より小さい辞書メモリを使用することが
できる。
【0024】待機辞書に格納される現行辞書の部分集合
を選択する基準は、特定のアプリケーションに応じて変
更することができる。例えば、符号化済みデータ列は、
現行辞書のデータ項目に少なくとも1回マッチした場
合、待機辞書にコピーされる。又、待機辞書の項目は、
列の長さ、最近のデータ項目のマッチ、又は所与のアプ
リケーションで圧縮を最大にする項目を識別する任意の
基準に応じて選択することができる。
を選択する基準は、特定のアプリケーションに応じて変
更することができる。例えば、符号化済みデータ列は、
現行辞書のデータ項目に少なくとも1回マッチした場
合、待機辞書にコピーされる。又、待機辞書の項目は、
列の長さ、最近のデータ項目のマッチ、又は所与のアプ
リケーションで圧縮を最大にする項目を識別する任意の
基準に応じて選択することができる。
【0025】更に、現行辞書から待機辞書に切り替える
(リセットする)ための基準は、データ、又はアプリケー
ションのタイプに応じて変更することができる。例え
ば、現行辞書は、有効なデータ項目で満杯になった時に
リセットすることができる。代替案として、Kato他の米
国特許第4,847,619号に記載されたように、現行辞書
を、圧縮に使用して、所定の性能閾値より低くなった時
にリセットすることができる。
(リセットする)ための基準は、データ、又はアプリケー
ションのタイプに応じて変更することができる。例え
ば、現行辞書は、有効なデータ項目で満杯になった時に
リセットすることができる。代替案として、Kato他の米
国特許第4,847,619号に記載されたように、現行辞書
を、圧縮に使用して、所定の性能閾値より低くなった時
にリセットすることができる。
【0026】主としてデータ特性に変化のない状況での
待機辞書の第2の応用例では、コンプレッサはデータに
対して2パスを行う。第1パスで、コンプレッサはその
データの大きなサンプルを走査する。そのサンプルは、
現行辞書を何度も満杯にさせるのに十分な大きさであ
り、それによって、待機辞書はサンプルの大きさに対応
する回数分だけ現行辞書と置換される。数回繰り返し
て、アルゴリズムによって、データ・サンプルに対して
強力にカスタマイズされた辞書が作成されるまで、辞書
が切り替わるたびに現行辞書が「洗練」される。次に、カ
スタマイズされた辞書は、第2パスの間に、入力データ
を圧縮するために圧縮エンジンによって使用される、単
一参照辞書としてセットされる。それによって、カスタ
マイズされた辞書は、同じデータに対する単一の動的辞
書よりもかなり高い性能を示す。
待機辞書の第2の応用例では、コンプレッサはデータに
対して2パスを行う。第1パスで、コンプレッサはその
データの大きなサンプルを走査する。そのサンプルは、
現行辞書を何度も満杯にさせるのに十分な大きさであ
り、それによって、待機辞書はサンプルの大きさに対応
する回数分だけ現行辞書と置換される。数回繰り返し
て、アルゴリズムによって、データ・サンプルに対して
強力にカスタマイズされた辞書が作成されるまで、辞書
が切り替わるたびに現行辞書が「洗練」される。次に、カ
スタマイズされた辞書は、第2パスの間に、入力データ
を圧縮するために圧縮エンジンによって使用される、単
一参照辞書としてセットされる。それによって、カスタ
マイズされた辞書は、同じデータに対する単一の動的辞
書よりもかなり高い性能を示す。
【0027】本発明の第2の態様は、圧縮/伸長システ
ムの辞書に記憶されたデータ項目のアドレス値を使用し
て、符号化回路と復号化回路を簡略化する、辞書ベース
の圧縮/伸長システムのアーキテクチャ、及び方法であ
る。このシステムは、ローカル・フィードバック回路を
含む追加論理回路を有した連想記憶メモリ(CAM)を使用
して、メモリ・アクセスを高速化し、外部圧縮/伸長の論
理機構を簡略化する特殊機能を提供することが好まし
い。このメモリ構造は、ハッシングやハッシング衝突の
可能性がなく、1クロック・サイクル当たりに1文字と
いう一様の速度で、ロスレスでデータ圧縮、又は伸長で
きる固有の特徴を有する。
ムの辞書に記憶されたデータ項目のアドレス値を使用し
て、符号化回路と復号化回路を簡略化する、辞書ベース
の圧縮/伸長システムのアーキテクチャ、及び方法であ
る。このシステムは、ローカル・フィードバック回路を
含む追加論理回路を有した連想記憶メモリ(CAM)を使用
して、メモリ・アクセスを高速化し、外部圧縮/伸長の論
理機構を簡略化する特殊機能を提供することが好まし
い。このメモリ構造は、ハッシングやハッシング衝突の
可能性がなく、1クロック・サイクル当たりに1文字と
いう一様の速度で、ロスレスでデータ圧縮、又は伸長で
きる固有の特徴を有する。
【0028】特に、このシステムは、メモリ内に含まれ
るデータ項目のアドレス位置に応じて文字列を符号化す
るアソシエイティブ・メモリを備えることが好ましい。
以前に入力データ・ストリーム内で出現しなかった入力
文字列の組み合わせが、辞書内の新しいデータ項目とし
て記憶される。そのCAMは、それぞれが固有の文字列デ
ータ項目を記憶する、「ワード」として組織化される。メ
モリは、以前辞書に記憶されていた全てのワードに対し
て、「ワード」内から選択されたビットを有する入力文字
列で、アソシエイティブ並行探索を実施する。マッチし
た場合、そのデータ項目に関連するマッチ・ラインが活
動化される。次に、全てのマッチ・ラインが、その文字
列を表す単一のコードワードに符号化される。次に、そ
のコードワードは、次の入力文字と組み合わせられ、再
度、以前メモリに記憶されたデータ項目と比較される。
従って、メモリ内の文字列のアドレス位置に応じて前記
文字列にコードワードが割り当てられる。探索が失敗す
ると、最後にマッチした文字列を表すコードワード(OME
GA)(前記文字列のアドレス)が出力され、マッチを失敗
させた文字(K)で始まる新しい文字列で別の探索が開始
される。圧縮済みデータ文字(コードワード)は、辞書内
のデータ項目へのポインタである。従って、文字列は、
圧縮済みデータ文字を伸長用の辞書へのアドレスとして
使用することによって復号化される。例えば、最初に外
部圧縮済み文字が辞書へのアドレスとして使用される。
次に、復号化済みアドレス位置におけるデータ項目が読
み取られる。メモリから出力されたデータ項目が、これ
以上の伸長を必要としない(例えば、メモリ出力が、リ
ンク・リストの「ルート」である)場合、そのデータ項目は
出力される。データ項目が他のコードワード(例えば、
更に符号化された別の辞書のアドレス位置へのリンク)
を含む場合、そのアドレスにおける文字が出力され、そ
のアドレスにおけるコードワードが次の辞書アドレスと
してメモリにフィードバックされる。
るデータ項目のアドレス位置に応じて文字列を符号化す
るアソシエイティブ・メモリを備えることが好ましい。
以前に入力データ・ストリーム内で出現しなかった入力
文字列の組み合わせが、辞書内の新しいデータ項目とし
て記憶される。そのCAMは、それぞれが固有の文字列デ
ータ項目を記憶する、「ワード」として組織化される。メ
モリは、以前辞書に記憶されていた全てのワードに対し
て、「ワード」内から選択されたビットを有する入力文字
列で、アソシエイティブ並行探索を実施する。マッチし
た場合、そのデータ項目に関連するマッチ・ラインが活
動化される。次に、全てのマッチ・ラインが、その文字
列を表す単一のコードワードに符号化される。次に、そ
のコードワードは、次の入力文字と組み合わせられ、再
度、以前メモリに記憶されたデータ項目と比較される。
従って、メモリ内の文字列のアドレス位置に応じて前記
文字列にコードワードが割り当てられる。探索が失敗す
ると、最後にマッチした文字列を表すコードワード(OME
GA)(前記文字列のアドレス)が出力され、マッチを失敗
させた文字(K)で始まる新しい文字列で別の探索が開始
される。圧縮済みデータ文字(コードワード)は、辞書内
のデータ項目へのポインタである。従って、文字列は、
圧縮済みデータ文字を伸長用の辞書へのアドレスとして
使用することによって復号化される。例えば、最初に外
部圧縮済み文字が辞書へのアドレスとして使用される。
次に、復号化済みアドレス位置におけるデータ項目が読
み取られる。メモリから出力されたデータ項目が、これ
以上の伸長を必要としない(例えば、メモリ出力が、リ
ンク・リストの「ルート」である)場合、そのデータ項目は
出力される。データ項目が他のコードワード(例えば、
更に符号化された別の辞書のアドレス位置へのリンク)
を含む場合、そのアドレスにおける文字が出力され、そ
のアドレスにおけるコードワードが次の辞書アドレスと
してメモリにフィードバックされる。
【0029】内部アドレス・ジェネレータは、圧縮、及
び伸長の両方に使用され、メモリのリセットと同時にリ
セットされる。メモリへのあらゆる書き込み(明示的な
書き込み、又は失敗したマッチング)の結果、アドレス
は次のアドレスにインクリメントされる。インクリメン
トは順次である必要はないが、コンプレッサ、及びデコ
ンプレッサ・アドレス・ジェネレータが両方同じ状態に初
期設定され、同じようにインクリメントした結果、圧縮
用の辞書と伸長用の辞書が両方同じものとなるかぎり、
例えば擬似ランダムであってよい。この論理機構によっ
て、外部制御論理機構でアドレスを生成/記憶する必要
がなくなり、圧縮、及び伸長の性能が向上する可能性が
ある(例えば、クロック・サイクルが減少し、データ圧縮
が高速になる)。
び伸長の両方に使用され、メモリのリセットと同時にリ
セットされる。メモリへのあらゆる書き込み(明示的な
書き込み、又は失敗したマッチング)の結果、アドレス
は次のアドレスにインクリメントされる。インクリメン
トは順次である必要はないが、コンプレッサ、及びデコ
ンプレッサ・アドレス・ジェネレータが両方同じ状態に初
期設定され、同じようにインクリメントした結果、圧縮
用の辞書と伸長用の辞書が両方同じものとなるかぎり、
例えば擬似ランダムであってよい。この論理機構によっ
て、外部制御論理機構でアドレスを生成/記憶する必要
がなくなり、圧縮、及び伸長の性能が向上する可能性が
ある(例えば、クロック・サイクルが減少し、データ圧縮
が高速になる)。
【0030】データ圧縮に必要な時間を更に減らすため
に、特殊更新回路によってメモリ探索、及びデータ書き
込みを同一クロック・サイクル中に実行することができ
る。文字列がメモリ内のデータ項目と比較される時、失
敗した探索は、新しいデータ項目として記憶されるべき
文字列を必要とする。次の利用可能なアドレス位置は既
に、アドレス・ジェネレータによって分かっており、文
字列は既にメモリ・データの入力時点で存在している。
従って、探索の間、1つもマッチしない場合、制御論理
機構を使用して文字列を自動的にメモリに書き込むこと
ができる。従って、メモリは、メモリ探索のクロック・
サイクル中に自動的に更新される。探索動作時にマッチ
があった場合、この更新回路は文字列が有効なデータ項
目としてメモリにロードされるの防ぐ。
に、特殊更新回路によってメモリ探索、及びデータ書き
込みを同一クロック・サイクル中に実行することができ
る。文字列がメモリ内のデータ項目と比較される時、失
敗した探索は、新しいデータ項目として記憶されるべき
文字列を必要とする。次の利用可能なアドレス位置は既
に、アドレス・ジェネレータによって分かっており、文
字列は既にメモリ・データの入力時点で存在している。
従って、探索の間、1つもマッチしない場合、制御論理
機構を使用して文字列を自動的にメモリに書き込むこと
ができる。従って、メモリは、メモリ探索のクロック・
サイクル中に自動的に更新される。探索動作時にマッチ
があった場合、この更新回路は文字列が有効なデータ項
目としてメモリにロードされるの防ぐ。
【0031】それによって、上記で要約したシステム、
及び方法は、データを高速に圧縮、及び伸長するための
簡単で、廉価で、かつ多機能なシステムを提供する。こ
のシステム、及び方法は、汎用コンピュータ上のソフト
ウェアで実施することも、あるいはカスタム、又はセミ
カスタム集積回路を使用するハードウェアで実施するこ
とも可能である。このシステム、及び方法を使用して、
リンク・リストのデータ構造の記憶/検索を実施すること
ができる。更に、このシステム、及び方法は、様々な適
応辞書ベースのエンコーダに容易に適応させることがで
きる。
及び方法は、データを高速に圧縮、及び伸長するための
簡単で、廉価で、かつ多機能なシステムを提供する。こ
のシステム、及び方法は、汎用コンピュータ上のソフト
ウェアで実施することも、あるいはカスタム、又はセミ
カスタム集積回路を使用するハードウェアで実施するこ
とも可能である。このシステム、及び方法を使用して、
リンク・リストのデータ構造の記憶/検索を実施すること
ができる。更に、このシステム、及び方法は、様々な適
応辞書ベースのエンコーダに容易に適応させることがで
きる。
【0032】本発明の第3の態様は、待機辞書の最小メ
モリ/高圧縮能力技法を文字あたり単一サイクルの高速
符号化/復号化機能を有したCAM回路と組み合わせる。こ
の回路は、CAM回路の記憶位置内で複数の辞書を使用す
る。CAM回路は、圧縮済み文字列、及び圧縮前文字列を
受け取り、それらを辞書の1つにデータ項目として記憶
する。次に、文字列にマッチする辞書のデータ項目のア
ドレスに応じて、各データ文字列を表すコードワードが
生成される。
モリ/高圧縮能力技法を文字あたり単一サイクルの高速
符号化/復号化機能を有したCAM回路と組み合わせる。こ
の回路は、CAM回路の記憶位置内で複数の辞書を使用す
る。CAM回路は、圧縮済み文字列、及び圧縮前文字列を
受け取り、それらを辞書の1つにデータ項目として記憶
する。次に、文字列にマッチする辞書のデータ項目のア
ドレスに応じて、各データ文字列を表すコードワードが
生成される。
【0033】複数の辞書をサポートするために、CAM内
の各メモリ位置は、状況フィールドとデータ・フィール
ドを含む。データ・フィールドは、データ項目を記憶
し、状況フィールドは、どの辞書がそのデータ項目に割
り当てられているかを示している。探索動作の間に、こ
の回路は状況フィールドとデータ・フィールドの両方の
あるビットをマスクすることができる。このことによっ
て、このシステムは、どの辞書がデータ項目に割り当て
られているかを判定し、あるメモリ位置が現在、辞書に
割り当てられていないかどうかを判定できる。
の各メモリ位置は、状況フィールドとデータ・フィール
ドを含む。データ・フィールドは、データ項目を記憶
し、状況フィールドは、どの辞書がそのデータ項目に割
り当てられているかを示している。探索動作の間に、こ
の回路は状況フィールドとデータ・フィールドの両方の
あるビットをマスクすることができる。このことによっ
て、このシステムは、どの辞書がデータ項目に割り当て
られているかを判定し、あるメモリ位置が現在、辞書に
割り当てられていないかどうかを判定できる。
【0034】各データ項目ごとの辞書の割り当ては、圧
縮/伸長回路の状態を変更することによって容易に切り
替えられる。回路の状態を変更することによって、少な
くとも1つの辞書がリセットされる。このことによっ
て、以前その辞書に割り当てられていた記憶位置は、今
度は、もはやどの辞書にも割り当てられていないフリー
記憶位置を構成することができる。このようなフリー記
憶位置は今度は、新しい文字列を記憶するために使用す
ることができる。圧縮率、及び異なるデータ・タイプへ
のシステムの適応性を最大にするために、異なる事象を
きっかけとして状態の変更を行うことができる。例え
ば、圧縮/伸長回路は、辞書の1つが満杯になった時に
自動的に状態を変更することも、圧縮率が所定の性能レ
ベルより低くなった時に状態を変更することもできる。
縮/伸長回路の状態を変更することによって容易に切り
替えられる。回路の状態を変更することによって、少な
くとも1つの辞書がリセットされる。このことによっ
て、以前その辞書に割り当てられていた記憶位置は、今
度は、もはやどの辞書にも割り当てられていないフリー
記憶位置を構成することができる。このようなフリー記
憶位置は今度は、新しい文字列を記憶するために使用す
ることができる。圧縮率、及び異なるデータ・タイプへ
のシステムの適応性を最大にするために、異なる事象を
きっかけとして状態の変更を行うことができる。例え
ば、圧縮/伸長回路は、辞書の1つが満杯になった時に
自動的に状態を変更することも、圧縮率が所定の性能レ
ベルより低くなった時に状態を変更することもできる。
【0035】圧縮/伸長システムの圧縮率を更に増加さ
せるには、第2のLempel-Ziv圧縮/伸長システム(LZSD2)
を使用して、個別のデータ項目を新しい文字列と選択的
に置換する。LZSD2優先順位システムは、文字列マッチ
ングのために全ての辞書の項目を常に使用できるが、そ
れでも上述の待機辞書方式を使用している。従って、辞
書のサイズにかかわらず、次の上書き位置を識別するに
は、2ビットだけが必要とされる。この場合、各データ
項目が辞書のリセット後も辞書に割り当てられたままな
ので、辞書は、データ圧縮率に影響を与えずに更新され
うる。データ圧縮率に悪影響を与えずに、上述したのと
同じ圧縮/伸長ハードウェアを用いて実施することも可
能である。
せるには、第2のLempel-Ziv圧縮/伸長システム(LZSD2)
を使用して、個別のデータ項目を新しい文字列と選択的
に置換する。LZSD2優先順位システムは、文字列マッチ
ングのために全ての辞書の項目を常に使用できるが、そ
れでも上述の待機辞書方式を使用している。従って、辞
書のサイズにかかわらず、次の上書き位置を識別するに
は、2ビットだけが必要とされる。この場合、各データ
項目が辞書のリセット後も辞書に割り当てられたままな
ので、辞書は、データ圧縮率に影響を与えずに更新され
うる。データ圧縮率に悪影響を与えずに、上述したのと
同じ圧縮/伸長ハードウェアを用いて実施することも可
能である。
【0036】単一クロック・サイクル探索機能を提供す
るために、圧縮/伸長回路は、現行辞書と並行的に待機
辞書を作成し、複数の辞書を同時に探索する。
るために、圧縮/伸長回路は、現行辞書と並行的に待機
辞書を作成し、複数の辞書を同時に探索する。
【0037】本発明の前記、及び他の目的、特徴、及び
利点は、図面に関連して進める好適実施例に関する以下
の詳細な説明から容易に明らかになろう。
利点は、図面に関連して進める好適実施例に関する以下
の詳細な説明から容易に明らかになろう。
【0038】
【実施例】以下の説明では、第1節、及び第2節はそれ
ぞれ、本発明の待機辞書、及び連想記憶メモリの態様を
説明する。第3節は、本発明の最初の2つの態様を組み
合わせた実施態様を説明する。第4節は、第3節で説明
したシステムを使用する、代替動作方法を説明する。
ぞれ、本発明の待機辞書、及び連想記憶メモリの態様を
説明する。第3節は、本発明の最初の2つの態様を組み
合わせた実施態様を説明する。第4節は、第3節で説明
したシステムを使用する、代替動作方法を説明する。
【0039】I.待機辞書を使用するデータ圧縮/伸長
システム 図1は現行辞書と待機辞書を用いたデータ圧縮/伸長シ
ステムのデータ・フロー図である。図1に示した方法は
現行辞書(CD)、及び待機辞書(SD)の両方を初期設定する
ブロック8から始まる。例えば、圧縮前入力データ内の
全ての単一文字を表すコードワードが辞書内に置かれ
る。又、最初の辞書は空であってもよい。データ・シー
ケンスからの文字列の符号化は、任意の所望の符号化技
法を使用して実施される。
システム 図1は現行辞書と待機辞書を用いたデータ圧縮/伸長シ
ステムのデータ・フロー図である。図1に示した方法は
現行辞書(CD)、及び待機辞書(SD)の両方を初期設定する
ブロック8から始まる。例えば、圧縮前入力データ内の
全ての単一文字を表すコードワードが辞書内に置かれ
る。又、最初の辞書は空であってもよい。データ・シー
ケンスからの文字列の符号化は、任意の所望の符号化技
法を使用して実施される。
【0040】ブロック10で、入力データが、以前に符号
化された現行辞書のデータ項目と比較され、その文字列
と、辞書のデータ項目のどれかがマッチするかどうか判
定される。ブロック12で、マッチしない文字列が、新し
い符号化済みデータ項目として現行辞書に記憶される。
もはやマッチングが拡張できなくなると、ブロック13
で、マッチした最も長い文字列のコードが出力される。
化された現行辞書のデータ項目と比較され、その文字列
と、辞書のデータ項目のどれかがマッチするかどうか判
定される。ブロック12で、マッチしない文字列が、新し
い符号化済みデータ項目として現行辞書に記憶される。
もはやマッチングが拡張できなくなると、ブロック13
で、マッチした最も長い文字列のコードが出力される。
【0041】ブロック14で、現行辞書(CD)の以前に符号
化されたデータ項目の部分集合が待機辞書(SD)に記憶さ
れる。ブロック14における上述の部分集合選択処理は、
特定の入力データに関して、待機辞書内の所与の数のデ
ータ項目を用いて最大の圧縮率をもたらすように修正す
ることができる。例えば、待機辞書のデータ項目は、入
力文字列が辞書内のデータ項目にマッチする回数に基づ
いて選択されうる。又、待機辞書の部分集合は、符号化
済みの文字列によって表現される入力文字の数に応じて
選択されうる。一般に、この段階で、好適ないかなる技
法も適用することができる。
化されたデータ項目の部分集合が待機辞書(SD)に記憶さ
れる。ブロック14における上述の部分集合選択処理は、
特定の入力データに関して、待機辞書内の所与の数のデ
ータ項目を用いて最大の圧縮率をもたらすように修正す
ることができる。例えば、待機辞書のデータ項目は、入
力文字列が辞書内のデータ項目にマッチする回数に基づ
いて選択されうる。又、待機辞書の部分集合は、符号化
済みの文字列によって表現される入力文字の数に応じて
選択されうる。一般に、この段階で、好適ないかなる技
法も適用することができる。
【0042】決定ブロック16で、辞書のリセットが必要
かどうかが判定される。例えば、現行辞書において符号
化済み文字列の項目数が所定数に達した時、あるいは圧
縮率が所与の性能閾値より低くなった時、リセットが必
要とされる。現行辞書をリセットする必要がない場合、
圧縮エンジンは新しい文字列を読み取り、処理はブロッ
ク10に戻る。現行辞書がリセットされた場合、ブロック
18は、現行辞書を待機辞書内の項目と置換し、新しい待
機辞書を初期設定し、新しい文字列を読み取り、次いで
ブロック10に戻る。
かどうかが判定される。例えば、現行辞書において符号
化済み文字列の項目数が所定数に達した時、あるいは圧
縮率が所与の性能閾値より低くなった時、リセットが必
要とされる。現行辞書をリセットする必要がない場合、
圧縮エンジンは新しい文字列を読み取り、処理はブロッ
ク10に戻る。現行辞書がリセットされた場合、ブロック
18は、現行辞書を待機辞書内の項目と置換し、新しい待
機辞書を初期設定し、新しい文字列を読み取り、次いで
ブロック10に戻る。
【0043】図1による辞書ベースの圧縮/伸長方法を
使用して、データを圧縮するために使用される静的にカ
スタマイズされた現行辞書を生成することができる。例
えば、入力データ・シーケンスのデータ・サンプルが選択
される。次に、現行辞書を繰り返し待機辞書と置換する
ことによって、現行辞書がカスタマイズされる。カスタ
マイズされた現行辞書は次に、読み取り専用機能にロッ
クされ、データ・シーケンスの圧縮、又は伸長のために
圧縮エンジンによって排他的に使用される。
使用して、データを圧縮するために使用される静的にカ
スタマイズされた現行辞書を生成することができる。例
えば、入力データ・シーケンスのデータ・サンプルが選択
される。次に、現行辞書を繰り返し待機辞書と置換する
ことによって、現行辞書がカスタマイズされる。カスタ
マイズされた現行辞書は次に、読み取り専用機能にロッ
クされ、データ・シーケンスの圧縮、又は伸長のために
圧縮エンジンによって排他的に使用される。
【0044】図2は、現行辞書、及び待機辞書を使用す
るデータ圧縮アルゴリズムの一例を示す詳細データ・フ
ロー図である。図2は、入力データ列が、現行辞書内の
項目とマッチした時に、待機辞書にコピーされる方法を
示す。この手順では、データ列は入力において少なくと
も2回は確実に「見られている」。現行辞書が満杯になる
と(例えば、有効なデータ項目が所定数に達した時)、現
行辞書と待機辞書が切り替えられる。上述のように、代
替辞書切り替え基準、及び待機辞書のデータ項目選択基
準は、特定のアプリケーション要件に応じて容易に与え
られる。
るデータ圧縮アルゴリズムの一例を示す詳細データ・フ
ロー図である。図2は、入力データ列が、現行辞書内の
項目とマッチした時に、待機辞書にコピーされる方法を
示す。この手順では、データ列は入力において少なくと
も2回は確実に「見られている」。現行辞書が満杯になる
と(例えば、有効なデータ項目が所定数に達した時)、現
行辞書と待機辞書が切り替えられる。上述のように、代
替辞書切り替え基準、及び待機辞書のデータ項目選択基
準は、特定のアプリケーション要件に応じて容易に与え
られる。
【0045】ブロック20で、入力データ列が現行辞書の
データ項目と比較される。決定ブロック22は、入力デー
タと現行辞書内の項目の間にマッチがない場合、ブロッ
ク23、及び24に分岐する。次にブロック23で、マッチし
た最も長いデータ列が符号化され、出力される。
データ項目と比較される。決定ブロック22は、入力デー
タと現行辞書内の項目の間にマッチがない場合、ブロッ
ク23、及び24に分岐する。次にブロック23で、マッチし
た最も長いデータ列が符号化され、出力される。
【0046】決定ブロック24で、現行辞書が満杯かどう
かが判定される。現行辞書が満杯でない場合、ブロック
28で、データ列がデータ項目として現行辞書に記憶され
る。現行辞書が満杯である場合、ブロック26で、現行辞
書が待機辞書と切り替えられる。以降、データ列は新し
い現行辞書に記憶される。この場合、現行辞書はデータ
項目(例えば、待機辞書のデータ項目)の、より小さな部
分集合と置換されているので、新しいデータ列を記憶す
るために使用可能な空間がある。ブロック30で、現行辞
書のアドレス・カウンタがインクリメントされる。ブロ
ック34で、入力データから新しい入力文字が読み取ら
れ、次にブロック20の比較処理が繰り返される。
かが判定される。現行辞書が満杯でない場合、ブロック
28で、データ列がデータ項目として現行辞書に記憶され
る。現行辞書が満杯である場合、ブロック26で、現行辞
書が待機辞書と切り替えられる。以降、データ列は新し
い現行辞書に記憶される。この場合、現行辞書はデータ
項目(例えば、待機辞書のデータ項目)の、より小さな部
分集合と置換されているので、新しいデータ列を記憶す
るために使用可能な空間がある。ブロック30で、現行辞
書のアドレス・カウンタがインクリメントされる。ブロ
ック34で、入力データから新しい入力文字が読み取ら
れ、次にブロック20の比較処理が繰り返される。
【0047】決定ブロック22で、入力データと現行辞書
内の項目の間にマッチがあると判定されると、決定ブロ
ック36で、そのデータ列が以前に待機辞書に記憶された
かどうかを判定するための検査が行われる。そのデータ
列が以前に待機辞書にコピーされていなかった場合、現
行辞書内の状況フィールドにフラグがセットされる。
又、ブロック36を除く任意の箇所で、このフラグをセッ
トすることができる。このフラグは、そのデータ列にマ
ッチした現行辞書のデータ項目に関連付けられる。この
フラグは、このデータ項目が以前に待機辞書にコピーさ
れたことを圧縮エンジンに示す。このことは、同じデー
タ項目が待機辞書に複数回コピーされるのを防ぐ。ブロ
ック40でデータ列が待機辞書に書き込まれ、ブロック42
で待機辞書のアドレス・カウンタがインクリメントされ
る。そのデータ列が現行辞書内のデータ項目にマッチし
たので、ブロック44で現在のデータ列に次の入力文字が
追加され、ブロック20に戻る。決定ブロック36でデータ
列が以前に待機辞書に記憶されていたことが示された場
合、この処理は直接、ブロック44に進み、上述のように
継続される。
内の項目の間にマッチがあると判定されると、決定ブロ
ック36で、そのデータ列が以前に待機辞書に記憶された
かどうかを判定するための検査が行われる。そのデータ
列が以前に待機辞書にコピーされていなかった場合、現
行辞書内の状況フィールドにフラグがセットされる。
又、ブロック36を除く任意の箇所で、このフラグをセッ
トすることができる。このフラグは、そのデータ列にマ
ッチした現行辞書のデータ項目に関連付けられる。この
フラグは、このデータ項目が以前に待機辞書にコピーさ
れたことを圧縮エンジンに示す。このことは、同じデー
タ項目が待機辞書に複数回コピーされるのを防ぐ。ブロ
ック40でデータ列が待機辞書に書き込まれ、ブロック42
で待機辞書のアドレス・カウンタがインクリメントされ
る。そのデータ列が現行辞書内のデータ項目にマッチし
たので、ブロック44で現在のデータ列に次の入力文字が
追加され、ブロック20に戻る。決定ブロック36でデータ
列が以前に待機辞書に記憶されていたことが示された場
合、この処理は直接、ブロック44に進み、上述のように
継続される。
【0048】図3は、現在の好適実施例である、データ
・コンプレッサ/デコンプレッサ集積回路(IC)50における
本発明の実施例を示している。データ・コンプレッサ/デ
コンプレッサ(DCD)IC50は、データ・コンプレッサ・イン
タフェイス回路54と組み合わされたデータ圧縮/伸長エ
ンジン52を含む。DCD IC50は、ランダム・アクセス・メモ
リ(RAM)88内に構成された辞書1(D1)、及びRAM90内に構
成された辞書2(D2)と組み合わせて使用される。本明細
書に示した回路は好適には単一のICで、又は別々のIC5
0、88、及び90として実施される。D1、及びD2はRAMとして
示されているが、好適には連想記憶メモリ、又は任意の
代替メモリ構造で実施することができる。このRAMは従
来型のものである。D1、及びD2内の各RAM辞書メモリ位
置はそれぞれデータ項目フィールド(data_entry)94、及
び98と、待機状況フィールド(stdby_stat)92、及び96を
含む。
・コンプレッサ/デコンプレッサ集積回路(IC)50における
本発明の実施例を示している。データ・コンプレッサ/デ
コンプレッサ(DCD)IC50は、データ・コンプレッサ・イン
タフェイス回路54と組み合わされたデータ圧縮/伸長エ
ンジン52を含む。DCD IC50は、ランダム・アクセス・メモ
リ(RAM)88内に構成された辞書1(D1)、及びRAM90内に構
成された辞書2(D2)と組み合わせて使用される。本明細
書に示した回路は好適には単一のICで、又は別々のIC5
0、88、及び90として実施される。D1、及びD2はRAMとして
示されているが、好適には連想記憶メモリ、又は任意の
代替メモリ構造で実施することができる。このRAMは従
来型のものである。D1、及びD2内の各RAM辞書メモリ位
置はそれぞれデータ項目フィールド(data_entry)94、及
び98と、待機状況フィールド(stdby_stat)92、及び96を
含む。
【0049】データ項目フィールドは、入力データ・シ
ーケンスで現れる固有のデータ列を記憶する。待機状況
フィールドは、現行辞書内のデータ項目が以前に待機辞
書に記憶されていたかどうかを示す待機辞書状況フラグ
を含む。待機状況フィールドは好適には、有効なデータ
項目を識別するためのデータ有効(data_valid)フィール
ドを含むことができる。データ圧縮システムにおいて複
数ビットのデータ有効フィールドを使用することは、19
91年9月25日に出願され、本出願人に譲渡された米国特
許出願第07/766,475号「DICTIONARY RESET PERFORMANCE
ENHANCEMENT FOR DATA COMPRESSION APPLICATIONS」に記
述されており、ここで参照することにより、本明細書に
組み込まれている。
ーケンスで現れる固有のデータ列を記憶する。待機状況
フィールドは、現行辞書内のデータ項目が以前に待機辞
書に記憶されていたかどうかを示す待機辞書状況フラグ
を含む。待機状況フィールドは好適には、有効なデータ
項目を識別するためのデータ有効(data_valid)フィール
ドを含むことができる。データ圧縮システムにおいて複
数ビットのデータ有効フィールドを使用することは、19
91年9月25日に出願され、本出願人に譲渡された米国特
許出願第07/766,475号「DICTIONARY RESET PERFORMANCE
ENHANCEMENT FOR DATA COMPRESSION APPLICATIONS」に記
述されており、ここで参照することにより、本明細書に
組み込まれている。
【0050】データ圧縮エンジン52は、LZ2、又はLZ1圧
縮アルゴリズムを実施するように設計されていることが
好ましいが、任意の適当な辞書ベースの圧縮技法を実施
するように設計されることも可能である。又、必要であ
れば、圧縮エンジンは米国特許第4,847,619号で開示さ
れたような、辞書のリセットを制御するための自動手段
を組み込むことも、又はその手段と共に使用することも
できる。その他の点については従来通りなので、データ
圧縮エンジンの特定のアルゴリズム、及びアーキテクチ
ャをより詳細に説明する必要はない。
縮アルゴリズムを実施するように設計されていることが
好ましいが、任意の適当な辞書ベースの圧縮技法を実施
するように設計されることも可能である。又、必要であ
れば、圧縮エンジンは米国特許第4,847,619号で開示さ
れたような、辞書のリセットを制御するための自動手段
を組み込むことも、又はその手段と共に使用することも
できる。その他の点については従来通りなので、データ
圧縮エンジンの特定のアルゴリズム、及びアーキテクチ
ャをより詳細に説明する必要はない。
【0051】データ・コンプレッサ・インタフェイス回路
54は、2つの主要分岐回路を備えている。切り替え制御
装置分岐回路76は、データ圧縮エンジン52、又はデータ
・コンプレッサ/デコンプレッサICに関連するその他の回
路から出力される辞書リセット要求信号72、及びデータ
列マッチ信号70を監視する。分岐回路76は、どちらのRA
Mが現行辞書として動作し、どちらのRAMが待機辞書とし
て動作するかを制御する。この分岐回路は、現行辞書か
ら待機状況フィールドを読み取り、現在の符号化済みデ
ータ項目が以前に待機辞書にコピーされていたかどうか
を判定する。
54は、2つの主要分岐回路を備えている。切り替え制御
装置分岐回路76は、データ圧縮エンジン52、又はデータ
・コンプレッサ/デコンプレッサICに関連するその他の回
路から出力される辞書リセット要求信号72、及びデータ
列マッチ信号70を監視する。分岐回路76は、どちらのRA
Mが現行辞書として動作し、どちらのRAMが待機辞書とし
て動作するかを制御する。この分岐回路は、現行辞書か
ら待機状況フィールドを読み取り、現在の符号化済みデ
ータ項目が以前に待機辞書にコピーされていたかどうか
を判定する。
【0052】アドレス・ジェネレータ回路68は、待機モ
ードで動作する辞書に関するデータ項目フィールドのバ
イナリ値を順番に並べる。この分岐回路の典型的な実施
態様はバイナリ・カウンタであるが、他の形態のシーケ
ンサも容易に使用することができる。この分岐回路に
は、マルチプレクサ56、58、及びトランシーバ84、86が
関連付けられている。マルチプレクサ56は、データ圧縮
エンジン52、及び切り替え制御装置回路76のそれぞれか
らの読み取り/書き込み信号60、及び62の一方を選択す
る。マルチプレクサ58は、データ圧縮エンジン52、及び
アドレス・ジェネレータ68のそれぞれからのアドレス信
号64、66の一方を選択する。トランシーバ86は、データ
圧縮エンジン52に接続されたデータ・バス87に接続し
て、データ項目フィールド94、98の一方を選択するバス
制御装置として動作する。トランシーバ84は、切り替え
制御装置76に接続して、待機状況フィールド92、96の一
方を選択する。マルチプレクサ、及びトランシーバは制
御信号78によって制御され、アドレス・ジェネレータ68
は制御信号82によって制御される。両方の制御信号は切
り替え制御装置回路76からのものである。
ードで動作する辞書に関するデータ項目フィールドのバ
イナリ値を順番に並べる。この分岐回路の典型的な実施
態様はバイナリ・カウンタであるが、他の形態のシーケ
ンサも容易に使用することができる。この分岐回路に
は、マルチプレクサ56、58、及びトランシーバ84、86が
関連付けられている。マルチプレクサ56は、データ圧縮
エンジン52、及び切り替え制御装置回路76のそれぞれか
らの読み取り/書き込み信号60、及び62の一方を選択す
る。マルチプレクサ58は、データ圧縮エンジン52、及び
アドレス・ジェネレータ68のそれぞれからのアドレス信
号64、66の一方を選択する。トランシーバ86は、データ
圧縮エンジン52に接続されたデータ・バス87に接続し
て、データ項目フィールド94、98の一方を選択するバス
制御装置として動作する。トランシーバ84は、切り替え
制御装置76に接続して、待機状況フィールド92、96の一
方を選択する。マルチプレクサ、及びトランシーバは制
御信号78によって制御され、アドレス・ジェネレータ68
は制御信号82によって制御される。両方の制御信号は切
り替え制御装置回路76からのものである。
【0053】DCD回路50は、通常の圧縮/伸長動作の間
に、辞書の1つ(現行辞書)とデータ圧縮エンジン52の間
の従来のデータ転送を可能にする。このシステムにおい
て、待機辞書は、本発明に従うデータ項目の部分集合を
作成するために、データ圧縮エンジン52からデータを、
又は現行辞書から直接データを受け取ることもできる。
に、辞書の1つ(現行辞書)とデータ圧縮エンジン52の間
の従来のデータ転送を可能にする。このシステムにおい
て、待機辞書は、本発明に従うデータ項目の部分集合を
作成するために、データ圧縮エンジン52からデータを、
又は現行辞書から直接データを受け取ることもできる。
【0054】回路50の動作時に、切り替え制御装置76
は、現行辞書としてD1、D2の一方、例えばD1を選択す
る。次に、圧縮エンジンは、データ圧縮の実行、符号化
済みデータの読み取り、及びD1のデータ項目フィールド
94への符号化済みデータの書き込みを開始する。符号化
済みデータ列が待機辞書(D2)への書き込みの候補である
と圧縮アルゴリズムが判定した時、例えば、符号化済み
データ列が現行辞書(D1)内のデータ項目とマッチした
時、マッチ信号70が活動化される。それによって、切り
替え制御装置76は、現行辞書からの待機状況フィールド
92を検査して、そのデータ項目が以前に待機辞書にコピ
ーされていたかどうかを判定する。そうでない場合、デ
ータ列は、アドレス・ジェネレータ68によって提示され
る位置における、D2のデータ項目フィールド98内に書き
込まれる。更に、現行辞書内の待機状況フィールド92
は、同じ符号化済みデータ列が待機辞書に2回コピーさ
れるのを防ぐように、切り替え制御装置76によって「セ
ット」される。
は、現行辞書としてD1、D2の一方、例えばD1を選択す
る。次に、圧縮エンジンは、データ圧縮の実行、符号化
済みデータの読み取り、及びD1のデータ項目フィールド
94への符号化済みデータの書き込みを開始する。符号化
済みデータ列が待機辞書(D2)への書き込みの候補である
と圧縮アルゴリズムが判定した時、例えば、符号化済み
データ列が現行辞書(D1)内のデータ項目とマッチした
時、マッチ信号70が活動化される。それによって、切り
替え制御装置76は、現行辞書からの待機状況フィールド
92を検査して、そのデータ項目が以前に待機辞書にコピ
ーされていたかどうかを判定する。そうでない場合、デ
ータ列は、アドレス・ジェネレータ68によって提示され
る位置における、D2のデータ項目フィールド98内に書き
込まれる。更に、現行辞書内の待機状況フィールド92
は、同じ符号化済みデータ列が待機辞書に2回コピーさ
れるのを防ぐように、切り替え制御装置76によって「セ
ット」される。
【0055】データ圧縮エンジン52がリセット信号72を
活動化すると、切り替え制御装置76は制御信号78の値を
変更する。この新しい制御信号は、D2が次に現行辞書と
して動作し、D1が次に待機辞書として動作するように、
マルチプレクサ、及びトランシーバに関する接続を変更
する。次に、D2にロードされているデータ項目の部分集
合が、圧縮エンジン52に対するデータ項目の初期セット
として使用される。従って、図3に示したデータ圧縮エ
ンジンがリセットされると、新しい辞書のデータ項目フ
ィールドは、以前に符号化された入力データの高圧縮率
の部分集合を含む。
活動化すると、切り替え制御装置76は制御信号78の値を
変更する。この新しい制御信号は、D2が次に現行辞書と
して動作し、D1が次に待機辞書として動作するように、
マルチプレクサ、及びトランシーバに関する接続を変更
する。次に、D2にロードされているデータ項目の部分集
合が、圧縮エンジン52に対するデータ項目の初期セット
として使用される。従って、図3に示したデータ圧縮エ
ンジンがリセットされると、新しい辞書のデータ項目フ
ィールドは、以前に符号化された入力データの高圧縮率
の部分集合を含む。
【0056】切り替え制御装置76は、マッチ信号70、及
びリセット信号72の特定の組み合わせを活動化すること
により、データ圧縮エンジンによって遮断されうる。こ
れによって、データ圧縮エンジンは単一の辞書から符号
化済みデータを排他的に読み取り、単一の辞書に符号化
済みデータを排他的に書き込むことができる。これは、
上述のカスタマイズされたデータ辞書の動作と、単一辞
書技法との互換性のために使用される。
びリセット信号72の特定の組み合わせを活動化すること
により、データ圧縮エンジンによって遮断されうる。こ
れによって、データ圧縮エンジンは単一の辞書から符号
化済みデータを排他的に読み取り、単一の辞書に符号化
済みデータを排他的に書き込むことができる。これは、
上述のカスタマイズされたデータ辞書の動作と、単一辞
書技法との互換性のために使用される。
【0057】上述の方法は、有効であることが分かって
いる。例えば、標準UNIXの「compress」コマンド(従来型
のLZ2実施態様)を使用して、ユーザ操作マニュアルを含
む550個のファイルが圧縮されている。次に、上述の現
行/待機辞書方式を使用して、カスタマイズされた辞書
を作成し、次に、そのファイルがデータ・サンプルから
作成したカスタマイズされた辞書を使用して圧縮されて
いる。その結果を以下に要約する。 最初のファイル・サイズ :6,602,300バイト Unix圧縮 :2,781,686バイト カスタマイズされた辞書による圧縮:2,025,742バイト 圧縮向上比 :37% 従って、カスタマイズされた辞書を用いる圧縮方法は、
従来型の圧縮方法より実質的な圧縮率が改良されてい
る。
いる。例えば、標準UNIXの「compress」コマンド(従来型
のLZ2実施態様)を使用して、ユーザ操作マニュアルを含
む550個のファイルが圧縮されている。次に、上述の現
行/待機辞書方式を使用して、カスタマイズされた辞書
を作成し、次に、そのファイルがデータ・サンプルから
作成したカスタマイズされた辞書を使用して圧縮されて
いる。その結果を以下に要約する。 最初のファイル・サイズ :6,602,300バイト Unix圧縮 :2,781,686バイト カスタマイズされた辞書による圧縮:2,025,742バイト 圧縮向上比 :37% 従って、カスタマイズされた辞書を用いる圧縮方法は、
従来型の圧縮方法より実質的な圧縮率が改良されてい
る。
【0058】本発明のこの態様は、その基本的原理から
逸脱することなく構成、及び細部に関して修正すること
ができる。例えば、項目が待機辞書にあるかどうかを示
すフィールドを有することによって、現行辞書と待機辞
書の両方を同一RAM上で実施することができる。リセッ
ト時には、待機辞書でない辞書の項目全てがクリアされ
る。アドレス・ジェネレータ回路は、リセット後に項目
が連続位置に位置しなくなるので、より複雑になる。こ
のアプローチは、後述の連想記憶メモリ(CAM)の実施態
様に特に適している。
逸脱することなく構成、及び細部に関して修正すること
ができる。例えば、項目が待機辞書にあるかどうかを示
すフィールドを有することによって、現行辞書と待機辞
書の両方を同一RAM上で実施することができる。リセッ
ト時には、待機辞書でない辞書の項目全てがクリアされ
る。アドレス・ジェネレータ回路は、リセット後に項目
が連続位置に位置しなくなるので、より複雑になる。こ
のアプローチは、後述の連想記憶メモリ(CAM)の実施態
様に特に適している。
【0059】II.ロスレスのデータ圧縮/伸長辞書記憶
用メモリ回路 図4は、本発明の第2の態様によるCAM圧縮/伸長システ
ム用の回路136の全体構成を示すブロック図である。回
路136は、データ圧縮/伸長(CD)エンジン142、圧縮前デ
ータ・インタフェイス138、圧縮済みデータ・インタフェ
イス148、及びプロセッサ・インタフェイス152を含む。C
Dエンジン142は、列テーブル・メモリ144、及び制御論理
機構146を備えている。圧縮前データ・インタフェイス13
8は、データ・バス154を介して圧縮前データ(RAWDATA)を
転送し、圧縮済みデータ・インタフェイス148は、データ
・バス158を介して圧縮済みデータ(COMPDATA)を転送す
る。インタフェイス138、及び148に関する外部制御信号
はそれぞれ、制御バス156、及び160を介して受け取られ
る。各インタフェイスは、先入れ先出しデータ・バッフ
ァ(FIFO)140、150と、更に従来型インタフェイス回路(図
示せず)を含む。
用メモリ回路 図4は、本発明の第2の態様によるCAM圧縮/伸長システ
ム用の回路136の全体構成を示すブロック図である。回
路136は、データ圧縮/伸長(CD)エンジン142、圧縮前デ
ータ・インタフェイス138、圧縮済みデータ・インタフェ
イス148、及びプロセッサ・インタフェイス152を含む。C
Dエンジン142は、列テーブル・メモリ144、及び制御論理
機構146を備えている。圧縮前データ・インタフェイス13
8は、データ・バス154を介して圧縮前データ(RAWDATA)を
転送し、圧縮済みデータ・インタフェイス148は、データ
・バス158を介して圧縮済みデータ(COMPDATA)を転送す
る。インタフェイス138、及び148に関する外部制御信号
はそれぞれ、制御バス156、及び160を介して受け取られ
る。各インタフェイスは、先入れ先出しデータ・バッフ
ァ(FIFO)140、150と、更に従来型インタフェイス回路(図
示せず)を含む。
【0060】回路136は、圧縮、又は伸長モード/状態の
どちらかで使用することができ、双方向通信モードの間
で切り替えることができる。又、回路136は、図5のブ
ロック182、184、192、及び194を置き換えて、RAMを用いた
簡単な専用伸長回路を含む専用コンプレッサとして使用
することができる。以下の説明は、圧縮と伸長の両方に
回路136を使用すると仮定している。
どちらかで使用することができ、双方向通信モードの間
で切り替えることができる。又、回路136は、図5のブ
ロック182、184、192、及び194を置き換えて、RAMを用いた
簡単な専用伸長回路を含む専用コンプレッサとして使用
することができる。以下の説明は、圧縮と伸長の両方に
回路136を使用すると仮定している。
【0061】圧縮モードでは、圧縮前データ・インタフ
ェイス138が、データ・バス154から圧縮前データ文字を
受け取り、データ・バッファ140を介してそれを圧縮/伸
長エンジン142に供給する。CDエンジン142内の列テーブ
ル・メモリ144、及び制御論理機構146は、データ・バッフ
ァ150を介してデータ・バス158上に出力されるコードワ
ードにその文字を圧縮する。伸長モードでは、圧縮済み
データ・インタフェイス148が、データ・バス158から圧縮
済みデータ・コードワードを受け取り、データ・バッファ
150を介してCDエンジン142にそれを提供する。列テーブ
ル144は制御論理機構146と協働して、そのデータ・コー
ドワードを文字列に伸長し、データ・バッファ140を介し
てデータ・バス154上にその結果を出力する。マイクロプ
ロセッサ(図示せず)は、データ・フローの方向と圧縮/伸
長モードをセットするためのレジスタを制御し、かつプ
ロセッサ・インタフェイス152を介してその他の様々な機
能を制御する。
ェイス138が、データ・バス154から圧縮前データ文字を
受け取り、データ・バッファ140を介してそれを圧縮/伸
長エンジン142に供給する。CDエンジン142内の列テーブ
ル・メモリ144、及び制御論理機構146は、データ・バッフ
ァ150を介してデータ・バス158上に出力されるコードワ
ードにその文字を圧縮する。伸長モードでは、圧縮済み
データ・インタフェイス148が、データ・バス158から圧縮
済みデータ・コードワードを受け取り、データ・バッファ
150を介してCDエンジン142にそれを提供する。列テーブ
ル144は制御論理機構146と協働して、そのデータ・コー
ドワードを文字列に伸長し、データ・バッファ140を介し
てデータ・バス154上にその結果を出力する。マイクロプ
ロセッサ(図示せず)は、データ・フローの方向と圧縮/伸
長モードをセットするためのレジスタを制御し、かつプ
ロセッサ・インタフェイス152を介してその他の様々な機
能を制御する。
【0062】図5は、図4の列テーブル・メモリ144、及
び制御論理機構146の詳細ブロック図である。列テーブ
ル・メモリは、圧縮/伸長処理時間を減らす追加の内部論
理機構を備えた連想記憶RAM(CAM)188形式のアソシエイ
ティブ・アレイから成る。CAM188は、それぞれが別々の
文字列項目を記憶する、「ワード」によって組織化される
(例えば3832x20ビット)。データは、データ・バス190(DA
TA_IN)上でメモリ188に書き込まれる。データ・バス190
は、バス180上で入力された外部文字列(K)を受け取り、
マルチプレクサ192(MUX3)を介してデータ・バス202上で
符号化済み文字列(OMEGA)を受け取る。バス180上の外部
文字は、RAWDATAバス154(図4)上の圧縮前データ・スト
リームから得られ、そのコードワードはエンコーダ194
の出力から得られる。データ入力選択論理回路182はマ
ルチプレクサ192を介して、バス180上の外部文字列から
得られたDATA_INのビット、及びバス202上のコードワー
ドから得られたDATA_INのビットを制御する。このデー
タ入力選択論理回路182は、共に制御論理機構146(図4)
からの探索信号入力178、及び読み取り/書き込み信号入
力164と、エンコーダ194からのマッチ信号入力168によ
って駆動される。
び制御論理機構146の詳細ブロック図である。列テーブ
ル・メモリは、圧縮/伸長処理時間を減らす追加の内部論
理機構を備えた連想記憶RAM(CAM)188形式のアソシエイ
ティブ・アレイから成る。CAM188は、それぞれが別々の
文字列項目を記憶する、「ワード」によって組織化される
(例えば3832x20ビット)。データは、データ・バス190(DA
TA_IN)上でメモリ188に書き込まれる。データ・バス190
は、バス180上で入力された外部文字列(K)を受け取り、
マルチプレクサ192(MUX3)を介してデータ・バス202上で
符号化済み文字列(OMEGA)を受け取る。バス180上の外部
文字は、RAWDATAバス154(図4)上の圧縮前データ・スト
リームから得られ、そのコードワードはエンコーダ194
の出力から得られる。データ入力選択論理回路182はマ
ルチプレクサ192を介して、バス180上の外部文字列から
得られたDATA_INのビット、及びバス202上のコードワー
ドから得られたDATA_INのビットを制御する。このデー
タ入力選択論理回路182は、共に制御論理機構146(図4)
からの探索信号入力178、及び読み取り/書き込み信号入
力164と、エンコーダ194からのマッチ信号入力168によ
って駆動される。
【0063】メモリ188は、マッチ・ライン206(例えば、
264ないし4095)を介してマッチ信号の集合を提供する。
メモリ188内の各ワードごとに1つのマッチ信号が関連
付けられている。バス190上の文字列がメモリ188内のデ
ータ項目の1つにマッチした時、そのメモリ位置に関連
するマッチ信号が活動化される。エンコーダ194は、メ
モリ188からの全てのマッチ信号を符号化し、順に、バ
ス202上で提供されるコードワードを生成する。それに
よって、コードワードは、メモリ188内のマッチしたデ
ータ項目のアドレス位置に等しくなる。エンコーダ194
は、メモリ188内のデータ項目のどれかがデータ・バス19
0上の文字列にマッチした時に活動化されるマッチ信号1
68も生成する。
264ないし4095)を介してマッチ信号の集合を提供する。
メモリ188内の各ワードごとに1つのマッチ信号が関連
付けられている。バス190上の文字列がメモリ188内のデ
ータ項目の1つにマッチした時、そのメモリ位置に関連
するマッチ信号が活動化される。エンコーダ194は、メ
モリ188からの全てのマッチ信号を符号化し、順に、バ
ス202上で提供されるコードワードを生成する。それに
よって、コードワードは、メモリ188内のマッチしたデ
ータ項目のアドレス位置に等しくなる。エンコーダ194
は、メモリ188内のデータ項目のどれかがデータ・バス19
0上の文字列にマッチした時に活動化されるマッチ信号1
68も生成する。
【0064】アドレス・デコーダ184は、外部アドレス・
バス177を介して外部圧縮済み文字、データ・バス186上
でメモリ188から出力された内部文字列、又はアドレス・
ジェネレータ170からの内部アドレスのいずれかを選択
的に受け取り、ワード選択ライン204(例えば、264ない
し4095)を介してアソシエイティブ・アレイ188にアクセ
スする。バス177上の外部圧縮済み文字は、COMPDATAバ
ス158(図4)上の圧縮済みデータ・ストリームから得られ
る。内部アドレス・ジェネレータ170は、エンコーダ194
からのマッチ信号168、探索信号178、読み取り/書き込
み信号164、及びリセット信号162によって制御される。
読み取り/書き込み、及びリセット信号は、制御論理機
構146(図4)から得られる。このアドレス・ジェネレータ
は、初期設定時に(例えば264に)リセットされ、続いて
辞書が作成される時にインクリメントされるカウンタを
含む。
バス177を介して外部圧縮済み文字、データ・バス186上
でメモリ188から出力された内部文字列、又はアドレス・
ジェネレータ170からの内部アドレスのいずれかを選択
的に受け取り、ワード選択ライン204(例えば、264ない
し4095)を介してアソシエイティブ・アレイ188にアクセ
スする。バス177上の外部圧縮済み文字は、COMPDATAバ
ス158(図4)上の圧縮済みデータ・ストリームから得られ
る。内部アドレス・ジェネレータ170は、エンコーダ194
からのマッチ信号168、探索信号178、読み取り/書き込
み信号164、及びリセット信号162によって制御される。
読み取り/書き込み、及びリセット信号は、制御論理機
構146(図4)から得られる。このアドレス・ジェネレータ
は、初期設定時に(例えば264に)リセットされ、続いて
辞書が作成される時にインクリメントされるカウンタを
含む。
【0065】アドレス・デコーダ184に供給されるアドレ
スのソースは、それぞれマルチプレクサ176、174を介し
て、読み取り選択論理機構172、及び読み取り/書き込み
信号164によって制御される。読み取り選択論理機構172
は、リセット信号162、及びメモリ188から出力されるデ
ータ項目186の圧縮状況によって制御される。このデー
タ項目の圧縮状況は、データ項目文字の値によって判定
されうる。例えば、256より大きな値は符号化済み文字
列に割り振られることができ、256より小さい値は単一
データ文字を構成することができる。マルチプレクサ17
6(MUX1)は、バス177、又はバス186から入力を選択し、
マルチプレクサ174(MUX2)はマルチプレクサ176の出力と
アドレス・ジェネレータ170の出力から一方を選択する。
デコーダ184は、データ探索、及びメモリ更新を同じメ
モリ・アクセス・サイクルで実行できる、以下で説明する
自動更新機能を含む。
スのソースは、それぞれマルチプレクサ176、174を介し
て、読み取り選択論理機構172、及び読み取り/書き込み
信号164によって制御される。読み取り選択論理機構172
は、リセット信号162、及びメモリ188から出力されるデ
ータ項目186の圧縮状況によって制御される。このデー
タ項目の圧縮状況は、データ項目文字の値によって判定
されうる。例えば、256より大きな値は符号化済み文字
列に割り振られることができ、256より小さい値は単一
データ文字を構成することができる。マルチプレクサ17
6(MUX1)は、バス177、又はバス186から入力を選択し、
マルチプレクサ174(MUX2)はマルチプレクサ176の出力と
アドレス・ジェネレータ170の出力から一方を選択する。
デコーダ184は、データ探索、及びメモリ更新を同じメ
モリ・アクセス・サイクルで実行できる、以下で説明する
自動更新機能を含む。
【0066】図6は、図5のアドレス・デコーダ184の自
動更新機能の好適実施例の論理図である。マルチプレク
サ174(MUX2)からアドレス・デコーダ184に入力された各
アドレス(ADDRN[19:0])は、2つのANDゲートに送られ
る。ANDゲート208、及び214は単一のアドレス・ラインを
示す。ANDゲート208には、探索信号178(図5)、及びマ
ッチ信号168(図5)の否定値(NOMATCH)も送られる。探索
信号も否定がとられ、「修飾された」書き込み信号と共に
ANDゲート214に送られる。ORゲート212は、2つのANDゲ
ートから出力を受け取り、ワード選択信号(WORDN)を生
成する。マルチプレクサ、又は他の論理機構の組み合わ
せによって同等の機能を提供することができる。
動更新機能の好適実施例の論理図である。マルチプレク
サ174(MUX2)からアドレス・デコーダ184に入力された各
アドレス(ADDRN[19:0])は、2つのANDゲートに送られ
る。ANDゲート208、及び214は単一のアドレス・ラインを
示す。ANDゲート208には、探索信号178(図5)、及びマ
ッチ信号168(図5)の否定値(NOMATCH)も送られる。探索
信号も否定がとられ、「修飾された」書き込み信号と共に
ANDゲート214に送られる。ORゲート212は、2つのANDゲ
ートから出力を受け取り、ワード選択信号(WORDN)を生
成する。マルチプレクサ、又は他の論理機構の組み合わ
せによって同等の機能を提供することができる。
【0067】更新回路は、データ圧縮動作の間、データ
探索が実行される時に活動化される。データ圧縮の間に
探索が失敗した場合、その文字列はメモリ内の次に利用
可能なアドレスに置かれなければならない。データ探索
後にデータ・ワードをメモリに書き込むのに必要なクロ
ック・サイクルの追加を排除するため、マッチが発生し
なかった場合、ゲート208が高レベルになる。文字列が
既にデータ・バス190上にあり、かつ利用可能な次のアド
レスが既にアドレス・ジェネレータ170によってセットさ
れているので、マッチの発生が示された直後に書き込み
を実行することができる。従って、マッチ信号の否定(N
OMATCH)は、利用可能な次のメモリ位置に関連するワー
ド・ライン(WORDN)を活動化するゲート208を活動化す
る。
探索が実行される時に活動化される。データ圧縮の間に
探索が失敗した場合、その文字列はメモリ内の次に利用
可能なアドレスに置かれなければならない。データ探索
後にデータ・ワードをメモリに書き込むのに必要なクロ
ック・サイクルの追加を排除するため、マッチが発生し
なかった場合、ゲート208が高レベルになる。文字列が
既にデータ・バス190上にあり、かつ利用可能な次のアド
レスが既にアドレス・ジェネレータ170によってセットさ
れているので、マッチの発生が示された直後に書き込み
を実行することができる。従って、マッチ信号の否定(N
OMATCH)は、利用可能な次のメモリ位置に関連するワー
ド・ライン(WORDN)を活動化するゲート208を活動化す
る。
【0068】探索動作の間にマッチが見つかった場合、
ワード選択ラインが使用禁止にされ、書き込み動作は行
われない。例えば、外部マイクロプロセッサ書き込み動
作の間では、メモリ内でマッチが発生しなかった時で
も、修飾された書き込み信号を使用してデータ書き込み
が強制的に行われる。この更新機能は、辞書への書き込
みが「透過的」であり、余分なメモリ・アクセスを必要と
しないので、バイトあたり丁度1サイクルの性能を提供
する。
ワード選択ラインが使用禁止にされ、書き込み動作は行
われない。例えば、外部マイクロプロセッサ書き込み動
作の間では、メモリ内でマッチが発生しなかった時で
も、修飾された書き込み信号を使用してデータ書き込み
が強制的に行われる。この更新機能は、辞書への書き込
みが「透過的」であり、余分なメモリ・アクセスを必要と
しないので、バイトあたり丁度1サイクルの性能を提供
する。
【0069】代替案として、図6の回路を使用してメモ
リ内にデータ有効(data_valid)フィールドをセットする
こともできる。例えば、図5のシステムは、メモリ内の
マッチを検査する前に、新しい各文字列をメモリにコピ
ーすることができる。マッチが発生した場合、ワード選
択信号を使用して、新たに記憶されたデータ列に関連す
るデータ有効フィールドが活動化される。
リ内にデータ有効(data_valid)フィールドをセットする
こともできる。例えば、図5のシステムは、メモリ内の
マッチを検査する前に、新しい各文字列をメモリにコピ
ーすることができる。マッチが発生した場合、ワード選
択信号を使用して、新たに記憶されたデータ列に関連す
るデータ有効フィールドが活動化される。
【0070】データ圧縮 圧縮に関する回路144の動作において、マイクロプロセ
ッサ(図示せず)はシステムを圧縮用に初期設定し、メモ
リ188をリセットする。マイクロプロセッサ制御信号(探
索信号178、読み取り/書き込み信号164、リセット信号1
62)は、制御論理機構146(図4)を介して圧縮前データ・
インタフェイス152から得られる。リセット・ラインは、
様々な初期設定動作に使用することができる。例えば、
このリセット・ラインは、各メモリ位置に関連するデー
タ有効フィールドをリセットするようにメモリ188に接
続される。更に、リセット・ラインは、アドレス・ジェネ
レータを、文字列を記憶するための開始メモリ位置に初
期設定する。
ッサ(図示せず)はシステムを圧縮用に初期設定し、メモ
リ188をリセットする。マイクロプロセッサ制御信号(探
索信号178、読み取り/書き込み信号164、リセット信号1
62)は、制御論理機構146(図4)を介して圧縮前データ・
インタフェイス152から得られる。リセット・ラインは、
様々な初期設定動作に使用することができる。例えば、
このリセット・ラインは、各メモリ位置に関連するデー
タ有効フィールドをリセットするようにメモリ188に接
続される。更に、リセット・ラインは、アドレス・ジェネ
レータを、文字列を記憶するための開始メモリ位置に初
期設定する。
【0071】単一入力文字を初期設定するために、いく
つかの異なる技法を使用することができる。例えば、単
一入力文字は、圧縮済みデータ・ストリームの一部とし
てアルゴリズムを用いて符号化することができる。又、
それぞれ任意の単一入力データ文字を表す、符号化済み
の値の集合をメモリにロードすることもできる。
つかの異なる技法を使用することができる。例えば、単
一入力文字は、圧縮済みデータ・ストリームの一部とし
てアルゴリズムを用いて符号化することができる。又、
それぞれ任意の単一入力データ文字を表す、符号化済み
の値の集合をメモリにロードすることもできる。
【0072】読み取り/書き込み・ライン164は、アドレ
ス・ジェネレータ170によって提供されたアドレスをアド
レス・デコーダ184に接続するようマルチプレクサ174に
命令する。圧縮前データ・インタフェイス138(図4)から
の外部文字列は、バス190のバイト・フィールド(DATA_IN
[7:0])、及びコードワード・フィールド(DATA_IN[19:8])
に供給される。次に、探索信号178が活動化され、それ
によってメモリ188は、コードワード/バイト列をメモリ
188内の各位置と比較する。以前にメモリ188内には何も
書き込まれていないので、最初はマッチは発生しない。
従って、バス190上のコードワード/バイト列は、メモリ
188内で最初に使用可能なアドレス位置(例えば、アドレ
ス・ジェネレータ170によって生成される初期設定された
アドレス)に書き込まれる。次に、アドレス・ジェネレー
タ170がインクリメントされ、バス180からの新しい入力
文字がメモリ・データ入力のバイト・フィールドに読み込
まれる。この処理が繰り返され、マッチしないコードワ
ード/バイト列のメモリ188への書き込みが続けられる。
ス・ジェネレータ170によって提供されたアドレスをアド
レス・デコーダ184に接続するようマルチプレクサ174に
命令する。圧縮前データ・インタフェイス138(図4)から
の外部文字列は、バス190のバイト・フィールド(DATA_IN
[7:0])、及びコードワード・フィールド(DATA_IN[19:8])
に供給される。次に、探索信号178が活動化され、それ
によってメモリ188は、コードワード/バイト列をメモリ
188内の各位置と比較する。以前にメモリ188内には何も
書き込まれていないので、最初はマッチは発生しない。
従って、バス190上のコードワード/バイト列は、メモリ
188内で最初に使用可能なアドレス位置(例えば、アドレ
ス・ジェネレータ170によって生成される初期設定された
アドレス)に書き込まれる。次に、アドレス・ジェネレー
タ170がインクリメントされ、バス180からの新しい入力
文字がメモリ・データ入力のバイト・フィールドに読み込
まれる。この処理が繰り返され、マッチしないコードワ
ード/バイト列のメモリ188への書き込みが続けられる。
【0073】マッチが成功した時、入力データ選択論理
機構182は、エンコーダ194から生成されたコードワード
をデータ・バス190のコードワード・フィールド(DATA_IN
[19:8])に置くようマルチプレクサ192に命令する。次
に、バス180からの新しい外部文字が、データ・バス190
のバイト・フィールド(DATA_IN[7:0])に送られる。それ
によって、そのコードワードは、以前にマッチした文字
列を表す。文字列に割り当てられたコードワードが、マ
ッチしたデータ項目アドレスから直接導かれるので、入
力文字を符号化するのに必要な制御論理機構は極めて小
規模なものになる。更に、そのコードワードをマルチプ
レクサ192(MUX3)に送り返して次の入力文字と組み合わ
せることによって、各クロック・サイクルごとに1つの
入力文字を処理することができる。
機構182は、エンコーダ194から生成されたコードワード
をデータ・バス190のコードワード・フィールド(DATA_IN
[19:8])に置くようマルチプレクサ192に命令する。次
に、バス180からの新しい外部文字が、データ・バス190
のバイト・フィールド(DATA_IN[7:0])に送られる。それ
によって、そのコードワードは、以前にマッチした文字
列を表す。文字列に割り当てられたコードワードが、マ
ッチしたデータ項目アドレスから直接導かれるので、入
力文字を符号化するのに必要な制御論理機構は極めて小
規模なものになる。更に、そのコードワードをマルチプ
レクサ192(MUX3)に送り返して次の入力文字と組み合わ
せることによって、各クロック・サイクルごとに1つの
入力文字を処理することができる。
【0074】次に、新しいコードワード/バイト列がメ
モリ188内のデータ項目と比較される。この処理は、マ
ッチが見つからなくなるまで繰り返される。この時点
で、コンプレッサは、最後のマッチからコードワードを
出力し、その新しいコードワード/バイト列をメモリ188
に書き込む。次に、空(null)のコードワードと対になっ
たバイトKをメモリで探索し、それによって新しい列を
始めるためのルート・コードワードを生成することによ
り、バイト・フィールドに送られる最後の入力文字(K)
が、更新済み辞書と比較される(「ルート」コードワード
を含むように初期設定された辞書の場合)。次に、バス1
80からの新しい外部文字(K)がバイト・フィールドに送ら
れ、マッチ処理が繰り返されて(LZWによって)新しい列
が作成される。又、(LZ2と同様に)OMEGAの次に最後の文
字Kを出力する、又はKのコードワードとしてOMEGAに
続いてKのアドレスを出力することができる。
モリ188内のデータ項目と比較される。この処理は、マ
ッチが見つからなくなるまで繰り返される。この時点
で、コンプレッサは、最後のマッチからコードワードを
出力し、その新しいコードワード/バイト列をメモリ188
に書き込む。次に、空(null)のコードワードと対になっ
たバイトKをメモリで探索し、それによって新しい列を
始めるためのルート・コードワードを生成することによ
り、バイト・フィールドに送られる最後の入力文字(K)
が、更新済み辞書と比較される(「ルート」コードワード
を含むように初期設定された辞書の場合)。次に、バス1
80からの新しい外部文字(K)がバイト・フィールドに送ら
れ、マッチ処理が繰り返されて(LZWによって)新しい列
が作成される。又、(LZ2と同様に)OMEGAの次に最後の文
字Kを出力する、又はKのコードワードとしてOMEGAに
続いてKのアドレスを出力することができる。
【0075】辞書が満杯になると、アドレス・ジェネレ
ータ170は、もはや文字列をメモリに書き込むことがで
きないことを、圧縮システムの残りの部分(図4)に対し
て示すテーブル満杯信号196を活動化する。その後、あ
らゆる追加入力データが、メモリ188に記憶されている
現行の項目に応じて圧縮される。
ータ170は、もはや文字列をメモリに書き込むことがで
きないことを、圧縮システムの残りの部分(図4)に対し
て示すテーブル満杯信号196を活動化する。その後、あ
らゆる追加入力データが、メモリ188に記憶されている
現行の項目に応じて圧縮される。
【0076】データ伸長 データ伸長の場合、回路144においてメモリ188をリセッ
トし、入力データを圧縮するために回路を初期設定する
ことによって動作が開始される。伸長は、リンク・リス
ト伸長トラバーサルを含む。例えば、圧縮済みデータ・
アドレスは単に、伸長済みデータ列が位置するメモリ内
のアドレス(例えば、リンク・リストの「ルート」コードワ
ード)を指すことができる。しかし、このアドレスは、
「非ルート」コードワードを有することができる(例え
ば、このコードワードは、その符号化済み文字列を更に
伸長するために必要な次のアドレスへのリンクであ
る)。上述のように、「ルート」コードワード、及び「非ル
ート」コードワードは様々な方法で判定することができ
る。例えば、コードワードの値、又はメモリ内の識別ビ
ットを用いることによって判定することができる。
トし、入力データを圧縮するために回路を初期設定する
ことによって動作が開始される。伸長は、リンク・リス
ト伸長トラバーサルを含む。例えば、圧縮済みデータ・
アドレスは単に、伸長済みデータ列が位置するメモリ内
のアドレス(例えば、リンク・リストの「ルート」コードワ
ード)を指すことができる。しかし、このアドレスは、
「非ルート」コードワードを有することができる(例え
ば、このコードワードは、その符号化済み文字列を更に
伸長するために必要な次のアドレスへのリンクであ
る)。上述のように、「ルート」コードワード、及び「非ル
ート」コードワードは様々な方法で判定することができ
る。例えば、コードワードの値、又はメモリ内の識別ビ
ットを用いることによって判定することができる。
【0077】圧縮済みデータ・インタフェイス148(図4)
が利用可能な圧縮済みデータを有する時、そのデータは
外部アドレス・バス177上でデコーダ184に書き込まれ
る。「非ルート」コードワードを受け取った後、メモリが
読み取られ、(有効な位置を仮定して)バス186のバイト・
フィールド(DATA_OUT[7:0])が制御論理機構146(図4)内
のLIFOスタックにプッシュされる。バス186のコードワ
ード・フィールド(DATA_OUT[19:8])は、非ルート・コード
ワードである場合、MUX1、及びMUX2を介してアドレス・
デコーダ184に送り返され、他のメモリ読み取りが実行
される。非ルート・コードワードがフィードバックされ
る前に、メモリから読み取られたデータ項目の最後のバ
イトがFIFO140内にプッシュされる。この処理は、メモ
リ読み取りの結果が「ルート」コードワードになった時に
終了し、その時点で外部アドレス・バス177から新しいコ
ードワードが読み取られる。
が利用可能な圧縮済みデータを有する時、そのデータは
外部アドレス・バス177上でデコーダ184に書き込まれ
る。「非ルート」コードワードを受け取った後、メモリが
読み取られ、(有効な位置を仮定して)バス186のバイト・
フィールド(DATA_OUT[7:0])が制御論理機構146(図4)内
のLIFOスタックにプッシュされる。バス186のコードワ
ード・フィールド(DATA_OUT[19:8])は、非ルート・コード
ワードである場合、MUX1、及びMUX2を介してアドレス・
デコーダ184に送り返され、他のメモリ読み取りが実行
される。非ルート・コードワードがフィードバックされ
る前に、メモリから読み取られたデータ項目の最後のバ
イトがFIFO140内にプッシュされる。この処理は、メモ
リ読み取りの結果が「ルート」コードワードになった時に
終了し、その時点で外部アドレス・バス177から新しいコ
ードワードが読み取られる。
【0078】ルート・コードワードが識別された後、最
後の復号化済み文字出力が、前の外部符号化済み文字と
連結され、メモリ188内の利用可能な次のアドレスに読
み込まれる。読み取り選択論理機構172は、「ルート」コ
ードワードに関する検査を行い、それに応じて、外部ア
ドレス・バス177、又はDATA_OUTバス186をアドレス・デコ
ーダ184に接続し直すようマルチプレクサ176に命令す
る。又、読み取り選択回路172は、完全に伸長されたコ
ードワードを示すために、符号化済み要素信号198を制
御論理機構146に供給する。FIFO140は次に、伸長された
復号化済み文字をバス154上にダンプする。
後の復号化済み文字出力が、前の外部符号化済み文字と
連結され、メモリ188内の利用可能な次のアドレスに読
み込まれる。読み取り選択論理機構172は、「ルート」コ
ードワードに関する検査を行い、それに応じて、外部ア
ドレス・バス177、又はDATA_OUTバス186をアドレス・デコ
ーダ184に接続し直すようマルチプレクサ176に命令す
る。又、読み取り選択回路172は、完全に伸長されたコ
ードワードを示すために、符号化済み要素信号198を制
御論理機構146に供給する。FIFO140は次に、伸長された
復号化済み文字をバス154上にダンプする。
【0079】図5のシステムでは、伸長動作を簡略化し
ている。伸長が、リンク・リスト・トラバァーサルを含む
ので、組込み論理機構は、外部伸長論理機構(図4)への
追加の相互作用なしにメモリ出力データをアドレス・デ
コーダに送り返すフィードバック機能を提供する。従っ
て、各伸長サイクルに必要な時間が少なくなり、伸長制
御論理機構が簡略化される。メモリ188内の有効なワー
ド、及びコードワードを「修飾する」ための多数の異なる
実施態様がある。ある方法では比較器技法を使用し、別
の方法では、各ワードごとに余分のリセット可能なビッ
トを使用する。ここで使用される技法は、特定のアプリ
ケーション要件に依存する。単方向システム(例えば、C
DROM)では、従来型のRAMを上述のフィードバック回路と
共に、リンク・リスト・トラバーサルに使用して、伸長回
路を更に簡略化することができる。
ている。伸長が、リンク・リスト・トラバァーサルを含む
ので、組込み論理機構は、外部伸長論理機構(図4)への
追加の相互作用なしにメモリ出力データをアドレス・デ
コーダに送り返すフィードバック機能を提供する。従っ
て、各伸長サイクルに必要な時間が少なくなり、伸長制
御論理機構が簡略化される。メモリ188内の有効なワー
ド、及びコードワードを「修飾する」ための多数の異なる
実施態様がある。ある方法では比較器技法を使用し、別
の方法では、各ワードごとに余分のリセット可能なビッ
トを使用する。ここで使用される技法は、特定のアプリ
ケーション要件に依存する。単方向システム(例えば、C
DROM)では、従来型のRAMを上述のフィードバック回路と
共に、リンク・リスト・トラバーサルに使用して、伸長回
路を更に簡略化することができる。
【0080】図7は、本発明の上述の態様によるシステ
ムにおけるデータ圧縮/伸長、又はリンク・リスト記憶/
検索の一般的方法を示すデータ・フロー図である。以下
に示す方法は、辞書がコードワード内に埋め込まれ、そ
れによって、辞書が圧縮済みデータと共にそれぞれ転送
されることが必要でなくなるようなシステムに適応させ
ることができる。例えば、辞書が圧縮済みデータと共に
転送される代替方法を、本システムを使用して実施する
こともできる。
ムにおけるデータ圧縮/伸長、又はリンク・リスト記憶/
検索の一般的方法を示すデータ・フロー図である。以下
に示す方法は、辞書がコードワード内に埋め込まれ、そ
れによって、辞書が圧縮済みデータと共にそれぞれ転送
されることが必要でなくなるようなシステムに適応させ
ることができる。例えば、辞書が圧縮済みデータと共に
転送される代替方法を、本システムを使用して実施する
こともできる。
【0081】点線ブロック232はこのシステムの圧縮処
理であり、点線ブロック234はこのシステムの伸長処理
である。入力224における圧縮前データ(K)は、ブロック
228から出力される符号化済み文字列(OMEGA)と共に決定
ブロック226に供給される。上述のように、OMEGAは文字
列を符号化するデータ項目のアドレスを表す。OMEGA、
及びKは連結され、決定ブロック226で、辞書内の項目
と比較される。OMEGA,Kの入力がメモリ内の項目にマッ
チする場合、ブロック228で、マッチしたデータ項目の
アドレスを用いてその入力が符号化される。次に、この
符号化済みの値(新しいOMEGA)が送り返され、次の外部
文字Kと連結され、決定ブロック226に入力される。こ
の処理は、OMEGA,Kの列がメモリ内のどの項目にもマッ
チしなくなるまで繰り返される。次にブロック230で、
列テーブル・メモリがOMEGA,Kの列を用いて更新され、OM
EGAが出力され、符号化ブロック228に文字Kが送られ
る。Kはブロック228で符号化され、決定ブロック226に
送り返される前に、次の外部データ文字Kと連結され
る。
理であり、点線ブロック234はこのシステムの伸長処理
である。入力224における圧縮前データ(K)は、ブロック
228から出力される符号化済み文字列(OMEGA)と共に決定
ブロック226に供給される。上述のように、OMEGAは文字
列を符号化するデータ項目のアドレスを表す。OMEGA、
及びKは連結され、決定ブロック226で、辞書内の項目
と比較される。OMEGA,Kの入力がメモリ内の項目にマッ
チする場合、ブロック228で、マッチしたデータ項目の
アドレスを用いてその入力が符号化される。次に、この
符号化済みの値(新しいOMEGA)が送り返され、次の外部
文字Kと連結され、決定ブロック226に入力される。こ
の処理は、OMEGA,Kの列がメモリ内のどの項目にもマッ
チしなくなるまで繰り返される。次にブロック230で、
列テーブル・メモリがOMEGA,Kの列を用いて更新され、OM
EGAが出力され、符号化ブロック228に文字Kが送られ
る。Kはブロック228で符号化され、決定ブロック226に
送り返される前に、次の外部データ文字Kと連結され
る。
【0082】符号化済みデータOMEGAは、伸長のためブ
ロック236に送られる。所与の符号化済み入力文字(OMEG
A(i))が、列テーブル・メモリにアクセスするためのアド
レスとして使用される。決定ブロック238で、アドレスO
MEGA(i)におけるデータ項目がルート文字であるかどう
か判定される。ルート文字である場合、メモリから出力
されたデータ項目内に追加する符号化済み文字はない
(例えば、OMEGA(j)は存在しない)。次に、Kに関するメ
モリ・データ項目が伸長済み出力文字としてライン246上
に出力される。決定ブロック238は、以前に符号化され
た文字(OMEGA(i-1))がKと連結され、利用可能な次のメ
モリ・アドレス位置に書き込まれた場合、ブロック240に
ジャンプする。次に、ブロック242は、入力ストリーム
において次に符号化される文字(OMEGA(i+1))を、メモリ
から読み取られる次のデータ項目のアドレス位置として
使用するようブロック236に命令する。
ロック236に送られる。所与の符号化済み入力文字(OMEG
A(i))が、列テーブル・メモリにアクセスするためのアド
レスとして使用される。決定ブロック238で、アドレスO
MEGA(i)におけるデータ項目がルート文字であるかどう
か判定される。ルート文字である場合、メモリから出力
されたデータ項目内に追加する符号化済み文字はない
(例えば、OMEGA(j)は存在しない)。次に、Kに関するメ
モリ・データ項目が伸長済み出力文字としてライン246上
に出力される。決定ブロック238は、以前に符号化され
た文字(OMEGA(i-1))がKと連結され、利用可能な次のメ
モリ・アドレス位置に書き込まれた場合、ブロック240に
ジャンプする。次に、ブロック242は、入力ストリーム
において次に符号化される文字(OMEGA(i+1))を、メモリ
から読み取られる次のデータ項目のアドレス位置として
使用するようブロック236に命令する。
【0083】列テーブル・メモリからの出力がルートで
ない(例えば、出力が符号化済み文字(OMEGA(j)と復号化
済み文字K)から成る)場合、ライン246上にKが出力さ
れ、決定ブロック238はブロック244にジャンプする。ブ
ロック244は復号化済み文字(OMEGA(j))を、メモリから
出力される次のデータ項目のアドレスとして使用する。
次に、メモリ位置OMEGA(j)におけるデータ項目が上述の
ように処理される。この処理は、全ての符号化済み入力
文字が伸長されるまで繰り返される。
ない(例えば、出力が符号化済み文字(OMEGA(j)と復号化
済み文字K)から成る)場合、ライン246上にKが出力さ
れ、決定ブロック238はブロック244にジャンプする。ブ
ロック244は復号化済み文字(OMEGA(j))を、メモリから
出力される次のデータ項目のアドレスとして使用する。
次に、メモリ位置OMEGA(j)におけるデータ項目が上述の
ように処理される。この処理は、全ての符号化済み入力
文字が伸長されるまで繰り返される。
【0084】図8は、図7における点線ブロック232の
詳細データ・フロー図である。このデータ圧縮処理は、
ブロック248で、開始信号、又はリセット信号が活動化
された時点で開始する。ブロック250で、メモリ回路(以
下で説明する)が、例えば、圧縮モード、又は伸長モー
ドで動作し、辞書をリセットするように初期設定され
る。全ての辞書の有効ビットを初期設定する必要があ
り、好適には並行的に行われる。辞書は、項目を単一文
字、又は「ルート」コードワードとして識別するために、
単一文字コードワードを用いて初期設定することも、又
は米国特許第4,558,302号で開示されたWelchのLZWやECM
A-151規格で開示されたDCLZのような、選択された符号
化アルゴリズムに従って外部で生成されたコードワード
の集合を空(null)のコードワードと対にしたもので初期
設定することもできる。又、コードワードの集合を事前
に記憶するよりむしろ、例えば、本出願人に譲渡され
た、データ圧縮辞書アクセス最小化に関する米国特許第
5,142,282号で開示されたように、マッチングが失敗す
るたびにコードワードをリアルタイムに生成することが
できる。空の辞書を含んだその他の初期設定技法を使用
することもできる。
詳細データ・フロー図である。このデータ圧縮処理は、
ブロック248で、開始信号、又はリセット信号が活動化
された時点で開始する。ブロック250で、メモリ回路(以
下で説明する)が、例えば、圧縮モード、又は伸長モー
ドで動作し、辞書をリセットするように初期設定され
る。全ての辞書の有効ビットを初期設定する必要があ
り、好適には並行的に行われる。辞書は、項目を単一文
字、又は「ルート」コードワードとして識別するために、
単一文字コードワードを用いて初期設定することも、又
は米国特許第4,558,302号で開示されたWelchのLZWやECM
A-151規格で開示されたDCLZのような、選択された符号
化アルゴリズムに従って外部で生成されたコードワード
の集合を空(null)のコードワードと対にしたもので初期
設定することもできる。又、コードワードの集合を事前
に記憶するよりむしろ、例えば、本出願人に譲渡され
た、データ圧縮辞書アクセス最小化に関する米国特許第
5,142,282号で開示されたように、マッチングが失敗す
るたびにコードワードをリアルタイムに生成することが
できる。空の辞書を含んだその他の初期設定技法を使用
することもできる。
【0085】入力データ・ストリーム内の最初の文字は
ブロック252で読み取られて、直接OMEGAフィールドに記
憶されるか、又は符号化され(例えば、コード(文字))、
次いでOMEGAフィールドに記憶される。次にブロック256
で、入力データ・ストリーム内の次の入力文字(K)が読み
取られる。ブロック258は、OMEGAとKを組み合わせて1
つの文字列とし(即ち、OMEGA,Kの連結を作成し)、次にO
MEGA,Kの列にマッチするデータ項目を辞書で探索する処
理を示している。辞書にはまだデータ列が記憶されてい
ないので、決定ブロック260はマッチがないことを示
す。OMEGA,Kの列は現在、表現されていないので、決定
ブロック266で利用可能な記憶空間があると判定された
場合、メモリに記憶される。メモリが満杯でない場合、
ブロック268の動作によって、利用可能な次のメモリ記
憶位置(ADDR(N))にOMEGA,Kの列が自動的にロードされ
る。次にブロック270で、アドレス・カウンタをインクリ
メントし、メモリ内の利用可能な次の記憶位置(ADDR(N+
1))が識別される。ブロック272で、第1入力文字の符号
化済みの値OMEGA(アドレス)は適宜、符号化済みデータ
列内の第1文字として出力される。
ブロック252で読み取られて、直接OMEGAフィールドに記
憶されるか、又は符号化され(例えば、コード(文字))、
次いでOMEGAフィールドに記憶される。次にブロック256
で、入力データ・ストリーム内の次の入力文字(K)が読み
取られる。ブロック258は、OMEGAとKを組み合わせて1
つの文字列とし(即ち、OMEGA,Kの連結を作成し)、次にO
MEGA,Kの列にマッチするデータ項目を辞書で探索する処
理を示している。辞書にはまだデータ列が記憶されてい
ないので、決定ブロック260はマッチがないことを示
す。OMEGA,Kの列は現在、表現されていないので、決定
ブロック266で利用可能な記憶空間があると判定された
場合、メモリに記憶される。メモリが満杯でない場合、
ブロック268の動作によって、利用可能な次のメモリ記
憶位置(ADDR(N))にOMEGA,Kの列が自動的にロードされ
る。次にブロック270で、アドレス・カウンタをインクリ
メントし、メモリ内の利用可能な次の記憶位置(ADDR(N+
1))が識別される。ブロック272で、第1入力文字の符号
化済みの値OMEGA(アドレス)は適宜、符号化済みデータ
列内の第1文字として出力される。
【0086】メモリが満杯になると、圧縮システムは単
純に、追加文字列をメモリに書き込む機能を停止する。
例えば、決定ブロック266がメモリが満杯であると判定
した場合、以下で詳細に説明するように、ブロック268
の文字列をロードするステップ、及びブロック270のア
ドレス・カウンタをインクリメントするステップがスキ
ップされ、この処理は、ブロック272の符号化、及び出
力処理にジャンプする。
純に、追加文字列をメモリに書き込む機能を停止する。
例えば、決定ブロック266がメモリが満杯であると判定
した場合、以下で詳細に説明するように、ブロック268
の文字列をロードするステップ、及びブロック270のア
ドレス・カウンタをインクリメントするステップがスキ
ップされ、この処理は、ブロック272の符号化、及び出
力処理にジャンプする。
【0087】OMEGAが出力された後、ブロック274のステ
ップによって、第1入力文字(OMEGA)が第2入力文字
(K)、又はコード(K)と置換される。次に、入力データ・
ストリームからの次の入力文字が読み取られ(K)、それ
によって次のOMEGA,Kの列が提供される。次にこの処理
は、メモリが新しいOMEGA,Kの列で探索されるブロック2
58にループ・バックする。
ップによって、第1入力文字(OMEGA)が第2入力文字
(K)、又はコード(K)と置換される。次に、入力データ・
ストリームからの次の入力文字が読み取られ(K)、それ
によって次のOMEGA,Kの列が提供される。次にこの処理
は、メモリが新しいOMEGA,Kの列で探索されるブロック2
58にループ・バックする。
【0088】決定ブロック260でマッチが示された場
合、その処理はブロック264にジャンプし、そこでOMEGA
フィールドが、マッチ・アドレスに等しいOMEGA,Kの列を
表す符号化済みの値と置換される。次に、データ・スト
リームからの次の入力文字がKフィールドにコピーされ
る。このOMEGAフィールドとKフィールドが組み合わさ
れて、この場合3つの入力文字を表す新しいOMEGA,Kの
列が形成される。この処理は、辞書のデータ項目が新し
い文字列と比較されるブロック258に戻る。以前の文字
列がメモリ内のデータ項目にマッチするかぎり、追加入
力文字が文字列に追加される。もはや新しい文字列がデ
ータ項目にマッチしなくなった時、決定ブロック260
は、そこからブロック266にジャンプし、上述のように
ブロック266、268、及び270のメモリ更新手順が実行され
る。ブロック272は、値OMEGA(例えば、最後の入力文字
列/データ項目のマッチからの符号化済み文字列)を出力
する。ブロック274は、この文字列内の最後の文字(例え
ば、その文字列が列テーブル内のどのデータ項目ともマ
ッチしないような文字)をとり、OMEGAフィールドにコピ
ーする。次にブロック274で、入力データ・ストリームか
らの次の入力文字がKフィールドにコピーされ、処理は
ブロック258にループ・バックする。それによって、圧縮
処理から出力されたOMEGAの単一の符号化済みの値が複
数の入力文字を表すので文字列が圧縮される。
合、その処理はブロック264にジャンプし、そこでOMEGA
フィールドが、マッチ・アドレスに等しいOMEGA,Kの列を
表す符号化済みの値と置換される。次に、データ・スト
リームからの次の入力文字がKフィールドにコピーされ
る。このOMEGAフィールドとKフィールドが組み合わさ
れて、この場合3つの入力文字を表す新しいOMEGA,Kの
列が形成される。この処理は、辞書のデータ項目が新し
い文字列と比較されるブロック258に戻る。以前の文字
列がメモリ内のデータ項目にマッチするかぎり、追加入
力文字が文字列に追加される。もはや新しい文字列がデ
ータ項目にマッチしなくなった時、決定ブロック260
は、そこからブロック266にジャンプし、上述のように
ブロック266、268、及び270のメモリ更新手順が実行され
る。ブロック272は、値OMEGA(例えば、最後の入力文字
列/データ項目のマッチからの符号化済み文字列)を出力
する。ブロック274は、この文字列内の最後の文字(例え
ば、その文字列が列テーブル内のどのデータ項目ともマ
ッチしないような文字)をとり、OMEGAフィールドにコピ
ーする。次にブロック274で、入力データ・ストリームか
らの次の入力文字がKフィールドにコピーされ、処理は
ブロック258にループ・バックする。それによって、圧縮
処理から出力されたOMEGAの単一の符号化済みの値が複
数の入力文字を表すので文字列が圧縮される。
【0089】図9は、図7の圧縮回路246の詳細フロー
図である。ブロック276で、列テーブル・メモリが伸長用
に初期設定される。ブロック278で、第1の符号化済み
ワード(OLDCODE)が得られる。この入力読み取りステッ
プ、又は以後の任意の入力読み取りステップの間で、こ
れ以上のデータが利用できない場合、処理は終了する。
ブロック280で、アルゴリズムに従うか、又は事前に列
テーブル・メモリにロードされた項目を読み取るかのど
ちらかによって、第1の符号化済みワードが復号化され
る。第1の符号化済みワードはルート文字であり、従っ
て復号化され出力される。
図である。ブロック276で、列テーブル・メモリが伸長用
に初期設定される。ブロック278で、第1の符号化済み
ワード(OLDCODE)が得られる。この入力読み取りステッ
プ、又は以後の任意の入力読み取りステップの間で、こ
れ以上のデータが利用できない場合、処理は終了する。
ブロック280で、アルゴリズムに従うか、又は事前に列
テーブル・メモリにロードされた項目を読み取るかのど
ちらかによって、第1の符号化済みワードが復号化され
る。第1の符号化済みワードはルート文字であり、従っ
て復号化され出力される。
【0090】ブロック282で次の符号化済みワード(INCO
DE)が得られ、ブロック284でINCODEが、列テーブルによ
って出力されるデータ項目のアドレスとして使用され
る。一実施例では最初、列テーブルは単一文字バイトの
みから成り、従ってブロック284ではバイトKが出力さ
れる。次にブロック286でバイトKが出力される。以後
のサイクルでは、ブロック284で以下に詳述するようにO
MEGA,Kが返される。
DE)が得られ、ブロック284でINCODEが、列テーブルによ
って出力されるデータ項目のアドレスとして使用され
る。一実施例では最初、列テーブルは単一文字バイトの
みから成り、従ってブロック284ではバイトKが出力さ
れる。次にブロック286でバイトKが出力される。以後
のサイクルでは、ブロック284で以下に詳述するようにO
MEGA,Kが返される。
【0091】決定ブロック288で、そのバイトが列の終
り(例えばルート文字)であるかどうかが判定され、そう
である場合、ブロック292にジャンプする。ブロック292
で、第1の符号化済み入力ワード(OLDCODE)と最後のバ
イト出力(K)を連結したものから成る新しいデータ項目
が、列テーブル内の利用可能な次のアドレスに作成され
る。ブロック294で、次の未使用アドレス位置が指示さ
れ、ブロック296で、OLDCODEが最後の符号化済み入力ワ
ード(INCODE)と置換され、ブロック282に戻る。
り(例えばルート文字)であるかどうかが判定され、そう
である場合、ブロック292にジャンプする。ブロック292
で、第1の符号化済み入力ワード(OLDCODE)と最後のバ
イト出力(K)を連結したものから成る新しいデータ項目
が、列テーブル内の利用可能な次のアドレスに作成され
る。ブロック294で、次の未使用アドレス位置が指示さ
れ、ブロック296で、OLDCODEが最後の符号化済み入力ワ
ード(INCODE)と置換され、ブロック282に戻る。
【0092】ブロック282で、次の符号化済み入力ワー
ド(INCODE)が読み取られ、ブロック284で、INCODEのア
ドレスにおけるデータ項目が出力される。INCODEのアド
レスにおいて出力されたデータ項目がルートでない場
合、それは復号化済みバイトKと、更に復号化できるよ
うに次のアドレスを指すコードワード・フィールド(OMEG
A)を含んでいる。次にブロック286でKが出力され、決
定ブロック288がブロック290にジャンプする。ブロック
290でコードワード・フィールド(OMEGA)が、列テーブル
から次に出力されるデータ項目のアドレスとして使用さ
れ、次にブロック284にループ・バックする。この処理は
列テーブルから出力されるデータ項目がルート文字を含
む(即ち、列の終りになる)まで繰り返される。次に決定
ブロック288はブロック292に進み、そこで以前に読み取
られた符号化済みワード(OLDCODE)が最後の出力バイト
(K)と連結される。次に、ブロック294、及び296の機能
が実行され、処理はブロック282に戻る。従って、伸長
処理によって、図8の圧縮処理で圧縮された最初のデー
タ・ストリームが再生成される。
ド(INCODE)が読み取られ、ブロック284で、INCODEのア
ドレスにおけるデータ項目が出力される。INCODEのアド
レスにおいて出力されたデータ項目がルートでない場
合、それは復号化済みバイトKと、更に復号化できるよ
うに次のアドレスを指すコードワード・フィールド(OMEG
A)を含んでいる。次にブロック286でKが出力され、決
定ブロック288がブロック290にジャンプする。ブロック
290でコードワード・フィールド(OMEGA)が、列テーブル
から次に出力されるデータ項目のアドレスとして使用さ
れ、次にブロック284にループ・バックする。この処理は
列テーブルから出力されるデータ項目がルート文字を含
む(即ち、列の終りになる)まで繰り返される。次に決定
ブロック288はブロック292に進み、そこで以前に読み取
られた符号化済みワード(OLDCODE)が最後の出力バイト
(K)と連結される。次に、ブロック294、及び296の機能
が実行され、処理はブロック282に戻る。従って、伸長
処理によって、図8の圧縮処理で圧縮された最初のデー
タ・ストリームが再生成される。
【0093】図10は、図8、及び9の圧縮、及び伸長ア
ルゴリズムを視覚的に表した図である。生データ・スト
リーム300は、図7に示したデータ圧縮/伸長処理に入力
された圧縮前文字列から成る。この例では、初期設定時
に、単一文字R、I、N、及びTがそれぞれ、メモリ30
2AのADDR0、ADDR1、ADDR2、ADDR3にロードされている。入
力文字は各文字にそのアドレス位置の値を割り当てるこ
とによって符号化されるが、圧縮速度を高めるために、
後述の処理を開始する前に単一入力文字をアルゴリズム
に従って符号化することができる。メモリ302Aは、初期
設定直後の状態の辞書を示し、メモリ302Bは、圧縮が完
了した後の辞書を示す。
ルゴリズムを視覚的に表した図である。生データ・スト
リーム300は、図7に示したデータ圧縮/伸長処理に入力
された圧縮前文字列から成る。この例では、初期設定時
に、単一文字R、I、N、及びTがそれぞれ、メモリ30
2AのADDR0、ADDR1、ADDR2、ADDR3にロードされている。入
力文字は各文字にそのアドレス位置の値を割り当てるこ
とによって符号化されるが、圧縮速度を高めるために、
後述の処理を開始する前に単一入力文字をアルゴリズム
に従って符号化することができる。メモリ302Aは、初期
設定直後の状態の辞書を示し、メモリ302Bは、圧縮が完
了した後の辞書を示す。
【0094】データ・ストリーム300からの第1の入力文
字Rは、アドレス位置ADDR0におけるデータ項目とマッ
チする。マッチがあったので、圧縮システムは、Rに関
する符号化済みの値(ADDR0=0)を次の入力文字「I」と連結
し、メモリ302Aで「0I」のマッチングに関して探索が行わ
れる。メモリに「0I」のマッチングがないので、メモリ30
2Bに示すように、「0I」は利用可能な次のメモリ位置(ADD
R4)に書き込まれる。マッチした最大のシーケンスに関
するコードワード(即ち、「R」=0に関するコードワード)
が、圧縮済み文字ストリーム304内で最初に符号化され
た文字として出力される。次に、圧縮システムは、次の
入力文字「N」と連結された「I」に関する符号化済みの値
(即ち、ADDR1=1)から成る列をメモリ302Bで探索する。3
02Bに示したように、列「1N」は辞書にないので、利用可
能な次のメモリ位置(ADDR5)に書き込まれる。圧縮済み
文字ストリーム304内で2番目に符号化された文字とし
て値1(例えば、最後にマッチした文字列=「I」)が出力さ
れる。
字Rは、アドレス位置ADDR0におけるデータ項目とマッ
チする。マッチがあったので、圧縮システムは、Rに関
する符号化済みの値(ADDR0=0)を次の入力文字「I」と連結
し、メモリ302Aで「0I」のマッチングに関して探索が行わ
れる。メモリに「0I」のマッチングがないので、メモリ30
2Bに示すように、「0I」は利用可能な次のメモリ位置(ADD
R4)に書き込まれる。マッチした最大のシーケンスに関
するコードワード(即ち、「R」=0に関するコードワード)
が、圧縮済み文字ストリーム304内で最初に符号化され
た文字として出力される。次に、圧縮システムは、次の
入力文字「N」と連結された「I」に関する符号化済みの値
(即ち、ADDR1=1)から成る列をメモリ302Bで探索する。3
02Bに示したように、列「1N」は辞書にないので、利用可
能な次のメモリ位置(ADDR5)に書き込まれる。圧縮済み
文字ストリーム304内で2番目に符号化された文字とし
て値1(例えば、最後にマッチした文字列=「I」)が出力さ
れる。
【0095】この処理は、圧縮前文字ストリーム300内
の第2の「I」が処理される(例えば、文字306)まで、引き
続き同様の方法でメモリ302Bを作成し、入力文字を符号
化する。この圧縮システムは、「I」がアドレス位置ADDR1
に位置するので、「I」を値1で符号化する。この符号化
済みの値1が次の入力文字Nと連結され、その列「1
N」がメモリ302B内のデータ項目と比較される。そ
のシーケンス「1N」は、文字ストリーム300に以前現れて
いるので、列「1N]はメモリ内の項目(例えば、ADDR5にお
けるデータ項目)とマッチする。従って、列「1N」は「5」と
して符号化され、次の入力文字「T」と連結される。その
列「5T」は、メモリ302B内のどの項目ともマッチしないの
で、利用可能な次のアドレス位置(ADDR8)に書き込ま
れ、最後にマッチした文字列「5」に関するコードワード
が文字ストリーム304内に出力される。次に、入力文字
「T」に関する符号化済みの値(ADDR3=3)が次の入力文字
「I」と連結され、この処理が繰り返される。メモリ302B
は、文字ストリーム300から辞書のために作成された全
ての文字を示す。文字ストリーム304は、生データ・スト
リーム300に関する完全な圧縮済み文字ストリームであ
る。文字ストリーム300内の9つの文字を表すのに6種
の符号化済み文字しか必要とされないことに留意された
い。
の第2の「I」が処理される(例えば、文字306)まで、引き
続き同様の方法でメモリ302Bを作成し、入力文字を符号
化する。この圧縮システムは、「I」がアドレス位置ADDR1
に位置するので、「I」を値1で符号化する。この符号化
済みの値1が次の入力文字Nと連結され、その列「1
N」がメモリ302B内のデータ項目と比較される。そ
のシーケンス「1N」は、文字ストリーム300に以前現れて
いるので、列「1N]はメモリ内の項目(例えば、ADDR5にお
けるデータ項目)とマッチする。従って、列「1N」は「5」と
して符号化され、次の入力文字「T」と連結される。その
列「5T」は、メモリ302B内のどの項目ともマッチしないの
で、利用可能な次のアドレス位置(ADDR8)に書き込ま
れ、最後にマッチした文字列「5」に関するコードワード
が文字ストリーム304内に出力される。次に、入力文字
「T」に関する符号化済みの値(ADDR3=3)が次の入力文字
「I」と連結され、この処理が繰り返される。メモリ302B
は、文字ストリーム300から辞書のために作成された全
ての文字を示す。文字ストリーム304は、生データ・スト
リーム300に関する完全な圧縮済み文字ストリームであ
る。文字ストリーム300内の9つの文字を表すのに6種
の符号化済み文字しか必要とされないことに留意された
い。
【0096】デコンプレッサ辞書は、302Cに示したよう
に、最初の4つのアドレス位置がそれぞれ、単一入力文
字R、I、N、及びTに関する復号化済みの値を含むよ
うに、伸長用に再び初期設定される。この場合も単一文
字の復号化をアルゴリズムに従って実行することができ
る。第1の符号化済み入力文字「0」が、メモリ302Cへの
アドレスとして使用される。伸長システムは、例えば値
「0」が4より小さいことを検査することによって、その
値がルート・コードワードであることを判定する。それ
によって、ADDR0におけるデータ項目(例えば、「R」)が、
伸長済み文字ストリーム308内の第1文字として出力さ
れる。次に、伸長システムは次の符号化済み入力文字
「1」を読み取る。この値はやはりルート・コードワードで
あり、従ってADDR1におけるデータ項目が、伸長済み文
字ストリーム308内の第2文字「I」として出力される。
に、最初の4つのアドレス位置がそれぞれ、単一入力文
字R、I、N、及びTに関する復号化済みの値を含むよ
うに、伸長用に再び初期設定される。この場合も単一文
字の復号化をアルゴリズムに従って実行することができ
る。第1の符号化済み入力文字「0」が、メモリ302Cへの
アドレスとして使用される。伸長システムは、例えば値
「0」が4より小さいことを検査することによって、その
値がルート・コードワードであることを判定する。それ
によって、ADDR0におけるデータ項目(例えば、「R」)が、
伸長済み文字ストリーム308内の第1文字として出力さ
れる。次に、伸長システムは次の符号化済み入力文字
「1」を読み取る。この値はやはりルート・コードワードで
あり、従ってADDR1におけるデータ項目が、伸長済み文
字ストリーム308内の第2文字「I」として出力される。
【0097】この時点で、以前のコードワード「0」と連
結され、最後に伸長された文字「I」を使用して、新しい
辞書項目が作成される。次に、メモリ302Dに示したよう
に、その列「0I」が利用可能な次のアドレス位置(ADDR4)
に書き込まれる。次のコードワード「2」が入力され、こ
の処理が繰り返される。今回は、アドレス位置ADDR2に
おけるデータ項目(例えば、N)が出力され、次に列「1N」
がメモリのアドレス位置ADDR5に書き込まれる。
結され、最後に伸長された文字「I」を使用して、新しい
辞書項目が作成される。次に、メモリ302Dに示したよう
に、その列「0I」が利用可能な次のアドレス位置(ADDR4)
に書き込まれる。次のコードワード「2」が入力され、こ
の処理が繰り返される。今回は、アドレス位置ADDR2に
おけるデータ項目(例えば、N)が出力され、次に列「1N」
がメモリのアドレス位置ADDR5に書き込まれる。
【0098】この処理は、入力文字「5」が伸長システム
によって読み取られるまで、同様の方法で繰り返され
る。伸長エンジンは、このコードワードを使用してADDR
5におけるデータ項目を参照する。符号化済み文字「5」
は、3より大きいのでルートではなく、従って伸長シス
テムは、アドレス位置ADDR5におけるデータ項目の最後
のバイト(例えば、「N」)を出力する。データ項目の残り
(例えば、「1」)は次のアドレスとして使用される。コー
ドワード「1」はルートなので、ADDR1におけるデータ項目
(例えば、「I」)が出力され、これ以上の伸長は必要とさ
れない。次に、伸長済み文字「IN」が文字ストリーム308
に置かれる。最後に伸長された出力文字「I」、及び以前
に符号化された入力文字「3」を使用して、メモリ内の新
しいデータ項目がアドレス位置ADDR7に書き込まれる。
この処理は、文字ストリーム304内の文字が全て伸長さ
れるまで繰り返される。HP-DC技法をハッシングと共に
使用して作成された圧縮/伸長辞書は異なるものである
ことに留意されたい。これに対して、本システム、及び
方法によって作成された圧縮辞書302Bと伸長辞書302Dは
同一のアドレス/項目を有する。
によって読み取られるまで、同様の方法で繰り返され
る。伸長エンジンは、このコードワードを使用してADDR
5におけるデータ項目を参照する。符号化済み文字「5」
は、3より大きいのでルートではなく、従って伸長シス
テムは、アドレス位置ADDR5におけるデータ項目の最後
のバイト(例えば、「N」)を出力する。データ項目の残り
(例えば、「1」)は次のアドレスとして使用される。コー
ドワード「1」はルートなので、ADDR1におけるデータ項目
(例えば、「I」)が出力され、これ以上の伸長は必要とさ
れない。次に、伸長済み文字「IN」が文字ストリーム308
に置かれる。最後に伸長された出力文字「I」、及び以前
に符号化された入力文字「3」を使用して、メモリ内の新
しいデータ項目がアドレス位置ADDR7に書き込まれる。
この処理は、文字ストリーム304内の文字が全て伸長さ
れるまで繰り返される。HP-DC技法をハッシングと共に
使用して作成された圧縮/伸長辞書は異なるものである
ことに留意されたい。これに対して、本システム、及び
方法によって作成された圧縮辞書302Bと伸長辞書302Dは
同一のアドレス/項目を有する。
【0099】III.CAM圧縮/伸長システムにおける複数
辞書の使用 CAMを使用してデータを圧縮するために必要とされるメ
モリ量を更に減らすために、図5に示したCAMデータ圧
縮システムを待機辞書(図3参照)と共に使用する。CAM
は、各クロック・サイクルごとに1文字を処理する能力
があるが、現在、最小限のメモリを使用してデータを圧
縮することができる。更に、リセット後、有用な文字列
の集合を現行辞書に維持することによって、データ圧縮
率が向上する。以下に示す方法は適応的なものであり、
辞書は各伸長処理の前に個別の辞書が転送されなくても
済むようにコードワードに埋め込まれる。
辞書の使用 CAMを使用してデータを圧縮するために必要とされるメ
モリ量を更に減らすために、図5に示したCAMデータ圧
縮システムを待機辞書(図3参照)と共に使用する。CAM
は、各クロック・サイクルごとに1文字を処理する能力
があるが、現在、最小限のメモリを使用してデータを圧
縮することができる。更に、リセット後、有用な文字列
の集合を現行辞書に維持することによって、データ圧縮
率が向上する。以下に示す方法は適応的なものであり、
辞書は各伸長処理の前に個別の辞書が転送されなくても
済むようにコードワードに埋め込まれる。
【0100】図11は、CAM複数辞書の組み込まれた圧縮/
伸長システムの高レベル・ブロック図である。例示のた
めに、このシステムは、図5に示したものと同様の2bx
(b+m+2)のCAM312を使用して実施されている。CAM312
は、制御プロセッサ(図示せず)に接続された制御バス31
4を備えている。アドレス・バス316(bビット幅)、及び
データ・バス318(nビット幅)がCAM312に接続されてい
る。nビット幅DATA_MASKバス320のゼロ・ビットはCAM探
索時に、そのビットを使用不能にする。例えば、第1マ
スク・ビット(DATA_MASK[0])上の信号「0」は、CAM312に送
られる第1のDATA_INビット(DATA_IN[0])を使用不能に
する。使用不能とされたDATA_INビットは、ライン318上
の信号にマッチするデータ項目をCAM312で探索する際に
考慮されない。データ・マスキング回路は、当技術分野
で周知のものである。従って、CAM312内で使用されるマ
スキング回路の細部は詳細には示されていない。ライン
322のマッチング成功ラインは、バス318上のデータが、
CAM312内に以前記憶された項目とマッチする場合には、
必ず活動状態となる。MATCH_ADDRESSバス326は、マッチ
したデータ項目のアドレスを含み、DATA_OUTライン324
は、CAM312に以前記憶されたデータ項目を出力するため
に使用される。
伸長システムの高レベル・ブロック図である。例示のた
めに、このシステムは、図5に示したものと同様の2bx
(b+m+2)のCAM312を使用して実施されている。CAM312
は、制御プロセッサ(図示せず)に接続された制御バス31
4を備えている。アドレス・バス316(bビット幅)、及び
データ・バス318(nビット幅)がCAM312に接続されてい
る。nビット幅DATA_MASKバス320のゼロ・ビットはCAM探
索時に、そのビットを使用不能にする。例えば、第1マ
スク・ビット(DATA_MASK[0])上の信号「0」は、CAM312に送
られる第1のDATA_INビット(DATA_IN[0])を使用不能に
する。使用不能とされたDATA_INビットは、ライン318上
の信号にマッチするデータ項目をCAM312で探索する際に
考慮されない。データ・マスキング回路は、当技術分野
で周知のものである。従って、CAM312内で使用されるマ
スキング回路の細部は詳細には示されていない。ライン
322のマッチング成功ラインは、バス318上のデータが、
CAM312内に以前記憶された項目とマッチする場合には、
必ず活動状態となる。MATCH_ADDRESSバス326は、マッチ
したデータ項目のアドレスを含み、DATA_OUTライン324
は、CAM312に以前記憶されたデータ項目を出力するため
に使用される。
【0101】図12は、CAM内の各辞書項目内に含まれる
様々なフィールドを示す。各CAMデータ項目は、サフィ
ックス文字Kを記憶するためのmビット幅の文字フィー
ルド(CHAR)、符号化済み文字の値OMEGAを記憶するため
のbビット幅のコード・フィールド(CODE)、及びコード・
フィールドと文字フィールドに関連する辞書状況ビット
を記憶するための2ビット幅の状況フィールド(ST)の3
つのフィールドを有する。状況フィールド(ST)は、以下
の4つのとりうる値のうち1つをとる。 FREE:CAMメモリ位置は現在、現行辞書で未使用である。 CD :CAM位置は、現行辞書に属するが待機辞書には属し
ないデータ項目を含む。 SD :CAM位置は、現行辞書と待機辞書の両方に属するデ
ータ項目を含む。 INV :無効な値。通常の動作では発生しない。
様々なフィールドを示す。各CAMデータ項目は、サフィ
ックス文字Kを記憶するためのmビット幅の文字フィー
ルド(CHAR)、符号化済み文字の値OMEGAを記憶するため
のbビット幅のコード・フィールド(CODE)、及びコード・
フィールドと文字フィールドに関連する辞書状況ビット
を記憶するための2ビット幅の状況フィールド(ST)の3
つのフィールドを有する。状況フィールド(ST)は、以下
の4つのとりうる値のうち1つをとる。 FREE:CAMメモリ位置は現在、現行辞書で未使用である。 CD :CAM位置は、現行辞書に属するが待機辞書には属し
ないデータ項目を含む。 SD :CAM位置は、現行辞書と待機辞書の両方に属するデ
ータ項目を含む。 INV :無効な値。通常の動作では発生しない。
【0102】FREE、CD、SD、及びINVに対応する2進値は固
定的ではない。コンプレッサ、及びデコンプレッサは、
0<S<3のとりうる4つの状態(S)のどれか1つであってよ
い、状態マシンとして動作する。状況フィールド(ST)に
関する特定の2進値は、状態(S)の関数FREE(S)、CD(S)、S
D(S)、及びINV(S)であり、図13で定義されている。例え
ば、状態S=0ではCAMデータ項目の状況フィールドにビッ
ト[0:0]が存在する場合、そのメモリ位置はフリー(FRE
E)であり、現在、現行辞書で使用されていないとみなさ
れる。しかし、コンプレッサ/デコンプレッサ・システム
が状態S=2である場合、状況フィールドにビット値[0:0]
を有するCAM位置は、待機辞書に割り当てられたデータ
項目であるとみなされる。
定的ではない。コンプレッサ、及びデコンプレッサは、
0<S<3のとりうる4つの状態(S)のどれか1つであってよ
い、状態マシンとして動作する。状況フィールド(ST)に
関する特定の2進値は、状態(S)の関数FREE(S)、CD(S)、S
D(S)、及びINV(S)であり、図13で定義されている。例え
ば、状態S=0ではCAMデータ項目の状況フィールドにビッ
ト[0:0]が存在する場合、そのメモリ位置はフリー(FRE
E)であり、現在、現行辞書で使用されていないとみなさ
れる。しかし、コンプレッサ/デコンプレッサ・システム
が状態S=2である場合、状況フィールドにビット値[0:0]
を有するCAM位置は、待機辞書に割り当てられたデータ
項目であるとみなされる。
【0103】最初、システムは状態S=0であり、全ての
状況フィールドは[0:0]にセットされる(例えば、ST=FRE
E(S))。以下で詳細に説明するように、グローバル初期
設定が必要とされるのはこの時だけであり、これによっ
て、以後の辞書のリセット時に発生する恐れがある初期
設定時間の遅延が最小限に抑えられる。最初は状態S=0
であるコンプレッサは、入力文字の読み取り、入力文字
の圧縮、及び現行辞書(CD)と待機辞書(SD)の作成を平行
して開始する。CDが満杯になると、辞書の切り替えが行
われ、それによってSD内のデータ項目が、CD内の新しい
データ項目になる。SDは、有効なデータ項目が全て削除
され、基本的に空になる。
状況フィールドは[0:0]にセットされる(例えば、ST=FRE
E(S))。以下で詳細に説明するように、グローバル初期
設定が必要とされるのはこの時だけであり、これによっ
て、以後の辞書のリセット時に発生する恐れがある初期
設定時間の遅延が最小限に抑えられる。最初は状態S=0
であるコンプレッサは、入力文字の読み取り、入力文字
の圧縮、及び現行辞書(CD)と待機辞書(SD)の作成を平行
して開始する。CDが満杯になると、辞書の切り替えが行
われ、それによってSD内のデータ項目が、CD内の新しい
データ項目になる。SDは、有効なデータ項目が全て削除
され、基本的に空になる。
【0104】辞書の切り替えは、システムが状態をS=0-
>S=1に遷移させた時に行われる。図13を参照すると、状
態S=1では、FREE項目は、状態S=0の場合のCDの値と同じ
ST=[1:0]を有する。状態S=1では、CD項目は、状態S=0の
場合のSDの値と同じST=[1:1]を有する。状態遷移が発生
するのは、CDが満杯になった時だけであり、従ってCAM
内の全ての項目はCD、又はSDのどちらかにマークされる
(即ち、FREE値を有する状況フィールドの項目は存在せ
ず、値INVが書き込まれることもない)。従って、S=0か
らS=1への状態遷移の直後に、全ての項目は値FREE、又
はCDを有する(以下で説明するように、実際には辞書メ
モリ内に維持されない、最初の単一文字列は例外であ
る)。値SDを有する項目はないので、新しいSDは空の状
態で開始される。S=1->S=2、S=2->S=3、S=3->S=0の状態遷
移に関しても同様の状況が発生する。図14は、上述の圧
縮/伸長システムに関する状態遷移の変化を示す。
>S=1に遷移させた時に行われる。図13を参照すると、状
態S=1では、FREE項目は、状態S=0の場合のCDの値と同じ
ST=[1:0]を有する。状態S=1では、CD項目は、状態S=0の
場合のSDの値と同じST=[1:1]を有する。状態遷移が発生
するのは、CDが満杯になった時だけであり、従ってCAM
内の全ての項目はCD、又はSDのどちらかにマークされる
(即ち、FREE値を有する状況フィールドの項目は存在せ
ず、値INVが書き込まれることもない)。従って、S=0か
らS=1への状態遷移の直後に、全ての項目は値FREE、又
はCDを有する(以下で説明するように、実際には辞書メ
モリ内に維持されない、最初の単一文字列は例外であ
る)。値SDを有する項目はないので、新しいSDは空の状
態で開始される。S=1->S=2、S=2->S=3、S=3->S=0の状態遷
移に関しても同様の状況が発生する。図14は、上述の圧
縮/伸長システムに関する状態遷移の変化を示す。
【0105】図15は、コンプレッサ/デコンプレッサの
状態を変更するための簡単なハードウェア実施態様を示
す。状況レジスタ328の最初のビット値が状態S=0におい
て示されている。各状態遷移ごとに、状況レジスタ内の
ビットが、FREE->INV->SD->CD->FREEのように周期的に
シフトしている。従って、状態制御は、8ビット周期の
シフト・レジスタを使用して、各状態変化ごとにレジス
タ328を2ビット左にシフトさせることによって簡単に
実施される。
状態を変更するための簡単なハードウェア実施態様を示
す。状況レジスタ328の最初のビット値が状態S=0におい
て示されている。各状態遷移ごとに、状況レジスタ内の
ビットが、FREE->INV->SD->CD->FREEのように周期的に
シフトしている。従って、状態制御は、8ビット周期の
シフト・レジスタを使用して、各状態変化ごとにレジス
タ328を2ビット左にシフトさせることによって簡単に
実施される。
【0106】CAMベースの待機辞書コンプレッサを記述
する際、CAMメモリ位置の内容は3つのフィールド(状
況、コード、文字)によって示され、コード(A)は単一文字
列「A」の符号化済みの値を表す。説明上、コードワード
には、メモリ・アドレス位置に対応する値が割り当てら
れている。しかし、コードワード値も、メモリ・アドレ
ス位置の簡単な関数として容易に導かれ、当業者によっ
て容易に実施される。事前に定義されたアドレス空間
(例えば、アドレス0ないし2m-1)内のコード(コード
(A))は、辞書にアクセスすることなく、すぐに使用でき
ると仮定する。前で説明したように(図5参照)、これら
のコードに対応するメモリ位置はCAM内に物理的に存在
する必要はない。従って、全てのCAM探索でこのような
位置は除外されると仮定する。簡略化のために、「ファ
イルの終り」条件も無視する。
する際、CAMメモリ位置の内容は3つのフィールド(状
況、コード、文字)によって示され、コード(A)は単一文字
列「A」の符号化済みの値を表す。説明上、コードワード
には、メモリ・アドレス位置に対応する値が割り当てら
れている。しかし、コードワード値も、メモリ・アドレ
ス位置の簡単な関数として容易に導かれ、当業者によっ
て容易に実施される。事前に定義されたアドレス空間
(例えば、アドレス0ないし2m-1)内のコード(コード
(A))は、辞書にアクセスすることなく、すぐに使用でき
ると仮定する。前で説明したように(図5参照)、これら
のコードに対応するメモリ位置はCAM内に物理的に存在
する必要はない。従って、全てのCAM探索でこのような
位置は除外されると仮定する。簡略化のために、「ファ
イルの終り」条件も無視する。
【0107】CAMベースの複数辞書システムの実施態様 図16は、CAMベースの複数辞書圧縮/伸長システムの詳細
な回路図である。図16の回路図は、複数辞書圧縮/伸長
を提供するために必要な、追加機能構成要素を示してい
る。CAM圧縮/伸長回路312は、図11に示したものと同様
であり、状況レジスタ328は図15に示したものと同様で
ある。DATA_INレジスタ342、及びMASKレジスタ350はそ
れぞれ、CAM312のDATA_IN、及びMASKポートを介して、
状況、コード、及び文字フィールドを供給する。CAM内
の各データ項目に関する状況フィールドは、状況レジス
タ328を介して直接制御されるか又は、状況パターン・ジ
ェネレータ338を介して間接的に制御される。状況パタ
ーン・ジェネレータは図17に詳細に示されている。
な回路図である。図16の回路図は、複数辞書圧縮/伸長
を提供するために必要な、追加機能構成要素を示してい
る。CAM圧縮/伸長回路312は、図11に示したものと同様
であり、状況レジスタ328は図15に示したものと同様で
ある。DATA_INレジスタ342、及びMASKレジスタ350はそ
れぞれ、CAM312のDATA_IN、及びMASKポートを介して、
状況、コード、及び文字フィールドを供給する。CAM内
の各データ項目に関する状況フィールドは、状況レジス
タ328を介して直接制御されるか又は、状況パターン・ジ
ェネレータ338を介して間接的に制御される。状況パタ
ーン・ジェネレータは図17に詳細に示されている。
【0108】DATA_INポートを供給している特定のCDラ
イン、及びSDラインは、制御バス314を操作することに
よって、マルチプレクサ340(MUX M1)を介して制御され
る。制御バス314上の信号は、システム・プロセッサ(図
示せず)、及びCAM312内の圧縮/伸長制御機能から得ら
れる。制御バス314は、図5に示したのと同様の読み
取り信号、書き込み信号、探索信号、及びリセット信号
を含む。CAM312内のコンプレッサ/デコンプレッサ内部
制御論理機構も図5に示したものと同様である。以下で
記述する特定機能の幾つかを実施するために、この論理
機構に対する軽微な修正が必要とされることがある。こ
れらの回路の修正は、当業者によって容易に実施される
ものであり、従って詳細には図示されていない。
イン、及びSDラインは、制御バス314を操作することに
よって、マルチプレクサ340(MUX M1)を介して制御され
る。制御バス314上の信号は、システム・プロセッサ(図
示せず)、及びCAM312内の圧縮/伸長制御機能から得ら
れる。制御バス314は、図5に示したのと同様の読み
取り信号、書き込み信号、探索信号、及びリセット信号
を含む。CAM312内のコンプレッサ/デコンプレッサ内部
制御論理機構も図5に示したものと同様である。以下で
記述する特定機能の幾つかを実施するために、この論理
機構に対する軽微な修正が必要とされることがある。こ
れらの回路の修正は、当業者によって容易に実施される
ものであり、従って詳細には図示されていない。
【0109】ライン326は、CAM312のポートMATCH_ADDRE
SSをCAM312のポートDATA_INに接続する。外部データ・バ
ス344は、直接ポートADDRESS_INに接続され、レジスタ3
42を介してポートDATA_INに接続されている。状況パタ
ーン・ジェネレータ・ライン336、及びデータ入力ライン3
48は、マルチプレクサ346(MUX M2)を介してMASKレジス
タ350の状況フィールドを供給する。ライン349上の探索
タイプの信号、及び制御生成回路352からのその他の様
々な制御信号は、ライン322上のMATCH_SUCCESS信号によ
って制御される。ライン324上のDATA_OUT信号は、図4
に示したように、圧縮済みデータ、又は伸長済みデータ
を、データ・インタフェイスに出力する。内部アドレス・
ポインタ354(NEXT_CODE)は、第2アドレス・ポインタ356
(SAVE_CODE)にデータを書き込むことも、あるいはCAMの
ポートDATA_INからデータを受け取ることもできる。
SSをCAM312のポートDATA_INに接続する。外部データ・バ
ス344は、直接ポートADDRESS_INに接続され、レジスタ3
42を介してポートDATA_INに接続されている。状況パタ
ーン・ジェネレータ・ライン336、及びデータ入力ライン3
48は、マルチプレクサ346(MUX M2)を介してMASKレジス
タ350の状況フィールドを供給する。ライン349上の探索
タイプの信号、及び制御生成回路352からのその他の様
々な制御信号は、ライン322上のMATCH_SUCCESS信号によ
って制御される。ライン324上のDATA_OUT信号は、図4
に示したように、圧縮済みデータ、又は伸長済みデータ
を、データ・インタフェイスに出力する。内部アドレス・
ポインタ354(NEXT_CODE)は、第2アドレス・ポインタ356
(SAVE_CODE)にデータを書き込むことも、あるいはCAMの
ポートDATA_INからデータを受け取ることもできる。
【0110】図17は、図16の状況パターン・ジェネレー
タ338の詳細な回路図である。状況レジスタ328(図16)の
CDフィールド、及びSDフィールドからの第1ビットは、
ANDゲート358、及びEXCLUSIVE-NORゲート362への入力で
ある。CDフィールド、及びSDフィールドからの第2ビッ
トは、ANDゲート360、及びEXCLUSIVE-NORゲート364に接
続されている。ANDゲートはCAMのポートDATA_INの状況
フィールドを供給し、EXCLUSIVE-NORゲートはCAMのポー
トMASKの状況フィールドを供給する(図16)。
タ338の詳細な回路図である。状況レジスタ328(図16)の
CDフィールド、及びSDフィールドからの第1ビットは、
ANDゲート358、及びEXCLUSIVE-NORゲート362への入力で
ある。CDフィールド、及びSDフィールドからの第2ビッ
トは、ANDゲート360、及びEXCLUSIVE-NORゲート364に接
続されている。ANDゲートはCAMのポートDATA_INの状況
フィールドを供給し、EXCLUSIVE-NORゲートはCAMのポー
トMASKの状況フィールドを供給する(図16)。
【0111】圧縮/伸長システムは、(以下で詳述するよ
うに)CD辞書項目とSD辞書項目の両方を同時に探索でき
なければならない。これは、状況レジスタ328(図16)内
のビットを操作することによって実行される。CD、及び
SD内のビットの1つは常にマッチし、残りのビットは常
に異なる(図13参照)。従って、そのマッチしたビットを
使用して、有効なSD辞書項目、又はCD辞書項目が探索さ
れ、残りのビットがマスク・アウトされる。例えば、状
態S=0では、現行辞書CDのビット値が[1:0]であり、待機
辞書のビット値は[1:1]である。これによって、ANDゲー
ト358、及びEXCLUSIVE-NORゲート362の出力が高レベル
に遷移し、ANDゲート360、及びEXCLUSIVE-NORゲート364
の出力が低レベルに遷移する。従って、第1ビット位置
に「1」が配置されているCAM辞書内のあらゆる状況フィー
ルド(例えば、CD(S)、又はSD(S))は、CD、又はSDの有効
な辞書項目として識別される。
うに)CD辞書項目とSD辞書項目の両方を同時に探索でき
なければならない。これは、状況レジスタ328(図16)内
のビットを操作することによって実行される。CD、及び
SD内のビットの1つは常にマッチし、残りのビットは常
に異なる(図13参照)。従って、そのマッチしたビットを
使用して、有効なSD辞書項目、又はCD辞書項目が探索さ
れ、残りのビットがマスク・アウトされる。例えば、状
態S=0では、現行辞書CDのビット値が[1:0]であり、待機
辞書のビット値は[1:1]である。これによって、ANDゲー
ト358、及びEXCLUSIVE-NORゲート362の出力が高レベル
に遷移し、ANDゲート360、及びEXCLUSIVE-NORゲート364
の出力が低レベルに遷移する。従って、第1ビット位置
に「1」が配置されているCAM辞書内のあらゆる状況フィー
ルド(例えば、CD(S)、又はSD(S))は、CD、又はSDの有効
な辞書項目として識別される。
【0112】データ圧縮 図16のシステムは以下のような方法でデータを圧縮す
る。システムは、図15に示したように、ビット値を状況
レジスタ328にロードすることによって状態S=0にセット
される。CAM辞書内の全ての状況フィールドはST=FREE
(S)(即ち[0:0])にセットされ、アドレス・ポインタNEXT_
CODEはCAMの利用可能な第1アドレスにセットされる。
図5に示したCAMに関して前述したように、全てのCAMア
ドレスが文字列の記憶に使用可能な場合、データ圧縮の
間に単一入力文字をアルゴリズムに従って符号化するこ
とができる。しかし、単一データ文字がCAMに記憶され
る場合、符号化文字列を書き込むために使用可能な第1
アドレスは通常、最後の単一文字位置の次のアドレス位
置になる。
る。システムは、図15に示したように、ビット値を状況
レジスタ328にロードすることによって状態S=0にセット
される。CAM辞書内の全ての状況フィールドはST=FREE
(S)(即ち[0:0])にセットされ、アドレス・ポインタNEXT_
CODEはCAMの利用可能な第1アドレスにセットされる。
図5に示したCAMに関して前述したように、全てのCAMア
ドレスが文字列の記憶に使用可能な場合、データ圧縮の
間に単一入力文字をアルゴリズムに従って符号化するこ
とができる。しかし、単一データ文字がCAMに記憶され
る場合、符号化文字列を書き込むために使用可能な第1
アドレスは通常、最後の単一文字位置の次のアドレス位
置になる。
【0113】必要ならば、第1の入力文字は、第1デー
タ文字を入力データ・ライン344から読み取り、入力文字
/データ項目のマッチングのためのアドレスをライン326
で生成することによって符号化される。次に、符号化済
みの第1文字(OMEGA)がレジスタ342において、入力デー
タ・ライン344からの第2の入力文字(K)と連結され、OME
GA,K文字列が生成される。OMEGA,Kの列にマッチするデ
ータ項目に関して、CAMで探索が実行される。同時に、
状況フィールドが状況パターン・ジェネレータ338によっ
て生成された値にマッチするCD値、又はSD値(例えば、
既にCD項目、又はSD項目として記憶されているOMEGA,K
の列)について探索される。探索タイプ信号(SEARCH_TYP
E)349のビットは全て、マッチを探索する際に値「1」をと
り、それによってCAMマスクのコード・フィールド、及び
文字フィールドが使用可能となる。図17に示したよう
に、マルチプレクサ(MUX M1)、及びマルチプレクサ(MUX
M2)はそれぞれ、状況パターン・ジェネレータ338からの
ポートMASK、及びDATA_INに関する状況フィールドを選
択する。
タ文字を入力データ・ライン344から読み取り、入力文字
/データ項目のマッチングのためのアドレスをライン326
で生成することによって符号化される。次に、符号化済
みの第1文字(OMEGA)がレジスタ342において、入力デー
タ・ライン344からの第2の入力文字(K)と連結され、OME
GA,K文字列が生成される。OMEGA,Kの列にマッチするデ
ータ項目に関して、CAMで探索が実行される。同時に、
状況フィールドが状況パターン・ジェネレータ338によっ
て生成された値にマッチするCD値、又はSD値(例えば、
既にCD項目、又はSD項目として記憶されているOMEGA,K
の列)について探索される。探索タイプ信号(SEARCH_TYP
E)349のビットは全て、マッチを探索する際に値「1」をと
り、それによってCAMマスクのコード・フィールド、及び
文字フィールドが使用可能となる。図17に示したよう
に、マルチプレクサ(MUX M1)、及びマルチプレクサ(MUX
M2)はそれぞれ、状況パターン・ジェネレータ338からの
ポートMASK、及びDATA_INに関する状況フィールドを選
択する。
【0114】これはCAMに供給された最初のOMEGA,Kの列
なので、ライン322上のMATCH_SUCCESS信号はマッチがな
いことを示す。続いて、OMEGAがライン324上で出力さ
れ、文字列CD(S)、OMEGA、Kがそれぞれ、CAM辞書位置NE
XT_CODEにおける状況、コード、及び文字フィールドに
書き込まれる。次に、OMEGA,Kの列の文字Kが符号化さ
れ(コード(K))、OMEGAに関する新しい値として使用され
る。状況フィールドに書き込まれたCD(S)値は、レジス
タ342の状況フィールドに供給されるマルチプレクサ340
の入力を修正することによって、直接レジスタ328から
供給される。
なので、ライン322上のMATCH_SUCCESS信号はマッチがな
いことを示す。続いて、OMEGAがライン324上で出力さ
れ、文字列CD(S)、OMEGA、Kがそれぞれ、CAM辞書位置NE
XT_CODEにおける状況、コード、及び文字フィールドに
書き込まれる。次に、OMEGA,Kの列の文字Kが符号化さ
れ(コード(K))、OMEGAに関する新しい値として使用され
る。状況フィールドに書き込まれたCD(S)値は、レジス
タ342の状況フィールドに供給されるマルチプレクサ340
の入力を修正することによって、直接レジスタ328から
供給される。
【0115】システムは次に、利用可能な次のCAM辞書
項目(例えば、ST=FREE(S))を探索する。従って、探索タ
イプ信号349は値「0」をとり、コード、及び文字フィール
ドをマスク・アウトし、ライン348上のビット値[1:1]を
介して状況フィールドを使用可能にする。同時に、マル
チプレクサ340に接続された制御ライン314は、レジスタ
328からの値FREEを、状況フィールド内で探索された値
として選択する。ライン326からのマッチ・アドレスは、
次の固有なOMEGA,Kの列を記憶するためのNEXT_CODEとし
て使用される。この処理は、ライン344上の入力データ
列から次の文字を抽出し、それをOMEGAと連結して、次
の探索のためにOMEGA,Kの列を生成する。次の探索でマ
ッチが見つかった場合、マッチのアドレス位置が、次の
マッチを行うためにMATCH_ADDRESSライン326を介してポ
ートDATA_INにフィードバックされる。このアドレス
は、以前のOMEGA,Kの列を表す新しいOMEGAの値として使
用される。同時に、レジスタ328からのSD(S)値がマッチ
・アドレスにおける状況フィールドに書き込まれる。
項目(例えば、ST=FREE(S))を探索する。従って、探索タ
イプ信号349は値「0」をとり、コード、及び文字フィール
ドをマスク・アウトし、ライン348上のビット値[1:1]を
介して状況フィールドを使用可能にする。同時に、マル
チプレクサ340に接続された制御ライン314は、レジスタ
328からの値FREEを、状況フィールド内で探索された値
として選択する。ライン326からのマッチ・アドレスは、
次の固有なOMEGA,Kの列を記憶するためのNEXT_CODEとし
て使用される。この処理は、ライン344上の入力データ
列から次の文字を抽出し、それをOMEGAと連結して、次
の探索のためにOMEGA,Kの列を生成する。次の探索でマ
ッチが見つかった場合、マッチのアドレス位置が、次の
マッチを行うためにMATCH_ADDRESSライン326を介してポ
ートDATA_INにフィードバックされる。このアドレス
は、以前のOMEGA,Kの列を表す新しいOMEGAの値として使
用される。同時に、レジスタ328からのSD(S)値がマッチ
・アドレスにおける状況フィールドに書き込まれる。
【0116】上述のように、新しいOMEGA,Kの列がCAM位
置に書き込まれた後、状況フィールド内の次のFREE値を
見つけるための探索が実行される。探索の失敗は、現行
辞書が満杯であることを示し、その場合、システムは状
態をS=1に切り替える。これは、レジスタ328の内容を左
に2ビット位置だけずらすことによって実行される。以
前にSD(S)値を有していた状況フィールド位置は、今度
はCD(S)を構成する。状態S=0の場合に、CAM内の状況フ
ィールドは全てCD(S)、又はSD(S)のどちらかにセットさ
れていた(例えば、状態が変化する直前にはFREE状況フ
ィールド値は存在しない)ので、状態S=1でのフリー・メ
モリ位置は全て、状態S=0における以前のCD(S)項目であ
る。更に、待機辞書は、INV値が状態S=0において書き込
まれることがないため、状態S=1における最初の単一文
字列を除き空になる。圧縮は、システムがS=1の状態で
上述のように継続される。この処理は、入力データの全
てが圧縮されるまで、引き続き圧縮済みデータ文字を生
成し、状態を切り替える。
置に書き込まれた後、状況フィールド内の次のFREE値を
見つけるための探索が実行される。探索の失敗は、現行
辞書が満杯であることを示し、その場合、システムは状
態をS=1に切り替える。これは、レジスタ328の内容を左
に2ビット位置だけずらすことによって実行される。以
前にSD(S)値を有していた状況フィールド位置は、今度
はCD(S)を構成する。状態S=0の場合に、CAM内の状況フ
ィールドは全てCD(S)、又はSD(S)のどちらかにセットさ
れていた(例えば、状態が変化する直前にはFREE状況フ
ィールド値は存在しない)ので、状態S=1でのフリー・メ
モリ位置は全て、状態S=0における以前のCD(S)項目であ
る。更に、待機辞書は、INV値が状態S=0において書き込
まれることがないため、状態S=1における最初の単一文
字列を除き空になる。圧縮は、システムがS=1の状態で
上述のように継続される。この処理は、入力データの全
てが圧縮されるまで、引き続き圧縮済みデータ文字を生
成し、状態を切り替える。
【0117】データ伸長 図16のシステムを使用するデータ伸長は以下のような方
法で実行される。CAMは、レジスタ328内のビットを状態
S=0にリセットすることによって初期設定される。利用
可能な各メモリ辞書位置の状況フィールドにFREEビット
値が書き込まれる。内部アドレス・ポインタ354(NEXT_CO
DE)が、CAM内の利用可能な第1のメモリ位置にセットさ
れ(例えば、NEXT_CODE=2m)、内部アドレス・ポインタ356
(SAVE_CODE)がゼロにセットされる。
法で実行される。CAMは、レジスタ328内のビットを状態
S=0にリセットすることによって初期設定される。利用
可能な各メモリ辞書位置の状況フィールドにFREEビット
値が書き込まれる。内部アドレス・ポインタ354(NEXT_CO
DE)が、CAM内の利用可能な第1のメモリ位置にセットさ
れ(例えば、NEXT_CODE=2m)、内部アドレス・ポインタ356
(SAVE_CODE)がゼロにセットされる。
【0118】伸長は、図5で上述したのと同様の方法で
実行される。例えば、符号化済み文字列の第1の符号化
済み文字(OMEGA)がライン344上で読み取られる。次に、
OMEGAがCAMのポートADDRESS_INに供給されるアドレスと
して使用される。ライン324上で出力されるコード・フィ
ールドの値が「ルート」でない場合、文字フィールドがラ
イン324上で出力され、コード・フィールドが次のアドレ
ス位置としてCAMにフィードバックされる。この処理
は、「ルート」のコード・フィールドがCAMから読み取られ
るまで繰り返される。
実行される。例えば、符号化済み文字列の第1の符号化
済み文字(OMEGA)がライン344上で読み取られる。次に、
OMEGAがCAMのポートADDRESS_INに供給されるアドレスと
して使用される。ライン324上で出力されるコード・フィ
ールドの値が「ルート」でない場合、文字フィールドがラ
イン324上で出力され、コード・フィールドが次のアドレ
ス位置としてCAMにフィードバックされる。この処理
は、「ルート」のコード・フィールドがCAMから読み取られ
るまで繰り返される。
【0119】圧縮済み入力文字(OMEGA)が伸長され、伸
長済み文字列がライン324上で出力された後、アドレス
位置OMEGAにおける状況フィールドがSD(S)にセットされ
る。これは、レジスタ328からのSD(S)値をレジスタ342
の状況フィールドに書き込むことによって実行される。
次に、伸長済みデータ列からアドレス位置SAVE_CODEに
おけるレジスタ342の文字フィールドに第1の文字(K)を
フィードバックすることによって、辞書が作成される。
状況レジスタ328からのCD(S)値、最初にライン344を介
して読み取られたOMEGA値、及び伸長済みOMEGA出力列か
らの第1文字(K)が、アドレス位置NEXT_CODEにおけるCA
M辞書の状況、コード、及び文字フィールドに書き込ま
れる。次に、アドレス・ポインタNEXT_CODEの値がアドレ
ス・ポインタSAVE_CODEに書き込まれる。値「0」がライン3
49上に配置され、ライン348上のビット値[1:1]によって
「状況フィールドのみ」の探索が可能になる。次に、状況
フィールドでFREE値を探索することによって、FREE状況
フィールドを有するCAM内の次の辞書項目が見つけられ
る。FREE状況フィールドのアドレス値が、ライン326を
介してアドレス・ポインタNEXT_CODEに書き込まれる。そ
の後、次の符号化文字OMEGAがライン344から読み取られ
る。
長済み文字列がライン324上で出力された後、アドレス
位置OMEGAにおける状況フィールドがSD(S)にセットされ
る。これは、レジスタ328からのSD(S)値をレジスタ342
の状況フィールドに書き込むことによって実行される。
次に、伸長済みデータ列からアドレス位置SAVE_CODEに
おけるレジスタ342の文字フィールドに第1の文字(K)を
フィードバックすることによって、辞書が作成される。
状況レジスタ328からのCD(S)値、最初にライン344を介
して読み取られたOMEGA値、及び伸長済みOMEGA出力列か
らの第1文字(K)が、アドレス位置NEXT_CODEにおけるCA
M辞書の状況、コード、及び文字フィールドに書き込ま
れる。次に、アドレス・ポインタNEXT_CODEの値がアドレ
ス・ポインタSAVE_CODEに書き込まれる。値「0」がライン3
49上に配置され、ライン348上のビット値[1:1]によって
「状況フィールドのみ」の探索が可能になる。次に、状況
フィールドでFREE値を探索することによって、FREE状況
フィールドを有するCAM内の次の辞書項目が見つけられ
る。FREE状況フィールドのアドレス値が、ライン326を
介してアドレス・ポインタNEXT_CODEに書き込まれる。そ
の後、次の符号化文字OMEGAがライン344から読み取られ
る。
【0120】現行辞書が満杯である(例えば、FREE状況
フィールド値が存在しない)場合、上述のようにレジス
タ328内のビットをシフトすることによってシステムが
状態S=1に切り替えられ、アドレス・ポインタNEXT_CODE
の値がリセットされる。従って、現行辞書は以前の待機
辞書の項目しか含んでいない。システムはその後、次の
符号化済み文字(OMEGA)をライン344から読み取り、その
データを伸長する処理が継続される。
フィールド値が存在しない)場合、上述のようにレジス
タ328内のビットをシフトすることによってシステムが
状態S=1に切り替えられ、アドレス・ポインタNEXT_CODE
の値がリセットされる。従って、現行辞書は以前の待機
辞書の項目しか含んでいない。システムはその後、次の
符号化済み文字(OMEGA)をライン344から読み取り、その
データを伸長する処理が継続される。
【0121】図18は、待機辞書を有するCAMを使用する
データ圧縮の一般的方法を示すデータ・フロー図であ
る。ブロック376は、そのシステムのための状態条件、
及び状況条件をセットする初期設定処理である。具体的
には、システムが状態S=0にセットされ、CAM辞書内の状
況レジスタが全てST=FREE(0)にセットされ、アドレス・
ポインタが、CAM内の利用可能な次のアドレスに関して
セットされる(例えば、2m->NEXT_CODE)。
データ圧縮の一般的方法を示すデータ・フロー図であ
る。ブロック376は、そのシステムのための状態条件、
及び状況条件をセットする初期設定処理である。具体的
には、システムが状態S=0にセットされ、CAM辞書内の状
況レジスタが全てST=FREE(0)にセットされ、アドレス・
ポインタが、CAM内の利用可能な次のアドレスに関して
セットされる(例えば、2m->NEXT_CODE)。
【0122】ブロック378で、入力データ・ストリームの
第1文字(CHAR->K)が読み取られ、値OMEGAを提供する
ように符号化される(例えば、コード(K))。ブロック380
で、入力データ・ストリーム内の次の入力文字(K)が読み
取られる。ブロック382で、OMEGAとKが文字列として組
み合わせられる(例えば、OMEGA,Kとして連結される)。
次に、OMEGA,Kの列にマッチするデータ項目を探すだけ
でなく、2つの状況レジスタ・パターンのどちらか1つ
(ST=CD(S)、又はST=SD(S))とのマッチングも行う探索が
行われる。この探索では、有効な文字列(例えば、OMEG
A,K)を示す、現行辞書の値、又は待機辞書の値のどちら
かの値がCAM内に書き込まれているので、現行辞書の値
と待機辞書の値の両方を探さなければならない。例え
ば、状況レジスタ値ST=CD(S)は、現処理における状態の
間に、関連するコード・フィールド、及び文字フィール
ドに以前、OMEGA,Kの文字列がロードされていたことを
示す。状況レジスタ値ST=SD(S)は、関連するコード・フ
ィールド、及び文字フィールドにOMEGA,Kの文字列がロ
ードされ、前記フィールドが現在のプロセッサ状態にお
いて少なくとも一度、第2のOMEGA,Kの文字列にマッチ
していたことを示す。従って、両方の状況レジスタ値(C
D(S)、及びSD(S))は、上書きすべきでない有効なCAMデ
ータ項目を示す。
第1文字(CHAR->K)が読み取られ、値OMEGAを提供する
ように符号化される(例えば、コード(K))。ブロック380
で、入力データ・ストリーム内の次の入力文字(K)が読み
取られる。ブロック382で、OMEGAとKが文字列として組
み合わせられる(例えば、OMEGA,Kとして連結される)。
次に、OMEGA,Kの列にマッチするデータ項目を探すだけ
でなく、2つの状況レジスタ・パターンのどちらか1つ
(ST=CD(S)、又はST=SD(S))とのマッチングも行う探索が
行われる。この探索では、有効な文字列(例えば、OMEG
A,K)を示す、現行辞書の値、又は待機辞書の値のどちら
かの値がCAM内に書き込まれているので、現行辞書の値
と待機辞書の値の両方を探さなければならない。例え
ば、状況レジスタ値ST=CD(S)は、現処理における状態の
間に、関連するコード・フィールド、及び文字フィール
ドに以前、OMEGA,Kの文字列がロードされていたことを
示す。状況レジスタ値ST=SD(S)は、関連するコード・フ
ィールド、及び文字フィールドにOMEGA,Kの文字列がロ
ードされ、前記フィールドが現在のプロセッサ状態にお
いて少なくとも一度、第2のOMEGA,Kの文字列にマッチ
していたことを示す。従って、両方の状況レジスタ値(C
D(S)、及びSD(S))は、上書きすべきでない有効なCAMデ
ータ項目を示す。
【0123】まだCAM内にデータ列が記憶されていない
場合、決定ブロック384で、マッチがないことが示され
る。ブロック388で、符号化済みの値OMEGAが、符号化済
みデータ列内の第1文字として出力される。利用可能な
第1のCAMアドレス位置(NEXT_CODE)にOMEGA,Kの列が書
き込まれる。アドレス位置NEXT_CODEにおける状況フィ
ールド(ST)に、CAM内の有効なデータ項目を示す値CD(S)
が書き込まれる。次にブロック388で、OMEGAが第2の入
力文字の符号化済みの値と置換される(コード(K)->OMEG
A)。
場合、決定ブロック384で、マッチがないことが示され
る。ブロック388で、符号化済みの値OMEGAが、符号化済
みデータ列内の第1文字として出力される。利用可能な
第1のCAMアドレス位置(NEXT_CODE)にOMEGA,Kの列が書
き込まれる。アドレス位置NEXT_CODEにおける状況フィ
ールド(ST)に、CAM内の有効なデータ項目を示す値CD(S)
が書き込まれる。次にブロック388で、OMEGAが第2の入
力文字の符号化済みの値と置換される(コード(K)->OMEG
A)。
【0124】ブロック390で、ST=FREE(S)を有する利用
可能な次のアドレス位置がCAMで探索される。FREE(S)値
を有する状況レジスタが見つからない場合、CAM内の現
行辞書は満杯である。それによって、決定ブロック392
で、CAMを次の状態S=S+1 mod 4に変更することによっ
て、現行辞書(CD)を待機辞書(SD)と置換する。状態を変
更する間、各状況レジスタの値が、上述のように再び割
り当てられる(図13参照)。状況フィールド値は、FREE->
INV->SD->CD->FREEのように再割り当てされる。この処
理はブロック380に戻り、そこで次の入力文字(K)が読み
取られる。次に、上述のようなマッチング処理が繰り返
される。現行辞書が満杯でない場合、決定ブロック392
はブロック394にジャンプする。ブロック394で、FREE状
況レジスタ値を有するCAM内の次のアドレスが判定さ
れ、そのアドレスをNEXT_CODEに割り当てる(例えば、MA
TCH_ADDRESS->NEXT_CODE)。この処理はブロック380に戻
り、そこで次の入力文字(K)が読み取られる。
可能な次のアドレス位置がCAMで探索される。FREE(S)値
を有する状況レジスタが見つからない場合、CAM内の現
行辞書は満杯である。それによって、決定ブロック392
で、CAMを次の状態S=S+1 mod 4に変更することによっ
て、現行辞書(CD)を待機辞書(SD)と置換する。状態を変
更する間、各状況レジスタの値が、上述のように再び割
り当てられる(図13参照)。状況フィールド値は、FREE->
INV->SD->CD->FREEのように再割り当てされる。この処
理はブロック380に戻り、そこで次の入力文字(K)が読み
取られる。次に、上述のようなマッチング処理が繰り返
される。現行辞書が満杯でない場合、決定ブロック392
はブロック394にジャンプする。ブロック394で、FREE状
況レジスタ値を有するCAM内の次のアドレスが判定さ
れ、そのアドレスをNEXT_CODEに割り当てる(例えば、MA
TCH_ADDRESS->NEXT_CODE)。この処理はブロック380に戻
り、そこで次の入力文字(K)が読み取られる。
【0125】決定ブロック384でマッチが示された場
合、処理はブロック386にジャンプし、そこでOMEGAフィ
ールドが、OMEGA,Kの列にマッチした辞書項目のアドレ
スと置換される。マッチ・アドレスにおける状況フィー
ルド(ST)をSD(S)にセットすることによって、(マッチ・
アドレスにおけるコード・フィールド、及び文字フィー
ルドによって表される)マッチした文字列が、自動的に
待機辞書に割り当てられる。次に、この処理はブロック
380に戻り、データ・ストリームから次の入力文字(K)が
読み取られる。マッチ・アドレス(OMEGA)とKは、連結さ
れて、3つの入力文字を表す新しいOMEGA,Kの列を形成
する。次にブロック382は、現行辞書、及び待機辞書で
文字列のマッチを探索する。
合、処理はブロック386にジャンプし、そこでOMEGAフィ
ールドが、OMEGA,Kの列にマッチした辞書項目のアドレ
スと置換される。マッチ・アドレスにおける状況フィー
ルド(ST)をSD(S)にセットすることによって、(マッチ・
アドレスにおけるコード・フィールド、及び文字フィー
ルドによって表される)マッチした文字列が、自動的に
待機辞書に割り当てられる。次に、この処理はブロック
380に戻り、データ・ストリームから次の入力文字(K)が
読み取られる。マッチ・アドレス(OMEGA)とKは、連結さ
れて、3つの入力文字を表す新しいOMEGA,Kの列を形成
する。次にブロック382は、現行辞書、及び待機辞書で
文字列のマッチを探索する。
【0126】待機辞書の実際の作成は、OMEGA,Kの文字
列のマッチ・アドレスにおける状況フィールドが、SD(S)
にセットされた時にブロック386で行われる。これは、
この位置が既にSD(S)によってマークされている可能性
があるので、「重複作業」であることが多い。しかし、状
況フィールドを検査しないということは、ハードウェア
による実施をより簡単にするのに役立つ。
列のマッチ・アドレスにおける状況フィールドが、SD(S)
にセットされた時にブロック386で行われる。これは、
この位置が既にSD(S)によってマークされている可能性
があるので、「重複作業」であることが多い。しかし、状
況フィールドを検査しないということは、ハードウェア
による実施をより簡単にするのに役立つ。
【0127】図19は、待機辞書を有するCAMを使用する
データ伸長の一般的方法を示すデータ・フロー図であ
る。ブロック398で、システムを状態(S=0)に初期設定
し、全ての利用可能な辞書項目に関する状況フィールド
を値ST=FREE(0)に初期設定する。アドレス・ポインタNEX
T_CODEが第1のフリー・アドレス位置(NEXT_CODE=2m+1)
にセットされ、第2のアドレス・ポインタSAVE_CODEがゼ
ロにセットされる。ブロック400で、圧縮済みデータ列
(OMEGA)からの第1の符号化済み文字が読み取られる。
データ伸長の一般的方法を示すデータ・フロー図であ
る。ブロック398で、システムを状態(S=0)に初期設定
し、全ての利用可能な辞書項目に関する状況フィールド
を値ST=FREE(0)に初期設定する。アドレス・ポインタNEX
T_CODEが第1のフリー・アドレス位置(NEXT_CODE=2m+1)
にセットされ、第2のアドレス・ポインタSAVE_CODEがゼ
ロにセットされる。ブロック400で、圧縮済みデータ列
(OMEGA)からの第1の符号化済み文字が読み取られる。
【0128】ブロック401では、図16で上述したよう
に、OMEGAを伸長済み文字列Wに伸長する。例えば、OME
GAをアドレスとして使用することにより、メモリ位置OM
EGAにおける文字フィールドがCAMによって出力される。
アドレスOMEGAからのコード・フィールドが「ルート」でな
い場合、それはCAMに供給される次のアドレスとして使
用される。その後、次のアドレスに関する文字フィール
ドが、次の伸長済み文字Kとして出力される。アドレス
OMEGAにおけるコード・フィールドが「ルート」である場
合、アドレスOMEGAにおける文字フィールドが出力さ
れ、アドレスOMEGAにおけるコード・フィールド、及び文
字フィールドが、待機辞書に割り当てられる(例えば、S
D(S)->ST)。ブロック402で、文字列Wの第1文字がレジ
スタCに割り当てられる。
に、OMEGAを伸長済み文字列Wに伸長する。例えば、OME
GAをアドレスとして使用することにより、メモリ位置OM
EGAにおける文字フィールドがCAMによって出力される。
アドレスOMEGAからのコード・フィールドが「ルート」でな
い場合、それはCAMに供給される次のアドレスとして使
用される。その後、次のアドレスに関する文字フィール
ドが、次の伸長済み文字Kとして出力される。アドレス
OMEGAにおけるコード・フィールドが「ルート」である場
合、アドレスOMEGAにおける文字フィールドが出力さ
れ、アドレスOMEGAにおけるコード・フィールド、及び文
字フィールドが、待機辞書に割り当てられる(例えば、S
D(S)->ST)。ブロック402で、文字列Wの第1文字がレジ
スタCに割り当てられる。
【0129】アドレス・ポインタSAVE_CODEがゼロでない
場合、決定ブロック403がブロック404にジャンプし、文
字列CD(S)、SAVE_CODE、Cをアドレス位置(NEXT_CODE)
におけるCAM辞書に書き込むことによって辞書が作成さ
れる。SAVE_CODEがゼロに等しい場合、又はブロック404
で文字列が書き込まれた後、ブロック405で、アドレス
位置OMEGAにおける状況フィールドが待機辞書に割り当
てられ(SD(S)->(OMEGA))、現在のSAVE_CODE値がOMEGAの
値と置換される。ブロック406で、値ST=FREE(S)を有す
る次の状況フィールドが探索される。FREEの状況フィー
ルドが見つかった場合、決定ブロック408はブロック410
にジャンプし、そこでマッチ・アドレスがアドレス・ポイ
ンタNEXT_CODEに割り当てられる(例えば、MATCH_ADD->N
EXT_CODE)。次に、この処理はブロック400に戻り、圧縮
済みデータ・ストリームからの次の符号化済み文字(OMEG
A)が読み取られて伸長される。
場合、決定ブロック403がブロック404にジャンプし、文
字列CD(S)、SAVE_CODE、Cをアドレス位置(NEXT_CODE)
におけるCAM辞書に書き込むことによって辞書が作成さ
れる。SAVE_CODEがゼロに等しい場合、又はブロック404
で文字列が書き込まれた後、ブロック405で、アドレス
位置OMEGAにおける状況フィールドが待機辞書に割り当
てられ(SD(S)->(OMEGA))、現在のSAVE_CODE値がOMEGAの
値と置換される。ブロック406で、値ST=FREE(S)を有す
る次の状況フィールドが探索される。FREEの状況フィー
ルドが見つかった場合、決定ブロック408はブロック410
にジャンプし、そこでマッチ・アドレスがアドレス・ポイ
ンタNEXT_CODEに割り当てられる(例えば、MATCH_ADD->N
EXT_CODE)。次に、この処理はブロック400に戻り、圧縮
済みデータ・ストリームからの次の符号化済み文字(OMEG
A)が読み取られて伸長される。
【0130】FREE(S)値を有する状況フィールドがない
場合、決定ブロック408はブロック412にジャンプする。
次に、この処理が次の状態に変更され、それによって現
行辞書が待機辞書に切り替えられる(即ち、S=S+1 mod
4)。又、これによって、以前の状態からの現行辞書項目
がフリー位置になる。ブロック413で、ST=FREE(S)を有
する次のフリー位置が探索され、アドレス・ポインタSAV
E_CODEの値がゼロにリセットされ、ブロック410にジャ
ンプする。ブロック410で、ブロック413で見つけられた
フリー位置のアドレス値がアドレス・ポインタNEXT_CODE
に割り当てられる。次に、ブロック410は、ブロック400
に戻り、そこで圧縮済みデータ・ストリームからのデー
タが全て伸長されるまで処理が継続される。
場合、決定ブロック408はブロック412にジャンプする。
次に、この処理が次の状態に変更され、それによって現
行辞書が待機辞書に切り替えられる(即ち、S=S+1 mod
4)。又、これによって、以前の状態からの現行辞書項目
がフリー位置になる。ブロック413で、ST=FREE(S)を有
する次のフリー位置が探索され、アドレス・ポインタSAV
E_CODEの値がゼロにリセットされ、ブロック410にジャ
ンプする。ブロック410で、ブロック413で見つけられた
フリー位置のアドレス値がアドレス・ポインタNEXT_CODE
に割り当てられる。次に、ブロック410は、ブロック400
に戻り、そこで圧縮済みデータ・ストリームからのデー
タが全て伸長されるまで処理が継続される。
【0131】図20は、図18、及び19の圧縮、及び伸長ア
ルゴリズムを視覚的に表した図である。生データ・スト
リーム414は、図18に示したCAM圧縮処理に入力される圧
縮前文字列から成る。この例では、初期設定の間に、単
一文字R、I、N、及びTがそれぞれ、メモリ416の位
置ADDR0、ADDR1、ADDR2、ADDR3にロードされる。単一文
字入力は、各文字にそのアドレス位置の値を割り当てる
ことによって符号化される。しかし、圧縮速度を高める
ために、後述の処理を開始する前に単一入力文字をアル
ゴリズムに従って符号化しておくことができる。メモリ
416は、初期設定直後の状態S=0の辞書を示し、メモリ41
8は、現行辞書を待機辞書と置換する(例えば、状態S=0
から状態S=1に変更する)直前の状態S=0の辞書を示して
いる。メモリ420は、生データ・ストリーム414を圧縮し
た後の状態S=2の辞書を示している。
ルゴリズムを視覚的に表した図である。生データ・スト
リーム414は、図18に示したCAM圧縮処理に入力される圧
縮前文字列から成る。この例では、初期設定の間に、単
一文字R、I、N、及びTがそれぞれ、メモリ416の位
置ADDR0、ADDR1、ADDR2、ADDR3にロードされる。単一文
字入力は、各文字にそのアドレス位置の値を割り当てる
ことによって符号化される。しかし、圧縮速度を高める
ために、後述の処理を開始する前に単一入力文字をアル
ゴリズムに従って符号化しておくことができる。メモリ
416は、初期設定直後の状態S=0の辞書を示し、メモリ41
8は、現行辞書を待機辞書と置換する(例えば、状態S=0
から状態S=1に変更する)直前の状態S=0の辞書を示して
いる。メモリ420は、生データ・ストリーム414を圧縮し
た後の状態S=2の辞書を示している。
【0132】辞書内の各メモリ位置は、状況フィールド
(ST)、コード・フィールド(CODE)、及び文字フィールド
(CHAR)に分割されている。図示を目的とするため、文字
列を記憶するために使用可能なCAM内の辞書位置は5つ
しかないと仮定する(例えば、ADDR4ないしADDR8)。アド
レス位置ADDR0ないしADDR3は、単一文字のために指定さ
れ、利用可能な辞書位置としては探索されない。各状況
フィールドのビットは値FREE=[0:0]に初期設定され(例
えば、FREE(S)=0)、アドレス・ポインタNEXT_CODEは、利
用可能な第1のCAMメモリ位置に初期設定される(NEXT_C
ODE=ADDR4)。
(ST)、コード・フィールド(CODE)、及び文字フィールド
(CHAR)に分割されている。図示を目的とするため、文字
列を記憶するために使用可能なCAM内の辞書位置は5つ
しかないと仮定する(例えば、ADDR4ないしADDR8)。アド
レス位置ADDR0ないしADDR3は、単一文字のために指定さ
れ、利用可能な辞書位置としては探索されない。各状況
フィールドのビットは値FREE=[0:0]に初期設定され(例
えば、FREE(S)=0)、アドレス・ポインタNEXT_CODEは、利
用可能な第1のCAMメモリ位置に初期設定される(NEXT_C
ODE=ADDR4)。
【0133】生データ・ストリーム414からの第1の入力
文字「R」は、アドレス位置ADDR0におけるデータ項目にマ
ッチし、OMEGAの第1の値として使用される(例えば、OM
EGA=0)。圧縮システムは、OMEGAを次の入力文字「I」と連
結し(OMEGA,K)、メモリ416内のコード・フィールド、及
び文字フィールド内で「0I」のマッチを探索する。同時
に、メモリ416内の対応する状況フィールドで、ビット
組み合わせ「1:0」、又は「1:1」(例えば、状態S=0における
CD(S)、又はSD(S))が探索される。全てのメモリ位置は
フリーであり、以前にメモリに書き込まれていた列「0I」
はなく、従って、マッチは見つからない。従って、OMEG
Aの値(「0」)が圧縮済みストリーム422内の最初の文字と
して出力され、文字列(CD(S),OMEGA,K)が第1のフリー・
メモリ位置(ADDR4)に書き込まれる。次に、文字「I」が符
号化され、OMEGAの次の値(例えば、OMEGA=1)が生成され
る。
文字「R」は、アドレス位置ADDR0におけるデータ項目にマ
ッチし、OMEGAの第1の値として使用される(例えば、OM
EGA=0)。圧縮システムは、OMEGAを次の入力文字「I」と連
結し(OMEGA,K)、メモリ416内のコード・フィールド、及
び文字フィールド内で「0I」のマッチを探索する。同時
に、メモリ416内の対応する状況フィールドで、ビット
組み合わせ「1:0」、又は「1:1」(例えば、状態S=0における
CD(S)、又はSD(S))が探索される。全てのメモリ位置は
フリーであり、以前にメモリに書き込まれていた列「0I」
はなく、従って、マッチは見つからない。従って、OMEG
Aの値(「0」)が圧縮済みストリーム422内の最初の文字と
して出力され、文字列(CD(S),OMEGA,K)が第1のフリー・
メモリ位置(ADDR4)に書き込まれる。次に、文字「I」が符
号化され、OMEGAの次の値(例えば、OMEGA=1)が生成され
る。
【0134】FREE値を有する次の状況フィールドがCAM
辞書で探索され、そのアドレス位置がアドレス・ポイン
タNEXT_CODEに割り当てられる(例えば、NEXT_CODE=5)。
次に、生データ・ストリームの次の文字(K=「N」)がOMEGA
(OMEGA=「1」)と連結され、CAMで文字列「1N」が探索され
る。この場合も、CAMでマッチは発生せず、文字列(CD
(S),1,N)がアドレス位置ADDR5に書き込まれる。この
処理は同様の方法で繰り返され、以前のどの項目にもマ
ッチしない文字列が見つかった後、次の利用可能なアド
レスの状況、コード、及び文字フィールドへの書き込み
が行われる。
辞書で探索され、そのアドレス位置がアドレス・ポイン
タNEXT_CODEに割り当てられる(例えば、NEXT_CODE=5)。
次に、生データ・ストリームの次の文字(K=「N」)がOMEGA
(OMEGA=「1」)と連結され、CAMで文字列「1N」が探索され
る。この場合も、CAMでマッチは発生せず、文字列(CD
(S),1,N)がアドレス位置ADDR5に書き込まれる。この
処理は同様の方法で繰り返され、以前のどの項目にもマ
ッチしない文字列が見つかった後、次の利用可能なアド
レスの状況、コード、及び文字フィールドへの書き込み
が行われる。
【0135】最初の文字列/データ項目のマッチは、生
データ・ストリーム414からの文字424の組み合わせ(「I
N」)から発生する。文字「IN」は、符号化されたOMEGA、K
の文字列(「1N」)を含む。アドレス位置ADDR5のコード・フ
ィールド、及び文字フィールドはそれぞれ「1」、及び「N」
であり、状況フィールドは以前ST=CD(S)にセットされて
いたので、文字列のマッチが発生する。そのマッチ・ア
ドレスは新しいOMEGA値(OMEGA=5)として使用され、ADDR
5におけるデータ項目は待機辞書に割り当てられる(S=0
の場合、ST=SD(S)=[1:1])。生データ・ストリーム414か
ら次の文字「T」が読み取られ、OMEGAと連結される。ここ
で、この場合3つの文字を表す新しいOMEGA,Kの列(「5
T」)が、前述のように探索される。値「5T」を有するOMEG
A,Kの列はCAM内に存在しないので、次の利用可能なアド
レス位置(ADDR8)に書き込まれる。符号化済み文字「5」が
圧縮済み文字ストリーム422に出力され、「T」に関する符
号化済みの値が次のOMEGA値として出力される(OMEGA=
3)。
データ・ストリーム414からの文字424の組み合わせ(「I
N」)から発生する。文字「IN」は、符号化されたOMEGA、K
の文字列(「1N」)を含む。アドレス位置ADDR5のコード・フ
ィールド、及び文字フィールドはそれぞれ「1」、及び「N」
であり、状況フィールドは以前ST=CD(S)にセットされて
いたので、文字列のマッチが発生する。そのマッチ・ア
ドレスは新しいOMEGA値(OMEGA=5)として使用され、ADDR
5におけるデータ項目は待機辞書に割り当てられる(S=0
の場合、ST=SD(S)=[1:1])。生データ・ストリーム414か
ら次の文字「T」が読み取られ、OMEGAと連結される。ここ
で、この場合3つの文字を表す新しいOMEGA,Kの列(「5
T」)が、前述のように探索される。値「5T」を有するOMEG
A,Kの列はCAM内に存在しないので、次の利用可能なアド
レス位置(ADDR8)に書き込まれる。符号化済み文字「5」が
圧縮済み文字ストリーム422に出力され、「T」に関する符
号化済みの値が次のOMEGA値として出力される(OMEGA=
3)。
【0136】メモリ418は、文字列「5T」をアドレス位置A
DDR8に書き込んだ直後のCAMの状況を示している。この
処理は、次のFREE状況フィールドをメモリ418で探索す
る。ADDR8がCAM内の現行辞書における最後の利用可能な
位置であると仮定すると、FREE状況フィールドは見つか
らない。このことは、現行辞書が満杯であり、従ってシ
ステムが状態S=1に変更されたことを示す。状態S=1で
は、状況フィールド・ビット値[1:0]がフリー・メモリ位
置を構成し、ビット値[1:1]が現行辞書項目を構成する
(図13参照)。従って、アドレスADDR5における文字列を
除き、状態S=1での現行辞書内の辞書位置は全て、文字
列を記憶するために使用可能である。状態が変化する
と、アドレス・ポインタNEXT_CODEが第1のフリー・メモ
リ位置にリセットされる(NEXT_CODE=4)。
DDR8に書き込んだ直後のCAMの状況を示している。この
処理は、次のFREE状況フィールドをメモリ418で探索す
る。ADDR8がCAM内の現行辞書における最後の利用可能な
位置であると仮定すると、FREE状況フィールドは見つか
らない。このことは、現行辞書が満杯であり、従ってシ
ステムが状態S=1に変更されたことを示す。状態S=1で
は、状況フィールド・ビット値[1:0]がフリー・メモリ位
置を構成し、ビット値[1:1]が現行辞書項目を構成する
(図13参照)。従って、アドレスADDR5における文字列を
除き、状態S=1での現行辞書内の辞書位置は全て、文字
列を記憶するために使用可能である。状態が変化する
と、アドレス・ポインタNEXT_CODEが第1のフリー・メモ
リ位置にリセットされる(NEXT_CODE=4)。
【0137】状態S=1のメモリ420を参照すると、次の入
力文字426(「I」)が生データの文字ストリーム414から抽
出され、次のOMEGA,Kの探索のためにOMEGAと連結される
(「3I」)。列「3I」はメモリ位置ADDR7に存在するが、その
位置における状況フィールドは現在FREEである。従っ
て、マッチは見つからず、圧縮済み文字ストリーム422
内の文字438としてその符号化済みの値「3」が出力され
る。文字列(CD(S),3,I)がメモリ位置ADDR4に書き込ま
れ、文字「I」が次のOMEGA値として符号化される(OMEGA=
1)。次のFREE状況フィールドのアドレス位置がアドレス
・ポインタに割り当てられる(NEXT_CODE=6)。アドレス位
置ADDR5は、その状況フィールドが状態S=0から状態S=1
に切り替わった後の現行辞書項目を示しているので、ス
キップされることに留意されたい。
力文字426(「I」)が生データの文字ストリーム414から抽
出され、次のOMEGA,Kの探索のためにOMEGAと連結される
(「3I」)。列「3I」はメモリ位置ADDR7に存在するが、その
位置における状況フィールドは現在FREEである。従っ
て、マッチは見つからず、圧縮済み文字ストリーム422
内の文字438としてその符号化済みの値「3」が出力され
る。文字列(CD(S),3,I)がメモリ位置ADDR4に書き込ま
れ、文字「I」が次のOMEGA値として符号化される(OMEGA=
1)。次のFREE状況フィールドのアドレス位置がアドレス
・ポインタに割り当てられる(NEXT_CODE=6)。アドレス位
置ADDR5は、その状況フィールドが状態S=0から状態S=1
に切り替わった後の現行辞書項目を示しているので、ス
キップされることに留意されたい。
【0138】生データ・ストリーム414からの次の入力文
字428がOMEGAに連結され、新しい文字列が構成される
(「1N」)。アドレス位置ADDR5でマッチが発生し、従ってO
MEGAにマッチ・アドレスの値が割り当てられ、アドレス
位置ADDR5における状況フィールドが待機辞書に割り当
てられる。状態S=1の待機辞書に対するビット割り当て
は[0:1]である(図13参照)。生データ・ストリーム414か
らの次の入力文字がOMEGAに連結され、探索処理が繰り
返される。この処理は、生データ・ストリーム414からの
文字が全て圧縮されるまで、現行辞書が「満杯になる」た
び毎にシステムの状態を変更し続ける。
字428がOMEGAに連結され、新しい文字列が構成される
(「1N」)。アドレス位置ADDR5でマッチが発生し、従ってO
MEGAにマッチ・アドレスの値が割り当てられ、アドレス
位置ADDR5における状況フィールドが待機辞書に割り当
てられる。状態S=1の待機辞書に対するビット割り当て
は[0:1]である(図13参照)。生データ・ストリーム414か
らの次の入力文字がOMEGAに連結され、探索処理が繰り
返される。この処理は、生データ・ストリーム414からの
文字が全て圧縮されるまで、現行辞書が「満杯になる」た
び毎にシステムの状態を変更し続ける。
【0139】メモリ432は、伸長用の初期設定の直後に
伸長の準備ができたメモリを示している。メモリ434
は、状態S=0から状態S=1に変化する直前の状態S=0のシ
ステムを示している。メモリ436は、圧縮済み文字スト
リーム422を伸長した後の状態S=1のデータ項目を示して
いる。メモリ432内の辞書は、最初の4つのアドレス位
置がそれぞれ、単一入力文字R、I、N、及びTの復号
化済みの値を含むように初期設定される。この場合も、
単一文字の復号化はアルゴリズムに従って実行すること
ができる。システムが状態S=0にセットされ、全ての辞
書の状況レジスタがFREE(S)にセットされる。アドレス・
ポインタNEXT_CODEが、最初に使用可能な辞書位置(ADDR
4)にセットされ、アドレス・ポインタSAVE_CODEがゼロに
セットされる。
伸長の準備ができたメモリを示している。メモリ434
は、状態S=0から状態S=1に変化する直前の状態S=0のシ
ステムを示している。メモリ436は、圧縮済み文字スト
リーム422を伸長した後の状態S=1のデータ項目を示して
いる。メモリ432内の辞書は、最初の4つのアドレス位
置がそれぞれ、単一入力文字R、I、N、及びTの復号
化済みの値を含むように初期設定される。この場合も、
単一文字の復号化はアルゴリズムに従って実行すること
ができる。システムが状態S=0にセットされ、全ての辞
書の状況レジスタがFREE(S)にセットされる。アドレス・
ポインタNEXT_CODEが、最初に使用可能な辞書位置(ADDR
4)にセットされ、アドレス・ポインタSAVE_CODEがゼロに
セットされる。
【0140】伸長は、前述のように行われ、OMEGAがメ
モリ432へのアドレス・ポインタとして使用される。圧縮
済み文字ストリーム422からの第1の入力コードはOMEGA
値を構成する(OMEGA=0)。この伸長システムは、例え
ば、その値が4より小さいことを検査することによっ
て、値「0」がルート・コードワードであると判定する。そ
れによって、ADDR0におけるデータ項目(例えば、「R」)が
伸長済み文字ストリーム430内の第1文字として出力さ
れる。次に、アドレス位置OMEGAにおける状況フィール
ドがSD(S)にセットされる。
モリ432へのアドレス・ポインタとして使用される。圧縮
済み文字ストリーム422からの第1の入力コードはOMEGA
値を構成する(OMEGA=0)。この伸長システムは、例え
ば、その値が4より小さいことを検査することによっ
て、値「0」がルート・コードワードであると判定する。そ
れによって、ADDR0におけるデータ項目(例えば、「R」)が
伸長済み文字ストリーム430内の第1文字として出力さ
れる。次に、アドレス位置OMEGAにおける状況フィール
ドがSD(S)にセットされる。
【0141】伸長済みコードワードからの第1文字K
(例えば、「R」)をアドレス位置SAVE_CODEの文字フィール
ドに書き戻すことによって、辞書が再作成される。この
場合、「R」はADDR0の文字フィールドに再度書き込まれ
る。次に、文字列(CD(S),0,R)がアドレス位置NEXT_CO
DE(例えば、ADDR4)に書き込まれ、SAVE_CODEがNEXT_COD
Eの値にセットされる(例えば、SAVE_CODE=4)。次に、ア
ドレス・ポインタNEXT_CODEにメモリ434内の次のフリー・
アドレスの値が割り当てられる(例えば、NEXT_CODE=
5)。
(例えば、「R」)をアドレス位置SAVE_CODEの文字フィール
ドに書き戻すことによって、辞書が再作成される。この
場合、「R」はADDR0の文字フィールドに再度書き込まれ
る。次に、文字列(CD(S),0,R)がアドレス位置NEXT_CO
DE(例えば、ADDR4)に書き込まれ、SAVE_CODEがNEXT_COD
Eの値にセットされる(例えば、SAVE_CODE=4)。次に、ア
ドレス・ポインタNEXT_CODEにメモリ434内の次のフリー・
アドレスの値が割り当てられる(例えば、NEXT_CODE=
5)。
【0142】文字「1」が、圧縮済み文字ストリーム422か
ら読み取られ、OMEGAの次の値となる。OMEGAが伸長さ
れ、伸長済み文字ストリーム430内の次の文字として復
号化済み文字「I」が出力される。アドレスADDR1の状況フ
ィールドがSD(S)にセットされ(例えば、[1:1])、伸長済
みOMEGA値からの第1文字(「I」)がアドレス位置SAVE_COD
E(ADDR4)における文字フィールドに書き込まれる。次
に、文字列(CD(S),1,I)が、アドレスNEXT_CODE(例え
ば、ADDR5)におけるメモリ434の状況、コード、及び文
字フィールドのそれぞれに書き込まれる。NEXT_CODEの
値は,SAVE_CODEの新しい値として使用される。次のFREE
状況レジスタが見つけられ、NEXT_CODEがそのアドレス
にセットされる(NEXT_CODE=6)。
ら読み取られ、OMEGAの次の値となる。OMEGAが伸長さ
れ、伸長済み文字ストリーム430内の次の文字として復
号化済み文字「I」が出力される。アドレスADDR1の状況フ
ィールドがSD(S)にセットされ(例えば、[1:1])、伸長済
みOMEGA値からの第1文字(「I」)がアドレス位置SAVE_COD
E(ADDR4)における文字フィールドに書き込まれる。次
に、文字列(CD(S),1,I)が、アドレスNEXT_CODE(例え
ば、ADDR5)におけるメモリ434の状況、コード、及び文
字フィールドのそれぞれに書き込まれる。NEXT_CODEの
値は,SAVE_CODEの新しい値として使用される。次のFREE
状況レジスタが見つけられ、NEXT_CODEがそのアドレス
にセットされる(NEXT_CODE=6)。
【0143】この処理は、圧縮済み文字ストリーム422
からの符号化済み文字「2」、及び「3」に関しても同様の方
法で継続される。圧縮済み文字ストリーム422の最初の
「5」は第1の非ルート・コードワードであり、アドレスAD
DR5におけるデータ項目は文字列「1N」である。従って、A
DDR5におけるコード・フィールド(「1」)は、CAMによって
読み取られる次のメモリ位置としてフィードバックされ
る。次に、ADDR1における出力(「I」)が、以前の文字フィ
ールド「N」と共に、CAMによって出力され、ADDR5におけ
る状況フィールドがSD(0)にセットされる。伸長済みコ
ードワードの第1文字(「I」)がメモリ位置ADDR7の文字フ
ィールドに書き込まれ(例えば、SAVE_CODE=7)、文字列
(CD(S),5,I)がCAM位置のNEXT_CODE(例えば、ADDR8)に
書き込まれ、SAVE_CODEにNEXT_CODEの値がセットされる
(例えば、SAVE_CODE=8)。メモリ434は、この文字列をメ
モリに書き込んだ直後の現行辞書の状況を示している。
からの符号化済み文字「2」、及び「3」に関しても同様の方
法で継続される。圧縮済み文字ストリーム422の最初の
「5」は第1の非ルート・コードワードであり、アドレスAD
DR5におけるデータ項目は文字列「1N」である。従って、A
DDR5におけるコード・フィールド(「1」)は、CAMによって
読み取られる次のメモリ位置としてフィードバックされ
る。次に、ADDR1における出力(「I」)が、以前の文字フィ
ールド「N」と共に、CAMによって出力され、ADDR5におけ
る状況フィールドがSD(0)にセットされる。伸長済みコ
ードワードの第1文字(「I」)がメモリ位置ADDR7の文字フ
ィールドに書き込まれ(例えば、SAVE_CODE=7)、文字列
(CD(S),5,I)がCAM位置のNEXT_CODE(例えば、ADDR8)に
書き込まれ、SAVE_CODEにNEXT_CODEの値がセットされる
(例えば、SAVE_CODE=8)。メモリ434は、この文字列をメ
モリに書き込んだ直後の現行辞書の状況を示している。
【0144】次の探索は、FREE値を含む状況フィールド
がないことを示す。従って、システムは状態S=1に切り
替えられ、状況レジスタの値が、図13に示したように再
割り当てされる。メモリ436を参照すると、アドレス・ポ
インタNEXT_CODEに第1のフリー・メモリ位置(ADDR4)が
割り当てられている。アドレス位置ADDR0ないしADDR3
と、ADDR5はこの場合、現行辞書内の項目であり、一方
アドレス位置ADDR4と、ADDR6ないしADDR8は、状態S=1の
フリー位置を構成する。圧縮済み文字ストリーム422か
らの文字438がOMEGAにセットされ(OMEGA=3)、新しい伸
長状態S=1で伸長される。この復号化済み文字「T」が伸長
済み文字ストリーム430に出力され、ADDR3における状況
フィールドに、状態S=1に関する値SD(S)(例えば、[1:
0])が割り当てられる。SAVE_CODEがADDR8を指し、従っ
てその文字「T」がメモリ436内のADDR8における文字フィ
ールドに書き込まれる。文字列(CD(S),3,T)がアドレ
ス位置ADDR4に書き込まれ、SAVE_CODEに値NEXT_CODEが
割り当てられる。次のフリー辞書位置はADDR6であり、
従ってアドレス・ポインタNEXT_CODEに割り当てられる。
この処理は、圧縮済み文字ストリーム422内の文字が全
て伸長されるまで同様の方法で継続される。
がないことを示す。従って、システムは状態S=1に切り
替えられ、状況レジスタの値が、図13に示したように再
割り当てされる。メモリ436を参照すると、アドレス・ポ
インタNEXT_CODEに第1のフリー・メモリ位置(ADDR4)が
割り当てられている。アドレス位置ADDR0ないしADDR3
と、ADDR5はこの場合、現行辞書内の項目であり、一方
アドレス位置ADDR4と、ADDR6ないしADDR8は、状態S=1の
フリー位置を構成する。圧縮済み文字ストリーム422か
らの文字438がOMEGAにセットされ(OMEGA=3)、新しい伸
長状態S=1で伸長される。この復号化済み文字「T」が伸長
済み文字ストリーム430に出力され、ADDR3における状況
フィールドに、状態S=1に関する値SD(S)(例えば、[1:
0])が割り当てられる。SAVE_CODEがADDR8を指し、従っ
てその文字「T」がメモリ436内のADDR8における文字フィ
ールドに書き込まれる。文字列(CD(S),3,T)がアドレ
ス位置ADDR4に書き込まれ、SAVE_CODEに値NEXT_CODEが
割り当てられる。次のフリー辞書位置はADDR6であり、
従ってアドレス・ポインタNEXT_CODEに割り当てられる。
この処理は、圧縮済み文字ストリーム422内の文字が全
て伸長されるまで同様の方法で継続される。
【0145】従来のLZ2実施態様では、単一文字ストリ
ームにC0,C0+1,C0+2,...,C0+(2m-1)の順序で順次コード
が割り当てられる。ここで、C0はある小さな定数である
(例えば、C0=0)。新しい複数文字列は、C0+2m,C0+(2m+
1),...,2b-2,2b-1の順序でコードが割り当てられ、以後
の各文字列はCAM内の順次アドレス値を有する。従っ
て、列へのコードの割り当ては、単にC0+2mに初期設定
されたカウンタを保持し、新しい辞書列が作成されるた
びにインクリメントさせることによって行われる。これ
によって、コンプレッサは、辞書のリセット後に長さm+
1のコードを使用し、続いて辞書内の項目数が次の、2
のべき乗の値に達するたびに出力コードの長さを1ビッ
トだけインクリメントして、可変長出力コードを使用す
ることができる。従って、出力コードの長さは、(m+1)
とbの間で変化する。ここで、2bが辞書の最大サイズで
ある。これは、コンプレッサが辞書アドレス・コードの
より短い時に、より短い出力コードを使用するので、圧
縮率にある程度の向上をもたらす。このデコンプレッサ
は、コンプレッサとロック-ステップで辞書を作成し、
圧縮コードの予想される長さの記録を保持することがで
きる。
ームにC0,C0+1,C0+2,...,C0+(2m-1)の順序で順次コード
が割り当てられる。ここで、C0はある小さな定数である
(例えば、C0=0)。新しい複数文字列は、C0+2m,C0+(2m+
1),...,2b-2,2b-1の順序でコードが割り当てられ、以後
の各文字列はCAM内の順次アドレス値を有する。従っ
て、列へのコードの割り当ては、単にC0+2mに初期設定
されたカウンタを保持し、新しい辞書列が作成されるた
びにインクリメントさせることによって行われる。これ
によって、コンプレッサは、辞書のリセット後に長さm+
1のコードを使用し、続いて辞書内の項目数が次の、2
のべき乗の値に達するたびに出力コードの長さを1ビッ
トだけインクリメントして、可変長出力コードを使用す
ることができる。従って、出力コードの長さは、(m+1)
とbの間で変化する。ここで、2bが辞書の最大サイズで
ある。これは、コンプレッサが辞書アドレス・コードの
より短い時に、より短い出力コードを使用するので、圧
縮率にある程度の向上をもたらす。このデコンプレッサ
は、コンプレッサとロック-ステップで辞書を作成し、
圧縮コードの予想される長さの記録を保持することがで
きる。
【0146】図16に示した処理では、新しい文字列に関
する符号化済みの値は第1のフリー辞書位置のアドレス
である。辞書切り替えの直後において、CDは、必ずしも
連続していないCAM内の位置を有する、以前の待機辞書
からの文字列から成っている。これらの列は、切り替え
の後で、それらの古いアドレスを保持し、それによって
それらのコードを保持する。従って、FREEの探索によっ
て返されるアドレス(コード)は連続シーケンスを形成し
ない。又、辞書のリセットの直後に、範囲0<C<2b-1の範
囲にあるあらゆる符号化済み文字列Cは潜在的に使用可
能である。
する符号化済みの値は第1のフリー辞書位置のアドレス
である。辞書切り替えの直後において、CDは、必ずしも
連続していないCAM内の位置を有する、以前の待機辞書
からの文字列から成っている。これらの列は、切り替え
の後で、それらの古いアドレスを保持し、それによって
それらのコードを保持する。従って、FREEの探索によっ
て返されるアドレス(コード)は連続シーケンスを形成し
ない。又、辞書のリセットの直後に、範囲0<C<2b-1の範
囲にあるあらゆる符号化済み文字列Cは潜在的に使用可
能である。
【0147】その結果、出力ストリームは固定長コード
を使用しなければならない。しかし、このことが圧縮率
に及ぼす悪影響は重大なものではない。CDが辞書のリセ
ット後に、一部だけ満杯となった状態で開始されるの
で、たとえCD内のコードが再配列された場合でも、コー
ドを表すのに必要なビット数は最大ビット長(b)とかけ
離れたものにはならない。例えば、実験では、現行辞書
は通常、1/4ないし1/2程満杯となった状態で開始される
ことが分かっている。これは、コードが連続的な順序で
整列された場合でも、切り替え後にb-1ビットが必要と
なることを意味する。しかし、第1の現行/待機辞書(C
D、SD)を作成している間に可変長コードを使用できる
か、又は、各リセットの後で現行辞書を再配列すること
ができる。
を使用しなければならない。しかし、このことが圧縮率
に及ぼす悪影響は重大なものではない。CDが辞書のリセ
ット後に、一部だけ満杯となった状態で開始されるの
で、たとえCD内のコードが再配列された場合でも、コー
ドを表すのに必要なビット数は最大ビット長(b)とかけ
離れたものにはならない。例えば、実験では、現行辞書
は通常、1/4ないし1/2程満杯となった状態で開始される
ことが分かっている。これは、コードが連続的な順序で
整列された場合でも、切り替え後にb-1ビットが必要と
なることを意味する。しかし、第1の現行/待機辞書(C
D、SD)を作成している間に可変長コードを使用できる
か、又は、各リセットの後で現行辞書を再配列すること
ができる。
【0148】圧縮結果 ソース・コード、実行可能なオブジェクト・コード、ASCI
Iデータ・ファイル、テスト・ファイル、ビットマップ・イ
メージ・ファイルを含む様々なタイプのデータにCAM複数
辞書システムの圧縮処理、及び伸長処理が適用された。
可変長出力コードを使用して、従来のLZW技法で上記フ
ァイルを圧縮した。圧縮の全体結果を図21に示す。ライ
ン440は、CAM複数辞書システムの圧縮率を示したグラフ
であり、ライン442は、標準LZWアルゴリズムでの圧縮率
を示す。ライン440、及び442は、bの関数、即ち出力コ
ード内の最大ビットの関数(即ち、辞書サイズのlog2)と
して圧縮率(最初のファイル・サイズ/圧縮済みファイル・
サイズ)をプロットしている。
Iデータ・ファイル、テスト・ファイル、ビットマップ・イ
メージ・ファイルを含む様々なタイプのデータにCAM複数
辞書システムの圧縮処理、及び伸長処理が適用された。
可変長出力コードを使用して、従来のLZW技法で上記フ
ァイルを圧縮した。圧縮の全体結果を図21に示す。ライ
ン440は、CAM複数辞書システムの圧縮率を示したグラフ
であり、ライン442は、標準LZWアルゴリズムでの圧縮率
を示す。ライン440、及び442は、bの関数、即ち出力コ
ード内の最大ビットの関数(即ち、辞書サイズのlog2)と
して圧縮率(最初のファイル・サイズ/圧縮済みファイル・
サイズ)をプロットしている。
【0149】CAM/待機辞書の利点を強調するために、そ
のプロットにおいて、12ビットLZWコンプレッサによっ
て達成された圧縮率を点線444で描いてある。そうする
と、同じ圧縮率を達成するCAM複数辞書の処理に関する
値bが見つけられる。図21に示したように、CAM複数辞
書システムは、1/2ないし1/4の辞書項目数を用いて、標
準LZWコンプレッサと同じ圧縮率を提供する(例えば、1
ビット少ない=必要なメモリ空間が1/2)。この圧縮率
は、従来のLZWコンプレッサのデータ項目より1、又は
2ビットだけ長いCAM辞書項目で達成される。
のプロットにおいて、12ビットLZWコンプレッサによっ
て達成された圧縮率を点線444で描いてある。そうする
と、同じ圧縮率を達成するCAM複数辞書の処理に関する
値bが見つけられる。図21に示したように、CAM複数辞
書システムは、1/2ないし1/4の辞書項目数を用いて、標
準LZWコンプレッサと同じ圧縮率を提供する(例えば、1
ビット少ない=必要なメモリ空間が1/2)。この圧縮率
は、従来のLZWコンプレッサのデータ項目より1、又は
2ビットだけ長いCAM辞書項目で達成される。
【0150】明確化のために、待機辞書技法の簡単な実
施態様を示した。圧縮率を更に向上させるために多数の
修正を実施することができる。例えば、図18、及び19に
示した圧縮/伸長処理は、入力アルファベットの全ての
単一文字列の集合で辞書が初期設定されると仮定してい
る。又、前述のように空の初期設定、又は中間の初期設
定を使用することもできる。中間の初期設定と待機辞書
の組み合わせに基づく処理も、非常に小規模の辞書を使
用して高い圧縮率をもたらすことができる。
施態様を示した。圧縮率を更に向上させるために多数の
修正を実施することができる。例えば、図18、及び19に
示した圧縮/伸長処理は、入力アルファベットの全ての
単一文字列の集合で辞書が初期設定されると仮定してい
る。又、前述のように空の初期設定、又は中間の初期設
定を使用することもできる。中間の初期設定と待機辞書
の組み合わせに基づく処理も、非常に小規模の辞書を使
用して高い圧縮率をもたらすことができる。
【0151】このシステムを実施するための更なる方法
は、現行辞書が満杯になった直後には辞書を切り替えな
い方法である。その代わり、現行辞書は凍結され、圧縮
率に基づいて辞書の切り替えが行われる(即ち、圧縮率
があるレベルを下回った場合)。現行辞書を凍結してい
る間、待機辞書を凍結させることもでき、又は次の辞書
の切り替えまでそれを作成し続けることもできる。
は、現行辞書が満杯になった直後には辞書を切り替えな
い方法である。その代わり、現行辞書は凍結され、圧縮
率に基づいて辞書の切り替えが行われる(即ち、圧縮率
があるレベルを下回った場合)。現行辞書を凍結してい
る間、待機辞書を凍結させることもでき、又は次の辞書
の切り替えまでそれを作成し続けることもできる。
【0152】待機辞書方法に固有の別の修正は、図13に
示した状況フィールド値INVを使用することである。現
在、INVは辞書項目に関して使用されていない。INVを使
用して、SD2と示されている第2レベルの待機辞書を定
義することができる。既にSDのラベルが付いている項目
は、2回以上参照されると、SD2に変更される(現在のIN
V値に対する新しい名前)。辞書の切り替え時には、CD項
目がFREEに、SD項目がCD項目に、SD2項目がSD項目にな
る。第1の待機辞書(SD)はSD2内の文字列の集合から開
始され、新しいSD2は最初から開始される。この修正
は、当業者によって、図16に示したシステムで容易に実
施される。
示した状況フィールド値INVを使用することである。現
在、INVは辞書項目に関して使用されていない。INVを使
用して、SD2と示されている第2レベルの待機辞書を定
義することができる。既にSDのラベルが付いている項目
は、2回以上参照されると、SD2に変更される(現在のIN
V値に対する新しい名前)。辞書の切り替え時には、CD項
目がFREEに、SD項目がCD項目に、SD2項目がSD項目にな
る。第1の待機辞書(SD)はSD2内の文字列の集合から開
始され、新しいSD2は最初から開始される。この修正
は、当業者によって、図16に示したシステムで容易に実
施される。
【0153】こうして、待機辞書を現行圧縮辞書と並行
的に作成するLempel-Zivデータ圧縮アルゴリズムの変形
例を示してきた。現行辞書が満杯になると、待機辞書が
それと置き換えられ、新しい待機辞書が開始される。こ
の待機辞書は、メイン辞書の文字列の選択された部分集
合を含み、それによって同じメモリ・バッファ上で両方
の辞書を実施することができる。好適なシステム実施態
様は、連想記憶メモリ・モジュールを使用する。処理時
間、及び回路の複雑さを低減させるために、パワー・ア
ップ後に辞書の初期設定を不要にする簡単な状態遷移技
法に基づいて、辞書の切り替えを行う。従って、CAM複
数辞書コンプレッサ/デコンプレッサ・システムは、メモ
リの一部しか使用せずに、従来のデータ圧縮実施態様に
匹敵する圧縮率を達成し、制御回路の複雑さはほんのわ
ずかに増加するだけである。
的に作成するLempel-Zivデータ圧縮アルゴリズムの変形
例を示してきた。現行辞書が満杯になると、待機辞書が
それと置き換えられ、新しい待機辞書が開始される。こ
の待機辞書は、メイン辞書の文字列の選択された部分集
合を含み、それによって同じメモリ・バッファ上で両方
の辞書を実施することができる。好適なシステム実施態
様は、連想記憶メモリ・モジュールを使用する。処理時
間、及び回路の複雑さを低減させるために、パワー・ア
ップ後に辞書の初期設定を不要にする簡単な状態遷移技
法に基づいて、辞書の切り替えを行う。従って、CAM複
数辞書コンプレッサ/デコンプレッサ・システムは、メモ
リの一部しか使用せずに、従来のデータ圧縮実施態様に
匹敵する圧縮率を達成し、制御回路の複雑さはほんのわ
ずかに増加するだけである。
【0154】IV.CAMベースの複数辞書システムにおけ
るデータ圧縮/伸長の選択的上書き方法 ここでは、図14で示した圧縮/伸長システムを使用する
第2のLempel-Ziv待機辞書(LZSD2)データ圧縮、及び伸
長方法を説明する。LZSD2では、全ての辞書項目を常
に、文字列のマッチングに使用することができる。利用
可能なCAM記憶位置を符号化済みデータ項目で満杯に
し、利用可能な各記憶位置を常に辞書に割り当てること
によって、通常辞書の切り替え後に発生する圧縮性能の
低下を排除する。従って、各辞書の切り替え後に、以前
に記憶された多数のデータ項目の使用を不可にする複数
辞書切り替え技法と比べて、全体的なシステム圧縮性能
は向上する。
るデータ圧縮/伸長の選択的上書き方法 ここでは、図14で示した圧縮/伸長システムを使用する
第2のLempel-Ziv待機辞書(LZSD2)データ圧縮、及び伸
長方法を説明する。LZSD2では、全ての辞書項目を常
に、文字列のマッチングに使用することができる。利用
可能なCAM記憶位置を符号化済みデータ項目で満杯に
し、利用可能な各記憶位置を常に辞書に割り当てること
によって、通常辞書の切り替え後に発生する圧縮性能の
低下を排除する。従って、各辞書の切り替え後に、以前
に記憶された多数のデータ項目の使用を不可にする複数
辞書切り替え技法と比べて、全体的なシステム圧縮性能
は向上する。
【0155】LZSD2圧縮 LZSD2圧縮には3つの辞書が使用される。現行辞書(CD)
は、新しい列、及び待機辞書から移された列を保持す
る。待機辞書(SD)は、辞書探索によってマッチし、従っ
て「良好な」列である列を保持する。データ項目を待機辞
書に割り当てるための代替基準もある。FREE事前辞書(F
REE/PD)は、現在データ項目を割り当てられていない記
憶位置、及び現行辞書から移されたデータ項目を含む。
又、(FREE/PD)辞書内のデータ項目は、新しい文字列で
選択的に上書きされる。FREE/PD位置が満杯になると、C
AMが状態を変更し、続いて実際に辞書の切り替えを行
う。
は、新しい列、及び待機辞書から移された列を保持す
る。待機辞書(SD)は、辞書探索によってマッチし、従っ
て「良好な」列である列を保持する。データ項目を待機辞
書に割り当てるための代替基準もある。FREE事前辞書(F
REE/PD)は、現在データ項目を割り当てられていない記
憶位置、及び現行辞書から移されたデータ項目を含む。
又、(FREE/PD)辞書内のデータ項目は、新しい文字列で
選択的に上書きされる。FREE/PD位置が満杯になると、C
AMが状態を変更し、続いて実際に辞書の切り替えを行
う。
【0156】辞書の切り替えによって、データ項目が新
しい入力文字列で上書きされる優先順位が変化する。例
えば、CD内のデータ項目がFREE/PDに移され、SD内のデ
ータ項目はCDに移される。従って、辞書の切り替えの
後、以前CDに割り当てられており、新しい文字列で上書
きされていないデータ項目が、今回FREE/PDに移され、
符号化済み文字列で上書きされる。
しい入力文字列で上書きされる優先順位が変化する。例
えば、CD内のデータ項目がFREE/PDに移され、SD内のデ
ータ項目はCDに移される。従って、辞書の切り替えの
後、以前CDに割り当てられており、新しい文字列で上書
きされていないデータ項目が、今回FREE/PDに移され、
符号化済み文字列で上書きされる。
【0157】図22ないし26を参照すると、全ての辞書空
間の完全で連続した使用は一般に、3つの辞書SD、CD、
及びFREE/PDを同時に探索することによって行われる。
図22に示したように、最初、CAM内の利用可能な各記憶
位置におけるコード・フィールド、及び文字フィールド
は全て、既知の値、通常空文字(null)にリセットされ、
FREE/事前辞書(FREE/PD)に割り当てられる。利用可能な
記憶位置とは、データ項目を記憶するために使用できる
CAM内のアドレス位置を指す。辞書データ項目は、それ
までに見つかったうちで最良の辞書マッチのアドレスで
あるPREVCODE Nと、入力データ・ストリームからの最新
の文字であるCH Nを含む列から成る。
間の完全で連続した使用は一般に、3つの辞書SD、CD、
及びFREE/PDを同時に探索することによって行われる。
図22に示したように、最初、CAM内の利用可能な各記憶
位置におけるコード・フィールド、及び文字フィールド
は全て、既知の値、通常空文字(null)にリセットされ、
FREE/事前辞書(FREE/PD)に割り当てられる。利用可能な
記憶位置とは、データ項目を記憶するために使用できる
CAM内のアドレス位置を指す。辞書データ項目は、それ
までに見つかったうちで最良の辞書マッチのアドレスで
あるPREVCODE Nと、入力データ・ストリームからの最新
の文字であるCH Nを含む列から成る。
【0158】第1の文字列(PREVCODE1,CH1)は、FREE/PD
辞書内の利用可能な第1のアドレス位置(ADDR0)に記憶
され、現行辞書(CD)に割り当てられる。次の固有文字列
(PREVCODE2,CH2)は、利用可能な次のFREE/PD記憶位置(A
DDR1)に記憶され、やはりCDに割り当てられる。文字列
(PREVCODE3,CH3)、及び(PREVCODE4,CH4)は、それぞれCA
Mにおける利用可能な次のアドレスADDR2、及びADDR3に
記憶され、共にCDに割り当てられる。
辞書内の利用可能な第1のアドレス位置(ADDR0)に記憶
され、現行辞書(CD)に割り当てられる。次の固有文字列
(PREVCODE2,CH2)は、利用可能な次のFREE/PD記憶位置(A
DDR1)に記憶され、やはりCDに割り当てられる。文字列
(PREVCODE3,CH3)、及び(PREVCODE4,CH4)は、それぞれCA
Mにおける利用可能な次のアドレスADDR2、及びADDR3に
記憶され、共にCDに割り当てられる。
【0159】図23を参照すると、新しい固有文字列が、
利用可能なFREE/PD記憶位置に継続されて記憶され、CD
に割り当てられている。この圧縮処理が、既にデータ項
目としてCAMに記憶されており、かつ上書きされていな
い新しい文字列を受け取った場合、そのデータ項目は、
再割り当てされるか、又は待機辞書(SD)に移される。例
えば、データ項目(PREVCODE1,CH1)は以前に、アドレス
位置ADDR0に記憶されていた。従って、新しい文字列が
(CODE,CH)の値(PREVCODE1,CH1)を含む場合、ADDR0にお
けるデータ項目はSDに再割り当てされる。
利用可能なFREE/PD記憶位置に継続されて記憶され、CD
に割り当てられている。この圧縮処理が、既にデータ項
目としてCAMに記憶されており、かつ上書きされていな
い新しい文字列を受け取った場合、そのデータ項目は、
再割り当てされるか、又は待機辞書(SD)に移される。例
えば、データ項目(PREVCODE1,CH1)は以前に、アドレス
位置ADDR0に記憶されていた。従って、新しい文字列が
(CODE,CH)の値(PREVCODE1,CH1)を含む場合、ADDR0にお
けるデータ項目はSDに再割り当てされる。
【0160】図24は、各データ項目が新しい入力文字列
にマッチしたため、待機辞書に割り当てられた、以前に
記憶されたデータ項目(PREVCODE1,CH1)、(PREVCODE3,CH
3)、及び(PREVCODE4,CH4)を示している。図24に示した
ように、CAMは、利用可能な各CAM記憶位置(例えば、ADD
R7におけるFREE/PD位置)が、CD、又はSDのどちらかに割
り当てられたデータ項目で満杯になるまで現在の状態に
維持される。図24は、辞書切り替え前にデータ項目と置
換される、アドレス位置ADDR7における利用可能な最後
のFREE/PD位置を示している。
にマッチしたため、待機辞書に割り当てられた、以前に
記憶されたデータ項目(PREVCODE1,CH1)、(PREVCODE3,CH
3)、及び(PREVCODE4,CH4)を示している。図24に示した
ように、CAMは、利用可能な各CAM記憶位置(例えば、ADD
R7におけるFREE/PD位置)が、CD、又はSDのどちらかに割
り当てられたデータ項目で満杯になるまで現在の状態に
維持される。図24は、辞書切り替え前にデータ項目と置
換される、アドレス位置ADDR7における利用可能な最後
のFREE/PD位置を示している。
【0161】全てのFREE/PD位置にデータ項目が割り当
てられた後、CAMは状態を変更し、辞書切り替えを行
う。図25は、辞書切り替え直後の各データ項目の状況を
示す。例えば、以前SDに割り当てられていたデータ項目
は全て、CDに再割り当てされ(SD->CD)、以前CDに割り当
てられていたデータ項目は全て、FREE/PDに再割り当て
される(CD->FREE/PD)。辞書切り替えの後、データ項目
は全て辞書に割り当てられたままであることに留意する
ことが重要である。切り替えの後、待機辞書の項目はな
くなる。例えば、以前にCDのアドレス位置ADDR1、及びA
DDR4ないしADDR7に割り当てられていたデータ項目は、F
REE/PDに再割り当てされる。従って、CAMリセットの後
でも、データ項目は全て、文字の符号化に使用すること
ができる。従って、以前に符号化された圧縮データが、
CAMリセットの後に失われることはないので、データ圧
縮性能は維持される。
てられた後、CAMは状態を変更し、辞書切り替えを行
う。図25は、辞書切り替え直後の各データ項目の状況を
示す。例えば、以前SDに割り当てられていたデータ項目
は全て、CDに再割り当てされ(SD->CD)、以前CDに割り当
てられていたデータ項目は全て、FREE/PDに再割り当て
される(CD->FREE/PD)。辞書切り替えの後、データ項目
は全て辞書に割り当てられたままであることに留意する
ことが重要である。切り替えの後、待機辞書の項目はな
くなる。例えば、以前にCDのアドレス位置ADDR1、及びA
DDR4ないしADDR7に割り当てられていたデータ項目は、F
REE/PDに再割り当てされる。従って、CAMリセットの後
でも、データ項目は全て、文字の符号化に使用すること
ができる。従って、以前に符号化された圧縮データが、
CAMリセットの後に失われることはないので、データ圧
縮性能は維持される。
【0162】LZSD2の方法も、FREE/PDに割り当てられた
データ項目を、以前CAM内に記憶されたことのない新し
い文字列と選択的に置換することによって、新しい入力
データに適応する機能を有する。具体的には、新しい文
字列がFREE/PD、又は現行辞書(CD)内のどちらかのデー
タ項目にマッチした場合、その新しい文字列は待機辞書
(SD)に再割り当てされる。例えば、図26では、次の入力
文字列(PREVCODE1,CH1)は、アドレス位置ADDR0における
CDのデータ項目にマッチする。従って、ADDR0における
データ項目はSDに再割り当てされる。更に、入力文字列
(PREVCODE5,CH5)はアドレス位置ADDR4におけるデータ項
目にマッチする。従って、ADDR4におけるデータ項目
は、FREE/PDからSDに再割り当てされる(PREVCODE5,CH5,
FREE/PD)->(PREVCODE5,CH5,SD)。
データ項目を、以前CAM内に記憶されたことのない新し
い文字列と選択的に置換することによって、新しい入力
データに適応する機能を有する。具体的には、新しい文
字列がFREE/PD、又は現行辞書(CD)内のどちらかのデー
タ項目にマッチした場合、その新しい文字列は待機辞書
(SD)に再割り当てされる。例えば、図26では、次の入力
文字列(PREVCODE1,CH1)は、アドレス位置ADDR0における
CDのデータ項目にマッチする。従って、ADDR0における
データ項目はSDに再割り当てされる。更に、入力文字列
(PREVCODE5,CH5)はアドレス位置ADDR4におけるデータ項
目にマッチする。従って、ADDR4におけるデータ項目
は、FREE/PDからSDに再割り当てされる(PREVCODE5,CH5,
FREE/PD)->(PREVCODE5,CH5,SD)。
【0163】入力文字列がどんな既存のデータ項目とも
マッチしない場合、新しい文字列がFREE/PD辞書位置に
追加され、最初はCDに割り当てられる。例えば、その入
力文字列(PREVCODE9,CH9)はCAM内のどんなデータ項目に
もマッチしない。従って、(PREVCODE9,CH9)は、最下位
アドレス(即ち、ADDR1)を有するFREE/PDのCAM記憶位置
に書き込まれ、CDに割り当てられる(PREVCODE9,CH9,C
D)。最下位FREE/PDアドレス位置以外の基準に基づいて
データ項目を割り当てることも可能である。以後のリセ
ット、及び上書きの前に、同じ列(PREVCODE9,CH9)が発
生した場合、この項目はSDに移される。
マッチしない場合、新しい文字列がFREE/PD辞書位置に
追加され、最初はCDに割り当てられる。例えば、その入
力文字列(PREVCODE9,CH9)はCAM内のどんなデータ項目に
もマッチしない。従って、(PREVCODE9,CH9)は、最下位
アドレス(即ち、ADDR1)を有するFREE/PDのCAM記憶位置
に書き込まれ、CDに割り当てられる(PREVCODE9,CH9,C
D)。最下位FREE/PDアドレス位置以外の基準に基づいて
データ項目を割り当てることも可能である。以後のリセ
ット、及び上書きの前に、同じ列(PREVCODE9,CH9)が発
生した場合、この項目はSDに移される。
【0164】CD辞書内の全てのデータ項目と、まだ上書
きされていないFREE/PD辞書内のデータ項目は依然とし
て、常に文字列のマッチに使用されることが分かる。CA
M状態の変更後でも、データ項目は全て辞書に割り当て
られたままなので、圧縮情報が失われることはない。従
って、データ圧縮率を一時的に低下させることなく、そ
の辞書を連続的に更新することができる。
きされていないFREE/PD辞書内のデータ項目は依然とし
て、常に文字列のマッチに使用されることが分かる。CA
M状態の変更後でも、データ項目は全て辞書に割り当て
られたままなので、圧縮情報が失われることはない。従
って、データ圧縮率を一時的に低下させることなく、そ
の辞書を連続的に更新することができる。
【0165】圧縮処理において新しい入力文字列が識別
される時に、上書きされるFREE/PD内のデータ項目を選
択するためのいくつかの方法がある。上述のように、FR
EE/PD、CD、又はSD内のどのデータ項目にもマッチしな
い新しい文字列は、最下位アドレスを有するFREE/PD内
の記憶位置に上書きされる。辞書が、(ハッシング技法
を使用するものと比べて)単にアドレスをインクリメン
トすることによって最初に作成されると、最下位FREE/P
Dアドレスが最も古い辞書項目になる。しかし、この状
況があてはまるのは、全てのFREE/PD位置が一度上書き
されるまでに過ぎない。又、FREE/PD辞書内の個別のデ
ータ項目を、新しい入力文字列との置換のために確定的
に選択することもできる。
される時に、上書きされるFREE/PD内のデータ項目を選
択するためのいくつかの方法がある。上述のように、FR
EE/PD、CD、又はSD内のどのデータ項目にもマッチしな
い新しい文字列は、最下位アドレスを有するFREE/PD内
の記憶位置に上書きされる。辞書が、(ハッシング技法
を使用するものと比べて)単にアドレスをインクリメン
トすることによって最初に作成されると、最下位FREE/P
Dアドレスが最も古い辞書項目になる。しかし、この状
況があてはまるのは、全てのFREE/PD位置が一度上書き
されるまでに過ぎない。又、FREE/PD辞書内の個別のデ
ータ項目を、新しい入力文字列との置換のために確定的
に選択することもできる。
【0166】例えば、データ項目は、以前のデータ項目
がどれだけ長く辞書に存在していたかに応じて、FREE/P
D内に書き込まれうる。この例では、CAM記憶位置に書き
込まれた順序を識別するタグを各データ項目に割り当て
ることができる。次に、LZSD2探索処理は、使用頻度が
最低(LRU)であることを示すタグ値を有するFREE/PDデー
タ項目を選択する。FREE/PD内の使用頻度が最低のデー
タ項目は、符号化済み文字列にマッチせずに最も長い期
間CAM内に存在していたデータ項目である。
がどれだけ長く辞書に存在していたかに応じて、FREE/P
D内に書き込まれうる。この例では、CAM記憶位置に書き
込まれた順序を識別するタグを各データ項目に割り当て
ることができる。次に、LZSD2探索処理は、使用頻度が
最低(LRU)であることを示すタグ値を有するFREE/PDデー
タ項目を選択する。FREE/PD内の使用頻度が最低のデー
タ項目は、符号化済み文字列にマッチせずに最も長い期
間CAM内に存在していたデータ項目である。
【0167】ある状況におけるLRUデータ項目は、新し
い文字列にマッチしない確率が最も高い。従って、LRU
データ項目を上書きすると、既存のデータ項目が置換さ
れる時に発生する恐れがある圧縮情報の損失を最小限に
抑えることができる可能性がある。タグを使用してLRU
データ項目を識別することは、Bunton、及びBorriello
著「PRACTICAL DICTIONARY MANAGEMENT FOR HARDWARE DA
TA COMPRESSION」(Communications of the ACM、1992年
1月、第35巻、第1号)に詳細に記載されている。
い文字列にマッチしない確率が最も高い。従って、LRU
データ項目を上書きすると、既存のデータ項目が置換さ
れる時に発生する恐れがある圧縮情報の損失を最小限に
抑えることができる可能性がある。タグを使用してLRU
データ項目を識別することは、Bunton、及びBorriello
著「PRACTICAL DICTIONARY MANAGEMENT FOR HARDWARE DA
TA COMPRESSION」(Communications of the ACM、1992年
1月、第35巻、第1号)に詳細に記載されている。
【0168】図27は、LZSD2データ圧縮の一般的方法を
示すデータ・フロー図である。ブロック450では、図4に
示した圧縮/伸長システムが、LZSD2圧縮のために初期設
定される。ブロック452で、入力文字列からの入力文字
(CH)が一度に1文字ずつ読み取られる。決定ブロック45
6でファイルの終り(EOF)条件が識別された場合、決定ブ
ロック454で、それがこの圧縮サイクルで初回かどうか
が検査される。EOF条件がその圧縮サイクルで初めてで
あった場合、決定ブロック454はLZSD2圧縮処理を終了す
る。EOF条件の検出がなされた時に、それがこの圧縮サ
イクルで初めてでない場合、ブロック460が以前マッチ
したシーケンスPREVCODEを出力し、ブロック464が符号
化済み出力文字が適切にフォーマットされることを保証
するために、更に一掃を行う。
示すデータ・フロー図である。ブロック450では、図4に
示した圧縮/伸長システムが、LZSD2圧縮のために初期設
定される。ブロック452で、入力文字列からの入力文字
(CH)が一度に1文字ずつ読み取られる。決定ブロック45
6でファイルの終り(EOF)条件が識別された場合、決定ブ
ロック454で、それがこの圧縮サイクルで初回かどうか
が検査される。EOF条件がその圧縮サイクルで初めてで
あった場合、決定ブロック454はLZSD2圧縮処理を終了す
る。EOF条件の検出がなされた時に、それがこの圧縮サ
イクルで初めてでない場合、ブロック460が以前マッチ
したシーケンスPREVCODEを出力し、ブロック464が符号
化済み出力文字が適切にフォーマットされることを保証
するために、更に一掃を行う。
【0169】再び決定ブロック456を参照すると、EOF条
件が識別されない場合、ブロック458で、全ての3つの
辞書(即ち、FREE/PD、CD、及びSD)で、拡張された列(PR
EVCODE,CH)が探索される。この列(PREVCODE,CH)が、以
前に記憶されたデータ項目とマッチした場合、決定ブロ
ック462はブロック472にジャンプする。(PREVCODE,CH)
がまだSDにない場合、ブロック472で、マッチした(PREV
CODE,CH)データ項目を有するCAM位置が待機辞書に再割
り当てされる。このマッチしたデータ項目は、状況ビッ
トを変更することによってSDに再割り当てされる。次
に、列(PREVCODE,CH)は、マッチしたデータ項目のメモ
リ・アドレスを使用して符号化され、PREVCODEに割り当
てられる。即ち、コード(PREVCODE,CH)->PREVCODEであ
る。次に、ブロック472は、次の入力文字(CH)がPREVCOD
Eの符号化済みの値と組み合わされるブロック452にジャ
ンプする。このように、マッチした列内の各サブストリ
ングごとに記憶されたコードに関する状況ビットが更新
され、以後のリセットにおいて保持される。
件が識別されない場合、ブロック458で、全ての3つの
辞書(即ち、FREE/PD、CD、及びSD)で、拡張された列(PR
EVCODE,CH)が探索される。この列(PREVCODE,CH)が、以
前に記憶されたデータ項目とマッチした場合、決定ブロ
ック462はブロック472にジャンプする。(PREVCODE,CH)
がまだSDにない場合、ブロック472で、マッチした(PREV
CODE,CH)データ項目を有するCAM位置が待機辞書に再割
り当てされる。このマッチしたデータ項目は、状況ビッ
トを変更することによってSDに再割り当てされる。次
に、列(PREVCODE,CH)は、マッチしたデータ項目のメモ
リ・アドレスを使用して符号化され、PREVCODEに割り当
てられる。即ち、コード(PREVCODE,CH)->PREVCODEであ
る。次に、ブロック472は、次の入力文字(CH)がPREVCOD
Eの符号化済みの値と組み合わされるブロック452にジャ
ンプする。このように、マッチした列内の各サブストリ
ングごとに記憶されたコードに関する状況ビットが更新
され、以後のリセットにおいて保持される。
【0170】決定ブロック462で、マッチの発生しない
時点まで列が拡張されると、ブロック466で、PREVCODE
が、見つかったうちで最良のマッチとして出力される。
利用可能なFREE/PD位置がある場合、ブロック468で、利
用可能な次のアドレスに(PREVCODE,CH)を書き込むこと
によって辞書が更新され(例えば、最下位アドレスを有
するFREE/PD辞書)、(PREVCODE,CH)が現行辞書(CD)に割
り当てられる。利用可能なFREE/PD位置がない場合、ブ
ロック468で、状況ビットを変更することにより(即ち、
CD->FREE/PD、SD->CD)、現行辞書をFREE/PD辞書に切り
替え、待機辞書を現行辞書に切り替えることによって辞
書が更新される。ブロック470で、CHをPREVCODEに割り
当てることによって(CH->PREVCODE)、次の入力文字列が
準備される。単一文字列から圧縮済みコードへの代替マ
ッピングが行われる。次に、この圧縮処理はブロック45
2に戻り、次の入力文字(CH)を読み取り、PREVCODEと組
み合わせる。
時点まで列が拡張されると、ブロック466で、PREVCODE
が、見つかったうちで最良のマッチとして出力される。
利用可能なFREE/PD位置がある場合、ブロック468で、利
用可能な次のアドレスに(PREVCODE,CH)を書き込むこと
によって辞書が更新され(例えば、最下位アドレスを有
するFREE/PD辞書)、(PREVCODE,CH)が現行辞書(CD)に割
り当てられる。利用可能なFREE/PD位置がない場合、ブ
ロック468で、状況ビットを変更することにより(即ち、
CD->FREE/PD、SD->CD)、現行辞書をFREE/PD辞書に切り
替え、待機辞書を現行辞書に切り替えることによって辞
書が更新される。ブロック470で、CHをPREVCODEに割り
当てることによって(CH->PREVCODE)、次の入力文字列が
準備される。単一文字列から圧縮済みコードへの代替マ
ッピングが行われる。次に、この圧縮処理はブロック45
2に戻り、次の入力文字(CH)を読み取り、PREVCODEと組
み合わせる。
【0171】図28ないし30は、図27に示したLZSD2圧縮
技法の詳細データ・フロー図である。以下の変数は、LZS
D2圧縮、及び伸長を記述するために使用される。 CAM 連想記憶メモリ。各辞書項目は([MAXBITSビット・
コード・フィールド]、[8ビット文字フィールド]、[2
ビット状況フィールド])を含む。 CD 辞書項目が現行辞書にあることを示す2ビット状況
値。 CH 最も新しい入力文字を含む8ビット変数。 CODE_SIZE 現在、各出力コードに関して使用されてい
るビット数。最小値は9で、最大値は辞書サイズで決定
されるMAXBITSである。2(MAXBITS)>=(辞書項目の数)+
(ルート・コードの数(通常256))+(制御コードの数)。 DEPTH 圧縮時はPREVCODEで、伸長時はINCODEで表され
る列内の文字数を意味する変数。この変数のサイズはMA
XDEPTHによって決定される。 EOF これがセットされた場合、データ・ストリームの終
りに達したため入力ストリームからデータを読み取る試
みが失敗したことを示すフラグ。 FIRST_CHAR INCODEで表される列の最初の文字を意味す
る8ビット変数。 FOUND_CODE 入力データ列にマッチするデータ項目が辞
書で探索され、マッチが見つかると、MAXBITSビット変
数に、マッチが見つかったアドレスが割り当てられる。 FREE/PD データ項目が事前辞書にあることを示す2ビ
ット状況値。この値はその位置が上書きできることも示
す。 GROW 各圧縮済みコードごとにあと1ビットだけ読み取
ることを開始するようデコンプレッサに通知するCODE_S
IZEビット制御コード。 INCODE 圧縮済みデータ・ストリームから読み取られるM
AXBITSビット変数の値。 INVALID これは、辞書項目でないあらゆるMAXBITSビッ
ト・コードである。即ち、INVALIDは制御コード、又はル
ート・コードを表すことができる。 LAST_CODE_BUILT 最後に作成されたコードのアドレス
を意味するMAXBITSビット変数。 MATCH この標識は、辞書の探索で首尾良くマッチが見
つかった場合、真である。 MAXBITS 出力コード内のビットの最大数。 MAXDEPTH コードが表すことのできる最大の列の長さ。 NEXTCODE 新しい文字列で上書きされるべき辞書項目の
アドレスを意味するMAXBITSビット変数。 PREVCODE 圧縮の間に、それまでに見つかったうちで最
良の辞書のマッチに関するアドレスを意味するMAXBITS
ビット変数。伸長の間は、PREVCODEが、前のサイクルの
間INCODEが何であったかを表す。 PREVDEPTH 伸長の間のみのPREVCODEの列の長さ。 SD 辞書項目が待機辞書にあることを示す2ビット状況
値。 STACK 列の反転のためにMAXDEPTH LIFO待ち行列によっ
て使用される8ビット。 SWAP_FLAG 辞書切り替えが必要な時に真である標識フ
ラグ。 TCODE INCODEを復号化する際に、一時記憶位置として
使用されるMAXBITSビット変数。 TDEPTH スタックが空である間、そのスタックの深さの
記録を保持するために使用される一時変数。
技法の詳細データ・フロー図である。以下の変数は、LZS
D2圧縮、及び伸長を記述するために使用される。 CAM 連想記憶メモリ。各辞書項目は([MAXBITSビット・
コード・フィールド]、[8ビット文字フィールド]、[2
ビット状況フィールド])を含む。 CD 辞書項目が現行辞書にあることを示す2ビット状況
値。 CH 最も新しい入力文字を含む8ビット変数。 CODE_SIZE 現在、各出力コードに関して使用されてい
るビット数。最小値は9で、最大値は辞書サイズで決定
されるMAXBITSである。2(MAXBITS)>=(辞書項目の数)+
(ルート・コードの数(通常256))+(制御コードの数)。 DEPTH 圧縮時はPREVCODEで、伸長時はINCODEで表され
る列内の文字数を意味する変数。この変数のサイズはMA
XDEPTHによって決定される。 EOF これがセットされた場合、データ・ストリームの終
りに達したため入力ストリームからデータを読み取る試
みが失敗したことを示すフラグ。 FIRST_CHAR INCODEで表される列の最初の文字を意味す
る8ビット変数。 FOUND_CODE 入力データ列にマッチするデータ項目が辞
書で探索され、マッチが見つかると、MAXBITSビット変
数に、マッチが見つかったアドレスが割り当てられる。 FREE/PD データ項目が事前辞書にあることを示す2ビ
ット状況値。この値はその位置が上書きできることも示
す。 GROW 各圧縮済みコードごとにあと1ビットだけ読み取
ることを開始するようデコンプレッサに通知するCODE_S
IZEビット制御コード。 INCODE 圧縮済みデータ・ストリームから読み取られるM
AXBITSビット変数の値。 INVALID これは、辞書項目でないあらゆるMAXBITSビッ
ト・コードである。即ち、INVALIDは制御コード、又はル
ート・コードを表すことができる。 LAST_CODE_BUILT 最後に作成されたコードのアドレス
を意味するMAXBITSビット変数。 MATCH この標識は、辞書の探索で首尾良くマッチが見
つかった場合、真である。 MAXBITS 出力コード内のビットの最大数。 MAXDEPTH コードが表すことのできる最大の列の長さ。 NEXTCODE 新しい文字列で上書きされるべき辞書項目の
アドレスを意味するMAXBITSビット変数。 PREVCODE 圧縮の間に、それまでに見つかったうちで最
良の辞書のマッチに関するアドレスを意味するMAXBITS
ビット変数。伸長の間は、PREVCODEが、前のサイクルの
間INCODEが何であったかを表す。 PREVDEPTH 伸長の間のみのPREVCODEの列の長さ。 SD 辞書項目が待機辞書にあることを示す2ビット状況
値。 STACK 列の反転のためにMAXDEPTH LIFO待ち行列によっ
て使用される8ビット。 SWAP_FLAG 辞書切り替えが必要な時に真である標識フ
ラグ。 TCODE INCODEを復号化する際に、一時記憶位置として
使用されるMAXBITSビット変数。 TDEPTH スタックが空である間、そのスタックの深さの
記録を保持するために使用される一時変数。
【0172】図28を参照すると、開始時に、ブロック47
4は、図4に示した圧縮/伸長回路を、公知で一貫性のあ
る状態にする。各辞書項目は所定の値にセットされる。
例えば、コード・フィールド、文字フィールド、及び状
況フィールドは通常、それぞれ16進数(HEX)の000、00、
及びFREE/PDにセットされる。従って、CAM内のあらゆる
辞書位置は、2文字列(NULL NULL FREE/PD)を含む。圧
縮率を更に向上させるために、各辞書項目を異なる値の
列に初期設定することも可能である。例えば、入力文字
ストリーム内で頻繁に発生する文字列の組み合わせを、
圧縮処理が開始される前にFREE/PD辞書に書き込むこと
ができる。
4は、図4に示した圧縮/伸長回路を、公知で一貫性のあ
る状態にする。各辞書項目は所定の値にセットされる。
例えば、コード・フィールド、文字フィールド、及び状
況フィールドは通常、それぞれ16進数(HEX)の000、00、
及びFREE/PDにセットされる。従って、CAM内のあらゆる
辞書位置は、2文字列(NULL NULL FREE/PD)を含む。圧
縮率を更に向上させるために、各辞書項目を異なる値の
列に初期設定することも可能である。例えば、入力文字
ストリーム内で頻繁に発生する文字列の組み合わせを、
圧縮処理が開始される前にFREE/PD辞書に書き込むこと
ができる。
【0173】出力フォーマットの制御は、圧縮済みデー
タ・インタフェイス138、及び148(図4)によって実行さ
れ、ブロック474によって空の初期状態にリセットされ
る。CODE_SIZE変数/レジスタは通常9のような最小値に
セットされ、LAST_CODE_BUILTレジスタはINVALIDにセッ
トされ、DEPTHレジスタは0にセットされ、SWAP_FLAGは
セットされない。
タ・インタフェイス138、及び148(図4)によって実行さ
れ、ブロック474によって空の初期状態にリセットされ
る。CODE_SIZE変数/レジスタは通常9のような最小値に
セットされ、LAST_CODE_BUILTレジスタはINVALIDにセッ
トされ、DEPTHレジスタは0にセットされ、SWAP_FLAGは
セットされない。
【0174】ブロック476で、8ビット文字が入力文字
ストリームから読み取られ、変数CHに割り当てられる。
決定ブロック478で、入力ストリームの終りに達したた
めにデータ読み取りが失敗したかどうかが判定される
(即ち、EOFフラグ)。EOF条件が検出された場合、決定ブ
ロック486は、圧縮処理を終了し、残りの全ての符号化
済み情報が出力される。データ読み取り処理が成功した
(即ち、EOF条件が検出されない)場合、決定ブロック478
は、LZSD2圧縮処理に進む。
ストリームから読み取られ、変数CHに割り当てられる。
決定ブロック478で、入力ストリームの終りに達したた
めにデータ読み取りが失敗したかどうかが判定される
(即ち、EOFフラグ)。EOF条件が検出された場合、決定ブ
ロック486は、圧縮処理を終了し、残りの全ての符号化
済み情報が出力される。データ読み取り処理が成功した
(即ち、EOF条件が検出されない)場合、決定ブロック478
は、LZSD2圧縮処理に進む。
【0175】データ読み取りが失敗すると、決定ブロッ
ク478は決定ブロック486にジャンプし、そこでPREVCODE
の列の長さが検査される。DEPTH=0の場合、PREVCODEの
列の長さは0であり、出力することができない。EOFフ
ラグも、入力データ・ストリームの終りに達したことを
示したので、DEPTH=0は、出力すべきものが残されてい
ないことを示し、従って圧縮が終わり、ブロック486が
圧縮処理を終了させる。初期設定の後のDEPTH=0だけ
が、入力されたデータがないことを意味する。DEPTH>0
の場合、決定ブロック486は決定ブロック492にジャンプ
する。
ク478は決定ブロック486にジャンプし、そこでPREVCODE
の列の長さが検査される。DEPTH=0の場合、PREVCODEの
列の長さは0であり、出力することができない。EOFフ
ラグも、入力データ・ストリームの終りに達したことを
示したので、DEPTH=0は、出力すべきものが残されてい
ないことを示し、従って圧縮が終わり、ブロック486が
圧縮処理を終了させる。初期設定の後のDEPTH=0だけ
が、入力されたデータがないことを意味する。DEPTH>0
の場合、決定ブロック486は決定ブロック492にジャンプ
する。
【0176】データ読み取りが成功した場合、決定ブロ
ック484で、DEPTH変数/レジスタの値が検査される。DEP
TH=0の場合、PREVCODEの列の長さは0であり、辞書探索
で使用することはできない。従って、ブロック480で、
その入力文字CHがPREVCODEに割り当てられる(PREVCODE=
CH)。この場合、PREVCODEは1文字の文字列を表し、従
ってDEPTHは1にセットされる。次に、ブロック480はブ
ロック476にジャンプし、次の入力文字CHが読み取られ
る。
ック484で、DEPTH変数/レジスタの値が検査される。DEP
TH=0の場合、PREVCODEの列の長さは0であり、辞書探索
で使用することはできない。従って、ブロック480で、
その入力文字CHがPREVCODEに割り当てられる(PREVCODE=
CH)。この場合、PREVCODEは1文字の文字列を表し、従
ってDEPTHは1にセットされる。次に、ブロック480はブ
ロック476にジャンプし、次の入力文字CHが読み取られ
る。
【0177】DEPTH>0の場合、PREVCODEは有効な文字列
を有し、圧縮処理はブロック488に引き継がれる。ブロ
ック488で、全ての3つの辞書(FREE/PD、CD、及びSD)で
同時に、コード・フィールド内にPREVCODEを有し、文字
フィールドにCHを有するデータ項目(PREVCODE,CH)が探
索される。全ての3つの辞書の同時探索は、単にコード
・フィールド、及び文字フィールドだけを探索し、状況
フィールドの値を無視することによって実行される。
を有し、圧縮処理はブロック488に引き継がれる。ブロ
ック488で、全ての3つの辞書(FREE/PD、CD、及びSD)で
同時に、コード・フィールド内にPREVCODEを有し、文字
フィールドにCHを有するデータ項目(PREVCODE,CH)が探
索される。全ての3つの辞書の同時探索は、単にコード
・フィールド、及び文字フィールドだけを探索し、状況
フィールドの値を無視することによって実行される。
【0178】複数のアドレスが(PREVCODE,CH)の列にマ
ッチする可能性があり、従って複数のマッチを1つに減
らさなければならない。これは、最小の値を有するマッ
チ・アドレスを選択する優先順位エンコーダを使用する
ことによって行われる。(PREVCODE,CH)にマッチする位
置が見つかると、ブロック488で、MATCHフラグがセット
され、マッチ・アドレスがFOUNDCODEに割り当てられ、決
定ブロック490に進む。
ッチする可能性があり、従って複数のマッチを1つに減
らさなければならない。これは、最小の値を有するマッ
チ・アドレスを選択する優先順位エンコーダを使用する
ことによって行われる。(PREVCODE,CH)にマッチする位
置が見つかると、ブロック488で、MATCHフラグがセット
され、マッチ・アドレスがFOUNDCODEに割り当てられ、決
定ブロック490に進む。
【0179】辞書内で(PREVCODE,CH)のマッチを見つけ
るだけでは、FOUNDCODEが受け入れ可能な出力コードで
あるかどうかを判定するのに十分ではない。決定ブロッ
ク490で、更に2つのテストにパスしなければならな
い。第1に、デコンプレッサは、そのコードがコンプレ
ッサによって作成された直後である場合、FOUNDCODEを
正確に復号化しない。従って、FOUNDCODEはLAST_CODE_B
UILTと等しくない、そのため、最後に作成された辞書項
目は出力コードとして使用できなくなる。
るだけでは、FOUNDCODEが受け入れ可能な出力コードで
あるかどうかを判定するのに十分ではない。決定ブロッ
ク490で、更に2つのテストにパスしなければならな
い。第1に、デコンプレッサは、そのコードがコンプレ
ッサによって作成された直後である場合、FOUNDCODEを
正確に復号化しない。従って、FOUNDCODEはLAST_CODE_B
UILTと等しくない、そのため、最後に作成された辞書項
目は出力コードとして使用できなくなる。
【0180】又、ある希なケースでは、辞書内の列がMA
XDEPTHより長くなることもある。MAXDEPTHより長いコー
ドが出力された場合、デコンプレッサ列反転レジスタ
(図4参照)がオーバフローし、エラーが発生する。これ
を防ぐために、決定ブロック490でFOUNDCODEの列の長さ
も検査する。
XDEPTHより長くなることもある。MAXDEPTHより長いコー
ドが出力された場合、デコンプレッサ列反転レジスタ
(図4参照)がオーバフローし、エラーが発生する。これ
を防ぐために、決定ブロック490でFOUNDCODEの列の長さ
も検査する。
【0181】辞書内で(PREVCODE,CH)の列がマッチし、L
AST_CODE_BUILTがFOUNDCODEに等しくなく、DEPTH<MAXDE
PTHである場合、決定ブロック490はブロック482にジャ
ンプし、そこで(PREVCODE,CH)の文字列にマッチする辞
書データ項目が待機辞書(SD)に再割り当てされる。この
データ項目は、アドレス位置FOUNDCODEにおける状況フ
ィールドをSDにセットすることによって再割り当てされ
る。次にブロック482で、PREVCODEが、それまでに見つ
かったうちで最良のマッチ列に等しい値にセットされ、
即ちFOUNDCODEにセットされ(PREVCODE=FOUNDCODE)、DEP
TH変数がPREVCODEの新しい列の長さにインクリメントさ
れる(即ち、DEPTHは1だけインクリメントされる)。次
にブロック482はブロック476にジャンプし、次の入力文
字(CH)が読み取られ、新しい列を形成する新しいPREVCO
DE値に追加される(PREVCODE,CH)。
AST_CODE_BUILTがFOUNDCODEに等しくなく、DEPTH<MAXDE
PTHである場合、決定ブロック490はブロック482にジャ
ンプし、そこで(PREVCODE,CH)の文字列にマッチする辞
書データ項目が待機辞書(SD)に再割り当てされる。この
データ項目は、アドレス位置FOUNDCODEにおける状況フ
ィールドをSDにセットすることによって再割り当てされ
る。次にブロック482で、PREVCODEが、それまでに見つ
かったうちで最良のマッチ列に等しい値にセットされ、
即ちFOUNDCODEにセットされ(PREVCODE=FOUNDCODE)、DEP
TH変数がPREVCODEの新しい列の長さにインクリメントさ
れる(即ち、DEPTHは1だけインクリメントされる)。次
にブロック482はブロック476にジャンプし、次の入力文
字(CH)が読み取られ、新しい列を形成する新しいPREVCO
DE値に追加される(PREVCODE,CH)。
【0182】再びブロック490を参照すると、(PREVCOD
E,CH)の列が辞書データ項目にマッチしない場合、又は
ブロック490で実行される他の2つのテストのどちらか
にパスしない場合、後述のように、ブロック496でPREVC
ODEが出力され、ブロック514で(PREVCODE,CH)の列が現
行辞書に割り当てられる(即ち、PREVCODE,CH,CD)。
E,CH)の列が辞書データ項目にマッチしない場合、又は
ブロック490で実行される他の2つのテストのどちらか
にパスしない場合、後述のように、ブロック496でPREVC
ODEが出力され、ブロック514で(PREVCODE,CH)の列が現
行辞書に割り当てられる(即ち、PREVCODE,CH,CD)。
【0183】出力される前に、決定ブロック492(図29参
照)で、PREVCODE内のビット数が検査される。PREVCODE
が2CODE_SIZE以上である場合、現在のCODE_SIZEビット
数(例えば、9)で表すことはできない。この場合、ブロ
ック494で、将来出力されるコードが全て追加ビットで
表されるようにCODE_SIZEが1だけ増やされる。ブロッ
ク494では、出力が可能になる前にフォーマッタ回路(図
4)によってバイト内にパックされなければならない、C
ODE_SIZEビットを使用してGROW制御コードも出力され
る。GROWコードは、将来のコードが全て現在のコード・
サイズより1ビット長いようなデコンプレッサ(図32参
照)に対する信号である。PREVCODEを出力するために1
ビットより多くのビットが更に必要とされることがあ
る。従って、ブロック494は決定ブロック492にジャンプ
し、PREVCODEを実際に出力する前に他のGROWコードを送
らなければならないかどうか検査する。次にブロック49
6で、CODE_SIZEビット数を使用してPREVCODEが出力され
る。このCODE_SIZE数は、PREVCODEを出力する前にPREVC
ODEをバイト内にパックするために、フォーマッタによ
って使用される。
照)で、PREVCODE内のビット数が検査される。PREVCODE
が2CODE_SIZE以上である場合、現在のCODE_SIZEビット
数(例えば、9)で表すことはできない。この場合、ブロ
ック494で、将来出力されるコードが全て追加ビットで
表されるようにCODE_SIZEが1だけ増やされる。ブロッ
ク494では、出力が可能になる前にフォーマッタ回路(図
4)によってバイト内にパックされなければならない、C
ODE_SIZEビットを使用してGROW制御コードも出力され
る。GROWコードは、将来のコードが全て現在のコード・
サイズより1ビット長いようなデコンプレッサ(図32参
照)に対する信号である。PREVCODEを出力するために1
ビットより多くのビットが更に必要とされることがあ
る。従って、ブロック494は決定ブロック492にジャンプ
し、PREVCODEを実際に出力する前に他のGROWコードを送
らなければならないかどうか検査する。次にブロック49
6で、CODE_SIZEビット数を使用してPREVCODEが出力され
る。このCODE_SIZE数は、PREVCODEを出力する前にPREVC
ODEをバイト内にパックするために、フォーマッタによ
って使用される。
【0184】決定ブロック498は、以前に決定ブロック4
78で実行されたEOF検査の続きである。決定ブロック478
で検出されたEOF条件は、最後の最良のマッチ・コード(P
REVCODE)を出力するために、ブロック492における圧縮
の主フローに戻る可能性がある(決定ブロック486参
照)。更に、最後のコード出力は、最後の出力バイトを
完全に満たさない可能性もある。統計的には、このよう
なコードは8つの出力コードのうち1つだけである。従
って、ブロック500で、最終バイトが出力される前に、
必要であれば、残りのビットにビット0、又は1を詰め
込む。この時点で、圧縮処理が終了する。
78で実行されたEOF検査の続きである。決定ブロック478
で検出されたEOF条件は、最後の最良のマッチ・コード(P
REVCODE)を出力するために、ブロック492における圧縮
の主フローに戻る可能性がある(決定ブロック486参
照)。更に、最後のコード出力は、最後の出力バイトを
完全に満たさない可能性もある。統計的には、このよう
なコードは8つの出力コードのうち1つだけである。従
って、ブロック500で、最終バイトが出力される前に、
必要であれば、残りのビットにビット0、又は1を詰め
込む。この時点で、圧縮処理が終了する。
【0185】EOFフラグが検出されない場合、決定ブロ
ック502で、SWAP_FLAGがセットされているかどうかが検
査される。SWAP_FLAGがセットされている場合、FREE/PD
をCDと置換し、CDをSDと置換することによって辞書
が切り替えられる(SD->CD、CD->FREE/PD)。辞書を切り
替えても、実際にCAM内のデータは変更されないが、状
況フィールドが圧縮エンジン(図17参照)によってどのよ
うに解釈されるかは変更される。辞書切り替えの後で、
以前SDを表していた状況レジスタ・コードは今度は、CD
を表し、CDを表していた状況レジスタ・コードは今度、F
REE/PDを表し、FREE/PDはINVになり、INVはSDになる。I
NVは、FREE/PDが切り替え前で常に空であり、それによ
ってINVは切り替え後も空の状態を保持するため、空の
ままとなる。又、INVが切り替え前で空であったので(IN
Vは常に空である)、待機辞書(SD)も切り替え後は空であ
る。
ック502で、SWAP_FLAGがセットされているかどうかが検
査される。SWAP_FLAGがセットされている場合、FREE/PD
をCDと置換し、CDをSDと置換することによって辞書
が切り替えられる(SD->CD、CD->FREE/PD)。辞書を切り
替えても、実際にCAM内のデータは変更されないが、状
況フィールドが圧縮エンジン(図17参照)によってどのよ
うに解釈されるかは変更される。辞書切り替えの後で、
以前SDを表していた状況レジスタ・コードは今度は、CD
を表し、CDを表していた状況レジスタ・コードは今度、F
REE/PDを表し、FREE/PDはINVになり、INVはSDになる。I
NVは、FREE/PDが切り替え前で常に空であり、それによ
ってINVは切り替え後も空の状態を保持するため、空の
ままとなる。又、INVが切り替え前で空であったので(IN
Vは常に空である)、待機辞書(SD)も切り替え後は空であ
る。
【0186】決定ブロック502で、SWAP_FLAGがセットさ
れていないと判定された場合、決定ブロック506(図30)
で、PREVCODE(DEPTH)内の文字数が最大許容の列の長さ
(MAXDEPTH)より小さいかどうかを確認するための検査が
行われる。DEPTH=MAXDEPTHの場合、文字列(PREVCODE,C
H)は長すぎて出力コードとして使用できず、従って現行
辞書に追加されない。DEPTH<MAXDEPTHであり、利用可能
な位置が存在する場合、文字列(PREVCODE,CH)は現行辞
書に追加される。
れていないと判定された場合、決定ブロック506(図30)
で、PREVCODE(DEPTH)内の文字数が最大許容の列の長さ
(MAXDEPTH)より小さいかどうかを確認するための検査が
行われる。DEPTH=MAXDEPTHの場合、文字列(PREVCODE,C
H)は長すぎて出力コードとして使用できず、従って現行
辞書に追加されない。DEPTH<MAXDEPTHであり、利用可能
な位置が存在する場合、文字列(PREVCODE,CH)は現行辞
書に追加される。
【0187】第1ブロック508で、CAM状況フィールドを
検査し、同時にコード(PREVCODE)、及び文字フィールド
(CH)を無視することによって、利用可能なFREE/PD位置
がCAMで探索される。従って、マッチは、コードや文字
フィールドの値にかかわらず成功する。複数のFREE/PD
データ項目がある可能性があるので、優先順位エンコー
ダは最小値を有するマッチ・アドレスを選択する。
検査し、同時にコード(PREVCODE)、及び文字フィールド
(CH)を無視することによって、利用可能なFREE/PD位置
がCAMで探索される。従って、マッチは、コードや文字
フィールドの値にかかわらず成功する。複数のFREE/PD
データ項目がある可能性があるので、優先順位エンコー
ダは最小値を有するマッチ・アドレスを選択する。
【0188】上述のように、どのFREE/PDデータ項目の
使用頻度が最も低いかに応じて複数のマッチのうちから
1つを選択することもできる。例えば、項目がCAM内に
記憶された順序を示すタグを、各辞書項目に関連付ける
ことができる。その場合、優先順位エンコーダは、複数
のマッチのうちから、最も使用頻度の低いデータ項目を
選択する。その最も使用頻度の低いデータ項目はおそら
く、新しい符号化済み文字列にマッチする可能性が最も
低い文字列である。従って、その最も使用頻度の低いデ
ータ項目を置換すると、わずかな圧縮情報を失う影響を
最小限に抑えられる。優先順位選択についての代替方法
を実施することもできる。
使用頻度が最も低いかに応じて複数のマッチのうちから
1つを選択することもできる。例えば、項目がCAM内に
記憶された順序を示すタグを、各辞書項目に関連付ける
ことができる。その場合、優先順位エンコーダは、複数
のマッチのうちから、最も使用頻度の低いデータ項目を
選択する。その最も使用頻度の低いデータ項目はおそら
く、新しい符号化済み文字列にマッチする可能性が最も
低い文字列である。従って、その最も使用頻度の低いデ
ータ項目を置換すると、わずかな圧縮情報を失う影響を
最小限に抑えられる。優先順位選択についての代替方法
を実施することもできる。
【0189】FREE/PD状況フィールドが見つかった場
合、決定ブロック510はブロック514にジャンプし、(PRE
VCODE,CH)がCAMの、そのマッチしたアドレス位置に追加
される。ブロック514で、列(PREVCODE,CH)がCAMのアド
レスNEXTCODEに書き込まれ、その列が現行辞書に割り当
てられる。列(PREVCODE,CH)は、新しい入力文字列との
マッチが発生し、それによってSDに移されるまで、CDに
存在し続ける。それ以外では、(PREVCODE,CH)は、辞書
切り替えが実行され、次にFREE/PDに再割り当て、又は
移されるまで、CDに存在し続ける。
合、決定ブロック510はブロック514にジャンプし、(PRE
VCODE,CH)がCAMの、そのマッチしたアドレス位置に追加
される。ブロック514で、列(PREVCODE,CH)がCAMのアド
レスNEXTCODEに書き込まれ、その列が現行辞書に割り当
てられる。列(PREVCODE,CH)は、新しい入力文字列との
マッチが発生し、それによってSDに移されるまで、CDに
存在し続ける。それ以外では、(PREVCODE,CH)は、辞書
切り替えが実行され、次にFREE/PDに再割り当て、又は
移されるまで、CDに存在し続ける。
【0190】FREE/PDの探索が失敗した場合、ブロック5
12で、辞書切り替えが必要であることを示すSWAP_FLAG
がセットされる。FREE/PD状況フィールドが見つからな
いということは、(PREVCODE,CH)で表される列が辞書に
入力されないことも意味する。伸長辞書との同期を維持
するために、辞書切り替えは、次の圧縮サイクルまで延
期される(決定ブロック502参照)。
12で、辞書切り替えが必要であることを示すSWAP_FLAG
がセットされる。FREE/PD状況フィールドが見つからな
いということは、(PREVCODE,CH)で表される列が辞書に
入力されないことも意味する。伸長辞書との同期を維持
するために、辞書切り替えは、次の圧縮サイクルまで延
期される(決定ブロック502参照)。
【0191】例えば、LZSD2デコンプレッサ(図31、及び
32ないし34を参照)は、コンプレッサとは異なる順序で
状況フィールドの更新を実行し、FREE/PD状況フィール
ドの探索が失敗した直後に辞書切り替えを開始する。LZ
SD2デコンプレッサは、所与のコードワードに関する状
況フィールド・ビットを更新し、次に以前のコードワー
ドを辞書に書き込もうとする。従って、次のコードの状
況フィールドが更新されるまで、LZSD2圧縮処理におけ
る辞書切り替えを延期することによって、辞書切り替え
が行われた時に、コンプレッサ辞書とデコンプレッサ辞
書を一致させることができる。
32ないし34を参照)は、コンプレッサとは異なる順序で
状況フィールドの更新を実行し、FREE/PD状況フィール
ドの探索が失敗した直後に辞書切り替えを開始する。LZ
SD2デコンプレッサは、所与のコードワードに関する状
況フィールド・ビットを更新し、次に以前のコードワー
ドを辞書に書き込もうとする。従って、次のコードの状
況フィールドが更新されるまで、LZSD2圧縮処理におけ
る辞書切り替えを延期することによって、辞書切り替え
が行われた時に、コンプレッサ辞書とデコンプレッサ辞
書を一致させることができる。
【0192】伸長サイクルの間にコードワードが作成さ
れなかった場合、ブロック516で、LAST_CODE_BUILTに値
INVALIDがセットされる。そこで、最後に作成されたコ
ードワードを将来のマッチングで使用することができ
る。従って、最大の列の長さ(DEPTH=MAXDEPTH)を超えた
ため、又は辞書が満杯になったために文字列(PREVCODE,
CH)が作成されなかった場合、最後に作成された辞書項
目は最後の(PREVCODE,CH)のマッチ・アドレス(即ち、FOU
NDCODE)を指さない。従って、ブロック516で、LAST_COD
E_BUILTは、次の探索動作でFOUNDCODEにマッチできない
アドレスINVALIDにセットされる。ブロック518で、PREV
CODEがCHと置換される(PREVCODE=CH)。PREVCODEはこの
場合、1つの文字列を表すので、DEPTHは1にセットさ
れる。
れなかった場合、ブロック516で、LAST_CODE_BUILTに値
INVALIDがセットされる。そこで、最後に作成されたコ
ードワードを将来のマッチングで使用することができ
る。従って、最大の列の長さ(DEPTH=MAXDEPTH)を超えた
ため、又は辞書が満杯になったために文字列(PREVCODE,
CH)が作成されなかった場合、最後に作成された辞書項
目は最後の(PREVCODE,CH)のマッチ・アドレス(即ち、FOU
NDCODE)を指さない。従って、ブロック516で、LAST_COD
E_BUILTは、次の探索動作でFOUNDCODEにマッチできない
アドレスINVALIDにセットされる。ブロック518で、PREV
CODEがCHと置換される(PREVCODE=CH)。PREVCODEはこの
場合、1つの文字列を表すので、DEPTHは1にセットさ
れる。
【0193】次に、ブロック518はブロック476にジャン
プし、入力データ・ストリームから次の文字が読み取ら
れる。LZSD2圧縮は、入力文字ストリーム内の文字が全
て符号化されるまで継続される。
プし、入力データ・ストリームから次の文字が読み取ら
れる。LZSD2圧縮は、入力文字ストリーム内の文字が全
て符号化されるまで継続される。
【0194】LZSD2伸長 好適実施例では、LZSD2圧縮に使用されるのと同じ3つ
の辞書(CD、SD、FREE/PD)を使用して、LZSD2伸長技法も
実施される。コンプレッサで、新しい文字を記憶するた
めの位置(FREE/PD状況レジスタ割り当てを有するもの)
を使い果たすと、デコンプレッサは、上記でLZSD2圧縮
に関して論じたのと同様の方法で辞書を切り替える。例
えば、辞書切り替えの後では、CDはFREE/PDに、SDはCD
に、SDは空になる。データ伸長の場合、処理インタフェ
イス152(図4)は、圧縮/伸長エンジン142を介し、圧縮
前データ・インタフェイス138内の列反転待ち行列に至る
まで圧縮済みデータ・インタフェイス148からの圧縮済み
データの流れを制御する。
の辞書(CD、SD、FREE/PD)を使用して、LZSD2伸長技法も
実施される。コンプレッサで、新しい文字を記憶するた
めの位置(FREE/PD状況レジスタ割り当てを有するもの)
を使い果たすと、デコンプレッサは、上記でLZSD2圧縮
に関して論じたのと同様の方法で辞書を切り替える。例
えば、辞書切り替えの後では、CDはFREE/PDに、SDはCD
に、SDは空になる。データ伸長の場合、処理インタフェ
イス152(図4)は、圧縮/伸長エンジン142を介し、圧縮
前データ・インタフェイス138内の列反転待ち行列に至る
まで圧縮済みデータ・インタフェイス148からの圧縮済み
データの流れを制御する。
【0195】図31は、LZSD2伸長を示す概略流れ図であ
る。ブロック520で、LZSD2伸長に関して図4で示した圧
縮/伸長システムが初期設定される。次に、ブロック522
で、圧縮済み入力データ・ストリームから符号化済み入
力列(INCODE)が読み取られ、その符号化済み文字が一時
変数/レジスタに記憶される。この入力データ・ストリー
ムは、図27、及び図28ないし30で上述したLZSD2圧縮技
法によって以前に符号化された入力文字列を表す。決定
ブロック524で、符号化済み文字列の終りを示すEOF条件
の検査が行われる。決定ブロック526で、入力文字INCOD
Eが制御コードであるか、又は符号化済み文字列である
かが判定される。
る。ブロック520で、LZSD2伸長に関して図4で示した圧
縮/伸長システムが初期設定される。次に、ブロック522
で、圧縮済み入力データ・ストリームから符号化済み入
力列(INCODE)が読み取られ、その符号化済み文字が一時
変数/レジスタに記憶される。この入力データ・ストリー
ムは、図27、及び図28ないし30で上述したLZSD2圧縮技
法によって以前に符号化された入力文字列を表す。決定
ブロック524で、符号化済み文字列の終りを示すEOF条件
の検査が行われる。決定ブロック526で、入力文字INCOD
Eが制御コードであるか、又は符号化済み文字列である
かが判定される。
【0196】入力コードINCODEが制御コード(即ち、デ
コンプレッサ用の制御命令を含む文字)である場合、ブ
ロック534で、コードが評価され、必要な応答が実行さ
れる。決定ブロック526で、INCODEが符号化済みデータ
(即ちLZSD2圧縮エンジンからの圧縮済みデータを識別す
る文字)であると判定された場合、ブロック528で、ルー
ト・コード(符号化済みデータからの単一復号化済み文
字)が復号化され、そのルート・コードが圧縮済みデータ
・インタフェイス148(図4)に位置するLIFOレジスタ(ス
タック)上にプッシュされる。次に、そのスタックが空
になるまでスタックから文字をポップさせることによっ
て、文字が伸長済みデータとして出力される。
コンプレッサ用の制御命令を含む文字)である場合、ブ
ロック534で、コードが評価され、必要な応答が実行さ
れる。決定ブロック526で、INCODEが符号化済みデータ
(即ちLZSD2圧縮エンジンからの圧縮済みデータを識別す
る文字)であると判定された場合、ブロック528で、ルー
ト・コード(符号化済みデータからの単一復号化済み文
字)が復号化され、そのルート・コードが圧縮済みデータ
・インタフェイス148(図4)に位置するLIFOレジスタ(ス
タック)上にプッシュされる。次に、そのスタックが空
になるまでスタックから文字をポップさせることによっ
て、文字が伸長済みデータとして出力される。
【0197】ブロック530で、入力文字(FIRST_CHAR)、
及び以前の入力コード(PREV_CODE)を組み合わせること
によって伸長辞書が更新される。次に、FREE/PD辞書
で、利用可能な記憶位置が探索され、列(PREVCODE,FIRS
T_CHAR)が、利用可能な次のFREE/PDアドレスに記憶さ
れ、現行辞書に割り当てられる。利用可能なFREE/PD辞
書位置がない場合、伸長辞書が切り替えられる(CD->FRE
E/PD、SD->CD)。次にブロック532で、次の符号化済み列
のための伸長技法が準備され、ブロック522に戻って別
の伸長サイクルが繰り返される。伸長では、圧縮済みデ
ータが、LZSD2コンプレッサで符号化される前の元の状
態に正確に復号化される。圧縮済みデータがロスレスで
あり、各符号化済み文字内に全ての圧縮情報を含むこと
に留意することが重要である。
及び以前の入力コード(PREV_CODE)を組み合わせること
によって伸長辞書が更新される。次に、FREE/PD辞書
で、利用可能な記憶位置が探索され、列(PREVCODE,FIRS
T_CHAR)が、利用可能な次のFREE/PDアドレスに記憶さ
れ、現行辞書に割り当てられる。利用可能なFREE/PD辞
書位置がない場合、伸長辞書が切り替えられる(CD->FRE
E/PD、SD->CD)。次にブロック532で、次の符号化済み列
のための伸長技法が準備され、ブロック522に戻って別
の伸長サイクルが繰り返される。伸長では、圧縮済みデ
ータが、LZSD2コンプレッサで符号化される前の元の状
態に正確に復号化される。圧縮済みデータがロスレスで
あり、各符号化済み文字内に全ての圧縮情報を含むこと
に留意することが重要である。
【0198】図32ないし34は、図31に示したLZSD2伸長
技法を更に説明する詳細フローチャートである。伸長の
開始時に、CAMは、コンプレッサが圧縮済みデータを作
成した時点において存在していたのと同じ初期状態を有
しなければならない。従って、図32のブロック534で、
各CAM項目は、最初にLZSD2コンプレッサでセットされた
のと同じ初期値でセットされる。例えば、各コード・フ
ィールド、文字フィールド、及び状況フィールドには通
常、それぞれ、16進(HEX)の値000、00、及びFREE/PDが
割り当てられる。デコンプレッサは、その初期設定され
たデータ項目を(NULL,NULL,FREE/PD)として解釈する。
上述のような初期設定の代替技法も可能であるが、圧縮
と伸長の両方の場合において同じでなければならない。
入力データ・ストリーム・アンフォーマッタ(即ち、図4
の圧縮済みデータ・インタフェイス148)は空の初期状態
にリセットされる。CODE_SIZEは最小値(9)にセットさ
れ、PREVDEPTHは、最初に伸長処理のループを通過する
ことを示す0にセットされる。
技法を更に説明する詳細フローチャートである。伸長の
開始時に、CAMは、コンプレッサが圧縮済みデータを作
成した時点において存在していたのと同じ初期状態を有
しなければならない。従って、図32のブロック534で、
各CAM項目は、最初にLZSD2コンプレッサでセットされた
のと同じ初期値でセットされる。例えば、各コード・フ
ィールド、文字フィールド、及び状況フィールドには通
常、それぞれ、16進(HEX)の値000、00、及びFREE/PDが
割り当てられる。デコンプレッサは、その初期設定され
たデータ項目を(NULL,NULL,FREE/PD)として解釈する。
上述のような初期設定の代替技法も可能であるが、圧縮
と伸長の両方の場合において同じでなければならない。
入力データ・ストリーム・アンフォーマッタ(即ち、図4
の圧縮済みデータ・インタフェイス148)は空の初期状態
にリセットされる。CODE_SIZEは最小値(9)にセットさ
れ、PREVDEPTHは、最初に伸長処理のループを通過する
ことを示す0にセットされる。
【0199】ブロック536で、圧縮済み入力データ・スト
リームから単一バイトが読み取られ、バイトがCODE_SIZ
Eビット・コード(即ち、9ビット・コード)にアンパック
される。CODE_SIZEビット・コードを満たすのに更にビッ
トが必要とされる場合、ブロック536で、CODE_SIZEビッ
トがアンパックされるまで、追加バイトが読み取られ
る。次に、アンパックされたビット・コードが変数/レジ
スタINCODEに割り当てられ、残りの全ビットは次のコー
ドで使用される。
リームから単一バイトが読み取られ、バイトがCODE_SIZ
Eビット・コード(即ち、9ビット・コード)にアンパック
される。CODE_SIZEビット・コードを満たすのに更にビッ
トが必要とされる場合、ブロック536で、CODE_SIZEビッ
トがアンパックされるまで、追加バイトが読み取られ
る。次に、アンパックされたビット・コードが変数/レジ
スタINCODEに割り当てられ、残りの全ビットは次のコー
ドで使用される。
【0200】ブロック536での入力コードの読み取り
が、ファイルの終り(EOF)に達したために失敗した場
合、決定ブロック538は伸長処理を終了させる。入力コ
ードの読み取りが成功した場合、決定ブロック540に伸
長処理が引き継がれる。INCODEが、予約されたコードで
ある場合、決定ブロック540は決定ブロック544、及び54
6にジャンプし、予約された特定のコードを識別し、適
切な動作が行われる。具体的には、決定ブロック544
で、INCODEがGROWコードかどうかの判定がなされる。GR
OWコードは、各圧縮済みコードをあと1ビットだけ読み
取ることを開始するようデコンプレッサに通知する。圧
縮処理で他の制御コードを使用した場合、その制御コー
ドもこの時点で評価される。
が、ファイルの終り(EOF)に達したために失敗した場
合、決定ブロック538は伸長処理を終了させる。入力コ
ードの読み取りが成功した場合、決定ブロック540に伸
長処理が引き継がれる。INCODEが、予約されたコードで
ある場合、決定ブロック540は決定ブロック544、及び54
6にジャンプし、予約された特定のコードを識別し、適
切な動作が行われる。具体的には、決定ブロック544
で、INCODEがGROWコードかどうかの判定がなされる。GR
OWコードは、各圧縮済みコードをあと1ビットだけ読み
取ることを開始するようデコンプレッサに通知する。圧
縮処理で他の制御コードを使用した場合、その制御コー
ドもこの時点で評価される。
【0201】CODE_SIZE>MAXCODE_SIZEは、現在のコード
・サイズが全ての辞書項目を表すのに十分なものであ
り、従ってエラーだけがこの制御コードを復号化させる
ことを示す。従って、GROWコードが出現した時に現在の
CODE_SIZEが既に最大値である場合、決定ブロック546は
ブロック550にジャンプし、エラー信号が生成される。C
ODE_SIZEが最大コード・サイズより小さい場合、ブロッ
ク548で、コード・サイズが1ビットだけ増やされる。そ
の場合、将来のコードは全て、以前より1ビット長くな
る。次に、ブロック548はブロック536にジャンプし、次
の入力コード(INCODE)が読み取られる。
・サイズが全ての辞書項目を表すのに十分なものであ
り、従ってエラーだけがこの制御コードを復号化させる
ことを示す。従って、GROWコードが出現した時に現在の
CODE_SIZEが既に最大値である場合、決定ブロック546は
ブロック550にジャンプし、エラー信号が生成される。C
ODE_SIZEが最大コード・サイズより小さい場合、ブロッ
ク548で、コード・サイズが1ビットだけ増やされる。そ
の場合、将来のコードは全て、以前より1ビット長くな
る。次に、ブロック548はブロック536にジャンプし、次
の入力コード(INCODE)が読み取られる。
【0202】再びブロック540を参照すると、INCODEが
制御コードでない場合、ブロック542(図33)で、デコン
プレッサがINCODEを復号化できるようにセットアップさ
れる。INCODEは少なくとも1つの文字列を表すので、DE
PTHはこの場合1にセットされる。INCODEは後で伸長技
法において必要とされるので、復号化の間は異なる変数
/レジスタTCODEが(一時的なINCODEとして)使用される。
従って、ブロック542で、TCODEはINCODEと等しい値にセ
ットされる。
制御コードでない場合、ブロック542(図33)で、デコン
プレッサがINCODEを復号化できるようにセットアップさ
れる。INCODEは少なくとも1つの文字列を表すので、DE
PTHはこの場合1にセットされる。INCODEは後で伸長技
法において必要とされるので、復号化の間は異なる変数
/レジスタTCODEが(一時的なINCODEとして)使用される。
従って、ブロック542で、TCODEはINCODEと等しい値にセ
ットされる。
【0203】決定ブロック552(図33)で、TCODEが単一文
字列を表す(例えば、256より小さい)か、又は複数文字
列を表す(例えば、256以上)かが検査される。複数文字
列の場合、ブロック554で、CAMアドレスにおける文字TC
ODEがスタックの1番上に置かれる。次に、CAMアドレス
TCODEにおける状況ビットをSDにセットすることによっ
て、TCODEが待機辞書に割り当てられる。DEPTHの値は1
だけインクリメントされ、スタック上の現在の文字数+1
に等しくなる。前記「+1」は、ブロック542でカウントさ
れた列の第1文字である。次に、CAMアドレスTCODEにお
けるコード・フィールドがTCODEに割り当てられる。TCOD
Eはこの場合、まだ復号化されていない残りの列を表し
ている。
字列を表す(例えば、256より小さい)か、又は複数文字
列を表す(例えば、256以上)かが検査される。複数文字
列の場合、ブロック554で、CAMアドレスにおける文字TC
ODEがスタックの1番上に置かれる。次に、CAMアドレス
TCODEにおける状況ビットをSDにセットすることによっ
て、TCODEが待機辞書に割り当てられる。DEPTHの値は1
だけインクリメントされ、スタック上の現在の文字数+1
に等しくなる。前記「+1」は、ブロック542でカウントさ
れた列の第1文字である。次に、CAMアドレスTCODEにお
けるコード・フィールドがTCODEに割り当てられる。TCOD
Eはこの場合、まだ復号化されていない残りの列を表し
ている。
【0204】DEPTHがMAXDEPTHより大きい場合、スタッ
クはオーバフローする。従って、決定ブロック556で、
コードワードで表される文字数が検査され、ブロック55
8で、エラー・フラグが生成され、DEPTHがMAXDEPTHより
大きい場合、伸長処理を終了させる。例えば、デコンプ
レッサに入力されるデータがLZSD2コンプレッサによっ
て作成されたものでない場合、エラーが発生することが
ある。DEPTHがMAXDEPTH以下である場合、決定ブロック5
56は決定ブロック552にジャンプする。伸長処理はブロ
ック554を通るループを続け、単一文字CHがTCODEから集
められ、アドレスTCODEにおけるコード・フィールドがTC
ODEに再割り当てされる。
クはオーバフローする。従って、決定ブロック556で、
コードワードで表される文字数が検査され、ブロック55
8で、エラー・フラグが生成され、DEPTHがMAXDEPTHより
大きい場合、伸長処理を終了させる。例えば、デコンプ
レッサに入力されるデータがLZSD2コンプレッサによっ
て作成されたものでない場合、エラーが発生することが
ある。DEPTHがMAXDEPTH以下である場合、決定ブロック5
56は決定ブロック552にジャンプする。伸長処理はブロ
ック554を通るループを続け、単一文字CHがTCODEから集
められ、アドレスTCODEにおけるコード・フィールドがTC
ODEに再割り当てされる。
【0205】TCODEが256より小さい場合、決定ブロック
552はブロック553にジャンプする。その場合、TCODEは
単一文字列(ルート・コード)を表す。必要条件ではない
が、全ての単一文字列は、その文字に対応するASCIIコ
ードと同じコードにマップされる。これによって、CAM
のルックアップを行わずに、TCODEを列INCODEの第1文
字として直接、スタックの1番上に置くことができる。
スタック内の第1文字は後で使用されるので、TCODEは
別の変数/レジスタFIRST_CHARに記憶される。FIRST_CHA
Rが使用される前にTCODEは変化しないので、単にTCODE
を使用することによって変数/レジスタFIRST_CHARを削
除することができる。しかし、FIRST_CHARは、図32ない
し34をより容易に理解させるために使用されている。
552はブロック553にジャンプする。その場合、TCODEは
単一文字列(ルート・コード)を表す。必要条件ではない
が、全ての単一文字列は、その文字に対応するASCIIコ
ードと同じコードにマップされる。これによって、CAM
のルックアップを行わずに、TCODEを列INCODEの第1文
字として直接、スタックの1番上に置くことができる。
スタック内の第1文字は後で使用されるので、TCODEは
別の変数/レジスタFIRST_CHARに記憶される。FIRST_CHA
Rが使用される前にTCODEは変化しないので、単にTCODE
を使用することによって変数/レジスタFIRST_CHARを削
除することができる。しかし、FIRST_CHARは、図32ない
し34をより容易に理解させるために使用されている。
【0206】この場合、DEPTHは、スタック上に置かれ
た最後の文字がブロック553ではカウントされなかった
が、ブロック542に戻るので、スタック上の文字数に等
しい。スタックを空にする間に、DEPTHは使用され変更
されるが、最初のDEPTHの値が後で使用され、従ってブ
ロック553で、そのDEPTHの値も(一時的なDEPTHとして)
変数/レジスタTDEPTHに割り当てられる。
た最後の文字がブロック553ではカウントされなかった
が、ブロック542に戻るので、スタック上の文字数に等
しい。スタックを空にする間に、DEPTHは使用され変更
されるが、最初のDEPTHの値が後で使用され、従ってブ
ロック553で、そのDEPTHの値も(一時的なDEPTHとして)
変数/レジスタTDEPTHに割り当てられる。
【0207】図34を参照すると、TDEPTHが0より大きい
場合、スタックは空ではなく、決定ブロック560はブロ
ック562にジャンプし、単一文字がスタックからポップ・
オフされて出力され、TDEPTHがデクリメントされる。文
字は、TDEPTH=0になるまで、スタックからポップ・オフ
され出力される。
場合、スタックは空ではなく、決定ブロック560はブロ
ック562にジャンプし、単一文字がスタックからポップ・
オフされて出力され、TDEPTHがデクリメントされる。文
字は、TDEPTH=0になるまで、スタックからポップ・オフ
され出力される。
【0208】スタックが空になると、デコンプレッサ
は、圧縮済み文字ストリームから新しい符号化済み文字
を読み取る準備ができる。しかし、次の符号化済み文字
が読み取られる前に、決定ブロック564でまず、PREVDEP
THの値が検査される。PREVDEPTHが0とMAXDEPTHの間に
ある場合、組み合わされた列PREVCODE(以前に読み取ら
れた符号化済み文字)、及びFIRST_CHARが、利用可能な
次のFREE/PD位置に記憶され、CDに割り当てられる(PREV
CODE,FIRST_CHAR,CD)。PREVDEPTH=0の場合、デコンプレ
ッサを通るのが初めてであり、従ってCAMに追加すべき
新しい列はない。PREVDEPTHがMAXDEPTH以上である場
合、新しい列(PREVCODE,FIRST_CODE)は長すぎてCAMに入
力できない。いずれの場合も、決定ブロック564はブロ
ック574にジャンプし、新しい文字列をCAMに追加するた
めの後述のステップをスキップする。
は、圧縮済み文字ストリームから新しい符号化済み文字
を読み取る準備ができる。しかし、次の符号化済み文字
が読み取られる前に、決定ブロック564でまず、PREVDEP
THの値が検査される。PREVDEPTHが0とMAXDEPTHの間に
ある場合、組み合わされた列PREVCODE(以前に読み取ら
れた符号化済み文字)、及びFIRST_CHARが、利用可能な
次のFREE/PD位置に記憶され、CDに割り当てられる(PREV
CODE,FIRST_CHAR,CD)。PREVDEPTH=0の場合、デコンプレ
ッサを通るのが初めてであり、従ってCAMに追加すべき
新しい列はない。PREVDEPTHがMAXDEPTH以上である場
合、新しい列(PREVCODE,FIRST_CODE)は長すぎてCAMに入
力できない。いずれの場合も、決定ブロック564はブロ
ック574にジャンプし、新しい文字列をCAMに追加するた
めの後述のステップをスキップする。
【0209】PREVDEPTHが0とMAXDEPTHの間にある場
合、ブロック566において、辞書状況フィールドでFREE/
PDの値を探査することによって、利用可能な次のCAM記
憶位置がCAMで探索される。コード・フィールド、又は文
字フィールドが何を含んでいるかにかかわらず、マッチ
は成功する可能性があるので、コード・フィールド、及
び文字フィールドは探索されない。複数のアドレスがFR
EE/PDの探索条件を満たす可能性があるので、複数のマ
ッチを1つに減らさなければならない。従って、ブロッ
ク566で、圧縮に使用された優先順位エンコーダを使用
して最小値を有するマッチ・アドレスが選択される。FRE
E/PD位置が見つかった場合、MATCHフラグがセットさ
れ、マッチ・アドレスがNEXTCODEに割り当てられる。
合、ブロック566において、辞書状況フィールドでFREE/
PDの値を探査することによって、利用可能な次のCAM記
憶位置がCAMで探索される。コード・フィールド、又は文
字フィールドが何を含んでいるかにかかわらず、マッチ
は成功する可能性があるので、コード・フィールド、及
び文字フィールドは探索されない。複数のアドレスがFR
EE/PDの探索条件を満たす可能性があるので、複数のマ
ッチを1つに減らさなければならない。従って、ブロッ
ク566で、圧縮に使用された優先順位エンコーダを使用
して最小値を有するマッチ・アドレスが選択される。FRE
E/PD位置が見つかった場合、MATCHフラグがセットさ
れ、マッチ・アドレスがNEXTCODEに割り当てられる。
【0210】FREE/PD位置の探索が成功した(即ち、MATC
Hフラグがセットされた)場合、ブロック572で、CAMのマ
ッチした位置(NEXTCODE)に列(PREVCODE,FIRST_CHAR)が
追加され、この列が現行辞書(CD)に割り当てられる。FR
EE/PD位置の探索が失敗した場合、ブロック568で、辞書
が切り替えられる、即ち、(SD->CD、CD->FREE/PD、FREE
/PD->INV)。FREE/PD位置が見つからないということは、
(PREVCODE,FIRST_CHAR)で表される列がCAMに入力されな
いことを意味する。
Hフラグがセットされた)場合、ブロック572で、CAMのマ
ッチした位置(NEXTCODE)に列(PREVCODE,FIRST_CHAR)が
追加され、この列が現行辞書(CD)に割り当てられる。FR
EE/PD位置の探索が失敗した場合、ブロック568で、辞書
が切り替えられる、即ち、(SD->CD、CD->FREE/PD、FREE
/PD->INV)。FREE/PD位置が見つからないということは、
(PREVCODE,FIRST_CHAR)で表される列がCAMに入力されな
いことを意味する。
【0211】これによって、前の入力列PREVCODEが文字
FIRST_CHARによって拡張される。列(PREVCODE,FIRST_CH
AR)は、同じ列(PREVCODE,FIRST_CHAR)が圧縮済みデータ
・ストリームで再び出現するまで、CDに存在し続ける。
その後、(PREVCODE,FIRST_CHAR)データ項目は、次の辞
書切り替えが実行された時に、SDに移されるか、又はFR
EE/PDに移される。
FIRST_CHARによって拡張される。列(PREVCODE,FIRST_CH
AR)は、同じ列(PREVCODE,FIRST_CHAR)が圧縮済みデータ
・ストリームで再び出現するまで、CDに存在し続ける。
その後、(PREVCODE,FIRST_CHAR)データ項目は、次の辞
書切り替えが実行された時に、SDに移されるか、又はFR
EE/PDに移される。
【0212】ブロック574で、PREVCODEはINCODEの値と
等しい値にセットされる。PREVCODEを伸長の次のパスで
使用して、次の入力コードの第1文字を拡張文字として
使用することによって、辞書内に置くための新しい文字
列(PREVCODE,FIRST_CHAR)を作成することができる。PRE
VDEPTHは、PREVCODEの列の長さの記録を保持するため
に、DEPTHの値と等しい値にセットされ、最大の長さよ
り長い列がCAMに追加されるのを防ぐ。次に、この処理
はブロック536(図32)に戻る。
等しい値にセットされる。PREVCODEを伸長の次のパスで
使用して、次の入力コードの第1文字を拡張文字として
使用することによって、辞書内に置くための新しい文字
列(PREVCODE,FIRST_CHAR)を作成することができる。PRE
VDEPTHは、PREVCODEの列の長さの記録を保持するため
に、DEPTHの値と等しい値にセットされ、最大の長さよ
り長い列がCAMに追加されるのを防ぐ。次に、この処理
はブロック536(図32)に戻る。
【0213】従って、LZSD2が、辞書切り替えの後の辞
書内のデータ項目全てを維持することによって、ロスレ
スの圧縮/伸長システムの全体圧縮率をいかに向上させ
るかが示されている。即ち、全てのデータ項目が、現在
のデータ圧縮性能を維持しながら、新しい入力文字列に
マッチさせる機能を保持している。従って、辞書切り替
えの直後に圧縮性能が低下することはない。LZSD2は
又、辞書に割り当てられた優先順位の最も低いデータ項
目を選択的に上書きすることによって、新しい入力デー
タに適応する機能も有する。従って、圧縮性能は、入力
データ・ストリームの現在の性向で最適化される。
書内のデータ項目全てを維持することによって、ロスレ
スの圧縮/伸長システムの全体圧縮率をいかに向上させ
るかが示されている。即ち、全てのデータ項目が、現在
のデータ圧縮性能を維持しながら、新しい入力文字列に
マッチさせる機能を保持している。従って、辞書切り替
えの直後に圧縮性能が低下することはない。LZSD2は
又、辞書に割り当てられた優先順位の最も低いデータ項
目を選択的に上書きすることによって、新しい入力デー
タに適応する機能も有する。従って、圧縮性能は、入力
データ・ストリームの現在の性向で最適化される。
【0214】好適実施例において本発明の原理を説明し
図示してきたが、そのような原理から逸脱することなく
本発明の構成、及び細部を修正可能なことが明らかであ
ろう。特許請求の範囲に記載された意図、及び範囲に含
まれる全ての修正、及び変形について請求を行う。
図示してきたが、そのような原理から逸脱することなく
本発明の構成、及び細部を修正可能なことが明らかであ
ろう。特許請求の範囲に記載された意図、及び範囲に含
まれる全ての修正、及び変形について請求を行う。
【0215】以下に本発明の実施態様を列挙する。
【0216】1. メモリ・ベースの辞書を使用して、
文字列から成るデータを圧縮、及び伸長するための方法
において、複数の記憶位置を含むメモリ装置を提供する
方法であって、各記憶位置が文字列に関するコードワー
ドをデータ項目として記憶するための固有のアドレスを
有する上記方法と、メモリ装置の複数の記憶位置内に少
なくとも第1、及び第2の辞書を定義する方法と、文字
列に固有に対応するコードワードを各データ項目として
記憶する方法と、第1、及び第2の辞書の少なくとも1
つに、記憶された各データ項目を割り当てる方法と、入
力データ文字列を表すコードワード値を生成する方法で
あって、前記コードワードが、入力文字列の一部に対応
し、前記辞書の1つに割り当てられ、以前に記憶された
メモリ内のコードワードに関連付けられた前記方法と、
現在辞書の1つに割り当てられているデータ項目の1つ
を、新しい文字列に関連する新しいコードワードで選択
的に上書きし、それによって、データ圧縮、及び伸長処
理の間で、常に文字列に関するコードワードを生成する
ために、第1、及び第2の辞書内のデータ項目全て使用
する方法を含むことを特徴とする方法。
文字列から成るデータを圧縮、及び伸長するための方法
において、複数の記憶位置を含むメモリ装置を提供する
方法であって、各記憶位置が文字列に関するコードワー
ドをデータ項目として記憶するための固有のアドレスを
有する上記方法と、メモリ装置の複数の記憶位置内に少
なくとも第1、及び第2の辞書を定義する方法と、文字
列に固有に対応するコードワードを各データ項目として
記憶する方法と、第1、及び第2の辞書の少なくとも1
つに、記憶された各データ項目を割り当てる方法と、入
力データ文字列を表すコードワード値を生成する方法で
あって、前記コードワードが、入力文字列の一部に対応
し、前記辞書の1つに割り当てられ、以前に記憶された
メモリ内のコードワードに関連付けられた前記方法と、
現在辞書の1つに割り当てられているデータ項目の1つ
を、新しい文字列に関連する新しいコードワードで選択
的に上書きし、それによって、データ圧縮、及び伸長処
理の間で、常に文字列に関するコードワードを生成する
ために、第1、及び第2の辞書内のデータ項目全て使用
する方法を含むことを特徴とする方法。
【0217】2. 前記辞書の少なくとも1つに上書き
の優先順位が割り当てられ、データ項目が、前記1つの
辞書に割り当てられたデータ項目の前記上書き優先順位
に応じて選択的に上書きされることを特徴とする項番1
に記載の方法。
の優先順位が割り当てられ、データ項目が、前記1つの
辞書に割り当てられたデータ項目の前記上書き優先順位
に応じて選択的に上書きされることを特徴とする項番1
に記載の方法。
【0218】3. 前記メモリ装置が複数の状態を有
し、前記辞書の各データ項目に対する割り当てが、前記
メモリ装置の現在の状態に応じて決定されることを特徴
とする項番1に記載の方法。
し、前記辞書の各データ項目に対する割り当てが、前記
メモリ装置の現在の状態に応じて決定されることを特徴
とする項番1に記載の方法。
【0219】4. 各辞書に上書き優先順位が割り当て
られ、前記メモリ装置の状態の変化によって、前記辞書
に割り当てられたデータ項目を新しい文字列で上書きで
きるように、前記辞書の少なくとも1つの上書き優先順
位が変更されることを特徴とする項番3に記載の方法。
られ、前記メモリ装置の状態の変化によって、前記辞書
に割り当てられたデータ項目を新しい文字列で上書きで
きるように、前記辞書の少なくとも1つの上書き優先順
位が変更されることを特徴とする項番3に記載の方法。
【0220】5. 文字列に関するコードワードをメモ
リ装置内に記憶する方法が、文字列に関する新しいコー
ドワードで上書きできる前記第1の辞書内の記憶位置を
見つけるステップと、前記第1の辞書の利用可能な記憶
位置に新しいコードワードを新しいデータ項目として記
憶するステップと、前記の新しいデータ項目を前記第2
の辞書に再割り当てするステップと、前記第1の辞書内
の利用可能な記憶位置が全て上書きされた後に、前記第
2の辞書内のデータ項目を全て前記第1の辞書に再割り
当てするステップを含むことを特徴とする項番1に記載
の方法。
リ装置内に記憶する方法が、文字列に関する新しいコー
ドワードで上書きできる前記第1の辞書内の記憶位置を
見つけるステップと、前記第1の辞書の利用可能な記憶
位置に新しいコードワードを新しいデータ項目として記
憶するステップと、前記の新しいデータ項目を前記第2
の辞書に再割り当てするステップと、前記第1の辞書内
の利用可能な記憶位置が全て上書きされた後に、前記第
2の辞書内のデータ項目を全て前記第1の辞書に再割り
当てするステップを含むことを特徴とする項番1に記載
の方法。
【0221】6. 複数の記憶位置を有する連想記憶メ
モリを提供する方法と、連想記憶メモリの複数の記憶位
置内に第1、第2、及び第3の辞書を定義する方法と、
それぞれがデータ文字列に対応する、固有のコードワー
ドを前記記憶位置にデータ項目として記憶する方法と、
前記第1、第2、及び第3の辞書の少なくとも1つに各
データ項目を割り当てる方法と、データ文字列を表すコ
ードワード値を生成する方法であって、前記コードワー
ド値が、文字列に対応し、前記辞書の1つに割り当てら
れ、以前に記憶されたコードワードにメモリ内で関連付
けられている前記方法と、現在、どの前記辞書にもデー
タ項目として記憶されていない、新しいコードワードと
選択的に置換できるように、前記辞書の1つにおいて各
データ項目を優先順位付けする方法と、現在、前記1つ
の辞書に割り当てられている、優先順位付けされたデー
タ項目を、現在前記メモリ装置に記憶されていない新し
い文字列に対応する新しいコードワードで選択的に上書
きし、同時に、各辞書のデータ項目を全て使用して、圧
縮、及び伸長処理の間で、常にコードワード値を生成す
る方法を含むことを特徴とする項番5に記載の方法。
モリを提供する方法と、連想記憶メモリの複数の記憶位
置内に第1、第2、及び第3の辞書を定義する方法と、
それぞれがデータ文字列に対応する、固有のコードワー
ドを前記記憶位置にデータ項目として記憶する方法と、
前記第1、第2、及び第3の辞書の少なくとも1つに各
データ項目を割り当てる方法と、データ文字列を表すコ
ードワード値を生成する方法であって、前記コードワー
ド値が、文字列に対応し、前記辞書の1つに割り当てら
れ、以前に記憶されたコードワードにメモリ内で関連付
けられている前記方法と、現在、どの前記辞書にもデー
タ項目として記憶されていない、新しいコードワードと
選択的に置換できるように、前記辞書の1つにおいて各
データ項目を優先順位付けする方法と、現在、前記1つ
の辞書に割り当てられている、優先順位付けされたデー
タ項目を、現在前記メモリ装置に記憶されていない新し
い文字列に対応する新しいコードワードで選択的に上書
きし、同時に、各辞書のデータ項目を全て使用して、圧
縮、及び伸長処理の間で、常にコードワード値を生成す
る方法を含むことを特徴とする項番5に記載の方法。
【0222】7. 連想記憶メモリが複数の状態を有
し、各データ項目に対する辞書割り当てが、連想記憶メ
モリの状態に依存することを特徴とする項番6に記載の
方法。
し、各データ項目に対する辞書割り当てが、連想記憶メ
モリの状態に依存することを特徴とする項番6に記載の
方法。
【0223】8. 以前にコードワード値を生成するた
めに前記データ項目が使用された回数に従って、より高
い優先順位が、そのデータ項目が新しい文字列と置換さ
れる可能性のより小さいことを示す辞書に、各データ項
目が移されることを特徴とする項番6に記載の方法。
めに前記データ項目が使用された回数に従って、より高
い優先順位が、そのデータ項目が新しい文字列と置換さ
れる可能性のより小さいことを示す辞書に、各データ項
目が移されることを特徴とする項番6に記載の方法。
【0224】9. データ項目が、単一辞書からの選択
的置換に対してのみ使用可能であることを特徴とする項
番6に記載の方法。
的置換に対してのみ使用可能であることを特徴とする項
番6に記載の方法。
【0225】
【発明の効果】本発明によって、辞書ベースの圧縮/伸
長システムで、辞書リセット時の悪影響を最小にし、統
計的特性が変化する入力データの圧縮に関し、最小量の
メモリでデータ圧縮能力を最大にすることが可能とな
る。
長システムで、辞書リセット時の悪影響を最小にし、統
計的特性が変化する入力データの圧縮に関し、最小量の
メモリでデータ圧縮能力を最大にすることが可能とな
る。
【図1】本発明による現行、及び待機辞書を用いたデー
タ圧縮システムのデータ・フロー図である。
タ圧縮システムのデータ・フロー図である。
【図2】図1の待機辞書データ選択処理の一例を示す詳
細データ・フロー図である。
細データ・フロー図である。
【図3】本発明による現行、及び待機辞書を実施するデ
ータ圧縮回路の一例のブロック図である。
ータ圧縮回路の一例のブロック図である。
【図4】本発明を実施するデータ圧縮/伸長システムを
示す高レベル・ブロック図である。
示す高レベル・ブロック図である。
【図5】図4のメモリ、及び制御論理機構の詳細ブロッ
ク図である。
ク図である。
【図6】図5のアドレス・デコーダ内のの自動更新回路
の論理図である。
の論理図である。
【図7】本発明による連想記憶メモリ(CAM)を使用する
データ圧縮/伸長方法の概略データ・フロー図である。
データ圧縮/伸長方法の概略データ・フロー図である。
【図8】図7のデータ圧縮手順の詳細データ・フロー図
である。
である。
【図9】図7のデータ伸長手順の詳細データ・フロー図
である。
である。
【図10】図8、及び図9の圧縮、及び伸長手順を視覚
的に表した図である。
的に表した図である。
【図11】本発明による複数辞書を用いた圧縮/伸長シ
ステムで使用できるように設計されたCAMを示すブロッ
ク図である。
ステムで使用できるように設計されたCAMを示すブロッ
ク図である。
【図12】図11に示したCAM内の各辞書の項目内の異な
るフィールドを示す図である。
るフィールドを示す図である。
【図13】図11の状況フィールド内の各圧縮/伸長状態
ごとの辞書値を示す図である。
ごとの辞書値を示す図である。
【図14】CAM内の複数辞書を用いた圧縮/伸長システム
に関する状態遷移の変化を示す図である。
に関する状態遷移の変化を示す図である。
【図15】コンプレッサ/デコンプレッサ状態を変更す
るための簡単なハードウェア実施態様を示す論理図であ
る。
るための簡単なハードウェア実施態様を示す論理図であ
る。
【図16】図11に示したCAM内の複数辞書を用いた圧縮/
伸長システムに関する主構成要素の詳細回路図である。
伸長システムに関する主構成要素の詳細回路図である。
【図17】状況パターン・ジェネレータの詳細回路図で
ある。
ある。
【図18】待機辞書によってCAMを使用するデータ圧縮
の一般的方法を示すデータ・フロー図である。
の一般的方法を示すデータ・フロー図である。
【図19】待機辞書によってCAMを使用するデータ伸長
の一般的方法を示すデータ・フロー図である。
の一般的方法を示すデータ・フロー図である。
【図20】図18、及び図19の圧縮、及び伸長方法を視覚
的に表した図である。
的に表した図である。
【図21】CAM内の複数辞書を用いたシステムの圧縮結
果と標準LZW圧縮技法の圧縮結果を示すグラフである。
果と標準LZW圧縮技法の圧縮結果を示すグラフである。
【図22】第2のLempel-Ziv待機辞書(LZSD2)圧縮方法
を視覚的に表した図である。
を視覚的に表した図である。
【図23】第2のLempel-Ziv待機辞書(LZSD2)圧縮方法
を視覚的に表した図である。
を視覚的に表した図である。
【図24】第2のLempel-Ziv待機辞書(LZSD2)圧縮方法
を視覚的に表した図である。
を視覚的に表した図である。
【図25】第2のLempel-Ziv待機辞書(LZSD2)圧縮方法
を視覚的に表した図である。
を視覚的に表した図である。
【図26】第2のLempel-Ziv待機辞書(LZSD2)圧縮方法
を視覚的に表した図である。
を視覚的に表した図である。
【図27】LZSD2圧縮を実行する一般的方法を示すデー
タ・フロー図である。
タ・フロー図である。
【図28】図27に示した手順の詳細データ・フロー図で
ある。
ある。
【図29】図27に示した手順の詳細データ・フロー図で
ある。
ある。
【図30】図27に示した手順の詳細データ・フロー図で
ある。
ある。
【図31】LZSD2伸長方法の一般的方法を示すデータ・フ
ロー図である。
ロー図である。
【図32】図31に示した手順の詳細データ・フロー図で
ある。
ある。
【図33】図31に示した手順の詳細データ・フロー図で
ある。
ある。
【図34】図31に示した手順の詳細データ・フロー図で
ある。
ある。
50、136 データ・コンプレッサ/デコンプレッサ集積回路
(IC) 52、142 データ圧縮/伸長エンジン 54 データ・コンプレッサ・インタフェイス回路 56、58 マルチプレクサ 60 読み取り/書き込み信号 64 アドレス信号 68 アドレス・ジェネレータ回路 70 データ列マッチ信号 72 辞書リセット要求信号 76 切り替え制御装置分岐回路 84、86 トランシーバ 88、90 ランダム・アクセス・メモリ(RAM) 92、96 待機状況フィールド 94、98 データ項目フィールド 144 列テーブル・メモリ 146 制御論理機構
(IC) 52、142 データ圧縮/伸長エンジン 54 データ・コンプレッサ・インタフェイス回路 56、58 マルチプレクサ 60 読み取り/書き込み信号 64 アドレス信号 68 アドレス・ジェネレータ回路 70 データ列マッチ信号 72 辞書リセット要求信号 76 切り替え制御装置分岐回路 84、86 トランシーバ 88、90 ランダム・アクセス・メモリ(RAM) 92、96 待機状況フィールド 94、98 データ項目フィールド 144 列テーブル・メモリ 146 制御論理機構
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ガディエル・セローシ アメリカ合衆国カリフォルニア州95014ク パーティノ,ミルキー・ウエイ・1123
Claims (1)
- 【請求項1】メモリ・ベースの辞書を使用して、文字列
から成るデータを圧縮、及び伸長するための方法におい
て、 複数の記憶位置を含むメモリ装置を提供する方法であっ
て、各記憶位置が文字列に関するコードワードをデータ
項目として記憶するための固有のアドレスを有する上記
方法と、 メモリ装置の複数の記憶位置内に少なくとも第1、及び
第2の辞書を定義する方法と、 文字列に固有に対応するコードワードを各データ項目と
して記憶する方法と、第1、及び第2の辞書の少なくと
も1つに、記憶された各データ項目を割り当てる方法
と、 入力データ文字列を表すコードワード値を生成する方法
であって、前記コードワードが、入力文字列の一部に対
応し、前記辞書の1つに割り当てられ、以前に記憶され
たメモリ内のコードワードに関連付けられた前記方法
と、 現在辞書の1つに割り当てられているデータ項目の1つ
を、新しい文字列に関連する新しいコードワードで選択
的に上書きし、それによって、データ圧縮、及び伸長処
理の間で、常に文字列に関するコードワードを生成する
ために、第1、及び第2の辞書内のデータ項目全て使用
する方法を含むことを特徴とする方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/192,878 US5455576A (en) | 1992-12-23 | 1994-02-07 | Apparatus and methods for Lempel Ziv data compression with improved management of multiple dictionaries in content addressable memory |
US192878 | 1994-02-07 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH07273667A true JPH07273667A (ja) | 1995-10-20 |
JP3309028B2 JP3309028B2 (ja) | 2002-07-29 |
Family
ID=22711395
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP01334795A Expired - Fee Related JP3309028B2 (ja) | 1994-02-07 | 1995-01-31 | 連想記憶メモリ内の複数辞書管理を改良したlempel−zivデータ圧縮のための装置、及び方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US5455576A (ja) |
EP (1) | EP0666651B1 (ja) |
JP (1) | JP3309028B2 (ja) |
DE (1) | DE69518022T2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6927706B2 (en) | 2003-02-24 | 2005-08-09 | Oki Electric Industrial, Co., Ltd | Data compressing apparatus and data decoding apparatus |
Families Citing this family (120)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5252860A (en) * | 1989-12-11 | 1993-10-12 | Westinghouse Electric Corp. | Gas turbine control system having maximum instantaneous load-pickup limiter |
US5530645A (en) * | 1993-06-30 | 1996-06-25 | Apple Computer, Inc. | Composite dictionary compression system |
US5627533A (en) * | 1994-08-05 | 1997-05-06 | Hayes Microcomputer Products, Inc. | Adjusting encoding table size and memory allocation for data compression in response to input data |
US5758257A (en) | 1994-11-29 | 1998-05-26 | Herz; Frederick | System and method for scheduling broadcast of and access to video programs and other data using customer profiles |
US6460036B1 (en) | 1994-11-29 | 2002-10-01 | Pinpoint Incorporated | System and method for providing customized electronic newspapers and target advertisements |
US5680601A (en) * | 1994-12-14 | 1997-10-21 | Hewlett-Packard Company | Compression system for reducing the occurrence of a literal prefix |
FR2728750A1 (fr) * | 1994-12-21 | 1996-06-28 | Trt Telecom Radio Electr | Systeme de transmission de signaux vocaux sous forme numerique et dispositif de codage-decodage pour un tel systeme |
JPH08180067A (ja) * | 1994-12-26 | 1996-07-12 | Nec Corp | データベースレコード圧縮システム |
US5642112A (en) * | 1994-12-29 | 1997-06-24 | Unisys Corporation | Method and apparatus for performing LZW data compression utilizing an associative memory |
US5974179A (en) * | 1995-02-13 | 1999-10-26 | Integrated Device Technology, Inc. | Binary image data compression and decompression |
US6016535A (en) * | 1995-10-11 | 2000-01-18 | Citrix Systems, Inc. | Method for dynamically and efficiently caching objects by subdividing cache memory blocks into equally-sized sub-blocks |
US6081623A (en) * | 1995-10-11 | 2000-06-27 | Citrix Systems, Inc. | Method for lossless bandwidth compression of a series of glyphs |
US5838963A (en) * | 1995-10-25 | 1998-11-17 | Microsoft Corporation | Apparatus and method for compressing a data file based on a dictionary file which matches segment lengths |
US5710909A (en) * | 1996-01-23 | 1998-01-20 | International Business Machines Corporation | Data compression utilization method and apparatus for computer main store |
GB2310055A (en) * | 1996-02-08 | 1997-08-13 | Ibm | Compression of structured data |
US6057857A (en) | 1996-06-12 | 2000-05-02 | Citrix Systems, Inc. | Method for the lossless compression of lines in a distributed computer system |
US5654703A (en) * | 1996-06-17 | 1997-08-05 | Hewlett-Packard Company | Parallel data compression and decompression |
US6069573A (en) * | 1996-06-17 | 2000-05-30 | Hewlett-Packard Company | Match and match address signal prioritization in a content addressable memory encoder |
US5828324A (en) * | 1996-06-17 | 1998-10-27 | Hewlett-Packard Company | Match and match address signal generation in a content addressable memory encoder |
US5951623A (en) * | 1996-08-06 | 1999-09-14 | Reynar; Jeffrey C. | Lempel- Ziv data compression technique utilizing a dictionary pre-filled with frequent letter combinations, words and/or phrases |
JP3038649B2 (ja) * | 1997-04-16 | 2000-05-08 | 日本電気株式会社 | 連想検索装置および方法 |
US6026508A (en) * | 1997-04-22 | 2000-02-15 | International Business Machines Corporation | Storage sub-system compression and dataflow chip offering excellent data integrity |
US5852742A (en) * | 1997-06-17 | 1998-12-22 | Hewlett-Packard Company | Configurable data processing pipeline |
US6148364A (en) * | 1997-12-30 | 2000-11-14 | Netlogic Microsystems, Inc. | Method and apparatus for cascading content addressable memory devices |
US6199140B1 (en) * | 1997-10-30 | 2001-03-06 | Netlogic Microsystems, Inc. | Multiport content addressable memory device and timing signals |
US6008743A (en) * | 1997-11-19 | 1999-12-28 | International Business Machines Corporation | Method and apparatus for switching between data compression modes |
KR100448289B1 (ko) * | 1997-12-20 | 2004-11-16 | 주식회사 대우일렉트로닉스 | 스트링매칭모듈을갖는데이터압축시스템 |
US6002814A (en) * | 1998-04-14 | 1999-12-14 | Hewlett-Packard Company | Means and method for configuring a data processing pipeline |
US6088699A (en) * | 1998-04-22 | 2000-07-11 | International Business Machines Corporation | System for exchanging compressed data according to predetermined dictionary codes |
US6219748B1 (en) | 1998-05-11 | 2001-04-17 | Netlogic Microsystems, Inc. | Method and apparatus for implementing a learn instruction in a content addressable memory device |
US6240485B1 (en) | 1998-05-11 | 2001-05-29 | Netlogic Microsystems, Inc. | Method and apparatus for implementing a learn instruction in a depth cascaded content addressable memory system |
US6401133B1 (en) * | 1998-06-24 | 2002-06-04 | Unisys Corporation | System for high speed continuous file transfer processing of data files |
US6381673B1 (en) | 1998-07-06 | 2002-04-30 | Netlogic Microsystems, Inc. | Method and apparatus for performing a read next highest priority match instruction in a content addressable memory device |
US6624761B2 (en) | 1998-12-11 | 2003-09-23 | Realtime Data, Llc | Content independent data compression method and system |
US6289130B1 (en) * | 1999-02-02 | 2001-09-11 | 3Com Corporation | Method for real-time lossless data compression of computer data |
US6460112B1 (en) | 1999-02-23 | 2002-10-01 | Netlogic Microsystems, Llc | Method and apparatus for determining a longest prefix match in a content addressable memory device |
US6539455B1 (en) | 1999-02-23 | 2003-03-25 | Netlogic Microsystems, Inc. | Method and apparatus for determining an exact match in a ternary content addressable memory device |
US6892272B1 (en) | 1999-02-23 | 2005-05-10 | Netlogic Microsystems, Inc. | Method and apparatus for determining a longest prefix match in a content addressable memory device |
US6574702B2 (en) | 1999-02-23 | 2003-06-03 | Netlogic Microsystems, Inc. | Method and apparatus for determining an exact match in a content addressable memory device |
US6499081B1 (en) | 1999-02-23 | 2002-12-24 | Netlogic Microsystems, Inc. | Method and apparatus for determining a longest prefix match in a segmented content addressable memory device |
US6604158B1 (en) | 1999-03-11 | 2003-08-05 | Realtime Data, Llc | System and methods for accelerated data storage and retrieval |
US6601104B1 (en) | 1999-03-11 | 2003-07-29 | Realtime Data Llc | System and methods for accelerated data storage and retrieval |
US6137707A (en) * | 1999-03-26 | 2000-10-24 | Netlogic Microsystems | Method and apparatus for simultaneously performing a plurality of compare operations in content addressable memory device |
US6320523B1 (en) * | 1999-07-30 | 2001-11-20 | Unisys Corporation | Method and apparatus for reducing the time required for compressing data |
US6404362B1 (en) * | 1999-09-21 | 2002-06-11 | Unisys Corporation | Method and apparatus for reducing the time required for decompressing compressed data |
US6567340B1 (en) | 1999-09-23 | 2003-05-20 | Netlogic Microsystems, Inc. | Memory storage cell based array of counters |
US7272027B2 (en) | 1999-09-23 | 2007-09-18 | Netlogic Microsystems, Inc. | Priority circuit for content addressable memory |
US6944709B2 (en) | 1999-09-23 | 2005-09-13 | Netlogic Microsystems, Inc. | Content addressable memory with block-programmable mask write mode, word width and priority |
US7110407B1 (en) | 1999-09-23 | 2006-09-19 | Netlogic Microsystems, Inc. | Method and apparatus for performing priority encoding in a segmented classification system using enable signals |
US6934795B2 (en) | 1999-09-23 | 2005-08-23 | Netlogic Microsystems, Inc. | Content addressable memory with programmable word width and programmable priority |
US7487200B1 (en) | 1999-09-23 | 2009-02-03 | Netlogic Microsystems, Inc. | Method and apparatus for performing priority encoding in a segmented classification system |
US7143231B1 (en) | 1999-09-23 | 2006-11-28 | Netlogic Microsystems, Inc. | Method and apparatus for performing packet classification for policy-based packet routing |
US7630986B1 (en) | 1999-10-27 | 2009-12-08 | Pinpoint, Incorporated | Secure data interchange |
US6262675B1 (en) * | 1999-12-21 | 2001-07-17 | International Business Machines Corporation | Method of compressing data with an alphabet |
US6748457B2 (en) | 2000-02-03 | 2004-06-08 | Realtime Data, Llc | Data storewidth accelerator |
US7490166B2 (en) | 2000-05-26 | 2009-02-10 | Citrix Systems, Inc. | Remote control of a client's off-screen surface |
US6348881B1 (en) | 2000-08-29 | 2002-02-19 | Philips Electronics No. America Corp. | Efficient hardware implementation of a compression algorithm |
US9143546B2 (en) | 2000-10-03 | 2015-09-22 | Realtime Data Llc | System and method for data feed acceleration and encryption |
US8692695B2 (en) | 2000-10-03 | 2014-04-08 | Realtime Data, Llc | Methods for encoding and decoding data |
US7417568B2 (en) | 2000-10-03 | 2008-08-26 | Realtime Data Llc | System and method for data feed acceleration and encryption |
US6359548B1 (en) * | 2000-10-16 | 2002-03-19 | Unisys Corporation | Data compression and decompression method and apparatus with embedded filtering of infrequently encountered strings |
US6985965B2 (en) | 2000-11-16 | 2006-01-10 | Telefonaktiebolaget Lm Ericsson (Publ) | Static information knowledge used with binary compression methods |
TW543311B (en) * | 2000-11-16 | 2003-07-21 | Ericsson Telefon Ab L M | Static information knowledge used with binary compression methods |
US7386046B2 (en) | 2001-02-13 | 2008-06-10 | Realtime Data Llc | Bandwidth sensitive data compression and decompression |
US6606040B2 (en) * | 2001-02-13 | 2003-08-12 | Mosaid Technologies, Inc. | Method and apparatus for adaptive data compression |
US6392568B1 (en) * | 2001-03-07 | 2002-05-21 | Unisys Corporation | Data compression and decompression method and apparatus with embedded filtering of dynamically variable infrequently encountered strings |
US6426711B1 (en) * | 2001-05-14 | 2002-07-30 | Unisys Corporation | Character table implemented data compression method and apparatus |
US6657563B2 (en) * | 2001-05-23 | 2003-12-02 | Sony Corporation | Method and system for encoder signal processing with reduced routing |
JP2002353963A (ja) * | 2001-05-28 | 2002-12-06 | Nec Corp | メッセージ配送システム、方法、およびプログラム |
JP3913004B2 (ja) * | 2001-05-28 | 2007-05-09 | キヤノン株式会社 | データ圧縮方法及び装置及びコンピュータプログラム及び記憶媒体 |
US6400286B1 (en) * | 2001-06-20 | 2002-06-04 | Unisys Corporation | Data compression method and apparatus implemented with limited length character tables |
US7064688B2 (en) * | 2001-07-09 | 2006-06-20 | Good Technology, Inc. | System and method for compressing data on a bandwidth-limited network |
US20030009595A1 (en) * | 2001-07-09 | 2003-01-09 | Roger Collins | System and method for compressing data using field-based code word generation |
US6707400B2 (en) * | 2001-08-02 | 2004-03-16 | Telefonaktiebolaget Lm Ericsson (Publ) | Method and apparatus for fast longest match search |
US7155483B1 (en) | 2001-08-07 | 2006-12-26 | Good Technology, Inc. | Apparatus and method for conserving bandwidth by batch processing data transactions |
US7743119B2 (en) | 2001-08-07 | 2010-06-22 | Motorola, Inc. | System and method for mapping identification codes |
US7243163B1 (en) | 2001-08-07 | 2007-07-10 | Good Technology, Inc. | System and method for full wireless synchronization of a data processing apparatus with a messaging system |
US7962622B2 (en) | 2001-08-07 | 2011-06-14 | Motorola Mobility, Inc. | System and method for providing provisioning and upgrade services for a wireless device |
US6961011B2 (en) * | 2001-08-27 | 2005-11-01 | Freescale Semiconductor, Inc. | Data compression system |
US8639849B2 (en) * | 2001-12-17 | 2014-01-28 | Sutech Data Solutions Co., Llc | Integrated circuits for high speed adaptive compression and methods therefor |
US7020160B1 (en) | 2001-12-17 | 2006-03-28 | Supergate Technology Usa, Inc. | Interface circuits for modularized data optimization engines and methods therefor |
US6892292B2 (en) * | 2002-01-09 | 2005-05-10 | Nec Corporation | Apparatus for one-cycle decompression of compressed data and methods of operation thereof |
US6876559B1 (en) * | 2002-02-01 | 2005-04-05 | Netlogic Microsystems, Inc. | Block-writable content addressable memory device |
US7376695B2 (en) | 2002-03-14 | 2008-05-20 | Citrix Systems, Inc. | Method and system for generating a graphical display for a remote terminal session |
US8671213B2 (en) | 2002-03-14 | 2014-03-11 | Citrix Systems, Inc. | Methods and apparatus for generating graphical and media displays at a client |
US6624762B1 (en) * | 2002-04-11 | 2003-09-23 | Unisys Corporation | Hardware-based, LZW data compression co-processor |
US9813514B2 (en) | 2002-06-12 | 2017-11-07 | Good Technology Holdings Limited | Information repository system including a wireless device and related method |
US8516034B1 (en) | 2002-07-08 | 2013-08-20 | Good Technology Software, Inc | System and method for modifying application behavior based on network bandwidth |
US7886093B1 (en) * | 2003-07-31 | 2011-02-08 | Hewlett-Packard Development Company, L.P. | Electronic device network supporting compression and decompression in electronic devices |
CN103067353B (zh) * | 2004-03-02 | 2016-07-20 | 代维网络有限公司 | 将来自远程发送者的数据流传递到远程目的地的方法 |
US7904895B1 (en) | 2004-04-21 | 2011-03-08 | Hewlett-Packard Develpment Company, L.P. | Firmware update in electronic devices employing update agent in a flash memory card |
US7302543B2 (en) * | 2004-06-16 | 2007-11-27 | Nec Laboratories America, Inc. | Compressed memory architecture for embedded systems |
US7474750B2 (en) * | 2004-06-16 | 2009-01-06 | Nec Laboratories America, Inc. | Dynamic content-aware memory compression and encryption architecture |
GB0416481D0 (en) * | 2004-07-23 | 2004-08-25 | Hewlett Packard Development Co | Method, apparatus and system for data block rearrangement for LZ data compression |
US8526940B1 (en) | 2004-08-17 | 2013-09-03 | Palm, Inc. | Centralized rules repository for smart phone customer care |
US20060106870A1 (en) * | 2004-11-16 | 2006-05-18 | International Business Machines Corporation | Data compression using a nested hierarchy of fixed phrase length dictionaries |
US8171169B2 (en) | 2005-03-14 | 2012-05-01 | Citrix Systems, Inc. | Method and apparatus for updating a graphical display in a distributed processing environment |
US8423673B2 (en) | 2005-03-14 | 2013-04-16 | Citrix Systems, Inc. | Method and apparatus for updating a graphical display in a distributed processing environment using compression |
US7280052B2 (en) * | 2005-09-30 | 2007-10-09 | Intel Corporation | Apparatus, system, and method of data compression |
US7620392B1 (en) | 2006-02-27 | 2009-11-17 | Good Technology, Inc. | Method and system for distributing and updating software in wireless devices |
EP2025095A2 (en) | 2006-06-08 | 2009-02-18 | Hewlett-Packard Development Company, L.P. | Device management in a network |
US20080017227A1 (en) * | 2006-07-19 | 2008-01-24 | Ward Barry D | Walking aid apparatus |
EP2047420A4 (en) | 2006-07-27 | 2009-11-18 | Hewlett Packard Development Co | USER EXPERIENCE AND DEPENDENCE MANAGEMENT IN A MOBILE DEVICE |
US7532134B2 (en) | 2007-03-12 | 2009-05-12 | Citrix Systems, Inc. | Systems and methods for sharing compression histories between multiple devices |
US7827237B2 (en) * | 2007-03-12 | 2010-11-02 | Citrix Systems, Inc. | Systems and methods for identifying long matches of data in a compression history |
US7865585B2 (en) | 2007-03-12 | 2011-01-04 | Citrix Systems, Inc. | Systems and methods for providing dynamic ad hoc proxy-cache hierarchies |
US7460038B2 (en) | 2007-03-12 | 2008-12-02 | Citrix Systems, Inc. | Systems and methods of clustered sharing of compression histories |
US7619545B2 (en) | 2007-03-12 | 2009-11-17 | Citrix Systems, Inc. | Systems and methods of using application and protocol specific parsing for compression |
US8255570B2 (en) | 2007-03-12 | 2012-08-28 | Citrix Systems, Inc. | Systems and methods of compression history expiration and synchronization |
US7872596B2 (en) * | 2009-02-26 | 2011-01-18 | Red Hat, Inc. | Dictionary-based compression |
IL205528A (en) * | 2009-05-04 | 2014-02-27 | Storwize Ltd | A method and system for compressing logical information objects for storage |
KR101049699B1 (ko) * | 2009-07-17 | 2011-07-15 | (주)이스트소프트 | 데이터의 압축방법 |
DE112011104633B4 (de) * | 2010-12-28 | 2016-11-10 | International Business Machines Corporation | Einheit zum Ermitteln des Ausgangspunkts für eine Suche |
RU2450441C1 (ru) * | 2011-03-14 | 2012-05-10 | Общество с ограниченной ответственностью "Астрософт Интернешн" | Способ и устройство сжатия данных |
JPWO2014030180A1 (ja) * | 2012-08-20 | 2016-07-28 | 富士通株式会社 | 符号化情報生成プログラム、符号化情報生成方法、符号化情報生成装置、復号化情報生成プログラム、復号化情報生成方法及び復号化情報生成装置 |
US9519801B2 (en) * | 2012-12-19 | 2016-12-13 | Salesforce.Com, Inc. | Systems, methods, and apparatuses for implementing data masking via compression dictionaries |
WO2015065203A1 (en) * | 2013-10-30 | 2015-05-07 | Rodney John Smith | A method of protecting communications |
US9306596B2 (en) * | 2014-06-27 | 2016-04-05 | Intel Corporation | Hybrid CAM assisted deflate decompression accelerator |
CN104410424B (zh) * | 2014-11-26 | 2017-06-16 | 西安电子科技大学 | 嵌入式设备内存数据的快速无损压缩方法 |
JP7210130B2 (ja) * | 2017-04-07 | 2023-01-23 | 富士通株式会社 | 符号化プログラム、符号化方法および符号化装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4881075A (en) * | 1987-10-15 | 1989-11-14 | Digital Equipment Corporation | Method and apparatus for adaptive data compression |
US4929946A (en) * | 1989-02-09 | 1990-05-29 | Storage Technology Corporation | Adaptive data compression apparatus including run length encoding for a tape drive system |
US5010345A (en) * | 1989-12-28 | 1991-04-23 | International Business Machines Corporation | Data compression method |
US5373290A (en) * | 1991-09-25 | 1994-12-13 | Hewlett-Packard Corporation | Apparatus and method for managing multiple dictionaries in content addressable memory based data compression |
US5342054A (en) * | 1993-03-25 | 1994-08-30 | Timecap, Inc. | Gold practice apparatus |
-
1994
- 1994-02-07 US US08/192,878 patent/US5455576A/en not_active Expired - Lifetime
-
1995
- 1995-01-20 EP EP95300346A patent/EP0666651B1/en not_active Expired - Lifetime
- 1995-01-20 DE DE69518022T patent/DE69518022T2/de not_active Expired - Lifetime
- 1995-01-31 JP JP01334795A patent/JP3309028B2/ja not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6927706B2 (en) | 2003-02-24 | 2005-08-09 | Oki Electric Industrial, Co., Ltd | Data compressing apparatus and data decoding apparatus |
Also Published As
Publication number | Publication date |
---|---|
JP3309028B2 (ja) | 2002-07-29 |
US5455576A (en) | 1995-10-03 |
DE69518022T2 (de) | 2000-12-21 |
EP0666651A3 (en) | 1996-05-22 |
EP0666651A2 (en) | 1995-08-09 |
DE69518022D1 (de) | 2000-08-24 |
EP0666651B1 (en) | 2000-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3309028B2 (ja) | 連想記憶メモリ内の複数辞書管理を改良したlempel−zivデータ圧縮のための装置、及び方法 | |
EP0573208B1 (en) | Apparatus and method for managing multiple dictionaries in content addressable based data compression | |
US5485526A (en) | Memory circuit for lossless data compression/decompression dictionary storage | |
US5243341A (en) | Lempel-Ziv compression scheme with enhanced adapation | |
US5175543A (en) | Dictionary reset performance enhancement for data compression applications | |
CA1223965A (en) | High speed data compression and decompression apparatus and method | |
JP3342700B2 (ja) | ストリングリバーサル機構を具備した単一クロックサイクルデータ圧縮装置/圧縮解除装置 | |
US5410671A (en) | Data compression/decompression processor | |
JP2713369B2 (ja) | データ圧縮装置及び方法 | |
US5710562A (en) | Method and apparatus for compressing arbitrary data | |
US5229768A (en) | Adaptive data compression system | |
AU637826B2 (en) | Improved data compression apparatus | |
JP3225638B2 (ja) | データを圧縮するための装置及び方法並びにデータ処理システム | |
US7538696B2 (en) | System and method for Huffman decoding within a compression engine | |
US20020101367A1 (en) | System and method for generating optimally compressed data from a plurality of data compression/decompression engines implementing different data compression algorithms | |
US20020091905A1 (en) | Parallel compression and decompression system and method having multiple parallel compression and decompression engines | |
KR20020075889A (ko) | 보다 효율적인 데이터 압축 | |
US5686912A (en) | Data compression method and apparatus with optimized transitions between compressed and uncompressed modes | |
JP3611319B2 (ja) | データの圧縮に必要な時間を短縮するための方法および装置 | |
JP3171510B2 (ja) | 辞書ベースのメモリ内のデータを圧縮および圧縮解除する方法 | |
US5745603A (en) | Two dimensional context model obtained without a line buffer for arithmetic coding | |
JPH03179562A (ja) | データ記録装置及びデータ編集方法 | |
GB2311635A (en) | Compression of data for storage using two CAM dictionaries in parallel | |
JPH03179520A (ja) | データデコーダ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090517 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100517 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110517 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |